diff --git a/bin/pixi.js b/bin/pixi.js index df52170..915f5c1 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -1,7 +1,7 @@ /** * @license * pixi.js - v3.0.10-dev - * Compiled 2016-01-18T21:33:26.540Z + * Compiled 2016-01-18T22:34:48.843Z * * pixi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -8072,7 +8072,7 @@ core.CanvasRenderer.registerPlugin('accessibility', AccessibilityManager); -},{"../core":53,"./accessibleTarget":36}],36:[function(require,module,exports){ +},{"../core":54,"./accessibleTarget":36}],36:[function(require,module,exports){ /** * Default property values of accessible objects * used by {@link PIXI.accessibility.AccessibilityManager}. @@ -8759,7 +8759,7 @@ this.children[i].updateTransform(); } - this.dirtyTransform = false; + this.transform.dirty = false; }; // performance increase to avoid using call.. (10x faster) @@ -9005,12 +9005,12 @@ this.children = null; }; -},{"../math":56,"../textures/RenderTexture":100,"../utils":107,"./DisplayObject":40}],40:[function(require,module,exports){ +},{"../math":57,"../textures/RenderTexture":101,"../utils":108,"./DisplayObject":40}],40:[function(require,module,exports){ var math = require('../math'), RenderTexture = require('../textures/RenderTexture'), EventEmitter = require('eventemitter3'), CONST = require('../const'), - Transform = require('./Transform'), + Transform = require('./TransformStatic'), _tempMatrix = new math.Matrix(), _tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1, children:[]}; @@ -9122,22 +9122,6 @@ */ this.filterArea = null; - /**xww - * cached sin rotation - * - * @member {number} - * @private - */ - this._sr = 0; - - /** - * cached cos rotation - * - * @member {number} - * @private - */ - this._cr = 1; - /** * The original, cached bounds of the object * @@ -9162,7 +9146,7 @@ */ this._mask = null; - this.dirtyTransform = true; + // this.dirtyTransform = true; } // constructor @@ -9246,9 +9230,9 @@ set: function (value) { this._rotation = value; - this.dirtyTransform = true; - this._sr = Math.sin(value); - this._cr = Math.cos(value); + this.transform.dirty = true; + this.transform._sr = Math.sin(value); + this.transform._cr = Math.cos(value); } }, @@ -9352,6 +9336,7 @@ */ DisplayObject.prototype.updateTransform = function () { + //if(this.transform.dirty || parent.transform.dirty) this.transform.updateTransform(this.parent.transform); // multiply the alphas.. this.worldAlpha = this.alpha * this.parent.worldAlpha; @@ -9554,9 +9539,79 @@ this.filterArea = null; }; -},{"../const":38,"../math":56,"../textures/RenderTexture":100,"./Transform":41,"eventemitter3":25}],41:[function(require,module,exports){ -var math = require('../math'); +},{"../const":38,"../math":57,"../textures/RenderTexture":101,"./TransformStatic":42,"eventemitter3":25}],41:[function(require,module,exports){ +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents + * the horizontal axis and y represents the vertical axis. + * + * @class + * @memberof PIXI + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +function ObservablePoint(transform, x, y) +{ + this._x = x || 0; + this._y = y || 0; + this.transform = transform; +} + +ObservablePoint.prototype.constructor = ObservablePoint; +module.exports = ObservablePoint; + + + +Object.defineProperties(ObservablePoint.prototype, { + /** + * The position of the displayObject on the x axis relative to the local coordinates of the parent. + * + * @member {number} + * @memberof PIXI.DisplayObject# + */ + x: { + get: function () + { + return this._x; + }, + set: function (value) + { + this._x = value; + this.transform.dirty = true; + } + }, + + y: { + get: function () + { + return this._y; + }, + set: function (value) + { + this._y = value; + this.transform.dirty = true; + } + } +}); + +/** + * Sets the point to a new x and y position. + * If y is omitted, both x and y will be set to x. + * + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +ObservablePoint.prototype.set = function (x, y) +{ + this._x = x || 0; + this._y = y || ( (y !== 0) ? this._x : 0 ); + + this.transform.dirty = true; +}; + +},{}],42:[function(require,module,exports){ +var math = require('../math'); +var ObservablePoint = require('./ObservablePoint'); /** * The Point object represents a location in a two-dimensional coordinate system, where x represents @@ -9572,17 +9627,19 @@ this.worldTransform = new math.Matrix(); this.localTransform = new math.Matrix(); - this.position = new math.Point(0.0); - this.scale = new math.Point(1,1); - this.pivot = new math.Point(0.0); - this.skew = new math.Point(0.0); + this.position = new ObservablePoint(this, 0); + this.scale = new ObservablePoint(this,1, 1); + this.pivot = new ObservablePoint(this, 0, 0); + this.skew = new ObservablePoint(this, 0,0); this.rotation = 0; this._sr = Math.sin(0); this._cr = Math.cos(0); - this.dirty = true; + + + this.updated = true; } Transform.prototype.constructor = Transform; @@ -9593,19 +9650,20 @@ var wt = this.worldTransform; var lt = this.localTransform; - if(this.dirty) { // get the matrix values of the displayobject based on its transform properties.. - lt.a = this._cr * this.scale.x; - lt.b = this._sr * this.scale.x; - lt.c = -this._sr * this.scale.y; - lt.d = this._cr * this.scale.y; - lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c); - lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d); + lt.a = this._cr * this.scale._x; + lt.b = this._sr * this.scale._x; + lt.c = -this._sr * this.scale._y; + lt.d = this._cr * this.scale._y; + lt.tx = this.position._x - (this.pivot._x * lt.a + this.pivot._y * lt.c); + lt.ty = this.position._y - (this.pivot._x * lt.b + this.pivot._y * lt.d); } - if(this.dirty || parent.dirty) + this.updated = this.dirty || parentTransform.dirty; + + if(this.updated) { // concat the parent matrix with the objects transform. wt.a = lt.a * pt.a + lt.b * pt.c; @@ -9613,21 +9671,16 @@ wt.c = lt.c * pt.a + lt.d * pt.c; wt.d = lt.c * pt.b + lt.d * pt.d; wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; - wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; - - // this.dirty = false; - // return true; + wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; } - -// this.dirty = false; - // return false; + } module.exports = Transform; -},{"../math":56}],42:[function(require,module,exports){ +},{"../math":57,"./ObservablePoint":41}],43:[function(require,module,exports){ var Container = require('../display/Container'), Texture = require('../textures/Texture'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), @@ -10787,7 +10840,7 @@ this._localBounds = null; }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/canvas/utils/CanvasGraphics":69,"../textures/Texture":101,"./GraphicsData":43}],43:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/canvas/utils/CanvasGraphics":70,"../textures/Texture":102,"./GraphicsData":44}],44:[function(require,module,exports){ /** * A GraphicsData object. * @@ -10880,7 +10933,7 @@ this.shape = null; }; -},{}],44:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ var utils = require('../../utils'), math = require('../../math'), CONST = require('../../const'), @@ -11200,7 +11253,7 @@ }; -},{"../../const":38,"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils":107,"./WebGLGraphicsData":45,"./shaders/PrimitiveShader":46,"./utils/buildCircle":47,"./utils/buildComplexPoly":48,"./utils/buildLine":49,"./utils/buildPoly":50,"./utils/buildRectangle":51,"./utils/buildRoundedRectangle":52,"earcut":24}],45:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils":108,"./WebGLGraphicsData":46,"./shaders/PrimitiveShader":47,"./utils/buildCircle":48,"./utils/buildComplexPoly":49,"./utils/buildLine":50,"./utils/buildPoly":51,"./utils/buildRectangle":52,"./utils/buildRoundedRectangle":53,"earcut":24}],46:[function(require,module,exports){ /** * An object containing WebGL specific properties to be used by the WebGL renderer * @@ -11318,7 +11371,7 @@ this.glIndices = null; }; -},{}],46:[function(require,module,exports){ +},{}],47:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -11370,7 +11423,7 @@ module.exports = PrimitiveShader; -},{"pixi-gl-core":1}],47:[function(require,module,exports){ +},{"pixi-gl-core":1}],48:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11457,7 +11510,7 @@ module.exports = buildCircle; -},{"../../../utils":107,"./buildLine":49}],48:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],49:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11528,7 +11581,7 @@ module.exports = buildComplexPoly; -},{"../../../utils":107,"./buildLine":49}],49:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],50:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'); @@ -11748,7 +11801,7 @@ }; module.exports = buildLine; -},{"../../../math":56,"../../../utils":107}],50:[function(require,module,exports){ +},{"../../../math":57,"../../../utils":108}],51:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -11811,7 +11864,7 @@ module.exports = buildPoly; -},{"../../../utils":107}],51:[function(require,module,exports){ +},{"../../../utils":108}],52:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11882,7 +11935,7 @@ }; module.exports = buildRectangle; -},{"../../../utils":107,"./buildLine":49}],52:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],53:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -12010,7 +12063,7 @@ module.exports = buildRoundedRectangle; -},{"../../../utils":107,"./buildLine":49}],53:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],54:[function(require,module,exports){ /** * @file Main export of the PIXI core library * @author Mat Groves @@ -12106,7 +12159,7 @@ } }); -},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":42,"./graphics/GraphicsData":43,"./graphics/webgl/GraphicsRenderer":44,"./math":56,"./particles/ParticleContainer":62,"./particles/webgl/ParticleRenderer":64,"./renderers/canvas/CanvasRenderer":67,"./renderers/canvas/utils/CanvasBuffer":68,"./renderers/canvas/utils/CanvasGraphics":69,"./renderers/webgl/WebGLRenderer":73,"./renderers/webgl/filters/AbstractFilter":74,"./renderers/webgl/filters/FXAAFilter":75,"./renderers/webgl/filters/SpriteMaskFilter":76,"./renderers/webgl/managers/ShaderManager":80,"./renderers/webgl/managers/WebGLManager":82,"./renderers/webgl/shaders/Shader":85,"./renderers/webgl/utils/ObjectRenderer":88,"./renderers/webgl/utils/RenderTarget":90,"./sprites/Sprite":94,"./sprites/webgl/SpriteRenderer":95,"./text/Text":97,"./textures/BaseRenderTexture":98,"./textures/BaseTexture":99,"./textures/RenderTexture":100,"./textures/Texture":101,"./textures/TextureUvs":102,"./textures/VideoBaseTexture":103,"./ticker":105,"./utils":107,"pixi-gl-core":1}],54:[function(require,module,exports){ +},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":43,"./graphics/GraphicsData":44,"./graphics/webgl/GraphicsRenderer":45,"./math":57,"./particles/ParticleContainer":63,"./particles/webgl/ParticleRenderer":65,"./renderers/canvas/CanvasRenderer":68,"./renderers/canvas/utils/CanvasBuffer":69,"./renderers/canvas/utils/CanvasGraphics":70,"./renderers/webgl/WebGLRenderer":74,"./renderers/webgl/filters/AbstractFilter":75,"./renderers/webgl/filters/FXAAFilter":76,"./renderers/webgl/filters/SpriteMaskFilter":77,"./renderers/webgl/managers/ShaderManager":81,"./renderers/webgl/managers/WebGLManager":83,"./renderers/webgl/shaders/Shader":86,"./renderers/webgl/utils/ObjectRenderer":89,"./renderers/webgl/utils/RenderTarget":91,"./sprites/Sprite":95,"./sprites/webgl/SpriteRenderer":96,"./text/Text":98,"./textures/BaseRenderTexture":99,"./textures/BaseTexture":100,"./textures/RenderTexture":101,"./textures/Texture":102,"./textures/TextureUvs":103,"./textures/VideoBaseTexture":104,"./ticker":106,"./utils":108,"pixi-gl-core":1}],55:[function(require,module,exports){ // @todo - ignore the too many parameters warning for now // should either fix it or change the jshint config // jshint -W072 @@ -12546,7 +12599,7 @@ */ Matrix.TEMP_MATRIX = new Matrix(); -},{"./Point":55}],55:[function(require,module,exports){ +},{"./Point":56}],56:[function(require,module,exports){ /** * The Point object represents a location in a two-dimensional coordinate system, where x represents * the horizontal axis and y represents the vertical axis. @@ -12616,7 +12669,7 @@ this.y = y || ( (y !== 0) ? this.x : 0 ) ; }; -},{}],56:[function(require,module,exports){ +},{}],57:[function(require,module,exports){ /** * Math classes and utilities mixed into PIXI namespace. * @@ -12638,7 +12691,7 @@ RoundedRectangle: require('./shapes/RoundedRectangle') }; -},{"./Matrix":54,"./Point":55,"./shapes/Circle":57,"./shapes/Ellipse":58,"./shapes/Polygon":59,"./shapes/Rectangle":60,"./shapes/RoundedRectangle":61}],57:[function(require,module,exports){ +},{"./Matrix":55,"./Point":56,"./shapes/Circle":58,"./shapes/Ellipse":59,"./shapes/Polygon":60,"./shapes/Rectangle":61,"./shapes/RoundedRectangle":62}],58:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12726,7 +12779,7 @@ return new Rectangle(this.x - this.radius, this.y - this.radius, this.radius * 2, this.radius * 2); }; -},{"../../const":38,"./Rectangle":60}],58:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],59:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12821,7 +12874,7 @@ return new Rectangle(this.x - this.width, this.y - this.height, this.width, this.height); }; -},{"../../const":38,"./Rectangle":60}],59:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],60:[function(require,module,exports){ var Point = require('../Point'), CONST = require('../../const'); @@ -12924,7 +12977,7 @@ return inside; }; -},{"../../const":38,"../Point":55}],60:[function(require,module,exports){ +},{"../../const":38,"../Point":56}],61:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13018,7 +13071,7 @@ return false; }; -},{"../../const":38}],61:[function(require,module,exports){ +},{"../../const":38}],62:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13110,7 +13163,7 @@ return false; }; -},{"../../const":38}],62:[function(require,module,exports){ +},{"../../const":38}],63:[function(require,module,exports){ var Container = require('../display/Container'), CONST = require('../const'); @@ -13429,7 +13482,7 @@ this._buffers = null; }; -},{"../const":38,"../display/Container":39}],63:[function(require,module,exports){ +},{"../const":38,"../display/Container":39}],64:[function(require,module,exports){ /** * @author Mat Groves @@ -13649,7 +13702,7 @@ this.gl.deleteBuffer(this.staticBuffer); }; -},{}],64:[function(require,module,exports){ +},{}],65:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), ParticleShader = require('./ParticleShader'), @@ -14125,7 +14178,7 @@ this.tempMatrix = null; }; -},{"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"./ParticleBuffer":63,"./ParticleShader":65}],65:[function(require,module,exports){ +},{"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"./ParticleBuffer":64,"./ParticleShader":66}],66:[function(require,module,exports){ var TextureShader = require('../../renderers/webgl/shaders/TextureShader'); /** @@ -14203,7 +14256,7 @@ module.exports = ParticleShader; -},{"../../renderers/webgl/shaders/TextureShader":86}],66:[function(require,module,exports){ +},{"../../renderers/webgl/shaders/TextureShader":87}],67:[function(require,module,exports){ var utils = require('../utils'), math = require('../math'), CONST = require('../const'), @@ -14464,7 +14517,7 @@ this._backgroundColorString = null; }; -},{"../const":38,"../math":56,"../utils":107,"eventemitter3":25}],67:[function(require,module,exports){ +},{"../const":38,"../math":57,"../utils":108,"eventemitter3":25}],68:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), CanvasMaskManager = require('./utils/CanvasMaskManager'), utils = require('../../utils'), @@ -14732,7 +14785,7 @@ } }; -},{"../../const":38,"../../math":56,"../../utils":107,"../SystemRenderer":66,"./utils/CanvasMaskManager":70}],68:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../utils":108,"../SystemRenderer":67,"./utils/CanvasMaskManager":71}],69:[function(require,module,exports){ /** * Creates a Canvas element of the given size. * @@ -14832,7 +14885,7 @@ this.canvas = null; }; -},{}],69:[function(require,module,exports){ +},{}],70:[function(require,module,exports){ var CONST = require('../../../const'); /** @@ -15186,7 +15239,7 @@ }; -},{"../../../const":38}],70:[function(require,module,exports){ +},{"../../../const":38}],71:[function(require,module,exports){ var CanvasGraphics = require('./CanvasGraphics'); /** @@ -15248,7 +15301,7 @@ CanvasMaskManager.prototype.destroy = function () {}; -},{"./CanvasGraphics":69}],71:[function(require,module,exports){ +},{"./CanvasGraphics":70}],72:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -15500,7 +15553,7 @@ */ CanvasTinter.tintMethod = CanvasTinter.canUseMultiply ? CanvasTinter.tintWithMultiply : CanvasTinter.tintWithPerPixel; -},{"../../../utils":107}],72:[function(require,module,exports){ +},{"../../../utils":108}],73:[function(require,module,exports){ var GLTexture = require('pixi-gl-core').GLTexture, utils = require('../../utils'); @@ -15640,7 +15693,7 @@ module.exports = TextureManager; -},{"../../utils":107,"pixi-gl-core":1}],73:[function(require,module,exports){ +},{"../../utils":108,"pixi-gl-core":1}],74:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), ShaderManager = require('./managers/ShaderManager'), MaskManager = require('./managers/MaskManager'), @@ -16037,7 +16090,7 @@ }; -},{"../../const":38,"../../utils":107,"../SystemRenderer":66,"./TextureManager":72,"./filters/FXAAFilter":75,"./managers/BlendModeManager":77,"./managers/FilterManager":78,"./managers/MaskManager":79,"./managers/ShaderManager":80,"./managers/StencilManager":81,"./utils/ObjectRenderer":88,"./utils/RenderTarget":90,"./utils/mapWebGLBlendModesToPixi":92,"./utils/mapWebGLDrawModesToPixi":93,"pixi-gl-core":1}],74:[function(require,module,exports){ +},{"../../const":38,"../../utils":108,"../SystemRenderer":67,"./TextureManager":73,"./filters/FXAAFilter":76,"./managers/BlendModeManager":78,"./managers/FilterManager":79,"./managers/MaskManager":80,"./managers/ShaderManager":81,"./managers/StencilManager":82,"./utils/ObjectRenderer":89,"./utils/RenderTarget":91,"./utils/mapWebGLBlendModesToPixi":93,"./utils/mapWebGLDrawModesToPixi":94,"pixi-gl-core":1}],75:[function(require,module,exports){ var DefaultShader = require('../shaders/TextureShader'); /** @@ -16149,7 +16202,7 @@ } }; -},{"../shaders/TextureShader":86}],75:[function(require,module,exports){ +},{"../shaders/TextureShader":87}],76:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'); // @see https://github.com/substack/brfs/issues/25 @@ -16204,7 +16257,7 @@ filterManager.applyFilter(shader, input, output); }; -},{"./AbstractFilter":74}],76:[function(require,module,exports){ +},{"./AbstractFilter":75}],77:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'), math = require('../../../math'); @@ -16301,7 +16354,7 @@ } }); -},{"../../../math":56,"./AbstractFilter":74}],77:[function(require,module,exports){ +},{"../../../math":57,"./AbstractFilter":75}],78:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'); /** @@ -16345,7 +16398,7 @@ return true; }; -},{"./WebGLManager":82}],78:[function(require,module,exports){ +},{"./WebGLManager":83}],79:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), RenderTarget = require('../utils/RenderTarget'), CONST = require('../../../const'), @@ -16797,7 +16850,7 @@ this.texturePool = null; }; -},{"../../../const":38,"../../../math":56,"../utils/Quad":89,"../utils/RenderTarget":90,"./WebGLManager":82}],79:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../utils/Quad":90,"../utils/RenderTarget":91,"./WebGLManager":83}],80:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), AlphaMaskFilter = require('../filters/SpriteMaskFilter'); @@ -16912,7 +16965,7 @@ }; -},{"../filters/SpriteMaskFilter":76,"./WebGLManager":82}],80:[function(require,module,exports){ +},{"../filters/SpriteMaskFilter":77,"./WebGLManager":83}],81:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), TextureShader = require('../shaders/TextureShader'), ComplexPrimitiveShader = require('../shaders/ComplexPrimitiveShader'), @@ -17082,7 +17135,7 @@ this.tempAttribState = null; }; -},{"../../../utils":107,"../shaders/ComplexPrimitiveShader":83,"../shaders/PrimitiveShader":84,"../shaders/TextureShader":86,"./WebGLManager":82}],81:[function(require,module,exports){ +},{"../../../utils":108,"../shaders/ComplexPrimitiveShader":84,"../shaders/PrimitiveShader":85,"../shaders/TextureShader":87,"./WebGLManager":83}],82:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), utils = require('../../../utils'); @@ -17449,7 +17502,7 @@ }; -},{"../../../utils":107,"./WebGLManager":82}],82:[function(require,module,exports){ +},{"../../../utils":108,"./WebGLManager":83}],83:[function(require,module,exports){ /** * @class * @memberof PIXI @@ -17490,7 +17543,7 @@ this.renderer = null; }; -},{}],83:[function(require,module,exports){ +},{}],84:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17552,7 +17605,7 @@ ComplexPrimitiveShader.prototype.constructor = ComplexPrimitiveShader; module.exports = ComplexPrimitiveShader; -},{"./Shader":85}],84:[function(require,module,exports){ +},{"./Shader":86}],85:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17615,7 +17668,7 @@ PrimitiveShader.prototype.constructor = PrimitiveShader; module.exports = PrimitiveShader; -},{"./Shader":85}],85:[function(require,module,exports){ +},{"./Shader":86}],86:[function(require,module,exports){ /*global console */ var utils = require('../../../utils'); @@ -18143,7 +18196,7 @@ return shader; }; -},{"../../../utils":107}],86:[function(require,module,exports){ +},{"../../../utils":108}],87:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -18254,7 +18307,7 @@ '}' ].join('\n'); -},{"./Shader":85}],87:[function(require,module,exports){ +},{"./Shader":86}],88:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -18335,7 +18388,7 @@ '}' ].join('\n'); -},{"pixi-gl-core":1}],88:[function(require,module,exports){ +},{"pixi-gl-core":1}],89:[function(require,module,exports){ var WebGLManager = require('../managers/WebGLManager'); /** @@ -18393,7 +18446,7 @@ // render the object }; -},{"../managers/WebGLManager":82}],89:[function(require,module,exports){ +},{"../managers/WebGLManager":83}],90:[function(require,module,exports){ /** * Helper class to create a quad * @@ -18548,7 +18601,7 @@ -},{}],90:[function(require,module,exports){ +},{}],91:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'), CONST = require('../../../const'), @@ -18853,7 +18906,7 @@ this.texture = null; }; -},{"../../../const":38,"../../../math":56,"../../../utils":107,"./StencilMaskStack":91,"pixi-gl-core":1}],91:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../../../utils":108,"./StencilMaskStack":92,"pixi-gl-core":1}],92:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -18886,7 +18939,7 @@ StencilMaskStack.prototype.constructor = StencilMaskStack; module.exports = StencilMaskStack; -},{}],92:[function(require,module,exports){ +},{}],93:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18923,7 +18976,7 @@ module.exports = mapWebGLBlendModesToPixi; -},{"../../../const":38}],93:[function(require,module,exports){ +},{"../../../const":38}],94:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18947,7 +19000,7 @@ module.exports = mapWebGLDrawModesToPixi; -},{"../../../const":38}],94:[function(require,module,exports){ +},{"../../../const":38}],95:[function(require,module,exports){ var math = require('../math'), Texture = require('../textures/Texture'), Container = require('../display/Container'), @@ -19043,7 +19096,6 @@ // call texture setter this.texture = texture || Texture.EMPTY; this.textureDirty = true - this.vertexDirty = true; this.vertexData = new Float32Array(8); } @@ -19153,7 +19205,6 @@ Sprite.prototype.caclulateVertices = function () { - var texture = this._texture, wt = this.transform.worldTransform, a = wt.a, b = wt.b, c = wt.c, d = wt.d, tx = wt.tx, ty = wt.ty, @@ -19208,22 +19259,11 @@ */ Sprite.prototype._renderWebGL = function (renderer) { - if(this.textureDirty) + if(this.transform.updated || this.textureDirty) { this.textureDirty = false; - - this._onTextureUpdate(); - - this.vertexDirty = true; - } - - if(this.vertexDirty) - { - this.vertexDirty = false; - // set the vertex data this.caclulateVertices(); - } renderer.setObjectRenderer(renderer.plugins.sprite); @@ -19566,7 +19606,7 @@ return new Sprite(Texture.fromImage(imageId, crossorigin, scaleMode)); }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasTinter":71,"../textures/Texture":101,"../utils":107}],95:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasTinter":72,"../textures/Texture":102,"../utils":108}],96:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), TextureShader = require('../../renderers/webgl/shaders/_TextureShader'), @@ -19927,7 +19967,7 @@ this.shader = null; }; -},{"../../const":38,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/shaders/_TextureShader":87,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils/createIndicesForQuads":106,"./generateMultiTextureShader":96,"pixi-gl-core":1}],96:[function(require,module,exports){ +},{"../../const":38,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/shaders/_TextureShader":88,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils/createIndicesForQuads":107,"./generateMultiTextureShader":97,"pixi-gl-core":1}],97:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; @@ -19990,7 +20030,7 @@ module.exports = generateMultiTextureShader; -},{"pixi-gl-core":1}],97:[function(require,module,exports){ +},{"pixi-gl-core":1}],98:[function(require,module,exports){ var Sprite = require('../sprites/Sprite'), Texture = require('../textures/Texture'), math = require('../math'), @@ -20611,7 +20651,7 @@ this._texture.destroy(destroyBaseTexture === undefined ? true : destroyBaseTexture); }; -},{"../const":38,"../math":56,"../sprites/Sprite":94,"../textures/Texture":101,"../utils":107}],98:[function(require,module,exports){ +},{"../const":38,"../math":57,"../sprites/Sprite":95,"../textures/Texture":102,"../utils":108}],99:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), Texture = require('./Texture'), RenderTarget = require('../renderers/webgl/utils/RenderTarget'), @@ -21095,7 +21135,7 @@ return this.getPixels(tempRect); }; -},{"../const":38,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/webgl/managers/FilterManager":78,"../renderers/webgl/utils/RenderTarget":90,"./BaseTexture":99,"./Texture":101}],99:[function(require,module,exports){ +},{"../const":38,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/webgl/managers/FilterManager":79,"../renderers/webgl/utils/RenderTarget":91,"./BaseTexture":100,"./Texture":102}],100:[function(require,module,exports){ var utils = require('../utils'), CONST = require('../const'), EventEmitter = require('eventemitter3'); @@ -21532,7 +21572,7 @@ return baseTexture; }; -},{"../const":38,"../utils":107,"eventemitter3":25}],100:[function(require,module,exports){ +},{"../const":38,"../utils":108,"eventemitter3":25}],101:[function(require,module,exports){ var BaseRenderTexture = require('./BaseRenderTexture'), Texture = require('./Texture'), math = require('../math'), @@ -21727,7 +21767,7 @@ } -},{"../const":38,"../math":56,"./BaseRenderTexture":98,"./Texture":101}],101:[function(require,module,exports){ +},{"../const":38,"../math":57,"./BaseRenderTexture":99,"./Texture":102}],102:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), VideoBaseTexture = require('./VideoBaseTexture'), TextureUvs = require('./TextureUvs'), @@ -22153,7 +22193,7 @@ */ Texture.EMPTY = new Texture(new BaseTexture()); -},{"../math":56,"../utils":107,"./BaseTexture":99,"./TextureUvs":102,"./VideoBaseTexture":103,"eventemitter3":25}],102:[function(require,module,exports){ +},{"../math":57,"../utils":108,"./BaseTexture":100,"./TextureUvs":103,"./VideoBaseTexture":104,"eventemitter3":25}],103:[function(require,module,exports){ /** * A standard object to store the Uvs of a texture @@ -22234,7 +22274,7 @@ this.uvs_uint32[3] = (((this.y3 * 65535) & 0xFFFF) << 16) | ((this.x3 * 65535) & 0xFFFF); }; -},{}],103:[function(require,module,exports){ +},{}],104:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), utils = require('../utils'); @@ -22471,7 +22511,7 @@ return source; } -},{"../utils":107,"./BaseTexture":99}],104:[function(require,module,exports){ +},{"../utils":108,"./BaseTexture":100}],105:[function(require,module,exports){ var CONST = require('../const'), EventEmitter = require('eventemitter3'), // Internal event used by composed emitter @@ -22826,7 +22866,7 @@ module.exports = Ticker; -},{"../const":38,"eventemitter3":25}],105:[function(require,module,exports){ +},{"../const":38,"eventemitter3":25}],106:[function(require,module,exports){ var Ticker = require('./Ticker'); /** @@ -22882,7 +22922,7 @@ Ticker: Ticker }; -},{"./Ticker":104}],106:[function(require,module,exports){ +},{"./Ticker":105}],107:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -22915,7 +22955,7 @@ }; module.exports = createIndicesForQuads; -},{}],107:[function(require,module,exports){ +},{}],108:[function(require,module,exports){ var CONST = require('../const'); /** @@ -23192,7 +23232,7 @@ BaseTextureCache: {} }; -},{"../const":38,"./pluginTarget":108,"async":16,"eventemitter3":25}],108:[function(require,module,exports){ +},{"../const":38,"./pluginTarget":109,"async":16,"eventemitter3":25}],109:[function(require,module,exports){ /** * Mixins functionality to make an object have "plugins". * @@ -23262,7 +23302,7 @@ } }; -},{}],109:[function(require,module,exports){ +},{}],110:[function(require,module,exports){ /*global console */ var core = require('./core'), mesh = require('./mesh'), @@ -23613,7 +23653,7 @@ return core.utils.uid(); }; -},{"./core":53,"./extras":116,"./filters":133,"./mesh":158}],110:[function(require,module,exports){ +},{"./core":54,"./extras":117,"./filters":134,"./mesh":159}],111:[function(require,module,exports){ var core = require('../core'); /** @@ -24001,7 +24041,7 @@ BitmapText.fonts = {}; -},{"../core":53}],111:[function(require,module,exports){ +},{"../core":54}],112:[function(require,module,exports){ var core = require('../core'); /** @@ -24321,7 +24361,7 @@ return new MovieClip(textures); }; -},{"../core":53}],112:[function(require,module,exports){ +},{"../core":54}],113:[function(require,module,exports){ var core = require('../core'), // a sprite use dfor rendering textures.. tempPoint = new core.Point(), @@ -24773,7 +24813,7 @@ return new TilingSprite(core.Texture.fromImage(imageId, crossorigin, scaleMode),width,height); }; -},{"../core":53,"../core/renderers/canvas/utils/CanvasTinter":71}],113:[function(require,module,exports){ +},{"../core":54,"../core/renderers/canvas/utils/CanvasTinter":72}],114:[function(require,module,exports){ var core = require('../core'), DisplayObject = core.DisplayObject, _tempMatrix = new core.Matrix(); @@ -25045,7 +25085,7 @@ this._originalDestroy(); }; -},{"../core":53}],114:[function(require,module,exports){ +},{"../core":54}],115:[function(require,module,exports){ var core = require('../core'); /** @@ -25075,7 +25115,7 @@ return null; }; -},{"../core":53}],115:[function(require,module,exports){ +},{"../core":54}],116:[function(require,module,exports){ var core = require('../core'); /** @@ -25105,7 +25145,7 @@ return point; }; -},{"../core":53}],116:[function(require,module,exports){ +},{"../core":54}],117:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -25126,7 +25166,7 @@ BitmapText: require('./BitmapText') }; -},{"./BitmapText":110,"./MovieClip":111,"./TilingSprite":112,"./cacheAsBitmap":113,"./getChildByName":114,"./getGlobalPosition":115}],117:[function(require,module,exports){ +},{"./BitmapText":111,"./MovieClip":112,"./TilingSprite":113,"./cacheAsBitmap":114,"./getChildByName":115,"./getGlobalPosition":116}],118:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25183,7 +25223,7 @@ } }); -},{"../../core":53}],118:[function(require,module,exports){ +},{"../../core":54}],119:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYFilter = require('../blur/BlurYFilter'); @@ -25284,7 +25324,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"../blur/BlurYFilter":122}],119:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"../blur/BlurYFilter":123}],120:[function(require,module,exports){ var core = require('../../core'); @@ -25426,7 +25466,7 @@ } }); -},{"../../core":53}],120:[function(require,module,exports){ +},{"../../core":54}],121:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('./BlurXFilter'), BlurYFilter = require('./BlurYFilter'); @@ -25536,7 +25576,7 @@ } }); -},{"../../core":53,"./BlurXFilter":121,"./BlurYFilter":122}],121:[function(require,module,exports){ +},{"../../core":54,"./BlurXFilter":122,"./BlurYFilter":123}],122:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25629,7 +25669,7 @@ } }); -},{"../../core":53}],122:[function(require,module,exports){ +},{"../../core":54}],123:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25715,7 +25755,7 @@ } }); -},{"../../core":53}],123:[function(require,module,exports){ +},{"../../core":54}],124:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25745,7 +25785,7 @@ SmartBlurFilter.prototype.constructor = SmartBlurFilter; module.exports = SmartBlurFilter; -},{"../../core":53}],124:[function(require,module,exports){ +},{"../../core":54}],125:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26281,7 +26321,7 @@ } }); -},{"../../core":53}],125:[function(require,module,exports){ +},{"../../core":54}],126:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26330,7 +26370,7 @@ } }); -},{"../../core":53}],126:[function(require,module,exports){ +},{"../../core":54}],127:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26421,7 +26461,7 @@ } }); -},{"../../core":53}],127:[function(require,module,exports){ +},{"../../core":54}],128:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26447,7 +26487,7 @@ CrossHatchFilter.prototype.constructor = CrossHatchFilter; module.exports = CrossHatchFilter; -},{"../../core":53}],128:[function(require,module,exports){ +},{"../../core":54}],129:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26531,7 +26571,7 @@ } }); -},{"../../core":53}],129:[function(require,module,exports){ +},{"../../core":54}],130:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26603,7 +26643,7 @@ } }); -},{"../../core":53}],130:[function(require,module,exports){ +},{"../../core":54}],131:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26694,7 +26734,7 @@ } }); -},{"../../core":53}],131:[function(require,module,exports){ +},{"../../core":54}],132:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYTintFilter = require('./BlurYTintFilter'); @@ -26887,7 +26927,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"./BlurYTintFilter":130}],132:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"./BlurYTintFilter":131}],133:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26936,7 +26976,7 @@ } }); -},{"../../core":53}],133:[function(require,module,exports){ +},{"../../core":54}],134:[function(require,module,exports){ /** * @file Main export of the PIXI filters library * @author Mat Groves @@ -26975,7 +27015,7 @@ TwistFilter: require('./twist/TwistFilter') }; -},{"./ascii/AsciiFilter":117,"./bloom/BloomFilter":118,"./blur/BlurDirFilter":119,"./blur/BlurFilter":120,"./blur/BlurXFilter":121,"./blur/BlurYFilter":122,"./blur/SmartBlurFilter":123,"./color/ColorMatrixFilter":124,"./color/ColorStepFilter":125,"./convolution/ConvolutionFilter":126,"./crosshatch/CrossHatchFilter":127,"./displacement/DisplacementFilter":128,"./dot/DotScreenFilter":129,"./dropshadow/DropShadowFilter":131,"./gray/GrayFilter":132,"./invert/InvertFilter":134,"./noise/NoiseFilter":135,"./pixelate/PixelateFilter":136,"./rgb/RGBSplitFilter":137,"./sepia/SepiaFilter":138,"./shockwave/ShockwaveFilter":139,"./tiltshift/TiltShiftFilter":141,"./tiltshift/TiltShiftXFilter":142,"./tiltshift/TiltShiftYFilter":143,"./twist/TwistFilter":144}],134:[function(require,module,exports){ +},{"./ascii/AsciiFilter":118,"./bloom/BloomFilter":119,"./blur/BlurDirFilter":120,"./blur/BlurFilter":121,"./blur/BlurXFilter":122,"./blur/BlurYFilter":123,"./blur/SmartBlurFilter":124,"./color/ColorMatrixFilter":125,"./color/ColorStepFilter":126,"./convolution/ConvolutionFilter":127,"./crosshatch/CrossHatchFilter":128,"./displacement/DisplacementFilter":129,"./dot/DotScreenFilter":130,"./dropshadow/DropShadowFilter":132,"./gray/GrayFilter":133,"./invert/InvertFilter":135,"./noise/NoiseFilter":136,"./pixelate/PixelateFilter":137,"./rgb/RGBSplitFilter":138,"./sepia/SepiaFilter":139,"./shockwave/ShockwaveFilter":140,"./tiltshift/TiltShiftFilter":142,"./tiltshift/TiltShiftXFilter":143,"./tiltshift/TiltShiftYFilter":144,"./twist/TwistFilter":145}],135:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27025,7 +27065,7 @@ } }); -},{"../../core":53}],135:[function(require,module,exports){ +},{"../../core":54}],136:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27080,7 +27120,7 @@ } }); -},{"../../core":53}],136:[function(require,module,exports){ +},{"../../core":54}],137:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27131,7 +27171,7 @@ } }); -},{"../../core":53}],137:[function(require,module,exports){ +},{"../../core":54}],138:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27217,7 +27257,7 @@ } }); -},{"../../core":53}],138:[function(require,module,exports){ +},{"../../core":54}],139:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27267,7 +27307,7 @@ } }); -},{"../../core":53}],139:[function(require,module,exports){ +},{"../../core":54}],140:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27355,7 +27395,7 @@ } }); -},{"../../core":53}],140:[function(require,module,exports){ +},{"../../core":54}],141:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27480,7 +27520,7 @@ } }); -},{"../../core":53}],141:[function(require,module,exports){ +},{"../../core":54}],142:[function(require,module,exports){ var core = require('../../core'), TiltShiftXFilter = require('./TiltShiftXFilter'), TiltShiftYFilter = require('./TiltShiftYFilter'); @@ -27590,7 +27630,7 @@ } }); -},{"../../core":53,"./TiltShiftXFilter":142,"./TiltShiftYFilter":143}],142:[function(require,module,exports){ +},{"../../core":54,"./TiltShiftXFilter":143,"./TiltShiftYFilter":144}],143:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27628,7 +27668,7 @@ this.uniforms.delta.value.y = dy / d; }; -},{"./TiltShiftAxisFilter":140}],143:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],144:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27666,7 +27706,7 @@ this.uniforms.delta.value.y = dx / d; }; -},{"./TiltShiftAxisFilter":140}],144:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],145:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27751,7 +27791,7 @@ } }); -},{"../../core":53}],145:[function(require,module,exports){ +},{"../../core":54}],146:[function(require,module,exports){ (function (global){ // run the polyfills require('./polyfill'); @@ -27784,7 +27824,7 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./accessibility":37,"./core":53,"./deprecation":109,"./extras":116,"./filters":133,"./interaction":148,"./loaders":151,"./mesh":158,"./polyfill":163}],146:[function(require,module,exports){ +},{"./accessibility":37,"./core":54,"./deprecation":110,"./extras":117,"./filters":134,"./interaction":149,"./loaders":152,"./mesh":159,"./polyfill":164}],147:[function(require,module,exports){ var core = require('../core'); /** @@ -27833,7 +27873,7 @@ return displayObject.worldTransform.applyInverse(globalPos || this.global, point); }; -},{"../core":53}],147:[function(require,module,exports){ +},{"../core":54}],148:[function(require,module,exports){ var core = require('../core'), InteractionData = require('./InteractionData'); @@ -28709,7 +28749,7 @@ core.WebGLRenderer.registerPlugin('interaction', InteractionManager); core.CanvasRenderer.registerPlugin('interaction', InteractionManager); -},{"../core":53,"./InteractionData":146,"./interactiveTarget":149}],148:[function(require,module,exports){ +},{"../core":54,"./InteractionData":147,"./interactiveTarget":150}],149:[function(require,module,exports){ /** * @file Main export of the PIXI interactions library * @author Mat Groves @@ -28726,7 +28766,7 @@ interactiveTarget: require('./interactiveTarget') }; -},{"./InteractionData":146,"./InteractionManager":147,"./interactiveTarget":149}],149:[function(require,module,exports){ +},{"./InteractionData":147,"./InteractionManager":148,"./interactiveTarget":150}],150:[function(require,module,exports){ /** * Default property values of interactive objects * used by {@link PIXI.interaction.InteractionManager}. @@ -28775,7 +28815,7 @@ module.exports = interactiveTarget; -},{}],150:[function(require,module,exports){ +},{}],151:[function(require,module,exports){ var Resource = require('resource-loader').Resource, core = require('../core'), extras = require('../extras'), @@ -28896,7 +28936,7 @@ }; }; -},{"../core":53,"../extras":116,"path":17,"resource-loader":31}],151:[function(require,module,exports){ +},{"../core":54,"../extras":117,"path":17,"resource-loader":31}],152:[function(require,module,exports){ /** * @file Main export of the PIXI loaders library * @author Mat Groves @@ -28917,7 +28957,7 @@ Resource: require('resource-loader').Resource }; -},{"./bitmapFontParser":150,"./loader":152,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],152:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./loader":153,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],153:[function(require,module,exports){ var ResourceLoader = require('resource-loader'), textureParser = require('./textureParser'), spritesheetParser = require('./spritesheetParser'), @@ -28979,7 +29019,7 @@ Resource.setExtensionXhrType('fnt', Resource.XHR_RESPONSE_TYPE.DOCUMENT); -},{"./bitmapFontParser":150,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],153:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],154:[function(require,module,exports){ var Resource = require('resource-loader').Resource, path = require('path'), core = require('../core'); @@ -29063,7 +29103,7 @@ }; }; -},{"../core":53,"path":17,"resource-loader":31}],154:[function(require,module,exports){ +},{"../core":54,"path":17,"resource-loader":31}],155:[function(require,module,exports){ var core = require('../core'); module.exports = function () @@ -29085,7 +29125,7 @@ }; }; -},{"../core":53}],155:[function(require,module,exports){ +},{"../core":54}],156:[function(require,module,exports){ var core = require('../core'), tempPoint = new core.Point(), tempPolygon = new core.Polygon(); @@ -29561,7 +29601,7 @@ TRIANGLES: 1 }; -},{"../core":53}],156:[function(require,module,exports){ +},{"../core":54}],157:[function(require,module,exports){ var Mesh = require('./Mesh'); /** @@ -29687,7 +29727,7 @@ } }; -},{"./Mesh":155}],157:[function(require,module,exports){ +},{"./Mesh":156}],158:[function(require,module,exports){ var Mesh = require('./Mesh'); var core = require('../core'); @@ -29900,7 +29940,7 @@ this.containerUpdateTransform(); }; -},{"../core":53,"./Mesh":155}],158:[function(require,module,exports){ +},{"../core":54,"./Mesh":156}],159:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -29919,7 +29959,7 @@ MeshShader: require('./webgl/MeshShader') }; -},{"./Mesh":155,"./Plane":156,"./Rope":157,"./webgl/MeshRenderer":159,"./webgl/MeshShader":160}],159:[function(require,module,exports){ +},{"./Mesh":156,"./Plane":157,"./Rope":158,"./webgl/MeshRenderer":160,"./webgl/MeshShader":161}],160:[function(require,module,exports){ var core = require('../../core'), Mesh = require('../Mesh'); @@ -30148,7 +30188,7 @@ core.ObjectRenderer.prototype.destroy.call(this); }; -},{"../../core":53,"../Mesh":155}],160:[function(require,module,exports){ +},{"../../core":54,"../Mesh":156}],161:[function(require,module,exports){ var core = require('../../core'); /** @@ -30209,7 +30249,7 @@ core.ShaderManager.registerPlugin('meshShader', MeshShader); -},{"../../core":53}],161:[function(require,module,exports){ +},{"../../core":54}],162:[function(require,module,exports){ // References: // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign @@ -30225,7 +30265,7 @@ }; } -},{}],162:[function(require,module,exports){ +},{}],163:[function(require,module,exports){ // References: // https://github.com/sindresorhus/object-assign // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign @@ -30235,12 +30275,12 @@ Object.assign = require('object-assign'); } -},{"object-assign":26}],163:[function(require,module,exports){ +},{"object-assign":26}],164:[function(require,module,exports){ require('./Object.assign'); require('./requestAnimationFrame'); require('./Math.sign'); -},{"./Math.sign":161,"./Object.assign":162,"./requestAnimationFrame":164}],164:[function(require,module,exports){ +},{"./Math.sign":162,"./Object.assign":163,"./requestAnimationFrame":165}],165:[function(require,module,exports){ (function (global){ // References: // http://paulirish.com/2011/requestanimationframe-for-smart-animating/ @@ -30311,8 +30351,8 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[145])(145) +},{}]},{},[146])(146) }); -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L1RyYW5zZm9ybS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL1dlYkdMR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZENpcmNsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ29tcGxleFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZExpbmUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9NYXRyaXguanMiLCJzcmMvY29yZS9tYXRoL1BvaW50LmpzIiwic3JjL2NvcmUvbWF0aC9pbmRleC5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0NpcmNsZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0VsbGlwc2UuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Qb2x5Z29uLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZUJ1ZmZlci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL1N5c3RlbVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcy5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9UZXh0dXJlTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9GWEFBRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1F1YWQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0LmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1N0ZW5jaWxNYXNrU3RhY2suanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvc3ByaXRlcy9TcHJpdGUuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL1Nwcml0ZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvc3ByaXRlcy93ZWJnbC9nZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3RleHQvVGV4dC5qcyIsInNyYy9jb3JlL3RleHR1cmVzL0Jhc2VSZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1RleHR1cmVVdnMuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGlja2VyL1RpY2tlci5qcyIsInNyYy9jb3JlL3RpY2tlci9pbmRleC5qcyIsInNyYy9jb3JlL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcy5qcyIsInNyYy9jb3JlL3V0aWxzL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvcGx1Z2luVGFyZ2V0LmpzIiwic3JjL2RlcHJlY2F0aW9uLmpzIiwic3JjL2V4dHJhcy9CaXRtYXBUZXh0LmpzIiwic3JjL2V4dHJhcy9Nb3ZpZUNsaXAuanMiLCJzcmMvZXh0cmFzL1RpbGluZ1Nwcml0ZS5qcyIsInNyYy9leHRyYXMvY2FjaGVBc0JpdG1hcC5qcyIsInNyYy9leHRyYXMvZ2V0Q2hpbGRCeU5hbWUuanMiLCJzcmMvZXh0cmFzL2dldEdsb2JhbFBvc2l0aW9uLmpzIiwic3JjL2V4dHJhcy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2FzY2lpL0FzY2lpRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmxvb20vQmxvb21GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJEaXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJYRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9CbHVyWUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvU21hcnRCbHVyRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvclN0ZXBGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kb3QvRG90U2NyZWVuRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZHJvcHNoYWRvdy9CbHVyWVRpbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ncmF5L0dyYXlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2ludmVydC9JbnZlcnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ub2lzZS9Ob2lzZUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcmdiL1JHQlNwbGl0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvc2VwaWEvU2VwaWFGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdEF4aXNGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3R3aXN0L1R3aXN0RmlsdGVyLmpzIiwic3JjL3NyYy9pbmRleC5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbkRhdGEuanMiLCJzcmMvaW50ZXJhY3Rpb24vSW50ZXJhY3Rpb25NYW5hZ2VyLmpzIiwic3JjL2ludGVyYWN0aW9uL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL2ludGVyYWN0aXZlVGFyZ2V0LmpzIiwic3JjL2xvYWRlcnMvYml0bWFwRm9udFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL2luZGV4LmpzIiwic3JjL2xvYWRlcnMvbG9hZGVyLmpzIiwic3JjL2xvYWRlcnMvc3ByaXRlc2hlZXRQYXJzZXIuanMiLCJzcmMvbG9hZGVycy90ZXh0dXJlUGFyc2VyLmpzIiwic3JjL21lc2gvTWVzaC5qcyIsInNyYy9tZXNoL1BsYW5lLmpzIiwic3JjL21lc2gvUm9wZS5qcyIsInNyYy9tZXNoL2luZGV4LmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFJlbmRlcmVyLmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFNoYWRlci5qcyIsInNyYy9wb2x5ZmlsbC9NYXRoLnNpZ24uanMiLCJzcmMvcG9seWZpbGwvT2JqZWN0LmFzc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9pbmRleC5qcyIsInNyYy9wb2x5ZmlsbC9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM1dUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbnNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25tQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0b0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6bUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIGNyZWF0ZUNvbnRleHQ6IFx0XHRcdHJlcXVpcmUoJy4vbGliL2NyZWF0ZUNvbnRleHQnKSxcbiAgICBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM6IFx0cmVxdWlyZSgnLi9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzJyksXG4gICAgXG4gICAgR0xCdWZmZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xCdWZmZXInKSxcbiAgICBHTEZyYW1lYnVmZmVyOiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9HTEZyYW1lYnVmZmVyJyksXG4gICAgR0xTaGFkZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xTaGFkZXInKSxcbiAgICBHTFRleHR1cmU6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xUZXh0dXJlJyksXG4gICAgXG4gICAgVmVydGV4QXJyYXlPYmplY3Q6IFx0XHRyZXF1aXJlKCcuL2xpYi9WZXJ0ZXhBcnJheU9iamVjdCcpXG5cbn07IiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRU1QVFlfQVJSQVlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xuXG52YXIgQnVmZmVyID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5BUlJBWV9CVUZGRVI7XG5cdHRoaXMuZHJhd1R5cGUgPSBkcmF3VHlwZSB8fCBnbC5TVEFUSUNfRFJBVztcblx0dGhpcy5kYXRhID0gRU1QVFlfQVJSQVlfQlVGRkVSO1xuXG5cdGlmKGRhdGEpXG5cdHtcblx0XHR0aGlzLnVwbG9hZChkYXRhKTtcblx0fVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKGRhdGEsIG9mZnNldCwgZG9udEJpbmQpXG57XG5cdC8vIHRvZG8gLSBuZWVkZWQ/XG5cdC8vaWYoIWRvbnRCaW5kKVxuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRcblx0ZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuXHRvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuXHRpZih0aGlzLmRhdGEuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpXG5cdHtcdFxuXHRcdGdsLmJ1ZmZlclN1YkRhdGEodGhpcy50eXBlLCBvZmZzZXQsIGRhdGEpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLCBkYXRhLCB0aGlzLmRyYXdUeXBlKTtcblx0fVxuXG5cdHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKTtcbn1cblxuQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIGdsLkFSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgdHlwZSwgZHJhd1R5cGUpO1xufVxuXG4vL1RPRE8gRGVzdHJveS4uXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyO1xuXG4iLCJcbnZhciBUZXh0dXJlID0gcmVxdWlyZSgnLi9HTFRleHR1cmUnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgRnJhbWVidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRnJhbWVidWZmZXIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcblx0dGhpcy5zdGVuY2lsID0gbnVsbDtcblx0dGhpcy50ZXh0dXJlID0gbnVsbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMTAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5lbmFibGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IG5ldyBUZXh0dXJlKGdsKTtcblxuXHR0aGlzLnRleHR1cmUuYmluZCgpO1xuXG5cdC8vZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlLnRleHR1cmUsIDApO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlU3RlbmNpbCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5zdGVuY2lsKXJldHVybjtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuc3RlbmNpbCA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgIFxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCB0aGlzLnN0ZW5jaWwpO1xuICAgIFxuICAgIC8vIFRPRE8uLiB0aGlzIGlzIGRlcHRoIEFORCBzdGVuY2lsP1xuICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTCwgIHRoaXMud2lkdGggICwgdGhpcy5oZWlnaHQgKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oIHIsIGcsIGIsIGEgKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIGdsLmNsZWFyQ29sb3IociwgZywgYiwgYSk7XG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZnJhbWVidWZmZXIgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdGlmICggdGhpcy50ZXh0dXJlIClcbiAgICB7XG4gICAgXHR0aGlzLnRleHR1cmUudXBsb2FkRGF0YShudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdGlmICggdGhpcy5zdGVuY2lsIClcbiAgICB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgc3RlbmNpbCBidWZmZXIgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlUkdCQSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHR2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbURhdGEoZ2wsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xuXHR0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSk7XG5cbiAgICBmYm8udW5iaW5kKCk7XG4gICAgXG4gICAgcmV0dXJuIGZibztcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlRmxvYXQzMiA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHQvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZS4uXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZS5mcm9tRGF0YShnbCwgZGF0YSwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpXG5cbiAgICBmYm8udW5iaW5kKCk7XG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lYnVmZmVyO1xuXG4iLCJcbnZhciBjb21waWxlUHJvZ3JhbSA9IHJlcXVpcmUoJy4vc2hhZGVyL2NvbXBpbGVQcm9ncmFtJyksXG5cdGV4dHJhY3RBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdEF0dHJpYnV0ZXMnKSxcblx0ZXh0cmFjdFVuaWZvcm1zID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdFVuaWZvcm1zJyksXG5cdGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IHJlcXVpcmUoJy4vc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCcpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBTaGFkZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xudmFyIFNoYWRlciA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0Ly8gRmlyc3QgY29tcGlsZSB0aGUgcHJvZ3JhbS4uXG5cdHRoaXMucHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXHQvLyBuZXh0IGV4dHJhY3QgdGhlIGF0dHJpYnV0ZXNcblx0dGhpcy5hdHRyaWJ1dGVzID0gZXh0cmFjdEF0dHJpYnV0ZXMoZ2wsIHRoaXMucHJvZ3JhbSk7IFxuXG4gICAgdmFyIHVuaWZvcm1EYXRhID0gZXh0cmFjdFVuaWZvcm1zKGdsLCB0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy51bmlmb3JtcyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCggZ2wsIHVuaWZvcm1EYXRhICk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgVGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBhIFdlYkdMIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gZm9ybWF0IHtudW1iZXJ9IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlJHQkFcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IHRoZSBnbCB0eXBlIG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5VTlNJR05FRF9CWVRFXG4gKi9cbnZhciBUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHQvLyBzb21lIHNldHRpbmdzLi5cblx0dGhpcy5taXBtYXAgPSBmYWxzZTtcblxuXHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdCB8fCBnbC5SR0JBO1xuXHR0aGlzLnR5cGUgPSB0eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7XG5cblxufVxuXG4vKipcbiAqIEBwYXJhbSB7UElYSS5nbENvcmUuVGV4dHVyZX0gW3Zhcm5hbWVdIFtkZXNjcmlwdGlvbl1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oc291cmNlKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblxuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgc291cmNlKTtcbn1cblxudmFyIEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IGZhbHNlO1xuXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWREYXRhID0gZnVuY3Rpb24oZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5iaW5kKCk7XG5cdFxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgdGhpcy53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG5cblx0aWYoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcblx0e1xuXHRcdGlmKCFGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUpXG5cdFx0e1xuXHRcdFx0dmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO1xuXHRcdFx0XG5cdFx0XHRpZihleHQpXG5cdFx0XHR7XG5cdFx0XHRcdEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHlwZSA9IGdsLkZMT0FUO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdC8vIFRPRE8gc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXNcblx0XHR0aGlzLnR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuXHR9XG5cblx0Ly8gd2hhdCB0eXBlIG9mIGRhdGE/XG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcblx0Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBkYXRhIHx8IG51bGwpO1xuXG59XG5cblRleHR1cmUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihsb2NhdGlvbilcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRpZihsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKVxuXHR7XG5cdFx0Z2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uKTtcblx0fVxuXG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1pbkZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGlmKHRoaXMubWlwbWFwKVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCk7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xuXHR9XHRcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWFnRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVNaXBtYXAgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHRoaXMubWlwbWFwID0gdHJ1ZTtcblx0Z2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZUxpbmVhclNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKHRydWUpO1xuXHR0aGlzLm1hZ0ZpbHRlcih0cnVlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTmVhcmVzdFNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKGZhbHNlKTtcblx0dGhpcy5tYWdGaWx0ZXIoZmFsc2UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwQ2xhbXAgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBSZXBlYXQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cdFxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5SRVBFQVQpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG59XG5cbi8vVGV4dHVyZS5cblRleHR1cmUuZnJvbVNvdXJjZSA9IGZ1bmN0aW9uKGdsLCBzb3VyY2UsIHByZW11bHRpcGx5QWxwaGEpXG57XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhIHx8IGZhbHNlO1xuXHR0ZXh0dXJlLnVwbG9hZChzb3VyY2UpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5UZXh0dXJlLmZyb21EYXRhID0gZnVuY3Rpb24oZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdC8vY29uc29sZS5sb2coZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnVwbG9hZERhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG4iLCJcbi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxuLy8gc3RhdGUgb2JqZWN0Ly9cblxuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChnbClcbntcblx0XG5cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gKFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpXG4gICAgKTtcblxuLy9cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gbnVsbDtcblxuXHRpZih0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbilcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvID0gdGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsgIFxuXHR9XG5cblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG5cdHRoaXMuZGlydHkgPSBmYWxzZTtcblxuXHRcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVydGV4QXJyYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFZlcnRleEFycmF5T2JqZWN0O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5uYXRpdmVWYW8pOyAgXG5cblx0XHRpZih0aGlzLmRpcnR5KVxuXHRcdHtcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0XHR9XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgXG5cdHtcblx0XHR2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW2ldO1xuXHRcdGF0dHJpYi5idWZmZXIuYmluZCgpO1x0XG5cblx0XHRhdHRyaWIuYXR0cmlidXRlLnBvaW50ZXIoYXR0cmliLnR5cGUsIGF0dHJpYi5ub3JtYWxpemVkLCBhdHRyaWIuc3RyaWRlLCBhdHRyaWIuc3RhcnQpOyBcblx0XHRcblx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWIuYXR0cmlidXRlLmxvY2F0aW9uKTtcblx0fTtcblxuXHR0aGlzLmluZGV4QnVmZmVyLmJpbmQoKTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgYXR0cmlidXRlLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXJ0KVxue1xuICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHtcbiAgICBcdGJ1ZmZlcjogXHRidWZmZXIsXG4gICAgXHRhdHRyaWJ1dGU6IFx0YXR0cmlidXRlLFxuXG4gICAgXHRsb2NhdGlvbjogXHRhdHRyaWJ1dGUubG9jYXRpb24sXG5cdCBcdHR5cGU6IFx0XHR0eXBlIHx8IHRoaXMuZ2wuRkxPQVQsXG5cdCBcdG5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWQgfHwgZmFsc2UsXG5cdCBcdHN0cmlkZTogXHRzdHJpZGUgfHwgMCxcblx0IFx0c3RhcnQ6IFx0XHRzdGFydCB8fCAwXG5cdH0pXG5cblx0dGhpcy5kaXJ0eSA9IHRydWU7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRpb25zKVxue1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBidWZmZXI7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHR5cGUsIHNpemUsIHN0YXJ0KVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5kcmF3RWxlbWVudHModHlwZSwgc2l6ZSwgZ2wuVU5TSUdORURfU0hPUlQsIHN0YXJ0KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBDb250ZXh0XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIENPTlRFWFRfVUlEID0gMDtcblxudmFyIGNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbihjYW52YXMsIG9wdGlvbnMpXG57XG4gICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRpb25zKSB8fCBcbiAgICBcdCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdsKVxuICAgIHtcbiAgICAgICAgLy8gZmFpbCwgbm90IGFibGUgdG8gZ2V0IGEgY29udGV4dFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHdlYkdMLiBUcnkgdXNpbmcgdGhlIGNhbnZhcyByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIC8vIG1pZ2h0IHdhbnQgdG8gcGhhc2UgdGhpcyBvdXQ/XG4gICAgZ2wuaWQgPSBDT05URVhUX1VJRCsrO1xuXG4gICAgcmV0dXJuIGdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbnRleHQ7XG5cbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBzZXRWZXJ0ZXhBdHRyaWJBcnJheXMgPSBmdW5jdGlvbiAoZ2wsIGF0dHJpYnMpXG57XHRcbiAgIC8vIGNvbnNvbGUubG9nKGdsLmlkKVxuICAgIHZhciBkYXRhID0gR0xfTUFQW2dsLmlkXTtcblxuICAgIGlmKCFkYXRhKVxuICAgIHtcblx0ICAgdmFyIG1heEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0XHRkYXRhID0gR0xfTUFQW2dsLmlkXSA9IHt0ZW1wQXR0cmliU3RhdGU6bmV3IEFycmF5KG1heEF0dHJpYnMpXG5cdFx0XHRcdCBcdCBcdFx0ICAgLGF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKX07XG5cdH1cblx0XG4gICAgdmFyIGksXG4gICAgXHR0ZW1wQXR0cmliU3RhdGUgPSBkYXRhLnRlbXBBdHRyaWJTdGF0ZSxcbiAgICBcdGF0dHJpYlN0YXRlID0gZGF0YS5hdHRyaWJTdGF0ZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wQXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yIChpIGluIGF0dHJpYnMpXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbYXR0cmlic1tpXS5sb2NhdGlvbl0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDE7IGkgPCBhdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChhdHRyaWJTdGF0ZVtpXSAhPT0gdGVtcEF0dHJpYlN0YXRlW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJTdGF0ZVtpXSA9IHRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM7IiwiXG5cblxuXG5jb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuICAgIHZhciBnbFZlcnRTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbnZhciBjb21waWxlU2hhZGVyID0gZnVuY3Rpb24gKGdsLCB0eXBlLCBzcmMpXG57XG4gICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuXG4gICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlUHJvZ3JhbTtcblxuIiwiXG5cbnZhciBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBzaXplKSBcbntcbiAgICBzd2l0Y2ggKHR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICBjYXNlICd2ZWMyJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjNCc6ICAgICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KDQgKiBzaXplKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnaXZlYzInOiAgIFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDIgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWM0JzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2wnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY2FzZSAnYnZlYzInOlxuXG4gICAgICAgICAgICByZXR1cm4gYm9vbGVhbkFycmF5KCAyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzQnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSg0ICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDFdKTtcblxuICAgICAgICBjYXNlICdtYXQzJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0NCc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMCwgMV0pO1xuICAgIH1cbn1cblxudmFyIGJvb2xlYW5BcnJheSA9IGZ1bmN0aW9uKHNpemUpXG57XG4gICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgXG4gICAge1xuICAgICAgICBhcnJheVtpXSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdFZhbHVlO1xuIiwiXG52YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIG1hcFNpemUgPSByZXF1aXJlKCcuL21hcFNpemUnKTtcblxudmFyIGV4dHJhY3RBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcblxuICAgIHZhciB0b3RhbEF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9BVFRSSUJVVEVTKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEF0dHJpYnV0ZXM7IGkrKykgXG4gICAge1xuICAgICAgICB2YXIgYXR0cmliRGF0YSA9IGdsLmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpKTtcbiAgICAgICAgdmFyIHR5cGUgPSBtYXBUeXBlKGdsLCBhdHRyaWJEYXRhLnR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNbYXR0cmliRGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgIHR5cGU6dHlwZSxcbiAgICAgICAgICAgIHNpemU6bWFwU2l6ZSh0eXBlKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOmdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGF0dHJpYkRhdGEubmFtZSksXG4gICAgICAgICAgICAvL1RPRE8gLSBtYWtlIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAgICAgICAgICAgIHBvaW50ZXI6ZnVuY3Rpb24odHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydCl7XG5cbiAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmxvY2F0aW9uLHRoaXMuc2l6ZSwgdHlwZSB8fCBnbC5GTE9BVCwgbm9ybWFsaXplZCB8fCBmYWxzZSwgc3RyaWRlIHx8IDAsIHN0YXJ0IHx8IDApOyBcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzOyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0cmFjdEF0dHJpYnV0ZXM7XG5cbiIsInZhciBtYXBUeXBlID0gcmVxdWlyZSgnLi9tYXBUeXBlJyk7XG52YXIgZGVmYXVsdFZhbHVlID0gcmVxdWlyZSgnLi9kZWZhdWx0VmFsdWUnKTtcblxuXG52YXIgZXh0cmFjdFVuaWZvcm1zID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG5cdHZhciB1bmlmb3JtcyA9IHt9O1xuXHRcbiAgICB2YXIgdG90YWxVbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbFVuaWZvcm1zOyBpKyspIFxuICAgIHtcbiAgICBcdHZhciB1bmlmb3JtRGF0YSA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSk7XG4gICAgXHR2YXIgbmFtZSA9IHVuaWZvcm1EYXRhLm5hbWUucmVwbGFjZSgvXFxbLio/XFxdLywgXCJcIik7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgdW5pZm9ybURhdGEudHlwZSApO1xuXG4gICAgXHR1bmlmb3Jtc1tuYW1lXSA9IHtcbiAgICBcdFx0dHlwZTp0eXBlLFxuICAgIFx0XHRzaXplOnVuaWZvcm1EYXRhLnNpemUsXG4gICAgXHRcdGxvY2F0aW9uOmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSxcbiAgICBcdFx0dmFsdWU6ZGVmYXVsdFZhbHVlKHR5cGUsIHVuaWZvcm1EYXRhLnNpemUpXG4gICAgXHR9XG4gICAgfTtcblx0XG5cdHJldHVybiB1bmlmb3JtcztcdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RVbmlmb3JtcztcblxuIiwiXG52YXIgZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gZnVuY3Rpb24oZ2wsIHVuaWZvcm1EYXRhKVxue1xuICAgIC8vIHRoaXMgaXMgdGhlIG9iamVjdCB3ZSB3aWxsIGJlIHNlbmRpbmcgYmFjay5cbiAgICAvLyBhbiBvYmplY3QgaGllcmFjaHkgd2lsbCBiZSBjcmVhdGVkIGZvciBzdHJ1Y3RzXG4gICAgdmFyIHVuaWZvcm1zID0ge2RhdGE6e319O1xuXG4gICAgdW5pZm9ybXMuZ2wgPSBnbDtcbiAgICBcbiAgICB2YXIgdW5pZm9ybUtleXM9IE9iamVjdC5rZXlzKHVuaWZvcm1EYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybUtleXMubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGZ1bGxOYW1lID0gdW5pZm9ybUtleXNbaV1cblxuICAgICAgICB2YXIgbmFtZVRva2VucyA9IGZ1bGxOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHZhciB1bmlmb3JtR3JvdXAgPSBnZXRVbmlmb3JtR3JvdXAobmFtZVRva2VucywgdW5pZm9ybXMpO1xuXG4gICAgICAgIHZhciB1bmlmb3JtID0gIHVuaWZvcm1EYXRhW2Z1bGxOYW1lXTtcbiAgICAgICAgdW5pZm9ybUdyb3VwLmRhdGFbbmFtZV0gPSB1bmlmb3JtO1xuXG4gICAgICAgIHVuaWZvcm1Hcm91cC5nbCA9IGdsO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bmlmb3JtR3JvdXAsIG5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2VuZXJhdGVHZXR0ZXIobmFtZSksXG4gICAgICAgICAgICBzZXQ6IGdlbmVyYXRlU2V0dGVyKG5hbWUsIHVuaWZvcm0pXG4gICAgICAgIH0pXG4gICAgfTtcblxuICAgIHJldHVybiB1bmlmb3Jtcztcbn1cblxudmFyIGdlbmVyYXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSlcbntcblx0dmFyIHRlbXBsYXRlID0gZ2V0dGVyVGVtcGxhdGUucmVwbGFjZSgnJSUnLCBuYW1lKTtcblx0cmV0dXJuIG5ldyBGdW5jdGlvbih0ZW1wbGF0ZSk7XG59XG5cbnZhciBnZW5lcmF0ZVNldHRlciA9IGZ1bmN0aW9uKG5hbWUsIHVuaWZvcm0pXG57XG4gICAgdmFyIHRlbXBsYXRlID0gc2V0dGVyVGVtcGxhdGUucmVwbGFjZSgvJSUvZywgbmFtZSk7XG4gICAgdmFyIHNldFRlbXBsYXRlXG4gICAgXG4gICAgaWYodW5pZm9ybS5zaXplID09PSAxKVxuICAgIHtcbiAgICAgICAgc2V0VGVtcGxhdGUgPSBHTFNMX1RPX1NJTkdMRV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19BUlJBWV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuXG4gICAgaWYoc2V0VGVtcGxhdGUpXG4gICAge1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIlxcbnRoaXMuZ2wuXCIgKyBzZXRUZW1wbGF0ZSArIFwiO1wiO1xuICAgIH1cblxuICBcdHJldHVybiBuZXcgRnVuY3Rpb24oJ3ZhbHVlJywgdGVtcGxhdGUpO1xufVxuXG52YXIgZ2V0VW5pZm9ybUdyb3VwID0gZnVuY3Rpb24obmFtZVRva2VucywgdW5pZm9ybSlcbntcbiAgICB2YXIgY3VyID0gdW5pZm9ybTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZVRva2Vucy5sZW5ndGggLSAxOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIG8gPSBjdXJbbmFtZVRva2Vuc1tpXV0gfHwge2RhdGE6e319O1xuICAgICAgICBjdXJbbmFtZVRva2Vuc1tpXV0gPSBvO1xuICAgICAgICBjdXIgPSBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gY3VyXG59XG5cbnZhciBnZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAncmV0dXJuIHRoaXMuZGF0YS4lJS52YWx1ZTsnLFxuXS5qb2luKCdcXG4nKTtcblxudmFyIHNldHRlclRlbXBsYXRlID0gW1xuICAgICd0aGlzLmRhdGEuJSUudmFsdWUgPSB2YWx1ZTsnLFxuICAgICd2YXIgbG9jYXRpb24gPSB0aGlzLmRhdGEuJSUubG9jYXRpb247J1xuXS5qb2luKCdcXG4nKTtcblxuXG52YXIgR0xTTF9UT19TSU5HTEVfU0VUVEVSUyA9IHtcblxuICAgICdmbG9hdCc6ICAgICd1bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ3ZlYzQnOiAgICAgJ3VuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdidmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdidmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ21hdDInOiAgICAgJ3VuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuICAgICdtYXQzJzogICAgICd1bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0NCc6ICAgICAndW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG5cbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbnZhciBHTFNMX1RPX0FSUkFZX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpJyxcblxuICAgICd2ZWMyJzogICAgICd1bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWMzJzogICAgICd1bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgIFx0XG4gICAgJ2ludCc6ICAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgIFxuICAgICdzYW1wbGVyMkQnOid1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0O1xuXG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbih0eXBlKSBcbnsgXG4gICAgcmV0dXJuIEdMU0xfVE9fU0laRVt0eXBlXTtcbn1cblxuXG52YXIgR0xTTF9UT19TSVpFID0ge1xuICAgICdmbG9hdCc6ICAgIDEsXG4gICAgJ3ZlYzInOiAgICAgMixcbiAgICAndmVjMyc6ICAgICAzLFxuICAgICd2ZWM0JzogICAgIDQsXG5cbiAgICAnaW50JzogICAgICAxLFxuICAgICdpdmVjMic6ICAgIDIsXG4gICAgJ2l2ZWMzJzogICAgMyxcbiAgICAnaXZlYzQnOiAgICA0LFxuXG4gICAgJ2Jvb2wnOiAgICAgMSxcbiAgICAnYnZlYzInOiAgICAyLFxuICAgICdidmVjMyc6ICAgIDMsXG4gICAgJ2J2ZWM0JzogICAgNCxcblxuICAgICdtYXQyJzogICAgIDQsXG4gICAgJ21hdDMnOiAgICAgOSxcbiAgICAnbWF0NCc6ICAgICAxNixcblxuICAgICdzYW1wbGVyMkQnOiAgMVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFNpemU7XG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbihnbCwgdHlwZSkgXG57XG4gICAgaWYoIUdMX1RBQkxFKSBcbiAgICB7XG4gICAgICAgIHZhciB0eXBlTmFtZXMgPSBPYmplY3Qua2V5cyhHTF9UT19HTFNMX1RZUEVTKTtcblxuICAgICAgICBHTF9UQUJMRSA9IHt9O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlTmFtZXMubGVuZ3RoOyArK2kpIFxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdG4gPSB0eXBlTmFtZXNbaV07XG4gICAgICAgICAgICBHTF9UQUJMRVsgZ2xbdG5dIF0gPSBHTF9UT19HTFNMX1RZUEVTW3RuXTtcbiAgICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gR0xfVEFCTEVbdHlwZV07XG59XG5cbnZhciBHTF9UQUJMRSA9IG51bGw7XG5cbnZhciBHTF9UT19HTFNMX1RZUEVTID0ge1xuICAnRkxPQVQnOiAgICAgICAnZmxvYXQnLFxuICAnRkxPQVRfVkVDMic6ICAndmVjMicsXG4gICdGTE9BVF9WRUMzJzogICd2ZWMzJyxcbiAgJ0ZMT0FUX1ZFQzQnOiAgJ3ZlYzQnLFxuXG4gICdJTlQnOiAgICAgICAgICdpbnQnLFxuICAnSU5UX1ZFQzInOiAgICAnaXZlYzInLFxuICAnSU5UX1ZFQzMnOiAgICAnaXZlYzMnLFxuICAnSU5UX1ZFQzQnOiAgICAnaXZlYzQnLFxuICBcbiAgJ0JPT0wnOiAgICAgICAgJ2Jvb2wnLFxuICAnQk9PTF9WRUMyJzogICAnYnZlYzInLFxuICAnQk9PTF9WRUMzJzogICAnYnZlYzMnLFxuICAnQk9PTF9WRUM0JzogICAnYnZlYzQnLFxuICBcbiAgJ0ZMT0FUX01BVDInOiAgJ21hdDInLFxuICAnRkxPQVRfTUFUMyc6ICAnbWF0MycsXG4gICdGTE9BVF9NQVQ0JzogICdtYXQ0JyxcbiAgXG4gICdTQU1QTEVSXzJEJzogICdzYW1wbGVyMkQnICBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiLyohXG4gKiBhc3luY1xuICogaHR0cHM6Ly9naXRodWIuY29tL2Nhb2xhbi9hc3luY1xuICpcbiAqIENvcHlyaWdodCAyMDEwLTIwMTQgQ2FvbGFuIE1jTWFob25cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9Cb29sKHYpIHtcbiAgICAgICAgcmV0dXJuICEhdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90SWQodikge1xuICAgICAgICByZXR1cm4gIXY7XG4gICAgfVxuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBwcmV2aW91c19hc3luYztcblxuICAgIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAgIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICAgIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsIHx8XG4gICAgICAgICAgICB0aGlzO1xuXG4gICAgaWYgKHJvb3QgIT0gbnVsbCkge1xuICAgICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsaXR5IGZ1bmN0aW9ucyAvLy8vXG5cbiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIHZhciBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xuXG4gICAgLy8gUG9ydGVkIGZyb20gdW5kZXJzY29yZS5qcyBpc09iamVjdFxuICAgIHZhciBfaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2lzQXJyYXlMaWtlKGFycikge1xuICAgICAgICByZXR1cm4gX2lzQXJyYXkoYXJyKSB8fCAoXG4gICAgICAgICAgICAvLyBoYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAgICAgICAgdHlwZW9mIGFyci5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgICAgYXJyLmxlbmd0aCAlIDEgPT09IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXJyYXlFYWNoKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaW5kZXhdLCBpbmRleCwgYXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IGFyci5sZW5ndGgsXG4gICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcmFuZ2UoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9tYXAoQXJyYXkoY291bnQpLCBmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gaTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZHVjZShhcnIsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgIF9hcnJheUVhY2goYXJyLCBmdW5jdGlvbiAoeCwgaSwgYSkge1xuICAgICAgICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHgsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZvckVhY2hPZihvYmplY3QsIGl0ZXJhdG9yKSB7XG4gICAgICAgIF9hcnJheUVhY2goX2tleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaXRlcmF0b3Iob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbmRleE9mKGFyciwgaXRlbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9rZXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW47XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBpZiAoX2lzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGkgOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBfa2V5cyhjb2xsKTtcbiAgICAgICAgICAgIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ga2V5c1tpXSA6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2ltaWxhciB0byBFUzYncyByZXN0IHBhcmFtIChodHRwOi8vYXJpeWEub2ZpbGFicy5jb20vMjAxMy8wMy9lczYtYW5kLXJlc3QtcGFyYW1ldGVyLmh0bWwpXG4gICAgLy8gVGhpcyBhY2N1bXVsYXRlcyB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGFuIGFycmF5LCBhZnRlciBhIGdpdmVuIGluZGV4LlxuICAgIC8vIEZyb20gdW5kZXJzY29yZS5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMjE0MCkuXG4gICAgZnVuY3Rpb24gX3Jlc3RQYXJhbShmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IHVudXNlZCBidXQgaGFuZGxlIGNhc2VzIG91dHNpZGUgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQ6XG4gICAgICAgICAgICAvLyB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgIC8vIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIC8vICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgICAgICAgIC8vIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IodmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG5cbiAgICAvLyBjYXB0dXJlIHRoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIGd1YXJkIGFnYWluc3QgZmFrZVRpbWVyIG1vY2tzXG4gICAgdmFyIF9zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcblxuICAgIHZhciBfZGVsYXkgPSBfc2V0SW1tZWRpYXRlID8gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgX3NldEltbWVkaWF0ZShmbik7XG4gICAgfSA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IF9kZWxheTtcbiAgICB9XG4gICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gX3NldEltbWVkaWF0ZSA/IF9kZWxheSA6IGFzeW5jLm5leHRUaWNrO1xuXG5cbiAgICBhc3luYy5mb3JFYWNoID1cbiAgICBhc3luYy5lYWNoID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2YoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID1cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cblxuICAgIGFzeW5jLmZvckVhY2hMaW1pdCA9XG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2VhY2hPZkxpbWl0KGxpbWl0KShhcnIsIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZiA9XG4gICAgYXN5bmMuZWFjaE9mID0gZnVuY3Rpb24gKG9iamVjdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdCB8fCBbXTtcblxuICAgICAgICB2YXIgaXRlciA9IF9rZXlJdGVyYXRvcihvYmplY3QpO1xuICAgICAgICB2YXIga2V5LCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgICAgIHdoaWxlICgoa2V5ID0gaXRlcigpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXksIG9ubHlfb25jZShkb25lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkID09PSAwKSBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgICAgY29tcGxldGVkLS07XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGtleSBpcyBudWxsIGluIGNhc2UgaXRlcmF0b3IgaXNuJ3QgZXhoYXVzdGVkXG4gICAgICAgICAgICAvLyBhbmQgZG9uZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBudWxsICYmIGNvbXBsZXRlZCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaE9mU2VyaWVzID1cbiAgICBhc3luYy5lYWNoT2ZTZXJpZXMgPSBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShpdGVyYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLmZvckVhY2hPZkxpbWl0ID1cbiAgICBhc3luYy5lYWNoT2ZMaW1pdCA9IGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgX2VhY2hPZkxpbWl0KGxpbWl0KShvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9lYWNoT2ZMaW1pdChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgICAgICBvYmogPSBvYmogfHwgW107XG4gICAgICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUgJiYgcnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmICFlcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBuZXh0S2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iob2JqW2tleV0sIGtleSwgb25seV9vbmNlKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZG9QYXJhbGxlbChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oYXN5bmMuZWFjaE9mLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWxMaW1pdChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKF9lYWNoT2ZMaW1pdChsaW1pdCksIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9TZXJpZXMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZlNlcmllcywgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UoYXJyKSA/IFtdIDoge307XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih2YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9hc3luY01hcCk7XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMuaW5qZWN0ID1cbiAgICBhc3luYy5mb2xkbCA9XG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hPZlNlcmllcyhhcnIsIGZ1bmN0aW9uICh4LCBpLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgeCwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBtZW1vKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvbGRyID1cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgaWRlbnRpdHkpLnJldmVyc2UoKTtcbiAgICAgICAgYXN5bmMucmVkdWNlKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0b3I7XG4gICAgICAgICAgICBpdGVyYXRvciA9IG1lbW87XG4gICAgICAgICAgICBtZW1vID0gX2lzQXJyYXkoYXJyKSA/IFtdIDoge307XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoT2YoYXJyLCBmdW5jdGlvbih2LCBrLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgdiwgaywgY2IpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4OiBpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5zZWxlY3QgPVxuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RMaW1pdCA9XG4gICAgYXN5bmMuZmlsdGVyTGltaXQgPSBkb1BhcmFsbGVsTGltaXQoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RTZXJpZXMgPVxuICAgIGFzeW5jLmZpbHRlclNlcmllcyA9IGRvU2VyaWVzKF9maWx0ZXIpO1xuXG4gICAgZnVuY3Rpb24gX3JlamVjdChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9maWx0ZXIoZWFjaGZuLCBhcnIsIGZ1bmN0aW9uKHZhbHVlLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBjYighdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBhc3luYy5yZWplY3QgPSBkb1BhcmFsbGVsKF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdFNlcmllcyA9IGRvU2VyaWVzKF9yZWplY3QpO1xuXG4gICAgZnVuY3Rpb24gX2NyZWF0ZVRlc3RlcihlYWNoZm4sIGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYikge1xuICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIGNiKGdldFJlc3VsdChmYWxzZSwgdm9pZCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZSh4LCBfLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYiAmJiBjaGVjayh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoZ2V0UmVzdWx0KHRydWUsIHgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgZWFjaGZuKGFyciwgbGltaXQsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2IgPSBpdGVyYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGxpbWl0O1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy5hbnkgPVxuICAgIGFzeW5jLnNvbWUgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5zb21lTGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCB0b0Jvb2wsIGlkZW50aXR5KTtcblxuICAgIGFzeW5jLmFsbCA9XG4gICAgYXN5bmMuZXZlcnkgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgbm90SWQsIG5vdElkKTtcblxuICAgIGFzeW5jLmV2ZXJ5TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBub3RJZCwgbm90SWQpO1xuXG4gICAgZnVuY3Rpb24gX2ZpbmRHZXRSZXN1bHQodiwgeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgYXN5bmMuZGV0ZWN0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0U2VyaWVzID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZTZXJpZXMsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuXG4gICAgYXN5bmMuc29ydEJ5ID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLm1hcChhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKGVyciwgY3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7dmFsdWU6IHgsIGNyaXRlcmlhOiBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChjb21wYXJhdG9yKSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNvbmN1cnJlbmN5LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gcmVtYWluaW5nVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBfaW5kZXhPZihsaXN0ZW5lcnMsIGZuKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRhc2tDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLS07XG4gICAgICAgICAgICBfYXJyYXlFYWNoKGxpc3RlbmVycy5zbGljZSgwKSwgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBfYXJyYXlFYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9mb3JFYWNoT2YocmVzdWx0cywgZnVuY3Rpb24odmFsLCBya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHRhc2tDb21wbGV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRlYWQtbG9ja3NcbiAgICAgICAgICAgIHZhciBsZW4gPSByZXF1aXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZGVwO1xuICAgICAgICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZGVwID0gdGFza3NbcmVxdWlyZXNbbGVuXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGluZXhpc3RhbnQgZGVwZW5kZW5jeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzQXJyYXkoZGVwKSAmJiBfaW5kZXhPZihkZXAsIGspID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXMgY3ljbGljIGRlcGVuZGVuY2llcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5uaW5nVGFza3MgPCBjb25jdXJyZW5jeSAmJiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzKys7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLnJldHJ5ID0gZnVuY3Rpb24odGltZXMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBERUZBVUxUX1RJTUVTID0gNTtcbiAgICAgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuXG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbDogREVGQVVMVF9JTlRFUlZBTFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KXtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0ID09PSAnbnVtYmVyJyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodCwgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYodHlwZW9mIHQgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBhY2MudGltZXMgPSBwYXJzZUludCh0LnRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgICAgICAgICBhY2MuaW50ZXJ2YWwgPSBwYXJzZUludCh0LmludGVydmFsLCAxMCkgfHwgREVGQVVMVF9JTlRFUlZBTDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGZvciBcXCd0aW1lc1xcJzogJyArIHR5cGVvZiB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgMSB8fCBsZW5ndGggPiAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIC0gbXVzdCBiZSBlaXRoZXIgKHRhc2spLCAodGFzaywgY2FsbGJhY2spLCAodGltZXMsIHRhc2spIG9yICh0aW1lcywgdGFzaywgY2FsbGJhY2spJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoIDw9IDIgJiYgdHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRzLCB0aW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBvcHRzLnRhc2sgPSB0YXNrO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRUYXNrKHdyYXBwZWRDYWxsYmFjaywgd3JhcHBlZFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCh0YXNrLCBmaW5hbEF0dGVtcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VyaWVzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayhmdW5jdGlvbihlcnIsIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXNDYWxsYmFjayghZXJyIHx8IGZpbmFsQXR0ZW1wdCwge2VycjogZXJyLCByZXN1bHQ6IHJlc3VsdH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVkUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmV0cnlJbnRlcnZhbChpbnRlcnZhbCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAob3B0cy50aW1lcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsQXR0ZW1wdCA9ICEob3B0cy50aW1lcy09MSk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQob3B0cy50YXNrLCBmaW5hbEF0dGVtcHQpKTtcbiAgICAgICAgICAgICAgICBpZighZmluYWxBdHRlbXB0ICYmIG9wdHMuaW50ZXJ2YWwgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUludGVydmFsKG9wdHMuaW50ZXJ2YWwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IG9wdHMuY2FsbGJhY2spKGRhdGEuZXJyLCBkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIG9wdHMuY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2s7XG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBJdGVyYXRvcihpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgW2Vycl0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuc3VyZUFzeW5jKGl0ZXJhdG9yKS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfcGFyYWxsZWwoZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IF9pc0FycmF5TGlrZSh0YXNrcykgPyBbXSA6IHt9O1xuXG4gICAgICAgIGVhY2hmbih0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGtleSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRhc2soX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2YsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChfZWFjaE9mTGltaXQobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKGFzeW5jLmVhY2hPZlNlcmllcywgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuaXRlcmF0b3IgPSBmdW5jdGlvbiAodGFza3MpIHtcbiAgICAgICAgZnVuY3Rpb24gbWFrZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm4ubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgdGFza3MubGVuZ3RoIC0gMSkgPyBtYWtlQ2FsbGJhY2soaW5kZXggKyAxKTogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIChmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoY2FsbEFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLCBhcmdzLmNvbmNhdChjYWxsQXJncylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gX2NvbmNhdChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoeSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG4gICAgICAgIGlmICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0LmFwcGx5KHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1doaWxzdCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiArK2NhbGxzIDw9IDEgfHwgdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZHVyaW5nID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG5cbiAgICAgICAgdmFyIG5leHQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjaGVjayk7XG4gICAgICAgICAgICAgICAgdGVzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24oZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRydXRoKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QoY2hlY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb0R1cmluZyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgYXN5bmMuZHVyaW5nKGZ1bmN0aW9uKG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjYWxscysrIDwgMSkge1xuICAgICAgICAgICAgICAgIG5leHQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3F1ZXVlKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHBvcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayB8fCBub29wXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9uZXh0KHEsIHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIF9hcnJheUVhY2godGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2god29ya2Vyc0xpc3QsIGZ1bmN0aW9uICh3b3JrZXIsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya2VyID09PSB0YXNrICYmICFyZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBub29wLFxuICAgICAgICAgICAgZW1wdHk6IG5vb3AsXG4gICAgICAgICAgICBkcmFpbjogbm9vcCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5kcmFpbiA9IG5vb3A7XG4gICAgICAgICAgICAgICAgcS50YXNrcyA9IFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnQ6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrcyA9IHEucGF5bG9hZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS5wYXlsb2FkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS50YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9tYXAodGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5wdXNoKHRhc2tzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShfbmV4dChxLCB0YXNrcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyKGRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtlcnNMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSBmYWxzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bWVDb3VudCA9IE1hdGgubWluKHEuY29uY3VycmVuY3ksIHEudGFza3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHJlc3VtZUNvdW50OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBxID0gX3F1ZXVlKGZ1bmN0aW9uIChpdGVtcywgY2IpIHtcbiAgICAgICAgICAgIHdvcmtlcihpdGVtc1swXSwgY2IpO1xuICAgICAgICB9LCBjb25jdXJyZW5jeSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLnByaW9yaXR5UXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuXG4gICAgICAgIGZ1bmN0aW9uIF9jb21wYXJlVGFza3MoYSwgYil7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgICB2YXIgYmVnID0gLTEsXG4gICAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgc2VxdWVuY2VbbWlkXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWcgPSBtaWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmVnO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBfcXVldWUod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2NvbnNvbGVfZm4obmFtZSkge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2goYXJncywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlW25hbWVdKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgaWRlbnRpdHk7XG4gICAgICAgIHZhciBtZW1vaXplZCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24gbWVtb2l6ZWQoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBtZW1vW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0gPSBbY2FsbGJhY2tdO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW9ba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH07XG5cbiAgICBhc3luYy51bm1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3RpbWVzKG1hcHBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG1hcHBlcihfcmFuZ2UoY291bnQpLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jLnRpbWVzID0gX3RpbWVzKGFzeW5jLm1hcCk7XG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBfdGltZXMoYXN5bmMubWFwU2VyaWVzKTtcbiAgICBhc3luYy50aW1lc0xpbWl0ID0gZnVuY3Rpb24gKGNvdW50LCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5tYXBMaW1pdChfcmFuZ2UoY291bnQpLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VxID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5vb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnJlZHVjZShmbnMsIGFyZ3MsIGZ1bmN0aW9uIChuZXdhcmdzLCBmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBuZXdhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBuZXh0YXJncykge1xuICAgICAgICAgICAgICAgICAgICBjYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY29tcG9zZSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIF9hcHBseUVhY2goZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uKGZucywgYXJncykge1xuICAgICAgICAgICAgdmFyIGdvID0gX3Jlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgXywgY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncy5jb25jYXQoW2NiXSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ28uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ287XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmFwcGx5RWFjaCA9IF9hcHBseUVhY2goYXN5bmMuZWFjaE9mKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZlNlcmllcyk7XG5cblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seV9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIgdGFzayA9IGVuc3VyZUFzeW5jKGZuKTtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmVuc3VyZUFzeW5jID0gZW5zdXJlQXN5bmM7XG5cbiAgICBhc3luYy5jb25zdGFudCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICAgIHZhciBhcmdzID0gW251bGxdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhc3luYy53cmFwU3luYyA9XG4gICAgYXN5bmMuYXN5bmNpZnkgPSBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChfaXNPYmplY3QocmVzdWx0KSAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIubWVzc2FnZSA/IGVyciA6IG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcblxuICAgIGRpbSA9IGRpbSB8fCAyO1xuXG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLFxuICAgICAgICBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcbiAgICAgICAgdHJpYW5nbGVzID0gW107XG5cbiAgICBpZiAoIW91dGVyTm9kZSkgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBzaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgc2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIHN1bSA9IDAsXG4gICAgICAgIGksIGosIGxhc3Q7XG5cbiAgICAvLyBjYWxjdWxhdGUgb3JpZ2luYWwgd2luZGluZyBvcmRlciBvZiBhIHBvbHlnb24gcmluZ1xuICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuXG4gICAgLy8gbGluayBwb2ludHMgaW50byBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHN1bSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG4gICAgaWYgKCFzdGFydCkgcmV0dXJuIHN0YXJ0O1xuICAgIGlmICghZW5kKSBlbmQgPSBzdGFydDtcblxuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcCA9IGVuZCA9IHAucHJldjtcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuICAgIHJldHVybiBlbmQ7XG59XG5cbi8vIG1haW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBhcyBhIGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIHBhc3MpIHtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuICAgIGlmICghcGFzcyAmJiBzaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICB2YXIgc3RvcCA9IGVhcixcbiAgICAgICAgcHJldiwgbmV4dDtcblxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuICAgIHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcbiAgICAgICAgcHJldiA9IGVhci5wcmV2O1xuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XG5cbiAgICAgICAgaWYgKHNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIHNpemUpIDogaXNFYXIoZWFyKSkge1xuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXG4gICAgICAgICAgICByZW1vdmVOb2RlKGVhcik7XG5cbiAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRpY2UgbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhlYXIsIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIHNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICAvLyBmaXJzdCBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBpbmNyZWFzaW5nIHotb3JkZXJcbiAgICB2YXIgcCA9IGVhci5uZXh0WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyB0aGVuIGxvb2sgZm9yIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICBwID0gZWFyLnByZXZaO1xuXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgLy8gYSBzZWxmLWludGVyc2VjdGlvbiB3aGVyZSBlZGdlICh2W2ktMV0sdltpXSkgaW50ZXJzZWN0cyAodltpKzFdLHZbaSsyXSlcbiAgICAgICAgaWYgKGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHA7XG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBsb29rIGZvciBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgICAgICAgICBhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiA9IGIubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBhID0gYS5uZXh0O1xuICAgIH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG4gICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuICAgICAgICBpZiAobGlzdCA9PT0gbGlzdC5uZXh0KSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuICAgICAgICBxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcbiAgICB9XG5cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0ZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlWChhLCBiKSB7XG4gICAgcmV0dXJuIGEueCAtIGIueDtcbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkge1xuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xuICAgICAgICBmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcbiAgICB9XG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBwID0gb3V0ZXJOb2RlLFxuICAgICAgICBoeCA9IGhvbGUueCxcbiAgICAgICAgaHkgPSBob2xlLnksXG4gICAgICAgIHF4ID0gLUluZmluaXR5LFxuICAgICAgICBtO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgdGFuO1xuXG4gICAgcCA9IG0ubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBzdG9wKSB7XG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG0ueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG0ueSA/IGh4IDogcXgsIGh5LCBtLngsIG0ueSwgaHkgPCBtLnkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuICAgICAgICAgICAgaWYgKCh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIHAueCA+IG0ueCkpICYmIGxvY2FsbHlJbnNpZGUocCwgaG9sZSkpIHtcbiAgICAgICAgICAgICAgICBtID0gcDtcbiAgICAgICAgICAgICAgICB0YW5NaW4gPSB0YW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBtO1xufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgIHAucHJldlogPSBwLnByZXY7XG4gICAgICAgIHAubmV4dFogPSBwLm5leHQ7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgcC5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKHApO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIGRvIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHFTaXplID09PSAwIHx8ICFxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAueiA8PSBxLnopIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuICAgICAgICBpblNpemUgKj0gMjtcblxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIHNpemUgb2YgdGhlIGRhdGEgYm91bmRpbmcgYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpIC8gc2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpIC8gc2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LngpIGxlZnRtb3N0ID0gcDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gbGVmdG1vc3Q7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcbiAgICByZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXF1YWxzKGEsIGIpIHx8IGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcbiAgICAgICAgICAgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKTtcbn1cblxuLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xufVxuXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXG4gICAgICAgICAgIGFyZWEocDIsIHEyLCBwMSkgPiAwICE9PSBhcmVhKHAyLCBxMiwgcTEpID4gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG4vLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG4gICAgICAgIGFuID0gYS5uZXh0LFxuICAgICAgICBicCA9IGIucHJldjtcblxuICAgIGEubmV4dCA9IGI7XG4gICAgYi5wcmV2ID0gYTtcblxuICAgIGEyLm5leHQgPSBhbjtcbiAgICBhbi5wcmV2ID0gYTI7XG5cbiAgICBiMi5uZXh0ID0gYTI7XG4gICAgYTIucHJldiA9IGIyO1xuXG4gICAgYnAubmV4dCA9IGIyO1xuICAgIGIyLnByZXYgPSBicDtcblxuICAgIHJldHVybiBiMjtcbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgcC5wcmV2ID0gcDtcbiAgICAgICAgcC5uZXh0ID0gcDtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHAubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgcC5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xuICAgICAgICBsYXN0Lm5leHQgPSBwO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XG4gICAgcC5uZXh0LnByZXYgPSBwLnByZXY7XG4gICAgcC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cbiAgICBpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG4gICAgaWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcbiAgICAvLyB2ZXJ0aWNlIGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRpY2Ugbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vXG4vLyBXZSBzdG9yZSBvdXIgRUUgb2JqZWN0cyBpbiBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBgfmAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Qgb3ZlcnJpZGRlbiBvclxuLy8gdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy8gV2UgYWxzbyBhc3N1bWUgdGhhdCBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV2ZW50IG5hbWVcbi8vIGlzIGFuIEVTNiBTeW1ib2wuXG4vL1xudmFyIHByZWZpeCA9IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nID8gJ34nIDogZmFsc2U7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgRXZlbnRFbWl0dGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBDb250ZXh0IGZvciBmdW5jdGlvbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSBlbWl0IG9uY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTWluaW1hbCBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIEV2ZW50RW1pdHRlciBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7IC8qIE5vdGhpbmcgdG8gc2V0ICovIH1cblxuLyoqXG4gKiBIb2xkcyB0aGUgYXNzaWduZWQgRXZlbnRFbWl0dGVycyBieSBuYW1lLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBhc3NpZ25lZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBleGlzdHMgV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtBcnJheXxCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQsIGV4aXN0cykge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgYXZhaWxhYmxlID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChleGlzdHMpIHJldHVybiAhIWF2YWlsYWJsZTtcbiAgaWYgKCFhdmFpbGFibGUpIHJldHVybiBbXTtcbiAgaWYgKGF2YWlsYWJsZS5mbikgcmV0dXJuIFthdmFpbGFibGUuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXZhaWxhYmxlLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGF2YWlsYWJsZVtpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB0byBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJbmRpY2F0aW9uIGlmIHdlJ3ZlIGVtaXR0ZWQgYW4gZXZlbnQuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IEV2ZW50TGlzdGVuZXIgZm9yIHRoZSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0b259IGZuIENhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGQgYW4gRXZlbnRMaXN0ZW5lciB0aGF0J3Mgb25seSBjYWxsZWQgb25jZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IHRoaXMsIHRydWUpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKSB0aGlzLl9ldmVudHMgPSBwcmVmaXggPyB7fSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHRoaXMuX2V2ZW50c1tldnRdID0gbGlzdGVuZXI7XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5fZXZlbnRzW2V2dF0uZm4pIHRoaXMuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIGVsc2UgdGhpcy5fZXZlbnRzW2V2dF0gPSBbXG4gICAgICB0aGlzLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3ZSB3YW50IHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciB0aGF0IHdlIG5lZWQgdG8gZmluZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgT25seSByZW1vdmUgbGlzdGVuZXJzIG1hdGNoaW5nIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmNlIGxpc3RlbmVycy5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGV2ZW50cyA9IFtdO1xuXG4gIGlmIChmbikge1xuICAgIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgICAgbGlzdGVuZXJzLmZuICE9PSBmblxuICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzLm9uY2UpXG4gICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVycy5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm5cbiAgICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpXG4gICAgICAgICAgfHwgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gIC8vXG4gIGlmIChldmVudHMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbZXZ0XTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycyBvciBvbmx5IHRoZSBsaXN0ZW5lcnMgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvci5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcztcblxuICBpZiAoZXZlbnQpIGRlbGV0ZSB0aGlzLl9ldmVudHNbcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudF07XG4gIGVsc2UgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYXBwbHkgYW55bW9yZS5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLypqc2hpbnQgb25ldmFyOiBmYWxzZSwgaW5kZW50OjQgKi9cbi8qZ2xvYmFsIHNldEltbWVkaWF0ZTogZmFsc2UsIHNldFRpbWVvdXQ6IGZhbHNlLCBjb25zb2xlOiBmYWxzZSAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciByb290LCBwcmV2aW91c19hc3luYztcblxuICAgIHJvb3QgPSB0aGlzO1xuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgIHByZXZpb3VzX2FzeW5jID0gcm9vdC5hc3luYztcbiAgICB9XG5cbiAgICBhc3luYy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmFzeW5jID0gcHJldmlvdXNfYXN5bmM7XG4gICAgICAgIHJldHVybiBhc3luYztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb25seV9vbmNlKGZuKSB7XG4gICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGNhbGxlZCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseShyb290LCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIHZhciBfZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaV0sIGksIGFycik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIF9tYXAgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBpZiAoYXJyLm1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5tYXAoaXRlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih4LCBpLCBhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgdmFyIF9yZWR1Y2UgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBpZiAoYXJyLnJlZHVjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8pO1xuICAgICAgICB9XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICB2YXIgX2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIC8vLy8gZXhwb3J0ZWQgYXN5bmMgbW9kdWxlIGZ1bmN0aW9ucyAvLy8vXG5cbiAgICAvLy8vIG5leHRUaWNrIGltcGxlbWVudGF0aW9uIHdpdGggYnJvd3Nlci1jb21wYXRpYmxlIGZhbGxiYWNrIC8vLy9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICEocHJvY2Vzcy5uZXh0VGljaykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgICBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAvLyBub3QgYSBkaXJlY3QgYWxpYXMgZm9yIElFMTAgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBvbmx5X29uY2UoZG9uZSkgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaCA9IGFzeW5jLmVhY2g7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmICghYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgIHZhciBpdGVyYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA+PSBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2hTZXJpZXMgPSBhc3luYy5lYWNoU2VyaWVzO1xuXG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZm4gPSBfZWFjaExpbWl0KGxpbWl0KTtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgW2FyciwgaXRlcmF0b3IsIGNhbGxiYWNrXSk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPSBhc3luYy5lYWNoTGltaXQ7XG5cbiAgICB2YXIgX2VhY2hMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBpZiAoIWFyci5sZW5ndGggfHwgbGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmIHN0YXJ0ZWQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihhcnJbc3RhcnRlZCAtIDFdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBkb1BhcmFsbGVsID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZG9QYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24obGltaXQsIGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW19lYWNoTGltaXQobGltaXQpXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvU2VyaWVzID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hTZXJpZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuXG4gICAgdmFyIF9hc3luY01hcCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW3guaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX21hcExpbWl0KGxpbWl0KShhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHZhciBfbWFwTGltaXQgPSBmdW5jdGlvbihsaW1pdCkge1xuICAgICAgICByZXR1cm4gZG9QYXJhbGxlbExpbWl0KGxpbWl0LCBfYXN5bmNNYXApO1xuICAgIH07XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gaW5qZWN0IGFsaWFzXG4gICAgYXN5bmMuaW5qZWN0ID0gYXN5bmMucmVkdWNlO1xuICAgIC8vIGZvbGRsIGFsaWFzXG4gICAgYXN5bmMuZm9sZGwgPSBhc3luYy5yZWR1Y2U7XG5cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIC8vIGZvbGRyIGFsaWFzXG4gICAgYXN5bmMuZm9sZHIgPSBhc3luYy5yZWR1Y2VSaWdodDtcblxuICAgIHZhciBfZmlsdGVyID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZmlsdGVyID0gZG9QYXJhbGxlbChfZmlsdGVyKTtcbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcbiAgICAvLyBzZWxlY3QgYWxpYXNcbiAgICBhc3luYy5zZWxlY3QgPSBhc3luYy5maWx0ZXI7XG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID0gYXN5bmMuZmlsdGVyU2VyaWVzO1xuXG4gICAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIHZhciBfZGV0ZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5kZXRlY3QgPSBkb1BhcmFsbGVsKF9kZXRlY3QpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IGRvU2VyaWVzKF9kZXRlY3QpO1xuXG4gICAgYXN5bmMuc29tZSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGFueSBhbGlhc1xuICAgIGFzeW5jLmFueSA9IGFzeW5jLnNvbWU7XG5cbiAgICBhc3luYy5ldmVyeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbGwgYWxpYXNcbiAgICBhc3luYy5hbGwgPSBhc3luYy5ldmVyeTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChmbiksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aFxuICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB2YXIgYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGZuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0YXNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tXG4gICAgICAgICAgICBfZWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudCBmaW5hbCBjYWxsYmFjayBmcm9tIGNhbGxpbmcgaXRzZWxmIGlmIGl0IGVycm9yc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICB0aGVDYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2VhY2goa2V5cywgZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gX2lzQXJyYXkodGFza3Nba10pID8gdGFza3Nba106IFt0YXNrc1trXV07XG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2FmZVJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgX2VhY2goX2tleXMocmVzdWx0cyksIGZ1bmN0aW9uKHJrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW3JrZXldID0gcmVzdWx0c1tya2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3Agc3Vic2VxdWVudCBlcnJvcnMgaGl0dGluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIE1hdGguYWJzKHRhc2subGVuZ3RoIC0gMSkpIHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuICAgICAgICAvLyBVc2UgZGVmYXVsdHMgaWYgdGltZXMgbm90IHBhc3NlZFxuICAgICAgICBpZiAodHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgICAgICB0aW1lcyA9IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRpbWVzIGlzIGEgbnVtYmVyXG4gICAgICAgIHRpbWVzID0gcGFyc2VJbnQodGltZXMsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICB2YXIgd3JhcHBlZFRhc2sgPSBmdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICB2YXIgcmV0cnlBdHRlbXB0ID0gZnVuY3Rpb24odGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2hpbGUgKHRpbWVzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQodGFzaywgISh0aW1lcy09MSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IGNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQsIHJ1biB0aGlzIGFzIGEgY29udHJvbGwgZmxvd1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2tcbiAgICB9O1xuXG4gICAgYXN5bmMud2F0ZXJmYWxsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIV9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd3JhcEl0ZXJhdG9yID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2god3JhcEl0ZXJhdG9yKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gZnVuY3Rpb24oZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKF9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgZWFjaGZuLm1hcCh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgZWFjaGZuLmVhY2goX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBhc3luYy5tYXAsIGVhY2g6IGFzeW5jLmVhY2ggfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKHRhc2tzLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBfbWFwTGltaXQobGltaXQpLCBlYWNoOiBfZWFjaExpbWl0KGxpbWl0KSB9LCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGFzeW5jLm1hcFNlcmllcyh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhfa2V5cyh0YXNrcyksIGZ1bmN0aW9uIChrLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRhc2tzW2tdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIHZhciBtYWtlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbWFrZUNhbGxiYWNrKDApO1xuICAgIH07XG5cbiAgICBhc3luYy5hcHBseSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBfY29uY2F0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNiKSB7XG4gICAgICAgICAgICBmbih4LCBmdW5jdGlvbiAoZXJyLCB5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMud2hpbHN0KHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICh0ZXN0LmFwcGx5KG51bGwsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0ZXN0KCkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3luYy51bnRpbCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvVW50aWwgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICghdGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvVW50aWwoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICBxLnRhc2tzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbnVsbCxcbiAgICAgICAgICAgIGVtcHR5OiBudWxsLFxuICAgICAgICAgICAgZHJhaW46IG51bGwsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcS5kcmFpbiA9IG51bGw7XG4gICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghcS5wYXVzZWQgJiYgd29ya2VycyA8IHEuY29uY3VycmVuY3kgJiYgcS50YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBxLnRhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLmVtcHR5ICYmIHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4gJiYgcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyKHRhc2suZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHEuY29uY3VycmVuY3k7IHcrKykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICBlbmQgPSBzZXF1ZW5jZS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciBtaWQgPSBiZWcgKyAoKGVuZCAtIGJlZyArIDEpID4+PiAxKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKF9iaW5hcnlTZWFyY2gocS50YXNrcywgaXRlbSwgX2NvbXBhcmVUYXNrcykgKyAxLCAwLCBpdGVtKTtcblxuICAgICAgICAgICAgICBpZiAocS5zYXR1cmF0ZWQgJiYgcS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvblxuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5jYXJnbyA9IGZ1bmN0aW9uICh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHdvcmtpbmcgICAgID0gZmFsc2UsXG4gICAgICAgICAgICB0YXNrcyAgICAgICA9IFtdO1xuXG4gICAgICAgIHZhciBjYXJnbyA9IHtcbiAgICAgICAgICAgIHRhc2tzOiB0YXNrcyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgZHJhaW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX2VhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXJnby5kcmFpbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXJnby5zYXR1cmF0ZWQgJiYgdGFza3MubGVuZ3RoID09PSBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnby5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShjYXJnby5wcm9jZXNzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICAgICAgICAgIGlmICh3b3JraW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZihjYXJnby5kcmFpbiAmJiAhY2FyZ28uZHJhaW5lZCkgY2FyZ28uZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdHMgPSB0eXBlb2YgcGF5bG9hZCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRhc2tzLnNwbGljZSgwLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza3Muc3BsaWNlKDAsIHRhc2tzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZHMgPSBfbWFwKHRzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFzay5kYXRhO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoY2FyZ28uZW1wdHkpIGNhcmdvLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgd29ya2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2VyKGRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgX2VhY2godHMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNhcmdvO1xuICAgIH07XG5cbiAgICB2YXIgX2NvbnNvbGVfZm4gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy50aW1lcyA9IGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb3VudGVyID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY291bnRlci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luYy5tYXAoY291bnRlciwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwU2VyaWVzKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGF0LCBbZXJyXS5jb25jYXQocmVzdWx0cykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICByZXR1cm4gYXN5bmMuc2VxLmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIHZhciBfYXBwbHlFYWNoID0gZnVuY3Rpb24gKGVhY2hmbiwgZm5zIC8qYXJncy4uLiovKSB7XG4gICAgICAgIHZhciBnbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgZnVuY3Rpb24gKGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5hcHBseUVhY2ggPSBkb1BhcmFsbGVsKF9hcHBseUVhY2gpO1xuICAgIGFzeW5jLmFwcGx5RWFjaFNlcmllcyA9IGRvU2VyaWVzKF9hcHBseUVhY2gpO1xuXG4gICAgYXN5bmMuZm9yZXZlciA9IGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xuXG4gICAgLy8gTm9kZS5qc1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwidmFyIGFzeW5jICAgICAgID0gcmVxdWlyZSgnYXN5bmMnKSxcbiAgICB1cmxQYXJzZXIgICA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIFJlc291cmNlICAgID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBtdWx0aXBsZSByZXNvdXJjZXMgdG8gbG9hZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIGNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvZ3Jlc3MgcGVyY2VudCBvZiB0aGUgbG9hZGVyIGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogTG9hZGluZyBzdGF0ZSBvZiB0aGUgbG9hZGVyLCB0cnVlIGlmIGl0IGlzIGN1cnJlbnRseSBsb2FkaW5nIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0b3RhbCBwcm9ncmVzcyB0aGF0IGEgc2luZ2xlIHJlc291cmNlIHJlcHJlc2VudHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWlkZGxld2FyZSB0byBydW4gYmVmb3JlIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGFmdGVyIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9sb2FkUmVzb3VyY2VgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRMb2FkUmVzb3VyY2UgPSB0aGlzLl9sb2FkUmVzb3VyY2UuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uTG9hZGAgZnVuY3Rpb24gYm91bmQgd2l0aCB0aGlzIG9iamVjdCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uTG9hZCA9IHRoaXMuX29uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlIGJ1ZmZlciB0aGF0IGZpbGxzIHVudGlsIGBsb2FkYCBpcyBjYWxsZWQgdG8gc3RhcnQgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlW119XG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyID0gW107XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHRyYWNrIGxvYWQgY29tcGxldGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb3VyY2VzIHdhaXRpbmcgdG8gYmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX3F1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fYm91bmRMb2FkUmVzb3VyY2UsIGNvbmN1cnJlbmN5KTtcblxuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGlzIGxvYWRlciBrZXllZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgUmVzb3VyY2U+fVxuICAgICAqL1xuICAgIHRoaXMucmVzb3VyY2VzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCBvciBlcnJvcmVkIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgb25jZSBwZXIgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbG9hZGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdGFydFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHF1ZXVlZCByZXNvdXJjZXMgYWxsIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY29tcGxldGVcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuLyoqXG4gKiBBZGRzIGEgcmVzb3VyY2UgKG9yIG11bHRpcGxlIHJlc291cmNlcykgdG8gdGhlIGxvYWRlciBxdWV1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGEgd2lkZSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwYXJhbWV0ZXJzLiBUaGUgb25seSB0aGluZyB0aGF0IGlzIGFsd2F5c1xuICogcmVxdWlyZWQgdGhlIHVybCB0byBsb2FkLiBBbGwgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6XG4gKlxuICogYGBganNcbiAqIGxvYWRlclxuICogICAgIC8vIG5vcm1hbCBwYXJhbSBzeW50YXhcbiAqICAgICAuYWRkKCdrZXknLCAnaHR0cDovLy4uLicsIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJylcbiAqXG4gKiAgICAgLy8gb2JqZWN0IHN5bnRheFxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MicsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIG5hbWU6ICdrZXkzJyxcbiAqICAgICAgICAgdXJsOiAnaHR0cDovLy4uLidcbiAqICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge31cbiAqICAgICB9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwczovLy4uLicsXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9LFxuICogICAgICAgICBjcm9zc09yaWdpbjogdHJ1ZVxuICogICAgIH0pXG4gKlxuICogICAgIC8vIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJscyBvciBib3RoXG4gKiAgICAgLmFkZChbXG4gKiAgICAgICAgIHsgbmFtZTogJ2tleTQnLCB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgeyB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgJ2h0dHA6Ly8uLi4nXG4gKiAgICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAYWxpYXMgZW5xdWV1ZVxuICogQHBhcmFtIFtuYW1lXSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZCwgaWYgbm90IHBhc3NlZCB0aGUgdXJsIGlzIHVzZWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIHJlbGF0aXZlIHRvIHRoZSBiYXNlVXJsIG9mIHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcGFyYW0gW29wdGlvbnMuY3Jvc3NPcmlnaW5dIHtib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5YSFJfTE9BRF9UWVBFfSBIb3cgc2hvdWxkIHRoaXMgcmVzb3VyY2UgYmUgbG9hZGVkP1xuICogQHBhcmFtIFtvcHRpb25zLnhoclR5cGU9UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVF0ge1Jlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFfSBIb3cgc2hvdWxkIHRoZSBkYXRhIGJlaW5nXG4gKiAgICAgIGxvYWRlZCBiZSBpbnRlcnByZXRlZCB3aGVuIHVzaW5nIFhIUj9cbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMgc3BlY2lmaWMgcmVzb3VyY2UgY29tcGxldGVzIGxvYWRpbmcuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWRkID0gTG9hZGVyLnByb3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgb3B0aW9ucywgY2IpIHtcbiAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciB1cmxzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChuYW1lW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGlmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW5zdGVhZCBvZiBwYXJhbXNcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNiID0gdXJsIHx8IG5hbWUuY2FsbGJhY2sgfHwgbmFtZS5vbkNvbXBsZXRlO1xuICAgICAgICBvcHRpb25zID0gbmFtZTtcbiAgICAgICAgdXJsID0gbmFtZS51cmw7XG4gICAgICAgIG5hbWUgPSBuYW1lLm5hbWUgfHwgbmFtZS5rZXkgfHwgbmFtZS51cmw7XG4gICAgfVxuXG4gICAgLy8gY2FzZSB3aGVyZSBubyBuYW1lIGlzIHBhc3NlZCBzaGlmdCBhbGwgYXJncyBvdmVyIGJ5IG9uZS5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdXJsO1xuICAgICAgICB1cmwgPSBuYW1lO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IHdlIHNoaWZ0ZWQgbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9wZXIgdXJsLlxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVybCBwYXNzZWQgdG8gYWRkIHJlc291cmNlIHRvIGxvYWRlci4nKTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zIGFyZSBvcHRpb25hbCBzbyBwZW9wbGUgbWlnaHQgcGFzcyBhIGZ1bmN0aW9uIGFuZCBubyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW25hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzb3VyY2Ugd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBleGlzdHMuJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJhc2UgdXJsIGlmIHRoaXMgaXNuJ3QgYW4gYWJzb2x1dGUgdXJsXG4gICAgdXJsID0gdGhpcy5faGFuZGxlQmFzZVVybCh1cmwpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBzdG9yZSB0aGUgcmVzb3VyY2VcbiAgICB0aGlzLnJlc291cmNlc1tuYW1lXSA9IG5ldyBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlc291cmNlc1tuYW1lXS5vbmNlKCdhZnRlck1pZGRsZXdhcmUnLCBjYik7XG4gICAgfVxuXG4gICAgdGhpcy5fbnVtVG9Mb2FkKys7XG5cbiAgICAvLyBpZiBhbHJlYWR5IGxvYWRpbmcgYWRkIGl0IHRvIHRoZSB3b3JrZXIgcXVldWVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9ICgxMDAgLSB0aGlzLnByb2dyZXNzKSAvICh0aGlzLl9xdWV1ZS5sZW5ndGgoKSArIHRoaXMuX3F1ZXVlLnJ1bm5pbmcoKSk7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBidWZmZXIgaXQgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlIGxhdGVyXG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDEwMCAvIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5Mb2FkZXIucHJvdG90eXBlLl9oYW5kbGVCYXNlVXJsID0gZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBwYXJzZWRVcmwgPSB1cmxQYXJzZXIucGFyc2UodXJsKTtcblxuICAgIC8vIGFic29sdXRlIHVybCwganVzdCB1c2UgaXQgYXMgaXMuXG4gICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCB8fCBwYXJzZWRVcmwucGF0aG5hbWUuaW5kZXhPZignLy8nKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIC8vIGlmIGJhc2VVcmwgZG9lc24ndCBlbmQgaW4gc2xhc2ggYW5kIHVybCBkb2Vzbid0IHN0YXJ0IHdpdGggc2xhc2gsIHRoZW4gYWRkIGEgc2xhc2ggaW5iZXR3ZWVuXG4gICAgaWYgKFxuICAgICAgICB0aGlzLmJhc2VVcmwubGVuZ3RoICYmXG4gICAgICAgIHRoaXMuYmFzZVVybC5sYXN0SW5kZXhPZignLycpICE9PSB0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSAmJlxuICAgICAgICB1cmwuY2hhckF0KDApICE9PSAnLydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybCArICcvJyArIHVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmJlZm9yZSogdGhlXG4gKiByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKlxuICogQGFsaWFzIHByZVxuICogQHBhcmFtIG1pZGRsZXdhcmUge2Z1bmN0aW9ufSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5iZWZvcmUgPSBMb2FkZXIucHJvdG90eXBlLnByZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB1cCBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gdGhhdCB3aWxsIHJ1biAqYWZ0ZXIqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyB1c2VcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWZ0ZXIgPSBMb2FkZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZS5wdXNoKGZuKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHF1ZXVlIG9mIHRoZSBsb2FkZXIgdG8gcHJlcGFyZSBmb3IgYSBuZXcgbG9hZC5cbiAqXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gdGhpcy5iYXNlVXJsID0gYmFzZVVybCB8fCAnJztcblxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9ncmVzc0NodW5rID0gMDtcblxuICAgIC8vIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUubGVuZ3RoID0gMDtcbiAgICAvLyB0aGlzLl9hZnRlck1pZGRsZXdhcmUubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fbnVtVG9Mb2FkID0gMDtcblxuICAgIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgICB0aGlzLl9xdWV1ZS5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBTdGFydHMgbG9hZGluZyB0aGUgcXVldWVkIHJlc291cmNlcy5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgY29tcGxldGVgIGV2ZW50LlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAvLyByZWdpc3RlciBjb21wbGV0ZSBjYWxsYmFjayBpZiB0aGV5IHBhc3Mgb25lXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBxdWV1ZSBoYXMgYWxyZWFkeSBzdGFydGVkIHdlIGFyZSBkb25lIGhlcmVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBub3RpZnkgb2Ygc3RhcnRcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBzdGFydCB0aGUgaW50ZXJuYWwgcXVldWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMuX2J1ZmZlcltpXSk7XG4gICAgfVxuXG4gICAgLy8gZW1wdHkgdGhlIGJ1ZmZlclxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIExvYWRzIGEgc2luZ2xlIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc291cmNlID0gZnVuY3Rpb24gKHJlc291cmNlLCBkZXF1ZXVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmVzb3VyY2UuX2RlcXVldWUgPSBkZXF1ZXVlO1xuXG4gICAgdGhpcy5fcnVuTWlkZGxld2FyZShyZXNvdXJjZSwgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXNvdXJjZS5vbigncHJvZ3Jlc3MnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAncHJvZ3Jlc3MnKSk7XG5cbiAgICAgICAgcmVzb3VyY2UubG9hZChzZWxmLl9ib3VuZE9uTG9hZCk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbmNlIGVhY2ggcmVzb3VyY2UgaGFzIGxvYWRlZC5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX29uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMsIHRoaXMucmVzb3VyY2VzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGVhY2ggdGltZSBhIHJlc291cmNlcyBpcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAZmlyZXMgZXJyb3JcbiAqIEBmaXJlcyBsb2FkXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICB0aGlzLnByb2dyZXNzICs9IHRoaXMuX3Byb2dyZXNzQ2h1bms7XG5cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgcmVzb3VyY2UpO1xuXG4gICAgLy8gcnVuIG1pZGRsZXdhcmUsIHRoaXMgKm11c3QqIGhhcHBlbiBiZWZvcmUgZGVxdWV1ZSBzbyBzdWItYXNzZXRzIGdldCBhZGRlZCBwcm9wZXJseVxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2FmdGVyTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvdXJjZS5lbWl0KCdhZnRlck1pZGRsZXdhcmUnLCByZXNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5fbnVtVG9Mb2FkLS07XG5cbiAgICAgICAgLy8gZG8gY29tcGxldGlvbiBjaGVja1xuICAgICAgICBpZiAodGhpcy5fbnVtVG9Mb2FkID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgdGhpcy5fb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzb3VyY2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCByZXNvdXJjZS5lcnJvciwgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkJywgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG5cblxuICAgIC8vIHJlbW92ZSB0aGlzIHJlc291cmNlIGZyb20gdGhlIGFzeW5jIHF1ZXVlXG4gICAgcmVzb3VyY2UuX2RlcXVldWUoKTtcbn07XG5cbi8qKlxuICogUnVuIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9uIGEgcmVzb3VyY2UuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fcnVuTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZm5zLCBjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGFzeW5jLmVhY2hTZXJpZXMoZm5zLCBmdW5jdGlvbiAoZm4sIG5leHQpIHtcbiAgICAgICAgZm4uY2FsbChzZWxmLCByZXNvdXJjZSwgbmV4dCk7XG4gICAgfSwgY2IuYmluZCh0aGlzLCByZXNvdXJjZSkpO1xufTtcblxuTG9hZGVyLkxPQURfVFlQRSA9IFJlc291cmNlLkxPQURfVFlQRTtcbkxvYWRlci5YSFJfUkVBRFlfU1RBVEUgPSBSZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEU7XG5Mb2FkZXIuWEhSX1JFU1BPTlNFX1RZUEUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRTtcbiIsInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgX3VybCA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIC8vIHRlc3RzIGlzIENPUlMgaXMgc3VwcG9ydGVkIGluIFhIUiwgaWYgbm90IHdlIG5lZWQgdG8gdXNlIFhEUlxuICAgIHVzZVhkciA9ICEhKHdpbmRvdy5YRG9tYWluUmVxdWVzdCAmJiAhKCd3aXRoQ3JlZGVudGlhbHMnIGluIChuZXcgWE1MSHR0cFJlcXVlc3QoKSkpKSxcbiAgICB0ZW1wQW5jaG9yID0gbnVsbDtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRlZCBieVxuICogYSBzaW5nbGUgVVJMLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIG5hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd8c3RyaW5nW119IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIGZvciBhdWRpby92aWRlbyBsb2FkcyB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7c3RyaW5nfGJvb2xlYW59IElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IERlZmF1bHQgaXMgdG8gZGV0ZXJtaW5lIGF1dG9tYXRpY2FsbHkuXG4gKiBAcGFyYW0gW29wdGlvbnMubG9hZFR5cGU9UmVzb3VyY2UuTE9BRF9UWVBFLlhIUl0ge1Jlc291cmNlLkxPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW29wdGlvbnMubWV0YWRhdGFdIHtvYmplY3R9IEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmUuXG4gKi9cbmZ1bmN0aW9uIFJlc291cmNlKG5hbWUsIHVybCwgb3B0aW9ucykge1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBuYW1lIGFuZCB1cmwgYXJlIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgYSByZXNvdXJjZS4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdXJsIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgdXJsIGlzIGEgZGF0YSB1cmwuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNEYXRhVXJsID0gdGhpcy51cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnl9XG4gICAgICovXG4gICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jcm9zc09yaWdpbiA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnYW5vbnltb3VzJyA6IG9wdGlvbnMuY3Jvc3NPcmlnaW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIG9mIGxvYWRpbmcgdG8gdXNlIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2UuTE9BRF9UWVBFfVxuICAgICAqL1xuICAgIHRoaXMubG9hZFR5cGUgPSBvcHRpb25zLmxvYWRUeXBlIHx8IHRoaXMuX2RldGVybWluZUxvYWRUeXBlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSB1c2VkIHRvIGxvYWQgdGhlIHJlc291cmNlIHZpYSBYSFIuIElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy54aHJUeXBlID0gb3B0aW9ucy54aHJUeXBlO1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgaW5mbyBmb3IgbWlkZGxld2FyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgd2hpbGUgbG9hZGluZyAoaWYgYW55KS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Vycm9yfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFhIUiBvYmplY3QgdGhhdCB3YXMgdXNlZCB0byBsb2FkIHRoaXMgcmVzb3VyY2UuIFRoaXMgaXMgb25seSBzZXRcbiAgICAgKiB3aGVuIGBsb2FkVHlwZWAgaXMgYFJlc291cmNlLkxPQURfVFlQRS5YSFJgLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7WE1MSHR0cFJlcXVlc3R9XG4gICAgICovXG4gICAgdGhpcy54aHIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBqc29uLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0pzb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgeG1sLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1htbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhbiBpbWFnZSB0YWcuIE9ubHkgdmFsaWQgYWZ0ZXIgdGhlIHJlc291cmNlXG4gICAgICogaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gYXVkaW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0F1ZGlvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGEgdmlkZW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1ZpZGVvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGRlcXVldWVgIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBhIHN0b3JhZ2UgcGxhY2UgZm9yIHRoZSBhc3luYyBxdWV1ZSBkZXF1ZXVlIG1ldGhvZFxuICAgICAqIHVzZWQgcHJpdmF0ZWx5IGJ5IHRoZSBsb2FkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2RlcXVldWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBjb21wbGV0ZWAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kQ29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkVycm9yYCBmdW5jdGlvbiBib3VuZCB0byB0aGlzIHJlc291cmNlJ3MgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25Qcm9ncmVzc2AgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyA9IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcblxuICAgIC8vIHhociBjYWxsYmFja3NcbiAgICB0aGlzLl9ib3VuZFhock9uRXJyb3IgPSB0aGlzLl94aHJPbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYaHJPbkFib3J0ID0gdGhpcy5feGhyT25BYm9ydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25Mb2FkID0gdGhpcy5feGhyT25Mb2FkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYZHJPblRpbWVvdXQgPSB0aGlzLl94ZHJPblRpbWVvdXQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcmVzb3VyY2UgYmVpbmdzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGVhY2ggdGltZSBwcm9ncmVzcyBvZiB0aGlzIHJlc291cmNlIGxvYWQgdXBkYXRlcy5cbiAgICAgKiBOb3QgYWxsIHJlc291cmNlcyB0eXBlcyBhbmQgbG9hZGVyIHN5c3RlbXMgY2FuIHN1cHBvcnQgdGhpcyBldmVudFxuICAgICAqIHNvIHNvbWV0aW1lcyBpdCBtYXkgbm90IGJlIGF2YWlsYWJsZS4gSWYgdGhlIHJlc291cmNlXG4gICAgICogaXMgYmVpbmcgbG9hZGVkIG9uIGEgbW9kZXJuIGJyb3dzZXIsIHVzaW5nIFhIUiwgYW5kIHRoZSByZW1vdGUgc2VydmVyXG4gICAgICogcHJvcGVybHkgc2V0cyBDb250ZW50LUxlbmd0aCBoZWFkZXJzLCB0aGVuIHRoaXMgd2lsbCBiZSBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcHJvZ3Jlc3NcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgdGhpcyByZXNvdXJjZSBoYXMgbG9hZGVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaXQgd2lsbFxuICAgICAqIGJlIGluIHRoZSBgZXJyb3JgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xufVxuXG5SZXNvdXJjZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVzb3VyY2U7XG5tb2R1bGUuZXhwb3J0cyA9IFJlc291cmNlO1xuXG4vKipcbiAqIE1hcmtzIHRoZSByZXNvdXJjZSBhcyBjb21wbGV0ZS5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgaW4gYSB3cmFwcGVyIG9yIHNvbWV0aGluZy4uLmdyb3NzLi4uLlxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICAgIGlmICh0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvcik7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIub25lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25wcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbmxvYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBLaWNrcyBvZmYgbG9hZGluZyBvZiB0aGlzIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBzdGFydFxuICogQHBhcmFtIFtjYWxsYmFja10ge2Z1bmN0aW9ufSBPcHRpb25hbCBjYWxsYmFjayB0byBjYWxsIG9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBpZiBhIGNhbGxiYWNrIGlzIHNldCwgbGlzdGVuIGZvciBjb21wbGV0ZSBldmVudFxuICAgIGlmIChjYikge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4gPT09IGZhbHNlIHx8IHR5cGVvZiB0aGlzLmNyb3NzT3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdGhpcy5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4odGhpcy51cmwpO1xuICAgIH1cblxuICAgIHN3aXRjaCh0aGlzLmxvYWRUeXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEltYWdlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5BVURJTzpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuVklERU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlhIUjpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh1c2VYZHIgJiYgdGhpcy5jcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYZHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYaHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gSW1hZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuc3JjID0gdGhpcy51cmw7XG5cbiAgICB0aGlzLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEhUTUxBdWRpb0VsZW1lbnQgb3IgSFRNTFZpZGVvRWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJyAmJiB0eXBlb2YgQXVkaW8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBBdWRpbygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgJyArIHR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBDb2Nvb25KUyBDYW52YXMrIHJ1bnRpbWUsIGxhY2tzIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zcmMgPSBBcnJheS5pc0FycmF5KHRoaXMudXJsKSA/IHRoaXMudXJsWzBdIDogdGhpcy51cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51cmwubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWydpcycgKyB0eXBlWzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKV0gPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuXG4gICAgdGhpcy5kYXRhLmxvYWQoKTtcbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gWE1MSHR0cFJlcXVlc3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGhyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIHNldCB0aGUgcmVxdWVzdCB0eXBlIGFuZCB1cmxcbiAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gbG9hZCBqc29uIGFzIHRleHQgYW5kIHBhcnNlIGl0IG91cnNlbHZlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHNvbWUgYnJvd3NlcnNcbiAgICAvLyAqY291Z2gqIHNhZmFyaSAqY291Z2gqIGNhbid0IGRlYWwgd2l0aCBpdC5cbiAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OIHx8IHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gdGhpcy54aHJUeXBlO1xuICAgIH1cblxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvciwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQsIGZhbHNlKTtcblxuICAgIHhoci5zZW5kKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhEb21haW5SZXF1ZXN0LiBUaGlzIGlzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHN1cHBvcnQgSUU5IChncm9zcykuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGRyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGRyID0gdGhpcy54aHIgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcblxuICAgIC8vIFhEb21haW5SZXF1ZXN0IGhhcyBhIGZldyBxdWlya3MuIE9jY2FzaW9uYWxseSBpdCB3aWxsIGFib3J0IHJlcXVlc3RzXG4gICAgLy8gQSB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBtYWtlIHN1cmUgQUxMIGNhbGxiYWNrcyBhcmUgc2V0IGV2ZW4gaWYgbm90IHVzZWRcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTc4Njk2Ni94ZG9tYWlucmVxdWVzdC1hYm9ydHMtcG9zdC1vbi1pZS05XG4gICAgeGRyLnRpbWVvdXQgPSA1MDAwO1xuXG4gICAgeGRyLm9uZXJyb3IgPSB0aGlzLl9ib3VuZFhock9uRXJyb3I7XG4gICAgeGRyLm9udGltZW91dCA9IHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0O1xuICAgIHhkci5vbnByb2dyZXNzID0gdGhpcy5fYm91bmRPblByb2dyZXNzO1xuICAgIHhkci5vbmxvYWQgPSB0aGlzLl9ib3VuZFhock9uTG9hZDtcblxuICAgIHhkci5vcGVuKCdHRVQnLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyAgTm90ZTogVGhlIHhkci5zZW5kKCkgY2FsbCBpcyB3cmFwcGVkIGluIGEgdGltZW91dCB0byBwcmV2ZW50IGFuIGlzc3VlIHdpdGggdGhlIGludGVyZmFjZSB3aGVyZSBzb21lIHJlcXVlc3RzIGFyZSBsb3N0XG4gICAgLy8gIGlmIG11bHRpcGxlIFhEb21haW5SZXF1ZXN0cyBhcmUgYmVpbmcgc2VudCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIC8vIFNvbWUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2lzc3Vlcy8xMjQ4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHhkci5zZW5kKCk7XG4gICAgfSwgMCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzb3VyY2UgdXNlZCBpbiBsb2FkaW5nIHZpYSBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB0eXBlIHtzdHJpbmd9IFRoZSBlbGVtZW50IHR5cGUgKHZpZGVvIG9yIGF1ZGlvKS5cbiAqIEBwYXJhbSB1cmwge3N0cmluZ30gVGhlIHNvdXJjZSBVUkwgdG8gbG9hZCBmcm9tLlxuICogQHBhcmFtIFttaW1lXSB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIG9mIHRoZSB2aWRlb1xuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9jcmVhdGVTb3VyY2UgPSBmdW5jdGlvbiAodHlwZSwgdXJsLCBtaW1lKSB7XG4gICAgaWYgKCFtaW1lKSB7XG4gICAgICAgIG1pbWUgPSB0eXBlICsgJy8nICsgdXJsLnN1YnN0cih1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSB1cmw7XG4gICAgc291cmNlLnR5cGUgPSBtaW1lO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBlcnJvcnMgb3V0LlxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBlcnJvciBldmVudCBmcm9tIHRoZSBlbGVtZW50IHRoYXQgZW1pdHMgaXQuXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX29uRXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBlbGVtZW50IHVzaW5nICcgKyBldmVudC50YXJnZXQubm9kZU5hbWUpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBwcm9ncmVzcyBldmVudCBmaXJlcyBmb3IgeGhyL3hkci5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vblByb2dyZXNzID0gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB0aGlzLCBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYW4gZXJyb3IgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEVycm9yRXZlbnR8RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgcmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgZmFpbGVkLiAnICtcbiAgICAgICAgJ1N0YXR1czogJyArIHRoaXMueGhyLnN0YXR1cyArICcsIHRleHQ6IFwiJyArIHRoaXMueGhyLnN0YXR1c1RleHQgKyAnXCInXG4gICAgKTtcblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGFib3J0IGV2ZW50IGZpcmVzIGZvciB4aHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEFib3J0RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB3YXMgYWJvcnRlZCBieSB0aGUgdXNlci4nKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIHRpbWVvdXQgZXZlbnQgZmlyZXMgZm9yIHhkci5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94ZHJPblRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB0aW1lZCBvdXQuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBkYXRhIHN1Y2Nlc3NmdWxseSBsb2FkcyBmcm9tIGFuIHhoci94ZHIgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0TG9hZEV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHhociA9IHRoaXMueGhyLFxuICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzICE9PSB1bmRlZmluZWQgPyB4aHIuc3RhdHVzIDogMjAwOyAvL1hEUiBoYXMgbm8gYC5zdGF0dXNgLCBhc3N1bWUgMjAwLlxuXG4gICAgLy8gc3RhdHVzIGNhbiBiZSAwIHdoZW4gdXNpbmcgdGhlIGZpbGU6Ly8gcHJvdG9jb2wsIGFsc28gY2hlY2sgaWYgYSByZXNwb25zZSB3YXMgZm91bmRcbiAgICBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDQgfHwgKHN0YXR1cyA9PT0gMCAmJiB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIC8vIGlmIHRleHQsIGp1c3QgcmV0dXJuIGl0XG4gICAgICAgIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYganNvbiwgcGFyc2UgaW50byBqc29uIG9iamVjdFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT04pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSnNvbiA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIGpzb246JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgeG1sLCBwYXJzZSBpbnRvIGFuIHhtbCBkb2N1bWVudCBvciBkaXYgZWxlbWVudFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkaXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNYbWwgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSBsb2FkZWQgeG1sOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyIHR5cGVzIGp1c3QgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdbJyArIHhoci5zdGF0dXMgKyAnXScgKyB4aHIuc3RhdHVzVGV4dCArICc6JyArIHhoci5yZXNwb25zZVVSTCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gcmVxVHlwZSh4aHIpIHtcbiAgICByZXR1cm4geGhyLnRvU3RyaW5nKCkucmVwbGFjZSgnb2JqZWN0ICcsICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGZvciB0aGlzIHJlc291cmNlIGJhc2VkIG9uIGlmIHRoZSB1cmxcbiAqIGZvciB0aGlzIHJlc291cmNlIGlzIGNyb3NzLW9yaWdpbi4gSWYgY3Jvc3NPcmlnaW4gd2FzIG1hbnVhbGx5IHNldCwgdGhpc1xuICogZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgdG8gdGVzdC5cbiAqIEBwYXJhbSBbbG9jYXRpb249d2luZG93LmxvY2F0aW9uXSB7b2JqZWN0fSBUaGUgbG9jYXRpb24gb2JqZWN0IHRvIHRlc3QgYWdhaW5zdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNyb3NzT3JpZ2luIHZhbHVlIHRvIHVzZSAob3IgZW1wdHkgc3RyaW5nIGZvciBub25lKS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVDcm9zc09yaWdpbiA9IGZ1bmN0aW9uICh1cmwsIGxvYykge1xuICAgIC8vIGRhdGE6IGFuZCBqYXZhc2NyaXB0OiB1cmxzIGFyZSBjb25zaWRlcmVkIHNhbWUtb3JpZ2luXG4gICAgaWYgKHVybC5pbmRleE9mKCdkYXRhOicpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGlzIHdpbmRvdy5sb2NhdGlvblxuICAgIGxvYyA9IGxvYyB8fCB3aW5kb3cubG9jYXRpb247XG5cbiAgICBpZiAoIXRlbXBBbmNob3IpIHtcbiAgICAgICAgdGVtcEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG5cbiAgICAvLyBsZXQgdGhlIGJyb3dzZXIgZGV0ZXJtaW5lIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSB1cmwgb2YgdGhpcyByZXNvdXJjZSBhbmQgdGhlblxuICAgIC8vIHBhcnNlIHdpdGggdGhlIG5vZGUgdXJsIGxpYiwgd2UgY2FuJ3QgdXNlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICAgIC8vIGJlY2F1c2UgdGhleSBkb24ndCB3b3JrIGluIElFOSA6KFxuICAgIHRlbXBBbmNob3IuaHJlZiA9IHVybDtcbiAgICB1cmwgPSBfdXJsLnBhcnNlKHRlbXBBbmNob3IuaHJlZik7XG5cbiAgICB2YXIgc2FtZVBvcnQgPSAoIXVybC5wb3J0ICYmIGxvYy5wb3J0ID09PSAnJykgfHwgKHVybC5wb3J0ID09PSBsb2MucG9ydCk7XG5cbiAgICAvLyBpZiBjcm9zcyBvcmlnaW5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9PSBsb2MuaG9zdG5hbWUgfHwgIXNhbWVQb3J0IHx8IHVybC5wcm90b2NvbCAhPT0gbG9jLnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiAnYW5vbnltb3VzJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlc3BvbnNlVHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZVxuICogcmVzb3VyY2UgYmVpbmcgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHJlc3BvbnNlVHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lWGhyVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX3hoclR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZUxvYWRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZXNvdXJjZS5fbG9hZFR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLkxPQURfVFlQRS5YSFI7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2dldEV4dGVuc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcy51cmwsXG4gICAgICAgIGV4dDtcblxuICAgIGlmICh0aGlzLmlzRGF0YVVybCkge1xuICAgICAgICB2YXIgc2xhc2hJbmRleCA9IHVybC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGV4dCA9IHVybC5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEsIHVybC5pbmRleE9mKCc7Jywgc2xhc2hJbmRleCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXJ5U3RhcnQgPSB1cmwuaW5kZXhPZignPycpO1xuICAgICAgICBpZiAocXVlcnlTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dDtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWltZSB0eXBlIG9mIGFuIFhIUiByZXF1ZXN0IGJhc2VkIG9uIHRoZSByZXNwb25zZVR5cGUgb2ZcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIHRvIHVzZS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRNaW1lRnJvbVhoclR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1iaW5hcnknO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vYmxvYic7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veG1sJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT046XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVDpcbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUOlxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcblxuICAgIH1cbn07XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxvYWRpbmcgYSByZXNvdXJjZSBjYW4gdXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IExPQURfVFlQRVxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5YSFIgLSBVc2VzIFhNTEh0dHBSZXF1ZXN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5JTUFHRSAtIFVzZXMgYW4gYEltYWdlYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLkFVRElPIC0gVXNlcyBhbiBgQXVkaW9gIG9iamVjdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuVklERU8gLSBVc2VzIGEgYFZpZGVvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlLkxPQURfVFlQRSA9IHtcbiAgICBYSFI6ICAgIDEsXG4gICAgSU1BR0U6ICAyLFxuICAgIEFVRElPOiAgMyxcbiAgICBWSURFTzogIDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVBRFlfU1RBVEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuVU5TRU5UIC0gb3BlbigpaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLk9QRU5FRCAtIHNlbmQoKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5IRUFERVJTX1JFQ0VJVkVEIC0gc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIGhlYWRlcnMgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5MT0FESU5HIC0gRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLkRPTkUgLSBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5SZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEUgPSB7XG4gICAgVU5TRU5UOiAwLFxuICAgIE9QRU5FRDogMSxcbiAgICBIRUFERVJTX1JFQ0VJVkVEOiAyLFxuICAgIExPQURJTkc6IDMsXG4gICAgRE9ORTogNFxufTtcblxuLyoqXG4gKiBUaGUgWEhSIHJlYWR5IHN0YXRlcywgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IFhIUl9SRVNQT05TRV9UWVBFXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVCAtIGRlZmF1bHRzIHRvIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVIgLSBBcnJheUJ1ZmZlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkJMT0IgLSBCbG9iXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQgLSBEb2N1bWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkpTT04gLSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5URVhUIC0gU3RyaW5nXG4gKi9cblJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFID0ge1xuICAgIERFRkFVTFQ6ICAgICd0ZXh0JyxcbiAgICBCVUZGRVI6ICAgICAnYXJyYXlidWZmZXInLFxuICAgIEJMT0I6ICAgICAgICdibG9iJyxcbiAgICBET0NVTUVOVDogICAnZG9jdW1lbnQnLFxuICAgIEpTT046ICAgICAgICdqc29uJyxcbiAgICBURVhUOiAgICAgICAndGV4dCdcbn07XG5cblJlc291cmNlLl9sb2FkVHlwZU1hcCA9IHtcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3BuZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZWcnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3dlYnAnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRVxufTtcblxuUmVzb3VyY2UuX3hoclR5cGVNYXAgPSB7XG4gICAgLy8geG1sXG4gICAgJ3hodG1sJzogICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bWwnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3htbCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RteCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RzeCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3N2Zyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG5cbiAgICAvLyBpbWFnZXNcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2JtcCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RnYSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcblxuICAgIC8vIGpzb25cbiAgICAnanNvbic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OLFxuXG4gICAgLy8gdGV4dFxuICAgICd0ZXh0JzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQsXG4gICAgJ3R4dCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsb2FkIHR5cGUgdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGV4dG5hbWUge3N0cmluZ30gVGhlIGV4dGVuc2lvbiB0byBzZXQgdGhlIHR5cGUgZm9yLCBlLmcuIFwicG5nXCIgb3IgXCJmbnRcIlxuICogQHBhcmFtIGxvYWRUeXBlIHtSZXNvdXJjZS5MT0FEX1RZUEV9IFRoZSBsb2FkIHR5cGUgdG8gc2V0IGl0IHRvLlxuICovXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25Mb2FkVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCBsb2FkVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5fbG9hZFR5cGVNYXAsIGV4dG5hbWUsIGxvYWRUeXBlKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSB4aHJUeXBlIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHhociB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCB4aHJUeXBlKSB7XG4gICAgc2V0RXh0TWFwKFJlc291cmNlLl94aHJUeXBlTWFwLCBleHRuYW1lLCB4aHJUeXBlKTtcbn07XG5cbmZ1bmN0aW9uIHNldEV4dE1hcChtYXAsIGV4dG5hbWUsIHZhbCkge1xuICAgIGlmIChleHRuYW1lICYmIGV4dG5hbWUuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgIGV4dG5hbWUgPSBleHRuYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dG5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hcFtleHRuYW1lXSA9IHZhbDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICAgIF9rZXlTdHI6IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIixcblxuICAgIGVuY29kZUJpbmFyeTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBcIlwiO1xuICAgICAgICB2YXIgYnl0ZWJ1ZmZlcjtcbiAgICAgICAgdmFyIGVuY29kZWRDaGFySW5kZXhlcyA9IG5ldyBBcnJheSg0KTtcbiAgICAgICAgdmFyIGlueCA9IDA7XG4gICAgICAgIHZhciBqbnggPSAwO1xuICAgICAgICB2YXIgcGFkZGluZ0J5dGVzID0gMDtcblxuICAgICAgICB3aGlsZSAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBGaWxsIGJ5dGUgYnVmZmVyIGFycmF5XG4gICAgICAgICAgICBieXRlYnVmZmVyID0gbmV3IEFycmF5KDMpO1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBieXRlYnVmZmVyLmxlbmd0aDsgam54KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGF3YXkgaGlnaC1vcmRlciBieXRlLCBhcyBkb2N1bWVudGVkIGF0OlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdCNIYW5kbGluZ19iaW5hcnlfZGF0YVxuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSBpbnB1dC5jaGFyQ29kZUF0KGlueCsrKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGVhY2ggZW5jb2RlZCBjaGFyYWN0ZXIsIDYgYml0cyBhdCBhIHRpbWVcbiAgICAgICAgICAgIC8vIGluZGV4IDE6IGZpcnN0IDYgYml0c1xuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzBdID0gYnl0ZWJ1ZmZlclswXSA+PiAyO1xuICAgICAgICAgICAgLy8gaW5kZXggMjogc2Vjb25kIDYgYml0cyAoMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAxICsgNCBtb3N0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBieXRlIDIpXG4gICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMV0gPSAoKGJ5dGVidWZmZXJbMF0gJiAweDMpIDw8IDQpIHwgKGJ5dGVidWZmZXJbMV0gPj4gNCk7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiB0aGlyZCA2IGJpdHMgKDQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMiArIDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gKChieXRlYnVmZmVyWzFdICYgMHgwZikgPDwgMikgfCAoYnl0ZWJ1ZmZlclsyXSA+PiA2KTtcbiAgICAgICAgICAgIC8vIGluZGV4IDM6IGZvcnRoIDYgYml0cyAoNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gYnl0ZWJ1ZmZlclsyXSAmIDB4M2Y7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHBhZGRpbmcgaGFwcGVuZWQsIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgIHBhZGRpbmdCeXRlcyA9IGlueCAtIChpbnB1dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFkZGluZ0J5dGVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCAyIGNoYXJhY3RlcnMgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMl0gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBsYXN0IGNoYXJhY3RlciB0byBwYWRkaW5nIGNoYXJcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vIHBhZGRpbmcgLSBwcm9jZWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vdyB3ZSB3aWxsIGdyYWIgZWFjaCBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgb3V0IG9mIG91ciBrZXlzdHJpbmdcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIG91ciBpbmRleCBhcnJheSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQgc3RyaW5nXG4gICAgICAgICAgICBmb3IgKGpueCA9IDA7IGpueCA8IGVuY29kZWRDaGFySW5kZXhlcy5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHRoaXMuX2tleVN0ci5jaGFyQXQoZW5jb2RlZENoYXJJbmRleGVzW2pueF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9Mb2FkZXInKTtcblxubW9kdWxlLmV4cG9ydHMuUmVzb3VyY2UgPSByZXF1aXJlKCcuL1Jlc291cmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzLm1pZGRsZXdhcmUgPSB7XG4gICAgY2FjaGluZzoge1xuICAgICAgICBtZW1vcnk6IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnknKVxuICAgIH0sXG4gICAgcGFyc2luZzoge1xuICAgICAgICBibG9iOiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL3BhcnNpbmcvYmxvYicpXG4gICAgfVxufTtcbiIsIi8vIGEgc2ltcGxlIGluLW1lbW9yeSBjYWNoZSBmb3IgcmVzb3VyY2VzXG52YXIgY2FjaGUgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICAvLyBpZiBjYWNoZWQsIHRoZW4gc2V0IGRhdGEgYW5kIGNvbXBsZXRlIHRoZSByZXNvdXJjZVxuICAgICAgICBpZiAoY2FjaGVbcmVzb3VyY2UudXJsXSkge1xuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IGNhY2hlW3Jlc291cmNlLnVybF07XG4gICAgICAgICAgICByZXNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIG5vdCBjYWNoZWQsIHdhaXQgZm9yIGNvbXBsZXRlIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb3VyY2Uub25jZSgnY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICBjYWNoZVt0aGlzLnVybF0gPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgnLi4vLi4vUmVzb3VyY2UnKSxcbiAgICBiNjQgPSByZXF1aXJlKCcuLi8uLi9iNjQnKTtcblxud2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblxuLy8gYSBtaWRkbGV3YXJlIGZvciB0cmFuc2Zvcm1pbmcgWEhSIGxvYWRlZCBCbG9icyBpbnRvIG1vcmUgdXNlZnVsIG9iamVjdHNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIHdhcyBhbiBYSFIgbG9hZCBvZiBhIGJsb2JcbiAgICAgICAgaWYgKHJlc291cmNlLnhociAmJiByZXNvdXJjZS54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBibG9iIHN1cHBvcnQgd2UgcHJvYmFibHkgZ290IGEgYmluYXJ5IHN0cmluZyBiYWNrXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5CbG9iIHx8IHR5cGVvZiByZXNvdXJjZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVzb3VyY2UueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaW1hZ2UsIGNvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgaW50byBhIGRhdGEgdXJsXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgdHlwZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5zcmMgPSAnZGF0YTonICsgdHlwZSArICc7YmFzZTY0LCcgKyBiNjQuZW5jb2RlQmluYXJ5KHJlc291cmNlLnhoci5yZXNwb25zZVRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGltYWdlIGxvYWRzIGFuZCB0aGVuIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5vbmxvYWQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY29udGVudCB0eXBlIHNheXMgdGhpcyBpcyBhbiBpbWFnZSwgdGhlbiB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBibG9iIGludG8gYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvdXJjZS5kYXRhLnR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlc291cmNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuYmxvYiA9IHJlc291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gc3JjO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuaXNJbWFnZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBubyBsb25nZXIgdXNlZCBibG9iIGFmdGVyIHRoZSBpbWFnZSBsb2Fkc1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJwaXhpLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMC4xMC1kZXZcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlBpeGkuanMgaXMgYSBmYXN0IGxpZ2h0d2VpZ2h0IDJEIGxpYnJhcnkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGRldmljZXMuXCIsXG4gIFwiYXV0aG9yXCI6IFwiTWF0IEdyb3Zlc1wiLFxuICBcImNvbnRyaWJ1dG9yc1wiOiBbXG4gICAgXCJDaGFkIEVuZ2xlciA8Y2hhZEBwYW50aGVyZGV2LmNvbT5cIixcbiAgICBcIlJpY2hhcmQgRGF2ZXkgPHJkYXZleUBnbWFpbC5jb20+XCJcbiAgXSxcbiAgXCJtYWluXCI6IFwiLi9zcmMvaW5kZXguanNcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHA6Ly9nb29kYm95ZGlnaXRhbC5jb20vXCIsXG4gIFwiYnVnc1wiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXNcIixcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiZ3VscCAmJiBndWxwIHdhdGNoXCIsXG4gICAgXCJ0ZXN0XCI6IFwiZ3VscCAmJiB0ZXN0ZW0gY2lcIixcbiAgICBcImJ1aWxkXCI6IFwiZ3VscFwiLFxuICAgIFwiZG9jc1wiOiBcImpzZG9jIC1jIC4vZ3VscC91dGlsL2pzZG9jLmNvbmYuanNvbiAtUiBSRUFETUUubWRcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpbi9cIixcbiAgICBcInNyYy9cIixcbiAgICBcIkNPTlRSSUJVVElORy5tZFwiLFxuICAgIFwiTElDRU5TRVwiLFxuICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgXCJSRUFETUUubWRcIlxuICBdLFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhc3luY1wiOiBcIl4xLjUuMFwiLFxuICAgIFwiYnJmc1wiOiBcIl4xLjQuMVwiLFxuICAgIFwiZWFyY3V0XCI6IFwiXjIuMC43XCIsXG4gICAgXCJldmVudGVtaXR0ZXIzXCI6IFwiXjEuMS4xXCIsXG4gICAgXCJnbC1tYXRyaXhcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL3RvamkvZ2wtbWF0cml4LmdpdFwiLFxuICAgIFwib2JqZWN0LWFzc2lnblwiOiBcIl40LjAuMVwiLFxuICAgIFwicGl4aS1nbC1jb3JlXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9Hb29kQm95RGlnaXRhbC9waXhpLWdsLWNvcmUuZ2l0XCIsXG4gICAgXCJyZXNvdXJjZS1sb2FkZXJcIjogXCJeMS42LjRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjExLjEuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4zLjIuMFwiLFxuICAgIFwiZGVsXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOS4wXCIsXG4gICAgXCJndWxwLWNhY2hlZFwiOiBcIl4xLjEuMFwiLFxuICAgIFwiZ3VscC1jb25jYXRcIjogXCJeMi42LjBcIixcbiAgICBcImd1bHAtZGVidWdcIjogXCJeMi4xLjBcIixcbiAgICBcImd1bHAtaGVhZGVyXCI6IFwiXjEuNy4xXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjExLjJcIixcbiAgICBcImd1bHAtbWlycm9yXCI6IFwiXjAuNC4wXCIsXG4gICAgXCJndWxwLXBsdW1iZXJcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtcmVuYW1lXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJndWxwLXNvdXJjZW1hcHNcIjogXCJeMS41LjJcIixcbiAgICBcImd1bHAtdWdsaWZ5XCI6IFwiXjEuNC4xXCIsXG4gICAgXCJndWxwLXV0aWxcIjogXCJeMy4wLjZcIixcbiAgICBcImphZ3VhcmpzLWpzZG9jXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZHNoaW1qcy9qYWd1YXJqcy1qc2RvYy5naXRcIixcbiAgICBcImpzZG9jXCI6IFwiXjMuMy4yXCIsXG4gICAgXCJqc2hpbnQtc3VtbWFyeVwiOiBcIl4wLjQuMFwiLFxuICAgIFwibWluaW1pc3RcIjogXCJeMS4yLjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMy4yXCIsXG4gICAgXCJyZXF1aXJlLWRpclwiOiBcIl4wLjMuMFwiLFxuICAgIFwicnVuLXNlcXVlbmNlXCI6IFwiXjEuMS4yXCIsXG4gICAgXCJ0ZXN0ZW1cIjogXCJeMC45LjRcIixcbiAgICBcInZpbnlsLWJ1ZmZlclwiOiBcIl4xLjAuMFwiLFxuICAgIFwidmlueWwtc291cmNlLXN0cmVhbVwiOiBcIl4xLjEuMFwiLFxuICAgIFwid2F0Y2hpZnlcIjogXCJeMy40LjBcIlxuICB9LFxuICBcImJyb3dzZXJpZnlcIjoge1xuICAgIFwidHJhbnNmb3JtXCI6IFtcbiAgICAgIFwiYnJmc1wiXG4gICAgXVxuICB9XG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLy8gYWRkIHNvbWUgZXh0cmEgdmFyaWFibGVzIHRvIHRoZSBjb250YWluZXIuLlxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpXG4pO1xuXG5cbi8qKlxuICogVGhlIEFjY2Vzc2liaWxpdHkgbWFuYWdlciByZWFjcmVhdGVzIHRoZSBhYmlsaXR5IHRvIHRhYiBhbmQgYW5kIGhhdmUgY29udGVudCByZWFkIGJ5IHNjcmVlbiByZWFkZXJzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGFzIGl0IGNhbiBwb3NzaWJseSBoZWxwIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyBhY2Nlc3MgcGl4aSBjb250ZW50LlxuICogTXVjaCBsaWtlIGludGVyYWN0aW9uIGFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBtYWRlIGFjY2Vzc2libGUuIFRoaXMgbWFuYWdlciB3aWxsIG1hcCB0aGUgZXZlbnRzIGFzIGlmIHRoZSBtb3VzZSB3YXMgYmVpbmcgdXNlZCwgbWluaW1pemluZyB0aGUgZWZmZXJvdCByZXF1aXJlZCB0byBpbXBsZW1lbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqL1xuZnVuY3Rpb24gQWNjZXNzaWJpbGl0eU1hbmFnZXIocmVuZGVyZXIpXG57XG5cdC8vIGZpcnN0IHdlIGNyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFxuICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUubGVmdCA9IDA7XG4gICAvL1xuICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuICAgXHRcbiAgIFx0LyoqXG4gICBcdCAqIFRoaXMgaXMgdGhlIGRvbSBlbGVtZW50IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gICBcdHRoaXMuZGl2ID0gZGl2O1xuXG4gICBcdC8qKlxuICAgXHQgKiBBIHNpbXBsZSBwb29sIGZvciBzdG9yaW5nIGRpdnMuXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7QXJyYXl9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuIFx0dGhpcy5wb29sID0gW107XG5cbiBcdC8qKlxuIFx0ICogVGhpcyBpcyBhIHRpY2sgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHJlbmRlcmVkLlxuIFx0ICogXG4gXHQgKiBAdHlwZSB7TnVtYmVyfVxuIFx0ICogQHByaXZhdGVcbiBcdCAqL1xuICAgXHR0aGlzLnJlbmRlcklkID0gMDtcblxuICAgXHQvKipcbiAgIFx0ICogU2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB2aXN1YWxseSBzaG93IHRoZSBkaXZzXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgIFx0ICovXG4gICBcdHRoaXMuZGVidWcgPSBmYWxzZTtcblxuICBcdC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGFjY2Vzc2liaWxpdHkgbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgIFx0LyoqXG4gICAgICogVGhlIGFycmF5IG9mIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzaWJsZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHByZSBiaW5kIHRoZSBmdW5jdGlvbnMuLlxuICAgICAqL1xuICAgXHR0aGlzLl9vbktleURvd24gPSB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKTtcbiAgIFx0dGhpcy5fb25Nb3VzZU1vdmUgPSB0aGlzLl9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogc3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFuYWdlci4gSWYgdGhlcmUgYXJlIG5vIGFjY2Vzc2libGUgb2JqZWN0cyBvciB0aGUgbW91c2UgaXMgbW92aW5nIHRoZSB3aWxsIGJlIGZhbHNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cbiAgIFx0Ly8gbGV0IGxpc3RlbiBmb3IgdGFiLi4gb25jZSBwcmVzc2VkIHdlIGNhbiBmaXJlIHVwIGFuZCBzaG93IHRoZSBhY2Nlc3NpYmlsaXR5IGxheWVyXG4gICBcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG59XG5cblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xuXG4vKipcbiAqIEFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBzaG93bi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgcHJlc2VzIHRoZSB0YWIga2V5XG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHRydWUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub24oJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cblx0dGhpcy5yZW5kZXJlci52aWV3LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5kaXYpO1x0XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIGhpZGRlbi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgbW92ZXMgdGhlIG1vdXNlXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYoIXRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9mZigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlKTtcblxuXHR0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcblxufTtcblxuLyoqXG4gKiBUaGlzIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aWxsIHJ1biB0aHJvdWdodCBoZSBzY2VuZSBncmFwaCBhbmQgYWRkIGFueSBuZXcgYWNjZXNzaWJsZSBvYmplY3RzIHRvIHRoZSBET00gbGF5ZXIuXG4gKiBAcGFyYW0gZWxlbWVudCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgRGlzcGxheU9iamVjdCB0byBjaGVjay5cbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG5cdGlmKCFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZihkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGUgJiYgZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcblx0e1xuXHRcdGlmKCFkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlKVxuXHRcdHtcblx0XHRcdHRoaXMuYWRkQ2hpbGQoZGlzcGxheU9iamVjdCk7XG5cdFx0fVxuXHQgICBcdFxuXHQgICBcdGRpc3BsYXlPYmplY3QucmVuZGVySWQgPSB0aGlzLnJlbmRlcklkO1xuXHR9XG5cblx0dmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcblxuXHRmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcblx0XHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKGNoaWxkcmVuW2ldKTtcblx0fVxufTtcblxuXG4vKipcbiAqIEJlZm9yZSBlYWNoIHJlbmRlciB0aGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGRpdnMgYXJlIG1hcHBlZCBjb3JyZWN0bHkgdG8gdGhlaXIgRGlzcGxheU9iamVjdHNcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpXG57XG5cblx0Ly8gdXBkYXRlIGNoaWxkcmVuLi4uXG5cdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHModGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkKTtcblxuXHR2YXIgcmVjdCA9IHRoaXMucmVuZGVyZXIudmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0dmFyIHN4ID0gcmVjdC53aWR0aCAgLyB0aGlzLnJlbmRlcmVyLndpZHRoO1xuXHR2YXIgc3kgPSByZWN0LmhlaWdodCAvIHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuXG5cdHZhciBkaXYgPSB0aGlzLmRpdjtcblxuXHRkaXYuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICdweCc7XG5cdGRpdi5zdHlsZS50b3AgPSByZWN0LnRvcCArICdweCc7XG5cdGRpdi5zdHlsZS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggKyAncHgnO1xuXHRkaXYuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgKyAncHgnO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuXHRcdGlmKGNoaWxkLnJlbmRlcklkICE9PSB0aGlzLnJlbmRlcklkKVxuXHRcdHtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaSwgMSk7XG5cdFx0XHR0aGlzLmRpdi5yZW1vdmVDaGlsZCggY2hpbGQuX2FjY2Vzc2libGVEaXYgKTtcblx0XHRcdHRoaXMucG9vbC5wdXNoKGNoaWxkLl9hY2Nlc3NpYmxlRGl2KTtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlRGl2ID0gbnVsbDtcblxuXHRcdFx0aS0tO1xuXG5cdFx0XHRpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBtYXAgZGl2IHRvIGRpc3BsYXkuLlxuXHRcdFx0ZGl2ID0gY2hpbGQuX2FjY2Vzc2libGVEaXY7XG5cdFx0XHR2YXIgaGl0QXJlYSA9IGNoaWxkLmhpdEFyZWE7XG5cdFx0XHR2YXIgd3QgPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuXHRcdFx0aWYoY2hpbGQuaGl0QXJlYSlcblx0XHRcdHtcblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoKHd0LnR4ICsgKGhpdEFyZWEueCAqIHd0LmEpKSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKCh3dC50eSArIChoaXRBcmVhLnkgKiB3dC5kKSkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHd0LmEgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogd3QuZCAqIHN5KSArICdweCc7XG5cdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0aGl0QXJlYSA9IGNoaWxkLmdldEJvdW5kcygpO1xuXG5cdFx0XHRcdHRoaXMuY2FwSGl0QXJlYShoaXRBcmVhKTtcblxuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9IChoaXRBcmVhLnggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gIChoaXRBcmVhLnkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiBzeSkgKyAncHgnO1xuXHRcdFx0fVx0XHRcblx0XHR9XG5cdH1cblxuXHQvLyBpbmNyZW1lbnQgdGhlIHJlbmRlciBpZC4uXG5cdHRoaXMucmVuZGVySWQrKztcbn07XG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYXBIaXRBcmVhID0gZnVuY3Rpb24gKGhpdEFyZWEpXG57XG4gICAgaWYgKGhpdEFyZWEueCA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoICs9IGhpdEFyZWEueDtcbiAgICAgICAgaGl0QXJlYS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaGl0QXJlYS55IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ICs9IGhpdEFyZWEueTtcbiAgICAgICAgaGl0QXJlYS55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueCArIGhpdEFyZWEud2lkdGggPiB0aGlzLnJlbmRlcmVyLndpZHRoIClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoIC0gaGl0QXJlYS54O1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS55ICsgaGl0QXJlYS5oZWlnaHQgPiB0aGlzLnJlbmRlcmVyLmhlaWdodCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0IC0gaGl0QXJlYS55O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBBZGRzIGEgRGlzcGxheU9iamVjdCB0byB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuLy9cdHRoaXMuYWN0aXZhdGUoKTtcblx0XG5cdHZhciBkaXYgPSB0aGlzLnBvb2wucG9wKCk7XG5cblx0aWYoIWRpdilcblx0e1xuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBcblxuXHQgICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGVidWcgPyAncmdiYSgyNTUsMCwwLDAuNSknIDogJ3RyYW5zcGFyZW50Jztcblx0ICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdCAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcblx0ICAgIGRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdub25lJztcblxuXHQgICAgXG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX29uRm9jdXNPdXQuYmluZCh0aGlzKSk7XG5cdH1cblx0ICAgXHRcblxuXG5cblx0ZGl2LnRpdGxlID0gZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlVGl0bGUgfHwgJ2Rpc3BsYXlPYmplY3QgJyArIHRoaXMudGFiSW5kZXg7XG5cblx0Ly9cblx0XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUgPSB0cnVlO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ID0gZGl2O1xuXHRkaXYuZGlzcGxheU9iamVjdCA9IGRpc3BsYXlPYmplY3Q7XG5cblxuXHR0aGlzLmNoaWxkcmVuLnB1c2goZGlzcGxheU9iamVjdCk7XG5cdHRoaXMuZGl2LmFwcGVuZENoaWxkKCBkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ICk7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYudGFiSW5kZXggPSBkaXNwbGF5T2JqZWN0LnRhYkluZGV4O1xufTtcblxuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBidXR0b24gcHJlc3MgdG8gcGl4aSdzIEludGVyYWN0aW9uTWFuYWdlciAoY2xpY2spXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnY2xpY2snLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3ZlcilcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1cyA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3V0KVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzT3V0ID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uS2V5RG93biA9IGZ1bmN0aW9uKGUpXG57XG5cdGlmKGUua2V5Q29kZSAhPT0gOSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuYWN0aXZhdGUoKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmUgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZGVhY3RpdmF0ZSgpO1xufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgXG57XG5cdHRoaXMuZGl2ID0gbnVsbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblx0XHR0aGlzLmNoaWxkcmVuW2ldLmRpdiA9IG51bGw7XG5cdH1cblxuXHRcblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuXHRcdFxuXHR0aGlzLnBvb2wgPSBudWxsO1xuXHR0aGlzLmNoaWxkcmVuID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5cbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYWNjZXNzaWJsZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmFjY2Vzc2liaWxpdHkuYWNjZXNzaWJsZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgYWNjZXNzaWJsZVRhcmdldCA9IHtcbiAgICBcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGVUaXRsZTpudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICB0YWJJbmRleDowLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZUFjdGl2ZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVEaXY6ZmFsc2VcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBhY2Nlc3NpYmxlVGFyZ2V0O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgYWNjZXNzaWJpbGl0eSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYWNjZXNzaWJsZVRhcmdldDogICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpLFxuICAgIEFjY2Vzc2liaWxpdHlNYW5hZ2VyOiByZXF1aXJlKCcuL0FjY2Vzc2liaWxpdHlNYW5hZ2VyJylcbn07XG4iLCIvKipcbiAqIENvbnN0YW50IHZhbHVlcyB1c2VkIGluIHBpeGlcbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG52YXIgQ09OU1QgPSB7XG4gICAgLyoqXG4gICAgICogU3RyaW5nIG9mIHRoZSBjdXJyZW50IFBJWEkgdmVyc2lvblxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBWRVJTSU9OXG4gICAgICovXG4gICAgVkVSU0lPTjogcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQSV8yIC0gVHdvIFBpXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFBJXzI6IE1hdGguUEkgKiAyLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJBRF9UT19ERUcgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyByYWRpYW5zIHRvIGRlZ3JlZXNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUkFEX1RPX0RFRzogMTgwIC8gTWF0aC5QSSxcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBERUdfVE9fUkFEIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgZGVncmVlcyB0byByYWRpYW5zXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIERFR19UT19SQUQ6IE1hdGguUEkgLyAxODAsXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgZnJhbWVzIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gVEFSR0VUX0ZQTVM9MC4wNlxuICAgICAqL1xuICAgIFRBUkdFVF9GUE1TOiAwLjA2LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgdG8gaWRlbnRpZnkgdGhlIFJlbmRlcmVyIFR5cGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFJFTkRFUkVSX1RZUEVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuV0VCR0xcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5DQU5WQVNcbiAgICAgKi9cbiAgICBSRU5ERVJFUl9UWVBFOiB7XG4gICAgICAgIFVOS05PV046ICAgIDAsXG4gICAgICAgIFdFQkdMOiAgICAgIDEsXG4gICAgICAgIENBTlZBUzogICAgIDJcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyBibGVuZCBtb2RlcyBzdXBwb3J0ZWQgYnkgUElYSS4gSU1QT1JUQU5UIC0gVGhlIFdlYkdMIHJlbmRlcmVyIG9ubHkgc3VwcG9ydHNcbiAgICAgKiB0aGUgTk9STUFMLCBBREQsIE1VTFRJUExZIGFuZCBTQ1JFRU4gYmxlbmQgbW9kZXMuIEFueXRoaW5nIGVsc2Ugd2lsbCBzaWxlbnRseSBhY3QgbGlrZVxuICAgICAqIE5PUk1BTC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gQkxFTkRfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkFERFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5NVUxUSVBMWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQ1JFRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuT1ZFUkxBWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5EQVJLRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTElHSFRFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9ET0RHRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9CVVJOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhBUkRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU09GVF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5ESUZGRVJFTkNFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkVYQ0xVU0lPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IVUVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0FUVVJBVElPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MVU1JTk9TSVRZXG4gICAgICovXG4gICAgQkxFTkRfTU9ERVM6IHtcbiAgICAgICAgTk9STUFMOiAgICAgICAgIDAsXG4gICAgICAgIEFERDogICAgICAgICAgICAxLFxuICAgICAgICBNVUxUSVBMWTogICAgICAgMixcbiAgICAgICAgU0NSRUVOOiAgICAgICAgIDMsXG4gICAgICAgIE9WRVJMQVk6ICAgICAgICA0LFxuICAgICAgICBEQVJLRU46ICAgICAgICAgNSxcbiAgICAgICAgTElHSFRFTjogICAgICAgIDYsXG4gICAgICAgIENPTE9SX0RPREdFOiAgICA3LFxuICAgICAgICBDT0xPUl9CVVJOOiAgICAgOCxcbiAgICAgICAgSEFSRF9MSUdIVDogICAgIDksXG4gICAgICAgIFNPRlRfTElHSFQ6ICAgICAxMCxcbiAgICAgICAgRElGRkVSRU5DRTogICAgIDExLFxuICAgICAgICBFWENMVVNJT046ICAgICAgMTIsXG4gICAgICAgIEhVRTogICAgICAgICAgICAxMyxcbiAgICAgICAgU0FUVVJBVElPTjogICAgIDE0LFxuICAgICAgICBDT0xPUjogICAgICAgICAgMTUsXG4gICAgICAgIExVTUlOT1NJVFk6ICAgICAxNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIHdlYmdsIGRyYXcgbW9kZXMuIFRoZXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggR0wgZHJhd01vZGUgdG8gdXNlXG4gICAgICogdW5kZXIgY2VydGFpbiBzaXR1YXRpb25zIGFuZCByZW5kZXJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5QT0lOVFNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfTE9PUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX0ZBTlxuICAgICAqL1xuICAgIERSQVdfTU9ERVM6IHtcbiAgICAgICAgUE9JTlRTOiAgICAgICAgIDAsXG4gICAgICAgIExJTkVTOiAgICAgICAgICAxLFxuICAgICAgICBMSU5FX0xPT1A6ICAgICAgMixcbiAgICAgICAgTElORV9TVFJJUDogICAgIDMsXG4gICAgICAgIFRSSUFOR0xFUzogICAgICA0LFxuICAgICAgICBUUklBTkdMRV9TVFJJUDogNSxcbiAgICAgICAgVFJJQU5HTEVfRkFOOiAgIDZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBwaXhpLlxuICAgICAqXG4gICAgICogVGhlIERFRkFVTFQgc2NhbGUgbW9kZSBhZmZlY3RzIHRoZSBkZWZhdWx0IHNjYWxpbmcgbW9kZSBvZiBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAgKiBJdCBjYW4gYmUgcmUtYXNzaWduZWQgdG8gZWl0aGVyIExJTkVBUiBvciBORUFSRVNULCBkZXBlbmRpbmcgdXBvbiBzdWl0YWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0NBTEVfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuREVGQVVMVD1MSU5FQVJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTElORUFSIFNtb290aCBzY2FsaW5nXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLk5FQVJFU1QgUGl4ZWxhdGluZyBzY2FsaW5nXG4gICAgICovXG4gICAgU0NBTEVfTU9ERVM6IHtcbiAgICAgICAgREVGQVVMVDogICAgMCxcbiAgICAgICAgTElORUFSOiAgICAgMCxcbiAgICAgICAgTkVBUkVTVDogICAgMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZml4IHRoYXQgZGVub3RlcyBhIFVSTCBpcyBmb3IgYSByZXRpbmEgYXNzZXRcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gUkVUSU5BX1BSRUZJWFxuICAgICAqL1xuICAgIC8vZXhhbXBsZTogJ0AyeCcsXG4gICAgUkVUSU5BX1BSRUZJWDogL0AoLispeC8sXG5cbiAgICBSRVNPTFVUSU9OOjEsXG5cbiAgICBGSUxURVJfUkVTT0xVVElPTjoxLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgcmVuZGVyIG9wdGlvbnMgaWYgbm9uZSBhcmUgc3VwcGxpZWQgdG8ge0BsaW5rIFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKiBvciB7QGxpbmsgUElYSS5DYW52YXNSZW5kZXJlcn0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERFRkFVTFRfUkVOREVSX09QVElPTlNcbiAgICAgKiBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnZpZXc9bnVsbFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy50cmFuc3BhcmVudD1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hbnRpYWxpYXM9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuZm9yY2VGWEFBPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnJlc29sdXRpb249MVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmF1dG9SZXNpemU9ZmFsc2VcbiAgICAgKi9cbiAgICBERUZBVUxUX1JFTkRFUl9PUFRJT05TOiB7XG4gICAgICAgIHZpZXc6IG51bGwsXG4gICAgICAgIHJlc29sdXRpb246IDEsXG4gICAgICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgICAgIGZvcmNlRlhBQTogZmFsc2UsXG4gICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgIGNsZWFyQmVmb3JlUmVuZGVyOiB0cnVlLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgICAgICByb3VuZFBpeGVsczogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnRzIHRoYXQgaWRlbnRpZnkgc2hhcGVzLCBtYWlubHkgdG8gcHJldmVudCBgaW5zdGFuY2VvZmAgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFU1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUE9MWT0wXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SRUNUPTFcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkNJUkM9MlxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuRUxJUD0zXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SUkVDPTRcbiAgICAgKi9cbiAgICBTSEFQRVM6IHtcbiAgICAgICAgUE9MWTogMCxcbiAgICAgICAgUkVDVDogMSxcbiAgICAgICAgQ0lSQzogMixcbiAgICAgICAgRUxJUDogMyxcbiAgICAgICAgUlJFQzogNFxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBtYXliZSBjaGFuZ2UgdG8gU1BSSVRFLkJBVENIX1NJWkU6IDIwMDBcbiAgICAvLyBUT0RPOiBtYXliZSBhZGQgUEFSVElDTEUuQkFUQ0hfU0laRTogMTUwMDBcbiAgICBTUFJJVEVfQkFUQ0hfU0laRTogMjAwMCAvL25pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSBhbmQgZGVza3RvcCBtYWNoaW5lc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDT05TVDtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gcmVxdWlyZSgnLi9EaXNwbGF5T2JqZWN0JyksXG4gICAgUmVuZGVyVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgQ29udGFpbmVyIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0cy5cbiAqIEl0IGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBkaXNwbGF5IG9iamVjdHMgdGhhdCBhY3QgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIG9iamVjdHMuXG4gKlxuICpgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiBgYGBcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5EaXNwbGF5T2JqZWN0XG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDb250YWluZXIoKVxue1xuICAgIERpc3BsYXlPYmplY3QuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdFtdfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERpc3BsYXlPYmplY3QucHJvdG90eXBlKTtcbkNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5lcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udGFpbmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gMTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIGhlaWdodCA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBPdmVycmlkYWJsZSBtZXRob2QgdGhhdCBjYW4gYmUgdXNlZCBieSBDb250YWluZXIgc3ViY2xhc3NlcyB3aGVuZXZlciB0aGUgY2hpbGRyZW4gYXJyYXkgaXMgbW9kaWZpZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7fTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lci5cbiAqIFxuICogWW91IGNhbiBhbHNvIGFkZCBtdWx0cGxlIGl0ZW1zIGxpa2Ugc286IG15Q29udGFpbmVyLmFkZENoaWxkKHRoaW5rT25lLCB0aGluZ1R3bywgdGhpbmdUaHJlZSlcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBhZGQgdG8gdGhlIGNvbnRhaW5lclxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57IFxuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaGFzIGEgcGFyZW50IHRoZW4gbGV0cyByZW1vdmUgaXQgYXMgUGl4aSBvYmplY3RzIGNhbiBvbmx5IGV4aXN0IGluIG9uZSBwbGFjZVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UodGhpcy5jaGlsZHJlbi5sZW5ndGgtMSk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lciBhdCBhIHNwZWNpZmllZCBpbmRleC4gSWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd25cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRvIGFkZFxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBwbGFjZSB0aGUgY2hpbGQgaW5cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkQXQgPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hpbGQgKyAnYWRkQ2hpbGRBdDogVGhlIGluZGV4ICcrIGluZGV4ICsnIHN1cHBsaWVkIGlzIG91dCBvZiBib3VuZHMgJyArIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiAyIERpc3BsYXkgT2JqZWN0cyB3aXRoaW4gdGhpcyBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKiBAcGFyYW0gY2hpbGQyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc3dhcENoaWxkcmVuID0gZnVuY3Rpb24gKGNoaWxkLCBjaGlsZDIpXG57XG4gICAgaWYgKGNoaWxkID09PSBjaGlsZDIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluZGV4MSA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG4gICAgdmFyIGluZGV4MiA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZDIpO1xuXG4gICAgaWYgKGluZGV4MSA8IDAgfHwgaW5kZXgyIDwgMClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3dhcENoaWxkcmVuOiBCb3RoIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0cyBtdXN0IGJlIGNoaWxkcmVuIG9mIHRoZSBjYWxsZXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDFdID0gY2hpbGQyO1xuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgyXSA9IGNoaWxkO1xuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleDEgPCBpbmRleDIgPyBpbmRleDEgOiBpbmRleDIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBwb3NpdGlvbiBvZiBhIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgdG8gaWRlbnRpZnlcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdCB0byBpZGVudGlmeVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiBhbiBleGlzdGluZyBjaGlsZCBpbiB0aGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIGZvciB3aGljaCB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGluZGV4IG51bWJlclxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSByZXN1bHRpbmcgaW5kZXggbnVtYmVyIGZvciB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuXG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgY3VycmVudEluZGV4LCAxKTsgLy8gcmVtb3ZlIGZyb20gb2xkIHBvc2l0aW9uXG4gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsgLy9hZGQgYXQgbmV3IHBvc2l0aW9uXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBhdFxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgYXQgdGhlIGdpdmVuIGluZGV4LCBpZiBhbnkuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDaGlsZEF0OiBTdXBwbGllZCBpbmRleCAnICsgaW5kZXggKyAnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjaGlsZCBsaXN0LCBvciB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baW5kZXhdO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW1vdmVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIHNwZWNpZmllZCBpbmRleCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgZnJvbVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIHZhciBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRBdChpbmRleCk7XG5cbiAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIGNvbnRhaW5lciB0aGF0IGFyZSB3aXRoaW4gdGhlIGJlZ2luIGFuZCBlbmQgaW5kZXhlcy5cbiAqXG4gKiBAcGFyYW0gYmVnaW5JbmRleCB7bnVtYmVyfSBUaGUgYmVnaW5uaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gKiBAcGFyYW0gZW5kSW5kZXgge251bWJlcn0gVGhlIGVuZGluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzaXplIG9mIHRoZSBjb250YWluZXIuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbiAoYmVnaW5JbmRleCwgZW5kSW5kZXgpXG57XG4gICAgdmFyIGJlZ2luID0gYmVnaW5JbmRleCB8fCAwO1xuICAgIHZhciBlbmQgPSB0eXBlb2YgZW5kSW5kZXggPT09ICdudW1iZXInID8gZW5kSW5kZXggOiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgcmFuZ2UgPSBlbmQgLSBiZWdpbjtcbiAgICB2YXIgcmVtb3ZlZCwgaTtcblxuICAgIGlmIChyYW5nZSA+IDAgJiYgcmFuZ2UgPD0gZW5kKVxuICAgIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGJlZ2luLCByYW5nZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0ucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShiZWdpbkluZGV4KTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZ2UgPT09IDAgJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyZW1vdmVDaGlsZHJlbjogbnVtZXJpYyB2YWx1ZXMgYXJlIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UuJyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIgZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSBmYWxzZTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkNvbnRhaW5lci5wcm90b3R5cGUuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtID0gQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIHRoZSBib3VuZHMgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCB0aGlzIHJlbmRlciBzZXNzaW9uIHNvIHJldHVybiB3aGF0IHdlIGhhdmVcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgY2hpbGRCb3VuZHM7XG4gICAgICAgIHZhciBjaGlsZE1heFg7XG4gICAgICAgIHZhciBjaGlsZE1heFk7XG5cbiAgICAgICAgdmFyIGNoaWxkVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgY2hpbGRCb3VuZHMgPSB0aGlzLmNoaWxkcmVuW2ldLmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBtaW5YID0gbWluWCA8IGNoaWxkQm91bmRzLnggPyBtaW5YIDogY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIG1pblkgPSBtaW5ZIDwgY2hpbGRCb3VuZHMueSA/IG1pblkgOiBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBjaGlsZE1heFggPSBjaGlsZEJvdW5kcy53aWR0aCArIGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICBjaGlsZE1heFkgPSBjaGlsZEJvdW5kcy5oZWlnaHQgKyBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBtYXhYID0gbWF4WCA+IGNoaWxkTWF4WCA/IG1heFggOiBjaGlsZE1heFg7XG4gICAgICAgICAgICBtYXhZID0gbWF4WSA+IGNoaWxkTWF4WSA/IG1heFkgOiBjaGlsZE1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkVmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJHZXRCb3VuZHMgPSBDb250YWluZXIucHJvdG90eXBlLmdldEJvdW5kcztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5vbi1nbG9iYWwgbG9jYWwgYm91bmRzIG9mIHRoZSBDb250YWluZXIgYXMgYSByZWN0YW5nbGUuXG4gKiBUaGUgY2FsY3VsYXRpb24gdGFrZXMgYWxsIHZpc2libGUgY2hpbGRyZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4Q2FjaGUgPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdGguTWF0cml4LklERU5USVRZO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdHJpeENhY2hlO1xuXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMoIG1hdGguTWF0cml4LklERU5USVRZICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICBcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpLCBqO1xuXG4gICAgLy8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyBlbGVtZW50IGhhcyBhIG1hc2sgb3IgYSBmaWx0ZXIuXG4gICAgaWYgKHRoaXMuX21hc2sgfHwgdGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuXG4gICAgICAgIC8vIHB1c2ggZmlsdGVyIGZpcnN0IGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyBjb3JyZWN0IGZvciBhbnkgbWFza2luZ1xuICAgICAgICBpZiAodGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRoaXMsIHRoaXMuX2ZpbHRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnB1c2hNYXNrKHRoaXMsIHRoaXMuX21hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgLy8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBiYXRjaCwgb25seSByZW5kZXJlZCBpZiBpdCBoYXMgYSB0ZXh0dXJlLlxuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIG1ha2Ugc3VyZSB0aGV5IGdldCByZW5kZXJlZFxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmlsdGVycylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gc2ltcGxlIHJlbmRlciBjaGlsZHJlbiFcbiAgICAgICAgZm9yIChpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnJlbmRlcldlYkdMKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3ViY2xhc3NcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyB0aGlzIGlzIHdoZXJlIGNvbnRlbnQgaXRzZWxmIGdldHMgcmVuZGVyZWQuLi5cbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpc1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMuYWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcy5fbWFzaywgcmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlckNhbnZhcyhyZW5kZXJlcik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFzaylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2socmVuZGVyZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcbntcbiAgICBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBpZiAoZGVzdHJveUNoaWxkcmVuKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KGRlc3Ryb3lDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9UcmFuc2Zvcm0nKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgIF90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgdGhhdCBhcmUgcmVuZGVyZWQgb24gdGhlIHNjcmVlbi5cbiAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvbiBpdHMgb3duIHJhdGhlciBpdCBzaG91bGQgYmUgZXh0ZW5kZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIERpc3BsYXlPYmplY3QoKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29vcmRpbmF0ZSBvZiB0aGUgb2JqZWN0IHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy50cmFuc2Zvcm0ucG9zaXRpb247XG4gICAvLyB0aGlzLl9wb3NpdGlvbiA9IG5ldyBDYWNoZVBvaW50KHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIGZhY3RvciBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlID0gdGhpcy50cmFuc2Zvcm0uc2NhbGVcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXZvdCBwb2ludCBvZiB0aGUgZGlzcGxheU9iamVjdCB0aGF0IGl0IHJvdGF0ZXMgYXJvdW5kXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucGl2b3QgPSB0aGlzLnRyYW5zZm9ybS5waXZvdFxuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2tldyBmYWN0b3IgZm9yIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5za2V3ID0gdGhpcy50cmFuc2Zvcm0uc2tld1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9yb3RhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BhY2l0eSBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpc2liaWxpdHkgb2YgdGhlIG9iamVjdC4gSWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biwgYW5kXG4gICAgICogdGhlIHVwZGF0ZVRyYW5zZm9ybSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDYW4gdGhpcyBvYmplY3QgYmUgcmVuZGVyZWQsIGlmIGZhbHNlIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgZHJhd24gYnV0IHRoZSB1cGRhdGVUcmFuc2Zvcm1cbiAgICAgKiBtZXRob2RzIHdpbGwgc3RpbGwgYmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmFibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIHRoaXMgZGlzcGxheSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNvbnRhaW5lcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbXVsdGlwbGllZCBhbHBoYSBvZiB0aGUgZGlzcGxheU9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRyYW5zZm9ybSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIHdvcmxkIChwYXJlbnQpIGZhY3RvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gdGhpcy50cmFuc2Zvcm0ubG9jYWxUcmFuc2Zvcm07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJlYSB0aGUgZmlsdGVyIGlzIGFwcGxpZWQgdG8uIFRoaXMgaXMgdXNlZCBhcyBtb3JlIG9mIGFuIG9wdGltaXNhdGlvblxuICAgICAqIHJhdGhlciB0aGFuIGZpZ3VyaW5nIG91dCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgZGlzcGxheU9iamVjdCBlYWNoIGZyYW1lIHlvdSBjYW4gc2V0IHRoaXMgcmVjdGFuZ2xlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xuXG4gICAgLyoqeHd3XG4gICAgICogY2FjaGVkIHNpbiByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3IgPSAwO1xuXG4gICAgLyoqXG4gICAgICogY2FjaGVkIGNvcyByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3IgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRzID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vc3QgdXAtdG8tZGF0ZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcmlnaW5hbCwgY2FjaGVkIG1hc2sgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXNrID0gbnVsbDtcblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGF5T2JqZWN0O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB4IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NhbGVYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByb3RhdGlvbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY3IgPSBNYXRoLmNvcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHNwcml0ZSBpcyBnbG9iYWxseSB2aXNpYmxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHdvcmxkVmlzaWJsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcztcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbWFzayBmb3IgdGhlIGRpc3BsYXlPYmplY3QuIEEgbWFzayBpcyBhbiBvYmplY3QgdGhhdCBsaW1pdHMgdGhlIHZpc2liaWxpdHkgb2YgYW4gb2JqZWN0IHRvIHRoZSBzaGFwZSBvZiB0aGUgbWFzayBhcHBsaWVkIHRvIGl0LlxuICAgICAqIEluIFBJWEkgYSByZWd1bGFyIG1hc2sgbXVzdCBiZSBhIFBJWEkuR3JhcGhpY3Mgb3IgYSBQSVhJLlNwcml0ZSBvYmplY3QuIFRoaXMgYWxsb3dzIGZvciBtdWNoIGZhc3RlciBtYXNraW5nIGluIGNhbnZhcyBhcyBpdCB1dGlsaXNlcyBzaGFwZSBjbGlwcGluZy5cbiAgICAgKiBUbyByZW1vdmUgYSBtYXNrLCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc3xQSVhJLlNwcml0ZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIG1hc2s6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFzaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX21hc2sgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFzay5yZW5kZXJhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVycyBmb3IgdGhlIGRpc3BsYXlPYmplY3QuXG4gICAgICogKiBJTVBPUlRBTlQ6IFRoaXMgaXMgYSB3ZWJHTCBvbmx5IGZlYXR1cmUgYW5kIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqIFRvIHJlbW92ZSBmaWx0ZXJzIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnbnVsbCdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGZpbHRlcnM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLnNsaWNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gdmFsdWUgJiYgdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBUT0RPIC0gT3B0aW1pemF0aW9uIHBhc3MhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgLy8gbXVsdGlwbHkgdGhlIGFscGhhcy4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG59O1xuXG4vLyBwZXJmb3JtYW5jZSBpbmNyZWFzZSB0byBhdm9pZCB1c2luZyBjYWxsLi4gKDEweCBmYXN0ZXIpXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtID0gRGlzcGxheU9iamVjdC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtO1xuXG4vKipcbiAqXG4gKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeCkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMobWF0aC5NYXRyaXguSURFTlRJVFkpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvR2xvYmFsID0gZnVuY3Rpb24gKHBvc2l0aW9uKVxue1xuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb3RcbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseShwb3NpdGlvbik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdCByZWxhdGl2ZSB0byBhbm90aGVyIHBvaW50XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcGFyYW0gW2Zyb21dIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgZ2xvYmFsIHBvc2l0aW9uIGZyb21cbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgUG9pbnQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvTG9jYWwgPSBmdW5jdGlvbiAocG9zaXRpb24sIGZyb20sIHBvaW50KVxue1xuICAgIGlmIChmcm9tKVxuICAgIHtcbiAgICAgICAgcG9zaXRpb24gPSBmcm9tLnRvR2xvYmFsKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBzaW1wbHkgYXBwbHkgdGhlIG1hdHJpeC4uXG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvc2l0aW9uLCBwb2ludCk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFyZW50IENvbnRhaW5lciBvZiB0aGlzIERpc3BsYXlPYmplY3RcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdG8gYWRkIHRoaXMgRGlzcGxheU9iamVjdCB0b1xuICogQHJldHVybiB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRoYXQgdGhpcyBEaXNwbGF5T2JqZWN0IHdhcyBhZGRlZCB0b1xuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXIuYWRkQ2hpbGQpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFBhcmVudDogQXJndW1lbnQgbXVzdCBiZSBhIENvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRDaGlsZCh0aGlzKTtcbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzZXQgdGhlIHBvc3Rpb24sIHNjYWxlLCBza2V3IGFuZCBwaXZvdCBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBUaGUgWCBwb3NpdGlvblxuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IFRoZSBZIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3NjYWxlWD0xXSB7bnVtYmVyfSBUaGUgWCBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtzY2FsZVk9MV0ge251bWJlcn0gVGhlIFkgc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbcm90YXRpb249MF0ge251bWJlcn0gVGhlIHJvdGF0aW9uXG4gKiBAcGFyYW0gW3NrZXdYPTBdIHtudW1iZXJ9IFRoZSBYIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbc2tld1k9MF0ge251bWJlcn0gVGhlIFkgc2tldyB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFg9MF0ge251bWJlcn0gVGhlIFggcGl2b3QgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RZPTBdIHtudW1iZXJ9IFRoZSBZIHBpdm90IHZhbHVlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKHgsIHksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZLCBwaXZvdFgsIHBpdm90WSkgLy9qc2hpbnQgaWdub3JlOmxpbmVcbntcbiAgICB0aGlzLnBvc2l0aW9uLnggPSB4IHx8IDA7XG4gICAgdGhpcy5wb3NpdGlvbi55ID0geSB8fCAwO1xuICAgIHRoaXMuc2NhbGUueCA9ICFzY2FsZVggPyAxIDogc2NhbGVYO1xuICAgIHRoaXMuc2NhbGUueSA9ICFzY2FsZVkgPyAxIDogc2NhbGVZO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgIHRoaXMuc2tldy54ID0gc2tld1ggfHwgMDtcbiAgICB0aGlzLnNrZXcueSA9IHNrZXdZIHx8IDA7XG4gICAgdGhpcy5waXZvdC54ID0gcGl2b3RYIHx8IDA7XG4gICAgdGhpcy5waXZvdC55ID0gcGl2b3RZIHx8IDA7XG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEJhc2UgZGVzdHJveSBtZXRob2QgZm9yIGdlbmVyaWMgZGlzcGxheSBvYmplY3RzXG4gKlxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcblxuICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2NhbGUgPSBudWxsO1xuICAgIHRoaXMucGl2b3QgPSBudWxsO1xuICAgIHRoaXMuc2tldyA9IG51bGw7XG5cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcblxuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IG1hdGguUG9pbnQoMSwxKTtcbiAgICB0aGlzLnBpdm90ID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNrZXcgPSBuZXcgbWF0aC5Qb2ludCgwLjApO1xuICAgIFxuICAgIHRoaXMucm90YXRpb24gPSAwO1xuICAgIHRoaXMuX3NyID0gTWF0aC5zaW4oMCk7XG4gICAgdGhpcy5fY3IgPSBNYXRoLmNvcygwKTtcbiAgICBcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufVxuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHJhbnNmb3JtO1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uIChwYXJlbnRUcmFuc2Zvcm0pXG57XG4gICAgdmFyIHB0ID0gcGFyZW50VHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGx0ID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcblxuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueDtcbiAgICAgICAgbHQuYiAgPSAgdGhpcy5fc3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmMgID0gLXRoaXMuX3NyICogdGhpcy5zY2FsZS55O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQudHggPSAgdGhpcy5wb3NpdGlvbi54IC0gKHRoaXMucGl2b3QueCAqIGx0LmEgKyB0aGlzLnBpdm90LnkgKiBsdC5jKTtcbiAgICAgICAgbHQudHkgPSAgdGhpcy5wb3NpdGlvbi55IC0gKHRoaXMucGl2b3QueCAqIGx0LmIgKyB0aGlzLnBpdm90LnkgKiBsdC5kKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmRpcnR5IHx8IHBhcmVudC5kaXJ0eSlcbiAgICB7ICAgICAgXG4gICAgICAgIC8vIGNvbmNhdCB0aGUgcGFyZW50IG1hdHJpeCB3aXRoIHRoZSBvYmplY3RzIHRyYW5zZm9ybS5cbiAgICAgICAgd3QuYSAgPSBsdC5hICAqIHB0LmEgKyBsdC5iICAqIHB0LmM7XG4gICAgICAgIHd0LmIgID0gbHQuYSAgKiBwdC5iICsgbHQuYiAgKiBwdC5kO1xuICAgICAgICB3dC5jICA9IGx0LmMgICogcHQuYSArIGx0LmQgICogcHQuYztcbiAgICAgICAgd3QuZCAgPSBsdC5jICAqIHB0LmIgKyBsdC5kICAqIHB0LmQ7XG4gICAgICAgIHd0LnR4ID0gbHQudHggKiBwdC5hICsgbHQudHkgKiBwdC5jICsgcHQudHg7XG4gICAgICAgIHd0LnR5ID0gbHQudHggKiBwdC5iICsgbHQudHkgKiBwdC5kICsgcHQudHk7ICAgICAgIFxuICAgIFxuICAgLy8gICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgLy8gICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbi8vICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgLy8gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm07XG5cblxuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vR3JhcGhpY3NEYXRhJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcFBvaW50ID0gbmV3IG1hdGguUG9pbnQoKTtcblxuLyoqXG4gKiBUaGUgR3JhcGhpY3MgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB1c2VkIHRvIGRyYXcgcHJpbWl0aXZlIHNoYXBlcyBzdWNoIGFzIGxpbmVzLCBjaXJjbGVzIGFuZFxuICogcmVjdGFuZ2xlcyB0byB0aGUgZGlzcGxheSwgYW5kIHRvIGNvbG9yIGFuZCBmaWxsIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3MoKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCAodGhpY2tuZXNzKSBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gMDtcblxuICAgIC8qKlxuICAgICAqIEdyYXBoaWNzIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQXBwbHkgYSB2YWx1ZSBvZiAweEZGRkZGRiB0byByZXNldCB0aGUgdGludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByZXZpb3VzIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVXNlZCB0byBjb21wYXJlIHRvIHRoZSBjdXJyZW50IHRpbnQgYW5kIGNoZWNrIGlmIHRoZXJlcyBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMuX3ByZXZUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUw7XG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHBhdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBjb250YWluaW5nIHNvbWUgV2ViR0wtcmVsYXRlZCBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgb2JqZWN0Pn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIFRPRE8gLSBfd2ViZ2wgc2hvdWxkIHVzZSBhIHByb3RvdHlwZSBvYmplY3QsIG5vdCBhIHJhbmRvbSB1bmRvY3VtZW50ZWQgb2JqZWN0Li4uXG4gICAgdGhpcy5fd2ViR0wgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBzaGFwZSBpcyBiZWluZyB1c2VkIGFzIGEgbWFzay5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc01hc2sgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBib3VuZHMnIHBhZGRpbmcgdXNlZCBmb3IgYm91bmRzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYm91bmRzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBsb2NhbCBib3VuZHMgdG8gcHJldmVudCByZWNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLDAsMSwxKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgV2ViR0wgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlXG4gICAgICogZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgY2FjaGVkIHNwcml0ZSBvYmplY3QgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGNhY2hlQXNCaXRtYXAgaXMgc2V0IHRvIHRydWUgdGhlIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIGFzIGlmIGl0IHdhcyBhIHNwcml0ZS5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGdyYXBoaWNzIGVsZW1lbnQgZG9lcyBub3QgY2hhbmdlIG9mdGVuLCBhcyBpdCB3aWxsIHNwZWVkIHVwIHRoZSByZW5kZXJpbmdcbiAgICAgKiBvZiB0aGUgb2JqZWN0IGluIGV4Y2hhbmdlIGZvciB0YWtpbmcgdXAgdGV4dHVyZSBtZW1vcnkuIEl0IGlzIGFsc28gdXNlZnVsIGlmIHlvdSBuZWVkIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB0byBiZSBhbnRpLWFsaWFzZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyBjYW52YXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGlmXG4gICAgICogeW91IGFyZSBjb25zdGFudGx5IHJlZHJhd2luZyB0aGUgZ3JhcGhpY3MgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhY2hlQXNCaXRtYXBcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkdyYXBoaWNzI1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5HcmFwaGljcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3M7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICogTm90ZSB0aGF0IHRoZSBvbmx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIGNsb25lZCwgbm90IGl0cyB0cmFuc2Zvcm0gKHBvc2l0aW9uLHNjYWxlLGV0YylcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjbG9uZSA9IG5ldyBHcmFwaGljcygpO1xuXG4gICAgY2xvbmUucmVuZGVyYWJsZSAgICA9IHRoaXMucmVuZGVyYWJsZTtcbiAgICBjbG9uZS5maWxsQWxwaGEgICAgID0gdGhpcy5maWxsQWxwaGE7XG4gICAgY2xvbmUubGluZVdpZHRoICAgICA9IHRoaXMubGluZVdpZHRoO1xuICAgIGNsb25lLmxpbmVDb2xvciAgICAgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICBjbG9uZS50aW50ICAgICAgICAgID0gdGhpcy50aW50O1xuICAgIGNsb25lLmJsZW5kTW9kZSAgICAgPSB0aGlzLmJsZW5kTW9kZTtcbiAgICBjbG9uZS5pc01hc2sgICAgICAgID0gdGhpcy5pc01hc2s7XG4gICAgY2xvbmUuYm91bmRzUGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcbiAgICBjbG9uZS5kaXJ0eSAgICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5nbERpcnR5ICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRoaXMuY2FjaGVkU3ByaXRlRGlydHk7XG5cbiAgICAvLyBjb3B5IGdyYXBoaWNzIGRhdGFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgY2xvbmUuZ3JhcGhpY3NEYXRhLnB1c2godGhpcy5ncmFwaGljc0RhdGFbaV0uY2xvbmUoKSk7XG4gICAgfVxuXG4gICAgY2xvbmUuY3VycmVudFBhdGggPSBjbG9uZS5ncmFwaGljc0RhdGFbY2xvbmUuZ3JhcGhpY3NEYXRhLmxlbmd0aCAtIDFdO1xuXG4gICAgY2xvbmUudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgIHJldHVybiBjbG9uZTtcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsaW5lIHN0eWxlIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gR3JhcGhpY3MgbWV0aG9kcyBzdWNoIGFzIHRoZSBsaW5lVG8oKSBtZXRob2Qgb3IgdGhlIGRyYXdDaXJjbGUoKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lU3R5bGUgPSBmdW5jdGlvbiAobGluZVdpZHRoLCBjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGggfHwgMDtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5saW5lQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGhhbGZ3YXkgdGhyb3VnaCBhIGxpbmU/IHN0YXJ0IGEgbmV3IG9uZSFcbiAgICAgICAgICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24odGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMuc2xpY2UoLTIpKTtcbiAgICAgICAgICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0cyBlbXB0eSBzbyBsZXRzIGp1c3Qgc2V0IHRoZSBsaW5lIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQWxwaGEgPSB0aGlzLmxpbmVBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBNb3ZlcyB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvIHgsIHkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gICovXG5HcmFwaGljcy5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihbeCx5XSk7XG4gICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgbGluZSB1c2luZyB0aGUgY3VycmVudCBsaW5lIHN0eWxlIGZyb20gdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byAoeCwgeSk7XG4gKiBUaGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIGlzIHRoZW4gc2V0IHRvICh4LCB5KS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeCwgeSk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsIDApO1xuICAgIH1cblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICB4YSA9IGZyb21YICsgKCAoY3BYIC0gZnJvbVgpICogaiApO1xuICAgICAgICB5YSA9IGZyb21ZICsgKCAoY3BZIC0gZnJvbVkpICogaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCB4YSArICggKChjcFggKyAoICh0b1ggLSBjcFgpICogaiApKSAtIHhhKSAqIGogKSxcbiAgICAgICAgICAgICAgICAgICAgIHlhICsgKCAoKGNwWSArICggKHRvWSAtIGNwWSkgKiBqICkpIC0geWEpICogaiApICk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSBjcFgyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgY3BYMiwgY3BZMiwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciBuID0gMjAsXG4gICAgICAgIGR0LFxuICAgICAgICBkdDIsXG4gICAgICAgIGR0MyxcbiAgICAgICAgdDIsXG4gICAgICAgIHQzLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIGR0ID0gKDEgLSBqKTtcbiAgICAgICAgZHQyID0gZHQgKiBkdDtcbiAgICAgICAgZHQzID0gZHQyICogZHQ7XG5cbiAgICAgICAgdDIgPSBqICogajtcbiAgICAgICAgdDMgPSB0MiAqIGo7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIGR0MyAqIGZyb21YICsgMyAqIGR0MiAqIGogKiBjcFggKyAzICogZHQgKiB0MiAqIGNwWDIgKyB0MyAqIHRvWCxcbiAgICAgICAgICAgICAgICAgICAgIGR0MyAqIGZyb21ZICsgMyAqIGR0MiAqIGogKiBjcFkgKyAzICogZHQgKiB0MiAqIGNwWTIgKyB0MyAqIHRvWSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmNUbygpIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSBiZXR3ZWVuIHR3byB0YW5nZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFwiYm9ycm93ZWRcIiBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZnhjYW52YXMvIC0gdGhhbmtzIGdvb2dsZSFcbiAqXG4gKiBAcGFyYW0geDEge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHgyIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTIge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjVG8gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIHJhZGl1cylcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyh4MSwgeTEpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyxcbiAgICAgICAgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSxcbiAgICAgICAgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSxcbiAgICAgICAgYTEgPSBmcm9tWSAtIHkxLFxuICAgICAgICBiMSA9IGZyb21YIC0geDEsXG4gICAgICAgIGEyID0geTIgICAtIHkxLFxuICAgICAgICBiMiA9IHgyICAgLSB4MSxcbiAgICAgICAgbW0gPSBNYXRoLmFicyhhMSAqIGIyIC0gYjEgKiBhMik7XG5cbiAgICBpZiAobW0gPCAxLjBlLTggfHwgcmFkaXVzID09PSAwKVxuICAgIHtcbiAgICAgICAgaWYgKHBvaW50c1twb2ludHMubGVuZ3RoLTJdICE9PSB4MSB8fCBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSAhPT0geTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIGRkID0gYTEgKiBhMSArIGIxICogYjEsXG4gICAgICAgICAgICBjYyA9IGEyICogYTIgKyBiMiAqIGIyLFxuICAgICAgICAgICAgdHQgPSBhMSAqIGEyICsgYjEgKiBiMixcbiAgICAgICAgICAgIGsxID0gcmFkaXVzICogTWF0aC5zcXJ0KGRkKSAvIG1tLFxuICAgICAgICAgICAgazIgPSByYWRpdXMgKiBNYXRoLnNxcnQoY2MpIC8gbW0sXG4gICAgICAgICAgICBqMSA9IGsxICogdHQgLyBkZCxcbiAgICAgICAgICAgIGoyID0gazIgKiB0dCAvIGNjLFxuICAgICAgICAgICAgY3ggPSBrMSAqIGIyICsgazIgKiBiMSxcbiAgICAgICAgICAgIGN5ID0gazEgKiBhMiArIGsyICogYTEsXG4gICAgICAgICAgICBweCA9IGIxICogKGsyICsgajEpLFxuICAgICAgICAgICAgcHkgPSBhMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHF4ID0gYjIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBxeSA9IGEyICogKGsxICsgajIpLFxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IE1hdGguYXRhbjIocHkgLSBjeSwgcHggLSBjeCksXG4gICAgICAgICAgICBlbmRBbmdsZSAgID0gTWF0aC5hdGFuMihxeSAtIGN5LCBxeCAtIGN4KTtcblxuICAgICAgICB0aGlzLmFyYyhjeCArIHgxLCBjeSArIHkxLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBiMSAqIGEyID4gYjIgKiBhMSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmMgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlICh1c2VkIHRvIGNyZWF0ZSBjaXJjbGVzLCBvciBwYXJ0cyBvZiBjaXJjbGVzKS5cbiAqXG4gKiBAcGFyYW0gY3gge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBjeSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBzdGFydEFuZ2xlIHtudW1iZXJ9IFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucyAoMCBpcyBhdCB0aGUgMyBvJ2Nsb2NrIHBvc2l0aW9uIG9mIHRoZSBhcmMncyBjaXJjbGUpXG4gKiBAcGFyYW0gZW5kQW5nbGUge251bWJlcn0gVGhlIGVuZGluZyBhbmdsZSwgaW4gcmFkaWFuc1xuICogQHBhcmFtIGFudGljbG9ja3dpc2Uge2Jvb2xlYW59IE9wdGlvbmFsLiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgY291bnRlcmNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuIEZhbHNlIGlzIGRlZmF1bHQsIGFuZCBpbmRpY2F0ZXMgY2xvY2t3aXNlLCB3aGlsZSB0cnVlIGluZGljYXRlcyBjb3VudGVyLWNsb2Nrd2lzZS5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmMgPSBmdW5jdGlvbihjeCwgY3ksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UpXG57XG4gICAgYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gZW5kQW5nbGUpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiggIWFudGljbG9ja3dpc2UgJiYgZW5kQW5nbGUgPD0gc3RhcnRBbmdsZSApXG4gICAge1xuICAgICAgICBlbmRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG4gICAgZWxzZSBpZiggYW50aWNsb2Nrd2lzZSAmJiBzdGFydEFuZ2xlIDw9IGVuZEFuZ2xlIClcbiAgICB7XG4gICAgICAgIHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuXG4gICAgdmFyIHN3ZWVwID0gYW50aWNsb2Nrd2lzZSA/IChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpICogLTEgOiAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKTtcbiAgICB2YXIgc2VncyA9ICBNYXRoLmNlaWwoTWF0aC5hYnMoc3dlZXApIC8gKE1hdGguUEkgKiAyKSkgKiA0MDtcblxuICAgIGlmKHN3ZWVwID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0WCA9IGN4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXM7XG4gICAgdmFyIHN0YXJ0WSA9IGN5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXM7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyhzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIHRoZXRhID0gc3dlZXAvKHNlZ3MqMik7XG4gICAgdmFyIHRoZXRhMiA9IHRoZXRhKjI7XG5cbiAgICB2YXIgY1RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgICB2YXIgc2VnTWludXMgPSBzZWdzIC0gMTtcblxuICAgIHZhciByZW1haW5kZXIgPSAoIHNlZ01pbnVzICUgMSApIC8gc2VnTWludXM7XG5cbiAgICBmb3IodmFyIGk9MDsgaTw9c2VnTWludXM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciByZWFsID0gIGkgKyByZW1haW5kZXIgKiBpO1xuXG5cbiAgICAgICAgdmFyIGFuZ2xlID0gKCh0aGV0YSkgKyBzdGFydEFuZ2xlICsgKHRoZXRhMiAqIHJlYWwpKTtcblxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgdmFyIHMgPSAtTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCggKGNUaGV0YSAqICBjKSArIChzVGhldGEgKiBzKSApICogcmFkaXVzICsgY3gsXG4gICAgICAgICAgICAgICAgICAgICggKGNUaGV0YSAqIC1zKSArIChzVGhldGEgKiBjKSApICogcmFkaXVzICsgY3kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSBzaW1wbGUgb25lLWNvbG9yIGZpbGwgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIG90aGVyIEdyYXBoaWNzIG1ldGhvZHNcbiAqIChzdWNoIGFzIGxpbmVUbygpIG9yIGRyYXdDaXJjbGUoKSkgdXNlIHdoZW4gZHJhd2luZy5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmVnaW5GaWxsID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmZpbGxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGwgPSB0aGlzLmZpbGxpbmc7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxDb2xvciA9IHRoaXMuZmlsbENvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQWxwaGEgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbGwgdG8gdGhlIGxpbmVzIGFuZCBzaGFwZXMgdGhhdCB3ZXJlIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhlIGJlZ2luRmlsbCgpIG1ldGhvZC5cbiAqXG4gKiBAcmV0dXJuIHtHcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmVuZEZpbGwgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gbnVsbDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5SZWN0YW5nbGUoeCx5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBSYWRpdXMgb2YgdGhlIHJlY3RhbmdsZSBjb3JuZXJzXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JvdW5kZWRSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdDaXJjbGUgPSBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkNpcmNsZSh4LHksIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhlIGVsbGlwc2VcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3RWxsaXBzZSA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgcG9seWdvbiB1c2luZyB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCB7bnVtYmVyW118UElYSS5Qb2ludFtdfSBUaGUgcGF0aCBkYXRhIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwb2x5Z29uLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24gKHBhdGgpXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBhdGg7XG5cbiAgICB2YXIgY2xvc2VkID0gdHJ1ZTtcblxuICAgIGlmIChwb2ludHMgaW5zdGFuY2VvZiBtYXRoLlBvbHlnb24pXG4gICAge1xuICAgICAgICBjbG9zZWQgPSBwb2ludHMuY2xvc2VkO1xuICAgICAgICBwb2ludHMgPSBwb2ludHMucG9pbnRzO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50c1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24ocG9pbnRzKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBjbG9zZWQ7XG5cbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBncmFwaGljcyB0aGF0IHdlcmUgZHJhd24gdG8gdGhpcyBHcmFwaGljcyBvYmplY3QsIGFuZCByZXNldHMgZmlsbCBhbmQgbGluZSBzdHlsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuY2xlYXJEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZ2VvbWV0cnkgaXMgY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2hvdWxkIGJlIG9uZSBvZiB0aGUgc2NhbGVNb2RlIGNvbnN0c1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdFxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG5cbiAgICByZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCAqIHJlc29sdXRpb24sIGJvdW5kcy5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY2FudmFzQnVmZmVyLmNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgdGhlIHNwcml0ZSBpcyBub3QgdmlzaWJsZSBvciB0aGUgYWxwaGEgaXMgMCB0aGVuIG5vIG5lZWQgdG8gcmVuZGVyIHRoaXMgZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuZ2xEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzLnJlbmRlcih0aGlzKTtcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmlzTWFzayA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdGludCBoYXMgY2hhbmdlZCwgc2V0IHRoZSBncmFwaGljcyBvYmplY3QgdG8gZGlydHkuXG4gICAgaWYgKHRoaXMuX3ByZXZUaW50ICE9PSB0aGlzLnRpbnQpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjb2RlIG1heSBzdGlsbCBiZSBuZWVkZWQgc28gbGVhdmluZyBmb3Igbm93Li5cbiAgICAvL1xuICAgIC8qXG4gICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXApXG4gICAge1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSB8fCB0aGlzLmNhY2hlZFNwcml0ZURpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSgpO1xuXG4gICAgICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xuXG4gICAgICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMuX2NhY2hlZFNwcml0ZSwgcmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb247XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjb250ZXh0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGdyYXBoaWMgc2hhcGUgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gVGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlLCBkZWZhdWx0cyB0byB0aGlzXG4gKiAgb2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuXG4gICAgICAgIC8vIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGl0ZW0gaXMgYSBtYXNrIVxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyYWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgICAgICAgICAgdGhpcy5nbERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2xvY2FsQm91bmRzO1xuXG4gICAgICAgIHZhciB3MCA9IGJvdW5kcy54O1xuICAgICAgICB2YXIgdzEgPSBib3VuZHMud2lkdGggKyBib3VuZHMueDtcblxuICAgICAgICB2YXIgaDAgPSBib3VuZHMueTtcbiAgICAgICAgdmFyIGgxID0gYm91bmRzLmhlaWdodCArIGJvdW5kcy55O1xuXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciBtYXhYID0geDE7XG4gICAgICAgIHZhciBtYXhZID0geTE7XG5cbiAgICAgICAgdmFyIG1pblggPSB4MTtcbiAgICAgICAgdmFyIG1pblkgPSB5MTtcblxuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy54ID0gbWluWDtcbiAgICAgICAgdGhpcy5fYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IHRoaXMuX2JvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIGdyYXBoaWNzIG9iamVjdFxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5HcmFwaGljcy5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIGdyYXBoaWNzRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoIWRhdGEuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGRlYWwgd2l0aCBmaWxscy4uXG4gICAgICAgIGlmIChkYXRhLnNoYXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIGRhdGEuc2hhcGUuY29udGFpbnMoIHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSApIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICpcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUxvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGlmICh0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB2YXIgc2hhcGUsIHBvaW50cywgeCwgeSwgdywgaDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG4gICAgICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVCB8fCB0eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueCAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gUE9MWVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSAyKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvaW50c1tqKzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblggPSB4LWxpbmVXaWR0aCA8IG1pblggPyB4LWxpbmVXaWR0aCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSB4K2xpbmVXaWR0aCA+IG1heFggPyB4K2xpbmVXaWR0aCA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IHktbGluZVdpZHRoIDwgbWluWSA/IHktbGluZVdpZHRoIDogbWluWTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IHkrbGluZVdpZHRoID4gbWF4WSA/IHkrbGluZVdpZHRoIDogbWF4WTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgbWluWCA9IDA7XG4gICAgICAgIG1heFggPSAwO1xuICAgICAgICBtaW5ZID0gMDtcbiAgICAgICAgbWF4WSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy54ID0gbWluWCAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMud2lkdGggPSAobWF4WCAtIG1pblgpICsgcGFkZGluZyAqIDI7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy55ID0gbWluWSAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMuaGVpZ2h0ID0gKG1heFkgLSBtaW5ZKSArIHBhZGRpbmcgKiAyO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNhY2hlZCBzcHJpdGUgd2hlbiB0aGUgc3ByaXRlIGhhcyBjYWNoZUFzQml0bWFwID0gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgaWYgKCF0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzKTtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgU3ByaXRlKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyID0gY2FudmFzQnVmZmVyO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIucmVzaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gbGV2ZXJhZ2UgdGhlIGFuY2hvciB0byBhY2NvdW50IGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC5zYXZlKCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGFscGhhIG9mIHRoZSBncmFwaGljcyB0byAxIGZvciB0aGUgcmVuZGVyLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gbm93IHJlbmRlciB0aGUgZ3JhcGhpYy4uXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0KTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG59O1xuKi9cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjYWNoZWRTcHJpdGUgPSB0aGlzLl9jYWNoZWRTcHJpdGU7XG4gICAgdmFyIHRleHR1cmUgPSBjYWNoZWRTcHJpdGUudGV4dHVyZTtcbiAgICB2YXIgY2FudmFzID0gY2FjaGVkU3ByaXRlLmJ1ZmZlci5jYW52YXM7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLmZyYW1lLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLmZyYW1lLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICBjYWNoZWRTcHJpdGUuX3dpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIGNhY2hlZFNwcml0ZS5faGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgZGlydHkgYmFzZSB0ZXh0dXJlc1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZGlydHkoKTtcbn07Ki9cblxuLyoqXG4gKiBEZXN0cm95cyBhIHByZXZpb3VzIGNhY2hlZCBzcHJpdGUuXG4gKlxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3lDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS50ZXh0dXJlLmRlc3Ryb3kodHJ1ZSk7XG5cbiAgICAvLyBsZXQgdGhlIGdjIGNvbGxlY3QgdGhlIHVudXNlZCBzcHJpdGVcbiAgICAvLyBUT0RPIGNvdWxkIGJlIG9iamVjdCBwb29sZWQhXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07Ki9cblxuLyoqXG4gKiBEcmF3cyB0aGUgZ2l2ZW4gc2hhcGUgdG8gdGhpcyBHcmFwaGljcyBvYmplY3QuIENhbiBiZSBhbnkgb2YgQ2lyY2xlLCBSZWN0YW5nbGUsIEVsbGlwc2UsIExpbmUgb3IgUG9seWdvbi5cbiAqXG4gKiBAcGFyYW0gc2hhcGUge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX0gVGhlIGdlbmVyYXRlZCBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24gKHNoYXBlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgLy8gY2hlY2sgY3VycmVudCBwYXRoIVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IG5ldyBHcmFwaGljc0RhdGEodGhpcy5saW5lV2lkdGgsIHRoaXMubGluZUNvbG9yLCB0aGlzLmxpbmVBbHBoYSwgdGhpcy5maWxsQ29sb3IsIHRoaXMuZmlsbEFscGhhLCB0aGlzLmZpbGxpbmcsIHNoYXBlKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnB1c2goZGF0YSk7XG5cbiAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICB7XG4gICAgICAgIGRhdGEuc2hhcGUuY2xvc2VkID0gZGF0YS5zaGFwZS5jbG9zZWQgfHwgdGhpcy5maWxsaW5nO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBkZXN0cm95IGVhY2ggb2YgdGhlIEdyYXBoaWNzRGF0YSBvYmplY3RzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggd2ViZ2wgZGF0YSBlbnRyeSwgZGVzdHJveSB0aGUgV2ViR0xHcmFwaGljc0RhdGFcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl93ZWJnbCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3dlYmdsW2lkXS5kYXRhLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJnbFtpZF0uZGF0YVtqXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl93ZWJnbCA9IG51bGw7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBudWxsO1xufTtcbiIsIi8qKlxuICogQSBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBmaWxsQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbEFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGwgICAgICB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gKiBAcGFyYW0gc2hhcGUgICAgIHtDaXJjbGV8UmVjdGFuZ2xlfEVsbGlwc2V8TGluZXxQb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzRGF0YShsaW5lV2lkdGgsIGxpbmVDb2xvciwgbGluZUFscGhhLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgZmlsbCwgc2hhcGUpXG57XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IGxpbmVDb2xvcjtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVBbHBoYSA9IGxpbmVBbHBoYTtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMuX2xpbmVUaW50ID0gbGluZUNvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5fZmlsbFRpbnQgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICAgICAqL1xuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gICAgICovXG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFRoZSB0eXBlIG9mIHRoZSBzaGFwZSwgc2VlIHRoZSBDb25zdC5TaGFwZXMgZmlsZSBmb3IgYWxsIHRoZSBleGlzdGluZyB0eXBlcyxcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBzaGFwZS50eXBlO1xufVxuXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljc0RhdGEgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfVxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEdyYXBoaWNzRGF0YShcbiAgICAgICAgdGhpcy5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMubGluZUNvbG9yLFxuICAgICAgICB0aGlzLmxpbmVBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuZmlsbEFscGhhLFxuICAgICAgICB0aGlzLmZpbGwsXG4gICAgICAgIHRoaXMuc2hhcGVcbiAgICApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3MgZGF0YS5cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2hhcGUgPSBudWxsO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vV2ViR0xHcmFwaGljc0RhdGEnKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyJyksXG5cbiAgICAvLyBzb21lIGRyYXdpbmcgZnVuY3Rpb25zLi5cbiAgICBidWlsZExpbmUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkTGluZScpO1xuICAgIGJ1aWxkUG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRQb2x5Jyk7XG4gICAgYnVpbGRDb21wbGV4UG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRDb21wbGV4UG9seScpO1xuICAgIGJ1aWxkUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlJyk7XG4gICAgYnVpbGRDaXJjbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ2lyY2xlJyk7XG5cbiAgICBlYXJjdXQgPSByZXF1aXJlKCdlYXJjdXQnKTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBHcmFwaGljc1JlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgdGhpcy5ncmFwaGljc0RhdGFQb29sID0gW107XG5cbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBvaW50cyBhIHBvbHkgY2FuIGNvbnRhaW4gYmVmb3JlIGl0IGlzIHJlbmRlcmVkIGFzIGEgY29tcGxleCBwb2x5Z29uICh1c2luZyB0aGUgc3RlbmNpbCBidWZmZXIpXG4gICAgICogQHR5cGUge051bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heGltdW1TaW1wbGVQb2x5U2l6ZSA9IDIwMDtcbn1cblxuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2dyYXBoaWNzJywgR3JhcGhpY3NSZW5kZXJlcik7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZVxuICpcbiAqIEBwcml2YXRlXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy5nbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBuZXcgUHJpbWl0aXZlU2hhZGVyKHRoaXMuZ2wpXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgcmVuZGVyZXIuXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2xbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcbiAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIHZhciB3ZWJHTERhdGE7XG4gIC8vICBjb25zb2xlLmxvZyhncmFwaGljcylcbiAgICBpZiAoZ3JhcGhpY3MuZGlydHkgfHwgIWdyYXBoaWNzLl93ZWJHTFtnbC5pZF0pXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZUdyYXBoaWNzKGdyYXBoaWNzKTtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gVGhpcyAgY291bGQgYmUgc3BlZWRlZCB1cCBmb3Igc3VyZSFcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCBncmFwaGljcy5ibGVuZE1vZGUgKTtcblxuLy8gICAgdmFyIG1hdHJpeCA9ICBncmFwaGljcy53b3JsZFRyYW5zZm9ybS5jbG9uZSgpO1xuLy8gICAgdmFyIG1hdHJpeCA9ICByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXguY2xvbmUoKTtcbi8vICAgIG1hdHJpeC5hcHBlbmQoZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0pO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB3ZWJHTC5kYXRhLmxlbmd0aDsgaSA8IG47IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMLmRhdGFbaV0ubW9kZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy9UT0RPIGZpeCB0aGlzIG9uZSFcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnB1c2hTdGVuY2lsKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICBnbC51bmlmb3JtMWYocmVuZGVyZXIuc2hhZGVyTWFuYWdlci5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSAqIHdlYkdMRGF0YS5hbHBoYSk7XG5cbiAgICAgICAgICAgIC8vIHJlbmRlciBxdWFkLi5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgcmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucG9wU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICovXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHNoYWRlciA9IHRoaXMucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgICAgICAgICByZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50aW50ID0gdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5kcmF3Q291bnQrKztcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gdXBkYXRlXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnVwZGF0ZUdyYXBoaWNzID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBnZXQgdGhlIGNvbnRleHRzIGdyYXBoaWNzIG9iamVjdFxuICAgIHZhciB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF07XG5cbiAgICAvLyBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGRvZXMgbm90IGV4aXN0IGluIHRoZSB3ZWJHTCBjb250ZXh0IHRpbWUgdG8gY3JlYXRlIGl0IVxuICAgIGlmICghd2ViR0wpXG4gICAge1xuICAgICAgICB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF0gPSB7bGFzdEluZGV4OjAsIGRhdGE6W10sIGdsOmdsfTtcbiAgICB9XG5cbiAgIFxuICAgIC8vIGZsYWcgdGhlIGdyYXBoaWNzIGFzIG5vdCBkaXJ0eSBhcyB3ZSBhcmUgYWJvdXQgdG8gdXBkYXRlIGl0Li4uXG4gICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcblxuICAgIHZhciBpO1xuXG4gICAgLy8gaWYgdGhlIHVzZXIgY2xlYXJlZCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHdlIHdpbGwgbmVlZCB0byBjbGVhciBldmVyeSBvYmplY3RcbiAgICBpZiAoZ3JhcGhpY3MuY2xlYXJEaXJ0eSlcbiAgICB7XG4gICAgICAgIGdyYXBoaWNzLmNsZWFyRGlydHkgPSBmYWxzZTtcblxuICAgICAgICAvLyBsb29wIHRocm91Z2ggYW5kIHJldHVybiBhbGwgdGhlIHdlYkdMRGF0YXMgdG8gdGhlIG9iamVjdCBwb29sIHNvIHRoYW4gY2FuIGJlIHJldXNlZCBsYXRlciBvblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGdyYXBoaWNzRGF0YSA9IHdlYkdMLmRhdGFbaV07XG4gICAgICAgICAgICBncmFwaGljc0RhdGEucmVzZXQoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wdXNoKCBncmFwaGljc0RhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIHRoZSBhcnJheSBhbmQgcmVzZXQgdGhlIGluZGV4Li5cbiAgICAgICAgd2ViR0wuZGF0YSA9IFtdO1xuICAgICAgICB3ZWJHTC5sYXN0SW5kZXggPSAwO1xuICAgIH1cblxuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICAvLyBsb29wIHRocm91Z2ggdGhlIGdyYXBoaWNzIGRhdGFzIGFuZCBjb25zdHJ1Y3QgZWFjaCBvbmUuLlxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgYSBjb21wbGV4IGZpbGwgdGhlbiB0aGUgbmV3IHN0ZW5jaWwgYnVmZmVyIHRlY2huaXF1ZSB3aWxsIGJlIHVzZWRcbiAgICAvLyBvdGhlciB3aXNlIGdyYXBoaWNzIG9iamVjdHMgd2lsbCBiZSBwdXNoZWQgaW50byBhIGJhdGNoLi5cbiAgICBmb3IgKGkgPSB3ZWJHTC5sYXN0SW5kZXg7IGkgPCBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gbmVlZCB0byBhZGQgdGhlIHBvaW50cyB0aGUgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgICAgICAgICBkYXRhLnBvaW50cyA9IGRhdGEuc2hhcGUucG9pbnRzLnNsaWNlKCk7XG4gICAgICAgICAgICBpZiAoZGF0YS5zaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gY2xvc2UgdGhlIHBvbHkgaWYgdGhlIHZhbHVlIGlzIHRydWUhXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzWzBdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMl0gfHwgZGF0YS5wb2ludHNbMV0gIT09IGRhdGEucG9pbnRzW2RhdGEucG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucG9pbnRzLnB1c2goZGF0YS5wb2ludHNbMF0sIGRhdGEucG9pbnRzWzFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1BS0UgU1VSRSBXRSBIQVZFIFRIRSBDT1JSRUNUIFRZUEUuLlxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoID49IDYpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoIDwgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgKiAyKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FuRHJhd1VzaW5nU2ltcGxlID0gYnVpbGRQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuRHJhd1VzaW5nU2ltcGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGggPiAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG4gICAgICAgICAgICAgICAgYnVpbGRMaW5lKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQyB8fCBkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5FTElQKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkQ2lyY2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2ViR0wubGFzdEluZGV4Kys7XG4gICAgfVxuXG4gICAgLy8gdXBsb2FkIGFsbCB0aGUgZGlydHkgZGF0YS4uLlxuICAgIGZvciAoaSA9IDA7IGkgPCB3ZWJHTC5kYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVtpXTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLmRpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEudXBsb2FkKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB3ZWJHTCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IFRPRE8gQEFsdmluXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnN3aXRjaE1vZGUgPSBmdW5jdGlvbiAod2ViR0wsIHR5cGUpXG57XG4gICAgdmFyIHdlYkdMRGF0YTtcblxuICAgIGlmICghd2ViR0wuZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgd2ViR0xEYXRhLm1vZGUgPSB0eXBlO1xuICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVt3ZWJHTC5kYXRhLmxlbmd0aC0xXTtcblxuICAgICAgICBpZiAoKHdlYkdMRGF0YS5wb2ludHMubGVuZ3RoID4gMzIwMDAwKSB8fCB3ZWJHTERhdGEubW9kZSAhPT0gdHlwZSB8fCB0eXBlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgICAgIHdlYkdMLmRhdGEucHVzaCh3ZWJHTERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd2ViR0xEYXRhLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB3ZWJHTERhdGE7XG59O1xuXG4iLCIvKipcbiAqIEFuIG9iamVjdCBjb250YWluaW5nIFdlYkdMIHNwZWNpZmljIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBXZWJHTEdyYXBoaWNzRGF0YShnbCkge1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLy9UT0RPIGRvZXMgdGhpcyBuZWVkIHRvIGJlIHNwbGl0IGJlZm9yZSB1cGxvZGluZz8/XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgY29sb3IgY29tcG9uZW50cyAocixnLGIpXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5jb2xvciA9IFswLDAsMF07IC8vIGNvbG9yIHNwbGl0IVxuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgcG9pbnRzIHRvIGRyYXdcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50W119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IFtdO1xuICAgIC8qKlxuICAgICAqIFRoZSBtYWluIGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggYnVmZmVyXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogdG9kbyBAYWx2aW5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tb2RlID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgZ3JhcGhpY3MgaXMgZGlydHkgb3Igbm90XG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn1cblxuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xHcmFwaGljc0RhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIFJlc2V0cyB0aGUgdmVydGljZXMgYW5kIHRoZSBpbmRpY2VzXG4gKi9cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnBvaW50cy5sZW5ndGggPSAwO1xuICAgIHRoaXMuaW5kaWNlcy5sZW5ndGggPSAwO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbi8vICAgIHRoaXMubGFzdEluZGV4ID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDtcbiAgICB0aGlzLmdsUG9pbnRzID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnBvaW50cyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5idWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmdsUG9pbnRzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmdsSW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmluZGljZXMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5nbEluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuY29sb3IgPSBudWxsO1xuICAgIHRoaXMucG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIFxuICAgIHRoaXMuZ2wgPSBudWxsO1xuXG4gICAgdGhpcy5idWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5nbFBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5nbEluZGljZXMgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihnbClcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBnbCxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgZmxpcFk7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIHZlYzMgdGludDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvciAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpXG4gICAgKTtcbn1cblxuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHJpbWl0aXZlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBjaXJjbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRyYXdcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDaXJjbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgdmFyIGNpcmNsZURhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSBjaXJjbGVEYXRhLng7XG4gICAgdmFyIHkgPSBjaXJjbGVEYXRhLnk7XG4gICAgdmFyIHdpZHRoO1xuICAgIHZhciBoZWlnaHQ7XG5cbiAgICAvLyBUT0RPIC0gYml0IGhhY2t5Pz9cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSBjaXJjbGVEYXRhLnJhZGl1cztcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS53aWR0aDtcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHRvdGFsU2VncyA9IE1hdGguZmxvb3IoMzAgKiBNYXRoLnNxcnQoY2lyY2xlRGF0YS5yYWRpdXMpKSB8fCBNYXRoLmZsb29yKDE1ICogTWF0aC5zcXJ0KGNpcmNsZURhdGEud2lkdGggKyBjaXJjbGVEYXRhLmhlaWdodCkpO1xuICAgIHZhciBzZWcgPSAoTWF0aC5QSSAqIDIpIC8gdG90YWxTZWdzIDtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTZWdzICsgMSA7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaCh4LHksIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgeSArIE1hdGguY29zKHNlZyAqIGkpICogaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MrKywgdmVjUG9zKyspO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcy0xKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cy5wdXNoKHggKyBNYXRoLnNpbihzZWcgKiBpKSAqIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBidWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENpcmNsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21wbGV4IHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENvbXBsZXhQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vVE9ETyAtIG5vIG5lZWQgdG8gY29weSB0aGlzIGFzIGl0IGdldHMgdHVybmVkIGludG8gYSBGTG9hdDMyQXJyYXkgYW55d2F5cy4uXG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHMuc2xpY2UoKTtcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB3ZWJHTERhdGEucG9pbnRzID0gcG9pbnRzO1xuICAgIHdlYkdMRGF0YS5hbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgd2ViR0xEYXRhLmNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcblxuICAgIC8vIGNhbGNsYXRlIHRoZSBib3VuZHMuLlxuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgdmFyIHgseTtcblxuICAgIC8vIGdldCBzaXplLi5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrPTIpXG4gICAge1xuICAgICAgICB4ID0gcG9pbnRzW2ldO1xuICAgICAgICB5ID0gcG9pbnRzW2krMV07XG5cbiAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBxdWFkIHRvIHRoZSBlbmQgY29zIHRoZXJlIGlzIG5vIHBvaW50IG1ha2luZyBhbm90aGVyIGJ1ZmZlciFcbiAgICBwb2ludHMucHVzaChtaW5YLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWF4WSxcbiAgICAgICAgICAgICAgICBtaW5YLCBtYXhZKTtcblxuICAgIC8vIHB1c2ggYSBxdWFkIG9udG8gdGhlIGVuZC4uXG5cbiAgICAvL1RPRE8gLSB0aGlzIGFpbnQgbmVlZGVkIVxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goIGkgKTtcbiAgICB9XG5cbn07XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29tcGxleFBvbHk7IiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZExpbmUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gVE9ETyBPUFRJTUlTRSFcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGxpbmUgd2lkdGggaXMgYW4gb2RkIG51bWJlciBhZGQgMC41IHRvIGFsaWduIHRvIGEgd2hvbGUgcGl4ZWxcbiAgICAvLyBjb21tZW50aW5nIHRoaXMgb3V0IGZpeGVzICM3MTEgYW5kICMxNjIwXG4gICAgLy8gaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGglMilcbiAgICAvLyB7XG4gICAgLy8gICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAgIHBvaW50c1tpXSArPSAwLjU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGZpcnN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgdmFyIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IHBvaW50IGlzIHRoZSBsYXN0IHBvaW50IC0gZ29ubmEgaGF2ZSBpc3N1ZXMgOilcbiAgICBpZiAoZmlyc3RQb2ludC54ID09PSBsYXN0UG9pbnQueCAmJiBmaXJzdFBvaW50LnkgPT09IGxhc3RQb2ludC55KVxuICAgIHtcbiAgICAgICAgLy8gbmVlZCB0byBjbG9uZSBhcyB3ZSBhcmUgZ29pbmcgdG8gc2xpZ2h0bHkgbW9kaWZ5IHRoZSBzaGFwZS4uXG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5zbGljZSgpO1xuXG4gICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHZhciBtaWRQb2ludFggPSBsYXN0UG9pbnQueCArIChmaXJzdFBvaW50LnggLSBsYXN0UG9pbnQueCkgKjAuNTtcbiAgICAgICAgdmFyIG1pZFBvaW50WSA9IGxhc3RQb2ludC55ICsgKGZpcnN0UG9pbnQueSAtIGxhc3RQb2ludC55KSAqMC41O1xuXG4gICAgICAgIHBvaW50cy51bnNoaWZ0KG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICAgICAgcG9pbnRzLnB1c2gobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgdmFyIGluZGV4Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIHZhciBpbmRleFN0YXJ0ID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAvLyBEUkFXIHRoZSBMaW5lXG4gICAgdmFyIHdpZHRoID0gZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEubGluZUNvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEubGluZUFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHB4LCBweSwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeTtcbiAgICB2YXIgcGVycHgsIHBlcnB5LCBwZXJwMngsIHBlcnAyeSwgcGVycDN4LCBwZXJwM3k7XG4gICAgdmFyIGExLCBiMSwgYzEsIGEyLCBiMiwgYzI7XG4gICAgdmFyIGRlbm9tLCBwZGlzdCwgZGlzdDtcblxuICAgIHAxeCA9IHBvaW50c1swXTtcbiAgICBwMXkgPSBwb2ludHNbMV07XG5cbiAgICBwMnggPSBwb2ludHNbMl07XG4gICAgcDJ5ID0gcG9pbnRzWzNdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSAgcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcblxuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIC8vIHN0YXJ0XG4gICAgdmVydHMucHVzaChwMXggLSBwZXJweCAsIHAxeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDF4ICsgcGVycHggLCBwMXkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoLTE7IGkrKylcbiAgICB7XG4gICAgICAgIHAxeCA9IHBvaW50c1soaS0xKSoyXTtcbiAgICAgICAgcDF5ID0gcG9pbnRzWyhpLTEpKjIgKyAxXTtcblxuICAgICAgICBwMnggPSBwb2ludHNbKGkpKjJdO1xuICAgICAgICBwMnkgPSBwb2ludHNbKGkpKjIgKyAxXTtcblxuICAgICAgICBwM3ggPSBwb2ludHNbKGkrMSkqMl07XG4gICAgICAgIHAzeSA9IHBvaW50c1soaSsxKSoyICsgMV07XG5cbiAgICAgICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgICAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgICAgICBwZXJwMnggPSAtKHAyeSAtIHAzeSk7XG4gICAgICAgIHBlcnAyeSA9IHAyeCAtIHAzeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAyeCpwZXJwMnggKyBwZXJwMnkqcGVycDJ5KTtcbiAgICAgICAgcGVycDJ4IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeSAvPSBkaXN0O1xuICAgICAgICBwZXJwMnggKj0gd2lkdGg7XG4gICAgICAgIHBlcnAyeSAqPSB3aWR0aDtcblxuICAgICAgICBhMSA9ICgtcGVycHkgKyBwMXkpIC0gKC1wZXJweSArIHAyeSk7XG4gICAgICAgIGIxID0gKC1wZXJweCArIHAyeCkgLSAoLXBlcnB4ICsgcDF4KTtcbiAgICAgICAgYzEgPSAoLXBlcnB4ICsgcDF4KSAqICgtcGVycHkgKyBwMnkpIC0gKC1wZXJweCArIHAyeCkgKiAoLXBlcnB5ICsgcDF5KTtcbiAgICAgICAgYTIgPSAoLXBlcnAyeSArIHAzeSkgLSAoLXBlcnAyeSArIHAyeSk7XG4gICAgICAgIGIyID0gKC1wZXJwMnggKyBwMngpIC0gKC1wZXJwMnggKyBwM3gpO1xuICAgICAgICBjMiA9ICgtcGVycDJ4ICsgcDN4KSAqICgtcGVycDJ5ICsgcDJ5KSAtICgtcGVycDJ4ICsgcDJ4KSAqICgtcGVycDJ5ICsgcDN5KTtcblxuICAgICAgICBkZW5vbSA9IGExKmIyIC0gYTIqYjE7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8IDAuMSApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgZGVub20rPTEwLjE7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4ID0gKGIxKmMyIC0gYjIqYzEpL2Rlbm9tO1xuICAgICAgICBweSA9IChhMipjMSAtIGExKmMyKS9kZW5vbTtcblxuXG4gICAgICAgIHBkaXN0ID0gKHB4IC1wMngpICogKHB4IC1wMngpICsgKHB5IC1wMnkpICogKHB5IC1wMnkpO1xuXG5cbiAgICAgICAgaWYgKHBkaXN0ID4gMTQwICogMTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICBwZXJwM3ggPSBwZXJweCAtIHBlcnAyeDtcbiAgICAgICAgICAgIHBlcnAzeSA9IHBlcnB5IC0gcGVycDJ5O1xuXG4gICAgICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAzeCpwZXJwM3ggKyBwZXJwM3kqcGVycDN5KTtcbiAgICAgICAgICAgIHBlcnAzeCAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN5IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3ggKj0gd2lkdGg7XG4gICAgICAgICAgICBwZXJwM3kgKj0gd2lkdGg7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJwM3gsIHAyeSArcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGV4Q291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmVydHMucHVzaChweCAsIHB5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIChweC1wMngpLCBwMnkgLSAocHkgLSBwMnkpKTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcDF4ID0gcG9pbnRzWyhsZW5ndGgtMikqMl07XG4gICAgcDF5ID0gcG9pbnRzWyhsZW5ndGgtMikqMiArIDFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWyhsZW5ndGgtMSkqMl07XG4gICAgcDJ5ID0gcG9pbnRzWyhsZW5ndGgtMSkqMiArIDFdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KyspO1xuICAgIH1cblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0LTEpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZExpbmU7IiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5XZWJHTEdyYXBoaWNzRGF0YX0gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChwb2ludHMsIG51bGwsIDIpO1xuXG4gICAgaWYgKCF0cmlhbmdsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoIC8gNjtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gK3ZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZXJ0UG9zKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2ZXJ0cy5wdXNoKHBvaW50c1tpICogMl0sIHBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFBvbHk7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gLS0tIC8vXG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgLy9cbiAgICB2YXIgcmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSByZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSByZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICAvLyBzdGFydFxuICAgICAgICB2ZXJ0cy5wdXNoKHgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCAsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIC8vIGluc2VydCAyIGRlYWQgdHJpYW5nbGVzLi5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRQb3MsIHZlcnRQb3MsIHZlcnRQb3MrMSwgdmVydFBvcysyLCB2ZXJ0UG9zKzMsIHZlcnRQb3MrMyk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFt4LCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHldO1xuXG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUmVjdGFuZ2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcbiAgICBcbi8qKlxuICogQnVpbGRzIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbmJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcnJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcnJlY3REYXRhLng7XG4gICAgdmFyIHkgPSBycmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSBycmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJyZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICB2YXIgcmFkaXVzID0gcnJlY3REYXRhLnJhZGl1cztcblxuICAgIHZhciByZWNQb2ludHMgPSBbXTtcbiAgICByZWNQb2ludHMucHVzaCh4LCB5ICsgcmFkaXVzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHgsIHkgKyBoZWlnaHQsIHggKyByYWRpdXMsIHkgKyBoZWlnaHQsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoLCB5ICsgcmFkaXVzLCB4ICsgd2lkdGgsIHksIHggKyB3aWR0aCAtIHJhZGl1cywgeSwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyByYWRpdXMsIHksIHgsIHksIHgsIHkgKyByYWRpdXMgKyAwLjAwMDAwMDAwMDEsIHJlY1BvaW50cyk7XG5cbiAgICAvLyB0aGlzIHRpbnkgbnVtYmVyIGRlYWxzIHdpdGggdGhlIGlzc3VlIHRoYXQgb2NjdXJzIHdoZW4gcG9pbnRzIG92ZXJsYXAgYW5kIGVhcmN1dCBmYWlscyB0byB0cmlhbmd1bGF0ZSB0aGUgaXRlbS5cbiAgICAvLyBUT0RPIC0gZml4IHRoaXMgcHJvcGVybHksIHRoaXMgaXMgbm90IHZlcnkgZWxlZ2FudC4uIGJ1dCBpdCB3b3JrcyBmb3Igbm93LlxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocmVjUG9pbnRzLCBudWxsLCAyKTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlY1BvaW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaChyZWNQb2ludHNbaV0sIHJlY1BvaW50c1srK2ldLCByLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gcmVjUG9pbnRzO1xuXG4gICAgICAgIHRoaXMuYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUuIChoZWxwZXIgZnVuY3Rpb24uLilcbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZyb21YIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gZnJvbVkge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEBwYXJhbSBbb3V0XSB7bnVtYmVyW119IFRoZSBvdXRwdXQgYXJyYXkgdG8gYWRkIHBvaW50cyBpbnRvLiBJZiBub3QgcGFzc2VkLCBhIG5ldyBhcnJheSBpcyBjcmVhdGVkLlxuICogQHJldHVybiB7bnVtYmVyW119IGFuIGFycmF5IG9mIHBvaW50c1xuICovXG5xdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IGZ1bmN0aW9uIChmcm9tWCwgZnJvbVksIGNwWCwgY3BZLCB0b1gsIHRvWSwgb3V0KVxue1xuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIHhiLFxuICAgICAgICB5YixcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSBvdXQgfHwgW107XG5cbiAgICBmdW5jdGlvbiBnZXRQdChuMSAsIG4yLCBwZXJjKSB7XG4gICAgICAgIHZhciBkaWZmID0gbjIgLSBuMTtcblxuICAgICAgICByZXR1cm4gbjEgKyAoIGRpZmYgKiBwZXJjICk7XG4gICAgfVxuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKyApIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIC8vIFRoZSBHcmVlbiBMaW5lXG4gICAgICAgIHhhID0gZ2V0UHQoIGZyb21YICwgY3BYICwgaiApO1xuICAgICAgICB5YSA9IGdldFB0KCBmcm9tWSAsIGNwWSAsIGogKTtcbiAgICAgICAgeGIgPSBnZXRQdCggY3BYICwgdG9YICwgaiApO1xuICAgICAgICB5YiA9IGdldFB0KCBjcFkgLCB0b1kgLCBqICk7XG5cbiAgICAgICAgLy8gVGhlIEJsYWNrIERvdFxuICAgICAgICB4ID0gZ2V0UHQoIHhhICwgeGIgLCBqICk7XG4gICAgICAgIHkgPSBnZXRQdCggeWEgLCB5YiAsIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUm91bmRlZFJlY3RhbmdsZTsiLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBjb3JlIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSVxuICovXG4vLyBleHBvcnQgY29yZSBhbmQgY29uc3QuIFdlIGFzc2lnbiBjb3JlIHRvIGNvbnN0IHNvIHRoYXQgdGhlIG5vbi1yZWZlcmVuY2UgdHlwZXMgaW4gY29uc3QgcmVtYWluIGluLXRhY3RcbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduKHJlcXVpcmUoJy4vY29uc3QnKSwgcmVxdWlyZSgnLi9tYXRoJyksIHtcbiAgICAvLyB1dGlsc1xuICAgIHV0aWxzOiByZXF1aXJlKCcuL3V0aWxzJyksXG4gICAgdGlja2VyOiByZXF1aXJlKCcuL3RpY2tlcicpLFxuXG4gICAgLy8gZGlzcGxheVxuICAgIERpc3BsYXlPYmplY3Q6ICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9EaXNwbGF5T2JqZWN0JyksXG4gICAgQ29udGFpbmVyOiAgICAgICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuXG4gICAgLy8gc3ByaXRlc1xuICAgIFNwcml0ZTogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBQYXJ0aWNsZUNvbnRhaW5lcjogICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lcicpLFxuICAgIFNwcml0ZVJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHRcbiAgICBUZXh0OiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHQvVGV4dCcpLFxuXG4gICAgLy8gcHJpbWl0aXZlc1xuICAgIEdyYXBoaWNzOiAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGE6ICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRGF0YScpLFxuICAgIEdyYXBoaWNzUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dHVyZXNcbiAgICBUZXh0dXJlOiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBCYXNlVGV4dHVyZTogICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL0Jhc2VUZXh0dXJlJyksXG4gICAgUmVuZGVyVGV4dHVyZTogICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgQmFzZVJlbmRlclRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmU6ICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnM6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVGV4dHVyZVV2cycpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gY2FudmFzXG4gICAgQ2FudmFzUmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyJyksXG4gICAgQ2FudmFzR3JhcGhpY3M6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzJyksXG4gICAgQ2FudmFzQnVmZmVyOiAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gd2ViZ2xcbiAgICBXZWJHTFJlbmRlcmVyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgU2hhZGVyOiAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXInKSxcbiAgICBPYmplY3RSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFJlbmRlclRhcmdldDogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuXG4gICAgLy8gZmlsdGVycyAtIHdlYmdsXG4gICAgQWJzdHJhY3RGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlcicpLFxuICAgIEZYQUFGaWx0ZXI6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFNwcml0ZU1hc2tGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlcicpLFxuXG4gICAgZ2xDb3JlOiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3Qgd2hpY2ggcmVuZGVyZXIgeW91IHNob3VsZCBiZSB1c2luZy5cbiAgICAgKiBXZWJHTCBpcyB0aGUgcHJlZmVycmVkIHJlbmRlcmVyIGFzIGl0IGlzIGEgbG90IGZhc3Rlci4gSWYgd2ViR0wgaXMgbm90IHN1cHBvcnRlZCBieVxuICAgICAqIHRoZSBicm93c2VyIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhIGNhbnZhcyByZW5kZXJlclxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAcGFyYW0gd2lkdGg9ODAwIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gaGVpZ2h0PTYwMCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSByZW5kZXJlcnMgdmlld1xuICAgICAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gICAgICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZV0ge2Jvb2xlYW59IGVuYWJsZXMgZHJhd2luZyBidWZmZXIgcHJlc2VydmF0aW9uLCBlbmFibGUgdGhpcyBpZiB5b3VcbiAgICAgKiAgICAgIG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIsIHJldGluYSB3b3VsZCBiZSAyXG4gICAgICogQHBhcmFtIFtub1dlYkdMPWZhbHNlXSB7Ym9vbGVhbn0gcHJldmVudHMgc2VsZWN0aW9uIG9mIFdlYkdMIHJlbmRlcmVyLCBldmVuIGlmIHN1Y2ggaXMgcHJlc2VudFxuICAgICAqXG4gICAgICogQHJldHVybiB7V2ViR0xSZW5kZXJlcnxDYW52YXNSZW5kZXJlcn0gUmV0dXJucyBXZWJHTCByZW5kZXJlciBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBDYW52YXNSZW5kZXJlclxuICAgICAqL1xuICAgIGF1dG9EZXRlY3RSZW5kZXJlcjogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMsIG5vV2ViR0wpXG4gICAge1xuICAgICAgICB3aWR0aCA9IHdpZHRoIHx8IDgwMDtcbiAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0IHx8IDYwMDtcblxuICAgICAgICBpZiAoIW5vV2ViR0wgJiYgY29yZS51dGlscy5pc1dlYkdMU3VwcG9ydGVkKCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgY29yZS5XZWJHTFJlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBjb3JlLkNhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgIH1cbn0pO1xuIiwiLy8gQHRvZG8gLSBpZ25vcmUgdGhlIHRvbyBtYW55IHBhcmFtZXRlcnMgd2FybmluZyBmb3Igbm93XG4vLyBzaG91bGQgZWl0aGVyIGZpeCBpdCBvciBjaGFuZ2UgdGhlIGpzaGludCBjb25maWdcbi8vIGpzaGludCAtVzA3MlxuXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuL1BvaW50Jyk7XG5cbi8qKlxuICogVGhlIHBpeGkgTWF0cml4IGNsYXNzIGFzIGFuIG9iamVjdCwgd2hpY2ggbWFrZXMgaXQgYSBsb3QgZmFzdGVyLFxuICogaGVyZSBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIGl0IDpcbiAqIHwgYSB8IGIgfCB0eHxcbiAqIHwgYyB8IGQgfCB0eXxcbiAqIHwgMCB8IDAgfCAxIHxcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIE1hdHJpeCgpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmIgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmMgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnR4ID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eSA9IDA7XG59XG5cbk1hdHJpeC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNYXRyaXg7XG5tb2R1bGUuZXhwb3J0cyA9IE1hdHJpeDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgTWF0cml4IG9iamVjdCBiYXNlZCBvbiB0aGUgZ2l2ZW4gYXJyYXkuIFRoZSBFbGVtZW50IHRvIE1hdHJpeCBtYXBwaW5nIG9yZGVyIGlzIGFzIGZvbGxvd3M6XG4gKlxuICogYSA9IGFycmF5WzBdXG4gKiBiID0gYXJyYXlbMV1cbiAqIGMgPSBhcnJheVszXVxuICogZCA9IGFycmF5WzRdXG4gKiB0eCA9IGFycmF5WzJdXG4gKiB0eSA9IGFycmF5WzVdXG4gKlxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX0gVGhlIGFycmF5IHRoYXQgdGhlIG1hdHJpeCB3aWxsIGJlIHBvcHVsYXRlZCBmcm9tLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJheSlcbntcbiAgICB0aGlzLmEgPSBhcnJheVswXTtcbiAgICB0aGlzLmIgPSBhcnJheVsxXTtcbiAgICB0aGlzLmMgPSBhcnJheVszXTtcbiAgICB0aGlzLmQgPSBhcnJheVs0XTtcbiAgICB0aGlzLnR4ID0gYXJyYXlbMl07XG4gICAgdGhpcy50eSA9IGFycmF5WzVdO1xufTtcblxuXG4vKipcbiAqIHNldHMgdGhlIG1hdHJpeCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gKiBAcGFyYW0ge251bWJlcn0gY1xuICogQHBhcmFtIHtudW1iZXJ9IGRcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eFxuICogQHBhcmFtIHtudW1iZXJ9IHR5XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHR4LCB0eSlcbntcbiAgICB0aGlzLmEgPSBhO1xuICAgIHRoaXMuYiA9IGI7XG4gICAgdGhpcy5jID0gYztcbiAgICB0aGlzLmQgPSBkO1xuICAgIHRoaXMudHggPSB0eDtcbiAgICB0aGlzLnR5ID0gdHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGZyb20gdGhlIGN1cnJlbnQgTWF0cml4IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3NlIHtib29sZWFufSBXaGV0aGVyIHdlIG5lZWQgdG8gdHJhbnNwb3NlIHRoZSBtYXRyaXggb3Igbm90XG4gKiBAcGFyYW0gW291dF0ge0FycmF5fSBJZiBwcm92aWRlZCB0aGUgYXJyYXkgd2lsbCBiZSBhc3NpZ25lZCB0byBvdXRcbiAqIEByZXR1cm4ge251bWJlcltdfSB0aGUgbmV3bHkgY3JlYXRlZCBhcnJheSB3aGljaCBjb250YWlucyB0aGUgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICh0cmFuc3Bvc2UsIG91dClcbntcbiAgICBpZiAoIXRoaXMuYXJyYXkpXG4gICAge1xuICAgICAgICB0aGlzLmFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg5KTtcbiAgICB9XG5cbiAgICB2YXIgYXJyYXkgPSBvdXQgfHwgdGhpcy5hcnJheTtcblxuICAgIGlmICh0cmFuc3Bvc2UpXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzJdID0gMDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IDA7XG4gICAgICAgIGFycmF5WzZdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbN10gPSB0aGlzLnR5O1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGFycmF5WzBdID0gdGhpcy5hO1xuICAgICAgICBhcnJheVsxXSA9IHRoaXMuYztcbiAgICAgICAgYXJyYXlbMl0gPSB0aGlzLnR4O1xuICAgICAgICBhcnJheVszXSA9IHRoaXMuYjtcbiAgICAgICAgYXJyYXlbNF0gPSB0aGlzLmQ7XG4gICAgICAgIGFycmF5WzVdID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbNl0gPSAwO1xuICAgICAgICBhcnJheVs3XSA9IDA7XG4gICAgICAgIGFycmF5WzhdID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59O1xuXG4vKipcbiAqIEdldCBhIG5ldyBwb3NpdGlvbiB3aXRoIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXG4gKiBDYW4gYmUgdXNlZCB0byBnbyBmcm9tIGEgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlIHRvIHRoZSB3b3JsZCBjb29yZGluYXRlIHNwYWNlLiAoZS5nLiByZW5kZXJpbmcpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCB0cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIHggPSBwb3MueDtcbiAgICB2YXIgeSA9IHBvcy55O1xuXG4gICAgbmV3UG9zLnggPSB0aGlzLmEgKiB4ICsgdGhpcy5jICogeSArIHRoaXMudHg7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmIgKiB4ICsgdGhpcy5kICogeSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gbmV3UG9zO1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgaW52ZXJzZSBvZiB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZSB0byBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gaW5wdXQpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCBpbnZlcnNlLXRyYW5zZm9ybWVkIHRocm91Z2ggdGhpcyBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBseUludmVyc2UgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIGlkID0gMSAvICh0aGlzLmEgKiB0aGlzLmQgKyB0aGlzLmMgKiAtdGhpcy5iKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5kICogaWQgKiB4ICsgLXRoaXMuYyAqIGlkICogeSArICh0aGlzLnR5ICogdGhpcy5jIC0gdGhpcy50eCAqIHRoaXMuZCkgKiBpZDtcbiAgICBuZXdQb3MueSA9IHRoaXMuYSAqIGlkICogeSArIC10aGlzLmIgKiBpZCAqIHggKyAoLXRoaXMudHkgKiB0aGlzLmEgKyB0aGlzLnR4ICogdGhpcy5iKSAqIGlkO1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogVHJhbnNsYXRlcyB0aGUgbWF0cml4IG9uIHRoZSB4IGFuZCB5LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudHJhbnNsYXRlID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy50eCArPSB4O1xuICAgIHRoaXMudHkgKz0geTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgc2NhbGUgdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geCBUaGUgYW1vdW50IHRvIHNjYWxlIGhvcml6b250YWxseVxuICogQHBhcmFtIHtudW1iZXJ9IHkgVGhlIGFtb3VudCB0byBzY2FsZSB2ZXJ0aWNhbGx5XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zY2FsZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuYSAqPSB4O1xuICAgIHRoaXMuZCAqPSB5O1xuICAgIHRoaXMuYyAqPSB4O1xuICAgIHRoaXMuYiAqPSB5O1xuICAgIHRoaXMudHggKj0geDtcbiAgICB0aGlzLnR5ICo9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBBcHBsaWVzIGEgcm90YXRpb24gdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgaW4gcmFkaWFucy5cbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZSA9IGZ1bmN0aW9uIChhbmdsZSlcbntcbiAgICB2YXIgY29zID0gTWF0aC5jb3MoIGFuZ2xlICk7XG4gICAgdmFyIHNpbiA9IE1hdGguc2luKCBhbmdsZSApO1xuXG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIHRoaXMuYSA9IGExICogY29zLXRoaXMuYiAqIHNpbjtcbiAgICB0aGlzLmIgPSBhMSAqIHNpbit0aGlzLmIgKiBjb3M7XG4gICAgdGhpcy5jID0gYzEgKiBjb3MtdGhpcy5kICogc2luO1xuICAgIHRoaXMuZCA9IGMxICogc2luK3RoaXMuZCAqIGNvcztcbiAgICB0aGlzLnR4ID0gdHgxICogY29zIC0gdGhpcy50eSAqIHNpbjtcbiAgICB0aGlzLnR5ID0gdHgxICogc2luICsgdGhpcy50eSAqIGNvcztcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcblxuICAgIHRoaXMuYSAgPSBtYXRyaXguYSAqIGExICsgbWF0cml4LmIgKiBjMTtcbiAgICB0aGlzLmIgID0gbWF0cml4LmEgKiBiMSArIG1hdHJpeC5iICogZDE7XG4gICAgdGhpcy5jICA9IG1hdHJpeC5jICogYTEgKyBtYXRyaXguZCAqIGMxO1xuICAgIHRoaXMuZCAgPSBtYXRyaXguYyAqIGIxICsgbWF0cml4LmQgKiBkMTtcblxuICAgIHRoaXMudHggPSBtYXRyaXgudHggKiBhMSArIG1hdHJpeC50eSAqIGMxICsgdGhpcy50eDtcbiAgICB0aGlzLnR5ID0gbWF0cml4LnR4ICogYjEgKyBtYXRyaXgudHkgKiBkMSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbWF0cml4IGJhc2VkIG9uIGFsbCB0aGUgYXZhaWxhYmxlIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFhcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFlcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVlcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3RhdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdYXG4gKiBAcGFyYW0ge251bWJlcn0gc2tld1lcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoeCwgeSwgcGl2b3RYLCBwaXZvdFksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZKVxue1xuICAgIHZhciBhLCBiLCBjLCBkLCBzciwgY3IsIGN5LCBzeSwgbnN4LCBjeDtcblxuICAgIHNyICA9IE1hdGguc2luKHJvdGF0aW9uKTtcbiAgICBjciAgPSBNYXRoLmNvcyhyb3RhdGlvbik7XG4gICAgY3kgID0gTWF0aC5jb3Moc2tld1kpO1xuICAgIHN5ICA9IE1hdGguc2luKHNrZXdZKTtcbiAgICBuc3ggPSAtTWF0aC5zaW4oc2tld1gpO1xuICAgIGN4ICA9ICBNYXRoLmNvcyhza2V3WCk7XG5cbiAgICBhICA9ICBjciAqIHNjYWxlWDtcbiAgICBiICA9ICBzciAqIHNjYWxlWDtcbiAgICBjICA9IC1zciAqIHNjYWxlWTtcbiAgICBkICA9ICBjciAqIHNjYWxlWTtcblxuICAgIHRoaXMuYSAgPSBjeSAqIGEgKyBzeSAqIGM7XG4gICAgdGhpcy5iICA9IGN5ICogYiArIHN5ICogZDtcbiAgICB0aGlzLmMgID0gbnN4ICogYSArIGN4ICogYztcbiAgICB0aGlzLmQgID0gbnN4ICogYiArIGN4ICogZDtcblxuICAgIHRoaXMudHggPSB4ICsgKCBwaXZvdFggKiBhICsgcGl2b3RZICogYyApO1xuICAgIHRoaXMudHkgPSB5ICsgKCBwaXZvdFggKiBiICsgcGl2b3RZICogZCApO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFByZXBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24obWF0cml4KVxue1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuXG4gICAgaWYgKG1hdHJpeC5hICE9PSAxIHx8IG1hdHJpeC5iICE9PSAwIHx8IG1hdHJpeC5jICE9PSAwIHx8IG1hdHJpeC5kICE9PSAxKVxuICAgIHtcbiAgICAgICAgdmFyIGExID0gdGhpcy5hO1xuICAgICAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgICAgIHRoaXMuYSAgPSBhMSptYXRyaXguYSt0aGlzLmIqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuYiAgPSBhMSptYXRyaXguYit0aGlzLmIqbWF0cml4LmQ7XG4gICAgICAgIHRoaXMuYyAgPSBjMSptYXRyaXguYSt0aGlzLmQqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuZCAgPSBjMSptYXRyaXguYit0aGlzLmQqbWF0cml4LmQ7XG4gICAgfVxuXG4gICAgdGhpcy50eCA9IHR4MSptYXRyaXguYSt0aGlzLnR5Km1hdHJpeC5jK21hdHJpeC50eDtcbiAgICB0aGlzLnR5ID0gdHgxKm1hdHJpeC5iK3RoaXMudHkqbWF0cml4LmQrbWF0cml4LnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEludmVydHMgdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5pbnZlcnQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBiMSA9IHRoaXMuYjtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIGQxID0gdGhpcy5kO1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuICAgIHZhciBuID0gYTEqZDEtYjEqYzE7XG5cbiAgICB0aGlzLmEgPSBkMS9uO1xuICAgIHRoaXMuYiA9IC1iMS9uO1xuICAgIHRoaXMuYyA9IC1jMS9uO1xuICAgIHRoaXMuZCA9IGExL247XG4gICAgdGhpcy50eCA9IChjMSp0aGlzLnR5LWQxKnR4MSkvbjtcbiAgICB0aGlzLnR5ID0gLShhMSp0aGlzLnR5LWIxKnR4MSkvbjtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIFJlc2V0cyB0aGlzIE1hdGl4IHRvIGFuIGlkZW50aXR5IChkZWZhdWx0KSBtYXRyaXguXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaWRlbnRpdHkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYSA9IDE7XG4gICAgdGhpcy5iID0gMDtcbiAgICB0aGlzLmMgPSAwO1xuICAgIHRoaXMuZCA9IDE7XG4gICAgdGhpcy50eCA9IDA7XG4gICAgdGhpcy50eSA9IDA7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBNYXRyaXggb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBBIGNvcHkgb2YgdGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1hdHJpeCA9IG5ldyBNYXRyaXgoKTtcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSB2YWx1ZXMgb2YgdGhlIGdpdmVuIG1hdHJpeCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgb25lcyBpbiB0aGlzIG1hdHJpeFxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGUgbWF0cml4IGdpdmVuIGluIHBhcmFtZXRlciB3aXRoIGl0cyB2YWx1ZXMgdXBkYXRlZC5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBBIGRlZmF1bHQgKGlkZW50aXR5KSBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LklERU5USVRZID0gbmV3IE1hdHJpeCgpO1xuXG4vKipcbiAqIEEgdGVtcCBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LlRFTVBfTUFUUklYID0gbmV3IE1hdHJpeCgpO1xuIiwiLyoqXG4gKiBUaGUgUG9pbnQgb2JqZWN0IHJlcHJlc2VudHMgYSBsb2NhdGlvbiBpbiBhIHR3by1kaW1lbnNpb25hbCBjb29yZGluYXRlIHN5c3RlbSwgd2hlcmUgeCByZXByZXNlbnRzXG4gKiB0aGUgaG9yaXpvbnRhbCBheGlzIGFuZCB5IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIGF4aXMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXNcbiAqL1xuZnVuY3Rpb24gUG9pbnQoeCwgeSlcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xufVxuXG5Qb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2ludDtcbm1vZHVsZS5leHBvcnRzID0gUG9pbnQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9pbnRcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBhIGNvcHkgb2YgdGhlIHBvaW50XG4gKi9cblBvaW50LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLngsIHRoaXMueSk7XG59O1xuXG4vKipcbiAqIENvcGllcyB4IGFuZCB5IGZyb20gdGhlIGdpdmVuIHBvaW50XG4gKlxuICogQHBhcmFtIHAge1BJWEkuUG9pbnR9XG4gKi9cblBvaW50LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKHApIHtcbiAgICB0aGlzLnNldChwLngsIHAueSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcG9pbnQgaXMgZXF1YWwgdG8gdGhpcyBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cblBvaW50LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiAocC54ID09PSB0aGlzLngpICYmIChwLnkgPT09IHRoaXMueSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIHBvaW50IHRvIGEgbmV3IHggYW5kIHkgcG9zaXRpb24uXG4gKiBJZiB5IGlzIG9taXR0ZWQsIGJvdGggeCBhbmQgeSB3aWxsIGJlIHNldCB0byB4LlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cblBvaW50LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLnggPSB4IHx8IDA7XG4gICAgdGhpcy55ID0geSB8fCAoICh5ICE9PSAwKSA/IHRoaXMueCA6IDAgKSA7XG59O1xuIiwiLyoqXG4gKiBNYXRoIGNsYXNzZXMgYW5kIHV0aWxpdGllcyBtaXhlZCBpbnRvIFBJWEkgbmFtZXNwYWNlLlxuICpcbiAqIEBsZW5kcyBQSVhJXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8vIFRoZXNlIHdpbGwgYmUgbWl4ZWQgdG8gYmUgbWFkZSBwdWJsaWNseSBhdmFpbGFibGUsXG4gICAgLy8gd2hpbGUgdGhpcyBtb2R1bGUgaXMgdXNlZCBpbnRlcm5hbGx5IGluIGNvcmVcbiAgICAvLyB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYW5kIGN1dCBkb3duIG9uXG4gICAgLy8gaW50ZXJuYWwgbW9kdWxlIHJlcXVpcmVzLlxuXG4gICAgUG9pbnQ6ICAgICAgcmVxdWlyZSgnLi9Qb2ludCcpLFxuICAgIE1hdHJpeDogICAgIHJlcXVpcmUoJy4vTWF0cml4JyksXG5cbiAgICBDaXJjbGU6ICAgICByZXF1aXJlKCcuL3NoYXBlcy9DaXJjbGUnKSxcbiAgICBFbGxpcHNlOiAgICByZXF1aXJlKCcuL3NoYXBlcy9FbGxpcHNlJyksXG4gICAgUG9seWdvbjogICAgcmVxdWlyZSgnLi9zaGFwZXMvUG9seWdvbicpLFxuICAgIFJlY3RhbmdsZTogIHJlcXVpcmUoJy4vc2hhcGVzL1JlY3RhbmdsZScpLFxuICAgIFJvdW5kZWRSZWN0YW5nbGU6IHJlcXVpcmUoJy4vc2hhcGVzL1JvdW5kZWRSZWN0YW5nbGUnKVxufTtcbiIsInZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2lyY2xlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKi9cbmZ1bmN0aW9uIENpcmNsZSh4LCB5LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuQ0lSQztcbn1cblxuQ2lyY2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENpcmNsZTtcbm1vZHVsZS5leHBvcnRzID0gQ2lyY2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIENpcmNsZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuQ2lyY2xlfSBhIGNvcHkgb2YgdGhlIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IENpcmNsZSh0aGlzLngsIHRoaXMueSwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGNpcmNsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgQ2lyY2xlXG4gKi9cbkNpcmNsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy5yYWRpdXMgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgZHggPSAodGhpcy54IC0geCksXG4gICAgICAgIGR5ID0gKHRoaXMueSAtIHkpLFxuICAgICAgICByMiA9IHRoaXMucmFkaXVzICogdGhpcy5yYWRpdXM7XG5cbiAgICBkeCAqPSBkeDtcbiAgICBkeSAqPSBkeTtcblxuICAgIHJldHVybiAoZHggKyBkeSA8PSByMik7XG59O1xuXG4vKipcbiogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIGNpcmNsZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuKi9cbkNpcmNsZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLnJhZGl1cywgdGhpcy55IC0gdGhpcy5yYWRpdXMsIHRoaXMucmFkaXVzICogMiwgdGhpcy5yYWRpdXMgKiAyKTtcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIEVsbGlwc2Ugb2JqZWN0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBoaXQgYXJlYSBmb3IgZGlzcGxheU9iamVjdHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBoYWxmIHdpZHRoIG9mIHRoaXMgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhpcyBlbGxpcHNlXG4gKi9cbmZ1bmN0aW9uIEVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuRUxJUDtcbn1cblxuRWxsaXBzZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFbGxpcHNlO1xubW9kdWxlLmV4cG9ydHMgPSBFbGxpcHNlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIEVsbGlwc2UgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkVsbGlwc2V9IGEgY29weSBvZiB0aGUgZWxsaXBzZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBFbGxpcHNlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgZWxsaXBzZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZHMgYXJlIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy9ub3JtYWxpemUgdGhlIGNvb3JkcyB0byBhbiBlbGxpcHNlIHdpdGggY2VudGVyIDAsMFxuICAgIHZhciBub3JteCA9ICgoeCAtIHRoaXMueCkgLyB0aGlzLndpZHRoKSxcbiAgICAgICAgbm9ybXkgPSAoKHkgLSB0aGlzLnkpIC8gdGhpcy5oZWlnaHQpO1xuXG4gICAgbm9ybXggKj0gbm9ybXg7XG4gICAgbm9ybXkgKj0gbm9ybXk7XG5cbiAgICByZXR1cm4gKG5vcm14ICsgbm9ybXkgPD0gMSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBlbGxpcHNlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLndpZHRoLCB0aGlzLnkgLSB0aGlzLmhlaWdodCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcbiIsInZhciBQb2ludCA9IHJlcXVpcmUoJy4uL1BvaW50JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBwb2ludHMge1BJWEkuUG9pbnRbXXxudW1iZXJbXXwuLi5QSVhJLlBvaW50fC4uLm51bWJlcn0gVGhpcyBjYW4gYmUgYW4gYXJyYXkgb2YgUG9pbnRzIHRoYXQgZm9ybSB0aGUgcG9seWdvbixcbiAqICAgICAgYSBmbGF0IGFycmF5IG9mIG51bWJlcnMgdGhhdCB3aWxsIGJlIGludGVycHJldGVkIGFzIFt4LHksIHgseSwgLi4uXSwgb3IgdGhlIGFyZ3VtZW50cyBwYXNzZWQgY2FuIGJlXG4gKiAgICAgIGFsbCB0aGUgcG9pbnRzIG9mIHRoZSBwb2x5Z29uIGUuZy4gYG5ldyBQSVhJLlBvbHlnb24obmV3IFBJWEkuUG9pbnQoKSwgbmV3IFBJWEkuUG9pbnQoKSwgLi4uKWAsIG9yIHRoZVxuICogICAgICBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZSBmbGF0IHgseSB2YWx1ZXMgZS5nLiBgbmV3IFBvbHlnb24oeCx5LCB4LHksIHgseSwgLi4uKWAgd2hlcmUgYHhgIGFuZCBgeWAgYXJlXG4gKiAgICAgIE51bWJlcnMuXG4gKi9cbmZ1bmN0aW9uIFBvbHlnb24ocG9pbnRzXylcbntcbiAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBhc3NpZ25tZW50IGRlb3B0XG4gICAgLy8gc2VlIHNlY3Rpb24gMy4xOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICB2YXIgcG9pbnRzID0gcG9pbnRzXztcblxuICAgIC8vaWYgcG9pbnRzIGlzbid0IGFuIGFycmF5LCB1c2UgYXJndW1lbnRzIGFzIHRoZSBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBwb2ludHMubGVuZ3RoOyArK2EpIHtcbiAgICAgICAgICAgIHBvaW50c1thXSA9IGFyZ3VtZW50c1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHRoaXMgaXMgYW4gYXJyYXkgb2YgcG9pbnRzLCBjb252ZXJ0IGl0IHRvIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzXG4gICAgaWYgKHBvaW50c1swXSBpbnN0YW5jZW9mIFBvaW50KVxuICAgIHtcbiAgICAgICAgdmFyIHAgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHAucHVzaChwb2ludHNbaV0ueCwgcG9pbnRzW2ldLnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9pbnRzID0gcDtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB0aGUgcG9pbnRzIG9mIHRoaXMgcG9seWdvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlBPTFk7XG59XG5cblBvbHlnb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9seWdvbjtcbm1vZHVsZS5leHBvcnRzID0gUG9seWdvbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBwb2x5Z29uXG4gKlxuICogQHJldHVybiB7UElYSS5Qb2x5Z29ufSBhIGNvcHkgb2YgdGhlIHBvbHlnb25cbiAqL1xuUG9seWdvbi5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9seWdvbih0aGlzLnBvaW50cy5zbGljZSgpKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIGluc2lkZSA9IGZhbHNlO1xuXG4gICAgLy8gdXNlIHNvbWUgcmF5Y2FzdGluZyB0byB0ZXN0IGhpdHNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svcG9pbnQtaW4tcG9seWdvbi9ibG9iL21hc3Rlci9pbmRleC5qc1xuICAgIHZhciBsZW5ndGggPSB0aGlzLnBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBsZW5ndGggLSAxOyBpIDwgbGVuZ3RoOyBqID0gaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHhpID0gdGhpcy5wb2ludHNbaSAqIDJdLCB5aSA9IHRoaXMucG9pbnRzW2kgKiAyICsgMV0sXG4gICAgICAgICAgICB4aiA9IHRoaXMucG9pbnRzW2ogKiAyXSwgeWogPSB0aGlzLnBvaW50c1tqICogMiArIDFdLFxuICAgICAgICAgICAgaW50ZXJzZWN0ID0gKCh5aSA+IHkpICE9PSAoeWogPiB5KSkgJiYgKHggPCAoeGogLSB4aSkgKiAoeSAtIHlpKSAvICh5aiAtIHlpKSArIHhpKTtcblxuICAgICAgICBpZiAoaW50ZXJzZWN0KVxuICAgICAgICB7XG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc2lkZTtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIHRoZSBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgZGVmaW5lZCBieSBpdHMgcG9zaXRpb24sIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCB3aWR0aCBvZiB0aGlzIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByZWN0YW5nbGVcbiAqL1xuZnVuY3Rpb24gUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJFQ1Q7XG59XG5cblJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZWN0YW5nbGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlY3RhbmdsZTtcblxuLyoqXG4gKiBBIGNvbnN0YW50IGVtcHR5IHJlY3RhbmdsZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuUmVjdGFuZ2xlLkVNUFRZID0gbmV3IFJlY3RhbmdsZSgwLCAwLCAwLCAwKTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgUmVjdGFuZ2xlXG4gKi9cblJlY3RhbmdsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHggPj0gdGhpcy54ICYmIHggPCB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPCB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUm91bmRlZCBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgdGhhdCBoYXMgbmljZSByb3VuZGVkIGNvcm5lcnMsIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0IGFuZCBpdHMgcmFkaXVzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBDb250cm9scyB0aGUgcmFkaXVzIG9mIHRoZSByb3VuZGVkIGNvcm5lcnNcbiAqL1xuZnVuY3Rpb24gUm91bmRlZFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMjBcbiAgICAgKi9cbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCAyMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUlJFQztcbn1cblxuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3VuZGVkUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3VuZGVkUmVjdGFuZ2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHJldHVybiB7UElYSS5Sb3VuZGVkUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJvdW5kZWRSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnJhZGl1cyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDw9IHRoaXMueCArIHRoaXMud2lkdGgpXG4gICAge1xuICAgICAgICBpZiAoeSA+PSB0aGlzLnkgJiYgeSA8PSB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBQYXJ0aWNsZUNvbnRhaW5lciBjbGFzcyBpcyBhIHJlYWxseSBmYXN0IHZlcnNpb24gb2YgdGhlIENvbnRhaW5lciBidWlsdCBzb2xlbHkgZm9yIHNwZWVkLFxuICogc28gdXNlIHdoZW4geW91IG5lZWQgYSBsb3Qgb2Ygc3ByaXRlcyBvciBwYXJ0aWNsZXMuIFRoZSB0cmFkZW9mZiBvZiB0aGUgUGFydGljbGVDb250YWluZXIgaXMgdGhhdCBhZHZhbmNlZFxuICogZnVuY3Rpb25hbGl0eSB3aWxsIG5vdCB3b3JrLiBQYXJ0aWNsZUNvbnRhaW5lciBpbXBsZW1lbnRzIG9ubHkgdGhlIGJhc2ljIG9iamVjdCB0cmFuc2Zvcm0gKHBvc2l0aW9uLCBzY2FsZSwgcm90YXRpb24pLlxuICogQW55IG90aGVyIGZ1bmN0aW9uYWxpdHkgbGlrZSB0aW50aW5nLCBtYXNraW5nLCBldGMgd2lsbCBub3Qgd29yayBvbiBzcHJpdGVzIGluIHRoaXMgYmF0Y2guXG4gKlxuICogSXQncyBleHRyZW1lbHkgZWFzeSB0byB1c2UgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgY29udGFpbmVyID0gbmV3IFBhcnRpY2xlQ29udGFpbmVyKCk7XG4gKlxuICogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSlcbiAqIHtcbiAqICAgICB2YXIgc3ByaXRlID0gbmV3IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcIm15SW1hZ2UucG5nXCIpO1xuICogICAgIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogfVxuICogYGBgXG4gKlxuICogQW5kIGhlcmUgeW91IGhhdmUgYSBodW5kcmVkIHNwcml0ZXMgdGhhdCB3aWxsIGJlIHJlbmRlcmVyIGF0IHRoZSBzcGVlZCBvZiBsaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFttYXhTaXplPTE1MDAwXSB7bnVtYmVyfSBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFydGljbGVzIHRoYXQgY2FuIGJlIHJlbmRlcmVyIGJ5IHRoZSBjb250YWluZXIuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXNdIHtvYmplY3R9IFRoZSBwcm9wZXJ0aWVzIG9mIGNoaWxkcmVuIHRoYXQgc2hvdWxkIGJlIHVwbG9hZGVkIHRvIHRoZSBncHUgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuc2NhbGU9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHNjYWxlIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnBvc2l0aW9uPXRydWVdIHtib29sZWFufSBXaGVuIHRydWUsIHBvc2l0aW9uIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnJvdGF0aW9uPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCByb3RhdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy51dnM9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHV2cyBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5hbHBoYT1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgYWxwaGEgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW2JhdGNoU2l6ZT0xNTAwMF0ge251bWJlcn0gTnVtYmVyIG9mIHBhcnRpY2xlcyBwZXIgYmF0Y2guXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQ29udGFpbmVyKG1heFNpemUsIHByb3BlcnRpZXMsIGJhdGNoU2l6ZSlcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIGJhdGNoU2l6ZSA9IGJhdGNoU2l6ZSB8fCAxNTAwMDsgLy9DT05TVC5TUFJJVEVfQkFUQ0hfU0laRTsgLy8gMjAwMCBpcyBhIG5pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSAvIGRlc2t0b3BcbiAgICBtYXhTaXplID0gbWF4U2l6ZSB8fCAxNTAwMDtcblxuICAgIC8vIE1ha2luZyBzdXJlIHRoZSBiYXRjaCBzaXplIGlzIHZhbGlkXG4gICAgLy8gNjU1MzUgaXMgbWF4IHZlcnRleCBpbmRleCBpbiB0aGUgaW5kZXggYnVmZmVyIChzZWUgUGFydGljbGVSZW5kZXJlcilcbiAgICAvLyBzbyBtYXggbnVtYmVyIG9mIHBhcnRpY2xlcyBpcyA2NTUzNiAvIDQgPSAxNjM4NFxuICAgIHZhciBtYXhCYXRjaFNpemUgPSAxNjM4NDtcbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4QmF0Y2hTaXplKSB7XG4gICAgICAgIGJhdGNoU2l6ZSA9IG1heEJhdGNoU2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4U2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhTaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBwcm9wZXJ0aWVzIHRvIGJlIGR5bmFtaWMgKHRydWUpIC8gc3RhdGljIChmYWxzZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW5bXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4U2l6ZSA9IG1heFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYXRjaFNpemUgPSBiYXRjaFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVDaGlsZHJlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGNhbnZhcyByZW5kZXJlcmluZy4gSWYgdHJ1ZSB0aGVuIHRoZSBlbGVtZW50cyB3aWxsIGJlIHBvc2l0aW9uZWQgYXQgdGhlIG5lYXJlc3QgcGl4ZWwuIFRoaXMgcHJvdmlkZXMgYSBuaWNlIHNwZWVkIGJvb3N0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlO1xuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSB0cnVlO1xuXG4gICAgdGhpcy5zZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xufVxuXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQ29udGFpbmVyO1xuXG4vKipcbiAqIFNldHMgdGhlIHByaXZhdGUgcHJvcGVydGllcyBhcnJheSB0byBkeW5hbWljIC8gc3RhdGljIGJhc2VkIG9uIHRoZSBwYXNzZWQgcHJvcGVydGllcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcHJvcGVydGllcyB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyB0byBiZSB1cGxvYWRlZFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuc2V0UHJvcGVydGllcyA9IGZ1bmN0aW9uKHByb3BlcnRpZXMpXG57XG4gICAgaWYgKCBwcm9wZXJ0aWVzICkge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzBdID0gJ3NjYWxlJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnNjYWxlIDogdGhpcy5fcHJvcGVydGllc1swXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1sxXSA9ICdwb3NpdGlvbicgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5wb3NpdGlvbiA6IHRoaXMuX3Byb3BlcnRpZXNbMV07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMl0gPSAncm90YXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucm90YXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzJdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzNdID0gJ3V2cycgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy51dnMgOiB0aGlzLl9wcm9wZXJ0aWVzWzNdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzRdID0gJ2FscGhhJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLmFscGhhIDogdGhpcy5fcHJvcGVydGllc1s0XTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgLy8gVE9ETyBkb24ndCBuZWVkIHRvIVxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIC8vICBQSVhJLkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtLmNhbGwoIHRoaXMgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGFpbmVyIHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgd2ViZ2wgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlciggcmVuZGVyZXIucGx1Z2lucy5wYXJ0aWNsZSApO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUucmVuZGVyKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgZmxhZyB0aGF0IHN0YXRpYyBkYXRhIHNob3VsZCBiZSB1cGRhdGVkIHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUub25DaGlsZHJlbkNoYW5nZSA9IGZ1bmN0aW9uIChzbWFsbGVzdENoaWxkSW5kZXgpXG57XG4gICAgdmFyIGJ1ZmZlckluZGV4ID0gTWF0aC5mbG9vcihzbWFsbGVzdENoaWxkSW5kZXggLyB0aGlzLl9iYXRjaFNpemUpO1xuICAgIGlmIChidWZmZXJJbmRleCA8IHRoaXMuX2J1ZmZlclRvVXBkYXRlKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gYnVmZmVySW5kZXg7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIGNhbnZhcyByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGlzUm90YXRlZCA9IHRydWU7XG5cbiAgICB2YXIgcG9zaXRpb25YID0gMDtcbiAgICB2YXIgcG9zaXRpb25ZID0gMDtcblxuICAgIHZhciBmaW5hbFdpZHRoID0gMDtcbiAgICB2YXIgZmluYWxIZWlnaHQgPSAwO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICBpZiAoIWNoaWxkLnZpc2libGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZyYW1lID0gY2hpbGQudGV4dHVyZS5mcmFtZTtcblxuICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhICogY2hpbGQuYWxwaGE7XG5cbiAgICAgICAgaWYgKGNoaWxkLnJvdGF0aW9uICUgKE1hdGguUEkgKiAyKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgZmFzdGVzdCAgd2F5IHRvIG9wdGltaXNlISAtIGlmIHJvdGF0aW9uIGlzIDAgdGhlbiB3ZSBjYW4gYXZvaWQgYW55IGtpbmQgb2Ygc2V0VHJhbnNmb3JtIGNhbGxcbiAgICAgICAgICAgIGlmIChpc1JvdGF0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoICogY2hpbGQuc2NhbGUueCkgKyBjaGlsZC5wb3NpdGlvbi54ICArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0ICogY2hpbGQuc2NhbGUueSkgKyBjaGlsZC5wb3NpdGlvbi55ICArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLng7XG4gICAgICAgICAgICBmaW5hbEhlaWdodCA9IGZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnk7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzUm90YXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoaWxkLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICAgICAgdmFyIGNoaWxkVHJhbnNmb3JtID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHggfCAwLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eSB8IDBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvblggPSAoKGNoaWxkLmFuY2hvci54KSAqICgtZnJhbWUud2lkdGgpICsgMC41KTtcbiAgICAgICAgICAgIHBvc2l0aW9uWSA9ICgoY2hpbGQuYW5jaG9yLnkpICogKC1mcmFtZS5oZWlnaHQpICsgMC41KTtcblxuICAgICAgICAgICAgZmluYWxXaWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgIGNoaWxkLnRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgZnJhbWUueCxcbiAgICAgICAgICAgIGZyYW1lLnksXG4gICAgICAgICAgICBmcmFtZS53aWR0aCxcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCxcbiAgICAgICAgICAgIHBvc2l0aW9uWCxcbiAgICAgICAgICAgIHBvc2l0aW9uWSxcbiAgICAgICAgICAgIGZpbmFsV2lkdGgsXG4gICAgICAgICAgICBmaW5hbEhlaWdodFxuICAgICAgICApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUNoaWxkcmVuPWZhbHNlXSB7Ym9vbGVhbn0gaWYgc2V0IHRvIHRydWUsIGFsbCB0aGUgY2hpbGRyZW4gd2lsbCBoYXZlIHRoZWlyIGRlc3Ryb3kgbWV0aG9kIGNhbGxlZCBhcyB3ZWxsXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgaWYgKHRoaXMuX2J1ZmZlcnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLl9idWZmZXJzW2ldLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xufTtcbiIsIlxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZUJ1ZmZlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvUGFydGljbGVCdWZmZXIuamF2YVxuICovXG5cbi8qKlxuICogVGhlIHBhcnRpY2xlIGJ1ZmZlciBtYW5hZ2VzIHRoZSBzdGF0aWMgYW5kIGR5bmFtaWMgYnVmZmVycyBmb3IgYSBwYXJ0aWNsZSBjb250YWluZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gUGFydGljbGVCdWZmZXIoZ2wsIHByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBzaXplKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRTaXplID0gMjtcblxuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYSBzaW5nbGUgdmVydGV4IGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGUgYnVmZmVyIGNhbiBob2xkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gc2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBkeW5hbWljLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIHN0YXRpYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcblxuICAgICAgICBpZihkeW5hbWljUHJvcGVydHlGbGFnc1tpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5keW5hbWljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuZHluYW1pY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW5pdEJ1ZmZlcnMoKTtcblxufVxuXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZUJ1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVCdWZmZXI7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmluaXRCdWZmZXJzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpO1xuICAgIHZhciBwcm9wZXJ0eTtcblxuICAgIHZhciBkeW5hbWljT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG5cbiAgICAgICAgcHJvcGVydHkub2Zmc2V0ID0gZHluYW1pY09mZnNldDtcbiAgICAgICAgZHluYW1pY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLmR5bmFtaWNTdHJpZGUgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5keW5hbWljU3RyaWRlICogNCk7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcblxuXG4gICAgLy8gc3RhdGljIC8vXG4gICAgdmFyIHN0YXRpY09mZnNldCA9IDA7XG4gICAgdGhpcy5zdGF0aWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IHN0YXRpY09mZnNldDtcbiAgICAgICAgc3RhdGljT2Zmc2V0ICs9IHByb3BlcnR5LnNpemU7XG4gICAgICAgIHRoaXMuc3RhdGljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5zdGF0aWNTdHJpZGUgKiA0KTtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNEYXRhLCBnbC5EWU5BTUlDX0RSQVcpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBkeW5hbWljIHByb3BlcnRpZXMuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUudXBsb2FkRHluYW1pYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIHByb3BlcnR5LnVwbG9hZEZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIHRoaXMuZHluYW1pY0RhdGEsIHRoaXMuZHluYW1pY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy5keW5hbWljRGF0YSk7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHN0YXRpYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZFN0YXRpYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLnN0YXRpY0RhdGEsIHRoaXMuc3RhdGljU3RyaWRlLCBwcm9wZXJ0eS5vZmZzZXQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuc3RhdGljRGF0YSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIHRvIHRoZSBHUFVcbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpLCBwcm9wZXJ0eTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuc3RhdGljU3RyaWRlICogNCwgcHJvcGVydHkub2Zmc2V0ICogNCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVCdWZmZXIuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLnN0YXRpY0J1ZmZlcik7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgUGFydGljbGVTaGFkZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlU2hhZGVyJyksXG4gICAgUGFydGljbGVCdWZmZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlQnVmZmVyJyksXG4gICAgbWF0aCAgICAgICAgICAgID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFBhcnRpY2xlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICAvLyBhbmQgbWF4IG51bWJlciBvZiBlbGVtZW50IGluIHRoZSBpbmRleCBidWZmZXIgaXMgMTYzODQgKiA2ID0gOTgzMDRcbiAgICAvLyBDcmVhdGluZyBhIGZ1bGwgaW5kZXggYnVmZmVyLCBvdmVyaGVhZCBpcyA5ODMwNCAqIDIgPSAxOTZLb1xuICAgIHZhciBudW1JbmRpY2VzID0gOTgzMDQ7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KG51bUluZGljZXMpO1xuXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCBudW1JbmRpY2VzOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gbnVsbDtcblxuICAgIHRoaXMudGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xufVxuXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbigncGFydGljbGUnLCBQYXJ0aWNsZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBXaGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gbmV3IFBhcnRpY2xlU2hhZGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlcik7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggaW5kZXgsIHNvIDY1NTM1IC8gNiA9IDEwOTIyLlxuXG4gICAgLy91cGxvYWQgdGhlIGluZGV4IGRhdGFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IFtcbiAgICAgICAgLy8gdmVydGljZXNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbixcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkVmVydGljZXMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBwb3NpdGlvbkRhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFBvc2l0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcm90YXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFSb3RhdGlvbixcbiAgICAgICAgICAgIHNpemU6MSxcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkUm90YXRpb24sXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyB1dnNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFV2cyxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIGFscGhhRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZEFscGhhLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfVxuICAgIF07XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBwYXJ0aWNsZSBiYXRjaC5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gYmluZCB0aGUgbWFpbiB0ZXh0dXJlXG4gICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAvLyBiaW5kIHRoZSBidWZmZXJzXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnNoYWRlcjtcblxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBwYXJ0aWNsZSBjb250YWluZXIgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBjaGlsZHJlbiA9IGNvbnRhaW5lci5jaGlsZHJlbixcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aCxcbiAgICAgICAgbWF4U2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemU7XG5cbiAgICBpZih0b3RhbENoaWxkcmVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIGlmKHRvdGFsQ2hpbGRyZW4gPiBtYXhTaXplKVxuICAgIHtcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IG1heFNpemU7XG4gICAgfVxuXG4gICAgaWYoIWNvbnRhaW5lci5fYnVmZmVycylcbiAgICB7XG4gICAgICAgIGNvbnRhaW5lci5fYnVmZmVycyA9IHRoaXMuZ2VuZXJhdGVCdWZmZXJzKCBjb250YWluZXIgKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXZzIGhhdmUgbm90IHVwZGF0ZWQgdGhlbiBubyBwb2ludCByZW5kZXJpbmcganVzdCB5ZXQhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb250YWluZXIuYmxlbmRNb2RlKTtcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgbSA9ICBjb250YWluZXIud29ybGRUcmFuc2Zvcm0uY29weSggdGhpcy50ZW1wTWF0cml4ICk7XG4gICAgbS5wcmVwZW5kKCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeCApO1xuICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5zaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCBtLnRvQXJyYXkodHJ1ZSkpO1xuICAgIGdsLnVuaWZvcm0xZih0aGlzLnNoYWRlci51bmlmb3Jtcy51QWxwaGEuX2xvY2F0aW9uLCBjb250YWluZXIud29ybGRBbHBoYSk7XG5cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgdGV4dHVyZSBpcyBib3VuZC4uXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gY2hpbGRyZW5bMF0uX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSB0ZXh0dXJlIGhhcyBub3QgdXBkYXRlZCB0aGVuIGxldHMgbm90IHVwbG9hZCBhbnkgc3RhdGljIHByb3BlcnRpZXNcbiAgICAgICAgaWYoIXRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZShiYXNlVGV4dHVyZSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFjb250YWluZXIuX3Byb3BlcnRpZXNbMF0gfHwgIWNvbnRhaW5lci5fcHJvcGVydGllc1szXSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICB9XG5cbiAgICAvLyBub3cgbGV0cyB1cGxvYWQgYW5kIHJlbmRlciB0aGUgYnVmZmVycy4uXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgdG90YWxDaGlsZHJlbjsgaSArPSBiYXRjaFNpemUsIGogKz0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhbW91bnQgPSAoIHRvdGFsQ2hpbGRyZW4gLSBpKTtcbiAgICAgICAgaWYoYW1vdW50ID4gYmF0Y2hTaXplKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbW91bnQgPSBiYXRjaFNpemU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYnVmZmVyID0gY29udGFpbmVyLl9idWZmZXJzW2pdO1xuXG4gICAgICAgIC8vIHdlIGFsd2F5cyB1cGxvYWQgdGhlIGR5bmFtaWNcbiAgICAgICAgYnVmZmVyLnVwbG9hZER5bmFtaWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG5cbiAgICAgICAgLy8gd2Ugb25seSB1cGxvYWQgdGhlIHN0YXRpYyBjb250ZW50IHdoZW4gd2UgaGF2ZSB0byFcbiAgICAgICAgaWYoY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9PT0gailcbiAgICAgICAge1xuICAgICAgICAgICAgYnVmZmVyLnVwbG9hZFN0YXRpYyhjaGlsZHJlbiwgaSwgYW1vdW50KTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSBqICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJpbmQgdGhlIGJ1ZmZlclxuICAgICAgICBidWZmZXIuYmluZCggdGhpcy5zaGFkZXIgKTtcblxuICAgICAgICAgLy8gbm93IGRyYXcgdGhvc2Ugc3Vja2FzIVxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBhbW91bnQgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIG9uZSBwYXJ0aWNsZSBidWZmZXIgZm9yIGVhY2ggY2hpbGQgaW4gdGhlIGNvbnRhaW5lciB3ZSB3YW50IHRvIHJlbmRlciBhbmQgdXBkYXRlcyBpbnRlcm5hbCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7UElYSS5QYXJ0aWNsZUNvbnRhaW5lcn0gVGhlIGNvbnRhaW5lciB0byByZW5kZXIgdXNpbmcgdGhpcyBQYXJ0aWNsZVJlbmRlcmVyXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmdlbmVyYXRlQnVmZmVycyA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgYnVmZmVycyA9IFtdLFxuICAgICAgICBzaXplID0gY29udGFpbmVyLl9tYXhTaXplLFxuICAgICAgICBiYXRjaFNpemUgPSBjb250YWluZXIuX2JhdGNoU2l6ZSxcbiAgICAgICAgZHluYW1pY1Byb3BlcnR5RmxhZ3MgPSBjb250YWluZXIuX3Byb3BlcnRpZXMsXG4gICAgICAgIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBiYXRjaFNpemUpXG4gICAge1xuICAgICAgICBidWZmZXJzLnB1c2gobmV3IFBhcnRpY2xlQnVmZmVyKGdsLCB0aGlzLnByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBiYXRjaFNpemUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVycztcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgdmVydGljaWVzLlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciB2ZXJ0aWNlcyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkVmVydGljZXMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIHZhciBzcHJpdGUsXG4gICAgICAgIHRleHR1cmUsXG4gICAgICAgIHRyaW0sXG4gICAgICAgIHN4LFxuICAgICAgICBzeSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKSB7XG5cbiAgICAgICAgc3ByaXRlID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldO1xuICAgICAgICB0ZXh0dXJlID0gc3ByaXRlLl90ZXh0dXJlO1xuICAgICAgICBzeCA9IHNwcml0ZS5zY2FsZS54O1xuICAgICAgICBzeSA9IHNwcml0ZS5zY2FsZS55O1xuXG4gICAgICAgIGlmICh0ZXh0dXJlLnRyaW0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZCB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG5cbiAgICAgICAgICAgIHcxID0gdHJpbS54IC0gc3ByaXRlLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGgxID0gdHJpbS55IC0gc3ByaXRlLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICBoMCA9IGgxICsgdGV4dHVyZS5jcm9wLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS1zcHJpdGUuYW5jaG9yLngpO1xuICAgICAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC1zcHJpdGUuYW5jaG9yLng7XG5cbiAgICAgICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtc3ByaXRlLmFuY2hvci55KTtcbiAgICAgICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXNwcml0ZS5hbmNob3IueTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gaDEgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IGgwICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHBvc2l0aW9ucyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUG9zaXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVQb3NpdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5wb3NpdGlvbjtcblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciByb3RhdGlvbiB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUm90YXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVSb3RhdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5yb3RhdGlvbjtcblxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVJvdGF0aW9uO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBVdnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFV2cyA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmVVdnMgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uX3RleHR1cmUuX3V2cztcblxuICAgICAgICBpZiAodGV4dHVyZVV2cylcbiAgICAgICAge1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHRleHR1cmVVdnMueDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IHRleHR1cmVVdnMueTA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB0ZXh0dXJlVXZzLngxO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSB0ZXh0dXJlVXZzLnkxO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHRleHR1cmVVdnMueDI7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSB0ZXh0dXJlVXZzLnkyO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHRleHR1cmVVdnMueDM7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSB0ZXh0dXJlVXZzLnkzO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyB5b3Uga25vdyB0aGlzIGNhbiBiZSBlYXNpZXIhXG4gICAgICAgICAgICBhcnJheVtvZmZzZXRdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIGFscGhhIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRBbHBoYSA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICAge1xuICAgICAgICB2YXIgc3ByaXRlQWxwaGEgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uYWxwaGE7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlQWxwaGE7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBQYXJ0aWNsZVJlbmRlcmVyLlxuICpcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIuZ2wpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5nbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgfVxuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG4gICAgdGhpcy50ZW1wTWF0cml4ID0gbnVsbDtcbn07XG4iLCJ2YXIgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1RleHR1cmVTaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVNoYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFRleHR1cmVTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVBvc2l0aW9uQ29vcmQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhU2NhbGU7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgZmxvYXQgYVJvdGF0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgdmVjMiB2ID0gYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICcgICB2LnggPSAoYVZlcnRleFBvc2l0aW9uLngpICogY29zKGFSb3RhdGlvbikgLSAoYVZlcnRleFBvc2l0aW9uLnkpICogc2luKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2LnkgPSAoYVZlcnRleFBvc2l0aW9uLngpICogc2luKGFSb3RhdGlvbikgKyAoYVZlcnRleFBvc2l0aW9uLnkpICogY29zKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2ID0gdiArIGFQb3NpdGlvbkNvb3JkOycsXG5cbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKHYsIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gaGVsbG9cbiAgICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IHVBbHBoYTsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciAqIHVBbHBoYTsnLFxuICAgICAgICAgICAgJyAgaWYgKGNvbG9yLmEgPT0gMC4wKSBkaXNjYXJkOycsXG4gICAgICAgICAgICAnICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB1QWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVBvc2l0aW9uQ29vcmQ6IDAsXG4gICAgICAgICAgIC8vIGFTY2FsZTogICAgICAgICAwLFxuICAgICAgICAgICAgYVJvdGF0aW9uOiAgICAgIDBcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBURU1QIEhBQ0tcblxufVxuXG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmVTaGFkZXIucHJvdG90eXBlKTtcblBhcnRpY2xlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlU2hhZGVyO1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogVGhlIENhbnZhc1JlbmRlcmVyIGRyYXdzIHRoZSBzY2VuZSBhbmQgYWxsIGl0cyBjb250ZW50IG9udG8gYSAyZCBjYW52YXMuIFRoaXMgcmVuZGVyZXIgc2hvdWxkIGJlIHVzZWQgZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgd2ViR0wuXG4gKiBEb24ndCBmb3JnZXQgdG8gYWRkIHRoZSBDYW52YXNSZW5kZXJlci52aWV3IHRvIHlvdXIgRE9NIG9yIHlvdSB3aWxsIG5vdCBzZWUgYW55dGhpbmcgOilcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc3lzdGVtIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSBzeXN0ZW0gdGhpcyByZW5kZXJlciBpcyBmb3IuXG4gKiBAcGFyYW0gW3dpZHRoPTgwMF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9NjAwXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBdIHtudW1iZXJ9IFRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSByZW5kZXJlZCBhcmVhIChzaG93biBpZiBub3QgdHJhbnNwYXJlbnQpLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFN5c3RlbVJlbmRlcmVyKHN5c3RlbSwgd2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHV0aWxzLnNheUhlbGxvKHN5c3RlbSk7XG5cbiAgICAvLyBwcmVwYXJlIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zW2ldID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zW2ldID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OU1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBvcHRpb25zID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5SRU5ERVJFUl9UWVBFLlVOS05PV05cbiAgICAgKiBAc2VlIFBJWEkuUkVOREVSRVJfVFlQRVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuVU5LTk9XTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA4MDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgODAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA2MDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHRvXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLnZpZXcgPSBvcHRpb25zLnZpZXcgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gb3B0aW9ucy5yZXNvbHV0aW9uO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy50cmFuc3BhcmVudCA9IG9wdGlvbnMudHJhbnNwYXJlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByZW5kZXIgdmlldyBzaG91bGQgYmUgcmVzaXplZCBhdXRvbWF0aWNhbGx5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IG9wdGlvbnMuYXV0b1Jlc2l6ZSB8fCBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrcyB0aGUgYmxlbmQgbW9kZXMgdXNlZnVsIGZvciB0aGlzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbWl4ZWQ+fVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIHByZXNlcnZlRHJhd2luZ0J1ZmZlciBmbGFnIGFmZmVjdHMgd2hldGhlciBvciBub3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyByZXRhaW5lZCBhZnRlciByZW5kZXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvciBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gICAgICogSWYgdGhlIHNjZW5lIGlzIE5PVCB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGEgY2FudmFzIHNpemVkIGZpbGxSZWN0IG9wZXJhdGlvbiBldmVyeSBmcmFtZSB0byBzZXQgdGhlIGNhbnZhcyBiYWNrZ3JvdW5kIGNvbG9yLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGNsZWFyUmVjdCB0byBjbGVhciB0aGUgY2FudmFzIGV2ZXJ5IGZyYW1lLlxuICAgICAqIERpc2FibGUgdGhpcyBieSBzZXR0aW5nIHRoaXMgdG8gZmFsc2UuIEZvciBleGFtcGxlIGlmIHlvdXIgZ2FtZSBoYXMgYSBjYW52YXMgZmlsbGluZyBiYWNrZ3JvdW5kIGltYWdlIHlvdSBvZnRlbiBkb24ndCBuZWVkIHRoaXMgc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdFxuICAgICAqL1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyO1xuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gICAgICogSGFuZHkgZm9yIGNyaXNwIHBpeGVsIGFydCBhbmQgc3BlZWQgb24gbGVnYWN5IGRldmljZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSBvcHRpb25zLnJvdW5kUGl4ZWxzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSAweDAwMDAwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGFuIFtSLCBHLCBCXSBhcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gJyMwMDAwMDAnO1xuXG4gICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBvcHRpb25zLmJhY2tncm91bmRDb2xvciB8fCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3I7IC8vIHJ1biBiZyBjb2xvciBzZXR0ZXJcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB0cmFuc2Zvcm06e3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpfSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCByb290IG9iamVjdCB0aGF0IHRoZSByZW5kZXJlciB0cmllZCB0byByZW5kZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbn1cblxuLy8gY29uc3RydWN0b3JcblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeXN0ZW1SZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3lzdGVtUmVuZGVyZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZpbGwgaWYgbm90IHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3lzdGVtUmVuZGVyZXIjXG4gICAgICovXG4gICAgYmFja2dyb3VuZENvbG9yOlxuICAgIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9IHV0aWxzLmhleDJzdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHV0aWxzLmhleDJyZ2IodmFsLCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB2aWV3IHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy52aWV3LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0aGlzLnZpZXcuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5hdXRvUmVzaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgYW5kIG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgQ2FudmFzIERPTSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldykge1xuICAgIGlmIChyZW1vdmVWaWV3ICYmIHRoaXMudmlldy5wYXJlbnROb2RlKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy52aWV3KTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICB0aGlzLnZpZXcgPSBudWxsO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMDtcblxuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gbnVsbDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSBudWxsO1xufTtcbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgQ2FudmFzTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ0NhbnZhcycsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5DQU5WQVM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy52aWV3LmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogdGhpcy50cmFuc3BhcmVudCB9KTtcblxuICAgIC8qKlxuICAgICAqIEJvb2xlYW4gZmxhZyBjb250cm9sbGluZyBjYW52YXMgcmVmcmVzaC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIGEgQ2FudmFzTWFza01hbmFnZXIsIGhhbmRsZXMgbWFza2luZyB3aGVuIHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc01hc2tNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBuZXcgQ2FudmFzTWFza01hbmFnZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgcHJvcGVydHkgdXNlZCB0byBzZXQgdGhlIGNhbnZhcyBzbW9vdGhpbmcgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdpbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnd2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21vekltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnb0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21zSW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIHRoaXMuX21hcEJsZW5kTW9kZXMoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge1xuICAgICAgICB3b3JsZFRyYW5zZm9ybTogbmV3IG1hdGguTWF0cml4KCksXG4gICAgICAgIHdvcmxkQWxwaGE6IDFcbiAgICB9O1xuXG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihDYW52YXNSZW5kZXJlcik7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIHRoaXMgY2FudmFzIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IG9iamVjdC5wYXJlbnQ7XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBvYmplY3Q7XG5cbiAgICBvYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgb2JqZWN0LnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIHRoaXMuY29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF07XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMgJiYgdGhpcy52aWV3LnNjcmVlbmNhbnZhcylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGVhckJlZm9yZVJlbmRlcilcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy53aWR0aCAsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChvYmplY3QsIHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGlzLmVtaXQoJ3Bvc3RyZW5kZXInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpXG57XG4gICAgdGhpcy5kZXN0cm95UGx1Z2lucygpO1xuXG4gICAgLy8gY2FsbCB0aGUgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLnJlZnJlc2ggPSB0cnVlO1xuXG4gICAgdGhpcy5tYXNrTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG5cbiAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KVxue1xuICAgIHZhciB0ZW1wQ29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJDYW52YXModGhpcyk7XG4gICAgdGhpcy5jb250ZXh0ID0gdGVtcENvbnRleHQ7XG59O1xuXG4vKipcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXIjcmVzaXplXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAodywgaClcbntcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcywgdywgaCk7XG5cbiAgICAvL3Jlc2V0IHRoZSBzY2FsZSBtb2RlLi4gb2RkbHkgdGhpcyBzZWVtcyB0byBiZSByZXNldCB3aGVuIHRoZSBjYW52YXMgaXMgcmVzaXplZC5cbiAgICAvL3N1cmVseSBhIGJyb3dzZXIgYnVnPz8gTGV0IHBpeGkgZml4IHRoYXQgZm9yIHlvdS4uXG4gICAgaWYodGhpcy5zbW9vdGhQcm9wZXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dFt0aGlzLnNtb290aFByb3BlcnR5XSA9IChDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBNYXBzIFBpeGkgYmxlbmQgbW9kZXMgdG8gY2FudmFzIGJsZW5kIG1vZGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fbWFwQmxlbmRNb2RlcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmJsZW5kTW9kZXMpXG4gICAge1xuICAgICAgICB0aGlzLmJsZW5kTW9kZXMgPSB7fTtcblxuICAgICAgICBpZiAodXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdtdWx0aXBseSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc2NyZWVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdvdmVybGF5JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdkYXJrZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ2xpZ2h0ZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ2NvbG9yLWRvZGdlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdjb2xvci1idXJuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IQVJEX0xJR0hUXSAgICA9ICdoYXJkLWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb2Z0LWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdkaWZmZXJlbmNlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5FWENMVVNJT05dICAgICA9ICdleGNsdXNpb24nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ2h1ZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc2F0dXJhdGUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ2NvbG9yJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdsdW1pbm9zaXR5JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb29sIG5ldyBibGVuZCBtb2RlcyBpbiBjYW52YXMgJ2NvdWdoJyBpZSAnY291Z2gnXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TQVRVUkFUSU9OXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBjYW52YXNcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKi9cbmZ1bmN0aW9uIENhbnZhc0J1ZmZlcih3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBDYW52YXMgb2JqZWN0IHRoYXQgYmVsb25ncyB0byB0aGlzIENhbnZhc0J1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBBIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHdvLWRpbWVuc2lvbmFsIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn1cblxuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc0J1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzQnVmZmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYW52YXNCdWZmZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB2YWw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyBidWZmZXIgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNhbnZhc0J1ZmZlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENsZWFycyB0aGUgY2FudmFzIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIENhbnZhc0J1ZmZlciBjbGFzcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgY2FudmFzIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBjYW52YXMuXG4gKlxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlciB0byBkcmF3IHRoZSBwcmltaXRpdmUgZ3JhcGhpY3MgZGF0YS5cbiAqIEBzdGF0aWNcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xudmFyIENhbnZhc0dyYXBoaWNzID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0dyYXBoaWNzO1xuXG4vKlxuICogUmVuZGVycyBhIEdyYXBoaWNzIG9iamVjdCB0byBhIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBhY3R1YWwgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIDJkIGRyYXdpbmcgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIHdvcmxkQWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljc1RpbnQoZ3JhcGhpY3MpO1xuICAgICAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuX2ZpbGxUaW50O1xuICAgICAgICB2YXIgbGluZUNvbG9yID0gZGF0YS5fbGluZVRpbnQ7XG5cbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRPRE8gLSBuZWVkIHRvIGJlIFVuZGVmaW5lZCFcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsMCwyKk1hdGguUEkpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcblxuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJ4ID0gc2hhcGUueDtcbiAgICAgICAgICAgIHZhciByeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBzaGFwZS53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgcmFkaXVzID0gc2hhcGUucmFkaXVzO1xuXG4gICAgICAgICAgICB2YXIgbWF4UmFkaXVzID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyIHwgMDtcbiAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1cyA+IG1heFJhZGl1cyA/IG1heFJhZGl1cyA6IHJhZGl1cztcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGxDb2xvciB8fCBkYXRhLmZpbGxDb2xvciA9PT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3MgbWFza1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBtYXNrXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY29udGV4dCAyZCBtZXRob2Qgb2YgdGhlIGNhbnZhc1xuICovXG5DYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIGxlbiA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG5cbiAgICBpZiAobGVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludCBhcmUgdGhlIHNhbWUgY2xvc2UgdGhlIHBhdGggLSBtdWNoIG5lYXRlciA6KVxuICAgICAgICAgICAgaWYgKHBvaW50c1swXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gJiYgcG9pbnRzWzFdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5yZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuXG4gICAgICAgICAgICAvLyBlbGxpcHNlIGNvZGUgdGFrZW4gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG5cbiAgICAgICAgICAgIHZhciB3ID0gc2hhcGUud2lkdGggKiAyO1xuICAgICAgICAgICAgdmFyIGggPSBzaGFwZS5oZWlnaHQgKiAyO1xuXG4gICAgICAgICAgICB2YXIgeCA9IHNoYXBlLnggLSB3LzI7XG4gICAgICAgICAgICB2YXIgeSA9IHNoYXBlLnkgLSBoLzI7XG5cbiAgICAgICAgICAgIHZhciBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICAgICAgICAgICAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgIHhlID0geCArIHcsICAgICAgICAgICAvLyB4LWVuZFxuICAgICAgICAgICAgICAgIHllID0geSArIGgsICAgICAgICAgICAvLyB5LWVuZFxuICAgICAgICAgICAgICAgIHhtID0geCArIHcgLyAyLCAgICAgICAvLyB4LW1pZGRsZVxuICAgICAgICAgICAgICAgIHltID0geSArIGggLyAyOyAgICAgICAvLyB5LW1pZGRsZVxuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhlLCB5bSArIG95LCB4bSArIG94LCB5ZSwgeG0sIHllKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdGludCBvZiBhIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB0aGF0IHdpbGwgaGF2ZSBpdHMgdGludCB1cGRhdGVkXG4gKlxuICovXG5DYW52YXNHcmFwaGljcy51cGRhdGVHcmFwaGljc1RpbnQgPSBmdW5jdGlvbiAoZ3JhcGhpY3MpXG57XG4gICAgaWYgKGdyYXBoaWNzLnRpbnQgPT09IDB4RkZGRkZGICYmIGdyYXBoaWNzLl9wcmV2VGludCA9PT0gZ3JhcGhpY3MudGludClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGhpY3MuX3ByZXZUaW50ID0gZ3JhcGhpY3MudGludDtcblxuICAgIHZhciB0aW50UiA9IChncmFwaGljcy50aW50ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIHRpbnRHID0gKGdyYXBoaWNzLnRpbnQgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50QiA9IChncmFwaGljcy50aW50ICYgMHhGRikvIDI1NTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuZmlsbENvbG9yIHwgMDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEubGluZUNvbG9yIHwgMDtcblxuICAgICAgICAvKlxuICAgICAgICB2YXIgY29sb3JSID0gKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JHID0gKGZpbGxDb2xvciA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIHZhciBjb2xvckIgPSAoZmlsbENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBmaWxsQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcblxuICAgICAgICBjb2xvclIgPSAobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIGNvbG9yRyA9IChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckIgPSAobGluZUNvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBsaW5lQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcbiAgICAgICAgKi9cblxuICAgICAgICAvLyBzdXBlciBpbmxpbmUgY29zIGltIGFuIG9wdGltaXphdGlvbiBOQVpJIDopXG4gICAgICAgIGRhdGEuX2ZpbGxUaW50ID0gKCgoZmlsbENvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChmaWxsQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG4gICAgICAgIGRhdGEuX2xpbmVUaW50ID0gKCgobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChsaW5lQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG5cbiAgICB9XG59O1xuXG4iLCJ2YXIgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuL0NhbnZhc0dyYXBoaWNzJyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgdG8gaGFuZGxlIG1hc2tpbmcuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDYW52YXNNYXNrTWFuYWdlcigpXG57fVxuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzTWFza01hbmFnZXI7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgYWRkcyBpdCB0byB0aGUgY3VycmVudCBzdGFjayBvZiBtYXNrcy5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge29iamVjdH0gdGhlIG1hc2tEYXRhIHRoYXQgd2lsbCBiZSBwdXNoZWRcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhLCByZW5kZXJlcilcbntcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2F2ZSgpO1xuXG4gICAgdmFyIGNhY2hlQWxwaGEgPSBtYXNrRGF0YS5hbHBoYTtcbiAgICB2YXIgdHJhbnNmb3JtID0gbWFza0RhdGEud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICAvL1RPRE8gc3Vwb3J0IHNwcml0ZSBhbHBoYSBtYXNrcz8/XG4gICAgLy9sb3RzIG9mIGVmZm9ydCByZXF1aXJlZC4gSWYgZGVtYW5kIGlzIGdyZWF0IGVub3VnaC4uXG4gICAgaWYoIW1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sobWFza0RhdGEsIHJlbmRlcmVyLmNvbnRleHQpO1xuICAgICAgICByZW5kZXJlci5jb250ZXh0LmNsaXAoKTtcbiAgICB9XG5cbiAgICBtYXNrRGF0YS53b3JsZEFscGhhID0gY2FjaGVBbHBoYTtcbn07XG5cbi8qKlxuICogUmVzdG9yZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlIHRoZSBtYXNrIHdhcyBhcHBsaWVkLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIFNwcml0ZS9UZXh0dXJlIHRpbnRpbmcuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNUaW50ZXIgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzVGludGVyO1xuXG4vKipcbiAqIEJhc2ljYWxseSB0aGlzIG1ldGhvZCBqdXN0IG5lZWRzIGEgc3ByaXRlIGFuZCBhIGNvbG9yIGFuZCB0aW50cyB0aGUgc3ByaXRlIHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIHRpbnRlZCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUgPSBmdW5jdGlvbiAoc3ByaXRlLCBjb2xvcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHNwcml0ZS50ZXh0dXJlO1xuXG4gICAgY29sb3IgPSBDYW52YXNUaW50ZXIucm91bmRDb2xvcihjb2xvcik7XG5cbiAgICB2YXIgc3RyaW5nQ29sb3IgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG5cbiAgICB0ZXh0dXJlLnRpbnRDYWNoZSA9IHRleHR1cmUudGludENhY2hlIHx8IHt9O1xuXG4gICAgaWYgKHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl07XG4gICAgfVxuXG4gICAgIC8vIGNsb25lIHRleHR1cmUuLlxuICAgIHZhciBjYW52YXMgPSBDYW52YXNUaW50ZXIuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLy9DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCh0ZXh0dXJlLCBzdHJpbmdDb2xvciwgY2FudmFzKTtcbiAgICBDYW52YXNUaW50ZXIudGludE1ldGhvZCh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKTtcblxuICAgIGlmIChDYW52YXNUaW50ZXIuY29udmVydFRpbnRUb0ltYWdlKVxuICAgIHtcbiAgICAgICAgLy8gaXMgdGhpcyBiZXR0ZXI/XG4gICAgICAgIHZhciB0aW50SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgdGludEltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcblxuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSB0aW50SW1hZ2U7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSA9IGNhbnZhcztcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCBjb252ZXJ0aW5nIHRoZSB0ZXh0dXJlIHRvIGFuIGltYWdlIHRoZW4gd2UgbmVlZCB0byBsb3NlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhc1xuICAgICAgICBDYW52YXNUaW50ZXIuY2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ211bHRpcGx5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgPSBmdW5jdGlvbiAodGV4dHVyZSwgY29sb3IsIGNhbnZhcylcbntcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgIHZhciBjcm9wID0gdGV4dHVyZS5jcm9wLmNsb25lKCk7XG4gICAgY3JvcC54ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC55ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC53aWR0aCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AuaGVpZ2h0ICo9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXMud2lkdGggPSBjcm9wLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wLmhlaWdodDtcblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tYXRvcCc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ292ZXJsYXknIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhPdmVybGF5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgY3JvcC54LFxuICAgICAgICBjcm9wLnksXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodFxuICAgICk7XG5cbiAgICAvLyBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5Jztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgcGl4ZWwgcGVyIHBpeGVsLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuICAgIHZhciByID0gcmdiVmFsdWVzWzBdLCBnID0gcmdiVmFsdWVzWzFdLCBiID0gcmdiVmFsdWVzWzJdO1xuXG4gICAgdmFyIHBpeGVsRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIHZhciBwaXhlbHMgPSBwaXhlbERhdGEuZGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGl4ZWxzLmxlbmd0aDsgaSArPSA0KVxuICAgIHtcbiAgICAgICAgcGl4ZWxzW2krMF0gKj0gcjtcbiAgICAgICAgcGl4ZWxzW2krMV0gKj0gZztcbiAgICAgICAgcGl4ZWxzW2krMl0gKj0gYjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnB1dEltYWdlRGF0YShwaXhlbERhdGEsIDAsIDApO1xufTtcblxuLyoqXG4gKiBSb3VuZHMgdGhlIHNwZWNpZmllZCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gcm91bmQsIHNob3VsZCBiZSBhIGhleCBjb2xvclxuICovXG5DYW52YXNUaW50ZXIucm91bmRDb2xvciA9IGZ1bmN0aW9uIChjb2xvcilcbntcbiAgICB2YXIgc3RlcCA9IENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuXG4gICAgcmdiVmFsdWVzWzBdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzBdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMV0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMV0gLyBzdGVwKSAqIHN0ZXApO1xuICAgIHJnYlZhbHVlc1syXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1syXSAvIHN0ZXApICogc3RlcCk7XG5cbiAgICByZXR1cm4gdXRpbHMucmdiMmhleChyZ2JWYWx1ZXMpO1xufTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygc3RlcHMgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgY2FwIHdoZW4gcm91bmRpbmcgY29sb3JzLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhY2hlU3RlcHNQZXJDb2xvckNoYW5uZWwgPSA4O1xuXG4vKipcbiAqIFRpbnQgY2FjaGUgYm9vbGVhbiBmbGFnLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSA9IGZhbHNlO1xuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkLCBjb25zZXF1ZW50bHkgdGhlIGFiaWxpdHkgdG8gdGludCB1c2luZyB0aGUgbXVsdGlwbHkgbWV0aG9kLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID0gdXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpO1xuXG4vKipcbiAqIFRoZSB0aW50aW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKi9cbkNhbnZhc1RpbnRlci50aW50TWV0aG9kID0gQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID8gQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgOiAgQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWw7XG4iLCJ2YXIgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuXHR1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgVGV4dHVyZU1hbmFnZXIgPSBmdW5jdGlvbihnbClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIHRyYWNrIHRleHR1cmVzIGluIHRoZSByZW5kZXJlciBzbyB3ZSBjYW4gbm8gbG9uZ2VyIGxpc3RlbiB0byB0aGVtIG9uIGRlc3RydWN0aW9uLlxuXHR0aGlzLl9tYW5hZ2VkVGV4dHVyZXMgPSBbXTtcbiAgICB0aGlzLmdsVGV4dHVyZXMgPSB7fTtcblxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmdldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cbi8qKlxuICogVXBkYXRlcyBhbmQvb3IgQ3JlYXRlcyBhIFdlYkdMIHRleHR1cmUgZm9yIHRoZSByZW5kZXJlcidzIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB1cGRhdGVcbiAqL1xuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG5cdGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXS8vdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG5cbiAgICBpZiAoIWdsVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGdsVGV4dHVyZSA9IG5ldyBHTFRleHR1cmUoZ2wpO1xuICAgICAgICBnbFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHRydWVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbFRleHR1cmU7XG5cbiAgICAgICAvLyB0aGlzLmdsVGV4dHVyZXNbdGV4dHVyZS51aWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgIHRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub24oJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xuICAgIH1cblxuICAgIGdsVGV4dHVyZS51cGxvYWQodGV4dHVyZS5zb3VyY2UpO1xuICAgIFxuICAgIC8vVE9ETyBjaGVjayBpcyBwb3dlciBvZiB0d28uLlxuICAgIGdsVGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuXG4gICAgLy8gVE9ETyBjaGVjayBmb3Igc2NhbGluZyB0eXBlXG4gICAgZ2xUZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKTtcblxuICAgIHJldHVybiAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG59XG5cbi8qKlxuICogRGVsZXRlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byBkZXN0cm95XG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUsIF9za2lwUmVtb3ZlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0uZGVzdHJveSgpO1xuICAgICAgICB0ZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGVUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcblxuXG4gICAgICAgIGRlbGV0ZSB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdO1xuXG4gICAgICAgIGlmICghX3NraXBSZW1vdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzLmluZGV4T2YodGV4dHVyZSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLl9tYW5hZ2VkVGV4dHVyZXMsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24oKVxue1xuXHQvLyBlbXB0eSBhbGwgdGhlIG9sZCBnbCB0ZXh0dXJlcyBhcyB0aGV5IGFyZSB1c2VsZXNzIG5vd1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIGlmICh0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgLy8gZGVzdHJveSBtYW5hZ2VkIHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgdGhpcy5kZXN0cm95VGV4dHVyZSh0ZXh0dXJlLCB0cnVlKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFuYWdlZFRleHR1cmVzID0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlTWFuYWdlcjtcblxuIiwidmFyIFN5c3RlbVJlbmRlcmVyID0gcmVxdWlyZSgnLi4vU3lzdGVtUmVuZGVyZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL01hc2tNYW5hZ2VyJyksXG4gICAgU3RlbmNpbE1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyJyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIEJsZW5kTW9kZU1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIEZYQUFGaWx0ZXIgPSByZXF1aXJlKCcuL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi9UZXh0dXJlTWFuYWdlcicpLFxuICAgIGNyZWF0ZUNvbnRleHQgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5jcmVhdGVDb250ZXh0LFxuICAgIG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aSA9IHJlcXVpcmUoJy4vdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpJyksXG4gICAgbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgV2ViR0xSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgd2ViR0wgZW5hYmxlZCBjYW52YXMuIFRoaXMgcmVuZGVyZXJcbiAqIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wuIFRoaXMgUmVuZGVyIHdvcmtzIGJ5IGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgd2ViR0xCYXRjaHMuXG4gKiBTbyBubyBuZWVkIGZvciBTcHJpdGUgQmF0Y2hlcyBvciBTcHJpdGUgQ2xvdWRzLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgdmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD0wXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD0wXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcy4gSWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseSB0aGVuIEZYQUEgYW50aWFsaWFzaW5nIGlzIHVzZWRcbiAqIEBwYXJhbSBbb3B0aW9ucy5mb3JjZUZYQUE9ZmFsc2VdIHtib29sZWFufSBmb3JjZXMgRlhBQSBhbnRpYWxpYXNpbmcgdG8gYmUgdXNlZCBvdmVyIG5hdGl2ZS4gRlhBQSBpcyBmYXN0ZXIsIGJ1dCBtYXkgbm90IGFsd2F5cyBsb29rIGFzIGdyZWF0XG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLiBJZiB5b3Ugd2lzaCB0byBzZXQgdGhpcyB0byBmYWxzZSwgeW91ICptdXN0KiBzZXQgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHRvIGB0cnVlYC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWZcbiAqICAgICAgeW91IG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHQuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgU3lzdGVtUmVuZGVyZXIuY2FsbCh0aGlzLCAnV2ViR0wnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgcmVuZGVyZXIgYXMgYSBzdGFuZGFyZGlzZWQgY29uc3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0vL1xuICAgICAqXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQgPSB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHBhc3NlZCBpbiB0byBjcmVhdGUgYSBuZXcgd2ViZ2wgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0ge1xuICAgICAgICBhbHBoYTogdGhpcy50cmFuc3BhcmVudCxcbiAgICAgICAgYW50aWFsaWFzOiBvcHRpb25zLmFudGlhbGlhcyxcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnRyYW5zcGFyZW50ICYmIHRoaXMudHJhbnNwYXJlbnQgIT09ICdub3RNdWx0aXBsaWVkJyxcbiAgICAgICAgc3RlbmNpbDogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgIH07XG5cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhWzNdID0gdGhpcy50cmFuc3BhcmVudCA/IDAgOiAxO1xuXG4gICAgLyoqXG4gICAgICogRGVhbHMgd2l0aCBtYW5hZ2luZyB0aGUgc2hhZGVyIHByb2dyYW1zIGFuZCB0aGVpciBhdHRyaWJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG5ldyBTaGFkZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWFza3MgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IE1hc2tNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIgPSBuZXcgU3RlbmNpbE1hbmFnZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5GaWx0ZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgYmxlbmRNb2Rlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CbGVuZE1vZGVNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlciA9IG5ldyBCbGVuZE1vZGVNYW5hZ2VyKHRoaXMpO1xuXG4gICAgXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgT2JqZWN0UmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk9iamVjdFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbmV3IE9iamVjdFJlbmRlcmVyKHRoaXMpO1xuXG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBzbyBpdCBpcyByZWFkeSBmb3IgdGhlIG1hbmFnZXJzLlxuICAgIHRoaXMuZ2wgPSBjcmVhdGVDb250ZXh0KHRoaXMudmlldywgdGhpcy5fY29udGV4dE9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcblxuICAgIC8vIG1hcCBzb21lIHdlYkdMIGJsZW5kIGFuZCBkcmF3bW9kZXMuLlxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aShnbCk7XG4gICAgdGhpcy5kcmF3TW9kZXMgPSBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbClcblxuICAgIHRoaXMuX2FjdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldH1cbiAgICAgKi9cbiAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihXZWJHTFJlbmRlcmVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBXZWJHTCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuX2luaXRDb250ZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgLy8gY3JlYXRlIGEgdGV4dHVyZSBtYW5hZ2VyLi4uXG4gICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG5ldyBUZXh0dXJlTWFuYWdlcihnbCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIGRlZmF1bHQgcGl4aSBzZXR0aW5ncy4uXG4gICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcblxuXG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG51bGwsIHRoaXMucmVzb2x1dGlvbiwgdHJ1ZSk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LmNsZWFyQ29sb3IgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhO1xuICAgIFxuICAgIHRoaXMuYmluZFJlbmRlclRhcmdldCh0aGlzLnJvb3RSZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy5lbWl0KCdjb250ZXh0JywgZ2wpO1xuXG4gICAgLy8gc2V0dXAgdGhlIHdpZHRoL2hlaWdodCBwcm9wZXJ0aWVzIGFuZCBnbCB2aWV3cG9ydFxuICAgIHRoaXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsgICAgXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBpdHMgd2ViR0wgdmlld1xuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gdGhlIG9iamVjdCB0byBiZSByZW5kZXJlZFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdClcbntcbiAgICB0aGlzLmVtaXQoJ3ByZXJlbmRlcicpO1xuXG4gICAgLy8gbm8gcG9pbnQgcmVuZGVyaW5nIGlmIG91ciBjb250ZXh0IGhhcyBiZWVuIGJsb3duIHVwIVxuICAgIGlmICh0aGlzLmdsLmlzQ29udGV4dExvc3QoKSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBkaXNwbGF5T2JqZWN0O1xuXG4gICAgdmFyIGNhY2hlUGFyZW50ID0gZGlzcGxheU9iamVjdC5wYXJlbnQ7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgZGlzcGxheU9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICBkaXNwbGF5T2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIHRoaXMucm9vdFJlbmRlclRhcmdldCwgdGhpcy5jbGVhckJlZm9yZVJlbmRlcik7Ly90aGlzLnByb2plY3Rpb24pO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBEaXNwbGF5IE9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSBUaGUgcmVuZGVyIHRhcmdldCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgZGlzcGxheSBvYmplY3RcbiAqXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcmVuZGVyVGFyZ2V0LCBjbGVhcikvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblxuICAgIGlmKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIGZpbHRlciBtYW5hZ2VyXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnNldEZpbHRlclN0YWNrKCByZW5kZXJUYXJnZXQuZmlsdGVyU3RhY2sgKTtcblxuICAgIC8vIHJlbmRlciB0aGUgc2NlbmUhXG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJXZWJHTCh0aGlzKTtcblxuICAgIC8vIGZpbmlzaCB0aGUgY3VycmVudCByZW5kZXJlci4uXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXJlciB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSBvYmplY3RSZW5kZXJlciB7UElYSS5PYmplY3RSZW5kZXJlcn0gVGhlIG9iamVjdCByZW5kZXJlciB0byB1c2UuXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldE9iamVjdFJlbmRlcmVyID0gZnVuY3Rpb24gKG9iamVjdFJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRSZW5kZXJlciA9PT0gb2JqZWN0UmVuZGVyZXIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RvcCgpO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gb2JqZWN0UmVuZGVyZXI7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgd2ViR0wgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHdlYkdMIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHdlYkdMIHZpZXdcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSB0aGlzLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRvIHRoZSBvbmUgZ2l2ZW4gaW4gcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9IHRoZSBuZXcgcmVuZGVyIHRhcmdldFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5iaW5kUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICBpZihyZW5kZXJUYXJnZXQgIT09IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBpZih0aGlzLl9hY3RpdmVTaGFkZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gcmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuc2V0TWFza1N0YWNrKCByZW5kZXJUYXJnZXQuc3RlbmNpbE1hc2tTdGFjayApO1xuICAgIH1cbn1cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFNoYWRlciA9IGZ1bmN0aW9uIChzaGFkZXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgLy9UT0RPIGNhY2hlXG4gICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyICE9PSBzaGFkZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBzaGFkZXI7XG4gICAgICAgIHNoYWRlci5iaW5kKCk7XG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB9XG59XG5cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgbG9jYXRpb24pXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vVE9ETyB0ZXN0IHBlcmYgb2YgY2FjaGU/XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCAwO1xuXG4gICAgaWYodGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uICE9PSBsb2NhdGlvbikvL1xuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uID0gbG9jYXRpb25cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uICk7XG4gICAgfVxuXG4gICAgLy9UT0RPIC0gY2FuIHdlIGNhY2hlIHRoaXMgdGV4dHVyZSB0b28/XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7ICAgICAgXG4gICAgXG4gICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIGJpbmQgdGhlIHRleHR1cmUuLlxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXS5iaW5kKCk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogSGFuZGxlcyBhIGxvc3Qgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRMb3N0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgYSByZXN0b3JlZCB3ZWJnbCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9pbml0Q29udGV4dCgpO1xuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIucmVtb3ZlQWxsKCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciAoZXZlbnQgbGlzdGVuZXJzLCBzcHJpdGViYXRjaCwgZXRjLi4uKVxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIHJlbW92ZSBsaXN0ZW5lcnNcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuaGFuZGxlQ29udGV4dExvc3QpO1xuICAgIHRoaXMudmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkKTtcblxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIuZGVzdHJveUFsbCgpO1xuXG4gICAgLy8gY2FsbCBiYXNlIGRlc3Ryb3lcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHJlbW92ZVZpZXcpO1xuXG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgLy8gZGVzdHJveSB0aGUgbWFuYWdlcnNcbiAgICB0aGlzLnNoYWRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSBudWxsO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0gbnVsbDtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICB0aGlzLmdsID0gbnVsbDtcbn07XG5cbiIsInZhciBEZWZhdWx0U2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBQSVhJIGZpbHRlci4gQ3VycmVudGx5IG9ubHkgV2ViR0wgc3VwcG9ydHMgZmlsdGVycy5cbiAqIElmIHlvdSB3YW50IHRvIG1ha2UgYSBjdXN0b20gZmlsdGVyIHRoaXMgc2hvdWxkIGJlIHlvdXIgYmFzZSBjbGFzcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdmVydGV4U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIGZyYWdtZW50U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlIGFzIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gdW5pZm9ybXMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuaWZvcm1zIGZvciB0aGlzIGZpbHRlci5cbiAqL1xuZnVuY3Rpb24gQWJzdHJhY3RGaWx0ZXIodmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMpXG57XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBzaGFkZXJzXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVycyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4dHJhIHBhZGRpbmcgdGhhdCB0aGUgZmlsdGVyIG1pZ2h0IG5lZWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmlmb3JtcyBhcyBhbiBvYmplY3RcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29kZSBvZiB0aGUgdmVydGV4IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIGZyYW1lbnQgc2hhZGVyXG4gICAgICogQG1lbWJlciB7c3RyaW5nW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICAvL1RPRE8gYSByZW1pbmRlciAtIHdvdWxkIGJlIGNvb2wgdG8gaGF2ZSBsb3dlciByZXMgZmlsdGVycyBhcyB0aGlzIHdvdWxkIGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlLlxuXG4gICAgLy90eXBlb2YgZnJhZ21lbnRTcmMgPT09ICdzdHJpbmcnID8gZnJhZ21lbnRTcmMuc3BsaXQoJycpIDogKGZyYWdtZW50U3JjIHx8IFtdKTtcblxufVxuXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RGaWx0ZXI7XG5cbi8qKlxuICogR3JhYnMgYSBzaGFkZXIgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIHNoYWRlciBmcm9tXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5nZXRTaGFkZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXJzW2dsLmlkXTtcblxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gbmV3IERlZmF1bHRTaGFkZXIocmVuZGVyZXIuc2hhZGVyTWFuYWdlcixcbiAgICAgICAgICAgIHRoaXMudmVydGV4U3JjLFxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudFNyYyxcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNoYWRlcnNbZ2wuaWRdID0gc2hhZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8gY2xlYXIgdGhlIG91dHB1dFRhcmdldFxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xufTtcblxuLyoqXG4gKiBTeW5jcyBhIHVuaWZvcm0gYmV0d2VlbiB0aGUgY2xhc3Mgb2JqZWN0IGFuZCB0aGUgc2hhZGVycy5cbiAqXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5zaGFkZXJzLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyc1tpXS5zeW5jVW5pZm9ybSh1bmlmb3JtKTtcbiAgICB9XG59O1xuIiwidmFyIEFic3RyYWN0RmlsdGVyID0gcmVxdWlyZSgnLi9BYnN0cmFjdEZpbHRlcicpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqXG4gKiBCYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXG4gKiBtb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcbiAqIHVuc3VwcG9ydGVkIGJ5IFdlYkdMLlxuICpcbiAqIC0tXG4gKiBGcm9tOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKlxuICovXG5mdW5jdGlvbiBGWEFBRmlsdGVyKClcbntcbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG5cXG52b2lkIHRleGNvb3Jkcyh2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTlcsIG91dCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JTVywgb3V0IHZlYzIgdl9yZ2JTRSxcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjMiBpbnZlcnNlVlAgPSAxLjAgLyByZXNvbHV0aW9uLnh5O1xcbiAgICB2X3JnYk5XID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk5FID0gKGZyYWdDb29yZCArIHZlYzIoMS4wLCAtMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU1cgPSAoZnJhZ0Nvb3JkICsgdmVjMigtMS4wLCAxLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JTRSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiTSA9IHZlYzIoZnJhZ0Nvb3JkICogaW52ZXJzZVZQKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxuICAgdlJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xcblxcbiAgIC8vY29tcHV0ZSB0aGUgdGV4dHVyZSBjb29yZHMgYW5kIHNlbmQgdGhlbSB0byB2YXJ5aW5nc1xcbiAgIHRleGNvb3JkcyhhVGV4dHVyZUNvb3JkICogcmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgdl9yZ2JOVywgdl9yZ2JORSwgdl9yZ2JTVywgdl9yZ2JTRSwgdl9yZ2JNKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcblxcbi8qKlxcbkJhc2ljIEZYQUEgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGNvZGUgb24gZ2Vla3MzZC5jb20gd2l0aCB0aGVcXG5tb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcXG51bnN1cHBvcnRlZCBieSBXZWJHTC5cXG5cXG4tLVxcblxcbkZyb206XFxuaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcXG5cXG5Db3B5cmlnaHQgKGMpIDIwMTEgYnkgQXJtaW4gUm9uYWNoZXIuXFxuXFxuU29tZSByaWdodHMgcmVzZXJ2ZWQuXFxuXFxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxcbm1ldDpcXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXFxuICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcXG4gICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcXG4gICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXFxuXFxuICAgICogVGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3JcXG4gICAgICBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWNcXG4gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXFxuXFxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xcblxcXCJBUyBJU1xcXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXFxuQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcXG5PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcXG5TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXFxuVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXFxuKi9cXG5cXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01JTlxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvIDEyOC4wKVxcbiNlbmRpZlxcbiNpZm5kZWYgRlhBQV9SRURVQ0VfTVVMXFxuICAgICNkZWZpbmUgRlhBQV9SRURVQ0VfTVVMICAgKDEuMCAvIDguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfU1BBTl9NQVhcXG4gICAgI2RlZmluZSBGWEFBX1NQQU5fTUFYICAgICA4LjBcXG4jZW5kaWZcXG5cXG4vL29wdGltaXplZCB2ZXJzaW9uIGZvciBtb2JpbGUsIHdoZXJlIGRlcGVuZGVudFxcbi8vdGV4dHVyZSByZWFkcyBjYW4gYmUgYSBib3R0bGVuZWNrXFxudmVjNCBmeGFhKHNhbXBsZXIyRCB0ZXgsIHZlYzIgZnJhZ0Nvb3JkLCB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk5XLCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYlNXLCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjNCBjb2xvcjtcXG4gICAgbWVkaXVtcCB2ZWMyIGludmVyc2VWUCA9IHZlYzIoMS4wIC8gcmVzb2x1dGlvbi54LCAxLjAgLyByZXNvbHV0aW9uLnkpO1xcbiAgICB2ZWMzIHJnYk5XID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JOVykueHl6O1xcbiAgICB2ZWMzIHJnYk5FID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JORSkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTVykueHl6O1xcbiAgICB2ZWMzIHJnYlNFID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTRSkueHl6O1xcbiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JNKTtcXG4gICAgdmVjMyByZ2JNICA9IHRleENvbG9yLnh5ejtcXG4gICAgdmVjMyBsdW1hID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTtcXG4gICAgZmxvYXQgbHVtYU5XID0gZG90KHJnYk5XLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KHJnYk5FLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gZG90KHJnYlNXLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNFID0gZG90KHJnYlNFLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KHJnYk0sICBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU1pbiA9IG1pbihsdW1hTSwgbWluKG1pbihsdW1hTlcsIGx1bWFORSksIG1pbihsdW1hU1csIGx1bWFTRSkpKTtcXG4gICAgZmxvYXQgbHVtYU1heCA9IG1heChsdW1hTSwgbWF4KG1heChsdW1hTlcsIGx1bWFORSksIG1heChsdW1hU1csIGx1bWFTRSkpKTtcXG5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpcjtcXG4gICAgZGlyLnggPSAtKChsdW1hTlcgKyBsdW1hTkUpIC0gKGx1bWFTVyArIGx1bWFTRSkpO1xcbiAgICBkaXIueSA9ICAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuXFxuICAgIGZsb2F0IGRpclJlZHVjZSA9IG1heCgobHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFKSAqXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNSAqIEZYQUFfUkVEVUNFX01VTCksIEZYQUFfUkVEVUNFX01JTik7XFxuXFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvIChtaW4oYWJzKGRpci54KSwgYWJzKGRpci55KSkgKyBkaXJSZWR1Y2UpO1xcbiAgICBkaXIgPSBtaW4odmVjMihGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgIG1heCh2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBkaXIgKiByY3BEaXJNaW4pKSAqIGludmVyc2VWUDtcXG5cXG4gICAgdmVjMyByZ2JBID0gMC41ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDEuMCAvIDMuMCAtIDAuNSkpLnh5eiArXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMi4wIC8gMy4wIC0gMC41KSkueHl6KTtcXG4gICAgdmVjMyByZ2JCID0gcmdiQSAqIDAuNSArIDAuMjUgKiAoXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAtMC41KS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogMC41KS54eXopO1xcblxcbiAgICBmbG9hdCBsdW1hQiA9IGRvdChyZ2JCLCBsdW1hKTtcXG4gICAgaWYgKChsdW1hQiA8IGx1bWFNaW4pIHx8IChsdW1hQiA+IGx1bWFNYXgpKVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkEsIHRleENvbG9yLmEpO1xcbiAgICBlbHNlXFxuICAgICAgICBjb2xvciA9IHZlYzQocmdiQiwgdGV4Q29sb3IuYSk7XFxuICAgIHJldHVybiBjb2xvcjtcXG59XFxuXFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGZ4YWEodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKiB2UmVzb2x1dGlvbiwgdlJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxuXFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG59XG5cbkZYQUFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRlhBQUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGWEFBRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBGWEFBRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cbkZYQUFGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlciggcmVuZGVyZXIgKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBTcHJpdGVNYXNrRmlsdGVyIGNsYXNzXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSB0YXJnZXQgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZU1hc2tGaWx0ZXIoc3ByaXRlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgICB2TWFza0Nvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFza0Nvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgLy8gY2hlY2sgY2xpcCEgdGhpcyB3aWxsIHN0b3AgdGhlIG1hc2sgYmxlZWRpbmcgb3V0IGZyb20gdGhlIGVkZ2VzXFxuICAgIHZlYzIgdGV4dCA9IGFicyggdk1hc2tDb29yZCAtIDAuNSApO1xcbiAgICB0ZXh0ID0gc3RlcCgwLjUsIHRleHQpO1xcbiAgICBmbG9hdCBjbGlwID0gMS4wIC0gbWF4KHRleHQueSwgdGV4dC54KTtcXG4gICAgdmVjNCBvcmlnaW5hbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgIHZlYzQgbWFza3kgPSB0ZXh0dXJlMkQobWFzaywgdk1hc2tDb29yZCk7XFxuICAgIG9yaWdpbmFsICo9IChtYXNreS5yICogbWFza3kuYSAqIGFscGhhICogY2xpcCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG9yaWdpbmFsO1xcbn1cXG5cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbWFzazogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUuX3RleHR1cmUgfSxcbiAgICAgICAgICAgIGFscGhhOiAgICAgICAgICB7IHR5cGU6ICdmJywgdmFsdWU6IDF9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcbn1cblxuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0byByZXRyaWV2ZSB0aGUgZmlsdGVyIGZyb21cbiAqIEBwYXJhbSBpbnB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gb3V0cHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqL1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5tYXNrLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLl90ZXh0dXJlO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLndvcmxkQWxwaGE7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZU1hc2tGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgdXNlZCB0byBtb3ZlIHRoZSBkaXNwbGFjZW1lbnQgbWFwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdsTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBCbGVuZE1vZGVNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn1cblxuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZE1vZGVNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGVNYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMtdXAgdGhlIGdpdmVuIGJsZW5kTW9kZSBmcm9tIFdlYkdMJ3MgcG9pbnQgb2Ygdmlldy5cbiAqXG4gKiBAcGFyYW0gYmxlbmRNb2RlIHtudW1iZXJ9IHRoZSBibGVuZE1vZGUsIHNob3VsZCBiZSBhIFBpeGkgY29uc3QsIHN1Y2ggYXMgYFBJWEkuQkxFTkRfTU9ERVMuQUREYC4gU2VlXG4gKiAge0BsaW5rIFBJWEkuQkxFTkRfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLnNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChibGVuZE1vZGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblxuICAgIHZhciBtb2RlID0gdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuY3VycmVudEJsZW5kTW9kZV07XG4gICAgdGhpcy5yZW5kZXJlci5nbC5ibGVuZEZ1bmMobW9kZVswXSwgbW9kZVsxXSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgUXVhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL1F1YWQnKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXTtcblxuICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgIHJlbmRlclRhcmdldDpyZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LFxuICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgIGJvdW5kczpudWxsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldFtdfVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICAvLyBsaXN0ZW4gZm9yIGNvbnRleHQgYW5kIHVwZGF0ZSBuZWNlc3NhcnkgYnVmZmVyc1xuICAgIC8vVE9ETyBtYWtlIHRoaXMgZHluYW1pYyFcbiAgICAvL1RPRE8gdGVzdCB0aGlzIG91dCBieSBmb3JjZXMgcG93ZXIgb2YgdHdvP1xuICAgIHRoaXMudGV4dHVyZVNpemUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgcmVuZGVyZXIud2lkdGgsIHJlbmRlcmVyLmhlaWdodCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmcmFtZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBudWxsO1xufVxuXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbHRlck1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlck1hbmFnZXI7XG5cblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVQb29sLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucXVhZCA9IG5ldyBRdWFkKGdsKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcGFyYW0gYnVmZmVyIHtBcnJheUJ1ZmZlcn1cbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuc2V0RmlsdGVyU3RhY2sgPSBmdW5jdGlvbiAoIGZpbHRlclN0YWNrIClcbntcbiAgICB0aGlzLmZpbHRlclN0YWNrID0gZmlsdGVyU3RhY2s7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlciBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGZpbHRlcnMge1BJWEkuQWJzdHJhY3RGaWxlcltdfSB0aGUgZmlsdGVycyB0aGF0IHdpbGwgYmUgcHVzaGVkIHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFja1xuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5wdXNoRmlsdGVyID0gZnVuY3Rpb24gKHRhcmdldCwgZmlsdGVycylcbntcbiAgICAvLyBnZXQgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0Li5cbiAgICAvLyBUT0RPIHJlcGxhY2UgY2xvbmUgd2l0aCBhIGNvcHkgdG8gc2F2ZSBvYmplY3QgY3JlYXRpb25cbiAgICB2YXIgYm91bmRzID0gdGFyZ2V0LmZpbHRlckFyZWEgPyB0YXJnZXQuZmlsdGVyQXJlYS5jbG9uZSgpIDogdGFyZ2V0LmdldEJvdW5kcygpO1xuXG4gICAgLy9ib3VuZHMgPSBib3VuZHMuY2xvbmUoKTtcblxuICAgIC8vIHJvdW5kIG9mZiB0aGUgcmVjdGFuZ2xlIHRvIGdldCBhIG5pY2Ugc21vb29vb29vdGggZmlsdGVyIDopXG4gICAgYm91bmRzLnggPSBib3VuZHMueCB8IDA7XG4gICAgYm91bmRzLnkgPSBib3VuZHMueSB8IDA7XG4gICAgYm91bmRzLndpZHRoID0gYm91bmRzLndpZHRoIHwgMDtcbiAgICBib3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCB8IDA7XG5cblxuICAgIC8vIHBhZGRpbmchXG4gICAgdmFyIHBhZGRpbmcgPSBmaWx0ZXJzWzBdLnBhZGRpbmcgfCAwO1xuICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLnkgLT0gcGFkZGluZztcbiAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcblxuXG4gICAgaWYodGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vVE9ETyB0aGlzIHdpbGwgYnJlYWsgaWYgdGhlIHJlbmRlclRleHR1cmUgdHJhbnNmb3JtIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYSB0cmFuc2xhdGlvbi5cbiAgICAgICAgLy9XaWxsIG5lZWQgdG8gdGFrZSB0aGUgZnVsbCBtYXRyaXggdHJhbnNmb3JtIGludG8gYWNvdW50Li5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm07XG5cbiAgICAgICAgYm91bmRzLnggKz0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSArPSB0cmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdGhpcy5jYXBGaWx0ZXJBcmVhKCBib3VuZHMgKTtcblxuICAgICAgICBib3VuZHMueCAtPSB0cmFuc2Zvcm0udHg7XG4gICAgICAgIGJvdW5kcy55IC09IHRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG4gICAgfVxuXG4gICAgaWYoYm91bmRzLndpZHRoID4gMCAmJiBib3VuZHMuaGVpZ2h0ID4gMClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gYm91bmRzO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBjbGVhciB0aGUgdGV4dHVyZS4uXG4gICAgICAgIHRleHR1cmUuY2xlYXIoKTtcblxuICAgICAgICAvLyBUT0RPIGdldCByaWQgb2Ygb2JqZWN0IGNyZWF0aW9uIVxuICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OiB0ZXh0dXJlLFxuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJzXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIHB1c2ggc29tdGhpbmcgb24gdG8gdGhlIHN0YWNrIHRoYXQgaXMgZW1wdHlcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucG9wRmlsdGVyID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2sucG9wKCk7XG4gICAgdmFyIHByZXZpb3VzRmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2tbdGhpcy5maWx0ZXJTdGFjay5sZW5ndGgtMV07XG5cbiAgICB2YXIgaW5wdXQgPSBmaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIGlmIHRoZSByZW5kZXJUYXJnZXQgaXMgbnVsbCB0aGVuIHdlIGRvbid0IGFwcGx5IHRoZSBmaWx0ZXIgYXMgaXRzIG9mZnNjcmVlblxuICAgIGlmKCFmaWx0ZXJEYXRhLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gcHJldmlvdXNGaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIHVzZSBwcm9ncmFtXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpbnB1dC5mcmFtZTtcblxuICAgIHRoaXMucXVhZC5tYXAodGhpcy50ZXh0dXJlU2l6ZSwgaW5wdXQuZnJhbWUpO1xuXG5cbiAgICAvLyBUT0RPLi4gdGhpcyBwcm9iYWJseSBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBmaWx0ZXJzID0gZmlsdGVyRGF0YS5maWx0ZXI7XG5cbiAgICAvLyBhc3N1bWluZyBhbGwgZmlsdGVycyBmb2xsb3cgdGhlIGNvcnJlY3QgZm9ybWF0Pz9cbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgbm9ybWFsIGJsZW5kbW9kZSFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKENPTlNULkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDEpXG4gICAge1xuICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICBpZiAoZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJzWzBdLmFwcGx5RmlsdGVyKCB0aGlzLnJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0ICk7XG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBpbnB1dCApO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBmbGlwVGV4dHVyZSA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcFRleHR1cmUgPSB0aGlzLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGZpbHRlcnNbaV07XG5cbiAgICAgICAgICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSB0aGVuIHNldHRpbmcgdGhpcyBlYWNoIHRpbWU/XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlci5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIGZsb3BUZXh0dXJlICk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gZmxpcFRleHR1cmU7XG4gICAgICAgICAgICBmbGlwVGV4dHVyZSA9IGZsb3BUZXh0dXJlO1xuICAgICAgICAgICAgZmxvcFRleHR1cmUgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aC0xXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIG91dHB1dCApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBmbGlwVGV4dHVyZSApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxvcFRleHR1cmUgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyRGF0YS5maWx0ZXI7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgUmVuZGVyVGFyZ2V0XG4gKiBAcmV0dXJuIHtSZW5kZXJUYXJnZXR9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICggY2xlYXIgKVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSB0aGlzLnRleHR1cmVQb29sLnBvcCgpIHx8IG5ldyBSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJlci5nbCwgdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQsIENPTlNULlNDQUxFX01PREVTLkxJTkVBUiwgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uICogQ09OU1QuRklMVEVSX1JFU09MVVRJT04pO1xuICAgIHJlbmRlclRhcmdldC5mcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJUYXJnZXQ7XG59O1xuXG4vKlxuICogUmV0dXJucyBhIFJlbmRlclRhcmdldCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UmVuZGVyVGFyZ2V0fSBUaGUgUmVuZGVyVGFyZ2V0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnJldHVyblJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5wdXNoKCByZW5kZXJUYXJnZXQgKTtcbn07XG5cbi8qXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBzaGFkZXIge1NoYWRlcn0gVGhlIHNoYWRlciB0byB1cGxvYWRcbiAqIEBwYXJhbSBpbnB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAoc2hhZGVyLCBpbnB1dFRhcmdldCwgb3V0cHV0VGFyZ2V0LCBjbGVhcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQob3V0cHV0VGFyZ2V0KTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIG91dHB1dFRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2hhZGVyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBDYW4gdGhpcyBiZSBjYWNoZWQgYW5kIG5vdCBgdG9BcnJheWBlZCBlYWNoIGZyYW1lP1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcblxuICAgIC8vVE9ETyBjYW4gdGhpcyBiZSBvcHRpbWlzZWQ/XG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuLypcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMiAqIDQgKiA0KTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuKi9cblxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGlucHV0VGFyZ2V0LnRleHR1cmUpO1xuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIG1hcHBlZCBtYXRyaXhcbiAqIEBwYXJhbSBmaWx0ZXJBcmVhIHtSZWN0YW5nbGV9IFRoZSBmaWx0ZXIgYXJlYVxuICogQHBhcmFtIHNwcml0ZSB7U3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICogQHBhcmFtIG91dHB1dE1hdHJpeCB7TWF0cml4fSBAYWx2aW5cbiAqL1xuLy8gVE9ETyBwbGF5aW5nIGFyb3VuZCBoZXJlLi4gdGhpcyBpcyB0ZW1wb3JhcnkgLSAod2lsbCBlbmQgdXAgaW4gdGhlIHNoYWRlcilcbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeCA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhLCBzcHJpdGUsIG91dHB1dE1hdHJpeClcbntcbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBzcHJpdGUud29ybGRUcmFuc2Zvcm0uY29weShtYXRoLk1hdHJpeC5URU1QX01BVFJJWCksXG4gICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIHZhciBtYXBwZWRNYXRyaXggPSBvdXRwdXRNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIC8vIHNjYWxlLi5cbiAgICB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICBtYXBwZWRNYXRyaXgudHJhbnNsYXRlKGZpbHRlckFyZWEueCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIGZpbHRlckFyZWEueSAvIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0ICk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIHJhdGlvKTtcblxuICAgIHZhciB0cmFuc2xhdGVTY2FsZVggPSAodGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAvIHRleHR1cmUud2lkdGgpO1xuICAgIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0ZXh0dXJlLmhlaWdodCk7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS50eCAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuICAgIHdvcmxkVHJhbnNmb3JtLnR5IC89IHRleHR1cmUud2lkdGggKiB0cmFuc2xhdGVTY2FsZVg7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIG1hcHBlZE1hdHJpeC5wcmVwZW5kKHdvcmxkVHJhbnNmb3JtKTtcblxuICAgIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIG1hcHBlZE1hdHJpeC5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShzcHJpdGUuYW5jaG9yLngsIHNwcml0ZS5hbmNob3IueSk7XG5cbiAgICByZXR1cm4gbWFwcGVkTWF0cml4O1xuXG4gICAgLy8gS2VlcGluZyB0aGUgb3JnaW5hbCBhcyBhIHJlbWluZGVyIHRvIG1lIG9uIGhvdyB0aGlzIHdvcmtzIVxuICAgIC8vXG4gICAgLy8gdmFyIG0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuICAgIC8vIC8vIHNjYWxlLi5cbiAgICAvLyB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICAvLyBtLnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCk7XG5cblxuICAgIC8vIG0uc2NhbGUoMSAsIHJhdGlvKTtcblxuXG4gICAgLy8gdmFyIHRyYW5zZm9ybSA9IHd0LmNsb25lKCk7XG5cbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyA2MjApO1xuICAgIC8vIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyAzODApO1xuXG4gICAgLy8gdHJhbnNmb3JtLnR4IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICAvLyB0cmFuc2Zvcm0udHkgLz0gNjIwICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgLy8gdHJhbnNmb3JtLmludmVydCgpO1xuXG4gICAgLy8gdHJhbnNmb3JtLmFwcGVuZChtKTtcblxuICAgIC8vIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIC8vIHRyYW5zZm9ybS5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgLy8gcmV0dXJuIHRyYW5zZm9ybTtcbn07XG5cbi8qXG4gKiBDb25zdHJhaW5zIHRoZSBmaWx0ZXIgYXJlYSB0byB0aGUgdGV4dHVyZSBzaXplXG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWEgd2Ugd2FudCB0byBjYXBcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY2FwRmlsdGVyQXJlYSA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhKVxue1xuICAgIGlmIChmaWx0ZXJBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCArPSBmaWx0ZXJBcmVhLng7XG4gICAgICAgIGZpbHRlckFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlckFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLmhlaWdodCArPSBmaWx0ZXJBcmVhLnk7XG4gICAgICAgIGZpbHRlckFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnggKyBmaWx0ZXJBcmVhLndpZHRoID4gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLndpZHRoID0gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAtIGZpbHRlckFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGZpbHRlckFyZWEueSArIGZpbHRlckFyZWEuaGVpZ2h0ID4gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAtIGZpbHRlckFyZWEueTtcbiAgICB9XG59O1xuXG4vKlxuICogUmVzaXplcyBhbGwgdGhlIHJlbmRlciB0YXJnZXRzIGluIHRoZSBwb29sXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMudGV4dHVyZVNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZVBvb2xbaV0ucmVzaXplKCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgZmlsdGVyIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGZpbHRlciBzdGFjay5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucXVhZC5kZXN0cm95KCk7XG4gICAgXG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG4gICAgXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IG51bGw7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGV4dHVyZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVQb29sID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBBbHBoYU1hc2tGaWx0ZXIgPSByZXF1aXJlKCcuLi9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuc3RlbmNpbFN0YWNrID0gW107XG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ID0gMDtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbCA9IFtdO1xufVxuXG5NYXNrTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFNwcml0ZU1hc2sodGFyZ2V0LCBtYXNrRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IG1hc2sgZnJvbSB0aGUgbWFzayBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIGlmIChtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnBvcFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB2YXIgYWxwaGFNYXNrRmlsdGVyID0gdGhpcy5hbHBoYU1hc2tQb29sLnBvcCgpO1xuXG4gICAgaWYgKCFhbHBoYU1hc2tGaWx0ZXIpXG4gICAge1xuICAgICAgICBhbHBoYU1hc2tGaWx0ZXIgPSBbbmV3IEFscGhhTWFza0ZpbHRlcihtYXNrRGF0YSldO1xuICAgIH1cblxuICAgIGFscGhhTWFza0ZpbHRlclswXS5tYXNrU3ByaXRlID0gbWFza0RhdGE7XG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGFyZ2V0LCBhbHBoYU1hc2tGaWx0ZXIpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBmaWx0ZXJzID0gdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgdGhpcy5hbHBoYU1hc2tQb29sLnB1c2goZmlsdGVycyk7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoTWFzayhtYXNrRGF0YSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcE1hc2sobWFza0RhdGEpO1xufTtcblxuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpLFxuICAgIENvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXInKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTaGFkZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heEF0dGlicyA9IDEwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXhBdHRpYnM7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YWNrID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcblxuLy8gICAgdGhpcy5pbml0UGx1Z2lucygpO1xufVxuXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hbmFnZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oU2hhZGVyTWFuYWdlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyTWFuYWdlcjtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRyaWJ1dGUgY29ycmVjdGx5IGFzIHRoaXMgdGVuZHMgdG8gdmFyeVxuICAgIHRoaXMubWF4QXR0aWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVE9ETyAtIFdoeSBhcmUgdGhlc2Ugbm90IHBsdWdpbnM/IFdlIGNhbid0IGRlY291cGxlIHByaW1pdGl2ZXMgdW5sZXNzIHRoZXkgYXJlLi4uLlxuICAgIHRoaXMuZGVmYXVsdFNoYWRlciA9IG5ldyBUZXh0dXJlU2hhZGVyKHRoaXMpO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBuZXcgQ29tcGxleFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogVGFrZXMgdGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gaW4gcGFyYW1ldGVycyBhbmQgdXBsb2FkcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJzIHthbnlbXX0gYXR0cmlic1xuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRBdHRyaWJzID0gZnVuY3Rpb24gKGF0dHJpYnMpXG57XG4gICAgLy8gcmVzZXQgdGVtcCBzdGF0ZVxuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMudGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yICh2YXIgYSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbYXR0cmlic1thXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYlN0YXRlW2ldICE9PSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgc2hhZGVyLlxuICpcbiAqIEBwYXJhbSBzaGFkZXIge1BJWEkuU2hhZGVyfSB0aGUgc2hhZGVyIHRvIHVwbG9hZFxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKVxue1xuICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5fY3VycmVudElkID09PSBzaGFkZXIudWlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IHNoYWRlci51aWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBzaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmdsLnVzZVByb2dyYW0oc2hhZGVyLnByb2dyYW0pO1xuICAgIHRoaXMuc2V0QXR0cmlicyhzaGFkZXIuYXR0cmlidXRlcyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBvYmplY3QuXG4gKlxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLmRlc3Ryb3koKTtcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBudWxsO1xufTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFza01hbmFnZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG51bGw7XG59XG5cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBtYXNrIHN0YWNrIHRoYXQgaXMgdXNlZCBieSB0aGlzIG1hbmFnZXIuXG4gKlxuICogQHBhcmFtIHN0ZW5jaWxNYXNrU3RhY2sge1BJWEkuU3RlbmNpbE1hc2tTdGFja30gVGhlIG1hc2sgc3RhY2tcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuc2V0TWFza1N0YWNrID0gZnVuY3Rpb24gKCBzdGVuY2lsTWFza1N0YWNrIClcbntcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBzdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIGlmIChzdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suIEBhbHZpblxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hdHRhY2hTdGVuY2lsQnVmZmVyKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBzbXMgPSB0aGlzLnN0ZW5jaWxNYXNrU3RhY2s7XG5cbiAgICB0aGlzLmJpbmRHcmFwaGljcyhncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xuICAgICAgICBzbXMucmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIHNtcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wdXNoKHdlYkdMRGF0YSk7XG5cbiAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgLy8gZHJhdyB0aGUgdHJpYW5nbGUgc3RyaXAhXG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IGEgcXVhZCB0byBpbmNyZW1lbnQuLlxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cbiAgICBzbXMuY291bnQrKztcbn07XG5cbi8qKlxuICogVE9ETyB0aGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIVxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5iaW5kR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICAvL2lmICh0aGlzLl9jdXJyZW50R3JhcGhpY3MgPT09IGdyYXBoaWNzKXJldHVybjtcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGJpbmQgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgdmFyIHNoYWRlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICAvKlxuICAgICAgICBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMuY29sb3IuX2xvY2F0aW9uLCB3ZWJHTERhdGEuY29sb3IpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDIsIDApO1xuXG4gICAgICAgIC8vIG5vdyBkbyB0aGUgcmVzdC4uXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICovXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmFjdGl2YXRlUHJpbWl0aXZlU2hhZGVyKCk7XG4vLyAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnByaW1pdGl2ZVNoYWRlcjtcbiAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cblxuICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4vLyAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG5cbiAgICAgIC8qICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTFmKHNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEpO1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCA0LCBnbC5GTE9BVCwgZmFsc2UsNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTsqL1xuICAgIH1cbn07XG5cbi8qKlxuICogVE9ETyBAYWx2aW5cbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTdGVuY2lsID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wb3AoKTtcblxuICAgIHNtcy5jb3VudC0tO1xuXG4gICAgaWYgKHNtcy5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgLy8gdGhlIHN0YWNrIGlzIGVtcHR5IVxuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICAgICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuXG4gICAgICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSAobGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOVkVSVCk7XG5cbiAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50ICs9IDI7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAvLyAgY29uc29sZS5sb2coXCI8PD4+XCIpXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcblxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCksIDB4RkYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5LRUVQKTtcblxuXG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgbWFzayBzdGFjay5cbiAqXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjayA9IG51bGw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119IFRoZSBtYXNrIGRhdGEgc3RydWN0dXJlIHRvIHVzZVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgXG4gICAgLy9UT0RPIEZJWFxuICAgIGlmIChtYXNrRGF0YS5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy51cGRhdGVHcmFwaGljcyhtYXNrRGF0YSwgdGhpcy5yZW5kZXJlci5nbCk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119XG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuXG4gICAgdGhpcy5wb3BTdGVuY2lsKG1hc2tEYXRhLCBtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YVswXSk7XG59O1xuXG4iLCIvKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gV2ViR0xNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMucmVuZGVyZXIub24oJ2NvbnRleHQnLCB0aGlzLm9uQ29udGV4dENoYW5nZSwgdGhpcyk7XG59XG5cbldlYkdMTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFuYWdlcjtcblxuLyoqXG4gKiBHZW5lcmljIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXHQvLyBkbyBzb21lIGNvZGVzIGluaXQhXG59O1xuXG4vKipcbiAqIEdlbmVyaWMgZGVzdHJveSBtZXRob2RzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICovXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVuZGVyZXIub2ZmKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IGNvbXBsZXggcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBDb21wbGV4UHJpbWl0aXZlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gdmVjNChjb2xvciAqIGFscGhhICogdGludCwgYWxwaGEpOycsLy9cIiAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdGludDogICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwgMCwgMF0gfSxcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgY29sb3I6ICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwwLDBdIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYUNvbG9yOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCYXNlIHNoYWRlciBjbGFzcyBmb3IgUElYSSBtYW5hZ2VkIHNoYWRlcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFt1bmlmb3Jtc10ge29iamVjdH0gVW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxuICogQHBhcmFtIFthdHRyaWJ1dGVzXSB7b2JqZWN0fSBBdHRyaWJ1dGVzIGZvciB0aGlzIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKVxue1xuICAgIGlmICghdmVydGV4U3JjIHx8ICFmcmFnbWVudFNyYylcbiAgICB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpeGkuanMgRXJyb3IuIFNoYWRlciByZXF1aXJlcyB2ZXJ0ZXhTcmMgYW5kIGZyYWdtZW50U3JjJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmdsID0gc2hhZGVyTWFuYWdlci5yZW5kZXJlci5nbDtcblxuICAgIC8vVE9ETyBtYXliZSB3ZSBzaG91bGQgcGFzcyByZW5kZXJlciByYXRoZXIgdGhhbiBzaGFkZXIgbWFuZ2VyPz8gZm9vZCBmb3IgdGhvdWdodC4uXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyID0gc2hhZGVyTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBwcm9ncmFtLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xQcm9ncmFtfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF0dHJpYnV0ZXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRleHR1cmUgY291bnRlclxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYztcblxuICAgIHRoaXMuaW5pdCgpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc2hhZGVyIGFuZCB1c2VzIGl0XG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29tcGlsZSgpO1xuXG4gICAgdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLnVuaWZvcm1zKSk7XG4gICAgdGhpcy5jYWNoZUF0dHJpYnV0ZUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpKTtcbn07XG5cbi8qKlxuICogQ2FjaGVzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHVuaWZvcm0gZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSB1bmlmb3JtcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyA9IGZ1bmN0aW9uIChrZXlzKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMudW5pZm9ybXNba2V5c1tpXV0uX2xvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBrZXlzW2ldKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSBhdHRyaWJ1dGVzIHRvIGNhY2hlXG4gKi9cblNoYWRlci5wcm90b3R5cGUuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNba2V5c1tpXV0gPSB0aGlzLmdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4uLlxuXG4gICAgLy8gQmVnaW4gd29yc3QgaGFjayBldmEgLy9cblxuICAgIC8vIFdIWT8/PyBPTkxZIG9uIG15IGNocm9tZSBwaXhlbCB0aGUgbGluZSBhYm92ZSByZXR1cm5zIC0xIHdoZW4gdXNpbmcgZmlsdGVycz9cbiAgICAvLyBtYXliZSBpdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdsIGNvbnRleHQuXG4gICAgLy8gSSdtIGNvbnZpbmNlZCB0aGlzIGlzIGEgYnVnIGluIHRoZSBjaHJvbWUgYnJvd3NlciBhcyB0aGVyZSBpcyBOTyByZWFzb24gd2h5IHRoaXMgc2hvdWxkIGJlIHJldHVybmluZyAtMSBlc3BlY2lhbGx5IGFzIGl0IG9ubHkgbWFuaWZlc3RzIG9uIG15IGNocm9tZSBwaXhlbFxuICAgIC8vIElmIHRoZXJlcyBhbnkgd2ViR0wgcGVvcGxlIHRoYXQga25vdyB3aHkgY291bGQgaGFwcGVuIHBsZWFzZSBoZWxwIDopXG4gICAgLy8gaWYgKHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPT09IC0xKXtcbiAgICAvLyAgICAgdGhpcy5hdHRyaWJ1dGVzLmFDb2xvciA9IDI7XG4gICAgLy8gfVxuXG4gICAgLy8gRW5kIHdvcnN0IGhhY2sgZXZhIC8vXG59O1xuXG4vKipcbiAqIEF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZCBjcmVhdGVzIHRoZSBwcm9ncmFtLlxuICpcbiAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX1cbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIGdsVmVydFNoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5WRVJURVhfU0hBREVSLCB0aGlzLnZlcnRleFNyYyk7XG4gICAgdmFyIGdsRnJhZ1NoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuZnJhZ21lbnRTcmMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xGcmFnU2hhZGVyKTtcbiAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcblxuICAgIC8vIGlmIGxpbmtpbmcgZmFpbHMsIHRoZW4gbG9nIGFuZCBjbGVhbnVwXG4gICAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BpeGkuanMgRXJyb3I6IENvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlci4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuVkFMSURBVEVfU1RBVFVTJywgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuZ2V0RXJyb3IoKScsIGdsLmdldEVycm9yKCkpO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcHJvZ3JhbSBpbmZvIGxvZywgbG9nIGl0XG4gICAgICAgIGlmIChnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSAhPT0gJycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBXYXJuaW5nOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpJywgZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgcHJvZ3JhbSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgc29tZSBzaGFkZXJzXG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsVmVydFNoYWRlcik7XG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsRnJhZ1NoYWRlcik7XG5cbiAgICByZXR1cm4gKHRoaXMucHJvZ3JhbSA9IHByb2dyYW0pO1xufTtcblxuLyoqXG4qIEFkZHMgYSBuZXcgdW5pZm9ybVxuKlxuKiBAcGFyYW0gdW5pZm9ybSB7b2JqZWN0fSB0aGUgbmV3IHVuaWZvcm0gdG8gYXR0YWNoXG4qL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBsb2NhdGlvbiA9IHVuaWZvcm0uX2xvY2F0aW9uLFxuICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWUsXG4gICAgICAgIGdsID0gdGhpcy5nbCxcbiAgICAgICAgaSwgaWw7XG5cbiAgICBzd2l0Y2ggKHVuaWZvcm0udHlwZSlcbiAgICB7XG4gICAgICAgIGNhc2UgJ2InOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlID8gMSA6IDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGludCB2YWx1ZVxuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBzaW5nbGUgZmxvYXQgdmFsdWVcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDIpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoMykgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoNCkgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzRmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSAyRCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjInOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgM0QgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YzJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDREIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2NCc6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzFmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzRmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTInOlxuICAgICAgICBjYXNlICdtYXQyJzpcbiAgICAgICAgY2FzZSAnTWF0cml4MmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICBjYXNlICdtYXQzJzpcbiAgICAgICAgY2FzZSAnTWF0cml4M2Z2JzpcblxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICdtNCc6XG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICBjYXNlICdNYXRyaXg0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgQ29sb3IgVmFsdWVcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGludGVnZXJzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIChKUyBvciB0eXBlZCBhcnJheSlcbiAgICAgICAgY2FzZSAnZnYxJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDJEIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjJ2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDIgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDJdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMiArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAzRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yzdic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgzICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMyArIDJdICAgPSB2YWx1ZVtpXS56O1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHVuaWZvcm0uX2FycmF5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDREIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjR2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDRdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgMl0gICA9IHZhbHVlW2ldLno7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAzXSAgID0gdmFsdWVbaV0udztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBQSVhJLlRleHR1cmVcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgIGNhc2UgJ3NhbXBsZXIyRCc6XG5cbiAgICAgICAgICAgIGlmICghdW5pZm9ybS52YWx1ZSB8fCAhdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFjdGl2YXRlIHRoaXMgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0aGlzLnRleHR1cmVDb3VudF0pO1xuXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgICAgICAgICBpZiAoIXRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2FtcGxlcjJEKHVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSB0ZXh0dXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb25lLi5cbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gICAgICAgICAgICAvLyBzZXQgdW5pZm9ybSB0byB0ZXh0dXJlIGluZGV4XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkodW5pZm9ybS5fbG9jYXRpb24sIHRoaXMudGV4dHVyZUNvdW50KTtcblxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IG5leHQgdGV4dHVyZSBpZFxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBTaGFkZXIgV2FybmluZzogVW5rbm93biB1bmlmb3JtIHR5cGU6ICcgKyB1bmlmb3JtLnR5cGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnVuaWZvcm1zKVxuICAgIHtcbiAgICAgICAgdGhpcy5zeW5jVW5pZm9ybSh0aGlzLnVuaWZvcm1zW2tleV0pO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJbml0aWFsaXNlcyBhIFNhbXBsZXIyRCB1bmlmb3JtICh3aGljaCBtYXkgb25seSBiZSBhdmFpbGFibGUgbGF0ZXIgb24gYWZ0ZXIgaW5pdFVuaWZvcm1zIG9uY2UgdGhlIHRleHR1cmUgaGFzIGxvYWRlZClcbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuaW5pdFNhbXBsZXIyRCA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGlmICh1bmlmb3JtLnRleHR1cmVEYXRhKVxuICAgIHtcblxuICAgICAgICAvL1RPRE8gbW92ZSB0aGlzLi4uXG4gICAgICAgIHZhciBkYXRhID0gdW5pZm9ybS50ZXh0dXJlRGF0YTtcblxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG5cbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGxpZWRBbHBoYSk7XG4gICAgICAgIC8vIEdMVGV4dHVyZSA9IG1hZyBsaW5lYXIsIG1pbiBsaW5lYXJfbWlwbWFwX2xpbmVhciwgd3JhcCByZXBlYXQgKyBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgLy8gR0xUZXh0dXJlTGluZWFyID0gbWFnL21pbiBsaW5lYXIsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdFJlcGVhdCA9IG1hZy9taW4gTkVBUkVTVCwgd3JhcCByZXBlYXRcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdCA9IG1hZy9taW4gbmVhcmVzdCwgd3JhcCBjbGFtcFxuICAgICAgICAvLyBBdWRpb1RleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDUxMiwgaGVpZ2h0IDIsIGJvcmRlciAwXG4gICAgICAgIC8vIEtleVRleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDI1NiwgaGVpZ2h0IDIsIGJvcmRlciAwXG5cbiAgICAgICAgLy8gIG1hZ0ZpbHRlciBjYW4gYmU6IGdsLkxJTkVBUiwgZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgb3IgZ2wuTkVBUkVTVFxuICAgICAgICAvLyAgd3JhcFMvVCBjYW4gYmU6IGdsLkNMQU1QX1RPX0VER0Ugb3IgZ2wuUkVQRUFUXG5cbiAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBkYXRhLmx1bWluYW5jZSA/IGdsLkxVTUlOQU5DRSA6IGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRleHR1cmUuc291cmNlKTtcblxuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZGF0YS5tYWdGaWx0ZXIgPyBkYXRhLm1hZ0ZpbHRlciA6IGdsLkxJTkVBUiApO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFICk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZGF0YS53cmFwVCA/IGRhdGEud3JhcFQgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5zaGFkZXJNYW5hZ2VyLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgc2hhZGVyLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmdsLmRlbGV0ZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgIHRoaXMudW5pZm9ybXMgPSBudWxsO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleFNyYyA9IG51bGw7XG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IG51bGw7XG59O1xuXG5TaGFkZXIucHJvdG90eXBlLl9nbENvbXBpbGUgPSBmdW5jdGlvbiAodHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIHRoaXMuZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc3JjKTtcbiAgICB0aGlzLmdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghdGhpcy5nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCB0aGlzLmdsLkNPTVBJTEVfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIGN1c3RvbVVuaWZvcm1zLCBjdXN0b21BdHRyaWJ1dGVzKVxue1xuICAgIHZhciB1bmlmb3JtcyA9IHtcblxuICAgICAgICB1U2FtcGxlcjogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiAwIH0sXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6ICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDFdKSB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21Vbmlmb3JtcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIHUgaW4gY3VzdG9tVW5pZm9ybXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVuaWZvcm1zW3VdID0gY3VzdG9tVW5pZm9ybXNbdV07XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBhVmVydGV4UG9zaXRpb246ICAgIDAsXG4gICAgICAgIGFUZXh0dXJlQ29vcmQ6ICAgICAgMCxcbiAgICAgICAgYUNvbG9yOiAgICAgICAgICAgICAwXG4gICAgfTtcblxuICAgIGlmIChjdXN0b21BdHRyaWJ1dGVzKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgYSBpbiBjdXN0b21BdHRyaWJ1dGVzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2FdID0gY3VzdG9tQXR0cmlidXRlc1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IHZlcnRleFNyYyB8fCBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcyk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKGdsKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IFRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgZnJhZ21lbnRTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYztcblxuICAgIFNoYWRlci5jYWxsKHRoaXMsIGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTsvLywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xuXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuLi9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBCYXNlIGZvciBhIGNvbW1vbiBvYmplY3QgcmVuZGVyZXIgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHN5c3RlbSByZW5kZXJlciBwbHVnaW4uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBPYmplY3RSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59XG5cblxuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9iamVjdFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RSZW5kZXJlcjtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHJlbmRlcmVyIGFuZCBzZXRzIHRoZSBzaGFkZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gc2V0IHRoZSBzaGFkZXIuLlxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgcmVuZGVyZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIGZsdXNoZXNcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gZmx1c2ghXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyByZW5kZXIgdGhlIG9iamVjdFxufTtcbiIsIi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHF1YWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gVGhlIGdsIGNvbnRleHQgZm9yIHRoaXMgcXVhZCB0byB1c2UuXG4gKi9cbmZ1bmN0aW9uIFF1YWQoZ2wpXG57XG4gICAgLypcbiAgICAgKiB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbi8vICAgIHRoaXMudGV4dHVyZXMgPSBuZXcgVGV4dHVyZVV2cygpO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMjAwLDAsXG4gICAgICAgIDIwMCwyMDAsXG4gICAgICAgIDAsMjAwXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBxdWFkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KFtcbiAgICAgICAgMCwwLFxuICAgICAgICAxLDAsXG4gICAgICAgIDEsMSxcbiAgICAgICAgMCwxXG4gICAgXSk7XG5cbi8vICAgIHZhciB3aGl0ZSA9ICgweEZGRkZGRiA+PiAxNikgKyAoMHhGRkZGRkYgJiAweGZmMDApICsgKCgweEZGRkZGRiAmIDB4ZmYpIDw8IDE2KSArICgxICogMjU1IDw8IDI0KTtcbiAgICAvL1RPRE8gY29udmVydCB0aGlzIHRvIGEgMzIgdW5zaWduZWQgaW50IGFycmF5XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIGNvbXBvbmVudHMgb2YgdGhlIHRyaWFuZ2xlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDFcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KFtcbiAgICAgICAgMCwgMSwgMiwgMCwgMywgMlxuICAgIF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIHZlcnRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICg4ICsgOCArIDE2KSAqIDQsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59XG5cblF1YWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUXVhZDtcblxuLyoqXG4gKiBNYXBzIHR3byBSZWN0YW5nbGUgdG8gdGhlIHF1YWRcbiAqIEBwYXJhbSByZWN0IHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZpcnN0IHJlY3RhbmdsZVxuICogQHBhcmFtIHJlY3QyIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHNlY29uZCByZWN0YW5nbGVcbiAqL1xuUXVhZC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24ocmVjdCwgcmVjdDIpXG57XG4gICAgdmFyIHggPSAwOyAvL3JlY3QyLnggLyByZWN0LndpZHRoO1xuICAgIHZhciB5ID0gMDsgLy9yZWN0Mi55IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1swXSA9IHg7XG4gICAgdGhpcy51dnNbMV0gPSB5O1xuXG4gICAgdGhpcy51dnNbMl0gPSB4ICsgcmVjdDIud2lkdGggLyByZWN0LndpZHRoO1xuICAgIHRoaXMudXZzWzNdID0geTtcblxuICAgIHRoaXMudXZzWzRdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIHRoaXMudXZzWzZdID0geDtcbiAgICB0aGlzLnV2c1s3XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIC8vLyAtLS0tLVxuICAgIHggPSByZWN0Mi54O1xuICAgIHkgPSByZWN0Mi55O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1swXSA9IHg7XG4gICAgdGhpcy52ZXJ0aWNlc1sxXSA9IHk7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzJdID0geCArIHJlY3QyLndpZHRoO1xuICAgIHRoaXMudmVydGljZXNbM10gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1s0XSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzVdID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudmVydGljZXNbNl0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0O1xuXG4gICAgdGhpcy51cGxvYWQoKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlciBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5RdWFkLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIFRPRE8gY291bGQgcHJvYmFibHkgYmUgcHVzaGVkIGludG8gb25lIHVwbG9hZCFcbiAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHRoaXMudmVydGV4QnVmZmVyICk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy52ZXJ0aWNlcyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgOCAqIDQsIHRoaXMudXZzKTtcblxuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDgpICogNCwgdGhpcy5jb2xvcnMpO1xufTtcblxuUXVhZC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWQ7XG5cblxuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKSxcbiAgICAgICAgXG4gICAgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuICAgIEdMRnJhbWVidWZmZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTEZyYW1lYnVmZmVyLFxuICAgIFxuICAgIFN0ZW5jaWxNYXNrU3RhY2sgPSByZXF1aXJlKCcuL1N0ZW5jaWxNYXNrU3RhY2snKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqL1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgaG9yaXpvbnRhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSB2ZXJ0aWNhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICogQHBhcmFtIHJvb3Qge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAqL1xudmFyIFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24sIHJvb3QpXG57XG4gICAgLy9UT0RPIFJlc29sdXRpb24gY291bGQgZ28gaGVyZSAoIGVnIGxvdyByZXMgYmx1cnMgKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vIG5leHQgdGltZSB0byBjcmVhdGUgYSBmcmFtZSBidWZmZXIgYW5kIHRleHR1cmVcblxuICAgIC8qKlxuICAgICAqIEEgZnJhbWUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEZyYW1lQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuXG4gICAgdGhpcy5jbGVhckNvbG9yID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIG9iamVjdCBhcyBhIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2JqZWN0J3MgdHJhbnNmb3JtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk1hdHJpeH1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lID0gbnVsbDtcbiAgICBcbiAgICB0aGlzLmRlZmF1bHRGcmFtZSA9IG5ldyBQSVhJLlJlY3RhbmdsZSgpO1xuICAgIHRoaXMuZGVzdGluYXRpb25GcmFtZSA9IG51bGw7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgc3RvcmVzIG1hc2tpbmcgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbEJ1ZmZlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzdGVuY2lsIG1hc2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gbmV3IFN0ZW5jaWxNYXNrU3RhY2soKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyBmaWx0ZXIgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDp0aGlzLFxuICAgICAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICAgICAgYm91bmRzOnRoaXMuc2l6ZVxuICAgICAgICB9XG4gICAgXTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEEgZnJhbWUgYnVmZmVyIG5lZWRzIGEgdGFyZ2V0IHRvIHJlbmRlciB0by4uXG4gICAgICAgICAgICBjcmVhdGUgYSB0ZXh0dXJlIGFuZCBiaW5kIGl0IGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAgICAgKi9cbiAgICAgICAgXG5cbiAgICAgICAvLyBUT0RPIGNoYW5nZSFcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGJ5IHRoZSBiYXNlIHRleHR1cmVcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGhpcy5mcmFtZUJ1ZmZlci50ZXh0dXJlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBtYWtlIGl0IGEgbnVsbCBmcmFtZWJ1ZmZlci4uXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZnJhbWVidWZmZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xufTtcblxuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRhcmdldDtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGFyZ2V0O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZmlsdGVyIHRleHR1cmUuXG4gKlxuICogQHBhcmFtIFtiaW5kPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIHdlIGJpbmQgb3VyIGZyYW1lYnVmZmVyIGJlZm9yZSBjbGVhcmluZz9cbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGNsZWFyQ29sb3IpXG57XG4gICAgdmFyIGNjID0gY2xlYXJDb2xvciB8fCB0aGlzLmNsZWFyQ29sb3JcbiAgICB0aGlzLmZyYW1lQnVmZmVyLmNsZWFyKGNjWzBdLGNjWzFdLGNjWzJdLGNjWzNdKS8vcixnLGIsYSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuYXR0YWNoU3RlbmNpbEJ1ZmZlciA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPRE8gY2hlY2sgaWYgc3RlbmNpbCBpcyBkb25lP1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBpcyB1c2VkIGZvciBtYXNraW5nIGluIHBpeGlcbiAgICAgKiBsZXRzIGNyZWF0ZSBvbmUgYW5kIHRoZW4gYWRkIGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVTdGVuY2lsKCk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCBpbml0aWFsaXNlcyB0aGUgdmlld3BvcnQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oZGVzdGluYXRpb25GcmFtZSwgc291cmNlRnJhbWUpXG57XG4gICAgLy9UT09EIHJlZmFjdG9yIHVzYWdlIG9mIGZyYW1lLi5cbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5iaW5kKCk7XG5cbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBkZXN0aW5hdGlvbkZyYW1lIHx8IHRoaXMuZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlZmF1bHRGcmFtZTtcbiAgICB0aGlzLnNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgdGhpcy5zb3VyY2VGcmFtZSB8fCBkZXN0aW5hdGlvbkZyYW1lO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUsIHRoaXMuc291cmNlRnJhbWUgKTtcblxuICAgIGlmKHRoaXMudHJhbnNmb3JtKVxuICAgIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFwcGVuZCh0aGlzLnRyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5kZXN0aW5hdGlvbkZyYW1lICE9PSB0aGlzLnNvdXJjZUZyYW1lKVxuICAgIHtcbiAgICAgICAgZ2wuZW5hYmxlKGdsLlNDSVNTT1JfVEVTVCk7XG4gICAgICAgIGdsLnNjaXNzb3IodGhpcy5kZXN0aW5hdGlvbkZyYW1lLngsIHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGgqIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgIH1cblxuXG4gICAgLy8gVE9ETyAtIGRvZXMgbm90IG5lZWQgdG8gYmUgdXBkYXRlZCBhbGwgdGhlIHRpbWU/P1xuICAgIGdsLnZpZXdwb3J0KHRoaXMuZGVzdGluYXRpb25GcmFtZS54LHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuXG5cbn07XG5cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBwcm9qZWN0aW9uIG1hdHJpeCBiYXNlZCBvbiBhIHByb2plY3Rpb24gZnJhbWUgKHdoaWNoIGlzIGEgcmVjdGFuZ2xlKVxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jYWxjdWxhdGVQcm9qZWN0aW9uID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcblxuICAgIHNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHBtLmlkZW50aXR5KCk7XG5cbiAgICAvLyBUT0RPOiBtYWtlIGRlc3Qgc2NhbGUgc291cmNlXG4gICAgaWYgKCF0aGlzLnJvb3QpXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBzb3VyY2VGcmFtZS54ICogcG0uYTtcbiAgICAgICAgcG0udHkgPSAtMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IC0xIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBSZXNpemVzIHRoZSB0ZXh0dXJlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7TnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gaGVpZ2h0IHtOdW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgd2lkdGggPSB3aWR0aCB8IDA7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDtcblxuICAgIGlmICh0aGlzLnNpemUud2lkdGggPT09IHdpZHRoICYmIHRoaXMuc2l6ZS5oZWlnaHQgPT09IGhlaWdodCkgXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZGVmYXVsdEZyYW1lLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5kZWZhdWx0RnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5yZXNpemUod2lkdGggKiB0aGlzLnJlc29sdXRpb24sIGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCBwcm9qZWN0aW9uRnJhbWUgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHJlbmRlciB0YXJnZXQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFN0ZW5jaWxNYXNrU3RhY2soKVxue1xuXHQvKipcbiAgICAgKiBUaGUgYWN0dWFsIHN0YWNrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVE9ETyBAYWx2aW5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvdW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb3VudCA9IDA7XG59XG5cblN0ZW5jaWxNYXNrU3RhY2sucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RlbmNpbE1hc2tTdGFjaztcbm1vZHVsZS5leHBvcnRzID0gU3RlbmNpbE1hc2tTdGFjaztcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBNYXBzIGdsIGJsZW5kIGNvbWJpbmF0aW9ucyB0byBXZWJHTFxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcbiAgICBvYmplY3QgPSBvYmplY3QgfHwge307XG5cbiAgICAvL1RPRE8gLSBwcmVtdWx0aXBseSBhbHBoYSB3b3VsZCBiZSBkaWZmZXJlbnQuXG4gICAgLy9hZGQgYSBib29sZWFuIGZvciB0aGF0IVxuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdICAgICAgICA9IFtnbC5PTkUsICAgICAgIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLkRTVF9BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk1VTFRJUExZXSAgICAgID0gW2dsLkRTVF9DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gW2dsLlNSQ19BTFBIQSwgZ2wuT05FXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VdICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSFVFXSAgICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcblxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpO1xuIiwiQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbCwgb2JqZWN0KVxue1xuXHRvYmplY3Q9IG9iamVjdCB8fCB7fTtcblxuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlBPSU5UU10gICAgICAgICA9IGdsLlBPSU5UUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FU10gICAgICAgICAgPSBnbC5MSU5FUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FX0xPT1BdICAgICAgPSBnbC5MSU5FX0xPT1A7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9TVFJJUF0gICAgID0gZ2wuTElORV9TVFJJUDtcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5UUklBTkdMRVNdICAgICAgPSBnbC5UUklBTkdMRVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBdID0gZ2wuVFJJQU5HTEVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXSAgID0gZ2wuVFJJQU5HTEVfRkFOO1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGk7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIFNwcml0ZSBvYmplY3QgaXMgdGhlIGJhc2UgZm9yIGFsbCB0ZXh0dXJlZCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIHRvIHRoZSBzY3JlZW5cbiAqXG4gKiBBIHNwcml0ZSBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGFuIGltYWdlIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSBmb3IgdGhpcyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gU3ByaXRlKHRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW5jaG9yIHNldHMgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLDAgdGhpcyBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMC41LDAuNSBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyBjZW50ZXJlZFxuICAgICAqIFNldHRpbmcgdGhlIGFuY2hvciB0byAxLDEgd291bGQgbWVhbiB0aGUgdGV4dHVyZSdzIG9yaWdpbiBwb2ludCB3aWxsIGJlIHRoZSBib3R0b20gcmlnaHQgY29ybmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuYW5jaG9yID0gbmV3IG1hdGguUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgc3ByaXRlICh0aGlzIGlzIGluaXRpYWxseSBzZXQgYnkgdGhlIHRleHR1cmUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBIHZhbHVlIG9mIDB4RkZGRkZGIHdpbGwgcmVtb3ZlIGFueSB0aW50IGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaGFkZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBzcHJpdGUuIFNldCB0byBudWxsIHRvIHJlbW92ZSBhIGN1cnJlbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5BYnN0cmFjdEZpbHRlcnxQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBjYWNoZWQgdmFsdWUgb2YgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8vIGNhbGwgdGV4dHVyZSBzZXR0ZXJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG4gICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlXG4gICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy52ZXJ0ZXhEYXRhID0gbmV3IEZsb2F0MzJBcnJheSg4KTtcbn1cblxuLy8gY29uc3RydWN0b3JcblNwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuc2NhbGUueCkgKiB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBNYXRoLmFicyh0aGlzLnNjYWxlLnkpICogdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc2lnbiA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS55KSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gc2lnbiAqIHZhbHVlIC8gdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5TcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIHNvIGlmIF93aWR0aCBpcyAwIHRoZW4gd2lkdGggd2FzIG5vdCBzZXQuLlxuICAgIGlmICh0aGlzLl93aWR0aClcbiAgICB7XG4gICAgICAgIHRoaXMuc2NhbGUueCA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS54KSAqIHRoaXMuX3dpZHRoIC8gdGhpcy50ZXh0dXJlLmZyYW1lLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnkgPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgKiB0aGlzLl9oZWlnaHQgLyB0aGlzLnRleHR1cmUuZnJhbWUuaGVpZ2h0O1xuICAgIH1cbn07XG5cblNwcml0ZS5wcm90b3R5cGUuY2FjbHVsYXRlVmVydGljZXMgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICB3dCA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICBhID0gd3QuYSwgYiA9IHd0LmIsIGMgPSB3dC5jLCBkID0gd3QuZCwgdHggPSB3dC50eCwgdHkgPSB3dC50eSxcbiAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDEsXG4gICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG4gICAgICAgIFxuICAgIGlmICh0cmltKVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkIGFuZCBpcyBub3QgYSB0aWxpbmdzcHJpdGUgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgIHcxID0gdHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgaDEgPSB0cmltLnkgLSB0aGlzLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgIGgwID0gaDEgKyB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG4gICAgfVxuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzBdID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVsxXSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzJdID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVszXSA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs0XSA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbNV0gPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs2XSA9IGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbN10gPSBkICogaDAgKyBiICogdzEgKyB0eTtcblxuXG59XG5cbi8qKlxuKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMudGV4dHVyZURpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMudmVydGV4RGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICB9XG4gICAgXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBTcHJpdGUgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgc3ByaXRlXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG4gICAgICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudmVydGV4RGlydHkgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWluWCxcbiAgICAgICAgICAgIG1heFgsXG4gICAgICAgICAgICBtaW5ZLFxuICAgICAgICAgICAgbWF4WSxcbiAgICAgICAgICAgIHZlcnRleERhdGEgPSB0aGlzLnZlcnRleERhdGE7XG5cbiAgICAgICAgdmFyIHgxID0gdmVydGV4RGF0YVswXVxuICAgICAgICB2YXIgeTEgPSB2ZXJ0ZXhEYXRhWzFdXG5cbiAgICAgICAgdmFyIHgyID0gdmVydGV4RGF0YVsyXVxuICAgICAgICB2YXIgeTIgPSB2ZXJ0ZXhEYXRhWzNdXG5cbiAgICAgICAgdmFyIHgzID0gdmVydGV4RGF0YVs0XVxuICAgICAgICB2YXIgeTMgPSB2ZXJ0ZXhEYXRhWzVdXG5cbiAgICAgICAgdmFyIHg0ID0gdmVydGV4RGF0YVs2XVxuICAgICAgICB2YXIgeTQgPSB2ZXJ0ZXhEYXRhWzddXG5cbiAgICAgICAgbWluWCA9IHgxO1xuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MTtcbiAgICAgICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICAgICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICAgICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgICAgICBtYXhYID0geDE7XG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkxO1xuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIC8vIGNoZWNrIGZvciBjaGlsZHJlblxuICAgICAgICBpZih0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkQm91bmRzID0gdGhpcy5jb250YWluZXJHZXRCb3VuZHMoKTtcblxuICAgICAgICAgICAgdzAgPSBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgdzEgPSBjaGlsZEJvdW5kcy54ICsgY2hpbGRCb3VuZHMud2lkdGg7XG4gICAgICAgICAgICBoMCA9IGNoaWxkQm91bmRzLnk7XG4gICAgICAgICAgICBoMSA9IGNoaWxkQm91bmRzLnkgKyBjaGlsZEJvdW5kcy5oZWlnaHQ7XG5cbiAgICAgICAgICAgIG1pblggPSAobWluWCA8IHcwKSA/IG1pblggOiB3MDtcbiAgICAgICAgICAgIG1pblkgPSAobWluWSA8IGgwKSA/IG1pblkgOiBoMDtcblxuICAgICAgICAgICAgbWF4WCA9IChtYXhYID4gdzEpID8gbWF4WCA6IHcxO1xuICAgICAgICAgICAgbWF4WSA9IChtYXhZID4gaDEpID8gbWF4WSA6IGgxO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2JvdW5kcy54ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB0aGlzLl9ib3VuZHMueSA9IC10aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRoaXMuX2JvdW5kcy5oZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgcmV0dXJuIHRoaXMuX2JvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHNwcml0ZVxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5TcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy50ZXh0dXJlLmNyb3Aud2lkdGggPD0gMCB8fCB0aGlzLnRleHR1cmUuY3JvcC5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyAgSWdub3JlIG51bGwgc291cmNlc1xuICAgIGlmICh0aGlzLnRleHR1cmUudmFsaWQpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgICAgICB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgICAgICBkeCxcbiAgICAgICAgICAgIGR5LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ7XG5cbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgICAgICAvLyBJZiBzbW9vdGhpbmdFbmFibGVkIGlzIHN1cHBvcnRlZCBhbmQgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIHNtb290aGluZyBwcm9wZXJ0eSBmb3IgdGhpcyB0ZXh0dXJlXG4gICAgICAgIHZhciBzbW9vdGhpbmdFbmFibGVkID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5zY2FsZU1vZGUgPT09IENPTlNULlNDQUxFX01PREVTLkxJTkVBUjtcbiAgICAgICAgaWYgKHJlbmRlcmVyLnNtb290aFByb3BlcnR5ICYmIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldICE9PSBzbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0W3JlbmRlcmVyLnNtb290aFByb3BlcnR5XSA9IHNtb290aGluZ0VuYWJsZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgdGV4dHVyZSBpcyB0cmltbWVkIHdlIG9mZnNldCBieSB0aGUgdHJpbSB4L3ksIG90aGVyd2lzZSB3ZSB1c2UgdGhlIGZyYW1lIGRpbWVuc2lvbnNcblxuICAgICAgICBpZih0ZXh0dXJlLnJvdGF0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2lkdGggPSB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBkeCA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgXG4gICAgICAgICAgICBkeCArPSB3aWR0aDtcblxuICAgICAgICAgICAgd3QudHggPSBkeSAqIHd0LmEgKyBkeCAqIHd0LmMgKyB3dC50eDtcbiAgICAgICAgICAgIHd0LnR5ID0gZHkgKiB3dC5iICsgZHggKiB3dC5kICsgd3QudHk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gd3QuYTtcbiAgICAgICAgICAgIHd0LmEgID0gLXd0LmM7XG4gICAgICAgICAgICB3dC5jICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICB0ZW1wID0gd3QuYjtcbiAgICAgICAgICAgIHd0LmIgID0gLXd0LmQ7XG4gICAgICAgICAgICB3dC5kICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICAvLyB0aGUgYW5jaG9yIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCBhYm92ZSwgc28gbGV0cyBzZXQgaXQgdG8gemVyb1xuICAgICAgICAgICAgZHggPSAwO1xuICAgICAgICAgICAgZHkgPSAwO1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC53aWR0aDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0ZXh0dXJlLnRyaW0ud2lkdGggOiB0aGlzLmFuY2hvci54ICogLXRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRleHR1cmUudHJpbS5oZWlnaHQgOiB0aGlzLmFuY2hvci55ICogLXRleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfVxuXG5cblxuICAgICAgICAvLyBBbGxvdyBmb3IgcGl4ZWwgcm91bmRpbmdcbiAgICAgICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB3dC5hLFxuICAgICAgICAgICAgICAgIHd0LmIsXG4gICAgICAgICAgICAgICAgd3QuYyxcbiAgICAgICAgICAgICAgICB3dC5kLFxuICAgICAgICAgICAgICAgICh3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMCxcbiAgICAgICAgICAgICAgICAod3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uKSB8IDBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGR4ID0gZHggfCAwO1xuICAgICAgICAgICAgZHkgPSBkeSB8IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgd3QudHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHd0LnR5ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcblxuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIC8vIFRPRE8gY2xlYW4gdXAgY2FjaGluZyAtIGhvdyB0byBjbGVhbiB1cCB0aGUgY2FjaGVzP1xuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC54ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmNyb3AueSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeSAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHNwcml0ZSBhbmQgb3B0aW9uYWxseSBpdHMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBbZGVzdHJveVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgY3VycmVudCB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICovXG5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveVRleHR1cmUsIGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYW5jaG9yID0gbnVsbDtcblxuICAgIGlmIChkZXN0cm95VGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUuZGVzdHJveShkZXN0cm95QmFzZVRleHR1cmUpO1xuICAgIH1cblxuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn07XG5cbi8vIHNvbWUgaGVscGVyIGZ1bmN0aW9ucy4uXG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgY3Jvc3Mtb3JpZ2luIHBhcmFtZXRlclxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBzY2FsZSBtb2RlLCBzZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGZyYW1lSWRcbiAqL1xuU3ByaXRlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTcHJpdGUodGV4dHVyZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGJhc2VkIG9uIGFuIGltYWdlIHVybFxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZUlkIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblNwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFNwcml0ZShUZXh0dXJlLmZyb21JbWFnZShpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSk7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyJyksXG4gICAgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzJyksXG4gICAgZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIGdsQ29yZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFNwcml0ZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9TcHJpdGVSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKiBSZW5kZXJlciBkZWRpY2F0ZWQgdG8gZHJhd2luZyBhbmQgYmF0Y2hpbmcgc3ByaXRlcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZVJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIHZhbHVlcyBzZW50IGluIHRoZSB2ZXJ0ZXggYnVmZmVyLlxuICAgICAqIHBvc2l0aW9uWCwgcG9zaXRpb25ZLCBjb2xvclIsIGNvbG9yRywgY29sb3JCID0gNVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydFNpemUgPSA1O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIHZlcnRleCBpbmZvcm1hdGlvbiBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBpbWFnZXMgaW4gdGhlIFNwcml0ZUJhdGNoIGJlZm9yZSBpdCBmbHVzaGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IENPTlNULlNQUklURV9CQVRDSF9TSVpFOyAvLyAyMDAwIGlzIGEgbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIC8gZGVza3RvcFxuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBpbiBvdXIgYmF0Y2hcbiAgICB2YXIgbnVtVmVydHMgPSAodGhpcy5zaXplICogNCkgKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYmF0Y2gsIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgICB2YXIgbnVtSW5kaWNlcyA9IHRoaXMuc2l6ZSAqIDY7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgdmVydGV4IGRhdGEgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdGhlIHZlcnRleCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEFycmF5QnVmZmVyKG51bVZlcnRzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgRmxvYXQzMkFycmF5IGZvciBwb3NpdGlvbnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG4gICAgXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBVaW50MzJBcnJheSBmb3IgdXZzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciBjb2xvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXMgb2YgdGhlIGdlb21ldHJ5IChxdWFkcykgdG8gZHJhd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzKHRoaXMuc2l6ZSlcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICBcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIHRoaXMuZ3JvdXBzID0gW107XG4gICAgXG4gICAgLy9UT0RPIC0gMzAwIGlzIGEgYml0IG1hZ2ljLCBmaWd1cmUgb3V0IGEgbmljZXIgYW1vdW50IVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zaXplOyBpKyspIFxuICAgIHtcbiAgICAgICAgdGhpcy5ncm91cHNbaV0gPSB7dGV4dHVyZXM6W10sIHRleHR1cmVDb3VudDowLCBpZHM6W10sIHNpemU6MCwgc3RhcnQ6MCwgYmxlbmQ6MH07IFxuICAgIH07XG4gICAgXG4gICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG5cbiAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbnVsbDsgICAgXG59XG5cblxuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ByaXRlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZVJlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdzcHJpdGUnLCBTcHJpdGVSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMuTUFYX1RFWFRVRVMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpO1xuXG4gICAgdGhpcy5fc2hhZGVyID0gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIoZ2wsIHRoaXMuTUFYX1RFWFRVRVMpLy9uZXcgVGV4dHVyZVNoYWRlcihnbCk7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXI7XG5cbiAgICAvLyBjcmVhdGUgYSBjb3VwbGUgb2YgYnVmZmVyc1xuICAgIHRoaXMudmVydGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlcihnbCwgbnVsbCwgZ2wuRFlOQU1JQ19EUkFXKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyKGdsLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIC8vIGJ1aWxkIHRoZSB2YW8gb2JqZWN0IHRoYXQgd2lsbCByZW5kZXIuLlxuICAgIHRoaXMudmFvID0gbmV3IGdsQ29yZS5WZXJ0ZXhBcnJheU9iamVjdChnbCk7XG5cbiAgICB0aGlzLnZhby5hZGRJbmRleCh0aGlzLmluZGV4QnVmZmVyKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCBnbC5VTlNJR05FRF9TSE9SVCwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDIgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgZ2wuVU5TSUdORURfQllURSwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDMgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlSWQsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDQgKiA0KTtcblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IDk5OTk5O1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHJlbmRlciB3aGVuIHVzaW5nIHRoaXMgc3ByaXRlYmF0Y2hcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChzcHJpdGUpXG57XG4gICAgLy9UT0RPIHNldCBibGVuZCBtb2Rlcy4uXG4gICAgLy8gY2hlY2sgdGV4dHVyZS4uXG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID49IHRoaXMuc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICB9XG5cbiAgXG4gICAgLy8gZ2V0IHRoZSB1dnMgZm9yIHRoZSB0ZXh0dXJlXG4gICBcblxuICAgIC8vIGlmIHRoZSB1dnMgaGF2ZSBub3QgdXBkYXRlZCB0aGVuIG5vIHBvaW50IHJlbmRlcmluZyBqdXN0IHlldCFcbiAgICBpZiAoIXNwcml0ZS50ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgIC8vIHB1c2ggYSB0ZXh0dXJlLlxuICAgIC8vIGluY3JlbWVudCB0aGUgYmF0Y2hzaXplXG4gICAgdmFyIG5leHRUZXh0dXJlID0gIHNwcml0ZS50ZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIHZhciBjdXJyZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRHcm91cDtcbiAgICB2YXIgaTtcblxuICAgIGlmKHRoaXMuY3VycmVudFRleHR1cmUgIT09IG5leHRUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG5leHRUZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgaWYoIW5leHRUZXh0dXJlLl9lbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5fZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5faWQgPSB0aGlzLnRleHR1cmVDb3VudDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy50ZXh0dXJlQ291bnQgPT09IHRoaXMuTUFYX1RFWFRVRVMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50OyBpKyspIFxuICAgICAgICAgICAgICAgIHsgICAgIFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnNpemUgPSB0aGlzLmN1cnJlbnRJbmRleCAtIGN1cnJlbnRHcm91cC5zdGFydDtcbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC5zdGFydCA9IHRoaXMuY3VycmVudEluZGV4O1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCsrXSA9IG5leHRUZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcbiAgICB9XG5cbiAgICAvLyBUT0RPIHRyaW0/P1xuICAgIHZhciBpbmRleCA9IHRoaXMuY3VycmVudEluZGV4ICogdGhpcy52ZXJ0Qnl0ZVNpemU7XG5cbiAgICB0aGlzLmN1cnJlbnRJbmRleCsrO1xuXG4gICAgLy8gdXBsb2FkIHRoZSBzcHJpdGUgZWxlbWV0bnMuLi5cbiAgICAvLyB0aGV5IGhhdmUgYWxsIHJlYWR5IGJlZW4gY2FsY3VsYXRlZCBzbyB3ZSBqdXN0IG5lZWQgdG8gcHVzaCB0aGVtIGludG8gdGhlIGJ1ZmZlci5cbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG4gICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMucG9zaXRpb25zO1xuICAgIHZhciB2ZXJ0ZXhEYXRhID0gc3ByaXRlLnZlcnRleERhdGFcbiAgICB2YXIgdGludCA9IChzcHJpdGUudGludCA+PiAxNikgKyAoc3ByaXRlLnRpbnQgJiAweGZmMDApICsgKChzcHJpdGUudGludCAmIDB4ZmYpIDw8IDE2KSArIChzcHJpdGUud29ybGRBbHBoYSAqIDI1NSA8PCAyNCk7XG4gICAgdmFyIHV2cyA9IHNwcml0ZS50ZXh0dXJlLl91dnMudXZzX3VpbnQzMjtcbiAgICAvL3h5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVswXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzFdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzBdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkOyBcbiAgICBcbiAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMl07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVszXTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1sxXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNF07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs1XTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1syXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs2XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzddO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzNdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb250ZW50IGFuZCBlbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPT09IDApcmV0dXJuO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gdGhpcy5jdXJyZW50R3JvdXAuc3RhcnQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgeyAgICAgXG4gICAgICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVzW2ldLl9lbmFibGVkID0gZmFsc2U7XG4gICAgfTtcbiAgIFxuICAgIC8vIGRvIHNvbWUgc21hcnQgYXJyYXkgc3R1ZmYuLlxuICAgIC8vIGRvdWJsZSBzaXplIHNvIHdlIGRvbnQgYWx3YXkgc3ViYXJyYXkgdGhlIGVsZW1lbnRzLi5cbiAgICAvLyB1cGxvYWQgdGhlIHZlcnRzIHRvIHRoZSBidWZmZXJcbiAgICBpZiAodGhpcy5jdXJyZW50QmF0Y2hTaXplID4gKCB0aGlzLnNpemUgKiAwLjUgKSApXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlci51cGxvYWQodGhpcy52ZXJ0aWNlcywgMCwgdHJ1ZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIG8gayAuLiBzdWIgYXJyYXkgaXMgU0xPVz4/XG4gICAgICAgIHZhciB2aWV3ID0gdGhpcy5wb3NpdGlvbnMuc3ViYXJyYXkoMCwgdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZSk7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh2aWV3LCAwLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBiaW5kIHNoYWRlci4uXG4gICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHRoaXMuX3NoYWRlcik7XG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggMCApO1xuXG4gICAgLy8vIHJlbmRlciB0aGUgZ3JvdXBzLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5ncm91cENvdW50OyBpKyspIHtcbiAgICAgICAgXG4gICAgICAgIHZhciBncm91cCA9IHRoaXMuZ3JvdXBzW2ldO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ3JvdXAudGV4dHVyZUNvdW50OyBqKyspIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFRleHR1cmUoZ3JvdXAudGV4dHVyZXNbal0sIGopO1xuICAgICAgICB9O1xuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGdyb3VwLnNpemUgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgZ3JvdXAuc3RhcnQgKiA2ICogMik7XG4gICAgfTtcblxuICAgIC8vIHJlc2V0IGVsZW1lbnRzIGZvciB0aGUgbmV4dCBmbHVzaFxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cENvdW50ID0gMDtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcbiAgICB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgc3ByaXRlIGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZhby5iaW5kKCk7XG59O1xuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xuICAgIHRoaXMudmFvLnVuYmluZCgpO1xufTtcbi8qKlxuICogRGVzdHJveXMgdGhlIFNwcml0ZUJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMudmVydGljZXMgPSBudWxsO1xuICAgIHRoaXMucG9zaXRpb25zID0gbnVsbDtcbiAgICB0aGlzLmNvbG9ycyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMudmVydGV4QnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuc3ByaXRlcyA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuXG5mdW5jdGlvbiBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgbWF4VGV4dHVyZXMpXG57XG4gICAgdmFyIHZlcnRleFNyYyA9IFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcbmF0dHJpYnV0ZSBmbG9hdCBhVGV4dHVyZUlkO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyBmbG9hdCB2VGV4dHVyZUlkO1xcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2VGV4dHVyZUlkID0gYVRleHR1cmVJZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cIjtcbiAgICB2YXIgZnJhZ21lbnRTcmMgPSAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxuJyArIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKSArIFwiXFxuXFxuXCIgKyBmcmFnVGVtcGxhdGVcblxuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMucmVwbGFjZSgvXFwlXFwlL2dpLCAnMTYnKTtcblxuICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXG4gICAgdmFyIHNhbXBsZVZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkrKykge1xuICAgICAgICBzYW1wbGVWYWx1ZXNbaV0gPSBpO1xuICAgIH07XG5cbiAgICBzaGFkZXIuYmluZCgpO1xuICAgIHNoYWRlci51bmlmb3Jtcy51U2FtcGxlcnMgPSBzYW1wbGVWYWx1ZXM7XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVNhbXBsZVNyYyhtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgc3JjID0gJ3ZlYzQgZ2V0U2FtcGxlRnJvbUFycmF5KHNhbXBsZXIyRCB0ZXh0dXJlc1slJV0sIGludCBuZHgsIHZlYzIgdXYpIHtcXG5cXG52ZWM0IGNvbG9yOydcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSBcbiAgICB7XG4gICAgICAgIGlmKGkgPiAwKXNyYyArPSAnXFxuZWxzZSAnO1xuICAgICAgICBpZihpIDwgbWF4VGV4dHVyZXMtMSlzcmMgKz0gJ2lmKG5keCA9PSAnICsgaSArICcpJztcbiAgICAgICAgc3JjICs9ICdcXG57JztcbiAgICAgICAgc3JjICs9ICdcXG5cXHRjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlc1snK2krJ10sIHV2KTsnO1xuICAgICAgICBzcmMgKz0gJ1xcbn0nO1xuICAgIH07XG5cbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAncmV0dXJuIGNvbG9yOyc7XG4gICAgc3JjICs9ICdcXG59JztcblxuICAgIHJldHVybiBzcmM7XG59XG5cbnZhciBmcmFnVGVtcGxhdGUgPSBbXG5cbiAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuICAgICd2YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7JyxcbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJzWyUlXTsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnZ2xfRnJhZ0NvbG9yID0gZ2V0U2FtcGxlRnJvbUFycmF5KHVTYW1wbGVycywgaW50KHZUZXh0dXJlSWQpLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvcjsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcjtcbiIsInZhciBTcHJpdGUgPSByZXF1aXJlKCcuLi9zcHJpdGVzL1Nwcml0ZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgVGV4dCBPYmplY3Qgd2lsbCBjcmVhdGUgYSBsaW5lIG9yIG11bHRpcGxlIGxpbmVzIG9mIHRleHQuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJyBpbiB5b3VyIHRleHQgc3RyaW5nLFxuICogb3IgYWRkIGEgd29yZFdyYXAgcHJvcGVydHkgc2V0IHRvIHRydWUgYW5kIGFuZCB3b3JkV3JhcFdpZHRoIHByb3BlcnR5IHdpdGggYSB2YWx1ZSBpbiB0aGUgc3R5bGUgb2JqZWN0LlxuICpcbiAqIEEgVGV4dCBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGEgc3RyaW5nIGFuZCBhIHN0eWxlIG9iamVjdFxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dCA9IG5ldyBQSVhJLlRleHQoJ1RoaXMgaXMgYSBwaXhpIHRleHQnLHtmb250IDogJzI0cHggQXJpYWwnLCBmaWxsIDogMHhmZjEwMTAsIGFsaWduIDogJ2NlbnRlcid9KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBbc3R5bGVdIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnRdIHtzdHJpbmd9IGRlZmF1bHQgJ2JvbGQgMjBweCBBcmlhbCcgVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gKiBAcGFyYW0gW3N0eWxlLmZpbGw9J2JsYWNrJ10ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdCBzaW5nbGUgbGluZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZV0ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBzdHJva2UgZS5nICdibHVlJywgJyNGQ0ZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZVRoaWNrbmVzcz0wXSB7bnVtYmVyfSBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgc3Ryb2tlLiBEZWZhdWx0IGlzIDAgKG5vIHN0cm9rZSlcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXAsIGl0IG5lZWRzIHdvcmRXcmFwIHRvIGJlIHNldCB0byB0cnVlXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvdz1mYWxzZV0ge2Jvb2xlYW59IFNldCBhIGRyb3Agc2hhZG93IGZvciB0aGUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93QW5nbGU9TWF0aC5QSS80XSB7bnVtYmVyfSBTZXQgYSBhbmdsZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAqIEBwYXJhbSBbc3R5bGUucGFkZGluZz0wXSB7bnVtYmVyfSBPY2Nhc2lvbmFsbHkgc29tZSBmb250cyBhcmUgY3JvcHBlZCBvbiB0b3Agb3IgYm90dG9tLiBBZGRpbmcgc29tZSBwYWRkaW5nIHdpbGxcbiAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVKb2luPSdtaXRlciddIHtzdHJpbmd9IFRoZSBsaW5lSm9pbiBwcm9wZXJ0eSBzZXRzIHRoZSB0eXBlIG9mIGNvcm5lciBjcmVhdGVkLCBpdCBjYW4gcmVzb2x2ZVxuICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAqICAgICAgb3IgaW5jcmVhc2UgdGhlIHNwaWtpbmVzcyBvZiByZW5kZXJlZCB0ZXh0LlxuICovXG5mdW5jdGlvbiBUZXh0KHRleHQsIHN0eWxlLCByZXNvbHV0aW9uKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgZWxlbWVudCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gdG9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGhcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIGNhbnZhcy5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXModGhpcy5jYW52YXMpO1xuICAgIHRleHR1cmUudHJpbSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuICAgIFNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3ByaXRlLnByb3RvdHlwZSk7XG5UZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHQ7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHQ7XG5cblRleHQuZm9udFByb3BlcnRpZXNDYWNoZSA9IHt9O1xuVGV4dC5mb250UHJvcGVydGllc0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuVGV4dC5mb250UHJvcGVydGllc0NvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHQucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueCAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dCwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc2NhbGUueSAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlIC8gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBzdHlsZSBvZiB0aGUgdGV4dFxuICAgICAqXG4gICAgICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmZvbnQ9J2JvbGQgMjBwdCBBcmlhbCddIHtzdHJpbmd9IFRoZSBzdHlsZSBhbmQgc2l6ZSBvZiB0aGUgZm9udFxuICAgICAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGVnICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnN0cm9rZT0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlZyAnYmx1ZScsICcjRkNGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICAgICAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcFdpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIGF0IHdoaWNoIHRleHQgd2lsbCB3cmFwXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSGVpZ2h0XSB7bnVtYmVyfSBUaGUgbGluZSBoZWlnaHQsIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgc3BhY2UgdGhhdCBhIGxldHRlciB1c2VzXG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfG51bWJlcn0gQSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgb24gdGhlIGRyb3BzaGFkb3cgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzZdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0JsdXI9MF0ge251bWJlcn0gU2V0IGEgc2hhZG93IGJsdXIgcmFkaXVzXG4gICAgICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICAgICAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLnRleHRCYXNlbGluZT0nYWxwaGFiZXRpYyddIHtzdHJpbmd9IFRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dCB0aGF0IGlzIHJlbmRlcmVkLlxuICAgICAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gICAgICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gICAgICogQHBhcmFtIFtzdHlsZS5taXRlckxpbWl0PTEwXSB7bnVtYmVyfSBUaGUgbWl0ZXIgbGltaXQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdtaXRlcicgbGluZUpvaW4gbW9kZS4gVGhpcyBjYW4gcmVkdWNlXG4gICAgICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICBzdHlsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdHlsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3R5bGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZmlsbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5maWxsID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5maWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5zdHJva2UgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5zdHJva2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmRyb3BTaGFkb3dDb2xvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlLmZvbnQgPSBzdHlsZS5mb250IHx8ICdib2xkIDIwcHQgQXJpYWwnO1xuICAgICAgICAgICAgc3R5bGUuZmlsbCA9IHN0eWxlLmZpbGwgfHwgJ2JsYWNrJztcbiAgICAgICAgICAgIHN0eWxlLmFsaWduID0gc3R5bGUuYWxpZ24gfHwgJ2xlZnQnO1xuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gc3R5bGUuc3Ryb2tlIHx8ICdibGFjayc7IC8vcHJvdmlkZSBhIGRlZmF1bHQsIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2lzc3Vlcy8xMzZcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZVRoaWNrbmVzcyA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyB8fCAwO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXAgPSBzdHlsZS53b3JkV3JhcCB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLndvcmRXcmFwV2lkdGggPSBzdHlsZS53b3JkV3JhcFdpZHRoIHx8IDEwMDtcblxuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvdyA9IHN0eWxlLmRyb3BTaGFkb3cgfHwgZmFsc2U7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3IgfHwgJyMwMDAwMDAnO1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0FuZ2xlID0gc3R5bGUuZHJvcFNoYWRvd0FuZ2xlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93QW5nbGUgOiBNYXRoLlBJIC8gNjtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSA9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlIDogNTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXIgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dCbHVyIDogMDsgLy9zaGFkb3dCbHVyIGlzICcwJyBieSBkZWZhdWx0IGFjY29yZGluZyB0byBIVE1MXG5cbiAgICAgICAgICAgIHN0eWxlLnBhZGRpbmcgPSBzdHlsZS5wYWRkaW5nIHx8IDA7XG5cbiAgICAgICAgICAgIHN0eWxlLnRleHRCYXNlbGluZSA9IHN0eWxlLnRleHRCYXNlbGluZSB8fCAnYWxwaGFiZXRpYyc7XG5cbiAgICAgICAgICAgIHN0eWxlLmxpbmVKb2luID0gc3R5bGUubGluZUpvaW4gfHwgJ21pdGVyJztcbiAgICAgICAgICAgIHN0eWxlLm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0IHx8IDEwO1xuXG4gICAgICAgICAgICB0aGlzLl9zdHlsZSA9IHN0eWxlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjb3B5IGZvciB0aGUgdGV4dCBvYmplY3QuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHRleHQpe1xuICAgICAgICAgICAgdGV4dCA9IHRleHQudG9TdHJpbmcoKSB8fCAnICc7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dCA9PT0gdGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdGV4dDtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHN0eWxlID0gdGhpcy5fc3R5bGU7XG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuXG4gICAgLy8gd29yZCB3cmFwXG4gICAgLy8gcHJlc2VydmUgb3JpZ2luYWwgdGV4dFxuICAgIHZhciBvdXRwdXRUZXh0ID0gc3R5bGUud29yZFdyYXAgPyB0aGlzLndvcmRXcmFwKHRoaXMuX3RleHQpIDogdGhpcy5fdGV4dDtcblxuICAgIC8vIHNwbGl0IHRleHQgaW50byBsaW5lc1xuICAgIHZhciBsaW5lcyA9IG91dHB1dFRleHQuc3BsaXQoLyg/OlxcclxcbnxcXHJ8XFxuKS8pO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgd2lkdGhcbiAgICB2YXIgbGluZVdpZHRocyA9IG5ldyBBcnJheShsaW5lcy5sZW5ndGgpO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBmb250UHJvcGVydGllcyA9IHRoaXMuZGV0ZXJtaW5lRm9udFByb3BlcnRpZXMoc3R5bGUuZm9udCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBsaW5lV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQobGluZXNbaV0pLndpZHRoO1xuICAgICAgICBsaW5lV2lkdGhzW2ldID0gbGluZVdpZHRoO1xuICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxpbmVXaWR0aCk7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gbWF4TGluZVdpZHRoICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgd2lkdGggKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gKCB3aWR0aCArIHRoaXMuY29udGV4dC5saW5lV2lkdGggKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIC8vIGNhbGN1bGF0ZSB0ZXh0IGhlaWdodFxuICAgIHZhciBsaW5lSGVpZ2h0ID0gdGhpcy5zdHlsZS5saW5lSGVpZ2h0IHx8IGZvbnRQcm9wZXJ0aWVzLmZvbnRTaXplICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuXG4gICAgdmFyIGhlaWdodCA9IGxpbmVIZWlnaHQgKiBsaW5lcy5sZW5ndGg7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBoZWlnaHQgKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9ICggaGVpZ2h0ICsgdGhpcy5fc3R5bGUucGFkZGluZyAqIDIgKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMuY29udGV4dC5zY2FsZSggdGhpcy5yZXNvbHV0aW9uLCB0aGlzLnJlc29sdXRpb24pO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIH1cblxuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxTdHlsZT1cIiNGRjAwMDBcIjtcbiAgICAvL3RoaXMuY29udGV4dC5maWxsUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIHRoaXMuY29udGV4dC5mb250ID0gc3R5bGUuZm9udDtcbiAgICB0aGlzLmNvbnRleHQuc3Ryb2tlU3R5bGUgPSBzdHlsZS5zdHJva2U7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcbiAgICB0aGlzLmNvbnRleHQudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lO1xuICAgIHRoaXMuY29udGV4dC5saW5lSm9pbiA9IHN0eWxlLmxpbmVKb2luO1xuICAgIHRoaXMuY29udGV4dC5taXRlckxpbWl0ID0gc3R5bGUubWl0ZXJMaW1pdDtcblxuICAgIHZhciBsaW5lUG9zaXRpb25YO1xuICAgIHZhciBsaW5lUG9zaXRpb25ZO1xuXG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBpZiAoc3R5bGUuZHJvcFNoYWRvd0JsdXIgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3I7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Qmx1ciA9IHN0eWxlLmRyb3BTaGFkb3dCbHVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4U2hhZG93T2Zmc2V0ID0gTWF0aC5jb3Moc3R5bGUuZHJvcFNoYWRvd0FuZ2xlKSAqIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICAgICAgdmFyIHlTaGFkb3dPZmZzZXQgPSBNYXRoLnNpbihzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogbGluZUhlaWdodCkgKyBmb250UHJvcGVydGllcy5hc2NlbnQ7XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblggKyB4U2hhZG93T2Zmc2V0LCBsaW5lUG9zaXRpb25ZICsgeVNoYWRvd09mZnNldCArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9zZXQgY2FudmFzIHRleHQgc3R5bGVzXG4gICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmZpbGw7XG5cbiAgICAvL2RyYXcgbGluZXMgbGluZSBieSBsaW5lXG4gICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICBpZiAoc3R5bGUuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHlsZS5zdHJva2UgJiYgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVUZXh0dXJlKCk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLnRyaW0ueCA9IDA7XG4gICAgdGV4dHVyZS50cmltLnkgPSAtdGhpcy5fc3R5bGUucGFkZGluZztcblxuICAgIHRleHR1cmUudHJpbS53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRleHR1cmUudHJpbS5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgLSB0aGlzLl9zdHlsZS5wYWRkaW5nKjI7XG5cbiAgICB0aGlzLl93aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuX2hlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZW1pdCgndXBkYXRlJywgIHRleHR1cmUuYmFzZVRleHR1cmUpO1xuXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKi9cblRleHQucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgLy90aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUucmVuZGVyV2ViR0wuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgIC8vICAgdGhpcy5yZXNvbHV0aW9uID0gMS8vcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGFzY2VudCwgZGVzY2VudCBhbmQgZm9udFNpemUgb2YgYSBnaXZlbiBmb250U3R5bGVcbiAqXG4gKiBAcGFyYW0gZm9udFN0eWxlIHtvYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5kZXRlcm1pbmVGb250UHJvcGVydGllcyA9IGZ1bmN0aW9uIChmb250U3R5bGUpXG57XG4gICAgdmFyIHByb3BlcnRpZXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXTtcblxuICAgIGlmICghcHJvcGVydGllcylcbiAgICB7XG4gICAgICAgIHByb3BlcnRpZXMgPSB7fTtcblxuICAgICAgICB2YXIgY2FudmFzID0gVGV4dC5mb250UHJvcGVydGllc0NhbnZhcztcbiAgICAgICAgdmFyIGNvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dDtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgdmFyIHdpZHRoID0gTWF0aC5jZWlsKGNvbnRleHQubWVhc3VyZVRleHQoJ3xNw4lxJykud2lkdGgpO1xuICAgICAgICB2YXIgYmFzZWxpbmUgPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnTScpLndpZHRoKTtcbiAgICAgICAgdmFyIGhlaWdodCA9IDIgKiBiYXNlbGluZTtcblxuICAgICAgICBiYXNlbGluZSA9IGJhc2VsaW5lICogMS40IHwgMDtcblxuICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjZjAwJztcbiAgICAgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgY29udGV4dC50ZXh0QmFzZWxpbmUgPSAnYWxwaGFiZXRpYyc7XG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMwMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxUZXh0KCd8TcOJcScsIDAsIGJhc2VsaW5lKTtcblxuICAgICAgICB2YXIgaW1hZ2VkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCkuZGF0YTtcbiAgICAgICAgdmFyIHBpeGVscyA9IGltYWdlZGF0YS5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lID0gd2lkdGggKiA0O1xuXG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIHZhciBpZHggPSAwO1xuICAgICAgICB2YXIgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGFzY2VudC4gc2NhbiBmcm9tIHRvcCB0byBib3R0b20gdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGJhc2VsaW5lOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggKz0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuYXNjZW50ID0gYmFzZWxpbmUgLSBpO1xuXG4gICAgICAgIGlkeCA9IHBpeGVscyAtIGxpbmU7XG4gICAgICAgIHN0b3AgPSBmYWxzZTtcblxuICAgICAgICAvLyBkZXNjZW50LiBzY2FuIGZyb20gYm90dG9tIHRvIHRvcCB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSBoZWlnaHQ7IGkgPiBiYXNlbGluZTsgaS0tKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGluZTsgaiArPSA0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0b3ApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWR4IC09IGxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLmRlc2NlbnQgPSBpIC0gYmFzZWxpbmU7XG4gICAgICAgIHByb3BlcnRpZXMuZm9udFNpemUgPSBwcm9wZXJ0aWVzLmFzY2VudCArIHByb3BlcnRpZXMuZGVzY2VudDtcblxuICAgICAgICBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXSA9IHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgbmV3bGluZXMgdG8gYSBzdHJpbmcgdG8gaGF2ZSBpdCBvcHRpbWFsbHkgZml0IGludG8gdGhlIGhvcml6b250YWxcbiAqIGJvdW5kcyBzZXQgYnkgdGhlIFRleHQgb2JqZWN0J3Mgd29yZFdyYXBXaWR0aCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUud29yZFdyYXAgPSBmdW5jdGlvbiAodGV4dClcbntcbiAgICAvLyBHcmVlZHkgd3JhcHBpbmcgYWxnb3JpdGhtIHRoYXQgd2lsbCB3cmFwIHdvcmRzIGFzIHRoZSBsaW5lIGdyb3dzIGxvbmdlclxuICAgIC8vIHRoYW4gaXRzIGhvcml6b250YWwgYm91bmRzLlxuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgICB2YXIgd29yZFdyYXBXaWR0aCA9IHRoaXMuX3N0eWxlLndvcmRXcmFwV2lkdGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcGFjZUxlZnQgPSB3b3JkV3JhcFdpZHRoO1xuICAgICAgICB2YXIgd29yZHMgPSBsaW5lc1tpXS5zcGxpdCgnICcpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdvcmRzLmxlbmd0aDsgaisrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgd29yZFdpZHRoID0gdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KHdvcmRzW2pdKS53aWR0aDtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGhXaXRoU3BhY2UgPSB3b3JkV2lkdGggKyB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQoJyAnKS53aWR0aDtcbiAgICAgICAgICAgIGlmIChqID09PSAwIHx8IHdvcmRXaWR0aFdpdGhTcGFjZSA+IHNwYWNlTGVmdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHByaW50aW5nIHRoZSBuZXdsaW5lIGlmIGl0J3MgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxpbmUgdGhhdCBpc1xuICAgICAgICAgICAgICAgIC8vIGdyZWF0ZXIgdGhhbiB0aGUgd29yZCB3cmFwIHdpZHRoLlxuICAgICAgICAgICAgICAgIGlmIChqID4gMClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdvcmRzW2pdO1xuICAgICAgICAgICAgICAgIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGggLSB3b3JkV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0IC09IHdvcmRXaWR0aFdpdGhTcGFjZTtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyAnICsgd29yZHNbal07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaSA8IGxpbmVzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBUZXh0IGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIFRleHRcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIHJldHVybiBTcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcy5jYWxsKHRoaXMsIG1hdHJpeCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dCBvYmplY3QuXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9dHJ1ZV0ge2Jvb2xlYW59IHdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZVRleHR1cmUpXG57XG4gICAgLy8gbWFrZSBzdXJlIHRvIHJlc2V0IHRoZSB0aGUgY29udGV4dCBhbmQgY2FudmFzLi4gZG9udCB3YW50IHRoaXMgaGFuZ2luZyBhcm91bmQgaW4gbWVtb3J5IVxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xuXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG59O1xuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9GaWx0ZXJNYW5hZ2VyJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgdGVtcFJlY3QgPSBuZXcgbWF0aC5SZWN0YW5nbGUoKTtcblxuLyoqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBCYXNlUmVuZGVyVGV4dHVyZSBzaG91bGQgYmUgcHJlbG9hZGVkXG4gKiBvdGhlcndpc2UgYmxhY2sgcmVjdGFuZ2xlcyB3aWxsIGJlIGRyYXduIGluc3RlYWQuXG4gKlxuICogQSBCYXNlUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIEJhc2VyZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIDgwMCwgNjAwKTtcbiAqIHZhciBzcHJpdGUgPSBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJzcGluT2JqXzAxLnBuZ1wiKTtcbiAqXG4gKiBzcHJpdGUucG9zaXRpb24ueCA9IDgwMC8yO1xuICogc3ByaXRlLnBvc2l0aW9uLnkgPSA2MDAvMjtcbiAqIHNwcml0ZS5hbmNob3IueCA9IDAuNTtcbiAqIHNwcml0ZS5hbmNob3IueSA9IDAuNTtcbiAqXG4gKiBCYXNlcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgQmFzZXJlbmRlclRleHR1cmVcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgZm9yIHRoaXMgQmFzZVJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgaWYgKCFyZW5kZXJlcilcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNyZWF0ZSBCYXNlUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgbnVsbCwgc2NhbGVNb2RlKTtcbiAgIFxuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAxMDA7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OOztcbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIERyYXcvcmVuZGVyIHRoZSBnaXZlbiBEaXNwbGF5T2JqZWN0IG9udG8gdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheU9iamVjdCBhbmQgZGVzY2VuZGVudHMgYXJlIHRyYW5zZm9ybWVkIGR1cmluZyB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBJZiBgdXBkYXRlVHJhbnNmb3JtYCBpcyB0cnVlIHRoZW4gdGhlIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkIGJlZm9yZSB0aGVcbiAgICAgKiBtZXRob2QgcmV0dXJucy4gT3RoZXJ3aXNlIGl0IGlzIHVwIHRvIHRoZSBjYWxsaW5nIGNvZGUgdG8gY29ycmVjdGx5IHVzZSBvciByZXNldFxuICAgICAqIHRoZSB0cmFuc2Zvcm1lZCBkaXNwbGF5IG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgaXMgYWx3YXlzIHJlbmRlcmVkIHdpdGggYSB3b3JsZEFscGhhIHZhbHVlIG9mIDEuXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAgICAgKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBPcHRpb25hbCBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIGRpc3BsYXkgb2JqZWN0IGJlZm9yZSByZW5kZXJpbmcuXG4gICAgICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICAgICAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gICAgICogIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkLiBOb3QgcmVzdG9yaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBhIGxpdHRsZSBmYXN0ZXIuXG4gICAgICovXG4gICAgdGhpcy5yZW5kZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgQmFzZVJlbmRlclRleHR1cmUgdXNlcy4gQSBCYXNlUmVuZGVyVGV4dHVyZSBjYW4gb25seSBiZWxvbmcgdG8gb25lIHJlbmRlcmVyIGF0IHRoZSBtb21lbnQgaWYgaXRzIHdlYkdMLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgUmVuZGVyVGFyZ2V0KGdsLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5zY2FsZU1vZGUsIHRoaXMucmVzb2x1dGlvbik7Ly8sIHRoaXMudGhpcy5zY2FsZU1vZGUpO1xuICAgICAgICB0aGlzLl9nbFRleHR1cmVzW2dsLmlkXSA9ICB0aGlzLnRleHR1cmVCdWZmZXIudGV4dHVyZTtcbiAgICAgICAgXG4gICAgICAgIC8vVE9ETyByZWZhY3RvciBmaWx0ZXIgbWFuYWdlci4uIGFzIHJlYWxseSBpdHMgbm8gbG9uZ2VyIGEgbWFuYWdlciBpZiB3ZSB1c2UgaXQgaGVyZS4uXG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJXZWJHTDtcblxuICAgICAgICAvLyB0aGUgY3JlYXRpb24gb2YgYSBmaWx0ZXIgbWFuYWdlciB1bmJpbmRzIHRoZSBidWZmZXJzLi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbiAgICAgICAgaWYodGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0KXRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJDYW52YXM7XG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIodGhpcy53aWR0aCogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbn1cblxuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlVGV4dHVyZS5wcm90b3R5cGUpO1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzZVJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VSZW5kZXJUZXh0dXJlO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGlmICh3aWR0aCA9PT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT09IHRoaXMuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5maWx0ZXJNYW5hZ2VyKVxuICAgIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLnJlbmRlcmVyLmdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcihmYWxzZSwgZGVzdGluYXRpb25GcmFtZSk7XG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gKHVwZGF0ZVRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSA/IHVwZGF0ZVRyYW5zZm9ybSA6IHRydWU7Ly8hdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnRyYW5zZm9ybSA9IG1hdHJpeDtcblxuICAgIC8vVE9ETyBub3QgYSBmYW4gdGhhdCB0aGlzIGlzIGhlcmUuLi4gaXQgd2lsbCBtb3ZlIVxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5hY3RpdmF0ZSgpO1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgaWYgKHVwZGF0ZVRyYW5zZm9ybSlcbiAgICB7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIG1hdHJpeCBvZiB0aGUgZGlzcGxhdHlPYmplY3QuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmlkZW50aXR5KCk7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgICAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRlbXBSZWN0LndpZHRoID0gZnJhbWUuaGVpZ2h0O1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IGZyYW1lLndpZHRoO1xuICAgXG4gICAgLy9UT0RPIHJlbmFtZSB0ZXh0dXJlQnVmZmVyIHRvIHJlbmRlclRhcmdldC4uXG4gICAgdmFyIHRlbXAgPSAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyID0gdGhpcy5maWx0ZXJNYW5hZ2VyO1xuICAgIFxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKGZyYW1lLCB0ZW1wUmVjdCk7XG4gICAgY29uc29sZS5sb2coZGlzcGxheU9iamVjdClcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgdGhpcy50ZXh0dXJlQnVmZmVyLCBjbGVhcik7XG5cbiAgIC8vIGNvbnNvbGUubG9nKFwiUkVOREVSSU5HIFwiKTtcbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0ZW1wO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXJdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChmcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAhIXVwZGF0ZVRyYW5zZm9ybTtcblxuICAgIHZhciB3dCA9IHRlbXBNYXRyaXg7XG5cbiAgICB3dC5pZGVudGl0eSgpO1xuXG4gICAgaWYgKG1hdHJpeClcbiAgICB7XG4gICAgICAgIHd0LmFwcGVuZChtYXRyaXgpO1xuICAgIH1cblxuXG4gICAgd3QudHggKz0gZnJhbWUueDtcbiAgICB3dC50eSArPSBmcmFtZS55O1xuXG4gICAgdmFyIGNhY2hlZFd0ID0gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybTtcbiAgICBcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gd3Q7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgdmFyIGksIGo7XG5cbiAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgXG4vLyAgICB0aGlzLnRleHR1cmVCdWZmZXIuXG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dDtcblxuICAgIHZhciByZWFsUmVzb2x1dGlvbiA9IHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHJlYWxSZXNvbHV0aW9uO1xuXG4gICAgaWYoZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9PT0gd3QpXG4gICAge1xuICAgICAgICAvLyBmaXhlcyBjYWNoZUFzQml0bWFwIEhhcHBlbmluZyBkdXJpbmcgdGhlIGFib3ZlLi5cbiAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IGNhY2hlZFd0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gZGVzdHJveUJhc2Uge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCB0cnVlKTtcblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICAvLyBkZXN0cm95IHRoZSBmaWx0ZXJtYW5hZ2VyLi5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEltYWdlID0gZnVuY3Rpb24gKGZyYW1lKVxue1xuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLnNyYyA9IHRoaXMuZ2V0QmFzZTY0KGZyYW1lKTtcbiAgICByZXR1cm4gaW1hZ2U7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIEJhc2VSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRCYXNlNjQgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRDYW52YXMoZnJhbWUpLnRvRGF0YVVSTCgpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB0byBpdCBhbmQgdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBBIENhbnZhcyBlbGVtZW50IHdpdGggdGhlIHRleHR1cmUgcmVuZGVyZWQgb24uXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgIFxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgQ2FudmFzQnVmZmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHRlbXBDYW52YXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0RhdGEuZGF0YS5zZXQod2ViR0xQaXhlbHMpO1xuXG4gICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGZyYW1lLndpZHRoID09PSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLndpZHRoICYmIFxuICAgICAgICAgICBmcmFtZS5oZWlnaHQgPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIoZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcbiAgICAgICAgICAgIHZhciBjYW52YXNEYXRhID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNvbnRleHQuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggICogcmVzb2x1dGlvbiwgZnJhbWUueSAqIHJlc29sdXRpb24sIGZyYW1lLndpZHRoICogcmVzb2x1dGlvbiwgZnJhbWUuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0ZW1wQ2FudmFzLmNhbnZhcztcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKCBmcmFtZSApXG57XG4gICAgaWYoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgZnJhbWUud2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS53aWR0aDtcbiAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IGZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YShmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoZnJhbWUsIHgsIHkpXG57XG4gICAgdGVtcFJlY3QueCA9IHg7XG4gICAgdGVtcFJlY3QueSA9IHk7XG4gICAgdGVtcFJlY3Qud2lkdGggPSAxIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZihmcmFtZSlcbiAgICB7XG4gICAgICAgIHRlbXBSZWN0LnggKz0gZnJhbWUueDtcbiAgICAgICAgdGVtcFJlY3QueSArPSBmcmFtZS55O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFBpeGVscyh0ZW1wUmVjdCk7XG59O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZS4gQWxsIHRleHR1cmVzIGhhdmUgYSBiYXNlIHRleHR1cmUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBmb3IgZGV2aWNlcyB3aXRoIGRpZmZlcmVudCBwaXhlbCByYXRpb3NcbiAqL1xuZnVuY3Rpb24gQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnVpZCA9IHV0aWxzLnVpZCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgYmFzZSB0ZXh0dXJlIHNldCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAxMDA7XG5cbiAgICAvLyBUT0RPIGRvY3NcbiAgICAvLyB1c2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgZGltZW5zaW9ucyBvZiB0aGUgc291cmNlXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIHdpZHRoIG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsV2lkdGggPSAxMDA7XG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIGhlaWdodCBvZiB0aGUgc291cmNlIG9mIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucmVhbEhlaWdodCA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlIHRvIGFwcGx5IHdoZW4gc2NhbGluZyB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlNDQUxFX01PREVTLkxJTkVBUlxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSBvbmNlIHRoZSBiYXNlIHRleHR1cmUgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG5ldmVyIHRydWUgaWYgdGhlIHVuZGVybHlpbmcgc291cmNlIGZhaWxzIHRvIGxvYWQgb3IgaGFzIG5vIHRleHR1cmUgZGF0YS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIGlmIHRoZSBzb3VyY2UgaXMgY3VycmVudGx5IGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBJZiBhbiBJbWFnZSBzb3VyY2UgaXMgbG9hZGluZyB0aGUgJ2xvYWRlZCcgb3IgJ2Vycm9yJyBldmVudCB3aWxsIGJlXG4gICAgICogZGlzcGF0Y2hlZCB3aGVuIHRoZSBvcGVyYXRpb24gZW5kcy4gQW4gdW5kZXJ5bGluZyBzb3VyY2UgdGhhdCBpc1xuICAgICAqIGltbWVkaWF0ZWx5LWF2YWlsYWJsZSBieXBhc3NlcyBsb2FkaW5nIGVudGlyZWx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGltYWdlIHNvdXJjZSB0aGF0IGlzIHVzZWQgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogVE9ETzogTWFrZSB0aGlzIGEgc2V0dGVyIHRoYXQgY2FsbHMgbG9hZFNvdXJjZSgpO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SW1hZ2V8Q2FudmFzfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuc291cmNlID0gbnVsbDsgLy8gc2V0IGluIGxvYWRTb3VyY2UsIGlmIGF0IGFsbFxuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgaWYgUkdCIGNoYW5uZWxzIHNob3VsZCBiZSBwcmUtbXVsdGlwbGllZCBieSBBbHBoYSAgKFdlYkdMIG9ubHkpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgb3Igbm90IHRoZSB0ZXh0dXJlIGlzIGEgcG93ZXIgb2YgdHdvLCB0cnkgdG8gdXNlIHBvd2VyIG9mIHR3byB0ZXh0dXJlcyBhcyBtdWNoIGFzIHlvdSBjYW5cbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSBmYWxzZTtcblxuICAgIC8vIHVzZWQgZm9yIHdlYkdMXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgYSBtaXBtYXAgb2YgdGhpcyB0ZXh0dXJlIG5lZWRzIHRvIGJlIGdlbmVyYXRlZC4gVGhpcyB2YWx1ZSBuZWVkcyB0byBiZSBzZXQgYmVmb3JlIHRoZSB0ZXh0dXJlIGlzIHVzZWRcbiAgICAgKiBBbHNvIHRoZSB0ZXh0dXJlIG11c3QgYmUgYSBwb3dlciBvZiB0d28gc2l6ZSB0byB3b3JrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubWlwbWFwID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBBIG1hcCBvZiByZW5kZXJlciBJRHMgdG8gd2ViZ2wgdGV4dHVyZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIFdlYkdMVGV4dHVyZT59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbFRleHR1cmVzID0ge307XG4gICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5faWQgPSAwO1xuICAgIFxuICAgIC8vIGlmIG5vIHNvdXJjZSBwYXNzZWQgZG9uJ3QgdHJ5IHRvIGxvYWRcbiAgICBpZiAoc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5sb2FkU291cmNlKHNvdXJjZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZpbmlzaGVzIGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZGVkXG4gICAgICogQG1lbWJlcm9mIFBJWEkuQmFzZVRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZhaWxzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG59XG5cbkJhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdGV4dHVyZSBvbiBhbGwgdGhlIHdlYmdsIHJlbmRlcmVycywgdGhpcyBhbHNvIGFzc3VtZXMgdGhlIHNyYyBoYXMgY2hhbmdlZC5cbiAqXG4gKiBAZmlyZXMgdXBkYXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVhbFdpZHRoID0gdGhpcy5zb3VyY2UubmF0dXJhbFdpZHRoIHx8IHRoaXMuc291cmNlLndpZHRoO1xuICAgIHRoaXMucmVhbEhlaWdodCA9IHRoaXMuc291cmNlLm5hdHVyYWxIZWlnaHQgfHwgdGhpcy5zb3VyY2UuaGVpZ2h0O1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMucmVhbFdpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5yZWFsSGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSB1dGlscy5pc1Bvd2VyT2ZUd28odGhpcy5yZWFsV2lkdGgsIHRoaXMucmVhbEhlaWdodCk7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBMb2FkIGEgc291cmNlLlxuICpcbiAqIElmIHRoZSBzb3VyY2UgaXMgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSwgc3VjaCBhcyBhbiBpbWFnZSB0aGF0IG5lZWRzIHRvIGJlXG4gKiBkb3dubG9hZGVkLCB0aGVuIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmUgZGlzcGF0Y2hlZCBpbiB0aGUgZnV0dXJlXG4gKiBhbmQgYGhhc0xvYWRlZGAgd2lsbCByZW1haW4gZmFsc2UgYWZ0ZXIgdGhpcyBjYWxsLlxuICpcbiAqIFRoZSBsb2dpYyBzdGF0ZSBhZnRlciBjYWxsaW5nIGBsb2FkU291cmNlYCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IChlZy4gYGZyb21JbWFnZWAsIGBuZXcgQmFzZVRleHR1cmVgKSBpczpcbiAqXG4gKiAgICAgaWYgKHRleHR1cmUuaGFzTG9hZGVkKVxuIHtcbiAqICAgICAgICAvLyB0ZXh0dXJlIHJlYWR5IGZvciB1c2VcbiAqICAgICB9IGVsc2UgaWYgKHRleHR1cmUuaXNMb2FkaW5nKVxuIHtcbiAqICAgICAgICAvLyBsaXN0ZW4gdG8gJ2xvYWRlZCcgYW5kL29yICdlcnJvcicgZXZlbnRzIG9uIHRleHR1cmVcbiAqICAgICB9IGVsc2Uge1xuICogICAgICAgIC8vIG5vdCBsb2FkaW5nLCBub3QgZ29pbmcgdG8gbG9hZCBVTkxFU1MgdGhlIHNvdXJjZSBpcyByZWxvYWRlZFxuICogICAgICAgIC8vIChpdCBtYXkgc3RpbGwgbWFrZSBzZW5zZSB0byBsaXN0ZW4gdG8gdGhlIGV2ZW50cylcbiAqICAgICB9XG4gKlxuICogQHByb3RlY3RlZFxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmxvYWRTb3VyY2UgPSBmdW5jdGlvbiAoc291cmNlKVxue1xuICAgIHZhciB3YXNMb2FkaW5nID0gdGhpcy5pc0xvYWRpbmc7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKHdhc0xvYWRpbmcgJiYgdGhpcy5zb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmVycm9yID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcblxuICAgIC8vIEFwcGx5IHNvdXJjZSBpZiBsb2FkZWQuIE90aGVyd2lzZSBzZXR1cCBhcHByb3ByaWF0ZSBsb2FkaW5nIG1vbml0b3JzLlxuICAgIGlmICgodGhpcy5zb3VyY2UuY29tcGxldGUgfHwgdGhpcy5zb3VyY2UuZ2V0Q29udGV4dCkgJiYgdGhpcy5zb3VyY2Uud2lkdGggJiYgdGhpcy5zb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFzb3VyY2UuZ2V0Q29udGV4dClcbiAgICB7XG5cbiAgICAgICAgLy8gSW1hZ2UgZmFpbCAvIG5vdCByZWFkeVxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgdmFyIHNjb3BlID0gdGhpcztcblxuICAgICAgICBzb3VyY2Uub25sb2FkID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgIHNjb3BlLmVtaXQoJ2xvYWRlZCcsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzb3VyY2Uub25lcnJvciA9IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXNjb3BlLmlzTG9hZGluZylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuZW1pdCgnZXJyb3InLCBzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUGVyIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI3RoZS1pbWctZWxlbWVudFxuICAgICAgICAvLyAgIFwiVGhlIHZhbHVlIG9mIGBjb21wbGV0ZWAgY2FuIHRodXMgY2hhbmdlIHdoaWxlIGEgc2NyaXB0IGlzIGV4ZWN1dGluZy5cIlxuICAgICAgICAvLyBTbyBjb21wbGV0ZSBuZWVkcyB0byBiZSByZS1jaGVja2VkIGFmdGVyIHRoZSBjYWxsYmFja3MgaGF2ZSBiZWVuIGFkZGVkLi5cbiAgICAgICAgLy8gTk9URTogY29tcGxldGUgd2lsbCBiZSB0cnVlIGlmIHRoZSBpbWFnZSBoYXMgbm8gc3JjIHNvIGJlc3QgdG8gY2hlY2sgaWYgdGhlIHNyYyBpcyBzZXQuXG4gICAgICAgIGlmIChzb3VyY2UuY29tcGxldGUgJiYgc291cmNlLnNyYylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gLi5hbmQgaWYgd2UncmUgY29tcGxldGUgbm93LCBubyBuZWVkIGZvciBjYWxsYmFja3NcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiBhbnkgcHJldmlvdXMgc3Vic2NyaWJlcnMgcG9zc2libGVcbiAgICAgICAgICAgICAgICBpZiAod2FzTG9hZGluZylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZCBpbnRlcm5hbGx5IHRvIHVwZGF0ZSB0aGUgd2lkdGgsIGhlaWdodCwgYW5kIHNvbWUgb3RoZXIgdHJhY2tpbmcgdmFycyBvbmNlXG4gKiBhIHNvdXJjZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuX3NvdXJjZUxvYWRlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgYmFzZSB0ZXh0dXJlXG4gKlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuaW1hZ2VVcmwpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcbiAgICAgICAgZGVsZXRlIHV0aWxzLlRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcblxuICAgICAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgICAgICBpZiAoIW5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZS5zcmMgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdGhpcy5zb3VyY2UuX3BpeGlJZF07XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsO1xuXG4gICAgdGhpcy5kaXNwb3NlKCk7XG59O1xuXG4vKipcbiAqIEZyZWVzIHRoZSB0ZXh0dXJlIGZyb20gV2ViR0wgbWVtb3J5IHdpdGhvdXQgZGVzdHJveWluZyB0aGlzIHRleHR1cmUgb2JqZWN0LlxuICogVGhpcyBtZWFucyB5b3UgY2FuIHN0aWxsIHVzZSB0aGUgdGV4dHVyZSBsYXRlciB3aGljaCB3aWxsIHVwbG9hZCBpdCB0byBHUFVcbiAqIG1lbW9yeSBhZ2Fpbi5cbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmVtaXQoJ2Rpc3Bvc2UnLCB0aGlzKTtcblxuICAgIC8vIHRoaXMgc2hvdWxkIG5vIGxvbmdlciBiZSBuZWVkZWQsIHRoZSByZW5kZXJlcnMgc2hvdWxkIGNsZWFudXAgYWxsIHRoZSBnbCB0ZXh0dXJlcy5cbiAgICAvLyB0aGlzLl9nbFRleHR1cmVzID0ge307XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHNvdXJjZSBpbWFnZSBvZiB0aGUgdGV4dHVyZS5cbiAqIFRoZSBvcmlnaW5hbCBzb3VyY2UgbXVzdCBiZSBhbiBJbWFnZSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBuZXdTcmMge3N0cmluZ30gdGhlIHBhdGggb2YgdGhlIGltYWdlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGVTb3VyY2VJbWFnZSA9IGZ1bmN0aW9uIChuZXdTcmMpXG57XG4gICAgdGhpcy5zb3VyY2Uuc3JjID0gbmV3U3JjO1xuXG4gICAgdGhpcy5sb2FkU291cmNlKHRoaXMuc291cmNlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGJhc2UgdGV4dHVyZSBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSBiYXNlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBjcmVhdGVkIGFuZCBsb2FkZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlVXJsIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gU2hvdWxkIHVzZSBhbm9ueW1vdXMgQ09SUz8gRGVmYXVsdHMgdG8gdHJ1ZSBpZiB0aGUgVVJMIGlzIG5vdCBhIGRhdGEtVVJJLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF07XG5cbiAgICBpZiAoY3Jvc3NvcmlnaW4gPT09IHVuZGVmaW5lZCAmJiBpbWFnZVVybC5pbmRleE9mKCdkYXRhOicpICE9PSAwKVxuICAgIHtcbiAgICAgICAgY3Jvc3NvcmlnaW4gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICAvLyBuZXcgSW1hZ2UoKSBicmVha3MgdGV4IGxvYWRpbmcgaW4gc29tZSB2ZXJzaW9ucyBvZiBDaHJvbWUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjM4MDcxXG4gICAgICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpOy8vZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgICAgIGlmIChjcm9zc29yaWdpbilcbiAgICAgICAge1xuICAgICAgICAgICAgaW1hZ2UuY3Jvc3NPcmlnaW4gPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGltYWdlLCBzY2FsZU1vZGUpO1xuICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IGltYWdlVXJsO1xuXG4gICAgICAgIGltYWdlLnNyYyA9IGltYWdlVXJsO1xuXG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gYmFzZVRleHR1cmU7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4gQDJ4IGF0IHRoZSBlbmQgb2YgdGhlIHVybCB3ZSBhcmUgZ29pbmcgdG8gYXNzdW1lIGl0cyBhIGhpZ2hyZXMgaW1hZ2VcbiAgICAgICAgYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHV0aWxzLmdldFJlc29sdXRpb25PZlVybChpbWFnZVVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIGlmICghY2FudmFzLl9waXhpSWQpXG4gICAge1xuICAgICAgICBjYW52YXMuX3BpeGlJZCA9ICdjYW52YXNfJyArIHV0aWxzLnVpZCgpO1xuICAgIH1cblxuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbY2FudmFzLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGNhbnZhcywgc2NhbGVNb2RlKTtcbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuIiwidmFyIEJhc2VSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbi8qKlxuICogQSBSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIFJlbmRlclRleHR1cmUgdGFrZXMgYSBzbmFwc2hvdCBvZiBhbnkgRGlzcGxheSBPYmplY3QgZ2l2ZW4gdG8gaXRzIHJlbmRlciBtZXRob2QuIFRoZSBwb3NpdGlvblxuICogYW5kIHJvdGF0aW9uIG9mIHRoZSBnaXZlbiBEaXNwbGF5IE9iamVjdHMgaXMgaWdub3JlZC4gRm9yIGV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDEwMjQsIDEwMjQsIHsgdmlldzogY2FudmFzLCByYXRpbzogMSB9KTtcbiAqIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKHNwcml0ZSk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgU3ByaXRlIGluIHRoaXMgY2FzZSB3aWxsIGJlIHJlbmRlcmVkIHRvIGEgcG9zaXRpb24gb2YgMCwwLiBUbyByZW5kZXIgdGhpcyBzcHJpdGUgYXQgaXRzIGFjdHVhbFxuICogcG9zaXRpb24gYSBDb250YWluZXIgc2hvdWxkIGJlIHVzZWQ6XG4gKlxuICogYGBganNcbiAqIHZhciBkb2MgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqXG4gKiBkb2MuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqXG4gKiByZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBSZW5kZXJUZXh0dXJlXG4gKiBAcGFyYW0gW3dpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtoZWlnaHQ9MTAwXSB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtzY2FsZU1vZGVdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIFtyZXNvbHV0aW9uPTFdIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICovXG5mdW5jdGlvbiBSZW5kZXJUZXh0dXJlKGJhc2VSZW5kZXJUZXh0dXJlLCBmcmFtZSlcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIFJlbmRlclRleHR1cmUsIHlvdSBtdXN0IHBhc3MgYSByZW5kZXJlciBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIG9iamVjdCB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtCYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICBUZXh0dXJlLmNhbGwodGhpcyxcbiAgICAgICAgYmFzZVJlbmRlclRleHR1cmUsXG4gICAgICAgIGZyYW1lIFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fdXBkYXRlVXZzKCk7XG59XG5cblJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlLnByb3RvdHlwZSk7XG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgUmVuZGVyVGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gdXBkYXRlQmFzZSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBiYXNlVGV4dHVyZS53aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBiZSByZXNpemVkIGFzIHdlbGw/XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB1cGRhdGVCYXNlKVxue1xuICAgXG4gICAgLy9UT0RPIC0gY291bGQgYmUgbm90IHJlcXVpcmVkLi5cbiAgICB0aGlzLnZhbGlkID0gKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTtcblxuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy5jcm9wLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jcm9wLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh1cGRhdGVCYXNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5yZXNpemUod2lkdGgsIGhlaWdodClcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLmNsZWFyKHRoaXMuZnJhbWUpXG4gICAgXG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5iYXNlVGV4dHVyZS5yZW5kZXIodGhpcy5mcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIHRoaXMgdGV4dHVyZS4gSXQgd29ya3MgYnkgY2FsbGluZyBSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0QmFzZTY0LmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0Q2FudmFzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRDYW52YXModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgdGhlIGVudGlyZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbHModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgYSBwaXhlbCB3aXRoaW4gdGhlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbCh0aGlzLmZyYW1lLCB4LCB5KTtcbn07XG5cblJlbmRlclRleHR1cmUuY3JlYXRlID0gZnVuY3Rpb24ocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICByZXR1cm4gbmV3IFJlbmRlclRleHR1cmUobmV3IEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pKTtcbn1cblxuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzID0gcmVxdWlyZSgnLi9UZXh0dXJlVXZzJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZSBvciBwYXJ0IG9mIGFuIGltYWdlLiBJdCBjYW5ub3QgYmUgYWRkZWRcbiAqIHRvIHRoZSBkaXNwbGF5IGxpc3QgZGlyZWN0bHkuIEluc3RlYWQgdXNlIGl0IGFzIHRoZSB0ZXh0dXJlIGZvciBhIFNwcml0ZS4gSWYgbm8gZnJhbWUgaXMgcHJvdmlkZWQgdGhlbiB0aGUgd2hvbGUgaW1hZ2UgaXMgdXNlZC5cbiAqXG4gKiBZb3UgY2FuIGRpcmVjdGx5IGNyZWF0ZSBhIHRleHR1cmUgZnJvbSBhbiBpbWFnZSBhbmQgdGhlbiByZXVzZSBpdCBtdWx0aXBsZSB0aW1lcyBsaWtlIHRoaXMgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIHZhciBzcHJpdGUxID0gbmV3IFBJWEkuU3ByaXRlKHRleHR1cmUpO1xuICogdmFyIHNwcml0ZTIgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gYmFzZVRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV9IFRoZSBiYXNlIHRleHR1cmUgc291cmNlIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZSBmcm9tXG4gKiBAcGFyYW0gW2ZyYW1lXSB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5nbGUgZnJhbWUgb2YgdGhlIHRleHR1cmUgdG8gc2hvd1xuICogQHBhcmFtIFtjcm9wXSB7UElYSS5SZWN0YW5nbGV9IFRoZSBhcmVhIG9mIG9yaWdpbmFsIHRleHR1cmVcbiAqIEBwYXJhbSBbdHJpbV0ge1BJWEkuUmVjdGFuZ2xlfSBUcmltbWVkIHRleHR1cmUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gW3JvdGF0ZV0ge2Jvb2xlYW59IGluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXMgKCB1c2VkIGJ5IHRleHR1cmUgcGFja2VyIClcbiAqL1xuZnVuY3Rpb24gVGV4dHVyZShiYXNlVGV4dHVyZSwgZnJhbWUsIGNyb3AsIHRyaW0sIHJvdGF0ZSlcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIERvZXMgdGhpcyBUZXh0dXJlIGhhdmUgYW55IGZyYW1lIGRhdGEgYXNzaWduZWQgdG8gaXQ/XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubm9GcmFtZSA9IGZhbHNlO1xuXG4gICAgaWYgKCFmcmFtZSlcbiAgICB7XG4gICAgICAgIHRoaXMubm9GcmFtZSA9IHRydWU7XG4gICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuICAgIH1cblxuICAgIGlmIChiYXNlVGV4dHVyZSBpbnN0YW5jZW9mIFRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmFzZVRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy5iYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdHJpbSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy50cmltID0gdHJpbTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgdGhlIHJlbmRlcmVyIGtub3cgaWYgdGhlIHRleHR1cmUgaXMgdmFsaWQuIElmIGl0J3Mgbm90IHRoZW4gaXQgY2Fubm90IGJlIHJlbmRlcmVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHdpbGwgbGV0IGEgcmVuZGVyZXIga25vdyB0aGF0IGEgdGV4dHVyZSBoYXMgYmVlbiB1cGRhdGVkICh1c2VkIG1haW5seSBmb3Igd2ViR0wgdXYgdXBkYXRlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXF1aXJlc1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFdlYkdMIFVWIGRhdGEgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0dXJlIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIGFyZWEgb2YgdGhlIEJhc2VUZXh0dXJlIGltYWdlIHRvIGFjdHVhbGx5IGNvcHkgdG8gdGhlIENhbnZhcyAvIFdlYkdMIHdoZW4gcmVuZGVyaW5nLFxuICAgICAqIGlycmVzcGVjdGl2ZSBvZiB0aGUgYWN0dWFsIGZyYW1lIHNpemUgb3IgcGxhY2VtZW50ICh3aGljaCBjYW4gYmUgaW5mbHVlbmNlZCBieSB0cmltbWVkIHRleHR1cmUgYXRsYXNlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3JvcCA9IGNyb3AgfHwgZnJhbWU7Ly9uZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgcm90YXRlZCBieSA5MCBkZWdyZWVzXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb3RhdGUgPSAhIXJvdGF0ZTtcblxuICAgIGlmIChiYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICBmcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gZnJhbWUgd2Ugc2hvdWxkIG1vbml0b3IgZm9yIGFueSBiYXNlIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5vbigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZS5vbmNlKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZC4gVGhpcyBoYXBwZW5zIGlmIHRoZSBmcmFtZSBvciB0aGUgYmFzZVRleHR1cmUgaXMgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBldmVudCB1cGRhdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0dXJlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqL1xuICAgIGZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBmcmFtZTtcblxuICAgICAgICAgICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHRoaXMud2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMudHJpbSAmJiAhdGhpcy5yb3RhdGUgJiYgKGZyYW1lLnggKyBmcmFtZS53aWR0aCA+IHRoaXMuYmFzZVRleHR1cmUud2lkdGggfHwgZnJhbWUueSArIGZyYW1lLmhlaWdodCA+IHRoaXMuYmFzZVRleHR1cmUuaGVpZ2h0KSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHR1cmUgRXJyb3I6IGZyYW1lIGRvZXMgbm90IGZpdCBpbnNpZGUgdGhlIGJhc2UgVGV4dHVyZSBkaW1lbnNpb25zICcgKyB0aGlzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy90aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuc291cmNlICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuICAgICAgICAgICAgdGhpcy52YWxpZCA9IGZyYW1lICYmIGZyYW1lLndpZHRoICYmIGZyYW1lLmhlaWdodCAmJiB0aGlzLmJhc2VUZXh0dXJlLmhhc0xvYWRlZDtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJpbSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy50cmltLmhlaWdodDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS53aWR0aCA9IHRoaXMudHJpbS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JvcCA9IGZyYW1lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy52YWxpZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVVdnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhpcyB0ZXh0dXJlIG9uIHRoZSBncHUuXG4gKlxuICovXG5UZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYmFzZVRleHR1cmUudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgbG9hZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZUxvYWRlZCA9IGZ1bmN0aW9uIChiYXNlVGV4dHVyZSlcbntcbiAgICAvLyBUT0RPIHRoaXMgY29kZSBsb29rcyBjb25mdXNpbmcuLiBib28gdG8gYWJ1c2luZyBnZXR0ZXJzIGFuZCBzZXR0ZXJzcyFcbiAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMuX2ZyYW1lO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgdXBkYXRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLm9uQmFzZVRleHR1cmVVcGRhdGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZT1mYWxzZV0ge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZSlcbntcbiAgICBpZiAodGhpcy5iYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGlmIChkZXN0cm95QmFzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2ZyYW1lID0gbnVsbDtcbiAgICB0aGlzLl91dnMgPSBudWxsO1xuICAgIHRoaXMudHJpbSA9IG51bGw7XG4gICAgdGhpcy5jcm9wID0gbnVsbDtcblxuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIHRoaXMub2ZmKCdkaXNwb3NlJywgdGhpcy5kaXNwb3NlLCB0aGlzKTtcbiAgICB0aGlzLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRleHR1cmUgb2JqZWN0IHRoYXQgYWN0cyB0aGUgc2FtZSBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9XG4gKi9cblRleHR1cmUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUodGhpcy5iYXNlVGV4dHVyZSwgdGhpcy5mcmFtZSwgdGhpcy5jcm9wLCB0aGlzLnRyaW0sIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuX3VwZGF0ZVV2cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLl91dnMpXG4gICAge1xuICAgICAgICB0aGlzLl91dnMgPSBuZXcgVGV4dHVyZVV2cygpO1xuICAgIH1cblxuICAgIHRoaXMuX3V2cy5zZXQodGhpcy5jcm9wLCB0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLnJvdGF0ZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBUZXh0dXJlIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGNyb3Nzb3JpZ2luIHtib29sZWFufSBXaGV0aGVyIHJlcXVlc3RzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGNyb3Nzb3JpZ2luXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbiAgICAgICAgdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXSA9IHRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZScpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhcywgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW8ge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAodHlwZW9mIHZpZGVvID09PSAnc3RyaW5nJylcbiAgICB7XG4gICAgICAgIHJldHVybiBUZXh0dXJlLmZyb21WaWRlb1VybCh2aWRlbywgc2NhbGVNb2RlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgdmlkZW8gdXJsLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1VybCB7c3RyaW5nfVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gQSBUZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbVZpZGVvVXJsID0gZnVuY3Rpb24gKHZpZGVvVXJsLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh2aWRlb1VybCwgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEFkZHMgYSB0ZXh0dXJlIHRvIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLiBUaGlzIGNhY2hlIGlzIHNoYXJlZCBhY3Jvc3MgdGhlIHdob2xlIFBJWEkgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSBUZXh0dXJlIHRvIGFkZCB0byB0aGUgY2FjaGUuXG4gKiBAcGFyYW0gaWQge3N0cmluZ30gVGhlIGlkIHRoYXQgdGhlIHRleHR1cmUgd2lsbCBiZSBzdG9yZWQgYWdhaW5zdC5cbiAqL1xuVGV4dHVyZS5hZGRUZXh0dXJlVG9DYWNoZSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBpZClcbntcbiAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdID0gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgdGV4dHVyZSBmcm9tIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgb2YgdGhlIHRleHR1cmUgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0aGF0IHdhcyByZW1vdmVkXG4gKi9cblRleHR1cmUucmVtb3ZlVGV4dHVyZUZyb21DYWNoZSA9IGZ1bmN0aW9uIChpZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtpZF07XG5cbiAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcbiAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpZF07XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogQW4gZW1wdHkgdGV4dHVyZSwgdXNlZCBvZnRlbiB0byBub3QgaGF2ZSB0byBjcmVhdGUgbXVsdGlwbGUgZW1wdHkgdGV4dHVyZXMuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmUuRU1QVFkgPSBuZXcgVGV4dHVyZShuZXcgQmFzZVRleHR1cmUoKSk7XG4iLCJcbi8qKlxuICogQSBzdGFuZGFyZCBvYmplY3QgdG8gc3RvcmUgdGhlIFV2cyBvZiBhIHRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBUZXh0dXJlVXZzKClcbntcbiAgICB0aGlzLngwID0gMDtcbiAgICB0aGlzLnkwID0gMDtcblxuICAgIHRoaXMueDEgPSAxO1xuICAgIHRoaXMueTEgPSAwO1xuXG4gICAgdGhpcy54MiA9IDE7XG4gICAgdGhpcy55MiA9IDE7XG5cbiAgICB0aGlzLngzID0gMDtcbiAgICB0aGlzLnkzID0gMTtcblxuICAgIHRoaXMueHkwX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTFfdWludDMyID0gMDtcbiAgICB0aGlzLnh5Ml91aW50MzIgPSAwO1xuICAgIHRoaXMueHkzX3VpbnQzMiA9IDA7XG5cbiAgICB0aGlzLnV2c191aW50MzIgPSBuZXcgVWludDMyQXJyYXkoNClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlVXZzO1xuXG4vKipcbiAqIFNldHMgdGhlIHRleHR1cmUgVXZzIGJhc2VkIG9uIHRoZSBnaXZlbiBmcmFtZSBpbmZvcm1hdGlvblxuICogQHBhcmFtIGZyYW1lIHtQSVhJLlJlY3RhbmdsZX1cbiAqIEBwYXJhbSBiYXNlRnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIHJvdGF0ZSB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIGZyYW1lIGlzIHJvdGF0ZWRcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmVVdnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChmcmFtZSwgYmFzZUZyYW1lLCByb3RhdGUpXG57XG4gICAgdmFyIHR3ID0gYmFzZUZyYW1lLndpZHRoO1xuICAgIHZhciB0aCA9IGJhc2VGcmFtZS5oZWlnaHQ7XG5cbiAgICBpZihyb3RhdGUpXG4gICAge1xuICAgICAgICB0aGlzLngwID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUuaGVpZ2h0KSAvIHR3O1xuICAgICAgICB0aGlzLnkxID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkyID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gZnJhbWUueSAvIHRoO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMueDAgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MiA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gKGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQpIC8gdGg7XG4gICAgfVxuXG4gICAgdGhpcy51dnNfdWludDMyWzBdID0gKCgodGhpcy55MCAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngwICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbMV0gPSAoKCh0aGlzLnkxICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDEgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsyXSA9ICgoKHRoaXMueTIgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MiAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzNdID0gKCgodGhpcy55MyAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngzICogNjU1MzUpICYgMHhGRkZGKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBvZiBhIFtwbGF5aW5nXSBWaWRlby5cbiAqXG4gKiBWaWRlbyBiYXNlIHRleHR1cmVzIG1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kIGluIHRoZWlyIGNyZWF0aW9uIHByb2Nlc3MuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZCBpbiBzZXZlcmFsIHdheXMsIHN1Y2ggYXM6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwoJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0Jyk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh7IHNyYzogJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoWycvdmlkZW8ud2VibScsICcvdmlkZW8ubXA0J10pO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzKFtcbiAqICAgICB7IHNyYzogJy92aWRlby53ZWJtJywgbWltZTogJ3ZpZGVvL3dlYm0nIH0sXG4gKiAgICAgeyBzcmM6ICcvdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfVxuICogXSk7XG4gKiBgYGBcbiAqXG4gKiBTZWUgdGhlIFtcImRldXNcIiBkZW1vXShodHRwOi8vd3d3Lmdvb2Rib3lkaWdpdGFsLmNvbS9waXhpanMvZXhhbXBsZXMvZGV1cy8pLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5CYXNlVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzb3VyY2Uge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIFZpZGVvQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFzb3VyY2UpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHZpZGVvIHNvdXJjZSBlbGVtZW50IHNwZWNpZmllZC4nKTtcbiAgICB9XG5cbiAgICAvLyBob29rIGluIGhlcmUgdG8gY2hlY2sgaWYgdmlkZW8gaXMgYWxyZWFkeSBhdmFpbGFibGUuXG4gICAgLy8gQmFzZVRleHR1cmUgbG9va3MgZm9yIGEgc291cmNlLmNvbXBsZXRlIGJvb2xlYW4sIHBsdXMgd2lkdGggJiBoZWlnaHQuXG5cbiAgICBpZiAoKHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9FTk9VR0hfREFUQSB8fCBzb3VyY2UucmVhZHlTdGF0ZSA9PT0gc291cmNlLkhBVkVfRlVUVVJFX0RBVEEpICYmIHNvdXJjZS53aWR0aCAmJiBzb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgc291cmNlLmNvbXBsZXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBCYXNlVGV4dHVyZS5jYWxsKHRoaXMsIHNvdXJjZSwgc2NhbGVNb2RlKTtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCB0aGUgYmFzZSB0ZXh0dXJlIGF1dG9tYXRpY2FsbHkgdXBkYXRlIGl0c2VsZiwgc2V0IHRvIHRydWUgYnkgZGVmYXVsdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG5cbiAgICB0aGlzLl9vblVwZGF0ZSA9IHRoaXMuX29uVXBkYXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fb25DYW5QbGF5ID0gdGhpcy5fb25DYW5QbGF5LmJpbmQodGhpcyk7XG5cbiAgICBpZiAoIXNvdXJjZS5jb21wbGV0ZSlcbiAgICB7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgdGhpcy5fb25DYW5QbGF5KTtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICAvLyBzdGFydGVkIHBsYXlpbmcuLlxuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX29uUGxheVN0YXJ0LmJpbmQodGhpcykpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9vblBsYXlTdG9wLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHRoaXMuX19sb2FkZWQgPSBmYWxzZTtcbn1cblxuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZpZGVvQmFzZVRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFZpZGVvQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVGhlIGludGVybmFsIHVwZGF0ZSBsb29wIG9mIHRoZSB2aWRlbyBiYXNlIHRleHR1cmUsIG9ubHkgcnVucyB3aGVuIGF1dG9VcGRhdGUgaXMgc2V0IHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25VcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJ1bnMgdGhlIHVwZGF0ZSBsb29wIHdoZW4gdGhlIHZpZGVvIGlzIHJlYWR5IHRvIHBsYXlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5hdXRvVXBkYXRlKVxuICAgIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9vblVwZGF0ZSk7XG4gICAgICAgIHRoaXMuYXV0b1VwZGF0ZSA9IHRydWU7XG4gICAgfVxufTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIGEgcGF1c2UgZXZlbnQgaXMgdHJpZ2dlcmVkLCBzdG9wcyB0aGUgdXBkYXRlIGxvb3BcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gdGhlIHZpZGVvIGlzIGxvYWRlZCBhbmQgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vbkNhblBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX29uQ2FuUGxheSk7XG5cbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuc291cmNlLnZpZGVvV2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5zb3VyY2UudmlkZW9IZWlnaHQ7XG5cbiAgICAgICAgdGhpcy5zb3VyY2UucGxheSgpO1xuXG4gICAgICAgIC8vIHByZXZlbnQgbXVsdGlwbGUgbG9hZGVkIGRpc3BhdGNoZXMuLlxuICAgICAgICBpZiAoIXRoaXMuX19sb2FkZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX19sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5zb3VyY2UuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB0aGlzLnNvdXJjZS5fcGl4aUlkIF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNvdXJjZS5fcGl4aUlkO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIE1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlZpZGVvQmFzZVRleHR1cmV9XG4gKi9cblZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvID0gZnVuY3Rpb24gKHZpZGVvLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCF2aWRlby5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgdmlkZW8uX3BpeGlJZCA9ICd2aWRlb18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt2aWRlby5fcGl4aUlkXTtcblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBWaWRlb0Jhc2VUZXh0dXJlKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB2aWRlby5fcGl4aUlkIF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgQmFzZVRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIHZpZGVvIGVsZW1lbnQuXG4gKiBUaGlzIEJhc2VUZXh0dXJlIGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIGEgdGV4dHVyZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1NyYyB7c3RyaW5nfG9iamVjdHxzdHJpbmdbXXxvYmplY3RbXX0gVGhlIFVSTChzKSBmb3IgdGhlIHZpZGVvLlxuICogQHBhcmFtIFt2aWRlb1NyYy5zcmNdIHtzdHJpbmd9IE9uZSBvZiB0aGUgc291cmNlIHVybHMgZm9yIHRoZSB2aWRlb1xuICogQHBhcmFtIFt2aWRlb1NyYy5taW1lXSB7c3RyaW5nfSBUaGUgbWltZXR5cGUgb2YgdGhlIHZpZGVvIChlLmcuICd2aWRlby9tcDQnKS4gSWYgbm90IHNwZWNpZmllZFxuICogIHRoZSB1cmwncyBleHRlbnNpb24gd2lsbCBiZSB1c2VkIGFzIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgbWltZSB0eXBlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsID0gZnVuY3Rpb24gKHZpZGVvU3JjLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcblxuICAgIC8vIGFycmF5IG9mIG9iamVjdHMgb3Igc3RyaW5nc1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZpZGVvU3JjKSlcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlkZW9TcmMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyY1tpXS5zcmMgfHwgdmlkZW9TcmNbaV0sIHZpZGVvU3JjW2ldLm1pbWUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzaW5nbGUgb2JqZWN0IG9yIHN0cmluZ1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyYy5zcmMgfHwgdmlkZW9TcmMsIHZpZGVvU3JjLm1pbWUpKTtcbiAgICB9XG5cbiAgICB2aWRlby5sb2FkKCk7XG4gICAgdmlkZW8ucGxheSgpO1xuXG4gICAgcmV0dXJuIFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpO1xufTtcblxuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyA9IFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybDtcblxuZnVuY3Rpb24gY3JlYXRlU291cmNlKHBhdGgsIHR5cGUpXG57XG4gICAgaWYgKCF0eXBlKVxuICAgIHtcbiAgICAgICAgdHlwZSA9ICd2aWRlby8nICsgcGF0aC5zdWJzdHIocGF0aC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpO1xuXG4gICAgc291cmNlLnNyYyA9IHBhdGg7XG4gICAgc291cmNlLnR5cGUgPSB0eXBlO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn1cbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIC8vIEludGVybmFsIGV2ZW50IHVzZWQgYnkgY29tcG9zZWQgZW1pdHRlclxuICAgIFRJQ0sgPSAndGljayc7XG5cbi8qKlxuICogQSBUaWNrZXIgY2xhc3MgdGhhdCBydW5zIGFuIHVwZGF0ZSBsb29wIHRoYXQgb3RoZXIgb2JqZWN0cyBsaXN0ZW4gdG8uXG4gKiBUaGlzIGNsYXNzIGlzIGNvbXBvc2VkIGFyb3VuZCBhbiBFdmVudEVtaXR0ZXIgb2JqZWN0IHRvIGFkZCBsaXN0ZW5lcnNcbiAqIG1lYW50IGZvciBleGVjdXRpb24gb24gdGhlIG5leHQgcmVxdWVzdGVkIGFuaW1hdGlvbiBmcmFtZS5cbiAqIEFuaW1hdGlvbiBmcmFtZXMgYXJlIHJlcXVlc3RlZCBvbmx5IHdoZW4gbmVjZXNzYXJ5LFxuICogZS5nLiBXaGVuIHRoZSB0aWNrZXIgaXMgc3RhcnRlZCBhbmQgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlclxuICovXG5mdW5jdGlvbiBUaWNrZXIoKVxue1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0aWNrIG1ldGhvZCBib3VuZCB0byB0aWNrZXIgaW5zdGFuY2UuXG4gICAgICogVGhpcyBpcyBiZWNhdXNlIGluIGVhcmx5IDIwMTUsIEZ1bmN0aW9uLmJpbmRcbiAgICAgKiBpcyBzdGlsbCA2MCUgc2xvd2VyIGluIGhpZ2ggcGVyZm9ybWFuY2Ugc2NlbmFyaW9zLlxuICAgICAqIEFsc28gc2VwYXJhdGluZyBmcmFtZSByZXF1ZXN0cyBmcm9tIHVwZGF0ZSBtZXRob2RcbiAgICAgKiBzbyBsaXN0ZW5lcnMgbWF5IGJlIGNhbGxlZCBhdCBhbnkgdGltZSBhbmQgd2l0aFxuICAgICAqIGFueSBhbmltYXRpb24gQVBJLCBqdXN0IGludm9rZSB0aWNrZXIudXBkYXRlKHRpbWUpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90aWNrID0gZnVuY3Rpb24gX3RpY2sodGltZSkge1xuXG4gICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgICAgIGlmIChfdGhpcy5zdGFydGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBJbnZva2UgbGlzdGVuZXJzIG5vd1xuICAgICAgICAgICAgX3RoaXMudXBkYXRlKHRpbWUpO1xuICAgICAgICAgICAgLy8gTGlzdGVuZXIgc2lkZSBlZmZlY3RzIG1heSBoYXZlIG1vZGlmaWVkIHRpY2tlciBzdGF0ZS5cbiAgICAgICAgICAgIGlmIChfdGhpcy5zdGFydGVkICYmIF90aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgX3RoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMuX3RpY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGVtaXR0ZXIgdXNlZCB0byBmaXJlICd0aWNrJyBldmVudFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGN1cnJlbnQgZnJhbWUgcmVxdWVzdCBJRFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHZhbHVlIG1hbmFnZWQgYnkgbWluRlBTIHByb3BlcnR5IHNldHRlciBhbmQgZ2V0dGVyLlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gYWxsb3dlZCBtaWxsaXNlY29uZHMgYmV0d2VlbiB1cGRhdGVzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4RWxhcHNlZE1TID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhpcyB0aWNrZXIgc2hvdWxkIGludm9rZSB0aGUgbWV0aG9kXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdGFydH0gYXV0b21hdGljYWxseVxuICAgICAqIHdoZW4gYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9TdGFydCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2NhbGFyIHRpbWUgdmFsdWUgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgc2V0dGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI21pbkZQU31cbiAgICAgKiBhbmQgaXMgc2NhbGVkIHdpdGgge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0uXG4gICAgICogKipOb3RlOioqIFRoZSBjYXAgbWF5IGJlIGV4Y2VlZGVkIGJ5IHNjYWxpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZGVsdGFUaW1lID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRpbWUgZWxhcHNlZCBpbiBtaWxsaXNlY29uZHMgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogT3Bwb3NlZCB0byB3aGF0IHRoZSBzY2FsYXIge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9XG4gICAgICogaXMgYmFzZWQsIHRoaXMgdmFsdWUgaXMgbmVpdGhlciBjYXBwZWQgbm9yIHNjYWxlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEgLyBUQVJHRVRfRlBNU1xuICAgICAqL1xuICAgIHRoaXMuZWxhcHNlZE1TID0gMSAvIENPTlNULlRBUkdFVF9GUE1TOyAvLyBkZWZhdWx0IHRvIHRhcmdldCBmcmFtZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCB0aW1lIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjdXBkYXRlfSB3YXMgaW52b2tlZC5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGFsc28gcmVzZXQgaW50ZXJuYWxseSBvdXRzaWRlIG9mIGludm9raW5nXG4gICAgICogdXBkYXRlLCBidXQgb25seSB3aGVuIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gICAgICogSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERPTUhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgICogdGhpcyB2YWx1ZSB3aWxsIGhhdmUgYSBwcmVjaXNpb24gb2YgMSDCtXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5sYXN0VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBGYWN0b3Igb2YgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBTY2FsZXMgdGlja2VyLmRlbHRhVGltZSB0byB3aGF0IHdvdWxkIGJlXG4gICAgICogLy8gdGhlIGVxdWl2YWxlbnQgb2YgYXBwcm94aW1hdGVseSAxMjAgRlBTXG4gICAgICogdGlja2VyLnNwZWVkID0gMjtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5zcGVlZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBoYXMgYmVlbiBzdGFydGVkLlxuICAgICAqIGB0cnVlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogYGZhbHNlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0b3B9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBXaGlsZSBgZmFsc2VgLCB0aGlzIHZhbHVlIG1heSBjaGFuZ2UgdG8gYHRydWVgIGluIHRoZVxuICAgICAqIGV2ZW50IG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBiZWluZyBgdHJ1ZWBcbiAgICAgKiBhbmQgYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlja2VyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZXMgcGVyIHNlY29uZCBhdCB3aGljaCB0aGlzIHRpY2tlciBpcyBydW5uaW5nLlxuICAgICAqIFRoZSBkZWZhdWx0IGlzIGFwcHJveGltYXRlbHkgNjAgaW4gbW9zdCBtb2Rlcm4gYnJvd3NlcnMuXG4gICAgICogKipOb3RlOioqIFRoaXMgZG9lcyBub3QgZmFjdG9yIGluIHRoZSB2YWx1ZSBvZlxuICAgICAqIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3BlZWR9LCB3aGljaCBpcyBzcGVjaWZpY1xuICAgICAqIHRvIHNjYWxpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuZWxhcHNlZE1TO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIG1pbGxpc2Vjb25kcyBhbGxvd2VkIHRvXG4gICAgICogZWxhcHNlIGJldHdlZW4gaW52b2tpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9LlxuICAgICAqIFRoaXMgdmFsdWUgaXMgdXNlZCB0byBjYXAge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICAgICAqIGJ1dCBkb2VzIG5vdCBlZmZlY3QgdGhlIG1lYXN1cmVkIHZhbHVlIG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjRlBTfS5cbiAgICAgKiBXaGVuIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSBpdCBpcyBjbGFtcGVkIHRvIGEgdmFsdWUgYmV0d2VlblxuICAgICAqIGAwYCBhbmQgYFBJWEkuVEFSR0VUX0ZQTVMgKiAxMDAwYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSS50aWNrZXIuVGlja2VyI1xuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgbWluRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuX21heEVsYXBzZWRNUztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbihmcHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIENsYW1wOiAwIHRvIFRBUkdFVF9GUE1TXG4gICAgICAgICAgICB2YXIgbWluRlBNUyA9IE1hdGgubWluKE1hdGgubWF4KDAsIGZwcykgLyAxMDAwLCBDT05TVC5UQVJHRVRfRlBNUyk7XG4gICAgICAgICAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxIC8gbWluRlBNUztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lLlxuICogSWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHkgYmVlbiByZXF1ZXN0ZWQsIGFuZCBpZiB0aGUgaW50ZXJuYWxcbiAqIGVtaXR0ZXIgaGFzIGxpc3RlbmVycywgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3JlcXVlc3RJZk5lZWRlZCA9IGZ1bmN0aW9uIF9yZXF1ZXN0SWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICAvLyBlbnN1cmUgY2FsbGJhY2tzIGdldCBjb3JyZWN0IGRlbHRhXG4gICAgICAgIHRoaXMubGFzdFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX3RpY2spO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSBjYW5jZWxzIGEgcGVuZGluZyBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fY2FuY2VsSWZOZWVkZWQgPSBmdW5jdGlvbiBfY2FuY2VsSWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgIT09IG51bGwpXG4gICAge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZXF1ZXN0SWQpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiB0aGUgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQgaXQgY2hlY2tzIGlmIGEgZnJhbWUgaGFzIG5vdCBhbHJlYWR5XG4gKiBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbCBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMuIElmIHRoZXNlXG4gKiBjb25kaXRpb25zIGFyZSBtZXQsIGEgbmV3IGZyYW1lIGlzIHJlcXVlc3RlZC4gSWYgdGhlIHRpY2tlciBoYXMgbm90XG4gKiBiZWVuIHN0YXJ0ZWQsIGJ1dCBhdXRvU3RhcnQgaXMgYHRydWVgLCB0aGVuIHRoZSB0aWNrZXIgc3RhcnRzIG5vdyxcbiAqIGFuZCBjb250aW51ZXMgd2l0aCB0aGUgcHJldmlvdXMgY29uZGl0aW9ucyB0byByZXF1ZXN0IGEgbmV3IGZyYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3N0YXJ0SWZQb3NzaWJsZSA9IGZ1bmN0aW9uIF9zdGFydElmUG9zc2libGUoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5hdXRvU3RhcnQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29ufSBpbnRlcm5hbGx5IGZvciB0aGVcbiAqIGludGVybmFsICd0aWNrJyBldmVudC4gSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsXG4gKiBhbmQgaWYgc28gaXQgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGF0IHRoaXMgcG9pbnQuXG4gKlxuICogQHBhcmFtIGZuIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGFkZGVkIGZvciB1cGRhdGVzXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbihUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29uY2V9IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIG9uZSB1cGRhdGVcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZE9uY2UgPSBmdW5jdGlvbiBhZGRPbmNlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub25jZShUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29mZn0gaW50ZXJuYWxseSBmb3IgJ3RpY2snIGV2ZW50LlxuICogSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMgZm9yICd0aWNrJyBldmVudC5cbiAqIElmIGl0IGRvZXMsIHRoZW4gaXQgY2FuY2VscyB0aGUgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwYXJhbSBbZm5dIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIHJlbW92ZWRcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dCB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub2ZmKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIGlmICghdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgbGlzdGVuZXJzXG4gKiBhIG5ldyBhbmltYXRpb24gZnJhbWUgaXMgcmVxdWVzdGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiBzdGFydCgpXG57XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSB0aWNrZXIuIElmIHRoZSB0aWNrZXIgaGFzIHJlcXVlc3RlZFxuICogYW4gYW5pbWF0aW9uIGZyYW1lIGl0IGlzIGNhbmNlbGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uIHN0b3AoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2FuY2VsSWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRyaWdnZXJzIGFuIHVwZGF0ZS4gQW4gdXBkYXRlIGVudGFpbHMgc2V0dGluZyB0aGVcbiAqIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNlbGFwc2VkTVN9LFxuICogdGhlIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICogaW52b2tpbmcgYWxsIGxpc3RlbmVycyB3aXRoIGN1cnJlbnQgZGVsdGFUaW1lLFxuICogYW5kIHRoZW4gZmluYWxseSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbGFzdFRpbWV9XG4gKiB3aXRoIHRoZSB2YWx1ZSBvZiBjdXJyZW50VGltZSB0aGF0IHdhcyBwcm92aWRlZC5cbiAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgYW5pbWF0aW9uXG4gKiBmcmFtZSBjYWxsYmFja3MgaWYgdGhlIHRpY2tlciBpbnN0YW5jZSBoYXMgYmVlbiBzdGFydGVkXG4gKiBhbmQgbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqXG4gKiBAcGFyYW0gW2N1cnJlbnRUaW1lPXBlcmZvcm1hbmNlLm5vdygpXSB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9IHRoZSBjdXJyZW50IHRpbWUgb2YgZXhlY3V0aW9uXG4gKi9cblRpY2tlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKGN1cnJlbnRUaW1lKVxue1xuICAgIHZhciBlbGFwc2VkTVM7XG5cbiAgICAvLyBBbGxvdyBjYWxsaW5nIHVwZGF0ZSBkaXJlY3RseSB3aXRoIGRlZmF1bHQgY3VycmVudFRpbWUuXG4gICAgY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSB8fCBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAvLyBTYXZlIHVuY2FwcGVkIGVsYXBzZWRNUyBmb3IgbWVhc3VyZW1lbnRcbiAgICBlbGFwc2VkTVMgPSB0aGlzLmVsYXBzZWRNUyA9IGN1cnJlbnRUaW1lIC0gdGhpcy5sYXN0VGltZTtcblxuICAgIC8vIGNhcCB0aGUgbWlsbGlzZWNvbmRzIGVsYXBzZWQgdXNlZCBmb3IgZGVsdGFUaW1lXG4gICAgaWYgKGVsYXBzZWRNUyA+IHRoaXMuX21heEVsYXBzZWRNUylcbiAgICB7XG4gICAgICAgIGVsYXBzZWRNUyA9IHRoaXMuX21heEVsYXBzZWRNUztcbiAgICB9XG5cbiAgICB0aGlzLmRlbHRhVGltZSA9IGVsYXBzZWRNUyAqIENPTlNULlRBUkdFVF9GUE1TICogdGhpcy5zcGVlZDtcblxuICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgYWRkZWQgdG8gaW50ZXJuYWwgZW1pdHRlclxuICAgIHRoaXMuX2VtaXR0ZXIuZW1pdChUSUNLLCB0aGlzLmRlbHRhVGltZSk7XG5cbiAgICB0aGlzLmxhc3RUaW1lID0gY3VycmVudFRpbWU7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRpY2tlcjtcbiIsInZhciBUaWNrZXIgPSByZXF1aXJlKCcuL1RpY2tlcicpO1xuXG4vKipcbiAqIFRoZSBzaGFyZWQgdGlja2VyIGluc3RhbmNlIHVzZWQgYnkge0BsaW5rIFBJWEkuZXh0cmFzLk1vdmllQ2xpcH0uXG4gKiBhbmQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqIFRoZSBwcm9wZXJ0eSB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2F1dG9TdGFydH0gaXMgc2V0IHRvIGB0cnVlYFxuICogZm9yIHRoaXMgaW5zdGFuY2UuIFBsZWFzZSBmb2xsb3cgdGhlIGV4YW1wbGVzIGZvciB1c2FnZSwgaW5jbHVkaW5nXG4gKiBob3cgdG8gb3B0LW91dCBvZiBhdXRvLXN0YXJ0aW5nIHRoZSBzaGFyZWQgdGlja2VyLlxuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgdGlja2VyID0gUElYSS50aWNrZXIuc2hhcmVkO1xuICogLy8gU2V0IHRoaXMgdG8gcHJldmVudCBzdGFydGluZyB0aGlzIHRpY2tlciB3aGVuIGxpc3RlbmVycyBhcmUgYWRkZWQuXG4gKiAvLyBCeSBkZWZhdWx0IHRoaXMgaXMgdHJ1ZSBvbmx5IGZvciB0aGUgUElYSS50aWNrZXIuc2hhcmVkIGluc3RhbmNlLlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogLy8gRllJLCBjYWxsIHRoaXMgdG8gZW5zdXJlIHRoZSB0aWNrZXIgaXMgc3RvcHBlZC4gSXQgc2hvdWxkIGJlIHN0b3BwZWRcbiAqIC8vIGlmIHlvdSBoYXZlIG5vdCBhdHRlbXB0ZWQgdG8gcmVuZGVyIGFueXRoaW5nIHlldC5cbiAqIHRpY2tlci5zdG9wKCk7XG4gKiAvLyBDYWxsIHRoaXMgd2hlbiB5b3UgYXJlIHJlYWR5IGZvciBhIHJ1bm5pbmcgc2hhcmVkIHRpY2tlci5cbiAqIHRpY2tlci5zdGFydCgpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBZb3UgbWF5IHVzZSB0aGUgc2hhcmVkIHRpY2tlciB0byByZW5kZXIuLi5cbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDgwMCwgNjAwKTtcbiAqIHZhciBzdGFnZSA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogdmFyIGludGVyYWN0aW9uTWFuYWdlciA9IFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyKTtcbiAqIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocmVuZGVyZXIudmlldyk7XG4gKiB0aWNrZXIuYWRkKGZ1bmN0aW9uICh0aW1lKSB7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBPciB5b3UgY2FuIGp1c3QgdXBkYXRlIGl0IG1hbnVhbGx5LlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogdGlja2VyLnN0b3AoKTtcbiAqIGZ1bmN0aW9uIGFuaW1hdGUodGltZSkge1xuICogICAgIHRpY2tlci51cGRhdGUodGltZSk7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XG4gKiB9XG4gKiBhbmltYXRlKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAqXG4gKiBAdHlwZSB7UElYSS50aWNrZXIuVGlja2VyfVxuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbnZhciBzaGFyZWQgPSBuZXcgVGlja2VyKCk7XG5zaGFyZWQuYXV0b1N0YXJ0ID0gdHJ1ZTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudGlja2VyXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIHNoYXJlZDogc2hhcmVkLFxuICAgIFRpY2tlcjogVGlja2VyXG59O1xuIiwiLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuXG52YXIgR0xfTUFQID0ge307XG5cblxudmFyIGNyZWF0ZUluZGljZXNGb3JRdWFkcyA9IGZ1bmN0aW9uIChzaXplKVxue1xuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYXJyYXksIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgIFxuICAgIHZhciB0b3RhbEluZGljZXMgPSBzaXplICogNjtcblxuICAgIHZhciBpbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHRvdGFsSW5kaWNlcyk7XG5cblx0Ly8gZmlsbCB0aGUgaW5kaWNlcyB3aXRoIHRoZSBxdWFkcyB0byBkcmF3XG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCB0b3RhbEluZGljZXM7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kaWNlcztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzOyIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLnV0aWxzXG4gKi9cbnZhciB1dGlscyA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIF91aWQ6IDAsXG4gICAgX3NhaWRIZWxsbzogZmFsc2UsXG5cbiAgICBFdmVudEVtaXR0ZXI6ICAgcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIHBsdWdpblRhcmdldDogICByZXF1aXJlKCcuL3BsdWdpblRhcmdldCcpLFxuICAgIGFzeW5jOiAgICAgICAgICByZXF1aXJlKCdhc3luYycpLFxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllclxuICAgICAqXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllciB0byB1c2UuXG4gICAgICovXG4gICAgdWlkOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICsrdXRpbHMuX3VpZDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBoZXggY29sb3IgbnVtYmVyIHRvIGFuIFtSLCBHLCBCXSBhcnJheVxuICAgICAqXG4gICAgICogQHBhcmFtIGhleCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSAge251bWJlcltdfSBbb3V0PVtdXVxuICAgICAqIEByZXR1cm4ge251bWJlcltdfSBBbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIFtSLCBHLCBCXSBvZiB0aGUgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnJnYjogZnVuY3Rpb24gKGhleCwgb3V0KVxuICAgIHtcbiAgICAgICAgb3V0ID0gb3V0IHx8IFtdO1xuXG4gICAgICAgIG91dFswXSA9IChoZXggPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzFdID0gKGhleCA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIG91dFsyXSA9IChoZXggJiAweEZGKSAvIDI1NTtcblxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5nIGNvbG9yLlxuICAgICAqL1xuICAgIGhleDJzdHJpbmc6IGZ1bmN0aW9uIChoZXgpXG4gICAge1xuICAgICAgICBoZXggPSBoZXgudG9TdHJpbmcoMTYpO1xuICAgICAgICBoZXggPSAnMDAwMDAwJy5zdWJzdHIoMCwgNiAtIGhleC5sZW5ndGgpICsgaGV4O1xuXG4gICAgICAgIHJldHVybiAnIycgKyBoZXg7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgY29sb3IgYXMgYW4gW1IsIEcsIEJdIGFycmF5IHRvIGEgaGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIHJnYiB7bnVtYmVyW119XG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgY29sb3IgbnVtYmVyXG4gICAgICovXG4gICAgcmdiMmhleDogZnVuY3Rpb24gKHJnYilcbiAgICB7XG4gICAgICAgIHJldHVybiAoKHJnYlswXSoyNTUgPDwgMTYpICsgKHJnYlsxXSoyNTUgPDwgOCkgKyByZ2JbMl0qMjU1KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIENhbnZhcyBCbGVuZE1vZGVzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnJvd3NlclxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciB0aGV5IGFyZSBzdXBwb3J0ZWRcbiAgICAgKi9cbiAgICBjYW5Vc2VOZXdDYW52YXNCbGVuZE1vZGVzOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwbmdIZWFkID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVFBQUFBQkFRTUFBQUREOHAyT0FBQUFBMUJNVkVYLyc7XG4gICAgICAgIHZhciBwbmdFbmQgPSAnQUFBQUNrbEVRVlFJMTJOZ0FBQUFBZ0FCNGlHOE13QUFBQUJKUlU1RXJrSmdnZz09JztcblxuICAgICAgICB2YXIgbWFnZW50YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBtYWdlbnRhLnNyYyA9IHBuZ0hlYWQgKyAnQVA4MDRPYTYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciB5ZWxsb3cgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgeWVsbG93LnNyYyA9IHBuZ0hlYWQgKyAnL3dDS3h2UkYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY2FudmFzLndpZHRoID0gNjtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IDE7XG5cbiAgICAgICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShtYWdlbnRhLCAwLCAwKTtcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoeWVsbG93LCAyLCAwKTtcblxuICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDIsMCwxLDEpLmRhdGE7XG5cbiAgICAgICAgcmV0dXJuIChkYXRhWzBdID09PSAyNTUgJiYgZGF0YVsxXSA9PT0gMCAmJiBkYXRhWzJdID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBudW1iZXIsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgdGFrZW4gZnJvbSBTdGFybGluZyBGcmFtZXdvcmsgYXMgaXRzIHByZXR0eSBuZWF0IDspXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbnVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7bnVtYmVyfSB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqL1xuICAgIGdldE5leHRQb3dlck9mVHdvOiBmdW5jdGlvbiAobnVtYmVyKVxuICAgIHtcbiAgICAgICAgLy8gc2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Bvd2VyX29mX3R3byNGYXN0X2FsZ29yaXRobV90b19jaGVja19pZl9hX3Bvc2l0aXZlX251bWJlcl9pc19hX3Bvd2VyX29mX3R3b1xuICAgICAgICBpZiAobnVtYmVyID4gMCAmJiAobnVtYmVyICYgKG51bWJlciAtIDEpKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSAxO1xuXG4gICAgICAgICAgICB3aGlsZSAocmVzdWx0IDwgbnVtYmVyKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA8PD0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBjaGVja3MgaWYgdGhlIGdpdmVuIHdpZHRoIGFuZCBoZWlnaHQgbWFrZSBhIHBvd2VyIG9mIHR3byByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSBoZWlnaHQge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzUG93ZXJPZlR3bzogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm4gKHdpZHRoID4gMCAmJiAod2lkdGggJiAod2lkdGggLSAxKSkgPT09IDAgJiYgaGVpZ2h0ID4gMCAmJiAoaGVpZ2h0ICYgKGhlaWdodCAtIDEpKSA9PT0gMCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGdldCB0aGUgcmVzb2x1dGlvbiBvZiBhbiBhc3NldCBieSBsb29raW5nIGZvciB0aGUgcHJlZml4XG4gICAgICogdXNlZCBieSBzcHJpdGVzaGVldHMgYW5kIGltYWdlIHVybHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwge3N0cmluZ30gdGhlIGltYWdlIHBhdGhcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0UmVzb2x1dGlvbk9mVXJsOiBmdW5jdGlvbiAodXJsKVxuICAgIHtcbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBDT05TVC5SRVRJTkFfUFJFRklYLmV4ZWModXJsKTtcblxuICAgICAgICBpZiAocmVzb2x1dGlvbilcbiAgICAgICAge1xuICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChyZXNvbHV0aW9uWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAxO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBMb2dzIG91dCB0aGUgdmVyc2lvbiBhbmQgcmVuZGVyZXIgaW5mb3JtYXRpb24gZm9yIHRoaXMgcnVubmluZyBpbnN0YW5jZSBvZiBQSVhJLlxuICAgICAqIElmIHlvdSBkb24ndCB3YW50IHRvIHNlZSB0aGlzIG1lc3NhZ2UgeW91IGNhbiBzZXQgYFBJWEkudXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7YFxuICAgICAqIHNvIHRoZSBsaWJyYXJ5IHRoaW5rcyBpdCBhbHJlYWR5IHNhaWQgaXQuIEtlZXAgaW4gbWluZCB0aGF0IGRvaW5nIHRoYXQgd2lsbCBmb3JldmVyXG4gICAgICogbWFrZXMgeW91IGEgamVyayBmYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBUaGUgc3RyaW5nIHJlbmRlcmVyIHR5cGUgdG8gbG9nLlxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBzYXlIZWxsbzogZnVuY3Rpb24gKHR5cGUpXG4gICAge1xuICAgICAgICBpZiAodXRpbHMuX3NhaWRIZWxsbylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjaHJvbWUnKSA+IC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtcbiAgICAgICAgICAgICAgICAnXFxuICVjICVjICVjIFBpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0g4pywICcgKyB0eXBlICsgJyDinLAgICVjICcgKyAnICVjICcgKyAnIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8gICVjICVjIOKZpSVj4pmlJWPimaUgXFxuXFxuJyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmY2NmE1OyBiYWNrZ3JvdW5kOiAjMDMwMzA3OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmYzNkYzsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOydcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBhcmdzKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3aW5kb3cuY29uc29sZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nKCdQaXhpLmpzICcgKyBDT05TVC5WRVJTSU9OICsgJyAtICcgKyB0eXBlICsgJyAtIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8nKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuXG4gICAgICAgIHV0aWxzLl9zYWlkSGVsbG8gPSB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgZm9yIGNoZWNraW5nIGZvciB3ZWJnbCBzdXBwb3J0XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzV2ViR0xTdXBwb3J0ZWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB2YXIgY29udGV4dE9wdGlvbnMgPSB7IHN0ZW5jaWw6IHRydWUgfTtcbiAgICAgICAgdHJ5XG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghd2luZG93LldlYkdMUmVuZGVyaW5nQ29udGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSxcbiAgICAgICAgICAgICAgICBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIGNvbnRleHRPcHRpb25zKSB8fCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgY29udGV4dE9wdGlvbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gISEoZ2wgJiYgZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5zdGVuY2lsKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgc2lnbiBvZiBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBuIHtudW1iZXJ9XG4gICAgICogQHJldHVybnMge251bWJlcn0gMCBpZiBuIGlzIDAsIC0xIGlmIG4gaXMgbmVnYXRpdmUsIDEgaWYgbiBpIHBvc2l0aXZlXG4gICAgICovXG4gICAgc2lnbjogZnVuY3Rpb24gKG4pXG4gICAge1xuICAgICAgICByZXR1cm4gbiA/IChuIDwgMCA/IC0xIDogMSkgOiAwO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZW1vdmVJdGVtc1xuICAgICAqXG4gICAgICogQHBhcmFtIHthcnJheX0gYXJyIFRoZSB0YXJnZXQgYXJyYXlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRJZHggVGhlIGluZGV4IHRvIGJlZ2luIHJlbW92aW5nIGZyb20gKGluY2x1c2l2ZSlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmVtb3ZlQ291bnQgSG93IG1hbnkgaXRlbXMgdG8gcmVtb3ZlXG4gICAgICovXG4gICAgcmVtb3ZlSXRlbXM6IGZ1bmN0aW9uIChhcnIsIHN0YXJ0SWR4LCByZW1vdmVDb3VudClcbiAgICB7XG4gICAgICAgIHZhciBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIGlmIChzdGFydElkeCA+PSBsZW5ndGggfHwgcmVtb3ZlQ291bnQgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbW92ZUNvdW50ID0gKHN0YXJ0SWR4K3JlbW92ZUNvdW50ID4gbGVuZ3RoID8gbGVuZ3RoLXN0YXJ0SWR4IDogcmVtb3ZlQ291bnQpO1xuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJZHgsIGxlbiA9IGxlbmd0aC1yZW1vdmVDb3VudDsgaSA8IGxlbjsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBhcnJbaV0gPSBhcnJbaSArIHJlbW92ZUNvdW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyci5sZW5ndGggPSBsZW47XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIERlc2NyaWJlIHByb3BlcnR5IHVzYWdlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBUZXh0dXJlQ2FjaGU6IHt9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHt9XG59O1xuIiwiLyoqXG4gKiBNaXhpbnMgZnVuY3Rpb25hbGl0eSB0byBtYWtlIGFuIG9iamVjdCBoYXZlIFwicGx1Z2luc1wiLlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkudXRpbHNcbiAqIEBwYXJhbSBvYmoge29iamVjdH0gVGhlIG9iamVjdCB0byBtaXggaW50by5cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIHBsdWdpblRhcmdldC5taXhpbihNeU9iamVjdCk7XG4gKi9cbmZ1bmN0aW9uIHBsdWdpblRhcmdldChvYmopXG57XG4gICAgb2JqLl9fcGx1Z2lucyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHBsdWdpbiB0byBhbiBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwbHVnaW5OYW1lIHtzdHJpbmd9IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICAgICAqIEBwYXJhbSBjdG9yIHtGdW5jdGlvbn0gVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciB0aGUgcGx1Z2luLlxuICAgICAqL1xuICAgIG9iai5yZWdpc3RlclBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW5OYW1lLCBjdG9yKVxuICAgIHtcbiAgICAgICAgb2JqLl9fcGx1Z2luc1twbHVnaW5OYW1lXSA9IGN0b3I7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlcyBhbGwgdGhlIHBsdWdpbnMgb2YgdGhpcyBvYmplY3RcbiAgICAgKlxuICAgICAqL1xuICAgIG9iai5wcm90b3R5cGUuaW5pdFBsdWdpbnMgPSBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zID0gdGhpcy5wbHVnaW5zIHx8IHt9O1xuXG4gICAgICAgIGZvciAodmFyIG8gaW4gb2JqLl9fcGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbmV3IChvYmouX19wbHVnaW5zW29dKSh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5kZXN0cm95UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBvIGluIHRoaXMucGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBsdWdpbnMgPSBudWxsO1xuICAgIH07XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLyoqXG4gICAgICogTWl4ZXMgaW4gdGhlIHByb3BlcnRpZXMgb2YgdGhlIHBsdWdpblRhcmdldCBpbnRvIGFub3RoZXIgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0IHtvYmplY3R9IFRoZSBvYmogdG8gbWl4IGludG9cbiAgICAgKi9cbiAgICBtaXhpbjogZnVuY3Rpb24gbWl4aW4ob2JqKVxuICAgIHtcbiAgICAgICAgcGx1Z2luVGFyZ2V0KG9iaik7XG4gICAgfVxufTtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciBjb3JlID0gcmVxdWlyZSgnLi9jb3JlJyksXG4gICAgbWVzaCA9IHJlcXVpcmUoJy4vbWVzaCcpLFxuICAgIGV4dHJhcyA9IHJlcXVpcmUoJy4vZXh0cmFzJyksXG4gICAgZmlsdGVycyA9IHJlcXVpcmUoJy4vZmlsdGVycycpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIFNwcml0ZUJhdGNoXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLlBhcnRpY2xlQ29udGFpbmVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlNwcml0ZUJhdGNoID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLicpO1xufTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBBc3NldExvYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBzZWUgUElYSS5sb2FkZXJzLkxvYWRlclxuICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IFRoZSBsb2FkZXIgc3lzdGVtIHdhcyBvdmVyaGF1bGVkIGluIHBpeGkgdjMsIHBsZWFzZSBzZWUgdGhlIG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyIGNsYXNzLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLkFzc2V0TG9hZGVyID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuJyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb3JlLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFN0YWdlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQ29udGFpbmVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFN0YWdlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1lvdSBkbyBub3QgbmVlZCB0byB1c2UgYSBQSVhJIFN0YWdlIGFueSBtb3JlLCB5b3UgY2FuIHNpbXBseSByZW5kZXIgYW55IGNvbnRhaW5lci4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIERpc3BsYXlPYmplY3RDb250YWluZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgRGlzcGxheU9iamVjdENvbnRhaW5lcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEaXNwbGF5T2JqZWN0Q29udGFpbmVyIGhhcyBiZWVuIHNob3J0ZW5lZCB0byBDb250YWluZXIsIHBsZWFzZSB1c2UgQ29udGFpbmVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RyaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2hcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RyaXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFN0cmlwIGNsYXNzIGhhcyBiZWVuIHJlbmFtZWQgdG8gTWVzaCBhbmQgbW92ZWQgdG8gbWVzaC5NZXNoLCBwbGVhc2UgdXNlIG1lc2guTWVzaCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLk1lc2g7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBSb3BlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkubWVzaC5Sb3BlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFJvcGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFJvcGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gbWVzaC5Sb3BlLCBwbGVhc2UgdXNlIG1lc2guUm9wZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLlJvcGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBNb3ZpZUNsaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuTW92aWVDbGlwXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIE1vdmllQ2xpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgTW92aWVDbGlwIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5Nb3ZpZUNsaXAsIHBsZWFzZSB1c2UgZXh0cmFzLk1vdmllQ2xpcCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuTW92aWVDbGlwO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGlsaW5nU3ByaXRlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBUaWxpbmdTcHJpdGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRpbGluZ1Nwcml0ZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuVGlsaW5nU3ByaXRlLCBwbGVhc2UgdXNlIGV4dHJhcy5UaWxpbmdTcHJpdGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLlRpbGluZ1Nwcml0ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJpdG1hcFRleHRcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCaXRtYXBUZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCaXRtYXBUZXh0IGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5CaXRtYXBUZXh0LCBwbGVhc2UgdXNlIGV4dHJhcy5CaXRtYXBUZXh0IGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5CaXRtYXBUZXh0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgYmxlbmRNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIGJsZW5kTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGJsZW5kTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gQkxFTkRfTU9ERVMsIHBsZWFzZSB1c2UgQkxFTkRfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5CTEVORF9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNjYWxlTW9kZXNcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBzY2FsZU1vZGVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBzY2FsZU1vZGVzIGhhcyBiZWVuIG1vdmVkIHRvIFNDQUxFX01PREVTLCBwbGVhc2UgdXNlIFNDQUxFX01PREVTIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU0NBTEVfTU9ERVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBCYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuQmFzZVRleHR1cmVDYWNoZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCYXNlVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgQmFzZVRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5CYXNlVGV4dHVyZUNhY2hlLCBwbGVhc2UgdXNlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5UZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuVGV4dHVyZUNhY2hlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIG1hdGhcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBtYXRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgbWF0aCBuYW1lc3BhY2UgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIGFjY2VzcyBtZW1iZXJzIGFscmVhZHkgYWNjZXNzaWJsZSBvbiBQSVhJLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgUElYSS5TcHJpdGUjc2V0VGV4dHVyZVxuICogQHNlZSBQSVhJLlNwcml0ZSN0ZXh0dXJlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlLnByb3RvdHlwZS5zZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dHVyZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dHVyZSBwcm9wZXJ0eSwgZS5nIDogc3ByaXRlLnRleHR1cmUgPSB0ZXh0dXJlOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3NldFRleHRcbiAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmV4dHJhcy5CaXRtYXBUZXh0LnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dClcbntcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dCBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dCBwcm9wZXJ0eSwgZS5nIDogbXlCaXRtYXBUZXh0LnRleHQgPSBcXCdteSB0ZXh0XFwnOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLlRleHQjdGV4dFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteVRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRTdHlsZVxuICogQHNlZSBQSVhJLlRleHQjc3R5bGVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0LnByb3RvdHlwZS5zZXRTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlKVxue1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldFN0eWxlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBzdHlsZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0LnN0eWxlID0gc3R5bGU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQHNlZSBQSVhJLlRleHR1cmUjc2V0RnJhbWVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0dXJlLnByb3RvdHlwZS5zZXRGcmFtZSA9IGZ1bmN0aW9uKGZyYW1lKVxue1xuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldEZyYW1lIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBmcmFtZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0dXJlLmZyYW1lID0gZnJhbWU7Jyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhmaWx0ZXJzLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBzZWUgUElYSS5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBBYnN0cmFjdEZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLkFic3RyYWN0RmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBBYnN0cmFjdEZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkFic3RyYWN0RmlsdGVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkZYQUFGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuRlhBQUZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBGWEFBRmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuRlhBQUZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgRlhBQUZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkZYQUFGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuU3ByaXRlTWFza0ZpbHRlclxuICAgICAqIEBzZWUgUElYSS5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIFNwcml0ZU1hc2tGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBTcHJpdGVNYXNrRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU3ByaXRlTWFza0ZpbHRlcjtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkudXRpbHMudXVpZFxuICogQHNlZSBQSVhJLnV0aWxzLnVpZFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICovXG5jb3JlLnV0aWxzLnV1aWQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvbnNvbGUud2FybigndXRpbHMudXVpZCgpIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdXRpbHMudWlkKCkgZnJvbSBub3cgb24uJyk7XG4gICAgcmV0dXJuIGNvcmUudXRpbHMudWlkKCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogQSBCaXRtYXBUZXh0IG9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dCB1c2luZyBiaXRtYXAgZm9udC4gVG9cbiAqIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJywgJ1xccicgb3IgJ1xcclxcbicgaW4geW91ciBzdHJpbmcuIFlvdSBjYW4gZ2VuZXJhdGUgdGhlIGZudCBmaWxlcyB1c2luZzpcbiAqXG4gKiBBIEJpdG1hcFRleHQgY2FuIG9ubHkgYmUgY3JlYXRlZCB3aGVuIHRoZSBmb250IGlzIGxvYWRlZFxuICpcbiAqIGBgYGpzXG4gKiAvLyBpbiB0aGlzIGNhc2UgdGhlIGZvbnQgaXMgaW4gYSBmaWxlIGNhbGxlZCAnZGVzeXJlbC5mbnQnXG4gKiB2YXIgYml0bWFwVGV4dCA9IG5ldyBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0KFwidGV4dCB1c2luZyBhIGZhbmN5IGZvbnQhXCIsIHtmb250OiBcIjM1cHggRGVzeXJlbFwiLCBhbGlnbjogXCJyaWdodFwifSk7XG4gKiBgYGBcbiAqXG4gKlxuICogaHR0cDovL3d3dy5hbmdlbGNvZGUuY29tL3Byb2R1Y3RzL2JtZm9udC8gZm9yIHdpbmRvd3Mgb3JcbiAqIGh0dHA6Ly93d3cuYm1nbHlwaC5jb20vIGZvciBtYWMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBzdHlsZSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIHN0eWxlLmZvbnQge3N0cmluZ3xvYmplY3R9IFRoZSBmb250IGRlc2NyaXB0b3IgZm9yIHRoZSBvYmplY3QsIGNhbiBiZSBwYXNzZWQgYXMgYSBzdHJpbmcgb2YgZm9ybVxuICogICAgICBcIjI0cHggRm9udE5hbWVcIiBvciBcIkZvbnROYW1lXCIgb3IgYXMgYW4gb2JqZWN0IHdpdGggZXhwbGljaXQgbmFtZS9zaXplIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQubmFtZV0ge3N0cmluZ30gVGhlIGJpdG1hcCBmb250IGlkXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQuc2l6ZV0ge251bWJlcn0gVGhlIHNpemUgb2YgdGhlIGZvbnQgaW4gcGl4ZWxzLCBlLmcuIDI0XG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0XG4gKiAgICAgIHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUudGludD0weEZGRkZGRl0ge251bWJlcn0gVGhlIHRpbnQgY29sb3JcbiAqL1xuZnVuY3Rpb24gQml0bWFwVGV4dCh0ZXh0LCBzdHlsZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgb3ZlcmFsbCB0ZXh0LCBkaWZmZXJlbnQgZnJvbSBmb250U2l6ZSxcbiAgICAgKiB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBzdHlsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRleHRXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dEhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBsZXR0ZXIgc3ByaXRlIHBvb2wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZ2x5cGhzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZm9udCA9IHtcbiAgICAgICAgdGludDogc3R5bGUudGludCAhPT0gdW5kZWZpbmVkID8gc3R5bGUudGludCA6IDB4RkZGRkZGLFxuICAgICAgICBhbGlnbjogc3R5bGUuYWxpZ24gfHwgJ2xlZnQnLFxuICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICBzaXplOiAwXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgZm9udC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZm9udCA9IHN0eWxlLmZvbnQ7IC8vIHJ1biBmb250IHNldHRlclxuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IHRleHQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IHdpZHRoIG9mIHRoaXMgYml0bWFwIHRleHQgaW4gcGl4ZWxzLiBJZiB0aGUgdGV4dCBwcm92aWRlZCBpcyBsb25nZXIgdGhhbiB0aGUgdmFsdWUgcHJvdmlkZWQsIGxpbmUgYnJlYWtzIHdpbGwgYmUgYXV0b21hdGljYWxseSBpbnNlcnRlZCBpbiB0aGUgbGFzdCB3aGl0ZXNwYWNlLlxuICAgICAqIERpc2FibGUgYnkgc2V0dGluZyB2YWx1ZSB0byAwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IGxpbmUgaGVpZ2h0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRyeWluZyB0byB1c2UgdGhlIHRvdGFsIGhlaWdodCBvZiB0aGUgVGV4dCwgaWU6IHdoZW4gdHJ5aW5nIHRvIHZlcnRpY2FsbHkgYWxpZ24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkaXJ0eSBzdGF0ZSBvZiB0aGlzIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy51cGRhdGVUZXh0KCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5CaXRtYXBUZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5Db250YWluZXIucHJvdG90eXBlKTtcbkJpdG1hcFRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQml0bWFwVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gQml0bWFwVGV4dDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQml0bWFwVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGludCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0aW50OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQudGludDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQudGludCA9ICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlID49IDApID8gdmFsdWUgOiAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFsaWdubWVudCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbGVmdCdcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBhbGlnbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250LmFsaWduO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC5hbGlnbiA9IHZhbHVlIHx8ICdsZWZ0JztcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZvbnQgZGVzY3JpcHRvciBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0ZvbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgZm9udDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcgJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9mb250Lm5hbWUgPSB2YWx1ZS5sZW5ndGggPT09IDEgPyB2YWx1ZVswXSA6IHZhbHVlLnNsaWNlKDEpLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB2YWx1ZS5sZW5ndGggPj0gMiA/IHBhcnNlSW50KHZhbHVlWzBdLCAxMCkgOiBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV0uc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5zaXplID0gdHlwZW9mIHZhbHVlLnNpemUgPT09ICdudW1iZXInID8gdmFsdWUuc2l6ZSA6IHBhcnNlSW50KHZhbHVlLnNpemUsIDEwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGV4dCBhbmQgdXBkYXRlcyBpdCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkYXRhID0gQml0bWFwVGV4dC5mb250c1t0aGlzLl9mb250Lm5hbWVdO1xuICAgIHZhciBwb3MgPSBuZXcgY29yZS5Qb2ludCgpO1xuICAgIHZhciBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgIHZhciBjaGFycyA9IFtdO1xuICAgIHZhciBsYXN0TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbGluZVdpZHRocyA9IFtdO1xuICAgIHZhciBsaW5lID0gMDtcbiAgICB2YXIgc2NhbGUgPSB0aGlzLl9mb250LnNpemUgLyBkYXRhLnNpemU7XG4gICAgdmFyIGxhc3RTcGFjZSA9IC0xO1xuICAgIHZhciBtYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0Lmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gdGhpcy50ZXh0LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGxhc3RTcGFjZSA9IC8oXFxzKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSA/IGkgOiBsYXN0U3BhY2U7XG5cbiAgICAgICAgaWYgKC8oPzpcXHJcXG58XFxyfFxcbikvLnRlc3QodGhpcy50ZXh0LmNoYXJBdChpKSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXN0U3BhY2UgIT09IC0xICYmIHRoaXMubWF4V2lkdGggPiAwICYmIHBvcy54ICogc2NhbGUgPiB0aGlzLm1heFdpZHRoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKGNoYXJzLCBsYXN0U3BhY2UsIGkgLSBsYXN0U3BhY2UpO1xuICAgICAgICAgICAgaSA9IGxhc3RTcGFjZTtcbiAgICAgICAgICAgIGxhc3RTcGFjZSA9IC0xO1xuXG4gICAgICAgICAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbGluZSsrO1xuXG4gICAgICAgICAgICBwb3MueCA9IDA7XG4gICAgICAgICAgICBwb3MueSArPSBkYXRhLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hhckRhdGEgPSBkYXRhLmNoYXJzW2NoYXJDb2RlXTtcblxuICAgICAgICBpZiAoIWNoYXJEYXRhKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmV2Q2hhckNvZGUgJiYgY2hhckRhdGEua2VybmluZ1twcmV2Q2hhckNvZGVdKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb3MueCArPSBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV07XG4gICAgICAgIH1cblxuICAgICAgICBjaGFycy5wdXNoKHt0ZXh0dXJlOmNoYXJEYXRhLnRleHR1cmUsIGxpbmU6IGxpbmUsIGNoYXJDb2RlOiBjaGFyQ29kZSwgcG9zaXRpb246IG5ldyBjb3JlLlBvaW50KHBvcy54ICsgY2hhckRhdGEueE9mZnNldCwgcG9zLnkgKyBjaGFyRGF0YS55T2Zmc2V0KX0pO1xuICAgICAgICBsYXN0TGluZVdpZHRoID0gcG9zLnggKyAoY2hhckRhdGEudGV4dHVyZS53aWR0aCArIGNoYXJEYXRhLnhPZmZzZXQpO1xuICAgICAgICBwb3MueCArPSBjaGFyRGF0YS54QWR2YW5jZTtcbiAgICAgICAgbWF4TGluZUhlaWdodCA9IE1hdGgubWF4KG1heExpbmVIZWlnaHQsIChjaGFyRGF0YS55T2Zmc2V0ICsgY2hhckRhdGEudGV4dHVyZS5oZWlnaHQpKTtcbiAgICAgICAgcHJldkNoYXJDb2RlID0gY2hhckNvZGU7XG4gICAgfVxuXG4gICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG5cbiAgICB2YXIgbGluZUFsaWduT2Zmc2V0cyA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8PSBsaW5lOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYWxpZ25PZmZzZXQgPSAwO1xuXG4gICAgICAgIGlmICh0aGlzLl9mb250LmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbGlnbk9mZnNldCA9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5fZm9udC5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpbmVBbGlnbk9mZnNldHMucHVzaChhbGlnbk9mZnNldCk7XG4gICAgfVxuXG4gICAgdmFyIGxlbkNoYXJzID0gY2hhcnMubGVuZ3RoO1xuICAgIHZhciB0aW50ID0gdGhpcy50aW50O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbkNoYXJzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYyA9IHRoaXMuX2dseXBoc1tpXTsgLy8gZ2V0IHRoZSBuZXh0IGdseXBoIHNwcml0ZVxuXG4gICAgICAgIGlmIChjKVxuICAgICAgICB7XG4gICAgICAgICAgICBjLnRleHR1cmUgPSBjaGFyc1tpXS50ZXh0dXJlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgYyA9IG5ldyBjb3JlLlNwcml0ZShjaGFyc1tpXS50ZXh0dXJlKTtcbiAgICAgICAgICAgIHRoaXMuX2dseXBocy5wdXNoKGMpO1xuICAgICAgICB9XG5cbiAgICAgICAgYy5wb3NpdGlvbi54ID0gKGNoYXJzW2ldLnBvc2l0aW9uLnggKyBsaW5lQWxpZ25PZmZzZXRzW2NoYXJzW2ldLmxpbmVdKSAqIHNjYWxlO1xuICAgICAgICBjLnBvc2l0aW9uLnkgPSBjaGFyc1tpXS5wb3NpdGlvbi55ICogc2NhbGU7XG4gICAgICAgIGMuc2NhbGUueCA9IGMuc2NhbGUueSA9IHNjYWxlO1xuICAgICAgICBjLnRpbnQgPSB0aW50O1xuXG4gICAgICAgIGlmICghYy5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoYyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZW1vdmUgdW5uZWNlc3NhcnkgY2hpbGRyZW4uXG4gICAgZm9yIChpID0gbGVuQ2hhcnM7IGkgPCB0aGlzLl9nbHlwaHMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKHRoaXMuX2dseXBoc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0V2lkdGggPSBtYXhMaW5lV2lkdGggKiBzY2FsZTtcbiAgICB0aGlzLnRleHRIZWlnaHQgPSAocG9zLnkgKyBkYXRhLmxpbmVIZWlnaHQpICogc2NhbGU7XG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gbWF4TGluZUhlaWdodCAqIHNjYWxlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb2YgdGhpcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGV4dCBiZWZvcmUgY2FsbGluZyBwYXJlbnQncyBnZXRMb2NhbEJvdW5kc1xuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5cbkJpdG1hcFRleHQucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICByZXR1cm4gY29yZS5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzLmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59O1xuXG5CaXRtYXBUZXh0LmZvbnRzID0ge307XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIE1vdmllQ2xpcCBpcyBhIHNpbXBsZSB3YXkgdG8gZGlzcGxheSBhbiBhbmltYXRpb24gZGVwaWN0ZWQgYnkgYSBsaXN0IG9mIHRleHR1cmVzLlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgYWxpZW5JbWFnZXMgPSBbXCJpbWFnZV9zZXF1ZW5jZV8wMS5wbmdcIixcImltYWdlX3NlcXVlbmNlXzAyLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDMucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wNC5wbmdcIl07XG4gKiB2YXIgdGV4dHVyZUFycmF5ID0gW107XG4gKlxuICogZm9yICh2YXIgaT0wOyBpIDwgNDsgaSsrKVxuICoge1xuICogICAgICB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoYWxpZW5JbWFnZXNbaV0pO1xuICogICAgICB0ZXh0dXJlQXJyYXkucHVzaCh0ZXh0dXJlKTtcbiAqIH07XG4gKlxuICogdmFyIG1jID0gbmV3IFBJWEkuTW92aWVDbGlwKHRleHR1cmVBcnJheSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0dXJlcyB7UElYSS5UZXh0dXJlW118T2JqZWN0W119IGFuIGFycmF5IG9mIHtAbGluayBQSVhJLlRleHR1cmV9IG9yIGZyYW1lIG9iamVjdHMgdGhhdCBtYWtlIHVwIHRoZSBhbmltYXRpb25cbiAqIEBwYXJhbSB0ZXh0dXJlc1tdLnRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHtAbGluayBQSVhJLlRleHR1cmV9IG9mIHRoZSBmcmFtZVxuICogQHBhcmFtIHRleHR1cmVzW10udGltZSB7bnVtYmVyfSB0aGUgZHVyYXRpb24gb2YgdGhlIGZyYW1lIGluIG1zXG4gKi9cbmZ1bmN0aW9uIE1vdmllQ2xpcCh0ZXh0dXJlcylcbntcbiAgICBjb3JlLlNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmVzWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlID8gdGV4dHVyZXNbMF0gOiB0ZXh0dXJlc1swXS50ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kdXJhdGlvbnMgPSBudWxsO1xuXG4gICAgdGhpcy50ZXh0dXJlcyA9IHRleHR1cmVzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNwZWVkIHRoYXQgdGhlIE1vdmllQ2xpcCB3aWxsIHBsYXkgYXQuIEhpZ2hlciBpcyBmYXN0ZXIsIGxvd2VyIGlzIHNsb3dlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmFuaW1hdGlvblNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBtb3ZpZSBjbGlwIHJlcGVhdHMgYWZ0ZXIgcGxheWluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMubG9vcCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gYSBNb3ZpZUNsaXAgZmluaXNoZXMgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICovXG4gICAgdGhpcy5vbkNvbXBsZXRlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEVsYXBzZWQgdGltZSBzaW5jZSBhbmltYXRpb24gaGFzIGJlZW4gc3RhcnRlZCwgdXNlZCBpbnRlcm5hbGx5IHRvIGRpc3BsYXkgY3VycmVudCB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIE1vdmllQ2xpcCBpcyBjdXJyZW50bHkgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1vdmllQ2xpcC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5Nb3ZpZUNsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTW92aWVDbGlwO1xubW9kdWxlLmV4cG9ydHMgPSBNb3ZpZUNsaXA7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1vdmllQ2xpcC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiB0b3RhbEZyYW1lcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIGZyYW1lcyBpbiB0aGUgTW92aWVDbGlwLiBUaGlzIGlzIHRoZSBzYW1lIGFzIG51bWJlciBvZiB0ZXh0dXJlc1xuICAgICAqIGFzc2lnbmVkIHRvIHRoZSBNb3ZpZUNsaXAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdG90YWxGcmFtZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIHRleHR1cmVzIHVzZWQgZm9yIHRoaXMgTW92aWVDbGlwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqXG4gICAgICovXG4gICAgdGV4dHVyZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZih2YWx1ZVswXSBpbnN0YW5jZW9mIGNvcmUuVGV4dHVyZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcy5wdXNoKHZhbHVlW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMucHVzaCh2YWx1ZVtpXS50aW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgKiBUaGUgTW92aWVDbGlwcyBjdXJyZW50IGZyYW1lIGluZGV4XG4gICAgKlxuICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAqIEByZWFkb25seVxuICAgICovXG4gICAgY3VycmVudEZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRGcmFtZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpICUgdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRGcmFtZSA8IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY3VycmVudEZyYW1lICs9IHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RnJhbWU7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKipcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYoIXRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogUGxheXMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZih0aGlzLnBsYXlpbmcpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5aW5nID0gdHJ1ZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZ29lcyB0byBhIHNwZWNpZmljIGZyYW1lXG4gKlxuICogQHBhcmFtIGZyYW1lTnVtYmVyIHtudW1iZXJ9IGZyYW1lIGluZGV4IHRvIHN0b3AgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kU3RvcCA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLnN0b3AoKTtcblxuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbdGhpcy5jdXJyZW50RnJhbWVdO1xufTtcblxuLyoqXG4gKiBHb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWUgYW5kIGJlZ2lucyBwbGF5aW5nIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RhcnQgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kUGxheSA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IGZyYW1lTnVtYmVyO1xuXG4gICAgdGhpcy5wbGF5KCk7XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKiBAcHJpdmF0ZVxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWQgPSB0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2R1cmF0aW9ucyAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIHZhciBsYWcgPSB0aGlzLl9jdXJyZW50VGltZSAlIDEgKiB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuXG4gICAgICAgIGxhZyArPSBlbGFwc2VkIC8gNjAgKiAxMDAwO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPCAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZS0tO1xuICAgICAgICAgICAgbGFnICs9IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2lnbiA9IE1hdGguc2lnbih0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lKTtcbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgPSBNYXRoLmZsb29yKHRoaXMuX2N1cnJlbnRUaW1lKTtcblxuICAgICAgICB3aGlsZSAobGFnID49IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhZyAtPSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdICogc2lnbjtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IHNpZ247XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBsYWcgLyB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBlbGFwc2VkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jdXJyZW50VGltZSA8IDAgJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AoMCk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5fY3VycmVudFRpbWUgPj0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoICYmICF0aGlzLmxvb3ApXG4gICAge1xuICAgICAgICB0aGlzLmdvdG9BbmRTdG9wKHRoaXMuX3RleHR1cmVzLmxlbmd0aCAtIDEpO1xuXG4gICAgICAgIGlmICh0aGlzLm9uQ29tcGxldGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuXG59O1xuXG4vKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZGVzdHJveXMgaXRcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICggKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuICAgIGNvcmUuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIEEgc2hvcnQgaGFuZCB3YXkgb2YgY3JlYXRpbmcgYSBtb3ZpZWNsaXAgZnJvbSBhbiBhcnJheSBvZiBmcmFtZSBpZHNcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVzIHtzdHJpbmdbXX0gdGhlIGFycmF5IG9mIGZyYW1lcyBpZHMgdGhlIG1vdmllY2xpcCB3aWxsIHVzZSBhcyBpdHMgdGV4dHVyZSBmcmFtZXNcbiAqL1xuTW92aWVDbGlwLmZyb21GcmFtZXMgPSBmdW5jdGlvbiAoZnJhbWVzKVxue1xuICAgIHZhciB0ZXh0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0ZXh0dXJlcy5wdXNoKG5ldyBjb3JlLlRleHR1cmUuZnJvbUZyYW1lKGZyYW1lc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW92aWVDbGlwKHRleHR1cmVzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGltYWdlIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgaW1hZ2UgdXJscyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUltYWdlcyA9IGZ1bmN0aW9uIChpbWFnZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTsiLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICAvLyBhIHNwcml0ZSB1c2UgZGZvciByZW5kZXJpbmcgdGV4dHVyZXMuLlxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlcicpO1xuXG4vKipcbiAqIEEgdGlsaW5nIHNwcml0ZSBpcyBhIGZhc3Qgd2F5IG9mIHJlbmRlcmluZyBhIHRpbGluZyBpbWFnZVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmUge1RleHR1cmV9IHRoZSB0ZXh0dXJlIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFRpbGluZ1Nwcml0ZSh0ZXh0dXJlLCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGluZyBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVTY2FsZSA9IG5ldyBjb3JlLlBvaW50KDEsMSk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgcG9zaXRpb24gb2YgdGhlIGltYWdlIHRoYXQgaXMgYmVpbmcgdGlsZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBuZXcgY29yZS5Qb2ludCgwLDApO1xuXG4gICAgLy8vLy8gcHJpdmF0ZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHdpdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gd2lkdGggfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0IHx8IDEwMDtcblxuICAgIC8qKlxuICAgICAqIEFuIGludGVybmFsIFdlYkdMIFVWIGNhY2hlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlVXZzfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdXZzID0gbmV3IGNvcmUuVGV4dHVyZVV2cygpO1xuXG4gICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IG51bGw7XG5cbiAgICAvL1RPRE8gbW92ZS4uXG4gICAgdGhpcy5zaGFkZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcihcblxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1VHJhbnNmb3JtOycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJyAgIGNvb3JkIC09IHVUcmFuc2Zvcm0ueHk7JyxcbiAgICAgICAgJyAgIGNvb3JkIC89IHVUcmFuc2Zvcm0uenc7JyxcbiAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBjb29yZDsnLFxuXG4gICAgICAgICcgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpOycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgIFtcbiAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdUZyYW1lOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzIgdVBpeGVsU2l6ZTsnLFxuXG4gICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IG1vZCh2VGV4dHVyZUNvb3JkLCB1RnJhbWUuencpOycsXG4gICAgICAgICcgICBjb29yZCA9IGNsYW1wKGNvb3JkLCB1UGl4ZWxTaXplLCB1RnJhbWUuencgLSB1UGl4ZWxTaXplKTsnLFxuICAgICAgICAnICAgY29vcmQgKz0gdUZyYW1lLnh5OycsXG5cbiAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9ICB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdUZyYW1lOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVRyYW5zZm9ybTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLDAsMSwxXSB9LFxuICAgICAgICAgICAgICAgIHVQaXhlbFNpemUgOiB7IHR5cGUgOiAnMmZ2JywgdmFsdWU6IFsxLCAxXX1cbiAgICAgICAgICAgIH1cbiAgICAgICk7XG59XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsaW5nU3ByaXRlO1xubW9kdWxlLmV4cG9ydHMgPSBUaWxpbmdTcHJpdGU7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsaW5nU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRpbGluZ1Nwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybjtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICAvLyB0d2VhayBvdXIgdGV4dHVyZSB0ZW1wb3JhcmlseS4uXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUgfHwgIXRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGVtcFV2cyA9IHRleHR1cmUuX3V2cyxcbiAgICAgICAgdGVtcFdpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIHRlbXBIZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQsXG4gICAgICAgIHR3ID0gdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCxcbiAgICAgICAgdGggPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRoaXMuX3V2cztcbiAgICB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51UGl4ZWxTaXplLnZhbHVlWzBdID0gMS4wL3R3O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMV0gPSAxLjAvdGg7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMF0gPSB0ZW1wVXZzLngwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVsxXSA9IHRlbXBVdnMueTA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzJdID0gdGVtcFV2cy54MSAtIHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzNdID0gdGVtcFV2cy55MiAtIHRlbXBVdnMueTA7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzBdID0gKHRoaXMudGlsZVBvc2l0aW9uLnggJSAodGVtcFdpZHRoICogdGhpcy50aWxlU2NhbGUueCkpIC8gdGhpcy5fd2lkdGg7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsxXSA9ICh0aGlzLnRpbGVQb3NpdGlvbi55ICUgKHRlbXBIZWlnaHQgKiB0aGlzLnRpbGVTY2FsZS55KSkgLyB0aGlzLl9oZWlnaHQ7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsyXSA9ICggdHcgLyB0aGlzLl93aWR0aCApICogdGhpcy50aWxlU2NhbGUueDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzNdID0gKCB0aCAvIHRoaXMuX2hlaWdodCApICogdGhpcy50aWxlU2NhbGUueTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIodGhpcyk7XG5cbiAgICB0ZXh0dXJlLl91dnMgPSB0ZW1wVXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGVtcFdpZHRoO1xuICAgIHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRlbXBIZWlnaHQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBhIHJlZmVyZW5jZSB0byB0aGUgY2FudmFzIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0LFxuICAgICAgICB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgYmFzZVRleHR1cmUgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBtb2RYID0gKHRoaXMudGlsZVBvc2l0aW9uLnggLyB0aGlzLnRpbGVTY2FsZS54KSAlIHRleHR1cmUuX2ZyYW1lLndpZHRoLFxuICAgICAgICBtb2RZID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgLyB0aGlzLnRpbGVTY2FsZS55KSAlIHRleHR1cmUuX2ZyYW1lLmhlaWdodDtcblxuICAgIC8vIGNyZWF0ZSBhIG5pY2Ugc2hpbnkgcGF0dGVybiFcbiAgICAvLyBUT0RPIHRoaXMgbmVlZHMgdG8gYmUgcmVmcmVzaGVkIGlmIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgaWYoIXRoaXMuX2NhbnZhc1BhdHRlcm4pXG4gICAge1xuICAgICAgICAvLyBjdXQgYW4gb2JqZWN0IGZyb20gYSBzcHJpdGVzaGVldC4uXG4gICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IGNvcmUuQ2FudmFzQnVmZmVyKHRleHR1cmUuX2ZyYW1lLndpZHRoLCB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQpO1xuXG4gICAgICAgIC8vIFRpbnQgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgICAgaWYgKHRoaXMudGludCAhPT0gMHhGRkZGRkYpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlZFRpbnQgIT09IHRoaXMudGludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUgPSBDYW52YXNUaW50ZXIuZ2V0VGludGVkVGV4dHVyZSh0aGlzLCB0aGlzLnRpbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZSh0aGlzLnRpbnRlZFRleHR1cmUsIDAsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZShiYXNlVGV4dHVyZS5zb3VyY2UsIC10ZXh0dXJlLl9mcmFtZS54LCAtdGV4dHVyZS5fZnJhbWUueSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IHRlbXBDYW52YXMuY29udGV4dC5jcmVhdGVQYXR0ZXJuKCB0ZW1wQ2FudmFzLmNhbnZhcywgJ3JlcGVhdCcgKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgY29udGV4dCBzdGF0ZS4uXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb24pO1xuXG4gICAgLy8gVE9ETyAtIHRoaXMgc2hvdWxkIGJlIHJvbGxlZCBpbnRvIHRoZSBzZXRUcmFuc2Zvcm0gYWJvdmUuLlxuICAgIGNvbnRleHQuc2NhbGUodGhpcy50aWxlU2NhbGUueCx0aGlzLnRpbGVTY2FsZS55KTtcblxuICAgIGNvbnRleHQudHJhbnNsYXRlKG1vZFggKyAodGhpcy5hbmNob3IueCAqIC10aGlzLl93aWR0aCApLFxuICAgICAgICAgICAgICAgICAgICAgIG1vZFkgKyAodGhpcy5hbmNob3IueSAqIC10aGlzLl9oZWlnaHQpKTtcblxuICAgIC8vIGNoZWNrIGJsZW5kIG1vZGVcbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyBmaWxsIHRoZSBwYXR0ZXJuIVxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fY2FudmFzUGF0dGVybjtcbiAgICBjb250ZXh0LmZpbGxSZWN0KC1tb2RYLFxuICAgICAgICAgICAgICAgICAgICAgLW1vZFksXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl93aWR0aCAvIHRoaXMudGlsZVNjYWxlLngsXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWlnaHQgLyB0aGlzLnRpbGVTY2FsZS55KTtcblxuXG4gICAgLy9UT0RPIC0gcHJldHR5IHN1cmUgdGhpcyBjYW4gYmUgZGVsZXRlZC4uLlxuICAgIC8vY29udGV4dC50cmFuc2xhdGUoLXRoaXMudGlsZVBvc2l0aW9uLnggKyAodGhpcy5hbmNob3IueCAqIHRoaXMuX3dpZHRoKSwgLXRoaXMudGlsZVBvc2l0aW9uLnkgKyAodGhpcy5hbmNob3IueSAqIHRoaXMuX2hlaWdodCkpO1xuICAgIC8vY29udGV4dC5zY2FsZSgxIC8gdGhpcy50aWxlU2NhbGUueCwgMSAvIHRoaXMudGlsZVNjYWxlLnkpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBzcHJpdGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xuXG4gICAgdmFyIHcwID0gd2lkdGggKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICB2YXIgdzEgPSB3aWR0aCAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgdmFyIGgwID0gaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgdmFyIGgxID0gaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG5cbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgdmFyIHgxID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTIgPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHg0ID0gIGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciBtaW5YLFxuICAgICAgICBtYXhYLFxuICAgICAgICBtaW5ZLFxuICAgICAgICBtYXhZO1xuXG4gICAgbWluWCA9IHgxO1xuICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgbWluWSA9IHkxO1xuICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgbWF4WCA9IHgxO1xuICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgbWF4WSA9IHkxO1xuICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG5cbiAgICByZXR1cm4gYm91bmRzO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byBjaGVja1xuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKlxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsZVNjYWxlID0gbnVsbDtcbiAgICB0aGlzLl90aWxlU2NhbGVPZmZzZXQgPSBudWxsO1xuICAgIHRoaXMudGlsZVBvc2l0aW9uID0gbnVsbDtcblxuICAgIHRoaXMuX3V2cyA9IG51bGw7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSB0aWxpbmcgc3ByaXRlIHRoYXQgd2lsbCB1c2UgYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICovXG5UaWxpbmdTcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQsd2lkdGgsaGVpZ2h0KVxue1xuICAgIHZhciB0ZXh0dXJlID0gY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgJyArIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKHRleHR1cmUsd2lkdGgsaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBBIG5ldyBUaWxpbmdTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgd2lkdGgsIGhlaWdodCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRpbGluZ1Nwcml0ZShjb3JlLlRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpLHdpZHRoLGhlaWdodCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgRGlzcGxheU9iamVjdCA9IGNvcmUuRGlzcGxheU9iamVjdCxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gbnVsbDtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbEhpdFRlc3QgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsRGVzdHJveSA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVkU3ByaXRlID0gbnVsbDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGlzcGxheU9iamVjdC5wcm90b3R5cGUsIHtcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgeW91IHdhbnQgdGhpcyBkaXNwbGF5IG9iamVjdCB0byBiZSBjYWNoZWQgYXMgYSBiaXRtYXAuXG4gICAgICogVGhpcyBiYXNpY2FsbHkgdGFrZXMgYSBzbmFwIHNob3Qgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IGFzIGl0IGlzIGF0IHRoYXQgbW9tZW50LiBJdCBjYW4gcHJvdmlkZSBhIHBlcmZvcm1hbmNlIGJlbmVmaXQgZm9yIGNvbXBsZXggc3RhdGljIGRpc3BsYXlPYmplY3RzLlxuICAgICAqIFRvIHJlbW92ZSBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ2ZhbHNlJ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGNhY2hlQXNCaXRtYXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVBc0JpdG1hcDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NhY2hlQXNCaXRtYXAgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSB0aGlzLnJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gdGhpcy5yZW5kZXJDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMudXBkYXRlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzID0gdGhpcy5nZXRCb3VuZHM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbERlc3Ryb3kgPSB0aGlzLmRlc3Ryb3k7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQgPSB0aGlzLmNvbnRhaW5zUG9pbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSB0aGlzLl9jYWNoZUFzQml0bWFwRGVzdHJveTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXN0cm95Q2FjaGVkRGlzcGxheU9iamVjdCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXM7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRCb3VuZHMgPSB0aGlzLl9vcmlnaW5hbEdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX29yaWdpbmFsRGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fb3JpZ2luYWxDb250YWluc1BvaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBXZWJHTFxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gdGhlIFdlYkdMIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZFdlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENhY2hlZERpc3BsYXlPYmplY3QoIHJlbmRlcmVyICk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIoIHRoaXMuX2NhY2hlZFNwcml0ZSApO1xufTtcblxuLyoqXG4qIFByZXBhcmVzIHRoZSBXZWJHTCByZW5kZXJlciB0byBjYWNoZSB0aGUgc3ByaXRlXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGZpcnN0IHdlIGZsdXNoIGFueXRoaW5nIGxlZnQgaW4gdGhlIHJlbmRlcmVyIChvdGhlcndpc2UgaXQgd291bGQgZ2V0IHJlbmRlcmVkIHRvIHRoZSBjYWNoZWQgdGV4dHVyZSlcbiAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbiAgICAvL3RoaXMuZmlsdGVycz0gW107XG4gICAgLy8gbmV4dCB3ZSBmaW5kIHRoZSBkaW1lbnNpb25zIG9mIHRoZSB1bnRyYW5zZm9ybWVkIG9iamVjdFxuICAgIC8vIHRoaXMgZnVuY3Rpb24gYWxzbyBjYWxscyB1cGRhdGV0cmFuc2Zvcm0gb24gYWxsIGl0cyBjaGlsZHJlbiBhcyBwYXJ0IG9mIHRoZSBtZWFzdXJpbmcuIFRoaXMgbWVhbnMgd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIHRyYW5zZm9ybSBhZ2FpbiBpbiB0aGlzIGZ1bmN0aW9uXG4gICAgLy8gVE9ETyBwYXNzIGFuIG9iamVjdCB0byBjbG9uZSB0b28/IHNhdmVzIGhhdmluZyB0byBjcmVhdGUgYSBuZXcgb25lIGVhY2ggdGltZSFcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmNsb25lKCk7XG5cbiAgICAvLyBhZGQgc29tZSBwYWRkaW5nIVxuICAgIGlmKHRoaXMuX2ZpbHRlcnMpXG4gICAge1xuICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuX2ZpbHRlcnNbMF0ucGFkZGluZztcbiAgICAgICAgYm91bmRzLnggLT0gcGFkZGluZztcbiAgICAgICAgYm91bmRzLnkgLT0gcGFkZGluZztcblxuICAgICAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG4gICAgfVxuXG4gICAgLy8gZm9yIG5vdyB3ZSBjYWNoZSB0aGUgY3VycmVudCByZW5kZXJUYXJnZXQgdGhhdCB0aGUgd2ViR0wgcmVuZGVyZXIgaXMgY3VycmVudGx5IHVzaW5nLlxuICAgIC8vIHRoaXMgY291bGQgYmUgbW9yZSBlbGVnZW50Li5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldDtcbiAgICAvLyBXZSBhbHNvIHN0b3JlIHRoZSBmaWx0ZXIgc3RhY2sgLSBJIHdpbGwgZGVmaW5pdGVseSBsb29rIHRvIGNoYW5nZSBob3cgdGhpcyB3b3JrcyBhIGxpdHRsZSBsYXRlciBkb3duIHRoZSBsaW5lLlxuICAgIHZhciBzdGFjayA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2s7XG5cbiAgICAvLyB0aGlzIHJlbmRlclRleHR1cmUgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBjYWNoZWQgRGlzcGxheU9iamVjdFxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG5cblxuICAgIC8vIHNldCBhbGwgcHJvcGVydGllcyB0byB0aGVyZSBvcmlnaW5hbCBzbyB3ZSBjYW4gcmVuZGVyIHRvIGEgdGV4dHVyZVxuICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoY2FjaGVkUmVuZGVyVGFyZ2V0KTtcbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmZpbHRlclN0YWNrID0gc3RhY2s7XG5cbiAgICB0aGlzLnJlbmRlcldlYkdMICAgICA9IHRoaXMuX3JlbmRlckNhY2hlZFdlYkdMO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICAgICAgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgdHJhbnNmb3JtIG9mIHRoZSBjYWNoZWQgc3ByaXRlIHRvIGF2b2lkIHRoZSBuYXN0eSBmbGlja2VyLi5cbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgLy8gbWFwIHRoZSBoaXQgdGVzdC4uXG4gICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fY2FjaGVkU3ByaXRlLmNvbnRhaW5zUG9pbnQuYmluZCh0aGlzLl9jYWNoZWRTcHJpdGUpO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgc3ByaXRlIHdpdGggY2FudmFzXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gdGhlIENhbnZhcyByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9yZW5kZXJDYWNoZWRDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdENhbnZhcyggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLnJlbmRlckNhbnZhcyhyZW5kZXJlcik7XG59O1xuXG4vL1RPRE8gdGhpcyBjYW4gYmUgdGhlIHNhbWUgYXMgdGhlIHdlYkdMIHZlcmlzb24uLiB3aWxsIG5lZWQgdG8gZG8gYSBsaXR0bGUgdHdlYWtpbmcgZmlyc3QgdGhvdWdoLi5cbi8qKlxuKiBQcmVwYXJlcyB0aGUgQ2FudmFzIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvL2dldCBib3VuZHMgYWN0dWFsbHkgdHJhbnNmb3JtcyB0aGUgb2JqZWN0IGZvciB1cyBhbHJlYWR5IVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIG0sIHRydWUpO1xuXG4gICAgLy8gbm93IHJlc3RvcmUgdGhlIHN0YXRlIGJlIHNldHRpbmcgdGhlIG5ldyBwcm9wZXJ0aWVzXG4gICAgcmVuZGVyZXIuY29udGV4dCA9IGNhY2hlZFJlbmRlclRhcmdldDtcblxuICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fcmVuZGVyQ2FjaGVkQ2FudmFzO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICA9IHRoaXMuX2dldENhY2hlZEJvdW5kcztcblxuXG4gICAgLy8gY3JlYXRlIG91ciBjYWNoZWQgc3ByaXRlXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IGNvcmUuU3ByaXRlKHJlbmRlclRleHR1cmUpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogQ2FsY3VsYXRlcyB0aGUgYm91bmRzIG9mIHRoZSBjYWNoZWQgc3ByaXRlXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2dldENhY2hlZEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLl9jYWNoZWRTcHJpdGUuZ2V0Qm91bmRzKCk7XG59O1xuXG4vKipcbiogRGVzdHJveXMgdGhlIGNhY2hlZCBzcHJpdGUuXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX3RleHR1cmUuZGVzdHJveSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59O1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcERlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSgpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSBpbnN0YW5jZSBuYW1lIG9mIHRoZSBvYmplY3QuXG4gKlxuICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAqIEBtZW1iZXIge3N0cmluZ31cbiAqL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5uYW1lID0gbnVsbDtcblxuLyoqXG4qIFJldHVybnMgdGhlIGRpc3BsYXkgb2JqZWN0IGluIHRoZSBjb250YWluZXJcbipcbiogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuKiBAcGFyYW0gbmFtZSB7c3RyaW5nfSBpbnN0YW5jZSBuYW1lXG4qIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiovXG5jb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWUgPSBmdW5jdGlvbiAobmFtZSlcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbltpXS5uYW1lID09PSBuYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdFxuKlxuKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuKiBAcGFyYW0gcG9pbnQge1BvaW50fSB0aGUgcG9pbnQgdG8gd3JpdGUgdGhlIGdsb2JhbCB2YWx1ZSB0by4gSWYgbnVsbCBhIG5ldyBwb2ludCB3aWxsIGJlIHJldHVybmVkXG4qIEByZXR1cm4ge1BvaW50fVxuKi9cbmNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0R2xvYmFsUG9zaXRpb24gPSBmdW5jdGlvbiAocG9pbnQpXG57XG4gICAgcG9pbnQgPSBwb2ludCB8fCBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgaWYodGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICBwb2ludC54ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMud29ybGRUcmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHBvaW50LnggPSB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIHBvaW50LnkgPSB0aGlzLnBvc2l0aW9uLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxucmVxdWlyZSgnLi9jYWNoZUFzQml0bWFwJyk7XG5yZXF1aXJlKCcuL2dldENoaWxkQnlOYW1lJyk7XG5yZXF1aXJlKCcuL2dldEdsb2JhbFBvc2l0aW9uJyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmV4dHJhc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNb3ZpZUNsaXA6ICAgICAgcmVxdWlyZSgnLi9Nb3ZpZUNsaXAnKSxcbiAgICBUaWxpbmdTcHJpdGU6ICAgcmVxdWlyZSgnLi9UaWxpbmdTcHJpdGUnKSxcbiAgICBCaXRtYXBUZXh0OiAgICAgcmVxdWlyZSgnLi9CaXRtYXBUZXh0Jylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGUgWSBpcyBmbGlwcGVkIGluIHRoaXMgc2hhZGVyIGZvciBzb21lIHJlYXNvbi5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgc2hhZGVyIDogaHR0cHM6Ly93d3cuc2hhZGVydG95LmNvbS92aWV3L2xzc0dEaiBieSBAbW92QVgxM2hcbiAqL1xuXG4vKipcbiAqIEFuIEFTQ0lJIGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQXNjaWlGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gZmxvYXQgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IGNoYXJhY3RlcihmbG9hdCBuLCB2ZWMyIHApXFxue1xcbiAgICBwID0gZmxvb3IocCp2ZWMyKDQuMCwgLTQuMCkgKyAyLjUpO1xcbiAgICBpZiAoY2xhbXAocC54LCAwLjAsIDQuMCkgPT0gcC54ICYmIGNsYW1wKHAueSwgMC4wLCA0LjApID09IHAueSlcXG4gICAge1xcbiAgICAgICAgaWYgKGludChtb2Qobi9leHAyKHAueCArIDUuMCpwLnkpLCAyLjApKSA9PSAxKSByZXR1cm4gMS4wO1xcbiAgICB9XFxuICAgIHJldHVybiAwLjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5O1xcblxcbiAgICB2ZWMzIGNvbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgZmxvb3IoIHV2IC8gcGl4ZWxTaXplICkgKiBwaXhlbFNpemUgLyBkaW1lbnNpb25zLnh5KS5yZ2I7XFxuXFxuICAgIGZsb2F0IGdyYXkgPSAoY29sLnIgKyBjb2wuZyArIGNvbC5iKSAvIDMuMDtcXG5cXG4gICAgZmxvYXQgbiA9ICA2NTUzNi4wOyAgICAgICAgICAgICAvLyAuXFxuICAgIGlmIChncmF5ID4gMC4yKSBuID0gNjU2MDAuMDsgICAgLy8gOlxcbiAgICBpZiAoZ3JheSA+IDAuMykgbiA9IDMzMjc3Mi4wOyAgIC8vICpcXG4gICAgaWYgKGdyYXkgPiAwLjQpIG4gPSAxNTI1NTA4Ni4wOyAvLyBvXFxuICAgIGlmIChncmF5ID4gMC41KSBuID0gMjMzODUxNjQuMDsgLy8gJlxcbiAgICBpZiAoZ3JheSA+IDAuNikgbiA9IDE1MjUyMDE0LjA7IC8vIDhcXG4gICAgaWYgKGdyYXkgPiAwLjcpIG4gPSAxMzE5OTQ1Mi4wOyAvLyBAXFxuICAgIGlmIChncmF5ID4gMC44KSBuID0gMTE1MTI4MTAuMDsgLy8gI1xcblxcbiAgICB2ZWMyIHAgPSBtb2QoIHV2IC8gKCBwaXhlbFNpemUgKiAwLjUgKSwgMi4wKSAtIHZlYzIoMS4wKTtcXG4gICAgY29sID0gY29sICogY2hhcmFjdGVyKG4sIHApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbCwgMS4wKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiA4IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkFzY2lpRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQXNjaWlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXNjaWlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFzY2lpRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBc2NpaUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGl4ZWwgc2l6ZSB1c2VkIGJ5IHRoZSBmaWx0ZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Bc2NpaUZpbHRlciNcbiAgICAgKi9cbiAgICBzaXplOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsb29tRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsb29tRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlciA9IG5ldyBCbHVyWUZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcbn1cblxuQmxvb21GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbG9vbUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbG9vbUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxvb21GaWx0ZXI7XG5cbkJsb29tRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAvL1RPRE8gLSBjb3B5VGV4U3ViSW1hZ2UyRCBjb3VsZCBiZSB1c2VkIGhlcmU/XG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5TQ1JFRU4pO1xuXG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsb29tRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cblxuLyoqXG4gKiBUaGUgQmx1ckRpckZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0b3dhcmQgYSBkaXJlY3Rpb24gdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpclhcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJZXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJEaXJGaWx0ZXIoZGlyWCwgZGlyWSlcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gZmxvYXQgZGlyWDtcXG51bmlmb3JtIGZsb2F0IGRpclk7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbM107XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWSApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApICogMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pICogMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pICogMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSAqIDAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgZGlyWDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogZGlyWCB8fCAwIH0sXG4gICAgICAgICAgICBkaXJZOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJZIHx8IDAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWCBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJYID0gZGlyWCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWSBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJZID0gZGlyWSB8fCAwO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJEaXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJEaXJGaWx0ZXI7XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcikge1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZiAodGhpcy5wYXNzZXMgPT09IDEpIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCByZW5kZXJUYXJnZXQsIGNsZWFyKTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMjsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL3RoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvICh0aGlzLnBhc3NlcysoaSoyKSkgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCByZW5kZXJUYXJnZXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IHZhbHVlICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBkaXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyWDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZGlyWC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJZO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJZLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWUZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBCbHVyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG59XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJGaWx0ZXI7XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHBhc3Nlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5ibHVyWEZpbHRlci5wYXNzZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcyA9IHRoaXMuYmx1cllGaWx0ZXIucGFzc2VzID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1clhGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJYRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAxMiAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwNCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuXFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1clhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1clhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJYRmlsdGVyO1xuXG5CbHVyWEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1clhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJYRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gIE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJZRmlsdGVyIGFwcGxpZXMgYSBob3Jpem9udGFsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAxMiAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDEyICogc3RyZW5ndGgpO1xcblxcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJZRmlsdGVyO1xuXG5CbHVyWUZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gTWF0aC5hYnModGhpcy5zdHJlbmd0aCkgLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIFNtYXJ0IEJsdXIgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTbWFydEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgKiBwZXJjZW50KTtcXG4gICAgICAgIHNhbXBsZS5yZ2IgKj0gc2FtcGxlLmE7XFxuICAgICAgICBjb2xvciArPSBzYW1wbGUgKiB3ZWlnaHQ7XFxuICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgLyB0b3RhbDtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAvPSBnbF9GcmFnQ29sb3IuYSArIDAuMDAwMDE7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgZGVsdGE6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC4xLCB5OiAwLjAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU21hcnRCbHVyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTbWFydEJsdXJGaWx0ZXI7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA1eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIGBgYGpzXG4gKiAgdmFyIGNvbG9yTWF0cml4ID0gbmV3IFBJWEkuQ29sb3JNYXRyaXhGaWx0ZXIoKTtcbiAqICBjb250YWluZXIuZmlsdGVycyA9IFtjb2xvck1hdHJpeF07XG4gKiAgY29sb3JNYXRyaXguY29udHJhc3QoMik7XG4gKiBgYGBcbiAqIEBhdXRob3IgQ2zDqW1lbnQgQ2hlbmViYXVsdCA8Y2xlbWVudEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ29sb3JNYXRyaXhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgbVsyNV07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcblxcbiAgICB2ZWM0IGMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IuciA9IChtWzBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzJdICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IG1bNF07XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5nID0gKG1bNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bN10gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gbVs5XTtcXG5cXG4gICAgIGdsX0ZyYWdDb2xvci5iID0gKG1bMTBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzExXSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IG1bMTRdO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmEgPSAobVsxNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTZdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gbVsxOV07XFxuXFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICcxZnYnLCB2YWx1ZTogW1xuICAgICAgICAgICAgICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvck1hdHJpeEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JNYXRyaXhGaWx0ZXI7XG5cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGN1cnJlbnQgbWF0cml4IGFuZCBzZXQgdGhlIG5ldyBvbmVcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IGlmIHRydWUsIGN1cnJlbnQgbWF0cml4IGFuZCBtYXRyaXggYXJlIG11bHRpcGxpZWQuIElmIGZhbHNlLCBqdXN0IHNldCB0aGUgY3VycmVudCBtYXRyaXggd2l0aCBAcGFyYW0gbWF0cml4XG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fbG9hZE1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgsIG11bHRpcGx5KVxue1xuICAgIG11bHRpcGx5ID0gISFtdWx0aXBseTtcblxuICAgIHZhciBuZXdNYXRyaXggPSBtYXRyaXg7XG5cbiAgICBpZiAobXVsdGlwbHkpIHtcbiAgICAgICAgdGhpcy5fbXVsdGlwbHkobmV3TWF0cml4LCB0aGlzLnVuaWZvcm1zLm0udmFsdWUsIG1hdHJpeCk7XG4gICAgICAgIG5ld01hdHJpeCA9IHRoaXMuX2NvbG9yTWF0cml4KG5ld01hdHJpeCk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgbWF0cml4XG4gICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gbmV3TWF0cml4O1xufTtcblxuLyoqXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQ1J3NcbiAqXG4gKiBAcGFyYW0gb3V0IHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0gYSB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIGIge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyBvdXQge251bWJlcltdfSAobWF0IDV4NClcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpXG57XG5cbiAgICAvLyBSZWQgQ2hhbm5lbFxuICAgIG91dFswXSA9IChhWzBdICogYlswXSkgKyAoYVsxXSAqIGJbNV0pICsgKGFbMl0gKiBiWzEwXSkgKyAoYVszXSAqIGJbMTVdKTtcbiAgICBvdXRbMV0gPSAoYVswXSAqIGJbMV0pICsgKGFbMV0gKiBiWzZdKSArIChhWzJdICogYlsxMV0pICsgKGFbM10gKiBiWzE2XSk7XG4gICAgb3V0WzJdID0gKGFbMF0gKiBiWzJdKSArIChhWzFdICogYls3XSkgKyAoYVsyXSAqIGJbMTJdKSArIChhWzNdICogYlsxN10pO1xuICAgIG91dFszXSA9IChhWzBdICogYlszXSkgKyAoYVsxXSAqIGJbOF0pICsgKGFbMl0gKiBiWzEzXSkgKyAoYVszXSAqIGJbMThdKTtcbiAgICBvdXRbNF0gPSAoYVswXSAqIGJbNF0pICsgKGFbMV0gKiBiWzldKSArIChhWzJdICogYlsxNF0pICsgKGFbM10gKiBiWzE5XSk7XG5cbiAgICAvLyBHcmVlbiBDaGFubmVsXG4gICAgb3V0WzVdID0gKGFbNV0gKiBiWzBdKSArIChhWzZdICogYls1XSkgKyAoYVs3XSAqIGJbMTBdKSArIChhWzhdICogYlsxNV0pO1xuICAgIG91dFs2XSA9IChhWzVdICogYlsxXSkgKyAoYVs2XSAqIGJbNl0pICsgKGFbN10gKiBiWzExXSkgKyAoYVs4XSAqIGJbMTZdKTtcbiAgICBvdXRbN10gPSAoYVs1XSAqIGJbMl0pICsgKGFbNl0gKiBiWzddKSArIChhWzddICogYlsxMl0pICsgKGFbOF0gKiBiWzE3XSk7XG4gICAgb3V0WzhdID0gKGFbNV0gKiBiWzNdKSArIChhWzZdICogYls4XSkgKyAoYVs3XSAqIGJbMTNdKSArIChhWzhdICogYlsxOF0pO1xuICAgIG91dFs5XSA9IChhWzVdICogYls0XSkgKyAoYVs2XSAqIGJbOV0pICsgKGFbN10gKiBiWzE0XSkgKyAoYVs4XSAqIGJbMTldKTtcblxuICAgIC8vIEJsdWUgQ2hhbm5lbFxuICAgIG91dFsxMF0gPSAoYVsxMF0gKiBiWzBdKSArIChhWzExXSAqIGJbNV0pICsgKGFbMTJdICogYlsxMF0pICsgKGFbMTNdICogYlsxNV0pO1xuICAgIG91dFsxMV0gPSAoYVsxMF0gKiBiWzFdKSArIChhWzExXSAqIGJbNl0pICsgKGFbMTJdICogYlsxMV0pICsgKGFbMTNdICogYlsxNl0pO1xuICAgIG91dFsxMl0gPSAoYVsxMF0gKiBiWzJdKSArIChhWzExXSAqIGJbN10pICsgKGFbMTJdICogYlsxMl0pICsgKGFbMTNdICogYlsxN10pO1xuICAgIG91dFsxM10gPSAoYVsxMF0gKiBiWzNdKSArIChhWzExXSAqIGJbOF0pICsgKGFbMTJdICogYlsxM10pICsgKGFbMTNdICogYlsxOF0pO1xuICAgIG91dFsxNF0gPSAoYVsxMF0gKiBiWzRdKSArIChhWzExXSAqIGJbOV0pICsgKGFbMTJdICogYlsxNF0pICsgKGFbMTNdICogYlsxOV0pO1xuXG4gICAgLy8gQWxwaGEgQ2hhbm5lbFxuICAgIG91dFsxNV0gPSAoYVsxNV0gKiBiWzBdKSArIChhWzE2XSAqIGJbNV0pICsgKGFbMTddICogYlsxMF0pICsgKGFbMThdICogYlsxNV0pO1xuICAgIG91dFsxNl0gPSAoYVsxNV0gKiBiWzFdKSArIChhWzE2XSAqIGJbNl0pICsgKGFbMTddICogYlsxMV0pICsgKGFbMThdICogYlsxNl0pO1xuICAgIG91dFsxN10gPSAoYVsxNV0gKiBiWzJdKSArIChhWzE2XSAqIGJbN10pICsgKGFbMTddICogYlsxMl0pICsgKGFbMThdICogYlsxN10pO1xuICAgIG91dFsxOF0gPSAoYVsxNV0gKiBiWzNdKSArIChhWzE2XSAqIGJbOF0pICsgKGFbMTddICogYlsxM10pICsgKGFbMThdICogYlsxOF0pO1xuICAgIG91dFsxOV0gPSAoYVsxNV0gKiBiWzRdKSArIChhWzE2XSAqIGJbOV0pICsgKGFbMTddICogYlsxNF0pICsgKGFbMThdICogYlsxOV0pO1xuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEByZXR1cm4gbSB7bnVtYmVyW119IChtYXQgNXg0KSB3aXRoIGFsbCB2YWx1ZXMgYmV0d2VlbiAwLTFcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9jb2xvck1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgLy8gQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICAgIHZhciBtID0gbmV3IEZsb2F0MzJBcnJheShtYXRyaXgpO1xuICAgIG1bNF0gLz0gMjU1O1xuICAgIG1bOV0gLz0gMjU1O1xuICAgIG1bMTRdIC89IDI1NTtcbiAgICBtWzE5XSAvPSAyNTU7XG5cbiAgICByZXR1cm4gbTtcbn07XG5cbi8qKlxuICogQWRqdXN0cyBicmlnaHRuZXNzXG4gKlxuICogQHBhcmFtIGIge251bWJlcn0gdmFsdWUgb2YgdGhlIGJyaWd0aG5lc3MgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJpZ2h0bmVzcyA9IGZ1bmN0aW9uIChiLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBiLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCBiLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCBiLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgbWF0cmljZXMgaW4gZ3JleSBzY2FsZXNcbiAqXG4gKiBAcGFyYW0gc2NhbGUge251bWJlcn0gdmFsdWUgb2YgdGhlIGdyZXkgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlID0gZnVuY3Rpb24gKHNjYWxlLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuLy9BbWVyaWNhbml6ZWQgYWxpYXNcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmF5c2NhbGUgPSBDb2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlO1xuXG4vKipcbiAqIFNldCB0aGUgYmxhY2sgYW5kIHdoaXRlIG1hdHJpY2VcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ibGFja0FuZFdoaXRlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBodWUgcHJvcGVydHkgb2YgdGhlIGNvbG9yXG4gKlxuICogQHBhcmFtIHJvdGF0aW9uIHtudW1iZXJ9IGluIGRlZ3JlZXNcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5odWUgPSBmdW5jdGlvbiAocm90YXRpb24sIG11bHRpcGx5KVxue1xuICAgIHJvdGF0aW9uID0gKHJvdGF0aW9uIHx8IDApIC8gMTgwICogTWF0aC5QSTtcbiAgICB2YXIgY29zID0gTWF0aC5jb3Mocm90YXRpb24pLFxuICAgICAgICBzaW4gPSBNYXRoLnNpbihyb3RhdGlvbik7XG5cbiAgICAvLyBsdW1pbmFuY2VSZWQsIGx1bWluYW5jZUdyZWVuLCBsdW1pbmFuY2VCbHVlXG4gICAgdmFyIGx1bVIgPSAwLjIxMywgLy8gb3IgMC4zMDg2XG4gICAgICAgIGx1bUcgPSAwLjcxNSwgLy8gb3IgMC42MDk0XG4gICAgICAgIGx1bUIgPSAwLjA3MjsgLy8gb3IgMC4wODIwXG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBsdW1SICsgY29zICogKDEgLSBsdW1SKSArIHNpbiAqICgtbHVtUiksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKC1sdW1HKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoMSAtIGx1bUIpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgwLjE0MyksIGx1bUcgKyBjb3MgKiAoMSAtIGx1bUcpICsgc2luICogKDAuMTQwKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoLTAuMjgzKSwgMCwgMCxcbiAgICAgICAgbHVtUiArIGNvcyAqICgtbHVtUikgKyBzaW4gKiAoLSgxIC0gbHVtUikpLCBsdW1HICsgY29zICogKC1sdW1HKSArIHNpbiAqIChsdW1HKSwgbHVtQiArIGNvcyAqICgxIC0gbHVtQikgKyBzaW4gKiAobHVtQiksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLyoqXG4gKiBTZXQgdGhlIGNvbnRyYXN0IG1hdHJpeCwgaW5jcmVhc2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBkYXJrIGFuZCBicmlnaHRcbiAqIEluY3JlYXNlIGNvbnRyYXN0IDogc2hhZG93cyBkYXJrZXIgYW5kIGhpZ2hsaWdodHMgYnJpZ2h0ZXJcbiAqIERlY3JlYXNlIGNvbnRyYXN0IDogYnJpbmcgdGhlIHNoYWRvd3MgdXAgYW5kIHRoZSBoaWdobGlnaHRzIGRvd25cbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBjb250cmFzdFxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbnRyYXN0ID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHYgPSAoYW1vdW50IHx8IDApICsgMTtcbiAgICB2YXIgbyA9IC0xMjggKiAodiAtIDEpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgdiwgMCwgMCwgMCwgbyxcbiAgICAgICAgMCwgdiwgMCwgMCwgbyxcbiAgICAgICAgMCwgMCwgdiwgMCwgbyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHNhdHVyYXRpb24gbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGNvbG9yc1xuICogSW5jcmVhc2Ugc2F0dXJhdGlvbiA6IGluY3JlYXNlIGNvbnRyYXN0LCBicmlnaHRuZXNzLCBhbmQgc2hhcnBuZXNzXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNhdHVyYXRlID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHggPSAoYW1vdW50IHx8IDApICogMiAvIDMgKyAxO1xuICAgIHZhciB5ID0gKCh4IC0gMSkgKiAtMC41KTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHgsIHksIHksIDAsIDAsXG4gICAgICAgIHksIHgsIHksIDAsIDAsXG4gICAgICAgIHksIHksIHgsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRGVzYXR1cmF0ZSBpbWFnZSAocmVtb3ZlIGNvbG9yKVxuICpcbiAqIENhbGwgdGhlIHNhdHVyYXRlIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmRlc2F0dXJhdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICB0aGlzLnNhdHVyYXRlKC0xKTtcbn07XG5cbi8qKlxuICogTmVnYXRpdmUgaW1hZ2UgKGludmVyc2Ugb2YgY2xhc3NpYyByZ2IgbWF0cml4KVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uZWdhdGl2ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAxLCAxLCAwLCAwLFxuICAgICAgICAxLCAwLCAxLCAwLCAwLFxuICAgICAgICAxLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNlcGlhIGltYWdlXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNlcGlhID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMzkzLCAwLjc2ODk5OTksIDAuMTg4OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMzQ5LCAwLjY4NTk5OTksIDAuMTY3OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMjcyLCAwLjUzMzk5OTksIDAuMTMwOTk5OTksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgbW90aW9uIHBpY3R1cmUgcHJvY2VzcyBpbnZlbnRlZCBpbiAxOTE2ICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50ZWNobmljb2xvciA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjkxMjUyNzc4OTE0NTYwODMsIC0wLjg1NDUzNDQ5NzY5NTE2NDUsIC0wLjA5MTU1NTA4NDgyNzU1NTg1LCAwLCAxMS43OTM2MDM0MzQzNzczMzcsXG4gICAgICAgIC0wLjMwODc4MzMzODU5MjgwOTcsIDEuNzY1ODkwODU1NTQ1ODQyOCwgLTAuMTA2MDE3NDMwNzQ3MjIyNDUsIDAsIC03MC4zNTIwNTE2MTQ2MTM5OCxcbiAgICAgICAgLTAuMjMxMTAzMzc3NTQ4NjE2LCAtMC43NTAxODk5MTk3NDQwMjEyLCAxLjg0NzU5NzgxNjEwODE4OSwgMCwgMzAuOTUwOTQwODY5NDkxMTM4LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFBvbGFyb2lkIGZpbHRlclxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wb2xhcm9pZCA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjQzOCwgLTAuMDYyLCAtMC4wNjIsIDAsIDAsXG4gICAgICAgIC0wLjEyMiwgMS4zNzgsIC0wLjEyMiwgMCwgMCxcbiAgICAgICAgLTAuMDE2LCAtMC4wMTYsIDEuNDgzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEZpbHRlciB3aG8gdHJhbnNmb3JtcyA6IFJlZCAtPiBCbHVlIGFuZCBCbHVlIC0+IFJlZFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50b0JHUiA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIENvbG9yIHJldmVyc2FsIGZpbG0gaW50cm9kdWNlZCBieSBFYXN0bWFuIEtvZGFrIGluIDE5MzUuICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5rb2RhY2hyb21lID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuMTI4NTU4MjM5NjU5MzUyNSwgLTAuMzk2NzM4MjI4MzYwMTM0OCwgLTAuMDM5OTI1NTkxNzI5MjE3OTMsIDAsIDYzLjcyOTU4NzYyMTk2NTAyLFxuICAgICAgICAtMC4xNjQwNDMzOTk2MjI0NDYxNiwgMS4wODM1MjUxNTY2MjkxMzA0LCAtMC4wNTQ5ODgwNTExNTYzMzEzMiwgMCwgMjQuNzMyNDA3ODk2NzA2MjAzLFxuICAgICAgICAtMC4xNjc4NjAxMDcwNjE1NTc2MywgLTAuNTYwMzQxNjI3NzY5NTI0OCwgMS42MDE0ODUwNzYxOTY0OTQzLCAwLCAzNS42Mjk4MjgwNzQ2MDk0NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBCcm93biBkZWxpY2lvdXMgYnJvd25pIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJvd25pID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNTk5NzAyMzQ5ODE1OTcxNSwgMC4zNDU1MzI0MzA0ODM5MTI2MywgLTAuMjcwODI5ODY3NDUzODA0MiwgMCwgNDcuNDMxOTI4NTU2MDA4NzMsXG4gICAgICAgIC0wLjAzNzcwMzI0OTgzNzc4MzE1NywgMC44NjA5NTc3NTg3OTkyNjQxLCAwLjE1MDU5NTUyMzg4NDU5OTEzLCAwLCAtMzYuOTY4NDE0OTgzMTkxMjcsXG4gICAgICAgIDAuMjQxMTM2MzUxMjgxNTMzMzUsIC0wLjA3NDQxMDM3OTA4NDIyNDkyLCAwLjQ0OTcyMTgyMDY0ODc3MTUzLCAwLCAtNy41NjIwNzUyNzc1OTEyODMsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBWaW50YWdlIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudmludGFnZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjYyNzkzNDU2MzU2MDU5OTQsIDAuMzIwMjE4MzQyMDgxOTM2NywgLTAuMDM5NjU0MDgyMTEzMTI0NTMsIDAsIDkuNjUxMjg1ODM1Mjk0MTIzLFxuICAgICAgICAwLjAyNTc4Mzk3NzA0ODA4ODY4LCAwLjY0NDExODg2NDQzNzQ3NzEsIDAuMDMyNTkxMjc2MTYxNDkyOTQsIDAsIDcuNDYyODI5MTc2NDcwNTkxLFxuICAgICAgICAwLjA0NjYwNTU1NTY3ODI3MTksIC0wLjA4NTEyMzI5ODcyNDc4OTEsIDAuNTI0MTY0ODAxODcwMDQ2NSwgMCwgNS4xNTkxOTA1ODgyMzUyOTYsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBXZSBkb24ndCBrbm93IGV4YWN0bHkgd2hhdCBpdCBkb2VzLCBraW5kIG9mIGdyYWRpZW50IG1hcCwgYnV0IGZ1bm55IHRvIHBsYXkgd2l0aCFcbiAqXG4gKiBAcGFyYW0gZGVzYXR1cmF0aW9uIHtudW1iZXJ9XG4gKiBAcGFyYW0gdG9uZWQge251bWJlcn1cbiAqIEBwYXJhbSBsaWdodENvbG9yIHtzdHJpbmd9IChleGFtcGxlIDogXCIweEZGRTU4MFwiKVxuICogQHBhcmFtIGRhcmtDb2xvciB7c3RyaW5nfSAgKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbG9yVG9uZSA9IGZ1bmN0aW9uIChkZXNhdHVyYXRpb24sIHRvbmVkLCBsaWdodENvbG9yLCBkYXJrQ29sb3IsIG11bHRpcGx5KVxue1xuICAgIGRlc2F0dXJhdGlvbiA9IGRlc2F0dXJhdGlvbiB8fCAwLjI7XG4gICAgdG9uZWQgPSB0b25lZCB8fCAwLjE1O1xuICAgIGxpZ2h0Q29sb3IgPSBsaWdodENvbG9yIHx8IDB4RkZFNTgwO1xuICAgIGRhcmtDb2xvciA9IGRhcmtDb2xvciB8fCAweDMzODAwMDtcblxuICAgIHZhciBsUiA9ICgobGlnaHRDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEcgPSAoKGxpZ2h0Q29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEIgPSAobGlnaHRDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgdmFyIGRSID0gKChkYXJrQ29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGRHID0gKChkYXJrQ29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEIgPSAoZGFya0NvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjMsIDAuNTksIDAuMTEsIDAsIDAsXG4gICAgICAgIGxSLCBsRywgbEIsIGRlc2F0dXJhdGlvbiwgMCxcbiAgICAgICAgZFIsIGRHLCBkQiwgdG9uZWQsIDAsXG4gICAgICAgIGxSIC0gZFIsIGxHIC0gZEcsIGxCIC0gZEIsIDAsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBOaWdodCBlZmZlY3RcbiAqXG4gKiBAcGFyYW0gaW50ZW5zaXR5IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubmlnaHQgPSBmdW5jdGlvbiAoaW50ZW5zaXR5LCBtdWx0aXBseSlcbntcbiAgICBpbnRlbnNpdHkgPSBpbnRlbnNpdHkgfHwgMC4xO1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGludGVuc2l0eSAqICggLTIuMCksIC1pbnRlbnNpdHksIDAsIDAsIDAsXG4gICAgICAgIC1pbnRlbnNpdHksIDAsIGludGVuc2l0eSwgMCwgMCxcbiAgICAgICAgMCwgaW50ZW5zaXR5LCBpbnRlbnNpdHkgKiAyLjAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLypcbiAqIFByZWRhdG9yIGVmZmVjdFxuICpcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIGEgbmV3IGluZGVwZW50IG9uZVxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gaG93IG11Y2ggdGhlIHByZWRhdG9yIGZlZWxzIGhpcyBmdXR1cmUgdmljdGltXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucHJlZGF0b3IgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxMS4yMjQxMzA2MzA0OTMxNjQgKiBhbW91bnQsIC00Ljc5NDQ4Njk5OTUxMTcxOSAqIGFtb3VudCwgLTIuODc0NjExODU0NTUzMjIyNyAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC40MDM0MjQzODIyMDk3Nzc4MyAqIGFtb3VudCxcbiAgICAgICAgLTMuNjMzMDY5NzUzNjQ2ODUwNiAqIGFtb3VudCwgOS4xOTMxNTcxOTYwNDQ5MjIgKiBhbW91bnQsIC0yLjk1MTgxMDgzNjc5MTk5MiAqIGFtb3VudCwgMCAqIGFtb3VudCwgLTEuMzE2MTM1MDQ4ODY2MjcyICogYW1vdW50LFxuICAgICAgICAtMy4yMTg0MTk3OTAyNjc5NDQzICogYW1vdW50LCAtNC4yMzc1MDMwNTE3NTc4MTI1ICogYW1vdW50LCA3LjQ3NjQ0ODA1OTA4MjAzMSAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC44MDQ0NDU5MjIzNzQ3MjUzICogYW1vdW50LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogTFNEIGVmZmVjdFxuICpcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gSG93IGNyYXp5IGlzIHlvdXIgZWZmZWN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubHNkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDIsIC0wLjQsIDAuNSwgMCwgMCxcbiAgICAgICAgLTAuNSwgMiwgLTAuNCwgMCwgMCxcbiAgICAgICAgLTAuNCwgLTAuNSwgMywgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIHRoZSBkZWZhdWx0IG9uZVxuICpcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBmYWxzZSk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hdHJpeCBvZiB0aGUgY29sb3IgbWF0cml4IGZpbHRlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvck1hdHJpeEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCBbMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMF1cbiAgICAgKi9cbiAgICBtYXRyaXg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgbG93ZXJzIHRoZSBjb2xvciBkZXB0aCBvZiB5b3VyIGltYWdlIGJ5IHRoZSBnaXZlbiBhbW91bnQsIHByb2R1Y2luZyBhbiBpbWFnZSB3aXRoIGEgc21hbGxlciBwYWxldHRlLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvclN0ZXBGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc3RlcDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBjb2xvciA9IGZsb29yKGNvbG9yICogc3RlcCkgLyBzdGVwO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdGVwOiB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvclN0ZXBGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yU3RlcEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2Ygc3RlcHMgdG8gcmVkdWNlIHRoZSBwYWxldHRlIGJ5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29sb3JTdGVwRmlsdGVyI1xuICAgICAqL1xuICAgIHN0ZXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb252b2x1dGlvbkZpbHRlciBjbGFzcyBhcHBsaWVzIGEgbWF0cml4IGNvbnZvbHV0aW9uIGZpbHRlciBlZmZlY3QuXG4gKiBBIGNvbnZvbHV0aW9uIGNvbWJpbmVzIHBpeGVscyBpbiB0aGUgaW5wdXQgaW1hZ2Ugd2l0aCBuZWlnaGJvcmluZyBwaXhlbHMgdG8gcHJvZHVjZSBhIG5ldyBpbWFnZS5cbiAqIEEgd2lkZSB2YXJpZXR5IG9mIGltYWdlIGVmZmVjdHMgY2FuIGJlIGFjaGlldmVkIHRocm91Z2ggY29udm9sdXRpb25zLCBpbmNsdWRpbmcgYmx1cnJpbmcsIGVkZ2VcbiAqIGRldGVjdGlvbiwgc2hhcnBlbmluZywgZW1ib3NzaW5nLCBhbmQgYmV2ZWxpbmcuIFRoZSBtYXRyaXggc2hvdWxkIGJlIHNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBTZWUgaHR0cDovL2RvY3MuZ2ltcC5vcmcvZW4vcGx1Zy1pbi1jb252bWF0cml4Lmh0bWwgZm9yIG1vcmUgaW5mby5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSBBbiBhcnJheSBvZiB2YWx1ZXMgdXNlZCBmb3IgbWF0cml4IHRyYW5zZm9ybWF0aW9uLiBTcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFdpZHRoIG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqL1xuZnVuY3Rpb24gQ29udm9sdXRpb25GaWx0ZXIobWF0cml4LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgbWVkaXVtcCB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTtcXG51bmlmb3JtIGZsb2F0IG1hdHJpeFs5XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjNCBjMTEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgLSB0ZXhlbFNpemUpOyAvLyB0b3AgbGVmdFxcbiAgIHZlYzQgYzEyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55IC0gdGV4ZWxTaXplLnkpKTsgLy8gdG9wIGNlbnRlclxcbiAgIHZlYzQgYzEzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgcmlnaHRcXG5cXG4gICB2ZWM0IGMyMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCBsZWZ0XFxuICAgdmVjNCBjMjIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpOyAvLyBtaWQgY2VudGVyXFxuICAgdmVjNCBjMjMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSkpOyAvLyBtaWQgcmlnaHRcXG5cXG4gICB2ZWM0IGMzMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGxlZnRcXG4gICB2ZWM0IGMzMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLngsIHZUZXh0dXJlQ29vcmQueSArIHRleGVsU2l6ZS55KSk7IC8vIGJvdHRvbSBjZW50ZXJcXG4gICB2ZWM0IGMzMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIHRleGVsU2l6ZSk7IC8vIGJvdHRvbSByaWdodFxcblxcbiAgIGdsX0ZyYWdDb2xvciA9XFxuICAgICAgIGMxMSAqIG1hdHJpeFswXSArIGMxMiAqIG1hdHJpeFsxXSArIGMxMyAqIG1hdHJpeFsyXSArXFxuICAgICAgIGMyMSAqIG1hdHJpeFszXSArIGMyMiAqIG1hdHJpeFs0XSArIGMyMyAqIG1hdHJpeFs1XSArXFxuICAgICAgIGMzMSAqIG1hdHJpeFs2XSArIGMzMiAqIG1hdHJpeFs3XSArIGMzMyAqIG1hdHJpeFs4XTtcXG5cXG4gICBnbF9GcmFnQ29sb3IuYSA9IGMyMi5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hdHJpeDogICAgIHsgdHlwZTogJzFmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCkgfSxcbiAgICAgICAgICAgIHRleGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSAvIHdpZHRoLCB5OiAxIC8gaGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb252b2x1dGlvbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29udm9sdXRpb25GaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hdHJpeC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMS90aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueCA9IDEvdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS55ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQSBDcm9zcyBIYXRjaCBlZmZlY3QgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDcm9zc0hhdGNoRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGZsb2F0IGx1bSA9IGxlbmd0aCh0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQueHkpLnJnYik7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wLCAxLjAsIDEuMCwgMS4wKTtcXG5cXG4gICAgaWYgKGx1bSA8IDEuMDApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC43NSlcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjUwKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54ICsgZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuMylcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55IC0gNS4wLCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblwiXG4gICAgKTtcbn1cblxuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNyb3NzSGF0Y2hGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBEaXNwbGFjZW1lbnRGaWx0ZXIgY2xhc3MgdXNlcyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20gdGhlIHNwZWNpZmllZCB0ZXh0dXJlIChjYWxsZWQgdGhlIGRpc3BsYWNlbWVudCBtYXApIHRvIHBlcmZvcm0gYSBkaXNwbGFjZW1lbnQgb2YgYW4gb2JqZWN0LlxuICogWW91IGNhbiB1c2UgdGhpcyBmaWx0ZXIgdG8gYXBwbHkgYWxsIG1hbm9yIG9mIGNyYXp5IHdhcnBpbmcgZWZmZWN0c1xuICogQ3VycmVudGx5IHRoZSByIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB4IGFuZCB0aGUgZyBwcm9wZXJ0eSBvZiB0aGUgdGV4dHVyZSBpcyB1c2VkIHRvIG9mZnNldCB0aGUgeS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiAobWFrZSBzdXJlIGl0cyBhZGRlZCB0byB0aGUgc2NlbmUhKVxuICovXG5mdW5jdGlvbiBEaXNwbGFjZW1lbnRGaWx0ZXIoc3ByaXRlLCBzY2FsZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuICAgIHNwcml0ZS5yZW5kZXJhYmxlID0gZmFsc2U7XG5cbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2TWFwQ29vcmQgPSAoIG90aGVyTWF0cml4ICogdmVjMyggYVRleHR1cmVDb29yZCwgMS4wKSAgKS54eTtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMiBzY2FsZTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXBTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IG1hcCA9ICB0ZXh0dXJlMkQobWFwU2FtcGxlciwgdk1hcENvb3JkKTtcXG5cXG4gICBtYXAgLT0gMC41O1xcbiAgIG1hcC54eSAqPSBzY2FsZTtcXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgbWFwLngsIHZUZXh0dXJlQ29vcmQueSArIG1hcC55KSk7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtYXBTYW1wbGVyOiAgICAgeyB0eXBlOiAnc2FtcGxlcjJEJywgdmFsdWU6IHNwcml0ZS50ZXh0dXJlIH0sXG4gICAgICAgICAgICBvdGhlck1hdHJpeDogICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBtYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSkgfSxcbiAgICAgICAgICAgIHNjYWxlOiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG5cbiAgICBpZiAoc2NhbGUgPT09IG51bGwgfHwgc2NhbGUgPT09IHVuZGVmaW5lZClcbiAgICB7XG4gICAgICAgIHNjYWxlID0gMjA7XG4gICAgfVxuXG4gICAgdGhpcy5zY2FsZSA9IG5ldyBjb3JlLlBvaW50KHNjYWxlLCBzY2FsZSk7XG59XG5cbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGFjZW1lbnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERpc3BsYWNlbWVudEZpbHRlcjtcblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICBmaWx0ZXJNYW5hZ2VyLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeChpbnB1dC5mcmFtZSwgdGhpcy5tYXNrU3ByaXRlLCB0aGlzLm1hc2tNYXRyaXgpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5vdGhlck1hdHJpeC52YWx1ZSA9IHRoaXMubWFza01hdHJpeC50b0FycmF5KHRydWUpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueCA9IHRoaXMuc2NhbGUueCAqICgxL2lucHV0LmZyYW1lLndpZHRoKTtcbiAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlLnkgPSB0aGlzLnNjYWxlLnkgKiAoMS9pbnB1dC5mcmFtZS5oZWlnaHQpO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRGlzcGxhY2VtZW50RmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvZnVuL2RvdHNjcmVlbi5qc1xuICovXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIGRvdHNjcmVlbiBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgdG8gYmUgbWFkZSBvdXQgb2ZcbiAqIGJsYWNrIGFuZCB3aGl0ZSBoYWxmdG9uZSBkb3RzIGxpa2UgYW4gb2xkIHByaW50ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIERvdFNjcmVlbkZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XFxuXFxuZmxvYXQgcGF0dGVybigpXFxue1xcbiAgIGZsb2F0IHMgPSBzaW4oYW5nbGUpLCBjID0gY29zKGFuZ2xlKTtcXG4gICB2ZWMyIHRleCA9IHZUZXh0dXJlQ29vcmQgKiBkaW1lbnNpb25zLnh5O1xcbiAgIHZlYzIgcG9pbnQgPSB2ZWMyKFxcbiAgICAgICBjICogdGV4LnggLSBzICogdGV4LnksXFxuICAgICAgIHMgKiB0ZXgueCArIGMgKiB0ZXgueVxcbiAgICkgKiBzY2FsZTtcXG4gICByZXR1cm4gKHNpbihwb2ludC54KSAqIHNpbihwb2ludC55KSkgKiA0LjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGZsb2F0IGF2ZXJhZ2UgPSAoY29sb3IuciArIGNvbG9yLmcgKyBjb2xvci5iKSAvIDMuMDtcXG4gICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzMoYXZlcmFnZSAqIDEwLjAgLSA1LjAgKyBwYXR0ZXJuKCkpLCBjb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzY2FsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEb3RTY3JlZW5GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERvdFNjcmVlbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBzY2FsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSByYWRpdXMgb2YgdGhlIGVmZmVjdC5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Eb3RTY3JlZW5GaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllUaW50RmlsdGVyIGFwcGxpZXMgYSB2ZXJ0aWNhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1cllUaW50RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24rb2Zmc2V0KSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMyBjb2xvcjtcXG51bmlmb3JtIGZsb2F0IGFscGhhO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBzdW0gPSB2ZWM0KDAuMCk7XFxuXFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KCBjb2xvci5yZ2IgKiBzdW0uYSAqIGFscGhhLCBzdW0uYSAqIGFscGhhICk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgLyA1MTIgfSxcbiAgICAgICAgICAgIGNvbG9yOiB7IHR5cGU6ICdjJywgdmFsdWU6IFswLDAsMF19LFxuICAgICAgICAgICAgYWxwaGE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNyB9LFxuICAgICAgICAgICAgb2Zmc2V0OiB7IHR5cGU6ICcyZicsIHZhbHVlOls1LCA1XX0sXG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZToxfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJZVGludEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllUaW50RmlsdGVyO1xuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCBjbGVhcik7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJZVGludEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllUaW50RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZVGludEZpbHRlciA9IHJlcXVpcmUoJy4vQmx1cllUaW50RmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIERyb3BTaGFkb3dGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRHJvcFNoYWRvd0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyID0gbmV3IEJsdXJZVGludEZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIHRoaXMucGFkZGluZyA9IDMwO1xuXG4gICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgdGhpcy5fYW5nbGUgPSA0NSAqIE1hdGguUEkgLyAxODA7XG4gICAgdGhpcy5fZGlzdGFuY2UgPSAxMDtcbiAgICB0aGlzLmFscGhhID0gMC43NTtcbiAgICB0aGlzLmhpZGVPYmplY3QgPSBmYWxzZTtcbiAgICB0aGlzLmJsZW5kTW9kZSA9IGNvcmUuQkxFTkRfTU9ERVMuTVVMVElQTFk7XG59XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERyb3BTaGFkb3dGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERyb3BTaGFkb3dGaWx0ZXI7XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICBpZih0aGlzLl9kaXJ0eVBvc2l0aW9uKVxuICAgIHtcbiAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVswXSA9IE1hdGguc2luKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5vZmZzZXQudmFsdWVbMV0gPSBNYXRoLmNvcyh0aGlzLl9hbmdsZSkgKiB0aGlzLl9kaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKHRoaXMuYmxlbmRNb2RlKTtcblxuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZighdGhpcy5oaWRlT2JqZWN0KVxuICAgIHtcblxuICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuICAgIH1cblxuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNvbG9yIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgY29sb3I6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIGNvcmUudXRpbHMucmdiMmhleCggdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmNvbG9yLnZhbHVlID0gY29yZS51dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbHBoYSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFscGhhOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzdGFuY2Ugb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBkaXN0YW5jZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3RhbmNlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYW5nbGUgb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fYW5nbGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2FuZ2xlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZ3JleXNjYWxlcyB0aGUgcGFsZXR0ZSBvZiB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gR3JheUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGdyYXk7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peChnbF9GcmFnQ29sb3IucmdiLCB2ZWMzKDAuMjEyNipnbF9GcmFnQ29sb3IuciArIDAuNzE1MipnbF9GcmFnQ29sb3IuZyArIDAuMDcyMipnbF9GcmFnQ29sb3IuYiksIGdyYXkpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBncmF5OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkdyYXlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5HcmF5RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEdyYXlGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmF5LiAxIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGJsYWNrIGFuZCB3aGl0ZSwgMCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuR3JheUZpbHRlciNcbiAgICAgKi9cbiAgICBncmF5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBmaWx0ZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5maWx0ZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEFzY2lpRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9hc2NpaS9Bc2NpaUZpbHRlcicpLFxuICAgIEJsb29tRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibG9vbS9CbG9vbUZpbHRlcicpLFxuICAgIEJsdXJGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJGaWx0ZXInKSxcbiAgICBCbHVyWEZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJZRmlsdGVyJyksXG4gICAgQmx1ckRpckZpbHRlcjogICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckRpckZpbHRlcicpLFxuICAgIENvbG9yTWF0cml4RmlsdGVyOiAgcmVxdWlyZSgnLi9jb2xvci9Db2xvck1hdHJpeEZpbHRlcicpLFxuICAgIENvbG9yU3RlcEZpbHRlcjogICAgcmVxdWlyZSgnLi9jb2xvci9Db2xvclN0ZXBGaWx0ZXInKSxcbiAgICBDb252b2x1dGlvbkZpbHRlcjogIHJlcXVpcmUoJy4vY29udm9sdXRpb24vQ29udm9sdXRpb25GaWx0ZXInKSxcbiAgICBDcm9zc0hhdGNoRmlsdGVyOiAgIHJlcXVpcmUoJy4vY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyJyksXG4gICAgRGlzcGxhY2VtZW50RmlsdGVyOiByZXF1aXJlKCcuL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXInKSxcbiAgICBEb3RTY3JlZW5GaWx0ZXI6ICAgIHJlcXVpcmUoJy4vZG90L0RvdFNjcmVlbkZpbHRlcicpLFxuICAgIEdyYXlGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ncmF5L0dyYXlGaWx0ZXInKSxcbiAgICBEcm9wU2hhZG93RmlsdGVyOiAgIHJlcXVpcmUoJy4vZHJvcHNoYWRvdy9Ecm9wU2hhZG93RmlsdGVyJyksXG4gICAgSW52ZXJ0RmlsdGVyOiAgICAgICByZXF1aXJlKCcuL2ludmVydC9JbnZlcnRGaWx0ZXInKSxcbiAgICBOb2lzZUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vbm9pc2UvTm9pc2VGaWx0ZXInKSxcbiAgICBQaXhlbGF0ZUZpbHRlcjogICAgIHJlcXVpcmUoJy4vcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXInKSxcbiAgICBSR0JTcGxpdEZpbHRlcjogICAgIHJlcXVpcmUoJy4vcmdiL1JHQlNwbGl0RmlsdGVyJyksXG4gICAgU2hvY2t3YXZlRmlsdGVyOiAgICByZXF1aXJlKCcuL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXInKSxcbiAgICBTZXBpYUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vc2VwaWEvU2VwaWFGaWx0ZXInKSxcbiAgICBTbWFydEJsdXJGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vYmx1ci9TbWFydEJsdXJGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFhGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlcicpLFxuICAgIFR3aXN0RmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi90d2lzdC9Ud2lzdEZpbHRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBpbnZlcnRzIHlvdXIgRGlzcGxheSBPYmplY3RzIGNvbG9ycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gSW52ZXJ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIGZsb2F0IGludmVydDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoICh2ZWMzKDEpLWdsX0ZyYWdDb2xvci5yZ2IpICogZ2xfRnJhZ0NvbG9yLmEsIGdsX0ZyYWdDb2xvci5yZ2IsIDEuMCAtIGludmVydCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgaW52ZXJ0OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkludmVydEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkludmVydEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnZlcnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludmVydEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgaW52ZXJ0LiBgMWAgd2lsbCBmdWxseSBpbnZlcnQgdGhlIGNvbG9ycywgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5JbnZlcnRGaWx0ZXIjXG4gICAgICovXG4gICAgaW52ZXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuaW52ZXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYWRqdXN0L25vaXNlLmpzXG4gKi9cblxuLyoqXG4gKiBBIE5vaXNlIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIE5vaXNlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IG5vaXNlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IHJhbmQodmVjMiBjbylcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGNvLnh5LCB2ZWMyKDEyLjk4OTgsIDc4LjIzMykpKSAqIDQzNzU4LjU0NTMpO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGZsb2F0IGRpZmYgPSAocmFuZCh2VGV4dHVyZUNvb3JkKSAtIDAuNSkgKiBub2lzZTtcXG5cXG4gICAgY29sb3IuciArPSBkaWZmO1xcbiAgICBjb2xvci5nICs9IGRpZmY7XFxuICAgIGNvbG9yLmIgKz0gZGlmZjtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbm9pc2U6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Ob2lzZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbk5vaXNlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE5vaXNlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBOb2lzZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTm9pc2VGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGFtb3VudCBvZiBub2lzZSB0byBhcHBseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLk5vaXNlRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDAuNVxuICAgICAqL1xuICAgIG5vaXNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm5vaXNlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSBwaXhlbGF0ZSBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgJ2Jsb2NreScuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFBpeGVsYXRlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZlYzIgc2l6ZSA9IGRpbWVuc2lvbnMueHkgLyBwaXhlbFNpemU7XFxuXFxuICAgIHZlYzIgY29sb3IgPSBmbG9vciggKCB2VGV4dHVyZUNvb3JkICogc2l6ZSApICkgLyBzaXplICsgcGl4ZWxTaXplL2RpbWVuc2lvbnMueHkgKiAwLjU7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgY29sb3IpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsICB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICd2MicsICAgdmFsdWU6IHsgeDogMTAsIHk6IDEwIH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQaXhlbGF0ZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gUGl4ZWxhdGVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgYSBwb2ludCB0aGF0IGRlc2NyaWJlcyB0aGUgc2l6ZSBvZiB0aGUgYmxvY2tzLlxuICAgICAqIHggaXMgdGhlIHdpZHRoIG9mIHRoZSBibG9jayBhbmQgeSBpcyB0aGUgaGVpZ2h0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlBpeGVsYXRlRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBbiBSR0IgU3BsaXQgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBSR0JTcGxpdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSB2ZWMyIHJlZDtcXG51bmlmb3JtIHZlYzIgZ3JlZW47XFxudW5pZm9ybSB2ZWMyIGJsdWU7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvci5yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgcmVkL2RpbWVuc2lvbnMueHkpLnI7XFxuICAgZ2xfRnJhZ0NvbG9yLmcgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBncmVlbi9kaW1lbnNpb25zLnh5KS5nO1xcbiAgIGdsX0ZyYWdDb2xvci5iID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgYmx1ZS9kaW1lbnNpb25zLnh5KS5iO1xcbiAgIGdsX0ZyYWdDb2xvci5hID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKS5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZDogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGdyZWVuOiAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogLTIwLCB5OiAyMCB9IH0sXG4gICAgICAgICAgICBibHVlOiAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDIwLCB5OiAtMjAgfSB9LFxuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLCAwLCAwLCAwXSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5SR0JTcGxpdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJHQlNwbGl0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBSR0JTcGxpdEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogUmVkIGNoYW5uZWwgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIHJlZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJlZC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR3JlZW4gY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JlZW46IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JlZW4udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBCbHVlIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGFwcGxpZXMgYSBzZXBpYSBlZmZlY3QgdG8geW91ciBEaXNwbGF5IE9iamVjdHMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNlcGlhRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHNlcGlhO1xcblxcbmNvbnN0IG1hdDMgc2VwaWFNYXRyaXggPSBtYXQzKDAuMzU4OCwgMC43MDQ0LCAwLjEzNjgsIDAuMjk5MCwgMC41ODcwLCAwLjExNDAsIDAuMjM5MiwgMC40Njk2LCAwLjA5MTIpO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGdsX0ZyYWdDb2xvci5yZ2IgKiBzZXBpYU1hdHJpeCwgc2VwaWEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNlcGlhOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNlcGlhRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU2VwaWFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2VwaWFGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNlcGlhRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTZXBpYUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIHNlcGlhLiBgMWAgd2lsbCBhcHBseSB0aGUgZnVsbCBzZXBpYSBlZmZlY3QsIGFuZFxuICAgICAqIGAwYCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2VwaWFGaWx0ZXIjXG4gICAgICovXG4gICAgc2VwaWE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc2VwaWEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbG9yTWF0cml4RmlsdGVyIGNsYXNzIGxldHMgeW91IGFwcGx5IGEgNHg0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgUkdCQVxuICogY29sb3IgYW5kIGFscGhhIHZhbHVlcyBvZiBldmVyeSBwaXhlbCBvbiB5b3VyIGRpc3BsYXlPYmplY3QgdG8gcHJvZHVjZSBhIHJlc3VsdFxuICogd2l0aCBhIG5ldyBzZXQgb2YgUkdCQSBjb2xvciBhbmQgYWxwaGEgdmFsdWVzLiBJdCdzIHByZXR0eSBwb3dlcmZ1bCFcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2hvY2t3YXZlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIHZlYzIgY2VudGVyO1xcbnVuaWZvcm0gdmVjMyBwYXJhbXM7IC8vIDEwLjAsIDAuOCwgMC4xXFxudW5pZm9ybSBmbG9hdCB0aW1lO1xcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gdlRleHR1cmVDb29yZDtcXG4gICAgdmVjMiB0ZXhDb29yZCA9IHV2O1xcblxcbiAgICBmbG9hdCBkaXN0ID0gZGlzdGFuY2UodXYsIGNlbnRlcik7XFxuXFxuICAgIGlmICggKGRpc3QgPD0gKHRpbWUgKyBwYXJhbXMueikpICYmIChkaXN0ID49ICh0aW1lIC0gcGFyYW1zLnopKSApXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IGRpZmYgPSAoZGlzdCAtIHRpbWUpO1xcbiAgICAgICAgZmxvYXQgcG93RGlmZiA9IDEuMCAtIHBvdyhhYnMoZGlmZipwYXJhbXMueCksIHBhcmFtcy55KTtcXG5cXG4gICAgICAgIGZsb2F0IGRpZmZUaW1lID0gZGlmZiAgKiBwb3dEaWZmO1xcbiAgICAgICAgdmVjMiBkaWZmVVYgPSBub3JtYWxpemUodXYgLSBjZW50ZXIpO1xcbiAgICAgICAgdGV4Q29vcmQgPSB1diArIChkaWZmVVYgKiBkaWZmVGltZSk7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB0ZXhDb29yZCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgY2VudGVyOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfSxcbiAgICAgICAgICAgIHBhcmFtczogeyB0eXBlOiAndjMnLCB2YWx1ZTogeyB4OiAxMCwgeTogMC44LCB6OiAwLjEgfSB9LFxuICAgICAgICAgICAgdGltZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hvY2t3YXZlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaG9ja3dhdmVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjZW50ZXIgb2YgdGhlIHNob2Nrd2F2ZSBpbiBub3JtYWxpemVkIHNjcmVlbiBjb29yZHMuIFRoYXQgaXNcbiAgICAgKiAoMCwwKSBpcyB0aGUgdG9wLWxlZnQgYW5kICgxLDEpIGlzIHRoZSBib3R0b20gcmlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBudW1iZXI+fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIGNlbnRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmNlbnRlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBhcmFtcyBvZiB0aGUgc2hvY2t3YXZlLiBUaGVzZSBtb2RpZnkgdGhlIGxvb2sgYW5kIGJlaGF2aW9yIG9mXG4gICAgICogdGhlIHNob2Nrd2F2ZSBhcyBpdCByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgcGFyYW1zOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGFyYW1zLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZWxhcHNlZCB0aW1lIG9mIHRoZSBzaG9ja3dhdmUuIFRoaXMgY29udHJvbHMgdGhlIHNwZWVkIGF0IHdoaWNoXG4gICAgICogdGhlIHNob2Nrd2F2ZSByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICB0aW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0QXhpc0ZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0QXhpc0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBibHVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JhZGllbnRCbHVyO1xcbnVuaWZvcm0gdmVjMiBzdGFydDtcXG51bmlmb3JtIHZlYzIgZW5kO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG51bmlmb3JtIHZlYzIgdGV4U2l6ZTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG4gICAgdmVjMiBub3JtYWwgPSBub3JtYWxpemUodmVjMihzdGFydC55IC0gZW5kLnksIGVuZC54IC0gc3RhcnQueCkpO1xcbiAgICBmbG9hdCByYWRpdXMgPSBzbW9vdGhzdGVwKDAuMCwgMS4wLCBhYnMoZG90KHZUZXh0dXJlQ29vcmQgKiB0ZXhTaXplIC0gc3RhcnQsIG5vcm1hbCkpIC8gZ3JhZGllbnRCbHVyKSAqIGJsdXI7XFxuXFxuICAgIGZvciAoZmxvYXQgdCA9IC0zMC4wOyB0IDw9IDMwLjA7IHQrKylcXG4gICAge1xcbiAgICAgICAgZmxvYXQgcGVyY2VudCA9ICh0ICsgb2Zmc2V0IC0gMC41KSAvIDMwLjA7XFxuICAgICAgICBmbG9hdCB3ZWlnaHQgPSAxLjAgLSBhYnMocGVyY2VudCk7XFxuICAgICAgICB2ZWM0IHNhbXBsZSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGRlbHRhIC8gdGV4U2l6ZSAqIHBlcmNlbnQgKiByYWRpdXMpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBibHVyOiAgICAgICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMTAwIH0sXG4gICAgICAgICAgICBncmFkaWVudEJsdXI6ICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNjAwIH0sXG4gICAgICAgICAgICBzdGFydDogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLCAgICB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIH0gfSxcbiAgICAgICAgICAgIGVuZDogICAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDYwMCwgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZGVsdGE6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMzAsICAgeTogMzAgfSB9LFxuICAgICAgICAgICAgdGV4U2l6ZTogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogd2luZG93LmlubmVyV2lkdGgsIHk6IHdpbmRvdy5pbm5lckhlaWdodCB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG59XG5cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiB0aGUgWCBhbmQgWSBmaWx0ZXJzLCBkb2VzIG5vdGhpbmcgZm9yIHRoaXMgY2xhc3MuXG4gKlxuICovXG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gMDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSAwO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmFkaWVudEJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIHN0YXJ0IHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgZW5kOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdFlGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0IEZpbHRlci4gTWFuYWdlcyB0aGUgcGFzcyBvZiBib3RoIGEgVGlsdFNoaWZ0WEZpbHRlciBhbmQgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIgPSBuZXcgVGlsdFNoaWZ0WEZpbHRlcigpO1xuICAgIHRoaXMudGlsdFNoaWZ0WUZpbHRlciA9IG5ldyBUaWx0U2hpZnRZRmlsdGVyKCk7XG59XG5cblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEZpbHRlcjtcblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JhZGllbnQgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ncmFkaWVudEJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZ3JhZGllbnRCbHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFkgdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuc3RhcnQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBlbmQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5lbmQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZW5kID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBUaWx0U2hpZnRBeGlzRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRBeGlzRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdFhGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRpbHRTaGlmdEF4aXNGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0WEZpbHRlcigpXG57XG4gICAgVGlsdFNoaWZ0QXhpc0ZpbHRlci5jYWxsKHRoaXMpO1xufVxuXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRYRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRYRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKlxuICovXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGR4ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueCAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueDtcbiAgICB2YXIgZHkgPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS55IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS55O1xuICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IGR4IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeSAvIGQ7XG59O1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRZRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gLWR5IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeCAvIGQ7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHR3aXN0IGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0d2lzdGVkIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFR3aXN0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHJhZGl1cztcXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzIgY29vcmQgPSB2VGV4dHVyZUNvb3JkIC0gb2Zmc2V0O1xcbiAgIGZsb2F0IGRpc3QgPSBsZW5ndGgoY29vcmQpO1xcblxcbiAgIGlmIChkaXN0IDwgcmFkaXVzKVxcbiAgIHtcXG4gICAgICAgZmxvYXQgcmF0aW8gPSAocmFkaXVzIC0gZGlzdCkgLyByYWRpdXM7XFxuICAgICAgIGZsb2F0IGFuZ2xlTW9kID0gcmF0aW8gKiByYXRpbyAqIGFuZ2xlO1xcbiAgICAgICBmbG9hdCBzID0gc2luKGFuZ2xlTW9kKTtcXG4gICAgICAgZmxvYXQgYyA9IGNvcyhhbmdsZU1vZCk7XFxuICAgICAgIGNvb3JkID0gdmVjMihjb29yZC54ICogYyAtIGNvb3JkLnkgKiBzLCBjb29yZC54ICogcyArIGNvb3JkLnkgKiBjKTtcXG4gICB9XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCtvZmZzZXQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhZGl1czogICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9LFxuICAgICAgICAgICAgYW5nbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9LFxuICAgICAgICAgICAgb2Zmc2V0OiAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjUsIHk6IDAuNSB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblR3aXN0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVHdpc3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHdpc3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFR3aXN0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUd2lzdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IGRlc2NyaWJlcyB0aGUgdGhlIG9mZnNldCBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgb2Zmc2V0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHJhZGl1cyBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICByYWRpdXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5yYWRpdXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgYW5nbGUgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiLy8gcnVuIHRoZSBwb2x5ZmlsbHNcbnJlcXVpcmUoJy4vcG9seWZpbGwnKTtcblxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29yZScpO1xuXG4vLyBhZGQgY29yZSBwbHVnaW5zLlxuY29yZS5leHRyYXMgICAgICAgICA9IHJlcXVpcmUoJy4vZXh0cmFzJyk7XG5jb3JlLmZpbHRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5jb3JlLmludGVyYWN0aW9uICAgID0gcmVxdWlyZSgnLi9pbnRlcmFjdGlvbicpO1xuY29yZS5sb2FkZXJzICAgICAgICA9IHJlcXVpcmUoJy4vbG9hZGVycycpO1xuY29yZS5tZXNoICAgICAgICAgICA9IHJlcXVpcmUoJy4vbWVzaCcpO1xuY29yZS5hY2Nlc3NpYmlsaXR5ICA9IHJlcXVpcmUoJy4vYWNjZXNzaWJpbGl0eScpO1xuXG4vLyBleHBvcnQgYSBwcmVtYWRlIGxvYWRlciBpbnN0YW5jZVxuLyoqXG4gKiBBIHByZW1hZGUgaW5zdGFuY2Ugb2YgdGhlIGxvYWRlciB0aGF0IGNhbiBiZSB1c2VkIHRvIGxvYWRlciByZXNvdXJjZXMuXG4gKlxuICogQG5hbWUgbG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHByb3BlcnR5IHtQSVhJLmxvYWRlcnMuTG9hZGVyfVxuICovXG5jb3JlLmxvYWRlciA9IG5ldyBjb3JlLmxvYWRlcnMuTG9hZGVyKCk7XG5cbi8vIG1peGluIHRoZSBkZXByZWNhdGlvbiBmZWF0dXJlcy5cbk9iamVjdC5hc3NpZ24oY29yZSwgcmVxdWlyZSgnLi9kZXByZWNhdGlvbicpKTtcblxuLy8gQWx3YXlzIGV4cG9ydCBwaXhpIGdsb2JhbGx5LlxuZ2xvYmFsLlBJWEkgPSBjb3JlO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogSG9sZHMgYWxsIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gYW4gSW50ZXJhY3Rpb24gZXZlbnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uRGF0YSgpXG57XG4gICAgLyoqXG4gICAgICogVGhpcyBwb2ludCBzdG9yZXMgdGhlIGdsb2JhbCBjb29yZHMgb2Ygd2hlcmUgdGhlIHRvdWNoL21vdXNlIGV2ZW50IGhhcHBlbmVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuZ2xvYmFsID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgU3ByaXRlIHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TcHJpdGV9XG4gICAgICovXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBwYXNzZWQgdG8gYW4gZXZlbnQgaGFuZGxlciwgdGhpcyB3aWxsIGJlIHRoZSBvcmlnaW5hbCBET00gRXZlbnQgdGhhdCB3YXMgY2FwdHVyZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0V2ZW50fVxuICAgICAqL1xuICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IG51bGw7XG59XG5cbkludGVyYWN0aW9uRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbkRhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uRGF0YTtcblxuLyoqXG4gKiBUaGlzIHdpbGwgcmV0dXJuIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgc3BlY2lmaWVkIGRpc3BsYXlPYmplY3QgZm9yIHRoaXMgSW50ZXJhY3Rpb25EYXRhXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgbG9jYWwgY29vcmRzIG9mZlxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBwb2ludClcbiAqIEBwYXJhbSBbZ2xvYmFsUG9zXSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgY29udGFpbmluZyB5b3VyIGN1c3RvbSBnbG9iYWwgY29vcmRzLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgdXNlIHRoZSBjdXJyZW50IGdsb2JhbCBjb29yZHMpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBJbnRlcmFjdGlvbkRhdGEgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIERpc3BsYXlPYmplY3RcbiAqL1xuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5nZXRMb2NhbFBvc2l0aW9uID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHBvaW50LCBnbG9iYWxQb3MpXG57XG4gICAgcmV0dXJuIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKGdsb2JhbFBvcyB8fCB0aGlzLmdsb2JhbCwgcG9pbnQpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIEludGVyYWN0aW9uRGF0YSA9IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25EYXRhJyk7XG5cbi8vIE1peCBpbnRlcmFjdGl2ZVRhcmdldCBpbnRvIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGVcbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbik7XG5cbi8qKlxuICogVGhlIGludGVyYWN0aW9uIG1hbmFnZXIgZGVhbHMgd2l0aCBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzLiBBbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgaW50ZXJhY3RpdmVcbiAqIGlmIGl0cyBpbnRlcmFjdGl2ZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIHRydWVcbiAqIFRoaXMgbWFuYWdlciBhbHNvIHN1cHBvcnRzIG11bHRpdG91Y2guXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH1cbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQ9dHJ1ZV0ge2Jvb2xlYW59IFNob3VsZCB0aGUgbWFuYWdlciBhdXRvbWF0aWNhbGx5IHByZXZlbnQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMuXG4gKiBAcGFyYW0gW29wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3k9MTBdIHtudW1iZXJ9IEZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQuXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uTWFuYWdlcihyZW5kZXJlciwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGludGVyYWN0aW9uIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMgYXV0b21hdGljYWxseSBiZSBwcmV2ZW50ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdCA9IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdCA6IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBcyB0aGlzIGZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQgbW9yZSBvZnRlbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgPSBvcHRpb25zLmludGVyYWN0aW9uRnJlcXVlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vdXNlIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhfVxuICAgICAqL1xuICAgIHRoaXMubW91c2UgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCBkYXRhIG9iamVjdCB0byBoYW5kbGUgYWxsIHRoZSBldmVudCB0cmFja2luZy9kaXNwYXRjaGluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnREYXRhID0ge1xuICAgICAgICBzdG9wcGVkOiBmYWxzZSxcbiAgICAgICAgdGFyZ2V0OiBudWxsLFxuICAgICAgICB0eXBlOiBudWxsLFxuICAgICAgICBkYXRhOiB0aGlzLm1vdXNlLFxuICAgICAgICBzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGlueSBsaXR0bGUgaW50ZXJhY3RpdmVEYXRhIHBvb2wgIVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGFbXX1cbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBET00gZWxlbWVudCB0byBiaW5kIHRvLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTEVsZW1lbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIYXZlIGV2ZW50cyBiZWVuIGF0dGFjaGVkIHRvIHRoZSBkb20gZWxlbWVudD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gZmFsc2U7XG5cbiAgICAvL3RoaXMgd2lsbCBtYWtlIGl0IHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gY2FsbCBiaW5kIGFsbCB0aGUgdGltZVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlVXAgPSB0aGlzLm9uTW91c2VVcC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlVXAgPSB0aGlzLnByb2Nlc3NNb3VzZVVwLmJpbmQoIHRoaXMgKTtcblxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IHRoaXMub25Nb3VzZURvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZURvd24gPSB0aGlzLnByb2Nlc3NNb3VzZURvd24uYmluZCggdGhpcyApO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IHRoaXMub25Nb3VzZU1vdmUuYmluZCggdGhpcyApO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IHRoaXMucHJvY2Vzc01vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VPdXQgPSB0aGlzLm9uTW91c2VPdXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IHRoaXMub25Ub3VjaFN0YXJ0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaEVuZCA9IHRoaXMub25Ub3VjaEVuZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gdGhpcy5wcm9jZXNzVG91Y2hFbmQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaE1vdmUgPSB0aGlzLm9uVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sYXN0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjc3Mgc3R5bGUgb2YgdGhlIGN1cnNvciB0aGF0IGlzIGJlaW5nIHVzZWRcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSAnaW5oZXJpdCc7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjYWNoZWQgdmFyXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCByZXNvbHV0aW9uXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IDE7XG5cbiAgICB0aGlzLnNldFRhcmdldEVsZW1lbnQodGhpcy5yZW5kZXJlci52aWV3LCB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24pO1xufVxuXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJhY3Rpb25NYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5cbi8qKlxuICogU2V0cyB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlL3RvdWNoIGV2ZW50cy4gVGhpcyBpcyB1c2VmdWwgZm9yIHdoZW4geW91IGhhdmVcbiAqIG90aGVyIERPTSBlbGVtZW50cyBvbiB0b3Agb2YgdGhlIHJlbmRlcmVycyBDYW52YXMgZWxlbWVudC4gV2l0aCB0aGlzIHlvdSdsbCBiZSBiYWxlIHRvIGRlbGV0ZWdhdGVcbiAqIGFub3RoZXIgRE9NIGVsZW1lbnQgdG8gcmVjZWl2ZSB0aG9zZSBldmVudHMuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQge0hUTUxFbGVtZW50fSB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVEhlIHJlc29sdXRpb24gb2YgdGhlIG5ldyBlbGVtZW50IChyZWxhdGl2ZSB0byB0aGUgY2FudmFzKS5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuc2V0VGFyZ2V0RWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCByZXNvbHV0aW9uKVxue1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICB0aGlzLmFkZEV2ZW50cygpO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYWxsIHRoZSBET00gZXZlbnRzXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5hZGRFdmVudHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29yZS50aWNrZXIuc2hhcmVkLmFkZCh0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy1jb250ZW50LXpvb21pbmcnXSA9ICdub25lJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICdub25lJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgICAgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgICAgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgICAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCAgIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICAgICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsICAgIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIHRoZSBET00gZXZlbnRzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHJlZ2lzdGVyZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJyc7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAgdGhpcy5vblRvdWNoRW5kLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlLCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgIHRoaXMub25Nb3VzZVVwLCB0cnVlKTtcblxuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc3RhdGUgb2YgaW50ZXJhY3RpdmUgb2JqZWN0cy5cbiAqIEludm9rZWQgYnkgYSB0aHJvdHRsZWQgdGlja2VyIHVwZGF0ZSBmcm9tXG4gKiB7QGxpbmsgUElYSS50aWNrZXIuc2hhcmVkfS5cbiAqXG4gKiBAcGFyYW0gZGVsdGFUaW1lIHtudW1iZXJ9XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB0aGlzLl9kZWx0YVRpbWUgKz0gZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2RlbHRhVGltZSA8IHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGVsdGFUaW1lID0gMDtcblxuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHVzZXIgbW92ZSB0aGUgbW91c2UgdGhpcyBjaGVjayBoYXMgYWxyZWFkeSBiZWVuIGRmb25lIHVzaW5nIHRoZSBtb3VzZSBtb3ZlIVxuICAgIGlmKHRoaXMuZGlkTW92ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlkTW92ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE9cbn07XG5cbi8qKlxuICogRGlzcGF0Y2hlcyBhbiBldmVudCBvbiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIGRpc3BsYXkgb2JqZWN0IGluIHF1ZXN0aW9uXG4gKiBAcGFyYW0gZXZlbnRTdHJpbmcge3N0cmluZ30gdGhlIG5hbWUgb2YgdGhlIGV2ZW50IChlLmcsIG1vdXNlZG93bilcbiAqIEBwYXJhbSBldmVudERhdGEge29iamVjdH0gdGhlIGV2ZW50IGRhdGEgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGV2ZW50U3RyaW5nLCBldmVudERhdGEgKVxue1xuICAgIGlmKCFldmVudERhdGEuc3RvcHBlZClcbiAgICB7XG4gICAgICAgIGV2ZW50RGF0YS50YXJnZXQgPSBkaXNwbGF5T2JqZWN0O1xuICAgICAgICBldmVudERhdGEudHlwZSA9IGV2ZW50U3RyaW5nO1xuXG4gICAgICAgIGRpc3BsYXlPYmplY3QuZW1pdCggZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0W2V2ZW50U3RyaW5nXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddKCBldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogTWFwcyB4IGFuZCB5IGNvb3JkcyBmcm9tIGEgRE9NIG9iamVjdCBhbmQgbWFwcyB0aGVtIGNvcnJlY3RseSB0byB0aGUgcGl4aSB2aWV3LiBUaGUgcmVzdWx0aW5nIHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUgcG9pbnQuXG4gKiBUaGlzIHRha2VzIGludG8gYWNjb3VudCB0aGUgZmFjdCB0aGF0IHRoZSBET00gZWxlbWVudCBjb3VsZCBiZSBzY2FsZWQgYW5kIHBvc2l0aW9uZWQgYW55d2hlcmUgb24gdGhlIHNjcmVlbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCB0aGUgcmVzdWx0IHdpbGwgYmUgc3RvcmVkIGluXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHggICAgIHRoZSB4IGNvb3JkIG9mIHRoZSBwb3NpdGlvbiB0byBtYXBcbiAqIEBwYXJhbSAge251bWJlcn0geSAgICAgdGhlIHkgY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm1hcFBvc2l0aW9uVG9Qb2ludCA9IGZ1bmN0aW9uICggcG9pbnQsIHgsIHkgKVxue1xuICAgIHZhciByZWN0ID0gdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcG9pbnQueCA9ICggKCB4IC0gcmVjdC5sZWZ0ICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQud2lkdGggIC8gcmVjdC53aWR0aCAgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHBvaW50LnkgPSAoICggeSAtIHJlY3QudG9wICApICogKHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmhlaWdodCAvIHJlY3QuaGVpZ2h0ICkgKSAvIHRoaXMucmVzb2x1dGlvbjtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlcyBhIG5lYXQgd2F5IG9mIGNyYXdsaW5nIHRocm91Z2ggdGhlIHNjZW5lIGdyYXBoIGFuZCBydW5uaW5nIGEgc3BlY2lmaWVkIGZ1bmN0aW9uIG9uIGFsbCBpbnRlcmFjdGl2ZSBvYmplY3RzIGl0IGZpbmRzLlxuICogSXQgd2lsbCBhbHNvIHRha2UgY2FyZSBvZiBoaXQgdGVzdGluZyB0aGUgaW50ZXJhY3RpdmUgb2JqZWN0cyBhbmQgcGFzc2VzIHRoZSBoaXQgYWNyb3NzIGluIHRoZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCBpcyB0ZXN0ZWQgZm9yIGNvbGxpc2lvblxuICogQHBhcmFtICB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBkaXNwbGF5T2JqZWN0IHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgd2lsbCBiZSBoaXQgdGVzdCAocmVjdXJjc2l2bHkgY3Jhd2xzIGl0cyBjaGlsZHJlbilcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmdW5jIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggaW50ZXJhY3RpdmUgb2JqZWN0LiBUaGUgZGlzcGxheU9iamVjdCBhbmQgaGl0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvblxuICogQHBhcmFtICB7Ym9vbGVhbn0gaGl0VGVzdCB0aGlzIGluZGljYXRlcyBpZiB0aGUgb2JqZWN0cyBpbnNpZGUgc2hvdWxkIGJlIGhpdCB0ZXN0IGFnYWluc3QgdGhlIHBvaW50XG4gKiBAcmV0dXJuIHtib29sZWFufSByZXR1cm5zIHRydWUgaWYgdGhlIGRpc3BsYXlPYmplY3QgaGl0IHRoZSBwb2ludFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NJbnRlcmFjdGl2ZSA9IGZ1bmN0aW9uIChwb2ludCwgZGlzcGxheU9iamVjdCwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmUpXG57XG4gICAgaWYoIWRpc3BsYXlPYmplY3QgfHwgIWRpc3BsYXlPYmplY3QudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUb29rIGEgbGl0dGxlIHdoaWxlIHRvIHJld29yayB0aGlzIGZ1bmN0aW9uIGNvcnJlY3RseSEgQnV0IG5vdyBpdCBpcyBkb25lIGFuZCBuaWNlIGFuZCBvcHRpbWlzZWQuIF5fXlxuICAgIC8vIFxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBub3cgbG9vcCB0aHJvdWdoIGFsbCBvYmplY3RzIGFuZCB0aGVuIG9ubHkgaGl0IHRlc3QgdGhlIG9iamVjdHMgaXQgSEFTIHRvLCBub3QgYWxsIG9mIHRoZW0uIE1VQ0ggZmFzdGVyLi5cbiAgICAvLyBBbiBvYmplY3Qgd2lsbCBiZSBoaXQgdGVzdCBpZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gICAgLy8gXG4gICAgLy8gMTogSXQgaXMgaW50ZXJhY3RpdmUuXG4gICAgLy8gMjogSXQgYmVsb25ncyB0byBhIHBhcmVudCB0aGF0IGlzIGludGVyYWN0aXZlIEFORCBvbmUgb2YgdGhlIHBhcmVudHMgY2hpbGRyZW4gaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICAvLyBcbiAgICAvLyBBcyBhbm90aGVyIGxpdHRsZSBvcHRpbWlzYXRpb24gb25jZSBhbiBpbnRlcmFjdGl2ZSBvYmplY3QgaGFzIGJlZW4gaGl0IHdlIGNhbiBjYXJyeSBvbiB0aHJvdWdoIHRoZSBzY2VuZWdyYXBoLCBidXQgd2Uga25vdyB0aGF0IHRoZXJlIHdpbGwgYmUgbm8gbW9yZSBoaXRzISBTbyB3ZSBjYW4gYXZvaWQgZXh0cmEgaGl0IHRlc3RzXG4gICAgLy8gQSBmaW5hbCBvcHRpbWlzYXRpb24gaXMgdGhhdCBhbiBvYmplY3QgaXMgbm90IGhpdCB0ZXN0IGRpcmVjdGx5IGlmIGEgY2hpbGQgaGFzIGFscmVhZHkgYmVlbiBoaXQuXG4gICAgXG4gICAgdmFyIGhpdCA9IGZhbHNlLFxuICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGludGVyYWN0aXZlID0gZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSB8fCBpbnRlcmFjdGl2ZTtcblxuICAgIC8vIGlmIHRoZSBkaXNwbGF5b2JqZWN0IGhhcyBhIGhpdEFyZWEsIHRoZW4gaXQgZG9lcyBub3QgbmVlZCB0byBoaXRUZXN0IGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaGl0QXJlYSlcbiAgICB7XG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gKiogRlJFRSBUSVAgKiohIElmIGFuIG9iamVjdCBpcyBub3QgaW50ZXJhY3R0aXZlIG9yIGhhcyBubyBidXR0b25zIGluIGl0IChzdWNoIGFzIGEgZ2FtZSBzY2VuZSEpIHNldCBpbnRlcmFjdGl2ZUNoaWxkcmVuIHRvIGZhbHNlIGZvciB0aGF0IGRpc3BsYXlPYmplY3QuXG4gICAgLy8gVGhpcyB3aWxsIGFsbG93IHBpeGkgdG8gY29tcGxldGx5IGlnbm9yZSBhbmQgYnlwYXNzIGNoZWNraW5nIHRoZSBkaXNwbGF5T2JqZWN0cyBjaGlsZHJlbi5cbiAgICBpZihkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlQ2hpbGRyZW4pXG4gICAgeyAgICAgICBcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICAgICAgXG4gICAgICAgIGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRpbWUgdG8gZ2V0IHJlY3Vyc2l2ZS4uIGlmIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gaWYgc29tdGhpbmcgaXMgaGl0Li5cbiAgICAgICAgICAgIGlmKCB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZShwb2ludCwgY2hpbGRyZW5baV0sIGZ1bmMsIGhpdFRlc3QsIGludGVyYWN0aXZlUGFyZW50KSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIHdlIG5vIGxvbmdlciBuZWVkIHRvIGhpdCB0ZXN0IGFueSBtb3JlIG9iamVjdHMgaW4gdGhpcyBjb250YWluZXIgYXMgd2Ugd2Ugbm93IGtub3cgdGhlIHBhcmVudCBoYXMgYmVlbiBoaXRcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBpcyBpbnRlcmFjdGl2ZSAsIHRoYXQgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhpdCB3YXMgYWN0dWFsbHkgaW50ZXJhY3RpdmUgYW5kIG5vdCBqdXN0IHRoZSBjaGlsZCBvZiBhbiBpbnRlcmFjdGl2ZSBvYmplY3QuIFxuICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55dGhpbmcgZWxzZS4gV2Ugc3RpbGwgbmVlZCB0byBydW4gdGhyb3VnaCBhbGwgb2JqZWN0cywgYnV0IHdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhbnkgaGl0IHRlc3RzLlxuICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuW2ldLmludGVyYWN0aXZlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGl0VGVzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIG5vIHBvaW50IHJ1bm5pbmcgdGhpcyBpZiB0aGUgaXRlbSBpcyBub3QgaW50ZXJhY3RpdmUgb3IgZG9lcyBub3QgaGF2ZSBhbiBpbnRlcmFjdGl2ZSBwYXJlbnQuXG4gICAgaWYoaW50ZXJhY3RpdmUpXG4gICAge1xuICAgICAgICAvLyBpZiB3ZSBhcmUgaGl0IHRlc3RpbmcgKGFzIGluIHdlIGhhdmUgbm8gaGl0IGFueSBvYmplY3RzIHlldClcbiAgICAgICAgLy8gV2UgYWxzbyBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGhpdCB0ZXN0aW5nIGlmIG9uY2Ugb2YgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuIGhhcyBhbHJlYWR5IGJlZW4gaGl0IVxuICAgICAgICBpZihoaXRUZXN0ICYmICFoaXQpXG4gICAgICAgIHsgIFxuICAgICAgICAgICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGhpcy5fdGVtcFBvaW50KTtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmhpdEFyZWEuY29udGFpbnMoIHRoaXMuX3RlbXBQb2ludC54LCB0aGlzLl90ZW1wUG9pbnQueSApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZihkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gZGlzcGxheU9iamVjdC5jb250YWluc1BvaW50KHBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmMoZGlzcGxheU9iamVjdCwgaGl0KTsgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGl0O1xuICBcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgZG93biBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcHJlc3NlZCBkb3duXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VEb3duLCB0cnVlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBkb3duIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlRG93biA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB2YXIgZSA9IHRoaXMubW91c2Uub3JpZ2luYWxFdmVudDtcbiAgICBcbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG5cbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nIF0gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRkb3duJyA6ICdtb3VzZWRvd24nLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcmVsZWFzZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYnV0dG9uIGJlaW5nIHJlbGVhc2VkXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VVcCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlVXAsIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIHVwIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZVVwID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuXG4gICAgdmFyIGlzUmlnaHRCdXR0b24gPSBlLmJ1dHRvbiA9PT0gMiB8fCBlLndoaWNoID09PSAzO1xuICAgIHZhciBpc0Rvd24gPSAgaXNSaWdodEJ1dHRvbiA/ICdfaXNSaWdodERvd24nIDogJ19pc0xlZnREb3duJztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodHVwJyA6ICdtb3VzZXVwJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0Y2xpY2snIDogJ2NsaWNrJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXBvdXRzaWRlJyA6ICdtb3VzZXVwb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgdGhlIG1vdXNlIG1vdmluZ1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5kaWRNb3ZlID0gdHJ1ZTtcblxuICAgIHRoaXMuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VNb3ZlLCB0cnVlICk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgIT09IHRoaXMuY3Vyc29yKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gdGhpcy5jdXJzb3I7XG4gICAgfVxuXG4gICAgLy9UT0RPIEJVRyBmb3IgcGFyZW50cyBpbmVyYWN0aXZlIG9iamVjdCAoYm9yZGVyIG9yZGVyIGlzc3VlKVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlbW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQoZGlzcGxheU9iamVjdCwgaGl0KTtcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgaXMgbW92ZWQgb3V0IG9mIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJlaW5nIG1vdmVkIG91dFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlT3V0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgLy8gVE9ETyBvcHRpbWl6ZSBieSBub3QgY2hlY2sgRVZFUlkgVElNRSEgbWF5YmUgaGFsZiBhcyBvZnRlbj8gLy9cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkgKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIGZhbHNlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBvdmVyL291dCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VPdmVyT3V0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGlmKCFkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3ZlcicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlzcGxheU9iamVjdC5idXR0b25Nb2RlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnNvciA9IGRpc3BsYXlPYmplY3QuZGVmYXVsdEN1cnNvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZihkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIHRoaXMuZXZlbnREYXRhKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIHN0YXJ0ZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggc3RhcnRpbmcgb24gdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaFN0YXJ0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuICAgICAgICAvL1RPRE8gUE9PTFxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0LCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hTdGFydCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaHN0YXJ0JywgdGhpcy5ldmVudERhdGEgKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBlbmRzIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIGVuZGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICAvL1RPRE8gdGhpcyBzaG91bGQgYmUgcGFzc2VkIGFsb25nLi4gbm8gc2V0XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoRW5kLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIGVuZCBvZiBhIHRvdWNoIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaEVuZCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZCcsIHRoaXMuZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndGFwJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZG91dHNpZGUnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIG1vdmVkIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBtb3ZpbmcgYWNyb3NzIHRoZSByZW5kZXJlciB2aWV3XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIGEgdG91Y2ggbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGhpdCA9IGhpdDtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaG1vdmUnLCB0aGlzLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hFdmVudCB7RXZlbnREYXRhfSBUaGUgdG91Y2ggZXZlbnQgd2UgbmVlZCB0byBwYWlyIHdpdGggYW4gaW50ZXJhY3Rpb25EYXRhIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZ2V0VG91Y2hEYXRhID0gZnVuY3Rpb24gKHRvdWNoRXZlbnQpXG57XG4gICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wb3AoKTtcblxuICAgIGlmKCF0b3VjaERhdGEpXG4gICAge1xuICAgICAgICB0b3VjaERhdGEgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG4gICAgfVxuXG4gICAgdG91Y2hEYXRhLmlkZW50aWZpZXIgPSB0b3VjaEV2ZW50LmlkZW50aWZpZXI7XG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRvdWNoRGF0YS5nbG9iYWwsIHRvdWNoRXZlbnQuY2xpZW50WCwgdG91Y2hFdmVudC5jbGllbnRZICk7XG5cbiAgICBpZihuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YS5nbG9iYWwueCA9IHRvdWNoRGF0YS5nbG9iYWwueCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC55ID0gdG91Y2hEYXRhLmdsb2JhbC55IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIH1cblxuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWCA9IHRvdWNoRGF0YS5nbG9iYWwueDtcbiAgICB0b3VjaEV2ZW50Lmdsb2JhbFkgPSB0b3VjaERhdGEuZ2xvYmFsLnk7XG5cbiAgICByZXR1cm4gdG91Y2hEYXRhO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IHRvIHRoZSBpbnRlcm5hbCBwb29sXG4gKlxuICogQHBhcmFtIHRvdWNoRGF0YSB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9IFRoZSB0b3VjaCBkYXRhIG9iamVjdCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmV0dXJuVG91Y2hEYXRhID0gZnVuY3Rpb24gKCB0b3VjaERhdGEgKVxue1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wdXNoKCB0b3VjaERhdGEgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGludGVyYWN0aW9uIG1hbmFnZXJcbiAqXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLm1vdXNlID0gbnVsbDtcblxuICAgIHRoaXMuZXZlbnREYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IG51bGw7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VVcCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Nb3VzZURvd24gPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUgPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlT3V0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBudWxsO1xuXG5cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IG51bGw7XG5cbiAgICB0aGlzLm9uVG91Y2hFbmQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaE1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZW1wUG9pbnQgPSBudWxsO1xufTtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBpbnRlcmFjdGlvbnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEludGVyYWN0aW9uRGF0YTogICAgcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKSxcbiAgICBJbnRlcmFjdGlvbk1hbmFnZXI6IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25NYW5hZ2VyJyksXG4gICAgaW50ZXJhY3RpdmVUYXJnZXQ6ICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbn07XG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGludGVyYWN0aXZlIG9iamVjdHNcbiAqIHVzZWQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5pbnRlcmFjdGlvbi5pbnRlcmFjdGl2ZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgaW50ZXJhY3RpdmVUYXJnZXQgPSB7XG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBidXR0b25Nb2RlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlQ2hpbGRyZW46IHRydWUsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBkZWZhdWx0Q3Vyc29yOiAncG9pbnRlcicsXG5cbiAgICAvLyBzb21lIGludGVybmFsIGNoZWNrcy4uXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX292ZXI6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdG91Y2hEb3duOiBmYWxzZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnRlcmFjdGl2ZVRhcmdldDtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi4vZXh0cmFzJyksXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxuXG5mdW5jdGlvbiBwYXJzZShyZXNvdXJjZSwgdGV4dHVyZSkge1xuICAgIHZhciBkYXRhID0ge307XG4gICAgdmFyIGluZm8gPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF07XG4gICAgdmFyIGNvbW1vbiA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NvbW1vbicpWzBdO1xuXG4gICAgZGF0YS5mb250ID0gaW5mby5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKTtcbiAgICBkYXRhLnNpemUgPSBwYXJzZUludChpbmZvLmdldEF0dHJpYnV0ZSgnc2l6ZScpLCAxMCk7XG4gICAgZGF0YS5saW5lSGVpZ2h0ID0gcGFyc2VJbnQoY29tbW9uLmdldEF0dHJpYnV0ZSgnbGluZUhlaWdodCcpLCAxMCk7XG4gICAgZGF0YS5jaGFycyA9IHt9O1xuXG4gICAgLy9wYXJzZSBsZXR0ZXJzXG4gICAgdmFyIGxldHRlcnMgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjaGFyJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxldHRlcnMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaWQnKSwgMTApO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlUmVjdCA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4JyksIDEwKSArIHRleHR1cmUuZnJhbWUueCxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd5JyksIDEwKSArIHRleHR1cmUuZnJhbWUueSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd3aWR0aCcpLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaGVpZ2h0JyksIDEwKVxuICAgICAgICApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbY2hhckNvZGVdID0ge1xuICAgICAgICAgICAgeE9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeU9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3lvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeEFkdmFuY2U6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4YWR2YW5jZScpLCAxMCksXG4gICAgICAgICAgICBrZXJuaW5nOiB7fSxcbiAgICAgICAgICAgIHRleHR1cmU6IG5ldyBjb3JlLlRleHR1cmUodGV4dHVyZS5iYXNlVGV4dHVyZSwgdGV4dHVyZVJlY3QpXG5cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvL3BhcnNlIGtlcm5pbmdzXG4gICAgdmFyIGtlcm5pbmdzID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgna2VybmluZycpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBrZXJuaW5ncy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBmaXJzdCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnZmlyc3QnKSwgMTApO1xuICAgICAgICB2YXIgc2Vjb25kID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdzZWNvbmQnKSwgMTApO1xuICAgICAgICB2YXIgYW1vdW50ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdhbW91bnQnKSwgMTApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbc2Vjb25kXS5rZXJuaW5nW2ZpcnN0XSA9IGFtb3VudDtcbiAgICB9XG5cbiAgICByZXNvdXJjZS5iaXRtYXBGb250ID0gZGF0YTtcblxuICAgIC8vIEknbSBsZWF2aW5nIHRoaXMgYXMgYSB0ZW1wb3JhcnkgZml4IHNvIHdlIGNhbiB0ZXN0IHRoZSBiaXRtYXAgZm9udHMgaW4gdjNcbiAgICAvLyBidXQgaXQncyB2ZXJ5IGxpa2VseSB0byBjaGFuZ2VcbiAgICBleHRyYXMuQml0bWFwVGV4dC5mb250c1tkYXRhLmZvbnRdID0gZGF0YTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSBvciBub3QgeG1sIGRhdGFcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhIHx8ICFyZXNvdXJjZS5pc1htbClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNraXAgaWYgbm90IGJpdG1hcCBmb250IGRhdGEsIHVzaW5nIHNvbWUgc2lsbHkgZHVjay10eXBpbmdcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGFnZScpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdLmdldEF0dHJpYnV0ZSgnZmFjZScpID09PSBudWxsXG4gICAgICAgICAgICApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeG1sVXJsID0gcGF0aC5kaXJuYW1lKHJlc291cmNlLnVybCk7XG5cbiAgICAgICAgaWYgKHhtbFVybCA9PT0gJy4nKSB7XG4gICAgICAgICAgICB4bWxVcmwgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJhc2VVcmwgJiYgeG1sVXJsKSB7XG4gICAgICAgICAgICAvLyBpZiBiYXNldXJsIGhhcyBhIHRyYWlsaW5nIHNsYXNoIHRoZW4gYWRkIG9uZSB0byB4bWxVcmwgc28gdGhlIHJlcGxhY2Ugd29ya3MgYmVsb3dcbiAgICAgICAgICAgIGlmICh0aGlzLmJhc2VVcmwuY2hhckF0KHRoaXMuYmFzZVVybC5sZW5ndGggLSAxKSA9PT0gJy8nKSB7XG4gICAgICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcmVtb3ZlIGJhc2VVcmwgZnJvbSB4bWxVcmxcbiAgICAgICAgICAgIHhtbFVybCA9IHhtbFVybC5yZXBsYWNlKHRoaXMuYmFzZVVybCwgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4geG1sVXJsIG5vdywgaXQgbmVlZHMgYSB0cmFpbGluZyBzbGFzaC4gRW5zdXJlIHRoYXQgaXQgZG9lcyBpZiB0aGUgc3RyaW5nIGlzbid0IGVtcHR5LlxuICAgICAgICBpZiAoeG1sVXJsICYmIHhtbFVybC5jaGFyQXQoeG1sVXJsLmxlbmd0aCAtIDEpICE9PSAnLycpIHtcbiAgICAgICAgICAgIHhtbFVybCArPSAnLyc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRleHR1cmVVcmwgPSB4bWxVcmwgKyByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJylbMF0uZ2V0QXR0cmlidXRlKCdmaWxlJyk7XG4gICAgICAgIGlmIChjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSkge1xuICAgICAgICAgICAgLy9yZXVzZSBleGlzdGluZyB0ZXh0dXJlXG4gICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbdGV4dHVyZVVybF0pO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGxvYWRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiByZXNvdXJjZS5tZXRhZGF0YS5pbWFnZU1ldGFkYXRhXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gbG9hZCB0aGUgdGV4dHVyZSBmb3IgdGhlIGZvbnRcbiAgICAgICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgdGV4dHVyZVVybCwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgcmVzLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBsb2FkZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5sb2FkZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIExvYWRlcjogICAgICAgICAgICAgcmVxdWlyZSgnLi9sb2FkZXInKSxcblxuICAgIC8vIHBhcnNlcnNcbiAgICBiaXRtYXBGb250UGFyc2VyOiAgIHJlcXVpcmUoJy4vYml0bWFwRm9udFBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyOiAgcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIHRleHR1cmVQYXJzZXI6ICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlUGFyc2VyJyksXG4gICAgUmVzb3VyY2U6ICAgICAgICAgICByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZVxufTtcbiIsInZhciBSZXNvdXJjZUxvYWRlciA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLFxuICAgIHRleHR1cmVQYXJzZXIgPSByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBzcHJpdGVzaGVldFBhcnNlciA9IHJlcXVpcmUoJy4vc3ByaXRlc2hlZXRQYXJzZXInKSxcbiAgICBiaXRtYXBGb250UGFyc2VyID0gcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyk7XG5cbi8qKlxuICpcbiAqIFRoZSBuZXcgbG9hZGVyLCBleHRlbmRzIFJlc291cmNlIExvYWRlciBieSBDaGFkIEVuZ2xlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9lbmdsZXJjai9yZXNvdXJjZS1sb2FkZXJcbiAqXG4gKiBgYGBqc1xuICogdmFyIGxvYWRlciA9IFBJWEkubG9hZGVyOyAvLyBwaXhpIGV4cG9zZXMgYSBwcmVtYWRlIGluc3RhbmNlIGZvciB5b3UgdG8gdXNlLlxuICogLy9vclxuICogdmFyIGxvYWRlciA9IG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyKCk7IC8vIHlvdSBjYW4gYWxzbyBjcmVhdGUgeW91ciBvd24gaWYgeW91IHdhbnRcbiAqXG4gKiBsb2FkZXIuYWRkKCdidW5ueScsXCJkYXRhL2J1bm55LnBuZ1wiKTtcbiAqXG4gKiBsb2FkZXIub25jZSgnY29tcGxldGUnLG9uQXNzZXRzTG9hZGVkKTtcbiAqXG4gKiBsb2FkZXIubG9hZCgpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlJlc291cmNlTG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5sb2FkZXJzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KVxue1xuICAgIFJlc291cmNlTG9hZGVyLmNhbGwodGhpcywgYmFzZVVybCwgY29uY3VycmVuY3kpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMudXNlKExvYWRlci5fcGl4aU1pZGRsZXdhcmVbaV0oKSk7XG4gICAgfVxufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZXNvdXJjZUxvYWRlci5wcm90b3R5cGUpO1xuTG9hZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbkxvYWRlci5fcGl4aU1pZGRsZXdhcmUgPSBbXG4gICAgLy8gcGFyc2UgYW55IGJsb2IgaW50byBtb3JlIHVzYWJsZSBvYmplY3RzIChlLmcuIEltYWdlKVxuICAgIFJlc291cmNlTG9hZGVyLm1pZGRsZXdhcmUucGFyc2luZy5ibG9iLFxuICAgIC8vIHBhcnNlIGFueSBJbWFnZSBvYmplY3RzIGludG8gdGV4dHVyZXNcbiAgICB0ZXh0dXJlUGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBzcHJpdGVzaGVldFBhcnNlcixcbiAgICAvLyBwYXJzZSBhbnkgc3ByaXRlc2hlZXQgZGF0YSBpbnRvIG11bHRpcGxlIHRleHR1cmVzXG4gICAgYml0bWFwRm9udFBhcnNlclxuXTtcblxuTG9hZGVyLmFkZFBpeGlNaWRkbGV3YXJlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgTG9hZGVyLl9waXhpTWlkZGxld2FyZS5wdXNoKGZuKTtcbn07XG5cbi8vIEFkZCBjdXN0b20gZXh0ZW50aW9uc1xudmFyIFJlc291cmNlID0gUmVzb3VyY2VMb2FkZXIuUmVzb3VyY2U7XG5cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUoJ2ZudCcsIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIHBhdGggPSByZXF1aXJlKCdwYXRoJyksXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBza2lwIGlmIG5vIGRhdGEsIGl0cyBub3QganNvbiwgb3IgaXQgaXNuJ3Qgc3ByaXRlc2hlZXQgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzSnNvbiB8fCAhcmVzb3VyY2UuZGF0YS5mcmFtZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzb3VyY2UuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcm91dGUgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJykpO1xuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwoIHJlc291cmNlLnVybCApO1xuXG4gICAgICAgIC8vIGxvYWQgdGhlIGltYWdlIGZvciB0aGlzIHNoZWV0XG4gICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgcm91dGUgKyAnLycgKyByZXNvdXJjZS5kYXRhLm1ldGEuaW1hZ2UsIGxvYWRPcHRpb25zLCBmdW5jdGlvbiAocmVzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlcyA9IHt9O1xuXG4gICAgICAgICAgICB2YXIgZnJhbWVzID0gcmVzb3VyY2UuZGF0YS5mcmFtZXM7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gZnJhbWVzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gZnJhbWVzW2ldLmZyYW1lO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlY3QpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0cmltID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QuaCwgcmVjdC53KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QudywgcmVjdC5oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vICBDaGVjayB0byBzZWUgaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0udHJpbW1lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpbSA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS54IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS55IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS53IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS5oIC8gcmVzb2x1dGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBmbGlwIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IVxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gc2l6ZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggPSBzaXplLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0ID0gdGVtcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNpemUueCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLnkgLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLmhlaWdodCAvPSByZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzW2ldID0gbmV3IGNvcmUuVGV4dHVyZShyZXMudGV4dHVyZS5iYXNlVGV4dHVyZSwgc2l6ZSwgc2l6ZS5jbG9uZSgpLCB0cmltLCBmcmFtZXNbaV0ucm90YXRlZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0cyBhbHNvIGFkZCB0aGUgZnJhbWUgdG8gcGl4aSdzIGdsb2JhbCBjYWNoZSBmb3IgZnJvbUZyYW1lIGFuZCBmcm9tSW1hZ2UgZnVuY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW2ldID0gcmVzb3VyY2UudGV4dHVyZXNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH0pO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gY3JlYXRlIGEgbmV3IHRleHR1cmUgaWYgdGhlIGRhdGEgaXMgYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgIGlmIChyZXNvdXJjZS5kYXRhICYmIHJlc291cmNlLmlzSW1hZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBiYXNlVGV4dHVyZSA9IG5ldyBjb3JlLkJhc2VUZXh0dXJlKHJlc291cmNlLmRhdGEsIG51bGwsIGNvcmUudXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKHJlc291cmNlLnVybCkpO1xuICAgICAgICAgICAgYmFzZVRleHR1cmUuaW1hZ2VVcmwgPSByZXNvdXJjZS51cmw7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlID0gbmV3IGNvcmUuVGV4dHVyZShiYXNlVGV4dHVyZSk7XG4gICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdWNudGlvbnNcbiAgICAgICAgICAgIGNvcmUudXRpbHMuQmFzZVRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gYmFzZVRleHR1cmU7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gcmVzb3VyY2UudGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgdGVtcFBvbHlnb24gPSBuZXcgY29yZS5Qb2x5Z29uKCk7XG5cbi8qKlxuICogQmFzZSBtZXNoIGNsYXNzXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0byB1c2VcbiAqIEBwYXJhbSBbdmVydGljZXNdIHtGbG9hdDMyQXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHZlcnRpY2VzXG4gKiBAcGFyYW0gW3V2c10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdXZzXG4gKiBAcGFyYW0gW2luZGljZXNdIHtVaW50MTZBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgaW5kaWNlc1xuICogQHBhcmFtIFtkcmF3TW9kZV0ge251bWJlcn0gdGhlIGRyYXdNb2RlLCBjYW4gYmUgYW55IG9mIHRoZSBNZXNoLkRSQVdfTU9ERVMgY29uc3RzXG4gKi9cbmZ1bmN0aW9uIE1lc2godGV4dHVyZSwgdmVydGljZXMsIHV2cywgaW5kaWNlcywgZHJhd01vZGUpXG57XG4gICAgY29yZS5Db250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIG9mIHRoZSBNZXNoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBVdnMgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IHV2cyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxLCAwLFxuICAgICAgICAxLCAxLFxuICAgICAgICAwLCAxXSk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB2ZXJ0aWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSB2ZXJ0aWNlcyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxMDAsIDAsXG4gICAgICAgIDEwMCwgMTAwLFxuICAgICAgICAwLCAxMDBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgLy8gIFRPRE8gYXV0byBnZW5lcmF0ZSB0aGlzIGJhc2VkIG9uIGRyYXcgbW9kZSFcbiAgICB0aGlzLmluZGljZXMgPSBpbmRpY2VzIHx8IG5ldyBVaW50MTZBcnJheShbMCwgMSwgMywgMl0pO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgTWVzaCBpcyBkaXJ0eSBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzcHJpdGUuIFNldCB0byBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlbW92ZSBhbnkgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUcmlhbmdsZXMgaW4gY2FudmFzIG1vZGUgYXJlIGF1dG9tYXRpY2FsbHkgYW50aWFsaWFzZWQsIHVzZSB0aGlzIHZhbHVlIHRvIGZvcmNlIHRyaWFuZ2xlcyB0byBvdmVybGFwIGEgYml0IHdpdGggZWFjaCBvdGhlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdheSB0aGUgTWVzaCBzaG91bGQgYmUgZHJhd24sIGNhbiBiZSBhbnkgb2YgdGhlIHtAbGluayBQSVhJLm1lc2guTWVzaC5EUkFXX01PREVTfSBjb25zdHNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAc2VlIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmRyYXdNb2RlID0gZHJhd01vZGUgfHwgTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0g7XG5cbiAgICAvLyBydW4gdGV4dHVyZSBzZXR0ZXI7XG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcblxuICAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgbWVzaCBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1lc2gucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuTWVzaC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNZXNoLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLm1lc2guTWVzaCNcbiAgICAgKi9cbiAgICB0ZXh0dXJlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl90ZXh0dXJlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBXZWJHTCByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMubWVzaCk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5tZXNoLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEsIHRyYW5zZm9ybS5iLCB0cmFuc2Zvcm0uYywgdHJhbnNmb3JtLmQsIHRyYW5zZm9ybS50eCB8IDAsIHRyYW5zZm9ybS50eSB8IDApO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4LCB0cmFuc2Zvcm0udHkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc1RyaWFuZ2xlTWVzaChjb250ZXh0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzKGNvbnRleHQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiBUcmlhbmdsZSBNZXNoIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aCAvIDI7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGggLSAyOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4LCAoaW5kZXggKyAyKSwgKGluZGV4ICsgNCkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiB0cmlhbmdsZSBtb2RlIHVzaW5nIGNhbnZhc1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc1RyaWFuZ2xlcyA9IGZ1bmN0aW9uIChjb250ZXh0KVxue1xuICAgIC8vIGRyYXcgdHJpYW5nbGVzISFcbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcblxuICAgIHZhciBsZW5ndGggPSBpbmRpY2VzLmxlbmd0aDtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAzKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4MCA9IGluZGljZXNbaV0gKiAyLCBpbmRleDEgPSBpbmRpY2VzW2kgKyAxXSAqIDIsIGluZGV4MiA9IGluZGljZXNbaSArIDJdICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3Mgb25lIG9mIHRoZSB0cmlhbmdsZXMgdGhhdCBmb3JtIHRoaXMgTWVzaFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHBhcmFtIHZlcnRpY2VzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgTWVzaFxuICogQHBhcmFtIHV2cyB7RmxvYXQzMkFycmF5fSBhIHJlZmVyZW5jZSB0byB0aGUgdXZzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gaW5kZXgwIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgxIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgc2Vjb25kIHZlcnRleFxuICogQHBhcmFtIGluZGV4MiB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIHRoaXJkIHZlcnRleFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZSA9IGZ1bmN0aW9uIChjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleDAsIGluZGV4MSwgaW5kZXgyKVxue1xuICAgIHZhciB0ZXh0dXJlU291cmNlID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2U7XG4gICAgdmFyIHRleHR1cmVXaWR0aCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdmFyIHRleHR1cmVIZWlnaHQgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHZhciB4MCA9IHZlcnRpY2VzW2luZGV4MF0sIHgxID0gdmVydGljZXNbaW5kZXgxXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleDJdO1xuICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4MCArIDFdLCB5MSA9IHZlcnRpY2VzW2luZGV4MSArIDFdLCB5MiA9IHZlcnRpY2VzW2luZGV4MiArIDFdO1xuXG4gICAgdmFyIHUwID0gdXZzW2luZGV4MF0gKiB0ZXh0dXJlV2lkdGgsIHUxID0gdXZzW2luZGV4MV0gKiB0ZXh0dXJlV2lkdGgsIHUyID0gdXZzW2luZGV4Ml0gKiB0ZXh0dXJlV2lkdGg7XG4gICAgdmFyIHYwID0gdXZzW2luZGV4MCArIDFdICogdGV4dHVyZUhlaWdodCwgdjEgPSB1dnNbaW5kZXgxICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MiA9IHV2c1tpbmRleDIgKyAxXSAqIHRleHR1cmVIZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5jYW52YXNQYWRkaW5nID4gMClcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nWCA9IHRoaXMuY2FudmFzUGFkZGluZyAvIHRoaXMud29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIHBhZGRpbmdZID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgY2VudGVyWCA9ICh4MCArIHgxICsgeDIpIC8gMztcbiAgICAgICAgdmFyIGNlbnRlclkgPSAoeTAgKyB5MSArIHkyKSAvIDM7XG5cbiAgICAgICAgdmFyIG5vcm1YID0geDAgLSBjZW50ZXJYO1xuICAgICAgICB2YXIgbm9ybVkgPSB5MCAtIGNlbnRlclk7XG5cbiAgICAgICAgdmFyIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MCA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MCA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIC8vXG5cbiAgICAgICAgbm9ybVggPSB4MSAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTEgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MSA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MSA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIG5vcm1YID0geDIgLSBjZW50ZXJYO1xuICAgICAgICBub3JtWSA9IHkyIC0gY2VudGVyWTtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDIgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTIgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LnNhdmUoKTtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG5cbiAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcblxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICBjb250ZXh0LmNsaXAoKTtcblxuICAgIC8vIENvbXB1dGUgbWF0cml4IHRyYW5zZm9ybVxuICAgIHZhciBkZWx0YSA9ICAodTAgKiB2MSkgICAgICArICh2MCAqIHUyKSAgICAgICsgKHUxICogdjIpICAgICAgLSAodjEgKiB1MikgICAgICAtICh2MCAqIHUxKSAgICAgIC0gKHUwICogdjIpO1xuICAgIHZhciBkZWx0YUEgPSAoeDAgKiB2MSkgICAgICArICh2MCAqIHgyKSAgICAgICsgKHgxICogdjIpICAgICAgLSAodjEgKiB4MikgICAgICAtICh2MCAqIHgxKSAgICAgIC0gKHgwICogdjIpO1xuICAgIHZhciBkZWx0YUIgPSAodTAgKiB4MSkgICAgICArICh4MCAqIHUyKSAgICAgICsgKHUxICogeDIpICAgICAgLSAoeDEgKiB1MikgICAgICAtICh4MCAqIHUxKSAgICAgIC0gKHUwICogeDIpO1xuICAgIHZhciBkZWx0YUMgPSAodTAgKiB2MSAqIHgyKSArICh2MCAqIHgxICogdTIpICsgKHgwICogdTEgKiB2MikgLSAoeDAgKiB2MSAqIHUyKSAtICh2MCAqIHUxICogeDIpIC0gKHUwICogeDEgKiB2Mik7XG4gICAgdmFyIGRlbHRhRCA9ICh5MCAqIHYxKSAgICAgICsgKHYwICogeTIpICAgICAgKyAoeTEgKiB2MikgICAgICAtICh2MSAqIHkyKSAgICAgIC0gKHYwICogeTEpICAgICAgLSAoeTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhRSA9ICh1MCAqIHkxKSAgICAgICsgKHkwICogdTIpICAgICAgKyAodTEgKiB5MikgICAgICAtICh5MSAqIHUyKSAgICAgIC0gKHkwICogdTEpICAgICAgLSAodTAgKiB5Mik7XG4gICAgdmFyIGRlbHRhRiA9ICh1MCAqIHYxICogeTIpICsgKHYwICogeTEgKiB1MikgKyAoeTAgKiB1MSAqIHYyKSAtICh5MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB5MikgLSAodTAgKiB5MSAqIHYyKTtcblxuICAgIGNvbnRleHQudHJhbnNmb3JtKGRlbHRhQSAvIGRlbHRhLCBkZWx0YUQgLyBkZWx0YSxcbiAgICAgICAgZGVsdGFCIC8gZGVsdGEsIGRlbHRhRSAvIGRlbHRhLFxuICAgICAgICBkZWx0YUMgLyBkZWx0YSwgZGVsdGFGIC8gZGVsdGEpO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UodGV4dHVyZVNvdXJjZSwgMCwgMCk7XG4gICAgY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5cblxuLyoqXG4gKiBSZW5kZXJzIGEgZmxhdCBNZXNoXG4gKlxuICogQHBhcmFtIE1lc2gge1BJWEkubWVzaC5NZXNofSBUaGUgTWVzaCB0byByZW5kZXJcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLnJlbmRlck1lc2hGbGF0ID0gZnVuY3Rpb24gKE1lc2gpXG57XG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgdmFyIHZlcnRpY2VzID0gTWVzaC52ZXJ0aWNlcztcblxuICAgIHZhciBsZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGgvMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgIGZvciAodmFyIGk9MTsgaSA8IGxlbmd0aC0yOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpKjI7XG5cbiAgICAgICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXhdLCAgIHgxID0gdmVydGljZXNbaW5kZXgrMl0sIHgyID0gdmVydGljZXNbaW5kZXgrNF07XG4gICAgICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4KzFdLCB5MSA9IHZlcnRpY2VzW2luZGV4KzNdLCB5MiA9IHZlcnRpY2VzW2luZGV4KzVdO1xuXG4gICAgICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgyLCB5Mik7XG4gICAgfVxuXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnI0ZGMDAwMCc7XG4gICAgY29udGV4dC5maWxsKCk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbn07XG5cbi8qKlxuICogV2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLCB0aGlzIGV2ZW50IHdpbGwgZmlyZSB0byB1cGRhdGUgdGhlIHNjYWxlIGFuZCBmcmFtZVxuICpcbiAqIEBwYXJhbSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51cGRhdGVGcmFtZSA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgbWVzaCBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAoIXRoaXMuX2N1cnJlbnRCb3VuZHMpIHtcbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gbWF0cml4IHx8IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICAgICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSB2ZXJ0aWNlcy5sZW5ndGg7IGkgPCBuOyBpICs9IDIpIHtcbiAgICAgICAgICAgIHZhciByYXdYID0gdmVydGljZXNbaV0sIHJhd1kgPSB2ZXJ0aWNlc1tpICsgMV07XG4gICAgICAgICAgICB2YXIgeCA9IChhICogcmF3WCkgKyAoYyAqIHJhd1kpICsgdHg7XG4gICAgICAgICAgICB2YXIgeSA9IChkICogcmF3WSkgKyAoYiAqIHJhd1gpICsgdHk7XG5cbiAgICAgICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG5cbiAgICAgICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuICAgICAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWluWCA9PT0gLUluZmluaXR5IHx8IG1heFkgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBtZXNoLiBXb3JrcyBvbmx5IGZvciBUUklBTkdMRV9NRVNIXG4gKlxuICogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuICovXG5NZXNoLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50ICkge1xuICAgIGlmICghdGhpcy5nZXRCb3VuZHMoKS5jb250YWlucyhwb2ludC54LCBwb2ludC55KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHBvaW50cyA9IHRlbXBQb2x5Z29uLnBvaW50cztcbiAgICB2YXIgaSwgbGVuO1xuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVMpIHtcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgICAgIGxlbiA9IHRoaXMuaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgIC8vVE9ETzogaW5saW5lIHRoaXMuXG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTMpIHtcbiAgICAgICAgICAgIHZhciBpbmQwID0gaW5kaWNlc1tpXSoyLCBpbmQxID0gaW5kaWNlc1tpKzFdKjIsIGluZDIgPSBpbmRpY2VzW2krMl0qMjtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2luZDBdO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaW5kMCsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2luZDFdO1xuICAgICAgICAgICAgcG9pbnRzWzNdID0gdmVydGljZXNbaW5kMSsxXTtcbiAgICAgICAgICAgIHBvaW50c1s0XSA9IHZlcnRpY2VzW2luZDJdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaW5kMisxXTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBsZW4gPSB2ZXJ0aWNlcy5sZW5ndGg7XG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTYpIHtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2ldO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaSsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2krMl07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpKzNdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaSs0XTtcbiAgICAgICAgICAgIHBvaW50c1s1XSA9IHZlcnRpY2VzW2krNV07XG4gICAgICAgICAgICBpZiAodGVtcFBvbHlnb24uY29udGFpbnModGVtcFBvaW50LngsIHRlbXBQb2ludC55KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGlmZmVyZW50IGRyYXdpbmcgYnVmZmVyIG1vZGVzIHN1cHBvcnRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX01FU0hcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFU1xuICovXG5NZXNoLkRSQVdfTU9ERVMgPSB7XG4gICAgVFJJQU5HTEVfTUVTSDogMCxcbiAgICBUUklBTkdMRVM6IDFcbn07XG4iLCJ2YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xuXG4vKipcbiAqIFRoZSBQbGFuZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciBQbGFuZSA9IG5ldyBQSVhJLlBsYW5lKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIFBsYW5lLlxuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWCAtIFRoZSBudW1iZXIgb3ggeCBzZWdtZW50c1xuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWSAtIFRoZSBudW1iZXIgb2YgeSBzZWdtZW50c1xuICpcbiAqL1xuZnVuY3Rpb24gUGxhbmUodGV4dHVyZSwgc2VnbWVudHNYLCBzZWdtZW50c1kpXG57XG4gICAgTWVzaC5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tlciBmb3IgaWYgdGhlIFBsYW5lIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuc2VnbWVudHNYID0gIHNlZ21lbnRzWCB8fCAxMDtcbiAgICB0aGlzLnNlZ21lbnRzWSA9IHNlZ21lbnRzWSB8fCAxMDtcblxuICAgIHRoaXMuZHJhd01vZGUgPSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVTO1xuICAgIHRoaXMucmVmcmVzaCgpO1xuXG59XG5cblxuLy8gY29uc3RydWN0b3JcblBsYW5lLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIE1lc2gucHJvdG90eXBlICk7XG5QbGFuZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQbGFuZTtcbm1vZHVsZS5leHBvcnRzID0gUGxhbmU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5QbGFuZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgdG90YWwgPSB0aGlzLnNlZ21lbnRzWCAqIHRoaXMuc2VnbWVudHNZO1xuICAgIHZhciB2ZXJ0cyA9IFtdO1xuICAgIHZhciBjb2xvcnMgPSBbXTtcbiAgICB2YXIgdXZzID0gW107XG4gICAgdmFyIGluZGljZXMgPSBbXTtcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMudGV4dHVyZTtcblxuICAvLyAgdGV4dHVyZS53aWR0aCA9IDgwMCB0ZXh0dXJlLndpZHRoIHx8IDgwMDtcbiAvLyAgIHRleHR1cmUuaGVpZ2h0ID0gODAwLy90ZXh0dXJlLmhlaWdodCB8fCA4MDA7XG5cbiAgICB2YXIgc2VnbWVudHNYU3ViID0gdGhpcy5zZWdtZW50c1ggLSAxO1xuICAgIHZhciBzZWdtZW50c1lTdWIgPSB0aGlzLnNlZ21lbnRzWSAtIDE7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgdmFyIHNpemVYID0gdGV4dHVyZS53aWR0aCAvIHNlZ21lbnRzWFN1YjtcbiAgICB2YXIgc2l6ZVkgPSB0ZXh0dXJlLmhlaWdodCAvIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbDsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHggPSAoaSAlIHRoaXMuc2VnbWVudHNYKTtcbiAgICAgICAgdmFyIHkgPSAoIChpIC8gdGhpcy5zZWdtZW50c1ggKSB8IDAgKTtcblxuXG4gICAgICAgIHZlcnRzLnB1c2goKHggKiBzaXplWCksXG4gICAgICAgICAgICAgICAgICAgKHkgKiBzaXplWSkpO1xuXG4gICAgICAgIC8vIHRoaXMgd29ya3MgZm9yIHJlY3Rhbmd1bGFyIHRleHR1cmVzLiBcbiAgICAgICAgdXZzLnB1c2godGV4dHVyZS5fdXZzLngwICsgKHRleHR1cmUuX3V2cy54MSAtIHRleHR1cmUuX3V2cy54MCkgKiAoeCAvICh0aGlzLnNlZ21lbnRzWC0xKSksIHRleHR1cmUuX3V2cy55MCArICh0ZXh0dXJlLl91dnMueTMtdGV4dHVyZS5fdXZzLnkwKSAqICh5LyAodGhpcy5zZWdtZW50c1ktMSkpKTtcbiAgICAgIH1cblxuICAgIC8vICBjb25zXG5cbiAgICB2YXIgdG90YWxTdWIgPSBzZWdtZW50c1hTdWIgKiBzZWdtZW50c1lTdWI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTdWI7IGkrKykge1xuXG4gICAgICAgIHZhciB4cG9zID0gaSAlIHNlZ21lbnRzWFN1YjtcbiAgICAgICAgdmFyIHlwb3MgPSAoaSAvIHNlZ21lbnRzWFN1YiApIHwgMDtcblxuXG4gICAgICAgIHZhciAgdmFsdWUgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWUyID0gKHlwb3MgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zICsgMTtcbiAgICAgICAgdmFyICB2YWx1ZTMgPSAoKHlwb3MrMSkgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zO1xuICAgICAgICB2YXIgIHZhbHVlNCA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuXG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZSwgdmFsdWUyLCB2YWx1ZTMpO1xuICAgICAgICBpbmRpY2VzLnB1c2godmFsdWUyLCB2YWx1ZTQsIHZhbHVlMyk7XG4gICAgfVxuXG5cbiAgICAvL2NvbnNvbGUubG9nKGluZGljZXMpXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkodmVydHMpO1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheSh1dnMpO1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShjb2xvcnMpO1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShpbmRpY2VzKTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGV4dHVyZSBVVnMgd2hlbiBuZXcgdGV4dHVyZSBpcyBzZXRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QbGFuZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFBsYW5lIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBUaGUgcm9wZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciByb3BlID0gbmV3IFBJWEkuUm9wZShQSVhJLlRleHR1cmUuZnJvbUltYWdlKFwic25ha2UucG5nXCIpLCBwb2ludHMpO1xuICogIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5tZXNoLk1lc2hcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB7UElYSS5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIHRleHR1cmUgdG8gdXNlIG9uIHRoZSByb3BlLlxuICogQHBhcmFtIHtQSVhJLlBvaW50W119IHBvaW50cyAtIEFuIGFycmF5IG9mIHtAbGluayBQSVhJLlBvaW50fSBvYmplY3RzIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gKlxuICovXG5mdW5jdGlvbiBSb3BlKHRleHR1cmUsIHBvaW50cylcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnRbXX0gQW4gYXJyYXkgb2YgcG9pbnRzIHRoYXQgZGV0ZXJtaW5lIHRoZSByb3BlXG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgb2YgdmVydGljZXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhpcyByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBUaGUgV2ViR0wgVXZzIG9mIHRoZSByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogNCk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgY29sb3IgY29tcG9uZW50c1xuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgcm9wZSBpcyByZWFkeSB0byBiZSBkcmF3bi4gTmVlZGVkIGJlY2F1c2UgTWVzaCBjdG9yIGNhblxuICAgICAqIGNhbGwgX29uVGV4dHVyZVVwZGF0ZWQgd2hpY2ggY291bGQgY2FsbCByZWZyZXNoIHRvbyBlYXJseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgIHRoaXMucmVmcmVzaCgpO1xufVxuXG5cbi8vIGNvbnN0cnVjdG9yXG5Sb3BlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTWVzaC5wcm90b3R5cGUpO1xuUm9wZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3BlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3BlO1xuXG4vKipcbiAqIFJlZnJlc2hlc1xuICpcbiAqL1xuUm9wZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgLy8gaWYgdG9vIGxpdHRsZSBwb2ludHMsIG9yIHRleHR1cmUgaGFzbid0IGdvdCBVVnMgc2V0IHlldCBqdXN0IG1vdmUgb24uXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxIHx8ICF0aGlzLl90ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuXG4gICAgdmFyIHRleHR1cmVVdnMgPSB0aGlzLl90ZXh0dXJlLl91dnM7XG4gICAgdmFyIG9mZnNldCA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDAsIHRleHR1cmVVdnMueTApO1xuICAgIHZhciBmYWN0b3IgPSBuZXcgY29yZS5Qb2ludCh0ZXh0dXJlVXZzLngyIC0gdGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MiAtIHRleHR1cmVVdnMueTApO1xuXG4gICAgdXZzWzBdID0gMCArIG9mZnNldC54O1xuICAgIHV2c1sxXSA9IDAgKyBvZmZzZXQueTtcbiAgICB1dnNbMl0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICBjb2xvcnNbMF0gPSAxO1xuICAgIGNvbG9yc1sxXSA9IDE7XG5cbiAgICBpbmRpY2VzWzBdID0gMDtcbiAgICBpbmRpY2VzWzFdID0gMTtcblxuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgYW1vdW50O1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG4gICAgICAgIC8vIHRpbWUgdG8gZG8gc29tZSBzbWFydCBkcmF3aW5nIVxuICAgICAgICBhbW91bnQgPSBpIC8gKHRvdGFsLTEpO1xuXG4gICAgICAgIHV2c1tpbmRleF0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrMV0gPSAwICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgdXZzW2luZGV4KzJdID0gYW1vdW50ICogZmFjdG9yLnggKyBvZmZzZXQueDtcbiAgICAgICAgdXZzW2luZGV4KzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgY29sb3JzW2luZGV4XSA9IDE7XG4gICAgICAgIGNvbG9yc1tpbmRleCsxXSA9IDE7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgaW5kaWNlc1tpbmRleF0gPSBpbmRleDtcbiAgICAgICAgaW5kaWNlc1tpbmRleCArIDFdID0gaW5kZXggKyAxO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIE1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUuY2FsbCh0aGlzKTtcblxuICAgIC8vIHdhaXQgZm9yIHRoZSBSb3BlIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Sb3BlLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbGFzdFBvaW50ID0gcG9pbnRzWzBdO1xuICAgIHZhciBuZXh0UG9pbnQ7XG4gICAgdmFyIHBlcnBYID0gMDtcbiAgICB2YXIgcGVycFkgPSAwO1xuXG4gICAgLy8gdGhpcy5jb3VudCAtPSAwLjI7XG5cbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgcmF0aW8sIHBlcnBMZW5ndGgsIG51bTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWw7IGkrKylcbiAgICB7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBpbmRleCA9IGkgKiA0O1xuXG4gICAgICAgIGlmIChpIDwgcG9pbnRzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0UG9pbnQgPSBwb2ludHNbaSsxXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcGVycFkgPSAtKG5leHRQb2ludC54IC0gbGFzdFBvaW50LngpO1xuICAgICAgICBwZXJwWCA9IG5leHRQb2ludC55IC0gbGFzdFBvaW50Lnk7XG5cbiAgICAgICAgcmF0aW8gPSAoMSAtIChpIC8gKHRvdGFsLTEpKSkgKiAxMDtcblxuICAgICAgICBpZiAocmF0aW8gPiAxKVxuICAgICAgICB7XG4gICAgICAgICAgICByYXRpbyA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwTGVuZ3RoID0gTWF0aC5zcXJ0KHBlcnBYICogcGVycFggKyBwZXJwWSAqIHBlcnBZKTtcbiAgICAgICAgbnVtID0gdGhpcy5fdGV4dHVyZS5oZWlnaHQgLyAyOyAvLygyMCArIE1hdGguYWJzKE1hdGguc2luKChpICsgdGhpcy5jb3VudCkgKiAwLjMpICogNTApICkqIHJhdGlvO1xuICAgICAgICBwZXJwWCAvPSBwZXJwTGVuZ3RoO1xuICAgICAgICBwZXJwWSAvPSBwZXJwTGVuZ3RoO1xuXG4gICAgICAgIHBlcnBYICo9IG51bTtcbiAgICAgICAgcGVycFkgKj0gbnVtO1xuXG4gICAgICAgIHZlcnRpY2VzW2luZGV4XSA9IHBvaW50LnggKyBwZXJwWDtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMV0gPSBwb2ludC55ICsgcGVycFk7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzJdID0gcG9pbnQueCAtIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCszXSA9IHBvaW50LnkgLSBwZXJwWTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBwb2ludDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkubWVzaFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNZXNoOiAgICAgICAgICAgcmVxdWlyZSgnLi9NZXNoJyksXG4gICAgUGxhbmU6ICAgICAgICAgICByZXF1aXJlKCcuL1BsYW5lJyksXG4gICAgUm9wZTogICAgICAgICAgIHJlcXVpcmUoJy4vUm9wZScpLFxuICAgIE1lc2hSZW5kZXJlcjogICByZXF1aXJlKCcuL3dlYmdsL01lc2hSZW5kZXJlcicpLFxuICAgIE1lc2hTaGFkZXI6ICAgICByZXF1aXJlKCcuL3dlYmdsL01lc2hTaGFkZXInKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIE1lc2ggPSByZXF1aXJlKCcuLi9NZXNoJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgTWVzaFJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9NZXNoUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgY29yZS5PYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIFxuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSgxNTAwMCk7XG5cbiAgICAvL1RPRE8gdGhpcyBjb3VsZCBiZSBhIHNpbmdsZSBidWZmZXIgc2hhcmVkIGFtb25nc3QgYWxsIHJlbmRlcmVycyBhcyB3ZSByZXVzZSB0aGlzIHNldCB1cCBpbiBtb3N0IHJlbmRlcmVyc1xuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgMTUwMDA7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufVxuXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoUmVuZGVyZXI7XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignbWVzaCcsIE1lc2hSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIG1lc2gge1BJWEkubWVzaC5NZXNofSB0aGUgbWVzaCB0byByZW5kZXJcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICBpZighbWVzaC5fdmVydGV4QnVmZmVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5faW5pdFdlYkdMKG1lc2gpO1xuICAgIH1cblxuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXIsXG4gICAgICAgIGdsID0gcmVuZGVyZXIuZ2wsXG4gICAgICAgIHRleHR1cmUgPSBtZXNoLl90ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBzaGFkZXIgPSBtZXNoLnNoYWRlcjsvLyB8fCByZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnBsdWdpbnMubWVzaFNoYWRlcjtcblxuICAgIHZhciBkcmF3TW9kZSA9IG1lc2guZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIID8gZ2wuVFJJQU5HTEVfU1RSSVAgOiBnbC5UUklBTkdMRVM7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShtZXNoLmJsZW5kTW9kZSk7XG5cbiAgICAvL1RPRE8gY2FjaGUgY3VzdG9tIHN0YXRlLi5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzaGFkZXIgPSBzaGFkZXIuc2hhZGVyc1tnbC5pZF0gfHwgc2hhZGVyLmdldFNoYWRlcihyZW5kZXJlcik7Ly8gOiBzaGFkZXI7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4LnZhbHVlID0gbWVzaC53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gbWVzaC53b3JsZEFscGhhO1xuXG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuXG4gICAgaWYgKCFtZXNoLmRpcnR5KVxuICAgIHtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIG1lc2gudmVydGljZXMpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIHV2c1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cblxuICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCAwLCBtZXNoLmluZGljZXMpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIG1lc2guZGlydHkgPSBmYWxzZTtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZG9udCBuZWVkIHRvIHVwbG9hZCFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIH1cblxuICAgIGdsLmRyYXdFbGVtZW50cyhkcmF3TW9kZSwgbWVzaC5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuXG59O1xuXG4vKipcbiAqIFByZXBhcmVzIGFsbCB0aGUgYnVmZmVycyB0byByZW5kZXIgdGhpcyBtZXNoXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLl9pbml0V2ViR0wgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICAvLyBidWlsZCB0aGUgc3RyaXAhXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIG1lc2guX3ZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIG1lc2guX2luZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5fdXZCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC52ZXJ0aWNlcywgZ2wuRFlOQU1JQ19EUkFXKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgaWYobWVzaC5jb2xvcnMpe1xuICAgICAgICBtZXNoLl9jb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fY29sb3JCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5jb2xvcnMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG59O1xuXG5cbi8qKlxuICogRW1wdGllcyB0aGUgY3VycmVudCBiYXRjaC5cbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBtZXNoIHJlbmRlcmVyLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgXG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgTWVzaCByZW5kZXJlclxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIFdlYkdMIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gTWVzaFNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIGNvcmUuU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIGFscGhhIDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYVRleHR1cmVDb29yZDowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5NZXNoU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TaGFkZXIucHJvdG90eXBlKTtcbk1lc2hTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gTWVzaFNoYWRlcjtcblxuY29yZS5TaGFkZXJNYW5hZ2VyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoU2hhZGVyJywgTWVzaFNoYWRlcik7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9zaWduXG5cbmlmICghTWF0aC5zaWduKVxue1xuICAgIE1hdGguc2lnbiA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHggPSAreDtcbiAgICAgICAgaWYgKHggPT09IDAgfHwgaXNOYU4oeCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4ID4gMCA/IDEgOiAtMTtcbiAgICB9O1xufVxuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvb2JqZWN0LWFzc2lnblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnblxuXG5pZiAoIU9iamVjdC5hc3NpZ24pXG57XG4gICAgT2JqZWN0LmFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcbn1cbiIsInJlcXVpcmUoJy4vT2JqZWN0LmFzc2lnbicpO1xucmVxdWlyZSgnLi9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUnKTtcbnJlcXVpcmUoJy4vTWF0aC5zaWduJyk7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cDovL3BhdWxpcmlzaC5jb20vMjAxMS9yZXF1ZXN0YW5pbWF0aW9uZnJhbWUtZm9yLXNtYXJ0LWFuaW1hdGluZy9cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzE1Nzk2NzFcbi8vIGh0dHA6Ly91cGRhdGVzLmh0bWw1cm9ja3MuY29tLzIwMTIvMDUvcmVxdWVzdEFuaW1hdGlvbkZyYW1lLUFQSS1ub3ctd2l0aC1zdWItbWlsbGlzZWNvbmQtcHJlY2lzaW9uXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90aW1oYWxsLzQwNzg2MTRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9GaW5hbmNpYWwtVGltZXMvcG9seWZpbGwtc2VydmljZS90cmVlL21hc3Rlci9wb2x5ZmlsbHMvcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG5cbi8vIEV4cGVjdGVkIHRvIGJlIHVzZWQgd2l0aCBCcm93c2VyZml5XG4vLyBCcm93c2VyaWZ5IGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB0aGUgdXNlIG9mIGBnbG9iYWxgIGFuZCBwYXNzZXMgdGhlXG4vLyBjb3JyZWN0IHJlZmVyZW5jZSBvZiBgZ2xvYmFsYCwgYHNlbGZgLCBhbmQgZmluYWxseSBgd2luZG93YFxuXG4vLyBEYXRlLm5vd1xuaWYgKCEoRGF0ZS5ub3cgJiYgRGF0ZS5wcm90b3R5cGUuZ2V0VGltZSkpIHtcbiAgICBEYXRlLm5vdyA9IGZ1bmN0aW9uIG5vdygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIH07XG59XG5cbi8vIHBlcmZvcm1hbmNlLm5vd1xuaWYgKCEoZ2xvYmFsLnBlcmZvcm1hbmNlICYmIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cpKSB7XG4gICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgaWYgKCFnbG9iYWwucGVyZm9ybWFuY2UpIHtcbiAgICAgICAgZ2xvYmFsLnBlcmZvcm1hbmNlID0ge307XG4gICAgfVxuICAgIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIH07XG59XG5cbi8vIHJlcXVlc3RBbmltYXRpb25GcmFtZVxudmFyIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbnZhciB2ZW5kb3JzID0gWydtcycsICdtb3onLCAnd2Via2l0JywgJ28nXTtcblxuZm9yKHZhciB4ID0gMDsgeCA8IHZlbmRvcnMubGVuZ3RoICYmICFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lOyArK3gpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnQ2FuY2VsQW5pbWF0aW9uRnJhbWUnXSB8fFxuICAgICAgICBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbn1cblxuaWYgKCFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZGVsYXkgPSAxNiArIGxhc3RUaW1lIC0gY3VycmVudFRpbWU7XG5cbiAgICAgICAgaWYgKGRlbGF5IDwgMCkge1xuICAgICAgICAgICAgZGVsYXkgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFRpbWUgPSBjdXJyZW50VGltZTtcblxuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsYXN0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBjYWxsYmFjayhwZXJmb3JtYW5jZS5ub3coKSk7XG4gICAgICAgIH0sIGRlbGF5KTtcbiAgICB9O1xufVxuXG5pZiAoIWdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSkge1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgfTtcbn1cbiJdfQ== +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L09ic2VydmFibGVQb2ludC5qcyIsInNyYy9jb3JlL2Rpc3BsYXkvVHJhbnNmb3JtU3RhdGljLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3MuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9HcmFwaGljc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvV2ViR0xHcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ2lyY2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRDb21wbGV4UG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkTGluZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL01hdHJpeC5qcyIsInNyYy9jb3JlL21hdGgvUG9pbnQuanMiLCJzcmMvY29yZS9tYXRoL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvQ2lyY2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvRWxsaXBzZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1BvbHlnb24uanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9SZWN0YW5nbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlQnVmZmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvU3lzdGVtUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNNYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1RleHR1cmVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9NYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUXVhZC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvU3RlbmNpbE1hc2tTdGFjay5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9zcHJpdGVzL1Nwcml0ZS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvdGV4dC9UZXh0LmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9CYXNlVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1JlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9UZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZVV2cy5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90aWNrZXIvVGlja2VyLmpzIiwic3JjL2NvcmUvdGlja2VyL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzLmpzIiwic3JjL2NvcmUvdXRpbHMvaW5kZXguanMiLCJzcmMvY29yZS91dGlscy9wbHVnaW5UYXJnZXQuanMiLCJzcmMvZGVwcmVjYXRpb24uanMiLCJzcmMvZXh0cmFzL0JpdG1hcFRleHQuanMiLCJzcmMvZXh0cmFzL01vdmllQ2xpcC5qcyIsInNyYy9leHRyYXMvVGlsaW5nU3ByaXRlLmpzIiwic3JjL2V4dHJhcy9jYWNoZUFzQml0bWFwLmpzIiwic3JjL2V4dHJhcy9nZXRDaGlsZEJ5TmFtZS5qcyIsInNyYy9leHRyYXMvZ2V0R2xvYmFsUG9zaXRpb24uanMiLCJzcmMvZXh0cmFzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvYXNjaWkvQXNjaWlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibG9vbS9CbG9vbUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckRpckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1clhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9TbWFydEJsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvck1hdHJpeEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbG9yL0NvbG9yU3RlcEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2RvdC9Eb3RTY3JlZW5GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0JsdXJZVGludEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2dyYXkvR3JheUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvaW52ZXJ0L0ludmVydEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL25vaXNlL05vaXNlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9yZ2IvUkdCU3BsaXRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zZXBpYS9TZXBpYUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0QXhpc0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdHdpc3QvVHdpc3RGaWx0ZXIuanMiLCJzcmMvc3JjL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL0ludGVyYWN0aW9uRGF0YS5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbk1hbmFnZXIuanMiLCJzcmMvaW50ZXJhY3Rpb24vaW5kZXguanMiLCJzcmMvaW50ZXJhY3Rpb24vaW50ZXJhY3RpdmVUYXJnZXQuanMiLCJzcmMvbG9hZGVycy9iaXRtYXBGb250UGFyc2VyLmpzIiwic3JjL2xvYWRlcnMvaW5kZXguanMiLCJzcmMvbG9hZGVycy9sb2FkZXIuanMiLCJzcmMvbG9hZGVycy9zcHJpdGVzaGVldFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL3RleHR1cmVQYXJzZXIuanMiLCJzcmMvbWVzaC9NZXNoLmpzIiwic3JjL21lc2gvUGxhbmUuanMiLCJzcmMvbWVzaC9Sb3BlLmpzIiwic3JjL21lc2gvaW5kZXguanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoUmVuZGVyZXIuanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoU2hhZGVyLmpzIiwic3JjL3BvbHlmaWxsL01hdGguc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9PYmplY3QuYXNzaWduLmpzIiwic3JjL3BvbHlmaWxsL2luZGV4LmpzIiwic3JjL3BvbHlmaWxsL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzV1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNyaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbm1DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Y0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2h5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNWxCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM21CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25iQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICBjcmVhdGVDb250ZXh0OiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9jcmVhdGVDb250ZXh0JyksXG4gICAgc2V0VmVydGV4QXR0cmliQXJyYXlzOiBcdHJlcXVpcmUoJy4vbGliL3NldFZlcnRleEF0dHJpYkFycmF5cycpLFxuICAgIFxuICAgIEdMQnVmZmVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMQnVmZmVyJyksXG4gICAgR0xGcmFtZWJ1ZmZlcjogXHRcdFx0cmVxdWlyZSgnLi9saWIvR0xGcmFtZWJ1ZmZlcicpLFxuICAgIEdMU2hhZGVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMU2hhZGVyJyksXG4gICAgR0xUZXh0dXJlOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMVGV4dHVyZScpLFxuICAgIFxuICAgIFZlcnRleEFycmF5T2JqZWN0OiBcdFx0cmVxdWlyZSgnLi9saWIvVmVydGV4QXJyYXlPYmplY3QnKVxuXG59OyIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEVNUFRZX0FSUkFZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcblxudmFyIEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuQVJSQVlfQlVGRkVSO1xuXHR0aGlzLmRyYXdUeXBlID0gZHJhd1R5cGUgfHwgZ2wuU1RBVElDX0RSQVc7XG5cdHRoaXMuZGF0YSA9IEVNUFRZX0FSUkFZX0JVRkZFUjtcblxuXHRpZihkYXRhKVxuXHR7XG5cdFx0dGhpcy51cGxvYWQoZGF0YSk7XG5cdH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihkYXRhLCBvZmZzZXQsIGRvbnRCaW5kKVxue1xuXHQvLyB0b2RvIC0gbmVlZGVkP1xuXHQvL2lmKCFkb250QmluZClcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblx0XG5cdGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcblx0b2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cblx0aWYodGhpcy5kYXRhLmJ5dGVMZW5ndGggPj0gZGF0YS5ieXRlTGVuZ3RoKVxuXHR7XHRcblx0XHRnbC5idWZmZXJTdWJEYXRhKHRoaXMudHlwZSwgb2Zmc2V0LCBkYXRhKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC5idWZmZXJEYXRhKHRoaXMudHlwZSwgZGF0YSwgdGhpcy5kcmF3VHlwZSk7XG5cdH1cblxuXHR0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRCdWZmZXIodGhpcy50eXBlLCB0aGlzLmJ1ZmZlcik7XG59XG5cbkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24oZ2wsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZSA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIHR5cGUsIGRyYXdUeXBlKTtcbn1cblxuLy9UT0RPIERlc3Ryb3kuLlxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcjtcblxuIiwiXG52YXIgVGV4dHVyZSA9IHJlcXVpcmUoJy4vR0xUZXh0dXJlJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIEZyYW1lYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEZyYW1lYnVmZmVyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblx0XG5cdHRoaXMuc3RlbmNpbCA9IG51bGw7XG5cdHRoaXMudGV4dHVyZSA9IG51bGw7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlVGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBuZXcgVGV4dHVyZShnbCk7XG5cblx0dGhpcy50ZXh0dXJlLmJpbmQoKTtcblxuXHQvL2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZS50ZXh0dXJlLCAwKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmVuYWJsZVN0ZW5jaWwgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuc3RlbmNpbClyZXR1cm47XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnN0ZW5jaWwgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcbiAgICBcbiAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBcbiAgICAvLyBUT0RPLi4gdGhpcyBpcyBkZXB0aCBBTkQgc3RlbmNpbD9cbiAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsICB0aGlzLndpZHRoICAsIHRoaXMuaGVpZ2h0ICk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCByLCBnLCBiLCBhIClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICBnbC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpO1xuICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLmZyYW1lYnVmZmVyICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuXHRpZiAoIHRoaXMudGV4dHVyZSApXG4gICAge1xuICAgIFx0dGhpcy50ZXh0dXJlLnVwbG9hZERhdGEobnVsbCwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRpZiAoIHRoaXMuc3RlbmNpbCApXG4gICAge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0ZW5jaWwgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0dmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21EYXRhKGdsLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0dGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgZmJvLnVuYmluZCgpO1xuICAgIFxuICAgIHJldHVybiBmYm87XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZUZsb2F0MzIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0Ly8gY3JlYXRlIGEgbmV3IHRleHR1cmUuLlxuICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUuZnJvbURhdGEoZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuICAgIHRleHR1cmUuZW5hYmxlTmVhcmVzdFNjYWxpbmcoKTtcbiAgICB0ZXh0dXJlLmVuYWJsZVdyYXBDbGFtcCgpO1xuXG4gICAgLy9ub3cgY3JlYXRlIHRoZSBmcmFtZWJ1ZmZlciBvYmplY3QgYW5kIGF0dGFjaCB0aGUgdGV4dHVyZSB0byBpdC5cbiAgICB2YXIgZmJvID0gbmV3IEZyYW1lYnVmZmVyKGdsLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICBmYm8uZW5hYmxlVGV4dHVyZSh0ZXh0dXJlKVxuXG4gICAgZmJvLnVuYmluZCgpO1xuXG4gICAgcmV0dXJuIGZibztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGcmFtZWJ1ZmZlcjtcblxuIiwiXG52YXIgY29tcGlsZVByb2dyYW0gPSByZXF1aXJlKCcuL3NoYWRlci9jb21waWxlUHJvZ3JhbScpLFxuXHRleHRyYWN0QXR0cmlidXRlcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RBdHRyaWJ1dGVzJyksXG5cdGV4dHJhY3RVbmlmb3JtcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RVbmlmb3JtcycpLFxuXHRnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QgPSByZXF1aXJlKCcuL3NoYWRlci9nZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgU2hhZGVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cbnZhciBTaGFkZXIgPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIEZpcnN0IGNvbXBpbGUgdGhlIHByb2dyYW0uLlxuXHR0aGlzLnByb2dyYW0gPSBjb21waWxlUHJvZ3JhbShnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7XG5cblx0Ly8gbmV4dCBleHRyYWN0IHRoZSBhdHRyaWJ1dGVzXG5cdHRoaXMuYXR0cmlidXRlcyA9IGV4dHJhY3RBdHRyaWJ1dGVzKGdsLCB0aGlzLnByb2dyYW0pOyBcblxuICAgIHZhciB1bmlmb3JtRGF0YSA9IGV4dHJhY3RVbmlmb3JtcyhnbCwgdGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMudW5pZm9ybXMgPSBnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QoIGdsLCB1bmlmb3JtRGF0YSApO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4iLCJcbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gYSBXZWJHTCBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGZvcm1hdCB7bnVtYmVyfSB0aGUgcGl4ZWwgZm9ybWF0IG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5SR0JBXG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSB0aGUgZ2wgdHlwZSBvZiB0aGUgdGV4dHVyZS4gZGVmYXVsdHMgdG8gZ2wuVU5TSUdORURfQllURVxuICovXG52YXIgVGV4dHVyZSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLnRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cblx0Ly8gc29tZSBzZXR0aW5ncy4uXG5cdHRoaXMubWlwbWFwID0gZmFsc2U7XG5cblx0dGhpcy5wcmVtdWx0aXBseUFscGhhID0gZmFsc2U7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cblx0dGhpcy5mb3JtYXQgPSBmb3JtYXQgfHwgZ2wuUkdCQTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5VTlNJR05FRF9CWVRFO1xuXG5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge1BJWEkuZ2xDb3JlLlRleHR1cmV9IFt2YXJuYW1lXSBbZGVzY3JpcHRpb25dXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKHNvdXJjZSlcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gc291cmNlLndpZHRoO1xuXHR0aGlzLmhlaWdodCA9IHNvdXJjZS5oZWlnaHQ7XG5cblx0Z2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xuICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMuZm9ybWF0LCB0aGlzLnR5cGUsIHNvdXJjZSk7XG59XG5cbnZhciBGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSBmYWxzZTtcblxuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkRGF0YSA9IGZ1bmN0aW9uKGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuYmluZCgpO1xuXHRcblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IHRoaXMud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IHRoaXMuaGVpZ2h0O1xuXG5cdGlmKGRhdGEgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpXG5cdHtcblx0XHRpZighRkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFKVxuXHRcdHtcblx0XHRcdHZhciBleHQgPSBnbC5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9mbG9hdFwiKTtcblx0XHRcdFxuXHRcdFx0aWYoZXh0KVxuXHRcdFx0e1xuXHRcdFx0XHRGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2Zsb2F0aW5nIHBvaW50IHRleHR1cmVzIG5vdCBhdmFpbGFibGUnKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnR5cGUgPSBnbC5GTE9BVDtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHQvLyBUT0RPIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzXG5cdFx0dGhpcy50eXBlID0gZ2wuVU5TSUdORURfQllURTtcblx0fVxuXG5cdC8vIHdoYXQgdHlwZSBvZiBkYXRhP1xuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG5cdGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsICB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgZGF0YSB8fCBudWxsKTtcblxufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24obG9jYXRpb24pXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0aWYobG9jYXRpb24gIT09IHVuZGVmaW5lZClcblx0e1xuXHRcdGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbik7XG5cdH1cblxuXHRnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0aGlzLnRleHR1cmUpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIG51bGwpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5taW5GaWx0ZXIgPSBmdW5jdGlvbiggbGluZWFyIClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRpZih0aGlzLm1pcG1hcClcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVJfTUlQTUFQX0xJTkVBUiA6IGdsLk5FQVJFU1RfTUlQTUFQX05FQVJFU1QpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcblx0fVx0XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1hZ0ZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTWlwbWFwID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR0aGlzLm1pcG1hcCA9IHRydWU7XG5cdGdsLmdlbmVyYXRlTWlwbWFwKGdsLlRFWFRVUkVfMkQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVMaW5lYXJTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcih0cnVlKTtcblx0dGhpcy5tYWdGaWx0ZXIodHJ1ZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZU5lYXJlc3RTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcihmYWxzZSk7XG5cdHRoaXMubWFnRmlsdGVyKGZhbHNlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlV3JhcENsYW1wID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwUmVwZWF0ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXHRcblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuUkVQRUFUKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5SRVBFQVQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlVGV4dHVyZSh0aGlzLnRleHR1cmUpO1xufVxuXG4vL1RleHR1cmUuXG5UZXh0dXJlLmZyb21Tb3VyY2UgPSBmdW5jdGlvbihnbCwgc291cmNlLCBwcmVtdWx0aXBseUFscGhhKVxue1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS5wcmVtdWx0aXBseUFscGhhID0gcHJlbXVsdGlwbHlBbHBoYSB8fCBmYWxzZTtcblx0dGV4dHVyZS51cGxvYWQoc291cmNlKTtcblxuXHRyZXR1cm4gdGV4dHVyZTtcbn1cblxuVGV4dHVyZS5mcm9tRGF0YSA9IGZ1bmN0aW9uKGdsLCBkYXRhLCB3aWR0aCwgaGVpZ2h0KVxue1xuXHQvL2NvbnNvbGUubG9nKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS51cGxvYWREYXRhKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZTtcblxuIiwiXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbi8vIHN0YXRlIG9iamVjdC8vXG5cblxuZnVuY3Rpb24gVmVydGV4QXJyYXlPYmplY3QoZ2wpXG57XG5cdFxuXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IChcbiAgICAgIGdsLmdldEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKVxuICAgICk7XG5cbi8vXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IG51bGw7XG5cblx0aWYodGhpcy5uYXRpdmVWYW9FeHRlbnNpb24pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhbyA9IHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7ICBcblx0fVxuXG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcblxuXHR0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuXHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cblx0XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZlcnRleEFycmF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBWZXJ0ZXhBcnJheU9iamVjdDtcblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKHRoaXMubmF0aXZlVmFvKTsgIFxuXG5cdFx0aWYodGhpcy5kaXJ0eSlcblx0XHR7XG5cdFx0XHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cdFx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdFx0fVxuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLm5hdGl2ZVZhbylcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIFxuXHR7XG5cdFx0dmFyIGF0dHJpYiA9IHRoaXMuYXR0cmlidXRlc1tpXTtcblx0XHRhdHRyaWIuYnVmZmVyLmJpbmQoKTtcdFxuXG5cdFx0YXR0cmliLmF0dHJpYnV0ZS5wb2ludGVyKGF0dHJpYi50eXBlLCBhdHRyaWIubm9ybWFsaXplZCwgYXR0cmliLnN0cmlkZSwgYXR0cmliLnN0YXJ0KTsgXG5cdFx0XG5cdFx0Z2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYXR0cmliLmF0dHJpYnV0ZS5sb2NhdGlvbik7XG5cdH07XG5cblx0dGhpcy5pbmRleEJ1ZmZlci5iaW5kKCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRBdHRyaWJ1dGUgPSBmdW5jdGlvbihidWZmZXIsIGF0dHJpYnV0ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydClcbntcbiAgICB0aGlzLmF0dHJpYnV0ZXMucHVzaCh7XG4gICAgXHRidWZmZXI6IFx0YnVmZmVyLFxuICAgIFx0YXR0cmlidXRlOiBcdGF0dHJpYnV0ZSxcblxuICAgIFx0bG9jYXRpb246IFx0YXR0cmlidXRlLmxvY2F0aW9uLFxuXHQgXHR0eXBlOiBcdFx0dHlwZSB8fCB0aGlzLmdsLkZMT0FULFxuXHQgXHRub3JtYWxpemVkOiBub3JtYWxpemVkIHx8IGZhbHNlLFxuXHQgXHRzdHJpZGU6IFx0c3RyaWRlIHx8IDAsXG5cdCBcdHN0YXJ0OiBcdFx0c3RhcnQgfHwgMFxuXHR9KVxuXG5cdHRoaXMuZGlydHkgPSB0cnVlO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRJbmRleCA9IGZ1bmN0aW9uKGJ1ZmZlciwgb3B0aW9ucylcbntcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gYnVmZmVyO1xuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBzdGFydClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuZHJhd0VsZW1lbnRzKHR5cGUsIHNpemUsIGdsLlVOU0lHTkVEX1NIT1JULCBzdGFydCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgQ29udGV4dFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG5cbnZhciBDT05URVhUX1VJRCA9IDA7XG5cbnZhciBjcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24oY2FudmFzLCBvcHRpb25zKVxue1xuICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgb3B0aW9ucykgfHwgXG4gICAgXHQgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFnbClcbiAgICB7XG4gICAgICAgIC8vIGZhaWwsIG5vdCBhYmxlIHRvIGdldCBhIGNvbnRleHRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB3ZWJHTC4gVHJ5IHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXInKTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCB3YW50IHRvIHBoYXNlIHRoaXMgb3V0P1xuICAgIGdsLmlkID0gQ09OVEVYVF9VSUQrKztcblxuICAgIHJldHVybiBnbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb250ZXh0O1xuXG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgc2V0VmVydGV4QXR0cmliQXJyYXlzID0gZnVuY3Rpb24gKGdsLCBhdHRyaWJzKVxue1x0XG4gICAvLyBjb25zb2xlLmxvZyhnbC5pZClcbiAgICB2YXIgZGF0YSA9IEdMX01BUFtnbC5pZF07XG5cbiAgICBpZighZGF0YSlcbiAgICB7XG5cdCAgIHZhciBtYXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cdFx0ZGF0YSA9IEdMX01BUFtnbC5pZF0gPSB7dGVtcEF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKVxuXHRcdFx0XHQgXHQgXHRcdCAgICxhdHRyaWJTdGF0ZTpuZXcgQXJyYXkobWF4QXR0cmlicyl9O1xuXHR9XG5cdFxuICAgIHZhciBpLFxuICAgIFx0dGVtcEF0dHJpYlN0YXRlID0gZGF0YS50ZW1wQXR0cmliU3RhdGUsXG4gICAgXHRhdHRyaWJTdGF0ZSA9IGRhdGEuYXR0cmliU3RhdGU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAoaSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbaV0ubG9jYXRpb25dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAoYXR0cmliU3RhdGVbaV0gIT09IHRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmliU3RhdGVbaV0gPSB0ZW1wQXR0cmliU3RhdGVbaV07XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmF0dHJpYlN0YXRlW2ldKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VmVydGV4QXR0cmliQXJyYXlzOyIsIlxuXG5cblxuY29tcGlsZVByb2dyYW0gPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcbiAgICB2YXIgZ2xWZXJ0U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuVkVSVEVYX1NIQURFUiwgdmVydGV4U3JjKTtcbiAgICB2YXIgZ2xGcmFnU2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNyYyk7XG5cbiAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbEZyYWdTaGFkZXIpO1xuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgLy8gaWYgbGlua2luZyBmYWlscywgdGhlbiBsb2cgYW5kIGNsZWFudXBcbiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUGl4aS5qcyBFcnJvcjogQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVyLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5WQUxJREFURV9TVEFUVVMnLCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLlZBTElEQVRFX1NUQVRVUykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5nZXRFcnJvcigpJywgZ2wuZ2V0RXJyb3IoKSk7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBwcm9ncmFtIGluZm8gbG9nLCBsb2cgaXRcbiAgICAgICAgaWYgKGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pICE9PSAnJylcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaXhpLmpzIFdhcm5pbmc6IGdsLmdldFByb2dyYW1JbmZvTG9nKCknLCBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICBwcm9ncmFtID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBzb21lIHNoYWRlcnNcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xGcmFnU2hhZGVyKTtcblxuICAgIHJldHVybiBwcm9ncmFtO1xufVxuXG52YXIgY29tcGlsZVNoYWRlciA9IGZ1bmN0aW9uIChnbCwgdHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzcmMpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZVByb2dyYW07XG5cbiIsIlxuXG52YXIgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkgXG57XG4gICAgc3dpdGNoICh0eXBlKVxuICAgIHtcbiAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAndmVjMic6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzQnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSg0ICogc2l6ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgY2FzZSAnc2FtcGxlcjJEJzpcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWMyJzogICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnaXZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDMgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjNCc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDQgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdib29sJzogICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMyJzpcblxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSggMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMzJzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWM0JzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ21hdDInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Myc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMV0pO1xuXG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDAsIDAsIDFdKTtcbiAgICB9XG59XG5cbnZhciBib29sZWFuQXJyYXkgPSBmdW5jdGlvbihzaXplKVxue1xuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgYXJyYXlbaV0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRWYWx1ZTtcbiIsIlxudmFyIG1hcFR5cGUgPSByZXF1aXJlKCcuL21hcFR5cGUnKTtcbnZhciBtYXBTaXplID0gcmVxdWlyZSgnLi9tYXBTaXplJyk7XG5cbnZhciBleHRyYWN0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICB2YXIgdG90YWxBdHRyaWJ1dGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxBdHRyaWJ1dGVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGF0dHJpYkRhdGEgPSBnbC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaSk7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgYXR0cmliRGF0YS50eXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYkRhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOnR5cGUsXG4gICAgICAgICAgICBzaXplOm1hcFNpemUodHlwZSksXG4gICAgICAgICAgICBsb2NhdGlvbjpnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBhdHRyaWJEYXRhLm5hbWUpLFxuICAgICAgICAgICAgLy9UT0RPIC0gbWFrZSBhbiBhdHRyaWJ1dGUgb2JqZWN0XG4gICAgICAgICAgICBwb2ludGVyOmZ1bmN0aW9uKHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpe1xuXG4gICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5sb2NhdGlvbix0aGlzLnNpemUsIHR5cGUgfHwgZ2wuRkxPQVQsIG5vcm1hbGl6ZWQgfHwgZmFsc2UsIHN0cmlkZSB8fCAwLCBzdGFydCB8fCAwKTsgXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYXR0cmlidXRlczsgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RBdHRyaWJ1dGVzO1xuXG4iLCJ2YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIGRlZmF1bHRWYWx1ZSA9IHJlcXVpcmUoJy4vZGVmYXVsdFZhbHVlJyk7XG5cblxudmFyIGV4dHJhY3RVbmlmb3JtcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuXHR2YXIgdW5pZm9ybXMgPSB7fTtcblx0XG4gICAgdmFyIHRvdGFsVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxVbmlmb3JtczsgaSsrKSBcbiAgICB7XG4gICAgXHR2YXIgdW5pZm9ybURhdGEgPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpO1xuICAgIFx0dmFyIG5hbWUgPSB1bmlmb3JtRGF0YS5uYW1lLnJlcGxhY2UoL1xcWy4qP1xcXS8sIFwiXCIpO1xuICAgICAgICB2YXIgdHlwZSA9IG1hcFR5cGUoZ2wsIHVuaWZvcm1EYXRhLnR5cGUgKTtcblxuICAgIFx0dW5pZm9ybXNbbmFtZV0gPSB7XG4gICAgXHRcdHR5cGU6dHlwZSxcbiAgICBcdFx0c2l6ZTp1bmlmb3JtRGF0YS5zaXplLFxuICAgIFx0XHRsb2NhdGlvbjpnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksXG4gICAgXHRcdHZhbHVlOmRlZmF1bHRWYWx1ZSh0eXBlLCB1bmlmb3JtRGF0YS5zaXplKVxuICAgIFx0fVxuICAgIH07XG5cdFxuXHRyZXR1cm4gdW5pZm9ybXM7XHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHRyYWN0VW5pZm9ybXM7XG5cbiIsIlxudmFyIGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IGZ1bmN0aW9uKGdsLCB1bmlmb3JtRGF0YSlcbntcbiAgICAvLyB0aGlzIGlzIHRoZSBvYmplY3Qgd2Ugd2lsbCBiZSBzZW5kaW5nIGJhY2suXG4gICAgLy8gYW4gb2JqZWN0IGhpZXJhY2h5IHdpbGwgYmUgY3JlYXRlZCBmb3Igc3RydWN0c1xuICAgIHZhciB1bmlmb3JtcyA9IHtkYXRhOnt9fTtcblxuICAgIHVuaWZvcm1zLmdsID0gZ2w7XG4gICAgXG4gICAgdmFyIHVuaWZvcm1LZXlzPSBPYmplY3Qua2V5cyh1bmlmb3JtRGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1LZXlzLmxlbmd0aDsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBmdWxsTmFtZSA9IHVuaWZvcm1LZXlzW2ldXG5cbiAgICAgICAgdmFyIG5hbWVUb2tlbnMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAxXTtcblxuICAgICAgICB2YXIgdW5pZm9ybUdyb3VwID0gZ2V0VW5pZm9ybUdyb3VwKG5hbWVUb2tlbnMsIHVuaWZvcm1zKTtcblxuICAgICAgICB2YXIgdW5pZm9ybSA9ICB1bmlmb3JtRGF0YVtmdWxsTmFtZV07XG4gICAgICAgIHVuaWZvcm1Hcm91cC5kYXRhW25hbWVdID0gdW5pZm9ybTtcblxuICAgICAgICB1bmlmb3JtR3JvdXAuZ2wgPSBnbDtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5pZm9ybUdyb3VwLCBuYW1lLCB7XG4gICAgICAgICAgICBnZXQ6IGdlbmVyYXRlR2V0dGVyKG5hbWUpLFxuICAgICAgICAgICAgc2V0OiBnZW5lcmF0ZVNldHRlcihuYW1lLCB1bmlmb3JtKVxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdW5pZm9ybXM7XG59XG5cbnZhciBnZW5lcmF0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpXG57XG5cdHZhciB0ZW1wbGF0ZSA9IGdldHRlclRlbXBsYXRlLnJlcGxhY2UoJyUlJywgbmFtZSk7XG5cdHJldHVybiBuZXcgRnVuY3Rpb24odGVtcGxhdGUpO1xufVxuXG52YXIgZ2VuZXJhdGVTZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCB1bmlmb3JtKVxue1xuICAgIHZhciB0ZW1wbGF0ZSA9IHNldHRlclRlbXBsYXRlLnJlcGxhY2UoLyUlL2csIG5hbWUpO1xuICAgIHZhciBzZXRUZW1wbGF0ZVxuICAgIFxuICAgIGlmKHVuaWZvcm0uc2l6ZSA9PT0gMSlcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19TSU5HTEVfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzZXRUZW1wbGF0ZSA9IEdMU0xfVE9fQVJSQVlfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cblxuICAgIGlmKHNldFRlbXBsYXRlKVxuICAgIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gXCJcXG50aGlzLmdsLlwiICsgc2V0VGVtcGxhdGUgKyBcIjtcIjtcbiAgICB9XG5cbiAgXHRyZXR1cm4gbmV3IEZ1bmN0aW9uKCd2YWx1ZScsIHRlbXBsYXRlKTtcbn1cblxudmFyIGdldFVuaWZvcm1Hcm91cCA9IGZ1bmN0aW9uKG5hbWVUb2tlbnMsIHVuaWZvcm0pXG57XG4gICAgdmFyIGN1ciA9IHVuaWZvcm07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVUb2tlbnMubGVuZ3RoIC0gMTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBvID0gY3VyW25hbWVUb2tlbnNbaV1dIHx8IHtkYXRhOnt9fTtcbiAgICAgICAgY3VyW25hbWVUb2tlbnNbaV1dID0gbztcbiAgICAgICAgY3VyID0gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGN1clxufVxuXG52YXIgZ2V0dGVyVGVtcGxhdGUgPSBbXG4gICAgJ3JldHVybiB0aGlzLmRhdGEuJSUudmFsdWU7Jyxcbl0uam9pbignXFxuJyk7XG5cbnZhciBzZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAndGhpcy5kYXRhLiUlLnZhbHVlID0gdmFsdWU7JyxcbiAgICAndmFyIGxvY2F0aW9uID0gdGhpcy5kYXRhLiUlLmxvY2F0aW9uOydcbl0uam9pbignXFxuJyk7XG5cblxudmFyIEdMU0xfVE9fU0lOR0xFX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ3ZlYzInOiAgICAgJ3VuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ3ZlYzMnOiAgICAgJ3VuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG4gICAgXHRcbiAgICAnaW50JzogICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnaXZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcblxuICAgICdtYXQyJzogICAgICd1bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0Myc6ICAgICAndW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG4gICAgJ21hdDQnOiAgICAgJ3VuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuXG4gICAgJ3NhbXBsZXIyRCc6J3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG52YXIgR0xTTF9UT19BUlJBWV9TRVRURVJTID0ge1xuXG4gICAgJ2Zsb2F0JzogICAgJ3VuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjNCc6ICAgICAndW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG4gICBcbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdDtcblxuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24odHlwZSkgXG57IFxuICAgIHJldHVybiBHTFNMX1RPX1NJWkVbdHlwZV07XG59XG5cblxudmFyIEdMU0xfVE9fU0laRSA9IHtcbiAgICAnZmxvYXQnOiAgICAxLFxuICAgICd2ZWMyJzogICAgIDIsXG4gICAgJ3ZlYzMnOiAgICAgMyxcbiAgICAndmVjNCc6ICAgICA0LFxuXG4gICAgJ2ludCc6ICAgICAgMSxcbiAgICAnaXZlYzInOiAgICAyLFxuICAgICdpdmVjMyc6ICAgIDMsXG4gICAgJ2l2ZWM0JzogICAgNCxcblxuICAgICdib29sJzogICAgIDEsXG4gICAgJ2J2ZWMyJzogICAgMixcbiAgICAnYnZlYzMnOiAgICAzLFxuICAgICdidmVjNCc6ICAgIDQsXG5cbiAgICAnbWF0Mic6ICAgICA0LFxuICAgICdtYXQzJzogICAgIDksXG4gICAgJ21hdDQnOiAgICAgMTYsXG5cbiAgICAnc2FtcGxlcjJEJzogIDFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24oZ2wsIHR5cGUpIFxue1xuICAgIGlmKCFHTF9UQUJMRSkgXG4gICAge1xuICAgICAgICB2YXIgdHlwZU5hbWVzID0gT2JqZWN0LmtleXMoR0xfVE9fR0xTTF9UWVBFUyk7XG5cbiAgICAgICAgR0xfVEFCTEUgPSB7fTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdHlwZU5hbWVzLmxlbmd0aDsgKytpKSBcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHRuID0gdHlwZU5hbWVzW2ldO1xuICAgICAgICAgICAgR0xfVEFCTEVbIGdsW3RuXSBdID0gR0xfVE9fR0xTTF9UWVBFU1t0bl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIEdMX1RBQkxFW3R5cGVdO1xufVxuXG52YXIgR0xfVEFCTEUgPSBudWxsO1xuXG52YXIgR0xfVE9fR0xTTF9UWVBFUyA9IHtcbiAgJ0ZMT0FUJzogICAgICAgJ2Zsb2F0JyxcbiAgJ0ZMT0FUX1ZFQzInOiAgJ3ZlYzInLFxuICAnRkxPQVRfVkVDMyc6ICAndmVjMycsXG4gICdGTE9BVF9WRUM0JzogICd2ZWM0JyxcblxuICAnSU5UJzogICAgICAgICAnaW50JyxcbiAgJ0lOVF9WRUMyJzogICAgJ2l2ZWMyJyxcbiAgJ0lOVF9WRUMzJzogICAgJ2l2ZWMzJyxcbiAgJ0lOVF9WRUM0JzogICAgJ2l2ZWM0JyxcbiAgXG4gICdCT09MJzogICAgICAgICdib29sJyxcbiAgJ0JPT0xfVkVDMic6ICAgJ2J2ZWMyJyxcbiAgJ0JPT0xfVkVDMyc6ICAgJ2J2ZWMzJyxcbiAgJ0JPT0xfVkVDNCc6ICAgJ2J2ZWM0JyxcbiAgXG4gICdGTE9BVF9NQVQyJzogICdtYXQyJyxcbiAgJ0ZMT0FUX01BVDMnOiAgJ21hdDMnLFxuICAnRkxPQVRfTUFUNCc6ICAnbWF0NCcsXG4gIFxuICAnU0FNUExFUl8yRCc6ICAnc2FtcGxlcjJEJyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwU2l6ZTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvQm9vbCh2KSB7XG4gICAgICAgIHJldHVybiAhIXY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vdElkKHYpIHtcbiAgICAgICAgcmV0dXJuICF2O1xuICAgIH1cblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcHJldmlvdXNfYXN5bmM7XG5cbiAgICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gICAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZiB8fFxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgdGhpcztcblxuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgICAgcHJldmlvdXNfYXN5bmMgPSByb290LmFzeW5jO1xuICAgIH1cblxuICAgIGFzeW5jLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBwcmV2aW91c19hc3luYztcbiAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbmx5X29uY2UoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIC8vIFBvcnRlZCBmcm9tIHVuZGVyc2NvcmUuanMgaXNPYmplY3RcbiAgICB2YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9pc0FycmF5TGlrZShhcnIpIHtcbiAgICAgICAgcmV0dXJuIF9pc0FycmF5KGFycikgfHwgKFxuICAgICAgICAgICAgLy8gaGFzIGEgcG9zaXRpdmUgaW50ZWdlciBsZW5ndGggcHJvcGVydHlcbiAgICAgICAgICAgIHR5cGVvZiBhcnIubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICBhcnIubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggJSAxID09PSAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2FycmF5RWFjaChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfbWFwKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdG9yKGFycltpbmRleF0sIGluZGV4LCBhcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JhbmdlKGNvdW50KSB7XG4gICAgICAgIHJldHVybiBfbWFwKEFycmF5KGNvdW50KSwgZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGk7IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9yZWR1Y2UoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBfYXJyYXlFYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9mb3JFYWNoT2Yob2JqZWN0LCBpdGVyYXRvcikge1xuICAgICAgICBfYXJyYXlFYWNoKF9rZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnIsIGl0ZW0pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfa2V5SXRlcmF0b3IoY29sbCkge1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB2YXIgbGVuO1xuICAgICAgICB2YXIga2V5cztcbiAgICAgICAgaWYgKF9pc0FycmF5TGlrZShjb2xsKSkge1xuICAgICAgICAgICAgbGVuID0gY29sbC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBsZW4gPyBpIDogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXlzID0gX2tleXMoY29sbCk7XG4gICAgICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGtleXNbaV0gOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpbWlsYXIgdG8gRVM2J3MgcmVzdCBwYXJhbSAoaHR0cDovL2FyaXlhLm9maWxhYnMuY29tLzIwMTMvMDMvZXM2LWFuZC1yZXN0LXBhcmFtZXRlci5odG1sKVxuICAgIC8vIFRoaXMgYWNjdW11bGF0ZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byBhbiBhcnJheSwgYWZ0ZXIgYSBnaXZlbiBpbmRleC5cbiAgICAvLyBGcm9tIHVuZGVyc2NvcmUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzIxNDApLlxuICAgIGZ1bmN0aW9uIF9yZXN0UGFyYW0oZnVuYywgc3RhcnRJbmRleCkge1xuICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCk7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSB1bnVzZWQgYnV0IGhhbmRsZSBjYXNlcyBvdXRzaWRlIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50OlxuICAgICAgICAgICAgLy8gdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICAgICAgICAvLyBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAvLyAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICAgICAgICAvLyByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBleHBvcnRlZCBhc3luYyBtb2R1bGUgZnVuY3Rpb25zIC8vLy9cblxuICAgIC8vLy8gbmV4dFRpY2sgaW1wbGVtZW50YXRpb24gd2l0aCBicm93c2VyLWNvbXBhdGlibGUgZmFsbGJhY2sgLy8vL1xuXG4gICAgLy8gY2FwdHVyZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZSB0byBndWFyZCBhZ2FpbnN0IGZha2VUaW1lciBtb2Nrc1xuICAgIHZhciBfc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzZXRJbW1lZGlhdGU7XG5cbiAgICB2YXIgX2RlbGF5ID0gX3NldEltbWVkaWF0ZSA/IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgIF9zZXRJbW1lZGlhdGUoZm4pO1xuICAgIH0gOiBmdW5jdGlvbihmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBfZGVsYXk7XG4gICAgfVxuICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IF9zZXRJbW1lZGlhdGUgPyBfZGVsYXkgOiBhc3luYy5uZXh0VGljaztcblxuXG4gICAgYXN5bmMuZm9yRWFjaCA9XG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9XG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mU2VyaWVzKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG5cbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPVxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9lYWNoT2ZMaW1pdChsaW1pdCkoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoT2YgPVxuICAgIGFzeW5jLmVhY2hPZiA9IGZ1bmN0aW9uIChvYmplY3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBvYmplY3QgPSBvYmplY3QgfHwgW107XG5cbiAgICAgICAgdmFyIGl0ZXIgPSBfa2V5SXRlcmF0b3Iob2JqZWN0KTtcbiAgICAgICAgdmFyIGtleSwgY29tcGxldGVkID0gMDtcblxuICAgICAgICB3aGlsZSAoKGtleSA9IGl0ZXIoKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpdGVyYXRvcihvYmplY3Rba2V5XSwga2V5LCBvbmx5X29uY2UoZG9uZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gMCkgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZC0tO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBrZXkgaXMgbnVsbCBpbiBjYXNlIGl0ZXJhdG9yIGlzbid0IGV4aGF1c3RlZFxuICAgICAgICAgICAgLy8gYW5kIGRvbmUgcmVzb2x2ZWQgc3luY2hyb25vdXNseS5cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gbnVsbCAmJiBjb21wbGV0ZWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZlNlcmllcyA9XG4gICAgYXN5bmMuZWFjaE9mU2VyaWVzID0gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iaiA9IG9iaiB8fCBbXTtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgdmFyIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRvcihvYmpba2V5XSwga2V5LCBvbmx5X29uY2UoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoaXRlcmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5mb3JFYWNoT2ZMaW1pdCA9XG4gICAgYXN5bmMuZWFjaE9mTGltaXQgPSBmdW5jdGlvbiAob2JqLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9lYWNoT2ZMaW1pdChsaW1pdCkob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZWFjaE9mTGltaXQobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBydW5uaW5nID0gMDtcbiAgICAgICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChkb25lICYmIHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWwoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZiwgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb1BhcmFsbGVsTGltaXQoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihfZWFjaE9mTGltaXQobGltaXQpLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvU2VyaWVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihhc3luYy5lYWNoT2ZTZXJpZXMsIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gX2lzQXJyYXlMaWtlKGFycikgPyBbXSA6IHt9O1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfYXN5bmNNYXApO1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLmluamVjdCA9XG4gICAgYXN5bmMuZm9sZGwgPVxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgaSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5mb2xkciA9XG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGlkZW50aXR5KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudHJhbnNmb3JtID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGl0ZXJhdG9yO1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBtZW1vO1xuICAgICAgICAgICAgbWVtbyA9IF9pc0FycmF5KGFycikgPyBbXSA6IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuZWFjaE9mKGFyciwgZnVuY3Rpb24odiwgaywgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHYsIGssIGNiKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleDogaW5kZXgsIHZhbHVlOiB4fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soX21hcChyZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICB9KSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMuc2VsZWN0ID1cbiAgICBhc3luYy5maWx0ZXIgPSBkb1BhcmFsbGVsKF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0TGltaXQgPVxuICAgIGFzeW5jLmZpbHRlckxpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID1cbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcblxuICAgIGZ1bmN0aW9uIF9yZWplY3QoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBfZmlsdGVyKGVhY2hmbiwgYXJyLCBmdW5jdGlvbih2YWx1ZSwgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgY2IoIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoZWFjaGZuLCBjaGVjaywgZ2V0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2IpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSBjYihnZXRSZXN1bHQoZmFsc2UsIHZvaWQgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWUoeCwgXywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNiKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2IgJiYgY2hlY2sodikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGdldFJlc3VsdCh0cnVlLCB4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGl0ZXJhdG9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGxpbWl0LCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBsaW1pdDtcbiAgICAgICAgICAgICAgICBlYWNoZm4oYXJyLCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMuYW55ID1cbiAgICBhc3luYy5zb21lID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIHRvQm9vbCwgaWRlbnRpdHkpO1xuXG4gICAgYXN5bmMuc29tZUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5hbGwgPVxuICAgIGFzeW5jLmV2ZXJ5ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIG5vdElkLCBub3RJZCk7XG5cbiAgICBhc3luYy5ldmVyeUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgbm90SWQsIG5vdElkKTtcblxuICAgIGZ1bmN0aW9uIF9maW5kR2V0UmVzdWx0KHYsIHgpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIGFzeW5jLmRldGVjdCA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mU2VyaWVzLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdExpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgaWRlbnRpdHksIF9maW5kR2V0UmVzdWx0KTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoY29tcGFyYXRvciksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgb3B0aW9uYWwsIHNoaWZ0IHRoZSBhcmdzLlxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHJlbWFpbmluZ1Rhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoZm4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gX2luZGV4T2YobGlzdGVuZXJzLCBmbik7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgX2FycmF5RWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2FycmF5RWFjaChrZXlzLCBmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSBfaXNBcnJheSh0YXNrc1trXSkgPyB0YXNrc1trXTogW3Rhc2tzW2tdXTtcbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBfZm9yRWFjaE9mKHJlc3VsdHMsIGZ1bmN0aW9uKHZhbCwgcmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCB0YXNrLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWFkLWxvY2tzXG4gICAgICAgICAgICB2YXIgbGVuID0gcmVxdWlyZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGRlcDtcbiAgICAgICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgICAgICAgIGlmICghKGRlcCA9IHRhc2tzW3JlcXVpcmVzW2xlbl1dKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhcyBpbmV4aXN0YW50IGRlcGVuZGVuY3knKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc0FycmF5KGRlcCkgJiYgX2luZGV4T2YoZGVwLCBrKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGN5Y2xpYyBkZXBlbmRlbmNpZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kgJiYgX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcblxuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHRpbWVzOiBERUZBVUxUX1RJTUVTLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IERFRkFVTFRfSU5URVJWQUxcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgdCA9PT0gJ251bWJlcicpe1xuICAgICAgICAgICAgICAgIGFjYy50aW1lcyA9IHBhcnNlSW50KHQsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiB0ID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodC50aW1lcywgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICAgICAgYWNjLmludGVydmFsID0gcGFyc2VJbnQodC5pbnRlcnZhbCwgMTApIHx8IERFRkFVTFRfSU5URVJWQUw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYXJndW1lbnQgdHlwZSBmb3IgXFwndGltZXNcXCc6ICcgKyB0eXBlb2YgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDEgfHwgbGVuZ3RoID4gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyAtIG11c3QgYmUgZWl0aGVyICh0YXNrKSwgKHRhc2ssIGNhbGxiYWNrKSwgKHRpbWVzLCB0YXNrKSBvciAodGltZXMsIHRhc2ssIGNhbGxiYWNrKScpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA8PSAyICYmIHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGltZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0cywgdGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgb3B0cy50YXNrID0gdGFzaztcblxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVkVGFzayh3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQodGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5SW50ZXJ2YWwoaW50ZXJ2YWwpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKG9wdHMudGltZXMpIHtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5hbEF0dGVtcHQgPSAhKG9wdHMudGltZXMtPTEpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KG9wdHMudGFzaywgZmluYWxBdHRlbXB0KSk7XG4gICAgICAgICAgICAgICAgaWYoIWZpbmFsQXR0ZW1wdCAmJiBvcHRzLmludGVydmFsID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlJbnRlcnZhbChvcHRzLmludGVydmFsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBvcHRzLmNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNhbGxiYWNrIGlzIHBhc3NlZCwgcnVuIHRoaXMgYXMgYSBjb250cm9sbCBmbG93XG4gICAgICAgIHJldHVybiBvcHRzLmNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrO1xuICAgIH07XG5cbiAgICBhc3luYy53YXRlcmZhbGwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGlmICghX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3cmFwSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCh3cmFwSXRlcmF0b3IobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbnN1cmVBc3luYyhpdGVyYXRvcikuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3BhcmFsbGVsKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgbm9vcDtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsIGZ1bmN0aW9uICh0YXNrLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0YXNrKF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLnBhcmFsbGVsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoYXN5bmMuZWFjaE9mLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24odGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoX2VhY2hPZkxpbWl0KGxpbWl0KSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2ZTZXJpZXMsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VDYWxsYmFjayhpbmRleCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYWtlQ2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIGFzeW5jLmFwcGx5ID0gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGNhbGxBcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoY2FsbEFyZ3MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb25jYXQoZWFjaGZuLCBhcnIsIGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIGZuKHgsIGZ1bmN0aW9uIChlcnIsIHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICB2YXIgbmV4dCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdC5hcHBseSh0aGlzLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihuZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gKytjYWxscyA8PSAxIHx8IHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9VbnRpbCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmR1cmluZyA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hlY2spO1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cnV0aCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0KGNoZWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9EdXJpbmcgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIGFzeW5jLmR1cmluZyhmdW5jdGlvbihuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY2FsbHMrKyA8IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBtdXN0IG5vdCBiZSB6ZXJvJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sgfHwgbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBxLnRhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfbmV4dChxLCB0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgd29ya2VycyAtPSAxO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHdvcmtlcnNMaXN0LCBmdW5jdGlvbiAod29ya2VyLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtlciA9PT0gdGFzayAmJiAhcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgdGFza3M6IFtdLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IGNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbm9vcCxcbiAgICAgICAgICAgIGVtcHR5OiBub29wLFxuICAgICAgICAgICAgZHJhaW46IG5vb3AsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHEuZHJhaW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHRydWUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFxLnBhdXNlZCAmJiB3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSh3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBxLnBheWxvYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEucGF5bG9hZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEudGFza3MubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfbWFwKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaCh0YXNrc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UoX25leHQocSwgdGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdW1lQ291bnQgPSBNYXRoLm1pbihxLmNvbmN1cnJlbmN5LCBxLnRhc2tzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSByZXN1bWVDb3VudDsgdysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgcSA9IF9xdWV1ZShmdW5jdGlvbiAoaXRlbXMsIGNiKSB7XG4gICAgICAgICAgICB3b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICAgIGVuZCA9IHNlcXVlbmNlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGJlZyArICgoZW5kIC0gYmVnICsgMSkgPj4+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3BcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoX2JpbmFyeVNlYXJjaChxLnRhc2tzLCBpdGVtLCBfY29tcGFyZVRhc2tzKSArIDEsIDAsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBxLnVuc2hpZnQ7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLmNhcmdvID0gZnVuY3Rpb24gKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gX3F1ZXVlKHdvcmtlciwgMSwgcGF5bG9hZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9jb25zb2xlX2ZuKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGlkZW50aXR5O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIG1lbW9pemVkKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGtleSBpbiBtZW1vKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF90aW1lcyhtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBtYXBwZXIoX3JhbmdlKGNvdW50KSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy50aW1lcyA9IF90aW1lcyhhc3luYy5tYXApO1xuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gX3RpbWVzKGFzeW5jLm1hcFNlcmllcyk7XG4gICAgYXN5bmMudGltZXNMaW1pdCA9IGZ1bmN0aW9uIChjb3VudCwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMubWFwTGltaXQoX3JhbmdlKGNvdW50KSwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBub29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW19yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgbmV4dGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfSldKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoYXQsIFtlcnJdLmNvbmNhdChyZXN1bHRzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5zZXEuYXBwbHkobnVsbCwgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBfYXBwbHlFYWNoKGVhY2hmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbihmbnMsIGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBnbyA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlYWNoZm4oZm5zLCBmdW5jdGlvbiAoZm4sIF8sIGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5hcHBseUVhY2ggPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZik7XG4gICAgYXN5bmMuYXBwbHlFYWNoU2VyaWVzID0gX2FwcGx5RWFjaChhc3luYy5lYWNoT2ZTZXJpZXMpO1xuXG5cbiAgICBhc3luYy5mb3JldmVyID0gZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZG9uZSA9IG9ubHlfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgdmFyIHRhc2sgPSBlbnN1cmVBc3luYyhmbik7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVBc3luYyhmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuXG4gICAgYXN5bmMuY29uc3RhbnQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICB2YXIgYXJncyA9IFtudWxsXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXN5bmMud3JhcFN5bmMgPVxuICAgIGFzeW5jLmFzeW5jaWZ5ID0gZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAoX2lzT2JqZWN0KHJlc3VsdCkgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLm1lc3NhZ2UgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBOb2RlLmpzXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG4gICAgfVxuICAgIC8vIEFNRCAvIFJlcXVpcmVKU1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG5cdCAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXG5cdCAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cblx0ICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSlcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cblx0ICogQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuXHQgKiBVbmljb2RlIHN0cmluZy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gJ3huLS0nICsgZW5jb2RlKHN0cmluZylcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG5cdHB1bnljb2RlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHQndmVyc2lvbic6ICcxLjMuMicsXG5cdFx0LyoqXG5cdFx0ICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHRcdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMpIHtcblx0XHRcdC8vIGluIE5vZGUuanMsIGlvLmpzLCBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IHB1bnljb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5wdW55Y29kZSA9IHB1bnljb2RlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUpIHJldHVybiB0cmlhbmdsZXM7XG5cbiAgICB2YXIgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgc2l6ZTtcblxuICAgIGlmIChoYXNIb2xlcykgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKTtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG4gICAgICAgIG1pblggPSBtYXhYID0gZGF0YVswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xuICAgICAgICAgICAgeSA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIHNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIHNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgICAgICBpLCBqLCBsYXN0O1xuXG4gICAgLy8gY2FsY3VsYXRlIG9yaWdpbmFsIHdpbmRpbmcgb3JkZXIgb2YgYSBwb2x5Z29uIHJpbmdcbiAgICBmb3IgKGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cblxuICAgIC8vIGxpbmsgcG9pbnRzIGludG8gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuICAgIGlmIChjbG9ja3dpc2UgPT09IChzdW0gPiAwKSkge1xuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgc2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChzaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0aWNlIGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZWFyLCB0cmlhbmdsZXMsIGRpbSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDIpO1xuXG4gICAgICAgICAgICAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgd2hpbGUgKHAgIT09IGVhci5wcmV2KSB7XG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG4gICAgdmFyIG1pblRYID0gYS54IDwgYi54ID8gKGEueCA8IGMueCA/IGEueCA6IGMueCkgOiAoYi54IDwgYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoYS55IDwgYy55ID8gYS55IDogYy55KSA6IChiLnkgPCBjLnkgPyBiLnkgOiBjLnkpLFxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1heFRZID0gYS55ID4gYi55ID8gKGEueSA+IGMueSA/IGEueSA6IGMueSkgOiAoYi55ID4gYy55ID8gYi55IDogYy55KTtcblxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgdmFyIG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBzaXplKSxcbiAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgdmFyIHAgPSBlYXIubmV4dFo7XG5cbiAgICB3aGlsZSAocCAmJiBwLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgcCA9IGVhci5wcmV2WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIC8vIGEgc2VsZi1pbnRlcnNlY3Rpb24gd2hlcmUgZWRnZSAodltpLTFdLHZbaV0pIGludGVyc2VjdHMgKHZbaSsxXSx2W2krMl0pXG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcblxuICAgICAgICAgICAgcCA9IHN0YXJ0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBwO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBzdG9wID0gbSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtLm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBtLnggJiZcbiAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoaHkgPCBtLnkgPyBoeCA6IHF4LCBoeSwgbS54LCBtLnksIGh5IDwgbS55ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxU2l6ZSA9PT0gMCB8fCAhcSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwLnogPD0gcS56KSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBzaXplIG9mIHRoZSBkYXRhIGJvdW5kaW5nIGJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlXG4gICAgeCA9IDMyNzY3ICogKHggLSBtaW5YKSAvIHNpemU7XG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAvIHNpemU7XG5cbiAgICB4ID0gKHggfCAoeCA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB4ID0gKHggfCAoeCA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnggPCBsZWZ0bW9zdC54KSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGVxdWFscyhhLCBiKSB8fCBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmXG4gICAgICAgICAgIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYik7XG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgcmV0dXJuIGFyZWEocDEsIHExLCBwMikgPiAwICE9PSBhcmVhKHAxLCBxMSwgcTIpID4gMCAmJlxuICAgICAgICAgICBhcmVhKHAyLCBxMiwgcDEpID4gMCAhPT0gYXJlYShwMiwgcTIsIHExKSA+IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGljZSBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0aWNlIG5vZGVzIGluIGEgcG9seWdvbiByaW5nXG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZVxuICAgIHRoaXMueiA9IG51bGw7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG5cbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuICAgIHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1xuLy8gV2Ugc3RvcmUgb3VyIEVFIG9iamVjdHMgaW4gYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gYH5gIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IG92ZXJyaWRkZW4gb3Jcbi8vIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vIFdlIGFsc28gYXNzdW1lIHRoYXQgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBldmVudCBuYW1lXG4vLyBpcyBhbiBFUzYgU3ltYm9sLlxuLy9cbnZhciBwcmVmaXggPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJyA/ICd+JyA6IGZhbHNlO1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIEV2ZW50RW1pdHRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgQ29udGV4dCBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgZW1pdCBvbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIE1pbmltYWwgRXZlbnRFbWl0dGVyIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkgeyAvKiBOb3RoaW5nIHRvIHNldCAqLyB9XG5cbi8qKlxuICogSG9sZHMgdGhlIGFzc2lnbmVkIEV2ZW50RW1pdHRlcnMgYnkgbmFtZS5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiBhIGxpc3Qgb2YgYXNzaWduZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZXhpc3RzIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7QXJyYXl8Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50LCBleGlzdHMpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGF2YWlsYWJsZSA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoZXhpc3RzKSByZXR1cm4gISFhdmFpbGFibGU7XG4gIGlmICghYXZhaWxhYmxlKSByZXR1cm4gW107XG4gIGlmIChhdmFpbGFibGUuZm4pIHJldHVybiBbYXZhaWxhYmxlLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGF2YWlsYWJsZS5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBhdmFpbGFibGVbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIEVtaXQgYW4gZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSW5kaWNhdGlvbiBpZiB3ZSd2ZSBlbWl0dGVkIGFuIGV2ZW50LlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyBFdmVudExpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdG9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgdGhpcylcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgdGhpcy5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lcjtcbiAgZWxzZSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XS5mbikgdGhpcy5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gICAgZWxzZSB0aGlzLl9ldmVudHNbZXZ0XSA9IFtcbiAgICAgIHRoaXMuX2V2ZW50c1tldnRdLCBsaXN0ZW5lclxuICAgIF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGFuIEV2ZW50TGlzdGVuZXIgdGhhdCdzIG9ubHkgY2FsbGVkIG9uY2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzLCB0cnVlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2Ugd2FudCB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgdGhhdCB3ZSBuZWVkIHRvIGZpbmQuXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IE9ubHkgcmVtb3ZlIGxpc3RlbmVycyBtYXRjaGluZyB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25jZSBsaXN0ZW5lcnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBldmVudHMgPSBbXTtcblxuICBpZiAoZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgIGxpc3RlbmVycy5mbiAhPT0gZm5cbiAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVycy5vbmNlKVxuICAgICAgICB8fCAoY29udGV4dCAmJiBsaXN0ZW5lcnMuY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuXG4gICAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKVxuICAgICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAvL1xuICBpZiAoZXZlbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW2V2dF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgb3Igb25seSB0aGUgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmVycyBmb3IuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKGV2ZW50KSBkZWxldGUgdGhpcy5fZXZlbnRzW3ByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRdO1xuICBlbHNlIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFwcGx5IGFueW1vcmUuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4ndXNlIHN0cmljdCc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiFcbiAqIGFzeW5jXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jXG4gKlxuICogQ29weXJpZ2h0IDIwMTAtMjAxNCBDYW9sYW4gTWNNYWhvblxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbi8qanNoaW50IG9uZXZhcjogZmFsc2UsIGluZGVudDo0ICovXG4vKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cbihmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXN5bmMgPSB7fTtcblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcm9vdCwgcHJldmlvdXNfYXN5bmM7XG5cbiAgICByb290ID0gdGhpcztcbiAgICBpZiAocm9vdCAhPSBudWxsKSB7XG4gICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWQpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkocm9vdCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8gY3Jvc3MtYnJvd3NlciBjb21wYXRpYmxpdHkgZnVuY3Rpb25zIC8vLy9cblxuICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgdmFyIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG5cbiAgICB2YXIgX2VhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBfbWFwID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgaWYgKGFyci5tYXApIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIubWFwKGl0ZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IoeCwgaSwgYSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHZhciBfcmVkdWNlID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIG1lbW8pIHtcbiAgICAgICAgaWYgKGFyci5yZWR1Y2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGl0ZXJhdG9yLCBtZW1vKTtcbiAgICAgICAgfVxuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICBtZW1vID0gaXRlcmF0b3IobWVtbywgeCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuXG4gICAgdmFyIF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgX2VhY2goYXJyLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgb25seV9vbmNlKGRvbmUpICk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2ggPSBhc3luYy5lYWNoO1xuXG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICB2YXIgaXRlcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGFycltjb21wbGV0ZWRdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID0gYXN5bmMuZWFjaFNlcmllcztcblxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZuID0gX2VhY2hMaW1pdChsaW1pdCk7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIFthcnIsIGl0ZXJhdG9yLCBjYWxsYmFja10pO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaExpbWl0ID0gYXN5bmMuZWFjaExpbWl0O1xuXG4gICAgdmFyIF9lYWNoTGltaXQgPSBmdW5jdGlvbiAobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgaWYgKCFhcnIubGVuZ3RoIHx8IGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVwbGVuaXNoICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiBzdGFydGVkIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoYXJyW3N0YXJ0ZWQgLSAxXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB2YXIgZG9QYXJhbGxlbCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvUGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKGxpbWl0LCBmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFtfZWFjaExpbWl0KGxpbWl0KV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBkb1NlcmllcyA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoU2VyaWVzXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBfYXN5bmNNYXAgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1t4LmluZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9tYXBMaW1pdChsaW1pdCkoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB2YXIgX21hcExpbWl0ID0gZnVuY3Rpb24obGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGRvUGFyYWxsZWxMaW1pdChsaW1pdCwgX2FzeW5jTWFwKTtcbiAgICB9O1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihtZW1vLCB4LCBmdW5jdGlvbiAoZXJyLCB2KSB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGluamVjdCBhbGlhc1xuICAgIGFzeW5jLmluamVjdCA9IGFzeW5jLnJlZHVjZTtcbiAgICAvLyBmb2xkbCBhbGlhc1xuICAgIGFzeW5jLmZvbGRsID0gYXN5bmMucmVkdWNlO1xuXG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSkucmV2ZXJzZSgpO1xuICAgICAgICBhc3luYy5yZWR1Y2UocmV2ZXJzZWQsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICAvLyBmb2xkciBhbGlhc1xuICAgIGFzeW5jLmZvbGRyID0gYXN5bmMucmVkdWNlUmlnaHQ7XG5cbiAgICB2YXIgX2ZpbHRlciA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LnZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG4gICAgYXN5bmMuZmlsdGVyU2VyaWVzID0gZG9TZXJpZXMoX2ZpbHRlcik7XG4gICAgLy8gc2VsZWN0IGFsaWFzXG4gICAgYXN5bmMuc2VsZWN0ID0gYXN5bmMuZmlsdGVyO1xuICAgIGFzeW5jLnNlbGVjdFNlcmllcyA9IGFzeW5jLmZpbHRlclNlcmllcztcblxuICAgIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLnJlamVjdCA9IGRvUGFyYWxsZWwoX3JlamVjdCk7XG4gICAgYXN5bmMucmVqZWN0U2VyaWVzID0gZG9TZXJpZXMoX3JlamVjdCk7XG5cbiAgICB2YXIgX2RldGVjdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIG1haW5fY2FsbGJhY2spIHtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKHgpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZGV0ZWN0ID0gZG9QYXJhbGxlbChfZGV0ZWN0KTtcbiAgICBhc3luYy5kZXRlY3RTZXJpZXMgPSBkb1NlcmllcyhfZGV0ZWN0KTtcblxuICAgIGFzeW5jLnNvbWUgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbnkgYWxpYXNcbiAgICBhc3luYy5hbnkgPSBhc3luYy5zb21lO1xuXG4gICAgYXN5bmMuZXZlcnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghdikge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gYWxsIGFsaWFzXG4gICAgYXN5bmMuYWxsID0gYXN5bmMuZXZlcnk7XG5cbiAgICBhc3luYy5zb3J0QnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgYXN5bmMubWFwKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAoZXJyLCBjcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHt2YWx1ZTogeCwgY3JpdGVyaWE6IGNyaXRlcmlhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoZm4pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGhcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldID09PSBmbikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdGFza0NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtYWluaW5nVGFza3MtLVxuICAgICAgICAgICAgX2VhY2gobGlzdGVuZXJzLnNsaWNlKDApLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIHZhciB0aGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZmluYWwgY2FsbGJhY2sgZnJvbSBjYWxsaW5nIGl0c2VsZiBpZiBpdCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdGhlQ2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9lYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKF9rZXlzKHJlc3VsdHMpLCBmdW5jdGlvbihya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIHN1YnNlcXVlbnQgZXJyb3JzIGhpdHRpbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUodGFza0NvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCBNYXRoLmFicyh0YXNrLmxlbmd0aCAtIDEpKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucmV0cnkgPSBmdW5jdGlvbih0aW1lcywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIERFRkFVTFRfVElNRVMgPSA1O1xuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcbiAgICAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHRpbWVzIG5vdCBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICAgICAgdGltZXMgPSBERUZBVUxUX1RJTUVTO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lcyBpcyBhIG51bWJlclxuICAgICAgICB0aW1lcyA9IHBhcnNlSW50KHRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgdmFyIHdyYXBwZWRUYXNrID0gZnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkUmVzdWx0cykge1xuICAgICAgICAgICAgdmFyIHJldHJ5QXR0ZW1wdCA9IGZ1bmN0aW9uKHRhc2ssIGZpbmFsQXR0ZW1wdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKGZ1bmN0aW9uKGVyciwgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKCFlcnIgfHwgZmluYWxBdHRlbXB0LCB7ZXJyOiBlcnIsIHJlc3VsdDogcmVzdWx0fSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXBwZWRSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcykge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KHRhc2ssICEodGltZXMtPTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBjYWxsYmFjaykoZGF0YS5lcnIsIGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrXG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJdGVyYXRvciA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGZ1bmN0aW9uKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGVhY2hmbi5tYXAodGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGVhY2hmbi5lYWNoKF9rZXlzKHRhc2tzKSwgZnVuY3Rpb24gKGssIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGFza3Nba10oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogYXN5bmMubWFwLCBlYWNoOiBhc3luYy5lYWNoIH0sIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogX21hcExpbWl0KGxpbWl0KSwgZWFjaDogX2VhY2hMaW1pdChsaW1pdCkgfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICBhc3luYy5tYXBTZXJpZXModGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5pdGVyYXRvciA9IGZ1bmN0aW9uICh0YXNrcykge1xuICAgICAgICB2YXIgbWFrZUNhbGxiYWNrID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmbi5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCB0YXNrcy5sZW5ndGggLSAxKSA/IG1ha2VDYWxsYmFjayhpbmRleCArIDEpOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KFxuICAgICAgICAgICAgICAgIG51bGwsIGFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgX2NvbmNhdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHIgPSByLmNvbmNhdCh5IHx8IFtdKTtcbiAgICAgICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRlc3QoKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLndoaWxzdCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvV2hpbHN0ID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAodGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMudW50aWwodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAoIXRlc3QuYXBwbHkobnVsbCwgYXJncykpIHtcbiAgICAgICAgICAgICAgICBhc3luYy5kb1VudGlsKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcG9zLCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxLnNhdHVyYXRlZCAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHEuZHJhaW4gPSBudWxsO1xuICAgICAgICAgICAgICBxLnRhc2tzID0gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gcS50YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocS5lbXB0eSAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLmRyYWluICYmIHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UobmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcih0YXNrLmRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSB0cnVlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSBxLmNvbmN1cnJlbmN5OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMucHJpb3JpdHlRdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG5cbiAgICAgICAgZnVuY3Rpb24gX2NvbXBhcmVUYXNrcyhhLCBiKXtcbiAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgIHZhciBiZWcgPSAtMSxcbiAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBzZXF1ZW5jZVttaWRdKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGJlZyA9IG1pZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiZWc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG5vcm1hbCBxdWV1ZVxuICAgICAgICB2YXIgcSA9IGFzeW5jLnF1ZXVlKHdvcmtlciwgY29uY3VycmVuY3kpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciB3b3JraW5nICAgICA9IGZhbHNlLFxuICAgICAgICAgICAgdGFza3MgICAgICAgPSBbXTtcblxuICAgICAgICB2YXIgY2FyZ28gPSB7XG4gICAgICAgICAgICB0YXNrczogdGFza3MsXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBudWxsLFxuICAgICAgICAgICAgZW1wdHk6IG51bGwsXG4gICAgICAgICAgICBkcmFpbjogbnVsbCxcbiAgICAgICAgICAgIGRyYWluZWQ6IHRydWUsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZ28uc2F0dXJhdGVkICYmIHRhc2tzLmxlbmd0aCA9PT0gcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ28uc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoY2FyZ28ucHJvY2Vzcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcygpIHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2luZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2FyZ28uZHJhaW4gJiYgIWNhcmdvLmRyYWluZWQpIGNhcmdvLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvLmRyYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRzID0gdHlwZW9mIHBheWxvYWQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0YXNrcy5zcGxpY2UoMCwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tzLnNwbGljZSgwLCB0YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRzID0gX21hcCh0cywgZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmKGNhcmdvLmVtcHR5KSBjYXJnby5lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHdvcmtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtlcihkcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JraW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKHRzLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjYXJnbztcbiAgICB9O1xuXG4gICAgdmFyIF9jb25zb2xlX2ZuID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZWFjaChhcmdzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbmFtZV0oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIG1lbW9ba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICBxW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfTtcblxuICAgIGFzeW5jLnVubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb3VudGVyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jLm1hcFNlcmllcyhjb3VudGVyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXEgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXN5bmMucmVkdWNlKGZucywgYXJncywgZnVuY3Rpb24gKG5ld2FyZ3MsIGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KFtmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1dKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy5jb21wb3NlID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICB2YXIgX2FwcGx5RWFjaCA9IGZ1bmN0aW9uIChlYWNoZm4sIGZucyAvKmFyZ3MuLi4qLykge1xuICAgICAgICB2YXIgZ28gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzLmNvbmNhdChbY2JdKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgICAgIHJldHVybiBnby5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuYXBwbHlFYWNoID0gZG9QYXJhbGxlbChfYXBwbHlFYWNoKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBkb1NlcmllcyhfYXBwbHlFYWNoKTtcblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbihuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsInZhciBhc3luYyAgICAgICA9IHJlcXVpcmUoJ2FzeW5jJyksXG4gICAgdXJsUGFyc2VyICAgPSByZXF1aXJlKCd1cmwnKSxcbiAgICBSZXNvdXJjZSAgICA9IHJlcXVpcmUoJy4vUmVzb3VyY2UnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgbXVsdGlwbGUgcmVzb3VyY2VzIHRvIGxvYWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KSB7XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICBjb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByb2dyZXNzIHBlcmNlbnQgb2YgdGhlIGxvYWRlciBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRpbmcgc3RhdGUgb2YgdGhlIGxvYWRlciwgdHJ1ZSBpZiBpdCBpcyBjdXJyZW50bHkgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdG90YWwgcHJvZ3Jlc3MgdGhhdCBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGJlZm9yZSBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaWRkbGV3YXJlIHRvIHJ1biBhZnRlciBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfbG9hZFJlc291cmNlYCBmdW5jdGlvbiBib3VuZCB3aXRoIHRoaXMgb2JqZWN0IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kTG9hZFJlc291cmNlID0gdGhpcy5fbG9hZFJlc291cmNlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkxvYWRgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkxvYWQgPSB0aGlzLl9vbkxvYWQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvdXJjZSBidWZmZXIgdGhhdCBmaWxscyB1bnRpbCBgbG9hZGAgaXMgY2FsbGVkIHRvIHN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB0cmFjayBsb2FkIGNvbXBsZXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9udW1Ub0xvYWQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlcyB3YWl0aW5nIHRvIGJlIGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2VbXX1cbiAgICAgKi9cbiAgICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX2JvdW5kTG9hZFJlc291cmNlLCBjb25jdXJyZW5jeSk7XG5cbiAgICAvKipcbiAgICAgKiBBbGwgdGhlIHJlc291cmNlcyBmb3IgdGhpcyBsb2FkZXIga2V5ZWQgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIFJlc291cmNlPn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgb3IgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwcm9ncmVzc1xuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGVycm9yZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGxvYWRlciBiZWdpbnMgdG8gcHJvY2VzcyB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBxdWV1ZWQgcmVzb3VyY2VzIGFsbCBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbi8qKlxuICogQWRkcyBhIHJlc291cmNlIChvciBtdWx0aXBsZSByZXNvdXJjZXMpIHRvIHRoZSBsb2FkZXIgcXVldWUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gdGFrZSBhIHdpZGUgdmFyaWV0eSBvZiBkaWZmZXJlbnQgcGFyYW1ldGVycy4gVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBhbHdheXNcbiAqIHJlcXVpcmVkIHRoZSB1cmwgdG8gbG9hZC4gQWxsIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOlxuICpcbiAqIGBgYGpzXG4gKiBsb2FkZXJcbiAqICAgICAvLyBub3JtYWwgcGFyYW0gc3ludGF4XG4gKiAgICAgLmFkZCgna2V5JywgJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJywgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCgnaHR0cDovLy4uLicpXG4gKlxuICogICAgIC8vIG9iamVjdCBzeW50YXhcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgbmFtZTogJ2tleTInLFxuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MycsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9XG4gKiAgICAgfSlcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgdXJsOiAnaHR0cHM6Ly8uLi4nLFxuICogICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7fSxcbiAqICAgICAgICAgY3Jvc3NPcmlnaW46IHRydWVcbiAqICAgICB9KVxuICpcbiAqICAgICAvLyB5b3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBvYmplY3RzIG9yIHVybHMgb3IgYm90aFxuICogICAgIC5hZGQoW1xuICogICAgICAgICB7IG5hbWU6ICdrZXk0JywgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgIHsgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgICdodHRwOi8vLi4uJ1xuICogICAgIF0pO1xuICogYGBgXG4gKlxuICogQGFsaWFzIGVucXVldWVcbiAqIEBwYXJhbSBbbmFtZV0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQsIGlmIG5vdCBwYXNzZWQgdGhlIHVybCBpcyB1c2VkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCByZWxhdGl2ZSB0byB0aGUgYmFzZVVybCBvZiB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7Ym9vbGVhbn0gSXMgdGhpcyByZXF1ZXN0IGNyb3NzLW9yaWdpbj8gRGVmYXVsdCBpcyB0byBkZXRlcm1pbmUgYXV0b21hdGljYWxseS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5sb2FkVHlwZT1SZXNvdXJjZS5MT0FEX1RZUEUuWEhSXSB7UmVzb3VyY2UuWEhSX0xPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGlzIHNwZWNpZmljIHJlc291cmNlIGNvbXBsZXRlcyBsb2FkaW5nLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFkZCA9IExvYWRlci5wcm90b3R5cGUuZW5xdWV1ZSA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIGNiKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIG9mIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hZGQobmFtZVtpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBpZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluc3RlYWQgb2YgcGFyYW1zXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYiA9IHVybCB8fCBuYW1lLmNhbGxiYWNrIHx8IG5hbWUub25Db21wbGV0ZTtcbiAgICAgICAgb3B0aW9ucyA9IG5hbWU7XG4gICAgICAgIHVybCA9IG5hbWUudXJsO1xuICAgICAgICBuYW1lID0gbmFtZS5uYW1lIHx8IG5hbWUua2V5IHx8IG5hbWUudXJsO1xuICAgIH1cblxuICAgIC8vIGNhc2Ugd2hlcmUgbm8gbmFtZSBpcyBwYXNzZWQgc2hpZnQgYWxsIGFyZ3Mgb3ZlciBieSBvbmUuXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHVybDtcbiAgICAgICAgdXJsID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBzaGlmdGVkIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIHVybC5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB1cmwgcGFzc2VkIHRvIGFkZCByZXNvdXJjZSB0byBsb2FkZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gb3B0aW9ucyBhcmUgb3B0aW9uYWwgc28gcGVvcGxlIG1pZ2h0IHBhc3MgYSBmdW5jdGlvbiBhbmQgbm8gb3B0aW9uc1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHJlc291cmNlIGFscmVhZHkgZXhpc3RzLlxuICAgIGlmICh0aGlzLnJlc291cmNlc1tuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc291cmNlIHdpdGggbmFtZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgIH1cblxuICAgIC8vIGFkZCBiYXNlIHVybCBpZiB0aGlzIGlzbid0IGFuIGFic29sdXRlIHVybFxuICAgIHVybCA9IHRoaXMuX2hhbmRsZUJhc2VVcmwodXJsKTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgc3RvcmUgdGhlIHJlc291cmNlXG4gICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0gPSBuZXcgUmVzb3VyY2UobmFtZSwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0ub25jZSgnYWZ0ZXJNaWRkbGV3YXJlJywgY2IpO1xuICAgIH1cblxuICAgIHRoaXMuX251bVRvTG9hZCsrO1xuXG4gICAgLy8gaWYgYWxyZWFkeSBsb2FkaW5nIGFkZCBpdCB0byB0aGUgd29ya2VyIHF1ZXVlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAoMTAwIC0gdGhpcy5wcm9ncmVzcykgLyAodGhpcy5fcXVldWUubGVuZ3RoKCkgKyB0aGlzLl9xdWV1ZS5ydW5uaW5nKCkpO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgYnVmZmVyIGl0IHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSBsYXRlclxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9idWZmZXIucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAxMDAgLyB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuTG9hZGVyLnByb3RvdHlwZS5faGFuZGxlQmFzZVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFyc2VkVXJsID0gdXJsUGFyc2VyLnBhcnNlKHVybCk7XG5cbiAgICAvLyBhYnNvbHV0ZSB1cmwsIGp1c3QgdXNlIGl0IGFzIGlzLlxuICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgfHwgcGFyc2VkVXJsLnBhdGhuYW1lLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBpZiBiYXNlVXJsIGRvZXNuJ3QgZW5kIGluIHNsYXNoIGFuZCB1cmwgZG9lc24ndCBzdGFydCB3aXRoIHNsYXNoLCB0aGVuIGFkZCBhIHNsYXNoIGluYmV0d2VlblxuICAgIGlmIChcbiAgICAgICAgdGhpcy5iYXNlVXJsLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmJhc2VVcmwubGFzdEluZGV4T2YoJy8nKSAhPT0gdGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgdXJsLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyAnLycgKyB1cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsICsgdXJsO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBTZXRzIHVwIGEgbWlkZGxld2FyZSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuICpiZWZvcmUqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyBwcmVcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYmVmb3JlID0gTG9hZGVyLnByb3RvdHlwZS5wcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLnB1c2goZm4pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmFmdGVyKiB0aGVcbiAqIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqXG4gKiBAYWxpYXMgdXNlXG4gKiBAcGFyYW0gbWlkZGxld2FyZSB7ZnVuY3Rpb259IFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFmdGVyID0gTG9hZGVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9hZnRlck1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoZSBxdWV1ZSBvZiB0aGUgbG9hZGVyIHRvIHByZXBhcmUgZm9yIGEgbmV3IGxvYWQuXG4gKlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvLyB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG4gICAgLy8gdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gICAgdGhpcy5fcXVldWUuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGxvYWRpbmcgdGhlIHF1ZXVlZCByZXNvdXJjZXMuXG4gKlxuICogQGZpcmVzIHN0YXJ0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgYGNvbXBsZXRlYCBldmVudC5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgLy8gcmVnaXN0ZXIgY29tcGxldGUgY2FsbGJhY2sgaWYgdGhleSBwYXNzIG9uZVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcXVldWUgaGFzIGFscmVhZHkgc3RhcnRlZCB3ZSBhcmUgZG9uZSBoZXJlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm90aWZ5IG9mIHN0YXJ0XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gc3RhcnQgdGhlIGludGVybmFsIHF1ZXVlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLl9idWZmZXJbaV0pO1xuICAgIH1cblxuICAgIC8vIGVtcHR5IHRoZSBidWZmZXJcbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBMb2FkcyBhIHNpbmdsZSByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX2xvYWRSZXNvdXJjZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZGVxdWV1ZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHJlc291cmNlLl9kZXF1ZXVlID0gZGVxdWV1ZTtcblxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gcmVzb3VyY2Uub24oJ3Byb2dyZXNzJywgc2VsZi5lbWl0LmJpbmQoc2VsZiwgJ3Byb2dyZXNzJykpO1xuXG4gICAgICAgIHJlc291cmNlLmxvYWQoc2VsZi5fYm91bmRPbkxvYWQpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgb25jZSBlYWNoIHJlc291cmNlIGhhcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzLCB0aGlzLnJlc291cmNlcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBlYWNoIHRpbWUgYSByZXNvdXJjZXMgaXMgbG9hZGVkLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQGZpcmVzIGVycm9yXG4gKiBAZmlyZXMgbG9hZFxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgdGhpcy5wcm9ncmVzcyArPSB0aGlzLl9wcm9ncmVzc0NodW5rO1xuXG4gICAgdGhpcy5lbWl0KCdwcm9ncmVzcycsIHRoaXMsIHJlc291cmNlKTtcblxuICAgIC8vIHJ1biBtaWRkbGV3YXJlLCB0aGlzICptdXN0KiBoYXBwZW4gYmVmb3JlIGRlcXVldWUgc28gc3ViLWFzc2V0cyBnZXQgYWRkZWQgcHJvcGVybHlcbiAgICB0aGlzLl9ydW5NaWRkbGV3YXJlKHJlc291cmNlLCB0aGlzLl9hZnRlck1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzb3VyY2UuZW1pdCgnYWZ0ZXJNaWRkbGV3YXJlJywgcmVzb3VyY2UpO1xuXG4gICAgICAgIHRoaXMuX251bVRvTG9hZC0tO1xuXG4gICAgICAgIC8vIGRvIGNvbXBsZXRpb24gY2hlY2tcbiAgICAgICAgaWYgKHRoaXMuX251bVRvTG9hZCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgIHRoaXMuX29uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc291cmNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgcmVzb3VyY2UuZXJyb3IsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZCcsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuXG5cbiAgICAvLyByZW1vdmUgdGhpcyByZXNvdXJjZSBmcm9tIHRoZSBhc3luYyBxdWV1ZVxuICAgIHJlc291cmNlLl9kZXF1ZXVlKCk7XG59O1xuXG4vKipcbiAqIFJ1biBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvbiBhIHJlc291cmNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX3J1bk1pZGRsZXdhcmUgPSBmdW5jdGlvbiAocmVzb3VyY2UsIGZucywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzKGZucywgZnVuY3Rpb24gKGZuLCBuZXh0KSB7XG4gICAgICAgIGZuLmNhbGwoc2VsZiwgcmVzb3VyY2UsIG5leHQpO1xuICAgIH0sIGNiLmJpbmQodGhpcywgcmVzb3VyY2UpKTtcbn07XG5cbkxvYWRlci5MT0FEX1RZUEUgPSBSZXNvdXJjZS5MT0FEX1RZUEU7XG5Mb2FkZXIuWEhSX1JFQURZX1NUQVRFID0gUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFO1xuTG9hZGVyLlhIUl9SRVNQT05TRV9UWVBFID0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEU7XG4iLCJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIF91cmwgPSByZXF1aXJlKCd1cmwnKSxcbiAgICAvLyB0ZXN0cyBpcyBDT1JTIGlzIHN1cHBvcnRlZCBpbiBYSFIsIGlmIG5vdCB3ZSBuZWVkIHRvIHVzZSBYRFJcbiAgICB1c2VYZHIgPSAhISh3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiAobmV3IFhNTEh0dHBSZXF1ZXN0KCkpKSksXG4gICAgdGVtcEFuY2hvciA9IG51bGw7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgYSBzaW5nbGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnlcbiAqIGEgc2luZ2xlIFVSTC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBuYW1lIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCBmb3IgYXVkaW8vdmlkZW8gbG9hZHMgeW91IGNhbiBwYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMuXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5jcm9zc09yaWdpbl0ge3N0cmluZ3xib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5MT0FEX1RZUEV9IEhvdyBzaG91bGQgdGhpcyByZXNvdXJjZSBiZSBsb2FkZWQ/XG4gKiBAcGFyYW0gW29wdGlvbnMueGhyVHlwZT1SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ERUZBVUxUXSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IEhvdyBzaG91bGQgdGhlIGRhdGEgYmVpbmdcbiAqICAgICAgbG9hZGVkIGJlIGludGVycHJldGVkIHdoZW4gdXNpbmcgWEhSP1xuICogQHBhcmFtIFtvcHRpb25zLm1ldGFkYXRhXSB7b2JqZWN0fSBFeHRyYSBpbmZvIGZvciBtaWRkbGV3YXJlLlxuICovXG5mdW5jdGlvbiBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggbmFtZSBhbmQgdXJsIGFyZSByZXF1aXJlZCBmb3IgY29uc3RydWN0aW5nIGEgcmVzb3VyY2UuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVybCB1c2VkIHRvIGxvYWQgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHVybCBpcyBhIGRhdGEgdXJsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzRGF0YVVybCA9IHRoaXMudXJsLmluZGV4T2YoJ2RhdGE6JykgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSB0aGF0IHdhcyBsb2FkZWQgYnkgdGhlIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55fVxuICAgICAqL1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBvcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJ2Fub255bW91cycgOiBvcHRpb25zLmNyb3NzT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCBvZiBsb2FkaW5nIHRvIHVzZSBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlLkxPQURfVFlQRX1cbiAgICAgKi9cbiAgICB0aGlzLmxvYWRUeXBlID0gb3B0aW9ucy5sb2FkVHlwZSB8fCB0aGlzLl9kZXRlcm1pbmVMb2FkVHlwZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgdXNlZCB0byBsb2FkIHRoZSByZXNvdXJjZSB2aWEgWEhSLiBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMueGhyVHlwZSA9IG9wdGlvbnMueGhyVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgKGlmIGFueSkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFcnJvcn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBYSFIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLiBUaGlzIGlzIG9ubHkgc2V0XG4gICAgICogd2hlbiBgbG9hZFR5cGVgIGlzIGBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1hNTEh0dHBSZXF1ZXN0fVxuICAgICAqL1xuICAgIHRoaXMueGhyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMganNvbi4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNKc29uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIHhtbC4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNYbWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gaW1hZ2UgdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0ltYWdlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGFuIGF1ZGlvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNBdWRpbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhIHZpZGVvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNWaWRlbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBkZXF1ZXVlYCBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgYSBzdG9yYWdlIHBsYWNlIGZvciB0aGUgYXN5bmMgcXVldWUgZGVxdWV1ZSBtZXRob2RcbiAgICAgKiB1c2VkIHByaXZhdGVseSBieSB0aGUgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kZXF1ZXVlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tcGxldGVgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZENvbXBsZXRlID0gdGhpcy5jb21wbGV0ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25FcnJvcmAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25FcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uUHJvZ3Jlc3NgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MgPSB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyk7XG5cbiAgICAvLyB4aHIgY2FsbGJhY2tzXG4gICAgdGhpcy5fYm91bmRYaHJPbkVycm9yID0gdGhpcy5feGhyT25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25BYm9ydCA9IHRoaXMuX3hock9uQWJvcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9ib3VuZFhock9uTG9hZCA9IHRoaXMuX3hock9uTG9hZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0ID0gdGhpcy5feGRyT25UaW1lb3V0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJlc291cmNlIGJlaW5ncyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBlYWNoIHRpbWUgcHJvZ3Jlc3Mgb2YgdGhpcyByZXNvdXJjZSBsb2FkIHVwZGF0ZXMuXG4gICAgICogTm90IGFsbCByZXNvdXJjZXMgdHlwZXMgYW5kIGxvYWRlciBzeXN0ZW1zIGNhbiBzdXBwb3J0IHRoaXMgZXZlbnRcbiAgICAgKiBzbyBzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIElmIHRoZSByZXNvdXJjZVxuICAgICAqIGlzIGJlaW5nIGxvYWRlZCBvbiBhIG1vZGVybiBicm93c2VyLCB1c2luZyBYSFIsIGFuZCB0aGUgcmVtb3RlIHNlcnZlclxuICAgICAqIHByb3Blcmx5IHNldHMgQ29udGVudC1MZW5ndGggaGVhZGVycywgdGhlbiB0aGlzIHdpbGwgYmUgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHRoaXMgcmVzb3VyY2UgaGFzIGxvYWRlZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGl0IHdpbGxcbiAgICAgKiBiZSBpbiB0aGUgYGVycm9yYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb21wbGV0ZVxuICAgICAqIEBtZW1iZXJvZiBSZXNvdXJjZSNcbiAgICAgKi9cbn1cblxuUmVzb3VyY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblJlc291cmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlc291cmNlO1xubW9kdWxlLmV4cG9ydHMgPSBSZXNvdXJjZTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgcmVzb3VyY2UgYXMgY29tcGxldGUuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIGluIGEgd3JhcHBlciBvciBzb21ldGhpbmcuLi5ncm9zcy4uLi5cbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvcik7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgICBpZiAodGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGhyLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub250aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMueGhyLm9ucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25sb2FkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogS2lja3Mgb2ZmIGxvYWRpbmcgb2YgdGhpcyByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gaWYgYSBjYWxsYmFjayBpcyBzZXQsIGxpc3RlbiBmb3IgY29tcGxldGUgZXZlbnRcbiAgICBpZiAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luID09PSBmYWxzZSB8fCB0eXBlb2YgdGhpcy5jcm9zc09yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHRoaXMuX2RldGVybWluZUNyb3NzT3JpZ2luKHRoaXMudXJsKTtcbiAgICB9XG5cbiAgICBzd2l0Y2godGhpcy5sb2FkVHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRTpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRJbWFnZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuQVVESU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlZJREVPOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5YSFI6XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodXNlWGRyICYmIHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGRyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGhyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEltYWdlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLnNyYyA9IHRoaXMudXJsO1xuXG4gICAgdGhpcy5pc0ltYWdlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBIVE1MQXVkaW9FbGVtZW50IG9yIEhUTUxWaWRlb0VsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdhdWRpbycgJiYgdHlwZW9mIEF1ZGlvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQXVkaW8oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBlbGVtZW50ICcgKyB0eXBlKTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBmb3IgQ29jb29uSlMgQ2FudmFzKyBydW50aW1lLCBsYWNrcyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKVxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUykge1xuICAgICAgICB0aGlzLmRhdGEuc3JjID0gQXJyYXkuaXNBcnJheSh0aGlzLnVybCkgPyB0aGlzLnVybFswXSA6IHRoaXMudXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51cmwpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXJsLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybFtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1snaXMnICsgdHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSldID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUsIGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YS5sb2FkKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhNTEh0dHBSZXF1ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBzZXQgdGhlIHJlcXVlc3QgdHlwZSBhbmQgdXJsXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsLCB0cnVlKTtcblxuICAgIC8vIGxvYWQganNvbiBhcyB0ZXh0IGFuZCBwYXJzZSBpdCBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgLy8gKmNvdWdoKiBzYWZhcmkgKmNvdWdoKiBjYW4ndCBkZWFsIHdpdGggaXQuXG4gICAgaWYgKHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTiB8fCB0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHRoaXMueGhyVHlwZTtcbiAgICB9XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkLCBmYWxzZSk7XG5cbiAgICB4aHIuc2VuZCgpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBYRG9tYWluUmVxdWVzdC4gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdXBwb3J0IElFOSAoZ3Jvc3MpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhkciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhkciA9IHRoaXMueGhyID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7XG5cbiAgICAvLyBYRG9tYWluUmVxdWVzdCBoYXMgYSBmZXcgcXVpcmtzLiBPY2Nhc2lvbmFsbHkgaXQgd2lsbCBhYm9ydCByZXF1ZXN0c1xuICAgIC8vIEEgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbWFrZSBzdXJlIEFMTCBjYWxsYmFja3MgYXJlIHNldCBldmVuIGlmIG5vdCB1c2VkXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU3ODY5NjYveGRvbWFpbnJlcXVlc3QtYWJvcnRzLXBvc3Qtb24taWUtOVxuICAgIHhkci50aW1lb3V0ID0gNTAwMDtcblxuICAgIHhkci5vbmVycm9yID0gdGhpcy5fYm91bmRYaHJPbkVycm9yO1xuICAgIHhkci5vbnRpbWVvdXQgPSB0aGlzLl9ib3VuZFhkck9uVGltZW91dDtcbiAgICB4ZHIub25wcm9ncmVzcyA9IHRoaXMuX2JvdW5kT25Qcm9ncmVzcztcbiAgICB4ZHIub25sb2FkID0gdGhpcy5fYm91bmRYaHJPbkxvYWQ7XG5cbiAgICB4ZHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gIE5vdGU6IFRoZSB4ZHIuc2VuZCgpIGNhbGwgaXMgd3JhcHBlZCBpbiBhIHRpbWVvdXQgdG8gcHJldmVudCBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmZhY2Ugd2hlcmUgc29tZSByZXF1ZXN0cyBhcmUgbG9zdFxuICAgIC8vICBpZiBtdWx0aXBsZSBYRG9tYWluUmVxdWVzdHMgYXJlIGJlaW5nIHNlbnQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAvLyBTb21lIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9pc3N1ZXMvMTI0OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB4ZHIuc2VuZCgpO1xuICAgIH0sIDApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc291cmNlIHVzZWQgaW4gbG9hZGluZyB2aWEgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSBUaGUgZWxlbWVudCB0eXBlICh2aWRlbyBvciBhdWRpbykuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSBzb3VyY2UgVVJMIHRvIGxvYWQgZnJvbS5cbiAqIEBwYXJhbSBbbWltZV0ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSBvZiB0aGUgdmlkZW9cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fY3JlYXRlU291cmNlID0gZnVuY3Rpb24gKHR5cGUsIHVybCwgbWltZSkge1xuICAgIGlmICghbWltZSkge1xuICAgICAgICBtaW1lID0gdHlwZSArICcvJyArIHVybC5zdWJzdHIodXJsLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gdXJsO1xuICAgIHNvdXJjZS50eXBlID0gbWltZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgZXJyb3JzIG91dC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgZXJyb3IgZXZlbnQgZnJvbSB0aGUgZWxlbWVudCB0aGF0IGVtaXRzIGl0LlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgZWxlbWVudCB1c2luZyAnICsgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgcHJvZ3Jlc3MgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fb25Qcm9ncmVzcyA9ICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGVycm9yIGV2ZW50IGZpcmVzIGZvciB4aHIveGRyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RFcnJvckV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIHJlcVR5cGUodGhpcy54aHIpICsgJyBSZXF1ZXN0IGZhaWxlZC4gJyArXG4gICAgICAgICdTdGF0dXM6ICcgKyB0aGlzLnhoci5zdGF0dXMgKyAnLCB0ZXh0OiBcIicgKyB0aGlzLnhoci5zdGF0dXNUZXh0ICsgJ1wiJ1xuICAgICk7XG5cbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhbiBhYm9ydCBldmVudCBmaXJlcyBmb3IgeGhyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RBYm9ydEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3Qgd2FzIGFib3J0ZWQgYnkgdGhlIHVzZXIuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYSB0aW1lb3V0IGV2ZW50IGZpcmVzIGZvciB4ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGRyT25UaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgdGltZWQgb3V0LicpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gZGF0YSBzdWNjZXNzZnVsbHkgbG9hZHMgZnJvbSBhbiB4aHIveGRyIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdExvYWRFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGhyT25Mb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB4aHIgPSB0aGlzLnhocixcbiAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1cyAhPT0gdW5kZWZpbmVkID8geGhyLnN0YXR1cyA6IDIwMDsgLy9YRFIgaGFzIG5vIGAuc3RhdHVzYCwgYXNzdW1lIDIwMC5cblxuICAgIC8vIHN0YXR1cyBjYW4gYmUgMCB3aGVuIHVzaW5nIHRoZSBmaWxlOi8vIHByb3RvY29sLCBhbHNvIGNoZWNrIGlmIGEgcmVzcG9uc2Ugd2FzIGZvdW5kXG4gICAgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA0IHx8IChzdGF0dXMgPT09IDAgJiYgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkge1xuICAgICAgICAvLyBpZiB0ZXh0LCBqdXN0IHJldHVybiBpdFxuICAgICAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGpzb24sIHBhcnNlIGludG8ganNvbiBvYmplY3RcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0pzb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGxvYWRlZCBqc29uOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHhtbCwgcGFyc2UgaW50byBhbiB4bWwgZG9jdW1lbnQgb3IgZGl2IGVsZW1lbnRcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LkRPTVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhoci5yZXNwb25zZVRleHQsICd0ZXh0L3htbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZGl2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzWG1sID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIHhtbDonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlciB0eXBlcyBqdXN0IHJldHVybiB0aGUgcmVzcG9uc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2UgfHwgeGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignWycgKyB4aHIuc3RhdHVzICsgJ10nICsgeGhyLnN0YXR1c1RleHQgKyAnOicgKyB4aHIucmVzcG9uc2VVUkwpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbmZ1bmN0aW9uIHJlcVR5cGUoeGhyKSB7XG4gICAgcmV0dXJuIHhoci50b1N0cmluZygpLnJlcGxhY2UoJ29iamVjdCAnLCAnJyk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYGNyb3NzT3JpZ2luYCBwcm9wZXJ0eSBmb3IgdGhpcyByZXNvdXJjZSBiYXNlZCBvbiBpZiB0aGUgdXJsXG4gKiBmb3IgdGhpcyByZXNvdXJjZSBpcyBjcm9zcy1vcmlnaW4uIElmIGNyb3NzT3JpZ2luIHdhcyBtYW51YWxseSBzZXQsIHRoaXNcbiAqIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIHRvIHRlc3QuXG4gKiBAcGFyYW0gW2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbl0ge29iamVjdH0gVGhlIGxvY2F0aW9uIG9iamVjdCB0byB0ZXN0IGFnYWluc3QuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjcm9zc09yaWdpbiB2YWx1ZSB0byB1c2UgKG9yIGVtcHR5IHN0cmluZyBmb3Igbm9uZSkuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbiAodXJsLCBsb2MpIHtcbiAgICAvLyBkYXRhOiBhbmQgamF2YXNjcmlwdDogdXJscyBhcmUgY29uc2lkZXJlZCBzYW1lLW9yaWdpblxuICAgIGlmICh1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBpcyB3aW5kb3cubG9jYXRpb25cbiAgICBsb2MgPSBsb2MgfHwgd2luZG93LmxvY2F0aW9uO1xuXG4gICAgaWYgKCF0ZW1wQW5jaG9yKSB7XG4gICAgICAgIHRlbXBBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgfVxuXG4gICAgLy8gbGV0IHRoZSBicm93c2VyIGRldGVybWluZSB0aGUgZnVsbCBocmVmIGZvciB0aGUgdXJsIG9mIHRoaXMgcmVzb3VyY2UgYW5kIHRoZW5cbiAgICAvLyBwYXJzZSB3aXRoIHRoZSBub2RlIHVybCBsaWIsIHdlIGNhbid0IHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgICAvLyBiZWNhdXNlIHRoZXkgZG9uJ3Qgd29yayBpbiBJRTkgOihcbiAgICB0ZW1wQW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgdXJsID0gX3VybC5wYXJzZSh0ZW1wQW5jaG9yLmhyZWYpO1xuXG4gICAgdmFyIHNhbWVQb3J0ID0gKCF1cmwucG9ydCAmJiBsb2MucG9ydCA9PT0gJycpIHx8ICh1cmwucG9ydCA9PT0gbG9jLnBvcnQpO1xuXG4gICAgLy8gaWYgY3Jvc3Mgb3JpZ2luXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gbG9jLmhvc3RuYW1lIHx8ICFzYW1lUG9ydCB8fCB1cmwucHJvdG9jb2wgIT09IGxvYy5wcm90b2NvbCkge1xuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZXNwb25zZVR5cGUgb2YgYW4gWEhSIHJlcXVlc3QgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGVcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSByZXNwb25zZVR5cGUgdG8gdXNlLlxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZVhoclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlc291cmNlLl94aHJUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVMb2FkVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX2xvYWRUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXMudXJsLFxuICAgICAgICBleHQ7XG5cbiAgICBpZiAodGhpcy5pc0RhdGFVcmwpIHtcbiAgICAgICAgdmFyIHNsYXNoSW5kZXggPSB1cmwuaW5kZXhPZignLycpO1xuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHNsYXNoSW5kZXggKyAxLCB1cmwuaW5kZXhPZignOycsIHNsYXNoSW5kZXgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBxdWVyeVN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXh0ID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQ7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG1pbWUgdHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgcmVzcG9uc2VUeXBlIG9mXG4gKiByZXNvdXJjZSBiZWluZyBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZ2V0TWltZUZyb21YaHJUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5JztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0I6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2Jsb2InO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQ6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCc7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQ6XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVDpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG5cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsb2FkaW5nIGEgcmVzb3VyY2UgY2FuIHVzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBMT0FEX1RZUEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuWEhSIC0gVXNlcyBYTUxIdHRwUmVxdWVzdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuSU1BR0UgLSBVc2VzIGFuIGBJbWFnZWAgb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5BVURJTyAtIFVzZXMgYW4gYEF1ZGlvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLlZJREVPIC0gVXNlcyBhIGBWaWRlb2Agb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICovXG5SZXNvdXJjZS5MT0FEX1RZUEUgPSB7XG4gICAgWEhSOiAgICAxLFxuICAgIElNQUdFOiAgMixcbiAgICBBVURJTzogIDMsXG4gICAgVklERU86ICA0XG59O1xuXG4vKipcbiAqIFRoZSBYSFIgcmVhZHkgc3RhdGVzLCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gWEhSX1JFQURZX1NUQVRFXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLlVOU0VOVCAtIG9wZW4oKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5PUEVORUQgLSBzZW5kKCloYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuSEVBREVSU19SRUNFSVZFRCAtIHNlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuTE9BRElORyAtIERvd25sb2FkaW5nOyByZXNwb25zZVRleHQgaG9sZHMgcGFydGlhbCBkYXRhLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5ET05FIC0gVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFID0ge1xuICAgIFVOU0VOVDogMCxcbiAgICBPUEVORUQ6IDEsXG4gICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICBMT0FESU5HOiAzLFxuICAgIERPTkU6IDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVTUE9OU0VfVFlQRVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQgLSBkZWZhdWx0cyB0byB0ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSIC0gQXJyYXlCdWZmZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CTE9CIC0gQmxvYlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UIC0gRG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5KU09OIC0gT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCAtIFN0cmluZ1xuICovXG5SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRSA9IHtcbiAgICBERUZBVUxUOiAgICAndGV4dCcsXG4gICAgQlVGRkVSOiAgICAgJ2FycmF5YnVmZmVyJyxcbiAgICBCTE9COiAgICAgICAnYmxvYicsXG4gICAgRE9DVU1FTlQ6ICAgJ2RvY3VtZW50JyxcbiAgICBKU09OOiAgICAgICAnanNvbicsXG4gICAgVEVYVDogICAgICAgJ3RleHQnXG59O1xuXG5SZXNvdXJjZS5fbG9hZFR5cGVNYXAgPSB7XG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnYm1wJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGdhJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0Vcbn07XG5cblJlc291cmNlLl94aHJUeXBlTWFwID0ge1xuICAgIC8vIHhtbFxuICAgICd4aHRtbCc6ICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG1sJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG0nOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd4bWwnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0bXgnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0c3gnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdzdmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuXG4gICAgLy8gaW1hZ2VzXG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAncG5nJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBlZyc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnd2VicCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG5cbiAgICAvLyBqc29uXG4gICAgJ2pzb24nOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTixcblxuICAgIC8vIHRleHRcbiAgICAndGV4dCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhULFxuICAgICd0eHQnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFRcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSBsb2FkVHlwZSB7UmVzb3VyY2UuTE9BRF9UWVBFfSBUaGUgbG9hZCB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uTG9hZFR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgbG9hZFR5cGUpIHtcbiAgICBzZXRFeHRNYXAoUmVzb3VyY2UuX2xvYWRUeXBlTWFwLCBleHRuYW1lLCBsb2FkVHlwZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGxvYWQgdHlwZSB0byBiZSB1c2VkIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZXh0bmFtZSB7c3RyaW5nfSBUaGUgZXh0ZW5zaW9uIHRvIHNldCB0aGUgdHlwZSBmb3IsIGUuZy4gXCJwbmdcIiBvciBcImZudFwiXG4gKiBAcGFyYW0geGhyVHlwZSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSB4aHIgdHlwZSB0byBzZXQgaXQgdG8uXG4gKi9cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgeGhyVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5feGhyVHlwZU1hcCwgZXh0bmFtZSwgeGhyVHlwZSk7XG59O1xuXG5mdW5jdGlvbiBzZXRFeHRNYXAobWFwLCBleHRuYW1lLCB2YWwpIHtcbiAgICBpZiAoZXh0bmFtZSAmJiBleHRuYW1lLmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICBleHRuYW1lID0gZXh0bmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRuYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYXBbZXh0bmFtZV0gPSB2YWw7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIHByaXZhdGUgcHJvcGVydHlcbiAgICBfa2V5U3RyOiBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIsXG5cbiAgICBlbmNvZGVCaW5hcnk6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICAgICAgdmFyIGJ5dGVidWZmZXI7XG4gICAgICAgIHZhciBlbmNvZGVkQ2hhckluZGV4ZXMgPSBuZXcgQXJyYXkoNCk7XG4gICAgICAgIHZhciBpbnggPSAwO1xuICAgICAgICB2YXIgam54ID0gMDtcbiAgICAgICAgdmFyIHBhZGRpbmdCeXRlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmlsbCBieXRlIGJ1ZmZlciBhcnJheVxuICAgICAgICAgICAgYnl0ZWJ1ZmZlciA9IG5ldyBBcnJheSgzKTtcbiAgICAgICAgICAgIGZvciAoam54ID0gMDsgam54IDwgYnl0ZWJ1ZmZlci5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhd2F5IGhpZ2gtb3JkZXIgYnl0ZSwgYXMgZG9jdW1lbnRlZCBhdDpcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1MSHR0cFJlcXVlc3QjSGFuZGxpbmdfYmluYXJ5X2RhdGFcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gaW5wdXQuY2hhckNvZGVBdChpbngrKykgJiAweGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCBlYWNoIGVuY29kZWQgY2hhcmFjdGVyLCA2IGJpdHMgYXQgYSB0aW1lXG4gICAgICAgICAgICAvLyBpbmRleCAxOiBmaXJzdCA2IGJpdHNcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1swXSA9IGJ5dGVidWZmZXJbMF0gPj4gMjtcbiAgICAgICAgICAgIC8vIGluZGV4IDI6IHNlY29uZCA2IGJpdHMgKDIgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMSArIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAyKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzFdID0gKChieXRlYnVmZmVyWzBdICYgMHgzKSA8PCA0KSB8IChieXRlYnVmZmVyWzFdID4+IDQpO1xuICAgICAgICAgICAgLy8gaW5kZXggMzogdGhpcmQgNiBiaXRzICg0IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBpbnB1dCBieXRlIDIgKyAyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1syXSA9ICgoYnl0ZWJ1ZmZlclsxXSAmIDB4MGYpIDw8IDIpIHwgKGJ5dGVidWZmZXJbMl0gPj4gNik7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiBmb3J0aCA2IGJpdHMgKDYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IGJ5dGVidWZmZXJbMl0gJiAweDNmO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBwYWRkaW5nIGhhcHBlbmVkLCBhbmQgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBwYWRkaW5nQnl0ZXMgPSBpbnggLSAoaW5wdXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhZGRpbmdCeXRlcykge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxhc3QgMiBjaGFyYWN0ZXJzIHRvIHBhZGRpbmcgY2hhclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbM10gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCBjaGFyYWN0ZXIgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBObyBwYWRkaW5nIC0gcHJvY2VlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb3cgd2Ugd2lsbCBncmFiIGVhY2ggYXBwcm9wcmlhdGUgY2hhcmFjdGVyIG91dCBvZiBvdXIga2V5c3RyaW5nXG4gICAgICAgICAgICAvLyBiYXNlZCBvbiBvdXIgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCBpdCB0byB0aGUgb3V0cHV0IHN0cmluZ1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBlbmNvZGVkQ2hhckluZGV4ZXMubGVuZ3RoOyBqbngrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSB0aGlzLl9rZXlTdHIuY2hhckF0KGVuY29kZWRDaGFySW5kZXhlc1tqbnhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vTG9hZGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJlc291cmNlID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5taWRkbGV3YXJlID0ge1xuICAgIGNhY2hpbmc6IHtcbiAgICAgICAgbWVtb3J5OiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL2NhY2hpbmcvbWVtb3J5JylcbiAgICB9LFxuICAgIHBhcnNpbmc6IHtcbiAgICAgICAgYmxvYjogcmVxdWlyZSgnLi9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2InKVxuICAgIH1cbn07XG4iLCIvLyBhIHNpbXBsZSBpbi1tZW1vcnkgY2FjaGUgZm9yIHJlc291cmNlc1xudmFyIGNhY2hlID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgLy8gaWYgY2FjaGVkLCB0aGVuIHNldCBkYXRhIGFuZCBjb21wbGV0ZSB0aGUgcmVzb3VyY2VcbiAgICAgICAgaWYgKGNhY2hlW3Jlc291cmNlLnVybF0pIHtcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBjYWNoZVtyZXNvdXJjZS51cmxdO1xuICAgICAgICAgICAgcmVzb3VyY2UuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBub3QgY2FjaGVkLCB3YWl0IGZvciBjb21wbGV0ZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlLm9uY2UoJ2NvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgY2FjaGVbdGhpcy51cmxdID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJy4uLy4uL1Jlc291cmNlJyksXG4gICAgYjY0ID0gcmVxdWlyZSgnLi4vLi4vYjY0Jyk7XG5cbndpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cbi8vIGEgbWlkZGxld2FyZSBmb3IgdHJhbnNmb3JtaW5nIFhIUiBsb2FkZWQgQmxvYnMgaW50byBtb3JlIHVzZWZ1bCBvYmplY3RzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgYW4gWEhSIGxvYWQgb2YgYSBibG9iXG4gICAgICAgIGlmIChyZXNvdXJjZS54aHIgJiYgcmVzb3VyY2UueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQikge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYmxvYiBzdXBwb3J0IHdlIHByb2JhYmx5IGdvdCBhIGJpbmFyeSBzdHJpbmcgYmFja1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuQmxvYiB8fCB0eXBlb2YgcmVzb3VyY2UuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlc291cmNlLnhoci5nZXRSZXNwb25zZUhlYWRlcignY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGltYWdlLCBjb252ZXJ0IHRoZSBiaW5hcnkgc3RyaW5nIGludG8gYSBkYXRhIHVybFxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIHR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gJ2RhdGE6JyArIHR5cGUgKyAnO2Jhc2U2NCwnICsgYjY0LmVuY29kZUJpbmFyeShyZXNvdXJjZS54aHIucmVzcG9uc2VUZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5pc0ltYWdlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IHVudGlsIHRoZSBpbWFnZSBsb2FkcyBhbmQgdGhlbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnQgdHlwZSBzYXlzIHRoaXMgaXMgYW4gaW1hZ2UsIHRoZW4gd2Ugc2hvdWxkIHRyYW5zZm9ybSB0aGUgYmxvYiBpbnRvIGFuIEltYWdlIG9iamVjdFxuICAgICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UuZGF0YS50eXBlLmluZGV4T2YoJ2ltYWdlJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXNvdXJjZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmJsb2IgPSByZXNvdXJjZS5kYXRhO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLnNyYyA9IHNyYztcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCB0aGUgbm8gbG9uZ2VyIHVzZWQgYmxvYiBhZnRlciB0aGUgaW1hZ2UgbG9hZHNcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChzcmMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwicGl4aS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIzLjAuMTAtZGV2XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJQaXhpLmpzIGlzIGEgZmFzdCBsaWdodHdlaWdodCAyRCBsaWJyYXJ5IHRoYXQgd29ya3MgYWNyb3NzIGFsbCBkZXZpY2VzLlwiLFxuICBcImF1dGhvclwiOiBcIk1hdCBHcm92ZXNcIixcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIFwiQ2hhZCBFbmdsZXIgPGNoYWRAcGFudGhlcmRldi5jb20+XCIsXG4gICAgXCJSaWNoYXJkIERhdmV5IDxyZGF2ZXlAZ21haWwuY29tPlwiXG4gIF0sXG4gIFwibWFpblwiOiBcIi4vc3JjL2luZGV4LmpzXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ29vZGJveWRpZ2l0YWwuY29tL1wiLFxuICBcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzXCIsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJzdGFydFwiOiBcImd1bHAgJiYgZ3VscCB3YXRjaFwiLFxuICAgIFwidGVzdFwiOiBcImd1bHAgJiYgdGVzdGVtIGNpXCIsXG4gICAgXCJidWlsZFwiOiBcImd1bHBcIixcbiAgICBcImRvY3NcIjogXCJqc2RvYyAtYyAuL2d1bHAvdXRpbC9qc2RvYy5jb25mLmpzb24gLVIgUkVBRE1FLm1kXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW4vXCIsXG4gICAgXCJzcmMvXCIsXG4gICAgXCJDT05UUklCVVRJTkcubWRcIixcbiAgICBcIkxJQ0VOU0VcIixcbiAgICBcInBhY2thZ2UuanNvblwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYXN5bmNcIjogXCJeMS41LjBcIixcbiAgICBcImJyZnNcIjogXCJeMS40LjFcIixcbiAgICBcImVhcmN1dFwiOiBcIl4yLjAuN1wiLFxuICAgIFwiZXZlbnRlbWl0dGVyM1wiOiBcIl4xLjEuMVwiLFxuICAgIFwiZ2wtbWF0cml4XCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS90b2ppL2dsLW1hdHJpeC5naXRcIixcbiAgICBcIm9iamVjdC1hc3NpZ25cIjogXCJeNC4wLjFcIixcbiAgICBcInBpeGktZ2wtY29yZVwiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vR29vZEJveURpZ2l0YWwvcGl4aS1nbC1jb3JlLmdpdFwiLFxuICAgIFwicmVzb3VyY2UtbG9hZGVyXCI6IFwiXjEuNi40XCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYnJvd3NlcmlmeVwiOiBcIl4xMS4xLjBcIixcbiAgICBcImNoYWlcIjogXCJeMy4yLjBcIixcbiAgICBcImRlbFwiOiBcIl4yLjAuMlwiLFxuICAgIFwiZ3VscFwiOiBcIl4zLjkuMFwiLFxuICAgIFwiZ3VscC1jYWNoZWRcIjogXCJeMS4xLjBcIixcbiAgICBcImd1bHAtY29uY2F0XCI6IFwiXjIuNi4wXCIsXG4gICAgXCJndWxwLWRlYnVnXCI6IFwiXjIuMS4wXCIsXG4gICAgXCJndWxwLWhlYWRlclwiOiBcIl4xLjcuMVwiLFxuICAgIFwiZ3VscC1qc2hpbnRcIjogXCJeMS4xMS4yXCIsXG4gICAgXCJndWxwLW1pcnJvclwiOiBcIl4wLjQuMFwiLFxuICAgIFwiZ3VscC1wbHVtYmVyXCI6IFwiXjEuMC4xXCIsXG4gICAgXCJndWxwLXJlbmFtZVwiOiBcIl4xLjIuMlwiLFxuICAgIFwiZ3VscC1zb3VyY2VtYXBzXCI6IFwiXjEuNS4yXCIsXG4gICAgXCJndWxwLXVnbGlmeVwiOiBcIl4xLjQuMVwiLFxuICAgIFwiZ3VscC11dGlsXCI6IFwiXjMuMC42XCIsXG4gICAgXCJqYWd1YXJqcy1qc2RvY1wiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vZGF2aWRzaGltanMvamFndWFyanMtanNkb2MuZ2l0XCIsXG4gICAgXCJqc2RvY1wiOiBcIl4zLjMuMlwiLFxuICAgIFwianNoaW50LXN1bW1hcnlcIjogXCJeMC40LjBcIixcbiAgICBcIm1pbmltaXN0XCI6IFwiXjEuMi4wXCIsXG4gICAgXCJtb2NoYVwiOiBcIl4yLjMuMlwiLFxuICAgIFwicmVxdWlyZS1kaXJcIjogXCJeMC4zLjBcIixcbiAgICBcInJ1bi1zZXF1ZW5jZVwiOiBcIl4xLjEuMlwiLFxuICAgIFwidGVzdGVtXCI6IFwiXjAuOS40XCIsXG4gICAgXCJ2aW55bC1idWZmZXJcIjogXCJeMS4wLjBcIixcbiAgICBcInZpbnlsLXNvdXJjZS1zdHJlYW1cIjogXCJeMS4xLjBcIixcbiAgICBcIndhdGNoaWZ5XCI6IFwiXjMuNC4wXCJcbiAgfSxcbiAgXCJicm93c2VyaWZ5XCI6IHtcbiAgICBcInRyYW5zZm9ybVwiOiBbXG4gICAgICBcImJyZnNcIlxuICAgIF1cbiAgfVxufVxuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8vIGFkZCBzb21lIGV4dHJhIHZhcmlhYmxlcyB0byB0aGUgY29udGFpbmVyLi5cbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKVxuKTtcblxuXG4vKipcbiAqIFRoZSBBY2Nlc3NpYmlsaXR5IG1hbmFnZXIgcmVhY3JlYXRlcyB0aGUgYWJpbGl0eSB0byB0YWIgYW5kIGFuZCBoYXZlIGNvbnRlbnQgcmVhZCBieSBzY3JlZW4gcmVhZGVycy4gVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCBhcyBpdCBjYW4gcG9zc2libHkgaGVscCBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMgYWNjZXNzIHBpeGkgY29udGVudC5cbiAqIE11Y2ggbGlrZSBpbnRlcmFjdGlvbiBhbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgbWFkZSBhY2Nlc3NpYmxlLiBUaGlzIG1hbmFnZXIgd2lsbCBtYXAgdGhlIGV2ZW50cyBhcyBpZiB0aGUgbW91c2Ugd2FzIGJlaW5nIHVzZWQsIG1pbmltaXppbmcgdGhlIGVmZmVyb3QgcmVxdWlyZWQgdG8gaW1wbGVtZW50LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyXG4gKi9cbmZ1bmN0aW9uIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKHJlbmRlcmVyKVxue1xuXHQvLyBmaXJzdCB3ZSBjcmVhdGUgYSBkaXYgdGhhdCB3aWxsIHNpdCBvdmVyIHRoZSBwaXhpIGVsZW1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGRpdiBvdmVybGF5cyB3aWxsIGdvLlxuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBcbiAgICBkaXYuc3R5bGUud2lkdGggPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgZGl2LnN0eWxlLnRvcCA9IDA7XG4gICAgZGl2LnN0eWxlLmxlZnQgPSAwO1xuICAgLy9cbiAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcbiAgIFx0XG4gICBcdC8qKlxuICAgXHQgKiBUaGlzIGlzIHRoZSBkb20gZWxlbWVudCB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuICAgXHR0aGlzLmRpdiA9IGRpdjtcblxuICAgXHQvKipcbiAgIFx0ICogQSBzaW1wbGUgcG9vbCBmb3Igc3RvcmluZyBkaXZzLlxuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0FycmF5fVxuICAgXHQgKiBAcHJpdmF0ZVxuICAgXHQgKi9cbiBcdHRoaXMucG9vbCA9IFtdO1xuXG4gXHQvKipcbiBcdCAqIFRoaXMgaXMgYSB0aWNrIHVzZWQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIG5vIGxvbmdlciBiZWluZyByZW5kZXJlZC5cbiBcdCAqIFxuIFx0ICogQHR5cGUge051bWJlcn1cbiBcdCAqIEBwcml2YXRlXG4gXHQgKi9cbiAgIFx0dGhpcy5yZW5kZXJJZCA9IDA7XG5cbiAgIFx0LyoqXG4gICBcdCAqIFNldHRpbmcgdGhpcyB0byB0cnVlIHdpbGwgdmlzdWFsbHkgc2hvdyB0aGUgZGl2c1xuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0Jvb2xlYW59XG4gICBcdCAqL1xuICAgXHR0aGlzLmRlYnVnID0gZmFsc2U7XG5cbiAgXHQvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBhY2Nlc3NpYmlsaXR5IG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgIFx0dGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICBcdC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjdXJyZW50bHkgYWN0aXZlIGFjY2Vzc2libGUgaXRlbXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgXHR0aGlzLmNoaWxkcmVuID0gW107XG4gICBcdFxuICAgXHQvKipcbiAgICAgKiBwcmUgYmluZCB0aGUgZnVuY3Rpb25zLi5cbiAgICAgKi9cbiAgIFx0dGhpcy5fb25LZXlEb3duID0gdGhpcy5fb25LZXlEb3duLmJpbmQodGhpcyk7XG4gICBcdHRoaXMuX29uTW91c2VNb3ZlID0gdGhpcy5fb25Nb3VzZU1vdmUuYmluZCh0aGlzKTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHN0b3JlcyB0aGUgc3RhdGUgb2YgdGhlIG1hbmFnZXIuIElmIHRoZXJlIGFyZSBubyBhY2Nlc3NpYmxlIG9iamVjdHMgb3IgdGhlIG1vdXNlIGlzIG1vdmluZyB0aGUgd2lsbCBiZSBmYWxzZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcblxuXG4gICBcdC8vIGxldCBsaXN0ZW4gZm9yIHRhYi4uIG9uY2UgcHJlc3NlZCB3ZSBjYW4gZmlyZSB1cCBhbmQgc2hvdyB0aGUgYWNjZXNzaWJpbGl0eSBsYXllclxuICAgXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xufVxuXG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBBY2Nlc3NpYmlsaXR5TWFuYWdlcjtcblxuLyoqXG4gKiBBY3RpdmF0aW5nIHdpbGwgY2F1c2UgdGhlIEFjY2Vzc2liaWxpdHkgbGF5ZXIgdG8gYmUgc2hvd24uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIHByZXNlcyB0aGUgdGFiIGtleVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IHRydWU7XG5cblx0d2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCB0cnVlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9uKCdwb3N0cmVuZGVyJywgdGhpcy51cGRhdGUsIHRoaXMpO1xuXG5cdHRoaXMucmVuZGVyZXIudmlldy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuZGl2KTtcdFxufTtcblxuLyoqXG4gKiBEZWFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBoaWRkZW4uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIG1vdmVzIHRoZSBtb3VzZVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmRlYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKCF0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG5cblx0dGhpcy5yZW5kZXJlci5vZmYoJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSk7XG5cblx0dGhpcy5kaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmRpdik7XG5cbn07XG5cbi8qKlxuICogVGhpcyByZWN1cnNpdmUgZnVuY3Rpb24gd2lsbCBydW4gdGhyb3VnaHQgaGUgc2NlbmUgZ3JhcGggYW5kIGFkZCBhbnkgbmV3IGFjY2Vzc2libGUgb2JqZWN0cyB0byB0aGUgRE9NIGxheWVyLlxuICogQHBhcmFtIGVsZW1lbnQge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIERpc3BsYXlPYmplY3QgdG8gY2hlY2suXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlQWNjZXNzaWJsZU9iamVjdHMgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuXHRpZighZGlzcGxheU9iamVjdC52aXNpYmxlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYoZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlICYmIGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG5cdHtcblx0XHRpZighZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZUFjdGl2ZSlcblx0XHR7XG5cdFx0XHR0aGlzLmFkZENoaWxkKGRpc3BsYXlPYmplY3QpO1xuXHRcdH1cblx0ICAgXHRcblx0ICAgXHRkaXNwbGF5T2JqZWN0LnJlbmRlcklkID0gdGhpcy5yZW5kZXJJZDtcblx0fVxuXG5cdHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG5cblx0Zm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XG5cdFx0dGhpcy51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyhjaGlsZHJlbltpXSk7XG5cdH1cbn07XG5cblxuLyoqXG4gKiBCZWZvcmUgZWFjaCByZW5kZXIgdGhpcyBmdW5jdGlvbiB3aWxsIGVuc3VyZSB0aGF0IGFsbCBkaXZzIGFyZSBtYXBwZWQgY29ycmVjdGx5IHRvIHRoZWlyIERpc3BsYXlPYmplY3RzXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oKVxue1xuXG5cdC8vIHVwZGF0ZSBjaGlsZHJlbi4uLlxuXHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCk7XG5cblx0dmFyIHJlY3QgPSB0aGlzLnJlbmRlcmVyLnZpZXcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdHZhciBzeCA9IHJlY3Qud2lkdGggIC8gdGhpcy5yZW5kZXJlci53aWR0aDtcblx0dmFyIHN5ID0gcmVjdC5oZWlnaHQgLyB0aGlzLnJlbmRlcmVyLmhlaWdodDtcblxuXHR2YXIgZGl2ID0gdGhpcy5kaXY7XG5cblx0ZGl2LnN0eWxlLmxlZnQgPSByZWN0LmxlZnQgKyAncHgnO1xuXHRkaXYuc3R5bGUudG9wID0gcmVjdC50b3AgKyAncHgnO1xuXHRkaXYuc3R5bGUud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoICsgJ3B4Jztcblx0ZGl2LnN0eWxlLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0ICsgJ3B4JztcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblxuXHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cblx0XHRpZihjaGlsZC5yZW5kZXJJZCAhPT0gdGhpcy5yZW5kZXJJZClcblx0XHR7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGksIDEpO1xuXHRcdFx0dGhpcy5kaXYucmVtb3ZlQ2hpbGQoIGNoaWxkLl9hY2Nlc3NpYmxlRGl2ICk7XG5cdFx0XHR0aGlzLnBvb2wucHVzaChjaGlsZC5fYWNjZXNzaWJsZURpdik7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZURpdiA9IG51bGw7XG5cblx0XHRcdGktLTtcblxuXHRcdFx0aWYodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0Ly8gbWFwIGRpdiB0byBkaXNwbGF5Li5cblx0XHRcdGRpdiA9IGNoaWxkLl9hY2Nlc3NpYmxlRGl2O1xuXHRcdFx0dmFyIGhpdEFyZWEgPSBjaGlsZC5oaXRBcmVhO1xuXHRcdFx0dmFyIHd0ID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cblx0XHRcdGlmKGNoaWxkLmhpdEFyZWEpXG5cdFx0XHR7XG5cdFx0XHRcdGRpdi5zdHlsZS5sZWZ0ID0gKCh3dC50eCArIChoaXRBcmVhLnggKiB3dC5hKSkgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gICgod3QudHkgKyAoaGl0QXJlYS55ICogd3QuZCkpICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiB3dC5hICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLmhlaWdodCA9IChoaXRBcmVhLmhlaWdodCAqIHd0LmQgKiBzeSkgKyAncHgnO1xuXHRcdFx0XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdGhpdEFyZWEgPSBjaGlsZC5nZXRCb3VuZHMoKTtcblxuXHRcdFx0XHR0aGlzLmNhcEhpdEFyZWEoaGl0QXJlYSk7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoaGl0QXJlYS54ICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLnRvcCA9ICAoaGl0QXJlYS55ICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogc3kpICsgJ3B4Jztcblx0XHRcdH1cdFx0XG5cdFx0fVxuXHR9XG5cblx0Ly8gaW5jcmVtZW50IHRoZSByZW5kZXIgaWQuLlxuXHR0aGlzLnJlbmRlcklkKys7XG59O1xuXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuY2FwSGl0QXJlYSA9IGZ1bmN0aW9uIChoaXRBcmVhKVxue1xuICAgIGlmIChoaXRBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS53aWR0aCArPSBoaXRBcmVhLng7XG4gICAgICAgIGhpdEFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGhpdEFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCArPSBoaXRBcmVhLnk7XG4gICAgICAgIGhpdEFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBoaXRBcmVhLnggKyBoaXRBcmVhLndpZHRoID4gdGhpcy5yZW5kZXJlci53aWR0aCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoID0gdGhpcy5yZW5kZXJlci53aWR0aCAtIGhpdEFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueSArIGhpdEFyZWEuaGVpZ2h0ID4gdGhpcy5yZW5kZXJlci5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmhlaWdodCAtIGhpdEFyZWEueTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogQWRkcyBhIERpc3BsYXlPYmplY3QgdG8gdGhlIGFjY2Vzc2liaWxpdHkgbWFuYWdlclxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24oZGlzcGxheU9iamVjdClcbntcbi8vXHR0aGlzLmFjdGl2YXRlKCk7XG5cdFxuXHR2YXIgZGl2ID0gdGhpcy5wb29sLnBvcCgpO1xuXG5cdGlmKCFkaXYpXG5cdHtcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgXG5cblx0ICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG5cdCAgICBkaXYuc3R5bGUuaGVpZ2h0ID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmRlYnVnID8gJ3JnYmEoMjU1LDAsMCwwLjUpJyA6ICd0cmFuc3BhcmVudCc7XG5cdCAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXHQgICAgZGl2LnN0eWxlLnpJbmRleCA9IDI7XG5cdCAgICBkaXYuc3R5bGUuYm9yZGVyU3R5bGUgPSAnbm9uZSc7XG5cblx0ICAgIFxuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGljay5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKSk7XG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCB0aGlzLl9vbkZvY3VzT3V0LmJpbmQodGhpcykpO1xuXHR9XG5cdCAgIFx0XG5cblxuXG5cdGRpdi50aXRsZSA9IGRpc3BsYXlPYmplY3QuYWNjZXNzaWJsZVRpdGxlIHx8ICdkaXNwbGF5T2JqZWN0ICcgKyB0aGlzLnRhYkluZGV4O1xuXG5cdC8vXG5cdFxuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlID0gdHJ1ZTtcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiA9IGRpdjtcblx0ZGl2LmRpc3BsYXlPYmplY3QgPSBkaXNwbGF5T2JqZWN0O1xuXG5cblx0dGhpcy5jaGlsZHJlbi5wdXNoKGRpc3BsYXlPYmplY3QpO1xuXHR0aGlzLmRpdi5hcHBlbmRDaGlsZCggZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiApO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2LnRhYkluZGV4ID0gZGlzcGxheU9iamVjdC50YWJJbmRleDtcbn07XG5cblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgYnV0dG9uIHByZXNzIHRvIHBpeGkncyBJbnRlcmFjdGlvbk1hbmFnZXIgKGNsaWNrKVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkNsaWNrID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ2NsaWNrJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW92ZXIpXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uRm9jdXMgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW91dClcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1c091dCA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIGtleSBpcyBwcmVzc2VkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbktleURvd24gPSBmdW5jdGlvbihlKVxue1xuXHRpZihlLmtleUNvZGUgIT09IDkpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmFjdGl2YXRlKCk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uTW91c2VNb3ZlID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmRlYWN0aXZhdGUoKTtcbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKlxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIFxue1xuXHR0aGlzLmRpdiA9IG51bGw7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHR7XG5cdFx0dGhpcy5jaGlsZHJlbltpXS5kaXYgPSBudWxsO1xuXHR9XG5cblx0XG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duKTtcblx0XHRcblx0dGhpcy5wb29sID0gbnVsbDtcblx0dGhpcy5jaGlsZHJlbiA9IG51bGw7XG5cdHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdhY2Nlc3NpYmlsaXR5JywgQWNjZXNzaWJpbGl0eU1hbmFnZXIpO1xuXG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGFjY2Vzc2libGUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlNYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5hY2Nlc3NpYmlsaXR5LmFjY2Vzc2libGVUYXJnZXRcbiAqICAgICAgKTtcbiAqL1xudmFyIGFjY2Vzc2libGVUYXJnZXQgPSB7XG4gICAgXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlOmZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlVGl0bGU6bnVsbCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgdGFiSW5kZXg6MCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVBY3RpdmU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIF9hY2Nlc3NpYmxlRGl2OmZhbHNlXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYWNjZXNzaWJsZVRhcmdldDtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGFjY2Vzc2liaWxpdHkgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGFjY2Vzc2libGVUYXJnZXQ6ICAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKSxcbiAgICBBY2Nlc3NpYmlsaXR5TWFuYWdlcjogcmVxdWlyZSgnLi9BY2Nlc3NpYmlsaXR5TWFuYWdlcicpXG59O1xuIiwiLyoqXG4gKiBDb25zdGFudCB2YWx1ZXMgdXNlZCBpbiBwaXhpXG4gKlxuICogQGxlbmRzIFBJWElcbiAqL1xudmFyIENPTlNUID0ge1xuICAgIC8qKlxuICAgICAqIFN0cmluZyBvZiB0aGUgY3VycmVudCBQSVhJIHZlcnNpb25cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gVkVSU0lPTlxuICAgICAqL1xuICAgIFZFUlNJT046IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb24sXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUElfMiAtIFR3byBQaVxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBQSV8yOiBNYXRoLlBJICogMixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSQURfVE9fREVHIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgcmFkaWFucyB0byBkZWdyZWVzXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFJBRF9UT19ERUc6IDE4MCAvIE1hdGguUEksXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge051bWJlcn0gREVHX1RPX1JBRCAtIENvbnN0YW50IGNvbnZlcnNpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIGRlZ3JlZXMgdG8gcmFkaWFuc1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBERUdfVE9fUkFEOiBNYXRoLlBJIC8gMTgwLFxuXG4gICAgLyoqXG4gICAgICogVGFyZ2V0IGZyYW1lcyBwZXIgbWlsbGlzZWNvbmQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFRBUkdFVF9GUE1TPTAuMDZcbiAgICAgKi9cbiAgICBUQVJHRVRfRlBNUzogMC4wNixcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IHRvIGlkZW50aWZ5IHRoZSBSZW5kZXJlciBUeXBlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBSRU5ERVJFUl9UWVBFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuVU5LTk9XTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLldFQkdMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuQ0FOVkFTXG4gICAgICovXG4gICAgUkVOREVSRVJfVFlQRToge1xuICAgICAgICBVTktOT1dOOiAgICAwLFxuICAgICAgICBXRUJHTDogICAgICAxLFxuICAgICAgICBDQU5WQVM6ICAgICAyXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFZhcmlvdXMgYmxlbmQgbW9kZXMgc3VwcG9ydGVkIGJ5IFBJWEkuIElNUE9SVEFOVCAtIFRoZSBXZWJHTCByZW5kZXJlciBvbmx5IHN1cHBvcnRzXG4gICAgICogdGhlIE5PUk1BTCwgQURELCBNVUxUSVBMWSBhbmQgU0NSRUVOIGJsZW5kIG1vZGVzLiBBbnl0aGluZyBlbHNlIHdpbGwgc2lsZW50bHkgYWN0IGxpa2VcbiAgICAgKiBOT1JNQUwuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IEJMRU5EX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5BRERcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTVVMVElQTFlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0NSRUVOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk9WRVJMQVlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuREFSS0VOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkxJR0hURU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfQlVSTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IQVJEX0xJR0hUXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNPRlRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuRElGRkVSRU5DRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5FWENMVVNJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuSFVFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNBVFVSQVRJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTFVNSU5PU0lUWVxuICAgICAqL1xuICAgIEJMRU5EX01PREVTOiB7XG4gICAgICAgIE5PUk1BTDogICAgICAgICAwLFxuICAgICAgICBBREQ6ICAgICAgICAgICAgMSxcbiAgICAgICAgTVVMVElQTFk6ICAgICAgIDIsXG4gICAgICAgIFNDUkVFTjogICAgICAgICAzLFxuICAgICAgICBPVkVSTEFZOiAgICAgICAgNCxcbiAgICAgICAgREFSS0VOOiAgICAgICAgIDUsXG4gICAgICAgIExJR0hURU46ICAgICAgICA2LFxuICAgICAgICBDT0xPUl9ET0RHRTogICAgNyxcbiAgICAgICAgQ09MT1JfQlVSTjogICAgIDgsXG4gICAgICAgIEhBUkRfTElHSFQ6ICAgICA5LFxuICAgICAgICBTT0ZUX0xJR0hUOiAgICAgMTAsXG4gICAgICAgIERJRkZFUkVOQ0U6ICAgICAxMSxcbiAgICAgICAgRVhDTFVTSU9OOiAgICAgIDEyLFxuICAgICAgICBIVUU6ICAgICAgICAgICAgMTMsXG4gICAgICAgIFNBVFVSQVRJT046ICAgICAxNCxcbiAgICAgICAgQ09MT1I6ICAgICAgICAgIDE1LFxuICAgICAgICBMVU1JTk9TSVRZOiAgICAgMTZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyB3ZWJnbCBkcmF3IG1vZGVzLiBUaGVzZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIEdMIGRyYXdNb2RlIHRvIHVzZVxuICAgICAqIHVuZGVyIGNlcnRhaW4gc2l0dWF0aW9ucyBhbmQgcmVuZGVyZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBEUkFXX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuUE9JTlRTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX0xPT1BcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX1NUUklQXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9GQU5cbiAgICAgKi9cbiAgICBEUkFXX01PREVTOiB7XG4gICAgICAgIFBPSU5UUzogICAgICAgICAwLFxuICAgICAgICBMSU5FUzogICAgICAgICAgMSxcbiAgICAgICAgTElORV9MT09QOiAgICAgIDIsXG4gICAgICAgIExJTkVfU1RSSVA6ICAgICAzLFxuICAgICAgICBUUklBTkdMRVM6ICAgICAgNCxcbiAgICAgICAgVFJJQU5HTEVfU1RSSVA6IDUsXG4gICAgICAgIFRSSUFOR0xFX0ZBTjogICA2XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgcGl4aS5cbiAgICAgKlxuICAgICAqIFRoZSBERUZBVUxUIHNjYWxlIG1vZGUgYWZmZWN0cyB0aGUgZGVmYXVsdCBzY2FsaW5nIG1vZGUgb2YgZnV0dXJlIG9wZXJhdGlvbnMuXG4gICAgICogSXQgY2FuIGJlIHJlLWFzc2lnbmVkIHRvIGVpdGhlciBMSU5FQVIgb3IgTkVBUkVTVCwgZGVwZW5kaW5nIHVwb24gc3VpdGFiaWxpdHkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNDQUxFX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkRFRkFVTFQ9TElORUFSXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkxJTkVBUiBTbW9vdGggc2NhbGluZ1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5ORUFSRVNUIFBpeGVsYXRpbmcgc2NhbGluZ1xuICAgICAqL1xuICAgIFNDQUxFX01PREVTOiB7XG4gICAgICAgIERFRkFVTFQ6ICAgIDAsXG4gICAgICAgIExJTkVBUjogICAgIDAsXG4gICAgICAgIE5FQVJFU1Q6ICAgIDFcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHByZWZpeCB0aGF0IGRlbm90ZXMgYSBVUkwgaXMgZm9yIGEgcmV0aW5hIGFzc2V0XG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFJFVElOQV9QUkVGSVhcbiAgICAgKi9cbiAgICAvL2V4YW1wbGU6ICdAMngnLFxuICAgIFJFVElOQV9QUkVGSVg6IC9AKC4rKXgvLFxuXG4gICAgUkVTT0xVVElPTjoxLFxuXG4gICAgRklMVEVSX1JFU09MVVRJT046MSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHJlbmRlciBvcHRpb25zIGlmIG5vbmUgYXJlIHN1cHBsaWVkIHRvIHtAbGluayBQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICogb3Ige0BsaW5rIFBJWEkuQ2FudmFzUmVuZGVyZXJ9LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TXG4gICAgICogQHByb3BlcnR5IHtIVE1MQ2FudmFzRWxlbWVudH0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy52aWV3PW51bGxcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMudHJhbnNwYXJlbnQ9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuYW50aWFsaWFzPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmZvcmNlRlhBQT1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5yZXNvbHV0aW9uPTFcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hdXRvUmVzaXplPWZhbHNlXG4gICAgICovXG4gICAgREVGQVVMVF9SRU5ERVJfT1BUSU9OUzoge1xuICAgICAgICB2aWV3OiBudWxsLFxuICAgICAgICByZXNvbHV0aW9uOiAxLFxuICAgICAgICBhbnRpYWxpYXM6IGZhbHNlLFxuICAgICAgICBmb3JjZUZYQUE6IGZhbHNlLFxuICAgICAgICBhdXRvUmVzaXplOiBmYWxzZSxcbiAgICAgICAgdHJhbnNwYXJlbnQ6IGZhbHNlLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IDB4MDAwMDAwLFxuICAgICAgICBjbGVhckJlZm9yZVJlbmRlcjogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBmYWxzZSxcbiAgICAgICAgcm91bmRQaXhlbHM6IGZhbHNlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50cyB0aGF0IGlkZW50aWZ5IHNoYXBlcywgbWFpbmx5IHRvIHByZXZlbnQgYGluc3RhbmNlb2ZgIGNhbGxzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVNcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlBPTFk9MFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUkVDVD0xXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5DSVJDPTJcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkVMSVA9M1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUlJFQz00XG4gICAgICovXG4gICAgU0hBUEVTOiB7XG4gICAgICAgIFBPTFk6IDAsXG4gICAgICAgIFJFQ1Q6IDEsXG4gICAgICAgIENJUkM6IDIsXG4gICAgICAgIEVMSVA6IDMsXG4gICAgICAgIFJSRUM6IDRcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogbWF5YmUgY2hhbmdlIHRvIFNQUklURS5CQVRDSF9TSVpFOiAyMDAwXG4gICAgLy8gVE9ETzogbWF5YmUgYWRkIFBBUlRJQ0xFLkJBVENIX1NJWkU6IDE1MDAwXG4gICAgU1BSSVRFX0JBVENIX1NJWkU6IDIwMDAgLy9uaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgYW5kIGRlc2t0b3AgbWFjaGluZXNcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ09OU1Q7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgRGlzcGxheU9iamVjdCA9IHJlcXVpcmUoJy4vRGlzcGxheU9iamVjdCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIENvbnRhaW5lciByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBkaXNwbGF5IG9iamVjdHMuXG4gKiBJdCBpcyB0aGUgYmFzZSBjbGFzcyBvZiBhbGwgZGlzcGxheSBvYmplY3RzIHRoYXQgYWN0IGFzIGEgY29udGFpbmVyIGZvciBvdGhlciBvYmplY3RzLlxuICpcbiAqYGBganNcbiAqIHZhciBjb250YWluZXIgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogYGBgXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuRGlzcGxheU9iamVjdFxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ29udGFpbmVyKClcbntcbiAgICBEaXNwbGF5T2JqZWN0LmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3RbXX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5Db250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSk7XG5Db250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb250YWluZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnRhaW5lci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG5cbiAgICAgICAgICAgIGlmICh3aWR0aCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IDE7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmIChoZWlnaHQgIT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyBoZWlnaHQgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogT3ZlcnJpZGFibGUgbWV0aG9kIHRoYXQgY2FuIGJlIHVzZWQgYnkgQ29udGFpbmVyIHN1YmNsYXNzZXMgd2hlbmV2ZXIgdGhlIGNoaWxkcmVuIGFycmF5IGlzIG1vZGlmaWVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5vbkNoaWxkcmVuQ2hhbmdlID0gZnVuY3Rpb24gKCkge307XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIuXG4gKiBcbiAqIFlvdSBjYW4gYWxzbyBhZGQgbXVsdHBsZSBpdGVtcyBsaWtlIHNvOiBteUNvbnRhaW5lci5hZGRDaGlsZCh0aGlua09uZSwgdGhpbmdUd28sIHRoaW5nVGhyZWUpXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gYWRkIHRvIHRoZSBjb250YWluZXJcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxueyBcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IHdlIGNhbiBieXBhc3MgbG9vcGluZyB0aHJvdWdoIHRoZSB0aGVtXG4gICAgaWYoYXJndW1lbnRzTGVuZ3RoID4gMSlcbiAgICB7XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgYXJndW1lbnRzIHByb3BlcnR5IGFuZCBhZGQgYWxsIGNoaWxkcmVuXG4gICAgICAgIC8vIHVzZSBpdCB0aGUgcmlnaHQgd2F5ICgubGVuZ3RoIGFuZCBbaV0pIHNvIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc3RpbGwgYmUgb3B0aW1pc2VkIGJ5IEpTIHJ1bnRpbWVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoIGFyZ3VtZW50c1tpXSApO1xuICAgICAgICB9XG4gICAgfSAgICAgXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIGNoaWxkIGhhcyBhIHBhcmVudCB0aGVuIGxldHMgcmVtb3ZlIGl0IGFzIFBpeGkgb2JqZWN0cyBjYW4gb25seSBleGlzdCBpbiBvbmUgcGxhY2VcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKHRoaXMuY2hpbGRyZW4ubGVuZ3RoLTEpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIgYXQgYSBzcGVjaWZpZWQgaW5kZXguIElmIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0byBhZGRcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gcGxhY2UgdGhlIGNoaWxkIGluXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyBhZGRlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5hZGRDaGlsZEF0ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuXG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNoaWxkICsgJ2FkZENoaWxkQXQ6IFRoZSBpbmRleCAnKyBpbmRleCArJyBzdXBwbGllZCBpcyBvdXQgb2YgYm91bmRzICcgKyB0aGlzLmNoaWxkcmVuLmxlbmd0aCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBTd2FwcyB0aGUgcG9zaXRpb24gb2YgMiBEaXNwbGF5IE9iamVjdHMgd2l0aGluIHRoaXMgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGNoaWxkMiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnN3YXBDaGlsZHJlbiA9IGZ1bmN0aW9uIChjaGlsZCwgY2hpbGQyKVxue1xuICAgIGlmIChjaGlsZCA9PT0gY2hpbGQyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbmRleDEgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuICAgIHZhciBpbmRleDIgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQyKTtcblxuICAgIGlmIChpbmRleDEgPCAwIHx8IGluZGV4MiA8IDApXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N3YXBDaGlsZHJlbjogQm90aCB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdHMgbXVzdCBiZSBjaGlsZHJlbiBvZiB0aGUgY2FsbGVyLicpO1xuICAgIH1cblxuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgxXSA9IGNoaWxkMjtcbiAgICB0aGlzLmNoaWxkcmVuW2luZGV4Ml0gPSBjaGlsZDtcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgxIDwgaW5kZXgyID8gaW5kZXgxIDogaW5kZXgyKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW5kZXggcG9zaXRpb24gb2YgYSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIHRvIGlkZW50aWZ5XG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3QgdG8gaWRlbnRpZnlcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBtdXN0IGJlIGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgcG9zaXRpb24gb2YgYW4gZXhpc3RpbmcgY2hpbGQgaW4gdGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgRGlzcGxheU9iamVjdCBpbnN0YW5jZSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBpbmRleCBudW1iZXJcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgcmVzdWx0aW5nIGluZGV4IG51bWJlciBmb3IgdGhlIGNoaWxkIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc2V0Q2hpbGRJbmRleCA9IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN1cHBsaWVkIGluZGV4IGlzIG91dCBvZiBib3VuZHMnKTtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudEluZGV4ID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkKTtcblxuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGN1cnJlbnRJbmRleCwgMSk7IC8vIHJlbW92ZSBmcm9tIG9sZCBwb3NpdGlvblxuICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7IC8vYWRkIGF0IG5ldyBwb3NpdGlvblxuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNoaWxkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhcbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgYXRcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIGF0IHRoZSBnaXZlbiBpbmRleCwgaWYgYW55LlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkQXQgPSBmdW5jdGlvbiAoaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0Q2hpbGRBdDogU3VwcGxpZWQgaW5kZXggJyArIGluZGV4ICsgJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY2hpbGQgbGlzdCwgb3IgdGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3QgaXMgbm90IGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2luZGV4XTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVtb3ZlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyByZW1vdmVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuXG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYSBjaGlsZCBmcm9tIHRoZSBzcGVjaWZpZWQgaW5kZXggcG9zaXRpb24uXG4gKlxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBnZXQgdGhlIGNoaWxkIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICB2YXIgY2hpbGQgPSB0aGlzLmdldENoaWxkQXQoaW5kZXgpO1xuXG4gICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpbmRleCwgMSk7XG5cbiAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICBjaGlsZC5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGNoaWxkcmVuIGZyb20gdGhpcyBjb250YWluZXIgdGhhdCBhcmUgd2l0aGluIHRoZSBiZWdpbiBhbmQgZW5kIGluZGV4ZXMuXG4gKlxuICogQHBhcmFtIGJlZ2luSW5kZXgge251bWJlcn0gVGhlIGJlZ2lubmluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyAwLlxuICogQHBhcmFtIGVuZEluZGV4IHtudW1iZXJ9IFRoZSBlbmRpbmcgcG9zaXRpb24uIERlZmF1bHQgdmFsdWUgaXMgc2l6ZSBvZiB0aGUgY29udGFpbmVyLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkcmVuID0gZnVuY3Rpb24gKGJlZ2luSW5kZXgsIGVuZEluZGV4KVxue1xuICAgIHZhciBiZWdpbiA9IGJlZ2luSW5kZXggfHwgMDtcbiAgICB2YXIgZW5kID0gdHlwZW9mIGVuZEluZGV4ID09PSAnbnVtYmVyJyA/IGVuZEluZGV4IDogdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgdmFyIHJhbmdlID0gZW5kIC0gYmVnaW47XG4gICAgdmFyIHJlbW92ZWQsIGk7XG5cbiAgICBpZiAocmFuZ2UgPiAwICYmIHJhbmdlIDw9IGVuZClcbiAgICB7XG4gICAgICAgIHJlbW92ZWQgPSB0aGlzLmNoaWxkcmVuLnNwbGljZShiZWdpbiwgcmFuZ2UpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW1vdmVkW2ldLnBhcmVudCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoYmVnaW5JbmRleCk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0uZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbW92ZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJhbmdlID09PSAwICYmIHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigncmVtb3ZlQ2hpbGRyZW46IG51bWVyaWMgdmFsdWVzIGFyZSBvdXRzaWRlIHRoZSBhY2NlcHRhYmxlIHJhbmdlLicpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb24gYWxsIGNoaWxkcmVuIG9mIHRoaXMgY29udGFpbmVyIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0gPSBDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgQ29udGFpbmVyIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIGFsbCB2aXNpYmxlIGNoaWxkcmVuIGludG8gY29uc2lkZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE8gdGhlIGJvdW5kcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHRoaXMgcmVuZGVyIHNlc3Npb24gc28gcmV0dXJuIHdoYXQgd2UgaGF2ZVxuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBjaGlsZEJvdW5kcztcbiAgICAgICAgdmFyIGNoaWxkTWF4WDtcbiAgICAgICAgdmFyIGNoaWxkTWF4WTtcblxuICAgICAgICB2YXIgY2hpbGRWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZFZpc2libGUgPSB0cnVlO1xuXG4gICAgICAgICAgICBjaGlsZEJvdW5kcyA9IHRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIG1pblggPSBtaW5YIDwgY2hpbGRCb3VuZHMueCA/IG1pblggOiBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgbWluWSA9IG1pblkgPCBjaGlsZEJvdW5kcy55ID8gbWluWSA6IGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIGNoaWxkTWF4WCA9IGNoaWxkQm91bmRzLndpZHRoICsgY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIGNoaWxkTWF4WSA9IGNoaWxkQm91bmRzLmhlaWdodCArIGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIG1heFggPSBtYXhYID4gY2hpbGRNYXhYID8gbWF4WCA6IGNoaWxkTWF4WDtcbiAgICAgICAgICAgIG1heFkgPSBtYXhZID4gY2hpbGRNYXhZID8gbWF4WSA6IGNoaWxkTWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGRWaXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG5Db250YWluZXIucHJvdG90eXBlLmNvbnRhaW5lckdldEJvdW5kcyA9IENvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbm9uLWdsb2JhbCBsb2NhbCBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS5cbiAqIFRoZSBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXhDYWNoZSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0aC5NYXRyaXguSURFTlRJVFk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0cml4Q2FjaGU7XG5cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyggbWF0aC5NYXRyaXguSURFTlRJVFkgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcblxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGksIGo7XG5cbiAgICAvLyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgbWFzayBvciBhIGZpbHRlci5cbiAgICBpZiAodGhpcy5fbWFzayB8fCB0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgLy8gcHVzaCBmaWx0ZXIgZmlyc3QgYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIGNvcnJlY3QgZm9yIGFueSBtYXNraW5nXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzICYmIHRoaXMuX2ZpbHRlcnMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGhpcywgdGhpcy5fZmlsdGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcblxuICAgICAgICAvLyBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIGJhdGNoLCBvbmx5IHJlbmRlcmVkIGlmIGl0IGhhcyBhIHRleHR1cmUuXG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgbWFrZSBzdXJlIHRoZXkgZ2V0IHJlbmRlcmVkXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJXZWJHTChyZW5kZXJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayh0aGlzLCB0aGlzLl9tYXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBzaW1wbGUgcmVuZGVyIGNoaWxkcmVuIVxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gdGhpcyBpcyB3aGVyZSBjb250ZW50IGl0c2VsZiBnZXRzIHJlbmRlcmVkLi4uXG59O1xuXG4vKipcbiAqIFRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzXG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy5hbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hc2spXG4gICAge1xuICAgICAgICByZW5kZXJlci5tYXNrTWFuYWdlci5wdXNoTWFzayh0aGlzLl9tYXNrLCByZW5kZXJlcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayhyZW5kZXJlcik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUNoaWxkcmVuKVxue1xuICAgIERpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGlmIChkZXN0cm95Q2hpbGRyZW4pXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLmRlc3Ryb3koZGVzdHJveUNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xufTtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBUcmFuc2Zvcm0gPSByZXF1aXJlKCcuL1RyYW5zZm9ybVN0YXRpYycpLFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB3b3JsZEFscGhhOjEsIGNoaWxkcmVuOltdfTtcblxuXG4vKipcbiAqIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCBvbiB0aGUgc2NyZWVuLlxuICogVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIG9uIGl0cyBvd24gcmF0aGVyIGl0IHNob3VsZCBiZSBleHRlbmRlZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIEV2ZW50RW1pdHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gRGlzcGxheU9iamVjdCgpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb29yZGluYXRlIG9mIHRoZSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLnRyYW5zZm9ybS5wb3NpdGlvbjtcbiAgIC8vIHRoaXMuX3Bvc2l0aW9uID0gbmV3IENhY2hlUG9pbnQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHBpdm90IHBvaW50IG9mIHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgaXQgcm90YXRlcyBhcm91bmRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5waXZvdCA9IHRoaXMudHJhbnNmb3JtLnBpdm90XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBza2V3IGZhY3RvciBmb3IgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNrZXcgPSB0aGlzLnRyYW5zZm9ybS5za2V3XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3JvdGF0aW9uID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcGFjaXR5IG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgb2JqZWN0LiBJZiBmYWxzZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGRyYXduLCBhbmRcbiAgICAgKiB0aGUgdXBkYXRlVHJhbnNmb3JtIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENhbiB0aGlzIG9iamVjdCBiZSByZW5kZXJlZCwgaWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biBidXQgdGhlIHVwZGF0ZVRyYW5zZm9ybVxuICAgICAqIG1ldGhvZHMgd2lsbCBzdGlsbCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyIHRoYXQgY29udGFpbnMgdGhpcyBkaXNwbGF5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ29udGFpbmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtdWx0aXBsaWVkIGFscGhhIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgdHJhbnNmb3JtIG9mIHRoZSBvYmplY3QgYmFzZWQgb24gd29ybGQgKHBhcmVudCkgZmFjdG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS5sb2NhbFRyYW5zZm9ybTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcmVhIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0by4gVGhpcyBpcyB1c2VkIGFzIG1vcmUgb2YgYW4gb3B0aW1pc2F0aW9uXG4gICAgICogcmF0aGVyIHRoYW4gZmlndXJpbmcgb3V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGVhY2ggZnJhbWUgeW91IGNhbiBzZXQgdGhpcyByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW9zdCB1cC10by1kYXRlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgbWFzayBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gIC8vICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxheU9iamVjdDtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNjYWxlWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcm90YXRpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uZGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX2NyID0gTWF0aC5jb3ModmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBzcHJpdGUgaXMgZ2xvYmFsbHkgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB3b3JsZFZpc2libGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udmlzaWJsZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICB9IHdoaWxlIChpdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIG1hc2sgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LiBBIG1hc2sgaXMgYW4gb2JqZWN0IHRoYXQgbGltaXRzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIG9iamVjdCB0byB0aGUgc2hhcGUgb2YgdGhlIG1hc2sgYXBwbGllZCB0byBpdC5cbiAgICAgKiBJbiBQSVhJIGEgcmVndWxhciBtYXNrIG11c3QgYmUgYSBQSVhJLkdyYXBoaWNzIG9yIGEgUElYSS5TcHJpdGUgb2JqZWN0LiBUaGlzIGFsbG93cyBmb3IgbXVjaCBmYXN0ZXIgbWFza2luZyBpbiBjYW52YXMgYXMgaXQgdXRpbGlzZXMgc2hhcGUgY2xpcHBpbmcuXG4gICAgICogVG8gcmVtb3ZlIGEgbWFzaywgc2V0IHRoaXMgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3N8UElYSS5TcHJpdGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBtYXNrOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrLnJlbmRlcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXNrID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LlxuICAgICAqICogSU1QT1JUQU5UOiBUaGlzIGlzIGEgd2ViR0wgb25seSBmZWF0dXJlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlci5cbiAgICAgKiBUbyByZW1vdmUgZmlsdGVycyBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ251bGwnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkFic3RyYWN0RmlsdGVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMgJiYgdGhpcy5fZmlsdGVycy5zbGljZSgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlICYmIHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogVE9ETyAtIE9wdGltaXphdGlvbiBwYXNzIVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vaWYodGhpcy50cmFuc2Zvcm0uZGlydHkgfHwgcGFyZW50LnRyYW5zZm9ybS5kaXJ0eSlcbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICAvLyBtdWx0aXBseSB0aGUgYWxwaGFzLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gPSBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICpcbiAqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH1cbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyhtYXRoLk1hdHJpeC5JREVOVElUWSk7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9HbG9iYWwgPSBmdW5jdGlvbiAocG9zaXRpb24pXG57XG4gICAgLy8gdGhpcyBwYXJlbnQgY2hlY2sgaXMgZm9yIGp1c3QgaW4gY2FzZSB0aGUgaXRlbSBpcyBhIHJvb3Qgb2JqZWN0LlxuICAgIC8vIElmIGl0IGlzIHdlIG5lZWQgdG8gZ2l2ZSBpdCBhIHRlbXBvcmFyeSBwYXJlbnQgc28gdGhhdCBkaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtIHdvcmtzIGNvcnJlY3RseVxuICAgIC8vIHRoaXMgaXMgbWFpbmx5IHRvIGF2b2lkIGEgcGFyZW50IGNoZWNrIGluIHRoZSBtYWluIGxvb3AuIEV2ZXJ5IGxpdHRsZSBoZWxwcyBmb3IgcGVyZm9ybWFuY2UgOilcbiAgICBpZighdGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLnBhcmVudCA9IF90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIGxvdFxuICAgIHJldHVybiB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5KHBvc2l0aW9uKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgbG9jYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHJlbGF0aXZlIHRvIGFub3RoZXIgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEBwYXJhbSBbZnJvbV0ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gY2FsY3VsYXRlIHRoZSBnbG9iYWwgcG9zaXRpb24gZnJvbVxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBQb2ludClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9Mb2NhbCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgZnJvbSwgcG9pbnQpXG57XG4gICAgaWYgKGZyb20pXG4gICAge1xuICAgICAgICBwb3NpdGlvbiA9IGZyb20udG9HbG9iYWwocG9zaXRpb24pO1xuICAgIH1cblxuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIHNpbXBseSBhcHBseSB0aGUgbWF0cml4Li5cbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9zaXRpb24sIHBvaW50KTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyBPVkVSV1JJVEU7XG59O1xuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBwYXJlbnQgQ29udGFpbmVyIG9mIHRoaXMgRGlzcGxheU9iamVjdFxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge0NvbnRhaW5lcn0gVGhlIENvbnRhaW5lciB0byBhZGQgdGhpcyBEaXNwbGF5T2JqZWN0IHRvXG4gKiBAcmV0dXJuIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdGhhdCB0aGlzIERpc3BsYXlPYmplY3Qgd2FzIGFkZGVkIHRvXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFBhcmVudCA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWNvbnRhaW5lci5hZGRDaGlsZClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0UGFyZW50OiBBcmd1bWVudCBtdXN0IGJlIGEgQ29udGFpbmVyJyk7XG4gICAgfVxuXG4gICAgY29udGFpbmVyLmFkZENoaWxkKHRoaXMpO1xuICAgIHJldHVybiBjb250YWluZXI7XG59O1xuXG4vKipcbiAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHNldCB0aGUgcG9zdGlvbiwgc2NhbGUsIHNrZXcgYW5kIHBpdm90IGF0IG9uY2UuXG4gKlxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IFRoZSBYIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gVGhlIFkgcG9zaXRpb25cbiAqIEBwYXJhbSBbc2NhbGVYPTFdIHtudW1iZXJ9IFRoZSBYIHNjYWxlIHZhbHVlXG4gKiBAcGFyYW0gW3NjYWxlWT0xXSB7bnVtYmVyfSBUaGUgWSBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtyb3RhdGlvbj0wXSB7bnVtYmVyfSBUaGUgcm90YXRpb25cbiAqIEBwYXJhbSBbc2tld1g9MF0ge251bWJlcn0gVGhlIFggc2tldyB2YWx1ZVxuICogQHBhcmFtIFtza2V3WT0wXSB7bnVtYmVyfSBUaGUgWSBza2V3IHZhbHVlXG4gKiBAcGFyYW0gW3Bpdm90WD0wXSB7bnVtYmVyfSBUaGUgWCBwaXZvdCB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFk9MF0ge251bWJlcn0gVGhlIFkgcGl2b3QgdmFsdWVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24oeCwgeSwgc2NhbGVYLCBzY2FsZVksIHJvdGF0aW9uLCBza2V3WCwgc2tld1ksIHBpdm90WCwgcGl2b3RZKSAvL2pzaGludCBpZ25vcmU6bGluZVxue1xuICAgIHRoaXMucG9zaXRpb24ueCA9IHggfHwgMDtcbiAgICB0aGlzLnBvc2l0aW9uLnkgPSB5IHx8IDA7XG4gICAgdGhpcy5zY2FsZS54ID0gIXNjYWxlWCA/IDEgOiBzY2FsZVg7XG4gICAgdGhpcy5zY2FsZS55ID0gIXNjYWxlWSA/IDEgOiBzY2FsZVk7XG4gICAgdGhpcy5yb3RhdGlvbiA9IHJvdGF0aW9uIHx8IDA7XG4gICAgdGhpcy5za2V3LnggPSBza2V3WCB8fCAwO1xuICAgIHRoaXMuc2tldy55ID0gc2tld1kgfHwgMDtcbiAgICB0aGlzLnBpdm90LnggPSBwaXZvdFggfHwgMDtcbiAgICB0aGlzLnBpdm90LnkgPSBwaXZvdFkgfHwgMDtcbiAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQmFzZSBkZXN0cm95IG1ldGhvZCBmb3IgZ2VuZXJpYyBkaXNwbGF5IG9iamVjdHNcbiAqXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdGhpcy5wb3NpdGlvbiA9IG51bGw7XG4gICAgdGhpcy5zY2FsZSA9IG51bGw7XG4gICAgdGhpcy5waXZvdCA9IG51bGw7XG4gICAgdGhpcy5za2V3ID0gbnVsbDtcblxuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIHRoaXMuX2JvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fbWFzayA9IG51bGw7XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xufTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIE9ic2VydmFibGVQb2ludCh0cmFuc2Zvcm0sIHgsIHkpXG57XG4gICAgdGhpcy5feCA9IHggfHwgMDtcbiAgICB0aGlzLl95ID0geSB8fCAwO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG59XG5cbk9ic2VydmFibGVQb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYnNlcnZhYmxlUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IE9ic2VydmFibGVQb2ludDtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE9ic2VydmFibGVQb2ludC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3Qgb24gdGhlIHggYXhpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIHg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5feDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3ggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3k7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl95ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5PYnNlcnZhYmxlUG9pbnQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuX3ggPSB4IHx8IDA7XG4gICAgdGhpcy5feSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLl94IDogMCApO1xuICAgIFxuICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcbnZhciBPYnNlcnZhYmxlUG9pbnQgPSByZXF1aXJlKCcuL09ic2VydmFibGVQb2ludCcpO1xuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLCAwKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLDEsIDEpO1xuICAgIHRoaXMucGl2b3QgPSBuZXcgT2JzZXJ2YWJsZVBvaW50KHRoaXMsIDAsIDApO1xuICAgIHRoaXMuc2tldyA9IG5ldyBPYnNlcnZhYmxlUG9pbnQodGhpcywgMCwwKTtcbiAgICBcbiAgICB0aGlzLnJvdGF0aW9uID0gMDtcbiAgICB0aGlzLl9zciA9IE1hdGguc2luKDApO1xuICAgIHRoaXMuX2NyID0gTWF0aC5jb3MoMCk7XG4gICAgXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cblxuICAgIHRoaXMudXBkYXRlZCA9IHRydWU7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUcmFuc2Zvcm07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKHBhcmVudFRyYW5zZm9ybSlcbntcbiAgICB2YXIgcHQgPSBwYXJlbnRUcmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgbHQgPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3g7XG4gICAgICAgIGx0LmIgID0gIHRoaXMuX3NyICogdGhpcy5zY2FsZS5feDtcbiAgICAgICAgbHQuYyAgPSAtdGhpcy5fc3IgKiB0aGlzLnNjYWxlLl95O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3k7XG4gICAgICAgIGx0LnR4ID0gIHRoaXMucG9zaXRpb24uX3ggLSAodGhpcy5waXZvdC5feCAqIGx0LmEgKyB0aGlzLnBpdm90Ll95ICogbHQuYyk7XG4gICAgICAgIGx0LnR5ID0gIHRoaXMucG9zaXRpb24uX3kgLSAodGhpcy5waXZvdC5feCAqIGx0LmIgKyB0aGlzLnBpdm90Ll95ICogbHQuZCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVkID0gdGhpcy5kaXJ0eSB8fCBwYXJlbnRUcmFuc2Zvcm0uZGlydHk7XG5cbiAgICBpZih0aGlzLnVwZGF0ZWQpXG4gICAgeyAgICAgIFxuICAgICAgICAvLyBjb25jYXQgdGhlIHBhcmVudCBtYXRyaXggd2l0aCB0aGUgb2JqZWN0cyB0cmFuc2Zvcm0uXG4gICAgICAgIHd0LmEgID0gbHQuYSAgKiBwdC5hICsgbHQuYiAgKiBwdC5jO1xuICAgICAgICB3dC5iICA9IGx0LmEgICogcHQuYiArIGx0LmIgICogcHQuZDtcbiAgICAgICAgd3QuYyAgPSBsdC5jICAqIHB0LmEgKyBsdC5kICAqIHB0LmM7XG4gICAgICAgIHd0LmQgID0gbHQuYyAgKiBwdC5iICsgbHQuZCAgKiBwdC5kO1xuICAgICAgICB3dC50eCA9IGx0LnR4ICogcHQuYSArIGx0LnR5ICogcHQuYyArIHB0LnR4O1xuICAgICAgICB3dC50eSA9IGx0LnR4ICogcHQuYiArIGx0LnR5ICogcHQuZCArIHB0LnR5O1xuICAgIH1cbiAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhbnNmb3JtO1xuXG5cbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBDYW52YXNHcmFwaGljcyA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL0dyYXBoaWNzRGF0YScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIEdyYXBoaWNzIGNsYXNzIGNvbnRhaW5zIG1ldGhvZHMgdXNlZCB0byBkcmF3IHByaW1pdGl2ZSBzaGFwZXMgc3VjaCBhcyBsaW5lcywgY2lyY2xlcyBhbmRcbiAqIHJlY3RhbmdsZXMgdG8gdGhlIGRpc3BsYXksIGFuZCB0byBjb2xvciBhbmQgZmlsbCB0aGVtLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzKClcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSB2YWx1ZSB1c2VkIHdoZW4gZmlsbGluZyB0aGUgR3JhcGhpY3Mgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggKHRoaWNrbmVzcykgb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29sb3Igb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBHcmFwaGljcyBkYXRhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFRoaXMgaXMgYSBoZXggdmFsdWUuIEFwcGx5IGEgdmFsdWUgb2YgMHhGRkZGRkYgdG8gcmVzZXQgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmV2aW91cyB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFVzZWQgdG8gY29tcGFyZSB0byB0aGUgY3VycmVudCB0aW50IGFuZCBjaGVjayBpZiB0aGVyZXMgY2hhbmdlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLl9wcmV2VGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMO1xuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCBwYXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgY29udGFpbmluZyBzb21lIFdlYkdMLXJlbGF0ZWQgcHJvcGVydGllcyB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIG9iamVjdD59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAvLyBUT0RPIC0gX3dlYmdsIHNob3VsZCB1c2UgYSBwcm90b3R5cGUgb2JqZWN0LCBub3QgYSByYW5kb20gdW5kb2N1bWVudGVkIG9iamVjdC4uLlxuICAgIHRoaXMuX3dlYkdMID0ge307XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgc2hhcGUgaXMgYmVpbmcgdXNlZCBhcyBhIG1hc2suXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNNYXNrID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYm91bmRzJyBwYWRkaW5nIHVzZWQgZm9yIGJvdW5kcyBjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJvdW5kc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQSBjYWNoZSBvZiB0aGUgbG9jYWwgYm91bmRzIHRvIHByZXZlbnQgcmVjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwwLDEsMSk7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlIGdyYXBoaWNzXG4gICAgICogb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIFdlYkdMIGdyYXBoaWNzIG9iamVjdCBoYXMgY2hhbmdlZC4gSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZVxuICAgICAqIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlY2FsY3VsYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcblxuICAgIHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIGNhY2hlZCBzcHJpdGUgb2JqZWN0IG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBjYWNoZUFzQml0bWFwIGlzIHNldCB0byB0cnVlIHRoZSBncmFwaGljcyBvYmplY3Qgd2lsbCBiZSByZW5kZXJlZCBhcyBpZiBpdCB3YXMgYSBzcHJpdGUuXG4gICAgICogVGhpcyBpcyB1c2VmdWwgaWYgeW91ciBncmFwaGljcyBlbGVtZW50IGRvZXMgbm90IGNoYW5nZSBvZnRlbiwgYXMgaXQgd2lsbCBzcGVlZCB1cCB0aGUgcmVuZGVyaW5nXG4gICAgICogb2YgdGhlIG9iamVjdCBpbiBleGNoYW5nZSBmb3IgdGFraW5nIHVwIHRleHR1cmUgbWVtb3J5LiBJdCBpcyBhbHNvIHVzZWZ1bCBpZiB5b3UgbmVlZCB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3QgdG8gYmUgYW50aS1hbGlhc2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVuZGVyZWQgdXNpbmcgY2FudmFzLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCBpZlxuICAgICAqIHlvdSBhcmUgY29uc3RhbnRseSByZWRyYXdpbmcgdGhlIGdyYXBoaWNzIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBjYWNoZUFzQml0bWFwXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5HcmFwaGljcyNcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuR3JhcGhpY3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcbkdyYXBoaWNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljcztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEdyYXBoaWNzIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqIE5vdGUgdGhhdCB0aGUgb25seSB0aGUgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IGFyZSBjbG9uZWQsIG5vdCBpdHMgdHJhbnNmb3JtIChwb3NpdGlvbixzY2FsZSxldGMpXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2xvbmUgPSBuZXcgR3JhcGhpY3MoKTtcblxuICAgIGNsb25lLnJlbmRlcmFibGUgICAgPSB0aGlzLnJlbmRlcmFibGU7XG4gICAgY2xvbmUuZmlsbEFscGhhICAgICA9IHRoaXMuZmlsbEFscGhhO1xuICAgIGNsb25lLmxpbmVXaWR0aCAgICAgPSB0aGlzLmxpbmVXaWR0aDtcbiAgICBjbG9uZS5saW5lQ29sb3IgICAgID0gdGhpcy5saW5lQ29sb3I7XG4gICAgY2xvbmUudGludCAgICAgICAgICA9IHRoaXMudGludDtcbiAgICBjbG9uZS5ibGVuZE1vZGUgICAgID0gdGhpcy5ibGVuZE1vZGU7XG4gICAgY2xvbmUuaXNNYXNrICAgICAgICA9IHRoaXMuaXNNYXNrO1xuICAgIGNsb25lLmJvdW5kc1BhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG4gICAgY2xvbmUuZGlydHkgICAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuZ2xEaXJ0eSAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuY2FjaGVkU3ByaXRlRGlydHkgPSB0aGlzLmNhY2hlZFNwcml0ZURpcnR5O1xuXG4gICAgLy8gY29weSBncmFwaGljcyBkYXRhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIGNsb25lLmdyYXBoaWNzRGF0YS5wdXNoKHRoaXMuZ3JhcGhpY3NEYXRhW2ldLmNsb25lKCkpO1xuICAgIH1cblxuICAgIGNsb25lLmN1cnJlbnRQYXRoID0gY2xvbmUuZ3JhcGhpY3NEYXRhW2Nsb25lLmdyYXBoaWNzRGF0YS5sZW5ndGggLSAxXTtcblxuICAgIGNsb25lLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICByZXR1cm4gY2xvbmU7XG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgbGluZSBzdHlsZSB1c2VkIGZvciBzdWJzZXF1ZW50IGNhbGxzIHRvIEdyYXBoaWNzIG1ldGhvZHMgc3VjaCBhcyB0aGUgbGluZVRvKCkgbWV0aG9kIG9yIHRoZSBkcmF3Q2lyY2xlKCkgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUubGluZVN0eWxlID0gZnVuY3Rpb24gKGxpbmVXaWR0aCwgY29sb3IsIGFscGhhKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoIHx8IDA7XG4gICAgdGhpcy5saW5lQ29sb3IgPSBjb2xvciB8fCAwO1xuICAgIHRoaXMubGluZUFscGhhID0gKGFscGhhID09PSB1bmRlZmluZWQpID8gMSA6IGFscGhhO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBoYWxmd2F5IHRocm91Z2ggYSBsaW5lPyBzdGFydCBhIG5ldyBvbmUhXG4gICAgICAgICAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnNsaWNlKC0yKSk7XG4gICAgICAgICAgICBzaGFwZS5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSBpdHMgZW1wdHkgc28gbGV0cyBqdXN0IHNldCB0aGUgbGluZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVXaWR0aCA9IHRoaXMubGluZVdpZHRoO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZUFscGhhID0gdGhpcy5saW5lQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogTW92ZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byB4LCB5LlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IHRoZSBYIGNvb3JkaW5hdGUgdG8gbW92ZSB0b1xuICogQHBhcmFtIHkge251bWJlcn0gdGhlIFkgY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICAqL1xuR3JhcGhpY3MucHJvdG90eXBlLm1vdmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24oW3gseV0pO1xuICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIGxpbmUgdXNpbmcgdGhlIGN1cnJlbnQgbGluZSBzdHlsZSBmcm9tIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8gKHgsIHkpO1xuICogVGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiBpcyB0aGVuIHNldCB0byAoeCwgeSkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBkcmF3IHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lVG8gPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgsIHkpO1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnF1YWRyYXRpY0N1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICBuID0gMjAsXG4gICAgICAgIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLCAwKTtcbiAgICB9XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBuOyArK2kpXG4gICAge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgeGEgPSBmcm9tWCArICggKGNwWCAtIGZyb21YKSAqIGogKTtcbiAgICAgICAgeWEgPSBmcm9tWSArICggKGNwWSAtIGZyb21ZKSAqIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCggeGEgKyAoICgoY3BYICsgKCAodG9YIC0gY3BYKSAqIGogKSkgLSB4YSkgKiBqICksXG4gICAgICAgICAgICAgICAgICAgICB5YSArICggKChjcFkgKyAoICh0b1kgLSBjcFkpICogaiApKSAtIHlhKSAqIGogKSApO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gY3BYMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlemllckN1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIGNwWDIsIGNwWTIsIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgbiA9IDIwLFxuICAgICAgICBkdCxcbiAgICAgICAgZHQyLFxuICAgICAgICBkdDMsXG4gICAgICAgIHQyLFxuICAgICAgICB0MyxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICBkdCA9ICgxIC0gaik7XG4gICAgICAgIGR0MiA9IGR0ICogZHQ7XG4gICAgICAgIGR0MyA9IGR0MiAqIGR0O1xuXG4gICAgICAgIHQyID0gaiAqIGo7XG4gICAgICAgIHQzID0gdDIgKiBqO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCBkdDMgKiBmcm9tWCArIDMgKiBkdDIgKiBqICogY3BYICsgMyAqIGR0ICogdDIgKiBjcFgyICsgdDMgKiB0b1gsXG4gICAgICAgICAgICAgICAgICAgICBkdDMgKiBmcm9tWSArIDMgKiBkdDIgKiBqICogY3BZICsgMyAqIGR0ICogdDIgKiBjcFkyICsgdDMgKiB0b1kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjVG8oKSBtZXRob2QgY3JlYXRlcyBhbiBhcmMvY3VydmUgYmV0d2VlbiB0d28gdGFuZ2VudHMgb24gdGhlIGNhbnZhcy5cbiAqXG4gKiBcImJvcnJvd2VkXCIgZnJvbSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Z4Y2FudmFzLyAtIHRoYW5rcyBnb29nbGUhXG4gKlxuICogQHBhcmFtIHgxIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTEge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB4MiB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGFyY1xuICogQHBhcmFtIHkyIHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGFyY1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmFyY1RvID0gZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyLCByYWRpdXMpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oeDEsIHkxKTtcbiAgICB9XG5cbiAgICB2YXIgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMsXG4gICAgICAgIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0sXG4gICAgICAgIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0sXG4gICAgICAgIGExID0gZnJvbVkgLSB5MSxcbiAgICAgICAgYjEgPSBmcm9tWCAtIHgxLFxuICAgICAgICBhMiA9IHkyICAgLSB5MSxcbiAgICAgICAgYjIgPSB4MiAgIC0geDEsXG4gICAgICAgIG1tID0gTWF0aC5hYnMoYTEgKiBiMiAtIGIxICogYTIpO1xuXG4gICAgaWYgKG1tIDwgMS4wZS04IHx8IHJhZGl1cyA9PT0gMClcbiAgICB7XG4gICAgICAgIGlmIChwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAhPT0geDEgfHwgcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0gIT09IHkxKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHMucHVzaCh4MSwgeTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBkZCA9IGExICogYTEgKyBiMSAqIGIxLFxuICAgICAgICAgICAgY2MgPSBhMiAqIGEyICsgYjIgKiBiMixcbiAgICAgICAgICAgIHR0ID0gYTEgKiBhMiArIGIxICogYjIsXG4gICAgICAgICAgICBrMSA9IHJhZGl1cyAqIE1hdGguc3FydChkZCkgLyBtbSxcbiAgICAgICAgICAgIGsyID0gcmFkaXVzICogTWF0aC5zcXJ0KGNjKSAvIG1tLFxuICAgICAgICAgICAgajEgPSBrMSAqIHR0IC8gZGQsXG4gICAgICAgICAgICBqMiA9IGsyICogdHQgLyBjYyxcbiAgICAgICAgICAgIGN4ID0gazEgKiBiMiArIGsyICogYjEsXG4gICAgICAgICAgICBjeSA9IGsxICogYTIgKyBrMiAqIGExLFxuICAgICAgICAgICAgcHggPSBiMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHB5ID0gYTEgKiAoazIgKyBqMSksXG4gICAgICAgICAgICBxeCA9IGIyICogKGsxICsgajIpLFxuICAgICAgICAgICAgcXkgPSBhMiAqIChrMSArIGoyKSxcbiAgICAgICAgICAgIHN0YXJ0QW5nbGUgPSBNYXRoLmF0YW4yKHB5IC0gY3ksIHB4IC0gY3gpLFxuICAgICAgICAgICAgZW5kQW5nbGUgICA9IE1hdGguYXRhbjIocXkgLSBjeSwgcXggLSBjeCk7XG5cbiAgICAgICAgdGhpcy5hcmMoY3ggKyB4MSwgY3kgKyB5MSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYjEgKiBhMiA+IGIyICogYTEpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSAodXNlZCB0byBjcmVhdGUgY2lyY2xlcywgb3IgcGFydHMgb2YgY2lyY2xlcykuXG4gKlxuICogQHBhcmFtIGN4IHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gY3kge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gc3RhcnRBbmdsZSB7bnVtYmVyfSBUaGUgc3RhcnRpbmcgYW5nbGUsIGluIHJhZGlhbnMgKDAgaXMgYXQgdGhlIDMgbydjbG9jayBwb3NpdGlvbiBvZiB0aGUgYXJjJ3MgY2lyY2xlKVxuICogQHBhcmFtIGVuZEFuZ2xlIHtudW1iZXJ9IFRoZSBlbmRpbmcgYW5nbGUsIGluIHJhZGlhbnNcbiAqIEBwYXJhbSBhbnRpY2xvY2t3aXNlIHtib29sZWFufSBPcHRpb25hbC4gU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGRyYXdpbmcgc2hvdWxkIGJlIGNvdW50ZXJjbG9ja3dpc2Ugb3IgY2xvY2t3aXNlLiBGYWxzZSBpcyBkZWZhdWx0LCBhbmQgaW5kaWNhdGVzIGNsb2Nrd2lzZSwgd2hpbGUgdHJ1ZSBpbmRpY2F0ZXMgY291bnRlci1jbG9ja3dpc2UuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjID0gZnVuY3Rpb24oY3gsIGN5LCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBhbnRpY2xvY2t3aXNlKVxue1xuICAgIGFudGljbG9ja3dpc2UgPSBhbnRpY2xvY2t3aXNlIHx8IGZhbHNlO1xuXG4gICAgaWYgKHN0YXJ0QW5nbGUgPT09IGVuZEFuZ2xlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYoICFhbnRpY2xvY2t3aXNlICYmIGVuZEFuZ2xlIDw9IHN0YXJ0QW5nbGUgKVxuICAgIHtcbiAgICAgICAgZW5kQW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuICAgIGVsc2UgaWYoIGFudGljbG9ja3dpc2UgJiYgc3RhcnRBbmdsZSA8PSBlbmRBbmdsZSApXG4gICAge1xuICAgICAgICBzdGFydEFuZ2xlICs9IE1hdGguUEkgKiAyO1xuICAgIH1cblxuICAgIHZhciBzd2VlcCA9IGFudGljbG9ja3dpc2UgPyAoc3RhcnRBbmdsZSAtIGVuZEFuZ2xlKSAqIC0xIDogKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSk7XG4gICAgdmFyIHNlZ3MgPSAgTWF0aC5jZWlsKE1hdGguYWJzKHN3ZWVwKSAvIChNYXRoLlBJICogMikpICogNDA7XG5cbiAgICBpZihzd2VlcCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBzdGFydFggPSBjeCArIE1hdGguY29zKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuICAgIHZhciBzdGFydFkgPSBjeSArIE1hdGguc2luKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHN0YXJ0WCwgc3RhcnRZKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciB0aGV0YSA9IHN3ZWVwLyhzZWdzKjIpO1xuICAgIHZhciB0aGV0YTIgPSB0aGV0YSoyO1xuXG4gICAgdmFyIGNUaGV0YSA9IE1hdGguY29zKHRoZXRhKTtcbiAgICB2YXIgc1RoZXRhID0gTWF0aC5zaW4odGhldGEpO1xuXG4gICAgdmFyIHNlZ01pbnVzID0gc2VncyAtIDE7XG5cbiAgICB2YXIgcmVtYWluZGVyID0gKCBzZWdNaW51cyAlIDEgKSAvIHNlZ01pbnVzO1xuXG4gICAgZm9yKHZhciBpPTA7IGk8PXNlZ01pbnVzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcmVhbCA9ICBpICsgcmVtYWluZGVyICogaTtcblxuXG4gICAgICAgIHZhciBhbmdsZSA9ICgodGhldGEpICsgc3RhcnRBbmdsZSArICh0aGV0YTIgKiByZWFsKSk7XG5cbiAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgIHZhciBzID0gLU1hdGguc2luKGFuZ2xlKTtcblxuICAgICAgICBwb2ludHMucHVzaCgoIChjVGhldGEgKiAgYykgKyAoc1RoZXRhICogcykgKSAqIHJhZGl1cyArIGN4LFxuICAgICAgICAgICAgICAgICAgICAoIChjVGhldGEgKiAtcykgKyAoc1RoZXRhICogYykgKSAqIHJhZGl1cyArIGN5KTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIGEgc2ltcGxlIG9uZS1jb2xvciBmaWxsIHRoYXQgc3Vic2VxdWVudCBjYWxscyB0byBvdGhlciBHcmFwaGljcyBtZXRob2RzXG4gKiAoc3VjaCBhcyBsaW5lVG8oKSBvciBkcmF3Q2lyY2xlKCkpIHVzZSB3aGVuIGRyYXdpbmcuXG4gKlxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlZ2luRmlsbCA9IGZ1bmN0aW9uIChjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5maWxsaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPD0gMilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsID0gdGhpcy5maWxsaW5nO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQ29sb3IgPSB0aGlzLmZpbGxDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbEFscGhhID0gdGhpcy5maWxsQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBmaWxsIHRvIHRoZSBsaW5lcyBhbmQgc2hhcGVzIHRoYXQgd2VyZSBhZGRlZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHRoZSBiZWdpbkZpbGwoKSBtZXRob2QuXG4gKlxuICogQHJldHVybiB7R3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5lbmRGaWxsID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IG51bGw7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCApXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguUmVjdGFuZ2xlKHgseSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gUmFkaXVzIG9mIHRoZSByZWN0YW5nbGUgY29ybmVyc1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSb3VuZGVkUmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzIClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5Sb3VuZGVkUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgY2lyY2xlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3Q2lyY2xlID0gZnVuY3Rpb24gKHgsIHksIHJhZGl1cylcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5DaXJjbGUoeCx5LCByYWRpdXMpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhbiBlbGxpcHNlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIGhhbGYgd2lkdGggb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd0VsbGlwc2UgPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5FbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIHBvbHlnb24gdXNpbmcgdGhlIGdpdmVuIHBhdGguXG4gKlxuICogQHBhcmFtIHBhdGgge251bWJlcltdfFBJWEkuUG9pbnRbXX0gVGhlIHBhdGggZGF0YSB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgcG9seWdvbi5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UG9seWdvbiA9IGZ1bmN0aW9uIChwYXRoKVxue1xuICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGFzc2lnbm1lbnQgZGVvcHRcbiAgICAvLyBzZWUgc2VjdGlvbiAzLjE6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgIHZhciBwb2ludHMgPSBwYXRoO1xuXG4gICAgdmFyIGNsb3NlZCA9IHRydWU7XG5cbiAgICBpZiAocG9pbnRzIGluc3RhbmNlb2YgbWF0aC5Qb2x5Z29uKVxuICAgIHtcbiAgICAgICAgY2xvc2VkID0gcG9pbnRzLmNsb3NlZDtcbiAgICAgICAgcG9pbnRzID0gcG9pbnRzLnBvaW50cztcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHNbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHBvaW50cyk7XG4gICAgc2hhcGUuY2xvc2VkID0gY2xvc2VkO1xuXG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZ3JhcGhpY3MgdGhhdCB3ZXJlIGRyYXduIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LCBhbmQgcmVzZXRzIGZpbGwgYW5kIGxpbmUgc3R5bGUgc2V0dGluZ3MuXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG4gICAgdGhpcy5maWxsaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmNsZWFyRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gW107XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGdlb21ldHJ5IGlzIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNob3VsZCBiZSBvbmUgb2YgdGhlIHNjYWxlTW9kZSBjb25zdHNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBncmFwaGljcyBvYmplY3RcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVzb2x1dGlvbiwgc2NhbGVNb2RlKVxue1xuXG4gICAgcmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGggKiByZXNvbHV0aW9uLCBib3VuZHMuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXNCdWZmZXIuY29udGV4dC5zY2FsZShyZXNvbHV0aW9uLCByZXNvbHV0aW9uKTtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIGNhbnZhc0J1ZmZlci5jb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcblxuICAgIGlmICh0aGlzLmdsRGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5nbERpcnR5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5yZW5kZXIodGhpcyk7XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5pc01hc2sgPT09IHRydWUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHRpbnQgaGFzIGNoYW5nZWQsIHNldCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRpcnR5LlxuICAgIGlmICh0aGlzLl9wcmV2VGludCAhPT0gdGhpcy50aW50KSB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIHRoaXMgY29kZSBtYXkgc3RpbGwgYmUgbmVlZGVkIHNvIGxlYXZpbmcgZm9yIG5vdy4uXG4gICAgLy9cbiAgICAvKlxuICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuZGlydHkgfHwgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVDYWNoZWRTcHJpdGUoKTtcblxuICAgICAgICAgICAgLy8gd2Ugd2lsbCBhbHNvIG5lZWQgdG8gdXBkYXRlIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUoKTtcblxuICAgICAgICAgICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFscGhhID0gdGhpcy5hbHBoYTtcblxuICAgICAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLl9jYWNoZWRTcHJpdGUsIHJlbmRlcmVyKTtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgICovXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY29udGV4dCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYm91bmRzIG9mIHRoZSBncmFwaGljIHNoYXBlIGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IFRoZSB3b3JsZCB0cmFuc2Zvcm0gbWF0cml4IHRvIHVzZSwgZGVmYXVsdHMgdG8gdGhpc1xuICogIG9iamVjdCdzIHdvcmxkVHJhbnNmb3JtLlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICAvLyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBpdGVtIGlzIGEgbWFzayFcbiAgICAgICAgaWYgKCF0aGlzLnJlbmRlcmFibGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJvdW5kc0RpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICAgICAgICAgIHRoaXMuZ2xEaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYm91bmRzRGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9sb2NhbEJvdW5kcztcblxuICAgICAgICB2YXIgdzAgPSBib3VuZHMueDtcbiAgICAgICAgdmFyIHcxID0gYm91bmRzLndpZHRoICsgYm91bmRzLng7XG5cbiAgICAgICAgdmFyIGgwID0gYm91bmRzLnk7XG4gICAgICAgIHZhciBoMSA9IGJvdW5kcy5oZWlnaHQgKyBib3VuZHMueTtcblxuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAgICAgdmFyIHgyID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgICAgICB2YXIgeTMgPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgICAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgbWF4WCA9IHgxO1xuICAgICAgICB2YXIgbWF4WSA9IHkxO1xuXG4gICAgICAgIHZhciBtaW5YID0geDE7XG4gICAgICAgIHZhciBtaW5ZID0geTE7XG5cbiAgICAgICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICAgICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICAgICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgICAgICB0aGlzLl9ib3VuZHMueCA9IG1pblg7XG4gICAgICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy55ID0gbWluWTtcbiAgICAgICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSB0aGlzLl9ib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBncmFwaGljcyBvYmplY3RcbipcbiogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4qL1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciBncmFwaGljc0RhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKCFkYXRhLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gb25seSBkZWFsIHdpdGggZmlsbHMuLlxuICAgICAgICBpZiAoZGF0YS5zaGFwZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCBkYXRhLnNoYXBlLmNvbnRhaW5zKCB0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkgKSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAqXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcblxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICBpZiAodGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdmFyIHNoYXBlLCBwb2ludHMsIHgsIHksIHcsIGg7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVtpXTtcbiAgICAgICAgICAgIHZhciB0eXBlID0gZGF0YS50eXBlO1xuICAgICAgICAgICAgdmFyIGxpbmVXaWR0aCA9IGRhdGEubGluZVdpZHRoO1xuICAgICAgICAgICAgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QgfHwgdHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLnggLSBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueSAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS53aWR0aCArIGxpbmVXaWR0aDtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLnJhZGl1cyArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLng7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLmhlaWdodCArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFBPTFlcbiAgICAgICAgICAgICAgICBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBvaW50cy5sZW5ndGg7IGogKz0gMilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHggPSBwb2ludHNbal07XG4gICAgICAgICAgICAgICAgICAgIHkgPSBwb2ludHNbaisxXTtcblxuICAgICAgICAgICAgICAgICAgICBtaW5YID0geC1saW5lV2lkdGggPCBtaW5YID8geC1saW5lV2lkdGggOiBtaW5YO1xuICAgICAgICAgICAgICAgICAgICBtYXhYID0geCtsaW5lV2lkdGggPiBtYXhYID8geCtsaW5lV2lkdGggOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblkgPSB5LWxpbmVXaWR0aCA8IG1pblkgPyB5LWxpbmVXaWR0aCA6IG1pblk7XG4gICAgICAgICAgICAgICAgICAgIG1heFkgPSB5K2xpbmVXaWR0aCA+IG1heFkgPyB5K2xpbmVXaWR0aCA6IG1heFk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIG1pblggPSAwO1xuICAgICAgICBtYXhYID0gMDtcbiAgICAgICAgbWluWSA9IDA7XG4gICAgICAgIG1heFkgPSAwO1xuICAgIH1cblxuICAgIHZhciBwYWRkaW5nID0gdGhpcy5ib3VuZHNQYWRkaW5nO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueCA9IG1pblggLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLndpZHRoID0gKG1heFggLSBtaW5YKSArIHBhZGRpbmcgKiAyO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueSA9IG1pblkgLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLmhlaWdodCA9IChtYXhZIC0gbWluWSkgKyBwYWRkaW5nICogMjtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjYWNoZWQgc3ByaXRlIHdoZW4gdGhlIHNwcml0ZSBoYXMgY2FjaGVBc0JpdG1hcCA9IHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIGlmICghdGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgdmFyIGNhbnZhc0J1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcbiAgICAgICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzQnVmZmVyLmNhbnZhcyk7XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlciA9IGNhbnZhc0J1ZmZlcjtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLnJlc2l6ZShib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIC8vIGxldmVyYWdlIHRoZSBhbmNob3IgdG8gYWNjb3VudCBmb3IgdGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudFxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQuc2F2ZSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC50cmFuc2xhdGUoLWJvdW5kcy54LC1ib3VuZHMueSk7XG5cbiAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3MgdG8gMSBmb3IgdGhlIHJlbmRlci4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIG5vdyByZW5kZXIgdGhlIGdyYXBoaWMuLlxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dCk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xufTtcbiovXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVDYWNoZWRTcHJpdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2FjaGVkU3ByaXRlID0gdGhpcy5fY2FjaGVkU3ByaXRlO1xuICAgIHZhciB0ZXh0dXJlID0gY2FjaGVkU3ByaXRlLnRleHR1cmU7XG4gICAgdmFyIGNhbnZhcyA9IGNhY2hlZFNwcml0ZS5idWZmZXIuY2FudmFzO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG4gICAgdGV4dHVyZS5jcm9wLndpZHRoID0gdGV4dHVyZS5mcmFtZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmNyb3AuaGVpZ2h0ID0gdGV4dHVyZS5mcmFtZS5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgY2FjaGVkU3ByaXRlLl93aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICBjYWNoZWRTcHJpdGUuX2hlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIGRpcnR5IGJhc2UgdGV4dHVyZXNcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmRpcnR5KCk7XG59OyovXG5cbi8qKlxuICogRGVzdHJveXMgYSBwcmV2aW91cyBjYWNoZWQgc3ByaXRlLlxuICpcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95Q2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUudGV4dHVyZS5kZXN0cm95KHRydWUpO1xuXG4gICAgLy8gbGV0IHRoZSBnYyBjb2xsZWN0IHRoZSB1bnVzZWQgc3ByaXRlXG4gICAgLy8gVE9ETyBjb3VsZCBiZSBvYmplY3QgcG9vbGVkIVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59OyovXG5cbi8qKlxuICogRHJhd3MgdGhlIGdpdmVuIHNoYXBlIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LiBDYW4gYmUgYW55IG9mIENpcmNsZSwgUmVjdGFuZ2xlLCBFbGxpcHNlLCBMaW5lIG9yIFBvbHlnb24uXG4gKlxuICogQHBhcmFtIHNoYXBlIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc0RhdGF9IFRoZSBnZW5lcmF0ZWQgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdTaGFwZSA9IGZ1bmN0aW9uIChzaGFwZSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIC8vIGNoZWNrIGN1cnJlbnQgcGF0aCFcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YS5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgdmFyIGRhdGEgPSBuZXcgR3JhcGhpY3NEYXRhKHRoaXMubGluZVdpZHRoLCB0aGlzLmxpbmVDb2xvciwgdGhpcy5saW5lQWxwaGEsIHRoaXMuZmlsbENvbG9yLCB0aGlzLmZpbGxBbHBoYSwgdGhpcy5maWxsaW5nLCBzaGFwZSk7XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YS5wdXNoKGRhdGEpO1xuXG4gICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAge1xuICAgICAgICBkYXRhLnNoYXBlLmNsb3NlZCA9IGRhdGEuc2hhcGUuY2xvc2VkIHx8IHRoaXMuZmlsbGluZztcbiAgICAgICAgdGhpcy5jdXJyZW50UGF0aCA9IGRhdGE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGRhdGE7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgLy8gZGVzdHJveSBlYWNoIG9mIHRoZSBHcmFwaGljc0RhdGEgb2JqZWN0c1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8vIGZvciBlYWNoIHdlYmdsIGRhdGEgZW50cnksIGRlc3Ryb3kgdGhlIFdlYkdMR3JhcGhpY3NEYXRhXG4gICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fd2ViZ2wpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl93ZWJnbFtpZF0uZGF0YS5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgdGhpcy5fd2ViZ2xbaWRdLmRhdGFbal0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG4gICAgdGhpcy5fd2ViZ2wgPSBudWxsO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEEgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gbGluZVdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gZmlsbENvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGxBbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBmaWxsICAgICAge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICogQHBhcmFtIHNoYXBlICAgICB7Q2lyY2xlfFJlY3RhbmdsZXxFbGxpcHNlfExpbmV8UG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICovXG5mdW5jdGlvbiBHcmFwaGljc0RhdGEobGluZVdpZHRoLCBsaW5lQ29sb3IsIGxpbmVBbHBoYSwgZmlsbENvbG9yLCBmaWxsQWxwaGEsIGZpbGwsIHNoYXBlKVxue1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQ29sb3IgPSBsaW5lQ29sb3I7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQWxwaGEgPSBsaW5lQWxwaGE7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLl9saW5lVGludCA9IGxpbmVDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxDb2xvciA9IGZpbGxDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IGZpbGxBbHBoYTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBjYWNoZWQgdGludCBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuX2ZpbGxUaW50ID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhcGUgaXMgZmlsbGVkIHdpdGggYSBjb2xvdXJcbiAgICAgKi9cbiAgICB0aGlzLmZpbGwgPSBmaWxsO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICAgICAqL1xuICAgIHRoaXMuc2hhcGUgPSBzaGFwZTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBUaGUgdHlwZSBvZiB0aGUgc2hhcGUsIHNlZSB0aGUgQ29uc3QuU2hhcGVzIGZpbGUgZm9yIGFsbCB0aGUgZXhpc3RpbmcgdHlwZXMsXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gc2hhcGUudHlwZTtcbn1cblxuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3NEYXRhIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBHcmFwaGljc0RhdGEoXG4gICAgICAgIHRoaXMubGluZVdpZHRoLFxuICAgICAgICB0aGlzLmxpbmVDb2xvcixcbiAgICAgICAgdGhpcy5saW5lQWxwaGEsXG4gICAgICAgIHRoaXMuZmlsbENvbG9yLFxuICAgICAgICB0aGlzLmZpbGxBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsLFxuICAgICAgICB0aGlzLnNoYXBlXG4gICAgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIGRhdGEuXG4gKi9cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnNoYXBlID0gbnVsbDtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL1dlYkdMR3JhcGhpY3NEYXRhJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuXG4gICAgLy8gc29tZSBkcmF3aW5nIGZ1bmN0aW9ucy4uXG4gICAgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi91dGlscy9idWlsZExpbmUnKTtcbiAgICBidWlsZFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUG9seScpO1xuICAgIGJ1aWxkQ29tcGxleFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ29tcGxleFBvbHknKTtcbiAgICBidWlsZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSZWN0YW5nbGUnKTtcbiAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkQ2lyY2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZENpcmNsZScpO1xuXG4gICAgZWFyY3V0ID0gcmVxdWlyZSgnZWFyY3V0Jyk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IFtdO1xuXG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgYSBwb2x5IGNhbiBjb250YWluIGJlZm9yZSBpdCBpcyByZW5kZXJlZCBhcyBhIGNvbXBsZXggcG9seWdvbiAodXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyKVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgPSAyMDA7XG59XG5cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc1JlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdncmFwaGljcycsIEdyYXBoaWNzUmVuZGVyZXIpO1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMuZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzLmdsKVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHJlbmRlcmVyLlxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YVBvb2wubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBudWxsO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuICAvLyAgY29uc29sZS5sb2coZ3JhcGhpY3MpXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5IHx8ICFncmFwaGljcy5fd2ViR0xbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljcyhncmFwaGljcyk7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIFRoaXMgIGNvdWxkIGJlIHNwZWVkZWQgdXAgZm9yIHN1cmUhXG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggZ3JhcGhpY3MuYmxlbmRNb2RlICk7XG5cbi8vICAgIHZhciBtYXRyaXggPSAgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0uY2xvbmUoKTtcbi8vICAgIHZhciBtYXRyaXggPSAgcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7XG4vLyAgICBtYXRyaXguYXBwZW5kKGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gd2ViR0wuZGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTC5kYXRhW2ldLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyBmaXggdGhpcyBvbmUhXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEgKiB3ZWJHTERhdGEuYWxwaGEpO1xuXG4gICAgICAgICAgICAvLyByZW5kZXIgcXVhZC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgcmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeCA9IGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLmxvY2F0aW9uKTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHVwZGF0ZVxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgLy8gZ2V0IHRoZSBjb250ZXh0cyBncmFwaGljcyBvYmplY3RcbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd2ViR0wgY29udGV4dCB0aW1lIHRvIGNyZWF0ZSBpdCFcbiAgICBpZiAoIXdlYkdMKVxuICAgIHtcbiAgICAgICAgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdID0ge2xhc3RJbmRleDowLCBkYXRhOltdLCBnbDpnbH07XG4gICAgfVxuXG4gICBcbiAgICAvLyBmbGFnIHRoZSBncmFwaGljcyBhcyBub3QgZGlydHkgYXMgd2UgYXJlIGFib3V0IHRvIHVwZGF0ZSBpdC4uLlxuICAgIGdyYXBoaWNzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB2YXIgaTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGNsZWFyZWQgdGhlIGdyYXBoaWNzIG9iamVjdCB3ZSB3aWxsIG5lZWQgdG8gY2xlYXIgZXZlcnkgb2JqZWN0XG4gICAgaWYgKGdyYXBoaWNzLmNsZWFyRGlydHkpXG4gICAge1xuICAgICAgICBncmFwaGljcy5jbGVhckRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuZCByZXR1cm4gYWxsIHRoZSB3ZWJHTERhdGFzIHRvIHRoZSBvYmplY3QgcG9vbCBzbyB0aGFuIGNhbiBiZSByZXVzZWQgbGF0ZXIgb25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBncmFwaGljc0RhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucHVzaCggZ3JhcGhpY3NEYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgYXJyYXkgYW5kIHJlc2V0IHRoZSBpbmRleC4uXG4gICAgICAgIHdlYkdMLmRhdGEgPSBbXTtcbiAgICAgICAgd2ViR0wubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBncmFwaGljcyBkYXRhcyBhbmQgY29uc3RydWN0IGVhY2ggb25lLi5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGEgY29tcGxleCBmaWxsIHRoZW4gdGhlIG5ldyBzdGVuY2lsIGJ1ZmZlciB0ZWNobmlxdWUgd2lsbCBiZSB1c2VkXG4gICAgLy8gb3RoZXIgd2lzZSBncmFwaGljcyBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIGludG8gYSBiYXRjaC4uXG4gICAgZm9yIChpID0gd2ViR0wubGFzdEluZGV4OyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBwb2ludHMgdGhlIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgICAgICAgICAgZGF0YS5wb2ludHMgPSBkYXRhLnNoYXBlLnBvaW50cy5zbGljZSgpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBwb2x5IGlmIHRoZSB2YWx1ZSBpcyB0cnVlIVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50c1swXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTJdIHx8IGRhdGEucG9pbnRzWzFdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKGRhdGEucG9pbnRzWzBdLCBkYXRhLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNQUtFIFNVUkUgV0UgSEFWRSBUSEUgQ09SUkVDVCBUWVBFLi5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA+PSA2KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA8IHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplICogMilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkRyYXdVc2luZ1NpbXBsZSA9IGJ1aWxkUG9seShkYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkRyYXdVc2luZ1NpbXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoID4gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuICAgICAgICAgICAgICAgIGJ1aWxkTGluZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMgfHwgZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZENpcmNsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCsrO1xuICAgIH1cblxuICAgIC8vIHVwbG9hZCBhbGwgdGhlIGRpcnR5IGRhdGEuLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5kaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhLnVwbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gd2ViR0wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSBUT0RPIEBBbHZpblxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5zd2l0Y2hNb2RlID0gZnVuY3Rpb24gKHdlYkdMLCB0eXBlKVxue1xuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICBpZiAoIXdlYkdMLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbd2ViR0wuZGF0YS5sZW5ndGgtMV07XG5cbiAgICAgICAgaWYgKCh3ZWJHTERhdGEucG9pbnRzLmxlbmd0aCA+IDMyMDAwMCkgfHwgd2ViR0xEYXRhLm1vZGUgIT09IHR5cGUgfHwgdHlwZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdlYkdMRGF0YS5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gd2ViR0xEYXRhO1xufTtcblxuIiwiLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyBXZWJHTCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gV2ViR0xHcmFwaGljc0RhdGEoZ2wpIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vVE9ETyBkb2VzIHRoaXMgbmVlZCB0byBiZSBzcGxpdCBiZWZvcmUgdXBsb2Rpbmc/P1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvbG9yIGNvbXBvbmVudHMgKHIsZyxiKVxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3IgPSBbMCwwLDBdOyAvLyBjb2xvciBzcGxpdCFcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBvaW50cyB0byBkcmF3XG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIHRvZG8gQGFsdmluXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubW9kZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGdyYXBoaWNzIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHZlcnRpY2VzIGFuZCB0aGUgaW5kaWNlc1xuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb2ludHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmluZGljZXMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4vLyAgICB0aGlzLmxhc3RJbmRleCA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5nbFBvaW50cyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5wb2ludHMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuYnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5nbFBvaW50cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5nbEluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuZ2xJbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLnBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBcbiAgICB0aGlzLmdsID0gbnVsbDtcblxuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoZ2wpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgZ2wsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgY2lyY2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byBkcmF3XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ2lyY2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIHZhciBjaXJjbGVEYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gY2lyY2xlRGF0YS54O1xuICAgIHZhciB5ID0gY2lyY2xlRGF0YS55O1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuXG4gICAgLy8gVE9ETyAtIGJpdCBoYWNreT8/XG4gICAgaWYgKGdyYXBoaWNzRGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB0b3RhbFNlZ3MgPSBNYXRoLmZsb29yKDMwICogTWF0aC5zcXJ0KGNpcmNsZURhdGEucmFkaXVzKSkgfHwgTWF0aC5mbG9vcigxNSAqIE1hdGguc3FydChjaXJjbGVEYXRhLndpZHRoICsgY2lyY2xlRGF0YS5oZWlnaHQpKTtcbiAgICB2YXIgc2VnID0gKE1hdGguUEkgKiAyKSAvIHRvdGFsU2VncyA7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcyk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDEgOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCx5LCByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKyssIHZlY1BvcysrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MtMSk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDaXJjbGU7IiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuICAgIFxuXG5cbi8qKlxuICogQnVpbGRzIGEgY29tcGxleCBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDb21wbGV4UG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvL1RPRE8gLSBubyBuZWVkIHRvIGNvcHkgdGhpcyBhcyBpdCBnZXRzIHR1cm5lZCBpbnRvIGEgRkxvYXQzMkFycmF5IGFueXdheXMuLlxuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzLnNsaWNlKCk7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDYpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgd2ViR0xEYXRhLnBvaW50cyA9IHBvaW50cztcbiAgICB3ZWJHTERhdGEuYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHdlYkdMRGF0YS5jb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG5cbiAgICAvLyBjYWxjbGF0ZSB0aGUgYm91bmRzLi5cbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIHZhciB4LHk7XG5cbiAgICAvLyBnZXQgc2l6ZS4uXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKz0yKVxuICAgIHtcbiAgICAgICAgeCA9IHBvaW50c1tpXTtcbiAgICAgICAgeSA9IHBvaW50c1tpKzFdO1xuXG4gICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICBtYXhYID0geCA+IG1heFggPyB4IDogbWF4WDtcblxuICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcbiAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgcXVhZCB0byB0aGUgZW5kIGNvcyB0aGVyZSBpcyBubyBwb2ludCBtYWtpbmcgYW5vdGhlciBidWZmZXIhXG4gICAgcG9pbnRzLnB1c2gobWluWCwgbWluWSxcbiAgICAgICAgICAgICAgICBtYXhYLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1heFksXG4gICAgICAgICAgICAgICAgbWluWCwgbWF4WSk7XG5cbiAgICAvLyBwdXNoIGEgcXVhZCBvbnRvIHRoZSBlbmQuLlxuXG4gICAgLy9UT0RPIC0gdGhpcyBhaW50IG5lZWRlZCFcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKCBpICk7XG4gICAgfVxuXG59O1xuXG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENvbXBsZXhQb2x5OyIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBsaW5lIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRMaW5lID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIFRPRE8gT1BUSU1JU0UhXG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGlmIHRoZSBsaW5lIHdpZHRoIGlzIGFuIG9kZCBudW1iZXIgYWRkIDAuNSB0byBhbGlnbiB0byBhIHdob2xlIHBpeGVsXG4gICAgLy8gY29tbWVudGluZyB0aGlzIG91dCBmaXhlcyAjNzExIGFuZCAjMTYyMFxuICAgIC8vIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoJTIpXG4gICAgLy8ge1xuICAgIC8vICAgICBmb3IgKGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKVxuICAgIC8vICAgICB7XG4gICAgLy8gICAgICAgICBwb2ludHNbaV0gKz0gMC41O1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBmaXJzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgIHZhciBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgIC8vIGlmIHRoZSBmaXJzdCBwb2ludCBpcyB0aGUgbGFzdCBwb2ludCAtIGdvbm5hIGhhdmUgaXNzdWVzIDopXG4gICAgaWYgKGZpcnN0UG9pbnQueCA9PT0gbGFzdFBvaW50LnggJiYgZmlyc3RQb2ludC55ID09PSBsYXN0UG9pbnQueSlcbiAgICB7XG4gICAgICAgIC8vIG5lZWQgdG8gY2xvbmUgYXMgd2UgYXJlIGdvaW5nIHRvIHNsaWdodGx5IG1vZGlmeSB0aGUgc2hhcGUuLlxuICAgICAgICBwb2ludHMgPSBwb2ludHMuc2xpY2UoKTtcblxuICAgICAgICBwb2ludHMucG9wKCk7XG4gICAgICAgIHBvaW50cy5wb3AoKTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgICAgICB2YXIgbWlkUG9pbnRYID0gbGFzdFBvaW50LnggKyAoZmlyc3RQb2ludC54IC0gbGFzdFBvaW50LngpICowLjU7XG4gICAgICAgIHZhciBtaWRQb2ludFkgPSBsYXN0UG9pbnQueSArIChmaXJzdFBvaW50LnkgLSBsYXN0UG9pbnQueSkgKjAuNTtcblxuICAgICAgICBwb2ludHMudW5zaGlmdChtaWRQb2ludFgsIG1pZFBvaW50WSk7XG4gICAgICAgIHBvaW50cy5wdXNoKG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICB9XG5cbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgIHZhciBpbmRleENvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICB2YXIgaW5kZXhTdGFydCA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgLy8gRFJBVyB0aGUgTGluZVxuICAgIHZhciB3aWR0aCA9IGdyYXBoaWNzRGF0YS5saW5lV2lkdGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmxpbmVDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmxpbmVBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciBweCwgcHksIHAxeCwgcDF5LCBwMngsIHAyeSwgcDN4LCBwM3k7XG4gICAgdmFyIHBlcnB4LCBwZXJweSwgcGVycDJ4LCBwZXJwMnksIHBlcnAzeCwgcGVycDN5O1xuICAgIHZhciBhMSwgYjEsIGMxLCBhMiwgYjIsIGMyO1xuICAgIHZhciBkZW5vbSwgcGRpc3QsIGRpc3Q7XG5cbiAgICBwMXggPSBwb2ludHNbMF07XG4gICAgcDF5ID0gcG9pbnRzWzFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWzJdO1xuICAgIHAyeSA9IHBvaW50c1szXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gIHAxeCAtIHAyeDtcblxuICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG5cbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAvLyBzdGFydFxuICAgIHZlcnRzLnB1c2gocDF4IC0gcGVycHggLCBwMXkgLSBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAxeCArIHBlcnB4ICwgcDF5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgZm9yIChpID0gMTsgaSA8IGxlbmd0aC0xOyBpKyspXG4gICAge1xuICAgICAgICBwMXggPSBwb2ludHNbKGktMSkqMl07XG4gICAgICAgIHAxeSA9IHBvaW50c1soaS0xKSoyICsgMV07XG5cbiAgICAgICAgcDJ4ID0gcG9pbnRzWyhpKSoyXTtcbiAgICAgICAgcDJ5ID0gcG9pbnRzWyhpKSoyICsgMV07XG5cbiAgICAgICAgcDN4ID0gcG9pbnRzWyhpKzEpKjJdO1xuICAgICAgICBwM3kgPSBwb2ludHNbKGkrMSkqMiArIDFdO1xuXG4gICAgICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgICAgICBwZXJweSA9IHAxeCAtIHAyeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgICAgICBwZXJweCAvPSBkaXN0O1xuICAgICAgICBwZXJweSAvPSBkaXN0O1xuICAgICAgICBwZXJweCAqPSB3aWR0aDtcbiAgICAgICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAgICAgcGVycDJ4ID0gLShwMnkgLSBwM3kpO1xuICAgICAgICBwZXJwMnkgPSBwMnggLSBwM3g7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwMngqcGVycDJ4ICsgcGVycDJ5KnBlcnAyeSk7XG4gICAgICAgIHBlcnAyeCAvPSBkaXN0O1xuICAgICAgICBwZXJwMnkgLz0gZGlzdDtcbiAgICAgICAgcGVycDJ4ICo9IHdpZHRoO1xuICAgICAgICBwZXJwMnkgKj0gd2lkdGg7XG5cbiAgICAgICAgYTEgPSAoLXBlcnB5ICsgcDF5KSAtICgtcGVycHkgKyBwMnkpO1xuICAgICAgICBiMSA9ICgtcGVycHggKyBwMngpIC0gKC1wZXJweCArIHAxeCk7XG4gICAgICAgIGMxID0gKC1wZXJweCArIHAxeCkgKiAoLXBlcnB5ICsgcDJ5KSAtICgtcGVycHggKyBwMngpICogKC1wZXJweSArIHAxeSk7XG4gICAgICAgIGEyID0gKC1wZXJwMnkgKyBwM3kpIC0gKC1wZXJwMnkgKyBwMnkpO1xuICAgICAgICBiMiA9ICgtcGVycDJ4ICsgcDJ4KSAtICgtcGVycDJ4ICsgcDN4KTtcbiAgICAgICAgYzIgPSAoLXBlcnAyeCArIHAzeCkgKiAoLXBlcnAyeSArIHAyeSkgLSAoLXBlcnAyeCArIHAyeCkgKiAoLXBlcnAyeSArIHAzeSk7XG5cbiAgICAgICAgZGVub20gPSBhMSpiMiAtIGEyKmIxO1xuXG4gICAgICAgIGlmIChNYXRoLmFicyhkZW5vbSkgPCAwLjEgKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIGRlbm9tKz0xMC4xO1xuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJweCAsIHAyeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBweCA9IChiMSpjMiAtIGIyKmMxKS9kZW5vbTtcbiAgICAgICAgcHkgPSAoYTIqYzEgLSBhMSpjMikvZGVub207XG5cblxuICAgICAgICBwZGlzdCA9IChweCAtcDJ4KSAqIChweCAtcDJ4KSArIChweSAtcDJ5KSAqIChweSAtcDJ5KTtcblxuXG4gICAgICAgIGlmIChwZGlzdCA+IDE0MCAqIDE0MClcbiAgICAgICAge1xuICAgICAgICAgICAgcGVycDN4ID0gcGVycHggLSBwZXJwMng7XG4gICAgICAgICAgICBwZXJwM3kgPSBwZXJweSAtIHBlcnAyeTtcblxuICAgICAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwM3gqcGVycDN4ICsgcGVycDN5KnBlcnAzeSk7XG4gICAgICAgICAgICBwZXJwM3ggLz0gZGlzdDtcbiAgICAgICAgICAgIHBlcnAzeSAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN4ICo9IHdpZHRoO1xuICAgICAgICAgICAgcGVycDN5ICo9IHdpZHRoO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycDN4LCBwMnkgK3BlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJwM3gsIHAyeSAtcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRleENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocHggLCBweSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSAocHgtcDJ4KSwgcDJ5IC0gKHB5IC0gcDJ5KSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHAxeCA9IHBvaW50c1sobGVuZ3RoLTIpKjJdO1xuICAgIHAxeSA9IHBvaW50c1sobGVuZ3RoLTIpKjIgKyAxXTtcblxuICAgIHAyeCA9IHBvaW50c1sobGVuZ3RoLTEpKjJdO1xuICAgIHAyeSA9IHBvaW50c1sobGVuZ3RoLTEpKjIgKyAxXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5KTtcbiAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBpbmRleENvdW50OyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydCsrKTtcbiAgICB9XG5cbiAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydC0xKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRMaW5lOyIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcG9seWdvbiB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuV2ViR0xHcmFwaGljc0RhdGF9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocG9pbnRzLCBudWxsLCAyKTtcblxuICAgIGlmICghdHJpYW5nbGVzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgdmVydFBvcyA9IHZlcnRzLmxlbmd0aCAvIDY7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICt2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVydFBvcyk7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmVydHMucHVzaChwb2ludHNbaSAqIDJdLCBwb2ludHNbaSAqIDIgKyAxXSxcbiAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRQb2x5O1xuIiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHJlY3RhbmdsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIC0tLSAvL1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIC8vXG4gICAgdmFyIHJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcmVjdERhdGEueDtcbiAgICB2YXIgeSA9IHJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJlY3REYXRhLmhlaWdodDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgLy8gc3RhcnRcbiAgICAgICAgdmVydHMucHVzaCh4LCB5KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAvLyBpbnNlcnQgMiBkZWFkIHRyaWFuZ2xlcy4uXG4gICAgICAgIGluZGljZXMucHVzaCh2ZXJ0UG9zLCB2ZXJ0UG9zLCB2ZXJ0UG9zKzEsIHZlcnRQb3MrMiwgdmVydFBvcyszLCB2ZXJ0UG9zKzMpO1xuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSBbeCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHkgKyBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICB4LCB5XTtcblxuXG4gICAgICAgIGJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJlY3RhbmdsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG4vKipcbiAqIEJ1aWxkcyBhIHJvdW5kZWQgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG5idWlsZFJvdW5kZWRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIHJyZWN0RGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IHJyZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcnJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcnJlY3REYXRhLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSBycmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgdmFyIHJhZGl1cyA9IHJyZWN0RGF0YS5yYWRpdXM7XG5cbiAgICB2YXIgcmVjUG9pbnRzID0gW107XG4gICAgcmVjUG9pbnRzLnB1c2goeCwgeSArIHJhZGl1cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4LCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCB4LCB5ICsgaGVpZ2h0LCB4ICsgcmFkaXVzLCB5ICsgaGVpZ2h0LCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoIC0gcmFkaXVzLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCAtIHJhZGl1cywgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyB3aWR0aCwgeSArIHJhZGl1cywgeCArIHdpZHRoLCB5LCB4ICsgd2lkdGggLSByYWRpdXMsIHksIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgcmFkaXVzLCB5LCB4LCB5LCB4LCB5ICsgcmFkaXVzICsgMC4wMDAwMDAwMDAxLCByZWNQb2ludHMpO1xuXG4gICAgLy8gdGhpcyB0aW55IG51bWJlciBkZWFscyB3aXRoIHRoZSBpc3N1ZSB0aGF0IG9jY3VycyB3aGVuIHBvaW50cyBvdmVybGFwIGFuZCBlYXJjdXQgZmFpbHMgdG8gdHJpYW5ndWxhdGUgdGhlIGl0ZW0uXG4gICAgLy8gVE9ETyAtIGZpeCB0aGlzIHByb3Blcmx5LCB0aGlzIGlzIG5vdCB2ZXJ5IGVsZWdhbnQuLiBidXQgaXQgd29ya3MgZm9yIG5vdy5cblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICB2YXIgdHJpYW5nbGVzID0gZWFyY3V0KHJlY1BvaW50cywgbnVsbCwgMik7XG5cbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICAgICAge1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVjUG9zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZWNQb2ludHMubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gocmVjUG9pbnRzW2ldLCByZWNQb2ludHNbKytpXSwgciwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHJlY1BvaW50cztcblxuICAgICAgICB0aGlzLmJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlLiAoaGVscGVyIGZ1bmN0aW9uLi4pXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBmcm9tWCB7bnVtYmVyfSBPcmlnaW4gcG9pbnQgeFxuICogQHBhcmFtIGZyb21ZIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcGFyYW0gW291dF0ge251bWJlcltdfSBUaGUgb3V0cHV0IGFycmF5IHRvIGFkZCBwb2ludHMgaW50by4gSWYgbm90IHBhc3NlZCwgYSBuZXcgYXJyYXkgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm4ge251bWJlcltdfSBhbiBhcnJheSBvZiBwb2ludHNcbiAqL1xucXVhZHJhdGljQmV6aWVyQ3VydmUgPSBmdW5jdGlvbiAoZnJvbVgsIGZyb21ZLCBjcFgsIGNwWSwgdG9YLCB0b1ksIG91dClcbntcbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICB4YixcbiAgICAgICAgeWIsXG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gb3V0IHx8IFtdO1xuXG4gICAgZnVuY3Rpb24gZ2V0UHQobjEgLCBuMiwgcGVyYykge1xuICAgICAgICB2YXIgZGlmZiA9IG4yIC0gbjE7XG5cbiAgICAgICAgcmV0dXJuIG4xICsgKCBkaWZmICogcGVyYyApO1xuICAgIH1cblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBuOyBpKysgKSB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICAvLyBUaGUgR3JlZW4gTGluZVxuICAgICAgICB4YSA9IGdldFB0KCBmcm9tWCAsIGNwWCAsIGogKTtcbiAgICAgICAgeWEgPSBnZXRQdCggZnJvbVkgLCBjcFkgLCBqICk7XG4gICAgICAgIHhiID0gZ2V0UHQoIGNwWCAsIHRvWCAsIGogKTtcbiAgICAgICAgeWIgPSBnZXRQdCggY3BZICwgdG9ZICwgaiApO1xuXG4gICAgICAgIC8vIFRoZSBCbGFjayBEb3RcbiAgICAgICAgeCA9IGdldFB0KCB4YSAsIHhiICwgaiApO1xuICAgICAgICB5ID0gZ2V0UHQoIHlhICwgeWIgLCBqICk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goeCwgeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50cztcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJvdW5kZWRSZWN0YW5nbGU7IiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgY29yZSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWElcbiAqL1xuLy8gZXhwb3J0IGNvcmUgYW5kIGNvbnN0LiBXZSBhc3NpZ24gY29yZSB0byBjb25zdCBzbyB0aGF0IHRoZSBub24tcmVmZXJlbmNlIHR5cGVzIGluIGNvbnN0IHJlbWFpbiBpbi10YWN0XG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihyZXF1aXJlKCcuL2NvbnN0JyksIHJlcXVpcmUoJy4vbWF0aCcpLCB7XG4gICAgLy8gdXRpbHNcbiAgICB1dGlsczogcmVxdWlyZSgnLi91dGlscycpLFxuICAgIHRpY2tlcjogcmVxdWlyZSgnLi90aWNrZXInKSxcblxuICAgIC8vIGRpc3BsYXlcbiAgICBEaXNwbGF5T2JqZWN0OiAgICAgICAgICByZXF1aXJlKCcuL2Rpc3BsYXkvRGlzcGxheU9iamVjdCcpLFxuICAgIENvbnRhaW5lcjogICAgICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9Db250YWluZXInKSxcblxuICAgIC8vIHNwcml0ZXNcbiAgICBTcHJpdGU6ICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgUGFydGljbGVDb250YWluZXI6ICAgICAgcmVxdWlyZSgnLi9wYXJ0aWNsZXMvUGFydGljbGVDb250YWluZXInKSxcbiAgICBTcHJpdGVSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXInKSxcbiAgICBQYXJ0aWNsZVJlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyJyksXG5cbiAgICAvLyB0ZXh0XG4gICAgVGV4dDogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0L1RleHQnKSxcblxuICAgIC8vIHByaW1pdGl2ZXNcbiAgICBHcmFwaGljczogICAgICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzJyksXG4gICAgR3JhcGhpY3NEYXRhOiAgICAgICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljc0RhdGEnKSxcbiAgICBHcmFwaGljc1JlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHR1cmVzXG4gICAgVGV4dHVyZTogICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQmFzZVRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlVGV4dHVyZScpLFxuICAgIFJlbmRlclRleHR1cmU6ICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEJhc2VSZW5kZXJUZXh0dXJlOiAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlOiAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzOiAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmVVdnMnKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIGNhbnZhc1xuICAgIENhbnZhc1JlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIENhbnZhc0J1ZmZlcjogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIHdlYmdsXG4gICAgV2ViR0xSZW5kZXJlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyksXG4gICAgU2hhZGVyTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIFNoYWRlcjogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyJyksXG4gICAgT2JqZWN0UmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBSZW5kZXJUYXJnZXQ6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcblxuICAgIC8vIGZpbHRlcnMgLSB3ZWJnbFxuICAgIEFic3RyYWN0RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBGWEFBRmlsdGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBTcHJpdGVNYXNrRmlsdGVyOiAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKSxcblxuICAgIGdsQ29yZTogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncGl4aS1nbC1jb3JlJyksXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoaWNoIHJlbmRlcmVyIHlvdSBzaG91bGQgYmUgdXNpbmcuXG4gICAgICogV2ViR0wgaXMgdGhlIHByZWZlcnJlZCByZW5kZXJlciBhcyBpdCBpcyBhIGxvdCBmYXN0ZXIuIElmIHdlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnlcbiAgICAgKiB0aGUgYnJvd3NlciB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBjYW52YXMgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHBhcmFtIHdpZHRoPTgwMCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIGhlaWdodD02MDAge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWYgeW91XG4gICAgICogICAgICBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0XG4gICAgICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyLCByZXRpbmEgd291bGQgYmUgMlxuICAgICAqIEBwYXJhbSBbbm9XZWJHTD1mYWxzZV0ge2Jvb2xlYW59IHByZXZlbnRzIHNlbGVjdGlvbiBvZiBXZWJHTCByZW5kZXJlciwgZXZlbiBpZiBzdWNoIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyZXJ8Q2FudmFzUmVuZGVyZXJ9IFJldHVybnMgV2ViR0wgcmVuZGVyZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgQ2FudmFzUmVuZGVyZXJcbiAgICAgKi9cbiAgICBhdXRvRGV0ZWN0UmVuZGVyZXI6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCBub1dlYkdMKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB3aWR0aCB8fCA4MDA7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAgICAgaWYgKCFub1dlYkdMICYmIGNvcmUudXRpbHMuaXNXZWJHTFN1cHBvcnRlZCgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGNvcmUuV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgY29yZS5DYW52YXNSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB9XG59KTtcbiIsIi8vIEB0b2RvIC0gaWdub3JlIHRoZSB0b28gbWFueSBwYXJhbWV0ZXJzIHdhcm5pbmcgZm9yIG5vd1xuLy8gc2hvdWxkIGVpdGhlciBmaXggaXQgb3IgY2hhbmdlIHRoZSBqc2hpbnQgY29uZmlnXG4vLyBqc2hpbnQgLVcwNzJcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xuXG4vKipcbiAqIFRoZSBwaXhpIE1hdHJpeCBjbGFzcyBhcyBhbiBvYmplY3QsIHdoaWNoIG1ha2VzIGl0IGEgbG90IGZhc3RlcixcbiAqIGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBpdCA6XG4gKiB8IGEgfCBiIHwgdHh8XG4gKiB8IGMgfCBkIHwgdHl8XG4gKiB8IDAgfCAwIHwgMSB8XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBNYXRyaXgoKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5iID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5jID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHkgPSAwO1xufVxuXG5NYXRyaXgucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWF0cml4O1xubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1hdHJpeCBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5LiBUaGUgRWxlbWVudCB0byBNYXRyaXggbWFwcGluZyBvcmRlciBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIGEgPSBhcnJheVswXVxuICogYiA9IGFycmF5WzFdXG4gKiBjID0gYXJyYXlbM11cbiAqIGQgPSBhcnJheVs0XVxuICogdHggPSBhcnJheVsyXVxuICogdHkgPSBhcnJheVs1XVxuICpcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119IFRoZSBhcnJheSB0aGF0IHRoZSBtYXRyaXggd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbS5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpXG57XG4gICAgdGhpcy5hID0gYXJyYXlbMF07XG4gICAgdGhpcy5iID0gYXJyYXlbMV07XG4gICAgdGhpcy5jID0gYXJyYXlbM107XG4gICAgdGhpcy5kID0gYXJyYXlbNF07XG4gICAgdGhpcy50eCA9IGFycmF5WzJdO1xuICAgIHRoaXMudHkgPSBhcnJheVs1XTtcbn07XG5cblxuLyoqXG4gKiBzZXRzIHRoZSBtYXRyaXggcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkXG4gKiBAcGFyYW0ge251bWJlcn0gdHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXG57XG4gICAgdGhpcy5hID0gYTtcbiAgICB0aGlzLmIgPSBiO1xuICAgIHRoaXMuYyA9IGM7XG4gICAgdGhpcy5kID0gZDtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy50eSA9IHR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmcm9tIHRoZSBjdXJyZW50IE1hdHJpeCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9zZSB7Ym9vbGVhbn0gV2hldGhlciB3ZSBuZWVkIHRvIHRyYW5zcG9zZSB0aGUgbWF0cml4IG9yIG5vdFxuICogQHBhcmFtIFtvdXRdIHtBcnJheX0gSWYgcHJvdmlkZWQgdGhlIGFycmF5IHdpbGwgYmUgYXNzaWduZWQgdG8gb3V0XG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gdGhlIG5ld2x5IGNyZWF0ZWQgYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAodHJhbnNwb3NlLCBvdXQpXG57XG4gICAgaWYgKCF0aGlzLmFycmF5KVxuICAgIHtcbiAgICAgICAgdGhpcy5hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gb3V0IHx8IHRoaXMuYXJyYXk7XG5cbiAgICBpZiAodHJhbnNwb3NlKVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVsyXSA9IDA7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSAwO1xuICAgICAgICBhcnJheVs2XSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzddID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzJdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzZdID0gMDtcbiAgICAgICAgYXJyYXlbN10gPSAwO1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZSB0byB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gcmVuZGVyaW5nKVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5hICogeCArIHRoaXMuYyAqIHkgKyB0aGlzLnR4O1xuICAgIG5ld1Bvcy55ID0gdGhpcy5iICogeCArIHRoaXMuZCAqIHkgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGludmVyc2Ugb2YgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UgdG8gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIGlucHV0KVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHlJbnZlcnNlID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciBpZCA9IDEgLyAodGhpcy5hICogdGhpcy5kICsgdGhpcy5jICogLXRoaXMuYik7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuZCAqIGlkICogeCArIC10aGlzLmMgKiBpZCAqIHkgKyAodGhpcy50eSAqIHRoaXMuYyAtIHRoaXMudHggKiB0aGlzLmQpICogaWQ7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmEgKiBpZCAqIHkgKyAtdGhpcy5iICogaWQgKiB4ICsgKC10aGlzLnR5ICogdGhpcy5hICsgdGhpcy50eCAqIHRoaXMuYikgKiBpZDtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdHJpeCBvbiB0aGUgeCBhbmQgeS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMudHggKz0geDtcbiAgICB0aGlzLnR5ICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIHNjYWxlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIGFtb3VudCB0byBzY2FsZSBob3Jpem9udGFsbHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSBhbW91bnQgdG8gc2NhbGUgdmVydGljYWxseVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2NhbGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmEgKj0geDtcbiAgICB0aGlzLmQgKj0geTtcbiAgICB0aGlzLmMgKj0geDtcbiAgICB0aGlzLmIgKj0geTtcbiAgICB0aGlzLnR4ICo9IHg7XG4gICAgdGhpcy50eSAqPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyBhIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpXG57XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKCBhbmdsZSApO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbiggYW5nbGUgKTtcblxuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICB0aGlzLmEgPSBhMSAqIGNvcy10aGlzLmIgKiBzaW47XG4gICAgdGhpcy5iID0gYTEgKiBzaW4rdGhpcy5iICogY29zO1xuICAgIHRoaXMuYyA9IGMxICogY29zLXRoaXMuZCAqIHNpbjtcbiAgICB0aGlzLmQgPSBjMSAqIHNpbit0aGlzLmQgKiBjb3M7XG4gICAgdGhpcy50eCA9IHR4MSAqIGNvcyAtIHRoaXMudHkgKiBzaW47XG4gICAgdGhpcy50eSA9IHR4MSAqIHNpbiArIHRoaXMudHkgKiBjb3M7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG5cbiAgICB0aGlzLmEgID0gbWF0cml4LmEgKiBhMSArIG1hdHJpeC5iICogYzE7XG4gICAgdGhpcy5iICA9IG1hdHJpeC5hICogYjEgKyBtYXRyaXguYiAqIGQxO1xuICAgIHRoaXMuYyAgPSBtYXRyaXguYyAqIGExICsgbWF0cml4LmQgKiBjMTtcbiAgICB0aGlzLmQgID0gbWF0cml4LmMgKiBiMSArIG1hdHJpeC5kICogZDE7XG5cbiAgICB0aGlzLnR4ID0gbWF0cml4LnR4ICogYTEgKyBtYXRyaXgudHkgKiBjMSArIHRoaXMudHg7XG4gICAgdGhpcy50eSA9IG1hdHJpeC50eCAqIGIxICsgbWF0cml4LnR5ICogZDEgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1hdHJpeCBiYXNlZCBvbiBhbGwgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RYXG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RZXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXG4gKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WFxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdZXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKHgsIHksIHBpdm90WCwgcGl2b3RZLCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSlcbntcbiAgICB2YXIgYSwgYiwgYywgZCwgc3IsIGNyLCBjeSwgc3ksIG5zeCwgY3g7XG5cbiAgICBzciAgPSBNYXRoLnNpbihyb3RhdGlvbik7XG4gICAgY3IgID0gTWF0aC5jb3Mocm90YXRpb24pO1xuICAgIGN5ICA9IE1hdGguY29zKHNrZXdZKTtcbiAgICBzeSAgPSBNYXRoLnNpbihza2V3WSk7XG4gICAgbnN4ID0gLU1hdGguc2luKHNrZXdYKTtcbiAgICBjeCAgPSAgTWF0aC5jb3Moc2tld1gpO1xuXG4gICAgYSAgPSAgY3IgKiBzY2FsZVg7XG4gICAgYiAgPSAgc3IgKiBzY2FsZVg7XG4gICAgYyAgPSAtc3IgKiBzY2FsZVk7XG4gICAgZCAgPSAgY3IgKiBzY2FsZVk7XG5cbiAgICB0aGlzLmEgID0gY3kgKiBhICsgc3kgKiBjO1xuICAgIHRoaXMuYiAgPSBjeSAqIGIgKyBzeSAqIGQ7XG4gICAgdGhpcy5jICA9IG5zeCAqIGEgKyBjeCAqIGM7XG4gICAgdGhpcy5kICA9IG5zeCAqIGIgKyBjeCAqIGQ7XG5cbiAgICB0aGlzLnR4ID0geCArICggcGl2b3RYICogYSArIHBpdm90WSAqIGMgKTtcbiAgICB0aGlzLnR5ID0geSArICggcGl2b3RYICogYiArIHBpdm90WSAqIGQgKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQcmVwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uKG1hdHJpeClcbntcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIGlmIChtYXRyaXguYSAhPT0gMSB8fCBtYXRyaXguYiAhPT0gMCB8fCBtYXRyaXguYyAhPT0gMCB8fCBtYXRyaXguZCAhPT0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICAgICAgdmFyIGMxID0gdGhpcy5jO1xuICAgICAgICB0aGlzLmEgID0gYTEqbWF0cml4LmErdGhpcy5iKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmIgID0gYTEqbWF0cml4LmIrdGhpcy5iKm1hdHJpeC5kO1xuICAgICAgICB0aGlzLmMgID0gYzEqbWF0cml4LmErdGhpcy5kKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmQgID0gYzEqbWF0cml4LmIrdGhpcy5kKm1hdHJpeC5kO1xuICAgIH1cblxuICAgIHRoaXMudHggPSB0eDEqbWF0cml4LmErdGhpcy50eSptYXRyaXguYyttYXRyaXgudHg7XG4gICAgdGhpcy50eSA9IHR4MSptYXRyaXguYit0aGlzLnR5Km1hdHJpeC5kK21hdHJpeC50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0ID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcbiAgICB2YXIgbiA9IGExKmQxLWIxKmMxO1xuXG4gICAgdGhpcy5hID0gZDEvbjtcbiAgICB0aGlzLmIgPSAtYjEvbjtcbiAgICB0aGlzLmMgPSAtYzEvbjtcbiAgICB0aGlzLmQgPSBhMS9uO1xuICAgIHRoaXMudHggPSAoYzEqdGhpcy50eS1kMSp0eDEpL247XG4gICAgdGhpcy50eSA9IC0oYTEqdGhpcy50eS1iMSp0eDEpL247XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBSZXNldHMgdGhpcyBNYXRpeCB0byBhbiBpZGVudGl0eSAoZGVmYXVsdCkgbWF0cml4LlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmlkZW50aXR5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmEgPSAxO1xuICAgIHRoaXMuYiA9IDA7XG4gICAgdGhpcy5jID0gMDtcbiAgICB0aGlzLmQgPSAxO1xuICAgIHRoaXMudHggPSAwO1xuICAgIHRoaXMudHkgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgTWF0cml4IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gQSBjb3B5IG9mIHRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgdmFsdWVzIG9mIHRoZSBnaXZlbiBtYXRyaXggdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZXMgaW4gdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhlIG1hdHJpeCBnaXZlbiBpbiBwYXJhbWV0ZXIgd2l0aCBpdHMgdmFsdWVzIHVwZGF0ZWQuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQSBkZWZhdWx0IChpZGVudGl0eSkgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5JREVOVElUWSA9IG5ldyBNYXRyaXgoKTtcblxuLyoqXG4gKiBBIHRlbXAgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5URU1QX01BVFJJWCA9IG5ldyBNYXRyaXgoKTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcbn1cblxuUG9pbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvaW50XG4gKlxuICogQHJldHVybiB7UElYSS5Qb2ludH0gYSBjb3B5IG9mIHRoZSBwb2ludFxuICovXG5Qb2ludC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBDb3BpZXMgeCBhbmQgeSBmcm9tIHRoZSBnaXZlbiBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICovXG5Qb2ludC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgdGhpcy5zZXQocC54LCBwLnkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGVxdWFsIHRvIHRoaXMgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gKHAueCA9PT0gdGhpcy54KSAmJiAocC55ID09PSB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5Qb2ludC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy54ID0geCB8fCAwO1xuICAgIHRoaXMueSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLnggOiAwICkgO1xufTtcbiIsIi8qKlxuICogTWF0aCBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgbWl4ZWQgaW50byBQSVhJIG5hbWVzcGFjZS5cbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBUaGVzZSB3aWxsIGJlIG1peGVkIHRvIGJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLFxuICAgIC8vIHdoaWxlIHRoaXMgbW9kdWxlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBjb3JlXG4gICAgLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBjdXQgZG93biBvblxuICAgIC8vIGludGVybmFsIG1vZHVsZSByZXF1aXJlcy5cblxuICAgIFBvaW50OiAgICAgIHJlcXVpcmUoJy4vUG9pbnQnKSxcbiAgICBNYXRyaXg6ICAgICByZXF1aXJlKCcuL01hdHJpeCcpLFxuXG4gICAgQ2lyY2xlOiAgICAgcmVxdWlyZSgnLi9zaGFwZXMvQ2lyY2xlJyksXG4gICAgRWxsaXBzZTogICAgcmVxdWlyZSgnLi9zaGFwZXMvRWxsaXBzZScpLFxuICAgIFBvbHlnb246ICAgIHJlcXVpcmUoJy4vc2hhcGVzL1BvbHlnb24nKSxcbiAgICBSZWN0YW5nbGU6ICByZXF1aXJlKCcuL3NoYXBlcy9SZWN0YW5nbGUnKSxcbiAgICBSb3VuZGVkUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlJylcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIENpcmNsZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICovXG5mdW5jdGlvbiBDaXJjbGUoeCwgeSwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkNJUkM7XG59XG5cbkNpcmNsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaXJjbGU7XG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBDaXJjbGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkNpcmNsZX0gYSBjb3B5IG9mIHRoZSBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBDaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBjaXJjbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmFkaXVzIDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGR4ID0gKHRoaXMueCAtIHgpLFxuICAgICAgICBkeSA9ICh0aGlzLnkgLSB5KSxcbiAgICAgICAgcjIgPSB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzO1xuXG4gICAgZHggKj0gZHg7XG4gICAgZHkgKj0gZHk7XG5cbiAgICByZXR1cm4gKGR4ICsgZHkgPD0gcjIpO1xufTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBjaXJjbGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4qIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiovXG5DaXJjbGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy5yYWRpdXMsIHRoaXMueSAtIHRoaXMucmFkaXVzLCB0aGlzLnJhZGl1cyAqIDIsIHRoaXMucmFkaXVzICogMik7XG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBFbGxpcHNlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGlzIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZVxuICovXG5mdW5jdGlvbiBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkVMSVA7XG59XG5cbkVsbGlwc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRWxsaXBzZTtcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBFbGxpcHNlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5FbGxpcHNlfSBhIGNvcHkgb2YgdGhlIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgRWxsaXBzZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRzIGFyZSB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vbm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDBcbiAgICB2YXIgbm9ybXggPSAoKHggLSB0aGlzLngpIC8gdGhpcy53aWR0aCksXG4gICAgICAgIG5vcm15ID0gKCh5IC0gdGhpcy55KSAvIHRoaXMuaGVpZ2h0KTtcblxuICAgIG5vcm14ICo9IG5vcm14O1xuICAgIG5vcm15ICo9IG5vcm15O1xuXG4gICAgcmV0dXJuIChub3JteCArIG5vcm15IDw9IDEpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgZWxsaXBzZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy53aWR0aCwgdGhpcy55IC0gdGhpcy5oZWlnaHQsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG4iLCJ2YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9Qb2ludCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcG9pbnRzIHtQSVhJLlBvaW50W118bnVtYmVyW118Li4uUElYSS5Qb2ludHwuLi5udW1iZXJ9IFRoaXMgY2FuIGJlIGFuIGFycmF5IG9mIFBvaW50cyB0aGF0IGZvcm0gdGhlIHBvbHlnb24sXG4gKiAgICAgIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIHRoYXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBbeCx5LCB4LHksIC4uLl0sIG9yIHRoZSBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZVxuICogICAgICBhbGwgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvbiBlLmcuIGBuZXcgUElYSS5Qb2x5Z29uKG5ldyBQSVhJLlBvaW50KCksIG5ldyBQSVhJLlBvaW50KCksIC4uLilgLCBvciB0aGVcbiAqICAgICAgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmUgZmxhdCB4LHkgdmFsdWVzIGUuZy4gYG5ldyBQb2x5Z29uKHgseSwgeCx5LCB4LHksIC4uLilgIHdoZXJlIGB4YCBhbmQgYHlgIGFyZVxuICogICAgICBOdW1iZXJzLlxuICovXG5mdW5jdGlvbiBQb2x5Z29uKHBvaW50c18pXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBvaW50c187XG5cbiAgICAvL2lmIHBvaW50cyBpc24ndCBhbiBhcnJheSwgdXNlIGFyZ3VtZW50cyBhcyB0aGUgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgcG9pbnRzLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICBwb2ludHNbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IG9mIHBvaW50cywgY29udmVydCBpdCB0byBhIGZsYXQgYXJyYXkgb2YgbnVtYmVyc1xuICAgIGlmIChwb2ludHNbMF0gaW5zdGFuY2VvZiBQb2ludClcbiAgICB7XG4gICAgICAgIHZhciBwID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBwLnB1c2gocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50cyA9IHA7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5QT0xZO1xufVxuXG5Qb2x5Z29uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvbHlnb247XG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9seWdvblxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9seWdvbn0gYSBjb3B5IG9mIHRoZSBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvbHlnb24odGhpcy5wb2ludHMuc2xpY2UoKSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcG9seWdvblxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBpbnNpZGUgPSBmYWxzZTtcblxuICAgIC8vIHVzZSBzb21lIHJheWNhc3RpbmcgdG8gdGVzdCBoaXRzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL3BvaW50LWluLXBvbHlnb24vYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5wb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbGVuZ3RoIC0gMTsgaSA8IGxlbmd0aDsgaiA9IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB4aSA9IHRoaXMucG9pbnRzW2kgKiAyXSwgeWkgPSB0aGlzLnBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgeGogPSB0aGlzLnBvaW50c1tqICogMl0sIHlqID0gdGhpcy5wb2ludHNbaiAqIDIgKyAxXSxcbiAgICAgICAgICAgIGludGVyc2VjdCA9ICgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICh4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aSk7XG5cbiAgICAgICAgaWYgKGludGVyc2VjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiB0aGUgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcmVjdGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SRUNUO1xufVxuXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XG5cbi8qKlxuICogQSBjb25zdGFudCBlbXB0eSByZWN0YW5nbGUuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblJlY3RhbmdsZS5FTVBUWSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDwgdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDwgdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFJvdW5kZWQgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIHRoYXQgaGFzIG5pY2Ugcm91bmRlZCBjb3JuZXJzLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodCBhbmQgaXRzIHJhZGl1cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gQ29udHJvbHMgdGhlIHJhZGl1cyBvZiB0aGUgcm91bmRlZCBjb3JuZXJzXG4gKi9cbmZ1bmN0aW9uIFJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJSRUM7XG59XG5cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm91bmRlZFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUm91bmRlZFJlY3RhbmdsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUm91bmRlZFJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSb3VuZGVkUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8PSB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUGFydGljbGVDb250YWluZXIgY2xhc3MgaXMgYSByZWFsbHkgZmFzdCB2ZXJzaW9uIG9mIHRoZSBDb250YWluZXIgYnVpbHQgc29sZWx5IGZvciBzcGVlZCxcbiAqIHNvIHVzZSB3aGVuIHlvdSBuZWVkIGEgbG90IG9mIHNwcml0ZXMgb3IgcGFydGljbGVzLiBUaGUgdHJhZGVvZmYgb2YgdGhlIFBhcnRpY2xlQ29udGFpbmVyIGlzIHRoYXQgYWR2YW5jZWRcbiAqIGZ1bmN0aW9uYWxpdHkgd2lsbCBub3Qgd29yay4gUGFydGljbGVDb250YWluZXIgaW1wbGVtZW50cyBvbmx5IHRoZSBiYXNpYyBvYmplY3QgdHJhbnNmb3JtIChwb3NpdGlvbiwgc2NhbGUsIHJvdGF0aW9uKS5cbiAqIEFueSBvdGhlciBmdW5jdGlvbmFsaXR5IGxpa2UgdGludGluZywgbWFza2luZywgZXRjIHdpbGwgbm90IHdvcmsgb24gc3ByaXRlcyBpbiB0aGlzIGJhdGNoLlxuICpcbiAqIEl0J3MgZXh0cmVtZWx5IGVhc3kgdG8gdXNlIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQYXJ0aWNsZUNvbnRhaW5lcigpO1xuICpcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpXG4gKiB7XG4gKiAgICAgdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJteUltYWdlLnBuZ1wiKTtcbiAqICAgICBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEFuZCBoZXJlIHlvdSBoYXZlIGEgaHVuZHJlZCBzcHJpdGVzIHRoYXQgd2lsbCBiZSByZW5kZXJlciBhdCB0aGUgc3BlZWQgb2YgbGlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbbWF4U2l6ZT0xNTAwMF0ge251bWJlcn0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGF0IGNhbiBiZSByZW5kZXJlciBieSB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzXSB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyBvZiBjaGlsZHJlbiB0aGF0IHNob3VsZCBiZSB1cGxvYWRlZCB0byB0aGUgZ3B1IGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnNjYWxlPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBzY2FsZSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5wb3NpdGlvbj10cnVlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBwb3NpdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5yb3RhdGlvbj1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcm90YXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMudXZzPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCB1dnMgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuYWxwaGE9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIGFscGhhIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtiYXRjaFNpemU9MTUwMDBdIHtudW1iZXJ9IE51bWJlciBvZiBwYXJ0aWNsZXMgcGVyIGJhdGNoLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUNvbnRhaW5lcihtYXhTaXplLCBwcm9wZXJ0aWVzLCBiYXRjaFNpemUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBiYXRjaFNpemUgPSBiYXRjaFNpemUgfHwgMTUwMDA7IC8vQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG4gICAgbWF4U2l6ZSA9IG1heFNpemUgfHwgMTUwMDA7XG5cbiAgICAvLyBNYWtpbmcgc3VyZSB0aGUgYmF0Y2ggc2l6ZSBpcyB2YWxpZFxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICB2YXIgbWF4QmF0Y2hTaXplID0gMTYzODQ7XG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhCYXRjaFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgcHJvcGVydGllcyB0byBiZSBkeW5hbWljICh0cnVlKSAvIHN0YXRpYyAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFuW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmF0Y2hTaXplID0gYmF0Y2hTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICpcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlQ2hpbGRyZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBjYW52YXMgcmVuZGVyZXJpbmcuIElmIHRydWUgdGhlbiB0aGUgZWxlbWVudHMgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBuZWFyZXN0IHBpeGVsLiBUaGlzIHByb3ZpZGVzIGEgbmljZSBzcGVlZCBib29zdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZTtcbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbn1cblxuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBwcml2YXRlIHByb3BlcnRpZXMgYXJyYXkgdG8gZHluYW1pYyAvIHN0YXRpYyBiYXNlZCBvbiB0aGUgcGFzc2VkIHByb3BlcnRpZXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMge29iamVjdH0gVGhlIHByb3BlcnRpZXMgdG8gYmUgdXBsb2FkZWRcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnNldFByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKVxue1xuICAgIGlmICggcHJvcGVydGllcyApIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1swXSA9ICdzY2FsZScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5zY2FsZSA6IHRoaXMuX3Byb3BlcnRpZXNbMF07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMV0gPSAncG9zaXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucG9zaXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzFdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzJdID0gJ3JvdGF0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnJvdGF0aW9uIDogdGhpcy5fcHJvcGVydGllc1syXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1szXSA9ICd1dnMnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMudXZzIDogdGhpcy5fcHJvcGVydGllc1szXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1s0XSA9ICdhbHBoYScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5hbHBoYSA6IHRoaXMuX3Byb3BlcnRpZXNbNF07XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcblxuICAgIC8vIFRPRE8gZG9uJ3QgbmVlZCB0byFcbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAvLyAgUElYSS5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybS5jYWxsKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRhaW5lciB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHdlYmdsIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIoIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUgKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlLnJlbmRlciggdGhpcyApO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGZsYWcgdGhhdCBzdGF0aWMgZGF0YSBzaG91bGQgYmUgdXBkYXRlZCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoc21hbGxlc3RDaGlsZEluZGV4KVxue1xuICAgIHZhciBidWZmZXJJbmRleCA9IE1hdGguZmxvb3Ioc21hbGxlc3RDaGlsZEluZGV4IC8gdGhpcy5fYmF0Y2hTaXplKTtcbiAgICBpZiAoYnVmZmVySW5kZXggPCB0aGlzLl9idWZmZXJUb1VwZGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IGJ1ZmZlckluZGV4O1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciBpc1JvdGF0ZWQgPSB0cnVlO1xuXG4gICAgdmFyIHBvc2l0aW9uWCA9IDA7XG4gICAgdmFyIHBvc2l0aW9uWSA9IDA7XG5cbiAgICB2YXIgZmluYWxXaWR0aCA9IDA7XG4gICAgdmFyIGZpbmFsSGVpZ2h0ID0gMDtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZSA9IGNoaWxkLnRleHR1cmUuZnJhbWU7XG5cbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYSAqIGNoaWxkLmFscGhhO1xuXG4gICAgICAgIGlmIChjaGlsZC5yb3RhdGlvbiAlIChNYXRoLlBJICogMikgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZhc3Rlc3QgIHdheSB0byBvcHRpbWlzZSEgLSBpZiByb3RhdGlvbiBpcyAwIHRoZW4gd2UgY2FuIGF2b2lkIGFueSBraW5kIG9mIHNldFRyYW5zZm9ybSBjYWxsXG4gICAgICAgICAgICBpZiAoaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLngpICsgY2hpbGQucG9zaXRpb24ueCAgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnkpICsgY2hpbGQucG9zaXRpb24ueSAgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54O1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55O1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZC5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZFRyYW5zZm9ybSA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHkgfCAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoKSArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0KSArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICBjaGlsZC50ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgIGZyYW1lLngsXG4gICAgICAgICAgICBmcmFtZS55LFxuICAgICAgICAgICAgZnJhbWUud2lkdGgsXG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQsXG4gICAgICAgICAgICBwb3NpdGlvblgsXG4gICAgICAgICAgICBwb3NpdGlvblksXG4gICAgICAgICAgICBmaW5hbFdpZHRoLFxuICAgICAgICAgICAgZmluYWxIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIGlmICh0aGlzLl9idWZmZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcbn07XG4iLCJcbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVCdWZmZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlQnVmZmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFRoZSBwYXJ0aWNsZSBidWZmZXIgbWFuYWdlcyB0aGUgc3RhdGljIGFuZCBkeW5hbWljIGJ1ZmZlcnMgZm9yIGEgcGFydGljbGUgY29udGFpbmVyLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQnVmZmVyKGdsLCBwcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgc2l6ZSlcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleCBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhlIGJ1ZmZlciBjYW4gaG9sZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgZHluYW1pYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBzdGF0aWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgaWYoZHluYW1pY1Byb3BlcnR5RmxhZ3NbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRCdWZmZXJzKCk7XG5cbn1cblxuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQnVmZmVyO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5pbml0QnVmZmVycyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcHJvcGVydHk7XG5cbiAgICB2YXIgZHluYW1pY09mZnNldCA9IDA7XG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IGR5bmFtaWNPZmZzZXQ7XG4gICAgICAgIGR5bmFtaWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5keW5hbWljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG5cblxuICAgIC8vIHN0YXRpYyAvL1xuICAgIHZhciBzdGF0aWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBzdGF0aWNPZmZzZXQ7XG4gICAgICAgIHN0YXRpY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLnN0YXRpY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuc3RhdGljU3RyaWRlICogNCk7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZHluYW1pYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZER5bmFtaWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLmR5bmFtaWNEYXRhLCB0aGlzLmR5bmFtaWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuZHluYW1pY0RhdGEpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBzdGF0aWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWRTdGF0aWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5zdGF0aWNEYXRhLCB0aGlzLnN0YXRpY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLnN0YXRpY0RhdGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyB0byB0aGUgR1BVXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaSwgcHJvcGVydHk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnN0YXRpY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlQnVmZmVyLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5zdGF0aWNCdWZmZXIpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlU2hhZGVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZVNoYWRlcicpLFxuICAgIFBhcnRpY2xlQnVmZmVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUJ1ZmZlcicpLFxuICAgIG1hdGggICAgICAgICAgICA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgLy8gYW5kIG1heCBudW1iZXIgb2YgZWxlbWVudCBpbiB0aGUgaW5kZXggYnVmZmVyIGlzIDE2Mzg0ICogNiA9IDk4MzA0XG4gICAgLy8gQ3JlYXRpbmcgYSBmdWxsIGluZGV4IGJ1ZmZlciwgb3ZlcmhlYWQgaXMgOTgzMDQgKiAyID0gMTk2S29cbiAgICB2YXIgbnVtSW5kaWNlcyA9IDk4MzA0O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShudW1JbmRpY2VzKTtcblxuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgbnVtSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IG51bGw7XG5cbiAgICB0aGlzLnRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcbn1cblxuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3BhcnRpY2xlJywgUGFydGljbGVSZW5kZXJlcik7XG5cbi8qKlxuICogV2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IG5ldyBQYXJ0aWNsZVNoYWRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIpO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IGluZGV4LCBzbyA2NTUzNSAvIDYgPSAxMDkyMi5cblxuICAgIC8vdXBsb2FkIHRoZSBpbmRleCBkYXRhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBbXG4gICAgICAgIC8vIHZlcnRpY2VzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFZlcnRpY2VzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcG9zaXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbkNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRQb3NpdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJvdGF0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUm90YXRpb24sXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFJvdGF0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdXZzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRVdnMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBhbHBoYURhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRBbHBoYSxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgcGFydGljbGUgYmF0Y2guXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGJpbmQgdGhlIG1haW4gdGV4dHVyZVxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgLy8gYmluZCB0aGUgYnVmZmVyc1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgcGFydGljbGUgY29udGFpbmVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgY2hpbGRyZW4gPSBjb250YWluZXIuY2hpbGRyZW4sXG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIG1heFNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplO1xuXG4gICAgaWYodG90YWxDaGlsZHJlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZih0b3RhbENoaWxkcmVuID4gbWF4U2l6ZSlcbiAgICB7XG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBtYXhTaXplO1xuICAgIH1cblxuICAgIGlmKCFjb250YWluZXIuX2J1ZmZlcnMpXG4gICAge1xuICAgICAgICBjb250YWluZXIuX2J1ZmZlcnMgPSB0aGlzLmdlbmVyYXRlQnVmZmVycyggY29udGFpbmVyICk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29udGFpbmVyLmJsZW5kTW9kZSk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIG0gPSAgY29udGFpbmVyLndvcmxkVHJhbnNmb3JtLmNvcHkoIHRoaXMudGVtcE1hdHJpeCApO1xuICAgIG0ucHJlcGVuZCggdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXggKTtcbiAgICBnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgbS50b0FycmF5KHRydWUpKTtcbiAgICBnbC51bmlmb3JtMWYodGhpcy5zaGFkZXIudW5pZm9ybXMudUFscGhhLl9sb2NhdGlvbiwgY29udGFpbmVyLndvcmxkQWxwaGEpO1xuXG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHRleHR1cmUgaXMgYm91bmQuLlxuICAgIHZhciBiYXNlVGV4dHVyZSA9IGNoaWxkcmVuWzBdLl90ZXh0dXJlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgdGV4dHVyZSBoYXMgbm90IHVwZGF0ZWQgdGhlbiBsZXRzIG5vdCB1cGxvYWQgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmKCF0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUoYmFzZVRleHR1cmUpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZighY29udGFpbmVyLl9wcm9wZXJ0aWVzWzBdIHx8ICFjb250YWluZXIuX3Byb3BlcnRpZXNbM10pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgfVxuXG4gICAgLy8gbm93IGxldHMgdXBsb2FkIGFuZCByZW5kZXIgdGhlIGJ1ZmZlcnMuLlxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IHRvdGFsQ2hpbGRyZW47IGkgKz0gYmF0Y2hTaXplLCBqICs9IDEpXG4gICAge1xuICAgICAgICB2YXIgYW1vdW50ID0gKCB0b3RhbENoaWxkcmVuIC0gaSk7XG4gICAgICAgIGlmKGFtb3VudCA+IGJhdGNoU2l6ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50ID0gYmF0Y2hTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRhaW5lci5fYnVmZmVyc1tqXTtcblxuICAgICAgICAvLyB3ZSBhbHdheXMgdXBsb2FkIHRoZSBkeW5hbWljXG4gICAgICAgIGJ1ZmZlci51cGxvYWREeW5hbWljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuXG4gICAgICAgIC8vIHdlIG9ubHkgdXBsb2FkIHRoZSBzdGF0aWMgY29udGVudCB3aGVuIHdlIGhhdmUgdG8hXG4gICAgICAgIGlmKGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPT09IGopXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJ1ZmZlci51cGxvYWRTdGF0aWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gaiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5kIHRoZSBidWZmZXJcbiAgICAgICAgYnVmZmVyLmJpbmQoIHRoaXMuc2hhZGVyICk7XG5cbiAgICAgICAgIC8vIG5vdyBkcmF3IHRob3NlIHN1Y2thcyFcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgYW1vdW50ICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBvbmUgcGFydGljbGUgYnVmZmVyIGZvciBlYWNoIGNoaWxkIGluIHRoZSBjb250YWluZXIgd2Ugd2FudCB0byByZW5kZXIgYW5kIHVwZGF0ZXMgaW50ZXJuYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5nZW5lcmF0ZUJ1ZmZlcnMgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIGJ1ZmZlcnMgPSBbXSxcbiAgICAgICAgc2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemUsXG4gICAgICAgIGR5bmFtaWNQcm9wZXJ0eUZsYWdzID0gY29udGFpbmVyLl9wcm9wZXJ0aWVzLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gYmF0Y2hTaXplKVxuICAgIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKG5ldyBQYXJ0aWNsZUJ1ZmZlcihnbCwgdGhpcy5wcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgYmF0Y2hTaXplKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHZlcnRpY2llcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgdmVydGljZXMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFZlcnRpY2VzID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICB2YXIgc3ByaXRlLFxuICAgICAgICB0ZXh0dXJlLFxuICAgICAgICB0cmltLFxuICAgICAgICBzeCxcbiAgICAgICAgc3ksXG4gICAgICAgIHcwLCB3MSwgaDAsIGgxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xuXG4gICAgICAgIHNwcml0ZSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXTtcbiAgICAgICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZTtcbiAgICAgICAgc3ggPSBzcHJpdGUuc2NhbGUueDtcbiAgICAgICAgc3kgPSBzcHJpdGUuc2NhbGUueTtcblxuICAgICAgICBpZiAodGV4dHVyZS50cmltKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgICAgICB0cmltID0gdGV4dHVyZS50cmltO1xuXG4gICAgICAgICAgICB3MSA9IHRyaW0ueCAtIHNwcml0ZS5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBoMSA9IHRyaW0ueSAtIHNwcml0ZS5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtc3ByaXRlLmFuY2hvci54KTtcbiAgICAgICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtc3ByaXRlLmFuY2hvci54O1xuXG4gICAgICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXNwcml0ZS5hbmNob3IueSk7XG4gICAgICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC1zcHJpdGUuYW5jaG9yLnk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBwb3NpdGlvbnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFBvc2l0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUG9zaXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucG9zaXRpb247XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcm90YXRpb24gdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFJvdGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUm90YXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucm90YXRpb247XG5cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVSb3RhdGlvbjtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgVXZzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRVdnMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlVXZzID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLl90ZXh0dXJlLl91dnM7XG5cbiAgICAgICAgaWYgKHRleHR1cmVVdnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSB0ZXh0dXJlVXZzLngwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZXh0dXJlVXZzLnkwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdGV4dHVyZVV2cy54MTtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gdGV4dHVyZVV2cy55MTtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB0ZXh0dXJlVXZzLngyO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gdGV4dHVyZVV2cy55MjtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB0ZXh0dXJlVXZzLngzO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gdGV4dHVyZVV2cy55MztcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8geW91IGtub3cgdGhpcyBjYW4gYmUgZWFzaWVyIVxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBhbHBoYSB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkQWxwaGEgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZUFscGhhID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLmFscGhhO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZUFscGhhO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVSZW5kZXJlci5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuICAgIHRoaXMudGVtcE1hdHJpeCA9IG51bGw7XG59O1xuIiwidmFyIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVTaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBUZXh0dXJlU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFQb3NpdGlvbkNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVNjYWxlOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFSb3RhdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIHZlYzIgdiA9IGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAnICAgdi54ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIGNvcyhhUm90YXRpb24pIC0gKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIHNpbihhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdi55ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIHNpbihhUm90YXRpb24pICsgKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIGNvcyhhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdiA9IHYgKyBhUG9zaXRpb25Db29yZDsnLFxuXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyh2LCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGhlbGxvXG4gICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCB1QWxwaGE7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3IgKiB1QWxwaGE7JyxcbiAgICAgICAgICAgICcgIGlmIChjb2xvci5hID09IDAuMCkgZGlzY2FyZDsnLFxuICAgICAgICAgICAgJyAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdUFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFQb3NpdGlvbkNvb3JkOiAwLFxuICAgICAgICAgICAvLyBhU2NhbGU6ICAgICAgICAgMCxcbiAgICAgICAgICAgIGFSb3RhdGlvbjogICAgICAwXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVEVNUCBIQUNLXG5cbn1cblxuUGFydGljbGVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlU2hhZGVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVNoYWRlcjtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHN5c3RlbSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgc3lzdGVtIHRoaXMgcmVuZGVyZXIgaXMgZm9yLlxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXSB7bnVtYmVyfSBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcmVuZGVyZWQgYXJlYSAoc2hvd24gaWYgbm90IHRyYW5zcGFyZW50KS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5yb3VuZFBpeGVscz1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBTeXN0ZW1SZW5kZXJlcihzeXN0ZW0sIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB1dGlscy5zYXlIZWxsbyhzeXN0ZW0pO1xuXG4gICAgLy8gcHJlcGFyZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpIGluIENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tpXSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgb3B0aW9ucyA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHNlZSBQSVhJLlJFTkRFUkVSX1RZUEVcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgODAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDgwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgNjAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy52aWV3ID0gb3B0aW9ucy52aWV3IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG9wdGlvbnMucmVzb2x1dGlvbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBvcHRpb25zLnRyYW5zcGFyZW50O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgc2hvdWxkIGJlIHJlc2l6ZWQgYXV0b21hdGljYWxseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvcHRpb25zLmF1dG9SZXNpemUgfHwgZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIGJsZW5kIG1vZGVzIHVzZWZ1bCBmb3IgdGhpcyByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG1peGVkPn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgZmxhZyBhZmZlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50cyBvZiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgcmV0YWluZWQgYWZ0ZXIgcmVuZGVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3Igbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyBOT1QgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBhIGNhbnZhcyBzaXplZCBmaWxsUmVjdCBvcGVyYXRpb24gZXZlcnkgZnJhbWUgdG8gc2V0IHRoZSBjYW52YXMgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBjbGVhclJlY3QgdG8gY2xlYXIgdGhlIGNhbnZhcyBldmVyeSBmcmFtZS5cbiAgICAgKiBEaXNhYmxlIHRoaXMgYnkgc2V0dGluZyB0aGlzIHRvIGZhbHNlLiBGb3IgZXhhbXBsZSBpZiB5b3VyIGdhbWUgaGFzIGEgY2FudmFzIGZpbGxpbmcgYmFja2dyb3VuZCBpbWFnZSB5b3Ugb2Z0ZW4gZG9uJ3QgbmVlZCB0aGlzIHNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHRcbiAgICAgKi9cbiAgICB0aGlzLmNsZWFyQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICAgICAqIEhhbmR5IGZvciBjcmlzcCBwaXhlbCBhcnQgYW5kIHNwZWVkIG9uIGxlZ2FjeSBkZXZpY2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gb3B0aW9ucy5yb3VuZFBpeGVscztcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmEgPSBbMCwgMCwgMCwgMF07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9ICcjMDAwMDAwJztcblxuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yOyAvLyBydW4gYmcgY29sb3Igc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgdHJhbnNmb3JtOnt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKX0sIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3Qgcm9vdCBvYmplY3QgdGhhdCB0aGUgcmVuZGVyZXIgdHJpZWQgdG8gcmVuZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3lzdGVtUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFN5c3RlbVJlbmRlcmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciB0byBmaWxsIGlmIG5vdCB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlN5c3RlbVJlbmRlcmVyI1xuICAgICAqL1xuICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSB1dGlscy5oZXgyc3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB1dGlscy5oZXgycmdiKHZhbCwgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBjYW52YXMgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMudmlldy53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGhpcy52aWV3LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgICAgICB0aGlzLnZpZXcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpIHtcbiAgICBpZiAocmVtb3ZlVmlldyAmJiB0aGlzLnZpZXcucGFyZW50Tm9kZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMudmlldyk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgdGhpcy52aWV3ID0gbnVsbDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IDA7XG5cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBmYWxzZTtcblxuICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcblxuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDA7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IG51bGw7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gbnVsbDtcbn07XG4iLCJ2YXIgU3lzdGVtUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9TeXN0ZW1SZW5kZXJlcicpLFxuICAgIENhbnZhc01hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi91dGlscy9DYW52YXNNYXNrTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBTeXN0ZW1SZW5kZXJlci5jYWxsKHRoaXMsICdDYW52YXMnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuQ0FOVkFTO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMudmlldy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIGZsYWcgY29udHJvbGxpbmcgY2FudmFzIHJlZnJlc2guXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVmcmVzaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBhIENhbnZhc01hc2tNYW5hZ2VyLCBoYW5kbGVzIG1hc2tpbmcgd2hlbiB1c2luZyB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNNYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IENhbnZhc01hc2tNYW5hZ2VyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIHByb3BlcnR5IHVzZWQgdG8gc2V0IHRoZSBjYW52YXMgc21vb3RoaW5nIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnaW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcblxuICAgIGlmICghdGhpcy5jb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ3dlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ29JbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB0aGlzLl9tYXBCbGVuZE1vZGVzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHtcbiAgICAgICAgd29ybGRUcmFuc2Zvcm06IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgICAgICB3b3JsZEFscGhhOiAxXG4gICAgfTtcblxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oQ2FudmFzUmVuZGVyZXIpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byB0aGlzIGNhbnZhcyB2aWV3XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSB0aGUgb2JqZWN0IHRvIGJlIHJlbmRlcmVkXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KVxue1xuICAgIHRoaXMuZW1pdCgncHJlcmVuZGVyJyk7XG5cbiAgICB2YXIgY2FjaGVQYXJlbnQgPSBvYmplY3QucGFyZW50O1xuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gb2JqZWN0O1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIG9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIG9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTICYmIHRoaXMudmlldy5zY3JlZW5jYW52YXMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpXG4gICAge1xuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGggLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlckRpc3BsYXlPYmplY3Qob2JqZWN0LCB0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciBhbmQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSBDYW52YXMgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIFtyZW1vdmVWaWV3PWZhbHNlXSB7Ym9vbGVhbn0gUmVtb3ZlcyB0aGUgQ2FudmFzIGVsZW1lbnQgZnJvbSB0aGUgRE9NLlxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIGNhbGwgdGhlIGJhc2UgZGVzdHJveVxuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcywgcmVtb3ZlVmlldyk7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5T2JqZWN0IHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgY29udGV4dClcbntcbiAgICB2YXIgdGVtcENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyQ2FudmFzKHRoaXMpO1xuICAgIHRoaXMuY29udGV4dCA9IHRlbXBDb250ZXh0O1xufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBQSVhJLlN5c3RlbVJlbmRlcmVyI3Jlc2l6ZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKiBAcGFyYW0ge251bWJlcn0gaFxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHcsIGgpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xuXG4gICAgLy9yZXNldCB0aGUgc2NhbGUgbW9kZS4uIG9kZGx5IHRoaXMgc2VlbXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgY2FudmFzIGlzIHJlc2l6ZWQuXG4gICAgLy9zdXJlbHkgYSBicm93c2VyIGJ1Zz8/IExldCBwaXhpIGZpeCB0aGF0IGZvciB5b3UuLlxuICAgIGlmKHRoaXMuc21vb3RoUHJvcGVydHkpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHRbdGhpcy5zbW9vdGhQcm9wZXJ0eV0gPSAoQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVCA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogTWFwcyBQaXhpIGJsZW5kIG1vZGVzIHRvIGNhbnZhcyBibGVuZCBtb2Rlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX21hcEJsZW5kTW9kZXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5ibGVuZE1vZGVzKVxuICAgIHtcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzID0ge307XG5cbiAgICAgICAgaWYgKHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnbXVsdGlwbHknO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NjcmVlbic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSAnb3ZlcmxheSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnZGFya2VuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MSUdIVEVOXSAgICAgICA9ICdsaWdodGVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdjb2xvci1kb2RnZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnY29sb3ItYnVybic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnaGFyZC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSAnc29mdC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnZGlmZmVyZW5jZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnZXhjbHVzaW9uJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdodWUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gJ3NhdHVyYXRlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl0gICAgICAgICA9ICdjb2xvcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSAnbHVtaW5vc2l0eSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29vbCBuZXcgYmxlbmQgbW9kZXMgaW4gY2FudmFzICdjb3VnaCcgaWUgJ2NvdWdoJ1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNpemUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGNhbnZhc1xuICovXG5mdW5jdGlvbiBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgQ2FudmFzIG9iamVjdCB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBDYW52YXNCdWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogQSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHR3by1kaW1lbnNpb25hbCByZW5kZXJpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59XG5cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0J1ZmZlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FudmFzQnVmZmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIGJ1ZmZlciBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ2FudmFzQnVmZmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdmFsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGNhbnZhcyB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZSBDYW52YXNCdWZmZXIgY2xhc3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbnZhc1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgY2FudmFzLlxuICpcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBjYW52YXMgcmVuZGVyZXIgdG8gZHJhdyB0aGUgcHJpbWl0aXZlIGdyYXBoaWNzIGRhdGEuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNHcmFwaGljcyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNHcmFwaGljcztcblxuLypcbiAqIFJlbmRlcnMgYSBHcmFwaGljcyBvYmplY3QgdG8gYSBjYW52YXMuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgYWN0dWFsIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSAyZCBkcmF3aW5nIG1ldGhvZCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciB3b3JsZEFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuICAgIGlmIChncmFwaGljcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3NUaW50KGdyYXBoaWNzKTtcbiAgICAgICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLl9maWxsVGludDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEuX2xpbmVUaW50O1xuXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZSBjbG9zZSB0aGUgcGF0aCAtIG11Y2ggbmVhdGVyIDopXG4gICAgICAgICAgICBpZiAocG9pbnRzWzBdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAmJiBwb2ludHNbMV0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbENvbG9yIHx8IGRhdGEuZmlsbENvbG9yID09PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmZpbGxBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggZmlsbENvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUud2lkdGgsIHNoYXBlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLDAsMipNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVsbGlwc2UgY29kZSB0YWtlbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcblxuICAgICAgICAgICAgdmFyIHcgPSBzaGFwZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB2YXIgaCA9IHNoYXBlLmhlaWdodCAqIDI7XG5cbiAgICAgICAgICAgIHZhciB4ID0gc2hhcGUueCAtIHcvMjtcbiAgICAgICAgICAgIHZhciB5ID0gc2hhcGUueSAtIGgvMjtcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIGthcHBhID0gMC41NTIyODQ4LFxuICAgICAgICAgICAgICAgIG94ID0gKHcgLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgb3kgPSAoaCAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgeGUgPSB4ICsgdywgICAgICAgICAgIC8vIHgtZW5kXG4gICAgICAgICAgICAgICAgeWUgPSB5ICsgaCwgICAgICAgICAgIC8vIHktZW5kXG4gICAgICAgICAgICAgICAgeG0gPSB4ICsgdyAvIDIsICAgICAgIC8vIHgtbWlkZGxlXG4gICAgICAgICAgICAgICAgeW0gPSB5ICsgaCAvIDI7ICAgICAgIC8vIHktbWlkZGxlXG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG1hc2tcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3Mgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgbWFza1xuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGNvbnRleHQgMmQgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciBsZW4gPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gVE9ETyAtIG5lZWQgdG8gYmUgVW5kZWZpbmVkIVxuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgcnggPSBzaGFwZS54O1xuICAgICAgICAgICAgdmFyIHJ5ID0gc2hhcGUueTtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcbiAgICAgICAgICAgIHZhciByYWRpdXMgPSBzaGFwZS5yYWRpdXM7XG5cbiAgICAgICAgICAgIHZhciBtYXhSYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDIgfCAwO1xuICAgICAgICAgICAgcmFkaXVzID0gcmFkaXVzID4gbWF4UmFkaXVzID8gbWF4UmFkaXVzIDogcmFkaXVzO1xuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRpbnQgb2YgYSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3MgdGhhdCB3aWxsIGhhdmUgaXRzIHRpbnQgdXBkYXRlZFxuICpcbiAqL1xuQ2FudmFzR3JhcGhpY3MudXBkYXRlR3JhcGhpY3NUaW50ID0gZnVuY3Rpb24gKGdyYXBoaWNzKVxue1xuICAgIGlmIChncmFwaGljcy50aW50ID09PSAweEZGRkZGRiAmJiBncmFwaGljcy5fcHJldlRpbnQgPT09IGdyYXBoaWNzLnRpbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyYXBoaWNzLl9wcmV2VGludCA9IGdyYXBoaWNzLnRpbnQ7XG5cbiAgICB2YXIgdGludFIgPSAoZ3JhcGhpY3MudGludCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50RyA9IChncmFwaGljcy50aW50ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgdGludEIgPSAoZ3JhcGhpY3MudGludCAmIDB4RkYpLyAyNTU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLmZpbGxDb2xvciB8IDA7XG4gICAgICAgIHZhciBsaW5lQ29sb3IgPSBkYXRhLmxpbmVDb2xvciB8IDA7XG5cbiAgICAgICAgLypcbiAgICAgICAgdmFyIGNvbG9yUiA9IChmaWxsQ29sb3IgPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgdmFyIGNvbG9yRyA9IChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JCID0gKGZpbGxDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgZmlsbENvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG5cbiAgICAgICAgY29sb3JSID0gKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckcgPSAobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgY29sb3JCID0gKGxpbmVDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgbGluZUNvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG4gICAgICAgICovXG5cbiAgICAgICAgLy8gc3VwZXIgaW5saW5lIGNvcyBpbSBhbiBvcHRpbWl6YXRpb24gTkFaSSA6KVxuICAgICAgICBkYXRhLl9maWxsVGludCA9ICgoKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgoZmlsbENvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAoZmlsbENvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuICAgICAgICBkYXRhLl9saW5lVGludCA9ICgoKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAobGluZUNvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuXG4gICAgfVxufTtcblxuIiwidmFyIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi9DYW52YXNHcmFwaGljcycpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBtYXNraW5nLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ2FudmFzTWFza01hbmFnZXIoKVxue31cblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FudmFzTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc01hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgc3RhY2sgb2YgbWFza3MuXG4gKlxuICogQHBhcmFtIG1hc2tEYXRhIHtvYmplY3R9IHRoZSBtYXNrRGF0YSB0aGF0IHdpbGwgYmUgcHVzaGVkXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSwgcmVuZGVyZXIpXG57XG5cbiAgICByZW5kZXJlci5jb250ZXh0LnNhdmUoKTtcblxuICAgIHZhciBjYWNoZUFscGhhID0gbWFza0RhdGEuYWxwaGE7XG4gICAgdmFyIHRyYW5zZm9ybSA9IG1hc2tEYXRhLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgLy9UT0RPIHN1cG9ydCBzcHJpdGUgYWxwaGEgbWFza3M/P1xuICAgIC8vbG90cyBvZiBlZmZvcnQgcmVxdWlyZWQuIElmIGRlbWFuZCBpcyBncmVhdCBlbm91Z2guLlxuICAgIGlmKCFtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrKG1hc2tEYXRhLCByZW5kZXJlci5jb250ZXh0KTtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5jbGlwKCk7XG4gICAgfVxuXG4gICAgbWFza0RhdGEud29ybGRBbHBoYSA9IGNhY2hlQWxwaGE7XG59O1xuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dCB0byB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZSB0aGUgbWFzayB3YXMgYXBwbGllZC5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLmNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7fTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2RzIGZvciBTcHJpdGUvVGV4dHVyZSB0aW50aW5nLlxuICogQHN0YXRpY1xuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG52YXIgQ2FudmFzVGludGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1RpbnRlcjtcblxuLyoqXG4gKiBCYXNpY2FsbHkgdGhpcyBtZXRob2QganVzdCBuZWVkcyBhIHNwcml0ZSBhbmQgYSBjb2xvciBhbmQgdGludHMgdGhlIHNwcml0ZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSB0aW50ZWQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlID0gZnVuY3Rpb24gKHNwcml0ZSwgY29sb3IpXG57XG4gICAgdmFyIHRleHR1cmUgPSBzcHJpdGUudGV4dHVyZTtcblxuICAgIGNvbG9yID0gQ2FudmFzVGludGVyLnJvdW5kQ29sb3IoY29sb3IpO1xuXG4gICAgdmFyIHN0cmluZ0NvbG9yID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgdGV4dHVyZS50aW50Q2FjaGUgPSB0ZXh0dXJlLnRpbnRDYWNoZSB8fCB7fTtcblxuICAgIGlmICh0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0pXG4gICAge1xuICAgICAgICByZXR1cm4gdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdO1xuICAgIH1cblxuICAgICAvLyBjbG9uZSB0ZXh0dXJlLi5cbiAgICB2YXIgY2FudmFzID0gQ2FudmFzVGludGVyLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8vQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWwodGV4dHVyZSwgc3RyaW5nQ29sb3IsIGNhbnZhcyk7XG4gICAgQ2FudmFzVGludGVyLnRpbnRNZXRob2QodGV4dHVyZSwgY29sb3IsIGNhbnZhcyk7XG5cbiAgICBpZiAoQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSlcbiAgICB7XG4gICAgICAgIC8vIGlzIHRoaXMgYmV0dGVyP1xuICAgICAgICB2YXIgdGludEltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHRpbnRJbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKCk7XG5cbiAgICAgICAgdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdID0gdGludEltYWdlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSBjYW52YXM7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBub3QgY29udmVydGluZyB0aGUgdGV4dHVyZSB0byBhbiBpbWFnZSB0aGVuIHdlIG5lZWQgdG8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXNcbiAgICAgICAgQ2FudmFzVGludGVyLmNhbnZhcyA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdtdWx0aXBseScgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcblxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdvdmVybGF5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoT3ZlcmxheSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1hdG9wJztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgLy8gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG59O1xuXG4vKipcbiAqIFRpbnQgYSB0ZXh0dXJlIHBpeGVsIHBlciBwaXhlbC5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcbiAgICB2YXIgciA9IHJnYlZhbHVlc1swXSwgZyA9IHJnYlZhbHVlc1sxXSwgYiA9IHJnYlZhbHVlc1syXTtcblxuICAgIHZhciBwaXhlbERhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICB2YXIgcGl4ZWxzID0gcGl4ZWxEYXRhLmRhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBpeGVscy5sZW5ndGg7IGkgKz0gNClcbiAgICB7XG4gICAgICAgIHBpeGVsc1tpKzBdICo9IHI7XG4gICAgICAgIHBpeGVsc1tpKzFdICo9IGc7XG4gICAgICAgIHBpeGVsc1tpKzJdICo9IGI7XG4gICAgfVxuXG4gICAgY29udGV4dC5wdXRJbWFnZURhdGEocGl4ZWxEYXRhLCAwLCAwKTtcbn07XG5cbi8qKlxuICogUm91bmRzIHRoZSBzcGVjaWZpZWQgY29sb3IgYWNjb3JkaW5nIHRvIHRoZSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbC5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHJvdW5kLCBzaG91bGQgYmUgYSBoZXggY29sb3JcbiAqL1xuQ2FudmFzVGludGVyLnJvdW5kQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IpXG57XG4gICAgdmFyIHN0ZXAgPSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbDtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcblxuICAgIHJnYlZhbHVlc1swXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1swXSAvIHN0ZXApICogc3RlcCk7XG4gICAgcmdiVmFsdWVzWzFdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzFdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMl0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMl0gLyBzdGVwKSAqIHN0ZXApO1xuXG4gICAgcmV0dXJuIHV0aWxzLnJnYjJoZXgocmdiVmFsdWVzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGNhcCB3aGVuIHJvdW5kaW5nIGNvbG9ycy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsID0gODtcblxuLyoqXG4gKiBUaW50IGNhY2hlIGJvb2xlYW4gZmxhZy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jb252ZXJ0VGludFRvSW1hZ2UgPSBmYWxzZTtcblxuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCwgY29uc2VxdWVudGx5IHRoZSBhYmlsaXR5IHRvIHRpbnQgdXNpbmcgdGhlIG11bHRpcGx5IG1ldGhvZC5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA9IHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKTtcblxuLyoqXG4gKiBUaGUgdGludGluZyBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQuXG4gKlxuICovXG5DYW52YXNUaW50ZXIudGludE1ldGhvZCA9IENhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA/IENhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5IDogIENhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsO1xuIiwidmFyIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcblx0dXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIFRleHR1cmVNYW5hZ2VyID0gZnVuY3Rpb24oZ2wpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyB0cmFjayB0ZXh0dXJlcyBpbiB0aGUgcmVuZGVyZXIgc28gd2UgY2FuIG5vIGxvbmdlciBsaXN0ZW4gdG8gdGhlbSBvbiBkZXN0cnVjdGlvbi5cblx0dGhpcy5fbWFuYWdlZFRleHR1cmVzID0gW107XG4gICAgdGhpcy5nbFRleHR1cmVzID0ge307XG5cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5nZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW5kL29yIENyZWF0ZXMgYSBXZWJHTCB0ZXh0dXJlIGZvciB0aGUgcmVuZGVyZXIncyBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdXBkYXRlXG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuXHRpZiAoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGdsVGV4dHVyZSA9IHRoaXMuZ2xUZXh0dXJlc1t0ZXh0dXJlLnVpZF0vL3RleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgaWYgKCFnbFRleHR1cmUpXG4gICAge1xuICAgICAgICBnbFRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcbiAgICAgICAgZ2xUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSB0cnVlXG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgLy8gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXSA9IGdsVGV4dHVyZTtcblxuICAgICAgICB0ZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9uKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICBnbFRleHR1cmUudXBsb2FkKHRleHR1cmUuc291cmNlKTtcbiAgICBcbiAgICAvL1RPRE8gY2hlY2sgaXMgcG93ZXIgb2YgdHdvLi5cbiAgICBnbFRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cblxuICAgIC8vIFRPRE8gY2hlY2sgZm9yIHNjYWxpbmcgdHlwZVxuICAgIGdsVGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKCk7XG5cbiAgICByZXR1cm4gIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTFxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gZGVzdHJveVxuICovXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlLCBfc2tpcFJlbW92ZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0pXG4gICAge1xuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG5cblxuICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcblxuICAgICAgICBpZiAoIV9za2lwUmVtb3ZlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5pbmRleE9mKHRleHR1cmUpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5fbWFuYWdlZFRleHR1cmVzLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKClcbntcblx0Ly8gZW1wdHkgYWxsIHRoZSBvbGQgZ2wgdGV4dHVyZXMgYXMgdGhleSBhcmUgdXNlbGVzcyBub3dcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzW2ldO1xuICAgICAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuICAgIC8vIGRlc3Ryb3kgbWFuYWdlZCB0ZXh0dXJlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIHRoaXMuZGVzdHJveVRleHR1cmUodGV4dHVyZSwgdHJ1ZSk7XG4gICAgICAgIHRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9mZignZGlzcG9zZScsIHRoaXMuZGVzdHJveVRleHR1cmUsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcyA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZU1hbmFnZXI7XG5cbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgU2hhZGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIE1hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9NYXNrTWFuYWdlcicpLFxuICAgIFN0ZW5jaWxNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlcicpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBCbGVuZE1vZGVNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4vdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBGWEFBRmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBUZXh0dXJlTWFuYWdlciA9IHJlcXVpcmUoJy4vVGV4dHVyZU1hbmFnZXInKSxcbiAgICBjcmVhdGVDb250ZXh0ID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuY3JlYXRlQ29udGV4dCxcbiAgICBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aScpLFxuICAgIG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpID0gcmVxdWlyZSgnLi91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFdlYkdMUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIHdlYkdMIGVuYWJsZWQgY2FudmFzLiBUaGlzIHJlbmRlcmVyXG4gKiBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMLiBUaGlzIFJlbmRlciB3b3JrcyBieSBhdXRvbWF0aWNhbGx5IG1hbmFnaW5nIHdlYkdMQmF0Y2hzLlxuICogU28gbm8gbmVlZCBmb3IgU3ByaXRlIEJhdGNoZXMgb3IgU3ByaXRlIENsb3Vkcy5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIHZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9MF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9MF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMuIElmIG5vdCBhdmFpbGFibGUgbmF0aXZlbHkgdGhlbiBGWEFBIGFudGlhbGlhc2luZyBpcyB1c2VkXG4gKiBAcGFyYW0gW29wdGlvbnMuZm9yY2VGWEFBPWZhbHNlXSB7Ym9vbGVhbn0gZm9yY2VzIEZYQUEgYW50aWFsaWFzaW5nIHRvIGJlIHVzZWQgb3ZlciBuYXRpdmUuIEZYQUEgaXMgZmFzdGVyLCBidXQgbWF5IG5vdCBhbHdheXMgbG9vayBhcyBncmVhdFxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy4gSWYgeW91IHdpc2ggdG8gc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSAqbXVzdCogc2V0IHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byBgdHJ1ZWAuXG4gKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmXG4gKiAgICAgIHlvdSBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0LlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ1dlYkdMJywgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIHJlbmRlcmVyIGFzIGEgc3RhbmRhcmRpc2VkIGNvbnN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9Ly9cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0w7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gdGhpcy5oYW5kbGVDb250ZXh0TG9zdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5oYW5kbGVDb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gY3JlYXRlIGEgbmV3IHdlYmdsIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgICAgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQsXG4gICAgICAgIGFudGlhbGlhczogb3B0aW9ucy5hbnRpYWxpYXMsXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnRyYW5zcGFyZW50ICE9PSAnbm90TXVsdGlwbGllZCcsXG4gICAgICAgIHN0ZW5jaWw6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICB9O1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYVszXSA9IHRoaXMudHJhbnNwYXJlbnQgPyAwIDogMTtcblxuICAgIC8qKlxuICAgICAqIERlYWxzIHdpdGggbWFuYWdpbmcgdGhlIHNoYWRlciBwcm9ncmFtcyBhbmQgdGhlaXIgYXR0cmlicy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBuZXcgU2hhZGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1hc2tzIHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWFza01hbmFnZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG5ldyBNYXNrTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyID0gbmV3IFN0ZW5jaWxNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRmlsdGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlck1hbmFnZXIgPSBuZXcgRmlsdGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIGJsZW5kTW9kZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmxlbmRNb2RlTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBuZXcgQmxlbmRNb2RlTWFuYWdlcih0aGlzKTtcblxuICAgIFxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIE9iamVjdFJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5PYmplY3RSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG5ldyBPYmplY3RSZW5kZXJlcih0aGlzKTtcblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIGNvbnRleHQgc28gaXQgaXMgcmVhZHkgZm9yIHRoZSBtYW5hZ2Vycy5cbiAgICB0aGlzLmdsID0gY3JlYXRlQ29udGV4dCh0aGlzLnZpZXcsIHRoaXMuX2NvbnRleHRPcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXRDb250ZXh0KCk7XG5cbiAgICAvLyBtYXAgc29tZSB3ZWJHTCBibGVuZCBhbmQgZHJhd21vZGVzLi5cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wpO1xuICAgIHRoaXMuZHJhd01vZGVzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wpXG5cbiAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXR9XG4gICAgICovXG4gICAgdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUZXh0dXJlTG9jYXRpb24gPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oV2ViR0xSZW5kZXJlcik7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgV2ViR0wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLl9pbml0Q29udGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgbWFuYWdlci4uLlxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hbmFnZXIoZ2wpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBkZWZhdWx0IHBpeGkgc2V0dGluZ3MuLlxuICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG5cblxuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBudWxsLCB0aGlzLnJlc29sdXRpb24sIHRydWUpO1xuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5jbGVhckNvbG9yID0gdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYTtcbiAgICBcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQodGhpcy5yb290UmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMuZW1pdCgnY29udGV4dCcsIGdsKTtcblxuICAgIC8vIHNldHVwIHRoZSB3aWR0aC9oZWlnaHQgcHJvcGVydGllcyBhbmQgZ2wgdmlld3BvcnRcbiAgICB0aGlzLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7ICAgIFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gaXRzIHdlYkdMIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIC8vIG5vIHBvaW50IHJlbmRlcmluZyBpZiBvdXIgY29udGV4dCBoYXMgYmVlbiBibG93biB1cCFcbiAgICBpZiAodGhpcy5nbC5pc0NvbnRleHRMb3N0KCkpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gZGlzcGxheU9iamVjdDtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IGRpc3BsYXlPYmplY3QucGFyZW50O1xuICAgIGRpc3BsYXlPYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIGRpc3BsYXlPYmplY3QudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnJvb3RSZW5kZXJUYXJnZXQsIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpOy8vdGhpcy5wcm9qZWN0aW9uKTtcblxuICAgIHRoaXMuZW1pdCgncG9zdHJlbmRlcicpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgRGlzcGxheSBPYmplY3QuXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0gcmVuZGVyVGFyZ2V0IHtQSVhJLlJlbmRlclRhcmdldH0gVGhlIHJlbmRlciB0YXJnZXQgdG8gdXNlIHRvIHJlbmRlciB0aGlzIGRpc3BsYXkgb2JqZWN0XG4gKlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJEaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHJlbmRlclRhcmdldCwgY2xlYXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgdGhpcy5iaW5kUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG5cbiAgICBpZihjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IHRoZSBmaWx0ZXIgbWFuYWdlclxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5zZXRGaWx0ZXJTdGFjayggcmVuZGVyVGFyZ2V0LmZpbHRlclN0YWNrICk7XG5cbiAgICAvLyByZW5kZXIgdGhlIHNjZW5lIVxuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyV2ViR0wodGhpcyk7XG5cbiAgICAvLyBmaW5pc2ggdGhlIGN1cnJlbnQgcmVuZGVyZXIuLlxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdGhlIG9uZSBnaXZlbiBpbiBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gb2JqZWN0UmVuZGVyZXIge1BJWEkuT2JqZWN0UmVuZGVyZXJ9IFRoZSBvYmplY3QgcmVuZGVyZXIgdG8gdXNlLlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRPYmplY3RSZW5kZXJlciA9IGZ1bmN0aW9uIChvYmplY3RSZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyZXIgPT09IG9iamVjdFJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0b3AoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG9iamVjdFJlbmRlcmVyO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHdlYkdMIHZpZXcgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB3ZWJHTCB2aWV3XG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB3ZWJHTCB2aWV3XG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9PT0gdGhpcy5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSB0aGUgbmV3IHJlbmRlciB0YXJnZXRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgaWYocmVuZGVyVGFyZ2V0ICE9PSB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcblxuICAgICAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLnNldE1hc2tTdGFjayggcmVuZGVyVGFyZ2V0LnN0ZW5jaWxNYXNrU3RhY2sgKTtcbiAgICB9XG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKS8vcHJvamVjdGlvbiwgYnVmZmVyKVxue1xuICAgIC8vVE9ETyBjYWNoZVxuICAgIGlmKHRoaXMuX2FjdGl2ZVNoYWRlciAhPT0gc2hhZGVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlU2hhZGVyID0gc2hhZGVyO1xuICAgICAgICBzaGFkZXIuYmluZCgpO1xuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgfVxufVxuXG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvY2F0aW9uKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvL1RPRE8gdGVzdCBwZXJmIG9mIGNhY2hlP1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gfHwgMDtcblxuICAgIGlmKHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiAhPT0gbG9jYXRpb24pLy9cbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbiApO1xuICAgIH1cblxuICAgIC8vVE9ETyAtIGNhbiB3ZSBjYWNoZSB0aGlzIHRleHR1cmUgdG9vP1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOyAgICAgIFxuICAgIFxuICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBiaW5kIHRoZSB0ZXh0dXJlLi5cbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0uYmluZCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEhhbmRsZXMgYSBsb3N0IHdlYmdsIGNvbnRleHRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5oYW5kbGVDb250ZXh0TG9zdCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGEgcmVzdG9yZWQgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnJlbW92ZUFsbCgpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgKGV2ZW50IGxpc3RlbmVycywgc3ByaXRlYmF0Y2gsIGV0Yy4uLilcbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldylcbntcbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICAvLyByZW1vdmUgbGlzdGVuZXJzXG4gICAgdGhpcy52aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0KTtcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCk7XG5cbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLmRlc3Ryb3lBbGwoKTtcblxuICAgIC8vIGNhbGwgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMudWlkID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIG1hbmFnZXJzXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLm1hc2tNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gbnVsbDtcbiAgICB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLnVzZVByb2dyYW0obnVsbCk7XG4gICAgdGhpcy5nbCA9IG51bGw7XG59O1xuXG4iLCJ2YXIgRGVmYXVsdFNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgUElYSSBmaWx0ZXIuIEN1cnJlbnRseSBvbmx5IFdlYkdMIHN1cHBvcnRzIGZpbHRlcnMuXG4gKiBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIGZpbHRlciB0aGlzIHNob3VsZCBiZSB5b3VyIGJhc2UgY2xhc3MuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHZlcnRleFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdmVydGV4IHNoYWRlciBzb3VyY2UgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBmcmFnbWVudFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIHVuaWZvcm1zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1bmlmb3JtcyBmb3IgdGhpcyBmaWx0ZXIuXG4gKi9cbmZ1bmN0aW9uIEFic3RyYWN0RmlsdGVyKHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zKVxue1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygc2hhZGVyc1xuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlcnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHRyYSBwYWRkaW5nIHRoYXQgdGhlIGZpbHRlciBtaWdodCBuZWVkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIHZlcnRleCBzaGFkZXJcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmdbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmVydGV4U3JjID0gdmVydGV4U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIG9mIHRoZSBmcmFtZW50IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgLy9UT0RPIGEgcmVtaW5kZXIgLSB3b3VsZCBiZSBjb29sIHRvIGhhdmUgbG93ZXIgcmVzIGZpbHRlcnMgYXMgdGhpcyB3b3VsZCBnaXZlIGJldHRlciBwZXJmb3JtYW5jZS5cblxuICAgIC8vdHlwZW9mIGZyYWdtZW50U3JjID09PSAnc3RyaW5nJyA/IGZyYWdtZW50U3JjLnNwbGl0KCcnKSA6IChmcmFnbWVudFNyYyB8fCBbXSk7XG5cbn1cblxuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RmlsdGVyO1xuXG4vKipcbiAqIEdyYWJzIGEgc2hhZGVyIGZyb20gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBzaGFkZXIgZnJvbVxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuZ2V0U2hhZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyc1tnbC5pZF07XG5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IG5ldyBEZWZhdWx0U2hhZGVyKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIsXG4gICAgICAgICAgICB0aGlzLnZlcnRleFNyYyxcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRTcmMsXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaGFkZXJzW2dsLmlkXSA9IHNoYWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbn07XG5cbi8qKlxuICogU3luY3MgYSB1bmlmb3JtIGJldHdlZW4gdGhlIGNsYXNzIG9iamVjdCBhbmQgdGhlIHNoYWRlcnMuXG4gKlxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuc2hhZGVycy5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnNoYWRlcnNbaV0uc3luY1VuaWZvcm0odW5pZm9ybSk7XG4gICAgfVxufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKlxuICogQmFzaWMgRlhBQSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgY29kZSBvbiBnZWVrczNkLmNvbSB3aXRoIHRoZVxuICogbW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXG4gKiB1bnN1cHBvcnRlZCBieSBXZWJHTC5cbiAqXG4gKiAtLVxuICogRnJvbTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICpcbiAqL1xuZnVuY3Rpb24gRlhBQUZpbHRlcigpXG57XG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxuXFxudm9pZCB0ZXhjb29yZHModmVjMiBmcmFnQ29vcmQsIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk5XLCBvdXQgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiU1csIG91dCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzIgaW52ZXJzZVZQID0gMS4wIC8gcmVzb2x1dGlvbi54eTtcXG4gICAgdl9yZ2JOVyA9IChmcmFnQ29vcmQgKyB2ZWMyKC0xLjAsIC0xLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JORSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYlNXID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU0UgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIDEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk0gPSB2ZWMyKGZyYWdDb29yZCAqIGludmVyc2VWUCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbiAgIHZSZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcXG5cXG4gICAvL2NvbXB1dGUgdGhlIHRleHR1cmUgY29vcmRzIGFuZCBzZW5kIHRoZW0gdG8gdmFyeWluZ3NcXG4gICB0ZXhjb29yZHMoYVRleHR1cmVDb29yZCAqIHJlc29sdXRpb24sIHJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG5cXG4vKipcXG5CYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXFxubW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXFxudW5zdXBwb3J0ZWQgYnkgV2ViR0wuXFxuXFxuLS1cXG5cXG5Gcm9tOlxcbmh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XFxuXFxuQ29weXJpZ2h0IChjKSAyMDExIGJ5IEFybWluIFJvbmFjaGVyLlxcblxcblNvbWUgcmlnaHRzIHJlc2VydmVkLlxcblxcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcXG5tZXQ6XFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcXG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxcbiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXFxuICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXFxuICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxcblxcbiAgICAqIFRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yXFxuICAgICAgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljXFxuICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxcblxcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcXG5cXFwiQVMgSVNcXFwiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxcbkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXFxuT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXFxuU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxcblRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxcbiovXFxuXFxuI2lmbmRlZiBGWEFBX1JFRFVDRV9NSU5cXG4gICAgI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gICAoMS4wLyAxMjguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01VTFxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAgICgxLjAgLyA4LjApXFxuI2VuZGlmXFxuI2lmbmRlZiBGWEFBX1NQQU5fTUFYXFxuICAgICNkZWZpbmUgRlhBQV9TUEFOX01BWCAgICAgOC4wXFxuI2VuZGlmXFxuXFxuLy9vcHRpbWl6ZWQgdmVyc2lvbiBmb3IgbW9iaWxlLCB3aGVyZSBkZXBlbmRlbnRcXG4vL3RleHR1cmUgcmVhZHMgY2FuIGJlIGEgYm90dGxlbmVja1xcbnZlYzQgZnhhYShzYW1wbGVyMkQgdGV4LCB2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JOVywgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JTVywgdmVjMiB2X3JnYlNFLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzQgY29sb3I7XFxuICAgIG1lZGl1bXAgdmVjMiBpbnZlcnNlVlAgPSB2ZWMyKDEuMCAvIHJlc29sdXRpb24ueCwgMS4wIC8gcmVzb2x1dGlvbi55KTtcXG4gICAgdmVjMyByZ2JOVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTlcpLnh5ejtcXG4gICAgdmVjMyByZ2JORSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTkUpLnh5ejtcXG4gICAgdmVjMyByZ2JTVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU1cpLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU0UpLnh5ejtcXG4gICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTSk7XFxuICAgIHZlYzMgcmdiTSAgPSB0ZXhDb2xvci54eXo7XFxuICAgIHZlYzMgbHVtYSA9IHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdChyZ2JOVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFORSA9IGRvdChyZ2JORSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTVyA9IGRvdChyZ2JTVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdChyZ2JTRSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNICA9IGRvdChyZ2JNLCAgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNaW4gPSBtaW4obHVtYU0sIG1pbihtaW4obHVtYU5XLCBsdW1hTkUpLCBtaW4obHVtYVNXLCBsdW1hU0UpKSk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgobHVtYU0sIG1heChtYXgobHVtYU5XLCBsdW1hTkUpLCBtYXgobHVtYVNXLCBsdW1hU0UpKSk7XFxuXFxuICAgIG1lZGl1bXAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcblxcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoKGx1bWFOVyArIGx1bWFORSArIGx1bWFTVyArIGx1bWFTRSkgKlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwpLCBGWEFBX1JFRFVDRV9NSU4pO1xcblxcbiAgICBmbG9hdCByY3BEaXJNaW4gPSAxLjAgLyAobWluKGFicyhkaXIueCksIGFicyhkaXIueSkpICsgZGlyUmVkdWNlKTtcXG4gICAgZGlyID0gbWluKHZlYzIoRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBtYXgodmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiBpbnZlcnNlVlA7XFxuXFxuICAgIHZlYzMgcmdiQSA9IDAuNSAqIChcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqICgxLjAgLyAzLjAgLSAwLjUpKS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDIuMCAvIDMuMCAtIDAuNSkpLnh5eik7XFxuICAgIHZlYzMgcmdiQiA9IHJnYkEgKiAwLjUgKyAwLjI1ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogLTAuNSkueHl6ICtcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqIDAuNSkueHl6KTtcXG5cXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QocmdiQiwgbHVtYSk7XFxuICAgIGlmICgobHVtYUIgPCBsdW1hTWluKSB8fCAobHVtYUIgPiBsdW1hTWF4KSlcXG4gICAgICAgIGNvbG9yID0gdmVjNChyZ2JBLCB0ZXhDb2xvci5hKTtcXG4gICAgZWxzZVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkIsIHRleENvbG9yLmEpO1xcbiAgICByZXR1cm4gY29sb3I7XFxufVxcblxcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBmeGFhKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICogdlJlc29sdXRpb24sIHZSZXNvbHV0aW9uLCB2X3JnYk5XLCB2X3JnYk5FLCB2X3JnYlNXLCB2X3JnYlNFLCB2X3JnYk0pO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxufVxuXG5GWEFBRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkZYQUFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRlhBQUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRlhBQUZpbHRlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICovXG5GWEFBRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIoIHJlbmRlcmVyICk7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG4iLCJ2YXIgQWJzdHJhY3RGaWx0ZXIgPSByZXF1aXJlKCcuL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgU3ByaXRlTWFza0ZpbHRlciBjbGFzc1xuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICovXG5mdW5jdGlvbiBTcHJpdGVNYXNrRmlsdGVyKHNwcml0ZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXNrQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICAgdk1hc2tDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIC8vIGNoZWNrIGNsaXAhIHRoaXMgd2lsbCBzdG9wIHRoZSBtYXNrIGJsZWVkaW5nIG91dCBmcm9tIHRoZSBlZGdlc1xcbiAgICB2ZWMyIHRleHQgPSBhYnMoIHZNYXNrQ29vcmQgLSAwLjUgKTtcXG4gICAgdGV4dCA9IHN0ZXAoMC41LCB0ZXh0KTtcXG4gICAgZmxvYXQgY2xpcCA9IDEuMCAtIG1heCh0ZXh0LnksIHRleHQueCk7XFxuICAgIHZlYzQgb3JpZ2luYWwgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgICB2ZWM0IG1hc2t5ID0gdGV4dHVyZTJEKG1hc2ssIHZNYXNrQ29vcmQpO1xcbiAgICBvcmlnaW5hbCAqPSAobWFza3kuciAqIG1hc2t5LmEgKiBhbHBoYSAqIGNsaXApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBvcmlnaW5hbDtcXG59XFxuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hc2s6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLl90ZXh0dXJlIH0sXG4gICAgICAgICAgICBhbHBoYTogICAgICAgICAgeyB0eXBlOiAnZicsIHZhbHVlOiAxfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG59XG5cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVNYXNrRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVNYXNrRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS5fdGV4dHVyZTtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS53b3JsZEFscGhhO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHVzZWQgdG8gbW92ZSB0aGUgZGlzcGxhY2VtZW50IG1hcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlTWFza0ZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHbE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQmxlbmRNb2RlTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59XG5cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmRNb2RlTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxlbmRNb2RlTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzLXVwIHRoZSBnaXZlbiBibGVuZE1vZGUgZnJvbSBXZWJHTCdzIHBvaW50IG9mIHZpZXcuXG4gKlxuICogQHBhcmFtIGJsZW5kTW9kZSB7bnVtYmVyfSB0aGUgYmxlbmRNb2RlLCBzaG91bGQgYmUgYSBQaXhpIGNvbnN0LCBzdWNoIGFzIGBQSVhJLkJMRU5EX01PREVTLkFERGAuIFNlZVxuICogIHtAbGluayBQSVhJLkJMRU5EX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICovXG5CbGVuZE1vZGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRCbGVuZE1vZGUgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPT09IGJsZW5kTW9kZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMucmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmN1cnJlbnRCbGVuZE1vZGVdO1xuICAgIHRoaXMucmVuZGVyZXIuZ2wuYmxlbmRGdW5jKG1vZGVbMF0sIG1vZGVbMV0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpLFxuICAgIFF1YWQgPSByZXF1aXJlKCcuLi91dGlscy9RdWFkJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gRmlsdGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW107XG5cbiAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICByZW5kZXJUYXJnZXQ6cmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldCxcbiAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICBib3VuZHM6bnVsbFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgLy8gbGlzdGVuIGZvciBjb250ZXh0IGFuZCB1cGRhdGUgbmVjZXNzYXJ5IGJ1ZmZlcnNcbiAgICAvL1RPRE8gbWFrZSB0aGlzIGR5bmFtaWMhXG4gICAgLy9UT0RPIHRlc3QgdGhpcyBvdXQgYnkgZm9yY2VzIHBvd2VyIG9mIHR3bz9cbiAgICB0aGlzLnRleHR1cmVTaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZnJhbWVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcbn1cblxuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWx0ZXJNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBGaWx0ZXJNYW5hZ2VyO1xuXG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnF1YWQgPSBuZXcgUXVhZChnbCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHBhcmFtIGJ1ZmZlciB7QXJyYXlCdWZmZXJ9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnNldEZpbHRlclN0YWNrID0gZnVuY3Rpb24gKCBmaWx0ZXJTdGFjayApXG57XG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IGZpbHRlclN0YWNrO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXIgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBmaWx0ZXJzIHtQSVhJLkFic3RyYWN0RmlsZXJbXX0gdGhlIGZpbHRlcnMgdGhhdCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2tcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucHVzaEZpbHRlciA9IGZ1bmN0aW9uICh0YXJnZXQsIGZpbHRlcnMpXG57XG4gICAgLy8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdC4uXG4gICAgLy8gVE9ETyByZXBsYWNlIGNsb25lIHdpdGggYSBjb3B5IHRvIHNhdmUgb2JqZWN0IGNyZWF0aW9uXG4gICAgdmFyIGJvdW5kcyA9IHRhcmdldC5maWx0ZXJBcmVhID8gdGFyZ2V0LmZpbHRlckFyZWEuY2xvbmUoKSA6IHRhcmdldC5nZXRCb3VuZHMoKTtcblxuICAgIC8vYm91bmRzID0gYm91bmRzLmNsb25lKCk7XG5cbiAgICAvLyByb3VuZCBvZmYgdGhlIHJlY3RhbmdsZSB0byBnZXQgYSBuaWNlIHNtb29vb29vb3RoIGZpbHRlciA6KVxuICAgIGJvdW5kcy54ID0gYm91bmRzLnggfCAwO1xuICAgIGJvdW5kcy55ID0gYm91bmRzLnkgfCAwO1xuICAgIGJvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCB8IDA7XG4gICAgYm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgfCAwO1xuXG5cbiAgICAvLyBwYWRkaW5nIVxuICAgIHZhciBwYWRkaW5nID0gZmlsdGVyc1swXS5wYWRkaW5nIHwgMDtcbiAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG5cblxuICAgIGlmKHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvL1RPRE8gdGhpcyB3aWxsIGJyZWFrIGlmIHRoZSByZW5kZXJUZXh0dXJlIHRyYW5zZm9ybSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgdHJhbnNsYXRpb24uXG4gICAgICAgIC8vV2lsbCBuZWVkIHRvIHRha2UgdGhlIGZ1bGwgbWF0cml4IHRyYW5zZm9ybSBpbnRvIGFjb3VudC4uXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQudHJhbnNmb3JtO1xuXG4gICAgICAgIGJvdW5kcy54ICs9IHRyYW5zZm9ybS50eDtcbiAgICAgICAgYm91bmRzLnkgKz0gdHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG5cbiAgICAgICAgYm91bmRzLnggLT0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSAtPSB0cmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgICB0aGlzLmNhcEZpbHRlckFyZWEoIGJvdW5kcyApO1xuICAgIH1cblxuICAgIGlmKGJvdW5kcy53aWR0aCA+IDAgJiYgYm91bmRzLmhlaWdodCA+IDApXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGJvdW5kcztcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGV4dHVyZSk7XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRleHR1cmUuLlxuICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gVE9ETyBnZXQgcmlkIG9mIG9iamVjdCBjcmVhdGlvbiFcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogdGV4dHVyZSxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBwdXNoIHNvbXRoaW5nIG9uIHRvIHRoZSBzdGFjayB0aGF0IGlzIGVtcHR5XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcnNcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnBvcEZpbHRlciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrLnBvcCgpO1xuICAgIHZhciBwcmV2aW91c0ZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrW3RoaXMuZmlsdGVyU3RhY2subGVuZ3RoLTFdO1xuXG4gICAgdmFyIGlucHV0ID0gZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyBpZiB0aGUgcmVuZGVyVGFyZ2V0IGlzIG51bGwgdGhlbiB3ZSBkb24ndCBhcHBseSB0aGUgZmlsdGVyIGFzIGl0cyBvZmZzY3JlZW5cbiAgICBpZighZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IHByZXZpb3VzRmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyB1c2UgcHJvZ3JhbVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaW5wdXQuZnJhbWU7XG5cbiAgICB0aGlzLnF1YWQubWFwKHRoaXMudGV4dHVyZVNpemUsIGlucHV0LmZyYW1lKTtcblxuXG4gICAgLy8gVE9ETy4uIHRoaXMgcHJvYmFibHkgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgZmlsdGVycyA9IGZpbHRlckRhdGEuZmlsdGVyO1xuXG4gICAgLy8gYXNzdW1pbmcgYWxsIGZpbHRlcnMgZm9sbG93IHRoZSBjb3JyZWN0IGZvcm1hdD8/XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAyICogNCAqIDQpO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIG5vcm1hbCBibGVuZG1vZGUhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShDT05TVC5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAxKVxuICAgIHtcbiAgICAgICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoZW4gc2V0dGluZyB0aGlzIGVhY2ggdGltZT9cbiAgICAgICAgaWYgKGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgIGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1swXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgaW5wdXQsIG91dHB1dCApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggaW5wdXQgKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZmxpcFRleHR1cmUgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3BUZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aC0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICAgICAgaWYgKGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBmbG9wVGV4dHVyZSApO1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGZsaXBUZXh0dXJlO1xuICAgICAgICAgICAgZmxpcFRleHR1cmUgPSBmbG9wVGV4dHVyZTtcbiAgICAgICAgICAgIGZsb3BUZXh0dXJlID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlcnNbZmlsdGVycy5sZW5ndGgtMV0uYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBvdXRwdXQgKTtcblxuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxpcFRleHR1cmUgKTtcbiAgICAgICAgdGhpcy5yZXR1cm5SZW5kZXJUYXJnZXQoIGZsb3BUZXh0dXJlICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckRhdGEuZmlsdGVyO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY2xlYXIgdGhlIFJlbmRlclRhcmdldFxuICogQHJldHVybiB7UmVuZGVyVGFyZ2V0fVxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIGNsZWFyIClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy50ZXh0dXJlUG9vbC5wb3AoKSB8fCBuZXcgUmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyZXIuZ2wsIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0LCBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiAqIENPTlNULkZJTFRFUl9SRVNPTFVUSU9OKTtcbiAgICByZW5kZXJUYXJnZXQuZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcih0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyVGFyZ2V0O1xufTtcblxuLypcbiAqIFJldHVybnMgYSBSZW5kZXJUYXJnZXQgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1JlbmRlclRhcmdldH0gVGhlIFJlbmRlclRhcmdldCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5SZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0KVxue1xuICAgIHRoaXMudGV4dHVyZVBvb2wucHVzaCggcmVuZGVyVGFyZ2V0ICk7XG59O1xuXG4vKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2hhZGVyIHtTaGFkZXJ9IFRoZSBzaGFkZXIgdG8gdXBsb2FkXG4gKiBAcGFyYW0gaW5wdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBjbGVhciB0aGUgb3V0cHV0VGFyZ2V0XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHNoYWRlciwgaW5wdXRUYXJnZXQsIG91dHB1dFRhcmdldCwgY2xlYXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG91dHB1dFRhcmdldCk7XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICBvdXRwdXRUYXJnZXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHNoYWRlclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gQ2FuIHRoaXMgYmUgY2FjaGVkIGFuZCBub3QgYHRvQXJyYXlgZWQgZWFjaCBmcmFtZT9cbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG5cbiAgICAvL1RPRE8gY2FuIHRoaXMgYmUgb3B0aW1pc2VkP1xuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcbi8qXG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcbiovXG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBpbnB1dFRhcmdldC50ZXh0dXJlKTtcblxuICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbn07XG5cbi8qXG4gKiBDYWxjdWxhdGVzIHRoZSBtYXBwZWQgbWF0cml4XG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWFcbiAqIEBwYXJhbSBzcHJpdGUge1Nwcml0ZX0gdGhlIHRhcmdldCBzcHJpdGVcbiAqIEBwYXJhbSBvdXRwdXRNYXRyaXgge01hdHJpeH0gQGFsdmluXG4gKi9cbi8vIFRPRE8gcGxheWluZyBhcm91bmQgaGVyZS4uIHRoaXMgaXMgdGVtcG9yYXJ5IC0gKHdpbGwgZW5kIHVwIGluIHRoZSBzaGFkZXIpXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jYWxjdWxhdGVNYXBwZWRNYXRyaXggPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSwgc3ByaXRlLCBvdXRwdXRNYXRyaXgpXG57XG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gc3ByaXRlLndvcmxkVHJhbnNmb3JtLmNvcHkobWF0aC5NYXRyaXguVEVNUF9NQVRSSVgpLFxuICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICB2YXIgbWFwcGVkTWF0cml4ID0gb3V0cHV0TWF0cml4LmlkZW50aXR5KCk7XG5cbiAgICAvLyBzY2FsZS4uXG4gICAgdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCApO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKDEgLCByYXRpbyk7XG5cbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyB0ZXh0dXJlLndpZHRoKTtcbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gdGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0udHggLz0gdGV4dHVyZS53aWR0aCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICB3b3JsZFRyYW5zZm9ybS50eSAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0uaW52ZXJ0KCk7XG5cbiAgICBtYXBwZWRNYXRyaXgucHJlcGVuZCh3b3JsZFRyYW5zZm9ybSk7XG5cbiAgICAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIG1hcHBlZE1hdHJpeC50cmFuc2xhdGUoc3ByaXRlLmFuY2hvci54LCBzcHJpdGUuYW5jaG9yLnkpO1xuXG4gICAgcmV0dXJuIG1hcHBlZE1hdHJpeDtcblxuICAgIC8vIEtlZXBpbmcgdGhlIG9yZ2luYWwgYXMgYSByZW1pbmRlciB0byBtZSBvbiBob3cgdGhpcyB3b3JrcyFcbiAgICAvL1xuICAgIC8vIHZhciBtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvLyAvLyBzY2FsZS4uXG4gICAgLy8gdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgLy8gbS50cmFuc2xhdGUoZmlsdGVyQXJlYS54IC8gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgZmlsdGVyQXJlYS55IC8gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQpO1xuXG5cbiAgICAvLyBtLnNjYWxlKDEgLCByYXRpbyk7XG5cblxuICAgIC8vIHZhciB0cmFuc2Zvcm0gPSB3dC5jbG9uZSgpO1xuXG4gICAgLy8gdmFyIHRyYW5zbGF0ZVNjYWxlWCA9ICh0aGlzLnRleHR1cmVTaXplLndpZHRoIC8gNjIwKTtcbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gMzgwKTtcblxuICAgIC8vIHRyYW5zZm9ybS50eCAvPSA2MjAgKiB0cmFuc2xhdGVTY2FsZVg7XG4gICAgLy8gdHJhbnNmb3JtLnR5IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcblxuICAgIC8vIHRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIC8vIHRyYW5zZm9ybS5hcHBlbmQobSk7XG5cbiAgICAvLyAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgLy8gdHJhbnNmb3JtLnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIC8vIHJldHVybiB0cmFuc2Zvcm07XG59O1xuXG4vKlxuICogQ29uc3RyYWlucyB0aGUgZmlsdGVyIGFyZWEgdG8gdGhlIHRleHR1cmUgc2l6ZVxuICogQHBhcmFtIGZpbHRlckFyZWEge1JlY3RhbmdsZX0gVGhlIGZpbHRlciBhcmVhIHdlIHdhbnQgdG8gY2FwXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhcEZpbHRlckFyZWEgPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSlcbntcbiAgICBpZiAoZmlsdGVyQXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEud2lkdGggKz0gZmlsdGVyQXJlYS54O1xuICAgICAgICBmaWx0ZXJBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgKz0gZmlsdGVyQXJlYS55O1xuICAgICAgICBmaWx0ZXJBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggZmlsdGVyQXJlYS54ICsgZmlsdGVyQXJlYS53aWR0aCA+IHRoaXMudGV4dHVyZVNpemUud2lkdGggKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCA9IHRoaXMudGV4dHVyZVNpemUud2lkdGggLSBmaWx0ZXJBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnkgKyBmaWx0ZXJBcmVhLmhlaWdodCA+IHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLSBmaWx0ZXJBcmVhLnk7XG4gICAgfVxufTtcblxuLypcbiAqIFJlc2l6ZXMgYWxsIHRoZSByZW5kZXIgdGFyZ2V0cyBpbiB0aGUgcG9vbFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLnRleHR1cmVTaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLnJlc2l6ZSggd2lkdGgsIGhlaWdodCApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGZpbHRlciBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBmaWx0ZXIgc3RhY2suXG4gKlxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnF1YWQuZGVzdHJveSgpO1xuICAgIFxuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBudWxsO1xuICAgIHRoaXMub2Zmc2V0WSA9IDA7XG5cbiAgICAvLyBkZXN0cm95IHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHR1cmVQb29sLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlUG9vbCA9IG51bGw7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgQWxwaGFNYXNrRmlsdGVyID0gcmVxdWlyZSgnLi4vZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNYXNrTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICB0aGlzLmFscGhhTWFza1Bvb2wgPSBbXTtcbn1cblxuTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hc2tNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgaWYgKG1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBtYXNrIGZyb20gdGhlIG1hc2sgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucG9wU3ByaXRlTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTcHJpdGVNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdmFyIGFscGhhTWFza0ZpbHRlciA9IHRoaXMuYWxwaGFNYXNrUG9vbC5wb3AoKTtcblxuICAgIGlmICghYWxwaGFNYXNrRmlsdGVyKVxuICAgIHtcbiAgICAgICAgYWxwaGFNYXNrRmlsdGVyID0gW25ldyBBbHBoYU1hc2tGaWx0ZXIobWFza0RhdGEpXTtcbiAgICB9XG5cbiAgICBhbHBoYU1hc2tGaWx0ZXJbMF0ubWFza1Nwcml0ZSA9IG1hc2tEYXRhO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRhcmdldCwgYWxwaGFNYXNrRmlsdGVyKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKi9cbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTcHJpdGVNYXNrID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVycyA9IHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbC5wdXNoKGZpbHRlcnMpO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTdGVuY2lsTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaE1hc2sobWFza0RhdGEpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BNYXNrKG1hc2tEYXRhKTtcbn07XG5cbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1RleHR1cmVTaGFkZXInKSxcbiAgICBDb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhBdHRpYnMgPSAxMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG5cbi8vICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcbn1cblxuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaGFkZXJNYW5hZ2VyO1xudXRpbHMucGx1Z2luVGFyZ2V0Lm1peGluKFNoYWRlck1hbmFnZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlck1hbmFnZXI7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cblNoYWRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlIGNvcnJlY3RseSBhcyB0aGlzIHRlbmRzIHRvIHZhcnlcbiAgICB0aGlzLm1heEF0dGlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xuXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1heEF0dGliczsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRPRE8gLSBXaHkgYXJlIHRoZXNlIG5vdCBwbHVnaW5zPyBXZSBjYW4ndCBkZWNvdXBsZSBwcmltaXRpdmVzIHVubGVzcyB0aGV5IGFyZS4uLi5cbiAgICB0aGlzLmRlZmF1bHRTaGFkZXIgPSBuZXcgVGV4dHVyZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcyk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbmV3IENvbXBsZXhQcmltaXRpdmVTaGFkZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFRha2VzIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHBhcmFtZXRlcnMgYW5kIHVwbG9hZHMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXR0cmlicyB7YW55W119IGF0dHJpYnNcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0QXR0cmlicyA9IGZ1bmN0aW9uIChhdHRyaWJzKVxue1xuICAgIC8vIHJlc2V0IHRlbXAgc3RhdGVcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRlbXBBdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAodmFyIGEgaW4gYXR0cmlicylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbYV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSAhPT0gdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHNoYWRlci5cbiAqXG4gKiBAcGFyYW0gc2hhZGVyIHtQSVhJLlNoYWRlcn0gdGhlIHNoYWRlciB0byB1cGxvYWRcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0U2hhZGVyID0gZnVuY3Rpb24gKHNoYWRlcilcbntcbiAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRJZCA9PT0gc2hhZGVyLnVpZClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50SWQgPSBzaGFkZXIudWlkO1xuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5nbC51c2VQcm9ncmFtKHNoYWRlci5wcm9ncmFtKTtcbiAgICB0aGlzLnNldEF0dHJpYnMoc2hhZGVyLmF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0LlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBXZWJHTE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBudWxsO1xufVxuXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFza01hbmFnZXI7XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgbWFzayBzdGFjayB0aGF0IGlzIHVzZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICpcbiAqIEBwYXJhbSBzdGVuY2lsTWFza1N0YWNrIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9IFRoZSBtYXNrIHN0YWNrXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnNldE1hc2tTdGFjayA9IGZ1bmN0aW9uICggc3RlbmNpbE1hc2tTdGFjayApXG57XG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBpZiAoc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLiBAYWx2aW5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWwgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQuYXR0YWNoU3RlbmNpbEJ1ZmZlcigpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICBpZiAoc21zLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgZ2wuY2xlYXIoZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTtcbiAgICAgICAgc21zLnJldmVyc2UgPSB0cnVlO1xuICAgICAgICBzbXMuY291bnQgPSAwO1xuICAgIH1cblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucHVzaCh3ZWJHTERhdGEpO1xuXG4gICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5WRVJUKTtcblxuICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgIGlmIChzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgIH1cblxuICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSBsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLktFRVApO1xuXG4gICAgc21zLmNvdW50Kys7XG59O1xuXG4vKipcbiAqIFRPRE8gdGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSFcbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuYmluZEdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgLy9pZiAodGhpcy5fY3VycmVudEdyYXBoaWNzID09PSBncmFwaGljcylyZXR1cm47XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBiaW5kIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0zZnYoc2hhZGVyLnVuaWZvcm1zLmNvbG9yLl9sb2NhdGlvbiwgd2ViR0xEYXRhLmNvbG9yKTtcblxuICAgICAgICBnbC51bmlmb3JtMWYoc2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSk7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDQgKiAyLCAwKTtcblxuICAgICAgICAvLyBub3cgZG8gdGhlIHJlc3QuLlxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAqL1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvL3RoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5hY3RpdmF0ZVByaW1pdGl2ZVNoYWRlcigpO1xuLy8gICAgICAgIHNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wcmltaXRpdmVTaGFkZXI7XG4gICAgICAgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG5cbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuLy8gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuXG4gICAgICAvKiAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7Ki9cbiAgICB9XG59O1xuXG4vKipcbiAqIFRPRE8gQGFsdmluXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIHNtcyA9IHRoaXMuc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucG9wKCk7XG5cbiAgICBzbXMuY291bnQtLTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIC8vIHRoZSBzdGFjayBpcyBlbXB0eSFcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgICAgIHRoaXMuYmluZEdyYXBoaWNzKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcblxuICAgICAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRyYXcgYSBxdWFkIHRvIGluY3JlbWVudC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgICAgICAgICAvLyBkcmF3IHRoZSB0cmlhbmdsZSBzdHJpcCFcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCArPSAyO1xuXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKSwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgLy8gIGNvbnNvbGUubG9nKFwiPDw+PlwiKVxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIChsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cblxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIG1hc2sgc3RhY2suXG4gKlxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2sgPSBudWxsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfSBUaGUgbWFzayBkYXRhIHN0cnVjdHVyZSB0byB1c2VcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIFxuICAgIC8vVE9ETyBGSVhcbiAgICBpZiAobWFza0RhdGEuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MudXBkYXRlR3JhcGhpY3MobWFza0RhdGEsIHRoaXMucmVuZGVyZXIuZ2wpO1xuICAgIH1cblxuICAgIGlmICghbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFN0ZW5jaWwobWFza0RhdGEsIG1hc2tEYXRhLl93ZWJHTFt0aGlzLnJlbmRlcmVyLmdsLmlkXS5kYXRhWzBdKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIodGhpcy5yZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcblxuICAgIHRoaXMucG9wU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuIiwiLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLm9uKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xufVxuXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTE1hbmFnZXI7XG5cbi8qKlxuICogR2VuZXJpYyBtZXRob2QgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbldlYkdMTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblx0Ly8gZG8gc29tZSBjb2RlcyBpbml0IVxufTtcblxuLyoqXG4gKiBHZW5lcmljIGRlc3Ryb3kgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlbmRlcmVyLm9mZignY29udGV4dCcsIHRoaXMub25Db250ZXh0Q2hhbmdlLCB0aGlzKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCcuL1NoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBjb21wbGV4IHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQ29tcGxleFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyBjb2xvcjsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoY29sb3IgKiBhbHBoYSAqIHRpbnQsIGFscGhhKTsnLC8vXCIgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIGNvbG9yOiAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsMCwwXSB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB0aW50OiAgIHsgdHlwZTogJzNmJywgdmFsdWU6IFswLCAwLCAwXSB9LFxuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFDb2xvcjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQmFzZSBzaGFkZXIgY2xhc3MgZm9yIFBJWEkgbWFuYWdlZCBzaGFkZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbdW5pZm9ybXNdIHtvYmplY3R9IFVuaWZvcm1zIGZvciB0aGlzIHNoYWRlci5cbiAqIEBwYXJhbSBbYXR0cmlidXRlc10ge29iamVjdH0gQXR0cmlidXRlcyBmb3IgdGhpcyBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIFNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcylcbntcbiAgICBpZiAoIXZlcnRleFNyYyB8fCAhZnJhZ21lbnRTcmMpXG4gICAge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXhpLmpzIEVycm9yLiBTaGFkZXIgcmVxdWlyZXMgdmVydGV4U3JjIGFuZCBmcmFnbWVudFNyYycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5nbCA9IHNoYWRlck1hbmFnZXIucmVuZGVyZXIuZ2w7XG5cbiAgICAvL1RPRE8gbWF5YmUgd2Ugc2hvdWxkIHBhc3MgcmVuZGVyZXIgcmF0aGVyIHRoYW4gc2hhZGVyIG1hbmdlcj8/IGZvb2QgZm9yIHRob3VnaHQuLlxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IHNoYWRlck1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgcHJvZ3JhbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUHJvZ3JhbX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaWZvcm1zIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhdHRyaWJ1dGVzIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50ZXJcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlciBhcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmM7XG5cbiAgICB0aGlzLmluaXQoKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHNoYWRlciBhbmQgdXNlcyBpdFxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbXBpbGUoKTtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy51bmlmb3JtcykpO1xuICAgIHRoaXMuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKSk7XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSB1bmlmb3JtIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgdW5pZm9ybXMgdG8gY2FjaGVcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnVuaWZvcm1zW2tleXNbaV1dLl9sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWNoZXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgYXR0cmlidXRlIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgYXR0cmlidXRlcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlQXR0cmlidXRlTG9jYXRpb25zID0gZnVuY3Rpb24gKGtleXMpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleXNbaV1dID0gdGhpcy5nbC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGtleXNbaV0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgbmVlZGVkIGFueW1vcmUuLi5cblxuICAgIC8vIEJlZ2luIHdvcnN0IGhhY2sgZXZhIC8vXG5cbiAgICAvLyBXSFk/Pz8gT05MWSBvbiBteSBjaHJvbWUgcGl4ZWwgdGhlIGxpbmUgYWJvdmUgcmV0dXJucyAtMSB3aGVuIHVzaW5nIGZpbHRlcnM/XG4gICAgLy8gbWF5YmUgaXRzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnbCBjb250ZXh0LlxuICAgIC8vIEknbSBjb252aW5jZWQgdGhpcyBpcyBhIGJ1ZyBpbiB0aGUgY2hyb21lIGJyb3dzZXIgYXMgdGhlcmUgaXMgTk8gcmVhc29uIHdoeSB0aGlzIHNob3VsZCBiZSByZXR1cm5pbmcgLTEgZXNwZWNpYWxseSBhcyBpdCBvbmx5IG1hbmlmZXN0cyBvbiBteSBjaHJvbWUgcGl4ZWxcbiAgICAvLyBJZiB0aGVyZXMgYW55IHdlYkdMIHBlb3BsZSB0aGF0IGtub3cgd2h5IGNvdWxkIGhhcHBlbiBwbGVhc2UgaGVscCA6KVxuICAgIC8vIGlmICh0aGlzLmF0dHJpYnV0ZXMuYUNvbG9yID09PSAtMSl7XG4gICAgLy8gICAgIHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPSAyO1xuICAgIC8vIH1cblxuICAgIC8vIEVuZCB3b3JzdCBoYWNrIGV2YSAvL1xufTtcblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQgY3JlYXRlcyB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19XG4gKi9cblNoYWRlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHZhciBnbFZlcnRTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuVkVSVEVYX1NIQURFUiwgdGhpcy52ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuRlJBR01FTlRfU0hBREVSLCB0aGlzLmZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuICh0aGlzLnByb2dyYW0gPSBwcm9ncmFtKTtcbn07XG5cbi8qKlxuKiBBZGRzIGEgbmV3IHVuaWZvcm1cbipcbiogQHBhcmFtIHVuaWZvcm0ge29iamVjdH0gdGhlIG5ldyB1bmlmb3JtIHRvIGF0dGFjaFxuKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgbG9jYXRpb24gPSB1bmlmb3JtLl9sb2NhdGlvbixcbiAgICAgICAgdmFsdWUgPSB1bmlmb3JtLnZhbHVlLFxuICAgICAgICBnbCA9IHRoaXMuZ2wsXG4gICAgICAgIGksIGlsO1xuXG4gICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIHNpbmdsZSBpbnQgdmFsdWVcbiAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGZsb2F0IHZhbHVlXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBjYXNlICcxZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSgyKSBvciBKUyBBcnJyYXlcbiAgICAgICAgY2FzZSAnMmYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDMpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICczZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDQpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgMkQgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YyJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDNEIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2Myc6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSA0RCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjQnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMWl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMml2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnNGl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20yJzpcbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgIGNhc2UgJ01hdHJpeDJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB1bmlmb3JtLnRyYW5zcG9zZSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20zJzpcbiAgICAgICAgY2FzZSAnbWF0Myc6XG4gICAgICAgIGNhc2UgJ01hdHJpeDNmdic6XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICBjYXNlICdtYXQ0JzpcbiAgICAgICAgY2FzZSAnTWF0cml4NGZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIENvbG9yIFZhbHVlXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgaW50ZWdlcnMgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdjEnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAyRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yydic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgyICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAyXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDIgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYXJyYXkgb2YgM0QgUG9pbnQgb2JqZWN0c1xuICAgICAgICBjYXNlICd2M3YnOlxuICAgICAgICAgICAgaWYgKCF1bmlmb3JtLl9hcnJheSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMyAqIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlsID0gdmFsdWUubGVuZ3RoOyBpIDwgaWw7ICsraSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogM10gICAgICAgPSB2YWx1ZVtpXS54O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzICsgMV0gICA9IHZhbHVlW2ldLnk7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAyXSAgID0gdmFsdWVbaV0uejtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiA0RCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Y0dic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg0ICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0XSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDJdICAgPSB2YWx1ZVtpXS56O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgM10gICA9IHZhbHVlW2ldLnc7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gUElYSS5UZXh0dXJlXG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuXG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUgfHwgIXVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGlzIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xbJ1RFWFRVUkUnICsgdGhpcy50ZXh0dXJlQ291bnRdKTtcblxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXTtcblxuICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdGV4dHVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9uZS4uXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgICAgICAgICAgLy8gc2V0IHVuaWZvcm0gdG8gdGV4dHVyZSBpbmRleFxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0uX2xvY2F0aW9uLCB0aGlzLnRleHR1cmVDb3VudCk7XG5cbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBuZXh0IHRleHR1cmUgaWRcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgU2hhZGVyIFdhcm5pbmc6IFVua25vd24gdW5pZm9ybSB0eXBlOiAnICsgdW5pZm9ybS50eXBlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNoYWRlciB1bmlmb3JtIHZhbHVlcy5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm1zID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy51bmlmb3JtcylcbiAgICB7XG4gICAgICAgIHRoaXMuc3luY1VuaWZvcm0odGhpcy51bmlmb3Jtc1trZXldKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSW5pdGlhbGlzZXMgYSBTYW1wbGVyMkQgdW5pZm9ybSAod2hpY2ggbWF5IG9ubHkgYmUgYXZhaWxhYmxlIGxhdGVyIG9uIGFmdGVyIGluaXRVbmlmb3JtcyBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBsb2FkZWQpXG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXRTYW1wbGVyMkQgPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbiAgICBpZiAodW5pZm9ybS50ZXh0dXJlRGF0YSlcbiAgICB7XG5cbiAgICAgICAgLy9UT0RPIG1vdmUgdGhpcy4uLlxuICAgICAgICB2YXIgZGF0YSA9IHVuaWZvcm0udGV4dHVyZURhdGE7XG5cbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuXG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBsaWVkQWxwaGEpO1xuICAgICAgICAvLyBHTFRleHR1cmUgPSBtYWcgbGluZWFyLCBtaW4gbGluZWFyX21pcG1hcF9saW5lYXIsIHdyYXAgcmVwZWF0ICsgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIC8vIEdMVGV4dHVyZUxpbmVhciA9IG1hZy9taW4gbGluZWFyLCB3cmFwIGNsYW1wXG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3RSZXBlYXQgPSBtYWcvbWluIE5FQVJFU1QsIHdyYXAgcmVwZWF0XG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3QgPSBtYWcvbWluIG5lYXJlc3QsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gQXVkaW9UZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCA1MTIsIGhlaWdodCAyLCBib3JkZXIgMFxuICAgICAgICAvLyBLZXlUZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCAyNTYsIGhlaWdodCAyLCBib3JkZXIgMFxuXG4gICAgICAgIC8vICBtYWdGaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcbiAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxuXG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZGF0YS5sdW1pbmFuY2UgPyBnbC5MVU1JTkFOQ0UgOiBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLnNvdXJjZSk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGRhdGEubWFnRmlsdGVyID8gZGF0YS5tYWdGaWx0ZXIgOiBnbC5MSU5FQVIgKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSApO1xuXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGRhdGEud3JhcFQgPyBkYXRhLndyYXBUIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyTWFuYWdlci5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHNoYWRlci5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5nbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmdsID0gbnVsbDtcbiAgICB0aGlzLnVuaWZvcm1zID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSBudWxsO1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBudWxsO1xufTtcblxuU2hhZGVyLnByb3RvdHlwZS5fZ2xDb21waWxlID0gZnVuY3Rpb24gKHR5cGUsIHNyYylcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICB0aGlzLmdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgdGhpcy5nbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cbiAgICBpZiAoIXRoaXMuZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgdGhpcy5nbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCBjdXN0b21Vbmlmb3JtcywgY3VzdG9tQXR0cmlidXRlcylcbntcbiAgICB2YXIgdW5pZm9ybXMgPSB7XG5cbiAgICAgICAgdVNhbXBsZXI6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogMCB9LFxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxXSkgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVW5pZm9ybXMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciB1IGluIGN1c3RvbVVuaWZvcm1zKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bmlmb3Jtc1t1XSA9IGN1c3RvbVVuaWZvcm1zW3VdO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgYVZlcnRleFBvc2l0aW9uOiAgICAwLFxuICAgICAgICBhVGV4dHVyZUNvb3JkOiAgICAgIDAsXG4gICAgICAgIGFDb2xvcjogICAgICAgICAgICAgMFxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tQXR0cmlidXRlcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGEgaW4gY3VzdG9tQXR0cmlidXRlcylcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlc1thXSA9IGN1c3RvbUF0dHJpYnV0ZXNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYWdtZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IFRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgU2hhZGVyLmNhbGwodGhpcywgc2hhZGVyTWFuYWdlciwgdmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihnbClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7Ly8sIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKTtcblxufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi4vbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQmFzZSBmb3IgYSBjb21tb24gb2JqZWN0IHJlbmRlcmVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzeXN0ZW0gcmVuZGVyZXIgcGx1Z2luLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gT2JqZWN0UmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufVxuXG5cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYmplY3RSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0UmVuZGVyZXI7XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZW5kZXJlciBhbmQgc2V0cyB0aGUgc2hhZGVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIHNldCB0aGUgc2hhZGVyLi5cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHJlbmRlcmVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xufTtcblxuLyoqXG4gKiBmbHVzaGVzXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIGZsdXNoIVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gcmVuZGVyIHRoZSBvYmplY3Rcbn07XG4iLCIvKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSBxdWFkXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFRoZSBnbCBjb250ZXh0IGZvciB0aGlzIHF1YWQgdG8gdXNlLlxuICovXG5mdW5jdGlvbiBRdWFkKGdsKVxue1xuICAgIC8qXG4gICAgICogdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4vLyAgICB0aGlzLnRleHR1cmVzID0gbmV3IFRleHR1cmVVdnMoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAwLDAsXG4gICAgICAgIDIwMCwwLFxuICAgICAgICAyMDAsMjAwLFxuICAgICAgICAwLDIwMFxuICAgIF0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgcXVhZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMSwwLFxuICAgICAgICAxLDEsXG4gICAgICAgIDAsMVxuICAgIF0pO1xuXG4vLyAgICB2YXIgd2hpdGUgPSAoMHhGRkZGRkYgPj4gMTYpICsgKDB4RkZGRkZGICYgMHhmZjAwKSArICgoMHhGRkZGRkYgJiAweGZmKSA8PCAxNikgKyAoMSAqIDI1NSA8PCAyNCk7XG4gICAgLy9UT0RPIGNvbnZlcnQgdGhpcyB0byBhIDMyIHVuc2lnbmVkIGludCBhcnJheVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBjb21wb25lbnRzIG9mIHRoZSB0cmlhbmdsZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxXG4gICAgXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbXG4gICAgICAgIDAsIDEsIDIsIDAsIDMsIDJcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSB2ZXJ0ZXggYnVmZmVyXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSBpbmRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDggKyAxNikgKiA0LCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnVwbG9hZCgpO1xufVxuXG5RdWFkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFF1YWQ7XG5cbi8qKlxuICogTWFwcyB0d28gUmVjdGFuZ2xlIHRvIHRoZSBxdWFkXG4gKiBAcGFyYW0gcmVjdCB7UElYSS5SZWN0YW5nbGV9IHRoZSBmaXJzdCByZWN0YW5nbGVcbiAqIEBwYXJhbSByZWN0MiB7UElYSS5SZWN0YW5nbGV9IHRoZSBzZWNvbmQgcmVjdGFuZ2xlXG4gKi9cblF1YWQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKHJlY3QsIHJlY3QyKVxue1xuICAgIHZhciB4ID0gMDsgLy9yZWN0Mi54IC8gcmVjdC53aWR0aDtcbiAgICB2YXIgeSA9IDA7IC8vcmVjdDIueSAvIHJlY3QuaGVpZ2h0O1xuXG4gICAgdGhpcy51dnNbMF0gPSB4O1xuICAgIHRoaXMudXZzWzFdID0geTtcblxuICAgIHRoaXMudXZzWzJdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1szXSA9IHk7XG5cbiAgICB0aGlzLnV2c1s0XSA9IHggKyByZWN0Mi53aWR0aCAvIHJlY3Qud2lkdGg7XG4gICAgdGhpcy51dnNbNV0gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1s2XSA9IHg7XG4gICAgdGhpcy51dnNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICAvLy8gLS0tLS1cbiAgICB4ID0gcmVjdDIueDtcbiAgICB5ID0gcmVjdDIueTtcblxuICAgIHRoaXMudmVydGljZXNbMF0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbMV0gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1syXSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzNdID0geTtcblxuICAgIHRoaXMudmVydGljZXNbNF0gPSB4ICsgcmVjdDIud2lkdGg7XG4gICAgdGhpcy52ZXJ0aWNlc1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQ7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzZdID0geDtcbiAgICB0aGlzLnZlcnRpY2VzWzddID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXIgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuUXVhZC5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvLyBUT0RPIGNvdWxkIHByb2JhYmx5IGJlIHB1c2hlZCBpbnRvIG9uZSB1cGxvYWQhXG4gICAgZ2wuYmluZEJ1ZmZlciggZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlciApO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMudmVydGljZXMpO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDggKiA0LCB0aGlzLnV2cyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgKDggKyA4KSAqIDQsIHRoaXMuY29sb3JzKTtcbn07XG5cblF1YWQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xuXG5cbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgICAgIFxuICAgIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcbiAgICBHTEZyYW1lYnVmZmVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xGcmFtZWJ1ZmZlcixcbiAgICBcbiAgICBTdGVuY2lsTWFza1N0YWNrID0gcmVxdWlyZSgnLi9TdGVuY2lsTWFza1N0YWNrJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIGhvcml6b250YWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgdmVydGljYWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAqIEBwYXJhbSByb290IHtib29sZWFufSBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gKi9cbnZhciBSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uLCByb290KVxue1xuICAgIC8vVE9ETyBSZXNvbHV0aW9uIGNvdWxkIGdvIGhlcmUgKCBlZyBsb3cgcmVzIGJsdXJzIClcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvLyBuZXh0IHRpbWUgdG8gY3JlYXRlIGEgZnJhbWUgYnVmZmVyIGFuZCB0ZXh0dXJlXG5cbiAgICAvKipcbiAgICAgKiBBIGZyYW1lIGJ1ZmZlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xGcmFtZUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJDb2xvciA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBvYmplY3QgYXMgYSByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9iamVjdCdzIHRyYW5zZm9ybVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5mcmFtZSA9IG51bGw7XG4gICAgXG4gICAgdGhpcy5kZWZhdWx0RnJhbWUgPSBuZXcgUElYSS5SZWN0YW5nbGUoKTtcbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBudWxsO1xuICAgIHRoaXMuc291cmNlRnJhbWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHN0ZW5jaWwgYnVmZmVyIHN0b3JlcyBtYXNraW5nIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlckJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgc3RlbmNpbCBtYXNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFza1N0YWNrfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG5ldyBTdGVuY2lsTWFza1N0YWNrKCk7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZXMgZmlsdGVyIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6dGhpcyxcbiAgICAgICAgICAgIGZpbHRlcjpbXSxcbiAgICAgICAgICAgIGJvdW5kczp0aGlzLnNpemVcbiAgICAgICAgfVxuICAgIF07XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVFxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gR0xGcmFtZWJ1ZmZlci5jcmVhdGVSR0JBKGdsLCAxMDAsIDEwMCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBBIGZyYW1lIGJ1ZmZlciBuZWVkcyBhIHRhcmdldCB0byByZW5kZXIgdG8uLlxuICAgICAgICAgICAgY3JlYXRlIGEgdGV4dHVyZSBhbmQgYmluZCBpdCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgICovXG4gICAgICAgIFxuXG4gICAgICAgLy8gVE9ETyBjaGFuZ2UhXG4gICAgICAgIC8vIHRoaXMgaXMgdXNlZCBieSB0aGUgYmFzZSB0ZXh0dXJlXG4gICAgICAgIHRoaXMudGV4dHVyZSA9IHRoaXMuZnJhbWVCdWZmZXIudGV4dHVyZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbWFrZSBpdCBhIG51bGwgZnJhbWVidWZmZXIuLlxuICAgICAgICB0aGlzLmZyYW1lQnVmZmVyLmZyYW1lYnVmZmVyID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn07XG5cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZW5kZXJUYXJnZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRhcmdldDtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpbHRlciB0ZXh0dXJlLlxuICpcbiAqIEBwYXJhbSBbYmluZD1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCB3ZSBiaW5kIG91ciBmcmFtZWJ1ZmZlciBiZWZvcmUgY2xlYXJpbmc/XG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbihjbGVhckNvbG9yKVxue1xuICAgIHZhciBjYyA9IGNsZWFyQ29sb3IgfHwgdGhpcy5jbGVhckNvbG9yXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5jbGVhcihjY1swXSxjY1sxXSxjY1syXSxjY1szXSkvL3IsZyxiLGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmF0dGFjaFN0ZW5jaWxCdWZmZXIgPSBmdW5jdGlvbigpXG57XG4gICAgLy9UT0RPIGNoZWNrIGlmIHN0ZW5jaWwgaXMgZG9uZT9cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgaXMgdXNlZCBmb3IgbWFza2luZyBpbiBwaXhpXG4gICAgICogbGV0cyBjcmVhdGUgb25lIGFuZCB0aGVuIGFkZCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgKi9cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZW5hYmxlU3RlbmNpbCgpO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXdwb3J0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIC8vVE9PRCByZWZhY3RvciB1c2FnZSBvZiBmcmFtZS4uXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIuYmluZCgpO1xuXG4gICAgdGhpcy5kZXN0aW5hdGlvbkZyYW1lID0gZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgfHwgdGhpcy5kZWZhdWx0RnJhbWU7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IHRoaXMuc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggdGhpcy5kZXN0aW5hdGlvbkZyYW1lLCB0aGlzLnNvdXJjZUZyYW1lICk7XG5cbiAgICBpZih0aGlzLnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5hcHBlbmQodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIGlmKHRoaXMuZGVzdGluYXRpb25GcmFtZSAhPT0gdGhpcy5zb3VyY2VGcmFtZSlcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgICAgICBnbC5zY2lzc29yKHRoaXMuZGVzdGluYXRpb25GcmFtZS54LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmRpc2FibGUoZ2wuU0NJU1NPUl9URVNUKTtcbiAgICB9XG5cblxuICAgIC8vIFRPRE8gLSBkb2VzIG5vdCBuZWVkIHRvIGJlIHVwZGF0ZWQgYWxsIHRoZSB0aW1lPz9cbiAgICBnbC52aWV3cG9ydCh0aGlzLmRlc3RpbmF0aW9uRnJhbWUueCx0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uKTtcblxuXG59O1xuXG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmFzZWQgb24gYSBwcm9qZWN0aW9uIGZyYW1lICh3aGljaCBpcyBhIHJlY3RhbmdsZSlcbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2FsY3VsYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbkZyYW1lLCBzb3VyY2VGcmFtZSlcbntcbiAgICB2YXIgcG0gPSB0aGlzLnByb2plY3Rpb25NYXRyaXg7XG5cbiAgICBzb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IGRlc3RpbmF0aW9uRnJhbWU7XG5cbiAgICBwbS5pZGVudGl0eSgpO1xuXG4gICAgLy8gVE9ETzogbWFrZSBkZXN0IHNjYWxlIHNvdXJjZVxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAxIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gLTEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAtMSAvIGRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0KjI7XG5cbiAgICAgICAgcG0udHggPSAtMSAtIHNvdXJjZUZyYW1lLnggKiBwbS5hO1xuICAgICAgICBwbS50eSA9IDEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVzaXplcyB0aGUgdGV4dHVyZSB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge051bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGhlaWdodCB7TnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgdGV4dHVyZVxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHdpZHRoID0gd2lkdGggfCAwO1xuICAgIGhlaWdodCA9IGhlaWdodCB8IDA7XG5cbiAgICBpZiAodGhpcy5zaXplLndpZHRoID09PSB3aWR0aCAmJiB0aGlzLnNpemUuaGVpZ2h0ID09PSBoZWlnaHQpIFxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2l6ZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuc2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICB0aGlzLmRlZmF1bHRGcmFtZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuZGVmYXVsdEZyYW1lLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIucmVzaXplKHdpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBoZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuICAgIFxuICAgIHZhciBwcm9qZWN0aW9uRnJhbWUgPSB0aGlzLmZyYW1lIHx8IHRoaXMuc2l6ZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSByZW5kZXIgdGFyZ2V0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIHRoaXMuZnJhbWVCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBTdGVuY2lsTWFza1N0YWNrKClcbntcblx0LyoqXG4gICAgICogVGhlIGFjdHVhbCBzdGFja1xuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsU3RhY2sgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQGFsdmluXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb3VudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY291bnQgPSAwO1xufVxuXG5TdGVuY2lsTWFza1N0YWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0ZW5jaWxNYXNrU3RhY2s7XG5tb2R1bGUuZXhwb3J0cyA9IFN0ZW5jaWxNYXNrU3RhY2s7XG4iLCJDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogTWFwcyBnbCBibGVuZCBjb21iaW5hdGlvbnMgdG8gV2ViR0xcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpKGdsLCBvYmplY3QpXG57XG4gICAgb2JqZWN0ID0gb2JqZWN0IHx8IHt9O1xuXG4gICAgLy9UT0RPIC0gcHJlbXVsdGlwbHkgYWxwaGEgd291bGQgYmUgZGlmZmVyZW50LlxuICAgIC8vYWRkIGEgYm9vbGVhbiBmb3IgdGhhdCFcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQUREXSAgICAgICAgICAgPSBbZ2wuU1JDX0FMUEhBLCBnbC5EU1RfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9IFtnbC5EU1RfQ09MT1IsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5TQ1JFRU5dICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLk9ORV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRBUktFTl0gICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0JVUk5dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRJRkZFUkVOQ0VdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aTtcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcblx0b2JqZWN0PSBvYmplY3QgfHwge307XG5cbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5QT0lOVFNdICAgICAgICAgPSBnbC5QT0lOVFM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORVNdICAgICAgICAgID0gZ2wuTElORVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9MT09QXSAgICAgID0gZ2wuTElORV9MT09QO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLkxJTkVfU1RSSVBdICAgICA9IGdsLkxJTkVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVTXSAgICAgID0gZ2wuVFJJQU5HTEVTO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXSA9IGdsLlRSSUFOR0xFX1NUUklQO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX0ZBTl0gICA9IGdsLlRSSUFOR0xFX0ZBTjtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBTcHJpdGUgb2JqZWN0IGlzIHRoZSBiYXNlIGZvciBhbGwgdGV4dHVyZWQgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCB0byB0aGUgc2NyZWVuXG4gKlxuICogQSBzcHJpdGUgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhbiBpbWFnZSBsaWtlIHRoaXM6XG4gKlxuICogYGBganNcbiAqIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgZm9yIHRoaXMgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZSh0ZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFuY2hvciBzZXRzIHRoZSBvcmlnaW4gcG9pbnQgb2YgdGhlIHRleHR1cmUuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgMCwwIHRoaXMgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0XG4gICAgICogU2V0dGluZyB0aGUgYW5jaG9yIHRvIDAuNSwwLjUgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgY2VudGVyZWRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMSwxIHdvdWxkIG1lYW4gdGhlIHRleHR1cmUncyBvcmlnaW4gcG9pbnQgd2lsbCBiZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmFuY2hvciA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUgKHRoaXMgaXMgaW5pdGlhbGx5IHNldCBieSB0aGUgdGV4dHVyZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQSB2YWx1ZSBvZiAweEZGRkZGRiB3aWxsIHJlbW92ZSBhbnkgdGludCBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2hhZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgc3ByaXRlLiBTZXQgdG8gbnVsbCB0byByZW1vdmUgYSBjdXJyZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJ8UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgY2FjaGVkIHZhbHVlIG9mIHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvLyBjYWxsIHRleHR1cmUgc2V0dGVyXG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBUZXh0dXJlLkVNUFRZO1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZVxuICAgIHRoaXMudmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblNwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLngpICogdGhpcy50ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzaWduID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLngpIHx8IDE7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBzaWduICogdmFsdWUgLyB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgTWF0aC5hYnModGhpcy5zY2FsZS55KSAqIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHByaXZhdGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBzbyBpZiBfd2lkdGggaXMgMCB0aGVuIHdpZHRoIHdhcyBub3Qgc2V0Li5cbiAgICBpZiAodGhpcy5fd2lkdGgpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnggPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgKiB0aGlzLl93aWR0aCAvIHRoaXMudGV4dHVyZS5mcmFtZS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zY2FsZS55ID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLnkpICogdGhpcy5faGVpZ2h0IC8gdGhpcy50ZXh0dXJlLmZyYW1lLmhlaWdodDtcbiAgICB9XG59O1xuXG5TcHJpdGUucHJvdG90eXBlLmNhY2x1bGF0ZVZlcnRpY2VzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgIHd0ID0gdGhpcy50cmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIGEgPSB3dC5hLCBiID0gd3QuYiwgYyA9IHd0LmMsIGQgPSB3dC5kLCB0eCA9IHd0LnR4LCB0eSA9IHd0LnR5LFxuICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhLFxuICAgICAgICB3MCwgdzEsIGgwLCBoMSxcbiAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcbiAgICAgICAgXG4gICAgaWYgKHRyaW0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgYW5kIGlzIG5vdCBhIHRpbGluZ3Nwcml0ZSB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgdzEgPSB0cmltLnggLSB0aGlzLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICBoMSA9IHRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcbiAgICB9XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMF0gPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzFdID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMl0gPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzNdID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzRdID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs1XSA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzZdID0gYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs3XSA9IGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG5cbn1cblxuLyoqXG4qXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy50cmFuc2Zvcm0udXBkYXRlZCB8fCB0aGlzLnRleHR1cmVEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZURpcnR5ID0gZmFsc2U7XG4gICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuICAgIH1cbiAgICBcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFNwcml0ZSBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcbiAgICAgICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5YLFxuICAgICAgICAgICAgbWF4WCxcbiAgICAgICAgICAgIG1pblksXG4gICAgICAgICAgICBtYXhZLFxuICAgICAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YTtcblxuICAgICAgICB2YXIgeDEgPSB2ZXJ0ZXhEYXRhWzBdXG4gICAgICAgIHZhciB5MSA9IHZlcnRleERhdGFbMV1cblxuICAgICAgICB2YXIgeDIgPSB2ZXJ0ZXhEYXRhWzJdXG4gICAgICAgIHZhciB5MiA9IHZlcnRleERhdGFbM11cblxuICAgICAgICB2YXIgeDMgPSB2ZXJ0ZXhEYXRhWzRdXG4gICAgICAgIHZhciB5MyA9IHZlcnRleERhdGFbNV1cblxuICAgICAgICB2YXIgeDQgPSB2ZXJ0ZXhEYXRhWzZdXG4gICAgICAgIHZhciB5NCA9IHZlcnRleERhdGFbN11cblxuICAgICAgICBtaW5YID0geDE7XG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkxO1xuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MTtcbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTE7XG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoaWxkcmVuXG4gICAgICAgIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGRCb3VuZHMgPSB0aGlzLmNvbnRhaW5lckdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICB3MCA9IGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICB3MSA9IGNoaWxkQm91bmRzLnggKyBjaGlsZEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGgwID0gY2hpbGRCb3VuZHMueTtcbiAgICAgICAgICAgIGgxID0gY2hpbGRCb3VuZHMueSArIGNoaWxkQm91bmRzLmhlaWdodDtcblxuICAgICAgICAgICAgbWluWCA9IChtaW5YIDwgdzApID8gbWluWCA6IHcwO1xuICAgICAgICAgICAgbWluWSA9IChtaW5ZIDwgaDApID8gbWluWSA6IGgwO1xuXG4gICAgICAgICAgICBtYXhYID0gKG1heFggPiB3MSkgPyBtYXhYIDogdzE7XG4gICAgICAgICAgICBtYXhZID0gKG1heFkgPiBoMSkgPyBtYXhZIDogaDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fYm91bmRzLnggPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHRoaXMuX2JvdW5kcy55ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG4gICAgdGhpcy5fYm91bmRzLndpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICByZXR1cm4gdGhpcy5fYm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgc3ByaXRlXG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cblNwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLnRleHR1cmUuY3JvcC53aWR0aCA8PSAwIHx8IHRoaXMudGV4dHVyZS5jcm9wLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vICBJZ25vcmUgbnVsbCBzb3VyY2VzXG4gICAgaWYgKHRoaXMudGV4dHVyZS52YWxpZClcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgICAgIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgIGR4LFxuICAgICAgICAgICAgZHksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDtcblxuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgICAgIC8vIElmIHNtb290aGluZ0VuYWJsZWQgaXMgc3VwcG9ydGVkIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgc21vb3RoaW5nIHByb3BlcnR5IGZvciB0aGlzIHRleHR1cmVcbiAgICAgICAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSO1xuICAgICAgICBpZiAocmVuZGVyZXIuc21vb3RoUHJvcGVydHkgJiYgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gIT09IHNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldID0gc21vb3RoaW5nRW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHRyaW1tZWQgd2Ugb2Zmc2V0IGJ5IHRoZSB0cmltIHgveSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgZnJhbWUgZGltZW5zaW9uc1xuXG4gICAgICAgIGlmKHRleHR1cmUucm90YXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICBcbiAgICAgICAgICAgIGR4ICs9IHdpZHRoO1xuXG4gICAgICAgICAgICB3dC50eCA9IGR5ICogd3QuYSArIGR4ICogd3QuYyArIHd0LnR4O1xuICAgICAgICAgICAgd3QudHkgPSBkeSAqIHd0LmIgKyBkeCAqIHd0LmQgKyB3dC50eTtcblxuICAgICAgICAgICAgdmFyIHRlbXAgPSB3dC5hO1xuICAgICAgICAgICAgd3QuYSAgPSAtd3QuYztcbiAgICAgICAgICAgIHd0LmMgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIHRlbXAgPSB3dC5iO1xuICAgICAgICAgICAgd3QuYiAgPSAtd3QuZDtcbiAgICAgICAgICAgIHd0LmQgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIC8vIHRoZSBhbmNob3IgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFib3ZlLCBzbyBsZXRzIHNldCBpdCB0byB6ZXJvXG4gICAgICAgICAgICBkeCA9IDA7XG4gICAgICAgICAgICBkeSA9IDA7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIC8vIEFsbG93IGZvciBwaXhlbCByb3VuZGluZ1xuICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgKHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwLFxuICAgICAgICAgICAgICAgICh3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHggPSBkeCB8IDA7XG4gICAgICAgICAgICBkeSA9IGR5IHwgMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICB3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjbGVhbiB1cCBjYWNoaW5nIC0gaG93IHRvIGNsZWFuIHVwIHRoZSBjYWNoZXM/XG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC55ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgc3ByaXRlIGFuZCBvcHRpb25hbGx5IGl0cyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95VGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95VGV4dHVyZSwgZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5hbmNob3IgPSBudWxsO1xuXG4gICAgaWYgKGRlc3Ryb3lUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcblxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zLi5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICovXG5TcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgU3ByaXRlKFRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXInKSxcbiAgICBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9jcmVhdGVJbmRpY2VzRm9yUXVhZHMnKSxcbiAgICBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4vZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgZ2xDb3JlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgU3ByaXRlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1Nwcml0ZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFJlbmRlcmVyIGRlZGljYXRlZCB0byBkcmF3aW5nIGFuZCBiYXRjaGluZyBzcHJpdGVzLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU3ByaXRlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgdmFsdWVzIHNlbnQgaW4gdGhlIHZlcnRleCBidWZmZXIuXG4gICAgICogcG9zaXRpb25YLCBwb3NpdGlvblksIGNvbG9yUiwgY29sb3JHLCBjb2xvckIgPSA1XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdmVydGV4IGluZm9ybWF0aW9uIGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgU3ByaXRlQmF0Y2ggYmVmb3JlIGl0IGZsdXNoZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIG91ciBiYXRjaFxuICAgIHZhciBudW1WZXJ0cyA9ICh0aGlzLnNpemUgKiA0KSAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBiYXRjaCwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgIHZhciBudW1JbmRpY2VzID0gdGhpcy5zaXplICogNjtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSB2ZXJ0ZXggZGF0YSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5QnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgQXJyYXlCdWZmZXIobnVtVmVydHMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBGbG9hdDMyQXJyYXkgZm9yIHBvc2l0aW9uc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciB1dnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIGNvbG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlcyBvZiB0aGUgZ2VvbWV0cnkgKHF1YWRzKSB0byBkcmF3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHModGhpcy5zaXplKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIFxuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICBcbiAgICAvL1RPRE8gLSAzMDAgaXMgYSBiaXQgbWFnaWMsIGZpZ3VyZSBvdXQgYSBuaWNlciBhbW91bnQhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykgXG4gICAge1xuICAgICAgICB0aGlzLmdyb3Vwc1tpXSA9IHt0ZXh0dXJlczpbXSwgdGV4dHVyZUNvdW50OjAsIGlkczpbXSwgc2l6ZTowLCBzdGFydDowLCBibGVuZDowfTsgXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcblxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsOyAgICBcbn1cblxuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3Nwcml0ZScsIFNwcml0ZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5NQVhfVEVYVFVFUyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cbiAgICB0aGlzLl9zaGFkZXIgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgdGhpcy5NQVhfVEVYVFVFUykvL25ldyBUZXh0dXJlU2hhZGVyKGdsKTtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlcjtcblxuICAgIC8vIGNyZWF0ZSBhIGNvdXBsZSBvZiBidWZmZXJzXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKGdsLCBudWxsLCBnbC5EWU5BTUlDX0RSQVcpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoZ2wsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgLy8gYnVpbGQgdGhlIHZhbyBvYmplY3QgdGhhdCB3aWxsIHJlbmRlci4uXG4gICAgdGhpcy52YW8gPSBuZXcgZ2xDb3JlLlZlcnRleEFycmF5T2JqZWN0KGdsKTtcblxuICAgIHRoaXMudmFvLmFkZEluZGV4KHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCAwKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIGdsLlVOU0lHTkVEX1NIT1JULCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMiAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMyAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVJZCwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgNCAqIDQpO1xuXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdG8gcmVuZGVyIHdoZW4gdXNpbmcgdGhpcyBzcHJpdGViYXRjaFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHNwcml0ZSlcbntcbiAgICAvL1RPRE8gc2V0IGJsZW5kIG1vZGVzLi5cbiAgICAvLyBjaGVjayB0ZXh0dXJlLi5cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPj0gdGhpcy5zaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICBcbiAgICAvLyBnZXQgdGhlIHV2cyBmb3IgdGhlIHRleHR1cmVcbiAgIFxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIGlmICghc3ByaXRlLnRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgLy8gcHVzaCBhIHRleHR1cmUuXG4gICAgLy8gaW5jcmVtZW50IHRoZSBiYXRjaHNpemVcbiAgICB2YXIgbmV4dFRleHR1cmUgPSAgc3ByaXRlLnRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgdmFyIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwO1xuICAgIHZhciBpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50VGV4dHVyZSAhPT0gbmV4dFRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbmV4dFRleHR1cmU7XG4gICAgICAgIFxuICAgICAgICBpZighbmV4dFRleHR1cmUuX2VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9pZCA9IHRoaXMudGV4dHVyZUNvdW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLnRleHR1cmVDb3VudCA9PT0gdGhpcy5NQVhfVEVYVFVFUylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgICAgICAgICAgICAgeyAgICAgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnN0YXJ0ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50KytdID0gbmV4dFRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHR1cmVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdHJpbT8/XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG5cbiAgICAvLyB1cGxvYWQgdGhlIHNwcml0ZSBlbGVtZXRucy4uLlxuICAgIC8vIHRoZXkgaGF2ZSBhbGwgcmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIHdlIGp1c3QgbmVlZCB0byBwdXNoIHRoZW0gaW50byB0aGUgYnVmZmVyLlxuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7XG4gICAgdmFyIHZlcnRleERhdGEgPSBzcHJpdGUudmVydGV4RGF0YVxuICAgIHZhciB0aW50ID0gKHNwcml0ZS50aW50ID4+IDE2KSArIChzcHJpdGUudGludCAmIDB4ZmYwMCkgKyAoKHNwcml0ZS50aW50ICYgMHhmZikgPDwgMTYpICsgKHNwcml0ZS53b3JsZEFscGhhICogMjU1IDw8IDI0KTtcbiAgICB2YXIgdXZzID0gc3ByaXRlLnRleHR1cmUuX3V2cy51dnNfdWludDMyO1xuICAgIC8veHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzBdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMF07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7IFxuICAgIFxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsyXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzNdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzFdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs0XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzVdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzJdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzZdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbN107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbM107XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgYW5kIGVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA9PT0gMClyZXR1cm47XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG5cbiAgICB0aGlzLmN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSB0aGlzLmN1cnJlbnRHcm91cC5zdGFydDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICB7ICAgICBcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgXG4gICAgLy8gZG8gc29tZSBzbWFydCBhcnJheSBzdHVmZi4uXG4gICAgLy8gZG91YmxlIHNpemUgc28gd2UgZG9udCBhbHdheSBzdWJhcnJheSB0aGUgZWxlbWVudHMuLlxuICAgIC8vIHVwbG9hZCB0aGUgdmVydHMgdG8gdGhlIGJ1ZmZlclxuICAgIGlmICh0aGlzLmN1cnJlbnRCYXRjaFNpemUgPiAoIHRoaXMuc2l6ZSAqIDAuNSApIClcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh0aGlzLnZlcnRpY2VzLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbyBrIC4uIHN1YiBhcnJheSBpcyBTTE9XPj9cbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnBvc2l0aW9ucy5zdWJhcnJheSgwLCB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplKTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHZpZXcsIDAsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgc2hhZGVyLi5cbiAgICB0aGlzLnJlbmRlcmVyLmJpbmRTaGFkZXIodGhpcy5fc2hhZGVyKTtcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCAwICk7XG5cbiAgICAvLy8gcmVuZGVyIHRoZSBncm91cHMuLlxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdyb3VwQ291bnQ7IGkrKykge1xuICAgICAgICBcbiAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5ncm91cHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC50ZXh0dXJlQ291bnQ7IGorKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kVGV4dHVyZShncm91cC50ZXh0dXJlc1tqXSwgaik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgZ3JvdXAuc2l6ZSAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCBncm91cC5zdGFydCAqIDYgKiAyKTtcbiAgICB9O1xuXG4gICAgLy8gcmVzZXQgZWxlbWVudHMgZm9yIHRoZSBuZXh0IGZsdXNoXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBzcHJpdGUgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFvLmJpbmQoKTtcbn07XG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgdGhpcy52YW8udW5iaW5kKCk7XG59O1xuLyoqXG4gKiBEZXN0cm95cyB0aGUgU3ByaXRlQmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuY29sb3JzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zcHJpdGVzID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCBtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgdmVydGV4U3JjID0gXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGFUZXh0dXJlSWQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZUZXh0dXJlSWQgPSBhVGV4dHVyZUlkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVwiO1xuICAgIHZhciBmcmFnbWVudFNyYyA9ICdwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG4nICsgZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpICsgXCJcXG5cXG5cIiArIGZyYWdUZW1wbGF0ZVxuXG4gICAgZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYy5yZXBsYWNlKC9cXCVcXCUvZ2ksICcxNicpO1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cbiAgICB2YXIgc2FtcGxlVmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSB7XG4gICAgICAgIHNhbXBsZVZhbHVlc1tpXSA9IGk7XG4gICAgfTtcblxuICAgIHNoYWRlci5iaW5kKCk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnVTYW1wbGVycyA9IHNhbXBsZVZhbHVlcztcblxuICAgIHJldHVybiBzaGFkZXI7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKVxue1xuICAgIHZhciBzcmMgPSAndmVjNCBnZXRTYW1wbGVGcm9tQXJyYXkoc2FtcGxlcjJEIHRleHR1cmVzWyUlXSwgaW50IG5keCwgdmVjMiB1dikge1xcblxcbnZlYzQgY29sb3I7J1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgaWYoaSA+IDApc3JjICs9ICdcXG5lbHNlICc7XG4gICAgICAgIGlmKGkgPCBtYXhUZXh0dXJlcy0xKXNyYyArPSAnaWYobmR4ID09ICcgKyBpICsgJyknO1xuICAgICAgICBzcmMgKz0gJ1xcbnsnO1xuICAgICAgICBzcmMgKz0gJ1xcblxcdGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmVzWycraSsnXSwgdXYpOyc7XG4gICAgICAgIHNyYyArPSAnXFxufSc7XG4gICAgfTtcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdyZXR1cm4gY29sb3I7JztcbiAgICBzcmMgKz0gJ1xcbn0nO1xuXG4gICAgcmV0dXJuIHNyYztcbn1cblxudmFyIGZyYWdUZW1wbGF0ZSA9IFtcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG4gICAgJ3ZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsnLFxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcnNbJSVdOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICdnbF9GcmFnQ29sb3IgPSBnZXRTYW1wbGVGcm9tQXJyYXkodVNhbXBsZXJzLCBpbnQodlRleHR1cmVJZCksIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yOycsXG4gICAgJ30nXG5dLmpvaW4oJ1xcbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyO1xuIiwidmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBUZXh0IE9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nIGluIHlvdXIgdGV4dCBzdHJpbmcsXG4gKiBvciBhZGQgYSB3b3JkV3JhcCBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSBhbmQgYW5kIHdvcmRXcmFwV2lkdGggcHJvcGVydHkgd2l0aCBhIHZhbHVlIGluIHRoZSBzdHlsZSBvYmplY3QuXG4gKlxuICogQSBUZXh0IGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBzdHJpbmcgYW5kIGEgc3R5bGUgb2JqZWN0XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0ID0gbmV3IFBJWEkuVGV4dCgnVGhpcyBpcyBhIHBpeGkgdGV4dCcse2ZvbnQgOiAnMjRweCBBcmlhbCcsIGZpbGwgOiAweGZmMTAxMCwgYWxpZ24gOiAnY2VudGVyJ30pO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbc3R5bGUuZm9udF0ge3N0cmluZ30gZGVmYXVsdCAnYm9sZCAyMHB4IEFyaWFsJyBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlLmcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcCwgaXQgbmVlZHMgd29yZFdyYXAgdG8gYmUgc2V0IHRvIHRydWVcbiAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzRdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gKi9cbmZ1bmN0aW9uIFRleHQodGV4dCwgc3R5bGUsIHJlc29sdXRpb24pXG57XG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgMmQgY29udGV4dCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gd2l0aFxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY2FudmFzLlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyh0aGlzLmNhbnZhcyk7XG4gICAgdGV4dHVyZS50cmltID0gbmV3IG1hdGguUmVjdGFuZ2xlKCk7XG4gICAgU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbn1cblxuLy8gY29uc3RydWN0b3JcblRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTcHJpdGUucHJvdG90eXBlKTtcblRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gVGV4dDtcblxuVGV4dC5mb250UHJvcGVydGllc0NhY2hlID0ge307XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZm9udD0nYm9sZCAyMHB0IEFyaWFsJ10ge3N0cmluZ30gVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gICAgICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZWcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGVnICdibHVlJywgJyNGQ0ZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXBcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd8bnVtYmVyfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNl0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gICAgICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAgICAgKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAgICAgKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHN0eWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdHlsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5maWxsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpbGwgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmZpbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLnN0cm9rZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zdHJva2UgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLnN0cm9rZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZHJvcFNoYWRvd0NvbG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZHJvcFNoYWRvd0NvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGUuZm9udCA9IHN0eWxlLmZvbnQgfHwgJ2JvbGQgMjBwdCBBcmlhbCc7XG4gICAgICAgICAgICBzdHlsZS5maWxsID0gc3R5bGUuZmlsbCB8fCAnYmxhY2snO1xuICAgICAgICAgICAgc3R5bGUuYWxpZ24gPSBzdHlsZS5hbGlnbiB8fCAnbGVmdCc7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2UgPSBzdHlsZS5zdHJva2UgfHwgJ2JsYWNrJzsgLy9wcm92aWRlIGEgZGVmYXVsdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzLzEzNlxuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIHx8IDA7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcCA9IHN0eWxlLndvcmRXcmFwIHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXBXaWR0aCA9IHN0eWxlLndvcmRXcmFwV2lkdGggfHwgMTAwO1xuXG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93ID0gc3R5bGUuZHJvcFNoYWRvdyB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvciB8fCAnIzAwMDAwMCc7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93QW5nbGUgPSBzdHlsZS5kcm9wU2hhZG93QW5nbGUgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA6IE1hdGguUEkgLyA2O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlID0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgOiA1O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0JsdXIgOiAwOyAvL3NoYWRvd0JsdXIgaXMgJzAnIGJ5IGRlZmF1bHQgYWNjb3JkaW5nIHRvIEhUTUxcblxuICAgICAgICAgICAgc3R5bGUucGFkZGluZyA9IHN0eWxlLnBhZGRpbmcgfHwgMDtcblxuICAgICAgICAgICAgc3R5bGUudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lIHx8ICdhbHBoYWJldGljJztcblxuICAgICAgICAgICAgc3R5bGUubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbiB8fCAnbWl0ZXInO1xuICAgICAgICAgICAgc3R5bGUubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQgfHwgMTA7XG5cbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gc3R5bGU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNvcHkgZm9yIHRoZSB0ZXh0IG9iamVjdC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCl7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgc3R5bGUgPSB0aGlzLl9zdHlsZTtcbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG5cbiAgICAvLyB3b3JkIHdyYXBcbiAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbCB0ZXh0XG4gICAgdmFyIG91dHB1dFRleHQgPSBzdHlsZS53b3JkV3JhcCA/IHRoaXMud29yZFdyYXAodGhpcy5fdGV4dCkgOiB0aGlzLl90ZXh0O1xuXG4gICAgLy8gc3BsaXQgdGV4dCBpbnRvIGxpbmVzXG4gICAgdmFyIGxpbmVzID0gb3V0cHV0VGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCB3aWR0aFxuICAgIHZhciBsaW5lV2lkdGhzID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aCk7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGZvbnRQcm9wZXJ0aWVzID0gdGhpcy5kZXRlcm1pbmVGb250UHJvcGVydGllcyhzdHlsZS5mb250KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBsaW5lV2lkdGg7XG4gICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICB2YXIgd2lkdGggPSBtYXhMaW5lV2lkdGggKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICB3aWR0aCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSAoIHdpZHRoICsgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgaGVpZ2h0XG4gICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLnN0eWxlLmxpbmVIZWlnaHQgfHwgZm9udFByb3BlcnRpZXMuZm9udFNpemUgKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG5cbiAgICB2YXIgaGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aDtcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGhlaWdodCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gKCBoZWlnaHQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nICogMiApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5jb250ZXh0LnNjYWxlKCB0aGlzLnJlc29sdXRpb24sIHRoaXMucmVzb2x1dGlvbik7XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgfVxuXG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFN0eWxlPVwiI0ZGMDAwMFwiO1xuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuICAgIHRoaXMuY29udGV4dC5zdHJva2VTdHlsZSA9IHN0eWxlLnN0cm9rZTtcbiAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIHRoaXMuY29udGV4dC50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmU7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVKb2luID0gc3R5bGUubGluZUpvaW47XG4gICAgdGhpcy5jb250ZXh0Lm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0O1xuXG4gICAgdmFyIGxpbmVQb3NpdGlvblg7XG4gICAgdmFyIGxpbmVQb3NpdGlvblk7XG5cbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGlmIChzdHlsZS5kcm9wU2hhZG93Qmx1ciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhTaGFkb3dPZmZzZXQgPSBNYXRoLmNvcyhzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgICAgICB2YXIgeVNoYWRvd09mZnNldCA9IE1hdGguc2luKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCArIHhTaGFkb3dPZmZzZXQsIGxpbmVQb3NpdGlvblkgKyB5U2hhZG93T2Zmc2V0ICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL3NldCBjYW52YXMgdGV4dCBzdHlsZXNcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZmlsbDtcblxuICAgIC8vZHJhdyBsaW5lcyBsaW5lIGJ5IGxpbmVcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0cm9rZSAmJiBzdHlsZS5zdHJva2VUaGlja25lc3MpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJva2VUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUudHJpbS54ID0gMDtcbiAgICB0ZXh0dXJlLnRyaW0ueSA9IC10aGlzLl9zdHlsZS5wYWRkaW5nO1xuXG4gICAgdGV4dHVyZS50cmltLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGV4dHVyZS50cmltLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAtIHRoaXMuX3N0eWxlLnBhZGRpbmcqMjtcblxuICAgIHRoaXMuX3dpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5lbWl0KCd1cGRhdGUnLCAgdGV4dHVyZS5iYXNlVGV4dHVyZSk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqL1xuVGV4dC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICAvL3RoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5yZW5kZXJXZWJHTC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgLy8gICB0aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYXNjZW50LCBkZXNjZW50IGFuZCBmb250U2l6ZSBvZiBhIGdpdmVuIGZvbnRTdHlsZVxuICpcbiAqIEBwYXJhbSBmb250U3R5bGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGZvbnRTdHlsZSlcbntcbiAgICB2YXIgcHJvcGVydGllcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdO1xuXG4gICAgaWYgKCFwcm9wZXJ0aWVzKVxuICAgIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzO1xuICAgICAgICB2YXIgY29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnfE3DiXEnKS53aWR0aCk7XG4gICAgICAgIHZhciBiYXNlbGluZSA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCdNJykud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xuXG4gICAgICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiAxLjQgfCAwO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNmMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQoJ3xNw4lxJywgMCwgYmFzZWxpbmUpO1xuXG4gICAgICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgICB2YXIgcGl4ZWxzID0gaW1hZ2VkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmUgPSB3aWR0aCAqIDQ7XG5cbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgIHZhciBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZWxpbmU7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCArPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnQgPSBiYXNlbGluZSAtIGk7XG5cbiAgICAgICAgaWR4ID0gcGl4ZWxzIC0gbGluZTtcbiAgICAgICAgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGRlc2NlbnQuIHNjYW4gZnJvbSBib3R0b20gdG8gdG9wIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggLT0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IGkgLSBiYXNlbGluZTtcbiAgICAgICAgcHJvcGVydGllcy5mb250U2l6ZSA9IHByb3BlcnRpZXMuYXNjZW50ICsgcHJvcGVydGllcy5kZXNjZW50O1xuXG4gICAgICAgIFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBuZXdsaW5lcyB0byBhIHN0cmluZyB0byBoYXZlIGl0IG9wdGltYWxseSBmaXQgaW50byB0aGUgaG9yaXpvbnRhbFxuICogYm91bmRzIHNldCBieSB0aGUgVGV4dCBvYmplY3QncyB3b3JkV3JhcFdpZHRoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS53b3JkV3JhcCA9IGZ1bmN0aW9uICh0ZXh0KVxue1xuICAgIC8vIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyXG4gICAgLy8gdGhhbiBpdHMgaG9yaXpvbnRhbCBib3VuZHMuXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICAgIHZhciB3b3JkV3JhcFdpZHRoID0gdGhpcy5fc3R5bGUud29yZFdyYXBXaWR0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XG4gICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQod29yZHNbal0pLndpZHRoO1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aFdpdGhTcGFjZSA9IHdvcmRXaWR0aCArIHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xuICAgICAgICAgICAgaWYgKGogPT09IDAgfHwgd29yZFdpZHRoV2l0aFNwYWNlID4gc3BhY2VMZWZ0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcHJpbnRpbmcgdGhlIG5ld2xpbmUgaWYgaXQncyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZSB0aGF0IGlzXG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSB3b3JkIHdyYXAgd2lkdGguXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal07XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB3b3Jkc1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgbGluZXMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFRleHQgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgVGV4dFxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UZXh0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzLmNhbGwodGhpcywgbWF0cml4KTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT10cnVlXSB7Ym9vbGVhbn0gd2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICAvLyBtYWtlIHN1cmUgdG8gcmVzZXQgdGhlIHRoZSBjb250ZXh0IGFuZCBjYW52YXMuLiBkb250IHdhbnQgdGhpcyBoYW5naW5nIGFyb3VuZCBpbiBtZW1vcnkhXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG5cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGVzdHJveUJhc2VUZXh0dXJlKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIFJlbmRlclRhcmdldCA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBGaWx0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKSxcbiAgICB0ZW1wUmVjdCA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuXG4vKipcbiAqIEEgQmFzZVJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIEJhc2VSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIHRha2VzIGEgc25hcHNob3Qgb2YgYW55IERpc3BsYXkgT2JqZWN0IGdpdmVuIHRvIGl0cyByZW5kZXIgbWV0aG9kLiBUaGUgcG9zaXRpb25cbiAqIGFuZCByb3RhdGlvbiBvZiB0aGUgZ2l2ZW4gRGlzcGxheSBPYmplY3RzIGlzIGlnbm9yZWQuIEZvciBleGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcigxMDI0LCAxMDI0LCB7IHZpZXc6IGNhbnZhcywgcmF0aW86IDEgfSk7XG4gKiB2YXIgQmFzZXJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5CYXNlUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihzcHJpdGUpO1xuICogYGBgXG4gKlxuICogVGhlIFNwcml0ZSBpbiB0aGlzIGNhc2Ugd2lsbCBiZSByZW5kZXJlZCB0byBhIHBvc2l0aW9uIG9mIDAsMC4gVG8gcmVuZGVyIHRoaXMgc3ByaXRlIGF0IGl0cyBhY3R1YWxcbiAqIHBvc2l0aW9uIGEgQ29udGFpbmVyIHNob3VsZCBiZSB1c2VkOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZG9jID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKlxuICogZG9jLmFkZENoaWxkKHNwcml0ZSk7XG4gKlxuICogQmFzZXJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiBCYXNlcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZVxuICogQHBhcmFtIFt3aWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbaGVpZ2h0PTEwMF0ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIEJhc2VSZW5kZXJUZXh0dXJlLCB5b3UgbXVzdCBwYXNzIGEgcmVuZGVyZXIgaW50byB0aGUgY29uc3RydWN0b3IuJyk7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUuY2FsbCh0aGlzLCBudWxsLCBzY2FsZU1vZGUpO1xuICAgXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047O1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRHJhdy9yZW5kZXIgdGhlIGdpdmVuIERpc3BsYXlPYmplY3Qgb250byB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBkZXNjZW5kZW50cyBhcmUgdHJhbnNmb3JtZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIElmIGB1cGRhdGVUcmFuc2Zvcm1gIGlzIHRydWUgdGhlbiB0aGUgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQgYmVmb3JlIHRoZVxuICAgICAqIG1ldGhvZCByZXR1cm5zLiBPdGhlcndpc2UgaXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcgY29kZSB0byBjb3JyZWN0bHkgdXNlIG9yIHJlc2V0XG4gICAgICogdGhlIHRyYW5zZm9ybWVkIGRpc3BsYXkgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5IG9iamVjdCBpcyBhbHdheXMgcmVuZGVyZWQgd2l0aCBhIHdvcmxkQWxwaGEgdmFsdWUgb2YgMS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICAgICAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gICAgICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAgICAgKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB1c2VzLiBBIEJhc2VSZW5kZXJUZXh0dXJlIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgcmVuZGVyZXIgYXQgdGhlIG1vbWVudCBpZiBpdHMgd2ViR0wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnNjYWxlTW9kZSwgdGhpcy5yZXNvbHV0aW9uKTsvLywgdGhpcy50aGlzLnNjYWxlTW9kZSk7XG4gICAgICAgIHRoaXMuX2dsVGV4dHVyZXNbZ2wuaWRdID0gIHRoaXMudGV4dHVyZUJ1ZmZlci50ZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgLy9UT0RPIHJlZmFjdG9yIGZpbHRlciBtYW5hZ2VyLi4gYXMgcmVhbGx5IGl0cyBubyBsb25nZXIgYSBtYW5hZ2VyIGlmIHdlIHVzZSBpdCBoZXJlLi5cbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbmV3IEZpbHRlck1hbmFnZXIodGhpcy5yZW5kZXJlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlcldlYkdMO1xuXG4gICAgICAgIC8vIHRoZSBjcmVhdGlvbiBvZiBhIGZpbHRlciBtYW5hZ2VyIHVuYmluZHMgdGhlIGJ1ZmZlcnMuLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgICAgICBpZih0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQpdGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlckNhbnZhcztcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcih0aGlzLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuaGVpZ2h0KiB0aGlzLnJlc29sdXRpb24pO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcblxufVxuXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIHVwZGF0ZUJhc2Uge2Jvb2xlYW59IFNob3VsZCB0aGUgYmFzZVRleHR1cmUud2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYmUgcmVzaXplZCBhcyB3ZWxsP1xuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgaWYgKHdpZHRoID09PSB0aGlzLndpZHRoICYmIGhlaWdodCA9PT0gdGhpcy5oZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZCA9ICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7XG5cbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoZGVzdGluYXRpb25GcmFtZSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuYmluZEZyYW1lYnVmZmVyKHRoaXMucmVuZGVyZXIuZ2wuRlJBTUVCVUZGRVIsIHRoaXMudGV4dHVyZUJ1ZmZlci5mcmFtZUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKGZhbHNlLCBkZXN0aW5hdGlvbkZyYW1lKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAoZnJhbWUsIGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAodXBkYXRlVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpID8gdXBkYXRlVHJhbnNmb3JtIDogdHJ1ZTsvLyF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIudHJhbnNmb3JtID0gbWF0cml4O1xuXG4gICAgLy9UT0RPIG5vdCBhIGZhbiB0aGF0IHRoaXMgaXMgaGVyZS4uLiBpdCB3aWxsIG1vdmUhXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKCk7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICBpZiAodXBkYXRlVHJhbnNmb3JtKVxuICAgIHtcblxuICAgICAgICAvLyByZXNldCB0aGUgbWF0cml4IG9mIHRoZSBkaXNwbGF0eU9iamVjdC4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uaWRlbnRpdHkoKTtcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmN1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGVtcFJlY3Qud2lkdGggPSBmcmFtZS5oZWlnaHQ7XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gZnJhbWUud2lkdGg7XG4gICBcbiAgICAvL1RPRE8gcmVuYW1lIHRleHR1cmVCdWZmZXIgdG8gcmVuZGVyVGFyZ2V0Li5cbiAgICB2YXIgdGVtcCA9ICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0aGlzLmZpbHRlck1hbmFnZXI7XG4gICAgXG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIuYWN0aXZhdGUoZnJhbWUsIHRlbXBSZWN0KTtcbiAgICBjb25zb2xlLmxvZyhkaXNwbGF5T2JqZWN0KVxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnRleHR1cmVCdWZmZXIsIGNsZWFyKTtcblxuICAgLy8gY29uc29sZS5sb2coXCJSRU5ERVJJTkcgXCIpO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRlbXA7XG59O1xuXG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcl0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVwZGF0ZVRyYW5zZm9ybSA9ICEhdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdmFyIHd0ID0gdGVtcE1hdHJpeDtcblxuICAgIHd0LmlkZW50aXR5KCk7XG5cbiAgICBpZiAobWF0cml4KVxuICAgIHtcbiAgICAgICAgd3QuYXBwZW5kKG1hdHJpeCk7XG4gICAgfVxuXG5cbiAgICB3dC50eCArPSBmcmFtZS54O1xuICAgIHd0LnR5ICs9IGZyYW1lLnk7XG5cbiAgICB2YXIgY2FjaGVkV3QgPSBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtO1xuICAgIFxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSB3dDtcblxuICAgIC8vIHNldFdvcmxkIEFscGhhIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgcmVuZGVyZXIgYXQgZnVsbCBvcGFjaXR5XG4gICAgZGlzcGxheU9iamVjdC53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICB2YXIgaSwgajtcblxuICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBcbi8vICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5cbiAgICB2YXIgY29udGV4dCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlYWxSZXNvbHV0aW9uID0gdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIGNvbnRleHQpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gcmVhbFJlc29sdXRpb247XG5cbiAgICBpZihkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID09PSB3dClcbiAgICB7XG4gICAgICAgIC8vIGZpeGVzIGNhY2hlQXNCaXRtYXAgSGFwcGVuaW5nIGR1cmluZyB0aGUgYWJvdmUuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gY2FjaGVkV3Q7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBkZXN0cm95QmFzZSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIGZpbHRlcm1hbmFnZXIuLlxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoZnJhbWUpXG57XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uuc3JjID0gdGhpcy5nZXRCYXNlNjQoZnJhbWUpO1xuICAgIHJldHVybiBpbWFnZTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGlzIHRleHR1cmUuIEl0IHdvcmtzIGJ5IGNhbGxpbmcgQmFzZVJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgIHJldHVybiB0aGlzLmdldENhbnZhcyhmcmFtZSkudG9EYXRhVVJMKCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIEJhc2VSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldENhbnZhcyA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2lkdGggPSBmcmFtZS53aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBjYW52YXNEYXRhID0gdGVtcENhbnZhcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2FudmFzRGF0YS5kYXRhLnNldCh3ZWJHTFBpeGVscyk7XG5cbiAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICByZXR1cm4gdGVtcENhbnZhcy5jYW52YXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy53aWR0aDtcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoZnJhbWUud2lkdGggPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGggJiYgXG4gICAgICAgICAgIGZyYW1lLmhlaWdodCA9PT0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5oZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IENhbnZhc0J1ZmZlcihmcmFtZS53aWR0aCAqIHJlc29sdXRpb24sIGZyYW1lLmhlaWdodCAqIHJlc29sdXRpb24pO1xuICAgICAgICAgICAgdmFyIGNhbnZhc0RhdGEgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dC5nZXRJbWFnZURhdGEoZnJhbWUueCAgKiByZXNvbHV0aW9uLCBmcmFtZS55ICogcmVzb2x1dGlvbiwgZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIHRoZSBlbnRpcmUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICBpZighZnJhbWUpXG4gICAge1xuICAgICAgICBmcmFtZSA9IHRlbXBSZWN0O1xuICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICByZXR1cm4gd2ViR0xQaXhlbHM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIGEgcGl4ZWwgd2l0aGluIHRoZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uIChmcmFtZSwgeCwgeSlcbntcbiAgICB0ZW1wUmVjdC54ID0geDtcbiAgICB0ZW1wUmVjdC55ID0geTtcbiAgICB0ZW1wUmVjdC53aWR0aCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gMSAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmKGZyYW1lKVxuICAgIHtcbiAgICAgICAgdGVtcFJlY3QueCArPSBmcmFtZS54O1xuICAgICAgICB0ZW1wUmVjdC55ICs9IGZyYW1lLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UGl4ZWxzKHRlbXBSZWN0KTtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlLiBBbGwgdGV4dHVyZXMgaGF2ZSBhIGJhc2UgdGV4dHVyZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50IHBpeGVsIHJhdGlvc1xuICovXG5mdW5jdGlvbiBCYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDEwMDtcblxuICAgIC8vIFRPRE8gZG9jc1xuICAgIC8vIHVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2VcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxXaWR0aCA9IDEwMDtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgaGVpZ2h0IG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUgdG8gYXBwbHkgd2hlbiBzY2FsaW5nIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuTElORUFSXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIG9uY2UgdGhlIGJhc2UgdGV4dHVyZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbmV2ZXIgdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmFpbHMgdG8gbG9hZCBvciBoYXMgbm8gdGV4dHVyZSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgaWYgdGhlIHNvdXJjZSBpcyBjdXJyZW50bHkgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIElmIGFuIEltYWdlIHNvdXJjZSBpcyBsb2FkaW5nIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmVcbiAgICAgKiBkaXNwYXRjaGVkIHdoZW4gdGhlIG9wZXJhdGlvbiBlbmRzLiBBbiB1bmRlcnlsaW5nIHNvdXJjZSB0aGF0IGlzXG4gICAgICogaW1tZWRpYXRlbHktYXZhaWxhYmxlIGJ5cGFzc2VzIGxvYWRpbmcgZW50aXJlbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW1hZ2Ugc291cmNlIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUT0RPOiBNYWtlIHRoaXMgYSBzZXR0ZXIgdGhhdCBjYWxscyBsb2FkU291cmNlKCk7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtJbWFnZXxDYW52YXN9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsOyAvLyBzZXQgaW4gbG9hZFNvdXJjZSwgaWYgYXQgYWxsXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiBSR0IgY2hhbm5lbHMgc2hvdWxkIGJlIHByZS1tdWx0aXBsaWVkIGJ5IEFscGhhICAoV2ViR0wgb25seSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBvciBub3QgdGhlIHRleHR1cmUgaXMgYSBwb3dlciBvZiB0d28sIHRyeSB0byB1c2UgcG93ZXIgb2YgdHdvIHRleHR1cmVzIGFzIG11Y2ggYXMgeW91IGNhblxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IGZhbHNlO1xuXG4gICAgLy8gdXNlZCBmb3Igd2ViR0xcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiBhIG1pcG1hcCBvZiB0aGlzIHRleHR1cmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLiBUaGlzIHZhbHVlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIHRleHR1cmUgaXMgdXNlZFxuICAgICAqIEFsc28gdGhlIHRleHR1cmUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBzaXplIHRvIHdvcmtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5taXBtYXAgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHJlbmRlcmVyIElEcyB0byB3ZWJnbCB0ZXh0dXJlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgV2ViR0xUZXh0dXJlPn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9pZCA9IDA7XG4gICAgXG4gICAgLy8gaWYgbm8gc291cmNlIHBhc3NlZCBkb24ndCB0cnkgdG8gbG9hZFxuICAgIGlmIChzb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmluaXNoZXMgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkZWRcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmFpbHMgdG8gbG9hZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBCYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0ZXh0dXJlIG9uIGFsbCB0aGUgd2ViZ2wgcmVuZGVyZXJzLCB0aGlzIGFsc28gYXNzdW1lcyB0aGUgc3JjIGhhcyBjaGFuZ2VkLlxuICpcbiAqIEBmaXJlcyB1cGRhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5yZWFsV2lkdGggPSB0aGlzLnNvdXJjZS5uYXR1cmFsV2lkdGggfHwgdGhpcy5zb3VyY2Uud2lkdGg7XG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gdGhpcy5zb3VyY2UubmF0dXJhbEhlaWdodCB8fCB0aGlzLnNvdXJjZS5oZWlnaHQ7XG5cbiAgICB0aGlzLndpZHRoID0gdGhpcy5yZWFsV2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlYWxIZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IHV0aWxzLmlzUG93ZXJPZlR3byh0aGlzLnJlYWxXaWR0aCwgdGhpcy5yZWFsSGVpZ2h0KTtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIExvYWQgYSBzb3VyY2UuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBpcyBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlLCBzdWNoIGFzIGFuIGltYWdlIHRoYXQgbmVlZHMgdG8gYmVcbiAqIGRvd25sb2FkZWQsIHRoZW4gdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIGluIHRoZSBmdXR1cmVcbiAqIGFuZCBgaGFzTG9hZGVkYCB3aWxsIHJlbWFpbiBmYWxzZSBhZnRlciB0aGlzIGNhbGwuXG4gKlxuICogVGhlIGxvZ2ljIHN0YXRlIGFmdGVyIGNhbGxpbmcgYGxvYWRTb3VyY2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGVnLiBgZnJvbUltYWdlYCwgYG5ldyBCYXNlVGV4dHVyZWApIGlzOlxuICpcbiAqICAgICBpZiAodGV4dHVyZS5oYXNMb2FkZWQpXG4ge1xuICogICAgICAgIC8vIHRleHR1cmUgcmVhZHkgZm9yIHVzZVxuICogICAgIH0gZWxzZSBpZiAodGV4dHVyZS5pc0xvYWRpbmcpXG4ge1xuICogICAgICAgIC8vIGxpc3RlbiB0byAnbG9hZGVkJyBhbmQvb3IgJ2Vycm9yJyBldmVudHMgb24gdGV4dHVyZVxuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAgLy8gbm90IGxvYWRpbmcsIG5vdCBnb2luZyB0byBsb2FkIFVOTEVTUyB0aGUgc291cmNlIGlzIHJlbG9hZGVkXG4gKiAgICAgICAgLy8gKGl0IG1heSBzdGlsbCBtYWtlIHNlbnNlIHRvIGxpc3RlbiB0byB0aGUgZXZlbnRzKVxuICogICAgIH1cbiAqXG4gKiBAcHJvdGVjdGVkXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUubG9hZFNvdXJjZSA9IGZ1bmN0aW9uIChzb3VyY2UpXG57XG4gICAgdmFyIHdhc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZztcbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAod2FzTG9hZGluZyAmJiB0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc291cmNlLm9uZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgLy8gQXBwbHkgc291cmNlIGlmIGxvYWRlZC4gT3RoZXJ3aXNlIHNldHVwIGFwcHJvcHJpYXRlIGxvYWRpbmcgbW9uaXRvcnMuXG4gICAgaWYgKCh0aGlzLnNvdXJjZS5jb21wbGV0ZSB8fCB0aGlzLnNvdXJjZS5nZXRDb250ZXh0KSAmJiB0aGlzLnNvdXJjZS53aWR0aCAmJiB0aGlzLnNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNvdXJjZS5nZXRDb250ZXh0KVxuICAgIHtcblxuICAgICAgICAvLyBJbWFnZSBmYWlsIC8gbm90IHJlYWR5XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuXG4gICAgICAgIHNvdXJjZS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgc2NvcGUuZW1pdCgnbG9hZGVkJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvdXJjZS5vbmVycm9yID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5lbWl0KCdlcnJvcicsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQZXIgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjdGhlLWltZy1lbGVtZW50XG4gICAgICAgIC8vICAgXCJUaGUgdmFsdWUgb2YgYGNvbXBsZXRlYCBjYW4gdGh1cyBjaGFuZ2Ugd2hpbGUgYSBzY3JpcHQgaXMgZXhlY3V0aW5nLlwiXG4gICAgICAgIC8vIFNvIGNvbXBsZXRlIG5lZWRzIHRvIGJlIHJlLWNoZWNrZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gYWRkZWQuLlxuICAgICAgICAvLyBOT1RFOiBjb21wbGV0ZSB3aWxsIGJlIHRydWUgaWYgdGhlIGltYWdlIGhhcyBubyBzcmMgc28gYmVzdCB0byBjaGVjayBpZiB0aGUgc3JjIGlzIHNldC5cbiAgICAgICAgaWYgKHNvdXJjZS5jb21wbGV0ZSAmJiBzb3VyY2Uuc3JjKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyAuLmFuZCBpZiB3ZSdyZSBjb21wbGV0ZSBub3csIG5vIG5lZWQgZm9yIGNhbGxiYWNrc1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgc29tZSBvdGhlciB0cmFja2luZyB2YXJzIG9uY2VcbiAqIGEgc291cmNlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5fc291cmNlTG9hZGVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBiYXNlIHRleHR1cmVcbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5pbWFnZVVybClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuICAgICAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlLnNyYyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLnNvdXJjZS5fcGl4aUlkXTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG5cbiAgICB0aGlzLmRpc3Bvc2UoKTtcbn07XG5cbi8qKlxuICogRnJlZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTCBtZW1vcnkgd2l0aG91dCBkZXN0cm95aW5nIHRoaXMgdGV4dHVyZSBvYmplY3QuXG4gKiBUaGlzIG1lYW5zIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSB0ZXh0dXJlIGxhdGVyIHdoaWNoIHdpbGwgdXBsb2FkIGl0IHRvIEdQVVxuICogbWVtb3J5IGFnYWluLlxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIHRoaXMpO1xuXG4gICAgLy8gdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lZWRlZCwgdGhlIHJlbmRlcmVycyBzaG91bGQgY2xlYW51cCBhbGwgdGhlIGdsIHRleHR1cmVzLlxuICAgIC8vIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgc291cmNlIGltYWdlIG9mIHRoZSB0ZXh0dXJlLlxuICogVGhlIG9yaWdpbmFsIHNvdXJjZSBtdXN0IGJlIGFuIEltYWdlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5ld1NyYyB7c3RyaW5nfSB0aGUgcGF0aCBvZiB0aGUgaW1hZ2VcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNvdXJjZUltYWdlID0gZnVuY3Rpb24gKG5ld1NyYylcbntcbiAgICB0aGlzLnNvdXJjZS5zcmMgPSBuZXdTcmM7XG5cbiAgICB0aGlzLmxvYWRTb3VyY2UodGhpcy5zb3VyY2UpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIGJhc2UgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBTaG91bGQgdXNlIGFub255bW91cyBDT1JTPyBEZWZhdWx0cyB0byB0cnVlIGlmIHRoZSBVUkwgaXMgbm90IGEgZGF0YS1VUkkuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmIChjcm9zc29yaWdpbiA9PT0gdW5kZWZpbmVkICYmIGltYWdlVXJsLmluZGV4T2YoJ2RhdGE6JykgIT09IDApXG4gICAge1xuICAgICAgICBjcm9zc29yaWdpbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIC8vIG5ldyBJbWFnZSgpIGJyZWFrcyB0ZXggbG9hZGluZyBpbiBzb21lIHZlcnNpb25zIG9mIENocm9tZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMzgwNzFcbiAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgaWYgKGNyb3Nzb3JpZ2luKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoaW1hZ2UsIHNjYWxlTW9kZSk7XG4gICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgaW1hZ2Uuc3JjID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSBiYXNlVGV4dHVyZTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBAMnggYXQgdGhlIGVuZCBvZiB0aGUgdXJsIHdlIGFyZSBnb2luZyB0byBhc3N1bWUgaXRzIGEgaGlnaHJlcyBpbWFnZVxuICAgICAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKGltYWdlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFjYW52YXMuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGNhbnZhcy5fcGl4aUlkID0gJ2NhbnZhc18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG4iLCJ2YXIgQmFzZVJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VSZW5kZXJUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIFJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIFJlbmRlclRleHR1cmUgc2hvdWxkIGJlIHByZWxvYWRlZFxuICogb3RoZXJ3aXNlIGJsYWNrIHJlY3RhbmdsZXMgd2lsbCBiZSBkcmF3biBpbnN0ZWFkLlxuICpcbiAqIEEgUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCA4MDAsIDYwMCk7XG4gKiB2YXIgc3ByaXRlID0gUElYSS5TcHJpdGUuZnJvbUltYWdlKFwic3Bpbk9ial8wMS5wbmdcIik7XG4gKlxuICogc3ByaXRlLnBvc2l0aW9uLnggPSA4MDAvMjtcbiAqIHNwcml0ZS5wb3NpdGlvbi55ID0gNjAwLzI7XG4gKiBzcHJpdGUuYW5jaG9yLnggPSAwLjU7XG4gKiBzcHJpdGUuYW5jaG9yLnkgPSAwLjU7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiByZW5kZXJUZXh0dXJlXG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIGZvciB0aGlzIFJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIFJlbmRlclRleHR1cmUoYmFzZVJlbmRlclRleHR1cmUsIGZyYW1lKVxue1xuICAgIGlmICghcmVuZGVyZXIpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgb2JqZWN0IHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Jhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIFRleHR1cmUuY2FsbCh0aGlzLFxuICAgICAgICBiYXNlUmVuZGVyVGV4dHVyZSxcbiAgICAgICAgZnJhbWUgXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn1cblxuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmUucHJvdG90eXBlKTtcblJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGV4dHVyZTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIHVwZGF0ZUJhc2UpXG57XG4gICBcbiAgICAvL1RPRE8gLSBjb3VsZCBiZSBub3QgcmVxdWlyZWQuLlxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSB0aGlzLmNyb3Aud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNyb3AuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKHVwZGF0ZUJhc2UpXG4gICAge1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYmFzZVRleHR1cmUuY2xlYXIodGhpcy5mcmFtZSlcbiAgICBcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLnJlbmRlcih0aGlzLmZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRJbWFnZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuYmFzZVRleHR1cmUuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIFJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0QmFzZTY0ID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNlNjQuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIFJlbmRlclRleHR1cmUgdG8gaXQgYW5kIHRoZW4gcmV0dXJucyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gQSBDYW52YXMgZWxlbWVudCB3aXRoIHRoZSB0ZXh0dXJlIHJlbmRlcmVkIG9uLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldENhbnZhcyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVscyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVsKHRoaXMuZnJhbWUsIHgsIHkpO1xufTtcblxuUmVuZGVyVGV4dHVyZS5jcmVhdGUgPSBmdW5jdGlvbihyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHJldHVybiBuZXcgUmVuZGVyVGV4dHVyZShuZXcgQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbikpO1xufVxuXG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnMgPSByZXF1aXJlKCcuL1RleHR1cmVVdnMnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlIG9yIHBhcnQgb2YgYW4gaW1hZ2UuIEl0IGNhbm5vdCBiZSBhZGRlZFxuICogdG8gdGhlIGRpc3BsYXkgbGlzdCBkaXJlY3RseS4gSW5zdGVhZCB1c2UgaXQgYXMgdGhlIHRleHR1cmUgZm9yIGEgU3ByaXRlLiBJZiBubyBmcmFtZSBpcyBwcm92aWRlZCB0aGVuIHRoZSB3aG9sZSBpbWFnZSBpcyB1c2VkLlxuICpcbiAqIFlvdSBjYW4gZGlyZWN0bHkgY3JlYXRlIGEgdGV4dHVyZSBmcm9tIGFuIGltYWdlIGFuZCB0aGVuIHJldXNlIGl0IG11bHRpcGxlIHRpbWVzIGxpa2UgdGhpcyA6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZSgnYXNzZXRzL2ltYWdlLnBuZycpO1xuICogdmFyIHNwcml0ZTEgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiB2YXIgc3ByaXRlMiA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBiYXNlVGV4dHVyZSB7UElYSS5CYXNlVGV4dHVyZX0gVGhlIGJhc2UgdGV4dHVyZSBzb3VyY2UgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlIGZyb21cbiAqIEBwYXJhbSBbZnJhbWVdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3RhbmdsZSBmcmFtZSBvZiB0aGUgdGV4dHVyZSB0byBzaG93XG4gKiBAcGFyYW0gW2Nyb3BdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIGFyZWEgb2Ygb3JpZ2luYWwgdGV4dHVyZVxuICogQHBhcmFtIFt0cmltXSB7UElYSS5SZWN0YW5nbGV9IFRyaW1tZWQgdGV4dHVyZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBbcm90YXRlXSB7Ym9vbGVhbn0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlcyAoIHVzZWQgYnkgdGV4dHVyZSBwYWNrZXIgKVxuICovXG5mdW5jdGlvbiBUZXh0dXJlKGJhc2VUZXh0dXJlLCBmcmFtZSwgY3JvcCwgdHJpbSwgcm90YXRlKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogRG9lcyB0aGlzIFRleHR1cmUgaGF2ZSBhbnkgZnJhbWUgZGF0YSBhc3NpZ25lZCB0byBpdD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5ub0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VUZXh0dXJlIGluc3RhbmNlb2YgVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0cmltIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLnRyaW0gPSB0cmltO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCB0aGUgcmVuZGVyZXIga25vdyBpZiB0aGUgdGV4dHVyZSBpcyB2YWxpZC4gSWYgaXQncyBub3QgdGhlbiBpdCBjYW5ub3QgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgYSByZW5kZXJlciBrbm93IHRoYXQgYSB0ZXh0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgKHVzZWQgbWFpbmx5IGZvciB3ZWJHTCB1diB1cGRhdGVzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVpcmVzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgVVYgZGF0YSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgYXJlYSBvZiB0aGUgQmFzZVRleHR1cmUgaW1hZ2UgdG8gYWN0dWFsbHkgY29weSB0byB0aGUgQ2FudmFzIC8gV2ViR0wgd2hlbiByZW5kZXJpbmcsXG4gICAgICogaXJyZXNwZWN0aXZlIG9mIHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBvciBwbGFjZW1lbnQgKHdoaWNoIGNhbiBiZSBpbmZsdWVuY2VkIGJ5IHRyaW1tZWQgdGV4dHVyZSBhdGxhc2VzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jcm9wID0gY3JvcCB8fCBmcmFtZTsvL25ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdGF0ZSA9ICEhcm90YXRlO1xuXG4gICAgaWYgKGJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBmcmFtZSB3ZSBzaG91bGQgbW9uaXRvciBmb3IgYW55IGJhc2UgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlLm9uY2UoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZyYW1lIG9yIHRoZSBiYXNlVGV4dHVyZSBpcyB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICovXG4gICAgZnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgICAgICAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50cmltICYmICF0aGlzLnJvdGF0ZSAmJiAoZnJhbWUueCArIGZyYW1lLndpZHRoID4gdGhpcy5iYXNlVGV4dHVyZS53aWR0aCB8fCBmcmFtZS55ICsgZnJhbWUuaGVpZ2h0ID4gdGhpcy5iYXNlVGV4dHVyZS5oZWlnaHQpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dHVyZSBFcnJvcjogZnJhbWUgZG9lcyBub3QgZml0IGluc2lkZSB0aGUgYmFzZSBUZXh0dXJlIGRpbWVuc2lvbnMgJyArIHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5zb3VyY2UgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50cmltKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wID0gZnJhbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlcyB0aGlzIHRleHR1cmUgb24gdGhlIGdwdS5cbiAqXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5iYXNlVGV4dHVyZS51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyBsb2FkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlTG9hZGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIC8vIFRPRE8gdGhpcyBjb2RlIGxvb2tzIGNvbmZ1c2luZy4uIGJvbyB0byBhYnVzaW5nIGdldHRlcnMgYW5kIHNldHRlcnNzIVxuICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy5fZnJhbWU7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyB1cGRhdGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZVVwZGF0ZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSBiYXNlVGV4dHVyZS53aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSBiYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlPWZhbHNlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlKVxue1xuICAgIGlmICh0aGlzLmJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGRlc3Ryb3lCYXNlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG4gICAgdGhpcy50cmltID0gbnVsbDtcbiAgICB0aGlzLmNyb3AgPSBudWxsO1xuXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UsIHRoaXMpO1xuICAgIHRoaXMub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGV4dHVyZSBvYmplY3QgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLmZyYW1lLCB0aGlzLmNyb3AsIHRoaXMudHJpbSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5fdXBkYXRlVXZzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuX3V2cylcbiAgICB7XG4gICAgICAgIHRoaXMuX3V2cyA9IG5ldyBUZXh0dXJlVXZzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXZzLnNldCh0aGlzLmNyb3AsIHRoaXMuYmFzZVRleHR1cmUsIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFRleHR1cmUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSAgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gY3Jvc3NvcmlnaW4ge2Jvb2xlYW59IFdoZXRoZXIgcmVxdWVzdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY3Jvc3NvcmlnaW5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21JbWFnZShpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xuICAgICAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gdGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICh0eXBlb2YgdmlkZW8gPT09ICdzdHJpbmcnKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFRleHR1cmUuZnJvbVZpZGVvVXJsKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSB2aWRlbyB1cmwuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvVXJsIHtzdHJpbmd9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW9VcmwgPSBmdW5jdGlvbiAodmlkZW9VcmwsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHZpZGVvVXJsLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIHRleHR1cmUgdG8gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuIFRoaXMgY2FjaGUgaXMgc2hhcmVkIGFjcm9zcyB0aGUgd2hvbGUgUElYSSBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIFRleHR1cmUgdG8gYWRkIHRvIHRoZSBjYWNoZS5cbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIGJlIHN0b3JlZCBhZ2FpbnN0LlxuICovXG5UZXh0dXJlLmFkZFRleHR1cmVUb0NhY2hlID0gZnVuY3Rpb24gKHRleHR1cmUsIGlkKVxue1xuICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpZF0gPSB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB0ZXh0dXJlIGZyb20gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCBvZiB0aGUgdGV4dHVyZSB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRoYXQgd2FzIHJlbW92ZWRcbiAqL1xuVGV4dHVyZS5yZW1vdmVUZXh0dXJlRnJvbUNhY2hlID0gZnVuY3Rpb24gKGlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBBbiBlbXB0eSB0ZXh0dXJlLCB1c2VkIG9mdGVuIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBtdWx0aXBsZSBlbXB0eSB0ZXh0dXJlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZS5FTVBUWSA9IG5ldyBUZXh0dXJlKG5ldyBCYXNlVGV4dHVyZSgpKTtcbiIsIlxuLyoqXG4gKiBBIHN0YW5kYXJkIG9iamVjdCB0byBzdG9yZSB0aGUgVXZzIG9mIGEgdGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmVVdnMoKVxue1xuICAgIHRoaXMueDAgPSAwO1xuICAgIHRoaXMueTAgPSAwO1xuXG4gICAgdGhpcy54MSA9IDE7XG4gICAgdGhpcy55MSA9IDA7XG5cbiAgICB0aGlzLngyID0gMTtcbiAgICB0aGlzLnkyID0gMTtcblxuICAgIHRoaXMueDMgPSAwO1xuICAgIHRoaXMueTMgPSAxO1xuXG4gICAgdGhpcy54eTBfdWludDMyID0gMDtcbiAgICB0aGlzLnh5MV91aW50MzIgPSAwO1xuICAgIHRoaXMueHkyX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTNfdWludDMyID0gMDtcblxuICAgIHRoaXMudXZzX3VpbnQzMiA9IG5ldyBVaW50MzJBcnJheSg0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVVdnM7XG5cbi8qKlxuICogU2V0cyB0aGUgdGV4dHVyZSBVdnMgYmFzZWQgb24gdGhlIGdpdmVuIGZyYW1lIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gZnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIGJhc2VGcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gcm90YXRlIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgcm90YXRlZFxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZVV2cy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZyYW1lLCBiYXNlRnJhbWUsIHJvdGF0ZSlcbntcbiAgICB2YXIgdHcgPSBiYXNlRnJhbWUud2lkdGg7XG4gICAgdmFyIHRoID0gYmFzZUZyYW1lLmhlaWdodDtcblxuICAgIGlmKHJvdGF0ZSlcbiAgICB7XG4gICAgICAgIHRoaXMueDAgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSBmcmFtZS55IC8gdGg7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy54MCA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcbiAgICB9XG5cbiAgICB0aGlzLnV2c191aW50MzJbMF0gPSAoKCh0aGlzLnkwICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDAgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsxXSA9ICgoKHRoaXMueTEgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MSAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzJdID0gKCgodGhpcy55MiAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngyICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbM10gPSAoKCh0aGlzLnkzICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDMgKiA2NTUzNSkgJiAweEZGRkYpO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIG9mIGEgW3BsYXlpbmddIFZpZGVvLlxuICpcbiAqIFZpZGVvIGJhc2UgdGV4dHVyZXMgbWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QgaW4gdGhlaXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNldmVyYWwgd2F5cywgc3VjaCBhczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCgnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHsgc3JjOiAnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9KTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbJy92aWRlby53ZWJtJywgJy92aWRlby5tcDQnXSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoW1xuICogICAgIHsgc3JjOiAnL3ZpZGVvLndlYm0nLCBtaW1lOiAndmlkZW8vd2VibScgfSxcbiAqICAgICB7IHNyYzogJy92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9XG4gKiBdKTtcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgW1wiZGV1c1wiIGRlbW9dKGh0dHA6Ly93d3cuZ29vZGJveWRpZ2l0YWwuY29tL3BpeGlqcy9leGFtcGxlcy9kZXVzLykuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkJhc2VUZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gVmlkZW9CYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmlkZW8gc291cmNlIGVsZW1lbnQgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIC8vIGhvb2sgaW4gaGVyZSB0byBjaGVjayBpZiB2aWRlbyBpcyBhbHJlYWR5IGF2YWlsYWJsZS5cbiAgICAvLyBCYXNlVGV4dHVyZSBsb29rcyBmb3IgYSBzb3VyY2UuY29tcGxldGUgYm9vbGVhbiwgcGx1cyB3aWR0aCAmIGhlaWdodC5cblxuICAgIGlmICgoc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0VOT1VHSF9EQVRBIHx8IHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9GVVRVUkVfREFUQSkgJiYgc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICBzb3VyY2UuY29tcGxldGUgPSB0cnVlO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgc291cmNlLCBzY2FsZU1vZGUpO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBiYXNlIHRleHR1cmUgYXV0b21hdGljYWxseSB1cGRhdGUgaXRzZWxmLCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX29uVXBkYXRlID0gdGhpcy5fb25VcGRhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkNhblBsYXkgPSB0aGlzLl9vbkNhblBsYXkuYmluZCh0aGlzKTtcblxuICAgIGlmICghc291cmNlLmNvbXBsZXRlKVxuICAgIHtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIC8vIHN0YXJ0ZWQgcGxheWluZy4uXG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fb25QbGF5U3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX29uUGxheVN0b3AuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fX2xvYWRlZCA9IGZhbHNlO1xufVxuXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZVRleHR1cmUucHJvdG90eXBlKTtcblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmlkZW9CYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9CYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3Agb2YgdGhlIHZpZGVvIGJhc2UgdGV4dHVyZSwgb25seSBydW5zIHdoZW4gYXV0b1VwZGF0ZSBpcyBzZXQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUnVucyB0aGUgdXBkYXRlIGxvb3Agd2hlbiB0aGUgdmlkZW8gaXMgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBwYXVzZSBldmVudCBpcyB0cmlnZ2VyZWQsIHN0b3BzIHRoZSB1cGRhdGUgbG9vcFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgdmlkZW8gaXMgbG9hZGVkIGFuZCByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uQ2FuUGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2UudmlkZW9XaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnNvdXJjZS52aWRlb0hlaWdodDtcblxuICAgICAgICB0aGlzLnNvdXJjZS5wbGF5KCk7XG5cbiAgICAgICAgLy8gcHJldmVudCBtdWx0aXBsZSBsb2FkZWQgZGlzcGF0Y2hlcy4uXG4gICAgICAgIGlmICghdGhpcy5fX2xvYWRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHRoaXMuc291cmNlLl9waXhpSWQgXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlLl9waXhpSWQ7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogTWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXZpZGVvLl9waXhpSWQpXG4gICAge1xuICAgICAgICB2aWRlby5fcGl4aUlkID0gJ3ZpZGVvXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3ZpZGVvLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IFZpZGVvQmFzZVRleHR1cmUodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHZpZGVvLl9waXhpSWQgXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBCYXNlVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqIFRoaXMgQmFzZVRleHR1cmUgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYSB0ZXh0dXJlXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvU3JjIHtzdHJpbmd8b2JqZWN0fHN0cmluZ1tdfG9iamVjdFtdfSBUaGUgVVJMKHMpIGZvciB0aGUgdmlkZW8uXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLnNyY10ge3N0cmluZ30gT25lIG9mIHRoZSBzb3VyY2UgdXJscyBmb3IgdGhlIHZpZGVvXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLm1pbWVdIHtzdHJpbmd9IFRoZSBtaW1ldHlwZSBvZiB0aGUgdmlkZW8gKGUuZy4gJ3ZpZGVvL21wNCcpLiBJZiBub3Qgc3BlY2lmaWVkXG4gKiAgdGhlIHVybCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBtaW1lIHR5cGUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwgPSBmdW5jdGlvbiAodmlkZW9TcmMsIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXG4gICAgLy8gYXJyYXkgb2Ygb2JqZWN0cyBvciBzdHJpbmdzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW9TcmMpKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWRlb1NyYy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjW2ldLnNyYyB8fCB2aWRlb1NyY1tpXSwgdmlkZW9TcmNbaV0ubWltZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNpbmdsZSBvYmplY3Qgb3Igc3RyaW5nXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjLnNyYyB8fCB2aWRlb1NyYywgdmlkZW9TcmMubWltZSkpO1xuICAgIH1cblxuICAgIHZpZGVvLmxvYWQoKTtcbiAgICB2aWRlby5wbGF5KCk7XG5cbiAgICByZXR1cm4gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSk7XG59O1xuXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzID0gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsO1xuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2UocGF0aCwgdHlwZSlcbntcbiAgICBpZiAoIXR5cGUpXG4gICAge1xuICAgICAgICB0eXBlID0gJ3ZpZGVvLycgKyBwYXRoLnN1YnN0cihwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gcGF0aDtcbiAgICBzb3VyY2UudHlwZSA9IHR5cGU7XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgLy8gSW50ZXJuYWwgZXZlbnQgdXNlZCBieSBjb21wb3NlZCBlbWl0dGVyXG4gICAgVElDSyA9ICd0aWNrJztcblxuLyoqXG4gKiBBIFRpY2tlciBjbGFzcyB0aGF0IHJ1bnMgYW4gdXBkYXRlIGxvb3AgdGhhdCBvdGhlciBvYmplY3RzIGxpc3RlbiB0by5cbiAqIFRoaXMgY2xhc3MgaXMgY29tcG9zZWQgYXJvdW5kIGFuIEV2ZW50RW1pdHRlciBvYmplY3QgdG8gYWRkIGxpc3RlbmVyc1xuICogbWVhbnQgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lLlxuICogQW5pbWF0aW9uIGZyYW1lcyBhcmUgcmVxdWVzdGVkIG9ubHkgd2hlbiBuZWNlc3NhcnksXG4gKiBlLmcuIFdoZW4gdGhlIHRpY2tlciBpcyBzdGFydGVkIGFuZCB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbmZ1bmN0aW9uIFRpY2tlcigpXG57XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRpY2sgbWV0aG9kIGJvdW5kIHRvIHRpY2tlciBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaW4gZWFybHkgMjAxNSwgRnVuY3Rpb24uYmluZFxuICAgICAqIGlzIHN0aWxsIDYwJSBzbG93ZXIgaW4gaGlnaCBwZXJmb3JtYW5jZSBzY2VuYXJpb3MuXG4gICAgICogQWxzbyBzZXBhcmF0aW5nIGZyYW1lIHJlcXVlc3RzIGZyb20gdXBkYXRlIG1ldGhvZFxuICAgICAqIHNvIGxpc3RlbmVycyBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGFuZCB3aXRoXG4gICAgICogYW55IGFuaW1hdGlvbiBBUEksIGp1c3QgaW52b2tlIHRpY2tlci51cGRhdGUodGltZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RpY2sgPSBmdW5jdGlvbiBfdGljayh0aW1lKSB7XG5cbiAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgbm93XG4gICAgICAgICAgICBfdGhpcy51cGRhdGUodGltZSk7XG4gICAgICAgICAgICAvLyBMaXN0ZW5lciBzaWRlIGVmZmVjdHMgbWF5IGhhdmUgbW9kaWZpZWQgdGlja2VyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQgJiYgX3RoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiBfdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fdGljayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZW1pdHRlciB1c2VkIHRvIGZpcmUgJ3RpY2snIGV2ZW50XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9lbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY3VycmVudCBmcmFtZSByZXF1ZXN0IElEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdmFsdWUgbWFuYWdlZCBieSBtaW5GUFMgcHJvcGVydHkgc2V0dGVyIGFuZCBnZXR0ZXIuXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHVwZGF0ZXMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBzaG91bGQgaW52b2tlIHRoZSBtZXRob2RcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBhdXRvbWF0aWNhbGx5XG4gICAgICogd2hlbiBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1N0YXJ0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTY2FsYXIgdGltZSB2YWx1ZSBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbWluRlBTfVxuICAgICAqIGFuZCBpcyBzY2FsZWQgd2l0aCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfS5cbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhcCBtYXkgYmUgZXhjZWVkZWQgYnkgc2NhbGluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kZWx0YVRpbWUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGltZSBlbGFwc2VkIGluIG1pbGxpc2Vjb25kcyBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBPcHBvc2VkIHRvIHdoYXQgdGhlIHNjYWxhciB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX1cbiAgICAgKiBpcyBiYXNlZCwgdGhpcyB2YWx1ZSBpcyBuZWl0aGVyIGNhcHBlZCBub3Igc2NhbGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMSAvIFRBUkdFVF9GUE1TXG4gICAgICovXG4gICAgdGhpcy5lbGFwc2VkTVMgPSAxIC8gQ09OU1QuVEFSR0VUX0ZQTVM7IC8vIGRlZmF1bHQgdG8gdGFyZ2V0IGZyYW1lIHRpbWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBsYXN0IHRpbWUge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9IHdhcyBpbnZva2VkLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgYWxzbyByZXNldCBpbnRlcm5hbGx5IG91dHNpZGUgb2YgaW52b2tpbmdcbiAgICAgKiB1cGRhdGUsIGJ1dCBvbmx5IHdoZW4gYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxhc3RUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEZhY3RvciBvZiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNjYWxlcyB0aWNrZXIuZGVsdGFUaW1lIHRvIHdoYXQgd291bGQgYmVcbiAgICAgKiAvLyB0aGUgZXF1aXZhbGVudCBvZiBhcHByb3hpbWF0ZWx5IDEyMCBGUFNcbiAgICAgKiB0aWNrZXIuc3BlZWQgPSAyO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICogYHRydWVgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBgZmFsc2VgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RvcH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIFdoaWxlIGBmYWxzZWAsIHRoaXMgdmFsdWUgbWF5IGNoYW5nZSB0byBgdHJ1ZWAgaW4gdGhlXG4gICAgICogZXZlbnQgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGJlaW5nIGB0cnVlYFxuICAgICAqIGFuZCBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWNrZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lcyBwZXIgc2Vjb25kIGF0IHdoaWNoIHRoaXMgdGlja2VyIGlzIHJ1bm5pbmcuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgYXBwcm94aW1hdGVseSA2MCBpbiBtb3N0IG1vZGVybiBicm93c2Vycy5cbiAgICAgKiAqKk5vdGU6KiogVGhpcyBkb2VzIG5vdCBmYWN0b3IgaW4gdGhlIHZhbHVlIG9mXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0sIHdoaWNoIGlzIHNwZWNpZmljXG4gICAgICogdG8gc2NhbGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBGUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5lbGFwc2VkTVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGFsbG93ZWQgdG9cbiAgICAgKiBlbGFwc2UgYmV0d2VlbiBpbnZva2luZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0uXG4gICAgICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNhcCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gICAgICogYnV0IGRvZXMgbm90IGVmZmVjdCB0aGUgbWVhc3VyZWQgdmFsdWUgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNGUFN9LlxuICAgICAqIFdoZW4gc2V0dGluZyB0aGlzIHByb3BlcnR5IGl0IGlzIGNsYW1wZWQgdG8gYSB2YWx1ZSBiZXR3ZWVuXG4gICAgICogYDBgIGFuZCBgUElYSS5UQVJHRVRfRlBNUyAqIDEwMDBgLlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICBtaW5GUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZwcylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gQ2xhbXA6IDAgdG8gVEFSR0VUX0ZQTVNcbiAgICAgICAgICAgIHZhciBtaW5GUE1TID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZnBzKSAvIDEwMDAsIENPTlNULlRBUkdFVF9GUE1TKTtcbiAgICAgICAgICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEgLyBtaW5GUE1TO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbFxuICogZW1pdHRlciBoYXMgbGlzdGVuZXJzLCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fcmVxdWVzdElmTmVlZGVkID0gZnVuY3Rpb24gX3JlcXVlc3RJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiB0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIC8vIGVuc3VyZSBjYWxsYmFja3MgZ2V0IGNvcnJlY3QgZGVsdGFcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fdGljayk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IGNhbmNlbHMgYSBwZW5kaW5nIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9jYW5jZWxJZk5lZWRlZCA9IGZ1bmN0aW9uIF9jYW5jZWxJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIHRoZSB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZCBpdCBjaGVja3MgaWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHlcbiAqIGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy4gSWYgdGhlc2VcbiAqIGNvbmRpdGlvbnMgYXJlIG1ldCwgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgdGlja2VyIGhhcyBub3RcbiAqIGJlZW4gc3RhcnRlZCwgYnV0IGF1dG9TdGFydCBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHRpY2tlciBzdGFydHMgbm93LFxuICogYW5kIGNvbnRpbnVlcyB3aXRoIHRoZSBwcmV2aW91cyBjb25kaXRpb25zIHRvIHJlcXVlc3QgYSBuZXcgZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fc3RhcnRJZlBvc3NpYmxlID0gZnVuY3Rpb24gX3N0YXJ0SWZQb3NzaWJsZSgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmF1dG9TdGFydClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb259IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIHVwZGF0ZXNcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb25jZX0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3Igb25lIHVwZGF0ZVxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIGFkZE9uY2UoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbmNlKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb2ZmfSBpbnRlcm5hbGx5IGZvciAndGljaycgZXZlbnQuXG4gKiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyBmb3IgJ3RpY2snIGV2ZW50LlxuICogSWYgaXQgZG9lcywgdGhlbiBpdCBjYW5jZWxzIHRoZSBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHBhcmFtIFtmbl0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZFxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0IHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vZmYoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgaWYgKCF0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyBsaXN0ZW5lcnNcbiAqIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIHN0YXJ0KClcbntcbiAgICBpZiAoIXRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgcmVxdWVzdGVkXG4gKiBhbiBhbmltYXRpb24gZnJhbWUgaXQgaXMgY2FuY2VsZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcCgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVHJpZ2dlcnMgYW4gdXBkYXRlLiBBbiB1cGRhdGUgZW50YWlscyBzZXR0aW5nIHRoZVxuICogY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2VsYXBzZWRNU30sXG4gKiB0aGUgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gKiBpbnZva2luZyBhbGwgbGlzdGVuZXJzIHdpdGggY3VycmVudCBkZWx0YVRpbWUsXG4gKiBhbmQgdGhlbiBmaW5hbGx5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNsYXN0VGltZX1cbiAqIHdpdGggdGhlIHZhbHVlIG9mIGN1cnJlbnRUaW1lIHRoYXQgd2FzIHByb3ZpZGVkLlxuICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBieSBhbmltYXRpb25cbiAqIGZyYW1lIGNhbGxiYWNrcyBpZiB0aGUgdGlja2VyIGluc3RhbmNlIGhhcyBiZWVuIHN0YXJ0ZWRcbiAqIGFuZCBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSBbY3VycmVudFRpbWU9cGVyZm9ybWFuY2Uubm93KCldIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn0gdGhlIGN1cnJlbnQgdGltZSBvZiBleGVjdXRpb25cbiAqL1xuVGlja2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoY3VycmVudFRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWRNUztcblxuICAgIC8vIEFsbG93IGNhbGxpbmcgdXBkYXRlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBjdXJyZW50VGltZS5cbiAgICBjdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIHx8IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIC8vIFNhdmUgdW5jYXBwZWQgZWxhcHNlZE1TIGZvciBtZWFzdXJlbWVudFxuICAgIGVsYXBzZWRNUyA9IHRoaXMuZWxhcHNlZE1TID0gY3VycmVudFRpbWUgLSB0aGlzLmxhc3RUaW1lO1xuXG4gICAgLy8gY2FwIHRoZSBtaWxsaXNlY29uZHMgZWxhcHNlZCB1c2VkIGZvciBkZWx0YVRpbWVcbiAgICBpZiAoZWxhcHNlZE1TID4gdGhpcy5fbWF4RWxhcHNlZE1TKVxuICAgIHtcbiAgICAgICAgZWxhcHNlZE1TID0gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgIH1cblxuICAgIHRoaXMuZGVsdGFUaW1lID0gZWxhcHNlZE1TICogQ09OU1QuVEFSR0VUX0ZQTVMgKiB0aGlzLnNwZWVkO1xuXG4gICAgLy8gSW52b2tlIGxpc3RlbmVycyBhZGRlZCB0byBpbnRlcm5hbCBlbWl0dGVyXG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KFRJQ0ssIHRoaXMuZGVsdGFUaW1lKTtcblxuICAgIHRoaXMubGFzdFRpbWUgPSBjdXJyZW50VGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGlja2VyO1xuIiwidmFyIFRpY2tlciA9IHJlcXVpcmUoJy4vVGlja2VyJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZCB0aWNrZXIgaW5zdGFuY2UgdXNlZCBieSB7QGxpbmsgUElYSS5leHRyYXMuTW92aWVDbGlwfS5cbiAqIGFuZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICogVGhlIHByb3BlcnR5IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBpcyBzZXQgdG8gYHRydWVgXG4gKiBmb3IgdGhpcyBpbnN0YW5jZS4gUGxlYXNlIGZvbGxvdyB0aGUgZXhhbXBsZXMgZm9yIHVzYWdlLCBpbmNsdWRpbmdcbiAqIGhvdyB0byBvcHQtb3V0IG9mIGF1dG8tc3RhcnRpbmcgdGhlIHNoYXJlZCB0aWNrZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciB0aWNrZXIgPSBQSVhJLnRpY2tlci5zaGFyZWQ7XG4gKiAvLyBTZXQgdGhpcyB0byBwcmV2ZW50IHN0YXJ0aW5nIHRoaXMgdGlja2VyIHdoZW4gbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqIC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyB0cnVlIG9ubHkgZm9yIHRoZSBQSVhJLnRpY2tlci5zaGFyZWQgaW5zdGFuY2UuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiAvLyBGWUksIGNhbGwgdGhpcyB0byBlbnN1cmUgdGhlIHRpY2tlciBpcyBzdG9wcGVkLiBJdCBzaG91bGQgYmUgc3RvcHBlZFxuICogLy8gaWYgeW91IGhhdmUgbm90IGF0dGVtcHRlZCB0byByZW5kZXIgYW55dGhpbmcgeWV0LlxuICogdGlja2VyLnN0b3AoKTtcbiAqIC8vIENhbGwgdGhpcyB3aGVuIHlvdSBhcmUgcmVhZHkgZm9yIGEgcnVubmluZyBzaGFyZWQgdGlja2VyLlxuICogdGlja2VyLnN0YXJ0KCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFlvdSBtYXkgdXNlIHRoZSBzaGFyZWQgdGlja2VyIHRvIHJlbmRlci4uLlxuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoODAwLCA2MDApO1xuICogdmFyIHN0YWdlID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiB2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIpO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZW5kZXJlci52aWV3KTtcbiAqIHRpY2tlci5hZGQoZnVuY3Rpb24gKHRpbWUpIHtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE9yIHlvdSBjYW4ganVzdCB1cGRhdGUgaXQgbWFudWFsbHkuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiB0aWNrZXIuc3RvcCgpO1xuICogZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XG4gKiAgICAgdGlja2VyLnVwZGF0ZSh0aW1lKTtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAqIH1cbiAqIGFuaW1hdGUocGVyZm9ybWFuY2Uubm93KCkpO1xuICpcbiAqIEB0eXBlIHtQSVhJLnRpY2tlci5UaWNrZXJ9XG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xudmFyIHNoYXJlZCA9IG5ldyBUaWNrZXIoKTtcbnNoYXJlZC5hdXRvU3RhcnQgPSB0cnVlO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS50aWNrZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc2hhcmVkOiBzaGFyZWQsXG4gICAgVGlja2VyOiBUaWNrZXJcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gZnVuY3Rpb24gKHNpemUpXG57XG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBhcnJheSwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgXG4gICAgdmFyIHRvdGFsSW5kaWNlcyA9IHNpemUgKiA2O1xuXG4gICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodG90YWxJbmRpY2VzKTtcblxuXHQvLyBmaWxsIHRoZSBpbmRpY2VzIHdpdGggdGhlIHF1YWRzIHRvIGRyYXdcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IHRvdGFsSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICBpbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICBpbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHM7IiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudXRpbHNcbiAqL1xudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgX3VpZDogMCxcbiAgICBfc2FpZEhlbGxvOiBmYWxzZSxcblxuICAgIEV2ZW50RW1pdHRlcjogICByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgcGx1Z2luVGFyZ2V0OiAgIHJlcXVpcmUoJy4vcGx1Z2luVGFyZ2V0JyksXG4gICAgYXN5bmM6ICAgICAgICAgIHJlcXVpcmUoJ2FzeW5jJyksXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZS5cbiAgICAgKi9cbiAgICB1aWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICByZXR1cm4gKyt1dGlscy5fdWlkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYW4gW1IsIEcsIEJdIGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHBhcmFtICB7bnVtYmVyW119IFtvdXQ9W11dXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgW1IsIEcsIEJdIG9mIHRoZSBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgycmdiOiBmdW5jdGlvbiAoaGV4LCBvdXQpXG4gICAge1xuICAgICAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICAgICAgb3V0WzBdID0gKGhleCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMV0gPSAoaGV4ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzJdID0gKGhleCAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnN0cmluZzogZnVuY3Rpb24gKGhleClcbiAgICB7XG4gICAgICAgIGhleCA9IGhleC50b1N0cmluZygxNik7XG4gICAgICAgIGhleCA9ICcwMDAwMDAnLnN1YnN0cigwLCA2IC0gaGV4Lmxlbmd0aCkgKyBoZXg7XG5cbiAgICAgICAgcmV0dXJuICcjJyArIGhleDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkgdG8gYSBoZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmdiIHtudW1iZXJbXX1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb2xvciBudW1iZXJcbiAgICAgKi9cbiAgICByZ2IyaGV4OiBmdW5jdGlvbiAocmdiKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgocmdiWzBdKjI1NSA8PCAxNikgKyAocmdiWzFdKjI1NSA8PCA4KSArIHJnYlsyXSoyNTUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZFxuICAgICAqL1xuICAgIGNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXM6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBuZ0hlYWQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFCQVFNQUFBREQ4cDJPQUFBQUExQk1WRVgvJztcbiAgICAgICAgdmFyIHBuZ0VuZCA9ICdBQUFBQ2tsRVFWUUkxMk5nQUFBQUFnQUI0aUc4TXdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG4gICAgICAgIHZhciBtYWdlbnRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSA2O1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcblxuICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1hZ2VudGEsIDAsIDApO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh5ZWxsb3csIDIsIDApO1xuXG4gICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwwLDEsMSkuZGF0YTtcblxuICAgICAgICByZXR1cm4gKGRhdGFbMF0gPT09IDI1NSAmJiBkYXRhWzFdID09PSAwICYmIGRhdGFbMl0gPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIG51bWJlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICogdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIFN0YXJsaW5nIEZyYW1ld29yayBhcyBpdHMgcHJldHR5IG5lYXQgOylcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICovXG4gICAgZ2V0TmV4dFBvd2VyT2ZUd286IGZ1bmN0aW9uIChudW1iZXIpXG4gICAge1xuICAgICAgICAvLyBzZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG93ZXJfb2ZfdHdvI0Zhc3RfYWxnb3JpdGhtX3RvX2NoZWNrX2lmX2FfcG9zaXRpdmVfbnVtYmVyX2lzX2FfcG93ZXJfb2ZfdHdvXG4gICAgICAgIGlmIChudW1iZXIgPiAwICYmIChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDE7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPCBudW1iZXIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzdWx0IDw8PSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBtYWtlIGEgcG93ZXIgb2YgdHdvIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9XG4gICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybiAod2lkdGggPiAwICYmICh3aWR0aCAmICh3aWR0aCAtIDEpKSA9PT0gMCAmJiBoZWlnaHQgPiAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIGFuIGFzc2V0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwcmVmaXhcbiAgICAgKiB1c2VkIGJ5IHNwcml0ZXNoZWV0cyBhbmQgaW1hZ2UgdXJsc1xuICAgICAqXG4gICAgICogQHBhcmFtIHVybCB7c3RyaW5nfSB0aGUgaW1hZ2UgcGF0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRSZXNvbHV0aW9uT2ZVcmw6IGZ1bmN0aW9uICh1cmwpXG4gICAge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IENPTlNULlJFVElOQV9QUkVGSVguZXhlYyh1cmwpO1xuXG4gICAgICAgIGlmIChyZXNvbHV0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlc29sdXRpb25bMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvZ3Mgb3V0IHRoZSB2ZXJzaW9uIGFuZCByZW5kZXJlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBydW5uaW5nIGluc3RhbmNlIG9mIFBJWEkuXG4gICAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoaXMgbWVzc2FnZSB5b3UgY2FuIHNldCBgUElYSS51dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtgXG4gICAgICogc28gdGhlIGxpYnJhcnkgdGhpbmtzIGl0IGFscmVhZHkgc2FpZCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgZG9pbmcgdGhhdCB3aWxsIGZvcmV2ZXJcbiAgICAgKiBtYWtlcyB5b3UgYSBqZXJrIGZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBzdHJpbmcgcmVuZGVyZXIgdHlwZSB0byBsb2cuXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIHNheUhlbGxvOiBmdW5jdGlvbiAodHlwZSlcbiAgICB7XG4gICAgICAgIGlmICh1dGlscy5fc2FpZEhlbGxvKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZScpID4gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW1xuICAgICAgICAgICAgICAgICdcXG4gJWMgJWMgJWMgUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSDinLAgJyArIHR5cGUgKyAnIOKcsCAgJWMgJyArICcgJWMgJyArICcgaHR0cDovL3d3dy5waXhpanMuY29tLyAgJWMgJWMg4pmlJWPimaUlY+KZpSBcXG5cXG4nLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjY2YTU7IGJhY2tncm91bmQ6ICMwMzAzMDc7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmZjM2RjOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7J1xuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3MpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1BpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0gJyArIHR5cGUgKyAnIC0gaHR0cDovL3d3dy5waXhpanMuY29tLycpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmb3IgY2hlY2tpbmcgZm9yIHdlYmdsIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNXZWJHTFN1cHBvcnRlZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHZhciBjb250ZXh0T3B0aW9ucyA9IHsgc3RlbmNpbDogdHJ1ZSB9O1xuICAgICAgICB0cnlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgY29udGV4dE9wdGlvbnMpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBjb250ZXh0T3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIShnbCAmJiBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnN0ZW5jaWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzaWduIG9mIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIG4ge251bWJlcn1cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIG4gaXMgMCwgLTEgaWYgbiBpcyBuZWdhdGl2ZSwgMSBpZiBuIGkgcG9zaXRpdmVcbiAgICAgKi9cbiAgICBzaWduOiBmdW5jdGlvbiAobilcbiAgICB7XG4gICAgICAgIHJldHVybiBuID8gKG4gPCAwID8gLTEgOiAxKSA6IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZUl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydElkeCBUaGUgaW5kZXggdG8gYmVnaW4gcmVtb3ZpbmcgZnJvbSAoaW5jbHVzaXZlKVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVJdGVtczogZnVuY3Rpb24gKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KVxuICAgIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN0YXJ0SWR4ID49IGxlbmd0aCB8fCByZW1vdmVDb3VudCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVtb3ZlQ291bnQgPSAoc3RhcnRJZHgrcmVtb3ZlQ291bnQgPiBsZW5ndGggPyBsZW5ndGgtc3RhcnRJZHggOiByZW1vdmVDb3VudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydElkeCwgbGVuID0gbGVuZ3RoLXJlbW92ZUNvdW50OyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyLmxlbmd0aCA9IGxlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge30sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge31cbn07XG4iLCIvKipcbiAqIE1peGlucyBmdW5jdGlvbmFsaXR5IHRvIG1ha2UgYW4gb2JqZWN0IGhhdmUgXCJwbHVnaW5zXCIuXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS51dGlsc1xuICogQHBhcmFtIG9iaiB7b2JqZWN0fSBUaGUgb2JqZWN0IHRvIG1peCBpbnRvLlxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgcGx1Z2luVGFyZ2V0Lm1peGluKE15T2JqZWN0KTtcbiAqL1xuZnVuY3Rpb24gcGx1Z2luVGFyZ2V0KG9iailcbntcbiAgICBvYmouX19wbHVnaW5zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcGx1Z2luIHRvIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHBsdWdpbk5hbWUge3N0cmluZ30gVGhlIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQuXG4gICAgICogQHBhcmFtIGN0b3Ige0Z1bmN0aW9ufSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBwbHVnaW4uXG4gICAgICovXG4gICAgb2JqLnJlZ2lzdGVyUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGN0b3IpXG4gICAge1xuICAgICAgICBvYmouX19wbHVnaW5zW3BsdWdpbk5hbWVdID0gY3RvcjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5pbml0UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLnBsdWdpbnMgfHwge307XG5cbiAgICAgICAgZm9yICh2YXIgbyBpbiBvYmouX19wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBuZXcgKG9iai5fX3BsdWdpbnNbb10pKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmRlc3Ryb3lQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGZvciAodmFyIG8gaW4gdGhpcy5wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG51bGw7XG4gICAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvKipcbiAgICAgKiBNaXhlcyBpbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGx1Z2luVGFyZ2V0IGludG8gYW5vdGhlciBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3Qge29iamVjdH0gVGhlIG9iaiB0byBtaXggaW50b1xuICAgICAqL1xuICAgIG1peGluOiBmdW5jdGlvbiBtaXhpbihvYmopXG4gICAge1xuICAgICAgICBwbHVnaW5UYXJnZXQob2JqKTtcbiAgICB9XG59O1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKSxcbiAgICBtZXNoID0gcmVxdWlyZSgnLi9tZXNoJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi9leHRyYXMnKSxcbiAgICBmaWx0ZXJzID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgU3ByaXRlQmF0Y2hcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkuUGFydGljbGVDb250YWluZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlQmF0Y2ggPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuJyk7XG59O1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIEFzc2V0TG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLmxvYWRlcnMuTG9hZGVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuQXNzZXRMb2FkZXIgPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy4nKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvcmUsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RhZ2VcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RhZ2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignWW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIFBJWEkgU3RhZ2UgYW55IG1vcmUsIHlvdSBjYW4gc2ltcGx5IHJlbmRlciBhbnkgY29udGFpbmVyLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgRGlzcGxheU9iamVjdENvbnRhaW5lclxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBEaXNwbGF5T2JqZWN0Q29udGFpbmVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Rpc3BsYXlPYmplY3RDb250YWluZXIgaGFzIGJlZW4gc2hvcnRlbmVkIHRvIENvbnRhaW5lciwgcGxlYXNlIHVzZSBDb250YWluZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdHJpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdHJpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgU3RyaXAgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBNZXNoIGFuZCBtb3ZlZCB0byBtZXNoLk1lc2gsIHBsZWFzZSB1c2UgbWVzaC5NZXNoIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guTWVzaDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFJvcGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLlJvcGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgUm9wZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgUm9wZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBtZXNoLlJvcGUsIHBsZWFzZSB1c2UgbWVzaC5Sb3BlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guUm9wZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIE1vdmllQ2xpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXBcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgTW92aWVDbGlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBNb3ZpZUNsaXAgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLk1vdmllQ2xpcCwgcGxlYXNlIHVzZSBleHRyYXMuTW92aWVDbGlwIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5Nb3ZpZUNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUaWxpbmdTcHJpdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRpbGluZ1Nwcml0ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGlsaW5nU3ByaXRlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5UaWxpbmdTcHJpdGUsIHBsZWFzZSB1c2UgZXh0cmFzLlRpbGluZ1Nwcml0ZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuVGlsaW5nU3ByaXRlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQml0bWFwVGV4dFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJpdG1hcFRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJpdG1hcFRleHQgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLkJpdG1hcFRleHQsIHBsZWFzZSB1c2UgZXh0cmFzLkJpdG1hcFRleHQgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLkJpdG1hcFRleHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBibGVuZE1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgYmxlbmRNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYmxlbmRNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBCTEVORF9NT0RFUywgcGxlYXNlIHVzZSBCTEVORF9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkJMRU5EX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2NhbGVNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIHNjYWxlTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHNjYWxlTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gU0NBTEVfTU9ERVMsIHBsZWFzZSB1c2UgU0NBTEVfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TQ0FMRV9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5CYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCYXNlVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuQmFzZVRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5UZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLlRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5UZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5UZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgbWF0aFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIG1hdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBtYXRoIG5hbWVzcGFjZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgYWNjZXNzIG1lbWJlcnMgYWxyZWFkeSBhY2Nlc3NpYmxlIG9uIFBJWEkuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBQSVhJLlNwcml0ZSNzZXRUZXh0dXJlXG4gKiBAc2VlIFBJWEkuU3ByaXRlI3RleHR1cmVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0dXJlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0dXJlIHByb3BlcnR5LCBlLmcgOiBzcHJpdGUudGV4dHVyZSA9IHRleHR1cmU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuZXh0cmFzLkJpdG1hcFRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteUJpdG1hcFRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15VGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFN0eWxlXG4gKiBAc2VlIFBJWEkuVGV4dCNzdHlsZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpXG57XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgIGNvbnNvbGUud2Fybignc2V0U3R5bGUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5LCBlLmcgOiBteVRleHQuc3R5bGUgPSBzdHlsZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAc2VlIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHR1cmUucHJvdG90eXBlLnNldEZyYW1lID0gZnVuY3Rpb24oZnJhbWUpXG57XG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIGNvbnNvbGUud2Fybignc2V0RnJhbWUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIGZyYW1lIHByb3BlcnR5LCBlLmcgOiBteVRleHR1cmUuZnJhbWUgPSBmcmFtZTsnKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpbHRlcnMsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkFic3RyYWN0RmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkFic3RyYWN0RmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEFic3RyYWN0RmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuQWJzdHJhY3RGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEFic3RyYWN0RmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQWJzdHJhY3RGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuRlhBQUZpbHRlclxuICAgICAqIEBzZWUgUElYSS5GWEFBRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEZYQUFGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5GWEFBRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBGWEFBRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuRlhBQUZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgU3ByaXRlTWFza0ZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIFNwcml0ZU1hc2tGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TcHJpdGVNYXNrRmlsdGVyO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS51dGlscy51dWlkXG4gKiBAc2VlIFBJWEkudXRpbHMudWlkXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gKi9cbmNvcmUudXRpbHMudXVpZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29uc29sZS53YXJuKCd1dGlscy51dWlkKCkgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB1dGlscy51aWQoKSBmcm9tIG5vdyBvbi4nKTtcbiAgICByZXR1cm4gY29yZS51dGlscy51aWQoKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIEJpdG1hcFRleHQgb2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0IHVzaW5nIGJpdG1hcCBmb250LiBUb1xuICogc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLCAnXFxyJyBvciAnXFxyXFxuJyBpbiB5b3VyIHN0cmluZy4gWW91IGNhbiBnZW5lcmF0ZSB0aGUgZm50IGZpbGVzIHVzaW5nOlxuICpcbiAqIEEgQml0bWFwVGV4dCBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGZvbnQgaXMgbG9hZGVkXG4gKlxuICogYGBganNcbiAqIC8vIGluIHRoaXMgY2FzZSB0aGUgZm9udCBpcyBpbiBhIGZpbGUgY2FsbGVkICdkZXN5cmVsLmZudCdcbiAqIHZhciBiaXRtYXBUZXh0ID0gbmV3IFBJWEkuZXh0cmFzLkJpdG1hcFRleHQoXCJ0ZXh0IHVzaW5nIGEgZmFuY3kgZm9udCFcIiwge2ZvbnQ6IFwiMzVweCBEZXN5cmVsXCIsIGFsaWduOiBcInJpZ2h0XCJ9KTtcbiAqIGBgYFxuICpcbiAqXG4gKiBodHRwOi8vd3d3LmFuZ2VsY29kZS5jb20vcHJvZHVjdHMvYm1mb250LyBmb3Igd2luZG93cyBvclxuICogaHR0cDovL3d3dy5ibWdseXBoLmNvbS8gZm9yIG1hYy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIHN0eWxlIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gc3R5bGUuZm9udCB7c3RyaW5nfG9iamVjdH0gVGhlIGZvbnQgZGVzY3JpcHRvciBmb3IgdGhlIG9iamVjdCwgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZyBvZiBmb3JtXG4gKiAgICAgIFwiMjRweCBGb250TmFtZVwiIG9yIFwiRm9udE5hbWVcIiBvciBhcyBhbiBvYmplY3Qgd2l0aCBleHBsaWNpdCBuYW1lL3NpemUgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5uYW1lXSB7c3RyaW5nfSBUaGUgYml0bWFwIGZvbnQgaWRcbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5zaXplXSB7bnVtYmVyfSBUaGUgc2l6ZSBvZiB0aGUgZm9udCBpbiBwaXhlbHMsIGUuZy4gMjRcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3RcbiAqICAgICAgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS50aW50PTB4RkZGRkZGXSB7bnVtYmVyfSBUaGUgdGludCBjb2xvclxuICovXG5mdW5jdGlvbiBCaXRtYXBUZXh0KHRleHQsIHN0eWxlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGxldHRlciBzcHJpdGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbHlwaHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mb250ID0ge1xuICAgICAgICB0aW50OiBzdHlsZS50aW50ICE9PSB1bmRlZmluZWQgPyBzdHlsZS50aW50IDogMHhGRkZGRkYsXG4gICAgICAgIGFsaWduOiBzdHlsZS5hbGlnbiB8fCAnbGVmdCcsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIHNpemU6IDBcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBmb250LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mb250ID0gc3R5bGUuZm9udDsgLy8gcnVuIGZvbnQgc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggd2lkdGggb2YgdGhpcyBiaXRtYXAgdGV4dCBpbiBwaXhlbHMuIElmIHRoZSB0ZXh0IHByb3ZpZGVkIGlzIGxvbmdlciB0aGFuIHRoZSB2YWx1ZSBwcm92aWRlZCwgbGluZSBicmVha3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoZSBsYXN0IHdoaXRlc3BhY2UuXG4gICAgICogRGlzYWJsZSBieSBzZXR0aW5nIHZhbHVlIHRvIDBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggbGluZSBoZWlnaHQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBUZXh0LCBpZTogd2hlbiB0cnlpbmcgdG8gdmVydGljYWxseSBhbGlnbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpcnR5IHN0YXRlIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkJpdG1hcFRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuQml0bWFwVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCaXRtYXBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCaXRtYXBUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRpbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC50aW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC50aW50ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCkgPyB2YWx1ZSA6IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdsZWZ0J1xuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGFsaWduOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQuYWxpZ247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LmFsaWduID0gdmFsdWUgfHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9udCBkZXNjcmlwdG9yIG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Rm9udH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBmb250OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWUuc2xpY2UoMSkuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gcGFyc2VJbnQodmFsdWVbMF0sIDEwKSA6IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicgPyB2YWx1ZS5zaXplIDogcGFyc2VJbnQodmFsdWUuc2l6ZSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGRhdGEgPSBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV07XG4gICAgdmFyIHBvcyA9IG5ldyBjb3JlLlBvaW50KCk7XG4gICAgdmFyIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgdmFyIGNoYXJzID0gW107XG4gICAgdmFyIGxhc3RMaW5lV2lkdGggPSAwO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBsaW5lV2lkdGhzID0gW107XG4gICAgdmFyIGxpbmUgPSAwO1xuICAgIHZhciBzY2FsZSA9IHRoaXMuX2ZvbnQuc2l6ZSAvIGRhdGEuc2l6ZTtcbiAgICB2YXIgbGFzdFNwYWNlID0gLTE7XG4gICAgdmFyIG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHQubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSB0aGlzLnRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgbGFzdFNwYWNlID0gLyhcXHMpLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpID8gaSA6IGxhc3RTcGFjZTtcblxuICAgICAgICBpZiAoLyg/OlxcclxcbnxcXHJ8XFxuKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RTcGFjZSAhPT0gLTEgJiYgdGhpcy5tYXhXaWR0aCA+IDAgJiYgcG9zLnggKiBzY2FsZSA+IHRoaXMubWF4V2lkdGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXMoY2hhcnMsIGxhc3RTcGFjZSwgaSAtIGxhc3RTcGFjZSk7XG4gICAgICAgICAgICBpID0gbGFzdFNwYWNlO1xuICAgICAgICAgICAgbGFzdFNwYWNlID0gLTE7XG5cbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFyRGF0YSA9IGRhdGEuY2hhcnNbY2hhckNvZGVdO1xuXG4gICAgICAgIGlmICghY2hhckRhdGEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZDaGFyQ29kZSAmJiBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJzLnB1c2goe3RleHR1cmU6Y2hhckRhdGEudGV4dHVyZSwgbGluZTogbGluZSwgY2hhckNvZGU6IGNoYXJDb2RlLCBwb3NpdGlvbjogbmV3IGNvcmUuUG9pbnQocG9zLnggKyBjaGFyRGF0YS54T2Zmc2V0LCBwb3MueSArIGNoYXJEYXRhLnlPZmZzZXQpfSk7XG4gICAgICAgIGxhc3RMaW5lV2lkdGggPSBwb3MueCArIChjaGFyRGF0YS50ZXh0dXJlLndpZHRoICsgY2hhckRhdGEueE9mZnNldCk7XG4gICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLnhBZHZhbmNlO1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgKGNoYXJEYXRhLnlPZmZzZXQgKyBjaGFyRGF0YS50ZXh0dXJlLmhlaWdodCkpO1xuICAgICAgICBwcmV2Q2hhckNvZGUgPSBjaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcblxuICAgIHZhciBsaW5lQWxpZ25PZmZzZXRzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IGxpbmU7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBhbGlnbk9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9mb250LmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZUFsaWduT2Zmc2V0cy5wdXNoKGFsaWduT2Zmc2V0KTtcbiAgICB9XG5cbiAgICB2YXIgbGVuQ2hhcnMgPSBjaGFycy5sZW5ndGg7XG4gICAgdmFyIHRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuQ2hhcnM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjID0gdGhpcy5fZ2x5cGhzW2ldOyAvLyBnZXQgdGhlIG5leHQgZ2x5cGggc3ByaXRlXG5cbiAgICAgICAgaWYgKGMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMudGV4dHVyZSA9IGNoYXJzW2ldLnRleHR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjID0gbmV3IGNvcmUuU3ByaXRlKGNoYXJzW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZ2x5cGhzLnB1c2goYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjLnBvc2l0aW9uLnggPSAoY2hhcnNbaV0ucG9zaXRpb24ueCArIGxpbmVBbGlnbk9mZnNldHNbY2hhcnNbaV0ubGluZV0pICogc2NhbGU7XG4gICAgICAgIGMucG9zaXRpb24ueSA9IGNoYXJzW2ldLnBvc2l0aW9uLnkgKiBzY2FsZTtcbiAgICAgICAgYy5zY2FsZS54ID0gYy5zY2FsZS55ID0gc2NhbGU7XG4gICAgICAgIGMudGludCA9IHRpbnQ7XG5cbiAgICAgICAgaWYgKCFjLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBjaGlsZHJlbi5cbiAgICBmb3IgKGkgPSBsZW5DaGFyczsgaSA8IHRoaXMuX2dseXBocy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5fZ2x5cGhzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHRXaWR0aCA9IG1heExpbmVXaWR0aCAqIHNjYWxlO1xuICAgIHRoaXMudGV4dEhlaWdodCA9IChwb3MueSArIGRhdGEubGluZUhlaWdodCkgKiBzY2FsZTtcbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSBtYXhMaW5lSGVpZ2h0ICogc2NhbGU7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvZiB0aGlzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0ZXh0IGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGdldExvY2FsQm91bmRzXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cblxuQml0bWFwVGV4dC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHJldHVybiBjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn07XG5cbkJpdG1hcFRleHQuZm9udHMgPSB7fTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgTW92aWVDbGlwIGlzIGEgc2ltcGxlIHdheSB0byBkaXNwbGF5IGFuIGFuaW1hdGlvbiBkZXBpY3RlZCBieSBhIGxpc3Qgb2YgdGV4dHVyZXMuXG4gKlxuICogYGBganNcbiAqIHZhciBhbGllbkltYWdlcyA9IFtcImltYWdlX3NlcXVlbmNlXzAxLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDIucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMy5wbmdcIixcImltYWdlX3NlcXVlbmNlXzA0LnBuZ1wiXTtcbiAqIHZhciB0ZXh0dXJlQXJyYXkgPSBbXTtcbiAqXG4gKiBmb3IgKHZhciBpPTA7IGkgPCA0OyBpKyspXG4gKiB7XG4gKiAgICAgIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZShhbGllbkltYWdlc1tpXSk7XG4gKiAgICAgIHRleHR1cmVBcnJheS5wdXNoKHRleHR1cmUpO1xuICogfTtcbiAqXG4gKiB2YXIgbWMgPSBuZXcgUElYSS5Nb3ZpZUNsaXAodGV4dHVyZUFycmF5KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmVzIHtQSVhJLlRleHR1cmVbXXxPYmplY3RbXX0gYW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuVGV4dHVyZX0gb3IgZnJhbWUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIGFuaW1hdGlvblxuICogQHBhcmFtIHRleHR1cmVzW10udGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUge0BsaW5rIFBJWEkuVGV4dHVyZX0gb2YgdGhlIGZyYW1lXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50aW1lIHtudW1iZXJ9IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWUgaW4gbXNcbiAqL1xuZnVuY3Rpb24gTW92aWVDbGlwKHRleHR1cmVzKVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZXNbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUgPyB0ZXh0dXJlc1swXSA6IHRleHR1cmVzWzBdLnRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVzID0gdGV4dHVyZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3BlZWQgdGhhdCB0aGUgTW92aWVDbGlwIHdpbGwgcGxheSBhdC4gSGlnaGVyIGlzIGZhc3RlciwgbG93ZXIgaXMgc2xvd2VyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIG1vdmllIGNsaXAgcmVwZWF0cyBhZnRlciBwbGF5aW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5sb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIE1vdmllQ2xpcCBmaW5pc2hlcyBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKi9cbiAgICB0aGlzLm9uQ29tcGxldGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRWxhcHNlZCB0aW1lIHNpbmNlIGFuaW1hdGlvbiBoYXMgYmVlbiBzdGFydGVkLCB1c2VkIGludGVybmFsbHkgdG8gZGlzcGxheSBjdXJyZW50IHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgTW92aWVDbGlwIGlzIGN1cnJlbnRseSBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTW92aWVDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcbk1vdmllQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNb3ZpZUNsaXA7XG5tb2R1bGUuZXhwb3J0cyA9IE1vdmllQ2xpcDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTW92aWVDbGlwLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIHRvdGFsRnJhbWVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBNb3ZpZUNsaXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbnVtYmVyIG9mIHRleHR1cmVzXG4gICAgICogYXNzaWduZWQgdG8gdGhlIE1vdmllQ2xpcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0b3RhbEZyYW1lczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgdGV4dHVyZXMgdXNlZCBmb3IgdGhpcyBNb3ZpZUNsaXBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVtdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICpcbiAgICAgKi9cbiAgICB0ZXh0dXJlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzLnB1c2godmFsdWVbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucy5wdXNoKHZhbHVlW2ldLnRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAqIFRoZSBNb3ZpZUNsaXBzIGN1cnJlbnQgZnJhbWUgaW5kZXhcbiAgICAqXG4gICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICogQHJlYWRvbmx5XG4gICAgKi9cbiAgICBjdXJyZW50RnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSkgJSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lIDwgMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUgKz0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGcmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBQbGF5cyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKHRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBnb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RvcCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRTdG9wID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG59O1xuXG4vKipcbiAqIEdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZSBhbmQgYmVnaW5zIHBsYXlpbmcgdGhlIE1vdmllQ2xpcFxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdGFydCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRQbGF5ID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLnBsYXkoKTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqIEBwcml2YXRlXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB2YXIgZWxhcHNlZCA9IHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZHVyYXRpb25zICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGxhZyA9IHRoaXMuX2N1cnJlbnRUaW1lICUgMSAqIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG5cbiAgICAgICAgbGFnICs9IGVsYXBzZWQgLyA2MCAqIDEwMDA7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA8IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lLS07XG4gICAgICAgICAgICBsYWcgKz0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWduID0gTWF0aC5zaWduKHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPj0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGFnIC09IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0gKiBzaWduO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gc2lnbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGxhZyAvIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGVsYXBzZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lIDwgMCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCgwKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VGltZSA+PSB0aGlzLl90ZXh0dXJlcy5sZW5ndGggJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AodGhpcy5fdGV4dHVyZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG5cbn07XG5cbi8qXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBkZXN0cm95cyBpdFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCApXG57XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGZyYW1lIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgZnJhbWVzIGlkcyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUZyYW1lcyA9IGZ1bmN0aW9uIChmcmFtZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tRnJhbWUoZnJhbWVzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBpbWFnZSB1cmxzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tSW1hZ2VzID0gZnVuY3Rpb24gKGltYWdlcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59OyIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIC8vIGEgc3ByaXRlIHVzZSBkZm9yIHJlbmRlcmluZyB0ZXh0dXJlcy4uXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICBDYW52YXNUaW50ZXIgPSByZXF1aXJlKCcuLi9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyk7XG5cbi8qKlxuICogQSB0aWxpbmcgc3ByaXRlIGlzIGEgZmFzdCB3YXkgb2YgcmVuZGVyaW5nIGEgdGlsaW5nIGltYWdlXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZSB7VGV4dHVyZX0gdGhlIHRleHR1cmUgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gVGlsaW5nU3ByaXRlKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsaW5nIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVNjYWxlID0gbmV3IGNvcmUuUG9pbnQoMSwxKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIG9mZnNldCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG5ldyBjb3JlLlBvaW50KDAsMCk7XG5cbiAgICAvLy8vLyBwcml2YXRlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2l0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBuZXcgY29yZS5UZXh0dXJlVXZzKCk7XG5cbiAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gbnVsbDtcblxuICAgIC8vVE9ETyBtb3ZlLi5cbiAgICB0aGlzLnNoYWRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKFxuXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVUcmFuc2Zvcm07JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnICAgY29vcmQgLT0gdVRyYW5zZm9ybS54eTsnLFxuICAgICAgICAnICAgY29vcmQgLz0gdVRyYW5zZm9ybS56dzsnLFxuICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGNvb3JkOycsXG5cbiAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjMiB1UGl4ZWxTaXplOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gbW9kKHZUZXh0dXJlQ29vcmQsIHVGcmFtZS56dyk7JyxcbiAgICAgICAgJyAgIGNvb3JkID0gY2xhbXAoY29vcmQsIHVQaXhlbFNpemUsIHVGcmFtZS56dyAtIHVQaXhlbFNpemUpOycsXG4gICAgICAgICcgICBjb29yZCArPSB1RnJhbWUueHk7JyxcblxuICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gIHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQpICogdkNvbG9yIDsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1RnJhbWU6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1VHJhbnNmb3JtOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVBpeGVsU2l6ZSA6IHsgdHlwZSA6ICcyZnYnLCB2YWx1ZTogWzEsIDFdfVxuICAgICAgICAgICAgfVxuICAgICAgKTtcbn1cblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWxpbmdTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbGluZ1Nwcml0ZTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWxpbmdTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGlsaW5nU3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIHR3ZWFrIG91ciB0ZXh0dXJlIHRlbXBvcmFyaWx5Li5cbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZSB8fCAhdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZW1wVXZzID0gdGV4dHVyZS5fdXZzLFxuICAgICAgICB0ZW1wV2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgdGVtcEhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCxcbiAgICAgICAgdHcgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoLFxuICAgICAgICB0aCA9IHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGhpcy5fdXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMF0gPSAxLjAvdHc7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVsxXSA9IDEuMC90aDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVswXSA9IHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzFdID0gdGVtcFV2cy55MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMl0gPSB0ZW1wVXZzLngxIC0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbM10gPSB0ZW1wVXZzLnkyIC0gdGVtcFV2cy55MDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMF0gPSAodGhpcy50aWxlUG9zaXRpb24ueCAlICh0ZW1wV2lkdGggKiB0aGlzLnRpbGVTY2FsZS54KSkgLyB0aGlzLl93aWR0aDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzFdID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgJSAodGVtcEhlaWdodCAqIHRoaXMudGlsZVNjYWxlLnkpKSAvIHRoaXMuX2hlaWdodDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzJdID0gKCB0dyAvIHRoaXMuX3dpZHRoICkgKiB0aGlzLnRpbGVTY2FsZS54O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbM10gPSAoIHRoIC8gdGhpcy5faGVpZ2h0ICkgKiB0aGlzLnRpbGVTY2FsZS55O1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRlbXBVdnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0ZW1wV2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGVtcEhlaWdodDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZiAoIXRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQsXG4gICAgICAgIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICBiYXNlVGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIG1vZFggPSAodGhpcy50aWxlUG9zaXRpb24ueCAvIHRoaXMudGlsZVNjYWxlLngpICUgdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIG1vZFkgPSAodGhpcy50aWxlUG9zaXRpb24ueSAvIHRoaXMudGlsZVNjYWxlLnkpICUgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuXG4gICAgLy8gY3JlYXRlIGEgbmljZSBzaGlueSBwYXR0ZXJuIVxuICAgIC8vIFRPRE8gdGhpcyBuZWVkcyB0byBiZSByZWZyZXNoZWQgaWYgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICBpZighdGhpcy5fY2FudmFzUGF0dGVybilcbiAgICB7XG4gICAgICAgIC8vIGN1dCBhbiBvYmplY3QgZnJvbSBhIHNwcml0ZXNoZWV0Li5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgY29yZS5DYW52YXNCdWZmZXIodGV4dHVyZS5fZnJhbWUud2lkdGgsIHRleHR1cmUuX2ZyYW1lLmhlaWdodCk7XG5cbiAgICAgICAgLy8gVGludCB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMudGludGVkVGV4dHVyZSwgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKGJhc2VUZXh0dXJlLnNvdXJjZSwgLXRleHR1cmUuX2ZyYW1lLngsIC10ZXh0dXJlLl9mcmFtZS55KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gdGVtcENhbnZhcy5jb250ZXh0LmNyZWF0ZVBhdHRlcm4oIHRlbXBDYW52YXMuY2FudmFzLCAncmVwZWF0JyApO1xuICAgIH1cblxuICAgIC8vIHNldCBjb250ZXh0IHN0YXRlLi5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvbik7XG5cbiAgICAvLyBUT0RPIC0gdGhpcyBzaG91bGQgYmUgcm9sbGVkIGludG8gdGhlIHNldFRyYW5zZm9ybSBhYm92ZS4uXG4gICAgY29udGV4dC5zY2FsZSh0aGlzLnRpbGVTY2FsZS54LHRoaXMudGlsZVNjYWxlLnkpO1xuXG4gICAgY29udGV4dC50cmFuc2xhdGUobW9kWCArICh0aGlzLmFuY2hvci54ICogLXRoaXMuX3dpZHRoICksXG4gICAgICAgICAgICAgICAgICAgICAgbW9kWSArICh0aGlzLmFuY2hvci55ICogLXRoaXMuX2hlaWdodCkpO1xuXG4gICAgLy8gY2hlY2sgYmxlbmQgbW9kZVxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vIGZpbGwgdGhlIHBhdHRlcm4hXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9jYW52YXNQYXR0ZXJuO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoLW1vZFgsXG4gICAgICAgICAgICAgICAgICAgICAtbW9kWSxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoIC8gdGhpcy50aWxlU2NhbGUueCxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCAvIHRoaXMudGlsZVNjYWxlLnkpO1xuXG5cbiAgICAvL1RPRE8gLSBwcmV0dHkgc3VyZSB0aGlzIGNhbiBiZSBkZWxldGVkLi4uXG4gICAgLy9jb250ZXh0LnRyYW5zbGF0ZSgtdGhpcy50aWxlUG9zaXRpb24ueCArICh0aGlzLmFuY2hvci54ICogdGhpcy5fd2lkdGgpLCAtdGhpcy50aWxlUG9zaXRpb24ueSArICh0aGlzLmFuY2hvci55ICogdGhpcy5faGVpZ2h0KSk7XG4gICAgLy9jb250ZXh0LnNjYWxlKDEgLyB0aGlzLnRpbGVTY2FsZS54LCAxIC8gdGhpcy50aWxlU2NhbGUueSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIHNwcml0ZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG5cbiAgICB2YXIgdzAgPSB3aWR0aCAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgIHZhciB3MSA9IHdpZHRoICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICB2YXIgaDAgPSBoZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICB2YXIgaDEgPSBoZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcblxuICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIG1pblgsXG4gICAgICAgIG1heFgsXG4gICAgICAgIG1pblksXG4gICAgICAgIG1heFk7XG5cbiAgICBtaW5YID0geDE7XG4gICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICBtaW5ZID0geTE7XG4gICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICBtYXhYID0geDE7XG4gICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICBtYXhZID0geTE7XG4gICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgYm91bmRzLnggPSBtaW5YO1xuICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcblxuICAgIHJldHVybiBib3VuZHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIGNoZWNrXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRpbGluZyBzcHJpdGVcbiAqXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWxlU2NhbGUgPSBudWxsO1xuICAgIHRoaXMuX3RpbGVTY2FsZU9mZnNldCA9IG51bGw7XG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHRpbGluZyBzcHJpdGUgdGhhdCB3aWxsIHVzZSBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZCx3aWR0aCxoZWlnaHQpXG57XG4gICAgdmFyIHRleHR1cmUgPSBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSAnICsgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUodGV4dHVyZSx3aWR0aCxoZWlnaHQpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCB3aWR0aCwgaGVpZ2h0LCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSksd2lkdGgsaGVpZ2h0KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gY29yZS5EaXNwbGF5T2JqZWN0LFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwID0gZmFsc2U7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSBudWxsO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsSGl0VGVzdCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxEZXN0cm95ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGlzIGRpc3BsYXkgb2JqZWN0IHRvIGJlIGNhY2hlZCBhcyBhIGJpdG1hcC5cbiAgICAgKiBUaGlzIGJhc2ljYWxseSB0YWtlcyBhIHNuYXAgc2hvdCBvZiB0aGUgZGlzcGxheSBvYmplY3QgYXMgaXQgaXMgYXQgdGhhdCBtb21lbnQuIEl0IGNhbiBwcm92aWRlIGEgcGVyZm9ybWFuY2UgYmVuZWZpdCBmb3IgY29tcGxleCBzdGF0aWMgZGlzcGxheU9iamVjdHMuXG4gICAgICogVG8gcmVtb3ZlIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnZmFsc2UnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgY2FjaGVBc0JpdG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZUFzQml0bWFwO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXAgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVBc0JpdG1hcCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IHRoaXMucmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSB0aGlzLnJlbmRlckNhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gdGhpcy51cGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHMgPSB0aGlzLmdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSA9IHRoaXMuZGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludCA9IHRoaXMuY29udGFpbnNQb2ludDtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX2NhY2hlQXNCaXRtYXBEZXN0cm95O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJvdW5kcyA9IHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fb3JpZ2luYWxEZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIFdlYkdMXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlciggdGhpcy5fY2FjaGVkU3ByaXRlICk7XG59O1xuXG4vKipcbiogUHJlcGFyZXMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZmlyc3Qgd2UgZmx1c2ggYW55dGhpbmcgbGVmdCBpbiB0aGUgcmVuZGVyZXIgKG90aGVyd2lzZSBpdCB3b3VsZCBnZXQgcmVuZGVyZWQgdG8gdGhlIGNhY2hlZCB0ZXh0dXJlKVxuICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuICAgIC8vdGhpcy5maWx0ZXJzPSBbXTtcbiAgICAvLyBuZXh0IHdlIGZpbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHVudHJhbnNmb3JtZWQgb2JqZWN0XG4gICAgLy8gdGhpcyBmdW5jdGlvbiBhbHNvIGNhbGxzIHVwZGF0ZXRyYW5zZm9ybSBvbiBhbGwgaXRzIGNoaWxkcmVuIGFzIHBhcnQgb2YgdGhlIG1lYXN1cmluZy4gVGhpcyBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgdHJhbnNmb3JtIGFnYWluIGluIHRoaXMgZnVuY3Rpb25cbiAgICAvLyBUT0RPIHBhc3MgYW4gb2JqZWN0IHRvIGNsb25lIHRvbz8gc2F2ZXMgaGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBvbmUgZWFjaCB0aW1lIVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuY2xvbmUoKTtcblxuICAgIC8vIGFkZCBzb21lIHBhZGRpbmchXG4gICAgaWYodGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5fZmlsdGVyc1swXS5wYWRkaW5nO1xuICAgICAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgICAgICBib3VuZHMueSAtPSBwYWRkaW5nO1xuXG4gICAgICAgIGJvdW5kcy53aWR0aCArPSBwYWRkaW5nICogMjtcbiAgICAgICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcbiAgICB9XG5cbiAgICAvLyBmb3Igbm93IHdlIGNhY2hlIHRoZSBjdXJyZW50IHJlbmRlclRhcmdldCB0aGF0IHRoZSB3ZWJHTCByZW5kZXJlciBpcyBjdXJyZW50bHkgdXNpbmcuXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBtb3JlIGVsZWdlbnQuLlxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0O1xuICAgIC8vIFdlIGFsc28gc3RvcmUgdGhlIGZpbHRlciBzdGFjayAtIEkgd2lsbCBkZWZpbml0ZWx5IGxvb2sgdG8gY2hhbmdlIGhvdyB0aGlzIHdvcmtzIGEgbGl0dGxlIGxhdGVyIGRvd24gdGhlIGxpbmUuXG4gICAgdmFyIHN0YWNrID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjaztcblxuICAgIC8vIHRoaXMgcmVuZGVyVGV4dHVyZSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlZCBEaXNwbGF5T2JqZWN0XG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cblxuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjYWNoZWRSZW5kZXJUYXJnZXQpO1xuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2sgPSBzdGFjaztcblxuICAgIHRoaXMucmVuZGVyV2ViR0wgICAgID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgICAgICAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyByZXN0b3JlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIGNhY2hlZCBzcHJpdGUgdG8gYXZvaWQgdGhlIG5hc3R5IGZsaWNrZXIuLlxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAvLyBtYXAgdGhlIGhpdCB0ZXN0Li5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBjYW52YXNcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzKCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbn07XG5cbi8vVE9ETyB0aGlzIGNhbiBiZSB0aGUgc2FtZSBhcyB0aGUgd2ViR0wgdmVyaXNvbi4uIHdpbGwgbmVlZCB0byBkbyBhIGxpdHRsZSB0d2Vha2luZyBmaXJzdCB0aG91Z2guLlxuLyoqXG4qIFByZXBhcmVzIHRoZSBDYW52YXMgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vZ2V0IGJvdW5kcyBhY3R1YWxseSB0cmFuc2Zvcm1zIHRoZSBvYmplY3QgZm9yIHVzIGFscmVhZHkhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5jb250ZXh0ID0gY2FjaGVkUmVuZGVyVGFyZ2V0O1xuXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBDYWxjdWxhdGVzIHRoZSBib3VuZHMgb2YgdGhlIGNhY2hlZCBzcHJpdGVcbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZ2V0Q2FjaGVkQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNwcml0ZS5nZXRCb3VuZHMoKTtcbn07XG5cbi8qKlxuKiBEZXN0cm95cyB0aGUgY2FjaGVkIHNwcml0ZS5cbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fdGV4dHVyZS5kZXN0cm95KCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwRGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jYWNoZUFzQml0bWFwID0gZmFsc2U7XG4gICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95KCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIG9iamVjdC5cbiAqXG4gKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICogQG1lbWJlciB7c3RyaW5nfVxuICovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZGlzcGxheSBvYmplY3QgaW4gdGhlIGNvbnRhaW5lclxuKlxuKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4qIEBwYXJhbSBuYW1lIHtzdHJpbmd9IGluc3RhbmNlIG5hbWVcbiogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuKi9cbmNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4qXG4qIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4qIEBwYXJhbSBwb2ludCB7UG9pbnR9IHRoZSBwb2ludCB0byB3cml0ZSB0aGUgZ2xvYmFsIHZhbHVlIHRvLiBJZiBudWxsIGEgbmV3IHBvaW50IHdpbGwgYmUgcmV0dXJuZWRcbiogQHJldHVybiB7UG9pbnR9XG4qL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRHbG9iYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb2ludClcbntcbiAgICBwb2ludCA9IHBvaW50IHx8IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICBpZih0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHBvaW50LnggPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICBwb2ludC55ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG9pbnQueCA9IHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMucG9zaXRpb24ueTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG5yZXF1aXJlKCcuL2NhY2hlQXNCaXRtYXAnKTtcbnJlcXVpcmUoJy4vZ2V0Q2hpbGRCeU5hbWUnKTtcbnJlcXVpcmUoJy4vZ2V0R2xvYmFsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZXh0cmFzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1vdmllQ2xpcDogICAgICByZXF1aXJlKCcuL01vdmllQ2xpcCcpLFxuICAgIFRpbGluZ1Nwcml0ZTogICByZXF1aXJlKCcuL1RpbGluZ1Nwcml0ZScpLFxuICAgIEJpdG1hcFRleHQ6ICAgICByZXF1aXJlKCcuL0JpdG1hcFRleHQnKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vLyBUT0RPIChjZW5nbGVyKSAtIFRoZSBZIGlzIGZsaXBwZWQgaW4gdGhpcyBzaGFkZXIgZm9yIHNvbWUgcmVhc29uLlxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBzaGFkZXIgOiBodHRwczovL3d3dy5zaGFkZXJ0b3kuY29tL3ZpZXcvbHNzR0RqIGJ5IEBtb3ZBWDEzaFxuICovXG5cbi8qKlxuICogQW4gQVNDSUkgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBBc2NpaUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgY2hhcmFjdGVyKGZsb2F0IG4sIHZlYzIgcClcXG57XFxuICAgIHAgPSBmbG9vcihwKnZlYzIoNC4wLCAtNC4wKSArIDIuNSk7XFxuICAgIGlmIChjbGFtcChwLngsIDAuMCwgNC4wKSA9PSBwLnggJiYgY2xhbXAocC55LCAwLjAsIDQuMCkgPT0gcC55KVxcbiAgICB7XFxuICAgICAgICBpZiAoaW50KG1vZChuL2V4cDIocC54ICsgNS4wKnAueSksIDIuMCkpID09IDEpIHJldHVybiAxLjA7XFxuICAgIH1cXG4gICAgcmV0dXJuIDAuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHk7XFxuXFxuICAgIHZlYzMgY29sID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBmbG9vciggdXYgLyBwaXhlbFNpemUgKSAqIHBpeGVsU2l6ZSAvIGRpbWVuc2lvbnMueHkpLnJnYjtcXG5cXG4gICAgZmxvYXQgZ3JheSA9IChjb2wuciArIGNvbC5nICsgY29sLmIpIC8gMy4wO1xcblxcbiAgICBmbG9hdCBuID0gIDY1NTM2LjA7ICAgICAgICAgICAgIC8vIC5cXG4gICAgaWYgKGdyYXkgPiAwLjIpIG4gPSA2NTYwMC4wOyAgICAvLyA6XFxuICAgIGlmIChncmF5ID4gMC4zKSBuID0gMzMyNzcyLjA7ICAgLy8gKlxcbiAgICBpZiAoZ3JheSA+IDAuNCkgbiA9IDE1MjU1MDg2LjA7IC8vIG9cXG4gICAgaWYgKGdyYXkgPiAwLjUpIG4gPSAyMzM4NTE2NC4wOyAvLyAmXFxuICAgIGlmIChncmF5ID4gMC42KSBuID0gMTUyNTIwMTQuMDsgLy8gOFxcbiAgICBpZiAoZ3JheSA+IDAuNykgbiA9IDEzMTk5NDUyLjA7IC8vIEBcXG4gICAgaWYgKGdyYXkgPiAwLjgpIG4gPSAxMTUxMjgxMC4wOyAvLyAjXFxuXFxuICAgIHZlYzIgcCA9IG1vZCggdXYgLyAoIHBpeGVsU2l6ZSAqIDAuNSApLCAyLjApIC0gdmVjMigxLjApO1xcbiAgICBjb2wgPSBjb2wgKiBjaGFyYWN0ZXIobiwgcCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sLCAxLjApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDggfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQXNjaWlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Bc2NpaUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc2NpaUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQXNjaWlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFzY2lpRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBzaXplIHVzZWQgYnkgdGhlIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkFzY2lpRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmxvb21GaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmxvb21GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xufVxuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsb29tRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb29tRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbG9vbUZpbHRlcjtcblxuQmxvb21GaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLlNDUkVFTik7XG5cbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvb21GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuXG4vKipcbiAqIFRoZSBCbHVyRGlyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvd2FyZCBhIGRpcmVjdGlvbiB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWFxuICogQHBhcmFtIHtudW1iZXJ9IGRpcllcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckRpckZpbHRlcihkaXJYLCBkaXJZKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBmbG9hdCBkaXJYO1xcbnVuaWZvcm0gZmxvYXQgZGlyWTtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1swXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDEyICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDEyICogc3RyZW5ndGgpICogZGlyWSApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkgKiAwLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkgKiAwLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkgKiAwLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pICogMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBkaXJYOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJYIHx8IDAgfSxcbiAgICAgICAgICAgIGRpclk6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclkgfHwgMCB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclggPSBkaXJYIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclkgPSBkaXJZIHx8IDA7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckRpckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckRpckZpbHRlcjtcblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKSB7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmICh0aGlzLnBhc3NlcyA9PT0gMSkge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0yOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gKHRoaXMucGFzc2VzKyhpKjIpKSAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckRpckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJYO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJYLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsdXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcbn1cblxuQmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckZpbHRlcjtcblxuQmx1ckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcGFzc2VzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzID0gdGhpcy5ibHVyWUZpbHRlci5wYXNzZXMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWEZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1clhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1clhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1clhGaWx0ZXI7XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1clhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSAgTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllGaWx0ZXI7XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSBNYXRoLmFicyh0aGlzLnN0cmVuZ3RoKSAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgU21hcnQgQmx1ciBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNtYXJ0Qmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAqIHBlcmNlbnQpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICBkZWx0YTogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjEsIHk6IDAuMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTbWFydEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNtYXJ0Qmx1ckZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDV4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogYGBganNcbiAqICB2YXIgY29sb3JNYXRyaXggPSBuZXcgUElYSS5Db2xvck1hdHJpeEZpbHRlcigpO1xuICogIGNvbnRhaW5lci5maWx0ZXJzID0gW2NvbG9yTWF0cml4XTtcbiAqICBjb2xvck1hdHJpeC5jb250cmFzdCgyKTtcbiAqIGBgYFxuICogQGF1dGhvciBDbMOpbWVudCBDaGVuZWJhdWx0IDxjbGVtZW50QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvck1hdHJpeEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBtWzI1XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuXFxuICAgIHZlYzQgYyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yID0gKG1bMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gbVs0XTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLmcgPSAobVs1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSBtWzldO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmIgPSAobVsxMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gbVsxNF07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYSA9IChtWzE1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSBtWzE5XTtcXG5cXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJzFmdicsIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yTWF0cml4RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvck1hdHJpeEZpbHRlcjtcblxuXG4vKipcbiAqIFRyYW5zZm9ybXMgY3VycmVudCBtYXRyaXggYW5kIHNldCB0aGUgbmV3IG9uZVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gaWYgdHJ1ZSwgY3VycmVudCBtYXRyaXggYW5kIG1hdHJpeCBhcmUgbXVsdGlwbGllZC4gSWYgZmFsc2UsIGp1c3Qgc2V0IHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIEBwYXJhbSBtYXRyaXhcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9sb2FkTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgbXVsdGlwbHkpXG57XG4gICAgbXVsdGlwbHkgPSAhIW11bHRpcGx5O1xuXG4gICAgdmFyIG5ld01hdHJpeCA9IG1hdHJpeDtcblxuICAgIGlmIChtdWx0aXBseSkge1xuICAgICAgICB0aGlzLl9tdWx0aXBseShuZXdNYXRyaXgsIHRoaXMudW5pZm9ybXMubS52YWx1ZSwgbWF0cml4KTtcbiAgICAgICAgbmV3TWF0cml4ID0gdGhpcy5fY29sb3JNYXRyaXgobmV3TWF0cml4KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBtYXRyaXhcbiAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSBuZXdNYXRyaXg7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDUnc1xuICpcbiAqIEBwYXJhbSBvdXQge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSBhIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0gYiB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIG91dCB7bnVtYmVyW119IChtYXQgNXg0KVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYilcbntcblxuICAgIC8vIFJlZCBDaGFubmVsXG4gICAgb3V0WzBdID0gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYls1XSkgKyAoYVsyXSAqIGJbMTBdKSArIChhWzNdICogYlsxNV0pO1xuICAgIG91dFsxXSA9IChhWzBdICogYlsxXSkgKyAoYVsxXSAqIGJbNl0pICsgKGFbMl0gKiBiWzExXSkgKyAoYVszXSAqIGJbMTZdKTtcbiAgICBvdXRbMl0gPSAoYVswXSAqIGJbMl0pICsgKGFbMV0gKiBiWzddKSArIChhWzJdICogYlsxMl0pICsgKGFbM10gKiBiWzE3XSk7XG4gICAgb3V0WzNdID0gKGFbMF0gKiBiWzNdKSArIChhWzFdICogYls4XSkgKyAoYVsyXSAqIGJbMTNdKSArIChhWzNdICogYlsxOF0pO1xuICAgIG91dFs0XSA9IChhWzBdICogYls0XSkgKyAoYVsxXSAqIGJbOV0pICsgKGFbMl0gKiBiWzE0XSkgKyAoYVszXSAqIGJbMTldKTtcblxuICAgIC8vIEdyZWVuIENoYW5uZWxcbiAgICBvdXRbNV0gPSAoYVs1XSAqIGJbMF0pICsgKGFbNl0gKiBiWzVdKSArIChhWzddICogYlsxMF0pICsgKGFbOF0gKiBiWzE1XSk7XG4gICAgb3V0WzZdID0gKGFbNV0gKiBiWzFdKSArIChhWzZdICogYls2XSkgKyAoYVs3XSAqIGJbMTFdKSArIChhWzhdICogYlsxNl0pO1xuICAgIG91dFs3XSA9IChhWzVdICogYlsyXSkgKyAoYVs2XSAqIGJbN10pICsgKGFbN10gKiBiWzEyXSkgKyAoYVs4XSAqIGJbMTddKTtcbiAgICBvdXRbOF0gPSAoYVs1XSAqIGJbM10pICsgKGFbNl0gKiBiWzhdKSArIChhWzddICogYlsxM10pICsgKGFbOF0gKiBiWzE4XSk7XG4gICAgb3V0WzldID0gKGFbNV0gKiBiWzRdKSArIChhWzZdICogYls5XSkgKyAoYVs3XSAqIGJbMTRdKSArIChhWzhdICogYlsxOV0pO1xuXG4gICAgLy8gQmx1ZSBDaGFubmVsXG4gICAgb3V0WzEwXSA9IChhWzEwXSAqIGJbMF0pICsgKGFbMTFdICogYls1XSkgKyAoYVsxMl0gKiBiWzEwXSkgKyAoYVsxM10gKiBiWzE1XSk7XG4gICAgb3V0WzExXSA9IChhWzEwXSAqIGJbMV0pICsgKGFbMTFdICogYls2XSkgKyAoYVsxMl0gKiBiWzExXSkgKyAoYVsxM10gKiBiWzE2XSk7XG4gICAgb3V0WzEyXSA9IChhWzEwXSAqIGJbMl0pICsgKGFbMTFdICogYls3XSkgKyAoYVsxMl0gKiBiWzEyXSkgKyAoYVsxM10gKiBiWzE3XSk7XG4gICAgb3V0WzEzXSA9IChhWzEwXSAqIGJbM10pICsgKGFbMTFdICogYls4XSkgKyAoYVsxMl0gKiBiWzEzXSkgKyAoYVsxM10gKiBiWzE4XSk7XG4gICAgb3V0WzE0XSA9IChhWzEwXSAqIGJbNF0pICsgKGFbMTFdICogYls5XSkgKyAoYVsxMl0gKiBiWzE0XSkgKyAoYVsxM10gKiBiWzE5XSk7XG5cbiAgICAvLyBBbHBoYSBDaGFubmVsXG4gICAgb3V0WzE1XSA9IChhWzE1XSAqIGJbMF0pICsgKGFbMTZdICogYls1XSkgKyAoYVsxN10gKiBiWzEwXSkgKyAoYVsxOF0gKiBiWzE1XSk7XG4gICAgb3V0WzE2XSA9IChhWzE1XSAqIGJbMV0pICsgKGFbMTZdICogYls2XSkgKyAoYVsxN10gKiBiWzExXSkgKyAoYVsxOF0gKiBiWzE2XSk7XG4gICAgb3V0WzE3XSA9IChhWzE1XSAqIGJbMl0pICsgKGFbMTZdICogYls3XSkgKyAoYVsxN10gKiBiWzEyXSkgKyAoYVsxOF0gKiBiWzE3XSk7XG4gICAgb3V0WzE4XSA9IChhWzE1XSAqIGJbM10pICsgKGFbMTZdICogYls4XSkgKyAoYVsxN10gKiBiWzEzXSkgKyAoYVsxOF0gKiBiWzE4XSk7XG4gICAgb3V0WzE5XSA9IChhWzE1XSAqIGJbNF0pICsgKGFbMTZdICogYls5XSkgKyAoYVsxN10gKiBiWzE0XSkgKyAoYVsxOF0gKiBiWzE5XSk7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHJldHVybiBtIHtudW1iZXJbXX0gKG1hdCA1eDQpIHdpdGggYWxsIHZhbHVlcyBiZXR3ZWVuIDAtMVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2NvbG9yTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICAvLyBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gICAgdmFyIG0gPSBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCk7XG4gICAgbVs0XSAvPSAyNTU7XG4gICAgbVs5XSAvPSAyNTU7XG4gICAgbVsxNF0gLz0gMjU1O1xuICAgIG1bMTldIC89IDI1NTtcblxuICAgIHJldHVybiBtO1xufTtcblxuLyoqXG4gKiBBZGp1c3RzIGJyaWdodG5lc3NcbiAqXG4gKiBAcGFyYW0gYiB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgYnJpZ3RobmVzcyAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icmlnaHRuZXNzID0gZnVuY3Rpb24gKGIsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGIsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIGIsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIGIsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXRyaWNlcyBpbiBncmV5IHNjYWxlc1xuICpcbiAqIEBwYXJhbSBzY2FsZSB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgZ3JleSAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG4vL0FtZXJpY2FuaXplZCBhbGlhc1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyYXlzY2FsZSA9IENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGU7XG5cbi8qKlxuICogU2V0IHRoZSBibGFjayBhbmQgd2hpdGUgbWF0cmljZVxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJsYWNrQW5kV2hpdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGh1ZSBwcm9wZXJ0eSBvZiB0aGUgY29sb3JcbiAqXG4gKiBAcGFyYW0gcm90YXRpb24ge251bWJlcn0gaW4gZGVncmVlc1xuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmh1ZSA9IGZ1bmN0aW9uIChyb3RhdGlvbiwgbXVsdGlwbHkpXG57XG4gICAgcm90YXRpb24gPSAocm90YXRpb24gfHwgMCkgLyAxODAgKiBNYXRoLlBJO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyhyb3RhdGlvbiksXG4gICAgICAgIHNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcblxuICAgIC8vIGx1bWluYW5jZVJlZCwgbHVtaW5hbmNlR3JlZW4sIGx1bWluYW5jZUJsdWVcbiAgICB2YXIgbHVtUiA9IDAuMjEzLCAvLyBvciAwLjMwODZcbiAgICAgICAgbHVtRyA9IDAuNzE1LCAvLyBvciAwLjYwOTRcbiAgICAgICAgbHVtQiA9IDAuMDcyOyAvLyBvciAwLjA4MjBcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoMSAtIGx1bVIpICsgc2luICogKC1sdW1SKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAoLWx1bUcpLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgxIC0gbHVtQiksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKDAuMTQzKSwgbHVtRyArIGNvcyAqICgxIC0gbHVtRykgKyBzaW4gKiAoMC4xNDApLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgtMC4yODMpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgtKDEgLSBsdW1SKSksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKGx1bUcpLCBsdW1CICsgY29zICogKDEgLSBsdW1CKSArIHNpbiAqIChsdW1CKSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKipcbiAqIFNldCB0aGUgY29udHJhc3QgbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGRhcmsgYW5kIGJyaWdodFxuICogSW5jcmVhc2UgY29udHJhc3QgOiBzaGFkb3dzIGRhcmtlciBhbmQgaGlnaGxpZ2h0cyBicmlnaHRlclxuICogRGVjcmVhc2UgY29udHJhc3QgOiBicmluZyB0aGUgc2hhZG93cyB1cCBhbmQgdGhlIGhpZ2hsaWdodHMgZG93blxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdmFsdWUgb2YgdGhlIGNvbnRyYXN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29udHJhc3QgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgdiA9IChhbW91bnQgfHwgMCkgKyAxO1xuICAgIHZhciBvID0gLTEyOCAqICh2IC0gMSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB2LCAwLCAwLCAwLCBvLFxuICAgICAgICAwLCB2LCAwLCAwLCBvLFxuICAgICAgICAwLCAwLCB2LCAwLCBvLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc2F0dXJhdGlvbiBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gY29sb3JzXG4gKiBJbmNyZWFzZSBzYXR1cmF0aW9uIDogaW5jcmVhc2UgY29udHJhc3QsIGJyaWdodG5lc3MsIGFuZCBzaGFycG5lc3NcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgeCA9IChhbW91bnQgfHwgMCkgKiAyIC8gMyArIDE7XG4gICAgdmFyIHkgPSAoKHggLSAxKSAqIC0wLjUpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgeCwgeSwgeSwgMCwgMCxcbiAgICAgICAgeSwgeCwgeSwgMCwgMCxcbiAgICAgICAgeSwgeSwgeCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBEZXNhdHVyYXRlIGltYWdlIChyZW1vdmUgY29sb3IpXG4gKlxuICogQ2FsbCB0aGUgc2F0dXJhdGUgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHRoaXMuc2F0dXJhdGUoLTEpO1xufTtcblxuLyoqXG4gKiBOZWdhdGl2ZSBpbWFnZSAoaW52ZXJzZSBvZiBjbGFzc2ljIHJnYiBtYXRyaXgpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5lZ2F0aXZlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDEsIDEsIDAsIDAsXG4gICAgICAgIDEsIDAsIDEsIDAsIDAsXG4gICAgICAgIDEsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2VwaWEgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2VwaWEgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zOTMsIDAuNzY4OTk5OSwgMC4xODg5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4zNDksIDAuNjg1OTk5OSwgMC4xNjc5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4yNzIsIDAuNTMzOTk5OSwgMC4xMzA5OTk5OSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciBtb3Rpb24gcGljdHVyZSBwcm9jZXNzIGludmVudGVkIGluIDE5MTYgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRlY2huaWNvbG9yID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuOTEyNTI3Nzg5MTQ1NjA4MywgLTAuODU0NTM0NDk3Njk1MTY0NSwgLTAuMDkxNTU1MDg0ODI3NTU1ODUsIDAsIDExLjc5MzYwMzQzNDM3NzMzNyxcbiAgICAgICAgLTAuMzA4NzgzMzM4NTkyODA5NywgMS43NjU4OTA4NTU1NDU4NDI4LCAtMC4xMDYwMTc0MzA3NDcyMjI0NSwgMCwgLTcwLjM1MjA1MTYxNDYxMzk4LFxuICAgICAgICAtMC4yMzExMDMzNzc1NDg2MTYsIC0wLjc1MDE4OTkxOTc0NDAyMTIsIDEuODQ3NTk3ODE2MTA4MTg5LCAwLCAzMC45NTA5NDA4Njk0OTExMzgsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogUG9sYXJvaWQgZmlsdGVyXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnBvbGFyb2lkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuNDM4LCAtMC4wNjIsIC0wLjA2MiwgMCwgMCxcbiAgICAgICAgLTAuMTIyLCAxLjM3OCwgLTAuMTIyLCAwLCAwLFxuICAgICAgICAtMC4wMTYsIC0wLjAxNiwgMS40ODMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRmlsdGVyIHdobyB0cmFuc2Zvcm1zIDogUmVkIC0+IEJsdWUgYW5kIEJsdWUgLT4gUmVkXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRvQkdSID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgcmV2ZXJzYWwgZmlsbSBpbnRyb2R1Y2VkIGJ5IEVhc3RtYW4gS29kYWsgaW4gMTkzNS4gKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmtvZGFjaHJvbWUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS4xMjg1NTgyMzk2NTkzNTI1LCAtMC4zOTY3MzgyMjgzNjAxMzQ4LCAtMC4wMzk5MjU1OTE3MjkyMTc5MywgMCwgNjMuNzI5NTg3NjIxOTY1MDIsXG4gICAgICAgIC0wLjE2NDA0MzM5OTYyMjQ0NjE2LCAxLjA4MzUyNTE1NjYyOTEzMDQsIC0wLjA1NDk4ODA1MTE1NjMzMTMyLCAwLCAyNC43MzI0MDc4OTY3MDYyMDMsXG4gICAgICAgIC0wLjE2Nzg2MDEwNzA2MTU1NzYzLCAtMC41NjAzNDE2Mjc3Njk1MjQ4LCAxLjYwMTQ4NTA3NjE5NjQ5NDMsIDAsIDM1LjYyOTgyODA3NDYwOTQ2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEJyb3duIGRlbGljaW91cyBicm93bmkgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icm93bmkgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC41OTk3MDIzNDk4MTU5NzE1LCAwLjM0NTUzMjQzMDQ4MzkxMjYzLCAtMC4yNzA4Mjk4Njc0NTM4MDQyLCAwLCA0Ny40MzE5Mjg1NTYwMDg3MyxcbiAgICAgICAgLTAuMDM3NzAzMjQ5ODM3NzgzMTU3LCAwLjg2MDk1Nzc1ODc5OTI2NDEsIDAuMTUwNTk1NTIzODg0NTk5MTMsIDAsIC0zNi45Njg0MTQ5ODMxOTEyNyxcbiAgICAgICAgMC4yNDExMzYzNTEyODE1MzMzNSwgLTAuMDc0NDEwMzc5MDg0MjI0OTIsIDAuNDQ5NzIxODIwNjQ4NzcxNTMsIDAsIC03LjU2MjA3NTI3NzU5MTI4MyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFZpbnRhZ2UgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS52aW50YWdlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNjI3OTM0NTYzNTYwNTk5NCwgMC4zMjAyMTgzNDIwODE5MzY3LCAtMC4wMzk2NTQwODIxMTMxMjQ1MywgMCwgOS42NTEyODU4MzUyOTQxMjMsXG4gICAgICAgIDAuMDI1NzgzOTc3MDQ4MDg4NjgsIDAuNjQ0MTE4ODY0NDM3NDc3MSwgMC4wMzI1OTEyNzYxNjE0OTI5NCwgMCwgNy40NjI4MjkxNzY0NzA1OTEsXG4gICAgICAgIDAuMDQ2NjA1NTU1Njc4MjcxOSwgLTAuMDg1MTIzMjk4NzI0Nzg5MSwgMC41MjQxNjQ4MDE4NzAwNDY1LCAwLCA1LjE1OTE5MDU4ODIzNTI5NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGtpbmQgb2YgZ3JhZGllbnQgbWFwLCBidXQgZnVubnkgdG8gcGxheSB3aXRoIVxuICpcbiAqIEBwYXJhbSBkZXNhdHVyYXRpb24ge251bWJlcn1cbiAqIEBwYXJhbSB0b25lZCB7bnVtYmVyfVxuICogQHBhcmFtIGxpZ2h0Q29sb3Ige3N0cmluZ30gKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKiBAcGFyYW0gZGFya0NvbG9yIHtzdHJpbmd9ICAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29sb3JUb25lID0gZnVuY3Rpb24gKGRlc2F0dXJhdGlvbiwgdG9uZWQsIGxpZ2h0Q29sb3IsIGRhcmtDb2xvciwgbXVsdGlwbHkpXG57XG4gICAgZGVzYXR1cmF0aW9uID0gZGVzYXR1cmF0aW9uIHx8IDAuMjtcbiAgICB0b25lZCA9IHRvbmVkIHx8IDAuMTU7XG4gICAgbGlnaHRDb2xvciA9IGxpZ2h0Q29sb3IgfHwgMHhGRkU1ODA7XG4gICAgZGFya0NvbG9yID0gZGFya0NvbG9yIHx8IDB4MzM4MDAwO1xuXG4gICAgdmFyIGxSID0gKChsaWdodENvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsRyA9ICgobGlnaHRDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsQiA9IChsaWdodENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgZFIgPSAoKGRhcmtDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEcgPSAoKGRhcmtDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkQiA9IChkYXJrQ29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC41OSwgMC4xMSwgMCwgMCxcbiAgICAgICAgbFIsIGxHLCBsQiwgZGVzYXR1cmF0aW9uLCAwLFxuICAgICAgICBkUiwgZEcsIGRCLCB0b25lZCwgMCxcbiAgICAgICAgbFIgLSBkUiwgbEcgLSBkRywgbEIgLSBkQiwgMCwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIE5pZ2h0IGVmZmVjdFxuICpcbiAqIEBwYXJhbSBpbnRlbnNpdHkge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uaWdodCA9IGZ1bmN0aW9uIChpbnRlbnNpdHksIG11bHRpcGx5KVxue1xuICAgIGludGVuc2l0eSA9IGludGVuc2l0eSB8fCAwLjE7XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgaW50ZW5zaXR5ICogKCAtMi4wKSwgLWludGVuc2l0eSwgMCwgMCwgMCxcbiAgICAgICAgLWludGVuc2l0eSwgMCwgaW50ZW5zaXR5LCAwLCAwLFxuICAgICAgICAwLCBpbnRlbnNpdHksIGludGVuc2l0eSAqIDIuMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKlxuICogUHJlZGF0b3IgZWZmZWN0XG4gKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgYSBuZXcgaW5kZXBlbnQgb25lXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBob3cgbXVjaCB0aGUgcHJlZGF0b3IgZmVlbHMgaGlzIGZ1dHVyZSB2aWN0aW1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wcmVkYXRvciA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDExLjIyNDEzMDYzMDQ5MzE2NCAqIGFtb3VudCwgLTQuNzk0NDg2OTk5NTExNzE5ICogYW1vdW50LCAtMi44NzQ2MTE4NTQ1NTMyMjI3ICogYW1vdW50LCAwICogYW1vdW50LCAwLjQwMzQyNDM4MjIwOTc3NzgzICogYW1vdW50LFxuICAgICAgICAtMy42MzMwNjk3NTM2NDY4NTA2ICogYW1vdW50LCA5LjE5MzE1NzE5NjA0NDkyMiAqIGFtb3VudCwgLTIuOTUxODEwODM2NzkxOTkyICogYW1vdW50LCAwICogYW1vdW50LCAtMS4zMTYxMzUwNDg4NjYyNzIgKiBhbW91bnQsXG4gICAgICAgIC0zLjIxODQxOTc5MDI2Nzk0NDMgKiBhbW91bnQsIC00LjIzNzUwMzA1MTc1NzgxMjUgKiBhbW91bnQsIDcuNDc2NDQ4MDU5MDgyMDMxICogYW1vdW50LCAwICogYW1vdW50LCAwLjgwNDQ0NTkyMjM3NDcyNTMgKiBhbW91bnQsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBMU0QgZWZmZWN0XG4gKlxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBIb3cgY3JhenkgaXMgeW91ciBlZmZlY3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5sc2QgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMiwgLTAuNCwgMC41LCAwLCAwLFxuICAgICAgICAtMC41LCAyLCAtMC40LCAwLCAwLFxuICAgICAgICAtMC40LCAtMC41LCAzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgb25lXG4gKlxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIGZhbHNlKTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF0cml4IG9mIHRoZSBjb2xvciBtYXRyaXggZmlsdGVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yTWF0cml4RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IFsxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwXVxuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm0udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBsb3dlcnMgdGhlIGNvbG9yIGRlcHRoIG9mIHlvdXIgaW1hZ2UgYnkgdGhlIGdpdmVuIGFtb3VudCwgcHJvZHVjaW5nIGFuIGltYWdlIHdpdGggYSBzbWFsbGVyIHBhbGV0dGUuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yU3RlcEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzdGVwO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGNvbG9yID0gZmxvb3IoY29sb3IgKiBzdGVwKSAvIHN0ZXA7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXA6IHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yU3RlcEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JTdGVwRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBzdGVwcyB0byByZWR1Y2UgdGhlIHBhbGV0dGUgYnkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvclN0ZXBGaWx0ZXIjXG4gICAgICovXG4gICAgc3RlcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbnZvbHV0aW9uRmlsdGVyIGNsYXNzIGFwcGxpZXMgYSBtYXRyaXggY29udm9sdXRpb24gZmlsdGVyIGVmZmVjdC5cbiAqIEEgY29udm9sdXRpb24gY29tYmluZXMgcGl4ZWxzIGluIHRoZSBpbnB1dCBpbWFnZSB3aXRoIG5laWdoYm9yaW5nIHBpeGVscyB0byBwcm9kdWNlIGEgbmV3IGltYWdlLlxuICogQSB3aWRlIHZhcmlldHkgb2YgaW1hZ2UgZWZmZWN0cyBjYW4gYmUgYWNoaWV2ZWQgdGhyb3VnaCBjb252b2x1dGlvbnMsIGluY2x1ZGluZyBibHVycmluZywgZWRnZVxuICogZGV0ZWN0aW9uLCBzaGFycGVuaW5nLCBlbWJvc3NpbmcsIGFuZCBiZXZlbGluZy4gVGhlIG1hdHJpeCBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIFNlZSBodHRwOi8vZG9jcy5naW1wLm9yZy9lbi9wbHVnLWluLWNvbnZtYXRyaXguaHRtbCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICovXG5mdW5jdGlvbiBDb252b2x1dGlvbkZpbHRlcihtYXRyaXgsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyBtZWRpdW1wIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xcbnVuaWZvcm0gZmxvYXQgbWF0cml4WzldO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IGMxMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAtIHRleGVsU2l6ZSk7IC8vIHRvcCBsZWZ0XFxuICAgdmVjNCBjMTIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgY2VudGVyXFxuICAgdmVjNCBjMTMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCByaWdodFxcblxcbiAgIHZlYzQgYzIxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIGxlZnRcXG4gICB2ZWM0IGMyMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7IC8vIG1pZCBjZW50ZXJcXG4gICB2ZWM0IGMyMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCByaWdodFxcblxcbiAgIHZlYzQgYzMxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gbGVmdFxcbiAgIHZlYzQgYzMyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGNlbnRlclxcbiAgIHZlYzQgYzMzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgdGV4ZWxTaXplKTsgLy8gYm90dG9tIHJpZ2h0XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID1cXG4gICAgICAgYzExICogbWF0cml4WzBdICsgYzEyICogbWF0cml4WzFdICsgYzEzICogbWF0cml4WzJdICtcXG4gICAgICAgYzIxICogbWF0cml4WzNdICsgYzIyICogbWF0cml4WzRdICsgYzIzICogbWF0cml4WzVdICtcXG4gICAgICAgYzMxICogbWF0cml4WzZdICsgYzMyICogbWF0cml4WzddICsgYzMzICogbWF0cml4WzhdO1xcblxcbiAgIGdsX0ZyYWdDb2xvci5hID0gYzIyLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWF0cml4OiAgICAgeyB0eXBlOiAnMWZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KSB9LFxuICAgICAgICAgICAgdGV4ZWxTaXplOiAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxIC8gd2lkdGgsIHk6IDEgLyBoZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnZvbHV0aW9uRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb252b2x1dGlvbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnkgPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIENyb3NzIEhhdGNoIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENyb3NzSGF0Y2hGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZmxvYXQgbHVtID0gbGVuZ3RoKHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZC54eSkucmdiKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDEuMCwgMS4wLCAxLjApO1xcblxcbiAgICBpZiAobHVtIDwgMS4wMClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjc1KVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNTApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC4zKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXCJcbiAgICApO1xufVxuXG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDcm9zc0hhdGNoRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDcm9zc0hhdGNoRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIERpc3BsYWNlbWVudEZpbHRlciBjbGFzcyB1c2VzIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHRleHR1cmUgKGNhbGxlZCB0aGUgZGlzcGxhY2VtZW50IG1hcCkgdG8gcGVyZm9ybSBhIGRpc3BsYWNlbWVudCBvZiBhbiBvYmplY3QuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGZpbHRlciB0byBhcHBseSBhbGwgbWFub3Igb2YgY3Jhenkgd2FycGluZyBlZmZlY3RzXG4gKiBDdXJyZW50bHkgdGhlIHIgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHggYW5kIHRoZSBnIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIChtYWtlIHN1cmUgaXRzIGFkZGVkIHRvIHRoZSBzY2VuZSEpXG4gKi9cbmZ1bmN0aW9uIERpc3BsYWNlbWVudEZpbHRlcihzcHJpdGUsIHNjYWxlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG4gICAgc3ByaXRlLnJlbmRlcmFibGUgPSBmYWxzZTtcblxuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZNYXBDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcFNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgbWFwID0gIHRleHR1cmUyRChtYXBTYW1wbGVyLCB2TWFwQ29vcmQpO1xcblxcbiAgIG1hcCAtPSAwLjU7XFxuICAgbWFwLnh5ICo9IHNjYWxlO1xcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyBtYXAueCwgdlRleHR1cmVDb29yZC55ICsgbWFwLnkpKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcFNhbXBsZXI6ICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLnRleHR1cmUgfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9LFxuICAgICAgICAgICAgc2NhbGU6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSwgeTogMSB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcblxuICAgIGlmIChzY2FsZSA9PT0gbnVsbCB8fCBzY2FsZSA9PT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgICAgc2NhbGUgPSAyMDtcbiAgICB9XG5cbiAgICB0aGlzLnNjYWxlID0gbmV3IGNvcmUuUG9pbnQoc2NhbGUsIHNjYWxlKTtcbn1cblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYWNlbWVudEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxhY2VtZW50RmlsdGVyO1xuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS54ID0gdGhpcy5zY2FsZS54ICogKDEvaW5wdXQuZnJhbWUud2lkdGgpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueSA9IHRoaXMuc2NhbGUueSAqICgxL2lucHV0LmZyYW1lLmhlaWdodCk7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gTXVzdCBiZSBwb3dlciBvZiAyIHNpemVkIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5EaXNwbGFjZW1lbnRGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3ZlcyBodHRwOi8vbWF0Z3JvdmVzLmNvbS8gQERvb3JtYXQyM1xuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9mdW4vZG90c2NyZWVuLmpzXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgZG90c2NyZWVuIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0byBiZSBtYWRlIG91dCBvZlxuICogYmxhY2sgYW5kIHdoaXRlIGhhbGZ0b25lIGRvdHMgbGlrZSBhbiBvbGQgcHJpbnRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRG90U2NyZWVuRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG5cXG5mbG9hdCBwYXR0ZXJuKClcXG57XFxuICAgZmxvYXQgcyA9IHNpbihhbmdsZSksIGMgPSBjb3MoYW5nbGUpO1xcbiAgIHZlYzIgdGV4ID0gdlRleHR1cmVDb29yZCAqIGRpbWVuc2lvbnMueHk7XFxuICAgdmVjMiBwb2ludCA9IHZlYzIoXFxuICAgICAgIGMgKiB0ZXgueCAtIHMgKiB0ZXgueSxcXG4gICAgICAgcyAqIHRleC54ICsgYyAqIHRleC55XFxuICAgKSAqIHNjYWxlO1xcbiAgIHJldHVybiAoc2luKHBvaW50LngpICogc2luKHBvaW50LnkpKSAqIDQuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhhdmVyYWdlICogMTAuMCAtIDUuMCArIHBhdHRlcm4oKSksIGNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNjYWxlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvdFNjcmVlbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRG90U2NyZWVuRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIHNjYWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHJhZGl1cyBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWVRpbnRGaWx0ZXIgYXBwbGllcyBhIHZlcnRpY2FsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWVRpbnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbitvZmZzZXQpLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IHN1bSA9IHZlYzQoMC4wKTtcXG5cXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLnJnYiAqIHN1bS5hICogYWxwaGEsIHN1bS5hICogYWxwaGEgKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSAvIDUxMiB9LFxuICAgICAgICAgICAgY29sb3I6IHsgdHlwZTogJ2MnLCB2YWx1ZTogWzAsMCwwXX0sXG4gICAgICAgICAgICBhbHBoYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC43IH0sXG4gICAgICAgICAgICBvZmZzZXQ6IHsgdHlwZTogJzJmJywgdmFsdWU6WzUsIDVdfSxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOjF9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllUaW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWVRpbnRGaWx0ZXI7XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIGNsZWFyKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWVRpbnRGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllUaW50RmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWVRpbnRGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgRHJvcFNoYWRvd0ZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEcm9wU2hhZG93RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIgPSBuZXcgQmx1cllUaW50RmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgdGhpcy5wYWRkaW5nID0gMzA7XG5cbiAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9hbmdsZSA9IDQ1ICogTWF0aC5QSSAvIDE4MDtcbiAgICB0aGlzLl9kaXN0YW5jZSA9IDEwO1xuICAgIHRoaXMuYWxwaGEgPSAwLjc1O1xuICAgIHRoaXMuaGlkZU9iamVjdCA9IGZhbHNlO1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5NVUxUSVBMWTtcbn1cblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRHJvcFNoYWRvd0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRHJvcFNoYWRvd0ZpbHRlcjtcblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIGlmKHRoaXMuX2RpcnR5UG9zaXRpb24pXG4gICAge1xuICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzBdID0gTWF0aC5zaW4odGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVsxXSA9IE1hdGguY29zKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUodGhpcy5ibGVuZE1vZGUpO1xuXG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIGlmKCF0aGlzLmhpZGVPYmplY3QpXG4gICAge1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG4gICAgfVxuXG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBjb2xvcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgY29yZS51dGlscy5yZ2IyaGV4KCB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgPSBjb3JlLnV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYWxwaGE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXN0YW5jZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGRpc3RhbmNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9hbmdsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fYW5nbGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBncmV5c2NhbGVzIHRoZSBwYWxldHRlIG9mIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBHcmF5RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JheTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIHZlYzMoMC4yMTI2KmdsX0ZyYWdDb2xvci5yICsgMC43MTUyKmdsX0ZyYWdDb2xvci5nICsgMC4wNzIyKmdsX0ZyYWdDb2xvci5iKSwgZ3JheSk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXk6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuR3JheUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkdyYXlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JheUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JheUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR3JheUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXkuIDEgd2lsbCBtYWtlIHRoZSBvYmplY3QgYmxhY2sgYW5kIHdoaXRlLCAwIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5HcmF5RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYXk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGZpbHRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmZpbHRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXNjaWlGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2FzY2lpL0FzY2lpRmlsdGVyJyksXG4gICAgQmxvb21GaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2Jsb29tL0Jsb29tRmlsdGVyJyksXG4gICAgQmx1ckZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckZpbHRlcicpLFxuICAgIEJsdXJYRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1cllGaWx0ZXInKSxcbiAgICBCbHVyRGlyRmlsdGVyOiAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRGlyRmlsdGVyJyksXG4gICAgQ29sb3JNYXRyaXhGaWx0ZXI6ICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yTWF0cml4RmlsdGVyJyksXG4gICAgQ29sb3JTdGVwRmlsdGVyOiAgICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yU3RlcEZpbHRlcicpLFxuICAgIENvbnZvbHV0aW9uRmlsdGVyOiAgcmVxdWlyZSgnLi9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlcicpLFxuICAgIENyb3NzSGF0Y2hGaWx0ZXI6ICAgcmVxdWlyZSgnLi9jcm9zc2hhdGNoL0Nyb3NzSGF0Y2hGaWx0ZXInKSxcbiAgICBEaXNwbGFjZW1lbnRGaWx0ZXI6IHJlcXVpcmUoJy4vZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlcicpLFxuICAgIERvdFNjcmVlbkZpbHRlcjogICAgcmVxdWlyZSgnLi9kb3QvRG90U2NyZWVuRmlsdGVyJyksXG4gICAgR3JheUZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2dyYXkvR3JheUZpbHRlcicpLFxuICAgIERyb3BTaGFkb3dGaWx0ZXI6ICAgcmVxdWlyZSgnLi9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXInKSxcbiAgICBJbnZlcnRGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vaW52ZXJ0L0ludmVydEZpbHRlcicpLFxuICAgIE5vaXNlRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ub2lzZS9Ob2lzZUZpbHRlcicpLFxuICAgIFBpeGVsYXRlRmlsdGVyOiAgICAgcmVxdWlyZSgnLi9waXhlbGF0ZS9QaXhlbGF0ZUZpbHRlcicpLFxuICAgIFJHQlNwbGl0RmlsdGVyOiAgICAgcmVxdWlyZSgnLi9yZ2IvUkdCU3BsaXRGaWx0ZXInKSxcbiAgICBTaG9ja3dhdmVGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vc2hvY2t3YXZlL1Nob2Nrd2F2ZUZpbHRlcicpLFxuICAgIFNlcGlhRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9zZXBpYS9TZXBpYUZpbHRlcicpLFxuICAgIFNtYXJ0Qmx1ckZpbHRlcjogICAgcmVxdWlyZSgnLi9ibHVyL1NtYXJ0Qmx1ckZpbHRlcicpLFxuICAgIFRpbHRTaGlmdEZpbHRlcjogICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyJyksXG4gICAgVHdpc3RGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3R3aXN0L1R3aXN0RmlsdGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGludmVydHMgeW91ciBEaXNwbGF5IE9iamVjdHMgY29sb3JzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBJbnZlcnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gZmxvYXQgaW52ZXJ0O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggKHZlYzMoMSktZ2xfRnJhZ0NvbG9yLnJnYikgKiBnbF9GcmFnQ29sb3IuYSwgZ2xfRnJhZ0NvbG9yLnJnYiwgMS4wIC0gaW52ZXJ0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBpbnZlcnQ6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludmVydEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gSW52ZXJ0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhJbnZlcnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBpbnZlcnQuIGAxYCB3aWxsIGZ1bGx5IGludmVydCB0aGUgY29sb3JzLCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkludmVydEZpbHRlciNcbiAgICAgKi9cbiAgICBpbnZlcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9hZGp1c3Qvbm9pc2UuanNcbiAqL1xuXG4vKipcbiAqIEEgTm9pc2UgZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gTm9pc2VGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgbm9pc2U7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgcmFuZCh2ZWMyIGNvKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoY28ueHksIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZmxvYXQgZGlmZiA9IChyYW5kKHZUZXh0dXJlQ29vcmQpIC0gMC41KSAqIG5vaXNlO1xcblxcbiAgICBjb2xvci5yICs9IGRpZmY7XFxuICAgIGNvbG9yLmcgKz0gZGlmZjtcXG4gICAgY29sb3IuYiArPSBkaWZmO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBub2lzZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbk5vaXNlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuTm9pc2VGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTm9pc2VGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE5vaXNlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2lzZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIG5vaXNlIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuTm9pc2VGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMC41XG4gICAgICovXG4gICAgbm9pc2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHBpeGVsYXRlIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciAnYmxvY2t5Jy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUGl4ZWxhdGVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZDtcXG5cXG4gICAgdmVjMiBzaXplID0gZGltZW5zaW9ucy54eSAvIHBpeGVsU2l6ZTtcXG5cXG4gICAgdmVjMiBjb2xvciA9IGZsb29yKCAoIHZUZXh0dXJlQ29vcmQgKiBzaXplICkgKSAvIHNpemUgKyBwaXhlbFNpemUvZGltZW5zaW9ucy54eSAqIDAuNTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb2xvcik7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgICB2YWx1ZTogeyB4OiAxMCwgeTogMTAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBpeGVsYXRlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBQaXhlbGF0ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBhIHBvaW50IHRoYXQgZGVzY3JpYmVzIHRoZSBzaXplIG9mIHRoZSBibG9ja3MuXG4gICAgICogeCBpcyB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGFuZCB5IGlzIHRoZSBoZWlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUGl4ZWxhdGVGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEFuIFJHQiBTcGxpdCBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFJHQlNwbGl0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcmVkO1xcbnVuaWZvcm0gdmVjMiBncmVlbjtcXG51bmlmb3JtIHZlYzIgYmx1ZTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yLnIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyByZWQvZGltZW5zaW9ucy54eSkucjtcXG4gICBnbF9GcmFnQ29sb3IuZyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGdyZWVuL2RpbWVuc2lvbnMueHkpLmc7XFxuICAgZ2xfRnJhZ0NvbG9yLmIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBibHVlL2RpbWVuc2lvbnMueHkpLmI7XFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgZ3JlZW46ICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAtMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGJsdWU6ICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IC0yMCB9IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUkdCU3BsaXRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFJHQlNwbGl0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSR0JTcGxpdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBSZWQgY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgcmVkOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yZWQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmVlbiBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmVlbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEJsdWUgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgYXBwbGllcyBhIHNlcGlhIGVmZmVjdCB0byB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2VwaWFGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc2VwaWE7XFxuXFxuY29uc3QgbWF0MyBzZXBpYU1hdHJpeCA9IG1hdDMoMC4zNTg4LCAwLjcwNDQsIDAuMTM2OCwgMC4yOTkwLCAwLjU4NzAsIDAuMTE0MCwgMC4yMzkyLCAwLjQ2OTYsIDAuMDkxMik7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZ2xfRnJhZ0NvbG9yLnJnYiAqIHNlcGlhTWF0cml4LCBzZXBpYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2VwaWE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2VwaWFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TZXBpYUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXBpYUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2VwaWFGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNlcGlhRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgc2VwaWEuIGAxYCB3aWxsIGFwcGx5IHRoZSBmdWxsIHNlcGlhIGVmZmVjdCwgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TZXBpYUZpbHRlciNcbiAgICAgKi9cbiAgICBzZXBpYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA0eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTaG9ja3dhdmVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XFxudW5pZm9ybSB2ZWMzIHBhcmFtczsgLy8gMTAuMCwgMC44LCAwLjFcXG51bmlmb3JtIGZsb2F0IHRpbWU7XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSB2VGV4dHVyZUNvb3JkO1xcbiAgICB2ZWMyIHRleENvb3JkID0gdXY7XFxuXFxuICAgIGZsb2F0IGRpc3QgPSBkaXN0YW5jZSh1diwgY2VudGVyKTtcXG5cXG4gICAgaWYgKCAoZGlzdCA8PSAodGltZSArIHBhcmFtcy56KSkgJiYgKGRpc3QgPj0gKHRpbWUgLSBwYXJhbXMueikpIClcXG4gICAge1xcbiAgICAgICAgZmxvYXQgZGlmZiA9IChkaXN0IC0gdGltZSk7XFxuICAgICAgICBmbG9hdCBwb3dEaWZmID0gMS4wIC0gcG93KGFicyhkaWZmKnBhcmFtcy54KSwgcGFyYW1zLnkpO1xcblxcbiAgICAgICAgZmxvYXQgZGlmZlRpbWUgPSBkaWZmICAqIHBvd0RpZmY7XFxuICAgICAgICB2ZWMyIGRpZmZVViA9IG5vcm1hbGl6ZSh1diAtIGNlbnRlcik7XFxuICAgICAgICB0ZXhDb29yZCA9IHV2ICsgKGRpZmZVViAqIGRpZmZUaW1lKTtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHRleENvb3JkKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBjZW50ZXI6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9LFxuICAgICAgICAgICAgcGFyYW1zOiB7IHR5cGU6ICd2MycsIHZhbHVlOiB7IHg6IDEwLCB5OiAwLjgsIHo6IDAuMSB9IH0sXG4gICAgICAgICAgICB0aW1lOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaG9ja3dhdmVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNob2Nrd2F2ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNlbnRlciBvZiB0aGUgc2hvY2t3YXZlIGluIG5vcm1hbGl6ZWQgc2NyZWVuIGNvb3Jkcy4gVGhhdCBpc1xuICAgICAqICgwLDApIGlzIHRoZSB0b3AtbGVmdCBhbmQgKDEsMSkgaXMgdGhlIGJvdHRvbSByaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgY2VudGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGFyYW1zIG9mIHRoZSBzaG9ja3dhdmUuIFRoZXNlIG1vZGlmeSB0aGUgbG9vayBhbmQgYmVoYXZpb3Igb2ZcbiAgICAgKiB0aGUgc2hvY2t3YXZlIGFzIGl0IHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIHNob2Nrd2F2ZS4gVGhpcyBjb250cm9scyB0aGUgc3BlZWQgYXQgd2hpY2hcbiAgICAgKiB0aGUgc2hvY2t3YXZlIHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHRpbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRBeGlzRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRBeGlzRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGJsdXI7XFxudW5pZm9ybSBmbG9hdCBncmFkaWVudEJsdXI7XFxudW5pZm9ybSB2ZWMyIHN0YXJ0O1xcbnVuaWZvcm0gdmVjMiBlbmQ7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcbnVuaWZvcm0gdmVjMiB0ZXhTaXplO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcbiAgICB2ZWMyIG5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMyKHN0YXJ0LnkgLSBlbmQueSwgZW5kLnggLSBzdGFydC54KSk7XFxuICAgIGZsb2F0IHJhZGl1cyA9IHNtb290aHN0ZXAoMC4wLCAxLjAsIGFicyhkb3QodlRleHR1cmVDb29yZCAqIHRleFNpemUgLSBzdGFydCwgbm9ybWFsKSkgLyBncmFkaWVudEJsdXIpICogYmx1cjtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgLyB0ZXhTaXplICogcGVyY2VudCAqIHJhZGl1cyk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6ICAgICAgICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxMDAgfSxcbiAgICAgICAgICAgIGdyYWRpZW50Qmx1cjogICB7IHR5cGU6ICcxZicsIHZhbHVlOiA2MDAgfSxcbiAgICAgICAgICAgIHN0YXJ0OiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAsICAgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZW5kOiAgICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogNjAwLCAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBkZWx0YTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAzMCwgICB5OiAzMCB9IH0sXG4gICAgICAgICAgICB0ZXhTaXplOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiB3aW5kb3cuaW5uZXJXaWR0aCwgeTogd2luZG93LmlubmVySGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbn1cblxuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICogVGhpcyBpcyBvdmVycmlkZGVuIGluIHRoZSBYIGFuZCBZIGZpbHRlcnMsIGRvZXMgbm90aGluZyBmb3IgdGhpcyBjbGFzcy5cbiAqXG4gKi9cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAwO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IDA7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WUZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnQgRmlsdGVyLiBNYW5hZ2VzIHRoZSBwYXNzIG9mIGJvdGggYSBUaWx0U2hpZnRYRmlsdGVyIGFuZCBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlciA9IG5ldyBUaWx0U2hpZnRYRmlsdGVyKCk7XG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyID0gbmV3IFRpbHRTaGlmdFlGaWx0ZXIoKTtcbn1cblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0RmlsdGVyO1xuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ncmFkaWVudEJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5zdGFydCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5lbmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRYRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gZHggLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR5IC8gZDtcbn07XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFlGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WUZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAtZHkgLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR4IC8gZDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgdHdpc3QgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHR3aXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVHdpc3RGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgLSBvZmZzZXQ7XFxuICAgZmxvYXQgZGlzdCA9IGxlbmd0aChjb29yZCk7XFxuXFxuICAgaWYgKGRpc3QgPCByYWRpdXMpXFxuICAge1xcbiAgICAgICBmbG9hdCByYXRpbyA9IChyYWRpdXMgLSBkaXN0KSAvIHJhZGl1cztcXG4gICAgICAgZmxvYXQgYW5nbGVNb2QgPSByYXRpbyAqIHJhdGlvICogYW5nbGU7XFxuICAgICAgIGZsb2F0IHMgPSBzaW4oYW5nbGVNb2QpO1xcbiAgICAgICBmbG9hdCBjID0gY29zKGFuZ2xlTW9kKTtcXG4gICAgICAgY29vcmQgPSB2ZWMyKGNvb3JkLnggKiBjIC0gY29vcmQueSAqIHMsIGNvb3JkLnggKiBzICsgY29vcmQueSAqIGMpO1xcbiAgIH1cXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkK29mZnNldCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBvZmZzZXQ6ICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuVHdpc3RGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ud2lzdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUd2lzdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVHdpc3RGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFR3aXN0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgZGVzY3JpYmVzIHRoZSB0aGUgb2Zmc2V0IG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcmFkaXVzIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIHJhZGl1czoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBhbmdsZSBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvLyBydW4gdGhlIHBvbHlmaWxsc1xucmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbi8vIGFkZCBjb3JlIHBsdWdpbnMuXG5jb3JlLmV4dHJhcyAgICAgICAgID0gcmVxdWlyZSgnLi9leHRyYXMnKTtcbmNvcmUuZmlsdGVycyAgICAgICAgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcbmNvcmUuaW50ZXJhY3Rpb24gICAgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9uJyk7XG5jb3JlLmxvYWRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9sb2FkZXJzJyk7XG5jb3JlLm1lc2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9tZXNoJyk7XG5jb3JlLmFjY2Vzc2liaWxpdHkgID0gcmVxdWlyZSgnLi9hY2Nlc3NpYmlsaXR5Jyk7XG5cbi8vIGV4cG9ydCBhIHByZW1hZGUgbG9hZGVyIGluc3RhbmNlXG4vKipcbiAqIEEgcHJlbWFkZSBpbnN0YW5jZSBvZiB0aGUgbG9hZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZGVyIHJlc291cmNlcy5cbiAqXG4gKiBAbmFtZSBsb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcHJvcGVydHkge1BJWEkubG9hZGVycy5Mb2FkZXJ9XG4gKi9cbmNvcmUubG9hZGVyID0gbmV3IGNvcmUubG9hZGVycy5Mb2FkZXIoKTtcblxuLy8gbWl4aW4gdGhlIGRlcHJlY2F0aW9uIGZlYXR1cmVzLlxuT2JqZWN0LmFzc2lnbihjb3JlLCByZXF1aXJlKCcuL2RlcHJlY2F0aW9uJykpO1xuXG4vLyBBbHdheXMgZXhwb3J0IHBpeGkgZ2xvYmFsbHkuXG5nbG9iYWwuUElYSSA9IGNvcmU7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBIb2xkcyBhbGwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhbiBJbnRlcmFjdGlvbiBldmVudFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25EYXRhKClcbntcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IHN0b3JlcyB0aGUgZ2xvYmFsIGNvb3JkcyBvZiB3aGVyZSB0aGUgdG91Y2gvbW91c2UgZXZlbnQgaGFwcGVuZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5nbG9iYWwgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBTcHJpdGUgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBhc3NlZCB0byBhbiBldmVudCBoYW5kbGVyLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbmFsIERPTSBFdmVudCB0aGF0IHdhcyBjYXB0dXJlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gbnVsbDtcbn1cblxuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25EYXRhO1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBzcGVjaWZpZWQgZGlzcGxheU9iamVjdCBmb3IgdGhpcyBJbnRlcmFjdGlvbkRhdGFcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSBsb2NhbCBjb29yZHMgb2ZmXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IHBvaW50KVxuICogQHBhcmFtIFtnbG9iYWxQb3NdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHlvdXIgY3VzdG9tIGdsb2JhbCBjb29yZHMsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCB1c2UgdGhlIGN1cnJlbnQgZ2xvYmFsIGNvb3JkcylcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEludGVyYWN0aW9uRGF0YSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgRGlzcGxheU9iamVjdFxuICovXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmdldExvY2FsUG9zaXRpb24gPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcG9pbnQsIGdsb2JhbFBvcylcbntcbiAgICByZXR1cm4gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UoZ2xvYmFsUG9zIHx8IHRoaXMuZ2xvYmFsLCBwb2ludCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgSW50ZXJhY3Rpb25EYXRhID0gcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKTtcblxuLy8gTWl4IGludGVyYWN0aXZlVGFyZ2V0IGludG8gY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZVxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxuKTtcblxuLyoqXG4gKiBUaGUgaW50ZXJhY3Rpb24gbWFuYWdlciBkZWFscyB3aXRoIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuIEFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBpbnRlcmFjdGl2ZVxuICogaWYgaXRzIGludGVyYWN0aXZlIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZVxuICogVGhpcyBtYW5hZ2VyIGFsc28gc3VwcG9ydHMgbXVsdGl0b3VjaC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdD10cnVlXSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBtYW5hZ2VyIGF1dG9tYXRpY2FsbHkgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeT0xMF0ge251bWJlcn0gRnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyLCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgaW50ZXJhY3Rpb24gbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGJlIHByZXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0ID0gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0IDogdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFzIHRoaXMgZnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZCBtb3JlIG9mdGVuLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSA9IG9wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW91c2UgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9XG4gICAgICovXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IGRhdGEgb2JqZWN0IHRvIGhhbmRsZSBhbGwgdGhlIGV2ZW50IHRyYWNraW5nL2Rpc3BhdGNoaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5ldmVudERhdGEgPSB7XG4gICAgICAgIHN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgIGRhdGE6IHRoaXMubW91c2UsXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGxpdHRsZSBpbnRlcmFjdGl2ZURhdGEgcG9vbCAhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YVtdfVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBlbGVtZW50IHRvIGJpbmQgdG8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhhdmUgZXZlbnRzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGRvbSBlbGVtZW50P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcblxuICAgIC8vdGhpcyB3aWxsIG1ha2UgaXQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGJpbmQgYWxsIHRoZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VVcCA9IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IHRoaXMucHJvY2Vzc01vdXNlVXAuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IHRoaXMucHJvY2Vzc01vdXNlRG93bi5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gdGhpcy5wcm9jZXNzTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU91dCA9IHRoaXMub25Nb3VzZU91dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gdGhpcy5vblRvdWNoU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gdGhpcy5wcm9jZXNzVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoRW5kID0gdGhpcy5vblRvdWNoRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSB0aGlzLnByb2Nlc3NUb3VjaEVuZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IHRoaXMub25Ub3VjaE1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSB0aGlzLnByb2Nlc3NUb3VjaE1vdmUuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxhc3QgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNzcyBzdHlsZSBvZiB0aGUgY3Vyc29yIHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9ICdpbmhlcml0JztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNhY2hlZCB2YXJcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcblxuICAgIHRoaXMuc2V0VGFyZ2V0RWxlbWVudCh0aGlzLnJlbmRlcmVyLnZpZXcsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbik7XG59XG5cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UvdG91Y2ggZXZlbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZVxuICogb3RoZXIgRE9NIGVsZW1lbnRzIG9uIHRvcCBvZiB0aGUgcmVuZGVyZXJzIENhbnZhcyBlbGVtZW50LiBXaXRoIHRoaXMgeW91J2xsIGJlIGJhbGUgdG8gZGVsZXRlZ2F0ZVxuICogYW5vdGhlciBET00gZWxlbWVudCB0byByZWNlaXZlIHRob3NlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9IHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUSGUgcmVzb2x1dGlvbiBvZiB0aGUgbmV3IGVsZW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBjYW52YXMpLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXRUYXJnZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJlc29sdXRpb24pXG57XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgdGhlIERPTSBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAgICB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgICB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICAgICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICAgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgICAgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgICAgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgdGhlIERPTSBldmVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICcnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzLlxuICogSW52b2tlZCBieSBhIHRocm90dGxlZCB0aWNrZXIgdXBkYXRlIGZyb21cbiAqIHtAbGluayBQSVhJLnRpY2tlci5zaGFyZWR9LlxuICpcbiAqIEBwYXJhbSBkZWx0YVRpbWUge251bWJlcn1cbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHRoaXMuX2RlbHRhVGltZSArPSBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZGVsdGFUaW1lIDwgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWx0YVRpbWUgPSAwO1xuXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBtb3ZlIHRoZSBtb3VzZSB0aGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gZGZvbmUgdXNpbmcgdGhlIG1vdXNlIG1vdmUhXG4gICAgaWYodGhpcy5kaWRNb3ZlKVxuICAgIHtcbiAgICAgICAgdGhpcy5kaWRNb3ZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ET1xufTtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgZGlzcGxheSBvYmplY3QgaW4gcXVlc3Rpb25cbiAqIEBwYXJhbSBldmVudFN0cmluZyB7c3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGUuZywgbW91c2Vkb3duKVxuICogQHBhcmFtIGV2ZW50RGF0YSB7b2JqZWN0fSB0aGUgZXZlbnQgZGF0YSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApXG57XG4gICAgaWYoIWV2ZW50RGF0YS5zdG9wcGVkKVxuICAgIHtcbiAgICAgICAgZXZlbnREYXRhLnRhcmdldCA9IGRpc3BsYXlPYmplY3Q7XG4gICAgICAgIGV2ZW50RGF0YS50eXBlID0gZXZlbnRTdHJpbmc7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5lbWl0KCBldmVudFN0cmluZywgZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10oIGV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXBzIHggYW5kIHkgY29vcmRzIGZyb20gYSBET00gb2JqZWN0IGFuZCBtYXBzIHRoZW0gY29ycmVjdGx5IHRvIHRoZSBwaXhpIHZpZXcuIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBwb2ludC5cbiAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgdGhlIERPTSBlbGVtZW50IGNvdWxkIGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCBhbnl3aGVyZSBvbiB0aGUgc2NyZWVuLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW5cbiAqIEBwYXJhbSAge251bWJlcn0geCAgICAgdGhlIHggY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICogQHBhcmFtICB7bnVtYmVyfSB5ICAgICB0aGUgeSBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUubWFwUG9zaXRpb25Ub1BvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgeCwgeSApXG57XG4gICAgdmFyIHJlY3QgPSB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBwb2ludC54ID0gKCAoIHggLSByZWN0LmxlZnQgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC53aWR0aCAgLyByZWN0LndpZHRoICApICkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgcG9pbnQueSA9ICggKCB5IC0gcmVjdC50b3AgICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuaGVpZ2h0IC8gcmVjdC5oZWlnaHQgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVzIGEgbmVhdCB3YXkgb2YgY3Jhd2xpbmcgdGhyb3VnaCB0aGUgc2NlbmUgZ3JhcGggYW5kIHJ1bm5pbmcgYSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gYWxsIGludGVyYWN0aXZlIG9iamVjdHMgaXQgZmluZHMuXG4gKiBJdCB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIGhpdCB0ZXN0aW5nIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlIGhpdCBhY3Jvc3MgaW4gdGhlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IGlzIHRlc3RlZCBmb3IgY29sbGlzaW9uXG4gKiBAcGFyYW0gIHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IGRpc3BsYXlPYmplY3QgdGhlIGRpc3BsYXlPYmplY3QgdGhhdCB3aWxsIGJlIGhpdCB0ZXN0IChyZWN1cmNzaXZseSBjcmF3bHMgaXRzIGNoaWxkcmVuKVxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBpbnRlcmFjdGl2ZSBvYmplY3QuIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBoaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtib29sZWFufSBoaXRUZXN0IHRoaXMgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3RzIGluc2lkZSBzaG91bGQgYmUgaGl0IHRlc3QgYWdhaW5zdCB0aGUgcG9pbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiB0aGUgZGlzcGxheU9iamVjdCBoaXQgdGhlIHBvaW50XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0ludGVyYWN0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBkaXNwbGF5T2JqZWN0LCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZSlcbntcbiAgICBpZighZGlzcGxheU9iamVjdCB8fCAhZGlzcGxheU9iamVjdC52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRvb2sgYSBsaXR0bGUgd2hpbGUgdG8gcmV3b3JrIHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5ISBCdXQgbm93IGl0IGlzIGRvbmUgYW5kIG5pY2UgYW5kIG9wdGltaXNlZC4gXl9eXG4gICAgLy8gXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdyBsb29wIHRocm91Z2ggYWxsIG9iamVjdHMgYW5kIHRoZW4gb25seSBoaXQgdGVzdCB0aGUgb2JqZWN0cyBpdCBIQVMgdG8sIG5vdCBhbGwgb2YgdGhlbS4gTVVDSCBmYXN0ZXIuLlxuICAgIC8vIEFuIG9iamVjdCB3aWxsIGJlIGhpdCB0ZXN0IGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICAvLyBcbiAgICAvLyAxOiBJdCBpcyBpbnRlcmFjdGl2ZS5cbiAgICAvLyAyOiBJdCBiZWxvbmdzIHRvIGEgcGFyZW50IHRoYXQgaXMgaW50ZXJhY3RpdmUgQU5EIG9uZSBvZiB0aGUgcGFyZW50cyBjaGlsZHJlbiBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIC8vIFxuICAgIC8vIEFzIGFub3RoZXIgbGl0dGxlIG9wdGltaXNhdGlvbiBvbmNlIGFuIGludGVyYWN0aXZlIG9iamVjdCBoYXMgYmVlbiBoaXQgd2UgY2FuIGNhcnJ5IG9uIHRocm91Z2ggdGhlIHNjZW5lZ3JhcGgsIGJ1dCB3ZSBrbm93IHRoYXQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGhpdHMhIFNvIHdlIGNhbiBhdm9pZCBleHRyYSBoaXQgdGVzdHNcbiAgICAvLyBBIGZpbmFsIG9wdGltaXNhdGlvbiBpcyB0aGF0IGFuIG9iamVjdCBpcyBub3QgaGl0IHRlc3QgZGlyZWN0bHkgaWYgYSBjaGlsZCBoYXMgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICBcbiAgICB2YXIgaGl0ID0gZmFsc2UsXG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gaW50ZXJhY3RpdmUgPSBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlIHx8IGludGVyYWN0aXZlO1xuXG4gICAgLy8gaWYgdGhlIGRpc3BsYXlvYmplY3QgaGFzIGEgaGl0QXJlYSwgdGhlbiBpdCBkb2VzIG5vdCBuZWVkIHRvIGhpdFRlc3QgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAqKiBGUkVFIFRJUCAqKiEgSWYgYW4gb2JqZWN0IGlzIG5vdCBpbnRlcmFjdHRpdmUgb3IgaGFzIG5vIGJ1dHRvbnMgaW4gaXQgKHN1Y2ggYXMgYSBnYW1lIHNjZW5lISkgc2V0IGludGVyYWN0aXZlQ2hpbGRyZW4gdG8gZmFsc2UgZm9yIHRoYXQgZGlzcGxheU9iamVjdC5cbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgcGl4aSB0byBjb21wbGV0bHkgaWdub3JlIGFuZCBieXBhc3MgY2hlY2tpbmcgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmVDaGlsZHJlbilcbiAgICB7ICAgICAgIFxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aC0xOyBpID49IDA7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGltZSB0byBnZXQgcmVjdXJzaXZlLi4gaWYgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpZiBzb210aGluZyBpcyBoaXQuLlxuICAgICAgICAgICAgaWYoIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHBvaW50LCBjaGlsZHJlbltpXSwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmVQYXJlbnQpIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55IG1vcmUgb2JqZWN0cyBpbiB0aGlzIGNvbnRhaW5lciBhcyB3ZSB3ZSBub3cga25vdyB0aGUgcGFyZW50IGhhcyBiZWVuIGhpdFxuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGludGVyYWN0aXZlICwgdGhhdCBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGl0IHdhcyBhY3R1YWxseSBpbnRlcmFjdGl2ZSBhbmQgbm90IGp1c3QgdGhlIGNoaWxkIG9mIGFuIGludGVyYWN0aXZlIG9iamVjdC4gXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnl0aGluZyBlbHNlLiBXZSBzdGlsbCBuZWVkIHRvIHJ1biB0aHJvdWdoIGFsbCBvYmplY3RzLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBoaXQgdGVzdHMuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uaW50ZXJhY3RpdmUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoaXRUZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm8gcG9pbnQgcnVubmluZyB0aGlzIGlmIHRoZSBpdGVtIGlzIG5vdCBpbnRlcmFjdGl2ZSBvciBkb2VzIG5vdCBoYXZlIGFuIGludGVyYWN0aXZlIHBhcmVudC5cbiAgICBpZihpbnRlcmFjdGl2ZSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBoaXQgdGVzdGluZyAoYXMgaW4gd2UgaGF2ZSBubyBoaXQgYW55IG9iamVjdHMgeWV0KVxuICAgICAgICAvLyBXZSBhbHNvIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGl0IHRlc3RpbmcgaWYgb25jZSBvZiB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4gaGFzIGFscmVhZHkgYmVlbiBoaXQhXG4gICAgICAgIGlmKGhpdFRlc3QgJiYgIWhpdClcbiAgICAgICAgeyAgXG4gICAgICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0aGlzLl90ZW1wUG9pbnQpO1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuaGl0QXJlYS5jb250YWlucyggdGhpcy5fdGVtcFBvaW50LngsIHRoaXMuX3RlbXBQb2ludC55ICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnVuYyhkaXNwbGF5T2JqZWN0LCBoaXQpOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIFxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyBwcmVzc2VkIGRvd25cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZURvd24sIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIGRvd24gY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VEb3duID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuICAgIFxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3RbIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bicgXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGRvd24nIDogJ21vdXNlZG93bicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcmVsZWFzZWRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VVcCwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgdXAgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlVXAgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG4gICAgdmFyIGlzRG93biA9ICBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXAnIDogJ21vdXNldXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRjbGljaycgOiAnY2xpY2snLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cG91dHNpZGUnIDogJ21vdXNldXBvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiB0aGUgbW91c2UgbW92aW5nXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmRpZE1vdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU1vdmUsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE8gQlVHIGZvciBwYXJlbnRzIGluZXJhY3RpdmUgb2JqZWN0IChib3JkZXIgb3JkZXIgaXNzdWUpXG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2Vtb3ZlJywgdGhpcy5ldmVudERhdGEpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dChkaXNwbGF5T2JqZWN0LCBoaXQpO1xufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYmVpbmcgbW92ZWQgb3V0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICAvLyBUT0RPIG9wdGltaXplIGJ5IG5vdCBjaGVjayBFVkVSWSBUSU1FISBtYXliZSBoYWxmIGFzIG9mdGVuPyAvL1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgZmFsc2UgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG92ZXIvb3V0IGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgaWYoIWRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5T2JqZWN0LmJ1dHRvbk1vZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gZGlzcGxheU9iamVjdC5kZWZhdWx0Q3Vyc29yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgdGhpcy5ldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgc3RhcnRlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBzdGFydGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG4gICAgICAgIC8vVE9ETyBQT09MXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaFN0YXJ0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoc3RhcnQnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGVuZHMgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggZW5kaW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIC8vVE9ETyB0aGlzIHNob3VsZCBiZSBwYXNzZWQgYWxvbmcuLiBubyBzZXRcbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hFbmQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgZW5kIG9mIGEgdG91Y2ggYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoRW5kID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0YXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgbW92ZWQgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIG1vdmluZyBhY3Jvc3MgdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaE1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaGl0ID0gaGl0O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNobW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogR3JhYnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaEV2ZW50IHtFdmVudERhdGF9IFRoZSB0b3VjaCBldmVudCB3ZSBuZWVkIHRvIHBhaXIgd2l0aCBhbiBpbnRlcmFjdGlvbkRhdGEgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRUb3VjaERhdGEgPSBmdW5jdGlvbiAodG91Y2hFdmVudClcbntcbiAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnBvcCgpO1xuXG4gICAgaWYoIXRvdWNoRGF0YSlcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcbiAgICB9XG5cbiAgICB0b3VjaERhdGEuaWRlbnRpZmllciA9IHRvdWNoRXZlbnQuaWRlbnRpZmllcjtcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdG91Y2hEYXRhLmdsb2JhbCwgdG91Y2hFdmVudC5jbGllbnRYLCB0b3VjaEV2ZW50LmNsaWVudFkgKTtcblxuICAgIGlmKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC54ID0gdG91Y2hEYXRhLmdsb2JhbC54IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnkgPSB0b3VjaERhdGEuZ2xvYmFsLnkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgfVxuXG4gICAgdG91Y2hFdmVudC5nbG9iYWxYID0gdG91Y2hEYXRhLmdsb2JhbC54O1xuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWSA9IHRvdWNoRGF0YS5nbG9iYWwueTtcblxuICAgIHJldHVybiB0b3VjaERhdGE7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hEYXRhIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX0gVGhlIHRvdWNoIGRhdGEgb2JqZWN0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5Ub3VjaERhdGEgPSBmdW5jdGlvbiAoIHRvdWNoRGF0YSApXG57XG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnB1c2goIHRvdWNoRGF0YSApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgaW50ZXJhY3Rpb24gbWFuYWdlclxuICpcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMubW91c2UgPSBudWxsO1xuXG4gICAgdGhpcy5ldmVudERhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZVVwID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gbnVsbDtcblxuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaEVuZCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMuX3RlbXBQb2ludCA9IG51bGw7XG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGludGVyYWN0aW9ucyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSW50ZXJhY3Rpb25EYXRhOiAgICByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpLFxuICAgIEludGVyYWN0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9JbnRlcmFjdGlvbk1hbmFnZXInKSxcbiAgICBpbnRlcmFjdGl2ZVRhcmdldDogIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxufTtcbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgaW50ZXJhY3RpdmUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmludGVyYWN0aW9uLmludGVyYWN0aXZlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBpbnRlcmFjdGl2ZVRhcmdldCA9IHtcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGJ1dHRvbk1vZGU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmVDaGlsZHJlbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGRlZmF1bHRDdXJzb3I6ICdwb2ludGVyJyxcblxuICAgIC8vIHNvbWUgaW50ZXJuYWwgY2hlY2tzLi5cblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb3ZlcjogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90b3VjaERvd246IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyYWN0aXZlVGFyZ2V0O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuLi9leHRyYXMnKSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5cbmZ1bmN0aW9uIHBhcnNlKHJlc291cmNlLCB0ZXh0dXJlKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgaW5mbyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXTtcbiAgICB2YXIgY29tbW9uID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XG5cbiAgICBkYXRhLmZvbnQgPSBpbmZvLmdldEF0dHJpYnV0ZSgnZmFjZScpO1xuICAgIGRhdGEuc2l6ZSA9IHBhcnNlSW50KGluZm8uZ2V0QXR0cmlidXRlKCdzaXplJyksIDEwKTtcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBwYXJzZUludChjb21tb24uZ2V0QXR0cmlidXRlKCdsaW5lSGVpZ2h0JyksIDEwKTtcbiAgICBkYXRhLmNoYXJzID0ge307XG5cbiAgICAvL3BhcnNlIGxldHRlcnNcbiAgICB2YXIgbGV0dGVycyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NoYXInKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdpZCcpLCAxMCk7XG5cbiAgICAgICAgdmFyIHRleHR1cmVSZWN0ID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3gnKSwgMTApICsgdGV4dHVyZS5mcmFtZS54LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3knKSwgMTApICsgdGV4dHVyZS5mcmFtZS55LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSwgMTApXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICB4T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneG9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB5T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneW9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB4QWR2YW5jZTogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hhZHZhbmNlJyksIDEwKSxcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9LFxuICAgICAgICAgICAgdGV4dHVyZTogbmV3IGNvcmUuVGV4dHVyZSh0ZXh0dXJlLmJhc2VUZXh0dXJlLCB0ZXh0dXJlUmVjdClcblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vcGFyc2Uga2VybmluZ3NcbiAgICB2YXIga2VybmluZ3MgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXJuaW5nJyk7XG4gICAgZm9yIChpID0gMDsgaSA8IGtlcm5pbmdzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdmaXJzdCcpLCAxMCk7XG4gICAgICAgIHZhciBzZWNvbmQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ3NlY29uZCcpLCAxMCk7XG4gICAgICAgIHZhciBhbW91bnQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2Ftb3VudCcpLCAxMCk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tzZWNvbmRdLmtlcm5pbmdbZmlyc3RdID0gYW1vdW50O1xuICAgIH1cblxuICAgIHJlc291cmNlLmJpdG1hcEZvbnQgPSBkYXRhO1xuXG4gICAgLy8gSSdtIGxlYXZpbmcgdGhpcyBhcyBhIHRlbXBvcmFyeSBmaXggc28gd2UgY2FuIHRlc3QgdGhlIGJpdG1hcCBmb250cyBpbiB2M1xuICAgIC8vIGJ1dCBpdCdzIHZlcnkgbGlrZWx5IHRvIGNoYW5nZVxuICAgIGV4dHJhcy5CaXRtYXBUZXh0LmZvbnRzW2RhdGEuZm9udF0gPSBkYXRhO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhIG9yIG5vdCB4bWwgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzWG1sKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBpZiBub3QgYml0bWFwIGZvbnQgZGF0YSwgdXNpbmcgc29tZSBzaWxseSBkdWNrLXR5cGluZ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF0uZ2V0QXR0cmlidXRlKCdmYWNlJykgPT09IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4bWxVcmwgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsKTtcblxuICAgICAgICBpZiAoeG1sVXJsID09PSAnLicpIHtcbiAgICAgICAgICAgIHhtbFVybCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmFzZVVybCAmJiB4bWxVcmwpIHtcbiAgICAgICAgICAgIC8vIGlmIGJhc2V1cmwgaGFzIGEgdHJhaWxpbmcgc2xhc2ggdGhlbiBhZGQgb25lIHRvIHhtbFVybCBzbyB0aGUgcmVwbGFjZSB3b3JrcyBiZWxvd1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVVybC5jaGFyQXQodGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEpID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYmFzZVVybCBmcm9tIHhtbFVybFxuICAgICAgICAgICAgeG1sVXJsID0geG1sVXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiB4bWxVcmwgbm93LCBpdCBuZWVkcyBhIHRyYWlsaW5nIHNsYXNoLiBFbnN1cmUgdGhhdCBpdCBkb2VzIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZW1wdHkuXG4gICAgICAgIGlmICh4bWxVcmwgJiYgeG1sVXJsLmNoYXJBdCh4bWxVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4dHVyZVVybCA9IHhtbFVybCArIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKVswXS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKTtcbiAgICAgICAgaWYgKGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKSB7XG4gICAgICAgICAgICAvL3JldXNlIGV4aXN0aW5nIHRleHR1cmVcbiAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBsb2FkIHRoZSB0ZXh0dXJlIGZvciB0aGUgZm9udFxuICAgICAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCB0ZXh0dXJlVXJsLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCByZXMudGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGxvYWRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmxvYWRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTG9hZGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlcicpLFxuXG4gICAgLy8gcGFyc2Vyc1xuICAgIGJpdG1hcEZvbnRQYXJzZXI6ICAgcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXI6ICByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgdGV4dHVyZVBhcnNlcjogICAgICByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBSZXNvdXJjZTogICAgICAgICAgIHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlXG59O1xuIiwidmFyIFJlc291cmNlTG9hZGVyID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJyksXG4gICAgdGV4dHVyZVBhcnNlciA9IHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyID0gcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIGJpdG1hcEZvbnRQYXJzZXIgPSByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKTtcblxuLyoqXG4gKlxuICogVGhlIG5ldyBsb2FkZXIsIGV4dGVuZHMgUmVzb3VyY2UgTG9hZGVyIGJ5IENoYWQgRW5nbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2VuZ2xlcmNqL3Jlc291cmNlLWxvYWRlclxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbG9hZGVyID0gUElYSS5sb2FkZXI7IC8vIHBpeGkgZXhwb3NlcyBhIHByZW1hZGUgaW5zdGFuY2UgZm9yIHlvdSB0byB1c2UuXG4gKiAvL29yXG4gKiB2YXIgbG9hZGVyID0gbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIoKTsgLy8geW91IGNhbiBhbHNvIGNyZWF0ZSB5b3VyIG93biBpZiB5b3Ugd2FudFxuICpcbiAqIGxvYWRlci5hZGQoJ2J1bm55JyxcImRhdGEvYnVubnkucG5nXCIpO1xuICpcbiAqIGxvYWRlci5vbmNlKCdjb21wbGV0ZScsb25Bc3NldHNMb2FkZWQpO1xuICpcbiAqIGxvYWRlci5sb2FkKCk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuUmVzb3VyY2VMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmxvYWRlcnNcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpXG57XG4gICAgUmVzb3VyY2VMb2FkZXIuY2FsbCh0aGlzLCBiYXNlVXJsLCBjb25jdXJyZW5jeSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IExvYWRlci5fcGl4aU1pZGRsZXdhcmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy51c2UoTG9hZGVyLl9waXhpTWlkZGxld2FyZVtpXSgpKTtcbiAgICB9XG59XG5cbkxvYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuTG9hZGVyLl9waXhpTWlkZGxld2FyZSA9IFtcbiAgICAvLyBwYXJzZSBhbnkgYmxvYiBpbnRvIG1vcmUgdXNhYmxlIG9iamVjdHMgKGUuZy4gSW1hZ2UpXG4gICAgUmVzb3VyY2VMb2FkZXIubWlkZGxld2FyZS5wYXJzaW5nLmJsb2IsXG4gICAgLy8gcGFyc2UgYW55IEltYWdlIG9iamVjdHMgaW50byB0ZXh0dXJlc1xuICAgIHRleHR1cmVQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIHNwcml0ZXNoZWV0UGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBiaXRtYXBGb250UGFyc2VyXG5dO1xuXG5Mb2FkZXIuYWRkUGl4aU1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLnB1c2goZm4pO1xufTtcblxuLy8gQWRkIGN1c3RvbSBleHRlbnRpb25zXG52YXIgUmVzb3VyY2UgPSBSZXNvdXJjZUxvYWRlci5SZXNvdXJjZTtcblxuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSgnZm50JywgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpO1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSwgaXRzIG5vdCBqc29uLCBvciBpdCBpc24ndCBzcHJpdGVzaGVldCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNKc29uIHx8ICFyZXNvdXJjZS5kYXRhLmZyYW1lcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByb3V0ZSA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKSk7XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybCggcmVzb3VyY2UudXJsICk7XG5cbiAgICAgICAgLy8gbG9hZCB0aGUgaW1hZ2UgZm9yIHRoaXMgc2hlZXRcbiAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCByb3V0ZSArICcvJyArIHJlc291cmNlLmRhdGEubWV0YS5pbWFnZSwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzID0ge307XG5cbiAgICAgICAgICAgIHZhciBmcmFtZXMgPSByZXNvdXJjZS5kYXRhLmZyYW1lcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmcmFtZXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBmcmFtZXNbaV0uZnJhbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVjdClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaW0gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC5oLCByZWN0LncpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC53LCByZWN0LmgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS50cmltbWVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmltID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnggLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnkgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLncgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLmggLyByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsaXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQhXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBzaXplLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUueSAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoIC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0IC89IHJlc29sdXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXNbaV0gPSBuZXcgY29yZS5UZXh0dXJlKHJlcy50ZXh0dXJlLmJhc2VUZXh0dXJlLCBzaXplLCBzaXplLmNsb25lKCksIHRyaW0sIGZyYW1lc1tpXS5yb3RhdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbaV0gPSByZXNvdXJjZS50ZXh0dXJlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZSBpZiB0aGUgZGF0YSBpcyBhbiBJbWFnZSBvYmplY3RcbiAgICAgICAgaWYgKHJlc291cmNlLmRhdGEgJiYgcmVzb3VyY2UuaXNJbWFnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGJhc2VUZXh0dXJlID0gbmV3IGNvcmUuQmFzZVRleHR1cmUocmVzb3VyY2UuZGF0YSwgbnVsbCwgY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwocmVzb3VyY2UudXJsKSk7XG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IHJlc291cmNlLnVybDtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmUgPSBuZXcgY29yZS5UZXh0dXJlKGJhc2VUZXh0dXJlKTtcbiAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1Y250aW9uc1xuICAgICAgICAgICAgY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSBiYXNlVGV4dHVyZTtcbiAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSByZXNvdXJjZS50ZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICB0ZW1wUG9seWdvbiA9IG5ldyBjb3JlLlBvbHlnb24oKTtcblxuLyoqXG4gKiBCYXNlIG1lc2ggY2xhc3NcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRvIHVzZVxuICogQHBhcmFtIFt2ZXJ0aWNlc10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdmVydGljZXNcbiAqIEBwYXJhbSBbdXZzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB1dnNcbiAqIEBwYXJhbSBbaW5kaWNlc10ge1VpbnQxNkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBpbmRpY2VzXG4gKiBAcGFyYW0gW2RyYXdNb2RlXSB7bnVtYmVyfSB0aGUgZHJhd01vZGUsIGNhbiBiZSBhbnkgb2YgdGhlIE1lc2guRFJBV19NT0RFUyBjb25zdHNcbiAqL1xuZnVuY3Rpb24gTWVzaCh0ZXh0dXJlLCB2ZXJ0aWNlcywgdXZzLCBpbmRpY2VzLCBkcmF3TW9kZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gdXZzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEsIDAsXG4gICAgICAgIDEsIDEsXG4gICAgICAgIDAsIDFdKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEwMCwgMCxcbiAgICAgICAgMTAwLCAxMDAsXG4gICAgICAgIDAsIDEwMF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICAvLyAgVE9ETyBhdXRvIGdlbmVyYXRlIHRoaXMgYmFzZWQgb24gZHJhdyBtb2RlIVxuICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXMgfHwgbmV3IFVpbnQxNkFycmF5KFswLCAxLCAzLCAyXSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBNZXNoIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gU2V0IHRvIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVtb3ZlIGFueSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRyaWFuZ2xlcyBpbiBjYW52YXMgbW9kZSBhcmUgYXV0b21hdGljYWxseSBhbnRpYWxpYXNlZCwgdXNlIHRoaXMgdmFsdWUgdG8gZm9yY2UgdHJpYW5nbGVzIHRvIG92ZXJsYXAgYSBiaXQgd2l0aCBlYWNoIG90aGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2F5IHRoZSBNZXNoIHNob3VsZCBiZSBkcmF3biwgY2FuIGJlIGFueSBvZiB0aGUge0BsaW5rIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVN9IGNvbnN0c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuZHJhd01vZGUgPSBkcmF3TW9kZSB8fCBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSDtcblxuICAgIC8vIHJ1biB0ZXh0dXJlIHNldHRlcjtcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBtZXNoIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5NZXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2g7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2g7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc2gucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkubWVzaC5NZXNoI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5tZXNoKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLm1lc2gucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4IHwgMCwgdHJhbnNmb3JtLnR5IHwgMCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHgsIHRyYW5zZm9ybS50eSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoKGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMoY29udGV4dCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIFRyaWFuZ2xlIE1lc2ggbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2ggPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoIC8gMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkgKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgsIChpbmRleCArIDIpLCAoaW5kZXggKyA0KSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIHRyaWFuZ2xlIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDMpXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXgwID0gaW5kaWNlc1tpXSAqIDIsIGluZGV4MSA9IGluZGljZXNbaSArIDFdICogMiwgaW5kZXgyID0gaW5kaWNlc1tpICsgMl0gKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4Mik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyBvbmUgb2YgdGhlIHRyaWFuZ2xlcyB0aGF0IGZvcm0gdGhpcyBNZXNoXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdmVydGljZXMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHZlcnRpY2VzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gdXZzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB1dnMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSBpbmRleDAge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDEge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgyIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlID0gZnVuY3Rpb24gKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpXG57XG4gICAgdmFyIHRleHR1cmVTb3VyY2UgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZTtcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aDtcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXgwXSwgeDEgPSB2ZXJ0aWNlc1tpbmRleDFdLCB4MiA9IHZlcnRpY2VzW2luZGV4Ml07XG4gICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgwICsgMV0sIHkxID0gdmVydGljZXNbaW5kZXgxICsgMV0sIHkyID0gdmVydGljZXNbaW5kZXgyICsgMV07XG5cbiAgICB2YXIgdTAgPSB1dnNbaW5kZXgwXSAqIHRleHR1cmVXaWR0aCwgdTEgPSB1dnNbaW5kZXgxXSAqIHRleHR1cmVXaWR0aCwgdTIgPSB1dnNbaW5kZXgyXSAqIHRleHR1cmVXaWR0aDtcbiAgICB2YXIgdjAgPSB1dnNbaW5kZXgwICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MSA9IHV2c1tpbmRleDEgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYyID0gdXZzW2luZGV4MiArIDFdICogdGV4dHVyZUhlaWdodDtcblxuICAgIGlmICh0aGlzLmNhbnZhc1BhZGRpbmcgPiAwKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmdYID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgcGFkZGluZ1kgPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciBjZW50ZXJYID0gKHgwICsgeDEgKyB4MikgLyAzO1xuICAgICAgICB2YXIgY2VudGVyWSA9ICh5MCArIHkxICsgeTIpIC8gMztcblxuICAgICAgICB2YXIgbm9ybVggPSB4MCAtIGNlbnRlclg7XG4gICAgICAgIHZhciBub3JtWSA9IHkwIC0gY2VudGVyWTtcblxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgwID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkwID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgLy9cblxuICAgICAgICBub3JtWCA9IHgxIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MSAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgxID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkxID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgbm9ybVggPSB4MiAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTIgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MiA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MiA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cblxuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGNvbnRleHQuY2xpcCgpO1xuXG4gICAgLy8gQ29tcHV0ZSBtYXRyaXggdHJhbnNmb3JtXG4gICAgdmFyIGRlbHRhID0gICh1MCAqIHYxKSAgICAgICsgKHYwICogdTIpICAgICAgKyAodTEgKiB2MikgICAgICAtICh2MSAqIHUyKSAgICAgIC0gKHYwICogdTEpICAgICAgLSAodTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQSA9ICh4MCAqIHYxKSAgICAgICsgKHYwICogeDIpICAgICAgKyAoeDEgKiB2MikgICAgICAtICh2MSAqIHgyKSAgICAgIC0gKHYwICogeDEpICAgICAgLSAoeDAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQiA9ICh1MCAqIHgxKSAgICAgICsgKHgwICogdTIpICAgICAgKyAodTEgKiB4MikgICAgICAtICh4MSAqIHUyKSAgICAgIC0gKHgwICogdTEpICAgICAgLSAodTAgKiB4Mik7XG4gICAgdmFyIGRlbHRhQyA9ICh1MCAqIHYxICogeDIpICsgKHYwICogeDEgKiB1MikgKyAoeDAgKiB1MSAqIHYyKSAtICh4MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB4MikgLSAodTAgKiB4MSAqIHYyKTtcbiAgICB2YXIgZGVsdGFEID0gKHkwICogdjEpICAgICAgKyAodjAgKiB5MikgICAgICArICh5MSAqIHYyKSAgICAgIC0gKHYxICogeTIpICAgICAgLSAodjAgKiB5MSkgICAgICAtICh5MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFFID0gKHUwICogeTEpICAgICAgKyAoeTAgKiB1MikgICAgICArICh1MSAqIHkyKSAgICAgIC0gKHkxICogdTIpICAgICAgLSAoeTAgKiB1MSkgICAgICAtICh1MCAqIHkyKTtcbiAgICB2YXIgZGVsdGFGID0gKHUwICogdjEgKiB5MikgKyAodjAgKiB5MSAqIHUyKSArICh5MCAqIHUxICogdjIpIC0gKHkwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHkyKSAtICh1MCAqIHkxICogdjIpO1xuXG4gICAgY29udGV4dC50cmFuc2Zvcm0oZGVsdGFBIC8gZGVsdGEsIGRlbHRhRCAvIGRlbHRhLFxuICAgICAgICBkZWx0YUIgLyBkZWx0YSwgZGVsdGFFIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQyAvIGRlbHRhLCBkZWx0YUYgLyBkZWx0YSk7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlU291cmNlLCAwLCAwKTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBmbGF0IE1lc2hcbiAqXG4gKiBAcGFyYW0gTWVzaCB7UElYSS5tZXNoLk1lc2h9IFRoZSBNZXNoIHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUucmVuZGVyTWVzaEZsYXQgPSBmdW5jdGlvbiAoTWVzaClcbntcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICB2YXIgdmVydGljZXMgPSBNZXNoLnZlcnRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aC8yO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgZm9yICh2YXIgaT0xOyBpIDwgbGVuZ3RoLTI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkqMjtcblxuICAgICAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleF0sICAgeDEgPSB2ZXJ0aWNlc1tpbmRleCsyXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleCs0XTtcbiAgICAgICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgrMV0sIHkxID0gdmVydGljZXNbaW5kZXgrM10sIHkyID0gdmVydGljZXNbaW5kZXgrNV07XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVwZGF0ZUZyYW1lID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBtZXNoIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5NZXNoLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICghdGhpcy5fY3VycmVudEJvdW5kcykge1xuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1pblkgPSBJbmZpbml0eTtcblxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IG47IGkgKz0gMikge1xuICAgICAgICAgICAgdmFyIHJhd1ggPSB2ZXJ0aWNlc1tpXSwgcmF3WSA9IHZlcnRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciB4ID0gKGEgKiByYXdYKSArIChjICogcmF3WSkgKyB0eDtcbiAgICAgICAgICAgIHZhciB5ID0gKGQgKiByYXdZKSArIChiICogcmF3WCkgKyB0eTtcblxuICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcblxuICAgICAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG4gICAgICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5YID09PSAtSW5maW5pdHkgfHwgbWF4WSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIG1lc2guIFdvcmtzIG9ubHkgZm9yIFRSSUFOR0xFX01FU0hcbiAqXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4gKi9cbk1lc2gucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKSB7XG4gICAgaWYgKCF0aGlzLmdldEJvdW5kcygpLmNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgcG9pbnRzID0gdGVtcFBvbHlnb24ucG9pbnRzO1xuICAgIHZhciBpLCBsZW47XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUykge1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICAgICAgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgLy9UT0RPOiBpbmxpbmUgdGhpcy5cbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Mykge1xuICAgICAgICAgICAgdmFyIGluZDAgPSBpbmRpY2VzW2ldKjIsIGluZDEgPSBpbmRpY2VzW2krMV0qMiwgaW5kMiA9IGluZGljZXNbaSsyXSoyO1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaW5kMF07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpbmQwKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaW5kMV07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpbmQxKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaW5kMl07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpbmQyKzFdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Nikge1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaSsyXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2krM107XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpKzRdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaSs1XTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEaWZmZXJlbnQgZHJhd2luZyBidWZmZXIgbW9kZXMgc3VwcG9ydGVkXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSFxuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gKi9cbk1lc2guRFJBV19NT0RFUyA9IHtcbiAgICBUUklBTkdMRV9NRVNIOiAwLFxuICAgIFRSSUFOR0xFUzogMVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG5cbi8qKlxuICogVGhlIFBsYW5lIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIFBsYW5lID0gbmV3IFBJWEkuUGxhbmUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgUGxhbmUuXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNYIC0gVGhlIG51bWJlciBveCB4IHNlZ21lbnRzXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNZIC0gVGhlIG51bWJlciBvZiB5IHNlZ21lbnRzXG4gKlxuICovXG5mdW5jdGlvbiBQbGFuZSh0ZXh0dXJlLCBzZWdtZW50c1gsIHNlZ21lbnRzWSlcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgUGxhbmUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWdtZW50c1ggPSAgc2VnbWVudHNYIHx8IDEwO1xuICAgIHRoaXMuc2VnbWVudHNZID0gc2VnbWVudHNZIHx8IDEwO1xuXG4gICAgdGhpcy5kcmF3TW9kZSA9IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVM7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUGxhbmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKTtcblBsYW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsYW5lO1xubW9kdWxlLmV4cG9ydHMgPSBQbGFuZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblBsYW5lLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciB0b3RhbCA9IHRoaXMuc2VnbWVudHNYICogdGhpcy5zZWdtZW50c1k7XG4gICAgdmFyIHZlcnRzID0gW107XG4gICAgdmFyIGNvbG9ycyA9IFtdO1xuICAgIHZhciB1dnMgPSBbXTtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuXG4gIC8vICB0ZXh0dXJlLndpZHRoID0gODAwIHRleHR1cmUud2lkdGggfHwgODAwO1xuIC8vICAgdGV4dHVyZS5oZWlnaHQgPSA4MDAvL3RleHR1cmUuaGVpZ2h0IHx8IDgwMDtcblxuICAgIHZhciBzZWdtZW50c1hTdWIgPSB0aGlzLnNlZ21lbnRzWCAtIDE7XG4gICAgdmFyIHNlZ21lbnRzWVN1YiA9IHRoaXMuc2VnbWVudHNZIC0gMTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB2YXIgc2l6ZVggPSB0ZXh0dXJlLndpZHRoIC8gc2VnbWVudHNYU3ViO1xuICAgIHZhciBzaXplWSA9IHRleHR1cmUuaGVpZ2h0IC8gc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcblxuICAgICAgICB2YXIgeCA9IChpICUgdGhpcy5zZWdtZW50c1gpO1xuICAgICAgICB2YXIgeSA9ICggKGkgLyB0aGlzLnNlZ21lbnRzWCApIHwgMCApO1xuXG5cbiAgICAgICAgdmVydHMucHVzaCgoeCAqIHNpemVYKSxcbiAgICAgICAgICAgICAgICAgICAoeSAqIHNpemVZKSk7XG5cbiAgICAgICAgLy8gdGhpcyB3b3JrcyBmb3IgcmVjdGFuZ3VsYXIgdGV4dHVyZXMuIFxuICAgICAgICB1dnMucHVzaCh0ZXh0dXJlLl91dnMueDAgKyAodGV4dHVyZS5fdXZzLngxIC0gdGV4dHVyZS5fdXZzLngwKSAqICh4IC8gKHRoaXMuc2VnbWVudHNYLTEpKSwgdGV4dHVyZS5fdXZzLnkwICsgKHRleHR1cmUuX3V2cy55My10ZXh0dXJlLl91dnMueTApICogKHkvICh0aGlzLnNlZ21lbnRzWS0xKSkpO1xuICAgICAgfVxuXG4gICAgLy8gIGNvbnNcblxuICAgIHZhciB0b3RhbFN1YiA9IHNlZ21lbnRzWFN1YiAqIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFN1YjsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHhwb3MgPSBpICUgc2VnbWVudHNYU3ViO1xuICAgICAgICB2YXIgeXBvcyA9IChpIC8gc2VnbWVudHNYU3ViICkgfCAwO1xuXG5cbiAgICAgICAgdmFyICB2YWx1ZSA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTIgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuICAgICAgICB2YXIgIHZhbHVlMyA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWU0ID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMyk7XG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZTIsIHZhbHVlNCwgdmFsdWUzKTtcbiAgICB9XG5cblxuICAgIC8vY29uc29sZS5sb2coaW5kaWNlcylcbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0cyk7XG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHV2cyk7XG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvbG9ycyk7XG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBsYW5lLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUGxhbmUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSByb3BlIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIHJvcGUgPSBuZXcgUElYSS5Sb3BlKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIHJvcGUuXG4gKiBAcGFyYW0ge1BJWEkuUG9pbnRbXX0gcG9pbnRzIC0gQW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuUG9pbnR9IG9iamVjdHMgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAqXG4gKi9cbmZ1bmN0aW9uIFJvcGUodGV4dHVyZSwgcG9pbnRzKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfSBBbiBhcnJheSBvZiBwb2ludHMgdGhhdCBkZXRlcm1pbmUgdGhlIHJvcGVcbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBvZiB2ZXJ0aWNlcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IFRoZSBXZWJHTCBVdnMgb2YgdGhlIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBjb21wb25lbnRzXG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSByb3BlIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICAgdGhpcy5yZWZyZXNoKCk7XG59XG5cblxuLy8gY29uc3RydWN0b3JcblJvcGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNZXNoLnByb3RvdHlwZSk7XG5Sb3BlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvcGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvcGU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5Sb3BlLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICAvLyBpZiB0b28gbGl0dGxlIHBvaW50cywgb3IgdGV4dHVyZSBoYXNuJ3QgZ290IFVWcyBzZXQgeWV0IGp1c3QgbW92ZSBvbi5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEgfHwgIXRoaXMuX3RleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cbiAgICB2YXIgdGV4dHVyZVV2cyA9IHRoaXMuX3RleHR1cmUuX3V2cztcbiAgICB2YXIgb2Zmc2V0ID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MCk7XG4gICAgdmFyIGZhY3RvciA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDIgLSB0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkyIC0gdGV4dHVyZVV2cy55MCk7XG5cbiAgICB1dnNbMF0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzFdID0gMCArIG9mZnNldC55O1xuICAgIHV2c1syXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgIGNvbG9yc1swXSA9IDE7XG4gICAgY29sb3JzWzFdID0gMTtcblxuICAgIGluZGljZXNbMF0gPSAwO1xuICAgIGluZGljZXNbMV0gPSAxO1xuXG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCBhbW91bnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcbiAgICAgICAgLy8gdGltZSB0byBkbyBzb21lIHNtYXJ0IGRyYXdpbmchXG4gICAgICAgIGFtb3VudCA9IGkgLyAodG90YWwtMSk7XG5cbiAgICAgICAgdXZzW2luZGV4XSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCsxXSA9IDAgKyBvZmZzZXQueTtcblxuICAgICAgICB1dnNbaW5kZXgrMl0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBjb2xvcnNbaW5kZXhdID0gMTtcbiAgICAgICAgY29sb3JzW2luZGV4KzFdID0gMTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGluZGV4O1xuICAgICAgICBpbmRpY2VzW2luZGV4ICsgMV0gPSBpbmRleCArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFJvcGUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9pbnQgPSBwb2ludHNbMF07XG4gICAgdmFyIG5leHRQb2ludDtcbiAgICB2YXIgcGVycFggPSAwO1xuICAgIHZhciBwZXJwWSA9IDA7XG5cbiAgICAvLyB0aGlzLmNvdW50IC09IDAuMjtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCByYXRpbywgcGVycExlbmd0aCwgbnVtO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG5cbiAgICAgICAgaWYgKGkgPCBwb2ludHMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50c1tpKzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwWSA9IC0obmV4dFBvaW50LnggLSBsYXN0UG9pbnQueCk7XG4gICAgICAgIHBlcnBYID0gbmV4dFBvaW50LnkgLSBsYXN0UG9pbnQueTtcblxuICAgICAgICByYXRpbyA9ICgxIC0gKGkgLyAodG90YWwtMSkpKSAqIDEwO1xuXG4gICAgICAgIGlmIChyYXRpbyA+IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhdGlvID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBMZW5ndGggPSBNYXRoLnNxcnQocGVycFggKiBwZXJwWCArIHBlcnBZICogcGVycFkpO1xuICAgICAgICBudW0gPSB0aGlzLl90ZXh0dXJlLmhlaWdodCAvIDI7IC8vKDIwICsgTWF0aC5hYnMoTWF0aC5zaW4oKGkgKyB0aGlzLmNvdW50KSAqIDAuMykgKiA1MCkgKSogcmF0aW87XG4gICAgICAgIHBlcnBYIC89IHBlcnBMZW5ndGg7XG4gICAgICAgIHBlcnBZIC89IHBlcnBMZW5ndGg7XG5cbiAgICAgICAgcGVycFggKj0gbnVtO1xuICAgICAgICBwZXJwWSAqPSBudW07XG5cbiAgICAgICAgdmVydGljZXNbaW5kZXhdID0gcG9pbnQueCArIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsxXSA9IHBvaW50LnkgKyBwZXJwWTtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMl0gPSBwb2ludC54IC0gcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzNdID0gcG9pbnQueSAtIHBlcnBZO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IHBvaW50O1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5tZXNoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1lc2g6ICAgICAgICAgICByZXF1aXJlKCcuL01lc2gnKSxcbiAgICBQbGFuZTogICAgICAgICAgIHJlcXVpcmUoJy4vUGxhbmUnKSxcbiAgICBSb3BlOiAgICAgICAgICAgcmVxdWlyZSgnLi9Sb3BlJyksXG4gICAgTWVzaFJlbmRlcmVyOiAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFJlbmRlcmVyJyksXG4gICAgTWVzaFNoYWRlcjogICAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFNoYWRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgTWVzaCA9IHJlcXVpcmUoJy4uL01lc2gnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBNZXNoUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL01lc2hSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDE1MDAwKTtcblxuICAgIC8vVE9ETyB0aGlzIGNvdWxkIGJlIGEgc2luZ2xlIGJ1ZmZlciBzaGFyZWQgYW1vbmdzdCBhbGwgcmVuZGVyZXJzIGFzIHdlIHJldXNlIHRoaXMgc2V0IHVwIGluIG1vc3QgcmVuZGVyZXJzXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCAxNTAwMDsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59XG5cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hSZW5kZXJlcjtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoJywgTWVzaFJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIGlmKCFtZXNoLl92ZXJ0ZXhCdWZmZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9pbml0V2ViR0wobWVzaCk7XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcixcbiAgICAgICAgZ2wgPSByZW5kZXJlci5nbCxcbiAgICAgICAgdGV4dHVyZSA9IG1lc2guX3RleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIHNoYWRlciA9IG1lc2guc2hhZGVyOy8vIHx8IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuXG4gICAgdmFyIGRyYXdNb2RlID0gbWVzaC5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0ggPyBnbC5UUklBTkdMRV9TVFJJUCA6IGdsLlRSSUFOR0xFUztcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKG1lc2guYmxlbmRNb2RlKTtcblxuICAgIC8vVE9ETyBjYWNoZSBjdXN0b20gc3RhdGUuLlxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHNoYWRlci5zaGFkZXJzW2dsLmlkXSB8fCBzaGFkZXIuZ2V0U2hhZGVyKHJlbmRlcmVyKTsvLyA6IHNoYWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXgudmFsdWUgPSBtZXNoLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXgudmFsdWUgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSBtZXNoLndvcmxkQWxwaGE7XG5cbiAgICBzaGFkZXIuc3luY1VuaWZvcm1zKCk7XG5cbiAgICBpZiAoIW1lc2guZGlydHkpXG4gICAge1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgbWVzaC52ZXJ0aWNlcyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG1lc2guaW5kaWNlcyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgbWVzaC5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb250IG5lZWQgdG8gdXBsb2FkIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgfVxuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGRyYXdNb2RlLCBtZXNoLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG5cbn07XG5cbi8qKlxuICogUHJlcGFyZXMgYWxsIHRoZSBidWZmZXJzIHRvIHJlbmRlciB0aGlzIG1lc2hcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuX2luaXRXZWJHTCA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIC8vIGJ1aWxkIHRoZSBzdHJpcCFcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgbWVzaC5fdmVydGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5faW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl91dkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG5cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICBpZihtZXNoLmNvbG9ycyl7XG4gICAgICAgIG1lc2guX2NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl9jb2xvckJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLmNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbn07XG5cblxuLyoqXG4gKiBFbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IG1lc2ggcmVuZGVyZXIuXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBcblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBNZXNoIHJlbmRlcmVyXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgV2ViR0wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgY29yZS5TaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogYWxwaGEgOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVZlcnRleFBvc2l0aW9uOjAsXG4gICAgICAgICAgICBhVGV4dHVyZUNvb3JkOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cbk1lc2hTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNoYWRlci5wcm90b3R5cGUpO1xuTWVzaFNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoU2hhZGVyO1xuXG5jb3JlLlNoYWRlck1hbmFnZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2hTaGFkZXInLCBNZXNoU2hhZGVyKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3NpZ25cblxuaWYgKCFNYXRoLnNpZ24pXG57XG4gICAgTWF0aC5zaWduID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCA9ICt4O1xuICAgICAgICBpZiAoeCA9PT0gMCB8fCBpc05hTih4KSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPiAwID8gMSA6IC0xO1xuICAgIH07XG59XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9vYmplY3QtYXNzaWduXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5cbmlmICghT2JqZWN0LmFzc2lnbilcbntcbiAgICBPYmplY3QuYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xufVxuIiwicmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL3JlcXVlc3RBbmltYXRpb25GcmFtZScpO1xucmVxdWlyZSgnLi9NYXRoLnNpZ24nKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTU3OTY3MVxuLy8gaHR0cDovL3VwZGF0ZXMuaHRtbDVyb2Nrcy5jb20vMjAxMi8wNS9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUtQVBJLW5vdy13aXRoLXN1Yi1taWxsaXNlY29uZC1wcmVjaXNpb25cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RpbWhhbGwvNDA3ODYxNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0ZpbmFuY2lhbC1UaW1lcy9wb2x5ZmlsbC1zZXJ2aWNlL3RyZWUvbWFzdGVyL3BvbHlmaWxscy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcblxuLy8gRXhwZWN0ZWQgdG8gYmUgdXNlZCB3aXRoIEJyb3dzZXJmaXlcbi8vIEJyb3dzZXJpZnkgYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZSB1c2Ugb2YgYGdsb2JhbGAgYW5kIHBhc3NlcyB0aGVcbi8vIGNvcnJlY3QgcmVmZXJlbmNlIG9mIGBnbG9iYWxgLCBgc2VsZmAsIGFuZCBmaW5hbGx5IGB3aW5kb3dgXG5cbi8vIERhdGUubm93XG5pZiAoIShEYXRlLm5vdyAmJiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lKSkge1xuICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcbn1cblxuLy8gcGVyZm9ybWFuY2Uubm93XG5pZiAoIShnbG9iYWwucGVyZm9ybWFuY2UgJiYgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdykpIHtcbiAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIWdsb2JhbC5wZXJmb3JtYW5jZSkge1xuICAgICAgICBnbG9iYWwucGVyZm9ybWFuY2UgPSB7fTtcbiAgICB9XG4gICAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgfTtcbn1cblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xudmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xuXG5mb3IodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8XG4gICAgICAgIGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xufVxuXG5pZiAoIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCksXG4gICAgICAgICAgICBkZWxheSA9IDE2ICsgbGFzdFRpbWUgLSBjdXJyZW50VGltZTtcblxuICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgIH07XG59XG5cbmlmICghZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xufVxuIl19 //# sourceMappingURL=pixi.js.map diff --git a/bin/pixi.js b/bin/pixi.js index df52170..915f5c1 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -1,7 +1,7 @@ /** * @license * pixi.js - v3.0.10-dev - * Compiled 2016-01-18T21:33:26.540Z + * Compiled 2016-01-18T22:34:48.843Z * * pixi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -8072,7 +8072,7 @@ core.CanvasRenderer.registerPlugin('accessibility', AccessibilityManager); -},{"../core":53,"./accessibleTarget":36}],36:[function(require,module,exports){ +},{"../core":54,"./accessibleTarget":36}],36:[function(require,module,exports){ /** * Default property values of accessible objects * used by {@link PIXI.accessibility.AccessibilityManager}. @@ -8759,7 +8759,7 @@ this.children[i].updateTransform(); } - this.dirtyTransform = false; + this.transform.dirty = false; }; // performance increase to avoid using call.. (10x faster) @@ -9005,12 +9005,12 @@ this.children = null; }; -},{"../math":56,"../textures/RenderTexture":100,"../utils":107,"./DisplayObject":40}],40:[function(require,module,exports){ +},{"../math":57,"../textures/RenderTexture":101,"../utils":108,"./DisplayObject":40}],40:[function(require,module,exports){ var math = require('../math'), RenderTexture = require('../textures/RenderTexture'), EventEmitter = require('eventemitter3'), CONST = require('../const'), - Transform = require('./Transform'), + Transform = require('./TransformStatic'), _tempMatrix = new math.Matrix(), _tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1, children:[]}; @@ -9122,22 +9122,6 @@ */ this.filterArea = null; - /**xww - * cached sin rotation - * - * @member {number} - * @private - */ - this._sr = 0; - - /** - * cached cos rotation - * - * @member {number} - * @private - */ - this._cr = 1; - /** * The original, cached bounds of the object * @@ -9162,7 +9146,7 @@ */ this._mask = null; - this.dirtyTransform = true; + // this.dirtyTransform = true; } // constructor @@ -9246,9 +9230,9 @@ set: function (value) { this._rotation = value; - this.dirtyTransform = true; - this._sr = Math.sin(value); - this._cr = Math.cos(value); + this.transform.dirty = true; + this.transform._sr = Math.sin(value); + this.transform._cr = Math.cos(value); } }, @@ -9352,6 +9336,7 @@ */ DisplayObject.prototype.updateTransform = function () { + //if(this.transform.dirty || parent.transform.dirty) this.transform.updateTransform(this.parent.transform); // multiply the alphas.. this.worldAlpha = this.alpha * this.parent.worldAlpha; @@ -9554,9 +9539,79 @@ this.filterArea = null; }; -},{"../const":38,"../math":56,"../textures/RenderTexture":100,"./Transform":41,"eventemitter3":25}],41:[function(require,module,exports){ -var math = require('../math'); +},{"../const":38,"../math":57,"../textures/RenderTexture":101,"./TransformStatic":42,"eventemitter3":25}],41:[function(require,module,exports){ +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents + * the horizontal axis and y represents the vertical axis. + * + * @class + * @memberof PIXI + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +function ObservablePoint(transform, x, y) +{ + this._x = x || 0; + this._y = y || 0; + this.transform = transform; +} + +ObservablePoint.prototype.constructor = ObservablePoint; +module.exports = ObservablePoint; + + + +Object.defineProperties(ObservablePoint.prototype, { + /** + * The position of the displayObject on the x axis relative to the local coordinates of the parent. + * + * @member {number} + * @memberof PIXI.DisplayObject# + */ + x: { + get: function () + { + return this._x; + }, + set: function (value) + { + this._x = value; + this.transform.dirty = true; + } + }, + + y: { + get: function () + { + return this._y; + }, + set: function (value) + { + this._y = value; + this.transform.dirty = true; + } + } +}); + +/** + * Sets the point to a new x and y position. + * If y is omitted, both x and y will be set to x. + * + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +ObservablePoint.prototype.set = function (x, y) +{ + this._x = x || 0; + this._y = y || ( (y !== 0) ? this._x : 0 ); + + this.transform.dirty = true; +}; + +},{}],42:[function(require,module,exports){ +var math = require('../math'); +var ObservablePoint = require('./ObservablePoint'); /** * The Point object represents a location in a two-dimensional coordinate system, where x represents @@ -9572,17 +9627,19 @@ this.worldTransform = new math.Matrix(); this.localTransform = new math.Matrix(); - this.position = new math.Point(0.0); - this.scale = new math.Point(1,1); - this.pivot = new math.Point(0.0); - this.skew = new math.Point(0.0); + this.position = new ObservablePoint(this, 0); + this.scale = new ObservablePoint(this,1, 1); + this.pivot = new ObservablePoint(this, 0, 0); + this.skew = new ObservablePoint(this, 0,0); this.rotation = 0; this._sr = Math.sin(0); this._cr = Math.cos(0); - this.dirty = true; + + + this.updated = true; } Transform.prototype.constructor = Transform; @@ -9593,19 +9650,20 @@ var wt = this.worldTransform; var lt = this.localTransform; - if(this.dirty) { // get the matrix values of the displayobject based on its transform properties.. - lt.a = this._cr * this.scale.x; - lt.b = this._sr * this.scale.x; - lt.c = -this._sr * this.scale.y; - lt.d = this._cr * this.scale.y; - lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c); - lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d); + lt.a = this._cr * this.scale._x; + lt.b = this._sr * this.scale._x; + lt.c = -this._sr * this.scale._y; + lt.d = this._cr * this.scale._y; + lt.tx = this.position._x - (this.pivot._x * lt.a + this.pivot._y * lt.c); + lt.ty = this.position._y - (this.pivot._x * lt.b + this.pivot._y * lt.d); } - if(this.dirty || parent.dirty) + this.updated = this.dirty || parentTransform.dirty; + + if(this.updated) { // concat the parent matrix with the objects transform. wt.a = lt.a * pt.a + lt.b * pt.c; @@ -9613,21 +9671,16 @@ wt.c = lt.c * pt.a + lt.d * pt.c; wt.d = lt.c * pt.b + lt.d * pt.d; wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; - wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; - - // this.dirty = false; - // return true; + wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; } - -// this.dirty = false; - // return false; + } module.exports = Transform; -},{"../math":56}],42:[function(require,module,exports){ +},{"../math":57,"./ObservablePoint":41}],43:[function(require,module,exports){ var Container = require('../display/Container'), Texture = require('../textures/Texture'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), @@ -10787,7 +10840,7 @@ this._localBounds = null; }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/canvas/utils/CanvasGraphics":69,"../textures/Texture":101,"./GraphicsData":43}],43:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/canvas/utils/CanvasGraphics":70,"../textures/Texture":102,"./GraphicsData":44}],44:[function(require,module,exports){ /** * A GraphicsData object. * @@ -10880,7 +10933,7 @@ this.shape = null; }; -},{}],44:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ var utils = require('../../utils'), math = require('../../math'), CONST = require('../../const'), @@ -11200,7 +11253,7 @@ }; -},{"../../const":38,"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils":107,"./WebGLGraphicsData":45,"./shaders/PrimitiveShader":46,"./utils/buildCircle":47,"./utils/buildComplexPoly":48,"./utils/buildLine":49,"./utils/buildPoly":50,"./utils/buildRectangle":51,"./utils/buildRoundedRectangle":52,"earcut":24}],45:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils":108,"./WebGLGraphicsData":46,"./shaders/PrimitiveShader":47,"./utils/buildCircle":48,"./utils/buildComplexPoly":49,"./utils/buildLine":50,"./utils/buildPoly":51,"./utils/buildRectangle":52,"./utils/buildRoundedRectangle":53,"earcut":24}],46:[function(require,module,exports){ /** * An object containing WebGL specific properties to be used by the WebGL renderer * @@ -11318,7 +11371,7 @@ this.glIndices = null; }; -},{}],46:[function(require,module,exports){ +},{}],47:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -11370,7 +11423,7 @@ module.exports = PrimitiveShader; -},{"pixi-gl-core":1}],47:[function(require,module,exports){ +},{"pixi-gl-core":1}],48:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11457,7 +11510,7 @@ module.exports = buildCircle; -},{"../../../utils":107,"./buildLine":49}],48:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],49:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11528,7 +11581,7 @@ module.exports = buildComplexPoly; -},{"../../../utils":107,"./buildLine":49}],49:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],50:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'); @@ -11748,7 +11801,7 @@ }; module.exports = buildLine; -},{"../../../math":56,"../../../utils":107}],50:[function(require,module,exports){ +},{"../../../math":57,"../../../utils":108}],51:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -11811,7 +11864,7 @@ module.exports = buildPoly; -},{"../../../utils":107}],51:[function(require,module,exports){ +},{"../../../utils":108}],52:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11882,7 +11935,7 @@ }; module.exports = buildRectangle; -},{"../../../utils":107,"./buildLine":49}],52:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],53:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -12010,7 +12063,7 @@ module.exports = buildRoundedRectangle; -},{"../../../utils":107,"./buildLine":49}],53:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],54:[function(require,module,exports){ /** * @file Main export of the PIXI core library * @author Mat Groves @@ -12106,7 +12159,7 @@ } }); -},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":42,"./graphics/GraphicsData":43,"./graphics/webgl/GraphicsRenderer":44,"./math":56,"./particles/ParticleContainer":62,"./particles/webgl/ParticleRenderer":64,"./renderers/canvas/CanvasRenderer":67,"./renderers/canvas/utils/CanvasBuffer":68,"./renderers/canvas/utils/CanvasGraphics":69,"./renderers/webgl/WebGLRenderer":73,"./renderers/webgl/filters/AbstractFilter":74,"./renderers/webgl/filters/FXAAFilter":75,"./renderers/webgl/filters/SpriteMaskFilter":76,"./renderers/webgl/managers/ShaderManager":80,"./renderers/webgl/managers/WebGLManager":82,"./renderers/webgl/shaders/Shader":85,"./renderers/webgl/utils/ObjectRenderer":88,"./renderers/webgl/utils/RenderTarget":90,"./sprites/Sprite":94,"./sprites/webgl/SpriteRenderer":95,"./text/Text":97,"./textures/BaseRenderTexture":98,"./textures/BaseTexture":99,"./textures/RenderTexture":100,"./textures/Texture":101,"./textures/TextureUvs":102,"./textures/VideoBaseTexture":103,"./ticker":105,"./utils":107,"pixi-gl-core":1}],54:[function(require,module,exports){ +},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":43,"./graphics/GraphicsData":44,"./graphics/webgl/GraphicsRenderer":45,"./math":57,"./particles/ParticleContainer":63,"./particles/webgl/ParticleRenderer":65,"./renderers/canvas/CanvasRenderer":68,"./renderers/canvas/utils/CanvasBuffer":69,"./renderers/canvas/utils/CanvasGraphics":70,"./renderers/webgl/WebGLRenderer":74,"./renderers/webgl/filters/AbstractFilter":75,"./renderers/webgl/filters/FXAAFilter":76,"./renderers/webgl/filters/SpriteMaskFilter":77,"./renderers/webgl/managers/ShaderManager":81,"./renderers/webgl/managers/WebGLManager":83,"./renderers/webgl/shaders/Shader":86,"./renderers/webgl/utils/ObjectRenderer":89,"./renderers/webgl/utils/RenderTarget":91,"./sprites/Sprite":95,"./sprites/webgl/SpriteRenderer":96,"./text/Text":98,"./textures/BaseRenderTexture":99,"./textures/BaseTexture":100,"./textures/RenderTexture":101,"./textures/Texture":102,"./textures/TextureUvs":103,"./textures/VideoBaseTexture":104,"./ticker":106,"./utils":108,"pixi-gl-core":1}],55:[function(require,module,exports){ // @todo - ignore the too many parameters warning for now // should either fix it or change the jshint config // jshint -W072 @@ -12546,7 +12599,7 @@ */ Matrix.TEMP_MATRIX = new Matrix(); -},{"./Point":55}],55:[function(require,module,exports){ +},{"./Point":56}],56:[function(require,module,exports){ /** * The Point object represents a location in a two-dimensional coordinate system, where x represents * the horizontal axis and y represents the vertical axis. @@ -12616,7 +12669,7 @@ this.y = y || ( (y !== 0) ? this.x : 0 ) ; }; -},{}],56:[function(require,module,exports){ +},{}],57:[function(require,module,exports){ /** * Math classes and utilities mixed into PIXI namespace. * @@ -12638,7 +12691,7 @@ RoundedRectangle: require('./shapes/RoundedRectangle') }; -},{"./Matrix":54,"./Point":55,"./shapes/Circle":57,"./shapes/Ellipse":58,"./shapes/Polygon":59,"./shapes/Rectangle":60,"./shapes/RoundedRectangle":61}],57:[function(require,module,exports){ +},{"./Matrix":55,"./Point":56,"./shapes/Circle":58,"./shapes/Ellipse":59,"./shapes/Polygon":60,"./shapes/Rectangle":61,"./shapes/RoundedRectangle":62}],58:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12726,7 +12779,7 @@ return new Rectangle(this.x - this.radius, this.y - this.radius, this.radius * 2, this.radius * 2); }; -},{"../../const":38,"./Rectangle":60}],58:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],59:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12821,7 +12874,7 @@ return new Rectangle(this.x - this.width, this.y - this.height, this.width, this.height); }; -},{"../../const":38,"./Rectangle":60}],59:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],60:[function(require,module,exports){ var Point = require('../Point'), CONST = require('../../const'); @@ -12924,7 +12977,7 @@ return inside; }; -},{"../../const":38,"../Point":55}],60:[function(require,module,exports){ +},{"../../const":38,"../Point":56}],61:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13018,7 +13071,7 @@ return false; }; -},{"../../const":38}],61:[function(require,module,exports){ +},{"../../const":38}],62:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13110,7 +13163,7 @@ return false; }; -},{"../../const":38}],62:[function(require,module,exports){ +},{"../../const":38}],63:[function(require,module,exports){ var Container = require('../display/Container'), CONST = require('../const'); @@ -13429,7 +13482,7 @@ this._buffers = null; }; -},{"../const":38,"../display/Container":39}],63:[function(require,module,exports){ +},{"../const":38,"../display/Container":39}],64:[function(require,module,exports){ /** * @author Mat Groves @@ -13649,7 +13702,7 @@ this.gl.deleteBuffer(this.staticBuffer); }; -},{}],64:[function(require,module,exports){ +},{}],65:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), ParticleShader = require('./ParticleShader'), @@ -14125,7 +14178,7 @@ this.tempMatrix = null; }; -},{"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"./ParticleBuffer":63,"./ParticleShader":65}],65:[function(require,module,exports){ +},{"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"./ParticleBuffer":64,"./ParticleShader":66}],66:[function(require,module,exports){ var TextureShader = require('../../renderers/webgl/shaders/TextureShader'); /** @@ -14203,7 +14256,7 @@ module.exports = ParticleShader; -},{"../../renderers/webgl/shaders/TextureShader":86}],66:[function(require,module,exports){ +},{"../../renderers/webgl/shaders/TextureShader":87}],67:[function(require,module,exports){ var utils = require('../utils'), math = require('../math'), CONST = require('../const'), @@ -14464,7 +14517,7 @@ this._backgroundColorString = null; }; -},{"../const":38,"../math":56,"../utils":107,"eventemitter3":25}],67:[function(require,module,exports){ +},{"../const":38,"../math":57,"../utils":108,"eventemitter3":25}],68:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), CanvasMaskManager = require('./utils/CanvasMaskManager'), utils = require('../../utils'), @@ -14732,7 +14785,7 @@ } }; -},{"../../const":38,"../../math":56,"../../utils":107,"../SystemRenderer":66,"./utils/CanvasMaskManager":70}],68:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../utils":108,"../SystemRenderer":67,"./utils/CanvasMaskManager":71}],69:[function(require,module,exports){ /** * Creates a Canvas element of the given size. * @@ -14832,7 +14885,7 @@ this.canvas = null; }; -},{}],69:[function(require,module,exports){ +},{}],70:[function(require,module,exports){ var CONST = require('../../../const'); /** @@ -15186,7 +15239,7 @@ }; -},{"../../../const":38}],70:[function(require,module,exports){ +},{"../../../const":38}],71:[function(require,module,exports){ var CanvasGraphics = require('./CanvasGraphics'); /** @@ -15248,7 +15301,7 @@ CanvasMaskManager.prototype.destroy = function () {}; -},{"./CanvasGraphics":69}],71:[function(require,module,exports){ +},{"./CanvasGraphics":70}],72:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -15500,7 +15553,7 @@ */ CanvasTinter.tintMethod = CanvasTinter.canUseMultiply ? CanvasTinter.tintWithMultiply : CanvasTinter.tintWithPerPixel; -},{"../../../utils":107}],72:[function(require,module,exports){ +},{"../../../utils":108}],73:[function(require,module,exports){ var GLTexture = require('pixi-gl-core').GLTexture, utils = require('../../utils'); @@ -15640,7 +15693,7 @@ module.exports = TextureManager; -},{"../../utils":107,"pixi-gl-core":1}],73:[function(require,module,exports){ +},{"../../utils":108,"pixi-gl-core":1}],74:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), ShaderManager = require('./managers/ShaderManager'), MaskManager = require('./managers/MaskManager'), @@ -16037,7 +16090,7 @@ }; -},{"../../const":38,"../../utils":107,"../SystemRenderer":66,"./TextureManager":72,"./filters/FXAAFilter":75,"./managers/BlendModeManager":77,"./managers/FilterManager":78,"./managers/MaskManager":79,"./managers/ShaderManager":80,"./managers/StencilManager":81,"./utils/ObjectRenderer":88,"./utils/RenderTarget":90,"./utils/mapWebGLBlendModesToPixi":92,"./utils/mapWebGLDrawModesToPixi":93,"pixi-gl-core":1}],74:[function(require,module,exports){ +},{"../../const":38,"../../utils":108,"../SystemRenderer":67,"./TextureManager":73,"./filters/FXAAFilter":76,"./managers/BlendModeManager":78,"./managers/FilterManager":79,"./managers/MaskManager":80,"./managers/ShaderManager":81,"./managers/StencilManager":82,"./utils/ObjectRenderer":89,"./utils/RenderTarget":91,"./utils/mapWebGLBlendModesToPixi":93,"./utils/mapWebGLDrawModesToPixi":94,"pixi-gl-core":1}],75:[function(require,module,exports){ var DefaultShader = require('../shaders/TextureShader'); /** @@ -16149,7 +16202,7 @@ } }; -},{"../shaders/TextureShader":86}],75:[function(require,module,exports){ +},{"../shaders/TextureShader":87}],76:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'); // @see https://github.com/substack/brfs/issues/25 @@ -16204,7 +16257,7 @@ filterManager.applyFilter(shader, input, output); }; -},{"./AbstractFilter":74}],76:[function(require,module,exports){ +},{"./AbstractFilter":75}],77:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'), math = require('../../../math'); @@ -16301,7 +16354,7 @@ } }); -},{"../../../math":56,"./AbstractFilter":74}],77:[function(require,module,exports){ +},{"../../../math":57,"./AbstractFilter":75}],78:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'); /** @@ -16345,7 +16398,7 @@ return true; }; -},{"./WebGLManager":82}],78:[function(require,module,exports){ +},{"./WebGLManager":83}],79:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), RenderTarget = require('../utils/RenderTarget'), CONST = require('../../../const'), @@ -16797,7 +16850,7 @@ this.texturePool = null; }; -},{"../../../const":38,"../../../math":56,"../utils/Quad":89,"../utils/RenderTarget":90,"./WebGLManager":82}],79:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../utils/Quad":90,"../utils/RenderTarget":91,"./WebGLManager":83}],80:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), AlphaMaskFilter = require('../filters/SpriteMaskFilter'); @@ -16912,7 +16965,7 @@ }; -},{"../filters/SpriteMaskFilter":76,"./WebGLManager":82}],80:[function(require,module,exports){ +},{"../filters/SpriteMaskFilter":77,"./WebGLManager":83}],81:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), TextureShader = require('../shaders/TextureShader'), ComplexPrimitiveShader = require('../shaders/ComplexPrimitiveShader'), @@ -17082,7 +17135,7 @@ this.tempAttribState = null; }; -},{"../../../utils":107,"../shaders/ComplexPrimitiveShader":83,"../shaders/PrimitiveShader":84,"../shaders/TextureShader":86,"./WebGLManager":82}],81:[function(require,module,exports){ +},{"../../../utils":108,"../shaders/ComplexPrimitiveShader":84,"../shaders/PrimitiveShader":85,"../shaders/TextureShader":87,"./WebGLManager":83}],82:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), utils = require('../../../utils'); @@ -17449,7 +17502,7 @@ }; -},{"../../../utils":107,"./WebGLManager":82}],82:[function(require,module,exports){ +},{"../../../utils":108,"./WebGLManager":83}],83:[function(require,module,exports){ /** * @class * @memberof PIXI @@ -17490,7 +17543,7 @@ this.renderer = null; }; -},{}],83:[function(require,module,exports){ +},{}],84:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17552,7 +17605,7 @@ ComplexPrimitiveShader.prototype.constructor = ComplexPrimitiveShader; module.exports = ComplexPrimitiveShader; -},{"./Shader":85}],84:[function(require,module,exports){ +},{"./Shader":86}],85:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17615,7 +17668,7 @@ PrimitiveShader.prototype.constructor = PrimitiveShader; module.exports = PrimitiveShader; -},{"./Shader":85}],85:[function(require,module,exports){ +},{"./Shader":86}],86:[function(require,module,exports){ /*global console */ var utils = require('../../../utils'); @@ -18143,7 +18196,7 @@ return shader; }; -},{"../../../utils":107}],86:[function(require,module,exports){ +},{"../../../utils":108}],87:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -18254,7 +18307,7 @@ '}' ].join('\n'); -},{"./Shader":85}],87:[function(require,module,exports){ +},{"./Shader":86}],88:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -18335,7 +18388,7 @@ '}' ].join('\n'); -},{"pixi-gl-core":1}],88:[function(require,module,exports){ +},{"pixi-gl-core":1}],89:[function(require,module,exports){ var WebGLManager = require('../managers/WebGLManager'); /** @@ -18393,7 +18446,7 @@ // render the object }; -},{"../managers/WebGLManager":82}],89:[function(require,module,exports){ +},{"../managers/WebGLManager":83}],90:[function(require,module,exports){ /** * Helper class to create a quad * @@ -18548,7 +18601,7 @@ -},{}],90:[function(require,module,exports){ +},{}],91:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'), CONST = require('../../../const'), @@ -18853,7 +18906,7 @@ this.texture = null; }; -},{"../../../const":38,"../../../math":56,"../../../utils":107,"./StencilMaskStack":91,"pixi-gl-core":1}],91:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../../../utils":108,"./StencilMaskStack":92,"pixi-gl-core":1}],92:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -18886,7 +18939,7 @@ StencilMaskStack.prototype.constructor = StencilMaskStack; module.exports = StencilMaskStack; -},{}],92:[function(require,module,exports){ +},{}],93:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18923,7 +18976,7 @@ module.exports = mapWebGLBlendModesToPixi; -},{"../../../const":38}],93:[function(require,module,exports){ +},{"../../../const":38}],94:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18947,7 +19000,7 @@ module.exports = mapWebGLDrawModesToPixi; -},{"../../../const":38}],94:[function(require,module,exports){ +},{"../../../const":38}],95:[function(require,module,exports){ var math = require('../math'), Texture = require('../textures/Texture'), Container = require('../display/Container'), @@ -19043,7 +19096,6 @@ // call texture setter this.texture = texture || Texture.EMPTY; this.textureDirty = true - this.vertexDirty = true; this.vertexData = new Float32Array(8); } @@ -19153,7 +19205,6 @@ Sprite.prototype.caclulateVertices = function () { - var texture = this._texture, wt = this.transform.worldTransform, a = wt.a, b = wt.b, c = wt.c, d = wt.d, tx = wt.tx, ty = wt.ty, @@ -19208,22 +19259,11 @@ */ Sprite.prototype._renderWebGL = function (renderer) { - if(this.textureDirty) + if(this.transform.updated || this.textureDirty) { this.textureDirty = false; - - this._onTextureUpdate(); - - this.vertexDirty = true; - } - - if(this.vertexDirty) - { - this.vertexDirty = false; - // set the vertex data this.caclulateVertices(); - } renderer.setObjectRenderer(renderer.plugins.sprite); @@ -19566,7 +19606,7 @@ return new Sprite(Texture.fromImage(imageId, crossorigin, scaleMode)); }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasTinter":71,"../textures/Texture":101,"../utils":107}],95:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasTinter":72,"../textures/Texture":102,"../utils":108}],96:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), TextureShader = require('../../renderers/webgl/shaders/_TextureShader'), @@ -19927,7 +19967,7 @@ this.shader = null; }; -},{"../../const":38,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/shaders/_TextureShader":87,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils/createIndicesForQuads":106,"./generateMultiTextureShader":96,"pixi-gl-core":1}],96:[function(require,module,exports){ +},{"../../const":38,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/shaders/_TextureShader":88,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils/createIndicesForQuads":107,"./generateMultiTextureShader":97,"pixi-gl-core":1}],97:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; @@ -19990,7 +20030,7 @@ module.exports = generateMultiTextureShader; -},{"pixi-gl-core":1}],97:[function(require,module,exports){ +},{"pixi-gl-core":1}],98:[function(require,module,exports){ var Sprite = require('../sprites/Sprite'), Texture = require('../textures/Texture'), math = require('../math'), @@ -20611,7 +20651,7 @@ this._texture.destroy(destroyBaseTexture === undefined ? true : destroyBaseTexture); }; -},{"../const":38,"../math":56,"../sprites/Sprite":94,"../textures/Texture":101,"../utils":107}],98:[function(require,module,exports){ +},{"../const":38,"../math":57,"../sprites/Sprite":95,"../textures/Texture":102,"../utils":108}],99:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), Texture = require('./Texture'), RenderTarget = require('../renderers/webgl/utils/RenderTarget'), @@ -21095,7 +21135,7 @@ return this.getPixels(tempRect); }; -},{"../const":38,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/webgl/managers/FilterManager":78,"../renderers/webgl/utils/RenderTarget":90,"./BaseTexture":99,"./Texture":101}],99:[function(require,module,exports){ +},{"../const":38,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/webgl/managers/FilterManager":79,"../renderers/webgl/utils/RenderTarget":91,"./BaseTexture":100,"./Texture":102}],100:[function(require,module,exports){ var utils = require('../utils'), CONST = require('../const'), EventEmitter = require('eventemitter3'); @@ -21532,7 +21572,7 @@ return baseTexture; }; -},{"../const":38,"../utils":107,"eventemitter3":25}],100:[function(require,module,exports){ +},{"../const":38,"../utils":108,"eventemitter3":25}],101:[function(require,module,exports){ var BaseRenderTexture = require('./BaseRenderTexture'), Texture = require('./Texture'), math = require('../math'), @@ -21727,7 +21767,7 @@ } -},{"../const":38,"../math":56,"./BaseRenderTexture":98,"./Texture":101}],101:[function(require,module,exports){ +},{"../const":38,"../math":57,"./BaseRenderTexture":99,"./Texture":102}],102:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), VideoBaseTexture = require('./VideoBaseTexture'), TextureUvs = require('./TextureUvs'), @@ -22153,7 +22193,7 @@ */ Texture.EMPTY = new Texture(new BaseTexture()); -},{"../math":56,"../utils":107,"./BaseTexture":99,"./TextureUvs":102,"./VideoBaseTexture":103,"eventemitter3":25}],102:[function(require,module,exports){ +},{"../math":57,"../utils":108,"./BaseTexture":100,"./TextureUvs":103,"./VideoBaseTexture":104,"eventemitter3":25}],103:[function(require,module,exports){ /** * A standard object to store the Uvs of a texture @@ -22234,7 +22274,7 @@ this.uvs_uint32[3] = (((this.y3 * 65535) & 0xFFFF) << 16) | ((this.x3 * 65535) & 0xFFFF); }; -},{}],103:[function(require,module,exports){ +},{}],104:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), utils = require('../utils'); @@ -22471,7 +22511,7 @@ return source; } -},{"../utils":107,"./BaseTexture":99}],104:[function(require,module,exports){ +},{"../utils":108,"./BaseTexture":100}],105:[function(require,module,exports){ var CONST = require('../const'), EventEmitter = require('eventemitter3'), // Internal event used by composed emitter @@ -22826,7 +22866,7 @@ module.exports = Ticker; -},{"../const":38,"eventemitter3":25}],105:[function(require,module,exports){ +},{"../const":38,"eventemitter3":25}],106:[function(require,module,exports){ var Ticker = require('./Ticker'); /** @@ -22882,7 +22922,7 @@ Ticker: Ticker }; -},{"./Ticker":104}],106:[function(require,module,exports){ +},{"./Ticker":105}],107:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -22915,7 +22955,7 @@ }; module.exports = createIndicesForQuads; -},{}],107:[function(require,module,exports){ +},{}],108:[function(require,module,exports){ var CONST = require('../const'); /** @@ -23192,7 +23232,7 @@ BaseTextureCache: {} }; -},{"../const":38,"./pluginTarget":108,"async":16,"eventemitter3":25}],108:[function(require,module,exports){ +},{"../const":38,"./pluginTarget":109,"async":16,"eventemitter3":25}],109:[function(require,module,exports){ /** * Mixins functionality to make an object have "plugins". * @@ -23262,7 +23302,7 @@ } }; -},{}],109:[function(require,module,exports){ +},{}],110:[function(require,module,exports){ /*global console */ var core = require('./core'), mesh = require('./mesh'), @@ -23613,7 +23653,7 @@ return core.utils.uid(); }; -},{"./core":53,"./extras":116,"./filters":133,"./mesh":158}],110:[function(require,module,exports){ +},{"./core":54,"./extras":117,"./filters":134,"./mesh":159}],111:[function(require,module,exports){ var core = require('../core'); /** @@ -24001,7 +24041,7 @@ BitmapText.fonts = {}; -},{"../core":53}],111:[function(require,module,exports){ +},{"../core":54}],112:[function(require,module,exports){ var core = require('../core'); /** @@ -24321,7 +24361,7 @@ return new MovieClip(textures); }; -},{"../core":53}],112:[function(require,module,exports){ +},{"../core":54}],113:[function(require,module,exports){ var core = require('../core'), // a sprite use dfor rendering textures.. tempPoint = new core.Point(), @@ -24773,7 +24813,7 @@ return new TilingSprite(core.Texture.fromImage(imageId, crossorigin, scaleMode),width,height); }; -},{"../core":53,"../core/renderers/canvas/utils/CanvasTinter":71}],113:[function(require,module,exports){ +},{"../core":54,"../core/renderers/canvas/utils/CanvasTinter":72}],114:[function(require,module,exports){ var core = require('../core'), DisplayObject = core.DisplayObject, _tempMatrix = new core.Matrix(); @@ -25045,7 +25085,7 @@ this._originalDestroy(); }; -},{"../core":53}],114:[function(require,module,exports){ +},{"../core":54}],115:[function(require,module,exports){ var core = require('../core'); /** @@ -25075,7 +25115,7 @@ return null; }; -},{"../core":53}],115:[function(require,module,exports){ +},{"../core":54}],116:[function(require,module,exports){ var core = require('../core'); /** @@ -25105,7 +25145,7 @@ return point; }; -},{"../core":53}],116:[function(require,module,exports){ +},{"../core":54}],117:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -25126,7 +25166,7 @@ BitmapText: require('./BitmapText') }; -},{"./BitmapText":110,"./MovieClip":111,"./TilingSprite":112,"./cacheAsBitmap":113,"./getChildByName":114,"./getGlobalPosition":115}],117:[function(require,module,exports){ +},{"./BitmapText":111,"./MovieClip":112,"./TilingSprite":113,"./cacheAsBitmap":114,"./getChildByName":115,"./getGlobalPosition":116}],118:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25183,7 +25223,7 @@ } }); -},{"../../core":53}],118:[function(require,module,exports){ +},{"../../core":54}],119:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYFilter = require('../blur/BlurYFilter'); @@ -25284,7 +25324,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"../blur/BlurYFilter":122}],119:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"../blur/BlurYFilter":123}],120:[function(require,module,exports){ var core = require('../../core'); @@ -25426,7 +25466,7 @@ } }); -},{"../../core":53}],120:[function(require,module,exports){ +},{"../../core":54}],121:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('./BlurXFilter'), BlurYFilter = require('./BlurYFilter'); @@ -25536,7 +25576,7 @@ } }); -},{"../../core":53,"./BlurXFilter":121,"./BlurYFilter":122}],121:[function(require,module,exports){ +},{"../../core":54,"./BlurXFilter":122,"./BlurYFilter":123}],122:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25629,7 +25669,7 @@ } }); -},{"../../core":53}],122:[function(require,module,exports){ +},{"../../core":54}],123:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25715,7 +25755,7 @@ } }); -},{"../../core":53}],123:[function(require,module,exports){ +},{"../../core":54}],124:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25745,7 +25785,7 @@ SmartBlurFilter.prototype.constructor = SmartBlurFilter; module.exports = SmartBlurFilter; -},{"../../core":53}],124:[function(require,module,exports){ +},{"../../core":54}],125:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26281,7 +26321,7 @@ } }); -},{"../../core":53}],125:[function(require,module,exports){ +},{"../../core":54}],126:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26330,7 +26370,7 @@ } }); -},{"../../core":53}],126:[function(require,module,exports){ +},{"../../core":54}],127:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26421,7 +26461,7 @@ } }); -},{"../../core":53}],127:[function(require,module,exports){ +},{"../../core":54}],128:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26447,7 +26487,7 @@ CrossHatchFilter.prototype.constructor = CrossHatchFilter; module.exports = CrossHatchFilter; -},{"../../core":53}],128:[function(require,module,exports){ +},{"../../core":54}],129:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26531,7 +26571,7 @@ } }); -},{"../../core":53}],129:[function(require,module,exports){ +},{"../../core":54}],130:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26603,7 +26643,7 @@ } }); -},{"../../core":53}],130:[function(require,module,exports){ +},{"../../core":54}],131:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26694,7 +26734,7 @@ } }); -},{"../../core":53}],131:[function(require,module,exports){ +},{"../../core":54}],132:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYTintFilter = require('./BlurYTintFilter'); @@ -26887,7 +26927,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"./BlurYTintFilter":130}],132:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"./BlurYTintFilter":131}],133:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26936,7 +26976,7 @@ } }); -},{"../../core":53}],133:[function(require,module,exports){ +},{"../../core":54}],134:[function(require,module,exports){ /** * @file Main export of the PIXI filters library * @author Mat Groves @@ -26975,7 +27015,7 @@ TwistFilter: require('./twist/TwistFilter') }; -},{"./ascii/AsciiFilter":117,"./bloom/BloomFilter":118,"./blur/BlurDirFilter":119,"./blur/BlurFilter":120,"./blur/BlurXFilter":121,"./blur/BlurYFilter":122,"./blur/SmartBlurFilter":123,"./color/ColorMatrixFilter":124,"./color/ColorStepFilter":125,"./convolution/ConvolutionFilter":126,"./crosshatch/CrossHatchFilter":127,"./displacement/DisplacementFilter":128,"./dot/DotScreenFilter":129,"./dropshadow/DropShadowFilter":131,"./gray/GrayFilter":132,"./invert/InvertFilter":134,"./noise/NoiseFilter":135,"./pixelate/PixelateFilter":136,"./rgb/RGBSplitFilter":137,"./sepia/SepiaFilter":138,"./shockwave/ShockwaveFilter":139,"./tiltshift/TiltShiftFilter":141,"./tiltshift/TiltShiftXFilter":142,"./tiltshift/TiltShiftYFilter":143,"./twist/TwistFilter":144}],134:[function(require,module,exports){ +},{"./ascii/AsciiFilter":118,"./bloom/BloomFilter":119,"./blur/BlurDirFilter":120,"./blur/BlurFilter":121,"./blur/BlurXFilter":122,"./blur/BlurYFilter":123,"./blur/SmartBlurFilter":124,"./color/ColorMatrixFilter":125,"./color/ColorStepFilter":126,"./convolution/ConvolutionFilter":127,"./crosshatch/CrossHatchFilter":128,"./displacement/DisplacementFilter":129,"./dot/DotScreenFilter":130,"./dropshadow/DropShadowFilter":132,"./gray/GrayFilter":133,"./invert/InvertFilter":135,"./noise/NoiseFilter":136,"./pixelate/PixelateFilter":137,"./rgb/RGBSplitFilter":138,"./sepia/SepiaFilter":139,"./shockwave/ShockwaveFilter":140,"./tiltshift/TiltShiftFilter":142,"./tiltshift/TiltShiftXFilter":143,"./tiltshift/TiltShiftYFilter":144,"./twist/TwistFilter":145}],135:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27025,7 +27065,7 @@ } }); -},{"../../core":53}],135:[function(require,module,exports){ +},{"../../core":54}],136:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27080,7 +27120,7 @@ } }); -},{"../../core":53}],136:[function(require,module,exports){ +},{"../../core":54}],137:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27131,7 +27171,7 @@ } }); -},{"../../core":53}],137:[function(require,module,exports){ +},{"../../core":54}],138:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27217,7 +27257,7 @@ } }); -},{"../../core":53}],138:[function(require,module,exports){ +},{"../../core":54}],139:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27267,7 +27307,7 @@ } }); -},{"../../core":53}],139:[function(require,module,exports){ +},{"../../core":54}],140:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27355,7 +27395,7 @@ } }); -},{"../../core":53}],140:[function(require,module,exports){ +},{"../../core":54}],141:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27480,7 +27520,7 @@ } }); -},{"../../core":53}],141:[function(require,module,exports){ +},{"../../core":54}],142:[function(require,module,exports){ var core = require('../../core'), TiltShiftXFilter = require('./TiltShiftXFilter'), TiltShiftYFilter = require('./TiltShiftYFilter'); @@ -27590,7 +27630,7 @@ } }); -},{"../../core":53,"./TiltShiftXFilter":142,"./TiltShiftYFilter":143}],142:[function(require,module,exports){ +},{"../../core":54,"./TiltShiftXFilter":143,"./TiltShiftYFilter":144}],143:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27628,7 +27668,7 @@ this.uniforms.delta.value.y = dy / d; }; -},{"./TiltShiftAxisFilter":140}],143:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],144:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27666,7 +27706,7 @@ this.uniforms.delta.value.y = dx / d; }; -},{"./TiltShiftAxisFilter":140}],144:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],145:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27751,7 +27791,7 @@ } }); -},{"../../core":53}],145:[function(require,module,exports){ +},{"../../core":54}],146:[function(require,module,exports){ (function (global){ // run the polyfills require('./polyfill'); @@ -27784,7 +27824,7 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./accessibility":37,"./core":53,"./deprecation":109,"./extras":116,"./filters":133,"./interaction":148,"./loaders":151,"./mesh":158,"./polyfill":163}],146:[function(require,module,exports){ +},{"./accessibility":37,"./core":54,"./deprecation":110,"./extras":117,"./filters":134,"./interaction":149,"./loaders":152,"./mesh":159,"./polyfill":164}],147:[function(require,module,exports){ var core = require('../core'); /** @@ -27833,7 +27873,7 @@ return displayObject.worldTransform.applyInverse(globalPos || this.global, point); }; -},{"../core":53}],147:[function(require,module,exports){ +},{"../core":54}],148:[function(require,module,exports){ var core = require('../core'), InteractionData = require('./InteractionData'); @@ -28709,7 +28749,7 @@ core.WebGLRenderer.registerPlugin('interaction', InteractionManager); core.CanvasRenderer.registerPlugin('interaction', InteractionManager); -},{"../core":53,"./InteractionData":146,"./interactiveTarget":149}],148:[function(require,module,exports){ +},{"../core":54,"./InteractionData":147,"./interactiveTarget":150}],149:[function(require,module,exports){ /** * @file Main export of the PIXI interactions library * @author Mat Groves @@ -28726,7 +28766,7 @@ interactiveTarget: require('./interactiveTarget') }; -},{"./InteractionData":146,"./InteractionManager":147,"./interactiveTarget":149}],149:[function(require,module,exports){ +},{"./InteractionData":147,"./InteractionManager":148,"./interactiveTarget":150}],150:[function(require,module,exports){ /** * Default property values of interactive objects * used by {@link PIXI.interaction.InteractionManager}. @@ -28775,7 +28815,7 @@ module.exports = interactiveTarget; -},{}],150:[function(require,module,exports){ +},{}],151:[function(require,module,exports){ var Resource = require('resource-loader').Resource, core = require('../core'), extras = require('../extras'), @@ -28896,7 +28936,7 @@ }; }; -},{"../core":53,"../extras":116,"path":17,"resource-loader":31}],151:[function(require,module,exports){ +},{"../core":54,"../extras":117,"path":17,"resource-loader":31}],152:[function(require,module,exports){ /** * @file Main export of the PIXI loaders library * @author Mat Groves @@ -28917,7 +28957,7 @@ Resource: require('resource-loader').Resource }; -},{"./bitmapFontParser":150,"./loader":152,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],152:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./loader":153,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],153:[function(require,module,exports){ var ResourceLoader = require('resource-loader'), textureParser = require('./textureParser'), spritesheetParser = require('./spritesheetParser'), @@ -28979,7 +29019,7 @@ Resource.setExtensionXhrType('fnt', Resource.XHR_RESPONSE_TYPE.DOCUMENT); -},{"./bitmapFontParser":150,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],153:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],154:[function(require,module,exports){ var Resource = require('resource-loader').Resource, path = require('path'), core = require('../core'); @@ -29063,7 +29103,7 @@ }; }; -},{"../core":53,"path":17,"resource-loader":31}],154:[function(require,module,exports){ +},{"../core":54,"path":17,"resource-loader":31}],155:[function(require,module,exports){ var core = require('../core'); module.exports = function () @@ -29085,7 +29125,7 @@ }; }; -},{"../core":53}],155:[function(require,module,exports){ +},{"../core":54}],156:[function(require,module,exports){ var core = require('../core'), tempPoint = new core.Point(), tempPolygon = new core.Polygon(); @@ -29561,7 +29601,7 @@ TRIANGLES: 1 }; -},{"../core":53}],156:[function(require,module,exports){ +},{"../core":54}],157:[function(require,module,exports){ var Mesh = require('./Mesh'); /** @@ -29687,7 +29727,7 @@ } }; -},{"./Mesh":155}],157:[function(require,module,exports){ +},{"./Mesh":156}],158:[function(require,module,exports){ var Mesh = require('./Mesh'); var core = require('../core'); @@ -29900,7 +29940,7 @@ this.containerUpdateTransform(); }; -},{"../core":53,"./Mesh":155}],158:[function(require,module,exports){ +},{"../core":54,"./Mesh":156}],159:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -29919,7 +29959,7 @@ MeshShader: require('./webgl/MeshShader') }; -},{"./Mesh":155,"./Plane":156,"./Rope":157,"./webgl/MeshRenderer":159,"./webgl/MeshShader":160}],159:[function(require,module,exports){ +},{"./Mesh":156,"./Plane":157,"./Rope":158,"./webgl/MeshRenderer":160,"./webgl/MeshShader":161}],160:[function(require,module,exports){ var core = require('../../core'), Mesh = require('../Mesh'); @@ -30148,7 +30188,7 @@ core.ObjectRenderer.prototype.destroy.call(this); }; -},{"../../core":53,"../Mesh":155}],160:[function(require,module,exports){ +},{"../../core":54,"../Mesh":156}],161:[function(require,module,exports){ var core = require('../../core'); /** @@ -30209,7 +30249,7 @@ core.ShaderManager.registerPlugin('meshShader', MeshShader); -},{"../../core":53}],161:[function(require,module,exports){ +},{"../../core":54}],162:[function(require,module,exports){ // References: // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign @@ -30225,7 +30265,7 @@ }; } -},{}],162:[function(require,module,exports){ +},{}],163:[function(require,module,exports){ // References: // https://github.com/sindresorhus/object-assign // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign @@ -30235,12 +30275,12 @@ Object.assign = require('object-assign'); } -},{"object-assign":26}],163:[function(require,module,exports){ +},{"object-assign":26}],164:[function(require,module,exports){ require('./Object.assign'); require('./requestAnimationFrame'); require('./Math.sign'); -},{"./Math.sign":161,"./Object.assign":162,"./requestAnimationFrame":164}],164:[function(require,module,exports){ +},{"./Math.sign":162,"./Object.assign":163,"./requestAnimationFrame":165}],165:[function(require,module,exports){ (function (global){ // References: // http://paulirish.com/2011/requestanimationframe-for-smart-animating/ @@ -30311,8 +30351,8 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[145])(145) +},{}]},{},[146])(146) }); -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L1RyYW5zZm9ybS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL1dlYkdMR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZENpcmNsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ29tcGxleFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZExpbmUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9NYXRyaXguanMiLCJzcmMvY29yZS9tYXRoL1BvaW50LmpzIiwic3JjL2NvcmUvbWF0aC9pbmRleC5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0NpcmNsZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0VsbGlwc2UuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Qb2x5Z29uLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZUJ1ZmZlci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL1N5c3RlbVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcy5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9UZXh0dXJlTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9GWEFBRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1F1YWQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0LmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1N0ZW5jaWxNYXNrU3RhY2suanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvc3ByaXRlcy9TcHJpdGUuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL1Nwcml0ZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvc3ByaXRlcy93ZWJnbC9nZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3RleHQvVGV4dC5qcyIsInNyYy9jb3JlL3RleHR1cmVzL0Jhc2VSZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1RleHR1cmVVdnMuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGlja2VyL1RpY2tlci5qcyIsInNyYy9jb3JlL3RpY2tlci9pbmRleC5qcyIsInNyYy9jb3JlL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcy5qcyIsInNyYy9jb3JlL3V0aWxzL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvcGx1Z2luVGFyZ2V0LmpzIiwic3JjL2RlcHJlY2F0aW9uLmpzIiwic3JjL2V4dHJhcy9CaXRtYXBUZXh0LmpzIiwic3JjL2V4dHJhcy9Nb3ZpZUNsaXAuanMiLCJzcmMvZXh0cmFzL1RpbGluZ1Nwcml0ZS5qcyIsInNyYy9leHRyYXMvY2FjaGVBc0JpdG1hcC5qcyIsInNyYy9leHRyYXMvZ2V0Q2hpbGRCeU5hbWUuanMiLCJzcmMvZXh0cmFzL2dldEdsb2JhbFBvc2l0aW9uLmpzIiwic3JjL2V4dHJhcy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2FzY2lpL0FzY2lpRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmxvb20vQmxvb21GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJEaXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJYRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9CbHVyWUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvU21hcnRCbHVyRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvclN0ZXBGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kb3QvRG90U2NyZWVuRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZHJvcHNoYWRvdy9CbHVyWVRpbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ncmF5L0dyYXlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2ludmVydC9JbnZlcnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ub2lzZS9Ob2lzZUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcmdiL1JHQlNwbGl0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvc2VwaWEvU2VwaWFGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdEF4aXNGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3R3aXN0L1R3aXN0RmlsdGVyLmpzIiwic3JjL3NyYy9pbmRleC5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbkRhdGEuanMiLCJzcmMvaW50ZXJhY3Rpb24vSW50ZXJhY3Rpb25NYW5hZ2VyLmpzIiwic3JjL2ludGVyYWN0aW9uL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL2ludGVyYWN0aXZlVGFyZ2V0LmpzIiwic3JjL2xvYWRlcnMvYml0bWFwRm9udFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL2luZGV4LmpzIiwic3JjL2xvYWRlcnMvbG9hZGVyLmpzIiwic3JjL2xvYWRlcnMvc3ByaXRlc2hlZXRQYXJzZXIuanMiLCJzcmMvbG9hZGVycy90ZXh0dXJlUGFyc2VyLmpzIiwic3JjL21lc2gvTWVzaC5qcyIsInNyYy9tZXNoL1BsYW5lLmpzIiwic3JjL21lc2gvUm9wZS5qcyIsInNyYy9tZXNoL2luZGV4LmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFJlbmRlcmVyLmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFNoYWRlci5qcyIsInNyYy9wb2x5ZmlsbC9NYXRoLnNpZ24uanMiLCJzcmMvcG9seWZpbGwvT2JqZWN0LmFzc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9pbmRleC5qcyIsInNyYy9wb2x5ZmlsbC9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM1dUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbnNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25tQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0b0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6bUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIGNyZWF0ZUNvbnRleHQ6IFx0XHRcdHJlcXVpcmUoJy4vbGliL2NyZWF0ZUNvbnRleHQnKSxcbiAgICBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM6IFx0cmVxdWlyZSgnLi9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzJyksXG4gICAgXG4gICAgR0xCdWZmZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xCdWZmZXInKSxcbiAgICBHTEZyYW1lYnVmZmVyOiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9HTEZyYW1lYnVmZmVyJyksXG4gICAgR0xTaGFkZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xTaGFkZXInKSxcbiAgICBHTFRleHR1cmU6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xUZXh0dXJlJyksXG4gICAgXG4gICAgVmVydGV4QXJyYXlPYmplY3Q6IFx0XHRyZXF1aXJlKCcuL2xpYi9WZXJ0ZXhBcnJheU9iamVjdCcpXG5cbn07IiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRU1QVFlfQVJSQVlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xuXG52YXIgQnVmZmVyID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5BUlJBWV9CVUZGRVI7XG5cdHRoaXMuZHJhd1R5cGUgPSBkcmF3VHlwZSB8fCBnbC5TVEFUSUNfRFJBVztcblx0dGhpcy5kYXRhID0gRU1QVFlfQVJSQVlfQlVGRkVSO1xuXG5cdGlmKGRhdGEpXG5cdHtcblx0XHR0aGlzLnVwbG9hZChkYXRhKTtcblx0fVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKGRhdGEsIG9mZnNldCwgZG9udEJpbmQpXG57XG5cdC8vIHRvZG8gLSBuZWVkZWQ/XG5cdC8vaWYoIWRvbnRCaW5kKVxuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRcblx0ZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuXHRvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuXHRpZih0aGlzLmRhdGEuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpXG5cdHtcdFxuXHRcdGdsLmJ1ZmZlclN1YkRhdGEodGhpcy50eXBlLCBvZmZzZXQsIGRhdGEpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLCBkYXRhLCB0aGlzLmRyYXdUeXBlKTtcblx0fVxuXG5cdHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKTtcbn1cblxuQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIGdsLkFSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgdHlwZSwgZHJhd1R5cGUpO1xufVxuXG4vL1RPRE8gRGVzdHJveS4uXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyO1xuXG4iLCJcbnZhciBUZXh0dXJlID0gcmVxdWlyZSgnLi9HTFRleHR1cmUnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgRnJhbWVidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRnJhbWVidWZmZXIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcblx0dGhpcy5zdGVuY2lsID0gbnVsbDtcblx0dGhpcy50ZXh0dXJlID0gbnVsbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMTAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5lbmFibGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IG5ldyBUZXh0dXJlKGdsKTtcblxuXHR0aGlzLnRleHR1cmUuYmluZCgpO1xuXG5cdC8vZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlLnRleHR1cmUsIDApO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlU3RlbmNpbCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5zdGVuY2lsKXJldHVybjtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuc3RlbmNpbCA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgIFxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCB0aGlzLnN0ZW5jaWwpO1xuICAgIFxuICAgIC8vIFRPRE8uLiB0aGlzIGlzIGRlcHRoIEFORCBzdGVuY2lsP1xuICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTCwgIHRoaXMud2lkdGggICwgdGhpcy5oZWlnaHQgKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oIHIsIGcsIGIsIGEgKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIGdsLmNsZWFyQ29sb3IociwgZywgYiwgYSk7XG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZnJhbWVidWZmZXIgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdGlmICggdGhpcy50ZXh0dXJlIClcbiAgICB7XG4gICAgXHR0aGlzLnRleHR1cmUudXBsb2FkRGF0YShudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdGlmICggdGhpcy5zdGVuY2lsIClcbiAgICB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgc3RlbmNpbCBidWZmZXIgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlUkdCQSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHR2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbURhdGEoZ2wsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xuXHR0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSk7XG5cbiAgICBmYm8udW5iaW5kKCk7XG4gICAgXG4gICAgcmV0dXJuIGZibztcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlRmxvYXQzMiA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHQvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZS4uXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZS5mcm9tRGF0YShnbCwgZGF0YSwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpXG5cbiAgICBmYm8udW5iaW5kKCk7XG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lYnVmZmVyO1xuXG4iLCJcbnZhciBjb21waWxlUHJvZ3JhbSA9IHJlcXVpcmUoJy4vc2hhZGVyL2NvbXBpbGVQcm9ncmFtJyksXG5cdGV4dHJhY3RBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdEF0dHJpYnV0ZXMnKSxcblx0ZXh0cmFjdFVuaWZvcm1zID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdFVuaWZvcm1zJyksXG5cdGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IHJlcXVpcmUoJy4vc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCcpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBTaGFkZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xudmFyIFNoYWRlciA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0Ly8gRmlyc3QgY29tcGlsZSB0aGUgcHJvZ3JhbS4uXG5cdHRoaXMucHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXHQvLyBuZXh0IGV4dHJhY3QgdGhlIGF0dHJpYnV0ZXNcblx0dGhpcy5hdHRyaWJ1dGVzID0gZXh0cmFjdEF0dHJpYnV0ZXMoZ2wsIHRoaXMucHJvZ3JhbSk7IFxuXG4gICAgdmFyIHVuaWZvcm1EYXRhID0gZXh0cmFjdFVuaWZvcm1zKGdsLCB0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy51bmlmb3JtcyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCggZ2wsIHVuaWZvcm1EYXRhICk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgVGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBhIFdlYkdMIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gZm9ybWF0IHtudW1iZXJ9IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlJHQkFcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IHRoZSBnbCB0eXBlIG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5VTlNJR05FRF9CWVRFXG4gKi9cbnZhciBUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHQvLyBzb21lIHNldHRpbmdzLi5cblx0dGhpcy5taXBtYXAgPSBmYWxzZTtcblxuXHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdCB8fCBnbC5SR0JBO1xuXHR0aGlzLnR5cGUgPSB0eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7XG5cblxufVxuXG4vKipcbiAqIEBwYXJhbSB7UElYSS5nbENvcmUuVGV4dHVyZX0gW3Zhcm5hbWVdIFtkZXNjcmlwdGlvbl1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oc291cmNlKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblxuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgc291cmNlKTtcbn1cblxudmFyIEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IGZhbHNlO1xuXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWREYXRhID0gZnVuY3Rpb24oZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5iaW5kKCk7XG5cdFxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgdGhpcy53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG5cblx0aWYoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcblx0e1xuXHRcdGlmKCFGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUpXG5cdFx0e1xuXHRcdFx0dmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO1xuXHRcdFx0XG5cdFx0XHRpZihleHQpXG5cdFx0XHR7XG5cdFx0XHRcdEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHlwZSA9IGdsLkZMT0FUO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdC8vIFRPRE8gc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXNcblx0XHR0aGlzLnR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuXHR9XG5cblx0Ly8gd2hhdCB0eXBlIG9mIGRhdGE/XG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcblx0Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBkYXRhIHx8IG51bGwpO1xuXG59XG5cblRleHR1cmUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihsb2NhdGlvbilcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRpZihsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKVxuXHR7XG5cdFx0Z2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uKTtcblx0fVxuXG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1pbkZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGlmKHRoaXMubWlwbWFwKVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCk7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xuXHR9XHRcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWFnRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVNaXBtYXAgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHRoaXMubWlwbWFwID0gdHJ1ZTtcblx0Z2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZUxpbmVhclNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKHRydWUpO1xuXHR0aGlzLm1hZ0ZpbHRlcih0cnVlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTmVhcmVzdFNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKGZhbHNlKTtcblx0dGhpcy5tYWdGaWx0ZXIoZmFsc2UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwQ2xhbXAgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBSZXBlYXQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cdFxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5SRVBFQVQpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG59XG5cbi8vVGV4dHVyZS5cblRleHR1cmUuZnJvbVNvdXJjZSA9IGZ1bmN0aW9uKGdsLCBzb3VyY2UsIHByZW11bHRpcGx5QWxwaGEpXG57XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhIHx8IGZhbHNlO1xuXHR0ZXh0dXJlLnVwbG9hZChzb3VyY2UpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5UZXh0dXJlLmZyb21EYXRhID0gZnVuY3Rpb24oZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdC8vY29uc29sZS5sb2coZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnVwbG9hZERhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG4iLCJcbi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxuLy8gc3RhdGUgb2JqZWN0Ly9cblxuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChnbClcbntcblx0XG5cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gKFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpXG4gICAgKTtcblxuLy9cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gbnVsbDtcblxuXHRpZih0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbilcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvID0gdGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsgIFxuXHR9XG5cblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG5cdHRoaXMuZGlydHkgPSBmYWxzZTtcblxuXHRcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVydGV4QXJyYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFZlcnRleEFycmF5T2JqZWN0O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5uYXRpdmVWYW8pOyAgXG5cblx0XHRpZih0aGlzLmRpcnR5KVxuXHRcdHtcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0XHR9XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgXG5cdHtcblx0XHR2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW2ldO1xuXHRcdGF0dHJpYi5idWZmZXIuYmluZCgpO1x0XG5cblx0XHRhdHRyaWIuYXR0cmlidXRlLnBvaW50ZXIoYXR0cmliLnR5cGUsIGF0dHJpYi5ub3JtYWxpemVkLCBhdHRyaWIuc3RyaWRlLCBhdHRyaWIuc3RhcnQpOyBcblx0XHRcblx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWIuYXR0cmlidXRlLmxvY2F0aW9uKTtcblx0fTtcblxuXHR0aGlzLmluZGV4QnVmZmVyLmJpbmQoKTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgYXR0cmlidXRlLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXJ0KVxue1xuICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHtcbiAgICBcdGJ1ZmZlcjogXHRidWZmZXIsXG4gICAgXHRhdHRyaWJ1dGU6IFx0YXR0cmlidXRlLFxuXG4gICAgXHRsb2NhdGlvbjogXHRhdHRyaWJ1dGUubG9jYXRpb24sXG5cdCBcdHR5cGU6IFx0XHR0eXBlIHx8IHRoaXMuZ2wuRkxPQVQsXG5cdCBcdG5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWQgfHwgZmFsc2UsXG5cdCBcdHN0cmlkZTogXHRzdHJpZGUgfHwgMCxcblx0IFx0c3RhcnQ6IFx0XHRzdGFydCB8fCAwXG5cdH0pXG5cblx0dGhpcy5kaXJ0eSA9IHRydWU7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRpb25zKVxue1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBidWZmZXI7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHR5cGUsIHNpemUsIHN0YXJ0KVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5kcmF3RWxlbWVudHModHlwZSwgc2l6ZSwgZ2wuVU5TSUdORURfU0hPUlQsIHN0YXJ0KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBDb250ZXh0XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIENPTlRFWFRfVUlEID0gMDtcblxudmFyIGNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbihjYW52YXMsIG9wdGlvbnMpXG57XG4gICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRpb25zKSB8fCBcbiAgICBcdCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdsKVxuICAgIHtcbiAgICAgICAgLy8gZmFpbCwgbm90IGFibGUgdG8gZ2V0IGEgY29udGV4dFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHdlYkdMLiBUcnkgdXNpbmcgdGhlIGNhbnZhcyByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIC8vIG1pZ2h0IHdhbnQgdG8gcGhhc2UgdGhpcyBvdXQ/XG4gICAgZ2wuaWQgPSBDT05URVhUX1VJRCsrO1xuXG4gICAgcmV0dXJuIGdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbnRleHQ7XG5cbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBzZXRWZXJ0ZXhBdHRyaWJBcnJheXMgPSBmdW5jdGlvbiAoZ2wsIGF0dHJpYnMpXG57XHRcbiAgIC8vIGNvbnNvbGUubG9nKGdsLmlkKVxuICAgIHZhciBkYXRhID0gR0xfTUFQW2dsLmlkXTtcblxuICAgIGlmKCFkYXRhKVxuICAgIHtcblx0ICAgdmFyIG1heEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0XHRkYXRhID0gR0xfTUFQW2dsLmlkXSA9IHt0ZW1wQXR0cmliU3RhdGU6bmV3IEFycmF5KG1heEF0dHJpYnMpXG5cdFx0XHRcdCBcdCBcdFx0ICAgLGF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKX07XG5cdH1cblx0XG4gICAgdmFyIGksXG4gICAgXHR0ZW1wQXR0cmliU3RhdGUgPSBkYXRhLnRlbXBBdHRyaWJTdGF0ZSxcbiAgICBcdGF0dHJpYlN0YXRlID0gZGF0YS5hdHRyaWJTdGF0ZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wQXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yIChpIGluIGF0dHJpYnMpXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbYXR0cmlic1tpXS5sb2NhdGlvbl0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDE7IGkgPCBhdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChhdHRyaWJTdGF0ZVtpXSAhPT0gdGVtcEF0dHJpYlN0YXRlW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJTdGF0ZVtpXSA9IHRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM7IiwiXG5cblxuXG5jb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuICAgIHZhciBnbFZlcnRTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbnZhciBjb21waWxlU2hhZGVyID0gZnVuY3Rpb24gKGdsLCB0eXBlLCBzcmMpXG57XG4gICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuXG4gICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlUHJvZ3JhbTtcblxuIiwiXG5cbnZhciBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBzaXplKSBcbntcbiAgICBzd2l0Y2ggKHR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICBjYXNlICd2ZWMyJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjNCc6ICAgICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KDQgKiBzaXplKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnaXZlYzInOiAgIFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDIgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWM0JzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2wnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY2FzZSAnYnZlYzInOlxuXG4gICAgICAgICAgICByZXR1cm4gYm9vbGVhbkFycmF5KCAyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzQnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSg0ICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDFdKTtcblxuICAgICAgICBjYXNlICdtYXQzJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0NCc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMCwgMV0pO1xuICAgIH1cbn1cblxudmFyIGJvb2xlYW5BcnJheSA9IGZ1bmN0aW9uKHNpemUpXG57XG4gICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgXG4gICAge1xuICAgICAgICBhcnJheVtpXSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdFZhbHVlO1xuIiwiXG52YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIG1hcFNpemUgPSByZXF1aXJlKCcuL21hcFNpemUnKTtcblxudmFyIGV4dHJhY3RBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcblxuICAgIHZhciB0b3RhbEF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9BVFRSSUJVVEVTKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEF0dHJpYnV0ZXM7IGkrKykgXG4gICAge1xuICAgICAgICB2YXIgYXR0cmliRGF0YSA9IGdsLmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpKTtcbiAgICAgICAgdmFyIHR5cGUgPSBtYXBUeXBlKGdsLCBhdHRyaWJEYXRhLnR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNbYXR0cmliRGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgIHR5cGU6dHlwZSxcbiAgICAgICAgICAgIHNpemU6bWFwU2l6ZSh0eXBlKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOmdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGF0dHJpYkRhdGEubmFtZSksXG4gICAgICAgICAgICAvL1RPRE8gLSBtYWtlIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAgICAgICAgICAgIHBvaW50ZXI6ZnVuY3Rpb24odHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydCl7XG5cbiAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmxvY2F0aW9uLHRoaXMuc2l6ZSwgdHlwZSB8fCBnbC5GTE9BVCwgbm9ybWFsaXplZCB8fCBmYWxzZSwgc3RyaWRlIHx8IDAsIHN0YXJ0IHx8IDApOyBcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzOyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0cmFjdEF0dHJpYnV0ZXM7XG5cbiIsInZhciBtYXBUeXBlID0gcmVxdWlyZSgnLi9tYXBUeXBlJyk7XG52YXIgZGVmYXVsdFZhbHVlID0gcmVxdWlyZSgnLi9kZWZhdWx0VmFsdWUnKTtcblxuXG52YXIgZXh0cmFjdFVuaWZvcm1zID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG5cdHZhciB1bmlmb3JtcyA9IHt9O1xuXHRcbiAgICB2YXIgdG90YWxVbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbFVuaWZvcm1zOyBpKyspIFxuICAgIHtcbiAgICBcdHZhciB1bmlmb3JtRGF0YSA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSk7XG4gICAgXHR2YXIgbmFtZSA9IHVuaWZvcm1EYXRhLm5hbWUucmVwbGFjZSgvXFxbLio/XFxdLywgXCJcIik7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgdW5pZm9ybURhdGEudHlwZSApO1xuXG4gICAgXHR1bmlmb3Jtc1tuYW1lXSA9IHtcbiAgICBcdFx0dHlwZTp0eXBlLFxuICAgIFx0XHRzaXplOnVuaWZvcm1EYXRhLnNpemUsXG4gICAgXHRcdGxvY2F0aW9uOmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSxcbiAgICBcdFx0dmFsdWU6ZGVmYXVsdFZhbHVlKHR5cGUsIHVuaWZvcm1EYXRhLnNpemUpXG4gICAgXHR9XG4gICAgfTtcblx0XG5cdHJldHVybiB1bmlmb3JtcztcdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RVbmlmb3JtcztcblxuIiwiXG52YXIgZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gZnVuY3Rpb24oZ2wsIHVuaWZvcm1EYXRhKVxue1xuICAgIC8vIHRoaXMgaXMgdGhlIG9iamVjdCB3ZSB3aWxsIGJlIHNlbmRpbmcgYmFjay5cbiAgICAvLyBhbiBvYmplY3QgaGllcmFjaHkgd2lsbCBiZSBjcmVhdGVkIGZvciBzdHJ1Y3RzXG4gICAgdmFyIHVuaWZvcm1zID0ge2RhdGE6e319O1xuXG4gICAgdW5pZm9ybXMuZ2wgPSBnbDtcbiAgICBcbiAgICB2YXIgdW5pZm9ybUtleXM9IE9iamVjdC5rZXlzKHVuaWZvcm1EYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybUtleXMubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGZ1bGxOYW1lID0gdW5pZm9ybUtleXNbaV1cblxuICAgICAgICB2YXIgbmFtZVRva2VucyA9IGZ1bGxOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHZhciB1bmlmb3JtR3JvdXAgPSBnZXRVbmlmb3JtR3JvdXAobmFtZVRva2VucywgdW5pZm9ybXMpO1xuXG4gICAgICAgIHZhciB1bmlmb3JtID0gIHVuaWZvcm1EYXRhW2Z1bGxOYW1lXTtcbiAgICAgICAgdW5pZm9ybUdyb3VwLmRhdGFbbmFtZV0gPSB1bmlmb3JtO1xuXG4gICAgICAgIHVuaWZvcm1Hcm91cC5nbCA9IGdsO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bmlmb3JtR3JvdXAsIG5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2VuZXJhdGVHZXR0ZXIobmFtZSksXG4gICAgICAgICAgICBzZXQ6IGdlbmVyYXRlU2V0dGVyKG5hbWUsIHVuaWZvcm0pXG4gICAgICAgIH0pXG4gICAgfTtcblxuICAgIHJldHVybiB1bmlmb3Jtcztcbn1cblxudmFyIGdlbmVyYXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSlcbntcblx0dmFyIHRlbXBsYXRlID0gZ2V0dGVyVGVtcGxhdGUucmVwbGFjZSgnJSUnLCBuYW1lKTtcblx0cmV0dXJuIG5ldyBGdW5jdGlvbih0ZW1wbGF0ZSk7XG59XG5cbnZhciBnZW5lcmF0ZVNldHRlciA9IGZ1bmN0aW9uKG5hbWUsIHVuaWZvcm0pXG57XG4gICAgdmFyIHRlbXBsYXRlID0gc2V0dGVyVGVtcGxhdGUucmVwbGFjZSgvJSUvZywgbmFtZSk7XG4gICAgdmFyIHNldFRlbXBsYXRlXG4gICAgXG4gICAgaWYodW5pZm9ybS5zaXplID09PSAxKVxuICAgIHtcbiAgICAgICAgc2V0VGVtcGxhdGUgPSBHTFNMX1RPX1NJTkdMRV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19BUlJBWV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuXG4gICAgaWYoc2V0VGVtcGxhdGUpXG4gICAge1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIlxcbnRoaXMuZ2wuXCIgKyBzZXRUZW1wbGF0ZSArIFwiO1wiO1xuICAgIH1cblxuICBcdHJldHVybiBuZXcgRnVuY3Rpb24oJ3ZhbHVlJywgdGVtcGxhdGUpO1xufVxuXG52YXIgZ2V0VW5pZm9ybUdyb3VwID0gZnVuY3Rpb24obmFtZVRva2VucywgdW5pZm9ybSlcbntcbiAgICB2YXIgY3VyID0gdW5pZm9ybTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZVRva2Vucy5sZW5ndGggLSAxOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIG8gPSBjdXJbbmFtZVRva2Vuc1tpXV0gfHwge2RhdGE6e319O1xuICAgICAgICBjdXJbbmFtZVRva2Vuc1tpXV0gPSBvO1xuICAgICAgICBjdXIgPSBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gY3VyXG59XG5cbnZhciBnZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAncmV0dXJuIHRoaXMuZGF0YS4lJS52YWx1ZTsnLFxuXS5qb2luKCdcXG4nKTtcblxudmFyIHNldHRlclRlbXBsYXRlID0gW1xuICAgICd0aGlzLmRhdGEuJSUudmFsdWUgPSB2YWx1ZTsnLFxuICAgICd2YXIgbG9jYXRpb24gPSB0aGlzLmRhdGEuJSUubG9jYXRpb247J1xuXS5qb2luKCdcXG4nKTtcblxuXG52YXIgR0xTTF9UT19TSU5HTEVfU0VUVEVSUyA9IHtcblxuICAgICdmbG9hdCc6ICAgICd1bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ3ZlYzQnOiAgICAgJ3VuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdidmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdidmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ21hdDInOiAgICAgJ3VuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuICAgICdtYXQzJzogICAgICd1bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0NCc6ICAgICAndW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG5cbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbnZhciBHTFNMX1RPX0FSUkFZX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpJyxcblxuICAgICd2ZWMyJzogICAgICd1bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWMzJzogICAgICd1bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgIFx0XG4gICAgJ2ludCc6ICAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgIFxuICAgICdzYW1wbGVyMkQnOid1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0O1xuXG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbih0eXBlKSBcbnsgXG4gICAgcmV0dXJuIEdMU0xfVE9fU0laRVt0eXBlXTtcbn1cblxuXG52YXIgR0xTTF9UT19TSVpFID0ge1xuICAgICdmbG9hdCc6ICAgIDEsXG4gICAgJ3ZlYzInOiAgICAgMixcbiAgICAndmVjMyc6ICAgICAzLFxuICAgICd2ZWM0JzogICAgIDQsXG5cbiAgICAnaW50JzogICAgICAxLFxuICAgICdpdmVjMic6ICAgIDIsXG4gICAgJ2l2ZWMzJzogICAgMyxcbiAgICAnaXZlYzQnOiAgICA0LFxuXG4gICAgJ2Jvb2wnOiAgICAgMSxcbiAgICAnYnZlYzInOiAgICAyLFxuICAgICdidmVjMyc6ICAgIDMsXG4gICAgJ2J2ZWM0JzogICAgNCxcblxuICAgICdtYXQyJzogICAgIDQsXG4gICAgJ21hdDMnOiAgICAgOSxcbiAgICAnbWF0NCc6ICAgICAxNixcblxuICAgICdzYW1wbGVyMkQnOiAgMVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFNpemU7XG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbihnbCwgdHlwZSkgXG57XG4gICAgaWYoIUdMX1RBQkxFKSBcbiAgICB7XG4gICAgICAgIHZhciB0eXBlTmFtZXMgPSBPYmplY3Qua2V5cyhHTF9UT19HTFNMX1RZUEVTKTtcblxuICAgICAgICBHTF9UQUJMRSA9IHt9O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlTmFtZXMubGVuZ3RoOyArK2kpIFxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdG4gPSB0eXBlTmFtZXNbaV07XG4gICAgICAgICAgICBHTF9UQUJMRVsgZ2xbdG5dIF0gPSBHTF9UT19HTFNMX1RZUEVTW3RuXTtcbiAgICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gR0xfVEFCTEVbdHlwZV07XG59XG5cbnZhciBHTF9UQUJMRSA9IG51bGw7XG5cbnZhciBHTF9UT19HTFNMX1RZUEVTID0ge1xuICAnRkxPQVQnOiAgICAgICAnZmxvYXQnLFxuICAnRkxPQVRfVkVDMic6ICAndmVjMicsXG4gICdGTE9BVF9WRUMzJzogICd2ZWMzJyxcbiAgJ0ZMT0FUX1ZFQzQnOiAgJ3ZlYzQnLFxuXG4gICdJTlQnOiAgICAgICAgICdpbnQnLFxuICAnSU5UX1ZFQzInOiAgICAnaXZlYzInLFxuICAnSU5UX1ZFQzMnOiAgICAnaXZlYzMnLFxuICAnSU5UX1ZFQzQnOiAgICAnaXZlYzQnLFxuICBcbiAgJ0JPT0wnOiAgICAgICAgJ2Jvb2wnLFxuICAnQk9PTF9WRUMyJzogICAnYnZlYzInLFxuICAnQk9PTF9WRUMzJzogICAnYnZlYzMnLFxuICAnQk9PTF9WRUM0JzogICAnYnZlYzQnLFxuICBcbiAgJ0ZMT0FUX01BVDInOiAgJ21hdDInLFxuICAnRkxPQVRfTUFUMyc6ICAnbWF0MycsXG4gICdGTE9BVF9NQVQ0JzogICdtYXQ0JyxcbiAgXG4gICdTQU1QTEVSXzJEJzogICdzYW1wbGVyMkQnICBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiLyohXG4gKiBhc3luY1xuICogaHR0cHM6Ly9naXRodWIuY29tL2Nhb2xhbi9hc3luY1xuICpcbiAqIENvcHlyaWdodCAyMDEwLTIwMTQgQ2FvbGFuIE1jTWFob25cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9Cb29sKHYpIHtcbiAgICAgICAgcmV0dXJuICEhdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90SWQodikge1xuICAgICAgICByZXR1cm4gIXY7XG4gICAgfVxuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBwcmV2aW91c19hc3luYztcblxuICAgIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAgIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICAgIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsIHx8XG4gICAgICAgICAgICB0aGlzO1xuXG4gICAgaWYgKHJvb3QgIT0gbnVsbCkge1xuICAgICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsaXR5IGZ1bmN0aW9ucyAvLy8vXG5cbiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIHZhciBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xuXG4gICAgLy8gUG9ydGVkIGZyb20gdW5kZXJzY29yZS5qcyBpc09iamVjdFxuICAgIHZhciBfaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2lzQXJyYXlMaWtlKGFycikge1xuICAgICAgICByZXR1cm4gX2lzQXJyYXkoYXJyKSB8fCAoXG4gICAgICAgICAgICAvLyBoYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAgICAgICAgdHlwZW9mIGFyci5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgICAgYXJyLmxlbmd0aCAlIDEgPT09IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXJyYXlFYWNoKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaW5kZXhdLCBpbmRleCwgYXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IGFyci5sZW5ndGgsXG4gICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcmFuZ2UoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9tYXAoQXJyYXkoY291bnQpLCBmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gaTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZHVjZShhcnIsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgIF9hcnJheUVhY2goYXJyLCBmdW5jdGlvbiAoeCwgaSwgYSkge1xuICAgICAgICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHgsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZvckVhY2hPZihvYmplY3QsIGl0ZXJhdG9yKSB7XG4gICAgICAgIF9hcnJheUVhY2goX2tleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaXRlcmF0b3Iob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbmRleE9mKGFyciwgaXRlbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9rZXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW47XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBpZiAoX2lzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGkgOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBfa2V5cyhjb2xsKTtcbiAgICAgICAgICAgIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ga2V5c1tpXSA6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2ltaWxhciB0byBFUzYncyByZXN0IHBhcmFtIChodHRwOi8vYXJpeWEub2ZpbGFicy5jb20vMjAxMy8wMy9lczYtYW5kLXJlc3QtcGFyYW1ldGVyLmh0bWwpXG4gICAgLy8gVGhpcyBhY2N1bXVsYXRlcyB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGFuIGFycmF5LCBhZnRlciBhIGdpdmVuIGluZGV4LlxuICAgIC8vIEZyb20gdW5kZXJzY29yZS5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMjE0MCkuXG4gICAgZnVuY3Rpb24gX3Jlc3RQYXJhbShmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IHVudXNlZCBidXQgaGFuZGxlIGNhc2VzIG91dHNpZGUgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQ6XG4gICAgICAgICAgICAvLyB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgIC8vIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIC8vICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgICAgICAgIC8vIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IodmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG5cbiAgICAvLyBjYXB0dXJlIHRoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIGd1YXJkIGFnYWluc3QgZmFrZVRpbWVyIG1vY2tzXG4gICAgdmFyIF9zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcblxuICAgIHZhciBfZGVsYXkgPSBfc2V0SW1tZWRpYXRlID8gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgX3NldEltbWVkaWF0ZShmbik7XG4gICAgfSA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IF9kZWxheTtcbiAgICB9XG4gICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gX3NldEltbWVkaWF0ZSA/IF9kZWxheSA6IGFzeW5jLm5leHRUaWNrO1xuXG5cbiAgICBhc3luYy5mb3JFYWNoID1cbiAgICBhc3luYy5lYWNoID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2YoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID1cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cblxuICAgIGFzeW5jLmZvckVhY2hMaW1pdCA9XG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2VhY2hPZkxpbWl0KGxpbWl0KShhcnIsIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZiA9XG4gICAgYXN5bmMuZWFjaE9mID0gZnVuY3Rpb24gKG9iamVjdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdCB8fCBbXTtcblxuICAgICAgICB2YXIgaXRlciA9IF9rZXlJdGVyYXRvcihvYmplY3QpO1xuICAgICAgICB2YXIga2V5LCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgICAgIHdoaWxlICgoa2V5ID0gaXRlcigpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXksIG9ubHlfb25jZShkb25lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkID09PSAwKSBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgICAgY29tcGxldGVkLS07XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGtleSBpcyBudWxsIGluIGNhc2UgaXRlcmF0b3IgaXNuJ3QgZXhoYXVzdGVkXG4gICAgICAgICAgICAvLyBhbmQgZG9uZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBudWxsICYmIGNvbXBsZXRlZCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaE9mU2VyaWVzID1cbiAgICBhc3luYy5lYWNoT2ZTZXJpZXMgPSBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShpdGVyYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLmZvckVhY2hPZkxpbWl0ID1cbiAgICBhc3luYy5lYWNoT2ZMaW1pdCA9IGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgX2VhY2hPZkxpbWl0KGxpbWl0KShvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9lYWNoT2ZMaW1pdChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgICAgICBvYmogPSBvYmogfHwgW107XG4gICAgICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUgJiYgcnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmICFlcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBuZXh0S2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iob2JqW2tleV0sIGtleSwgb25seV9vbmNlKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZG9QYXJhbGxlbChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oYXN5bmMuZWFjaE9mLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWxMaW1pdChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKF9lYWNoT2ZMaW1pdChsaW1pdCksIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9TZXJpZXMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZlNlcmllcywgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UoYXJyKSA/IFtdIDoge307XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih2YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9hc3luY01hcCk7XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMuaW5qZWN0ID1cbiAgICBhc3luYy5mb2xkbCA9XG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hPZlNlcmllcyhhcnIsIGZ1bmN0aW9uICh4LCBpLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgeCwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBtZW1vKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvbGRyID1cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgaWRlbnRpdHkpLnJldmVyc2UoKTtcbiAgICAgICAgYXN5bmMucmVkdWNlKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0b3I7XG4gICAgICAgICAgICBpdGVyYXRvciA9IG1lbW87XG4gICAgICAgICAgICBtZW1vID0gX2lzQXJyYXkoYXJyKSA/IFtdIDoge307XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoT2YoYXJyLCBmdW5jdGlvbih2LCBrLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgdiwgaywgY2IpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4OiBpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5zZWxlY3QgPVxuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RMaW1pdCA9XG4gICAgYXN5bmMuZmlsdGVyTGltaXQgPSBkb1BhcmFsbGVsTGltaXQoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RTZXJpZXMgPVxuICAgIGFzeW5jLmZpbHRlclNlcmllcyA9IGRvU2VyaWVzKF9maWx0ZXIpO1xuXG4gICAgZnVuY3Rpb24gX3JlamVjdChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9maWx0ZXIoZWFjaGZuLCBhcnIsIGZ1bmN0aW9uKHZhbHVlLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBjYighdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBhc3luYy5yZWplY3QgPSBkb1BhcmFsbGVsKF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdFNlcmllcyA9IGRvU2VyaWVzKF9yZWplY3QpO1xuXG4gICAgZnVuY3Rpb24gX2NyZWF0ZVRlc3RlcihlYWNoZm4sIGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYikge1xuICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIGNiKGdldFJlc3VsdChmYWxzZSwgdm9pZCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZSh4LCBfLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYiAmJiBjaGVjayh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoZ2V0UmVzdWx0KHRydWUsIHgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgZWFjaGZuKGFyciwgbGltaXQsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2IgPSBpdGVyYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGxpbWl0O1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy5hbnkgPVxuICAgIGFzeW5jLnNvbWUgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5zb21lTGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCB0b0Jvb2wsIGlkZW50aXR5KTtcblxuICAgIGFzeW5jLmFsbCA9XG4gICAgYXN5bmMuZXZlcnkgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgbm90SWQsIG5vdElkKTtcblxuICAgIGFzeW5jLmV2ZXJ5TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBub3RJZCwgbm90SWQpO1xuXG4gICAgZnVuY3Rpb24gX2ZpbmRHZXRSZXN1bHQodiwgeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgYXN5bmMuZGV0ZWN0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0U2VyaWVzID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZTZXJpZXMsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuXG4gICAgYXN5bmMuc29ydEJ5ID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLm1hcChhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKGVyciwgY3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7dmFsdWU6IHgsIGNyaXRlcmlhOiBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChjb21wYXJhdG9yKSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNvbmN1cnJlbmN5LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gcmVtYWluaW5nVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBfaW5kZXhPZihsaXN0ZW5lcnMsIGZuKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRhc2tDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLS07XG4gICAgICAgICAgICBfYXJyYXlFYWNoKGxpc3RlbmVycy5zbGljZSgwKSwgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBfYXJyYXlFYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9mb3JFYWNoT2YocmVzdWx0cywgZnVuY3Rpb24odmFsLCBya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHRhc2tDb21wbGV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRlYWQtbG9ja3NcbiAgICAgICAgICAgIHZhciBsZW4gPSByZXF1aXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZGVwO1xuICAgICAgICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZGVwID0gdGFza3NbcmVxdWlyZXNbbGVuXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGluZXhpc3RhbnQgZGVwZW5kZW5jeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzQXJyYXkoZGVwKSAmJiBfaW5kZXhPZihkZXAsIGspID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXMgY3ljbGljIGRlcGVuZGVuY2llcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5uaW5nVGFza3MgPCBjb25jdXJyZW5jeSAmJiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzKys7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLnJldHJ5ID0gZnVuY3Rpb24odGltZXMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBERUZBVUxUX1RJTUVTID0gNTtcbiAgICAgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuXG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbDogREVGQVVMVF9JTlRFUlZBTFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KXtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0ID09PSAnbnVtYmVyJyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodCwgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYodHlwZW9mIHQgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBhY2MudGltZXMgPSBwYXJzZUludCh0LnRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgICAgICAgICBhY2MuaW50ZXJ2YWwgPSBwYXJzZUludCh0LmludGVydmFsLCAxMCkgfHwgREVGQVVMVF9JTlRFUlZBTDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGZvciBcXCd0aW1lc1xcJzogJyArIHR5cGVvZiB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgMSB8fCBsZW5ndGggPiAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIC0gbXVzdCBiZSBlaXRoZXIgKHRhc2spLCAodGFzaywgY2FsbGJhY2spLCAodGltZXMsIHRhc2spIG9yICh0aW1lcywgdGFzaywgY2FsbGJhY2spJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoIDw9IDIgJiYgdHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRzLCB0aW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBvcHRzLnRhc2sgPSB0YXNrO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRUYXNrKHdyYXBwZWRDYWxsYmFjaywgd3JhcHBlZFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCh0YXNrLCBmaW5hbEF0dGVtcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VyaWVzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayhmdW5jdGlvbihlcnIsIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXNDYWxsYmFjayghZXJyIHx8IGZpbmFsQXR0ZW1wdCwge2VycjogZXJyLCByZXN1bHQ6IHJlc3VsdH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVkUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmV0cnlJbnRlcnZhbChpbnRlcnZhbCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAob3B0cy50aW1lcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsQXR0ZW1wdCA9ICEob3B0cy50aW1lcy09MSk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQob3B0cy50YXNrLCBmaW5hbEF0dGVtcHQpKTtcbiAgICAgICAgICAgICAgICBpZighZmluYWxBdHRlbXB0ICYmIG9wdHMuaW50ZXJ2YWwgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUludGVydmFsKG9wdHMuaW50ZXJ2YWwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IG9wdHMuY2FsbGJhY2spKGRhdGEuZXJyLCBkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIG9wdHMuY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2s7XG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBJdGVyYXRvcihpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgW2Vycl0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuc3VyZUFzeW5jKGl0ZXJhdG9yKS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfcGFyYWxsZWwoZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IF9pc0FycmF5TGlrZSh0YXNrcykgPyBbXSA6IHt9O1xuXG4gICAgICAgIGVhY2hmbih0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGtleSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRhc2soX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2YsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChfZWFjaE9mTGltaXQobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKGFzeW5jLmVhY2hPZlNlcmllcywgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuaXRlcmF0b3IgPSBmdW5jdGlvbiAodGFza3MpIHtcbiAgICAgICAgZnVuY3Rpb24gbWFrZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm4ubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgdGFza3MubGVuZ3RoIC0gMSkgPyBtYWtlQ2FsbGJhY2soaW5kZXggKyAxKTogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIChmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoY2FsbEFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLCBhcmdzLmNvbmNhdChjYWxsQXJncylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gX2NvbmNhdChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoeSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG4gICAgICAgIGlmICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0LmFwcGx5KHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1doaWxzdCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiArK2NhbGxzIDw9IDEgfHwgdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZHVyaW5nID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG5cbiAgICAgICAgdmFyIG5leHQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjaGVjayk7XG4gICAgICAgICAgICAgICAgdGVzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24oZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRydXRoKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QoY2hlY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb0R1cmluZyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgYXN5bmMuZHVyaW5nKGZ1bmN0aW9uKG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjYWxscysrIDwgMSkge1xuICAgICAgICAgICAgICAgIG5leHQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3F1ZXVlKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHBvcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayB8fCBub29wXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9uZXh0KHEsIHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIF9hcnJheUVhY2godGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2god29ya2Vyc0xpc3QsIGZ1bmN0aW9uICh3b3JrZXIsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya2VyID09PSB0YXNrICYmICFyZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBub29wLFxuICAgICAgICAgICAgZW1wdHk6IG5vb3AsXG4gICAgICAgICAgICBkcmFpbjogbm9vcCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5kcmFpbiA9IG5vb3A7XG4gICAgICAgICAgICAgICAgcS50YXNrcyA9IFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnQ6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrcyA9IHEucGF5bG9hZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS5wYXlsb2FkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS50YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9tYXAodGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5wdXNoKHRhc2tzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShfbmV4dChxLCB0YXNrcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyKGRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtlcnNMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSBmYWxzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bWVDb3VudCA9IE1hdGgubWluKHEuY29uY3VycmVuY3ksIHEudGFza3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHJlc3VtZUNvdW50OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBxID0gX3F1ZXVlKGZ1bmN0aW9uIChpdGVtcywgY2IpIHtcbiAgICAgICAgICAgIHdvcmtlcihpdGVtc1swXSwgY2IpO1xuICAgICAgICB9LCBjb25jdXJyZW5jeSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLnByaW9yaXR5UXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuXG4gICAgICAgIGZ1bmN0aW9uIF9jb21wYXJlVGFza3MoYSwgYil7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgICB2YXIgYmVnID0gLTEsXG4gICAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgc2VxdWVuY2VbbWlkXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWcgPSBtaWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmVnO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBfcXVldWUod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2NvbnNvbGVfZm4obmFtZSkge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2goYXJncywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlW25hbWVdKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgaWRlbnRpdHk7XG4gICAgICAgIHZhciBtZW1vaXplZCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24gbWVtb2l6ZWQoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBtZW1vW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0gPSBbY2FsbGJhY2tdO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW9ba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH07XG5cbiAgICBhc3luYy51bm1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3RpbWVzKG1hcHBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG1hcHBlcihfcmFuZ2UoY291bnQpLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jLnRpbWVzID0gX3RpbWVzKGFzeW5jLm1hcCk7XG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBfdGltZXMoYXN5bmMubWFwU2VyaWVzKTtcbiAgICBhc3luYy50aW1lc0xpbWl0ID0gZnVuY3Rpb24gKGNvdW50LCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5tYXBMaW1pdChfcmFuZ2UoY291bnQpLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VxID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5vb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnJlZHVjZShmbnMsIGFyZ3MsIGZ1bmN0aW9uIChuZXdhcmdzLCBmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBuZXdhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBuZXh0YXJncykge1xuICAgICAgICAgICAgICAgICAgICBjYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY29tcG9zZSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIF9hcHBseUVhY2goZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uKGZucywgYXJncykge1xuICAgICAgICAgICAgdmFyIGdvID0gX3Jlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgXywgY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncy5jb25jYXQoW2NiXSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ28uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ287XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmFwcGx5RWFjaCA9IF9hcHBseUVhY2goYXN5bmMuZWFjaE9mKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZlNlcmllcyk7XG5cblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seV9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIgdGFzayA9IGVuc3VyZUFzeW5jKGZuKTtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmVuc3VyZUFzeW5jID0gZW5zdXJlQXN5bmM7XG5cbiAgICBhc3luYy5jb25zdGFudCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICAgIHZhciBhcmdzID0gW251bGxdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhc3luYy53cmFwU3luYyA9XG4gICAgYXN5bmMuYXN5bmNpZnkgPSBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChfaXNPYmplY3QocmVzdWx0KSAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIubWVzc2FnZSA/IGVyciA6IG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcblxuICAgIGRpbSA9IGRpbSB8fCAyO1xuXG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLFxuICAgICAgICBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcbiAgICAgICAgdHJpYW5nbGVzID0gW107XG5cbiAgICBpZiAoIW91dGVyTm9kZSkgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBzaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgc2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIHN1bSA9IDAsXG4gICAgICAgIGksIGosIGxhc3Q7XG5cbiAgICAvLyBjYWxjdWxhdGUgb3JpZ2luYWwgd2luZGluZyBvcmRlciBvZiBhIHBvbHlnb24gcmluZ1xuICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuXG4gICAgLy8gbGluayBwb2ludHMgaW50byBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHN1bSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG4gICAgaWYgKCFzdGFydCkgcmV0dXJuIHN0YXJ0O1xuICAgIGlmICghZW5kKSBlbmQgPSBzdGFydDtcblxuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcCA9IGVuZCA9IHAucHJldjtcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuICAgIHJldHVybiBlbmQ7XG59XG5cbi8vIG1haW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBhcyBhIGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIHBhc3MpIHtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuICAgIGlmICghcGFzcyAmJiBzaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICB2YXIgc3RvcCA9IGVhcixcbiAgICAgICAgcHJldiwgbmV4dDtcblxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuICAgIHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcbiAgICAgICAgcHJldiA9IGVhci5wcmV2O1xuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XG5cbiAgICAgICAgaWYgKHNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIHNpemUpIDogaXNFYXIoZWFyKSkge1xuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXG4gICAgICAgICAgICByZW1vdmVOb2RlKGVhcik7XG5cbiAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRpY2UgbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhlYXIsIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIHNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICAvLyBmaXJzdCBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBpbmNyZWFzaW5nIHotb3JkZXJcbiAgICB2YXIgcCA9IGVhci5uZXh0WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyB0aGVuIGxvb2sgZm9yIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICBwID0gZWFyLnByZXZaO1xuXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgLy8gYSBzZWxmLWludGVyc2VjdGlvbiB3aGVyZSBlZGdlICh2W2ktMV0sdltpXSkgaW50ZXJzZWN0cyAodltpKzFdLHZbaSsyXSlcbiAgICAgICAgaWYgKGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHA7XG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBsb29rIGZvciBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgICAgICAgICBhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiA9IGIubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBhID0gYS5uZXh0O1xuICAgIH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG4gICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuICAgICAgICBpZiAobGlzdCA9PT0gbGlzdC5uZXh0KSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuICAgICAgICBxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcbiAgICB9XG5cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0ZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlWChhLCBiKSB7XG4gICAgcmV0dXJuIGEueCAtIGIueDtcbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkge1xuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xuICAgICAgICBmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcbiAgICB9XG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBwID0gb3V0ZXJOb2RlLFxuICAgICAgICBoeCA9IGhvbGUueCxcbiAgICAgICAgaHkgPSBob2xlLnksXG4gICAgICAgIHF4ID0gLUluZmluaXR5LFxuICAgICAgICBtO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgdGFuO1xuXG4gICAgcCA9IG0ubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBzdG9wKSB7XG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG0ueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG0ueSA/IGh4IDogcXgsIGh5LCBtLngsIG0ueSwgaHkgPCBtLnkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuICAgICAgICAgICAgaWYgKCh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIHAueCA+IG0ueCkpICYmIGxvY2FsbHlJbnNpZGUocCwgaG9sZSkpIHtcbiAgICAgICAgICAgICAgICBtID0gcDtcbiAgICAgICAgICAgICAgICB0YW5NaW4gPSB0YW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBtO1xufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgIHAucHJldlogPSBwLnByZXY7XG4gICAgICAgIHAubmV4dFogPSBwLm5leHQ7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgcC5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKHApO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIGRvIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHFTaXplID09PSAwIHx8ICFxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAueiA8PSBxLnopIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuICAgICAgICBpblNpemUgKj0gMjtcblxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIHNpemUgb2YgdGhlIGRhdGEgYm91bmRpbmcgYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpIC8gc2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpIC8gc2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LngpIGxlZnRtb3N0ID0gcDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gbGVmdG1vc3Q7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcbiAgICByZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXF1YWxzKGEsIGIpIHx8IGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcbiAgICAgICAgICAgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKTtcbn1cblxuLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xufVxuXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXG4gICAgICAgICAgIGFyZWEocDIsIHEyLCBwMSkgPiAwICE9PSBhcmVhKHAyLCBxMiwgcTEpID4gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG4vLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG4gICAgICAgIGFuID0gYS5uZXh0LFxuICAgICAgICBicCA9IGIucHJldjtcblxuICAgIGEubmV4dCA9IGI7XG4gICAgYi5wcmV2ID0gYTtcblxuICAgIGEyLm5leHQgPSBhbjtcbiAgICBhbi5wcmV2ID0gYTI7XG5cbiAgICBiMi5uZXh0ID0gYTI7XG4gICAgYTIucHJldiA9IGIyO1xuXG4gICAgYnAubmV4dCA9IGIyO1xuICAgIGIyLnByZXYgPSBicDtcblxuICAgIHJldHVybiBiMjtcbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgcC5wcmV2ID0gcDtcbiAgICAgICAgcC5uZXh0ID0gcDtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHAubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgcC5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xuICAgICAgICBsYXN0Lm5leHQgPSBwO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XG4gICAgcC5uZXh0LnByZXYgPSBwLnByZXY7XG4gICAgcC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cbiAgICBpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG4gICAgaWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcbiAgICAvLyB2ZXJ0aWNlIGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRpY2Ugbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vXG4vLyBXZSBzdG9yZSBvdXIgRUUgb2JqZWN0cyBpbiBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBgfmAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Qgb3ZlcnJpZGRlbiBvclxuLy8gdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy8gV2UgYWxzbyBhc3N1bWUgdGhhdCBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV2ZW50IG5hbWVcbi8vIGlzIGFuIEVTNiBTeW1ib2wuXG4vL1xudmFyIHByZWZpeCA9IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nID8gJ34nIDogZmFsc2U7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgRXZlbnRFbWl0dGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBDb250ZXh0IGZvciBmdW5jdGlvbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSBlbWl0IG9uY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTWluaW1hbCBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIEV2ZW50RW1pdHRlciBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7IC8qIE5vdGhpbmcgdG8gc2V0ICovIH1cblxuLyoqXG4gKiBIb2xkcyB0aGUgYXNzaWduZWQgRXZlbnRFbWl0dGVycyBieSBuYW1lLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBhc3NpZ25lZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBleGlzdHMgV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtBcnJheXxCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQsIGV4aXN0cykge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgYXZhaWxhYmxlID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChleGlzdHMpIHJldHVybiAhIWF2YWlsYWJsZTtcbiAgaWYgKCFhdmFpbGFibGUpIHJldHVybiBbXTtcbiAgaWYgKGF2YWlsYWJsZS5mbikgcmV0dXJuIFthdmFpbGFibGUuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXZhaWxhYmxlLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGF2YWlsYWJsZVtpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB0byBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJbmRpY2F0aW9uIGlmIHdlJ3ZlIGVtaXR0ZWQgYW4gZXZlbnQuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IEV2ZW50TGlzdGVuZXIgZm9yIHRoZSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0b259IGZuIENhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGQgYW4gRXZlbnRMaXN0ZW5lciB0aGF0J3Mgb25seSBjYWxsZWQgb25jZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IHRoaXMsIHRydWUpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKSB0aGlzLl9ldmVudHMgPSBwcmVmaXggPyB7fSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHRoaXMuX2V2ZW50c1tldnRdID0gbGlzdGVuZXI7XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5fZXZlbnRzW2V2dF0uZm4pIHRoaXMuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIGVsc2UgdGhpcy5fZXZlbnRzW2V2dF0gPSBbXG4gICAgICB0aGlzLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3ZSB3YW50IHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciB0aGF0IHdlIG5lZWQgdG8gZmluZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgT25seSByZW1vdmUgbGlzdGVuZXJzIG1hdGNoaW5nIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmNlIGxpc3RlbmVycy5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGV2ZW50cyA9IFtdO1xuXG4gIGlmIChmbikge1xuICAgIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgICAgbGlzdGVuZXJzLmZuICE9PSBmblxuICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzLm9uY2UpXG4gICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVycy5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm5cbiAgICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpXG4gICAgICAgICAgfHwgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gIC8vXG4gIGlmIChldmVudHMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbZXZ0XTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycyBvciBvbmx5IHRoZSBsaXN0ZW5lcnMgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvci5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcztcblxuICBpZiAoZXZlbnQpIGRlbGV0ZSB0aGlzLl9ldmVudHNbcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudF07XG4gIGVsc2UgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYXBwbHkgYW55bW9yZS5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLypqc2hpbnQgb25ldmFyOiBmYWxzZSwgaW5kZW50OjQgKi9cbi8qZ2xvYmFsIHNldEltbWVkaWF0ZTogZmFsc2UsIHNldFRpbWVvdXQ6IGZhbHNlLCBjb25zb2xlOiBmYWxzZSAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciByb290LCBwcmV2aW91c19hc3luYztcblxuICAgIHJvb3QgPSB0aGlzO1xuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgIHByZXZpb3VzX2FzeW5jID0gcm9vdC5hc3luYztcbiAgICB9XG5cbiAgICBhc3luYy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmFzeW5jID0gcHJldmlvdXNfYXN5bmM7XG4gICAgICAgIHJldHVybiBhc3luYztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb25seV9vbmNlKGZuKSB7XG4gICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGNhbGxlZCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseShyb290LCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIHZhciBfZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaV0sIGksIGFycik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIF9tYXAgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBpZiAoYXJyLm1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5tYXAoaXRlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih4LCBpLCBhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgdmFyIF9yZWR1Y2UgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBpZiAoYXJyLnJlZHVjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8pO1xuICAgICAgICB9XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICB2YXIgX2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIC8vLy8gZXhwb3J0ZWQgYXN5bmMgbW9kdWxlIGZ1bmN0aW9ucyAvLy8vXG5cbiAgICAvLy8vIG5leHRUaWNrIGltcGxlbWVudGF0aW9uIHdpdGggYnJvd3Nlci1jb21wYXRpYmxlIGZhbGxiYWNrIC8vLy9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICEocHJvY2Vzcy5uZXh0VGljaykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgICBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAvLyBub3QgYSBkaXJlY3QgYWxpYXMgZm9yIElFMTAgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBvbmx5X29uY2UoZG9uZSkgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaCA9IGFzeW5jLmVhY2g7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmICghYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgIHZhciBpdGVyYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA+PSBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2hTZXJpZXMgPSBhc3luYy5lYWNoU2VyaWVzO1xuXG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZm4gPSBfZWFjaExpbWl0KGxpbWl0KTtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgW2FyciwgaXRlcmF0b3IsIGNhbGxiYWNrXSk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPSBhc3luYy5lYWNoTGltaXQ7XG5cbiAgICB2YXIgX2VhY2hMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBpZiAoIWFyci5sZW5ndGggfHwgbGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmIHN0YXJ0ZWQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihhcnJbc3RhcnRlZCAtIDFdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBkb1BhcmFsbGVsID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZG9QYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24obGltaXQsIGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW19lYWNoTGltaXQobGltaXQpXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvU2VyaWVzID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hTZXJpZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuXG4gICAgdmFyIF9hc3luY01hcCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW3guaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX21hcExpbWl0KGxpbWl0KShhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHZhciBfbWFwTGltaXQgPSBmdW5jdGlvbihsaW1pdCkge1xuICAgICAgICByZXR1cm4gZG9QYXJhbGxlbExpbWl0KGxpbWl0LCBfYXN5bmNNYXApO1xuICAgIH07XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gaW5qZWN0IGFsaWFzXG4gICAgYXN5bmMuaW5qZWN0ID0gYXN5bmMucmVkdWNlO1xuICAgIC8vIGZvbGRsIGFsaWFzXG4gICAgYXN5bmMuZm9sZGwgPSBhc3luYy5yZWR1Y2U7XG5cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIC8vIGZvbGRyIGFsaWFzXG4gICAgYXN5bmMuZm9sZHIgPSBhc3luYy5yZWR1Y2VSaWdodDtcblxuICAgIHZhciBfZmlsdGVyID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZmlsdGVyID0gZG9QYXJhbGxlbChfZmlsdGVyKTtcbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcbiAgICAvLyBzZWxlY3QgYWxpYXNcbiAgICBhc3luYy5zZWxlY3QgPSBhc3luYy5maWx0ZXI7XG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID0gYXN5bmMuZmlsdGVyU2VyaWVzO1xuXG4gICAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIHZhciBfZGV0ZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5kZXRlY3QgPSBkb1BhcmFsbGVsKF9kZXRlY3QpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IGRvU2VyaWVzKF9kZXRlY3QpO1xuXG4gICAgYXN5bmMuc29tZSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGFueSBhbGlhc1xuICAgIGFzeW5jLmFueSA9IGFzeW5jLnNvbWU7XG5cbiAgICBhc3luYy5ldmVyeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbGwgYWxpYXNcbiAgICBhc3luYy5hbGwgPSBhc3luYy5ldmVyeTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChmbiksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aFxuICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB2YXIgYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGZuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0YXNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tXG4gICAgICAgICAgICBfZWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudCBmaW5hbCBjYWxsYmFjayBmcm9tIGNhbGxpbmcgaXRzZWxmIGlmIGl0IGVycm9yc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICB0aGVDYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2VhY2goa2V5cywgZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gX2lzQXJyYXkodGFza3Nba10pID8gdGFza3Nba106IFt0YXNrc1trXV07XG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2FmZVJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgX2VhY2goX2tleXMocmVzdWx0cyksIGZ1bmN0aW9uKHJrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW3JrZXldID0gcmVzdWx0c1tya2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3Agc3Vic2VxdWVudCBlcnJvcnMgaGl0dGluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIE1hdGguYWJzKHRhc2subGVuZ3RoIC0gMSkpIHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuICAgICAgICAvLyBVc2UgZGVmYXVsdHMgaWYgdGltZXMgbm90IHBhc3NlZFxuICAgICAgICBpZiAodHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgICAgICB0aW1lcyA9IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRpbWVzIGlzIGEgbnVtYmVyXG4gICAgICAgIHRpbWVzID0gcGFyc2VJbnQodGltZXMsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICB2YXIgd3JhcHBlZFRhc2sgPSBmdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICB2YXIgcmV0cnlBdHRlbXB0ID0gZnVuY3Rpb24odGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2hpbGUgKHRpbWVzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQodGFzaywgISh0aW1lcy09MSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IGNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQsIHJ1biB0aGlzIGFzIGEgY29udHJvbGwgZmxvd1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2tcbiAgICB9O1xuXG4gICAgYXN5bmMud2F0ZXJmYWxsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIV9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd3JhcEl0ZXJhdG9yID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2god3JhcEl0ZXJhdG9yKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gZnVuY3Rpb24oZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKF9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgZWFjaGZuLm1hcCh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgZWFjaGZuLmVhY2goX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBhc3luYy5tYXAsIGVhY2g6IGFzeW5jLmVhY2ggfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKHRhc2tzLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBfbWFwTGltaXQobGltaXQpLCBlYWNoOiBfZWFjaExpbWl0KGxpbWl0KSB9LCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGFzeW5jLm1hcFNlcmllcyh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhfa2V5cyh0YXNrcyksIGZ1bmN0aW9uIChrLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRhc2tzW2tdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIHZhciBtYWtlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbWFrZUNhbGxiYWNrKDApO1xuICAgIH07XG5cbiAgICBhc3luYy5hcHBseSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBfY29uY2F0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNiKSB7XG4gICAgICAgICAgICBmbih4LCBmdW5jdGlvbiAoZXJyLCB5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMud2hpbHN0KHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICh0ZXN0LmFwcGx5KG51bGwsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0ZXN0KCkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3luYy51bnRpbCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvVW50aWwgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICghdGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvVW50aWwoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICBxLnRhc2tzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbnVsbCxcbiAgICAgICAgICAgIGVtcHR5OiBudWxsLFxuICAgICAgICAgICAgZHJhaW46IG51bGwsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcS5kcmFpbiA9IG51bGw7XG4gICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghcS5wYXVzZWQgJiYgd29ya2VycyA8IHEuY29uY3VycmVuY3kgJiYgcS50YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBxLnRhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLmVtcHR5ICYmIHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4gJiYgcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyKHRhc2suZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHEuY29uY3VycmVuY3k7IHcrKykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICBlbmQgPSBzZXF1ZW5jZS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciBtaWQgPSBiZWcgKyAoKGVuZCAtIGJlZyArIDEpID4+PiAxKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKF9iaW5hcnlTZWFyY2gocS50YXNrcywgaXRlbSwgX2NvbXBhcmVUYXNrcykgKyAxLCAwLCBpdGVtKTtcblxuICAgICAgICAgICAgICBpZiAocS5zYXR1cmF0ZWQgJiYgcS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvblxuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5jYXJnbyA9IGZ1bmN0aW9uICh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHdvcmtpbmcgICAgID0gZmFsc2UsXG4gICAgICAgICAgICB0YXNrcyAgICAgICA9IFtdO1xuXG4gICAgICAgIHZhciBjYXJnbyA9IHtcbiAgICAgICAgICAgIHRhc2tzOiB0YXNrcyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgZHJhaW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX2VhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXJnby5kcmFpbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXJnby5zYXR1cmF0ZWQgJiYgdGFza3MubGVuZ3RoID09PSBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnby5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShjYXJnby5wcm9jZXNzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICAgICAgICAgIGlmICh3b3JraW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZihjYXJnby5kcmFpbiAmJiAhY2FyZ28uZHJhaW5lZCkgY2FyZ28uZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdHMgPSB0eXBlb2YgcGF5bG9hZCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRhc2tzLnNwbGljZSgwLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza3Muc3BsaWNlKDAsIHRhc2tzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZHMgPSBfbWFwKHRzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFzay5kYXRhO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoY2FyZ28uZW1wdHkpIGNhcmdvLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgd29ya2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2VyKGRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgX2VhY2godHMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNhcmdvO1xuICAgIH07XG5cbiAgICB2YXIgX2NvbnNvbGVfZm4gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy50aW1lcyA9IGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb3VudGVyID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY291bnRlci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luYy5tYXAoY291bnRlciwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwU2VyaWVzKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGF0LCBbZXJyXS5jb25jYXQocmVzdWx0cykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICByZXR1cm4gYXN5bmMuc2VxLmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIHZhciBfYXBwbHlFYWNoID0gZnVuY3Rpb24gKGVhY2hmbiwgZm5zIC8qYXJncy4uLiovKSB7XG4gICAgICAgIHZhciBnbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgZnVuY3Rpb24gKGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5hcHBseUVhY2ggPSBkb1BhcmFsbGVsKF9hcHBseUVhY2gpO1xuICAgIGFzeW5jLmFwcGx5RWFjaFNlcmllcyA9IGRvU2VyaWVzKF9hcHBseUVhY2gpO1xuXG4gICAgYXN5bmMuZm9yZXZlciA9IGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xuXG4gICAgLy8gTm9kZS5qc1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwidmFyIGFzeW5jICAgICAgID0gcmVxdWlyZSgnYXN5bmMnKSxcbiAgICB1cmxQYXJzZXIgICA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIFJlc291cmNlICAgID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBtdWx0aXBsZSByZXNvdXJjZXMgdG8gbG9hZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIGNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvZ3Jlc3MgcGVyY2VudCBvZiB0aGUgbG9hZGVyIGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogTG9hZGluZyBzdGF0ZSBvZiB0aGUgbG9hZGVyLCB0cnVlIGlmIGl0IGlzIGN1cnJlbnRseSBsb2FkaW5nIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0b3RhbCBwcm9ncmVzcyB0aGF0IGEgc2luZ2xlIHJlc291cmNlIHJlcHJlc2VudHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWlkZGxld2FyZSB0byBydW4gYmVmb3JlIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGFmdGVyIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9sb2FkUmVzb3VyY2VgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRMb2FkUmVzb3VyY2UgPSB0aGlzLl9sb2FkUmVzb3VyY2UuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uTG9hZGAgZnVuY3Rpb24gYm91bmQgd2l0aCB0aGlzIG9iamVjdCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uTG9hZCA9IHRoaXMuX29uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlIGJ1ZmZlciB0aGF0IGZpbGxzIHVudGlsIGBsb2FkYCBpcyBjYWxsZWQgdG8gc3RhcnQgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlW119XG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyID0gW107XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHRyYWNrIGxvYWQgY29tcGxldGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb3VyY2VzIHdhaXRpbmcgdG8gYmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX3F1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fYm91bmRMb2FkUmVzb3VyY2UsIGNvbmN1cnJlbmN5KTtcblxuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGlzIGxvYWRlciBrZXllZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgUmVzb3VyY2U+fVxuICAgICAqL1xuICAgIHRoaXMucmVzb3VyY2VzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCBvciBlcnJvcmVkIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgb25jZSBwZXIgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbG9hZGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdGFydFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHF1ZXVlZCByZXNvdXJjZXMgYWxsIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY29tcGxldGVcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuLyoqXG4gKiBBZGRzIGEgcmVzb3VyY2UgKG9yIG11bHRpcGxlIHJlc291cmNlcykgdG8gdGhlIGxvYWRlciBxdWV1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGEgd2lkZSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwYXJhbWV0ZXJzLiBUaGUgb25seSB0aGluZyB0aGF0IGlzIGFsd2F5c1xuICogcmVxdWlyZWQgdGhlIHVybCB0byBsb2FkLiBBbGwgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6XG4gKlxuICogYGBganNcbiAqIGxvYWRlclxuICogICAgIC8vIG5vcm1hbCBwYXJhbSBzeW50YXhcbiAqICAgICAuYWRkKCdrZXknLCAnaHR0cDovLy4uLicsIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJylcbiAqXG4gKiAgICAgLy8gb2JqZWN0IHN5bnRheFxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MicsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIG5hbWU6ICdrZXkzJyxcbiAqICAgICAgICAgdXJsOiAnaHR0cDovLy4uLidcbiAqICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge31cbiAqICAgICB9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwczovLy4uLicsXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9LFxuICogICAgICAgICBjcm9zc09yaWdpbjogdHJ1ZVxuICogICAgIH0pXG4gKlxuICogICAgIC8vIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJscyBvciBib3RoXG4gKiAgICAgLmFkZChbXG4gKiAgICAgICAgIHsgbmFtZTogJ2tleTQnLCB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgeyB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgJ2h0dHA6Ly8uLi4nXG4gKiAgICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAYWxpYXMgZW5xdWV1ZVxuICogQHBhcmFtIFtuYW1lXSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZCwgaWYgbm90IHBhc3NlZCB0aGUgdXJsIGlzIHVzZWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIHJlbGF0aXZlIHRvIHRoZSBiYXNlVXJsIG9mIHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcGFyYW0gW29wdGlvbnMuY3Jvc3NPcmlnaW5dIHtib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5YSFJfTE9BRF9UWVBFfSBIb3cgc2hvdWxkIHRoaXMgcmVzb3VyY2UgYmUgbG9hZGVkP1xuICogQHBhcmFtIFtvcHRpb25zLnhoclR5cGU9UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVF0ge1Jlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFfSBIb3cgc2hvdWxkIHRoZSBkYXRhIGJlaW5nXG4gKiAgICAgIGxvYWRlZCBiZSBpbnRlcnByZXRlZCB3aGVuIHVzaW5nIFhIUj9cbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMgc3BlY2lmaWMgcmVzb3VyY2UgY29tcGxldGVzIGxvYWRpbmcuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWRkID0gTG9hZGVyLnByb3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgb3B0aW9ucywgY2IpIHtcbiAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciB1cmxzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChuYW1lW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGlmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW5zdGVhZCBvZiBwYXJhbXNcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNiID0gdXJsIHx8IG5hbWUuY2FsbGJhY2sgfHwgbmFtZS5vbkNvbXBsZXRlO1xuICAgICAgICBvcHRpb25zID0gbmFtZTtcbiAgICAgICAgdXJsID0gbmFtZS51cmw7XG4gICAgICAgIG5hbWUgPSBuYW1lLm5hbWUgfHwgbmFtZS5rZXkgfHwgbmFtZS51cmw7XG4gICAgfVxuXG4gICAgLy8gY2FzZSB3aGVyZSBubyBuYW1lIGlzIHBhc3NlZCBzaGlmdCBhbGwgYXJncyBvdmVyIGJ5IG9uZS5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdXJsO1xuICAgICAgICB1cmwgPSBuYW1lO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IHdlIHNoaWZ0ZWQgbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9wZXIgdXJsLlxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVybCBwYXNzZWQgdG8gYWRkIHJlc291cmNlIHRvIGxvYWRlci4nKTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zIGFyZSBvcHRpb25hbCBzbyBwZW9wbGUgbWlnaHQgcGFzcyBhIGZ1bmN0aW9uIGFuZCBubyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW25hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzb3VyY2Ugd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBleGlzdHMuJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJhc2UgdXJsIGlmIHRoaXMgaXNuJ3QgYW4gYWJzb2x1dGUgdXJsXG4gICAgdXJsID0gdGhpcy5faGFuZGxlQmFzZVVybCh1cmwpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBzdG9yZSB0aGUgcmVzb3VyY2VcbiAgICB0aGlzLnJlc291cmNlc1tuYW1lXSA9IG5ldyBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlc291cmNlc1tuYW1lXS5vbmNlKCdhZnRlck1pZGRsZXdhcmUnLCBjYik7XG4gICAgfVxuXG4gICAgdGhpcy5fbnVtVG9Mb2FkKys7XG5cbiAgICAvLyBpZiBhbHJlYWR5IGxvYWRpbmcgYWRkIGl0IHRvIHRoZSB3b3JrZXIgcXVldWVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9ICgxMDAgLSB0aGlzLnByb2dyZXNzKSAvICh0aGlzLl9xdWV1ZS5sZW5ndGgoKSArIHRoaXMuX3F1ZXVlLnJ1bm5pbmcoKSk7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBidWZmZXIgaXQgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlIGxhdGVyXG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDEwMCAvIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5Mb2FkZXIucHJvdG90eXBlLl9oYW5kbGVCYXNlVXJsID0gZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBwYXJzZWRVcmwgPSB1cmxQYXJzZXIucGFyc2UodXJsKTtcblxuICAgIC8vIGFic29sdXRlIHVybCwganVzdCB1c2UgaXQgYXMgaXMuXG4gICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCB8fCBwYXJzZWRVcmwucGF0aG5hbWUuaW5kZXhPZignLy8nKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIC8vIGlmIGJhc2VVcmwgZG9lc24ndCBlbmQgaW4gc2xhc2ggYW5kIHVybCBkb2Vzbid0IHN0YXJ0IHdpdGggc2xhc2gsIHRoZW4gYWRkIGEgc2xhc2ggaW5iZXR3ZWVuXG4gICAgaWYgKFxuICAgICAgICB0aGlzLmJhc2VVcmwubGVuZ3RoICYmXG4gICAgICAgIHRoaXMuYmFzZVVybC5sYXN0SW5kZXhPZignLycpICE9PSB0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSAmJlxuICAgICAgICB1cmwuY2hhckF0KDApICE9PSAnLydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybCArICcvJyArIHVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmJlZm9yZSogdGhlXG4gKiByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKlxuICogQGFsaWFzIHByZVxuICogQHBhcmFtIG1pZGRsZXdhcmUge2Z1bmN0aW9ufSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5iZWZvcmUgPSBMb2FkZXIucHJvdG90eXBlLnByZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB1cCBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gdGhhdCB3aWxsIHJ1biAqYWZ0ZXIqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyB1c2VcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWZ0ZXIgPSBMb2FkZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZS5wdXNoKGZuKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHF1ZXVlIG9mIHRoZSBsb2FkZXIgdG8gcHJlcGFyZSBmb3IgYSBuZXcgbG9hZC5cbiAqXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gdGhpcy5iYXNlVXJsID0gYmFzZVVybCB8fCAnJztcblxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9ncmVzc0NodW5rID0gMDtcblxuICAgIC8vIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUubGVuZ3RoID0gMDtcbiAgICAvLyB0aGlzLl9hZnRlck1pZGRsZXdhcmUubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fbnVtVG9Mb2FkID0gMDtcblxuICAgIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgICB0aGlzLl9xdWV1ZS5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBTdGFydHMgbG9hZGluZyB0aGUgcXVldWVkIHJlc291cmNlcy5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgY29tcGxldGVgIGV2ZW50LlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAvLyByZWdpc3RlciBjb21wbGV0ZSBjYWxsYmFjayBpZiB0aGV5IHBhc3Mgb25lXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBxdWV1ZSBoYXMgYWxyZWFkeSBzdGFydGVkIHdlIGFyZSBkb25lIGhlcmVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBub3RpZnkgb2Ygc3RhcnRcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBzdGFydCB0aGUgaW50ZXJuYWwgcXVldWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMuX2J1ZmZlcltpXSk7XG4gICAgfVxuXG4gICAgLy8gZW1wdHkgdGhlIGJ1ZmZlclxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIExvYWRzIGEgc2luZ2xlIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc291cmNlID0gZnVuY3Rpb24gKHJlc291cmNlLCBkZXF1ZXVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmVzb3VyY2UuX2RlcXVldWUgPSBkZXF1ZXVlO1xuXG4gICAgdGhpcy5fcnVuTWlkZGxld2FyZShyZXNvdXJjZSwgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXNvdXJjZS5vbigncHJvZ3Jlc3MnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAncHJvZ3Jlc3MnKSk7XG5cbiAgICAgICAgcmVzb3VyY2UubG9hZChzZWxmLl9ib3VuZE9uTG9hZCk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbmNlIGVhY2ggcmVzb3VyY2UgaGFzIGxvYWRlZC5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX29uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMsIHRoaXMucmVzb3VyY2VzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGVhY2ggdGltZSBhIHJlc291cmNlcyBpcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAZmlyZXMgZXJyb3JcbiAqIEBmaXJlcyBsb2FkXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICB0aGlzLnByb2dyZXNzICs9IHRoaXMuX3Byb2dyZXNzQ2h1bms7XG5cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgcmVzb3VyY2UpO1xuXG4gICAgLy8gcnVuIG1pZGRsZXdhcmUsIHRoaXMgKm11c3QqIGhhcHBlbiBiZWZvcmUgZGVxdWV1ZSBzbyBzdWItYXNzZXRzIGdldCBhZGRlZCBwcm9wZXJseVxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2FmdGVyTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvdXJjZS5lbWl0KCdhZnRlck1pZGRsZXdhcmUnLCByZXNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5fbnVtVG9Mb2FkLS07XG5cbiAgICAgICAgLy8gZG8gY29tcGxldGlvbiBjaGVja1xuICAgICAgICBpZiAodGhpcy5fbnVtVG9Mb2FkID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgdGhpcy5fb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzb3VyY2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCByZXNvdXJjZS5lcnJvciwgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkJywgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG5cblxuICAgIC8vIHJlbW92ZSB0aGlzIHJlc291cmNlIGZyb20gdGhlIGFzeW5jIHF1ZXVlXG4gICAgcmVzb3VyY2UuX2RlcXVldWUoKTtcbn07XG5cbi8qKlxuICogUnVuIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9uIGEgcmVzb3VyY2UuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fcnVuTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZm5zLCBjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGFzeW5jLmVhY2hTZXJpZXMoZm5zLCBmdW5jdGlvbiAoZm4sIG5leHQpIHtcbiAgICAgICAgZm4uY2FsbChzZWxmLCByZXNvdXJjZSwgbmV4dCk7XG4gICAgfSwgY2IuYmluZCh0aGlzLCByZXNvdXJjZSkpO1xufTtcblxuTG9hZGVyLkxPQURfVFlQRSA9IFJlc291cmNlLkxPQURfVFlQRTtcbkxvYWRlci5YSFJfUkVBRFlfU1RBVEUgPSBSZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEU7XG5Mb2FkZXIuWEhSX1JFU1BPTlNFX1RZUEUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRTtcbiIsInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgX3VybCA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIC8vIHRlc3RzIGlzIENPUlMgaXMgc3VwcG9ydGVkIGluIFhIUiwgaWYgbm90IHdlIG5lZWQgdG8gdXNlIFhEUlxuICAgIHVzZVhkciA9ICEhKHdpbmRvdy5YRG9tYWluUmVxdWVzdCAmJiAhKCd3aXRoQ3JlZGVudGlhbHMnIGluIChuZXcgWE1MSHR0cFJlcXVlc3QoKSkpKSxcbiAgICB0ZW1wQW5jaG9yID0gbnVsbDtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRlZCBieVxuICogYSBzaW5nbGUgVVJMLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIG5hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd8c3RyaW5nW119IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIGZvciBhdWRpby92aWRlbyBsb2FkcyB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7c3RyaW5nfGJvb2xlYW59IElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IERlZmF1bHQgaXMgdG8gZGV0ZXJtaW5lIGF1dG9tYXRpY2FsbHkuXG4gKiBAcGFyYW0gW29wdGlvbnMubG9hZFR5cGU9UmVzb3VyY2UuTE9BRF9UWVBFLlhIUl0ge1Jlc291cmNlLkxPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW29wdGlvbnMubWV0YWRhdGFdIHtvYmplY3R9IEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmUuXG4gKi9cbmZ1bmN0aW9uIFJlc291cmNlKG5hbWUsIHVybCwgb3B0aW9ucykge1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBuYW1lIGFuZCB1cmwgYXJlIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgYSByZXNvdXJjZS4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdXJsIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgdXJsIGlzIGEgZGF0YSB1cmwuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNEYXRhVXJsID0gdGhpcy51cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnl9XG4gICAgICovXG4gICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jcm9zc09yaWdpbiA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnYW5vbnltb3VzJyA6IG9wdGlvbnMuY3Jvc3NPcmlnaW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIG9mIGxvYWRpbmcgdG8gdXNlIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2UuTE9BRF9UWVBFfVxuICAgICAqL1xuICAgIHRoaXMubG9hZFR5cGUgPSBvcHRpb25zLmxvYWRUeXBlIHx8IHRoaXMuX2RldGVybWluZUxvYWRUeXBlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSB1c2VkIHRvIGxvYWQgdGhlIHJlc291cmNlIHZpYSBYSFIuIElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy54aHJUeXBlID0gb3B0aW9ucy54aHJUeXBlO1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgaW5mbyBmb3IgbWlkZGxld2FyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgd2hpbGUgbG9hZGluZyAoaWYgYW55KS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Vycm9yfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFhIUiBvYmplY3QgdGhhdCB3YXMgdXNlZCB0byBsb2FkIHRoaXMgcmVzb3VyY2UuIFRoaXMgaXMgb25seSBzZXRcbiAgICAgKiB3aGVuIGBsb2FkVHlwZWAgaXMgYFJlc291cmNlLkxPQURfVFlQRS5YSFJgLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7WE1MSHR0cFJlcXVlc3R9XG4gICAgICovXG4gICAgdGhpcy54aHIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBqc29uLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0pzb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgeG1sLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1htbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhbiBpbWFnZSB0YWcuIE9ubHkgdmFsaWQgYWZ0ZXIgdGhlIHJlc291cmNlXG4gICAgICogaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gYXVkaW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0F1ZGlvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGEgdmlkZW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1ZpZGVvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGRlcXVldWVgIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBhIHN0b3JhZ2UgcGxhY2UgZm9yIHRoZSBhc3luYyBxdWV1ZSBkZXF1ZXVlIG1ldGhvZFxuICAgICAqIHVzZWQgcHJpdmF0ZWx5IGJ5IHRoZSBsb2FkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2RlcXVldWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBjb21wbGV0ZWAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kQ29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkVycm9yYCBmdW5jdGlvbiBib3VuZCB0byB0aGlzIHJlc291cmNlJ3MgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25Qcm9ncmVzc2AgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyA9IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcblxuICAgIC8vIHhociBjYWxsYmFja3NcbiAgICB0aGlzLl9ib3VuZFhock9uRXJyb3IgPSB0aGlzLl94aHJPbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYaHJPbkFib3J0ID0gdGhpcy5feGhyT25BYm9ydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25Mb2FkID0gdGhpcy5feGhyT25Mb2FkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYZHJPblRpbWVvdXQgPSB0aGlzLl94ZHJPblRpbWVvdXQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcmVzb3VyY2UgYmVpbmdzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGVhY2ggdGltZSBwcm9ncmVzcyBvZiB0aGlzIHJlc291cmNlIGxvYWQgdXBkYXRlcy5cbiAgICAgKiBOb3QgYWxsIHJlc291cmNlcyB0eXBlcyBhbmQgbG9hZGVyIHN5c3RlbXMgY2FuIHN1cHBvcnQgdGhpcyBldmVudFxuICAgICAqIHNvIHNvbWV0aW1lcyBpdCBtYXkgbm90IGJlIGF2YWlsYWJsZS4gSWYgdGhlIHJlc291cmNlXG4gICAgICogaXMgYmVpbmcgbG9hZGVkIG9uIGEgbW9kZXJuIGJyb3dzZXIsIHVzaW5nIFhIUiwgYW5kIHRoZSByZW1vdGUgc2VydmVyXG4gICAgICogcHJvcGVybHkgc2V0cyBDb250ZW50LUxlbmd0aCBoZWFkZXJzLCB0aGVuIHRoaXMgd2lsbCBiZSBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcHJvZ3Jlc3NcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgdGhpcyByZXNvdXJjZSBoYXMgbG9hZGVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaXQgd2lsbFxuICAgICAqIGJlIGluIHRoZSBgZXJyb3JgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xufVxuXG5SZXNvdXJjZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVzb3VyY2U7XG5tb2R1bGUuZXhwb3J0cyA9IFJlc291cmNlO1xuXG4vKipcbiAqIE1hcmtzIHRoZSByZXNvdXJjZSBhcyBjb21wbGV0ZS5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgaW4gYSB3cmFwcGVyIG9yIHNvbWV0aGluZy4uLmdyb3NzLi4uLlxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICAgIGlmICh0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvcik7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIub25lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25wcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbmxvYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBLaWNrcyBvZmYgbG9hZGluZyBvZiB0aGlzIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBzdGFydFxuICogQHBhcmFtIFtjYWxsYmFja10ge2Z1bmN0aW9ufSBPcHRpb25hbCBjYWxsYmFjayB0byBjYWxsIG9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBpZiBhIGNhbGxiYWNrIGlzIHNldCwgbGlzdGVuIGZvciBjb21wbGV0ZSBldmVudFxuICAgIGlmIChjYikge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4gPT09IGZhbHNlIHx8IHR5cGVvZiB0aGlzLmNyb3NzT3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdGhpcy5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4odGhpcy51cmwpO1xuICAgIH1cblxuICAgIHN3aXRjaCh0aGlzLmxvYWRUeXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEltYWdlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5BVURJTzpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuVklERU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlhIUjpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh1c2VYZHIgJiYgdGhpcy5jcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYZHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYaHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gSW1hZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuc3JjID0gdGhpcy51cmw7XG5cbiAgICB0aGlzLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEhUTUxBdWRpb0VsZW1lbnQgb3IgSFRNTFZpZGVvRWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJyAmJiB0eXBlb2YgQXVkaW8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBBdWRpbygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgJyArIHR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBDb2Nvb25KUyBDYW52YXMrIHJ1bnRpbWUsIGxhY2tzIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zcmMgPSBBcnJheS5pc0FycmF5KHRoaXMudXJsKSA/IHRoaXMudXJsWzBdIDogdGhpcy51cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51cmwubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWydpcycgKyB0eXBlWzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKV0gPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuXG4gICAgdGhpcy5kYXRhLmxvYWQoKTtcbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gWE1MSHR0cFJlcXVlc3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGhyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIHNldCB0aGUgcmVxdWVzdCB0eXBlIGFuZCB1cmxcbiAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gbG9hZCBqc29uIGFzIHRleHQgYW5kIHBhcnNlIGl0IG91cnNlbHZlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHNvbWUgYnJvd3NlcnNcbiAgICAvLyAqY291Z2gqIHNhZmFyaSAqY291Z2gqIGNhbid0IGRlYWwgd2l0aCBpdC5cbiAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OIHx8IHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gdGhpcy54aHJUeXBlO1xuICAgIH1cblxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvciwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQsIGZhbHNlKTtcblxuICAgIHhoci5zZW5kKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhEb21haW5SZXF1ZXN0LiBUaGlzIGlzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHN1cHBvcnQgSUU5IChncm9zcykuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGRyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGRyID0gdGhpcy54aHIgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcblxuICAgIC8vIFhEb21haW5SZXF1ZXN0IGhhcyBhIGZldyBxdWlya3MuIE9jY2FzaW9uYWxseSBpdCB3aWxsIGFib3J0IHJlcXVlc3RzXG4gICAgLy8gQSB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBtYWtlIHN1cmUgQUxMIGNhbGxiYWNrcyBhcmUgc2V0IGV2ZW4gaWYgbm90IHVzZWRcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTc4Njk2Ni94ZG9tYWlucmVxdWVzdC1hYm9ydHMtcG9zdC1vbi1pZS05XG4gICAgeGRyLnRpbWVvdXQgPSA1MDAwO1xuXG4gICAgeGRyLm9uZXJyb3IgPSB0aGlzLl9ib3VuZFhock9uRXJyb3I7XG4gICAgeGRyLm9udGltZW91dCA9IHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0O1xuICAgIHhkci5vbnByb2dyZXNzID0gdGhpcy5fYm91bmRPblByb2dyZXNzO1xuICAgIHhkci5vbmxvYWQgPSB0aGlzLl9ib3VuZFhock9uTG9hZDtcblxuICAgIHhkci5vcGVuKCdHRVQnLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyAgTm90ZTogVGhlIHhkci5zZW5kKCkgY2FsbCBpcyB3cmFwcGVkIGluIGEgdGltZW91dCB0byBwcmV2ZW50IGFuIGlzc3VlIHdpdGggdGhlIGludGVyZmFjZSB3aGVyZSBzb21lIHJlcXVlc3RzIGFyZSBsb3N0XG4gICAgLy8gIGlmIG11bHRpcGxlIFhEb21haW5SZXF1ZXN0cyBhcmUgYmVpbmcgc2VudCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIC8vIFNvbWUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2lzc3Vlcy8xMjQ4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHhkci5zZW5kKCk7XG4gICAgfSwgMCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzb3VyY2UgdXNlZCBpbiBsb2FkaW5nIHZpYSBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB0eXBlIHtzdHJpbmd9IFRoZSBlbGVtZW50IHR5cGUgKHZpZGVvIG9yIGF1ZGlvKS5cbiAqIEBwYXJhbSB1cmwge3N0cmluZ30gVGhlIHNvdXJjZSBVUkwgdG8gbG9hZCBmcm9tLlxuICogQHBhcmFtIFttaW1lXSB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIG9mIHRoZSB2aWRlb1xuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9jcmVhdGVTb3VyY2UgPSBmdW5jdGlvbiAodHlwZSwgdXJsLCBtaW1lKSB7XG4gICAgaWYgKCFtaW1lKSB7XG4gICAgICAgIG1pbWUgPSB0eXBlICsgJy8nICsgdXJsLnN1YnN0cih1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSB1cmw7XG4gICAgc291cmNlLnR5cGUgPSBtaW1lO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBlcnJvcnMgb3V0LlxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBlcnJvciBldmVudCBmcm9tIHRoZSBlbGVtZW50IHRoYXQgZW1pdHMgaXQuXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX29uRXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBlbGVtZW50IHVzaW5nICcgKyBldmVudC50YXJnZXQubm9kZU5hbWUpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBwcm9ncmVzcyBldmVudCBmaXJlcyBmb3IgeGhyL3hkci5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vblByb2dyZXNzID0gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB0aGlzLCBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYW4gZXJyb3IgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEVycm9yRXZlbnR8RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgcmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgZmFpbGVkLiAnICtcbiAgICAgICAgJ1N0YXR1czogJyArIHRoaXMueGhyLnN0YXR1cyArICcsIHRleHQ6IFwiJyArIHRoaXMueGhyLnN0YXR1c1RleHQgKyAnXCInXG4gICAgKTtcblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGFib3J0IGV2ZW50IGZpcmVzIGZvciB4aHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEFib3J0RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB3YXMgYWJvcnRlZCBieSB0aGUgdXNlci4nKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIHRpbWVvdXQgZXZlbnQgZmlyZXMgZm9yIHhkci5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94ZHJPblRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB0aW1lZCBvdXQuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBkYXRhIHN1Y2Nlc3NmdWxseSBsb2FkcyBmcm9tIGFuIHhoci94ZHIgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0TG9hZEV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHhociA9IHRoaXMueGhyLFxuICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzICE9PSB1bmRlZmluZWQgPyB4aHIuc3RhdHVzIDogMjAwOyAvL1hEUiBoYXMgbm8gYC5zdGF0dXNgLCBhc3N1bWUgMjAwLlxuXG4gICAgLy8gc3RhdHVzIGNhbiBiZSAwIHdoZW4gdXNpbmcgdGhlIGZpbGU6Ly8gcHJvdG9jb2wsIGFsc28gY2hlY2sgaWYgYSByZXNwb25zZSB3YXMgZm91bmRcbiAgICBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDQgfHwgKHN0YXR1cyA9PT0gMCAmJiB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIC8vIGlmIHRleHQsIGp1c3QgcmV0dXJuIGl0XG4gICAgICAgIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYganNvbiwgcGFyc2UgaW50byBqc29uIG9iamVjdFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT04pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSnNvbiA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIGpzb246JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgeG1sLCBwYXJzZSBpbnRvIGFuIHhtbCBkb2N1bWVudCBvciBkaXYgZWxlbWVudFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkaXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNYbWwgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSBsb2FkZWQgeG1sOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyIHR5cGVzIGp1c3QgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdbJyArIHhoci5zdGF0dXMgKyAnXScgKyB4aHIuc3RhdHVzVGV4dCArICc6JyArIHhoci5yZXNwb25zZVVSTCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gcmVxVHlwZSh4aHIpIHtcbiAgICByZXR1cm4geGhyLnRvU3RyaW5nKCkucmVwbGFjZSgnb2JqZWN0ICcsICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGZvciB0aGlzIHJlc291cmNlIGJhc2VkIG9uIGlmIHRoZSB1cmxcbiAqIGZvciB0aGlzIHJlc291cmNlIGlzIGNyb3NzLW9yaWdpbi4gSWYgY3Jvc3NPcmlnaW4gd2FzIG1hbnVhbGx5IHNldCwgdGhpc1xuICogZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgdG8gdGVzdC5cbiAqIEBwYXJhbSBbbG9jYXRpb249d2luZG93LmxvY2F0aW9uXSB7b2JqZWN0fSBUaGUgbG9jYXRpb24gb2JqZWN0IHRvIHRlc3QgYWdhaW5zdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNyb3NzT3JpZ2luIHZhbHVlIHRvIHVzZSAob3IgZW1wdHkgc3RyaW5nIGZvciBub25lKS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVDcm9zc09yaWdpbiA9IGZ1bmN0aW9uICh1cmwsIGxvYykge1xuICAgIC8vIGRhdGE6IGFuZCBqYXZhc2NyaXB0OiB1cmxzIGFyZSBjb25zaWRlcmVkIHNhbWUtb3JpZ2luXG4gICAgaWYgKHVybC5pbmRleE9mKCdkYXRhOicpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGlzIHdpbmRvdy5sb2NhdGlvblxuICAgIGxvYyA9IGxvYyB8fCB3aW5kb3cubG9jYXRpb247XG5cbiAgICBpZiAoIXRlbXBBbmNob3IpIHtcbiAgICAgICAgdGVtcEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG5cbiAgICAvLyBsZXQgdGhlIGJyb3dzZXIgZGV0ZXJtaW5lIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSB1cmwgb2YgdGhpcyByZXNvdXJjZSBhbmQgdGhlblxuICAgIC8vIHBhcnNlIHdpdGggdGhlIG5vZGUgdXJsIGxpYiwgd2UgY2FuJ3QgdXNlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICAgIC8vIGJlY2F1c2UgdGhleSBkb24ndCB3b3JrIGluIElFOSA6KFxuICAgIHRlbXBBbmNob3IuaHJlZiA9IHVybDtcbiAgICB1cmwgPSBfdXJsLnBhcnNlKHRlbXBBbmNob3IuaHJlZik7XG5cbiAgICB2YXIgc2FtZVBvcnQgPSAoIXVybC5wb3J0ICYmIGxvYy5wb3J0ID09PSAnJykgfHwgKHVybC5wb3J0ID09PSBsb2MucG9ydCk7XG5cbiAgICAvLyBpZiBjcm9zcyBvcmlnaW5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9PSBsb2MuaG9zdG5hbWUgfHwgIXNhbWVQb3J0IHx8IHVybC5wcm90b2NvbCAhPT0gbG9jLnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiAnYW5vbnltb3VzJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlc3BvbnNlVHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZVxuICogcmVzb3VyY2UgYmVpbmcgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHJlc3BvbnNlVHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lWGhyVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX3hoclR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZUxvYWRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZXNvdXJjZS5fbG9hZFR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLkxPQURfVFlQRS5YSFI7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2dldEV4dGVuc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcy51cmwsXG4gICAgICAgIGV4dDtcblxuICAgIGlmICh0aGlzLmlzRGF0YVVybCkge1xuICAgICAgICB2YXIgc2xhc2hJbmRleCA9IHVybC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGV4dCA9IHVybC5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEsIHVybC5pbmRleE9mKCc7Jywgc2xhc2hJbmRleCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXJ5U3RhcnQgPSB1cmwuaW5kZXhPZignPycpO1xuICAgICAgICBpZiAocXVlcnlTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dDtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWltZSB0eXBlIG9mIGFuIFhIUiByZXF1ZXN0IGJhc2VkIG9uIHRoZSByZXNwb25zZVR5cGUgb2ZcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIHRvIHVzZS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRNaW1lRnJvbVhoclR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1iaW5hcnknO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vYmxvYic7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veG1sJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT046XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVDpcbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUOlxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcblxuICAgIH1cbn07XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxvYWRpbmcgYSByZXNvdXJjZSBjYW4gdXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IExPQURfVFlQRVxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5YSFIgLSBVc2VzIFhNTEh0dHBSZXF1ZXN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5JTUFHRSAtIFVzZXMgYW4gYEltYWdlYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLkFVRElPIC0gVXNlcyBhbiBgQXVkaW9gIG9iamVjdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuVklERU8gLSBVc2VzIGEgYFZpZGVvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlLkxPQURfVFlQRSA9IHtcbiAgICBYSFI6ICAgIDEsXG4gICAgSU1BR0U6ICAyLFxuICAgIEFVRElPOiAgMyxcbiAgICBWSURFTzogIDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVBRFlfU1RBVEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuVU5TRU5UIC0gb3BlbigpaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLk9QRU5FRCAtIHNlbmQoKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5IRUFERVJTX1JFQ0VJVkVEIC0gc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIGhlYWRlcnMgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5MT0FESU5HIC0gRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLkRPTkUgLSBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5SZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEUgPSB7XG4gICAgVU5TRU5UOiAwLFxuICAgIE9QRU5FRDogMSxcbiAgICBIRUFERVJTX1JFQ0VJVkVEOiAyLFxuICAgIExPQURJTkc6IDMsXG4gICAgRE9ORTogNFxufTtcblxuLyoqXG4gKiBUaGUgWEhSIHJlYWR5IHN0YXRlcywgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IFhIUl9SRVNQT05TRV9UWVBFXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVCAtIGRlZmF1bHRzIHRvIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVIgLSBBcnJheUJ1ZmZlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkJMT0IgLSBCbG9iXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQgLSBEb2N1bWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkpTT04gLSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5URVhUIC0gU3RyaW5nXG4gKi9cblJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFID0ge1xuICAgIERFRkFVTFQ6ICAgICd0ZXh0JyxcbiAgICBCVUZGRVI6ICAgICAnYXJyYXlidWZmZXInLFxuICAgIEJMT0I6ICAgICAgICdibG9iJyxcbiAgICBET0NVTUVOVDogICAnZG9jdW1lbnQnLFxuICAgIEpTT046ICAgICAgICdqc29uJyxcbiAgICBURVhUOiAgICAgICAndGV4dCdcbn07XG5cblJlc291cmNlLl9sb2FkVHlwZU1hcCA9IHtcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3BuZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZWcnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3dlYnAnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRVxufTtcblxuUmVzb3VyY2UuX3hoclR5cGVNYXAgPSB7XG4gICAgLy8geG1sXG4gICAgJ3hodG1sJzogICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bWwnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3htbCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RteCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RzeCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3N2Zyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG5cbiAgICAvLyBpbWFnZXNcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2JtcCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RnYSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcblxuICAgIC8vIGpzb25cbiAgICAnanNvbic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OLFxuXG4gICAgLy8gdGV4dFxuICAgICd0ZXh0JzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQsXG4gICAgJ3R4dCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsb2FkIHR5cGUgdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGV4dG5hbWUge3N0cmluZ30gVGhlIGV4dGVuc2lvbiB0byBzZXQgdGhlIHR5cGUgZm9yLCBlLmcuIFwicG5nXCIgb3IgXCJmbnRcIlxuICogQHBhcmFtIGxvYWRUeXBlIHtSZXNvdXJjZS5MT0FEX1RZUEV9IFRoZSBsb2FkIHR5cGUgdG8gc2V0IGl0IHRvLlxuICovXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25Mb2FkVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCBsb2FkVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5fbG9hZFR5cGVNYXAsIGV4dG5hbWUsIGxvYWRUeXBlKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSB4aHJUeXBlIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHhociB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCB4aHJUeXBlKSB7XG4gICAgc2V0RXh0TWFwKFJlc291cmNlLl94aHJUeXBlTWFwLCBleHRuYW1lLCB4aHJUeXBlKTtcbn07XG5cbmZ1bmN0aW9uIHNldEV4dE1hcChtYXAsIGV4dG5hbWUsIHZhbCkge1xuICAgIGlmIChleHRuYW1lICYmIGV4dG5hbWUuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgIGV4dG5hbWUgPSBleHRuYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dG5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hcFtleHRuYW1lXSA9IHZhbDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICAgIF9rZXlTdHI6IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIixcblxuICAgIGVuY29kZUJpbmFyeTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBcIlwiO1xuICAgICAgICB2YXIgYnl0ZWJ1ZmZlcjtcbiAgICAgICAgdmFyIGVuY29kZWRDaGFySW5kZXhlcyA9IG5ldyBBcnJheSg0KTtcbiAgICAgICAgdmFyIGlueCA9IDA7XG4gICAgICAgIHZhciBqbnggPSAwO1xuICAgICAgICB2YXIgcGFkZGluZ0J5dGVzID0gMDtcblxuICAgICAgICB3aGlsZSAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBGaWxsIGJ5dGUgYnVmZmVyIGFycmF5XG4gICAgICAgICAgICBieXRlYnVmZmVyID0gbmV3IEFycmF5KDMpO1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBieXRlYnVmZmVyLmxlbmd0aDsgam54KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGF3YXkgaGlnaC1vcmRlciBieXRlLCBhcyBkb2N1bWVudGVkIGF0OlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdCNIYW5kbGluZ19iaW5hcnlfZGF0YVxuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSBpbnB1dC5jaGFyQ29kZUF0KGlueCsrKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGVhY2ggZW5jb2RlZCBjaGFyYWN0ZXIsIDYgYml0cyBhdCBhIHRpbWVcbiAgICAgICAgICAgIC8vIGluZGV4IDE6IGZpcnN0IDYgYml0c1xuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzBdID0gYnl0ZWJ1ZmZlclswXSA+PiAyO1xuICAgICAgICAgICAgLy8gaW5kZXggMjogc2Vjb25kIDYgYml0cyAoMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAxICsgNCBtb3N0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBieXRlIDIpXG4gICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMV0gPSAoKGJ5dGVidWZmZXJbMF0gJiAweDMpIDw8IDQpIHwgKGJ5dGVidWZmZXJbMV0gPj4gNCk7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiB0aGlyZCA2IGJpdHMgKDQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMiArIDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gKChieXRlYnVmZmVyWzFdICYgMHgwZikgPDwgMikgfCAoYnl0ZWJ1ZmZlclsyXSA+PiA2KTtcbiAgICAgICAgICAgIC8vIGluZGV4IDM6IGZvcnRoIDYgYml0cyAoNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gYnl0ZWJ1ZmZlclsyXSAmIDB4M2Y7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHBhZGRpbmcgaGFwcGVuZWQsIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgIHBhZGRpbmdCeXRlcyA9IGlueCAtIChpbnB1dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFkZGluZ0J5dGVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCAyIGNoYXJhY3RlcnMgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMl0gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBsYXN0IGNoYXJhY3RlciB0byBwYWRkaW5nIGNoYXJcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vIHBhZGRpbmcgLSBwcm9jZWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vdyB3ZSB3aWxsIGdyYWIgZWFjaCBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgb3V0IG9mIG91ciBrZXlzdHJpbmdcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIG91ciBpbmRleCBhcnJheSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQgc3RyaW5nXG4gICAgICAgICAgICBmb3IgKGpueCA9IDA7IGpueCA8IGVuY29kZWRDaGFySW5kZXhlcy5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHRoaXMuX2tleVN0ci5jaGFyQXQoZW5jb2RlZENoYXJJbmRleGVzW2pueF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9Mb2FkZXInKTtcblxubW9kdWxlLmV4cG9ydHMuUmVzb3VyY2UgPSByZXF1aXJlKCcuL1Jlc291cmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzLm1pZGRsZXdhcmUgPSB7XG4gICAgY2FjaGluZzoge1xuICAgICAgICBtZW1vcnk6IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnknKVxuICAgIH0sXG4gICAgcGFyc2luZzoge1xuICAgICAgICBibG9iOiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL3BhcnNpbmcvYmxvYicpXG4gICAgfVxufTtcbiIsIi8vIGEgc2ltcGxlIGluLW1lbW9yeSBjYWNoZSBmb3IgcmVzb3VyY2VzXG52YXIgY2FjaGUgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICAvLyBpZiBjYWNoZWQsIHRoZW4gc2V0IGRhdGEgYW5kIGNvbXBsZXRlIHRoZSByZXNvdXJjZVxuICAgICAgICBpZiAoY2FjaGVbcmVzb3VyY2UudXJsXSkge1xuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IGNhY2hlW3Jlc291cmNlLnVybF07XG4gICAgICAgICAgICByZXNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIG5vdCBjYWNoZWQsIHdhaXQgZm9yIGNvbXBsZXRlIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb3VyY2Uub25jZSgnY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICBjYWNoZVt0aGlzLnVybF0gPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgnLi4vLi4vUmVzb3VyY2UnKSxcbiAgICBiNjQgPSByZXF1aXJlKCcuLi8uLi9iNjQnKTtcblxud2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblxuLy8gYSBtaWRkbGV3YXJlIGZvciB0cmFuc2Zvcm1pbmcgWEhSIGxvYWRlZCBCbG9icyBpbnRvIG1vcmUgdXNlZnVsIG9iamVjdHNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIHdhcyBhbiBYSFIgbG9hZCBvZiBhIGJsb2JcbiAgICAgICAgaWYgKHJlc291cmNlLnhociAmJiByZXNvdXJjZS54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBibG9iIHN1cHBvcnQgd2UgcHJvYmFibHkgZ290IGEgYmluYXJ5IHN0cmluZyBiYWNrXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5CbG9iIHx8IHR5cGVvZiByZXNvdXJjZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVzb3VyY2UueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaW1hZ2UsIGNvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgaW50byBhIGRhdGEgdXJsXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgdHlwZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5zcmMgPSAnZGF0YTonICsgdHlwZSArICc7YmFzZTY0LCcgKyBiNjQuZW5jb2RlQmluYXJ5KHJlc291cmNlLnhoci5yZXNwb25zZVRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGltYWdlIGxvYWRzIGFuZCB0aGVuIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5vbmxvYWQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY29udGVudCB0eXBlIHNheXMgdGhpcyBpcyBhbiBpbWFnZSwgdGhlbiB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBibG9iIGludG8gYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvdXJjZS5kYXRhLnR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlc291cmNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuYmxvYiA9IHJlc291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gc3JjO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuaXNJbWFnZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBubyBsb25nZXIgdXNlZCBibG9iIGFmdGVyIHRoZSBpbWFnZSBsb2Fkc1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJwaXhpLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMC4xMC1kZXZcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlBpeGkuanMgaXMgYSBmYXN0IGxpZ2h0d2VpZ2h0IDJEIGxpYnJhcnkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGRldmljZXMuXCIsXG4gIFwiYXV0aG9yXCI6IFwiTWF0IEdyb3Zlc1wiLFxuICBcImNvbnRyaWJ1dG9yc1wiOiBbXG4gICAgXCJDaGFkIEVuZ2xlciA8Y2hhZEBwYW50aGVyZGV2LmNvbT5cIixcbiAgICBcIlJpY2hhcmQgRGF2ZXkgPHJkYXZleUBnbWFpbC5jb20+XCJcbiAgXSxcbiAgXCJtYWluXCI6IFwiLi9zcmMvaW5kZXguanNcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHA6Ly9nb29kYm95ZGlnaXRhbC5jb20vXCIsXG4gIFwiYnVnc1wiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXNcIixcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiZ3VscCAmJiBndWxwIHdhdGNoXCIsXG4gICAgXCJ0ZXN0XCI6IFwiZ3VscCAmJiB0ZXN0ZW0gY2lcIixcbiAgICBcImJ1aWxkXCI6IFwiZ3VscFwiLFxuICAgIFwiZG9jc1wiOiBcImpzZG9jIC1jIC4vZ3VscC91dGlsL2pzZG9jLmNvbmYuanNvbiAtUiBSRUFETUUubWRcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpbi9cIixcbiAgICBcInNyYy9cIixcbiAgICBcIkNPTlRSSUJVVElORy5tZFwiLFxuICAgIFwiTElDRU5TRVwiLFxuICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgXCJSRUFETUUubWRcIlxuICBdLFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhc3luY1wiOiBcIl4xLjUuMFwiLFxuICAgIFwiYnJmc1wiOiBcIl4xLjQuMVwiLFxuICAgIFwiZWFyY3V0XCI6IFwiXjIuMC43XCIsXG4gICAgXCJldmVudGVtaXR0ZXIzXCI6IFwiXjEuMS4xXCIsXG4gICAgXCJnbC1tYXRyaXhcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL3RvamkvZ2wtbWF0cml4LmdpdFwiLFxuICAgIFwib2JqZWN0LWFzc2lnblwiOiBcIl40LjAuMVwiLFxuICAgIFwicGl4aS1nbC1jb3JlXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9Hb29kQm95RGlnaXRhbC9waXhpLWdsLWNvcmUuZ2l0XCIsXG4gICAgXCJyZXNvdXJjZS1sb2FkZXJcIjogXCJeMS42LjRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjExLjEuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4zLjIuMFwiLFxuICAgIFwiZGVsXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOS4wXCIsXG4gICAgXCJndWxwLWNhY2hlZFwiOiBcIl4xLjEuMFwiLFxuICAgIFwiZ3VscC1jb25jYXRcIjogXCJeMi42LjBcIixcbiAgICBcImd1bHAtZGVidWdcIjogXCJeMi4xLjBcIixcbiAgICBcImd1bHAtaGVhZGVyXCI6IFwiXjEuNy4xXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjExLjJcIixcbiAgICBcImd1bHAtbWlycm9yXCI6IFwiXjAuNC4wXCIsXG4gICAgXCJndWxwLXBsdW1iZXJcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtcmVuYW1lXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJndWxwLXNvdXJjZW1hcHNcIjogXCJeMS41LjJcIixcbiAgICBcImd1bHAtdWdsaWZ5XCI6IFwiXjEuNC4xXCIsXG4gICAgXCJndWxwLXV0aWxcIjogXCJeMy4wLjZcIixcbiAgICBcImphZ3VhcmpzLWpzZG9jXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZHNoaW1qcy9qYWd1YXJqcy1qc2RvYy5naXRcIixcbiAgICBcImpzZG9jXCI6IFwiXjMuMy4yXCIsXG4gICAgXCJqc2hpbnQtc3VtbWFyeVwiOiBcIl4wLjQuMFwiLFxuICAgIFwibWluaW1pc3RcIjogXCJeMS4yLjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMy4yXCIsXG4gICAgXCJyZXF1aXJlLWRpclwiOiBcIl4wLjMuMFwiLFxuICAgIFwicnVuLXNlcXVlbmNlXCI6IFwiXjEuMS4yXCIsXG4gICAgXCJ0ZXN0ZW1cIjogXCJeMC45LjRcIixcbiAgICBcInZpbnlsLWJ1ZmZlclwiOiBcIl4xLjAuMFwiLFxuICAgIFwidmlueWwtc291cmNlLXN0cmVhbVwiOiBcIl4xLjEuMFwiLFxuICAgIFwid2F0Y2hpZnlcIjogXCJeMy40LjBcIlxuICB9LFxuICBcImJyb3dzZXJpZnlcIjoge1xuICAgIFwidHJhbnNmb3JtXCI6IFtcbiAgICAgIFwiYnJmc1wiXG4gICAgXVxuICB9XG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLy8gYWRkIHNvbWUgZXh0cmEgdmFyaWFibGVzIHRvIHRoZSBjb250YWluZXIuLlxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpXG4pO1xuXG5cbi8qKlxuICogVGhlIEFjY2Vzc2liaWxpdHkgbWFuYWdlciByZWFjcmVhdGVzIHRoZSBhYmlsaXR5IHRvIHRhYiBhbmQgYW5kIGhhdmUgY29udGVudCByZWFkIGJ5IHNjcmVlbiByZWFkZXJzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGFzIGl0IGNhbiBwb3NzaWJseSBoZWxwIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyBhY2Nlc3MgcGl4aSBjb250ZW50LlxuICogTXVjaCBsaWtlIGludGVyYWN0aW9uIGFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBtYWRlIGFjY2Vzc2libGUuIFRoaXMgbWFuYWdlciB3aWxsIG1hcCB0aGUgZXZlbnRzIGFzIGlmIHRoZSBtb3VzZSB3YXMgYmVpbmcgdXNlZCwgbWluaW1pemluZyB0aGUgZWZmZXJvdCByZXF1aXJlZCB0byBpbXBsZW1lbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqL1xuZnVuY3Rpb24gQWNjZXNzaWJpbGl0eU1hbmFnZXIocmVuZGVyZXIpXG57XG5cdC8vIGZpcnN0IHdlIGNyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFxuICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUubGVmdCA9IDA7XG4gICAvL1xuICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuICAgXHRcbiAgIFx0LyoqXG4gICBcdCAqIFRoaXMgaXMgdGhlIGRvbSBlbGVtZW50IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gICBcdHRoaXMuZGl2ID0gZGl2O1xuXG4gICBcdC8qKlxuICAgXHQgKiBBIHNpbXBsZSBwb29sIGZvciBzdG9yaW5nIGRpdnMuXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7QXJyYXl9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuIFx0dGhpcy5wb29sID0gW107XG5cbiBcdC8qKlxuIFx0ICogVGhpcyBpcyBhIHRpY2sgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHJlbmRlcmVkLlxuIFx0ICogXG4gXHQgKiBAdHlwZSB7TnVtYmVyfVxuIFx0ICogQHByaXZhdGVcbiBcdCAqL1xuICAgXHR0aGlzLnJlbmRlcklkID0gMDtcblxuICAgXHQvKipcbiAgIFx0ICogU2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB2aXN1YWxseSBzaG93IHRoZSBkaXZzXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgIFx0ICovXG4gICBcdHRoaXMuZGVidWcgPSBmYWxzZTtcblxuICBcdC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGFjY2Vzc2liaWxpdHkgbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgIFx0LyoqXG4gICAgICogVGhlIGFycmF5IG9mIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzaWJsZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHByZSBiaW5kIHRoZSBmdW5jdGlvbnMuLlxuICAgICAqL1xuICAgXHR0aGlzLl9vbktleURvd24gPSB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKTtcbiAgIFx0dGhpcy5fb25Nb3VzZU1vdmUgPSB0aGlzLl9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogc3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFuYWdlci4gSWYgdGhlcmUgYXJlIG5vIGFjY2Vzc2libGUgb2JqZWN0cyBvciB0aGUgbW91c2UgaXMgbW92aW5nIHRoZSB3aWxsIGJlIGZhbHNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cbiAgIFx0Ly8gbGV0IGxpc3RlbiBmb3IgdGFiLi4gb25jZSBwcmVzc2VkIHdlIGNhbiBmaXJlIHVwIGFuZCBzaG93IHRoZSBhY2Nlc3NpYmlsaXR5IGxheWVyXG4gICBcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG59XG5cblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xuXG4vKipcbiAqIEFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBzaG93bi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgcHJlc2VzIHRoZSB0YWIga2V5XG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHRydWUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub24oJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cblx0dGhpcy5yZW5kZXJlci52aWV3LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5kaXYpO1x0XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIGhpZGRlbi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgbW92ZXMgdGhlIG1vdXNlXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYoIXRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9mZigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlKTtcblxuXHR0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcblxufTtcblxuLyoqXG4gKiBUaGlzIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aWxsIHJ1biB0aHJvdWdodCBoZSBzY2VuZSBncmFwaCBhbmQgYWRkIGFueSBuZXcgYWNjZXNzaWJsZSBvYmplY3RzIHRvIHRoZSBET00gbGF5ZXIuXG4gKiBAcGFyYW0gZWxlbWVudCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgRGlzcGxheU9iamVjdCB0byBjaGVjay5cbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG5cdGlmKCFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZihkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGUgJiYgZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcblx0e1xuXHRcdGlmKCFkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlKVxuXHRcdHtcblx0XHRcdHRoaXMuYWRkQ2hpbGQoZGlzcGxheU9iamVjdCk7XG5cdFx0fVxuXHQgICBcdFxuXHQgICBcdGRpc3BsYXlPYmplY3QucmVuZGVySWQgPSB0aGlzLnJlbmRlcklkO1xuXHR9XG5cblx0dmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcblxuXHRmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcblx0XHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKGNoaWxkcmVuW2ldKTtcblx0fVxufTtcblxuXG4vKipcbiAqIEJlZm9yZSBlYWNoIHJlbmRlciB0aGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGRpdnMgYXJlIG1hcHBlZCBjb3JyZWN0bHkgdG8gdGhlaXIgRGlzcGxheU9iamVjdHNcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpXG57XG5cblx0Ly8gdXBkYXRlIGNoaWxkcmVuLi4uXG5cdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHModGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkKTtcblxuXHR2YXIgcmVjdCA9IHRoaXMucmVuZGVyZXIudmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0dmFyIHN4ID0gcmVjdC53aWR0aCAgLyB0aGlzLnJlbmRlcmVyLndpZHRoO1xuXHR2YXIgc3kgPSByZWN0LmhlaWdodCAvIHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuXG5cdHZhciBkaXYgPSB0aGlzLmRpdjtcblxuXHRkaXYuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICdweCc7XG5cdGRpdi5zdHlsZS50b3AgPSByZWN0LnRvcCArICdweCc7XG5cdGRpdi5zdHlsZS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggKyAncHgnO1xuXHRkaXYuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgKyAncHgnO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuXHRcdGlmKGNoaWxkLnJlbmRlcklkICE9PSB0aGlzLnJlbmRlcklkKVxuXHRcdHtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaSwgMSk7XG5cdFx0XHR0aGlzLmRpdi5yZW1vdmVDaGlsZCggY2hpbGQuX2FjY2Vzc2libGVEaXYgKTtcblx0XHRcdHRoaXMucG9vbC5wdXNoKGNoaWxkLl9hY2Nlc3NpYmxlRGl2KTtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlRGl2ID0gbnVsbDtcblxuXHRcdFx0aS0tO1xuXG5cdFx0XHRpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBtYXAgZGl2IHRvIGRpc3BsYXkuLlxuXHRcdFx0ZGl2ID0gY2hpbGQuX2FjY2Vzc2libGVEaXY7XG5cdFx0XHR2YXIgaGl0QXJlYSA9IGNoaWxkLmhpdEFyZWE7XG5cdFx0XHR2YXIgd3QgPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuXHRcdFx0aWYoY2hpbGQuaGl0QXJlYSlcblx0XHRcdHtcblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoKHd0LnR4ICsgKGhpdEFyZWEueCAqIHd0LmEpKSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKCh3dC50eSArIChoaXRBcmVhLnkgKiB3dC5kKSkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHd0LmEgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogd3QuZCAqIHN5KSArICdweCc7XG5cdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0aGl0QXJlYSA9IGNoaWxkLmdldEJvdW5kcygpO1xuXG5cdFx0XHRcdHRoaXMuY2FwSGl0QXJlYShoaXRBcmVhKTtcblxuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9IChoaXRBcmVhLnggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gIChoaXRBcmVhLnkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiBzeSkgKyAncHgnO1xuXHRcdFx0fVx0XHRcblx0XHR9XG5cdH1cblxuXHQvLyBpbmNyZW1lbnQgdGhlIHJlbmRlciBpZC4uXG5cdHRoaXMucmVuZGVySWQrKztcbn07XG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYXBIaXRBcmVhID0gZnVuY3Rpb24gKGhpdEFyZWEpXG57XG4gICAgaWYgKGhpdEFyZWEueCA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoICs9IGhpdEFyZWEueDtcbiAgICAgICAgaGl0QXJlYS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaGl0QXJlYS55IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ICs9IGhpdEFyZWEueTtcbiAgICAgICAgaGl0QXJlYS55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueCArIGhpdEFyZWEud2lkdGggPiB0aGlzLnJlbmRlcmVyLndpZHRoIClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoIC0gaGl0QXJlYS54O1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS55ICsgaGl0QXJlYS5oZWlnaHQgPiB0aGlzLnJlbmRlcmVyLmhlaWdodCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0IC0gaGl0QXJlYS55O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBBZGRzIGEgRGlzcGxheU9iamVjdCB0byB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuLy9cdHRoaXMuYWN0aXZhdGUoKTtcblx0XG5cdHZhciBkaXYgPSB0aGlzLnBvb2wucG9wKCk7XG5cblx0aWYoIWRpdilcblx0e1xuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBcblxuXHQgICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGVidWcgPyAncmdiYSgyNTUsMCwwLDAuNSknIDogJ3RyYW5zcGFyZW50Jztcblx0ICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdCAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcblx0ICAgIGRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdub25lJztcblxuXHQgICAgXG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX29uRm9jdXNPdXQuYmluZCh0aGlzKSk7XG5cdH1cblx0ICAgXHRcblxuXG5cblx0ZGl2LnRpdGxlID0gZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlVGl0bGUgfHwgJ2Rpc3BsYXlPYmplY3QgJyArIHRoaXMudGFiSW5kZXg7XG5cblx0Ly9cblx0XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUgPSB0cnVlO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ID0gZGl2O1xuXHRkaXYuZGlzcGxheU9iamVjdCA9IGRpc3BsYXlPYmplY3Q7XG5cblxuXHR0aGlzLmNoaWxkcmVuLnB1c2goZGlzcGxheU9iamVjdCk7XG5cdHRoaXMuZGl2LmFwcGVuZENoaWxkKCBkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ICk7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYudGFiSW5kZXggPSBkaXNwbGF5T2JqZWN0LnRhYkluZGV4O1xufTtcblxuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBidXR0b24gcHJlc3MgdG8gcGl4aSdzIEludGVyYWN0aW9uTWFuYWdlciAoY2xpY2spXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnY2xpY2snLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3ZlcilcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1cyA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3V0KVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzT3V0ID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uS2V5RG93biA9IGZ1bmN0aW9uKGUpXG57XG5cdGlmKGUua2V5Q29kZSAhPT0gOSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuYWN0aXZhdGUoKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmUgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZGVhY3RpdmF0ZSgpO1xufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgXG57XG5cdHRoaXMuZGl2ID0gbnVsbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblx0XHR0aGlzLmNoaWxkcmVuW2ldLmRpdiA9IG51bGw7XG5cdH1cblxuXHRcblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuXHRcdFxuXHR0aGlzLnBvb2wgPSBudWxsO1xuXHR0aGlzLmNoaWxkcmVuID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5cbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYWNjZXNzaWJsZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmFjY2Vzc2liaWxpdHkuYWNjZXNzaWJsZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgYWNjZXNzaWJsZVRhcmdldCA9IHtcbiAgICBcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGVUaXRsZTpudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICB0YWJJbmRleDowLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZUFjdGl2ZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVEaXY6ZmFsc2VcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBhY2Nlc3NpYmxlVGFyZ2V0O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgYWNjZXNzaWJpbGl0eSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYWNjZXNzaWJsZVRhcmdldDogICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpLFxuICAgIEFjY2Vzc2liaWxpdHlNYW5hZ2VyOiByZXF1aXJlKCcuL0FjY2Vzc2liaWxpdHlNYW5hZ2VyJylcbn07XG4iLCIvKipcbiAqIENvbnN0YW50IHZhbHVlcyB1c2VkIGluIHBpeGlcbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG52YXIgQ09OU1QgPSB7XG4gICAgLyoqXG4gICAgICogU3RyaW5nIG9mIHRoZSBjdXJyZW50IFBJWEkgdmVyc2lvblxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBWRVJTSU9OXG4gICAgICovXG4gICAgVkVSU0lPTjogcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQSV8yIC0gVHdvIFBpXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFBJXzI6IE1hdGguUEkgKiAyLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJBRF9UT19ERUcgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyByYWRpYW5zIHRvIGRlZ3JlZXNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUkFEX1RPX0RFRzogMTgwIC8gTWF0aC5QSSxcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBERUdfVE9fUkFEIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgZGVncmVlcyB0byByYWRpYW5zXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIERFR19UT19SQUQ6IE1hdGguUEkgLyAxODAsXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgZnJhbWVzIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gVEFSR0VUX0ZQTVM9MC4wNlxuICAgICAqL1xuICAgIFRBUkdFVF9GUE1TOiAwLjA2LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgdG8gaWRlbnRpZnkgdGhlIFJlbmRlcmVyIFR5cGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFJFTkRFUkVSX1RZUEVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuV0VCR0xcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5DQU5WQVNcbiAgICAgKi9cbiAgICBSRU5ERVJFUl9UWVBFOiB7XG4gICAgICAgIFVOS05PV046ICAgIDAsXG4gICAgICAgIFdFQkdMOiAgICAgIDEsXG4gICAgICAgIENBTlZBUzogICAgIDJcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyBibGVuZCBtb2RlcyBzdXBwb3J0ZWQgYnkgUElYSS4gSU1QT1JUQU5UIC0gVGhlIFdlYkdMIHJlbmRlcmVyIG9ubHkgc3VwcG9ydHNcbiAgICAgKiB0aGUgTk9STUFMLCBBREQsIE1VTFRJUExZIGFuZCBTQ1JFRU4gYmxlbmQgbW9kZXMuIEFueXRoaW5nIGVsc2Ugd2lsbCBzaWxlbnRseSBhY3QgbGlrZVxuICAgICAqIE5PUk1BTC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gQkxFTkRfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkFERFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5NVUxUSVBMWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQ1JFRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuT1ZFUkxBWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5EQVJLRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTElHSFRFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9ET0RHRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9CVVJOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhBUkRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU09GVF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5ESUZGRVJFTkNFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkVYQ0xVU0lPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IVUVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0FUVVJBVElPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MVU1JTk9TSVRZXG4gICAgICovXG4gICAgQkxFTkRfTU9ERVM6IHtcbiAgICAgICAgTk9STUFMOiAgICAgICAgIDAsXG4gICAgICAgIEFERDogICAgICAgICAgICAxLFxuICAgICAgICBNVUxUSVBMWTogICAgICAgMixcbiAgICAgICAgU0NSRUVOOiAgICAgICAgIDMsXG4gICAgICAgIE9WRVJMQVk6ICAgICAgICA0LFxuICAgICAgICBEQVJLRU46ICAgICAgICAgNSxcbiAgICAgICAgTElHSFRFTjogICAgICAgIDYsXG4gICAgICAgIENPTE9SX0RPREdFOiAgICA3LFxuICAgICAgICBDT0xPUl9CVVJOOiAgICAgOCxcbiAgICAgICAgSEFSRF9MSUdIVDogICAgIDksXG4gICAgICAgIFNPRlRfTElHSFQ6ICAgICAxMCxcbiAgICAgICAgRElGRkVSRU5DRTogICAgIDExLFxuICAgICAgICBFWENMVVNJT046ICAgICAgMTIsXG4gICAgICAgIEhVRTogICAgICAgICAgICAxMyxcbiAgICAgICAgU0FUVVJBVElPTjogICAgIDE0LFxuICAgICAgICBDT0xPUjogICAgICAgICAgMTUsXG4gICAgICAgIExVTUlOT1NJVFk6ICAgICAxNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIHdlYmdsIGRyYXcgbW9kZXMuIFRoZXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggR0wgZHJhd01vZGUgdG8gdXNlXG4gICAgICogdW5kZXIgY2VydGFpbiBzaXR1YXRpb25zIGFuZCByZW5kZXJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5QT0lOVFNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfTE9PUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX0ZBTlxuICAgICAqL1xuICAgIERSQVdfTU9ERVM6IHtcbiAgICAgICAgUE9JTlRTOiAgICAgICAgIDAsXG4gICAgICAgIExJTkVTOiAgICAgICAgICAxLFxuICAgICAgICBMSU5FX0xPT1A6ICAgICAgMixcbiAgICAgICAgTElORV9TVFJJUDogICAgIDMsXG4gICAgICAgIFRSSUFOR0xFUzogICAgICA0LFxuICAgICAgICBUUklBTkdMRV9TVFJJUDogNSxcbiAgICAgICAgVFJJQU5HTEVfRkFOOiAgIDZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBwaXhpLlxuICAgICAqXG4gICAgICogVGhlIERFRkFVTFQgc2NhbGUgbW9kZSBhZmZlY3RzIHRoZSBkZWZhdWx0IHNjYWxpbmcgbW9kZSBvZiBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAgKiBJdCBjYW4gYmUgcmUtYXNzaWduZWQgdG8gZWl0aGVyIExJTkVBUiBvciBORUFSRVNULCBkZXBlbmRpbmcgdXBvbiBzdWl0YWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0NBTEVfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuREVGQVVMVD1MSU5FQVJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTElORUFSIFNtb290aCBzY2FsaW5nXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLk5FQVJFU1QgUGl4ZWxhdGluZyBzY2FsaW5nXG4gICAgICovXG4gICAgU0NBTEVfTU9ERVM6IHtcbiAgICAgICAgREVGQVVMVDogICAgMCxcbiAgICAgICAgTElORUFSOiAgICAgMCxcbiAgICAgICAgTkVBUkVTVDogICAgMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZml4IHRoYXQgZGVub3RlcyBhIFVSTCBpcyBmb3IgYSByZXRpbmEgYXNzZXRcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gUkVUSU5BX1BSRUZJWFxuICAgICAqL1xuICAgIC8vZXhhbXBsZTogJ0AyeCcsXG4gICAgUkVUSU5BX1BSRUZJWDogL0AoLispeC8sXG5cbiAgICBSRVNPTFVUSU9OOjEsXG5cbiAgICBGSUxURVJfUkVTT0xVVElPTjoxLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgcmVuZGVyIG9wdGlvbnMgaWYgbm9uZSBhcmUgc3VwcGxpZWQgdG8ge0BsaW5rIFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKiBvciB7QGxpbmsgUElYSS5DYW52YXNSZW5kZXJlcn0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERFRkFVTFRfUkVOREVSX09QVElPTlNcbiAgICAgKiBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnZpZXc9bnVsbFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy50cmFuc3BhcmVudD1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hbnRpYWxpYXM9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuZm9yY2VGWEFBPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnJlc29sdXRpb249MVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmF1dG9SZXNpemU9ZmFsc2VcbiAgICAgKi9cbiAgICBERUZBVUxUX1JFTkRFUl9PUFRJT05TOiB7XG4gICAgICAgIHZpZXc6IG51bGwsXG4gICAgICAgIHJlc29sdXRpb246IDEsXG4gICAgICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgICAgIGZvcmNlRlhBQTogZmFsc2UsXG4gICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgIGNsZWFyQmVmb3JlUmVuZGVyOiB0cnVlLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgICAgICByb3VuZFBpeGVsczogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnRzIHRoYXQgaWRlbnRpZnkgc2hhcGVzLCBtYWlubHkgdG8gcHJldmVudCBgaW5zdGFuY2VvZmAgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFU1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUE9MWT0wXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SRUNUPTFcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkNJUkM9MlxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuRUxJUD0zXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SUkVDPTRcbiAgICAgKi9cbiAgICBTSEFQRVM6IHtcbiAgICAgICAgUE9MWTogMCxcbiAgICAgICAgUkVDVDogMSxcbiAgICAgICAgQ0lSQzogMixcbiAgICAgICAgRUxJUDogMyxcbiAgICAgICAgUlJFQzogNFxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBtYXliZSBjaGFuZ2UgdG8gU1BSSVRFLkJBVENIX1NJWkU6IDIwMDBcbiAgICAvLyBUT0RPOiBtYXliZSBhZGQgUEFSVElDTEUuQkFUQ0hfU0laRTogMTUwMDBcbiAgICBTUFJJVEVfQkFUQ0hfU0laRTogMjAwMCAvL25pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSBhbmQgZGVza3RvcCBtYWNoaW5lc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDT05TVDtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gcmVxdWlyZSgnLi9EaXNwbGF5T2JqZWN0JyksXG4gICAgUmVuZGVyVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgQ29udGFpbmVyIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0cy5cbiAqIEl0IGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBkaXNwbGF5IG9iamVjdHMgdGhhdCBhY3QgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIG9iamVjdHMuXG4gKlxuICpgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiBgYGBcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5EaXNwbGF5T2JqZWN0XG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDb250YWluZXIoKVxue1xuICAgIERpc3BsYXlPYmplY3QuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdFtdfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERpc3BsYXlPYmplY3QucHJvdG90eXBlKTtcbkNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5lcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udGFpbmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gMTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIGhlaWdodCA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBPdmVycmlkYWJsZSBtZXRob2QgdGhhdCBjYW4gYmUgdXNlZCBieSBDb250YWluZXIgc3ViY2xhc3NlcyB3aGVuZXZlciB0aGUgY2hpbGRyZW4gYXJyYXkgaXMgbW9kaWZpZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7fTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lci5cbiAqIFxuICogWW91IGNhbiBhbHNvIGFkZCBtdWx0cGxlIGl0ZW1zIGxpa2Ugc286IG15Q29udGFpbmVyLmFkZENoaWxkKHRoaW5rT25lLCB0aGluZ1R3bywgdGhpbmdUaHJlZSlcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBhZGQgdG8gdGhlIGNvbnRhaW5lclxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57IFxuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaGFzIGEgcGFyZW50IHRoZW4gbGV0cyByZW1vdmUgaXQgYXMgUGl4aSBvYmplY3RzIGNhbiBvbmx5IGV4aXN0IGluIG9uZSBwbGFjZVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UodGhpcy5jaGlsZHJlbi5sZW5ndGgtMSk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lciBhdCBhIHNwZWNpZmllZCBpbmRleC4gSWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd25cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRvIGFkZFxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBwbGFjZSB0aGUgY2hpbGQgaW5cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkQXQgPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hpbGQgKyAnYWRkQ2hpbGRBdDogVGhlIGluZGV4ICcrIGluZGV4ICsnIHN1cHBsaWVkIGlzIG91dCBvZiBib3VuZHMgJyArIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiAyIERpc3BsYXkgT2JqZWN0cyB3aXRoaW4gdGhpcyBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKiBAcGFyYW0gY2hpbGQyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc3dhcENoaWxkcmVuID0gZnVuY3Rpb24gKGNoaWxkLCBjaGlsZDIpXG57XG4gICAgaWYgKGNoaWxkID09PSBjaGlsZDIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluZGV4MSA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG4gICAgdmFyIGluZGV4MiA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZDIpO1xuXG4gICAgaWYgKGluZGV4MSA8IDAgfHwgaW5kZXgyIDwgMClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3dhcENoaWxkcmVuOiBCb3RoIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0cyBtdXN0IGJlIGNoaWxkcmVuIG9mIHRoZSBjYWxsZXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDFdID0gY2hpbGQyO1xuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgyXSA9IGNoaWxkO1xuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleDEgPCBpbmRleDIgPyBpbmRleDEgOiBpbmRleDIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBwb3NpdGlvbiBvZiBhIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgdG8gaWRlbnRpZnlcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdCB0byBpZGVudGlmeVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiBhbiBleGlzdGluZyBjaGlsZCBpbiB0aGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIGZvciB3aGljaCB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGluZGV4IG51bWJlclxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSByZXN1bHRpbmcgaW5kZXggbnVtYmVyIGZvciB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuXG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgY3VycmVudEluZGV4LCAxKTsgLy8gcmVtb3ZlIGZyb20gb2xkIHBvc2l0aW9uXG4gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsgLy9hZGQgYXQgbmV3IHBvc2l0aW9uXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBhdFxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgYXQgdGhlIGdpdmVuIGluZGV4LCBpZiBhbnkuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDaGlsZEF0OiBTdXBwbGllZCBpbmRleCAnICsgaW5kZXggKyAnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjaGlsZCBsaXN0LCBvciB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baW5kZXhdO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW1vdmVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIHNwZWNpZmllZCBpbmRleCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgZnJvbVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIHZhciBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRBdChpbmRleCk7XG5cbiAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIGNvbnRhaW5lciB0aGF0IGFyZSB3aXRoaW4gdGhlIGJlZ2luIGFuZCBlbmQgaW5kZXhlcy5cbiAqXG4gKiBAcGFyYW0gYmVnaW5JbmRleCB7bnVtYmVyfSBUaGUgYmVnaW5uaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gKiBAcGFyYW0gZW5kSW5kZXgge251bWJlcn0gVGhlIGVuZGluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzaXplIG9mIHRoZSBjb250YWluZXIuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbiAoYmVnaW5JbmRleCwgZW5kSW5kZXgpXG57XG4gICAgdmFyIGJlZ2luID0gYmVnaW5JbmRleCB8fCAwO1xuICAgIHZhciBlbmQgPSB0eXBlb2YgZW5kSW5kZXggPT09ICdudW1iZXInID8gZW5kSW5kZXggOiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgcmFuZ2UgPSBlbmQgLSBiZWdpbjtcbiAgICB2YXIgcmVtb3ZlZCwgaTtcblxuICAgIGlmIChyYW5nZSA+IDAgJiYgcmFuZ2UgPD0gZW5kKVxuICAgIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGJlZ2luLCByYW5nZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0ucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShiZWdpbkluZGV4KTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZ2UgPT09IDAgJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyZW1vdmVDaGlsZHJlbjogbnVtZXJpYyB2YWx1ZXMgYXJlIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UuJyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIgZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSBmYWxzZTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkNvbnRhaW5lci5wcm90b3R5cGUuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtID0gQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIHRoZSBib3VuZHMgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCB0aGlzIHJlbmRlciBzZXNzaW9uIHNvIHJldHVybiB3aGF0IHdlIGhhdmVcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgY2hpbGRCb3VuZHM7XG4gICAgICAgIHZhciBjaGlsZE1heFg7XG4gICAgICAgIHZhciBjaGlsZE1heFk7XG5cbiAgICAgICAgdmFyIGNoaWxkVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgY2hpbGRCb3VuZHMgPSB0aGlzLmNoaWxkcmVuW2ldLmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBtaW5YID0gbWluWCA8IGNoaWxkQm91bmRzLnggPyBtaW5YIDogY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIG1pblkgPSBtaW5ZIDwgY2hpbGRCb3VuZHMueSA/IG1pblkgOiBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBjaGlsZE1heFggPSBjaGlsZEJvdW5kcy53aWR0aCArIGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICBjaGlsZE1heFkgPSBjaGlsZEJvdW5kcy5oZWlnaHQgKyBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBtYXhYID0gbWF4WCA+IGNoaWxkTWF4WCA/IG1heFggOiBjaGlsZE1heFg7XG4gICAgICAgICAgICBtYXhZID0gbWF4WSA+IGNoaWxkTWF4WSA/IG1heFkgOiBjaGlsZE1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkVmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJHZXRCb3VuZHMgPSBDb250YWluZXIucHJvdG90eXBlLmdldEJvdW5kcztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5vbi1nbG9iYWwgbG9jYWwgYm91bmRzIG9mIHRoZSBDb250YWluZXIgYXMgYSByZWN0YW5nbGUuXG4gKiBUaGUgY2FsY3VsYXRpb24gdGFrZXMgYWxsIHZpc2libGUgY2hpbGRyZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4Q2FjaGUgPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdGguTWF0cml4LklERU5USVRZO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdHJpeENhY2hlO1xuXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMoIG1hdGguTWF0cml4LklERU5USVRZICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICBcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpLCBqO1xuXG4gICAgLy8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyBlbGVtZW50IGhhcyBhIG1hc2sgb3IgYSBmaWx0ZXIuXG4gICAgaWYgKHRoaXMuX21hc2sgfHwgdGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuXG4gICAgICAgIC8vIHB1c2ggZmlsdGVyIGZpcnN0IGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyBjb3JyZWN0IGZvciBhbnkgbWFza2luZ1xuICAgICAgICBpZiAodGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRoaXMsIHRoaXMuX2ZpbHRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnB1c2hNYXNrKHRoaXMsIHRoaXMuX21hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgLy8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBiYXRjaCwgb25seSByZW5kZXJlZCBpZiBpdCBoYXMgYSB0ZXh0dXJlLlxuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIG1ha2Ugc3VyZSB0aGV5IGdldCByZW5kZXJlZFxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmlsdGVycylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gc2ltcGxlIHJlbmRlciBjaGlsZHJlbiFcbiAgICAgICAgZm9yIChpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnJlbmRlcldlYkdMKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3ViY2xhc3NcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyB0aGlzIGlzIHdoZXJlIGNvbnRlbnQgaXRzZWxmIGdldHMgcmVuZGVyZWQuLi5cbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpc1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMuYWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcy5fbWFzaywgcmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlckNhbnZhcyhyZW5kZXJlcik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFzaylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2socmVuZGVyZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcbntcbiAgICBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBpZiAoZGVzdHJveUNoaWxkcmVuKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KGRlc3Ryb3lDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9UcmFuc2Zvcm0nKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgIF90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgdGhhdCBhcmUgcmVuZGVyZWQgb24gdGhlIHNjcmVlbi5cbiAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvbiBpdHMgb3duIHJhdGhlciBpdCBzaG91bGQgYmUgZXh0ZW5kZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIERpc3BsYXlPYmplY3QoKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29vcmRpbmF0ZSBvZiB0aGUgb2JqZWN0IHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy50cmFuc2Zvcm0ucG9zaXRpb247XG4gICAvLyB0aGlzLl9wb3NpdGlvbiA9IG5ldyBDYWNoZVBvaW50KHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIGZhY3RvciBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlID0gdGhpcy50cmFuc2Zvcm0uc2NhbGVcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXZvdCBwb2ludCBvZiB0aGUgZGlzcGxheU9iamVjdCB0aGF0IGl0IHJvdGF0ZXMgYXJvdW5kXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucGl2b3QgPSB0aGlzLnRyYW5zZm9ybS5waXZvdFxuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2tldyBmYWN0b3IgZm9yIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5za2V3ID0gdGhpcy50cmFuc2Zvcm0uc2tld1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9yb3RhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BhY2l0eSBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpc2liaWxpdHkgb2YgdGhlIG9iamVjdC4gSWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biwgYW5kXG4gICAgICogdGhlIHVwZGF0ZVRyYW5zZm9ybSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDYW4gdGhpcyBvYmplY3QgYmUgcmVuZGVyZWQsIGlmIGZhbHNlIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgZHJhd24gYnV0IHRoZSB1cGRhdGVUcmFuc2Zvcm1cbiAgICAgKiBtZXRob2RzIHdpbGwgc3RpbGwgYmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmFibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIHRoaXMgZGlzcGxheSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNvbnRhaW5lcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbXVsdGlwbGllZCBhbHBoYSBvZiB0aGUgZGlzcGxheU9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRyYW5zZm9ybSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIHdvcmxkIChwYXJlbnQpIGZhY3RvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gdGhpcy50cmFuc2Zvcm0ubG9jYWxUcmFuc2Zvcm07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJlYSB0aGUgZmlsdGVyIGlzIGFwcGxpZWQgdG8uIFRoaXMgaXMgdXNlZCBhcyBtb3JlIG9mIGFuIG9wdGltaXNhdGlvblxuICAgICAqIHJhdGhlciB0aGFuIGZpZ3VyaW5nIG91dCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgZGlzcGxheU9iamVjdCBlYWNoIGZyYW1lIHlvdSBjYW4gc2V0IHRoaXMgcmVjdGFuZ2xlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xuXG4gICAgLyoqeHd3XG4gICAgICogY2FjaGVkIHNpbiByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3IgPSAwO1xuXG4gICAgLyoqXG4gICAgICogY2FjaGVkIGNvcyByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3IgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRzID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vc3QgdXAtdG8tZGF0ZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcmlnaW5hbCwgY2FjaGVkIG1hc2sgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXNrID0gbnVsbDtcblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGF5T2JqZWN0O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB4IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NhbGVYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByb3RhdGlvbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY3IgPSBNYXRoLmNvcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHNwcml0ZSBpcyBnbG9iYWxseSB2aXNpYmxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHdvcmxkVmlzaWJsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcztcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbWFzayBmb3IgdGhlIGRpc3BsYXlPYmplY3QuIEEgbWFzayBpcyBhbiBvYmplY3QgdGhhdCBsaW1pdHMgdGhlIHZpc2liaWxpdHkgb2YgYW4gb2JqZWN0IHRvIHRoZSBzaGFwZSBvZiB0aGUgbWFzayBhcHBsaWVkIHRvIGl0LlxuICAgICAqIEluIFBJWEkgYSByZWd1bGFyIG1hc2sgbXVzdCBiZSBhIFBJWEkuR3JhcGhpY3Mgb3IgYSBQSVhJLlNwcml0ZSBvYmplY3QuIFRoaXMgYWxsb3dzIGZvciBtdWNoIGZhc3RlciBtYXNraW5nIGluIGNhbnZhcyBhcyBpdCB1dGlsaXNlcyBzaGFwZSBjbGlwcGluZy5cbiAgICAgKiBUbyByZW1vdmUgYSBtYXNrLCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc3xQSVhJLlNwcml0ZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIG1hc2s6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFzaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX21hc2sgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFzay5yZW5kZXJhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVycyBmb3IgdGhlIGRpc3BsYXlPYmplY3QuXG4gICAgICogKiBJTVBPUlRBTlQ6IFRoaXMgaXMgYSB3ZWJHTCBvbmx5IGZlYXR1cmUgYW5kIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqIFRvIHJlbW92ZSBmaWx0ZXJzIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnbnVsbCdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGZpbHRlcnM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLnNsaWNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gdmFsdWUgJiYgdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBUT0RPIC0gT3B0aW1pemF0aW9uIHBhc3MhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgLy8gbXVsdGlwbHkgdGhlIGFscGhhcy4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG59O1xuXG4vLyBwZXJmb3JtYW5jZSBpbmNyZWFzZSB0byBhdm9pZCB1c2luZyBjYWxsLi4gKDEweCBmYXN0ZXIpXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtID0gRGlzcGxheU9iamVjdC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtO1xuXG4vKipcbiAqXG4gKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeCkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMobWF0aC5NYXRyaXguSURFTlRJVFkpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvR2xvYmFsID0gZnVuY3Rpb24gKHBvc2l0aW9uKVxue1xuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb3RcbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseShwb3NpdGlvbik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdCByZWxhdGl2ZSB0byBhbm90aGVyIHBvaW50XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcGFyYW0gW2Zyb21dIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgZ2xvYmFsIHBvc2l0aW9uIGZyb21cbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgUG9pbnQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvTG9jYWwgPSBmdW5jdGlvbiAocG9zaXRpb24sIGZyb20sIHBvaW50KVxue1xuICAgIGlmIChmcm9tKVxuICAgIHtcbiAgICAgICAgcG9zaXRpb24gPSBmcm9tLnRvR2xvYmFsKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBzaW1wbHkgYXBwbHkgdGhlIG1hdHJpeC4uXG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvc2l0aW9uLCBwb2ludCk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFyZW50IENvbnRhaW5lciBvZiB0aGlzIERpc3BsYXlPYmplY3RcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdG8gYWRkIHRoaXMgRGlzcGxheU9iamVjdCB0b1xuICogQHJldHVybiB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRoYXQgdGhpcyBEaXNwbGF5T2JqZWN0IHdhcyBhZGRlZCB0b1xuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXIuYWRkQ2hpbGQpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFBhcmVudDogQXJndW1lbnQgbXVzdCBiZSBhIENvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRDaGlsZCh0aGlzKTtcbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzZXQgdGhlIHBvc3Rpb24sIHNjYWxlLCBza2V3IGFuZCBwaXZvdCBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBUaGUgWCBwb3NpdGlvblxuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IFRoZSBZIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3NjYWxlWD0xXSB7bnVtYmVyfSBUaGUgWCBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtzY2FsZVk9MV0ge251bWJlcn0gVGhlIFkgc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbcm90YXRpb249MF0ge251bWJlcn0gVGhlIHJvdGF0aW9uXG4gKiBAcGFyYW0gW3NrZXdYPTBdIHtudW1iZXJ9IFRoZSBYIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbc2tld1k9MF0ge251bWJlcn0gVGhlIFkgc2tldyB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFg9MF0ge251bWJlcn0gVGhlIFggcGl2b3QgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RZPTBdIHtudW1iZXJ9IFRoZSBZIHBpdm90IHZhbHVlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKHgsIHksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZLCBwaXZvdFgsIHBpdm90WSkgLy9qc2hpbnQgaWdub3JlOmxpbmVcbntcbiAgICB0aGlzLnBvc2l0aW9uLnggPSB4IHx8IDA7XG4gICAgdGhpcy5wb3NpdGlvbi55ID0geSB8fCAwO1xuICAgIHRoaXMuc2NhbGUueCA9ICFzY2FsZVggPyAxIDogc2NhbGVYO1xuICAgIHRoaXMuc2NhbGUueSA9ICFzY2FsZVkgPyAxIDogc2NhbGVZO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgIHRoaXMuc2tldy54ID0gc2tld1ggfHwgMDtcbiAgICB0aGlzLnNrZXcueSA9IHNrZXdZIHx8IDA7XG4gICAgdGhpcy5waXZvdC54ID0gcGl2b3RYIHx8IDA7XG4gICAgdGhpcy5waXZvdC55ID0gcGl2b3RZIHx8IDA7XG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEJhc2UgZGVzdHJveSBtZXRob2QgZm9yIGdlbmVyaWMgZGlzcGxheSBvYmplY3RzXG4gKlxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcblxuICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2NhbGUgPSBudWxsO1xuICAgIHRoaXMucGl2b3QgPSBudWxsO1xuICAgIHRoaXMuc2tldyA9IG51bGw7XG5cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcblxuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IG1hdGguUG9pbnQoMSwxKTtcbiAgICB0aGlzLnBpdm90ID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNrZXcgPSBuZXcgbWF0aC5Qb2ludCgwLjApO1xuICAgIFxuICAgIHRoaXMucm90YXRpb24gPSAwO1xuICAgIHRoaXMuX3NyID0gTWF0aC5zaW4oMCk7XG4gICAgdGhpcy5fY3IgPSBNYXRoLmNvcygwKTtcbiAgICBcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufVxuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHJhbnNmb3JtO1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uIChwYXJlbnRUcmFuc2Zvcm0pXG57XG4gICAgdmFyIHB0ID0gcGFyZW50VHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGx0ID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcblxuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueDtcbiAgICAgICAgbHQuYiAgPSAgdGhpcy5fc3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmMgID0gLXRoaXMuX3NyICogdGhpcy5zY2FsZS55O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQudHggPSAgdGhpcy5wb3NpdGlvbi54IC0gKHRoaXMucGl2b3QueCAqIGx0LmEgKyB0aGlzLnBpdm90LnkgKiBsdC5jKTtcbiAgICAgICAgbHQudHkgPSAgdGhpcy5wb3NpdGlvbi55IC0gKHRoaXMucGl2b3QueCAqIGx0LmIgKyB0aGlzLnBpdm90LnkgKiBsdC5kKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmRpcnR5IHx8IHBhcmVudC5kaXJ0eSlcbiAgICB7ICAgICAgXG4gICAgICAgIC8vIGNvbmNhdCB0aGUgcGFyZW50IG1hdHJpeCB3aXRoIHRoZSBvYmplY3RzIHRyYW5zZm9ybS5cbiAgICAgICAgd3QuYSAgPSBsdC5hICAqIHB0LmEgKyBsdC5iICAqIHB0LmM7XG4gICAgICAgIHd0LmIgID0gbHQuYSAgKiBwdC5iICsgbHQuYiAgKiBwdC5kO1xuICAgICAgICB3dC5jICA9IGx0LmMgICogcHQuYSArIGx0LmQgICogcHQuYztcbiAgICAgICAgd3QuZCAgPSBsdC5jICAqIHB0LmIgKyBsdC5kICAqIHB0LmQ7XG4gICAgICAgIHd0LnR4ID0gbHQudHggKiBwdC5hICsgbHQudHkgKiBwdC5jICsgcHQudHg7XG4gICAgICAgIHd0LnR5ID0gbHQudHggKiBwdC5iICsgbHQudHkgKiBwdC5kICsgcHQudHk7ICAgICAgIFxuICAgIFxuICAgLy8gICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgLy8gICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbi8vICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgLy8gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm07XG5cblxuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vR3JhcGhpY3NEYXRhJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcFBvaW50ID0gbmV3IG1hdGguUG9pbnQoKTtcblxuLyoqXG4gKiBUaGUgR3JhcGhpY3MgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB1c2VkIHRvIGRyYXcgcHJpbWl0aXZlIHNoYXBlcyBzdWNoIGFzIGxpbmVzLCBjaXJjbGVzIGFuZFxuICogcmVjdGFuZ2xlcyB0byB0aGUgZGlzcGxheSwgYW5kIHRvIGNvbG9yIGFuZCBmaWxsIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3MoKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCAodGhpY2tuZXNzKSBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gMDtcblxuICAgIC8qKlxuICAgICAqIEdyYXBoaWNzIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQXBwbHkgYSB2YWx1ZSBvZiAweEZGRkZGRiB0byByZXNldCB0aGUgdGludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByZXZpb3VzIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVXNlZCB0byBjb21wYXJlIHRvIHRoZSBjdXJyZW50IHRpbnQgYW5kIGNoZWNrIGlmIHRoZXJlcyBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMuX3ByZXZUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUw7XG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHBhdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBjb250YWluaW5nIHNvbWUgV2ViR0wtcmVsYXRlZCBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgb2JqZWN0Pn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIFRPRE8gLSBfd2ViZ2wgc2hvdWxkIHVzZSBhIHByb3RvdHlwZSBvYmplY3QsIG5vdCBhIHJhbmRvbSB1bmRvY3VtZW50ZWQgb2JqZWN0Li4uXG4gICAgdGhpcy5fd2ViR0wgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBzaGFwZSBpcyBiZWluZyB1c2VkIGFzIGEgbWFzay5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc01hc2sgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBib3VuZHMnIHBhZGRpbmcgdXNlZCBmb3IgYm91bmRzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYm91bmRzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBsb2NhbCBib3VuZHMgdG8gcHJldmVudCByZWNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLDAsMSwxKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgV2ViR0wgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlXG4gICAgICogZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgY2FjaGVkIHNwcml0ZSBvYmplY3QgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGNhY2hlQXNCaXRtYXAgaXMgc2V0IHRvIHRydWUgdGhlIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIGFzIGlmIGl0IHdhcyBhIHNwcml0ZS5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGdyYXBoaWNzIGVsZW1lbnQgZG9lcyBub3QgY2hhbmdlIG9mdGVuLCBhcyBpdCB3aWxsIHNwZWVkIHVwIHRoZSByZW5kZXJpbmdcbiAgICAgKiBvZiB0aGUgb2JqZWN0IGluIGV4Y2hhbmdlIGZvciB0YWtpbmcgdXAgdGV4dHVyZSBtZW1vcnkuIEl0IGlzIGFsc28gdXNlZnVsIGlmIHlvdSBuZWVkIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB0byBiZSBhbnRpLWFsaWFzZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyBjYW52YXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGlmXG4gICAgICogeW91IGFyZSBjb25zdGFudGx5IHJlZHJhd2luZyB0aGUgZ3JhcGhpY3MgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhY2hlQXNCaXRtYXBcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkdyYXBoaWNzI1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5HcmFwaGljcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3M7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICogTm90ZSB0aGF0IHRoZSBvbmx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIGNsb25lZCwgbm90IGl0cyB0cmFuc2Zvcm0gKHBvc2l0aW9uLHNjYWxlLGV0YylcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjbG9uZSA9IG5ldyBHcmFwaGljcygpO1xuXG4gICAgY2xvbmUucmVuZGVyYWJsZSAgICA9IHRoaXMucmVuZGVyYWJsZTtcbiAgICBjbG9uZS5maWxsQWxwaGEgICAgID0gdGhpcy5maWxsQWxwaGE7XG4gICAgY2xvbmUubGluZVdpZHRoICAgICA9IHRoaXMubGluZVdpZHRoO1xuICAgIGNsb25lLmxpbmVDb2xvciAgICAgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICBjbG9uZS50aW50ICAgICAgICAgID0gdGhpcy50aW50O1xuICAgIGNsb25lLmJsZW5kTW9kZSAgICAgPSB0aGlzLmJsZW5kTW9kZTtcbiAgICBjbG9uZS5pc01hc2sgICAgICAgID0gdGhpcy5pc01hc2s7XG4gICAgY2xvbmUuYm91bmRzUGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcbiAgICBjbG9uZS5kaXJ0eSAgICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5nbERpcnR5ICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRoaXMuY2FjaGVkU3ByaXRlRGlydHk7XG5cbiAgICAvLyBjb3B5IGdyYXBoaWNzIGRhdGFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgY2xvbmUuZ3JhcGhpY3NEYXRhLnB1c2godGhpcy5ncmFwaGljc0RhdGFbaV0uY2xvbmUoKSk7XG4gICAgfVxuXG4gICAgY2xvbmUuY3VycmVudFBhdGggPSBjbG9uZS5ncmFwaGljc0RhdGFbY2xvbmUuZ3JhcGhpY3NEYXRhLmxlbmd0aCAtIDFdO1xuXG4gICAgY2xvbmUudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgIHJldHVybiBjbG9uZTtcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsaW5lIHN0eWxlIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gR3JhcGhpY3MgbWV0aG9kcyBzdWNoIGFzIHRoZSBsaW5lVG8oKSBtZXRob2Qgb3IgdGhlIGRyYXdDaXJjbGUoKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lU3R5bGUgPSBmdW5jdGlvbiAobGluZVdpZHRoLCBjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGggfHwgMDtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5saW5lQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGhhbGZ3YXkgdGhyb3VnaCBhIGxpbmU/IHN0YXJ0IGEgbmV3IG9uZSFcbiAgICAgICAgICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24odGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMuc2xpY2UoLTIpKTtcbiAgICAgICAgICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0cyBlbXB0eSBzbyBsZXRzIGp1c3Qgc2V0IHRoZSBsaW5lIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQWxwaGEgPSB0aGlzLmxpbmVBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBNb3ZlcyB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvIHgsIHkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gICovXG5HcmFwaGljcy5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihbeCx5XSk7XG4gICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgbGluZSB1c2luZyB0aGUgY3VycmVudCBsaW5lIHN0eWxlIGZyb20gdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byAoeCwgeSk7XG4gKiBUaGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIGlzIHRoZW4gc2V0IHRvICh4LCB5KS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeCwgeSk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsIDApO1xuICAgIH1cblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICB4YSA9IGZyb21YICsgKCAoY3BYIC0gZnJvbVgpICogaiApO1xuICAgICAgICB5YSA9IGZyb21ZICsgKCAoY3BZIC0gZnJvbVkpICogaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCB4YSArICggKChjcFggKyAoICh0b1ggLSBjcFgpICogaiApKSAtIHhhKSAqIGogKSxcbiAgICAgICAgICAgICAgICAgICAgIHlhICsgKCAoKGNwWSArICggKHRvWSAtIGNwWSkgKiBqICkpIC0geWEpICogaiApICk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSBjcFgyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgY3BYMiwgY3BZMiwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciBuID0gMjAsXG4gICAgICAgIGR0LFxuICAgICAgICBkdDIsXG4gICAgICAgIGR0MyxcbiAgICAgICAgdDIsXG4gICAgICAgIHQzLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIGR0ID0gKDEgLSBqKTtcbiAgICAgICAgZHQyID0gZHQgKiBkdDtcbiAgICAgICAgZHQzID0gZHQyICogZHQ7XG5cbiAgICAgICAgdDIgPSBqICogajtcbiAgICAgICAgdDMgPSB0MiAqIGo7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIGR0MyAqIGZyb21YICsgMyAqIGR0MiAqIGogKiBjcFggKyAzICogZHQgKiB0MiAqIGNwWDIgKyB0MyAqIHRvWCxcbiAgICAgICAgICAgICAgICAgICAgIGR0MyAqIGZyb21ZICsgMyAqIGR0MiAqIGogKiBjcFkgKyAzICogZHQgKiB0MiAqIGNwWTIgKyB0MyAqIHRvWSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmNUbygpIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSBiZXR3ZWVuIHR3byB0YW5nZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFwiYm9ycm93ZWRcIiBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZnhjYW52YXMvIC0gdGhhbmtzIGdvb2dsZSFcbiAqXG4gKiBAcGFyYW0geDEge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHgyIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTIge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjVG8gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIHJhZGl1cylcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyh4MSwgeTEpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyxcbiAgICAgICAgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSxcbiAgICAgICAgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSxcbiAgICAgICAgYTEgPSBmcm9tWSAtIHkxLFxuICAgICAgICBiMSA9IGZyb21YIC0geDEsXG4gICAgICAgIGEyID0geTIgICAtIHkxLFxuICAgICAgICBiMiA9IHgyICAgLSB4MSxcbiAgICAgICAgbW0gPSBNYXRoLmFicyhhMSAqIGIyIC0gYjEgKiBhMik7XG5cbiAgICBpZiAobW0gPCAxLjBlLTggfHwgcmFkaXVzID09PSAwKVxuICAgIHtcbiAgICAgICAgaWYgKHBvaW50c1twb2ludHMubGVuZ3RoLTJdICE9PSB4MSB8fCBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSAhPT0geTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIGRkID0gYTEgKiBhMSArIGIxICogYjEsXG4gICAgICAgICAgICBjYyA9IGEyICogYTIgKyBiMiAqIGIyLFxuICAgICAgICAgICAgdHQgPSBhMSAqIGEyICsgYjEgKiBiMixcbiAgICAgICAgICAgIGsxID0gcmFkaXVzICogTWF0aC5zcXJ0KGRkKSAvIG1tLFxuICAgICAgICAgICAgazIgPSByYWRpdXMgKiBNYXRoLnNxcnQoY2MpIC8gbW0sXG4gICAgICAgICAgICBqMSA9IGsxICogdHQgLyBkZCxcbiAgICAgICAgICAgIGoyID0gazIgKiB0dCAvIGNjLFxuICAgICAgICAgICAgY3ggPSBrMSAqIGIyICsgazIgKiBiMSxcbiAgICAgICAgICAgIGN5ID0gazEgKiBhMiArIGsyICogYTEsXG4gICAgICAgICAgICBweCA9IGIxICogKGsyICsgajEpLFxuICAgICAgICAgICAgcHkgPSBhMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHF4ID0gYjIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBxeSA9IGEyICogKGsxICsgajIpLFxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IE1hdGguYXRhbjIocHkgLSBjeSwgcHggLSBjeCksXG4gICAgICAgICAgICBlbmRBbmdsZSAgID0gTWF0aC5hdGFuMihxeSAtIGN5LCBxeCAtIGN4KTtcblxuICAgICAgICB0aGlzLmFyYyhjeCArIHgxLCBjeSArIHkxLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBiMSAqIGEyID4gYjIgKiBhMSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmMgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlICh1c2VkIHRvIGNyZWF0ZSBjaXJjbGVzLCBvciBwYXJ0cyBvZiBjaXJjbGVzKS5cbiAqXG4gKiBAcGFyYW0gY3gge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBjeSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBzdGFydEFuZ2xlIHtudW1iZXJ9IFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucyAoMCBpcyBhdCB0aGUgMyBvJ2Nsb2NrIHBvc2l0aW9uIG9mIHRoZSBhcmMncyBjaXJjbGUpXG4gKiBAcGFyYW0gZW5kQW5nbGUge251bWJlcn0gVGhlIGVuZGluZyBhbmdsZSwgaW4gcmFkaWFuc1xuICogQHBhcmFtIGFudGljbG9ja3dpc2Uge2Jvb2xlYW59IE9wdGlvbmFsLiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgY291bnRlcmNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuIEZhbHNlIGlzIGRlZmF1bHQsIGFuZCBpbmRpY2F0ZXMgY2xvY2t3aXNlLCB3aGlsZSB0cnVlIGluZGljYXRlcyBjb3VudGVyLWNsb2Nrd2lzZS5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmMgPSBmdW5jdGlvbihjeCwgY3ksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UpXG57XG4gICAgYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gZW5kQW5nbGUpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiggIWFudGljbG9ja3dpc2UgJiYgZW5kQW5nbGUgPD0gc3RhcnRBbmdsZSApXG4gICAge1xuICAgICAgICBlbmRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG4gICAgZWxzZSBpZiggYW50aWNsb2Nrd2lzZSAmJiBzdGFydEFuZ2xlIDw9IGVuZEFuZ2xlIClcbiAgICB7XG4gICAgICAgIHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuXG4gICAgdmFyIHN3ZWVwID0gYW50aWNsb2Nrd2lzZSA/IChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpICogLTEgOiAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKTtcbiAgICB2YXIgc2VncyA9ICBNYXRoLmNlaWwoTWF0aC5hYnMoc3dlZXApIC8gKE1hdGguUEkgKiAyKSkgKiA0MDtcblxuICAgIGlmKHN3ZWVwID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0WCA9IGN4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXM7XG4gICAgdmFyIHN0YXJ0WSA9IGN5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXM7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyhzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIHRoZXRhID0gc3dlZXAvKHNlZ3MqMik7XG4gICAgdmFyIHRoZXRhMiA9IHRoZXRhKjI7XG5cbiAgICB2YXIgY1RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgICB2YXIgc2VnTWludXMgPSBzZWdzIC0gMTtcblxuICAgIHZhciByZW1haW5kZXIgPSAoIHNlZ01pbnVzICUgMSApIC8gc2VnTWludXM7XG5cbiAgICBmb3IodmFyIGk9MDsgaTw9c2VnTWludXM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciByZWFsID0gIGkgKyByZW1haW5kZXIgKiBpO1xuXG5cbiAgICAgICAgdmFyIGFuZ2xlID0gKCh0aGV0YSkgKyBzdGFydEFuZ2xlICsgKHRoZXRhMiAqIHJlYWwpKTtcblxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgdmFyIHMgPSAtTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCggKGNUaGV0YSAqICBjKSArIChzVGhldGEgKiBzKSApICogcmFkaXVzICsgY3gsXG4gICAgICAgICAgICAgICAgICAgICggKGNUaGV0YSAqIC1zKSArIChzVGhldGEgKiBjKSApICogcmFkaXVzICsgY3kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSBzaW1wbGUgb25lLWNvbG9yIGZpbGwgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIG90aGVyIEdyYXBoaWNzIG1ldGhvZHNcbiAqIChzdWNoIGFzIGxpbmVUbygpIG9yIGRyYXdDaXJjbGUoKSkgdXNlIHdoZW4gZHJhd2luZy5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmVnaW5GaWxsID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmZpbGxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGwgPSB0aGlzLmZpbGxpbmc7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxDb2xvciA9IHRoaXMuZmlsbENvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQWxwaGEgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbGwgdG8gdGhlIGxpbmVzIGFuZCBzaGFwZXMgdGhhdCB3ZXJlIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhlIGJlZ2luRmlsbCgpIG1ldGhvZC5cbiAqXG4gKiBAcmV0dXJuIHtHcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmVuZEZpbGwgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gbnVsbDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5SZWN0YW5nbGUoeCx5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBSYWRpdXMgb2YgdGhlIHJlY3RhbmdsZSBjb3JuZXJzXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JvdW5kZWRSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdDaXJjbGUgPSBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkNpcmNsZSh4LHksIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhlIGVsbGlwc2VcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3RWxsaXBzZSA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgcG9seWdvbiB1c2luZyB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCB7bnVtYmVyW118UElYSS5Qb2ludFtdfSBUaGUgcGF0aCBkYXRhIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwb2x5Z29uLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24gKHBhdGgpXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBhdGg7XG5cbiAgICB2YXIgY2xvc2VkID0gdHJ1ZTtcblxuICAgIGlmIChwb2ludHMgaW5zdGFuY2VvZiBtYXRoLlBvbHlnb24pXG4gICAge1xuICAgICAgICBjbG9zZWQgPSBwb2ludHMuY2xvc2VkO1xuICAgICAgICBwb2ludHMgPSBwb2ludHMucG9pbnRzO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50c1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24ocG9pbnRzKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBjbG9zZWQ7XG5cbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBncmFwaGljcyB0aGF0IHdlcmUgZHJhd24gdG8gdGhpcyBHcmFwaGljcyBvYmplY3QsIGFuZCByZXNldHMgZmlsbCBhbmQgbGluZSBzdHlsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuY2xlYXJEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZ2VvbWV0cnkgaXMgY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2hvdWxkIGJlIG9uZSBvZiB0aGUgc2NhbGVNb2RlIGNvbnN0c1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdFxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG5cbiAgICByZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCAqIHJlc29sdXRpb24sIGJvdW5kcy5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY2FudmFzQnVmZmVyLmNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgdGhlIHNwcml0ZSBpcyBub3QgdmlzaWJsZSBvciB0aGUgYWxwaGEgaXMgMCB0aGVuIG5vIG5lZWQgdG8gcmVuZGVyIHRoaXMgZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuZ2xEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzLnJlbmRlcih0aGlzKTtcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmlzTWFzayA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdGludCBoYXMgY2hhbmdlZCwgc2V0IHRoZSBncmFwaGljcyBvYmplY3QgdG8gZGlydHkuXG4gICAgaWYgKHRoaXMuX3ByZXZUaW50ICE9PSB0aGlzLnRpbnQpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjb2RlIG1heSBzdGlsbCBiZSBuZWVkZWQgc28gbGVhdmluZyBmb3Igbm93Li5cbiAgICAvL1xuICAgIC8qXG4gICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXApXG4gICAge1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSB8fCB0aGlzLmNhY2hlZFNwcml0ZURpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSgpO1xuXG4gICAgICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xuXG4gICAgICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMuX2NhY2hlZFNwcml0ZSwgcmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb247XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjb250ZXh0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGdyYXBoaWMgc2hhcGUgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gVGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlLCBkZWZhdWx0cyB0byB0aGlzXG4gKiAgb2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuXG4gICAgICAgIC8vIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGl0ZW0gaXMgYSBtYXNrIVxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyYWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgICAgICAgICAgdGhpcy5nbERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2xvY2FsQm91bmRzO1xuXG4gICAgICAgIHZhciB3MCA9IGJvdW5kcy54O1xuICAgICAgICB2YXIgdzEgPSBib3VuZHMud2lkdGggKyBib3VuZHMueDtcblxuICAgICAgICB2YXIgaDAgPSBib3VuZHMueTtcbiAgICAgICAgdmFyIGgxID0gYm91bmRzLmhlaWdodCArIGJvdW5kcy55O1xuXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciBtYXhYID0geDE7XG4gICAgICAgIHZhciBtYXhZID0geTE7XG5cbiAgICAgICAgdmFyIG1pblggPSB4MTtcbiAgICAgICAgdmFyIG1pblkgPSB5MTtcblxuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy54ID0gbWluWDtcbiAgICAgICAgdGhpcy5fYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IHRoaXMuX2JvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIGdyYXBoaWNzIG9iamVjdFxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5HcmFwaGljcy5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIGdyYXBoaWNzRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoIWRhdGEuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGRlYWwgd2l0aCBmaWxscy4uXG4gICAgICAgIGlmIChkYXRhLnNoYXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIGRhdGEuc2hhcGUuY29udGFpbnMoIHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSApIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICpcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUxvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGlmICh0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB2YXIgc2hhcGUsIHBvaW50cywgeCwgeSwgdywgaDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG4gICAgICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVCB8fCB0eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueCAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gUE9MWVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSAyKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvaW50c1tqKzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblggPSB4LWxpbmVXaWR0aCA8IG1pblggPyB4LWxpbmVXaWR0aCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSB4K2xpbmVXaWR0aCA+IG1heFggPyB4K2xpbmVXaWR0aCA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IHktbGluZVdpZHRoIDwgbWluWSA/IHktbGluZVdpZHRoIDogbWluWTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IHkrbGluZVdpZHRoID4gbWF4WSA/IHkrbGluZVdpZHRoIDogbWF4WTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgbWluWCA9IDA7XG4gICAgICAgIG1heFggPSAwO1xuICAgICAgICBtaW5ZID0gMDtcbiAgICAgICAgbWF4WSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy54ID0gbWluWCAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMud2lkdGggPSAobWF4WCAtIG1pblgpICsgcGFkZGluZyAqIDI7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy55ID0gbWluWSAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMuaGVpZ2h0ID0gKG1heFkgLSBtaW5ZKSArIHBhZGRpbmcgKiAyO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNhY2hlZCBzcHJpdGUgd2hlbiB0aGUgc3ByaXRlIGhhcyBjYWNoZUFzQml0bWFwID0gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgaWYgKCF0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzKTtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgU3ByaXRlKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyID0gY2FudmFzQnVmZmVyO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIucmVzaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gbGV2ZXJhZ2UgdGhlIGFuY2hvciB0byBhY2NvdW50IGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC5zYXZlKCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGFscGhhIG9mIHRoZSBncmFwaGljcyB0byAxIGZvciB0aGUgcmVuZGVyLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gbm93IHJlbmRlciB0aGUgZ3JhcGhpYy4uXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0KTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG59O1xuKi9cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjYWNoZWRTcHJpdGUgPSB0aGlzLl9jYWNoZWRTcHJpdGU7XG4gICAgdmFyIHRleHR1cmUgPSBjYWNoZWRTcHJpdGUudGV4dHVyZTtcbiAgICB2YXIgY2FudmFzID0gY2FjaGVkU3ByaXRlLmJ1ZmZlci5jYW52YXM7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLmZyYW1lLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLmZyYW1lLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICBjYWNoZWRTcHJpdGUuX3dpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIGNhY2hlZFNwcml0ZS5faGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgZGlydHkgYmFzZSB0ZXh0dXJlc1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZGlydHkoKTtcbn07Ki9cblxuLyoqXG4gKiBEZXN0cm95cyBhIHByZXZpb3VzIGNhY2hlZCBzcHJpdGUuXG4gKlxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3lDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS50ZXh0dXJlLmRlc3Ryb3kodHJ1ZSk7XG5cbiAgICAvLyBsZXQgdGhlIGdjIGNvbGxlY3QgdGhlIHVudXNlZCBzcHJpdGVcbiAgICAvLyBUT0RPIGNvdWxkIGJlIG9iamVjdCBwb29sZWQhXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07Ki9cblxuLyoqXG4gKiBEcmF3cyB0aGUgZ2l2ZW4gc2hhcGUgdG8gdGhpcyBHcmFwaGljcyBvYmplY3QuIENhbiBiZSBhbnkgb2YgQ2lyY2xlLCBSZWN0YW5nbGUsIEVsbGlwc2UsIExpbmUgb3IgUG9seWdvbi5cbiAqXG4gKiBAcGFyYW0gc2hhcGUge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX0gVGhlIGdlbmVyYXRlZCBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24gKHNoYXBlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgLy8gY2hlY2sgY3VycmVudCBwYXRoIVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IG5ldyBHcmFwaGljc0RhdGEodGhpcy5saW5lV2lkdGgsIHRoaXMubGluZUNvbG9yLCB0aGlzLmxpbmVBbHBoYSwgdGhpcy5maWxsQ29sb3IsIHRoaXMuZmlsbEFscGhhLCB0aGlzLmZpbGxpbmcsIHNoYXBlKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnB1c2goZGF0YSk7XG5cbiAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICB7XG4gICAgICAgIGRhdGEuc2hhcGUuY2xvc2VkID0gZGF0YS5zaGFwZS5jbG9zZWQgfHwgdGhpcy5maWxsaW5nO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBkZXN0cm95IGVhY2ggb2YgdGhlIEdyYXBoaWNzRGF0YSBvYmplY3RzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggd2ViZ2wgZGF0YSBlbnRyeSwgZGVzdHJveSB0aGUgV2ViR0xHcmFwaGljc0RhdGFcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl93ZWJnbCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3dlYmdsW2lkXS5kYXRhLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJnbFtpZF0uZGF0YVtqXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl93ZWJnbCA9IG51bGw7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBudWxsO1xufTtcbiIsIi8qKlxuICogQSBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBmaWxsQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbEFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGwgICAgICB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gKiBAcGFyYW0gc2hhcGUgICAgIHtDaXJjbGV8UmVjdGFuZ2xlfEVsbGlwc2V8TGluZXxQb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzRGF0YShsaW5lV2lkdGgsIGxpbmVDb2xvciwgbGluZUFscGhhLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgZmlsbCwgc2hhcGUpXG57XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IGxpbmVDb2xvcjtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVBbHBoYSA9IGxpbmVBbHBoYTtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMuX2xpbmVUaW50ID0gbGluZUNvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5fZmlsbFRpbnQgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICAgICAqL1xuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gICAgICovXG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFRoZSB0eXBlIG9mIHRoZSBzaGFwZSwgc2VlIHRoZSBDb25zdC5TaGFwZXMgZmlsZSBmb3IgYWxsIHRoZSBleGlzdGluZyB0eXBlcyxcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBzaGFwZS50eXBlO1xufVxuXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljc0RhdGEgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfVxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEdyYXBoaWNzRGF0YShcbiAgICAgICAgdGhpcy5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMubGluZUNvbG9yLFxuICAgICAgICB0aGlzLmxpbmVBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuZmlsbEFscGhhLFxuICAgICAgICB0aGlzLmZpbGwsXG4gICAgICAgIHRoaXMuc2hhcGVcbiAgICApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3MgZGF0YS5cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2hhcGUgPSBudWxsO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vV2ViR0xHcmFwaGljc0RhdGEnKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyJyksXG5cbiAgICAvLyBzb21lIGRyYXdpbmcgZnVuY3Rpb25zLi5cbiAgICBidWlsZExpbmUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkTGluZScpO1xuICAgIGJ1aWxkUG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRQb2x5Jyk7XG4gICAgYnVpbGRDb21wbGV4UG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRDb21wbGV4UG9seScpO1xuICAgIGJ1aWxkUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlJyk7XG4gICAgYnVpbGRDaXJjbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ2lyY2xlJyk7XG5cbiAgICBlYXJjdXQgPSByZXF1aXJlKCdlYXJjdXQnKTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBHcmFwaGljc1JlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgdGhpcy5ncmFwaGljc0RhdGFQb29sID0gW107XG5cbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBvaW50cyBhIHBvbHkgY2FuIGNvbnRhaW4gYmVmb3JlIGl0IGlzIHJlbmRlcmVkIGFzIGEgY29tcGxleCBwb2x5Z29uICh1c2luZyB0aGUgc3RlbmNpbCBidWZmZXIpXG4gICAgICogQHR5cGUge051bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heGltdW1TaW1wbGVQb2x5U2l6ZSA9IDIwMDtcbn1cblxuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2dyYXBoaWNzJywgR3JhcGhpY3NSZW5kZXJlcik7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZVxuICpcbiAqIEBwcml2YXRlXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy5nbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBuZXcgUHJpbWl0aXZlU2hhZGVyKHRoaXMuZ2wpXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgcmVuZGVyZXIuXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2xbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcbiAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIHZhciB3ZWJHTERhdGE7XG4gIC8vICBjb25zb2xlLmxvZyhncmFwaGljcylcbiAgICBpZiAoZ3JhcGhpY3MuZGlydHkgfHwgIWdyYXBoaWNzLl93ZWJHTFtnbC5pZF0pXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZUdyYXBoaWNzKGdyYXBoaWNzKTtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gVGhpcyAgY291bGQgYmUgc3BlZWRlZCB1cCBmb3Igc3VyZSFcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCBncmFwaGljcy5ibGVuZE1vZGUgKTtcblxuLy8gICAgdmFyIG1hdHJpeCA9ICBncmFwaGljcy53b3JsZFRyYW5zZm9ybS5jbG9uZSgpO1xuLy8gICAgdmFyIG1hdHJpeCA9ICByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXguY2xvbmUoKTtcbi8vICAgIG1hdHJpeC5hcHBlbmQoZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0pO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB3ZWJHTC5kYXRhLmxlbmd0aDsgaSA8IG47IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMLmRhdGFbaV0ubW9kZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy9UT0RPIGZpeCB0aGlzIG9uZSFcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnB1c2hTdGVuY2lsKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICBnbC51bmlmb3JtMWYocmVuZGVyZXIuc2hhZGVyTWFuYWdlci5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSAqIHdlYkdMRGF0YS5hbHBoYSk7XG5cbiAgICAgICAgICAgIC8vIHJlbmRlciBxdWFkLi5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgcmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucG9wU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICovXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHNoYWRlciA9IHRoaXMucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgICAgICAgICByZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50aW50ID0gdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5kcmF3Q291bnQrKztcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gdXBkYXRlXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnVwZGF0ZUdyYXBoaWNzID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBnZXQgdGhlIGNvbnRleHRzIGdyYXBoaWNzIG9iamVjdFxuICAgIHZhciB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF07XG5cbiAgICAvLyBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGRvZXMgbm90IGV4aXN0IGluIHRoZSB3ZWJHTCBjb250ZXh0IHRpbWUgdG8gY3JlYXRlIGl0IVxuICAgIGlmICghd2ViR0wpXG4gICAge1xuICAgICAgICB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF0gPSB7bGFzdEluZGV4OjAsIGRhdGE6W10sIGdsOmdsfTtcbiAgICB9XG5cbiAgIFxuICAgIC8vIGZsYWcgdGhlIGdyYXBoaWNzIGFzIG5vdCBkaXJ0eSBhcyB3ZSBhcmUgYWJvdXQgdG8gdXBkYXRlIGl0Li4uXG4gICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcblxuICAgIHZhciBpO1xuXG4gICAgLy8gaWYgdGhlIHVzZXIgY2xlYXJlZCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHdlIHdpbGwgbmVlZCB0byBjbGVhciBldmVyeSBvYmplY3RcbiAgICBpZiAoZ3JhcGhpY3MuY2xlYXJEaXJ0eSlcbiAgICB7XG4gICAgICAgIGdyYXBoaWNzLmNsZWFyRGlydHkgPSBmYWxzZTtcblxuICAgICAgICAvLyBsb29wIHRocm91Z2ggYW5kIHJldHVybiBhbGwgdGhlIHdlYkdMRGF0YXMgdG8gdGhlIG9iamVjdCBwb29sIHNvIHRoYW4gY2FuIGJlIHJldXNlZCBsYXRlciBvblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGdyYXBoaWNzRGF0YSA9IHdlYkdMLmRhdGFbaV07XG4gICAgICAgICAgICBncmFwaGljc0RhdGEucmVzZXQoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wdXNoKCBncmFwaGljc0RhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIHRoZSBhcnJheSBhbmQgcmVzZXQgdGhlIGluZGV4Li5cbiAgICAgICAgd2ViR0wuZGF0YSA9IFtdO1xuICAgICAgICB3ZWJHTC5sYXN0SW5kZXggPSAwO1xuICAgIH1cblxuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICAvLyBsb29wIHRocm91Z2ggdGhlIGdyYXBoaWNzIGRhdGFzIGFuZCBjb25zdHJ1Y3QgZWFjaCBvbmUuLlxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgYSBjb21wbGV4IGZpbGwgdGhlbiB0aGUgbmV3IHN0ZW5jaWwgYnVmZmVyIHRlY2huaXF1ZSB3aWxsIGJlIHVzZWRcbiAgICAvLyBvdGhlciB3aXNlIGdyYXBoaWNzIG9iamVjdHMgd2lsbCBiZSBwdXNoZWQgaW50byBhIGJhdGNoLi5cbiAgICBmb3IgKGkgPSB3ZWJHTC5sYXN0SW5kZXg7IGkgPCBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gbmVlZCB0byBhZGQgdGhlIHBvaW50cyB0aGUgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgICAgICAgICBkYXRhLnBvaW50cyA9IGRhdGEuc2hhcGUucG9pbnRzLnNsaWNlKCk7XG4gICAgICAgICAgICBpZiAoZGF0YS5zaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gY2xvc2UgdGhlIHBvbHkgaWYgdGhlIHZhbHVlIGlzIHRydWUhXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzWzBdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMl0gfHwgZGF0YS5wb2ludHNbMV0gIT09IGRhdGEucG9pbnRzW2RhdGEucG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucG9pbnRzLnB1c2goZGF0YS5wb2ludHNbMF0sIGRhdGEucG9pbnRzWzFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1BS0UgU1VSRSBXRSBIQVZFIFRIRSBDT1JSRUNUIFRZUEUuLlxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoID49IDYpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoIDwgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgKiAyKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FuRHJhd1VzaW5nU2ltcGxlID0gYnVpbGRQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuRHJhd1VzaW5nU2ltcGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGggPiAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG4gICAgICAgICAgICAgICAgYnVpbGRMaW5lKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQyB8fCBkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5FTElQKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkQ2lyY2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2ViR0wubGFzdEluZGV4Kys7XG4gICAgfVxuXG4gICAgLy8gdXBsb2FkIGFsbCB0aGUgZGlydHkgZGF0YS4uLlxuICAgIGZvciAoaSA9IDA7IGkgPCB3ZWJHTC5kYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVtpXTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLmRpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEudXBsb2FkKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB3ZWJHTCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IFRPRE8gQEFsdmluXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnN3aXRjaE1vZGUgPSBmdW5jdGlvbiAod2ViR0wsIHR5cGUpXG57XG4gICAgdmFyIHdlYkdMRGF0YTtcblxuICAgIGlmICghd2ViR0wuZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgd2ViR0xEYXRhLm1vZGUgPSB0eXBlO1xuICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVt3ZWJHTC5kYXRhLmxlbmd0aC0xXTtcblxuICAgICAgICBpZiAoKHdlYkdMRGF0YS5wb2ludHMubGVuZ3RoID4gMzIwMDAwKSB8fCB3ZWJHTERhdGEubW9kZSAhPT0gdHlwZSB8fCB0eXBlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgICAgIHdlYkdMLmRhdGEucHVzaCh3ZWJHTERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd2ViR0xEYXRhLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB3ZWJHTERhdGE7XG59O1xuXG4iLCIvKipcbiAqIEFuIG9iamVjdCBjb250YWluaW5nIFdlYkdMIHNwZWNpZmljIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBXZWJHTEdyYXBoaWNzRGF0YShnbCkge1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLy9UT0RPIGRvZXMgdGhpcyBuZWVkIHRvIGJlIHNwbGl0IGJlZm9yZSB1cGxvZGluZz8/XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgY29sb3IgY29tcG9uZW50cyAocixnLGIpXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5jb2xvciA9IFswLDAsMF07IC8vIGNvbG9yIHNwbGl0IVxuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgcG9pbnRzIHRvIGRyYXdcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50W119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IFtdO1xuICAgIC8qKlxuICAgICAqIFRoZSBtYWluIGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggYnVmZmVyXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogdG9kbyBAYWx2aW5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tb2RlID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgZ3JhcGhpY3MgaXMgZGlydHkgb3Igbm90XG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn1cblxuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xHcmFwaGljc0RhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIFJlc2V0cyB0aGUgdmVydGljZXMgYW5kIHRoZSBpbmRpY2VzXG4gKi9cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnBvaW50cy5sZW5ndGggPSAwO1xuICAgIHRoaXMuaW5kaWNlcy5sZW5ndGggPSAwO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbi8vICAgIHRoaXMubGFzdEluZGV4ID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDtcbiAgICB0aGlzLmdsUG9pbnRzID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnBvaW50cyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5idWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmdsUG9pbnRzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmdsSW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmluZGljZXMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5nbEluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuY29sb3IgPSBudWxsO1xuICAgIHRoaXMucG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIFxuICAgIHRoaXMuZ2wgPSBudWxsO1xuXG4gICAgdGhpcy5idWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5nbFBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5nbEluZGljZXMgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihnbClcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBnbCxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgZmxpcFk7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIHZlYzMgdGludDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvciAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpXG4gICAgKTtcbn1cblxuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHJpbWl0aXZlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBjaXJjbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRyYXdcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDaXJjbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgdmFyIGNpcmNsZURhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSBjaXJjbGVEYXRhLng7XG4gICAgdmFyIHkgPSBjaXJjbGVEYXRhLnk7XG4gICAgdmFyIHdpZHRoO1xuICAgIHZhciBoZWlnaHQ7XG5cbiAgICAvLyBUT0RPIC0gYml0IGhhY2t5Pz9cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSBjaXJjbGVEYXRhLnJhZGl1cztcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS53aWR0aDtcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHRvdGFsU2VncyA9IE1hdGguZmxvb3IoMzAgKiBNYXRoLnNxcnQoY2lyY2xlRGF0YS5yYWRpdXMpKSB8fCBNYXRoLmZsb29yKDE1ICogTWF0aC5zcXJ0KGNpcmNsZURhdGEud2lkdGggKyBjaXJjbGVEYXRhLmhlaWdodCkpO1xuICAgIHZhciBzZWcgPSAoTWF0aC5QSSAqIDIpIC8gdG90YWxTZWdzIDtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTZWdzICsgMSA7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaCh4LHksIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgeSArIE1hdGguY29zKHNlZyAqIGkpICogaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MrKywgdmVjUG9zKyspO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcy0xKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cy5wdXNoKHggKyBNYXRoLnNpbihzZWcgKiBpKSAqIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBidWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENpcmNsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21wbGV4IHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENvbXBsZXhQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vVE9ETyAtIG5vIG5lZWQgdG8gY29weSB0aGlzIGFzIGl0IGdldHMgdHVybmVkIGludG8gYSBGTG9hdDMyQXJyYXkgYW55d2F5cy4uXG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHMuc2xpY2UoKTtcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB3ZWJHTERhdGEucG9pbnRzID0gcG9pbnRzO1xuICAgIHdlYkdMRGF0YS5hbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgd2ViR0xEYXRhLmNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcblxuICAgIC8vIGNhbGNsYXRlIHRoZSBib3VuZHMuLlxuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgdmFyIHgseTtcblxuICAgIC8vIGdldCBzaXplLi5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrPTIpXG4gICAge1xuICAgICAgICB4ID0gcG9pbnRzW2ldO1xuICAgICAgICB5ID0gcG9pbnRzW2krMV07XG5cbiAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBxdWFkIHRvIHRoZSBlbmQgY29zIHRoZXJlIGlzIG5vIHBvaW50IG1ha2luZyBhbm90aGVyIGJ1ZmZlciFcbiAgICBwb2ludHMucHVzaChtaW5YLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWF4WSxcbiAgICAgICAgICAgICAgICBtaW5YLCBtYXhZKTtcblxuICAgIC8vIHB1c2ggYSBxdWFkIG9udG8gdGhlIGVuZC4uXG5cbiAgICAvL1RPRE8gLSB0aGlzIGFpbnQgbmVlZGVkIVxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goIGkgKTtcbiAgICB9XG5cbn07XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29tcGxleFBvbHk7IiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZExpbmUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gVE9ETyBPUFRJTUlTRSFcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGxpbmUgd2lkdGggaXMgYW4gb2RkIG51bWJlciBhZGQgMC41IHRvIGFsaWduIHRvIGEgd2hvbGUgcGl4ZWxcbiAgICAvLyBjb21tZW50aW5nIHRoaXMgb3V0IGZpeGVzICM3MTEgYW5kICMxNjIwXG4gICAgLy8gaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGglMilcbiAgICAvLyB7XG4gICAgLy8gICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAgIHBvaW50c1tpXSArPSAwLjU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGZpcnN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgdmFyIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IHBvaW50IGlzIHRoZSBsYXN0IHBvaW50IC0gZ29ubmEgaGF2ZSBpc3N1ZXMgOilcbiAgICBpZiAoZmlyc3RQb2ludC54ID09PSBsYXN0UG9pbnQueCAmJiBmaXJzdFBvaW50LnkgPT09IGxhc3RQb2ludC55KVxuICAgIHtcbiAgICAgICAgLy8gbmVlZCB0byBjbG9uZSBhcyB3ZSBhcmUgZ29pbmcgdG8gc2xpZ2h0bHkgbW9kaWZ5IHRoZSBzaGFwZS4uXG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5zbGljZSgpO1xuXG4gICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHZhciBtaWRQb2ludFggPSBsYXN0UG9pbnQueCArIChmaXJzdFBvaW50LnggLSBsYXN0UG9pbnQueCkgKjAuNTtcbiAgICAgICAgdmFyIG1pZFBvaW50WSA9IGxhc3RQb2ludC55ICsgKGZpcnN0UG9pbnQueSAtIGxhc3RQb2ludC55KSAqMC41O1xuXG4gICAgICAgIHBvaW50cy51bnNoaWZ0KG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICAgICAgcG9pbnRzLnB1c2gobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgdmFyIGluZGV4Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIHZhciBpbmRleFN0YXJ0ID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAvLyBEUkFXIHRoZSBMaW5lXG4gICAgdmFyIHdpZHRoID0gZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEubGluZUNvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEubGluZUFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHB4LCBweSwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeTtcbiAgICB2YXIgcGVycHgsIHBlcnB5LCBwZXJwMngsIHBlcnAyeSwgcGVycDN4LCBwZXJwM3k7XG4gICAgdmFyIGExLCBiMSwgYzEsIGEyLCBiMiwgYzI7XG4gICAgdmFyIGRlbm9tLCBwZGlzdCwgZGlzdDtcblxuICAgIHAxeCA9IHBvaW50c1swXTtcbiAgICBwMXkgPSBwb2ludHNbMV07XG5cbiAgICBwMnggPSBwb2ludHNbMl07XG4gICAgcDJ5ID0gcG9pbnRzWzNdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSAgcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcblxuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIC8vIHN0YXJ0XG4gICAgdmVydHMucHVzaChwMXggLSBwZXJweCAsIHAxeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDF4ICsgcGVycHggLCBwMXkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoLTE7IGkrKylcbiAgICB7XG4gICAgICAgIHAxeCA9IHBvaW50c1soaS0xKSoyXTtcbiAgICAgICAgcDF5ID0gcG9pbnRzWyhpLTEpKjIgKyAxXTtcblxuICAgICAgICBwMnggPSBwb2ludHNbKGkpKjJdO1xuICAgICAgICBwMnkgPSBwb2ludHNbKGkpKjIgKyAxXTtcblxuICAgICAgICBwM3ggPSBwb2ludHNbKGkrMSkqMl07XG4gICAgICAgIHAzeSA9IHBvaW50c1soaSsxKSoyICsgMV07XG5cbiAgICAgICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgICAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgICAgICBwZXJwMnggPSAtKHAyeSAtIHAzeSk7XG4gICAgICAgIHBlcnAyeSA9IHAyeCAtIHAzeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAyeCpwZXJwMnggKyBwZXJwMnkqcGVycDJ5KTtcbiAgICAgICAgcGVycDJ4IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeSAvPSBkaXN0O1xuICAgICAgICBwZXJwMnggKj0gd2lkdGg7XG4gICAgICAgIHBlcnAyeSAqPSB3aWR0aDtcblxuICAgICAgICBhMSA9ICgtcGVycHkgKyBwMXkpIC0gKC1wZXJweSArIHAyeSk7XG4gICAgICAgIGIxID0gKC1wZXJweCArIHAyeCkgLSAoLXBlcnB4ICsgcDF4KTtcbiAgICAgICAgYzEgPSAoLXBlcnB4ICsgcDF4KSAqICgtcGVycHkgKyBwMnkpIC0gKC1wZXJweCArIHAyeCkgKiAoLXBlcnB5ICsgcDF5KTtcbiAgICAgICAgYTIgPSAoLXBlcnAyeSArIHAzeSkgLSAoLXBlcnAyeSArIHAyeSk7XG4gICAgICAgIGIyID0gKC1wZXJwMnggKyBwMngpIC0gKC1wZXJwMnggKyBwM3gpO1xuICAgICAgICBjMiA9ICgtcGVycDJ4ICsgcDN4KSAqICgtcGVycDJ5ICsgcDJ5KSAtICgtcGVycDJ4ICsgcDJ4KSAqICgtcGVycDJ5ICsgcDN5KTtcblxuICAgICAgICBkZW5vbSA9IGExKmIyIC0gYTIqYjE7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8IDAuMSApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgZGVub20rPTEwLjE7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4ID0gKGIxKmMyIC0gYjIqYzEpL2Rlbm9tO1xuICAgICAgICBweSA9IChhMipjMSAtIGExKmMyKS9kZW5vbTtcblxuXG4gICAgICAgIHBkaXN0ID0gKHB4IC1wMngpICogKHB4IC1wMngpICsgKHB5IC1wMnkpICogKHB5IC1wMnkpO1xuXG5cbiAgICAgICAgaWYgKHBkaXN0ID4gMTQwICogMTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICBwZXJwM3ggPSBwZXJweCAtIHBlcnAyeDtcbiAgICAgICAgICAgIHBlcnAzeSA9IHBlcnB5IC0gcGVycDJ5O1xuXG4gICAgICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAzeCpwZXJwM3ggKyBwZXJwM3kqcGVycDN5KTtcbiAgICAgICAgICAgIHBlcnAzeCAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN5IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3ggKj0gd2lkdGg7XG4gICAgICAgICAgICBwZXJwM3kgKj0gd2lkdGg7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJwM3gsIHAyeSArcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGV4Q291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmVydHMucHVzaChweCAsIHB5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIChweC1wMngpLCBwMnkgLSAocHkgLSBwMnkpKTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcDF4ID0gcG9pbnRzWyhsZW5ndGgtMikqMl07XG4gICAgcDF5ID0gcG9pbnRzWyhsZW5ndGgtMikqMiArIDFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWyhsZW5ndGgtMSkqMl07XG4gICAgcDJ5ID0gcG9pbnRzWyhsZW5ndGgtMSkqMiArIDFdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KyspO1xuICAgIH1cblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0LTEpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZExpbmU7IiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5XZWJHTEdyYXBoaWNzRGF0YX0gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChwb2ludHMsIG51bGwsIDIpO1xuXG4gICAgaWYgKCF0cmlhbmdsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoIC8gNjtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gK3ZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZXJ0UG9zKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2ZXJ0cy5wdXNoKHBvaW50c1tpICogMl0sIHBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFBvbHk7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gLS0tIC8vXG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgLy9cbiAgICB2YXIgcmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSByZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSByZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICAvLyBzdGFydFxuICAgICAgICB2ZXJ0cy5wdXNoKHgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCAsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIC8vIGluc2VydCAyIGRlYWQgdHJpYW5nbGVzLi5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRQb3MsIHZlcnRQb3MsIHZlcnRQb3MrMSwgdmVydFBvcysyLCB2ZXJ0UG9zKzMsIHZlcnRQb3MrMyk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFt4LCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHldO1xuXG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUmVjdGFuZ2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcbiAgICBcbi8qKlxuICogQnVpbGRzIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbmJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcnJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcnJlY3REYXRhLng7XG4gICAgdmFyIHkgPSBycmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSBycmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJyZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICB2YXIgcmFkaXVzID0gcnJlY3REYXRhLnJhZGl1cztcblxuICAgIHZhciByZWNQb2ludHMgPSBbXTtcbiAgICByZWNQb2ludHMucHVzaCh4LCB5ICsgcmFkaXVzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHgsIHkgKyBoZWlnaHQsIHggKyByYWRpdXMsIHkgKyBoZWlnaHQsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoLCB5ICsgcmFkaXVzLCB4ICsgd2lkdGgsIHksIHggKyB3aWR0aCAtIHJhZGl1cywgeSwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyByYWRpdXMsIHksIHgsIHksIHgsIHkgKyByYWRpdXMgKyAwLjAwMDAwMDAwMDEsIHJlY1BvaW50cyk7XG5cbiAgICAvLyB0aGlzIHRpbnkgbnVtYmVyIGRlYWxzIHdpdGggdGhlIGlzc3VlIHRoYXQgb2NjdXJzIHdoZW4gcG9pbnRzIG92ZXJsYXAgYW5kIGVhcmN1dCBmYWlscyB0byB0cmlhbmd1bGF0ZSB0aGUgaXRlbS5cbiAgICAvLyBUT0RPIC0gZml4IHRoaXMgcHJvcGVybHksIHRoaXMgaXMgbm90IHZlcnkgZWxlZ2FudC4uIGJ1dCBpdCB3b3JrcyBmb3Igbm93LlxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocmVjUG9pbnRzLCBudWxsLCAyKTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlY1BvaW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaChyZWNQb2ludHNbaV0sIHJlY1BvaW50c1srK2ldLCByLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gcmVjUG9pbnRzO1xuXG4gICAgICAgIHRoaXMuYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUuIChoZWxwZXIgZnVuY3Rpb24uLilcbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZyb21YIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gZnJvbVkge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEBwYXJhbSBbb3V0XSB7bnVtYmVyW119IFRoZSBvdXRwdXQgYXJyYXkgdG8gYWRkIHBvaW50cyBpbnRvLiBJZiBub3QgcGFzc2VkLCBhIG5ldyBhcnJheSBpcyBjcmVhdGVkLlxuICogQHJldHVybiB7bnVtYmVyW119IGFuIGFycmF5IG9mIHBvaW50c1xuICovXG5xdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IGZ1bmN0aW9uIChmcm9tWCwgZnJvbVksIGNwWCwgY3BZLCB0b1gsIHRvWSwgb3V0KVxue1xuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIHhiLFxuICAgICAgICB5YixcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSBvdXQgfHwgW107XG5cbiAgICBmdW5jdGlvbiBnZXRQdChuMSAsIG4yLCBwZXJjKSB7XG4gICAgICAgIHZhciBkaWZmID0gbjIgLSBuMTtcblxuICAgICAgICByZXR1cm4gbjEgKyAoIGRpZmYgKiBwZXJjICk7XG4gICAgfVxuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKyApIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIC8vIFRoZSBHcmVlbiBMaW5lXG4gICAgICAgIHhhID0gZ2V0UHQoIGZyb21YICwgY3BYICwgaiApO1xuICAgICAgICB5YSA9IGdldFB0KCBmcm9tWSAsIGNwWSAsIGogKTtcbiAgICAgICAgeGIgPSBnZXRQdCggY3BYICwgdG9YICwgaiApO1xuICAgICAgICB5YiA9IGdldFB0KCBjcFkgLCB0b1kgLCBqICk7XG5cbiAgICAgICAgLy8gVGhlIEJsYWNrIERvdFxuICAgICAgICB4ID0gZ2V0UHQoIHhhICwgeGIgLCBqICk7XG4gICAgICAgIHkgPSBnZXRQdCggeWEgLCB5YiAsIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUm91bmRlZFJlY3RhbmdsZTsiLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBjb3JlIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSVxuICovXG4vLyBleHBvcnQgY29yZSBhbmQgY29uc3QuIFdlIGFzc2lnbiBjb3JlIHRvIGNvbnN0IHNvIHRoYXQgdGhlIG5vbi1yZWZlcmVuY2UgdHlwZXMgaW4gY29uc3QgcmVtYWluIGluLXRhY3RcbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduKHJlcXVpcmUoJy4vY29uc3QnKSwgcmVxdWlyZSgnLi9tYXRoJyksIHtcbiAgICAvLyB1dGlsc1xuICAgIHV0aWxzOiByZXF1aXJlKCcuL3V0aWxzJyksXG4gICAgdGlja2VyOiByZXF1aXJlKCcuL3RpY2tlcicpLFxuXG4gICAgLy8gZGlzcGxheVxuICAgIERpc3BsYXlPYmplY3Q6ICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9EaXNwbGF5T2JqZWN0JyksXG4gICAgQ29udGFpbmVyOiAgICAgICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuXG4gICAgLy8gc3ByaXRlc1xuICAgIFNwcml0ZTogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBQYXJ0aWNsZUNvbnRhaW5lcjogICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lcicpLFxuICAgIFNwcml0ZVJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHRcbiAgICBUZXh0OiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHQvVGV4dCcpLFxuXG4gICAgLy8gcHJpbWl0aXZlc1xuICAgIEdyYXBoaWNzOiAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGE6ICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRGF0YScpLFxuICAgIEdyYXBoaWNzUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dHVyZXNcbiAgICBUZXh0dXJlOiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBCYXNlVGV4dHVyZTogICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL0Jhc2VUZXh0dXJlJyksXG4gICAgUmVuZGVyVGV4dHVyZTogICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgQmFzZVJlbmRlclRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmU6ICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnM6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVGV4dHVyZVV2cycpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gY2FudmFzXG4gICAgQ2FudmFzUmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyJyksXG4gICAgQ2FudmFzR3JhcGhpY3M6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzJyksXG4gICAgQ2FudmFzQnVmZmVyOiAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gd2ViZ2xcbiAgICBXZWJHTFJlbmRlcmVyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgU2hhZGVyOiAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXInKSxcbiAgICBPYmplY3RSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFJlbmRlclRhcmdldDogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuXG4gICAgLy8gZmlsdGVycyAtIHdlYmdsXG4gICAgQWJzdHJhY3RGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlcicpLFxuICAgIEZYQUFGaWx0ZXI6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFNwcml0ZU1hc2tGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlcicpLFxuXG4gICAgZ2xDb3JlOiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3Qgd2hpY2ggcmVuZGVyZXIgeW91IHNob3VsZCBiZSB1c2luZy5cbiAgICAgKiBXZWJHTCBpcyB0aGUgcHJlZmVycmVkIHJlbmRlcmVyIGFzIGl0IGlzIGEgbG90IGZhc3Rlci4gSWYgd2ViR0wgaXMgbm90IHN1cHBvcnRlZCBieVxuICAgICAqIHRoZSBicm93c2VyIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhIGNhbnZhcyByZW5kZXJlclxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAcGFyYW0gd2lkdGg9ODAwIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gaGVpZ2h0PTYwMCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSByZW5kZXJlcnMgdmlld1xuICAgICAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gICAgICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZV0ge2Jvb2xlYW59IGVuYWJsZXMgZHJhd2luZyBidWZmZXIgcHJlc2VydmF0aW9uLCBlbmFibGUgdGhpcyBpZiB5b3VcbiAgICAgKiAgICAgIG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIsIHJldGluYSB3b3VsZCBiZSAyXG4gICAgICogQHBhcmFtIFtub1dlYkdMPWZhbHNlXSB7Ym9vbGVhbn0gcHJldmVudHMgc2VsZWN0aW9uIG9mIFdlYkdMIHJlbmRlcmVyLCBldmVuIGlmIHN1Y2ggaXMgcHJlc2VudFxuICAgICAqXG4gICAgICogQHJldHVybiB7V2ViR0xSZW5kZXJlcnxDYW52YXNSZW5kZXJlcn0gUmV0dXJucyBXZWJHTCByZW5kZXJlciBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBDYW52YXNSZW5kZXJlclxuICAgICAqL1xuICAgIGF1dG9EZXRlY3RSZW5kZXJlcjogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMsIG5vV2ViR0wpXG4gICAge1xuICAgICAgICB3aWR0aCA9IHdpZHRoIHx8IDgwMDtcbiAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0IHx8IDYwMDtcblxuICAgICAgICBpZiAoIW5vV2ViR0wgJiYgY29yZS51dGlscy5pc1dlYkdMU3VwcG9ydGVkKCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgY29yZS5XZWJHTFJlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBjb3JlLkNhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgIH1cbn0pO1xuIiwiLy8gQHRvZG8gLSBpZ25vcmUgdGhlIHRvbyBtYW55IHBhcmFtZXRlcnMgd2FybmluZyBmb3Igbm93XG4vLyBzaG91bGQgZWl0aGVyIGZpeCBpdCBvciBjaGFuZ2UgdGhlIGpzaGludCBjb25maWdcbi8vIGpzaGludCAtVzA3MlxuXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuL1BvaW50Jyk7XG5cbi8qKlxuICogVGhlIHBpeGkgTWF0cml4IGNsYXNzIGFzIGFuIG9iamVjdCwgd2hpY2ggbWFrZXMgaXQgYSBsb3QgZmFzdGVyLFxuICogaGVyZSBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIGl0IDpcbiAqIHwgYSB8IGIgfCB0eHxcbiAqIHwgYyB8IGQgfCB0eXxcbiAqIHwgMCB8IDAgfCAxIHxcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIE1hdHJpeCgpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmIgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmMgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnR4ID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eSA9IDA7XG59XG5cbk1hdHJpeC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNYXRyaXg7XG5tb2R1bGUuZXhwb3J0cyA9IE1hdHJpeDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgTWF0cml4IG9iamVjdCBiYXNlZCBvbiB0aGUgZ2l2ZW4gYXJyYXkuIFRoZSBFbGVtZW50IHRvIE1hdHJpeCBtYXBwaW5nIG9yZGVyIGlzIGFzIGZvbGxvd3M6XG4gKlxuICogYSA9IGFycmF5WzBdXG4gKiBiID0gYXJyYXlbMV1cbiAqIGMgPSBhcnJheVszXVxuICogZCA9IGFycmF5WzRdXG4gKiB0eCA9IGFycmF5WzJdXG4gKiB0eSA9IGFycmF5WzVdXG4gKlxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX0gVGhlIGFycmF5IHRoYXQgdGhlIG1hdHJpeCB3aWxsIGJlIHBvcHVsYXRlZCBmcm9tLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJheSlcbntcbiAgICB0aGlzLmEgPSBhcnJheVswXTtcbiAgICB0aGlzLmIgPSBhcnJheVsxXTtcbiAgICB0aGlzLmMgPSBhcnJheVszXTtcbiAgICB0aGlzLmQgPSBhcnJheVs0XTtcbiAgICB0aGlzLnR4ID0gYXJyYXlbMl07XG4gICAgdGhpcy50eSA9IGFycmF5WzVdO1xufTtcblxuXG4vKipcbiAqIHNldHMgdGhlIG1hdHJpeCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gKiBAcGFyYW0ge251bWJlcn0gY1xuICogQHBhcmFtIHtudW1iZXJ9IGRcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eFxuICogQHBhcmFtIHtudW1iZXJ9IHR5XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHR4LCB0eSlcbntcbiAgICB0aGlzLmEgPSBhO1xuICAgIHRoaXMuYiA9IGI7XG4gICAgdGhpcy5jID0gYztcbiAgICB0aGlzLmQgPSBkO1xuICAgIHRoaXMudHggPSB0eDtcbiAgICB0aGlzLnR5ID0gdHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGZyb20gdGhlIGN1cnJlbnQgTWF0cml4IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3NlIHtib29sZWFufSBXaGV0aGVyIHdlIG5lZWQgdG8gdHJhbnNwb3NlIHRoZSBtYXRyaXggb3Igbm90XG4gKiBAcGFyYW0gW291dF0ge0FycmF5fSBJZiBwcm92aWRlZCB0aGUgYXJyYXkgd2lsbCBiZSBhc3NpZ25lZCB0byBvdXRcbiAqIEByZXR1cm4ge251bWJlcltdfSB0aGUgbmV3bHkgY3JlYXRlZCBhcnJheSB3aGljaCBjb250YWlucyB0aGUgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICh0cmFuc3Bvc2UsIG91dClcbntcbiAgICBpZiAoIXRoaXMuYXJyYXkpXG4gICAge1xuICAgICAgICB0aGlzLmFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg5KTtcbiAgICB9XG5cbiAgICB2YXIgYXJyYXkgPSBvdXQgfHwgdGhpcy5hcnJheTtcblxuICAgIGlmICh0cmFuc3Bvc2UpXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzJdID0gMDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IDA7XG4gICAgICAgIGFycmF5WzZdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbN10gPSB0aGlzLnR5O1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGFycmF5WzBdID0gdGhpcy5hO1xuICAgICAgICBhcnJheVsxXSA9IHRoaXMuYztcbiAgICAgICAgYXJyYXlbMl0gPSB0aGlzLnR4O1xuICAgICAgICBhcnJheVszXSA9IHRoaXMuYjtcbiAgICAgICAgYXJyYXlbNF0gPSB0aGlzLmQ7XG4gICAgICAgIGFycmF5WzVdID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbNl0gPSAwO1xuICAgICAgICBhcnJheVs3XSA9IDA7XG4gICAgICAgIGFycmF5WzhdID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59O1xuXG4vKipcbiAqIEdldCBhIG5ldyBwb3NpdGlvbiB3aXRoIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXG4gKiBDYW4gYmUgdXNlZCB0byBnbyBmcm9tIGEgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlIHRvIHRoZSB3b3JsZCBjb29yZGluYXRlIHNwYWNlLiAoZS5nLiByZW5kZXJpbmcpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCB0cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIHggPSBwb3MueDtcbiAgICB2YXIgeSA9IHBvcy55O1xuXG4gICAgbmV3UG9zLnggPSB0aGlzLmEgKiB4ICsgdGhpcy5jICogeSArIHRoaXMudHg7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmIgKiB4ICsgdGhpcy5kICogeSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gbmV3UG9zO1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgaW52ZXJzZSBvZiB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZSB0byBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gaW5wdXQpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCBpbnZlcnNlLXRyYW5zZm9ybWVkIHRocm91Z2ggdGhpcyBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBseUludmVyc2UgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIGlkID0gMSAvICh0aGlzLmEgKiB0aGlzLmQgKyB0aGlzLmMgKiAtdGhpcy5iKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5kICogaWQgKiB4ICsgLXRoaXMuYyAqIGlkICogeSArICh0aGlzLnR5ICogdGhpcy5jIC0gdGhpcy50eCAqIHRoaXMuZCkgKiBpZDtcbiAgICBuZXdQb3MueSA9IHRoaXMuYSAqIGlkICogeSArIC10aGlzLmIgKiBpZCAqIHggKyAoLXRoaXMudHkgKiB0aGlzLmEgKyB0aGlzLnR4ICogdGhpcy5iKSAqIGlkO1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogVHJhbnNsYXRlcyB0aGUgbWF0cml4IG9uIHRoZSB4IGFuZCB5LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudHJhbnNsYXRlID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy50eCArPSB4O1xuICAgIHRoaXMudHkgKz0geTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgc2NhbGUgdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geCBUaGUgYW1vdW50IHRvIHNjYWxlIGhvcml6b250YWxseVxuICogQHBhcmFtIHtudW1iZXJ9IHkgVGhlIGFtb3VudCB0byBzY2FsZSB2ZXJ0aWNhbGx5XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zY2FsZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuYSAqPSB4O1xuICAgIHRoaXMuZCAqPSB5O1xuICAgIHRoaXMuYyAqPSB4O1xuICAgIHRoaXMuYiAqPSB5O1xuICAgIHRoaXMudHggKj0geDtcbiAgICB0aGlzLnR5ICo9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBBcHBsaWVzIGEgcm90YXRpb24gdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgaW4gcmFkaWFucy5cbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZSA9IGZ1bmN0aW9uIChhbmdsZSlcbntcbiAgICB2YXIgY29zID0gTWF0aC5jb3MoIGFuZ2xlICk7XG4gICAgdmFyIHNpbiA9IE1hdGguc2luKCBhbmdsZSApO1xuXG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIHRoaXMuYSA9IGExICogY29zLXRoaXMuYiAqIHNpbjtcbiAgICB0aGlzLmIgPSBhMSAqIHNpbit0aGlzLmIgKiBjb3M7XG4gICAgdGhpcy5jID0gYzEgKiBjb3MtdGhpcy5kICogc2luO1xuICAgIHRoaXMuZCA9IGMxICogc2luK3RoaXMuZCAqIGNvcztcbiAgICB0aGlzLnR4ID0gdHgxICogY29zIC0gdGhpcy50eSAqIHNpbjtcbiAgICB0aGlzLnR5ID0gdHgxICogc2luICsgdGhpcy50eSAqIGNvcztcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcblxuICAgIHRoaXMuYSAgPSBtYXRyaXguYSAqIGExICsgbWF0cml4LmIgKiBjMTtcbiAgICB0aGlzLmIgID0gbWF0cml4LmEgKiBiMSArIG1hdHJpeC5iICogZDE7XG4gICAgdGhpcy5jICA9IG1hdHJpeC5jICogYTEgKyBtYXRyaXguZCAqIGMxO1xuICAgIHRoaXMuZCAgPSBtYXRyaXguYyAqIGIxICsgbWF0cml4LmQgKiBkMTtcblxuICAgIHRoaXMudHggPSBtYXRyaXgudHggKiBhMSArIG1hdHJpeC50eSAqIGMxICsgdGhpcy50eDtcbiAgICB0aGlzLnR5ID0gbWF0cml4LnR4ICogYjEgKyBtYXRyaXgudHkgKiBkMSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbWF0cml4IGJhc2VkIG9uIGFsbCB0aGUgYXZhaWxhYmxlIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFhcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFlcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVlcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3RhdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdYXG4gKiBAcGFyYW0ge251bWJlcn0gc2tld1lcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoeCwgeSwgcGl2b3RYLCBwaXZvdFksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZKVxue1xuICAgIHZhciBhLCBiLCBjLCBkLCBzciwgY3IsIGN5LCBzeSwgbnN4LCBjeDtcblxuICAgIHNyICA9IE1hdGguc2luKHJvdGF0aW9uKTtcbiAgICBjciAgPSBNYXRoLmNvcyhyb3RhdGlvbik7XG4gICAgY3kgID0gTWF0aC5jb3Moc2tld1kpO1xuICAgIHN5ICA9IE1hdGguc2luKHNrZXdZKTtcbiAgICBuc3ggPSAtTWF0aC5zaW4oc2tld1gpO1xuICAgIGN4ICA9ICBNYXRoLmNvcyhza2V3WCk7XG5cbiAgICBhICA9ICBjciAqIHNjYWxlWDtcbiAgICBiICA9ICBzciAqIHNjYWxlWDtcbiAgICBjICA9IC1zciAqIHNjYWxlWTtcbiAgICBkICA9ICBjciAqIHNjYWxlWTtcblxuICAgIHRoaXMuYSAgPSBjeSAqIGEgKyBzeSAqIGM7XG4gICAgdGhpcy5iICA9IGN5ICogYiArIHN5ICogZDtcbiAgICB0aGlzLmMgID0gbnN4ICogYSArIGN4ICogYztcbiAgICB0aGlzLmQgID0gbnN4ICogYiArIGN4ICogZDtcblxuICAgIHRoaXMudHggPSB4ICsgKCBwaXZvdFggKiBhICsgcGl2b3RZICogYyApO1xuICAgIHRoaXMudHkgPSB5ICsgKCBwaXZvdFggKiBiICsgcGl2b3RZICogZCApO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFByZXBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24obWF0cml4KVxue1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuXG4gICAgaWYgKG1hdHJpeC5hICE9PSAxIHx8IG1hdHJpeC5iICE9PSAwIHx8IG1hdHJpeC5jICE9PSAwIHx8IG1hdHJpeC5kICE9PSAxKVxuICAgIHtcbiAgICAgICAgdmFyIGExID0gdGhpcy5hO1xuICAgICAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgICAgIHRoaXMuYSAgPSBhMSptYXRyaXguYSt0aGlzLmIqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuYiAgPSBhMSptYXRyaXguYit0aGlzLmIqbWF0cml4LmQ7XG4gICAgICAgIHRoaXMuYyAgPSBjMSptYXRyaXguYSt0aGlzLmQqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuZCAgPSBjMSptYXRyaXguYit0aGlzLmQqbWF0cml4LmQ7XG4gICAgfVxuXG4gICAgdGhpcy50eCA9IHR4MSptYXRyaXguYSt0aGlzLnR5Km1hdHJpeC5jK21hdHJpeC50eDtcbiAgICB0aGlzLnR5ID0gdHgxKm1hdHJpeC5iK3RoaXMudHkqbWF0cml4LmQrbWF0cml4LnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEludmVydHMgdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5pbnZlcnQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBiMSA9IHRoaXMuYjtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIGQxID0gdGhpcy5kO1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuICAgIHZhciBuID0gYTEqZDEtYjEqYzE7XG5cbiAgICB0aGlzLmEgPSBkMS9uO1xuICAgIHRoaXMuYiA9IC1iMS9uO1xuICAgIHRoaXMuYyA9IC1jMS9uO1xuICAgIHRoaXMuZCA9IGExL247XG4gICAgdGhpcy50eCA9IChjMSp0aGlzLnR5LWQxKnR4MSkvbjtcbiAgICB0aGlzLnR5ID0gLShhMSp0aGlzLnR5LWIxKnR4MSkvbjtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIFJlc2V0cyB0aGlzIE1hdGl4IHRvIGFuIGlkZW50aXR5IChkZWZhdWx0KSBtYXRyaXguXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaWRlbnRpdHkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYSA9IDE7XG4gICAgdGhpcy5iID0gMDtcbiAgICB0aGlzLmMgPSAwO1xuICAgIHRoaXMuZCA9IDE7XG4gICAgdGhpcy50eCA9IDA7XG4gICAgdGhpcy50eSA9IDA7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBNYXRyaXggb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBBIGNvcHkgb2YgdGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1hdHJpeCA9IG5ldyBNYXRyaXgoKTtcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSB2YWx1ZXMgb2YgdGhlIGdpdmVuIG1hdHJpeCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgb25lcyBpbiB0aGlzIG1hdHJpeFxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGUgbWF0cml4IGdpdmVuIGluIHBhcmFtZXRlciB3aXRoIGl0cyB2YWx1ZXMgdXBkYXRlZC5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBBIGRlZmF1bHQgKGlkZW50aXR5KSBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LklERU5USVRZID0gbmV3IE1hdHJpeCgpO1xuXG4vKipcbiAqIEEgdGVtcCBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LlRFTVBfTUFUUklYID0gbmV3IE1hdHJpeCgpO1xuIiwiLyoqXG4gKiBUaGUgUG9pbnQgb2JqZWN0IHJlcHJlc2VudHMgYSBsb2NhdGlvbiBpbiBhIHR3by1kaW1lbnNpb25hbCBjb29yZGluYXRlIHN5c3RlbSwgd2hlcmUgeCByZXByZXNlbnRzXG4gKiB0aGUgaG9yaXpvbnRhbCBheGlzIGFuZCB5IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIGF4aXMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXNcbiAqL1xuZnVuY3Rpb24gUG9pbnQoeCwgeSlcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xufVxuXG5Qb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2ludDtcbm1vZHVsZS5leHBvcnRzID0gUG9pbnQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9pbnRcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBhIGNvcHkgb2YgdGhlIHBvaW50XG4gKi9cblBvaW50LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLngsIHRoaXMueSk7XG59O1xuXG4vKipcbiAqIENvcGllcyB4IGFuZCB5IGZyb20gdGhlIGdpdmVuIHBvaW50XG4gKlxuICogQHBhcmFtIHAge1BJWEkuUG9pbnR9XG4gKi9cblBvaW50LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKHApIHtcbiAgICB0aGlzLnNldChwLngsIHAueSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcG9pbnQgaXMgZXF1YWwgdG8gdGhpcyBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cblBvaW50LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiAocC54ID09PSB0aGlzLngpICYmIChwLnkgPT09IHRoaXMueSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIHBvaW50IHRvIGEgbmV3IHggYW5kIHkgcG9zaXRpb24uXG4gKiBJZiB5IGlzIG9taXR0ZWQsIGJvdGggeCBhbmQgeSB3aWxsIGJlIHNldCB0byB4LlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cblBvaW50LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLnggPSB4IHx8IDA7XG4gICAgdGhpcy55ID0geSB8fCAoICh5ICE9PSAwKSA/IHRoaXMueCA6IDAgKSA7XG59O1xuIiwiLyoqXG4gKiBNYXRoIGNsYXNzZXMgYW5kIHV0aWxpdGllcyBtaXhlZCBpbnRvIFBJWEkgbmFtZXNwYWNlLlxuICpcbiAqIEBsZW5kcyBQSVhJXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8vIFRoZXNlIHdpbGwgYmUgbWl4ZWQgdG8gYmUgbWFkZSBwdWJsaWNseSBhdmFpbGFibGUsXG4gICAgLy8gd2hpbGUgdGhpcyBtb2R1bGUgaXMgdXNlZCBpbnRlcm5hbGx5IGluIGNvcmVcbiAgICAvLyB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYW5kIGN1dCBkb3duIG9uXG4gICAgLy8gaW50ZXJuYWwgbW9kdWxlIHJlcXVpcmVzLlxuXG4gICAgUG9pbnQ6ICAgICAgcmVxdWlyZSgnLi9Qb2ludCcpLFxuICAgIE1hdHJpeDogICAgIHJlcXVpcmUoJy4vTWF0cml4JyksXG5cbiAgICBDaXJjbGU6ICAgICByZXF1aXJlKCcuL3NoYXBlcy9DaXJjbGUnKSxcbiAgICBFbGxpcHNlOiAgICByZXF1aXJlKCcuL3NoYXBlcy9FbGxpcHNlJyksXG4gICAgUG9seWdvbjogICAgcmVxdWlyZSgnLi9zaGFwZXMvUG9seWdvbicpLFxuICAgIFJlY3RhbmdsZTogIHJlcXVpcmUoJy4vc2hhcGVzL1JlY3RhbmdsZScpLFxuICAgIFJvdW5kZWRSZWN0YW5nbGU6IHJlcXVpcmUoJy4vc2hhcGVzL1JvdW5kZWRSZWN0YW5nbGUnKVxufTtcbiIsInZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2lyY2xlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKi9cbmZ1bmN0aW9uIENpcmNsZSh4LCB5LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuQ0lSQztcbn1cblxuQ2lyY2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENpcmNsZTtcbm1vZHVsZS5leHBvcnRzID0gQ2lyY2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIENpcmNsZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuQ2lyY2xlfSBhIGNvcHkgb2YgdGhlIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IENpcmNsZSh0aGlzLngsIHRoaXMueSwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGNpcmNsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgQ2lyY2xlXG4gKi9cbkNpcmNsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy5yYWRpdXMgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgZHggPSAodGhpcy54IC0geCksXG4gICAgICAgIGR5ID0gKHRoaXMueSAtIHkpLFxuICAgICAgICByMiA9IHRoaXMucmFkaXVzICogdGhpcy5yYWRpdXM7XG5cbiAgICBkeCAqPSBkeDtcbiAgICBkeSAqPSBkeTtcblxuICAgIHJldHVybiAoZHggKyBkeSA8PSByMik7XG59O1xuXG4vKipcbiogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIGNpcmNsZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuKi9cbkNpcmNsZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLnJhZGl1cywgdGhpcy55IC0gdGhpcy5yYWRpdXMsIHRoaXMucmFkaXVzICogMiwgdGhpcy5yYWRpdXMgKiAyKTtcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIEVsbGlwc2Ugb2JqZWN0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBoaXQgYXJlYSBmb3IgZGlzcGxheU9iamVjdHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBoYWxmIHdpZHRoIG9mIHRoaXMgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhpcyBlbGxpcHNlXG4gKi9cbmZ1bmN0aW9uIEVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuRUxJUDtcbn1cblxuRWxsaXBzZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFbGxpcHNlO1xubW9kdWxlLmV4cG9ydHMgPSBFbGxpcHNlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIEVsbGlwc2UgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkVsbGlwc2V9IGEgY29weSBvZiB0aGUgZWxsaXBzZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBFbGxpcHNlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgZWxsaXBzZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZHMgYXJlIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy9ub3JtYWxpemUgdGhlIGNvb3JkcyB0byBhbiBlbGxpcHNlIHdpdGggY2VudGVyIDAsMFxuICAgIHZhciBub3JteCA9ICgoeCAtIHRoaXMueCkgLyB0aGlzLndpZHRoKSxcbiAgICAgICAgbm9ybXkgPSAoKHkgLSB0aGlzLnkpIC8gdGhpcy5oZWlnaHQpO1xuXG4gICAgbm9ybXggKj0gbm9ybXg7XG4gICAgbm9ybXkgKj0gbm9ybXk7XG5cbiAgICByZXR1cm4gKG5vcm14ICsgbm9ybXkgPD0gMSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBlbGxpcHNlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLndpZHRoLCB0aGlzLnkgLSB0aGlzLmhlaWdodCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcbiIsInZhciBQb2ludCA9IHJlcXVpcmUoJy4uL1BvaW50JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBwb2ludHMge1BJWEkuUG9pbnRbXXxudW1iZXJbXXwuLi5QSVhJLlBvaW50fC4uLm51bWJlcn0gVGhpcyBjYW4gYmUgYW4gYXJyYXkgb2YgUG9pbnRzIHRoYXQgZm9ybSB0aGUgcG9seWdvbixcbiAqICAgICAgYSBmbGF0IGFycmF5IG9mIG51bWJlcnMgdGhhdCB3aWxsIGJlIGludGVycHJldGVkIGFzIFt4LHksIHgseSwgLi4uXSwgb3IgdGhlIGFyZ3VtZW50cyBwYXNzZWQgY2FuIGJlXG4gKiAgICAgIGFsbCB0aGUgcG9pbnRzIG9mIHRoZSBwb2x5Z29uIGUuZy4gYG5ldyBQSVhJLlBvbHlnb24obmV3IFBJWEkuUG9pbnQoKSwgbmV3IFBJWEkuUG9pbnQoKSwgLi4uKWAsIG9yIHRoZVxuICogICAgICBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZSBmbGF0IHgseSB2YWx1ZXMgZS5nLiBgbmV3IFBvbHlnb24oeCx5LCB4LHksIHgseSwgLi4uKWAgd2hlcmUgYHhgIGFuZCBgeWAgYXJlXG4gKiAgICAgIE51bWJlcnMuXG4gKi9cbmZ1bmN0aW9uIFBvbHlnb24ocG9pbnRzXylcbntcbiAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBhc3NpZ25tZW50IGRlb3B0XG4gICAgLy8gc2VlIHNlY3Rpb24gMy4xOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICB2YXIgcG9pbnRzID0gcG9pbnRzXztcblxuICAgIC8vaWYgcG9pbnRzIGlzbid0IGFuIGFycmF5LCB1c2UgYXJndW1lbnRzIGFzIHRoZSBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBwb2ludHMubGVuZ3RoOyArK2EpIHtcbiAgICAgICAgICAgIHBvaW50c1thXSA9IGFyZ3VtZW50c1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHRoaXMgaXMgYW4gYXJyYXkgb2YgcG9pbnRzLCBjb252ZXJ0IGl0IHRvIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzXG4gICAgaWYgKHBvaW50c1swXSBpbnN0YW5jZW9mIFBvaW50KVxuICAgIHtcbiAgICAgICAgdmFyIHAgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHAucHVzaChwb2ludHNbaV0ueCwgcG9pbnRzW2ldLnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9pbnRzID0gcDtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB0aGUgcG9pbnRzIG9mIHRoaXMgcG9seWdvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlBPTFk7XG59XG5cblBvbHlnb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9seWdvbjtcbm1vZHVsZS5leHBvcnRzID0gUG9seWdvbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBwb2x5Z29uXG4gKlxuICogQHJldHVybiB7UElYSS5Qb2x5Z29ufSBhIGNvcHkgb2YgdGhlIHBvbHlnb25cbiAqL1xuUG9seWdvbi5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9seWdvbih0aGlzLnBvaW50cy5zbGljZSgpKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIGluc2lkZSA9IGZhbHNlO1xuXG4gICAgLy8gdXNlIHNvbWUgcmF5Y2FzdGluZyB0byB0ZXN0IGhpdHNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svcG9pbnQtaW4tcG9seWdvbi9ibG9iL21hc3Rlci9pbmRleC5qc1xuICAgIHZhciBsZW5ndGggPSB0aGlzLnBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBsZW5ndGggLSAxOyBpIDwgbGVuZ3RoOyBqID0gaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHhpID0gdGhpcy5wb2ludHNbaSAqIDJdLCB5aSA9IHRoaXMucG9pbnRzW2kgKiAyICsgMV0sXG4gICAgICAgICAgICB4aiA9IHRoaXMucG9pbnRzW2ogKiAyXSwgeWogPSB0aGlzLnBvaW50c1tqICogMiArIDFdLFxuICAgICAgICAgICAgaW50ZXJzZWN0ID0gKCh5aSA+IHkpICE9PSAoeWogPiB5KSkgJiYgKHggPCAoeGogLSB4aSkgKiAoeSAtIHlpKSAvICh5aiAtIHlpKSArIHhpKTtcblxuICAgICAgICBpZiAoaW50ZXJzZWN0KVxuICAgICAgICB7XG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc2lkZTtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIHRoZSBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgZGVmaW5lZCBieSBpdHMgcG9zaXRpb24sIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCB3aWR0aCBvZiB0aGlzIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByZWN0YW5nbGVcbiAqL1xuZnVuY3Rpb24gUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJFQ1Q7XG59XG5cblJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZWN0YW5nbGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlY3RhbmdsZTtcblxuLyoqXG4gKiBBIGNvbnN0YW50IGVtcHR5IHJlY3RhbmdsZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuUmVjdGFuZ2xlLkVNUFRZID0gbmV3IFJlY3RhbmdsZSgwLCAwLCAwLCAwKTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgUmVjdGFuZ2xlXG4gKi9cblJlY3RhbmdsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHggPj0gdGhpcy54ICYmIHggPCB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPCB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUm91bmRlZCBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgdGhhdCBoYXMgbmljZSByb3VuZGVkIGNvcm5lcnMsIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0IGFuZCBpdHMgcmFkaXVzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBDb250cm9scyB0aGUgcmFkaXVzIG9mIHRoZSByb3VuZGVkIGNvcm5lcnNcbiAqL1xuZnVuY3Rpb24gUm91bmRlZFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMjBcbiAgICAgKi9cbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCAyMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUlJFQztcbn1cblxuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3VuZGVkUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3VuZGVkUmVjdGFuZ2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHJldHVybiB7UElYSS5Sb3VuZGVkUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJvdW5kZWRSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnJhZGl1cyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDw9IHRoaXMueCArIHRoaXMud2lkdGgpXG4gICAge1xuICAgICAgICBpZiAoeSA+PSB0aGlzLnkgJiYgeSA8PSB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBQYXJ0aWNsZUNvbnRhaW5lciBjbGFzcyBpcyBhIHJlYWxseSBmYXN0IHZlcnNpb24gb2YgdGhlIENvbnRhaW5lciBidWlsdCBzb2xlbHkgZm9yIHNwZWVkLFxuICogc28gdXNlIHdoZW4geW91IG5lZWQgYSBsb3Qgb2Ygc3ByaXRlcyBvciBwYXJ0aWNsZXMuIFRoZSB0cmFkZW9mZiBvZiB0aGUgUGFydGljbGVDb250YWluZXIgaXMgdGhhdCBhZHZhbmNlZFxuICogZnVuY3Rpb25hbGl0eSB3aWxsIG5vdCB3b3JrLiBQYXJ0aWNsZUNvbnRhaW5lciBpbXBsZW1lbnRzIG9ubHkgdGhlIGJhc2ljIG9iamVjdCB0cmFuc2Zvcm0gKHBvc2l0aW9uLCBzY2FsZSwgcm90YXRpb24pLlxuICogQW55IG90aGVyIGZ1bmN0aW9uYWxpdHkgbGlrZSB0aW50aW5nLCBtYXNraW5nLCBldGMgd2lsbCBub3Qgd29yayBvbiBzcHJpdGVzIGluIHRoaXMgYmF0Y2guXG4gKlxuICogSXQncyBleHRyZW1lbHkgZWFzeSB0byB1c2UgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgY29udGFpbmVyID0gbmV3IFBhcnRpY2xlQ29udGFpbmVyKCk7XG4gKlxuICogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSlcbiAqIHtcbiAqICAgICB2YXIgc3ByaXRlID0gbmV3IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcIm15SW1hZ2UucG5nXCIpO1xuICogICAgIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogfVxuICogYGBgXG4gKlxuICogQW5kIGhlcmUgeW91IGhhdmUgYSBodW5kcmVkIHNwcml0ZXMgdGhhdCB3aWxsIGJlIHJlbmRlcmVyIGF0IHRoZSBzcGVlZCBvZiBsaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFttYXhTaXplPTE1MDAwXSB7bnVtYmVyfSBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFydGljbGVzIHRoYXQgY2FuIGJlIHJlbmRlcmVyIGJ5IHRoZSBjb250YWluZXIuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXNdIHtvYmplY3R9IFRoZSBwcm9wZXJ0aWVzIG9mIGNoaWxkcmVuIHRoYXQgc2hvdWxkIGJlIHVwbG9hZGVkIHRvIHRoZSBncHUgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuc2NhbGU9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHNjYWxlIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnBvc2l0aW9uPXRydWVdIHtib29sZWFufSBXaGVuIHRydWUsIHBvc2l0aW9uIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnJvdGF0aW9uPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCByb3RhdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy51dnM9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHV2cyBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5hbHBoYT1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgYWxwaGEgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW2JhdGNoU2l6ZT0xNTAwMF0ge251bWJlcn0gTnVtYmVyIG9mIHBhcnRpY2xlcyBwZXIgYmF0Y2guXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQ29udGFpbmVyKG1heFNpemUsIHByb3BlcnRpZXMsIGJhdGNoU2l6ZSlcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIGJhdGNoU2l6ZSA9IGJhdGNoU2l6ZSB8fCAxNTAwMDsgLy9DT05TVC5TUFJJVEVfQkFUQ0hfU0laRTsgLy8gMjAwMCBpcyBhIG5pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSAvIGRlc2t0b3BcbiAgICBtYXhTaXplID0gbWF4U2l6ZSB8fCAxNTAwMDtcblxuICAgIC8vIE1ha2luZyBzdXJlIHRoZSBiYXRjaCBzaXplIGlzIHZhbGlkXG4gICAgLy8gNjU1MzUgaXMgbWF4IHZlcnRleCBpbmRleCBpbiB0aGUgaW5kZXggYnVmZmVyIChzZWUgUGFydGljbGVSZW5kZXJlcilcbiAgICAvLyBzbyBtYXggbnVtYmVyIG9mIHBhcnRpY2xlcyBpcyA2NTUzNiAvIDQgPSAxNjM4NFxuICAgIHZhciBtYXhCYXRjaFNpemUgPSAxNjM4NDtcbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4QmF0Y2hTaXplKSB7XG4gICAgICAgIGJhdGNoU2l6ZSA9IG1heEJhdGNoU2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4U2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhTaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBwcm9wZXJ0aWVzIHRvIGJlIGR5bmFtaWMgKHRydWUpIC8gc3RhdGljIChmYWxzZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW5bXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4U2l6ZSA9IG1heFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYXRjaFNpemUgPSBiYXRjaFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVDaGlsZHJlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGNhbnZhcyByZW5kZXJlcmluZy4gSWYgdHJ1ZSB0aGVuIHRoZSBlbGVtZW50cyB3aWxsIGJlIHBvc2l0aW9uZWQgYXQgdGhlIG5lYXJlc3QgcGl4ZWwuIFRoaXMgcHJvdmlkZXMgYSBuaWNlIHNwZWVkIGJvb3N0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlO1xuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSB0cnVlO1xuXG4gICAgdGhpcy5zZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xufVxuXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQ29udGFpbmVyO1xuXG4vKipcbiAqIFNldHMgdGhlIHByaXZhdGUgcHJvcGVydGllcyBhcnJheSB0byBkeW5hbWljIC8gc3RhdGljIGJhc2VkIG9uIHRoZSBwYXNzZWQgcHJvcGVydGllcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcHJvcGVydGllcyB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyB0byBiZSB1cGxvYWRlZFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuc2V0UHJvcGVydGllcyA9IGZ1bmN0aW9uKHByb3BlcnRpZXMpXG57XG4gICAgaWYgKCBwcm9wZXJ0aWVzICkge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzBdID0gJ3NjYWxlJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnNjYWxlIDogdGhpcy5fcHJvcGVydGllc1swXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1sxXSA9ICdwb3NpdGlvbicgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5wb3NpdGlvbiA6IHRoaXMuX3Byb3BlcnRpZXNbMV07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMl0gPSAncm90YXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucm90YXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzJdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzNdID0gJ3V2cycgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy51dnMgOiB0aGlzLl9wcm9wZXJ0aWVzWzNdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzRdID0gJ2FscGhhJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLmFscGhhIDogdGhpcy5fcHJvcGVydGllc1s0XTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgLy8gVE9ETyBkb24ndCBuZWVkIHRvIVxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIC8vICBQSVhJLkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtLmNhbGwoIHRoaXMgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGFpbmVyIHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgd2ViZ2wgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlciggcmVuZGVyZXIucGx1Z2lucy5wYXJ0aWNsZSApO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUucmVuZGVyKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgZmxhZyB0aGF0IHN0YXRpYyBkYXRhIHNob3VsZCBiZSB1cGRhdGVkIHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUub25DaGlsZHJlbkNoYW5nZSA9IGZ1bmN0aW9uIChzbWFsbGVzdENoaWxkSW5kZXgpXG57XG4gICAgdmFyIGJ1ZmZlckluZGV4ID0gTWF0aC5mbG9vcihzbWFsbGVzdENoaWxkSW5kZXggLyB0aGlzLl9iYXRjaFNpemUpO1xuICAgIGlmIChidWZmZXJJbmRleCA8IHRoaXMuX2J1ZmZlclRvVXBkYXRlKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gYnVmZmVySW5kZXg7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIGNhbnZhcyByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGlzUm90YXRlZCA9IHRydWU7XG5cbiAgICB2YXIgcG9zaXRpb25YID0gMDtcbiAgICB2YXIgcG9zaXRpb25ZID0gMDtcblxuICAgIHZhciBmaW5hbFdpZHRoID0gMDtcbiAgICB2YXIgZmluYWxIZWlnaHQgPSAwO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICBpZiAoIWNoaWxkLnZpc2libGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZyYW1lID0gY2hpbGQudGV4dHVyZS5mcmFtZTtcblxuICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhICogY2hpbGQuYWxwaGE7XG5cbiAgICAgICAgaWYgKGNoaWxkLnJvdGF0aW9uICUgKE1hdGguUEkgKiAyKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgZmFzdGVzdCAgd2F5IHRvIG9wdGltaXNlISAtIGlmIHJvdGF0aW9uIGlzIDAgdGhlbiB3ZSBjYW4gYXZvaWQgYW55IGtpbmQgb2Ygc2V0VHJhbnNmb3JtIGNhbGxcbiAgICAgICAgICAgIGlmIChpc1JvdGF0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoICogY2hpbGQuc2NhbGUueCkgKyBjaGlsZC5wb3NpdGlvbi54ICArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0ICogY2hpbGQuc2NhbGUueSkgKyBjaGlsZC5wb3NpdGlvbi55ICArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLng7XG4gICAgICAgICAgICBmaW5hbEhlaWdodCA9IGZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnk7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzUm90YXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoaWxkLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICAgICAgdmFyIGNoaWxkVHJhbnNmb3JtID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHggfCAwLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eSB8IDBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvblggPSAoKGNoaWxkLmFuY2hvci54KSAqICgtZnJhbWUud2lkdGgpICsgMC41KTtcbiAgICAgICAgICAgIHBvc2l0aW9uWSA9ICgoY2hpbGQuYW5jaG9yLnkpICogKC1mcmFtZS5oZWlnaHQpICsgMC41KTtcblxuICAgICAgICAgICAgZmluYWxXaWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgIGNoaWxkLnRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgZnJhbWUueCxcbiAgICAgICAgICAgIGZyYW1lLnksXG4gICAgICAgICAgICBmcmFtZS53aWR0aCxcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCxcbiAgICAgICAgICAgIHBvc2l0aW9uWCxcbiAgICAgICAgICAgIHBvc2l0aW9uWSxcbiAgICAgICAgICAgIGZpbmFsV2lkdGgsXG4gICAgICAgICAgICBmaW5hbEhlaWdodFxuICAgICAgICApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUNoaWxkcmVuPWZhbHNlXSB7Ym9vbGVhbn0gaWYgc2V0IHRvIHRydWUsIGFsbCB0aGUgY2hpbGRyZW4gd2lsbCBoYXZlIHRoZWlyIGRlc3Ryb3kgbWV0aG9kIGNhbGxlZCBhcyB3ZWxsXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgaWYgKHRoaXMuX2J1ZmZlcnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLl9idWZmZXJzW2ldLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xufTtcbiIsIlxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZUJ1ZmZlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvUGFydGljbGVCdWZmZXIuamF2YVxuICovXG5cbi8qKlxuICogVGhlIHBhcnRpY2xlIGJ1ZmZlciBtYW5hZ2VzIHRoZSBzdGF0aWMgYW5kIGR5bmFtaWMgYnVmZmVycyBmb3IgYSBwYXJ0aWNsZSBjb250YWluZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gUGFydGljbGVCdWZmZXIoZ2wsIHByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBzaXplKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRTaXplID0gMjtcblxuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYSBzaW5nbGUgdmVydGV4IGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGUgYnVmZmVyIGNhbiBob2xkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gc2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBkeW5hbWljLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIHN0YXRpYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcblxuICAgICAgICBpZihkeW5hbWljUHJvcGVydHlGbGFnc1tpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5keW5hbWljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuZHluYW1pY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW5pdEJ1ZmZlcnMoKTtcblxufVxuXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZUJ1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVCdWZmZXI7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmluaXRCdWZmZXJzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpO1xuICAgIHZhciBwcm9wZXJ0eTtcblxuICAgIHZhciBkeW5hbWljT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG5cbiAgICAgICAgcHJvcGVydHkub2Zmc2V0ID0gZHluYW1pY09mZnNldDtcbiAgICAgICAgZHluYW1pY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLmR5bmFtaWNTdHJpZGUgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5keW5hbWljU3RyaWRlICogNCk7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcblxuXG4gICAgLy8gc3RhdGljIC8vXG4gICAgdmFyIHN0YXRpY09mZnNldCA9IDA7XG4gICAgdGhpcy5zdGF0aWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IHN0YXRpY09mZnNldDtcbiAgICAgICAgc3RhdGljT2Zmc2V0ICs9IHByb3BlcnR5LnNpemU7XG4gICAgICAgIHRoaXMuc3RhdGljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5zdGF0aWNTdHJpZGUgKiA0KTtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNEYXRhLCBnbC5EWU5BTUlDX0RSQVcpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBkeW5hbWljIHByb3BlcnRpZXMuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUudXBsb2FkRHluYW1pYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIHByb3BlcnR5LnVwbG9hZEZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIHRoaXMuZHluYW1pY0RhdGEsIHRoaXMuZHluYW1pY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy5keW5hbWljRGF0YSk7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHN0YXRpYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZFN0YXRpYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLnN0YXRpY0RhdGEsIHRoaXMuc3RhdGljU3RyaWRlLCBwcm9wZXJ0eS5vZmZzZXQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuc3RhdGljRGF0YSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIHRvIHRoZSBHUFVcbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpLCBwcm9wZXJ0eTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuc3RhdGljU3RyaWRlICogNCwgcHJvcGVydHkub2Zmc2V0ICogNCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVCdWZmZXIuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLnN0YXRpY0J1ZmZlcik7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgUGFydGljbGVTaGFkZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlU2hhZGVyJyksXG4gICAgUGFydGljbGVCdWZmZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlQnVmZmVyJyksXG4gICAgbWF0aCAgICAgICAgICAgID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFBhcnRpY2xlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICAvLyBhbmQgbWF4IG51bWJlciBvZiBlbGVtZW50IGluIHRoZSBpbmRleCBidWZmZXIgaXMgMTYzODQgKiA2ID0gOTgzMDRcbiAgICAvLyBDcmVhdGluZyBhIGZ1bGwgaW5kZXggYnVmZmVyLCBvdmVyaGVhZCBpcyA5ODMwNCAqIDIgPSAxOTZLb1xuICAgIHZhciBudW1JbmRpY2VzID0gOTgzMDQ7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KG51bUluZGljZXMpO1xuXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCBudW1JbmRpY2VzOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gbnVsbDtcblxuICAgIHRoaXMudGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xufVxuXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbigncGFydGljbGUnLCBQYXJ0aWNsZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBXaGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gbmV3IFBhcnRpY2xlU2hhZGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlcik7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggaW5kZXgsIHNvIDY1NTM1IC8gNiA9IDEwOTIyLlxuXG4gICAgLy91cGxvYWQgdGhlIGluZGV4IGRhdGFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IFtcbiAgICAgICAgLy8gdmVydGljZXNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbixcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkVmVydGljZXMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBwb3NpdGlvbkRhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFBvc2l0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcm90YXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFSb3RhdGlvbixcbiAgICAgICAgICAgIHNpemU6MSxcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkUm90YXRpb24sXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyB1dnNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFV2cyxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIGFscGhhRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZEFscGhhLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfVxuICAgIF07XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBwYXJ0aWNsZSBiYXRjaC5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gYmluZCB0aGUgbWFpbiB0ZXh0dXJlXG4gICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAvLyBiaW5kIHRoZSBidWZmZXJzXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnNoYWRlcjtcblxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBwYXJ0aWNsZSBjb250YWluZXIgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBjaGlsZHJlbiA9IGNvbnRhaW5lci5jaGlsZHJlbixcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aCxcbiAgICAgICAgbWF4U2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemU7XG5cbiAgICBpZih0b3RhbENoaWxkcmVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIGlmKHRvdGFsQ2hpbGRyZW4gPiBtYXhTaXplKVxuICAgIHtcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IG1heFNpemU7XG4gICAgfVxuXG4gICAgaWYoIWNvbnRhaW5lci5fYnVmZmVycylcbiAgICB7XG4gICAgICAgIGNvbnRhaW5lci5fYnVmZmVycyA9IHRoaXMuZ2VuZXJhdGVCdWZmZXJzKCBjb250YWluZXIgKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXZzIGhhdmUgbm90IHVwZGF0ZWQgdGhlbiBubyBwb2ludCByZW5kZXJpbmcganVzdCB5ZXQhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb250YWluZXIuYmxlbmRNb2RlKTtcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgbSA9ICBjb250YWluZXIud29ybGRUcmFuc2Zvcm0uY29weSggdGhpcy50ZW1wTWF0cml4ICk7XG4gICAgbS5wcmVwZW5kKCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeCApO1xuICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5zaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCBtLnRvQXJyYXkodHJ1ZSkpO1xuICAgIGdsLnVuaWZvcm0xZih0aGlzLnNoYWRlci51bmlmb3Jtcy51QWxwaGEuX2xvY2F0aW9uLCBjb250YWluZXIud29ybGRBbHBoYSk7XG5cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgdGV4dHVyZSBpcyBib3VuZC4uXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gY2hpbGRyZW5bMF0uX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSB0ZXh0dXJlIGhhcyBub3QgdXBkYXRlZCB0aGVuIGxldHMgbm90IHVwbG9hZCBhbnkgc3RhdGljIHByb3BlcnRpZXNcbiAgICAgICAgaWYoIXRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZShiYXNlVGV4dHVyZSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFjb250YWluZXIuX3Byb3BlcnRpZXNbMF0gfHwgIWNvbnRhaW5lci5fcHJvcGVydGllc1szXSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICB9XG5cbiAgICAvLyBub3cgbGV0cyB1cGxvYWQgYW5kIHJlbmRlciB0aGUgYnVmZmVycy4uXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgdG90YWxDaGlsZHJlbjsgaSArPSBiYXRjaFNpemUsIGogKz0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhbW91bnQgPSAoIHRvdGFsQ2hpbGRyZW4gLSBpKTtcbiAgICAgICAgaWYoYW1vdW50ID4gYmF0Y2hTaXplKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbW91bnQgPSBiYXRjaFNpemU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYnVmZmVyID0gY29udGFpbmVyLl9idWZmZXJzW2pdO1xuXG4gICAgICAgIC8vIHdlIGFsd2F5cyB1cGxvYWQgdGhlIGR5bmFtaWNcbiAgICAgICAgYnVmZmVyLnVwbG9hZER5bmFtaWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG5cbiAgICAgICAgLy8gd2Ugb25seSB1cGxvYWQgdGhlIHN0YXRpYyBjb250ZW50IHdoZW4gd2UgaGF2ZSB0byFcbiAgICAgICAgaWYoY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9PT0gailcbiAgICAgICAge1xuICAgICAgICAgICAgYnVmZmVyLnVwbG9hZFN0YXRpYyhjaGlsZHJlbiwgaSwgYW1vdW50KTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSBqICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJpbmQgdGhlIGJ1ZmZlclxuICAgICAgICBidWZmZXIuYmluZCggdGhpcy5zaGFkZXIgKTtcblxuICAgICAgICAgLy8gbm93IGRyYXcgdGhvc2Ugc3Vja2FzIVxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBhbW91bnQgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIG9uZSBwYXJ0aWNsZSBidWZmZXIgZm9yIGVhY2ggY2hpbGQgaW4gdGhlIGNvbnRhaW5lciB3ZSB3YW50IHRvIHJlbmRlciBhbmQgdXBkYXRlcyBpbnRlcm5hbCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7UElYSS5QYXJ0aWNsZUNvbnRhaW5lcn0gVGhlIGNvbnRhaW5lciB0byByZW5kZXIgdXNpbmcgdGhpcyBQYXJ0aWNsZVJlbmRlcmVyXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmdlbmVyYXRlQnVmZmVycyA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgYnVmZmVycyA9IFtdLFxuICAgICAgICBzaXplID0gY29udGFpbmVyLl9tYXhTaXplLFxuICAgICAgICBiYXRjaFNpemUgPSBjb250YWluZXIuX2JhdGNoU2l6ZSxcbiAgICAgICAgZHluYW1pY1Byb3BlcnR5RmxhZ3MgPSBjb250YWluZXIuX3Byb3BlcnRpZXMsXG4gICAgICAgIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBiYXRjaFNpemUpXG4gICAge1xuICAgICAgICBidWZmZXJzLnB1c2gobmV3IFBhcnRpY2xlQnVmZmVyKGdsLCB0aGlzLnByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBiYXRjaFNpemUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVycztcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgdmVydGljaWVzLlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciB2ZXJ0aWNlcyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkVmVydGljZXMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIHZhciBzcHJpdGUsXG4gICAgICAgIHRleHR1cmUsXG4gICAgICAgIHRyaW0sXG4gICAgICAgIHN4LFxuICAgICAgICBzeSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKSB7XG5cbiAgICAgICAgc3ByaXRlID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldO1xuICAgICAgICB0ZXh0dXJlID0gc3ByaXRlLl90ZXh0dXJlO1xuICAgICAgICBzeCA9IHNwcml0ZS5zY2FsZS54O1xuICAgICAgICBzeSA9IHNwcml0ZS5zY2FsZS55O1xuXG4gICAgICAgIGlmICh0ZXh0dXJlLnRyaW0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZCB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG5cbiAgICAgICAgICAgIHcxID0gdHJpbS54IC0gc3ByaXRlLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGgxID0gdHJpbS55IC0gc3ByaXRlLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICBoMCA9IGgxICsgdGV4dHVyZS5jcm9wLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS1zcHJpdGUuYW5jaG9yLngpO1xuICAgICAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC1zcHJpdGUuYW5jaG9yLng7XG5cbiAgICAgICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtc3ByaXRlLmFuY2hvci55KTtcbiAgICAgICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXNwcml0ZS5hbmNob3IueTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gaDEgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IGgwICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHBvc2l0aW9ucyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUG9zaXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVQb3NpdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5wb3NpdGlvbjtcblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciByb3RhdGlvbiB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUm90YXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVSb3RhdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5yb3RhdGlvbjtcblxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVJvdGF0aW9uO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBVdnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFV2cyA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmVVdnMgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uX3RleHR1cmUuX3V2cztcblxuICAgICAgICBpZiAodGV4dHVyZVV2cylcbiAgICAgICAge1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHRleHR1cmVVdnMueDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IHRleHR1cmVVdnMueTA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB0ZXh0dXJlVXZzLngxO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSB0ZXh0dXJlVXZzLnkxO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHRleHR1cmVVdnMueDI7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSB0ZXh0dXJlVXZzLnkyO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHRleHR1cmVVdnMueDM7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSB0ZXh0dXJlVXZzLnkzO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyB5b3Uga25vdyB0aGlzIGNhbiBiZSBlYXNpZXIhXG4gICAgICAgICAgICBhcnJheVtvZmZzZXRdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIGFscGhhIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRBbHBoYSA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICAge1xuICAgICAgICB2YXIgc3ByaXRlQWxwaGEgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uYWxwaGE7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlQWxwaGE7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBQYXJ0aWNsZVJlbmRlcmVyLlxuICpcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIuZ2wpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5nbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgfVxuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG4gICAgdGhpcy50ZW1wTWF0cml4ID0gbnVsbDtcbn07XG4iLCJ2YXIgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1RleHR1cmVTaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVNoYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFRleHR1cmVTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVBvc2l0aW9uQ29vcmQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhU2NhbGU7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgZmxvYXQgYVJvdGF0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgdmVjMiB2ID0gYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICcgICB2LnggPSAoYVZlcnRleFBvc2l0aW9uLngpICogY29zKGFSb3RhdGlvbikgLSAoYVZlcnRleFBvc2l0aW9uLnkpICogc2luKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2LnkgPSAoYVZlcnRleFBvc2l0aW9uLngpICogc2luKGFSb3RhdGlvbikgKyAoYVZlcnRleFBvc2l0aW9uLnkpICogY29zKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2ID0gdiArIGFQb3NpdGlvbkNvb3JkOycsXG5cbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKHYsIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gaGVsbG9cbiAgICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IHVBbHBoYTsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciAqIHVBbHBoYTsnLFxuICAgICAgICAgICAgJyAgaWYgKGNvbG9yLmEgPT0gMC4wKSBkaXNjYXJkOycsXG4gICAgICAgICAgICAnICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB1QWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVBvc2l0aW9uQ29vcmQ6IDAsXG4gICAgICAgICAgIC8vIGFTY2FsZTogICAgICAgICAwLFxuICAgICAgICAgICAgYVJvdGF0aW9uOiAgICAgIDBcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBURU1QIEhBQ0tcblxufVxuXG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmVTaGFkZXIucHJvdG90eXBlKTtcblBhcnRpY2xlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlU2hhZGVyO1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogVGhlIENhbnZhc1JlbmRlcmVyIGRyYXdzIHRoZSBzY2VuZSBhbmQgYWxsIGl0cyBjb250ZW50IG9udG8gYSAyZCBjYW52YXMuIFRoaXMgcmVuZGVyZXIgc2hvdWxkIGJlIHVzZWQgZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgd2ViR0wuXG4gKiBEb24ndCBmb3JnZXQgdG8gYWRkIHRoZSBDYW52YXNSZW5kZXJlci52aWV3IHRvIHlvdXIgRE9NIG9yIHlvdSB3aWxsIG5vdCBzZWUgYW55dGhpbmcgOilcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc3lzdGVtIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSBzeXN0ZW0gdGhpcyByZW5kZXJlciBpcyBmb3IuXG4gKiBAcGFyYW0gW3dpZHRoPTgwMF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9NjAwXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBdIHtudW1iZXJ9IFRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSByZW5kZXJlZCBhcmVhIChzaG93biBpZiBub3QgdHJhbnNwYXJlbnQpLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFN5c3RlbVJlbmRlcmVyKHN5c3RlbSwgd2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHV0aWxzLnNheUhlbGxvKHN5c3RlbSk7XG5cbiAgICAvLyBwcmVwYXJlIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zW2ldID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zW2ldID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OU1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBvcHRpb25zID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5SRU5ERVJFUl9UWVBFLlVOS05PV05cbiAgICAgKiBAc2VlIFBJWEkuUkVOREVSRVJfVFlQRVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuVU5LTk9XTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA4MDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgODAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA2MDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHRvXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLnZpZXcgPSBvcHRpb25zLnZpZXcgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gb3B0aW9ucy5yZXNvbHV0aW9uO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy50cmFuc3BhcmVudCA9IG9wdGlvbnMudHJhbnNwYXJlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByZW5kZXIgdmlldyBzaG91bGQgYmUgcmVzaXplZCBhdXRvbWF0aWNhbGx5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IG9wdGlvbnMuYXV0b1Jlc2l6ZSB8fCBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrcyB0aGUgYmxlbmQgbW9kZXMgdXNlZnVsIGZvciB0aGlzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbWl4ZWQ+fVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIHByZXNlcnZlRHJhd2luZ0J1ZmZlciBmbGFnIGFmZmVjdHMgd2hldGhlciBvciBub3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyByZXRhaW5lZCBhZnRlciByZW5kZXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvciBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gICAgICogSWYgdGhlIHNjZW5lIGlzIE5PVCB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGEgY2FudmFzIHNpemVkIGZpbGxSZWN0IG9wZXJhdGlvbiBldmVyeSBmcmFtZSB0byBzZXQgdGhlIGNhbnZhcyBiYWNrZ3JvdW5kIGNvbG9yLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGNsZWFyUmVjdCB0byBjbGVhciB0aGUgY2FudmFzIGV2ZXJ5IGZyYW1lLlxuICAgICAqIERpc2FibGUgdGhpcyBieSBzZXR0aW5nIHRoaXMgdG8gZmFsc2UuIEZvciBleGFtcGxlIGlmIHlvdXIgZ2FtZSBoYXMgYSBjYW52YXMgZmlsbGluZyBiYWNrZ3JvdW5kIGltYWdlIHlvdSBvZnRlbiBkb24ndCBuZWVkIHRoaXMgc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdFxuICAgICAqL1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyO1xuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gICAgICogSGFuZHkgZm9yIGNyaXNwIHBpeGVsIGFydCBhbmQgc3BlZWQgb24gbGVnYWN5IGRldmljZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSBvcHRpb25zLnJvdW5kUGl4ZWxzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSAweDAwMDAwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGFuIFtSLCBHLCBCXSBhcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gJyMwMDAwMDAnO1xuXG4gICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBvcHRpb25zLmJhY2tncm91bmRDb2xvciB8fCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3I7IC8vIHJ1biBiZyBjb2xvciBzZXR0ZXJcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB0cmFuc2Zvcm06e3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpfSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCByb290IG9iamVjdCB0aGF0IHRoZSByZW5kZXJlciB0cmllZCB0byByZW5kZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbn1cblxuLy8gY29uc3RydWN0b3JcblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeXN0ZW1SZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3lzdGVtUmVuZGVyZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZpbGwgaWYgbm90IHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3lzdGVtUmVuZGVyZXIjXG4gICAgICovXG4gICAgYmFja2dyb3VuZENvbG9yOlxuICAgIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9IHV0aWxzLmhleDJzdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHV0aWxzLmhleDJyZ2IodmFsLCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB2aWV3IHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy52aWV3LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0aGlzLnZpZXcuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5hdXRvUmVzaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgYW5kIG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgQ2FudmFzIERPTSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldykge1xuICAgIGlmIChyZW1vdmVWaWV3ICYmIHRoaXMudmlldy5wYXJlbnROb2RlKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy52aWV3KTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICB0aGlzLnZpZXcgPSBudWxsO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMDtcblxuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gbnVsbDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSBudWxsO1xufTtcbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgQ2FudmFzTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ0NhbnZhcycsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5DQU5WQVM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy52aWV3LmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogdGhpcy50cmFuc3BhcmVudCB9KTtcblxuICAgIC8qKlxuICAgICAqIEJvb2xlYW4gZmxhZyBjb250cm9sbGluZyBjYW52YXMgcmVmcmVzaC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIGEgQ2FudmFzTWFza01hbmFnZXIsIGhhbmRsZXMgbWFza2luZyB3aGVuIHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc01hc2tNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBuZXcgQ2FudmFzTWFza01hbmFnZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgcHJvcGVydHkgdXNlZCB0byBzZXQgdGhlIGNhbnZhcyBzbW9vdGhpbmcgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdpbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnd2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21vekltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnb0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21zSW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIHRoaXMuX21hcEJsZW5kTW9kZXMoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge1xuICAgICAgICB3b3JsZFRyYW5zZm9ybTogbmV3IG1hdGguTWF0cml4KCksXG4gICAgICAgIHdvcmxkQWxwaGE6IDFcbiAgICB9O1xuXG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihDYW52YXNSZW5kZXJlcik7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIHRoaXMgY2FudmFzIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IG9iamVjdC5wYXJlbnQ7XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBvYmplY3Q7XG5cbiAgICBvYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgb2JqZWN0LnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIHRoaXMuY29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF07XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMgJiYgdGhpcy52aWV3LnNjcmVlbmNhbnZhcylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGVhckJlZm9yZVJlbmRlcilcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy53aWR0aCAsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChvYmplY3QsIHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGlzLmVtaXQoJ3Bvc3RyZW5kZXInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpXG57XG4gICAgdGhpcy5kZXN0cm95UGx1Z2lucygpO1xuXG4gICAgLy8gY2FsbCB0aGUgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLnJlZnJlc2ggPSB0cnVlO1xuXG4gICAgdGhpcy5tYXNrTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG5cbiAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KVxue1xuICAgIHZhciB0ZW1wQ29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJDYW52YXModGhpcyk7XG4gICAgdGhpcy5jb250ZXh0ID0gdGVtcENvbnRleHQ7XG59O1xuXG4vKipcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXIjcmVzaXplXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAodywgaClcbntcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcywgdywgaCk7XG5cbiAgICAvL3Jlc2V0IHRoZSBzY2FsZSBtb2RlLi4gb2RkbHkgdGhpcyBzZWVtcyB0byBiZSByZXNldCB3aGVuIHRoZSBjYW52YXMgaXMgcmVzaXplZC5cbiAgICAvL3N1cmVseSBhIGJyb3dzZXIgYnVnPz8gTGV0IHBpeGkgZml4IHRoYXQgZm9yIHlvdS4uXG4gICAgaWYodGhpcy5zbW9vdGhQcm9wZXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dFt0aGlzLnNtb290aFByb3BlcnR5XSA9IChDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBNYXBzIFBpeGkgYmxlbmQgbW9kZXMgdG8gY2FudmFzIGJsZW5kIG1vZGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fbWFwQmxlbmRNb2RlcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmJsZW5kTW9kZXMpXG4gICAge1xuICAgICAgICB0aGlzLmJsZW5kTW9kZXMgPSB7fTtcblxuICAgICAgICBpZiAodXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdtdWx0aXBseSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc2NyZWVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdvdmVybGF5JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdkYXJrZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ2xpZ2h0ZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ2NvbG9yLWRvZGdlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdjb2xvci1idXJuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IQVJEX0xJR0hUXSAgICA9ICdoYXJkLWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb2Z0LWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdkaWZmZXJlbmNlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5FWENMVVNJT05dICAgICA9ICdleGNsdXNpb24nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ2h1ZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc2F0dXJhdGUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ2NvbG9yJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdsdW1pbm9zaXR5JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb29sIG5ldyBibGVuZCBtb2RlcyBpbiBjYW52YXMgJ2NvdWdoJyBpZSAnY291Z2gnXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TQVRVUkFUSU9OXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBjYW52YXNcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKi9cbmZ1bmN0aW9uIENhbnZhc0J1ZmZlcih3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBDYW52YXMgb2JqZWN0IHRoYXQgYmVsb25ncyB0byB0aGlzIENhbnZhc0J1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBBIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHdvLWRpbWVuc2lvbmFsIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn1cblxuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc0J1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzQnVmZmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYW52YXNCdWZmZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB2YWw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyBidWZmZXIgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNhbnZhc0J1ZmZlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENsZWFycyB0aGUgY2FudmFzIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIENhbnZhc0J1ZmZlciBjbGFzcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgY2FudmFzIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBjYW52YXMuXG4gKlxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlciB0byBkcmF3IHRoZSBwcmltaXRpdmUgZ3JhcGhpY3MgZGF0YS5cbiAqIEBzdGF0aWNcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xudmFyIENhbnZhc0dyYXBoaWNzID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0dyYXBoaWNzO1xuXG4vKlxuICogUmVuZGVycyBhIEdyYXBoaWNzIG9iamVjdCB0byBhIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBhY3R1YWwgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIDJkIGRyYXdpbmcgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIHdvcmxkQWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljc1RpbnQoZ3JhcGhpY3MpO1xuICAgICAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuX2ZpbGxUaW50O1xuICAgICAgICB2YXIgbGluZUNvbG9yID0gZGF0YS5fbGluZVRpbnQ7XG5cbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRPRE8gLSBuZWVkIHRvIGJlIFVuZGVmaW5lZCFcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsMCwyKk1hdGguUEkpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcblxuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJ4ID0gc2hhcGUueDtcbiAgICAgICAgICAgIHZhciByeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBzaGFwZS53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgcmFkaXVzID0gc2hhcGUucmFkaXVzO1xuXG4gICAgICAgICAgICB2YXIgbWF4UmFkaXVzID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyIHwgMDtcbiAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1cyA+IG1heFJhZGl1cyA/IG1heFJhZGl1cyA6IHJhZGl1cztcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGxDb2xvciB8fCBkYXRhLmZpbGxDb2xvciA9PT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3MgbWFza1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBtYXNrXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY29udGV4dCAyZCBtZXRob2Qgb2YgdGhlIGNhbnZhc1xuICovXG5DYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIGxlbiA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG5cbiAgICBpZiAobGVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludCBhcmUgdGhlIHNhbWUgY2xvc2UgdGhlIHBhdGggLSBtdWNoIG5lYXRlciA6KVxuICAgICAgICAgICAgaWYgKHBvaW50c1swXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gJiYgcG9pbnRzWzFdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5yZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuXG4gICAgICAgICAgICAvLyBlbGxpcHNlIGNvZGUgdGFrZW4gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG5cbiAgICAgICAgICAgIHZhciB3ID0gc2hhcGUud2lkdGggKiAyO1xuICAgICAgICAgICAgdmFyIGggPSBzaGFwZS5oZWlnaHQgKiAyO1xuXG4gICAgICAgICAgICB2YXIgeCA9IHNoYXBlLnggLSB3LzI7XG4gICAgICAgICAgICB2YXIgeSA9IHNoYXBlLnkgLSBoLzI7XG5cbiAgICAgICAgICAgIHZhciBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICAgICAgICAgICAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgIHhlID0geCArIHcsICAgICAgICAgICAvLyB4LWVuZFxuICAgICAgICAgICAgICAgIHllID0geSArIGgsICAgICAgICAgICAvLyB5LWVuZFxuICAgICAgICAgICAgICAgIHhtID0geCArIHcgLyAyLCAgICAgICAvLyB4LW1pZGRsZVxuICAgICAgICAgICAgICAgIHltID0geSArIGggLyAyOyAgICAgICAvLyB5LW1pZGRsZVxuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhlLCB5bSArIG95LCB4bSArIG94LCB5ZSwgeG0sIHllKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdGludCBvZiBhIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB0aGF0IHdpbGwgaGF2ZSBpdHMgdGludCB1cGRhdGVkXG4gKlxuICovXG5DYW52YXNHcmFwaGljcy51cGRhdGVHcmFwaGljc1RpbnQgPSBmdW5jdGlvbiAoZ3JhcGhpY3MpXG57XG4gICAgaWYgKGdyYXBoaWNzLnRpbnQgPT09IDB4RkZGRkZGICYmIGdyYXBoaWNzLl9wcmV2VGludCA9PT0gZ3JhcGhpY3MudGludClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGhpY3MuX3ByZXZUaW50ID0gZ3JhcGhpY3MudGludDtcblxuICAgIHZhciB0aW50UiA9IChncmFwaGljcy50aW50ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIHRpbnRHID0gKGdyYXBoaWNzLnRpbnQgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50QiA9IChncmFwaGljcy50aW50ICYgMHhGRikvIDI1NTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuZmlsbENvbG9yIHwgMDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEubGluZUNvbG9yIHwgMDtcblxuICAgICAgICAvKlxuICAgICAgICB2YXIgY29sb3JSID0gKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JHID0gKGZpbGxDb2xvciA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIHZhciBjb2xvckIgPSAoZmlsbENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBmaWxsQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcblxuICAgICAgICBjb2xvclIgPSAobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIGNvbG9yRyA9IChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckIgPSAobGluZUNvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBsaW5lQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcbiAgICAgICAgKi9cblxuICAgICAgICAvLyBzdXBlciBpbmxpbmUgY29zIGltIGFuIG9wdGltaXphdGlvbiBOQVpJIDopXG4gICAgICAgIGRhdGEuX2ZpbGxUaW50ID0gKCgoZmlsbENvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChmaWxsQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG4gICAgICAgIGRhdGEuX2xpbmVUaW50ID0gKCgobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChsaW5lQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG5cbiAgICB9XG59O1xuXG4iLCJ2YXIgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuL0NhbnZhc0dyYXBoaWNzJyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgdG8gaGFuZGxlIG1hc2tpbmcuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDYW52YXNNYXNrTWFuYWdlcigpXG57fVxuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzTWFza01hbmFnZXI7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgYWRkcyBpdCB0byB0aGUgY3VycmVudCBzdGFjayBvZiBtYXNrcy5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge29iamVjdH0gdGhlIG1hc2tEYXRhIHRoYXQgd2lsbCBiZSBwdXNoZWRcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhLCByZW5kZXJlcilcbntcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2F2ZSgpO1xuXG4gICAgdmFyIGNhY2hlQWxwaGEgPSBtYXNrRGF0YS5hbHBoYTtcbiAgICB2YXIgdHJhbnNmb3JtID0gbWFza0RhdGEud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICAvL1RPRE8gc3Vwb3J0IHNwcml0ZSBhbHBoYSBtYXNrcz8/XG4gICAgLy9sb3RzIG9mIGVmZm9ydCByZXF1aXJlZC4gSWYgZGVtYW5kIGlzIGdyZWF0IGVub3VnaC4uXG4gICAgaWYoIW1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sobWFza0RhdGEsIHJlbmRlcmVyLmNvbnRleHQpO1xuICAgICAgICByZW5kZXJlci5jb250ZXh0LmNsaXAoKTtcbiAgICB9XG5cbiAgICBtYXNrRGF0YS53b3JsZEFscGhhID0gY2FjaGVBbHBoYTtcbn07XG5cbi8qKlxuICogUmVzdG9yZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlIHRoZSBtYXNrIHdhcyBhcHBsaWVkLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIFNwcml0ZS9UZXh0dXJlIHRpbnRpbmcuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNUaW50ZXIgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzVGludGVyO1xuXG4vKipcbiAqIEJhc2ljYWxseSB0aGlzIG1ldGhvZCBqdXN0IG5lZWRzIGEgc3ByaXRlIGFuZCBhIGNvbG9yIGFuZCB0aW50cyB0aGUgc3ByaXRlIHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIHRpbnRlZCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUgPSBmdW5jdGlvbiAoc3ByaXRlLCBjb2xvcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHNwcml0ZS50ZXh0dXJlO1xuXG4gICAgY29sb3IgPSBDYW52YXNUaW50ZXIucm91bmRDb2xvcihjb2xvcik7XG5cbiAgICB2YXIgc3RyaW5nQ29sb3IgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG5cbiAgICB0ZXh0dXJlLnRpbnRDYWNoZSA9IHRleHR1cmUudGludENhY2hlIHx8IHt9O1xuXG4gICAgaWYgKHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl07XG4gICAgfVxuXG4gICAgIC8vIGNsb25lIHRleHR1cmUuLlxuICAgIHZhciBjYW52YXMgPSBDYW52YXNUaW50ZXIuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLy9DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCh0ZXh0dXJlLCBzdHJpbmdDb2xvciwgY2FudmFzKTtcbiAgICBDYW52YXNUaW50ZXIudGludE1ldGhvZCh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKTtcblxuICAgIGlmIChDYW52YXNUaW50ZXIuY29udmVydFRpbnRUb0ltYWdlKVxuICAgIHtcbiAgICAgICAgLy8gaXMgdGhpcyBiZXR0ZXI/XG4gICAgICAgIHZhciB0aW50SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgdGludEltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcblxuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSB0aW50SW1hZ2U7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSA9IGNhbnZhcztcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCBjb252ZXJ0aW5nIHRoZSB0ZXh0dXJlIHRvIGFuIGltYWdlIHRoZW4gd2UgbmVlZCB0byBsb3NlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhc1xuICAgICAgICBDYW52YXNUaW50ZXIuY2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ211bHRpcGx5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgPSBmdW5jdGlvbiAodGV4dHVyZSwgY29sb3IsIGNhbnZhcylcbntcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgIHZhciBjcm9wID0gdGV4dHVyZS5jcm9wLmNsb25lKCk7XG4gICAgY3JvcC54ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC55ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC53aWR0aCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AuaGVpZ2h0ICo9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXMud2lkdGggPSBjcm9wLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wLmhlaWdodDtcblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tYXRvcCc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ292ZXJsYXknIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhPdmVybGF5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgY3JvcC54LFxuICAgICAgICBjcm9wLnksXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodFxuICAgICk7XG5cbiAgICAvLyBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5Jztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgcGl4ZWwgcGVyIHBpeGVsLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuICAgIHZhciByID0gcmdiVmFsdWVzWzBdLCBnID0gcmdiVmFsdWVzWzFdLCBiID0gcmdiVmFsdWVzWzJdO1xuXG4gICAgdmFyIHBpeGVsRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIHZhciBwaXhlbHMgPSBwaXhlbERhdGEuZGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGl4ZWxzLmxlbmd0aDsgaSArPSA0KVxuICAgIHtcbiAgICAgICAgcGl4ZWxzW2krMF0gKj0gcjtcbiAgICAgICAgcGl4ZWxzW2krMV0gKj0gZztcbiAgICAgICAgcGl4ZWxzW2krMl0gKj0gYjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnB1dEltYWdlRGF0YShwaXhlbERhdGEsIDAsIDApO1xufTtcblxuLyoqXG4gKiBSb3VuZHMgdGhlIHNwZWNpZmllZCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gcm91bmQsIHNob3VsZCBiZSBhIGhleCBjb2xvclxuICovXG5DYW52YXNUaW50ZXIucm91bmRDb2xvciA9IGZ1bmN0aW9uIChjb2xvcilcbntcbiAgICB2YXIgc3RlcCA9IENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuXG4gICAgcmdiVmFsdWVzWzBdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzBdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMV0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMV0gLyBzdGVwKSAqIHN0ZXApO1xuICAgIHJnYlZhbHVlc1syXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1syXSAvIHN0ZXApICogc3RlcCk7XG5cbiAgICByZXR1cm4gdXRpbHMucmdiMmhleChyZ2JWYWx1ZXMpO1xufTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygc3RlcHMgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgY2FwIHdoZW4gcm91bmRpbmcgY29sb3JzLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhY2hlU3RlcHNQZXJDb2xvckNoYW5uZWwgPSA4O1xuXG4vKipcbiAqIFRpbnQgY2FjaGUgYm9vbGVhbiBmbGFnLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSA9IGZhbHNlO1xuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkLCBjb25zZXF1ZW50bHkgdGhlIGFiaWxpdHkgdG8gdGludCB1c2luZyB0aGUgbXVsdGlwbHkgbWV0aG9kLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID0gdXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpO1xuXG4vKipcbiAqIFRoZSB0aW50aW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKi9cbkNhbnZhc1RpbnRlci50aW50TWV0aG9kID0gQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID8gQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgOiAgQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWw7XG4iLCJ2YXIgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuXHR1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgVGV4dHVyZU1hbmFnZXIgPSBmdW5jdGlvbihnbClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIHRyYWNrIHRleHR1cmVzIGluIHRoZSByZW5kZXJlciBzbyB3ZSBjYW4gbm8gbG9uZ2VyIGxpc3RlbiB0byB0aGVtIG9uIGRlc3RydWN0aW9uLlxuXHR0aGlzLl9tYW5hZ2VkVGV4dHVyZXMgPSBbXTtcbiAgICB0aGlzLmdsVGV4dHVyZXMgPSB7fTtcblxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmdldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cbi8qKlxuICogVXBkYXRlcyBhbmQvb3IgQ3JlYXRlcyBhIFdlYkdMIHRleHR1cmUgZm9yIHRoZSByZW5kZXJlcidzIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB1cGRhdGVcbiAqL1xuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG5cdGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXS8vdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG5cbiAgICBpZiAoIWdsVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGdsVGV4dHVyZSA9IG5ldyBHTFRleHR1cmUoZ2wpO1xuICAgICAgICBnbFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHRydWVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbFRleHR1cmU7XG5cbiAgICAgICAvLyB0aGlzLmdsVGV4dHVyZXNbdGV4dHVyZS51aWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgIHRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub24oJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xuICAgIH1cblxuICAgIGdsVGV4dHVyZS51cGxvYWQodGV4dHVyZS5zb3VyY2UpO1xuICAgIFxuICAgIC8vVE9ETyBjaGVjayBpcyBwb3dlciBvZiB0d28uLlxuICAgIGdsVGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuXG4gICAgLy8gVE9ETyBjaGVjayBmb3Igc2NhbGluZyB0eXBlXG4gICAgZ2xUZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKTtcblxuICAgIHJldHVybiAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG59XG5cbi8qKlxuICogRGVsZXRlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byBkZXN0cm95XG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUsIF9za2lwUmVtb3ZlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0uZGVzdHJveSgpO1xuICAgICAgICB0ZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGVUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcblxuXG4gICAgICAgIGRlbGV0ZSB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdO1xuXG4gICAgICAgIGlmICghX3NraXBSZW1vdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzLmluZGV4T2YodGV4dHVyZSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLl9tYW5hZ2VkVGV4dHVyZXMsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24oKVxue1xuXHQvLyBlbXB0eSBhbGwgdGhlIG9sZCBnbCB0ZXh0dXJlcyBhcyB0aGV5IGFyZSB1c2VsZXNzIG5vd1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIGlmICh0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgLy8gZGVzdHJveSBtYW5hZ2VkIHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgdGhpcy5kZXN0cm95VGV4dHVyZSh0ZXh0dXJlLCB0cnVlKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFuYWdlZFRleHR1cmVzID0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlTWFuYWdlcjtcblxuIiwidmFyIFN5c3RlbVJlbmRlcmVyID0gcmVxdWlyZSgnLi4vU3lzdGVtUmVuZGVyZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL01hc2tNYW5hZ2VyJyksXG4gICAgU3RlbmNpbE1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyJyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIEJsZW5kTW9kZU1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIEZYQUFGaWx0ZXIgPSByZXF1aXJlKCcuL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi9UZXh0dXJlTWFuYWdlcicpLFxuICAgIGNyZWF0ZUNvbnRleHQgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5jcmVhdGVDb250ZXh0LFxuICAgIG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aSA9IHJlcXVpcmUoJy4vdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpJyksXG4gICAgbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgV2ViR0xSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgd2ViR0wgZW5hYmxlZCBjYW52YXMuIFRoaXMgcmVuZGVyZXJcbiAqIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wuIFRoaXMgUmVuZGVyIHdvcmtzIGJ5IGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgd2ViR0xCYXRjaHMuXG4gKiBTbyBubyBuZWVkIGZvciBTcHJpdGUgQmF0Y2hlcyBvciBTcHJpdGUgQ2xvdWRzLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgdmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD0wXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD0wXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcy4gSWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseSB0aGVuIEZYQUEgYW50aWFsaWFzaW5nIGlzIHVzZWRcbiAqIEBwYXJhbSBbb3B0aW9ucy5mb3JjZUZYQUE9ZmFsc2VdIHtib29sZWFufSBmb3JjZXMgRlhBQSBhbnRpYWxpYXNpbmcgdG8gYmUgdXNlZCBvdmVyIG5hdGl2ZS4gRlhBQSBpcyBmYXN0ZXIsIGJ1dCBtYXkgbm90IGFsd2F5cyBsb29rIGFzIGdyZWF0XG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLiBJZiB5b3Ugd2lzaCB0byBzZXQgdGhpcyB0byBmYWxzZSwgeW91ICptdXN0KiBzZXQgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHRvIGB0cnVlYC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWZcbiAqICAgICAgeW91IG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHQuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgU3lzdGVtUmVuZGVyZXIuY2FsbCh0aGlzLCAnV2ViR0wnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgcmVuZGVyZXIgYXMgYSBzdGFuZGFyZGlzZWQgY29uc3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0vL1xuICAgICAqXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQgPSB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHBhc3NlZCBpbiB0byBjcmVhdGUgYSBuZXcgd2ViZ2wgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0ge1xuICAgICAgICBhbHBoYTogdGhpcy50cmFuc3BhcmVudCxcbiAgICAgICAgYW50aWFsaWFzOiBvcHRpb25zLmFudGlhbGlhcyxcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnRyYW5zcGFyZW50ICYmIHRoaXMudHJhbnNwYXJlbnQgIT09ICdub3RNdWx0aXBsaWVkJyxcbiAgICAgICAgc3RlbmNpbDogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgIH07XG5cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhWzNdID0gdGhpcy50cmFuc3BhcmVudCA/IDAgOiAxO1xuXG4gICAgLyoqXG4gICAgICogRGVhbHMgd2l0aCBtYW5hZ2luZyB0aGUgc2hhZGVyIHByb2dyYW1zIGFuZCB0aGVpciBhdHRyaWJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG5ldyBTaGFkZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWFza3MgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IE1hc2tNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIgPSBuZXcgU3RlbmNpbE1hbmFnZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5GaWx0ZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgYmxlbmRNb2Rlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CbGVuZE1vZGVNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlciA9IG5ldyBCbGVuZE1vZGVNYW5hZ2VyKHRoaXMpO1xuXG4gICAgXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgT2JqZWN0UmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk9iamVjdFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbmV3IE9iamVjdFJlbmRlcmVyKHRoaXMpO1xuXG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBzbyBpdCBpcyByZWFkeSBmb3IgdGhlIG1hbmFnZXJzLlxuICAgIHRoaXMuZ2wgPSBjcmVhdGVDb250ZXh0KHRoaXMudmlldywgdGhpcy5fY29udGV4dE9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcblxuICAgIC8vIG1hcCBzb21lIHdlYkdMIGJsZW5kIGFuZCBkcmF3bW9kZXMuLlxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aShnbCk7XG4gICAgdGhpcy5kcmF3TW9kZXMgPSBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbClcblxuICAgIHRoaXMuX2FjdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldH1cbiAgICAgKi9cbiAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihXZWJHTFJlbmRlcmVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBXZWJHTCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuX2luaXRDb250ZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgLy8gY3JlYXRlIGEgdGV4dHVyZSBtYW5hZ2VyLi4uXG4gICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG5ldyBUZXh0dXJlTWFuYWdlcihnbCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIGRlZmF1bHQgcGl4aSBzZXR0aW5ncy4uXG4gICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcblxuXG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG51bGwsIHRoaXMucmVzb2x1dGlvbiwgdHJ1ZSk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LmNsZWFyQ29sb3IgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhO1xuICAgIFxuICAgIHRoaXMuYmluZFJlbmRlclRhcmdldCh0aGlzLnJvb3RSZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy5lbWl0KCdjb250ZXh0JywgZ2wpO1xuXG4gICAgLy8gc2V0dXAgdGhlIHdpZHRoL2hlaWdodCBwcm9wZXJ0aWVzIGFuZCBnbCB2aWV3cG9ydFxuICAgIHRoaXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsgICAgXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBpdHMgd2ViR0wgdmlld1xuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gdGhlIG9iamVjdCB0byBiZSByZW5kZXJlZFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdClcbntcbiAgICB0aGlzLmVtaXQoJ3ByZXJlbmRlcicpO1xuXG4gICAgLy8gbm8gcG9pbnQgcmVuZGVyaW5nIGlmIG91ciBjb250ZXh0IGhhcyBiZWVuIGJsb3duIHVwIVxuICAgIGlmICh0aGlzLmdsLmlzQ29udGV4dExvc3QoKSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBkaXNwbGF5T2JqZWN0O1xuXG4gICAgdmFyIGNhY2hlUGFyZW50ID0gZGlzcGxheU9iamVjdC5wYXJlbnQ7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgZGlzcGxheU9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICBkaXNwbGF5T2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIHRoaXMucm9vdFJlbmRlclRhcmdldCwgdGhpcy5jbGVhckJlZm9yZVJlbmRlcik7Ly90aGlzLnByb2plY3Rpb24pO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBEaXNwbGF5IE9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSBUaGUgcmVuZGVyIHRhcmdldCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgZGlzcGxheSBvYmplY3RcbiAqXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcmVuZGVyVGFyZ2V0LCBjbGVhcikvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblxuICAgIGlmKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIGZpbHRlciBtYW5hZ2VyXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnNldEZpbHRlclN0YWNrKCByZW5kZXJUYXJnZXQuZmlsdGVyU3RhY2sgKTtcblxuICAgIC8vIHJlbmRlciB0aGUgc2NlbmUhXG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJXZWJHTCh0aGlzKTtcblxuICAgIC8vIGZpbmlzaCB0aGUgY3VycmVudCByZW5kZXJlci4uXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXJlciB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSBvYmplY3RSZW5kZXJlciB7UElYSS5PYmplY3RSZW5kZXJlcn0gVGhlIG9iamVjdCByZW5kZXJlciB0byB1c2UuXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldE9iamVjdFJlbmRlcmVyID0gZnVuY3Rpb24gKG9iamVjdFJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRSZW5kZXJlciA9PT0gb2JqZWN0UmVuZGVyZXIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RvcCgpO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gb2JqZWN0UmVuZGVyZXI7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgd2ViR0wgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHdlYkdMIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHdlYkdMIHZpZXdcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSB0aGlzLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRvIHRoZSBvbmUgZ2l2ZW4gaW4gcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9IHRoZSBuZXcgcmVuZGVyIHRhcmdldFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5iaW5kUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICBpZihyZW5kZXJUYXJnZXQgIT09IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBpZih0aGlzLl9hY3RpdmVTaGFkZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gcmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuc2V0TWFza1N0YWNrKCByZW5kZXJUYXJnZXQuc3RlbmNpbE1hc2tTdGFjayApO1xuICAgIH1cbn1cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFNoYWRlciA9IGZ1bmN0aW9uIChzaGFkZXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgLy9UT0RPIGNhY2hlXG4gICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyICE9PSBzaGFkZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBzaGFkZXI7XG4gICAgICAgIHNoYWRlci5iaW5kKCk7XG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB9XG59XG5cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgbG9jYXRpb24pXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vVE9ETyB0ZXN0IHBlcmYgb2YgY2FjaGU/XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCAwO1xuXG4gICAgaWYodGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uICE9PSBsb2NhdGlvbikvL1xuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uID0gbG9jYXRpb25cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uICk7XG4gICAgfVxuXG4gICAgLy9UT0RPIC0gY2FuIHdlIGNhY2hlIHRoaXMgdGV4dHVyZSB0b28/XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7ICAgICAgXG4gICAgXG4gICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIGJpbmQgdGhlIHRleHR1cmUuLlxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXS5iaW5kKCk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogSGFuZGxlcyBhIGxvc3Qgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRMb3N0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgYSByZXN0b3JlZCB3ZWJnbCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9pbml0Q29udGV4dCgpO1xuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIucmVtb3ZlQWxsKCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciAoZXZlbnQgbGlzdGVuZXJzLCBzcHJpdGViYXRjaCwgZXRjLi4uKVxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIHJlbW92ZSBsaXN0ZW5lcnNcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuaGFuZGxlQ29udGV4dExvc3QpO1xuICAgIHRoaXMudmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkKTtcblxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIuZGVzdHJveUFsbCgpO1xuXG4gICAgLy8gY2FsbCBiYXNlIGRlc3Ryb3lcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHJlbW92ZVZpZXcpO1xuXG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgLy8gZGVzdHJveSB0aGUgbWFuYWdlcnNcbiAgICB0aGlzLnNoYWRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSBudWxsO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0gbnVsbDtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICB0aGlzLmdsID0gbnVsbDtcbn07XG5cbiIsInZhciBEZWZhdWx0U2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBQSVhJIGZpbHRlci4gQ3VycmVudGx5IG9ubHkgV2ViR0wgc3VwcG9ydHMgZmlsdGVycy5cbiAqIElmIHlvdSB3YW50IHRvIG1ha2UgYSBjdXN0b20gZmlsdGVyIHRoaXMgc2hvdWxkIGJlIHlvdXIgYmFzZSBjbGFzcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdmVydGV4U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIGZyYWdtZW50U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlIGFzIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gdW5pZm9ybXMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuaWZvcm1zIGZvciB0aGlzIGZpbHRlci5cbiAqL1xuZnVuY3Rpb24gQWJzdHJhY3RGaWx0ZXIodmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMpXG57XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBzaGFkZXJzXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVycyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4dHJhIHBhZGRpbmcgdGhhdCB0aGUgZmlsdGVyIG1pZ2h0IG5lZWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmlmb3JtcyBhcyBhbiBvYmplY3RcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29kZSBvZiB0aGUgdmVydGV4IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIGZyYW1lbnQgc2hhZGVyXG4gICAgICogQG1lbWJlciB7c3RyaW5nW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICAvL1RPRE8gYSByZW1pbmRlciAtIHdvdWxkIGJlIGNvb2wgdG8gaGF2ZSBsb3dlciByZXMgZmlsdGVycyBhcyB0aGlzIHdvdWxkIGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlLlxuXG4gICAgLy90eXBlb2YgZnJhZ21lbnRTcmMgPT09ICdzdHJpbmcnID8gZnJhZ21lbnRTcmMuc3BsaXQoJycpIDogKGZyYWdtZW50U3JjIHx8IFtdKTtcblxufVxuXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RGaWx0ZXI7XG5cbi8qKlxuICogR3JhYnMgYSBzaGFkZXIgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIHNoYWRlciBmcm9tXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5nZXRTaGFkZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXJzW2dsLmlkXTtcblxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gbmV3IERlZmF1bHRTaGFkZXIocmVuZGVyZXIuc2hhZGVyTWFuYWdlcixcbiAgICAgICAgICAgIHRoaXMudmVydGV4U3JjLFxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudFNyYyxcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNoYWRlcnNbZ2wuaWRdID0gc2hhZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8gY2xlYXIgdGhlIG91dHB1dFRhcmdldFxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xufTtcblxuLyoqXG4gKiBTeW5jcyBhIHVuaWZvcm0gYmV0d2VlbiB0aGUgY2xhc3Mgb2JqZWN0IGFuZCB0aGUgc2hhZGVycy5cbiAqXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5zaGFkZXJzLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyc1tpXS5zeW5jVW5pZm9ybSh1bmlmb3JtKTtcbiAgICB9XG59O1xuIiwidmFyIEFic3RyYWN0RmlsdGVyID0gcmVxdWlyZSgnLi9BYnN0cmFjdEZpbHRlcicpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqXG4gKiBCYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXG4gKiBtb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcbiAqIHVuc3VwcG9ydGVkIGJ5IFdlYkdMLlxuICpcbiAqIC0tXG4gKiBGcm9tOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKlxuICovXG5mdW5jdGlvbiBGWEFBRmlsdGVyKClcbntcbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG5cXG52b2lkIHRleGNvb3Jkcyh2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTlcsIG91dCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JTVywgb3V0IHZlYzIgdl9yZ2JTRSxcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjMiBpbnZlcnNlVlAgPSAxLjAgLyByZXNvbHV0aW9uLnh5O1xcbiAgICB2X3JnYk5XID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk5FID0gKGZyYWdDb29yZCArIHZlYzIoMS4wLCAtMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU1cgPSAoZnJhZ0Nvb3JkICsgdmVjMigtMS4wLCAxLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JTRSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiTSA9IHZlYzIoZnJhZ0Nvb3JkICogaW52ZXJzZVZQKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxuICAgdlJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xcblxcbiAgIC8vY29tcHV0ZSB0aGUgdGV4dHVyZSBjb29yZHMgYW5kIHNlbmQgdGhlbSB0byB2YXJ5aW5nc1xcbiAgIHRleGNvb3JkcyhhVGV4dHVyZUNvb3JkICogcmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgdl9yZ2JOVywgdl9yZ2JORSwgdl9yZ2JTVywgdl9yZ2JTRSwgdl9yZ2JNKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcblxcbi8qKlxcbkJhc2ljIEZYQUEgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGNvZGUgb24gZ2Vla3MzZC5jb20gd2l0aCB0aGVcXG5tb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcXG51bnN1cHBvcnRlZCBieSBXZWJHTC5cXG5cXG4tLVxcblxcbkZyb206XFxuaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcXG5cXG5Db3B5cmlnaHQgKGMpIDIwMTEgYnkgQXJtaW4gUm9uYWNoZXIuXFxuXFxuU29tZSByaWdodHMgcmVzZXJ2ZWQuXFxuXFxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxcbm1ldDpcXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXFxuICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcXG4gICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcXG4gICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXFxuXFxuICAgICogVGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3JcXG4gICAgICBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWNcXG4gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXFxuXFxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xcblxcXCJBUyBJU1xcXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXFxuQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcXG5PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcXG5TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXFxuVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXFxuKi9cXG5cXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01JTlxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvIDEyOC4wKVxcbiNlbmRpZlxcbiNpZm5kZWYgRlhBQV9SRURVQ0VfTVVMXFxuICAgICNkZWZpbmUgRlhBQV9SRURVQ0VfTVVMICAgKDEuMCAvIDguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfU1BBTl9NQVhcXG4gICAgI2RlZmluZSBGWEFBX1NQQU5fTUFYICAgICA4LjBcXG4jZW5kaWZcXG5cXG4vL29wdGltaXplZCB2ZXJzaW9uIGZvciBtb2JpbGUsIHdoZXJlIGRlcGVuZGVudFxcbi8vdGV4dHVyZSByZWFkcyBjYW4gYmUgYSBib3R0bGVuZWNrXFxudmVjNCBmeGFhKHNhbXBsZXIyRCB0ZXgsIHZlYzIgZnJhZ0Nvb3JkLCB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk5XLCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYlNXLCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjNCBjb2xvcjtcXG4gICAgbWVkaXVtcCB2ZWMyIGludmVyc2VWUCA9IHZlYzIoMS4wIC8gcmVzb2x1dGlvbi54LCAxLjAgLyByZXNvbHV0aW9uLnkpO1xcbiAgICB2ZWMzIHJnYk5XID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JOVykueHl6O1xcbiAgICB2ZWMzIHJnYk5FID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JORSkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTVykueHl6O1xcbiAgICB2ZWMzIHJnYlNFID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTRSkueHl6O1xcbiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JNKTtcXG4gICAgdmVjMyByZ2JNICA9IHRleENvbG9yLnh5ejtcXG4gICAgdmVjMyBsdW1hID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTtcXG4gICAgZmxvYXQgbHVtYU5XID0gZG90KHJnYk5XLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KHJnYk5FLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gZG90KHJnYlNXLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNFID0gZG90KHJnYlNFLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KHJnYk0sICBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU1pbiA9IG1pbihsdW1hTSwgbWluKG1pbihsdW1hTlcsIGx1bWFORSksIG1pbihsdW1hU1csIGx1bWFTRSkpKTtcXG4gICAgZmxvYXQgbHVtYU1heCA9IG1heChsdW1hTSwgbWF4KG1heChsdW1hTlcsIGx1bWFORSksIG1heChsdW1hU1csIGx1bWFTRSkpKTtcXG5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpcjtcXG4gICAgZGlyLnggPSAtKChsdW1hTlcgKyBsdW1hTkUpIC0gKGx1bWFTVyArIGx1bWFTRSkpO1xcbiAgICBkaXIueSA9ICAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuXFxuICAgIGZsb2F0IGRpclJlZHVjZSA9IG1heCgobHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFKSAqXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNSAqIEZYQUFfUkVEVUNFX01VTCksIEZYQUFfUkVEVUNFX01JTik7XFxuXFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvIChtaW4oYWJzKGRpci54KSwgYWJzKGRpci55KSkgKyBkaXJSZWR1Y2UpO1xcbiAgICBkaXIgPSBtaW4odmVjMihGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgIG1heCh2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBkaXIgKiByY3BEaXJNaW4pKSAqIGludmVyc2VWUDtcXG5cXG4gICAgdmVjMyByZ2JBID0gMC41ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDEuMCAvIDMuMCAtIDAuNSkpLnh5eiArXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMi4wIC8gMy4wIC0gMC41KSkueHl6KTtcXG4gICAgdmVjMyByZ2JCID0gcmdiQSAqIDAuNSArIDAuMjUgKiAoXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAtMC41KS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogMC41KS54eXopO1xcblxcbiAgICBmbG9hdCBsdW1hQiA9IGRvdChyZ2JCLCBsdW1hKTtcXG4gICAgaWYgKChsdW1hQiA8IGx1bWFNaW4pIHx8IChsdW1hQiA+IGx1bWFNYXgpKVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkEsIHRleENvbG9yLmEpO1xcbiAgICBlbHNlXFxuICAgICAgICBjb2xvciA9IHZlYzQocmdiQiwgdGV4Q29sb3IuYSk7XFxuICAgIHJldHVybiBjb2xvcjtcXG59XFxuXFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGZ4YWEodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKiB2UmVzb2x1dGlvbiwgdlJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxuXFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG59XG5cbkZYQUFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRlhBQUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGWEFBRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBGWEFBRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cbkZYQUFGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlciggcmVuZGVyZXIgKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBTcHJpdGVNYXNrRmlsdGVyIGNsYXNzXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSB0YXJnZXQgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZU1hc2tGaWx0ZXIoc3ByaXRlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgICB2TWFza0Nvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFza0Nvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgLy8gY2hlY2sgY2xpcCEgdGhpcyB3aWxsIHN0b3AgdGhlIG1hc2sgYmxlZWRpbmcgb3V0IGZyb20gdGhlIGVkZ2VzXFxuICAgIHZlYzIgdGV4dCA9IGFicyggdk1hc2tDb29yZCAtIDAuNSApO1xcbiAgICB0ZXh0ID0gc3RlcCgwLjUsIHRleHQpO1xcbiAgICBmbG9hdCBjbGlwID0gMS4wIC0gbWF4KHRleHQueSwgdGV4dC54KTtcXG4gICAgdmVjNCBvcmlnaW5hbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgIHZlYzQgbWFza3kgPSB0ZXh0dXJlMkQobWFzaywgdk1hc2tDb29yZCk7XFxuICAgIG9yaWdpbmFsICo9IChtYXNreS5yICogbWFza3kuYSAqIGFscGhhICogY2xpcCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG9yaWdpbmFsO1xcbn1cXG5cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbWFzazogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUuX3RleHR1cmUgfSxcbiAgICAgICAgICAgIGFscGhhOiAgICAgICAgICB7IHR5cGU6ICdmJywgdmFsdWU6IDF9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcbn1cblxuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0byByZXRyaWV2ZSB0aGUgZmlsdGVyIGZyb21cbiAqIEBwYXJhbSBpbnB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gb3V0cHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqL1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5tYXNrLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLl90ZXh0dXJlO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLndvcmxkQWxwaGE7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZU1hc2tGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgdXNlZCB0byBtb3ZlIHRoZSBkaXNwbGFjZW1lbnQgbWFwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdsTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBCbGVuZE1vZGVNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn1cblxuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZE1vZGVNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGVNYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMtdXAgdGhlIGdpdmVuIGJsZW5kTW9kZSBmcm9tIFdlYkdMJ3MgcG9pbnQgb2Ygdmlldy5cbiAqXG4gKiBAcGFyYW0gYmxlbmRNb2RlIHtudW1iZXJ9IHRoZSBibGVuZE1vZGUsIHNob3VsZCBiZSBhIFBpeGkgY29uc3QsIHN1Y2ggYXMgYFBJWEkuQkxFTkRfTU9ERVMuQUREYC4gU2VlXG4gKiAge0BsaW5rIFBJWEkuQkxFTkRfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLnNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChibGVuZE1vZGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblxuICAgIHZhciBtb2RlID0gdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuY3VycmVudEJsZW5kTW9kZV07XG4gICAgdGhpcy5yZW5kZXJlci5nbC5ibGVuZEZ1bmMobW9kZVswXSwgbW9kZVsxXSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgUXVhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL1F1YWQnKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXTtcblxuICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgIHJlbmRlclRhcmdldDpyZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LFxuICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgIGJvdW5kczpudWxsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldFtdfVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICAvLyBsaXN0ZW4gZm9yIGNvbnRleHQgYW5kIHVwZGF0ZSBuZWNlc3NhcnkgYnVmZmVyc1xuICAgIC8vVE9ETyBtYWtlIHRoaXMgZHluYW1pYyFcbiAgICAvL1RPRE8gdGVzdCB0aGlzIG91dCBieSBmb3JjZXMgcG93ZXIgb2YgdHdvP1xuICAgIHRoaXMudGV4dHVyZVNpemUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgcmVuZGVyZXIud2lkdGgsIHJlbmRlcmVyLmhlaWdodCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmcmFtZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBudWxsO1xufVxuXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbHRlck1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlck1hbmFnZXI7XG5cblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVQb29sLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucXVhZCA9IG5ldyBRdWFkKGdsKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcGFyYW0gYnVmZmVyIHtBcnJheUJ1ZmZlcn1cbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuc2V0RmlsdGVyU3RhY2sgPSBmdW5jdGlvbiAoIGZpbHRlclN0YWNrIClcbntcbiAgICB0aGlzLmZpbHRlclN0YWNrID0gZmlsdGVyU3RhY2s7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlciBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGZpbHRlcnMge1BJWEkuQWJzdHJhY3RGaWxlcltdfSB0aGUgZmlsdGVycyB0aGF0IHdpbGwgYmUgcHVzaGVkIHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFja1xuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5wdXNoRmlsdGVyID0gZnVuY3Rpb24gKHRhcmdldCwgZmlsdGVycylcbntcbiAgICAvLyBnZXQgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0Li5cbiAgICAvLyBUT0RPIHJlcGxhY2UgY2xvbmUgd2l0aCBhIGNvcHkgdG8gc2F2ZSBvYmplY3QgY3JlYXRpb25cbiAgICB2YXIgYm91bmRzID0gdGFyZ2V0LmZpbHRlckFyZWEgPyB0YXJnZXQuZmlsdGVyQXJlYS5jbG9uZSgpIDogdGFyZ2V0LmdldEJvdW5kcygpO1xuXG4gICAgLy9ib3VuZHMgPSBib3VuZHMuY2xvbmUoKTtcblxuICAgIC8vIHJvdW5kIG9mZiB0aGUgcmVjdGFuZ2xlIHRvIGdldCBhIG5pY2Ugc21vb29vb29vdGggZmlsdGVyIDopXG4gICAgYm91bmRzLnggPSBib3VuZHMueCB8IDA7XG4gICAgYm91bmRzLnkgPSBib3VuZHMueSB8IDA7XG4gICAgYm91bmRzLndpZHRoID0gYm91bmRzLndpZHRoIHwgMDtcbiAgICBib3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCB8IDA7XG5cblxuICAgIC8vIHBhZGRpbmchXG4gICAgdmFyIHBhZGRpbmcgPSBmaWx0ZXJzWzBdLnBhZGRpbmcgfCAwO1xuICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLnkgLT0gcGFkZGluZztcbiAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcblxuXG4gICAgaWYodGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vVE9ETyB0aGlzIHdpbGwgYnJlYWsgaWYgdGhlIHJlbmRlclRleHR1cmUgdHJhbnNmb3JtIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYSB0cmFuc2xhdGlvbi5cbiAgICAgICAgLy9XaWxsIG5lZWQgdG8gdGFrZSB0aGUgZnVsbCBtYXRyaXggdHJhbnNmb3JtIGludG8gYWNvdW50Li5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm07XG5cbiAgICAgICAgYm91bmRzLnggKz0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSArPSB0cmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdGhpcy5jYXBGaWx0ZXJBcmVhKCBib3VuZHMgKTtcblxuICAgICAgICBib3VuZHMueCAtPSB0cmFuc2Zvcm0udHg7XG4gICAgICAgIGJvdW5kcy55IC09IHRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG4gICAgfVxuXG4gICAgaWYoYm91bmRzLndpZHRoID4gMCAmJiBib3VuZHMuaGVpZ2h0ID4gMClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gYm91bmRzO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBjbGVhciB0aGUgdGV4dHVyZS4uXG4gICAgICAgIHRleHR1cmUuY2xlYXIoKTtcblxuICAgICAgICAvLyBUT0RPIGdldCByaWQgb2Ygb2JqZWN0IGNyZWF0aW9uIVxuICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OiB0ZXh0dXJlLFxuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJzXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIHB1c2ggc29tdGhpbmcgb24gdG8gdGhlIHN0YWNrIHRoYXQgaXMgZW1wdHlcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucG9wRmlsdGVyID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2sucG9wKCk7XG4gICAgdmFyIHByZXZpb3VzRmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2tbdGhpcy5maWx0ZXJTdGFjay5sZW5ndGgtMV07XG5cbiAgICB2YXIgaW5wdXQgPSBmaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIGlmIHRoZSByZW5kZXJUYXJnZXQgaXMgbnVsbCB0aGVuIHdlIGRvbid0IGFwcGx5IHRoZSBmaWx0ZXIgYXMgaXRzIG9mZnNjcmVlblxuICAgIGlmKCFmaWx0ZXJEYXRhLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gcHJldmlvdXNGaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIHVzZSBwcm9ncmFtXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpbnB1dC5mcmFtZTtcblxuICAgIHRoaXMucXVhZC5tYXAodGhpcy50ZXh0dXJlU2l6ZSwgaW5wdXQuZnJhbWUpO1xuXG5cbiAgICAvLyBUT0RPLi4gdGhpcyBwcm9iYWJseSBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBmaWx0ZXJzID0gZmlsdGVyRGF0YS5maWx0ZXI7XG5cbiAgICAvLyBhc3N1bWluZyBhbGwgZmlsdGVycyBmb2xsb3cgdGhlIGNvcnJlY3QgZm9ybWF0Pz9cbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgbm9ybWFsIGJsZW5kbW9kZSFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKENPTlNULkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDEpXG4gICAge1xuICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICBpZiAoZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJzWzBdLmFwcGx5RmlsdGVyKCB0aGlzLnJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0ICk7XG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBpbnB1dCApO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBmbGlwVGV4dHVyZSA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcFRleHR1cmUgPSB0aGlzLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGZpbHRlcnNbaV07XG5cbiAgICAgICAgICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSB0aGVuIHNldHRpbmcgdGhpcyBlYWNoIHRpbWU/XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlci5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIGZsb3BUZXh0dXJlICk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gZmxpcFRleHR1cmU7XG4gICAgICAgICAgICBmbGlwVGV4dHVyZSA9IGZsb3BUZXh0dXJlO1xuICAgICAgICAgICAgZmxvcFRleHR1cmUgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aC0xXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIG91dHB1dCApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBmbGlwVGV4dHVyZSApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxvcFRleHR1cmUgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyRGF0YS5maWx0ZXI7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgUmVuZGVyVGFyZ2V0XG4gKiBAcmV0dXJuIHtSZW5kZXJUYXJnZXR9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICggY2xlYXIgKVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSB0aGlzLnRleHR1cmVQb29sLnBvcCgpIHx8IG5ldyBSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJlci5nbCwgdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQsIENPTlNULlNDQUxFX01PREVTLkxJTkVBUiwgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uICogQ09OU1QuRklMVEVSX1JFU09MVVRJT04pO1xuICAgIHJlbmRlclRhcmdldC5mcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJUYXJnZXQ7XG59O1xuXG4vKlxuICogUmV0dXJucyBhIFJlbmRlclRhcmdldCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UmVuZGVyVGFyZ2V0fSBUaGUgUmVuZGVyVGFyZ2V0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnJldHVyblJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5wdXNoKCByZW5kZXJUYXJnZXQgKTtcbn07XG5cbi8qXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBzaGFkZXIge1NoYWRlcn0gVGhlIHNoYWRlciB0byB1cGxvYWRcbiAqIEBwYXJhbSBpbnB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAoc2hhZGVyLCBpbnB1dFRhcmdldCwgb3V0cHV0VGFyZ2V0LCBjbGVhcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQob3V0cHV0VGFyZ2V0KTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIG91dHB1dFRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2hhZGVyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBDYW4gdGhpcyBiZSBjYWNoZWQgYW5kIG5vdCBgdG9BcnJheWBlZCBlYWNoIGZyYW1lP1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcblxuICAgIC8vVE9ETyBjYW4gdGhpcyBiZSBvcHRpbWlzZWQ/XG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuLypcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMiAqIDQgKiA0KTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuKi9cblxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGlucHV0VGFyZ2V0LnRleHR1cmUpO1xuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIG1hcHBlZCBtYXRyaXhcbiAqIEBwYXJhbSBmaWx0ZXJBcmVhIHtSZWN0YW5nbGV9IFRoZSBmaWx0ZXIgYXJlYVxuICogQHBhcmFtIHNwcml0ZSB7U3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICogQHBhcmFtIG91dHB1dE1hdHJpeCB7TWF0cml4fSBAYWx2aW5cbiAqL1xuLy8gVE9ETyBwbGF5aW5nIGFyb3VuZCBoZXJlLi4gdGhpcyBpcyB0ZW1wb3JhcnkgLSAod2lsbCBlbmQgdXAgaW4gdGhlIHNoYWRlcilcbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeCA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhLCBzcHJpdGUsIG91dHB1dE1hdHJpeClcbntcbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBzcHJpdGUud29ybGRUcmFuc2Zvcm0uY29weShtYXRoLk1hdHJpeC5URU1QX01BVFJJWCksXG4gICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIHZhciBtYXBwZWRNYXRyaXggPSBvdXRwdXRNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIC8vIHNjYWxlLi5cbiAgICB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICBtYXBwZWRNYXRyaXgudHJhbnNsYXRlKGZpbHRlckFyZWEueCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIGZpbHRlckFyZWEueSAvIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0ICk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIHJhdGlvKTtcblxuICAgIHZhciB0cmFuc2xhdGVTY2FsZVggPSAodGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAvIHRleHR1cmUud2lkdGgpO1xuICAgIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0ZXh0dXJlLmhlaWdodCk7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS50eCAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuICAgIHdvcmxkVHJhbnNmb3JtLnR5IC89IHRleHR1cmUud2lkdGggKiB0cmFuc2xhdGVTY2FsZVg7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIG1hcHBlZE1hdHJpeC5wcmVwZW5kKHdvcmxkVHJhbnNmb3JtKTtcblxuICAgIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIG1hcHBlZE1hdHJpeC5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShzcHJpdGUuYW5jaG9yLngsIHNwcml0ZS5hbmNob3IueSk7XG5cbiAgICByZXR1cm4gbWFwcGVkTWF0cml4O1xuXG4gICAgLy8gS2VlcGluZyB0aGUgb3JnaW5hbCBhcyBhIHJlbWluZGVyIHRvIG1lIG9uIGhvdyB0aGlzIHdvcmtzIVxuICAgIC8vXG4gICAgLy8gdmFyIG0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuICAgIC8vIC8vIHNjYWxlLi5cbiAgICAvLyB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICAvLyBtLnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCk7XG5cblxuICAgIC8vIG0uc2NhbGUoMSAsIHJhdGlvKTtcblxuXG4gICAgLy8gdmFyIHRyYW5zZm9ybSA9IHd0LmNsb25lKCk7XG5cbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyA2MjApO1xuICAgIC8vIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyAzODApO1xuXG4gICAgLy8gdHJhbnNmb3JtLnR4IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICAvLyB0cmFuc2Zvcm0udHkgLz0gNjIwICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgLy8gdHJhbnNmb3JtLmludmVydCgpO1xuXG4gICAgLy8gdHJhbnNmb3JtLmFwcGVuZChtKTtcblxuICAgIC8vIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIC8vIHRyYW5zZm9ybS5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgLy8gcmV0dXJuIHRyYW5zZm9ybTtcbn07XG5cbi8qXG4gKiBDb25zdHJhaW5zIHRoZSBmaWx0ZXIgYXJlYSB0byB0aGUgdGV4dHVyZSBzaXplXG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWEgd2Ugd2FudCB0byBjYXBcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY2FwRmlsdGVyQXJlYSA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhKVxue1xuICAgIGlmIChmaWx0ZXJBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCArPSBmaWx0ZXJBcmVhLng7XG4gICAgICAgIGZpbHRlckFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlckFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLmhlaWdodCArPSBmaWx0ZXJBcmVhLnk7XG4gICAgICAgIGZpbHRlckFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnggKyBmaWx0ZXJBcmVhLndpZHRoID4gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLndpZHRoID0gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAtIGZpbHRlckFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGZpbHRlckFyZWEueSArIGZpbHRlckFyZWEuaGVpZ2h0ID4gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAtIGZpbHRlckFyZWEueTtcbiAgICB9XG59O1xuXG4vKlxuICogUmVzaXplcyBhbGwgdGhlIHJlbmRlciB0YXJnZXRzIGluIHRoZSBwb29sXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMudGV4dHVyZVNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZVBvb2xbaV0ucmVzaXplKCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgZmlsdGVyIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGZpbHRlciBzdGFjay5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucXVhZC5kZXN0cm95KCk7XG4gICAgXG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG4gICAgXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IG51bGw7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGV4dHVyZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVQb29sID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBBbHBoYU1hc2tGaWx0ZXIgPSByZXF1aXJlKCcuLi9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuc3RlbmNpbFN0YWNrID0gW107XG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ID0gMDtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbCA9IFtdO1xufVxuXG5NYXNrTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFNwcml0ZU1hc2sodGFyZ2V0LCBtYXNrRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IG1hc2sgZnJvbSB0aGUgbWFzayBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIGlmIChtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnBvcFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB2YXIgYWxwaGFNYXNrRmlsdGVyID0gdGhpcy5hbHBoYU1hc2tQb29sLnBvcCgpO1xuXG4gICAgaWYgKCFhbHBoYU1hc2tGaWx0ZXIpXG4gICAge1xuICAgICAgICBhbHBoYU1hc2tGaWx0ZXIgPSBbbmV3IEFscGhhTWFza0ZpbHRlcihtYXNrRGF0YSldO1xuICAgIH1cblxuICAgIGFscGhhTWFza0ZpbHRlclswXS5tYXNrU3ByaXRlID0gbWFza0RhdGE7XG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGFyZ2V0LCBhbHBoYU1hc2tGaWx0ZXIpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBmaWx0ZXJzID0gdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgdGhpcy5hbHBoYU1hc2tQb29sLnB1c2goZmlsdGVycyk7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoTWFzayhtYXNrRGF0YSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcE1hc2sobWFza0RhdGEpO1xufTtcblxuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpLFxuICAgIENvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXInKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTaGFkZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heEF0dGlicyA9IDEwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXhBdHRpYnM7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YWNrID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcblxuLy8gICAgdGhpcy5pbml0UGx1Z2lucygpO1xufVxuXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hbmFnZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oU2hhZGVyTWFuYWdlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyTWFuYWdlcjtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRyaWJ1dGUgY29ycmVjdGx5IGFzIHRoaXMgdGVuZHMgdG8gdmFyeVxuICAgIHRoaXMubWF4QXR0aWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVE9ETyAtIFdoeSBhcmUgdGhlc2Ugbm90IHBsdWdpbnM/IFdlIGNhbid0IGRlY291cGxlIHByaW1pdGl2ZXMgdW5sZXNzIHRoZXkgYXJlLi4uLlxuICAgIHRoaXMuZGVmYXVsdFNoYWRlciA9IG5ldyBUZXh0dXJlU2hhZGVyKHRoaXMpO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBuZXcgQ29tcGxleFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogVGFrZXMgdGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gaW4gcGFyYW1ldGVycyBhbmQgdXBsb2FkcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJzIHthbnlbXX0gYXR0cmlic1xuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRBdHRyaWJzID0gZnVuY3Rpb24gKGF0dHJpYnMpXG57XG4gICAgLy8gcmVzZXQgdGVtcCBzdGF0ZVxuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMudGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yICh2YXIgYSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbYXR0cmlic1thXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYlN0YXRlW2ldICE9PSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgc2hhZGVyLlxuICpcbiAqIEBwYXJhbSBzaGFkZXIge1BJWEkuU2hhZGVyfSB0aGUgc2hhZGVyIHRvIHVwbG9hZFxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKVxue1xuICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5fY3VycmVudElkID09PSBzaGFkZXIudWlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IHNoYWRlci51aWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBzaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmdsLnVzZVByb2dyYW0oc2hhZGVyLnByb2dyYW0pO1xuICAgIHRoaXMuc2V0QXR0cmlicyhzaGFkZXIuYXR0cmlidXRlcyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBvYmplY3QuXG4gKlxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLmRlc3Ryb3koKTtcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBudWxsO1xufTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFza01hbmFnZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG51bGw7XG59XG5cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBtYXNrIHN0YWNrIHRoYXQgaXMgdXNlZCBieSB0aGlzIG1hbmFnZXIuXG4gKlxuICogQHBhcmFtIHN0ZW5jaWxNYXNrU3RhY2sge1BJWEkuU3RlbmNpbE1hc2tTdGFja30gVGhlIG1hc2sgc3RhY2tcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuc2V0TWFza1N0YWNrID0gZnVuY3Rpb24gKCBzdGVuY2lsTWFza1N0YWNrIClcbntcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBzdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIGlmIChzdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suIEBhbHZpblxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hdHRhY2hTdGVuY2lsQnVmZmVyKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBzbXMgPSB0aGlzLnN0ZW5jaWxNYXNrU3RhY2s7XG5cbiAgICB0aGlzLmJpbmRHcmFwaGljcyhncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xuICAgICAgICBzbXMucmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIHNtcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wdXNoKHdlYkdMRGF0YSk7XG5cbiAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgLy8gZHJhdyB0aGUgdHJpYW5nbGUgc3RyaXAhXG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IGEgcXVhZCB0byBpbmNyZW1lbnQuLlxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cbiAgICBzbXMuY291bnQrKztcbn07XG5cbi8qKlxuICogVE9ETyB0aGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIVxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5iaW5kR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICAvL2lmICh0aGlzLl9jdXJyZW50R3JhcGhpY3MgPT09IGdyYXBoaWNzKXJldHVybjtcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGJpbmQgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgdmFyIHNoYWRlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICAvKlxuICAgICAgICBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMuY29sb3IuX2xvY2F0aW9uLCB3ZWJHTERhdGEuY29sb3IpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDIsIDApO1xuXG4gICAgICAgIC8vIG5vdyBkbyB0aGUgcmVzdC4uXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICovXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmFjdGl2YXRlUHJpbWl0aXZlU2hhZGVyKCk7XG4vLyAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnByaW1pdGl2ZVNoYWRlcjtcbiAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cblxuICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4vLyAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG5cbiAgICAgIC8qICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTFmKHNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEpO1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCA0LCBnbC5GTE9BVCwgZmFsc2UsNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTsqL1xuICAgIH1cbn07XG5cbi8qKlxuICogVE9ETyBAYWx2aW5cbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTdGVuY2lsID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wb3AoKTtcblxuICAgIHNtcy5jb3VudC0tO1xuXG4gICAgaWYgKHNtcy5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgLy8gdGhlIHN0YWNrIGlzIGVtcHR5IVxuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICAgICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuXG4gICAgICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSAobGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOVkVSVCk7XG5cbiAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50ICs9IDI7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAvLyAgY29uc29sZS5sb2coXCI8PD4+XCIpXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcblxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCksIDB4RkYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5LRUVQKTtcblxuXG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgbWFzayBzdGFjay5cbiAqXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjayA9IG51bGw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119IFRoZSBtYXNrIGRhdGEgc3RydWN0dXJlIHRvIHVzZVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgXG4gICAgLy9UT0RPIEZJWFxuICAgIGlmIChtYXNrRGF0YS5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy51cGRhdGVHcmFwaGljcyhtYXNrRGF0YSwgdGhpcy5yZW5kZXJlci5nbCk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119XG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuXG4gICAgdGhpcy5wb3BTdGVuY2lsKG1hc2tEYXRhLCBtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YVswXSk7XG59O1xuXG4iLCIvKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gV2ViR0xNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMucmVuZGVyZXIub24oJ2NvbnRleHQnLCB0aGlzLm9uQ29udGV4dENoYW5nZSwgdGhpcyk7XG59XG5cbldlYkdMTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFuYWdlcjtcblxuLyoqXG4gKiBHZW5lcmljIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXHQvLyBkbyBzb21lIGNvZGVzIGluaXQhXG59O1xuXG4vKipcbiAqIEdlbmVyaWMgZGVzdHJveSBtZXRob2RzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICovXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVuZGVyZXIub2ZmKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IGNvbXBsZXggcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBDb21wbGV4UHJpbWl0aXZlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gdmVjNChjb2xvciAqIGFscGhhICogdGludCwgYWxwaGEpOycsLy9cIiAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdGludDogICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwgMCwgMF0gfSxcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgY29sb3I6ICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwwLDBdIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYUNvbG9yOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCYXNlIHNoYWRlciBjbGFzcyBmb3IgUElYSSBtYW5hZ2VkIHNoYWRlcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFt1bmlmb3Jtc10ge29iamVjdH0gVW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxuICogQHBhcmFtIFthdHRyaWJ1dGVzXSB7b2JqZWN0fSBBdHRyaWJ1dGVzIGZvciB0aGlzIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKVxue1xuICAgIGlmICghdmVydGV4U3JjIHx8ICFmcmFnbWVudFNyYylcbiAgICB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpeGkuanMgRXJyb3IuIFNoYWRlciByZXF1aXJlcyB2ZXJ0ZXhTcmMgYW5kIGZyYWdtZW50U3JjJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmdsID0gc2hhZGVyTWFuYWdlci5yZW5kZXJlci5nbDtcblxuICAgIC8vVE9ETyBtYXliZSB3ZSBzaG91bGQgcGFzcyByZW5kZXJlciByYXRoZXIgdGhhbiBzaGFkZXIgbWFuZ2VyPz8gZm9vZCBmb3IgdGhvdWdodC4uXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyID0gc2hhZGVyTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBwcm9ncmFtLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xQcm9ncmFtfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF0dHJpYnV0ZXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRleHR1cmUgY291bnRlclxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYztcblxuICAgIHRoaXMuaW5pdCgpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc2hhZGVyIGFuZCB1c2VzIGl0XG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29tcGlsZSgpO1xuXG4gICAgdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLnVuaWZvcm1zKSk7XG4gICAgdGhpcy5jYWNoZUF0dHJpYnV0ZUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpKTtcbn07XG5cbi8qKlxuICogQ2FjaGVzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHVuaWZvcm0gZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSB1bmlmb3JtcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyA9IGZ1bmN0aW9uIChrZXlzKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMudW5pZm9ybXNba2V5c1tpXV0uX2xvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBrZXlzW2ldKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSBhdHRyaWJ1dGVzIHRvIGNhY2hlXG4gKi9cblNoYWRlci5wcm90b3R5cGUuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNba2V5c1tpXV0gPSB0aGlzLmdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4uLlxuXG4gICAgLy8gQmVnaW4gd29yc3QgaGFjayBldmEgLy9cblxuICAgIC8vIFdIWT8/PyBPTkxZIG9uIG15IGNocm9tZSBwaXhlbCB0aGUgbGluZSBhYm92ZSByZXR1cm5zIC0xIHdoZW4gdXNpbmcgZmlsdGVycz9cbiAgICAvLyBtYXliZSBpdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdsIGNvbnRleHQuXG4gICAgLy8gSSdtIGNvbnZpbmNlZCB0aGlzIGlzIGEgYnVnIGluIHRoZSBjaHJvbWUgYnJvd3NlciBhcyB0aGVyZSBpcyBOTyByZWFzb24gd2h5IHRoaXMgc2hvdWxkIGJlIHJldHVybmluZyAtMSBlc3BlY2lhbGx5IGFzIGl0IG9ubHkgbWFuaWZlc3RzIG9uIG15IGNocm9tZSBwaXhlbFxuICAgIC8vIElmIHRoZXJlcyBhbnkgd2ViR0wgcGVvcGxlIHRoYXQga25vdyB3aHkgY291bGQgaGFwcGVuIHBsZWFzZSBoZWxwIDopXG4gICAgLy8gaWYgKHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPT09IC0xKXtcbiAgICAvLyAgICAgdGhpcy5hdHRyaWJ1dGVzLmFDb2xvciA9IDI7XG4gICAgLy8gfVxuXG4gICAgLy8gRW5kIHdvcnN0IGhhY2sgZXZhIC8vXG59O1xuXG4vKipcbiAqIEF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZCBjcmVhdGVzIHRoZSBwcm9ncmFtLlxuICpcbiAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX1cbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIGdsVmVydFNoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5WRVJURVhfU0hBREVSLCB0aGlzLnZlcnRleFNyYyk7XG4gICAgdmFyIGdsRnJhZ1NoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuZnJhZ21lbnRTcmMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xGcmFnU2hhZGVyKTtcbiAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcblxuICAgIC8vIGlmIGxpbmtpbmcgZmFpbHMsIHRoZW4gbG9nIGFuZCBjbGVhbnVwXG4gICAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BpeGkuanMgRXJyb3I6IENvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlci4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuVkFMSURBVEVfU1RBVFVTJywgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuZ2V0RXJyb3IoKScsIGdsLmdldEVycm9yKCkpO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcHJvZ3JhbSBpbmZvIGxvZywgbG9nIGl0XG4gICAgICAgIGlmIChnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSAhPT0gJycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBXYXJuaW5nOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpJywgZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgcHJvZ3JhbSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgc29tZSBzaGFkZXJzXG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsVmVydFNoYWRlcik7XG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsRnJhZ1NoYWRlcik7XG5cbiAgICByZXR1cm4gKHRoaXMucHJvZ3JhbSA9IHByb2dyYW0pO1xufTtcblxuLyoqXG4qIEFkZHMgYSBuZXcgdW5pZm9ybVxuKlxuKiBAcGFyYW0gdW5pZm9ybSB7b2JqZWN0fSB0aGUgbmV3IHVuaWZvcm0gdG8gYXR0YWNoXG4qL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBsb2NhdGlvbiA9IHVuaWZvcm0uX2xvY2F0aW9uLFxuICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWUsXG4gICAgICAgIGdsID0gdGhpcy5nbCxcbiAgICAgICAgaSwgaWw7XG5cbiAgICBzd2l0Y2ggKHVuaWZvcm0udHlwZSlcbiAgICB7XG4gICAgICAgIGNhc2UgJ2InOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlID8gMSA6IDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGludCB2YWx1ZVxuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBzaW5nbGUgZmxvYXQgdmFsdWVcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDIpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoMykgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoNCkgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzRmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSAyRCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjInOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgM0QgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YzJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDREIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2NCc6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzFmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzRmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTInOlxuICAgICAgICBjYXNlICdtYXQyJzpcbiAgICAgICAgY2FzZSAnTWF0cml4MmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICBjYXNlICdtYXQzJzpcbiAgICAgICAgY2FzZSAnTWF0cml4M2Z2JzpcblxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICdtNCc6XG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICBjYXNlICdNYXRyaXg0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgQ29sb3IgVmFsdWVcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGludGVnZXJzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIChKUyBvciB0eXBlZCBhcnJheSlcbiAgICAgICAgY2FzZSAnZnYxJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDJEIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjJ2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDIgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDJdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMiArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAzRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yzdic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgzICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMyArIDJdICAgPSB2YWx1ZVtpXS56O1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHVuaWZvcm0uX2FycmF5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDREIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjR2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDRdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgMl0gICA9IHZhbHVlW2ldLno7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAzXSAgID0gdmFsdWVbaV0udztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBQSVhJLlRleHR1cmVcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgIGNhc2UgJ3NhbXBsZXIyRCc6XG5cbiAgICAgICAgICAgIGlmICghdW5pZm9ybS52YWx1ZSB8fCAhdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFjdGl2YXRlIHRoaXMgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0aGlzLnRleHR1cmVDb3VudF0pO1xuXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgICAgICAgICBpZiAoIXRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2FtcGxlcjJEKHVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSB0ZXh0dXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb25lLi5cbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gICAgICAgICAgICAvLyBzZXQgdW5pZm9ybSB0byB0ZXh0dXJlIGluZGV4XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkodW5pZm9ybS5fbG9jYXRpb24sIHRoaXMudGV4dHVyZUNvdW50KTtcblxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IG5leHQgdGV4dHVyZSBpZFxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBTaGFkZXIgV2FybmluZzogVW5rbm93biB1bmlmb3JtIHR5cGU6ICcgKyB1bmlmb3JtLnR5cGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnVuaWZvcm1zKVxuICAgIHtcbiAgICAgICAgdGhpcy5zeW5jVW5pZm9ybSh0aGlzLnVuaWZvcm1zW2tleV0pO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJbml0aWFsaXNlcyBhIFNhbXBsZXIyRCB1bmlmb3JtICh3aGljaCBtYXkgb25seSBiZSBhdmFpbGFibGUgbGF0ZXIgb24gYWZ0ZXIgaW5pdFVuaWZvcm1zIG9uY2UgdGhlIHRleHR1cmUgaGFzIGxvYWRlZClcbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuaW5pdFNhbXBsZXIyRCA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGlmICh1bmlmb3JtLnRleHR1cmVEYXRhKVxuICAgIHtcblxuICAgICAgICAvL1RPRE8gbW92ZSB0aGlzLi4uXG4gICAgICAgIHZhciBkYXRhID0gdW5pZm9ybS50ZXh0dXJlRGF0YTtcblxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG5cbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGxpZWRBbHBoYSk7XG4gICAgICAgIC8vIEdMVGV4dHVyZSA9IG1hZyBsaW5lYXIsIG1pbiBsaW5lYXJfbWlwbWFwX2xpbmVhciwgd3JhcCByZXBlYXQgKyBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgLy8gR0xUZXh0dXJlTGluZWFyID0gbWFnL21pbiBsaW5lYXIsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdFJlcGVhdCA9IG1hZy9taW4gTkVBUkVTVCwgd3JhcCByZXBlYXRcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdCA9IG1hZy9taW4gbmVhcmVzdCwgd3JhcCBjbGFtcFxuICAgICAgICAvLyBBdWRpb1RleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDUxMiwgaGVpZ2h0IDIsIGJvcmRlciAwXG4gICAgICAgIC8vIEtleVRleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDI1NiwgaGVpZ2h0IDIsIGJvcmRlciAwXG5cbiAgICAgICAgLy8gIG1hZ0ZpbHRlciBjYW4gYmU6IGdsLkxJTkVBUiwgZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgb3IgZ2wuTkVBUkVTVFxuICAgICAgICAvLyAgd3JhcFMvVCBjYW4gYmU6IGdsLkNMQU1QX1RPX0VER0Ugb3IgZ2wuUkVQRUFUXG5cbiAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBkYXRhLmx1bWluYW5jZSA/IGdsLkxVTUlOQU5DRSA6IGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRleHR1cmUuc291cmNlKTtcblxuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZGF0YS5tYWdGaWx0ZXIgPyBkYXRhLm1hZ0ZpbHRlciA6IGdsLkxJTkVBUiApO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFICk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZGF0YS53cmFwVCA/IGRhdGEud3JhcFQgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5zaGFkZXJNYW5hZ2VyLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgc2hhZGVyLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmdsLmRlbGV0ZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgIHRoaXMudW5pZm9ybXMgPSBudWxsO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleFNyYyA9IG51bGw7XG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IG51bGw7XG59O1xuXG5TaGFkZXIucHJvdG90eXBlLl9nbENvbXBpbGUgPSBmdW5jdGlvbiAodHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIHRoaXMuZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc3JjKTtcbiAgICB0aGlzLmdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghdGhpcy5nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCB0aGlzLmdsLkNPTVBJTEVfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIGN1c3RvbVVuaWZvcm1zLCBjdXN0b21BdHRyaWJ1dGVzKVxue1xuICAgIHZhciB1bmlmb3JtcyA9IHtcblxuICAgICAgICB1U2FtcGxlcjogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiAwIH0sXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6ICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDFdKSB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21Vbmlmb3JtcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIHUgaW4gY3VzdG9tVW5pZm9ybXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVuaWZvcm1zW3VdID0gY3VzdG9tVW5pZm9ybXNbdV07XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBhVmVydGV4UG9zaXRpb246ICAgIDAsXG4gICAgICAgIGFUZXh0dXJlQ29vcmQ6ICAgICAgMCxcbiAgICAgICAgYUNvbG9yOiAgICAgICAgICAgICAwXG4gICAgfTtcblxuICAgIGlmIChjdXN0b21BdHRyaWJ1dGVzKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgYSBpbiBjdXN0b21BdHRyaWJ1dGVzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2FdID0gY3VzdG9tQXR0cmlidXRlc1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IHZlcnRleFNyYyB8fCBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcyk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKGdsKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IFRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgZnJhZ21lbnRTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYztcblxuICAgIFNoYWRlci5jYWxsKHRoaXMsIGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTsvLywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xuXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuLi9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBCYXNlIGZvciBhIGNvbW1vbiBvYmplY3QgcmVuZGVyZXIgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHN5c3RlbSByZW5kZXJlciBwbHVnaW4uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBPYmplY3RSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59XG5cblxuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9iamVjdFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RSZW5kZXJlcjtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHJlbmRlcmVyIGFuZCBzZXRzIHRoZSBzaGFkZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gc2V0IHRoZSBzaGFkZXIuLlxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgcmVuZGVyZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIGZsdXNoZXNcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gZmx1c2ghXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyByZW5kZXIgdGhlIG9iamVjdFxufTtcbiIsIi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHF1YWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gVGhlIGdsIGNvbnRleHQgZm9yIHRoaXMgcXVhZCB0byB1c2UuXG4gKi9cbmZ1bmN0aW9uIFF1YWQoZ2wpXG57XG4gICAgLypcbiAgICAgKiB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbi8vICAgIHRoaXMudGV4dHVyZXMgPSBuZXcgVGV4dHVyZVV2cygpO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMjAwLDAsXG4gICAgICAgIDIwMCwyMDAsXG4gICAgICAgIDAsMjAwXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBxdWFkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KFtcbiAgICAgICAgMCwwLFxuICAgICAgICAxLDAsXG4gICAgICAgIDEsMSxcbiAgICAgICAgMCwxXG4gICAgXSk7XG5cbi8vICAgIHZhciB3aGl0ZSA9ICgweEZGRkZGRiA+PiAxNikgKyAoMHhGRkZGRkYgJiAweGZmMDApICsgKCgweEZGRkZGRiAmIDB4ZmYpIDw8IDE2KSArICgxICogMjU1IDw8IDI0KTtcbiAgICAvL1RPRE8gY29udmVydCB0aGlzIHRvIGEgMzIgdW5zaWduZWQgaW50IGFycmF5XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIGNvbXBvbmVudHMgb2YgdGhlIHRyaWFuZ2xlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDFcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KFtcbiAgICAgICAgMCwgMSwgMiwgMCwgMywgMlxuICAgIF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIHZlcnRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICg4ICsgOCArIDE2KSAqIDQsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59XG5cblF1YWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUXVhZDtcblxuLyoqXG4gKiBNYXBzIHR3byBSZWN0YW5nbGUgdG8gdGhlIHF1YWRcbiAqIEBwYXJhbSByZWN0IHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZpcnN0IHJlY3RhbmdsZVxuICogQHBhcmFtIHJlY3QyIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHNlY29uZCByZWN0YW5nbGVcbiAqL1xuUXVhZC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24ocmVjdCwgcmVjdDIpXG57XG4gICAgdmFyIHggPSAwOyAvL3JlY3QyLnggLyByZWN0LndpZHRoO1xuICAgIHZhciB5ID0gMDsgLy9yZWN0Mi55IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1swXSA9IHg7XG4gICAgdGhpcy51dnNbMV0gPSB5O1xuXG4gICAgdGhpcy51dnNbMl0gPSB4ICsgcmVjdDIud2lkdGggLyByZWN0LndpZHRoO1xuICAgIHRoaXMudXZzWzNdID0geTtcblxuICAgIHRoaXMudXZzWzRdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIHRoaXMudXZzWzZdID0geDtcbiAgICB0aGlzLnV2c1s3XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIC8vLyAtLS0tLVxuICAgIHggPSByZWN0Mi54O1xuICAgIHkgPSByZWN0Mi55O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1swXSA9IHg7XG4gICAgdGhpcy52ZXJ0aWNlc1sxXSA9IHk7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzJdID0geCArIHJlY3QyLndpZHRoO1xuICAgIHRoaXMudmVydGljZXNbM10gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1s0XSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzVdID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudmVydGljZXNbNl0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0O1xuXG4gICAgdGhpcy51cGxvYWQoKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlciBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5RdWFkLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIFRPRE8gY291bGQgcHJvYmFibHkgYmUgcHVzaGVkIGludG8gb25lIHVwbG9hZCFcbiAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHRoaXMudmVydGV4QnVmZmVyICk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy52ZXJ0aWNlcyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgOCAqIDQsIHRoaXMudXZzKTtcblxuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDgpICogNCwgdGhpcy5jb2xvcnMpO1xufTtcblxuUXVhZC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWQ7XG5cblxuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKSxcbiAgICAgICAgXG4gICAgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuICAgIEdMRnJhbWVidWZmZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTEZyYW1lYnVmZmVyLFxuICAgIFxuICAgIFN0ZW5jaWxNYXNrU3RhY2sgPSByZXF1aXJlKCcuL1N0ZW5jaWxNYXNrU3RhY2snKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqL1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgaG9yaXpvbnRhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSB2ZXJ0aWNhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICogQHBhcmFtIHJvb3Qge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAqL1xudmFyIFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24sIHJvb3QpXG57XG4gICAgLy9UT0RPIFJlc29sdXRpb24gY291bGQgZ28gaGVyZSAoIGVnIGxvdyByZXMgYmx1cnMgKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vIG5leHQgdGltZSB0byBjcmVhdGUgYSBmcmFtZSBidWZmZXIgYW5kIHRleHR1cmVcblxuICAgIC8qKlxuICAgICAqIEEgZnJhbWUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEZyYW1lQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuXG4gICAgdGhpcy5jbGVhckNvbG9yID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIG9iamVjdCBhcyBhIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2JqZWN0J3MgdHJhbnNmb3JtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk1hdHJpeH1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lID0gbnVsbDtcbiAgICBcbiAgICB0aGlzLmRlZmF1bHRGcmFtZSA9IG5ldyBQSVhJLlJlY3RhbmdsZSgpO1xuICAgIHRoaXMuZGVzdGluYXRpb25GcmFtZSA9IG51bGw7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgc3RvcmVzIG1hc2tpbmcgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbEJ1ZmZlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzdGVuY2lsIG1hc2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gbmV3IFN0ZW5jaWxNYXNrU3RhY2soKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyBmaWx0ZXIgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDp0aGlzLFxuICAgICAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICAgICAgYm91bmRzOnRoaXMuc2l6ZVxuICAgICAgICB9XG4gICAgXTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEEgZnJhbWUgYnVmZmVyIG5lZWRzIGEgdGFyZ2V0IHRvIHJlbmRlciB0by4uXG4gICAgICAgICAgICBjcmVhdGUgYSB0ZXh0dXJlIGFuZCBiaW5kIGl0IGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAgICAgKi9cbiAgICAgICAgXG5cbiAgICAgICAvLyBUT0RPIGNoYW5nZSFcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGJ5IHRoZSBiYXNlIHRleHR1cmVcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGhpcy5mcmFtZUJ1ZmZlci50ZXh0dXJlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBtYWtlIGl0IGEgbnVsbCBmcmFtZWJ1ZmZlci4uXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZnJhbWVidWZmZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xufTtcblxuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRhcmdldDtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGFyZ2V0O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZmlsdGVyIHRleHR1cmUuXG4gKlxuICogQHBhcmFtIFtiaW5kPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIHdlIGJpbmQgb3VyIGZyYW1lYnVmZmVyIGJlZm9yZSBjbGVhcmluZz9cbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGNsZWFyQ29sb3IpXG57XG4gICAgdmFyIGNjID0gY2xlYXJDb2xvciB8fCB0aGlzLmNsZWFyQ29sb3JcbiAgICB0aGlzLmZyYW1lQnVmZmVyLmNsZWFyKGNjWzBdLGNjWzFdLGNjWzJdLGNjWzNdKS8vcixnLGIsYSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuYXR0YWNoU3RlbmNpbEJ1ZmZlciA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPRE8gY2hlY2sgaWYgc3RlbmNpbCBpcyBkb25lP1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBpcyB1c2VkIGZvciBtYXNraW5nIGluIHBpeGlcbiAgICAgKiBsZXRzIGNyZWF0ZSBvbmUgYW5kIHRoZW4gYWRkIGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVTdGVuY2lsKCk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCBpbml0aWFsaXNlcyB0aGUgdmlld3BvcnQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oZGVzdGluYXRpb25GcmFtZSwgc291cmNlRnJhbWUpXG57XG4gICAgLy9UT09EIHJlZmFjdG9yIHVzYWdlIG9mIGZyYW1lLi5cbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5iaW5kKCk7XG5cbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBkZXN0aW5hdGlvbkZyYW1lIHx8IHRoaXMuZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlZmF1bHRGcmFtZTtcbiAgICB0aGlzLnNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgdGhpcy5zb3VyY2VGcmFtZSB8fCBkZXN0aW5hdGlvbkZyYW1lO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUsIHRoaXMuc291cmNlRnJhbWUgKTtcblxuICAgIGlmKHRoaXMudHJhbnNmb3JtKVxuICAgIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFwcGVuZCh0aGlzLnRyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5kZXN0aW5hdGlvbkZyYW1lICE9PSB0aGlzLnNvdXJjZUZyYW1lKVxuICAgIHtcbiAgICAgICAgZ2wuZW5hYmxlKGdsLlNDSVNTT1JfVEVTVCk7XG4gICAgICAgIGdsLnNjaXNzb3IodGhpcy5kZXN0aW5hdGlvbkZyYW1lLngsIHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGgqIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgIH1cblxuXG4gICAgLy8gVE9ETyAtIGRvZXMgbm90IG5lZWQgdG8gYmUgdXBkYXRlZCBhbGwgdGhlIHRpbWU/P1xuICAgIGdsLnZpZXdwb3J0KHRoaXMuZGVzdGluYXRpb25GcmFtZS54LHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuXG5cbn07XG5cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBwcm9qZWN0aW9uIG1hdHJpeCBiYXNlZCBvbiBhIHByb2plY3Rpb24gZnJhbWUgKHdoaWNoIGlzIGEgcmVjdGFuZ2xlKVxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jYWxjdWxhdGVQcm9qZWN0aW9uID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcblxuICAgIHNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHBtLmlkZW50aXR5KCk7XG5cbiAgICAvLyBUT0RPOiBtYWtlIGRlc3Qgc2NhbGUgc291cmNlXG4gICAgaWYgKCF0aGlzLnJvb3QpXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBzb3VyY2VGcmFtZS54ICogcG0uYTtcbiAgICAgICAgcG0udHkgPSAtMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IC0xIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBSZXNpemVzIHRoZSB0ZXh0dXJlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7TnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gaGVpZ2h0IHtOdW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgd2lkdGggPSB3aWR0aCB8IDA7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDtcblxuICAgIGlmICh0aGlzLnNpemUud2lkdGggPT09IHdpZHRoICYmIHRoaXMuc2l6ZS5oZWlnaHQgPT09IGhlaWdodCkgXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZGVmYXVsdEZyYW1lLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5kZWZhdWx0RnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5yZXNpemUod2lkdGggKiB0aGlzLnJlc29sdXRpb24sIGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCBwcm9qZWN0aW9uRnJhbWUgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHJlbmRlciB0YXJnZXQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFN0ZW5jaWxNYXNrU3RhY2soKVxue1xuXHQvKipcbiAgICAgKiBUaGUgYWN0dWFsIHN0YWNrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVE9ETyBAYWx2aW5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvdW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb3VudCA9IDA7XG59XG5cblN0ZW5jaWxNYXNrU3RhY2sucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RlbmNpbE1hc2tTdGFjaztcbm1vZHVsZS5leHBvcnRzID0gU3RlbmNpbE1hc2tTdGFjaztcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBNYXBzIGdsIGJsZW5kIGNvbWJpbmF0aW9ucyB0byBXZWJHTFxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcbiAgICBvYmplY3QgPSBvYmplY3QgfHwge307XG5cbiAgICAvL1RPRE8gLSBwcmVtdWx0aXBseSBhbHBoYSB3b3VsZCBiZSBkaWZmZXJlbnQuXG4gICAgLy9hZGQgYSBib29sZWFuIGZvciB0aGF0IVxuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdICAgICAgICA9IFtnbC5PTkUsICAgICAgIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLkRTVF9BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk1VTFRJUExZXSAgICAgID0gW2dsLkRTVF9DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gW2dsLlNSQ19BTFBIQSwgZ2wuT05FXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VdICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSFVFXSAgICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcblxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpO1xuIiwiQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbCwgb2JqZWN0KVxue1xuXHRvYmplY3Q9IG9iamVjdCB8fCB7fTtcblxuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlBPSU5UU10gICAgICAgICA9IGdsLlBPSU5UUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FU10gICAgICAgICAgPSBnbC5MSU5FUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FX0xPT1BdICAgICAgPSBnbC5MSU5FX0xPT1A7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9TVFJJUF0gICAgID0gZ2wuTElORV9TVFJJUDtcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5UUklBTkdMRVNdICAgICAgPSBnbC5UUklBTkdMRVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBdID0gZ2wuVFJJQU5HTEVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXSAgID0gZ2wuVFJJQU5HTEVfRkFOO1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGk7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIFNwcml0ZSBvYmplY3QgaXMgdGhlIGJhc2UgZm9yIGFsbCB0ZXh0dXJlZCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIHRvIHRoZSBzY3JlZW5cbiAqXG4gKiBBIHNwcml0ZSBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGFuIGltYWdlIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSBmb3IgdGhpcyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gU3ByaXRlKHRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW5jaG9yIHNldHMgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLDAgdGhpcyBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMC41LDAuNSBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyBjZW50ZXJlZFxuICAgICAqIFNldHRpbmcgdGhlIGFuY2hvciB0byAxLDEgd291bGQgbWVhbiB0aGUgdGV4dHVyZSdzIG9yaWdpbiBwb2ludCB3aWxsIGJlIHRoZSBib3R0b20gcmlnaHQgY29ybmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuYW5jaG9yID0gbmV3IG1hdGguUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgc3ByaXRlICh0aGlzIGlzIGluaXRpYWxseSBzZXQgYnkgdGhlIHRleHR1cmUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBIHZhbHVlIG9mIDB4RkZGRkZGIHdpbGwgcmVtb3ZlIGFueSB0aW50IGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaGFkZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBzcHJpdGUuIFNldCB0byBudWxsIHRvIHJlbW92ZSBhIGN1cnJlbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5BYnN0cmFjdEZpbHRlcnxQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBjYWNoZWQgdmFsdWUgb2YgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8vIGNhbGwgdGV4dHVyZSBzZXR0ZXJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG4gICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlXG4gICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy52ZXJ0ZXhEYXRhID0gbmV3IEZsb2F0MzJBcnJheSg4KTtcbn1cblxuLy8gY29uc3RydWN0b3JcblNwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuc2NhbGUueCkgKiB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBNYXRoLmFicyh0aGlzLnNjYWxlLnkpICogdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc2lnbiA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS55KSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gc2lnbiAqIHZhbHVlIC8gdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5TcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIHNvIGlmIF93aWR0aCBpcyAwIHRoZW4gd2lkdGggd2FzIG5vdCBzZXQuLlxuICAgIGlmICh0aGlzLl93aWR0aClcbiAgICB7XG4gICAgICAgIHRoaXMuc2NhbGUueCA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS54KSAqIHRoaXMuX3dpZHRoIC8gdGhpcy50ZXh0dXJlLmZyYW1lLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnkgPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgKiB0aGlzLl9oZWlnaHQgLyB0aGlzLnRleHR1cmUuZnJhbWUuaGVpZ2h0O1xuICAgIH1cbn07XG5cblNwcml0ZS5wcm90b3R5cGUuY2FjbHVsYXRlVmVydGljZXMgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICB3dCA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICBhID0gd3QuYSwgYiA9IHd0LmIsIGMgPSB3dC5jLCBkID0gd3QuZCwgdHggPSB3dC50eCwgdHkgPSB3dC50eSxcbiAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDEsXG4gICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG4gICAgICAgIFxuICAgIGlmICh0cmltKVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkIGFuZCBpcyBub3QgYSB0aWxpbmdzcHJpdGUgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgIHcxID0gdHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgaDEgPSB0cmltLnkgLSB0aGlzLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgIGgwID0gaDEgKyB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG4gICAgfVxuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzBdID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVsxXSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzJdID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVszXSA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs0XSA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbNV0gPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs2XSA9IGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbN10gPSBkICogaDAgKyBiICogdzEgKyB0eTtcblxuXG59XG5cbi8qKlxuKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMudGV4dHVyZURpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMudmVydGV4RGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICB9XG4gICAgXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBTcHJpdGUgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgc3ByaXRlXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG4gICAgICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudmVydGV4RGlydHkgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWluWCxcbiAgICAgICAgICAgIG1heFgsXG4gICAgICAgICAgICBtaW5ZLFxuICAgICAgICAgICAgbWF4WSxcbiAgICAgICAgICAgIHZlcnRleERhdGEgPSB0aGlzLnZlcnRleERhdGE7XG5cbiAgICAgICAgdmFyIHgxID0gdmVydGV4RGF0YVswXVxuICAgICAgICB2YXIgeTEgPSB2ZXJ0ZXhEYXRhWzFdXG5cbiAgICAgICAgdmFyIHgyID0gdmVydGV4RGF0YVsyXVxuICAgICAgICB2YXIgeTIgPSB2ZXJ0ZXhEYXRhWzNdXG5cbiAgICAgICAgdmFyIHgzID0gdmVydGV4RGF0YVs0XVxuICAgICAgICB2YXIgeTMgPSB2ZXJ0ZXhEYXRhWzVdXG5cbiAgICAgICAgdmFyIHg0ID0gdmVydGV4RGF0YVs2XVxuICAgICAgICB2YXIgeTQgPSB2ZXJ0ZXhEYXRhWzddXG5cbiAgICAgICAgbWluWCA9IHgxO1xuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MTtcbiAgICAgICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICAgICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICAgICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgICAgICBtYXhYID0geDE7XG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkxO1xuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIC8vIGNoZWNrIGZvciBjaGlsZHJlblxuICAgICAgICBpZih0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkQm91bmRzID0gdGhpcy5jb250YWluZXJHZXRCb3VuZHMoKTtcblxuICAgICAgICAgICAgdzAgPSBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgdzEgPSBjaGlsZEJvdW5kcy54ICsgY2hpbGRCb3VuZHMud2lkdGg7XG4gICAgICAgICAgICBoMCA9IGNoaWxkQm91bmRzLnk7XG4gICAgICAgICAgICBoMSA9IGNoaWxkQm91bmRzLnkgKyBjaGlsZEJvdW5kcy5oZWlnaHQ7XG5cbiAgICAgICAgICAgIG1pblggPSAobWluWCA8IHcwKSA/IG1pblggOiB3MDtcbiAgICAgICAgICAgIG1pblkgPSAobWluWSA8IGgwKSA/IG1pblkgOiBoMDtcblxuICAgICAgICAgICAgbWF4WCA9IChtYXhYID4gdzEpID8gbWF4WCA6IHcxO1xuICAgICAgICAgICAgbWF4WSA9IChtYXhZID4gaDEpID8gbWF4WSA6IGgxO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2JvdW5kcy54ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB0aGlzLl9ib3VuZHMueSA9IC10aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRoaXMuX2JvdW5kcy5oZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgcmV0dXJuIHRoaXMuX2JvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHNwcml0ZVxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5TcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy50ZXh0dXJlLmNyb3Aud2lkdGggPD0gMCB8fCB0aGlzLnRleHR1cmUuY3JvcC5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyAgSWdub3JlIG51bGwgc291cmNlc1xuICAgIGlmICh0aGlzLnRleHR1cmUudmFsaWQpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgICAgICB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgICAgICBkeCxcbiAgICAgICAgICAgIGR5LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ7XG5cbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgICAgICAvLyBJZiBzbW9vdGhpbmdFbmFibGVkIGlzIHN1cHBvcnRlZCBhbmQgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIHNtb290aGluZyBwcm9wZXJ0eSBmb3IgdGhpcyB0ZXh0dXJlXG4gICAgICAgIHZhciBzbW9vdGhpbmdFbmFibGVkID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5zY2FsZU1vZGUgPT09IENPTlNULlNDQUxFX01PREVTLkxJTkVBUjtcbiAgICAgICAgaWYgKHJlbmRlcmVyLnNtb290aFByb3BlcnR5ICYmIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldICE9PSBzbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0W3JlbmRlcmVyLnNtb290aFByb3BlcnR5XSA9IHNtb290aGluZ0VuYWJsZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgdGV4dHVyZSBpcyB0cmltbWVkIHdlIG9mZnNldCBieSB0aGUgdHJpbSB4L3ksIG90aGVyd2lzZSB3ZSB1c2UgdGhlIGZyYW1lIGRpbWVuc2lvbnNcblxuICAgICAgICBpZih0ZXh0dXJlLnJvdGF0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2lkdGggPSB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBkeCA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgXG4gICAgICAgICAgICBkeCArPSB3aWR0aDtcblxuICAgICAgICAgICAgd3QudHggPSBkeSAqIHd0LmEgKyBkeCAqIHd0LmMgKyB3dC50eDtcbiAgICAgICAgICAgIHd0LnR5ID0gZHkgKiB3dC5iICsgZHggKiB3dC5kICsgd3QudHk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gd3QuYTtcbiAgICAgICAgICAgIHd0LmEgID0gLXd0LmM7XG4gICAgICAgICAgICB3dC5jICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICB0ZW1wID0gd3QuYjtcbiAgICAgICAgICAgIHd0LmIgID0gLXd0LmQ7XG4gICAgICAgICAgICB3dC5kICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICAvLyB0aGUgYW5jaG9yIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCBhYm92ZSwgc28gbGV0cyBzZXQgaXQgdG8gemVyb1xuICAgICAgICAgICAgZHggPSAwO1xuICAgICAgICAgICAgZHkgPSAwO1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC53aWR0aDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0ZXh0dXJlLnRyaW0ud2lkdGggOiB0aGlzLmFuY2hvci54ICogLXRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRleHR1cmUudHJpbS5oZWlnaHQgOiB0aGlzLmFuY2hvci55ICogLXRleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfVxuXG5cblxuICAgICAgICAvLyBBbGxvdyBmb3IgcGl4ZWwgcm91bmRpbmdcbiAgICAgICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB3dC5hLFxuICAgICAgICAgICAgICAgIHd0LmIsXG4gICAgICAgICAgICAgICAgd3QuYyxcbiAgICAgICAgICAgICAgICB3dC5kLFxuICAgICAgICAgICAgICAgICh3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMCxcbiAgICAgICAgICAgICAgICAod3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uKSB8IDBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGR4ID0gZHggfCAwO1xuICAgICAgICAgICAgZHkgPSBkeSB8IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgd3QudHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHd0LnR5ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcblxuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIC8vIFRPRE8gY2xlYW4gdXAgY2FjaGluZyAtIGhvdyB0byBjbGVhbiB1cCB0aGUgY2FjaGVzP1xuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC54ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmNyb3AueSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeSAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHNwcml0ZSBhbmQgb3B0aW9uYWxseSBpdHMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBbZGVzdHJveVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgY3VycmVudCB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICovXG5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveVRleHR1cmUsIGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYW5jaG9yID0gbnVsbDtcblxuICAgIGlmIChkZXN0cm95VGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUuZGVzdHJveShkZXN0cm95QmFzZVRleHR1cmUpO1xuICAgIH1cblxuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn07XG5cbi8vIHNvbWUgaGVscGVyIGZ1bmN0aW9ucy4uXG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgY3Jvc3Mtb3JpZ2luIHBhcmFtZXRlclxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBzY2FsZSBtb2RlLCBzZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGZyYW1lSWRcbiAqL1xuU3ByaXRlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTcHJpdGUodGV4dHVyZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGJhc2VkIG9uIGFuIGltYWdlIHVybFxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZUlkIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblNwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFNwcml0ZShUZXh0dXJlLmZyb21JbWFnZShpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSk7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyJyksXG4gICAgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzJyksXG4gICAgZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIGdsQ29yZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFNwcml0ZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9TcHJpdGVSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKiBSZW5kZXJlciBkZWRpY2F0ZWQgdG8gZHJhd2luZyBhbmQgYmF0Y2hpbmcgc3ByaXRlcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZVJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIHZhbHVlcyBzZW50IGluIHRoZSB2ZXJ0ZXggYnVmZmVyLlxuICAgICAqIHBvc2l0aW9uWCwgcG9zaXRpb25ZLCBjb2xvclIsIGNvbG9yRywgY29sb3JCID0gNVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydFNpemUgPSA1O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIHZlcnRleCBpbmZvcm1hdGlvbiBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBpbWFnZXMgaW4gdGhlIFNwcml0ZUJhdGNoIGJlZm9yZSBpdCBmbHVzaGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IENPTlNULlNQUklURV9CQVRDSF9TSVpFOyAvLyAyMDAwIGlzIGEgbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIC8gZGVza3RvcFxuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBpbiBvdXIgYmF0Y2hcbiAgICB2YXIgbnVtVmVydHMgPSAodGhpcy5zaXplICogNCkgKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYmF0Y2gsIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgICB2YXIgbnVtSW5kaWNlcyA9IHRoaXMuc2l6ZSAqIDY7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgdmVydGV4IGRhdGEgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdGhlIHZlcnRleCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEFycmF5QnVmZmVyKG51bVZlcnRzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgRmxvYXQzMkFycmF5IGZvciBwb3NpdGlvbnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG4gICAgXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBVaW50MzJBcnJheSBmb3IgdXZzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciBjb2xvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXMgb2YgdGhlIGdlb21ldHJ5IChxdWFkcykgdG8gZHJhd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzKHRoaXMuc2l6ZSlcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICBcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIHRoaXMuZ3JvdXBzID0gW107XG4gICAgXG4gICAgLy9UT0RPIC0gMzAwIGlzIGEgYml0IG1hZ2ljLCBmaWd1cmUgb3V0IGEgbmljZXIgYW1vdW50IVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zaXplOyBpKyspIFxuICAgIHtcbiAgICAgICAgdGhpcy5ncm91cHNbaV0gPSB7dGV4dHVyZXM6W10sIHRleHR1cmVDb3VudDowLCBpZHM6W10sIHNpemU6MCwgc3RhcnQ6MCwgYmxlbmQ6MH07IFxuICAgIH07XG4gICAgXG4gICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG5cbiAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbnVsbDsgICAgXG59XG5cblxuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ByaXRlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZVJlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdzcHJpdGUnLCBTcHJpdGVSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMuTUFYX1RFWFRVRVMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpO1xuXG4gICAgdGhpcy5fc2hhZGVyID0gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIoZ2wsIHRoaXMuTUFYX1RFWFRVRVMpLy9uZXcgVGV4dHVyZVNoYWRlcihnbCk7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXI7XG5cbiAgICAvLyBjcmVhdGUgYSBjb3VwbGUgb2YgYnVmZmVyc1xuICAgIHRoaXMudmVydGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlcihnbCwgbnVsbCwgZ2wuRFlOQU1JQ19EUkFXKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyKGdsLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIC8vIGJ1aWxkIHRoZSB2YW8gb2JqZWN0IHRoYXQgd2lsbCByZW5kZXIuLlxuICAgIHRoaXMudmFvID0gbmV3IGdsQ29yZS5WZXJ0ZXhBcnJheU9iamVjdChnbCk7XG5cbiAgICB0aGlzLnZhby5hZGRJbmRleCh0aGlzLmluZGV4QnVmZmVyKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCBnbC5VTlNJR05FRF9TSE9SVCwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDIgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgZ2wuVU5TSUdORURfQllURSwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDMgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlSWQsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDQgKiA0KTtcblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IDk5OTk5O1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHJlbmRlciB3aGVuIHVzaW5nIHRoaXMgc3ByaXRlYmF0Y2hcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChzcHJpdGUpXG57XG4gICAgLy9UT0RPIHNldCBibGVuZCBtb2Rlcy4uXG4gICAgLy8gY2hlY2sgdGV4dHVyZS4uXG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID49IHRoaXMuc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICB9XG5cbiAgXG4gICAgLy8gZ2V0IHRoZSB1dnMgZm9yIHRoZSB0ZXh0dXJlXG4gICBcblxuICAgIC8vIGlmIHRoZSB1dnMgaGF2ZSBub3QgdXBkYXRlZCB0aGVuIG5vIHBvaW50IHJlbmRlcmluZyBqdXN0IHlldCFcbiAgICBpZiAoIXNwcml0ZS50ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgIC8vIHB1c2ggYSB0ZXh0dXJlLlxuICAgIC8vIGluY3JlbWVudCB0aGUgYmF0Y2hzaXplXG4gICAgdmFyIG5leHRUZXh0dXJlID0gIHNwcml0ZS50ZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIHZhciBjdXJyZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRHcm91cDtcbiAgICB2YXIgaTtcblxuICAgIGlmKHRoaXMuY3VycmVudFRleHR1cmUgIT09IG5leHRUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG5leHRUZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgaWYoIW5leHRUZXh0dXJlLl9lbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5fZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5faWQgPSB0aGlzLnRleHR1cmVDb3VudDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy50ZXh0dXJlQ291bnQgPT09IHRoaXMuTUFYX1RFWFRVRVMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50OyBpKyspIFxuICAgICAgICAgICAgICAgIHsgICAgIFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnNpemUgPSB0aGlzLmN1cnJlbnRJbmRleCAtIGN1cnJlbnRHcm91cC5zdGFydDtcbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC5zdGFydCA9IHRoaXMuY3VycmVudEluZGV4O1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCsrXSA9IG5leHRUZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcbiAgICB9XG5cbiAgICAvLyBUT0RPIHRyaW0/P1xuICAgIHZhciBpbmRleCA9IHRoaXMuY3VycmVudEluZGV4ICogdGhpcy52ZXJ0Qnl0ZVNpemU7XG5cbiAgICB0aGlzLmN1cnJlbnRJbmRleCsrO1xuXG4gICAgLy8gdXBsb2FkIHRoZSBzcHJpdGUgZWxlbWV0bnMuLi5cbiAgICAvLyB0aGV5IGhhdmUgYWxsIHJlYWR5IGJlZW4gY2FsY3VsYXRlZCBzbyB3ZSBqdXN0IG5lZWQgdG8gcHVzaCB0aGVtIGludG8gdGhlIGJ1ZmZlci5cbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG4gICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMucG9zaXRpb25zO1xuICAgIHZhciB2ZXJ0ZXhEYXRhID0gc3ByaXRlLnZlcnRleERhdGFcbiAgICB2YXIgdGludCA9IChzcHJpdGUudGludCA+PiAxNikgKyAoc3ByaXRlLnRpbnQgJiAweGZmMDApICsgKChzcHJpdGUudGludCAmIDB4ZmYpIDw8IDE2KSArIChzcHJpdGUud29ybGRBbHBoYSAqIDI1NSA8PCAyNCk7XG4gICAgdmFyIHV2cyA9IHNwcml0ZS50ZXh0dXJlLl91dnMudXZzX3VpbnQzMjtcbiAgICAvL3h5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVswXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzFdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzBdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkOyBcbiAgICBcbiAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMl07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVszXTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1sxXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNF07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs1XTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1syXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs2XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzddO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzNdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb250ZW50IGFuZCBlbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPT09IDApcmV0dXJuO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gdGhpcy5jdXJyZW50R3JvdXAuc3RhcnQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgeyAgICAgXG4gICAgICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVzW2ldLl9lbmFibGVkID0gZmFsc2U7XG4gICAgfTtcbiAgIFxuICAgIC8vIGRvIHNvbWUgc21hcnQgYXJyYXkgc3R1ZmYuLlxuICAgIC8vIGRvdWJsZSBzaXplIHNvIHdlIGRvbnQgYWx3YXkgc3ViYXJyYXkgdGhlIGVsZW1lbnRzLi5cbiAgICAvLyB1cGxvYWQgdGhlIHZlcnRzIHRvIHRoZSBidWZmZXJcbiAgICBpZiAodGhpcy5jdXJyZW50QmF0Y2hTaXplID4gKCB0aGlzLnNpemUgKiAwLjUgKSApXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlci51cGxvYWQodGhpcy52ZXJ0aWNlcywgMCwgdHJ1ZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIG8gayAuLiBzdWIgYXJyYXkgaXMgU0xPVz4/XG4gICAgICAgIHZhciB2aWV3ID0gdGhpcy5wb3NpdGlvbnMuc3ViYXJyYXkoMCwgdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZSk7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh2aWV3LCAwLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBiaW5kIHNoYWRlci4uXG4gICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHRoaXMuX3NoYWRlcik7XG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggMCApO1xuXG4gICAgLy8vIHJlbmRlciB0aGUgZ3JvdXBzLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5ncm91cENvdW50OyBpKyspIHtcbiAgICAgICAgXG4gICAgICAgIHZhciBncm91cCA9IHRoaXMuZ3JvdXBzW2ldO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ3JvdXAudGV4dHVyZUNvdW50OyBqKyspIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFRleHR1cmUoZ3JvdXAudGV4dHVyZXNbal0sIGopO1xuICAgICAgICB9O1xuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGdyb3VwLnNpemUgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgZ3JvdXAuc3RhcnQgKiA2ICogMik7XG4gICAgfTtcblxuICAgIC8vIHJlc2V0IGVsZW1lbnRzIGZvciB0aGUgbmV4dCBmbHVzaFxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cENvdW50ID0gMDtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcbiAgICB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgc3ByaXRlIGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZhby5iaW5kKCk7XG59O1xuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xuICAgIHRoaXMudmFvLnVuYmluZCgpO1xufTtcbi8qKlxuICogRGVzdHJveXMgdGhlIFNwcml0ZUJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMudmVydGljZXMgPSBudWxsO1xuICAgIHRoaXMucG9zaXRpb25zID0gbnVsbDtcbiAgICB0aGlzLmNvbG9ycyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMudmVydGV4QnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuc3ByaXRlcyA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuXG5mdW5jdGlvbiBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgbWF4VGV4dHVyZXMpXG57XG4gICAgdmFyIHZlcnRleFNyYyA9IFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcbmF0dHJpYnV0ZSBmbG9hdCBhVGV4dHVyZUlkO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyBmbG9hdCB2VGV4dHVyZUlkO1xcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2VGV4dHVyZUlkID0gYVRleHR1cmVJZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cIjtcbiAgICB2YXIgZnJhZ21lbnRTcmMgPSAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxuJyArIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKSArIFwiXFxuXFxuXCIgKyBmcmFnVGVtcGxhdGVcblxuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMucmVwbGFjZSgvXFwlXFwlL2dpLCAnMTYnKTtcblxuICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXG4gICAgdmFyIHNhbXBsZVZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkrKykge1xuICAgICAgICBzYW1wbGVWYWx1ZXNbaV0gPSBpO1xuICAgIH07XG5cbiAgICBzaGFkZXIuYmluZCgpO1xuICAgIHNoYWRlci51bmlmb3Jtcy51U2FtcGxlcnMgPSBzYW1wbGVWYWx1ZXM7XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVNhbXBsZVNyYyhtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgc3JjID0gJ3ZlYzQgZ2V0U2FtcGxlRnJvbUFycmF5KHNhbXBsZXIyRCB0ZXh0dXJlc1slJV0sIGludCBuZHgsIHZlYzIgdXYpIHtcXG5cXG52ZWM0IGNvbG9yOydcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSBcbiAgICB7XG4gICAgICAgIGlmKGkgPiAwKXNyYyArPSAnXFxuZWxzZSAnO1xuICAgICAgICBpZihpIDwgbWF4VGV4dHVyZXMtMSlzcmMgKz0gJ2lmKG5keCA9PSAnICsgaSArICcpJztcbiAgICAgICAgc3JjICs9ICdcXG57JztcbiAgICAgICAgc3JjICs9ICdcXG5cXHRjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlc1snK2krJ10sIHV2KTsnO1xuICAgICAgICBzcmMgKz0gJ1xcbn0nO1xuICAgIH07XG5cbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAncmV0dXJuIGNvbG9yOyc7XG4gICAgc3JjICs9ICdcXG59JztcblxuICAgIHJldHVybiBzcmM7XG59XG5cbnZhciBmcmFnVGVtcGxhdGUgPSBbXG5cbiAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuICAgICd2YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7JyxcbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJzWyUlXTsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnZ2xfRnJhZ0NvbG9yID0gZ2V0U2FtcGxlRnJvbUFycmF5KHVTYW1wbGVycywgaW50KHZUZXh0dXJlSWQpLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvcjsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcjtcbiIsInZhciBTcHJpdGUgPSByZXF1aXJlKCcuLi9zcHJpdGVzL1Nwcml0ZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgVGV4dCBPYmplY3Qgd2lsbCBjcmVhdGUgYSBsaW5lIG9yIG11bHRpcGxlIGxpbmVzIG9mIHRleHQuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJyBpbiB5b3VyIHRleHQgc3RyaW5nLFxuICogb3IgYWRkIGEgd29yZFdyYXAgcHJvcGVydHkgc2V0IHRvIHRydWUgYW5kIGFuZCB3b3JkV3JhcFdpZHRoIHByb3BlcnR5IHdpdGggYSB2YWx1ZSBpbiB0aGUgc3R5bGUgb2JqZWN0LlxuICpcbiAqIEEgVGV4dCBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGEgc3RyaW5nIGFuZCBhIHN0eWxlIG9iamVjdFxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dCA9IG5ldyBQSVhJLlRleHQoJ1RoaXMgaXMgYSBwaXhpIHRleHQnLHtmb250IDogJzI0cHggQXJpYWwnLCBmaWxsIDogMHhmZjEwMTAsIGFsaWduIDogJ2NlbnRlcid9KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBbc3R5bGVdIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnRdIHtzdHJpbmd9IGRlZmF1bHQgJ2JvbGQgMjBweCBBcmlhbCcgVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gKiBAcGFyYW0gW3N0eWxlLmZpbGw9J2JsYWNrJ10ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdCBzaW5nbGUgbGluZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZV0ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBzdHJva2UgZS5nICdibHVlJywgJyNGQ0ZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZVRoaWNrbmVzcz0wXSB7bnVtYmVyfSBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgc3Ryb2tlLiBEZWZhdWx0IGlzIDAgKG5vIHN0cm9rZSlcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXAsIGl0IG5lZWRzIHdvcmRXcmFwIHRvIGJlIHNldCB0byB0cnVlXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvdz1mYWxzZV0ge2Jvb2xlYW59IFNldCBhIGRyb3Agc2hhZG93IGZvciB0aGUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93QW5nbGU9TWF0aC5QSS80XSB7bnVtYmVyfSBTZXQgYSBhbmdsZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAqIEBwYXJhbSBbc3R5bGUucGFkZGluZz0wXSB7bnVtYmVyfSBPY2Nhc2lvbmFsbHkgc29tZSBmb250cyBhcmUgY3JvcHBlZCBvbiB0b3Agb3IgYm90dG9tLiBBZGRpbmcgc29tZSBwYWRkaW5nIHdpbGxcbiAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVKb2luPSdtaXRlciddIHtzdHJpbmd9IFRoZSBsaW5lSm9pbiBwcm9wZXJ0eSBzZXRzIHRoZSB0eXBlIG9mIGNvcm5lciBjcmVhdGVkLCBpdCBjYW4gcmVzb2x2ZVxuICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAqICAgICAgb3IgaW5jcmVhc2UgdGhlIHNwaWtpbmVzcyBvZiByZW5kZXJlZCB0ZXh0LlxuICovXG5mdW5jdGlvbiBUZXh0KHRleHQsIHN0eWxlLCByZXNvbHV0aW9uKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgZWxlbWVudCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gdG9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGhcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIGNhbnZhcy5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXModGhpcy5jYW52YXMpO1xuICAgIHRleHR1cmUudHJpbSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuICAgIFNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3ByaXRlLnByb3RvdHlwZSk7XG5UZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHQ7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHQ7XG5cblRleHQuZm9udFByb3BlcnRpZXNDYWNoZSA9IHt9O1xuVGV4dC5mb250UHJvcGVydGllc0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuVGV4dC5mb250UHJvcGVydGllc0NvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHQucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueCAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dCwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc2NhbGUueSAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlIC8gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBzdHlsZSBvZiB0aGUgdGV4dFxuICAgICAqXG4gICAgICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmZvbnQ9J2JvbGQgMjBwdCBBcmlhbCddIHtzdHJpbmd9IFRoZSBzdHlsZSBhbmQgc2l6ZSBvZiB0aGUgZm9udFxuICAgICAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGVnICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnN0cm9rZT0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlZyAnYmx1ZScsICcjRkNGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICAgICAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcFdpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIGF0IHdoaWNoIHRleHQgd2lsbCB3cmFwXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSGVpZ2h0XSB7bnVtYmVyfSBUaGUgbGluZSBoZWlnaHQsIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgc3BhY2UgdGhhdCBhIGxldHRlciB1c2VzXG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfG51bWJlcn0gQSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgb24gdGhlIGRyb3BzaGFkb3cgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzZdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0JsdXI9MF0ge251bWJlcn0gU2V0IGEgc2hhZG93IGJsdXIgcmFkaXVzXG4gICAgICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICAgICAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLnRleHRCYXNlbGluZT0nYWxwaGFiZXRpYyddIHtzdHJpbmd9IFRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dCB0aGF0IGlzIHJlbmRlcmVkLlxuICAgICAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gICAgICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gICAgICogQHBhcmFtIFtzdHlsZS5taXRlckxpbWl0PTEwXSB7bnVtYmVyfSBUaGUgbWl0ZXIgbGltaXQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdtaXRlcicgbGluZUpvaW4gbW9kZS4gVGhpcyBjYW4gcmVkdWNlXG4gICAgICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICBzdHlsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdHlsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3R5bGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZmlsbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5maWxsID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5maWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5zdHJva2UgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5zdHJva2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmRyb3BTaGFkb3dDb2xvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlLmZvbnQgPSBzdHlsZS5mb250IHx8ICdib2xkIDIwcHQgQXJpYWwnO1xuICAgICAgICAgICAgc3R5bGUuZmlsbCA9IHN0eWxlLmZpbGwgfHwgJ2JsYWNrJztcbiAgICAgICAgICAgIHN0eWxlLmFsaWduID0gc3R5bGUuYWxpZ24gfHwgJ2xlZnQnO1xuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gc3R5bGUuc3Ryb2tlIHx8ICdibGFjayc7IC8vcHJvdmlkZSBhIGRlZmF1bHQsIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2lzc3Vlcy8xMzZcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZVRoaWNrbmVzcyA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyB8fCAwO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXAgPSBzdHlsZS53b3JkV3JhcCB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLndvcmRXcmFwV2lkdGggPSBzdHlsZS53b3JkV3JhcFdpZHRoIHx8IDEwMDtcblxuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvdyA9IHN0eWxlLmRyb3BTaGFkb3cgfHwgZmFsc2U7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3IgfHwgJyMwMDAwMDAnO1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0FuZ2xlID0gc3R5bGUuZHJvcFNoYWRvd0FuZ2xlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93QW5nbGUgOiBNYXRoLlBJIC8gNjtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSA9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlIDogNTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXIgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dCbHVyIDogMDsgLy9zaGFkb3dCbHVyIGlzICcwJyBieSBkZWZhdWx0IGFjY29yZGluZyB0byBIVE1MXG5cbiAgICAgICAgICAgIHN0eWxlLnBhZGRpbmcgPSBzdHlsZS5wYWRkaW5nIHx8IDA7XG5cbiAgICAgICAgICAgIHN0eWxlLnRleHRCYXNlbGluZSA9IHN0eWxlLnRleHRCYXNlbGluZSB8fCAnYWxwaGFiZXRpYyc7XG5cbiAgICAgICAgICAgIHN0eWxlLmxpbmVKb2luID0gc3R5bGUubGluZUpvaW4gfHwgJ21pdGVyJztcbiAgICAgICAgICAgIHN0eWxlLm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0IHx8IDEwO1xuXG4gICAgICAgICAgICB0aGlzLl9zdHlsZSA9IHN0eWxlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjb3B5IGZvciB0aGUgdGV4dCBvYmplY3QuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHRleHQpe1xuICAgICAgICAgICAgdGV4dCA9IHRleHQudG9TdHJpbmcoKSB8fCAnICc7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dCA9PT0gdGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdGV4dDtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHN0eWxlID0gdGhpcy5fc3R5bGU7XG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuXG4gICAgLy8gd29yZCB3cmFwXG4gICAgLy8gcHJlc2VydmUgb3JpZ2luYWwgdGV4dFxuICAgIHZhciBvdXRwdXRUZXh0ID0gc3R5bGUud29yZFdyYXAgPyB0aGlzLndvcmRXcmFwKHRoaXMuX3RleHQpIDogdGhpcy5fdGV4dDtcblxuICAgIC8vIHNwbGl0IHRleHQgaW50byBsaW5lc1xuICAgIHZhciBsaW5lcyA9IG91dHB1dFRleHQuc3BsaXQoLyg/OlxcclxcbnxcXHJ8XFxuKS8pO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgd2lkdGhcbiAgICB2YXIgbGluZVdpZHRocyA9IG5ldyBBcnJheShsaW5lcy5sZW5ndGgpO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBmb250UHJvcGVydGllcyA9IHRoaXMuZGV0ZXJtaW5lRm9udFByb3BlcnRpZXMoc3R5bGUuZm9udCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBsaW5lV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQobGluZXNbaV0pLndpZHRoO1xuICAgICAgICBsaW5lV2lkdGhzW2ldID0gbGluZVdpZHRoO1xuICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxpbmVXaWR0aCk7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gbWF4TGluZVdpZHRoICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgd2lkdGggKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gKCB3aWR0aCArIHRoaXMuY29udGV4dC5saW5lV2lkdGggKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIC8vIGNhbGN1bGF0ZSB0ZXh0IGhlaWdodFxuICAgIHZhciBsaW5lSGVpZ2h0ID0gdGhpcy5zdHlsZS5saW5lSGVpZ2h0IHx8IGZvbnRQcm9wZXJ0aWVzLmZvbnRTaXplICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuXG4gICAgdmFyIGhlaWdodCA9IGxpbmVIZWlnaHQgKiBsaW5lcy5sZW5ndGg7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBoZWlnaHQgKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9ICggaGVpZ2h0ICsgdGhpcy5fc3R5bGUucGFkZGluZyAqIDIgKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMuY29udGV4dC5zY2FsZSggdGhpcy5yZXNvbHV0aW9uLCB0aGlzLnJlc29sdXRpb24pO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIH1cblxuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxTdHlsZT1cIiNGRjAwMDBcIjtcbiAgICAvL3RoaXMuY29udGV4dC5maWxsUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIHRoaXMuY29udGV4dC5mb250ID0gc3R5bGUuZm9udDtcbiAgICB0aGlzLmNvbnRleHQuc3Ryb2tlU3R5bGUgPSBzdHlsZS5zdHJva2U7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcbiAgICB0aGlzLmNvbnRleHQudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lO1xuICAgIHRoaXMuY29udGV4dC5saW5lSm9pbiA9IHN0eWxlLmxpbmVKb2luO1xuICAgIHRoaXMuY29udGV4dC5taXRlckxpbWl0ID0gc3R5bGUubWl0ZXJMaW1pdDtcblxuICAgIHZhciBsaW5lUG9zaXRpb25YO1xuICAgIHZhciBsaW5lUG9zaXRpb25ZO1xuXG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBpZiAoc3R5bGUuZHJvcFNoYWRvd0JsdXIgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3I7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Qmx1ciA9IHN0eWxlLmRyb3BTaGFkb3dCbHVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4U2hhZG93T2Zmc2V0ID0gTWF0aC5jb3Moc3R5bGUuZHJvcFNoYWRvd0FuZ2xlKSAqIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICAgICAgdmFyIHlTaGFkb3dPZmZzZXQgPSBNYXRoLnNpbihzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogbGluZUhlaWdodCkgKyBmb250UHJvcGVydGllcy5hc2NlbnQ7XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblggKyB4U2hhZG93T2Zmc2V0LCBsaW5lUG9zaXRpb25ZICsgeVNoYWRvd09mZnNldCArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9zZXQgY2FudmFzIHRleHQgc3R5bGVzXG4gICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmZpbGw7XG5cbiAgICAvL2RyYXcgbGluZXMgbGluZSBieSBsaW5lXG4gICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICBpZiAoc3R5bGUuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHlsZS5zdHJva2UgJiYgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVUZXh0dXJlKCk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLnRyaW0ueCA9IDA7XG4gICAgdGV4dHVyZS50cmltLnkgPSAtdGhpcy5fc3R5bGUucGFkZGluZztcblxuICAgIHRleHR1cmUudHJpbS53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRleHR1cmUudHJpbS5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgLSB0aGlzLl9zdHlsZS5wYWRkaW5nKjI7XG5cbiAgICB0aGlzLl93aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuX2hlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZW1pdCgndXBkYXRlJywgIHRleHR1cmUuYmFzZVRleHR1cmUpO1xuXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKi9cblRleHQucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgLy90aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUucmVuZGVyV2ViR0wuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgIC8vICAgdGhpcy5yZXNvbHV0aW9uID0gMS8vcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGFzY2VudCwgZGVzY2VudCBhbmQgZm9udFNpemUgb2YgYSBnaXZlbiBmb250U3R5bGVcbiAqXG4gKiBAcGFyYW0gZm9udFN0eWxlIHtvYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5kZXRlcm1pbmVGb250UHJvcGVydGllcyA9IGZ1bmN0aW9uIChmb250U3R5bGUpXG57XG4gICAgdmFyIHByb3BlcnRpZXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXTtcblxuICAgIGlmICghcHJvcGVydGllcylcbiAgICB7XG4gICAgICAgIHByb3BlcnRpZXMgPSB7fTtcblxuICAgICAgICB2YXIgY2FudmFzID0gVGV4dC5mb250UHJvcGVydGllc0NhbnZhcztcbiAgICAgICAgdmFyIGNvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dDtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgdmFyIHdpZHRoID0gTWF0aC5jZWlsKGNvbnRleHQubWVhc3VyZVRleHQoJ3xNw4lxJykud2lkdGgpO1xuICAgICAgICB2YXIgYmFzZWxpbmUgPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnTScpLndpZHRoKTtcbiAgICAgICAgdmFyIGhlaWdodCA9IDIgKiBiYXNlbGluZTtcblxuICAgICAgICBiYXNlbGluZSA9IGJhc2VsaW5lICogMS40IHwgMDtcblxuICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjZjAwJztcbiAgICAgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgY29udGV4dC50ZXh0QmFzZWxpbmUgPSAnYWxwaGFiZXRpYyc7XG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMwMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxUZXh0KCd8TcOJcScsIDAsIGJhc2VsaW5lKTtcblxuICAgICAgICB2YXIgaW1hZ2VkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCkuZGF0YTtcbiAgICAgICAgdmFyIHBpeGVscyA9IGltYWdlZGF0YS5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lID0gd2lkdGggKiA0O1xuXG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIHZhciBpZHggPSAwO1xuICAgICAgICB2YXIgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGFzY2VudC4gc2NhbiBmcm9tIHRvcCB0byBib3R0b20gdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGJhc2VsaW5lOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggKz0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuYXNjZW50ID0gYmFzZWxpbmUgLSBpO1xuXG4gICAgICAgIGlkeCA9IHBpeGVscyAtIGxpbmU7XG4gICAgICAgIHN0b3AgPSBmYWxzZTtcblxuICAgICAgICAvLyBkZXNjZW50LiBzY2FuIGZyb20gYm90dG9tIHRvIHRvcCB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSBoZWlnaHQ7IGkgPiBiYXNlbGluZTsgaS0tKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGluZTsgaiArPSA0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0b3ApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWR4IC09IGxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLmRlc2NlbnQgPSBpIC0gYmFzZWxpbmU7XG4gICAgICAgIHByb3BlcnRpZXMuZm9udFNpemUgPSBwcm9wZXJ0aWVzLmFzY2VudCArIHByb3BlcnRpZXMuZGVzY2VudDtcblxuICAgICAgICBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXSA9IHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgbmV3bGluZXMgdG8gYSBzdHJpbmcgdG8gaGF2ZSBpdCBvcHRpbWFsbHkgZml0IGludG8gdGhlIGhvcml6b250YWxcbiAqIGJvdW5kcyBzZXQgYnkgdGhlIFRleHQgb2JqZWN0J3Mgd29yZFdyYXBXaWR0aCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUud29yZFdyYXAgPSBmdW5jdGlvbiAodGV4dClcbntcbiAgICAvLyBHcmVlZHkgd3JhcHBpbmcgYWxnb3JpdGhtIHRoYXQgd2lsbCB3cmFwIHdvcmRzIGFzIHRoZSBsaW5lIGdyb3dzIGxvbmdlclxuICAgIC8vIHRoYW4gaXRzIGhvcml6b250YWwgYm91bmRzLlxuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgICB2YXIgd29yZFdyYXBXaWR0aCA9IHRoaXMuX3N0eWxlLndvcmRXcmFwV2lkdGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcGFjZUxlZnQgPSB3b3JkV3JhcFdpZHRoO1xuICAgICAgICB2YXIgd29yZHMgPSBsaW5lc1tpXS5zcGxpdCgnICcpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdvcmRzLmxlbmd0aDsgaisrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgd29yZFdpZHRoID0gdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KHdvcmRzW2pdKS53aWR0aDtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGhXaXRoU3BhY2UgPSB3b3JkV2lkdGggKyB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQoJyAnKS53aWR0aDtcbiAgICAgICAgICAgIGlmIChqID09PSAwIHx8IHdvcmRXaWR0aFdpdGhTcGFjZSA+IHNwYWNlTGVmdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHByaW50aW5nIHRoZSBuZXdsaW5lIGlmIGl0J3MgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxpbmUgdGhhdCBpc1xuICAgICAgICAgICAgICAgIC8vIGdyZWF0ZXIgdGhhbiB0aGUgd29yZCB3cmFwIHdpZHRoLlxuICAgICAgICAgICAgICAgIGlmIChqID4gMClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdvcmRzW2pdO1xuICAgICAgICAgICAgICAgIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGggLSB3b3JkV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0IC09IHdvcmRXaWR0aFdpdGhTcGFjZTtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyAnICsgd29yZHNbal07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaSA8IGxpbmVzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBUZXh0IGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIFRleHRcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIHJldHVybiBTcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcy5jYWxsKHRoaXMsIG1hdHJpeCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dCBvYmplY3QuXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9dHJ1ZV0ge2Jvb2xlYW59IHdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZVRleHR1cmUpXG57XG4gICAgLy8gbWFrZSBzdXJlIHRvIHJlc2V0IHRoZSB0aGUgY29udGV4dCBhbmQgY2FudmFzLi4gZG9udCB3YW50IHRoaXMgaGFuZ2luZyBhcm91bmQgaW4gbWVtb3J5IVxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xuXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG59O1xuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9GaWx0ZXJNYW5hZ2VyJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgdGVtcFJlY3QgPSBuZXcgbWF0aC5SZWN0YW5nbGUoKTtcblxuLyoqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBCYXNlUmVuZGVyVGV4dHVyZSBzaG91bGQgYmUgcHJlbG9hZGVkXG4gKiBvdGhlcndpc2UgYmxhY2sgcmVjdGFuZ2xlcyB3aWxsIGJlIGRyYXduIGluc3RlYWQuXG4gKlxuICogQSBCYXNlUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIEJhc2VyZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIDgwMCwgNjAwKTtcbiAqIHZhciBzcHJpdGUgPSBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJzcGluT2JqXzAxLnBuZ1wiKTtcbiAqXG4gKiBzcHJpdGUucG9zaXRpb24ueCA9IDgwMC8yO1xuICogc3ByaXRlLnBvc2l0aW9uLnkgPSA2MDAvMjtcbiAqIHNwcml0ZS5hbmNob3IueCA9IDAuNTtcbiAqIHNwcml0ZS5hbmNob3IueSA9IDAuNTtcbiAqXG4gKiBCYXNlcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgQmFzZXJlbmRlclRleHR1cmVcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgZm9yIHRoaXMgQmFzZVJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgaWYgKCFyZW5kZXJlcilcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNyZWF0ZSBCYXNlUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgbnVsbCwgc2NhbGVNb2RlKTtcbiAgIFxuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAxMDA7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OOztcbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIERyYXcvcmVuZGVyIHRoZSBnaXZlbiBEaXNwbGF5T2JqZWN0IG9udG8gdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheU9iamVjdCBhbmQgZGVzY2VuZGVudHMgYXJlIHRyYW5zZm9ybWVkIGR1cmluZyB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBJZiBgdXBkYXRlVHJhbnNmb3JtYCBpcyB0cnVlIHRoZW4gdGhlIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkIGJlZm9yZSB0aGVcbiAgICAgKiBtZXRob2QgcmV0dXJucy4gT3RoZXJ3aXNlIGl0IGlzIHVwIHRvIHRoZSBjYWxsaW5nIGNvZGUgdG8gY29ycmVjdGx5IHVzZSBvciByZXNldFxuICAgICAqIHRoZSB0cmFuc2Zvcm1lZCBkaXNwbGF5IG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgaXMgYWx3YXlzIHJlbmRlcmVkIHdpdGggYSB3b3JsZEFscGhhIHZhbHVlIG9mIDEuXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAgICAgKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBPcHRpb25hbCBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIGRpc3BsYXkgb2JqZWN0IGJlZm9yZSByZW5kZXJpbmcuXG4gICAgICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICAgICAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gICAgICogIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkLiBOb3QgcmVzdG9yaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBhIGxpdHRsZSBmYXN0ZXIuXG4gICAgICovXG4gICAgdGhpcy5yZW5kZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgQmFzZVJlbmRlclRleHR1cmUgdXNlcy4gQSBCYXNlUmVuZGVyVGV4dHVyZSBjYW4gb25seSBiZWxvbmcgdG8gb25lIHJlbmRlcmVyIGF0IHRoZSBtb21lbnQgaWYgaXRzIHdlYkdMLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgUmVuZGVyVGFyZ2V0KGdsLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5zY2FsZU1vZGUsIHRoaXMucmVzb2x1dGlvbik7Ly8sIHRoaXMudGhpcy5zY2FsZU1vZGUpO1xuICAgICAgICB0aGlzLl9nbFRleHR1cmVzW2dsLmlkXSA9ICB0aGlzLnRleHR1cmVCdWZmZXIudGV4dHVyZTtcbiAgICAgICAgXG4gICAgICAgIC8vVE9ETyByZWZhY3RvciBmaWx0ZXIgbWFuYWdlci4uIGFzIHJlYWxseSBpdHMgbm8gbG9uZ2VyIGEgbWFuYWdlciBpZiB3ZSB1c2UgaXQgaGVyZS4uXG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJXZWJHTDtcblxuICAgICAgICAvLyB0aGUgY3JlYXRpb24gb2YgYSBmaWx0ZXIgbWFuYWdlciB1bmJpbmRzIHRoZSBidWZmZXJzLi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbiAgICAgICAgaWYodGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0KXRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJDYW52YXM7XG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIodGhpcy53aWR0aCogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbn1cblxuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlVGV4dHVyZS5wcm90b3R5cGUpO1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzZVJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VSZW5kZXJUZXh0dXJlO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGlmICh3aWR0aCA9PT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT09IHRoaXMuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5maWx0ZXJNYW5hZ2VyKVxuICAgIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLnJlbmRlcmVyLmdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcihmYWxzZSwgZGVzdGluYXRpb25GcmFtZSk7XG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gKHVwZGF0ZVRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSA/IHVwZGF0ZVRyYW5zZm9ybSA6IHRydWU7Ly8hdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnRyYW5zZm9ybSA9IG1hdHJpeDtcblxuICAgIC8vVE9ETyBub3QgYSBmYW4gdGhhdCB0aGlzIGlzIGhlcmUuLi4gaXQgd2lsbCBtb3ZlIVxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5hY3RpdmF0ZSgpO1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgaWYgKHVwZGF0ZVRyYW5zZm9ybSlcbiAgICB7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIG1hdHJpeCBvZiB0aGUgZGlzcGxhdHlPYmplY3QuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmlkZW50aXR5KCk7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgICAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRlbXBSZWN0LndpZHRoID0gZnJhbWUuaGVpZ2h0O1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IGZyYW1lLndpZHRoO1xuICAgXG4gICAgLy9UT0RPIHJlbmFtZSB0ZXh0dXJlQnVmZmVyIHRvIHJlbmRlclRhcmdldC4uXG4gICAgdmFyIHRlbXAgPSAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyID0gdGhpcy5maWx0ZXJNYW5hZ2VyO1xuICAgIFxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKGZyYW1lLCB0ZW1wUmVjdCk7XG4gICAgY29uc29sZS5sb2coZGlzcGxheU9iamVjdClcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgdGhpcy50ZXh0dXJlQnVmZmVyLCBjbGVhcik7XG5cbiAgIC8vIGNvbnNvbGUubG9nKFwiUkVOREVSSU5HIFwiKTtcbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0ZW1wO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXJdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChmcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAhIXVwZGF0ZVRyYW5zZm9ybTtcblxuICAgIHZhciB3dCA9IHRlbXBNYXRyaXg7XG5cbiAgICB3dC5pZGVudGl0eSgpO1xuXG4gICAgaWYgKG1hdHJpeClcbiAgICB7XG4gICAgICAgIHd0LmFwcGVuZChtYXRyaXgpO1xuICAgIH1cblxuXG4gICAgd3QudHggKz0gZnJhbWUueDtcbiAgICB3dC50eSArPSBmcmFtZS55O1xuXG4gICAgdmFyIGNhY2hlZFd0ID0gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybTtcbiAgICBcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gd3Q7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgdmFyIGksIGo7XG5cbiAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgXG4vLyAgICB0aGlzLnRleHR1cmVCdWZmZXIuXG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dDtcblxuICAgIHZhciByZWFsUmVzb2x1dGlvbiA9IHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHJlYWxSZXNvbHV0aW9uO1xuXG4gICAgaWYoZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9PT0gd3QpXG4gICAge1xuICAgICAgICAvLyBmaXhlcyBjYWNoZUFzQml0bWFwIEhhcHBlbmluZyBkdXJpbmcgdGhlIGFib3ZlLi5cbiAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IGNhY2hlZFd0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gZGVzdHJveUJhc2Uge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCB0cnVlKTtcblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICAvLyBkZXN0cm95IHRoZSBmaWx0ZXJtYW5hZ2VyLi5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEltYWdlID0gZnVuY3Rpb24gKGZyYW1lKVxue1xuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLnNyYyA9IHRoaXMuZ2V0QmFzZTY0KGZyYW1lKTtcbiAgICByZXR1cm4gaW1hZ2U7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIEJhc2VSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRCYXNlNjQgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRDYW52YXMoZnJhbWUpLnRvRGF0YVVSTCgpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB0byBpdCBhbmQgdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBBIENhbnZhcyBlbGVtZW50IHdpdGggdGhlIHRleHR1cmUgcmVuZGVyZWQgb24uXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgIFxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgQ2FudmFzQnVmZmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHRlbXBDYW52YXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0RhdGEuZGF0YS5zZXQod2ViR0xQaXhlbHMpO1xuXG4gICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGZyYW1lLndpZHRoID09PSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLndpZHRoICYmIFxuICAgICAgICAgICBmcmFtZS5oZWlnaHQgPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIoZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcbiAgICAgICAgICAgIHZhciBjYW52YXNEYXRhID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNvbnRleHQuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggICogcmVzb2x1dGlvbiwgZnJhbWUueSAqIHJlc29sdXRpb24sIGZyYW1lLndpZHRoICogcmVzb2x1dGlvbiwgZnJhbWUuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0ZW1wQ2FudmFzLmNhbnZhcztcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKCBmcmFtZSApXG57XG4gICAgaWYoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgZnJhbWUud2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS53aWR0aDtcbiAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IGZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YShmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoZnJhbWUsIHgsIHkpXG57XG4gICAgdGVtcFJlY3QueCA9IHg7XG4gICAgdGVtcFJlY3QueSA9IHk7XG4gICAgdGVtcFJlY3Qud2lkdGggPSAxIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZihmcmFtZSlcbiAgICB7XG4gICAgICAgIHRlbXBSZWN0LnggKz0gZnJhbWUueDtcbiAgICAgICAgdGVtcFJlY3QueSArPSBmcmFtZS55O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFBpeGVscyh0ZW1wUmVjdCk7XG59O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZS4gQWxsIHRleHR1cmVzIGhhdmUgYSBiYXNlIHRleHR1cmUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBmb3IgZGV2aWNlcyB3aXRoIGRpZmZlcmVudCBwaXhlbCByYXRpb3NcbiAqL1xuZnVuY3Rpb24gQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnVpZCA9IHV0aWxzLnVpZCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgYmFzZSB0ZXh0dXJlIHNldCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAxMDA7XG5cbiAgICAvLyBUT0RPIGRvY3NcbiAgICAvLyB1c2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgZGltZW5zaW9ucyBvZiB0aGUgc291cmNlXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIHdpZHRoIG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsV2lkdGggPSAxMDA7XG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIGhlaWdodCBvZiB0aGUgc291cmNlIG9mIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucmVhbEhlaWdodCA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlIHRvIGFwcGx5IHdoZW4gc2NhbGluZyB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlNDQUxFX01PREVTLkxJTkVBUlxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSBvbmNlIHRoZSBiYXNlIHRleHR1cmUgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG5ldmVyIHRydWUgaWYgdGhlIHVuZGVybHlpbmcgc291cmNlIGZhaWxzIHRvIGxvYWQgb3IgaGFzIG5vIHRleHR1cmUgZGF0YS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIGlmIHRoZSBzb3VyY2UgaXMgY3VycmVudGx5IGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBJZiBhbiBJbWFnZSBzb3VyY2UgaXMgbG9hZGluZyB0aGUgJ2xvYWRlZCcgb3IgJ2Vycm9yJyBldmVudCB3aWxsIGJlXG4gICAgICogZGlzcGF0Y2hlZCB3aGVuIHRoZSBvcGVyYXRpb24gZW5kcy4gQW4gdW5kZXJ5bGluZyBzb3VyY2UgdGhhdCBpc1xuICAgICAqIGltbWVkaWF0ZWx5LWF2YWlsYWJsZSBieXBhc3NlcyBsb2FkaW5nIGVudGlyZWx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGltYWdlIHNvdXJjZSB0aGF0IGlzIHVzZWQgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogVE9ETzogTWFrZSB0aGlzIGEgc2V0dGVyIHRoYXQgY2FsbHMgbG9hZFNvdXJjZSgpO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SW1hZ2V8Q2FudmFzfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuc291cmNlID0gbnVsbDsgLy8gc2V0IGluIGxvYWRTb3VyY2UsIGlmIGF0IGFsbFxuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgaWYgUkdCIGNoYW5uZWxzIHNob3VsZCBiZSBwcmUtbXVsdGlwbGllZCBieSBBbHBoYSAgKFdlYkdMIG9ubHkpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgb3Igbm90IHRoZSB0ZXh0dXJlIGlzIGEgcG93ZXIgb2YgdHdvLCB0cnkgdG8gdXNlIHBvd2VyIG9mIHR3byB0ZXh0dXJlcyBhcyBtdWNoIGFzIHlvdSBjYW5cbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSBmYWxzZTtcblxuICAgIC8vIHVzZWQgZm9yIHdlYkdMXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgYSBtaXBtYXAgb2YgdGhpcyB0ZXh0dXJlIG5lZWRzIHRvIGJlIGdlbmVyYXRlZC4gVGhpcyB2YWx1ZSBuZWVkcyB0byBiZSBzZXQgYmVmb3JlIHRoZSB0ZXh0dXJlIGlzIHVzZWRcbiAgICAgKiBBbHNvIHRoZSB0ZXh0dXJlIG11c3QgYmUgYSBwb3dlciBvZiB0d28gc2l6ZSB0byB3b3JrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubWlwbWFwID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBBIG1hcCBvZiByZW5kZXJlciBJRHMgdG8gd2ViZ2wgdGV4dHVyZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIFdlYkdMVGV4dHVyZT59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbFRleHR1cmVzID0ge307XG4gICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5faWQgPSAwO1xuICAgIFxuICAgIC8vIGlmIG5vIHNvdXJjZSBwYXNzZWQgZG9uJ3QgdHJ5IHRvIGxvYWRcbiAgICBpZiAoc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5sb2FkU291cmNlKHNvdXJjZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZpbmlzaGVzIGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZGVkXG4gICAgICogQG1lbWJlcm9mIFBJWEkuQmFzZVRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZhaWxzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG59XG5cbkJhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdGV4dHVyZSBvbiBhbGwgdGhlIHdlYmdsIHJlbmRlcmVycywgdGhpcyBhbHNvIGFzc3VtZXMgdGhlIHNyYyBoYXMgY2hhbmdlZC5cbiAqXG4gKiBAZmlyZXMgdXBkYXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVhbFdpZHRoID0gdGhpcy5zb3VyY2UubmF0dXJhbFdpZHRoIHx8IHRoaXMuc291cmNlLndpZHRoO1xuICAgIHRoaXMucmVhbEhlaWdodCA9IHRoaXMuc291cmNlLm5hdHVyYWxIZWlnaHQgfHwgdGhpcy5zb3VyY2UuaGVpZ2h0O1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMucmVhbFdpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5yZWFsSGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSB1dGlscy5pc1Bvd2VyT2ZUd28odGhpcy5yZWFsV2lkdGgsIHRoaXMucmVhbEhlaWdodCk7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBMb2FkIGEgc291cmNlLlxuICpcbiAqIElmIHRoZSBzb3VyY2UgaXMgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSwgc3VjaCBhcyBhbiBpbWFnZSB0aGF0IG5lZWRzIHRvIGJlXG4gKiBkb3dubG9hZGVkLCB0aGVuIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmUgZGlzcGF0Y2hlZCBpbiB0aGUgZnV0dXJlXG4gKiBhbmQgYGhhc0xvYWRlZGAgd2lsbCByZW1haW4gZmFsc2UgYWZ0ZXIgdGhpcyBjYWxsLlxuICpcbiAqIFRoZSBsb2dpYyBzdGF0ZSBhZnRlciBjYWxsaW5nIGBsb2FkU291cmNlYCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IChlZy4gYGZyb21JbWFnZWAsIGBuZXcgQmFzZVRleHR1cmVgKSBpczpcbiAqXG4gKiAgICAgaWYgKHRleHR1cmUuaGFzTG9hZGVkKVxuIHtcbiAqICAgICAgICAvLyB0ZXh0dXJlIHJlYWR5IGZvciB1c2VcbiAqICAgICB9IGVsc2UgaWYgKHRleHR1cmUuaXNMb2FkaW5nKVxuIHtcbiAqICAgICAgICAvLyBsaXN0ZW4gdG8gJ2xvYWRlZCcgYW5kL29yICdlcnJvcicgZXZlbnRzIG9uIHRleHR1cmVcbiAqICAgICB9IGVsc2Uge1xuICogICAgICAgIC8vIG5vdCBsb2FkaW5nLCBub3QgZ29pbmcgdG8gbG9hZCBVTkxFU1MgdGhlIHNvdXJjZSBpcyByZWxvYWRlZFxuICogICAgICAgIC8vIChpdCBtYXkgc3RpbGwgbWFrZSBzZW5zZSB0byBsaXN0ZW4gdG8gdGhlIGV2ZW50cylcbiAqICAgICB9XG4gKlxuICogQHByb3RlY3RlZFxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmxvYWRTb3VyY2UgPSBmdW5jdGlvbiAoc291cmNlKVxue1xuICAgIHZhciB3YXNMb2FkaW5nID0gdGhpcy5pc0xvYWRpbmc7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKHdhc0xvYWRpbmcgJiYgdGhpcy5zb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmVycm9yID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcblxuICAgIC8vIEFwcGx5IHNvdXJjZSBpZiBsb2FkZWQuIE90aGVyd2lzZSBzZXR1cCBhcHByb3ByaWF0ZSBsb2FkaW5nIG1vbml0b3JzLlxuICAgIGlmICgodGhpcy5zb3VyY2UuY29tcGxldGUgfHwgdGhpcy5zb3VyY2UuZ2V0Q29udGV4dCkgJiYgdGhpcy5zb3VyY2Uud2lkdGggJiYgdGhpcy5zb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFzb3VyY2UuZ2V0Q29udGV4dClcbiAgICB7XG5cbiAgICAgICAgLy8gSW1hZ2UgZmFpbCAvIG5vdCByZWFkeVxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgdmFyIHNjb3BlID0gdGhpcztcblxuICAgICAgICBzb3VyY2Uub25sb2FkID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgIHNjb3BlLmVtaXQoJ2xvYWRlZCcsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzb3VyY2Uub25lcnJvciA9IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXNjb3BlLmlzTG9hZGluZylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuZW1pdCgnZXJyb3InLCBzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUGVyIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI3RoZS1pbWctZWxlbWVudFxuICAgICAgICAvLyAgIFwiVGhlIHZhbHVlIG9mIGBjb21wbGV0ZWAgY2FuIHRodXMgY2hhbmdlIHdoaWxlIGEgc2NyaXB0IGlzIGV4ZWN1dGluZy5cIlxuICAgICAgICAvLyBTbyBjb21wbGV0ZSBuZWVkcyB0byBiZSByZS1jaGVja2VkIGFmdGVyIHRoZSBjYWxsYmFja3MgaGF2ZSBiZWVuIGFkZGVkLi5cbiAgICAgICAgLy8gTk9URTogY29tcGxldGUgd2lsbCBiZSB0cnVlIGlmIHRoZSBpbWFnZSBoYXMgbm8gc3JjIHNvIGJlc3QgdG8gY2hlY2sgaWYgdGhlIHNyYyBpcyBzZXQuXG4gICAgICAgIGlmIChzb3VyY2UuY29tcGxldGUgJiYgc291cmNlLnNyYylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gLi5hbmQgaWYgd2UncmUgY29tcGxldGUgbm93LCBubyBuZWVkIGZvciBjYWxsYmFja3NcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiBhbnkgcHJldmlvdXMgc3Vic2NyaWJlcnMgcG9zc2libGVcbiAgICAgICAgICAgICAgICBpZiAod2FzTG9hZGluZylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZCBpbnRlcm5hbGx5IHRvIHVwZGF0ZSB0aGUgd2lkdGgsIGhlaWdodCwgYW5kIHNvbWUgb3RoZXIgdHJhY2tpbmcgdmFycyBvbmNlXG4gKiBhIHNvdXJjZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuX3NvdXJjZUxvYWRlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgYmFzZSB0ZXh0dXJlXG4gKlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuaW1hZ2VVcmwpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcbiAgICAgICAgZGVsZXRlIHV0aWxzLlRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcblxuICAgICAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgICAgICBpZiAoIW5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZS5zcmMgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdGhpcy5zb3VyY2UuX3BpeGlJZF07XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsO1xuXG4gICAgdGhpcy5kaXNwb3NlKCk7XG59O1xuXG4vKipcbiAqIEZyZWVzIHRoZSB0ZXh0dXJlIGZyb20gV2ViR0wgbWVtb3J5IHdpdGhvdXQgZGVzdHJveWluZyB0aGlzIHRleHR1cmUgb2JqZWN0LlxuICogVGhpcyBtZWFucyB5b3UgY2FuIHN0aWxsIHVzZSB0aGUgdGV4dHVyZSBsYXRlciB3aGljaCB3aWxsIHVwbG9hZCBpdCB0byBHUFVcbiAqIG1lbW9yeSBhZ2Fpbi5cbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmVtaXQoJ2Rpc3Bvc2UnLCB0aGlzKTtcblxuICAgIC8vIHRoaXMgc2hvdWxkIG5vIGxvbmdlciBiZSBuZWVkZWQsIHRoZSByZW5kZXJlcnMgc2hvdWxkIGNsZWFudXAgYWxsIHRoZSBnbCB0ZXh0dXJlcy5cbiAgICAvLyB0aGlzLl9nbFRleHR1cmVzID0ge307XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHNvdXJjZSBpbWFnZSBvZiB0aGUgdGV4dHVyZS5cbiAqIFRoZSBvcmlnaW5hbCBzb3VyY2UgbXVzdCBiZSBhbiBJbWFnZSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBuZXdTcmMge3N0cmluZ30gdGhlIHBhdGggb2YgdGhlIGltYWdlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGVTb3VyY2VJbWFnZSA9IGZ1bmN0aW9uIChuZXdTcmMpXG57XG4gICAgdGhpcy5zb3VyY2Uuc3JjID0gbmV3U3JjO1xuXG4gICAgdGhpcy5sb2FkU291cmNlKHRoaXMuc291cmNlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGJhc2UgdGV4dHVyZSBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSBiYXNlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBjcmVhdGVkIGFuZCBsb2FkZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlVXJsIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gU2hvdWxkIHVzZSBhbm9ueW1vdXMgQ09SUz8gRGVmYXVsdHMgdG8gdHJ1ZSBpZiB0aGUgVVJMIGlzIG5vdCBhIGRhdGEtVVJJLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF07XG5cbiAgICBpZiAoY3Jvc3NvcmlnaW4gPT09IHVuZGVmaW5lZCAmJiBpbWFnZVVybC5pbmRleE9mKCdkYXRhOicpICE9PSAwKVxuICAgIHtcbiAgICAgICAgY3Jvc3NvcmlnaW4gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICAvLyBuZXcgSW1hZ2UoKSBicmVha3MgdGV4IGxvYWRpbmcgaW4gc29tZSB2ZXJzaW9ucyBvZiBDaHJvbWUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjM4MDcxXG4gICAgICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpOy8vZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgICAgIGlmIChjcm9zc29yaWdpbilcbiAgICAgICAge1xuICAgICAgICAgICAgaW1hZ2UuY3Jvc3NPcmlnaW4gPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGltYWdlLCBzY2FsZU1vZGUpO1xuICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IGltYWdlVXJsO1xuXG4gICAgICAgIGltYWdlLnNyYyA9IGltYWdlVXJsO1xuXG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gYmFzZVRleHR1cmU7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4gQDJ4IGF0IHRoZSBlbmQgb2YgdGhlIHVybCB3ZSBhcmUgZ29pbmcgdG8gYXNzdW1lIGl0cyBhIGhpZ2hyZXMgaW1hZ2VcbiAgICAgICAgYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHV0aWxzLmdldFJlc29sdXRpb25PZlVybChpbWFnZVVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIGlmICghY2FudmFzLl9waXhpSWQpXG4gICAge1xuICAgICAgICBjYW52YXMuX3BpeGlJZCA9ICdjYW52YXNfJyArIHV0aWxzLnVpZCgpO1xuICAgIH1cblxuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbY2FudmFzLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGNhbnZhcywgc2NhbGVNb2RlKTtcbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuIiwidmFyIEJhc2VSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbi8qKlxuICogQSBSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIFJlbmRlclRleHR1cmUgdGFrZXMgYSBzbmFwc2hvdCBvZiBhbnkgRGlzcGxheSBPYmplY3QgZ2l2ZW4gdG8gaXRzIHJlbmRlciBtZXRob2QuIFRoZSBwb3NpdGlvblxuICogYW5kIHJvdGF0aW9uIG9mIHRoZSBnaXZlbiBEaXNwbGF5IE9iamVjdHMgaXMgaWdub3JlZC4gRm9yIGV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDEwMjQsIDEwMjQsIHsgdmlldzogY2FudmFzLCByYXRpbzogMSB9KTtcbiAqIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKHNwcml0ZSk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgU3ByaXRlIGluIHRoaXMgY2FzZSB3aWxsIGJlIHJlbmRlcmVkIHRvIGEgcG9zaXRpb24gb2YgMCwwLiBUbyByZW5kZXIgdGhpcyBzcHJpdGUgYXQgaXRzIGFjdHVhbFxuICogcG9zaXRpb24gYSBDb250YWluZXIgc2hvdWxkIGJlIHVzZWQ6XG4gKlxuICogYGBganNcbiAqIHZhciBkb2MgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqXG4gKiBkb2MuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqXG4gKiByZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBSZW5kZXJUZXh0dXJlXG4gKiBAcGFyYW0gW3dpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtoZWlnaHQ9MTAwXSB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtzY2FsZU1vZGVdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIFtyZXNvbHV0aW9uPTFdIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICovXG5mdW5jdGlvbiBSZW5kZXJUZXh0dXJlKGJhc2VSZW5kZXJUZXh0dXJlLCBmcmFtZSlcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIFJlbmRlclRleHR1cmUsIHlvdSBtdXN0IHBhc3MgYSByZW5kZXJlciBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIG9iamVjdCB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtCYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICBUZXh0dXJlLmNhbGwodGhpcyxcbiAgICAgICAgYmFzZVJlbmRlclRleHR1cmUsXG4gICAgICAgIGZyYW1lIFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fdXBkYXRlVXZzKCk7XG59XG5cblJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlLnByb3RvdHlwZSk7XG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgUmVuZGVyVGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gdXBkYXRlQmFzZSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBiYXNlVGV4dHVyZS53aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBiZSByZXNpemVkIGFzIHdlbGw/XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB1cGRhdGVCYXNlKVxue1xuICAgXG4gICAgLy9UT0RPIC0gY291bGQgYmUgbm90IHJlcXVpcmVkLi5cbiAgICB0aGlzLnZhbGlkID0gKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTtcblxuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy5jcm9wLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jcm9wLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh1cGRhdGVCYXNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5yZXNpemUod2lkdGgsIGhlaWdodClcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLmNsZWFyKHRoaXMuZnJhbWUpXG4gICAgXG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5iYXNlVGV4dHVyZS5yZW5kZXIodGhpcy5mcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIHRoaXMgdGV4dHVyZS4gSXQgd29ya3MgYnkgY2FsbGluZyBSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0QmFzZTY0LmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0Q2FudmFzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRDYW52YXModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgdGhlIGVudGlyZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbHModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgYSBwaXhlbCB3aXRoaW4gdGhlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbCh0aGlzLmZyYW1lLCB4LCB5KTtcbn07XG5cblJlbmRlclRleHR1cmUuY3JlYXRlID0gZnVuY3Rpb24ocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICByZXR1cm4gbmV3IFJlbmRlclRleHR1cmUobmV3IEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pKTtcbn1cblxuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzID0gcmVxdWlyZSgnLi9UZXh0dXJlVXZzJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZSBvciBwYXJ0IG9mIGFuIGltYWdlLiBJdCBjYW5ub3QgYmUgYWRkZWRcbiAqIHRvIHRoZSBkaXNwbGF5IGxpc3QgZGlyZWN0bHkuIEluc3RlYWQgdXNlIGl0IGFzIHRoZSB0ZXh0dXJlIGZvciBhIFNwcml0ZS4gSWYgbm8gZnJhbWUgaXMgcHJvdmlkZWQgdGhlbiB0aGUgd2hvbGUgaW1hZ2UgaXMgdXNlZC5cbiAqXG4gKiBZb3UgY2FuIGRpcmVjdGx5IGNyZWF0ZSBhIHRleHR1cmUgZnJvbSBhbiBpbWFnZSBhbmQgdGhlbiByZXVzZSBpdCBtdWx0aXBsZSB0aW1lcyBsaWtlIHRoaXMgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIHZhciBzcHJpdGUxID0gbmV3IFBJWEkuU3ByaXRlKHRleHR1cmUpO1xuICogdmFyIHNwcml0ZTIgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gYmFzZVRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV9IFRoZSBiYXNlIHRleHR1cmUgc291cmNlIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZSBmcm9tXG4gKiBAcGFyYW0gW2ZyYW1lXSB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5nbGUgZnJhbWUgb2YgdGhlIHRleHR1cmUgdG8gc2hvd1xuICogQHBhcmFtIFtjcm9wXSB7UElYSS5SZWN0YW5nbGV9IFRoZSBhcmVhIG9mIG9yaWdpbmFsIHRleHR1cmVcbiAqIEBwYXJhbSBbdHJpbV0ge1BJWEkuUmVjdGFuZ2xlfSBUcmltbWVkIHRleHR1cmUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gW3JvdGF0ZV0ge2Jvb2xlYW59IGluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXMgKCB1c2VkIGJ5IHRleHR1cmUgcGFja2VyIClcbiAqL1xuZnVuY3Rpb24gVGV4dHVyZShiYXNlVGV4dHVyZSwgZnJhbWUsIGNyb3AsIHRyaW0sIHJvdGF0ZSlcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIERvZXMgdGhpcyBUZXh0dXJlIGhhdmUgYW55IGZyYW1lIGRhdGEgYXNzaWduZWQgdG8gaXQ/XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubm9GcmFtZSA9IGZhbHNlO1xuXG4gICAgaWYgKCFmcmFtZSlcbiAgICB7XG4gICAgICAgIHRoaXMubm9GcmFtZSA9IHRydWU7XG4gICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuICAgIH1cblxuICAgIGlmIChiYXNlVGV4dHVyZSBpbnN0YW5jZW9mIFRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmFzZVRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy5iYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdHJpbSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy50cmltID0gdHJpbTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgdGhlIHJlbmRlcmVyIGtub3cgaWYgdGhlIHRleHR1cmUgaXMgdmFsaWQuIElmIGl0J3Mgbm90IHRoZW4gaXQgY2Fubm90IGJlIHJlbmRlcmVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHdpbGwgbGV0IGEgcmVuZGVyZXIga25vdyB0aGF0IGEgdGV4dHVyZSBoYXMgYmVlbiB1cGRhdGVkICh1c2VkIG1haW5seSBmb3Igd2ViR0wgdXYgdXBkYXRlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXF1aXJlc1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFdlYkdMIFVWIGRhdGEgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0dXJlIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIGFyZWEgb2YgdGhlIEJhc2VUZXh0dXJlIGltYWdlIHRvIGFjdHVhbGx5IGNvcHkgdG8gdGhlIENhbnZhcyAvIFdlYkdMIHdoZW4gcmVuZGVyaW5nLFxuICAgICAqIGlycmVzcGVjdGl2ZSBvZiB0aGUgYWN0dWFsIGZyYW1lIHNpemUgb3IgcGxhY2VtZW50ICh3aGljaCBjYW4gYmUgaW5mbHVlbmNlZCBieSB0cmltbWVkIHRleHR1cmUgYXRsYXNlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3JvcCA9IGNyb3AgfHwgZnJhbWU7Ly9uZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgcm90YXRlZCBieSA5MCBkZWdyZWVzXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb3RhdGUgPSAhIXJvdGF0ZTtcblxuICAgIGlmIChiYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICBmcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gZnJhbWUgd2Ugc2hvdWxkIG1vbml0b3IgZm9yIGFueSBiYXNlIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5vbigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZS5vbmNlKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZC4gVGhpcyBoYXBwZW5zIGlmIHRoZSBmcmFtZSBvciB0aGUgYmFzZVRleHR1cmUgaXMgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBldmVudCB1cGRhdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0dXJlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqL1xuICAgIGZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBmcmFtZTtcblxuICAgICAgICAgICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHRoaXMud2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMudHJpbSAmJiAhdGhpcy5yb3RhdGUgJiYgKGZyYW1lLnggKyBmcmFtZS53aWR0aCA+IHRoaXMuYmFzZVRleHR1cmUud2lkdGggfHwgZnJhbWUueSArIGZyYW1lLmhlaWdodCA+IHRoaXMuYmFzZVRleHR1cmUuaGVpZ2h0KSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHR1cmUgRXJyb3I6IGZyYW1lIGRvZXMgbm90IGZpdCBpbnNpZGUgdGhlIGJhc2UgVGV4dHVyZSBkaW1lbnNpb25zICcgKyB0aGlzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy90aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuc291cmNlICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuICAgICAgICAgICAgdGhpcy52YWxpZCA9IGZyYW1lICYmIGZyYW1lLndpZHRoICYmIGZyYW1lLmhlaWdodCAmJiB0aGlzLmJhc2VUZXh0dXJlLmhhc0xvYWRlZDtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJpbSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy50cmltLmhlaWdodDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS53aWR0aCA9IHRoaXMudHJpbS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JvcCA9IGZyYW1lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy52YWxpZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVVdnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhpcyB0ZXh0dXJlIG9uIHRoZSBncHUuXG4gKlxuICovXG5UZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYmFzZVRleHR1cmUudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgbG9hZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZUxvYWRlZCA9IGZ1bmN0aW9uIChiYXNlVGV4dHVyZSlcbntcbiAgICAvLyBUT0RPIHRoaXMgY29kZSBsb29rcyBjb25mdXNpbmcuLiBib28gdG8gYWJ1c2luZyBnZXR0ZXJzIGFuZCBzZXR0ZXJzcyFcbiAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMuX2ZyYW1lO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgdXBkYXRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLm9uQmFzZVRleHR1cmVVcGRhdGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZT1mYWxzZV0ge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZSlcbntcbiAgICBpZiAodGhpcy5iYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGlmIChkZXN0cm95QmFzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2ZyYW1lID0gbnVsbDtcbiAgICB0aGlzLl91dnMgPSBudWxsO1xuICAgIHRoaXMudHJpbSA9IG51bGw7XG4gICAgdGhpcy5jcm9wID0gbnVsbDtcblxuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIHRoaXMub2ZmKCdkaXNwb3NlJywgdGhpcy5kaXNwb3NlLCB0aGlzKTtcbiAgICB0aGlzLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRleHR1cmUgb2JqZWN0IHRoYXQgYWN0cyB0aGUgc2FtZSBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9XG4gKi9cblRleHR1cmUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUodGhpcy5iYXNlVGV4dHVyZSwgdGhpcy5mcmFtZSwgdGhpcy5jcm9wLCB0aGlzLnRyaW0sIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuX3VwZGF0ZVV2cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLl91dnMpXG4gICAge1xuICAgICAgICB0aGlzLl91dnMgPSBuZXcgVGV4dHVyZVV2cygpO1xuICAgIH1cblxuICAgIHRoaXMuX3V2cy5zZXQodGhpcy5jcm9wLCB0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLnJvdGF0ZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBUZXh0dXJlIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGNyb3Nzb3JpZ2luIHtib29sZWFufSBXaGV0aGVyIHJlcXVlc3RzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGNyb3Nzb3JpZ2luXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbiAgICAgICAgdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXSA9IHRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZScpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhcywgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW8ge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAodHlwZW9mIHZpZGVvID09PSAnc3RyaW5nJylcbiAgICB7XG4gICAgICAgIHJldHVybiBUZXh0dXJlLmZyb21WaWRlb1VybCh2aWRlbywgc2NhbGVNb2RlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgdmlkZW8gdXJsLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1VybCB7c3RyaW5nfVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gQSBUZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbVZpZGVvVXJsID0gZnVuY3Rpb24gKHZpZGVvVXJsLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh2aWRlb1VybCwgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEFkZHMgYSB0ZXh0dXJlIHRvIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLiBUaGlzIGNhY2hlIGlzIHNoYXJlZCBhY3Jvc3MgdGhlIHdob2xlIFBJWEkgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSBUZXh0dXJlIHRvIGFkZCB0byB0aGUgY2FjaGUuXG4gKiBAcGFyYW0gaWQge3N0cmluZ30gVGhlIGlkIHRoYXQgdGhlIHRleHR1cmUgd2lsbCBiZSBzdG9yZWQgYWdhaW5zdC5cbiAqL1xuVGV4dHVyZS5hZGRUZXh0dXJlVG9DYWNoZSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBpZClcbntcbiAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdID0gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgdGV4dHVyZSBmcm9tIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgb2YgdGhlIHRleHR1cmUgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0aGF0IHdhcyByZW1vdmVkXG4gKi9cblRleHR1cmUucmVtb3ZlVGV4dHVyZUZyb21DYWNoZSA9IGZ1bmN0aW9uIChpZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtpZF07XG5cbiAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcbiAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpZF07XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogQW4gZW1wdHkgdGV4dHVyZSwgdXNlZCBvZnRlbiB0byBub3QgaGF2ZSB0byBjcmVhdGUgbXVsdGlwbGUgZW1wdHkgdGV4dHVyZXMuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmUuRU1QVFkgPSBuZXcgVGV4dHVyZShuZXcgQmFzZVRleHR1cmUoKSk7XG4iLCJcbi8qKlxuICogQSBzdGFuZGFyZCBvYmplY3QgdG8gc3RvcmUgdGhlIFV2cyBvZiBhIHRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBUZXh0dXJlVXZzKClcbntcbiAgICB0aGlzLngwID0gMDtcbiAgICB0aGlzLnkwID0gMDtcblxuICAgIHRoaXMueDEgPSAxO1xuICAgIHRoaXMueTEgPSAwO1xuXG4gICAgdGhpcy54MiA9IDE7XG4gICAgdGhpcy55MiA9IDE7XG5cbiAgICB0aGlzLngzID0gMDtcbiAgICB0aGlzLnkzID0gMTtcblxuICAgIHRoaXMueHkwX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTFfdWludDMyID0gMDtcbiAgICB0aGlzLnh5Ml91aW50MzIgPSAwO1xuICAgIHRoaXMueHkzX3VpbnQzMiA9IDA7XG5cbiAgICB0aGlzLnV2c191aW50MzIgPSBuZXcgVWludDMyQXJyYXkoNClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlVXZzO1xuXG4vKipcbiAqIFNldHMgdGhlIHRleHR1cmUgVXZzIGJhc2VkIG9uIHRoZSBnaXZlbiBmcmFtZSBpbmZvcm1hdGlvblxuICogQHBhcmFtIGZyYW1lIHtQSVhJLlJlY3RhbmdsZX1cbiAqIEBwYXJhbSBiYXNlRnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIHJvdGF0ZSB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIGZyYW1lIGlzIHJvdGF0ZWRcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmVVdnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChmcmFtZSwgYmFzZUZyYW1lLCByb3RhdGUpXG57XG4gICAgdmFyIHR3ID0gYmFzZUZyYW1lLndpZHRoO1xuICAgIHZhciB0aCA9IGJhc2VGcmFtZS5oZWlnaHQ7XG5cbiAgICBpZihyb3RhdGUpXG4gICAge1xuICAgICAgICB0aGlzLngwID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUuaGVpZ2h0KSAvIHR3O1xuICAgICAgICB0aGlzLnkxID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkyID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gZnJhbWUueSAvIHRoO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMueDAgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MiA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gKGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQpIC8gdGg7XG4gICAgfVxuXG4gICAgdGhpcy51dnNfdWludDMyWzBdID0gKCgodGhpcy55MCAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngwICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbMV0gPSAoKCh0aGlzLnkxICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDEgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsyXSA9ICgoKHRoaXMueTIgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MiAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzNdID0gKCgodGhpcy55MyAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngzICogNjU1MzUpICYgMHhGRkZGKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBvZiBhIFtwbGF5aW5nXSBWaWRlby5cbiAqXG4gKiBWaWRlbyBiYXNlIHRleHR1cmVzIG1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kIGluIHRoZWlyIGNyZWF0aW9uIHByb2Nlc3MuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZCBpbiBzZXZlcmFsIHdheXMsIHN1Y2ggYXM6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwoJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0Jyk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh7IHNyYzogJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoWycvdmlkZW8ud2VibScsICcvdmlkZW8ubXA0J10pO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzKFtcbiAqICAgICB7IHNyYzogJy92aWRlby53ZWJtJywgbWltZTogJ3ZpZGVvL3dlYm0nIH0sXG4gKiAgICAgeyBzcmM6ICcvdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfVxuICogXSk7XG4gKiBgYGBcbiAqXG4gKiBTZWUgdGhlIFtcImRldXNcIiBkZW1vXShodHRwOi8vd3d3Lmdvb2Rib3lkaWdpdGFsLmNvbS9waXhpanMvZXhhbXBsZXMvZGV1cy8pLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5CYXNlVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzb3VyY2Uge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIFZpZGVvQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFzb3VyY2UpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHZpZGVvIHNvdXJjZSBlbGVtZW50IHNwZWNpZmllZC4nKTtcbiAgICB9XG5cbiAgICAvLyBob29rIGluIGhlcmUgdG8gY2hlY2sgaWYgdmlkZW8gaXMgYWxyZWFkeSBhdmFpbGFibGUuXG4gICAgLy8gQmFzZVRleHR1cmUgbG9va3MgZm9yIGEgc291cmNlLmNvbXBsZXRlIGJvb2xlYW4sIHBsdXMgd2lkdGggJiBoZWlnaHQuXG5cbiAgICBpZiAoKHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9FTk9VR0hfREFUQSB8fCBzb3VyY2UucmVhZHlTdGF0ZSA9PT0gc291cmNlLkhBVkVfRlVUVVJFX0RBVEEpICYmIHNvdXJjZS53aWR0aCAmJiBzb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgc291cmNlLmNvbXBsZXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBCYXNlVGV4dHVyZS5jYWxsKHRoaXMsIHNvdXJjZSwgc2NhbGVNb2RlKTtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCB0aGUgYmFzZSB0ZXh0dXJlIGF1dG9tYXRpY2FsbHkgdXBkYXRlIGl0c2VsZiwgc2V0IHRvIHRydWUgYnkgZGVmYXVsdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG5cbiAgICB0aGlzLl9vblVwZGF0ZSA9IHRoaXMuX29uVXBkYXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fb25DYW5QbGF5ID0gdGhpcy5fb25DYW5QbGF5LmJpbmQodGhpcyk7XG5cbiAgICBpZiAoIXNvdXJjZS5jb21wbGV0ZSlcbiAgICB7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgdGhpcy5fb25DYW5QbGF5KTtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICAvLyBzdGFydGVkIHBsYXlpbmcuLlxuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX29uUGxheVN0YXJ0LmJpbmQodGhpcykpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9vblBsYXlTdG9wLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHRoaXMuX19sb2FkZWQgPSBmYWxzZTtcbn1cblxuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZpZGVvQmFzZVRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFZpZGVvQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVGhlIGludGVybmFsIHVwZGF0ZSBsb29wIG9mIHRoZSB2aWRlbyBiYXNlIHRleHR1cmUsIG9ubHkgcnVucyB3aGVuIGF1dG9VcGRhdGUgaXMgc2V0IHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25VcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJ1bnMgdGhlIHVwZGF0ZSBsb29wIHdoZW4gdGhlIHZpZGVvIGlzIHJlYWR5IHRvIHBsYXlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5hdXRvVXBkYXRlKVxuICAgIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9vblVwZGF0ZSk7XG4gICAgICAgIHRoaXMuYXV0b1VwZGF0ZSA9IHRydWU7XG4gICAgfVxufTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIGEgcGF1c2UgZXZlbnQgaXMgdHJpZ2dlcmVkLCBzdG9wcyB0aGUgdXBkYXRlIGxvb3BcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gdGhlIHZpZGVvIGlzIGxvYWRlZCBhbmQgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vbkNhblBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX29uQ2FuUGxheSk7XG5cbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuc291cmNlLnZpZGVvV2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5zb3VyY2UudmlkZW9IZWlnaHQ7XG5cbiAgICAgICAgdGhpcy5zb3VyY2UucGxheSgpO1xuXG4gICAgICAgIC8vIHByZXZlbnQgbXVsdGlwbGUgbG9hZGVkIGRpc3BhdGNoZXMuLlxuICAgICAgICBpZiAoIXRoaXMuX19sb2FkZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX19sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5zb3VyY2UuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB0aGlzLnNvdXJjZS5fcGl4aUlkIF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNvdXJjZS5fcGl4aUlkO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIE1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlZpZGVvQmFzZVRleHR1cmV9XG4gKi9cblZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvID0gZnVuY3Rpb24gKHZpZGVvLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCF2aWRlby5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgdmlkZW8uX3BpeGlJZCA9ICd2aWRlb18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt2aWRlby5fcGl4aUlkXTtcblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBWaWRlb0Jhc2VUZXh0dXJlKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB2aWRlby5fcGl4aUlkIF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgQmFzZVRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIHZpZGVvIGVsZW1lbnQuXG4gKiBUaGlzIEJhc2VUZXh0dXJlIGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIGEgdGV4dHVyZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1NyYyB7c3RyaW5nfG9iamVjdHxzdHJpbmdbXXxvYmplY3RbXX0gVGhlIFVSTChzKSBmb3IgdGhlIHZpZGVvLlxuICogQHBhcmFtIFt2aWRlb1NyYy5zcmNdIHtzdHJpbmd9IE9uZSBvZiB0aGUgc291cmNlIHVybHMgZm9yIHRoZSB2aWRlb1xuICogQHBhcmFtIFt2aWRlb1NyYy5taW1lXSB7c3RyaW5nfSBUaGUgbWltZXR5cGUgb2YgdGhlIHZpZGVvIChlLmcuICd2aWRlby9tcDQnKS4gSWYgbm90IHNwZWNpZmllZFxuICogIHRoZSB1cmwncyBleHRlbnNpb24gd2lsbCBiZSB1c2VkIGFzIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgbWltZSB0eXBlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsID0gZnVuY3Rpb24gKHZpZGVvU3JjLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcblxuICAgIC8vIGFycmF5IG9mIG9iamVjdHMgb3Igc3RyaW5nc1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZpZGVvU3JjKSlcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlkZW9TcmMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyY1tpXS5zcmMgfHwgdmlkZW9TcmNbaV0sIHZpZGVvU3JjW2ldLm1pbWUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzaW5nbGUgb2JqZWN0IG9yIHN0cmluZ1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyYy5zcmMgfHwgdmlkZW9TcmMsIHZpZGVvU3JjLm1pbWUpKTtcbiAgICB9XG5cbiAgICB2aWRlby5sb2FkKCk7XG4gICAgdmlkZW8ucGxheSgpO1xuXG4gICAgcmV0dXJuIFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpO1xufTtcblxuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyA9IFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybDtcblxuZnVuY3Rpb24gY3JlYXRlU291cmNlKHBhdGgsIHR5cGUpXG57XG4gICAgaWYgKCF0eXBlKVxuICAgIHtcbiAgICAgICAgdHlwZSA9ICd2aWRlby8nICsgcGF0aC5zdWJzdHIocGF0aC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpO1xuXG4gICAgc291cmNlLnNyYyA9IHBhdGg7XG4gICAgc291cmNlLnR5cGUgPSB0eXBlO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn1cbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIC8vIEludGVybmFsIGV2ZW50IHVzZWQgYnkgY29tcG9zZWQgZW1pdHRlclxuICAgIFRJQ0sgPSAndGljayc7XG5cbi8qKlxuICogQSBUaWNrZXIgY2xhc3MgdGhhdCBydW5zIGFuIHVwZGF0ZSBsb29wIHRoYXQgb3RoZXIgb2JqZWN0cyBsaXN0ZW4gdG8uXG4gKiBUaGlzIGNsYXNzIGlzIGNvbXBvc2VkIGFyb3VuZCBhbiBFdmVudEVtaXR0ZXIgb2JqZWN0IHRvIGFkZCBsaXN0ZW5lcnNcbiAqIG1lYW50IGZvciBleGVjdXRpb24gb24gdGhlIG5leHQgcmVxdWVzdGVkIGFuaW1hdGlvbiBmcmFtZS5cbiAqIEFuaW1hdGlvbiBmcmFtZXMgYXJlIHJlcXVlc3RlZCBvbmx5IHdoZW4gbmVjZXNzYXJ5LFxuICogZS5nLiBXaGVuIHRoZSB0aWNrZXIgaXMgc3RhcnRlZCBhbmQgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlclxuICovXG5mdW5jdGlvbiBUaWNrZXIoKVxue1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0aWNrIG1ldGhvZCBib3VuZCB0byB0aWNrZXIgaW5zdGFuY2UuXG4gICAgICogVGhpcyBpcyBiZWNhdXNlIGluIGVhcmx5IDIwMTUsIEZ1bmN0aW9uLmJpbmRcbiAgICAgKiBpcyBzdGlsbCA2MCUgc2xvd2VyIGluIGhpZ2ggcGVyZm9ybWFuY2Ugc2NlbmFyaW9zLlxuICAgICAqIEFsc28gc2VwYXJhdGluZyBmcmFtZSByZXF1ZXN0cyBmcm9tIHVwZGF0ZSBtZXRob2RcbiAgICAgKiBzbyBsaXN0ZW5lcnMgbWF5IGJlIGNhbGxlZCBhdCBhbnkgdGltZSBhbmQgd2l0aFxuICAgICAqIGFueSBhbmltYXRpb24gQVBJLCBqdXN0IGludm9rZSB0aWNrZXIudXBkYXRlKHRpbWUpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90aWNrID0gZnVuY3Rpb24gX3RpY2sodGltZSkge1xuXG4gICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgICAgIGlmIChfdGhpcy5zdGFydGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBJbnZva2UgbGlzdGVuZXJzIG5vd1xuICAgICAgICAgICAgX3RoaXMudXBkYXRlKHRpbWUpO1xuICAgICAgICAgICAgLy8gTGlzdGVuZXIgc2lkZSBlZmZlY3RzIG1heSBoYXZlIG1vZGlmaWVkIHRpY2tlciBzdGF0ZS5cbiAgICAgICAgICAgIGlmIChfdGhpcy5zdGFydGVkICYmIF90aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgX3RoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMuX3RpY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGVtaXR0ZXIgdXNlZCB0byBmaXJlICd0aWNrJyBldmVudFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGN1cnJlbnQgZnJhbWUgcmVxdWVzdCBJRFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHZhbHVlIG1hbmFnZWQgYnkgbWluRlBTIHByb3BlcnR5IHNldHRlciBhbmQgZ2V0dGVyLlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gYWxsb3dlZCBtaWxsaXNlY29uZHMgYmV0d2VlbiB1cGRhdGVzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4RWxhcHNlZE1TID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhpcyB0aWNrZXIgc2hvdWxkIGludm9rZSB0aGUgbWV0aG9kXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdGFydH0gYXV0b21hdGljYWxseVxuICAgICAqIHdoZW4gYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9TdGFydCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2NhbGFyIHRpbWUgdmFsdWUgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgc2V0dGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI21pbkZQU31cbiAgICAgKiBhbmQgaXMgc2NhbGVkIHdpdGgge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0uXG4gICAgICogKipOb3RlOioqIFRoZSBjYXAgbWF5IGJlIGV4Y2VlZGVkIGJ5IHNjYWxpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZGVsdGFUaW1lID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRpbWUgZWxhcHNlZCBpbiBtaWxsaXNlY29uZHMgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogT3Bwb3NlZCB0byB3aGF0IHRoZSBzY2FsYXIge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9XG4gICAgICogaXMgYmFzZWQsIHRoaXMgdmFsdWUgaXMgbmVpdGhlciBjYXBwZWQgbm9yIHNjYWxlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEgLyBUQVJHRVRfRlBNU1xuICAgICAqL1xuICAgIHRoaXMuZWxhcHNlZE1TID0gMSAvIENPTlNULlRBUkdFVF9GUE1TOyAvLyBkZWZhdWx0IHRvIHRhcmdldCBmcmFtZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCB0aW1lIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjdXBkYXRlfSB3YXMgaW52b2tlZC5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGFsc28gcmVzZXQgaW50ZXJuYWxseSBvdXRzaWRlIG9mIGludm9raW5nXG4gICAgICogdXBkYXRlLCBidXQgb25seSB3aGVuIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gICAgICogSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERPTUhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgICogdGhpcyB2YWx1ZSB3aWxsIGhhdmUgYSBwcmVjaXNpb24gb2YgMSDCtXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5sYXN0VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBGYWN0b3Igb2YgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBTY2FsZXMgdGlja2VyLmRlbHRhVGltZSB0byB3aGF0IHdvdWxkIGJlXG4gICAgICogLy8gdGhlIGVxdWl2YWxlbnQgb2YgYXBwcm94aW1hdGVseSAxMjAgRlBTXG4gICAgICogdGlja2VyLnNwZWVkID0gMjtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5zcGVlZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBoYXMgYmVlbiBzdGFydGVkLlxuICAgICAqIGB0cnVlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogYGZhbHNlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0b3B9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBXaGlsZSBgZmFsc2VgLCB0aGlzIHZhbHVlIG1heSBjaGFuZ2UgdG8gYHRydWVgIGluIHRoZVxuICAgICAqIGV2ZW50IG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBiZWluZyBgdHJ1ZWBcbiAgICAgKiBhbmQgYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlja2VyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZXMgcGVyIHNlY29uZCBhdCB3aGljaCB0aGlzIHRpY2tlciBpcyBydW5uaW5nLlxuICAgICAqIFRoZSBkZWZhdWx0IGlzIGFwcHJveGltYXRlbHkgNjAgaW4gbW9zdCBtb2Rlcm4gYnJvd3NlcnMuXG4gICAgICogKipOb3RlOioqIFRoaXMgZG9lcyBub3QgZmFjdG9yIGluIHRoZSB2YWx1ZSBvZlxuICAgICAqIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3BlZWR9LCB3aGljaCBpcyBzcGVjaWZpY1xuICAgICAqIHRvIHNjYWxpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuZWxhcHNlZE1TO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIG1pbGxpc2Vjb25kcyBhbGxvd2VkIHRvXG4gICAgICogZWxhcHNlIGJldHdlZW4gaW52b2tpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9LlxuICAgICAqIFRoaXMgdmFsdWUgaXMgdXNlZCB0byBjYXAge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICAgICAqIGJ1dCBkb2VzIG5vdCBlZmZlY3QgdGhlIG1lYXN1cmVkIHZhbHVlIG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjRlBTfS5cbiAgICAgKiBXaGVuIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSBpdCBpcyBjbGFtcGVkIHRvIGEgdmFsdWUgYmV0d2VlblxuICAgICAqIGAwYCBhbmQgYFBJWEkuVEFSR0VUX0ZQTVMgKiAxMDAwYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSS50aWNrZXIuVGlja2VyI1xuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgbWluRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuX21heEVsYXBzZWRNUztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbihmcHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIENsYW1wOiAwIHRvIFRBUkdFVF9GUE1TXG4gICAgICAgICAgICB2YXIgbWluRlBNUyA9IE1hdGgubWluKE1hdGgubWF4KDAsIGZwcykgLyAxMDAwLCBDT05TVC5UQVJHRVRfRlBNUyk7XG4gICAgICAgICAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxIC8gbWluRlBNUztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lLlxuICogSWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHkgYmVlbiByZXF1ZXN0ZWQsIGFuZCBpZiB0aGUgaW50ZXJuYWxcbiAqIGVtaXR0ZXIgaGFzIGxpc3RlbmVycywgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3JlcXVlc3RJZk5lZWRlZCA9IGZ1bmN0aW9uIF9yZXF1ZXN0SWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICAvLyBlbnN1cmUgY2FsbGJhY2tzIGdldCBjb3JyZWN0IGRlbHRhXG4gICAgICAgIHRoaXMubGFzdFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX3RpY2spO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSBjYW5jZWxzIGEgcGVuZGluZyBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fY2FuY2VsSWZOZWVkZWQgPSBmdW5jdGlvbiBfY2FuY2VsSWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgIT09IG51bGwpXG4gICAge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZXF1ZXN0SWQpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiB0aGUgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQgaXQgY2hlY2tzIGlmIGEgZnJhbWUgaGFzIG5vdCBhbHJlYWR5XG4gKiBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbCBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMuIElmIHRoZXNlXG4gKiBjb25kaXRpb25zIGFyZSBtZXQsIGEgbmV3IGZyYW1lIGlzIHJlcXVlc3RlZC4gSWYgdGhlIHRpY2tlciBoYXMgbm90XG4gKiBiZWVuIHN0YXJ0ZWQsIGJ1dCBhdXRvU3RhcnQgaXMgYHRydWVgLCB0aGVuIHRoZSB0aWNrZXIgc3RhcnRzIG5vdyxcbiAqIGFuZCBjb250aW51ZXMgd2l0aCB0aGUgcHJldmlvdXMgY29uZGl0aW9ucyB0byByZXF1ZXN0IGEgbmV3IGZyYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3N0YXJ0SWZQb3NzaWJsZSA9IGZ1bmN0aW9uIF9zdGFydElmUG9zc2libGUoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5hdXRvU3RhcnQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29ufSBpbnRlcm5hbGx5IGZvciB0aGVcbiAqIGludGVybmFsICd0aWNrJyBldmVudC4gSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsXG4gKiBhbmQgaWYgc28gaXQgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGF0IHRoaXMgcG9pbnQuXG4gKlxuICogQHBhcmFtIGZuIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGFkZGVkIGZvciB1cGRhdGVzXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbihUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29uY2V9IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIG9uZSB1cGRhdGVcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZE9uY2UgPSBmdW5jdGlvbiBhZGRPbmNlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub25jZShUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29mZn0gaW50ZXJuYWxseSBmb3IgJ3RpY2snIGV2ZW50LlxuICogSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMgZm9yICd0aWNrJyBldmVudC5cbiAqIElmIGl0IGRvZXMsIHRoZW4gaXQgY2FuY2VscyB0aGUgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwYXJhbSBbZm5dIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIHJlbW92ZWRcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dCB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub2ZmKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIGlmICghdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgbGlzdGVuZXJzXG4gKiBhIG5ldyBhbmltYXRpb24gZnJhbWUgaXMgcmVxdWVzdGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiBzdGFydCgpXG57XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSB0aWNrZXIuIElmIHRoZSB0aWNrZXIgaGFzIHJlcXVlc3RlZFxuICogYW4gYW5pbWF0aW9uIGZyYW1lIGl0IGlzIGNhbmNlbGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uIHN0b3AoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2FuY2VsSWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRyaWdnZXJzIGFuIHVwZGF0ZS4gQW4gdXBkYXRlIGVudGFpbHMgc2V0dGluZyB0aGVcbiAqIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNlbGFwc2VkTVN9LFxuICogdGhlIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICogaW52b2tpbmcgYWxsIGxpc3RlbmVycyB3aXRoIGN1cnJlbnQgZGVsdGFUaW1lLFxuICogYW5kIHRoZW4gZmluYWxseSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbGFzdFRpbWV9XG4gKiB3aXRoIHRoZSB2YWx1ZSBvZiBjdXJyZW50VGltZSB0aGF0IHdhcyBwcm92aWRlZC5cbiAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgYW5pbWF0aW9uXG4gKiBmcmFtZSBjYWxsYmFja3MgaWYgdGhlIHRpY2tlciBpbnN0YW5jZSBoYXMgYmVlbiBzdGFydGVkXG4gKiBhbmQgbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqXG4gKiBAcGFyYW0gW2N1cnJlbnRUaW1lPXBlcmZvcm1hbmNlLm5vdygpXSB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9IHRoZSBjdXJyZW50IHRpbWUgb2YgZXhlY3V0aW9uXG4gKi9cblRpY2tlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKGN1cnJlbnRUaW1lKVxue1xuICAgIHZhciBlbGFwc2VkTVM7XG5cbiAgICAvLyBBbGxvdyBjYWxsaW5nIHVwZGF0ZSBkaXJlY3RseSB3aXRoIGRlZmF1bHQgY3VycmVudFRpbWUuXG4gICAgY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSB8fCBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAvLyBTYXZlIHVuY2FwcGVkIGVsYXBzZWRNUyBmb3IgbWVhc3VyZW1lbnRcbiAgICBlbGFwc2VkTVMgPSB0aGlzLmVsYXBzZWRNUyA9IGN1cnJlbnRUaW1lIC0gdGhpcy5sYXN0VGltZTtcblxuICAgIC8vIGNhcCB0aGUgbWlsbGlzZWNvbmRzIGVsYXBzZWQgdXNlZCBmb3IgZGVsdGFUaW1lXG4gICAgaWYgKGVsYXBzZWRNUyA+IHRoaXMuX21heEVsYXBzZWRNUylcbiAgICB7XG4gICAgICAgIGVsYXBzZWRNUyA9IHRoaXMuX21heEVsYXBzZWRNUztcbiAgICB9XG5cbiAgICB0aGlzLmRlbHRhVGltZSA9IGVsYXBzZWRNUyAqIENPTlNULlRBUkdFVF9GUE1TICogdGhpcy5zcGVlZDtcblxuICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgYWRkZWQgdG8gaW50ZXJuYWwgZW1pdHRlclxuICAgIHRoaXMuX2VtaXR0ZXIuZW1pdChUSUNLLCB0aGlzLmRlbHRhVGltZSk7XG5cbiAgICB0aGlzLmxhc3RUaW1lID0gY3VycmVudFRpbWU7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRpY2tlcjtcbiIsInZhciBUaWNrZXIgPSByZXF1aXJlKCcuL1RpY2tlcicpO1xuXG4vKipcbiAqIFRoZSBzaGFyZWQgdGlja2VyIGluc3RhbmNlIHVzZWQgYnkge0BsaW5rIFBJWEkuZXh0cmFzLk1vdmllQ2xpcH0uXG4gKiBhbmQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqIFRoZSBwcm9wZXJ0eSB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2F1dG9TdGFydH0gaXMgc2V0IHRvIGB0cnVlYFxuICogZm9yIHRoaXMgaW5zdGFuY2UuIFBsZWFzZSBmb2xsb3cgdGhlIGV4YW1wbGVzIGZvciB1c2FnZSwgaW5jbHVkaW5nXG4gKiBob3cgdG8gb3B0LW91dCBvZiBhdXRvLXN0YXJ0aW5nIHRoZSBzaGFyZWQgdGlja2VyLlxuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgdGlja2VyID0gUElYSS50aWNrZXIuc2hhcmVkO1xuICogLy8gU2V0IHRoaXMgdG8gcHJldmVudCBzdGFydGluZyB0aGlzIHRpY2tlciB3aGVuIGxpc3RlbmVycyBhcmUgYWRkZWQuXG4gKiAvLyBCeSBkZWZhdWx0IHRoaXMgaXMgdHJ1ZSBvbmx5IGZvciB0aGUgUElYSS50aWNrZXIuc2hhcmVkIGluc3RhbmNlLlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogLy8gRllJLCBjYWxsIHRoaXMgdG8gZW5zdXJlIHRoZSB0aWNrZXIgaXMgc3RvcHBlZC4gSXQgc2hvdWxkIGJlIHN0b3BwZWRcbiAqIC8vIGlmIHlvdSBoYXZlIG5vdCBhdHRlbXB0ZWQgdG8gcmVuZGVyIGFueXRoaW5nIHlldC5cbiAqIHRpY2tlci5zdG9wKCk7XG4gKiAvLyBDYWxsIHRoaXMgd2hlbiB5b3UgYXJlIHJlYWR5IGZvciBhIHJ1bm5pbmcgc2hhcmVkIHRpY2tlci5cbiAqIHRpY2tlci5zdGFydCgpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBZb3UgbWF5IHVzZSB0aGUgc2hhcmVkIHRpY2tlciB0byByZW5kZXIuLi5cbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDgwMCwgNjAwKTtcbiAqIHZhciBzdGFnZSA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogdmFyIGludGVyYWN0aW9uTWFuYWdlciA9IFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyKTtcbiAqIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocmVuZGVyZXIudmlldyk7XG4gKiB0aWNrZXIuYWRkKGZ1bmN0aW9uICh0aW1lKSB7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBPciB5b3UgY2FuIGp1c3QgdXBkYXRlIGl0IG1hbnVhbGx5LlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogdGlja2VyLnN0b3AoKTtcbiAqIGZ1bmN0aW9uIGFuaW1hdGUodGltZSkge1xuICogICAgIHRpY2tlci51cGRhdGUodGltZSk7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XG4gKiB9XG4gKiBhbmltYXRlKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAqXG4gKiBAdHlwZSB7UElYSS50aWNrZXIuVGlja2VyfVxuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbnZhciBzaGFyZWQgPSBuZXcgVGlja2VyKCk7XG5zaGFyZWQuYXV0b1N0YXJ0ID0gdHJ1ZTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudGlja2VyXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIHNoYXJlZDogc2hhcmVkLFxuICAgIFRpY2tlcjogVGlja2VyXG59O1xuIiwiLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuXG52YXIgR0xfTUFQID0ge307XG5cblxudmFyIGNyZWF0ZUluZGljZXNGb3JRdWFkcyA9IGZ1bmN0aW9uIChzaXplKVxue1xuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYXJyYXksIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgIFxuICAgIHZhciB0b3RhbEluZGljZXMgPSBzaXplICogNjtcblxuICAgIHZhciBpbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHRvdGFsSW5kaWNlcyk7XG5cblx0Ly8gZmlsbCB0aGUgaW5kaWNlcyB3aXRoIHRoZSBxdWFkcyB0byBkcmF3XG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCB0b3RhbEluZGljZXM7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kaWNlcztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzOyIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLnV0aWxzXG4gKi9cbnZhciB1dGlscyA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIF91aWQ6IDAsXG4gICAgX3NhaWRIZWxsbzogZmFsc2UsXG5cbiAgICBFdmVudEVtaXR0ZXI6ICAgcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIHBsdWdpblRhcmdldDogICByZXF1aXJlKCcuL3BsdWdpblRhcmdldCcpLFxuICAgIGFzeW5jOiAgICAgICAgICByZXF1aXJlKCdhc3luYycpLFxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllclxuICAgICAqXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllciB0byB1c2UuXG4gICAgICovXG4gICAgdWlkOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICsrdXRpbHMuX3VpZDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBoZXggY29sb3IgbnVtYmVyIHRvIGFuIFtSLCBHLCBCXSBhcnJheVxuICAgICAqXG4gICAgICogQHBhcmFtIGhleCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSAge251bWJlcltdfSBbb3V0PVtdXVxuICAgICAqIEByZXR1cm4ge251bWJlcltdfSBBbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIFtSLCBHLCBCXSBvZiB0aGUgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnJnYjogZnVuY3Rpb24gKGhleCwgb3V0KVxuICAgIHtcbiAgICAgICAgb3V0ID0gb3V0IHx8IFtdO1xuXG4gICAgICAgIG91dFswXSA9IChoZXggPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzFdID0gKGhleCA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIG91dFsyXSA9IChoZXggJiAweEZGKSAvIDI1NTtcblxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5nIGNvbG9yLlxuICAgICAqL1xuICAgIGhleDJzdHJpbmc6IGZ1bmN0aW9uIChoZXgpXG4gICAge1xuICAgICAgICBoZXggPSBoZXgudG9TdHJpbmcoMTYpO1xuICAgICAgICBoZXggPSAnMDAwMDAwJy5zdWJzdHIoMCwgNiAtIGhleC5sZW5ndGgpICsgaGV4O1xuXG4gICAgICAgIHJldHVybiAnIycgKyBoZXg7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgY29sb3IgYXMgYW4gW1IsIEcsIEJdIGFycmF5IHRvIGEgaGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIHJnYiB7bnVtYmVyW119XG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgY29sb3IgbnVtYmVyXG4gICAgICovXG4gICAgcmdiMmhleDogZnVuY3Rpb24gKHJnYilcbiAgICB7XG4gICAgICAgIHJldHVybiAoKHJnYlswXSoyNTUgPDwgMTYpICsgKHJnYlsxXSoyNTUgPDwgOCkgKyByZ2JbMl0qMjU1KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIENhbnZhcyBCbGVuZE1vZGVzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnJvd3NlclxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciB0aGV5IGFyZSBzdXBwb3J0ZWRcbiAgICAgKi9cbiAgICBjYW5Vc2VOZXdDYW52YXNCbGVuZE1vZGVzOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwbmdIZWFkID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVFBQUFBQkFRTUFBQUREOHAyT0FBQUFBMUJNVkVYLyc7XG4gICAgICAgIHZhciBwbmdFbmQgPSAnQUFBQUNrbEVRVlFJMTJOZ0FBQUFBZ0FCNGlHOE13QUFBQUJKUlU1RXJrSmdnZz09JztcblxuICAgICAgICB2YXIgbWFnZW50YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBtYWdlbnRhLnNyYyA9IHBuZ0hlYWQgKyAnQVA4MDRPYTYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciB5ZWxsb3cgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgeWVsbG93LnNyYyA9IHBuZ0hlYWQgKyAnL3dDS3h2UkYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY2FudmFzLndpZHRoID0gNjtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IDE7XG5cbiAgICAgICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShtYWdlbnRhLCAwLCAwKTtcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoeWVsbG93LCAyLCAwKTtcblxuICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDIsMCwxLDEpLmRhdGE7XG5cbiAgICAgICAgcmV0dXJuIChkYXRhWzBdID09PSAyNTUgJiYgZGF0YVsxXSA9PT0gMCAmJiBkYXRhWzJdID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBudW1iZXIsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgdGFrZW4gZnJvbSBTdGFybGluZyBGcmFtZXdvcmsgYXMgaXRzIHByZXR0eSBuZWF0IDspXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbnVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7bnVtYmVyfSB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqL1xuICAgIGdldE5leHRQb3dlck9mVHdvOiBmdW5jdGlvbiAobnVtYmVyKVxuICAgIHtcbiAgICAgICAgLy8gc2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Bvd2VyX29mX3R3byNGYXN0X2FsZ29yaXRobV90b19jaGVja19pZl9hX3Bvc2l0aXZlX251bWJlcl9pc19hX3Bvd2VyX29mX3R3b1xuICAgICAgICBpZiAobnVtYmVyID4gMCAmJiAobnVtYmVyICYgKG51bWJlciAtIDEpKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSAxO1xuXG4gICAgICAgICAgICB3aGlsZSAocmVzdWx0IDwgbnVtYmVyKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA8PD0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBjaGVja3MgaWYgdGhlIGdpdmVuIHdpZHRoIGFuZCBoZWlnaHQgbWFrZSBhIHBvd2VyIG9mIHR3byByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSBoZWlnaHQge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzUG93ZXJPZlR3bzogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm4gKHdpZHRoID4gMCAmJiAod2lkdGggJiAod2lkdGggLSAxKSkgPT09IDAgJiYgaGVpZ2h0ID4gMCAmJiAoaGVpZ2h0ICYgKGhlaWdodCAtIDEpKSA9PT0gMCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGdldCB0aGUgcmVzb2x1dGlvbiBvZiBhbiBhc3NldCBieSBsb29raW5nIGZvciB0aGUgcHJlZml4XG4gICAgICogdXNlZCBieSBzcHJpdGVzaGVldHMgYW5kIGltYWdlIHVybHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwge3N0cmluZ30gdGhlIGltYWdlIHBhdGhcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0UmVzb2x1dGlvbk9mVXJsOiBmdW5jdGlvbiAodXJsKVxuICAgIHtcbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBDT05TVC5SRVRJTkFfUFJFRklYLmV4ZWModXJsKTtcblxuICAgICAgICBpZiAocmVzb2x1dGlvbilcbiAgICAgICAge1xuICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChyZXNvbHV0aW9uWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAxO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBMb2dzIG91dCB0aGUgdmVyc2lvbiBhbmQgcmVuZGVyZXIgaW5mb3JtYXRpb24gZm9yIHRoaXMgcnVubmluZyBpbnN0YW5jZSBvZiBQSVhJLlxuICAgICAqIElmIHlvdSBkb24ndCB3YW50IHRvIHNlZSB0aGlzIG1lc3NhZ2UgeW91IGNhbiBzZXQgYFBJWEkudXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7YFxuICAgICAqIHNvIHRoZSBsaWJyYXJ5IHRoaW5rcyBpdCBhbHJlYWR5IHNhaWQgaXQuIEtlZXAgaW4gbWluZCB0aGF0IGRvaW5nIHRoYXQgd2lsbCBmb3JldmVyXG4gICAgICogbWFrZXMgeW91IGEgamVyayBmYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBUaGUgc3RyaW5nIHJlbmRlcmVyIHR5cGUgdG8gbG9nLlxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBzYXlIZWxsbzogZnVuY3Rpb24gKHR5cGUpXG4gICAge1xuICAgICAgICBpZiAodXRpbHMuX3NhaWRIZWxsbylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjaHJvbWUnKSA+IC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtcbiAgICAgICAgICAgICAgICAnXFxuICVjICVjICVjIFBpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0g4pywICcgKyB0eXBlICsgJyDinLAgICVjICcgKyAnICVjICcgKyAnIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8gICVjICVjIOKZpSVj4pmlJWPimaUgXFxuXFxuJyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmY2NmE1OyBiYWNrZ3JvdW5kOiAjMDMwMzA3OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmYzNkYzsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOydcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBhcmdzKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3aW5kb3cuY29uc29sZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nKCdQaXhpLmpzICcgKyBDT05TVC5WRVJTSU9OICsgJyAtICcgKyB0eXBlICsgJyAtIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8nKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuXG4gICAgICAgIHV0aWxzLl9zYWlkSGVsbG8gPSB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgZm9yIGNoZWNraW5nIGZvciB3ZWJnbCBzdXBwb3J0XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzV2ViR0xTdXBwb3J0ZWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB2YXIgY29udGV4dE9wdGlvbnMgPSB7IHN0ZW5jaWw6IHRydWUgfTtcbiAgICAgICAgdHJ5XG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghd2luZG93LldlYkdMUmVuZGVyaW5nQ29udGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSxcbiAgICAgICAgICAgICAgICBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIGNvbnRleHRPcHRpb25zKSB8fCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgY29udGV4dE9wdGlvbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gISEoZ2wgJiYgZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5zdGVuY2lsKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgc2lnbiBvZiBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBuIHtudW1iZXJ9XG4gICAgICogQHJldHVybnMge251bWJlcn0gMCBpZiBuIGlzIDAsIC0xIGlmIG4gaXMgbmVnYXRpdmUsIDEgaWYgbiBpIHBvc2l0aXZlXG4gICAgICovXG4gICAgc2lnbjogZnVuY3Rpb24gKG4pXG4gICAge1xuICAgICAgICByZXR1cm4gbiA/IChuIDwgMCA/IC0xIDogMSkgOiAwO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZW1vdmVJdGVtc1xuICAgICAqXG4gICAgICogQHBhcmFtIHthcnJheX0gYXJyIFRoZSB0YXJnZXQgYXJyYXlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRJZHggVGhlIGluZGV4IHRvIGJlZ2luIHJlbW92aW5nIGZyb20gKGluY2x1c2l2ZSlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmVtb3ZlQ291bnQgSG93IG1hbnkgaXRlbXMgdG8gcmVtb3ZlXG4gICAgICovXG4gICAgcmVtb3ZlSXRlbXM6IGZ1bmN0aW9uIChhcnIsIHN0YXJ0SWR4LCByZW1vdmVDb3VudClcbiAgICB7XG4gICAgICAgIHZhciBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIGlmIChzdGFydElkeCA+PSBsZW5ndGggfHwgcmVtb3ZlQ291bnQgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbW92ZUNvdW50ID0gKHN0YXJ0SWR4K3JlbW92ZUNvdW50ID4gbGVuZ3RoID8gbGVuZ3RoLXN0YXJ0SWR4IDogcmVtb3ZlQ291bnQpO1xuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJZHgsIGxlbiA9IGxlbmd0aC1yZW1vdmVDb3VudDsgaSA8IGxlbjsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBhcnJbaV0gPSBhcnJbaSArIHJlbW92ZUNvdW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyci5sZW5ndGggPSBsZW47XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIERlc2NyaWJlIHByb3BlcnR5IHVzYWdlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBUZXh0dXJlQ2FjaGU6IHt9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHt9XG59O1xuIiwiLyoqXG4gKiBNaXhpbnMgZnVuY3Rpb25hbGl0eSB0byBtYWtlIGFuIG9iamVjdCBoYXZlIFwicGx1Z2luc1wiLlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkudXRpbHNcbiAqIEBwYXJhbSBvYmoge29iamVjdH0gVGhlIG9iamVjdCB0byBtaXggaW50by5cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIHBsdWdpblRhcmdldC5taXhpbihNeU9iamVjdCk7XG4gKi9cbmZ1bmN0aW9uIHBsdWdpblRhcmdldChvYmopXG57XG4gICAgb2JqLl9fcGx1Z2lucyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHBsdWdpbiB0byBhbiBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwbHVnaW5OYW1lIHtzdHJpbmd9IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICAgICAqIEBwYXJhbSBjdG9yIHtGdW5jdGlvbn0gVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciB0aGUgcGx1Z2luLlxuICAgICAqL1xuICAgIG9iai5yZWdpc3RlclBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW5OYW1lLCBjdG9yKVxuICAgIHtcbiAgICAgICAgb2JqLl9fcGx1Z2luc1twbHVnaW5OYW1lXSA9IGN0b3I7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlcyBhbGwgdGhlIHBsdWdpbnMgb2YgdGhpcyBvYmplY3RcbiAgICAgKlxuICAgICAqL1xuICAgIG9iai5wcm90b3R5cGUuaW5pdFBsdWdpbnMgPSBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zID0gdGhpcy5wbHVnaW5zIHx8IHt9O1xuXG4gICAgICAgIGZvciAodmFyIG8gaW4gb2JqLl9fcGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbmV3IChvYmouX19wbHVnaW5zW29dKSh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5kZXN0cm95UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBvIGluIHRoaXMucGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBsdWdpbnMgPSBudWxsO1xuICAgIH07XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLyoqXG4gICAgICogTWl4ZXMgaW4gdGhlIHByb3BlcnRpZXMgb2YgdGhlIHBsdWdpblRhcmdldCBpbnRvIGFub3RoZXIgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0IHtvYmplY3R9IFRoZSBvYmogdG8gbWl4IGludG9cbiAgICAgKi9cbiAgICBtaXhpbjogZnVuY3Rpb24gbWl4aW4ob2JqKVxuICAgIHtcbiAgICAgICAgcGx1Z2luVGFyZ2V0KG9iaik7XG4gICAgfVxufTtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciBjb3JlID0gcmVxdWlyZSgnLi9jb3JlJyksXG4gICAgbWVzaCA9IHJlcXVpcmUoJy4vbWVzaCcpLFxuICAgIGV4dHJhcyA9IHJlcXVpcmUoJy4vZXh0cmFzJyksXG4gICAgZmlsdGVycyA9IHJlcXVpcmUoJy4vZmlsdGVycycpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIFNwcml0ZUJhdGNoXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLlBhcnRpY2xlQ29udGFpbmVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlNwcml0ZUJhdGNoID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLicpO1xufTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBBc3NldExvYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBzZWUgUElYSS5sb2FkZXJzLkxvYWRlclxuICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IFRoZSBsb2FkZXIgc3lzdGVtIHdhcyBvdmVyaGF1bGVkIGluIHBpeGkgdjMsIHBsZWFzZSBzZWUgdGhlIG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyIGNsYXNzLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLkFzc2V0TG9hZGVyID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuJyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb3JlLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFN0YWdlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQ29udGFpbmVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFN0YWdlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1lvdSBkbyBub3QgbmVlZCB0byB1c2UgYSBQSVhJIFN0YWdlIGFueSBtb3JlLCB5b3UgY2FuIHNpbXBseSByZW5kZXIgYW55IGNvbnRhaW5lci4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIERpc3BsYXlPYmplY3RDb250YWluZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgRGlzcGxheU9iamVjdENvbnRhaW5lcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEaXNwbGF5T2JqZWN0Q29udGFpbmVyIGhhcyBiZWVuIHNob3J0ZW5lZCB0byBDb250YWluZXIsIHBsZWFzZSB1c2UgQ29udGFpbmVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RyaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2hcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RyaXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFN0cmlwIGNsYXNzIGhhcyBiZWVuIHJlbmFtZWQgdG8gTWVzaCBhbmQgbW92ZWQgdG8gbWVzaC5NZXNoLCBwbGVhc2UgdXNlIG1lc2guTWVzaCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLk1lc2g7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBSb3BlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkubWVzaC5Sb3BlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFJvcGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFJvcGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gbWVzaC5Sb3BlLCBwbGVhc2UgdXNlIG1lc2guUm9wZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLlJvcGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBNb3ZpZUNsaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuTW92aWVDbGlwXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIE1vdmllQ2xpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgTW92aWVDbGlwIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5Nb3ZpZUNsaXAsIHBsZWFzZSB1c2UgZXh0cmFzLk1vdmllQ2xpcCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuTW92aWVDbGlwO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGlsaW5nU3ByaXRlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBUaWxpbmdTcHJpdGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRpbGluZ1Nwcml0ZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuVGlsaW5nU3ByaXRlLCBwbGVhc2UgdXNlIGV4dHJhcy5UaWxpbmdTcHJpdGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLlRpbGluZ1Nwcml0ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJpdG1hcFRleHRcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCaXRtYXBUZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCaXRtYXBUZXh0IGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5CaXRtYXBUZXh0LCBwbGVhc2UgdXNlIGV4dHJhcy5CaXRtYXBUZXh0IGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5CaXRtYXBUZXh0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgYmxlbmRNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIGJsZW5kTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGJsZW5kTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gQkxFTkRfTU9ERVMsIHBsZWFzZSB1c2UgQkxFTkRfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5CTEVORF9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNjYWxlTW9kZXNcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBzY2FsZU1vZGVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBzY2FsZU1vZGVzIGhhcyBiZWVuIG1vdmVkIHRvIFNDQUxFX01PREVTLCBwbGVhc2UgdXNlIFNDQUxFX01PREVTIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU0NBTEVfTU9ERVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBCYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuQmFzZVRleHR1cmVDYWNoZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCYXNlVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgQmFzZVRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5CYXNlVGV4dHVyZUNhY2hlLCBwbGVhc2UgdXNlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5UZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuVGV4dHVyZUNhY2hlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIG1hdGhcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBtYXRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgbWF0aCBuYW1lc3BhY2UgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIGFjY2VzcyBtZW1iZXJzIGFscmVhZHkgYWNjZXNzaWJsZSBvbiBQSVhJLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgUElYSS5TcHJpdGUjc2V0VGV4dHVyZVxuICogQHNlZSBQSVhJLlNwcml0ZSN0ZXh0dXJlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlLnByb3RvdHlwZS5zZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dHVyZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dHVyZSBwcm9wZXJ0eSwgZS5nIDogc3ByaXRlLnRleHR1cmUgPSB0ZXh0dXJlOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3NldFRleHRcbiAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmV4dHJhcy5CaXRtYXBUZXh0LnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dClcbntcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dCBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dCBwcm9wZXJ0eSwgZS5nIDogbXlCaXRtYXBUZXh0LnRleHQgPSBcXCdteSB0ZXh0XFwnOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLlRleHQjdGV4dFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteVRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRTdHlsZVxuICogQHNlZSBQSVhJLlRleHQjc3R5bGVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0LnByb3RvdHlwZS5zZXRTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlKVxue1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldFN0eWxlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBzdHlsZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0LnN0eWxlID0gc3R5bGU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQHNlZSBQSVhJLlRleHR1cmUjc2V0RnJhbWVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0dXJlLnByb3RvdHlwZS5zZXRGcmFtZSA9IGZ1bmN0aW9uKGZyYW1lKVxue1xuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldEZyYW1lIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBmcmFtZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0dXJlLmZyYW1lID0gZnJhbWU7Jyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhmaWx0ZXJzLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBzZWUgUElYSS5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBBYnN0cmFjdEZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLkFic3RyYWN0RmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBBYnN0cmFjdEZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkFic3RyYWN0RmlsdGVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkZYQUFGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuRlhBQUZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBGWEFBRmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuRlhBQUZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgRlhBQUZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkZYQUFGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuU3ByaXRlTWFza0ZpbHRlclxuICAgICAqIEBzZWUgUElYSS5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIFNwcml0ZU1hc2tGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBTcHJpdGVNYXNrRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU3ByaXRlTWFza0ZpbHRlcjtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkudXRpbHMudXVpZFxuICogQHNlZSBQSVhJLnV0aWxzLnVpZFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICovXG5jb3JlLnV0aWxzLnV1aWQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvbnNvbGUud2FybigndXRpbHMudXVpZCgpIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdXRpbHMudWlkKCkgZnJvbSBub3cgb24uJyk7XG4gICAgcmV0dXJuIGNvcmUudXRpbHMudWlkKCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogQSBCaXRtYXBUZXh0IG9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dCB1c2luZyBiaXRtYXAgZm9udC4gVG9cbiAqIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJywgJ1xccicgb3IgJ1xcclxcbicgaW4geW91ciBzdHJpbmcuIFlvdSBjYW4gZ2VuZXJhdGUgdGhlIGZudCBmaWxlcyB1c2luZzpcbiAqXG4gKiBBIEJpdG1hcFRleHQgY2FuIG9ubHkgYmUgY3JlYXRlZCB3aGVuIHRoZSBmb250IGlzIGxvYWRlZFxuICpcbiAqIGBgYGpzXG4gKiAvLyBpbiB0aGlzIGNhc2UgdGhlIGZvbnQgaXMgaW4gYSBmaWxlIGNhbGxlZCAnZGVzeXJlbC5mbnQnXG4gKiB2YXIgYml0bWFwVGV4dCA9IG5ldyBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0KFwidGV4dCB1c2luZyBhIGZhbmN5IGZvbnQhXCIsIHtmb250OiBcIjM1cHggRGVzeXJlbFwiLCBhbGlnbjogXCJyaWdodFwifSk7XG4gKiBgYGBcbiAqXG4gKlxuICogaHR0cDovL3d3dy5hbmdlbGNvZGUuY29tL3Byb2R1Y3RzL2JtZm9udC8gZm9yIHdpbmRvd3Mgb3JcbiAqIGh0dHA6Ly93d3cuYm1nbHlwaC5jb20vIGZvciBtYWMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBzdHlsZSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIHN0eWxlLmZvbnQge3N0cmluZ3xvYmplY3R9IFRoZSBmb250IGRlc2NyaXB0b3IgZm9yIHRoZSBvYmplY3QsIGNhbiBiZSBwYXNzZWQgYXMgYSBzdHJpbmcgb2YgZm9ybVxuICogICAgICBcIjI0cHggRm9udE5hbWVcIiBvciBcIkZvbnROYW1lXCIgb3IgYXMgYW4gb2JqZWN0IHdpdGggZXhwbGljaXQgbmFtZS9zaXplIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQubmFtZV0ge3N0cmluZ30gVGhlIGJpdG1hcCBmb250IGlkXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQuc2l6ZV0ge251bWJlcn0gVGhlIHNpemUgb2YgdGhlIGZvbnQgaW4gcGl4ZWxzLCBlLmcuIDI0XG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0XG4gKiAgICAgIHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUudGludD0weEZGRkZGRl0ge251bWJlcn0gVGhlIHRpbnQgY29sb3JcbiAqL1xuZnVuY3Rpb24gQml0bWFwVGV4dCh0ZXh0LCBzdHlsZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgb3ZlcmFsbCB0ZXh0LCBkaWZmZXJlbnQgZnJvbSBmb250U2l6ZSxcbiAgICAgKiB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBzdHlsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRleHRXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dEhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBsZXR0ZXIgc3ByaXRlIHBvb2wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZ2x5cGhzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZm9udCA9IHtcbiAgICAgICAgdGludDogc3R5bGUudGludCAhPT0gdW5kZWZpbmVkID8gc3R5bGUudGludCA6IDB4RkZGRkZGLFxuICAgICAgICBhbGlnbjogc3R5bGUuYWxpZ24gfHwgJ2xlZnQnLFxuICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICBzaXplOiAwXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgZm9udC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZm9udCA9IHN0eWxlLmZvbnQ7IC8vIHJ1biBmb250IHNldHRlclxuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IHRleHQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IHdpZHRoIG9mIHRoaXMgYml0bWFwIHRleHQgaW4gcGl4ZWxzLiBJZiB0aGUgdGV4dCBwcm92aWRlZCBpcyBsb25nZXIgdGhhbiB0aGUgdmFsdWUgcHJvdmlkZWQsIGxpbmUgYnJlYWtzIHdpbGwgYmUgYXV0b21hdGljYWxseSBpbnNlcnRlZCBpbiB0aGUgbGFzdCB3aGl0ZXNwYWNlLlxuICAgICAqIERpc2FibGUgYnkgc2V0dGluZyB2YWx1ZSB0byAwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IGxpbmUgaGVpZ2h0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRyeWluZyB0byB1c2UgdGhlIHRvdGFsIGhlaWdodCBvZiB0aGUgVGV4dCwgaWU6IHdoZW4gdHJ5aW5nIHRvIHZlcnRpY2FsbHkgYWxpZ24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkaXJ0eSBzdGF0ZSBvZiB0aGlzIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy51cGRhdGVUZXh0KCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5CaXRtYXBUZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5Db250YWluZXIucHJvdG90eXBlKTtcbkJpdG1hcFRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQml0bWFwVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gQml0bWFwVGV4dDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQml0bWFwVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGludCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0aW50OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQudGludDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQudGludCA9ICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlID49IDApID8gdmFsdWUgOiAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFsaWdubWVudCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbGVmdCdcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBhbGlnbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250LmFsaWduO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC5hbGlnbiA9IHZhbHVlIHx8ICdsZWZ0JztcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZvbnQgZGVzY3JpcHRvciBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0ZvbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgZm9udDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcgJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9mb250Lm5hbWUgPSB2YWx1ZS5sZW5ndGggPT09IDEgPyB2YWx1ZVswXSA6IHZhbHVlLnNsaWNlKDEpLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB2YWx1ZS5sZW5ndGggPj0gMiA/IHBhcnNlSW50KHZhbHVlWzBdLCAxMCkgOiBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV0uc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5zaXplID0gdHlwZW9mIHZhbHVlLnNpemUgPT09ICdudW1iZXInID8gdmFsdWUuc2l6ZSA6IHBhcnNlSW50KHZhbHVlLnNpemUsIDEwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGV4dCBhbmQgdXBkYXRlcyBpdCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkYXRhID0gQml0bWFwVGV4dC5mb250c1t0aGlzLl9mb250Lm5hbWVdO1xuICAgIHZhciBwb3MgPSBuZXcgY29yZS5Qb2ludCgpO1xuICAgIHZhciBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgIHZhciBjaGFycyA9IFtdO1xuICAgIHZhciBsYXN0TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbGluZVdpZHRocyA9IFtdO1xuICAgIHZhciBsaW5lID0gMDtcbiAgICB2YXIgc2NhbGUgPSB0aGlzLl9mb250LnNpemUgLyBkYXRhLnNpemU7XG4gICAgdmFyIGxhc3RTcGFjZSA9IC0xO1xuICAgIHZhciBtYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0Lmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gdGhpcy50ZXh0LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGxhc3RTcGFjZSA9IC8oXFxzKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSA/IGkgOiBsYXN0U3BhY2U7XG5cbiAgICAgICAgaWYgKC8oPzpcXHJcXG58XFxyfFxcbikvLnRlc3QodGhpcy50ZXh0LmNoYXJBdChpKSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXN0U3BhY2UgIT09IC0xICYmIHRoaXMubWF4V2lkdGggPiAwICYmIHBvcy54ICogc2NhbGUgPiB0aGlzLm1heFdpZHRoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKGNoYXJzLCBsYXN0U3BhY2UsIGkgLSBsYXN0U3BhY2UpO1xuICAgICAgICAgICAgaSA9IGxhc3RTcGFjZTtcbiAgICAgICAgICAgIGxhc3RTcGFjZSA9IC0xO1xuXG4gICAgICAgICAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbGluZSsrO1xuXG4gICAgICAgICAgICBwb3MueCA9IDA7XG4gICAgICAgICAgICBwb3MueSArPSBkYXRhLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hhckRhdGEgPSBkYXRhLmNoYXJzW2NoYXJDb2RlXTtcblxuICAgICAgICBpZiAoIWNoYXJEYXRhKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmV2Q2hhckNvZGUgJiYgY2hhckRhdGEua2VybmluZ1twcmV2Q2hhckNvZGVdKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb3MueCArPSBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV07XG4gICAgICAgIH1cblxuICAgICAgICBjaGFycy5wdXNoKHt0ZXh0dXJlOmNoYXJEYXRhLnRleHR1cmUsIGxpbmU6IGxpbmUsIGNoYXJDb2RlOiBjaGFyQ29kZSwgcG9zaXRpb246IG5ldyBjb3JlLlBvaW50KHBvcy54ICsgY2hhckRhdGEueE9mZnNldCwgcG9zLnkgKyBjaGFyRGF0YS55T2Zmc2V0KX0pO1xuICAgICAgICBsYXN0TGluZVdpZHRoID0gcG9zLnggKyAoY2hhckRhdGEudGV4dHVyZS53aWR0aCArIGNoYXJEYXRhLnhPZmZzZXQpO1xuICAgICAgICBwb3MueCArPSBjaGFyRGF0YS54QWR2YW5jZTtcbiAgICAgICAgbWF4TGluZUhlaWdodCA9IE1hdGgubWF4KG1heExpbmVIZWlnaHQsIChjaGFyRGF0YS55T2Zmc2V0ICsgY2hhckRhdGEudGV4dHVyZS5oZWlnaHQpKTtcbiAgICAgICAgcHJldkNoYXJDb2RlID0gY2hhckNvZGU7XG4gICAgfVxuXG4gICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG5cbiAgICB2YXIgbGluZUFsaWduT2Zmc2V0cyA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8PSBsaW5lOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYWxpZ25PZmZzZXQgPSAwO1xuXG4gICAgICAgIGlmICh0aGlzLl9mb250LmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbGlnbk9mZnNldCA9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5fZm9udC5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpbmVBbGlnbk9mZnNldHMucHVzaChhbGlnbk9mZnNldCk7XG4gICAgfVxuXG4gICAgdmFyIGxlbkNoYXJzID0gY2hhcnMubGVuZ3RoO1xuICAgIHZhciB0aW50ID0gdGhpcy50aW50O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbkNoYXJzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYyA9IHRoaXMuX2dseXBoc1tpXTsgLy8gZ2V0IHRoZSBuZXh0IGdseXBoIHNwcml0ZVxuXG4gICAgICAgIGlmIChjKVxuICAgICAgICB7XG4gICAgICAgICAgICBjLnRleHR1cmUgPSBjaGFyc1tpXS50ZXh0dXJlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgYyA9IG5ldyBjb3JlLlNwcml0ZShjaGFyc1tpXS50ZXh0dXJlKTtcbiAgICAgICAgICAgIHRoaXMuX2dseXBocy5wdXNoKGMpO1xuICAgICAgICB9XG5cbiAgICAgICAgYy5wb3NpdGlvbi54ID0gKGNoYXJzW2ldLnBvc2l0aW9uLnggKyBsaW5lQWxpZ25PZmZzZXRzW2NoYXJzW2ldLmxpbmVdKSAqIHNjYWxlO1xuICAgICAgICBjLnBvc2l0aW9uLnkgPSBjaGFyc1tpXS5wb3NpdGlvbi55ICogc2NhbGU7XG4gICAgICAgIGMuc2NhbGUueCA9IGMuc2NhbGUueSA9IHNjYWxlO1xuICAgICAgICBjLnRpbnQgPSB0aW50O1xuXG4gICAgICAgIGlmICghYy5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoYyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZW1vdmUgdW5uZWNlc3NhcnkgY2hpbGRyZW4uXG4gICAgZm9yIChpID0gbGVuQ2hhcnM7IGkgPCB0aGlzLl9nbHlwaHMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKHRoaXMuX2dseXBoc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0V2lkdGggPSBtYXhMaW5lV2lkdGggKiBzY2FsZTtcbiAgICB0aGlzLnRleHRIZWlnaHQgPSAocG9zLnkgKyBkYXRhLmxpbmVIZWlnaHQpICogc2NhbGU7XG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gbWF4TGluZUhlaWdodCAqIHNjYWxlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb2YgdGhpcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGV4dCBiZWZvcmUgY2FsbGluZyBwYXJlbnQncyBnZXRMb2NhbEJvdW5kc1xuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5cbkJpdG1hcFRleHQucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICByZXR1cm4gY29yZS5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzLmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59O1xuXG5CaXRtYXBUZXh0LmZvbnRzID0ge307XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIE1vdmllQ2xpcCBpcyBhIHNpbXBsZSB3YXkgdG8gZGlzcGxheSBhbiBhbmltYXRpb24gZGVwaWN0ZWQgYnkgYSBsaXN0IG9mIHRleHR1cmVzLlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgYWxpZW5JbWFnZXMgPSBbXCJpbWFnZV9zZXF1ZW5jZV8wMS5wbmdcIixcImltYWdlX3NlcXVlbmNlXzAyLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDMucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wNC5wbmdcIl07XG4gKiB2YXIgdGV4dHVyZUFycmF5ID0gW107XG4gKlxuICogZm9yICh2YXIgaT0wOyBpIDwgNDsgaSsrKVxuICoge1xuICogICAgICB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoYWxpZW5JbWFnZXNbaV0pO1xuICogICAgICB0ZXh0dXJlQXJyYXkucHVzaCh0ZXh0dXJlKTtcbiAqIH07XG4gKlxuICogdmFyIG1jID0gbmV3IFBJWEkuTW92aWVDbGlwKHRleHR1cmVBcnJheSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0dXJlcyB7UElYSS5UZXh0dXJlW118T2JqZWN0W119IGFuIGFycmF5IG9mIHtAbGluayBQSVhJLlRleHR1cmV9IG9yIGZyYW1lIG9iamVjdHMgdGhhdCBtYWtlIHVwIHRoZSBhbmltYXRpb25cbiAqIEBwYXJhbSB0ZXh0dXJlc1tdLnRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHtAbGluayBQSVhJLlRleHR1cmV9IG9mIHRoZSBmcmFtZVxuICogQHBhcmFtIHRleHR1cmVzW10udGltZSB7bnVtYmVyfSB0aGUgZHVyYXRpb24gb2YgdGhlIGZyYW1lIGluIG1zXG4gKi9cbmZ1bmN0aW9uIE1vdmllQ2xpcCh0ZXh0dXJlcylcbntcbiAgICBjb3JlLlNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmVzWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlID8gdGV4dHVyZXNbMF0gOiB0ZXh0dXJlc1swXS50ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kdXJhdGlvbnMgPSBudWxsO1xuXG4gICAgdGhpcy50ZXh0dXJlcyA9IHRleHR1cmVzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNwZWVkIHRoYXQgdGhlIE1vdmllQ2xpcCB3aWxsIHBsYXkgYXQuIEhpZ2hlciBpcyBmYXN0ZXIsIGxvd2VyIGlzIHNsb3dlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmFuaW1hdGlvblNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBtb3ZpZSBjbGlwIHJlcGVhdHMgYWZ0ZXIgcGxheWluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMubG9vcCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gYSBNb3ZpZUNsaXAgZmluaXNoZXMgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICovXG4gICAgdGhpcy5vbkNvbXBsZXRlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEVsYXBzZWQgdGltZSBzaW5jZSBhbmltYXRpb24gaGFzIGJlZW4gc3RhcnRlZCwgdXNlZCBpbnRlcm5hbGx5IHRvIGRpc3BsYXkgY3VycmVudCB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIE1vdmllQ2xpcCBpcyBjdXJyZW50bHkgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1vdmllQ2xpcC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5Nb3ZpZUNsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTW92aWVDbGlwO1xubW9kdWxlLmV4cG9ydHMgPSBNb3ZpZUNsaXA7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1vdmllQ2xpcC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiB0b3RhbEZyYW1lcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIGZyYW1lcyBpbiB0aGUgTW92aWVDbGlwLiBUaGlzIGlzIHRoZSBzYW1lIGFzIG51bWJlciBvZiB0ZXh0dXJlc1xuICAgICAqIGFzc2lnbmVkIHRvIHRoZSBNb3ZpZUNsaXAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdG90YWxGcmFtZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIHRleHR1cmVzIHVzZWQgZm9yIHRoaXMgTW92aWVDbGlwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqXG4gICAgICovXG4gICAgdGV4dHVyZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZih2YWx1ZVswXSBpbnN0YW5jZW9mIGNvcmUuVGV4dHVyZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcy5wdXNoKHZhbHVlW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMucHVzaCh2YWx1ZVtpXS50aW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgKiBUaGUgTW92aWVDbGlwcyBjdXJyZW50IGZyYW1lIGluZGV4XG4gICAgKlxuICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAqIEByZWFkb25seVxuICAgICovXG4gICAgY3VycmVudEZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRGcmFtZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpICUgdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRGcmFtZSA8IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY3VycmVudEZyYW1lICs9IHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RnJhbWU7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKipcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYoIXRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogUGxheXMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZih0aGlzLnBsYXlpbmcpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5aW5nID0gdHJ1ZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZ29lcyB0byBhIHNwZWNpZmljIGZyYW1lXG4gKlxuICogQHBhcmFtIGZyYW1lTnVtYmVyIHtudW1iZXJ9IGZyYW1lIGluZGV4IHRvIHN0b3AgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kU3RvcCA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLnN0b3AoKTtcblxuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbdGhpcy5jdXJyZW50RnJhbWVdO1xufTtcblxuLyoqXG4gKiBHb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWUgYW5kIGJlZ2lucyBwbGF5aW5nIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RhcnQgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kUGxheSA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IGZyYW1lTnVtYmVyO1xuXG4gICAgdGhpcy5wbGF5KCk7XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKiBAcHJpdmF0ZVxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWQgPSB0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2R1cmF0aW9ucyAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIHZhciBsYWcgPSB0aGlzLl9jdXJyZW50VGltZSAlIDEgKiB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuXG4gICAgICAgIGxhZyArPSBlbGFwc2VkIC8gNjAgKiAxMDAwO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPCAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZS0tO1xuICAgICAgICAgICAgbGFnICs9IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2lnbiA9IE1hdGguc2lnbih0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lKTtcbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgPSBNYXRoLmZsb29yKHRoaXMuX2N1cnJlbnRUaW1lKTtcblxuICAgICAgICB3aGlsZSAobGFnID49IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhZyAtPSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdICogc2lnbjtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IHNpZ247XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBsYWcgLyB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBlbGFwc2VkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jdXJyZW50VGltZSA8IDAgJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AoMCk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5fY3VycmVudFRpbWUgPj0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoICYmICF0aGlzLmxvb3ApXG4gICAge1xuICAgICAgICB0aGlzLmdvdG9BbmRTdG9wKHRoaXMuX3RleHR1cmVzLmxlbmd0aCAtIDEpO1xuXG4gICAgICAgIGlmICh0aGlzLm9uQ29tcGxldGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuXG59O1xuXG4vKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZGVzdHJveXMgaXRcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICggKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuICAgIGNvcmUuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIEEgc2hvcnQgaGFuZCB3YXkgb2YgY3JlYXRpbmcgYSBtb3ZpZWNsaXAgZnJvbSBhbiBhcnJheSBvZiBmcmFtZSBpZHNcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVzIHtzdHJpbmdbXX0gdGhlIGFycmF5IG9mIGZyYW1lcyBpZHMgdGhlIG1vdmllY2xpcCB3aWxsIHVzZSBhcyBpdHMgdGV4dHVyZSBmcmFtZXNcbiAqL1xuTW92aWVDbGlwLmZyb21GcmFtZXMgPSBmdW5jdGlvbiAoZnJhbWVzKVxue1xuICAgIHZhciB0ZXh0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0ZXh0dXJlcy5wdXNoKG5ldyBjb3JlLlRleHR1cmUuZnJvbUZyYW1lKGZyYW1lc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW92aWVDbGlwKHRleHR1cmVzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGltYWdlIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgaW1hZ2UgdXJscyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUltYWdlcyA9IGZ1bmN0aW9uIChpbWFnZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTsiLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICAvLyBhIHNwcml0ZSB1c2UgZGZvciByZW5kZXJpbmcgdGV4dHVyZXMuLlxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlcicpO1xuXG4vKipcbiAqIEEgdGlsaW5nIHNwcml0ZSBpcyBhIGZhc3Qgd2F5IG9mIHJlbmRlcmluZyBhIHRpbGluZyBpbWFnZVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmUge1RleHR1cmV9IHRoZSB0ZXh0dXJlIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFRpbGluZ1Nwcml0ZSh0ZXh0dXJlLCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGluZyBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVTY2FsZSA9IG5ldyBjb3JlLlBvaW50KDEsMSk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgcG9zaXRpb24gb2YgdGhlIGltYWdlIHRoYXQgaXMgYmVpbmcgdGlsZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBuZXcgY29yZS5Qb2ludCgwLDApO1xuXG4gICAgLy8vLy8gcHJpdmF0ZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHdpdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gd2lkdGggfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0IHx8IDEwMDtcblxuICAgIC8qKlxuICAgICAqIEFuIGludGVybmFsIFdlYkdMIFVWIGNhY2hlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlVXZzfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdXZzID0gbmV3IGNvcmUuVGV4dHVyZVV2cygpO1xuXG4gICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IG51bGw7XG5cbiAgICAvL1RPRE8gbW92ZS4uXG4gICAgdGhpcy5zaGFkZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcihcblxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1VHJhbnNmb3JtOycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJyAgIGNvb3JkIC09IHVUcmFuc2Zvcm0ueHk7JyxcbiAgICAgICAgJyAgIGNvb3JkIC89IHVUcmFuc2Zvcm0uenc7JyxcbiAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBjb29yZDsnLFxuXG4gICAgICAgICcgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpOycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgIFtcbiAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdUZyYW1lOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzIgdVBpeGVsU2l6ZTsnLFxuXG4gICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IG1vZCh2VGV4dHVyZUNvb3JkLCB1RnJhbWUuencpOycsXG4gICAgICAgICcgICBjb29yZCA9IGNsYW1wKGNvb3JkLCB1UGl4ZWxTaXplLCB1RnJhbWUuencgLSB1UGl4ZWxTaXplKTsnLFxuICAgICAgICAnICAgY29vcmQgKz0gdUZyYW1lLnh5OycsXG5cbiAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9ICB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdUZyYW1lOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVRyYW5zZm9ybTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLDAsMSwxXSB9LFxuICAgICAgICAgICAgICAgIHVQaXhlbFNpemUgOiB7IHR5cGUgOiAnMmZ2JywgdmFsdWU6IFsxLCAxXX1cbiAgICAgICAgICAgIH1cbiAgICAgICk7XG59XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsaW5nU3ByaXRlO1xubW9kdWxlLmV4cG9ydHMgPSBUaWxpbmdTcHJpdGU7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsaW5nU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRpbGluZ1Nwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybjtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICAvLyB0d2VhayBvdXIgdGV4dHVyZSB0ZW1wb3JhcmlseS4uXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUgfHwgIXRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGVtcFV2cyA9IHRleHR1cmUuX3V2cyxcbiAgICAgICAgdGVtcFdpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIHRlbXBIZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQsXG4gICAgICAgIHR3ID0gdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCxcbiAgICAgICAgdGggPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRoaXMuX3V2cztcbiAgICB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51UGl4ZWxTaXplLnZhbHVlWzBdID0gMS4wL3R3O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMV0gPSAxLjAvdGg7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMF0gPSB0ZW1wVXZzLngwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVsxXSA9IHRlbXBVdnMueTA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzJdID0gdGVtcFV2cy54MSAtIHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzNdID0gdGVtcFV2cy55MiAtIHRlbXBVdnMueTA7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzBdID0gKHRoaXMudGlsZVBvc2l0aW9uLnggJSAodGVtcFdpZHRoICogdGhpcy50aWxlU2NhbGUueCkpIC8gdGhpcy5fd2lkdGg7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsxXSA9ICh0aGlzLnRpbGVQb3NpdGlvbi55ICUgKHRlbXBIZWlnaHQgKiB0aGlzLnRpbGVTY2FsZS55KSkgLyB0aGlzLl9oZWlnaHQ7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsyXSA9ICggdHcgLyB0aGlzLl93aWR0aCApICogdGhpcy50aWxlU2NhbGUueDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzNdID0gKCB0aCAvIHRoaXMuX2hlaWdodCApICogdGhpcy50aWxlU2NhbGUueTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIodGhpcyk7XG5cbiAgICB0ZXh0dXJlLl91dnMgPSB0ZW1wVXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGVtcFdpZHRoO1xuICAgIHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRlbXBIZWlnaHQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBhIHJlZmVyZW5jZSB0byB0aGUgY2FudmFzIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0LFxuICAgICAgICB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgYmFzZVRleHR1cmUgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBtb2RYID0gKHRoaXMudGlsZVBvc2l0aW9uLnggLyB0aGlzLnRpbGVTY2FsZS54KSAlIHRleHR1cmUuX2ZyYW1lLndpZHRoLFxuICAgICAgICBtb2RZID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgLyB0aGlzLnRpbGVTY2FsZS55KSAlIHRleHR1cmUuX2ZyYW1lLmhlaWdodDtcblxuICAgIC8vIGNyZWF0ZSBhIG5pY2Ugc2hpbnkgcGF0dGVybiFcbiAgICAvLyBUT0RPIHRoaXMgbmVlZHMgdG8gYmUgcmVmcmVzaGVkIGlmIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgaWYoIXRoaXMuX2NhbnZhc1BhdHRlcm4pXG4gICAge1xuICAgICAgICAvLyBjdXQgYW4gb2JqZWN0IGZyb20gYSBzcHJpdGVzaGVldC4uXG4gICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IGNvcmUuQ2FudmFzQnVmZmVyKHRleHR1cmUuX2ZyYW1lLndpZHRoLCB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQpO1xuXG4gICAgICAgIC8vIFRpbnQgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgICAgaWYgKHRoaXMudGludCAhPT0gMHhGRkZGRkYpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlZFRpbnQgIT09IHRoaXMudGludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUgPSBDYW52YXNUaW50ZXIuZ2V0VGludGVkVGV4dHVyZSh0aGlzLCB0aGlzLnRpbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZSh0aGlzLnRpbnRlZFRleHR1cmUsIDAsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZShiYXNlVGV4dHVyZS5zb3VyY2UsIC10ZXh0dXJlLl9mcmFtZS54LCAtdGV4dHVyZS5fZnJhbWUueSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IHRlbXBDYW52YXMuY29udGV4dC5jcmVhdGVQYXR0ZXJuKCB0ZW1wQ2FudmFzLmNhbnZhcywgJ3JlcGVhdCcgKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgY29udGV4dCBzdGF0ZS4uXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb24pO1xuXG4gICAgLy8gVE9ETyAtIHRoaXMgc2hvdWxkIGJlIHJvbGxlZCBpbnRvIHRoZSBzZXRUcmFuc2Zvcm0gYWJvdmUuLlxuICAgIGNvbnRleHQuc2NhbGUodGhpcy50aWxlU2NhbGUueCx0aGlzLnRpbGVTY2FsZS55KTtcblxuICAgIGNvbnRleHQudHJhbnNsYXRlKG1vZFggKyAodGhpcy5hbmNob3IueCAqIC10aGlzLl93aWR0aCApLFxuICAgICAgICAgICAgICAgICAgICAgIG1vZFkgKyAodGhpcy5hbmNob3IueSAqIC10aGlzLl9oZWlnaHQpKTtcblxuICAgIC8vIGNoZWNrIGJsZW5kIG1vZGVcbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyBmaWxsIHRoZSBwYXR0ZXJuIVxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fY2FudmFzUGF0dGVybjtcbiAgICBjb250ZXh0LmZpbGxSZWN0KC1tb2RYLFxuICAgICAgICAgICAgICAgICAgICAgLW1vZFksXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl93aWR0aCAvIHRoaXMudGlsZVNjYWxlLngsXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWlnaHQgLyB0aGlzLnRpbGVTY2FsZS55KTtcblxuXG4gICAgLy9UT0RPIC0gcHJldHR5IHN1cmUgdGhpcyBjYW4gYmUgZGVsZXRlZC4uLlxuICAgIC8vY29udGV4dC50cmFuc2xhdGUoLXRoaXMudGlsZVBvc2l0aW9uLnggKyAodGhpcy5hbmNob3IueCAqIHRoaXMuX3dpZHRoKSwgLXRoaXMudGlsZVBvc2l0aW9uLnkgKyAodGhpcy5hbmNob3IueSAqIHRoaXMuX2hlaWdodCkpO1xuICAgIC8vY29udGV4dC5zY2FsZSgxIC8gdGhpcy50aWxlU2NhbGUueCwgMSAvIHRoaXMudGlsZVNjYWxlLnkpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBzcHJpdGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xuXG4gICAgdmFyIHcwID0gd2lkdGggKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICB2YXIgdzEgPSB3aWR0aCAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgdmFyIGgwID0gaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgdmFyIGgxID0gaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG5cbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgdmFyIHgxID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTIgPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHg0ID0gIGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciBtaW5YLFxuICAgICAgICBtYXhYLFxuICAgICAgICBtaW5ZLFxuICAgICAgICBtYXhZO1xuXG4gICAgbWluWCA9IHgxO1xuICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgbWluWSA9IHkxO1xuICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgbWF4WCA9IHgxO1xuICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgbWF4WSA9IHkxO1xuICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG5cbiAgICByZXR1cm4gYm91bmRzO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byBjaGVja1xuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKlxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsZVNjYWxlID0gbnVsbDtcbiAgICB0aGlzLl90aWxlU2NhbGVPZmZzZXQgPSBudWxsO1xuICAgIHRoaXMudGlsZVBvc2l0aW9uID0gbnVsbDtcblxuICAgIHRoaXMuX3V2cyA9IG51bGw7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSB0aWxpbmcgc3ByaXRlIHRoYXQgd2lsbCB1c2UgYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICovXG5UaWxpbmdTcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQsd2lkdGgsaGVpZ2h0KVxue1xuICAgIHZhciB0ZXh0dXJlID0gY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgJyArIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKHRleHR1cmUsd2lkdGgsaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBBIG5ldyBUaWxpbmdTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgd2lkdGgsIGhlaWdodCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRpbGluZ1Nwcml0ZShjb3JlLlRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpLHdpZHRoLGhlaWdodCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgRGlzcGxheU9iamVjdCA9IGNvcmUuRGlzcGxheU9iamVjdCxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gbnVsbDtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbEhpdFRlc3QgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsRGVzdHJveSA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVkU3ByaXRlID0gbnVsbDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGlzcGxheU9iamVjdC5wcm90b3R5cGUsIHtcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgeW91IHdhbnQgdGhpcyBkaXNwbGF5IG9iamVjdCB0byBiZSBjYWNoZWQgYXMgYSBiaXRtYXAuXG4gICAgICogVGhpcyBiYXNpY2FsbHkgdGFrZXMgYSBzbmFwIHNob3Qgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IGFzIGl0IGlzIGF0IHRoYXQgbW9tZW50LiBJdCBjYW4gcHJvdmlkZSBhIHBlcmZvcm1hbmNlIGJlbmVmaXQgZm9yIGNvbXBsZXggc3RhdGljIGRpc3BsYXlPYmplY3RzLlxuICAgICAqIFRvIHJlbW92ZSBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ2ZhbHNlJ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGNhY2hlQXNCaXRtYXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVBc0JpdG1hcDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NhY2hlQXNCaXRtYXAgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSB0aGlzLnJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gdGhpcy5yZW5kZXJDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMudXBkYXRlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzID0gdGhpcy5nZXRCb3VuZHM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbERlc3Ryb3kgPSB0aGlzLmRlc3Ryb3k7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQgPSB0aGlzLmNvbnRhaW5zUG9pbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSB0aGlzLl9jYWNoZUFzQml0bWFwRGVzdHJveTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXN0cm95Q2FjaGVkRGlzcGxheU9iamVjdCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXM7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRCb3VuZHMgPSB0aGlzLl9vcmlnaW5hbEdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX29yaWdpbmFsRGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fb3JpZ2luYWxDb250YWluc1BvaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBXZWJHTFxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gdGhlIFdlYkdMIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZFdlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENhY2hlZERpc3BsYXlPYmplY3QoIHJlbmRlcmVyICk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIoIHRoaXMuX2NhY2hlZFNwcml0ZSApO1xufTtcblxuLyoqXG4qIFByZXBhcmVzIHRoZSBXZWJHTCByZW5kZXJlciB0byBjYWNoZSB0aGUgc3ByaXRlXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGZpcnN0IHdlIGZsdXNoIGFueXRoaW5nIGxlZnQgaW4gdGhlIHJlbmRlcmVyIChvdGhlcndpc2UgaXQgd291bGQgZ2V0IHJlbmRlcmVkIHRvIHRoZSBjYWNoZWQgdGV4dHVyZSlcbiAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbiAgICAvL3RoaXMuZmlsdGVycz0gW107XG4gICAgLy8gbmV4dCB3ZSBmaW5kIHRoZSBkaW1lbnNpb25zIG9mIHRoZSB1bnRyYW5zZm9ybWVkIG9iamVjdFxuICAgIC8vIHRoaXMgZnVuY3Rpb24gYWxzbyBjYWxscyB1cGRhdGV0cmFuc2Zvcm0gb24gYWxsIGl0cyBjaGlsZHJlbiBhcyBwYXJ0IG9mIHRoZSBtZWFzdXJpbmcuIFRoaXMgbWVhbnMgd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIHRyYW5zZm9ybSBhZ2FpbiBpbiB0aGlzIGZ1bmN0aW9uXG4gICAgLy8gVE9ETyBwYXNzIGFuIG9iamVjdCB0byBjbG9uZSB0b28/IHNhdmVzIGhhdmluZyB0byBjcmVhdGUgYSBuZXcgb25lIGVhY2ggdGltZSFcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmNsb25lKCk7XG5cbiAgICAvLyBhZGQgc29tZSBwYWRkaW5nIVxuICAgIGlmKHRoaXMuX2ZpbHRlcnMpXG4gICAge1xuICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuX2ZpbHRlcnNbMF0ucGFkZGluZztcbiAgICAgICAgYm91bmRzLnggLT0gcGFkZGluZztcbiAgICAgICAgYm91bmRzLnkgLT0gcGFkZGluZztcblxuICAgICAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG4gICAgfVxuXG4gICAgLy8gZm9yIG5vdyB3ZSBjYWNoZSB0aGUgY3VycmVudCByZW5kZXJUYXJnZXQgdGhhdCB0aGUgd2ViR0wgcmVuZGVyZXIgaXMgY3VycmVudGx5IHVzaW5nLlxuICAgIC8vIHRoaXMgY291bGQgYmUgbW9yZSBlbGVnZW50Li5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldDtcbiAgICAvLyBXZSBhbHNvIHN0b3JlIHRoZSBmaWx0ZXIgc3RhY2sgLSBJIHdpbGwgZGVmaW5pdGVseSBsb29rIHRvIGNoYW5nZSBob3cgdGhpcyB3b3JrcyBhIGxpdHRsZSBsYXRlciBkb3duIHRoZSBsaW5lLlxuICAgIHZhciBzdGFjayA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2s7XG5cbiAgICAvLyB0aGlzIHJlbmRlclRleHR1cmUgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBjYWNoZWQgRGlzcGxheU9iamVjdFxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG5cblxuICAgIC8vIHNldCBhbGwgcHJvcGVydGllcyB0byB0aGVyZSBvcmlnaW5hbCBzbyB3ZSBjYW4gcmVuZGVyIHRvIGEgdGV4dHVyZVxuICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoY2FjaGVkUmVuZGVyVGFyZ2V0KTtcbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmZpbHRlclN0YWNrID0gc3RhY2s7XG5cbiAgICB0aGlzLnJlbmRlcldlYkdMICAgICA9IHRoaXMuX3JlbmRlckNhY2hlZFdlYkdMO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICAgICAgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgdHJhbnNmb3JtIG9mIHRoZSBjYWNoZWQgc3ByaXRlIHRvIGF2b2lkIHRoZSBuYXN0eSBmbGlja2VyLi5cbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgLy8gbWFwIHRoZSBoaXQgdGVzdC4uXG4gICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fY2FjaGVkU3ByaXRlLmNvbnRhaW5zUG9pbnQuYmluZCh0aGlzLl9jYWNoZWRTcHJpdGUpO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgc3ByaXRlIHdpdGggY2FudmFzXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gdGhlIENhbnZhcyByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9yZW5kZXJDYWNoZWRDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdENhbnZhcyggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLnJlbmRlckNhbnZhcyhyZW5kZXJlcik7XG59O1xuXG4vL1RPRE8gdGhpcyBjYW4gYmUgdGhlIHNhbWUgYXMgdGhlIHdlYkdMIHZlcmlzb24uLiB3aWxsIG5lZWQgdG8gZG8gYSBsaXR0bGUgdHdlYWtpbmcgZmlyc3QgdGhvdWdoLi5cbi8qKlxuKiBQcmVwYXJlcyB0aGUgQ2FudmFzIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvL2dldCBib3VuZHMgYWN0dWFsbHkgdHJhbnNmb3JtcyB0aGUgb2JqZWN0IGZvciB1cyBhbHJlYWR5IVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIG0sIHRydWUpO1xuXG4gICAgLy8gbm93IHJlc3RvcmUgdGhlIHN0YXRlIGJlIHNldHRpbmcgdGhlIG5ldyBwcm9wZXJ0aWVzXG4gICAgcmVuZGVyZXIuY29udGV4dCA9IGNhY2hlZFJlbmRlclRhcmdldDtcblxuICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fcmVuZGVyQ2FjaGVkQ2FudmFzO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICA9IHRoaXMuX2dldENhY2hlZEJvdW5kcztcblxuXG4gICAgLy8gY3JlYXRlIG91ciBjYWNoZWQgc3ByaXRlXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IGNvcmUuU3ByaXRlKHJlbmRlclRleHR1cmUpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogQ2FsY3VsYXRlcyB0aGUgYm91bmRzIG9mIHRoZSBjYWNoZWQgc3ByaXRlXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2dldENhY2hlZEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLl9jYWNoZWRTcHJpdGUuZ2V0Qm91bmRzKCk7XG59O1xuXG4vKipcbiogRGVzdHJveXMgdGhlIGNhY2hlZCBzcHJpdGUuXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX3RleHR1cmUuZGVzdHJveSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59O1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcERlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSgpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSBpbnN0YW5jZSBuYW1lIG9mIHRoZSBvYmplY3QuXG4gKlxuICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAqIEBtZW1iZXIge3N0cmluZ31cbiAqL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5uYW1lID0gbnVsbDtcblxuLyoqXG4qIFJldHVybnMgdGhlIGRpc3BsYXkgb2JqZWN0IGluIHRoZSBjb250YWluZXJcbipcbiogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuKiBAcGFyYW0gbmFtZSB7c3RyaW5nfSBpbnN0YW5jZSBuYW1lXG4qIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiovXG5jb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWUgPSBmdW5jdGlvbiAobmFtZSlcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbltpXS5uYW1lID09PSBuYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdFxuKlxuKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuKiBAcGFyYW0gcG9pbnQge1BvaW50fSB0aGUgcG9pbnQgdG8gd3JpdGUgdGhlIGdsb2JhbCB2YWx1ZSB0by4gSWYgbnVsbCBhIG5ldyBwb2ludCB3aWxsIGJlIHJldHVybmVkXG4qIEByZXR1cm4ge1BvaW50fVxuKi9cbmNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0R2xvYmFsUG9zaXRpb24gPSBmdW5jdGlvbiAocG9pbnQpXG57XG4gICAgcG9pbnQgPSBwb2ludCB8fCBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgaWYodGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICBwb2ludC54ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMud29ybGRUcmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHBvaW50LnggPSB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIHBvaW50LnkgPSB0aGlzLnBvc2l0aW9uLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxucmVxdWlyZSgnLi9jYWNoZUFzQml0bWFwJyk7XG5yZXF1aXJlKCcuL2dldENoaWxkQnlOYW1lJyk7XG5yZXF1aXJlKCcuL2dldEdsb2JhbFBvc2l0aW9uJyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmV4dHJhc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNb3ZpZUNsaXA6ICAgICAgcmVxdWlyZSgnLi9Nb3ZpZUNsaXAnKSxcbiAgICBUaWxpbmdTcHJpdGU6ICAgcmVxdWlyZSgnLi9UaWxpbmdTcHJpdGUnKSxcbiAgICBCaXRtYXBUZXh0OiAgICAgcmVxdWlyZSgnLi9CaXRtYXBUZXh0Jylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGUgWSBpcyBmbGlwcGVkIGluIHRoaXMgc2hhZGVyIGZvciBzb21lIHJlYXNvbi5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgc2hhZGVyIDogaHR0cHM6Ly93d3cuc2hhZGVydG95LmNvbS92aWV3L2xzc0dEaiBieSBAbW92QVgxM2hcbiAqL1xuXG4vKipcbiAqIEFuIEFTQ0lJIGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQXNjaWlGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gZmxvYXQgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IGNoYXJhY3RlcihmbG9hdCBuLCB2ZWMyIHApXFxue1xcbiAgICBwID0gZmxvb3IocCp2ZWMyKDQuMCwgLTQuMCkgKyAyLjUpO1xcbiAgICBpZiAoY2xhbXAocC54LCAwLjAsIDQuMCkgPT0gcC54ICYmIGNsYW1wKHAueSwgMC4wLCA0LjApID09IHAueSlcXG4gICAge1xcbiAgICAgICAgaWYgKGludChtb2Qobi9leHAyKHAueCArIDUuMCpwLnkpLCAyLjApKSA9PSAxKSByZXR1cm4gMS4wO1xcbiAgICB9XFxuICAgIHJldHVybiAwLjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5O1xcblxcbiAgICB2ZWMzIGNvbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgZmxvb3IoIHV2IC8gcGl4ZWxTaXplICkgKiBwaXhlbFNpemUgLyBkaW1lbnNpb25zLnh5KS5yZ2I7XFxuXFxuICAgIGZsb2F0IGdyYXkgPSAoY29sLnIgKyBjb2wuZyArIGNvbC5iKSAvIDMuMDtcXG5cXG4gICAgZmxvYXQgbiA9ICA2NTUzNi4wOyAgICAgICAgICAgICAvLyAuXFxuICAgIGlmIChncmF5ID4gMC4yKSBuID0gNjU2MDAuMDsgICAgLy8gOlxcbiAgICBpZiAoZ3JheSA+IDAuMykgbiA9IDMzMjc3Mi4wOyAgIC8vICpcXG4gICAgaWYgKGdyYXkgPiAwLjQpIG4gPSAxNTI1NTA4Ni4wOyAvLyBvXFxuICAgIGlmIChncmF5ID4gMC41KSBuID0gMjMzODUxNjQuMDsgLy8gJlxcbiAgICBpZiAoZ3JheSA+IDAuNikgbiA9IDE1MjUyMDE0LjA7IC8vIDhcXG4gICAgaWYgKGdyYXkgPiAwLjcpIG4gPSAxMzE5OTQ1Mi4wOyAvLyBAXFxuICAgIGlmIChncmF5ID4gMC44KSBuID0gMTE1MTI4MTAuMDsgLy8gI1xcblxcbiAgICB2ZWMyIHAgPSBtb2QoIHV2IC8gKCBwaXhlbFNpemUgKiAwLjUgKSwgMi4wKSAtIHZlYzIoMS4wKTtcXG4gICAgY29sID0gY29sICogY2hhcmFjdGVyKG4sIHApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbCwgMS4wKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiA4IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkFzY2lpRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQXNjaWlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXNjaWlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFzY2lpRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBc2NpaUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGl4ZWwgc2l6ZSB1c2VkIGJ5IHRoZSBmaWx0ZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Bc2NpaUZpbHRlciNcbiAgICAgKi9cbiAgICBzaXplOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsb29tRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsb29tRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlciA9IG5ldyBCbHVyWUZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcbn1cblxuQmxvb21GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbG9vbUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbG9vbUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxvb21GaWx0ZXI7XG5cbkJsb29tRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAvL1RPRE8gLSBjb3B5VGV4U3ViSW1hZ2UyRCBjb3VsZCBiZSB1c2VkIGhlcmU/XG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5TQ1JFRU4pO1xuXG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsb29tRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cblxuLyoqXG4gKiBUaGUgQmx1ckRpckZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0b3dhcmQgYSBkaXJlY3Rpb24gdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpclhcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJZXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJEaXJGaWx0ZXIoZGlyWCwgZGlyWSlcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gZmxvYXQgZGlyWDtcXG51bmlmb3JtIGZsb2F0IGRpclk7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbM107XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWSApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApICogMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pICogMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pICogMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSAqIDAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgZGlyWDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogZGlyWCB8fCAwIH0sXG4gICAgICAgICAgICBkaXJZOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJZIHx8IDAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWCBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJYID0gZGlyWCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWSBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJZID0gZGlyWSB8fCAwO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJEaXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJEaXJGaWx0ZXI7XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcikge1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZiAodGhpcy5wYXNzZXMgPT09IDEpIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCByZW5kZXJUYXJnZXQsIGNsZWFyKTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMjsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL3RoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvICh0aGlzLnBhc3NlcysoaSoyKSkgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCByZW5kZXJUYXJnZXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IHZhbHVlICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBkaXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyWDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZGlyWC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJZO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJZLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWUZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBCbHVyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG59XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJGaWx0ZXI7XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHBhc3Nlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5ibHVyWEZpbHRlci5wYXNzZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcyA9IHRoaXMuYmx1cllGaWx0ZXIucGFzc2VzID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1clhGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJYRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAxMiAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwNCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuXFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1clhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1clhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJYRmlsdGVyO1xuXG5CbHVyWEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1clhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJYRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gIE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJZRmlsdGVyIGFwcGxpZXMgYSBob3Jpem9udGFsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAxMiAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDEyICogc3RyZW5ndGgpO1xcblxcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJZRmlsdGVyO1xuXG5CbHVyWUZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gTWF0aC5hYnModGhpcy5zdHJlbmd0aCkgLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIFNtYXJ0IEJsdXIgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTbWFydEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgKiBwZXJjZW50KTtcXG4gICAgICAgIHNhbXBsZS5yZ2IgKj0gc2FtcGxlLmE7XFxuICAgICAgICBjb2xvciArPSBzYW1wbGUgKiB3ZWlnaHQ7XFxuICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgLyB0b3RhbDtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAvPSBnbF9GcmFnQ29sb3IuYSArIDAuMDAwMDE7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgZGVsdGE6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC4xLCB5OiAwLjAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU21hcnRCbHVyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTbWFydEJsdXJGaWx0ZXI7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA1eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIGBgYGpzXG4gKiAgdmFyIGNvbG9yTWF0cml4ID0gbmV3IFBJWEkuQ29sb3JNYXRyaXhGaWx0ZXIoKTtcbiAqICBjb250YWluZXIuZmlsdGVycyA9IFtjb2xvck1hdHJpeF07XG4gKiAgY29sb3JNYXRyaXguY29udHJhc3QoMik7XG4gKiBgYGBcbiAqIEBhdXRob3IgQ2zDqW1lbnQgQ2hlbmViYXVsdCA8Y2xlbWVudEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ29sb3JNYXRyaXhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgbVsyNV07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcblxcbiAgICB2ZWM0IGMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IuciA9IChtWzBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzJdICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IG1bNF07XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5nID0gKG1bNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bN10gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gbVs5XTtcXG5cXG4gICAgIGdsX0ZyYWdDb2xvci5iID0gKG1bMTBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzExXSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IG1bMTRdO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmEgPSAobVsxNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTZdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gbVsxOV07XFxuXFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICcxZnYnLCB2YWx1ZTogW1xuICAgICAgICAgICAgICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvck1hdHJpeEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JNYXRyaXhGaWx0ZXI7XG5cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGN1cnJlbnQgbWF0cml4IGFuZCBzZXQgdGhlIG5ldyBvbmVcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IGlmIHRydWUsIGN1cnJlbnQgbWF0cml4IGFuZCBtYXRyaXggYXJlIG11bHRpcGxpZWQuIElmIGZhbHNlLCBqdXN0IHNldCB0aGUgY3VycmVudCBtYXRyaXggd2l0aCBAcGFyYW0gbWF0cml4XG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fbG9hZE1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgsIG11bHRpcGx5KVxue1xuICAgIG11bHRpcGx5ID0gISFtdWx0aXBseTtcblxuICAgIHZhciBuZXdNYXRyaXggPSBtYXRyaXg7XG5cbiAgICBpZiAobXVsdGlwbHkpIHtcbiAgICAgICAgdGhpcy5fbXVsdGlwbHkobmV3TWF0cml4LCB0aGlzLnVuaWZvcm1zLm0udmFsdWUsIG1hdHJpeCk7XG4gICAgICAgIG5ld01hdHJpeCA9IHRoaXMuX2NvbG9yTWF0cml4KG5ld01hdHJpeCk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgbWF0cml4XG4gICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gbmV3TWF0cml4O1xufTtcblxuLyoqXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQ1J3NcbiAqXG4gKiBAcGFyYW0gb3V0IHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0gYSB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIGIge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyBvdXQge251bWJlcltdfSAobWF0IDV4NClcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpXG57XG5cbiAgICAvLyBSZWQgQ2hhbm5lbFxuICAgIG91dFswXSA9IChhWzBdICogYlswXSkgKyAoYVsxXSAqIGJbNV0pICsgKGFbMl0gKiBiWzEwXSkgKyAoYVszXSAqIGJbMTVdKTtcbiAgICBvdXRbMV0gPSAoYVswXSAqIGJbMV0pICsgKGFbMV0gKiBiWzZdKSArIChhWzJdICogYlsxMV0pICsgKGFbM10gKiBiWzE2XSk7XG4gICAgb3V0WzJdID0gKGFbMF0gKiBiWzJdKSArIChhWzFdICogYls3XSkgKyAoYVsyXSAqIGJbMTJdKSArIChhWzNdICogYlsxN10pO1xuICAgIG91dFszXSA9IChhWzBdICogYlszXSkgKyAoYVsxXSAqIGJbOF0pICsgKGFbMl0gKiBiWzEzXSkgKyAoYVszXSAqIGJbMThdKTtcbiAgICBvdXRbNF0gPSAoYVswXSAqIGJbNF0pICsgKGFbMV0gKiBiWzldKSArIChhWzJdICogYlsxNF0pICsgKGFbM10gKiBiWzE5XSk7XG5cbiAgICAvLyBHcmVlbiBDaGFubmVsXG4gICAgb3V0WzVdID0gKGFbNV0gKiBiWzBdKSArIChhWzZdICogYls1XSkgKyAoYVs3XSAqIGJbMTBdKSArIChhWzhdICogYlsxNV0pO1xuICAgIG91dFs2XSA9IChhWzVdICogYlsxXSkgKyAoYVs2XSAqIGJbNl0pICsgKGFbN10gKiBiWzExXSkgKyAoYVs4XSAqIGJbMTZdKTtcbiAgICBvdXRbN10gPSAoYVs1XSAqIGJbMl0pICsgKGFbNl0gKiBiWzddKSArIChhWzddICogYlsxMl0pICsgKGFbOF0gKiBiWzE3XSk7XG4gICAgb3V0WzhdID0gKGFbNV0gKiBiWzNdKSArIChhWzZdICogYls4XSkgKyAoYVs3XSAqIGJbMTNdKSArIChhWzhdICogYlsxOF0pO1xuICAgIG91dFs5XSA9IChhWzVdICogYls0XSkgKyAoYVs2XSAqIGJbOV0pICsgKGFbN10gKiBiWzE0XSkgKyAoYVs4XSAqIGJbMTldKTtcblxuICAgIC8vIEJsdWUgQ2hhbm5lbFxuICAgIG91dFsxMF0gPSAoYVsxMF0gKiBiWzBdKSArIChhWzExXSAqIGJbNV0pICsgKGFbMTJdICogYlsxMF0pICsgKGFbMTNdICogYlsxNV0pO1xuICAgIG91dFsxMV0gPSAoYVsxMF0gKiBiWzFdKSArIChhWzExXSAqIGJbNl0pICsgKGFbMTJdICogYlsxMV0pICsgKGFbMTNdICogYlsxNl0pO1xuICAgIG91dFsxMl0gPSAoYVsxMF0gKiBiWzJdKSArIChhWzExXSAqIGJbN10pICsgKGFbMTJdICogYlsxMl0pICsgKGFbMTNdICogYlsxN10pO1xuICAgIG91dFsxM10gPSAoYVsxMF0gKiBiWzNdKSArIChhWzExXSAqIGJbOF0pICsgKGFbMTJdICogYlsxM10pICsgKGFbMTNdICogYlsxOF0pO1xuICAgIG91dFsxNF0gPSAoYVsxMF0gKiBiWzRdKSArIChhWzExXSAqIGJbOV0pICsgKGFbMTJdICogYlsxNF0pICsgKGFbMTNdICogYlsxOV0pO1xuXG4gICAgLy8gQWxwaGEgQ2hhbm5lbFxuICAgIG91dFsxNV0gPSAoYVsxNV0gKiBiWzBdKSArIChhWzE2XSAqIGJbNV0pICsgKGFbMTddICogYlsxMF0pICsgKGFbMThdICogYlsxNV0pO1xuICAgIG91dFsxNl0gPSAoYVsxNV0gKiBiWzFdKSArIChhWzE2XSAqIGJbNl0pICsgKGFbMTddICogYlsxMV0pICsgKGFbMThdICogYlsxNl0pO1xuICAgIG91dFsxN10gPSAoYVsxNV0gKiBiWzJdKSArIChhWzE2XSAqIGJbN10pICsgKGFbMTddICogYlsxMl0pICsgKGFbMThdICogYlsxN10pO1xuICAgIG91dFsxOF0gPSAoYVsxNV0gKiBiWzNdKSArIChhWzE2XSAqIGJbOF0pICsgKGFbMTddICogYlsxM10pICsgKGFbMThdICogYlsxOF0pO1xuICAgIG91dFsxOV0gPSAoYVsxNV0gKiBiWzRdKSArIChhWzE2XSAqIGJbOV0pICsgKGFbMTddICogYlsxNF0pICsgKGFbMThdICogYlsxOV0pO1xuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEByZXR1cm4gbSB7bnVtYmVyW119IChtYXQgNXg0KSB3aXRoIGFsbCB2YWx1ZXMgYmV0d2VlbiAwLTFcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9jb2xvck1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgLy8gQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICAgIHZhciBtID0gbmV3IEZsb2F0MzJBcnJheShtYXRyaXgpO1xuICAgIG1bNF0gLz0gMjU1O1xuICAgIG1bOV0gLz0gMjU1O1xuICAgIG1bMTRdIC89IDI1NTtcbiAgICBtWzE5XSAvPSAyNTU7XG5cbiAgICByZXR1cm4gbTtcbn07XG5cbi8qKlxuICogQWRqdXN0cyBicmlnaHRuZXNzXG4gKlxuICogQHBhcmFtIGIge251bWJlcn0gdmFsdWUgb2YgdGhlIGJyaWd0aG5lc3MgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJpZ2h0bmVzcyA9IGZ1bmN0aW9uIChiLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBiLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCBiLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCBiLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgbWF0cmljZXMgaW4gZ3JleSBzY2FsZXNcbiAqXG4gKiBAcGFyYW0gc2NhbGUge251bWJlcn0gdmFsdWUgb2YgdGhlIGdyZXkgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlID0gZnVuY3Rpb24gKHNjYWxlLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuLy9BbWVyaWNhbml6ZWQgYWxpYXNcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmF5c2NhbGUgPSBDb2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlO1xuXG4vKipcbiAqIFNldCB0aGUgYmxhY2sgYW5kIHdoaXRlIG1hdHJpY2VcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ibGFja0FuZFdoaXRlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBodWUgcHJvcGVydHkgb2YgdGhlIGNvbG9yXG4gKlxuICogQHBhcmFtIHJvdGF0aW9uIHtudW1iZXJ9IGluIGRlZ3JlZXNcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5odWUgPSBmdW5jdGlvbiAocm90YXRpb24sIG11bHRpcGx5KVxue1xuICAgIHJvdGF0aW9uID0gKHJvdGF0aW9uIHx8IDApIC8gMTgwICogTWF0aC5QSTtcbiAgICB2YXIgY29zID0gTWF0aC5jb3Mocm90YXRpb24pLFxuICAgICAgICBzaW4gPSBNYXRoLnNpbihyb3RhdGlvbik7XG5cbiAgICAvLyBsdW1pbmFuY2VSZWQsIGx1bWluYW5jZUdyZWVuLCBsdW1pbmFuY2VCbHVlXG4gICAgdmFyIGx1bVIgPSAwLjIxMywgLy8gb3IgMC4zMDg2XG4gICAgICAgIGx1bUcgPSAwLjcxNSwgLy8gb3IgMC42MDk0XG4gICAgICAgIGx1bUIgPSAwLjA3MjsgLy8gb3IgMC4wODIwXG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBsdW1SICsgY29zICogKDEgLSBsdW1SKSArIHNpbiAqICgtbHVtUiksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKC1sdW1HKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoMSAtIGx1bUIpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgwLjE0MyksIGx1bUcgKyBjb3MgKiAoMSAtIGx1bUcpICsgc2luICogKDAuMTQwKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoLTAuMjgzKSwgMCwgMCxcbiAgICAgICAgbHVtUiArIGNvcyAqICgtbHVtUikgKyBzaW4gKiAoLSgxIC0gbHVtUikpLCBsdW1HICsgY29zICogKC1sdW1HKSArIHNpbiAqIChsdW1HKSwgbHVtQiArIGNvcyAqICgxIC0gbHVtQikgKyBzaW4gKiAobHVtQiksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLyoqXG4gKiBTZXQgdGhlIGNvbnRyYXN0IG1hdHJpeCwgaW5jcmVhc2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBkYXJrIGFuZCBicmlnaHRcbiAqIEluY3JlYXNlIGNvbnRyYXN0IDogc2hhZG93cyBkYXJrZXIgYW5kIGhpZ2hsaWdodHMgYnJpZ2h0ZXJcbiAqIERlY3JlYXNlIGNvbnRyYXN0IDogYnJpbmcgdGhlIHNoYWRvd3MgdXAgYW5kIHRoZSBoaWdobGlnaHRzIGRvd25cbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBjb250cmFzdFxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbnRyYXN0ID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHYgPSAoYW1vdW50IHx8IDApICsgMTtcbiAgICB2YXIgbyA9IC0xMjggKiAodiAtIDEpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgdiwgMCwgMCwgMCwgbyxcbiAgICAgICAgMCwgdiwgMCwgMCwgbyxcbiAgICAgICAgMCwgMCwgdiwgMCwgbyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHNhdHVyYXRpb24gbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGNvbG9yc1xuICogSW5jcmVhc2Ugc2F0dXJhdGlvbiA6IGluY3JlYXNlIGNvbnRyYXN0LCBicmlnaHRuZXNzLCBhbmQgc2hhcnBuZXNzXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNhdHVyYXRlID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHggPSAoYW1vdW50IHx8IDApICogMiAvIDMgKyAxO1xuICAgIHZhciB5ID0gKCh4IC0gMSkgKiAtMC41KTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHgsIHksIHksIDAsIDAsXG4gICAgICAgIHksIHgsIHksIDAsIDAsXG4gICAgICAgIHksIHksIHgsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRGVzYXR1cmF0ZSBpbWFnZSAocmVtb3ZlIGNvbG9yKVxuICpcbiAqIENhbGwgdGhlIHNhdHVyYXRlIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmRlc2F0dXJhdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICB0aGlzLnNhdHVyYXRlKC0xKTtcbn07XG5cbi8qKlxuICogTmVnYXRpdmUgaW1hZ2UgKGludmVyc2Ugb2YgY2xhc3NpYyByZ2IgbWF0cml4KVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uZWdhdGl2ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAxLCAxLCAwLCAwLFxuICAgICAgICAxLCAwLCAxLCAwLCAwLFxuICAgICAgICAxLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNlcGlhIGltYWdlXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNlcGlhID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMzkzLCAwLjc2ODk5OTksIDAuMTg4OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMzQ5LCAwLjY4NTk5OTksIDAuMTY3OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMjcyLCAwLjUzMzk5OTksIDAuMTMwOTk5OTksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgbW90aW9uIHBpY3R1cmUgcHJvY2VzcyBpbnZlbnRlZCBpbiAxOTE2ICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50ZWNobmljb2xvciA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjkxMjUyNzc4OTE0NTYwODMsIC0wLjg1NDUzNDQ5NzY5NTE2NDUsIC0wLjA5MTU1NTA4NDgyNzU1NTg1LCAwLCAxMS43OTM2MDM0MzQzNzczMzcsXG4gICAgICAgIC0wLjMwODc4MzMzODU5MjgwOTcsIDEuNzY1ODkwODU1NTQ1ODQyOCwgLTAuMTA2MDE3NDMwNzQ3MjIyNDUsIDAsIC03MC4zNTIwNTE2MTQ2MTM5OCxcbiAgICAgICAgLTAuMjMxMTAzMzc3NTQ4NjE2LCAtMC43NTAxODk5MTk3NDQwMjEyLCAxLjg0NzU5NzgxNjEwODE4OSwgMCwgMzAuOTUwOTQwODY5NDkxMTM4LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFBvbGFyb2lkIGZpbHRlclxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wb2xhcm9pZCA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjQzOCwgLTAuMDYyLCAtMC4wNjIsIDAsIDAsXG4gICAgICAgIC0wLjEyMiwgMS4zNzgsIC0wLjEyMiwgMCwgMCxcbiAgICAgICAgLTAuMDE2LCAtMC4wMTYsIDEuNDgzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEZpbHRlciB3aG8gdHJhbnNmb3JtcyA6IFJlZCAtPiBCbHVlIGFuZCBCbHVlIC0+IFJlZFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50b0JHUiA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIENvbG9yIHJldmVyc2FsIGZpbG0gaW50cm9kdWNlZCBieSBFYXN0bWFuIEtvZGFrIGluIDE5MzUuICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5rb2RhY2hyb21lID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuMTI4NTU4MjM5NjU5MzUyNSwgLTAuMzk2NzM4MjI4MzYwMTM0OCwgLTAuMDM5OTI1NTkxNzI5MjE3OTMsIDAsIDYzLjcyOTU4NzYyMTk2NTAyLFxuICAgICAgICAtMC4xNjQwNDMzOTk2MjI0NDYxNiwgMS4wODM1MjUxNTY2MjkxMzA0LCAtMC4wNTQ5ODgwNTExNTYzMzEzMiwgMCwgMjQuNzMyNDA3ODk2NzA2MjAzLFxuICAgICAgICAtMC4xNjc4NjAxMDcwNjE1NTc2MywgLTAuNTYwMzQxNjI3NzY5NTI0OCwgMS42MDE0ODUwNzYxOTY0OTQzLCAwLCAzNS42Mjk4MjgwNzQ2MDk0NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBCcm93biBkZWxpY2lvdXMgYnJvd25pIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJvd25pID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNTk5NzAyMzQ5ODE1OTcxNSwgMC4zNDU1MzI0MzA0ODM5MTI2MywgLTAuMjcwODI5ODY3NDUzODA0MiwgMCwgNDcuNDMxOTI4NTU2MDA4NzMsXG4gICAgICAgIC0wLjAzNzcwMzI0OTgzNzc4MzE1NywgMC44NjA5NTc3NTg3OTkyNjQxLCAwLjE1MDU5NTUyMzg4NDU5OTEzLCAwLCAtMzYuOTY4NDE0OTgzMTkxMjcsXG4gICAgICAgIDAuMjQxMTM2MzUxMjgxNTMzMzUsIC0wLjA3NDQxMDM3OTA4NDIyNDkyLCAwLjQ0OTcyMTgyMDY0ODc3MTUzLCAwLCAtNy41NjIwNzUyNzc1OTEyODMsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBWaW50YWdlIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudmludGFnZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjYyNzkzNDU2MzU2MDU5OTQsIDAuMzIwMjE4MzQyMDgxOTM2NywgLTAuMDM5NjU0MDgyMTEzMTI0NTMsIDAsIDkuNjUxMjg1ODM1Mjk0MTIzLFxuICAgICAgICAwLjAyNTc4Mzk3NzA0ODA4ODY4LCAwLjY0NDExODg2NDQzNzQ3NzEsIDAuMDMyNTkxMjc2MTYxNDkyOTQsIDAsIDcuNDYyODI5MTc2NDcwNTkxLFxuICAgICAgICAwLjA0NjYwNTU1NTY3ODI3MTksIC0wLjA4NTEyMzI5ODcyNDc4OTEsIDAuNTI0MTY0ODAxODcwMDQ2NSwgMCwgNS4xNTkxOTA1ODgyMzUyOTYsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBXZSBkb24ndCBrbm93IGV4YWN0bHkgd2hhdCBpdCBkb2VzLCBraW5kIG9mIGdyYWRpZW50IG1hcCwgYnV0IGZ1bm55IHRvIHBsYXkgd2l0aCFcbiAqXG4gKiBAcGFyYW0gZGVzYXR1cmF0aW9uIHtudW1iZXJ9XG4gKiBAcGFyYW0gdG9uZWQge251bWJlcn1cbiAqIEBwYXJhbSBsaWdodENvbG9yIHtzdHJpbmd9IChleGFtcGxlIDogXCIweEZGRTU4MFwiKVxuICogQHBhcmFtIGRhcmtDb2xvciB7c3RyaW5nfSAgKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbG9yVG9uZSA9IGZ1bmN0aW9uIChkZXNhdHVyYXRpb24sIHRvbmVkLCBsaWdodENvbG9yLCBkYXJrQ29sb3IsIG11bHRpcGx5KVxue1xuICAgIGRlc2F0dXJhdGlvbiA9IGRlc2F0dXJhdGlvbiB8fCAwLjI7XG4gICAgdG9uZWQgPSB0b25lZCB8fCAwLjE1O1xuICAgIGxpZ2h0Q29sb3IgPSBsaWdodENvbG9yIHx8IDB4RkZFNTgwO1xuICAgIGRhcmtDb2xvciA9IGRhcmtDb2xvciB8fCAweDMzODAwMDtcblxuICAgIHZhciBsUiA9ICgobGlnaHRDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEcgPSAoKGxpZ2h0Q29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEIgPSAobGlnaHRDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgdmFyIGRSID0gKChkYXJrQ29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGRHID0gKChkYXJrQ29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEIgPSAoZGFya0NvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjMsIDAuNTksIDAuMTEsIDAsIDAsXG4gICAgICAgIGxSLCBsRywgbEIsIGRlc2F0dXJhdGlvbiwgMCxcbiAgICAgICAgZFIsIGRHLCBkQiwgdG9uZWQsIDAsXG4gICAgICAgIGxSIC0gZFIsIGxHIC0gZEcsIGxCIC0gZEIsIDAsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBOaWdodCBlZmZlY3RcbiAqXG4gKiBAcGFyYW0gaW50ZW5zaXR5IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubmlnaHQgPSBmdW5jdGlvbiAoaW50ZW5zaXR5LCBtdWx0aXBseSlcbntcbiAgICBpbnRlbnNpdHkgPSBpbnRlbnNpdHkgfHwgMC4xO1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGludGVuc2l0eSAqICggLTIuMCksIC1pbnRlbnNpdHksIDAsIDAsIDAsXG4gICAgICAgIC1pbnRlbnNpdHksIDAsIGludGVuc2l0eSwgMCwgMCxcbiAgICAgICAgMCwgaW50ZW5zaXR5LCBpbnRlbnNpdHkgKiAyLjAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLypcbiAqIFByZWRhdG9yIGVmZmVjdFxuICpcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIGEgbmV3IGluZGVwZW50IG9uZVxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gaG93IG11Y2ggdGhlIHByZWRhdG9yIGZlZWxzIGhpcyBmdXR1cmUgdmljdGltXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucHJlZGF0b3IgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxMS4yMjQxMzA2MzA0OTMxNjQgKiBhbW91bnQsIC00Ljc5NDQ4Njk5OTUxMTcxOSAqIGFtb3VudCwgLTIuODc0NjExODU0NTUzMjIyNyAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC40MDM0MjQzODIyMDk3Nzc4MyAqIGFtb3VudCxcbiAgICAgICAgLTMuNjMzMDY5NzUzNjQ2ODUwNiAqIGFtb3VudCwgOS4xOTMxNTcxOTYwNDQ5MjIgKiBhbW91bnQsIC0yLjk1MTgxMDgzNjc5MTk5MiAqIGFtb3VudCwgMCAqIGFtb3VudCwgLTEuMzE2MTM1MDQ4ODY2MjcyICogYW1vdW50LFxuICAgICAgICAtMy4yMTg0MTk3OTAyNjc5NDQzICogYW1vdW50LCAtNC4yMzc1MDMwNTE3NTc4MTI1ICogYW1vdW50LCA3LjQ3NjQ0ODA1OTA4MjAzMSAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC44MDQ0NDU5MjIzNzQ3MjUzICogYW1vdW50LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogTFNEIGVmZmVjdFxuICpcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gSG93IGNyYXp5IGlzIHlvdXIgZWZmZWN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubHNkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDIsIC0wLjQsIDAuNSwgMCwgMCxcbiAgICAgICAgLTAuNSwgMiwgLTAuNCwgMCwgMCxcbiAgICAgICAgLTAuNCwgLTAuNSwgMywgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIHRoZSBkZWZhdWx0IG9uZVxuICpcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBmYWxzZSk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hdHJpeCBvZiB0aGUgY29sb3IgbWF0cml4IGZpbHRlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvck1hdHJpeEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCBbMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMF1cbiAgICAgKi9cbiAgICBtYXRyaXg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgbG93ZXJzIHRoZSBjb2xvciBkZXB0aCBvZiB5b3VyIGltYWdlIGJ5IHRoZSBnaXZlbiBhbW91bnQsIHByb2R1Y2luZyBhbiBpbWFnZSB3aXRoIGEgc21hbGxlciBwYWxldHRlLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvclN0ZXBGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc3RlcDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBjb2xvciA9IGZsb29yKGNvbG9yICogc3RlcCkgLyBzdGVwO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdGVwOiB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvclN0ZXBGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yU3RlcEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2Ygc3RlcHMgdG8gcmVkdWNlIHRoZSBwYWxldHRlIGJ5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29sb3JTdGVwRmlsdGVyI1xuICAgICAqL1xuICAgIHN0ZXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb252b2x1dGlvbkZpbHRlciBjbGFzcyBhcHBsaWVzIGEgbWF0cml4IGNvbnZvbHV0aW9uIGZpbHRlciBlZmZlY3QuXG4gKiBBIGNvbnZvbHV0aW9uIGNvbWJpbmVzIHBpeGVscyBpbiB0aGUgaW5wdXQgaW1hZ2Ugd2l0aCBuZWlnaGJvcmluZyBwaXhlbHMgdG8gcHJvZHVjZSBhIG5ldyBpbWFnZS5cbiAqIEEgd2lkZSB2YXJpZXR5IG9mIGltYWdlIGVmZmVjdHMgY2FuIGJlIGFjaGlldmVkIHRocm91Z2ggY29udm9sdXRpb25zLCBpbmNsdWRpbmcgYmx1cnJpbmcsIGVkZ2VcbiAqIGRldGVjdGlvbiwgc2hhcnBlbmluZywgZW1ib3NzaW5nLCBhbmQgYmV2ZWxpbmcuIFRoZSBtYXRyaXggc2hvdWxkIGJlIHNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBTZWUgaHR0cDovL2RvY3MuZ2ltcC5vcmcvZW4vcGx1Zy1pbi1jb252bWF0cml4Lmh0bWwgZm9yIG1vcmUgaW5mby5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSBBbiBhcnJheSBvZiB2YWx1ZXMgdXNlZCBmb3IgbWF0cml4IHRyYW5zZm9ybWF0aW9uLiBTcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFdpZHRoIG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqL1xuZnVuY3Rpb24gQ29udm9sdXRpb25GaWx0ZXIobWF0cml4LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgbWVkaXVtcCB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTtcXG51bmlmb3JtIGZsb2F0IG1hdHJpeFs5XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjNCBjMTEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgLSB0ZXhlbFNpemUpOyAvLyB0b3AgbGVmdFxcbiAgIHZlYzQgYzEyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55IC0gdGV4ZWxTaXplLnkpKTsgLy8gdG9wIGNlbnRlclxcbiAgIHZlYzQgYzEzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgcmlnaHRcXG5cXG4gICB2ZWM0IGMyMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCBsZWZ0XFxuICAgdmVjNCBjMjIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpOyAvLyBtaWQgY2VudGVyXFxuICAgdmVjNCBjMjMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSkpOyAvLyBtaWQgcmlnaHRcXG5cXG4gICB2ZWM0IGMzMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGxlZnRcXG4gICB2ZWM0IGMzMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLngsIHZUZXh0dXJlQ29vcmQueSArIHRleGVsU2l6ZS55KSk7IC8vIGJvdHRvbSBjZW50ZXJcXG4gICB2ZWM0IGMzMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIHRleGVsU2l6ZSk7IC8vIGJvdHRvbSByaWdodFxcblxcbiAgIGdsX0ZyYWdDb2xvciA9XFxuICAgICAgIGMxMSAqIG1hdHJpeFswXSArIGMxMiAqIG1hdHJpeFsxXSArIGMxMyAqIG1hdHJpeFsyXSArXFxuICAgICAgIGMyMSAqIG1hdHJpeFszXSArIGMyMiAqIG1hdHJpeFs0XSArIGMyMyAqIG1hdHJpeFs1XSArXFxuICAgICAgIGMzMSAqIG1hdHJpeFs2XSArIGMzMiAqIG1hdHJpeFs3XSArIGMzMyAqIG1hdHJpeFs4XTtcXG5cXG4gICBnbF9GcmFnQ29sb3IuYSA9IGMyMi5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hdHJpeDogICAgIHsgdHlwZTogJzFmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCkgfSxcbiAgICAgICAgICAgIHRleGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSAvIHdpZHRoLCB5OiAxIC8gaGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb252b2x1dGlvbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29udm9sdXRpb25GaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hdHJpeC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMS90aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueCA9IDEvdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS55ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQSBDcm9zcyBIYXRjaCBlZmZlY3QgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDcm9zc0hhdGNoRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGZsb2F0IGx1bSA9IGxlbmd0aCh0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQueHkpLnJnYik7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wLCAxLjAsIDEuMCwgMS4wKTtcXG5cXG4gICAgaWYgKGx1bSA8IDEuMDApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC43NSlcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjUwKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54ICsgZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuMylcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55IC0gNS4wLCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblwiXG4gICAgKTtcbn1cblxuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNyb3NzSGF0Y2hGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBEaXNwbGFjZW1lbnRGaWx0ZXIgY2xhc3MgdXNlcyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20gdGhlIHNwZWNpZmllZCB0ZXh0dXJlIChjYWxsZWQgdGhlIGRpc3BsYWNlbWVudCBtYXApIHRvIHBlcmZvcm0gYSBkaXNwbGFjZW1lbnQgb2YgYW4gb2JqZWN0LlxuICogWW91IGNhbiB1c2UgdGhpcyBmaWx0ZXIgdG8gYXBwbHkgYWxsIG1hbm9yIG9mIGNyYXp5IHdhcnBpbmcgZWZmZWN0c1xuICogQ3VycmVudGx5IHRoZSByIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB4IGFuZCB0aGUgZyBwcm9wZXJ0eSBvZiB0aGUgdGV4dHVyZSBpcyB1c2VkIHRvIG9mZnNldCB0aGUgeS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiAobWFrZSBzdXJlIGl0cyBhZGRlZCB0byB0aGUgc2NlbmUhKVxuICovXG5mdW5jdGlvbiBEaXNwbGFjZW1lbnRGaWx0ZXIoc3ByaXRlLCBzY2FsZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuICAgIHNwcml0ZS5yZW5kZXJhYmxlID0gZmFsc2U7XG5cbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2TWFwQ29vcmQgPSAoIG90aGVyTWF0cml4ICogdmVjMyggYVRleHR1cmVDb29yZCwgMS4wKSAgKS54eTtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMiBzY2FsZTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXBTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IG1hcCA9ICB0ZXh0dXJlMkQobWFwU2FtcGxlciwgdk1hcENvb3JkKTtcXG5cXG4gICBtYXAgLT0gMC41O1xcbiAgIG1hcC54eSAqPSBzY2FsZTtcXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgbWFwLngsIHZUZXh0dXJlQ29vcmQueSArIG1hcC55KSk7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtYXBTYW1wbGVyOiAgICAgeyB0eXBlOiAnc2FtcGxlcjJEJywgdmFsdWU6IHNwcml0ZS50ZXh0dXJlIH0sXG4gICAgICAgICAgICBvdGhlck1hdHJpeDogICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBtYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSkgfSxcbiAgICAgICAgICAgIHNjYWxlOiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG5cbiAgICBpZiAoc2NhbGUgPT09IG51bGwgfHwgc2NhbGUgPT09IHVuZGVmaW5lZClcbiAgICB7XG4gICAgICAgIHNjYWxlID0gMjA7XG4gICAgfVxuXG4gICAgdGhpcy5zY2FsZSA9IG5ldyBjb3JlLlBvaW50KHNjYWxlLCBzY2FsZSk7XG59XG5cbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGFjZW1lbnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERpc3BsYWNlbWVudEZpbHRlcjtcblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICBmaWx0ZXJNYW5hZ2VyLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeChpbnB1dC5mcmFtZSwgdGhpcy5tYXNrU3ByaXRlLCB0aGlzLm1hc2tNYXRyaXgpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5vdGhlck1hdHJpeC52YWx1ZSA9IHRoaXMubWFza01hdHJpeC50b0FycmF5KHRydWUpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueCA9IHRoaXMuc2NhbGUueCAqICgxL2lucHV0LmZyYW1lLndpZHRoKTtcbiAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlLnkgPSB0aGlzLnNjYWxlLnkgKiAoMS9pbnB1dC5mcmFtZS5oZWlnaHQpO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRGlzcGxhY2VtZW50RmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvZnVuL2RvdHNjcmVlbi5qc1xuICovXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIGRvdHNjcmVlbiBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgdG8gYmUgbWFkZSBvdXQgb2ZcbiAqIGJsYWNrIGFuZCB3aGl0ZSBoYWxmdG9uZSBkb3RzIGxpa2UgYW4gb2xkIHByaW50ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIERvdFNjcmVlbkZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XFxuXFxuZmxvYXQgcGF0dGVybigpXFxue1xcbiAgIGZsb2F0IHMgPSBzaW4oYW5nbGUpLCBjID0gY29zKGFuZ2xlKTtcXG4gICB2ZWMyIHRleCA9IHZUZXh0dXJlQ29vcmQgKiBkaW1lbnNpb25zLnh5O1xcbiAgIHZlYzIgcG9pbnQgPSB2ZWMyKFxcbiAgICAgICBjICogdGV4LnggLSBzICogdGV4LnksXFxuICAgICAgIHMgKiB0ZXgueCArIGMgKiB0ZXgueVxcbiAgICkgKiBzY2FsZTtcXG4gICByZXR1cm4gKHNpbihwb2ludC54KSAqIHNpbihwb2ludC55KSkgKiA0LjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGZsb2F0IGF2ZXJhZ2UgPSAoY29sb3IuciArIGNvbG9yLmcgKyBjb2xvci5iKSAvIDMuMDtcXG4gICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzMoYXZlcmFnZSAqIDEwLjAgLSA1LjAgKyBwYXR0ZXJuKCkpLCBjb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzY2FsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEb3RTY3JlZW5GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERvdFNjcmVlbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBzY2FsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSByYWRpdXMgb2YgdGhlIGVmZmVjdC5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Eb3RTY3JlZW5GaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllUaW50RmlsdGVyIGFwcGxpZXMgYSB2ZXJ0aWNhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1cllUaW50RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24rb2Zmc2V0KSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMyBjb2xvcjtcXG51bmlmb3JtIGZsb2F0IGFscGhhO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBzdW0gPSB2ZWM0KDAuMCk7XFxuXFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KCBjb2xvci5yZ2IgKiBzdW0uYSAqIGFscGhhLCBzdW0uYSAqIGFscGhhICk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgLyA1MTIgfSxcbiAgICAgICAgICAgIGNvbG9yOiB7IHR5cGU6ICdjJywgdmFsdWU6IFswLDAsMF19LFxuICAgICAgICAgICAgYWxwaGE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNyB9LFxuICAgICAgICAgICAgb2Zmc2V0OiB7IHR5cGU6ICcyZicsIHZhbHVlOls1LCA1XX0sXG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZToxfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJZVGludEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllUaW50RmlsdGVyO1xuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCBjbGVhcik7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJZVGludEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllUaW50RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZVGludEZpbHRlciA9IHJlcXVpcmUoJy4vQmx1cllUaW50RmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIERyb3BTaGFkb3dGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRHJvcFNoYWRvd0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyID0gbmV3IEJsdXJZVGludEZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIHRoaXMucGFkZGluZyA9IDMwO1xuXG4gICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgdGhpcy5fYW5nbGUgPSA0NSAqIE1hdGguUEkgLyAxODA7XG4gICAgdGhpcy5fZGlzdGFuY2UgPSAxMDtcbiAgICB0aGlzLmFscGhhID0gMC43NTtcbiAgICB0aGlzLmhpZGVPYmplY3QgPSBmYWxzZTtcbiAgICB0aGlzLmJsZW5kTW9kZSA9IGNvcmUuQkxFTkRfTU9ERVMuTVVMVElQTFk7XG59XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERyb3BTaGFkb3dGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERyb3BTaGFkb3dGaWx0ZXI7XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICBpZih0aGlzLl9kaXJ0eVBvc2l0aW9uKVxuICAgIHtcbiAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVswXSA9IE1hdGguc2luKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5vZmZzZXQudmFsdWVbMV0gPSBNYXRoLmNvcyh0aGlzLl9hbmdsZSkgKiB0aGlzLl9kaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKHRoaXMuYmxlbmRNb2RlKTtcblxuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZighdGhpcy5oaWRlT2JqZWN0KVxuICAgIHtcblxuICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuICAgIH1cblxuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNvbG9yIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgY29sb3I6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIGNvcmUudXRpbHMucmdiMmhleCggdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmNvbG9yLnZhbHVlID0gY29yZS51dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbHBoYSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFscGhhOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzdGFuY2Ugb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBkaXN0YW5jZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3RhbmNlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYW5nbGUgb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fYW5nbGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2FuZ2xlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZ3JleXNjYWxlcyB0aGUgcGFsZXR0ZSBvZiB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gR3JheUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGdyYXk7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peChnbF9GcmFnQ29sb3IucmdiLCB2ZWMzKDAuMjEyNipnbF9GcmFnQ29sb3IuciArIDAuNzE1MipnbF9GcmFnQ29sb3IuZyArIDAuMDcyMipnbF9GcmFnQ29sb3IuYiksIGdyYXkpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBncmF5OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkdyYXlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5HcmF5RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEdyYXlGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmF5LiAxIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGJsYWNrIGFuZCB3aGl0ZSwgMCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuR3JheUZpbHRlciNcbiAgICAgKi9cbiAgICBncmF5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBmaWx0ZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5maWx0ZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEFzY2lpRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9hc2NpaS9Bc2NpaUZpbHRlcicpLFxuICAgIEJsb29tRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibG9vbS9CbG9vbUZpbHRlcicpLFxuICAgIEJsdXJGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJGaWx0ZXInKSxcbiAgICBCbHVyWEZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJZRmlsdGVyJyksXG4gICAgQmx1ckRpckZpbHRlcjogICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckRpckZpbHRlcicpLFxuICAgIENvbG9yTWF0cml4RmlsdGVyOiAgcmVxdWlyZSgnLi9jb2xvci9Db2xvck1hdHJpeEZpbHRlcicpLFxuICAgIENvbG9yU3RlcEZpbHRlcjogICAgcmVxdWlyZSgnLi9jb2xvci9Db2xvclN0ZXBGaWx0ZXInKSxcbiAgICBDb252b2x1dGlvbkZpbHRlcjogIHJlcXVpcmUoJy4vY29udm9sdXRpb24vQ29udm9sdXRpb25GaWx0ZXInKSxcbiAgICBDcm9zc0hhdGNoRmlsdGVyOiAgIHJlcXVpcmUoJy4vY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyJyksXG4gICAgRGlzcGxhY2VtZW50RmlsdGVyOiByZXF1aXJlKCcuL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXInKSxcbiAgICBEb3RTY3JlZW5GaWx0ZXI6ICAgIHJlcXVpcmUoJy4vZG90L0RvdFNjcmVlbkZpbHRlcicpLFxuICAgIEdyYXlGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ncmF5L0dyYXlGaWx0ZXInKSxcbiAgICBEcm9wU2hhZG93RmlsdGVyOiAgIHJlcXVpcmUoJy4vZHJvcHNoYWRvdy9Ecm9wU2hhZG93RmlsdGVyJyksXG4gICAgSW52ZXJ0RmlsdGVyOiAgICAgICByZXF1aXJlKCcuL2ludmVydC9JbnZlcnRGaWx0ZXInKSxcbiAgICBOb2lzZUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vbm9pc2UvTm9pc2VGaWx0ZXInKSxcbiAgICBQaXhlbGF0ZUZpbHRlcjogICAgIHJlcXVpcmUoJy4vcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXInKSxcbiAgICBSR0JTcGxpdEZpbHRlcjogICAgIHJlcXVpcmUoJy4vcmdiL1JHQlNwbGl0RmlsdGVyJyksXG4gICAgU2hvY2t3YXZlRmlsdGVyOiAgICByZXF1aXJlKCcuL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXInKSxcbiAgICBTZXBpYUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vc2VwaWEvU2VwaWFGaWx0ZXInKSxcbiAgICBTbWFydEJsdXJGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vYmx1ci9TbWFydEJsdXJGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFhGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlcicpLFxuICAgIFR3aXN0RmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi90d2lzdC9Ud2lzdEZpbHRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBpbnZlcnRzIHlvdXIgRGlzcGxheSBPYmplY3RzIGNvbG9ycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gSW52ZXJ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIGZsb2F0IGludmVydDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoICh2ZWMzKDEpLWdsX0ZyYWdDb2xvci5yZ2IpICogZ2xfRnJhZ0NvbG9yLmEsIGdsX0ZyYWdDb2xvci5yZ2IsIDEuMCAtIGludmVydCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgaW52ZXJ0OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkludmVydEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkludmVydEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnZlcnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludmVydEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgaW52ZXJ0LiBgMWAgd2lsbCBmdWxseSBpbnZlcnQgdGhlIGNvbG9ycywgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5JbnZlcnRGaWx0ZXIjXG4gICAgICovXG4gICAgaW52ZXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuaW52ZXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYWRqdXN0L25vaXNlLmpzXG4gKi9cblxuLyoqXG4gKiBBIE5vaXNlIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIE5vaXNlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IG5vaXNlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IHJhbmQodmVjMiBjbylcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGNvLnh5LCB2ZWMyKDEyLjk4OTgsIDc4LjIzMykpKSAqIDQzNzU4LjU0NTMpO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGZsb2F0IGRpZmYgPSAocmFuZCh2VGV4dHVyZUNvb3JkKSAtIDAuNSkgKiBub2lzZTtcXG5cXG4gICAgY29sb3IuciArPSBkaWZmO1xcbiAgICBjb2xvci5nICs9IGRpZmY7XFxuICAgIGNvbG9yLmIgKz0gZGlmZjtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbm9pc2U6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Ob2lzZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbk5vaXNlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE5vaXNlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBOb2lzZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTm9pc2VGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGFtb3VudCBvZiBub2lzZSB0byBhcHBseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLk5vaXNlRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDAuNVxuICAgICAqL1xuICAgIG5vaXNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm5vaXNlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSBwaXhlbGF0ZSBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgJ2Jsb2NreScuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFBpeGVsYXRlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZlYzIgc2l6ZSA9IGRpbWVuc2lvbnMueHkgLyBwaXhlbFNpemU7XFxuXFxuICAgIHZlYzIgY29sb3IgPSBmbG9vciggKCB2VGV4dHVyZUNvb3JkICogc2l6ZSApICkgLyBzaXplICsgcGl4ZWxTaXplL2RpbWVuc2lvbnMueHkgKiAwLjU7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgY29sb3IpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsICB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICd2MicsICAgdmFsdWU6IHsgeDogMTAsIHk6IDEwIH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQaXhlbGF0ZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gUGl4ZWxhdGVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgYSBwb2ludCB0aGF0IGRlc2NyaWJlcyB0aGUgc2l6ZSBvZiB0aGUgYmxvY2tzLlxuICAgICAqIHggaXMgdGhlIHdpZHRoIG9mIHRoZSBibG9jayBhbmQgeSBpcyB0aGUgaGVpZ2h0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlBpeGVsYXRlRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBbiBSR0IgU3BsaXQgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBSR0JTcGxpdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSB2ZWMyIHJlZDtcXG51bmlmb3JtIHZlYzIgZ3JlZW47XFxudW5pZm9ybSB2ZWMyIGJsdWU7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvci5yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgcmVkL2RpbWVuc2lvbnMueHkpLnI7XFxuICAgZ2xfRnJhZ0NvbG9yLmcgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBncmVlbi9kaW1lbnNpb25zLnh5KS5nO1xcbiAgIGdsX0ZyYWdDb2xvci5iID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgYmx1ZS9kaW1lbnNpb25zLnh5KS5iO1xcbiAgIGdsX0ZyYWdDb2xvci5hID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKS5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZDogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGdyZWVuOiAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogLTIwLCB5OiAyMCB9IH0sXG4gICAgICAgICAgICBibHVlOiAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDIwLCB5OiAtMjAgfSB9LFxuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLCAwLCAwLCAwXSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5SR0JTcGxpdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJHQlNwbGl0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBSR0JTcGxpdEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogUmVkIGNoYW5uZWwgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIHJlZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJlZC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR3JlZW4gY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JlZW46IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JlZW4udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBCbHVlIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGFwcGxpZXMgYSBzZXBpYSBlZmZlY3QgdG8geW91ciBEaXNwbGF5IE9iamVjdHMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNlcGlhRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHNlcGlhO1xcblxcbmNvbnN0IG1hdDMgc2VwaWFNYXRyaXggPSBtYXQzKDAuMzU4OCwgMC43MDQ0LCAwLjEzNjgsIDAuMjk5MCwgMC41ODcwLCAwLjExNDAsIDAuMjM5MiwgMC40Njk2LCAwLjA5MTIpO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGdsX0ZyYWdDb2xvci5yZ2IgKiBzZXBpYU1hdHJpeCwgc2VwaWEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNlcGlhOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNlcGlhRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU2VwaWFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2VwaWFGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNlcGlhRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTZXBpYUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIHNlcGlhLiBgMWAgd2lsbCBhcHBseSB0aGUgZnVsbCBzZXBpYSBlZmZlY3QsIGFuZFxuICAgICAqIGAwYCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2VwaWFGaWx0ZXIjXG4gICAgICovXG4gICAgc2VwaWE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc2VwaWEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbG9yTWF0cml4RmlsdGVyIGNsYXNzIGxldHMgeW91IGFwcGx5IGEgNHg0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgUkdCQVxuICogY29sb3IgYW5kIGFscGhhIHZhbHVlcyBvZiBldmVyeSBwaXhlbCBvbiB5b3VyIGRpc3BsYXlPYmplY3QgdG8gcHJvZHVjZSBhIHJlc3VsdFxuICogd2l0aCBhIG5ldyBzZXQgb2YgUkdCQSBjb2xvciBhbmQgYWxwaGEgdmFsdWVzLiBJdCdzIHByZXR0eSBwb3dlcmZ1bCFcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2hvY2t3YXZlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIHZlYzIgY2VudGVyO1xcbnVuaWZvcm0gdmVjMyBwYXJhbXM7IC8vIDEwLjAsIDAuOCwgMC4xXFxudW5pZm9ybSBmbG9hdCB0aW1lO1xcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gdlRleHR1cmVDb29yZDtcXG4gICAgdmVjMiB0ZXhDb29yZCA9IHV2O1xcblxcbiAgICBmbG9hdCBkaXN0ID0gZGlzdGFuY2UodXYsIGNlbnRlcik7XFxuXFxuICAgIGlmICggKGRpc3QgPD0gKHRpbWUgKyBwYXJhbXMueikpICYmIChkaXN0ID49ICh0aW1lIC0gcGFyYW1zLnopKSApXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IGRpZmYgPSAoZGlzdCAtIHRpbWUpO1xcbiAgICAgICAgZmxvYXQgcG93RGlmZiA9IDEuMCAtIHBvdyhhYnMoZGlmZipwYXJhbXMueCksIHBhcmFtcy55KTtcXG5cXG4gICAgICAgIGZsb2F0IGRpZmZUaW1lID0gZGlmZiAgKiBwb3dEaWZmO1xcbiAgICAgICAgdmVjMiBkaWZmVVYgPSBub3JtYWxpemUodXYgLSBjZW50ZXIpO1xcbiAgICAgICAgdGV4Q29vcmQgPSB1diArIChkaWZmVVYgKiBkaWZmVGltZSk7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB0ZXhDb29yZCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgY2VudGVyOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfSxcbiAgICAgICAgICAgIHBhcmFtczogeyB0eXBlOiAndjMnLCB2YWx1ZTogeyB4OiAxMCwgeTogMC44LCB6OiAwLjEgfSB9LFxuICAgICAgICAgICAgdGltZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hvY2t3YXZlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaG9ja3dhdmVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjZW50ZXIgb2YgdGhlIHNob2Nrd2F2ZSBpbiBub3JtYWxpemVkIHNjcmVlbiBjb29yZHMuIFRoYXQgaXNcbiAgICAgKiAoMCwwKSBpcyB0aGUgdG9wLWxlZnQgYW5kICgxLDEpIGlzIHRoZSBib3R0b20gcmlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBudW1iZXI+fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIGNlbnRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmNlbnRlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBhcmFtcyBvZiB0aGUgc2hvY2t3YXZlLiBUaGVzZSBtb2RpZnkgdGhlIGxvb2sgYW5kIGJlaGF2aW9yIG9mXG4gICAgICogdGhlIHNob2Nrd2F2ZSBhcyBpdCByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgcGFyYW1zOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGFyYW1zLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZWxhcHNlZCB0aW1lIG9mIHRoZSBzaG9ja3dhdmUuIFRoaXMgY29udHJvbHMgdGhlIHNwZWVkIGF0IHdoaWNoXG4gICAgICogdGhlIHNob2Nrd2F2ZSByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICB0aW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0QXhpc0ZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0QXhpc0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBibHVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JhZGllbnRCbHVyO1xcbnVuaWZvcm0gdmVjMiBzdGFydDtcXG51bmlmb3JtIHZlYzIgZW5kO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG51bmlmb3JtIHZlYzIgdGV4U2l6ZTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG4gICAgdmVjMiBub3JtYWwgPSBub3JtYWxpemUodmVjMihzdGFydC55IC0gZW5kLnksIGVuZC54IC0gc3RhcnQueCkpO1xcbiAgICBmbG9hdCByYWRpdXMgPSBzbW9vdGhzdGVwKDAuMCwgMS4wLCBhYnMoZG90KHZUZXh0dXJlQ29vcmQgKiB0ZXhTaXplIC0gc3RhcnQsIG5vcm1hbCkpIC8gZ3JhZGllbnRCbHVyKSAqIGJsdXI7XFxuXFxuICAgIGZvciAoZmxvYXQgdCA9IC0zMC4wOyB0IDw9IDMwLjA7IHQrKylcXG4gICAge1xcbiAgICAgICAgZmxvYXQgcGVyY2VudCA9ICh0ICsgb2Zmc2V0IC0gMC41KSAvIDMwLjA7XFxuICAgICAgICBmbG9hdCB3ZWlnaHQgPSAxLjAgLSBhYnMocGVyY2VudCk7XFxuICAgICAgICB2ZWM0IHNhbXBsZSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGRlbHRhIC8gdGV4U2l6ZSAqIHBlcmNlbnQgKiByYWRpdXMpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBibHVyOiAgICAgICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMTAwIH0sXG4gICAgICAgICAgICBncmFkaWVudEJsdXI6ICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNjAwIH0sXG4gICAgICAgICAgICBzdGFydDogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLCAgICB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIH0gfSxcbiAgICAgICAgICAgIGVuZDogICAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDYwMCwgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZGVsdGE6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMzAsICAgeTogMzAgfSB9LFxuICAgICAgICAgICAgdGV4U2l6ZTogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogd2luZG93LmlubmVyV2lkdGgsIHk6IHdpbmRvdy5pbm5lckhlaWdodCB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG59XG5cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiB0aGUgWCBhbmQgWSBmaWx0ZXJzLCBkb2VzIG5vdGhpbmcgZm9yIHRoaXMgY2xhc3MuXG4gKlxuICovXG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gMDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSAwO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmFkaWVudEJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIHN0YXJ0IHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgZW5kOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdFlGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0IEZpbHRlci4gTWFuYWdlcyB0aGUgcGFzcyBvZiBib3RoIGEgVGlsdFNoaWZ0WEZpbHRlciBhbmQgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIgPSBuZXcgVGlsdFNoaWZ0WEZpbHRlcigpO1xuICAgIHRoaXMudGlsdFNoaWZ0WUZpbHRlciA9IG5ldyBUaWx0U2hpZnRZRmlsdGVyKCk7XG59XG5cblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEZpbHRlcjtcblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JhZGllbnQgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ncmFkaWVudEJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZ3JhZGllbnRCbHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFkgdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuc3RhcnQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBlbmQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5lbmQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZW5kID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBUaWx0U2hpZnRBeGlzRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRBeGlzRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdFhGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRpbHRTaGlmdEF4aXNGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0WEZpbHRlcigpXG57XG4gICAgVGlsdFNoaWZ0QXhpc0ZpbHRlci5jYWxsKHRoaXMpO1xufVxuXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRYRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRYRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKlxuICovXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGR4ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueCAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueDtcbiAgICB2YXIgZHkgPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS55IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS55O1xuICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IGR4IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeSAvIGQ7XG59O1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRZRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gLWR5IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeCAvIGQ7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHR3aXN0IGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0d2lzdGVkIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFR3aXN0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHJhZGl1cztcXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzIgY29vcmQgPSB2VGV4dHVyZUNvb3JkIC0gb2Zmc2V0O1xcbiAgIGZsb2F0IGRpc3QgPSBsZW5ndGgoY29vcmQpO1xcblxcbiAgIGlmIChkaXN0IDwgcmFkaXVzKVxcbiAgIHtcXG4gICAgICAgZmxvYXQgcmF0aW8gPSAocmFkaXVzIC0gZGlzdCkgLyByYWRpdXM7XFxuICAgICAgIGZsb2F0IGFuZ2xlTW9kID0gcmF0aW8gKiByYXRpbyAqIGFuZ2xlO1xcbiAgICAgICBmbG9hdCBzID0gc2luKGFuZ2xlTW9kKTtcXG4gICAgICAgZmxvYXQgYyA9IGNvcyhhbmdsZU1vZCk7XFxuICAgICAgIGNvb3JkID0gdmVjMihjb29yZC54ICogYyAtIGNvb3JkLnkgKiBzLCBjb29yZC54ICogcyArIGNvb3JkLnkgKiBjKTtcXG4gICB9XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCtvZmZzZXQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhZGl1czogICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9LFxuICAgICAgICAgICAgYW5nbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9LFxuICAgICAgICAgICAgb2Zmc2V0OiAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjUsIHk6IDAuNSB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblR3aXN0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVHdpc3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHdpc3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFR3aXN0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUd2lzdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IGRlc2NyaWJlcyB0aGUgdGhlIG9mZnNldCBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgb2Zmc2V0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHJhZGl1cyBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICByYWRpdXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5yYWRpdXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgYW5nbGUgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiLy8gcnVuIHRoZSBwb2x5ZmlsbHNcbnJlcXVpcmUoJy4vcG9seWZpbGwnKTtcblxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29yZScpO1xuXG4vLyBhZGQgY29yZSBwbHVnaW5zLlxuY29yZS5leHRyYXMgICAgICAgICA9IHJlcXVpcmUoJy4vZXh0cmFzJyk7XG5jb3JlLmZpbHRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5jb3JlLmludGVyYWN0aW9uICAgID0gcmVxdWlyZSgnLi9pbnRlcmFjdGlvbicpO1xuY29yZS5sb2FkZXJzICAgICAgICA9IHJlcXVpcmUoJy4vbG9hZGVycycpO1xuY29yZS5tZXNoICAgICAgICAgICA9IHJlcXVpcmUoJy4vbWVzaCcpO1xuY29yZS5hY2Nlc3NpYmlsaXR5ICA9IHJlcXVpcmUoJy4vYWNjZXNzaWJpbGl0eScpO1xuXG4vLyBleHBvcnQgYSBwcmVtYWRlIGxvYWRlciBpbnN0YW5jZVxuLyoqXG4gKiBBIHByZW1hZGUgaW5zdGFuY2Ugb2YgdGhlIGxvYWRlciB0aGF0IGNhbiBiZSB1c2VkIHRvIGxvYWRlciByZXNvdXJjZXMuXG4gKlxuICogQG5hbWUgbG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHByb3BlcnR5IHtQSVhJLmxvYWRlcnMuTG9hZGVyfVxuICovXG5jb3JlLmxvYWRlciA9IG5ldyBjb3JlLmxvYWRlcnMuTG9hZGVyKCk7XG5cbi8vIG1peGluIHRoZSBkZXByZWNhdGlvbiBmZWF0dXJlcy5cbk9iamVjdC5hc3NpZ24oY29yZSwgcmVxdWlyZSgnLi9kZXByZWNhdGlvbicpKTtcblxuLy8gQWx3YXlzIGV4cG9ydCBwaXhpIGdsb2JhbGx5LlxuZ2xvYmFsLlBJWEkgPSBjb3JlO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogSG9sZHMgYWxsIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gYW4gSW50ZXJhY3Rpb24gZXZlbnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uRGF0YSgpXG57XG4gICAgLyoqXG4gICAgICogVGhpcyBwb2ludCBzdG9yZXMgdGhlIGdsb2JhbCBjb29yZHMgb2Ygd2hlcmUgdGhlIHRvdWNoL21vdXNlIGV2ZW50IGhhcHBlbmVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuZ2xvYmFsID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgU3ByaXRlIHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TcHJpdGV9XG4gICAgICovXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBwYXNzZWQgdG8gYW4gZXZlbnQgaGFuZGxlciwgdGhpcyB3aWxsIGJlIHRoZSBvcmlnaW5hbCBET00gRXZlbnQgdGhhdCB3YXMgY2FwdHVyZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0V2ZW50fVxuICAgICAqL1xuICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IG51bGw7XG59XG5cbkludGVyYWN0aW9uRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbkRhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uRGF0YTtcblxuLyoqXG4gKiBUaGlzIHdpbGwgcmV0dXJuIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgc3BlY2lmaWVkIGRpc3BsYXlPYmplY3QgZm9yIHRoaXMgSW50ZXJhY3Rpb25EYXRhXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgbG9jYWwgY29vcmRzIG9mZlxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBwb2ludClcbiAqIEBwYXJhbSBbZ2xvYmFsUG9zXSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgY29udGFpbmluZyB5b3VyIGN1c3RvbSBnbG9iYWwgY29vcmRzLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgdXNlIHRoZSBjdXJyZW50IGdsb2JhbCBjb29yZHMpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBJbnRlcmFjdGlvbkRhdGEgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIERpc3BsYXlPYmplY3RcbiAqL1xuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5nZXRMb2NhbFBvc2l0aW9uID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHBvaW50LCBnbG9iYWxQb3MpXG57XG4gICAgcmV0dXJuIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKGdsb2JhbFBvcyB8fCB0aGlzLmdsb2JhbCwgcG9pbnQpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIEludGVyYWN0aW9uRGF0YSA9IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25EYXRhJyk7XG5cbi8vIE1peCBpbnRlcmFjdGl2ZVRhcmdldCBpbnRvIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGVcbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbik7XG5cbi8qKlxuICogVGhlIGludGVyYWN0aW9uIG1hbmFnZXIgZGVhbHMgd2l0aCBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzLiBBbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgaW50ZXJhY3RpdmVcbiAqIGlmIGl0cyBpbnRlcmFjdGl2ZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIHRydWVcbiAqIFRoaXMgbWFuYWdlciBhbHNvIHN1cHBvcnRzIG11bHRpdG91Y2guXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH1cbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQ9dHJ1ZV0ge2Jvb2xlYW59IFNob3VsZCB0aGUgbWFuYWdlciBhdXRvbWF0aWNhbGx5IHByZXZlbnQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMuXG4gKiBAcGFyYW0gW29wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3k9MTBdIHtudW1iZXJ9IEZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQuXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uTWFuYWdlcihyZW5kZXJlciwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGludGVyYWN0aW9uIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMgYXV0b21hdGljYWxseSBiZSBwcmV2ZW50ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdCA9IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdCA6IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBcyB0aGlzIGZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQgbW9yZSBvZnRlbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgPSBvcHRpb25zLmludGVyYWN0aW9uRnJlcXVlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vdXNlIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhfVxuICAgICAqL1xuICAgIHRoaXMubW91c2UgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCBkYXRhIG9iamVjdCB0byBoYW5kbGUgYWxsIHRoZSBldmVudCB0cmFja2luZy9kaXNwYXRjaGluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnREYXRhID0ge1xuICAgICAgICBzdG9wcGVkOiBmYWxzZSxcbiAgICAgICAgdGFyZ2V0OiBudWxsLFxuICAgICAgICB0eXBlOiBudWxsLFxuICAgICAgICBkYXRhOiB0aGlzLm1vdXNlLFxuICAgICAgICBzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGlueSBsaXR0bGUgaW50ZXJhY3RpdmVEYXRhIHBvb2wgIVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGFbXX1cbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBET00gZWxlbWVudCB0byBiaW5kIHRvLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTEVsZW1lbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIYXZlIGV2ZW50cyBiZWVuIGF0dGFjaGVkIHRvIHRoZSBkb20gZWxlbWVudD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gZmFsc2U7XG5cbiAgICAvL3RoaXMgd2lsbCBtYWtlIGl0IHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gY2FsbCBiaW5kIGFsbCB0aGUgdGltZVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlVXAgPSB0aGlzLm9uTW91c2VVcC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlVXAgPSB0aGlzLnByb2Nlc3NNb3VzZVVwLmJpbmQoIHRoaXMgKTtcblxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IHRoaXMub25Nb3VzZURvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZURvd24gPSB0aGlzLnByb2Nlc3NNb3VzZURvd24uYmluZCggdGhpcyApO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IHRoaXMub25Nb3VzZU1vdmUuYmluZCggdGhpcyApO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IHRoaXMucHJvY2Vzc01vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VPdXQgPSB0aGlzLm9uTW91c2VPdXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IHRoaXMub25Ub3VjaFN0YXJ0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaEVuZCA9IHRoaXMub25Ub3VjaEVuZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gdGhpcy5wcm9jZXNzVG91Y2hFbmQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaE1vdmUgPSB0aGlzLm9uVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sYXN0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjc3Mgc3R5bGUgb2YgdGhlIGN1cnNvciB0aGF0IGlzIGJlaW5nIHVzZWRcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSAnaW5oZXJpdCc7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjYWNoZWQgdmFyXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCByZXNvbHV0aW9uXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IDE7XG5cbiAgICB0aGlzLnNldFRhcmdldEVsZW1lbnQodGhpcy5yZW5kZXJlci52aWV3LCB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24pO1xufVxuXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJhY3Rpb25NYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5cbi8qKlxuICogU2V0cyB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlL3RvdWNoIGV2ZW50cy4gVGhpcyBpcyB1c2VmdWwgZm9yIHdoZW4geW91IGhhdmVcbiAqIG90aGVyIERPTSBlbGVtZW50cyBvbiB0b3Agb2YgdGhlIHJlbmRlcmVycyBDYW52YXMgZWxlbWVudC4gV2l0aCB0aGlzIHlvdSdsbCBiZSBiYWxlIHRvIGRlbGV0ZWdhdGVcbiAqIGFub3RoZXIgRE9NIGVsZW1lbnQgdG8gcmVjZWl2ZSB0aG9zZSBldmVudHMuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQge0hUTUxFbGVtZW50fSB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVEhlIHJlc29sdXRpb24gb2YgdGhlIG5ldyBlbGVtZW50IChyZWxhdGl2ZSB0byB0aGUgY2FudmFzKS5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuc2V0VGFyZ2V0RWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCByZXNvbHV0aW9uKVxue1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICB0aGlzLmFkZEV2ZW50cygpO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYWxsIHRoZSBET00gZXZlbnRzXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5hZGRFdmVudHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29yZS50aWNrZXIuc2hhcmVkLmFkZCh0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy1jb250ZW50LXpvb21pbmcnXSA9ICdub25lJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICdub25lJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgICAgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgICAgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgICAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCAgIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICAgICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsICAgIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIHRoZSBET00gZXZlbnRzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHJlZ2lzdGVyZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJyc7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAgdGhpcy5vblRvdWNoRW5kLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlLCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgIHRoaXMub25Nb3VzZVVwLCB0cnVlKTtcblxuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc3RhdGUgb2YgaW50ZXJhY3RpdmUgb2JqZWN0cy5cbiAqIEludm9rZWQgYnkgYSB0aHJvdHRsZWQgdGlja2VyIHVwZGF0ZSBmcm9tXG4gKiB7QGxpbmsgUElYSS50aWNrZXIuc2hhcmVkfS5cbiAqXG4gKiBAcGFyYW0gZGVsdGFUaW1lIHtudW1iZXJ9XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB0aGlzLl9kZWx0YVRpbWUgKz0gZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2RlbHRhVGltZSA8IHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGVsdGFUaW1lID0gMDtcblxuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHVzZXIgbW92ZSB0aGUgbW91c2UgdGhpcyBjaGVjayBoYXMgYWxyZWFkeSBiZWVuIGRmb25lIHVzaW5nIHRoZSBtb3VzZSBtb3ZlIVxuICAgIGlmKHRoaXMuZGlkTW92ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlkTW92ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE9cbn07XG5cbi8qKlxuICogRGlzcGF0Y2hlcyBhbiBldmVudCBvbiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIGRpc3BsYXkgb2JqZWN0IGluIHF1ZXN0aW9uXG4gKiBAcGFyYW0gZXZlbnRTdHJpbmcge3N0cmluZ30gdGhlIG5hbWUgb2YgdGhlIGV2ZW50IChlLmcsIG1vdXNlZG93bilcbiAqIEBwYXJhbSBldmVudERhdGEge29iamVjdH0gdGhlIGV2ZW50IGRhdGEgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGV2ZW50U3RyaW5nLCBldmVudERhdGEgKVxue1xuICAgIGlmKCFldmVudERhdGEuc3RvcHBlZClcbiAgICB7XG4gICAgICAgIGV2ZW50RGF0YS50YXJnZXQgPSBkaXNwbGF5T2JqZWN0O1xuICAgICAgICBldmVudERhdGEudHlwZSA9IGV2ZW50U3RyaW5nO1xuXG4gICAgICAgIGRpc3BsYXlPYmplY3QuZW1pdCggZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0W2V2ZW50U3RyaW5nXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddKCBldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogTWFwcyB4IGFuZCB5IGNvb3JkcyBmcm9tIGEgRE9NIG9iamVjdCBhbmQgbWFwcyB0aGVtIGNvcnJlY3RseSB0byB0aGUgcGl4aSB2aWV3LiBUaGUgcmVzdWx0aW5nIHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUgcG9pbnQuXG4gKiBUaGlzIHRha2VzIGludG8gYWNjb3VudCB0aGUgZmFjdCB0aGF0IHRoZSBET00gZWxlbWVudCBjb3VsZCBiZSBzY2FsZWQgYW5kIHBvc2l0aW9uZWQgYW55d2hlcmUgb24gdGhlIHNjcmVlbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCB0aGUgcmVzdWx0IHdpbGwgYmUgc3RvcmVkIGluXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHggICAgIHRoZSB4IGNvb3JkIG9mIHRoZSBwb3NpdGlvbiB0byBtYXBcbiAqIEBwYXJhbSAge251bWJlcn0geSAgICAgdGhlIHkgY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm1hcFBvc2l0aW9uVG9Qb2ludCA9IGZ1bmN0aW9uICggcG9pbnQsIHgsIHkgKVxue1xuICAgIHZhciByZWN0ID0gdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcG9pbnQueCA9ICggKCB4IC0gcmVjdC5sZWZ0ICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQud2lkdGggIC8gcmVjdC53aWR0aCAgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHBvaW50LnkgPSAoICggeSAtIHJlY3QudG9wICApICogKHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmhlaWdodCAvIHJlY3QuaGVpZ2h0ICkgKSAvIHRoaXMucmVzb2x1dGlvbjtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlcyBhIG5lYXQgd2F5IG9mIGNyYXdsaW5nIHRocm91Z2ggdGhlIHNjZW5lIGdyYXBoIGFuZCBydW5uaW5nIGEgc3BlY2lmaWVkIGZ1bmN0aW9uIG9uIGFsbCBpbnRlcmFjdGl2ZSBvYmplY3RzIGl0IGZpbmRzLlxuICogSXQgd2lsbCBhbHNvIHRha2UgY2FyZSBvZiBoaXQgdGVzdGluZyB0aGUgaW50ZXJhY3RpdmUgb2JqZWN0cyBhbmQgcGFzc2VzIHRoZSBoaXQgYWNyb3NzIGluIHRoZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCBpcyB0ZXN0ZWQgZm9yIGNvbGxpc2lvblxuICogQHBhcmFtICB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBkaXNwbGF5T2JqZWN0IHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgd2lsbCBiZSBoaXQgdGVzdCAocmVjdXJjc2l2bHkgY3Jhd2xzIGl0cyBjaGlsZHJlbilcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmdW5jIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggaW50ZXJhY3RpdmUgb2JqZWN0LiBUaGUgZGlzcGxheU9iamVjdCBhbmQgaGl0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvblxuICogQHBhcmFtICB7Ym9vbGVhbn0gaGl0VGVzdCB0aGlzIGluZGljYXRlcyBpZiB0aGUgb2JqZWN0cyBpbnNpZGUgc2hvdWxkIGJlIGhpdCB0ZXN0IGFnYWluc3QgdGhlIHBvaW50XG4gKiBAcmV0dXJuIHtib29sZWFufSByZXR1cm5zIHRydWUgaWYgdGhlIGRpc3BsYXlPYmplY3QgaGl0IHRoZSBwb2ludFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NJbnRlcmFjdGl2ZSA9IGZ1bmN0aW9uIChwb2ludCwgZGlzcGxheU9iamVjdCwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmUpXG57XG4gICAgaWYoIWRpc3BsYXlPYmplY3QgfHwgIWRpc3BsYXlPYmplY3QudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUb29rIGEgbGl0dGxlIHdoaWxlIHRvIHJld29yayB0aGlzIGZ1bmN0aW9uIGNvcnJlY3RseSEgQnV0IG5vdyBpdCBpcyBkb25lIGFuZCBuaWNlIGFuZCBvcHRpbWlzZWQuIF5fXlxuICAgIC8vIFxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBub3cgbG9vcCB0aHJvdWdoIGFsbCBvYmplY3RzIGFuZCB0aGVuIG9ubHkgaGl0IHRlc3QgdGhlIG9iamVjdHMgaXQgSEFTIHRvLCBub3QgYWxsIG9mIHRoZW0uIE1VQ0ggZmFzdGVyLi5cbiAgICAvLyBBbiBvYmplY3Qgd2lsbCBiZSBoaXQgdGVzdCBpZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gICAgLy8gXG4gICAgLy8gMTogSXQgaXMgaW50ZXJhY3RpdmUuXG4gICAgLy8gMjogSXQgYmVsb25ncyB0byBhIHBhcmVudCB0aGF0IGlzIGludGVyYWN0aXZlIEFORCBvbmUgb2YgdGhlIHBhcmVudHMgY2hpbGRyZW4gaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICAvLyBcbiAgICAvLyBBcyBhbm90aGVyIGxpdHRsZSBvcHRpbWlzYXRpb24gb25jZSBhbiBpbnRlcmFjdGl2ZSBvYmplY3QgaGFzIGJlZW4gaGl0IHdlIGNhbiBjYXJyeSBvbiB0aHJvdWdoIHRoZSBzY2VuZWdyYXBoLCBidXQgd2Uga25vdyB0aGF0IHRoZXJlIHdpbGwgYmUgbm8gbW9yZSBoaXRzISBTbyB3ZSBjYW4gYXZvaWQgZXh0cmEgaGl0IHRlc3RzXG4gICAgLy8gQSBmaW5hbCBvcHRpbWlzYXRpb24gaXMgdGhhdCBhbiBvYmplY3QgaXMgbm90IGhpdCB0ZXN0IGRpcmVjdGx5IGlmIGEgY2hpbGQgaGFzIGFscmVhZHkgYmVlbiBoaXQuXG4gICAgXG4gICAgdmFyIGhpdCA9IGZhbHNlLFxuICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGludGVyYWN0aXZlID0gZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSB8fCBpbnRlcmFjdGl2ZTtcblxuICAgIC8vIGlmIHRoZSBkaXNwbGF5b2JqZWN0IGhhcyBhIGhpdEFyZWEsIHRoZW4gaXQgZG9lcyBub3QgbmVlZCB0byBoaXRUZXN0IGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaGl0QXJlYSlcbiAgICB7XG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gKiogRlJFRSBUSVAgKiohIElmIGFuIG9iamVjdCBpcyBub3QgaW50ZXJhY3R0aXZlIG9yIGhhcyBubyBidXR0b25zIGluIGl0IChzdWNoIGFzIGEgZ2FtZSBzY2VuZSEpIHNldCBpbnRlcmFjdGl2ZUNoaWxkcmVuIHRvIGZhbHNlIGZvciB0aGF0IGRpc3BsYXlPYmplY3QuXG4gICAgLy8gVGhpcyB3aWxsIGFsbG93IHBpeGkgdG8gY29tcGxldGx5IGlnbm9yZSBhbmQgYnlwYXNzIGNoZWNraW5nIHRoZSBkaXNwbGF5T2JqZWN0cyBjaGlsZHJlbi5cbiAgICBpZihkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlQ2hpbGRyZW4pXG4gICAgeyAgICAgICBcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICAgICAgXG4gICAgICAgIGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRpbWUgdG8gZ2V0IHJlY3Vyc2l2ZS4uIGlmIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gaWYgc29tdGhpbmcgaXMgaGl0Li5cbiAgICAgICAgICAgIGlmKCB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZShwb2ludCwgY2hpbGRyZW5baV0sIGZ1bmMsIGhpdFRlc3QsIGludGVyYWN0aXZlUGFyZW50KSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIHdlIG5vIGxvbmdlciBuZWVkIHRvIGhpdCB0ZXN0IGFueSBtb3JlIG9iamVjdHMgaW4gdGhpcyBjb250YWluZXIgYXMgd2Ugd2Ugbm93IGtub3cgdGhlIHBhcmVudCBoYXMgYmVlbiBoaXRcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBpcyBpbnRlcmFjdGl2ZSAsIHRoYXQgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhpdCB3YXMgYWN0dWFsbHkgaW50ZXJhY3RpdmUgYW5kIG5vdCBqdXN0IHRoZSBjaGlsZCBvZiBhbiBpbnRlcmFjdGl2ZSBvYmplY3QuIFxuICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55dGhpbmcgZWxzZS4gV2Ugc3RpbGwgbmVlZCB0byBydW4gdGhyb3VnaCBhbGwgb2JqZWN0cywgYnV0IHdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhbnkgaGl0IHRlc3RzLlxuICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuW2ldLmludGVyYWN0aXZlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGl0VGVzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIG5vIHBvaW50IHJ1bm5pbmcgdGhpcyBpZiB0aGUgaXRlbSBpcyBub3QgaW50ZXJhY3RpdmUgb3IgZG9lcyBub3QgaGF2ZSBhbiBpbnRlcmFjdGl2ZSBwYXJlbnQuXG4gICAgaWYoaW50ZXJhY3RpdmUpXG4gICAge1xuICAgICAgICAvLyBpZiB3ZSBhcmUgaGl0IHRlc3RpbmcgKGFzIGluIHdlIGhhdmUgbm8gaGl0IGFueSBvYmplY3RzIHlldClcbiAgICAgICAgLy8gV2UgYWxzbyBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGhpdCB0ZXN0aW5nIGlmIG9uY2Ugb2YgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuIGhhcyBhbHJlYWR5IGJlZW4gaGl0IVxuICAgICAgICBpZihoaXRUZXN0ICYmICFoaXQpXG4gICAgICAgIHsgIFxuICAgICAgICAgICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGhpcy5fdGVtcFBvaW50KTtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmhpdEFyZWEuY29udGFpbnMoIHRoaXMuX3RlbXBQb2ludC54LCB0aGlzLl90ZW1wUG9pbnQueSApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZihkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gZGlzcGxheU9iamVjdC5jb250YWluc1BvaW50KHBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmMoZGlzcGxheU9iamVjdCwgaGl0KTsgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGl0O1xuICBcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgZG93biBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcHJlc3NlZCBkb3duXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VEb3duLCB0cnVlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBkb3duIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlRG93biA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB2YXIgZSA9IHRoaXMubW91c2Uub3JpZ2luYWxFdmVudDtcbiAgICBcbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG5cbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nIF0gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRkb3duJyA6ICdtb3VzZWRvd24nLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcmVsZWFzZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYnV0dG9uIGJlaW5nIHJlbGVhc2VkXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VVcCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlVXAsIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIHVwIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZVVwID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuXG4gICAgdmFyIGlzUmlnaHRCdXR0b24gPSBlLmJ1dHRvbiA9PT0gMiB8fCBlLndoaWNoID09PSAzO1xuICAgIHZhciBpc0Rvd24gPSAgaXNSaWdodEJ1dHRvbiA/ICdfaXNSaWdodERvd24nIDogJ19pc0xlZnREb3duJztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodHVwJyA6ICdtb3VzZXVwJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0Y2xpY2snIDogJ2NsaWNrJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXBvdXRzaWRlJyA6ICdtb3VzZXVwb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgdGhlIG1vdXNlIG1vdmluZ1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5kaWRNb3ZlID0gdHJ1ZTtcblxuICAgIHRoaXMuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VNb3ZlLCB0cnVlICk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgIT09IHRoaXMuY3Vyc29yKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gdGhpcy5jdXJzb3I7XG4gICAgfVxuXG4gICAgLy9UT0RPIEJVRyBmb3IgcGFyZW50cyBpbmVyYWN0aXZlIG9iamVjdCAoYm9yZGVyIG9yZGVyIGlzc3VlKVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlbW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQoZGlzcGxheU9iamVjdCwgaGl0KTtcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgaXMgbW92ZWQgb3V0IG9mIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJlaW5nIG1vdmVkIG91dFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlT3V0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgLy8gVE9ETyBvcHRpbWl6ZSBieSBub3QgY2hlY2sgRVZFUlkgVElNRSEgbWF5YmUgaGFsZiBhcyBvZnRlbj8gLy9cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkgKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIGZhbHNlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBvdmVyL291dCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VPdmVyT3V0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGlmKCFkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3ZlcicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlzcGxheU9iamVjdC5idXR0b25Nb2RlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnNvciA9IGRpc3BsYXlPYmplY3QuZGVmYXVsdEN1cnNvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZihkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIHRoaXMuZXZlbnREYXRhKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIHN0YXJ0ZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggc3RhcnRpbmcgb24gdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaFN0YXJ0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuICAgICAgICAvL1RPRE8gUE9PTFxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0LCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hTdGFydCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaHN0YXJ0JywgdGhpcy5ldmVudERhdGEgKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBlbmRzIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIGVuZGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICAvL1RPRE8gdGhpcyBzaG91bGQgYmUgcGFzc2VkIGFsb25nLi4gbm8gc2V0XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoRW5kLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIGVuZCBvZiBhIHRvdWNoIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaEVuZCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZCcsIHRoaXMuZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndGFwJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZG91dHNpZGUnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIG1vdmVkIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBtb3ZpbmcgYWNyb3NzIHRoZSByZW5kZXJlciB2aWV3XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIGEgdG91Y2ggbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGhpdCA9IGhpdDtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaG1vdmUnLCB0aGlzLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hFdmVudCB7RXZlbnREYXRhfSBUaGUgdG91Y2ggZXZlbnQgd2UgbmVlZCB0byBwYWlyIHdpdGggYW4gaW50ZXJhY3Rpb25EYXRhIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZ2V0VG91Y2hEYXRhID0gZnVuY3Rpb24gKHRvdWNoRXZlbnQpXG57XG4gICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wb3AoKTtcblxuICAgIGlmKCF0b3VjaERhdGEpXG4gICAge1xuICAgICAgICB0b3VjaERhdGEgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG4gICAgfVxuXG4gICAgdG91Y2hEYXRhLmlkZW50aWZpZXIgPSB0b3VjaEV2ZW50LmlkZW50aWZpZXI7XG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRvdWNoRGF0YS5nbG9iYWwsIHRvdWNoRXZlbnQuY2xpZW50WCwgdG91Y2hFdmVudC5jbGllbnRZICk7XG5cbiAgICBpZihuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YS5nbG9iYWwueCA9IHRvdWNoRGF0YS5nbG9iYWwueCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC55ID0gdG91Y2hEYXRhLmdsb2JhbC55IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIH1cblxuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWCA9IHRvdWNoRGF0YS5nbG9iYWwueDtcbiAgICB0b3VjaEV2ZW50Lmdsb2JhbFkgPSB0b3VjaERhdGEuZ2xvYmFsLnk7XG5cbiAgICByZXR1cm4gdG91Y2hEYXRhO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IHRvIHRoZSBpbnRlcm5hbCBwb29sXG4gKlxuICogQHBhcmFtIHRvdWNoRGF0YSB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9IFRoZSB0b3VjaCBkYXRhIG9iamVjdCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmV0dXJuVG91Y2hEYXRhID0gZnVuY3Rpb24gKCB0b3VjaERhdGEgKVxue1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wdXNoKCB0b3VjaERhdGEgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGludGVyYWN0aW9uIG1hbmFnZXJcbiAqXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLm1vdXNlID0gbnVsbDtcblxuICAgIHRoaXMuZXZlbnREYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IG51bGw7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VVcCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Nb3VzZURvd24gPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUgPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlT3V0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBudWxsO1xuXG5cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IG51bGw7XG5cbiAgICB0aGlzLm9uVG91Y2hFbmQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaE1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZW1wUG9pbnQgPSBudWxsO1xufTtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBpbnRlcmFjdGlvbnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEludGVyYWN0aW9uRGF0YTogICAgcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKSxcbiAgICBJbnRlcmFjdGlvbk1hbmFnZXI6IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25NYW5hZ2VyJyksXG4gICAgaW50ZXJhY3RpdmVUYXJnZXQ6ICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbn07XG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGludGVyYWN0aXZlIG9iamVjdHNcbiAqIHVzZWQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5pbnRlcmFjdGlvbi5pbnRlcmFjdGl2ZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgaW50ZXJhY3RpdmVUYXJnZXQgPSB7XG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBidXR0b25Nb2RlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlQ2hpbGRyZW46IHRydWUsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBkZWZhdWx0Q3Vyc29yOiAncG9pbnRlcicsXG5cbiAgICAvLyBzb21lIGludGVybmFsIGNoZWNrcy4uXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX292ZXI6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdG91Y2hEb3duOiBmYWxzZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnRlcmFjdGl2ZVRhcmdldDtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi4vZXh0cmFzJyksXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxuXG5mdW5jdGlvbiBwYXJzZShyZXNvdXJjZSwgdGV4dHVyZSkge1xuICAgIHZhciBkYXRhID0ge307XG4gICAgdmFyIGluZm8gPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF07XG4gICAgdmFyIGNvbW1vbiA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NvbW1vbicpWzBdO1xuXG4gICAgZGF0YS5mb250ID0gaW5mby5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKTtcbiAgICBkYXRhLnNpemUgPSBwYXJzZUludChpbmZvLmdldEF0dHJpYnV0ZSgnc2l6ZScpLCAxMCk7XG4gICAgZGF0YS5saW5lSGVpZ2h0ID0gcGFyc2VJbnQoY29tbW9uLmdldEF0dHJpYnV0ZSgnbGluZUhlaWdodCcpLCAxMCk7XG4gICAgZGF0YS5jaGFycyA9IHt9O1xuXG4gICAgLy9wYXJzZSBsZXR0ZXJzXG4gICAgdmFyIGxldHRlcnMgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjaGFyJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxldHRlcnMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaWQnKSwgMTApO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlUmVjdCA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4JyksIDEwKSArIHRleHR1cmUuZnJhbWUueCxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd5JyksIDEwKSArIHRleHR1cmUuZnJhbWUueSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd3aWR0aCcpLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaGVpZ2h0JyksIDEwKVxuICAgICAgICApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbY2hhckNvZGVdID0ge1xuICAgICAgICAgICAgeE9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeU9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3lvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeEFkdmFuY2U6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4YWR2YW5jZScpLCAxMCksXG4gICAgICAgICAgICBrZXJuaW5nOiB7fSxcbiAgICAgICAgICAgIHRleHR1cmU6IG5ldyBjb3JlLlRleHR1cmUodGV4dHVyZS5iYXNlVGV4dHVyZSwgdGV4dHVyZVJlY3QpXG5cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvL3BhcnNlIGtlcm5pbmdzXG4gICAgdmFyIGtlcm5pbmdzID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgna2VybmluZycpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBrZXJuaW5ncy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBmaXJzdCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnZmlyc3QnKSwgMTApO1xuICAgICAgICB2YXIgc2Vjb25kID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdzZWNvbmQnKSwgMTApO1xuICAgICAgICB2YXIgYW1vdW50ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdhbW91bnQnKSwgMTApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbc2Vjb25kXS5rZXJuaW5nW2ZpcnN0XSA9IGFtb3VudDtcbiAgICB9XG5cbiAgICByZXNvdXJjZS5iaXRtYXBGb250ID0gZGF0YTtcblxuICAgIC8vIEknbSBsZWF2aW5nIHRoaXMgYXMgYSB0ZW1wb3JhcnkgZml4IHNvIHdlIGNhbiB0ZXN0IHRoZSBiaXRtYXAgZm9udHMgaW4gdjNcbiAgICAvLyBidXQgaXQncyB2ZXJ5IGxpa2VseSB0byBjaGFuZ2VcbiAgICBleHRyYXMuQml0bWFwVGV4dC5mb250c1tkYXRhLmZvbnRdID0gZGF0YTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSBvciBub3QgeG1sIGRhdGFcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhIHx8ICFyZXNvdXJjZS5pc1htbClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNraXAgaWYgbm90IGJpdG1hcCBmb250IGRhdGEsIHVzaW5nIHNvbWUgc2lsbHkgZHVjay10eXBpbmdcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGFnZScpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdLmdldEF0dHJpYnV0ZSgnZmFjZScpID09PSBudWxsXG4gICAgICAgICAgICApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeG1sVXJsID0gcGF0aC5kaXJuYW1lKHJlc291cmNlLnVybCk7XG5cbiAgICAgICAgaWYgKHhtbFVybCA9PT0gJy4nKSB7XG4gICAgICAgICAgICB4bWxVcmwgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJhc2VVcmwgJiYgeG1sVXJsKSB7XG4gICAgICAgICAgICAvLyBpZiBiYXNldXJsIGhhcyBhIHRyYWlsaW5nIHNsYXNoIHRoZW4gYWRkIG9uZSB0byB4bWxVcmwgc28gdGhlIHJlcGxhY2Ugd29ya3MgYmVsb3dcbiAgICAgICAgICAgIGlmICh0aGlzLmJhc2VVcmwuY2hhckF0KHRoaXMuYmFzZVVybC5sZW5ndGggLSAxKSA9PT0gJy8nKSB7XG4gICAgICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcmVtb3ZlIGJhc2VVcmwgZnJvbSB4bWxVcmxcbiAgICAgICAgICAgIHhtbFVybCA9IHhtbFVybC5yZXBsYWNlKHRoaXMuYmFzZVVybCwgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4geG1sVXJsIG5vdywgaXQgbmVlZHMgYSB0cmFpbGluZyBzbGFzaC4gRW5zdXJlIHRoYXQgaXQgZG9lcyBpZiB0aGUgc3RyaW5nIGlzbid0IGVtcHR5LlxuICAgICAgICBpZiAoeG1sVXJsICYmIHhtbFVybC5jaGFyQXQoeG1sVXJsLmxlbmd0aCAtIDEpICE9PSAnLycpIHtcbiAgICAgICAgICAgIHhtbFVybCArPSAnLyc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRleHR1cmVVcmwgPSB4bWxVcmwgKyByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJylbMF0uZ2V0QXR0cmlidXRlKCdmaWxlJyk7XG4gICAgICAgIGlmIChjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSkge1xuICAgICAgICAgICAgLy9yZXVzZSBleGlzdGluZyB0ZXh0dXJlXG4gICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbdGV4dHVyZVVybF0pO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGxvYWRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiByZXNvdXJjZS5tZXRhZGF0YS5pbWFnZU1ldGFkYXRhXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gbG9hZCB0aGUgdGV4dHVyZSBmb3IgdGhlIGZvbnRcbiAgICAgICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgdGV4dHVyZVVybCwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgcmVzLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBsb2FkZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5sb2FkZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIExvYWRlcjogICAgICAgICAgICAgcmVxdWlyZSgnLi9sb2FkZXInKSxcblxuICAgIC8vIHBhcnNlcnNcbiAgICBiaXRtYXBGb250UGFyc2VyOiAgIHJlcXVpcmUoJy4vYml0bWFwRm9udFBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyOiAgcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIHRleHR1cmVQYXJzZXI6ICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlUGFyc2VyJyksXG4gICAgUmVzb3VyY2U6ICAgICAgICAgICByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZVxufTtcbiIsInZhciBSZXNvdXJjZUxvYWRlciA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLFxuICAgIHRleHR1cmVQYXJzZXIgPSByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBzcHJpdGVzaGVldFBhcnNlciA9IHJlcXVpcmUoJy4vc3ByaXRlc2hlZXRQYXJzZXInKSxcbiAgICBiaXRtYXBGb250UGFyc2VyID0gcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyk7XG5cbi8qKlxuICpcbiAqIFRoZSBuZXcgbG9hZGVyLCBleHRlbmRzIFJlc291cmNlIExvYWRlciBieSBDaGFkIEVuZ2xlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9lbmdsZXJjai9yZXNvdXJjZS1sb2FkZXJcbiAqXG4gKiBgYGBqc1xuICogdmFyIGxvYWRlciA9IFBJWEkubG9hZGVyOyAvLyBwaXhpIGV4cG9zZXMgYSBwcmVtYWRlIGluc3RhbmNlIGZvciB5b3UgdG8gdXNlLlxuICogLy9vclxuICogdmFyIGxvYWRlciA9IG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyKCk7IC8vIHlvdSBjYW4gYWxzbyBjcmVhdGUgeW91ciBvd24gaWYgeW91IHdhbnRcbiAqXG4gKiBsb2FkZXIuYWRkKCdidW5ueScsXCJkYXRhL2J1bm55LnBuZ1wiKTtcbiAqXG4gKiBsb2FkZXIub25jZSgnY29tcGxldGUnLG9uQXNzZXRzTG9hZGVkKTtcbiAqXG4gKiBsb2FkZXIubG9hZCgpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlJlc291cmNlTG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5sb2FkZXJzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KVxue1xuICAgIFJlc291cmNlTG9hZGVyLmNhbGwodGhpcywgYmFzZVVybCwgY29uY3VycmVuY3kpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMudXNlKExvYWRlci5fcGl4aU1pZGRsZXdhcmVbaV0oKSk7XG4gICAgfVxufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZXNvdXJjZUxvYWRlci5wcm90b3R5cGUpO1xuTG9hZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbkxvYWRlci5fcGl4aU1pZGRsZXdhcmUgPSBbXG4gICAgLy8gcGFyc2UgYW55IGJsb2IgaW50byBtb3JlIHVzYWJsZSBvYmplY3RzIChlLmcuIEltYWdlKVxuICAgIFJlc291cmNlTG9hZGVyLm1pZGRsZXdhcmUucGFyc2luZy5ibG9iLFxuICAgIC8vIHBhcnNlIGFueSBJbWFnZSBvYmplY3RzIGludG8gdGV4dHVyZXNcbiAgICB0ZXh0dXJlUGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBzcHJpdGVzaGVldFBhcnNlcixcbiAgICAvLyBwYXJzZSBhbnkgc3ByaXRlc2hlZXQgZGF0YSBpbnRvIG11bHRpcGxlIHRleHR1cmVzXG4gICAgYml0bWFwRm9udFBhcnNlclxuXTtcblxuTG9hZGVyLmFkZFBpeGlNaWRkbGV3YXJlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgTG9hZGVyLl9waXhpTWlkZGxld2FyZS5wdXNoKGZuKTtcbn07XG5cbi8vIEFkZCBjdXN0b20gZXh0ZW50aW9uc1xudmFyIFJlc291cmNlID0gUmVzb3VyY2VMb2FkZXIuUmVzb3VyY2U7XG5cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUoJ2ZudCcsIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIHBhdGggPSByZXF1aXJlKCdwYXRoJyksXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBza2lwIGlmIG5vIGRhdGEsIGl0cyBub3QganNvbiwgb3IgaXQgaXNuJ3Qgc3ByaXRlc2hlZXQgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzSnNvbiB8fCAhcmVzb3VyY2UuZGF0YS5mcmFtZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzb3VyY2UuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcm91dGUgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJykpO1xuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwoIHJlc291cmNlLnVybCApO1xuXG4gICAgICAgIC8vIGxvYWQgdGhlIGltYWdlIGZvciB0aGlzIHNoZWV0XG4gICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgcm91dGUgKyAnLycgKyByZXNvdXJjZS5kYXRhLm1ldGEuaW1hZ2UsIGxvYWRPcHRpb25zLCBmdW5jdGlvbiAocmVzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlcyA9IHt9O1xuXG4gICAgICAgICAgICB2YXIgZnJhbWVzID0gcmVzb3VyY2UuZGF0YS5mcmFtZXM7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gZnJhbWVzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gZnJhbWVzW2ldLmZyYW1lO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlY3QpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0cmltID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QuaCwgcmVjdC53KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QudywgcmVjdC5oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vICBDaGVjayB0byBzZWUgaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0udHJpbW1lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpbSA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS54IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS55IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS53IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS5oIC8gcmVzb2x1dGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBmbGlwIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IVxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gc2l6ZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggPSBzaXplLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0ID0gdGVtcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNpemUueCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLnkgLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLmhlaWdodCAvPSByZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzW2ldID0gbmV3IGNvcmUuVGV4dHVyZShyZXMudGV4dHVyZS5iYXNlVGV4dHVyZSwgc2l6ZSwgc2l6ZS5jbG9uZSgpLCB0cmltLCBmcmFtZXNbaV0ucm90YXRlZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0cyBhbHNvIGFkZCB0aGUgZnJhbWUgdG8gcGl4aSdzIGdsb2JhbCBjYWNoZSBmb3IgZnJvbUZyYW1lIGFuZCBmcm9tSW1hZ2UgZnVuY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW2ldID0gcmVzb3VyY2UudGV4dHVyZXNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH0pO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gY3JlYXRlIGEgbmV3IHRleHR1cmUgaWYgdGhlIGRhdGEgaXMgYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgIGlmIChyZXNvdXJjZS5kYXRhICYmIHJlc291cmNlLmlzSW1hZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBiYXNlVGV4dHVyZSA9IG5ldyBjb3JlLkJhc2VUZXh0dXJlKHJlc291cmNlLmRhdGEsIG51bGwsIGNvcmUudXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKHJlc291cmNlLnVybCkpO1xuICAgICAgICAgICAgYmFzZVRleHR1cmUuaW1hZ2VVcmwgPSByZXNvdXJjZS51cmw7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlID0gbmV3IGNvcmUuVGV4dHVyZShiYXNlVGV4dHVyZSk7XG4gICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdWNudGlvbnNcbiAgICAgICAgICAgIGNvcmUudXRpbHMuQmFzZVRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gYmFzZVRleHR1cmU7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gcmVzb3VyY2UudGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgdGVtcFBvbHlnb24gPSBuZXcgY29yZS5Qb2x5Z29uKCk7XG5cbi8qKlxuICogQmFzZSBtZXNoIGNsYXNzXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0byB1c2VcbiAqIEBwYXJhbSBbdmVydGljZXNdIHtGbG9hdDMyQXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHZlcnRpY2VzXG4gKiBAcGFyYW0gW3V2c10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdXZzXG4gKiBAcGFyYW0gW2luZGljZXNdIHtVaW50MTZBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgaW5kaWNlc1xuICogQHBhcmFtIFtkcmF3TW9kZV0ge251bWJlcn0gdGhlIGRyYXdNb2RlLCBjYW4gYmUgYW55IG9mIHRoZSBNZXNoLkRSQVdfTU9ERVMgY29uc3RzXG4gKi9cbmZ1bmN0aW9uIE1lc2godGV4dHVyZSwgdmVydGljZXMsIHV2cywgaW5kaWNlcywgZHJhd01vZGUpXG57XG4gICAgY29yZS5Db250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIG9mIHRoZSBNZXNoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBVdnMgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IHV2cyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxLCAwLFxuICAgICAgICAxLCAxLFxuICAgICAgICAwLCAxXSk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB2ZXJ0aWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSB2ZXJ0aWNlcyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxMDAsIDAsXG4gICAgICAgIDEwMCwgMTAwLFxuICAgICAgICAwLCAxMDBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgLy8gIFRPRE8gYXV0byBnZW5lcmF0ZSB0aGlzIGJhc2VkIG9uIGRyYXcgbW9kZSFcbiAgICB0aGlzLmluZGljZXMgPSBpbmRpY2VzIHx8IG5ldyBVaW50MTZBcnJheShbMCwgMSwgMywgMl0pO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgTWVzaCBpcyBkaXJ0eSBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzcHJpdGUuIFNldCB0byBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlbW92ZSBhbnkgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUcmlhbmdsZXMgaW4gY2FudmFzIG1vZGUgYXJlIGF1dG9tYXRpY2FsbHkgYW50aWFsaWFzZWQsIHVzZSB0aGlzIHZhbHVlIHRvIGZvcmNlIHRyaWFuZ2xlcyB0byBvdmVybGFwIGEgYml0IHdpdGggZWFjaCBvdGhlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdheSB0aGUgTWVzaCBzaG91bGQgYmUgZHJhd24sIGNhbiBiZSBhbnkgb2YgdGhlIHtAbGluayBQSVhJLm1lc2guTWVzaC5EUkFXX01PREVTfSBjb25zdHNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAc2VlIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmRyYXdNb2RlID0gZHJhd01vZGUgfHwgTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0g7XG5cbiAgICAvLyBydW4gdGV4dHVyZSBzZXR0ZXI7XG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcblxuICAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgbWVzaCBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1lc2gucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuTWVzaC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNZXNoLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLm1lc2guTWVzaCNcbiAgICAgKi9cbiAgICB0ZXh0dXJlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl90ZXh0dXJlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBXZWJHTCByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMubWVzaCk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5tZXNoLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEsIHRyYW5zZm9ybS5iLCB0cmFuc2Zvcm0uYywgdHJhbnNmb3JtLmQsIHRyYW5zZm9ybS50eCB8IDAsIHRyYW5zZm9ybS50eSB8IDApO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4LCB0cmFuc2Zvcm0udHkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc1RyaWFuZ2xlTWVzaChjb250ZXh0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzKGNvbnRleHQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiBUcmlhbmdsZSBNZXNoIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aCAvIDI7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGggLSAyOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4LCAoaW5kZXggKyAyKSwgKGluZGV4ICsgNCkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiB0cmlhbmdsZSBtb2RlIHVzaW5nIGNhbnZhc1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc1RyaWFuZ2xlcyA9IGZ1bmN0aW9uIChjb250ZXh0KVxue1xuICAgIC8vIGRyYXcgdHJpYW5nbGVzISFcbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcblxuICAgIHZhciBsZW5ndGggPSBpbmRpY2VzLmxlbmd0aDtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAzKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4MCA9IGluZGljZXNbaV0gKiAyLCBpbmRleDEgPSBpbmRpY2VzW2kgKyAxXSAqIDIsIGluZGV4MiA9IGluZGljZXNbaSArIDJdICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3Mgb25lIG9mIHRoZSB0cmlhbmdsZXMgdGhhdCBmb3JtIHRoaXMgTWVzaFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHBhcmFtIHZlcnRpY2VzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgTWVzaFxuICogQHBhcmFtIHV2cyB7RmxvYXQzMkFycmF5fSBhIHJlZmVyZW5jZSB0byB0aGUgdXZzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gaW5kZXgwIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgxIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgc2Vjb25kIHZlcnRleFxuICogQHBhcmFtIGluZGV4MiB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIHRoaXJkIHZlcnRleFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZSA9IGZ1bmN0aW9uIChjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleDAsIGluZGV4MSwgaW5kZXgyKVxue1xuICAgIHZhciB0ZXh0dXJlU291cmNlID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2U7XG4gICAgdmFyIHRleHR1cmVXaWR0aCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdmFyIHRleHR1cmVIZWlnaHQgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHZhciB4MCA9IHZlcnRpY2VzW2luZGV4MF0sIHgxID0gdmVydGljZXNbaW5kZXgxXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleDJdO1xuICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4MCArIDFdLCB5MSA9IHZlcnRpY2VzW2luZGV4MSArIDFdLCB5MiA9IHZlcnRpY2VzW2luZGV4MiArIDFdO1xuXG4gICAgdmFyIHUwID0gdXZzW2luZGV4MF0gKiB0ZXh0dXJlV2lkdGgsIHUxID0gdXZzW2luZGV4MV0gKiB0ZXh0dXJlV2lkdGgsIHUyID0gdXZzW2luZGV4Ml0gKiB0ZXh0dXJlV2lkdGg7XG4gICAgdmFyIHYwID0gdXZzW2luZGV4MCArIDFdICogdGV4dHVyZUhlaWdodCwgdjEgPSB1dnNbaW5kZXgxICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MiA9IHV2c1tpbmRleDIgKyAxXSAqIHRleHR1cmVIZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5jYW52YXNQYWRkaW5nID4gMClcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nWCA9IHRoaXMuY2FudmFzUGFkZGluZyAvIHRoaXMud29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIHBhZGRpbmdZID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgY2VudGVyWCA9ICh4MCArIHgxICsgeDIpIC8gMztcbiAgICAgICAgdmFyIGNlbnRlclkgPSAoeTAgKyB5MSArIHkyKSAvIDM7XG5cbiAgICAgICAgdmFyIG5vcm1YID0geDAgLSBjZW50ZXJYO1xuICAgICAgICB2YXIgbm9ybVkgPSB5MCAtIGNlbnRlclk7XG5cbiAgICAgICAgdmFyIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MCA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MCA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIC8vXG5cbiAgICAgICAgbm9ybVggPSB4MSAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTEgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MSA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MSA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIG5vcm1YID0geDIgLSBjZW50ZXJYO1xuICAgICAgICBub3JtWSA9IHkyIC0gY2VudGVyWTtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDIgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTIgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LnNhdmUoKTtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG5cbiAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcblxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICBjb250ZXh0LmNsaXAoKTtcblxuICAgIC8vIENvbXB1dGUgbWF0cml4IHRyYW5zZm9ybVxuICAgIHZhciBkZWx0YSA9ICAodTAgKiB2MSkgICAgICArICh2MCAqIHUyKSAgICAgICsgKHUxICogdjIpICAgICAgLSAodjEgKiB1MikgICAgICAtICh2MCAqIHUxKSAgICAgIC0gKHUwICogdjIpO1xuICAgIHZhciBkZWx0YUEgPSAoeDAgKiB2MSkgICAgICArICh2MCAqIHgyKSAgICAgICsgKHgxICogdjIpICAgICAgLSAodjEgKiB4MikgICAgICAtICh2MCAqIHgxKSAgICAgIC0gKHgwICogdjIpO1xuICAgIHZhciBkZWx0YUIgPSAodTAgKiB4MSkgICAgICArICh4MCAqIHUyKSAgICAgICsgKHUxICogeDIpICAgICAgLSAoeDEgKiB1MikgICAgICAtICh4MCAqIHUxKSAgICAgIC0gKHUwICogeDIpO1xuICAgIHZhciBkZWx0YUMgPSAodTAgKiB2MSAqIHgyKSArICh2MCAqIHgxICogdTIpICsgKHgwICogdTEgKiB2MikgLSAoeDAgKiB2MSAqIHUyKSAtICh2MCAqIHUxICogeDIpIC0gKHUwICogeDEgKiB2Mik7XG4gICAgdmFyIGRlbHRhRCA9ICh5MCAqIHYxKSAgICAgICsgKHYwICogeTIpICAgICAgKyAoeTEgKiB2MikgICAgICAtICh2MSAqIHkyKSAgICAgIC0gKHYwICogeTEpICAgICAgLSAoeTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhRSA9ICh1MCAqIHkxKSAgICAgICsgKHkwICogdTIpICAgICAgKyAodTEgKiB5MikgICAgICAtICh5MSAqIHUyKSAgICAgIC0gKHkwICogdTEpICAgICAgLSAodTAgKiB5Mik7XG4gICAgdmFyIGRlbHRhRiA9ICh1MCAqIHYxICogeTIpICsgKHYwICogeTEgKiB1MikgKyAoeTAgKiB1MSAqIHYyKSAtICh5MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB5MikgLSAodTAgKiB5MSAqIHYyKTtcblxuICAgIGNvbnRleHQudHJhbnNmb3JtKGRlbHRhQSAvIGRlbHRhLCBkZWx0YUQgLyBkZWx0YSxcbiAgICAgICAgZGVsdGFCIC8gZGVsdGEsIGRlbHRhRSAvIGRlbHRhLFxuICAgICAgICBkZWx0YUMgLyBkZWx0YSwgZGVsdGFGIC8gZGVsdGEpO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UodGV4dHVyZVNvdXJjZSwgMCwgMCk7XG4gICAgY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5cblxuLyoqXG4gKiBSZW5kZXJzIGEgZmxhdCBNZXNoXG4gKlxuICogQHBhcmFtIE1lc2gge1BJWEkubWVzaC5NZXNofSBUaGUgTWVzaCB0byByZW5kZXJcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLnJlbmRlck1lc2hGbGF0ID0gZnVuY3Rpb24gKE1lc2gpXG57XG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgdmFyIHZlcnRpY2VzID0gTWVzaC52ZXJ0aWNlcztcblxuICAgIHZhciBsZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGgvMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgIGZvciAodmFyIGk9MTsgaSA8IGxlbmd0aC0yOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpKjI7XG5cbiAgICAgICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXhdLCAgIHgxID0gdmVydGljZXNbaW5kZXgrMl0sIHgyID0gdmVydGljZXNbaW5kZXgrNF07XG4gICAgICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4KzFdLCB5MSA9IHZlcnRpY2VzW2luZGV4KzNdLCB5MiA9IHZlcnRpY2VzW2luZGV4KzVdO1xuXG4gICAgICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgyLCB5Mik7XG4gICAgfVxuXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnI0ZGMDAwMCc7XG4gICAgY29udGV4dC5maWxsKCk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbn07XG5cbi8qKlxuICogV2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLCB0aGlzIGV2ZW50IHdpbGwgZmlyZSB0byB1cGRhdGUgdGhlIHNjYWxlIGFuZCBmcmFtZVxuICpcbiAqIEBwYXJhbSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51cGRhdGVGcmFtZSA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgbWVzaCBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAoIXRoaXMuX2N1cnJlbnRCb3VuZHMpIHtcbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gbWF0cml4IHx8IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICAgICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSB2ZXJ0aWNlcy5sZW5ndGg7IGkgPCBuOyBpICs9IDIpIHtcbiAgICAgICAgICAgIHZhciByYXdYID0gdmVydGljZXNbaV0sIHJhd1kgPSB2ZXJ0aWNlc1tpICsgMV07XG4gICAgICAgICAgICB2YXIgeCA9IChhICogcmF3WCkgKyAoYyAqIHJhd1kpICsgdHg7XG4gICAgICAgICAgICB2YXIgeSA9IChkICogcmF3WSkgKyAoYiAqIHJhd1gpICsgdHk7XG5cbiAgICAgICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG5cbiAgICAgICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuICAgICAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWluWCA9PT0gLUluZmluaXR5IHx8IG1heFkgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBtZXNoLiBXb3JrcyBvbmx5IGZvciBUUklBTkdMRV9NRVNIXG4gKlxuICogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuICovXG5NZXNoLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50ICkge1xuICAgIGlmICghdGhpcy5nZXRCb3VuZHMoKS5jb250YWlucyhwb2ludC54LCBwb2ludC55KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHBvaW50cyA9IHRlbXBQb2x5Z29uLnBvaW50cztcbiAgICB2YXIgaSwgbGVuO1xuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVMpIHtcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgICAgIGxlbiA9IHRoaXMuaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgIC8vVE9ETzogaW5saW5lIHRoaXMuXG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTMpIHtcbiAgICAgICAgICAgIHZhciBpbmQwID0gaW5kaWNlc1tpXSoyLCBpbmQxID0gaW5kaWNlc1tpKzFdKjIsIGluZDIgPSBpbmRpY2VzW2krMl0qMjtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2luZDBdO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaW5kMCsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2luZDFdO1xuICAgICAgICAgICAgcG9pbnRzWzNdID0gdmVydGljZXNbaW5kMSsxXTtcbiAgICAgICAgICAgIHBvaW50c1s0XSA9IHZlcnRpY2VzW2luZDJdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaW5kMisxXTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBsZW4gPSB2ZXJ0aWNlcy5sZW5ndGg7XG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTYpIHtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2ldO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaSsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2krMl07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpKzNdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaSs0XTtcbiAgICAgICAgICAgIHBvaW50c1s1XSA9IHZlcnRpY2VzW2krNV07XG4gICAgICAgICAgICBpZiAodGVtcFBvbHlnb24uY29udGFpbnModGVtcFBvaW50LngsIHRlbXBQb2ludC55KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGlmZmVyZW50IGRyYXdpbmcgYnVmZmVyIG1vZGVzIHN1cHBvcnRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX01FU0hcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFU1xuICovXG5NZXNoLkRSQVdfTU9ERVMgPSB7XG4gICAgVFJJQU5HTEVfTUVTSDogMCxcbiAgICBUUklBTkdMRVM6IDFcbn07XG4iLCJ2YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xuXG4vKipcbiAqIFRoZSBQbGFuZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciBQbGFuZSA9IG5ldyBQSVhJLlBsYW5lKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIFBsYW5lLlxuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWCAtIFRoZSBudW1iZXIgb3ggeCBzZWdtZW50c1xuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWSAtIFRoZSBudW1iZXIgb2YgeSBzZWdtZW50c1xuICpcbiAqL1xuZnVuY3Rpb24gUGxhbmUodGV4dHVyZSwgc2VnbWVudHNYLCBzZWdtZW50c1kpXG57XG4gICAgTWVzaC5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tlciBmb3IgaWYgdGhlIFBsYW5lIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuc2VnbWVudHNYID0gIHNlZ21lbnRzWCB8fCAxMDtcbiAgICB0aGlzLnNlZ21lbnRzWSA9IHNlZ21lbnRzWSB8fCAxMDtcblxuICAgIHRoaXMuZHJhd01vZGUgPSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVTO1xuICAgIHRoaXMucmVmcmVzaCgpO1xuXG59XG5cblxuLy8gY29uc3RydWN0b3JcblBsYW5lLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIE1lc2gucHJvdG90eXBlICk7XG5QbGFuZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQbGFuZTtcbm1vZHVsZS5leHBvcnRzID0gUGxhbmU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5QbGFuZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgdG90YWwgPSB0aGlzLnNlZ21lbnRzWCAqIHRoaXMuc2VnbWVudHNZO1xuICAgIHZhciB2ZXJ0cyA9IFtdO1xuICAgIHZhciBjb2xvcnMgPSBbXTtcbiAgICB2YXIgdXZzID0gW107XG4gICAgdmFyIGluZGljZXMgPSBbXTtcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMudGV4dHVyZTtcblxuICAvLyAgdGV4dHVyZS53aWR0aCA9IDgwMCB0ZXh0dXJlLndpZHRoIHx8IDgwMDtcbiAvLyAgIHRleHR1cmUuaGVpZ2h0ID0gODAwLy90ZXh0dXJlLmhlaWdodCB8fCA4MDA7XG5cbiAgICB2YXIgc2VnbWVudHNYU3ViID0gdGhpcy5zZWdtZW50c1ggLSAxO1xuICAgIHZhciBzZWdtZW50c1lTdWIgPSB0aGlzLnNlZ21lbnRzWSAtIDE7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgdmFyIHNpemVYID0gdGV4dHVyZS53aWR0aCAvIHNlZ21lbnRzWFN1YjtcbiAgICB2YXIgc2l6ZVkgPSB0ZXh0dXJlLmhlaWdodCAvIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbDsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHggPSAoaSAlIHRoaXMuc2VnbWVudHNYKTtcbiAgICAgICAgdmFyIHkgPSAoIChpIC8gdGhpcy5zZWdtZW50c1ggKSB8IDAgKTtcblxuXG4gICAgICAgIHZlcnRzLnB1c2goKHggKiBzaXplWCksXG4gICAgICAgICAgICAgICAgICAgKHkgKiBzaXplWSkpO1xuXG4gICAgICAgIC8vIHRoaXMgd29ya3MgZm9yIHJlY3Rhbmd1bGFyIHRleHR1cmVzLiBcbiAgICAgICAgdXZzLnB1c2godGV4dHVyZS5fdXZzLngwICsgKHRleHR1cmUuX3V2cy54MSAtIHRleHR1cmUuX3V2cy54MCkgKiAoeCAvICh0aGlzLnNlZ21lbnRzWC0xKSksIHRleHR1cmUuX3V2cy55MCArICh0ZXh0dXJlLl91dnMueTMtdGV4dHVyZS5fdXZzLnkwKSAqICh5LyAodGhpcy5zZWdtZW50c1ktMSkpKTtcbiAgICAgIH1cblxuICAgIC8vICBjb25zXG5cbiAgICB2YXIgdG90YWxTdWIgPSBzZWdtZW50c1hTdWIgKiBzZWdtZW50c1lTdWI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTdWI7IGkrKykge1xuXG4gICAgICAgIHZhciB4cG9zID0gaSAlIHNlZ21lbnRzWFN1YjtcbiAgICAgICAgdmFyIHlwb3MgPSAoaSAvIHNlZ21lbnRzWFN1YiApIHwgMDtcblxuXG4gICAgICAgIHZhciAgdmFsdWUgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWUyID0gKHlwb3MgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zICsgMTtcbiAgICAgICAgdmFyICB2YWx1ZTMgPSAoKHlwb3MrMSkgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zO1xuICAgICAgICB2YXIgIHZhbHVlNCA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuXG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZSwgdmFsdWUyLCB2YWx1ZTMpO1xuICAgICAgICBpbmRpY2VzLnB1c2godmFsdWUyLCB2YWx1ZTQsIHZhbHVlMyk7XG4gICAgfVxuXG5cbiAgICAvL2NvbnNvbGUubG9nKGluZGljZXMpXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkodmVydHMpO1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheSh1dnMpO1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShjb2xvcnMpO1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShpbmRpY2VzKTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGV4dHVyZSBVVnMgd2hlbiBuZXcgdGV4dHVyZSBpcyBzZXRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QbGFuZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFBsYW5lIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBUaGUgcm9wZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciByb3BlID0gbmV3IFBJWEkuUm9wZShQSVhJLlRleHR1cmUuZnJvbUltYWdlKFwic25ha2UucG5nXCIpLCBwb2ludHMpO1xuICogIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5tZXNoLk1lc2hcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB7UElYSS5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIHRleHR1cmUgdG8gdXNlIG9uIHRoZSByb3BlLlxuICogQHBhcmFtIHtQSVhJLlBvaW50W119IHBvaW50cyAtIEFuIGFycmF5IG9mIHtAbGluayBQSVhJLlBvaW50fSBvYmplY3RzIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gKlxuICovXG5mdW5jdGlvbiBSb3BlKHRleHR1cmUsIHBvaW50cylcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnRbXX0gQW4gYXJyYXkgb2YgcG9pbnRzIHRoYXQgZGV0ZXJtaW5lIHRoZSByb3BlXG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgb2YgdmVydGljZXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhpcyByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBUaGUgV2ViR0wgVXZzIG9mIHRoZSByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogNCk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgY29sb3IgY29tcG9uZW50c1xuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgcm9wZSBpcyByZWFkeSB0byBiZSBkcmF3bi4gTmVlZGVkIGJlY2F1c2UgTWVzaCBjdG9yIGNhblxuICAgICAqIGNhbGwgX29uVGV4dHVyZVVwZGF0ZWQgd2hpY2ggY291bGQgY2FsbCByZWZyZXNoIHRvbyBlYXJseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgIHRoaXMucmVmcmVzaCgpO1xufVxuXG5cbi8vIGNvbnN0cnVjdG9yXG5Sb3BlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTWVzaC5wcm90b3R5cGUpO1xuUm9wZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3BlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3BlO1xuXG4vKipcbiAqIFJlZnJlc2hlc1xuICpcbiAqL1xuUm9wZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgLy8gaWYgdG9vIGxpdHRsZSBwb2ludHMsIG9yIHRleHR1cmUgaGFzbid0IGdvdCBVVnMgc2V0IHlldCBqdXN0IG1vdmUgb24uXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxIHx8ICF0aGlzLl90ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuXG4gICAgdmFyIHRleHR1cmVVdnMgPSB0aGlzLl90ZXh0dXJlLl91dnM7XG4gICAgdmFyIG9mZnNldCA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDAsIHRleHR1cmVVdnMueTApO1xuICAgIHZhciBmYWN0b3IgPSBuZXcgY29yZS5Qb2ludCh0ZXh0dXJlVXZzLngyIC0gdGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MiAtIHRleHR1cmVVdnMueTApO1xuXG4gICAgdXZzWzBdID0gMCArIG9mZnNldC54O1xuICAgIHV2c1sxXSA9IDAgKyBvZmZzZXQueTtcbiAgICB1dnNbMl0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICBjb2xvcnNbMF0gPSAxO1xuICAgIGNvbG9yc1sxXSA9IDE7XG5cbiAgICBpbmRpY2VzWzBdID0gMDtcbiAgICBpbmRpY2VzWzFdID0gMTtcblxuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgYW1vdW50O1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG4gICAgICAgIC8vIHRpbWUgdG8gZG8gc29tZSBzbWFydCBkcmF3aW5nIVxuICAgICAgICBhbW91bnQgPSBpIC8gKHRvdGFsLTEpO1xuXG4gICAgICAgIHV2c1tpbmRleF0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrMV0gPSAwICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgdXZzW2luZGV4KzJdID0gYW1vdW50ICogZmFjdG9yLnggKyBvZmZzZXQueDtcbiAgICAgICAgdXZzW2luZGV4KzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgY29sb3JzW2luZGV4XSA9IDE7XG4gICAgICAgIGNvbG9yc1tpbmRleCsxXSA9IDE7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgaW5kaWNlc1tpbmRleF0gPSBpbmRleDtcbiAgICAgICAgaW5kaWNlc1tpbmRleCArIDFdID0gaW5kZXggKyAxO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIE1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUuY2FsbCh0aGlzKTtcblxuICAgIC8vIHdhaXQgZm9yIHRoZSBSb3BlIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Sb3BlLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbGFzdFBvaW50ID0gcG9pbnRzWzBdO1xuICAgIHZhciBuZXh0UG9pbnQ7XG4gICAgdmFyIHBlcnBYID0gMDtcbiAgICB2YXIgcGVycFkgPSAwO1xuXG4gICAgLy8gdGhpcy5jb3VudCAtPSAwLjI7XG5cbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgcmF0aW8sIHBlcnBMZW5ndGgsIG51bTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWw7IGkrKylcbiAgICB7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBpbmRleCA9IGkgKiA0O1xuXG4gICAgICAgIGlmIChpIDwgcG9pbnRzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0UG9pbnQgPSBwb2ludHNbaSsxXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcGVycFkgPSAtKG5leHRQb2ludC54IC0gbGFzdFBvaW50LngpO1xuICAgICAgICBwZXJwWCA9IG5leHRQb2ludC55IC0gbGFzdFBvaW50Lnk7XG5cbiAgICAgICAgcmF0aW8gPSAoMSAtIChpIC8gKHRvdGFsLTEpKSkgKiAxMDtcblxuICAgICAgICBpZiAocmF0aW8gPiAxKVxuICAgICAgICB7XG4gICAgICAgICAgICByYXRpbyA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwTGVuZ3RoID0gTWF0aC5zcXJ0KHBlcnBYICogcGVycFggKyBwZXJwWSAqIHBlcnBZKTtcbiAgICAgICAgbnVtID0gdGhpcy5fdGV4dHVyZS5oZWlnaHQgLyAyOyAvLygyMCArIE1hdGguYWJzKE1hdGguc2luKChpICsgdGhpcy5jb3VudCkgKiAwLjMpICogNTApICkqIHJhdGlvO1xuICAgICAgICBwZXJwWCAvPSBwZXJwTGVuZ3RoO1xuICAgICAgICBwZXJwWSAvPSBwZXJwTGVuZ3RoO1xuXG4gICAgICAgIHBlcnBYICo9IG51bTtcbiAgICAgICAgcGVycFkgKj0gbnVtO1xuXG4gICAgICAgIHZlcnRpY2VzW2luZGV4XSA9IHBvaW50LnggKyBwZXJwWDtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMV0gPSBwb2ludC55ICsgcGVycFk7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzJdID0gcG9pbnQueCAtIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCszXSA9IHBvaW50LnkgLSBwZXJwWTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBwb2ludDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkubWVzaFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNZXNoOiAgICAgICAgICAgcmVxdWlyZSgnLi9NZXNoJyksXG4gICAgUGxhbmU6ICAgICAgICAgICByZXF1aXJlKCcuL1BsYW5lJyksXG4gICAgUm9wZTogICAgICAgICAgIHJlcXVpcmUoJy4vUm9wZScpLFxuICAgIE1lc2hSZW5kZXJlcjogICByZXF1aXJlKCcuL3dlYmdsL01lc2hSZW5kZXJlcicpLFxuICAgIE1lc2hTaGFkZXI6ICAgICByZXF1aXJlKCcuL3dlYmdsL01lc2hTaGFkZXInKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIE1lc2ggPSByZXF1aXJlKCcuLi9NZXNoJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgTWVzaFJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9NZXNoUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgY29yZS5PYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIFxuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSgxNTAwMCk7XG5cbiAgICAvL1RPRE8gdGhpcyBjb3VsZCBiZSBhIHNpbmdsZSBidWZmZXIgc2hhcmVkIGFtb25nc3QgYWxsIHJlbmRlcmVycyBhcyB3ZSByZXVzZSB0aGlzIHNldCB1cCBpbiBtb3N0IHJlbmRlcmVyc1xuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgMTUwMDA7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufVxuXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoUmVuZGVyZXI7XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignbWVzaCcsIE1lc2hSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIG1lc2gge1BJWEkubWVzaC5NZXNofSB0aGUgbWVzaCB0byByZW5kZXJcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICBpZighbWVzaC5fdmVydGV4QnVmZmVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5faW5pdFdlYkdMKG1lc2gpO1xuICAgIH1cblxuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXIsXG4gICAgICAgIGdsID0gcmVuZGVyZXIuZ2wsXG4gICAgICAgIHRleHR1cmUgPSBtZXNoLl90ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBzaGFkZXIgPSBtZXNoLnNoYWRlcjsvLyB8fCByZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnBsdWdpbnMubWVzaFNoYWRlcjtcblxuICAgIHZhciBkcmF3TW9kZSA9IG1lc2guZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIID8gZ2wuVFJJQU5HTEVfU1RSSVAgOiBnbC5UUklBTkdMRVM7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShtZXNoLmJsZW5kTW9kZSk7XG5cbiAgICAvL1RPRE8gY2FjaGUgY3VzdG9tIHN0YXRlLi5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzaGFkZXIgPSBzaGFkZXIuc2hhZGVyc1tnbC5pZF0gfHwgc2hhZGVyLmdldFNoYWRlcihyZW5kZXJlcik7Ly8gOiBzaGFkZXI7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4LnZhbHVlID0gbWVzaC53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gbWVzaC53b3JsZEFscGhhO1xuXG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuXG4gICAgaWYgKCFtZXNoLmRpcnR5KVxuICAgIHtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIG1lc2gudmVydGljZXMpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIHV2c1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cblxuICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCAwLCBtZXNoLmluZGljZXMpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIG1lc2guZGlydHkgPSBmYWxzZTtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZG9udCBuZWVkIHRvIHVwbG9hZCFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIH1cblxuICAgIGdsLmRyYXdFbGVtZW50cyhkcmF3TW9kZSwgbWVzaC5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuXG59O1xuXG4vKipcbiAqIFByZXBhcmVzIGFsbCB0aGUgYnVmZmVycyB0byByZW5kZXIgdGhpcyBtZXNoXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLl9pbml0V2ViR0wgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICAvLyBidWlsZCB0aGUgc3RyaXAhXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIG1lc2guX3ZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIG1lc2guX2luZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5fdXZCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC52ZXJ0aWNlcywgZ2wuRFlOQU1JQ19EUkFXKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgaWYobWVzaC5jb2xvcnMpe1xuICAgICAgICBtZXNoLl9jb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fY29sb3JCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5jb2xvcnMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG59O1xuXG5cbi8qKlxuICogRW1wdGllcyB0aGUgY3VycmVudCBiYXRjaC5cbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBtZXNoIHJlbmRlcmVyLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgXG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgTWVzaCByZW5kZXJlclxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIFdlYkdMIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gTWVzaFNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIGNvcmUuU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIGFscGhhIDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYVRleHR1cmVDb29yZDowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5NZXNoU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TaGFkZXIucHJvdG90eXBlKTtcbk1lc2hTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gTWVzaFNoYWRlcjtcblxuY29yZS5TaGFkZXJNYW5hZ2VyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoU2hhZGVyJywgTWVzaFNoYWRlcik7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9zaWduXG5cbmlmICghTWF0aC5zaWduKVxue1xuICAgIE1hdGguc2lnbiA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHggPSAreDtcbiAgICAgICAgaWYgKHggPT09IDAgfHwgaXNOYU4oeCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4ID4gMCA/IDEgOiAtMTtcbiAgICB9O1xufVxuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvb2JqZWN0LWFzc2lnblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnblxuXG5pZiAoIU9iamVjdC5hc3NpZ24pXG57XG4gICAgT2JqZWN0LmFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcbn1cbiIsInJlcXVpcmUoJy4vT2JqZWN0LmFzc2lnbicpO1xucmVxdWlyZSgnLi9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUnKTtcbnJlcXVpcmUoJy4vTWF0aC5zaWduJyk7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cDovL3BhdWxpcmlzaC5jb20vMjAxMS9yZXF1ZXN0YW5pbWF0aW9uZnJhbWUtZm9yLXNtYXJ0LWFuaW1hdGluZy9cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzE1Nzk2NzFcbi8vIGh0dHA6Ly91cGRhdGVzLmh0bWw1cm9ja3MuY29tLzIwMTIvMDUvcmVxdWVzdEFuaW1hdGlvbkZyYW1lLUFQSS1ub3ctd2l0aC1zdWItbWlsbGlzZWNvbmQtcHJlY2lzaW9uXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90aW1oYWxsLzQwNzg2MTRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9GaW5hbmNpYWwtVGltZXMvcG9seWZpbGwtc2VydmljZS90cmVlL21hc3Rlci9wb2x5ZmlsbHMvcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG5cbi8vIEV4cGVjdGVkIHRvIGJlIHVzZWQgd2l0aCBCcm93c2VyZml5XG4vLyBCcm93c2VyaWZ5IGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB0aGUgdXNlIG9mIGBnbG9iYWxgIGFuZCBwYXNzZXMgdGhlXG4vLyBjb3JyZWN0IHJlZmVyZW5jZSBvZiBgZ2xvYmFsYCwgYHNlbGZgLCBhbmQgZmluYWxseSBgd2luZG93YFxuXG4vLyBEYXRlLm5vd1xuaWYgKCEoRGF0ZS5ub3cgJiYgRGF0ZS5wcm90b3R5cGUuZ2V0VGltZSkpIHtcbiAgICBEYXRlLm5vdyA9IGZ1bmN0aW9uIG5vdygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIH07XG59XG5cbi8vIHBlcmZvcm1hbmNlLm5vd1xuaWYgKCEoZ2xvYmFsLnBlcmZvcm1hbmNlICYmIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cpKSB7XG4gICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgaWYgKCFnbG9iYWwucGVyZm9ybWFuY2UpIHtcbiAgICAgICAgZ2xvYmFsLnBlcmZvcm1hbmNlID0ge307XG4gICAgfVxuICAgIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIH07XG59XG5cbi8vIHJlcXVlc3RBbmltYXRpb25GcmFtZVxudmFyIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbnZhciB2ZW5kb3JzID0gWydtcycsICdtb3onLCAnd2Via2l0JywgJ28nXTtcblxuZm9yKHZhciB4ID0gMDsgeCA8IHZlbmRvcnMubGVuZ3RoICYmICFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lOyArK3gpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnQ2FuY2VsQW5pbWF0aW9uRnJhbWUnXSB8fFxuICAgICAgICBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbn1cblxuaWYgKCFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZGVsYXkgPSAxNiArIGxhc3RUaW1lIC0gY3VycmVudFRpbWU7XG5cbiAgICAgICAgaWYgKGRlbGF5IDwgMCkge1xuICAgICAgICAgICAgZGVsYXkgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFRpbWUgPSBjdXJyZW50VGltZTtcblxuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsYXN0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBjYWxsYmFjayhwZXJmb3JtYW5jZS5ub3coKSk7XG4gICAgICAgIH0sIGRlbGF5KTtcbiAgICB9O1xufVxuXG5pZiAoIWdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSkge1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgfTtcbn1cbiJdfQ== +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L09ic2VydmFibGVQb2ludC5qcyIsInNyYy9jb3JlL2Rpc3BsYXkvVHJhbnNmb3JtU3RhdGljLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3MuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9HcmFwaGljc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvV2ViR0xHcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ2lyY2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRDb21wbGV4UG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkTGluZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL01hdHJpeC5qcyIsInNyYy9jb3JlL21hdGgvUG9pbnQuanMiLCJzcmMvY29yZS9tYXRoL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvQ2lyY2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvRWxsaXBzZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1BvbHlnb24uanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9SZWN0YW5nbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlQnVmZmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvU3lzdGVtUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNNYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1RleHR1cmVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9NYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUXVhZC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvU3RlbmNpbE1hc2tTdGFjay5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9zcHJpdGVzL1Nwcml0ZS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvdGV4dC9UZXh0LmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9CYXNlVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1JlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9UZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZVV2cy5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90aWNrZXIvVGlja2VyLmpzIiwic3JjL2NvcmUvdGlja2VyL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzLmpzIiwic3JjL2NvcmUvdXRpbHMvaW5kZXguanMiLCJzcmMvY29yZS91dGlscy9wbHVnaW5UYXJnZXQuanMiLCJzcmMvZGVwcmVjYXRpb24uanMiLCJzcmMvZXh0cmFzL0JpdG1hcFRleHQuanMiLCJzcmMvZXh0cmFzL01vdmllQ2xpcC5qcyIsInNyYy9leHRyYXMvVGlsaW5nU3ByaXRlLmpzIiwic3JjL2V4dHJhcy9jYWNoZUFzQml0bWFwLmpzIiwic3JjL2V4dHJhcy9nZXRDaGlsZEJ5TmFtZS5qcyIsInNyYy9leHRyYXMvZ2V0R2xvYmFsUG9zaXRpb24uanMiLCJzcmMvZXh0cmFzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvYXNjaWkvQXNjaWlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibG9vbS9CbG9vbUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckRpckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1clhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9TbWFydEJsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvck1hdHJpeEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbG9yL0NvbG9yU3RlcEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2RvdC9Eb3RTY3JlZW5GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0JsdXJZVGludEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2dyYXkvR3JheUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvaW52ZXJ0L0ludmVydEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL25vaXNlL05vaXNlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9yZ2IvUkdCU3BsaXRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zZXBpYS9TZXBpYUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0QXhpc0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdHdpc3QvVHdpc3RGaWx0ZXIuanMiLCJzcmMvc3JjL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL0ludGVyYWN0aW9uRGF0YS5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbk1hbmFnZXIuanMiLCJzcmMvaW50ZXJhY3Rpb24vaW5kZXguanMiLCJzcmMvaW50ZXJhY3Rpb24vaW50ZXJhY3RpdmVUYXJnZXQuanMiLCJzcmMvbG9hZGVycy9iaXRtYXBGb250UGFyc2VyLmpzIiwic3JjL2xvYWRlcnMvaW5kZXguanMiLCJzcmMvbG9hZGVycy9sb2FkZXIuanMiLCJzcmMvbG9hZGVycy9zcHJpdGVzaGVldFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL3RleHR1cmVQYXJzZXIuanMiLCJzcmMvbWVzaC9NZXNoLmpzIiwic3JjL21lc2gvUGxhbmUuanMiLCJzcmMvbWVzaC9Sb3BlLmpzIiwic3JjL21lc2gvaW5kZXguanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoUmVuZGVyZXIuanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoU2hhZGVyLmpzIiwic3JjL3BvbHlmaWxsL01hdGguc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9PYmplY3QuYXNzaWduLmpzIiwic3JjL3BvbHlmaWxsL2luZGV4LmpzIiwic3JjL3BvbHlmaWxsL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzV1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNyaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbm1DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Y0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2h5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNWxCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM21CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25iQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICBjcmVhdGVDb250ZXh0OiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9jcmVhdGVDb250ZXh0JyksXG4gICAgc2V0VmVydGV4QXR0cmliQXJyYXlzOiBcdHJlcXVpcmUoJy4vbGliL3NldFZlcnRleEF0dHJpYkFycmF5cycpLFxuICAgIFxuICAgIEdMQnVmZmVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMQnVmZmVyJyksXG4gICAgR0xGcmFtZWJ1ZmZlcjogXHRcdFx0cmVxdWlyZSgnLi9saWIvR0xGcmFtZWJ1ZmZlcicpLFxuICAgIEdMU2hhZGVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMU2hhZGVyJyksXG4gICAgR0xUZXh0dXJlOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMVGV4dHVyZScpLFxuICAgIFxuICAgIFZlcnRleEFycmF5T2JqZWN0OiBcdFx0cmVxdWlyZSgnLi9saWIvVmVydGV4QXJyYXlPYmplY3QnKVxuXG59OyIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEVNUFRZX0FSUkFZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcblxudmFyIEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuQVJSQVlfQlVGRkVSO1xuXHR0aGlzLmRyYXdUeXBlID0gZHJhd1R5cGUgfHwgZ2wuU1RBVElDX0RSQVc7XG5cdHRoaXMuZGF0YSA9IEVNUFRZX0FSUkFZX0JVRkZFUjtcblxuXHRpZihkYXRhKVxuXHR7XG5cdFx0dGhpcy51cGxvYWQoZGF0YSk7XG5cdH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihkYXRhLCBvZmZzZXQsIGRvbnRCaW5kKVxue1xuXHQvLyB0b2RvIC0gbmVlZGVkP1xuXHQvL2lmKCFkb250QmluZClcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblx0XG5cdGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcblx0b2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cblx0aWYodGhpcy5kYXRhLmJ5dGVMZW5ndGggPj0gZGF0YS5ieXRlTGVuZ3RoKVxuXHR7XHRcblx0XHRnbC5idWZmZXJTdWJEYXRhKHRoaXMudHlwZSwgb2Zmc2V0LCBkYXRhKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC5idWZmZXJEYXRhKHRoaXMudHlwZSwgZGF0YSwgdGhpcy5kcmF3VHlwZSk7XG5cdH1cblxuXHR0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRCdWZmZXIodGhpcy50eXBlLCB0aGlzLmJ1ZmZlcik7XG59XG5cbkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24oZ2wsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZSA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIHR5cGUsIGRyYXdUeXBlKTtcbn1cblxuLy9UT0RPIERlc3Ryb3kuLlxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcjtcblxuIiwiXG52YXIgVGV4dHVyZSA9IHJlcXVpcmUoJy4vR0xUZXh0dXJlJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIEZyYW1lYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEZyYW1lYnVmZmVyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblx0XG5cdHRoaXMuc3RlbmNpbCA9IG51bGw7XG5cdHRoaXMudGV4dHVyZSA9IG51bGw7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlVGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBuZXcgVGV4dHVyZShnbCk7XG5cblx0dGhpcy50ZXh0dXJlLmJpbmQoKTtcblxuXHQvL2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZS50ZXh0dXJlLCAwKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmVuYWJsZVN0ZW5jaWwgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuc3RlbmNpbClyZXR1cm47XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnN0ZW5jaWwgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcbiAgICBcbiAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBcbiAgICAvLyBUT0RPLi4gdGhpcyBpcyBkZXB0aCBBTkQgc3RlbmNpbD9cbiAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsICB0aGlzLndpZHRoICAsIHRoaXMuaGVpZ2h0ICk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCByLCBnLCBiLCBhIClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICBnbC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpO1xuICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLmZyYW1lYnVmZmVyICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuXHRpZiAoIHRoaXMudGV4dHVyZSApXG4gICAge1xuICAgIFx0dGhpcy50ZXh0dXJlLnVwbG9hZERhdGEobnVsbCwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRpZiAoIHRoaXMuc3RlbmNpbCApXG4gICAge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0ZW5jaWwgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0dmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21EYXRhKGdsLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0dGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgZmJvLnVuYmluZCgpO1xuICAgIFxuICAgIHJldHVybiBmYm87XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZUZsb2F0MzIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0Ly8gY3JlYXRlIGEgbmV3IHRleHR1cmUuLlxuICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUuZnJvbURhdGEoZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuICAgIHRleHR1cmUuZW5hYmxlTmVhcmVzdFNjYWxpbmcoKTtcbiAgICB0ZXh0dXJlLmVuYWJsZVdyYXBDbGFtcCgpO1xuXG4gICAgLy9ub3cgY3JlYXRlIHRoZSBmcmFtZWJ1ZmZlciBvYmplY3QgYW5kIGF0dGFjaCB0aGUgdGV4dHVyZSB0byBpdC5cbiAgICB2YXIgZmJvID0gbmV3IEZyYW1lYnVmZmVyKGdsLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICBmYm8uZW5hYmxlVGV4dHVyZSh0ZXh0dXJlKVxuXG4gICAgZmJvLnVuYmluZCgpO1xuXG4gICAgcmV0dXJuIGZibztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGcmFtZWJ1ZmZlcjtcblxuIiwiXG52YXIgY29tcGlsZVByb2dyYW0gPSByZXF1aXJlKCcuL3NoYWRlci9jb21waWxlUHJvZ3JhbScpLFxuXHRleHRyYWN0QXR0cmlidXRlcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RBdHRyaWJ1dGVzJyksXG5cdGV4dHJhY3RVbmlmb3JtcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RVbmlmb3JtcycpLFxuXHRnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QgPSByZXF1aXJlKCcuL3NoYWRlci9nZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgU2hhZGVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cbnZhciBTaGFkZXIgPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIEZpcnN0IGNvbXBpbGUgdGhlIHByb2dyYW0uLlxuXHR0aGlzLnByb2dyYW0gPSBjb21waWxlUHJvZ3JhbShnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7XG5cblx0Ly8gbmV4dCBleHRyYWN0IHRoZSBhdHRyaWJ1dGVzXG5cdHRoaXMuYXR0cmlidXRlcyA9IGV4dHJhY3RBdHRyaWJ1dGVzKGdsLCB0aGlzLnByb2dyYW0pOyBcblxuICAgIHZhciB1bmlmb3JtRGF0YSA9IGV4dHJhY3RVbmlmb3JtcyhnbCwgdGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMudW5pZm9ybXMgPSBnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QoIGdsLCB1bmlmb3JtRGF0YSApO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4iLCJcbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gYSBXZWJHTCBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGZvcm1hdCB7bnVtYmVyfSB0aGUgcGl4ZWwgZm9ybWF0IG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5SR0JBXG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSB0aGUgZ2wgdHlwZSBvZiB0aGUgdGV4dHVyZS4gZGVmYXVsdHMgdG8gZ2wuVU5TSUdORURfQllURVxuICovXG52YXIgVGV4dHVyZSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLnRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cblx0Ly8gc29tZSBzZXR0aW5ncy4uXG5cdHRoaXMubWlwbWFwID0gZmFsc2U7XG5cblx0dGhpcy5wcmVtdWx0aXBseUFscGhhID0gZmFsc2U7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cblx0dGhpcy5mb3JtYXQgPSBmb3JtYXQgfHwgZ2wuUkdCQTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5VTlNJR05FRF9CWVRFO1xuXG5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge1BJWEkuZ2xDb3JlLlRleHR1cmV9IFt2YXJuYW1lXSBbZGVzY3JpcHRpb25dXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKHNvdXJjZSlcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gc291cmNlLndpZHRoO1xuXHR0aGlzLmhlaWdodCA9IHNvdXJjZS5oZWlnaHQ7XG5cblx0Z2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xuICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMuZm9ybWF0LCB0aGlzLnR5cGUsIHNvdXJjZSk7XG59XG5cbnZhciBGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSBmYWxzZTtcblxuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkRGF0YSA9IGZ1bmN0aW9uKGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuYmluZCgpO1xuXHRcblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IHRoaXMud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IHRoaXMuaGVpZ2h0O1xuXG5cdGlmKGRhdGEgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpXG5cdHtcblx0XHRpZighRkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFKVxuXHRcdHtcblx0XHRcdHZhciBleHQgPSBnbC5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9mbG9hdFwiKTtcblx0XHRcdFxuXHRcdFx0aWYoZXh0KVxuXHRcdFx0e1xuXHRcdFx0XHRGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2Zsb2F0aW5nIHBvaW50IHRleHR1cmVzIG5vdCBhdmFpbGFibGUnKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnR5cGUgPSBnbC5GTE9BVDtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHQvLyBUT0RPIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzXG5cdFx0dGhpcy50eXBlID0gZ2wuVU5TSUdORURfQllURTtcblx0fVxuXG5cdC8vIHdoYXQgdHlwZSBvZiBkYXRhP1xuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG5cdGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsICB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgZGF0YSB8fCBudWxsKTtcblxufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24obG9jYXRpb24pXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0aWYobG9jYXRpb24gIT09IHVuZGVmaW5lZClcblx0e1xuXHRcdGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbik7XG5cdH1cblxuXHRnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0aGlzLnRleHR1cmUpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIG51bGwpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5taW5GaWx0ZXIgPSBmdW5jdGlvbiggbGluZWFyIClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRpZih0aGlzLm1pcG1hcClcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVJfTUlQTUFQX0xJTkVBUiA6IGdsLk5FQVJFU1RfTUlQTUFQX05FQVJFU1QpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcblx0fVx0XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1hZ0ZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTWlwbWFwID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR0aGlzLm1pcG1hcCA9IHRydWU7XG5cdGdsLmdlbmVyYXRlTWlwbWFwKGdsLlRFWFRVUkVfMkQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVMaW5lYXJTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcih0cnVlKTtcblx0dGhpcy5tYWdGaWx0ZXIodHJ1ZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZU5lYXJlc3RTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcihmYWxzZSk7XG5cdHRoaXMubWFnRmlsdGVyKGZhbHNlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlV3JhcENsYW1wID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwUmVwZWF0ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXHRcblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuUkVQRUFUKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5SRVBFQVQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlVGV4dHVyZSh0aGlzLnRleHR1cmUpO1xufVxuXG4vL1RleHR1cmUuXG5UZXh0dXJlLmZyb21Tb3VyY2UgPSBmdW5jdGlvbihnbCwgc291cmNlLCBwcmVtdWx0aXBseUFscGhhKVxue1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS5wcmVtdWx0aXBseUFscGhhID0gcHJlbXVsdGlwbHlBbHBoYSB8fCBmYWxzZTtcblx0dGV4dHVyZS51cGxvYWQoc291cmNlKTtcblxuXHRyZXR1cm4gdGV4dHVyZTtcbn1cblxuVGV4dHVyZS5mcm9tRGF0YSA9IGZ1bmN0aW9uKGdsLCBkYXRhLCB3aWR0aCwgaGVpZ2h0KVxue1xuXHQvL2NvbnNvbGUubG9nKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS51cGxvYWREYXRhKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZTtcblxuIiwiXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbi8vIHN0YXRlIG9iamVjdC8vXG5cblxuZnVuY3Rpb24gVmVydGV4QXJyYXlPYmplY3QoZ2wpXG57XG5cdFxuXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IChcbiAgICAgIGdsLmdldEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKVxuICAgICk7XG5cbi8vXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IG51bGw7XG5cblx0aWYodGhpcy5uYXRpdmVWYW9FeHRlbnNpb24pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhbyA9IHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7ICBcblx0fVxuXG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcblxuXHR0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuXHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cblx0XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZlcnRleEFycmF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBWZXJ0ZXhBcnJheU9iamVjdDtcblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKHRoaXMubmF0aXZlVmFvKTsgIFxuXG5cdFx0aWYodGhpcy5kaXJ0eSlcblx0XHR7XG5cdFx0XHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cdFx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdFx0fVxuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLm5hdGl2ZVZhbylcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIFxuXHR7XG5cdFx0dmFyIGF0dHJpYiA9IHRoaXMuYXR0cmlidXRlc1tpXTtcblx0XHRhdHRyaWIuYnVmZmVyLmJpbmQoKTtcdFxuXG5cdFx0YXR0cmliLmF0dHJpYnV0ZS5wb2ludGVyKGF0dHJpYi50eXBlLCBhdHRyaWIubm9ybWFsaXplZCwgYXR0cmliLnN0cmlkZSwgYXR0cmliLnN0YXJ0KTsgXG5cdFx0XG5cdFx0Z2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYXR0cmliLmF0dHJpYnV0ZS5sb2NhdGlvbik7XG5cdH07XG5cblx0dGhpcy5pbmRleEJ1ZmZlci5iaW5kKCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRBdHRyaWJ1dGUgPSBmdW5jdGlvbihidWZmZXIsIGF0dHJpYnV0ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydClcbntcbiAgICB0aGlzLmF0dHJpYnV0ZXMucHVzaCh7XG4gICAgXHRidWZmZXI6IFx0YnVmZmVyLFxuICAgIFx0YXR0cmlidXRlOiBcdGF0dHJpYnV0ZSxcblxuICAgIFx0bG9jYXRpb246IFx0YXR0cmlidXRlLmxvY2F0aW9uLFxuXHQgXHR0eXBlOiBcdFx0dHlwZSB8fCB0aGlzLmdsLkZMT0FULFxuXHQgXHRub3JtYWxpemVkOiBub3JtYWxpemVkIHx8IGZhbHNlLFxuXHQgXHRzdHJpZGU6IFx0c3RyaWRlIHx8IDAsXG5cdCBcdHN0YXJ0OiBcdFx0c3RhcnQgfHwgMFxuXHR9KVxuXG5cdHRoaXMuZGlydHkgPSB0cnVlO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRJbmRleCA9IGZ1bmN0aW9uKGJ1ZmZlciwgb3B0aW9ucylcbntcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gYnVmZmVyO1xuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBzdGFydClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuZHJhd0VsZW1lbnRzKHR5cGUsIHNpemUsIGdsLlVOU0lHTkVEX1NIT1JULCBzdGFydCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgQ29udGV4dFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG5cbnZhciBDT05URVhUX1VJRCA9IDA7XG5cbnZhciBjcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24oY2FudmFzLCBvcHRpb25zKVxue1xuICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgb3B0aW9ucykgfHwgXG4gICAgXHQgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFnbClcbiAgICB7XG4gICAgICAgIC8vIGZhaWwsIG5vdCBhYmxlIHRvIGdldCBhIGNvbnRleHRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB3ZWJHTC4gVHJ5IHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXInKTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCB3YW50IHRvIHBoYXNlIHRoaXMgb3V0P1xuICAgIGdsLmlkID0gQ09OVEVYVF9VSUQrKztcblxuICAgIHJldHVybiBnbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb250ZXh0O1xuXG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgc2V0VmVydGV4QXR0cmliQXJyYXlzID0gZnVuY3Rpb24gKGdsLCBhdHRyaWJzKVxue1x0XG4gICAvLyBjb25zb2xlLmxvZyhnbC5pZClcbiAgICB2YXIgZGF0YSA9IEdMX01BUFtnbC5pZF07XG5cbiAgICBpZighZGF0YSlcbiAgICB7XG5cdCAgIHZhciBtYXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cdFx0ZGF0YSA9IEdMX01BUFtnbC5pZF0gPSB7dGVtcEF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKVxuXHRcdFx0XHQgXHQgXHRcdCAgICxhdHRyaWJTdGF0ZTpuZXcgQXJyYXkobWF4QXR0cmlicyl9O1xuXHR9XG5cdFxuICAgIHZhciBpLFxuICAgIFx0dGVtcEF0dHJpYlN0YXRlID0gZGF0YS50ZW1wQXR0cmliU3RhdGUsXG4gICAgXHRhdHRyaWJTdGF0ZSA9IGRhdGEuYXR0cmliU3RhdGU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAoaSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbaV0ubG9jYXRpb25dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAoYXR0cmliU3RhdGVbaV0gIT09IHRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmliU3RhdGVbaV0gPSB0ZW1wQXR0cmliU3RhdGVbaV07XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmF0dHJpYlN0YXRlW2ldKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VmVydGV4QXR0cmliQXJyYXlzOyIsIlxuXG5cblxuY29tcGlsZVByb2dyYW0gPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcbiAgICB2YXIgZ2xWZXJ0U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuVkVSVEVYX1NIQURFUiwgdmVydGV4U3JjKTtcbiAgICB2YXIgZ2xGcmFnU2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNyYyk7XG5cbiAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbEZyYWdTaGFkZXIpO1xuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgLy8gaWYgbGlua2luZyBmYWlscywgdGhlbiBsb2cgYW5kIGNsZWFudXBcbiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUGl4aS5qcyBFcnJvcjogQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVyLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5WQUxJREFURV9TVEFUVVMnLCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLlZBTElEQVRFX1NUQVRVUykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5nZXRFcnJvcigpJywgZ2wuZ2V0RXJyb3IoKSk7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBwcm9ncmFtIGluZm8gbG9nLCBsb2cgaXRcbiAgICAgICAgaWYgKGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pICE9PSAnJylcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaXhpLmpzIFdhcm5pbmc6IGdsLmdldFByb2dyYW1JbmZvTG9nKCknLCBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICBwcm9ncmFtID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBzb21lIHNoYWRlcnNcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xGcmFnU2hhZGVyKTtcblxuICAgIHJldHVybiBwcm9ncmFtO1xufVxuXG52YXIgY29tcGlsZVNoYWRlciA9IGZ1bmN0aW9uIChnbCwgdHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzcmMpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZVByb2dyYW07XG5cbiIsIlxuXG52YXIgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkgXG57XG4gICAgc3dpdGNoICh0eXBlKVxuICAgIHtcbiAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAndmVjMic6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzQnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSg0ICogc2l6ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgY2FzZSAnc2FtcGxlcjJEJzpcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWMyJzogICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnaXZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDMgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjNCc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDQgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdib29sJzogICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMyJzpcblxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSggMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMzJzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWM0JzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ21hdDInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Myc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMV0pO1xuXG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDAsIDAsIDFdKTtcbiAgICB9XG59XG5cbnZhciBib29sZWFuQXJyYXkgPSBmdW5jdGlvbihzaXplKVxue1xuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgYXJyYXlbaV0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRWYWx1ZTtcbiIsIlxudmFyIG1hcFR5cGUgPSByZXF1aXJlKCcuL21hcFR5cGUnKTtcbnZhciBtYXBTaXplID0gcmVxdWlyZSgnLi9tYXBTaXplJyk7XG5cbnZhciBleHRyYWN0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICB2YXIgdG90YWxBdHRyaWJ1dGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxBdHRyaWJ1dGVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGF0dHJpYkRhdGEgPSBnbC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaSk7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgYXR0cmliRGF0YS50eXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYkRhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOnR5cGUsXG4gICAgICAgICAgICBzaXplOm1hcFNpemUodHlwZSksXG4gICAgICAgICAgICBsb2NhdGlvbjpnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBhdHRyaWJEYXRhLm5hbWUpLFxuICAgICAgICAgICAgLy9UT0RPIC0gbWFrZSBhbiBhdHRyaWJ1dGUgb2JqZWN0XG4gICAgICAgICAgICBwb2ludGVyOmZ1bmN0aW9uKHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpe1xuXG4gICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5sb2NhdGlvbix0aGlzLnNpemUsIHR5cGUgfHwgZ2wuRkxPQVQsIG5vcm1hbGl6ZWQgfHwgZmFsc2UsIHN0cmlkZSB8fCAwLCBzdGFydCB8fCAwKTsgXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYXR0cmlidXRlczsgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RBdHRyaWJ1dGVzO1xuXG4iLCJ2YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIGRlZmF1bHRWYWx1ZSA9IHJlcXVpcmUoJy4vZGVmYXVsdFZhbHVlJyk7XG5cblxudmFyIGV4dHJhY3RVbmlmb3JtcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuXHR2YXIgdW5pZm9ybXMgPSB7fTtcblx0XG4gICAgdmFyIHRvdGFsVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxVbmlmb3JtczsgaSsrKSBcbiAgICB7XG4gICAgXHR2YXIgdW5pZm9ybURhdGEgPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpO1xuICAgIFx0dmFyIG5hbWUgPSB1bmlmb3JtRGF0YS5uYW1lLnJlcGxhY2UoL1xcWy4qP1xcXS8sIFwiXCIpO1xuICAgICAgICB2YXIgdHlwZSA9IG1hcFR5cGUoZ2wsIHVuaWZvcm1EYXRhLnR5cGUgKTtcblxuICAgIFx0dW5pZm9ybXNbbmFtZV0gPSB7XG4gICAgXHRcdHR5cGU6dHlwZSxcbiAgICBcdFx0c2l6ZTp1bmlmb3JtRGF0YS5zaXplLFxuICAgIFx0XHRsb2NhdGlvbjpnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksXG4gICAgXHRcdHZhbHVlOmRlZmF1bHRWYWx1ZSh0eXBlLCB1bmlmb3JtRGF0YS5zaXplKVxuICAgIFx0fVxuICAgIH07XG5cdFxuXHRyZXR1cm4gdW5pZm9ybXM7XHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHRyYWN0VW5pZm9ybXM7XG5cbiIsIlxudmFyIGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IGZ1bmN0aW9uKGdsLCB1bmlmb3JtRGF0YSlcbntcbiAgICAvLyB0aGlzIGlzIHRoZSBvYmplY3Qgd2Ugd2lsbCBiZSBzZW5kaW5nIGJhY2suXG4gICAgLy8gYW4gb2JqZWN0IGhpZXJhY2h5IHdpbGwgYmUgY3JlYXRlZCBmb3Igc3RydWN0c1xuICAgIHZhciB1bmlmb3JtcyA9IHtkYXRhOnt9fTtcblxuICAgIHVuaWZvcm1zLmdsID0gZ2w7XG4gICAgXG4gICAgdmFyIHVuaWZvcm1LZXlzPSBPYmplY3Qua2V5cyh1bmlmb3JtRGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1LZXlzLmxlbmd0aDsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBmdWxsTmFtZSA9IHVuaWZvcm1LZXlzW2ldXG5cbiAgICAgICAgdmFyIG5hbWVUb2tlbnMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAxXTtcblxuICAgICAgICB2YXIgdW5pZm9ybUdyb3VwID0gZ2V0VW5pZm9ybUdyb3VwKG5hbWVUb2tlbnMsIHVuaWZvcm1zKTtcblxuICAgICAgICB2YXIgdW5pZm9ybSA9ICB1bmlmb3JtRGF0YVtmdWxsTmFtZV07XG4gICAgICAgIHVuaWZvcm1Hcm91cC5kYXRhW25hbWVdID0gdW5pZm9ybTtcblxuICAgICAgICB1bmlmb3JtR3JvdXAuZ2wgPSBnbDtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5pZm9ybUdyb3VwLCBuYW1lLCB7XG4gICAgICAgICAgICBnZXQ6IGdlbmVyYXRlR2V0dGVyKG5hbWUpLFxuICAgICAgICAgICAgc2V0OiBnZW5lcmF0ZVNldHRlcihuYW1lLCB1bmlmb3JtKVxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdW5pZm9ybXM7XG59XG5cbnZhciBnZW5lcmF0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpXG57XG5cdHZhciB0ZW1wbGF0ZSA9IGdldHRlclRlbXBsYXRlLnJlcGxhY2UoJyUlJywgbmFtZSk7XG5cdHJldHVybiBuZXcgRnVuY3Rpb24odGVtcGxhdGUpO1xufVxuXG52YXIgZ2VuZXJhdGVTZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCB1bmlmb3JtKVxue1xuICAgIHZhciB0ZW1wbGF0ZSA9IHNldHRlclRlbXBsYXRlLnJlcGxhY2UoLyUlL2csIG5hbWUpO1xuICAgIHZhciBzZXRUZW1wbGF0ZVxuICAgIFxuICAgIGlmKHVuaWZvcm0uc2l6ZSA9PT0gMSlcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19TSU5HTEVfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzZXRUZW1wbGF0ZSA9IEdMU0xfVE9fQVJSQVlfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cblxuICAgIGlmKHNldFRlbXBsYXRlKVxuICAgIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gXCJcXG50aGlzLmdsLlwiICsgc2V0VGVtcGxhdGUgKyBcIjtcIjtcbiAgICB9XG5cbiAgXHRyZXR1cm4gbmV3IEZ1bmN0aW9uKCd2YWx1ZScsIHRlbXBsYXRlKTtcbn1cblxudmFyIGdldFVuaWZvcm1Hcm91cCA9IGZ1bmN0aW9uKG5hbWVUb2tlbnMsIHVuaWZvcm0pXG57XG4gICAgdmFyIGN1ciA9IHVuaWZvcm07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVUb2tlbnMubGVuZ3RoIC0gMTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBvID0gY3VyW25hbWVUb2tlbnNbaV1dIHx8IHtkYXRhOnt9fTtcbiAgICAgICAgY3VyW25hbWVUb2tlbnNbaV1dID0gbztcbiAgICAgICAgY3VyID0gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGN1clxufVxuXG52YXIgZ2V0dGVyVGVtcGxhdGUgPSBbXG4gICAgJ3JldHVybiB0aGlzLmRhdGEuJSUudmFsdWU7Jyxcbl0uam9pbignXFxuJyk7XG5cbnZhciBzZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAndGhpcy5kYXRhLiUlLnZhbHVlID0gdmFsdWU7JyxcbiAgICAndmFyIGxvY2F0aW9uID0gdGhpcy5kYXRhLiUlLmxvY2F0aW9uOydcbl0uam9pbignXFxuJyk7XG5cblxudmFyIEdMU0xfVE9fU0lOR0xFX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ3ZlYzInOiAgICAgJ3VuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ3ZlYzMnOiAgICAgJ3VuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG4gICAgXHRcbiAgICAnaW50JzogICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnaXZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcblxuICAgICdtYXQyJzogICAgICd1bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0Myc6ICAgICAndW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG4gICAgJ21hdDQnOiAgICAgJ3VuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuXG4gICAgJ3NhbXBsZXIyRCc6J3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG52YXIgR0xTTF9UT19BUlJBWV9TRVRURVJTID0ge1xuXG4gICAgJ2Zsb2F0JzogICAgJ3VuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjNCc6ICAgICAndW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG4gICBcbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdDtcblxuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24odHlwZSkgXG57IFxuICAgIHJldHVybiBHTFNMX1RPX1NJWkVbdHlwZV07XG59XG5cblxudmFyIEdMU0xfVE9fU0laRSA9IHtcbiAgICAnZmxvYXQnOiAgICAxLFxuICAgICd2ZWMyJzogICAgIDIsXG4gICAgJ3ZlYzMnOiAgICAgMyxcbiAgICAndmVjNCc6ICAgICA0LFxuXG4gICAgJ2ludCc6ICAgICAgMSxcbiAgICAnaXZlYzInOiAgICAyLFxuICAgICdpdmVjMyc6ICAgIDMsXG4gICAgJ2l2ZWM0JzogICAgNCxcblxuICAgICdib29sJzogICAgIDEsXG4gICAgJ2J2ZWMyJzogICAgMixcbiAgICAnYnZlYzMnOiAgICAzLFxuICAgICdidmVjNCc6ICAgIDQsXG5cbiAgICAnbWF0Mic6ICAgICA0LFxuICAgICdtYXQzJzogICAgIDksXG4gICAgJ21hdDQnOiAgICAgMTYsXG5cbiAgICAnc2FtcGxlcjJEJzogIDFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24oZ2wsIHR5cGUpIFxue1xuICAgIGlmKCFHTF9UQUJMRSkgXG4gICAge1xuICAgICAgICB2YXIgdHlwZU5hbWVzID0gT2JqZWN0LmtleXMoR0xfVE9fR0xTTF9UWVBFUyk7XG5cbiAgICAgICAgR0xfVEFCTEUgPSB7fTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdHlwZU5hbWVzLmxlbmd0aDsgKytpKSBcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHRuID0gdHlwZU5hbWVzW2ldO1xuICAgICAgICAgICAgR0xfVEFCTEVbIGdsW3RuXSBdID0gR0xfVE9fR0xTTF9UWVBFU1t0bl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIEdMX1RBQkxFW3R5cGVdO1xufVxuXG52YXIgR0xfVEFCTEUgPSBudWxsO1xuXG52YXIgR0xfVE9fR0xTTF9UWVBFUyA9IHtcbiAgJ0ZMT0FUJzogICAgICAgJ2Zsb2F0JyxcbiAgJ0ZMT0FUX1ZFQzInOiAgJ3ZlYzInLFxuICAnRkxPQVRfVkVDMyc6ICAndmVjMycsXG4gICdGTE9BVF9WRUM0JzogICd2ZWM0JyxcblxuICAnSU5UJzogICAgICAgICAnaW50JyxcbiAgJ0lOVF9WRUMyJzogICAgJ2l2ZWMyJyxcbiAgJ0lOVF9WRUMzJzogICAgJ2l2ZWMzJyxcbiAgJ0lOVF9WRUM0JzogICAgJ2l2ZWM0JyxcbiAgXG4gICdCT09MJzogICAgICAgICdib29sJyxcbiAgJ0JPT0xfVkVDMic6ICAgJ2J2ZWMyJyxcbiAgJ0JPT0xfVkVDMyc6ICAgJ2J2ZWMzJyxcbiAgJ0JPT0xfVkVDNCc6ICAgJ2J2ZWM0JyxcbiAgXG4gICdGTE9BVF9NQVQyJzogICdtYXQyJyxcbiAgJ0ZMT0FUX01BVDMnOiAgJ21hdDMnLFxuICAnRkxPQVRfTUFUNCc6ICAnbWF0NCcsXG4gIFxuICAnU0FNUExFUl8yRCc6ICAnc2FtcGxlcjJEJyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwU2l6ZTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvQm9vbCh2KSB7XG4gICAgICAgIHJldHVybiAhIXY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vdElkKHYpIHtcbiAgICAgICAgcmV0dXJuICF2O1xuICAgIH1cblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcHJldmlvdXNfYXN5bmM7XG5cbiAgICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gICAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZiB8fFxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgdGhpcztcblxuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgICAgcHJldmlvdXNfYXN5bmMgPSByb290LmFzeW5jO1xuICAgIH1cblxuICAgIGFzeW5jLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBwcmV2aW91c19hc3luYztcbiAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbmx5X29uY2UoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIC8vIFBvcnRlZCBmcm9tIHVuZGVyc2NvcmUuanMgaXNPYmplY3RcbiAgICB2YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9pc0FycmF5TGlrZShhcnIpIHtcbiAgICAgICAgcmV0dXJuIF9pc0FycmF5KGFycikgfHwgKFxuICAgICAgICAgICAgLy8gaGFzIGEgcG9zaXRpdmUgaW50ZWdlciBsZW5ndGggcHJvcGVydHlcbiAgICAgICAgICAgIHR5cGVvZiBhcnIubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICBhcnIubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggJSAxID09PSAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2FycmF5RWFjaChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfbWFwKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdG9yKGFycltpbmRleF0sIGluZGV4LCBhcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JhbmdlKGNvdW50KSB7XG4gICAgICAgIHJldHVybiBfbWFwKEFycmF5KGNvdW50KSwgZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGk7IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9yZWR1Y2UoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBfYXJyYXlFYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9mb3JFYWNoT2Yob2JqZWN0LCBpdGVyYXRvcikge1xuICAgICAgICBfYXJyYXlFYWNoKF9rZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnIsIGl0ZW0pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfa2V5SXRlcmF0b3IoY29sbCkge1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB2YXIgbGVuO1xuICAgICAgICB2YXIga2V5cztcbiAgICAgICAgaWYgKF9pc0FycmF5TGlrZShjb2xsKSkge1xuICAgICAgICAgICAgbGVuID0gY29sbC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBsZW4gPyBpIDogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXlzID0gX2tleXMoY29sbCk7XG4gICAgICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGtleXNbaV0gOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpbWlsYXIgdG8gRVM2J3MgcmVzdCBwYXJhbSAoaHR0cDovL2FyaXlhLm9maWxhYnMuY29tLzIwMTMvMDMvZXM2LWFuZC1yZXN0LXBhcmFtZXRlci5odG1sKVxuICAgIC8vIFRoaXMgYWNjdW11bGF0ZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byBhbiBhcnJheSwgYWZ0ZXIgYSBnaXZlbiBpbmRleC5cbiAgICAvLyBGcm9tIHVuZGVyc2NvcmUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzIxNDApLlxuICAgIGZ1bmN0aW9uIF9yZXN0UGFyYW0oZnVuYywgc3RhcnRJbmRleCkge1xuICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCk7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSB1bnVzZWQgYnV0IGhhbmRsZSBjYXNlcyBvdXRzaWRlIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50OlxuICAgICAgICAgICAgLy8gdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICAgICAgICAvLyBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAvLyAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICAgICAgICAvLyByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBleHBvcnRlZCBhc3luYyBtb2R1bGUgZnVuY3Rpb25zIC8vLy9cblxuICAgIC8vLy8gbmV4dFRpY2sgaW1wbGVtZW50YXRpb24gd2l0aCBicm93c2VyLWNvbXBhdGlibGUgZmFsbGJhY2sgLy8vL1xuXG4gICAgLy8gY2FwdHVyZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZSB0byBndWFyZCBhZ2FpbnN0IGZha2VUaW1lciBtb2Nrc1xuICAgIHZhciBfc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzZXRJbW1lZGlhdGU7XG5cbiAgICB2YXIgX2RlbGF5ID0gX3NldEltbWVkaWF0ZSA/IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgIF9zZXRJbW1lZGlhdGUoZm4pO1xuICAgIH0gOiBmdW5jdGlvbihmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBfZGVsYXk7XG4gICAgfVxuICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IF9zZXRJbW1lZGlhdGUgPyBfZGVsYXkgOiBhc3luYy5uZXh0VGljaztcblxuXG4gICAgYXN5bmMuZm9yRWFjaCA9XG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9XG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mU2VyaWVzKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG5cbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPVxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9lYWNoT2ZMaW1pdChsaW1pdCkoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoT2YgPVxuICAgIGFzeW5jLmVhY2hPZiA9IGZ1bmN0aW9uIChvYmplY3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBvYmplY3QgPSBvYmplY3QgfHwgW107XG5cbiAgICAgICAgdmFyIGl0ZXIgPSBfa2V5SXRlcmF0b3Iob2JqZWN0KTtcbiAgICAgICAgdmFyIGtleSwgY29tcGxldGVkID0gMDtcblxuICAgICAgICB3aGlsZSAoKGtleSA9IGl0ZXIoKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpdGVyYXRvcihvYmplY3Rba2V5XSwga2V5LCBvbmx5X29uY2UoZG9uZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gMCkgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZC0tO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBrZXkgaXMgbnVsbCBpbiBjYXNlIGl0ZXJhdG9yIGlzbid0IGV4aGF1c3RlZFxuICAgICAgICAgICAgLy8gYW5kIGRvbmUgcmVzb2x2ZWQgc3luY2hyb25vdXNseS5cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gbnVsbCAmJiBjb21wbGV0ZWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZlNlcmllcyA9XG4gICAgYXN5bmMuZWFjaE9mU2VyaWVzID0gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iaiA9IG9iaiB8fCBbXTtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgdmFyIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRvcihvYmpba2V5XSwga2V5LCBvbmx5X29uY2UoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoaXRlcmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5mb3JFYWNoT2ZMaW1pdCA9XG4gICAgYXN5bmMuZWFjaE9mTGltaXQgPSBmdW5jdGlvbiAob2JqLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9lYWNoT2ZMaW1pdChsaW1pdCkob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZWFjaE9mTGltaXQobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBydW5uaW5nID0gMDtcbiAgICAgICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChkb25lICYmIHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWwoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZiwgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb1BhcmFsbGVsTGltaXQoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihfZWFjaE9mTGltaXQobGltaXQpLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvU2VyaWVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihhc3luYy5lYWNoT2ZTZXJpZXMsIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gX2lzQXJyYXlMaWtlKGFycikgPyBbXSA6IHt9O1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfYXN5bmNNYXApO1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLmluamVjdCA9XG4gICAgYXN5bmMuZm9sZGwgPVxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgaSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5mb2xkciA9XG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGlkZW50aXR5KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudHJhbnNmb3JtID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGl0ZXJhdG9yO1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBtZW1vO1xuICAgICAgICAgICAgbWVtbyA9IF9pc0FycmF5KGFycikgPyBbXSA6IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuZWFjaE9mKGFyciwgZnVuY3Rpb24odiwgaywgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHYsIGssIGNiKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleDogaW5kZXgsIHZhbHVlOiB4fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soX21hcChyZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICB9KSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMuc2VsZWN0ID1cbiAgICBhc3luYy5maWx0ZXIgPSBkb1BhcmFsbGVsKF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0TGltaXQgPVxuICAgIGFzeW5jLmZpbHRlckxpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID1cbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcblxuICAgIGZ1bmN0aW9uIF9yZWplY3QoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBfZmlsdGVyKGVhY2hmbiwgYXJyLCBmdW5jdGlvbih2YWx1ZSwgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgY2IoIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoZWFjaGZuLCBjaGVjaywgZ2V0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2IpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSBjYihnZXRSZXN1bHQoZmFsc2UsIHZvaWQgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWUoeCwgXywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNiKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2IgJiYgY2hlY2sodikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGdldFJlc3VsdCh0cnVlLCB4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGl0ZXJhdG9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGxpbWl0LCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBsaW1pdDtcbiAgICAgICAgICAgICAgICBlYWNoZm4oYXJyLCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMuYW55ID1cbiAgICBhc3luYy5zb21lID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIHRvQm9vbCwgaWRlbnRpdHkpO1xuXG4gICAgYXN5bmMuc29tZUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5hbGwgPVxuICAgIGFzeW5jLmV2ZXJ5ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIG5vdElkLCBub3RJZCk7XG5cbiAgICBhc3luYy5ldmVyeUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgbm90SWQsIG5vdElkKTtcblxuICAgIGZ1bmN0aW9uIF9maW5kR2V0UmVzdWx0KHYsIHgpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIGFzeW5jLmRldGVjdCA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mU2VyaWVzLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdExpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgaWRlbnRpdHksIF9maW5kR2V0UmVzdWx0KTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoY29tcGFyYXRvciksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgb3B0aW9uYWwsIHNoaWZ0IHRoZSBhcmdzLlxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHJlbWFpbmluZ1Rhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoZm4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gX2luZGV4T2YobGlzdGVuZXJzLCBmbik7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgX2FycmF5RWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2FycmF5RWFjaChrZXlzLCBmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSBfaXNBcnJheSh0YXNrc1trXSkgPyB0YXNrc1trXTogW3Rhc2tzW2tdXTtcbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBfZm9yRWFjaE9mKHJlc3VsdHMsIGZ1bmN0aW9uKHZhbCwgcmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCB0YXNrLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWFkLWxvY2tzXG4gICAgICAgICAgICB2YXIgbGVuID0gcmVxdWlyZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGRlcDtcbiAgICAgICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgICAgICAgIGlmICghKGRlcCA9IHRhc2tzW3JlcXVpcmVzW2xlbl1dKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhcyBpbmV4aXN0YW50IGRlcGVuZGVuY3knKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc0FycmF5KGRlcCkgJiYgX2luZGV4T2YoZGVwLCBrKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGN5Y2xpYyBkZXBlbmRlbmNpZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kgJiYgX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcblxuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHRpbWVzOiBERUZBVUxUX1RJTUVTLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IERFRkFVTFRfSU5URVJWQUxcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgdCA9PT0gJ251bWJlcicpe1xuICAgICAgICAgICAgICAgIGFjYy50aW1lcyA9IHBhcnNlSW50KHQsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiB0ID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodC50aW1lcywgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICAgICAgYWNjLmludGVydmFsID0gcGFyc2VJbnQodC5pbnRlcnZhbCwgMTApIHx8IERFRkFVTFRfSU5URVJWQUw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYXJndW1lbnQgdHlwZSBmb3IgXFwndGltZXNcXCc6ICcgKyB0eXBlb2YgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDEgfHwgbGVuZ3RoID4gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyAtIG11c3QgYmUgZWl0aGVyICh0YXNrKSwgKHRhc2ssIGNhbGxiYWNrKSwgKHRpbWVzLCB0YXNrKSBvciAodGltZXMsIHRhc2ssIGNhbGxiYWNrKScpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA8PSAyICYmIHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGltZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0cywgdGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgb3B0cy50YXNrID0gdGFzaztcblxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVkVGFzayh3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQodGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5SW50ZXJ2YWwoaW50ZXJ2YWwpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKG9wdHMudGltZXMpIHtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5hbEF0dGVtcHQgPSAhKG9wdHMudGltZXMtPTEpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KG9wdHMudGFzaywgZmluYWxBdHRlbXB0KSk7XG4gICAgICAgICAgICAgICAgaWYoIWZpbmFsQXR0ZW1wdCAmJiBvcHRzLmludGVydmFsID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlJbnRlcnZhbChvcHRzLmludGVydmFsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBvcHRzLmNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNhbGxiYWNrIGlzIHBhc3NlZCwgcnVuIHRoaXMgYXMgYSBjb250cm9sbCBmbG93XG4gICAgICAgIHJldHVybiBvcHRzLmNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrO1xuICAgIH07XG5cbiAgICBhc3luYy53YXRlcmZhbGwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGlmICghX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3cmFwSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCh3cmFwSXRlcmF0b3IobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbnN1cmVBc3luYyhpdGVyYXRvcikuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3BhcmFsbGVsKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgbm9vcDtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsIGZ1bmN0aW9uICh0YXNrLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0YXNrKF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLnBhcmFsbGVsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoYXN5bmMuZWFjaE9mLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24odGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoX2VhY2hPZkxpbWl0KGxpbWl0KSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2ZTZXJpZXMsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VDYWxsYmFjayhpbmRleCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYWtlQ2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIGFzeW5jLmFwcGx5ID0gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGNhbGxBcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoY2FsbEFyZ3MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb25jYXQoZWFjaGZuLCBhcnIsIGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIGZuKHgsIGZ1bmN0aW9uIChlcnIsIHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICB2YXIgbmV4dCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdC5hcHBseSh0aGlzLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihuZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gKytjYWxscyA8PSAxIHx8IHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9VbnRpbCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmR1cmluZyA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hlY2spO1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cnV0aCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0KGNoZWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9EdXJpbmcgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIGFzeW5jLmR1cmluZyhmdW5jdGlvbihuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY2FsbHMrKyA8IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBtdXN0IG5vdCBiZSB6ZXJvJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sgfHwgbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBxLnRhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfbmV4dChxLCB0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgd29ya2VycyAtPSAxO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHdvcmtlcnNMaXN0LCBmdW5jdGlvbiAod29ya2VyLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtlciA9PT0gdGFzayAmJiAhcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgdGFza3M6IFtdLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IGNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbm9vcCxcbiAgICAgICAgICAgIGVtcHR5OiBub29wLFxuICAgICAgICAgICAgZHJhaW46IG5vb3AsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHEuZHJhaW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHRydWUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFxLnBhdXNlZCAmJiB3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSh3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBxLnBheWxvYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEucGF5bG9hZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEudGFza3MubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfbWFwKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaCh0YXNrc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UoX25leHQocSwgdGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdW1lQ291bnQgPSBNYXRoLm1pbihxLmNvbmN1cnJlbmN5LCBxLnRhc2tzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSByZXN1bWVDb3VudDsgdysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgcSA9IF9xdWV1ZShmdW5jdGlvbiAoaXRlbXMsIGNiKSB7XG4gICAgICAgICAgICB3b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICAgIGVuZCA9IHNlcXVlbmNlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGJlZyArICgoZW5kIC0gYmVnICsgMSkgPj4+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3BcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoX2JpbmFyeVNlYXJjaChxLnRhc2tzLCBpdGVtLCBfY29tcGFyZVRhc2tzKSArIDEsIDAsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBxLnVuc2hpZnQ7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLmNhcmdvID0gZnVuY3Rpb24gKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gX3F1ZXVlKHdvcmtlciwgMSwgcGF5bG9hZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9jb25zb2xlX2ZuKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGlkZW50aXR5O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIG1lbW9pemVkKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGtleSBpbiBtZW1vKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF90aW1lcyhtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBtYXBwZXIoX3JhbmdlKGNvdW50KSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy50aW1lcyA9IF90aW1lcyhhc3luYy5tYXApO1xuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gX3RpbWVzKGFzeW5jLm1hcFNlcmllcyk7XG4gICAgYXN5bmMudGltZXNMaW1pdCA9IGZ1bmN0aW9uIChjb3VudCwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMubWFwTGltaXQoX3JhbmdlKGNvdW50KSwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBub29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW19yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgbmV4dGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfSldKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoYXQsIFtlcnJdLmNvbmNhdChyZXN1bHRzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5zZXEuYXBwbHkobnVsbCwgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBfYXBwbHlFYWNoKGVhY2hmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbihmbnMsIGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBnbyA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlYWNoZm4oZm5zLCBmdW5jdGlvbiAoZm4sIF8sIGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5hcHBseUVhY2ggPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZik7XG4gICAgYXN5bmMuYXBwbHlFYWNoU2VyaWVzID0gX2FwcGx5RWFjaChhc3luYy5lYWNoT2ZTZXJpZXMpO1xuXG5cbiAgICBhc3luYy5mb3JldmVyID0gZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZG9uZSA9IG9ubHlfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgdmFyIHRhc2sgPSBlbnN1cmVBc3luYyhmbik7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVBc3luYyhmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuXG4gICAgYXN5bmMuY29uc3RhbnQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICB2YXIgYXJncyA9IFtudWxsXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXN5bmMud3JhcFN5bmMgPVxuICAgIGFzeW5jLmFzeW5jaWZ5ID0gZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAoX2lzT2JqZWN0KHJlc3VsdCkgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLm1lc3NhZ2UgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBOb2RlLmpzXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG4gICAgfVxuICAgIC8vIEFNRCAvIFJlcXVpcmVKU1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG5cdCAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXG5cdCAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cblx0ICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSlcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cblx0ICogQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuXHQgKiBVbmljb2RlIHN0cmluZy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gJ3huLS0nICsgZW5jb2RlKHN0cmluZylcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG5cdHB1bnljb2RlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHQndmVyc2lvbic6ICcxLjMuMicsXG5cdFx0LyoqXG5cdFx0ICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHRcdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMpIHtcblx0XHRcdC8vIGluIE5vZGUuanMsIGlvLmpzLCBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IHB1bnljb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5wdW55Y29kZSA9IHB1bnljb2RlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUpIHJldHVybiB0cmlhbmdsZXM7XG5cbiAgICB2YXIgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgc2l6ZTtcblxuICAgIGlmIChoYXNIb2xlcykgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKTtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG4gICAgICAgIG1pblggPSBtYXhYID0gZGF0YVswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xuICAgICAgICAgICAgeSA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIHNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIHNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgICAgICBpLCBqLCBsYXN0O1xuXG4gICAgLy8gY2FsY3VsYXRlIG9yaWdpbmFsIHdpbmRpbmcgb3JkZXIgb2YgYSBwb2x5Z29uIHJpbmdcbiAgICBmb3IgKGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cblxuICAgIC8vIGxpbmsgcG9pbnRzIGludG8gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuICAgIGlmIChjbG9ja3dpc2UgPT09IChzdW0gPiAwKSkge1xuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgc2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChzaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0aWNlIGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZWFyLCB0cmlhbmdsZXMsIGRpbSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDIpO1xuXG4gICAgICAgICAgICAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgd2hpbGUgKHAgIT09IGVhci5wcmV2KSB7XG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG4gICAgdmFyIG1pblRYID0gYS54IDwgYi54ID8gKGEueCA8IGMueCA/IGEueCA6IGMueCkgOiAoYi54IDwgYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoYS55IDwgYy55ID8gYS55IDogYy55KSA6IChiLnkgPCBjLnkgPyBiLnkgOiBjLnkpLFxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1heFRZID0gYS55ID4gYi55ID8gKGEueSA+IGMueSA/IGEueSA6IGMueSkgOiAoYi55ID4gYy55ID8gYi55IDogYy55KTtcblxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgdmFyIG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBzaXplKSxcbiAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgdmFyIHAgPSBlYXIubmV4dFo7XG5cbiAgICB3aGlsZSAocCAmJiBwLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgcCA9IGVhci5wcmV2WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIC8vIGEgc2VsZi1pbnRlcnNlY3Rpb24gd2hlcmUgZWRnZSAodltpLTFdLHZbaV0pIGludGVyc2VjdHMgKHZbaSsxXSx2W2krMl0pXG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcblxuICAgICAgICAgICAgcCA9IHN0YXJ0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBwO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBzdG9wID0gbSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtLm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBtLnggJiZcbiAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoaHkgPCBtLnkgPyBoeCA6IHF4LCBoeSwgbS54LCBtLnksIGh5IDwgbS55ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxU2l6ZSA9PT0gMCB8fCAhcSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwLnogPD0gcS56KSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBzaXplIG9mIHRoZSBkYXRhIGJvdW5kaW5nIGJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlXG4gICAgeCA9IDMyNzY3ICogKHggLSBtaW5YKSAvIHNpemU7XG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAvIHNpemU7XG5cbiAgICB4ID0gKHggfCAoeCA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB4ID0gKHggfCAoeCA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnggPCBsZWZ0bW9zdC54KSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGVxdWFscyhhLCBiKSB8fCBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmXG4gICAgICAgICAgIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYik7XG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgcmV0dXJuIGFyZWEocDEsIHExLCBwMikgPiAwICE9PSBhcmVhKHAxLCBxMSwgcTIpID4gMCAmJlxuICAgICAgICAgICBhcmVhKHAyLCBxMiwgcDEpID4gMCAhPT0gYXJlYShwMiwgcTIsIHExKSA+IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGljZSBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0aWNlIG5vZGVzIGluIGEgcG9seWdvbiByaW5nXG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZVxuICAgIHRoaXMueiA9IG51bGw7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG5cbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuICAgIHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1xuLy8gV2Ugc3RvcmUgb3VyIEVFIG9iamVjdHMgaW4gYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gYH5gIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IG92ZXJyaWRkZW4gb3Jcbi8vIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vIFdlIGFsc28gYXNzdW1lIHRoYXQgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBldmVudCBuYW1lXG4vLyBpcyBhbiBFUzYgU3ltYm9sLlxuLy9cbnZhciBwcmVmaXggPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJyA/ICd+JyA6IGZhbHNlO1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIEV2ZW50RW1pdHRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgQ29udGV4dCBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgZW1pdCBvbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIE1pbmltYWwgRXZlbnRFbWl0dGVyIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkgeyAvKiBOb3RoaW5nIHRvIHNldCAqLyB9XG5cbi8qKlxuICogSG9sZHMgdGhlIGFzc2lnbmVkIEV2ZW50RW1pdHRlcnMgYnkgbmFtZS5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiBhIGxpc3Qgb2YgYXNzaWduZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZXhpc3RzIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7QXJyYXl8Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50LCBleGlzdHMpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGF2YWlsYWJsZSA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoZXhpc3RzKSByZXR1cm4gISFhdmFpbGFibGU7XG4gIGlmICghYXZhaWxhYmxlKSByZXR1cm4gW107XG4gIGlmIChhdmFpbGFibGUuZm4pIHJldHVybiBbYXZhaWxhYmxlLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGF2YWlsYWJsZS5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBhdmFpbGFibGVbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIEVtaXQgYW4gZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSW5kaWNhdGlvbiBpZiB3ZSd2ZSBlbWl0dGVkIGFuIGV2ZW50LlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyBFdmVudExpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdG9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgdGhpcylcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgdGhpcy5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lcjtcbiAgZWxzZSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XS5mbikgdGhpcy5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gICAgZWxzZSB0aGlzLl9ldmVudHNbZXZ0XSA9IFtcbiAgICAgIHRoaXMuX2V2ZW50c1tldnRdLCBsaXN0ZW5lclxuICAgIF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGFuIEV2ZW50TGlzdGVuZXIgdGhhdCdzIG9ubHkgY2FsbGVkIG9uY2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzLCB0cnVlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2Ugd2FudCB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgdGhhdCB3ZSBuZWVkIHRvIGZpbmQuXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IE9ubHkgcmVtb3ZlIGxpc3RlbmVycyBtYXRjaGluZyB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25jZSBsaXN0ZW5lcnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBldmVudHMgPSBbXTtcblxuICBpZiAoZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgIGxpc3RlbmVycy5mbiAhPT0gZm5cbiAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVycy5vbmNlKVxuICAgICAgICB8fCAoY29udGV4dCAmJiBsaXN0ZW5lcnMuY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuXG4gICAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKVxuICAgICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAvL1xuICBpZiAoZXZlbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW2V2dF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgb3Igb25seSB0aGUgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmVycyBmb3IuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKGV2ZW50KSBkZWxldGUgdGhpcy5fZXZlbnRzW3ByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRdO1xuICBlbHNlIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFwcGx5IGFueW1vcmUuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4ndXNlIHN0cmljdCc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiFcbiAqIGFzeW5jXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jXG4gKlxuICogQ29weXJpZ2h0IDIwMTAtMjAxNCBDYW9sYW4gTWNNYWhvblxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbi8qanNoaW50IG9uZXZhcjogZmFsc2UsIGluZGVudDo0ICovXG4vKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cbihmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXN5bmMgPSB7fTtcblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcm9vdCwgcHJldmlvdXNfYXN5bmM7XG5cbiAgICByb290ID0gdGhpcztcbiAgICBpZiAocm9vdCAhPSBudWxsKSB7XG4gICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWQpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkocm9vdCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8gY3Jvc3MtYnJvd3NlciBjb21wYXRpYmxpdHkgZnVuY3Rpb25zIC8vLy9cblxuICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgdmFyIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG5cbiAgICB2YXIgX2VhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBfbWFwID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgaWYgKGFyci5tYXApIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIubWFwKGl0ZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IoeCwgaSwgYSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHZhciBfcmVkdWNlID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIG1lbW8pIHtcbiAgICAgICAgaWYgKGFyci5yZWR1Y2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGl0ZXJhdG9yLCBtZW1vKTtcbiAgICAgICAgfVxuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICBtZW1vID0gaXRlcmF0b3IobWVtbywgeCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuXG4gICAgdmFyIF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgX2VhY2goYXJyLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgb25seV9vbmNlKGRvbmUpICk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2ggPSBhc3luYy5lYWNoO1xuXG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICB2YXIgaXRlcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGFycltjb21wbGV0ZWRdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID0gYXN5bmMuZWFjaFNlcmllcztcblxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZuID0gX2VhY2hMaW1pdChsaW1pdCk7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIFthcnIsIGl0ZXJhdG9yLCBjYWxsYmFja10pO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaExpbWl0ID0gYXN5bmMuZWFjaExpbWl0O1xuXG4gICAgdmFyIF9lYWNoTGltaXQgPSBmdW5jdGlvbiAobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgaWYgKCFhcnIubGVuZ3RoIHx8IGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVwbGVuaXNoICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiBzdGFydGVkIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoYXJyW3N0YXJ0ZWQgLSAxXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB2YXIgZG9QYXJhbGxlbCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvUGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKGxpbWl0LCBmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFtfZWFjaExpbWl0KGxpbWl0KV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBkb1NlcmllcyA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoU2VyaWVzXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBfYXN5bmNNYXAgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1t4LmluZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9tYXBMaW1pdChsaW1pdCkoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB2YXIgX21hcExpbWl0ID0gZnVuY3Rpb24obGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGRvUGFyYWxsZWxMaW1pdChsaW1pdCwgX2FzeW5jTWFwKTtcbiAgICB9O1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihtZW1vLCB4LCBmdW5jdGlvbiAoZXJyLCB2KSB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGluamVjdCBhbGlhc1xuICAgIGFzeW5jLmluamVjdCA9IGFzeW5jLnJlZHVjZTtcbiAgICAvLyBmb2xkbCBhbGlhc1xuICAgIGFzeW5jLmZvbGRsID0gYXN5bmMucmVkdWNlO1xuXG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSkucmV2ZXJzZSgpO1xuICAgICAgICBhc3luYy5yZWR1Y2UocmV2ZXJzZWQsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICAvLyBmb2xkciBhbGlhc1xuICAgIGFzeW5jLmZvbGRyID0gYXN5bmMucmVkdWNlUmlnaHQ7XG5cbiAgICB2YXIgX2ZpbHRlciA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LnZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG4gICAgYXN5bmMuZmlsdGVyU2VyaWVzID0gZG9TZXJpZXMoX2ZpbHRlcik7XG4gICAgLy8gc2VsZWN0IGFsaWFzXG4gICAgYXN5bmMuc2VsZWN0ID0gYXN5bmMuZmlsdGVyO1xuICAgIGFzeW5jLnNlbGVjdFNlcmllcyA9IGFzeW5jLmZpbHRlclNlcmllcztcblxuICAgIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLnJlamVjdCA9IGRvUGFyYWxsZWwoX3JlamVjdCk7XG4gICAgYXN5bmMucmVqZWN0U2VyaWVzID0gZG9TZXJpZXMoX3JlamVjdCk7XG5cbiAgICB2YXIgX2RldGVjdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIG1haW5fY2FsbGJhY2spIHtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKHgpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZGV0ZWN0ID0gZG9QYXJhbGxlbChfZGV0ZWN0KTtcbiAgICBhc3luYy5kZXRlY3RTZXJpZXMgPSBkb1NlcmllcyhfZGV0ZWN0KTtcblxuICAgIGFzeW5jLnNvbWUgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbnkgYWxpYXNcbiAgICBhc3luYy5hbnkgPSBhc3luYy5zb21lO1xuXG4gICAgYXN5bmMuZXZlcnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghdikge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gYWxsIGFsaWFzXG4gICAgYXN5bmMuYWxsID0gYXN5bmMuZXZlcnk7XG5cbiAgICBhc3luYy5zb3J0QnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgYXN5bmMubWFwKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAoZXJyLCBjcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHt2YWx1ZTogeCwgY3JpdGVyaWE6IGNyaXRlcmlhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoZm4pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGhcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldID09PSBmbikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdGFza0NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtYWluaW5nVGFza3MtLVxuICAgICAgICAgICAgX2VhY2gobGlzdGVuZXJzLnNsaWNlKDApLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIHZhciB0aGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZmluYWwgY2FsbGJhY2sgZnJvbSBjYWxsaW5nIGl0c2VsZiBpZiBpdCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdGhlQ2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9lYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKF9rZXlzKHJlc3VsdHMpLCBmdW5jdGlvbihya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIHN1YnNlcXVlbnQgZXJyb3JzIGhpdHRpbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUodGFza0NvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCBNYXRoLmFicyh0YXNrLmxlbmd0aCAtIDEpKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucmV0cnkgPSBmdW5jdGlvbih0aW1lcywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIERFRkFVTFRfVElNRVMgPSA1O1xuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcbiAgICAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHRpbWVzIG5vdCBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICAgICAgdGltZXMgPSBERUZBVUxUX1RJTUVTO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lcyBpcyBhIG51bWJlclxuICAgICAgICB0aW1lcyA9IHBhcnNlSW50KHRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgdmFyIHdyYXBwZWRUYXNrID0gZnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkUmVzdWx0cykge1xuICAgICAgICAgICAgdmFyIHJldHJ5QXR0ZW1wdCA9IGZ1bmN0aW9uKHRhc2ssIGZpbmFsQXR0ZW1wdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKGZ1bmN0aW9uKGVyciwgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKCFlcnIgfHwgZmluYWxBdHRlbXB0LCB7ZXJyOiBlcnIsIHJlc3VsdDogcmVzdWx0fSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXBwZWRSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcykge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KHRhc2ssICEodGltZXMtPTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBjYWxsYmFjaykoZGF0YS5lcnIsIGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrXG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJdGVyYXRvciA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGZ1bmN0aW9uKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGVhY2hmbi5tYXAodGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGVhY2hmbi5lYWNoKF9rZXlzKHRhc2tzKSwgZnVuY3Rpb24gKGssIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGFza3Nba10oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogYXN5bmMubWFwLCBlYWNoOiBhc3luYy5lYWNoIH0sIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogX21hcExpbWl0KGxpbWl0KSwgZWFjaDogX2VhY2hMaW1pdChsaW1pdCkgfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICBhc3luYy5tYXBTZXJpZXModGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5pdGVyYXRvciA9IGZ1bmN0aW9uICh0YXNrcykge1xuICAgICAgICB2YXIgbWFrZUNhbGxiYWNrID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmbi5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCB0YXNrcy5sZW5ndGggLSAxKSA/IG1ha2VDYWxsYmFjayhpbmRleCArIDEpOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KFxuICAgICAgICAgICAgICAgIG51bGwsIGFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgX2NvbmNhdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHIgPSByLmNvbmNhdCh5IHx8IFtdKTtcbiAgICAgICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRlc3QoKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLndoaWxzdCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvV2hpbHN0ID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAodGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMudW50aWwodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAoIXRlc3QuYXBwbHkobnVsbCwgYXJncykpIHtcbiAgICAgICAgICAgICAgICBhc3luYy5kb1VudGlsKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcG9zLCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxLnNhdHVyYXRlZCAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHEuZHJhaW4gPSBudWxsO1xuICAgICAgICAgICAgICBxLnRhc2tzID0gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gcS50YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocS5lbXB0eSAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLmRyYWluICYmIHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UobmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcih0YXNrLmRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSB0cnVlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSBxLmNvbmN1cnJlbmN5OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMucHJpb3JpdHlRdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG5cbiAgICAgICAgZnVuY3Rpb24gX2NvbXBhcmVUYXNrcyhhLCBiKXtcbiAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgIHZhciBiZWcgPSAtMSxcbiAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBzZXF1ZW5jZVttaWRdKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGJlZyA9IG1pZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiZWc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG5vcm1hbCBxdWV1ZVxuICAgICAgICB2YXIgcSA9IGFzeW5jLnF1ZXVlKHdvcmtlciwgY29uY3VycmVuY3kpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciB3b3JraW5nICAgICA9IGZhbHNlLFxuICAgICAgICAgICAgdGFza3MgICAgICAgPSBbXTtcblxuICAgICAgICB2YXIgY2FyZ28gPSB7XG4gICAgICAgICAgICB0YXNrczogdGFza3MsXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBudWxsLFxuICAgICAgICAgICAgZW1wdHk6IG51bGwsXG4gICAgICAgICAgICBkcmFpbjogbnVsbCxcbiAgICAgICAgICAgIGRyYWluZWQ6IHRydWUsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZ28uc2F0dXJhdGVkICYmIHRhc2tzLmxlbmd0aCA9PT0gcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ28uc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoY2FyZ28ucHJvY2Vzcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcygpIHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2luZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2FyZ28uZHJhaW4gJiYgIWNhcmdvLmRyYWluZWQpIGNhcmdvLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvLmRyYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRzID0gdHlwZW9mIHBheWxvYWQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0YXNrcy5zcGxpY2UoMCwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tzLnNwbGljZSgwLCB0YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRzID0gX21hcCh0cywgZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmKGNhcmdvLmVtcHR5KSBjYXJnby5lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHdvcmtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtlcihkcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JraW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKHRzLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjYXJnbztcbiAgICB9O1xuXG4gICAgdmFyIF9jb25zb2xlX2ZuID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZWFjaChhcmdzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbmFtZV0oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIG1lbW9ba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICBxW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfTtcblxuICAgIGFzeW5jLnVubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb3VudGVyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jLm1hcFNlcmllcyhjb3VudGVyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXEgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXN5bmMucmVkdWNlKGZucywgYXJncywgZnVuY3Rpb24gKG5ld2FyZ3MsIGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KFtmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1dKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy5jb21wb3NlID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICB2YXIgX2FwcGx5RWFjaCA9IGZ1bmN0aW9uIChlYWNoZm4sIGZucyAvKmFyZ3MuLi4qLykge1xuICAgICAgICB2YXIgZ28gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzLmNvbmNhdChbY2JdKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgICAgIHJldHVybiBnby5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuYXBwbHlFYWNoID0gZG9QYXJhbGxlbChfYXBwbHlFYWNoKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBkb1NlcmllcyhfYXBwbHlFYWNoKTtcblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbihuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsInZhciBhc3luYyAgICAgICA9IHJlcXVpcmUoJ2FzeW5jJyksXG4gICAgdXJsUGFyc2VyICAgPSByZXF1aXJlKCd1cmwnKSxcbiAgICBSZXNvdXJjZSAgICA9IHJlcXVpcmUoJy4vUmVzb3VyY2UnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgbXVsdGlwbGUgcmVzb3VyY2VzIHRvIGxvYWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KSB7XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICBjb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByb2dyZXNzIHBlcmNlbnQgb2YgdGhlIGxvYWRlciBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRpbmcgc3RhdGUgb2YgdGhlIGxvYWRlciwgdHJ1ZSBpZiBpdCBpcyBjdXJyZW50bHkgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdG90YWwgcHJvZ3Jlc3MgdGhhdCBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGJlZm9yZSBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaWRkbGV3YXJlIHRvIHJ1biBhZnRlciBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfbG9hZFJlc291cmNlYCBmdW5jdGlvbiBib3VuZCB3aXRoIHRoaXMgb2JqZWN0IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kTG9hZFJlc291cmNlID0gdGhpcy5fbG9hZFJlc291cmNlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkxvYWRgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkxvYWQgPSB0aGlzLl9vbkxvYWQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvdXJjZSBidWZmZXIgdGhhdCBmaWxscyB1bnRpbCBgbG9hZGAgaXMgY2FsbGVkIHRvIHN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB0cmFjayBsb2FkIGNvbXBsZXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9udW1Ub0xvYWQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlcyB3YWl0aW5nIHRvIGJlIGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2VbXX1cbiAgICAgKi9cbiAgICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX2JvdW5kTG9hZFJlc291cmNlLCBjb25jdXJyZW5jeSk7XG5cbiAgICAvKipcbiAgICAgKiBBbGwgdGhlIHJlc291cmNlcyBmb3IgdGhpcyBsb2FkZXIga2V5ZWQgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIFJlc291cmNlPn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgb3IgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwcm9ncmVzc1xuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGVycm9yZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGxvYWRlciBiZWdpbnMgdG8gcHJvY2VzcyB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBxdWV1ZWQgcmVzb3VyY2VzIGFsbCBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbi8qKlxuICogQWRkcyBhIHJlc291cmNlIChvciBtdWx0aXBsZSByZXNvdXJjZXMpIHRvIHRoZSBsb2FkZXIgcXVldWUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gdGFrZSBhIHdpZGUgdmFyaWV0eSBvZiBkaWZmZXJlbnQgcGFyYW1ldGVycy4gVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBhbHdheXNcbiAqIHJlcXVpcmVkIHRoZSB1cmwgdG8gbG9hZC4gQWxsIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOlxuICpcbiAqIGBgYGpzXG4gKiBsb2FkZXJcbiAqICAgICAvLyBub3JtYWwgcGFyYW0gc3ludGF4XG4gKiAgICAgLmFkZCgna2V5JywgJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJywgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCgnaHR0cDovLy4uLicpXG4gKlxuICogICAgIC8vIG9iamVjdCBzeW50YXhcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgbmFtZTogJ2tleTInLFxuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MycsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9XG4gKiAgICAgfSlcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgdXJsOiAnaHR0cHM6Ly8uLi4nLFxuICogICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7fSxcbiAqICAgICAgICAgY3Jvc3NPcmlnaW46IHRydWVcbiAqICAgICB9KVxuICpcbiAqICAgICAvLyB5b3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBvYmplY3RzIG9yIHVybHMgb3IgYm90aFxuICogICAgIC5hZGQoW1xuICogICAgICAgICB7IG5hbWU6ICdrZXk0JywgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgIHsgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgICdodHRwOi8vLi4uJ1xuICogICAgIF0pO1xuICogYGBgXG4gKlxuICogQGFsaWFzIGVucXVldWVcbiAqIEBwYXJhbSBbbmFtZV0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQsIGlmIG5vdCBwYXNzZWQgdGhlIHVybCBpcyB1c2VkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCByZWxhdGl2ZSB0byB0aGUgYmFzZVVybCBvZiB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7Ym9vbGVhbn0gSXMgdGhpcyByZXF1ZXN0IGNyb3NzLW9yaWdpbj8gRGVmYXVsdCBpcyB0byBkZXRlcm1pbmUgYXV0b21hdGljYWxseS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5sb2FkVHlwZT1SZXNvdXJjZS5MT0FEX1RZUEUuWEhSXSB7UmVzb3VyY2UuWEhSX0xPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGlzIHNwZWNpZmljIHJlc291cmNlIGNvbXBsZXRlcyBsb2FkaW5nLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFkZCA9IExvYWRlci5wcm90b3R5cGUuZW5xdWV1ZSA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIGNiKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIG9mIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hZGQobmFtZVtpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBpZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluc3RlYWQgb2YgcGFyYW1zXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYiA9IHVybCB8fCBuYW1lLmNhbGxiYWNrIHx8IG5hbWUub25Db21wbGV0ZTtcbiAgICAgICAgb3B0aW9ucyA9IG5hbWU7XG4gICAgICAgIHVybCA9IG5hbWUudXJsO1xuICAgICAgICBuYW1lID0gbmFtZS5uYW1lIHx8IG5hbWUua2V5IHx8IG5hbWUudXJsO1xuICAgIH1cblxuICAgIC8vIGNhc2Ugd2hlcmUgbm8gbmFtZSBpcyBwYXNzZWQgc2hpZnQgYWxsIGFyZ3Mgb3ZlciBieSBvbmUuXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHVybDtcbiAgICAgICAgdXJsID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBzaGlmdGVkIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIHVybC5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB1cmwgcGFzc2VkIHRvIGFkZCByZXNvdXJjZSB0byBsb2FkZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gb3B0aW9ucyBhcmUgb3B0aW9uYWwgc28gcGVvcGxlIG1pZ2h0IHBhc3MgYSBmdW5jdGlvbiBhbmQgbm8gb3B0aW9uc1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHJlc291cmNlIGFscmVhZHkgZXhpc3RzLlxuICAgIGlmICh0aGlzLnJlc291cmNlc1tuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc291cmNlIHdpdGggbmFtZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgIH1cblxuICAgIC8vIGFkZCBiYXNlIHVybCBpZiB0aGlzIGlzbid0IGFuIGFic29sdXRlIHVybFxuICAgIHVybCA9IHRoaXMuX2hhbmRsZUJhc2VVcmwodXJsKTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgc3RvcmUgdGhlIHJlc291cmNlXG4gICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0gPSBuZXcgUmVzb3VyY2UobmFtZSwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0ub25jZSgnYWZ0ZXJNaWRkbGV3YXJlJywgY2IpO1xuICAgIH1cblxuICAgIHRoaXMuX251bVRvTG9hZCsrO1xuXG4gICAgLy8gaWYgYWxyZWFkeSBsb2FkaW5nIGFkZCBpdCB0byB0aGUgd29ya2VyIHF1ZXVlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAoMTAwIC0gdGhpcy5wcm9ncmVzcykgLyAodGhpcy5fcXVldWUubGVuZ3RoKCkgKyB0aGlzLl9xdWV1ZS5ydW5uaW5nKCkpO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgYnVmZmVyIGl0IHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSBsYXRlclxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9idWZmZXIucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAxMDAgLyB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuTG9hZGVyLnByb3RvdHlwZS5faGFuZGxlQmFzZVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFyc2VkVXJsID0gdXJsUGFyc2VyLnBhcnNlKHVybCk7XG5cbiAgICAvLyBhYnNvbHV0ZSB1cmwsIGp1c3QgdXNlIGl0IGFzIGlzLlxuICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgfHwgcGFyc2VkVXJsLnBhdGhuYW1lLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBpZiBiYXNlVXJsIGRvZXNuJ3QgZW5kIGluIHNsYXNoIGFuZCB1cmwgZG9lc24ndCBzdGFydCB3aXRoIHNsYXNoLCB0aGVuIGFkZCBhIHNsYXNoIGluYmV0d2VlblxuICAgIGlmIChcbiAgICAgICAgdGhpcy5iYXNlVXJsLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmJhc2VVcmwubGFzdEluZGV4T2YoJy8nKSAhPT0gdGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgdXJsLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyAnLycgKyB1cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsICsgdXJsO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBTZXRzIHVwIGEgbWlkZGxld2FyZSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuICpiZWZvcmUqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyBwcmVcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYmVmb3JlID0gTG9hZGVyLnByb3RvdHlwZS5wcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLnB1c2goZm4pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmFmdGVyKiB0aGVcbiAqIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqXG4gKiBAYWxpYXMgdXNlXG4gKiBAcGFyYW0gbWlkZGxld2FyZSB7ZnVuY3Rpb259IFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFmdGVyID0gTG9hZGVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9hZnRlck1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoZSBxdWV1ZSBvZiB0aGUgbG9hZGVyIHRvIHByZXBhcmUgZm9yIGEgbmV3IGxvYWQuXG4gKlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvLyB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG4gICAgLy8gdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gICAgdGhpcy5fcXVldWUuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGxvYWRpbmcgdGhlIHF1ZXVlZCByZXNvdXJjZXMuXG4gKlxuICogQGZpcmVzIHN0YXJ0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgYGNvbXBsZXRlYCBldmVudC5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgLy8gcmVnaXN0ZXIgY29tcGxldGUgY2FsbGJhY2sgaWYgdGhleSBwYXNzIG9uZVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcXVldWUgaGFzIGFscmVhZHkgc3RhcnRlZCB3ZSBhcmUgZG9uZSBoZXJlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm90aWZ5IG9mIHN0YXJ0XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gc3RhcnQgdGhlIGludGVybmFsIHF1ZXVlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLl9idWZmZXJbaV0pO1xuICAgIH1cblxuICAgIC8vIGVtcHR5IHRoZSBidWZmZXJcbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBMb2FkcyBhIHNpbmdsZSByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX2xvYWRSZXNvdXJjZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZGVxdWV1ZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHJlc291cmNlLl9kZXF1ZXVlID0gZGVxdWV1ZTtcblxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gcmVzb3VyY2Uub24oJ3Byb2dyZXNzJywgc2VsZi5lbWl0LmJpbmQoc2VsZiwgJ3Byb2dyZXNzJykpO1xuXG4gICAgICAgIHJlc291cmNlLmxvYWQoc2VsZi5fYm91bmRPbkxvYWQpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgb25jZSBlYWNoIHJlc291cmNlIGhhcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzLCB0aGlzLnJlc291cmNlcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBlYWNoIHRpbWUgYSByZXNvdXJjZXMgaXMgbG9hZGVkLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQGZpcmVzIGVycm9yXG4gKiBAZmlyZXMgbG9hZFxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgdGhpcy5wcm9ncmVzcyArPSB0aGlzLl9wcm9ncmVzc0NodW5rO1xuXG4gICAgdGhpcy5lbWl0KCdwcm9ncmVzcycsIHRoaXMsIHJlc291cmNlKTtcblxuICAgIC8vIHJ1biBtaWRkbGV3YXJlLCB0aGlzICptdXN0KiBoYXBwZW4gYmVmb3JlIGRlcXVldWUgc28gc3ViLWFzc2V0cyBnZXQgYWRkZWQgcHJvcGVybHlcbiAgICB0aGlzLl9ydW5NaWRkbGV3YXJlKHJlc291cmNlLCB0aGlzLl9hZnRlck1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzb3VyY2UuZW1pdCgnYWZ0ZXJNaWRkbGV3YXJlJywgcmVzb3VyY2UpO1xuXG4gICAgICAgIHRoaXMuX251bVRvTG9hZC0tO1xuXG4gICAgICAgIC8vIGRvIGNvbXBsZXRpb24gY2hlY2tcbiAgICAgICAgaWYgKHRoaXMuX251bVRvTG9hZCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgIHRoaXMuX29uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc291cmNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgcmVzb3VyY2UuZXJyb3IsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZCcsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuXG5cbiAgICAvLyByZW1vdmUgdGhpcyByZXNvdXJjZSBmcm9tIHRoZSBhc3luYyBxdWV1ZVxuICAgIHJlc291cmNlLl9kZXF1ZXVlKCk7XG59O1xuXG4vKipcbiAqIFJ1biBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvbiBhIHJlc291cmNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX3J1bk1pZGRsZXdhcmUgPSBmdW5jdGlvbiAocmVzb3VyY2UsIGZucywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzKGZucywgZnVuY3Rpb24gKGZuLCBuZXh0KSB7XG4gICAgICAgIGZuLmNhbGwoc2VsZiwgcmVzb3VyY2UsIG5leHQpO1xuICAgIH0sIGNiLmJpbmQodGhpcywgcmVzb3VyY2UpKTtcbn07XG5cbkxvYWRlci5MT0FEX1RZUEUgPSBSZXNvdXJjZS5MT0FEX1RZUEU7XG5Mb2FkZXIuWEhSX1JFQURZX1NUQVRFID0gUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFO1xuTG9hZGVyLlhIUl9SRVNQT05TRV9UWVBFID0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEU7XG4iLCJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIF91cmwgPSByZXF1aXJlKCd1cmwnKSxcbiAgICAvLyB0ZXN0cyBpcyBDT1JTIGlzIHN1cHBvcnRlZCBpbiBYSFIsIGlmIG5vdCB3ZSBuZWVkIHRvIHVzZSBYRFJcbiAgICB1c2VYZHIgPSAhISh3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiAobmV3IFhNTEh0dHBSZXF1ZXN0KCkpKSksXG4gICAgdGVtcEFuY2hvciA9IG51bGw7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgYSBzaW5nbGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnlcbiAqIGEgc2luZ2xlIFVSTC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBuYW1lIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCBmb3IgYXVkaW8vdmlkZW8gbG9hZHMgeW91IGNhbiBwYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMuXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5jcm9zc09yaWdpbl0ge3N0cmluZ3xib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5MT0FEX1RZUEV9IEhvdyBzaG91bGQgdGhpcyByZXNvdXJjZSBiZSBsb2FkZWQ/XG4gKiBAcGFyYW0gW29wdGlvbnMueGhyVHlwZT1SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ERUZBVUxUXSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IEhvdyBzaG91bGQgdGhlIGRhdGEgYmVpbmdcbiAqICAgICAgbG9hZGVkIGJlIGludGVycHJldGVkIHdoZW4gdXNpbmcgWEhSP1xuICogQHBhcmFtIFtvcHRpb25zLm1ldGFkYXRhXSB7b2JqZWN0fSBFeHRyYSBpbmZvIGZvciBtaWRkbGV3YXJlLlxuICovXG5mdW5jdGlvbiBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggbmFtZSBhbmQgdXJsIGFyZSByZXF1aXJlZCBmb3IgY29uc3RydWN0aW5nIGEgcmVzb3VyY2UuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVybCB1c2VkIHRvIGxvYWQgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHVybCBpcyBhIGRhdGEgdXJsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzRGF0YVVybCA9IHRoaXMudXJsLmluZGV4T2YoJ2RhdGE6JykgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSB0aGF0IHdhcyBsb2FkZWQgYnkgdGhlIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55fVxuICAgICAqL1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBvcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJ2Fub255bW91cycgOiBvcHRpb25zLmNyb3NzT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCBvZiBsb2FkaW5nIHRvIHVzZSBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlLkxPQURfVFlQRX1cbiAgICAgKi9cbiAgICB0aGlzLmxvYWRUeXBlID0gb3B0aW9ucy5sb2FkVHlwZSB8fCB0aGlzLl9kZXRlcm1pbmVMb2FkVHlwZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgdXNlZCB0byBsb2FkIHRoZSByZXNvdXJjZSB2aWEgWEhSLiBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMueGhyVHlwZSA9IG9wdGlvbnMueGhyVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgKGlmIGFueSkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFcnJvcn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBYSFIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLiBUaGlzIGlzIG9ubHkgc2V0XG4gICAgICogd2hlbiBgbG9hZFR5cGVgIGlzIGBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1hNTEh0dHBSZXF1ZXN0fVxuICAgICAqL1xuICAgIHRoaXMueGhyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMganNvbi4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNKc29uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIHhtbC4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNYbWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gaW1hZ2UgdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0ltYWdlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGFuIGF1ZGlvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNBdWRpbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhIHZpZGVvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNWaWRlbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBkZXF1ZXVlYCBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgYSBzdG9yYWdlIHBsYWNlIGZvciB0aGUgYXN5bmMgcXVldWUgZGVxdWV1ZSBtZXRob2RcbiAgICAgKiB1c2VkIHByaXZhdGVseSBieSB0aGUgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kZXF1ZXVlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tcGxldGVgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZENvbXBsZXRlID0gdGhpcy5jb21wbGV0ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25FcnJvcmAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25FcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uUHJvZ3Jlc3NgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MgPSB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyk7XG5cbiAgICAvLyB4aHIgY2FsbGJhY2tzXG4gICAgdGhpcy5fYm91bmRYaHJPbkVycm9yID0gdGhpcy5feGhyT25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25BYm9ydCA9IHRoaXMuX3hock9uQWJvcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9ib3VuZFhock9uTG9hZCA9IHRoaXMuX3hock9uTG9hZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0ID0gdGhpcy5feGRyT25UaW1lb3V0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJlc291cmNlIGJlaW5ncyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBlYWNoIHRpbWUgcHJvZ3Jlc3Mgb2YgdGhpcyByZXNvdXJjZSBsb2FkIHVwZGF0ZXMuXG4gICAgICogTm90IGFsbCByZXNvdXJjZXMgdHlwZXMgYW5kIGxvYWRlciBzeXN0ZW1zIGNhbiBzdXBwb3J0IHRoaXMgZXZlbnRcbiAgICAgKiBzbyBzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIElmIHRoZSByZXNvdXJjZVxuICAgICAqIGlzIGJlaW5nIGxvYWRlZCBvbiBhIG1vZGVybiBicm93c2VyLCB1c2luZyBYSFIsIGFuZCB0aGUgcmVtb3RlIHNlcnZlclxuICAgICAqIHByb3Blcmx5IHNldHMgQ29udGVudC1MZW5ndGggaGVhZGVycywgdGhlbiB0aGlzIHdpbGwgYmUgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHRoaXMgcmVzb3VyY2UgaGFzIGxvYWRlZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGl0IHdpbGxcbiAgICAgKiBiZSBpbiB0aGUgYGVycm9yYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb21wbGV0ZVxuICAgICAqIEBtZW1iZXJvZiBSZXNvdXJjZSNcbiAgICAgKi9cbn1cblxuUmVzb3VyY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblJlc291cmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlc291cmNlO1xubW9kdWxlLmV4cG9ydHMgPSBSZXNvdXJjZTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgcmVzb3VyY2UgYXMgY29tcGxldGUuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIGluIGEgd3JhcHBlciBvciBzb21ldGhpbmcuLi5ncm9zcy4uLi5cbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvcik7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgICBpZiAodGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGhyLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub250aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMueGhyLm9ucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25sb2FkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogS2lja3Mgb2ZmIGxvYWRpbmcgb2YgdGhpcyByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gaWYgYSBjYWxsYmFjayBpcyBzZXQsIGxpc3RlbiBmb3IgY29tcGxldGUgZXZlbnRcbiAgICBpZiAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luID09PSBmYWxzZSB8fCB0eXBlb2YgdGhpcy5jcm9zc09yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHRoaXMuX2RldGVybWluZUNyb3NzT3JpZ2luKHRoaXMudXJsKTtcbiAgICB9XG5cbiAgICBzd2l0Y2godGhpcy5sb2FkVHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRTpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRJbWFnZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuQVVESU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlZJREVPOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5YSFI6XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodXNlWGRyICYmIHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGRyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGhyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEltYWdlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLnNyYyA9IHRoaXMudXJsO1xuXG4gICAgdGhpcy5pc0ltYWdlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBIVE1MQXVkaW9FbGVtZW50IG9yIEhUTUxWaWRlb0VsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdhdWRpbycgJiYgdHlwZW9mIEF1ZGlvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQXVkaW8oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBlbGVtZW50ICcgKyB0eXBlKTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBmb3IgQ29jb29uSlMgQ2FudmFzKyBydW50aW1lLCBsYWNrcyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKVxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUykge1xuICAgICAgICB0aGlzLmRhdGEuc3JjID0gQXJyYXkuaXNBcnJheSh0aGlzLnVybCkgPyB0aGlzLnVybFswXSA6IHRoaXMudXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51cmwpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXJsLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybFtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1snaXMnICsgdHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSldID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUsIGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YS5sb2FkKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhNTEh0dHBSZXF1ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBzZXQgdGhlIHJlcXVlc3QgdHlwZSBhbmQgdXJsXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsLCB0cnVlKTtcblxuICAgIC8vIGxvYWQganNvbiBhcyB0ZXh0IGFuZCBwYXJzZSBpdCBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgLy8gKmNvdWdoKiBzYWZhcmkgKmNvdWdoKiBjYW4ndCBkZWFsIHdpdGggaXQuXG4gICAgaWYgKHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTiB8fCB0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHRoaXMueGhyVHlwZTtcbiAgICB9XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkLCBmYWxzZSk7XG5cbiAgICB4aHIuc2VuZCgpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBYRG9tYWluUmVxdWVzdC4gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdXBwb3J0IElFOSAoZ3Jvc3MpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhkciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhkciA9IHRoaXMueGhyID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7XG5cbiAgICAvLyBYRG9tYWluUmVxdWVzdCBoYXMgYSBmZXcgcXVpcmtzLiBPY2Nhc2lvbmFsbHkgaXQgd2lsbCBhYm9ydCByZXF1ZXN0c1xuICAgIC8vIEEgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbWFrZSBzdXJlIEFMTCBjYWxsYmFja3MgYXJlIHNldCBldmVuIGlmIG5vdCB1c2VkXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU3ODY5NjYveGRvbWFpbnJlcXVlc3QtYWJvcnRzLXBvc3Qtb24taWUtOVxuICAgIHhkci50aW1lb3V0ID0gNTAwMDtcblxuICAgIHhkci5vbmVycm9yID0gdGhpcy5fYm91bmRYaHJPbkVycm9yO1xuICAgIHhkci5vbnRpbWVvdXQgPSB0aGlzLl9ib3VuZFhkck9uVGltZW91dDtcbiAgICB4ZHIub25wcm9ncmVzcyA9IHRoaXMuX2JvdW5kT25Qcm9ncmVzcztcbiAgICB4ZHIub25sb2FkID0gdGhpcy5fYm91bmRYaHJPbkxvYWQ7XG5cbiAgICB4ZHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gIE5vdGU6IFRoZSB4ZHIuc2VuZCgpIGNhbGwgaXMgd3JhcHBlZCBpbiBhIHRpbWVvdXQgdG8gcHJldmVudCBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmZhY2Ugd2hlcmUgc29tZSByZXF1ZXN0cyBhcmUgbG9zdFxuICAgIC8vICBpZiBtdWx0aXBsZSBYRG9tYWluUmVxdWVzdHMgYXJlIGJlaW5nIHNlbnQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAvLyBTb21lIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9pc3N1ZXMvMTI0OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB4ZHIuc2VuZCgpO1xuICAgIH0sIDApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc291cmNlIHVzZWQgaW4gbG9hZGluZyB2aWEgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSBUaGUgZWxlbWVudCB0eXBlICh2aWRlbyBvciBhdWRpbykuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSBzb3VyY2UgVVJMIHRvIGxvYWQgZnJvbS5cbiAqIEBwYXJhbSBbbWltZV0ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSBvZiB0aGUgdmlkZW9cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fY3JlYXRlU291cmNlID0gZnVuY3Rpb24gKHR5cGUsIHVybCwgbWltZSkge1xuICAgIGlmICghbWltZSkge1xuICAgICAgICBtaW1lID0gdHlwZSArICcvJyArIHVybC5zdWJzdHIodXJsLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gdXJsO1xuICAgIHNvdXJjZS50eXBlID0gbWltZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgZXJyb3JzIG91dC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgZXJyb3IgZXZlbnQgZnJvbSB0aGUgZWxlbWVudCB0aGF0IGVtaXRzIGl0LlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgZWxlbWVudCB1c2luZyAnICsgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgcHJvZ3Jlc3MgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fb25Qcm9ncmVzcyA9ICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGVycm9yIGV2ZW50IGZpcmVzIGZvciB4aHIveGRyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RFcnJvckV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIHJlcVR5cGUodGhpcy54aHIpICsgJyBSZXF1ZXN0IGZhaWxlZC4gJyArXG4gICAgICAgICdTdGF0dXM6ICcgKyB0aGlzLnhoci5zdGF0dXMgKyAnLCB0ZXh0OiBcIicgKyB0aGlzLnhoci5zdGF0dXNUZXh0ICsgJ1wiJ1xuICAgICk7XG5cbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhbiBhYm9ydCBldmVudCBmaXJlcyBmb3IgeGhyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RBYm9ydEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3Qgd2FzIGFib3J0ZWQgYnkgdGhlIHVzZXIuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYSB0aW1lb3V0IGV2ZW50IGZpcmVzIGZvciB4ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGRyT25UaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgdGltZWQgb3V0LicpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gZGF0YSBzdWNjZXNzZnVsbHkgbG9hZHMgZnJvbSBhbiB4aHIveGRyIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdExvYWRFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGhyT25Mb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB4aHIgPSB0aGlzLnhocixcbiAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1cyAhPT0gdW5kZWZpbmVkID8geGhyLnN0YXR1cyA6IDIwMDsgLy9YRFIgaGFzIG5vIGAuc3RhdHVzYCwgYXNzdW1lIDIwMC5cblxuICAgIC8vIHN0YXR1cyBjYW4gYmUgMCB3aGVuIHVzaW5nIHRoZSBmaWxlOi8vIHByb3RvY29sLCBhbHNvIGNoZWNrIGlmIGEgcmVzcG9uc2Ugd2FzIGZvdW5kXG4gICAgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA0IHx8IChzdGF0dXMgPT09IDAgJiYgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkge1xuICAgICAgICAvLyBpZiB0ZXh0LCBqdXN0IHJldHVybiBpdFxuICAgICAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGpzb24sIHBhcnNlIGludG8ganNvbiBvYmplY3RcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0pzb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGxvYWRlZCBqc29uOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHhtbCwgcGFyc2UgaW50byBhbiB4bWwgZG9jdW1lbnQgb3IgZGl2IGVsZW1lbnRcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LkRPTVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhoci5yZXNwb25zZVRleHQsICd0ZXh0L3htbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZGl2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzWG1sID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIHhtbDonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlciB0eXBlcyBqdXN0IHJldHVybiB0aGUgcmVzcG9uc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2UgfHwgeGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignWycgKyB4aHIuc3RhdHVzICsgJ10nICsgeGhyLnN0YXR1c1RleHQgKyAnOicgKyB4aHIucmVzcG9uc2VVUkwpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbmZ1bmN0aW9uIHJlcVR5cGUoeGhyKSB7XG4gICAgcmV0dXJuIHhoci50b1N0cmluZygpLnJlcGxhY2UoJ29iamVjdCAnLCAnJyk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYGNyb3NzT3JpZ2luYCBwcm9wZXJ0eSBmb3IgdGhpcyByZXNvdXJjZSBiYXNlZCBvbiBpZiB0aGUgdXJsXG4gKiBmb3IgdGhpcyByZXNvdXJjZSBpcyBjcm9zcy1vcmlnaW4uIElmIGNyb3NzT3JpZ2luIHdhcyBtYW51YWxseSBzZXQsIHRoaXNcbiAqIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIHRvIHRlc3QuXG4gKiBAcGFyYW0gW2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbl0ge29iamVjdH0gVGhlIGxvY2F0aW9uIG9iamVjdCB0byB0ZXN0IGFnYWluc3QuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjcm9zc09yaWdpbiB2YWx1ZSB0byB1c2UgKG9yIGVtcHR5IHN0cmluZyBmb3Igbm9uZSkuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbiAodXJsLCBsb2MpIHtcbiAgICAvLyBkYXRhOiBhbmQgamF2YXNjcmlwdDogdXJscyBhcmUgY29uc2lkZXJlZCBzYW1lLW9yaWdpblxuICAgIGlmICh1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBpcyB3aW5kb3cubG9jYXRpb25cbiAgICBsb2MgPSBsb2MgfHwgd2luZG93LmxvY2F0aW9uO1xuXG4gICAgaWYgKCF0ZW1wQW5jaG9yKSB7XG4gICAgICAgIHRlbXBBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgfVxuXG4gICAgLy8gbGV0IHRoZSBicm93c2VyIGRldGVybWluZSB0aGUgZnVsbCBocmVmIGZvciB0aGUgdXJsIG9mIHRoaXMgcmVzb3VyY2UgYW5kIHRoZW5cbiAgICAvLyBwYXJzZSB3aXRoIHRoZSBub2RlIHVybCBsaWIsIHdlIGNhbid0IHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgICAvLyBiZWNhdXNlIHRoZXkgZG9uJ3Qgd29yayBpbiBJRTkgOihcbiAgICB0ZW1wQW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgdXJsID0gX3VybC5wYXJzZSh0ZW1wQW5jaG9yLmhyZWYpO1xuXG4gICAgdmFyIHNhbWVQb3J0ID0gKCF1cmwucG9ydCAmJiBsb2MucG9ydCA9PT0gJycpIHx8ICh1cmwucG9ydCA9PT0gbG9jLnBvcnQpO1xuXG4gICAgLy8gaWYgY3Jvc3Mgb3JpZ2luXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gbG9jLmhvc3RuYW1lIHx8ICFzYW1lUG9ydCB8fCB1cmwucHJvdG9jb2wgIT09IGxvYy5wcm90b2NvbCkge1xuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZXNwb25zZVR5cGUgb2YgYW4gWEhSIHJlcXVlc3QgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGVcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSByZXNwb25zZVR5cGUgdG8gdXNlLlxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZVhoclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlc291cmNlLl94aHJUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVMb2FkVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX2xvYWRUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXMudXJsLFxuICAgICAgICBleHQ7XG5cbiAgICBpZiAodGhpcy5pc0RhdGFVcmwpIHtcbiAgICAgICAgdmFyIHNsYXNoSW5kZXggPSB1cmwuaW5kZXhPZignLycpO1xuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHNsYXNoSW5kZXggKyAxLCB1cmwuaW5kZXhPZignOycsIHNsYXNoSW5kZXgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBxdWVyeVN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXh0ID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQ7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG1pbWUgdHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgcmVzcG9uc2VUeXBlIG9mXG4gKiByZXNvdXJjZSBiZWluZyBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZ2V0TWltZUZyb21YaHJUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5JztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0I6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2Jsb2InO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQ6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCc7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQ6XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVDpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG5cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsb2FkaW5nIGEgcmVzb3VyY2UgY2FuIHVzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBMT0FEX1RZUEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuWEhSIC0gVXNlcyBYTUxIdHRwUmVxdWVzdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuSU1BR0UgLSBVc2VzIGFuIGBJbWFnZWAgb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5BVURJTyAtIFVzZXMgYW4gYEF1ZGlvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLlZJREVPIC0gVXNlcyBhIGBWaWRlb2Agb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICovXG5SZXNvdXJjZS5MT0FEX1RZUEUgPSB7XG4gICAgWEhSOiAgICAxLFxuICAgIElNQUdFOiAgMixcbiAgICBBVURJTzogIDMsXG4gICAgVklERU86ICA0XG59O1xuXG4vKipcbiAqIFRoZSBYSFIgcmVhZHkgc3RhdGVzLCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gWEhSX1JFQURZX1NUQVRFXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLlVOU0VOVCAtIG9wZW4oKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5PUEVORUQgLSBzZW5kKCloYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuSEVBREVSU19SRUNFSVZFRCAtIHNlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuTE9BRElORyAtIERvd25sb2FkaW5nOyByZXNwb25zZVRleHQgaG9sZHMgcGFydGlhbCBkYXRhLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5ET05FIC0gVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFID0ge1xuICAgIFVOU0VOVDogMCxcbiAgICBPUEVORUQ6IDEsXG4gICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICBMT0FESU5HOiAzLFxuICAgIERPTkU6IDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVTUE9OU0VfVFlQRVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQgLSBkZWZhdWx0cyB0byB0ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSIC0gQXJyYXlCdWZmZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CTE9CIC0gQmxvYlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UIC0gRG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5KU09OIC0gT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCAtIFN0cmluZ1xuICovXG5SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRSA9IHtcbiAgICBERUZBVUxUOiAgICAndGV4dCcsXG4gICAgQlVGRkVSOiAgICAgJ2FycmF5YnVmZmVyJyxcbiAgICBCTE9COiAgICAgICAnYmxvYicsXG4gICAgRE9DVU1FTlQ6ICAgJ2RvY3VtZW50JyxcbiAgICBKU09OOiAgICAgICAnanNvbicsXG4gICAgVEVYVDogICAgICAgJ3RleHQnXG59O1xuXG5SZXNvdXJjZS5fbG9hZFR5cGVNYXAgPSB7XG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnYm1wJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGdhJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0Vcbn07XG5cblJlc291cmNlLl94aHJUeXBlTWFwID0ge1xuICAgIC8vIHhtbFxuICAgICd4aHRtbCc6ICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG1sJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG0nOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd4bWwnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0bXgnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0c3gnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdzdmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuXG4gICAgLy8gaW1hZ2VzXG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAncG5nJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBlZyc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnd2VicCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG5cbiAgICAvLyBqc29uXG4gICAgJ2pzb24nOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTixcblxuICAgIC8vIHRleHRcbiAgICAndGV4dCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhULFxuICAgICd0eHQnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFRcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSBsb2FkVHlwZSB7UmVzb3VyY2UuTE9BRF9UWVBFfSBUaGUgbG9hZCB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uTG9hZFR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgbG9hZFR5cGUpIHtcbiAgICBzZXRFeHRNYXAoUmVzb3VyY2UuX2xvYWRUeXBlTWFwLCBleHRuYW1lLCBsb2FkVHlwZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGxvYWQgdHlwZSB0byBiZSB1c2VkIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZXh0bmFtZSB7c3RyaW5nfSBUaGUgZXh0ZW5zaW9uIHRvIHNldCB0aGUgdHlwZSBmb3IsIGUuZy4gXCJwbmdcIiBvciBcImZudFwiXG4gKiBAcGFyYW0geGhyVHlwZSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSB4aHIgdHlwZSB0byBzZXQgaXQgdG8uXG4gKi9cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgeGhyVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5feGhyVHlwZU1hcCwgZXh0bmFtZSwgeGhyVHlwZSk7XG59O1xuXG5mdW5jdGlvbiBzZXRFeHRNYXAobWFwLCBleHRuYW1lLCB2YWwpIHtcbiAgICBpZiAoZXh0bmFtZSAmJiBleHRuYW1lLmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICBleHRuYW1lID0gZXh0bmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRuYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYXBbZXh0bmFtZV0gPSB2YWw7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIHByaXZhdGUgcHJvcGVydHlcbiAgICBfa2V5U3RyOiBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIsXG5cbiAgICBlbmNvZGVCaW5hcnk6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICAgICAgdmFyIGJ5dGVidWZmZXI7XG4gICAgICAgIHZhciBlbmNvZGVkQ2hhckluZGV4ZXMgPSBuZXcgQXJyYXkoNCk7XG4gICAgICAgIHZhciBpbnggPSAwO1xuICAgICAgICB2YXIgam54ID0gMDtcbiAgICAgICAgdmFyIHBhZGRpbmdCeXRlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmlsbCBieXRlIGJ1ZmZlciBhcnJheVxuICAgICAgICAgICAgYnl0ZWJ1ZmZlciA9IG5ldyBBcnJheSgzKTtcbiAgICAgICAgICAgIGZvciAoam54ID0gMDsgam54IDwgYnl0ZWJ1ZmZlci5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhd2F5IGhpZ2gtb3JkZXIgYnl0ZSwgYXMgZG9jdW1lbnRlZCBhdDpcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1MSHR0cFJlcXVlc3QjSGFuZGxpbmdfYmluYXJ5X2RhdGFcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gaW5wdXQuY2hhckNvZGVBdChpbngrKykgJiAweGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCBlYWNoIGVuY29kZWQgY2hhcmFjdGVyLCA2IGJpdHMgYXQgYSB0aW1lXG4gICAgICAgICAgICAvLyBpbmRleCAxOiBmaXJzdCA2IGJpdHNcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1swXSA9IGJ5dGVidWZmZXJbMF0gPj4gMjtcbiAgICAgICAgICAgIC8vIGluZGV4IDI6IHNlY29uZCA2IGJpdHMgKDIgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMSArIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAyKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzFdID0gKChieXRlYnVmZmVyWzBdICYgMHgzKSA8PCA0KSB8IChieXRlYnVmZmVyWzFdID4+IDQpO1xuICAgICAgICAgICAgLy8gaW5kZXggMzogdGhpcmQgNiBiaXRzICg0IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBpbnB1dCBieXRlIDIgKyAyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1syXSA9ICgoYnl0ZWJ1ZmZlclsxXSAmIDB4MGYpIDw8IDIpIHwgKGJ5dGVidWZmZXJbMl0gPj4gNik7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiBmb3J0aCA2IGJpdHMgKDYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IGJ5dGVidWZmZXJbMl0gJiAweDNmO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBwYWRkaW5nIGhhcHBlbmVkLCBhbmQgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBwYWRkaW5nQnl0ZXMgPSBpbnggLSAoaW5wdXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhZGRpbmdCeXRlcykge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxhc3QgMiBjaGFyYWN0ZXJzIHRvIHBhZGRpbmcgY2hhclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbM10gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCBjaGFyYWN0ZXIgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBObyBwYWRkaW5nIC0gcHJvY2VlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb3cgd2Ugd2lsbCBncmFiIGVhY2ggYXBwcm9wcmlhdGUgY2hhcmFjdGVyIG91dCBvZiBvdXIga2V5c3RyaW5nXG4gICAgICAgICAgICAvLyBiYXNlZCBvbiBvdXIgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCBpdCB0byB0aGUgb3V0cHV0IHN0cmluZ1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBlbmNvZGVkQ2hhckluZGV4ZXMubGVuZ3RoOyBqbngrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSB0aGlzLl9rZXlTdHIuY2hhckF0KGVuY29kZWRDaGFySW5kZXhlc1tqbnhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vTG9hZGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJlc291cmNlID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5taWRkbGV3YXJlID0ge1xuICAgIGNhY2hpbmc6IHtcbiAgICAgICAgbWVtb3J5OiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL2NhY2hpbmcvbWVtb3J5JylcbiAgICB9LFxuICAgIHBhcnNpbmc6IHtcbiAgICAgICAgYmxvYjogcmVxdWlyZSgnLi9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2InKVxuICAgIH1cbn07XG4iLCIvLyBhIHNpbXBsZSBpbi1tZW1vcnkgY2FjaGUgZm9yIHJlc291cmNlc1xudmFyIGNhY2hlID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgLy8gaWYgY2FjaGVkLCB0aGVuIHNldCBkYXRhIGFuZCBjb21wbGV0ZSB0aGUgcmVzb3VyY2VcbiAgICAgICAgaWYgKGNhY2hlW3Jlc291cmNlLnVybF0pIHtcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBjYWNoZVtyZXNvdXJjZS51cmxdO1xuICAgICAgICAgICAgcmVzb3VyY2UuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBub3QgY2FjaGVkLCB3YWl0IGZvciBjb21wbGV0ZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlLm9uY2UoJ2NvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgY2FjaGVbdGhpcy51cmxdID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJy4uLy4uL1Jlc291cmNlJyksXG4gICAgYjY0ID0gcmVxdWlyZSgnLi4vLi4vYjY0Jyk7XG5cbndpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cbi8vIGEgbWlkZGxld2FyZSBmb3IgdHJhbnNmb3JtaW5nIFhIUiBsb2FkZWQgQmxvYnMgaW50byBtb3JlIHVzZWZ1bCBvYmplY3RzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgYW4gWEhSIGxvYWQgb2YgYSBibG9iXG4gICAgICAgIGlmIChyZXNvdXJjZS54aHIgJiYgcmVzb3VyY2UueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQikge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYmxvYiBzdXBwb3J0IHdlIHByb2JhYmx5IGdvdCBhIGJpbmFyeSBzdHJpbmcgYmFja1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuQmxvYiB8fCB0eXBlb2YgcmVzb3VyY2UuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlc291cmNlLnhoci5nZXRSZXNwb25zZUhlYWRlcignY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGltYWdlLCBjb252ZXJ0IHRoZSBiaW5hcnkgc3RyaW5nIGludG8gYSBkYXRhIHVybFxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIHR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gJ2RhdGE6JyArIHR5cGUgKyAnO2Jhc2U2NCwnICsgYjY0LmVuY29kZUJpbmFyeShyZXNvdXJjZS54aHIucmVzcG9uc2VUZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5pc0ltYWdlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IHVudGlsIHRoZSBpbWFnZSBsb2FkcyBhbmQgdGhlbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnQgdHlwZSBzYXlzIHRoaXMgaXMgYW4gaW1hZ2UsIHRoZW4gd2Ugc2hvdWxkIHRyYW5zZm9ybSB0aGUgYmxvYiBpbnRvIGFuIEltYWdlIG9iamVjdFxuICAgICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UuZGF0YS50eXBlLmluZGV4T2YoJ2ltYWdlJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXNvdXJjZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmJsb2IgPSByZXNvdXJjZS5kYXRhO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLnNyYyA9IHNyYztcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCB0aGUgbm8gbG9uZ2VyIHVzZWQgYmxvYiBhZnRlciB0aGUgaW1hZ2UgbG9hZHNcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChzcmMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwicGl4aS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIzLjAuMTAtZGV2XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJQaXhpLmpzIGlzIGEgZmFzdCBsaWdodHdlaWdodCAyRCBsaWJyYXJ5IHRoYXQgd29ya3MgYWNyb3NzIGFsbCBkZXZpY2VzLlwiLFxuICBcImF1dGhvclwiOiBcIk1hdCBHcm92ZXNcIixcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIFwiQ2hhZCBFbmdsZXIgPGNoYWRAcGFudGhlcmRldi5jb20+XCIsXG4gICAgXCJSaWNoYXJkIERhdmV5IDxyZGF2ZXlAZ21haWwuY29tPlwiXG4gIF0sXG4gIFwibWFpblwiOiBcIi4vc3JjL2luZGV4LmpzXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ29vZGJveWRpZ2l0YWwuY29tL1wiLFxuICBcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzXCIsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJzdGFydFwiOiBcImd1bHAgJiYgZ3VscCB3YXRjaFwiLFxuICAgIFwidGVzdFwiOiBcImd1bHAgJiYgdGVzdGVtIGNpXCIsXG4gICAgXCJidWlsZFwiOiBcImd1bHBcIixcbiAgICBcImRvY3NcIjogXCJqc2RvYyAtYyAuL2d1bHAvdXRpbC9qc2RvYy5jb25mLmpzb24gLVIgUkVBRE1FLm1kXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW4vXCIsXG4gICAgXCJzcmMvXCIsXG4gICAgXCJDT05UUklCVVRJTkcubWRcIixcbiAgICBcIkxJQ0VOU0VcIixcbiAgICBcInBhY2thZ2UuanNvblwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYXN5bmNcIjogXCJeMS41LjBcIixcbiAgICBcImJyZnNcIjogXCJeMS40LjFcIixcbiAgICBcImVhcmN1dFwiOiBcIl4yLjAuN1wiLFxuICAgIFwiZXZlbnRlbWl0dGVyM1wiOiBcIl4xLjEuMVwiLFxuICAgIFwiZ2wtbWF0cml4XCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS90b2ppL2dsLW1hdHJpeC5naXRcIixcbiAgICBcIm9iamVjdC1hc3NpZ25cIjogXCJeNC4wLjFcIixcbiAgICBcInBpeGktZ2wtY29yZVwiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vR29vZEJveURpZ2l0YWwvcGl4aS1nbC1jb3JlLmdpdFwiLFxuICAgIFwicmVzb3VyY2UtbG9hZGVyXCI6IFwiXjEuNi40XCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYnJvd3NlcmlmeVwiOiBcIl4xMS4xLjBcIixcbiAgICBcImNoYWlcIjogXCJeMy4yLjBcIixcbiAgICBcImRlbFwiOiBcIl4yLjAuMlwiLFxuICAgIFwiZ3VscFwiOiBcIl4zLjkuMFwiLFxuICAgIFwiZ3VscC1jYWNoZWRcIjogXCJeMS4xLjBcIixcbiAgICBcImd1bHAtY29uY2F0XCI6IFwiXjIuNi4wXCIsXG4gICAgXCJndWxwLWRlYnVnXCI6IFwiXjIuMS4wXCIsXG4gICAgXCJndWxwLWhlYWRlclwiOiBcIl4xLjcuMVwiLFxuICAgIFwiZ3VscC1qc2hpbnRcIjogXCJeMS4xMS4yXCIsXG4gICAgXCJndWxwLW1pcnJvclwiOiBcIl4wLjQuMFwiLFxuICAgIFwiZ3VscC1wbHVtYmVyXCI6IFwiXjEuMC4xXCIsXG4gICAgXCJndWxwLXJlbmFtZVwiOiBcIl4xLjIuMlwiLFxuICAgIFwiZ3VscC1zb3VyY2VtYXBzXCI6IFwiXjEuNS4yXCIsXG4gICAgXCJndWxwLXVnbGlmeVwiOiBcIl4xLjQuMVwiLFxuICAgIFwiZ3VscC11dGlsXCI6IFwiXjMuMC42XCIsXG4gICAgXCJqYWd1YXJqcy1qc2RvY1wiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vZGF2aWRzaGltanMvamFndWFyanMtanNkb2MuZ2l0XCIsXG4gICAgXCJqc2RvY1wiOiBcIl4zLjMuMlwiLFxuICAgIFwianNoaW50LXN1bW1hcnlcIjogXCJeMC40LjBcIixcbiAgICBcIm1pbmltaXN0XCI6IFwiXjEuMi4wXCIsXG4gICAgXCJtb2NoYVwiOiBcIl4yLjMuMlwiLFxuICAgIFwicmVxdWlyZS1kaXJcIjogXCJeMC4zLjBcIixcbiAgICBcInJ1bi1zZXF1ZW5jZVwiOiBcIl4xLjEuMlwiLFxuICAgIFwidGVzdGVtXCI6IFwiXjAuOS40XCIsXG4gICAgXCJ2aW55bC1idWZmZXJcIjogXCJeMS4wLjBcIixcbiAgICBcInZpbnlsLXNvdXJjZS1zdHJlYW1cIjogXCJeMS4xLjBcIixcbiAgICBcIndhdGNoaWZ5XCI6IFwiXjMuNC4wXCJcbiAgfSxcbiAgXCJicm93c2VyaWZ5XCI6IHtcbiAgICBcInRyYW5zZm9ybVwiOiBbXG4gICAgICBcImJyZnNcIlxuICAgIF1cbiAgfVxufVxuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8vIGFkZCBzb21lIGV4dHJhIHZhcmlhYmxlcyB0byB0aGUgY29udGFpbmVyLi5cbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKVxuKTtcblxuXG4vKipcbiAqIFRoZSBBY2Nlc3NpYmlsaXR5IG1hbmFnZXIgcmVhY3JlYXRlcyB0aGUgYWJpbGl0eSB0byB0YWIgYW5kIGFuZCBoYXZlIGNvbnRlbnQgcmVhZCBieSBzY3JlZW4gcmVhZGVycy4gVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCBhcyBpdCBjYW4gcG9zc2libHkgaGVscCBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMgYWNjZXNzIHBpeGkgY29udGVudC5cbiAqIE11Y2ggbGlrZSBpbnRlcmFjdGlvbiBhbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgbWFkZSBhY2Nlc3NpYmxlLiBUaGlzIG1hbmFnZXIgd2lsbCBtYXAgdGhlIGV2ZW50cyBhcyBpZiB0aGUgbW91c2Ugd2FzIGJlaW5nIHVzZWQsIG1pbmltaXppbmcgdGhlIGVmZmVyb3QgcmVxdWlyZWQgdG8gaW1wbGVtZW50LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyXG4gKi9cbmZ1bmN0aW9uIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKHJlbmRlcmVyKVxue1xuXHQvLyBmaXJzdCB3ZSBjcmVhdGUgYSBkaXYgdGhhdCB3aWxsIHNpdCBvdmVyIHRoZSBwaXhpIGVsZW1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGRpdiBvdmVybGF5cyB3aWxsIGdvLlxuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBcbiAgICBkaXYuc3R5bGUud2lkdGggPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgZGl2LnN0eWxlLnRvcCA9IDA7XG4gICAgZGl2LnN0eWxlLmxlZnQgPSAwO1xuICAgLy9cbiAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcbiAgIFx0XG4gICBcdC8qKlxuICAgXHQgKiBUaGlzIGlzIHRoZSBkb20gZWxlbWVudCB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuICAgXHR0aGlzLmRpdiA9IGRpdjtcblxuICAgXHQvKipcbiAgIFx0ICogQSBzaW1wbGUgcG9vbCBmb3Igc3RvcmluZyBkaXZzLlxuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0FycmF5fVxuICAgXHQgKiBAcHJpdmF0ZVxuICAgXHQgKi9cbiBcdHRoaXMucG9vbCA9IFtdO1xuXG4gXHQvKipcbiBcdCAqIFRoaXMgaXMgYSB0aWNrIHVzZWQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIG5vIGxvbmdlciBiZWluZyByZW5kZXJlZC5cbiBcdCAqIFxuIFx0ICogQHR5cGUge051bWJlcn1cbiBcdCAqIEBwcml2YXRlXG4gXHQgKi9cbiAgIFx0dGhpcy5yZW5kZXJJZCA9IDA7XG5cbiAgIFx0LyoqXG4gICBcdCAqIFNldHRpbmcgdGhpcyB0byB0cnVlIHdpbGwgdmlzdWFsbHkgc2hvdyB0aGUgZGl2c1xuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0Jvb2xlYW59XG4gICBcdCAqL1xuICAgXHR0aGlzLmRlYnVnID0gZmFsc2U7XG5cbiAgXHQvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBhY2Nlc3NpYmlsaXR5IG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgIFx0dGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICBcdC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjdXJyZW50bHkgYWN0aXZlIGFjY2Vzc2libGUgaXRlbXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgXHR0aGlzLmNoaWxkcmVuID0gW107XG4gICBcdFxuICAgXHQvKipcbiAgICAgKiBwcmUgYmluZCB0aGUgZnVuY3Rpb25zLi5cbiAgICAgKi9cbiAgIFx0dGhpcy5fb25LZXlEb3duID0gdGhpcy5fb25LZXlEb3duLmJpbmQodGhpcyk7XG4gICBcdHRoaXMuX29uTW91c2VNb3ZlID0gdGhpcy5fb25Nb3VzZU1vdmUuYmluZCh0aGlzKTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHN0b3JlcyB0aGUgc3RhdGUgb2YgdGhlIG1hbmFnZXIuIElmIHRoZXJlIGFyZSBubyBhY2Nlc3NpYmxlIG9iamVjdHMgb3IgdGhlIG1vdXNlIGlzIG1vdmluZyB0aGUgd2lsbCBiZSBmYWxzZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcblxuXG4gICBcdC8vIGxldCBsaXN0ZW4gZm9yIHRhYi4uIG9uY2UgcHJlc3NlZCB3ZSBjYW4gZmlyZSB1cCBhbmQgc2hvdyB0aGUgYWNjZXNzaWJpbGl0eSBsYXllclxuICAgXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xufVxuXG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBBY2Nlc3NpYmlsaXR5TWFuYWdlcjtcblxuLyoqXG4gKiBBY3RpdmF0aW5nIHdpbGwgY2F1c2UgdGhlIEFjY2Vzc2liaWxpdHkgbGF5ZXIgdG8gYmUgc2hvd24uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIHByZXNlcyB0aGUgdGFiIGtleVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IHRydWU7XG5cblx0d2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCB0cnVlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9uKCdwb3N0cmVuZGVyJywgdGhpcy51cGRhdGUsIHRoaXMpO1xuXG5cdHRoaXMucmVuZGVyZXIudmlldy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuZGl2KTtcdFxufTtcblxuLyoqXG4gKiBEZWFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBoaWRkZW4uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIG1vdmVzIHRoZSBtb3VzZVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmRlYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKCF0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG5cblx0dGhpcy5yZW5kZXJlci5vZmYoJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSk7XG5cblx0dGhpcy5kaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmRpdik7XG5cbn07XG5cbi8qKlxuICogVGhpcyByZWN1cnNpdmUgZnVuY3Rpb24gd2lsbCBydW4gdGhyb3VnaHQgaGUgc2NlbmUgZ3JhcGggYW5kIGFkZCBhbnkgbmV3IGFjY2Vzc2libGUgb2JqZWN0cyB0byB0aGUgRE9NIGxheWVyLlxuICogQHBhcmFtIGVsZW1lbnQge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIERpc3BsYXlPYmplY3QgdG8gY2hlY2suXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlQWNjZXNzaWJsZU9iamVjdHMgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuXHRpZighZGlzcGxheU9iamVjdC52aXNpYmxlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYoZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlICYmIGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG5cdHtcblx0XHRpZighZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZUFjdGl2ZSlcblx0XHR7XG5cdFx0XHR0aGlzLmFkZENoaWxkKGRpc3BsYXlPYmplY3QpO1xuXHRcdH1cblx0ICAgXHRcblx0ICAgXHRkaXNwbGF5T2JqZWN0LnJlbmRlcklkID0gdGhpcy5yZW5kZXJJZDtcblx0fVxuXG5cdHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG5cblx0Zm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XG5cdFx0dGhpcy51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyhjaGlsZHJlbltpXSk7XG5cdH1cbn07XG5cblxuLyoqXG4gKiBCZWZvcmUgZWFjaCByZW5kZXIgdGhpcyBmdW5jdGlvbiB3aWxsIGVuc3VyZSB0aGF0IGFsbCBkaXZzIGFyZSBtYXBwZWQgY29ycmVjdGx5IHRvIHRoZWlyIERpc3BsYXlPYmplY3RzXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oKVxue1xuXG5cdC8vIHVwZGF0ZSBjaGlsZHJlbi4uLlxuXHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCk7XG5cblx0dmFyIHJlY3QgPSB0aGlzLnJlbmRlcmVyLnZpZXcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdHZhciBzeCA9IHJlY3Qud2lkdGggIC8gdGhpcy5yZW5kZXJlci53aWR0aDtcblx0dmFyIHN5ID0gcmVjdC5oZWlnaHQgLyB0aGlzLnJlbmRlcmVyLmhlaWdodDtcblxuXHR2YXIgZGl2ID0gdGhpcy5kaXY7XG5cblx0ZGl2LnN0eWxlLmxlZnQgPSByZWN0LmxlZnQgKyAncHgnO1xuXHRkaXYuc3R5bGUudG9wID0gcmVjdC50b3AgKyAncHgnO1xuXHRkaXYuc3R5bGUud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoICsgJ3B4Jztcblx0ZGl2LnN0eWxlLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0ICsgJ3B4JztcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblxuXHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cblx0XHRpZihjaGlsZC5yZW5kZXJJZCAhPT0gdGhpcy5yZW5kZXJJZClcblx0XHR7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGksIDEpO1xuXHRcdFx0dGhpcy5kaXYucmVtb3ZlQ2hpbGQoIGNoaWxkLl9hY2Nlc3NpYmxlRGl2ICk7XG5cdFx0XHR0aGlzLnBvb2wucHVzaChjaGlsZC5fYWNjZXNzaWJsZURpdik7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZURpdiA9IG51bGw7XG5cblx0XHRcdGktLTtcblxuXHRcdFx0aWYodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0Ly8gbWFwIGRpdiB0byBkaXNwbGF5Li5cblx0XHRcdGRpdiA9IGNoaWxkLl9hY2Nlc3NpYmxlRGl2O1xuXHRcdFx0dmFyIGhpdEFyZWEgPSBjaGlsZC5oaXRBcmVhO1xuXHRcdFx0dmFyIHd0ID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cblx0XHRcdGlmKGNoaWxkLmhpdEFyZWEpXG5cdFx0XHR7XG5cdFx0XHRcdGRpdi5zdHlsZS5sZWZ0ID0gKCh3dC50eCArIChoaXRBcmVhLnggKiB3dC5hKSkgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gICgod3QudHkgKyAoaGl0QXJlYS55ICogd3QuZCkpICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiB3dC5hICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLmhlaWdodCA9IChoaXRBcmVhLmhlaWdodCAqIHd0LmQgKiBzeSkgKyAncHgnO1xuXHRcdFx0XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdGhpdEFyZWEgPSBjaGlsZC5nZXRCb3VuZHMoKTtcblxuXHRcdFx0XHR0aGlzLmNhcEhpdEFyZWEoaGl0QXJlYSk7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoaGl0QXJlYS54ICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLnRvcCA9ICAoaGl0QXJlYS55ICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogc3kpICsgJ3B4Jztcblx0XHRcdH1cdFx0XG5cdFx0fVxuXHR9XG5cblx0Ly8gaW5jcmVtZW50IHRoZSByZW5kZXIgaWQuLlxuXHR0aGlzLnJlbmRlcklkKys7XG59O1xuXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuY2FwSGl0QXJlYSA9IGZ1bmN0aW9uIChoaXRBcmVhKVxue1xuICAgIGlmIChoaXRBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS53aWR0aCArPSBoaXRBcmVhLng7XG4gICAgICAgIGhpdEFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGhpdEFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCArPSBoaXRBcmVhLnk7XG4gICAgICAgIGhpdEFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBoaXRBcmVhLnggKyBoaXRBcmVhLndpZHRoID4gdGhpcy5yZW5kZXJlci53aWR0aCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoID0gdGhpcy5yZW5kZXJlci53aWR0aCAtIGhpdEFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueSArIGhpdEFyZWEuaGVpZ2h0ID4gdGhpcy5yZW5kZXJlci5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmhlaWdodCAtIGhpdEFyZWEueTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogQWRkcyBhIERpc3BsYXlPYmplY3QgdG8gdGhlIGFjY2Vzc2liaWxpdHkgbWFuYWdlclxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24oZGlzcGxheU9iamVjdClcbntcbi8vXHR0aGlzLmFjdGl2YXRlKCk7XG5cdFxuXHR2YXIgZGl2ID0gdGhpcy5wb29sLnBvcCgpO1xuXG5cdGlmKCFkaXYpXG5cdHtcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgXG5cblx0ICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG5cdCAgICBkaXYuc3R5bGUuaGVpZ2h0ID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmRlYnVnID8gJ3JnYmEoMjU1LDAsMCwwLjUpJyA6ICd0cmFuc3BhcmVudCc7XG5cdCAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXHQgICAgZGl2LnN0eWxlLnpJbmRleCA9IDI7XG5cdCAgICBkaXYuc3R5bGUuYm9yZGVyU3R5bGUgPSAnbm9uZSc7XG5cblx0ICAgIFxuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGljay5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKSk7XG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCB0aGlzLl9vbkZvY3VzT3V0LmJpbmQodGhpcykpO1xuXHR9XG5cdCAgIFx0XG5cblxuXG5cdGRpdi50aXRsZSA9IGRpc3BsYXlPYmplY3QuYWNjZXNzaWJsZVRpdGxlIHx8ICdkaXNwbGF5T2JqZWN0ICcgKyB0aGlzLnRhYkluZGV4O1xuXG5cdC8vXG5cdFxuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlID0gdHJ1ZTtcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiA9IGRpdjtcblx0ZGl2LmRpc3BsYXlPYmplY3QgPSBkaXNwbGF5T2JqZWN0O1xuXG5cblx0dGhpcy5jaGlsZHJlbi5wdXNoKGRpc3BsYXlPYmplY3QpO1xuXHR0aGlzLmRpdi5hcHBlbmRDaGlsZCggZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiApO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2LnRhYkluZGV4ID0gZGlzcGxheU9iamVjdC50YWJJbmRleDtcbn07XG5cblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgYnV0dG9uIHByZXNzIHRvIHBpeGkncyBJbnRlcmFjdGlvbk1hbmFnZXIgKGNsaWNrKVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkNsaWNrID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ2NsaWNrJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW92ZXIpXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uRm9jdXMgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW91dClcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1c091dCA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIGtleSBpcyBwcmVzc2VkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbktleURvd24gPSBmdW5jdGlvbihlKVxue1xuXHRpZihlLmtleUNvZGUgIT09IDkpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmFjdGl2YXRlKCk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uTW91c2VNb3ZlID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmRlYWN0aXZhdGUoKTtcbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKlxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIFxue1xuXHR0aGlzLmRpdiA9IG51bGw7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHR7XG5cdFx0dGhpcy5jaGlsZHJlbltpXS5kaXYgPSBudWxsO1xuXHR9XG5cblx0XG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duKTtcblx0XHRcblx0dGhpcy5wb29sID0gbnVsbDtcblx0dGhpcy5jaGlsZHJlbiA9IG51bGw7XG5cdHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdhY2Nlc3NpYmlsaXR5JywgQWNjZXNzaWJpbGl0eU1hbmFnZXIpO1xuXG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGFjY2Vzc2libGUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlNYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5hY2Nlc3NpYmlsaXR5LmFjY2Vzc2libGVUYXJnZXRcbiAqICAgICAgKTtcbiAqL1xudmFyIGFjY2Vzc2libGVUYXJnZXQgPSB7XG4gICAgXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlOmZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlVGl0bGU6bnVsbCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgdGFiSW5kZXg6MCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVBY3RpdmU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIF9hY2Nlc3NpYmxlRGl2OmZhbHNlXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYWNjZXNzaWJsZVRhcmdldDtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGFjY2Vzc2liaWxpdHkgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGFjY2Vzc2libGVUYXJnZXQ6ICAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKSxcbiAgICBBY2Nlc3NpYmlsaXR5TWFuYWdlcjogcmVxdWlyZSgnLi9BY2Nlc3NpYmlsaXR5TWFuYWdlcicpXG59O1xuIiwiLyoqXG4gKiBDb25zdGFudCB2YWx1ZXMgdXNlZCBpbiBwaXhpXG4gKlxuICogQGxlbmRzIFBJWElcbiAqL1xudmFyIENPTlNUID0ge1xuICAgIC8qKlxuICAgICAqIFN0cmluZyBvZiB0aGUgY3VycmVudCBQSVhJIHZlcnNpb25cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gVkVSU0lPTlxuICAgICAqL1xuICAgIFZFUlNJT046IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb24sXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUElfMiAtIFR3byBQaVxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBQSV8yOiBNYXRoLlBJICogMixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSQURfVE9fREVHIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgcmFkaWFucyB0byBkZWdyZWVzXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFJBRF9UT19ERUc6IDE4MCAvIE1hdGguUEksXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge051bWJlcn0gREVHX1RPX1JBRCAtIENvbnN0YW50IGNvbnZlcnNpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIGRlZ3JlZXMgdG8gcmFkaWFuc1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBERUdfVE9fUkFEOiBNYXRoLlBJIC8gMTgwLFxuXG4gICAgLyoqXG4gICAgICogVGFyZ2V0IGZyYW1lcyBwZXIgbWlsbGlzZWNvbmQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFRBUkdFVF9GUE1TPTAuMDZcbiAgICAgKi9cbiAgICBUQVJHRVRfRlBNUzogMC4wNixcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IHRvIGlkZW50aWZ5IHRoZSBSZW5kZXJlciBUeXBlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBSRU5ERVJFUl9UWVBFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuVU5LTk9XTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLldFQkdMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuQ0FOVkFTXG4gICAgICovXG4gICAgUkVOREVSRVJfVFlQRToge1xuICAgICAgICBVTktOT1dOOiAgICAwLFxuICAgICAgICBXRUJHTDogICAgICAxLFxuICAgICAgICBDQU5WQVM6ICAgICAyXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFZhcmlvdXMgYmxlbmQgbW9kZXMgc3VwcG9ydGVkIGJ5IFBJWEkuIElNUE9SVEFOVCAtIFRoZSBXZWJHTCByZW5kZXJlciBvbmx5IHN1cHBvcnRzXG4gICAgICogdGhlIE5PUk1BTCwgQURELCBNVUxUSVBMWSBhbmQgU0NSRUVOIGJsZW5kIG1vZGVzLiBBbnl0aGluZyBlbHNlIHdpbGwgc2lsZW50bHkgYWN0IGxpa2VcbiAgICAgKiBOT1JNQUwuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IEJMRU5EX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5BRERcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTVVMVElQTFlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0NSRUVOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk9WRVJMQVlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuREFSS0VOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkxJR0hURU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfQlVSTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IQVJEX0xJR0hUXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNPRlRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuRElGRkVSRU5DRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5FWENMVVNJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuSFVFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNBVFVSQVRJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTFVNSU5PU0lUWVxuICAgICAqL1xuICAgIEJMRU5EX01PREVTOiB7XG4gICAgICAgIE5PUk1BTDogICAgICAgICAwLFxuICAgICAgICBBREQ6ICAgICAgICAgICAgMSxcbiAgICAgICAgTVVMVElQTFk6ICAgICAgIDIsXG4gICAgICAgIFNDUkVFTjogICAgICAgICAzLFxuICAgICAgICBPVkVSTEFZOiAgICAgICAgNCxcbiAgICAgICAgREFSS0VOOiAgICAgICAgIDUsXG4gICAgICAgIExJR0hURU46ICAgICAgICA2LFxuICAgICAgICBDT0xPUl9ET0RHRTogICAgNyxcbiAgICAgICAgQ09MT1JfQlVSTjogICAgIDgsXG4gICAgICAgIEhBUkRfTElHSFQ6ICAgICA5LFxuICAgICAgICBTT0ZUX0xJR0hUOiAgICAgMTAsXG4gICAgICAgIERJRkZFUkVOQ0U6ICAgICAxMSxcbiAgICAgICAgRVhDTFVTSU9OOiAgICAgIDEyLFxuICAgICAgICBIVUU6ICAgICAgICAgICAgMTMsXG4gICAgICAgIFNBVFVSQVRJT046ICAgICAxNCxcbiAgICAgICAgQ09MT1I6ICAgICAgICAgIDE1LFxuICAgICAgICBMVU1JTk9TSVRZOiAgICAgMTZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyB3ZWJnbCBkcmF3IG1vZGVzLiBUaGVzZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIEdMIGRyYXdNb2RlIHRvIHVzZVxuICAgICAqIHVuZGVyIGNlcnRhaW4gc2l0dWF0aW9ucyBhbmQgcmVuZGVyZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBEUkFXX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuUE9JTlRTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX0xPT1BcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX1NUUklQXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9GQU5cbiAgICAgKi9cbiAgICBEUkFXX01PREVTOiB7XG4gICAgICAgIFBPSU5UUzogICAgICAgICAwLFxuICAgICAgICBMSU5FUzogICAgICAgICAgMSxcbiAgICAgICAgTElORV9MT09QOiAgICAgIDIsXG4gICAgICAgIExJTkVfU1RSSVA6ICAgICAzLFxuICAgICAgICBUUklBTkdMRVM6ICAgICAgNCxcbiAgICAgICAgVFJJQU5HTEVfU1RSSVA6IDUsXG4gICAgICAgIFRSSUFOR0xFX0ZBTjogICA2XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgcGl4aS5cbiAgICAgKlxuICAgICAqIFRoZSBERUZBVUxUIHNjYWxlIG1vZGUgYWZmZWN0cyB0aGUgZGVmYXVsdCBzY2FsaW5nIG1vZGUgb2YgZnV0dXJlIG9wZXJhdGlvbnMuXG4gICAgICogSXQgY2FuIGJlIHJlLWFzc2lnbmVkIHRvIGVpdGhlciBMSU5FQVIgb3IgTkVBUkVTVCwgZGVwZW5kaW5nIHVwb24gc3VpdGFiaWxpdHkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNDQUxFX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkRFRkFVTFQ9TElORUFSXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkxJTkVBUiBTbW9vdGggc2NhbGluZ1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5ORUFSRVNUIFBpeGVsYXRpbmcgc2NhbGluZ1xuICAgICAqL1xuICAgIFNDQUxFX01PREVTOiB7XG4gICAgICAgIERFRkFVTFQ6ICAgIDAsXG4gICAgICAgIExJTkVBUjogICAgIDAsXG4gICAgICAgIE5FQVJFU1Q6ICAgIDFcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHByZWZpeCB0aGF0IGRlbm90ZXMgYSBVUkwgaXMgZm9yIGEgcmV0aW5hIGFzc2V0XG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFJFVElOQV9QUkVGSVhcbiAgICAgKi9cbiAgICAvL2V4YW1wbGU6ICdAMngnLFxuICAgIFJFVElOQV9QUkVGSVg6IC9AKC4rKXgvLFxuXG4gICAgUkVTT0xVVElPTjoxLFxuXG4gICAgRklMVEVSX1JFU09MVVRJT046MSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHJlbmRlciBvcHRpb25zIGlmIG5vbmUgYXJlIHN1cHBsaWVkIHRvIHtAbGluayBQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICogb3Ige0BsaW5rIFBJWEkuQ2FudmFzUmVuZGVyZXJ9LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TXG4gICAgICogQHByb3BlcnR5IHtIVE1MQ2FudmFzRWxlbWVudH0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy52aWV3PW51bGxcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMudHJhbnNwYXJlbnQ9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuYW50aWFsaWFzPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmZvcmNlRlhBQT1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5yZXNvbHV0aW9uPTFcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hdXRvUmVzaXplPWZhbHNlXG4gICAgICovXG4gICAgREVGQVVMVF9SRU5ERVJfT1BUSU9OUzoge1xuICAgICAgICB2aWV3OiBudWxsLFxuICAgICAgICByZXNvbHV0aW9uOiAxLFxuICAgICAgICBhbnRpYWxpYXM6IGZhbHNlLFxuICAgICAgICBmb3JjZUZYQUE6IGZhbHNlLFxuICAgICAgICBhdXRvUmVzaXplOiBmYWxzZSxcbiAgICAgICAgdHJhbnNwYXJlbnQ6IGZhbHNlLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IDB4MDAwMDAwLFxuICAgICAgICBjbGVhckJlZm9yZVJlbmRlcjogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBmYWxzZSxcbiAgICAgICAgcm91bmRQaXhlbHM6IGZhbHNlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50cyB0aGF0IGlkZW50aWZ5IHNoYXBlcywgbWFpbmx5IHRvIHByZXZlbnQgYGluc3RhbmNlb2ZgIGNhbGxzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVNcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlBPTFk9MFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUkVDVD0xXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5DSVJDPTJcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkVMSVA9M1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUlJFQz00XG4gICAgICovXG4gICAgU0hBUEVTOiB7XG4gICAgICAgIFBPTFk6IDAsXG4gICAgICAgIFJFQ1Q6IDEsXG4gICAgICAgIENJUkM6IDIsXG4gICAgICAgIEVMSVA6IDMsXG4gICAgICAgIFJSRUM6IDRcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogbWF5YmUgY2hhbmdlIHRvIFNQUklURS5CQVRDSF9TSVpFOiAyMDAwXG4gICAgLy8gVE9ETzogbWF5YmUgYWRkIFBBUlRJQ0xFLkJBVENIX1NJWkU6IDE1MDAwXG4gICAgU1BSSVRFX0JBVENIX1NJWkU6IDIwMDAgLy9uaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgYW5kIGRlc2t0b3AgbWFjaGluZXNcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ09OU1Q7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgRGlzcGxheU9iamVjdCA9IHJlcXVpcmUoJy4vRGlzcGxheU9iamVjdCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIENvbnRhaW5lciByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBkaXNwbGF5IG9iamVjdHMuXG4gKiBJdCBpcyB0aGUgYmFzZSBjbGFzcyBvZiBhbGwgZGlzcGxheSBvYmplY3RzIHRoYXQgYWN0IGFzIGEgY29udGFpbmVyIGZvciBvdGhlciBvYmplY3RzLlxuICpcbiAqYGBganNcbiAqIHZhciBjb250YWluZXIgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogYGBgXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuRGlzcGxheU9iamVjdFxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ29udGFpbmVyKClcbntcbiAgICBEaXNwbGF5T2JqZWN0LmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3RbXX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5Db250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSk7XG5Db250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb250YWluZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnRhaW5lci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG5cbiAgICAgICAgICAgIGlmICh3aWR0aCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IDE7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmIChoZWlnaHQgIT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyBoZWlnaHQgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogT3ZlcnJpZGFibGUgbWV0aG9kIHRoYXQgY2FuIGJlIHVzZWQgYnkgQ29udGFpbmVyIHN1YmNsYXNzZXMgd2hlbmV2ZXIgdGhlIGNoaWxkcmVuIGFycmF5IGlzIG1vZGlmaWVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5vbkNoaWxkcmVuQ2hhbmdlID0gZnVuY3Rpb24gKCkge307XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIuXG4gKiBcbiAqIFlvdSBjYW4gYWxzbyBhZGQgbXVsdHBsZSBpdGVtcyBsaWtlIHNvOiBteUNvbnRhaW5lci5hZGRDaGlsZCh0aGlua09uZSwgdGhpbmdUd28sIHRoaW5nVGhyZWUpXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gYWRkIHRvIHRoZSBjb250YWluZXJcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxueyBcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IHdlIGNhbiBieXBhc3MgbG9vcGluZyB0aHJvdWdoIHRoZSB0aGVtXG4gICAgaWYoYXJndW1lbnRzTGVuZ3RoID4gMSlcbiAgICB7XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgYXJndW1lbnRzIHByb3BlcnR5IGFuZCBhZGQgYWxsIGNoaWxkcmVuXG4gICAgICAgIC8vIHVzZSBpdCB0aGUgcmlnaHQgd2F5ICgubGVuZ3RoIGFuZCBbaV0pIHNvIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc3RpbGwgYmUgb3B0aW1pc2VkIGJ5IEpTIHJ1bnRpbWVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoIGFyZ3VtZW50c1tpXSApO1xuICAgICAgICB9XG4gICAgfSAgICAgXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIGNoaWxkIGhhcyBhIHBhcmVudCB0aGVuIGxldHMgcmVtb3ZlIGl0IGFzIFBpeGkgb2JqZWN0cyBjYW4gb25seSBleGlzdCBpbiBvbmUgcGxhY2VcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKHRoaXMuY2hpbGRyZW4ubGVuZ3RoLTEpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIgYXQgYSBzcGVjaWZpZWQgaW5kZXguIElmIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0byBhZGRcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gcGxhY2UgdGhlIGNoaWxkIGluXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyBhZGRlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5hZGRDaGlsZEF0ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuXG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNoaWxkICsgJ2FkZENoaWxkQXQ6IFRoZSBpbmRleCAnKyBpbmRleCArJyBzdXBwbGllZCBpcyBvdXQgb2YgYm91bmRzICcgKyB0aGlzLmNoaWxkcmVuLmxlbmd0aCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBTd2FwcyB0aGUgcG9zaXRpb24gb2YgMiBEaXNwbGF5IE9iamVjdHMgd2l0aGluIHRoaXMgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGNoaWxkMiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnN3YXBDaGlsZHJlbiA9IGZ1bmN0aW9uIChjaGlsZCwgY2hpbGQyKVxue1xuICAgIGlmIChjaGlsZCA9PT0gY2hpbGQyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbmRleDEgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuICAgIHZhciBpbmRleDIgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQyKTtcblxuICAgIGlmIChpbmRleDEgPCAwIHx8IGluZGV4MiA8IDApXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N3YXBDaGlsZHJlbjogQm90aCB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdHMgbXVzdCBiZSBjaGlsZHJlbiBvZiB0aGUgY2FsbGVyLicpO1xuICAgIH1cblxuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgxXSA9IGNoaWxkMjtcbiAgICB0aGlzLmNoaWxkcmVuW2luZGV4Ml0gPSBjaGlsZDtcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgxIDwgaW5kZXgyID8gaW5kZXgxIDogaW5kZXgyKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW5kZXggcG9zaXRpb24gb2YgYSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIHRvIGlkZW50aWZ5XG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3QgdG8gaWRlbnRpZnlcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBtdXN0IGJlIGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgcG9zaXRpb24gb2YgYW4gZXhpc3RpbmcgY2hpbGQgaW4gdGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgRGlzcGxheU9iamVjdCBpbnN0YW5jZSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBpbmRleCBudW1iZXJcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgcmVzdWx0aW5nIGluZGV4IG51bWJlciBmb3IgdGhlIGNoaWxkIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc2V0Q2hpbGRJbmRleCA9IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN1cHBsaWVkIGluZGV4IGlzIG91dCBvZiBib3VuZHMnKTtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudEluZGV4ID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkKTtcblxuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGN1cnJlbnRJbmRleCwgMSk7IC8vIHJlbW92ZSBmcm9tIG9sZCBwb3NpdGlvblxuICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7IC8vYWRkIGF0IG5ldyBwb3NpdGlvblxuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNoaWxkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhcbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgYXRcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIGF0IHRoZSBnaXZlbiBpbmRleCwgaWYgYW55LlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkQXQgPSBmdW5jdGlvbiAoaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0Q2hpbGRBdDogU3VwcGxpZWQgaW5kZXggJyArIGluZGV4ICsgJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY2hpbGQgbGlzdCwgb3IgdGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3QgaXMgbm90IGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2luZGV4XTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVtb3ZlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyByZW1vdmVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuXG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYSBjaGlsZCBmcm9tIHRoZSBzcGVjaWZpZWQgaW5kZXggcG9zaXRpb24uXG4gKlxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBnZXQgdGhlIGNoaWxkIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICB2YXIgY2hpbGQgPSB0aGlzLmdldENoaWxkQXQoaW5kZXgpO1xuXG4gICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpbmRleCwgMSk7XG5cbiAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICBjaGlsZC5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGNoaWxkcmVuIGZyb20gdGhpcyBjb250YWluZXIgdGhhdCBhcmUgd2l0aGluIHRoZSBiZWdpbiBhbmQgZW5kIGluZGV4ZXMuXG4gKlxuICogQHBhcmFtIGJlZ2luSW5kZXgge251bWJlcn0gVGhlIGJlZ2lubmluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyAwLlxuICogQHBhcmFtIGVuZEluZGV4IHtudW1iZXJ9IFRoZSBlbmRpbmcgcG9zaXRpb24uIERlZmF1bHQgdmFsdWUgaXMgc2l6ZSBvZiB0aGUgY29udGFpbmVyLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkcmVuID0gZnVuY3Rpb24gKGJlZ2luSW5kZXgsIGVuZEluZGV4KVxue1xuICAgIHZhciBiZWdpbiA9IGJlZ2luSW5kZXggfHwgMDtcbiAgICB2YXIgZW5kID0gdHlwZW9mIGVuZEluZGV4ID09PSAnbnVtYmVyJyA/IGVuZEluZGV4IDogdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgdmFyIHJhbmdlID0gZW5kIC0gYmVnaW47XG4gICAgdmFyIHJlbW92ZWQsIGk7XG5cbiAgICBpZiAocmFuZ2UgPiAwICYmIHJhbmdlIDw9IGVuZClcbiAgICB7XG4gICAgICAgIHJlbW92ZWQgPSB0aGlzLmNoaWxkcmVuLnNwbGljZShiZWdpbiwgcmFuZ2UpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW1vdmVkW2ldLnBhcmVudCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoYmVnaW5JbmRleCk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0uZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbW92ZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJhbmdlID09PSAwICYmIHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigncmVtb3ZlQ2hpbGRyZW46IG51bWVyaWMgdmFsdWVzIGFyZSBvdXRzaWRlIHRoZSBhY2NlcHRhYmxlIHJhbmdlLicpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb24gYWxsIGNoaWxkcmVuIG9mIHRoaXMgY29udGFpbmVyIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0gPSBDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgQ29udGFpbmVyIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIGFsbCB2aXNpYmxlIGNoaWxkcmVuIGludG8gY29uc2lkZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE8gdGhlIGJvdW5kcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHRoaXMgcmVuZGVyIHNlc3Npb24gc28gcmV0dXJuIHdoYXQgd2UgaGF2ZVxuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBjaGlsZEJvdW5kcztcbiAgICAgICAgdmFyIGNoaWxkTWF4WDtcbiAgICAgICAgdmFyIGNoaWxkTWF4WTtcblxuICAgICAgICB2YXIgY2hpbGRWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZFZpc2libGUgPSB0cnVlO1xuXG4gICAgICAgICAgICBjaGlsZEJvdW5kcyA9IHRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIG1pblggPSBtaW5YIDwgY2hpbGRCb3VuZHMueCA/IG1pblggOiBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgbWluWSA9IG1pblkgPCBjaGlsZEJvdW5kcy55ID8gbWluWSA6IGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIGNoaWxkTWF4WCA9IGNoaWxkQm91bmRzLndpZHRoICsgY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIGNoaWxkTWF4WSA9IGNoaWxkQm91bmRzLmhlaWdodCArIGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIG1heFggPSBtYXhYID4gY2hpbGRNYXhYID8gbWF4WCA6IGNoaWxkTWF4WDtcbiAgICAgICAgICAgIG1heFkgPSBtYXhZID4gY2hpbGRNYXhZID8gbWF4WSA6IGNoaWxkTWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGRWaXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG5Db250YWluZXIucHJvdG90eXBlLmNvbnRhaW5lckdldEJvdW5kcyA9IENvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbm9uLWdsb2JhbCBsb2NhbCBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS5cbiAqIFRoZSBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXhDYWNoZSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0aC5NYXRyaXguSURFTlRJVFk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0cml4Q2FjaGU7XG5cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyggbWF0aC5NYXRyaXguSURFTlRJVFkgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcblxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGksIGo7XG5cbiAgICAvLyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgbWFzayBvciBhIGZpbHRlci5cbiAgICBpZiAodGhpcy5fbWFzayB8fCB0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgLy8gcHVzaCBmaWx0ZXIgZmlyc3QgYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIGNvcnJlY3QgZm9yIGFueSBtYXNraW5nXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzICYmIHRoaXMuX2ZpbHRlcnMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGhpcywgdGhpcy5fZmlsdGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcblxuICAgICAgICAvLyBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIGJhdGNoLCBvbmx5IHJlbmRlcmVkIGlmIGl0IGhhcyBhIHRleHR1cmUuXG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgbWFrZSBzdXJlIHRoZXkgZ2V0IHJlbmRlcmVkXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJXZWJHTChyZW5kZXJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayh0aGlzLCB0aGlzLl9tYXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBzaW1wbGUgcmVuZGVyIGNoaWxkcmVuIVxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gdGhpcyBpcyB3aGVyZSBjb250ZW50IGl0c2VsZiBnZXRzIHJlbmRlcmVkLi4uXG59O1xuXG4vKipcbiAqIFRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzXG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy5hbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hc2spXG4gICAge1xuICAgICAgICByZW5kZXJlci5tYXNrTWFuYWdlci5wdXNoTWFzayh0aGlzLl9tYXNrLCByZW5kZXJlcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayhyZW5kZXJlcik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUNoaWxkcmVuKVxue1xuICAgIERpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGlmIChkZXN0cm95Q2hpbGRyZW4pXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLmRlc3Ryb3koZGVzdHJveUNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xufTtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBUcmFuc2Zvcm0gPSByZXF1aXJlKCcuL1RyYW5zZm9ybVN0YXRpYycpLFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB3b3JsZEFscGhhOjEsIGNoaWxkcmVuOltdfTtcblxuXG4vKipcbiAqIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCBvbiB0aGUgc2NyZWVuLlxuICogVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIG9uIGl0cyBvd24gcmF0aGVyIGl0IHNob3VsZCBiZSBleHRlbmRlZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIEV2ZW50RW1pdHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gRGlzcGxheU9iamVjdCgpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb29yZGluYXRlIG9mIHRoZSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLnRyYW5zZm9ybS5wb3NpdGlvbjtcbiAgIC8vIHRoaXMuX3Bvc2l0aW9uID0gbmV3IENhY2hlUG9pbnQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHBpdm90IHBvaW50IG9mIHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgaXQgcm90YXRlcyBhcm91bmRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5waXZvdCA9IHRoaXMudHJhbnNmb3JtLnBpdm90XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBza2V3IGZhY3RvciBmb3IgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNrZXcgPSB0aGlzLnRyYW5zZm9ybS5za2V3XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3JvdGF0aW9uID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcGFjaXR5IG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgb2JqZWN0LiBJZiBmYWxzZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGRyYXduLCBhbmRcbiAgICAgKiB0aGUgdXBkYXRlVHJhbnNmb3JtIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENhbiB0aGlzIG9iamVjdCBiZSByZW5kZXJlZCwgaWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biBidXQgdGhlIHVwZGF0ZVRyYW5zZm9ybVxuICAgICAqIG1ldGhvZHMgd2lsbCBzdGlsbCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyIHRoYXQgY29udGFpbnMgdGhpcyBkaXNwbGF5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ29udGFpbmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtdWx0aXBsaWVkIGFscGhhIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgdHJhbnNmb3JtIG9mIHRoZSBvYmplY3QgYmFzZWQgb24gd29ybGQgKHBhcmVudCkgZmFjdG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS5sb2NhbFRyYW5zZm9ybTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcmVhIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0by4gVGhpcyBpcyB1c2VkIGFzIG1vcmUgb2YgYW4gb3B0aW1pc2F0aW9uXG4gICAgICogcmF0aGVyIHRoYW4gZmlndXJpbmcgb3V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGVhY2ggZnJhbWUgeW91IGNhbiBzZXQgdGhpcyByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW9zdCB1cC10by1kYXRlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgbWFzayBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gIC8vICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxheU9iamVjdDtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNjYWxlWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcm90YXRpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uZGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX2NyID0gTWF0aC5jb3ModmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBzcHJpdGUgaXMgZ2xvYmFsbHkgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB3b3JsZFZpc2libGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udmlzaWJsZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICB9IHdoaWxlIChpdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIG1hc2sgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LiBBIG1hc2sgaXMgYW4gb2JqZWN0IHRoYXQgbGltaXRzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIG9iamVjdCB0byB0aGUgc2hhcGUgb2YgdGhlIG1hc2sgYXBwbGllZCB0byBpdC5cbiAgICAgKiBJbiBQSVhJIGEgcmVndWxhciBtYXNrIG11c3QgYmUgYSBQSVhJLkdyYXBoaWNzIG9yIGEgUElYSS5TcHJpdGUgb2JqZWN0LiBUaGlzIGFsbG93cyBmb3IgbXVjaCBmYXN0ZXIgbWFza2luZyBpbiBjYW52YXMgYXMgaXQgdXRpbGlzZXMgc2hhcGUgY2xpcHBpbmcuXG4gICAgICogVG8gcmVtb3ZlIGEgbWFzaywgc2V0IHRoaXMgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3N8UElYSS5TcHJpdGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBtYXNrOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrLnJlbmRlcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXNrID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LlxuICAgICAqICogSU1QT1JUQU5UOiBUaGlzIGlzIGEgd2ViR0wgb25seSBmZWF0dXJlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlci5cbiAgICAgKiBUbyByZW1vdmUgZmlsdGVycyBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ251bGwnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkFic3RyYWN0RmlsdGVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMgJiYgdGhpcy5fZmlsdGVycy5zbGljZSgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlICYmIHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogVE9ETyAtIE9wdGltaXphdGlvbiBwYXNzIVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vaWYodGhpcy50cmFuc2Zvcm0uZGlydHkgfHwgcGFyZW50LnRyYW5zZm9ybS5kaXJ0eSlcbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICAvLyBtdWx0aXBseSB0aGUgYWxwaGFzLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gPSBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICpcbiAqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH1cbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyhtYXRoLk1hdHJpeC5JREVOVElUWSk7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9HbG9iYWwgPSBmdW5jdGlvbiAocG9zaXRpb24pXG57XG4gICAgLy8gdGhpcyBwYXJlbnQgY2hlY2sgaXMgZm9yIGp1c3QgaW4gY2FzZSB0aGUgaXRlbSBpcyBhIHJvb3Qgb2JqZWN0LlxuICAgIC8vIElmIGl0IGlzIHdlIG5lZWQgdG8gZ2l2ZSBpdCBhIHRlbXBvcmFyeSBwYXJlbnQgc28gdGhhdCBkaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtIHdvcmtzIGNvcnJlY3RseVxuICAgIC8vIHRoaXMgaXMgbWFpbmx5IHRvIGF2b2lkIGEgcGFyZW50IGNoZWNrIGluIHRoZSBtYWluIGxvb3AuIEV2ZXJ5IGxpdHRsZSBoZWxwcyBmb3IgcGVyZm9ybWFuY2UgOilcbiAgICBpZighdGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLnBhcmVudCA9IF90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIGxvdFxuICAgIHJldHVybiB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5KHBvc2l0aW9uKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgbG9jYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHJlbGF0aXZlIHRvIGFub3RoZXIgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEBwYXJhbSBbZnJvbV0ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gY2FsY3VsYXRlIHRoZSBnbG9iYWwgcG9zaXRpb24gZnJvbVxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBQb2ludClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9Mb2NhbCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgZnJvbSwgcG9pbnQpXG57XG4gICAgaWYgKGZyb20pXG4gICAge1xuICAgICAgICBwb3NpdGlvbiA9IGZyb20udG9HbG9iYWwocG9zaXRpb24pO1xuICAgIH1cblxuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIHNpbXBseSBhcHBseSB0aGUgbWF0cml4Li5cbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9zaXRpb24sIHBvaW50KTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyBPVkVSV1JJVEU7XG59O1xuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBwYXJlbnQgQ29udGFpbmVyIG9mIHRoaXMgRGlzcGxheU9iamVjdFxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge0NvbnRhaW5lcn0gVGhlIENvbnRhaW5lciB0byBhZGQgdGhpcyBEaXNwbGF5T2JqZWN0IHRvXG4gKiBAcmV0dXJuIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdGhhdCB0aGlzIERpc3BsYXlPYmplY3Qgd2FzIGFkZGVkIHRvXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFBhcmVudCA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWNvbnRhaW5lci5hZGRDaGlsZClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0UGFyZW50OiBBcmd1bWVudCBtdXN0IGJlIGEgQ29udGFpbmVyJyk7XG4gICAgfVxuXG4gICAgY29udGFpbmVyLmFkZENoaWxkKHRoaXMpO1xuICAgIHJldHVybiBjb250YWluZXI7XG59O1xuXG4vKipcbiAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHNldCB0aGUgcG9zdGlvbiwgc2NhbGUsIHNrZXcgYW5kIHBpdm90IGF0IG9uY2UuXG4gKlxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IFRoZSBYIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gVGhlIFkgcG9zaXRpb25cbiAqIEBwYXJhbSBbc2NhbGVYPTFdIHtudW1iZXJ9IFRoZSBYIHNjYWxlIHZhbHVlXG4gKiBAcGFyYW0gW3NjYWxlWT0xXSB7bnVtYmVyfSBUaGUgWSBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtyb3RhdGlvbj0wXSB7bnVtYmVyfSBUaGUgcm90YXRpb25cbiAqIEBwYXJhbSBbc2tld1g9MF0ge251bWJlcn0gVGhlIFggc2tldyB2YWx1ZVxuICogQHBhcmFtIFtza2V3WT0wXSB7bnVtYmVyfSBUaGUgWSBza2V3IHZhbHVlXG4gKiBAcGFyYW0gW3Bpdm90WD0wXSB7bnVtYmVyfSBUaGUgWCBwaXZvdCB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFk9MF0ge251bWJlcn0gVGhlIFkgcGl2b3QgdmFsdWVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24oeCwgeSwgc2NhbGVYLCBzY2FsZVksIHJvdGF0aW9uLCBza2V3WCwgc2tld1ksIHBpdm90WCwgcGl2b3RZKSAvL2pzaGludCBpZ25vcmU6bGluZVxue1xuICAgIHRoaXMucG9zaXRpb24ueCA9IHggfHwgMDtcbiAgICB0aGlzLnBvc2l0aW9uLnkgPSB5IHx8IDA7XG4gICAgdGhpcy5zY2FsZS54ID0gIXNjYWxlWCA/IDEgOiBzY2FsZVg7XG4gICAgdGhpcy5zY2FsZS55ID0gIXNjYWxlWSA/IDEgOiBzY2FsZVk7XG4gICAgdGhpcy5yb3RhdGlvbiA9IHJvdGF0aW9uIHx8IDA7XG4gICAgdGhpcy5za2V3LnggPSBza2V3WCB8fCAwO1xuICAgIHRoaXMuc2tldy55ID0gc2tld1kgfHwgMDtcbiAgICB0aGlzLnBpdm90LnggPSBwaXZvdFggfHwgMDtcbiAgICB0aGlzLnBpdm90LnkgPSBwaXZvdFkgfHwgMDtcbiAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQmFzZSBkZXN0cm95IG1ldGhvZCBmb3IgZ2VuZXJpYyBkaXNwbGF5IG9iamVjdHNcbiAqXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdGhpcy5wb3NpdGlvbiA9IG51bGw7XG4gICAgdGhpcy5zY2FsZSA9IG51bGw7XG4gICAgdGhpcy5waXZvdCA9IG51bGw7XG4gICAgdGhpcy5za2V3ID0gbnVsbDtcblxuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIHRoaXMuX2JvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fbWFzayA9IG51bGw7XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xufTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIE9ic2VydmFibGVQb2ludCh0cmFuc2Zvcm0sIHgsIHkpXG57XG4gICAgdGhpcy5feCA9IHggfHwgMDtcbiAgICB0aGlzLl95ID0geSB8fCAwO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG59XG5cbk9ic2VydmFibGVQb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYnNlcnZhYmxlUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IE9ic2VydmFibGVQb2ludDtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE9ic2VydmFibGVQb2ludC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3Qgb24gdGhlIHggYXhpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIHg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5feDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3ggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3k7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl95ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5PYnNlcnZhYmxlUG9pbnQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuX3ggPSB4IHx8IDA7XG4gICAgdGhpcy5feSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLl94IDogMCApO1xuICAgIFxuICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcbnZhciBPYnNlcnZhYmxlUG9pbnQgPSByZXF1aXJlKCcuL09ic2VydmFibGVQb2ludCcpO1xuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLCAwKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLDEsIDEpO1xuICAgIHRoaXMucGl2b3QgPSBuZXcgT2JzZXJ2YWJsZVBvaW50KHRoaXMsIDAsIDApO1xuICAgIHRoaXMuc2tldyA9IG5ldyBPYnNlcnZhYmxlUG9pbnQodGhpcywgMCwwKTtcbiAgICBcbiAgICB0aGlzLnJvdGF0aW9uID0gMDtcbiAgICB0aGlzLl9zciA9IE1hdGguc2luKDApO1xuICAgIHRoaXMuX2NyID0gTWF0aC5jb3MoMCk7XG4gICAgXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cblxuICAgIHRoaXMudXBkYXRlZCA9IHRydWU7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUcmFuc2Zvcm07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKHBhcmVudFRyYW5zZm9ybSlcbntcbiAgICB2YXIgcHQgPSBwYXJlbnRUcmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgbHQgPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3g7XG4gICAgICAgIGx0LmIgID0gIHRoaXMuX3NyICogdGhpcy5zY2FsZS5feDtcbiAgICAgICAgbHQuYyAgPSAtdGhpcy5fc3IgKiB0aGlzLnNjYWxlLl95O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3k7XG4gICAgICAgIGx0LnR4ID0gIHRoaXMucG9zaXRpb24uX3ggLSAodGhpcy5waXZvdC5feCAqIGx0LmEgKyB0aGlzLnBpdm90Ll95ICogbHQuYyk7XG4gICAgICAgIGx0LnR5ID0gIHRoaXMucG9zaXRpb24uX3kgLSAodGhpcy5waXZvdC5feCAqIGx0LmIgKyB0aGlzLnBpdm90Ll95ICogbHQuZCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVkID0gdGhpcy5kaXJ0eSB8fCBwYXJlbnRUcmFuc2Zvcm0uZGlydHk7XG5cbiAgICBpZih0aGlzLnVwZGF0ZWQpXG4gICAgeyAgICAgIFxuICAgICAgICAvLyBjb25jYXQgdGhlIHBhcmVudCBtYXRyaXggd2l0aCB0aGUgb2JqZWN0cyB0cmFuc2Zvcm0uXG4gICAgICAgIHd0LmEgID0gbHQuYSAgKiBwdC5hICsgbHQuYiAgKiBwdC5jO1xuICAgICAgICB3dC5iICA9IGx0LmEgICogcHQuYiArIGx0LmIgICogcHQuZDtcbiAgICAgICAgd3QuYyAgPSBsdC5jICAqIHB0LmEgKyBsdC5kICAqIHB0LmM7XG4gICAgICAgIHd0LmQgID0gbHQuYyAgKiBwdC5iICsgbHQuZCAgKiBwdC5kO1xuICAgICAgICB3dC50eCA9IGx0LnR4ICogcHQuYSArIGx0LnR5ICogcHQuYyArIHB0LnR4O1xuICAgICAgICB3dC50eSA9IGx0LnR4ICogcHQuYiArIGx0LnR5ICogcHQuZCArIHB0LnR5O1xuICAgIH1cbiAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhbnNmb3JtO1xuXG5cbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBDYW52YXNHcmFwaGljcyA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL0dyYXBoaWNzRGF0YScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIEdyYXBoaWNzIGNsYXNzIGNvbnRhaW5zIG1ldGhvZHMgdXNlZCB0byBkcmF3IHByaW1pdGl2ZSBzaGFwZXMgc3VjaCBhcyBsaW5lcywgY2lyY2xlcyBhbmRcbiAqIHJlY3RhbmdsZXMgdG8gdGhlIGRpc3BsYXksIGFuZCB0byBjb2xvciBhbmQgZmlsbCB0aGVtLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzKClcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSB2YWx1ZSB1c2VkIHdoZW4gZmlsbGluZyB0aGUgR3JhcGhpY3Mgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggKHRoaWNrbmVzcykgb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29sb3Igb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBHcmFwaGljcyBkYXRhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFRoaXMgaXMgYSBoZXggdmFsdWUuIEFwcGx5IGEgdmFsdWUgb2YgMHhGRkZGRkYgdG8gcmVzZXQgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmV2aW91cyB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFVzZWQgdG8gY29tcGFyZSB0byB0aGUgY3VycmVudCB0aW50IGFuZCBjaGVjayBpZiB0aGVyZXMgY2hhbmdlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLl9wcmV2VGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMO1xuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCBwYXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgY29udGFpbmluZyBzb21lIFdlYkdMLXJlbGF0ZWQgcHJvcGVydGllcyB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIG9iamVjdD59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAvLyBUT0RPIC0gX3dlYmdsIHNob3VsZCB1c2UgYSBwcm90b3R5cGUgb2JqZWN0LCBub3QgYSByYW5kb20gdW5kb2N1bWVudGVkIG9iamVjdC4uLlxuICAgIHRoaXMuX3dlYkdMID0ge307XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgc2hhcGUgaXMgYmVpbmcgdXNlZCBhcyBhIG1hc2suXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNNYXNrID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYm91bmRzJyBwYWRkaW5nIHVzZWQgZm9yIGJvdW5kcyBjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJvdW5kc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQSBjYWNoZSBvZiB0aGUgbG9jYWwgYm91bmRzIHRvIHByZXZlbnQgcmVjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwwLDEsMSk7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlIGdyYXBoaWNzXG4gICAgICogb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIFdlYkdMIGdyYXBoaWNzIG9iamVjdCBoYXMgY2hhbmdlZC4gSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZVxuICAgICAqIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlY2FsY3VsYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcblxuICAgIHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIGNhY2hlZCBzcHJpdGUgb2JqZWN0IG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBjYWNoZUFzQml0bWFwIGlzIHNldCB0byB0cnVlIHRoZSBncmFwaGljcyBvYmplY3Qgd2lsbCBiZSByZW5kZXJlZCBhcyBpZiBpdCB3YXMgYSBzcHJpdGUuXG4gICAgICogVGhpcyBpcyB1c2VmdWwgaWYgeW91ciBncmFwaGljcyBlbGVtZW50IGRvZXMgbm90IGNoYW5nZSBvZnRlbiwgYXMgaXQgd2lsbCBzcGVlZCB1cCB0aGUgcmVuZGVyaW5nXG4gICAgICogb2YgdGhlIG9iamVjdCBpbiBleGNoYW5nZSBmb3IgdGFraW5nIHVwIHRleHR1cmUgbWVtb3J5LiBJdCBpcyBhbHNvIHVzZWZ1bCBpZiB5b3UgbmVlZCB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3QgdG8gYmUgYW50aS1hbGlhc2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVuZGVyZWQgdXNpbmcgY2FudmFzLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCBpZlxuICAgICAqIHlvdSBhcmUgY29uc3RhbnRseSByZWRyYXdpbmcgdGhlIGdyYXBoaWNzIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBjYWNoZUFzQml0bWFwXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5HcmFwaGljcyNcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuR3JhcGhpY3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcbkdyYXBoaWNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljcztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEdyYXBoaWNzIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqIE5vdGUgdGhhdCB0aGUgb25seSB0aGUgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IGFyZSBjbG9uZWQsIG5vdCBpdHMgdHJhbnNmb3JtIChwb3NpdGlvbixzY2FsZSxldGMpXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2xvbmUgPSBuZXcgR3JhcGhpY3MoKTtcblxuICAgIGNsb25lLnJlbmRlcmFibGUgICAgPSB0aGlzLnJlbmRlcmFibGU7XG4gICAgY2xvbmUuZmlsbEFscGhhICAgICA9IHRoaXMuZmlsbEFscGhhO1xuICAgIGNsb25lLmxpbmVXaWR0aCAgICAgPSB0aGlzLmxpbmVXaWR0aDtcbiAgICBjbG9uZS5saW5lQ29sb3IgICAgID0gdGhpcy5saW5lQ29sb3I7XG4gICAgY2xvbmUudGludCAgICAgICAgICA9IHRoaXMudGludDtcbiAgICBjbG9uZS5ibGVuZE1vZGUgICAgID0gdGhpcy5ibGVuZE1vZGU7XG4gICAgY2xvbmUuaXNNYXNrICAgICAgICA9IHRoaXMuaXNNYXNrO1xuICAgIGNsb25lLmJvdW5kc1BhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG4gICAgY2xvbmUuZGlydHkgICAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuZ2xEaXJ0eSAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuY2FjaGVkU3ByaXRlRGlydHkgPSB0aGlzLmNhY2hlZFNwcml0ZURpcnR5O1xuXG4gICAgLy8gY29weSBncmFwaGljcyBkYXRhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIGNsb25lLmdyYXBoaWNzRGF0YS5wdXNoKHRoaXMuZ3JhcGhpY3NEYXRhW2ldLmNsb25lKCkpO1xuICAgIH1cblxuICAgIGNsb25lLmN1cnJlbnRQYXRoID0gY2xvbmUuZ3JhcGhpY3NEYXRhW2Nsb25lLmdyYXBoaWNzRGF0YS5sZW5ndGggLSAxXTtcblxuICAgIGNsb25lLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICByZXR1cm4gY2xvbmU7XG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgbGluZSBzdHlsZSB1c2VkIGZvciBzdWJzZXF1ZW50IGNhbGxzIHRvIEdyYXBoaWNzIG1ldGhvZHMgc3VjaCBhcyB0aGUgbGluZVRvKCkgbWV0aG9kIG9yIHRoZSBkcmF3Q2lyY2xlKCkgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUubGluZVN0eWxlID0gZnVuY3Rpb24gKGxpbmVXaWR0aCwgY29sb3IsIGFscGhhKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoIHx8IDA7XG4gICAgdGhpcy5saW5lQ29sb3IgPSBjb2xvciB8fCAwO1xuICAgIHRoaXMubGluZUFscGhhID0gKGFscGhhID09PSB1bmRlZmluZWQpID8gMSA6IGFscGhhO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBoYWxmd2F5IHRocm91Z2ggYSBsaW5lPyBzdGFydCBhIG5ldyBvbmUhXG4gICAgICAgICAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnNsaWNlKC0yKSk7XG4gICAgICAgICAgICBzaGFwZS5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSBpdHMgZW1wdHkgc28gbGV0cyBqdXN0IHNldCB0aGUgbGluZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVXaWR0aCA9IHRoaXMubGluZVdpZHRoO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZUFscGhhID0gdGhpcy5saW5lQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogTW92ZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byB4LCB5LlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IHRoZSBYIGNvb3JkaW5hdGUgdG8gbW92ZSB0b1xuICogQHBhcmFtIHkge251bWJlcn0gdGhlIFkgY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICAqL1xuR3JhcGhpY3MucHJvdG90eXBlLm1vdmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24oW3gseV0pO1xuICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIGxpbmUgdXNpbmcgdGhlIGN1cnJlbnQgbGluZSBzdHlsZSBmcm9tIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8gKHgsIHkpO1xuICogVGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiBpcyB0aGVuIHNldCB0byAoeCwgeSkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBkcmF3IHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lVG8gPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgsIHkpO1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnF1YWRyYXRpY0N1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICBuID0gMjAsXG4gICAgICAgIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLCAwKTtcbiAgICB9XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBuOyArK2kpXG4gICAge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgeGEgPSBmcm9tWCArICggKGNwWCAtIGZyb21YKSAqIGogKTtcbiAgICAgICAgeWEgPSBmcm9tWSArICggKGNwWSAtIGZyb21ZKSAqIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCggeGEgKyAoICgoY3BYICsgKCAodG9YIC0gY3BYKSAqIGogKSkgLSB4YSkgKiBqICksXG4gICAgICAgICAgICAgICAgICAgICB5YSArICggKChjcFkgKyAoICh0b1kgLSBjcFkpICogaiApKSAtIHlhKSAqIGogKSApO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gY3BYMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlemllckN1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIGNwWDIsIGNwWTIsIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgbiA9IDIwLFxuICAgICAgICBkdCxcbiAgICAgICAgZHQyLFxuICAgICAgICBkdDMsXG4gICAgICAgIHQyLFxuICAgICAgICB0MyxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICBkdCA9ICgxIC0gaik7XG4gICAgICAgIGR0MiA9IGR0ICogZHQ7XG4gICAgICAgIGR0MyA9IGR0MiAqIGR0O1xuXG4gICAgICAgIHQyID0gaiAqIGo7XG4gICAgICAgIHQzID0gdDIgKiBqO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCBkdDMgKiBmcm9tWCArIDMgKiBkdDIgKiBqICogY3BYICsgMyAqIGR0ICogdDIgKiBjcFgyICsgdDMgKiB0b1gsXG4gICAgICAgICAgICAgICAgICAgICBkdDMgKiBmcm9tWSArIDMgKiBkdDIgKiBqICogY3BZICsgMyAqIGR0ICogdDIgKiBjcFkyICsgdDMgKiB0b1kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjVG8oKSBtZXRob2QgY3JlYXRlcyBhbiBhcmMvY3VydmUgYmV0d2VlbiB0d28gdGFuZ2VudHMgb24gdGhlIGNhbnZhcy5cbiAqXG4gKiBcImJvcnJvd2VkXCIgZnJvbSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Z4Y2FudmFzLyAtIHRoYW5rcyBnb29nbGUhXG4gKlxuICogQHBhcmFtIHgxIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTEge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB4MiB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGFyY1xuICogQHBhcmFtIHkyIHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGFyY1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmFyY1RvID0gZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyLCByYWRpdXMpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oeDEsIHkxKTtcbiAgICB9XG5cbiAgICB2YXIgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMsXG4gICAgICAgIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0sXG4gICAgICAgIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0sXG4gICAgICAgIGExID0gZnJvbVkgLSB5MSxcbiAgICAgICAgYjEgPSBmcm9tWCAtIHgxLFxuICAgICAgICBhMiA9IHkyICAgLSB5MSxcbiAgICAgICAgYjIgPSB4MiAgIC0geDEsXG4gICAgICAgIG1tID0gTWF0aC5hYnMoYTEgKiBiMiAtIGIxICogYTIpO1xuXG4gICAgaWYgKG1tIDwgMS4wZS04IHx8IHJhZGl1cyA9PT0gMClcbiAgICB7XG4gICAgICAgIGlmIChwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAhPT0geDEgfHwgcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0gIT09IHkxKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHMucHVzaCh4MSwgeTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBkZCA9IGExICogYTEgKyBiMSAqIGIxLFxuICAgICAgICAgICAgY2MgPSBhMiAqIGEyICsgYjIgKiBiMixcbiAgICAgICAgICAgIHR0ID0gYTEgKiBhMiArIGIxICogYjIsXG4gICAgICAgICAgICBrMSA9IHJhZGl1cyAqIE1hdGguc3FydChkZCkgLyBtbSxcbiAgICAgICAgICAgIGsyID0gcmFkaXVzICogTWF0aC5zcXJ0KGNjKSAvIG1tLFxuICAgICAgICAgICAgajEgPSBrMSAqIHR0IC8gZGQsXG4gICAgICAgICAgICBqMiA9IGsyICogdHQgLyBjYyxcbiAgICAgICAgICAgIGN4ID0gazEgKiBiMiArIGsyICogYjEsXG4gICAgICAgICAgICBjeSA9IGsxICogYTIgKyBrMiAqIGExLFxuICAgICAgICAgICAgcHggPSBiMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHB5ID0gYTEgKiAoazIgKyBqMSksXG4gICAgICAgICAgICBxeCA9IGIyICogKGsxICsgajIpLFxuICAgICAgICAgICAgcXkgPSBhMiAqIChrMSArIGoyKSxcbiAgICAgICAgICAgIHN0YXJ0QW5nbGUgPSBNYXRoLmF0YW4yKHB5IC0gY3ksIHB4IC0gY3gpLFxuICAgICAgICAgICAgZW5kQW5nbGUgICA9IE1hdGguYXRhbjIocXkgLSBjeSwgcXggLSBjeCk7XG5cbiAgICAgICAgdGhpcy5hcmMoY3ggKyB4MSwgY3kgKyB5MSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYjEgKiBhMiA+IGIyICogYTEpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSAodXNlZCB0byBjcmVhdGUgY2lyY2xlcywgb3IgcGFydHMgb2YgY2lyY2xlcykuXG4gKlxuICogQHBhcmFtIGN4IHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gY3kge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gc3RhcnRBbmdsZSB7bnVtYmVyfSBUaGUgc3RhcnRpbmcgYW5nbGUsIGluIHJhZGlhbnMgKDAgaXMgYXQgdGhlIDMgbydjbG9jayBwb3NpdGlvbiBvZiB0aGUgYXJjJ3MgY2lyY2xlKVxuICogQHBhcmFtIGVuZEFuZ2xlIHtudW1iZXJ9IFRoZSBlbmRpbmcgYW5nbGUsIGluIHJhZGlhbnNcbiAqIEBwYXJhbSBhbnRpY2xvY2t3aXNlIHtib29sZWFufSBPcHRpb25hbC4gU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGRyYXdpbmcgc2hvdWxkIGJlIGNvdW50ZXJjbG9ja3dpc2Ugb3IgY2xvY2t3aXNlLiBGYWxzZSBpcyBkZWZhdWx0LCBhbmQgaW5kaWNhdGVzIGNsb2Nrd2lzZSwgd2hpbGUgdHJ1ZSBpbmRpY2F0ZXMgY291bnRlci1jbG9ja3dpc2UuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjID0gZnVuY3Rpb24oY3gsIGN5LCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBhbnRpY2xvY2t3aXNlKVxue1xuICAgIGFudGljbG9ja3dpc2UgPSBhbnRpY2xvY2t3aXNlIHx8IGZhbHNlO1xuXG4gICAgaWYgKHN0YXJ0QW5nbGUgPT09IGVuZEFuZ2xlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYoICFhbnRpY2xvY2t3aXNlICYmIGVuZEFuZ2xlIDw9IHN0YXJ0QW5nbGUgKVxuICAgIHtcbiAgICAgICAgZW5kQW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuICAgIGVsc2UgaWYoIGFudGljbG9ja3dpc2UgJiYgc3RhcnRBbmdsZSA8PSBlbmRBbmdsZSApXG4gICAge1xuICAgICAgICBzdGFydEFuZ2xlICs9IE1hdGguUEkgKiAyO1xuICAgIH1cblxuICAgIHZhciBzd2VlcCA9IGFudGljbG9ja3dpc2UgPyAoc3RhcnRBbmdsZSAtIGVuZEFuZ2xlKSAqIC0xIDogKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSk7XG4gICAgdmFyIHNlZ3MgPSAgTWF0aC5jZWlsKE1hdGguYWJzKHN3ZWVwKSAvIChNYXRoLlBJICogMikpICogNDA7XG5cbiAgICBpZihzd2VlcCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBzdGFydFggPSBjeCArIE1hdGguY29zKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuICAgIHZhciBzdGFydFkgPSBjeSArIE1hdGguc2luKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHN0YXJ0WCwgc3RhcnRZKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciB0aGV0YSA9IHN3ZWVwLyhzZWdzKjIpO1xuICAgIHZhciB0aGV0YTIgPSB0aGV0YSoyO1xuXG4gICAgdmFyIGNUaGV0YSA9IE1hdGguY29zKHRoZXRhKTtcbiAgICB2YXIgc1RoZXRhID0gTWF0aC5zaW4odGhldGEpO1xuXG4gICAgdmFyIHNlZ01pbnVzID0gc2VncyAtIDE7XG5cbiAgICB2YXIgcmVtYWluZGVyID0gKCBzZWdNaW51cyAlIDEgKSAvIHNlZ01pbnVzO1xuXG4gICAgZm9yKHZhciBpPTA7IGk8PXNlZ01pbnVzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcmVhbCA9ICBpICsgcmVtYWluZGVyICogaTtcblxuXG4gICAgICAgIHZhciBhbmdsZSA9ICgodGhldGEpICsgc3RhcnRBbmdsZSArICh0aGV0YTIgKiByZWFsKSk7XG5cbiAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgIHZhciBzID0gLU1hdGguc2luKGFuZ2xlKTtcblxuICAgICAgICBwb2ludHMucHVzaCgoIChjVGhldGEgKiAgYykgKyAoc1RoZXRhICogcykgKSAqIHJhZGl1cyArIGN4LFxuICAgICAgICAgICAgICAgICAgICAoIChjVGhldGEgKiAtcykgKyAoc1RoZXRhICogYykgKSAqIHJhZGl1cyArIGN5KTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIGEgc2ltcGxlIG9uZS1jb2xvciBmaWxsIHRoYXQgc3Vic2VxdWVudCBjYWxscyB0byBvdGhlciBHcmFwaGljcyBtZXRob2RzXG4gKiAoc3VjaCBhcyBsaW5lVG8oKSBvciBkcmF3Q2lyY2xlKCkpIHVzZSB3aGVuIGRyYXdpbmcuXG4gKlxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlZ2luRmlsbCA9IGZ1bmN0aW9uIChjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5maWxsaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPD0gMilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsID0gdGhpcy5maWxsaW5nO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQ29sb3IgPSB0aGlzLmZpbGxDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbEFscGhhID0gdGhpcy5maWxsQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBmaWxsIHRvIHRoZSBsaW5lcyBhbmQgc2hhcGVzIHRoYXQgd2VyZSBhZGRlZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHRoZSBiZWdpbkZpbGwoKSBtZXRob2QuXG4gKlxuICogQHJldHVybiB7R3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5lbmRGaWxsID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IG51bGw7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCApXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguUmVjdGFuZ2xlKHgseSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gUmFkaXVzIG9mIHRoZSByZWN0YW5nbGUgY29ybmVyc1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSb3VuZGVkUmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzIClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5Sb3VuZGVkUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgY2lyY2xlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3Q2lyY2xlID0gZnVuY3Rpb24gKHgsIHksIHJhZGl1cylcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5DaXJjbGUoeCx5LCByYWRpdXMpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhbiBlbGxpcHNlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIGhhbGYgd2lkdGggb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd0VsbGlwc2UgPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5FbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIHBvbHlnb24gdXNpbmcgdGhlIGdpdmVuIHBhdGguXG4gKlxuICogQHBhcmFtIHBhdGgge251bWJlcltdfFBJWEkuUG9pbnRbXX0gVGhlIHBhdGggZGF0YSB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgcG9seWdvbi5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UG9seWdvbiA9IGZ1bmN0aW9uIChwYXRoKVxue1xuICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGFzc2lnbm1lbnQgZGVvcHRcbiAgICAvLyBzZWUgc2VjdGlvbiAzLjE6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgIHZhciBwb2ludHMgPSBwYXRoO1xuXG4gICAgdmFyIGNsb3NlZCA9IHRydWU7XG5cbiAgICBpZiAocG9pbnRzIGluc3RhbmNlb2YgbWF0aC5Qb2x5Z29uKVxuICAgIHtcbiAgICAgICAgY2xvc2VkID0gcG9pbnRzLmNsb3NlZDtcbiAgICAgICAgcG9pbnRzID0gcG9pbnRzLnBvaW50cztcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHNbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHBvaW50cyk7XG4gICAgc2hhcGUuY2xvc2VkID0gY2xvc2VkO1xuXG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZ3JhcGhpY3MgdGhhdCB3ZXJlIGRyYXduIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LCBhbmQgcmVzZXRzIGZpbGwgYW5kIGxpbmUgc3R5bGUgc2V0dGluZ3MuXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG4gICAgdGhpcy5maWxsaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmNsZWFyRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gW107XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGdlb21ldHJ5IGlzIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNob3VsZCBiZSBvbmUgb2YgdGhlIHNjYWxlTW9kZSBjb25zdHNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBncmFwaGljcyBvYmplY3RcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVzb2x1dGlvbiwgc2NhbGVNb2RlKVxue1xuXG4gICAgcmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGggKiByZXNvbHV0aW9uLCBib3VuZHMuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXNCdWZmZXIuY29udGV4dC5zY2FsZShyZXNvbHV0aW9uLCByZXNvbHV0aW9uKTtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIGNhbnZhc0J1ZmZlci5jb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcblxuICAgIGlmICh0aGlzLmdsRGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5nbERpcnR5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5yZW5kZXIodGhpcyk7XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5pc01hc2sgPT09IHRydWUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHRpbnQgaGFzIGNoYW5nZWQsIHNldCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRpcnR5LlxuICAgIGlmICh0aGlzLl9wcmV2VGludCAhPT0gdGhpcy50aW50KSB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIHRoaXMgY29kZSBtYXkgc3RpbGwgYmUgbmVlZGVkIHNvIGxlYXZpbmcgZm9yIG5vdy4uXG4gICAgLy9cbiAgICAvKlxuICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuZGlydHkgfHwgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVDYWNoZWRTcHJpdGUoKTtcblxuICAgICAgICAgICAgLy8gd2Ugd2lsbCBhbHNvIG5lZWQgdG8gdXBkYXRlIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUoKTtcblxuICAgICAgICAgICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFscGhhID0gdGhpcy5hbHBoYTtcblxuICAgICAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLl9jYWNoZWRTcHJpdGUsIHJlbmRlcmVyKTtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgICovXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY29udGV4dCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYm91bmRzIG9mIHRoZSBncmFwaGljIHNoYXBlIGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IFRoZSB3b3JsZCB0cmFuc2Zvcm0gbWF0cml4IHRvIHVzZSwgZGVmYXVsdHMgdG8gdGhpc1xuICogIG9iamVjdCdzIHdvcmxkVHJhbnNmb3JtLlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICAvLyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBpdGVtIGlzIGEgbWFzayFcbiAgICAgICAgaWYgKCF0aGlzLnJlbmRlcmFibGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJvdW5kc0RpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICAgICAgICAgIHRoaXMuZ2xEaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYm91bmRzRGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9sb2NhbEJvdW5kcztcblxuICAgICAgICB2YXIgdzAgPSBib3VuZHMueDtcbiAgICAgICAgdmFyIHcxID0gYm91bmRzLndpZHRoICsgYm91bmRzLng7XG5cbiAgICAgICAgdmFyIGgwID0gYm91bmRzLnk7XG4gICAgICAgIHZhciBoMSA9IGJvdW5kcy5oZWlnaHQgKyBib3VuZHMueTtcblxuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAgICAgdmFyIHgyID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgICAgICB2YXIgeTMgPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgICAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgbWF4WCA9IHgxO1xuICAgICAgICB2YXIgbWF4WSA9IHkxO1xuXG4gICAgICAgIHZhciBtaW5YID0geDE7XG4gICAgICAgIHZhciBtaW5ZID0geTE7XG5cbiAgICAgICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICAgICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICAgICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgICAgICB0aGlzLl9ib3VuZHMueCA9IG1pblg7XG4gICAgICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy55ID0gbWluWTtcbiAgICAgICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSB0aGlzLl9ib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBncmFwaGljcyBvYmplY3RcbipcbiogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4qL1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciBncmFwaGljc0RhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKCFkYXRhLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gb25seSBkZWFsIHdpdGggZmlsbHMuLlxuICAgICAgICBpZiAoZGF0YS5zaGFwZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCBkYXRhLnNoYXBlLmNvbnRhaW5zKCB0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkgKSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAqXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcblxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICBpZiAodGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdmFyIHNoYXBlLCBwb2ludHMsIHgsIHksIHcsIGg7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVtpXTtcbiAgICAgICAgICAgIHZhciB0eXBlID0gZGF0YS50eXBlO1xuICAgICAgICAgICAgdmFyIGxpbmVXaWR0aCA9IGRhdGEubGluZVdpZHRoO1xuICAgICAgICAgICAgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QgfHwgdHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLnggLSBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueSAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS53aWR0aCArIGxpbmVXaWR0aDtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLnJhZGl1cyArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLng7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLmhlaWdodCArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFBPTFlcbiAgICAgICAgICAgICAgICBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBvaW50cy5sZW5ndGg7IGogKz0gMilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHggPSBwb2ludHNbal07XG4gICAgICAgICAgICAgICAgICAgIHkgPSBwb2ludHNbaisxXTtcblxuICAgICAgICAgICAgICAgICAgICBtaW5YID0geC1saW5lV2lkdGggPCBtaW5YID8geC1saW5lV2lkdGggOiBtaW5YO1xuICAgICAgICAgICAgICAgICAgICBtYXhYID0geCtsaW5lV2lkdGggPiBtYXhYID8geCtsaW5lV2lkdGggOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblkgPSB5LWxpbmVXaWR0aCA8IG1pblkgPyB5LWxpbmVXaWR0aCA6IG1pblk7XG4gICAgICAgICAgICAgICAgICAgIG1heFkgPSB5K2xpbmVXaWR0aCA+IG1heFkgPyB5K2xpbmVXaWR0aCA6IG1heFk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIG1pblggPSAwO1xuICAgICAgICBtYXhYID0gMDtcbiAgICAgICAgbWluWSA9IDA7XG4gICAgICAgIG1heFkgPSAwO1xuICAgIH1cblxuICAgIHZhciBwYWRkaW5nID0gdGhpcy5ib3VuZHNQYWRkaW5nO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueCA9IG1pblggLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLndpZHRoID0gKG1heFggLSBtaW5YKSArIHBhZGRpbmcgKiAyO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueSA9IG1pblkgLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLmhlaWdodCA9IChtYXhZIC0gbWluWSkgKyBwYWRkaW5nICogMjtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjYWNoZWQgc3ByaXRlIHdoZW4gdGhlIHNwcml0ZSBoYXMgY2FjaGVBc0JpdG1hcCA9IHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIGlmICghdGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgdmFyIGNhbnZhc0J1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcbiAgICAgICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzQnVmZmVyLmNhbnZhcyk7XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlciA9IGNhbnZhc0J1ZmZlcjtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLnJlc2l6ZShib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIC8vIGxldmVyYWdlIHRoZSBhbmNob3IgdG8gYWNjb3VudCBmb3IgdGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudFxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQuc2F2ZSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC50cmFuc2xhdGUoLWJvdW5kcy54LC1ib3VuZHMueSk7XG5cbiAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3MgdG8gMSBmb3IgdGhlIHJlbmRlci4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIG5vdyByZW5kZXIgdGhlIGdyYXBoaWMuLlxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dCk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xufTtcbiovXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVDYWNoZWRTcHJpdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2FjaGVkU3ByaXRlID0gdGhpcy5fY2FjaGVkU3ByaXRlO1xuICAgIHZhciB0ZXh0dXJlID0gY2FjaGVkU3ByaXRlLnRleHR1cmU7XG4gICAgdmFyIGNhbnZhcyA9IGNhY2hlZFNwcml0ZS5idWZmZXIuY2FudmFzO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG4gICAgdGV4dHVyZS5jcm9wLndpZHRoID0gdGV4dHVyZS5mcmFtZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmNyb3AuaGVpZ2h0ID0gdGV4dHVyZS5mcmFtZS5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgY2FjaGVkU3ByaXRlLl93aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICBjYWNoZWRTcHJpdGUuX2hlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIGRpcnR5IGJhc2UgdGV4dHVyZXNcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmRpcnR5KCk7XG59OyovXG5cbi8qKlxuICogRGVzdHJveXMgYSBwcmV2aW91cyBjYWNoZWQgc3ByaXRlLlxuICpcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95Q2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUudGV4dHVyZS5kZXN0cm95KHRydWUpO1xuXG4gICAgLy8gbGV0IHRoZSBnYyBjb2xsZWN0IHRoZSB1bnVzZWQgc3ByaXRlXG4gICAgLy8gVE9ETyBjb3VsZCBiZSBvYmplY3QgcG9vbGVkIVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59OyovXG5cbi8qKlxuICogRHJhd3MgdGhlIGdpdmVuIHNoYXBlIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LiBDYW4gYmUgYW55IG9mIENpcmNsZSwgUmVjdGFuZ2xlLCBFbGxpcHNlLCBMaW5lIG9yIFBvbHlnb24uXG4gKlxuICogQHBhcmFtIHNoYXBlIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc0RhdGF9IFRoZSBnZW5lcmF0ZWQgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdTaGFwZSA9IGZ1bmN0aW9uIChzaGFwZSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIC8vIGNoZWNrIGN1cnJlbnQgcGF0aCFcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YS5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgdmFyIGRhdGEgPSBuZXcgR3JhcGhpY3NEYXRhKHRoaXMubGluZVdpZHRoLCB0aGlzLmxpbmVDb2xvciwgdGhpcy5saW5lQWxwaGEsIHRoaXMuZmlsbENvbG9yLCB0aGlzLmZpbGxBbHBoYSwgdGhpcy5maWxsaW5nLCBzaGFwZSk7XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YS5wdXNoKGRhdGEpO1xuXG4gICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAge1xuICAgICAgICBkYXRhLnNoYXBlLmNsb3NlZCA9IGRhdGEuc2hhcGUuY2xvc2VkIHx8IHRoaXMuZmlsbGluZztcbiAgICAgICAgdGhpcy5jdXJyZW50UGF0aCA9IGRhdGE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGRhdGE7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgLy8gZGVzdHJveSBlYWNoIG9mIHRoZSBHcmFwaGljc0RhdGEgb2JqZWN0c1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8vIGZvciBlYWNoIHdlYmdsIGRhdGEgZW50cnksIGRlc3Ryb3kgdGhlIFdlYkdMR3JhcGhpY3NEYXRhXG4gICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fd2ViZ2wpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl93ZWJnbFtpZF0uZGF0YS5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgdGhpcy5fd2ViZ2xbaWRdLmRhdGFbal0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG4gICAgdGhpcy5fd2ViZ2wgPSBudWxsO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEEgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gbGluZVdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gZmlsbENvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGxBbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBmaWxsICAgICAge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICogQHBhcmFtIHNoYXBlICAgICB7Q2lyY2xlfFJlY3RhbmdsZXxFbGxpcHNlfExpbmV8UG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICovXG5mdW5jdGlvbiBHcmFwaGljc0RhdGEobGluZVdpZHRoLCBsaW5lQ29sb3IsIGxpbmVBbHBoYSwgZmlsbENvbG9yLCBmaWxsQWxwaGEsIGZpbGwsIHNoYXBlKVxue1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQ29sb3IgPSBsaW5lQ29sb3I7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQWxwaGEgPSBsaW5lQWxwaGE7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLl9saW5lVGludCA9IGxpbmVDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxDb2xvciA9IGZpbGxDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IGZpbGxBbHBoYTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBjYWNoZWQgdGludCBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuX2ZpbGxUaW50ID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhcGUgaXMgZmlsbGVkIHdpdGggYSBjb2xvdXJcbiAgICAgKi9cbiAgICB0aGlzLmZpbGwgPSBmaWxsO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICAgICAqL1xuICAgIHRoaXMuc2hhcGUgPSBzaGFwZTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBUaGUgdHlwZSBvZiB0aGUgc2hhcGUsIHNlZSB0aGUgQ29uc3QuU2hhcGVzIGZpbGUgZm9yIGFsbCB0aGUgZXhpc3RpbmcgdHlwZXMsXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gc2hhcGUudHlwZTtcbn1cblxuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3NEYXRhIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBHcmFwaGljc0RhdGEoXG4gICAgICAgIHRoaXMubGluZVdpZHRoLFxuICAgICAgICB0aGlzLmxpbmVDb2xvcixcbiAgICAgICAgdGhpcy5saW5lQWxwaGEsXG4gICAgICAgIHRoaXMuZmlsbENvbG9yLFxuICAgICAgICB0aGlzLmZpbGxBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsLFxuICAgICAgICB0aGlzLnNoYXBlXG4gICAgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIGRhdGEuXG4gKi9cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnNoYXBlID0gbnVsbDtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL1dlYkdMR3JhcGhpY3NEYXRhJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuXG4gICAgLy8gc29tZSBkcmF3aW5nIGZ1bmN0aW9ucy4uXG4gICAgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi91dGlscy9idWlsZExpbmUnKTtcbiAgICBidWlsZFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUG9seScpO1xuICAgIGJ1aWxkQ29tcGxleFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ29tcGxleFBvbHknKTtcbiAgICBidWlsZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSZWN0YW5nbGUnKTtcbiAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkQ2lyY2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZENpcmNsZScpO1xuXG4gICAgZWFyY3V0ID0gcmVxdWlyZSgnZWFyY3V0Jyk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IFtdO1xuXG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgYSBwb2x5IGNhbiBjb250YWluIGJlZm9yZSBpdCBpcyByZW5kZXJlZCBhcyBhIGNvbXBsZXggcG9seWdvbiAodXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyKVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgPSAyMDA7XG59XG5cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc1JlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdncmFwaGljcycsIEdyYXBoaWNzUmVuZGVyZXIpO1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMuZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzLmdsKVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHJlbmRlcmVyLlxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YVBvb2wubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBudWxsO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuICAvLyAgY29uc29sZS5sb2coZ3JhcGhpY3MpXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5IHx8ICFncmFwaGljcy5fd2ViR0xbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljcyhncmFwaGljcyk7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIFRoaXMgIGNvdWxkIGJlIHNwZWVkZWQgdXAgZm9yIHN1cmUhXG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggZ3JhcGhpY3MuYmxlbmRNb2RlICk7XG5cbi8vICAgIHZhciBtYXRyaXggPSAgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0uY2xvbmUoKTtcbi8vICAgIHZhciBtYXRyaXggPSAgcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7XG4vLyAgICBtYXRyaXguYXBwZW5kKGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gd2ViR0wuZGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTC5kYXRhW2ldLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyBmaXggdGhpcyBvbmUhXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEgKiB3ZWJHTERhdGEuYWxwaGEpO1xuXG4gICAgICAgICAgICAvLyByZW5kZXIgcXVhZC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgcmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeCA9IGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLmxvY2F0aW9uKTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHVwZGF0ZVxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgLy8gZ2V0IHRoZSBjb250ZXh0cyBncmFwaGljcyBvYmplY3RcbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd2ViR0wgY29udGV4dCB0aW1lIHRvIGNyZWF0ZSBpdCFcbiAgICBpZiAoIXdlYkdMKVxuICAgIHtcbiAgICAgICAgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdID0ge2xhc3RJbmRleDowLCBkYXRhOltdLCBnbDpnbH07XG4gICAgfVxuXG4gICBcbiAgICAvLyBmbGFnIHRoZSBncmFwaGljcyBhcyBub3QgZGlydHkgYXMgd2UgYXJlIGFib3V0IHRvIHVwZGF0ZSBpdC4uLlxuICAgIGdyYXBoaWNzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB2YXIgaTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGNsZWFyZWQgdGhlIGdyYXBoaWNzIG9iamVjdCB3ZSB3aWxsIG5lZWQgdG8gY2xlYXIgZXZlcnkgb2JqZWN0XG4gICAgaWYgKGdyYXBoaWNzLmNsZWFyRGlydHkpXG4gICAge1xuICAgICAgICBncmFwaGljcy5jbGVhckRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuZCByZXR1cm4gYWxsIHRoZSB3ZWJHTERhdGFzIHRvIHRoZSBvYmplY3QgcG9vbCBzbyB0aGFuIGNhbiBiZSByZXVzZWQgbGF0ZXIgb25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBncmFwaGljc0RhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucHVzaCggZ3JhcGhpY3NEYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgYXJyYXkgYW5kIHJlc2V0IHRoZSBpbmRleC4uXG4gICAgICAgIHdlYkdMLmRhdGEgPSBbXTtcbiAgICAgICAgd2ViR0wubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBncmFwaGljcyBkYXRhcyBhbmQgY29uc3RydWN0IGVhY2ggb25lLi5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGEgY29tcGxleCBmaWxsIHRoZW4gdGhlIG5ldyBzdGVuY2lsIGJ1ZmZlciB0ZWNobmlxdWUgd2lsbCBiZSB1c2VkXG4gICAgLy8gb3RoZXIgd2lzZSBncmFwaGljcyBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIGludG8gYSBiYXRjaC4uXG4gICAgZm9yIChpID0gd2ViR0wubGFzdEluZGV4OyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBwb2ludHMgdGhlIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgICAgICAgICAgZGF0YS5wb2ludHMgPSBkYXRhLnNoYXBlLnBvaW50cy5zbGljZSgpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBwb2x5IGlmIHRoZSB2YWx1ZSBpcyB0cnVlIVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50c1swXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTJdIHx8IGRhdGEucG9pbnRzWzFdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKGRhdGEucG9pbnRzWzBdLCBkYXRhLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNQUtFIFNVUkUgV0UgSEFWRSBUSEUgQ09SUkVDVCBUWVBFLi5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA+PSA2KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA8IHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplICogMilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkRyYXdVc2luZ1NpbXBsZSA9IGJ1aWxkUG9seShkYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkRyYXdVc2luZ1NpbXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoID4gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuICAgICAgICAgICAgICAgIGJ1aWxkTGluZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMgfHwgZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZENpcmNsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCsrO1xuICAgIH1cblxuICAgIC8vIHVwbG9hZCBhbGwgdGhlIGRpcnR5IGRhdGEuLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5kaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhLnVwbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gd2ViR0wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSBUT0RPIEBBbHZpblxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5zd2l0Y2hNb2RlID0gZnVuY3Rpb24gKHdlYkdMLCB0eXBlKVxue1xuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICBpZiAoIXdlYkdMLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbd2ViR0wuZGF0YS5sZW5ndGgtMV07XG5cbiAgICAgICAgaWYgKCh3ZWJHTERhdGEucG9pbnRzLmxlbmd0aCA+IDMyMDAwMCkgfHwgd2ViR0xEYXRhLm1vZGUgIT09IHR5cGUgfHwgdHlwZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdlYkdMRGF0YS5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gd2ViR0xEYXRhO1xufTtcblxuIiwiLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyBXZWJHTCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gV2ViR0xHcmFwaGljc0RhdGEoZ2wpIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vVE9ETyBkb2VzIHRoaXMgbmVlZCB0byBiZSBzcGxpdCBiZWZvcmUgdXBsb2Rpbmc/P1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvbG9yIGNvbXBvbmVudHMgKHIsZyxiKVxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3IgPSBbMCwwLDBdOyAvLyBjb2xvciBzcGxpdCFcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBvaW50cyB0byBkcmF3XG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIHRvZG8gQGFsdmluXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubW9kZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGdyYXBoaWNzIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHZlcnRpY2VzIGFuZCB0aGUgaW5kaWNlc1xuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb2ludHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmluZGljZXMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4vLyAgICB0aGlzLmxhc3RJbmRleCA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5nbFBvaW50cyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5wb2ludHMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuYnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5nbFBvaW50cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5nbEluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuZ2xJbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLnBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBcbiAgICB0aGlzLmdsID0gbnVsbDtcblxuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoZ2wpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgZ2wsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgY2lyY2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byBkcmF3XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ2lyY2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIHZhciBjaXJjbGVEYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gY2lyY2xlRGF0YS54O1xuICAgIHZhciB5ID0gY2lyY2xlRGF0YS55O1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuXG4gICAgLy8gVE9ETyAtIGJpdCBoYWNreT8/XG4gICAgaWYgKGdyYXBoaWNzRGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB0b3RhbFNlZ3MgPSBNYXRoLmZsb29yKDMwICogTWF0aC5zcXJ0KGNpcmNsZURhdGEucmFkaXVzKSkgfHwgTWF0aC5mbG9vcigxNSAqIE1hdGguc3FydChjaXJjbGVEYXRhLndpZHRoICsgY2lyY2xlRGF0YS5oZWlnaHQpKTtcbiAgICB2YXIgc2VnID0gKE1hdGguUEkgKiAyKSAvIHRvdGFsU2VncyA7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcyk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDEgOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCx5LCByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKyssIHZlY1BvcysrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MtMSk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDaXJjbGU7IiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuICAgIFxuXG5cbi8qKlxuICogQnVpbGRzIGEgY29tcGxleCBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDb21wbGV4UG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvL1RPRE8gLSBubyBuZWVkIHRvIGNvcHkgdGhpcyBhcyBpdCBnZXRzIHR1cm5lZCBpbnRvIGEgRkxvYXQzMkFycmF5IGFueXdheXMuLlxuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzLnNsaWNlKCk7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDYpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgd2ViR0xEYXRhLnBvaW50cyA9IHBvaW50cztcbiAgICB3ZWJHTERhdGEuYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHdlYkdMRGF0YS5jb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG5cbiAgICAvLyBjYWxjbGF0ZSB0aGUgYm91bmRzLi5cbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIHZhciB4LHk7XG5cbiAgICAvLyBnZXQgc2l6ZS4uXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKz0yKVxuICAgIHtcbiAgICAgICAgeCA9IHBvaW50c1tpXTtcbiAgICAgICAgeSA9IHBvaW50c1tpKzFdO1xuXG4gICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICBtYXhYID0geCA+IG1heFggPyB4IDogbWF4WDtcblxuICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcbiAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgcXVhZCB0byB0aGUgZW5kIGNvcyB0aGVyZSBpcyBubyBwb2ludCBtYWtpbmcgYW5vdGhlciBidWZmZXIhXG4gICAgcG9pbnRzLnB1c2gobWluWCwgbWluWSxcbiAgICAgICAgICAgICAgICBtYXhYLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1heFksXG4gICAgICAgICAgICAgICAgbWluWCwgbWF4WSk7XG5cbiAgICAvLyBwdXNoIGEgcXVhZCBvbnRvIHRoZSBlbmQuLlxuXG4gICAgLy9UT0RPIC0gdGhpcyBhaW50IG5lZWRlZCFcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKCBpICk7XG4gICAgfVxuXG59O1xuXG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENvbXBsZXhQb2x5OyIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBsaW5lIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRMaW5lID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIFRPRE8gT1BUSU1JU0UhXG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGlmIHRoZSBsaW5lIHdpZHRoIGlzIGFuIG9kZCBudW1iZXIgYWRkIDAuNSB0byBhbGlnbiB0byBhIHdob2xlIHBpeGVsXG4gICAgLy8gY29tbWVudGluZyB0aGlzIG91dCBmaXhlcyAjNzExIGFuZCAjMTYyMFxuICAgIC8vIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoJTIpXG4gICAgLy8ge1xuICAgIC8vICAgICBmb3IgKGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKVxuICAgIC8vICAgICB7XG4gICAgLy8gICAgICAgICBwb2ludHNbaV0gKz0gMC41O1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBmaXJzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgIHZhciBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgIC8vIGlmIHRoZSBmaXJzdCBwb2ludCBpcyB0aGUgbGFzdCBwb2ludCAtIGdvbm5hIGhhdmUgaXNzdWVzIDopXG4gICAgaWYgKGZpcnN0UG9pbnQueCA9PT0gbGFzdFBvaW50LnggJiYgZmlyc3RQb2ludC55ID09PSBsYXN0UG9pbnQueSlcbiAgICB7XG4gICAgICAgIC8vIG5lZWQgdG8gY2xvbmUgYXMgd2UgYXJlIGdvaW5nIHRvIHNsaWdodGx5IG1vZGlmeSB0aGUgc2hhcGUuLlxuICAgICAgICBwb2ludHMgPSBwb2ludHMuc2xpY2UoKTtcblxuICAgICAgICBwb2ludHMucG9wKCk7XG4gICAgICAgIHBvaW50cy5wb3AoKTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgICAgICB2YXIgbWlkUG9pbnRYID0gbGFzdFBvaW50LnggKyAoZmlyc3RQb2ludC54IC0gbGFzdFBvaW50LngpICowLjU7XG4gICAgICAgIHZhciBtaWRQb2ludFkgPSBsYXN0UG9pbnQueSArIChmaXJzdFBvaW50LnkgLSBsYXN0UG9pbnQueSkgKjAuNTtcblxuICAgICAgICBwb2ludHMudW5zaGlmdChtaWRQb2ludFgsIG1pZFBvaW50WSk7XG4gICAgICAgIHBvaW50cy5wdXNoKG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICB9XG5cbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgIHZhciBpbmRleENvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICB2YXIgaW5kZXhTdGFydCA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgLy8gRFJBVyB0aGUgTGluZVxuICAgIHZhciB3aWR0aCA9IGdyYXBoaWNzRGF0YS5saW5lV2lkdGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmxpbmVDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmxpbmVBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciBweCwgcHksIHAxeCwgcDF5LCBwMngsIHAyeSwgcDN4LCBwM3k7XG4gICAgdmFyIHBlcnB4LCBwZXJweSwgcGVycDJ4LCBwZXJwMnksIHBlcnAzeCwgcGVycDN5O1xuICAgIHZhciBhMSwgYjEsIGMxLCBhMiwgYjIsIGMyO1xuICAgIHZhciBkZW5vbSwgcGRpc3QsIGRpc3Q7XG5cbiAgICBwMXggPSBwb2ludHNbMF07XG4gICAgcDF5ID0gcG9pbnRzWzFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWzJdO1xuICAgIHAyeSA9IHBvaW50c1szXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gIHAxeCAtIHAyeDtcblxuICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG5cbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAvLyBzdGFydFxuICAgIHZlcnRzLnB1c2gocDF4IC0gcGVycHggLCBwMXkgLSBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAxeCArIHBlcnB4ICwgcDF5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgZm9yIChpID0gMTsgaSA8IGxlbmd0aC0xOyBpKyspXG4gICAge1xuICAgICAgICBwMXggPSBwb2ludHNbKGktMSkqMl07XG4gICAgICAgIHAxeSA9IHBvaW50c1soaS0xKSoyICsgMV07XG5cbiAgICAgICAgcDJ4ID0gcG9pbnRzWyhpKSoyXTtcbiAgICAgICAgcDJ5ID0gcG9pbnRzWyhpKSoyICsgMV07XG5cbiAgICAgICAgcDN4ID0gcG9pbnRzWyhpKzEpKjJdO1xuICAgICAgICBwM3kgPSBwb2ludHNbKGkrMSkqMiArIDFdO1xuXG4gICAgICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgICAgICBwZXJweSA9IHAxeCAtIHAyeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgICAgICBwZXJweCAvPSBkaXN0O1xuICAgICAgICBwZXJweSAvPSBkaXN0O1xuICAgICAgICBwZXJweCAqPSB3aWR0aDtcbiAgICAgICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAgICAgcGVycDJ4ID0gLShwMnkgLSBwM3kpO1xuICAgICAgICBwZXJwMnkgPSBwMnggLSBwM3g7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwMngqcGVycDJ4ICsgcGVycDJ5KnBlcnAyeSk7XG4gICAgICAgIHBlcnAyeCAvPSBkaXN0O1xuICAgICAgICBwZXJwMnkgLz0gZGlzdDtcbiAgICAgICAgcGVycDJ4ICo9IHdpZHRoO1xuICAgICAgICBwZXJwMnkgKj0gd2lkdGg7XG5cbiAgICAgICAgYTEgPSAoLXBlcnB5ICsgcDF5KSAtICgtcGVycHkgKyBwMnkpO1xuICAgICAgICBiMSA9ICgtcGVycHggKyBwMngpIC0gKC1wZXJweCArIHAxeCk7XG4gICAgICAgIGMxID0gKC1wZXJweCArIHAxeCkgKiAoLXBlcnB5ICsgcDJ5KSAtICgtcGVycHggKyBwMngpICogKC1wZXJweSArIHAxeSk7XG4gICAgICAgIGEyID0gKC1wZXJwMnkgKyBwM3kpIC0gKC1wZXJwMnkgKyBwMnkpO1xuICAgICAgICBiMiA9ICgtcGVycDJ4ICsgcDJ4KSAtICgtcGVycDJ4ICsgcDN4KTtcbiAgICAgICAgYzIgPSAoLXBlcnAyeCArIHAzeCkgKiAoLXBlcnAyeSArIHAyeSkgLSAoLXBlcnAyeCArIHAyeCkgKiAoLXBlcnAyeSArIHAzeSk7XG5cbiAgICAgICAgZGVub20gPSBhMSpiMiAtIGEyKmIxO1xuXG4gICAgICAgIGlmIChNYXRoLmFicyhkZW5vbSkgPCAwLjEgKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIGRlbm9tKz0xMC4xO1xuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJweCAsIHAyeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBweCA9IChiMSpjMiAtIGIyKmMxKS9kZW5vbTtcbiAgICAgICAgcHkgPSAoYTIqYzEgLSBhMSpjMikvZGVub207XG5cblxuICAgICAgICBwZGlzdCA9IChweCAtcDJ4KSAqIChweCAtcDJ4KSArIChweSAtcDJ5KSAqIChweSAtcDJ5KTtcblxuXG4gICAgICAgIGlmIChwZGlzdCA+IDE0MCAqIDE0MClcbiAgICAgICAge1xuICAgICAgICAgICAgcGVycDN4ID0gcGVycHggLSBwZXJwMng7XG4gICAgICAgICAgICBwZXJwM3kgPSBwZXJweSAtIHBlcnAyeTtcblxuICAgICAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwM3gqcGVycDN4ICsgcGVycDN5KnBlcnAzeSk7XG4gICAgICAgICAgICBwZXJwM3ggLz0gZGlzdDtcbiAgICAgICAgICAgIHBlcnAzeSAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN4ICo9IHdpZHRoO1xuICAgICAgICAgICAgcGVycDN5ICo9IHdpZHRoO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycDN4LCBwMnkgK3BlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJwM3gsIHAyeSAtcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRleENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocHggLCBweSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSAocHgtcDJ4KSwgcDJ5IC0gKHB5IC0gcDJ5KSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHAxeCA9IHBvaW50c1sobGVuZ3RoLTIpKjJdO1xuICAgIHAxeSA9IHBvaW50c1sobGVuZ3RoLTIpKjIgKyAxXTtcblxuICAgIHAyeCA9IHBvaW50c1sobGVuZ3RoLTEpKjJdO1xuICAgIHAyeSA9IHBvaW50c1sobGVuZ3RoLTEpKjIgKyAxXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5KTtcbiAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBpbmRleENvdW50OyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydCsrKTtcbiAgICB9XG5cbiAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydC0xKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRMaW5lOyIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcG9seWdvbiB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuV2ViR0xHcmFwaGljc0RhdGF9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocG9pbnRzLCBudWxsLCAyKTtcblxuICAgIGlmICghdHJpYW5nbGVzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgdmVydFBvcyA9IHZlcnRzLmxlbmd0aCAvIDY7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICt2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVydFBvcyk7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmVydHMucHVzaChwb2ludHNbaSAqIDJdLCBwb2ludHNbaSAqIDIgKyAxXSxcbiAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRQb2x5O1xuIiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHJlY3RhbmdsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIC0tLSAvL1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIC8vXG4gICAgdmFyIHJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcmVjdERhdGEueDtcbiAgICB2YXIgeSA9IHJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJlY3REYXRhLmhlaWdodDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgLy8gc3RhcnRcbiAgICAgICAgdmVydHMucHVzaCh4LCB5KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAvLyBpbnNlcnQgMiBkZWFkIHRyaWFuZ2xlcy4uXG4gICAgICAgIGluZGljZXMucHVzaCh2ZXJ0UG9zLCB2ZXJ0UG9zLCB2ZXJ0UG9zKzEsIHZlcnRQb3MrMiwgdmVydFBvcyszLCB2ZXJ0UG9zKzMpO1xuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSBbeCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHkgKyBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICB4LCB5XTtcblxuXG4gICAgICAgIGJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJlY3RhbmdsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG4vKipcbiAqIEJ1aWxkcyBhIHJvdW5kZWQgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG5idWlsZFJvdW5kZWRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIHJyZWN0RGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IHJyZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcnJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcnJlY3REYXRhLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSBycmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgdmFyIHJhZGl1cyA9IHJyZWN0RGF0YS5yYWRpdXM7XG5cbiAgICB2YXIgcmVjUG9pbnRzID0gW107XG4gICAgcmVjUG9pbnRzLnB1c2goeCwgeSArIHJhZGl1cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4LCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCB4LCB5ICsgaGVpZ2h0LCB4ICsgcmFkaXVzLCB5ICsgaGVpZ2h0LCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoIC0gcmFkaXVzLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCAtIHJhZGl1cywgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyB3aWR0aCwgeSArIHJhZGl1cywgeCArIHdpZHRoLCB5LCB4ICsgd2lkdGggLSByYWRpdXMsIHksIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgcmFkaXVzLCB5LCB4LCB5LCB4LCB5ICsgcmFkaXVzICsgMC4wMDAwMDAwMDAxLCByZWNQb2ludHMpO1xuXG4gICAgLy8gdGhpcyB0aW55IG51bWJlciBkZWFscyB3aXRoIHRoZSBpc3N1ZSB0aGF0IG9jY3VycyB3aGVuIHBvaW50cyBvdmVybGFwIGFuZCBlYXJjdXQgZmFpbHMgdG8gdHJpYW5ndWxhdGUgdGhlIGl0ZW0uXG4gICAgLy8gVE9ETyAtIGZpeCB0aGlzIHByb3Blcmx5LCB0aGlzIGlzIG5vdCB2ZXJ5IGVsZWdhbnQuLiBidXQgaXQgd29ya3MgZm9yIG5vdy5cblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICB2YXIgdHJpYW5nbGVzID0gZWFyY3V0KHJlY1BvaW50cywgbnVsbCwgMik7XG5cbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICAgICAge1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVjUG9zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZWNQb2ludHMubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gocmVjUG9pbnRzW2ldLCByZWNQb2ludHNbKytpXSwgciwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHJlY1BvaW50cztcblxuICAgICAgICB0aGlzLmJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlLiAoaGVscGVyIGZ1bmN0aW9uLi4pXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBmcm9tWCB7bnVtYmVyfSBPcmlnaW4gcG9pbnQgeFxuICogQHBhcmFtIGZyb21ZIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcGFyYW0gW291dF0ge251bWJlcltdfSBUaGUgb3V0cHV0IGFycmF5IHRvIGFkZCBwb2ludHMgaW50by4gSWYgbm90IHBhc3NlZCwgYSBuZXcgYXJyYXkgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm4ge251bWJlcltdfSBhbiBhcnJheSBvZiBwb2ludHNcbiAqL1xucXVhZHJhdGljQmV6aWVyQ3VydmUgPSBmdW5jdGlvbiAoZnJvbVgsIGZyb21ZLCBjcFgsIGNwWSwgdG9YLCB0b1ksIG91dClcbntcbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICB4YixcbiAgICAgICAgeWIsXG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gb3V0IHx8IFtdO1xuXG4gICAgZnVuY3Rpb24gZ2V0UHQobjEgLCBuMiwgcGVyYykge1xuICAgICAgICB2YXIgZGlmZiA9IG4yIC0gbjE7XG5cbiAgICAgICAgcmV0dXJuIG4xICsgKCBkaWZmICogcGVyYyApO1xuICAgIH1cblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBuOyBpKysgKSB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICAvLyBUaGUgR3JlZW4gTGluZVxuICAgICAgICB4YSA9IGdldFB0KCBmcm9tWCAsIGNwWCAsIGogKTtcbiAgICAgICAgeWEgPSBnZXRQdCggZnJvbVkgLCBjcFkgLCBqICk7XG4gICAgICAgIHhiID0gZ2V0UHQoIGNwWCAsIHRvWCAsIGogKTtcbiAgICAgICAgeWIgPSBnZXRQdCggY3BZICwgdG9ZICwgaiApO1xuXG4gICAgICAgIC8vIFRoZSBCbGFjayBEb3RcbiAgICAgICAgeCA9IGdldFB0KCB4YSAsIHhiICwgaiApO1xuICAgICAgICB5ID0gZ2V0UHQoIHlhICwgeWIgLCBqICk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goeCwgeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50cztcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJvdW5kZWRSZWN0YW5nbGU7IiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgY29yZSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWElcbiAqL1xuLy8gZXhwb3J0IGNvcmUgYW5kIGNvbnN0LiBXZSBhc3NpZ24gY29yZSB0byBjb25zdCBzbyB0aGF0IHRoZSBub24tcmVmZXJlbmNlIHR5cGVzIGluIGNvbnN0IHJlbWFpbiBpbi10YWN0XG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihyZXF1aXJlKCcuL2NvbnN0JyksIHJlcXVpcmUoJy4vbWF0aCcpLCB7XG4gICAgLy8gdXRpbHNcbiAgICB1dGlsczogcmVxdWlyZSgnLi91dGlscycpLFxuICAgIHRpY2tlcjogcmVxdWlyZSgnLi90aWNrZXInKSxcblxuICAgIC8vIGRpc3BsYXlcbiAgICBEaXNwbGF5T2JqZWN0OiAgICAgICAgICByZXF1aXJlKCcuL2Rpc3BsYXkvRGlzcGxheU9iamVjdCcpLFxuICAgIENvbnRhaW5lcjogICAgICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9Db250YWluZXInKSxcblxuICAgIC8vIHNwcml0ZXNcbiAgICBTcHJpdGU6ICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgUGFydGljbGVDb250YWluZXI6ICAgICAgcmVxdWlyZSgnLi9wYXJ0aWNsZXMvUGFydGljbGVDb250YWluZXInKSxcbiAgICBTcHJpdGVSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXInKSxcbiAgICBQYXJ0aWNsZVJlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyJyksXG5cbiAgICAvLyB0ZXh0XG4gICAgVGV4dDogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0L1RleHQnKSxcblxuICAgIC8vIHByaW1pdGl2ZXNcbiAgICBHcmFwaGljczogICAgICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzJyksXG4gICAgR3JhcGhpY3NEYXRhOiAgICAgICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljc0RhdGEnKSxcbiAgICBHcmFwaGljc1JlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHR1cmVzXG4gICAgVGV4dHVyZTogICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQmFzZVRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlVGV4dHVyZScpLFxuICAgIFJlbmRlclRleHR1cmU6ICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEJhc2VSZW5kZXJUZXh0dXJlOiAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlOiAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzOiAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmVVdnMnKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIGNhbnZhc1xuICAgIENhbnZhc1JlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIENhbnZhc0J1ZmZlcjogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIHdlYmdsXG4gICAgV2ViR0xSZW5kZXJlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyksXG4gICAgU2hhZGVyTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIFNoYWRlcjogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyJyksXG4gICAgT2JqZWN0UmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBSZW5kZXJUYXJnZXQ6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcblxuICAgIC8vIGZpbHRlcnMgLSB3ZWJnbFxuICAgIEFic3RyYWN0RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBGWEFBRmlsdGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBTcHJpdGVNYXNrRmlsdGVyOiAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKSxcblxuICAgIGdsQ29yZTogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncGl4aS1nbC1jb3JlJyksXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoaWNoIHJlbmRlcmVyIHlvdSBzaG91bGQgYmUgdXNpbmcuXG4gICAgICogV2ViR0wgaXMgdGhlIHByZWZlcnJlZCByZW5kZXJlciBhcyBpdCBpcyBhIGxvdCBmYXN0ZXIuIElmIHdlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnlcbiAgICAgKiB0aGUgYnJvd3NlciB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBjYW52YXMgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHBhcmFtIHdpZHRoPTgwMCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIGhlaWdodD02MDAge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWYgeW91XG4gICAgICogICAgICBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0XG4gICAgICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyLCByZXRpbmEgd291bGQgYmUgMlxuICAgICAqIEBwYXJhbSBbbm9XZWJHTD1mYWxzZV0ge2Jvb2xlYW59IHByZXZlbnRzIHNlbGVjdGlvbiBvZiBXZWJHTCByZW5kZXJlciwgZXZlbiBpZiBzdWNoIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyZXJ8Q2FudmFzUmVuZGVyZXJ9IFJldHVybnMgV2ViR0wgcmVuZGVyZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgQ2FudmFzUmVuZGVyZXJcbiAgICAgKi9cbiAgICBhdXRvRGV0ZWN0UmVuZGVyZXI6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCBub1dlYkdMKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB3aWR0aCB8fCA4MDA7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAgICAgaWYgKCFub1dlYkdMICYmIGNvcmUudXRpbHMuaXNXZWJHTFN1cHBvcnRlZCgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGNvcmUuV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgY29yZS5DYW52YXNSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB9XG59KTtcbiIsIi8vIEB0b2RvIC0gaWdub3JlIHRoZSB0b28gbWFueSBwYXJhbWV0ZXJzIHdhcm5pbmcgZm9yIG5vd1xuLy8gc2hvdWxkIGVpdGhlciBmaXggaXQgb3IgY2hhbmdlIHRoZSBqc2hpbnQgY29uZmlnXG4vLyBqc2hpbnQgLVcwNzJcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xuXG4vKipcbiAqIFRoZSBwaXhpIE1hdHJpeCBjbGFzcyBhcyBhbiBvYmplY3QsIHdoaWNoIG1ha2VzIGl0IGEgbG90IGZhc3RlcixcbiAqIGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBpdCA6XG4gKiB8IGEgfCBiIHwgdHh8XG4gKiB8IGMgfCBkIHwgdHl8XG4gKiB8IDAgfCAwIHwgMSB8XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBNYXRyaXgoKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5iID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5jID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHkgPSAwO1xufVxuXG5NYXRyaXgucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWF0cml4O1xubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1hdHJpeCBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5LiBUaGUgRWxlbWVudCB0byBNYXRyaXggbWFwcGluZyBvcmRlciBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIGEgPSBhcnJheVswXVxuICogYiA9IGFycmF5WzFdXG4gKiBjID0gYXJyYXlbM11cbiAqIGQgPSBhcnJheVs0XVxuICogdHggPSBhcnJheVsyXVxuICogdHkgPSBhcnJheVs1XVxuICpcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119IFRoZSBhcnJheSB0aGF0IHRoZSBtYXRyaXggd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbS5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpXG57XG4gICAgdGhpcy5hID0gYXJyYXlbMF07XG4gICAgdGhpcy5iID0gYXJyYXlbMV07XG4gICAgdGhpcy5jID0gYXJyYXlbM107XG4gICAgdGhpcy5kID0gYXJyYXlbNF07XG4gICAgdGhpcy50eCA9IGFycmF5WzJdO1xuICAgIHRoaXMudHkgPSBhcnJheVs1XTtcbn07XG5cblxuLyoqXG4gKiBzZXRzIHRoZSBtYXRyaXggcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkXG4gKiBAcGFyYW0ge251bWJlcn0gdHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXG57XG4gICAgdGhpcy5hID0gYTtcbiAgICB0aGlzLmIgPSBiO1xuICAgIHRoaXMuYyA9IGM7XG4gICAgdGhpcy5kID0gZDtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy50eSA9IHR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmcm9tIHRoZSBjdXJyZW50IE1hdHJpeCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9zZSB7Ym9vbGVhbn0gV2hldGhlciB3ZSBuZWVkIHRvIHRyYW5zcG9zZSB0aGUgbWF0cml4IG9yIG5vdFxuICogQHBhcmFtIFtvdXRdIHtBcnJheX0gSWYgcHJvdmlkZWQgdGhlIGFycmF5IHdpbGwgYmUgYXNzaWduZWQgdG8gb3V0XG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gdGhlIG5ld2x5IGNyZWF0ZWQgYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAodHJhbnNwb3NlLCBvdXQpXG57XG4gICAgaWYgKCF0aGlzLmFycmF5KVxuICAgIHtcbiAgICAgICAgdGhpcy5hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gb3V0IHx8IHRoaXMuYXJyYXk7XG5cbiAgICBpZiAodHJhbnNwb3NlKVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVsyXSA9IDA7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSAwO1xuICAgICAgICBhcnJheVs2XSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzddID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzJdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzZdID0gMDtcbiAgICAgICAgYXJyYXlbN10gPSAwO1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZSB0byB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gcmVuZGVyaW5nKVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5hICogeCArIHRoaXMuYyAqIHkgKyB0aGlzLnR4O1xuICAgIG5ld1Bvcy55ID0gdGhpcy5iICogeCArIHRoaXMuZCAqIHkgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGludmVyc2Ugb2YgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UgdG8gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIGlucHV0KVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHlJbnZlcnNlID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciBpZCA9IDEgLyAodGhpcy5hICogdGhpcy5kICsgdGhpcy5jICogLXRoaXMuYik7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuZCAqIGlkICogeCArIC10aGlzLmMgKiBpZCAqIHkgKyAodGhpcy50eSAqIHRoaXMuYyAtIHRoaXMudHggKiB0aGlzLmQpICogaWQ7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmEgKiBpZCAqIHkgKyAtdGhpcy5iICogaWQgKiB4ICsgKC10aGlzLnR5ICogdGhpcy5hICsgdGhpcy50eCAqIHRoaXMuYikgKiBpZDtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdHJpeCBvbiB0aGUgeCBhbmQgeS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMudHggKz0geDtcbiAgICB0aGlzLnR5ICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIHNjYWxlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIGFtb3VudCB0byBzY2FsZSBob3Jpem9udGFsbHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSBhbW91bnQgdG8gc2NhbGUgdmVydGljYWxseVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2NhbGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmEgKj0geDtcbiAgICB0aGlzLmQgKj0geTtcbiAgICB0aGlzLmMgKj0geDtcbiAgICB0aGlzLmIgKj0geTtcbiAgICB0aGlzLnR4ICo9IHg7XG4gICAgdGhpcy50eSAqPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyBhIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpXG57XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKCBhbmdsZSApO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbiggYW5nbGUgKTtcblxuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICB0aGlzLmEgPSBhMSAqIGNvcy10aGlzLmIgKiBzaW47XG4gICAgdGhpcy5iID0gYTEgKiBzaW4rdGhpcy5iICogY29zO1xuICAgIHRoaXMuYyA9IGMxICogY29zLXRoaXMuZCAqIHNpbjtcbiAgICB0aGlzLmQgPSBjMSAqIHNpbit0aGlzLmQgKiBjb3M7XG4gICAgdGhpcy50eCA9IHR4MSAqIGNvcyAtIHRoaXMudHkgKiBzaW47XG4gICAgdGhpcy50eSA9IHR4MSAqIHNpbiArIHRoaXMudHkgKiBjb3M7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG5cbiAgICB0aGlzLmEgID0gbWF0cml4LmEgKiBhMSArIG1hdHJpeC5iICogYzE7XG4gICAgdGhpcy5iICA9IG1hdHJpeC5hICogYjEgKyBtYXRyaXguYiAqIGQxO1xuICAgIHRoaXMuYyAgPSBtYXRyaXguYyAqIGExICsgbWF0cml4LmQgKiBjMTtcbiAgICB0aGlzLmQgID0gbWF0cml4LmMgKiBiMSArIG1hdHJpeC5kICogZDE7XG5cbiAgICB0aGlzLnR4ID0gbWF0cml4LnR4ICogYTEgKyBtYXRyaXgudHkgKiBjMSArIHRoaXMudHg7XG4gICAgdGhpcy50eSA9IG1hdHJpeC50eCAqIGIxICsgbWF0cml4LnR5ICogZDEgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1hdHJpeCBiYXNlZCBvbiBhbGwgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RYXG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RZXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXG4gKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WFxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdZXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKHgsIHksIHBpdm90WCwgcGl2b3RZLCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSlcbntcbiAgICB2YXIgYSwgYiwgYywgZCwgc3IsIGNyLCBjeSwgc3ksIG5zeCwgY3g7XG5cbiAgICBzciAgPSBNYXRoLnNpbihyb3RhdGlvbik7XG4gICAgY3IgID0gTWF0aC5jb3Mocm90YXRpb24pO1xuICAgIGN5ICA9IE1hdGguY29zKHNrZXdZKTtcbiAgICBzeSAgPSBNYXRoLnNpbihza2V3WSk7XG4gICAgbnN4ID0gLU1hdGguc2luKHNrZXdYKTtcbiAgICBjeCAgPSAgTWF0aC5jb3Moc2tld1gpO1xuXG4gICAgYSAgPSAgY3IgKiBzY2FsZVg7XG4gICAgYiAgPSAgc3IgKiBzY2FsZVg7XG4gICAgYyAgPSAtc3IgKiBzY2FsZVk7XG4gICAgZCAgPSAgY3IgKiBzY2FsZVk7XG5cbiAgICB0aGlzLmEgID0gY3kgKiBhICsgc3kgKiBjO1xuICAgIHRoaXMuYiAgPSBjeSAqIGIgKyBzeSAqIGQ7XG4gICAgdGhpcy5jICA9IG5zeCAqIGEgKyBjeCAqIGM7XG4gICAgdGhpcy5kICA9IG5zeCAqIGIgKyBjeCAqIGQ7XG5cbiAgICB0aGlzLnR4ID0geCArICggcGl2b3RYICogYSArIHBpdm90WSAqIGMgKTtcbiAgICB0aGlzLnR5ID0geSArICggcGl2b3RYICogYiArIHBpdm90WSAqIGQgKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQcmVwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uKG1hdHJpeClcbntcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIGlmIChtYXRyaXguYSAhPT0gMSB8fCBtYXRyaXguYiAhPT0gMCB8fCBtYXRyaXguYyAhPT0gMCB8fCBtYXRyaXguZCAhPT0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICAgICAgdmFyIGMxID0gdGhpcy5jO1xuICAgICAgICB0aGlzLmEgID0gYTEqbWF0cml4LmErdGhpcy5iKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmIgID0gYTEqbWF0cml4LmIrdGhpcy5iKm1hdHJpeC5kO1xuICAgICAgICB0aGlzLmMgID0gYzEqbWF0cml4LmErdGhpcy5kKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmQgID0gYzEqbWF0cml4LmIrdGhpcy5kKm1hdHJpeC5kO1xuICAgIH1cblxuICAgIHRoaXMudHggPSB0eDEqbWF0cml4LmErdGhpcy50eSptYXRyaXguYyttYXRyaXgudHg7XG4gICAgdGhpcy50eSA9IHR4MSptYXRyaXguYit0aGlzLnR5Km1hdHJpeC5kK21hdHJpeC50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0ID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcbiAgICB2YXIgbiA9IGExKmQxLWIxKmMxO1xuXG4gICAgdGhpcy5hID0gZDEvbjtcbiAgICB0aGlzLmIgPSAtYjEvbjtcbiAgICB0aGlzLmMgPSAtYzEvbjtcbiAgICB0aGlzLmQgPSBhMS9uO1xuICAgIHRoaXMudHggPSAoYzEqdGhpcy50eS1kMSp0eDEpL247XG4gICAgdGhpcy50eSA9IC0oYTEqdGhpcy50eS1iMSp0eDEpL247XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBSZXNldHMgdGhpcyBNYXRpeCB0byBhbiBpZGVudGl0eSAoZGVmYXVsdCkgbWF0cml4LlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmlkZW50aXR5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmEgPSAxO1xuICAgIHRoaXMuYiA9IDA7XG4gICAgdGhpcy5jID0gMDtcbiAgICB0aGlzLmQgPSAxO1xuICAgIHRoaXMudHggPSAwO1xuICAgIHRoaXMudHkgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgTWF0cml4IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gQSBjb3B5IG9mIHRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgdmFsdWVzIG9mIHRoZSBnaXZlbiBtYXRyaXggdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZXMgaW4gdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhlIG1hdHJpeCBnaXZlbiBpbiBwYXJhbWV0ZXIgd2l0aCBpdHMgdmFsdWVzIHVwZGF0ZWQuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQSBkZWZhdWx0IChpZGVudGl0eSkgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5JREVOVElUWSA9IG5ldyBNYXRyaXgoKTtcblxuLyoqXG4gKiBBIHRlbXAgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5URU1QX01BVFJJWCA9IG5ldyBNYXRyaXgoKTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcbn1cblxuUG9pbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvaW50XG4gKlxuICogQHJldHVybiB7UElYSS5Qb2ludH0gYSBjb3B5IG9mIHRoZSBwb2ludFxuICovXG5Qb2ludC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBDb3BpZXMgeCBhbmQgeSBmcm9tIHRoZSBnaXZlbiBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICovXG5Qb2ludC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgdGhpcy5zZXQocC54LCBwLnkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGVxdWFsIHRvIHRoaXMgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gKHAueCA9PT0gdGhpcy54KSAmJiAocC55ID09PSB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5Qb2ludC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy54ID0geCB8fCAwO1xuICAgIHRoaXMueSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLnggOiAwICkgO1xufTtcbiIsIi8qKlxuICogTWF0aCBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgbWl4ZWQgaW50byBQSVhJIG5hbWVzcGFjZS5cbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBUaGVzZSB3aWxsIGJlIG1peGVkIHRvIGJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLFxuICAgIC8vIHdoaWxlIHRoaXMgbW9kdWxlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBjb3JlXG4gICAgLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBjdXQgZG93biBvblxuICAgIC8vIGludGVybmFsIG1vZHVsZSByZXF1aXJlcy5cblxuICAgIFBvaW50OiAgICAgIHJlcXVpcmUoJy4vUG9pbnQnKSxcbiAgICBNYXRyaXg6ICAgICByZXF1aXJlKCcuL01hdHJpeCcpLFxuXG4gICAgQ2lyY2xlOiAgICAgcmVxdWlyZSgnLi9zaGFwZXMvQ2lyY2xlJyksXG4gICAgRWxsaXBzZTogICAgcmVxdWlyZSgnLi9zaGFwZXMvRWxsaXBzZScpLFxuICAgIFBvbHlnb246ICAgIHJlcXVpcmUoJy4vc2hhcGVzL1BvbHlnb24nKSxcbiAgICBSZWN0YW5nbGU6ICByZXF1aXJlKCcuL3NoYXBlcy9SZWN0YW5nbGUnKSxcbiAgICBSb3VuZGVkUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlJylcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIENpcmNsZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICovXG5mdW5jdGlvbiBDaXJjbGUoeCwgeSwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkNJUkM7XG59XG5cbkNpcmNsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaXJjbGU7XG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBDaXJjbGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkNpcmNsZX0gYSBjb3B5IG9mIHRoZSBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBDaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBjaXJjbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmFkaXVzIDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGR4ID0gKHRoaXMueCAtIHgpLFxuICAgICAgICBkeSA9ICh0aGlzLnkgLSB5KSxcbiAgICAgICAgcjIgPSB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzO1xuXG4gICAgZHggKj0gZHg7XG4gICAgZHkgKj0gZHk7XG5cbiAgICByZXR1cm4gKGR4ICsgZHkgPD0gcjIpO1xufTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBjaXJjbGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4qIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiovXG5DaXJjbGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy5yYWRpdXMsIHRoaXMueSAtIHRoaXMucmFkaXVzLCB0aGlzLnJhZGl1cyAqIDIsIHRoaXMucmFkaXVzICogMik7XG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBFbGxpcHNlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGlzIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZVxuICovXG5mdW5jdGlvbiBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkVMSVA7XG59XG5cbkVsbGlwc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRWxsaXBzZTtcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBFbGxpcHNlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5FbGxpcHNlfSBhIGNvcHkgb2YgdGhlIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgRWxsaXBzZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRzIGFyZSB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vbm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDBcbiAgICB2YXIgbm9ybXggPSAoKHggLSB0aGlzLngpIC8gdGhpcy53aWR0aCksXG4gICAgICAgIG5vcm15ID0gKCh5IC0gdGhpcy55KSAvIHRoaXMuaGVpZ2h0KTtcblxuICAgIG5vcm14ICo9IG5vcm14O1xuICAgIG5vcm15ICo9IG5vcm15O1xuXG4gICAgcmV0dXJuIChub3JteCArIG5vcm15IDw9IDEpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgZWxsaXBzZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy53aWR0aCwgdGhpcy55IC0gdGhpcy5oZWlnaHQsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG4iLCJ2YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9Qb2ludCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcG9pbnRzIHtQSVhJLlBvaW50W118bnVtYmVyW118Li4uUElYSS5Qb2ludHwuLi5udW1iZXJ9IFRoaXMgY2FuIGJlIGFuIGFycmF5IG9mIFBvaW50cyB0aGF0IGZvcm0gdGhlIHBvbHlnb24sXG4gKiAgICAgIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIHRoYXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBbeCx5LCB4LHksIC4uLl0sIG9yIHRoZSBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZVxuICogICAgICBhbGwgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvbiBlLmcuIGBuZXcgUElYSS5Qb2x5Z29uKG5ldyBQSVhJLlBvaW50KCksIG5ldyBQSVhJLlBvaW50KCksIC4uLilgLCBvciB0aGVcbiAqICAgICAgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmUgZmxhdCB4LHkgdmFsdWVzIGUuZy4gYG5ldyBQb2x5Z29uKHgseSwgeCx5LCB4LHksIC4uLilgIHdoZXJlIGB4YCBhbmQgYHlgIGFyZVxuICogICAgICBOdW1iZXJzLlxuICovXG5mdW5jdGlvbiBQb2x5Z29uKHBvaW50c18pXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBvaW50c187XG5cbiAgICAvL2lmIHBvaW50cyBpc24ndCBhbiBhcnJheSwgdXNlIGFyZ3VtZW50cyBhcyB0aGUgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgcG9pbnRzLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICBwb2ludHNbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IG9mIHBvaW50cywgY29udmVydCBpdCB0byBhIGZsYXQgYXJyYXkgb2YgbnVtYmVyc1xuICAgIGlmIChwb2ludHNbMF0gaW5zdGFuY2VvZiBQb2ludClcbiAgICB7XG4gICAgICAgIHZhciBwID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBwLnB1c2gocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50cyA9IHA7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5QT0xZO1xufVxuXG5Qb2x5Z29uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvbHlnb247XG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9seWdvblxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9seWdvbn0gYSBjb3B5IG9mIHRoZSBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvbHlnb24odGhpcy5wb2ludHMuc2xpY2UoKSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcG9seWdvblxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBpbnNpZGUgPSBmYWxzZTtcblxuICAgIC8vIHVzZSBzb21lIHJheWNhc3RpbmcgdG8gdGVzdCBoaXRzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL3BvaW50LWluLXBvbHlnb24vYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5wb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbGVuZ3RoIC0gMTsgaSA8IGxlbmd0aDsgaiA9IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB4aSA9IHRoaXMucG9pbnRzW2kgKiAyXSwgeWkgPSB0aGlzLnBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgeGogPSB0aGlzLnBvaW50c1tqICogMl0sIHlqID0gdGhpcy5wb2ludHNbaiAqIDIgKyAxXSxcbiAgICAgICAgICAgIGludGVyc2VjdCA9ICgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICh4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aSk7XG5cbiAgICAgICAgaWYgKGludGVyc2VjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiB0aGUgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcmVjdGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SRUNUO1xufVxuXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XG5cbi8qKlxuICogQSBjb25zdGFudCBlbXB0eSByZWN0YW5nbGUuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblJlY3RhbmdsZS5FTVBUWSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDwgdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDwgdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFJvdW5kZWQgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIHRoYXQgaGFzIG5pY2Ugcm91bmRlZCBjb3JuZXJzLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodCBhbmQgaXRzIHJhZGl1cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gQ29udHJvbHMgdGhlIHJhZGl1cyBvZiB0aGUgcm91bmRlZCBjb3JuZXJzXG4gKi9cbmZ1bmN0aW9uIFJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJSRUM7XG59XG5cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm91bmRlZFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUm91bmRlZFJlY3RhbmdsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUm91bmRlZFJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSb3VuZGVkUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8PSB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUGFydGljbGVDb250YWluZXIgY2xhc3MgaXMgYSByZWFsbHkgZmFzdCB2ZXJzaW9uIG9mIHRoZSBDb250YWluZXIgYnVpbHQgc29sZWx5IGZvciBzcGVlZCxcbiAqIHNvIHVzZSB3aGVuIHlvdSBuZWVkIGEgbG90IG9mIHNwcml0ZXMgb3IgcGFydGljbGVzLiBUaGUgdHJhZGVvZmYgb2YgdGhlIFBhcnRpY2xlQ29udGFpbmVyIGlzIHRoYXQgYWR2YW5jZWRcbiAqIGZ1bmN0aW9uYWxpdHkgd2lsbCBub3Qgd29yay4gUGFydGljbGVDb250YWluZXIgaW1wbGVtZW50cyBvbmx5IHRoZSBiYXNpYyBvYmplY3QgdHJhbnNmb3JtIChwb3NpdGlvbiwgc2NhbGUsIHJvdGF0aW9uKS5cbiAqIEFueSBvdGhlciBmdW5jdGlvbmFsaXR5IGxpa2UgdGludGluZywgbWFza2luZywgZXRjIHdpbGwgbm90IHdvcmsgb24gc3ByaXRlcyBpbiB0aGlzIGJhdGNoLlxuICpcbiAqIEl0J3MgZXh0cmVtZWx5IGVhc3kgdG8gdXNlIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQYXJ0aWNsZUNvbnRhaW5lcigpO1xuICpcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpXG4gKiB7XG4gKiAgICAgdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJteUltYWdlLnBuZ1wiKTtcbiAqICAgICBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEFuZCBoZXJlIHlvdSBoYXZlIGEgaHVuZHJlZCBzcHJpdGVzIHRoYXQgd2lsbCBiZSByZW5kZXJlciBhdCB0aGUgc3BlZWQgb2YgbGlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbbWF4U2l6ZT0xNTAwMF0ge251bWJlcn0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGF0IGNhbiBiZSByZW5kZXJlciBieSB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzXSB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyBvZiBjaGlsZHJlbiB0aGF0IHNob3VsZCBiZSB1cGxvYWRlZCB0byB0aGUgZ3B1IGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnNjYWxlPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBzY2FsZSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5wb3NpdGlvbj10cnVlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBwb3NpdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5yb3RhdGlvbj1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcm90YXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMudXZzPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCB1dnMgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuYWxwaGE9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIGFscGhhIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtiYXRjaFNpemU9MTUwMDBdIHtudW1iZXJ9IE51bWJlciBvZiBwYXJ0aWNsZXMgcGVyIGJhdGNoLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUNvbnRhaW5lcihtYXhTaXplLCBwcm9wZXJ0aWVzLCBiYXRjaFNpemUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBiYXRjaFNpemUgPSBiYXRjaFNpemUgfHwgMTUwMDA7IC8vQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG4gICAgbWF4U2l6ZSA9IG1heFNpemUgfHwgMTUwMDA7XG5cbiAgICAvLyBNYWtpbmcgc3VyZSB0aGUgYmF0Y2ggc2l6ZSBpcyB2YWxpZFxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICB2YXIgbWF4QmF0Y2hTaXplID0gMTYzODQ7XG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhCYXRjaFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgcHJvcGVydGllcyB0byBiZSBkeW5hbWljICh0cnVlKSAvIHN0YXRpYyAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFuW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmF0Y2hTaXplID0gYmF0Y2hTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICpcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlQ2hpbGRyZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBjYW52YXMgcmVuZGVyZXJpbmcuIElmIHRydWUgdGhlbiB0aGUgZWxlbWVudHMgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBuZWFyZXN0IHBpeGVsLiBUaGlzIHByb3ZpZGVzIGEgbmljZSBzcGVlZCBib29zdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZTtcbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbn1cblxuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBwcml2YXRlIHByb3BlcnRpZXMgYXJyYXkgdG8gZHluYW1pYyAvIHN0YXRpYyBiYXNlZCBvbiB0aGUgcGFzc2VkIHByb3BlcnRpZXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMge29iamVjdH0gVGhlIHByb3BlcnRpZXMgdG8gYmUgdXBsb2FkZWRcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnNldFByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKVxue1xuICAgIGlmICggcHJvcGVydGllcyApIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1swXSA9ICdzY2FsZScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5zY2FsZSA6IHRoaXMuX3Byb3BlcnRpZXNbMF07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMV0gPSAncG9zaXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucG9zaXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzFdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzJdID0gJ3JvdGF0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnJvdGF0aW9uIDogdGhpcy5fcHJvcGVydGllc1syXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1szXSA9ICd1dnMnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMudXZzIDogdGhpcy5fcHJvcGVydGllc1szXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1s0XSA9ICdhbHBoYScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5hbHBoYSA6IHRoaXMuX3Byb3BlcnRpZXNbNF07XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcblxuICAgIC8vIFRPRE8gZG9uJ3QgbmVlZCB0byFcbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAvLyAgUElYSS5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybS5jYWxsKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRhaW5lciB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHdlYmdsIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIoIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUgKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlLnJlbmRlciggdGhpcyApO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGZsYWcgdGhhdCBzdGF0aWMgZGF0YSBzaG91bGQgYmUgdXBkYXRlZCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoc21hbGxlc3RDaGlsZEluZGV4KVxue1xuICAgIHZhciBidWZmZXJJbmRleCA9IE1hdGguZmxvb3Ioc21hbGxlc3RDaGlsZEluZGV4IC8gdGhpcy5fYmF0Y2hTaXplKTtcbiAgICBpZiAoYnVmZmVySW5kZXggPCB0aGlzLl9idWZmZXJUb1VwZGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IGJ1ZmZlckluZGV4O1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciBpc1JvdGF0ZWQgPSB0cnVlO1xuXG4gICAgdmFyIHBvc2l0aW9uWCA9IDA7XG4gICAgdmFyIHBvc2l0aW9uWSA9IDA7XG5cbiAgICB2YXIgZmluYWxXaWR0aCA9IDA7XG4gICAgdmFyIGZpbmFsSGVpZ2h0ID0gMDtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZSA9IGNoaWxkLnRleHR1cmUuZnJhbWU7XG5cbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYSAqIGNoaWxkLmFscGhhO1xuXG4gICAgICAgIGlmIChjaGlsZC5yb3RhdGlvbiAlIChNYXRoLlBJICogMikgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZhc3Rlc3QgIHdheSB0byBvcHRpbWlzZSEgLSBpZiByb3RhdGlvbiBpcyAwIHRoZW4gd2UgY2FuIGF2b2lkIGFueSBraW5kIG9mIHNldFRyYW5zZm9ybSBjYWxsXG4gICAgICAgICAgICBpZiAoaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLngpICsgY2hpbGQucG9zaXRpb24ueCAgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnkpICsgY2hpbGQucG9zaXRpb24ueSAgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54O1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55O1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZC5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZFRyYW5zZm9ybSA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHkgfCAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoKSArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0KSArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICBjaGlsZC50ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgIGZyYW1lLngsXG4gICAgICAgICAgICBmcmFtZS55LFxuICAgICAgICAgICAgZnJhbWUud2lkdGgsXG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQsXG4gICAgICAgICAgICBwb3NpdGlvblgsXG4gICAgICAgICAgICBwb3NpdGlvblksXG4gICAgICAgICAgICBmaW5hbFdpZHRoLFxuICAgICAgICAgICAgZmluYWxIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIGlmICh0aGlzLl9idWZmZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcbn07XG4iLCJcbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVCdWZmZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlQnVmZmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFRoZSBwYXJ0aWNsZSBidWZmZXIgbWFuYWdlcyB0aGUgc3RhdGljIGFuZCBkeW5hbWljIGJ1ZmZlcnMgZm9yIGEgcGFydGljbGUgY29udGFpbmVyLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQnVmZmVyKGdsLCBwcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgc2l6ZSlcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleCBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhlIGJ1ZmZlciBjYW4gaG9sZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgZHluYW1pYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBzdGF0aWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgaWYoZHluYW1pY1Byb3BlcnR5RmxhZ3NbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRCdWZmZXJzKCk7XG5cbn1cblxuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQnVmZmVyO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5pbml0QnVmZmVycyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcHJvcGVydHk7XG5cbiAgICB2YXIgZHluYW1pY09mZnNldCA9IDA7XG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IGR5bmFtaWNPZmZzZXQ7XG4gICAgICAgIGR5bmFtaWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5keW5hbWljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG5cblxuICAgIC8vIHN0YXRpYyAvL1xuICAgIHZhciBzdGF0aWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBzdGF0aWNPZmZzZXQ7XG4gICAgICAgIHN0YXRpY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLnN0YXRpY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuc3RhdGljU3RyaWRlICogNCk7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZHluYW1pYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZER5bmFtaWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLmR5bmFtaWNEYXRhLCB0aGlzLmR5bmFtaWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuZHluYW1pY0RhdGEpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBzdGF0aWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWRTdGF0aWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5zdGF0aWNEYXRhLCB0aGlzLnN0YXRpY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLnN0YXRpY0RhdGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyB0byB0aGUgR1BVXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaSwgcHJvcGVydHk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnN0YXRpY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlQnVmZmVyLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5zdGF0aWNCdWZmZXIpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlU2hhZGVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZVNoYWRlcicpLFxuICAgIFBhcnRpY2xlQnVmZmVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUJ1ZmZlcicpLFxuICAgIG1hdGggICAgICAgICAgICA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgLy8gYW5kIG1heCBudW1iZXIgb2YgZWxlbWVudCBpbiB0aGUgaW5kZXggYnVmZmVyIGlzIDE2Mzg0ICogNiA9IDk4MzA0XG4gICAgLy8gQ3JlYXRpbmcgYSBmdWxsIGluZGV4IGJ1ZmZlciwgb3ZlcmhlYWQgaXMgOTgzMDQgKiAyID0gMTk2S29cbiAgICB2YXIgbnVtSW5kaWNlcyA9IDk4MzA0O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShudW1JbmRpY2VzKTtcblxuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgbnVtSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IG51bGw7XG5cbiAgICB0aGlzLnRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcbn1cblxuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3BhcnRpY2xlJywgUGFydGljbGVSZW5kZXJlcik7XG5cbi8qKlxuICogV2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IG5ldyBQYXJ0aWNsZVNoYWRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIpO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IGluZGV4LCBzbyA2NTUzNSAvIDYgPSAxMDkyMi5cblxuICAgIC8vdXBsb2FkIHRoZSBpbmRleCBkYXRhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBbXG4gICAgICAgIC8vIHZlcnRpY2VzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFZlcnRpY2VzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcG9zaXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbkNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRQb3NpdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJvdGF0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUm90YXRpb24sXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFJvdGF0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdXZzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRVdnMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBhbHBoYURhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRBbHBoYSxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgcGFydGljbGUgYmF0Y2guXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGJpbmQgdGhlIG1haW4gdGV4dHVyZVxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgLy8gYmluZCB0aGUgYnVmZmVyc1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgcGFydGljbGUgY29udGFpbmVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgY2hpbGRyZW4gPSBjb250YWluZXIuY2hpbGRyZW4sXG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIG1heFNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplO1xuXG4gICAgaWYodG90YWxDaGlsZHJlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZih0b3RhbENoaWxkcmVuID4gbWF4U2l6ZSlcbiAgICB7XG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBtYXhTaXplO1xuICAgIH1cblxuICAgIGlmKCFjb250YWluZXIuX2J1ZmZlcnMpXG4gICAge1xuICAgICAgICBjb250YWluZXIuX2J1ZmZlcnMgPSB0aGlzLmdlbmVyYXRlQnVmZmVycyggY29udGFpbmVyICk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29udGFpbmVyLmJsZW5kTW9kZSk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIG0gPSAgY29udGFpbmVyLndvcmxkVHJhbnNmb3JtLmNvcHkoIHRoaXMudGVtcE1hdHJpeCApO1xuICAgIG0ucHJlcGVuZCggdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXggKTtcbiAgICBnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgbS50b0FycmF5KHRydWUpKTtcbiAgICBnbC51bmlmb3JtMWYodGhpcy5zaGFkZXIudW5pZm9ybXMudUFscGhhLl9sb2NhdGlvbiwgY29udGFpbmVyLndvcmxkQWxwaGEpO1xuXG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHRleHR1cmUgaXMgYm91bmQuLlxuICAgIHZhciBiYXNlVGV4dHVyZSA9IGNoaWxkcmVuWzBdLl90ZXh0dXJlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgdGV4dHVyZSBoYXMgbm90IHVwZGF0ZWQgdGhlbiBsZXRzIG5vdCB1cGxvYWQgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmKCF0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUoYmFzZVRleHR1cmUpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZighY29udGFpbmVyLl9wcm9wZXJ0aWVzWzBdIHx8ICFjb250YWluZXIuX3Byb3BlcnRpZXNbM10pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgfVxuXG4gICAgLy8gbm93IGxldHMgdXBsb2FkIGFuZCByZW5kZXIgdGhlIGJ1ZmZlcnMuLlxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IHRvdGFsQ2hpbGRyZW47IGkgKz0gYmF0Y2hTaXplLCBqICs9IDEpXG4gICAge1xuICAgICAgICB2YXIgYW1vdW50ID0gKCB0b3RhbENoaWxkcmVuIC0gaSk7XG4gICAgICAgIGlmKGFtb3VudCA+IGJhdGNoU2l6ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50ID0gYmF0Y2hTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRhaW5lci5fYnVmZmVyc1tqXTtcblxuICAgICAgICAvLyB3ZSBhbHdheXMgdXBsb2FkIHRoZSBkeW5hbWljXG4gICAgICAgIGJ1ZmZlci51cGxvYWREeW5hbWljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuXG4gICAgICAgIC8vIHdlIG9ubHkgdXBsb2FkIHRoZSBzdGF0aWMgY29udGVudCB3aGVuIHdlIGhhdmUgdG8hXG4gICAgICAgIGlmKGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPT09IGopXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJ1ZmZlci51cGxvYWRTdGF0aWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gaiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5kIHRoZSBidWZmZXJcbiAgICAgICAgYnVmZmVyLmJpbmQoIHRoaXMuc2hhZGVyICk7XG5cbiAgICAgICAgIC8vIG5vdyBkcmF3IHRob3NlIHN1Y2thcyFcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgYW1vdW50ICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBvbmUgcGFydGljbGUgYnVmZmVyIGZvciBlYWNoIGNoaWxkIGluIHRoZSBjb250YWluZXIgd2Ugd2FudCB0byByZW5kZXIgYW5kIHVwZGF0ZXMgaW50ZXJuYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5nZW5lcmF0ZUJ1ZmZlcnMgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIGJ1ZmZlcnMgPSBbXSxcbiAgICAgICAgc2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemUsXG4gICAgICAgIGR5bmFtaWNQcm9wZXJ0eUZsYWdzID0gY29udGFpbmVyLl9wcm9wZXJ0aWVzLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gYmF0Y2hTaXplKVxuICAgIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKG5ldyBQYXJ0aWNsZUJ1ZmZlcihnbCwgdGhpcy5wcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgYmF0Y2hTaXplKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHZlcnRpY2llcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgdmVydGljZXMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFZlcnRpY2VzID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICB2YXIgc3ByaXRlLFxuICAgICAgICB0ZXh0dXJlLFxuICAgICAgICB0cmltLFxuICAgICAgICBzeCxcbiAgICAgICAgc3ksXG4gICAgICAgIHcwLCB3MSwgaDAsIGgxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xuXG4gICAgICAgIHNwcml0ZSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXTtcbiAgICAgICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZTtcbiAgICAgICAgc3ggPSBzcHJpdGUuc2NhbGUueDtcbiAgICAgICAgc3kgPSBzcHJpdGUuc2NhbGUueTtcblxuICAgICAgICBpZiAodGV4dHVyZS50cmltKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgICAgICB0cmltID0gdGV4dHVyZS50cmltO1xuXG4gICAgICAgICAgICB3MSA9IHRyaW0ueCAtIHNwcml0ZS5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBoMSA9IHRyaW0ueSAtIHNwcml0ZS5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtc3ByaXRlLmFuY2hvci54KTtcbiAgICAgICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtc3ByaXRlLmFuY2hvci54O1xuXG4gICAgICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXNwcml0ZS5hbmNob3IueSk7XG4gICAgICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC1zcHJpdGUuYW5jaG9yLnk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBwb3NpdGlvbnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFBvc2l0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUG9zaXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucG9zaXRpb247XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcm90YXRpb24gdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFJvdGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUm90YXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucm90YXRpb247XG5cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVSb3RhdGlvbjtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgVXZzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRVdnMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlVXZzID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLl90ZXh0dXJlLl91dnM7XG5cbiAgICAgICAgaWYgKHRleHR1cmVVdnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSB0ZXh0dXJlVXZzLngwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZXh0dXJlVXZzLnkwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdGV4dHVyZVV2cy54MTtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gdGV4dHVyZVV2cy55MTtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB0ZXh0dXJlVXZzLngyO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gdGV4dHVyZVV2cy55MjtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB0ZXh0dXJlVXZzLngzO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gdGV4dHVyZVV2cy55MztcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8geW91IGtub3cgdGhpcyBjYW4gYmUgZWFzaWVyIVxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBhbHBoYSB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkQWxwaGEgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZUFscGhhID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLmFscGhhO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZUFscGhhO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVSZW5kZXJlci5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuICAgIHRoaXMudGVtcE1hdHJpeCA9IG51bGw7XG59O1xuIiwidmFyIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVTaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBUZXh0dXJlU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFQb3NpdGlvbkNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVNjYWxlOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFSb3RhdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIHZlYzIgdiA9IGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAnICAgdi54ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIGNvcyhhUm90YXRpb24pIC0gKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIHNpbihhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdi55ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIHNpbihhUm90YXRpb24pICsgKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIGNvcyhhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdiA9IHYgKyBhUG9zaXRpb25Db29yZDsnLFxuXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyh2LCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGhlbGxvXG4gICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCB1QWxwaGE7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3IgKiB1QWxwaGE7JyxcbiAgICAgICAgICAgICcgIGlmIChjb2xvci5hID09IDAuMCkgZGlzY2FyZDsnLFxuICAgICAgICAgICAgJyAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdUFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFQb3NpdGlvbkNvb3JkOiAwLFxuICAgICAgICAgICAvLyBhU2NhbGU6ICAgICAgICAgMCxcbiAgICAgICAgICAgIGFSb3RhdGlvbjogICAgICAwXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVEVNUCBIQUNLXG5cbn1cblxuUGFydGljbGVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlU2hhZGVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVNoYWRlcjtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHN5c3RlbSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgc3lzdGVtIHRoaXMgcmVuZGVyZXIgaXMgZm9yLlxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXSB7bnVtYmVyfSBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcmVuZGVyZWQgYXJlYSAoc2hvd24gaWYgbm90IHRyYW5zcGFyZW50KS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5yb3VuZFBpeGVscz1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBTeXN0ZW1SZW5kZXJlcihzeXN0ZW0sIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB1dGlscy5zYXlIZWxsbyhzeXN0ZW0pO1xuXG4gICAgLy8gcHJlcGFyZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpIGluIENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tpXSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgb3B0aW9ucyA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHNlZSBQSVhJLlJFTkRFUkVSX1RZUEVcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgODAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDgwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgNjAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy52aWV3ID0gb3B0aW9ucy52aWV3IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG9wdGlvbnMucmVzb2x1dGlvbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBvcHRpb25zLnRyYW5zcGFyZW50O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgc2hvdWxkIGJlIHJlc2l6ZWQgYXV0b21hdGljYWxseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvcHRpb25zLmF1dG9SZXNpemUgfHwgZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIGJsZW5kIG1vZGVzIHVzZWZ1bCBmb3IgdGhpcyByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG1peGVkPn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgZmxhZyBhZmZlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50cyBvZiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgcmV0YWluZWQgYWZ0ZXIgcmVuZGVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3Igbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyBOT1QgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBhIGNhbnZhcyBzaXplZCBmaWxsUmVjdCBvcGVyYXRpb24gZXZlcnkgZnJhbWUgdG8gc2V0IHRoZSBjYW52YXMgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBjbGVhclJlY3QgdG8gY2xlYXIgdGhlIGNhbnZhcyBldmVyeSBmcmFtZS5cbiAgICAgKiBEaXNhYmxlIHRoaXMgYnkgc2V0dGluZyB0aGlzIHRvIGZhbHNlLiBGb3IgZXhhbXBsZSBpZiB5b3VyIGdhbWUgaGFzIGEgY2FudmFzIGZpbGxpbmcgYmFja2dyb3VuZCBpbWFnZSB5b3Ugb2Z0ZW4gZG9uJ3QgbmVlZCB0aGlzIHNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHRcbiAgICAgKi9cbiAgICB0aGlzLmNsZWFyQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICAgICAqIEhhbmR5IGZvciBjcmlzcCBwaXhlbCBhcnQgYW5kIHNwZWVkIG9uIGxlZ2FjeSBkZXZpY2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gb3B0aW9ucy5yb3VuZFBpeGVscztcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmEgPSBbMCwgMCwgMCwgMF07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9ICcjMDAwMDAwJztcblxuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yOyAvLyBydW4gYmcgY29sb3Igc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgdHJhbnNmb3JtOnt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKX0sIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3Qgcm9vdCBvYmplY3QgdGhhdCB0aGUgcmVuZGVyZXIgdHJpZWQgdG8gcmVuZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3lzdGVtUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFN5c3RlbVJlbmRlcmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciB0byBmaWxsIGlmIG5vdCB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlN5c3RlbVJlbmRlcmVyI1xuICAgICAqL1xuICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSB1dGlscy5oZXgyc3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB1dGlscy5oZXgycmdiKHZhbCwgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBjYW52YXMgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMudmlldy53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGhpcy52aWV3LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgICAgICB0aGlzLnZpZXcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpIHtcbiAgICBpZiAocmVtb3ZlVmlldyAmJiB0aGlzLnZpZXcucGFyZW50Tm9kZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMudmlldyk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgdGhpcy52aWV3ID0gbnVsbDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IDA7XG5cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBmYWxzZTtcblxuICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcblxuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDA7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IG51bGw7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gbnVsbDtcbn07XG4iLCJ2YXIgU3lzdGVtUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9TeXN0ZW1SZW5kZXJlcicpLFxuICAgIENhbnZhc01hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi91dGlscy9DYW52YXNNYXNrTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBTeXN0ZW1SZW5kZXJlci5jYWxsKHRoaXMsICdDYW52YXMnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuQ0FOVkFTO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMudmlldy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIGZsYWcgY29udHJvbGxpbmcgY2FudmFzIHJlZnJlc2guXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVmcmVzaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBhIENhbnZhc01hc2tNYW5hZ2VyLCBoYW5kbGVzIG1hc2tpbmcgd2hlbiB1c2luZyB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNNYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IENhbnZhc01hc2tNYW5hZ2VyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIHByb3BlcnR5IHVzZWQgdG8gc2V0IHRoZSBjYW52YXMgc21vb3RoaW5nIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnaW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcblxuICAgIGlmICghdGhpcy5jb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ3dlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ29JbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB0aGlzLl9tYXBCbGVuZE1vZGVzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHtcbiAgICAgICAgd29ybGRUcmFuc2Zvcm06IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgICAgICB3b3JsZEFscGhhOiAxXG4gICAgfTtcblxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oQ2FudmFzUmVuZGVyZXIpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byB0aGlzIGNhbnZhcyB2aWV3XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSB0aGUgb2JqZWN0IHRvIGJlIHJlbmRlcmVkXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KVxue1xuICAgIHRoaXMuZW1pdCgncHJlcmVuZGVyJyk7XG5cbiAgICB2YXIgY2FjaGVQYXJlbnQgPSBvYmplY3QucGFyZW50O1xuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gb2JqZWN0O1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIG9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIG9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTICYmIHRoaXMudmlldy5zY3JlZW5jYW52YXMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpXG4gICAge1xuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGggLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlckRpc3BsYXlPYmplY3Qob2JqZWN0LCB0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciBhbmQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSBDYW52YXMgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIFtyZW1vdmVWaWV3PWZhbHNlXSB7Ym9vbGVhbn0gUmVtb3ZlcyB0aGUgQ2FudmFzIGVsZW1lbnQgZnJvbSB0aGUgRE9NLlxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIGNhbGwgdGhlIGJhc2UgZGVzdHJveVxuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcywgcmVtb3ZlVmlldyk7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5T2JqZWN0IHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgY29udGV4dClcbntcbiAgICB2YXIgdGVtcENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyQ2FudmFzKHRoaXMpO1xuICAgIHRoaXMuY29udGV4dCA9IHRlbXBDb250ZXh0O1xufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBQSVhJLlN5c3RlbVJlbmRlcmVyI3Jlc2l6ZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKiBAcGFyYW0ge251bWJlcn0gaFxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHcsIGgpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xuXG4gICAgLy9yZXNldCB0aGUgc2NhbGUgbW9kZS4uIG9kZGx5IHRoaXMgc2VlbXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgY2FudmFzIGlzIHJlc2l6ZWQuXG4gICAgLy9zdXJlbHkgYSBicm93c2VyIGJ1Zz8/IExldCBwaXhpIGZpeCB0aGF0IGZvciB5b3UuLlxuICAgIGlmKHRoaXMuc21vb3RoUHJvcGVydHkpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHRbdGhpcy5zbW9vdGhQcm9wZXJ0eV0gPSAoQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVCA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogTWFwcyBQaXhpIGJsZW5kIG1vZGVzIHRvIGNhbnZhcyBibGVuZCBtb2Rlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX21hcEJsZW5kTW9kZXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5ibGVuZE1vZGVzKVxuICAgIHtcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzID0ge307XG5cbiAgICAgICAgaWYgKHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnbXVsdGlwbHknO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NjcmVlbic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSAnb3ZlcmxheSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnZGFya2VuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MSUdIVEVOXSAgICAgICA9ICdsaWdodGVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdjb2xvci1kb2RnZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnY29sb3ItYnVybic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnaGFyZC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSAnc29mdC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnZGlmZmVyZW5jZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnZXhjbHVzaW9uJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdodWUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gJ3NhdHVyYXRlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl0gICAgICAgICA9ICdjb2xvcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSAnbHVtaW5vc2l0eSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29vbCBuZXcgYmxlbmQgbW9kZXMgaW4gY2FudmFzICdjb3VnaCcgaWUgJ2NvdWdoJ1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNpemUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGNhbnZhc1xuICovXG5mdW5jdGlvbiBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgQ2FudmFzIG9iamVjdCB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBDYW52YXNCdWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogQSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHR3by1kaW1lbnNpb25hbCByZW5kZXJpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59XG5cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0J1ZmZlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FudmFzQnVmZmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIGJ1ZmZlciBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ2FudmFzQnVmZmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdmFsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGNhbnZhcyB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZSBDYW52YXNCdWZmZXIgY2xhc3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbnZhc1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgY2FudmFzLlxuICpcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBjYW52YXMgcmVuZGVyZXIgdG8gZHJhdyB0aGUgcHJpbWl0aXZlIGdyYXBoaWNzIGRhdGEuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNHcmFwaGljcyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNHcmFwaGljcztcblxuLypcbiAqIFJlbmRlcnMgYSBHcmFwaGljcyBvYmplY3QgdG8gYSBjYW52YXMuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgYWN0dWFsIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSAyZCBkcmF3aW5nIG1ldGhvZCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciB3b3JsZEFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuICAgIGlmIChncmFwaGljcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3NUaW50KGdyYXBoaWNzKTtcbiAgICAgICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLl9maWxsVGludDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEuX2xpbmVUaW50O1xuXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZSBjbG9zZSB0aGUgcGF0aCAtIG11Y2ggbmVhdGVyIDopXG4gICAgICAgICAgICBpZiAocG9pbnRzWzBdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAmJiBwb2ludHNbMV0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbENvbG9yIHx8IGRhdGEuZmlsbENvbG9yID09PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmZpbGxBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggZmlsbENvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUud2lkdGgsIHNoYXBlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLDAsMipNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVsbGlwc2UgY29kZSB0YWtlbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcblxuICAgICAgICAgICAgdmFyIHcgPSBzaGFwZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB2YXIgaCA9IHNoYXBlLmhlaWdodCAqIDI7XG5cbiAgICAgICAgICAgIHZhciB4ID0gc2hhcGUueCAtIHcvMjtcbiAgICAgICAgICAgIHZhciB5ID0gc2hhcGUueSAtIGgvMjtcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIGthcHBhID0gMC41NTIyODQ4LFxuICAgICAgICAgICAgICAgIG94ID0gKHcgLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgb3kgPSAoaCAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgeGUgPSB4ICsgdywgICAgICAgICAgIC8vIHgtZW5kXG4gICAgICAgICAgICAgICAgeWUgPSB5ICsgaCwgICAgICAgICAgIC8vIHktZW5kXG4gICAgICAgICAgICAgICAgeG0gPSB4ICsgdyAvIDIsICAgICAgIC8vIHgtbWlkZGxlXG4gICAgICAgICAgICAgICAgeW0gPSB5ICsgaCAvIDI7ICAgICAgIC8vIHktbWlkZGxlXG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG1hc2tcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3Mgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgbWFza1xuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGNvbnRleHQgMmQgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciBsZW4gPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gVE9ETyAtIG5lZWQgdG8gYmUgVW5kZWZpbmVkIVxuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgcnggPSBzaGFwZS54O1xuICAgICAgICAgICAgdmFyIHJ5ID0gc2hhcGUueTtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcbiAgICAgICAgICAgIHZhciByYWRpdXMgPSBzaGFwZS5yYWRpdXM7XG5cbiAgICAgICAgICAgIHZhciBtYXhSYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDIgfCAwO1xuICAgICAgICAgICAgcmFkaXVzID0gcmFkaXVzID4gbWF4UmFkaXVzID8gbWF4UmFkaXVzIDogcmFkaXVzO1xuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRpbnQgb2YgYSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3MgdGhhdCB3aWxsIGhhdmUgaXRzIHRpbnQgdXBkYXRlZFxuICpcbiAqL1xuQ2FudmFzR3JhcGhpY3MudXBkYXRlR3JhcGhpY3NUaW50ID0gZnVuY3Rpb24gKGdyYXBoaWNzKVxue1xuICAgIGlmIChncmFwaGljcy50aW50ID09PSAweEZGRkZGRiAmJiBncmFwaGljcy5fcHJldlRpbnQgPT09IGdyYXBoaWNzLnRpbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyYXBoaWNzLl9wcmV2VGludCA9IGdyYXBoaWNzLnRpbnQ7XG5cbiAgICB2YXIgdGludFIgPSAoZ3JhcGhpY3MudGludCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50RyA9IChncmFwaGljcy50aW50ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgdGludEIgPSAoZ3JhcGhpY3MudGludCAmIDB4RkYpLyAyNTU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLmZpbGxDb2xvciB8IDA7XG4gICAgICAgIHZhciBsaW5lQ29sb3IgPSBkYXRhLmxpbmVDb2xvciB8IDA7XG5cbiAgICAgICAgLypcbiAgICAgICAgdmFyIGNvbG9yUiA9IChmaWxsQ29sb3IgPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgdmFyIGNvbG9yRyA9IChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JCID0gKGZpbGxDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgZmlsbENvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG5cbiAgICAgICAgY29sb3JSID0gKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckcgPSAobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgY29sb3JCID0gKGxpbmVDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgbGluZUNvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG4gICAgICAgICovXG5cbiAgICAgICAgLy8gc3VwZXIgaW5saW5lIGNvcyBpbSBhbiBvcHRpbWl6YXRpb24gTkFaSSA6KVxuICAgICAgICBkYXRhLl9maWxsVGludCA9ICgoKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgoZmlsbENvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAoZmlsbENvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuICAgICAgICBkYXRhLl9saW5lVGludCA9ICgoKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAobGluZUNvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuXG4gICAgfVxufTtcblxuIiwidmFyIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi9DYW52YXNHcmFwaGljcycpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBtYXNraW5nLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ2FudmFzTWFza01hbmFnZXIoKVxue31cblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FudmFzTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc01hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgc3RhY2sgb2YgbWFza3MuXG4gKlxuICogQHBhcmFtIG1hc2tEYXRhIHtvYmplY3R9IHRoZSBtYXNrRGF0YSB0aGF0IHdpbGwgYmUgcHVzaGVkXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSwgcmVuZGVyZXIpXG57XG5cbiAgICByZW5kZXJlci5jb250ZXh0LnNhdmUoKTtcblxuICAgIHZhciBjYWNoZUFscGhhID0gbWFza0RhdGEuYWxwaGE7XG4gICAgdmFyIHRyYW5zZm9ybSA9IG1hc2tEYXRhLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgLy9UT0RPIHN1cG9ydCBzcHJpdGUgYWxwaGEgbWFza3M/P1xuICAgIC8vbG90cyBvZiBlZmZvcnQgcmVxdWlyZWQuIElmIGRlbWFuZCBpcyBncmVhdCBlbm91Z2guLlxuICAgIGlmKCFtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrKG1hc2tEYXRhLCByZW5kZXJlci5jb250ZXh0KTtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5jbGlwKCk7XG4gICAgfVxuXG4gICAgbWFza0RhdGEud29ybGRBbHBoYSA9IGNhY2hlQWxwaGE7XG59O1xuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dCB0byB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZSB0aGUgbWFzayB3YXMgYXBwbGllZC5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLmNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7fTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2RzIGZvciBTcHJpdGUvVGV4dHVyZSB0aW50aW5nLlxuICogQHN0YXRpY1xuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG52YXIgQ2FudmFzVGludGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1RpbnRlcjtcblxuLyoqXG4gKiBCYXNpY2FsbHkgdGhpcyBtZXRob2QganVzdCBuZWVkcyBhIHNwcml0ZSBhbmQgYSBjb2xvciBhbmQgdGludHMgdGhlIHNwcml0ZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSB0aW50ZWQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlID0gZnVuY3Rpb24gKHNwcml0ZSwgY29sb3IpXG57XG4gICAgdmFyIHRleHR1cmUgPSBzcHJpdGUudGV4dHVyZTtcblxuICAgIGNvbG9yID0gQ2FudmFzVGludGVyLnJvdW5kQ29sb3IoY29sb3IpO1xuXG4gICAgdmFyIHN0cmluZ0NvbG9yID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgdGV4dHVyZS50aW50Q2FjaGUgPSB0ZXh0dXJlLnRpbnRDYWNoZSB8fCB7fTtcblxuICAgIGlmICh0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0pXG4gICAge1xuICAgICAgICByZXR1cm4gdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdO1xuICAgIH1cblxuICAgICAvLyBjbG9uZSB0ZXh0dXJlLi5cbiAgICB2YXIgY2FudmFzID0gQ2FudmFzVGludGVyLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8vQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWwodGV4dHVyZSwgc3RyaW5nQ29sb3IsIGNhbnZhcyk7XG4gICAgQ2FudmFzVGludGVyLnRpbnRNZXRob2QodGV4dHVyZSwgY29sb3IsIGNhbnZhcyk7XG5cbiAgICBpZiAoQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSlcbiAgICB7XG4gICAgICAgIC8vIGlzIHRoaXMgYmV0dGVyP1xuICAgICAgICB2YXIgdGludEltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHRpbnRJbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKCk7XG5cbiAgICAgICAgdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdID0gdGludEltYWdlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSBjYW52YXM7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBub3QgY29udmVydGluZyB0aGUgdGV4dHVyZSB0byBhbiBpbWFnZSB0aGVuIHdlIG5lZWQgdG8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXNcbiAgICAgICAgQ2FudmFzVGludGVyLmNhbnZhcyA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdtdWx0aXBseScgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcblxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdvdmVybGF5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoT3ZlcmxheSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1hdG9wJztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgLy8gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG59O1xuXG4vKipcbiAqIFRpbnQgYSB0ZXh0dXJlIHBpeGVsIHBlciBwaXhlbC5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcbiAgICB2YXIgciA9IHJnYlZhbHVlc1swXSwgZyA9IHJnYlZhbHVlc1sxXSwgYiA9IHJnYlZhbHVlc1syXTtcblxuICAgIHZhciBwaXhlbERhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICB2YXIgcGl4ZWxzID0gcGl4ZWxEYXRhLmRhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBpeGVscy5sZW5ndGg7IGkgKz0gNClcbiAgICB7XG4gICAgICAgIHBpeGVsc1tpKzBdICo9IHI7XG4gICAgICAgIHBpeGVsc1tpKzFdICo9IGc7XG4gICAgICAgIHBpeGVsc1tpKzJdICo9IGI7XG4gICAgfVxuXG4gICAgY29udGV4dC5wdXRJbWFnZURhdGEocGl4ZWxEYXRhLCAwLCAwKTtcbn07XG5cbi8qKlxuICogUm91bmRzIHRoZSBzcGVjaWZpZWQgY29sb3IgYWNjb3JkaW5nIHRvIHRoZSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbC5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHJvdW5kLCBzaG91bGQgYmUgYSBoZXggY29sb3JcbiAqL1xuQ2FudmFzVGludGVyLnJvdW5kQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IpXG57XG4gICAgdmFyIHN0ZXAgPSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbDtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcblxuICAgIHJnYlZhbHVlc1swXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1swXSAvIHN0ZXApICogc3RlcCk7XG4gICAgcmdiVmFsdWVzWzFdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzFdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMl0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMl0gLyBzdGVwKSAqIHN0ZXApO1xuXG4gICAgcmV0dXJuIHV0aWxzLnJnYjJoZXgocmdiVmFsdWVzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGNhcCB3aGVuIHJvdW5kaW5nIGNvbG9ycy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsID0gODtcblxuLyoqXG4gKiBUaW50IGNhY2hlIGJvb2xlYW4gZmxhZy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jb252ZXJ0VGludFRvSW1hZ2UgPSBmYWxzZTtcblxuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCwgY29uc2VxdWVudGx5IHRoZSBhYmlsaXR5IHRvIHRpbnQgdXNpbmcgdGhlIG11bHRpcGx5IG1ldGhvZC5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA9IHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKTtcblxuLyoqXG4gKiBUaGUgdGludGluZyBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQuXG4gKlxuICovXG5DYW52YXNUaW50ZXIudGludE1ldGhvZCA9IENhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA/IENhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5IDogIENhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsO1xuIiwidmFyIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcblx0dXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIFRleHR1cmVNYW5hZ2VyID0gZnVuY3Rpb24oZ2wpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyB0cmFjayB0ZXh0dXJlcyBpbiB0aGUgcmVuZGVyZXIgc28gd2UgY2FuIG5vIGxvbmdlciBsaXN0ZW4gdG8gdGhlbSBvbiBkZXN0cnVjdGlvbi5cblx0dGhpcy5fbWFuYWdlZFRleHR1cmVzID0gW107XG4gICAgdGhpcy5nbFRleHR1cmVzID0ge307XG5cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5nZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW5kL29yIENyZWF0ZXMgYSBXZWJHTCB0ZXh0dXJlIGZvciB0aGUgcmVuZGVyZXIncyBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdXBkYXRlXG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuXHRpZiAoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGdsVGV4dHVyZSA9IHRoaXMuZ2xUZXh0dXJlc1t0ZXh0dXJlLnVpZF0vL3RleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgaWYgKCFnbFRleHR1cmUpXG4gICAge1xuICAgICAgICBnbFRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcbiAgICAgICAgZ2xUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSB0cnVlXG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgLy8gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXSA9IGdsVGV4dHVyZTtcblxuICAgICAgICB0ZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9uKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICBnbFRleHR1cmUudXBsb2FkKHRleHR1cmUuc291cmNlKTtcbiAgICBcbiAgICAvL1RPRE8gY2hlY2sgaXMgcG93ZXIgb2YgdHdvLi5cbiAgICBnbFRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cblxuICAgIC8vIFRPRE8gY2hlY2sgZm9yIHNjYWxpbmcgdHlwZVxuICAgIGdsVGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKCk7XG5cbiAgICByZXR1cm4gIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTFxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gZGVzdHJveVxuICovXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlLCBfc2tpcFJlbW92ZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0pXG4gICAge1xuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG5cblxuICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcblxuICAgICAgICBpZiAoIV9za2lwUmVtb3ZlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5pbmRleE9mKHRleHR1cmUpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5fbWFuYWdlZFRleHR1cmVzLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKClcbntcblx0Ly8gZW1wdHkgYWxsIHRoZSBvbGQgZ2wgdGV4dHVyZXMgYXMgdGhleSBhcmUgdXNlbGVzcyBub3dcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzW2ldO1xuICAgICAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuICAgIC8vIGRlc3Ryb3kgbWFuYWdlZCB0ZXh0dXJlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIHRoaXMuZGVzdHJveVRleHR1cmUodGV4dHVyZSwgdHJ1ZSk7XG4gICAgICAgIHRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9mZignZGlzcG9zZScsIHRoaXMuZGVzdHJveVRleHR1cmUsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcyA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZU1hbmFnZXI7XG5cbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgU2hhZGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIE1hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9NYXNrTWFuYWdlcicpLFxuICAgIFN0ZW5jaWxNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlcicpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBCbGVuZE1vZGVNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4vdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBGWEFBRmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBUZXh0dXJlTWFuYWdlciA9IHJlcXVpcmUoJy4vVGV4dHVyZU1hbmFnZXInKSxcbiAgICBjcmVhdGVDb250ZXh0ID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuY3JlYXRlQ29udGV4dCxcbiAgICBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aScpLFxuICAgIG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpID0gcmVxdWlyZSgnLi91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFdlYkdMUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIHdlYkdMIGVuYWJsZWQgY2FudmFzLiBUaGlzIHJlbmRlcmVyXG4gKiBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMLiBUaGlzIFJlbmRlciB3b3JrcyBieSBhdXRvbWF0aWNhbGx5IG1hbmFnaW5nIHdlYkdMQmF0Y2hzLlxuICogU28gbm8gbmVlZCBmb3IgU3ByaXRlIEJhdGNoZXMgb3IgU3ByaXRlIENsb3Vkcy5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIHZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9MF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9MF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMuIElmIG5vdCBhdmFpbGFibGUgbmF0aXZlbHkgdGhlbiBGWEFBIGFudGlhbGlhc2luZyBpcyB1c2VkXG4gKiBAcGFyYW0gW29wdGlvbnMuZm9yY2VGWEFBPWZhbHNlXSB7Ym9vbGVhbn0gZm9yY2VzIEZYQUEgYW50aWFsaWFzaW5nIHRvIGJlIHVzZWQgb3ZlciBuYXRpdmUuIEZYQUEgaXMgZmFzdGVyLCBidXQgbWF5IG5vdCBhbHdheXMgbG9vayBhcyBncmVhdFxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy4gSWYgeW91IHdpc2ggdG8gc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSAqbXVzdCogc2V0IHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byBgdHJ1ZWAuXG4gKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmXG4gKiAgICAgIHlvdSBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0LlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ1dlYkdMJywgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIHJlbmRlcmVyIGFzIGEgc3RhbmRhcmRpc2VkIGNvbnN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9Ly9cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0w7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gdGhpcy5oYW5kbGVDb250ZXh0TG9zdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5oYW5kbGVDb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gY3JlYXRlIGEgbmV3IHdlYmdsIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgICAgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQsXG4gICAgICAgIGFudGlhbGlhczogb3B0aW9ucy5hbnRpYWxpYXMsXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnRyYW5zcGFyZW50ICE9PSAnbm90TXVsdGlwbGllZCcsXG4gICAgICAgIHN0ZW5jaWw6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICB9O1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYVszXSA9IHRoaXMudHJhbnNwYXJlbnQgPyAwIDogMTtcblxuICAgIC8qKlxuICAgICAqIERlYWxzIHdpdGggbWFuYWdpbmcgdGhlIHNoYWRlciBwcm9ncmFtcyBhbmQgdGhlaXIgYXR0cmlicy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBuZXcgU2hhZGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1hc2tzIHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWFza01hbmFnZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG5ldyBNYXNrTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyID0gbmV3IFN0ZW5jaWxNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRmlsdGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlck1hbmFnZXIgPSBuZXcgRmlsdGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIGJsZW5kTW9kZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmxlbmRNb2RlTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBuZXcgQmxlbmRNb2RlTWFuYWdlcih0aGlzKTtcblxuICAgIFxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIE9iamVjdFJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5PYmplY3RSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG5ldyBPYmplY3RSZW5kZXJlcih0aGlzKTtcblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIGNvbnRleHQgc28gaXQgaXMgcmVhZHkgZm9yIHRoZSBtYW5hZ2Vycy5cbiAgICB0aGlzLmdsID0gY3JlYXRlQ29udGV4dCh0aGlzLnZpZXcsIHRoaXMuX2NvbnRleHRPcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXRDb250ZXh0KCk7XG5cbiAgICAvLyBtYXAgc29tZSB3ZWJHTCBibGVuZCBhbmQgZHJhd21vZGVzLi5cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wpO1xuICAgIHRoaXMuZHJhd01vZGVzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wpXG5cbiAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXR9XG4gICAgICovXG4gICAgdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUZXh0dXJlTG9jYXRpb24gPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oV2ViR0xSZW5kZXJlcik7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgV2ViR0wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLl9pbml0Q29udGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgbWFuYWdlci4uLlxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hbmFnZXIoZ2wpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBkZWZhdWx0IHBpeGkgc2V0dGluZ3MuLlxuICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG5cblxuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBudWxsLCB0aGlzLnJlc29sdXRpb24sIHRydWUpO1xuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5jbGVhckNvbG9yID0gdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYTtcbiAgICBcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQodGhpcy5yb290UmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMuZW1pdCgnY29udGV4dCcsIGdsKTtcblxuICAgIC8vIHNldHVwIHRoZSB3aWR0aC9oZWlnaHQgcHJvcGVydGllcyBhbmQgZ2wgdmlld3BvcnRcbiAgICB0aGlzLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7ICAgIFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gaXRzIHdlYkdMIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIC8vIG5vIHBvaW50IHJlbmRlcmluZyBpZiBvdXIgY29udGV4dCBoYXMgYmVlbiBibG93biB1cCFcbiAgICBpZiAodGhpcy5nbC5pc0NvbnRleHRMb3N0KCkpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gZGlzcGxheU9iamVjdDtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IGRpc3BsYXlPYmplY3QucGFyZW50O1xuICAgIGRpc3BsYXlPYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIGRpc3BsYXlPYmplY3QudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnJvb3RSZW5kZXJUYXJnZXQsIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpOy8vdGhpcy5wcm9qZWN0aW9uKTtcblxuICAgIHRoaXMuZW1pdCgncG9zdHJlbmRlcicpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgRGlzcGxheSBPYmplY3QuXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0gcmVuZGVyVGFyZ2V0IHtQSVhJLlJlbmRlclRhcmdldH0gVGhlIHJlbmRlciB0YXJnZXQgdG8gdXNlIHRvIHJlbmRlciB0aGlzIGRpc3BsYXkgb2JqZWN0XG4gKlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJEaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHJlbmRlclRhcmdldCwgY2xlYXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgdGhpcy5iaW5kUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG5cbiAgICBpZihjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IHRoZSBmaWx0ZXIgbWFuYWdlclxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5zZXRGaWx0ZXJTdGFjayggcmVuZGVyVGFyZ2V0LmZpbHRlclN0YWNrICk7XG5cbiAgICAvLyByZW5kZXIgdGhlIHNjZW5lIVxuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyV2ViR0wodGhpcyk7XG5cbiAgICAvLyBmaW5pc2ggdGhlIGN1cnJlbnQgcmVuZGVyZXIuLlxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdGhlIG9uZSBnaXZlbiBpbiBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gb2JqZWN0UmVuZGVyZXIge1BJWEkuT2JqZWN0UmVuZGVyZXJ9IFRoZSBvYmplY3QgcmVuZGVyZXIgdG8gdXNlLlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRPYmplY3RSZW5kZXJlciA9IGZ1bmN0aW9uIChvYmplY3RSZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyZXIgPT09IG9iamVjdFJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0b3AoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG9iamVjdFJlbmRlcmVyO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHdlYkdMIHZpZXcgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB3ZWJHTCB2aWV3XG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB3ZWJHTCB2aWV3XG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9PT0gdGhpcy5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSB0aGUgbmV3IHJlbmRlciB0YXJnZXRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgaWYocmVuZGVyVGFyZ2V0ICE9PSB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcblxuICAgICAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLnNldE1hc2tTdGFjayggcmVuZGVyVGFyZ2V0LnN0ZW5jaWxNYXNrU3RhY2sgKTtcbiAgICB9XG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKS8vcHJvamVjdGlvbiwgYnVmZmVyKVxue1xuICAgIC8vVE9ETyBjYWNoZVxuICAgIGlmKHRoaXMuX2FjdGl2ZVNoYWRlciAhPT0gc2hhZGVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlU2hhZGVyID0gc2hhZGVyO1xuICAgICAgICBzaGFkZXIuYmluZCgpO1xuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgfVxufVxuXG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvY2F0aW9uKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvL1RPRE8gdGVzdCBwZXJmIG9mIGNhY2hlP1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gfHwgMDtcblxuICAgIGlmKHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiAhPT0gbG9jYXRpb24pLy9cbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbiApO1xuICAgIH1cblxuICAgIC8vVE9ETyAtIGNhbiB3ZSBjYWNoZSB0aGlzIHRleHR1cmUgdG9vP1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOyAgICAgIFxuICAgIFxuICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBiaW5kIHRoZSB0ZXh0dXJlLi5cbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0uYmluZCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEhhbmRsZXMgYSBsb3N0IHdlYmdsIGNvbnRleHRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5oYW5kbGVDb250ZXh0TG9zdCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGEgcmVzdG9yZWQgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnJlbW92ZUFsbCgpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgKGV2ZW50IGxpc3RlbmVycywgc3ByaXRlYmF0Y2gsIGV0Yy4uLilcbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldylcbntcbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICAvLyByZW1vdmUgbGlzdGVuZXJzXG4gICAgdGhpcy52aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0KTtcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCk7XG5cbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLmRlc3Ryb3lBbGwoKTtcblxuICAgIC8vIGNhbGwgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMudWlkID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIG1hbmFnZXJzXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLm1hc2tNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gbnVsbDtcbiAgICB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLnVzZVByb2dyYW0obnVsbCk7XG4gICAgdGhpcy5nbCA9IG51bGw7XG59O1xuXG4iLCJ2YXIgRGVmYXVsdFNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgUElYSSBmaWx0ZXIuIEN1cnJlbnRseSBvbmx5IFdlYkdMIHN1cHBvcnRzIGZpbHRlcnMuXG4gKiBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIGZpbHRlciB0aGlzIHNob3VsZCBiZSB5b3VyIGJhc2UgY2xhc3MuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHZlcnRleFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdmVydGV4IHNoYWRlciBzb3VyY2UgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBmcmFnbWVudFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIHVuaWZvcm1zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1bmlmb3JtcyBmb3IgdGhpcyBmaWx0ZXIuXG4gKi9cbmZ1bmN0aW9uIEFic3RyYWN0RmlsdGVyKHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zKVxue1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygc2hhZGVyc1xuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlcnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHRyYSBwYWRkaW5nIHRoYXQgdGhlIGZpbHRlciBtaWdodCBuZWVkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIHZlcnRleCBzaGFkZXJcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmdbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmVydGV4U3JjID0gdmVydGV4U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIG9mIHRoZSBmcmFtZW50IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgLy9UT0RPIGEgcmVtaW5kZXIgLSB3b3VsZCBiZSBjb29sIHRvIGhhdmUgbG93ZXIgcmVzIGZpbHRlcnMgYXMgdGhpcyB3b3VsZCBnaXZlIGJldHRlciBwZXJmb3JtYW5jZS5cblxuICAgIC8vdHlwZW9mIGZyYWdtZW50U3JjID09PSAnc3RyaW5nJyA/IGZyYWdtZW50U3JjLnNwbGl0KCcnKSA6IChmcmFnbWVudFNyYyB8fCBbXSk7XG5cbn1cblxuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RmlsdGVyO1xuXG4vKipcbiAqIEdyYWJzIGEgc2hhZGVyIGZyb20gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBzaGFkZXIgZnJvbVxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuZ2V0U2hhZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyc1tnbC5pZF07XG5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IG5ldyBEZWZhdWx0U2hhZGVyKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIsXG4gICAgICAgICAgICB0aGlzLnZlcnRleFNyYyxcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRTcmMsXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaGFkZXJzW2dsLmlkXSA9IHNoYWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbn07XG5cbi8qKlxuICogU3luY3MgYSB1bmlmb3JtIGJldHdlZW4gdGhlIGNsYXNzIG9iamVjdCBhbmQgdGhlIHNoYWRlcnMuXG4gKlxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuc2hhZGVycy5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnNoYWRlcnNbaV0uc3luY1VuaWZvcm0odW5pZm9ybSk7XG4gICAgfVxufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKlxuICogQmFzaWMgRlhBQSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgY29kZSBvbiBnZWVrczNkLmNvbSB3aXRoIHRoZVxuICogbW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXG4gKiB1bnN1cHBvcnRlZCBieSBXZWJHTC5cbiAqXG4gKiAtLVxuICogRnJvbTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICpcbiAqL1xuZnVuY3Rpb24gRlhBQUZpbHRlcigpXG57XG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxuXFxudm9pZCB0ZXhjb29yZHModmVjMiBmcmFnQ29vcmQsIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk5XLCBvdXQgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiU1csIG91dCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzIgaW52ZXJzZVZQID0gMS4wIC8gcmVzb2x1dGlvbi54eTtcXG4gICAgdl9yZ2JOVyA9IChmcmFnQ29vcmQgKyB2ZWMyKC0xLjAsIC0xLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JORSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYlNXID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU0UgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIDEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk0gPSB2ZWMyKGZyYWdDb29yZCAqIGludmVyc2VWUCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbiAgIHZSZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcXG5cXG4gICAvL2NvbXB1dGUgdGhlIHRleHR1cmUgY29vcmRzIGFuZCBzZW5kIHRoZW0gdG8gdmFyeWluZ3NcXG4gICB0ZXhjb29yZHMoYVRleHR1cmVDb29yZCAqIHJlc29sdXRpb24sIHJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG5cXG4vKipcXG5CYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXFxubW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXFxudW5zdXBwb3J0ZWQgYnkgV2ViR0wuXFxuXFxuLS1cXG5cXG5Gcm9tOlxcbmh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XFxuXFxuQ29weXJpZ2h0IChjKSAyMDExIGJ5IEFybWluIFJvbmFjaGVyLlxcblxcblNvbWUgcmlnaHRzIHJlc2VydmVkLlxcblxcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcXG5tZXQ6XFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcXG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxcbiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXFxuICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXFxuICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxcblxcbiAgICAqIFRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yXFxuICAgICAgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljXFxuICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxcblxcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcXG5cXFwiQVMgSVNcXFwiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxcbkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXFxuT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXFxuU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxcblRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxcbiovXFxuXFxuI2lmbmRlZiBGWEFBX1JFRFVDRV9NSU5cXG4gICAgI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gICAoMS4wLyAxMjguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01VTFxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAgICgxLjAgLyA4LjApXFxuI2VuZGlmXFxuI2lmbmRlZiBGWEFBX1NQQU5fTUFYXFxuICAgICNkZWZpbmUgRlhBQV9TUEFOX01BWCAgICAgOC4wXFxuI2VuZGlmXFxuXFxuLy9vcHRpbWl6ZWQgdmVyc2lvbiBmb3IgbW9iaWxlLCB3aGVyZSBkZXBlbmRlbnRcXG4vL3RleHR1cmUgcmVhZHMgY2FuIGJlIGEgYm90dGxlbmVja1xcbnZlYzQgZnhhYShzYW1wbGVyMkQgdGV4LCB2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JOVywgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JTVywgdmVjMiB2X3JnYlNFLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzQgY29sb3I7XFxuICAgIG1lZGl1bXAgdmVjMiBpbnZlcnNlVlAgPSB2ZWMyKDEuMCAvIHJlc29sdXRpb24ueCwgMS4wIC8gcmVzb2x1dGlvbi55KTtcXG4gICAgdmVjMyByZ2JOVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTlcpLnh5ejtcXG4gICAgdmVjMyByZ2JORSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTkUpLnh5ejtcXG4gICAgdmVjMyByZ2JTVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU1cpLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU0UpLnh5ejtcXG4gICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTSk7XFxuICAgIHZlYzMgcmdiTSAgPSB0ZXhDb2xvci54eXo7XFxuICAgIHZlYzMgbHVtYSA9IHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdChyZ2JOVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFORSA9IGRvdChyZ2JORSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTVyA9IGRvdChyZ2JTVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdChyZ2JTRSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNICA9IGRvdChyZ2JNLCAgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNaW4gPSBtaW4obHVtYU0sIG1pbihtaW4obHVtYU5XLCBsdW1hTkUpLCBtaW4obHVtYVNXLCBsdW1hU0UpKSk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgobHVtYU0sIG1heChtYXgobHVtYU5XLCBsdW1hTkUpLCBtYXgobHVtYVNXLCBsdW1hU0UpKSk7XFxuXFxuICAgIG1lZGl1bXAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcblxcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoKGx1bWFOVyArIGx1bWFORSArIGx1bWFTVyArIGx1bWFTRSkgKlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwpLCBGWEFBX1JFRFVDRV9NSU4pO1xcblxcbiAgICBmbG9hdCByY3BEaXJNaW4gPSAxLjAgLyAobWluKGFicyhkaXIueCksIGFicyhkaXIueSkpICsgZGlyUmVkdWNlKTtcXG4gICAgZGlyID0gbWluKHZlYzIoRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBtYXgodmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiBpbnZlcnNlVlA7XFxuXFxuICAgIHZlYzMgcmdiQSA9IDAuNSAqIChcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqICgxLjAgLyAzLjAgLSAwLjUpKS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDIuMCAvIDMuMCAtIDAuNSkpLnh5eik7XFxuICAgIHZlYzMgcmdiQiA9IHJnYkEgKiAwLjUgKyAwLjI1ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogLTAuNSkueHl6ICtcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqIDAuNSkueHl6KTtcXG5cXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QocmdiQiwgbHVtYSk7XFxuICAgIGlmICgobHVtYUIgPCBsdW1hTWluKSB8fCAobHVtYUIgPiBsdW1hTWF4KSlcXG4gICAgICAgIGNvbG9yID0gdmVjNChyZ2JBLCB0ZXhDb2xvci5hKTtcXG4gICAgZWxzZVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkIsIHRleENvbG9yLmEpO1xcbiAgICByZXR1cm4gY29sb3I7XFxufVxcblxcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBmeGFhKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICogdlJlc29sdXRpb24sIHZSZXNvbHV0aW9uLCB2X3JnYk5XLCB2X3JnYk5FLCB2X3JnYlNXLCB2X3JnYlNFLCB2X3JnYk0pO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxufVxuXG5GWEFBRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkZYQUFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRlhBQUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRlhBQUZpbHRlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICovXG5GWEFBRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIoIHJlbmRlcmVyICk7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG4iLCJ2YXIgQWJzdHJhY3RGaWx0ZXIgPSByZXF1aXJlKCcuL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgU3ByaXRlTWFza0ZpbHRlciBjbGFzc1xuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICovXG5mdW5jdGlvbiBTcHJpdGVNYXNrRmlsdGVyKHNwcml0ZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXNrQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICAgdk1hc2tDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIC8vIGNoZWNrIGNsaXAhIHRoaXMgd2lsbCBzdG9wIHRoZSBtYXNrIGJsZWVkaW5nIG91dCBmcm9tIHRoZSBlZGdlc1xcbiAgICB2ZWMyIHRleHQgPSBhYnMoIHZNYXNrQ29vcmQgLSAwLjUgKTtcXG4gICAgdGV4dCA9IHN0ZXAoMC41LCB0ZXh0KTtcXG4gICAgZmxvYXQgY2xpcCA9IDEuMCAtIG1heCh0ZXh0LnksIHRleHQueCk7XFxuICAgIHZlYzQgb3JpZ2luYWwgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgICB2ZWM0IG1hc2t5ID0gdGV4dHVyZTJEKG1hc2ssIHZNYXNrQ29vcmQpO1xcbiAgICBvcmlnaW5hbCAqPSAobWFza3kuciAqIG1hc2t5LmEgKiBhbHBoYSAqIGNsaXApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBvcmlnaW5hbDtcXG59XFxuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hc2s6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLl90ZXh0dXJlIH0sXG4gICAgICAgICAgICBhbHBoYTogICAgICAgICAgeyB0eXBlOiAnZicsIHZhbHVlOiAxfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG59XG5cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVNYXNrRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVNYXNrRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS5fdGV4dHVyZTtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS53b3JsZEFscGhhO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHVzZWQgdG8gbW92ZSB0aGUgZGlzcGxhY2VtZW50IG1hcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlTWFza0ZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHbE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQmxlbmRNb2RlTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59XG5cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmRNb2RlTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxlbmRNb2RlTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzLXVwIHRoZSBnaXZlbiBibGVuZE1vZGUgZnJvbSBXZWJHTCdzIHBvaW50IG9mIHZpZXcuXG4gKlxuICogQHBhcmFtIGJsZW5kTW9kZSB7bnVtYmVyfSB0aGUgYmxlbmRNb2RlLCBzaG91bGQgYmUgYSBQaXhpIGNvbnN0LCBzdWNoIGFzIGBQSVhJLkJMRU5EX01PREVTLkFERGAuIFNlZVxuICogIHtAbGluayBQSVhJLkJMRU5EX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICovXG5CbGVuZE1vZGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRCbGVuZE1vZGUgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPT09IGJsZW5kTW9kZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMucmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmN1cnJlbnRCbGVuZE1vZGVdO1xuICAgIHRoaXMucmVuZGVyZXIuZ2wuYmxlbmRGdW5jKG1vZGVbMF0sIG1vZGVbMV0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpLFxuICAgIFF1YWQgPSByZXF1aXJlKCcuLi91dGlscy9RdWFkJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gRmlsdGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW107XG5cbiAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICByZW5kZXJUYXJnZXQ6cmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldCxcbiAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICBib3VuZHM6bnVsbFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgLy8gbGlzdGVuIGZvciBjb250ZXh0IGFuZCB1cGRhdGUgbmVjZXNzYXJ5IGJ1ZmZlcnNcbiAgICAvL1RPRE8gbWFrZSB0aGlzIGR5bmFtaWMhXG4gICAgLy9UT0RPIHRlc3QgdGhpcyBvdXQgYnkgZm9yY2VzIHBvd2VyIG9mIHR3bz9cbiAgICB0aGlzLnRleHR1cmVTaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZnJhbWVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcbn1cblxuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWx0ZXJNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBGaWx0ZXJNYW5hZ2VyO1xuXG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnF1YWQgPSBuZXcgUXVhZChnbCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHBhcmFtIGJ1ZmZlciB7QXJyYXlCdWZmZXJ9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnNldEZpbHRlclN0YWNrID0gZnVuY3Rpb24gKCBmaWx0ZXJTdGFjayApXG57XG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IGZpbHRlclN0YWNrO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXIgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBmaWx0ZXJzIHtQSVhJLkFic3RyYWN0RmlsZXJbXX0gdGhlIGZpbHRlcnMgdGhhdCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2tcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucHVzaEZpbHRlciA9IGZ1bmN0aW9uICh0YXJnZXQsIGZpbHRlcnMpXG57XG4gICAgLy8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdC4uXG4gICAgLy8gVE9ETyByZXBsYWNlIGNsb25lIHdpdGggYSBjb3B5IHRvIHNhdmUgb2JqZWN0IGNyZWF0aW9uXG4gICAgdmFyIGJvdW5kcyA9IHRhcmdldC5maWx0ZXJBcmVhID8gdGFyZ2V0LmZpbHRlckFyZWEuY2xvbmUoKSA6IHRhcmdldC5nZXRCb3VuZHMoKTtcblxuICAgIC8vYm91bmRzID0gYm91bmRzLmNsb25lKCk7XG5cbiAgICAvLyByb3VuZCBvZmYgdGhlIHJlY3RhbmdsZSB0byBnZXQgYSBuaWNlIHNtb29vb29vb3RoIGZpbHRlciA6KVxuICAgIGJvdW5kcy54ID0gYm91bmRzLnggfCAwO1xuICAgIGJvdW5kcy55ID0gYm91bmRzLnkgfCAwO1xuICAgIGJvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCB8IDA7XG4gICAgYm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgfCAwO1xuXG5cbiAgICAvLyBwYWRkaW5nIVxuICAgIHZhciBwYWRkaW5nID0gZmlsdGVyc1swXS5wYWRkaW5nIHwgMDtcbiAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG5cblxuICAgIGlmKHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvL1RPRE8gdGhpcyB3aWxsIGJyZWFrIGlmIHRoZSByZW5kZXJUZXh0dXJlIHRyYW5zZm9ybSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgdHJhbnNsYXRpb24uXG4gICAgICAgIC8vV2lsbCBuZWVkIHRvIHRha2UgdGhlIGZ1bGwgbWF0cml4IHRyYW5zZm9ybSBpbnRvIGFjb3VudC4uXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQudHJhbnNmb3JtO1xuXG4gICAgICAgIGJvdW5kcy54ICs9IHRyYW5zZm9ybS50eDtcbiAgICAgICAgYm91bmRzLnkgKz0gdHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG5cbiAgICAgICAgYm91bmRzLnggLT0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSAtPSB0cmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgICB0aGlzLmNhcEZpbHRlckFyZWEoIGJvdW5kcyApO1xuICAgIH1cblxuICAgIGlmKGJvdW5kcy53aWR0aCA+IDAgJiYgYm91bmRzLmhlaWdodCA+IDApXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGJvdW5kcztcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGV4dHVyZSk7XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRleHR1cmUuLlxuICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gVE9ETyBnZXQgcmlkIG9mIG9iamVjdCBjcmVhdGlvbiFcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogdGV4dHVyZSxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBwdXNoIHNvbXRoaW5nIG9uIHRvIHRoZSBzdGFjayB0aGF0IGlzIGVtcHR5XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcnNcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnBvcEZpbHRlciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrLnBvcCgpO1xuICAgIHZhciBwcmV2aW91c0ZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrW3RoaXMuZmlsdGVyU3RhY2subGVuZ3RoLTFdO1xuXG4gICAgdmFyIGlucHV0ID0gZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyBpZiB0aGUgcmVuZGVyVGFyZ2V0IGlzIG51bGwgdGhlbiB3ZSBkb24ndCBhcHBseSB0aGUgZmlsdGVyIGFzIGl0cyBvZmZzY3JlZW5cbiAgICBpZighZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IHByZXZpb3VzRmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyB1c2UgcHJvZ3JhbVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaW5wdXQuZnJhbWU7XG5cbiAgICB0aGlzLnF1YWQubWFwKHRoaXMudGV4dHVyZVNpemUsIGlucHV0LmZyYW1lKTtcblxuXG4gICAgLy8gVE9ETy4uIHRoaXMgcHJvYmFibHkgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgZmlsdGVycyA9IGZpbHRlckRhdGEuZmlsdGVyO1xuXG4gICAgLy8gYXNzdW1pbmcgYWxsIGZpbHRlcnMgZm9sbG93IHRoZSBjb3JyZWN0IGZvcm1hdD8/XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAyICogNCAqIDQpO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIG5vcm1hbCBibGVuZG1vZGUhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShDT05TVC5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAxKVxuICAgIHtcbiAgICAgICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoZW4gc2V0dGluZyB0aGlzIGVhY2ggdGltZT9cbiAgICAgICAgaWYgKGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgIGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1swXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgaW5wdXQsIG91dHB1dCApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggaW5wdXQgKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZmxpcFRleHR1cmUgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3BUZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aC0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICAgICAgaWYgKGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBmbG9wVGV4dHVyZSApO1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGZsaXBUZXh0dXJlO1xuICAgICAgICAgICAgZmxpcFRleHR1cmUgPSBmbG9wVGV4dHVyZTtcbiAgICAgICAgICAgIGZsb3BUZXh0dXJlID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlcnNbZmlsdGVycy5sZW5ndGgtMV0uYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBvdXRwdXQgKTtcblxuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxpcFRleHR1cmUgKTtcbiAgICAgICAgdGhpcy5yZXR1cm5SZW5kZXJUYXJnZXQoIGZsb3BUZXh0dXJlICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckRhdGEuZmlsdGVyO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY2xlYXIgdGhlIFJlbmRlclRhcmdldFxuICogQHJldHVybiB7UmVuZGVyVGFyZ2V0fVxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIGNsZWFyIClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy50ZXh0dXJlUG9vbC5wb3AoKSB8fCBuZXcgUmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyZXIuZ2wsIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0LCBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiAqIENPTlNULkZJTFRFUl9SRVNPTFVUSU9OKTtcbiAgICByZW5kZXJUYXJnZXQuZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcih0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyVGFyZ2V0O1xufTtcblxuLypcbiAqIFJldHVybnMgYSBSZW5kZXJUYXJnZXQgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1JlbmRlclRhcmdldH0gVGhlIFJlbmRlclRhcmdldCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5SZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0KVxue1xuICAgIHRoaXMudGV4dHVyZVBvb2wucHVzaCggcmVuZGVyVGFyZ2V0ICk7XG59O1xuXG4vKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2hhZGVyIHtTaGFkZXJ9IFRoZSBzaGFkZXIgdG8gdXBsb2FkXG4gKiBAcGFyYW0gaW5wdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBjbGVhciB0aGUgb3V0cHV0VGFyZ2V0XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHNoYWRlciwgaW5wdXRUYXJnZXQsIG91dHB1dFRhcmdldCwgY2xlYXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG91dHB1dFRhcmdldCk7XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICBvdXRwdXRUYXJnZXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHNoYWRlclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gQ2FuIHRoaXMgYmUgY2FjaGVkIGFuZCBub3QgYHRvQXJyYXlgZWQgZWFjaCBmcmFtZT9cbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG5cbiAgICAvL1RPRE8gY2FuIHRoaXMgYmUgb3B0aW1pc2VkP1xuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcbi8qXG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcbiovXG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBpbnB1dFRhcmdldC50ZXh0dXJlKTtcblxuICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbn07XG5cbi8qXG4gKiBDYWxjdWxhdGVzIHRoZSBtYXBwZWQgbWF0cml4XG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWFcbiAqIEBwYXJhbSBzcHJpdGUge1Nwcml0ZX0gdGhlIHRhcmdldCBzcHJpdGVcbiAqIEBwYXJhbSBvdXRwdXRNYXRyaXgge01hdHJpeH0gQGFsdmluXG4gKi9cbi8vIFRPRE8gcGxheWluZyBhcm91bmQgaGVyZS4uIHRoaXMgaXMgdGVtcG9yYXJ5IC0gKHdpbGwgZW5kIHVwIGluIHRoZSBzaGFkZXIpXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jYWxjdWxhdGVNYXBwZWRNYXRyaXggPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSwgc3ByaXRlLCBvdXRwdXRNYXRyaXgpXG57XG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gc3ByaXRlLndvcmxkVHJhbnNmb3JtLmNvcHkobWF0aC5NYXRyaXguVEVNUF9NQVRSSVgpLFxuICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICB2YXIgbWFwcGVkTWF0cml4ID0gb3V0cHV0TWF0cml4LmlkZW50aXR5KCk7XG5cbiAgICAvLyBzY2FsZS4uXG4gICAgdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCApO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKDEgLCByYXRpbyk7XG5cbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyB0ZXh0dXJlLndpZHRoKTtcbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gdGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0udHggLz0gdGV4dHVyZS53aWR0aCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICB3b3JsZFRyYW5zZm9ybS50eSAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0uaW52ZXJ0KCk7XG5cbiAgICBtYXBwZWRNYXRyaXgucHJlcGVuZCh3b3JsZFRyYW5zZm9ybSk7XG5cbiAgICAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIG1hcHBlZE1hdHJpeC50cmFuc2xhdGUoc3ByaXRlLmFuY2hvci54LCBzcHJpdGUuYW5jaG9yLnkpO1xuXG4gICAgcmV0dXJuIG1hcHBlZE1hdHJpeDtcblxuICAgIC8vIEtlZXBpbmcgdGhlIG9yZ2luYWwgYXMgYSByZW1pbmRlciB0byBtZSBvbiBob3cgdGhpcyB3b3JrcyFcbiAgICAvL1xuICAgIC8vIHZhciBtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvLyAvLyBzY2FsZS4uXG4gICAgLy8gdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgLy8gbS50cmFuc2xhdGUoZmlsdGVyQXJlYS54IC8gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgZmlsdGVyQXJlYS55IC8gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQpO1xuXG5cbiAgICAvLyBtLnNjYWxlKDEgLCByYXRpbyk7XG5cblxuICAgIC8vIHZhciB0cmFuc2Zvcm0gPSB3dC5jbG9uZSgpO1xuXG4gICAgLy8gdmFyIHRyYW5zbGF0ZVNjYWxlWCA9ICh0aGlzLnRleHR1cmVTaXplLndpZHRoIC8gNjIwKTtcbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gMzgwKTtcblxuICAgIC8vIHRyYW5zZm9ybS50eCAvPSA2MjAgKiB0cmFuc2xhdGVTY2FsZVg7XG4gICAgLy8gdHJhbnNmb3JtLnR5IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcblxuICAgIC8vIHRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIC8vIHRyYW5zZm9ybS5hcHBlbmQobSk7XG5cbiAgICAvLyAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgLy8gdHJhbnNmb3JtLnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIC8vIHJldHVybiB0cmFuc2Zvcm07XG59O1xuXG4vKlxuICogQ29uc3RyYWlucyB0aGUgZmlsdGVyIGFyZWEgdG8gdGhlIHRleHR1cmUgc2l6ZVxuICogQHBhcmFtIGZpbHRlckFyZWEge1JlY3RhbmdsZX0gVGhlIGZpbHRlciBhcmVhIHdlIHdhbnQgdG8gY2FwXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhcEZpbHRlckFyZWEgPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSlcbntcbiAgICBpZiAoZmlsdGVyQXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEud2lkdGggKz0gZmlsdGVyQXJlYS54O1xuICAgICAgICBmaWx0ZXJBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgKz0gZmlsdGVyQXJlYS55O1xuICAgICAgICBmaWx0ZXJBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggZmlsdGVyQXJlYS54ICsgZmlsdGVyQXJlYS53aWR0aCA+IHRoaXMudGV4dHVyZVNpemUud2lkdGggKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCA9IHRoaXMudGV4dHVyZVNpemUud2lkdGggLSBmaWx0ZXJBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnkgKyBmaWx0ZXJBcmVhLmhlaWdodCA+IHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLSBmaWx0ZXJBcmVhLnk7XG4gICAgfVxufTtcblxuLypcbiAqIFJlc2l6ZXMgYWxsIHRoZSByZW5kZXIgdGFyZ2V0cyBpbiB0aGUgcG9vbFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLnRleHR1cmVTaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLnJlc2l6ZSggd2lkdGgsIGhlaWdodCApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGZpbHRlciBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBmaWx0ZXIgc3RhY2suXG4gKlxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnF1YWQuZGVzdHJveSgpO1xuICAgIFxuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBudWxsO1xuICAgIHRoaXMub2Zmc2V0WSA9IDA7XG5cbiAgICAvLyBkZXN0cm95IHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHR1cmVQb29sLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlUG9vbCA9IG51bGw7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgQWxwaGFNYXNrRmlsdGVyID0gcmVxdWlyZSgnLi4vZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNYXNrTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICB0aGlzLmFscGhhTWFza1Bvb2wgPSBbXTtcbn1cblxuTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hc2tNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgaWYgKG1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBtYXNrIGZyb20gdGhlIG1hc2sgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucG9wU3ByaXRlTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTcHJpdGVNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdmFyIGFscGhhTWFza0ZpbHRlciA9IHRoaXMuYWxwaGFNYXNrUG9vbC5wb3AoKTtcblxuICAgIGlmICghYWxwaGFNYXNrRmlsdGVyKVxuICAgIHtcbiAgICAgICAgYWxwaGFNYXNrRmlsdGVyID0gW25ldyBBbHBoYU1hc2tGaWx0ZXIobWFza0RhdGEpXTtcbiAgICB9XG5cbiAgICBhbHBoYU1hc2tGaWx0ZXJbMF0ubWFza1Nwcml0ZSA9IG1hc2tEYXRhO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRhcmdldCwgYWxwaGFNYXNrRmlsdGVyKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKi9cbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTcHJpdGVNYXNrID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVycyA9IHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbC5wdXNoKGZpbHRlcnMpO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTdGVuY2lsTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaE1hc2sobWFza0RhdGEpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BNYXNrKG1hc2tEYXRhKTtcbn07XG5cbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1RleHR1cmVTaGFkZXInKSxcbiAgICBDb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhBdHRpYnMgPSAxMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG5cbi8vICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcbn1cblxuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaGFkZXJNYW5hZ2VyO1xudXRpbHMucGx1Z2luVGFyZ2V0Lm1peGluKFNoYWRlck1hbmFnZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlck1hbmFnZXI7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cblNoYWRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlIGNvcnJlY3RseSBhcyB0aGlzIHRlbmRzIHRvIHZhcnlcbiAgICB0aGlzLm1heEF0dGlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xuXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1heEF0dGliczsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRPRE8gLSBXaHkgYXJlIHRoZXNlIG5vdCBwbHVnaW5zPyBXZSBjYW4ndCBkZWNvdXBsZSBwcmltaXRpdmVzIHVubGVzcyB0aGV5IGFyZS4uLi5cbiAgICB0aGlzLmRlZmF1bHRTaGFkZXIgPSBuZXcgVGV4dHVyZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcyk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbmV3IENvbXBsZXhQcmltaXRpdmVTaGFkZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFRha2VzIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHBhcmFtZXRlcnMgYW5kIHVwbG9hZHMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXR0cmlicyB7YW55W119IGF0dHJpYnNcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0QXR0cmlicyA9IGZ1bmN0aW9uIChhdHRyaWJzKVxue1xuICAgIC8vIHJlc2V0IHRlbXAgc3RhdGVcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRlbXBBdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAodmFyIGEgaW4gYXR0cmlicylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbYV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSAhPT0gdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHNoYWRlci5cbiAqXG4gKiBAcGFyYW0gc2hhZGVyIHtQSVhJLlNoYWRlcn0gdGhlIHNoYWRlciB0byB1cGxvYWRcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0U2hhZGVyID0gZnVuY3Rpb24gKHNoYWRlcilcbntcbiAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRJZCA9PT0gc2hhZGVyLnVpZClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50SWQgPSBzaGFkZXIudWlkO1xuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5nbC51c2VQcm9ncmFtKHNoYWRlci5wcm9ncmFtKTtcbiAgICB0aGlzLnNldEF0dHJpYnMoc2hhZGVyLmF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0LlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBXZWJHTE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBudWxsO1xufVxuXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFza01hbmFnZXI7XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgbWFzayBzdGFjayB0aGF0IGlzIHVzZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICpcbiAqIEBwYXJhbSBzdGVuY2lsTWFza1N0YWNrIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9IFRoZSBtYXNrIHN0YWNrXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnNldE1hc2tTdGFjayA9IGZ1bmN0aW9uICggc3RlbmNpbE1hc2tTdGFjayApXG57XG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBpZiAoc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLiBAYWx2aW5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWwgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQuYXR0YWNoU3RlbmNpbEJ1ZmZlcigpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICBpZiAoc21zLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgZ2wuY2xlYXIoZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTtcbiAgICAgICAgc21zLnJldmVyc2UgPSB0cnVlO1xuICAgICAgICBzbXMuY291bnQgPSAwO1xuICAgIH1cblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucHVzaCh3ZWJHTERhdGEpO1xuXG4gICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5WRVJUKTtcblxuICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgIGlmIChzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgIH1cblxuICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSBsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLktFRVApO1xuXG4gICAgc21zLmNvdW50Kys7XG59O1xuXG4vKipcbiAqIFRPRE8gdGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSFcbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuYmluZEdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgLy9pZiAodGhpcy5fY3VycmVudEdyYXBoaWNzID09PSBncmFwaGljcylyZXR1cm47XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBiaW5kIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0zZnYoc2hhZGVyLnVuaWZvcm1zLmNvbG9yLl9sb2NhdGlvbiwgd2ViR0xEYXRhLmNvbG9yKTtcblxuICAgICAgICBnbC51bmlmb3JtMWYoc2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSk7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDQgKiAyLCAwKTtcblxuICAgICAgICAvLyBub3cgZG8gdGhlIHJlc3QuLlxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAqL1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvL3RoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5hY3RpdmF0ZVByaW1pdGl2ZVNoYWRlcigpO1xuLy8gICAgICAgIHNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wcmltaXRpdmVTaGFkZXI7XG4gICAgICAgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG5cbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuLy8gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuXG4gICAgICAvKiAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7Ki9cbiAgICB9XG59O1xuXG4vKipcbiAqIFRPRE8gQGFsdmluXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIHNtcyA9IHRoaXMuc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucG9wKCk7XG5cbiAgICBzbXMuY291bnQtLTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIC8vIHRoZSBzdGFjayBpcyBlbXB0eSFcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgICAgIHRoaXMuYmluZEdyYXBoaWNzKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcblxuICAgICAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRyYXcgYSBxdWFkIHRvIGluY3JlbWVudC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgICAgICAgICAvLyBkcmF3IHRoZSB0cmlhbmdsZSBzdHJpcCFcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCArPSAyO1xuXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKSwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgLy8gIGNvbnNvbGUubG9nKFwiPDw+PlwiKVxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIChsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cblxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIG1hc2sgc3RhY2suXG4gKlxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2sgPSBudWxsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfSBUaGUgbWFzayBkYXRhIHN0cnVjdHVyZSB0byB1c2VcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIFxuICAgIC8vVE9ETyBGSVhcbiAgICBpZiAobWFza0RhdGEuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MudXBkYXRlR3JhcGhpY3MobWFza0RhdGEsIHRoaXMucmVuZGVyZXIuZ2wpO1xuICAgIH1cblxuICAgIGlmICghbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFN0ZW5jaWwobWFza0RhdGEsIG1hc2tEYXRhLl93ZWJHTFt0aGlzLnJlbmRlcmVyLmdsLmlkXS5kYXRhWzBdKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIodGhpcy5yZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcblxuICAgIHRoaXMucG9wU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuIiwiLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLm9uKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xufVxuXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTE1hbmFnZXI7XG5cbi8qKlxuICogR2VuZXJpYyBtZXRob2QgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbldlYkdMTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblx0Ly8gZG8gc29tZSBjb2RlcyBpbml0IVxufTtcblxuLyoqXG4gKiBHZW5lcmljIGRlc3Ryb3kgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlbmRlcmVyLm9mZignY29udGV4dCcsIHRoaXMub25Db250ZXh0Q2hhbmdlLCB0aGlzKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCcuL1NoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBjb21wbGV4IHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQ29tcGxleFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyBjb2xvcjsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoY29sb3IgKiBhbHBoYSAqIHRpbnQsIGFscGhhKTsnLC8vXCIgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIGNvbG9yOiAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsMCwwXSB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB0aW50OiAgIHsgdHlwZTogJzNmJywgdmFsdWU6IFswLCAwLCAwXSB9LFxuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFDb2xvcjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQmFzZSBzaGFkZXIgY2xhc3MgZm9yIFBJWEkgbWFuYWdlZCBzaGFkZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbdW5pZm9ybXNdIHtvYmplY3R9IFVuaWZvcm1zIGZvciB0aGlzIHNoYWRlci5cbiAqIEBwYXJhbSBbYXR0cmlidXRlc10ge29iamVjdH0gQXR0cmlidXRlcyBmb3IgdGhpcyBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIFNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcylcbntcbiAgICBpZiAoIXZlcnRleFNyYyB8fCAhZnJhZ21lbnRTcmMpXG4gICAge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXhpLmpzIEVycm9yLiBTaGFkZXIgcmVxdWlyZXMgdmVydGV4U3JjIGFuZCBmcmFnbWVudFNyYycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5nbCA9IHNoYWRlck1hbmFnZXIucmVuZGVyZXIuZ2w7XG5cbiAgICAvL1RPRE8gbWF5YmUgd2Ugc2hvdWxkIHBhc3MgcmVuZGVyZXIgcmF0aGVyIHRoYW4gc2hhZGVyIG1hbmdlcj8/IGZvb2QgZm9yIHRob3VnaHQuLlxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IHNoYWRlck1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgcHJvZ3JhbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUHJvZ3JhbX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaWZvcm1zIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhdHRyaWJ1dGVzIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50ZXJcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlciBhcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmM7XG5cbiAgICB0aGlzLmluaXQoKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHNoYWRlciBhbmQgdXNlcyBpdFxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbXBpbGUoKTtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy51bmlmb3JtcykpO1xuICAgIHRoaXMuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKSk7XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSB1bmlmb3JtIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgdW5pZm9ybXMgdG8gY2FjaGVcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnVuaWZvcm1zW2tleXNbaV1dLl9sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWNoZXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgYXR0cmlidXRlIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgYXR0cmlidXRlcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlQXR0cmlidXRlTG9jYXRpb25zID0gZnVuY3Rpb24gKGtleXMpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleXNbaV1dID0gdGhpcy5nbC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGtleXNbaV0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgbmVlZGVkIGFueW1vcmUuLi5cblxuICAgIC8vIEJlZ2luIHdvcnN0IGhhY2sgZXZhIC8vXG5cbiAgICAvLyBXSFk/Pz8gT05MWSBvbiBteSBjaHJvbWUgcGl4ZWwgdGhlIGxpbmUgYWJvdmUgcmV0dXJucyAtMSB3aGVuIHVzaW5nIGZpbHRlcnM/XG4gICAgLy8gbWF5YmUgaXRzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnbCBjb250ZXh0LlxuICAgIC8vIEknbSBjb252aW5jZWQgdGhpcyBpcyBhIGJ1ZyBpbiB0aGUgY2hyb21lIGJyb3dzZXIgYXMgdGhlcmUgaXMgTk8gcmVhc29uIHdoeSB0aGlzIHNob3VsZCBiZSByZXR1cm5pbmcgLTEgZXNwZWNpYWxseSBhcyBpdCBvbmx5IG1hbmlmZXN0cyBvbiBteSBjaHJvbWUgcGl4ZWxcbiAgICAvLyBJZiB0aGVyZXMgYW55IHdlYkdMIHBlb3BsZSB0aGF0IGtub3cgd2h5IGNvdWxkIGhhcHBlbiBwbGVhc2UgaGVscCA6KVxuICAgIC8vIGlmICh0aGlzLmF0dHJpYnV0ZXMuYUNvbG9yID09PSAtMSl7XG4gICAgLy8gICAgIHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPSAyO1xuICAgIC8vIH1cblxuICAgIC8vIEVuZCB3b3JzdCBoYWNrIGV2YSAvL1xufTtcblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQgY3JlYXRlcyB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19XG4gKi9cblNoYWRlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHZhciBnbFZlcnRTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuVkVSVEVYX1NIQURFUiwgdGhpcy52ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuRlJBR01FTlRfU0hBREVSLCB0aGlzLmZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuICh0aGlzLnByb2dyYW0gPSBwcm9ncmFtKTtcbn07XG5cbi8qKlxuKiBBZGRzIGEgbmV3IHVuaWZvcm1cbipcbiogQHBhcmFtIHVuaWZvcm0ge29iamVjdH0gdGhlIG5ldyB1bmlmb3JtIHRvIGF0dGFjaFxuKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgbG9jYXRpb24gPSB1bmlmb3JtLl9sb2NhdGlvbixcbiAgICAgICAgdmFsdWUgPSB1bmlmb3JtLnZhbHVlLFxuICAgICAgICBnbCA9IHRoaXMuZ2wsXG4gICAgICAgIGksIGlsO1xuXG4gICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIHNpbmdsZSBpbnQgdmFsdWVcbiAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGZsb2F0IHZhbHVlXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBjYXNlICcxZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSgyKSBvciBKUyBBcnJyYXlcbiAgICAgICAgY2FzZSAnMmYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDMpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICczZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDQpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgMkQgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YyJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDNEIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2Myc6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSA0RCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjQnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMWl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMml2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnNGl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20yJzpcbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgIGNhc2UgJ01hdHJpeDJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB1bmlmb3JtLnRyYW5zcG9zZSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20zJzpcbiAgICAgICAgY2FzZSAnbWF0Myc6XG4gICAgICAgIGNhc2UgJ01hdHJpeDNmdic6XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICBjYXNlICdtYXQ0JzpcbiAgICAgICAgY2FzZSAnTWF0cml4NGZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIENvbG9yIFZhbHVlXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgaW50ZWdlcnMgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdjEnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAyRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yydic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgyICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAyXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDIgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYXJyYXkgb2YgM0QgUG9pbnQgb2JqZWN0c1xuICAgICAgICBjYXNlICd2M3YnOlxuICAgICAgICAgICAgaWYgKCF1bmlmb3JtLl9hcnJheSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMyAqIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlsID0gdmFsdWUubGVuZ3RoOyBpIDwgaWw7ICsraSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogM10gICAgICAgPSB2YWx1ZVtpXS54O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzICsgMV0gICA9IHZhbHVlW2ldLnk7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAyXSAgID0gdmFsdWVbaV0uejtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiA0RCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Y0dic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg0ICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0XSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDJdICAgPSB2YWx1ZVtpXS56O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgM10gICA9IHZhbHVlW2ldLnc7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gUElYSS5UZXh0dXJlXG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuXG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUgfHwgIXVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGlzIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xbJ1RFWFRVUkUnICsgdGhpcy50ZXh0dXJlQ291bnRdKTtcblxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXTtcblxuICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdGV4dHVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9uZS4uXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgICAgICAgICAgLy8gc2V0IHVuaWZvcm0gdG8gdGV4dHVyZSBpbmRleFxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0uX2xvY2F0aW9uLCB0aGlzLnRleHR1cmVDb3VudCk7XG5cbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBuZXh0IHRleHR1cmUgaWRcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgU2hhZGVyIFdhcm5pbmc6IFVua25vd24gdW5pZm9ybSB0eXBlOiAnICsgdW5pZm9ybS50eXBlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNoYWRlciB1bmlmb3JtIHZhbHVlcy5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm1zID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy51bmlmb3JtcylcbiAgICB7XG4gICAgICAgIHRoaXMuc3luY1VuaWZvcm0odGhpcy51bmlmb3Jtc1trZXldKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSW5pdGlhbGlzZXMgYSBTYW1wbGVyMkQgdW5pZm9ybSAod2hpY2ggbWF5IG9ubHkgYmUgYXZhaWxhYmxlIGxhdGVyIG9uIGFmdGVyIGluaXRVbmlmb3JtcyBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBsb2FkZWQpXG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXRTYW1wbGVyMkQgPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbiAgICBpZiAodW5pZm9ybS50ZXh0dXJlRGF0YSlcbiAgICB7XG5cbiAgICAgICAgLy9UT0RPIG1vdmUgdGhpcy4uLlxuICAgICAgICB2YXIgZGF0YSA9IHVuaWZvcm0udGV4dHVyZURhdGE7XG5cbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuXG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBsaWVkQWxwaGEpO1xuICAgICAgICAvLyBHTFRleHR1cmUgPSBtYWcgbGluZWFyLCBtaW4gbGluZWFyX21pcG1hcF9saW5lYXIsIHdyYXAgcmVwZWF0ICsgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIC8vIEdMVGV4dHVyZUxpbmVhciA9IG1hZy9taW4gbGluZWFyLCB3cmFwIGNsYW1wXG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3RSZXBlYXQgPSBtYWcvbWluIE5FQVJFU1QsIHdyYXAgcmVwZWF0XG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3QgPSBtYWcvbWluIG5lYXJlc3QsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gQXVkaW9UZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCA1MTIsIGhlaWdodCAyLCBib3JkZXIgMFxuICAgICAgICAvLyBLZXlUZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCAyNTYsIGhlaWdodCAyLCBib3JkZXIgMFxuXG4gICAgICAgIC8vICBtYWdGaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcbiAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxuXG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZGF0YS5sdW1pbmFuY2UgPyBnbC5MVU1JTkFOQ0UgOiBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLnNvdXJjZSk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGRhdGEubWFnRmlsdGVyID8gZGF0YS5tYWdGaWx0ZXIgOiBnbC5MSU5FQVIgKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSApO1xuXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGRhdGEud3JhcFQgPyBkYXRhLndyYXBUIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyTWFuYWdlci5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHNoYWRlci5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5nbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmdsID0gbnVsbDtcbiAgICB0aGlzLnVuaWZvcm1zID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSBudWxsO1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBudWxsO1xufTtcblxuU2hhZGVyLnByb3RvdHlwZS5fZ2xDb21waWxlID0gZnVuY3Rpb24gKHR5cGUsIHNyYylcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICB0aGlzLmdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgdGhpcy5nbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cbiAgICBpZiAoIXRoaXMuZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgdGhpcy5nbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCBjdXN0b21Vbmlmb3JtcywgY3VzdG9tQXR0cmlidXRlcylcbntcbiAgICB2YXIgdW5pZm9ybXMgPSB7XG5cbiAgICAgICAgdVNhbXBsZXI6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogMCB9LFxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxXSkgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVW5pZm9ybXMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciB1IGluIGN1c3RvbVVuaWZvcm1zKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bmlmb3Jtc1t1XSA9IGN1c3RvbVVuaWZvcm1zW3VdO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgYVZlcnRleFBvc2l0aW9uOiAgICAwLFxuICAgICAgICBhVGV4dHVyZUNvb3JkOiAgICAgIDAsXG4gICAgICAgIGFDb2xvcjogICAgICAgICAgICAgMFxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tQXR0cmlidXRlcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGEgaW4gY3VzdG9tQXR0cmlidXRlcylcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlc1thXSA9IGN1c3RvbUF0dHJpYnV0ZXNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYWdtZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IFRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgU2hhZGVyLmNhbGwodGhpcywgc2hhZGVyTWFuYWdlciwgdmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihnbClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7Ly8sIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKTtcblxufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi4vbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQmFzZSBmb3IgYSBjb21tb24gb2JqZWN0IHJlbmRlcmVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzeXN0ZW0gcmVuZGVyZXIgcGx1Z2luLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gT2JqZWN0UmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufVxuXG5cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYmplY3RSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0UmVuZGVyZXI7XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZW5kZXJlciBhbmQgc2V0cyB0aGUgc2hhZGVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIHNldCB0aGUgc2hhZGVyLi5cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHJlbmRlcmVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xufTtcblxuLyoqXG4gKiBmbHVzaGVzXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIGZsdXNoIVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gcmVuZGVyIHRoZSBvYmplY3Rcbn07XG4iLCIvKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSBxdWFkXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFRoZSBnbCBjb250ZXh0IGZvciB0aGlzIHF1YWQgdG8gdXNlLlxuICovXG5mdW5jdGlvbiBRdWFkKGdsKVxue1xuICAgIC8qXG4gICAgICogdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4vLyAgICB0aGlzLnRleHR1cmVzID0gbmV3IFRleHR1cmVVdnMoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAwLDAsXG4gICAgICAgIDIwMCwwLFxuICAgICAgICAyMDAsMjAwLFxuICAgICAgICAwLDIwMFxuICAgIF0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgcXVhZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMSwwLFxuICAgICAgICAxLDEsXG4gICAgICAgIDAsMVxuICAgIF0pO1xuXG4vLyAgICB2YXIgd2hpdGUgPSAoMHhGRkZGRkYgPj4gMTYpICsgKDB4RkZGRkZGICYgMHhmZjAwKSArICgoMHhGRkZGRkYgJiAweGZmKSA8PCAxNikgKyAoMSAqIDI1NSA8PCAyNCk7XG4gICAgLy9UT0RPIGNvbnZlcnQgdGhpcyB0byBhIDMyIHVuc2lnbmVkIGludCBhcnJheVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBjb21wb25lbnRzIG9mIHRoZSB0cmlhbmdsZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxXG4gICAgXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbXG4gICAgICAgIDAsIDEsIDIsIDAsIDMsIDJcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSB2ZXJ0ZXggYnVmZmVyXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSBpbmRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDggKyAxNikgKiA0LCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnVwbG9hZCgpO1xufVxuXG5RdWFkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFF1YWQ7XG5cbi8qKlxuICogTWFwcyB0d28gUmVjdGFuZ2xlIHRvIHRoZSBxdWFkXG4gKiBAcGFyYW0gcmVjdCB7UElYSS5SZWN0YW5nbGV9IHRoZSBmaXJzdCByZWN0YW5nbGVcbiAqIEBwYXJhbSByZWN0MiB7UElYSS5SZWN0YW5nbGV9IHRoZSBzZWNvbmQgcmVjdGFuZ2xlXG4gKi9cblF1YWQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKHJlY3QsIHJlY3QyKVxue1xuICAgIHZhciB4ID0gMDsgLy9yZWN0Mi54IC8gcmVjdC53aWR0aDtcbiAgICB2YXIgeSA9IDA7IC8vcmVjdDIueSAvIHJlY3QuaGVpZ2h0O1xuXG4gICAgdGhpcy51dnNbMF0gPSB4O1xuICAgIHRoaXMudXZzWzFdID0geTtcblxuICAgIHRoaXMudXZzWzJdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1szXSA9IHk7XG5cbiAgICB0aGlzLnV2c1s0XSA9IHggKyByZWN0Mi53aWR0aCAvIHJlY3Qud2lkdGg7XG4gICAgdGhpcy51dnNbNV0gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1s2XSA9IHg7XG4gICAgdGhpcy51dnNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICAvLy8gLS0tLS1cbiAgICB4ID0gcmVjdDIueDtcbiAgICB5ID0gcmVjdDIueTtcblxuICAgIHRoaXMudmVydGljZXNbMF0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbMV0gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1syXSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzNdID0geTtcblxuICAgIHRoaXMudmVydGljZXNbNF0gPSB4ICsgcmVjdDIud2lkdGg7XG4gICAgdGhpcy52ZXJ0aWNlc1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQ7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzZdID0geDtcbiAgICB0aGlzLnZlcnRpY2VzWzddID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXIgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuUXVhZC5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvLyBUT0RPIGNvdWxkIHByb2JhYmx5IGJlIHB1c2hlZCBpbnRvIG9uZSB1cGxvYWQhXG4gICAgZ2wuYmluZEJ1ZmZlciggZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlciApO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMudmVydGljZXMpO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDggKiA0LCB0aGlzLnV2cyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgKDggKyA4KSAqIDQsIHRoaXMuY29sb3JzKTtcbn07XG5cblF1YWQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xuXG5cbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgICAgIFxuICAgIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcbiAgICBHTEZyYW1lYnVmZmVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xGcmFtZWJ1ZmZlcixcbiAgICBcbiAgICBTdGVuY2lsTWFza1N0YWNrID0gcmVxdWlyZSgnLi9TdGVuY2lsTWFza1N0YWNrJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIGhvcml6b250YWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgdmVydGljYWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAqIEBwYXJhbSByb290IHtib29sZWFufSBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gKi9cbnZhciBSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uLCByb290KVxue1xuICAgIC8vVE9ETyBSZXNvbHV0aW9uIGNvdWxkIGdvIGhlcmUgKCBlZyBsb3cgcmVzIGJsdXJzIClcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvLyBuZXh0IHRpbWUgdG8gY3JlYXRlIGEgZnJhbWUgYnVmZmVyIGFuZCB0ZXh0dXJlXG5cbiAgICAvKipcbiAgICAgKiBBIGZyYW1lIGJ1ZmZlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xGcmFtZUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJDb2xvciA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBvYmplY3QgYXMgYSByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9iamVjdCdzIHRyYW5zZm9ybVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5mcmFtZSA9IG51bGw7XG4gICAgXG4gICAgdGhpcy5kZWZhdWx0RnJhbWUgPSBuZXcgUElYSS5SZWN0YW5nbGUoKTtcbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBudWxsO1xuICAgIHRoaXMuc291cmNlRnJhbWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHN0ZW5jaWwgYnVmZmVyIHN0b3JlcyBtYXNraW5nIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlckJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgc3RlbmNpbCBtYXNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFza1N0YWNrfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG5ldyBTdGVuY2lsTWFza1N0YWNrKCk7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZXMgZmlsdGVyIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6dGhpcyxcbiAgICAgICAgICAgIGZpbHRlcjpbXSxcbiAgICAgICAgICAgIGJvdW5kczp0aGlzLnNpemVcbiAgICAgICAgfVxuICAgIF07XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVFxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gR0xGcmFtZWJ1ZmZlci5jcmVhdGVSR0JBKGdsLCAxMDAsIDEwMCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBBIGZyYW1lIGJ1ZmZlciBuZWVkcyBhIHRhcmdldCB0byByZW5kZXIgdG8uLlxuICAgICAgICAgICAgY3JlYXRlIGEgdGV4dHVyZSBhbmQgYmluZCBpdCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgICovXG4gICAgICAgIFxuXG4gICAgICAgLy8gVE9ETyBjaGFuZ2UhXG4gICAgICAgIC8vIHRoaXMgaXMgdXNlZCBieSB0aGUgYmFzZSB0ZXh0dXJlXG4gICAgICAgIHRoaXMudGV4dHVyZSA9IHRoaXMuZnJhbWVCdWZmZXIudGV4dHVyZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbWFrZSBpdCBhIG51bGwgZnJhbWVidWZmZXIuLlxuICAgICAgICB0aGlzLmZyYW1lQnVmZmVyLmZyYW1lYnVmZmVyID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn07XG5cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZW5kZXJUYXJnZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRhcmdldDtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpbHRlciB0ZXh0dXJlLlxuICpcbiAqIEBwYXJhbSBbYmluZD1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCB3ZSBiaW5kIG91ciBmcmFtZWJ1ZmZlciBiZWZvcmUgY2xlYXJpbmc/XG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbihjbGVhckNvbG9yKVxue1xuICAgIHZhciBjYyA9IGNsZWFyQ29sb3IgfHwgdGhpcy5jbGVhckNvbG9yXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5jbGVhcihjY1swXSxjY1sxXSxjY1syXSxjY1szXSkvL3IsZyxiLGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmF0dGFjaFN0ZW5jaWxCdWZmZXIgPSBmdW5jdGlvbigpXG57XG4gICAgLy9UT0RPIGNoZWNrIGlmIHN0ZW5jaWwgaXMgZG9uZT9cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgaXMgdXNlZCBmb3IgbWFza2luZyBpbiBwaXhpXG4gICAgICogbGV0cyBjcmVhdGUgb25lIGFuZCB0aGVuIGFkZCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgKi9cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZW5hYmxlU3RlbmNpbCgpO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXdwb3J0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIC8vVE9PRCByZWZhY3RvciB1c2FnZSBvZiBmcmFtZS4uXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIuYmluZCgpO1xuXG4gICAgdGhpcy5kZXN0aW5hdGlvbkZyYW1lID0gZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgfHwgdGhpcy5kZWZhdWx0RnJhbWU7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IHRoaXMuc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggdGhpcy5kZXN0aW5hdGlvbkZyYW1lLCB0aGlzLnNvdXJjZUZyYW1lICk7XG5cbiAgICBpZih0aGlzLnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5hcHBlbmQodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIGlmKHRoaXMuZGVzdGluYXRpb25GcmFtZSAhPT0gdGhpcy5zb3VyY2VGcmFtZSlcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgICAgICBnbC5zY2lzc29yKHRoaXMuZGVzdGluYXRpb25GcmFtZS54LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmRpc2FibGUoZ2wuU0NJU1NPUl9URVNUKTtcbiAgICB9XG5cblxuICAgIC8vIFRPRE8gLSBkb2VzIG5vdCBuZWVkIHRvIGJlIHVwZGF0ZWQgYWxsIHRoZSB0aW1lPz9cbiAgICBnbC52aWV3cG9ydCh0aGlzLmRlc3RpbmF0aW9uRnJhbWUueCx0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uKTtcblxuXG59O1xuXG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmFzZWQgb24gYSBwcm9qZWN0aW9uIGZyYW1lICh3aGljaCBpcyBhIHJlY3RhbmdsZSlcbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2FsY3VsYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbkZyYW1lLCBzb3VyY2VGcmFtZSlcbntcbiAgICB2YXIgcG0gPSB0aGlzLnByb2plY3Rpb25NYXRyaXg7XG5cbiAgICBzb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IGRlc3RpbmF0aW9uRnJhbWU7XG5cbiAgICBwbS5pZGVudGl0eSgpO1xuXG4gICAgLy8gVE9ETzogbWFrZSBkZXN0IHNjYWxlIHNvdXJjZVxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAxIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gLTEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAtMSAvIGRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0KjI7XG5cbiAgICAgICAgcG0udHggPSAtMSAtIHNvdXJjZUZyYW1lLnggKiBwbS5hO1xuICAgICAgICBwbS50eSA9IDEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVzaXplcyB0aGUgdGV4dHVyZSB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge051bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGhlaWdodCB7TnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgdGV4dHVyZVxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHdpZHRoID0gd2lkdGggfCAwO1xuICAgIGhlaWdodCA9IGhlaWdodCB8IDA7XG5cbiAgICBpZiAodGhpcy5zaXplLndpZHRoID09PSB3aWR0aCAmJiB0aGlzLnNpemUuaGVpZ2h0ID09PSBoZWlnaHQpIFxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2l6ZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuc2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICB0aGlzLmRlZmF1bHRGcmFtZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuZGVmYXVsdEZyYW1lLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIucmVzaXplKHdpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBoZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuICAgIFxuICAgIHZhciBwcm9qZWN0aW9uRnJhbWUgPSB0aGlzLmZyYW1lIHx8IHRoaXMuc2l6ZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSByZW5kZXIgdGFyZ2V0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIHRoaXMuZnJhbWVCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBTdGVuY2lsTWFza1N0YWNrKClcbntcblx0LyoqXG4gICAgICogVGhlIGFjdHVhbCBzdGFja1xuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsU3RhY2sgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQGFsdmluXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb3VudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY291bnQgPSAwO1xufVxuXG5TdGVuY2lsTWFza1N0YWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0ZW5jaWxNYXNrU3RhY2s7XG5tb2R1bGUuZXhwb3J0cyA9IFN0ZW5jaWxNYXNrU3RhY2s7XG4iLCJDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogTWFwcyBnbCBibGVuZCBjb21iaW5hdGlvbnMgdG8gV2ViR0xcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpKGdsLCBvYmplY3QpXG57XG4gICAgb2JqZWN0ID0gb2JqZWN0IHx8IHt9O1xuXG4gICAgLy9UT0RPIC0gcHJlbXVsdGlwbHkgYWxwaGEgd291bGQgYmUgZGlmZmVyZW50LlxuICAgIC8vYWRkIGEgYm9vbGVhbiBmb3IgdGhhdCFcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQUREXSAgICAgICAgICAgPSBbZ2wuU1JDX0FMUEhBLCBnbC5EU1RfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9IFtnbC5EU1RfQ09MT1IsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5TQ1JFRU5dICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLk9ORV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRBUktFTl0gICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0JVUk5dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRJRkZFUkVOQ0VdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aTtcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcblx0b2JqZWN0PSBvYmplY3QgfHwge307XG5cbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5QT0lOVFNdICAgICAgICAgPSBnbC5QT0lOVFM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORVNdICAgICAgICAgID0gZ2wuTElORVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9MT09QXSAgICAgID0gZ2wuTElORV9MT09QO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLkxJTkVfU1RSSVBdICAgICA9IGdsLkxJTkVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVTXSAgICAgID0gZ2wuVFJJQU5HTEVTO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXSA9IGdsLlRSSUFOR0xFX1NUUklQO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX0ZBTl0gICA9IGdsLlRSSUFOR0xFX0ZBTjtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBTcHJpdGUgb2JqZWN0IGlzIHRoZSBiYXNlIGZvciBhbGwgdGV4dHVyZWQgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCB0byB0aGUgc2NyZWVuXG4gKlxuICogQSBzcHJpdGUgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhbiBpbWFnZSBsaWtlIHRoaXM6XG4gKlxuICogYGBganNcbiAqIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgZm9yIHRoaXMgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZSh0ZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFuY2hvciBzZXRzIHRoZSBvcmlnaW4gcG9pbnQgb2YgdGhlIHRleHR1cmUuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgMCwwIHRoaXMgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0XG4gICAgICogU2V0dGluZyB0aGUgYW5jaG9yIHRvIDAuNSwwLjUgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgY2VudGVyZWRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMSwxIHdvdWxkIG1lYW4gdGhlIHRleHR1cmUncyBvcmlnaW4gcG9pbnQgd2lsbCBiZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmFuY2hvciA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUgKHRoaXMgaXMgaW5pdGlhbGx5IHNldCBieSB0aGUgdGV4dHVyZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQSB2YWx1ZSBvZiAweEZGRkZGRiB3aWxsIHJlbW92ZSBhbnkgdGludCBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2hhZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgc3ByaXRlLiBTZXQgdG8gbnVsbCB0byByZW1vdmUgYSBjdXJyZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJ8UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgY2FjaGVkIHZhbHVlIG9mIHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvLyBjYWxsIHRleHR1cmUgc2V0dGVyXG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBUZXh0dXJlLkVNUFRZO1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZVxuICAgIHRoaXMudmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblNwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLngpICogdGhpcy50ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzaWduID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLngpIHx8IDE7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBzaWduICogdmFsdWUgLyB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgTWF0aC5hYnModGhpcy5zY2FsZS55KSAqIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHByaXZhdGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBzbyBpZiBfd2lkdGggaXMgMCB0aGVuIHdpZHRoIHdhcyBub3Qgc2V0Li5cbiAgICBpZiAodGhpcy5fd2lkdGgpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnggPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgKiB0aGlzLl93aWR0aCAvIHRoaXMudGV4dHVyZS5mcmFtZS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zY2FsZS55ID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLnkpICogdGhpcy5faGVpZ2h0IC8gdGhpcy50ZXh0dXJlLmZyYW1lLmhlaWdodDtcbiAgICB9XG59O1xuXG5TcHJpdGUucHJvdG90eXBlLmNhY2x1bGF0ZVZlcnRpY2VzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgIHd0ID0gdGhpcy50cmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIGEgPSB3dC5hLCBiID0gd3QuYiwgYyA9IHd0LmMsIGQgPSB3dC5kLCB0eCA9IHd0LnR4LCB0eSA9IHd0LnR5LFxuICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhLFxuICAgICAgICB3MCwgdzEsIGgwLCBoMSxcbiAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcbiAgICAgICAgXG4gICAgaWYgKHRyaW0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgYW5kIGlzIG5vdCBhIHRpbGluZ3Nwcml0ZSB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgdzEgPSB0cmltLnggLSB0aGlzLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICBoMSA9IHRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcbiAgICB9XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMF0gPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzFdID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMl0gPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzNdID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzRdID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs1XSA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzZdID0gYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs3XSA9IGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG5cbn1cblxuLyoqXG4qXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy50cmFuc2Zvcm0udXBkYXRlZCB8fCB0aGlzLnRleHR1cmVEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZURpcnR5ID0gZmFsc2U7XG4gICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuICAgIH1cbiAgICBcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFNwcml0ZSBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcbiAgICAgICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5YLFxuICAgICAgICAgICAgbWF4WCxcbiAgICAgICAgICAgIG1pblksXG4gICAgICAgICAgICBtYXhZLFxuICAgICAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YTtcblxuICAgICAgICB2YXIgeDEgPSB2ZXJ0ZXhEYXRhWzBdXG4gICAgICAgIHZhciB5MSA9IHZlcnRleERhdGFbMV1cblxuICAgICAgICB2YXIgeDIgPSB2ZXJ0ZXhEYXRhWzJdXG4gICAgICAgIHZhciB5MiA9IHZlcnRleERhdGFbM11cblxuICAgICAgICB2YXIgeDMgPSB2ZXJ0ZXhEYXRhWzRdXG4gICAgICAgIHZhciB5MyA9IHZlcnRleERhdGFbNV1cblxuICAgICAgICB2YXIgeDQgPSB2ZXJ0ZXhEYXRhWzZdXG4gICAgICAgIHZhciB5NCA9IHZlcnRleERhdGFbN11cblxuICAgICAgICBtaW5YID0geDE7XG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkxO1xuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MTtcbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTE7XG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoaWxkcmVuXG4gICAgICAgIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGRCb3VuZHMgPSB0aGlzLmNvbnRhaW5lckdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICB3MCA9IGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICB3MSA9IGNoaWxkQm91bmRzLnggKyBjaGlsZEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGgwID0gY2hpbGRCb3VuZHMueTtcbiAgICAgICAgICAgIGgxID0gY2hpbGRCb3VuZHMueSArIGNoaWxkQm91bmRzLmhlaWdodDtcblxuICAgICAgICAgICAgbWluWCA9IChtaW5YIDwgdzApID8gbWluWCA6IHcwO1xuICAgICAgICAgICAgbWluWSA9IChtaW5ZIDwgaDApID8gbWluWSA6IGgwO1xuXG4gICAgICAgICAgICBtYXhYID0gKG1heFggPiB3MSkgPyBtYXhYIDogdzE7XG4gICAgICAgICAgICBtYXhZID0gKG1heFkgPiBoMSkgPyBtYXhZIDogaDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fYm91bmRzLnggPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHRoaXMuX2JvdW5kcy55ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG4gICAgdGhpcy5fYm91bmRzLndpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICByZXR1cm4gdGhpcy5fYm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgc3ByaXRlXG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cblNwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLnRleHR1cmUuY3JvcC53aWR0aCA8PSAwIHx8IHRoaXMudGV4dHVyZS5jcm9wLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vICBJZ25vcmUgbnVsbCBzb3VyY2VzXG4gICAgaWYgKHRoaXMudGV4dHVyZS52YWxpZClcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgICAgIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgIGR4LFxuICAgICAgICAgICAgZHksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDtcblxuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgICAgIC8vIElmIHNtb290aGluZ0VuYWJsZWQgaXMgc3VwcG9ydGVkIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgc21vb3RoaW5nIHByb3BlcnR5IGZvciB0aGlzIHRleHR1cmVcbiAgICAgICAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSO1xuICAgICAgICBpZiAocmVuZGVyZXIuc21vb3RoUHJvcGVydHkgJiYgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gIT09IHNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldID0gc21vb3RoaW5nRW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHRyaW1tZWQgd2Ugb2Zmc2V0IGJ5IHRoZSB0cmltIHgveSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgZnJhbWUgZGltZW5zaW9uc1xuXG4gICAgICAgIGlmKHRleHR1cmUucm90YXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICBcbiAgICAgICAgICAgIGR4ICs9IHdpZHRoO1xuXG4gICAgICAgICAgICB3dC50eCA9IGR5ICogd3QuYSArIGR4ICogd3QuYyArIHd0LnR4O1xuICAgICAgICAgICAgd3QudHkgPSBkeSAqIHd0LmIgKyBkeCAqIHd0LmQgKyB3dC50eTtcblxuICAgICAgICAgICAgdmFyIHRlbXAgPSB3dC5hO1xuICAgICAgICAgICAgd3QuYSAgPSAtd3QuYztcbiAgICAgICAgICAgIHd0LmMgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIHRlbXAgPSB3dC5iO1xuICAgICAgICAgICAgd3QuYiAgPSAtd3QuZDtcbiAgICAgICAgICAgIHd0LmQgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIC8vIHRoZSBhbmNob3IgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFib3ZlLCBzbyBsZXRzIHNldCBpdCB0byB6ZXJvXG4gICAgICAgICAgICBkeCA9IDA7XG4gICAgICAgICAgICBkeSA9IDA7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIC8vIEFsbG93IGZvciBwaXhlbCByb3VuZGluZ1xuICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgKHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwLFxuICAgICAgICAgICAgICAgICh3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHggPSBkeCB8IDA7XG4gICAgICAgICAgICBkeSA9IGR5IHwgMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICB3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjbGVhbiB1cCBjYWNoaW5nIC0gaG93IHRvIGNsZWFuIHVwIHRoZSBjYWNoZXM/XG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC55ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgc3ByaXRlIGFuZCBvcHRpb25hbGx5IGl0cyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95VGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95VGV4dHVyZSwgZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5hbmNob3IgPSBudWxsO1xuXG4gICAgaWYgKGRlc3Ryb3lUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcblxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zLi5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICovXG5TcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgU3ByaXRlKFRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXInKSxcbiAgICBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9jcmVhdGVJbmRpY2VzRm9yUXVhZHMnKSxcbiAgICBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4vZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgZ2xDb3JlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgU3ByaXRlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1Nwcml0ZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFJlbmRlcmVyIGRlZGljYXRlZCB0byBkcmF3aW5nIGFuZCBiYXRjaGluZyBzcHJpdGVzLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU3ByaXRlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgdmFsdWVzIHNlbnQgaW4gdGhlIHZlcnRleCBidWZmZXIuXG4gICAgICogcG9zaXRpb25YLCBwb3NpdGlvblksIGNvbG9yUiwgY29sb3JHLCBjb2xvckIgPSA1XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdmVydGV4IGluZm9ybWF0aW9uIGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgU3ByaXRlQmF0Y2ggYmVmb3JlIGl0IGZsdXNoZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIG91ciBiYXRjaFxuICAgIHZhciBudW1WZXJ0cyA9ICh0aGlzLnNpemUgKiA0KSAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBiYXRjaCwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgIHZhciBudW1JbmRpY2VzID0gdGhpcy5zaXplICogNjtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSB2ZXJ0ZXggZGF0YSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5QnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgQXJyYXlCdWZmZXIobnVtVmVydHMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBGbG9hdDMyQXJyYXkgZm9yIHBvc2l0aW9uc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciB1dnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIGNvbG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlcyBvZiB0aGUgZ2VvbWV0cnkgKHF1YWRzKSB0byBkcmF3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHModGhpcy5zaXplKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIFxuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICBcbiAgICAvL1RPRE8gLSAzMDAgaXMgYSBiaXQgbWFnaWMsIGZpZ3VyZSBvdXQgYSBuaWNlciBhbW91bnQhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykgXG4gICAge1xuICAgICAgICB0aGlzLmdyb3Vwc1tpXSA9IHt0ZXh0dXJlczpbXSwgdGV4dHVyZUNvdW50OjAsIGlkczpbXSwgc2l6ZTowLCBzdGFydDowLCBibGVuZDowfTsgXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcblxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsOyAgICBcbn1cblxuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3Nwcml0ZScsIFNwcml0ZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5NQVhfVEVYVFVFUyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cbiAgICB0aGlzLl9zaGFkZXIgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgdGhpcy5NQVhfVEVYVFVFUykvL25ldyBUZXh0dXJlU2hhZGVyKGdsKTtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlcjtcblxuICAgIC8vIGNyZWF0ZSBhIGNvdXBsZSBvZiBidWZmZXJzXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKGdsLCBudWxsLCBnbC5EWU5BTUlDX0RSQVcpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoZ2wsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgLy8gYnVpbGQgdGhlIHZhbyBvYmplY3QgdGhhdCB3aWxsIHJlbmRlci4uXG4gICAgdGhpcy52YW8gPSBuZXcgZ2xDb3JlLlZlcnRleEFycmF5T2JqZWN0KGdsKTtcblxuICAgIHRoaXMudmFvLmFkZEluZGV4KHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCAwKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIGdsLlVOU0lHTkVEX1NIT1JULCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMiAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMyAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVJZCwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgNCAqIDQpO1xuXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdG8gcmVuZGVyIHdoZW4gdXNpbmcgdGhpcyBzcHJpdGViYXRjaFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHNwcml0ZSlcbntcbiAgICAvL1RPRE8gc2V0IGJsZW5kIG1vZGVzLi5cbiAgICAvLyBjaGVjayB0ZXh0dXJlLi5cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPj0gdGhpcy5zaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICBcbiAgICAvLyBnZXQgdGhlIHV2cyBmb3IgdGhlIHRleHR1cmVcbiAgIFxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIGlmICghc3ByaXRlLnRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgLy8gcHVzaCBhIHRleHR1cmUuXG4gICAgLy8gaW5jcmVtZW50IHRoZSBiYXRjaHNpemVcbiAgICB2YXIgbmV4dFRleHR1cmUgPSAgc3ByaXRlLnRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgdmFyIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwO1xuICAgIHZhciBpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50VGV4dHVyZSAhPT0gbmV4dFRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbmV4dFRleHR1cmU7XG4gICAgICAgIFxuICAgICAgICBpZighbmV4dFRleHR1cmUuX2VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9pZCA9IHRoaXMudGV4dHVyZUNvdW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLnRleHR1cmVDb3VudCA9PT0gdGhpcy5NQVhfVEVYVFVFUylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgICAgICAgICAgICAgeyAgICAgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnN0YXJ0ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50KytdID0gbmV4dFRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHR1cmVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdHJpbT8/XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG5cbiAgICAvLyB1cGxvYWQgdGhlIHNwcml0ZSBlbGVtZXRucy4uLlxuICAgIC8vIHRoZXkgaGF2ZSBhbGwgcmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIHdlIGp1c3QgbmVlZCB0byBwdXNoIHRoZW0gaW50byB0aGUgYnVmZmVyLlxuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7XG4gICAgdmFyIHZlcnRleERhdGEgPSBzcHJpdGUudmVydGV4RGF0YVxuICAgIHZhciB0aW50ID0gKHNwcml0ZS50aW50ID4+IDE2KSArIChzcHJpdGUudGludCAmIDB4ZmYwMCkgKyAoKHNwcml0ZS50aW50ICYgMHhmZikgPDwgMTYpICsgKHNwcml0ZS53b3JsZEFscGhhICogMjU1IDw8IDI0KTtcbiAgICB2YXIgdXZzID0gc3ByaXRlLnRleHR1cmUuX3V2cy51dnNfdWludDMyO1xuICAgIC8veHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzBdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMF07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7IFxuICAgIFxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsyXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzNdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzFdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs0XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzVdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzJdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzZdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbN107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbM107XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgYW5kIGVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA9PT0gMClyZXR1cm47XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG5cbiAgICB0aGlzLmN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSB0aGlzLmN1cnJlbnRHcm91cC5zdGFydDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICB7ICAgICBcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgXG4gICAgLy8gZG8gc29tZSBzbWFydCBhcnJheSBzdHVmZi4uXG4gICAgLy8gZG91YmxlIHNpemUgc28gd2UgZG9udCBhbHdheSBzdWJhcnJheSB0aGUgZWxlbWVudHMuLlxuICAgIC8vIHVwbG9hZCB0aGUgdmVydHMgdG8gdGhlIGJ1ZmZlclxuICAgIGlmICh0aGlzLmN1cnJlbnRCYXRjaFNpemUgPiAoIHRoaXMuc2l6ZSAqIDAuNSApIClcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh0aGlzLnZlcnRpY2VzLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbyBrIC4uIHN1YiBhcnJheSBpcyBTTE9XPj9cbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnBvc2l0aW9ucy5zdWJhcnJheSgwLCB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplKTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHZpZXcsIDAsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgc2hhZGVyLi5cbiAgICB0aGlzLnJlbmRlcmVyLmJpbmRTaGFkZXIodGhpcy5fc2hhZGVyKTtcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCAwICk7XG5cbiAgICAvLy8gcmVuZGVyIHRoZSBncm91cHMuLlxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdyb3VwQ291bnQ7IGkrKykge1xuICAgICAgICBcbiAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5ncm91cHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC50ZXh0dXJlQ291bnQ7IGorKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kVGV4dHVyZShncm91cC50ZXh0dXJlc1tqXSwgaik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgZ3JvdXAuc2l6ZSAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCBncm91cC5zdGFydCAqIDYgKiAyKTtcbiAgICB9O1xuXG4gICAgLy8gcmVzZXQgZWxlbWVudHMgZm9yIHRoZSBuZXh0IGZsdXNoXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBzcHJpdGUgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFvLmJpbmQoKTtcbn07XG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgdGhpcy52YW8udW5iaW5kKCk7XG59O1xuLyoqXG4gKiBEZXN0cm95cyB0aGUgU3ByaXRlQmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuY29sb3JzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zcHJpdGVzID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCBtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgdmVydGV4U3JjID0gXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGFUZXh0dXJlSWQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZUZXh0dXJlSWQgPSBhVGV4dHVyZUlkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVwiO1xuICAgIHZhciBmcmFnbWVudFNyYyA9ICdwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG4nICsgZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpICsgXCJcXG5cXG5cIiArIGZyYWdUZW1wbGF0ZVxuXG4gICAgZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYy5yZXBsYWNlKC9cXCVcXCUvZ2ksICcxNicpO1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cbiAgICB2YXIgc2FtcGxlVmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSB7XG4gICAgICAgIHNhbXBsZVZhbHVlc1tpXSA9IGk7XG4gICAgfTtcblxuICAgIHNoYWRlci5iaW5kKCk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnVTYW1wbGVycyA9IHNhbXBsZVZhbHVlcztcblxuICAgIHJldHVybiBzaGFkZXI7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKVxue1xuICAgIHZhciBzcmMgPSAndmVjNCBnZXRTYW1wbGVGcm9tQXJyYXkoc2FtcGxlcjJEIHRleHR1cmVzWyUlXSwgaW50IG5keCwgdmVjMiB1dikge1xcblxcbnZlYzQgY29sb3I7J1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgaWYoaSA+IDApc3JjICs9ICdcXG5lbHNlICc7XG4gICAgICAgIGlmKGkgPCBtYXhUZXh0dXJlcy0xKXNyYyArPSAnaWYobmR4ID09ICcgKyBpICsgJyknO1xuICAgICAgICBzcmMgKz0gJ1xcbnsnO1xuICAgICAgICBzcmMgKz0gJ1xcblxcdGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmVzWycraSsnXSwgdXYpOyc7XG4gICAgICAgIHNyYyArPSAnXFxufSc7XG4gICAgfTtcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdyZXR1cm4gY29sb3I7JztcbiAgICBzcmMgKz0gJ1xcbn0nO1xuXG4gICAgcmV0dXJuIHNyYztcbn1cblxudmFyIGZyYWdUZW1wbGF0ZSA9IFtcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG4gICAgJ3ZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsnLFxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcnNbJSVdOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICdnbF9GcmFnQ29sb3IgPSBnZXRTYW1wbGVGcm9tQXJyYXkodVNhbXBsZXJzLCBpbnQodlRleHR1cmVJZCksIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yOycsXG4gICAgJ30nXG5dLmpvaW4oJ1xcbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyO1xuIiwidmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBUZXh0IE9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nIGluIHlvdXIgdGV4dCBzdHJpbmcsXG4gKiBvciBhZGQgYSB3b3JkV3JhcCBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSBhbmQgYW5kIHdvcmRXcmFwV2lkdGggcHJvcGVydHkgd2l0aCBhIHZhbHVlIGluIHRoZSBzdHlsZSBvYmplY3QuXG4gKlxuICogQSBUZXh0IGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBzdHJpbmcgYW5kIGEgc3R5bGUgb2JqZWN0XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0ID0gbmV3IFBJWEkuVGV4dCgnVGhpcyBpcyBhIHBpeGkgdGV4dCcse2ZvbnQgOiAnMjRweCBBcmlhbCcsIGZpbGwgOiAweGZmMTAxMCwgYWxpZ24gOiAnY2VudGVyJ30pO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbc3R5bGUuZm9udF0ge3N0cmluZ30gZGVmYXVsdCAnYm9sZCAyMHB4IEFyaWFsJyBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlLmcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcCwgaXQgbmVlZHMgd29yZFdyYXAgdG8gYmUgc2V0IHRvIHRydWVcbiAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzRdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gKi9cbmZ1bmN0aW9uIFRleHQodGV4dCwgc3R5bGUsIHJlc29sdXRpb24pXG57XG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgMmQgY29udGV4dCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gd2l0aFxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY2FudmFzLlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyh0aGlzLmNhbnZhcyk7XG4gICAgdGV4dHVyZS50cmltID0gbmV3IG1hdGguUmVjdGFuZ2xlKCk7XG4gICAgU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbn1cblxuLy8gY29uc3RydWN0b3JcblRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTcHJpdGUucHJvdG90eXBlKTtcblRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gVGV4dDtcblxuVGV4dC5mb250UHJvcGVydGllc0NhY2hlID0ge307XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZm9udD0nYm9sZCAyMHB0IEFyaWFsJ10ge3N0cmluZ30gVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gICAgICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZWcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGVnICdibHVlJywgJyNGQ0ZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXBcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd8bnVtYmVyfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNl0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gICAgICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAgICAgKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAgICAgKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHN0eWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdHlsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5maWxsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpbGwgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmZpbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLnN0cm9rZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zdHJva2UgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLnN0cm9rZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZHJvcFNoYWRvd0NvbG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZHJvcFNoYWRvd0NvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGUuZm9udCA9IHN0eWxlLmZvbnQgfHwgJ2JvbGQgMjBwdCBBcmlhbCc7XG4gICAgICAgICAgICBzdHlsZS5maWxsID0gc3R5bGUuZmlsbCB8fCAnYmxhY2snO1xuICAgICAgICAgICAgc3R5bGUuYWxpZ24gPSBzdHlsZS5hbGlnbiB8fCAnbGVmdCc7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2UgPSBzdHlsZS5zdHJva2UgfHwgJ2JsYWNrJzsgLy9wcm92aWRlIGEgZGVmYXVsdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzLzEzNlxuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIHx8IDA7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcCA9IHN0eWxlLndvcmRXcmFwIHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXBXaWR0aCA9IHN0eWxlLndvcmRXcmFwV2lkdGggfHwgMTAwO1xuXG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93ID0gc3R5bGUuZHJvcFNoYWRvdyB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvciB8fCAnIzAwMDAwMCc7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93QW5nbGUgPSBzdHlsZS5kcm9wU2hhZG93QW5nbGUgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA6IE1hdGguUEkgLyA2O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlID0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgOiA1O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0JsdXIgOiAwOyAvL3NoYWRvd0JsdXIgaXMgJzAnIGJ5IGRlZmF1bHQgYWNjb3JkaW5nIHRvIEhUTUxcblxuICAgICAgICAgICAgc3R5bGUucGFkZGluZyA9IHN0eWxlLnBhZGRpbmcgfHwgMDtcblxuICAgICAgICAgICAgc3R5bGUudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lIHx8ICdhbHBoYWJldGljJztcblxuICAgICAgICAgICAgc3R5bGUubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbiB8fCAnbWl0ZXInO1xuICAgICAgICAgICAgc3R5bGUubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQgfHwgMTA7XG5cbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gc3R5bGU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNvcHkgZm9yIHRoZSB0ZXh0IG9iamVjdC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCl7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgc3R5bGUgPSB0aGlzLl9zdHlsZTtcbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG5cbiAgICAvLyB3b3JkIHdyYXBcbiAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbCB0ZXh0XG4gICAgdmFyIG91dHB1dFRleHQgPSBzdHlsZS53b3JkV3JhcCA/IHRoaXMud29yZFdyYXAodGhpcy5fdGV4dCkgOiB0aGlzLl90ZXh0O1xuXG4gICAgLy8gc3BsaXQgdGV4dCBpbnRvIGxpbmVzXG4gICAgdmFyIGxpbmVzID0gb3V0cHV0VGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCB3aWR0aFxuICAgIHZhciBsaW5lV2lkdGhzID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aCk7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGZvbnRQcm9wZXJ0aWVzID0gdGhpcy5kZXRlcm1pbmVGb250UHJvcGVydGllcyhzdHlsZS5mb250KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBsaW5lV2lkdGg7XG4gICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICB2YXIgd2lkdGggPSBtYXhMaW5lV2lkdGggKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICB3aWR0aCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSAoIHdpZHRoICsgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgaGVpZ2h0XG4gICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLnN0eWxlLmxpbmVIZWlnaHQgfHwgZm9udFByb3BlcnRpZXMuZm9udFNpemUgKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG5cbiAgICB2YXIgaGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aDtcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGhlaWdodCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gKCBoZWlnaHQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nICogMiApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5jb250ZXh0LnNjYWxlKCB0aGlzLnJlc29sdXRpb24sIHRoaXMucmVzb2x1dGlvbik7XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgfVxuXG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFN0eWxlPVwiI0ZGMDAwMFwiO1xuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuICAgIHRoaXMuY29udGV4dC5zdHJva2VTdHlsZSA9IHN0eWxlLnN0cm9rZTtcbiAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIHRoaXMuY29udGV4dC50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmU7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVKb2luID0gc3R5bGUubGluZUpvaW47XG4gICAgdGhpcy5jb250ZXh0Lm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0O1xuXG4gICAgdmFyIGxpbmVQb3NpdGlvblg7XG4gICAgdmFyIGxpbmVQb3NpdGlvblk7XG5cbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGlmIChzdHlsZS5kcm9wU2hhZG93Qmx1ciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhTaGFkb3dPZmZzZXQgPSBNYXRoLmNvcyhzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgICAgICB2YXIgeVNoYWRvd09mZnNldCA9IE1hdGguc2luKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCArIHhTaGFkb3dPZmZzZXQsIGxpbmVQb3NpdGlvblkgKyB5U2hhZG93T2Zmc2V0ICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL3NldCBjYW52YXMgdGV4dCBzdHlsZXNcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZmlsbDtcblxuICAgIC8vZHJhdyBsaW5lcyBsaW5lIGJ5IGxpbmVcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0cm9rZSAmJiBzdHlsZS5zdHJva2VUaGlja25lc3MpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJva2VUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUudHJpbS54ID0gMDtcbiAgICB0ZXh0dXJlLnRyaW0ueSA9IC10aGlzLl9zdHlsZS5wYWRkaW5nO1xuXG4gICAgdGV4dHVyZS50cmltLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGV4dHVyZS50cmltLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAtIHRoaXMuX3N0eWxlLnBhZGRpbmcqMjtcblxuICAgIHRoaXMuX3dpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5lbWl0KCd1cGRhdGUnLCAgdGV4dHVyZS5iYXNlVGV4dHVyZSk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqL1xuVGV4dC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICAvL3RoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5yZW5kZXJXZWJHTC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgLy8gICB0aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYXNjZW50LCBkZXNjZW50IGFuZCBmb250U2l6ZSBvZiBhIGdpdmVuIGZvbnRTdHlsZVxuICpcbiAqIEBwYXJhbSBmb250U3R5bGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGZvbnRTdHlsZSlcbntcbiAgICB2YXIgcHJvcGVydGllcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdO1xuXG4gICAgaWYgKCFwcm9wZXJ0aWVzKVxuICAgIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzO1xuICAgICAgICB2YXIgY29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnfE3DiXEnKS53aWR0aCk7XG4gICAgICAgIHZhciBiYXNlbGluZSA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCdNJykud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xuXG4gICAgICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiAxLjQgfCAwO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNmMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQoJ3xNw4lxJywgMCwgYmFzZWxpbmUpO1xuXG4gICAgICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgICB2YXIgcGl4ZWxzID0gaW1hZ2VkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmUgPSB3aWR0aCAqIDQ7XG5cbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgIHZhciBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZWxpbmU7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCArPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnQgPSBiYXNlbGluZSAtIGk7XG5cbiAgICAgICAgaWR4ID0gcGl4ZWxzIC0gbGluZTtcbiAgICAgICAgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGRlc2NlbnQuIHNjYW4gZnJvbSBib3R0b20gdG8gdG9wIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggLT0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IGkgLSBiYXNlbGluZTtcbiAgICAgICAgcHJvcGVydGllcy5mb250U2l6ZSA9IHByb3BlcnRpZXMuYXNjZW50ICsgcHJvcGVydGllcy5kZXNjZW50O1xuXG4gICAgICAgIFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBuZXdsaW5lcyB0byBhIHN0cmluZyB0byBoYXZlIGl0IG9wdGltYWxseSBmaXQgaW50byB0aGUgaG9yaXpvbnRhbFxuICogYm91bmRzIHNldCBieSB0aGUgVGV4dCBvYmplY3QncyB3b3JkV3JhcFdpZHRoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS53b3JkV3JhcCA9IGZ1bmN0aW9uICh0ZXh0KVxue1xuICAgIC8vIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyXG4gICAgLy8gdGhhbiBpdHMgaG9yaXpvbnRhbCBib3VuZHMuXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICAgIHZhciB3b3JkV3JhcFdpZHRoID0gdGhpcy5fc3R5bGUud29yZFdyYXBXaWR0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XG4gICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQod29yZHNbal0pLndpZHRoO1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aFdpdGhTcGFjZSA9IHdvcmRXaWR0aCArIHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xuICAgICAgICAgICAgaWYgKGogPT09IDAgfHwgd29yZFdpZHRoV2l0aFNwYWNlID4gc3BhY2VMZWZ0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcHJpbnRpbmcgdGhlIG5ld2xpbmUgaWYgaXQncyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZSB0aGF0IGlzXG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSB3b3JkIHdyYXAgd2lkdGguXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal07XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB3b3Jkc1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgbGluZXMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFRleHQgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgVGV4dFxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UZXh0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzLmNhbGwodGhpcywgbWF0cml4KTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT10cnVlXSB7Ym9vbGVhbn0gd2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICAvLyBtYWtlIHN1cmUgdG8gcmVzZXQgdGhlIHRoZSBjb250ZXh0IGFuZCBjYW52YXMuLiBkb250IHdhbnQgdGhpcyBoYW5naW5nIGFyb3VuZCBpbiBtZW1vcnkhXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG5cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGVzdHJveUJhc2VUZXh0dXJlKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIFJlbmRlclRhcmdldCA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBGaWx0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKSxcbiAgICB0ZW1wUmVjdCA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuXG4vKipcbiAqIEEgQmFzZVJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIEJhc2VSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIHRha2VzIGEgc25hcHNob3Qgb2YgYW55IERpc3BsYXkgT2JqZWN0IGdpdmVuIHRvIGl0cyByZW5kZXIgbWV0aG9kLiBUaGUgcG9zaXRpb25cbiAqIGFuZCByb3RhdGlvbiBvZiB0aGUgZ2l2ZW4gRGlzcGxheSBPYmplY3RzIGlzIGlnbm9yZWQuIEZvciBleGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcigxMDI0LCAxMDI0LCB7IHZpZXc6IGNhbnZhcywgcmF0aW86IDEgfSk7XG4gKiB2YXIgQmFzZXJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5CYXNlUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihzcHJpdGUpO1xuICogYGBgXG4gKlxuICogVGhlIFNwcml0ZSBpbiB0aGlzIGNhc2Ugd2lsbCBiZSByZW5kZXJlZCB0byBhIHBvc2l0aW9uIG9mIDAsMC4gVG8gcmVuZGVyIHRoaXMgc3ByaXRlIGF0IGl0cyBhY3R1YWxcbiAqIHBvc2l0aW9uIGEgQ29udGFpbmVyIHNob3VsZCBiZSB1c2VkOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZG9jID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKlxuICogZG9jLmFkZENoaWxkKHNwcml0ZSk7XG4gKlxuICogQmFzZXJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiBCYXNlcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZVxuICogQHBhcmFtIFt3aWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbaGVpZ2h0PTEwMF0ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIEJhc2VSZW5kZXJUZXh0dXJlLCB5b3UgbXVzdCBwYXNzIGEgcmVuZGVyZXIgaW50byB0aGUgY29uc3RydWN0b3IuJyk7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUuY2FsbCh0aGlzLCBudWxsLCBzY2FsZU1vZGUpO1xuICAgXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047O1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRHJhdy9yZW5kZXIgdGhlIGdpdmVuIERpc3BsYXlPYmplY3Qgb250byB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBkZXNjZW5kZW50cyBhcmUgdHJhbnNmb3JtZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIElmIGB1cGRhdGVUcmFuc2Zvcm1gIGlzIHRydWUgdGhlbiB0aGUgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQgYmVmb3JlIHRoZVxuICAgICAqIG1ldGhvZCByZXR1cm5zLiBPdGhlcndpc2UgaXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcgY29kZSB0byBjb3JyZWN0bHkgdXNlIG9yIHJlc2V0XG4gICAgICogdGhlIHRyYW5zZm9ybWVkIGRpc3BsYXkgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5IG9iamVjdCBpcyBhbHdheXMgcmVuZGVyZWQgd2l0aCBhIHdvcmxkQWxwaGEgdmFsdWUgb2YgMS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICAgICAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gICAgICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAgICAgKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB1c2VzLiBBIEJhc2VSZW5kZXJUZXh0dXJlIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgcmVuZGVyZXIgYXQgdGhlIG1vbWVudCBpZiBpdHMgd2ViR0wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnNjYWxlTW9kZSwgdGhpcy5yZXNvbHV0aW9uKTsvLywgdGhpcy50aGlzLnNjYWxlTW9kZSk7XG4gICAgICAgIHRoaXMuX2dsVGV4dHVyZXNbZ2wuaWRdID0gIHRoaXMudGV4dHVyZUJ1ZmZlci50ZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgLy9UT0RPIHJlZmFjdG9yIGZpbHRlciBtYW5hZ2VyLi4gYXMgcmVhbGx5IGl0cyBubyBsb25nZXIgYSBtYW5hZ2VyIGlmIHdlIHVzZSBpdCBoZXJlLi5cbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbmV3IEZpbHRlck1hbmFnZXIodGhpcy5yZW5kZXJlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlcldlYkdMO1xuXG4gICAgICAgIC8vIHRoZSBjcmVhdGlvbiBvZiBhIGZpbHRlciBtYW5hZ2VyIHVuYmluZHMgdGhlIGJ1ZmZlcnMuLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgICAgICBpZih0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQpdGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlckNhbnZhcztcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcih0aGlzLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuaGVpZ2h0KiB0aGlzLnJlc29sdXRpb24pO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcblxufVxuXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIHVwZGF0ZUJhc2Uge2Jvb2xlYW59IFNob3VsZCB0aGUgYmFzZVRleHR1cmUud2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYmUgcmVzaXplZCBhcyB3ZWxsP1xuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgaWYgKHdpZHRoID09PSB0aGlzLndpZHRoICYmIGhlaWdodCA9PT0gdGhpcy5oZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZCA9ICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7XG5cbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoZGVzdGluYXRpb25GcmFtZSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuYmluZEZyYW1lYnVmZmVyKHRoaXMucmVuZGVyZXIuZ2wuRlJBTUVCVUZGRVIsIHRoaXMudGV4dHVyZUJ1ZmZlci5mcmFtZUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKGZhbHNlLCBkZXN0aW5hdGlvbkZyYW1lKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAoZnJhbWUsIGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAodXBkYXRlVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpID8gdXBkYXRlVHJhbnNmb3JtIDogdHJ1ZTsvLyF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIudHJhbnNmb3JtID0gbWF0cml4O1xuXG4gICAgLy9UT0RPIG5vdCBhIGZhbiB0aGF0IHRoaXMgaXMgaGVyZS4uLiBpdCB3aWxsIG1vdmUhXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKCk7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICBpZiAodXBkYXRlVHJhbnNmb3JtKVxuICAgIHtcblxuICAgICAgICAvLyByZXNldCB0aGUgbWF0cml4IG9mIHRoZSBkaXNwbGF0eU9iamVjdC4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uaWRlbnRpdHkoKTtcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmN1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGVtcFJlY3Qud2lkdGggPSBmcmFtZS5oZWlnaHQ7XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gZnJhbWUud2lkdGg7XG4gICBcbiAgICAvL1RPRE8gcmVuYW1lIHRleHR1cmVCdWZmZXIgdG8gcmVuZGVyVGFyZ2V0Li5cbiAgICB2YXIgdGVtcCA9ICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0aGlzLmZpbHRlck1hbmFnZXI7XG4gICAgXG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIuYWN0aXZhdGUoZnJhbWUsIHRlbXBSZWN0KTtcbiAgICBjb25zb2xlLmxvZyhkaXNwbGF5T2JqZWN0KVxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnRleHR1cmVCdWZmZXIsIGNsZWFyKTtcblxuICAgLy8gY29uc29sZS5sb2coXCJSRU5ERVJJTkcgXCIpO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRlbXA7XG59O1xuXG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcl0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVwZGF0ZVRyYW5zZm9ybSA9ICEhdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdmFyIHd0ID0gdGVtcE1hdHJpeDtcblxuICAgIHd0LmlkZW50aXR5KCk7XG5cbiAgICBpZiAobWF0cml4KVxuICAgIHtcbiAgICAgICAgd3QuYXBwZW5kKG1hdHJpeCk7XG4gICAgfVxuXG5cbiAgICB3dC50eCArPSBmcmFtZS54O1xuICAgIHd0LnR5ICs9IGZyYW1lLnk7XG5cbiAgICB2YXIgY2FjaGVkV3QgPSBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtO1xuICAgIFxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSB3dDtcblxuICAgIC8vIHNldFdvcmxkIEFscGhhIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgcmVuZGVyZXIgYXQgZnVsbCBvcGFjaXR5XG4gICAgZGlzcGxheU9iamVjdC53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICB2YXIgaSwgajtcblxuICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBcbi8vICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5cbiAgICB2YXIgY29udGV4dCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlYWxSZXNvbHV0aW9uID0gdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIGNvbnRleHQpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gcmVhbFJlc29sdXRpb247XG5cbiAgICBpZihkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID09PSB3dClcbiAgICB7XG4gICAgICAgIC8vIGZpeGVzIGNhY2hlQXNCaXRtYXAgSGFwcGVuaW5nIGR1cmluZyB0aGUgYWJvdmUuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gY2FjaGVkV3Q7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBkZXN0cm95QmFzZSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIGZpbHRlcm1hbmFnZXIuLlxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoZnJhbWUpXG57XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uuc3JjID0gdGhpcy5nZXRCYXNlNjQoZnJhbWUpO1xuICAgIHJldHVybiBpbWFnZTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGlzIHRleHR1cmUuIEl0IHdvcmtzIGJ5IGNhbGxpbmcgQmFzZVJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgIHJldHVybiB0aGlzLmdldENhbnZhcyhmcmFtZSkudG9EYXRhVVJMKCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIEJhc2VSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldENhbnZhcyA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2lkdGggPSBmcmFtZS53aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBjYW52YXNEYXRhID0gdGVtcENhbnZhcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2FudmFzRGF0YS5kYXRhLnNldCh3ZWJHTFBpeGVscyk7XG5cbiAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICByZXR1cm4gdGVtcENhbnZhcy5jYW52YXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy53aWR0aDtcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoZnJhbWUud2lkdGggPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGggJiYgXG4gICAgICAgICAgIGZyYW1lLmhlaWdodCA9PT0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5oZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IENhbnZhc0J1ZmZlcihmcmFtZS53aWR0aCAqIHJlc29sdXRpb24sIGZyYW1lLmhlaWdodCAqIHJlc29sdXRpb24pO1xuICAgICAgICAgICAgdmFyIGNhbnZhc0RhdGEgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dC5nZXRJbWFnZURhdGEoZnJhbWUueCAgKiByZXNvbHV0aW9uLCBmcmFtZS55ICogcmVzb2x1dGlvbiwgZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIHRoZSBlbnRpcmUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICBpZighZnJhbWUpXG4gICAge1xuICAgICAgICBmcmFtZSA9IHRlbXBSZWN0O1xuICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICByZXR1cm4gd2ViR0xQaXhlbHM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIGEgcGl4ZWwgd2l0aGluIHRoZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uIChmcmFtZSwgeCwgeSlcbntcbiAgICB0ZW1wUmVjdC54ID0geDtcbiAgICB0ZW1wUmVjdC55ID0geTtcbiAgICB0ZW1wUmVjdC53aWR0aCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gMSAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmKGZyYW1lKVxuICAgIHtcbiAgICAgICAgdGVtcFJlY3QueCArPSBmcmFtZS54O1xuICAgICAgICB0ZW1wUmVjdC55ICs9IGZyYW1lLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UGl4ZWxzKHRlbXBSZWN0KTtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlLiBBbGwgdGV4dHVyZXMgaGF2ZSBhIGJhc2UgdGV4dHVyZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50IHBpeGVsIHJhdGlvc1xuICovXG5mdW5jdGlvbiBCYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDEwMDtcblxuICAgIC8vIFRPRE8gZG9jc1xuICAgIC8vIHVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2VcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxXaWR0aCA9IDEwMDtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgaGVpZ2h0IG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUgdG8gYXBwbHkgd2hlbiBzY2FsaW5nIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuTElORUFSXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIG9uY2UgdGhlIGJhc2UgdGV4dHVyZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbmV2ZXIgdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmFpbHMgdG8gbG9hZCBvciBoYXMgbm8gdGV4dHVyZSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgaWYgdGhlIHNvdXJjZSBpcyBjdXJyZW50bHkgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIElmIGFuIEltYWdlIHNvdXJjZSBpcyBsb2FkaW5nIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmVcbiAgICAgKiBkaXNwYXRjaGVkIHdoZW4gdGhlIG9wZXJhdGlvbiBlbmRzLiBBbiB1bmRlcnlsaW5nIHNvdXJjZSB0aGF0IGlzXG4gICAgICogaW1tZWRpYXRlbHktYXZhaWxhYmxlIGJ5cGFzc2VzIGxvYWRpbmcgZW50aXJlbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW1hZ2Ugc291cmNlIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUT0RPOiBNYWtlIHRoaXMgYSBzZXR0ZXIgdGhhdCBjYWxscyBsb2FkU291cmNlKCk7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtJbWFnZXxDYW52YXN9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsOyAvLyBzZXQgaW4gbG9hZFNvdXJjZSwgaWYgYXQgYWxsXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiBSR0IgY2hhbm5lbHMgc2hvdWxkIGJlIHByZS1tdWx0aXBsaWVkIGJ5IEFscGhhICAoV2ViR0wgb25seSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBvciBub3QgdGhlIHRleHR1cmUgaXMgYSBwb3dlciBvZiB0d28sIHRyeSB0byB1c2UgcG93ZXIgb2YgdHdvIHRleHR1cmVzIGFzIG11Y2ggYXMgeW91IGNhblxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IGZhbHNlO1xuXG4gICAgLy8gdXNlZCBmb3Igd2ViR0xcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiBhIG1pcG1hcCBvZiB0aGlzIHRleHR1cmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLiBUaGlzIHZhbHVlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIHRleHR1cmUgaXMgdXNlZFxuICAgICAqIEFsc28gdGhlIHRleHR1cmUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBzaXplIHRvIHdvcmtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5taXBtYXAgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHJlbmRlcmVyIElEcyB0byB3ZWJnbCB0ZXh0dXJlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgV2ViR0xUZXh0dXJlPn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9pZCA9IDA7XG4gICAgXG4gICAgLy8gaWYgbm8gc291cmNlIHBhc3NlZCBkb24ndCB0cnkgdG8gbG9hZFxuICAgIGlmIChzb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmluaXNoZXMgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkZWRcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmFpbHMgdG8gbG9hZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBCYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0ZXh0dXJlIG9uIGFsbCB0aGUgd2ViZ2wgcmVuZGVyZXJzLCB0aGlzIGFsc28gYXNzdW1lcyB0aGUgc3JjIGhhcyBjaGFuZ2VkLlxuICpcbiAqIEBmaXJlcyB1cGRhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5yZWFsV2lkdGggPSB0aGlzLnNvdXJjZS5uYXR1cmFsV2lkdGggfHwgdGhpcy5zb3VyY2Uud2lkdGg7XG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gdGhpcy5zb3VyY2UubmF0dXJhbEhlaWdodCB8fCB0aGlzLnNvdXJjZS5oZWlnaHQ7XG5cbiAgICB0aGlzLndpZHRoID0gdGhpcy5yZWFsV2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlYWxIZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IHV0aWxzLmlzUG93ZXJPZlR3byh0aGlzLnJlYWxXaWR0aCwgdGhpcy5yZWFsSGVpZ2h0KTtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIExvYWQgYSBzb3VyY2UuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBpcyBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlLCBzdWNoIGFzIGFuIGltYWdlIHRoYXQgbmVlZHMgdG8gYmVcbiAqIGRvd25sb2FkZWQsIHRoZW4gdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIGluIHRoZSBmdXR1cmVcbiAqIGFuZCBgaGFzTG9hZGVkYCB3aWxsIHJlbWFpbiBmYWxzZSBhZnRlciB0aGlzIGNhbGwuXG4gKlxuICogVGhlIGxvZ2ljIHN0YXRlIGFmdGVyIGNhbGxpbmcgYGxvYWRTb3VyY2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGVnLiBgZnJvbUltYWdlYCwgYG5ldyBCYXNlVGV4dHVyZWApIGlzOlxuICpcbiAqICAgICBpZiAodGV4dHVyZS5oYXNMb2FkZWQpXG4ge1xuICogICAgICAgIC8vIHRleHR1cmUgcmVhZHkgZm9yIHVzZVxuICogICAgIH0gZWxzZSBpZiAodGV4dHVyZS5pc0xvYWRpbmcpXG4ge1xuICogICAgICAgIC8vIGxpc3RlbiB0byAnbG9hZGVkJyBhbmQvb3IgJ2Vycm9yJyBldmVudHMgb24gdGV4dHVyZVxuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAgLy8gbm90IGxvYWRpbmcsIG5vdCBnb2luZyB0byBsb2FkIFVOTEVTUyB0aGUgc291cmNlIGlzIHJlbG9hZGVkXG4gKiAgICAgICAgLy8gKGl0IG1heSBzdGlsbCBtYWtlIHNlbnNlIHRvIGxpc3RlbiB0byB0aGUgZXZlbnRzKVxuICogICAgIH1cbiAqXG4gKiBAcHJvdGVjdGVkXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUubG9hZFNvdXJjZSA9IGZ1bmN0aW9uIChzb3VyY2UpXG57XG4gICAgdmFyIHdhc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZztcbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAod2FzTG9hZGluZyAmJiB0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc291cmNlLm9uZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgLy8gQXBwbHkgc291cmNlIGlmIGxvYWRlZC4gT3RoZXJ3aXNlIHNldHVwIGFwcHJvcHJpYXRlIGxvYWRpbmcgbW9uaXRvcnMuXG4gICAgaWYgKCh0aGlzLnNvdXJjZS5jb21wbGV0ZSB8fCB0aGlzLnNvdXJjZS5nZXRDb250ZXh0KSAmJiB0aGlzLnNvdXJjZS53aWR0aCAmJiB0aGlzLnNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNvdXJjZS5nZXRDb250ZXh0KVxuICAgIHtcblxuICAgICAgICAvLyBJbWFnZSBmYWlsIC8gbm90IHJlYWR5XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuXG4gICAgICAgIHNvdXJjZS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgc2NvcGUuZW1pdCgnbG9hZGVkJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvdXJjZS5vbmVycm9yID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5lbWl0KCdlcnJvcicsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQZXIgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjdGhlLWltZy1lbGVtZW50XG4gICAgICAgIC8vICAgXCJUaGUgdmFsdWUgb2YgYGNvbXBsZXRlYCBjYW4gdGh1cyBjaGFuZ2Ugd2hpbGUgYSBzY3JpcHQgaXMgZXhlY3V0aW5nLlwiXG4gICAgICAgIC8vIFNvIGNvbXBsZXRlIG5lZWRzIHRvIGJlIHJlLWNoZWNrZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gYWRkZWQuLlxuICAgICAgICAvLyBOT1RFOiBjb21wbGV0ZSB3aWxsIGJlIHRydWUgaWYgdGhlIGltYWdlIGhhcyBubyBzcmMgc28gYmVzdCB0byBjaGVjayBpZiB0aGUgc3JjIGlzIHNldC5cbiAgICAgICAgaWYgKHNvdXJjZS5jb21wbGV0ZSAmJiBzb3VyY2Uuc3JjKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyAuLmFuZCBpZiB3ZSdyZSBjb21wbGV0ZSBub3csIG5vIG5lZWQgZm9yIGNhbGxiYWNrc1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgc29tZSBvdGhlciB0cmFja2luZyB2YXJzIG9uY2VcbiAqIGEgc291cmNlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5fc291cmNlTG9hZGVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBiYXNlIHRleHR1cmVcbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5pbWFnZVVybClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuICAgICAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlLnNyYyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLnNvdXJjZS5fcGl4aUlkXTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG5cbiAgICB0aGlzLmRpc3Bvc2UoKTtcbn07XG5cbi8qKlxuICogRnJlZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTCBtZW1vcnkgd2l0aG91dCBkZXN0cm95aW5nIHRoaXMgdGV4dHVyZSBvYmplY3QuXG4gKiBUaGlzIG1lYW5zIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSB0ZXh0dXJlIGxhdGVyIHdoaWNoIHdpbGwgdXBsb2FkIGl0IHRvIEdQVVxuICogbWVtb3J5IGFnYWluLlxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIHRoaXMpO1xuXG4gICAgLy8gdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lZWRlZCwgdGhlIHJlbmRlcmVycyBzaG91bGQgY2xlYW51cCBhbGwgdGhlIGdsIHRleHR1cmVzLlxuICAgIC8vIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgc291cmNlIGltYWdlIG9mIHRoZSB0ZXh0dXJlLlxuICogVGhlIG9yaWdpbmFsIHNvdXJjZSBtdXN0IGJlIGFuIEltYWdlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5ld1NyYyB7c3RyaW5nfSB0aGUgcGF0aCBvZiB0aGUgaW1hZ2VcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNvdXJjZUltYWdlID0gZnVuY3Rpb24gKG5ld1NyYylcbntcbiAgICB0aGlzLnNvdXJjZS5zcmMgPSBuZXdTcmM7XG5cbiAgICB0aGlzLmxvYWRTb3VyY2UodGhpcy5zb3VyY2UpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIGJhc2UgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBTaG91bGQgdXNlIGFub255bW91cyBDT1JTPyBEZWZhdWx0cyB0byB0cnVlIGlmIHRoZSBVUkwgaXMgbm90IGEgZGF0YS1VUkkuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmIChjcm9zc29yaWdpbiA9PT0gdW5kZWZpbmVkICYmIGltYWdlVXJsLmluZGV4T2YoJ2RhdGE6JykgIT09IDApXG4gICAge1xuICAgICAgICBjcm9zc29yaWdpbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIC8vIG5ldyBJbWFnZSgpIGJyZWFrcyB0ZXggbG9hZGluZyBpbiBzb21lIHZlcnNpb25zIG9mIENocm9tZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMzgwNzFcbiAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgaWYgKGNyb3Nzb3JpZ2luKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoaW1hZ2UsIHNjYWxlTW9kZSk7XG4gICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgaW1hZ2Uuc3JjID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSBiYXNlVGV4dHVyZTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBAMnggYXQgdGhlIGVuZCBvZiB0aGUgdXJsIHdlIGFyZSBnb2luZyB0byBhc3N1bWUgaXRzIGEgaGlnaHJlcyBpbWFnZVxuICAgICAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKGltYWdlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFjYW52YXMuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGNhbnZhcy5fcGl4aUlkID0gJ2NhbnZhc18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG4iLCJ2YXIgQmFzZVJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VSZW5kZXJUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIFJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIFJlbmRlclRleHR1cmUgc2hvdWxkIGJlIHByZWxvYWRlZFxuICogb3RoZXJ3aXNlIGJsYWNrIHJlY3RhbmdsZXMgd2lsbCBiZSBkcmF3biBpbnN0ZWFkLlxuICpcbiAqIEEgUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCA4MDAsIDYwMCk7XG4gKiB2YXIgc3ByaXRlID0gUElYSS5TcHJpdGUuZnJvbUltYWdlKFwic3Bpbk9ial8wMS5wbmdcIik7XG4gKlxuICogc3ByaXRlLnBvc2l0aW9uLnggPSA4MDAvMjtcbiAqIHNwcml0ZS5wb3NpdGlvbi55ID0gNjAwLzI7XG4gKiBzcHJpdGUuYW5jaG9yLnggPSAwLjU7XG4gKiBzcHJpdGUuYW5jaG9yLnkgPSAwLjU7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiByZW5kZXJUZXh0dXJlXG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIGZvciB0aGlzIFJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIFJlbmRlclRleHR1cmUoYmFzZVJlbmRlclRleHR1cmUsIGZyYW1lKVxue1xuICAgIGlmICghcmVuZGVyZXIpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgb2JqZWN0IHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Jhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIFRleHR1cmUuY2FsbCh0aGlzLFxuICAgICAgICBiYXNlUmVuZGVyVGV4dHVyZSxcbiAgICAgICAgZnJhbWUgXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn1cblxuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmUucHJvdG90eXBlKTtcblJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGV4dHVyZTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIHVwZGF0ZUJhc2UpXG57XG4gICBcbiAgICAvL1RPRE8gLSBjb3VsZCBiZSBub3QgcmVxdWlyZWQuLlxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSB0aGlzLmNyb3Aud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNyb3AuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKHVwZGF0ZUJhc2UpXG4gICAge1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYmFzZVRleHR1cmUuY2xlYXIodGhpcy5mcmFtZSlcbiAgICBcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLnJlbmRlcih0aGlzLmZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRJbWFnZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuYmFzZVRleHR1cmUuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIFJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0QmFzZTY0ID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNlNjQuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIFJlbmRlclRleHR1cmUgdG8gaXQgYW5kIHRoZW4gcmV0dXJucyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gQSBDYW52YXMgZWxlbWVudCB3aXRoIHRoZSB0ZXh0dXJlIHJlbmRlcmVkIG9uLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldENhbnZhcyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVscyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVsKHRoaXMuZnJhbWUsIHgsIHkpO1xufTtcblxuUmVuZGVyVGV4dHVyZS5jcmVhdGUgPSBmdW5jdGlvbihyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHJldHVybiBuZXcgUmVuZGVyVGV4dHVyZShuZXcgQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbikpO1xufVxuXG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnMgPSByZXF1aXJlKCcuL1RleHR1cmVVdnMnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlIG9yIHBhcnQgb2YgYW4gaW1hZ2UuIEl0IGNhbm5vdCBiZSBhZGRlZFxuICogdG8gdGhlIGRpc3BsYXkgbGlzdCBkaXJlY3RseS4gSW5zdGVhZCB1c2UgaXQgYXMgdGhlIHRleHR1cmUgZm9yIGEgU3ByaXRlLiBJZiBubyBmcmFtZSBpcyBwcm92aWRlZCB0aGVuIHRoZSB3aG9sZSBpbWFnZSBpcyB1c2VkLlxuICpcbiAqIFlvdSBjYW4gZGlyZWN0bHkgY3JlYXRlIGEgdGV4dHVyZSBmcm9tIGFuIGltYWdlIGFuZCB0aGVuIHJldXNlIGl0IG11bHRpcGxlIHRpbWVzIGxpa2UgdGhpcyA6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZSgnYXNzZXRzL2ltYWdlLnBuZycpO1xuICogdmFyIHNwcml0ZTEgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiB2YXIgc3ByaXRlMiA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBiYXNlVGV4dHVyZSB7UElYSS5CYXNlVGV4dHVyZX0gVGhlIGJhc2UgdGV4dHVyZSBzb3VyY2UgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlIGZyb21cbiAqIEBwYXJhbSBbZnJhbWVdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3RhbmdsZSBmcmFtZSBvZiB0aGUgdGV4dHVyZSB0byBzaG93XG4gKiBAcGFyYW0gW2Nyb3BdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIGFyZWEgb2Ygb3JpZ2luYWwgdGV4dHVyZVxuICogQHBhcmFtIFt0cmltXSB7UElYSS5SZWN0YW5nbGV9IFRyaW1tZWQgdGV4dHVyZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBbcm90YXRlXSB7Ym9vbGVhbn0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlcyAoIHVzZWQgYnkgdGV4dHVyZSBwYWNrZXIgKVxuICovXG5mdW5jdGlvbiBUZXh0dXJlKGJhc2VUZXh0dXJlLCBmcmFtZSwgY3JvcCwgdHJpbSwgcm90YXRlKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogRG9lcyB0aGlzIFRleHR1cmUgaGF2ZSBhbnkgZnJhbWUgZGF0YSBhc3NpZ25lZCB0byBpdD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5ub0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VUZXh0dXJlIGluc3RhbmNlb2YgVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0cmltIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLnRyaW0gPSB0cmltO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCB0aGUgcmVuZGVyZXIga25vdyBpZiB0aGUgdGV4dHVyZSBpcyB2YWxpZC4gSWYgaXQncyBub3QgdGhlbiBpdCBjYW5ub3QgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgYSByZW5kZXJlciBrbm93IHRoYXQgYSB0ZXh0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgKHVzZWQgbWFpbmx5IGZvciB3ZWJHTCB1diB1cGRhdGVzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVpcmVzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgVVYgZGF0YSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgYXJlYSBvZiB0aGUgQmFzZVRleHR1cmUgaW1hZ2UgdG8gYWN0dWFsbHkgY29weSB0byB0aGUgQ2FudmFzIC8gV2ViR0wgd2hlbiByZW5kZXJpbmcsXG4gICAgICogaXJyZXNwZWN0aXZlIG9mIHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBvciBwbGFjZW1lbnQgKHdoaWNoIGNhbiBiZSBpbmZsdWVuY2VkIGJ5IHRyaW1tZWQgdGV4dHVyZSBhdGxhc2VzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jcm9wID0gY3JvcCB8fCBmcmFtZTsvL25ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdGF0ZSA9ICEhcm90YXRlO1xuXG4gICAgaWYgKGJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBmcmFtZSB3ZSBzaG91bGQgbW9uaXRvciBmb3IgYW55IGJhc2UgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlLm9uY2UoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZyYW1lIG9yIHRoZSBiYXNlVGV4dHVyZSBpcyB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICovXG4gICAgZnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgICAgICAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50cmltICYmICF0aGlzLnJvdGF0ZSAmJiAoZnJhbWUueCArIGZyYW1lLndpZHRoID4gdGhpcy5iYXNlVGV4dHVyZS53aWR0aCB8fCBmcmFtZS55ICsgZnJhbWUuaGVpZ2h0ID4gdGhpcy5iYXNlVGV4dHVyZS5oZWlnaHQpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dHVyZSBFcnJvcjogZnJhbWUgZG9lcyBub3QgZml0IGluc2lkZSB0aGUgYmFzZSBUZXh0dXJlIGRpbWVuc2lvbnMgJyArIHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5zb3VyY2UgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50cmltKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wID0gZnJhbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlcyB0aGlzIHRleHR1cmUgb24gdGhlIGdwdS5cbiAqXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5iYXNlVGV4dHVyZS51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyBsb2FkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlTG9hZGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIC8vIFRPRE8gdGhpcyBjb2RlIGxvb2tzIGNvbmZ1c2luZy4uIGJvbyB0byBhYnVzaW5nIGdldHRlcnMgYW5kIHNldHRlcnNzIVxuICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy5fZnJhbWU7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyB1cGRhdGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZVVwZGF0ZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSBiYXNlVGV4dHVyZS53aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSBiYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlPWZhbHNlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlKVxue1xuICAgIGlmICh0aGlzLmJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGRlc3Ryb3lCYXNlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG4gICAgdGhpcy50cmltID0gbnVsbDtcbiAgICB0aGlzLmNyb3AgPSBudWxsO1xuXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UsIHRoaXMpO1xuICAgIHRoaXMub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGV4dHVyZSBvYmplY3QgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLmZyYW1lLCB0aGlzLmNyb3AsIHRoaXMudHJpbSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5fdXBkYXRlVXZzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuX3V2cylcbiAgICB7XG4gICAgICAgIHRoaXMuX3V2cyA9IG5ldyBUZXh0dXJlVXZzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXZzLnNldCh0aGlzLmNyb3AsIHRoaXMuYmFzZVRleHR1cmUsIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFRleHR1cmUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSAgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gY3Jvc3NvcmlnaW4ge2Jvb2xlYW59IFdoZXRoZXIgcmVxdWVzdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY3Jvc3NvcmlnaW5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21JbWFnZShpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xuICAgICAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gdGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICh0eXBlb2YgdmlkZW8gPT09ICdzdHJpbmcnKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFRleHR1cmUuZnJvbVZpZGVvVXJsKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSB2aWRlbyB1cmwuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvVXJsIHtzdHJpbmd9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW9VcmwgPSBmdW5jdGlvbiAodmlkZW9VcmwsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHZpZGVvVXJsLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIHRleHR1cmUgdG8gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuIFRoaXMgY2FjaGUgaXMgc2hhcmVkIGFjcm9zcyB0aGUgd2hvbGUgUElYSSBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIFRleHR1cmUgdG8gYWRkIHRvIHRoZSBjYWNoZS5cbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIGJlIHN0b3JlZCBhZ2FpbnN0LlxuICovXG5UZXh0dXJlLmFkZFRleHR1cmVUb0NhY2hlID0gZnVuY3Rpb24gKHRleHR1cmUsIGlkKVxue1xuICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpZF0gPSB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB0ZXh0dXJlIGZyb20gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCBvZiB0aGUgdGV4dHVyZSB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRoYXQgd2FzIHJlbW92ZWRcbiAqL1xuVGV4dHVyZS5yZW1vdmVUZXh0dXJlRnJvbUNhY2hlID0gZnVuY3Rpb24gKGlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBBbiBlbXB0eSB0ZXh0dXJlLCB1c2VkIG9mdGVuIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBtdWx0aXBsZSBlbXB0eSB0ZXh0dXJlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZS5FTVBUWSA9IG5ldyBUZXh0dXJlKG5ldyBCYXNlVGV4dHVyZSgpKTtcbiIsIlxuLyoqXG4gKiBBIHN0YW5kYXJkIG9iamVjdCB0byBzdG9yZSB0aGUgVXZzIG9mIGEgdGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmVVdnMoKVxue1xuICAgIHRoaXMueDAgPSAwO1xuICAgIHRoaXMueTAgPSAwO1xuXG4gICAgdGhpcy54MSA9IDE7XG4gICAgdGhpcy55MSA9IDA7XG5cbiAgICB0aGlzLngyID0gMTtcbiAgICB0aGlzLnkyID0gMTtcblxuICAgIHRoaXMueDMgPSAwO1xuICAgIHRoaXMueTMgPSAxO1xuXG4gICAgdGhpcy54eTBfdWludDMyID0gMDtcbiAgICB0aGlzLnh5MV91aW50MzIgPSAwO1xuICAgIHRoaXMueHkyX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTNfdWludDMyID0gMDtcblxuICAgIHRoaXMudXZzX3VpbnQzMiA9IG5ldyBVaW50MzJBcnJheSg0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVVdnM7XG5cbi8qKlxuICogU2V0cyB0aGUgdGV4dHVyZSBVdnMgYmFzZWQgb24gdGhlIGdpdmVuIGZyYW1lIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gZnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIGJhc2VGcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gcm90YXRlIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgcm90YXRlZFxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZVV2cy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZyYW1lLCBiYXNlRnJhbWUsIHJvdGF0ZSlcbntcbiAgICB2YXIgdHcgPSBiYXNlRnJhbWUud2lkdGg7XG4gICAgdmFyIHRoID0gYmFzZUZyYW1lLmhlaWdodDtcblxuICAgIGlmKHJvdGF0ZSlcbiAgICB7XG4gICAgICAgIHRoaXMueDAgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSBmcmFtZS55IC8gdGg7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy54MCA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcbiAgICB9XG5cbiAgICB0aGlzLnV2c191aW50MzJbMF0gPSAoKCh0aGlzLnkwICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDAgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsxXSA9ICgoKHRoaXMueTEgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MSAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzJdID0gKCgodGhpcy55MiAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngyICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbM10gPSAoKCh0aGlzLnkzICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDMgKiA2NTUzNSkgJiAweEZGRkYpO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIG9mIGEgW3BsYXlpbmddIFZpZGVvLlxuICpcbiAqIFZpZGVvIGJhc2UgdGV4dHVyZXMgbWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QgaW4gdGhlaXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNldmVyYWwgd2F5cywgc3VjaCBhczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCgnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHsgc3JjOiAnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9KTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbJy92aWRlby53ZWJtJywgJy92aWRlby5tcDQnXSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoW1xuICogICAgIHsgc3JjOiAnL3ZpZGVvLndlYm0nLCBtaW1lOiAndmlkZW8vd2VibScgfSxcbiAqICAgICB7IHNyYzogJy92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9XG4gKiBdKTtcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgW1wiZGV1c1wiIGRlbW9dKGh0dHA6Ly93d3cuZ29vZGJveWRpZ2l0YWwuY29tL3BpeGlqcy9leGFtcGxlcy9kZXVzLykuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkJhc2VUZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gVmlkZW9CYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmlkZW8gc291cmNlIGVsZW1lbnQgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIC8vIGhvb2sgaW4gaGVyZSB0byBjaGVjayBpZiB2aWRlbyBpcyBhbHJlYWR5IGF2YWlsYWJsZS5cbiAgICAvLyBCYXNlVGV4dHVyZSBsb29rcyBmb3IgYSBzb3VyY2UuY29tcGxldGUgYm9vbGVhbiwgcGx1cyB3aWR0aCAmIGhlaWdodC5cblxuICAgIGlmICgoc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0VOT1VHSF9EQVRBIHx8IHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9GVVRVUkVfREFUQSkgJiYgc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICBzb3VyY2UuY29tcGxldGUgPSB0cnVlO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgc291cmNlLCBzY2FsZU1vZGUpO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBiYXNlIHRleHR1cmUgYXV0b21hdGljYWxseSB1cGRhdGUgaXRzZWxmLCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX29uVXBkYXRlID0gdGhpcy5fb25VcGRhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkNhblBsYXkgPSB0aGlzLl9vbkNhblBsYXkuYmluZCh0aGlzKTtcblxuICAgIGlmICghc291cmNlLmNvbXBsZXRlKVxuICAgIHtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIC8vIHN0YXJ0ZWQgcGxheWluZy4uXG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fb25QbGF5U3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX29uUGxheVN0b3AuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fX2xvYWRlZCA9IGZhbHNlO1xufVxuXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZVRleHR1cmUucHJvdG90eXBlKTtcblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmlkZW9CYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9CYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3Agb2YgdGhlIHZpZGVvIGJhc2UgdGV4dHVyZSwgb25seSBydW5zIHdoZW4gYXV0b1VwZGF0ZSBpcyBzZXQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUnVucyB0aGUgdXBkYXRlIGxvb3Agd2hlbiB0aGUgdmlkZW8gaXMgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBwYXVzZSBldmVudCBpcyB0cmlnZ2VyZWQsIHN0b3BzIHRoZSB1cGRhdGUgbG9vcFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgdmlkZW8gaXMgbG9hZGVkIGFuZCByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uQ2FuUGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2UudmlkZW9XaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnNvdXJjZS52aWRlb0hlaWdodDtcblxuICAgICAgICB0aGlzLnNvdXJjZS5wbGF5KCk7XG5cbiAgICAgICAgLy8gcHJldmVudCBtdWx0aXBsZSBsb2FkZWQgZGlzcGF0Y2hlcy4uXG4gICAgICAgIGlmICghdGhpcy5fX2xvYWRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHRoaXMuc291cmNlLl9waXhpSWQgXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlLl9waXhpSWQ7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogTWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXZpZGVvLl9waXhpSWQpXG4gICAge1xuICAgICAgICB2aWRlby5fcGl4aUlkID0gJ3ZpZGVvXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3ZpZGVvLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IFZpZGVvQmFzZVRleHR1cmUodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHZpZGVvLl9waXhpSWQgXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBCYXNlVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqIFRoaXMgQmFzZVRleHR1cmUgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYSB0ZXh0dXJlXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvU3JjIHtzdHJpbmd8b2JqZWN0fHN0cmluZ1tdfG9iamVjdFtdfSBUaGUgVVJMKHMpIGZvciB0aGUgdmlkZW8uXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLnNyY10ge3N0cmluZ30gT25lIG9mIHRoZSBzb3VyY2UgdXJscyBmb3IgdGhlIHZpZGVvXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLm1pbWVdIHtzdHJpbmd9IFRoZSBtaW1ldHlwZSBvZiB0aGUgdmlkZW8gKGUuZy4gJ3ZpZGVvL21wNCcpLiBJZiBub3Qgc3BlY2lmaWVkXG4gKiAgdGhlIHVybCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBtaW1lIHR5cGUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwgPSBmdW5jdGlvbiAodmlkZW9TcmMsIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXG4gICAgLy8gYXJyYXkgb2Ygb2JqZWN0cyBvciBzdHJpbmdzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW9TcmMpKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWRlb1NyYy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjW2ldLnNyYyB8fCB2aWRlb1NyY1tpXSwgdmlkZW9TcmNbaV0ubWltZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNpbmdsZSBvYmplY3Qgb3Igc3RyaW5nXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjLnNyYyB8fCB2aWRlb1NyYywgdmlkZW9TcmMubWltZSkpO1xuICAgIH1cblxuICAgIHZpZGVvLmxvYWQoKTtcbiAgICB2aWRlby5wbGF5KCk7XG5cbiAgICByZXR1cm4gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSk7XG59O1xuXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzID0gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsO1xuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2UocGF0aCwgdHlwZSlcbntcbiAgICBpZiAoIXR5cGUpXG4gICAge1xuICAgICAgICB0eXBlID0gJ3ZpZGVvLycgKyBwYXRoLnN1YnN0cihwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gcGF0aDtcbiAgICBzb3VyY2UudHlwZSA9IHR5cGU7XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgLy8gSW50ZXJuYWwgZXZlbnQgdXNlZCBieSBjb21wb3NlZCBlbWl0dGVyXG4gICAgVElDSyA9ICd0aWNrJztcblxuLyoqXG4gKiBBIFRpY2tlciBjbGFzcyB0aGF0IHJ1bnMgYW4gdXBkYXRlIGxvb3AgdGhhdCBvdGhlciBvYmplY3RzIGxpc3RlbiB0by5cbiAqIFRoaXMgY2xhc3MgaXMgY29tcG9zZWQgYXJvdW5kIGFuIEV2ZW50RW1pdHRlciBvYmplY3QgdG8gYWRkIGxpc3RlbmVyc1xuICogbWVhbnQgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lLlxuICogQW5pbWF0aW9uIGZyYW1lcyBhcmUgcmVxdWVzdGVkIG9ubHkgd2hlbiBuZWNlc3NhcnksXG4gKiBlLmcuIFdoZW4gdGhlIHRpY2tlciBpcyBzdGFydGVkIGFuZCB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbmZ1bmN0aW9uIFRpY2tlcigpXG57XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRpY2sgbWV0aG9kIGJvdW5kIHRvIHRpY2tlciBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaW4gZWFybHkgMjAxNSwgRnVuY3Rpb24uYmluZFxuICAgICAqIGlzIHN0aWxsIDYwJSBzbG93ZXIgaW4gaGlnaCBwZXJmb3JtYW5jZSBzY2VuYXJpb3MuXG4gICAgICogQWxzbyBzZXBhcmF0aW5nIGZyYW1lIHJlcXVlc3RzIGZyb20gdXBkYXRlIG1ldGhvZFxuICAgICAqIHNvIGxpc3RlbmVycyBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGFuZCB3aXRoXG4gICAgICogYW55IGFuaW1hdGlvbiBBUEksIGp1c3QgaW52b2tlIHRpY2tlci51cGRhdGUodGltZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RpY2sgPSBmdW5jdGlvbiBfdGljayh0aW1lKSB7XG5cbiAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgbm93XG4gICAgICAgICAgICBfdGhpcy51cGRhdGUodGltZSk7XG4gICAgICAgICAgICAvLyBMaXN0ZW5lciBzaWRlIGVmZmVjdHMgbWF5IGhhdmUgbW9kaWZpZWQgdGlja2VyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQgJiYgX3RoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiBfdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fdGljayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZW1pdHRlciB1c2VkIHRvIGZpcmUgJ3RpY2snIGV2ZW50XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9lbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY3VycmVudCBmcmFtZSByZXF1ZXN0IElEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdmFsdWUgbWFuYWdlZCBieSBtaW5GUFMgcHJvcGVydHkgc2V0dGVyIGFuZCBnZXR0ZXIuXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHVwZGF0ZXMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBzaG91bGQgaW52b2tlIHRoZSBtZXRob2RcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBhdXRvbWF0aWNhbGx5XG4gICAgICogd2hlbiBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1N0YXJ0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTY2FsYXIgdGltZSB2YWx1ZSBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbWluRlBTfVxuICAgICAqIGFuZCBpcyBzY2FsZWQgd2l0aCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfS5cbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhcCBtYXkgYmUgZXhjZWVkZWQgYnkgc2NhbGluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kZWx0YVRpbWUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGltZSBlbGFwc2VkIGluIG1pbGxpc2Vjb25kcyBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBPcHBvc2VkIHRvIHdoYXQgdGhlIHNjYWxhciB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX1cbiAgICAgKiBpcyBiYXNlZCwgdGhpcyB2YWx1ZSBpcyBuZWl0aGVyIGNhcHBlZCBub3Igc2NhbGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMSAvIFRBUkdFVF9GUE1TXG4gICAgICovXG4gICAgdGhpcy5lbGFwc2VkTVMgPSAxIC8gQ09OU1QuVEFSR0VUX0ZQTVM7IC8vIGRlZmF1bHQgdG8gdGFyZ2V0IGZyYW1lIHRpbWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBsYXN0IHRpbWUge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9IHdhcyBpbnZva2VkLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgYWxzbyByZXNldCBpbnRlcm5hbGx5IG91dHNpZGUgb2YgaW52b2tpbmdcbiAgICAgKiB1cGRhdGUsIGJ1dCBvbmx5IHdoZW4gYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxhc3RUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEZhY3RvciBvZiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNjYWxlcyB0aWNrZXIuZGVsdGFUaW1lIHRvIHdoYXQgd291bGQgYmVcbiAgICAgKiAvLyB0aGUgZXF1aXZhbGVudCBvZiBhcHByb3hpbWF0ZWx5IDEyMCBGUFNcbiAgICAgKiB0aWNrZXIuc3BlZWQgPSAyO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICogYHRydWVgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBgZmFsc2VgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RvcH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIFdoaWxlIGBmYWxzZWAsIHRoaXMgdmFsdWUgbWF5IGNoYW5nZSB0byBgdHJ1ZWAgaW4gdGhlXG4gICAgICogZXZlbnQgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGJlaW5nIGB0cnVlYFxuICAgICAqIGFuZCBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWNrZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lcyBwZXIgc2Vjb25kIGF0IHdoaWNoIHRoaXMgdGlja2VyIGlzIHJ1bm5pbmcuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgYXBwcm94aW1hdGVseSA2MCBpbiBtb3N0IG1vZGVybiBicm93c2Vycy5cbiAgICAgKiAqKk5vdGU6KiogVGhpcyBkb2VzIG5vdCBmYWN0b3IgaW4gdGhlIHZhbHVlIG9mXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0sIHdoaWNoIGlzIHNwZWNpZmljXG4gICAgICogdG8gc2NhbGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBGUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5lbGFwc2VkTVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGFsbG93ZWQgdG9cbiAgICAgKiBlbGFwc2UgYmV0d2VlbiBpbnZva2luZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0uXG4gICAgICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNhcCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gICAgICogYnV0IGRvZXMgbm90IGVmZmVjdCB0aGUgbWVhc3VyZWQgdmFsdWUgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNGUFN9LlxuICAgICAqIFdoZW4gc2V0dGluZyB0aGlzIHByb3BlcnR5IGl0IGlzIGNsYW1wZWQgdG8gYSB2YWx1ZSBiZXR3ZWVuXG4gICAgICogYDBgIGFuZCBgUElYSS5UQVJHRVRfRlBNUyAqIDEwMDBgLlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICBtaW5GUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZwcylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gQ2xhbXA6IDAgdG8gVEFSR0VUX0ZQTVNcbiAgICAgICAgICAgIHZhciBtaW5GUE1TID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZnBzKSAvIDEwMDAsIENPTlNULlRBUkdFVF9GUE1TKTtcbiAgICAgICAgICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEgLyBtaW5GUE1TO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbFxuICogZW1pdHRlciBoYXMgbGlzdGVuZXJzLCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fcmVxdWVzdElmTmVlZGVkID0gZnVuY3Rpb24gX3JlcXVlc3RJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiB0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIC8vIGVuc3VyZSBjYWxsYmFja3MgZ2V0IGNvcnJlY3QgZGVsdGFcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fdGljayk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IGNhbmNlbHMgYSBwZW5kaW5nIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9jYW5jZWxJZk5lZWRlZCA9IGZ1bmN0aW9uIF9jYW5jZWxJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIHRoZSB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZCBpdCBjaGVja3MgaWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHlcbiAqIGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy4gSWYgdGhlc2VcbiAqIGNvbmRpdGlvbnMgYXJlIG1ldCwgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgdGlja2VyIGhhcyBub3RcbiAqIGJlZW4gc3RhcnRlZCwgYnV0IGF1dG9TdGFydCBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHRpY2tlciBzdGFydHMgbm93LFxuICogYW5kIGNvbnRpbnVlcyB3aXRoIHRoZSBwcmV2aW91cyBjb25kaXRpb25zIHRvIHJlcXVlc3QgYSBuZXcgZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fc3RhcnRJZlBvc3NpYmxlID0gZnVuY3Rpb24gX3N0YXJ0SWZQb3NzaWJsZSgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmF1dG9TdGFydClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb259IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIHVwZGF0ZXNcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb25jZX0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3Igb25lIHVwZGF0ZVxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIGFkZE9uY2UoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbmNlKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb2ZmfSBpbnRlcm5hbGx5IGZvciAndGljaycgZXZlbnQuXG4gKiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyBmb3IgJ3RpY2snIGV2ZW50LlxuICogSWYgaXQgZG9lcywgdGhlbiBpdCBjYW5jZWxzIHRoZSBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHBhcmFtIFtmbl0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZFxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0IHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vZmYoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgaWYgKCF0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyBsaXN0ZW5lcnNcbiAqIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIHN0YXJ0KClcbntcbiAgICBpZiAoIXRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgcmVxdWVzdGVkXG4gKiBhbiBhbmltYXRpb24gZnJhbWUgaXQgaXMgY2FuY2VsZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcCgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVHJpZ2dlcnMgYW4gdXBkYXRlLiBBbiB1cGRhdGUgZW50YWlscyBzZXR0aW5nIHRoZVxuICogY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2VsYXBzZWRNU30sXG4gKiB0aGUgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gKiBpbnZva2luZyBhbGwgbGlzdGVuZXJzIHdpdGggY3VycmVudCBkZWx0YVRpbWUsXG4gKiBhbmQgdGhlbiBmaW5hbGx5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNsYXN0VGltZX1cbiAqIHdpdGggdGhlIHZhbHVlIG9mIGN1cnJlbnRUaW1lIHRoYXQgd2FzIHByb3ZpZGVkLlxuICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBieSBhbmltYXRpb25cbiAqIGZyYW1lIGNhbGxiYWNrcyBpZiB0aGUgdGlja2VyIGluc3RhbmNlIGhhcyBiZWVuIHN0YXJ0ZWRcbiAqIGFuZCBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSBbY3VycmVudFRpbWU9cGVyZm9ybWFuY2Uubm93KCldIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn0gdGhlIGN1cnJlbnQgdGltZSBvZiBleGVjdXRpb25cbiAqL1xuVGlja2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoY3VycmVudFRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWRNUztcblxuICAgIC8vIEFsbG93IGNhbGxpbmcgdXBkYXRlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBjdXJyZW50VGltZS5cbiAgICBjdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIHx8IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIC8vIFNhdmUgdW5jYXBwZWQgZWxhcHNlZE1TIGZvciBtZWFzdXJlbWVudFxuICAgIGVsYXBzZWRNUyA9IHRoaXMuZWxhcHNlZE1TID0gY3VycmVudFRpbWUgLSB0aGlzLmxhc3RUaW1lO1xuXG4gICAgLy8gY2FwIHRoZSBtaWxsaXNlY29uZHMgZWxhcHNlZCB1c2VkIGZvciBkZWx0YVRpbWVcbiAgICBpZiAoZWxhcHNlZE1TID4gdGhpcy5fbWF4RWxhcHNlZE1TKVxuICAgIHtcbiAgICAgICAgZWxhcHNlZE1TID0gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgIH1cblxuICAgIHRoaXMuZGVsdGFUaW1lID0gZWxhcHNlZE1TICogQ09OU1QuVEFSR0VUX0ZQTVMgKiB0aGlzLnNwZWVkO1xuXG4gICAgLy8gSW52b2tlIGxpc3RlbmVycyBhZGRlZCB0byBpbnRlcm5hbCBlbWl0dGVyXG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KFRJQ0ssIHRoaXMuZGVsdGFUaW1lKTtcblxuICAgIHRoaXMubGFzdFRpbWUgPSBjdXJyZW50VGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGlja2VyO1xuIiwidmFyIFRpY2tlciA9IHJlcXVpcmUoJy4vVGlja2VyJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZCB0aWNrZXIgaW5zdGFuY2UgdXNlZCBieSB7QGxpbmsgUElYSS5leHRyYXMuTW92aWVDbGlwfS5cbiAqIGFuZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICogVGhlIHByb3BlcnR5IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBpcyBzZXQgdG8gYHRydWVgXG4gKiBmb3IgdGhpcyBpbnN0YW5jZS4gUGxlYXNlIGZvbGxvdyB0aGUgZXhhbXBsZXMgZm9yIHVzYWdlLCBpbmNsdWRpbmdcbiAqIGhvdyB0byBvcHQtb3V0IG9mIGF1dG8tc3RhcnRpbmcgdGhlIHNoYXJlZCB0aWNrZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciB0aWNrZXIgPSBQSVhJLnRpY2tlci5zaGFyZWQ7XG4gKiAvLyBTZXQgdGhpcyB0byBwcmV2ZW50IHN0YXJ0aW5nIHRoaXMgdGlja2VyIHdoZW4gbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqIC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyB0cnVlIG9ubHkgZm9yIHRoZSBQSVhJLnRpY2tlci5zaGFyZWQgaW5zdGFuY2UuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiAvLyBGWUksIGNhbGwgdGhpcyB0byBlbnN1cmUgdGhlIHRpY2tlciBpcyBzdG9wcGVkLiBJdCBzaG91bGQgYmUgc3RvcHBlZFxuICogLy8gaWYgeW91IGhhdmUgbm90IGF0dGVtcHRlZCB0byByZW5kZXIgYW55dGhpbmcgeWV0LlxuICogdGlja2VyLnN0b3AoKTtcbiAqIC8vIENhbGwgdGhpcyB3aGVuIHlvdSBhcmUgcmVhZHkgZm9yIGEgcnVubmluZyBzaGFyZWQgdGlja2VyLlxuICogdGlja2VyLnN0YXJ0KCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFlvdSBtYXkgdXNlIHRoZSBzaGFyZWQgdGlja2VyIHRvIHJlbmRlci4uLlxuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoODAwLCA2MDApO1xuICogdmFyIHN0YWdlID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiB2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIpO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZW5kZXJlci52aWV3KTtcbiAqIHRpY2tlci5hZGQoZnVuY3Rpb24gKHRpbWUpIHtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE9yIHlvdSBjYW4ganVzdCB1cGRhdGUgaXQgbWFudWFsbHkuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiB0aWNrZXIuc3RvcCgpO1xuICogZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XG4gKiAgICAgdGlja2VyLnVwZGF0ZSh0aW1lKTtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAqIH1cbiAqIGFuaW1hdGUocGVyZm9ybWFuY2Uubm93KCkpO1xuICpcbiAqIEB0eXBlIHtQSVhJLnRpY2tlci5UaWNrZXJ9XG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xudmFyIHNoYXJlZCA9IG5ldyBUaWNrZXIoKTtcbnNoYXJlZC5hdXRvU3RhcnQgPSB0cnVlO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS50aWNrZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc2hhcmVkOiBzaGFyZWQsXG4gICAgVGlja2VyOiBUaWNrZXJcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gZnVuY3Rpb24gKHNpemUpXG57XG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBhcnJheSwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgXG4gICAgdmFyIHRvdGFsSW5kaWNlcyA9IHNpemUgKiA2O1xuXG4gICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodG90YWxJbmRpY2VzKTtcblxuXHQvLyBmaWxsIHRoZSBpbmRpY2VzIHdpdGggdGhlIHF1YWRzIHRvIGRyYXdcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IHRvdGFsSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICBpbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICBpbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHM7IiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudXRpbHNcbiAqL1xudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgX3VpZDogMCxcbiAgICBfc2FpZEhlbGxvOiBmYWxzZSxcblxuICAgIEV2ZW50RW1pdHRlcjogICByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgcGx1Z2luVGFyZ2V0OiAgIHJlcXVpcmUoJy4vcGx1Z2luVGFyZ2V0JyksXG4gICAgYXN5bmM6ICAgICAgICAgIHJlcXVpcmUoJ2FzeW5jJyksXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZS5cbiAgICAgKi9cbiAgICB1aWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICByZXR1cm4gKyt1dGlscy5fdWlkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYW4gW1IsIEcsIEJdIGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHBhcmFtICB7bnVtYmVyW119IFtvdXQ9W11dXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgW1IsIEcsIEJdIG9mIHRoZSBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgycmdiOiBmdW5jdGlvbiAoaGV4LCBvdXQpXG4gICAge1xuICAgICAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICAgICAgb3V0WzBdID0gKGhleCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMV0gPSAoaGV4ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzJdID0gKGhleCAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnN0cmluZzogZnVuY3Rpb24gKGhleClcbiAgICB7XG4gICAgICAgIGhleCA9IGhleC50b1N0cmluZygxNik7XG4gICAgICAgIGhleCA9ICcwMDAwMDAnLnN1YnN0cigwLCA2IC0gaGV4Lmxlbmd0aCkgKyBoZXg7XG5cbiAgICAgICAgcmV0dXJuICcjJyArIGhleDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkgdG8gYSBoZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmdiIHtudW1iZXJbXX1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb2xvciBudW1iZXJcbiAgICAgKi9cbiAgICByZ2IyaGV4OiBmdW5jdGlvbiAocmdiKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgocmdiWzBdKjI1NSA8PCAxNikgKyAocmdiWzFdKjI1NSA8PCA4KSArIHJnYlsyXSoyNTUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZFxuICAgICAqL1xuICAgIGNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXM6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBuZ0hlYWQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFCQVFNQUFBREQ4cDJPQUFBQUExQk1WRVgvJztcbiAgICAgICAgdmFyIHBuZ0VuZCA9ICdBQUFBQ2tsRVFWUUkxMk5nQUFBQUFnQUI0aUc4TXdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG4gICAgICAgIHZhciBtYWdlbnRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSA2O1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcblxuICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1hZ2VudGEsIDAsIDApO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh5ZWxsb3csIDIsIDApO1xuXG4gICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwwLDEsMSkuZGF0YTtcblxuICAgICAgICByZXR1cm4gKGRhdGFbMF0gPT09IDI1NSAmJiBkYXRhWzFdID09PSAwICYmIGRhdGFbMl0gPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIG51bWJlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICogdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIFN0YXJsaW5nIEZyYW1ld29yayBhcyBpdHMgcHJldHR5IG5lYXQgOylcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICovXG4gICAgZ2V0TmV4dFBvd2VyT2ZUd286IGZ1bmN0aW9uIChudW1iZXIpXG4gICAge1xuICAgICAgICAvLyBzZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG93ZXJfb2ZfdHdvI0Zhc3RfYWxnb3JpdGhtX3RvX2NoZWNrX2lmX2FfcG9zaXRpdmVfbnVtYmVyX2lzX2FfcG93ZXJfb2ZfdHdvXG4gICAgICAgIGlmIChudW1iZXIgPiAwICYmIChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDE7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPCBudW1iZXIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzdWx0IDw8PSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBtYWtlIGEgcG93ZXIgb2YgdHdvIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9XG4gICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybiAod2lkdGggPiAwICYmICh3aWR0aCAmICh3aWR0aCAtIDEpKSA9PT0gMCAmJiBoZWlnaHQgPiAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIGFuIGFzc2V0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwcmVmaXhcbiAgICAgKiB1c2VkIGJ5IHNwcml0ZXNoZWV0cyBhbmQgaW1hZ2UgdXJsc1xuICAgICAqXG4gICAgICogQHBhcmFtIHVybCB7c3RyaW5nfSB0aGUgaW1hZ2UgcGF0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRSZXNvbHV0aW9uT2ZVcmw6IGZ1bmN0aW9uICh1cmwpXG4gICAge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IENPTlNULlJFVElOQV9QUkVGSVguZXhlYyh1cmwpO1xuXG4gICAgICAgIGlmIChyZXNvbHV0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlc29sdXRpb25bMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvZ3Mgb3V0IHRoZSB2ZXJzaW9uIGFuZCByZW5kZXJlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBydW5uaW5nIGluc3RhbmNlIG9mIFBJWEkuXG4gICAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoaXMgbWVzc2FnZSB5b3UgY2FuIHNldCBgUElYSS51dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtgXG4gICAgICogc28gdGhlIGxpYnJhcnkgdGhpbmtzIGl0IGFscmVhZHkgc2FpZCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgZG9pbmcgdGhhdCB3aWxsIGZvcmV2ZXJcbiAgICAgKiBtYWtlcyB5b3UgYSBqZXJrIGZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBzdHJpbmcgcmVuZGVyZXIgdHlwZSB0byBsb2cuXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIHNheUhlbGxvOiBmdW5jdGlvbiAodHlwZSlcbiAgICB7XG4gICAgICAgIGlmICh1dGlscy5fc2FpZEhlbGxvKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZScpID4gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW1xuICAgICAgICAgICAgICAgICdcXG4gJWMgJWMgJWMgUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSDinLAgJyArIHR5cGUgKyAnIOKcsCAgJWMgJyArICcgJWMgJyArICcgaHR0cDovL3d3dy5waXhpanMuY29tLyAgJWMgJWMg4pmlJWPimaUlY+KZpSBcXG5cXG4nLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjY2YTU7IGJhY2tncm91bmQ6ICMwMzAzMDc7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmZjM2RjOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7J1xuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3MpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1BpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0gJyArIHR5cGUgKyAnIC0gaHR0cDovL3d3dy5waXhpanMuY29tLycpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmb3IgY2hlY2tpbmcgZm9yIHdlYmdsIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNXZWJHTFN1cHBvcnRlZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHZhciBjb250ZXh0T3B0aW9ucyA9IHsgc3RlbmNpbDogdHJ1ZSB9O1xuICAgICAgICB0cnlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgY29udGV4dE9wdGlvbnMpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBjb250ZXh0T3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIShnbCAmJiBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnN0ZW5jaWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzaWduIG9mIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIG4ge251bWJlcn1cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIG4gaXMgMCwgLTEgaWYgbiBpcyBuZWdhdGl2ZSwgMSBpZiBuIGkgcG9zaXRpdmVcbiAgICAgKi9cbiAgICBzaWduOiBmdW5jdGlvbiAobilcbiAgICB7XG4gICAgICAgIHJldHVybiBuID8gKG4gPCAwID8gLTEgOiAxKSA6IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZUl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydElkeCBUaGUgaW5kZXggdG8gYmVnaW4gcmVtb3ZpbmcgZnJvbSAoaW5jbHVzaXZlKVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVJdGVtczogZnVuY3Rpb24gKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KVxuICAgIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN0YXJ0SWR4ID49IGxlbmd0aCB8fCByZW1vdmVDb3VudCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVtb3ZlQ291bnQgPSAoc3RhcnRJZHgrcmVtb3ZlQ291bnQgPiBsZW5ndGggPyBsZW5ndGgtc3RhcnRJZHggOiByZW1vdmVDb3VudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydElkeCwgbGVuID0gbGVuZ3RoLXJlbW92ZUNvdW50OyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyLmxlbmd0aCA9IGxlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge30sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge31cbn07XG4iLCIvKipcbiAqIE1peGlucyBmdW5jdGlvbmFsaXR5IHRvIG1ha2UgYW4gb2JqZWN0IGhhdmUgXCJwbHVnaW5zXCIuXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS51dGlsc1xuICogQHBhcmFtIG9iaiB7b2JqZWN0fSBUaGUgb2JqZWN0IHRvIG1peCBpbnRvLlxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgcGx1Z2luVGFyZ2V0Lm1peGluKE15T2JqZWN0KTtcbiAqL1xuZnVuY3Rpb24gcGx1Z2luVGFyZ2V0KG9iailcbntcbiAgICBvYmouX19wbHVnaW5zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcGx1Z2luIHRvIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHBsdWdpbk5hbWUge3N0cmluZ30gVGhlIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQuXG4gICAgICogQHBhcmFtIGN0b3Ige0Z1bmN0aW9ufSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBwbHVnaW4uXG4gICAgICovXG4gICAgb2JqLnJlZ2lzdGVyUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGN0b3IpXG4gICAge1xuICAgICAgICBvYmouX19wbHVnaW5zW3BsdWdpbk5hbWVdID0gY3RvcjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5pbml0UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLnBsdWdpbnMgfHwge307XG5cbiAgICAgICAgZm9yICh2YXIgbyBpbiBvYmouX19wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBuZXcgKG9iai5fX3BsdWdpbnNbb10pKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmRlc3Ryb3lQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGZvciAodmFyIG8gaW4gdGhpcy5wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG51bGw7XG4gICAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvKipcbiAgICAgKiBNaXhlcyBpbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGx1Z2luVGFyZ2V0IGludG8gYW5vdGhlciBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3Qge29iamVjdH0gVGhlIG9iaiB0byBtaXggaW50b1xuICAgICAqL1xuICAgIG1peGluOiBmdW5jdGlvbiBtaXhpbihvYmopXG4gICAge1xuICAgICAgICBwbHVnaW5UYXJnZXQob2JqKTtcbiAgICB9XG59O1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKSxcbiAgICBtZXNoID0gcmVxdWlyZSgnLi9tZXNoJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi9leHRyYXMnKSxcbiAgICBmaWx0ZXJzID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgU3ByaXRlQmF0Y2hcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkuUGFydGljbGVDb250YWluZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlQmF0Y2ggPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuJyk7XG59O1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIEFzc2V0TG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLmxvYWRlcnMuTG9hZGVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuQXNzZXRMb2FkZXIgPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy4nKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvcmUsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RhZ2VcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RhZ2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignWW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIFBJWEkgU3RhZ2UgYW55IG1vcmUsIHlvdSBjYW4gc2ltcGx5IHJlbmRlciBhbnkgY29udGFpbmVyLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgRGlzcGxheU9iamVjdENvbnRhaW5lclxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBEaXNwbGF5T2JqZWN0Q29udGFpbmVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Rpc3BsYXlPYmplY3RDb250YWluZXIgaGFzIGJlZW4gc2hvcnRlbmVkIHRvIENvbnRhaW5lciwgcGxlYXNlIHVzZSBDb250YWluZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdHJpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdHJpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgU3RyaXAgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBNZXNoIGFuZCBtb3ZlZCB0byBtZXNoLk1lc2gsIHBsZWFzZSB1c2UgbWVzaC5NZXNoIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guTWVzaDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFJvcGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLlJvcGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgUm9wZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgUm9wZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBtZXNoLlJvcGUsIHBsZWFzZSB1c2UgbWVzaC5Sb3BlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guUm9wZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIE1vdmllQ2xpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXBcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgTW92aWVDbGlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBNb3ZpZUNsaXAgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLk1vdmllQ2xpcCwgcGxlYXNlIHVzZSBleHRyYXMuTW92aWVDbGlwIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5Nb3ZpZUNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUaWxpbmdTcHJpdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRpbGluZ1Nwcml0ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGlsaW5nU3ByaXRlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5UaWxpbmdTcHJpdGUsIHBsZWFzZSB1c2UgZXh0cmFzLlRpbGluZ1Nwcml0ZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuVGlsaW5nU3ByaXRlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQml0bWFwVGV4dFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJpdG1hcFRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJpdG1hcFRleHQgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLkJpdG1hcFRleHQsIHBsZWFzZSB1c2UgZXh0cmFzLkJpdG1hcFRleHQgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLkJpdG1hcFRleHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBibGVuZE1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgYmxlbmRNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYmxlbmRNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBCTEVORF9NT0RFUywgcGxlYXNlIHVzZSBCTEVORF9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkJMRU5EX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2NhbGVNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIHNjYWxlTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHNjYWxlTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gU0NBTEVfTU9ERVMsIHBsZWFzZSB1c2UgU0NBTEVfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TQ0FMRV9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5CYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCYXNlVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuQmFzZVRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5UZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLlRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5UZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5UZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgbWF0aFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIG1hdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBtYXRoIG5hbWVzcGFjZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgYWNjZXNzIG1lbWJlcnMgYWxyZWFkeSBhY2Nlc3NpYmxlIG9uIFBJWEkuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBQSVhJLlNwcml0ZSNzZXRUZXh0dXJlXG4gKiBAc2VlIFBJWEkuU3ByaXRlI3RleHR1cmVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0dXJlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0dXJlIHByb3BlcnR5LCBlLmcgOiBzcHJpdGUudGV4dHVyZSA9IHRleHR1cmU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuZXh0cmFzLkJpdG1hcFRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteUJpdG1hcFRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15VGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFN0eWxlXG4gKiBAc2VlIFBJWEkuVGV4dCNzdHlsZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpXG57XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgIGNvbnNvbGUud2Fybignc2V0U3R5bGUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5LCBlLmcgOiBteVRleHQuc3R5bGUgPSBzdHlsZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAc2VlIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHR1cmUucHJvdG90eXBlLnNldEZyYW1lID0gZnVuY3Rpb24oZnJhbWUpXG57XG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIGNvbnNvbGUud2Fybignc2V0RnJhbWUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIGZyYW1lIHByb3BlcnR5LCBlLmcgOiBteVRleHR1cmUuZnJhbWUgPSBmcmFtZTsnKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpbHRlcnMsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkFic3RyYWN0RmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkFic3RyYWN0RmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEFic3RyYWN0RmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuQWJzdHJhY3RGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEFic3RyYWN0RmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQWJzdHJhY3RGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuRlhBQUZpbHRlclxuICAgICAqIEBzZWUgUElYSS5GWEFBRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEZYQUFGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5GWEFBRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBGWEFBRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuRlhBQUZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgU3ByaXRlTWFza0ZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIFNwcml0ZU1hc2tGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TcHJpdGVNYXNrRmlsdGVyO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS51dGlscy51dWlkXG4gKiBAc2VlIFBJWEkudXRpbHMudWlkXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gKi9cbmNvcmUudXRpbHMudXVpZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29uc29sZS53YXJuKCd1dGlscy51dWlkKCkgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB1dGlscy51aWQoKSBmcm9tIG5vdyBvbi4nKTtcbiAgICByZXR1cm4gY29yZS51dGlscy51aWQoKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIEJpdG1hcFRleHQgb2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0IHVzaW5nIGJpdG1hcCBmb250LiBUb1xuICogc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLCAnXFxyJyBvciAnXFxyXFxuJyBpbiB5b3VyIHN0cmluZy4gWW91IGNhbiBnZW5lcmF0ZSB0aGUgZm50IGZpbGVzIHVzaW5nOlxuICpcbiAqIEEgQml0bWFwVGV4dCBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGZvbnQgaXMgbG9hZGVkXG4gKlxuICogYGBganNcbiAqIC8vIGluIHRoaXMgY2FzZSB0aGUgZm9udCBpcyBpbiBhIGZpbGUgY2FsbGVkICdkZXN5cmVsLmZudCdcbiAqIHZhciBiaXRtYXBUZXh0ID0gbmV3IFBJWEkuZXh0cmFzLkJpdG1hcFRleHQoXCJ0ZXh0IHVzaW5nIGEgZmFuY3kgZm9udCFcIiwge2ZvbnQ6IFwiMzVweCBEZXN5cmVsXCIsIGFsaWduOiBcInJpZ2h0XCJ9KTtcbiAqIGBgYFxuICpcbiAqXG4gKiBodHRwOi8vd3d3LmFuZ2VsY29kZS5jb20vcHJvZHVjdHMvYm1mb250LyBmb3Igd2luZG93cyBvclxuICogaHR0cDovL3d3dy5ibWdseXBoLmNvbS8gZm9yIG1hYy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIHN0eWxlIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gc3R5bGUuZm9udCB7c3RyaW5nfG9iamVjdH0gVGhlIGZvbnQgZGVzY3JpcHRvciBmb3IgdGhlIG9iamVjdCwgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZyBvZiBmb3JtXG4gKiAgICAgIFwiMjRweCBGb250TmFtZVwiIG9yIFwiRm9udE5hbWVcIiBvciBhcyBhbiBvYmplY3Qgd2l0aCBleHBsaWNpdCBuYW1lL3NpemUgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5uYW1lXSB7c3RyaW5nfSBUaGUgYml0bWFwIGZvbnQgaWRcbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5zaXplXSB7bnVtYmVyfSBUaGUgc2l6ZSBvZiB0aGUgZm9udCBpbiBwaXhlbHMsIGUuZy4gMjRcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3RcbiAqICAgICAgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS50aW50PTB4RkZGRkZGXSB7bnVtYmVyfSBUaGUgdGludCBjb2xvclxuICovXG5mdW5jdGlvbiBCaXRtYXBUZXh0KHRleHQsIHN0eWxlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGxldHRlciBzcHJpdGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbHlwaHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mb250ID0ge1xuICAgICAgICB0aW50OiBzdHlsZS50aW50ICE9PSB1bmRlZmluZWQgPyBzdHlsZS50aW50IDogMHhGRkZGRkYsXG4gICAgICAgIGFsaWduOiBzdHlsZS5hbGlnbiB8fCAnbGVmdCcsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIHNpemU6IDBcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBmb250LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mb250ID0gc3R5bGUuZm9udDsgLy8gcnVuIGZvbnQgc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggd2lkdGggb2YgdGhpcyBiaXRtYXAgdGV4dCBpbiBwaXhlbHMuIElmIHRoZSB0ZXh0IHByb3ZpZGVkIGlzIGxvbmdlciB0aGFuIHRoZSB2YWx1ZSBwcm92aWRlZCwgbGluZSBicmVha3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoZSBsYXN0IHdoaXRlc3BhY2UuXG4gICAgICogRGlzYWJsZSBieSBzZXR0aW5nIHZhbHVlIHRvIDBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggbGluZSBoZWlnaHQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBUZXh0LCBpZTogd2hlbiB0cnlpbmcgdG8gdmVydGljYWxseSBhbGlnbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpcnR5IHN0YXRlIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkJpdG1hcFRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuQml0bWFwVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCaXRtYXBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCaXRtYXBUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRpbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC50aW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC50aW50ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCkgPyB2YWx1ZSA6IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdsZWZ0J1xuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGFsaWduOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQuYWxpZ247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LmFsaWduID0gdmFsdWUgfHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9udCBkZXNjcmlwdG9yIG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Rm9udH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBmb250OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWUuc2xpY2UoMSkuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gcGFyc2VJbnQodmFsdWVbMF0sIDEwKSA6IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicgPyB2YWx1ZS5zaXplIDogcGFyc2VJbnQodmFsdWUuc2l6ZSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGRhdGEgPSBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV07XG4gICAgdmFyIHBvcyA9IG5ldyBjb3JlLlBvaW50KCk7XG4gICAgdmFyIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgdmFyIGNoYXJzID0gW107XG4gICAgdmFyIGxhc3RMaW5lV2lkdGggPSAwO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBsaW5lV2lkdGhzID0gW107XG4gICAgdmFyIGxpbmUgPSAwO1xuICAgIHZhciBzY2FsZSA9IHRoaXMuX2ZvbnQuc2l6ZSAvIGRhdGEuc2l6ZTtcbiAgICB2YXIgbGFzdFNwYWNlID0gLTE7XG4gICAgdmFyIG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHQubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSB0aGlzLnRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgbGFzdFNwYWNlID0gLyhcXHMpLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpID8gaSA6IGxhc3RTcGFjZTtcblxuICAgICAgICBpZiAoLyg/OlxcclxcbnxcXHJ8XFxuKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RTcGFjZSAhPT0gLTEgJiYgdGhpcy5tYXhXaWR0aCA+IDAgJiYgcG9zLnggKiBzY2FsZSA+IHRoaXMubWF4V2lkdGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXMoY2hhcnMsIGxhc3RTcGFjZSwgaSAtIGxhc3RTcGFjZSk7XG4gICAgICAgICAgICBpID0gbGFzdFNwYWNlO1xuICAgICAgICAgICAgbGFzdFNwYWNlID0gLTE7XG5cbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFyRGF0YSA9IGRhdGEuY2hhcnNbY2hhckNvZGVdO1xuXG4gICAgICAgIGlmICghY2hhckRhdGEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZDaGFyQ29kZSAmJiBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJzLnB1c2goe3RleHR1cmU6Y2hhckRhdGEudGV4dHVyZSwgbGluZTogbGluZSwgY2hhckNvZGU6IGNoYXJDb2RlLCBwb3NpdGlvbjogbmV3IGNvcmUuUG9pbnQocG9zLnggKyBjaGFyRGF0YS54T2Zmc2V0LCBwb3MueSArIGNoYXJEYXRhLnlPZmZzZXQpfSk7XG4gICAgICAgIGxhc3RMaW5lV2lkdGggPSBwb3MueCArIChjaGFyRGF0YS50ZXh0dXJlLndpZHRoICsgY2hhckRhdGEueE9mZnNldCk7XG4gICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLnhBZHZhbmNlO1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgKGNoYXJEYXRhLnlPZmZzZXQgKyBjaGFyRGF0YS50ZXh0dXJlLmhlaWdodCkpO1xuICAgICAgICBwcmV2Q2hhckNvZGUgPSBjaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcblxuICAgIHZhciBsaW5lQWxpZ25PZmZzZXRzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IGxpbmU7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBhbGlnbk9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9mb250LmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZUFsaWduT2Zmc2V0cy5wdXNoKGFsaWduT2Zmc2V0KTtcbiAgICB9XG5cbiAgICB2YXIgbGVuQ2hhcnMgPSBjaGFycy5sZW5ndGg7XG4gICAgdmFyIHRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuQ2hhcnM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjID0gdGhpcy5fZ2x5cGhzW2ldOyAvLyBnZXQgdGhlIG5leHQgZ2x5cGggc3ByaXRlXG5cbiAgICAgICAgaWYgKGMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMudGV4dHVyZSA9IGNoYXJzW2ldLnRleHR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjID0gbmV3IGNvcmUuU3ByaXRlKGNoYXJzW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZ2x5cGhzLnB1c2goYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjLnBvc2l0aW9uLnggPSAoY2hhcnNbaV0ucG9zaXRpb24ueCArIGxpbmVBbGlnbk9mZnNldHNbY2hhcnNbaV0ubGluZV0pICogc2NhbGU7XG4gICAgICAgIGMucG9zaXRpb24ueSA9IGNoYXJzW2ldLnBvc2l0aW9uLnkgKiBzY2FsZTtcbiAgICAgICAgYy5zY2FsZS54ID0gYy5zY2FsZS55ID0gc2NhbGU7XG4gICAgICAgIGMudGludCA9IHRpbnQ7XG5cbiAgICAgICAgaWYgKCFjLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBjaGlsZHJlbi5cbiAgICBmb3IgKGkgPSBsZW5DaGFyczsgaSA8IHRoaXMuX2dseXBocy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5fZ2x5cGhzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHRXaWR0aCA9IG1heExpbmVXaWR0aCAqIHNjYWxlO1xuICAgIHRoaXMudGV4dEhlaWdodCA9IChwb3MueSArIGRhdGEubGluZUhlaWdodCkgKiBzY2FsZTtcbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSBtYXhMaW5lSGVpZ2h0ICogc2NhbGU7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvZiB0aGlzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0ZXh0IGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGdldExvY2FsQm91bmRzXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cblxuQml0bWFwVGV4dC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHJldHVybiBjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn07XG5cbkJpdG1hcFRleHQuZm9udHMgPSB7fTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgTW92aWVDbGlwIGlzIGEgc2ltcGxlIHdheSB0byBkaXNwbGF5IGFuIGFuaW1hdGlvbiBkZXBpY3RlZCBieSBhIGxpc3Qgb2YgdGV4dHVyZXMuXG4gKlxuICogYGBganNcbiAqIHZhciBhbGllbkltYWdlcyA9IFtcImltYWdlX3NlcXVlbmNlXzAxLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDIucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMy5wbmdcIixcImltYWdlX3NlcXVlbmNlXzA0LnBuZ1wiXTtcbiAqIHZhciB0ZXh0dXJlQXJyYXkgPSBbXTtcbiAqXG4gKiBmb3IgKHZhciBpPTA7IGkgPCA0OyBpKyspXG4gKiB7XG4gKiAgICAgIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZShhbGllbkltYWdlc1tpXSk7XG4gKiAgICAgIHRleHR1cmVBcnJheS5wdXNoKHRleHR1cmUpO1xuICogfTtcbiAqXG4gKiB2YXIgbWMgPSBuZXcgUElYSS5Nb3ZpZUNsaXAodGV4dHVyZUFycmF5KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmVzIHtQSVhJLlRleHR1cmVbXXxPYmplY3RbXX0gYW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuVGV4dHVyZX0gb3IgZnJhbWUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIGFuaW1hdGlvblxuICogQHBhcmFtIHRleHR1cmVzW10udGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUge0BsaW5rIFBJWEkuVGV4dHVyZX0gb2YgdGhlIGZyYW1lXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50aW1lIHtudW1iZXJ9IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWUgaW4gbXNcbiAqL1xuZnVuY3Rpb24gTW92aWVDbGlwKHRleHR1cmVzKVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZXNbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUgPyB0ZXh0dXJlc1swXSA6IHRleHR1cmVzWzBdLnRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVzID0gdGV4dHVyZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3BlZWQgdGhhdCB0aGUgTW92aWVDbGlwIHdpbGwgcGxheSBhdC4gSGlnaGVyIGlzIGZhc3RlciwgbG93ZXIgaXMgc2xvd2VyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIG1vdmllIGNsaXAgcmVwZWF0cyBhZnRlciBwbGF5aW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5sb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIE1vdmllQ2xpcCBmaW5pc2hlcyBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKi9cbiAgICB0aGlzLm9uQ29tcGxldGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRWxhcHNlZCB0aW1lIHNpbmNlIGFuaW1hdGlvbiBoYXMgYmVlbiBzdGFydGVkLCB1c2VkIGludGVybmFsbHkgdG8gZGlzcGxheSBjdXJyZW50IHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgTW92aWVDbGlwIGlzIGN1cnJlbnRseSBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTW92aWVDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcbk1vdmllQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNb3ZpZUNsaXA7XG5tb2R1bGUuZXhwb3J0cyA9IE1vdmllQ2xpcDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTW92aWVDbGlwLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIHRvdGFsRnJhbWVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBNb3ZpZUNsaXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbnVtYmVyIG9mIHRleHR1cmVzXG4gICAgICogYXNzaWduZWQgdG8gdGhlIE1vdmllQ2xpcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0b3RhbEZyYW1lczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgdGV4dHVyZXMgdXNlZCBmb3IgdGhpcyBNb3ZpZUNsaXBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVtdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICpcbiAgICAgKi9cbiAgICB0ZXh0dXJlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzLnB1c2godmFsdWVbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucy5wdXNoKHZhbHVlW2ldLnRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAqIFRoZSBNb3ZpZUNsaXBzIGN1cnJlbnQgZnJhbWUgaW5kZXhcbiAgICAqXG4gICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICogQHJlYWRvbmx5XG4gICAgKi9cbiAgICBjdXJyZW50RnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSkgJSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lIDwgMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUgKz0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGcmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBQbGF5cyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKHRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBnb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RvcCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRTdG9wID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG59O1xuXG4vKipcbiAqIEdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZSBhbmQgYmVnaW5zIHBsYXlpbmcgdGhlIE1vdmllQ2xpcFxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdGFydCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRQbGF5ID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLnBsYXkoKTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqIEBwcml2YXRlXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB2YXIgZWxhcHNlZCA9IHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZHVyYXRpb25zICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGxhZyA9IHRoaXMuX2N1cnJlbnRUaW1lICUgMSAqIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG5cbiAgICAgICAgbGFnICs9IGVsYXBzZWQgLyA2MCAqIDEwMDA7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA8IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lLS07XG4gICAgICAgICAgICBsYWcgKz0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWduID0gTWF0aC5zaWduKHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPj0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGFnIC09IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0gKiBzaWduO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gc2lnbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGxhZyAvIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGVsYXBzZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lIDwgMCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCgwKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VGltZSA+PSB0aGlzLl90ZXh0dXJlcy5sZW5ndGggJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AodGhpcy5fdGV4dHVyZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG5cbn07XG5cbi8qXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBkZXN0cm95cyBpdFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCApXG57XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGZyYW1lIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgZnJhbWVzIGlkcyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUZyYW1lcyA9IGZ1bmN0aW9uIChmcmFtZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tRnJhbWUoZnJhbWVzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBpbWFnZSB1cmxzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tSW1hZ2VzID0gZnVuY3Rpb24gKGltYWdlcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59OyIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIC8vIGEgc3ByaXRlIHVzZSBkZm9yIHJlbmRlcmluZyB0ZXh0dXJlcy4uXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICBDYW52YXNUaW50ZXIgPSByZXF1aXJlKCcuLi9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyk7XG5cbi8qKlxuICogQSB0aWxpbmcgc3ByaXRlIGlzIGEgZmFzdCB3YXkgb2YgcmVuZGVyaW5nIGEgdGlsaW5nIGltYWdlXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZSB7VGV4dHVyZX0gdGhlIHRleHR1cmUgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gVGlsaW5nU3ByaXRlKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsaW5nIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVNjYWxlID0gbmV3IGNvcmUuUG9pbnQoMSwxKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIG9mZnNldCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG5ldyBjb3JlLlBvaW50KDAsMCk7XG5cbiAgICAvLy8vLyBwcml2YXRlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2l0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBuZXcgY29yZS5UZXh0dXJlVXZzKCk7XG5cbiAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gbnVsbDtcblxuICAgIC8vVE9ETyBtb3ZlLi5cbiAgICB0aGlzLnNoYWRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKFxuXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVUcmFuc2Zvcm07JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnICAgY29vcmQgLT0gdVRyYW5zZm9ybS54eTsnLFxuICAgICAgICAnICAgY29vcmQgLz0gdVRyYW5zZm9ybS56dzsnLFxuICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGNvb3JkOycsXG5cbiAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjMiB1UGl4ZWxTaXplOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gbW9kKHZUZXh0dXJlQ29vcmQsIHVGcmFtZS56dyk7JyxcbiAgICAgICAgJyAgIGNvb3JkID0gY2xhbXAoY29vcmQsIHVQaXhlbFNpemUsIHVGcmFtZS56dyAtIHVQaXhlbFNpemUpOycsXG4gICAgICAgICcgICBjb29yZCArPSB1RnJhbWUueHk7JyxcblxuICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gIHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQpICogdkNvbG9yIDsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1RnJhbWU6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1VHJhbnNmb3JtOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVBpeGVsU2l6ZSA6IHsgdHlwZSA6ICcyZnYnLCB2YWx1ZTogWzEsIDFdfVxuICAgICAgICAgICAgfVxuICAgICAgKTtcbn1cblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWxpbmdTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbGluZ1Nwcml0ZTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWxpbmdTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGlsaW5nU3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIHR3ZWFrIG91ciB0ZXh0dXJlIHRlbXBvcmFyaWx5Li5cbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZSB8fCAhdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZW1wVXZzID0gdGV4dHVyZS5fdXZzLFxuICAgICAgICB0ZW1wV2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgdGVtcEhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCxcbiAgICAgICAgdHcgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoLFxuICAgICAgICB0aCA9IHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGhpcy5fdXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMF0gPSAxLjAvdHc7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVsxXSA9IDEuMC90aDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVswXSA9IHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzFdID0gdGVtcFV2cy55MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMl0gPSB0ZW1wVXZzLngxIC0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbM10gPSB0ZW1wVXZzLnkyIC0gdGVtcFV2cy55MDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMF0gPSAodGhpcy50aWxlUG9zaXRpb24ueCAlICh0ZW1wV2lkdGggKiB0aGlzLnRpbGVTY2FsZS54KSkgLyB0aGlzLl93aWR0aDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzFdID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgJSAodGVtcEhlaWdodCAqIHRoaXMudGlsZVNjYWxlLnkpKSAvIHRoaXMuX2hlaWdodDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzJdID0gKCB0dyAvIHRoaXMuX3dpZHRoICkgKiB0aGlzLnRpbGVTY2FsZS54O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbM10gPSAoIHRoIC8gdGhpcy5faGVpZ2h0ICkgKiB0aGlzLnRpbGVTY2FsZS55O1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRlbXBVdnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0ZW1wV2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGVtcEhlaWdodDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZiAoIXRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQsXG4gICAgICAgIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICBiYXNlVGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIG1vZFggPSAodGhpcy50aWxlUG9zaXRpb24ueCAvIHRoaXMudGlsZVNjYWxlLngpICUgdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIG1vZFkgPSAodGhpcy50aWxlUG9zaXRpb24ueSAvIHRoaXMudGlsZVNjYWxlLnkpICUgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuXG4gICAgLy8gY3JlYXRlIGEgbmljZSBzaGlueSBwYXR0ZXJuIVxuICAgIC8vIFRPRE8gdGhpcyBuZWVkcyB0byBiZSByZWZyZXNoZWQgaWYgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICBpZighdGhpcy5fY2FudmFzUGF0dGVybilcbiAgICB7XG4gICAgICAgIC8vIGN1dCBhbiBvYmplY3QgZnJvbSBhIHNwcml0ZXNoZWV0Li5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgY29yZS5DYW52YXNCdWZmZXIodGV4dHVyZS5fZnJhbWUud2lkdGgsIHRleHR1cmUuX2ZyYW1lLmhlaWdodCk7XG5cbiAgICAgICAgLy8gVGludCB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMudGludGVkVGV4dHVyZSwgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKGJhc2VUZXh0dXJlLnNvdXJjZSwgLXRleHR1cmUuX2ZyYW1lLngsIC10ZXh0dXJlLl9mcmFtZS55KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gdGVtcENhbnZhcy5jb250ZXh0LmNyZWF0ZVBhdHRlcm4oIHRlbXBDYW52YXMuY2FudmFzLCAncmVwZWF0JyApO1xuICAgIH1cblxuICAgIC8vIHNldCBjb250ZXh0IHN0YXRlLi5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvbik7XG5cbiAgICAvLyBUT0RPIC0gdGhpcyBzaG91bGQgYmUgcm9sbGVkIGludG8gdGhlIHNldFRyYW5zZm9ybSBhYm92ZS4uXG4gICAgY29udGV4dC5zY2FsZSh0aGlzLnRpbGVTY2FsZS54LHRoaXMudGlsZVNjYWxlLnkpO1xuXG4gICAgY29udGV4dC50cmFuc2xhdGUobW9kWCArICh0aGlzLmFuY2hvci54ICogLXRoaXMuX3dpZHRoICksXG4gICAgICAgICAgICAgICAgICAgICAgbW9kWSArICh0aGlzLmFuY2hvci55ICogLXRoaXMuX2hlaWdodCkpO1xuXG4gICAgLy8gY2hlY2sgYmxlbmQgbW9kZVxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vIGZpbGwgdGhlIHBhdHRlcm4hXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9jYW52YXNQYXR0ZXJuO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoLW1vZFgsXG4gICAgICAgICAgICAgICAgICAgICAtbW9kWSxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoIC8gdGhpcy50aWxlU2NhbGUueCxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCAvIHRoaXMudGlsZVNjYWxlLnkpO1xuXG5cbiAgICAvL1RPRE8gLSBwcmV0dHkgc3VyZSB0aGlzIGNhbiBiZSBkZWxldGVkLi4uXG4gICAgLy9jb250ZXh0LnRyYW5zbGF0ZSgtdGhpcy50aWxlUG9zaXRpb24ueCArICh0aGlzLmFuY2hvci54ICogdGhpcy5fd2lkdGgpLCAtdGhpcy50aWxlUG9zaXRpb24ueSArICh0aGlzLmFuY2hvci55ICogdGhpcy5faGVpZ2h0KSk7XG4gICAgLy9jb250ZXh0LnNjYWxlKDEgLyB0aGlzLnRpbGVTY2FsZS54LCAxIC8gdGhpcy50aWxlU2NhbGUueSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIHNwcml0ZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG5cbiAgICB2YXIgdzAgPSB3aWR0aCAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgIHZhciB3MSA9IHdpZHRoICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICB2YXIgaDAgPSBoZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICB2YXIgaDEgPSBoZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcblxuICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIG1pblgsXG4gICAgICAgIG1heFgsXG4gICAgICAgIG1pblksXG4gICAgICAgIG1heFk7XG5cbiAgICBtaW5YID0geDE7XG4gICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICBtaW5ZID0geTE7XG4gICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICBtYXhYID0geDE7XG4gICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICBtYXhZID0geTE7XG4gICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgYm91bmRzLnggPSBtaW5YO1xuICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcblxuICAgIHJldHVybiBib3VuZHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIGNoZWNrXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRpbGluZyBzcHJpdGVcbiAqXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWxlU2NhbGUgPSBudWxsO1xuICAgIHRoaXMuX3RpbGVTY2FsZU9mZnNldCA9IG51bGw7XG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHRpbGluZyBzcHJpdGUgdGhhdCB3aWxsIHVzZSBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZCx3aWR0aCxoZWlnaHQpXG57XG4gICAgdmFyIHRleHR1cmUgPSBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSAnICsgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUodGV4dHVyZSx3aWR0aCxoZWlnaHQpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCB3aWR0aCwgaGVpZ2h0LCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSksd2lkdGgsaGVpZ2h0KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gY29yZS5EaXNwbGF5T2JqZWN0LFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwID0gZmFsc2U7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSBudWxsO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsSGl0VGVzdCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxEZXN0cm95ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGlzIGRpc3BsYXkgb2JqZWN0IHRvIGJlIGNhY2hlZCBhcyBhIGJpdG1hcC5cbiAgICAgKiBUaGlzIGJhc2ljYWxseSB0YWtlcyBhIHNuYXAgc2hvdCBvZiB0aGUgZGlzcGxheSBvYmplY3QgYXMgaXQgaXMgYXQgdGhhdCBtb21lbnQuIEl0IGNhbiBwcm92aWRlIGEgcGVyZm9ybWFuY2UgYmVuZWZpdCBmb3IgY29tcGxleCBzdGF0aWMgZGlzcGxheU9iamVjdHMuXG4gICAgICogVG8gcmVtb3ZlIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnZmFsc2UnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgY2FjaGVBc0JpdG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZUFzQml0bWFwO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXAgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVBc0JpdG1hcCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IHRoaXMucmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSB0aGlzLnJlbmRlckNhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gdGhpcy51cGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHMgPSB0aGlzLmdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSA9IHRoaXMuZGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludCA9IHRoaXMuY29udGFpbnNQb2ludDtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX2NhY2hlQXNCaXRtYXBEZXN0cm95O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJvdW5kcyA9IHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fb3JpZ2luYWxEZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIFdlYkdMXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlciggdGhpcy5fY2FjaGVkU3ByaXRlICk7XG59O1xuXG4vKipcbiogUHJlcGFyZXMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZmlyc3Qgd2UgZmx1c2ggYW55dGhpbmcgbGVmdCBpbiB0aGUgcmVuZGVyZXIgKG90aGVyd2lzZSBpdCB3b3VsZCBnZXQgcmVuZGVyZWQgdG8gdGhlIGNhY2hlZCB0ZXh0dXJlKVxuICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuICAgIC8vdGhpcy5maWx0ZXJzPSBbXTtcbiAgICAvLyBuZXh0IHdlIGZpbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHVudHJhbnNmb3JtZWQgb2JqZWN0XG4gICAgLy8gdGhpcyBmdW5jdGlvbiBhbHNvIGNhbGxzIHVwZGF0ZXRyYW5zZm9ybSBvbiBhbGwgaXRzIGNoaWxkcmVuIGFzIHBhcnQgb2YgdGhlIG1lYXN1cmluZy4gVGhpcyBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgdHJhbnNmb3JtIGFnYWluIGluIHRoaXMgZnVuY3Rpb25cbiAgICAvLyBUT0RPIHBhc3MgYW4gb2JqZWN0IHRvIGNsb25lIHRvbz8gc2F2ZXMgaGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBvbmUgZWFjaCB0aW1lIVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuY2xvbmUoKTtcblxuICAgIC8vIGFkZCBzb21lIHBhZGRpbmchXG4gICAgaWYodGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5fZmlsdGVyc1swXS5wYWRkaW5nO1xuICAgICAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgICAgICBib3VuZHMueSAtPSBwYWRkaW5nO1xuXG4gICAgICAgIGJvdW5kcy53aWR0aCArPSBwYWRkaW5nICogMjtcbiAgICAgICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcbiAgICB9XG5cbiAgICAvLyBmb3Igbm93IHdlIGNhY2hlIHRoZSBjdXJyZW50IHJlbmRlclRhcmdldCB0aGF0IHRoZSB3ZWJHTCByZW5kZXJlciBpcyBjdXJyZW50bHkgdXNpbmcuXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBtb3JlIGVsZWdlbnQuLlxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0O1xuICAgIC8vIFdlIGFsc28gc3RvcmUgdGhlIGZpbHRlciBzdGFjayAtIEkgd2lsbCBkZWZpbml0ZWx5IGxvb2sgdG8gY2hhbmdlIGhvdyB0aGlzIHdvcmtzIGEgbGl0dGxlIGxhdGVyIGRvd24gdGhlIGxpbmUuXG4gICAgdmFyIHN0YWNrID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjaztcblxuICAgIC8vIHRoaXMgcmVuZGVyVGV4dHVyZSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlZCBEaXNwbGF5T2JqZWN0XG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cblxuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjYWNoZWRSZW5kZXJUYXJnZXQpO1xuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2sgPSBzdGFjaztcblxuICAgIHRoaXMucmVuZGVyV2ViR0wgICAgID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgICAgICAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyByZXN0b3JlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIGNhY2hlZCBzcHJpdGUgdG8gYXZvaWQgdGhlIG5hc3R5IGZsaWNrZXIuLlxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAvLyBtYXAgdGhlIGhpdCB0ZXN0Li5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBjYW52YXNcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzKCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbn07XG5cbi8vVE9ETyB0aGlzIGNhbiBiZSB0aGUgc2FtZSBhcyB0aGUgd2ViR0wgdmVyaXNvbi4uIHdpbGwgbmVlZCB0byBkbyBhIGxpdHRsZSB0d2Vha2luZyBmaXJzdCB0aG91Z2guLlxuLyoqXG4qIFByZXBhcmVzIHRoZSBDYW52YXMgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vZ2V0IGJvdW5kcyBhY3R1YWxseSB0cmFuc2Zvcm1zIHRoZSBvYmplY3QgZm9yIHVzIGFscmVhZHkhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5jb250ZXh0ID0gY2FjaGVkUmVuZGVyVGFyZ2V0O1xuXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBDYWxjdWxhdGVzIHRoZSBib3VuZHMgb2YgdGhlIGNhY2hlZCBzcHJpdGVcbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZ2V0Q2FjaGVkQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNwcml0ZS5nZXRCb3VuZHMoKTtcbn07XG5cbi8qKlxuKiBEZXN0cm95cyB0aGUgY2FjaGVkIHNwcml0ZS5cbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fdGV4dHVyZS5kZXN0cm95KCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwRGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jYWNoZUFzQml0bWFwID0gZmFsc2U7XG4gICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95KCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIG9iamVjdC5cbiAqXG4gKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICogQG1lbWJlciB7c3RyaW5nfVxuICovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZGlzcGxheSBvYmplY3QgaW4gdGhlIGNvbnRhaW5lclxuKlxuKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4qIEBwYXJhbSBuYW1lIHtzdHJpbmd9IGluc3RhbmNlIG5hbWVcbiogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuKi9cbmNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4qXG4qIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4qIEBwYXJhbSBwb2ludCB7UG9pbnR9IHRoZSBwb2ludCB0byB3cml0ZSB0aGUgZ2xvYmFsIHZhbHVlIHRvLiBJZiBudWxsIGEgbmV3IHBvaW50IHdpbGwgYmUgcmV0dXJuZWRcbiogQHJldHVybiB7UG9pbnR9XG4qL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRHbG9iYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb2ludClcbntcbiAgICBwb2ludCA9IHBvaW50IHx8IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICBpZih0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHBvaW50LnggPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICBwb2ludC55ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG9pbnQueCA9IHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMucG9zaXRpb24ueTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG5yZXF1aXJlKCcuL2NhY2hlQXNCaXRtYXAnKTtcbnJlcXVpcmUoJy4vZ2V0Q2hpbGRCeU5hbWUnKTtcbnJlcXVpcmUoJy4vZ2V0R2xvYmFsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZXh0cmFzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1vdmllQ2xpcDogICAgICByZXF1aXJlKCcuL01vdmllQ2xpcCcpLFxuICAgIFRpbGluZ1Nwcml0ZTogICByZXF1aXJlKCcuL1RpbGluZ1Nwcml0ZScpLFxuICAgIEJpdG1hcFRleHQ6ICAgICByZXF1aXJlKCcuL0JpdG1hcFRleHQnKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vLyBUT0RPIChjZW5nbGVyKSAtIFRoZSBZIGlzIGZsaXBwZWQgaW4gdGhpcyBzaGFkZXIgZm9yIHNvbWUgcmVhc29uLlxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBzaGFkZXIgOiBodHRwczovL3d3dy5zaGFkZXJ0b3kuY29tL3ZpZXcvbHNzR0RqIGJ5IEBtb3ZBWDEzaFxuICovXG5cbi8qKlxuICogQW4gQVNDSUkgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBBc2NpaUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgY2hhcmFjdGVyKGZsb2F0IG4sIHZlYzIgcClcXG57XFxuICAgIHAgPSBmbG9vcihwKnZlYzIoNC4wLCAtNC4wKSArIDIuNSk7XFxuICAgIGlmIChjbGFtcChwLngsIDAuMCwgNC4wKSA9PSBwLnggJiYgY2xhbXAocC55LCAwLjAsIDQuMCkgPT0gcC55KVxcbiAgICB7XFxuICAgICAgICBpZiAoaW50KG1vZChuL2V4cDIocC54ICsgNS4wKnAueSksIDIuMCkpID09IDEpIHJldHVybiAxLjA7XFxuICAgIH1cXG4gICAgcmV0dXJuIDAuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHk7XFxuXFxuICAgIHZlYzMgY29sID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBmbG9vciggdXYgLyBwaXhlbFNpemUgKSAqIHBpeGVsU2l6ZSAvIGRpbWVuc2lvbnMueHkpLnJnYjtcXG5cXG4gICAgZmxvYXQgZ3JheSA9IChjb2wuciArIGNvbC5nICsgY29sLmIpIC8gMy4wO1xcblxcbiAgICBmbG9hdCBuID0gIDY1NTM2LjA7ICAgICAgICAgICAgIC8vIC5cXG4gICAgaWYgKGdyYXkgPiAwLjIpIG4gPSA2NTYwMC4wOyAgICAvLyA6XFxuICAgIGlmIChncmF5ID4gMC4zKSBuID0gMzMyNzcyLjA7ICAgLy8gKlxcbiAgICBpZiAoZ3JheSA+IDAuNCkgbiA9IDE1MjU1MDg2LjA7IC8vIG9cXG4gICAgaWYgKGdyYXkgPiAwLjUpIG4gPSAyMzM4NTE2NC4wOyAvLyAmXFxuICAgIGlmIChncmF5ID4gMC42KSBuID0gMTUyNTIwMTQuMDsgLy8gOFxcbiAgICBpZiAoZ3JheSA+IDAuNykgbiA9IDEzMTk5NDUyLjA7IC8vIEBcXG4gICAgaWYgKGdyYXkgPiAwLjgpIG4gPSAxMTUxMjgxMC4wOyAvLyAjXFxuXFxuICAgIHZlYzIgcCA9IG1vZCggdXYgLyAoIHBpeGVsU2l6ZSAqIDAuNSApLCAyLjApIC0gdmVjMigxLjApO1xcbiAgICBjb2wgPSBjb2wgKiBjaGFyYWN0ZXIobiwgcCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sLCAxLjApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDggfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQXNjaWlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Bc2NpaUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc2NpaUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQXNjaWlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFzY2lpRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBzaXplIHVzZWQgYnkgdGhlIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkFzY2lpRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmxvb21GaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmxvb21GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xufVxuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsb29tRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb29tRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbG9vbUZpbHRlcjtcblxuQmxvb21GaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLlNDUkVFTik7XG5cbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvb21GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuXG4vKipcbiAqIFRoZSBCbHVyRGlyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvd2FyZCBhIGRpcmVjdGlvbiB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWFxuICogQHBhcmFtIHtudW1iZXJ9IGRpcllcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckRpckZpbHRlcihkaXJYLCBkaXJZKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBmbG9hdCBkaXJYO1xcbnVuaWZvcm0gZmxvYXQgZGlyWTtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1swXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDEyICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDEyICogc3RyZW5ndGgpICogZGlyWSApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkgKiAwLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkgKiAwLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkgKiAwLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pICogMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBkaXJYOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJYIHx8IDAgfSxcbiAgICAgICAgICAgIGRpclk6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclkgfHwgMCB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclggPSBkaXJYIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclkgPSBkaXJZIHx8IDA7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckRpckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckRpckZpbHRlcjtcblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKSB7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmICh0aGlzLnBhc3NlcyA9PT0gMSkge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0yOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gKHRoaXMucGFzc2VzKyhpKjIpKSAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckRpckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJYO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJYLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsdXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcbn1cblxuQmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckZpbHRlcjtcblxuQmx1ckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcGFzc2VzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzID0gdGhpcy5ibHVyWUZpbHRlci5wYXNzZXMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWEZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1clhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1clhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1clhGaWx0ZXI7XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1clhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSAgTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllGaWx0ZXI7XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSBNYXRoLmFicyh0aGlzLnN0cmVuZ3RoKSAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgU21hcnQgQmx1ciBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNtYXJ0Qmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAqIHBlcmNlbnQpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICBkZWx0YTogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjEsIHk6IDAuMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTbWFydEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNtYXJ0Qmx1ckZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDV4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogYGBganNcbiAqICB2YXIgY29sb3JNYXRyaXggPSBuZXcgUElYSS5Db2xvck1hdHJpeEZpbHRlcigpO1xuICogIGNvbnRhaW5lci5maWx0ZXJzID0gW2NvbG9yTWF0cml4XTtcbiAqICBjb2xvck1hdHJpeC5jb250cmFzdCgyKTtcbiAqIGBgYFxuICogQGF1dGhvciBDbMOpbWVudCBDaGVuZWJhdWx0IDxjbGVtZW50QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvck1hdHJpeEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBtWzI1XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuXFxuICAgIHZlYzQgYyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yID0gKG1bMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gbVs0XTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLmcgPSAobVs1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSBtWzldO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmIgPSAobVsxMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gbVsxNF07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYSA9IChtWzE1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSBtWzE5XTtcXG5cXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJzFmdicsIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yTWF0cml4RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvck1hdHJpeEZpbHRlcjtcblxuXG4vKipcbiAqIFRyYW5zZm9ybXMgY3VycmVudCBtYXRyaXggYW5kIHNldCB0aGUgbmV3IG9uZVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gaWYgdHJ1ZSwgY3VycmVudCBtYXRyaXggYW5kIG1hdHJpeCBhcmUgbXVsdGlwbGllZC4gSWYgZmFsc2UsIGp1c3Qgc2V0IHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIEBwYXJhbSBtYXRyaXhcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9sb2FkTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgbXVsdGlwbHkpXG57XG4gICAgbXVsdGlwbHkgPSAhIW11bHRpcGx5O1xuXG4gICAgdmFyIG5ld01hdHJpeCA9IG1hdHJpeDtcblxuICAgIGlmIChtdWx0aXBseSkge1xuICAgICAgICB0aGlzLl9tdWx0aXBseShuZXdNYXRyaXgsIHRoaXMudW5pZm9ybXMubS52YWx1ZSwgbWF0cml4KTtcbiAgICAgICAgbmV3TWF0cml4ID0gdGhpcy5fY29sb3JNYXRyaXgobmV3TWF0cml4KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBtYXRyaXhcbiAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSBuZXdNYXRyaXg7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDUnc1xuICpcbiAqIEBwYXJhbSBvdXQge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSBhIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0gYiB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIG91dCB7bnVtYmVyW119IChtYXQgNXg0KVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYilcbntcblxuICAgIC8vIFJlZCBDaGFubmVsXG4gICAgb3V0WzBdID0gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYls1XSkgKyAoYVsyXSAqIGJbMTBdKSArIChhWzNdICogYlsxNV0pO1xuICAgIG91dFsxXSA9IChhWzBdICogYlsxXSkgKyAoYVsxXSAqIGJbNl0pICsgKGFbMl0gKiBiWzExXSkgKyAoYVszXSAqIGJbMTZdKTtcbiAgICBvdXRbMl0gPSAoYVswXSAqIGJbMl0pICsgKGFbMV0gKiBiWzddKSArIChhWzJdICogYlsxMl0pICsgKGFbM10gKiBiWzE3XSk7XG4gICAgb3V0WzNdID0gKGFbMF0gKiBiWzNdKSArIChhWzFdICogYls4XSkgKyAoYVsyXSAqIGJbMTNdKSArIChhWzNdICogYlsxOF0pO1xuICAgIG91dFs0XSA9IChhWzBdICogYls0XSkgKyAoYVsxXSAqIGJbOV0pICsgKGFbMl0gKiBiWzE0XSkgKyAoYVszXSAqIGJbMTldKTtcblxuICAgIC8vIEdyZWVuIENoYW5uZWxcbiAgICBvdXRbNV0gPSAoYVs1XSAqIGJbMF0pICsgKGFbNl0gKiBiWzVdKSArIChhWzddICogYlsxMF0pICsgKGFbOF0gKiBiWzE1XSk7XG4gICAgb3V0WzZdID0gKGFbNV0gKiBiWzFdKSArIChhWzZdICogYls2XSkgKyAoYVs3XSAqIGJbMTFdKSArIChhWzhdICogYlsxNl0pO1xuICAgIG91dFs3XSA9IChhWzVdICogYlsyXSkgKyAoYVs2XSAqIGJbN10pICsgKGFbN10gKiBiWzEyXSkgKyAoYVs4XSAqIGJbMTddKTtcbiAgICBvdXRbOF0gPSAoYVs1XSAqIGJbM10pICsgKGFbNl0gKiBiWzhdKSArIChhWzddICogYlsxM10pICsgKGFbOF0gKiBiWzE4XSk7XG4gICAgb3V0WzldID0gKGFbNV0gKiBiWzRdKSArIChhWzZdICogYls5XSkgKyAoYVs3XSAqIGJbMTRdKSArIChhWzhdICogYlsxOV0pO1xuXG4gICAgLy8gQmx1ZSBDaGFubmVsXG4gICAgb3V0WzEwXSA9IChhWzEwXSAqIGJbMF0pICsgKGFbMTFdICogYls1XSkgKyAoYVsxMl0gKiBiWzEwXSkgKyAoYVsxM10gKiBiWzE1XSk7XG4gICAgb3V0WzExXSA9IChhWzEwXSAqIGJbMV0pICsgKGFbMTFdICogYls2XSkgKyAoYVsxMl0gKiBiWzExXSkgKyAoYVsxM10gKiBiWzE2XSk7XG4gICAgb3V0WzEyXSA9IChhWzEwXSAqIGJbMl0pICsgKGFbMTFdICogYls3XSkgKyAoYVsxMl0gKiBiWzEyXSkgKyAoYVsxM10gKiBiWzE3XSk7XG4gICAgb3V0WzEzXSA9IChhWzEwXSAqIGJbM10pICsgKGFbMTFdICogYls4XSkgKyAoYVsxMl0gKiBiWzEzXSkgKyAoYVsxM10gKiBiWzE4XSk7XG4gICAgb3V0WzE0XSA9IChhWzEwXSAqIGJbNF0pICsgKGFbMTFdICogYls5XSkgKyAoYVsxMl0gKiBiWzE0XSkgKyAoYVsxM10gKiBiWzE5XSk7XG5cbiAgICAvLyBBbHBoYSBDaGFubmVsXG4gICAgb3V0WzE1XSA9IChhWzE1XSAqIGJbMF0pICsgKGFbMTZdICogYls1XSkgKyAoYVsxN10gKiBiWzEwXSkgKyAoYVsxOF0gKiBiWzE1XSk7XG4gICAgb3V0WzE2XSA9IChhWzE1XSAqIGJbMV0pICsgKGFbMTZdICogYls2XSkgKyAoYVsxN10gKiBiWzExXSkgKyAoYVsxOF0gKiBiWzE2XSk7XG4gICAgb3V0WzE3XSA9IChhWzE1XSAqIGJbMl0pICsgKGFbMTZdICogYls3XSkgKyAoYVsxN10gKiBiWzEyXSkgKyAoYVsxOF0gKiBiWzE3XSk7XG4gICAgb3V0WzE4XSA9IChhWzE1XSAqIGJbM10pICsgKGFbMTZdICogYls4XSkgKyAoYVsxN10gKiBiWzEzXSkgKyAoYVsxOF0gKiBiWzE4XSk7XG4gICAgb3V0WzE5XSA9IChhWzE1XSAqIGJbNF0pICsgKGFbMTZdICogYls5XSkgKyAoYVsxN10gKiBiWzE0XSkgKyAoYVsxOF0gKiBiWzE5XSk7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHJldHVybiBtIHtudW1iZXJbXX0gKG1hdCA1eDQpIHdpdGggYWxsIHZhbHVlcyBiZXR3ZWVuIDAtMVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2NvbG9yTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICAvLyBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gICAgdmFyIG0gPSBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCk7XG4gICAgbVs0XSAvPSAyNTU7XG4gICAgbVs5XSAvPSAyNTU7XG4gICAgbVsxNF0gLz0gMjU1O1xuICAgIG1bMTldIC89IDI1NTtcblxuICAgIHJldHVybiBtO1xufTtcblxuLyoqXG4gKiBBZGp1c3RzIGJyaWdodG5lc3NcbiAqXG4gKiBAcGFyYW0gYiB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgYnJpZ3RobmVzcyAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icmlnaHRuZXNzID0gZnVuY3Rpb24gKGIsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGIsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIGIsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIGIsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXRyaWNlcyBpbiBncmV5IHNjYWxlc1xuICpcbiAqIEBwYXJhbSBzY2FsZSB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgZ3JleSAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG4vL0FtZXJpY2FuaXplZCBhbGlhc1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyYXlzY2FsZSA9IENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGU7XG5cbi8qKlxuICogU2V0IHRoZSBibGFjayBhbmQgd2hpdGUgbWF0cmljZVxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJsYWNrQW5kV2hpdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGh1ZSBwcm9wZXJ0eSBvZiB0aGUgY29sb3JcbiAqXG4gKiBAcGFyYW0gcm90YXRpb24ge251bWJlcn0gaW4gZGVncmVlc1xuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmh1ZSA9IGZ1bmN0aW9uIChyb3RhdGlvbiwgbXVsdGlwbHkpXG57XG4gICAgcm90YXRpb24gPSAocm90YXRpb24gfHwgMCkgLyAxODAgKiBNYXRoLlBJO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyhyb3RhdGlvbiksXG4gICAgICAgIHNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcblxuICAgIC8vIGx1bWluYW5jZVJlZCwgbHVtaW5hbmNlR3JlZW4sIGx1bWluYW5jZUJsdWVcbiAgICB2YXIgbHVtUiA9IDAuMjEzLCAvLyBvciAwLjMwODZcbiAgICAgICAgbHVtRyA9IDAuNzE1LCAvLyBvciAwLjYwOTRcbiAgICAgICAgbHVtQiA9IDAuMDcyOyAvLyBvciAwLjA4MjBcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoMSAtIGx1bVIpICsgc2luICogKC1sdW1SKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAoLWx1bUcpLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgxIC0gbHVtQiksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKDAuMTQzKSwgbHVtRyArIGNvcyAqICgxIC0gbHVtRykgKyBzaW4gKiAoMC4xNDApLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgtMC4yODMpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgtKDEgLSBsdW1SKSksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKGx1bUcpLCBsdW1CICsgY29zICogKDEgLSBsdW1CKSArIHNpbiAqIChsdW1CKSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKipcbiAqIFNldCB0aGUgY29udHJhc3QgbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGRhcmsgYW5kIGJyaWdodFxuICogSW5jcmVhc2UgY29udHJhc3QgOiBzaGFkb3dzIGRhcmtlciBhbmQgaGlnaGxpZ2h0cyBicmlnaHRlclxuICogRGVjcmVhc2UgY29udHJhc3QgOiBicmluZyB0aGUgc2hhZG93cyB1cCBhbmQgdGhlIGhpZ2hsaWdodHMgZG93blxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdmFsdWUgb2YgdGhlIGNvbnRyYXN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29udHJhc3QgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgdiA9IChhbW91bnQgfHwgMCkgKyAxO1xuICAgIHZhciBvID0gLTEyOCAqICh2IC0gMSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB2LCAwLCAwLCAwLCBvLFxuICAgICAgICAwLCB2LCAwLCAwLCBvLFxuICAgICAgICAwLCAwLCB2LCAwLCBvLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc2F0dXJhdGlvbiBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gY29sb3JzXG4gKiBJbmNyZWFzZSBzYXR1cmF0aW9uIDogaW5jcmVhc2UgY29udHJhc3QsIGJyaWdodG5lc3MsIGFuZCBzaGFycG5lc3NcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgeCA9IChhbW91bnQgfHwgMCkgKiAyIC8gMyArIDE7XG4gICAgdmFyIHkgPSAoKHggLSAxKSAqIC0wLjUpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgeCwgeSwgeSwgMCwgMCxcbiAgICAgICAgeSwgeCwgeSwgMCwgMCxcbiAgICAgICAgeSwgeSwgeCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBEZXNhdHVyYXRlIGltYWdlIChyZW1vdmUgY29sb3IpXG4gKlxuICogQ2FsbCB0aGUgc2F0dXJhdGUgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHRoaXMuc2F0dXJhdGUoLTEpO1xufTtcblxuLyoqXG4gKiBOZWdhdGl2ZSBpbWFnZSAoaW52ZXJzZSBvZiBjbGFzc2ljIHJnYiBtYXRyaXgpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5lZ2F0aXZlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDEsIDEsIDAsIDAsXG4gICAgICAgIDEsIDAsIDEsIDAsIDAsXG4gICAgICAgIDEsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2VwaWEgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2VwaWEgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zOTMsIDAuNzY4OTk5OSwgMC4xODg5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4zNDksIDAuNjg1OTk5OSwgMC4xNjc5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4yNzIsIDAuNTMzOTk5OSwgMC4xMzA5OTk5OSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciBtb3Rpb24gcGljdHVyZSBwcm9jZXNzIGludmVudGVkIGluIDE5MTYgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRlY2huaWNvbG9yID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuOTEyNTI3Nzg5MTQ1NjA4MywgLTAuODU0NTM0NDk3Njk1MTY0NSwgLTAuMDkxNTU1MDg0ODI3NTU1ODUsIDAsIDExLjc5MzYwMzQzNDM3NzMzNyxcbiAgICAgICAgLTAuMzA4NzgzMzM4NTkyODA5NywgMS43NjU4OTA4NTU1NDU4NDI4LCAtMC4xMDYwMTc0MzA3NDcyMjI0NSwgMCwgLTcwLjM1MjA1MTYxNDYxMzk4LFxuICAgICAgICAtMC4yMzExMDMzNzc1NDg2MTYsIC0wLjc1MDE4OTkxOTc0NDAyMTIsIDEuODQ3NTk3ODE2MTA4MTg5LCAwLCAzMC45NTA5NDA4Njk0OTExMzgsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogUG9sYXJvaWQgZmlsdGVyXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnBvbGFyb2lkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuNDM4LCAtMC4wNjIsIC0wLjA2MiwgMCwgMCxcbiAgICAgICAgLTAuMTIyLCAxLjM3OCwgLTAuMTIyLCAwLCAwLFxuICAgICAgICAtMC4wMTYsIC0wLjAxNiwgMS40ODMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRmlsdGVyIHdobyB0cmFuc2Zvcm1zIDogUmVkIC0+IEJsdWUgYW5kIEJsdWUgLT4gUmVkXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRvQkdSID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgcmV2ZXJzYWwgZmlsbSBpbnRyb2R1Y2VkIGJ5IEVhc3RtYW4gS29kYWsgaW4gMTkzNS4gKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmtvZGFjaHJvbWUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS4xMjg1NTgyMzk2NTkzNTI1LCAtMC4zOTY3MzgyMjgzNjAxMzQ4LCAtMC4wMzk5MjU1OTE3MjkyMTc5MywgMCwgNjMuNzI5NTg3NjIxOTY1MDIsXG4gICAgICAgIC0wLjE2NDA0MzM5OTYyMjQ0NjE2LCAxLjA4MzUyNTE1NjYyOTEzMDQsIC0wLjA1NDk4ODA1MTE1NjMzMTMyLCAwLCAyNC43MzI0MDc4OTY3MDYyMDMsXG4gICAgICAgIC0wLjE2Nzg2MDEwNzA2MTU1NzYzLCAtMC41NjAzNDE2Mjc3Njk1MjQ4LCAxLjYwMTQ4NTA3NjE5NjQ5NDMsIDAsIDM1LjYyOTgyODA3NDYwOTQ2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEJyb3duIGRlbGljaW91cyBicm93bmkgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icm93bmkgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC41OTk3MDIzNDk4MTU5NzE1LCAwLjM0NTUzMjQzMDQ4MzkxMjYzLCAtMC4yNzA4Mjk4Njc0NTM4MDQyLCAwLCA0Ny40MzE5Mjg1NTYwMDg3MyxcbiAgICAgICAgLTAuMDM3NzAzMjQ5ODM3NzgzMTU3LCAwLjg2MDk1Nzc1ODc5OTI2NDEsIDAuMTUwNTk1NTIzODg0NTk5MTMsIDAsIC0zNi45Njg0MTQ5ODMxOTEyNyxcbiAgICAgICAgMC4yNDExMzYzNTEyODE1MzMzNSwgLTAuMDc0NDEwMzc5MDg0MjI0OTIsIDAuNDQ5NzIxODIwNjQ4NzcxNTMsIDAsIC03LjU2MjA3NTI3NzU5MTI4MyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFZpbnRhZ2UgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS52aW50YWdlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNjI3OTM0NTYzNTYwNTk5NCwgMC4zMjAyMTgzNDIwODE5MzY3LCAtMC4wMzk2NTQwODIxMTMxMjQ1MywgMCwgOS42NTEyODU4MzUyOTQxMjMsXG4gICAgICAgIDAuMDI1NzgzOTc3MDQ4MDg4NjgsIDAuNjQ0MTE4ODY0NDM3NDc3MSwgMC4wMzI1OTEyNzYxNjE0OTI5NCwgMCwgNy40NjI4MjkxNzY0NzA1OTEsXG4gICAgICAgIDAuMDQ2NjA1NTU1Njc4MjcxOSwgLTAuMDg1MTIzMjk4NzI0Nzg5MSwgMC41MjQxNjQ4MDE4NzAwNDY1LCAwLCA1LjE1OTE5MDU4ODIzNTI5NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGtpbmQgb2YgZ3JhZGllbnQgbWFwLCBidXQgZnVubnkgdG8gcGxheSB3aXRoIVxuICpcbiAqIEBwYXJhbSBkZXNhdHVyYXRpb24ge251bWJlcn1cbiAqIEBwYXJhbSB0b25lZCB7bnVtYmVyfVxuICogQHBhcmFtIGxpZ2h0Q29sb3Ige3N0cmluZ30gKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKiBAcGFyYW0gZGFya0NvbG9yIHtzdHJpbmd9ICAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29sb3JUb25lID0gZnVuY3Rpb24gKGRlc2F0dXJhdGlvbiwgdG9uZWQsIGxpZ2h0Q29sb3IsIGRhcmtDb2xvciwgbXVsdGlwbHkpXG57XG4gICAgZGVzYXR1cmF0aW9uID0gZGVzYXR1cmF0aW9uIHx8IDAuMjtcbiAgICB0b25lZCA9IHRvbmVkIHx8IDAuMTU7XG4gICAgbGlnaHRDb2xvciA9IGxpZ2h0Q29sb3IgfHwgMHhGRkU1ODA7XG4gICAgZGFya0NvbG9yID0gZGFya0NvbG9yIHx8IDB4MzM4MDAwO1xuXG4gICAgdmFyIGxSID0gKChsaWdodENvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsRyA9ICgobGlnaHRDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsQiA9IChsaWdodENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgZFIgPSAoKGRhcmtDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEcgPSAoKGRhcmtDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkQiA9IChkYXJrQ29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC41OSwgMC4xMSwgMCwgMCxcbiAgICAgICAgbFIsIGxHLCBsQiwgZGVzYXR1cmF0aW9uLCAwLFxuICAgICAgICBkUiwgZEcsIGRCLCB0b25lZCwgMCxcbiAgICAgICAgbFIgLSBkUiwgbEcgLSBkRywgbEIgLSBkQiwgMCwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIE5pZ2h0IGVmZmVjdFxuICpcbiAqIEBwYXJhbSBpbnRlbnNpdHkge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uaWdodCA9IGZ1bmN0aW9uIChpbnRlbnNpdHksIG11bHRpcGx5KVxue1xuICAgIGludGVuc2l0eSA9IGludGVuc2l0eSB8fCAwLjE7XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgaW50ZW5zaXR5ICogKCAtMi4wKSwgLWludGVuc2l0eSwgMCwgMCwgMCxcbiAgICAgICAgLWludGVuc2l0eSwgMCwgaW50ZW5zaXR5LCAwLCAwLFxuICAgICAgICAwLCBpbnRlbnNpdHksIGludGVuc2l0eSAqIDIuMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKlxuICogUHJlZGF0b3IgZWZmZWN0XG4gKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgYSBuZXcgaW5kZXBlbnQgb25lXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBob3cgbXVjaCB0aGUgcHJlZGF0b3IgZmVlbHMgaGlzIGZ1dHVyZSB2aWN0aW1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wcmVkYXRvciA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDExLjIyNDEzMDYzMDQ5MzE2NCAqIGFtb3VudCwgLTQuNzk0NDg2OTk5NTExNzE5ICogYW1vdW50LCAtMi44NzQ2MTE4NTQ1NTMyMjI3ICogYW1vdW50LCAwICogYW1vdW50LCAwLjQwMzQyNDM4MjIwOTc3NzgzICogYW1vdW50LFxuICAgICAgICAtMy42MzMwNjk3NTM2NDY4NTA2ICogYW1vdW50LCA5LjE5MzE1NzE5NjA0NDkyMiAqIGFtb3VudCwgLTIuOTUxODEwODM2NzkxOTkyICogYW1vdW50LCAwICogYW1vdW50LCAtMS4zMTYxMzUwNDg4NjYyNzIgKiBhbW91bnQsXG4gICAgICAgIC0zLjIxODQxOTc5MDI2Nzk0NDMgKiBhbW91bnQsIC00LjIzNzUwMzA1MTc1NzgxMjUgKiBhbW91bnQsIDcuNDc2NDQ4MDU5MDgyMDMxICogYW1vdW50LCAwICogYW1vdW50LCAwLjgwNDQ0NTkyMjM3NDcyNTMgKiBhbW91bnQsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBMU0QgZWZmZWN0XG4gKlxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBIb3cgY3JhenkgaXMgeW91ciBlZmZlY3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5sc2QgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMiwgLTAuNCwgMC41LCAwLCAwLFxuICAgICAgICAtMC41LCAyLCAtMC40LCAwLCAwLFxuICAgICAgICAtMC40LCAtMC41LCAzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgb25lXG4gKlxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIGZhbHNlKTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF0cml4IG9mIHRoZSBjb2xvciBtYXRyaXggZmlsdGVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yTWF0cml4RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IFsxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwXVxuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm0udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBsb3dlcnMgdGhlIGNvbG9yIGRlcHRoIG9mIHlvdXIgaW1hZ2UgYnkgdGhlIGdpdmVuIGFtb3VudCwgcHJvZHVjaW5nIGFuIGltYWdlIHdpdGggYSBzbWFsbGVyIHBhbGV0dGUuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yU3RlcEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzdGVwO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGNvbG9yID0gZmxvb3IoY29sb3IgKiBzdGVwKSAvIHN0ZXA7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXA6IHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yU3RlcEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JTdGVwRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBzdGVwcyB0byByZWR1Y2UgdGhlIHBhbGV0dGUgYnkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvclN0ZXBGaWx0ZXIjXG4gICAgICovXG4gICAgc3RlcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbnZvbHV0aW9uRmlsdGVyIGNsYXNzIGFwcGxpZXMgYSBtYXRyaXggY29udm9sdXRpb24gZmlsdGVyIGVmZmVjdC5cbiAqIEEgY29udm9sdXRpb24gY29tYmluZXMgcGl4ZWxzIGluIHRoZSBpbnB1dCBpbWFnZSB3aXRoIG5laWdoYm9yaW5nIHBpeGVscyB0byBwcm9kdWNlIGEgbmV3IGltYWdlLlxuICogQSB3aWRlIHZhcmlldHkgb2YgaW1hZ2UgZWZmZWN0cyBjYW4gYmUgYWNoaWV2ZWQgdGhyb3VnaCBjb252b2x1dGlvbnMsIGluY2x1ZGluZyBibHVycmluZywgZWRnZVxuICogZGV0ZWN0aW9uLCBzaGFycGVuaW5nLCBlbWJvc3NpbmcsIGFuZCBiZXZlbGluZy4gVGhlIG1hdHJpeCBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIFNlZSBodHRwOi8vZG9jcy5naW1wLm9yZy9lbi9wbHVnLWluLWNvbnZtYXRyaXguaHRtbCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICovXG5mdW5jdGlvbiBDb252b2x1dGlvbkZpbHRlcihtYXRyaXgsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyBtZWRpdW1wIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xcbnVuaWZvcm0gZmxvYXQgbWF0cml4WzldO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IGMxMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAtIHRleGVsU2l6ZSk7IC8vIHRvcCBsZWZ0XFxuICAgdmVjNCBjMTIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgY2VudGVyXFxuICAgdmVjNCBjMTMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCByaWdodFxcblxcbiAgIHZlYzQgYzIxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIGxlZnRcXG4gICB2ZWM0IGMyMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7IC8vIG1pZCBjZW50ZXJcXG4gICB2ZWM0IGMyMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCByaWdodFxcblxcbiAgIHZlYzQgYzMxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gbGVmdFxcbiAgIHZlYzQgYzMyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGNlbnRlclxcbiAgIHZlYzQgYzMzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgdGV4ZWxTaXplKTsgLy8gYm90dG9tIHJpZ2h0XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID1cXG4gICAgICAgYzExICogbWF0cml4WzBdICsgYzEyICogbWF0cml4WzFdICsgYzEzICogbWF0cml4WzJdICtcXG4gICAgICAgYzIxICogbWF0cml4WzNdICsgYzIyICogbWF0cml4WzRdICsgYzIzICogbWF0cml4WzVdICtcXG4gICAgICAgYzMxICogbWF0cml4WzZdICsgYzMyICogbWF0cml4WzddICsgYzMzICogbWF0cml4WzhdO1xcblxcbiAgIGdsX0ZyYWdDb2xvci5hID0gYzIyLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWF0cml4OiAgICAgeyB0eXBlOiAnMWZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KSB9LFxuICAgICAgICAgICAgdGV4ZWxTaXplOiAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxIC8gd2lkdGgsIHk6IDEgLyBoZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnZvbHV0aW9uRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb252b2x1dGlvbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnkgPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIENyb3NzIEhhdGNoIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENyb3NzSGF0Y2hGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZmxvYXQgbHVtID0gbGVuZ3RoKHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZC54eSkucmdiKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDEuMCwgMS4wLCAxLjApO1xcblxcbiAgICBpZiAobHVtIDwgMS4wMClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjc1KVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNTApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC4zKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXCJcbiAgICApO1xufVxuXG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDcm9zc0hhdGNoRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDcm9zc0hhdGNoRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIERpc3BsYWNlbWVudEZpbHRlciBjbGFzcyB1c2VzIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHRleHR1cmUgKGNhbGxlZCB0aGUgZGlzcGxhY2VtZW50IG1hcCkgdG8gcGVyZm9ybSBhIGRpc3BsYWNlbWVudCBvZiBhbiBvYmplY3QuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGZpbHRlciB0byBhcHBseSBhbGwgbWFub3Igb2YgY3Jhenkgd2FycGluZyBlZmZlY3RzXG4gKiBDdXJyZW50bHkgdGhlIHIgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHggYW5kIHRoZSBnIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIChtYWtlIHN1cmUgaXRzIGFkZGVkIHRvIHRoZSBzY2VuZSEpXG4gKi9cbmZ1bmN0aW9uIERpc3BsYWNlbWVudEZpbHRlcihzcHJpdGUsIHNjYWxlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG4gICAgc3ByaXRlLnJlbmRlcmFibGUgPSBmYWxzZTtcblxuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZNYXBDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcFNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgbWFwID0gIHRleHR1cmUyRChtYXBTYW1wbGVyLCB2TWFwQ29vcmQpO1xcblxcbiAgIG1hcCAtPSAwLjU7XFxuICAgbWFwLnh5ICo9IHNjYWxlO1xcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyBtYXAueCwgdlRleHR1cmVDb29yZC55ICsgbWFwLnkpKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcFNhbXBsZXI6ICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLnRleHR1cmUgfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9LFxuICAgICAgICAgICAgc2NhbGU6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSwgeTogMSB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcblxuICAgIGlmIChzY2FsZSA9PT0gbnVsbCB8fCBzY2FsZSA9PT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgICAgc2NhbGUgPSAyMDtcbiAgICB9XG5cbiAgICB0aGlzLnNjYWxlID0gbmV3IGNvcmUuUG9pbnQoc2NhbGUsIHNjYWxlKTtcbn1cblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYWNlbWVudEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxhY2VtZW50RmlsdGVyO1xuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS54ID0gdGhpcy5zY2FsZS54ICogKDEvaW5wdXQuZnJhbWUud2lkdGgpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueSA9IHRoaXMuc2NhbGUueSAqICgxL2lucHV0LmZyYW1lLmhlaWdodCk7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gTXVzdCBiZSBwb3dlciBvZiAyIHNpemVkIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5EaXNwbGFjZW1lbnRGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3ZlcyBodHRwOi8vbWF0Z3JvdmVzLmNvbS8gQERvb3JtYXQyM1xuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9mdW4vZG90c2NyZWVuLmpzXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgZG90c2NyZWVuIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0byBiZSBtYWRlIG91dCBvZlxuICogYmxhY2sgYW5kIHdoaXRlIGhhbGZ0b25lIGRvdHMgbGlrZSBhbiBvbGQgcHJpbnRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRG90U2NyZWVuRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG5cXG5mbG9hdCBwYXR0ZXJuKClcXG57XFxuICAgZmxvYXQgcyA9IHNpbihhbmdsZSksIGMgPSBjb3MoYW5nbGUpO1xcbiAgIHZlYzIgdGV4ID0gdlRleHR1cmVDb29yZCAqIGRpbWVuc2lvbnMueHk7XFxuICAgdmVjMiBwb2ludCA9IHZlYzIoXFxuICAgICAgIGMgKiB0ZXgueCAtIHMgKiB0ZXgueSxcXG4gICAgICAgcyAqIHRleC54ICsgYyAqIHRleC55XFxuICAgKSAqIHNjYWxlO1xcbiAgIHJldHVybiAoc2luKHBvaW50LngpICogc2luKHBvaW50LnkpKSAqIDQuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhhdmVyYWdlICogMTAuMCAtIDUuMCArIHBhdHRlcm4oKSksIGNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNjYWxlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvdFNjcmVlbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRG90U2NyZWVuRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIHNjYWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHJhZGl1cyBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWVRpbnRGaWx0ZXIgYXBwbGllcyBhIHZlcnRpY2FsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWVRpbnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbitvZmZzZXQpLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IHN1bSA9IHZlYzQoMC4wKTtcXG5cXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLnJnYiAqIHN1bS5hICogYWxwaGEsIHN1bS5hICogYWxwaGEgKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSAvIDUxMiB9LFxuICAgICAgICAgICAgY29sb3I6IHsgdHlwZTogJ2MnLCB2YWx1ZTogWzAsMCwwXX0sXG4gICAgICAgICAgICBhbHBoYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC43IH0sXG4gICAgICAgICAgICBvZmZzZXQ6IHsgdHlwZTogJzJmJywgdmFsdWU6WzUsIDVdfSxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOjF9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllUaW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWVRpbnRGaWx0ZXI7XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIGNsZWFyKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWVRpbnRGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllUaW50RmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWVRpbnRGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgRHJvcFNoYWRvd0ZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEcm9wU2hhZG93RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIgPSBuZXcgQmx1cllUaW50RmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgdGhpcy5wYWRkaW5nID0gMzA7XG5cbiAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9hbmdsZSA9IDQ1ICogTWF0aC5QSSAvIDE4MDtcbiAgICB0aGlzLl9kaXN0YW5jZSA9IDEwO1xuICAgIHRoaXMuYWxwaGEgPSAwLjc1O1xuICAgIHRoaXMuaGlkZU9iamVjdCA9IGZhbHNlO1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5NVUxUSVBMWTtcbn1cblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRHJvcFNoYWRvd0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRHJvcFNoYWRvd0ZpbHRlcjtcblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIGlmKHRoaXMuX2RpcnR5UG9zaXRpb24pXG4gICAge1xuICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzBdID0gTWF0aC5zaW4odGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVsxXSA9IE1hdGguY29zKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUodGhpcy5ibGVuZE1vZGUpO1xuXG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIGlmKCF0aGlzLmhpZGVPYmplY3QpXG4gICAge1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG4gICAgfVxuXG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBjb2xvcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgY29yZS51dGlscy5yZ2IyaGV4KCB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgPSBjb3JlLnV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYWxwaGE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXN0YW5jZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGRpc3RhbmNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9hbmdsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fYW5nbGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBncmV5c2NhbGVzIHRoZSBwYWxldHRlIG9mIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBHcmF5RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JheTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIHZlYzMoMC4yMTI2KmdsX0ZyYWdDb2xvci5yICsgMC43MTUyKmdsX0ZyYWdDb2xvci5nICsgMC4wNzIyKmdsX0ZyYWdDb2xvci5iKSwgZ3JheSk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXk6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuR3JheUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkdyYXlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JheUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JheUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR3JheUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXkuIDEgd2lsbCBtYWtlIHRoZSBvYmplY3QgYmxhY2sgYW5kIHdoaXRlLCAwIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5HcmF5RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYXk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGZpbHRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmZpbHRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXNjaWlGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2FzY2lpL0FzY2lpRmlsdGVyJyksXG4gICAgQmxvb21GaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2Jsb29tL0Jsb29tRmlsdGVyJyksXG4gICAgQmx1ckZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckZpbHRlcicpLFxuICAgIEJsdXJYRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1cllGaWx0ZXInKSxcbiAgICBCbHVyRGlyRmlsdGVyOiAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRGlyRmlsdGVyJyksXG4gICAgQ29sb3JNYXRyaXhGaWx0ZXI6ICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yTWF0cml4RmlsdGVyJyksXG4gICAgQ29sb3JTdGVwRmlsdGVyOiAgICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yU3RlcEZpbHRlcicpLFxuICAgIENvbnZvbHV0aW9uRmlsdGVyOiAgcmVxdWlyZSgnLi9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlcicpLFxuICAgIENyb3NzSGF0Y2hGaWx0ZXI6ICAgcmVxdWlyZSgnLi9jcm9zc2hhdGNoL0Nyb3NzSGF0Y2hGaWx0ZXInKSxcbiAgICBEaXNwbGFjZW1lbnRGaWx0ZXI6IHJlcXVpcmUoJy4vZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlcicpLFxuICAgIERvdFNjcmVlbkZpbHRlcjogICAgcmVxdWlyZSgnLi9kb3QvRG90U2NyZWVuRmlsdGVyJyksXG4gICAgR3JheUZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2dyYXkvR3JheUZpbHRlcicpLFxuICAgIERyb3BTaGFkb3dGaWx0ZXI6ICAgcmVxdWlyZSgnLi9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXInKSxcbiAgICBJbnZlcnRGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vaW52ZXJ0L0ludmVydEZpbHRlcicpLFxuICAgIE5vaXNlRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ub2lzZS9Ob2lzZUZpbHRlcicpLFxuICAgIFBpeGVsYXRlRmlsdGVyOiAgICAgcmVxdWlyZSgnLi9waXhlbGF0ZS9QaXhlbGF0ZUZpbHRlcicpLFxuICAgIFJHQlNwbGl0RmlsdGVyOiAgICAgcmVxdWlyZSgnLi9yZ2IvUkdCU3BsaXRGaWx0ZXInKSxcbiAgICBTaG9ja3dhdmVGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vc2hvY2t3YXZlL1Nob2Nrd2F2ZUZpbHRlcicpLFxuICAgIFNlcGlhRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9zZXBpYS9TZXBpYUZpbHRlcicpLFxuICAgIFNtYXJ0Qmx1ckZpbHRlcjogICAgcmVxdWlyZSgnLi9ibHVyL1NtYXJ0Qmx1ckZpbHRlcicpLFxuICAgIFRpbHRTaGlmdEZpbHRlcjogICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyJyksXG4gICAgVHdpc3RGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3R3aXN0L1R3aXN0RmlsdGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGludmVydHMgeW91ciBEaXNwbGF5IE9iamVjdHMgY29sb3JzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBJbnZlcnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gZmxvYXQgaW52ZXJ0O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggKHZlYzMoMSktZ2xfRnJhZ0NvbG9yLnJnYikgKiBnbF9GcmFnQ29sb3IuYSwgZ2xfRnJhZ0NvbG9yLnJnYiwgMS4wIC0gaW52ZXJ0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBpbnZlcnQ6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludmVydEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gSW52ZXJ0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhJbnZlcnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBpbnZlcnQuIGAxYCB3aWxsIGZ1bGx5IGludmVydCB0aGUgY29sb3JzLCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkludmVydEZpbHRlciNcbiAgICAgKi9cbiAgICBpbnZlcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9hZGp1c3Qvbm9pc2UuanNcbiAqL1xuXG4vKipcbiAqIEEgTm9pc2UgZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gTm9pc2VGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgbm9pc2U7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgcmFuZCh2ZWMyIGNvKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoY28ueHksIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZmxvYXQgZGlmZiA9IChyYW5kKHZUZXh0dXJlQ29vcmQpIC0gMC41KSAqIG5vaXNlO1xcblxcbiAgICBjb2xvci5yICs9IGRpZmY7XFxuICAgIGNvbG9yLmcgKz0gZGlmZjtcXG4gICAgY29sb3IuYiArPSBkaWZmO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBub2lzZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbk5vaXNlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuTm9pc2VGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTm9pc2VGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE5vaXNlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2lzZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIG5vaXNlIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuTm9pc2VGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMC41XG4gICAgICovXG4gICAgbm9pc2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHBpeGVsYXRlIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciAnYmxvY2t5Jy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUGl4ZWxhdGVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZDtcXG5cXG4gICAgdmVjMiBzaXplID0gZGltZW5zaW9ucy54eSAvIHBpeGVsU2l6ZTtcXG5cXG4gICAgdmVjMiBjb2xvciA9IGZsb29yKCAoIHZUZXh0dXJlQ29vcmQgKiBzaXplICkgKSAvIHNpemUgKyBwaXhlbFNpemUvZGltZW5zaW9ucy54eSAqIDAuNTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb2xvcik7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgICB2YWx1ZTogeyB4OiAxMCwgeTogMTAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBpeGVsYXRlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBQaXhlbGF0ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBhIHBvaW50IHRoYXQgZGVzY3JpYmVzIHRoZSBzaXplIG9mIHRoZSBibG9ja3MuXG4gICAgICogeCBpcyB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGFuZCB5IGlzIHRoZSBoZWlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUGl4ZWxhdGVGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEFuIFJHQiBTcGxpdCBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFJHQlNwbGl0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcmVkO1xcbnVuaWZvcm0gdmVjMiBncmVlbjtcXG51bmlmb3JtIHZlYzIgYmx1ZTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yLnIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyByZWQvZGltZW5zaW9ucy54eSkucjtcXG4gICBnbF9GcmFnQ29sb3IuZyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGdyZWVuL2RpbWVuc2lvbnMueHkpLmc7XFxuICAgZ2xfRnJhZ0NvbG9yLmIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBibHVlL2RpbWVuc2lvbnMueHkpLmI7XFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgZ3JlZW46ICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAtMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGJsdWU6ICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IC0yMCB9IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUkdCU3BsaXRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFJHQlNwbGl0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSR0JTcGxpdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBSZWQgY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgcmVkOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yZWQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmVlbiBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmVlbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEJsdWUgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgYXBwbGllcyBhIHNlcGlhIGVmZmVjdCB0byB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2VwaWFGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc2VwaWE7XFxuXFxuY29uc3QgbWF0MyBzZXBpYU1hdHJpeCA9IG1hdDMoMC4zNTg4LCAwLjcwNDQsIDAuMTM2OCwgMC4yOTkwLCAwLjU4NzAsIDAuMTE0MCwgMC4yMzkyLCAwLjQ2OTYsIDAuMDkxMik7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZ2xfRnJhZ0NvbG9yLnJnYiAqIHNlcGlhTWF0cml4LCBzZXBpYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2VwaWE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2VwaWFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TZXBpYUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXBpYUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2VwaWFGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNlcGlhRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgc2VwaWEuIGAxYCB3aWxsIGFwcGx5IHRoZSBmdWxsIHNlcGlhIGVmZmVjdCwgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TZXBpYUZpbHRlciNcbiAgICAgKi9cbiAgICBzZXBpYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA0eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTaG9ja3dhdmVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XFxudW5pZm9ybSB2ZWMzIHBhcmFtczsgLy8gMTAuMCwgMC44LCAwLjFcXG51bmlmb3JtIGZsb2F0IHRpbWU7XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSB2VGV4dHVyZUNvb3JkO1xcbiAgICB2ZWMyIHRleENvb3JkID0gdXY7XFxuXFxuICAgIGZsb2F0IGRpc3QgPSBkaXN0YW5jZSh1diwgY2VudGVyKTtcXG5cXG4gICAgaWYgKCAoZGlzdCA8PSAodGltZSArIHBhcmFtcy56KSkgJiYgKGRpc3QgPj0gKHRpbWUgLSBwYXJhbXMueikpIClcXG4gICAge1xcbiAgICAgICAgZmxvYXQgZGlmZiA9IChkaXN0IC0gdGltZSk7XFxuICAgICAgICBmbG9hdCBwb3dEaWZmID0gMS4wIC0gcG93KGFicyhkaWZmKnBhcmFtcy54KSwgcGFyYW1zLnkpO1xcblxcbiAgICAgICAgZmxvYXQgZGlmZlRpbWUgPSBkaWZmICAqIHBvd0RpZmY7XFxuICAgICAgICB2ZWMyIGRpZmZVViA9IG5vcm1hbGl6ZSh1diAtIGNlbnRlcik7XFxuICAgICAgICB0ZXhDb29yZCA9IHV2ICsgKGRpZmZVViAqIGRpZmZUaW1lKTtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHRleENvb3JkKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBjZW50ZXI6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9LFxuICAgICAgICAgICAgcGFyYW1zOiB7IHR5cGU6ICd2MycsIHZhbHVlOiB7IHg6IDEwLCB5OiAwLjgsIHo6IDAuMSB9IH0sXG4gICAgICAgICAgICB0aW1lOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaG9ja3dhdmVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNob2Nrd2F2ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNlbnRlciBvZiB0aGUgc2hvY2t3YXZlIGluIG5vcm1hbGl6ZWQgc2NyZWVuIGNvb3Jkcy4gVGhhdCBpc1xuICAgICAqICgwLDApIGlzIHRoZSB0b3AtbGVmdCBhbmQgKDEsMSkgaXMgdGhlIGJvdHRvbSByaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgY2VudGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGFyYW1zIG9mIHRoZSBzaG9ja3dhdmUuIFRoZXNlIG1vZGlmeSB0aGUgbG9vayBhbmQgYmVoYXZpb3Igb2ZcbiAgICAgKiB0aGUgc2hvY2t3YXZlIGFzIGl0IHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIHNob2Nrd2F2ZS4gVGhpcyBjb250cm9scyB0aGUgc3BlZWQgYXQgd2hpY2hcbiAgICAgKiB0aGUgc2hvY2t3YXZlIHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHRpbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRBeGlzRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRBeGlzRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGJsdXI7XFxudW5pZm9ybSBmbG9hdCBncmFkaWVudEJsdXI7XFxudW5pZm9ybSB2ZWMyIHN0YXJ0O1xcbnVuaWZvcm0gdmVjMiBlbmQ7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcbnVuaWZvcm0gdmVjMiB0ZXhTaXplO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcbiAgICB2ZWMyIG5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMyKHN0YXJ0LnkgLSBlbmQueSwgZW5kLnggLSBzdGFydC54KSk7XFxuICAgIGZsb2F0IHJhZGl1cyA9IHNtb290aHN0ZXAoMC4wLCAxLjAsIGFicyhkb3QodlRleHR1cmVDb29yZCAqIHRleFNpemUgLSBzdGFydCwgbm9ybWFsKSkgLyBncmFkaWVudEJsdXIpICogYmx1cjtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgLyB0ZXhTaXplICogcGVyY2VudCAqIHJhZGl1cyk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6ICAgICAgICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxMDAgfSxcbiAgICAgICAgICAgIGdyYWRpZW50Qmx1cjogICB7IHR5cGU6ICcxZicsIHZhbHVlOiA2MDAgfSxcbiAgICAgICAgICAgIHN0YXJ0OiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAsICAgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZW5kOiAgICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogNjAwLCAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBkZWx0YTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAzMCwgICB5OiAzMCB9IH0sXG4gICAgICAgICAgICB0ZXhTaXplOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiB3aW5kb3cuaW5uZXJXaWR0aCwgeTogd2luZG93LmlubmVySGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbn1cblxuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICogVGhpcyBpcyBvdmVycmlkZGVuIGluIHRoZSBYIGFuZCBZIGZpbHRlcnMsIGRvZXMgbm90aGluZyBmb3IgdGhpcyBjbGFzcy5cbiAqXG4gKi9cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAwO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IDA7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WUZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnQgRmlsdGVyLiBNYW5hZ2VzIHRoZSBwYXNzIG9mIGJvdGggYSBUaWx0U2hpZnRYRmlsdGVyIGFuZCBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlciA9IG5ldyBUaWx0U2hpZnRYRmlsdGVyKCk7XG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyID0gbmV3IFRpbHRTaGlmdFlGaWx0ZXIoKTtcbn1cblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0RmlsdGVyO1xuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ncmFkaWVudEJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5zdGFydCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5lbmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRYRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gZHggLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR5IC8gZDtcbn07XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFlGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WUZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAtZHkgLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR4IC8gZDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgdHdpc3QgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHR3aXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVHdpc3RGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgLSBvZmZzZXQ7XFxuICAgZmxvYXQgZGlzdCA9IGxlbmd0aChjb29yZCk7XFxuXFxuICAgaWYgKGRpc3QgPCByYWRpdXMpXFxuICAge1xcbiAgICAgICBmbG9hdCByYXRpbyA9IChyYWRpdXMgLSBkaXN0KSAvIHJhZGl1cztcXG4gICAgICAgZmxvYXQgYW5nbGVNb2QgPSByYXRpbyAqIHJhdGlvICogYW5nbGU7XFxuICAgICAgIGZsb2F0IHMgPSBzaW4oYW5nbGVNb2QpO1xcbiAgICAgICBmbG9hdCBjID0gY29zKGFuZ2xlTW9kKTtcXG4gICAgICAgY29vcmQgPSB2ZWMyKGNvb3JkLnggKiBjIC0gY29vcmQueSAqIHMsIGNvb3JkLnggKiBzICsgY29vcmQueSAqIGMpO1xcbiAgIH1cXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkK29mZnNldCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBvZmZzZXQ6ICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuVHdpc3RGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ud2lzdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUd2lzdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVHdpc3RGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFR3aXN0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgZGVzY3JpYmVzIHRoZSB0aGUgb2Zmc2V0IG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcmFkaXVzIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIHJhZGl1czoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBhbmdsZSBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvLyBydW4gdGhlIHBvbHlmaWxsc1xucmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbi8vIGFkZCBjb3JlIHBsdWdpbnMuXG5jb3JlLmV4dHJhcyAgICAgICAgID0gcmVxdWlyZSgnLi9leHRyYXMnKTtcbmNvcmUuZmlsdGVycyAgICAgICAgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcbmNvcmUuaW50ZXJhY3Rpb24gICAgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9uJyk7XG5jb3JlLmxvYWRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9sb2FkZXJzJyk7XG5jb3JlLm1lc2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9tZXNoJyk7XG5jb3JlLmFjY2Vzc2liaWxpdHkgID0gcmVxdWlyZSgnLi9hY2Nlc3NpYmlsaXR5Jyk7XG5cbi8vIGV4cG9ydCBhIHByZW1hZGUgbG9hZGVyIGluc3RhbmNlXG4vKipcbiAqIEEgcHJlbWFkZSBpbnN0YW5jZSBvZiB0aGUgbG9hZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZGVyIHJlc291cmNlcy5cbiAqXG4gKiBAbmFtZSBsb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcHJvcGVydHkge1BJWEkubG9hZGVycy5Mb2FkZXJ9XG4gKi9cbmNvcmUubG9hZGVyID0gbmV3IGNvcmUubG9hZGVycy5Mb2FkZXIoKTtcblxuLy8gbWl4aW4gdGhlIGRlcHJlY2F0aW9uIGZlYXR1cmVzLlxuT2JqZWN0LmFzc2lnbihjb3JlLCByZXF1aXJlKCcuL2RlcHJlY2F0aW9uJykpO1xuXG4vLyBBbHdheXMgZXhwb3J0IHBpeGkgZ2xvYmFsbHkuXG5nbG9iYWwuUElYSSA9IGNvcmU7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBIb2xkcyBhbGwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhbiBJbnRlcmFjdGlvbiBldmVudFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25EYXRhKClcbntcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IHN0b3JlcyB0aGUgZ2xvYmFsIGNvb3JkcyBvZiB3aGVyZSB0aGUgdG91Y2gvbW91c2UgZXZlbnQgaGFwcGVuZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5nbG9iYWwgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBTcHJpdGUgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBhc3NlZCB0byBhbiBldmVudCBoYW5kbGVyLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbmFsIERPTSBFdmVudCB0aGF0IHdhcyBjYXB0dXJlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gbnVsbDtcbn1cblxuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25EYXRhO1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBzcGVjaWZpZWQgZGlzcGxheU9iamVjdCBmb3IgdGhpcyBJbnRlcmFjdGlvbkRhdGFcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSBsb2NhbCBjb29yZHMgb2ZmXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IHBvaW50KVxuICogQHBhcmFtIFtnbG9iYWxQb3NdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHlvdXIgY3VzdG9tIGdsb2JhbCBjb29yZHMsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCB1c2UgdGhlIGN1cnJlbnQgZ2xvYmFsIGNvb3JkcylcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEludGVyYWN0aW9uRGF0YSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgRGlzcGxheU9iamVjdFxuICovXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmdldExvY2FsUG9zaXRpb24gPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcG9pbnQsIGdsb2JhbFBvcylcbntcbiAgICByZXR1cm4gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UoZ2xvYmFsUG9zIHx8IHRoaXMuZ2xvYmFsLCBwb2ludCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgSW50ZXJhY3Rpb25EYXRhID0gcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKTtcblxuLy8gTWl4IGludGVyYWN0aXZlVGFyZ2V0IGludG8gY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZVxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxuKTtcblxuLyoqXG4gKiBUaGUgaW50ZXJhY3Rpb24gbWFuYWdlciBkZWFscyB3aXRoIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuIEFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBpbnRlcmFjdGl2ZVxuICogaWYgaXRzIGludGVyYWN0aXZlIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZVxuICogVGhpcyBtYW5hZ2VyIGFsc28gc3VwcG9ydHMgbXVsdGl0b3VjaC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdD10cnVlXSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBtYW5hZ2VyIGF1dG9tYXRpY2FsbHkgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeT0xMF0ge251bWJlcn0gRnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyLCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgaW50ZXJhY3Rpb24gbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGJlIHByZXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0ID0gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0IDogdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFzIHRoaXMgZnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZCBtb3JlIG9mdGVuLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSA9IG9wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW91c2UgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9XG4gICAgICovXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IGRhdGEgb2JqZWN0IHRvIGhhbmRsZSBhbGwgdGhlIGV2ZW50IHRyYWNraW5nL2Rpc3BhdGNoaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5ldmVudERhdGEgPSB7XG4gICAgICAgIHN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgIGRhdGE6IHRoaXMubW91c2UsXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGxpdHRsZSBpbnRlcmFjdGl2ZURhdGEgcG9vbCAhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YVtdfVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBlbGVtZW50IHRvIGJpbmQgdG8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhhdmUgZXZlbnRzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGRvbSBlbGVtZW50P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcblxuICAgIC8vdGhpcyB3aWxsIG1ha2UgaXQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGJpbmQgYWxsIHRoZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VVcCA9IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IHRoaXMucHJvY2Vzc01vdXNlVXAuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IHRoaXMucHJvY2Vzc01vdXNlRG93bi5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gdGhpcy5wcm9jZXNzTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU91dCA9IHRoaXMub25Nb3VzZU91dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gdGhpcy5vblRvdWNoU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gdGhpcy5wcm9jZXNzVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoRW5kID0gdGhpcy5vblRvdWNoRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSB0aGlzLnByb2Nlc3NUb3VjaEVuZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IHRoaXMub25Ub3VjaE1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSB0aGlzLnByb2Nlc3NUb3VjaE1vdmUuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxhc3QgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNzcyBzdHlsZSBvZiB0aGUgY3Vyc29yIHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9ICdpbmhlcml0JztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNhY2hlZCB2YXJcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcblxuICAgIHRoaXMuc2V0VGFyZ2V0RWxlbWVudCh0aGlzLnJlbmRlcmVyLnZpZXcsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbik7XG59XG5cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UvdG91Y2ggZXZlbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZVxuICogb3RoZXIgRE9NIGVsZW1lbnRzIG9uIHRvcCBvZiB0aGUgcmVuZGVyZXJzIENhbnZhcyBlbGVtZW50LiBXaXRoIHRoaXMgeW91J2xsIGJlIGJhbGUgdG8gZGVsZXRlZ2F0ZVxuICogYW5vdGhlciBET00gZWxlbWVudCB0byByZWNlaXZlIHRob3NlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9IHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUSGUgcmVzb2x1dGlvbiBvZiB0aGUgbmV3IGVsZW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBjYW52YXMpLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXRUYXJnZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJlc29sdXRpb24pXG57XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgdGhlIERPTSBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAgICB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgICB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICAgICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICAgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgICAgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgICAgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgdGhlIERPTSBldmVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICcnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzLlxuICogSW52b2tlZCBieSBhIHRocm90dGxlZCB0aWNrZXIgdXBkYXRlIGZyb21cbiAqIHtAbGluayBQSVhJLnRpY2tlci5zaGFyZWR9LlxuICpcbiAqIEBwYXJhbSBkZWx0YVRpbWUge251bWJlcn1cbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHRoaXMuX2RlbHRhVGltZSArPSBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZGVsdGFUaW1lIDwgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWx0YVRpbWUgPSAwO1xuXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBtb3ZlIHRoZSBtb3VzZSB0aGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gZGZvbmUgdXNpbmcgdGhlIG1vdXNlIG1vdmUhXG4gICAgaWYodGhpcy5kaWRNb3ZlKVxuICAgIHtcbiAgICAgICAgdGhpcy5kaWRNb3ZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ET1xufTtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgZGlzcGxheSBvYmplY3QgaW4gcXVlc3Rpb25cbiAqIEBwYXJhbSBldmVudFN0cmluZyB7c3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGUuZywgbW91c2Vkb3duKVxuICogQHBhcmFtIGV2ZW50RGF0YSB7b2JqZWN0fSB0aGUgZXZlbnQgZGF0YSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApXG57XG4gICAgaWYoIWV2ZW50RGF0YS5zdG9wcGVkKVxuICAgIHtcbiAgICAgICAgZXZlbnREYXRhLnRhcmdldCA9IGRpc3BsYXlPYmplY3Q7XG4gICAgICAgIGV2ZW50RGF0YS50eXBlID0gZXZlbnRTdHJpbmc7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5lbWl0KCBldmVudFN0cmluZywgZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10oIGV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXBzIHggYW5kIHkgY29vcmRzIGZyb20gYSBET00gb2JqZWN0IGFuZCBtYXBzIHRoZW0gY29ycmVjdGx5IHRvIHRoZSBwaXhpIHZpZXcuIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBwb2ludC5cbiAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgdGhlIERPTSBlbGVtZW50IGNvdWxkIGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCBhbnl3aGVyZSBvbiB0aGUgc2NyZWVuLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW5cbiAqIEBwYXJhbSAge251bWJlcn0geCAgICAgdGhlIHggY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICogQHBhcmFtICB7bnVtYmVyfSB5ICAgICB0aGUgeSBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUubWFwUG9zaXRpb25Ub1BvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgeCwgeSApXG57XG4gICAgdmFyIHJlY3QgPSB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBwb2ludC54ID0gKCAoIHggLSByZWN0LmxlZnQgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC53aWR0aCAgLyByZWN0LndpZHRoICApICkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgcG9pbnQueSA9ICggKCB5IC0gcmVjdC50b3AgICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuaGVpZ2h0IC8gcmVjdC5oZWlnaHQgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVzIGEgbmVhdCB3YXkgb2YgY3Jhd2xpbmcgdGhyb3VnaCB0aGUgc2NlbmUgZ3JhcGggYW5kIHJ1bm5pbmcgYSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gYWxsIGludGVyYWN0aXZlIG9iamVjdHMgaXQgZmluZHMuXG4gKiBJdCB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIGhpdCB0ZXN0aW5nIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlIGhpdCBhY3Jvc3MgaW4gdGhlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IGlzIHRlc3RlZCBmb3IgY29sbGlzaW9uXG4gKiBAcGFyYW0gIHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IGRpc3BsYXlPYmplY3QgdGhlIGRpc3BsYXlPYmplY3QgdGhhdCB3aWxsIGJlIGhpdCB0ZXN0IChyZWN1cmNzaXZseSBjcmF3bHMgaXRzIGNoaWxkcmVuKVxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBpbnRlcmFjdGl2ZSBvYmplY3QuIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBoaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtib29sZWFufSBoaXRUZXN0IHRoaXMgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3RzIGluc2lkZSBzaG91bGQgYmUgaGl0IHRlc3QgYWdhaW5zdCB0aGUgcG9pbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiB0aGUgZGlzcGxheU9iamVjdCBoaXQgdGhlIHBvaW50XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0ludGVyYWN0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBkaXNwbGF5T2JqZWN0LCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZSlcbntcbiAgICBpZighZGlzcGxheU9iamVjdCB8fCAhZGlzcGxheU9iamVjdC52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRvb2sgYSBsaXR0bGUgd2hpbGUgdG8gcmV3b3JrIHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5ISBCdXQgbm93IGl0IGlzIGRvbmUgYW5kIG5pY2UgYW5kIG9wdGltaXNlZC4gXl9eXG4gICAgLy8gXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdyBsb29wIHRocm91Z2ggYWxsIG9iamVjdHMgYW5kIHRoZW4gb25seSBoaXQgdGVzdCB0aGUgb2JqZWN0cyBpdCBIQVMgdG8sIG5vdCBhbGwgb2YgdGhlbS4gTVVDSCBmYXN0ZXIuLlxuICAgIC8vIEFuIG9iamVjdCB3aWxsIGJlIGhpdCB0ZXN0IGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICAvLyBcbiAgICAvLyAxOiBJdCBpcyBpbnRlcmFjdGl2ZS5cbiAgICAvLyAyOiBJdCBiZWxvbmdzIHRvIGEgcGFyZW50IHRoYXQgaXMgaW50ZXJhY3RpdmUgQU5EIG9uZSBvZiB0aGUgcGFyZW50cyBjaGlsZHJlbiBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIC8vIFxuICAgIC8vIEFzIGFub3RoZXIgbGl0dGxlIG9wdGltaXNhdGlvbiBvbmNlIGFuIGludGVyYWN0aXZlIG9iamVjdCBoYXMgYmVlbiBoaXQgd2UgY2FuIGNhcnJ5IG9uIHRocm91Z2ggdGhlIHNjZW5lZ3JhcGgsIGJ1dCB3ZSBrbm93IHRoYXQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGhpdHMhIFNvIHdlIGNhbiBhdm9pZCBleHRyYSBoaXQgdGVzdHNcbiAgICAvLyBBIGZpbmFsIG9wdGltaXNhdGlvbiBpcyB0aGF0IGFuIG9iamVjdCBpcyBub3QgaGl0IHRlc3QgZGlyZWN0bHkgaWYgYSBjaGlsZCBoYXMgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICBcbiAgICB2YXIgaGl0ID0gZmFsc2UsXG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gaW50ZXJhY3RpdmUgPSBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlIHx8IGludGVyYWN0aXZlO1xuXG4gICAgLy8gaWYgdGhlIGRpc3BsYXlvYmplY3QgaGFzIGEgaGl0QXJlYSwgdGhlbiBpdCBkb2VzIG5vdCBuZWVkIHRvIGhpdFRlc3QgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAqKiBGUkVFIFRJUCAqKiEgSWYgYW4gb2JqZWN0IGlzIG5vdCBpbnRlcmFjdHRpdmUgb3IgaGFzIG5vIGJ1dHRvbnMgaW4gaXQgKHN1Y2ggYXMgYSBnYW1lIHNjZW5lISkgc2V0IGludGVyYWN0aXZlQ2hpbGRyZW4gdG8gZmFsc2UgZm9yIHRoYXQgZGlzcGxheU9iamVjdC5cbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgcGl4aSB0byBjb21wbGV0bHkgaWdub3JlIGFuZCBieXBhc3MgY2hlY2tpbmcgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmVDaGlsZHJlbilcbiAgICB7ICAgICAgIFxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aC0xOyBpID49IDA7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGltZSB0byBnZXQgcmVjdXJzaXZlLi4gaWYgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpZiBzb210aGluZyBpcyBoaXQuLlxuICAgICAgICAgICAgaWYoIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHBvaW50LCBjaGlsZHJlbltpXSwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmVQYXJlbnQpIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55IG1vcmUgb2JqZWN0cyBpbiB0aGlzIGNvbnRhaW5lciBhcyB3ZSB3ZSBub3cga25vdyB0aGUgcGFyZW50IGhhcyBiZWVuIGhpdFxuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGludGVyYWN0aXZlICwgdGhhdCBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGl0IHdhcyBhY3R1YWxseSBpbnRlcmFjdGl2ZSBhbmQgbm90IGp1c3QgdGhlIGNoaWxkIG9mIGFuIGludGVyYWN0aXZlIG9iamVjdC4gXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnl0aGluZyBlbHNlLiBXZSBzdGlsbCBuZWVkIHRvIHJ1biB0aHJvdWdoIGFsbCBvYmplY3RzLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBoaXQgdGVzdHMuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uaW50ZXJhY3RpdmUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoaXRUZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm8gcG9pbnQgcnVubmluZyB0aGlzIGlmIHRoZSBpdGVtIGlzIG5vdCBpbnRlcmFjdGl2ZSBvciBkb2VzIG5vdCBoYXZlIGFuIGludGVyYWN0aXZlIHBhcmVudC5cbiAgICBpZihpbnRlcmFjdGl2ZSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBoaXQgdGVzdGluZyAoYXMgaW4gd2UgaGF2ZSBubyBoaXQgYW55IG9iamVjdHMgeWV0KVxuICAgICAgICAvLyBXZSBhbHNvIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGl0IHRlc3RpbmcgaWYgb25jZSBvZiB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4gaGFzIGFscmVhZHkgYmVlbiBoaXQhXG4gICAgICAgIGlmKGhpdFRlc3QgJiYgIWhpdClcbiAgICAgICAgeyAgXG4gICAgICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0aGlzLl90ZW1wUG9pbnQpO1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuaGl0QXJlYS5jb250YWlucyggdGhpcy5fdGVtcFBvaW50LngsIHRoaXMuX3RlbXBQb2ludC55ICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnVuYyhkaXNwbGF5T2JqZWN0LCBoaXQpOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIFxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyBwcmVzc2VkIGRvd25cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZURvd24sIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIGRvd24gY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VEb3duID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuICAgIFxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3RbIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bicgXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGRvd24nIDogJ21vdXNlZG93bicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcmVsZWFzZWRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VVcCwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgdXAgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlVXAgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG4gICAgdmFyIGlzRG93biA9ICBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXAnIDogJ21vdXNldXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRjbGljaycgOiAnY2xpY2snLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cG91dHNpZGUnIDogJ21vdXNldXBvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiB0aGUgbW91c2UgbW92aW5nXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmRpZE1vdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU1vdmUsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE8gQlVHIGZvciBwYXJlbnRzIGluZXJhY3RpdmUgb2JqZWN0IChib3JkZXIgb3JkZXIgaXNzdWUpXG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2Vtb3ZlJywgdGhpcy5ldmVudERhdGEpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dChkaXNwbGF5T2JqZWN0LCBoaXQpO1xufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYmVpbmcgbW92ZWQgb3V0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICAvLyBUT0RPIG9wdGltaXplIGJ5IG5vdCBjaGVjayBFVkVSWSBUSU1FISBtYXliZSBoYWxmIGFzIG9mdGVuPyAvL1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgZmFsc2UgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG92ZXIvb3V0IGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgaWYoIWRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5T2JqZWN0LmJ1dHRvbk1vZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gZGlzcGxheU9iamVjdC5kZWZhdWx0Q3Vyc29yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgdGhpcy5ldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgc3RhcnRlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBzdGFydGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG4gICAgICAgIC8vVE9ETyBQT09MXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaFN0YXJ0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoc3RhcnQnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGVuZHMgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggZW5kaW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIC8vVE9ETyB0aGlzIHNob3VsZCBiZSBwYXNzZWQgYWxvbmcuLiBubyBzZXRcbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hFbmQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgZW5kIG9mIGEgdG91Y2ggYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoRW5kID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0YXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgbW92ZWQgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIG1vdmluZyBhY3Jvc3MgdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaE1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaGl0ID0gaGl0O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNobW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogR3JhYnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaEV2ZW50IHtFdmVudERhdGF9IFRoZSB0b3VjaCBldmVudCB3ZSBuZWVkIHRvIHBhaXIgd2l0aCBhbiBpbnRlcmFjdGlvbkRhdGEgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRUb3VjaERhdGEgPSBmdW5jdGlvbiAodG91Y2hFdmVudClcbntcbiAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnBvcCgpO1xuXG4gICAgaWYoIXRvdWNoRGF0YSlcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcbiAgICB9XG5cbiAgICB0b3VjaERhdGEuaWRlbnRpZmllciA9IHRvdWNoRXZlbnQuaWRlbnRpZmllcjtcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdG91Y2hEYXRhLmdsb2JhbCwgdG91Y2hFdmVudC5jbGllbnRYLCB0b3VjaEV2ZW50LmNsaWVudFkgKTtcblxuICAgIGlmKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC54ID0gdG91Y2hEYXRhLmdsb2JhbC54IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnkgPSB0b3VjaERhdGEuZ2xvYmFsLnkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgfVxuXG4gICAgdG91Y2hFdmVudC5nbG9iYWxYID0gdG91Y2hEYXRhLmdsb2JhbC54O1xuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWSA9IHRvdWNoRGF0YS5nbG9iYWwueTtcblxuICAgIHJldHVybiB0b3VjaERhdGE7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hEYXRhIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX0gVGhlIHRvdWNoIGRhdGEgb2JqZWN0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5Ub3VjaERhdGEgPSBmdW5jdGlvbiAoIHRvdWNoRGF0YSApXG57XG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnB1c2goIHRvdWNoRGF0YSApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgaW50ZXJhY3Rpb24gbWFuYWdlclxuICpcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMubW91c2UgPSBudWxsO1xuXG4gICAgdGhpcy5ldmVudERhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZVVwID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gbnVsbDtcblxuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaEVuZCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMuX3RlbXBQb2ludCA9IG51bGw7XG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGludGVyYWN0aW9ucyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSW50ZXJhY3Rpb25EYXRhOiAgICByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpLFxuICAgIEludGVyYWN0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9JbnRlcmFjdGlvbk1hbmFnZXInKSxcbiAgICBpbnRlcmFjdGl2ZVRhcmdldDogIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxufTtcbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgaW50ZXJhY3RpdmUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmludGVyYWN0aW9uLmludGVyYWN0aXZlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBpbnRlcmFjdGl2ZVRhcmdldCA9IHtcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGJ1dHRvbk1vZGU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmVDaGlsZHJlbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGRlZmF1bHRDdXJzb3I6ICdwb2ludGVyJyxcblxuICAgIC8vIHNvbWUgaW50ZXJuYWwgY2hlY2tzLi5cblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb3ZlcjogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90b3VjaERvd246IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyYWN0aXZlVGFyZ2V0O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuLi9leHRyYXMnKSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5cbmZ1bmN0aW9uIHBhcnNlKHJlc291cmNlLCB0ZXh0dXJlKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgaW5mbyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXTtcbiAgICB2YXIgY29tbW9uID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XG5cbiAgICBkYXRhLmZvbnQgPSBpbmZvLmdldEF0dHJpYnV0ZSgnZmFjZScpO1xuICAgIGRhdGEuc2l6ZSA9IHBhcnNlSW50KGluZm8uZ2V0QXR0cmlidXRlKCdzaXplJyksIDEwKTtcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBwYXJzZUludChjb21tb24uZ2V0QXR0cmlidXRlKCdsaW5lSGVpZ2h0JyksIDEwKTtcbiAgICBkYXRhLmNoYXJzID0ge307XG5cbiAgICAvL3BhcnNlIGxldHRlcnNcbiAgICB2YXIgbGV0dGVycyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NoYXInKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdpZCcpLCAxMCk7XG5cbiAgICAgICAgdmFyIHRleHR1cmVSZWN0ID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3gnKSwgMTApICsgdGV4dHVyZS5mcmFtZS54LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3knKSwgMTApICsgdGV4dHVyZS5mcmFtZS55LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSwgMTApXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICB4T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneG9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB5T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneW9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB4QWR2YW5jZTogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hhZHZhbmNlJyksIDEwKSxcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9LFxuICAgICAgICAgICAgdGV4dHVyZTogbmV3IGNvcmUuVGV4dHVyZSh0ZXh0dXJlLmJhc2VUZXh0dXJlLCB0ZXh0dXJlUmVjdClcblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vcGFyc2Uga2VybmluZ3NcbiAgICB2YXIga2VybmluZ3MgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXJuaW5nJyk7XG4gICAgZm9yIChpID0gMDsgaSA8IGtlcm5pbmdzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdmaXJzdCcpLCAxMCk7XG4gICAgICAgIHZhciBzZWNvbmQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ3NlY29uZCcpLCAxMCk7XG4gICAgICAgIHZhciBhbW91bnQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2Ftb3VudCcpLCAxMCk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tzZWNvbmRdLmtlcm5pbmdbZmlyc3RdID0gYW1vdW50O1xuICAgIH1cblxuICAgIHJlc291cmNlLmJpdG1hcEZvbnQgPSBkYXRhO1xuXG4gICAgLy8gSSdtIGxlYXZpbmcgdGhpcyBhcyBhIHRlbXBvcmFyeSBmaXggc28gd2UgY2FuIHRlc3QgdGhlIGJpdG1hcCBmb250cyBpbiB2M1xuICAgIC8vIGJ1dCBpdCdzIHZlcnkgbGlrZWx5IHRvIGNoYW5nZVxuICAgIGV4dHJhcy5CaXRtYXBUZXh0LmZvbnRzW2RhdGEuZm9udF0gPSBkYXRhO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhIG9yIG5vdCB4bWwgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzWG1sKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBpZiBub3QgYml0bWFwIGZvbnQgZGF0YSwgdXNpbmcgc29tZSBzaWxseSBkdWNrLXR5cGluZ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF0uZ2V0QXR0cmlidXRlKCdmYWNlJykgPT09IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4bWxVcmwgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsKTtcblxuICAgICAgICBpZiAoeG1sVXJsID09PSAnLicpIHtcbiAgICAgICAgICAgIHhtbFVybCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmFzZVVybCAmJiB4bWxVcmwpIHtcbiAgICAgICAgICAgIC8vIGlmIGJhc2V1cmwgaGFzIGEgdHJhaWxpbmcgc2xhc2ggdGhlbiBhZGQgb25lIHRvIHhtbFVybCBzbyB0aGUgcmVwbGFjZSB3b3JrcyBiZWxvd1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVVybC5jaGFyQXQodGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEpID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYmFzZVVybCBmcm9tIHhtbFVybFxuICAgICAgICAgICAgeG1sVXJsID0geG1sVXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiB4bWxVcmwgbm93LCBpdCBuZWVkcyBhIHRyYWlsaW5nIHNsYXNoLiBFbnN1cmUgdGhhdCBpdCBkb2VzIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZW1wdHkuXG4gICAgICAgIGlmICh4bWxVcmwgJiYgeG1sVXJsLmNoYXJBdCh4bWxVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4dHVyZVVybCA9IHhtbFVybCArIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKVswXS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKTtcbiAgICAgICAgaWYgKGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKSB7XG4gICAgICAgICAgICAvL3JldXNlIGV4aXN0aW5nIHRleHR1cmVcbiAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBsb2FkIHRoZSB0ZXh0dXJlIGZvciB0aGUgZm9udFxuICAgICAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCB0ZXh0dXJlVXJsLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCByZXMudGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGxvYWRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmxvYWRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTG9hZGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlcicpLFxuXG4gICAgLy8gcGFyc2Vyc1xuICAgIGJpdG1hcEZvbnRQYXJzZXI6ICAgcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXI6ICByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgdGV4dHVyZVBhcnNlcjogICAgICByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBSZXNvdXJjZTogICAgICAgICAgIHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlXG59O1xuIiwidmFyIFJlc291cmNlTG9hZGVyID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJyksXG4gICAgdGV4dHVyZVBhcnNlciA9IHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyID0gcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIGJpdG1hcEZvbnRQYXJzZXIgPSByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKTtcblxuLyoqXG4gKlxuICogVGhlIG5ldyBsb2FkZXIsIGV4dGVuZHMgUmVzb3VyY2UgTG9hZGVyIGJ5IENoYWQgRW5nbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2VuZ2xlcmNqL3Jlc291cmNlLWxvYWRlclxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbG9hZGVyID0gUElYSS5sb2FkZXI7IC8vIHBpeGkgZXhwb3NlcyBhIHByZW1hZGUgaW5zdGFuY2UgZm9yIHlvdSB0byB1c2UuXG4gKiAvL29yXG4gKiB2YXIgbG9hZGVyID0gbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIoKTsgLy8geW91IGNhbiBhbHNvIGNyZWF0ZSB5b3VyIG93biBpZiB5b3Ugd2FudFxuICpcbiAqIGxvYWRlci5hZGQoJ2J1bm55JyxcImRhdGEvYnVubnkucG5nXCIpO1xuICpcbiAqIGxvYWRlci5vbmNlKCdjb21wbGV0ZScsb25Bc3NldHNMb2FkZWQpO1xuICpcbiAqIGxvYWRlci5sb2FkKCk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuUmVzb3VyY2VMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmxvYWRlcnNcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpXG57XG4gICAgUmVzb3VyY2VMb2FkZXIuY2FsbCh0aGlzLCBiYXNlVXJsLCBjb25jdXJyZW5jeSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IExvYWRlci5fcGl4aU1pZGRsZXdhcmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy51c2UoTG9hZGVyLl9waXhpTWlkZGxld2FyZVtpXSgpKTtcbiAgICB9XG59XG5cbkxvYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuTG9hZGVyLl9waXhpTWlkZGxld2FyZSA9IFtcbiAgICAvLyBwYXJzZSBhbnkgYmxvYiBpbnRvIG1vcmUgdXNhYmxlIG9iamVjdHMgKGUuZy4gSW1hZ2UpXG4gICAgUmVzb3VyY2VMb2FkZXIubWlkZGxld2FyZS5wYXJzaW5nLmJsb2IsXG4gICAgLy8gcGFyc2UgYW55IEltYWdlIG9iamVjdHMgaW50byB0ZXh0dXJlc1xuICAgIHRleHR1cmVQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIHNwcml0ZXNoZWV0UGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBiaXRtYXBGb250UGFyc2VyXG5dO1xuXG5Mb2FkZXIuYWRkUGl4aU1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLnB1c2goZm4pO1xufTtcblxuLy8gQWRkIGN1c3RvbSBleHRlbnRpb25zXG52YXIgUmVzb3VyY2UgPSBSZXNvdXJjZUxvYWRlci5SZXNvdXJjZTtcblxuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSgnZm50JywgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpO1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSwgaXRzIG5vdCBqc29uLCBvciBpdCBpc24ndCBzcHJpdGVzaGVldCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNKc29uIHx8ICFyZXNvdXJjZS5kYXRhLmZyYW1lcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByb3V0ZSA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKSk7XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybCggcmVzb3VyY2UudXJsICk7XG5cbiAgICAgICAgLy8gbG9hZCB0aGUgaW1hZ2UgZm9yIHRoaXMgc2hlZXRcbiAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCByb3V0ZSArICcvJyArIHJlc291cmNlLmRhdGEubWV0YS5pbWFnZSwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzID0ge307XG5cbiAgICAgICAgICAgIHZhciBmcmFtZXMgPSByZXNvdXJjZS5kYXRhLmZyYW1lcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmcmFtZXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBmcmFtZXNbaV0uZnJhbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVjdClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaW0gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC5oLCByZWN0LncpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC53LCByZWN0LmgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS50cmltbWVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmltID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnggLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnkgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLncgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLmggLyByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsaXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQhXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBzaXplLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUueSAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoIC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0IC89IHJlc29sdXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXNbaV0gPSBuZXcgY29yZS5UZXh0dXJlKHJlcy50ZXh0dXJlLmJhc2VUZXh0dXJlLCBzaXplLCBzaXplLmNsb25lKCksIHRyaW0sIGZyYW1lc1tpXS5yb3RhdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbaV0gPSByZXNvdXJjZS50ZXh0dXJlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZSBpZiB0aGUgZGF0YSBpcyBhbiBJbWFnZSBvYmplY3RcbiAgICAgICAgaWYgKHJlc291cmNlLmRhdGEgJiYgcmVzb3VyY2UuaXNJbWFnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGJhc2VUZXh0dXJlID0gbmV3IGNvcmUuQmFzZVRleHR1cmUocmVzb3VyY2UuZGF0YSwgbnVsbCwgY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwocmVzb3VyY2UudXJsKSk7XG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IHJlc291cmNlLnVybDtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmUgPSBuZXcgY29yZS5UZXh0dXJlKGJhc2VUZXh0dXJlKTtcbiAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1Y250aW9uc1xuICAgICAgICAgICAgY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSBiYXNlVGV4dHVyZTtcbiAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSByZXNvdXJjZS50ZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICB0ZW1wUG9seWdvbiA9IG5ldyBjb3JlLlBvbHlnb24oKTtcblxuLyoqXG4gKiBCYXNlIG1lc2ggY2xhc3NcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRvIHVzZVxuICogQHBhcmFtIFt2ZXJ0aWNlc10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdmVydGljZXNcbiAqIEBwYXJhbSBbdXZzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB1dnNcbiAqIEBwYXJhbSBbaW5kaWNlc10ge1VpbnQxNkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBpbmRpY2VzXG4gKiBAcGFyYW0gW2RyYXdNb2RlXSB7bnVtYmVyfSB0aGUgZHJhd01vZGUsIGNhbiBiZSBhbnkgb2YgdGhlIE1lc2guRFJBV19NT0RFUyBjb25zdHNcbiAqL1xuZnVuY3Rpb24gTWVzaCh0ZXh0dXJlLCB2ZXJ0aWNlcywgdXZzLCBpbmRpY2VzLCBkcmF3TW9kZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gdXZzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEsIDAsXG4gICAgICAgIDEsIDEsXG4gICAgICAgIDAsIDFdKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEwMCwgMCxcbiAgICAgICAgMTAwLCAxMDAsXG4gICAgICAgIDAsIDEwMF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICAvLyAgVE9ETyBhdXRvIGdlbmVyYXRlIHRoaXMgYmFzZWQgb24gZHJhdyBtb2RlIVxuICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXMgfHwgbmV3IFVpbnQxNkFycmF5KFswLCAxLCAzLCAyXSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBNZXNoIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gU2V0IHRvIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVtb3ZlIGFueSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRyaWFuZ2xlcyBpbiBjYW52YXMgbW9kZSBhcmUgYXV0b21hdGljYWxseSBhbnRpYWxpYXNlZCwgdXNlIHRoaXMgdmFsdWUgdG8gZm9yY2UgdHJpYW5nbGVzIHRvIG92ZXJsYXAgYSBiaXQgd2l0aCBlYWNoIG90aGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2F5IHRoZSBNZXNoIHNob3VsZCBiZSBkcmF3biwgY2FuIGJlIGFueSBvZiB0aGUge0BsaW5rIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVN9IGNvbnN0c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuZHJhd01vZGUgPSBkcmF3TW9kZSB8fCBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSDtcblxuICAgIC8vIHJ1biB0ZXh0dXJlIHNldHRlcjtcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBtZXNoIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5NZXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2g7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2g7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc2gucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkubWVzaC5NZXNoI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5tZXNoKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLm1lc2gucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4IHwgMCwgdHJhbnNmb3JtLnR5IHwgMCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHgsIHRyYW5zZm9ybS50eSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoKGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMoY29udGV4dCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIFRyaWFuZ2xlIE1lc2ggbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2ggPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoIC8gMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkgKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgsIChpbmRleCArIDIpLCAoaW5kZXggKyA0KSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIHRyaWFuZ2xlIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDMpXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXgwID0gaW5kaWNlc1tpXSAqIDIsIGluZGV4MSA9IGluZGljZXNbaSArIDFdICogMiwgaW5kZXgyID0gaW5kaWNlc1tpICsgMl0gKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4Mik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyBvbmUgb2YgdGhlIHRyaWFuZ2xlcyB0aGF0IGZvcm0gdGhpcyBNZXNoXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdmVydGljZXMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHZlcnRpY2VzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gdXZzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB1dnMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSBpbmRleDAge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDEge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgyIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlID0gZnVuY3Rpb24gKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpXG57XG4gICAgdmFyIHRleHR1cmVTb3VyY2UgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZTtcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aDtcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXgwXSwgeDEgPSB2ZXJ0aWNlc1tpbmRleDFdLCB4MiA9IHZlcnRpY2VzW2luZGV4Ml07XG4gICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgwICsgMV0sIHkxID0gdmVydGljZXNbaW5kZXgxICsgMV0sIHkyID0gdmVydGljZXNbaW5kZXgyICsgMV07XG5cbiAgICB2YXIgdTAgPSB1dnNbaW5kZXgwXSAqIHRleHR1cmVXaWR0aCwgdTEgPSB1dnNbaW5kZXgxXSAqIHRleHR1cmVXaWR0aCwgdTIgPSB1dnNbaW5kZXgyXSAqIHRleHR1cmVXaWR0aDtcbiAgICB2YXIgdjAgPSB1dnNbaW5kZXgwICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MSA9IHV2c1tpbmRleDEgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYyID0gdXZzW2luZGV4MiArIDFdICogdGV4dHVyZUhlaWdodDtcblxuICAgIGlmICh0aGlzLmNhbnZhc1BhZGRpbmcgPiAwKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmdYID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgcGFkZGluZ1kgPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciBjZW50ZXJYID0gKHgwICsgeDEgKyB4MikgLyAzO1xuICAgICAgICB2YXIgY2VudGVyWSA9ICh5MCArIHkxICsgeTIpIC8gMztcblxuICAgICAgICB2YXIgbm9ybVggPSB4MCAtIGNlbnRlclg7XG4gICAgICAgIHZhciBub3JtWSA9IHkwIC0gY2VudGVyWTtcblxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgwID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkwID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgLy9cblxuICAgICAgICBub3JtWCA9IHgxIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MSAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgxID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkxID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgbm9ybVggPSB4MiAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTIgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MiA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MiA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cblxuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGNvbnRleHQuY2xpcCgpO1xuXG4gICAgLy8gQ29tcHV0ZSBtYXRyaXggdHJhbnNmb3JtXG4gICAgdmFyIGRlbHRhID0gICh1MCAqIHYxKSAgICAgICsgKHYwICogdTIpICAgICAgKyAodTEgKiB2MikgICAgICAtICh2MSAqIHUyKSAgICAgIC0gKHYwICogdTEpICAgICAgLSAodTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQSA9ICh4MCAqIHYxKSAgICAgICsgKHYwICogeDIpICAgICAgKyAoeDEgKiB2MikgICAgICAtICh2MSAqIHgyKSAgICAgIC0gKHYwICogeDEpICAgICAgLSAoeDAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQiA9ICh1MCAqIHgxKSAgICAgICsgKHgwICogdTIpICAgICAgKyAodTEgKiB4MikgICAgICAtICh4MSAqIHUyKSAgICAgIC0gKHgwICogdTEpICAgICAgLSAodTAgKiB4Mik7XG4gICAgdmFyIGRlbHRhQyA9ICh1MCAqIHYxICogeDIpICsgKHYwICogeDEgKiB1MikgKyAoeDAgKiB1MSAqIHYyKSAtICh4MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB4MikgLSAodTAgKiB4MSAqIHYyKTtcbiAgICB2YXIgZGVsdGFEID0gKHkwICogdjEpICAgICAgKyAodjAgKiB5MikgICAgICArICh5MSAqIHYyKSAgICAgIC0gKHYxICogeTIpICAgICAgLSAodjAgKiB5MSkgICAgICAtICh5MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFFID0gKHUwICogeTEpICAgICAgKyAoeTAgKiB1MikgICAgICArICh1MSAqIHkyKSAgICAgIC0gKHkxICogdTIpICAgICAgLSAoeTAgKiB1MSkgICAgICAtICh1MCAqIHkyKTtcbiAgICB2YXIgZGVsdGFGID0gKHUwICogdjEgKiB5MikgKyAodjAgKiB5MSAqIHUyKSArICh5MCAqIHUxICogdjIpIC0gKHkwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHkyKSAtICh1MCAqIHkxICogdjIpO1xuXG4gICAgY29udGV4dC50cmFuc2Zvcm0oZGVsdGFBIC8gZGVsdGEsIGRlbHRhRCAvIGRlbHRhLFxuICAgICAgICBkZWx0YUIgLyBkZWx0YSwgZGVsdGFFIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQyAvIGRlbHRhLCBkZWx0YUYgLyBkZWx0YSk7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlU291cmNlLCAwLCAwKTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBmbGF0IE1lc2hcbiAqXG4gKiBAcGFyYW0gTWVzaCB7UElYSS5tZXNoLk1lc2h9IFRoZSBNZXNoIHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUucmVuZGVyTWVzaEZsYXQgPSBmdW5jdGlvbiAoTWVzaClcbntcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICB2YXIgdmVydGljZXMgPSBNZXNoLnZlcnRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aC8yO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgZm9yICh2YXIgaT0xOyBpIDwgbGVuZ3RoLTI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkqMjtcblxuICAgICAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleF0sICAgeDEgPSB2ZXJ0aWNlc1tpbmRleCsyXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleCs0XTtcbiAgICAgICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgrMV0sIHkxID0gdmVydGljZXNbaW5kZXgrM10sIHkyID0gdmVydGljZXNbaW5kZXgrNV07XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVwZGF0ZUZyYW1lID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBtZXNoIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5NZXNoLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICghdGhpcy5fY3VycmVudEJvdW5kcykge1xuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1pblkgPSBJbmZpbml0eTtcblxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IG47IGkgKz0gMikge1xuICAgICAgICAgICAgdmFyIHJhd1ggPSB2ZXJ0aWNlc1tpXSwgcmF3WSA9IHZlcnRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciB4ID0gKGEgKiByYXdYKSArIChjICogcmF3WSkgKyB0eDtcbiAgICAgICAgICAgIHZhciB5ID0gKGQgKiByYXdZKSArIChiICogcmF3WCkgKyB0eTtcblxuICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcblxuICAgICAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG4gICAgICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5YID09PSAtSW5maW5pdHkgfHwgbWF4WSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIG1lc2guIFdvcmtzIG9ubHkgZm9yIFRSSUFOR0xFX01FU0hcbiAqXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4gKi9cbk1lc2gucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKSB7XG4gICAgaWYgKCF0aGlzLmdldEJvdW5kcygpLmNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgcG9pbnRzID0gdGVtcFBvbHlnb24ucG9pbnRzO1xuICAgIHZhciBpLCBsZW47XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUykge1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICAgICAgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgLy9UT0RPOiBpbmxpbmUgdGhpcy5cbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Mykge1xuICAgICAgICAgICAgdmFyIGluZDAgPSBpbmRpY2VzW2ldKjIsIGluZDEgPSBpbmRpY2VzW2krMV0qMiwgaW5kMiA9IGluZGljZXNbaSsyXSoyO1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaW5kMF07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpbmQwKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaW5kMV07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpbmQxKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaW5kMl07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpbmQyKzFdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Nikge1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaSsyXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2krM107XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpKzRdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaSs1XTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEaWZmZXJlbnQgZHJhd2luZyBidWZmZXIgbW9kZXMgc3VwcG9ydGVkXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSFxuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gKi9cbk1lc2guRFJBV19NT0RFUyA9IHtcbiAgICBUUklBTkdMRV9NRVNIOiAwLFxuICAgIFRSSUFOR0xFUzogMVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG5cbi8qKlxuICogVGhlIFBsYW5lIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIFBsYW5lID0gbmV3IFBJWEkuUGxhbmUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgUGxhbmUuXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNYIC0gVGhlIG51bWJlciBveCB4IHNlZ21lbnRzXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNZIC0gVGhlIG51bWJlciBvZiB5IHNlZ21lbnRzXG4gKlxuICovXG5mdW5jdGlvbiBQbGFuZSh0ZXh0dXJlLCBzZWdtZW50c1gsIHNlZ21lbnRzWSlcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgUGxhbmUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWdtZW50c1ggPSAgc2VnbWVudHNYIHx8IDEwO1xuICAgIHRoaXMuc2VnbWVudHNZID0gc2VnbWVudHNZIHx8IDEwO1xuXG4gICAgdGhpcy5kcmF3TW9kZSA9IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVM7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUGxhbmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKTtcblBsYW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsYW5lO1xubW9kdWxlLmV4cG9ydHMgPSBQbGFuZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblBsYW5lLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciB0b3RhbCA9IHRoaXMuc2VnbWVudHNYICogdGhpcy5zZWdtZW50c1k7XG4gICAgdmFyIHZlcnRzID0gW107XG4gICAgdmFyIGNvbG9ycyA9IFtdO1xuICAgIHZhciB1dnMgPSBbXTtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuXG4gIC8vICB0ZXh0dXJlLndpZHRoID0gODAwIHRleHR1cmUud2lkdGggfHwgODAwO1xuIC8vICAgdGV4dHVyZS5oZWlnaHQgPSA4MDAvL3RleHR1cmUuaGVpZ2h0IHx8IDgwMDtcblxuICAgIHZhciBzZWdtZW50c1hTdWIgPSB0aGlzLnNlZ21lbnRzWCAtIDE7XG4gICAgdmFyIHNlZ21lbnRzWVN1YiA9IHRoaXMuc2VnbWVudHNZIC0gMTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB2YXIgc2l6ZVggPSB0ZXh0dXJlLndpZHRoIC8gc2VnbWVudHNYU3ViO1xuICAgIHZhciBzaXplWSA9IHRleHR1cmUuaGVpZ2h0IC8gc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcblxuICAgICAgICB2YXIgeCA9IChpICUgdGhpcy5zZWdtZW50c1gpO1xuICAgICAgICB2YXIgeSA9ICggKGkgLyB0aGlzLnNlZ21lbnRzWCApIHwgMCApO1xuXG5cbiAgICAgICAgdmVydHMucHVzaCgoeCAqIHNpemVYKSxcbiAgICAgICAgICAgICAgICAgICAoeSAqIHNpemVZKSk7XG5cbiAgICAgICAgLy8gdGhpcyB3b3JrcyBmb3IgcmVjdGFuZ3VsYXIgdGV4dHVyZXMuIFxuICAgICAgICB1dnMucHVzaCh0ZXh0dXJlLl91dnMueDAgKyAodGV4dHVyZS5fdXZzLngxIC0gdGV4dHVyZS5fdXZzLngwKSAqICh4IC8gKHRoaXMuc2VnbWVudHNYLTEpKSwgdGV4dHVyZS5fdXZzLnkwICsgKHRleHR1cmUuX3V2cy55My10ZXh0dXJlLl91dnMueTApICogKHkvICh0aGlzLnNlZ21lbnRzWS0xKSkpO1xuICAgICAgfVxuXG4gICAgLy8gIGNvbnNcblxuICAgIHZhciB0b3RhbFN1YiA9IHNlZ21lbnRzWFN1YiAqIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFN1YjsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHhwb3MgPSBpICUgc2VnbWVudHNYU3ViO1xuICAgICAgICB2YXIgeXBvcyA9IChpIC8gc2VnbWVudHNYU3ViICkgfCAwO1xuXG5cbiAgICAgICAgdmFyICB2YWx1ZSA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTIgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuICAgICAgICB2YXIgIHZhbHVlMyA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWU0ID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMyk7XG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZTIsIHZhbHVlNCwgdmFsdWUzKTtcbiAgICB9XG5cblxuICAgIC8vY29uc29sZS5sb2coaW5kaWNlcylcbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0cyk7XG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHV2cyk7XG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvbG9ycyk7XG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBsYW5lLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUGxhbmUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSByb3BlIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIHJvcGUgPSBuZXcgUElYSS5Sb3BlKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIHJvcGUuXG4gKiBAcGFyYW0ge1BJWEkuUG9pbnRbXX0gcG9pbnRzIC0gQW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuUG9pbnR9IG9iamVjdHMgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAqXG4gKi9cbmZ1bmN0aW9uIFJvcGUodGV4dHVyZSwgcG9pbnRzKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfSBBbiBhcnJheSBvZiBwb2ludHMgdGhhdCBkZXRlcm1pbmUgdGhlIHJvcGVcbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBvZiB2ZXJ0aWNlcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IFRoZSBXZWJHTCBVdnMgb2YgdGhlIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBjb21wb25lbnRzXG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSByb3BlIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICAgdGhpcy5yZWZyZXNoKCk7XG59XG5cblxuLy8gY29uc3RydWN0b3JcblJvcGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNZXNoLnByb3RvdHlwZSk7XG5Sb3BlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvcGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvcGU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5Sb3BlLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICAvLyBpZiB0b28gbGl0dGxlIHBvaW50cywgb3IgdGV4dHVyZSBoYXNuJ3QgZ290IFVWcyBzZXQgeWV0IGp1c3QgbW92ZSBvbi5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEgfHwgIXRoaXMuX3RleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cbiAgICB2YXIgdGV4dHVyZVV2cyA9IHRoaXMuX3RleHR1cmUuX3V2cztcbiAgICB2YXIgb2Zmc2V0ID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MCk7XG4gICAgdmFyIGZhY3RvciA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDIgLSB0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkyIC0gdGV4dHVyZVV2cy55MCk7XG5cbiAgICB1dnNbMF0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzFdID0gMCArIG9mZnNldC55O1xuICAgIHV2c1syXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgIGNvbG9yc1swXSA9IDE7XG4gICAgY29sb3JzWzFdID0gMTtcblxuICAgIGluZGljZXNbMF0gPSAwO1xuICAgIGluZGljZXNbMV0gPSAxO1xuXG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCBhbW91bnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcbiAgICAgICAgLy8gdGltZSB0byBkbyBzb21lIHNtYXJ0IGRyYXdpbmchXG4gICAgICAgIGFtb3VudCA9IGkgLyAodG90YWwtMSk7XG5cbiAgICAgICAgdXZzW2luZGV4XSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCsxXSA9IDAgKyBvZmZzZXQueTtcblxuICAgICAgICB1dnNbaW5kZXgrMl0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBjb2xvcnNbaW5kZXhdID0gMTtcbiAgICAgICAgY29sb3JzW2luZGV4KzFdID0gMTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGluZGV4O1xuICAgICAgICBpbmRpY2VzW2luZGV4ICsgMV0gPSBpbmRleCArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFJvcGUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9pbnQgPSBwb2ludHNbMF07XG4gICAgdmFyIG5leHRQb2ludDtcbiAgICB2YXIgcGVycFggPSAwO1xuICAgIHZhciBwZXJwWSA9IDA7XG5cbiAgICAvLyB0aGlzLmNvdW50IC09IDAuMjtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCByYXRpbywgcGVycExlbmd0aCwgbnVtO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG5cbiAgICAgICAgaWYgKGkgPCBwb2ludHMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50c1tpKzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwWSA9IC0obmV4dFBvaW50LnggLSBsYXN0UG9pbnQueCk7XG4gICAgICAgIHBlcnBYID0gbmV4dFBvaW50LnkgLSBsYXN0UG9pbnQueTtcblxuICAgICAgICByYXRpbyA9ICgxIC0gKGkgLyAodG90YWwtMSkpKSAqIDEwO1xuXG4gICAgICAgIGlmIChyYXRpbyA+IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhdGlvID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBMZW5ndGggPSBNYXRoLnNxcnQocGVycFggKiBwZXJwWCArIHBlcnBZICogcGVycFkpO1xuICAgICAgICBudW0gPSB0aGlzLl90ZXh0dXJlLmhlaWdodCAvIDI7IC8vKDIwICsgTWF0aC5hYnMoTWF0aC5zaW4oKGkgKyB0aGlzLmNvdW50KSAqIDAuMykgKiA1MCkgKSogcmF0aW87XG4gICAgICAgIHBlcnBYIC89IHBlcnBMZW5ndGg7XG4gICAgICAgIHBlcnBZIC89IHBlcnBMZW5ndGg7XG5cbiAgICAgICAgcGVycFggKj0gbnVtO1xuICAgICAgICBwZXJwWSAqPSBudW07XG5cbiAgICAgICAgdmVydGljZXNbaW5kZXhdID0gcG9pbnQueCArIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsxXSA9IHBvaW50LnkgKyBwZXJwWTtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMl0gPSBwb2ludC54IC0gcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzNdID0gcG9pbnQueSAtIHBlcnBZO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IHBvaW50O1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5tZXNoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1lc2g6ICAgICAgICAgICByZXF1aXJlKCcuL01lc2gnKSxcbiAgICBQbGFuZTogICAgICAgICAgIHJlcXVpcmUoJy4vUGxhbmUnKSxcbiAgICBSb3BlOiAgICAgICAgICAgcmVxdWlyZSgnLi9Sb3BlJyksXG4gICAgTWVzaFJlbmRlcmVyOiAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFJlbmRlcmVyJyksXG4gICAgTWVzaFNoYWRlcjogICAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFNoYWRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgTWVzaCA9IHJlcXVpcmUoJy4uL01lc2gnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBNZXNoUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL01lc2hSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDE1MDAwKTtcblxuICAgIC8vVE9ETyB0aGlzIGNvdWxkIGJlIGEgc2luZ2xlIGJ1ZmZlciBzaGFyZWQgYW1vbmdzdCBhbGwgcmVuZGVyZXJzIGFzIHdlIHJldXNlIHRoaXMgc2V0IHVwIGluIG1vc3QgcmVuZGVyZXJzXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCAxNTAwMDsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59XG5cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hSZW5kZXJlcjtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoJywgTWVzaFJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIGlmKCFtZXNoLl92ZXJ0ZXhCdWZmZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9pbml0V2ViR0wobWVzaCk7XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcixcbiAgICAgICAgZ2wgPSByZW5kZXJlci5nbCxcbiAgICAgICAgdGV4dHVyZSA9IG1lc2guX3RleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIHNoYWRlciA9IG1lc2guc2hhZGVyOy8vIHx8IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuXG4gICAgdmFyIGRyYXdNb2RlID0gbWVzaC5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0ggPyBnbC5UUklBTkdMRV9TVFJJUCA6IGdsLlRSSUFOR0xFUztcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKG1lc2guYmxlbmRNb2RlKTtcblxuICAgIC8vVE9ETyBjYWNoZSBjdXN0b20gc3RhdGUuLlxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHNoYWRlci5zaGFkZXJzW2dsLmlkXSB8fCBzaGFkZXIuZ2V0U2hhZGVyKHJlbmRlcmVyKTsvLyA6IHNoYWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXgudmFsdWUgPSBtZXNoLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXgudmFsdWUgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSBtZXNoLndvcmxkQWxwaGE7XG5cbiAgICBzaGFkZXIuc3luY1VuaWZvcm1zKCk7XG5cbiAgICBpZiAoIW1lc2guZGlydHkpXG4gICAge1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgbWVzaC52ZXJ0aWNlcyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG1lc2guaW5kaWNlcyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgbWVzaC5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb250IG5lZWQgdG8gdXBsb2FkIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgfVxuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGRyYXdNb2RlLCBtZXNoLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG5cbn07XG5cbi8qKlxuICogUHJlcGFyZXMgYWxsIHRoZSBidWZmZXJzIHRvIHJlbmRlciB0aGlzIG1lc2hcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuX2luaXRXZWJHTCA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIC8vIGJ1aWxkIHRoZSBzdHJpcCFcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgbWVzaC5fdmVydGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5faW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl91dkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG5cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICBpZihtZXNoLmNvbG9ycyl7XG4gICAgICAgIG1lc2guX2NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl9jb2xvckJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLmNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbn07XG5cblxuLyoqXG4gKiBFbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IG1lc2ggcmVuZGVyZXIuXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBcblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBNZXNoIHJlbmRlcmVyXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgV2ViR0wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgY29yZS5TaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogYWxwaGEgOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVZlcnRleFBvc2l0aW9uOjAsXG4gICAgICAgICAgICBhVGV4dHVyZUNvb3JkOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cbk1lc2hTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNoYWRlci5wcm90b3R5cGUpO1xuTWVzaFNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoU2hhZGVyO1xuXG5jb3JlLlNoYWRlck1hbmFnZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2hTaGFkZXInLCBNZXNoU2hhZGVyKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3NpZ25cblxuaWYgKCFNYXRoLnNpZ24pXG57XG4gICAgTWF0aC5zaWduID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCA9ICt4O1xuICAgICAgICBpZiAoeCA9PT0gMCB8fCBpc05hTih4KSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPiAwID8gMSA6IC0xO1xuICAgIH07XG59XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9vYmplY3QtYXNzaWduXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5cbmlmICghT2JqZWN0LmFzc2lnbilcbntcbiAgICBPYmplY3QuYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xufVxuIiwicmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL3JlcXVlc3RBbmltYXRpb25GcmFtZScpO1xucmVxdWlyZSgnLi9NYXRoLnNpZ24nKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTU3OTY3MVxuLy8gaHR0cDovL3VwZGF0ZXMuaHRtbDVyb2Nrcy5jb20vMjAxMi8wNS9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUtQVBJLW5vdy13aXRoLXN1Yi1taWxsaXNlY29uZC1wcmVjaXNpb25cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RpbWhhbGwvNDA3ODYxNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0ZpbmFuY2lhbC1UaW1lcy9wb2x5ZmlsbC1zZXJ2aWNlL3RyZWUvbWFzdGVyL3BvbHlmaWxscy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcblxuLy8gRXhwZWN0ZWQgdG8gYmUgdXNlZCB3aXRoIEJyb3dzZXJmaXlcbi8vIEJyb3dzZXJpZnkgYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZSB1c2Ugb2YgYGdsb2JhbGAgYW5kIHBhc3NlcyB0aGVcbi8vIGNvcnJlY3QgcmVmZXJlbmNlIG9mIGBnbG9iYWxgLCBgc2VsZmAsIGFuZCBmaW5hbGx5IGB3aW5kb3dgXG5cbi8vIERhdGUubm93XG5pZiAoIShEYXRlLm5vdyAmJiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lKSkge1xuICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcbn1cblxuLy8gcGVyZm9ybWFuY2Uubm93XG5pZiAoIShnbG9iYWwucGVyZm9ybWFuY2UgJiYgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdykpIHtcbiAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIWdsb2JhbC5wZXJmb3JtYW5jZSkge1xuICAgICAgICBnbG9iYWwucGVyZm9ybWFuY2UgPSB7fTtcbiAgICB9XG4gICAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgfTtcbn1cblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xudmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xuXG5mb3IodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8XG4gICAgICAgIGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xufVxuXG5pZiAoIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCksXG4gICAgICAgICAgICBkZWxheSA9IDE2ICsgbGFzdFRpbWUgLSBjdXJyZW50VGltZTtcblxuICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgIH07XG59XG5cbmlmICghZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xufVxuIl19 //# sourceMappingURL=pixi.js.map diff --git a/bin/pixi.js.map b/bin/pixi.js.map index 1d72f43..3256814 100644 --- a/bin/pixi.js.map +++ b/bin/pixi.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi.js","sourceRoot":"./","sourcesContent":[]} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi.js","sourceRoot":"./","sourcesContent":[]} \ No newline at end of file diff --git a/bin/pixi.js b/bin/pixi.js index df52170..915f5c1 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -1,7 +1,7 @@ /** * @license * pixi.js - v3.0.10-dev - * Compiled 2016-01-18T21:33:26.540Z + * Compiled 2016-01-18T22:34:48.843Z * * pixi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -8072,7 +8072,7 @@ core.CanvasRenderer.registerPlugin('accessibility', AccessibilityManager); -},{"../core":53,"./accessibleTarget":36}],36:[function(require,module,exports){ +},{"../core":54,"./accessibleTarget":36}],36:[function(require,module,exports){ /** * Default property values of accessible objects * used by {@link PIXI.accessibility.AccessibilityManager}. @@ -8759,7 +8759,7 @@ this.children[i].updateTransform(); } - this.dirtyTransform = false; + this.transform.dirty = false; }; // performance increase to avoid using call.. (10x faster) @@ -9005,12 +9005,12 @@ this.children = null; }; -},{"../math":56,"../textures/RenderTexture":100,"../utils":107,"./DisplayObject":40}],40:[function(require,module,exports){ +},{"../math":57,"../textures/RenderTexture":101,"../utils":108,"./DisplayObject":40}],40:[function(require,module,exports){ var math = require('../math'), RenderTexture = require('../textures/RenderTexture'), EventEmitter = require('eventemitter3'), CONST = require('../const'), - Transform = require('./Transform'), + Transform = require('./TransformStatic'), _tempMatrix = new math.Matrix(), _tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1, children:[]}; @@ -9122,22 +9122,6 @@ */ this.filterArea = null; - /**xww - * cached sin rotation - * - * @member {number} - * @private - */ - this._sr = 0; - - /** - * cached cos rotation - * - * @member {number} - * @private - */ - this._cr = 1; - /** * The original, cached bounds of the object * @@ -9162,7 +9146,7 @@ */ this._mask = null; - this.dirtyTransform = true; + // this.dirtyTransform = true; } // constructor @@ -9246,9 +9230,9 @@ set: function (value) { this._rotation = value; - this.dirtyTransform = true; - this._sr = Math.sin(value); - this._cr = Math.cos(value); + this.transform.dirty = true; + this.transform._sr = Math.sin(value); + this.transform._cr = Math.cos(value); } }, @@ -9352,6 +9336,7 @@ */ DisplayObject.prototype.updateTransform = function () { + //if(this.transform.dirty || parent.transform.dirty) this.transform.updateTransform(this.parent.transform); // multiply the alphas.. this.worldAlpha = this.alpha * this.parent.worldAlpha; @@ -9554,9 +9539,79 @@ this.filterArea = null; }; -},{"../const":38,"../math":56,"../textures/RenderTexture":100,"./Transform":41,"eventemitter3":25}],41:[function(require,module,exports){ -var math = require('../math'); +},{"../const":38,"../math":57,"../textures/RenderTexture":101,"./TransformStatic":42,"eventemitter3":25}],41:[function(require,module,exports){ +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents + * the horizontal axis and y represents the vertical axis. + * + * @class + * @memberof PIXI + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +function ObservablePoint(transform, x, y) +{ + this._x = x || 0; + this._y = y || 0; + this.transform = transform; +} + +ObservablePoint.prototype.constructor = ObservablePoint; +module.exports = ObservablePoint; + + + +Object.defineProperties(ObservablePoint.prototype, { + /** + * The position of the displayObject on the x axis relative to the local coordinates of the parent. + * + * @member {number} + * @memberof PIXI.DisplayObject# + */ + x: { + get: function () + { + return this._x; + }, + set: function (value) + { + this._x = value; + this.transform.dirty = true; + } + }, + + y: { + get: function () + { + return this._y; + }, + set: function (value) + { + this._y = value; + this.transform.dirty = true; + } + } +}); + +/** + * Sets the point to a new x and y position. + * If y is omitted, both x and y will be set to x. + * + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +ObservablePoint.prototype.set = function (x, y) +{ + this._x = x || 0; + this._y = y || ( (y !== 0) ? this._x : 0 ); + + this.transform.dirty = true; +}; + +},{}],42:[function(require,module,exports){ +var math = require('../math'); +var ObservablePoint = require('./ObservablePoint'); /** * The Point object represents a location in a two-dimensional coordinate system, where x represents @@ -9572,17 +9627,19 @@ this.worldTransform = new math.Matrix(); this.localTransform = new math.Matrix(); - this.position = new math.Point(0.0); - this.scale = new math.Point(1,1); - this.pivot = new math.Point(0.0); - this.skew = new math.Point(0.0); + this.position = new ObservablePoint(this, 0); + this.scale = new ObservablePoint(this,1, 1); + this.pivot = new ObservablePoint(this, 0, 0); + this.skew = new ObservablePoint(this, 0,0); this.rotation = 0; this._sr = Math.sin(0); this._cr = Math.cos(0); - this.dirty = true; + + + this.updated = true; } Transform.prototype.constructor = Transform; @@ -9593,19 +9650,20 @@ var wt = this.worldTransform; var lt = this.localTransform; - if(this.dirty) { // get the matrix values of the displayobject based on its transform properties.. - lt.a = this._cr * this.scale.x; - lt.b = this._sr * this.scale.x; - lt.c = -this._sr * this.scale.y; - lt.d = this._cr * this.scale.y; - lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c); - lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d); + lt.a = this._cr * this.scale._x; + lt.b = this._sr * this.scale._x; + lt.c = -this._sr * this.scale._y; + lt.d = this._cr * this.scale._y; + lt.tx = this.position._x - (this.pivot._x * lt.a + this.pivot._y * lt.c); + lt.ty = this.position._y - (this.pivot._x * lt.b + this.pivot._y * lt.d); } - if(this.dirty || parent.dirty) + this.updated = this.dirty || parentTransform.dirty; + + if(this.updated) { // concat the parent matrix with the objects transform. wt.a = lt.a * pt.a + lt.b * pt.c; @@ -9613,21 +9671,16 @@ wt.c = lt.c * pt.a + lt.d * pt.c; wt.d = lt.c * pt.b + lt.d * pt.d; wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; - wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; - - // this.dirty = false; - // return true; + wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; } - -// this.dirty = false; - // return false; + } module.exports = Transform; -},{"../math":56}],42:[function(require,module,exports){ +},{"../math":57,"./ObservablePoint":41}],43:[function(require,module,exports){ var Container = require('../display/Container'), Texture = require('../textures/Texture'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), @@ -10787,7 +10840,7 @@ this._localBounds = null; }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/canvas/utils/CanvasGraphics":69,"../textures/Texture":101,"./GraphicsData":43}],43:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/canvas/utils/CanvasGraphics":70,"../textures/Texture":102,"./GraphicsData":44}],44:[function(require,module,exports){ /** * A GraphicsData object. * @@ -10880,7 +10933,7 @@ this.shape = null; }; -},{}],44:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ var utils = require('../../utils'), math = require('../../math'), CONST = require('../../const'), @@ -11200,7 +11253,7 @@ }; -},{"../../const":38,"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils":107,"./WebGLGraphicsData":45,"./shaders/PrimitiveShader":46,"./utils/buildCircle":47,"./utils/buildComplexPoly":48,"./utils/buildLine":49,"./utils/buildPoly":50,"./utils/buildRectangle":51,"./utils/buildRoundedRectangle":52,"earcut":24}],45:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils":108,"./WebGLGraphicsData":46,"./shaders/PrimitiveShader":47,"./utils/buildCircle":48,"./utils/buildComplexPoly":49,"./utils/buildLine":50,"./utils/buildPoly":51,"./utils/buildRectangle":52,"./utils/buildRoundedRectangle":53,"earcut":24}],46:[function(require,module,exports){ /** * An object containing WebGL specific properties to be used by the WebGL renderer * @@ -11318,7 +11371,7 @@ this.glIndices = null; }; -},{}],46:[function(require,module,exports){ +},{}],47:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -11370,7 +11423,7 @@ module.exports = PrimitiveShader; -},{"pixi-gl-core":1}],47:[function(require,module,exports){ +},{"pixi-gl-core":1}],48:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11457,7 +11510,7 @@ module.exports = buildCircle; -},{"../../../utils":107,"./buildLine":49}],48:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],49:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11528,7 +11581,7 @@ module.exports = buildComplexPoly; -},{"../../../utils":107,"./buildLine":49}],49:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],50:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'); @@ -11748,7 +11801,7 @@ }; module.exports = buildLine; -},{"../../../math":56,"../../../utils":107}],50:[function(require,module,exports){ +},{"../../../math":57,"../../../utils":108}],51:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -11811,7 +11864,7 @@ module.exports = buildPoly; -},{"../../../utils":107}],51:[function(require,module,exports){ +},{"../../../utils":108}],52:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11882,7 +11935,7 @@ }; module.exports = buildRectangle; -},{"../../../utils":107,"./buildLine":49}],52:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],53:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -12010,7 +12063,7 @@ module.exports = buildRoundedRectangle; -},{"../../../utils":107,"./buildLine":49}],53:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],54:[function(require,module,exports){ /** * @file Main export of the PIXI core library * @author Mat Groves @@ -12106,7 +12159,7 @@ } }); -},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":42,"./graphics/GraphicsData":43,"./graphics/webgl/GraphicsRenderer":44,"./math":56,"./particles/ParticleContainer":62,"./particles/webgl/ParticleRenderer":64,"./renderers/canvas/CanvasRenderer":67,"./renderers/canvas/utils/CanvasBuffer":68,"./renderers/canvas/utils/CanvasGraphics":69,"./renderers/webgl/WebGLRenderer":73,"./renderers/webgl/filters/AbstractFilter":74,"./renderers/webgl/filters/FXAAFilter":75,"./renderers/webgl/filters/SpriteMaskFilter":76,"./renderers/webgl/managers/ShaderManager":80,"./renderers/webgl/managers/WebGLManager":82,"./renderers/webgl/shaders/Shader":85,"./renderers/webgl/utils/ObjectRenderer":88,"./renderers/webgl/utils/RenderTarget":90,"./sprites/Sprite":94,"./sprites/webgl/SpriteRenderer":95,"./text/Text":97,"./textures/BaseRenderTexture":98,"./textures/BaseTexture":99,"./textures/RenderTexture":100,"./textures/Texture":101,"./textures/TextureUvs":102,"./textures/VideoBaseTexture":103,"./ticker":105,"./utils":107,"pixi-gl-core":1}],54:[function(require,module,exports){ +},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":43,"./graphics/GraphicsData":44,"./graphics/webgl/GraphicsRenderer":45,"./math":57,"./particles/ParticleContainer":63,"./particles/webgl/ParticleRenderer":65,"./renderers/canvas/CanvasRenderer":68,"./renderers/canvas/utils/CanvasBuffer":69,"./renderers/canvas/utils/CanvasGraphics":70,"./renderers/webgl/WebGLRenderer":74,"./renderers/webgl/filters/AbstractFilter":75,"./renderers/webgl/filters/FXAAFilter":76,"./renderers/webgl/filters/SpriteMaskFilter":77,"./renderers/webgl/managers/ShaderManager":81,"./renderers/webgl/managers/WebGLManager":83,"./renderers/webgl/shaders/Shader":86,"./renderers/webgl/utils/ObjectRenderer":89,"./renderers/webgl/utils/RenderTarget":91,"./sprites/Sprite":95,"./sprites/webgl/SpriteRenderer":96,"./text/Text":98,"./textures/BaseRenderTexture":99,"./textures/BaseTexture":100,"./textures/RenderTexture":101,"./textures/Texture":102,"./textures/TextureUvs":103,"./textures/VideoBaseTexture":104,"./ticker":106,"./utils":108,"pixi-gl-core":1}],55:[function(require,module,exports){ // @todo - ignore the too many parameters warning for now // should either fix it or change the jshint config // jshint -W072 @@ -12546,7 +12599,7 @@ */ Matrix.TEMP_MATRIX = new Matrix(); -},{"./Point":55}],55:[function(require,module,exports){ +},{"./Point":56}],56:[function(require,module,exports){ /** * The Point object represents a location in a two-dimensional coordinate system, where x represents * the horizontal axis and y represents the vertical axis. @@ -12616,7 +12669,7 @@ this.y = y || ( (y !== 0) ? this.x : 0 ) ; }; -},{}],56:[function(require,module,exports){ +},{}],57:[function(require,module,exports){ /** * Math classes and utilities mixed into PIXI namespace. * @@ -12638,7 +12691,7 @@ RoundedRectangle: require('./shapes/RoundedRectangle') }; -},{"./Matrix":54,"./Point":55,"./shapes/Circle":57,"./shapes/Ellipse":58,"./shapes/Polygon":59,"./shapes/Rectangle":60,"./shapes/RoundedRectangle":61}],57:[function(require,module,exports){ +},{"./Matrix":55,"./Point":56,"./shapes/Circle":58,"./shapes/Ellipse":59,"./shapes/Polygon":60,"./shapes/Rectangle":61,"./shapes/RoundedRectangle":62}],58:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12726,7 +12779,7 @@ return new Rectangle(this.x - this.radius, this.y - this.radius, this.radius * 2, this.radius * 2); }; -},{"../../const":38,"./Rectangle":60}],58:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],59:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12821,7 +12874,7 @@ return new Rectangle(this.x - this.width, this.y - this.height, this.width, this.height); }; -},{"../../const":38,"./Rectangle":60}],59:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],60:[function(require,module,exports){ var Point = require('../Point'), CONST = require('../../const'); @@ -12924,7 +12977,7 @@ return inside; }; -},{"../../const":38,"../Point":55}],60:[function(require,module,exports){ +},{"../../const":38,"../Point":56}],61:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13018,7 +13071,7 @@ return false; }; -},{"../../const":38}],61:[function(require,module,exports){ +},{"../../const":38}],62:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13110,7 +13163,7 @@ return false; }; -},{"../../const":38}],62:[function(require,module,exports){ +},{"../../const":38}],63:[function(require,module,exports){ var Container = require('../display/Container'), CONST = require('../const'); @@ -13429,7 +13482,7 @@ this._buffers = null; }; -},{"../const":38,"../display/Container":39}],63:[function(require,module,exports){ +},{"../const":38,"../display/Container":39}],64:[function(require,module,exports){ /** * @author Mat Groves @@ -13649,7 +13702,7 @@ this.gl.deleteBuffer(this.staticBuffer); }; -},{}],64:[function(require,module,exports){ +},{}],65:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), ParticleShader = require('./ParticleShader'), @@ -14125,7 +14178,7 @@ this.tempMatrix = null; }; -},{"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"./ParticleBuffer":63,"./ParticleShader":65}],65:[function(require,module,exports){ +},{"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"./ParticleBuffer":64,"./ParticleShader":66}],66:[function(require,module,exports){ var TextureShader = require('../../renderers/webgl/shaders/TextureShader'); /** @@ -14203,7 +14256,7 @@ module.exports = ParticleShader; -},{"../../renderers/webgl/shaders/TextureShader":86}],66:[function(require,module,exports){ +},{"../../renderers/webgl/shaders/TextureShader":87}],67:[function(require,module,exports){ var utils = require('../utils'), math = require('../math'), CONST = require('../const'), @@ -14464,7 +14517,7 @@ this._backgroundColorString = null; }; -},{"../const":38,"../math":56,"../utils":107,"eventemitter3":25}],67:[function(require,module,exports){ +},{"../const":38,"../math":57,"../utils":108,"eventemitter3":25}],68:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), CanvasMaskManager = require('./utils/CanvasMaskManager'), utils = require('../../utils'), @@ -14732,7 +14785,7 @@ } }; -},{"../../const":38,"../../math":56,"../../utils":107,"../SystemRenderer":66,"./utils/CanvasMaskManager":70}],68:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../utils":108,"../SystemRenderer":67,"./utils/CanvasMaskManager":71}],69:[function(require,module,exports){ /** * Creates a Canvas element of the given size. * @@ -14832,7 +14885,7 @@ this.canvas = null; }; -},{}],69:[function(require,module,exports){ +},{}],70:[function(require,module,exports){ var CONST = require('../../../const'); /** @@ -15186,7 +15239,7 @@ }; -},{"../../../const":38}],70:[function(require,module,exports){ +},{"../../../const":38}],71:[function(require,module,exports){ var CanvasGraphics = require('./CanvasGraphics'); /** @@ -15248,7 +15301,7 @@ CanvasMaskManager.prototype.destroy = function () {}; -},{"./CanvasGraphics":69}],71:[function(require,module,exports){ +},{"./CanvasGraphics":70}],72:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -15500,7 +15553,7 @@ */ CanvasTinter.tintMethod = CanvasTinter.canUseMultiply ? CanvasTinter.tintWithMultiply : CanvasTinter.tintWithPerPixel; -},{"../../../utils":107}],72:[function(require,module,exports){ +},{"../../../utils":108}],73:[function(require,module,exports){ var GLTexture = require('pixi-gl-core').GLTexture, utils = require('../../utils'); @@ -15640,7 +15693,7 @@ module.exports = TextureManager; -},{"../../utils":107,"pixi-gl-core":1}],73:[function(require,module,exports){ +},{"../../utils":108,"pixi-gl-core":1}],74:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), ShaderManager = require('./managers/ShaderManager'), MaskManager = require('./managers/MaskManager'), @@ -16037,7 +16090,7 @@ }; -},{"../../const":38,"../../utils":107,"../SystemRenderer":66,"./TextureManager":72,"./filters/FXAAFilter":75,"./managers/BlendModeManager":77,"./managers/FilterManager":78,"./managers/MaskManager":79,"./managers/ShaderManager":80,"./managers/StencilManager":81,"./utils/ObjectRenderer":88,"./utils/RenderTarget":90,"./utils/mapWebGLBlendModesToPixi":92,"./utils/mapWebGLDrawModesToPixi":93,"pixi-gl-core":1}],74:[function(require,module,exports){ +},{"../../const":38,"../../utils":108,"../SystemRenderer":67,"./TextureManager":73,"./filters/FXAAFilter":76,"./managers/BlendModeManager":78,"./managers/FilterManager":79,"./managers/MaskManager":80,"./managers/ShaderManager":81,"./managers/StencilManager":82,"./utils/ObjectRenderer":89,"./utils/RenderTarget":91,"./utils/mapWebGLBlendModesToPixi":93,"./utils/mapWebGLDrawModesToPixi":94,"pixi-gl-core":1}],75:[function(require,module,exports){ var DefaultShader = require('../shaders/TextureShader'); /** @@ -16149,7 +16202,7 @@ } }; -},{"../shaders/TextureShader":86}],75:[function(require,module,exports){ +},{"../shaders/TextureShader":87}],76:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'); // @see https://github.com/substack/brfs/issues/25 @@ -16204,7 +16257,7 @@ filterManager.applyFilter(shader, input, output); }; -},{"./AbstractFilter":74}],76:[function(require,module,exports){ +},{"./AbstractFilter":75}],77:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'), math = require('../../../math'); @@ -16301,7 +16354,7 @@ } }); -},{"../../../math":56,"./AbstractFilter":74}],77:[function(require,module,exports){ +},{"../../../math":57,"./AbstractFilter":75}],78:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'); /** @@ -16345,7 +16398,7 @@ return true; }; -},{"./WebGLManager":82}],78:[function(require,module,exports){ +},{"./WebGLManager":83}],79:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), RenderTarget = require('../utils/RenderTarget'), CONST = require('../../../const'), @@ -16797,7 +16850,7 @@ this.texturePool = null; }; -},{"../../../const":38,"../../../math":56,"../utils/Quad":89,"../utils/RenderTarget":90,"./WebGLManager":82}],79:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../utils/Quad":90,"../utils/RenderTarget":91,"./WebGLManager":83}],80:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), AlphaMaskFilter = require('../filters/SpriteMaskFilter'); @@ -16912,7 +16965,7 @@ }; -},{"../filters/SpriteMaskFilter":76,"./WebGLManager":82}],80:[function(require,module,exports){ +},{"../filters/SpriteMaskFilter":77,"./WebGLManager":83}],81:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), TextureShader = require('../shaders/TextureShader'), ComplexPrimitiveShader = require('../shaders/ComplexPrimitiveShader'), @@ -17082,7 +17135,7 @@ this.tempAttribState = null; }; -},{"../../../utils":107,"../shaders/ComplexPrimitiveShader":83,"../shaders/PrimitiveShader":84,"../shaders/TextureShader":86,"./WebGLManager":82}],81:[function(require,module,exports){ +},{"../../../utils":108,"../shaders/ComplexPrimitiveShader":84,"../shaders/PrimitiveShader":85,"../shaders/TextureShader":87,"./WebGLManager":83}],82:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), utils = require('../../../utils'); @@ -17449,7 +17502,7 @@ }; -},{"../../../utils":107,"./WebGLManager":82}],82:[function(require,module,exports){ +},{"../../../utils":108,"./WebGLManager":83}],83:[function(require,module,exports){ /** * @class * @memberof PIXI @@ -17490,7 +17543,7 @@ this.renderer = null; }; -},{}],83:[function(require,module,exports){ +},{}],84:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17552,7 +17605,7 @@ ComplexPrimitiveShader.prototype.constructor = ComplexPrimitiveShader; module.exports = ComplexPrimitiveShader; -},{"./Shader":85}],84:[function(require,module,exports){ +},{"./Shader":86}],85:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17615,7 +17668,7 @@ PrimitiveShader.prototype.constructor = PrimitiveShader; module.exports = PrimitiveShader; -},{"./Shader":85}],85:[function(require,module,exports){ +},{"./Shader":86}],86:[function(require,module,exports){ /*global console */ var utils = require('../../../utils'); @@ -18143,7 +18196,7 @@ return shader; }; -},{"../../../utils":107}],86:[function(require,module,exports){ +},{"../../../utils":108}],87:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -18254,7 +18307,7 @@ '}' ].join('\n'); -},{"./Shader":85}],87:[function(require,module,exports){ +},{"./Shader":86}],88:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -18335,7 +18388,7 @@ '}' ].join('\n'); -},{"pixi-gl-core":1}],88:[function(require,module,exports){ +},{"pixi-gl-core":1}],89:[function(require,module,exports){ var WebGLManager = require('../managers/WebGLManager'); /** @@ -18393,7 +18446,7 @@ // render the object }; -},{"../managers/WebGLManager":82}],89:[function(require,module,exports){ +},{"../managers/WebGLManager":83}],90:[function(require,module,exports){ /** * Helper class to create a quad * @@ -18548,7 +18601,7 @@ -},{}],90:[function(require,module,exports){ +},{}],91:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'), CONST = require('../../../const'), @@ -18853,7 +18906,7 @@ this.texture = null; }; -},{"../../../const":38,"../../../math":56,"../../../utils":107,"./StencilMaskStack":91,"pixi-gl-core":1}],91:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../../../utils":108,"./StencilMaskStack":92,"pixi-gl-core":1}],92:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -18886,7 +18939,7 @@ StencilMaskStack.prototype.constructor = StencilMaskStack; module.exports = StencilMaskStack; -},{}],92:[function(require,module,exports){ +},{}],93:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18923,7 +18976,7 @@ module.exports = mapWebGLBlendModesToPixi; -},{"../../../const":38}],93:[function(require,module,exports){ +},{"../../../const":38}],94:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18947,7 +19000,7 @@ module.exports = mapWebGLDrawModesToPixi; -},{"../../../const":38}],94:[function(require,module,exports){ +},{"../../../const":38}],95:[function(require,module,exports){ var math = require('../math'), Texture = require('../textures/Texture'), Container = require('../display/Container'), @@ -19043,7 +19096,6 @@ // call texture setter this.texture = texture || Texture.EMPTY; this.textureDirty = true - this.vertexDirty = true; this.vertexData = new Float32Array(8); } @@ -19153,7 +19205,6 @@ Sprite.prototype.caclulateVertices = function () { - var texture = this._texture, wt = this.transform.worldTransform, a = wt.a, b = wt.b, c = wt.c, d = wt.d, tx = wt.tx, ty = wt.ty, @@ -19208,22 +19259,11 @@ */ Sprite.prototype._renderWebGL = function (renderer) { - if(this.textureDirty) + if(this.transform.updated || this.textureDirty) { this.textureDirty = false; - - this._onTextureUpdate(); - - this.vertexDirty = true; - } - - if(this.vertexDirty) - { - this.vertexDirty = false; - // set the vertex data this.caclulateVertices(); - } renderer.setObjectRenderer(renderer.plugins.sprite); @@ -19566,7 +19606,7 @@ return new Sprite(Texture.fromImage(imageId, crossorigin, scaleMode)); }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasTinter":71,"../textures/Texture":101,"../utils":107}],95:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasTinter":72,"../textures/Texture":102,"../utils":108}],96:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), TextureShader = require('../../renderers/webgl/shaders/_TextureShader'), @@ -19927,7 +19967,7 @@ this.shader = null; }; -},{"../../const":38,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/shaders/_TextureShader":87,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils/createIndicesForQuads":106,"./generateMultiTextureShader":96,"pixi-gl-core":1}],96:[function(require,module,exports){ +},{"../../const":38,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/shaders/_TextureShader":88,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils/createIndicesForQuads":107,"./generateMultiTextureShader":97,"pixi-gl-core":1}],97:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; @@ -19990,7 +20030,7 @@ module.exports = generateMultiTextureShader; -},{"pixi-gl-core":1}],97:[function(require,module,exports){ +},{"pixi-gl-core":1}],98:[function(require,module,exports){ var Sprite = require('../sprites/Sprite'), Texture = require('../textures/Texture'), math = require('../math'), @@ -20611,7 +20651,7 @@ this._texture.destroy(destroyBaseTexture === undefined ? true : destroyBaseTexture); }; -},{"../const":38,"../math":56,"../sprites/Sprite":94,"../textures/Texture":101,"../utils":107}],98:[function(require,module,exports){ +},{"../const":38,"../math":57,"../sprites/Sprite":95,"../textures/Texture":102,"../utils":108}],99:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), Texture = require('./Texture'), RenderTarget = require('../renderers/webgl/utils/RenderTarget'), @@ -21095,7 +21135,7 @@ return this.getPixels(tempRect); }; -},{"../const":38,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/webgl/managers/FilterManager":78,"../renderers/webgl/utils/RenderTarget":90,"./BaseTexture":99,"./Texture":101}],99:[function(require,module,exports){ +},{"../const":38,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/webgl/managers/FilterManager":79,"../renderers/webgl/utils/RenderTarget":91,"./BaseTexture":100,"./Texture":102}],100:[function(require,module,exports){ var utils = require('../utils'), CONST = require('../const'), EventEmitter = require('eventemitter3'); @@ -21532,7 +21572,7 @@ return baseTexture; }; -},{"../const":38,"../utils":107,"eventemitter3":25}],100:[function(require,module,exports){ +},{"../const":38,"../utils":108,"eventemitter3":25}],101:[function(require,module,exports){ var BaseRenderTexture = require('./BaseRenderTexture'), Texture = require('./Texture'), math = require('../math'), @@ -21727,7 +21767,7 @@ } -},{"../const":38,"../math":56,"./BaseRenderTexture":98,"./Texture":101}],101:[function(require,module,exports){ +},{"../const":38,"../math":57,"./BaseRenderTexture":99,"./Texture":102}],102:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), VideoBaseTexture = require('./VideoBaseTexture'), TextureUvs = require('./TextureUvs'), @@ -22153,7 +22193,7 @@ */ Texture.EMPTY = new Texture(new BaseTexture()); -},{"../math":56,"../utils":107,"./BaseTexture":99,"./TextureUvs":102,"./VideoBaseTexture":103,"eventemitter3":25}],102:[function(require,module,exports){ +},{"../math":57,"../utils":108,"./BaseTexture":100,"./TextureUvs":103,"./VideoBaseTexture":104,"eventemitter3":25}],103:[function(require,module,exports){ /** * A standard object to store the Uvs of a texture @@ -22234,7 +22274,7 @@ this.uvs_uint32[3] = (((this.y3 * 65535) & 0xFFFF) << 16) | ((this.x3 * 65535) & 0xFFFF); }; -},{}],103:[function(require,module,exports){ +},{}],104:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), utils = require('../utils'); @@ -22471,7 +22511,7 @@ return source; } -},{"../utils":107,"./BaseTexture":99}],104:[function(require,module,exports){ +},{"../utils":108,"./BaseTexture":100}],105:[function(require,module,exports){ var CONST = require('../const'), EventEmitter = require('eventemitter3'), // Internal event used by composed emitter @@ -22826,7 +22866,7 @@ module.exports = Ticker; -},{"../const":38,"eventemitter3":25}],105:[function(require,module,exports){ +},{"../const":38,"eventemitter3":25}],106:[function(require,module,exports){ var Ticker = require('./Ticker'); /** @@ -22882,7 +22922,7 @@ Ticker: Ticker }; -},{"./Ticker":104}],106:[function(require,module,exports){ +},{"./Ticker":105}],107:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -22915,7 +22955,7 @@ }; module.exports = createIndicesForQuads; -},{}],107:[function(require,module,exports){ +},{}],108:[function(require,module,exports){ var CONST = require('../const'); /** @@ -23192,7 +23232,7 @@ BaseTextureCache: {} }; -},{"../const":38,"./pluginTarget":108,"async":16,"eventemitter3":25}],108:[function(require,module,exports){ +},{"../const":38,"./pluginTarget":109,"async":16,"eventemitter3":25}],109:[function(require,module,exports){ /** * Mixins functionality to make an object have "plugins". * @@ -23262,7 +23302,7 @@ } }; -},{}],109:[function(require,module,exports){ +},{}],110:[function(require,module,exports){ /*global console */ var core = require('./core'), mesh = require('./mesh'), @@ -23613,7 +23653,7 @@ return core.utils.uid(); }; -},{"./core":53,"./extras":116,"./filters":133,"./mesh":158}],110:[function(require,module,exports){ +},{"./core":54,"./extras":117,"./filters":134,"./mesh":159}],111:[function(require,module,exports){ var core = require('../core'); /** @@ -24001,7 +24041,7 @@ BitmapText.fonts = {}; -},{"../core":53}],111:[function(require,module,exports){ +},{"../core":54}],112:[function(require,module,exports){ var core = require('../core'); /** @@ -24321,7 +24361,7 @@ return new MovieClip(textures); }; -},{"../core":53}],112:[function(require,module,exports){ +},{"../core":54}],113:[function(require,module,exports){ var core = require('../core'), // a sprite use dfor rendering textures.. tempPoint = new core.Point(), @@ -24773,7 +24813,7 @@ return new TilingSprite(core.Texture.fromImage(imageId, crossorigin, scaleMode),width,height); }; -},{"../core":53,"../core/renderers/canvas/utils/CanvasTinter":71}],113:[function(require,module,exports){ +},{"../core":54,"../core/renderers/canvas/utils/CanvasTinter":72}],114:[function(require,module,exports){ var core = require('../core'), DisplayObject = core.DisplayObject, _tempMatrix = new core.Matrix(); @@ -25045,7 +25085,7 @@ this._originalDestroy(); }; -},{"../core":53}],114:[function(require,module,exports){ +},{"../core":54}],115:[function(require,module,exports){ var core = require('../core'); /** @@ -25075,7 +25115,7 @@ return null; }; -},{"../core":53}],115:[function(require,module,exports){ +},{"../core":54}],116:[function(require,module,exports){ var core = require('../core'); /** @@ -25105,7 +25145,7 @@ return point; }; -},{"../core":53}],116:[function(require,module,exports){ +},{"../core":54}],117:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -25126,7 +25166,7 @@ BitmapText: require('./BitmapText') }; -},{"./BitmapText":110,"./MovieClip":111,"./TilingSprite":112,"./cacheAsBitmap":113,"./getChildByName":114,"./getGlobalPosition":115}],117:[function(require,module,exports){ +},{"./BitmapText":111,"./MovieClip":112,"./TilingSprite":113,"./cacheAsBitmap":114,"./getChildByName":115,"./getGlobalPosition":116}],118:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25183,7 +25223,7 @@ } }); -},{"../../core":53}],118:[function(require,module,exports){ +},{"../../core":54}],119:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYFilter = require('../blur/BlurYFilter'); @@ -25284,7 +25324,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"../blur/BlurYFilter":122}],119:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"../blur/BlurYFilter":123}],120:[function(require,module,exports){ var core = require('../../core'); @@ -25426,7 +25466,7 @@ } }); -},{"../../core":53}],120:[function(require,module,exports){ +},{"../../core":54}],121:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('./BlurXFilter'), BlurYFilter = require('./BlurYFilter'); @@ -25536,7 +25576,7 @@ } }); -},{"../../core":53,"./BlurXFilter":121,"./BlurYFilter":122}],121:[function(require,module,exports){ +},{"../../core":54,"./BlurXFilter":122,"./BlurYFilter":123}],122:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25629,7 +25669,7 @@ } }); -},{"../../core":53}],122:[function(require,module,exports){ +},{"../../core":54}],123:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25715,7 +25755,7 @@ } }); -},{"../../core":53}],123:[function(require,module,exports){ +},{"../../core":54}],124:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25745,7 +25785,7 @@ SmartBlurFilter.prototype.constructor = SmartBlurFilter; module.exports = SmartBlurFilter; -},{"../../core":53}],124:[function(require,module,exports){ +},{"../../core":54}],125:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26281,7 +26321,7 @@ } }); -},{"../../core":53}],125:[function(require,module,exports){ +},{"../../core":54}],126:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26330,7 +26370,7 @@ } }); -},{"../../core":53}],126:[function(require,module,exports){ +},{"../../core":54}],127:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26421,7 +26461,7 @@ } }); -},{"../../core":53}],127:[function(require,module,exports){ +},{"../../core":54}],128:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26447,7 +26487,7 @@ CrossHatchFilter.prototype.constructor = CrossHatchFilter; module.exports = CrossHatchFilter; -},{"../../core":53}],128:[function(require,module,exports){ +},{"../../core":54}],129:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26531,7 +26571,7 @@ } }); -},{"../../core":53}],129:[function(require,module,exports){ +},{"../../core":54}],130:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26603,7 +26643,7 @@ } }); -},{"../../core":53}],130:[function(require,module,exports){ +},{"../../core":54}],131:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26694,7 +26734,7 @@ } }); -},{"../../core":53}],131:[function(require,module,exports){ +},{"../../core":54}],132:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYTintFilter = require('./BlurYTintFilter'); @@ -26887,7 +26927,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"./BlurYTintFilter":130}],132:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"./BlurYTintFilter":131}],133:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26936,7 +26976,7 @@ } }); -},{"../../core":53}],133:[function(require,module,exports){ +},{"../../core":54}],134:[function(require,module,exports){ /** * @file Main export of the PIXI filters library * @author Mat Groves @@ -26975,7 +27015,7 @@ TwistFilter: require('./twist/TwistFilter') }; -},{"./ascii/AsciiFilter":117,"./bloom/BloomFilter":118,"./blur/BlurDirFilter":119,"./blur/BlurFilter":120,"./blur/BlurXFilter":121,"./blur/BlurYFilter":122,"./blur/SmartBlurFilter":123,"./color/ColorMatrixFilter":124,"./color/ColorStepFilter":125,"./convolution/ConvolutionFilter":126,"./crosshatch/CrossHatchFilter":127,"./displacement/DisplacementFilter":128,"./dot/DotScreenFilter":129,"./dropshadow/DropShadowFilter":131,"./gray/GrayFilter":132,"./invert/InvertFilter":134,"./noise/NoiseFilter":135,"./pixelate/PixelateFilter":136,"./rgb/RGBSplitFilter":137,"./sepia/SepiaFilter":138,"./shockwave/ShockwaveFilter":139,"./tiltshift/TiltShiftFilter":141,"./tiltshift/TiltShiftXFilter":142,"./tiltshift/TiltShiftYFilter":143,"./twist/TwistFilter":144}],134:[function(require,module,exports){ +},{"./ascii/AsciiFilter":118,"./bloom/BloomFilter":119,"./blur/BlurDirFilter":120,"./blur/BlurFilter":121,"./blur/BlurXFilter":122,"./blur/BlurYFilter":123,"./blur/SmartBlurFilter":124,"./color/ColorMatrixFilter":125,"./color/ColorStepFilter":126,"./convolution/ConvolutionFilter":127,"./crosshatch/CrossHatchFilter":128,"./displacement/DisplacementFilter":129,"./dot/DotScreenFilter":130,"./dropshadow/DropShadowFilter":132,"./gray/GrayFilter":133,"./invert/InvertFilter":135,"./noise/NoiseFilter":136,"./pixelate/PixelateFilter":137,"./rgb/RGBSplitFilter":138,"./sepia/SepiaFilter":139,"./shockwave/ShockwaveFilter":140,"./tiltshift/TiltShiftFilter":142,"./tiltshift/TiltShiftXFilter":143,"./tiltshift/TiltShiftYFilter":144,"./twist/TwistFilter":145}],135:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27025,7 +27065,7 @@ } }); -},{"../../core":53}],135:[function(require,module,exports){ +},{"../../core":54}],136:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27080,7 +27120,7 @@ } }); -},{"../../core":53}],136:[function(require,module,exports){ +},{"../../core":54}],137:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27131,7 +27171,7 @@ } }); -},{"../../core":53}],137:[function(require,module,exports){ +},{"../../core":54}],138:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27217,7 +27257,7 @@ } }); -},{"../../core":53}],138:[function(require,module,exports){ +},{"../../core":54}],139:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27267,7 +27307,7 @@ } }); -},{"../../core":53}],139:[function(require,module,exports){ +},{"../../core":54}],140:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27355,7 +27395,7 @@ } }); -},{"../../core":53}],140:[function(require,module,exports){ +},{"../../core":54}],141:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27480,7 +27520,7 @@ } }); -},{"../../core":53}],141:[function(require,module,exports){ +},{"../../core":54}],142:[function(require,module,exports){ var core = require('../../core'), TiltShiftXFilter = require('./TiltShiftXFilter'), TiltShiftYFilter = require('./TiltShiftYFilter'); @@ -27590,7 +27630,7 @@ } }); -},{"../../core":53,"./TiltShiftXFilter":142,"./TiltShiftYFilter":143}],142:[function(require,module,exports){ +},{"../../core":54,"./TiltShiftXFilter":143,"./TiltShiftYFilter":144}],143:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27628,7 +27668,7 @@ this.uniforms.delta.value.y = dy / d; }; -},{"./TiltShiftAxisFilter":140}],143:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],144:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27666,7 +27706,7 @@ this.uniforms.delta.value.y = dx / d; }; -},{"./TiltShiftAxisFilter":140}],144:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],145:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27751,7 +27791,7 @@ } }); -},{"../../core":53}],145:[function(require,module,exports){ +},{"../../core":54}],146:[function(require,module,exports){ (function (global){ // run the polyfills require('./polyfill'); @@ -27784,7 +27824,7 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./accessibility":37,"./core":53,"./deprecation":109,"./extras":116,"./filters":133,"./interaction":148,"./loaders":151,"./mesh":158,"./polyfill":163}],146:[function(require,module,exports){ +},{"./accessibility":37,"./core":54,"./deprecation":110,"./extras":117,"./filters":134,"./interaction":149,"./loaders":152,"./mesh":159,"./polyfill":164}],147:[function(require,module,exports){ var core = require('../core'); /** @@ -27833,7 +27873,7 @@ return displayObject.worldTransform.applyInverse(globalPos || this.global, point); }; -},{"../core":53}],147:[function(require,module,exports){ +},{"../core":54}],148:[function(require,module,exports){ var core = require('../core'), InteractionData = require('./InteractionData'); @@ -28709,7 +28749,7 @@ core.WebGLRenderer.registerPlugin('interaction', InteractionManager); core.CanvasRenderer.registerPlugin('interaction', InteractionManager); -},{"../core":53,"./InteractionData":146,"./interactiveTarget":149}],148:[function(require,module,exports){ +},{"../core":54,"./InteractionData":147,"./interactiveTarget":150}],149:[function(require,module,exports){ /** * @file Main export of the PIXI interactions library * @author Mat Groves @@ -28726,7 +28766,7 @@ interactiveTarget: require('./interactiveTarget') }; -},{"./InteractionData":146,"./InteractionManager":147,"./interactiveTarget":149}],149:[function(require,module,exports){ +},{"./InteractionData":147,"./InteractionManager":148,"./interactiveTarget":150}],150:[function(require,module,exports){ /** * Default property values of interactive objects * used by {@link PIXI.interaction.InteractionManager}. @@ -28775,7 +28815,7 @@ module.exports = interactiveTarget; -},{}],150:[function(require,module,exports){ +},{}],151:[function(require,module,exports){ var Resource = require('resource-loader').Resource, core = require('../core'), extras = require('../extras'), @@ -28896,7 +28936,7 @@ }; }; -},{"../core":53,"../extras":116,"path":17,"resource-loader":31}],151:[function(require,module,exports){ +},{"../core":54,"../extras":117,"path":17,"resource-loader":31}],152:[function(require,module,exports){ /** * @file Main export of the PIXI loaders library * @author Mat Groves @@ -28917,7 +28957,7 @@ Resource: require('resource-loader').Resource }; -},{"./bitmapFontParser":150,"./loader":152,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],152:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./loader":153,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],153:[function(require,module,exports){ var ResourceLoader = require('resource-loader'), textureParser = require('./textureParser'), spritesheetParser = require('./spritesheetParser'), @@ -28979,7 +29019,7 @@ Resource.setExtensionXhrType('fnt', Resource.XHR_RESPONSE_TYPE.DOCUMENT); -},{"./bitmapFontParser":150,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],153:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],154:[function(require,module,exports){ var Resource = require('resource-loader').Resource, path = require('path'), core = require('../core'); @@ -29063,7 +29103,7 @@ }; }; -},{"../core":53,"path":17,"resource-loader":31}],154:[function(require,module,exports){ +},{"../core":54,"path":17,"resource-loader":31}],155:[function(require,module,exports){ var core = require('../core'); module.exports = function () @@ -29085,7 +29125,7 @@ }; }; -},{"../core":53}],155:[function(require,module,exports){ +},{"../core":54}],156:[function(require,module,exports){ var core = require('../core'), tempPoint = new core.Point(), tempPolygon = new core.Polygon(); @@ -29561,7 +29601,7 @@ TRIANGLES: 1 }; -},{"../core":53}],156:[function(require,module,exports){ +},{"../core":54}],157:[function(require,module,exports){ var Mesh = require('./Mesh'); /** @@ -29687,7 +29727,7 @@ } }; -},{"./Mesh":155}],157:[function(require,module,exports){ +},{"./Mesh":156}],158:[function(require,module,exports){ var Mesh = require('./Mesh'); var core = require('../core'); @@ -29900,7 +29940,7 @@ this.containerUpdateTransform(); }; -},{"../core":53,"./Mesh":155}],158:[function(require,module,exports){ +},{"../core":54,"./Mesh":156}],159:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -29919,7 +29959,7 @@ MeshShader: require('./webgl/MeshShader') }; -},{"./Mesh":155,"./Plane":156,"./Rope":157,"./webgl/MeshRenderer":159,"./webgl/MeshShader":160}],159:[function(require,module,exports){ +},{"./Mesh":156,"./Plane":157,"./Rope":158,"./webgl/MeshRenderer":160,"./webgl/MeshShader":161}],160:[function(require,module,exports){ var core = require('../../core'), Mesh = require('../Mesh'); @@ -30148,7 +30188,7 @@ core.ObjectRenderer.prototype.destroy.call(this); }; -},{"../../core":53,"../Mesh":155}],160:[function(require,module,exports){ +},{"../../core":54,"../Mesh":156}],161:[function(require,module,exports){ var core = require('../../core'); /** @@ -30209,7 +30249,7 @@ core.ShaderManager.registerPlugin('meshShader', MeshShader); -},{"../../core":53}],161:[function(require,module,exports){ +},{"../../core":54}],162:[function(require,module,exports){ // References: // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign @@ -30225,7 +30265,7 @@ }; } -},{}],162:[function(require,module,exports){ +},{}],163:[function(require,module,exports){ // References: // https://github.com/sindresorhus/object-assign // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign @@ -30235,12 +30275,12 @@ Object.assign = require('object-assign'); } -},{"object-assign":26}],163:[function(require,module,exports){ +},{"object-assign":26}],164:[function(require,module,exports){ require('./Object.assign'); require('./requestAnimationFrame'); require('./Math.sign'); -},{"./Math.sign":161,"./Object.assign":162,"./requestAnimationFrame":164}],164:[function(require,module,exports){ +},{"./Math.sign":162,"./Object.assign":163,"./requestAnimationFrame":165}],165:[function(require,module,exports){ (function (global){ // References: // http://paulirish.com/2011/requestanimationframe-for-smart-animating/ @@ -30311,8 +30351,8 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[145])(145) +},{}]},{},[146])(146) }); -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L1RyYW5zZm9ybS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL1dlYkdMR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZENpcmNsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ29tcGxleFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZExpbmUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9NYXRyaXguanMiLCJzcmMvY29yZS9tYXRoL1BvaW50LmpzIiwic3JjL2NvcmUvbWF0aC9pbmRleC5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0NpcmNsZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0VsbGlwc2UuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Qb2x5Z29uLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZUJ1ZmZlci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL1N5c3RlbVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcy5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9UZXh0dXJlTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9GWEFBRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1F1YWQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0LmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1N0ZW5jaWxNYXNrU3RhY2suanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvc3ByaXRlcy9TcHJpdGUuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL1Nwcml0ZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvc3ByaXRlcy93ZWJnbC9nZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3RleHQvVGV4dC5qcyIsInNyYy9jb3JlL3RleHR1cmVzL0Jhc2VSZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1RleHR1cmVVdnMuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGlja2VyL1RpY2tlci5qcyIsInNyYy9jb3JlL3RpY2tlci9pbmRleC5qcyIsInNyYy9jb3JlL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcy5qcyIsInNyYy9jb3JlL3V0aWxzL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvcGx1Z2luVGFyZ2V0LmpzIiwic3JjL2RlcHJlY2F0aW9uLmpzIiwic3JjL2V4dHJhcy9CaXRtYXBUZXh0LmpzIiwic3JjL2V4dHJhcy9Nb3ZpZUNsaXAuanMiLCJzcmMvZXh0cmFzL1RpbGluZ1Nwcml0ZS5qcyIsInNyYy9leHRyYXMvY2FjaGVBc0JpdG1hcC5qcyIsInNyYy9leHRyYXMvZ2V0Q2hpbGRCeU5hbWUuanMiLCJzcmMvZXh0cmFzL2dldEdsb2JhbFBvc2l0aW9uLmpzIiwic3JjL2V4dHJhcy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2FzY2lpL0FzY2lpRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmxvb20vQmxvb21GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJEaXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJYRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9CbHVyWUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvU21hcnRCbHVyRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvclN0ZXBGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kb3QvRG90U2NyZWVuRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZHJvcHNoYWRvdy9CbHVyWVRpbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ncmF5L0dyYXlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2ludmVydC9JbnZlcnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ub2lzZS9Ob2lzZUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcmdiL1JHQlNwbGl0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvc2VwaWEvU2VwaWFGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdEF4aXNGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3R3aXN0L1R3aXN0RmlsdGVyLmpzIiwic3JjL3NyYy9pbmRleC5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbkRhdGEuanMiLCJzcmMvaW50ZXJhY3Rpb24vSW50ZXJhY3Rpb25NYW5hZ2VyLmpzIiwic3JjL2ludGVyYWN0aW9uL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL2ludGVyYWN0aXZlVGFyZ2V0LmpzIiwic3JjL2xvYWRlcnMvYml0bWFwRm9udFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL2luZGV4LmpzIiwic3JjL2xvYWRlcnMvbG9hZGVyLmpzIiwic3JjL2xvYWRlcnMvc3ByaXRlc2hlZXRQYXJzZXIuanMiLCJzcmMvbG9hZGVycy90ZXh0dXJlUGFyc2VyLmpzIiwic3JjL21lc2gvTWVzaC5qcyIsInNyYy9tZXNoL1BsYW5lLmpzIiwic3JjL21lc2gvUm9wZS5qcyIsInNyYy9tZXNoL2luZGV4LmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFJlbmRlcmVyLmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFNoYWRlci5qcyIsInNyYy9wb2x5ZmlsbC9NYXRoLnNpZ24uanMiLCJzcmMvcG9seWZpbGwvT2JqZWN0LmFzc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9pbmRleC5qcyIsInNyYy9wb2x5ZmlsbC9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM1dUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbnNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25tQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0b0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6bUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIGNyZWF0ZUNvbnRleHQ6IFx0XHRcdHJlcXVpcmUoJy4vbGliL2NyZWF0ZUNvbnRleHQnKSxcbiAgICBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM6IFx0cmVxdWlyZSgnLi9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzJyksXG4gICAgXG4gICAgR0xCdWZmZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xCdWZmZXInKSxcbiAgICBHTEZyYW1lYnVmZmVyOiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9HTEZyYW1lYnVmZmVyJyksXG4gICAgR0xTaGFkZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xTaGFkZXInKSxcbiAgICBHTFRleHR1cmU6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xUZXh0dXJlJyksXG4gICAgXG4gICAgVmVydGV4QXJyYXlPYmplY3Q6IFx0XHRyZXF1aXJlKCcuL2xpYi9WZXJ0ZXhBcnJheU9iamVjdCcpXG5cbn07IiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRU1QVFlfQVJSQVlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xuXG52YXIgQnVmZmVyID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5BUlJBWV9CVUZGRVI7XG5cdHRoaXMuZHJhd1R5cGUgPSBkcmF3VHlwZSB8fCBnbC5TVEFUSUNfRFJBVztcblx0dGhpcy5kYXRhID0gRU1QVFlfQVJSQVlfQlVGRkVSO1xuXG5cdGlmKGRhdGEpXG5cdHtcblx0XHR0aGlzLnVwbG9hZChkYXRhKTtcblx0fVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKGRhdGEsIG9mZnNldCwgZG9udEJpbmQpXG57XG5cdC8vIHRvZG8gLSBuZWVkZWQ/XG5cdC8vaWYoIWRvbnRCaW5kKVxuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRcblx0ZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuXHRvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuXHRpZih0aGlzLmRhdGEuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpXG5cdHtcdFxuXHRcdGdsLmJ1ZmZlclN1YkRhdGEodGhpcy50eXBlLCBvZmZzZXQsIGRhdGEpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLCBkYXRhLCB0aGlzLmRyYXdUeXBlKTtcblx0fVxuXG5cdHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKTtcbn1cblxuQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIGdsLkFSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgdHlwZSwgZHJhd1R5cGUpO1xufVxuXG4vL1RPRE8gRGVzdHJveS4uXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyO1xuXG4iLCJcbnZhciBUZXh0dXJlID0gcmVxdWlyZSgnLi9HTFRleHR1cmUnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgRnJhbWVidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRnJhbWVidWZmZXIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcblx0dGhpcy5zdGVuY2lsID0gbnVsbDtcblx0dGhpcy50ZXh0dXJlID0gbnVsbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMTAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5lbmFibGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IG5ldyBUZXh0dXJlKGdsKTtcblxuXHR0aGlzLnRleHR1cmUuYmluZCgpO1xuXG5cdC8vZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlLnRleHR1cmUsIDApO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlU3RlbmNpbCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5zdGVuY2lsKXJldHVybjtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuc3RlbmNpbCA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgIFxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCB0aGlzLnN0ZW5jaWwpO1xuICAgIFxuICAgIC8vIFRPRE8uLiB0aGlzIGlzIGRlcHRoIEFORCBzdGVuY2lsP1xuICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTCwgIHRoaXMud2lkdGggICwgdGhpcy5oZWlnaHQgKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oIHIsIGcsIGIsIGEgKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIGdsLmNsZWFyQ29sb3IociwgZywgYiwgYSk7XG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZnJhbWVidWZmZXIgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdGlmICggdGhpcy50ZXh0dXJlIClcbiAgICB7XG4gICAgXHR0aGlzLnRleHR1cmUudXBsb2FkRGF0YShudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdGlmICggdGhpcy5zdGVuY2lsIClcbiAgICB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgc3RlbmNpbCBidWZmZXIgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlUkdCQSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHR2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbURhdGEoZ2wsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xuXHR0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSk7XG5cbiAgICBmYm8udW5iaW5kKCk7XG4gICAgXG4gICAgcmV0dXJuIGZibztcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlRmxvYXQzMiA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHQvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZS4uXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZS5mcm9tRGF0YShnbCwgZGF0YSwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpXG5cbiAgICBmYm8udW5iaW5kKCk7XG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lYnVmZmVyO1xuXG4iLCJcbnZhciBjb21waWxlUHJvZ3JhbSA9IHJlcXVpcmUoJy4vc2hhZGVyL2NvbXBpbGVQcm9ncmFtJyksXG5cdGV4dHJhY3RBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdEF0dHJpYnV0ZXMnKSxcblx0ZXh0cmFjdFVuaWZvcm1zID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdFVuaWZvcm1zJyksXG5cdGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IHJlcXVpcmUoJy4vc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCcpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBTaGFkZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xudmFyIFNoYWRlciA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0Ly8gRmlyc3QgY29tcGlsZSB0aGUgcHJvZ3JhbS4uXG5cdHRoaXMucHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXHQvLyBuZXh0IGV4dHJhY3QgdGhlIGF0dHJpYnV0ZXNcblx0dGhpcy5hdHRyaWJ1dGVzID0gZXh0cmFjdEF0dHJpYnV0ZXMoZ2wsIHRoaXMucHJvZ3JhbSk7IFxuXG4gICAgdmFyIHVuaWZvcm1EYXRhID0gZXh0cmFjdFVuaWZvcm1zKGdsLCB0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy51bmlmb3JtcyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCggZ2wsIHVuaWZvcm1EYXRhICk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgVGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBhIFdlYkdMIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gZm9ybWF0IHtudW1iZXJ9IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlJHQkFcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IHRoZSBnbCB0eXBlIG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5VTlNJR05FRF9CWVRFXG4gKi9cbnZhciBUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHQvLyBzb21lIHNldHRpbmdzLi5cblx0dGhpcy5taXBtYXAgPSBmYWxzZTtcblxuXHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdCB8fCBnbC5SR0JBO1xuXHR0aGlzLnR5cGUgPSB0eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7XG5cblxufVxuXG4vKipcbiAqIEBwYXJhbSB7UElYSS5nbENvcmUuVGV4dHVyZX0gW3Zhcm5hbWVdIFtkZXNjcmlwdGlvbl1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oc291cmNlKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblxuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgc291cmNlKTtcbn1cblxudmFyIEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IGZhbHNlO1xuXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWREYXRhID0gZnVuY3Rpb24oZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5iaW5kKCk7XG5cdFxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgdGhpcy53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG5cblx0aWYoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcblx0e1xuXHRcdGlmKCFGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUpXG5cdFx0e1xuXHRcdFx0dmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO1xuXHRcdFx0XG5cdFx0XHRpZihleHQpXG5cdFx0XHR7XG5cdFx0XHRcdEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHlwZSA9IGdsLkZMT0FUO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdC8vIFRPRE8gc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXNcblx0XHR0aGlzLnR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuXHR9XG5cblx0Ly8gd2hhdCB0eXBlIG9mIGRhdGE/XG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcblx0Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBkYXRhIHx8IG51bGwpO1xuXG59XG5cblRleHR1cmUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihsb2NhdGlvbilcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRpZihsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKVxuXHR7XG5cdFx0Z2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uKTtcblx0fVxuXG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1pbkZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGlmKHRoaXMubWlwbWFwKVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCk7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xuXHR9XHRcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWFnRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVNaXBtYXAgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHRoaXMubWlwbWFwID0gdHJ1ZTtcblx0Z2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZUxpbmVhclNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKHRydWUpO1xuXHR0aGlzLm1hZ0ZpbHRlcih0cnVlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTmVhcmVzdFNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKGZhbHNlKTtcblx0dGhpcy5tYWdGaWx0ZXIoZmFsc2UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwQ2xhbXAgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBSZXBlYXQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cdFxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5SRVBFQVQpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG59XG5cbi8vVGV4dHVyZS5cblRleHR1cmUuZnJvbVNvdXJjZSA9IGZ1bmN0aW9uKGdsLCBzb3VyY2UsIHByZW11bHRpcGx5QWxwaGEpXG57XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhIHx8IGZhbHNlO1xuXHR0ZXh0dXJlLnVwbG9hZChzb3VyY2UpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5UZXh0dXJlLmZyb21EYXRhID0gZnVuY3Rpb24oZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdC8vY29uc29sZS5sb2coZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnVwbG9hZERhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG4iLCJcbi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxuLy8gc3RhdGUgb2JqZWN0Ly9cblxuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChnbClcbntcblx0XG5cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gKFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpXG4gICAgKTtcblxuLy9cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gbnVsbDtcblxuXHRpZih0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbilcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvID0gdGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsgIFxuXHR9XG5cblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG5cdHRoaXMuZGlydHkgPSBmYWxzZTtcblxuXHRcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVydGV4QXJyYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFZlcnRleEFycmF5T2JqZWN0O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5uYXRpdmVWYW8pOyAgXG5cblx0XHRpZih0aGlzLmRpcnR5KVxuXHRcdHtcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0XHR9XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgXG5cdHtcblx0XHR2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW2ldO1xuXHRcdGF0dHJpYi5idWZmZXIuYmluZCgpO1x0XG5cblx0XHRhdHRyaWIuYXR0cmlidXRlLnBvaW50ZXIoYXR0cmliLnR5cGUsIGF0dHJpYi5ub3JtYWxpemVkLCBhdHRyaWIuc3RyaWRlLCBhdHRyaWIuc3RhcnQpOyBcblx0XHRcblx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWIuYXR0cmlidXRlLmxvY2F0aW9uKTtcblx0fTtcblxuXHR0aGlzLmluZGV4QnVmZmVyLmJpbmQoKTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgYXR0cmlidXRlLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXJ0KVxue1xuICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHtcbiAgICBcdGJ1ZmZlcjogXHRidWZmZXIsXG4gICAgXHRhdHRyaWJ1dGU6IFx0YXR0cmlidXRlLFxuXG4gICAgXHRsb2NhdGlvbjogXHRhdHRyaWJ1dGUubG9jYXRpb24sXG5cdCBcdHR5cGU6IFx0XHR0eXBlIHx8IHRoaXMuZ2wuRkxPQVQsXG5cdCBcdG5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWQgfHwgZmFsc2UsXG5cdCBcdHN0cmlkZTogXHRzdHJpZGUgfHwgMCxcblx0IFx0c3RhcnQ6IFx0XHRzdGFydCB8fCAwXG5cdH0pXG5cblx0dGhpcy5kaXJ0eSA9IHRydWU7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRpb25zKVxue1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBidWZmZXI7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHR5cGUsIHNpemUsIHN0YXJ0KVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5kcmF3RWxlbWVudHModHlwZSwgc2l6ZSwgZ2wuVU5TSUdORURfU0hPUlQsIHN0YXJ0KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBDb250ZXh0XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIENPTlRFWFRfVUlEID0gMDtcblxudmFyIGNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbihjYW52YXMsIG9wdGlvbnMpXG57XG4gICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRpb25zKSB8fCBcbiAgICBcdCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdsKVxuICAgIHtcbiAgICAgICAgLy8gZmFpbCwgbm90IGFibGUgdG8gZ2V0IGEgY29udGV4dFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHdlYkdMLiBUcnkgdXNpbmcgdGhlIGNhbnZhcyByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIC8vIG1pZ2h0IHdhbnQgdG8gcGhhc2UgdGhpcyBvdXQ/XG4gICAgZ2wuaWQgPSBDT05URVhUX1VJRCsrO1xuXG4gICAgcmV0dXJuIGdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbnRleHQ7XG5cbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBzZXRWZXJ0ZXhBdHRyaWJBcnJheXMgPSBmdW5jdGlvbiAoZ2wsIGF0dHJpYnMpXG57XHRcbiAgIC8vIGNvbnNvbGUubG9nKGdsLmlkKVxuICAgIHZhciBkYXRhID0gR0xfTUFQW2dsLmlkXTtcblxuICAgIGlmKCFkYXRhKVxuICAgIHtcblx0ICAgdmFyIG1heEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0XHRkYXRhID0gR0xfTUFQW2dsLmlkXSA9IHt0ZW1wQXR0cmliU3RhdGU6bmV3IEFycmF5KG1heEF0dHJpYnMpXG5cdFx0XHRcdCBcdCBcdFx0ICAgLGF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKX07XG5cdH1cblx0XG4gICAgdmFyIGksXG4gICAgXHR0ZW1wQXR0cmliU3RhdGUgPSBkYXRhLnRlbXBBdHRyaWJTdGF0ZSxcbiAgICBcdGF0dHJpYlN0YXRlID0gZGF0YS5hdHRyaWJTdGF0ZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wQXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yIChpIGluIGF0dHJpYnMpXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbYXR0cmlic1tpXS5sb2NhdGlvbl0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDE7IGkgPCBhdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChhdHRyaWJTdGF0ZVtpXSAhPT0gdGVtcEF0dHJpYlN0YXRlW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJTdGF0ZVtpXSA9IHRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM7IiwiXG5cblxuXG5jb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuICAgIHZhciBnbFZlcnRTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbnZhciBjb21waWxlU2hhZGVyID0gZnVuY3Rpb24gKGdsLCB0eXBlLCBzcmMpXG57XG4gICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuXG4gICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlUHJvZ3JhbTtcblxuIiwiXG5cbnZhciBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBzaXplKSBcbntcbiAgICBzd2l0Y2ggKHR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICBjYXNlICd2ZWMyJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjNCc6ICAgICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KDQgKiBzaXplKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnaXZlYzInOiAgIFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDIgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWM0JzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2wnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY2FzZSAnYnZlYzInOlxuXG4gICAgICAgICAgICByZXR1cm4gYm9vbGVhbkFycmF5KCAyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzQnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSg0ICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDFdKTtcblxuICAgICAgICBjYXNlICdtYXQzJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0NCc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMCwgMV0pO1xuICAgIH1cbn1cblxudmFyIGJvb2xlYW5BcnJheSA9IGZ1bmN0aW9uKHNpemUpXG57XG4gICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgXG4gICAge1xuICAgICAgICBhcnJheVtpXSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdFZhbHVlO1xuIiwiXG52YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIG1hcFNpemUgPSByZXF1aXJlKCcuL21hcFNpemUnKTtcblxudmFyIGV4dHJhY3RBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcblxuICAgIHZhciB0b3RhbEF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9BVFRSSUJVVEVTKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEF0dHJpYnV0ZXM7IGkrKykgXG4gICAge1xuICAgICAgICB2YXIgYXR0cmliRGF0YSA9IGdsLmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpKTtcbiAgICAgICAgdmFyIHR5cGUgPSBtYXBUeXBlKGdsLCBhdHRyaWJEYXRhLnR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNbYXR0cmliRGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgIHR5cGU6dHlwZSxcbiAgICAgICAgICAgIHNpemU6bWFwU2l6ZSh0eXBlKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOmdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGF0dHJpYkRhdGEubmFtZSksXG4gICAgICAgICAgICAvL1RPRE8gLSBtYWtlIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAgICAgICAgICAgIHBvaW50ZXI6ZnVuY3Rpb24odHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydCl7XG5cbiAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmxvY2F0aW9uLHRoaXMuc2l6ZSwgdHlwZSB8fCBnbC5GTE9BVCwgbm9ybWFsaXplZCB8fCBmYWxzZSwgc3RyaWRlIHx8IDAsIHN0YXJ0IHx8IDApOyBcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzOyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0cmFjdEF0dHJpYnV0ZXM7XG5cbiIsInZhciBtYXBUeXBlID0gcmVxdWlyZSgnLi9tYXBUeXBlJyk7XG52YXIgZGVmYXVsdFZhbHVlID0gcmVxdWlyZSgnLi9kZWZhdWx0VmFsdWUnKTtcblxuXG52YXIgZXh0cmFjdFVuaWZvcm1zID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG5cdHZhciB1bmlmb3JtcyA9IHt9O1xuXHRcbiAgICB2YXIgdG90YWxVbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbFVuaWZvcm1zOyBpKyspIFxuICAgIHtcbiAgICBcdHZhciB1bmlmb3JtRGF0YSA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSk7XG4gICAgXHR2YXIgbmFtZSA9IHVuaWZvcm1EYXRhLm5hbWUucmVwbGFjZSgvXFxbLio/XFxdLywgXCJcIik7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgdW5pZm9ybURhdGEudHlwZSApO1xuXG4gICAgXHR1bmlmb3Jtc1tuYW1lXSA9IHtcbiAgICBcdFx0dHlwZTp0eXBlLFxuICAgIFx0XHRzaXplOnVuaWZvcm1EYXRhLnNpemUsXG4gICAgXHRcdGxvY2F0aW9uOmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSxcbiAgICBcdFx0dmFsdWU6ZGVmYXVsdFZhbHVlKHR5cGUsIHVuaWZvcm1EYXRhLnNpemUpXG4gICAgXHR9XG4gICAgfTtcblx0XG5cdHJldHVybiB1bmlmb3JtcztcdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RVbmlmb3JtcztcblxuIiwiXG52YXIgZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gZnVuY3Rpb24oZ2wsIHVuaWZvcm1EYXRhKVxue1xuICAgIC8vIHRoaXMgaXMgdGhlIG9iamVjdCB3ZSB3aWxsIGJlIHNlbmRpbmcgYmFjay5cbiAgICAvLyBhbiBvYmplY3QgaGllcmFjaHkgd2lsbCBiZSBjcmVhdGVkIGZvciBzdHJ1Y3RzXG4gICAgdmFyIHVuaWZvcm1zID0ge2RhdGE6e319O1xuXG4gICAgdW5pZm9ybXMuZ2wgPSBnbDtcbiAgICBcbiAgICB2YXIgdW5pZm9ybUtleXM9IE9iamVjdC5rZXlzKHVuaWZvcm1EYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybUtleXMubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGZ1bGxOYW1lID0gdW5pZm9ybUtleXNbaV1cblxuICAgICAgICB2YXIgbmFtZVRva2VucyA9IGZ1bGxOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHZhciB1bmlmb3JtR3JvdXAgPSBnZXRVbmlmb3JtR3JvdXAobmFtZVRva2VucywgdW5pZm9ybXMpO1xuXG4gICAgICAgIHZhciB1bmlmb3JtID0gIHVuaWZvcm1EYXRhW2Z1bGxOYW1lXTtcbiAgICAgICAgdW5pZm9ybUdyb3VwLmRhdGFbbmFtZV0gPSB1bmlmb3JtO1xuXG4gICAgICAgIHVuaWZvcm1Hcm91cC5nbCA9IGdsO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bmlmb3JtR3JvdXAsIG5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2VuZXJhdGVHZXR0ZXIobmFtZSksXG4gICAgICAgICAgICBzZXQ6IGdlbmVyYXRlU2V0dGVyKG5hbWUsIHVuaWZvcm0pXG4gICAgICAgIH0pXG4gICAgfTtcblxuICAgIHJldHVybiB1bmlmb3Jtcztcbn1cblxudmFyIGdlbmVyYXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSlcbntcblx0dmFyIHRlbXBsYXRlID0gZ2V0dGVyVGVtcGxhdGUucmVwbGFjZSgnJSUnLCBuYW1lKTtcblx0cmV0dXJuIG5ldyBGdW5jdGlvbih0ZW1wbGF0ZSk7XG59XG5cbnZhciBnZW5lcmF0ZVNldHRlciA9IGZ1bmN0aW9uKG5hbWUsIHVuaWZvcm0pXG57XG4gICAgdmFyIHRlbXBsYXRlID0gc2V0dGVyVGVtcGxhdGUucmVwbGFjZSgvJSUvZywgbmFtZSk7XG4gICAgdmFyIHNldFRlbXBsYXRlXG4gICAgXG4gICAgaWYodW5pZm9ybS5zaXplID09PSAxKVxuICAgIHtcbiAgICAgICAgc2V0VGVtcGxhdGUgPSBHTFNMX1RPX1NJTkdMRV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19BUlJBWV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuXG4gICAgaWYoc2V0VGVtcGxhdGUpXG4gICAge1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIlxcbnRoaXMuZ2wuXCIgKyBzZXRUZW1wbGF0ZSArIFwiO1wiO1xuICAgIH1cblxuICBcdHJldHVybiBuZXcgRnVuY3Rpb24oJ3ZhbHVlJywgdGVtcGxhdGUpO1xufVxuXG52YXIgZ2V0VW5pZm9ybUdyb3VwID0gZnVuY3Rpb24obmFtZVRva2VucywgdW5pZm9ybSlcbntcbiAgICB2YXIgY3VyID0gdW5pZm9ybTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZVRva2Vucy5sZW5ndGggLSAxOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIG8gPSBjdXJbbmFtZVRva2Vuc1tpXV0gfHwge2RhdGE6e319O1xuICAgICAgICBjdXJbbmFtZVRva2Vuc1tpXV0gPSBvO1xuICAgICAgICBjdXIgPSBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gY3VyXG59XG5cbnZhciBnZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAncmV0dXJuIHRoaXMuZGF0YS4lJS52YWx1ZTsnLFxuXS5qb2luKCdcXG4nKTtcblxudmFyIHNldHRlclRlbXBsYXRlID0gW1xuICAgICd0aGlzLmRhdGEuJSUudmFsdWUgPSB2YWx1ZTsnLFxuICAgICd2YXIgbG9jYXRpb24gPSB0aGlzLmRhdGEuJSUubG9jYXRpb247J1xuXS5qb2luKCdcXG4nKTtcblxuXG52YXIgR0xTTF9UT19TSU5HTEVfU0VUVEVSUyA9IHtcblxuICAgICdmbG9hdCc6ICAgICd1bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ3ZlYzQnOiAgICAgJ3VuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdidmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdidmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ21hdDInOiAgICAgJ3VuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuICAgICdtYXQzJzogICAgICd1bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0NCc6ICAgICAndW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG5cbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbnZhciBHTFNMX1RPX0FSUkFZX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpJyxcblxuICAgICd2ZWMyJzogICAgICd1bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWMzJzogICAgICd1bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgIFx0XG4gICAgJ2ludCc6ICAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgIFxuICAgICdzYW1wbGVyMkQnOid1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0O1xuXG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbih0eXBlKSBcbnsgXG4gICAgcmV0dXJuIEdMU0xfVE9fU0laRVt0eXBlXTtcbn1cblxuXG52YXIgR0xTTF9UT19TSVpFID0ge1xuICAgICdmbG9hdCc6ICAgIDEsXG4gICAgJ3ZlYzInOiAgICAgMixcbiAgICAndmVjMyc6ICAgICAzLFxuICAgICd2ZWM0JzogICAgIDQsXG5cbiAgICAnaW50JzogICAgICAxLFxuICAgICdpdmVjMic6ICAgIDIsXG4gICAgJ2l2ZWMzJzogICAgMyxcbiAgICAnaXZlYzQnOiAgICA0LFxuXG4gICAgJ2Jvb2wnOiAgICAgMSxcbiAgICAnYnZlYzInOiAgICAyLFxuICAgICdidmVjMyc6ICAgIDMsXG4gICAgJ2J2ZWM0JzogICAgNCxcblxuICAgICdtYXQyJzogICAgIDQsXG4gICAgJ21hdDMnOiAgICAgOSxcbiAgICAnbWF0NCc6ICAgICAxNixcblxuICAgICdzYW1wbGVyMkQnOiAgMVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFNpemU7XG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbihnbCwgdHlwZSkgXG57XG4gICAgaWYoIUdMX1RBQkxFKSBcbiAgICB7XG4gICAgICAgIHZhciB0eXBlTmFtZXMgPSBPYmplY3Qua2V5cyhHTF9UT19HTFNMX1RZUEVTKTtcblxuICAgICAgICBHTF9UQUJMRSA9IHt9O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlTmFtZXMubGVuZ3RoOyArK2kpIFxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdG4gPSB0eXBlTmFtZXNbaV07XG4gICAgICAgICAgICBHTF9UQUJMRVsgZ2xbdG5dIF0gPSBHTF9UT19HTFNMX1RZUEVTW3RuXTtcbiAgICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gR0xfVEFCTEVbdHlwZV07XG59XG5cbnZhciBHTF9UQUJMRSA9IG51bGw7XG5cbnZhciBHTF9UT19HTFNMX1RZUEVTID0ge1xuICAnRkxPQVQnOiAgICAgICAnZmxvYXQnLFxuICAnRkxPQVRfVkVDMic6ICAndmVjMicsXG4gICdGTE9BVF9WRUMzJzogICd2ZWMzJyxcbiAgJ0ZMT0FUX1ZFQzQnOiAgJ3ZlYzQnLFxuXG4gICdJTlQnOiAgICAgICAgICdpbnQnLFxuICAnSU5UX1ZFQzInOiAgICAnaXZlYzInLFxuICAnSU5UX1ZFQzMnOiAgICAnaXZlYzMnLFxuICAnSU5UX1ZFQzQnOiAgICAnaXZlYzQnLFxuICBcbiAgJ0JPT0wnOiAgICAgICAgJ2Jvb2wnLFxuICAnQk9PTF9WRUMyJzogICAnYnZlYzInLFxuICAnQk9PTF9WRUMzJzogICAnYnZlYzMnLFxuICAnQk9PTF9WRUM0JzogICAnYnZlYzQnLFxuICBcbiAgJ0ZMT0FUX01BVDInOiAgJ21hdDInLFxuICAnRkxPQVRfTUFUMyc6ICAnbWF0MycsXG4gICdGTE9BVF9NQVQ0JzogICdtYXQ0JyxcbiAgXG4gICdTQU1QTEVSXzJEJzogICdzYW1wbGVyMkQnICBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiLyohXG4gKiBhc3luY1xuICogaHR0cHM6Ly9naXRodWIuY29tL2Nhb2xhbi9hc3luY1xuICpcbiAqIENvcHlyaWdodCAyMDEwLTIwMTQgQ2FvbGFuIE1jTWFob25cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9Cb29sKHYpIHtcbiAgICAgICAgcmV0dXJuICEhdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90SWQodikge1xuICAgICAgICByZXR1cm4gIXY7XG4gICAgfVxuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBwcmV2aW91c19hc3luYztcblxuICAgIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAgIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICAgIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsIHx8XG4gICAgICAgICAgICB0aGlzO1xuXG4gICAgaWYgKHJvb3QgIT0gbnVsbCkge1xuICAgICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsaXR5IGZ1bmN0aW9ucyAvLy8vXG5cbiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIHZhciBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xuXG4gICAgLy8gUG9ydGVkIGZyb20gdW5kZXJzY29yZS5qcyBpc09iamVjdFxuICAgIHZhciBfaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2lzQXJyYXlMaWtlKGFycikge1xuICAgICAgICByZXR1cm4gX2lzQXJyYXkoYXJyKSB8fCAoXG4gICAgICAgICAgICAvLyBoYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAgICAgICAgdHlwZW9mIGFyci5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgICAgYXJyLmxlbmd0aCAlIDEgPT09IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXJyYXlFYWNoKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaW5kZXhdLCBpbmRleCwgYXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IGFyci5sZW5ndGgsXG4gICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcmFuZ2UoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9tYXAoQXJyYXkoY291bnQpLCBmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gaTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZHVjZShhcnIsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgIF9hcnJheUVhY2goYXJyLCBmdW5jdGlvbiAoeCwgaSwgYSkge1xuICAgICAgICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHgsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZvckVhY2hPZihvYmplY3QsIGl0ZXJhdG9yKSB7XG4gICAgICAgIF9hcnJheUVhY2goX2tleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaXRlcmF0b3Iob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbmRleE9mKGFyciwgaXRlbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9rZXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW47XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBpZiAoX2lzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGkgOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBfa2V5cyhjb2xsKTtcbiAgICAgICAgICAgIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ga2V5c1tpXSA6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2ltaWxhciB0byBFUzYncyByZXN0IHBhcmFtIChodHRwOi8vYXJpeWEub2ZpbGFicy5jb20vMjAxMy8wMy9lczYtYW5kLXJlc3QtcGFyYW1ldGVyLmh0bWwpXG4gICAgLy8gVGhpcyBhY2N1bXVsYXRlcyB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGFuIGFycmF5LCBhZnRlciBhIGdpdmVuIGluZGV4LlxuICAgIC8vIEZyb20gdW5kZXJzY29yZS5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMjE0MCkuXG4gICAgZnVuY3Rpb24gX3Jlc3RQYXJhbShmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IHVudXNlZCBidXQgaGFuZGxlIGNhc2VzIG91dHNpZGUgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQ6XG4gICAgICAgICAgICAvLyB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgIC8vIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIC8vICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgICAgICAgIC8vIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IodmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG5cbiAgICAvLyBjYXB0dXJlIHRoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIGd1YXJkIGFnYWluc3QgZmFrZVRpbWVyIG1vY2tzXG4gICAgdmFyIF9zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcblxuICAgIHZhciBfZGVsYXkgPSBfc2V0SW1tZWRpYXRlID8gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgX3NldEltbWVkaWF0ZShmbik7XG4gICAgfSA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IF9kZWxheTtcbiAgICB9XG4gICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gX3NldEltbWVkaWF0ZSA/IF9kZWxheSA6IGFzeW5jLm5leHRUaWNrO1xuXG5cbiAgICBhc3luYy5mb3JFYWNoID1cbiAgICBhc3luYy5lYWNoID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2YoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID1cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cblxuICAgIGFzeW5jLmZvckVhY2hMaW1pdCA9XG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2VhY2hPZkxpbWl0KGxpbWl0KShhcnIsIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZiA9XG4gICAgYXN5bmMuZWFjaE9mID0gZnVuY3Rpb24gKG9iamVjdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdCB8fCBbXTtcblxuICAgICAgICB2YXIgaXRlciA9IF9rZXlJdGVyYXRvcihvYmplY3QpO1xuICAgICAgICB2YXIga2V5LCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgICAgIHdoaWxlICgoa2V5ID0gaXRlcigpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXksIG9ubHlfb25jZShkb25lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkID09PSAwKSBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgICAgY29tcGxldGVkLS07XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGtleSBpcyBudWxsIGluIGNhc2UgaXRlcmF0b3IgaXNuJ3QgZXhoYXVzdGVkXG4gICAgICAgICAgICAvLyBhbmQgZG9uZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBudWxsICYmIGNvbXBsZXRlZCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaE9mU2VyaWVzID1cbiAgICBhc3luYy5lYWNoT2ZTZXJpZXMgPSBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShpdGVyYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLmZvckVhY2hPZkxpbWl0ID1cbiAgICBhc3luYy5lYWNoT2ZMaW1pdCA9IGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgX2VhY2hPZkxpbWl0KGxpbWl0KShvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9lYWNoT2ZMaW1pdChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgICAgICBvYmogPSBvYmogfHwgW107XG4gICAgICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUgJiYgcnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmICFlcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBuZXh0S2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iob2JqW2tleV0sIGtleSwgb25seV9vbmNlKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZG9QYXJhbGxlbChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oYXN5bmMuZWFjaE9mLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWxMaW1pdChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKF9lYWNoT2ZMaW1pdChsaW1pdCksIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9TZXJpZXMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZlNlcmllcywgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UoYXJyKSA/IFtdIDoge307XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih2YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9hc3luY01hcCk7XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMuaW5qZWN0ID1cbiAgICBhc3luYy5mb2xkbCA9XG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hPZlNlcmllcyhhcnIsIGZ1bmN0aW9uICh4LCBpLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgeCwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBtZW1vKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvbGRyID1cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgaWRlbnRpdHkpLnJldmVyc2UoKTtcbiAgICAgICAgYXN5bmMucmVkdWNlKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0b3I7XG4gICAgICAgICAgICBpdGVyYXRvciA9IG1lbW87XG4gICAgICAgICAgICBtZW1vID0gX2lzQXJyYXkoYXJyKSA/IFtdIDoge307XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoT2YoYXJyLCBmdW5jdGlvbih2LCBrLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgdiwgaywgY2IpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4OiBpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5zZWxlY3QgPVxuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RMaW1pdCA9XG4gICAgYXN5bmMuZmlsdGVyTGltaXQgPSBkb1BhcmFsbGVsTGltaXQoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RTZXJpZXMgPVxuICAgIGFzeW5jLmZpbHRlclNlcmllcyA9IGRvU2VyaWVzKF9maWx0ZXIpO1xuXG4gICAgZnVuY3Rpb24gX3JlamVjdChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9maWx0ZXIoZWFjaGZuLCBhcnIsIGZ1bmN0aW9uKHZhbHVlLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBjYighdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBhc3luYy5yZWplY3QgPSBkb1BhcmFsbGVsKF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdFNlcmllcyA9IGRvU2VyaWVzKF9yZWplY3QpO1xuXG4gICAgZnVuY3Rpb24gX2NyZWF0ZVRlc3RlcihlYWNoZm4sIGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYikge1xuICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIGNiKGdldFJlc3VsdChmYWxzZSwgdm9pZCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZSh4LCBfLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYiAmJiBjaGVjayh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoZ2V0UmVzdWx0KHRydWUsIHgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgZWFjaGZuKGFyciwgbGltaXQsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2IgPSBpdGVyYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGxpbWl0O1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy5hbnkgPVxuICAgIGFzeW5jLnNvbWUgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5zb21lTGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCB0b0Jvb2wsIGlkZW50aXR5KTtcblxuICAgIGFzeW5jLmFsbCA9XG4gICAgYXN5bmMuZXZlcnkgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgbm90SWQsIG5vdElkKTtcblxuICAgIGFzeW5jLmV2ZXJ5TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBub3RJZCwgbm90SWQpO1xuXG4gICAgZnVuY3Rpb24gX2ZpbmRHZXRSZXN1bHQodiwgeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgYXN5bmMuZGV0ZWN0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0U2VyaWVzID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZTZXJpZXMsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuXG4gICAgYXN5bmMuc29ydEJ5ID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLm1hcChhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKGVyciwgY3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7dmFsdWU6IHgsIGNyaXRlcmlhOiBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChjb21wYXJhdG9yKSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNvbmN1cnJlbmN5LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gcmVtYWluaW5nVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBfaW5kZXhPZihsaXN0ZW5lcnMsIGZuKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRhc2tDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLS07XG4gICAgICAgICAgICBfYXJyYXlFYWNoKGxpc3RlbmVycy5zbGljZSgwKSwgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBfYXJyYXlFYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9mb3JFYWNoT2YocmVzdWx0cywgZnVuY3Rpb24odmFsLCBya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHRhc2tDb21wbGV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRlYWQtbG9ja3NcbiAgICAgICAgICAgIHZhciBsZW4gPSByZXF1aXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZGVwO1xuICAgICAgICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZGVwID0gdGFza3NbcmVxdWlyZXNbbGVuXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGluZXhpc3RhbnQgZGVwZW5kZW5jeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzQXJyYXkoZGVwKSAmJiBfaW5kZXhPZihkZXAsIGspID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXMgY3ljbGljIGRlcGVuZGVuY2llcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5uaW5nVGFza3MgPCBjb25jdXJyZW5jeSAmJiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzKys7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLnJldHJ5ID0gZnVuY3Rpb24odGltZXMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBERUZBVUxUX1RJTUVTID0gNTtcbiAgICAgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuXG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbDogREVGQVVMVF9JTlRFUlZBTFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KXtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0ID09PSAnbnVtYmVyJyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodCwgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYodHlwZW9mIHQgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBhY2MudGltZXMgPSBwYXJzZUludCh0LnRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgICAgICAgICBhY2MuaW50ZXJ2YWwgPSBwYXJzZUludCh0LmludGVydmFsLCAxMCkgfHwgREVGQVVMVF9JTlRFUlZBTDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGZvciBcXCd0aW1lc1xcJzogJyArIHR5cGVvZiB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgMSB8fCBsZW5ndGggPiAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIC0gbXVzdCBiZSBlaXRoZXIgKHRhc2spLCAodGFzaywgY2FsbGJhY2spLCAodGltZXMsIHRhc2spIG9yICh0aW1lcywgdGFzaywgY2FsbGJhY2spJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoIDw9IDIgJiYgdHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRzLCB0aW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBvcHRzLnRhc2sgPSB0YXNrO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRUYXNrKHdyYXBwZWRDYWxsYmFjaywgd3JhcHBlZFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCh0YXNrLCBmaW5hbEF0dGVtcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VyaWVzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayhmdW5jdGlvbihlcnIsIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXNDYWxsYmFjayghZXJyIHx8IGZpbmFsQXR0ZW1wdCwge2VycjogZXJyLCByZXN1bHQ6IHJlc3VsdH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVkUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmV0cnlJbnRlcnZhbChpbnRlcnZhbCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAob3B0cy50aW1lcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsQXR0ZW1wdCA9ICEob3B0cy50aW1lcy09MSk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQob3B0cy50YXNrLCBmaW5hbEF0dGVtcHQpKTtcbiAgICAgICAgICAgICAgICBpZighZmluYWxBdHRlbXB0ICYmIG9wdHMuaW50ZXJ2YWwgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUludGVydmFsKG9wdHMuaW50ZXJ2YWwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IG9wdHMuY2FsbGJhY2spKGRhdGEuZXJyLCBkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIG9wdHMuY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2s7XG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBJdGVyYXRvcihpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgW2Vycl0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuc3VyZUFzeW5jKGl0ZXJhdG9yKS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfcGFyYWxsZWwoZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IF9pc0FycmF5TGlrZSh0YXNrcykgPyBbXSA6IHt9O1xuXG4gICAgICAgIGVhY2hmbih0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGtleSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRhc2soX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2YsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChfZWFjaE9mTGltaXQobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKGFzeW5jLmVhY2hPZlNlcmllcywgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuaXRlcmF0b3IgPSBmdW5jdGlvbiAodGFza3MpIHtcbiAgICAgICAgZnVuY3Rpb24gbWFrZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm4ubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgdGFza3MubGVuZ3RoIC0gMSkgPyBtYWtlQ2FsbGJhY2soaW5kZXggKyAxKTogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIChmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoY2FsbEFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLCBhcmdzLmNvbmNhdChjYWxsQXJncylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gX2NvbmNhdChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoeSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG4gICAgICAgIGlmICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0LmFwcGx5KHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1doaWxzdCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiArK2NhbGxzIDw9IDEgfHwgdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZHVyaW5nID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG5cbiAgICAgICAgdmFyIG5leHQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjaGVjayk7XG4gICAgICAgICAgICAgICAgdGVzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24oZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRydXRoKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QoY2hlY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb0R1cmluZyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgYXN5bmMuZHVyaW5nKGZ1bmN0aW9uKG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjYWxscysrIDwgMSkge1xuICAgICAgICAgICAgICAgIG5leHQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3F1ZXVlKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHBvcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayB8fCBub29wXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9uZXh0KHEsIHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIF9hcnJheUVhY2godGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2god29ya2Vyc0xpc3QsIGZ1bmN0aW9uICh3b3JrZXIsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya2VyID09PSB0YXNrICYmICFyZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBub29wLFxuICAgICAgICAgICAgZW1wdHk6IG5vb3AsXG4gICAgICAgICAgICBkcmFpbjogbm9vcCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5kcmFpbiA9IG5vb3A7XG4gICAgICAgICAgICAgICAgcS50YXNrcyA9IFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnQ6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrcyA9IHEucGF5bG9hZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS5wYXlsb2FkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS50YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9tYXAodGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5wdXNoKHRhc2tzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShfbmV4dChxLCB0YXNrcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyKGRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtlcnNMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSBmYWxzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bWVDb3VudCA9IE1hdGgubWluKHEuY29uY3VycmVuY3ksIHEudGFza3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHJlc3VtZUNvdW50OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBxID0gX3F1ZXVlKGZ1bmN0aW9uIChpdGVtcywgY2IpIHtcbiAgICAgICAgICAgIHdvcmtlcihpdGVtc1swXSwgY2IpO1xuICAgICAgICB9LCBjb25jdXJyZW5jeSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLnByaW9yaXR5UXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuXG4gICAgICAgIGZ1bmN0aW9uIF9jb21wYXJlVGFza3MoYSwgYil7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgICB2YXIgYmVnID0gLTEsXG4gICAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgc2VxdWVuY2VbbWlkXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWcgPSBtaWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmVnO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBfcXVldWUod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2NvbnNvbGVfZm4obmFtZSkge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2goYXJncywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlW25hbWVdKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgaWRlbnRpdHk7XG4gICAgICAgIHZhciBtZW1vaXplZCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24gbWVtb2l6ZWQoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBtZW1vW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0gPSBbY2FsbGJhY2tdO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW9ba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH07XG5cbiAgICBhc3luYy51bm1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3RpbWVzKG1hcHBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG1hcHBlcihfcmFuZ2UoY291bnQpLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jLnRpbWVzID0gX3RpbWVzKGFzeW5jLm1hcCk7XG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBfdGltZXMoYXN5bmMubWFwU2VyaWVzKTtcbiAgICBhc3luYy50aW1lc0xpbWl0ID0gZnVuY3Rpb24gKGNvdW50LCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5tYXBMaW1pdChfcmFuZ2UoY291bnQpLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VxID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5vb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnJlZHVjZShmbnMsIGFyZ3MsIGZ1bmN0aW9uIChuZXdhcmdzLCBmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBuZXdhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBuZXh0YXJncykge1xuICAgICAgICAgICAgICAgICAgICBjYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY29tcG9zZSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIF9hcHBseUVhY2goZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uKGZucywgYXJncykge1xuICAgICAgICAgICAgdmFyIGdvID0gX3Jlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgXywgY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncy5jb25jYXQoW2NiXSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ28uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ287XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmFwcGx5RWFjaCA9IF9hcHBseUVhY2goYXN5bmMuZWFjaE9mKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZlNlcmllcyk7XG5cblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seV9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIgdGFzayA9IGVuc3VyZUFzeW5jKGZuKTtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmVuc3VyZUFzeW5jID0gZW5zdXJlQXN5bmM7XG5cbiAgICBhc3luYy5jb25zdGFudCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICAgIHZhciBhcmdzID0gW251bGxdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhc3luYy53cmFwU3luYyA9XG4gICAgYXN5bmMuYXN5bmNpZnkgPSBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChfaXNPYmplY3QocmVzdWx0KSAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIubWVzc2FnZSA/IGVyciA6IG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcblxuICAgIGRpbSA9IGRpbSB8fCAyO1xuXG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLFxuICAgICAgICBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcbiAgICAgICAgdHJpYW5nbGVzID0gW107XG5cbiAgICBpZiAoIW91dGVyTm9kZSkgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBzaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgc2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIHN1bSA9IDAsXG4gICAgICAgIGksIGosIGxhc3Q7XG5cbiAgICAvLyBjYWxjdWxhdGUgb3JpZ2luYWwgd2luZGluZyBvcmRlciBvZiBhIHBvbHlnb24gcmluZ1xuICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuXG4gICAgLy8gbGluayBwb2ludHMgaW50byBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHN1bSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG4gICAgaWYgKCFzdGFydCkgcmV0dXJuIHN0YXJ0O1xuICAgIGlmICghZW5kKSBlbmQgPSBzdGFydDtcblxuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcCA9IGVuZCA9IHAucHJldjtcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuICAgIHJldHVybiBlbmQ7XG59XG5cbi8vIG1haW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBhcyBhIGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIHBhc3MpIHtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuICAgIGlmICghcGFzcyAmJiBzaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICB2YXIgc3RvcCA9IGVhcixcbiAgICAgICAgcHJldiwgbmV4dDtcblxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuICAgIHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcbiAgICAgICAgcHJldiA9IGVhci5wcmV2O1xuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XG5cbiAgICAgICAgaWYgKHNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIHNpemUpIDogaXNFYXIoZWFyKSkge1xuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXG4gICAgICAgICAgICByZW1vdmVOb2RlKGVhcik7XG5cbiAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRpY2UgbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhlYXIsIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIHNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICAvLyBmaXJzdCBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBpbmNyZWFzaW5nIHotb3JkZXJcbiAgICB2YXIgcCA9IGVhci5uZXh0WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyB0aGVuIGxvb2sgZm9yIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICBwID0gZWFyLnByZXZaO1xuXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgLy8gYSBzZWxmLWludGVyc2VjdGlvbiB3aGVyZSBlZGdlICh2W2ktMV0sdltpXSkgaW50ZXJzZWN0cyAodltpKzFdLHZbaSsyXSlcbiAgICAgICAgaWYgKGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHA7XG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBsb29rIGZvciBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgICAgICAgICBhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiA9IGIubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBhID0gYS5uZXh0O1xuICAgIH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG4gICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuICAgICAgICBpZiAobGlzdCA9PT0gbGlzdC5uZXh0KSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuICAgICAgICBxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcbiAgICB9XG5cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0ZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlWChhLCBiKSB7XG4gICAgcmV0dXJuIGEueCAtIGIueDtcbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkge1xuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xuICAgICAgICBmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcbiAgICB9XG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBwID0gb3V0ZXJOb2RlLFxuICAgICAgICBoeCA9IGhvbGUueCxcbiAgICAgICAgaHkgPSBob2xlLnksXG4gICAgICAgIHF4ID0gLUluZmluaXR5LFxuICAgICAgICBtO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgdGFuO1xuXG4gICAgcCA9IG0ubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBzdG9wKSB7XG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG0ueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG0ueSA/IGh4IDogcXgsIGh5LCBtLngsIG0ueSwgaHkgPCBtLnkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuICAgICAgICAgICAgaWYgKCh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIHAueCA+IG0ueCkpICYmIGxvY2FsbHlJbnNpZGUocCwgaG9sZSkpIHtcbiAgICAgICAgICAgICAgICBtID0gcDtcbiAgICAgICAgICAgICAgICB0YW5NaW4gPSB0YW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBtO1xufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgIHAucHJldlogPSBwLnByZXY7XG4gICAgICAgIHAubmV4dFogPSBwLm5leHQ7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgcC5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKHApO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIGRvIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHFTaXplID09PSAwIHx8ICFxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAueiA8PSBxLnopIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuICAgICAgICBpblNpemUgKj0gMjtcblxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIHNpemUgb2YgdGhlIGRhdGEgYm91bmRpbmcgYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpIC8gc2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpIC8gc2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LngpIGxlZnRtb3N0ID0gcDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gbGVmdG1vc3Q7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcbiAgICByZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXF1YWxzKGEsIGIpIHx8IGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcbiAgICAgICAgICAgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKTtcbn1cblxuLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xufVxuXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXG4gICAgICAgICAgIGFyZWEocDIsIHEyLCBwMSkgPiAwICE9PSBhcmVhKHAyLCBxMiwgcTEpID4gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG4vLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG4gICAgICAgIGFuID0gYS5uZXh0LFxuICAgICAgICBicCA9IGIucHJldjtcblxuICAgIGEubmV4dCA9IGI7XG4gICAgYi5wcmV2ID0gYTtcblxuICAgIGEyLm5leHQgPSBhbjtcbiAgICBhbi5wcmV2ID0gYTI7XG5cbiAgICBiMi5uZXh0ID0gYTI7XG4gICAgYTIucHJldiA9IGIyO1xuXG4gICAgYnAubmV4dCA9IGIyO1xuICAgIGIyLnByZXYgPSBicDtcblxuICAgIHJldHVybiBiMjtcbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgcC5wcmV2ID0gcDtcbiAgICAgICAgcC5uZXh0ID0gcDtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHAubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgcC5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xuICAgICAgICBsYXN0Lm5leHQgPSBwO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XG4gICAgcC5uZXh0LnByZXYgPSBwLnByZXY7XG4gICAgcC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cbiAgICBpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG4gICAgaWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcbiAgICAvLyB2ZXJ0aWNlIGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRpY2Ugbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vXG4vLyBXZSBzdG9yZSBvdXIgRUUgb2JqZWN0cyBpbiBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBgfmAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Qgb3ZlcnJpZGRlbiBvclxuLy8gdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy8gV2UgYWxzbyBhc3N1bWUgdGhhdCBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV2ZW50IG5hbWVcbi8vIGlzIGFuIEVTNiBTeW1ib2wuXG4vL1xudmFyIHByZWZpeCA9IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nID8gJ34nIDogZmFsc2U7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgRXZlbnRFbWl0dGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBDb250ZXh0IGZvciBmdW5jdGlvbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSBlbWl0IG9uY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTWluaW1hbCBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIEV2ZW50RW1pdHRlciBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7IC8qIE5vdGhpbmcgdG8gc2V0ICovIH1cblxuLyoqXG4gKiBIb2xkcyB0aGUgYXNzaWduZWQgRXZlbnRFbWl0dGVycyBieSBuYW1lLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBhc3NpZ25lZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBleGlzdHMgV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtBcnJheXxCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQsIGV4aXN0cykge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgYXZhaWxhYmxlID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChleGlzdHMpIHJldHVybiAhIWF2YWlsYWJsZTtcbiAgaWYgKCFhdmFpbGFibGUpIHJldHVybiBbXTtcbiAgaWYgKGF2YWlsYWJsZS5mbikgcmV0dXJuIFthdmFpbGFibGUuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXZhaWxhYmxlLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGF2YWlsYWJsZVtpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB0byBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJbmRpY2F0aW9uIGlmIHdlJ3ZlIGVtaXR0ZWQgYW4gZXZlbnQuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IEV2ZW50TGlzdGVuZXIgZm9yIHRoZSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0b259IGZuIENhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGQgYW4gRXZlbnRMaXN0ZW5lciB0aGF0J3Mgb25seSBjYWxsZWQgb25jZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IHRoaXMsIHRydWUpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKSB0aGlzLl9ldmVudHMgPSBwcmVmaXggPyB7fSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHRoaXMuX2V2ZW50c1tldnRdID0gbGlzdGVuZXI7XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5fZXZlbnRzW2V2dF0uZm4pIHRoaXMuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIGVsc2UgdGhpcy5fZXZlbnRzW2V2dF0gPSBbXG4gICAgICB0aGlzLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3ZSB3YW50IHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciB0aGF0IHdlIG5lZWQgdG8gZmluZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgT25seSByZW1vdmUgbGlzdGVuZXJzIG1hdGNoaW5nIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmNlIGxpc3RlbmVycy5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGV2ZW50cyA9IFtdO1xuXG4gIGlmIChmbikge1xuICAgIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgICAgbGlzdGVuZXJzLmZuICE9PSBmblxuICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzLm9uY2UpXG4gICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVycy5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm5cbiAgICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpXG4gICAgICAgICAgfHwgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gIC8vXG4gIGlmIChldmVudHMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbZXZ0XTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycyBvciBvbmx5IHRoZSBsaXN0ZW5lcnMgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvci5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcztcblxuICBpZiAoZXZlbnQpIGRlbGV0ZSB0aGlzLl9ldmVudHNbcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudF07XG4gIGVsc2UgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYXBwbHkgYW55bW9yZS5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLypqc2hpbnQgb25ldmFyOiBmYWxzZSwgaW5kZW50OjQgKi9cbi8qZ2xvYmFsIHNldEltbWVkaWF0ZTogZmFsc2UsIHNldFRpbWVvdXQ6IGZhbHNlLCBjb25zb2xlOiBmYWxzZSAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciByb290LCBwcmV2aW91c19hc3luYztcblxuICAgIHJvb3QgPSB0aGlzO1xuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgIHByZXZpb3VzX2FzeW5jID0gcm9vdC5hc3luYztcbiAgICB9XG5cbiAgICBhc3luYy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmFzeW5jID0gcHJldmlvdXNfYXN5bmM7XG4gICAgICAgIHJldHVybiBhc3luYztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb25seV9vbmNlKGZuKSB7XG4gICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGNhbGxlZCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseShyb290LCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIHZhciBfZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaV0sIGksIGFycik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIF9tYXAgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBpZiAoYXJyLm1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5tYXAoaXRlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih4LCBpLCBhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgdmFyIF9yZWR1Y2UgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBpZiAoYXJyLnJlZHVjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8pO1xuICAgICAgICB9XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICB2YXIgX2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIC8vLy8gZXhwb3J0ZWQgYXN5bmMgbW9kdWxlIGZ1bmN0aW9ucyAvLy8vXG5cbiAgICAvLy8vIG5leHRUaWNrIGltcGxlbWVudGF0aW9uIHdpdGggYnJvd3Nlci1jb21wYXRpYmxlIGZhbGxiYWNrIC8vLy9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICEocHJvY2Vzcy5uZXh0VGljaykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgICBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAvLyBub3QgYSBkaXJlY3QgYWxpYXMgZm9yIElFMTAgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBvbmx5X29uY2UoZG9uZSkgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaCA9IGFzeW5jLmVhY2g7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmICghYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgIHZhciBpdGVyYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA+PSBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2hTZXJpZXMgPSBhc3luYy5lYWNoU2VyaWVzO1xuXG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZm4gPSBfZWFjaExpbWl0KGxpbWl0KTtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgW2FyciwgaXRlcmF0b3IsIGNhbGxiYWNrXSk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPSBhc3luYy5lYWNoTGltaXQ7XG5cbiAgICB2YXIgX2VhY2hMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBpZiAoIWFyci5sZW5ndGggfHwgbGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmIHN0YXJ0ZWQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihhcnJbc3RhcnRlZCAtIDFdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBkb1BhcmFsbGVsID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZG9QYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24obGltaXQsIGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW19lYWNoTGltaXQobGltaXQpXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvU2VyaWVzID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hTZXJpZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuXG4gICAgdmFyIF9hc3luY01hcCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW3guaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX21hcExpbWl0KGxpbWl0KShhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHZhciBfbWFwTGltaXQgPSBmdW5jdGlvbihsaW1pdCkge1xuICAgICAgICByZXR1cm4gZG9QYXJhbGxlbExpbWl0KGxpbWl0LCBfYXN5bmNNYXApO1xuICAgIH07XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gaW5qZWN0IGFsaWFzXG4gICAgYXN5bmMuaW5qZWN0ID0gYXN5bmMucmVkdWNlO1xuICAgIC8vIGZvbGRsIGFsaWFzXG4gICAgYXN5bmMuZm9sZGwgPSBhc3luYy5yZWR1Y2U7XG5cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIC8vIGZvbGRyIGFsaWFzXG4gICAgYXN5bmMuZm9sZHIgPSBhc3luYy5yZWR1Y2VSaWdodDtcblxuICAgIHZhciBfZmlsdGVyID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZmlsdGVyID0gZG9QYXJhbGxlbChfZmlsdGVyKTtcbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcbiAgICAvLyBzZWxlY3QgYWxpYXNcbiAgICBhc3luYy5zZWxlY3QgPSBhc3luYy5maWx0ZXI7XG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID0gYXN5bmMuZmlsdGVyU2VyaWVzO1xuXG4gICAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIHZhciBfZGV0ZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5kZXRlY3QgPSBkb1BhcmFsbGVsKF9kZXRlY3QpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IGRvU2VyaWVzKF9kZXRlY3QpO1xuXG4gICAgYXN5bmMuc29tZSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGFueSBhbGlhc1xuICAgIGFzeW5jLmFueSA9IGFzeW5jLnNvbWU7XG5cbiAgICBhc3luYy5ldmVyeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbGwgYWxpYXNcbiAgICBhc3luYy5hbGwgPSBhc3luYy5ldmVyeTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChmbiksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aFxuICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB2YXIgYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGZuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0YXNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tXG4gICAgICAgICAgICBfZWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudCBmaW5hbCBjYWxsYmFjayBmcm9tIGNhbGxpbmcgaXRzZWxmIGlmIGl0IGVycm9yc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICB0aGVDYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2VhY2goa2V5cywgZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gX2lzQXJyYXkodGFza3Nba10pID8gdGFza3Nba106IFt0YXNrc1trXV07XG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2FmZVJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgX2VhY2goX2tleXMocmVzdWx0cyksIGZ1bmN0aW9uKHJrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW3JrZXldID0gcmVzdWx0c1tya2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3Agc3Vic2VxdWVudCBlcnJvcnMgaGl0dGluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIE1hdGguYWJzKHRhc2subGVuZ3RoIC0gMSkpIHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuICAgICAgICAvLyBVc2UgZGVmYXVsdHMgaWYgdGltZXMgbm90IHBhc3NlZFxuICAgICAgICBpZiAodHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgICAgICB0aW1lcyA9IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRpbWVzIGlzIGEgbnVtYmVyXG4gICAgICAgIHRpbWVzID0gcGFyc2VJbnQodGltZXMsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICB2YXIgd3JhcHBlZFRhc2sgPSBmdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICB2YXIgcmV0cnlBdHRlbXB0ID0gZnVuY3Rpb24odGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2hpbGUgKHRpbWVzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQodGFzaywgISh0aW1lcy09MSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IGNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQsIHJ1biB0aGlzIGFzIGEgY29udHJvbGwgZmxvd1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2tcbiAgICB9O1xuXG4gICAgYXN5bmMud2F0ZXJmYWxsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIV9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd3JhcEl0ZXJhdG9yID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2god3JhcEl0ZXJhdG9yKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gZnVuY3Rpb24oZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKF9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgZWFjaGZuLm1hcCh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgZWFjaGZuLmVhY2goX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBhc3luYy5tYXAsIGVhY2g6IGFzeW5jLmVhY2ggfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKHRhc2tzLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBfbWFwTGltaXQobGltaXQpLCBlYWNoOiBfZWFjaExpbWl0KGxpbWl0KSB9LCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGFzeW5jLm1hcFNlcmllcyh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhfa2V5cyh0YXNrcyksIGZ1bmN0aW9uIChrLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRhc2tzW2tdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIHZhciBtYWtlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbWFrZUNhbGxiYWNrKDApO1xuICAgIH07XG5cbiAgICBhc3luYy5hcHBseSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBfY29uY2F0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNiKSB7XG4gICAgICAgICAgICBmbih4LCBmdW5jdGlvbiAoZXJyLCB5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMud2hpbHN0KHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICh0ZXN0LmFwcGx5KG51bGwsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0ZXN0KCkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3luYy51bnRpbCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvVW50aWwgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICghdGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvVW50aWwoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICBxLnRhc2tzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbnVsbCxcbiAgICAgICAgICAgIGVtcHR5OiBudWxsLFxuICAgICAgICAgICAgZHJhaW46IG51bGwsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcS5kcmFpbiA9IG51bGw7XG4gICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghcS5wYXVzZWQgJiYgd29ya2VycyA8IHEuY29uY3VycmVuY3kgJiYgcS50YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBxLnRhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLmVtcHR5ICYmIHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4gJiYgcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyKHRhc2suZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHEuY29uY3VycmVuY3k7IHcrKykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICBlbmQgPSBzZXF1ZW5jZS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciBtaWQgPSBiZWcgKyAoKGVuZCAtIGJlZyArIDEpID4+PiAxKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKF9iaW5hcnlTZWFyY2gocS50YXNrcywgaXRlbSwgX2NvbXBhcmVUYXNrcykgKyAxLCAwLCBpdGVtKTtcblxuICAgICAgICAgICAgICBpZiAocS5zYXR1cmF0ZWQgJiYgcS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvblxuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5jYXJnbyA9IGZ1bmN0aW9uICh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHdvcmtpbmcgICAgID0gZmFsc2UsXG4gICAgICAgICAgICB0YXNrcyAgICAgICA9IFtdO1xuXG4gICAgICAgIHZhciBjYXJnbyA9IHtcbiAgICAgICAgICAgIHRhc2tzOiB0YXNrcyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgZHJhaW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX2VhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXJnby5kcmFpbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXJnby5zYXR1cmF0ZWQgJiYgdGFza3MubGVuZ3RoID09PSBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnby5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShjYXJnby5wcm9jZXNzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICAgICAgICAgIGlmICh3b3JraW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZihjYXJnby5kcmFpbiAmJiAhY2FyZ28uZHJhaW5lZCkgY2FyZ28uZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdHMgPSB0eXBlb2YgcGF5bG9hZCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRhc2tzLnNwbGljZSgwLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza3Muc3BsaWNlKDAsIHRhc2tzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZHMgPSBfbWFwKHRzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFzay5kYXRhO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoY2FyZ28uZW1wdHkpIGNhcmdvLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgd29ya2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2VyKGRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgX2VhY2godHMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNhcmdvO1xuICAgIH07XG5cbiAgICB2YXIgX2NvbnNvbGVfZm4gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy50aW1lcyA9IGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb3VudGVyID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY291bnRlci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luYy5tYXAoY291bnRlciwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwU2VyaWVzKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGF0LCBbZXJyXS5jb25jYXQocmVzdWx0cykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICByZXR1cm4gYXN5bmMuc2VxLmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIHZhciBfYXBwbHlFYWNoID0gZnVuY3Rpb24gKGVhY2hmbiwgZm5zIC8qYXJncy4uLiovKSB7XG4gICAgICAgIHZhciBnbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgZnVuY3Rpb24gKGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5hcHBseUVhY2ggPSBkb1BhcmFsbGVsKF9hcHBseUVhY2gpO1xuICAgIGFzeW5jLmFwcGx5RWFjaFNlcmllcyA9IGRvU2VyaWVzKF9hcHBseUVhY2gpO1xuXG4gICAgYXN5bmMuZm9yZXZlciA9IGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xuXG4gICAgLy8gTm9kZS5qc1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwidmFyIGFzeW5jICAgICAgID0gcmVxdWlyZSgnYXN5bmMnKSxcbiAgICB1cmxQYXJzZXIgICA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIFJlc291cmNlICAgID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBtdWx0aXBsZSByZXNvdXJjZXMgdG8gbG9hZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIGNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvZ3Jlc3MgcGVyY2VudCBvZiB0aGUgbG9hZGVyIGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogTG9hZGluZyBzdGF0ZSBvZiB0aGUgbG9hZGVyLCB0cnVlIGlmIGl0IGlzIGN1cnJlbnRseSBsb2FkaW5nIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0b3RhbCBwcm9ncmVzcyB0aGF0IGEgc2luZ2xlIHJlc291cmNlIHJlcHJlc2VudHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWlkZGxld2FyZSB0byBydW4gYmVmb3JlIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGFmdGVyIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9sb2FkUmVzb3VyY2VgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRMb2FkUmVzb3VyY2UgPSB0aGlzLl9sb2FkUmVzb3VyY2UuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uTG9hZGAgZnVuY3Rpb24gYm91bmQgd2l0aCB0aGlzIG9iamVjdCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uTG9hZCA9IHRoaXMuX29uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlIGJ1ZmZlciB0aGF0IGZpbGxzIHVudGlsIGBsb2FkYCBpcyBjYWxsZWQgdG8gc3RhcnQgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlW119XG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyID0gW107XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHRyYWNrIGxvYWQgY29tcGxldGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb3VyY2VzIHdhaXRpbmcgdG8gYmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX3F1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fYm91bmRMb2FkUmVzb3VyY2UsIGNvbmN1cnJlbmN5KTtcblxuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGlzIGxvYWRlciBrZXllZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgUmVzb3VyY2U+fVxuICAgICAqL1xuICAgIHRoaXMucmVzb3VyY2VzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCBvciBlcnJvcmVkIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgb25jZSBwZXIgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbG9hZGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdGFydFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHF1ZXVlZCByZXNvdXJjZXMgYWxsIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY29tcGxldGVcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuLyoqXG4gKiBBZGRzIGEgcmVzb3VyY2UgKG9yIG11bHRpcGxlIHJlc291cmNlcykgdG8gdGhlIGxvYWRlciBxdWV1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGEgd2lkZSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwYXJhbWV0ZXJzLiBUaGUgb25seSB0aGluZyB0aGF0IGlzIGFsd2F5c1xuICogcmVxdWlyZWQgdGhlIHVybCB0byBsb2FkLiBBbGwgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6XG4gKlxuICogYGBganNcbiAqIGxvYWRlclxuICogICAgIC8vIG5vcm1hbCBwYXJhbSBzeW50YXhcbiAqICAgICAuYWRkKCdrZXknLCAnaHR0cDovLy4uLicsIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJylcbiAqXG4gKiAgICAgLy8gb2JqZWN0IHN5bnRheFxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MicsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIG5hbWU6ICdrZXkzJyxcbiAqICAgICAgICAgdXJsOiAnaHR0cDovLy4uLidcbiAqICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge31cbiAqICAgICB9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwczovLy4uLicsXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9LFxuICogICAgICAgICBjcm9zc09yaWdpbjogdHJ1ZVxuICogICAgIH0pXG4gKlxuICogICAgIC8vIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJscyBvciBib3RoXG4gKiAgICAgLmFkZChbXG4gKiAgICAgICAgIHsgbmFtZTogJ2tleTQnLCB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgeyB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgJ2h0dHA6Ly8uLi4nXG4gKiAgICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAYWxpYXMgZW5xdWV1ZVxuICogQHBhcmFtIFtuYW1lXSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZCwgaWYgbm90IHBhc3NlZCB0aGUgdXJsIGlzIHVzZWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIHJlbGF0aXZlIHRvIHRoZSBiYXNlVXJsIG9mIHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcGFyYW0gW29wdGlvbnMuY3Jvc3NPcmlnaW5dIHtib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5YSFJfTE9BRF9UWVBFfSBIb3cgc2hvdWxkIHRoaXMgcmVzb3VyY2UgYmUgbG9hZGVkP1xuICogQHBhcmFtIFtvcHRpb25zLnhoclR5cGU9UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVF0ge1Jlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFfSBIb3cgc2hvdWxkIHRoZSBkYXRhIGJlaW5nXG4gKiAgICAgIGxvYWRlZCBiZSBpbnRlcnByZXRlZCB3aGVuIHVzaW5nIFhIUj9cbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMgc3BlY2lmaWMgcmVzb3VyY2UgY29tcGxldGVzIGxvYWRpbmcuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWRkID0gTG9hZGVyLnByb3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgb3B0aW9ucywgY2IpIHtcbiAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciB1cmxzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChuYW1lW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGlmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW5zdGVhZCBvZiBwYXJhbXNcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNiID0gdXJsIHx8IG5hbWUuY2FsbGJhY2sgfHwgbmFtZS5vbkNvbXBsZXRlO1xuICAgICAgICBvcHRpb25zID0gbmFtZTtcbiAgICAgICAgdXJsID0gbmFtZS51cmw7XG4gICAgICAgIG5hbWUgPSBuYW1lLm5hbWUgfHwgbmFtZS5rZXkgfHwgbmFtZS51cmw7XG4gICAgfVxuXG4gICAgLy8gY2FzZSB3aGVyZSBubyBuYW1lIGlzIHBhc3NlZCBzaGlmdCBhbGwgYXJncyBvdmVyIGJ5IG9uZS5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdXJsO1xuICAgICAgICB1cmwgPSBuYW1lO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IHdlIHNoaWZ0ZWQgbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9wZXIgdXJsLlxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVybCBwYXNzZWQgdG8gYWRkIHJlc291cmNlIHRvIGxvYWRlci4nKTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zIGFyZSBvcHRpb25hbCBzbyBwZW9wbGUgbWlnaHQgcGFzcyBhIGZ1bmN0aW9uIGFuZCBubyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW25hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzb3VyY2Ugd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBleGlzdHMuJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJhc2UgdXJsIGlmIHRoaXMgaXNuJ3QgYW4gYWJzb2x1dGUgdXJsXG4gICAgdXJsID0gdGhpcy5faGFuZGxlQmFzZVVybCh1cmwpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBzdG9yZSB0aGUgcmVzb3VyY2VcbiAgICB0aGlzLnJlc291cmNlc1tuYW1lXSA9IG5ldyBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlc291cmNlc1tuYW1lXS5vbmNlKCdhZnRlck1pZGRsZXdhcmUnLCBjYik7XG4gICAgfVxuXG4gICAgdGhpcy5fbnVtVG9Mb2FkKys7XG5cbiAgICAvLyBpZiBhbHJlYWR5IGxvYWRpbmcgYWRkIGl0IHRvIHRoZSB3b3JrZXIgcXVldWVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9ICgxMDAgLSB0aGlzLnByb2dyZXNzKSAvICh0aGlzLl9xdWV1ZS5sZW5ndGgoKSArIHRoaXMuX3F1ZXVlLnJ1bm5pbmcoKSk7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBidWZmZXIgaXQgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlIGxhdGVyXG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDEwMCAvIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5Mb2FkZXIucHJvdG90eXBlLl9oYW5kbGVCYXNlVXJsID0gZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBwYXJzZWRVcmwgPSB1cmxQYXJzZXIucGFyc2UodXJsKTtcblxuICAgIC8vIGFic29sdXRlIHVybCwganVzdCB1c2UgaXQgYXMgaXMuXG4gICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCB8fCBwYXJzZWRVcmwucGF0aG5hbWUuaW5kZXhPZignLy8nKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIC8vIGlmIGJhc2VVcmwgZG9lc24ndCBlbmQgaW4gc2xhc2ggYW5kIHVybCBkb2Vzbid0IHN0YXJ0IHdpdGggc2xhc2gsIHRoZW4gYWRkIGEgc2xhc2ggaW5iZXR3ZWVuXG4gICAgaWYgKFxuICAgICAgICB0aGlzLmJhc2VVcmwubGVuZ3RoICYmXG4gICAgICAgIHRoaXMuYmFzZVVybC5sYXN0SW5kZXhPZignLycpICE9PSB0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSAmJlxuICAgICAgICB1cmwuY2hhckF0KDApICE9PSAnLydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybCArICcvJyArIHVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmJlZm9yZSogdGhlXG4gKiByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKlxuICogQGFsaWFzIHByZVxuICogQHBhcmFtIG1pZGRsZXdhcmUge2Z1bmN0aW9ufSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5iZWZvcmUgPSBMb2FkZXIucHJvdG90eXBlLnByZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB1cCBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gdGhhdCB3aWxsIHJ1biAqYWZ0ZXIqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyB1c2VcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWZ0ZXIgPSBMb2FkZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZS5wdXNoKGZuKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHF1ZXVlIG9mIHRoZSBsb2FkZXIgdG8gcHJlcGFyZSBmb3IgYSBuZXcgbG9hZC5cbiAqXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gdGhpcy5iYXNlVXJsID0gYmFzZVVybCB8fCAnJztcblxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9ncmVzc0NodW5rID0gMDtcblxuICAgIC8vIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUubGVuZ3RoID0gMDtcbiAgICAvLyB0aGlzLl9hZnRlck1pZGRsZXdhcmUubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fbnVtVG9Mb2FkID0gMDtcblxuICAgIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgICB0aGlzLl9xdWV1ZS5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBTdGFydHMgbG9hZGluZyB0aGUgcXVldWVkIHJlc291cmNlcy5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgY29tcGxldGVgIGV2ZW50LlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAvLyByZWdpc3RlciBjb21wbGV0ZSBjYWxsYmFjayBpZiB0aGV5IHBhc3Mgb25lXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBxdWV1ZSBoYXMgYWxyZWFkeSBzdGFydGVkIHdlIGFyZSBkb25lIGhlcmVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBub3RpZnkgb2Ygc3RhcnRcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBzdGFydCB0aGUgaW50ZXJuYWwgcXVldWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMuX2J1ZmZlcltpXSk7XG4gICAgfVxuXG4gICAgLy8gZW1wdHkgdGhlIGJ1ZmZlclxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIExvYWRzIGEgc2luZ2xlIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc291cmNlID0gZnVuY3Rpb24gKHJlc291cmNlLCBkZXF1ZXVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmVzb3VyY2UuX2RlcXVldWUgPSBkZXF1ZXVlO1xuXG4gICAgdGhpcy5fcnVuTWlkZGxld2FyZShyZXNvdXJjZSwgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXNvdXJjZS5vbigncHJvZ3Jlc3MnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAncHJvZ3Jlc3MnKSk7XG5cbiAgICAgICAgcmVzb3VyY2UubG9hZChzZWxmLl9ib3VuZE9uTG9hZCk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbmNlIGVhY2ggcmVzb3VyY2UgaGFzIGxvYWRlZC5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX29uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMsIHRoaXMucmVzb3VyY2VzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGVhY2ggdGltZSBhIHJlc291cmNlcyBpcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAZmlyZXMgZXJyb3JcbiAqIEBmaXJlcyBsb2FkXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICB0aGlzLnByb2dyZXNzICs9IHRoaXMuX3Byb2dyZXNzQ2h1bms7XG5cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgcmVzb3VyY2UpO1xuXG4gICAgLy8gcnVuIG1pZGRsZXdhcmUsIHRoaXMgKm11c3QqIGhhcHBlbiBiZWZvcmUgZGVxdWV1ZSBzbyBzdWItYXNzZXRzIGdldCBhZGRlZCBwcm9wZXJseVxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2FmdGVyTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvdXJjZS5lbWl0KCdhZnRlck1pZGRsZXdhcmUnLCByZXNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5fbnVtVG9Mb2FkLS07XG5cbiAgICAgICAgLy8gZG8gY29tcGxldGlvbiBjaGVja1xuICAgICAgICBpZiAodGhpcy5fbnVtVG9Mb2FkID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgdGhpcy5fb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzb3VyY2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCByZXNvdXJjZS5lcnJvciwgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkJywgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG5cblxuICAgIC8vIHJlbW92ZSB0aGlzIHJlc291cmNlIGZyb20gdGhlIGFzeW5jIHF1ZXVlXG4gICAgcmVzb3VyY2UuX2RlcXVldWUoKTtcbn07XG5cbi8qKlxuICogUnVuIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9uIGEgcmVzb3VyY2UuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fcnVuTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZm5zLCBjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGFzeW5jLmVhY2hTZXJpZXMoZm5zLCBmdW5jdGlvbiAoZm4sIG5leHQpIHtcbiAgICAgICAgZm4uY2FsbChzZWxmLCByZXNvdXJjZSwgbmV4dCk7XG4gICAgfSwgY2IuYmluZCh0aGlzLCByZXNvdXJjZSkpO1xufTtcblxuTG9hZGVyLkxPQURfVFlQRSA9IFJlc291cmNlLkxPQURfVFlQRTtcbkxvYWRlci5YSFJfUkVBRFlfU1RBVEUgPSBSZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEU7XG5Mb2FkZXIuWEhSX1JFU1BPTlNFX1RZUEUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRTtcbiIsInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgX3VybCA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIC8vIHRlc3RzIGlzIENPUlMgaXMgc3VwcG9ydGVkIGluIFhIUiwgaWYgbm90IHdlIG5lZWQgdG8gdXNlIFhEUlxuICAgIHVzZVhkciA9ICEhKHdpbmRvdy5YRG9tYWluUmVxdWVzdCAmJiAhKCd3aXRoQ3JlZGVudGlhbHMnIGluIChuZXcgWE1MSHR0cFJlcXVlc3QoKSkpKSxcbiAgICB0ZW1wQW5jaG9yID0gbnVsbDtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRlZCBieVxuICogYSBzaW5nbGUgVVJMLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIG5hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd8c3RyaW5nW119IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIGZvciBhdWRpby92aWRlbyBsb2FkcyB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7c3RyaW5nfGJvb2xlYW59IElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IERlZmF1bHQgaXMgdG8gZGV0ZXJtaW5lIGF1dG9tYXRpY2FsbHkuXG4gKiBAcGFyYW0gW29wdGlvbnMubG9hZFR5cGU9UmVzb3VyY2UuTE9BRF9UWVBFLlhIUl0ge1Jlc291cmNlLkxPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW29wdGlvbnMubWV0YWRhdGFdIHtvYmplY3R9IEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmUuXG4gKi9cbmZ1bmN0aW9uIFJlc291cmNlKG5hbWUsIHVybCwgb3B0aW9ucykge1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBuYW1lIGFuZCB1cmwgYXJlIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgYSByZXNvdXJjZS4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdXJsIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgdXJsIGlzIGEgZGF0YSB1cmwuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNEYXRhVXJsID0gdGhpcy51cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnl9XG4gICAgICovXG4gICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jcm9zc09yaWdpbiA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnYW5vbnltb3VzJyA6IG9wdGlvbnMuY3Jvc3NPcmlnaW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIG9mIGxvYWRpbmcgdG8gdXNlIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2UuTE9BRF9UWVBFfVxuICAgICAqL1xuICAgIHRoaXMubG9hZFR5cGUgPSBvcHRpb25zLmxvYWRUeXBlIHx8IHRoaXMuX2RldGVybWluZUxvYWRUeXBlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSB1c2VkIHRvIGxvYWQgdGhlIHJlc291cmNlIHZpYSBYSFIuIElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy54aHJUeXBlID0gb3B0aW9ucy54aHJUeXBlO1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgaW5mbyBmb3IgbWlkZGxld2FyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgd2hpbGUgbG9hZGluZyAoaWYgYW55KS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Vycm9yfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFhIUiBvYmplY3QgdGhhdCB3YXMgdXNlZCB0byBsb2FkIHRoaXMgcmVzb3VyY2UuIFRoaXMgaXMgb25seSBzZXRcbiAgICAgKiB3aGVuIGBsb2FkVHlwZWAgaXMgYFJlc291cmNlLkxPQURfVFlQRS5YSFJgLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7WE1MSHR0cFJlcXVlc3R9XG4gICAgICovXG4gICAgdGhpcy54aHIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBqc29uLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0pzb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgeG1sLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1htbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhbiBpbWFnZSB0YWcuIE9ubHkgdmFsaWQgYWZ0ZXIgdGhlIHJlc291cmNlXG4gICAgICogaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gYXVkaW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0F1ZGlvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGEgdmlkZW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1ZpZGVvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGRlcXVldWVgIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBhIHN0b3JhZ2UgcGxhY2UgZm9yIHRoZSBhc3luYyBxdWV1ZSBkZXF1ZXVlIG1ldGhvZFxuICAgICAqIHVzZWQgcHJpdmF0ZWx5IGJ5IHRoZSBsb2FkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2RlcXVldWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBjb21wbGV0ZWAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kQ29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkVycm9yYCBmdW5jdGlvbiBib3VuZCB0byB0aGlzIHJlc291cmNlJ3MgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25Qcm9ncmVzc2AgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyA9IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcblxuICAgIC8vIHhociBjYWxsYmFja3NcbiAgICB0aGlzLl9ib3VuZFhock9uRXJyb3IgPSB0aGlzLl94aHJPbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYaHJPbkFib3J0ID0gdGhpcy5feGhyT25BYm9ydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25Mb2FkID0gdGhpcy5feGhyT25Mb2FkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYZHJPblRpbWVvdXQgPSB0aGlzLl94ZHJPblRpbWVvdXQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcmVzb3VyY2UgYmVpbmdzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGVhY2ggdGltZSBwcm9ncmVzcyBvZiB0aGlzIHJlc291cmNlIGxvYWQgdXBkYXRlcy5cbiAgICAgKiBOb3QgYWxsIHJlc291cmNlcyB0eXBlcyBhbmQgbG9hZGVyIHN5c3RlbXMgY2FuIHN1cHBvcnQgdGhpcyBldmVudFxuICAgICAqIHNvIHNvbWV0aW1lcyBpdCBtYXkgbm90IGJlIGF2YWlsYWJsZS4gSWYgdGhlIHJlc291cmNlXG4gICAgICogaXMgYmVpbmcgbG9hZGVkIG9uIGEgbW9kZXJuIGJyb3dzZXIsIHVzaW5nIFhIUiwgYW5kIHRoZSByZW1vdGUgc2VydmVyXG4gICAgICogcHJvcGVybHkgc2V0cyBDb250ZW50LUxlbmd0aCBoZWFkZXJzLCB0aGVuIHRoaXMgd2lsbCBiZSBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcHJvZ3Jlc3NcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgdGhpcyByZXNvdXJjZSBoYXMgbG9hZGVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaXQgd2lsbFxuICAgICAqIGJlIGluIHRoZSBgZXJyb3JgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xufVxuXG5SZXNvdXJjZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVzb3VyY2U7XG5tb2R1bGUuZXhwb3J0cyA9IFJlc291cmNlO1xuXG4vKipcbiAqIE1hcmtzIHRoZSByZXNvdXJjZSBhcyBjb21wbGV0ZS5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgaW4gYSB3cmFwcGVyIG9yIHNvbWV0aGluZy4uLmdyb3NzLi4uLlxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICAgIGlmICh0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvcik7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIub25lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25wcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbmxvYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBLaWNrcyBvZmYgbG9hZGluZyBvZiB0aGlzIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBzdGFydFxuICogQHBhcmFtIFtjYWxsYmFja10ge2Z1bmN0aW9ufSBPcHRpb25hbCBjYWxsYmFjayB0byBjYWxsIG9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBpZiBhIGNhbGxiYWNrIGlzIHNldCwgbGlzdGVuIGZvciBjb21wbGV0ZSBldmVudFxuICAgIGlmIChjYikge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4gPT09IGZhbHNlIHx8IHR5cGVvZiB0aGlzLmNyb3NzT3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdGhpcy5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4odGhpcy51cmwpO1xuICAgIH1cblxuICAgIHN3aXRjaCh0aGlzLmxvYWRUeXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEltYWdlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5BVURJTzpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuVklERU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlhIUjpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh1c2VYZHIgJiYgdGhpcy5jcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYZHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYaHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gSW1hZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuc3JjID0gdGhpcy51cmw7XG5cbiAgICB0aGlzLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEhUTUxBdWRpb0VsZW1lbnQgb3IgSFRNTFZpZGVvRWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJyAmJiB0eXBlb2YgQXVkaW8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBBdWRpbygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgJyArIHR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBDb2Nvb25KUyBDYW52YXMrIHJ1bnRpbWUsIGxhY2tzIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zcmMgPSBBcnJheS5pc0FycmF5KHRoaXMudXJsKSA/IHRoaXMudXJsWzBdIDogdGhpcy51cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51cmwubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWydpcycgKyB0eXBlWzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKV0gPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuXG4gICAgdGhpcy5kYXRhLmxvYWQoKTtcbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gWE1MSHR0cFJlcXVlc3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGhyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIHNldCB0aGUgcmVxdWVzdCB0eXBlIGFuZCB1cmxcbiAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gbG9hZCBqc29uIGFzIHRleHQgYW5kIHBhcnNlIGl0IG91cnNlbHZlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHNvbWUgYnJvd3NlcnNcbiAgICAvLyAqY291Z2gqIHNhZmFyaSAqY291Z2gqIGNhbid0IGRlYWwgd2l0aCBpdC5cbiAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OIHx8IHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gdGhpcy54aHJUeXBlO1xuICAgIH1cblxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvciwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQsIGZhbHNlKTtcblxuICAgIHhoci5zZW5kKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhEb21haW5SZXF1ZXN0LiBUaGlzIGlzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHN1cHBvcnQgSUU5IChncm9zcykuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGRyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGRyID0gdGhpcy54aHIgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcblxuICAgIC8vIFhEb21haW5SZXF1ZXN0IGhhcyBhIGZldyBxdWlya3MuIE9jY2FzaW9uYWxseSBpdCB3aWxsIGFib3J0IHJlcXVlc3RzXG4gICAgLy8gQSB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBtYWtlIHN1cmUgQUxMIGNhbGxiYWNrcyBhcmUgc2V0IGV2ZW4gaWYgbm90IHVzZWRcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTc4Njk2Ni94ZG9tYWlucmVxdWVzdC1hYm9ydHMtcG9zdC1vbi1pZS05XG4gICAgeGRyLnRpbWVvdXQgPSA1MDAwO1xuXG4gICAgeGRyLm9uZXJyb3IgPSB0aGlzLl9ib3VuZFhock9uRXJyb3I7XG4gICAgeGRyLm9udGltZW91dCA9IHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0O1xuICAgIHhkci5vbnByb2dyZXNzID0gdGhpcy5fYm91bmRPblByb2dyZXNzO1xuICAgIHhkci5vbmxvYWQgPSB0aGlzLl9ib3VuZFhock9uTG9hZDtcblxuICAgIHhkci5vcGVuKCdHRVQnLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyAgTm90ZTogVGhlIHhkci5zZW5kKCkgY2FsbCBpcyB3cmFwcGVkIGluIGEgdGltZW91dCB0byBwcmV2ZW50IGFuIGlzc3VlIHdpdGggdGhlIGludGVyZmFjZSB3aGVyZSBzb21lIHJlcXVlc3RzIGFyZSBsb3N0XG4gICAgLy8gIGlmIG11bHRpcGxlIFhEb21haW5SZXF1ZXN0cyBhcmUgYmVpbmcgc2VudCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIC8vIFNvbWUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2lzc3Vlcy8xMjQ4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHhkci5zZW5kKCk7XG4gICAgfSwgMCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzb3VyY2UgdXNlZCBpbiBsb2FkaW5nIHZpYSBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB0eXBlIHtzdHJpbmd9IFRoZSBlbGVtZW50IHR5cGUgKHZpZGVvIG9yIGF1ZGlvKS5cbiAqIEBwYXJhbSB1cmwge3N0cmluZ30gVGhlIHNvdXJjZSBVUkwgdG8gbG9hZCBmcm9tLlxuICogQHBhcmFtIFttaW1lXSB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIG9mIHRoZSB2aWRlb1xuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9jcmVhdGVTb3VyY2UgPSBmdW5jdGlvbiAodHlwZSwgdXJsLCBtaW1lKSB7XG4gICAgaWYgKCFtaW1lKSB7XG4gICAgICAgIG1pbWUgPSB0eXBlICsgJy8nICsgdXJsLnN1YnN0cih1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSB1cmw7XG4gICAgc291cmNlLnR5cGUgPSBtaW1lO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBlcnJvcnMgb3V0LlxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBlcnJvciBldmVudCBmcm9tIHRoZSBlbGVtZW50IHRoYXQgZW1pdHMgaXQuXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX29uRXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBlbGVtZW50IHVzaW5nICcgKyBldmVudC50YXJnZXQubm9kZU5hbWUpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBwcm9ncmVzcyBldmVudCBmaXJlcyBmb3IgeGhyL3hkci5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vblByb2dyZXNzID0gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB0aGlzLCBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYW4gZXJyb3IgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEVycm9yRXZlbnR8RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgcmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgZmFpbGVkLiAnICtcbiAgICAgICAgJ1N0YXR1czogJyArIHRoaXMueGhyLnN0YXR1cyArICcsIHRleHQ6IFwiJyArIHRoaXMueGhyLnN0YXR1c1RleHQgKyAnXCInXG4gICAgKTtcblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGFib3J0IGV2ZW50IGZpcmVzIGZvciB4aHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEFib3J0RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB3YXMgYWJvcnRlZCBieSB0aGUgdXNlci4nKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIHRpbWVvdXQgZXZlbnQgZmlyZXMgZm9yIHhkci5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94ZHJPblRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB0aW1lZCBvdXQuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBkYXRhIHN1Y2Nlc3NmdWxseSBsb2FkcyBmcm9tIGFuIHhoci94ZHIgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0TG9hZEV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHhociA9IHRoaXMueGhyLFxuICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzICE9PSB1bmRlZmluZWQgPyB4aHIuc3RhdHVzIDogMjAwOyAvL1hEUiBoYXMgbm8gYC5zdGF0dXNgLCBhc3N1bWUgMjAwLlxuXG4gICAgLy8gc3RhdHVzIGNhbiBiZSAwIHdoZW4gdXNpbmcgdGhlIGZpbGU6Ly8gcHJvdG9jb2wsIGFsc28gY2hlY2sgaWYgYSByZXNwb25zZSB3YXMgZm91bmRcbiAgICBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDQgfHwgKHN0YXR1cyA9PT0gMCAmJiB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIC8vIGlmIHRleHQsIGp1c3QgcmV0dXJuIGl0XG4gICAgICAgIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYganNvbiwgcGFyc2UgaW50byBqc29uIG9iamVjdFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT04pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSnNvbiA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIGpzb246JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgeG1sLCBwYXJzZSBpbnRvIGFuIHhtbCBkb2N1bWVudCBvciBkaXYgZWxlbWVudFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkaXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNYbWwgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSBsb2FkZWQgeG1sOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyIHR5cGVzIGp1c3QgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdbJyArIHhoci5zdGF0dXMgKyAnXScgKyB4aHIuc3RhdHVzVGV4dCArICc6JyArIHhoci5yZXNwb25zZVVSTCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gcmVxVHlwZSh4aHIpIHtcbiAgICByZXR1cm4geGhyLnRvU3RyaW5nKCkucmVwbGFjZSgnb2JqZWN0ICcsICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGZvciB0aGlzIHJlc291cmNlIGJhc2VkIG9uIGlmIHRoZSB1cmxcbiAqIGZvciB0aGlzIHJlc291cmNlIGlzIGNyb3NzLW9yaWdpbi4gSWYgY3Jvc3NPcmlnaW4gd2FzIG1hbnVhbGx5IHNldCwgdGhpc1xuICogZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgdG8gdGVzdC5cbiAqIEBwYXJhbSBbbG9jYXRpb249d2luZG93LmxvY2F0aW9uXSB7b2JqZWN0fSBUaGUgbG9jYXRpb24gb2JqZWN0IHRvIHRlc3QgYWdhaW5zdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNyb3NzT3JpZ2luIHZhbHVlIHRvIHVzZSAob3IgZW1wdHkgc3RyaW5nIGZvciBub25lKS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVDcm9zc09yaWdpbiA9IGZ1bmN0aW9uICh1cmwsIGxvYykge1xuICAgIC8vIGRhdGE6IGFuZCBqYXZhc2NyaXB0OiB1cmxzIGFyZSBjb25zaWRlcmVkIHNhbWUtb3JpZ2luXG4gICAgaWYgKHVybC5pbmRleE9mKCdkYXRhOicpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGlzIHdpbmRvdy5sb2NhdGlvblxuICAgIGxvYyA9IGxvYyB8fCB3aW5kb3cubG9jYXRpb247XG5cbiAgICBpZiAoIXRlbXBBbmNob3IpIHtcbiAgICAgICAgdGVtcEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG5cbiAgICAvLyBsZXQgdGhlIGJyb3dzZXIgZGV0ZXJtaW5lIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSB1cmwgb2YgdGhpcyByZXNvdXJjZSBhbmQgdGhlblxuICAgIC8vIHBhcnNlIHdpdGggdGhlIG5vZGUgdXJsIGxpYiwgd2UgY2FuJ3QgdXNlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICAgIC8vIGJlY2F1c2UgdGhleSBkb24ndCB3b3JrIGluIElFOSA6KFxuICAgIHRlbXBBbmNob3IuaHJlZiA9IHVybDtcbiAgICB1cmwgPSBfdXJsLnBhcnNlKHRlbXBBbmNob3IuaHJlZik7XG5cbiAgICB2YXIgc2FtZVBvcnQgPSAoIXVybC5wb3J0ICYmIGxvYy5wb3J0ID09PSAnJykgfHwgKHVybC5wb3J0ID09PSBsb2MucG9ydCk7XG5cbiAgICAvLyBpZiBjcm9zcyBvcmlnaW5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9PSBsb2MuaG9zdG5hbWUgfHwgIXNhbWVQb3J0IHx8IHVybC5wcm90b2NvbCAhPT0gbG9jLnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiAnYW5vbnltb3VzJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlc3BvbnNlVHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZVxuICogcmVzb3VyY2UgYmVpbmcgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHJlc3BvbnNlVHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lWGhyVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX3hoclR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZUxvYWRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZXNvdXJjZS5fbG9hZFR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLkxPQURfVFlQRS5YSFI7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2dldEV4dGVuc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcy51cmwsXG4gICAgICAgIGV4dDtcblxuICAgIGlmICh0aGlzLmlzRGF0YVVybCkge1xuICAgICAgICB2YXIgc2xhc2hJbmRleCA9IHVybC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGV4dCA9IHVybC5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEsIHVybC5pbmRleE9mKCc7Jywgc2xhc2hJbmRleCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXJ5U3RhcnQgPSB1cmwuaW5kZXhPZignPycpO1xuICAgICAgICBpZiAocXVlcnlTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dDtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWltZSB0eXBlIG9mIGFuIFhIUiByZXF1ZXN0IGJhc2VkIG9uIHRoZSByZXNwb25zZVR5cGUgb2ZcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIHRvIHVzZS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRNaW1lRnJvbVhoclR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1iaW5hcnknO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vYmxvYic7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veG1sJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT046XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVDpcbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUOlxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcblxuICAgIH1cbn07XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxvYWRpbmcgYSByZXNvdXJjZSBjYW4gdXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IExPQURfVFlQRVxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5YSFIgLSBVc2VzIFhNTEh0dHBSZXF1ZXN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5JTUFHRSAtIFVzZXMgYW4gYEltYWdlYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLkFVRElPIC0gVXNlcyBhbiBgQXVkaW9gIG9iamVjdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuVklERU8gLSBVc2VzIGEgYFZpZGVvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlLkxPQURfVFlQRSA9IHtcbiAgICBYSFI6ICAgIDEsXG4gICAgSU1BR0U6ICAyLFxuICAgIEFVRElPOiAgMyxcbiAgICBWSURFTzogIDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVBRFlfU1RBVEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuVU5TRU5UIC0gb3BlbigpaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLk9QRU5FRCAtIHNlbmQoKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5IRUFERVJTX1JFQ0VJVkVEIC0gc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIGhlYWRlcnMgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5MT0FESU5HIC0gRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLkRPTkUgLSBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5SZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEUgPSB7XG4gICAgVU5TRU5UOiAwLFxuICAgIE9QRU5FRDogMSxcbiAgICBIRUFERVJTX1JFQ0VJVkVEOiAyLFxuICAgIExPQURJTkc6IDMsXG4gICAgRE9ORTogNFxufTtcblxuLyoqXG4gKiBUaGUgWEhSIHJlYWR5IHN0YXRlcywgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IFhIUl9SRVNQT05TRV9UWVBFXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVCAtIGRlZmF1bHRzIHRvIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVIgLSBBcnJheUJ1ZmZlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkJMT0IgLSBCbG9iXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQgLSBEb2N1bWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkpTT04gLSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5URVhUIC0gU3RyaW5nXG4gKi9cblJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFID0ge1xuICAgIERFRkFVTFQ6ICAgICd0ZXh0JyxcbiAgICBCVUZGRVI6ICAgICAnYXJyYXlidWZmZXInLFxuICAgIEJMT0I6ICAgICAgICdibG9iJyxcbiAgICBET0NVTUVOVDogICAnZG9jdW1lbnQnLFxuICAgIEpTT046ICAgICAgICdqc29uJyxcbiAgICBURVhUOiAgICAgICAndGV4dCdcbn07XG5cblJlc291cmNlLl9sb2FkVHlwZU1hcCA9IHtcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3BuZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZWcnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3dlYnAnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRVxufTtcblxuUmVzb3VyY2UuX3hoclR5cGVNYXAgPSB7XG4gICAgLy8geG1sXG4gICAgJ3hodG1sJzogICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bWwnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3htbCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RteCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RzeCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3N2Zyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG5cbiAgICAvLyBpbWFnZXNcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2JtcCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RnYSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcblxuICAgIC8vIGpzb25cbiAgICAnanNvbic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OLFxuXG4gICAgLy8gdGV4dFxuICAgICd0ZXh0JzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQsXG4gICAgJ3R4dCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsb2FkIHR5cGUgdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGV4dG5hbWUge3N0cmluZ30gVGhlIGV4dGVuc2lvbiB0byBzZXQgdGhlIHR5cGUgZm9yLCBlLmcuIFwicG5nXCIgb3IgXCJmbnRcIlxuICogQHBhcmFtIGxvYWRUeXBlIHtSZXNvdXJjZS5MT0FEX1RZUEV9IFRoZSBsb2FkIHR5cGUgdG8gc2V0IGl0IHRvLlxuICovXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25Mb2FkVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCBsb2FkVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5fbG9hZFR5cGVNYXAsIGV4dG5hbWUsIGxvYWRUeXBlKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSB4aHJUeXBlIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHhociB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCB4aHJUeXBlKSB7XG4gICAgc2V0RXh0TWFwKFJlc291cmNlLl94aHJUeXBlTWFwLCBleHRuYW1lLCB4aHJUeXBlKTtcbn07XG5cbmZ1bmN0aW9uIHNldEV4dE1hcChtYXAsIGV4dG5hbWUsIHZhbCkge1xuICAgIGlmIChleHRuYW1lICYmIGV4dG5hbWUuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgIGV4dG5hbWUgPSBleHRuYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dG5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hcFtleHRuYW1lXSA9IHZhbDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICAgIF9rZXlTdHI6IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIixcblxuICAgIGVuY29kZUJpbmFyeTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBcIlwiO1xuICAgICAgICB2YXIgYnl0ZWJ1ZmZlcjtcbiAgICAgICAgdmFyIGVuY29kZWRDaGFySW5kZXhlcyA9IG5ldyBBcnJheSg0KTtcbiAgICAgICAgdmFyIGlueCA9IDA7XG4gICAgICAgIHZhciBqbnggPSAwO1xuICAgICAgICB2YXIgcGFkZGluZ0J5dGVzID0gMDtcblxuICAgICAgICB3aGlsZSAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBGaWxsIGJ5dGUgYnVmZmVyIGFycmF5XG4gICAgICAgICAgICBieXRlYnVmZmVyID0gbmV3IEFycmF5KDMpO1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBieXRlYnVmZmVyLmxlbmd0aDsgam54KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGF3YXkgaGlnaC1vcmRlciBieXRlLCBhcyBkb2N1bWVudGVkIGF0OlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdCNIYW5kbGluZ19iaW5hcnlfZGF0YVxuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSBpbnB1dC5jaGFyQ29kZUF0KGlueCsrKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGVhY2ggZW5jb2RlZCBjaGFyYWN0ZXIsIDYgYml0cyBhdCBhIHRpbWVcbiAgICAgICAgICAgIC8vIGluZGV4IDE6IGZpcnN0IDYgYml0c1xuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzBdID0gYnl0ZWJ1ZmZlclswXSA+PiAyO1xuICAgICAgICAgICAgLy8gaW5kZXggMjogc2Vjb25kIDYgYml0cyAoMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAxICsgNCBtb3N0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBieXRlIDIpXG4gICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMV0gPSAoKGJ5dGVidWZmZXJbMF0gJiAweDMpIDw8IDQpIHwgKGJ5dGVidWZmZXJbMV0gPj4gNCk7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiB0aGlyZCA2IGJpdHMgKDQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMiArIDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gKChieXRlYnVmZmVyWzFdICYgMHgwZikgPDwgMikgfCAoYnl0ZWJ1ZmZlclsyXSA+PiA2KTtcbiAgICAgICAgICAgIC8vIGluZGV4IDM6IGZvcnRoIDYgYml0cyAoNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gYnl0ZWJ1ZmZlclsyXSAmIDB4M2Y7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHBhZGRpbmcgaGFwcGVuZWQsIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgIHBhZGRpbmdCeXRlcyA9IGlueCAtIChpbnB1dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFkZGluZ0J5dGVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCAyIGNoYXJhY3RlcnMgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMl0gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBsYXN0IGNoYXJhY3RlciB0byBwYWRkaW5nIGNoYXJcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vIHBhZGRpbmcgLSBwcm9jZWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vdyB3ZSB3aWxsIGdyYWIgZWFjaCBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgb3V0IG9mIG91ciBrZXlzdHJpbmdcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIG91ciBpbmRleCBhcnJheSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQgc3RyaW5nXG4gICAgICAgICAgICBmb3IgKGpueCA9IDA7IGpueCA8IGVuY29kZWRDaGFySW5kZXhlcy5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHRoaXMuX2tleVN0ci5jaGFyQXQoZW5jb2RlZENoYXJJbmRleGVzW2pueF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9Mb2FkZXInKTtcblxubW9kdWxlLmV4cG9ydHMuUmVzb3VyY2UgPSByZXF1aXJlKCcuL1Jlc291cmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzLm1pZGRsZXdhcmUgPSB7XG4gICAgY2FjaGluZzoge1xuICAgICAgICBtZW1vcnk6IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnknKVxuICAgIH0sXG4gICAgcGFyc2luZzoge1xuICAgICAgICBibG9iOiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL3BhcnNpbmcvYmxvYicpXG4gICAgfVxufTtcbiIsIi8vIGEgc2ltcGxlIGluLW1lbW9yeSBjYWNoZSBmb3IgcmVzb3VyY2VzXG52YXIgY2FjaGUgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICAvLyBpZiBjYWNoZWQsIHRoZW4gc2V0IGRhdGEgYW5kIGNvbXBsZXRlIHRoZSByZXNvdXJjZVxuICAgICAgICBpZiAoY2FjaGVbcmVzb3VyY2UudXJsXSkge1xuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IGNhY2hlW3Jlc291cmNlLnVybF07XG4gICAgICAgICAgICByZXNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIG5vdCBjYWNoZWQsIHdhaXQgZm9yIGNvbXBsZXRlIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb3VyY2Uub25jZSgnY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICBjYWNoZVt0aGlzLnVybF0gPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgnLi4vLi4vUmVzb3VyY2UnKSxcbiAgICBiNjQgPSByZXF1aXJlKCcuLi8uLi9iNjQnKTtcblxud2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblxuLy8gYSBtaWRkbGV3YXJlIGZvciB0cmFuc2Zvcm1pbmcgWEhSIGxvYWRlZCBCbG9icyBpbnRvIG1vcmUgdXNlZnVsIG9iamVjdHNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIHdhcyBhbiBYSFIgbG9hZCBvZiBhIGJsb2JcbiAgICAgICAgaWYgKHJlc291cmNlLnhociAmJiByZXNvdXJjZS54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBibG9iIHN1cHBvcnQgd2UgcHJvYmFibHkgZ290IGEgYmluYXJ5IHN0cmluZyBiYWNrXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5CbG9iIHx8IHR5cGVvZiByZXNvdXJjZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVzb3VyY2UueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaW1hZ2UsIGNvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgaW50byBhIGRhdGEgdXJsXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgdHlwZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5zcmMgPSAnZGF0YTonICsgdHlwZSArICc7YmFzZTY0LCcgKyBiNjQuZW5jb2RlQmluYXJ5KHJlc291cmNlLnhoci5yZXNwb25zZVRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGltYWdlIGxvYWRzIGFuZCB0aGVuIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5vbmxvYWQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY29udGVudCB0eXBlIHNheXMgdGhpcyBpcyBhbiBpbWFnZSwgdGhlbiB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBibG9iIGludG8gYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvdXJjZS5kYXRhLnR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlc291cmNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuYmxvYiA9IHJlc291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gc3JjO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuaXNJbWFnZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBubyBsb25nZXIgdXNlZCBibG9iIGFmdGVyIHRoZSBpbWFnZSBsb2Fkc1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJwaXhpLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMC4xMC1kZXZcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlBpeGkuanMgaXMgYSBmYXN0IGxpZ2h0d2VpZ2h0IDJEIGxpYnJhcnkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGRldmljZXMuXCIsXG4gIFwiYXV0aG9yXCI6IFwiTWF0IEdyb3Zlc1wiLFxuICBcImNvbnRyaWJ1dG9yc1wiOiBbXG4gICAgXCJDaGFkIEVuZ2xlciA8Y2hhZEBwYW50aGVyZGV2LmNvbT5cIixcbiAgICBcIlJpY2hhcmQgRGF2ZXkgPHJkYXZleUBnbWFpbC5jb20+XCJcbiAgXSxcbiAgXCJtYWluXCI6IFwiLi9zcmMvaW5kZXguanNcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHA6Ly9nb29kYm95ZGlnaXRhbC5jb20vXCIsXG4gIFwiYnVnc1wiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXNcIixcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiZ3VscCAmJiBndWxwIHdhdGNoXCIsXG4gICAgXCJ0ZXN0XCI6IFwiZ3VscCAmJiB0ZXN0ZW0gY2lcIixcbiAgICBcImJ1aWxkXCI6IFwiZ3VscFwiLFxuICAgIFwiZG9jc1wiOiBcImpzZG9jIC1jIC4vZ3VscC91dGlsL2pzZG9jLmNvbmYuanNvbiAtUiBSRUFETUUubWRcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpbi9cIixcbiAgICBcInNyYy9cIixcbiAgICBcIkNPTlRSSUJVVElORy5tZFwiLFxuICAgIFwiTElDRU5TRVwiLFxuICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgXCJSRUFETUUubWRcIlxuICBdLFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhc3luY1wiOiBcIl4xLjUuMFwiLFxuICAgIFwiYnJmc1wiOiBcIl4xLjQuMVwiLFxuICAgIFwiZWFyY3V0XCI6IFwiXjIuMC43XCIsXG4gICAgXCJldmVudGVtaXR0ZXIzXCI6IFwiXjEuMS4xXCIsXG4gICAgXCJnbC1tYXRyaXhcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL3RvamkvZ2wtbWF0cml4LmdpdFwiLFxuICAgIFwib2JqZWN0LWFzc2lnblwiOiBcIl40LjAuMVwiLFxuICAgIFwicGl4aS1nbC1jb3JlXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9Hb29kQm95RGlnaXRhbC9waXhpLWdsLWNvcmUuZ2l0XCIsXG4gICAgXCJyZXNvdXJjZS1sb2FkZXJcIjogXCJeMS42LjRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjExLjEuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4zLjIuMFwiLFxuICAgIFwiZGVsXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOS4wXCIsXG4gICAgXCJndWxwLWNhY2hlZFwiOiBcIl4xLjEuMFwiLFxuICAgIFwiZ3VscC1jb25jYXRcIjogXCJeMi42LjBcIixcbiAgICBcImd1bHAtZGVidWdcIjogXCJeMi4xLjBcIixcbiAgICBcImd1bHAtaGVhZGVyXCI6IFwiXjEuNy4xXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjExLjJcIixcbiAgICBcImd1bHAtbWlycm9yXCI6IFwiXjAuNC4wXCIsXG4gICAgXCJndWxwLXBsdW1iZXJcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtcmVuYW1lXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJndWxwLXNvdXJjZW1hcHNcIjogXCJeMS41LjJcIixcbiAgICBcImd1bHAtdWdsaWZ5XCI6IFwiXjEuNC4xXCIsXG4gICAgXCJndWxwLXV0aWxcIjogXCJeMy4wLjZcIixcbiAgICBcImphZ3VhcmpzLWpzZG9jXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZHNoaW1qcy9qYWd1YXJqcy1qc2RvYy5naXRcIixcbiAgICBcImpzZG9jXCI6IFwiXjMuMy4yXCIsXG4gICAgXCJqc2hpbnQtc3VtbWFyeVwiOiBcIl4wLjQuMFwiLFxuICAgIFwibWluaW1pc3RcIjogXCJeMS4yLjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMy4yXCIsXG4gICAgXCJyZXF1aXJlLWRpclwiOiBcIl4wLjMuMFwiLFxuICAgIFwicnVuLXNlcXVlbmNlXCI6IFwiXjEuMS4yXCIsXG4gICAgXCJ0ZXN0ZW1cIjogXCJeMC45LjRcIixcbiAgICBcInZpbnlsLWJ1ZmZlclwiOiBcIl4xLjAuMFwiLFxuICAgIFwidmlueWwtc291cmNlLXN0cmVhbVwiOiBcIl4xLjEuMFwiLFxuICAgIFwid2F0Y2hpZnlcIjogXCJeMy40LjBcIlxuICB9LFxuICBcImJyb3dzZXJpZnlcIjoge1xuICAgIFwidHJhbnNmb3JtXCI6IFtcbiAgICAgIFwiYnJmc1wiXG4gICAgXVxuICB9XG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLy8gYWRkIHNvbWUgZXh0cmEgdmFyaWFibGVzIHRvIHRoZSBjb250YWluZXIuLlxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpXG4pO1xuXG5cbi8qKlxuICogVGhlIEFjY2Vzc2liaWxpdHkgbWFuYWdlciByZWFjcmVhdGVzIHRoZSBhYmlsaXR5IHRvIHRhYiBhbmQgYW5kIGhhdmUgY29udGVudCByZWFkIGJ5IHNjcmVlbiByZWFkZXJzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGFzIGl0IGNhbiBwb3NzaWJseSBoZWxwIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyBhY2Nlc3MgcGl4aSBjb250ZW50LlxuICogTXVjaCBsaWtlIGludGVyYWN0aW9uIGFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBtYWRlIGFjY2Vzc2libGUuIFRoaXMgbWFuYWdlciB3aWxsIG1hcCB0aGUgZXZlbnRzIGFzIGlmIHRoZSBtb3VzZSB3YXMgYmVpbmcgdXNlZCwgbWluaW1pemluZyB0aGUgZWZmZXJvdCByZXF1aXJlZCB0byBpbXBsZW1lbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqL1xuZnVuY3Rpb24gQWNjZXNzaWJpbGl0eU1hbmFnZXIocmVuZGVyZXIpXG57XG5cdC8vIGZpcnN0IHdlIGNyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFxuICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUubGVmdCA9IDA7XG4gICAvL1xuICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuICAgXHRcbiAgIFx0LyoqXG4gICBcdCAqIFRoaXMgaXMgdGhlIGRvbSBlbGVtZW50IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gICBcdHRoaXMuZGl2ID0gZGl2O1xuXG4gICBcdC8qKlxuICAgXHQgKiBBIHNpbXBsZSBwb29sIGZvciBzdG9yaW5nIGRpdnMuXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7QXJyYXl9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuIFx0dGhpcy5wb29sID0gW107XG5cbiBcdC8qKlxuIFx0ICogVGhpcyBpcyBhIHRpY2sgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHJlbmRlcmVkLlxuIFx0ICogXG4gXHQgKiBAdHlwZSB7TnVtYmVyfVxuIFx0ICogQHByaXZhdGVcbiBcdCAqL1xuICAgXHR0aGlzLnJlbmRlcklkID0gMDtcblxuICAgXHQvKipcbiAgIFx0ICogU2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB2aXN1YWxseSBzaG93IHRoZSBkaXZzXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgIFx0ICovXG4gICBcdHRoaXMuZGVidWcgPSBmYWxzZTtcblxuICBcdC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGFjY2Vzc2liaWxpdHkgbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgIFx0LyoqXG4gICAgICogVGhlIGFycmF5IG9mIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzaWJsZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHByZSBiaW5kIHRoZSBmdW5jdGlvbnMuLlxuICAgICAqL1xuICAgXHR0aGlzLl9vbktleURvd24gPSB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKTtcbiAgIFx0dGhpcy5fb25Nb3VzZU1vdmUgPSB0aGlzLl9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogc3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFuYWdlci4gSWYgdGhlcmUgYXJlIG5vIGFjY2Vzc2libGUgb2JqZWN0cyBvciB0aGUgbW91c2UgaXMgbW92aW5nIHRoZSB3aWxsIGJlIGZhbHNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cbiAgIFx0Ly8gbGV0IGxpc3RlbiBmb3IgdGFiLi4gb25jZSBwcmVzc2VkIHdlIGNhbiBmaXJlIHVwIGFuZCBzaG93IHRoZSBhY2Nlc3NpYmlsaXR5IGxheWVyXG4gICBcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG59XG5cblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xuXG4vKipcbiAqIEFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBzaG93bi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgcHJlc2VzIHRoZSB0YWIga2V5XG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHRydWUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub24oJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cblx0dGhpcy5yZW5kZXJlci52aWV3LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5kaXYpO1x0XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIGhpZGRlbi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgbW92ZXMgdGhlIG1vdXNlXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYoIXRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9mZigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlKTtcblxuXHR0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcblxufTtcblxuLyoqXG4gKiBUaGlzIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aWxsIHJ1biB0aHJvdWdodCBoZSBzY2VuZSBncmFwaCBhbmQgYWRkIGFueSBuZXcgYWNjZXNzaWJsZSBvYmplY3RzIHRvIHRoZSBET00gbGF5ZXIuXG4gKiBAcGFyYW0gZWxlbWVudCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgRGlzcGxheU9iamVjdCB0byBjaGVjay5cbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG5cdGlmKCFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZihkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGUgJiYgZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcblx0e1xuXHRcdGlmKCFkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlKVxuXHRcdHtcblx0XHRcdHRoaXMuYWRkQ2hpbGQoZGlzcGxheU9iamVjdCk7XG5cdFx0fVxuXHQgICBcdFxuXHQgICBcdGRpc3BsYXlPYmplY3QucmVuZGVySWQgPSB0aGlzLnJlbmRlcklkO1xuXHR9XG5cblx0dmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcblxuXHRmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcblx0XHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKGNoaWxkcmVuW2ldKTtcblx0fVxufTtcblxuXG4vKipcbiAqIEJlZm9yZSBlYWNoIHJlbmRlciB0aGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGRpdnMgYXJlIG1hcHBlZCBjb3JyZWN0bHkgdG8gdGhlaXIgRGlzcGxheU9iamVjdHNcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpXG57XG5cblx0Ly8gdXBkYXRlIGNoaWxkcmVuLi4uXG5cdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHModGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkKTtcblxuXHR2YXIgcmVjdCA9IHRoaXMucmVuZGVyZXIudmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0dmFyIHN4ID0gcmVjdC53aWR0aCAgLyB0aGlzLnJlbmRlcmVyLndpZHRoO1xuXHR2YXIgc3kgPSByZWN0LmhlaWdodCAvIHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuXG5cdHZhciBkaXYgPSB0aGlzLmRpdjtcblxuXHRkaXYuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICdweCc7XG5cdGRpdi5zdHlsZS50b3AgPSByZWN0LnRvcCArICdweCc7XG5cdGRpdi5zdHlsZS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggKyAncHgnO1xuXHRkaXYuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgKyAncHgnO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuXHRcdGlmKGNoaWxkLnJlbmRlcklkICE9PSB0aGlzLnJlbmRlcklkKVxuXHRcdHtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaSwgMSk7XG5cdFx0XHR0aGlzLmRpdi5yZW1vdmVDaGlsZCggY2hpbGQuX2FjY2Vzc2libGVEaXYgKTtcblx0XHRcdHRoaXMucG9vbC5wdXNoKGNoaWxkLl9hY2Nlc3NpYmxlRGl2KTtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlRGl2ID0gbnVsbDtcblxuXHRcdFx0aS0tO1xuXG5cdFx0XHRpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBtYXAgZGl2IHRvIGRpc3BsYXkuLlxuXHRcdFx0ZGl2ID0gY2hpbGQuX2FjY2Vzc2libGVEaXY7XG5cdFx0XHR2YXIgaGl0QXJlYSA9IGNoaWxkLmhpdEFyZWE7XG5cdFx0XHR2YXIgd3QgPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuXHRcdFx0aWYoY2hpbGQuaGl0QXJlYSlcblx0XHRcdHtcblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoKHd0LnR4ICsgKGhpdEFyZWEueCAqIHd0LmEpKSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKCh3dC50eSArIChoaXRBcmVhLnkgKiB3dC5kKSkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHd0LmEgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogd3QuZCAqIHN5KSArICdweCc7XG5cdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0aGl0QXJlYSA9IGNoaWxkLmdldEJvdW5kcygpO1xuXG5cdFx0XHRcdHRoaXMuY2FwSGl0QXJlYShoaXRBcmVhKTtcblxuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9IChoaXRBcmVhLnggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gIChoaXRBcmVhLnkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiBzeSkgKyAncHgnO1xuXHRcdFx0fVx0XHRcblx0XHR9XG5cdH1cblxuXHQvLyBpbmNyZW1lbnQgdGhlIHJlbmRlciBpZC4uXG5cdHRoaXMucmVuZGVySWQrKztcbn07XG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYXBIaXRBcmVhID0gZnVuY3Rpb24gKGhpdEFyZWEpXG57XG4gICAgaWYgKGhpdEFyZWEueCA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoICs9IGhpdEFyZWEueDtcbiAgICAgICAgaGl0QXJlYS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaGl0QXJlYS55IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ICs9IGhpdEFyZWEueTtcbiAgICAgICAgaGl0QXJlYS55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueCArIGhpdEFyZWEud2lkdGggPiB0aGlzLnJlbmRlcmVyLndpZHRoIClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoIC0gaGl0QXJlYS54O1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS55ICsgaGl0QXJlYS5oZWlnaHQgPiB0aGlzLnJlbmRlcmVyLmhlaWdodCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0IC0gaGl0QXJlYS55O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBBZGRzIGEgRGlzcGxheU9iamVjdCB0byB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuLy9cdHRoaXMuYWN0aXZhdGUoKTtcblx0XG5cdHZhciBkaXYgPSB0aGlzLnBvb2wucG9wKCk7XG5cblx0aWYoIWRpdilcblx0e1xuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBcblxuXHQgICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGVidWcgPyAncmdiYSgyNTUsMCwwLDAuNSknIDogJ3RyYW5zcGFyZW50Jztcblx0ICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdCAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcblx0ICAgIGRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdub25lJztcblxuXHQgICAgXG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX29uRm9jdXNPdXQuYmluZCh0aGlzKSk7XG5cdH1cblx0ICAgXHRcblxuXG5cblx0ZGl2LnRpdGxlID0gZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlVGl0bGUgfHwgJ2Rpc3BsYXlPYmplY3QgJyArIHRoaXMudGFiSW5kZXg7XG5cblx0Ly9cblx0XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUgPSB0cnVlO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ID0gZGl2O1xuXHRkaXYuZGlzcGxheU9iamVjdCA9IGRpc3BsYXlPYmplY3Q7XG5cblxuXHR0aGlzLmNoaWxkcmVuLnB1c2goZGlzcGxheU9iamVjdCk7XG5cdHRoaXMuZGl2LmFwcGVuZENoaWxkKCBkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ICk7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYudGFiSW5kZXggPSBkaXNwbGF5T2JqZWN0LnRhYkluZGV4O1xufTtcblxuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBidXR0b24gcHJlc3MgdG8gcGl4aSdzIEludGVyYWN0aW9uTWFuYWdlciAoY2xpY2spXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnY2xpY2snLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3ZlcilcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1cyA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3V0KVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzT3V0ID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uS2V5RG93biA9IGZ1bmN0aW9uKGUpXG57XG5cdGlmKGUua2V5Q29kZSAhPT0gOSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuYWN0aXZhdGUoKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmUgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZGVhY3RpdmF0ZSgpO1xufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgXG57XG5cdHRoaXMuZGl2ID0gbnVsbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblx0XHR0aGlzLmNoaWxkcmVuW2ldLmRpdiA9IG51bGw7XG5cdH1cblxuXHRcblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuXHRcdFxuXHR0aGlzLnBvb2wgPSBudWxsO1xuXHR0aGlzLmNoaWxkcmVuID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5cbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYWNjZXNzaWJsZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmFjY2Vzc2liaWxpdHkuYWNjZXNzaWJsZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgYWNjZXNzaWJsZVRhcmdldCA9IHtcbiAgICBcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGVUaXRsZTpudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICB0YWJJbmRleDowLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZUFjdGl2ZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVEaXY6ZmFsc2VcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBhY2Nlc3NpYmxlVGFyZ2V0O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgYWNjZXNzaWJpbGl0eSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYWNjZXNzaWJsZVRhcmdldDogICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpLFxuICAgIEFjY2Vzc2liaWxpdHlNYW5hZ2VyOiByZXF1aXJlKCcuL0FjY2Vzc2liaWxpdHlNYW5hZ2VyJylcbn07XG4iLCIvKipcbiAqIENvbnN0YW50IHZhbHVlcyB1c2VkIGluIHBpeGlcbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG52YXIgQ09OU1QgPSB7XG4gICAgLyoqXG4gICAgICogU3RyaW5nIG9mIHRoZSBjdXJyZW50IFBJWEkgdmVyc2lvblxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBWRVJTSU9OXG4gICAgICovXG4gICAgVkVSU0lPTjogcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQSV8yIC0gVHdvIFBpXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFBJXzI6IE1hdGguUEkgKiAyLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJBRF9UT19ERUcgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyByYWRpYW5zIHRvIGRlZ3JlZXNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUkFEX1RPX0RFRzogMTgwIC8gTWF0aC5QSSxcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBERUdfVE9fUkFEIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgZGVncmVlcyB0byByYWRpYW5zXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIERFR19UT19SQUQ6IE1hdGguUEkgLyAxODAsXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgZnJhbWVzIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gVEFSR0VUX0ZQTVM9MC4wNlxuICAgICAqL1xuICAgIFRBUkdFVF9GUE1TOiAwLjA2LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgdG8gaWRlbnRpZnkgdGhlIFJlbmRlcmVyIFR5cGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFJFTkRFUkVSX1RZUEVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuV0VCR0xcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5DQU5WQVNcbiAgICAgKi9cbiAgICBSRU5ERVJFUl9UWVBFOiB7XG4gICAgICAgIFVOS05PV046ICAgIDAsXG4gICAgICAgIFdFQkdMOiAgICAgIDEsXG4gICAgICAgIENBTlZBUzogICAgIDJcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyBibGVuZCBtb2RlcyBzdXBwb3J0ZWQgYnkgUElYSS4gSU1QT1JUQU5UIC0gVGhlIFdlYkdMIHJlbmRlcmVyIG9ubHkgc3VwcG9ydHNcbiAgICAgKiB0aGUgTk9STUFMLCBBREQsIE1VTFRJUExZIGFuZCBTQ1JFRU4gYmxlbmQgbW9kZXMuIEFueXRoaW5nIGVsc2Ugd2lsbCBzaWxlbnRseSBhY3QgbGlrZVxuICAgICAqIE5PUk1BTC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gQkxFTkRfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkFERFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5NVUxUSVBMWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQ1JFRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuT1ZFUkxBWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5EQVJLRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTElHSFRFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9ET0RHRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9CVVJOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhBUkRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU09GVF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5ESUZGRVJFTkNFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkVYQ0xVU0lPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IVUVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0FUVVJBVElPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MVU1JTk9TSVRZXG4gICAgICovXG4gICAgQkxFTkRfTU9ERVM6IHtcbiAgICAgICAgTk9STUFMOiAgICAgICAgIDAsXG4gICAgICAgIEFERDogICAgICAgICAgICAxLFxuICAgICAgICBNVUxUSVBMWTogICAgICAgMixcbiAgICAgICAgU0NSRUVOOiAgICAgICAgIDMsXG4gICAgICAgIE9WRVJMQVk6ICAgICAgICA0LFxuICAgICAgICBEQVJLRU46ICAgICAgICAgNSxcbiAgICAgICAgTElHSFRFTjogICAgICAgIDYsXG4gICAgICAgIENPTE9SX0RPREdFOiAgICA3LFxuICAgICAgICBDT0xPUl9CVVJOOiAgICAgOCxcbiAgICAgICAgSEFSRF9MSUdIVDogICAgIDksXG4gICAgICAgIFNPRlRfTElHSFQ6ICAgICAxMCxcbiAgICAgICAgRElGRkVSRU5DRTogICAgIDExLFxuICAgICAgICBFWENMVVNJT046ICAgICAgMTIsXG4gICAgICAgIEhVRTogICAgICAgICAgICAxMyxcbiAgICAgICAgU0FUVVJBVElPTjogICAgIDE0LFxuICAgICAgICBDT0xPUjogICAgICAgICAgMTUsXG4gICAgICAgIExVTUlOT1NJVFk6ICAgICAxNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIHdlYmdsIGRyYXcgbW9kZXMuIFRoZXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggR0wgZHJhd01vZGUgdG8gdXNlXG4gICAgICogdW5kZXIgY2VydGFpbiBzaXR1YXRpb25zIGFuZCByZW5kZXJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5QT0lOVFNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfTE9PUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX0ZBTlxuICAgICAqL1xuICAgIERSQVdfTU9ERVM6IHtcbiAgICAgICAgUE9JTlRTOiAgICAgICAgIDAsXG4gICAgICAgIExJTkVTOiAgICAgICAgICAxLFxuICAgICAgICBMSU5FX0xPT1A6ICAgICAgMixcbiAgICAgICAgTElORV9TVFJJUDogICAgIDMsXG4gICAgICAgIFRSSUFOR0xFUzogICAgICA0LFxuICAgICAgICBUUklBTkdMRV9TVFJJUDogNSxcbiAgICAgICAgVFJJQU5HTEVfRkFOOiAgIDZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBwaXhpLlxuICAgICAqXG4gICAgICogVGhlIERFRkFVTFQgc2NhbGUgbW9kZSBhZmZlY3RzIHRoZSBkZWZhdWx0IHNjYWxpbmcgbW9kZSBvZiBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAgKiBJdCBjYW4gYmUgcmUtYXNzaWduZWQgdG8gZWl0aGVyIExJTkVBUiBvciBORUFSRVNULCBkZXBlbmRpbmcgdXBvbiBzdWl0YWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0NBTEVfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuREVGQVVMVD1MSU5FQVJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTElORUFSIFNtb290aCBzY2FsaW5nXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLk5FQVJFU1QgUGl4ZWxhdGluZyBzY2FsaW5nXG4gICAgICovXG4gICAgU0NBTEVfTU9ERVM6IHtcbiAgICAgICAgREVGQVVMVDogICAgMCxcbiAgICAgICAgTElORUFSOiAgICAgMCxcbiAgICAgICAgTkVBUkVTVDogICAgMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZml4IHRoYXQgZGVub3RlcyBhIFVSTCBpcyBmb3IgYSByZXRpbmEgYXNzZXRcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gUkVUSU5BX1BSRUZJWFxuICAgICAqL1xuICAgIC8vZXhhbXBsZTogJ0AyeCcsXG4gICAgUkVUSU5BX1BSRUZJWDogL0AoLispeC8sXG5cbiAgICBSRVNPTFVUSU9OOjEsXG5cbiAgICBGSUxURVJfUkVTT0xVVElPTjoxLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgcmVuZGVyIG9wdGlvbnMgaWYgbm9uZSBhcmUgc3VwcGxpZWQgdG8ge0BsaW5rIFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKiBvciB7QGxpbmsgUElYSS5DYW52YXNSZW5kZXJlcn0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERFRkFVTFRfUkVOREVSX09QVElPTlNcbiAgICAgKiBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnZpZXc9bnVsbFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy50cmFuc3BhcmVudD1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hbnRpYWxpYXM9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuZm9yY2VGWEFBPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnJlc29sdXRpb249MVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmF1dG9SZXNpemU9ZmFsc2VcbiAgICAgKi9cbiAgICBERUZBVUxUX1JFTkRFUl9PUFRJT05TOiB7XG4gICAgICAgIHZpZXc6IG51bGwsXG4gICAgICAgIHJlc29sdXRpb246IDEsXG4gICAgICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgICAgIGZvcmNlRlhBQTogZmFsc2UsXG4gICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgIGNsZWFyQmVmb3JlUmVuZGVyOiB0cnVlLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgICAgICByb3VuZFBpeGVsczogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnRzIHRoYXQgaWRlbnRpZnkgc2hhcGVzLCBtYWlubHkgdG8gcHJldmVudCBgaW5zdGFuY2VvZmAgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFU1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUE9MWT0wXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SRUNUPTFcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkNJUkM9MlxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuRUxJUD0zXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SUkVDPTRcbiAgICAgKi9cbiAgICBTSEFQRVM6IHtcbiAgICAgICAgUE9MWTogMCxcbiAgICAgICAgUkVDVDogMSxcbiAgICAgICAgQ0lSQzogMixcbiAgICAgICAgRUxJUDogMyxcbiAgICAgICAgUlJFQzogNFxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBtYXliZSBjaGFuZ2UgdG8gU1BSSVRFLkJBVENIX1NJWkU6IDIwMDBcbiAgICAvLyBUT0RPOiBtYXliZSBhZGQgUEFSVElDTEUuQkFUQ0hfU0laRTogMTUwMDBcbiAgICBTUFJJVEVfQkFUQ0hfU0laRTogMjAwMCAvL25pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSBhbmQgZGVza3RvcCBtYWNoaW5lc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDT05TVDtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gcmVxdWlyZSgnLi9EaXNwbGF5T2JqZWN0JyksXG4gICAgUmVuZGVyVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgQ29udGFpbmVyIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0cy5cbiAqIEl0IGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBkaXNwbGF5IG9iamVjdHMgdGhhdCBhY3QgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIG9iamVjdHMuXG4gKlxuICpgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiBgYGBcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5EaXNwbGF5T2JqZWN0XG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDb250YWluZXIoKVxue1xuICAgIERpc3BsYXlPYmplY3QuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdFtdfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERpc3BsYXlPYmplY3QucHJvdG90eXBlKTtcbkNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5lcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udGFpbmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gMTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIGhlaWdodCA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBPdmVycmlkYWJsZSBtZXRob2QgdGhhdCBjYW4gYmUgdXNlZCBieSBDb250YWluZXIgc3ViY2xhc3NlcyB3aGVuZXZlciB0aGUgY2hpbGRyZW4gYXJyYXkgaXMgbW9kaWZpZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7fTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lci5cbiAqIFxuICogWW91IGNhbiBhbHNvIGFkZCBtdWx0cGxlIGl0ZW1zIGxpa2Ugc286IG15Q29udGFpbmVyLmFkZENoaWxkKHRoaW5rT25lLCB0aGluZ1R3bywgdGhpbmdUaHJlZSlcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBhZGQgdG8gdGhlIGNvbnRhaW5lclxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57IFxuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaGFzIGEgcGFyZW50IHRoZW4gbGV0cyByZW1vdmUgaXQgYXMgUGl4aSBvYmplY3RzIGNhbiBvbmx5IGV4aXN0IGluIG9uZSBwbGFjZVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UodGhpcy5jaGlsZHJlbi5sZW5ndGgtMSk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lciBhdCBhIHNwZWNpZmllZCBpbmRleC4gSWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd25cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRvIGFkZFxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBwbGFjZSB0aGUgY2hpbGQgaW5cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkQXQgPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hpbGQgKyAnYWRkQ2hpbGRBdDogVGhlIGluZGV4ICcrIGluZGV4ICsnIHN1cHBsaWVkIGlzIG91dCBvZiBib3VuZHMgJyArIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiAyIERpc3BsYXkgT2JqZWN0cyB3aXRoaW4gdGhpcyBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKiBAcGFyYW0gY2hpbGQyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc3dhcENoaWxkcmVuID0gZnVuY3Rpb24gKGNoaWxkLCBjaGlsZDIpXG57XG4gICAgaWYgKGNoaWxkID09PSBjaGlsZDIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluZGV4MSA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG4gICAgdmFyIGluZGV4MiA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZDIpO1xuXG4gICAgaWYgKGluZGV4MSA8IDAgfHwgaW5kZXgyIDwgMClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3dhcENoaWxkcmVuOiBCb3RoIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0cyBtdXN0IGJlIGNoaWxkcmVuIG9mIHRoZSBjYWxsZXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDFdID0gY2hpbGQyO1xuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgyXSA9IGNoaWxkO1xuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleDEgPCBpbmRleDIgPyBpbmRleDEgOiBpbmRleDIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBwb3NpdGlvbiBvZiBhIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgdG8gaWRlbnRpZnlcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdCB0byBpZGVudGlmeVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiBhbiBleGlzdGluZyBjaGlsZCBpbiB0aGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIGZvciB3aGljaCB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGluZGV4IG51bWJlclxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSByZXN1bHRpbmcgaW5kZXggbnVtYmVyIGZvciB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuXG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgY3VycmVudEluZGV4LCAxKTsgLy8gcmVtb3ZlIGZyb20gb2xkIHBvc2l0aW9uXG4gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsgLy9hZGQgYXQgbmV3IHBvc2l0aW9uXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBhdFxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgYXQgdGhlIGdpdmVuIGluZGV4LCBpZiBhbnkuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDaGlsZEF0OiBTdXBwbGllZCBpbmRleCAnICsgaW5kZXggKyAnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjaGlsZCBsaXN0LCBvciB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baW5kZXhdO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW1vdmVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIHNwZWNpZmllZCBpbmRleCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgZnJvbVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIHZhciBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRBdChpbmRleCk7XG5cbiAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIGNvbnRhaW5lciB0aGF0IGFyZSB3aXRoaW4gdGhlIGJlZ2luIGFuZCBlbmQgaW5kZXhlcy5cbiAqXG4gKiBAcGFyYW0gYmVnaW5JbmRleCB7bnVtYmVyfSBUaGUgYmVnaW5uaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gKiBAcGFyYW0gZW5kSW5kZXgge251bWJlcn0gVGhlIGVuZGluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzaXplIG9mIHRoZSBjb250YWluZXIuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbiAoYmVnaW5JbmRleCwgZW5kSW5kZXgpXG57XG4gICAgdmFyIGJlZ2luID0gYmVnaW5JbmRleCB8fCAwO1xuICAgIHZhciBlbmQgPSB0eXBlb2YgZW5kSW5kZXggPT09ICdudW1iZXInID8gZW5kSW5kZXggOiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgcmFuZ2UgPSBlbmQgLSBiZWdpbjtcbiAgICB2YXIgcmVtb3ZlZCwgaTtcblxuICAgIGlmIChyYW5nZSA+IDAgJiYgcmFuZ2UgPD0gZW5kKVxuICAgIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGJlZ2luLCByYW5nZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0ucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShiZWdpbkluZGV4KTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZ2UgPT09IDAgJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyZW1vdmVDaGlsZHJlbjogbnVtZXJpYyB2YWx1ZXMgYXJlIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UuJyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIgZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSBmYWxzZTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkNvbnRhaW5lci5wcm90b3R5cGUuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtID0gQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIHRoZSBib3VuZHMgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCB0aGlzIHJlbmRlciBzZXNzaW9uIHNvIHJldHVybiB3aGF0IHdlIGhhdmVcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgY2hpbGRCb3VuZHM7XG4gICAgICAgIHZhciBjaGlsZE1heFg7XG4gICAgICAgIHZhciBjaGlsZE1heFk7XG5cbiAgICAgICAgdmFyIGNoaWxkVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgY2hpbGRCb3VuZHMgPSB0aGlzLmNoaWxkcmVuW2ldLmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBtaW5YID0gbWluWCA8IGNoaWxkQm91bmRzLnggPyBtaW5YIDogY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIG1pblkgPSBtaW5ZIDwgY2hpbGRCb3VuZHMueSA/IG1pblkgOiBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBjaGlsZE1heFggPSBjaGlsZEJvdW5kcy53aWR0aCArIGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICBjaGlsZE1heFkgPSBjaGlsZEJvdW5kcy5oZWlnaHQgKyBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBtYXhYID0gbWF4WCA+IGNoaWxkTWF4WCA/IG1heFggOiBjaGlsZE1heFg7XG4gICAgICAgICAgICBtYXhZID0gbWF4WSA+IGNoaWxkTWF4WSA/IG1heFkgOiBjaGlsZE1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkVmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJHZXRCb3VuZHMgPSBDb250YWluZXIucHJvdG90eXBlLmdldEJvdW5kcztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5vbi1nbG9iYWwgbG9jYWwgYm91bmRzIG9mIHRoZSBDb250YWluZXIgYXMgYSByZWN0YW5nbGUuXG4gKiBUaGUgY2FsY3VsYXRpb24gdGFrZXMgYWxsIHZpc2libGUgY2hpbGRyZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4Q2FjaGUgPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdGguTWF0cml4LklERU5USVRZO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdHJpeENhY2hlO1xuXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMoIG1hdGguTWF0cml4LklERU5USVRZICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICBcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpLCBqO1xuXG4gICAgLy8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyBlbGVtZW50IGhhcyBhIG1hc2sgb3IgYSBmaWx0ZXIuXG4gICAgaWYgKHRoaXMuX21hc2sgfHwgdGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuXG4gICAgICAgIC8vIHB1c2ggZmlsdGVyIGZpcnN0IGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyBjb3JyZWN0IGZvciBhbnkgbWFza2luZ1xuICAgICAgICBpZiAodGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRoaXMsIHRoaXMuX2ZpbHRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnB1c2hNYXNrKHRoaXMsIHRoaXMuX21hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgLy8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBiYXRjaCwgb25seSByZW5kZXJlZCBpZiBpdCBoYXMgYSB0ZXh0dXJlLlxuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIG1ha2Ugc3VyZSB0aGV5IGdldCByZW5kZXJlZFxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmlsdGVycylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gc2ltcGxlIHJlbmRlciBjaGlsZHJlbiFcbiAgICAgICAgZm9yIChpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnJlbmRlcldlYkdMKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3ViY2xhc3NcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyB0aGlzIGlzIHdoZXJlIGNvbnRlbnQgaXRzZWxmIGdldHMgcmVuZGVyZWQuLi5cbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpc1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMuYWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcy5fbWFzaywgcmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlckNhbnZhcyhyZW5kZXJlcik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFzaylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2socmVuZGVyZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcbntcbiAgICBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBpZiAoZGVzdHJveUNoaWxkcmVuKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KGRlc3Ryb3lDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9UcmFuc2Zvcm0nKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgIF90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgdGhhdCBhcmUgcmVuZGVyZWQgb24gdGhlIHNjcmVlbi5cbiAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvbiBpdHMgb3duIHJhdGhlciBpdCBzaG91bGQgYmUgZXh0ZW5kZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIERpc3BsYXlPYmplY3QoKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29vcmRpbmF0ZSBvZiB0aGUgb2JqZWN0IHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy50cmFuc2Zvcm0ucG9zaXRpb247XG4gICAvLyB0aGlzLl9wb3NpdGlvbiA9IG5ldyBDYWNoZVBvaW50KHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIGZhY3RvciBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlID0gdGhpcy50cmFuc2Zvcm0uc2NhbGVcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXZvdCBwb2ludCBvZiB0aGUgZGlzcGxheU9iamVjdCB0aGF0IGl0IHJvdGF0ZXMgYXJvdW5kXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucGl2b3QgPSB0aGlzLnRyYW5zZm9ybS5waXZvdFxuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2tldyBmYWN0b3IgZm9yIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5za2V3ID0gdGhpcy50cmFuc2Zvcm0uc2tld1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9yb3RhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BhY2l0eSBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpc2liaWxpdHkgb2YgdGhlIG9iamVjdC4gSWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biwgYW5kXG4gICAgICogdGhlIHVwZGF0ZVRyYW5zZm9ybSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDYW4gdGhpcyBvYmplY3QgYmUgcmVuZGVyZWQsIGlmIGZhbHNlIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgZHJhd24gYnV0IHRoZSB1cGRhdGVUcmFuc2Zvcm1cbiAgICAgKiBtZXRob2RzIHdpbGwgc3RpbGwgYmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmFibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIHRoaXMgZGlzcGxheSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNvbnRhaW5lcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbXVsdGlwbGllZCBhbHBoYSBvZiB0aGUgZGlzcGxheU9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRyYW5zZm9ybSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIHdvcmxkIChwYXJlbnQpIGZhY3RvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gdGhpcy50cmFuc2Zvcm0ubG9jYWxUcmFuc2Zvcm07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJlYSB0aGUgZmlsdGVyIGlzIGFwcGxpZWQgdG8uIFRoaXMgaXMgdXNlZCBhcyBtb3JlIG9mIGFuIG9wdGltaXNhdGlvblxuICAgICAqIHJhdGhlciB0aGFuIGZpZ3VyaW5nIG91dCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgZGlzcGxheU9iamVjdCBlYWNoIGZyYW1lIHlvdSBjYW4gc2V0IHRoaXMgcmVjdGFuZ2xlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xuXG4gICAgLyoqeHd3XG4gICAgICogY2FjaGVkIHNpbiByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3IgPSAwO1xuXG4gICAgLyoqXG4gICAgICogY2FjaGVkIGNvcyByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3IgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRzID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vc3QgdXAtdG8tZGF0ZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcmlnaW5hbCwgY2FjaGVkIG1hc2sgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXNrID0gbnVsbDtcblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGF5T2JqZWN0O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB4IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NhbGVYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByb3RhdGlvbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY3IgPSBNYXRoLmNvcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHNwcml0ZSBpcyBnbG9iYWxseSB2aXNpYmxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHdvcmxkVmlzaWJsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcztcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbWFzayBmb3IgdGhlIGRpc3BsYXlPYmplY3QuIEEgbWFzayBpcyBhbiBvYmplY3QgdGhhdCBsaW1pdHMgdGhlIHZpc2liaWxpdHkgb2YgYW4gb2JqZWN0IHRvIHRoZSBzaGFwZSBvZiB0aGUgbWFzayBhcHBsaWVkIHRvIGl0LlxuICAgICAqIEluIFBJWEkgYSByZWd1bGFyIG1hc2sgbXVzdCBiZSBhIFBJWEkuR3JhcGhpY3Mgb3IgYSBQSVhJLlNwcml0ZSBvYmplY3QuIFRoaXMgYWxsb3dzIGZvciBtdWNoIGZhc3RlciBtYXNraW5nIGluIGNhbnZhcyBhcyBpdCB1dGlsaXNlcyBzaGFwZSBjbGlwcGluZy5cbiAgICAgKiBUbyByZW1vdmUgYSBtYXNrLCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc3xQSVhJLlNwcml0ZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIG1hc2s6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFzaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX21hc2sgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFzay5yZW5kZXJhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVycyBmb3IgdGhlIGRpc3BsYXlPYmplY3QuXG4gICAgICogKiBJTVBPUlRBTlQ6IFRoaXMgaXMgYSB3ZWJHTCBvbmx5IGZlYXR1cmUgYW5kIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqIFRvIHJlbW92ZSBmaWx0ZXJzIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnbnVsbCdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGZpbHRlcnM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLnNsaWNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gdmFsdWUgJiYgdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBUT0RPIC0gT3B0aW1pemF0aW9uIHBhc3MhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgLy8gbXVsdGlwbHkgdGhlIGFscGhhcy4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG59O1xuXG4vLyBwZXJmb3JtYW5jZSBpbmNyZWFzZSB0byBhdm9pZCB1c2luZyBjYWxsLi4gKDEweCBmYXN0ZXIpXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtID0gRGlzcGxheU9iamVjdC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtO1xuXG4vKipcbiAqXG4gKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeCkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMobWF0aC5NYXRyaXguSURFTlRJVFkpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvR2xvYmFsID0gZnVuY3Rpb24gKHBvc2l0aW9uKVxue1xuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb3RcbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseShwb3NpdGlvbik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdCByZWxhdGl2ZSB0byBhbm90aGVyIHBvaW50XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcGFyYW0gW2Zyb21dIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgZ2xvYmFsIHBvc2l0aW9uIGZyb21cbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgUG9pbnQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvTG9jYWwgPSBmdW5jdGlvbiAocG9zaXRpb24sIGZyb20sIHBvaW50KVxue1xuICAgIGlmIChmcm9tKVxuICAgIHtcbiAgICAgICAgcG9zaXRpb24gPSBmcm9tLnRvR2xvYmFsKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBzaW1wbHkgYXBwbHkgdGhlIG1hdHJpeC4uXG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvc2l0aW9uLCBwb2ludCk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFyZW50IENvbnRhaW5lciBvZiB0aGlzIERpc3BsYXlPYmplY3RcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdG8gYWRkIHRoaXMgRGlzcGxheU9iamVjdCB0b1xuICogQHJldHVybiB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRoYXQgdGhpcyBEaXNwbGF5T2JqZWN0IHdhcyBhZGRlZCB0b1xuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXIuYWRkQ2hpbGQpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFBhcmVudDogQXJndW1lbnQgbXVzdCBiZSBhIENvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRDaGlsZCh0aGlzKTtcbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzZXQgdGhlIHBvc3Rpb24sIHNjYWxlLCBza2V3IGFuZCBwaXZvdCBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBUaGUgWCBwb3NpdGlvblxuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IFRoZSBZIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3NjYWxlWD0xXSB7bnVtYmVyfSBUaGUgWCBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtzY2FsZVk9MV0ge251bWJlcn0gVGhlIFkgc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbcm90YXRpb249MF0ge251bWJlcn0gVGhlIHJvdGF0aW9uXG4gKiBAcGFyYW0gW3NrZXdYPTBdIHtudW1iZXJ9IFRoZSBYIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbc2tld1k9MF0ge251bWJlcn0gVGhlIFkgc2tldyB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFg9MF0ge251bWJlcn0gVGhlIFggcGl2b3QgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RZPTBdIHtudW1iZXJ9IFRoZSBZIHBpdm90IHZhbHVlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKHgsIHksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZLCBwaXZvdFgsIHBpdm90WSkgLy9qc2hpbnQgaWdub3JlOmxpbmVcbntcbiAgICB0aGlzLnBvc2l0aW9uLnggPSB4IHx8IDA7XG4gICAgdGhpcy5wb3NpdGlvbi55ID0geSB8fCAwO1xuICAgIHRoaXMuc2NhbGUueCA9ICFzY2FsZVggPyAxIDogc2NhbGVYO1xuICAgIHRoaXMuc2NhbGUueSA9ICFzY2FsZVkgPyAxIDogc2NhbGVZO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgIHRoaXMuc2tldy54ID0gc2tld1ggfHwgMDtcbiAgICB0aGlzLnNrZXcueSA9IHNrZXdZIHx8IDA7XG4gICAgdGhpcy5waXZvdC54ID0gcGl2b3RYIHx8IDA7XG4gICAgdGhpcy5waXZvdC55ID0gcGl2b3RZIHx8IDA7XG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEJhc2UgZGVzdHJveSBtZXRob2QgZm9yIGdlbmVyaWMgZGlzcGxheSBvYmplY3RzXG4gKlxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcblxuICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2NhbGUgPSBudWxsO1xuICAgIHRoaXMucGl2b3QgPSBudWxsO1xuICAgIHRoaXMuc2tldyA9IG51bGw7XG5cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcblxuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IG1hdGguUG9pbnQoMSwxKTtcbiAgICB0aGlzLnBpdm90ID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNrZXcgPSBuZXcgbWF0aC5Qb2ludCgwLjApO1xuICAgIFxuICAgIHRoaXMucm90YXRpb24gPSAwO1xuICAgIHRoaXMuX3NyID0gTWF0aC5zaW4oMCk7XG4gICAgdGhpcy5fY3IgPSBNYXRoLmNvcygwKTtcbiAgICBcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufVxuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHJhbnNmb3JtO1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uIChwYXJlbnRUcmFuc2Zvcm0pXG57XG4gICAgdmFyIHB0ID0gcGFyZW50VHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGx0ID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcblxuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueDtcbiAgICAgICAgbHQuYiAgPSAgdGhpcy5fc3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmMgID0gLXRoaXMuX3NyICogdGhpcy5zY2FsZS55O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQudHggPSAgdGhpcy5wb3NpdGlvbi54IC0gKHRoaXMucGl2b3QueCAqIGx0LmEgKyB0aGlzLnBpdm90LnkgKiBsdC5jKTtcbiAgICAgICAgbHQudHkgPSAgdGhpcy5wb3NpdGlvbi55IC0gKHRoaXMucGl2b3QueCAqIGx0LmIgKyB0aGlzLnBpdm90LnkgKiBsdC5kKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmRpcnR5IHx8IHBhcmVudC5kaXJ0eSlcbiAgICB7ICAgICAgXG4gICAgICAgIC8vIGNvbmNhdCB0aGUgcGFyZW50IG1hdHJpeCB3aXRoIHRoZSBvYmplY3RzIHRyYW5zZm9ybS5cbiAgICAgICAgd3QuYSAgPSBsdC5hICAqIHB0LmEgKyBsdC5iICAqIHB0LmM7XG4gICAgICAgIHd0LmIgID0gbHQuYSAgKiBwdC5iICsgbHQuYiAgKiBwdC5kO1xuICAgICAgICB3dC5jICA9IGx0LmMgICogcHQuYSArIGx0LmQgICogcHQuYztcbiAgICAgICAgd3QuZCAgPSBsdC5jICAqIHB0LmIgKyBsdC5kICAqIHB0LmQ7XG4gICAgICAgIHd0LnR4ID0gbHQudHggKiBwdC5hICsgbHQudHkgKiBwdC5jICsgcHQudHg7XG4gICAgICAgIHd0LnR5ID0gbHQudHggKiBwdC5iICsgbHQudHkgKiBwdC5kICsgcHQudHk7ICAgICAgIFxuICAgIFxuICAgLy8gICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgLy8gICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbi8vICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgLy8gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm07XG5cblxuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vR3JhcGhpY3NEYXRhJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcFBvaW50ID0gbmV3IG1hdGguUG9pbnQoKTtcblxuLyoqXG4gKiBUaGUgR3JhcGhpY3MgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB1c2VkIHRvIGRyYXcgcHJpbWl0aXZlIHNoYXBlcyBzdWNoIGFzIGxpbmVzLCBjaXJjbGVzIGFuZFxuICogcmVjdGFuZ2xlcyB0byB0aGUgZGlzcGxheSwgYW5kIHRvIGNvbG9yIGFuZCBmaWxsIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3MoKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCAodGhpY2tuZXNzKSBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gMDtcblxuICAgIC8qKlxuICAgICAqIEdyYXBoaWNzIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQXBwbHkgYSB2YWx1ZSBvZiAweEZGRkZGRiB0byByZXNldCB0aGUgdGludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByZXZpb3VzIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVXNlZCB0byBjb21wYXJlIHRvIHRoZSBjdXJyZW50IHRpbnQgYW5kIGNoZWNrIGlmIHRoZXJlcyBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMuX3ByZXZUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUw7XG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHBhdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBjb250YWluaW5nIHNvbWUgV2ViR0wtcmVsYXRlZCBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgb2JqZWN0Pn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIFRPRE8gLSBfd2ViZ2wgc2hvdWxkIHVzZSBhIHByb3RvdHlwZSBvYmplY3QsIG5vdCBhIHJhbmRvbSB1bmRvY3VtZW50ZWQgb2JqZWN0Li4uXG4gICAgdGhpcy5fd2ViR0wgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBzaGFwZSBpcyBiZWluZyB1c2VkIGFzIGEgbWFzay5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc01hc2sgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBib3VuZHMnIHBhZGRpbmcgdXNlZCBmb3IgYm91bmRzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYm91bmRzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBsb2NhbCBib3VuZHMgdG8gcHJldmVudCByZWNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLDAsMSwxKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgV2ViR0wgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlXG4gICAgICogZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgY2FjaGVkIHNwcml0ZSBvYmplY3QgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGNhY2hlQXNCaXRtYXAgaXMgc2V0IHRvIHRydWUgdGhlIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIGFzIGlmIGl0IHdhcyBhIHNwcml0ZS5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGdyYXBoaWNzIGVsZW1lbnQgZG9lcyBub3QgY2hhbmdlIG9mdGVuLCBhcyBpdCB3aWxsIHNwZWVkIHVwIHRoZSByZW5kZXJpbmdcbiAgICAgKiBvZiB0aGUgb2JqZWN0IGluIGV4Y2hhbmdlIGZvciB0YWtpbmcgdXAgdGV4dHVyZSBtZW1vcnkuIEl0IGlzIGFsc28gdXNlZnVsIGlmIHlvdSBuZWVkIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB0byBiZSBhbnRpLWFsaWFzZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyBjYW52YXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGlmXG4gICAgICogeW91IGFyZSBjb25zdGFudGx5IHJlZHJhd2luZyB0aGUgZ3JhcGhpY3MgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhY2hlQXNCaXRtYXBcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkdyYXBoaWNzI1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5HcmFwaGljcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3M7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICogTm90ZSB0aGF0IHRoZSBvbmx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIGNsb25lZCwgbm90IGl0cyB0cmFuc2Zvcm0gKHBvc2l0aW9uLHNjYWxlLGV0YylcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjbG9uZSA9IG5ldyBHcmFwaGljcygpO1xuXG4gICAgY2xvbmUucmVuZGVyYWJsZSAgICA9IHRoaXMucmVuZGVyYWJsZTtcbiAgICBjbG9uZS5maWxsQWxwaGEgICAgID0gdGhpcy5maWxsQWxwaGE7XG4gICAgY2xvbmUubGluZVdpZHRoICAgICA9IHRoaXMubGluZVdpZHRoO1xuICAgIGNsb25lLmxpbmVDb2xvciAgICAgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICBjbG9uZS50aW50ICAgICAgICAgID0gdGhpcy50aW50O1xuICAgIGNsb25lLmJsZW5kTW9kZSAgICAgPSB0aGlzLmJsZW5kTW9kZTtcbiAgICBjbG9uZS5pc01hc2sgICAgICAgID0gdGhpcy5pc01hc2s7XG4gICAgY2xvbmUuYm91bmRzUGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcbiAgICBjbG9uZS5kaXJ0eSAgICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5nbERpcnR5ICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRoaXMuY2FjaGVkU3ByaXRlRGlydHk7XG5cbiAgICAvLyBjb3B5IGdyYXBoaWNzIGRhdGFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgY2xvbmUuZ3JhcGhpY3NEYXRhLnB1c2godGhpcy5ncmFwaGljc0RhdGFbaV0uY2xvbmUoKSk7XG4gICAgfVxuXG4gICAgY2xvbmUuY3VycmVudFBhdGggPSBjbG9uZS5ncmFwaGljc0RhdGFbY2xvbmUuZ3JhcGhpY3NEYXRhLmxlbmd0aCAtIDFdO1xuXG4gICAgY2xvbmUudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgIHJldHVybiBjbG9uZTtcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsaW5lIHN0eWxlIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gR3JhcGhpY3MgbWV0aG9kcyBzdWNoIGFzIHRoZSBsaW5lVG8oKSBtZXRob2Qgb3IgdGhlIGRyYXdDaXJjbGUoKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lU3R5bGUgPSBmdW5jdGlvbiAobGluZVdpZHRoLCBjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGggfHwgMDtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5saW5lQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGhhbGZ3YXkgdGhyb3VnaCBhIGxpbmU/IHN0YXJ0IGEgbmV3IG9uZSFcbiAgICAgICAgICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24odGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMuc2xpY2UoLTIpKTtcbiAgICAgICAgICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0cyBlbXB0eSBzbyBsZXRzIGp1c3Qgc2V0IHRoZSBsaW5lIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQWxwaGEgPSB0aGlzLmxpbmVBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBNb3ZlcyB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvIHgsIHkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gICovXG5HcmFwaGljcy5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihbeCx5XSk7XG4gICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgbGluZSB1c2luZyB0aGUgY3VycmVudCBsaW5lIHN0eWxlIGZyb20gdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byAoeCwgeSk7XG4gKiBUaGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIGlzIHRoZW4gc2V0IHRvICh4LCB5KS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeCwgeSk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsIDApO1xuICAgIH1cblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICB4YSA9IGZyb21YICsgKCAoY3BYIC0gZnJvbVgpICogaiApO1xuICAgICAgICB5YSA9IGZyb21ZICsgKCAoY3BZIC0gZnJvbVkpICogaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCB4YSArICggKChjcFggKyAoICh0b1ggLSBjcFgpICogaiApKSAtIHhhKSAqIGogKSxcbiAgICAgICAgICAgICAgICAgICAgIHlhICsgKCAoKGNwWSArICggKHRvWSAtIGNwWSkgKiBqICkpIC0geWEpICogaiApICk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSBjcFgyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgY3BYMiwgY3BZMiwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciBuID0gMjAsXG4gICAgICAgIGR0LFxuICAgICAgICBkdDIsXG4gICAgICAgIGR0MyxcbiAgICAgICAgdDIsXG4gICAgICAgIHQzLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIGR0ID0gKDEgLSBqKTtcbiAgICAgICAgZHQyID0gZHQgKiBkdDtcbiAgICAgICAgZHQzID0gZHQyICogZHQ7XG5cbiAgICAgICAgdDIgPSBqICogajtcbiAgICAgICAgdDMgPSB0MiAqIGo7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIGR0MyAqIGZyb21YICsgMyAqIGR0MiAqIGogKiBjcFggKyAzICogZHQgKiB0MiAqIGNwWDIgKyB0MyAqIHRvWCxcbiAgICAgICAgICAgICAgICAgICAgIGR0MyAqIGZyb21ZICsgMyAqIGR0MiAqIGogKiBjcFkgKyAzICogZHQgKiB0MiAqIGNwWTIgKyB0MyAqIHRvWSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmNUbygpIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSBiZXR3ZWVuIHR3byB0YW5nZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFwiYm9ycm93ZWRcIiBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZnhjYW52YXMvIC0gdGhhbmtzIGdvb2dsZSFcbiAqXG4gKiBAcGFyYW0geDEge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHgyIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTIge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjVG8gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIHJhZGl1cylcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyh4MSwgeTEpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyxcbiAgICAgICAgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSxcbiAgICAgICAgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSxcbiAgICAgICAgYTEgPSBmcm9tWSAtIHkxLFxuICAgICAgICBiMSA9IGZyb21YIC0geDEsXG4gICAgICAgIGEyID0geTIgICAtIHkxLFxuICAgICAgICBiMiA9IHgyICAgLSB4MSxcbiAgICAgICAgbW0gPSBNYXRoLmFicyhhMSAqIGIyIC0gYjEgKiBhMik7XG5cbiAgICBpZiAobW0gPCAxLjBlLTggfHwgcmFkaXVzID09PSAwKVxuICAgIHtcbiAgICAgICAgaWYgKHBvaW50c1twb2ludHMubGVuZ3RoLTJdICE9PSB4MSB8fCBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSAhPT0geTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIGRkID0gYTEgKiBhMSArIGIxICogYjEsXG4gICAgICAgICAgICBjYyA9IGEyICogYTIgKyBiMiAqIGIyLFxuICAgICAgICAgICAgdHQgPSBhMSAqIGEyICsgYjEgKiBiMixcbiAgICAgICAgICAgIGsxID0gcmFkaXVzICogTWF0aC5zcXJ0KGRkKSAvIG1tLFxuICAgICAgICAgICAgazIgPSByYWRpdXMgKiBNYXRoLnNxcnQoY2MpIC8gbW0sXG4gICAgICAgICAgICBqMSA9IGsxICogdHQgLyBkZCxcbiAgICAgICAgICAgIGoyID0gazIgKiB0dCAvIGNjLFxuICAgICAgICAgICAgY3ggPSBrMSAqIGIyICsgazIgKiBiMSxcbiAgICAgICAgICAgIGN5ID0gazEgKiBhMiArIGsyICogYTEsXG4gICAgICAgICAgICBweCA9IGIxICogKGsyICsgajEpLFxuICAgICAgICAgICAgcHkgPSBhMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHF4ID0gYjIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBxeSA9IGEyICogKGsxICsgajIpLFxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IE1hdGguYXRhbjIocHkgLSBjeSwgcHggLSBjeCksXG4gICAgICAgICAgICBlbmRBbmdsZSAgID0gTWF0aC5hdGFuMihxeSAtIGN5LCBxeCAtIGN4KTtcblxuICAgICAgICB0aGlzLmFyYyhjeCArIHgxLCBjeSArIHkxLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBiMSAqIGEyID4gYjIgKiBhMSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmMgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlICh1c2VkIHRvIGNyZWF0ZSBjaXJjbGVzLCBvciBwYXJ0cyBvZiBjaXJjbGVzKS5cbiAqXG4gKiBAcGFyYW0gY3gge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBjeSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBzdGFydEFuZ2xlIHtudW1iZXJ9IFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucyAoMCBpcyBhdCB0aGUgMyBvJ2Nsb2NrIHBvc2l0aW9uIG9mIHRoZSBhcmMncyBjaXJjbGUpXG4gKiBAcGFyYW0gZW5kQW5nbGUge251bWJlcn0gVGhlIGVuZGluZyBhbmdsZSwgaW4gcmFkaWFuc1xuICogQHBhcmFtIGFudGljbG9ja3dpc2Uge2Jvb2xlYW59IE9wdGlvbmFsLiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgY291bnRlcmNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuIEZhbHNlIGlzIGRlZmF1bHQsIGFuZCBpbmRpY2F0ZXMgY2xvY2t3aXNlLCB3aGlsZSB0cnVlIGluZGljYXRlcyBjb3VudGVyLWNsb2Nrd2lzZS5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmMgPSBmdW5jdGlvbihjeCwgY3ksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UpXG57XG4gICAgYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gZW5kQW5nbGUpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiggIWFudGljbG9ja3dpc2UgJiYgZW5kQW5nbGUgPD0gc3RhcnRBbmdsZSApXG4gICAge1xuICAgICAgICBlbmRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG4gICAgZWxzZSBpZiggYW50aWNsb2Nrd2lzZSAmJiBzdGFydEFuZ2xlIDw9IGVuZEFuZ2xlIClcbiAgICB7XG4gICAgICAgIHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuXG4gICAgdmFyIHN3ZWVwID0gYW50aWNsb2Nrd2lzZSA/IChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpICogLTEgOiAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKTtcbiAgICB2YXIgc2VncyA9ICBNYXRoLmNlaWwoTWF0aC5hYnMoc3dlZXApIC8gKE1hdGguUEkgKiAyKSkgKiA0MDtcblxuICAgIGlmKHN3ZWVwID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0WCA9IGN4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXM7XG4gICAgdmFyIHN0YXJ0WSA9IGN5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXM7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyhzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIHRoZXRhID0gc3dlZXAvKHNlZ3MqMik7XG4gICAgdmFyIHRoZXRhMiA9IHRoZXRhKjI7XG5cbiAgICB2YXIgY1RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgICB2YXIgc2VnTWludXMgPSBzZWdzIC0gMTtcblxuICAgIHZhciByZW1haW5kZXIgPSAoIHNlZ01pbnVzICUgMSApIC8gc2VnTWludXM7XG5cbiAgICBmb3IodmFyIGk9MDsgaTw9c2VnTWludXM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciByZWFsID0gIGkgKyByZW1haW5kZXIgKiBpO1xuXG5cbiAgICAgICAgdmFyIGFuZ2xlID0gKCh0aGV0YSkgKyBzdGFydEFuZ2xlICsgKHRoZXRhMiAqIHJlYWwpKTtcblxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgdmFyIHMgPSAtTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCggKGNUaGV0YSAqICBjKSArIChzVGhldGEgKiBzKSApICogcmFkaXVzICsgY3gsXG4gICAgICAgICAgICAgICAgICAgICggKGNUaGV0YSAqIC1zKSArIChzVGhldGEgKiBjKSApICogcmFkaXVzICsgY3kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSBzaW1wbGUgb25lLWNvbG9yIGZpbGwgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIG90aGVyIEdyYXBoaWNzIG1ldGhvZHNcbiAqIChzdWNoIGFzIGxpbmVUbygpIG9yIGRyYXdDaXJjbGUoKSkgdXNlIHdoZW4gZHJhd2luZy5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmVnaW5GaWxsID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmZpbGxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGwgPSB0aGlzLmZpbGxpbmc7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxDb2xvciA9IHRoaXMuZmlsbENvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQWxwaGEgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbGwgdG8gdGhlIGxpbmVzIGFuZCBzaGFwZXMgdGhhdCB3ZXJlIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhlIGJlZ2luRmlsbCgpIG1ldGhvZC5cbiAqXG4gKiBAcmV0dXJuIHtHcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmVuZEZpbGwgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gbnVsbDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5SZWN0YW5nbGUoeCx5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBSYWRpdXMgb2YgdGhlIHJlY3RhbmdsZSBjb3JuZXJzXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JvdW5kZWRSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdDaXJjbGUgPSBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkNpcmNsZSh4LHksIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhlIGVsbGlwc2VcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3RWxsaXBzZSA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgcG9seWdvbiB1c2luZyB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCB7bnVtYmVyW118UElYSS5Qb2ludFtdfSBUaGUgcGF0aCBkYXRhIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwb2x5Z29uLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24gKHBhdGgpXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBhdGg7XG5cbiAgICB2YXIgY2xvc2VkID0gdHJ1ZTtcblxuICAgIGlmIChwb2ludHMgaW5zdGFuY2VvZiBtYXRoLlBvbHlnb24pXG4gICAge1xuICAgICAgICBjbG9zZWQgPSBwb2ludHMuY2xvc2VkO1xuICAgICAgICBwb2ludHMgPSBwb2ludHMucG9pbnRzO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50c1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24ocG9pbnRzKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBjbG9zZWQ7XG5cbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBncmFwaGljcyB0aGF0IHdlcmUgZHJhd24gdG8gdGhpcyBHcmFwaGljcyBvYmplY3QsIGFuZCByZXNldHMgZmlsbCBhbmQgbGluZSBzdHlsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuY2xlYXJEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZ2VvbWV0cnkgaXMgY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2hvdWxkIGJlIG9uZSBvZiB0aGUgc2NhbGVNb2RlIGNvbnN0c1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdFxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG5cbiAgICByZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCAqIHJlc29sdXRpb24sIGJvdW5kcy5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY2FudmFzQnVmZmVyLmNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgdGhlIHNwcml0ZSBpcyBub3QgdmlzaWJsZSBvciB0aGUgYWxwaGEgaXMgMCB0aGVuIG5vIG5lZWQgdG8gcmVuZGVyIHRoaXMgZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuZ2xEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzLnJlbmRlcih0aGlzKTtcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmlzTWFzayA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdGludCBoYXMgY2hhbmdlZCwgc2V0IHRoZSBncmFwaGljcyBvYmplY3QgdG8gZGlydHkuXG4gICAgaWYgKHRoaXMuX3ByZXZUaW50ICE9PSB0aGlzLnRpbnQpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjb2RlIG1heSBzdGlsbCBiZSBuZWVkZWQgc28gbGVhdmluZyBmb3Igbm93Li5cbiAgICAvL1xuICAgIC8qXG4gICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXApXG4gICAge1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSB8fCB0aGlzLmNhY2hlZFNwcml0ZURpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSgpO1xuXG4gICAgICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xuXG4gICAgICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMuX2NhY2hlZFNwcml0ZSwgcmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb247XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjb250ZXh0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGdyYXBoaWMgc2hhcGUgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gVGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlLCBkZWZhdWx0cyB0byB0aGlzXG4gKiAgb2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuXG4gICAgICAgIC8vIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGl0ZW0gaXMgYSBtYXNrIVxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyYWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgICAgICAgICAgdGhpcy5nbERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2xvY2FsQm91bmRzO1xuXG4gICAgICAgIHZhciB3MCA9IGJvdW5kcy54O1xuICAgICAgICB2YXIgdzEgPSBib3VuZHMud2lkdGggKyBib3VuZHMueDtcblxuICAgICAgICB2YXIgaDAgPSBib3VuZHMueTtcbiAgICAgICAgdmFyIGgxID0gYm91bmRzLmhlaWdodCArIGJvdW5kcy55O1xuXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciBtYXhYID0geDE7XG4gICAgICAgIHZhciBtYXhZID0geTE7XG5cbiAgICAgICAgdmFyIG1pblggPSB4MTtcbiAgICAgICAgdmFyIG1pblkgPSB5MTtcblxuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy54ID0gbWluWDtcbiAgICAgICAgdGhpcy5fYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IHRoaXMuX2JvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIGdyYXBoaWNzIG9iamVjdFxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5HcmFwaGljcy5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIGdyYXBoaWNzRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoIWRhdGEuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGRlYWwgd2l0aCBmaWxscy4uXG4gICAgICAgIGlmIChkYXRhLnNoYXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIGRhdGEuc2hhcGUuY29udGFpbnMoIHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSApIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICpcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUxvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGlmICh0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB2YXIgc2hhcGUsIHBvaW50cywgeCwgeSwgdywgaDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG4gICAgICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVCB8fCB0eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueCAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gUE9MWVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSAyKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvaW50c1tqKzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblggPSB4LWxpbmVXaWR0aCA8IG1pblggPyB4LWxpbmVXaWR0aCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSB4K2xpbmVXaWR0aCA+IG1heFggPyB4K2xpbmVXaWR0aCA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IHktbGluZVdpZHRoIDwgbWluWSA/IHktbGluZVdpZHRoIDogbWluWTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IHkrbGluZVdpZHRoID4gbWF4WSA/IHkrbGluZVdpZHRoIDogbWF4WTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgbWluWCA9IDA7XG4gICAgICAgIG1heFggPSAwO1xuICAgICAgICBtaW5ZID0gMDtcbiAgICAgICAgbWF4WSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy54ID0gbWluWCAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMud2lkdGggPSAobWF4WCAtIG1pblgpICsgcGFkZGluZyAqIDI7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy55ID0gbWluWSAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMuaGVpZ2h0ID0gKG1heFkgLSBtaW5ZKSArIHBhZGRpbmcgKiAyO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNhY2hlZCBzcHJpdGUgd2hlbiB0aGUgc3ByaXRlIGhhcyBjYWNoZUFzQml0bWFwID0gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgaWYgKCF0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzKTtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgU3ByaXRlKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyID0gY2FudmFzQnVmZmVyO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIucmVzaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gbGV2ZXJhZ2UgdGhlIGFuY2hvciB0byBhY2NvdW50IGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC5zYXZlKCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGFscGhhIG9mIHRoZSBncmFwaGljcyB0byAxIGZvciB0aGUgcmVuZGVyLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gbm93IHJlbmRlciB0aGUgZ3JhcGhpYy4uXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0KTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG59O1xuKi9cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjYWNoZWRTcHJpdGUgPSB0aGlzLl9jYWNoZWRTcHJpdGU7XG4gICAgdmFyIHRleHR1cmUgPSBjYWNoZWRTcHJpdGUudGV4dHVyZTtcbiAgICB2YXIgY2FudmFzID0gY2FjaGVkU3ByaXRlLmJ1ZmZlci5jYW52YXM7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLmZyYW1lLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLmZyYW1lLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICBjYWNoZWRTcHJpdGUuX3dpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIGNhY2hlZFNwcml0ZS5faGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgZGlydHkgYmFzZSB0ZXh0dXJlc1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZGlydHkoKTtcbn07Ki9cblxuLyoqXG4gKiBEZXN0cm95cyBhIHByZXZpb3VzIGNhY2hlZCBzcHJpdGUuXG4gKlxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3lDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS50ZXh0dXJlLmRlc3Ryb3kodHJ1ZSk7XG5cbiAgICAvLyBsZXQgdGhlIGdjIGNvbGxlY3QgdGhlIHVudXNlZCBzcHJpdGVcbiAgICAvLyBUT0RPIGNvdWxkIGJlIG9iamVjdCBwb29sZWQhXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07Ki9cblxuLyoqXG4gKiBEcmF3cyB0aGUgZ2l2ZW4gc2hhcGUgdG8gdGhpcyBHcmFwaGljcyBvYmplY3QuIENhbiBiZSBhbnkgb2YgQ2lyY2xlLCBSZWN0YW5nbGUsIEVsbGlwc2UsIExpbmUgb3IgUG9seWdvbi5cbiAqXG4gKiBAcGFyYW0gc2hhcGUge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX0gVGhlIGdlbmVyYXRlZCBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24gKHNoYXBlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgLy8gY2hlY2sgY3VycmVudCBwYXRoIVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IG5ldyBHcmFwaGljc0RhdGEodGhpcy5saW5lV2lkdGgsIHRoaXMubGluZUNvbG9yLCB0aGlzLmxpbmVBbHBoYSwgdGhpcy5maWxsQ29sb3IsIHRoaXMuZmlsbEFscGhhLCB0aGlzLmZpbGxpbmcsIHNoYXBlKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnB1c2goZGF0YSk7XG5cbiAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICB7XG4gICAgICAgIGRhdGEuc2hhcGUuY2xvc2VkID0gZGF0YS5zaGFwZS5jbG9zZWQgfHwgdGhpcy5maWxsaW5nO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBkZXN0cm95IGVhY2ggb2YgdGhlIEdyYXBoaWNzRGF0YSBvYmplY3RzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggd2ViZ2wgZGF0YSBlbnRyeSwgZGVzdHJveSB0aGUgV2ViR0xHcmFwaGljc0RhdGFcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl93ZWJnbCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3dlYmdsW2lkXS5kYXRhLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJnbFtpZF0uZGF0YVtqXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl93ZWJnbCA9IG51bGw7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBudWxsO1xufTtcbiIsIi8qKlxuICogQSBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBmaWxsQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbEFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGwgICAgICB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gKiBAcGFyYW0gc2hhcGUgICAgIHtDaXJjbGV8UmVjdGFuZ2xlfEVsbGlwc2V8TGluZXxQb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzRGF0YShsaW5lV2lkdGgsIGxpbmVDb2xvciwgbGluZUFscGhhLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgZmlsbCwgc2hhcGUpXG57XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IGxpbmVDb2xvcjtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVBbHBoYSA9IGxpbmVBbHBoYTtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMuX2xpbmVUaW50ID0gbGluZUNvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5fZmlsbFRpbnQgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICAgICAqL1xuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gICAgICovXG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFRoZSB0eXBlIG9mIHRoZSBzaGFwZSwgc2VlIHRoZSBDb25zdC5TaGFwZXMgZmlsZSBmb3IgYWxsIHRoZSBleGlzdGluZyB0eXBlcyxcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBzaGFwZS50eXBlO1xufVxuXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljc0RhdGEgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfVxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEdyYXBoaWNzRGF0YShcbiAgICAgICAgdGhpcy5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMubGluZUNvbG9yLFxuICAgICAgICB0aGlzLmxpbmVBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuZmlsbEFscGhhLFxuICAgICAgICB0aGlzLmZpbGwsXG4gICAgICAgIHRoaXMuc2hhcGVcbiAgICApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3MgZGF0YS5cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2hhcGUgPSBudWxsO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vV2ViR0xHcmFwaGljc0RhdGEnKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyJyksXG5cbiAgICAvLyBzb21lIGRyYXdpbmcgZnVuY3Rpb25zLi5cbiAgICBidWlsZExpbmUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkTGluZScpO1xuICAgIGJ1aWxkUG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRQb2x5Jyk7XG4gICAgYnVpbGRDb21wbGV4UG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRDb21wbGV4UG9seScpO1xuICAgIGJ1aWxkUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlJyk7XG4gICAgYnVpbGRDaXJjbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ2lyY2xlJyk7XG5cbiAgICBlYXJjdXQgPSByZXF1aXJlKCdlYXJjdXQnKTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBHcmFwaGljc1JlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgdGhpcy5ncmFwaGljc0RhdGFQb29sID0gW107XG5cbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBvaW50cyBhIHBvbHkgY2FuIGNvbnRhaW4gYmVmb3JlIGl0IGlzIHJlbmRlcmVkIGFzIGEgY29tcGxleCBwb2x5Z29uICh1c2luZyB0aGUgc3RlbmNpbCBidWZmZXIpXG4gICAgICogQHR5cGUge051bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heGltdW1TaW1wbGVQb2x5U2l6ZSA9IDIwMDtcbn1cblxuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2dyYXBoaWNzJywgR3JhcGhpY3NSZW5kZXJlcik7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZVxuICpcbiAqIEBwcml2YXRlXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy5nbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBuZXcgUHJpbWl0aXZlU2hhZGVyKHRoaXMuZ2wpXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgcmVuZGVyZXIuXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2xbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcbiAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIHZhciB3ZWJHTERhdGE7XG4gIC8vICBjb25zb2xlLmxvZyhncmFwaGljcylcbiAgICBpZiAoZ3JhcGhpY3MuZGlydHkgfHwgIWdyYXBoaWNzLl93ZWJHTFtnbC5pZF0pXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZUdyYXBoaWNzKGdyYXBoaWNzKTtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gVGhpcyAgY291bGQgYmUgc3BlZWRlZCB1cCBmb3Igc3VyZSFcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCBncmFwaGljcy5ibGVuZE1vZGUgKTtcblxuLy8gICAgdmFyIG1hdHJpeCA9ICBncmFwaGljcy53b3JsZFRyYW5zZm9ybS5jbG9uZSgpO1xuLy8gICAgdmFyIG1hdHJpeCA9ICByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXguY2xvbmUoKTtcbi8vICAgIG1hdHJpeC5hcHBlbmQoZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0pO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB3ZWJHTC5kYXRhLmxlbmd0aDsgaSA8IG47IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMLmRhdGFbaV0ubW9kZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy9UT0RPIGZpeCB0aGlzIG9uZSFcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnB1c2hTdGVuY2lsKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICBnbC51bmlmb3JtMWYocmVuZGVyZXIuc2hhZGVyTWFuYWdlci5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSAqIHdlYkdMRGF0YS5hbHBoYSk7XG5cbiAgICAgICAgICAgIC8vIHJlbmRlciBxdWFkLi5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgcmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucG9wU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICovXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHNoYWRlciA9IHRoaXMucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgICAgICAgICByZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50aW50ID0gdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5kcmF3Q291bnQrKztcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gdXBkYXRlXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnVwZGF0ZUdyYXBoaWNzID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBnZXQgdGhlIGNvbnRleHRzIGdyYXBoaWNzIG9iamVjdFxuICAgIHZhciB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF07XG5cbiAgICAvLyBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGRvZXMgbm90IGV4aXN0IGluIHRoZSB3ZWJHTCBjb250ZXh0IHRpbWUgdG8gY3JlYXRlIGl0IVxuICAgIGlmICghd2ViR0wpXG4gICAge1xuICAgICAgICB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF0gPSB7bGFzdEluZGV4OjAsIGRhdGE6W10sIGdsOmdsfTtcbiAgICB9XG5cbiAgIFxuICAgIC8vIGZsYWcgdGhlIGdyYXBoaWNzIGFzIG5vdCBkaXJ0eSBhcyB3ZSBhcmUgYWJvdXQgdG8gdXBkYXRlIGl0Li4uXG4gICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcblxuICAgIHZhciBpO1xuXG4gICAgLy8gaWYgdGhlIHVzZXIgY2xlYXJlZCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHdlIHdpbGwgbmVlZCB0byBjbGVhciBldmVyeSBvYmplY3RcbiAgICBpZiAoZ3JhcGhpY3MuY2xlYXJEaXJ0eSlcbiAgICB7XG4gICAgICAgIGdyYXBoaWNzLmNsZWFyRGlydHkgPSBmYWxzZTtcblxuICAgICAgICAvLyBsb29wIHRocm91Z2ggYW5kIHJldHVybiBhbGwgdGhlIHdlYkdMRGF0YXMgdG8gdGhlIG9iamVjdCBwb29sIHNvIHRoYW4gY2FuIGJlIHJldXNlZCBsYXRlciBvblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGdyYXBoaWNzRGF0YSA9IHdlYkdMLmRhdGFbaV07XG4gICAgICAgICAgICBncmFwaGljc0RhdGEucmVzZXQoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wdXNoKCBncmFwaGljc0RhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIHRoZSBhcnJheSBhbmQgcmVzZXQgdGhlIGluZGV4Li5cbiAgICAgICAgd2ViR0wuZGF0YSA9IFtdO1xuICAgICAgICB3ZWJHTC5sYXN0SW5kZXggPSAwO1xuICAgIH1cblxuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICAvLyBsb29wIHRocm91Z2ggdGhlIGdyYXBoaWNzIGRhdGFzIGFuZCBjb25zdHJ1Y3QgZWFjaCBvbmUuLlxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgYSBjb21wbGV4IGZpbGwgdGhlbiB0aGUgbmV3IHN0ZW5jaWwgYnVmZmVyIHRlY2huaXF1ZSB3aWxsIGJlIHVzZWRcbiAgICAvLyBvdGhlciB3aXNlIGdyYXBoaWNzIG9iamVjdHMgd2lsbCBiZSBwdXNoZWQgaW50byBhIGJhdGNoLi5cbiAgICBmb3IgKGkgPSB3ZWJHTC5sYXN0SW5kZXg7IGkgPCBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gbmVlZCB0byBhZGQgdGhlIHBvaW50cyB0aGUgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgICAgICAgICBkYXRhLnBvaW50cyA9IGRhdGEuc2hhcGUucG9pbnRzLnNsaWNlKCk7XG4gICAgICAgICAgICBpZiAoZGF0YS5zaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gY2xvc2UgdGhlIHBvbHkgaWYgdGhlIHZhbHVlIGlzIHRydWUhXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzWzBdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMl0gfHwgZGF0YS5wb2ludHNbMV0gIT09IGRhdGEucG9pbnRzW2RhdGEucG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucG9pbnRzLnB1c2goZGF0YS5wb2ludHNbMF0sIGRhdGEucG9pbnRzWzFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1BS0UgU1VSRSBXRSBIQVZFIFRIRSBDT1JSRUNUIFRZUEUuLlxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoID49IDYpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoIDwgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgKiAyKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FuRHJhd1VzaW5nU2ltcGxlID0gYnVpbGRQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuRHJhd1VzaW5nU2ltcGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGggPiAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG4gICAgICAgICAgICAgICAgYnVpbGRMaW5lKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQyB8fCBkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5FTElQKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkQ2lyY2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2ViR0wubGFzdEluZGV4Kys7XG4gICAgfVxuXG4gICAgLy8gdXBsb2FkIGFsbCB0aGUgZGlydHkgZGF0YS4uLlxuICAgIGZvciAoaSA9IDA7IGkgPCB3ZWJHTC5kYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVtpXTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLmRpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEudXBsb2FkKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB3ZWJHTCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IFRPRE8gQEFsdmluXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnN3aXRjaE1vZGUgPSBmdW5jdGlvbiAod2ViR0wsIHR5cGUpXG57XG4gICAgdmFyIHdlYkdMRGF0YTtcblxuICAgIGlmICghd2ViR0wuZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgd2ViR0xEYXRhLm1vZGUgPSB0eXBlO1xuICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVt3ZWJHTC5kYXRhLmxlbmd0aC0xXTtcblxuICAgICAgICBpZiAoKHdlYkdMRGF0YS5wb2ludHMubGVuZ3RoID4gMzIwMDAwKSB8fCB3ZWJHTERhdGEubW9kZSAhPT0gdHlwZSB8fCB0eXBlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgICAgIHdlYkdMLmRhdGEucHVzaCh3ZWJHTERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd2ViR0xEYXRhLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB3ZWJHTERhdGE7XG59O1xuXG4iLCIvKipcbiAqIEFuIG9iamVjdCBjb250YWluaW5nIFdlYkdMIHNwZWNpZmljIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBXZWJHTEdyYXBoaWNzRGF0YShnbCkge1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLy9UT0RPIGRvZXMgdGhpcyBuZWVkIHRvIGJlIHNwbGl0IGJlZm9yZSB1cGxvZGluZz8/XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgY29sb3IgY29tcG9uZW50cyAocixnLGIpXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5jb2xvciA9IFswLDAsMF07IC8vIGNvbG9yIHNwbGl0IVxuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgcG9pbnRzIHRvIGRyYXdcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50W119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IFtdO1xuICAgIC8qKlxuICAgICAqIFRoZSBtYWluIGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggYnVmZmVyXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogdG9kbyBAYWx2aW5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tb2RlID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgZ3JhcGhpY3MgaXMgZGlydHkgb3Igbm90XG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn1cblxuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xHcmFwaGljc0RhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIFJlc2V0cyB0aGUgdmVydGljZXMgYW5kIHRoZSBpbmRpY2VzXG4gKi9cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnBvaW50cy5sZW5ndGggPSAwO1xuICAgIHRoaXMuaW5kaWNlcy5sZW5ndGggPSAwO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbi8vICAgIHRoaXMubGFzdEluZGV4ID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDtcbiAgICB0aGlzLmdsUG9pbnRzID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnBvaW50cyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5idWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmdsUG9pbnRzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmdsSW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmluZGljZXMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5nbEluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuY29sb3IgPSBudWxsO1xuICAgIHRoaXMucG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIFxuICAgIHRoaXMuZ2wgPSBudWxsO1xuXG4gICAgdGhpcy5idWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5nbFBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5nbEluZGljZXMgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihnbClcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBnbCxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgZmxpcFk7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIHZlYzMgdGludDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvciAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpXG4gICAgKTtcbn1cblxuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHJpbWl0aXZlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBjaXJjbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRyYXdcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDaXJjbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgdmFyIGNpcmNsZURhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSBjaXJjbGVEYXRhLng7XG4gICAgdmFyIHkgPSBjaXJjbGVEYXRhLnk7XG4gICAgdmFyIHdpZHRoO1xuICAgIHZhciBoZWlnaHQ7XG5cbiAgICAvLyBUT0RPIC0gYml0IGhhY2t5Pz9cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSBjaXJjbGVEYXRhLnJhZGl1cztcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS53aWR0aDtcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHRvdGFsU2VncyA9IE1hdGguZmxvb3IoMzAgKiBNYXRoLnNxcnQoY2lyY2xlRGF0YS5yYWRpdXMpKSB8fCBNYXRoLmZsb29yKDE1ICogTWF0aC5zcXJ0KGNpcmNsZURhdGEud2lkdGggKyBjaXJjbGVEYXRhLmhlaWdodCkpO1xuICAgIHZhciBzZWcgPSAoTWF0aC5QSSAqIDIpIC8gdG90YWxTZWdzIDtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTZWdzICsgMSA7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaCh4LHksIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgeSArIE1hdGguY29zKHNlZyAqIGkpICogaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MrKywgdmVjUG9zKyspO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcy0xKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cy5wdXNoKHggKyBNYXRoLnNpbihzZWcgKiBpKSAqIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBidWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENpcmNsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21wbGV4IHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENvbXBsZXhQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vVE9ETyAtIG5vIG5lZWQgdG8gY29weSB0aGlzIGFzIGl0IGdldHMgdHVybmVkIGludG8gYSBGTG9hdDMyQXJyYXkgYW55d2F5cy4uXG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHMuc2xpY2UoKTtcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB3ZWJHTERhdGEucG9pbnRzID0gcG9pbnRzO1xuICAgIHdlYkdMRGF0YS5hbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgd2ViR0xEYXRhLmNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcblxuICAgIC8vIGNhbGNsYXRlIHRoZSBib3VuZHMuLlxuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgdmFyIHgseTtcblxuICAgIC8vIGdldCBzaXplLi5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrPTIpXG4gICAge1xuICAgICAgICB4ID0gcG9pbnRzW2ldO1xuICAgICAgICB5ID0gcG9pbnRzW2krMV07XG5cbiAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBxdWFkIHRvIHRoZSBlbmQgY29zIHRoZXJlIGlzIG5vIHBvaW50IG1ha2luZyBhbm90aGVyIGJ1ZmZlciFcbiAgICBwb2ludHMucHVzaChtaW5YLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWF4WSxcbiAgICAgICAgICAgICAgICBtaW5YLCBtYXhZKTtcblxuICAgIC8vIHB1c2ggYSBxdWFkIG9udG8gdGhlIGVuZC4uXG5cbiAgICAvL1RPRE8gLSB0aGlzIGFpbnQgbmVlZGVkIVxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goIGkgKTtcbiAgICB9XG5cbn07XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29tcGxleFBvbHk7IiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZExpbmUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gVE9ETyBPUFRJTUlTRSFcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGxpbmUgd2lkdGggaXMgYW4gb2RkIG51bWJlciBhZGQgMC41IHRvIGFsaWduIHRvIGEgd2hvbGUgcGl4ZWxcbiAgICAvLyBjb21tZW50aW5nIHRoaXMgb3V0IGZpeGVzICM3MTEgYW5kICMxNjIwXG4gICAgLy8gaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGglMilcbiAgICAvLyB7XG4gICAgLy8gICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAgIHBvaW50c1tpXSArPSAwLjU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGZpcnN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgdmFyIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IHBvaW50IGlzIHRoZSBsYXN0IHBvaW50IC0gZ29ubmEgaGF2ZSBpc3N1ZXMgOilcbiAgICBpZiAoZmlyc3RQb2ludC54ID09PSBsYXN0UG9pbnQueCAmJiBmaXJzdFBvaW50LnkgPT09IGxhc3RQb2ludC55KVxuICAgIHtcbiAgICAgICAgLy8gbmVlZCB0byBjbG9uZSBhcyB3ZSBhcmUgZ29pbmcgdG8gc2xpZ2h0bHkgbW9kaWZ5IHRoZSBzaGFwZS4uXG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5zbGljZSgpO1xuXG4gICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHZhciBtaWRQb2ludFggPSBsYXN0UG9pbnQueCArIChmaXJzdFBvaW50LnggLSBsYXN0UG9pbnQueCkgKjAuNTtcbiAgICAgICAgdmFyIG1pZFBvaW50WSA9IGxhc3RQb2ludC55ICsgKGZpcnN0UG9pbnQueSAtIGxhc3RQb2ludC55KSAqMC41O1xuXG4gICAgICAgIHBvaW50cy51bnNoaWZ0KG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICAgICAgcG9pbnRzLnB1c2gobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgdmFyIGluZGV4Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIHZhciBpbmRleFN0YXJ0ID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAvLyBEUkFXIHRoZSBMaW5lXG4gICAgdmFyIHdpZHRoID0gZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEubGluZUNvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEubGluZUFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHB4LCBweSwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeTtcbiAgICB2YXIgcGVycHgsIHBlcnB5LCBwZXJwMngsIHBlcnAyeSwgcGVycDN4LCBwZXJwM3k7XG4gICAgdmFyIGExLCBiMSwgYzEsIGEyLCBiMiwgYzI7XG4gICAgdmFyIGRlbm9tLCBwZGlzdCwgZGlzdDtcblxuICAgIHAxeCA9IHBvaW50c1swXTtcbiAgICBwMXkgPSBwb2ludHNbMV07XG5cbiAgICBwMnggPSBwb2ludHNbMl07XG4gICAgcDJ5ID0gcG9pbnRzWzNdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSAgcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcblxuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIC8vIHN0YXJ0XG4gICAgdmVydHMucHVzaChwMXggLSBwZXJweCAsIHAxeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDF4ICsgcGVycHggLCBwMXkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoLTE7IGkrKylcbiAgICB7XG4gICAgICAgIHAxeCA9IHBvaW50c1soaS0xKSoyXTtcbiAgICAgICAgcDF5ID0gcG9pbnRzWyhpLTEpKjIgKyAxXTtcblxuICAgICAgICBwMnggPSBwb2ludHNbKGkpKjJdO1xuICAgICAgICBwMnkgPSBwb2ludHNbKGkpKjIgKyAxXTtcblxuICAgICAgICBwM3ggPSBwb2ludHNbKGkrMSkqMl07XG4gICAgICAgIHAzeSA9IHBvaW50c1soaSsxKSoyICsgMV07XG5cbiAgICAgICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgICAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgICAgICBwZXJwMnggPSAtKHAyeSAtIHAzeSk7XG4gICAgICAgIHBlcnAyeSA9IHAyeCAtIHAzeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAyeCpwZXJwMnggKyBwZXJwMnkqcGVycDJ5KTtcbiAgICAgICAgcGVycDJ4IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeSAvPSBkaXN0O1xuICAgICAgICBwZXJwMnggKj0gd2lkdGg7XG4gICAgICAgIHBlcnAyeSAqPSB3aWR0aDtcblxuICAgICAgICBhMSA9ICgtcGVycHkgKyBwMXkpIC0gKC1wZXJweSArIHAyeSk7XG4gICAgICAgIGIxID0gKC1wZXJweCArIHAyeCkgLSAoLXBlcnB4ICsgcDF4KTtcbiAgICAgICAgYzEgPSAoLXBlcnB4ICsgcDF4KSAqICgtcGVycHkgKyBwMnkpIC0gKC1wZXJweCArIHAyeCkgKiAoLXBlcnB5ICsgcDF5KTtcbiAgICAgICAgYTIgPSAoLXBlcnAyeSArIHAzeSkgLSAoLXBlcnAyeSArIHAyeSk7XG4gICAgICAgIGIyID0gKC1wZXJwMnggKyBwMngpIC0gKC1wZXJwMnggKyBwM3gpO1xuICAgICAgICBjMiA9ICgtcGVycDJ4ICsgcDN4KSAqICgtcGVycDJ5ICsgcDJ5KSAtICgtcGVycDJ4ICsgcDJ4KSAqICgtcGVycDJ5ICsgcDN5KTtcblxuICAgICAgICBkZW5vbSA9IGExKmIyIC0gYTIqYjE7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8IDAuMSApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgZGVub20rPTEwLjE7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4ID0gKGIxKmMyIC0gYjIqYzEpL2Rlbm9tO1xuICAgICAgICBweSA9IChhMipjMSAtIGExKmMyKS9kZW5vbTtcblxuXG4gICAgICAgIHBkaXN0ID0gKHB4IC1wMngpICogKHB4IC1wMngpICsgKHB5IC1wMnkpICogKHB5IC1wMnkpO1xuXG5cbiAgICAgICAgaWYgKHBkaXN0ID4gMTQwICogMTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICBwZXJwM3ggPSBwZXJweCAtIHBlcnAyeDtcbiAgICAgICAgICAgIHBlcnAzeSA9IHBlcnB5IC0gcGVycDJ5O1xuXG4gICAgICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAzeCpwZXJwM3ggKyBwZXJwM3kqcGVycDN5KTtcbiAgICAgICAgICAgIHBlcnAzeCAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN5IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3ggKj0gd2lkdGg7XG4gICAgICAgICAgICBwZXJwM3kgKj0gd2lkdGg7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJwM3gsIHAyeSArcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGV4Q291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmVydHMucHVzaChweCAsIHB5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIChweC1wMngpLCBwMnkgLSAocHkgLSBwMnkpKTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcDF4ID0gcG9pbnRzWyhsZW5ndGgtMikqMl07XG4gICAgcDF5ID0gcG9pbnRzWyhsZW5ndGgtMikqMiArIDFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWyhsZW5ndGgtMSkqMl07XG4gICAgcDJ5ID0gcG9pbnRzWyhsZW5ndGgtMSkqMiArIDFdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KyspO1xuICAgIH1cblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0LTEpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZExpbmU7IiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5XZWJHTEdyYXBoaWNzRGF0YX0gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChwb2ludHMsIG51bGwsIDIpO1xuXG4gICAgaWYgKCF0cmlhbmdsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoIC8gNjtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gK3ZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZXJ0UG9zKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2ZXJ0cy5wdXNoKHBvaW50c1tpICogMl0sIHBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFBvbHk7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gLS0tIC8vXG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgLy9cbiAgICB2YXIgcmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSByZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSByZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICAvLyBzdGFydFxuICAgICAgICB2ZXJ0cy5wdXNoKHgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCAsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIC8vIGluc2VydCAyIGRlYWQgdHJpYW5nbGVzLi5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRQb3MsIHZlcnRQb3MsIHZlcnRQb3MrMSwgdmVydFBvcysyLCB2ZXJ0UG9zKzMsIHZlcnRQb3MrMyk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFt4LCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHldO1xuXG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUmVjdGFuZ2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcbiAgICBcbi8qKlxuICogQnVpbGRzIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbmJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcnJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcnJlY3REYXRhLng7XG4gICAgdmFyIHkgPSBycmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSBycmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJyZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICB2YXIgcmFkaXVzID0gcnJlY3REYXRhLnJhZGl1cztcblxuICAgIHZhciByZWNQb2ludHMgPSBbXTtcbiAgICByZWNQb2ludHMucHVzaCh4LCB5ICsgcmFkaXVzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHgsIHkgKyBoZWlnaHQsIHggKyByYWRpdXMsIHkgKyBoZWlnaHQsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoLCB5ICsgcmFkaXVzLCB4ICsgd2lkdGgsIHksIHggKyB3aWR0aCAtIHJhZGl1cywgeSwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyByYWRpdXMsIHksIHgsIHksIHgsIHkgKyByYWRpdXMgKyAwLjAwMDAwMDAwMDEsIHJlY1BvaW50cyk7XG5cbiAgICAvLyB0aGlzIHRpbnkgbnVtYmVyIGRlYWxzIHdpdGggdGhlIGlzc3VlIHRoYXQgb2NjdXJzIHdoZW4gcG9pbnRzIG92ZXJsYXAgYW5kIGVhcmN1dCBmYWlscyB0byB0cmlhbmd1bGF0ZSB0aGUgaXRlbS5cbiAgICAvLyBUT0RPIC0gZml4IHRoaXMgcHJvcGVybHksIHRoaXMgaXMgbm90IHZlcnkgZWxlZ2FudC4uIGJ1dCBpdCB3b3JrcyBmb3Igbm93LlxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocmVjUG9pbnRzLCBudWxsLCAyKTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlY1BvaW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaChyZWNQb2ludHNbaV0sIHJlY1BvaW50c1srK2ldLCByLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gcmVjUG9pbnRzO1xuXG4gICAgICAgIHRoaXMuYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUuIChoZWxwZXIgZnVuY3Rpb24uLilcbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZyb21YIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gZnJvbVkge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEBwYXJhbSBbb3V0XSB7bnVtYmVyW119IFRoZSBvdXRwdXQgYXJyYXkgdG8gYWRkIHBvaW50cyBpbnRvLiBJZiBub3QgcGFzc2VkLCBhIG5ldyBhcnJheSBpcyBjcmVhdGVkLlxuICogQHJldHVybiB7bnVtYmVyW119IGFuIGFycmF5IG9mIHBvaW50c1xuICovXG5xdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IGZ1bmN0aW9uIChmcm9tWCwgZnJvbVksIGNwWCwgY3BZLCB0b1gsIHRvWSwgb3V0KVxue1xuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIHhiLFxuICAgICAgICB5YixcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSBvdXQgfHwgW107XG5cbiAgICBmdW5jdGlvbiBnZXRQdChuMSAsIG4yLCBwZXJjKSB7XG4gICAgICAgIHZhciBkaWZmID0gbjIgLSBuMTtcblxuICAgICAgICByZXR1cm4gbjEgKyAoIGRpZmYgKiBwZXJjICk7XG4gICAgfVxuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKyApIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIC8vIFRoZSBHcmVlbiBMaW5lXG4gICAgICAgIHhhID0gZ2V0UHQoIGZyb21YICwgY3BYICwgaiApO1xuICAgICAgICB5YSA9IGdldFB0KCBmcm9tWSAsIGNwWSAsIGogKTtcbiAgICAgICAgeGIgPSBnZXRQdCggY3BYICwgdG9YICwgaiApO1xuICAgICAgICB5YiA9IGdldFB0KCBjcFkgLCB0b1kgLCBqICk7XG5cbiAgICAgICAgLy8gVGhlIEJsYWNrIERvdFxuICAgICAgICB4ID0gZ2V0UHQoIHhhICwgeGIgLCBqICk7XG4gICAgICAgIHkgPSBnZXRQdCggeWEgLCB5YiAsIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUm91bmRlZFJlY3RhbmdsZTsiLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBjb3JlIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSVxuICovXG4vLyBleHBvcnQgY29yZSBhbmQgY29uc3QuIFdlIGFzc2lnbiBjb3JlIHRvIGNvbnN0IHNvIHRoYXQgdGhlIG5vbi1yZWZlcmVuY2UgdHlwZXMgaW4gY29uc3QgcmVtYWluIGluLXRhY3RcbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduKHJlcXVpcmUoJy4vY29uc3QnKSwgcmVxdWlyZSgnLi9tYXRoJyksIHtcbiAgICAvLyB1dGlsc1xuICAgIHV0aWxzOiByZXF1aXJlKCcuL3V0aWxzJyksXG4gICAgdGlja2VyOiByZXF1aXJlKCcuL3RpY2tlcicpLFxuXG4gICAgLy8gZGlzcGxheVxuICAgIERpc3BsYXlPYmplY3Q6ICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9EaXNwbGF5T2JqZWN0JyksXG4gICAgQ29udGFpbmVyOiAgICAgICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuXG4gICAgLy8gc3ByaXRlc1xuICAgIFNwcml0ZTogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBQYXJ0aWNsZUNvbnRhaW5lcjogICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lcicpLFxuICAgIFNwcml0ZVJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHRcbiAgICBUZXh0OiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHQvVGV4dCcpLFxuXG4gICAgLy8gcHJpbWl0aXZlc1xuICAgIEdyYXBoaWNzOiAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGE6ICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRGF0YScpLFxuICAgIEdyYXBoaWNzUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dHVyZXNcbiAgICBUZXh0dXJlOiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBCYXNlVGV4dHVyZTogICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL0Jhc2VUZXh0dXJlJyksXG4gICAgUmVuZGVyVGV4dHVyZTogICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgQmFzZVJlbmRlclRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmU6ICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnM6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVGV4dHVyZVV2cycpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gY2FudmFzXG4gICAgQ2FudmFzUmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyJyksXG4gICAgQ2FudmFzR3JhcGhpY3M6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzJyksXG4gICAgQ2FudmFzQnVmZmVyOiAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gd2ViZ2xcbiAgICBXZWJHTFJlbmRlcmVyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgU2hhZGVyOiAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXInKSxcbiAgICBPYmplY3RSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFJlbmRlclRhcmdldDogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuXG4gICAgLy8gZmlsdGVycyAtIHdlYmdsXG4gICAgQWJzdHJhY3RGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlcicpLFxuICAgIEZYQUFGaWx0ZXI6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFNwcml0ZU1hc2tGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlcicpLFxuXG4gICAgZ2xDb3JlOiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3Qgd2hpY2ggcmVuZGVyZXIgeW91IHNob3VsZCBiZSB1c2luZy5cbiAgICAgKiBXZWJHTCBpcyB0aGUgcHJlZmVycmVkIHJlbmRlcmVyIGFzIGl0IGlzIGEgbG90IGZhc3Rlci4gSWYgd2ViR0wgaXMgbm90IHN1cHBvcnRlZCBieVxuICAgICAqIHRoZSBicm93c2VyIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhIGNhbnZhcyByZW5kZXJlclxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAcGFyYW0gd2lkdGg9ODAwIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gaGVpZ2h0PTYwMCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSByZW5kZXJlcnMgdmlld1xuICAgICAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gICAgICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZV0ge2Jvb2xlYW59IGVuYWJsZXMgZHJhd2luZyBidWZmZXIgcHJlc2VydmF0aW9uLCBlbmFibGUgdGhpcyBpZiB5b3VcbiAgICAgKiAgICAgIG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIsIHJldGluYSB3b3VsZCBiZSAyXG4gICAgICogQHBhcmFtIFtub1dlYkdMPWZhbHNlXSB7Ym9vbGVhbn0gcHJldmVudHMgc2VsZWN0aW9uIG9mIFdlYkdMIHJlbmRlcmVyLCBldmVuIGlmIHN1Y2ggaXMgcHJlc2VudFxuICAgICAqXG4gICAgICogQHJldHVybiB7V2ViR0xSZW5kZXJlcnxDYW52YXNSZW5kZXJlcn0gUmV0dXJucyBXZWJHTCByZW5kZXJlciBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBDYW52YXNSZW5kZXJlclxuICAgICAqL1xuICAgIGF1dG9EZXRlY3RSZW5kZXJlcjogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMsIG5vV2ViR0wpXG4gICAge1xuICAgICAgICB3aWR0aCA9IHdpZHRoIHx8IDgwMDtcbiAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0IHx8IDYwMDtcblxuICAgICAgICBpZiAoIW5vV2ViR0wgJiYgY29yZS51dGlscy5pc1dlYkdMU3VwcG9ydGVkKCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgY29yZS5XZWJHTFJlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBjb3JlLkNhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgIH1cbn0pO1xuIiwiLy8gQHRvZG8gLSBpZ25vcmUgdGhlIHRvbyBtYW55IHBhcmFtZXRlcnMgd2FybmluZyBmb3Igbm93XG4vLyBzaG91bGQgZWl0aGVyIGZpeCBpdCBvciBjaGFuZ2UgdGhlIGpzaGludCBjb25maWdcbi8vIGpzaGludCAtVzA3MlxuXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuL1BvaW50Jyk7XG5cbi8qKlxuICogVGhlIHBpeGkgTWF0cml4IGNsYXNzIGFzIGFuIG9iamVjdCwgd2hpY2ggbWFrZXMgaXQgYSBsb3QgZmFzdGVyLFxuICogaGVyZSBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIGl0IDpcbiAqIHwgYSB8IGIgfCB0eHxcbiAqIHwgYyB8IGQgfCB0eXxcbiAqIHwgMCB8IDAgfCAxIHxcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIE1hdHJpeCgpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmIgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmMgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnR4ID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eSA9IDA7XG59XG5cbk1hdHJpeC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNYXRyaXg7XG5tb2R1bGUuZXhwb3J0cyA9IE1hdHJpeDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgTWF0cml4IG9iamVjdCBiYXNlZCBvbiB0aGUgZ2l2ZW4gYXJyYXkuIFRoZSBFbGVtZW50IHRvIE1hdHJpeCBtYXBwaW5nIG9yZGVyIGlzIGFzIGZvbGxvd3M6XG4gKlxuICogYSA9IGFycmF5WzBdXG4gKiBiID0gYXJyYXlbMV1cbiAqIGMgPSBhcnJheVszXVxuICogZCA9IGFycmF5WzRdXG4gKiB0eCA9IGFycmF5WzJdXG4gKiB0eSA9IGFycmF5WzVdXG4gKlxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX0gVGhlIGFycmF5IHRoYXQgdGhlIG1hdHJpeCB3aWxsIGJlIHBvcHVsYXRlZCBmcm9tLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJheSlcbntcbiAgICB0aGlzLmEgPSBhcnJheVswXTtcbiAgICB0aGlzLmIgPSBhcnJheVsxXTtcbiAgICB0aGlzLmMgPSBhcnJheVszXTtcbiAgICB0aGlzLmQgPSBhcnJheVs0XTtcbiAgICB0aGlzLnR4ID0gYXJyYXlbMl07XG4gICAgdGhpcy50eSA9IGFycmF5WzVdO1xufTtcblxuXG4vKipcbiAqIHNldHMgdGhlIG1hdHJpeCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gKiBAcGFyYW0ge251bWJlcn0gY1xuICogQHBhcmFtIHtudW1iZXJ9IGRcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eFxuICogQHBhcmFtIHtudW1iZXJ9IHR5XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHR4LCB0eSlcbntcbiAgICB0aGlzLmEgPSBhO1xuICAgIHRoaXMuYiA9IGI7XG4gICAgdGhpcy5jID0gYztcbiAgICB0aGlzLmQgPSBkO1xuICAgIHRoaXMudHggPSB0eDtcbiAgICB0aGlzLnR5ID0gdHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGZyb20gdGhlIGN1cnJlbnQgTWF0cml4IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3NlIHtib29sZWFufSBXaGV0aGVyIHdlIG5lZWQgdG8gdHJhbnNwb3NlIHRoZSBtYXRyaXggb3Igbm90XG4gKiBAcGFyYW0gW291dF0ge0FycmF5fSBJZiBwcm92aWRlZCB0aGUgYXJyYXkgd2lsbCBiZSBhc3NpZ25lZCB0byBvdXRcbiAqIEByZXR1cm4ge251bWJlcltdfSB0aGUgbmV3bHkgY3JlYXRlZCBhcnJheSB3aGljaCBjb250YWlucyB0aGUgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICh0cmFuc3Bvc2UsIG91dClcbntcbiAgICBpZiAoIXRoaXMuYXJyYXkpXG4gICAge1xuICAgICAgICB0aGlzLmFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg5KTtcbiAgICB9XG5cbiAgICB2YXIgYXJyYXkgPSBvdXQgfHwgdGhpcy5hcnJheTtcblxuICAgIGlmICh0cmFuc3Bvc2UpXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzJdID0gMDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IDA7XG4gICAgICAgIGFycmF5WzZdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbN10gPSB0aGlzLnR5O1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGFycmF5WzBdID0gdGhpcy5hO1xuICAgICAgICBhcnJheVsxXSA9IHRoaXMuYztcbiAgICAgICAgYXJyYXlbMl0gPSB0aGlzLnR4O1xuICAgICAgICBhcnJheVszXSA9IHRoaXMuYjtcbiAgICAgICAgYXJyYXlbNF0gPSB0aGlzLmQ7XG4gICAgICAgIGFycmF5WzVdID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbNl0gPSAwO1xuICAgICAgICBhcnJheVs3XSA9IDA7XG4gICAgICAgIGFycmF5WzhdID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59O1xuXG4vKipcbiAqIEdldCBhIG5ldyBwb3NpdGlvbiB3aXRoIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXG4gKiBDYW4gYmUgdXNlZCB0byBnbyBmcm9tIGEgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlIHRvIHRoZSB3b3JsZCBjb29yZGluYXRlIHNwYWNlLiAoZS5nLiByZW5kZXJpbmcpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCB0cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIHggPSBwb3MueDtcbiAgICB2YXIgeSA9IHBvcy55O1xuXG4gICAgbmV3UG9zLnggPSB0aGlzLmEgKiB4ICsgdGhpcy5jICogeSArIHRoaXMudHg7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmIgKiB4ICsgdGhpcy5kICogeSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gbmV3UG9zO1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgaW52ZXJzZSBvZiB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZSB0byBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gaW5wdXQpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCBpbnZlcnNlLXRyYW5zZm9ybWVkIHRocm91Z2ggdGhpcyBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBseUludmVyc2UgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIGlkID0gMSAvICh0aGlzLmEgKiB0aGlzLmQgKyB0aGlzLmMgKiAtdGhpcy5iKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5kICogaWQgKiB4ICsgLXRoaXMuYyAqIGlkICogeSArICh0aGlzLnR5ICogdGhpcy5jIC0gdGhpcy50eCAqIHRoaXMuZCkgKiBpZDtcbiAgICBuZXdQb3MueSA9IHRoaXMuYSAqIGlkICogeSArIC10aGlzLmIgKiBpZCAqIHggKyAoLXRoaXMudHkgKiB0aGlzLmEgKyB0aGlzLnR4ICogdGhpcy5iKSAqIGlkO1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogVHJhbnNsYXRlcyB0aGUgbWF0cml4IG9uIHRoZSB4IGFuZCB5LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudHJhbnNsYXRlID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy50eCArPSB4O1xuICAgIHRoaXMudHkgKz0geTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgc2NhbGUgdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geCBUaGUgYW1vdW50IHRvIHNjYWxlIGhvcml6b250YWxseVxuICogQHBhcmFtIHtudW1iZXJ9IHkgVGhlIGFtb3VudCB0byBzY2FsZSB2ZXJ0aWNhbGx5XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zY2FsZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuYSAqPSB4O1xuICAgIHRoaXMuZCAqPSB5O1xuICAgIHRoaXMuYyAqPSB4O1xuICAgIHRoaXMuYiAqPSB5O1xuICAgIHRoaXMudHggKj0geDtcbiAgICB0aGlzLnR5ICo9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBBcHBsaWVzIGEgcm90YXRpb24gdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgaW4gcmFkaWFucy5cbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZSA9IGZ1bmN0aW9uIChhbmdsZSlcbntcbiAgICB2YXIgY29zID0gTWF0aC5jb3MoIGFuZ2xlICk7XG4gICAgdmFyIHNpbiA9IE1hdGguc2luKCBhbmdsZSApO1xuXG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIHRoaXMuYSA9IGExICogY29zLXRoaXMuYiAqIHNpbjtcbiAgICB0aGlzLmIgPSBhMSAqIHNpbit0aGlzLmIgKiBjb3M7XG4gICAgdGhpcy5jID0gYzEgKiBjb3MtdGhpcy5kICogc2luO1xuICAgIHRoaXMuZCA9IGMxICogc2luK3RoaXMuZCAqIGNvcztcbiAgICB0aGlzLnR4ID0gdHgxICogY29zIC0gdGhpcy50eSAqIHNpbjtcbiAgICB0aGlzLnR5ID0gdHgxICogc2luICsgdGhpcy50eSAqIGNvcztcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcblxuICAgIHRoaXMuYSAgPSBtYXRyaXguYSAqIGExICsgbWF0cml4LmIgKiBjMTtcbiAgICB0aGlzLmIgID0gbWF0cml4LmEgKiBiMSArIG1hdHJpeC5iICogZDE7XG4gICAgdGhpcy5jICA9IG1hdHJpeC5jICogYTEgKyBtYXRyaXguZCAqIGMxO1xuICAgIHRoaXMuZCAgPSBtYXRyaXguYyAqIGIxICsgbWF0cml4LmQgKiBkMTtcblxuICAgIHRoaXMudHggPSBtYXRyaXgudHggKiBhMSArIG1hdHJpeC50eSAqIGMxICsgdGhpcy50eDtcbiAgICB0aGlzLnR5ID0gbWF0cml4LnR4ICogYjEgKyBtYXRyaXgudHkgKiBkMSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbWF0cml4IGJhc2VkIG9uIGFsbCB0aGUgYXZhaWxhYmxlIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFhcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFlcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVlcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3RhdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdYXG4gKiBAcGFyYW0ge251bWJlcn0gc2tld1lcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoeCwgeSwgcGl2b3RYLCBwaXZvdFksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZKVxue1xuICAgIHZhciBhLCBiLCBjLCBkLCBzciwgY3IsIGN5LCBzeSwgbnN4LCBjeDtcblxuICAgIHNyICA9IE1hdGguc2luKHJvdGF0aW9uKTtcbiAgICBjciAgPSBNYXRoLmNvcyhyb3RhdGlvbik7XG4gICAgY3kgID0gTWF0aC5jb3Moc2tld1kpO1xuICAgIHN5ICA9IE1hdGguc2luKHNrZXdZKTtcbiAgICBuc3ggPSAtTWF0aC5zaW4oc2tld1gpO1xuICAgIGN4ICA9ICBNYXRoLmNvcyhza2V3WCk7XG5cbiAgICBhICA9ICBjciAqIHNjYWxlWDtcbiAgICBiICA9ICBzciAqIHNjYWxlWDtcbiAgICBjICA9IC1zciAqIHNjYWxlWTtcbiAgICBkICA9ICBjciAqIHNjYWxlWTtcblxuICAgIHRoaXMuYSAgPSBjeSAqIGEgKyBzeSAqIGM7XG4gICAgdGhpcy5iICA9IGN5ICogYiArIHN5ICogZDtcbiAgICB0aGlzLmMgID0gbnN4ICogYSArIGN4ICogYztcbiAgICB0aGlzLmQgID0gbnN4ICogYiArIGN4ICogZDtcblxuICAgIHRoaXMudHggPSB4ICsgKCBwaXZvdFggKiBhICsgcGl2b3RZICogYyApO1xuICAgIHRoaXMudHkgPSB5ICsgKCBwaXZvdFggKiBiICsgcGl2b3RZICogZCApO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFByZXBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24obWF0cml4KVxue1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuXG4gICAgaWYgKG1hdHJpeC5hICE9PSAxIHx8IG1hdHJpeC5iICE9PSAwIHx8IG1hdHJpeC5jICE9PSAwIHx8IG1hdHJpeC5kICE9PSAxKVxuICAgIHtcbiAgICAgICAgdmFyIGExID0gdGhpcy5hO1xuICAgICAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgICAgIHRoaXMuYSAgPSBhMSptYXRyaXguYSt0aGlzLmIqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuYiAgPSBhMSptYXRyaXguYit0aGlzLmIqbWF0cml4LmQ7XG4gICAgICAgIHRoaXMuYyAgPSBjMSptYXRyaXguYSt0aGlzLmQqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuZCAgPSBjMSptYXRyaXguYit0aGlzLmQqbWF0cml4LmQ7XG4gICAgfVxuXG4gICAgdGhpcy50eCA9IHR4MSptYXRyaXguYSt0aGlzLnR5Km1hdHJpeC5jK21hdHJpeC50eDtcbiAgICB0aGlzLnR5ID0gdHgxKm1hdHJpeC5iK3RoaXMudHkqbWF0cml4LmQrbWF0cml4LnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEludmVydHMgdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5pbnZlcnQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBiMSA9IHRoaXMuYjtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIGQxID0gdGhpcy5kO1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuICAgIHZhciBuID0gYTEqZDEtYjEqYzE7XG5cbiAgICB0aGlzLmEgPSBkMS9uO1xuICAgIHRoaXMuYiA9IC1iMS9uO1xuICAgIHRoaXMuYyA9IC1jMS9uO1xuICAgIHRoaXMuZCA9IGExL247XG4gICAgdGhpcy50eCA9IChjMSp0aGlzLnR5LWQxKnR4MSkvbjtcbiAgICB0aGlzLnR5ID0gLShhMSp0aGlzLnR5LWIxKnR4MSkvbjtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIFJlc2V0cyB0aGlzIE1hdGl4IHRvIGFuIGlkZW50aXR5IChkZWZhdWx0KSBtYXRyaXguXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaWRlbnRpdHkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYSA9IDE7XG4gICAgdGhpcy5iID0gMDtcbiAgICB0aGlzLmMgPSAwO1xuICAgIHRoaXMuZCA9IDE7XG4gICAgdGhpcy50eCA9IDA7XG4gICAgdGhpcy50eSA9IDA7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBNYXRyaXggb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBBIGNvcHkgb2YgdGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1hdHJpeCA9IG5ldyBNYXRyaXgoKTtcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSB2YWx1ZXMgb2YgdGhlIGdpdmVuIG1hdHJpeCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgb25lcyBpbiB0aGlzIG1hdHJpeFxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGUgbWF0cml4IGdpdmVuIGluIHBhcmFtZXRlciB3aXRoIGl0cyB2YWx1ZXMgdXBkYXRlZC5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBBIGRlZmF1bHQgKGlkZW50aXR5KSBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LklERU5USVRZID0gbmV3IE1hdHJpeCgpO1xuXG4vKipcbiAqIEEgdGVtcCBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LlRFTVBfTUFUUklYID0gbmV3IE1hdHJpeCgpO1xuIiwiLyoqXG4gKiBUaGUgUG9pbnQgb2JqZWN0IHJlcHJlc2VudHMgYSBsb2NhdGlvbiBpbiBhIHR3by1kaW1lbnNpb25hbCBjb29yZGluYXRlIHN5c3RlbSwgd2hlcmUgeCByZXByZXNlbnRzXG4gKiB0aGUgaG9yaXpvbnRhbCBheGlzIGFuZCB5IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIGF4aXMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXNcbiAqL1xuZnVuY3Rpb24gUG9pbnQoeCwgeSlcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xufVxuXG5Qb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2ludDtcbm1vZHVsZS5leHBvcnRzID0gUG9pbnQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9pbnRcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBhIGNvcHkgb2YgdGhlIHBvaW50XG4gKi9cblBvaW50LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLngsIHRoaXMueSk7XG59O1xuXG4vKipcbiAqIENvcGllcyB4IGFuZCB5IGZyb20gdGhlIGdpdmVuIHBvaW50XG4gKlxuICogQHBhcmFtIHAge1BJWEkuUG9pbnR9XG4gKi9cblBvaW50LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKHApIHtcbiAgICB0aGlzLnNldChwLngsIHAueSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcG9pbnQgaXMgZXF1YWwgdG8gdGhpcyBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cblBvaW50LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiAocC54ID09PSB0aGlzLngpICYmIChwLnkgPT09IHRoaXMueSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIHBvaW50IHRvIGEgbmV3IHggYW5kIHkgcG9zaXRpb24uXG4gKiBJZiB5IGlzIG9taXR0ZWQsIGJvdGggeCBhbmQgeSB3aWxsIGJlIHNldCB0byB4LlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cblBvaW50LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLnggPSB4IHx8IDA7XG4gICAgdGhpcy55ID0geSB8fCAoICh5ICE9PSAwKSA/IHRoaXMueCA6IDAgKSA7XG59O1xuIiwiLyoqXG4gKiBNYXRoIGNsYXNzZXMgYW5kIHV0aWxpdGllcyBtaXhlZCBpbnRvIFBJWEkgbmFtZXNwYWNlLlxuICpcbiAqIEBsZW5kcyBQSVhJXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8vIFRoZXNlIHdpbGwgYmUgbWl4ZWQgdG8gYmUgbWFkZSBwdWJsaWNseSBhdmFpbGFibGUsXG4gICAgLy8gd2hpbGUgdGhpcyBtb2R1bGUgaXMgdXNlZCBpbnRlcm5hbGx5IGluIGNvcmVcbiAgICAvLyB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYW5kIGN1dCBkb3duIG9uXG4gICAgLy8gaW50ZXJuYWwgbW9kdWxlIHJlcXVpcmVzLlxuXG4gICAgUG9pbnQ6ICAgICAgcmVxdWlyZSgnLi9Qb2ludCcpLFxuICAgIE1hdHJpeDogICAgIHJlcXVpcmUoJy4vTWF0cml4JyksXG5cbiAgICBDaXJjbGU6ICAgICByZXF1aXJlKCcuL3NoYXBlcy9DaXJjbGUnKSxcbiAgICBFbGxpcHNlOiAgICByZXF1aXJlKCcuL3NoYXBlcy9FbGxpcHNlJyksXG4gICAgUG9seWdvbjogICAgcmVxdWlyZSgnLi9zaGFwZXMvUG9seWdvbicpLFxuICAgIFJlY3RhbmdsZTogIHJlcXVpcmUoJy4vc2hhcGVzL1JlY3RhbmdsZScpLFxuICAgIFJvdW5kZWRSZWN0YW5nbGU6IHJlcXVpcmUoJy4vc2hhcGVzL1JvdW5kZWRSZWN0YW5nbGUnKVxufTtcbiIsInZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2lyY2xlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKi9cbmZ1bmN0aW9uIENpcmNsZSh4LCB5LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuQ0lSQztcbn1cblxuQ2lyY2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENpcmNsZTtcbm1vZHVsZS5leHBvcnRzID0gQ2lyY2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIENpcmNsZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuQ2lyY2xlfSBhIGNvcHkgb2YgdGhlIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IENpcmNsZSh0aGlzLngsIHRoaXMueSwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGNpcmNsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgQ2lyY2xlXG4gKi9cbkNpcmNsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy5yYWRpdXMgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgZHggPSAodGhpcy54IC0geCksXG4gICAgICAgIGR5ID0gKHRoaXMueSAtIHkpLFxuICAgICAgICByMiA9IHRoaXMucmFkaXVzICogdGhpcy5yYWRpdXM7XG5cbiAgICBkeCAqPSBkeDtcbiAgICBkeSAqPSBkeTtcblxuICAgIHJldHVybiAoZHggKyBkeSA8PSByMik7XG59O1xuXG4vKipcbiogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIGNpcmNsZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuKi9cbkNpcmNsZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLnJhZGl1cywgdGhpcy55IC0gdGhpcy5yYWRpdXMsIHRoaXMucmFkaXVzICogMiwgdGhpcy5yYWRpdXMgKiAyKTtcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIEVsbGlwc2Ugb2JqZWN0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBoaXQgYXJlYSBmb3IgZGlzcGxheU9iamVjdHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBoYWxmIHdpZHRoIG9mIHRoaXMgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhpcyBlbGxpcHNlXG4gKi9cbmZ1bmN0aW9uIEVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuRUxJUDtcbn1cblxuRWxsaXBzZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFbGxpcHNlO1xubW9kdWxlLmV4cG9ydHMgPSBFbGxpcHNlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIEVsbGlwc2UgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkVsbGlwc2V9IGEgY29weSBvZiB0aGUgZWxsaXBzZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBFbGxpcHNlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgZWxsaXBzZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZHMgYXJlIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy9ub3JtYWxpemUgdGhlIGNvb3JkcyB0byBhbiBlbGxpcHNlIHdpdGggY2VudGVyIDAsMFxuICAgIHZhciBub3JteCA9ICgoeCAtIHRoaXMueCkgLyB0aGlzLndpZHRoKSxcbiAgICAgICAgbm9ybXkgPSAoKHkgLSB0aGlzLnkpIC8gdGhpcy5oZWlnaHQpO1xuXG4gICAgbm9ybXggKj0gbm9ybXg7XG4gICAgbm9ybXkgKj0gbm9ybXk7XG5cbiAgICByZXR1cm4gKG5vcm14ICsgbm9ybXkgPD0gMSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBlbGxpcHNlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLndpZHRoLCB0aGlzLnkgLSB0aGlzLmhlaWdodCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcbiIsInZhciBQb2ludCA9IHJlcXVpcmUoJy4uL1BvaW50JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBwb2ludHMge1BJWEkuUG9pbnRbXXxudW1iZXJbXXwuLi5QSVhJLlBvaW50fC4uLm51bWJlcn0gVGhpcyBjYW4gYmUgYW4gYXJyYXkgb2YgUG9pbnRzIHRoYXQgZm9ybSB0aGUgcG9seWdvbixcbiAqICAgICAgYSBmbGF0IGFycmF5IG9mIG51bWJlcnMgdGhhdCB3aWxsIGJlIGludGVycHJldGVkIGFzIFt4LHksIHgseSwgLi4uXSwgb3IgdGhlIGFyZ3VtZW50cyBwYXNzZWQgY2FuIGJlXG4gKiAgICAgIGFsbCB0aGUgcG9pbnRzIG9mIHRoZSBwb2x5Z29uIGUuZy4gYG5ldyBQSVhJLlBvbHlnb24obmV3IFBJWEkuUG9pbnQoKSwgbmV3IFBJWEkuUG9pbnQoKSwgLi4uKWAsIG9yIHRoZVxuICogICAgICBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZSBmbGF0IHgseSB2YWx1ZXMgZS5nLiBgbmV3IFBvbHlnb24oeCx5LCB4LHksIHgseSwgLi4uKWAgd2hlcmUgYHhgIGFuZCBgeWAgYXJlXG4gKiAgICAgIE51bWJlcnMuXG4gKi9cbmZ1bmN0aW9uIFBvbHlnb24ocG9pbnRzXylcbntcbiAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBhc3NpZ25tZW50IGRlb3B0XG4gICAgLy8gc2VlIHNlY3Rpb24gMy4xOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICB2YXIgcG9pbnRzID0gcG9pbnRzXztcblxuICAgIC8vaWYgcG9pbnRzIGlzbid0IGFuIGFycmF5LCB1c2UgYXJndW1lbnRzIGFzIHRoZSBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBwb2ludHMubGVuZ3RoOyArK2EpIHtcbiAgICAgICAgICAgIHBvaW50c1thXSA9IGFyZ3VtZW50c1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHRoaXMgaXMgYW4gYXJyYXkgb2YgcG9pbnRzLCBjb252ZXJ0IGl0IHRvIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzXG4gICAgaWYgKHBvaW50c1swXSBpbnN0YW5jZW9mIFBvaW50KVxuICAgIHtcbiAgICAgICAgdmFyIHAgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHAucHVzaChwb2ludHNbaV0ueCwgcG9pbnRzW2ldLnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9pbnRzID0gcDtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB0aGUgcG9pbnRzIG9mIHRoaXMgcG9seWdvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlBPTFk7XG59XG5cblBvbHlnb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9seWdvbjtcbm1vZHVsZS5leHBvcnRzID0gUG9seWdvbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBwb2x5Z29uXG4gKlxuICogQHJldHVybiB7UElYSS5Qb2x5Z29ufSBhIGNvcHkgb2YgdGhlIHBvbHlnb25cbiAqL1xuUG9seWdvbi5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9seWdvbih0aGlzLnBvaW50cy5zbGljZSgpKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIGluc2lkZSA9IGZhbHNlO1xuXG4gICAgLy8gdXNlIHNvbWUgcmF5Y2FzdGluZyB0byB0ZXN0IGhpdHNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svcG9pbnQtaW4tcG9seWdvbi9ibG9iL21hc3Rlci9pbmRleC5qc1xuICAgIHZhciBsZW5ndGggPSB0aGlzLnBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBsZW5ndGggLSAxOyBpIDwgbGVuZ3RoOyBqID0gaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHhpID0gdGhpcy5wb2ludHNbaSAqIDJdLCB5aSA9IHRoaXMucG9pbnRzW2kgKiAyICsgMV0sXG4gICAgICAgICAgICB4aiA9IHRoaXMucG9pbnRzW2ogKiAyXSwgeWogPSB0aGlzLnBvaW50c1tqICogMiArIDFdLFxuICAgICAgICAgICAgaW50ZXJzZWN0ID0gKCh5aSA+IHkpICE9PSAoeWogPiB5KSkgJiYgKHggPCAoeGogLSB4aSkgKiAoeSAtIHlpKSAvICh5aiAtIHlpKSArIHhpKTtcblxuICAgICAgICBpZiAoaW50ZXJzZWN0KVxuICAgICAgICB7XG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc2lkZTtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIHRoZSBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgZGVmaW5lZCBieSBpdHMgcG9zaXRpb24sIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCB3aWR0aCBvZiB0aGlzIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByZWN0YW5nbGVcbiAqL1xuZnVuY3Rpb24gUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJFQ1Q7XG59XG5cblJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZWN0YW5nbGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlY3RhbmdsZTtcblxuLyoqXG4gKiBBIGNvbnN0YW50IGVtcHR5IHJlY3RhbmdsZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuUmVjdGFuZ2xlLkVNUFRZID0gbmV3IFJlY3RhbmdsZSgwLCAwLCAwLCAwKTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgUmVjdGFuZ2xlXG4gKi9cblJlY3RhbmdsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHggPj0gdGhpcy54ICYmIHggPCB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPCB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUm91bmRlZCBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgdGhhdCBoYXMgbmljZSByb3VuZGVkIGNvcm5lcnMsIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0IGFuZCBpdHMgcmFkaXVzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBDb250cm9scyB0aGUgcmFkaXVzIG9mIHRoZSByb3VuZGVkIGNvcm5lcnNcbiAqL1xuZnVuY3Rpb24gUm91bmRlZFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMjBcbiAgICAgKi9cbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCAyMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUlJFQztcbn1cblxuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3VuZGVkUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3VuZGVkUmVjdGFuZ2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHJldHVybiB7UElYSS5Sb3VuZGVkUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJvdW5kZWRSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnJhZGl1cyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDw9IHRoaXMueCArIHRoaXMud2lkdGgpXG4gICAge1xuICAgICAgICBpZiAoeSA+PSB0aGlzLnkgJiYgeSA8PSB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBQYXJ0aWNsZUNvbnRhaW5lciBjbGFzcyBpcyBhIHJlYWxseSBmYXN0IHZlcnNpb24gb2YgdGhlIENvbnRhaW5lciBidWlsdCBzb2xlbHkgZm9yIHNwZWVkLFxuICogc28gdXNlIHdoZW4geW91IG5lZWQgYSBsb3Qgb2Ygc3ByaXRlcyBvciBwYXJ0aWNsZXMuIFRoZSB0cmFkZW9mZiBvZiB0aGUgUGFydGljbGVDb250YWluZXIgaXMgdGhhdCBhZHZhbmNlZFxuICogZnVuY3Rpb25hbGl0eSB3aWxsIG5vdCB3b3JrLiBQYXJ0aWNsZUNvbnRhaW5lciBpbXBsZW1lbnRzIG9ubHkgdGhlIGJhc2ljIG9iamVjdCB0cmFuc2Zvcm0gKHBvc2l0aW9uLCBzY2FsZSwgcm90YXRpb24pLlxuICogQW55IG90aGVyIGZ1bmN0aW9uYWxpdHkgbGlrZSB0aW50aW5nLCBtYXNraW5nLCBldGMgd2lsbCBub3Qgd29yayBvbiBzcHJpdGVzIGluIHRoaXMgYmF0Y2guXG4gKlxuICogSXQncyBleHRyZW1lbHkgZWFzeSB0byB1c2UgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgY29udGFpbmVyID0gbmV3IFBhcnRpY2xlQ29udGFpbmVyKCk7XG4gKlxuICogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSlcbiAqIHtcbiAqICAgICB2YXIgc3ByaXRlID0gbmV3IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcIm15SW1hZ2UucG5nXCIpO1xuICogICAgIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogfVxuICogYGBgXG4gKlxuICogQW5kIGhlcmUgeW91IGhhdmUgYSBodW5kcmVkIHNwcml0ZXMgdGhhdCB3aWxsIGJlIHJlbmRlcmVyIGF0IHRoZSBzcGVlZCBvZiBsaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFttYXhTaXplPTE1MDAwXSB7bnVtYmVyfSBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFydGljbGVzIHRoYXQgY2FuIGJlIHJlbmRlcmVyIGJ5IHRoZSBjb250YWluZXIuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXNdIHtvYmplY3R9IFRoZSBwcm9wZXJ0aWVzIG9mIGNoaWxkcmVuIHRoYXQgc2hvdWxkIGJlIHVwbG9hZGVkIHRvIHRoZSBncHUgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuc2NhbGU9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHNjYWxlIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnBvc2l0aW9uPXRydWVdIHtib29sZWFufSBXaGVuIHRydWUsIHBvc2l0aW9uIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnJvdGF0aW9uPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCByb3RhdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy51dnM9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHV2cyBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5hbHBoYT1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgYWxwaGEgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW2JhdGNoU2l6ZT0xNTAwMF0ge251bWJlcn0gTnVtYmVyIG9mIHBhcnRpY2xlcyBwZXIgYmF0Y2guXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQ29udGFpbmVyKG1heFNpemUsIHByb3BlcnRpZXMsIGJhdGNoU2l6ZSlcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIGJhdGNoU2l6ZSA9IGJhdGNoU2l6ZSB8fCAxNTAwMDsgLy9DT05TVC5TUFJJVEVfQkFUQ0hfU0laRTsgLy8gMjAwMCBpcyBhIG5pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSAvIGRlc2t0b3BcbiAgICBtYXhTaXplID0gbWF4U2l6ZSB8fCAxNTAwMDtcblxuICAgIC8vIE1ha2luZyBzdXJlIHRoZSBiYXRjaCBzaXplIGlzIHZhbGlkXG4gICAgLy8gNjU1MzUgaXMgbWF4IHZlcnRleCBpbmRleCBpbiB0aGUgaW5kZXggYnVmZmVyIChzZWUgUGFydGljbGVSZW5kZXJlcilcbiAgICAvLyBzbyBtYXggbnVtYmVyIG9mIHBhcnRpY2xlcyBpcyA2NTUzNiAvIDQgPSAxNjM4NFxuICAgIHZhciBtYXhCYXRjaFNpemUgPSAxNjM4NDtcbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4QmF0Y2hTaXplKSB7XG4gICAgICAgIGJhdGNoU2l6ZSA9IG1heEJhdGNoU2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4U2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhTaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBwcm9wZXJ0aWVzIHRvIGJlIGR5bmFtaWMgKHRydWUpIC8gc3RhdGljIChmYWxzZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW5bXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4U2l6ZSA9IG1heFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYXRjaFNpemUgPSBiYXRjaFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVDaGlsZHJlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGNhbnZhcyByZW5kZXJlcmluZy4gSWYgdHJ1ZSB0aGVuIHRoZSBlbGVtZW50cyB3aWxsIGJlIHBvc2l0aW9uZWQgYXQgdGhlIG5lYXJlc3QgcGl4ZWwuIFRoaXMgcHJvdmlkZXMgYSBuaWNlIHNwZWVkIGJvb3N0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlO1xuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSB0cnVlO1xuXG4gICAgdGhpcy5zZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xufVxuXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQ29udGFpbmVyO1xuXG4vKipcbiAqIFNldHMgdGhlIHByaXZhdGUgcHJvcGVydGllcyBhcnJheSB0byBkeW5hbWljIC8gc3RhdGljIGJhc2VkIG9uIHRoZSBwYXNzZWQgcHJvcGVydGllcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcHJvcGVydGllcyB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyB0byBiZSB1cGxvYWRlZFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuc2V0UHJvcGVydGllcyA9IGZ1bmN0aW9uKHByb3BlcnRpZXMpXG57XG4gICAgaWYgKCBwcm9wZXJ0aWVzICkge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzBdID0gJ3NjYWxlJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnNjYWxlIDogdGhpcy5fcHJvcGVydGllc1swXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1sxXSA9ICdwb3NpdGlvbicgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5wb3NpdGlvbiA6IHRoaXMuX3Byb3BlcnRpZXNbMV07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMl0gPSAncm90YXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucm90YXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzJdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzNdID0gJ3V2cycgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy51dnMgOiB0aGlzLl9wcm9wZXJ0aWVzWzNdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzRdID0gJ2FscGhhJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLmFscGhhIDogdGhpcy5fcHJvcGVydGllc1s0XTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgLy8gVE9ETyBkb24ndCBuZWVkIHRvIVxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIC8vICBQSVhJLkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtLmNhbGwoIHRoaXMgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGFpbmVyIHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgd2ViZ2wgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlciggcmVuZGVyZXIucGx1Z2lucy5wYXJ0aWNsZSApO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUucmVuZGVyKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgZmxhZyB0aGF0IHN0YXRpYyBkYXRhIHNob3VsZCBiZSB1cGRhdGVkIHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUub25DaGlsZHJlbkNoYW5nZSA9IGZ1bmN0aW9uIChzbWFsbGVzdENoaWxkSW5kZXgpXG57XG4gICAgdmFyIGJ1ZmZlckluZGV4ID0gTWF0aC5mbG9vcihzbWFsbGVzdENoaWxkSW5kZXggLyB0aGlzLl9iYXRjaFNpemUpO1xuICAgIGlmIChidWZmZXJJbmRleCA8IHRoaXMuX2J1ZmZlclRvVXBkYXRlKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gYnVmZmVySW5kZXg7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIGNhbnZhcyByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGlzUm90YXRlZCA9IHRydWU7XG5cbiAgICB2YXIgcG9zaXRpb25YID0gMDtcbiAgICB2YXIgcG9zaXRpb25ZID0gMDtcblxuICAgIHZhciBmaW5hbFdpZHRoID0gMDtcbiAgICB2YXIgZmluYWxIZWlnaHQgPSAwO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICBpZiAoIWNoaWxkLnZpc2libGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZyYW1lID0gY2hpbGQudGV4dHVyZS5mcmFtZTtcblxuICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhICogY2hpbGQuYWxwaGE7XG5cbiAgICAgICAgaWYgKGNoaWxkLnJvdGF0aW9uICUgKE1hdGguUEkgKiAyKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgZmFzdGVzdCAgd2F5IHRvIG9wdGltaXNlISAtIGlmIHJvdGF0aW9uIGlzIDAgdGhlbiB3ZSBjYW4gYXZvaWQgYW55IGtpbmQgb2Ygc2V0VHJhbnNmb3JtIGNhbGxcbiAgICAgICAgICAgIGlmIChpc1JvdGF0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoICogY2hpbGQuc2NhbGUueCkgKyBjaGlsZC5wb3NpdGlvbi54ICArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0ICogY2hpbGQuc2NhbGUueSkgKyBjaGlsZC5wb3NpdGlvbi55ICArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLng7XG4gICAgICAgICAgICBmaW5hbEhlaWdodCA9IGZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnk7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzUm90YXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoaWxkLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICAgICAgdmFyIGNoaWxkVHJhbnNmb3JtID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHggfCAwLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eSB8IDBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvblggPSAoKGNoaWxkLmFuY2hvci54KSAqICgtZnJhbWUud2lkdGgpICsgMC41KTtcbiAgICAgICAgICAgIHBvc2l0aW9uWSA9ICgoY2hpbGQuYW5jaG9yLnkpICogKC1mcmFtZS5oZWlnaHQpICsgMC41KTtcblxuICAgICAgICAgICAgZmluYWxXaWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgIGNoaWxkLnRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgZnJhbWUueCxcbiAgICAgICAgICAgIGZyYW1lLnksXG4gICAgICAgICAgICBmcmFtZS53aWR0aCxcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCxcbiAgICAgICAgICAgIHBvc2l0aW9uWCxcbiAgICAgICAgICAgIHBvc2l0aW9uWSxcbiAgICAgICAgICAgIGZpbmFsV2lkdGgsXG4gICAgICAgICAgICBmaW5hbEhlaWdodFxuICAgICAgICApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUNoaWxkcmVuPWZhbHNlXSB7Ym9vbGVhbn0gaWYgc2V0IHRvIHRydWUsIGFsbCB0aGUgY2hpbGRyZW4gd2lsbCBoYXZlIHRoZWlyIGRlc3Ryb3kgbWV0aG9kIGNhbGxlZCBhcyB3ZWxsXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgaWYgKHRoaXMuX2J1ZmZlcnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLl9idWZmZXJzW2ldLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xufTtcbiIsIlxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZUJ1ZmZlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvUGFydGljbGVCdWZmZXIuamF2YVxuICovXG5cbi8qKlxuICogVGhlIHBhcnRpY2xlIGJ1ZmZlciBtYW5hZ2VzIHRoZSBzdGF0aWMgYW5kIGR5bmFtaWMgYnVmZmVycyBmb3IgYSBwYXJ0aWNsZSBjb250YWluZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gUGFydGljbGVCdWZmZXIoZ2wsIHByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBzaXplKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRTaXplID0gMjtcblxuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYSBzaW5nbGUgdmVydGV4IGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGUgYnVmZmVyIGNhbiBob2xkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gc2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBkeW5hbWljLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIHN0YXRpYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcblxuICAgICAgICBpZihkeW5hbWljUHJvcGVydHlGbGFnc1tpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5keW5hbWljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuZHluYW1pY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW5pdEJ1ZmZlcnMoKTtcblxufVxuXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZUJ1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVCdWZmZXI7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmluaXRCdWZmZXJzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpO1xuICAgIHZhciBwcm9wZXJ0eTtcblxuICAgIHZhciBkeW5hbWljT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG5cbiAgICAgICAgcHJvcGVydHkub2Zmc2V0ID0gZHluYW1pY09mZnNldDtcbiAgICAgICAgZHluYW1pY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLmR5bmFtaWNTdHJpZGUgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5keW5hbWljU3RyaWRlICogNCk7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcblxuXG4gICAgLy8gc3RhdGljIC8vXG4gICAgdmFyIHN0YXRpY09mZnNldCA9IDA7XG4gICAgdGhpcy5zdGF0aWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IHN0YXRpY09mZnNldDtcbiAgICAgICAgc3RhdGljT2Zmc2V0ICs9IHByb3BlcnR5LnNpemU7XG4gICAgICAgIHRoaXMuc3RhdGljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5zdGF0aWNTdHJpZGUgKiA0KTtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNEYXRhLCBnbC5EWU5BTUlDX0RSQVcpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBkeW5hbWljIHByb3BlcnRpZXMuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUudXBsb2FkRHluYW1pYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIHByb3BlcnR5LnVwbG9hZEZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIHRoaXMuZHluYW1pY0RhdGEsIHRoaXMuZHluYW1pY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy5keW5hbWljRGF0YSk7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHN0YXRpYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZFN0YXRpYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLnN0YXRpY0RhdGEsIHRoaXMuc3RhdGljU3RyaWRlLCBwcm9wZXJ0eS5vZmZzZXQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuc3RhdGljRGF0YSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIHRvIHRoZSBHUFVcbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpLCBwcm9wZXJ0eTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuc3RhdGljU3RyaWRlICogNCwgcHJvcGVydHkub2Zmc2V0ICogNCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVCdWZmZXIuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLnN0YXRpY0J1ZmZlcik7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgUGFydGljbGVTaGFkZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlU2hhZGVyJyksXG4gICAgUGFydGljbGVCdWZmZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlQnVmZmVyJyksXG4gICAgbWF0aCAgICAgICAgICAgID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFBhcnRpY2xlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICAvLyBhbmQgbWF4IG51bWJlciBvZiBlbGVtZW50IGluIHRoZSBpbmRleCBidWZmZXIgaXMgMTYzODQgKiA2ID0gOTgzMDRcbiAgICAvLyBDcmVhdGluZyBhIGZ1bGwgaW5kZXggYnVmZmVyLCBvdmVyaGVhZCBpcyA5ODMwNCAqIDIgPSAxOTZLb1xuICAgIHZhciBudW1JbmRpY2VzID0gOTgzMDQ7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KG51bUluZGljZXMpO1xuXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCBudW1JbmRpY2VzOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gbnVsbDtcblxuICAgIHRoaXMudGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xufVxuXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbigncGFydGljbGUnLCBQYXJ0aWNsZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBXaGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gbmV3IFBhcnRpY2xlU2hhZGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlcik7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggaW5kZXgsIHNvIDY1NTM1IC8gNiA9IDEwOTIyLlxuXG4gICAgLy91cGxvYWQgdGhlIGluZGV4IGRhdGFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IFtcbiAgICAgICAgLy8gdmVydGljZXNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbixcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkVmVydGljZXMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBwb3NpdGlvbkRhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFBvc2l0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcm90YXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFSb3RhdGlvbixcbiAgICAgICAgICAgIHNpemU6MSxcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkUm90YXRpb24sXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyB1dnNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFV2cyxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIGFscGhhRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZEFscGhhLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfVxuICAgIF07XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBwYXJ0aWNsZSBiYXRjaC5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gYmluZCB0aGUgbWFpbiB0ZXh0dXJlXG4gICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAvLyBiaW5kIHRoZSBidWZmZXJzXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnNoYWRlcjtcblxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBwYXJ0aWNsZSBjb250YWluZXIgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBjaGlsZHJlbiA9IGNvbnRhaW5lci5jaGlsZHJlbixcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aCxcbiAgICAgICAgbWF4U2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemU7XG5cbiAgICBpZih0b3RhbENoaWxkcmVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIGlmKHRvdGFsQ2hpbGRyZW4gPiBtYXhTaXplKVxuICAgIHtcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IG1heFNpemU7XG4gICAgfVxuXG4gICAgaWYoIWNvbnRhaW5lci5fYnVmZmVycylcbiAgICB7XG4gICAgICAgIGNvbnRhaW5lci5fYnVmZmVycyA9IHRoaXMuZ2VuZXJhdGVCdWZmZXJzKCBjb250YWluZXIgKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXZzIGhhdmUgbm90IHVwZGF0ZWQgdGhlbiBubyBwb2ludCByZW5kZXJpbmcganVzdCB5ZXQhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb250YWluZXIuYmxlbmRNb2RlKTtcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgbSA9ICBjb250YWluZXIud29ybGRUcmFuc2Zvcm0uY29weSggdGhpcy50ZW1wTWF0cml4ICk7XG4gICAgbS5wcmVwZW5kKCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeCApO1xuICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5zaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCBtLnRvQXJyYXkodHJ1ZSkpO1xuICAgIGdsLnVuaWZvcm0xZih0aGlzLnNoYWRlci51bmlmb3Jtcy51QWxwaGEuX2xvY2F0aW9uLCBjb250YWluZXIud29ybGRBbHBoYSk7XG5cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgdGV4dHVyZSBpcyBib3VuZC4uXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gY2hpbGRyZW5bMF0uX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSB0ZXh0dXJlIGhhcyBub3QgdXBkYXRlZCB0aGVuIGxldHMgbm90IHVwbG9hZCBhbnkgc3RhdGljIHByb3BlcnRpZXNcbiAgICAgICAgaWYoIXRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZShiYXNlVGV4dHVyZSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFjb250YWluZXIuX3Byb3BlcnRpZXNbMF0gfHwgIWNvbnRhaW5lci5fcHJvcGVydGllc1szXSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICB9XG5cbiAgICAvLyBub3cgbGV0cyB1cGxvYWQgYW5kIHJlbmRlciB0aGUgYnVmZmVycy4uXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgdG90YWxDaGlsZHJlbjsgaSArPSBiYXRjaFNpemUsIGogKz0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhbW91bnQgPSAoIHRvdGFsQ2hpbGRyZW4gLSBpKTtcbiAgICAgICAgaWYoYW1vdW50ID4gYmF0Y2hTaXplKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbW91bnQgPSBiYXRjaFNpemU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYnVmZmVyID0gY29udGFpbmVyLl9idWZmZXJzW2pdO1xuXG4gICAgICAgIC8vIHdlIGFsd2F5cyB1cGxvYWQgdGhlIGR5bmFtaWNcbiAgICAgICAgYnVmZmVyLnVwbG9hZER5bmFtaWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG5cbiAgICAgICAgLy8gd2Ugb25seSB1cGxvYWQgdGhlIHN0YXRpYyBjb250ZW50IHdoZW4gd2UgaGF2ZSB0byFcbiAgICAgICAgaWYoY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9PT0gailcbiAgICAgICAge1xuICAgICAgICAgICAgYnVmZmVyLnVwbG9hZFN0YXRpYyhjaGlsZHJlbiwgaSwgYW1vdW50KTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSBqICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJpbmQgdGhlIGJ1ZmZlclxuICAgICAgICBidWZmZXIuYmluZCggdGhpcy5zaGFkZXIgKTtcblxuICAgICAgICAgLy8gbm93IGRyYXcgdGhvc2Ugc3Vja2FzIVxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBhbW91bnQgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIG9uZSBwYXJ0aWNsZSBidWZmZXIgZm9yIGVhY2ggY2hpbGQgaW4gdGhlIGNvbnRhaW5lciB3ZSB3YW50IHRvIHJlbmRlciBhbmQgdXBkYXRlcyBpbnRlcm5hbCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7UElYSS5QYXJ0aWNsZUNvbnRhaW5lcn0gVGhlIGNvbnRhaW5lciB0byByZW5kZXIgdXNpbmcgdGhpcyBQYXJ0aWNsZVJlbmRlcmVyXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmdlbmVyYXRlQnVmZmVycyA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgYnVmZmVycyA9IFtdLFxuICAgICAgICBzaXplID0gY29udGFpbmVyLl9tYXhTaXplLFxuICAgICAgICBiYXRjaFNpemUgPSBjb250YWluZXIuX2JhdGNoU2l6ZSxcbiAgICAgICAgZHluYW1pY1Byb3BlcnR5RmxhZ3MgPSBjb250YWluZXIuX3Byb3BlcnRpZXMsXG4gICAgICAgIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBiYXRjaFNpemUpXG4gICAge1xuICAgICAgICBidWZmZXJzLnB1c2gobmV3IFBhcnRpY2xlQnVmZmVyKGdsLCB0aGlzLnByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBiYXRjaFNpemUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVycztcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgdmVydGljaWVzLlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciB2ZXJ0aWNlcyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkVmVydGljZXMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIHZhciBzcHJpdGUsXG4gICAgICAgIHRleHR1cmUsXG4gICAgICAgIHRyaW0sXG4gICAgICAgIHN4LFxuICAgICAgICBzeSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKSB7XG5cbiAgICAgICAgc3ByaXRlID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldO1xuICAgICAgICB0ZXh0dXJlID0gc3ByaXRlLl90ZXh0dXJlO1xuICAgICAgICBzeCA9IHNwcml0ZS5zY2FsZS54O1xuICAgICAgICBzeSA9IHNwcml0ZS5zY2FsZS55O1xuXG4gICAgICAgIGlmICh0ZXh0dXJlLnRyaW0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZCB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG5cbiAgICAgICAgICAgIHcxID0gdHJpbS54IC0gc3ByaXRlLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGgxID0gdHJpbS55IC0gc3ByaXRlLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICBoMCA9IGgxICsgdGV4dHVyZS5jcm9wLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS1zcHJpdGUuYW5jaG9yLngpO1xuICAgICAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC1zcHJpdGUuYW5jaG9yLng7XG5cbiAgICAgICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtc3ByaXRlLmFuY2hvci55KTtcbiAgICAgICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXNwcml0ZS5hbmNob3IueTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gaDEgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IGgwICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHBvc2l0aW9ucyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUG9zaXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVQb3NpdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5wb3NpdGlvbjtcblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciByb3RhdGlvbiB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUm90YXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVSb3RhdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5yb3RhdGlvbjtcblxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVJvdGF0aW9uO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBVdnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFV2cyA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmVVdnMgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uX3RleHR1cmUuX3V2cztcblxuICAgICAgICBpZiAodGV4dHVyZVV2cylcbiAgICAgICAge1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHRleHR1cmVVdnMueDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IHRleHR1cmVVdnMueTA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB0ZXh0dXJlVXZzLngxO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSB0ZXh0dXJlVXZzLnkxO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHRleHR1cmVVdnMueDI7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSB0ZXh0dXJlVXZzLnkyO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHRleHR1cmVVdnMueDM7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSB0ZXh0dXJlVXZzLnkzO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyB5b3Uga25vdyB0aGlzIGNhbiBiZSBlYXNpZXIhXG4gICAgICAgICAgICBhcnJheVtvZmZzZXRdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIGFscGhhIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRBbHBoYSA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICAge1xuICAgICAgICB2YXIgc3ByaXRlQWxwaGEgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uYWxwaGE7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlQWxwaGE7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBQYXJ0aWNsZVJlbmRlcmVyLlxuICpcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIuZ2wpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5nbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgfVxuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG4gICAgdGhpcy50ZW1wTWF0cml4ID0gbnVsbDtcbn07XG4iLCJ2YXIgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1RleHR1cmVTaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVNoYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFRleHR1cmVTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVBvc2l0aW9uQ29vcmQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhU2NhbGU7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgZmxvYXQgYVJvdGF0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgdmVjMiB2ID0gYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICcgICB2LnggPSAoYVZlcnRleFBvc2l0aW9uLngpICogY29zKGFSb3RhdGlvbikgLSAoYVZlcnRleFBvc2l0aW9uLnkpICogc2luKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2LnkgPSAoYVZlcnRleFBvc2l0aW9uLngpICogc2luKGFSb3RhdGlvbikgKyAoYVZlcnRleFBvc2l0aW9uLnkpICogY29zKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2ID0gdiArIGFQb3NpdGlvbkNvb3JkOycsXG5cbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKHYsIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gaGVsbG9cbiAgICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IHVBbHBoYTsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciAqIHVBbHBoYTsnLFxuICAgICAgICAgICAgJyAgaWYgKGNvbG9yLmEgPT0gMC4wKSBkaXNjYXJkOycsXG4gICAgICAgICAgICAnICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB1QWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVBvc2l0aW9uQ29vcmQ6IDAsXG4gICAgICAgICAgIC8vIGFTY2FsZTogICAgICAgICAwLFxuICAgICAgICAgICAgYVJvdGF0aW9uOiAgICAgIDBcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBURU1QIEhBQ0tcblxufVxuXG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmVTaGFkZXIucHJvdG90eXBlKTtcblBhcnRpY2xlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlU2hhZGVyO1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogVGhlIENhbnZhc1JlbmRlcmVyIGRyYXdzIHRoZSBzY2VuZSBhbmQgYWxsIGl0cyBjb250ZW50IG9udG8gYSAyZCBjYW52YXMuIFRoaXMgcmVuZGVyZXIgc2hvdWxkIGJlIHVzZWQgZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgd2ViR0wuXG4gKiBEb24ndCBmb3JnZXQgdG8gYWRkIHRoZSBDYW52YXNSZW5kZXJlci52aWV3IHRvIHlvdXIgRE9NIG9yIHlvdSB3aWxsIG5vdCBzZWUgYW55dGhpbmcgOilcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc3lzdGVtIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSBzeXN0ZW0gdGhpcyByZW5kZXJlciBpcyBmb3IuXG4gKiBAcGFyYW0gW3dpZHRoPTgwMF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9NjAwXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBdIHtudW1iZXJ9IFRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSByZW5kZXJlZCBhcmVhIChzaG93biBpZiBub3QgdHJhbnNwYXJlbnQpLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFN5c3RlbVJlbmRlcmVyKHN5c3RlbSwgd2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHV0aWxzLnNheUhlbGxvKHN5c3RlbSk7XG5cbiAgICAvLyBwcmVwYXJlIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zW2ldID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zW2ldID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OU1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBvcHRpb25zID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5SRU5ERVJFUl9UWVBFLlVOS05PV05cbiAgICAgKiBAc2VlIFBJWEkuUkVOREVSRVJfVFlQRVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuVU5LTk9XTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA4MDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgODAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA2MDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHRvXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLnZpZXcgPSBvcHRpb25zLnZpZXcgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gb3B0aW9ucy5yZXNvbHV0aW9uO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy50cmFuc3BhcmVudCA9IG9wdGlvbnMudHJhbnNwYXJlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByZW5kZXIgdmlldyBzaG91bGQgYmUgcmVzaXplZCBhdXRvbWF0aWNhbGx5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IG9wdGlvbnMuYXV0b1Jlc2l6ZSB8fCBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrcyB0aGUgYmxlbmQgbW9kZXMgdXNlZnVsIGZvciB0aGlzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbWl4ZWQ+fVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIHByZXNlcnZlRHJhd2luZ0J1ZmZlciBmbGFnIGFmZmVjdHMgd2hldGhlciBvciBub3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyByZXRhaW5lZCBhZnRlciByZW5kZXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvciBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gICAgICogSWYgdGhlIHNjZW5lIGlzIE5PVCB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGEgY2FudmFzIHNpemVkIGZpbGxSZWN0IG9wZXJhdGlvbiBldmVyeSBmcmFtZSB0byBzZXQgdGhlIGNhbnZhcyBiYWNrZ3JvdW5kIGNvbG9yLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGNsZWFyUmVjdCB0byBjbGVhciB0aGUgY2FudmFzIGV2ZXJ5IGZyYW1lLlxuICAgICAqIERpc2FibGUgdGhpcyBieSBzZXR0aW5nIHRoaXMgdG8gZmFsc2UuIEZvciBleGFtcGxlIGlmIHlvdXIgZ2FtZSBoYXMgYSBjYW52YXMgZmlsbGluZyBiYWNrZ3JvdW5kIGltYWdlIHlvdSBvZnRlbiBkb24ndCBuZWVkIHRoaXMgc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdFxuICAgICAqL1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyO1xuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gICAgICogSGFuZHkgZm9yIGNyaXNwIHBpeGVsIGFydCBhbmQgc3BlZWQgb24gbGVnYWN5IGRldmljZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSBvcHRpb25zLnJvdW5kUGl4ZWxzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSAweDAwMDAwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGFuIFtSLCBHLCBCXSBhcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gJyMwMDAwMDAnO1xuXG4gICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBvcHRpb25zLmJhY2tncm91bmRDb2xvciB8fCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3I7IC8vIHJ1biBiZyBjb2xvciBzZXR0ZXJcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB0cmFuc2Zvcm06e3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpfSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCByb290IG9iamVjdCB0aGF0IHRoZSByZW5kZXJlciB0cmllZCB0byByZW5kZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbn1cblxuLy8gY29uc3RydWN0b3JcblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeXN0ZW1SZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3lzdGVtUmVuZGVyZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZpbGwgaWYgbm90IHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3lzdGVtUmVuZGVyZXIjXG4gICAgICovXG4gICAgYmFja2dyb3VuZENvbG9yOlxuICAgIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9IHV0aWxzLmhleDJzdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHV0aWxzLmhleDJyZ2IodmFsLCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB2aWV3IHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy52aWV3LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0aGlzLnZpZXcuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5hdXRvUmVzaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgYW5kIG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgQ2FudmFzIERPTSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldykge1xuICAgIGlmIChyZW1vdmVWaWV3ICYmIHRoaXMudmlldy5wYXJlbnROb2RlKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy52aWV3KTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICB0aGlzLnZpZXcgPSBudWxsO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMDtcblxuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gbnVsbDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSBudWxsO1xufTtcbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgQ2FudmFzTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ0NhbnZhcycsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5DQU5WQVM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy52aWV3LmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogdGhpcy50cmFuc3BhcmVudCB9KTtcblxuICAgIC8qKlxuICAgICAqIEJvb2xlYW4gZmxhZyBjb250cm9sbGluZyBjYW52YXMgcmVmcmVzaC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIGEgQ2FudmFzTWFza01hbmFnZXIsIGhhbmRsZXMgbWFza2luZyB3aGVuIHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc01hc2tNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBuZXcgQ2FudmFzTWFza01hbmFnZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgcHJvcGVydHkgdXNlZCB0byBzZXQgdGhlIGNhbnZhcyBzbW9vdGhpbmcgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdpbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnd2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21vekltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnb0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21zSW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIHRoaXMuX21hcEJsZW5kTW9kZXMoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge1xuICAgICAgICB3b3JsZFRyYW5zZm9ybTogbmV3IG1hdGguTWF0cml4KCksXG4gICAgICAgIHdvcmxkQWxwaGE6IDFcbiAgICB9O1xuXG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihDYW52YXNSZW5kZXJlcik7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIHRoaXMgY2FudmFzIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IG9iamVjdC5wYXJlbnQ7XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBvYmplY3Q7XG5cbiAgICBvYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgb2JqZWN0LnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIHRoaXMuY29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF07XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMgJiYgdGhpcy52aWV3LnNjcmVlbmNhbnZhcylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGVhckJlZm9yZVJlbmRlcilcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy53aWR0aCAsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChvYmplY3QsIHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGlzLmVtaXQoJ3Bvc3RyZW5kZXInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpXG57XG4gICAgdGhpcy5kZXN0cm95UGx1Z2lucygpO1xuXG4gICAgLy8gY2FsbCB0aGUgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLnJlZnJlc2ggPSB0cnVlO1xuXG4gICAgdGhpcy5tYXNrTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG5cbiAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KVxue1xuICAgIHZhciB0ZW1wQ29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJDYW52YXModGhpcyk7XG4gICAgdGhpcy5jb250ZXh0ID0gdGVtcENvbnRleHQ7XG59O1xuXG4vKipcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXIjcmVzaXplXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAodywgaClcbntcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcywgdywgaCk7XG5cbiAgICAvL3Jlc2V0IHRoZSBzY2FsZSBtb2RlLi4gb2RkbHkgdGhpcyBzZWVtcyB0byBiZSByZXNldCB3aGVuIHRoZSBjYW52YXMgaXMgcmVzaXplZC5cbiAgICAvL3N1cmVseSBhIGJyb3dzZXIgYnVnPz8gTGV0IHBpeGkgZml4IHRoYXQgZm9yIHlvdS4uXG4gICAgaWYodGhpcy5zbW9vdGhQcm9wZXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dFt0aGlzLnNtb290aFByb3BlcnR5XSA9IChDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBNYXBzIFBpeGkgYmxlbmQgbW9kZXMgdG8gY2FudmFzIGJsZW5kIG1vZGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fbWFwQmxlbmRNb2RlcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmJsZW5kTW9kZXMpXG4gICAge1xuICAgICAgICB0aGlzLmJsZW5kTW9kZXMgPSB7fTtcblxuICAgICAgICBpZiAodXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdtdWx0aXBseSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc2NyZWVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdvdmVybGF5JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdkYXJrZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ2xpZ2h0ZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ2NvbG9yLWRvZGdlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdjb2xvci1idXJuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IQVJEX0xJR0hUXSAgICA9ICdoYXJkLWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb2Z0LWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdkaWZmZXJlbmNlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5FWENMVVNJT05dICAgICA9ICdleGNsdXNpb24nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ2h1ZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc2F0dXJhdGUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ2NvbG9yJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdsdW1pbm9zaXR5JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb29sIG5ldyBibGVuZCBtb2RlcyBpbiBjYW52YXMgJ2NvdWdoJyBpZSAnY291Z2gnXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TQVRVUkFUSU9OXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBjYW52YXNcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKi9cbmZ1bmN0aW9uIENhbnZhc0J1ZmZlcih3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBDYW52YXMgb2JqZWN0IHRoYXQgYmVsb25ncyB0byB0aGlzIENhbnZhc0J1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBBIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHdvLWRpbWVuc2lvbmFsIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn1cblxuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc0J1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzQnVmZmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYW52YXNCdWZmZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB2YWw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyBidWZmZXIgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNhbnZhc0J1ZmZlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENsZWFycyB0aGUgY2FudmFzIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIENhbnZhc0J1ZmZlciBjbGFzcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgY2FudmFzIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBjYW52YXMuXG4gKlxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlciB0byBkcmF3IHRoZSBwcmltaXRpdmUgZ3JhcGhpY3MgZGF0YS5cbiAqIEBzdGF0aWNcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xudmFyIENhbnZhc0dyYXBoaWNzID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0dyYXBoaWNzO1xuXG4vKlxuICogUmVuZGVycyBhIEdyYXBoaWNzIG9iamVjdCB0byBhIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBhY3R1YWwgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIDJkIGRyYXdpbmcgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIHdvcmxkQWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljc1RpbnQoZ3JhcGhpY3MpO1xuICAgICAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuX2ZpbGxUaW50O1xuICAgICAgICB2YXIgbGluZUNvbG9yID0gZGF0YS5fbGluZVRpbnQ7XG5cbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRPRE8gLSBuZWVkIHRvIGJlIFVuZGVmaW5lZCFcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsMCwyKk1hdGguUEkpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcblxuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJ4ID0gc2hhcGUueDtcbiAgICAgICAgICAgIHZhciByeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBzaGFwZS53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgcmFkaXVzID0gc2hhcGUucmFkaXVzO1xuXG4gICAgICAgICAgICB2YXIgbWF4UmFkaXVzID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyIHwgMDtcbiAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1cyA+IG1heFJhZGl1cyA/IG1heFJhZGl1cyA6IHJhZGl1cztcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGxDb2xvciB8fCBkYXRhLmZpbGxDb2xvciA9PT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3MgbWFza1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBtYXNrXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY29udGV4dCAyZCBtZXRob2Qgb2YgdGhlIGNhbnZhc1xuICovXG5DYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIGxlbiA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG5cbiAgICBpZiAobGVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludCBhcmUgdGhlIHNhbWUgY2xvc2UgdGhlIHBhdGggLSBtdWNoIG5lYXRlciA6KVxuICAgICAgICAgICAgaWYgKHBvaW50c1swXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gJiYgcG9pbnRzWzFdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5yZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuXG4gICAgICAgICAgICAvLyBlbGxpcHNlIGNvZGUgdGFrZW4gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG5cbiAgICAgICAgICAgIHZhciB3ID0gc2hhcGUud2lkdGggKiAyO1xuICAgICAgICAgICAgdmFyIGggPSBzaGFwZS5oZWlnaHQgKiAyO1xuXG4gICAgICAgICAgICB2YXIgeCA9IHNoYXBlLnggLSB3LzI7XG4gICAgICAgICAgICB2YXIgeSA9IHNoYXBlLnkgLSBoLzI7XG5cbiAgICAgICAgICAgIHZhciBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICAgICAgICAgICAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgIHhlID0geCArIHcsICAgICAgICAgICAvLyB4LWVuZFxuICAgICAgICAgICAgICAgIHllID0geSArIGgsICAgICAgICAgICAvLyB5LWVuZFxuICAgICAgICAgICAgICAgIHhtID0geCArIHcgLyAyLCAgICAgICAvLyB4LW1pZGRsZVxuICAgICAgICAgICAgICAgIHltID0geSArIGggLyAyOyAgICAgICAvLyB5LW1pZGRsZVxuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhlLCB5bSArIG95LCB4bSArIG94LCB5ZSwgeG0sIHllKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdGludCBvZiBhIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB0aGF0IHdpbGwgaGF2ZSBpdHMgdGludCB1cGRhdGVkXG4gKlxuICovXG5DYW52YXNHcmFwaGljcy51cGRhdGVHcmFwaGljc1RpbnQgPSBmdW5jdGlvbiAoZ3JhcGhpY3MpXG57XG4gICAgaWYgKGdyYXBoaWNzLnRpbnQgPT09IDB4RkZGRkZGICYmIGdyYXBoaWNzLl9wcmV2VGludCA9PT0gZ3JhcGhpY3MudGludClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGhpY3MuX3ByZXZUaW50ID0gZ3JhcGhpY3MudGludDtcblxuICAgIHZhciB0aW50UiA9IChncmFwaGljcy50aW50ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIHRpbnRHID0gKGdyYXBoaWNzLnRpbnQgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50QiA9IChncmFwaGljcy50aW50ICYgMHhGRikvIDI1NTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuZmlsbENvbG9yIHwgMDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEubGluZUNvbG9yIHwgMDtcblxuICAgICAgICAvKlxuICAgICAgICB2YXIgY29sb3JSID0gKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JHID0gKGZpbGxDb2xvciA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIHZhciBjb2xvckIgPSAoZmlsbENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBmaWxsQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcblxuICAgICAgICBjb2xvclIgPSAobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIGNvbG9yRyA9IChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckIgPSAobGluZUNvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBsaW5lQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcbiAgICAgICAgKi9cblxuICAgICAgICAvLyBzdXBlciBpbmxpbmUgY29zIGltIGFuIG9wdGltaXphdGlvbiBOQVpJIDopXG4gICAgICAgIGRhdGEuX2ZpbGxUaW50ID0gKCgoZmlsbENvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChmaWxsQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG4gICAgICAgIGRhdGEuX2xpbmVUaW50ID0gKCgobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChsaW5lQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG5cbiAgICB9XG59O1xuXG4iLCJ2YXIgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuL0NhbnZhc0dyYXBoaWNzJyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgdG8gaGFuZGxlIG1hc2tpbmcuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDYW52YXNNYXNrTWFuYWdlcigpXG57fVxuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzTWFza01hbmFnZXI7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgYWRkcyBpdCB0byB0aGUgY3VycmVudCBzdGFjayBvZiBtYXNrcy5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge29iamVjdH0gdGhlIG1hc2tEYXRhIHRoYXQgd2lsbCBiZSBwdXNoZWRcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhLCByZW5kZXJlcilcbntcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2F2ZSgpO1xuXG4gICAgdmFyIGNhY2hlQWxwaGEgPSBtYXNrRGF0YS5hbHBoYTtcbiAgICB2YXIgdHJhbnNmb3JtID0gbWFza0RhdGEud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICAvL1RPRE8gc3Vwb3J0IHNwcml0ZSBhbHBoYSBtYXNrcz8/XG4gICAgLy9sb3RzIG9mIGVmZm9ydCByZXF1aXJlZC4gSWYgZGVtYW5kIGlzIGdyZWF0IGVub3VnaC4uXG4gICAgaWYoIW1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sobWFza0RhdGEsIHJlbmRlcmVyLmNvbnRleHQpO1xuICAgICAgICByZW5kZXJlci5jb250ZXh0LmNsaXAoKTtcbiAgICB9XG5cbiAgICBtYXNrRGF0YS53b3JsZEFscGhhID0gY2FjaGVBbHBoYTtcbn07XG5cbi8qKlxuICogUmVzdG9yZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlIHRoZSBtYXNrIHdhcyBhcHBsaWVkLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIFNwcml0ZS9UZXh0dXJlIHRpbnRpbmcuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNUaW50ZXIgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzVGludGVyO1xuXG4vKipcbiAqIEJhc2ljYWxseSB0aGlzIG1ldGhvZCBqdXN0IG5lZWRzIGEgc3ByaXRlIGFuZCBhIGNvbG9yIGFuZCB0aW50cyB0aGUgc3ByaXRlIHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIHRpbnRlZCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUgPSBmdW5jdGlvbiAoc3ByaXRlLCBjb2xvcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHNwcml0ZS50ZXh0dXJlO1xuXG4gICAgY29sb3IgPSBDYW52YXNUaW50ZXIucm91bmRDb2xvcihjb2xvcik7XG5cbiAgICB2YXIgc3RyaW5nQ29sb3IgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG5cbiAgICB0ZXh0dXJlLnRpbnRDYWNoZSA9IHRleHR1cmUudGludENhY2hlIHx8IHt9O1xuXG4gICAgaWYgKHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl07XG4gICAgfVxuXG4gICAgIC8vIGNsb25lIHRleHR1cmUuLlxuICAgIHZhciBjYW52YXMgPSBDYW52YXNUaW50ZXIuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLy9DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCh0ZXh0dXJlLCBzdHJpbmdDb2xvciwgY2FudmFzKTtcbiAgICBDYW52YXNUaW50ZXIudGludE1ldGhvZCh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKTtcblxuICAgIGlmIChDYW52YXNUaW50ZXIuY29udmVydFRpbnRUb0ltYWdlKVxuICAgIHtcbiAgICAgICAgLy8gaXMgdGhpcyBiZXR0ZXI/XG4gICAgICAgIHZhciB0aW50SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgdGludEltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcblxuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSB0aW50SW1hZ2U7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSA9IGNhbnZhcztcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCBjb252ZXJ0aW5nIHRoZSB0ZXh0dXJlIHRvIGFuIGltYWdlIHRoZW4gd2UgbmVlZCB0byBsb3NlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhc1xuICAgICAgICBDYW52YXNUaW50ZXIuY2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ211bHRpcGx5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgPSBmdW5jdGlvbiAodGV4dHVyZSwgY29sb3IsIGNhbnZhcylcbntcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgIHZhciBjcm9wID0gdGV4dHVyZS5jcm9wLmNsb25lKCk7XG4gICAgY3JvcC54ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC55ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC53aWR0aCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AuaGVpZ2h0ICo9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXMud2lkdGggPSBjcm9wLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wLmhlaWdodDtcblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tYXRvcCc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ292ZXJsYXknIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhPdmVybGF5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgY3JvcC54LFxuICAgICAgICBjcm9wLnksXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodFxuICAgICk7XG5cbiAgICAvLyBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5Jztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgcGl4ZWwgcGVyIHBpeGVsLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuICAgIHZhciByID0gcmdiVmFsdWVzWzBdLCBnID0gcmdiVmFsdWVzWzFdLCBiID0gcmdiVmFsdWVzWzJdO1xuXG4gICAgdmFyIHBpeGVsRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIHZhciBwaXhlbHMgPSBwaXhlbERhdGEuZGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGl4ZWxzLmxlbmd0aDsgaSArPSA0KVxuICAgIHtcbiAgICAgICAgcGl4ZWxzW2krMF0gKj0gcjtcbiAgICAgICAgcGl4ZWxzW2krMV0gKj0gZztcbiAgICAgICAgcGl4ZWxzW2krMl0gKj0gYjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnB1dEltYWdlRGF0YShwaXhlbERhdGEsIDAsIDApO1xufTtcblxuLyoqXG4gKiBSb3VuZHMgdGhlIHNwZWNpZmllZCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gcm91bmQsIHNob3VsZCBiZSBhIGhleCBjb2xvclxuICovXG5DYW52YXNUaW50ZXIucm91bmRDb2xvciA9IGZ1bmN0aW9uIChjb2xvcilcbntcbiAgICB2YXIgc3RlcCA9IENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuXG4gICAgcmdiVmFsdWVzWzBdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzBdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMV0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMV0gLyBzdGVwKSAqIHN0ZXApO1xuICAgIHJnYlZhbHVlc1syXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1syXSAvIHN0ZXApICogc3RlcCk7XG5cbiAgICByZXR1cm4gdXRpbHMucmdiMmhleChyZ2JWYWx1ZXMpO1xufTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygc3RlcHMgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgY2FwIHdoZW4gcm91bmRpbmcgY29sb3JzLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhY2hlU3RlcHNQZXJDb2xvckNoYW5uZWwgPSA4O1xuXG4vKipcbiAqIFRpbnQgY2FjaGUgYm9vbGVhbiBmbGFnLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSA9IGZhbHNlO1xuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkLCBjb25zZXF1ZW50bHkgdGhlIGFiaWxpdHkgdG8gdGludCB1c2luZyB0aGUgbXVsdGlwbHkgbWV0aG9kLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID0gdXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpO1xuXG4vKipcbiAqIFRoZSB0aW50aW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKi9cbkNhbnZhc1RpbnRlci50aW50TWV0aG9kID0gQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID8gQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgOiAgQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWw7XG4iLCJ2YXIgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuXHR1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgVGV4dHVyZU1hbmFnZXIgPSBmdW5jdGlvbihnbClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIHRyYWNrIHRleHR1cmVzIGluIHRoZSByZW5kZXJlciBzbyB3ZSBjYW4gbm8gbG9uZ2VyIGxpc3RlbiB0byB0aGVtIG9uIGRlc3RydWN0aW9uLlxuXHR0aGlzLl9tYW5hZ2VkVGV4dHVyZXMgPSBbXTtcbiAgICB0aGlzLmdsVGV4dHVyZXMgPSB7fTtcblxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmdldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cbi8qKlxuICogVXBkYXRlcyBhbmQvb3IgQ3JlYXRlcyBhIFdlYkdMIHRleHR1cmUgZm9yIHRoZSByZW5kZXJlcidzIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB1cGRhdGVcbiAqL1xuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG5cdGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXS8vdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG5cbiAgICBpZiAoIWdsVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGdsVGV4dHVyZSA9IG5ldyBHTFRleHR1cmUoZ2wpO1xuICAgICAgICBnbFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHRydWVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbFRleHR1cmU7XG5cbiAgICAgICAvLyB0aGlzLmdsVGV4dHVyZXNbdGV4dHVyZS51aWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgIHRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub24oJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xuICAgIH1cblxuICAgIGdsVGV4dHVyZS51cGxvYWQodGV4dHVyZS5zb3VyY2UpO1xuICAgIFxuICAgIC8vVE9ETyBjaGVjayBpcyBwb3dlciBvZiB0d28uLlxuICAgIGdsVGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuXG4gICAgLy8gVE9ETyBjaGVjayBmb3Igc2NhbGluZyB0eXBlXG4gICAgZ2xUZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKTtcblxuICAgIHJldHVybiAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG59XG5cbi8qKlxuICogRGVsZXRlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byBkZXN0cm95XG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUsIF9za2lwUmVtb3ZlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0uZGVzdHJveSgpO1xuICAgICAgICB0ZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGVUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcblxuXG4gICAgICAgIGRlbGV0ZSB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdO1xuXG4gICAgICAgIGlmICghX3NraXBSZW1vdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzLmluZGV4T2YodGV4dHVyZSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLl9tYW5hZ2VkVGV4dHVyZXMsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24oKVxue1xuXHQvLyBlbXB0eSBhbGwgdGhlIG9sZCBnbCB0ZXh0dXJlcyBhcyB0aGV5IGFyZSB1c2VsZXNzIG5vd1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIGlmICh0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgLy8gZGVzdHJveSBtYW5hZ2VkIHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgdGhpcy5kZXN0cm95VGV4dHVyZSh0ZXh0dXJlLCB0cnVlKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFuYWdlZFRleHR1cmVzID0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlTWFuYWdlcjtcblxuIiwidmFyIFN5c3RlbVJlbmRlcmVyID0gcmVxdWlyZSgnLi4vU3lzdGVtUmVuZGVyZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL01hc2tNYW5hZ2VyJyksXG4gICAgU3RlbmNpbE1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyJyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIEJsZW5kTW9kZU1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIEZYQUFGaWx0ZXIgPSByZXF1aXJlKCcuL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi9UZXh0dXJlTWFuYWdlcicpLFxuICAgIGNyZWF0ZUNvbnRleHQgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5jcmVhdGVDb250ZXh0LFxuICAgIG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aSA9IHJlcXVpcmUoJy4vdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpJyksXG4gICAgbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgV2ViR0xSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgd2ViR0wgZW5hYmxlZCBjYW52YXMuIFRoaXMgcmVuZGVyZXJcbiAqIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wuIFRoaXMgUmVuZGVyIHdvcmtzIGJ5IGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgd2ViR0xCYXRjaHMuXG4gKiBTbyBubyBuZWVkIGZvciBTcHJpdGUgQmF0Y2hlcyBvciBTcHJpdGUgQ2xvdWRzLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgdmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD0wXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD0wXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcy4gSWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseSB0aGVuIEZYQUEgYW50aWFsaWFzaW5nIGlzIHVzZWRcbiAqIEBwYXJhbSBbb3B0aW9ucy5mb3JjZUZYQUE9ZmFsc2VdIHtib29sZWFufSBmb3JjZXMgRlhBQSBhbnRpYWxpYXNpbmcgdG8gYmUgdXNlZCBvdmVyIG5hdGl2ZS4gRlhBQSBpcyBmYXN0ZXIsIGJ1dCBtYXkgbm90IGFsd2F5cyBsb29rIGFzIGdyZWF0XG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLiBJZiB5b3Ugd2lzaCB0byBzZXQgdGhpcyB0byBmYWxzZSwgeW91ICptdXN0KiBzZXQgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHRvIGB0cnVlYC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWZcbiAqICAgICAgeW91IG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHQuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgU3lzdGVtUmVuZGVyZXIuY2FsbCh0aGlzLCAnV2ViR0wnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgcmVuZGVyZXIgYXMgYSBzdGFuZGFyZGlzZWQgY29uc3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0vL1xuICAgICAqXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQgPSB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHBhc3NlZCBpbiB0byBjcmVhdGUgYSBuZXcgd2ViZ2wgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0ge1xuICAgICAgICBhbHBoYTogdGhpcy50cmFuc3BhcmVudCxcbiAgICAgICAgYW50aWFsaWFzOiBvcHRpb25zLmFudGlhbGlhcyxcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnRyYW5zcGFyZW50ICYmIHRoaXMudHJhbnNwYXJlbnQgIT09ICdub3RNdWx0aXBsaWVkJyxcbiAgICAgICAgc3RlbmNpbDogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgIH07XG5cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhWzNdID0gdGhpcy50cmFuc3BhcmVudCA/IDAgOiAxO1xuXG4gICAgLyoqXG4gICAgICogRGVhbHMgd2l0aCBtYW5hZ2luZyB0aGUgc2hhZGVyIHByb2dyYW1zIGFuZCB0aGVpciBhdHRyaWJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG5ldyBTaGFkZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWFza3MgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IE1hc2tNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIgPSBuZXcgU3RlbmNpbE1hbmFnZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5GaWx0ZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgYmxlbmRNb2Rlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CbGVuZE1vZGVNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlciA9IG5ldyBCbGVuZE1vZGVNYW5hZ2VyKHRoaXMpO1xuXG4gICAgXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgT2JqZWN0UmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk9iamVjdFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbmV3IE9iamVjdFJlbmRlcmVyKHRoaXMpO1xuXG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBzbyBpdCBpcyByZWFkeSBmb3IgdGhlIG1hbmFnZXJzLlxuICAgIHRoaXMuZ2wgPSBjcmVhdGVDb250ZXh0KHRoaXMudmlldywgdGhpcy5fY29udGV4dE9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcblxuICAgIC8vIG1hcCBzb21lIHdlYkdMIGJsZW5kIGFuZCBkcmF3bW9kZXMuLlxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aShnbCk7XG4gICAgdGhpcy5kcmF3TW9kZXMgPSBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbClcblxuICAgIHRoaXMuX2FjdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldH1cbiAgICAgKi9cbiAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihXZWJHTFJlbmRlcmVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBXZWJHTCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuX2luaXRDb250ZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgLy8gY3JlYXRlIGEgdGV4dHVyZSBtYW5hZ2VyLi4uXG4gICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG5ldyBUZXh0dXJlTWFuYWdlcihnbCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIGRlZmF1bHQgcGl4aSBzZXR0aW5ncy4uXG4gICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcblxuXG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG51bGwsIHRoaXMucmVzb2x1dGlvbiwgdHJ1ZSk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LmNsZWFyQ29sb3IgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhO1xuICAgIFxuICAgIHRoaXMuYmluZFJlbmRlclRhcmdldCh0aGlzLnJvb3RSZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy5lbWl0KCdjb250ZXh0JywgZ2wpO1xuXG4gICAgLy8gc2V0dXAgdGhlIHdpZHRoL2hlaWdodCBwcm9wZXJ0aWVzIGFuZCBnbCB2aWV3cG9ydFxuICAgIHRoaXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsgICAgXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBpdHMgd2ViR0wgdmlld1xuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gdGhlIG9iamVjdCB0byBiZSByZW5kZXJlZFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdClcbntcbiAgICB0aGlzLmVtaXQoJ3ByZXJlbmRlcicpO1xuXG4gICAgLy8gbm8gcG9pbnQgcmVuZGVyaW5nIGlmIG91ciBjb250ZXh0IGhhcyBiZWVuIGJsb3duIHVwIVxuICAgIGlmICh0aGlzLmdsLmlzQ29udGV4dExvc3QoKSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBkaXNwbGF5T2JqZWN0O1xuXG4gICAgdmFyIGNhY2hlUGFyZW50ID0gZGlzcGxheU9iamVjdC5wYXJlbnQ7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgZGlzcGxheU9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICBkaXNwbGF5T2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIHRoaXMucm9vdFJlbmRlclRhcmdldCwgdGhpcy5jbGVhckJlZm9yZVJlbmRlcik7Ly90aGlzLnByb2plY3Rpb24pO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBEaXNwbGF5IE9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSBUaGUgcmVuZGVyIHRhcmdldCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgZGlzcGxheSBvYmplY3RcbiAqXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcmVuZGVyVGFyZ2V0LCBjbGVhcikvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblxuICAgIGlmKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIGZpbHRlciBtYW5hZ2VyXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnNldEZpbHRlclN0YWNrKCByZW5kZXJUYXJnZXQuZmlsdGVyU3RhY2sgKTtcblxuICAgIC8vIHJlbmRlciB0aGUgc2NlbmUhXG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJXZWJHTCh0aGlzKTtcblxuICAgIC8vIGZpbmlzaCB0aGUgY3VycmVudCByZW5kZXJlci4uXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXJlciB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSBvYmplY3RSZW5kZXJlciB7UElYSS5PYmplY3RSZW5kZXJlcn0gVGhlIG9iamVjdCByZW5kZXJlciB0byB1c2UuXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldE9iamVjdFJlbmRlcmVyID0gZnVuY3Rpb24gKG9iamVjdFJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRSZW5kZXJlciA9PT0gb2JqZWN0UmVuZGVyZXIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RvcCgpO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gb2JqZWN0UmVuZGVyZXI7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgd2ViR0wgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHdlYkdMIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHdlYkdMIHZpZXdcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSB0aGlzLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRvIHRoZSBvbmUgZ2l2ZW4gaW4gcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9IHRoZSBuZXcgcmVuZGVyIHRhcmdldFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5iaW5kUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICBpZihyZW5kZXJUYXJnZXQgIT09IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBpZih0aGlzLl9hY3RpdmVTaGFkZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gcmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuc2V0TWFza1N0YWNrKCByZW5kZXJUYXJnZXQuc3RlbmNpbE1hc2tTdGFjayApO1xuICAgIH1cbn1cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFNoYWRlciA9IGZ1bmN0aW9uIChzaGFkZXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgLy9UT0RPIGNhY2hlXG4gICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyICE9PSBzaGFkZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBzaGFkZXI7XG4gICAgICAgIHNoYWRlci5iaW5kKCk7XG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB9XG59XG5cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgbG9jYXRpb24pXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vVE9ETyB0ZXN0IHBlcmYgb2YgY2FjaGU/XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCAwO1xuXG4gICAgaWYodGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uICE9PSBsb2NhdGlvbikvL1xuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uID0gbG9jYXRpb25cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uICk7XG4gICAgfVxuXG4gICAgLy9UT0RPIC0gY2FuIHdlIGNhY2hlIHRoaXMgdGV4dHVyZSB0b28/XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7ICAgICAgXG4gICAgXG4gICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIGJpbmQgdGhlIHRleHR1cmUuLlxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXS5iaW5kKCk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogSGFuZGxlcyBhIGxvc3Qgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRMb3N0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgYSByZXN0b3JlZCB3ZWJnbCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9pbml0Q29udGV4dCgpO1xuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIucmVtb3ZlQWxsKCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciAoZXZlbnQgbGlzdGVuZXJzLCBzcHJpdGViYXRjaCwgZXRjLi4uKVxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIHJlbW92ZSBsaXN0ZW5lcnNcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuaGFuZGxlQ29udGV4dExvc3QpO1xuICAgIHRoaXMudmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkKTtcblxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIuZGVzdHJveUFsbCgpO1xuXG4gICAgLy8gY2FsbCBiYXNlIGRlc3Ryb3lcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHJlbW92ZVZpZXcpO1xuXG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgLy8gZGVzdHJveSB0aGUgbWFuYWdlcnNcbiAgICB0aGlzLnNoYWRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSBudWxsO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0gbnVsbDtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICB0aGlzLmdsID0gbnVsbDtcbn07XG5cbiIsInZhciBEZWZhdWx0U2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBQSVhJIGZpbHRlci4gQ3VycmVudGx5IG9ubHkgV2ViR0wgc3VwcG9ydHMgZmlsdGVycy5cbiAqIElmIHlvdSB3YW50IHRvIG1ha2UgYSBjdXN0b20gZmlsdGVyIHRoaXMgc2hvdWxkIGJlIHlvdXIgYmFzZSBjbGFzcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdmVydGV4U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIGZyYWdtZW50U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlIGFzIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gdW5pZm9ybXMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuaWZvcm1zIGZvciB0aGlzIGZpbHRlci5cbiAqL1xuZnVuY3Rpb24gQWJzdHJhY3RGaWx0ZXIodmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMpXG57XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBzaGFkZXJzXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVycyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4dHJhIHBhZGRpbmcgdGhhdCB0aGUgZmlsdGVyIG1pZ2h0IG5lZWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmlmb3JtcyBhcyBhbiBvYmplY3RcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29kZSBvZiB0aGUgdmVydGV4IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIGZyYW1lbnQgc2hhZGVyXG4gICAgICogQG1lbWJlciB7c3RyaW5nW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICAvL1RPRE8gYSByZW1pbmRlciAtIHdvdWxkIGJlIGNvb2wgdG8gaGF2ZSBsb3dlciByZXMgZmlsdGVycyBhcyB0aGlzIHdvdWxkIGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlLlxuXG4gICAgLy90eXBlb2YgZnJhZ21lbnRTcmMgPT09ICdzdHJpbmcnID8gZnJhZ21lbnRTcmMuc3BsaXQoJycpIDogKGZyYWdtZW50U3JjIHx8IFtdKTtcblxufVxuXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RGaWx0ZXI7XG5cbi8qKlxuICogR3JhYnMgYSBzaGFkZXIgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIHNoYWRlciBmcm9tXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5nZXRTaGFkZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXJzW2dsLmlkXTtcblxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gbmV3IERlZmF1bHRTaGFkZXIocmVuZGVyZXIuc2hhZGVyTWFuYWdlcixcbiAgICAgICAgICAgIHRoaXMudmVydGV4U3JjLFxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudFNyYyxcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNoYWRlcnNbZ2wuaWRdID0gc2hhZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8gY2xlYXIgdGhlIG91dHB1dFRhcmdldFxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xufTtcblxuLyoqXG4gKiBTeW5jcyBhIHVuaWZvcm0gYmV0d2VlbiB0aGUgY2xhc3Mgb2JqZWN0IGFuZCB0aGUgc2hhZGVycy5cbiAqXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5zaGFkZXJzLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyc1tpXS5zeW5jVW5pZm9ybSh1bmlmb3JtKTtcbiAgICB9XG59O1xuIiwidmFyIEFic3RyYWN0RmlsdGVyID0gcmVxdWlyZSgnLi9BYnN0cmFjdEZpbHRlcicpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqXG4gKiBCYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXG4gKiBtb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcbiAqIHVuc3VwcG9ydGVkIGJ5IFdlYkdMLlxuICpcbiAqIC0tXG4gKiBGcm9tOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKlxuICovXG5mdW5jdGlvbiBGWEFBRmlsdGVyKClcbntcbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG5cXG52b2lkIHRleGNvb3Jkcyh2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTlcsIG91dCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JTVywgb3V0IHZlYzIgdl9yZ2JTRSxcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjMiBpbnZlcnNlVlAgPSAxLjAgLyByZXNvbHV0aW9uLnh5O1xcbiAgICB2X3JnYk5XID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk5FID0gKGZyYWdDb29yZCArIHZlYzIoMS4wLCAtMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU1cgPSAoZnJhZ0Nvb3JkICsgdmVjMigtMS4wLCAxLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JTRSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiTSA9IHZlYzIoZnJhZ0Nvb3JkICogaW52ZXJzZVZQKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxuICAgdlJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xcblxcbiAgIC8vY29tcHV0ZSB0aGUgdGV4dHVyZSBjb29yZHMgYW5kIHNlbmQgdGhlbSB0byB2YXJ5aW5nc1xcbiAgIHRleGNvb3JkcyhhVGV4dHVyZUNvb3JkICogcmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgdl9yZ2JOVywgdl9yZ2JORSwgdl9yZ2JTVywgdl9yZ2JTRSwgdl9yZ2JNKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcblxcbi8qKlxcbkJhc2ljIEZYQUEgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGNvZGUgb24gZ2Vla3MzZC5jb20gd2l0aCB0aGVcXG5tb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcXG51bnN1cHBvcnRlZCBieSBXZWJHTC5cXG5cXG4tLVxcblxcbkZyb206XFxuaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcXG5cXG5Db3B5cmlnaHQgKGMpIDIwMTEgYnkgQXJtaW4gUm9uYWNoZXIuXFxuXFxuU29tZSByaWdodHMgcmVzZXJ2ZWQuXFxuXFxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxcbm1ldDpcXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXFxuICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcXG4gICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcXG4gICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXFxuXFxuICAgICogVGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3JcXG4gICAgICBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWNcXG4gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXFxuXFxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xcblxcXCJBUyBJU1xcXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXFxuQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcXG5PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcXG5TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXFxuVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXFxuKi9cXG5cXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01JTlxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvIDEyOC4wKVxcbiNlbmRpZlxcbiNpZm5kZWYgRlhBQV9SRURVQ0VfTVVMXFxuICAgICNkZWZpbmUgRlhBQV9SRURVQ0VfTVVMICAgKDEuMCAvIDguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfU1BBTl9NQVhcXG4gICAgI2RlZmluZSBGWEFBX1NQQU5fTUFYICAgICA4LjBcXG4jZW5kaWZcXG5cXG4vL29wdGltaXplZCB2ZXJzaW9uIGZvciBtb2JpbGUsIHdoZXJlIGRlcGVuZGVudFxcbi8vdGV4dHVyZSByZWFkcyBjYW4gYmUgYSBib3R0bGVuZWNrXFxudmVjNCBmeGFhKHNhbXBsZXIyRCB0ZXgsIHZlYzIgZnJhZ0Nvb3JkLCB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk5XLCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYlNXLCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjNCBjb2xvcjtcXG4gICAgbWVkaXVtcCB2ZWMyIGludmVyc2VWUCA9IHZlYzIoMS4wIC8gcmVzb2x1dGlvbi54LCAxLjAgLyByZXNvbHV0aW9uLnkpO1xcbiAgICB2ZWMzIHJnYk5XID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JOVykueHl6O1xcbiAgICB2ZWMzIHJnYk5FID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JORSkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTVykueHl6O1xcbiAgICB2ZWMzIHJnYlNFID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTRSkueHl6O1xcbiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JNKTtcXG4gICAgdmVjMyByZ2JNICA9IHRleENvbG9yLnh5ejtcXG4gICAgdmVjMyBsdW1hID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTtcXG4gICAgZmxvYXQgbHVtYU5XID0gZG90KHJnYk5XLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KHJnYk5FLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gZG90KHJnYlNXLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNFID0gZG90KHJnYlNFLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KHJnYk0sICBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU1pbiA9IG1pbihsdW1hTSwgbWluKG1pbihsdW1hTlcsIGx1bWFORSksIG1pbihsdW1hU1csIGx1bWFTRSkpKTtcXG4gICAgZmxvYXQgbHVtYU1heCA9IG1heChsdW1hTSwgbWF4KG1heChsdW1hTlcsIGx1bWFORSksIG1heChsdW1hU1csIGx1bWFTRSkpKTtcXG5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpcjtcXG4gICAgZGlyLnggPSAtKChsdW1hTlcgKyBsdW1hTkUpIC0gKGx1bWFTVyArIGx1bWFTRSkpO1xcbiAgICBkaXIueSA9ICAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuXFxuICAgIGZsb2F0IGRpclJlZHVjZSA9IG1heCgobHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFKSAqXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNSAqIEZYQUFfUkVEVUNFX01VTCksIEZYQUFfUkVEVUNFX01JTik7XFxuXFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvIChtaW4oYWJzKGRpci54KSwgYWJzKGRpci55KSkgKyBkaXJSZWR1Y2UpO1xcbiAgICBkaXIgPSBtaW4odmVjMihGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgIG1heCh2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBkaXIgKiByY3BEaXJNaW4pKSAqIGludmVyc2VWUDtcXG5cXG4gICAgdmVjMyByZ2JBID0gMC41ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDEuMCAvIDMuMCAtIDAuNSkpLnh5eiArXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMi4wIC8gMy4wIC0gMC41KSkueHl6KTtcXG4gICAgdmVjMyByZ2JCID0gcmdiQSAqIDAuNSArIDAuMjUgKiAoXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAtMC41KS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogMC41KS54eXopO1xcblxcbiAgICBmbG9hdCBsdW1hQiA9IGRvdChyZ2JCLCBsdW1hKTtcXG4gICAgaWYgKChsdW1hQiA8IGx1bWFNaW4pIHx8IChsdW1hQiA+IGx1bWFNYXgpKVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkEsIHRleENvbG9yLmEpO1xcbiAgICBlbHNlXFxuICAgICAgICBjb2xvciA9IHZlYzQocmdiQiwgdGV4Q29sb3IuYSk7XFxuICAgIHJldHVybiBjb2xvcjtcXG59XFxuXFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGZ4YWEodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKiB2UmVzb2x1dGlvbiwgdlJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxuXFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG59XG5cbkZYQUFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRlhBQUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGWEFBRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBGWEFBRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cbkZYQUFGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlciggcmVuZGVyZXIgKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBTcHJpdGVNYXNrRmlsdGVyIGNsYXNzXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSB0YXJnZXQgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZU1hc2tGaWx0ZXIoc3ByaXRlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgICB2TWFza0Nvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFza0Nvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgLy8gY2hlY2sgY2xpcCEgdGhpcyB3aWxsIHN0b3AgdGhlIG1hc2sgYmxlZWRpbmcgb3V0IGZyb20gdGhlIGVkZ2VzXFxuICAgIHZlYzIgdGV4dCA9IGFicyggdk1hc2tDb29yZCAtIDAuNSApO1xcbiAgICB0ZXh0ID0gc3RlcCgwLjUsIHRleHQpO1xcbiAgICBmbG9hdCBjbGlwID0gMS4wIC0gbWF4KHRleHQueSwgdGV4dC54KTtcXG4gICAgdmVjNCBvcmlnaW5hbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgIHZlYzQgbWFza3kgPSB0ZXh0dXJlMkQobWFzaywgdk1hc2tDb29yZCk7XFxuICAgIG9yaWdpbmFsICo9IChtYXNreS5yICogbWFza3kuYSAqIGFscGhhICogY2xpcCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG9yaWdpbmFsO1xcbn1cXG5cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbWFzazogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUuX3RleHR1cmUgfSxcbiAgICAgICAgICAgIGFscGhhOiAgICAgICAgICB7IHR5cGU6ICdmJywgdmFsdWU6IDF9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcbn1cblxuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0byByZXRyaWV2ZSB0aGUgZmlsdGVyIGZyb21cbiAqIEBwYXJhbSBpbnB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gb3V0cHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqL1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5tYXNrLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLl90ZXh0dXJlO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLndvcmxkQWxwaGE7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZU1hc2tGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgdXNlZCB0byBtb3ZlIHRoZSBkaXNwbGFjZW1lbnQgbWFwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdsTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBCbGVuZE1vZGVNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn1cblxuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZE1vZGVNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGVNYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMtdXAgdGhlIGdpdmVuIGJsZW5kTW9kZSBmcm9tIFdlYkdMJ3MgcG9pbnQgb2Ygdmlldy5cbiAqXG4gKiBAcGFyYW0gYmxlbmRNb2RlIHtudW1iZXJ9IHRoZSBibGVuZE1vZGUsIHNob3VsZCBiZSBhIFBpeGkgY29uc3QsIHN1Y2ggYXMgYFBJWEkuQkxFTkRfTU9ERVMuQUREYC4gU2VlXG4gKiAge0BsaW5rIFBJWEkuQkxFTkRfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLnNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChibGVuZE1vZGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblxuICAgIHZhciBtb2RlID0gdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuY3VycmVudEJsZW5kTW9kZV07XG4gICAgdGhpcy5yZW5kZXJlci5nbC5ibGVuZEZ1bmMobW9kZVswXSwgbW9kZVsxXSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgUXVhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL1F1YWQnKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXTtcblxuICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgIHJlbmRlclRhcmdldDpyZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LFxuICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgIGJvdW5kczpudWxsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldFtdfVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICAvLyBsaXN0ZW4gZm9yIGNvbnRleHQgYW5kIHVwZGF0ZSBuZWNlc3NhcnkgYnVmZmVyc1xuICAgIC8vVE9ETyBtYWtlIHRoaXMgZHluYW1pYyFcbiAgICAvL1RPRE8gdGVzdCB0aGlzIG91dCBieSBmb3JjZXMgcG93ZXIgb2YgdHdvP1xuICAgIHRoaXMudGV4dHVyZVNpemUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgcmVuZGVyZXIud2lkdGgsIHJlbmRlcmVyLmhlaWdodCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmcmFtZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBudWxsO1xufVxuXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbHRlck1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlck1hbmFnZXI7XG5cblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVQb29sLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucXVhZCA9IG5ldyBRdWFkKGdsKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcGFyYW0gYnVmZmVyIHtBcnJheUJ1ZmZlcn1cbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuc2V0RmlsdGVyU3RhY2sgPSBmdW5jdGlvbiAoIGZpbHRlclN0YWNrIClcbntcbiAgICB0aGlzLmZpbHRlclN0YWNrID0gZmlsdGVyU3RhY2s7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlciBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGZpbHRlcnMge1BJWEkuQWJzdHJhY3RGaWxlcltdfSB0aGUgZmlsdGVycyB0aGF0IHdpbGwgYmUgcHVzaGVkIHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFja1xuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5wdXNoRmlsdGVyID0gZnVuY3Rpb24gKHRhcmdldCwgZmlsdGVycylcbntcbiAgICAvLyBnZXQgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0Li5cbiAgICAvLyBUT0RPIHJlcGxhY2UgY2xvbmUgd2l0aCBhIGNvcHkgdG8gc2F2ZSBvYmplY3QgY3JlYXRpb25cbiAgICB2YXIgYm91bmRzID0gdGFyZ2V0LmZpbHRlckFyZWEgPyB0YXJnZXQuZmlsdGVyQXJlYS5jbG9uZSgpIDogdGFyZ2V0LmdldEJvdW5kcygpO1xuXG4gICAgLy9ib3VuZHMgPSBib3VuZHMuY2xvbmUoKTtcblxuICAgIC8vIHJvdW5kIG9mZiB0aGUgcmVjdGFuZ2xlIHRvIGdldCBhIG5pY2Ugc21vb29vb29vdGggZmlsdGVyIDopXG4gICAgYm91bmRzLnggPSBib3VuZHMueCB8IDA7XG4gICAgYm91bmRzLnkgPSBib3VuZHMueSB8IDA7XG4gICAgYm91bmRzLndpZHRoID0gYm91bmRzLndpZHRoIHwgMDtcbiAgICBib3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCB8IDA7XG5cblxuICAgIC8vIHBhZGRpbmchXG4gICAgdmFyIHBhZGRpbmcgPSBmaWx0ZXJzWzBdLnBhZGRpbmcgfCAwO1xuICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLnkgLT0gcGFkZGluZztcbiAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcblxuXG4gICAgaWYodGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vVE9ETyB0aGlzIHdpbGwgYnJlYWsgaWYgdGhlIHJlbmRlclRleHR1cmUgdHJhbnNmb3JtIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYSB0cmFuc2xhdGlvbi5cbiAgICAgICAgLy9XaWxsIG5lZWQgdG8gdGFrZSB0aGUgZnVsbCBtYXRyaXggdHJhbnNmb3JtIGludG8gYWNvdW50Li5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm07XG5cbiAgICAgICAgYm91bmRzLnggKz0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSArPSB0cmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdGhpcy5jYXBGaWx0ZXJBcmVhKCBib3VuZHMgKTtcblxuICAgICAgICBib3VuZHMueCAtPSB0cmFuc2Zvcm0udHg7XG4gICAgICAgIGJvdW5kcy55IC09IHRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG4gICAgfVxuXG4gICAgaWYoYm91bmRzLndpZHRoID4gMCAmJiBib3VuZHMuaGVpZ2h0ID4gMClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gYm91bmRzO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBjbGVhciB0aGUgdGV4dHVyZS4uXG4gICAgICAgIHRleHR1cmUuY2xlYXIoKTtcblxuICAgICAgICAvLyBUT0RPIGdldCByaWQgb2Ygb2JqZWN0IGNyZWF0aW9uIVxuICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OiB0ZXh0dXJlLFxuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJzXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIHB1c2ggc29tdGhpbmcgb24gdG8gdGhlIHN0YWNrIHRoYXQgaXMgZW1wdHlcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucG9wRmlsdGVyID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2sucG9wKCk7XG4gICAgdmFyIHByZXZpb3VzRmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2tbdGhpcy5maWx0ZXJTdGFjay5sZW5ndGgtMV07XG5cbiAgICB2YXIgaW5wdXQgPSBmaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIGlmIHRoZSByZW5kZXJUYXJnZXQgaXMgbnVsbCB0aGVuIHdlIGRvbid0IGFwcGx5IHRoZSBmaWx0ZXIgYXMgaXRzIG9mZnNjcmVlblxuICAgIGlmKCFmaWx0ZXJEYXRhLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gcHJldmlvdXNGaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIHVzZSBwcm9ncmFtXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpbnB1dC5mcmFtZTtcblxuICAgIHRoaXMucXVhZC5tYXAodGhpcy50ZXh0dXJlU2l6ZSwgaW5wdXQuZnJhbWUpO1xuXG5cbiAgICAvLyBUT0RPLi4gdGhpcyBwcm9iYWJseSBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBmaWx0ZXJzID0gZmlsdGVyRGF0YS5maWx0ZXI7XG5cbiAgICAvLyBhc3N1bWluZyBhbGwgZmlsdGVycyBmb2xsb3cgdGhlIGNvcnJlY3QgZm9ybWF0Pz9cbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgbm9ybWFsIGJsZW5kbW9kZSFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKENPTlNULkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDEpXG4gICAge1xuICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICBpZiAoZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJzWzBdLmFwcGx5RmlsdGVyKCB0aGlzLnJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0ICk7XG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBpbnB1dCApO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBmbGlwVGV4dHVyZSA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcFRleHR1cmUgPSB0aGlzLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGZpbHRlcnNbaV07XG5cbiAgICAgICAgICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSB0aGVuIHNldHRpbmcgdGhpcyBlYWNoIHRpbWU/XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlci5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIGZsb3BUZXh0dXJlICk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gZmxpcFRleHR1cmU7XG4gICAgICAgICAgICBmbGlwVGV4dHVyZSA9IGZsb3BUZXh0dXJlO1xuICAgICAgICAgICAgZmxvcFRleHR1cmUgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aC0xXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIG91dHB1dCApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBmbGlwVGV4dHVyZSApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxvcFRleHR1cmUgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyRGF0YS5maWx0ZXI7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgUmVuZGVyVGFyZ2V0XG4gKiBAcmV0dXJuIHtSZW5kZXJUYXJnZXR9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICggY2xlYXIgKVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSB0aGlzLnRleHR1cmVQb29sLnBvcCgpIHx8IG5ldyBSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJlci5nbCwgdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQsIENPTlNULlNDQUxFX01PREVTLkxJTkVBUiwgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uICogQ09OU1QuRklMVEVSX1JFU09MVVRJT04pO1xuICAgIHJlbmRlclRhcmdldC5mcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJUYXJnZXQ7XG59O1xuXG4vKlxuICogUmV0dXJucyBhIFJlbmRlclRhcmdldCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UmVuZGVyVGFyZ2V0fSBUaGUgUmVuZGVyVGFyZ2V0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnJldHVyblJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5wdXNoKCByZW5kZXJUYXJnZXQgKTtcbn07XG5cbi8qXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBzaGFkZXIge1NoYWRlcn0gVGhlIHNoYWRlciB0byB1cGxvYWRcbiAqIEBwYXJhbSBpbnB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAoc2hhZGVyLCBpbnB1dFRhcmdldCwgb3V0cHV0VGFyZ2V0LCBjbGVhcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQob3V0cHV0VGFyZ2V0KTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIG91dHB1dFRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2hhZGVyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBDYW4gdGhpcyBiZSBjYWNoZWQgYW5kIG5vdCBgdG9BcnJheWBlZCBlYWNoIGZyYW1lP1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcblxuICAgIC8vVE9ETyBjYW4gdGhpcyBiZSBvcHRpbWlzZWQ/XG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuLypcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMiAqIDQgKiA0KTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuKi9cblxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGlucHV0VGFyZ2V0LnRleHR1cmUpO1xuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIG1hcHBlZCBtYXRyaXhcbiAqIEBwYXJhbSBmaWx0ZXJBcmVhIHtSZWN0YW5nbGV9IFRoZSBmaWx0ZXIgYXJlYVxuICogQHBhcmFtIHNwcml0ZSB7U3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICogQHBhcmFtIG91dHB1dE1hdHJpeCB7TWF0cml4fSBAYWx2aW5cbiAqL1xuLy8gVE9ETyBwbGF5aW5nIGFyb3VuZCBoZXJlLi4gdGhpcyBpcyB0ZW1wb3JhcnkgLSAod2lsbCBlbmQgdXAgaW4gdGhlIHNoYWRlcilcbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeCA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhLCBzcHJpdGUsIG91dHB1dE1hdHJpeClcbntcbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBzcHJpdGUud29ybGRUcmFuc2Zvcm0uY29weShtYXRoLk1hdHJpeC5URU1QX01BVFJJWCksXG4gICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIHZhciBtYXBwZWRNYXRyaXggPSBvdXRwdXRNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIC8vIHNjYWxlLi5cbiAgICB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICBtYXBwZWRNYXRyaXgudHJhbnNsYXRlKGZpbHRlckFyZWEueCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIGZpbHRlckFyZWEueSAvIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0ICk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIHJhdGlvKTtcblxuICAgIHZhciB0cmFuc2xhdGVTY2FsZVggPSAodGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAvIHRleHR1cmUud2lkdGgpO1xuICAgIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0ZXh0dXJlLmhlaWdodCk7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS50eCAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuICAgIHdvcmxkVHJhbnNmb3JtLnR5IC89IHRleHR1cmUud2lkdGggKiB0cmFuc2xhdGVTY2FsZVg7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIG1hcHBlZE1hdHJpeC5wcmVwZW5kKHdvcmxkVHJhbnNmb3JtKTtcblxuICAgIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIG1hcHBlZE1hdHJpeC5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShzcHJpdGUuYW5jaG9yLngsIHNwcml0ZS5hbmNob3IueSk7XG5cbiAgICByZXR1cm4gbWFwcGVkTWF0cml4O1xuXG4gICAgLy8gS2VlcGluZyB0aGUgb3JnaW5hbCBhcyBhIHJlbWluZGVyIHRvIG1lIG9uIGhvdyB0aGlzIHdvcmtzIVxuICAgIC8vXG4gICAgLy8gdmFyIG0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuICAgIC8vIC8vIHNjYWxlLi5cbiAgICAvLyB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICAvLyBtLnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCk7XG5cblxuICAgIC8vIG0uc2NhbGUoMSAsIHJhdGlvKTtcblxuXG4gICAgLy8gdmFyIHRyYW5zZm9ybSA9IHd0LmNsb25lKCk7XG5cbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyA2MjApO1xuICAgIC8vIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyAzODApO1xuXG4gICAgLy8gdHJhbnNmb3JtLnR4IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICAvLyB0cmFuc2Zvcm0udHkgLz0gNjIwICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgLy8gdHJhbnNmb3JtLmludmVydCgpO1xuXG4gICAgLy8gdHJhbnNmb3JtLmFwcGVuZChtKTtcblxuICAgIC8vIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIC8vIHRyYW5zZm9ybS5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgLy8gcmV0dXJuIHRyYW5zZm9ybTtcbn07XG5cbi8qXG4gKiBDb25zdHJhaW5zIHRoZSBmaWx0ZXIgYXJlYSB0byB0aGUgdGV4dHVyZSBzaXplXG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWEgd2Ugd2FudCB0byBjYXBcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY2FwRmlsdGVyQXJlYSA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhKVxue1xuICAgIGlmIChmaWx0ZXJBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCArPSBmaWx0ZXJBcmVhLng7XG4gICAgICAgIGZpbHRlckFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlckFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLmhlaWdodCArPSBmaWx0ZXJBcmVhLnk7XG4gICAgICAgIGZpbHRlckFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnggKyBmaWx0ZXJBcmVhLndpZHRoID4gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLndpZHRoID0gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAtIGZpbHRlckFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGZpbHRlckFyZWEueSArIGZpbHRlckFyZWEuaGVpZ2h0ID4gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAtIGZpbHRlckFyZWEueTtcbiAgICB9XG59O1xuXG4vKlxuICogUmVzaXplcyBhbGwgdGhlIHJlbmRlciB0YXJnZXRzIGluIHRoZSBwb29sXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMudGV4dHVyZVNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZVBvb2xbaV0ucmVzaXplKCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgZmlsdGVyIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGZpbHRlciBzdGFjay5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucXVhZC5kZXN0cm95KCk7XG4gICAgXG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG4gICAgXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IG51bGw7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGV4dHVyZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVQb29sID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBBbHBoYU1hc2tGaWx0ZXIgPSByZXF1aXJlKCcuLi9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuc3RlbmNpbFN0YWNrID0gW107XG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ID0gMDtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbCA9IFtdO1xufVxuXG5NYXNrTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFNwcml0ZU1hc2sodGFyZ2V0LCBtYXNrRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IG1hc2sgZnJvbSB0aGUgbWFzayBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIGlmIChtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnBvcFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB2YXIgYWxwaGFNYXNrRmlsdGVyID0gdGhpcy5hbHBoYU1hc2tQb29sLnBvcCgpO1xuXG4gICAgaWYgKCFhbHBoYU1hc2tGaWx0ZXIpXG4gICAge1xuICAgICAgICBhbHBoYU1hc2tGaWx0ZXIgPSBbbmV3IEFscGhhTWFza0ZpbHRlcihtYXNrRGF0YSldO1xuICAgIH1cblxuICAgIGFscGhhTWFza0ZpbHRlclswXS5tYXNrU3ByaXRlID0gbWFza0RhdGE7XG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGFyZ2V0LCBhbHBoYU1hc2tGaWx0ZXIpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBmaWx0ZXJzID0gdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgdGhpcy5hbHBoYU1hc2tQb29sLnB1c2goZmlsdGVycyk7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoTWFzayhtYXNrRGF0YSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcE1hc2sobWFza0RhdGEpO1xufTtcblxuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpLFxuICAgIENvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXInKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTaGFkZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heEF0dGlicyA9IDEwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXhBdHRpYnM7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YWNrID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcblxuLy8gICAgdGhpcy5pbml0UGx1Z2lucygpO1xufVxuXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hbmFnZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oU2hhZGVyTWFuYWdlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyTWFuYWdlcjtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRyaWJ1dGUgY29ycmVjdGx5IGFzIHRoaXMgdGVuZHMgdG8gdmFyeVxuICAgIHRoaXMubWF4QXR0aWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVE9ETyAtIFdoeSBhcmUgdGhlc2Ugbm90IHBsdWdpbnM/IFdlIGNhbid0IGRlY291cGxlIHByaW1pdGl2ZXMgdW5sZXNzIHRoZXkgYXJlLi4uLlxuICAgIHRoaXMuZGVmYXVsdFNoYWRlciA9IG5ldyBUZXh0dXJlU2hhZGVyKHRoaXMpO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBuZXcgQ29tcGxleFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogVGFrZXMgdGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gaW4gcGFyYW1ldGVycyBhbmQgdXBsb2FkcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJzIHthbnlbXX0gYXR0cmlic1xuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRBdHRyaWJzID0gZnVuY3Rpb24gKGF0dHJpYnMpXG57XG4gICAgLy8gcmVzZXQgdGVtcCBzdGF0ZVxuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMudGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yICh2YXIgYSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbYXR0cmlic1thXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYlN0YXRlW2ldICE9PSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgc2hhZGVyLlxuICpcbiAqIEBwYXJhbSBzaGFkZXIge1BJWEkuU2hhZGVyfSB0aGUgc2hhZGVyIHRvIHVwbG9hZFxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKVxue1xuICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5fY3VycmVudElkID09PSBzaGFkZXIudWlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IHNoYWRlci51aWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBzaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmdsLnVzZVByb2dyYW0oc2hhZGVyLnByb2dyYW0pO1xuICAgIHRoaXMuc2V0QXR0cmlicyhzaGFkZXIuYXR0cmlidXRlcyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBvYmplY3QuXG4gKlxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLmRlc3Ryb3koKTtcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBudWxsO1xufTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFza01hbmFnZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG51bGw7XG59XG5cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBtYXNrIHN0YWNrIHRoYXQgaXMgdXNlZCBieSB0aGlzIG1hbmFnZXIuXG4gKlxuICogQHBhcmFtIHN0ZW5jaWxNYXNrU3RhY2sge1BJWEkuU3RlbmNpbE1hc2tTdGFja30gVGhlIG1hc2sgc3RhY2tcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuc2V0TWFza1N0YWNrID0gZnVuY3Rpb24gKCBzdGVuY2lsTWFza1N0YWNrIClcbntcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBzdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIGlmIChzdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suIEBhbHZpblxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hdHRhY2hTdGVuY2lsQnVmZmVyKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBzbXMgPSB0aGlzLnN0ZW5jaWxNYXNrU3RhY2s7XG5cbiAgICB0aGlzLmJpbmRHcmFwaGljcyhncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xuICAgICAgICBzbXMucmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIHNtcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wdXNoKHdlYkdMRGF0YSk7XG5cbiAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgLy8gZHJhdyB0aGUgdHJpYW5nbGUgc3RyaXAhXG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IGEgcXVhZCB0byBpbmNyZW1lbnQuLlxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cbiAgICBzbXMuY291bnQrKztcbn07XG5cbi8qKlxuICogVE9ETyB0aGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIVxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5iaW5kR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICAvL2lmICh0aGlzLl9jdXJyZW50R3JhcGhpY3MgPT09IGdyYXBoaWNzKXJldHVybjtcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGJpbmQgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgdmFyIHNoYWRlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICAvKlxuICAgICAgICBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMuY29sb3IuX2xvY2F0aW9uLCB3ZWJHTERhdGEuY29sb3IpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDIsIDApO1xuXG4gICAgICAgIC8vIG5vdyBkbyB0aGUgcmVzdC4uXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICovXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmFjdGl2YXRlUHJpbWl0aXZlU2hhZGVyKCk7XG4vLyAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnByaW1pdGl2ZVNoYWRlcjtcbiAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cblxuICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4vLyAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG5cbiAgICAgIC8qICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTFmKHNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEpO1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCA0LCBnbC5GTE9BVCwgZmFsc2UsNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTsqL1xuICAgIH1cbn07XG5cbi8qKlxuICogVE9ETyBAYWx2aW5cbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTdGVuY2lsID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wb3AoKTtcblxuICAgIHNtcy5jb3VudC0tO1xuXG4gICAgaWYgKHNtcy5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgLy8gdGhlIHN0YWNrIGlzIGVtcHR5IVxuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICAgICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuXG4gICAgICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSAobGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOVkVSVCk7XG5cbiAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50ICs9IDI7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAvLyAgY29uc29sZS5sb2coXCI8PD4+XCIpXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcblxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCksIDB4RkYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5LRUVQKTtcblxuXG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgbWFzayBzdGFjay5cbiAqXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjayA9IG51bGw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119IFRoZSBtYXNrIGRhdGEgc3RydWN0dXJlIHRvIHVzZVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgXG4gICAgLy9UT0RPIEZJWFxuICAgIGlmIChtYXNrRGF0YS5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy51cGRhdGVHcmFwaGljcyhtYXNrRGF0YSwgdGhpcy5yZW5kZXJlci5nbCk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119XG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuXG4gICAgdGhpcy5wb3BTdGVuY2lsKG1hc2tEYXRhLCBtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YVswXSk7XG59O1xuXG4iLCIvKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gV2ViR0xNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMucmVuZGVyZXIub24oJ2NvbnRleHQnLCB0aGlzLm9uQ29udGV4dENoYW5nZSwgdGhpcyk7XG59XG5cbldlYkdMTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFuYWdlcjtcblxuLyoqXG4gKiBHZW5lcmljIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXHQvLyBkbyBzb21lIGNvZGVzIGluaXQhXG59O1xuXG4vKipcbiAqIEdlbmVyaWMgZGVzdHJveSBtZXRob2RzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICovXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVuZGVyZXIub2ZmKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IGNvbXBsZXggcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBDb21wbGV4UHJpbWl0aXZlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gdmVjNChjb2xvciAqIGFscGhhICogdGludCwgYWxwaGEpOycsLy9cIiAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdGludDogICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwgMCwgMF0gfSxcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgY29sb3I6ICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwwLDBdIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYUNvbG9yOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCYXNlIHNoYWRlciBjbGFzcyBmb3IgUElYSSBtYW5hZ2VkIHNoYWRlcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFt1bmlmb3Jtc10ge29iamVjdH0gVW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxuICogQHBhcmFtIFthdHRyaWJ1dGVzXSB7b2JqZWN0fSBBdHRyaWJ1dGVzIGZvciB0aGlzIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKVxue1xuICAgIGlmICghdmVydGV4U3JjIHx8ICFmcmFnbWVudFNyYylcbiAgICB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpeGkuanMgRXJyb3IuIFNoYWRlciByZXF1aXJlcyB2ZXJ0ZXhTcmMgYW5kIGZyYWdtZW50U3JjJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmdsID0gc2hhZGVyTWFuYWdlci5yZW5kZXJlci5nbDtcblxuICAgIC8vVE9ETyBtYXliZSB3ZSBzaG91bGQgcGFzcyByZW5kZXJlciByYXRoZXIgdGhhbiBzaGFkZXIgbWFuZ2VyPz8gZm9vZCBmb3IgdGhvdWdodC4uXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyID0gc2hhZGVyTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBwcm9ncmFtLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xQcm9ncmFtfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF0dHJpYnV0ZXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRleHR1cmUgY291bnRlclxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYztcblxuICAgIHRoaXMuaW5pdCgpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc2hhZGVyIGFuZCB1c2VzIGl0XG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29tcGlsZSgpO1xuXG4gICAgdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLnVuaWZvcm1zKSk7XG4gICAgdGhpcy5jYWNoZUF0dHJpYnV0ZUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpKTtcbn07XG5cbi8qKlxuICogQ2FjaGVzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHVuaWZvcm0gZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSB1bmlmb3JtcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyA9IGZ1bmN0aW9uIChrZXlzKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMudW5pZm9ybXNba2V5c1tpXV0uX2xvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBrZXlzW2ldKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSBhdHRyaWJ1dGVzIHRvIGNhY2hlXG4gKi9cblNoYWRlci5wcm90b3R5cGUuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNba2V5c1tpXV0gPSB0aGlzLmdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4uLlxuXG4gICAgLy8gQmVnaW4gd29yc3QgaGFjayBldmEgLy9cblxuICAgIC8vIFdIWT8/PyBPTkxZIG9uIG15IGNocm9tZSBwaXhlbCB0aGUgbGluZSBhYm92ZSByZXR1cm5zIC0xIHdoZW4gdXNpbmcgZmlsdGVycz9cbiAgICAvLyBtYXliZSBpdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdsIGNvbnRleHQuXG4gICAgLy8gSSdtIGNvbnZpbmNlZCB0aGlzIGlzIGEgYnVnIGluIHRoZSBjaHJvbWUgYnJvd3NlciBhcyB0aGVyZSBpcyBOTyByZWFzb24gd2h5IHRoaXMgc2hvdWxkIGJlIHJldHVybmluZyAtMSBlc3BlY2lhbGx5IGFzIGl0IG9ubHkgbWFuaWZlc3RzIG9uIG15IGNocm9tZSBwaXhlbFxuICAgIC8vIElmIHRoZXJlcyBhbnkgd2ViR0wgcGVvcGxlIHRoYXQga25vdyB3aHkgY291bGQgaGFwcGVuIHBsZWFzZSBoZWxwIDopXG4gICAgLy8gaWYgKHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPT09IC0xKXtcbiAgICAvLyAgICAgdGhpcy5hdHRyaWJ1dGVzLmFDb2xvciA9IDI7XG4gICAgLy8gfVxuXG4gICAgLy8gRW5kIHdvcnN0IGhhY2sgZXZhIC8vXG59O1xuXG4vKipcbiAqIEF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZCBjcmVhdGVzIHRoZSBwcm9ncmFtLlxuICpcbiAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX1cbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIGdsVmVydFNoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5WRVJURVhfU0hBREVSLCB0aGlzLnZlcnRleFNyYyk7XG4gICAgdmFyIGdsRnJhZ1NoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuZnJhZ21lbnRTcmMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xGcmFnU2hhZGVyKTtcbiAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcblxuICAgIC8vIGlmIGxpbmtpbmcgZmFpbHMsIHRoZW4gbG9nIGFuZCBjbGVhbnVwXG4gICAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BpeGkuanMgRXJyb3I6IENvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlci4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuVkFMSURBVEVfU1RBVFVTJywgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuZ2V0RXJyb3IoKScsIGdsLmdldEVycm9yKCkpO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcHJvZ3JhbSBpbmZvIGxvZywgbG9nIGl0XG4gICAgICAgIGlmIChnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSAhPT0gJycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBXYXJuaW5nOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpJywgZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgcHJvZ3JhbSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgc29tZSBzaGFkZXJzXG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsVmVydFNoYWRlcik7XG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsRnJhZ1NoYWRlcik7XG5cbiAgICByZXR1cm4gKHRoaXMucHJvZ3JhbSA9IHByb2dyYW0pO1xufTtcblxuLyoqXG4qIEFkZHMgYSBuZXcgdW5pZm9ybVxuKlxuKiBAcGFyYW0gdW5pZm9ybSB7b2JqZWN0fSB0aGUgbmV3IHVuaWZvcm0gdG8gYXR0YWNoXG4qL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBsb2NhdGlvbiA9IHVuaWZvcm0uX2xvY2F0aW9uLFxuICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWUsXG4gICAgICAgIGdsID0gdGhpcy5nbCxcbiAgICAgICAgaSwgaWw7XG5cbiAgICBzd2l0Y2ggKHVuaWZvcm0udHlwZSlcbiAgICB7XG4gICAgICAgIGNhc2UgJ2InOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlID8gMSA6IDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGludCB2YWx1ZVxuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBzaW5nbGUgZmxvYXQgdmFsdWVcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDIpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoMykgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoNCkgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzRmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSAyRCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjInOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgM0QgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YzJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDREIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2NCc6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzFmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzRmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTInOlxuICAgICAgICBjYXNlICdtYXQyJzpcbiAgICAgICAgY2FzZSAnTWF0cml4MmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICBjYXNlICdtYXQzJzpcbiAgICAgICAgY2FzZSAnTWF0cml4M2Z2JzpcblxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICdtNCc6XG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICBjYXNlICdNYXRyaXg0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgQ29sb3IgVmFsdWVcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGludGVnZXJzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIChKUyBvciB0eXBlZCBhcnJheSlcbiAgICAgICAgY2FzZSAnZnYxJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDJEIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjJ2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDIgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDJdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMiArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAzRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yzdic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgzICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMyArIDJdICAgPSB2YWx1ZVtpXS56O1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHVuaWZvcm0uX2FycmF5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDREIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjR2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDRdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgMl0gICA9IHZhbHVlW2ldLno7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAzXSAgID0gdmFsdWVbaV0udztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBQSVhJLlRleHR1cmVcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgIGNhc2UgJ3NhbXBsZXIyRCc6XG5cbiAgICAgICAgICAgIGlmICghdW5pZm9ybS52YWx1ZSB8fCAhdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFjdGl2YXRlIHRoaXMgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0aGlzLnRleHR1cmVDb3VudF0pO1xuXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgICAgICAgICBpZiAoIXRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2FtcGxlcjJEKHVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSB0ZXh0dXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb25lLi5cbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gICAgICAgICAgICAvLyBzZXQgdW5pZm9ybSB0byB0ZXh0dXJlIGluZGV4XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkodW5pZm9ybS5fbG9jYXRpb24sIHRoaXMudGV4dHVyZUNvdW50KTtcblxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IG5leHQgdGV4dHVyZSBpZFxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBTaGFkZXIgV2FybmluZzogVW5rbm93biB1bmlmb3JtIHR5cGU6ICcgKyB1bmlmb3JtLnR5cGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnVuaWZvcm1zKVxuICAgIHtcbiAgICAgICAgdGhpcy5zeW5jVW5pZm9ybSh0aGlzLnVuaWZvcm1zW2tleV0pO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJbml0aWFsaXNlcyBhIFNhbXBsZXIyRCB1bmlmb3JtICh3aGljaCBtYXkgb25seSBiZSBhdmFpbGFibGUgbGF0ZXIgb24gYWZ0ZXIgaW5pdFVuaWZvcm1zIG9uY2UgdGhlIHRleHR1cmUgaGFzIGxvYWRlZClcbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuaW5pdFNhbXBsZXIyRCA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGlmICh1bmlmb3JtLnRleHR1cmVEYXRhKVxuICAgIHtcblxuICAgICAgICAvL1RPRE8gbW92ZSB0aGlzLi4uXG4gICAgICAgIHZhciBkYXRhID0gdW5pZm9ybS50ZXh0dXJlRGF0YTtcblxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG5cbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGxpZWRBbHBoYSk7XG4gICAgICAgIC8vIEdMVGV4dHVyZSA9IG1hZyBsaW5lYXIsIG1pbiBsaW5lYXJfbWlwbWFwX2xpbmVhciwgd3JhcCByZXBlYXQgKyBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgLy8gR0xUZXh0dXJlTGluZWFyID0gbWFnL21pbiBsaW5lYXIsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdFJlcGVhdCA9IG1hZy9taW4gTkVBUkVTVCwgd3JhcCByZXBlYXRcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdCA9IG1hZy9taW4gbmVhcmVzdCwgd3JhcCBjbGFtcFxuICAgICAgICAvLyBBdWRpb1RleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDUxMiwgaGVpZ2h0IDIsIGJvcmRlciAwXG4gICAgICAgIC8vIEtleVRleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDI1NiwgaGVpZ2h0IDIsIGJvcmRlciAwXG5cbiAgICAgICAgLy8gIG1hZ0ZpbHRlciBjYW4gYmU6IGdsLkxJTkVBUiwgZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgb3IgZ2wuTkVBUkVTVFxuICAgICAgICAvLyAgd3JhcFMvVCBjYW4gYmU6IGdsLkNMQU1QX1RPX0VER0Ugb3IgZ2wuUkVQRUFUXG5cbiAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBkYXRhLmx1bWluYW5jZSA/IGdsLkxVTUlOQU5DRSA6IGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRleHR1cmUuc291cmNlKTtcblxuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZGF0YS5tYWdGaWx0ZXIgPyBkYXRhLm1hZ0ZpbHRlciA6IGdsLkxJTkVBUiApO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFICk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZGF0YS53cmFwVCA/IGRhdGEud3JhcFQgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5zaGFkZXJNYW5hZ2VyLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgc2hhZGVyLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmdsLmRlbGV0ZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgIHRoaXMudW5pZm9ybXMgPSBudWxsO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleFNyYyA9IG51bGw7XG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IG51bGw7XG59O1xuXG5TaGFkZXIucHJvdG90eXBlLl9nbENvbXBpbGUgPSBmdW5jdGlvbiAodHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIHRoaXMuZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc3JjKTtcbiAgICB0aGlzLmdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghdGhpcy5nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCB0aGlzLmdsLkNPTVBJTEVfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIGN1c3RvbVVuaWZvcm1zLCBjdXN0b21BdHRyaWJ1dGVzKVxue1xuICAgIHZhciB1bmlmb3JtcyA9IHtcblxuICAgICAgICB1U2FtcGxlcjogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiAwIH0sXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6ICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDFdKSB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21Vbmlmb3JtcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIHUgaW4gY3VzdG9tVW5pZm9ybXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVuaWZvcm1zW3VdID0gY3VzdG9tVW5pZm9ybXNbdV07XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBhVmVydGV4UG9zaXRpb246ICAgIDAsXG4gICAgICAgIGFUZXh0dXJlQ29vcmQ6ICAgICAgMCxcbiAgICAgICAgYUNvbG9yOiAgICAgICAgICAgICAwXG4gICAgfTtcblxuICAgIGlmIChjdXN0b21BdHRyaWJ1dGVzKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgYSBpbiBjdXN0b21BdHRyaWJ1dGVzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2FdID0gY3VzdG9tQXR0cmlidXRlc1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IHZlcnRleFNyYyB8fCBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcyk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKGdsKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IFRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgZnJhZ21lbnRTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYztcblxuICAgIFNoYWRlci5jYWxsKHRoaXMsIGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTsvLywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xuXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuLi9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBCYXNlIGZvciBhIGNvbW1vbiBvYmplY3QgcmVuZGVyZXIgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHN5c3RlbSByZW5kZXJlciBwbHVnaW4uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBPYmplY3RSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59XG5cblxuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9iamVjdFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RSZW5kZXJlcjtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHJlbmRlcmVyIGFuZCBzZXRzIHRoZSBzaGFkZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gc2V0IHRoZSBzaGFkZXIuLlxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgcmVuZGVyZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIGZsdXNoZXNcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gZmx1c2ghXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyByZW5kZXIgdGhlIG9iamVjdFxufTtcbiIsIi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHF1YWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gVGhlIGdsIGNvbnRleHQgZm9yIHRoaXMgcXVhZCB0byB1c2UuXG4gKi9cbmZ1bmN0aW9uIFF1YWQoZ2wpXG57XG4gICAgLypcbiAgICAgKiB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbi8vICAgIHRoaXMudGV4dHVyZXMgPSBuZXcgVGV4dHVyZVV2cygpO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMjAwLDAsXG4gICAgICAgIDIwMCwyMDAsXG4gICAgICAgIDAsMjAwXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBxdWFkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KFtcbiAgICAgICAgMCwwLFxuICAgICAgICAxLDAsXG4gICAgICAgIDEsMSxcbiAgICAgICAgMCwxXG4gICAgXSk7XG5cbi8vICAgIHZhciB3aGl0ZSA9ICgweEZGRkZGRiA+PiAxNikgKyAoMHhGRkZGRkYgJiAweGZmMDApICsgKCgweEZGRkZGRiAmIDB4ZmYpIDw8IDE2KSArICgxICogMjU1IDw8IDI0KTtcbiAgICAvL1RPRE8gY29udmVydCB0aGlzIHRvIGEgMzIgdW5zaWduZWQgaW50IGFycmF5XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIGNvbXBvbmVudHMgb2YgdGhlIHRyaWFuZ2xlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDFcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KFtcbiAgICAgICAgMCwgMSwgMiwgMCwgMywgMlxuICAgIF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIHZlcnRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICg4ICsgOCArIDE2KSAqIDQsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59XG5cblF1YWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUXVhZDtcblxuLyoqXG4gKiBNYXBzIHR3byBSZWN0YW5nbGUgdG8gdGhlIHF1YWRcbiAqIEBwYXJhbSByZWN0IHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZpcnN0IHJlY3RhbmdsZVxuICogQHBhcmFtIHJlY3QyIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHNlY29uZCByZWN0YW5nbGVcbiAqL1xuUXVhZC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24ocmVjdCwgcmVjdDIpXG57XG4gICAgdmFyIHggPSAwOyAvL3JlY3QyLnggLyByZWN0LndpZHRoO1xuICAgIHZhciB5ID0gMDsgLy9yZWN0Mi55IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1swXSA9IHg7XG4gICAgdGhpcy51dnNbMV0gPSB5O1xuXG4gICAgdGhpcy51dnNbMl0gPSB4ICsgcmVjdDIud2lkdGggLyByZWN0LndpZHRoO1xuICAgIHRoaXMudXZzWzNdID0geTtcblxuICAgIHRoaXMudXZzWzRdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIHRoaXMudXZzWzZdID0geDtcbiAgICB0aGlzLnV2c1s3XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIC8vLyAtLS0tLVxuICAgIHggPSByZWN0Mi54O1xuICAgIHkgPSByZWN0Mi55O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1swXSA9IHg7XG4gICAgdGhpcy52ZXJ0aWNlc1sxXSA9IHk7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzJdID0geCArIHJlY3QyLndpZHRoO1xuICAgIHRoaXMudmVydGljZXNbM10gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1s0XSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzVdID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudmVydGljZXNbNl0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0O1xuXG4gICAgdGhpcy51cGxvYWQoKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlciBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5RdWFkLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIFRPRE8gY291bGQgcHJvYmFibHkgYmUgcHVzaGVkIGludG8gb25lIHVwbG9hZCFcbiAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHRoaXMudmVydGV4QnVmZmVyICk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy52ZXJ0aWNlcyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgOCAqIDQsIHRoaXMudXZzKTtcblxuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDgpICogNCwgdGhpcy5jb2xvcnMpO1xufTtcblxuUXVhZC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWQ7XG5cblxuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKSxcbiAgICAgICAgXG4gICAgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuICAgIEdMRnJhbWVidWZmZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTEZyYW1lYnVmZmVyLFxuICAgIFxuICAgIFN0ZW5jaWxNYXNrU3RhY2sgPSByZXF1aXJlKCcuL1N0ZW5jaWxNYXNrU3RhY2snKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqL1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgaG9yaXpvbnRhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSB2ZXJ0aWNhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICogQHBhcmFtIHJvb3Qge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAqL1xudmFyIFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24sIHJvb3QpXG57XG4gICAgLy9UT0RPIFJlc29sdXRpb24gY291bGQgZ28gaGVyZSAoIGVnIGxvdyByZXMgYmx1cnMgKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vIG5leHQgdGltZSB0byBjcmVhdGUgYSBmcmFtZSBidWZmZXIgYW5kIHRleHR1cmVcblxuICAgIC8qKlxuICAgICAqIEEgZnJhbWUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEZyYW1lQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuXG4gICAgdGhpcy5jbGVhckNvbG9yID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIG9iamVjdCBhcyBhIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2JqZWN0J3MgdHJhbnNmb3JtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk1hdHJpeH1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lID0gbnVsbDtcbiAgICBcbiAgICB0aGlzLmRlZmF1bHRGcmFtZSA9IG5ldyBQSVhJLlJlY3RhbmdsZSgpO1xuICAgIHRoaXMuZGVzdGluYXRpb25GcmFtZSA9IG51bGw7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgc3RvcmVzIG1hc2tpbmcgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbEJ1ZmZlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzdGVuY2lsIG1hc2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gbmV3IFN0ZW5jaWxNYXNrU3RhY2soKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyBmaWx0ZXIgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDp0aGlzLFxuICAgICAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICAgICAgYm91bmRzOnRoaXMuc2l6ZVxuICAgICAgICB9XG4gICAgXTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEEgZnJhbWUgYnVmZmVyIG5lZWRzIGEgdGFyZ2V0IHRvIHJlbmRlciB0by4uXG4gICAgICAgICAgICBjcmVhdGUgYSB0ZXh0dXJlIGFuZCBiaW5kIGl0IGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAgICAgKi9cbiAgICAgICAgXG5cbiAgICAgICAvLyBUT0RPIGNoYW5nZSFcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGJ5IHRoZSBiYXNlIHRleHR1cmVcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGhpcy5mcmFtZUJ1ZmZlci50ZXh0dXJlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBtYWtlIGl0IGEgbnVsbCBmcmFtZWJ1ZmZlci4uXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZnJhbWVidWZmZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xufTtcblxuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRhcmdldDtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGFyZ2V0O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZmlsdGVyIHRleHR1cmUuXG4gKlxuICogQHBhcmFtIFtiaW5kPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIHdlIGJpbmQgb3VyIGZyYW1lYnVmZmVyIGJlZm9yZSBjbGVhcmluZz9cbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGNsZWFyQ29sb3IpXG57XG4gICAgdmFyIGNjID0gY2xlYXJDb2xvciB8fCB0aGlzLmNsZWFyQ29sb3JcbiAgICB0aGlzLmZyYW1lQnVmZmVyLmNsZWFyKGNjWzBdLGNjWzFdLGNjWzJdLGNjWzNdKS8vcixnLGIsYSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuYXR0YWNoU3RlbmNpbEJ1ZmZlciA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPRE8gY2hlY2sgaWYgc3RlbmNpbCBpcyBkb25lP1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBpcyB1c2VkIGZvciBtYXNraW5nIGluIHBpeGlcbiAgICAgKiBsZXRzIGNyZWF0ZSBvbmUgYW5kIHRoZW4gYWRkIGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVTdGVuY2lsKCk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCBpbml0aWFsaXNlcyB0aGUgdmlld3BvcnQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oZGVzdGluYXRpb25GcmFtZSwgc291cmNlRnJhbWUpXG57XG4gICAgLy9UT09EIHJlZmFjdG9yIHVzYWdlIG9mIGZyYW1lLi5cbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5iaW5kKCk7XG5cbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBkZXN0aW5hdGlvbkZyYW1lIHx8IHRoaXMuZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlZmF1bHRGcmFtZTtcbiAgICB0aGlzLnNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgdGhpcy5zb3VyY2VGcmFtZSB8fCBkZXN0aW5hdGlvbkZyYW1lO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUsIHRoaXMuc291cmNlRnJhbWUgKTtcblxuICAgIGlmKHRoaXMudHJhbnNmb3JtKVxuICAgIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFwcGVuZCh0aGlzLnRyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5kZXN0aW5hdGlvbkZyYW1lICE9PSB0aGlzLnNvdXJjZUZyYW1lKVxuICAgIHtcbiAgICAgICAgZ2wuZW5hYmxlKGdsLlNDSVNTT1JfVEVTVCk7XG4gICAgICAgIGdsLnNjaXNzb3IodGhpcy5kZXN0aW5hdGlvbkZyYW1lLngsIHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGgqIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgIH1cblxuXG4gICAgLy8gVE9ETyAtIGRvZXMgbm90IG5lZWQgdG8gYmUgdXBkYXRlZCBhbGwgdGhlIHRpbWU/P1xuICAgIGdsLnZpZXdwb3J0KHRoaXMuZGVzdGluYXRpb25GcmFtZS54LHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuXG5cbn07XG5cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBwcm9qZWN0aW9uIG1hdHJpeCBiYXNlZCBvbiBhIHByb2plY3Rpb24gZnJhbWUgKHdoaWNoIGlzIGEgcmVjdGFuZ2xlKVxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jYWxjdWxhdGVQcm9qZWN0aW9uID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcblxuICAgIHNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHBtLmlkZW50aXR5KCk7XG5cbiAgICAvLyBUT0RPOiBtYWtlIGRlc3Qgc2NhbGUgc291cmNlXG4gICAgaWYgKCF0aGlzLnJvb3QpXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBzb3VyY2VGcmFtZS54ICogcG0uYTtcbiAgICAgICAgcG0udHkgPSAtMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IC0xIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBSZXNpemVzIHRoZSB0ZXh0dXJlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7TnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gaGVpZ2h0IHtOdW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgd2lkdGggPSB3aWR0aCB8IDA7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDtcblxuICAgIGlmICh0aGlzLnNpemUud2lkdGggPT09IHdpZHRoICYmIHRoaXMuc2l6ZS5oZWlnaHQgPT09IGhlaWdodCkgXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZGVmYXVsdEZyYW1lLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5kZWZhdWx0RnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5yZXNpemUod2lkdGggKiB0aGlzLnJlc29sdXRpb24sIGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCBwcm9qZWN0aW9uRnJhbWUgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHJlbmRlciB0YXJnZXQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFN0ZW5jaWxNYXNrU3RhY2soKVxue1xuXHQvKipcbiAgICAgKiBUaGUgYWN0dWFsIHN0YWNrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVE9ETyBAYWx2aW5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvdW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb3VudCA9IDA7XG59XG5cblN0ZW5jaWxNYXNrU3RhY2sucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RlbmNpbE1hc2tTdGFjaztcbm1vZHVsZS5leHBvcnRzID0gU3RlbmNpbE1hc2tTdGFjaztcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBNYXBzIGdsIGJsZW5kIGNvbWJpbmF0aW9ucyB0byBXZWJHTFxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcbiAgICBvYmplY3QgPSBvYmplY3QgfHwge307XG5cbiAgICAvL1RPRE8gLSBwcmVtdWx0aXBseSBhbHBoYSB3b3VsZCBiZSBkaWZmZXJlbnQuXG4gICAgLy9hZGQgYSBib29sZWFuIGZvciB0aGF0IVxuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdICAgICAgICA9IFtnbC5PTkUsICAgICAgIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLkRTVF9BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk1VTFRJUExZXSAgICAgID0gW2dsLkRTVF9DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gW2dsLlNSQ19BTFBIQSwgZ2wuT05FXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VdICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSFVFXSAgICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcblxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpO1xuIiwiQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbCwgb2JqZWN0KVxue1xuXHRvYmplY3Q9IG9iamVjdCB8fCB7fTtcblxuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlBPSU5UU10gICAgICAgICA9IGdsLlBPSU5UUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FU10gICAgICAgICAgPSBnbC5MSU5FUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FX0xPT1BdICAgICAgPSBnbC5MSU5FX0xPT1A7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9TVFJJUF0gICAgID0gZ2wuTElORV9TVFJJUDtcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5UUklBTkdMRVNdICAgICAgPSBnbC5UUklBTkdMRVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBdID0gZ2wuVFJJQU5HTEVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXSAgID0gZ2wuVFJJQU5HTEVfRkFOO1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGk7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIFNwcml0ZSBvYmplY3QgaXMgdGhlIGJhc2UgZm9yIGFsbCB0ZXh0dXJlZCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIHRvIHRoZSBzY3JlZW5cbiAqXG4gKiBBIHNwcml0ZSBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGFuIGltYWdlIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSBmb3IgdGhpcyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gU3ByaXRlKHRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW5jaG9yIHNldHMgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLDAgdGhpcyBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMC41LDAuNSBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyBjZW50ZXJlZFxuICAgICAqIFNldHRpbmcgdGhlIGFuY2hvciB0byAxLDEgd291bGQgbWVhbiB0aGUgdGV4dHVyZSdzIG9yaWdpbiBwb2ludCB3aWxsIGJlIHRoZSBib3R0b20gcmlnaHQgY29ybmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuYW5jaG9yID0gbmV3IG1hdGguUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgc3ByaXRlICh0aGlzIGlzIGluaXRpYWxseSBzZXQgYnkgdGhlIHRleHR1cmUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBIHZhbHVlIG9mIDB4RkZGRkZGIHdpbGwgcmVtb3ZlIGFueSB0aW50IGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaGFkZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBzcHJpdGUuIFNldCB0byBudWxsIHRvIHJlbW92ZSBhIGN1cnJlbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5BYnN0cmFjdEZpbHRlcnxQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBjYWNoZWQgdmFsdWUgb2YgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8vIGNhbGwgdGV4dHVyZSBzZXR0ZXJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG4gICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlXG4gICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy52ZXJ0ZXhEYXRhID0gbmV3IEZsb2F0MzJBcnJheSg4KTtcbn1cblxuLy8gY29uc3RydWN0b3JcblNwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuc2NhbGUueCkgKiB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBNYXRoLmFicyh0aGlzLnNjYWxlLnkpICogdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc2lnbiA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS55KSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gc2lnbiAqIHZhbHVlIC8gdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5TcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIHNvIGlmIF93aWR0aCBpcyAwIHRoZW4gd2lkdGggd2FzIG5vdCBzZXQuLlxuICAgIGlmICh0aGlzLl93aWR0aClcbiAgICB7XG4gICAgICAgIHRoaXMuc2NhbGUueCA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS54KSAqIHRoaXMuX3dpZHRoIC8gdGhpcy50ZXh0dXJlLmZyYW1lLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnkgPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgKiB0aGlzLl9oZWlnaHQgLyB0aGlzLnRleHR1cmUuZnJhbWUuaGVpZ2h0O1xuICAgIH1cbn07XG5cblNwcml0ZS5wcm90b3R5cGUuY2FjbHVsYXRlVmVydGljZXMgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICB3dCA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICBhID0gd3QuYSwgYiA9IHd0LmIsIGMgPSB3dC5jLCBkID0gd3QuZCwgdHggPSB3dC50eCwgdHkgPSB3dC50eSxcbiAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDEsXG4gICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG4gICAgICAgIFxuICAgIGlmICh0cmltKVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkIGFuZCBpcyBub3QgYSB0aWxpbmdzcHJpdGUgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgIHcxID0gdHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgaDEgPSB0cmltLnkgLSB0aGlzLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgIGgwID0gaDEgKyB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG4gICAgfVxuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzBdID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVsxXSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzJdID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVszXSA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs0XSA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbNV0gPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs2XSA9IGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbN10gPSBkICogaDAgKyBiICogdzEgKyB0eTtcblxuXG59XG5cbi8qKlxuKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMudGV4dHVyZURpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMudmVydGV4RGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICB9XG4gICAgXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBTcHJpdGUgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgc3ByaXRlXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG4gICAgICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudmVydGV4RGlydHkgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWluWCxcbiAgICAgICAgICAgIG1heFgsXG4gICAgICAgICAgICBtaW5ZLFxuICAgICAgICAgICAgbWF4WSxcbiAgICAgICAgICAgIHZlcnRleERhdGEgPSB0aGlzLnZlcnRleERhdGE7XG5cbiAgICAgICAgdmFyIHgxID0gdmVydGV4RGF0YVswXVxuICAgICAgICB2YXIgeTEgPSB2ZXJ0ZXhEYXRhWzFdXG5cbiAgICAgICAgdmFyIHgyID0gdmVydGV4RGF0YVsyXVxuICAgICAgICB2YXIgeTIgPSB2ZXJ0ZXhEYXRhWzNdXG5cbiAgICAgICAgdmFyIHgzID0gdmVydGV4RGF0YVs0XVxuICAgICAgICB2YXIgeTMgPSB2ZXJ0ZXhEYXRhWzVdXG5cbiAgICAgICAgdmFyIHg0ID0gdmVydGV4RGF0YVs2XVxuICAgICAgICB2YXIgeTQgPSB2ZXJ0ZXhEYXRhWzddXG5cbiAgICAgICAgbWluWCA9IHgxO1xuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MTtcbiAgICAgICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICAgICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICAgICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgICAgICBtYXhYID0geDE7XG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkxO1xuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIC8vIGNoZWNrIGZvciBjaGlsZHJlblxuICAgICAgICBpZih0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkQm91bmRzID0gdGhpcy5jb250YWluZXJHZXRCb3VuZHMoKTtcblxuICAgICAgICAgICAgdzAgPSBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgdzEgPSBjaGlsZEJvdW5kcy54ICsgY2hpbGRCb3VuZHMud2lkdGg7XG4gICAgICAgICAgICBoMCA9IGNoaWxkQm91bmRzLnk7XG4gICAgICAgICAgICBoMSA9IGNoaWxkQm91bmRzLnkgKyBjaGlsZEJvdW5kcy5oZWlnaHQ7XG5cbiAgICAgICAgICAgIG1pblggPSAobWluWCA8IHcwKSA/IG1pblggOiB3MDtcbiAgICAgICAgICAgIG1pblkgPSAobWluWSA8IGgwKSA/IG1pblkgOiBoMDtcblxuICAgICAgICAgICAgbWF4WCA9IChtYXhYID4gdzEpID8gbWF4WCA6IHcxO1xuICAgICAgICAgICAgbWF4WSA9IChtYXhZID4gaDEpID8gbWF4WSA6IGgxO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2JvdW5kcy54ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB0aGlzLl9ib3VuZHMueSA9IC10aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRoaXMuX2JvdW5kcy5oZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgcmV0dXJuIHRoaXMuX2JvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHNwcml0ZVxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5TcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy50ZXh0dXJlLmNyb3Aud2lkdGggPD0gMCB8fCB0aGlzLnRleHR1cmUuY3JvcC5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyAgSWdub3JlIG51bGwgc291cmNlc1xuICAgIGlmICh0aGlzLnRleHR1cmUudmFsaWQpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgICAgICB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgICAgICBkeCxcbiAgICAgICAgICAgIGR5LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ7XG5cbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgICAgICAvLyBJZiBzbW9vdGhpbmdFbmFibGVkIGlzIHN1cHBvcnRlZCBhbmQgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIHNtb290aGluZyBwcm9wZXJ0eSBmb3IgdGhpcyB0ZXh0dXJlXG4gICAgICAgIHZhciBzbW9vdGhpbmdFbmFibGVkID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5zY2FsZU1vZGUgPT09IENPTlNULlNDQUxFX01PREVTLkxJTkVBUjtcbiAgICAgICAgaWYgKHJlbmRlcmVyLnNtb290aFByb3BlcnR5ICYmIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldICE9PSBzbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0W3JlbmRlcmVyLnNtb290aFByb3BlcnR5XSA9IHNtb290aGluZ0VuYWJsZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgdGV4dHVyZSBpcyB0cmltbWVkIHdlIG9mZnNldCBieSB0aGUgdHJpbSB4L3ksIG90aGVyd2lzZSB3ZSB1c2UgdGhlIGZyYW1lIGRpbWVuc2lvbnNcblxuICAgICAgICBpZih0ZXh0dXJlLnJvdGF0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2lkdGggPSB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBkeCA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgXG4gICAgICAgICAgICBkeCArPSB3aWR0aDtcblxuICAgICAgICAgICAgd3QudHggPSBkeSAqIHd0LmEgKyBkeCAqIHd0LmMgKyB3dC50eDtcbiAgICAgICAgICAgIHd0LnR5ID0gZHkgKiB3dC5iICsgZHggKiB3dC5kICsgd3QudHk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gd3QuYTtcbiAgICAgICAgICAgIHd0LmEgID0gLXd0LmM7XG4gICAgICAgICAgICB3dC5jICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICB0ZW1wID0gd3QuYjtcbiAgICAgICAgICAgIHd0LmIgID0gLXd0LmQ7XG4gICAgICAgICAgICB3dC5kICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICAvLyB0aGUgYW5jaG9yIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCBhYm92ZSwgc28gbGV0cyBzZXQgaXQgdG8gemVyb1xuICAgICAgICAgICAgZHggPSAwO1xuICAgICAgICAgICAgZHkgPSAwO1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC53aWR0aDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0ZXh0dXJlLnRyaW0ud2lkdGggOiB0aGlzLmFuY2hvci54ICogLXRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRleHR1cmUudHJpbS5oZWlnaHQgOiB0aGlzLmFuY2hvci55ICogLXRleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfVxuXG5cblxuICAgICAgICAvLyBBbGxvdyBmb3IgcGl4ZWwgcm91bmRpbmdcbiAgICAgICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB3dC5hLFxuICAgICAgICAgICAgICAgIHd0LmIsXG4gICAgICAgICAgICAgICAgd3QuYyxcbiAgICAgICAgICAgICAgICB3dC5kLFxuICAgICAgICAgICAgICAgICh3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMCxcbiAgICAgICAgICAgICAgICAod3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uKSB8IDBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGR4ID0gZHggfCAwO1xuICAgICAgICAgICAgZHkgPSBkeSB8IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgd3QudHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHd0LnR5ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcblxuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIC8vIFRPRE8gY2xlYW4gdXAgY2FjaGluZyAtIGhvdyB0byBjbGVhbiB1cCB0aGUgY2FjaGVzP1xuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC54ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmNyb3AueSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeSAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHNwcml0ZSBhbmQgb3B0aW9uYWxseSBpdHMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBbZGVzdHJveVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgY3VycmVudCB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICovXG5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveVRleHR1cmUsIGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYW5jaG9yID0gbnVsbDtcblxuICAgIGlmIChkZXN0cm95VGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUuZGVzdHJveShkZXN0cm95QmFzZVRleHR1cmUpO1xuICAgIH1cblxuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn07XG5cbi8vIHNvbWUgaGVscGVyIGZ1bmN0aW9ucy4uXG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgY3Jvc3Mtb3JpZ2luIHBhcmFtZXRlclxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBzY2FsZSBtb2RlLCBzZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGZyYW1lSWRcbiAqL1xuU3ByaXRlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTcHJpdGUodGV4dHVyZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGJhc2VkIG9uIGFuIGltYWdlIHVybFxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZUlkIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblNwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFNwcml0ZShUZXh0dXJlLmZyb21JbWFnZShpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSk7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyJyksXG4gICAgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzJyksXG4gICAgZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIGdsQ29yZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFNwcml0ZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9TcHJpdGVSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKiBSZW5kZXJlciBkZWRpY2F0ZWQgdG8gZHJhd2luZyBhbmQgYmF0Y2hpbmcgc3ByaXRlcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZVJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIHZhbHVlcyBzZW50IGluIHRoZSB2ZXJ0ZXggYnVmZmVyLlxuICAgICAqIHBvc2l0aW9uWCwgcG9zaXRpb25ZLCBjb2xvclIsIGNvbG9yRywgY29sb3JCID0gNVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydFNpemUgPSA1O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIHZlcnRleCBpbmZvcm1hdGlvbiBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBpbWFnZXMgaW4gdGhlIFNwcml0ZUJhdGNoIGJlZm9yZSBpdCBmbHVzaGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IENPTlNULlNQUklURV9CQVRDSF9TSVpFOyAvLyAyMDAwIGlzIGEgbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIC8gZGVza3RvcFxuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBpbiBvdXIgYmF0Y2hcbiAgICB2YXIgbnVtVmVydHMgPSAodGhpcy5zaXplICogNCkgKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYmF0Y2gsIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgICB2YXIgbnVtSW5kaWNlcyA9IHRoaXMuc2l6ZSAqIDY7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgdmVydGV4IGRhdGEgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdGhlIHZlcnRleCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEFycmF5QnVmZmVyKG51bVZlcnRzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgRmxvYXQzMkFycmF5IGZvciBwb3NpdGlvbnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG4gICAgXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBVaW50MzJBcnJheSBmb3IgdXZzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciBjb2xvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXMgb2YgdGhlIGdlb21ldHJ5IChxdWFkcykgdG8gZHJhd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzKHRoaXMuc2l6ZSlcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICBcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIHRoaXMuZ3JvdXBzID0gW107XG4gICAgXG4gICAgLy9UT0RPIC0gMzAwIGlzIGEgYml0IG1hZ2ljLCBmaWd1cmUgb3V0IGEgbmljZXIgYW1vdW50IVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zaXplOyBpKyspIFxuICAgIHtcbiAgICAgICAgdGhpcy5ncm91cHNbaV0gPSB7dGV4dHVyZXM6W10sIHRleHR1cmVDb3VudDowLCBpZHM6W10sIHNpemU6MCwgc3RhcnQ6MCwgYmxlbmQ6MH07IFxuICAgIH07XG4gICAgXG4gICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG5cbiAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbnVsbDsgICAgXG59XG5cblxuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ByaXRlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZVJlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdzcHJpdGUnLCBTcHJpdGVSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMuTUFYX1RFWFRVRVMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpO1xuXG4gICAgdGhpcy5fc2hhZGVyID0gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIoZ2wsIHRoaXMuTUFYX1RFWFRVRVMpLy9uZXcgVGV4dHVyZVNoYWRlcihnbCk7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXI7XG5cbiAgICAvLyBjcmVhdGUgYSBjb3VwbGUgb2YgYnVmZmVyc1xuICAgIHRoaXMudmVydGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlcihnbCwgbnVsbCwgZ2wuRFlOQU1JQ19EUkFXKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyKGdsLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIC8vIGJ1aWxkIHRoZSB2YW8gb2JqZWN0IHRoYXQgd2lsbCByZW5kZXIuLlxuICAgIHRoaXMudmFvID0gbmV3IGdsQ29yZS5WZXJ0ZXhBcnJheU9iamVjdChnbCk7XG5cbiAgICB0aGlzLnZhby5hZGRJbmRleCh0aGlzLmluZGV4QnVmZmVyKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCBnbC5VTlNJR05FRF9TSE9SVCwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDIgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgZ2wuVU5TSUdORURfQllURSwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDMgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlSWQsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDQgKiA0KTtcblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IDk5OTk5O1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHJlbmRlciB3aGVuIHVzaW5nIHRoaXMgc3ByaXRlYmF0Y2hcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChzcHJpdGUpXG57XG4gICAgLy9UT0RPIHNldCBibGVuZCBtb2Rlcy4uXG4gICAgLy8gY2hlY2sgdGV4dHVyZS4uXG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID49IHRoaXMuc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICB9XG5cbiAgXG4gICAgLy8gZ2V0IHRoZSB1dnMgZm9yIHRoZSB0ZXh0dXJlXG4gICBcblxuICAgIC8vIGlmIHRoZSB1dnMgaGF2ZSBub3QgdXBkYXRlZCB0aGVuIG5vIHBvaW50IHJlbmRlcmluZyBqdXN0IHlldCFcbiAgICBpZiAoIXNwcml0ZS50ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgIC8vIHB1c2ggYSB0ZXh0dXJlLlxuICAgIC8vIGluY3JlbWVudCB0aGUgYmF0Y2hzaXplXG4gICAgdmFyIG5leHRUZXh0dXJlID0gIHNwcml0ZS50ZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIHZhciBjdXJyZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRHcm91cDtcbiAgICB2YXIgaTtcblxuICAgIGlmKHRoaXMuY3VycmVudFRleHR1cmUgIT09IG5leHRUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG5leHRUZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgaWYoIW5leHRUZXh0dXJlLl9lbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5fZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5faWQgPSB0aGlzLnRleHR1cmVDb3VudDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy50ZXh0dXJlQ291bnQgPT09IHRoaXMuTUFYX1RFWFRVRVMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50OyBpKyspIFxuICAgICAgICAgICAgICAgIHsgICAgIFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnNpemUgPSB0aGlzLmN1cnJlbnRJbmRleCAtIGN1cnJlbnRHcm91cC5zdGFydDtcbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC5zdGFydCA9IHRoaXMuY3VycmVudEluZGV4O1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCsrXSA9IG5leHRUZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcbiAgICB9XG5cbiAgICAvLyBUT0RPIHRyaW0/P1xuICAgIHZhciBpbmRleCA9IHRoaXMuY3VycmVudEluZGV4ICogdGhpcy52ZXJ0Qnl0ZVNpemU7XG5cbiAgICB0aGlzLmN1cnJlbnRJbmRleCsrO1xuXG4gICAgLy8gdXBsb2FkIHRoZSBzcHJpdGUgZWxlbWV0bnMuLi5cbiAgICAvLyB0aGV5IGhhdmUgYWxsIHJlYWR5IGJlZW4gY2FsY3VsYXRlZCBzbyB3ZSBqdXN0IG5lZWQgdG8gcHVzaCB0aGVtIGludG8gdGhlIGJ1ZmZlci5cbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG4gICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMucG9zaXRpb25zO1xuICAgIHZhciB2ZXJ0ZXhEYXRhID0gc3ByaXRlLnZlcnRleERhdGFcbiAgICB2YXIgdGludCA9IChzcHJpdGUudGludCA+PiAxNikgKyAoc3ByaXRlLnRpbnQgJiAweGZmMDApICsgKChzcHJpdGUudGludCAmIDB4ZmYpIDw8IDE2KSArIChzcHJpdGUud29ybGRBbHBoYSAqIDI1NSA8PCAyNCk7XG4gICAgdmFyIHV2cyA9IHNwcml0ZS50ZXh0dXJlLl91dnMudXZzX3VpbnQzMjtcbiAgICAvL3h5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVswXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzFdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzBdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkOyBcbiAgICBcbiAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMl07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVszXTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1sxXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNF07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs1XTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1syXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs2XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzddO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzNdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb250ZW50IGFuZCBlbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPT09IDApcmV0dXJuO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gdGhpcy5jdXJyZW50R3JvdXAuc3RhcnQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgeyAgICAgXG4gICAgICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVzW2ldLl9lbmFibGVkID0gZmFsc2U7XG4gICAgfTtcbiAgIFxuICAgIC8vIGRvIHNvbWUgc21hcnQgYXJyYXkgc3R1ZmYuLlxuICAgIC8vIGRvdWJsZSBzaXplIHNvIHdlIGRvbnQgYWx3YXkgc3ViYXJyYXkgdGhlIGVsZW1lbnRzLi5cbiAgICAvLyB1cGxvYWQgdGhlIHZlcnRzIHRvIHRoZSBidWZmZXJcbiAgICBpZiAodGhpcy5jdXJyZW50QmF0Y2hTaXplID4gKCB0aGlzLnNpemUgKiAwLjUgKSApXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlci51cGxvYWQodGhpcy52ZXJ0aWNlcywgMCwgdHJ1ZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIG8gayAuLiBzdWIgYXJyYXkgaXMgU0xPVz4/XG4gICAgICAgIHZhciB2aWV3ID0gdGhpcy5wb3NpdGlvbnMuc3ViYXJyYXkoMCwgdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZSk7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh2aWV3LCAwLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBiaW5kIHNoYWRlci4uXG4gICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHRoaXMuX3NoYWRlcik7XG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggMCApO1xuXG4gICAgLy8vIHJlbmRlciB0aGUgZ3JvdXBzLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5ncm91cENvdW50OyBpKyspIHtcbiAgICAgICAgXG4gICAgICAgIHZhciBncm91cCA9IHRoaXMuZ3JvdXBzW2ldO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ3JvdXAudGV4dHVyZUNvdW50OyBqKyspIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFRleHR1cmUoZ3JvdXAudGV4dHVyZXNbal0sIGopO1xuICAgICAgICB9O1xuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGdyb3VwLnNpemUgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgZ3JvdXAuc3RhcnQgKiA2ICogMik7XG4gICAgfTtcblxuICAgIC8vIHJlc2V0IGVsZW1lbnRzIGZvciB0aGUgbmV4dCBmbHVzaFxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cENvdW50ID0gMDtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcbiAgICB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgc3ByaXRlIGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZhby5iaW5kKCk7XG59O1xuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xuICAgIHRoaXMudmFvLnVuYmluZCgpO1xufTtcbi8qKlxuICogRGVzdHJveXMgdGhlIFNwcml0ZUJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMudmVydGljZXMgPSBudWxsO1xuICAgIHRoaXMucG9zaXRpb25zID0gbnVsbDtcbiAgICB0aGlzLmNvbG9ycyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMudmVydGV4QnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuc3ByaXRlcyA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuXG5mdW5jdGlvbiBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgbWF4VGV4dHVyZXMpXG57XG4gICAgdmFyIHZlcnRleFNyYyA9IFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcbmF0dHJpYnV0ZSBmbG9hdCBhVGV4dHVyZUlkO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyBmbG9hdCB2VGV4dHVyZUlkO1xcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2VGV4dHVyZUlkID0gYVRleHR1cmVJZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cIjtcbiAgICB2YXIgZnJhZ21lbnRTcmMgPSAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxuJyArIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKSArIFwiXFxuXFxuXCIgKyBmcmFnVGVtcGxhdGVcblxuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMucmVwbGFjZSgvXFwlXFwlL2dpLCAnMTYnKTtcblxuICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXG4gICAgdmFyIHNhbXBsZVZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkrKykge1xuICAgICAgICBzYW1wbGVWYWx1ZXNbaV0gPSBpO1xuICAgIH07XG5cbiAgICBzaGFkZXIuYmluZCgpO1xuICAgIHNoYWRlci51bmlmb3Jtcy51U2FtcGxlcnMgPSBzYW1wbGVWYWx1ZXM7XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVNhbXBsZVNyYyhtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgc3JjID0gJ3ZlYzQgZ2V0U2FtcGxlRnJvbUFycmF5KHNhbXBsZXIyRCB0ZXh0dXJlc1slJV0sIGludCBuZHgsIHZlYzIgdXYpIHtcXG5cXG52ZWM0IGNvbG9yOydcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSBcbiAgICB7XG4gICAgICAgIGlmKGkgPiAwKXNyYyArPSAnXFxuZWxzZSAnO1xuICAgICAgICBpZihpIDwgbWF4VGV4dHVyZXMtMSlzcmMgKz0gJ2lmKG5keCA9PSAnICsgaSArICcpJztcbiAgICAgICAgc3JjICs9ICdcXG57JztcbiAgICAgICAgc3JjICs9ICdcXG5cXHRjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlc1snK2krJ10sIHV2KTsnO1xuICAgICAgICBzcmMgKz0gJ1xcbn0nO1xuICAgIH07XG5cbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAncmV0dXJuIGNvbG9yOyc7XG4gICAgc3JjICs9ICdcXG59JztcblxuICAgIHJldHVybiBzcmM7XG59XG5cbnZhciBmcmFnVGVtcGxhdGUgPSBbXG5cbiAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuICAgICd2YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7JyxcbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJzWyUlXTsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnZ2xfRnJhZ0NvbG9yID0gZ2V0U2FtcGxlRnJvbUFycmF5KHVTYW1wbGVycywgaW50KHZUZXh0dXJlSWQpLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvcjsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcjtcbiIsInZhciBTcHJpdGUgPSByZXF1aXJlKCcuLi9zcHJpdGVzL1Nwcml0ZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgVGV4dCBPYmplY3Qgd2lsbCBjcmVhdGUgYSBsaW5lIG9yIG11bHRpcGxlIGxpbmVzIG9mIHRleHQuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJyBpbiB5b3VyIHRleHQgc3RyaW5nLFxuICogb3IgYWRkIGEgd29yZFdyYXAgcHJvcGVydHkgc2V0IHRvIHRydWUgYW5kIGFuZCB3b3JkV3JhcFdpZHRoIHByb3BlcnR5IHdpdGggYSB2YWx1ZSBpbiB0aGUgc3R5bGUgb2JqZWN0LlxuICpcbiAqIEEgVGV4dCBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGEgc3RyaW5nIGFuZCBhIHN0eWxlIG9iamVjdFxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dCA9IG5ldyBQSVhJLlRleHQoJ1RoaXMgaXMgYSBwaXhpIHRleHQnLHtmb250IDogJzI0cHggQXJpYWwnLCBmaWxsIDogMHhmZjEwMTAsIGFsaWduIDogJ2NlbnRlcid9KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBbc3R5bGVdIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnRdIHtzdHJpbmd9IGRlZmF1bHQgJ2JvbGQgMjBweCBBcmlhbCcgVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gKiBAcGFyYW0gW3N0eWxlLmZpbGw9J2JsYWNrJ10ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdCBzaW5nbGUgbGluZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZV0ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBzdHJva2UgZS5nICdibHVlJywgJyNGQ0ZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZVRoaWNrbmVzcz0wXSB7bnVtYmVyfSBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgc3Ryb2tlLiBEZWZhdWx0IGlzIDAgKG5vIHN0cm9rZSlcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXAsIGl0IG5lZWRzIHdvcmRXcmFwIHRvIGJlIHNldCB0byB0cnVlXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvdz1mYWxzZV0ge2Jvb2xlYW59IFNldCBhIGRyb3Agc2hhZG93IGZvciB0aGUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93QW5nbGU9TWF0aC5QSS80XSB7bnVtYmVyfSBTZXQgYSBhbmdsZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAqIEBwYXJhbSBbc3R5bGUucGFkZGluZz0wXSB7bnVtYmVyfSBPY2Nhc2lvbmFsbHkgc29tZSBmb250cyBhcmUgY3JvcHBlZCBvbiB0b3Agb3IgYm90dG9tLiBBZGRpbmcgc29tZSBwYWRkaW5nIHdpbGxcbiAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVKb2luPSdtaXRlciddIHtzdHJpbmd9IFRoZSBsaW5lSm9pbiBwcm9wZXJ0eSBzZXRzIHRoZSB0eXBlIG9mIGNvcm5lciBjcmVhdGVkLCBpdCBjYW4gcmVzb2x2ZVxuICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAqICAgICAgb3IgaW5jcmVhc2UgdGhlIHNwaWtpbmVzcyBvZiByZW5kZXJlZCB0ZXh0LlxuICovXG5mdW5jdGlvbiBUZXh0KHRleHQsIHN0eWxlLCByZXNvbHV0aW9uKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgZWxlbWVudCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gdG9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGhcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIGNhbnZhcy5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXModGhpcy5jYW52YXMpO1xuICAgIHRleHR1cmUudHJpbSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuICAgIFNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3ByaXRlLnByb3RvdHlwZSk7XG5UZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHQ7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHQ7XG5cblRleHQuZm9udFByb3BlcnRpZXNDYWNoZSA9IHt9O1xuVGV4dC5mb250UHJvcGVydGllc0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuVGV4dC5mb250UHJvcGVydGllc0NvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHQucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueCAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dCwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc2NhbGUueSAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlIC8gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBzdHlsZSBvZiB0aGUgdGV4dFxuICAgICAqXG4gICAgICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmZvbnQ9J2JvbGQgMjBwdCBBcmlhbCddIHtzdHJpbmd9IFRoZSBzdHlsZSBhbmQgc2l6ZSBvZiB0aGUgZm9udFxuICAgICAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGVnICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnN0cm9rZT0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlZyAnYmx1ZScsICcjRkNGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICAgICAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcFdpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIGF0IHdoaWNoIHRleHQgd2lsbCB3cmFwXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSGVpZ2h0XSB7bnVtYmVyfSBUaGUgbGluZSBoZWlnaHQsIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgc3BhY2UgdGhhdCBhIGxldHRlciB1c2VzXG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfG51bWJlcn0gQSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgb24gdGhlIGRyb3BzaGFkb3cgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzZdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0JsdXI9MF0ge251bWJlcn0gU2V0IGEgc2hhZG93IGJsdXIgcmFkaXVzXG4gICAgICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICAgICAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLnRleHRCYXNlbGluZT0nYWxwaGFiZXRpYyddIHtzdHJpbmd9IFRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dCB0aGF0IGlzIHJlbmRlcmVkLlxuICAgICAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gICAgICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gICAgICogQHBhcmFtIFtzdHlsZS5taXRlckxpbWl0PTEwXSB7bnVtYmVyfSBUaGUgbWl0ZXIgbGltaXQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdtaXRlcicgbGluZUpvaW4gbW9kZS4gVGhpcyBjYW4gcmVkdWNlXG4gICAgICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICBzdHlsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdHlsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3R5bGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZmlsbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5maWxsID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5maWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5zdHJva2UgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5zdHJva2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmRyb3BTaGFkb3dDb2xvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlLmZvbnQgPSBzdHlsZS5mb250IHx8ICdib2xkIDIwcHQgQXJpYWwnO1xuICAgICAgICAgICAgc3R5bGUuZmlsbCA9IHN0eWxlLmZpbGwgfHwgJ2JsYWNrJztcbiAgICAgICAgICAgIHN0eWxlLmFsaWduID0gc3R5bGUuYWxpZ24gfHwgJ2xlZnQnO1xuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gc3R5bGUuc3Ryb2tlIHx8ICdibGFjayc7IC8vcHJvdmlkZSBhIGRlZmF1bHQsIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2lzc3Vlcy8xMzZcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZVRoaWNrbmVzcyA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyB8fCAwO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXAgPSBzdHlsZS53b3JkV3JhcCB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLndvcmRXcmFwV2lkdGggPSBzdHlsZS53b3JkV3JhcFdpZHRoIHx8IDEwMDtcblxuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvdyA9IHN0eWxlLmRyb3BTaGFkb3cgfHwgZmFsc2U7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3IgfHwgJyMwMDAwMDAnO1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0FuZ2xlID0gc3R5bGUuZHJvcFNoYWRvd0FuZ2xlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93QW5nbGUgOiBNYXRoLlBJIC8gNjtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSA9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlIDogNTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXIgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dCbHVyIDogMDsgLy9zaGFkb3dCbHVyIGlzICcwJyBieSBkZWZhdWx0IGFjY29yZGluZyB0byBIVE1MXG5cbiAgICAgICAgICAgIHN0eWxlLnBhZGRpbmcgPSBzdHlsZS5wYWRkaW5nIHx8IDA7XG5cbiAgICAgICAgICAgIHN0eWxlLnRleHRCYXNlbGluZSA9IHN0eWxlLnRleHRCYXNlbGluZSB8fCAnYWxwaGFiZXRpYyc7XG5cbiAgICAgICAgICAgIHN0eWxlLmxpbmVKb2luID0gc3R5bGUubGluZUpvaW4gfHwgJ21pdGVyJztcbiAgICAgICAgICAgIHN0eWxlLm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0IHx8IDEwO1xuXG4gICAgICAgICAgICB0aGlzLl9zdHlsZSA9IHN0eWxlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjb3B5IGZvciB0aGUgdGV4dCBvYmplY3QuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHRleHQpe1xuICAgICAgICAgICAgdGV4dCA9IHRleHQudG9TdHJpbmcoKSB8fCAnICc7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dCA9PT0gdGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdGV4dDtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHN0eWxlID0gdGhpcy5fc3R5bGU7XG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuXG4gICAgLy8gd29yZCB3cmFwXG4gICAgLy8gcHJlc2VydmUgb3JpZ2luYWwgdGV4dFxuICAgIHZhciBvdXRwdXRUZXh0ID0gc3R5bGUud29yZFdyYXAgPyB0aGlzLndvcmRXcmFwKHRoaXMuX3RleHQpIDogdGhpcy5fdGV4dDtcblxuICAgIC8vIHNwbGl0IHRleHQgaW50byBsaW5lc1xuICAgIHZhciBsaW5lcyA9IG91dHB1dFRleHQuc3BsaXQoLyg/OlxcclxcbnxcXHJ8XFxuKS8pO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgd2lkdGhcbiAgICB2YXIgbGluZVdpZHRocyA9IG5ldyBBcnJheShsaW5lcy5sZW5ndGgpO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBmb250UHJvcGVydGllcyA9IHRoaXMuZGV0ZXJtaW5lRm9udFByb3BlcnRpZXMoc3R5bGUuZm9udCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBsaW5lV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQobGluZXNbaV0pLndpZHRoO1xuICAgICAgICBsaW5lV2lkdGhzW2ldID0gbGluZVdpZHRoO1xuICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxpbmVXaWR0aCk7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gbWF4TGluZVdpZHRoICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgd2lkdGggKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gKCB3aWR0aCArIHRoaXMuY29udGV4dC5saW5lV2lkdGggKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIC8vIGNhbGN1bGF0ZSB0ZXh0IGhlaWdodFxuICAgIHZhciBsaW5lSGVpZ2h0ID0gdGhpcy5zdHlsZS5saW5lSGVpZ2h0IHx8IGZvbnRQcm9wZXJ0aWVzLmZvbnRTaXplICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuXG4gICAgdmFyIGhlaWdodCA9IGxpbmVIZWlnaHQgKiBsaW5lcy5sZW5ndGg7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBoZWlnaHQgKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9ICggaGVpZ2h0ICsgdGhpcy5fc3R5bGUucGFkZGluZyAqIDIgKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMuY29udGV4dC5zY2FsZSggdGhpcy5yZXNvbHV0aW9uLCB0aGlzLnJlc29sdXRpb24pO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIH1cblxuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxTdHlsZT1cIiNGRjAwMDBcIjtcbiAgICAvL3RoaXMuY29udGV4dC5maWxsUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIHRoaXMuY29udGV4dC5mb250ID0gc3R5bGUuZm9udDtcbiAgICB0aGlzLmNvbnRleHQuc3Ryb2tlU3R5bGUgPSBzdHlsZS5zdHJva2U7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcbiAgICB0aGlzLmNvbnRleHQudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lO1xuICAgIHRoaXMuY29udGV4dC5saW5lSm9pbiA9IHN0eWxlLmxpbmVKb2luO1xuICAgIHRoaXMuY29udGV4dC5taXRlckxpbWl0ID0gc3R5bGUubWl0ZXJMaW1pdDtcblxuICAgIHZhciBsaW5lUG9zaXRpb25YO1xuICAgIHZhciBsaW5lUG9zaXRpb25ZO1xuXG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBpZiAoc3R5bGUuZHJvcFNoYWRvd0JsdXIgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3I7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Qmx1ciA9IHN0eWxlLmRyb3BTaGFkb3dCbHVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4U2hhZG93T2Zmc2V0ID0gTWF0aC5jb3Moc3R5bGUuZHJvcFNoYWRvd0FuZ2xlKSAqIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICAgICAgdmFyIHlTaGFkb3dPZmZzZXQgPSBNYXRoLnNpbihzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogbGluZUhlaWdodCkgKyBmb250UHJvcGVydGllcy5hc2NlbnQ7XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblggKyB4U2hhZG93T2Zmc2V0LCBsaW5lUG9zaXRpb25ZICsgeVNoYWRvd09mZnNldCArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9zZXQgY2FudmFzIHRleHQgc3R5bGVzXG4gICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmZpbGw7XG5cbiAgICAvL2RyYXcgbGluZXMgbGluZSBieSBsaW5lXG4gICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICBpZiAoc3R5bGUuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHlsZS5zdHJva2UgJiYgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVUZXh0dXJlKCk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLnRyaW0ueCA9IDA7XG4gICAgdGV4dHVyZS50cmltLnkgPSAtdGhpcy5fc3R5bGUucGFkZGluZztcblxuICAgIHRleHR1cmUudHJpbS53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRleHR1cmUudHJpbS5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgLSB0aGlzLl9zdHlsZS5wYWRkaW5nKjI7XG5cbiAgICB0aGlzLl93aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuX2hlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZW1pdCgndXBkYXRlJywgIHRleHR1cmUuYmFzZVRleHR1cmUpO1xuXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKi9cblRleHQucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgLy90aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUucmVuZGVyV2ViR0wuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgIC8vICAgdGhpcy5yZXNvbHV0aW9uID0gMS8vcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGFzY2VudCwgZGVzY2VudCBhbmQgZm9udFNpemUgb2YgYSBnaXZlbiBmb250U3R5bGVcbiAqXG4gKiBAcGFyYW0gZm9udFN0eWxlIHtvYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5kZXRlcm1pbmVGb250UHJvcGVydGllcyA9IGZ1bmN0aW9uIChmb250U3R5bGUpXG57XG4gICAgdmFyIHByb3BlcnRpZXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXTtcblxuICAgIGlmICghcHJvcGVydGllcylcbiAgICB7XG4gICAgICAgIHByb3BlcnRpZXMgPSB7fTtcblxuICAgICAgICB2YXIgY2FudmFzID0gVGV4dC5mb250UHJvcGVydGllc0NhbnZhcztcbiAgICAgICAgdmFyIGNvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dDtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgdmFyIHdpZHRoID0gTWF0aC5jZWlsKGNvbnRleHQubWVhc3VyZVRleHQoJ3xNw4lxJykud2lkdGgpO1xuICAgICAgICB2YXIgYmFzZWxpbmUgPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnTScpLndpZHRoKTtcbiAgICAgICAgdmFyIGhlaWdodCA9IDIgKiBiYXNlbGluZTtcblxuICAgICAgICBiYXNlbGluZSA9IGJhc2VsaW5lICogMS40IHwgMDtcblxuICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjZjAwJztcbiAgICAgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgY29udGV4dC50ZXh0QmFzZWxpbmUgPSAnYWxwaGFiZXRpYyc7XG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMwMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxUZXh0KCd8TcOJcScsIDAsIGJhc2VsaW5lKTtcblxuICAgICAgICB2YXIgaW1hZ2VkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCkuZGF0YTtcbiAgICAgICAgdmFyIHBpeGVscyA9IGltYWdlZGF0YS5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lID0gd2lkdGggKiA0O1xuXG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIHZhciBpZHggPSAwO1xuICAgICAgICB2YXIgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGFzY2VudC4gc2NhbiBmcm9tIHRvcCB0byBib3R0b20gdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGJhc2VsaW5lOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggKz0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuYXNjZW50ID0gYmFzZWxpbmUgLSBpO1xuXG4gICAgICAgIGlkeCA9IHBpeGVscyAtIGxpbmU7XG4gICAgICAgIHN0b3AgPSBmYWxzZTtcblxuICAgICAgICAvLyBkZXNjZW50LiBzY2FuIGZyb20gYm90dG9tIHRvIHRvcCB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSBoZWlnaHQ7IGkgPiBiYXNlbGluZTsgaS0tKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGluZTsgaiArPSA0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0b3ApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWR4IC09IGxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLmRlc2NlbnQgPSBpIC0gYmFzZWxpbmU7XG4gICAgICAgIHByb3BlcnRpZXMuZm9udFNpemUgPSBwcm9wZXJ0aWVzLmFzY2VudCArIHByb3BlcnRpZXMuZGVzY2VudDtcblxuICAgICAgICBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXSA9IHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgbmV3bGluZXMgdG8gYSBzdHJpbmcgdG8gaGF2ZSBpdCBvcHRpbWFsbHkgZml0IGludG8gdGhlIGhvcml6b250YWxcbiAqIGJvdW5kcyBzZXQgYnkgdGhlIFRleHQgb2JqZWN0J3Mgd29yZFdyYXBXaWR0aCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUud29yZFdyYXAgPSBmdW5jdGlvbiAodGV4dClcbntcbiAgICAvLyBHcmVlZHkgd3JhcHBpbmcgYWxnb3JpdGhtIHRoYXQgd2lsbCB3cmFwIHdvcmRzIGFzIHRoZSBsaW5lIGdyb3dzIGxvbmdlclxuICAgIC8vIHRoYW4gaXRzIGhvcml6b250YWwgYm91bmRzLlxuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgICB2YXIgd29yZFdyYXBXaWR0aCA9IHRoaXMuX3N0eWxlLndvcmRXcmFwV2lkdGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcGFjZUxlZnQgPSB3b3JkV3JhcFdpZHRoO1xuICAgICAgICB2YXIgd29yZHMgPSBsaW5lc1tpXS5zcGxpdCgnICcpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdvcmRzLmxlbmd0aDsgaisrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgd29yZFdpZHRoID0gdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KHdvcmRzW2pdKS53aWR0aDtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGhXaXRoU3BhY2UgPSB3b3JkV2lkdGggKyB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQoJyAnKS53aWR0aDtcbiAgICAgICAgICAgIGlmIChqID09PSAwIHx8IHdvcmRXaWR0aFdpdGhTcGFjZSA+IHNwYWNlTGVmdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHByaW50aW5nIHRoZSBuZXdsaW5lIGlmIGl0J3MgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxpbmUgdGhhdCBpc1xuICAgICAgICAgICAgICAgIC8vIGdyZWF0ZXIgdGhhbiB0aGUgd29yZCB3cmFwIHdpZHRoLlxuICAgICAgICAgICAgICAgIGlmIChqID4gMClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdvcmRzW2pdO1xuICAgICAgICAgICAgICAgIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGggLSB3b3JkV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0IC09IHdvcmRXaWR0aFdpdGhTcGFjZTtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyAnICsgd29yZHNbal07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaSA8IGxpbmVzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBUZXh0IGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIFRleHRcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIHJldHVybiBTcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcy5jYWxsKHRoaXMsIG1hdHJpeCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dCBvYmplY3QuXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9dHJ1ZV0ge2Jvb2xlYW59IHdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZVRleHR1cmUpXG57XG4gICAgLy8gbWFrZSBzdXJlIHRvIHJlc2V0IHRoZSB0aGUgY29udGV4dCBhbmQgY2FudmFzLi4gZG9udCB3YW50IHRoaXMgaGFuZ2luZyBhcm91bmQgaW4gbWVtb3J5IVxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xuXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG59O1xuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9GaWx0ZXJNYW5hZ2VyJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgdGVtcFJlY3QgPSBuZXcgbWF0aC5SZWN0YW5nbGUoKTtcblxuLyoqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBCYXNlUmVuZGVyVGV4dHVyZSBzaG91bGQgYmUgcHJlbG9hZGVkXG4gKiBvdGhlcndpc2UgYmxhY2sgcmVjdGFuZ2xlcyB3aWxsIGJlIGRyYXduIGluc3RlYWQuXG4gKlxuICogQSBCYXNlUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIEJhc2VyZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIDgwMCwgNjAwKTtcbiAqIHZhciBzcHJpdGUgPSBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJzcGluT2JqXzAxLnBuZ1wiKTtcbiAqXG4gKiBzcHJpdGUucG9zaXRpb24ueCA9IDgwMC8yO1xuICogc3ByaXRlLnBvc2l0aW9uLnkgPSA2MDAvMjtcbiAqIHNwcml0ZS5hbmNob3IueCA9IDAuNTtcbiAqIHNwcml0ZS5hbmNob3IueSA9IDAuNTtcbiAqXG4gKiBCYXNlcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgQmFzZXJlbmRlclRleHR1cmVcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgZm9yIHRoaXMgQmFzZVJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgaWYgKCFyZW5kZXJlcilcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNyZWF0ZSBCYXNlUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgbnVsbCwgc2NhbGVNb2RlKTtcbiAgIFxuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAxMDA7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OOztcbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIERyYXcvcmVuZGVyIHRoZSBnaXZlbiBEaXNwbGF5T2JqZWN0IG9udG8gdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheU9iamVjdCBhbmQgZGVzY2VuZGVudHMgYXJlIHRyYW5zZm9ybWVkIGR1cmluZyB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBJZiBgdXBkYXRlVHJhbnNmb3JtYCBpcyB0cnVlIHRoZW4gdGhlIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkIGJlZm9yZSB0aGVcbiAgICAgKiBtZXRob2QgcmV0dXJucy4gT3RoZXJ3aXNlIGl0IGlzIHVwIHRvIHRoZSBjYWxsaW5nIGNvZGUgdG8gY29ycmVjdGx5IHVzZSBvciByZXNldFxuICAgICAqIHRoZSB0cmFuc2Zvcm1lZCBkaXNwbGF5IG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgaXMgYWx3YXlzIHJlbmRlcmVkIHdpdGggYSB3b3JsZEFscGhhIHZhbHVlIG9mIDEuXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAgICAgKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBPcHRpb25hbCBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIGRpc3BsYXkgb2JqZWN0IGJlZm9yZSByZW5kZXJpbmcuXG4gICAgICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICAgICAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gICAgICogIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkLiBOb3QgcmVzdG9yaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBhIGxpdHRsZSBmYXN0ZXIuXG4gICAgICovXG4gICAgdGhpcy5yZW5kZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgQmFzZVJlbmRlclRleHR1cmUgdXNlcy4gQSBCYXNlUmVuZGVyVGV4dHVyZSBjYW4gb25seSBiZWxvbmcgdG8gb25lIHJlbmRlcmVyIGF0IHRoZSBtb21lbnQgaWYgaXRzIHdlYkdMLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgUmVuZGVyVGFyZ2V0KGdsLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5zY2FsZU1vZGUsIHRoaXMucmVzb2x1dGlvbik7Ly8sIHRoaXMudGhpcy5zY2FsZU1vZGUpO1xuICAgICAgICB0aGlzLl9nbFRleHR1cmVzW2dsLmlkXSA9ICB0aGlzLnRleHR1cmVCdWZmZXIudGV4dHVyZTtcbiAgICAgICAgXG4gICAgICAgIC8vVE9ETyByZWZhY3RvciBmaWx0ZXIgbWFuYWdlci4uIGFzIHJlYWxseSBpdHMgbm8gbG9uZ2VyIGEgbWFuYWdlciBpZiB3ZSB1c2UgaXQgaGVyZS4uXG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJXZWJHTDtcblxuICAgICAgICAvLyB0aGUgY3JlYXRpb24gb2YgYSBmaWx0ZXIgbWFuYWdlciB1bmJpbmRzIHRoZSBidWZmZXJzLi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbiAgICAgICAgaWYodGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0KXRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJDYW52YXM7XG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIodGhpcy53aWR0aCogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbn1cblxuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlVGV4dHVyZS5wcm90b3R5cGUpO1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzZVJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VSZW5kZXJUZXh0dXJlO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGlmICh3aWR0aCA9PT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT09IHRoaXMuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5maWx0ZXJNYW5hZ2VyKVxuICAgIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLnJlbmRlcmVyLmdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcihmYWxzZSwgZGVzdGluYXRpb25GcmFtZSk7XG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gKHVwZGF0ZVRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSA/IHVwZGF0ZVRyYW5zZm9ybSA6IHRydWU7Ly8hdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnRyYW5zZm9ybSA9IG1hdHJpeDtcblxuICAgIC8vVE9ETyBub3QgYSBmYW4gdGhhdCB0aGlzIGlzIGhlcmUuLi4gaXQgd2lsbCBtb3ZlIVxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5hY3RpdmF0ZSgpO1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgaWYgKHVwZGF0ZVRyYW5zZm9ybSlcbiAgICB7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIG1hdHJpeCBvZiB0aGUgZGlzcGxhdHlPYmplY3QuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmlkZW50aXR5KCk7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgICAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRlbXBSZWN0LndpZHRoID0gZnJhbWUuaGVpZ2h0O1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IGZyYW1lLndpZHRoO1xuICAgXG4gICAgLy9UT0RPIHJlbmFtZSB0ZXh0dXJlQnVmZmVyIHRvIHJlbmRlclRhcmdldC4uXG4gICAgdmFyIHRlbXAgPSAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyID0gdGhpcy5maWx0ZXJNYW5hZ2VyO1xuICAgIFxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKGZyYW1lLCB0ZW1wUmVjdCk7XG4gICAgY29uc29sZS5sb2coZGlzcGxheU9iamVjdClcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgdGhpcy50ZXh0dXJlQnVmZmVyLCBjbGVhcik7XG5cbiAgIC8vIGNvbnNvbGUubG9nKFwiUkVOREVSSU5HIFwiKTtcbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0ZW1wO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXJdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChmcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAhIXVwZGF0ZVRyYW5zZm9ybTtcblxuICAgIHZhciB3dCA9IHRlbXBNYXRyaXg7XG5cbiAgICB3dC5pZGVudGl0eSgpO1xuXG4gICAgaWYgKG1hdHJpeClcbiAgICB7XG4gICAgICAgIHd0LmFwcGVuZChtYXRyaXgpO1xuICAgIH1cblxuXG4gICAgd3QudHggKz0gZnJhbWUueDtcbiAgICB3dC50eSArPSBmcmFtZS55O1xuXG4gICAgdmFyIGNhY2hlZFd0ID0gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybTtcbiAgICBcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gd3Q7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgdmFyIGksIGo7XG5cbiAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgXG4vLyAgICB0aGlzLnRleHR1cmVCdWZmZXIuXG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dDtcblxuICAgIHZhciByZWFsUmVzb2x1dGlvbiA9IHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHJlYWxSZXNvbHV0aW9uO1xuXG4gICAgaWYoZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9PT0gd3QpXG4gICAge1xuICAgICAgICAvLyBmaXhlcyBjYWNoZUFzQml0bWFwIEhhcHBlbmluZyBkdXJpbmcgdGhlIGFib3ZlLi5cbiAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IGNhY2hlZFd0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gZGVzdHJveUJhc2Uge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCB0cnVlKTtcblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICAvLyBkZXN0cm95IHRoZSBmaWx0ZXJtYW5hZ2VyLi5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEltYWdlID0gZnVuY3Rpb24gKGZyYW1lKVxue1xuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLnNyYyA9IHRoaXMuZ2V0QmFzZTY0KGZyYW1lKTtcbiAgICByZXR1cm4gaW1hZ2U7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIEJhc2VSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRCYXNlNjQgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRDYW52YXMoZnJhbWUpLnRvRGF0YVVSTCgpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB0byBpdCBhbmQgdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBBIENhbnZhcyBlbGVtZW50IHdpdGggdGhlIHRleHR1cmUgcmVuZGVyZWQgb24uXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgIFxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgQ2FudmFzQnVmZmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHRlbXBDYW52YXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0RhdGEuZGF0YS5zZXQod2ViR0xQaXhlbHMpO1xuXG4gICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGZyYW1lLndpZHRoID09PSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLndpZHRoICYmIFxuICAgICAgICAgICBmcmFtZS5oZWlnaHQgPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIoZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcbiAgICAgICAgICAgIHZhciBjYW52YXNEYXRhID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNvbnRleHQuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggICogcmVzb2x1dGlvbiwgZnJhbWUueSAqIHJlc29sdXRpb24sIGZyYW1lLndpZHRoICogcmVzb2x1dGlvbiwgZnJhbWUuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0ZW1wQ2FudmFzLmNhbnZhcztcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKCBmcmFtZSApXG57XG4gICAgaWYoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgZnJhbWUud2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS53aWR0aDtcbiAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IGZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YShmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoZnJhbWUsIHgsIHkpXG57XG4gICAgdGVtcFJlY3QueCA9IHg7XG4gICAgdGVtcFJlY3QueSA9IHk7XG4gICAgdGVtcFJlY3Qud2lkdGggPSAxIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZihmcmFtZSlcbiAgICB7XG4gICAgICAgIHRlbXBSZWN0LnggKz0gZnJhbWUueDtcbiAgICAgICAgdGVtcFJlY3QueSArPSBmcmFtZS55O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFBpeGVscyh0ZW1wUmVjdCk7XG59O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZS4gQWxsIHRleHR1cmVzIGhhdmUgYSBiYXNlIHRleHR1cmUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBmb3IgZGV2aWNlcyB3aXRoIGRpZmZlcmVudCBwaXhlbCByYXRpb3NcbiAqL1xuZnVuY3Rpb24gQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnVpZCA9IHV0aWxzLnVpZCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgYmFzZSB0ZXh0dXJlIHNldCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAxMDA7XG5cbiAgICAvLyBUT0RPIGRvY3NcbiAgICAvLyB1c2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgZGltZW5zaW9ucyBvZiB0aGUgc291cmNlXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIHdpZHRoIG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsV2lkdGggPSAxMDA7XG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIGhlaWdodCBvZiB0aGUgc291cmNlIG9mIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucmVhbEhlaWdodCA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlIHRvIGFwcGx5IHdoZW4gc2NhbGluZyB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlNDQUxFX01PREVTLkxJTkVBUlxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSBvbmNlIHRoZSBiYXNlIHRleHR1cmUgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG5ldmVyIHRydWUgaWYgdGhlIHVuZGVybHlpbmcgc291cmNlIGZhaWxzIHRvIGxvYWQgb3IgaGFzIG5vIHRleHR1cmUgZGF0YS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIGlmIHRoZSBzb3VyY2UgaXMgY3VycmVudGx5IGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBJZiBhbiBJbWFnZSBzb3VyY2UgaXMgbG9hZGluZyB0aGUgJ2xvYWRlZCcgb3IgJ2Vycm9yJyBldmVudCB3aWxsIGJlXG4gICAgICogZGlzcGF0Y2hlZCB3aGVuIHRoZSBvcGVyYXRpb24gZW5kcy4gQW4gdW5kZXJ5bGluZyBzb3VyY2UgdGhhdCBpc1xuICAgICAqIGltbWVkaWF0ZWx5LWF2YWlsYWJsZSBieXBhc3NlcyBsb2FkaW5nIGVudGlyZWx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGltYWdlIHNvdXJjZSB0aGF0IGlzIHVzZWQgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogVE9ETzogTWFrZSB0aGlzIGEgc2V0dGVyIHRoYXQgY2FsbHMgbG9hZFNvdXJjZSgpO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SW1hZ2V8Q2FudmFzfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuc291cmNlID0gbnVsbDsgLy8gc2V0IGluIGxvYWRTb3VyY2UsIGlmIGF0IGFsbFxuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgaWYgUkdCIGNoYW5uZWxzIHNob3VsZCBiZSBwcmUtbXVsdGlwbGllZCBieSBBbHBoYSAgKFdlYkdMIG9ubHkpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgb3Igbm90IHRoZSB0ZXh0dXJlIGlzIGEgcG93ZXIgb2YgdHdvLCB0cnkgdG8gdXNlIHBvd2VyIG9mIHR3byB0ZXh0dXJlcyBhcyBtdWNoIGFzIHlvdSBjYW5cbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSBmYWxzZTtcblxuICAgIC8vIHVzZWQgZm9yIHdlYkdMXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgYSBtaXBtYXAgb2YgdGhpcyB0ZXh0dXJlIG5lZWRzIHRvIGJlIGdlbmVyYXRlZC4gVGhpcyB2YWx1ZSBuZWVkcyB0byBiZSBzZXQgYmVmb3JlIHRoZSB0ZXh0dXJlIGlzIHVzZWRcbiAgICAgKiBBbHNvIHRoZSB0ZXh0dXJlIG11c3QgYmUgYSBwb3dlciBvZiB0d28gc2l6ZSB0byB3b3JrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubWlwbWFwID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBBIG1hcCBvZiByZW5kZXJlciBJRHMgdG8gd2ViZ2wgdGV4dHVyZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIFdlYkdMVGV4dHVyZT59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbFRleHR1cmVzID0ge307XG4gICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5faWQgPSAwO1xuICAgIFxuICAgIC8vIGlmIG5vIHNvdXJjZSBwYXNzZWQgZG9uJ3QgdHJ5IHRvIGxvYWRcbiAgICBpZiAoc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5sb2FkU291cmNlKHNvdXJjZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZpbmlzaGVzIGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZGVkXG4gICAgICogQG1lbWJlcm9mIFBJWEkuQmFzZVRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZhaWxzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG59XG5cbkJhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdGV4dHVyZSBvbiBhbGwgdGhlIHdlYmdsIHJlbmRlcmVycywgdGhpcyBhbHNvIGFzc3VtZXMgdGhlIHNyYyBoYXMgY2hhbmdlZC5cbiAqXG4gKiBAZmlyZXMgdXBkYXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVhbFdpZHRoID0gdGhpcy5zb3VyY2UubmF0dXJhbFdpZHRoIHx8IHRoaXMuc291cmNlLndpZHRoO1xuICAgIHRoaXMucmVhbEhlaWdodCA9IHRoaXMuc291cmNlLm5hdHVyYWxIZWlnaHQgfHwgdGhpcy5zb3VyY2UuaGVpZ2h0O1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMucmVhbFdpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5yZWFsSGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSB1dGlscy5pc1Bvd2VyT2ZUd28odGhpcy5yZWFsV2lkdGgsIHRoaXMucmVhbEhlaWdodCk7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBMb2FkIGEgc291cmNlLlxuICpcbiAqIElmIHRoZSBzb3VyY2UgaXMgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSwgc3VjaCBhcyBhbiBpbWFnZSB0aGF0IG5lZWRzIHRvIGJlXG4gKiBkb3dubG9hZGVkLCB0aGVuIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmUgZGlzcGF0Y2hlZCBpbiB0aGUgZnV0dXJlXG4gKiBhbmQgYGhhc0xvYWRlZGAgd2lsbCByZW1haW4gZmFsc2UgYWZ0ZXIgdGhpcyBjYWxsLlxuICpcbiAqIFRoZSBsb2dpYyBzdGF0ZSBhZnRlciBjYWxsaW5nIGBsb2FkU291cmNlYCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IChlZy4gYGZyb21JbWFnZWAsIGBuZXcgQmFzZVRleHR1cmVgKSBpczpcbiAqXG4gKiAgICAgaWYgKHRleHR1cmUuaGFzTG9hZGVkKVxuIHtcbiAqICAgICAgICAvLyB0ZXh0dXJlIHJlYWR5IGZvciB1c2VcbiAqICAgICB9IGVsc2UgaWYgKHRleHR1cmUuaXNMb2FkaW5nKVxuIHtcbiAqICAgICAgICAvLyBsaXN0ZW4gdG8gJ2xvYWRlZCcgYW5kL29yICdlcnJvcicgZXZlbnRzIG9uIHRleHR1cmVcbiAqICAgICB9IGVsc2Uge1xuICogICAgICAgIC8vIG5vdCBsb2FkaW5nLCBub3QgZ29pbmcgdG8gbG9hZCBVTkxFU1MgdGhlIHNvdXJjZSBpcyByZWxvYWRlZFxuICogICAgICAgIC8vIChpdCBtYXkgc3RpbGwgbWFrZSBzZW5zZSB0byBsaXN0ZW4gdG8gdGhlIGV2ZW50cylcbiAqICAgICB9XG4gKlxuICogQHByb3RlY3RlZFxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmxvYWRTb3VyY2UgPSBmdW5jdGlvbiAoc291cmNlKVxue1xuICAgIHZhciB3YXNMb2FkaW5nID0gdGhpcy5pc0xvYWRpbmc7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKHdhc0xvYWRpbmcgJiYgdGhpcy5zb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmVycm9yID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcblxuICAgIC8vIEFwcGx5IHNvdXJjZSBpZiBsb2FkZWQuIE90aGVyd2lzZSBzZXR1cCBhcHByb3ByaWF0ZSBsb2FkaW5nIG1vbml0b3JzLlxuICAgIGlmICgodGhpcy5zb3VyY2UuY29tcGxldGUgfHwgdGhpcy5zb3VyY2UuZ2V0Q29udGV4dCkgJiYgdGhpcy5zb3VyY2Uud2lkdGggJiYgdGhpcy5zb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFzb3VyY2UuZ2V0Q29udGV4dClcbiAgICB7XG5cbiAgICAgICAgLy8gSW1hZ2UgZmFpbCAvIG5vdCByZWFkeVxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgdmFyIHNjb3BlID0gdGhpcztcblxuICAgICAgICBzb3VyY2Uub25sb2FkID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgIHNjb3BlLmVtaXQoJ2xvYWRlZCcsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzb3VyY2Uub25lcnJvciA9IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXNjb3BlLmlzTG9hZGluZylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuZW1pdCgnZXJyb3InLCBzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUGVyIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI3RoZS1pbWctZWxlbWVudFxuICAgICAgICAvLyAgIFwiVGhlIHZhbHVlIG9mIGBjb21wbGV0ZWAgY2FuIHRodXMgY2hhbmdlIHdoaWxlIGEgc2NyaXB0IGlzIGV4ZWN1dGluZy5cIlxuICAgICAgICAvLyBTbyBjb21wbGV0ZSBuZWVkcyB0byBiZSByZS1jaGVja2VkIGFmdGVyIHRoZSBjYWxsYmFja3MgaGF2ZSBiZWVuIGFkZGVkLi5cbiAgICAgICAgLy8gTk9URTogY29tcGxldGUgd2lsbCBiZSB0cnVlIGlmIHRoZSBpbWFnZSBoYXMgbm8gc3JjIHNvIGJlc3QgdG8gY2hlY2sgaWYgdGhlIHNyYyBpcyBzZXQuXG4gICAgICAgIGlmIChzb3VyY2UuY29tcGxldGUgJiYgc291cmNlLnNyYylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gLi5hbmQgaWYgd2UncmUgY29tcGxldGUgbm93LCBubyBuZWVkIGZvciBjYWxsYmFja3NcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiBhbnkgcHJldmlvdXMgc3Vic2NyaWJlcnMgcG9zc2libGVcbiAgICAgICAgICAgICAgICBpZiAod2FzTG9hZGluZylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZCBpbnRlcm5hbGx5IHRvIHVwZGF0ZSB0aGUgd2lkdGgsIGhlaWdodCwgYW5kIHNvbWUgb3RoZXIgdHJhY2tpbmcgdmFycyBvbmNlXG4gKiBhIHNvdXJjZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuX3NvdXJjZUxvYWRlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgYmFzZSB0ZXh0dXJlXG4gKlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuaW1hZ2VVcmwpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcbiAgICAgICAgZGVsZXRlIHV0aWxzLlRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcblxuICAgICAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgICAgICBpZiAoIW5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZS5zcmMgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdGhpcy5zb3VyY2UuX3BpeGlJZF07XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsO1xuXG4gICAgdGhpcy5kaXNwb3NlKCk7XG59O1xuXG4vKipcbiAqIEZyZWVzIHRoZSB0ZXh0dXJlIGZyb20gV2ViR0wgbWVtb3J5IHdpdGhvdXQgZGVzdHJveWluZyB0aGlzIHRleHR1cmUgb2JqZWN0LlxuICogVGhpcyBtZWFucyB5b3UgY2FuIHN0aWxsIHVzZSB0aGUgdGV4dHVyZSBsYXRlciB3aGljaCB3aWxsIHVwbG9hZCBpdCB0byBHUFVcbiAqIG1lbW9yeSBhZ2Fpbi5cbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmVtaXQoJ2Rpc3Bvc2UnLCB0aGlzKTtcblxuICAgIC8vIHRoaXMgc2hvdWxkIG5vIGxvbmdlciBiZSBuZWVkZWQsIHRoZSByZW5kZXJlcnMgc2hvdWxkIGNsZWFudXAgYWxsIHRoZSBnbCB0ZXh0dXJlcy5cbiAgICAvLyB0aGlzLl9nbFRleHR1cmVzID0ge307XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHNvdXJjZSBpbWFnZSBvZiB0aGUgdGV4dHVyZS5cbiAqIFRoZSBvcmlnaW5hbCBzb3VyY2UgbXVzdCBiZSBhbiBJbWFnZSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBuZXdTcmMge3N0cmluZ30gdGhlIHBhdGggb2YgdGhlIGltYWdlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGVTb3VyY2VJbWFnZSA9IGZ1bmN0aW9uIChuZXdTcmMpXG57XG4gICAgdGhpcy5zb3VyY2Uuc3JjID0gbmV3U3JjO1xuXG4gICAgdGhpcy5sb2FkU291cmNlKHRoaXMuc291cmNlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGJhc2UgdGV4dHVyZSBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSBiYXNlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBjcmVhdGVkIGFuZCBsb2FkZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlVXJsIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gU2hvdWxkIHVzZSBhbm9ueW1vdXMgQ09SUz8gRGVmYXVsdHMgdG8gdHJ1ZSBpZiB0aGUgVVJMIGlzIG5vdCBhIGRhdGEtVVJJLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF07XG5cbiAgICBpZiAoY3Jvc3NvcmlnaW4gPT09IHVuZGVmaW5lZCAmJiBpbWFnZVVybC5pbmRleE9mKCdkYXRhOicpICE9PSAwKVxuICAgIHtcbiAgICAgICAgY3Jvc3NvcmlnaW4gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICAvLyBuZXcgSW1hZ2UoKSBicmVha3MgdGV4IGxvYWRpbmcgaW4gc29tZSB2ZXJzaW9ucyBvZiBDaHJvbWUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjM4MDcxXG4gICAgICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpOy8vZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgICAgIGlmIChjcm9zc29yaWdpbilcbiAgICAgICAge1xuICAgICAgICAgICAgaW1hZ2UuY3Jvc3NPcmlnaW4gPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGltYWdlLCBzY2FsZU1vZGUpO1xuICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IGltYWdlVXJsO1xuXG4gICAgICAgIGltYWdlLnNyYyA9IGltYWdlVXJsO1xuXG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gYmFzZVRleHR1cmU7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4gQDJ4IGF0IHRoZSBlbmQgb2YgdGhlIHVybCB3ZSBhcmUgZ29pbmcgdG8gYXNzdW1lIGl0cyBhIGhpZ2hyZXMgaW1hZ2VcbiAgICAgICAgYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHV0aWxzLmdldFJlc29sdXRpb25PZlVybChpbWFnZVVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIGlmICghY2FudmFzLl9waXhpSWQpXG4gICAge1xuICAgICAgICBjYW52YXMuX3BpeGlJZCA9ICdjYW52YXNfJyArIHV0aWxzLnVpZCgpO1xuICAgIH1cblxuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbY2FudmFzLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGNhbnZhcywgc2NhbGVNb2RlKTtcbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuIiwidmFyIEJhc2VSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbi8qKlxuICogQSBSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIFJlbmRlclRleHR1cmUgdGFrZXMgYSBzbmFwc2hvdCBvZiBhbnkgRGlzcGxheSBPYmplY3QgZ2l2ZW4gdG8gaXRzIHJlbmRlciBtZXRob2QuIFRoZSBwb3NpdGlvblxuICogYW5kIHJvdGF0aW9uIG9mIHRoZSBnaXZlbiBEaXNwbGF5IE9iamVjdHMgaXMgaWdub3JlZC4gRm9yIGV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDEwMjQsIDEwMjQsIHsgdmlldzogY2FudmFzLCByYXRpbzogMSB9KTtcbiAqIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKHNwcml0ZSk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgU3ByaXRlIGluIHRoaXMgY2FzZSB3aWxsIGJlIHJlbmRlcmVkIHRvIGEgcG9zaXRpb24gb2YgMCwwLiBUbyByZW5kZXIgdGhpcyBzcHJpdGUgYXQgaXRzIGFjdHVhbFxuICogcG9zaXRpb24gYSBDb250YWluZXIgc2hvdWxkIGJlIHVzZWQ6XG4gKlxuICogYGBganNcbiAqIHZhciBkb2MgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqXG4gKiBkb2MuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqXG4gKiByZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBSZW5kZXJUZXh0dXJlXG4gKiBAcGFyYW0gW3dpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtoZWlnaHQ9MTAwXSB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtzY2FsZU1vZGVdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIFtyZXNvbHV0aW9uPTFdIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICovXG5mdW5jdGlvbiBSZW5kZXJUZXh0dXJlKGJhc2VSZW5kZXJUZXh0dXJlLCBmcmFtZSlcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIFJlbmRlclRleHR1cmUsIHlvdSBtdXN0IHBhc3MgYSByZW5kZXJlciBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIG9iamVjdCB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtCYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICBUZXh0dXJlLmNhbGwodGhpcyxcbiAgICAgICAgYmFzZVJlbmRlclRleHR1cmUsXG4gICAgICAgIGZyYW1lIFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fdXBkYXRlVXZzKCk7XG59XG5cblJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlLnByb3RvdHlwZSk7XG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgUmVuZGVyVGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gdXBkYXRlQmFzZSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBiYXNlVGV4dHVyZS53aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBiZSByZXNpemVkIGFzIHdlbGw/XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB1cGRhdGVCYXNlKVxue1xuICAgXG4gICAgLy9UT0RPIC0gY291bGQgYmUgbm90IHJlcXVpcmVkLi5cbiAgICB0aGlzLnZhbGlkID0gKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTtcblxuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy5jcm9wLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jcm9wLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh1cGRhdGVCYXNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5yZXNpemUod2lkdGgsIGhlaWdodClcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLmNsZWFyKHRoaXMuZnJhbWUpXG4gICAgXG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5iYXNlVGV4dHVyZS5yZW5kZXIodGhpcy5mcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIHRoaXMgdGV4dHVyZS4gSXQgd29ya3MgYnkgY2FsbGluZyBSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0QmFzZTY0LmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0Q2FudmFzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRDYW52YXModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgdGhlIGVudGlyZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbHModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgYSBwaXhlbCB3aXRoaW4gdGhlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbCh0aGlzLmZyYW1lLCB4LCB5KTtcbn07XG5cblJlbmRlclRleHR1cmUuY3JlYXRlID0gZnVuY3Rpb24ocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICByZXR1cm4gbmV3IFJlbmRlclRleHR1cmUobmV3IEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pKTtcbn1cblxuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzID0gcmVxdWlyZSgnLi9UZXh0dXJlVXZzJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZSBvciBwYXJ0IG9mIGFuIGltYWdlLiBJdCBjYW5ub3QgYmUgYWRkZWRcbiAqIHRvIHRoZSBkaXNwbGF5IGxpc3QgZGlyZWN0bHkuIEluc3RlYWQgdXNlIGl0IGFzIHRoZSB0ZXh0dXJlIGZvciBhIFNwcml0ZS4gSWYgbm8gZnJhbWUgaXMgcHJvdmlkZWQgdGhlbiB0aGUgd2hvbGUgaW1hZ2UgaXMgdXNlZC5cbiAqXG4gKiBZb3UgY2FuIGRpcmVjdGx5IGNyZWF0ZSBhIHRleHR1cmUgZnJvbSBhbiBpbWFnZSBhbmQgdGhlbiByZXVzZSBpdCBtdWx0aXBsZSB0aW1lcyBsaWtlIHRoaXMgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIHZhciBzcHJpdGUxID0gbmV3IFBJWEkuU3ByaXRlKHRleHR1cmUpO1xuICogdmFyIHNwcml0ZTIgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gYmFzZVRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV9IFRoZSBiYXNlIHRleHR1cmUgc291cmNlIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZSBmcm9tXG4gKiBAcGFyYW0gW2ZyYW1lXSB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5nbGUgZnJhbWUgb2YgdGhlIHRleHR1cmUgdG8gc2hvd1xuICogQHBhcmFtIFtjcm9wXSB7UElYSS5SZWN0YW5nbGV9IFRoZSBhcmVhIG9mIG9yaWdpbmFsIHRleHR1cmVcbiAqIEBwYXJhbSBbdHJpbV0ge1BJWEkuUmVjdGFuZ2xlfSBUcmltbWVkIHRleHR1cmUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gW3JvdGF0ZV0ge2Jvb2xlYW59IGluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXMgKCB1c2VkIGJ5IHRleHR1cmUgcGFja2VyIClcbiAqL1xuZnVuY3Rpb24gVGV4dHVyZShiYXNlVGV4dHVyZSwgZnJhbWUsIGNyb3AsIHRyaW0sIHJvdGF0ZSlcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIERvZXMgdGhpcyBUZXh0dXJlIGhhdmUgYW55IGZyYW1lIGRhdGEgYXNzaWduZWQgdG8gaXQ/XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubm9GcmFtZSA9IGZhbHNlO1xuXG4gICAgaWYgKCFmcmFtZSlcbiAgICB7XG4gICAgICAgIHRoaXMubm9GcmFtZSA9IHRydWU7XG4gICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuICAgIH1cblxuICAgIGlmIChiYXNlVGV4dHVyZSBpbnN0YW5jZW9mIFRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmFzZVRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy5iYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdHJpbSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy50cmltID0gdHJpbTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgdGhlIHJlbmRlcmVyIGtub3cgaWYgdGhlIHRleHR1cmUgaXMgdmFsaWQuIElmIGl0J3Mgbm90IHRoZW4gaXQgY2Fubm90IGJlIHJlbmRlcmVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHdpbGwgbGV0IGEgcmVuZGVyZXIga25vdyB0aGF0IGEgdGV4dHVyZSBoYXMgYmVlbiB1cGRhdGVkICh1c2VkIG1haW5seSBmb3Igd2ViR0wgdXYgdXBkYXRlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXF1aXJlc1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFdlYkdMIFVWIGRhdGEgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0dXJlIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIGFyZWEgb2YgdGhlIEJhc2VUZXh0dXJlIGltYWdlIHRvIGFjdHVhbGx5IGNvcHkgdG8gdGhlIENhbnZhcyAvIFdlYkdMIHdoZW4gcmVuZGVyaW5nLFxuICAgICAqIGlycmVzcGVjdGl2ZSBvZiB0aGUgYWN0dWFsIGZyYW1lIHNpemUgb3IgcGxhY2VtZW50ICh3aGljaCBjYW4gYmUgaW5mbHVlbmNlZCBieSB0cmltbWVkIHRleHR1cmUgYXRsYXNlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3JvcCA9IGNyb3AgfHwgZnJhbWU7Ly9uZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgcm90YXRlZCBieSA5MCBkZWdyZWVzXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb3RhdGUgPSAhIXJvdGF0ZTtcblxuICAgIGlmIChiYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICBmcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gZnJhbWUgd2Ugc2hvdWxkIG1vbml0b3IgZm9yIGFueSBiYXNlIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5vbigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZS5vbmNlKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZC4gVGhpcyBoYXBwZW5zIGlmIHRoZSBmcmFtZSBvciB0aGUgYmFzZVRleHR1cmUgaXMgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBldmVudCB1cGRhdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0dXJlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqL1xuICAgIGZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBmcmFtZTtcblxuICAgICAgICAgICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHRoaXMud2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMudHJpbSAmJiAhdGhpcy5yb3RhdGUgJiYgKGZyYW1lLnggKyBmcmFtZS53aWR0aCA+IHRoaXMuYmFzZVRleHR1cmUud2lkdGggfHwgZnJhbWUueSArIGZyYW1lLmhlaWdodCA+IHRoaXMuYmFzZVRleHR1cmUuaGVpZ2h0KSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHR1cmUgRXJyb3I6IGZyYW1lIGRvZXMgbm90IGZpdCBpbnNpZGUgdGhlIGJhc2UgVGV4dHVyZSBkaW1lbnNpb25zICcgKyB0aGlzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy90aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuc291cmNlICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuICAgICAgICAgICAgdGhpcy52YWxpZCA9IGZyYW1lICYmIGZyYW1lLndpZHRoICYmIGZyYW1lLmhlaWdodCAmJiB0aGlzLmJhc2VUZXh0dXJlLmhhc0xvYWRlZDtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJpbSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy50cmltLmhlaWdodDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS53aWR0aCA9IHRoaXMudHJpbS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JvcCA9IGZyYW1lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy52YWxpZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVVdnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhpcyB0ZXh0dXJlIG9uIHRoZSBncHUuXG4gKlxuICovXG5UZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYmFzZVRleHR1cmUudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgbG9hZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZUxvYWRlZCA9IGZ1bmN0aW9uIChiYXNlVGV4dHVyZSlcbntcbiAgICAvLyBUT0RPIHRoaXMgY29kZSBsb29rcyBjb25mdXNpbmcuLiBib28gdG8gYWJ1c2luZyBnZXR0ZXJzIGFuZCBzZXR0ZXJzcyFcbiAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMuX2ZyYW1lO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgdXBkYXRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLm9uQmFzZVRleHR1cmVVcGRhdGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZT1mYWxzZV0ge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZSlcbntcbiAgICBpZiAodGhpcy5iYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGlmIChkZXN0cm95QmFzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2ZyYW1lID0gbnVsbDtcbiAgICB0aGlzLl91dnMgPSBudWxsO1xuICAgIHRoaXMudHJpbSA9IG51bGw7XG4gICAgdGhpcy5jcm9wID0gbnVsbDtcblxuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIHRoaXMub2ZmKCdkaXNwb3NlJywgdGhpcy5kaXNwb3NlLCB0aGlzKTtcbiAgICB0aGlzLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRleHR1cmUgb2JqZWN0IHRoYXQgYWN0cyB0aGUgc2FtZSBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9XG4gKi9cblRleHR1cmUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUodGhpcy5iYXNlVGV4dHVyZSwgdGhpcy5mcmFtZSwgdGhpcy5jcm9wLCB0aGlzLnRyaW0sIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuX3VwZGF0ZVV2cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLl91dnMpXG4gICAge1xuICAgICAgICB0aGlzLl91dnMgPSBuZXcgVGV4dHVyZVV2cygpO1xuICAgIH1cblxuICAgIHRoaXMuX3V2cy5zZXQodGhpcy5jcm9wLCB0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLnJvdGF0ZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBUZXh0dXJlIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGNyb3Nzb3JpZ2luIHtib29sZWFufSBXaGV0aGVyIHJlcXVlc3RzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGNyb3Nzb3JpZ2luXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbiAgICAgICAgdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXSA9IHRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZScpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhcywgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW8ge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAodHlwZW9mIHZpZGVvID09PSAnc3RyaW5nJylcbiAgICB7XG4gICAgICAgIHJldHVybiBUZXh0dXJlLmZyb21WaWRlb1VybCh2aWRlbywgc2NhbGVNb2RlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgdmlkZW8gdXJsLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1VybCB7c3RyaW5nfVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gQSBUZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbVZpZGVvVXJsID0gZnVuY3Rpb24gKHZpZGVvVXJsLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh2aWRlb1VybCwgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEFkZHMgYSB0ZXh0dXJlIHRvIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLiBUaGlzIGNhY2hlIGlzIHNoYXJlZCBhY3Jvc3MgdGhlIHdob2xlIFBJWEkgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSBUZXh0dXJlIHRvIGFkZCB0byB0aGUgY2FjaGUuXG4gKiBAcGFyYW0gaWQge3N0cmluZ30gVGhlIGlkIHRoYXQgdGhlIHRleHR1cmUgd2lsbCBiZSBzdG9yZWQgYWdhaW5zdC5cbiAqL1xuVGV4dHVyZS5hZGRUZXh0dXJlVG9DYWNoZSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBpZClcbntcbiAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdID0gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgdGV4dHVyZSBmcm9tIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgb2YgdGhlIHRleHR1cmUgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0aGF0IHdhcyByZW1vdmVkXG4gKi9cblRleHR1cmUucmVtb3ZlVGV4dHVyZUZyb21DYWNoZSA9IGZ1bmN0aW9uIChpZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtpZF07XG5cbiAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcbiAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpZF07XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogQW4gZW1wdHkgdGV4dHVyZSwgdXNlZCBvZnRlbiB0byBub3QgaGF2ZSB0byBjcmVhdGUgbXVsdGlwbGUgZW1wdHkgdGV4dHVyZXMuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmUuRU1QVFkgPSBuZXcgVGV4dHVyZShuZXcgQmFzZVRleHR1cmUoKSk7XG4iLCJcbi8qKlxuICogQSBzdGFuZGFyZCBvYmplY3QgdG8gc3RvcmUgdGhlIFV2cyBvZiBhIHRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBUZXh0dXJlVXZzKClcbntcbiAgICB0aGlzLngwID0gMDtcbiAgICB0aGlzLnkwID0gMDtcblxuICAgIHRoaXMueDEgPSAxO1xuICAgIHRoaXMueTEgPSAwO1xuXG4gICAgdGhpcy54MiA9IDE7XG4gICAgdGhpcy55MiA9IDE7XG5cbiAgICB0aGlzLngzID0gMDtcbiAgICB0aGlzLnkzID0gMTtcblxuICAgIHRoaXMueHkwX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTFfdWludDMyID0gMDtcbiAgICB0aGlzLnh5Ml91aW50MzIgPSAwO1xuICAgIHRoaXMueHkzX3VpbnQzMiA9IDA7XG5cbiAgICB0aGlzLnV2c191aW50MzIgPSBuZXcgVWludDMyQXJyYXkoNClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlVXZzO1xuXG4vKipcbiAqIFNldHMgdGhlIHRleHR1cmUgVXZzIGJhc2VkIG9uIHRoZSBnaXZlbiBmcmFtZSBpbmZvcm1hdGlvblxuICogQHBhcmFtIGZyYW1lIHtQSVhJLlJlY3RhbmdsZX1cbiAqIEBwYXJhbSBiYXNlRnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIHJvdGF0ZSB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIGZyYW1lIGlzIHJvdGF0ZWRcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmVVdnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChmcmFtZSwgYmFzZUZyYW1lLCByb3RhdGUpXG57XG4gICAgdmFyIHR3ID0gYmFzZUZyYW1lLndpZHRoO1xuICAgIHZhciB0aCA9IGJhc2VGcmFtZS5oZWlnaHQ7XG5cbiAgICBpZihyb3RhdGUpXG4gICAge1xuICAgICAgICB0aGlzLngwID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUuaGVpZ2h0KSAvIHR3O1xuICAgICAgICB0aGlzLnkxID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkyID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gZnJhbWUueSAvIHRoO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMueDAgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MiA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gKGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQpIC8gdGg7XG4gICAgfVxuXG4gICAgdGhpcy51dnNfdWludDMyWzBdID0gKCgodGhpcy55MCAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngwICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbMV0gPSAoKCh0aGlzLnkxICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDEgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsyXSA9ICgoKHRoaXMueTIgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MiAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzNdID0gKCgodGhpcy55MyAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngzICogNjU1MzUpICYgMHhGRkZGKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBvZiBhIFtwbGF5aW5nXSBWaWRlby5cbiAqXG4gKiBWaWRlbyBiYXNlIHRleHR1cmVzIG1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kIGluIHRoZWlyIGNyZWF0aW9uIHByb2Nlc3MuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZCBpbiBzZXZlcmFsIHdheXMsIHN1Y2ggYXM6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwoJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0Jyk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh7IHNyYzogJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoWycvdmlkZW8ud2VibScsICcvdmlkZW8ubXA0J10pO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzKFtcbiAqICAgICB7IHNyYzogJy92aWRlby53ZWJtJywgbWltZTogJ3ZpZGVvL3dlYm0nIH0sXG4gKiAgICAgeyBzcmM6ICcvdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfVxuICogXSk7XG4gKiBgYGBcbiAqXG4gKiBTZWUgdGhlIFtcImRldXNcIiBkZW1vXShodHRwOi8vd3d3Lmdvb2Rib3lkaWdpdGFsLmNvbS9waXhpanMvZXhhbXBsZXMvZGV1cy8pLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5CYXNlVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzb3VyY2Uge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIFZpZGVvQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFzb3VyY2UpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHZpZGVvIHNvdXJjZSBlbGVtZW50IHNwZWNpZmllZC4nKTtcbiAgICB9XG5cbiAgICAvLyBob29rIGluIGhlcmUgdG8gY2hlY2sgaWYgdmlkZW8gaXMgYWxyZWFkeSBhdmFpbGFibGUuXG4gICAgLy8gQmFzZVRleHR1cmUgbG9va3MgZm9yIGEgc291cmNlLmNvbXBsZXRlIGJvb2xlYW4sIHBsdXMgd2lkdGggJiBoZWlnaHQuXG5cbiAgICBpZiAoKHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9FTk9VR0hfREFUQSB8fCBzb3VyY2UucmVhZHlTdGF0ZSA9PT0gc291cmNlLkhBVkVfRlVUVVJFX0RBVEEpICYmIHNvdXJjZS53aWR0aCAmJiBzb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgc291cmNlLmNvbXBsZXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBCYXNlVGV4dHVyZS5jYWxsKHRoaXMsIHNvdXJjZSwgc2NhbGVNb2RlKTtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCB0aGUgYmFzZSB0ZXh0dXJlIGF1dG9tYXRpY2FsbHkgdXBkYXRlIGl0c2VsZiwgc2V0IHRvIHRydWUgYnkgZGVmYXVsdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG5cbiAgICB0aGlzLl9vblVwZGF0ZSA9IHRoaXMuX29uVXBkYXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fb25DYW5QbGF5ID0gdGhpcy5fb25DYW5QbGF5LmJpbmQodGhpcyk7XG5cbiAgICBpZiAoIXNvdXJjZS5jb21wbGV0ZSlcbiAgICB7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgdGhpcy5fb25DYW5QbGF5KTtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICAvLyBzdGFydGVkIHBsYXlpbmcuLlxuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX29uUGxheVN0YXJ0LmJpbmQodGhpcykpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9vblBsYXlTdG9wLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHRoaXMuX19sb2FkZWQgPSBmYWxzZTtcbn1cblxuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZpZGVvQmFzZVRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFZpZGVvQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVGhlIGludGVybmFsIHVwZGF0ZSBsb29wIG9mIHRoZSB2aWRlbyBiYXNlIHRleHR1cmUsIG9ubHkgcnVucyB3aGVuIGF1dG9VcGRhdGUgaXMgc2V0IHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25VcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJ1bnMgdGhlIHVwZGF0ZSBsb29wIHdoZW4gdGhlIHZpZGVvIGlzIHJlYWR5IHRvIHBsYXlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5hdXRvVXBkYXRlKVxuICAgIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9vblVwZGF0ZSk7XG4gICAgICAgIHRoaXMuYXV0b1VwZGF0ZSA9IHRydWU7XG4gICAgfVxufTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIGEgcGF1c2UgZXZlbnQgaXMgdHJpZ2dlcmVkLCBzdG9wcyB0aGUgdXBkYXRlIGxvb3BcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gdGhlIHZpZGVvIGlzIGxvYWRlZCBhbmQgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vbkNhblBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX29uQ2FuUGxheSk7XG5cbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuc291cmNlLnZpZGVvV2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5zb3VyY2UudmlkZW9IZWlnaHQ7XG5cbiAgICAgICAgdGhpcy5zb3VyY2UucGxheSgpO1xuXG4gICAgICAgIC8vIHByZXZlbnQgbXVsdGlwbGUgbG9hZGVkIGRpc3BhdGNoZXMuLlxuICAgICAgICBpZiAoIXRoaXMuX19sb2FkZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX19sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5zb3VyY2UuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB0aGlzLnNvdXJjZS5fcGl4aUlkIF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNvdXJjZS5fcGl4aUlkO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIE1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlZpZGVvQmFzZVRleHR1cmV9XG4gKi9cblZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvID0gZnVuY3Rpb24gKHZpZGVvLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCF2aWRlby5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgdmlkZW8uX3BpeGlJZCA9ICd2aWRlb18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt2aWRlby5fcGl4aUlkXTtcblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBWaWRlb0Jhc2VUZXh0dXJlKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB2aWRlby5fcGl4aUlkIF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgQmFzZVRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIHZpZGVvIGVsZW1lbnQuXG4gKiBUaGlzIEJhc2VUZXh0dXJlIGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIGEgdGV4dHVyZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1NyYyB7c3RyaW5nfG9iamVjdHxzdHJpbmdbXXxvYmplY3RbXX0gVGhlIFVSTChzKSBmb3IgdGhlIHZpZGVvLlxuICogQHBhcmFtIFt2aWRlb1NyYy5zcmNdIHtzdHJpbmd9IE9uZSBvZiB0aGUgc291cmNlIHVybHMgZm9yIHRoZSB2aWRlb1xuICogQHBhcmFtIFt2aWRlb1NyYy5taW1lXSB7c3RyaW5nfSBUaGUgbWltZXR5cGUgb2YgdGhlIHZpZGVvIChlLmcuICd2aWRlby9tcDQnKS4gSWYgbm90IHNwZWNpZmllZFxuICogIHRoZSB1cmwncyBleHRlbnNpb24gd2lsbCBiZSB1c2VkIGFzIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgbWltZSB0eXBlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsID0gZnVuY3Rpb24gKHZpZGVvU3JjLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcblxuICAgIC8vIGFycmF5IG9mIG9iamVjdHMgb3Igc3RyaW5nc1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZpZGVvU3JjKSlcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlkZW9TcmMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyY1tpXS5zcmMgfHwgdmlkZW9TcmNbaV0sIHZpZGVvU3JjW2ldLm1pbWUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzaW5nbGUgb2JqZWN0IG9yIHN0cmluZ1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyYy5zcmMgfHwgdmlkZW9TcmMsIHZpZGVvU3JjLm1pbWUpKTtcbiAgICB9XG5cbiAgICB2aWRlby5sb2FkKCk7XG4gICAgdmlkZW8ucGxheSgpO1xuXG4gICAgcmV0dXJuIFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpO1xufTtcblxuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyA9IFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybDtcblxuZnVuY3Rpb24gY3JlYXRlU291cmNlKHBhdGgsIHR5cGUpXG57XG4gICAgaWYgKCF0eXBlKVxuICAgIHtcbiAgICAgICAgdHlwZSA9ICd2aWRlby8nICsgcGF0aC5zdWJzdHIocGF0aC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpO1xuXG4gICAgc291cmNlLnNyYyA9IHBhdGg7XG4gICAgc291cmNlLnR5cGUgPSB0eXBlO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn1cbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIC8vIEludGVybmFsIGV2ZW50IHVzZWQgYnkgY29tcG9zZWQgZW1pdHRlclxuICAgIFRJQ0sgPSAndGljayc7XG5cbi8qKlxuICogQSBUaWNrZXIgY2xhc3MgdGhhdCBydW5zIGFuIHVwZGF0ZSBsb29wIHRoYXQgb3RoZXIgb2JqZWN0cyBsaXN0ZW4gdG8uXG4gKiBUaGlzIGNsYXNzIGlzIGNvbXBvc2VkIGFyb3VuZCBhbiBFdmVudEVtaXR0ZXIgb2JqZWN0IHRvIGFkZCBsaXN0ZW5lcnNcbiAqIG1lYW50IGZvciBleGVjdXRpb24gb24gdGhlIG5leHQgcmVxdWVzdGVkIGFuaW1hdGlvbiBmcmFtZS5cbiAqIEFuaW1hdGlvbiBmcmFtZXMgYXJlIHJlcXVlc3RlZCBvbmx5IHdoZW4gbmVjZXNzYXJ5LFxuICogZS5nLiBXaGVuIHRoZSB0aWNrZXIgaXMgc3RhcnRlZCBhbmQgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlclxuICovXG5mdW5jdGlvbiBUaWNrZXIoKVxue1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0aWNrIG1ldGhvZCBib3VuZCB0byB0aWNrZXIgaW5zdGFuY2UuXG4gICAgICogVGhpcyBpcyBiZWNhdXNlIGluIGVhcmx5IDIwMTUsIEZ1bmN0aW9uLmJpbmRcbiAgICAgKiBpcyBzdGlsbCA2MCUgc2xvd2VyIGluIGhpZ2ggcGVyZm9ybWFuY2Ugc2NlbmFyaW9zLlxuICAgICAqIEFsc28gc2VwYXJhdGluZyBmcmFtZSByZXF1ZXN0cyBmcm9tIHVwZGF0ZSBtZXRob2RcbiAgICAgKiBzbyBsaXN0ZW5lcnMgbWF5IGJlIGNhbGxlZCBhdCBhbnkgdGltZSBhbmQgd2l0aFxuICAgICAqIGFueSBhbmltYXRpb24gQVBJLCBqdXN0IGludm9rZSB0aWNrZXIudXBkYXRlKHRpbWUpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90aWNrID0gZnVuY3Rpb24gX3RpY2sodGltZSkge1xuXG4gICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgICAgIGlmIChfdGhpcy5zdGFydGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBJbnZva2UgbGlzdGVuZXJzIG5vd1xuICAgICAgICAgICAgX3RoaXMudXBkYXRlKHRpbWUpO1xuICAgICAgICAgICAgLy8gTGlzdGVuZXIgc2lkZSBlZmZlY3RzIG1heSBoYXZlIG1vZGlmaWVkIHRpY2tlciBzdGF0ZS5cbiAgICAgICAgICAgIGlmIChfdGhpcy5zdGFydGVkICYmIF90aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgX3RoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMuX3RpY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGVtaXR0ZXIgdXNlZCB0byBmaXJlICd0aWNrJyBldmVudFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGN1cnJlbnQgZnJhbWUgcmVxdWVzdCBJRFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHZhbHVlIG1hbmFnZWQgYnkgbWluRlBTIHByb3BlcnR5IHNldHRlciBhbmQgZ2V0dGVyLlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gYWxsb3dlZCBtaWxsaXNlY29uZHMgYmV0d2VlbiB1cGRhdGVzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4RWxhcHNlZE1TID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhpcyB0aWNrZXIgc2hvdWxkIGludm9rZSB0aGUgbWV0aG9kXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdGFydH0gYXV0b21hdGljYWxseVxuICAgICAqIHdoZW4gYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9TdGFydCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2NhbGFyIHRpbWUgdmFsdWUgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgc2V0dGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI21pbkZQU31cbiAgICAgKiBhbmQgaXMgc2NhbGVkIHdpdGgge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0uXG4gICAgICogKipOb3RlOioqIFRoZSBjYXAgbWF5IGJlIGV4Y2VlZGVkIGJ5IHNjYWxpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZGVsdGFUaW1lID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRpbWUgZWxhcHNlZCBpbiBtaWxsaXNlY29uZHMgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogT3Bwb3NlZCB0byB3aGF0IHRoZSBzY2FsYXIge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9XG4gICAgICogaXMgYmFzZWQsIHRoaXMgdmFsdWUgaXMgbmVpdGhlciBjYXBwZWQgbm9yIHNjYWxlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEgLyBUQVJHRVRfRlBNU1xuICAgICAqL1xuICAgIHRoaXMuZWxhcHNlZE1TID0gMSAvIENPTlNULlRBUkdFVF9GUE1TOyAvLyBkZWZhdWx0IHRvIHRhcmdldCBmcmFtZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCB0aW1lIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjdXBkYXRlfSB3YXMgaW52b2tlZC5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGFsc28gcmVzZXQgaW50ZXJuYWxseSBvdXRzaWRlIG9mIGludm9raW5nXG4gICAgICogdXBkYXRlLCBidXQgb25seSB3aGVuIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gICAgICogSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERPTUhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgICogdGhpcyB2YWx1ZSB3aWxsIGhhdmUgYSBwcmVjaXNpb24gb2YgMSDCtXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5sYXN0VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBGYWN0b3Igb2YgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBTY2FsZXMgdGlja2VyLmRlbHRhVGltZSB0byB3aGF0IHdvdWxkIGJlXG4gICAgICogLy8gdGhlIGVxdWl2YWxlbnQgb2YgYXBwcm94aW1hdGVseSAxMjAgRlBTXG4gICAgICogdGlja2VyLnNwZWVkID0gMjtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5zcGVlZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBoYXMgYmVlbiBzdGFydGVkLlxuICAgICAqIGB0cnVlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogYGZhbHNlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0b3B9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBXaGlsZSBgZmFsc2VgLCB0aGlzIHZhbHVlIG1heSBjaGFuZ2UgdG8gYHRydWVgIGluIHRoZVxuICAgICAqIGV2ZW50IG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBiZWluZyBgdHJ1ZWBcbiAgICAgKiBhbmQgYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlja2VyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZXMgcGVyIHNlY29uZCBhdCB3aGljaCB0aGlzIHRpY2tlciBpcyBydW5uaW5nLlxuICAgICAqIFRoZSBkZWZhdWx0IGlzIGFwcHJveGltYXRlbHkgNjAgaW4gbW9zdCBtb2Rlcm4gYnJvd3NlcnMuXG4gICAgICogKipOb3RlOioqIFRoaXMgZG9lcyBub3QgZmFjdG9yIGluIHRoZSB2YWx1ZSBvZlxuICAgICAqIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3BlZWR9LCB3aGljaCBpcyBzcGVjaWZpY1xuICAgICAqIHRvIHNjYWxpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuZWxhcHNlZE1TO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIG1pbGxpc2Vjb25kcyBhbGxvd2VkIHRvXG4gICAgICogZWxhcHNlIGJldHdlZW4gaW52b2tpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9LlxuICAgICAqIFRoaXMgdmFsdWUgaXMgdXNlZCB0byBjYXAge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICAgICAqIGJ1dCBkb2VzIG5vdCBlZmZlY3QgdGhlIG1lYXN1cmVkIHZhbHVlIG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjRlBTfS5cbiAgICAgKiBXaGVuIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSBpdCBpcyBjbGFtcGVkIHRvIGEgdmFsdWUgYmV0d2VlblxuICAgICAqIGAwYCBhbmQgYFBJWEkuVEFSR0VUX0ZQTVMgKiAxMDAwYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSS50aWNrZXIuVGlja2VyI1xuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgbWluRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuX21heEVsYXBzZWRNUztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbihmcHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIENsYW1wOiAwIHRvIFRBUkdFVF9GUE1TXG4gICAgICAgICAgICB2YXIgbWluRlBNUyA9IE1hdGgubWluKE1hdGgubWF4KDAsIGZwcykgLyAxMDAwLCBDT05TVC5UQVJHRVRfRlBNUyk7XG4gICAgICAgICAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxIC8gbWluRlBNUztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lLlxuICogSWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHkgYmVlbiByZXF1ZXN0ZWQsIGFuZCBpZiB0aGUgaW50ZXJuYWxcbiAqIGVtaXR0ZXIgaGFzIGxpc3RlbmVycywgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3JlcXVlc3RJZk5lZWRlZCA9IGZ1bmN0aW9uIF9yZXF1ZXN0SWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICAvLyBlbnN1cmUgY2FsbGJhY2tzIGdldCBjb3JyZWN0IGRlbHRhXG4gICAgICAgIHRoaXMubGFzdFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX3RpY2spO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSBjYW5jZWxzIGEgcGVuZGluZyBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fY2FuY2VsSWZOZWVkZWQgPSBmdW5jdGlvbiBfY2FuY2VsSWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgIT09IG51bGwpXG4gICAge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZXF1ZXN0SWQpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiB0aGUgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQgaXQgY2hlY2tzIGlmIGEgZnJhbWUgaGFzIG5vdCBhbHJlYWR5XG4gKiBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbCBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMuIElmIHRoZXNlXG4gKiBjb25kaXRpb25zIGFyZSBtZXQsIGEgbmV3IGZyYW1lIGlzIHJlcXVlc3RlZC4gSWYgdGhlIHRpY2tlciBoYXMgbm90XG4gKiBiZWVuIHN0YXJ0ZWQsIGJ1dCBhdXRvU3RhcnQgaXMgYHRydWVgLCB0aGVuIHRoZSB0aWNrZXIgc3RhcnRzIG5vdyxcbiAqIGFuZCBjb250aW51ZXMgd2l0aCB0aGUgcHJldmlvdXMgY29uZGl0aW9ucyB0byByZXF1ZXN0IGEgbmV3IGZyYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3N0YXJ0SWZQb3NzaWJsZSA9IGZ1bmN0aW9uIF9zdGFydElmUG9zc2libGUoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5hdXRvU3RhcnQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29ufSBpbnRlcm5hbGx5IGZvciB0aGVcbiAqIGludGVybmFsICd0aWNrJyBldmVudC4gSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsXG4gKiBhbmQgaWYgc28gaXQgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGF0IHRoaXMgcG9pbnQuXG4gKlxuICogQHBhcmFtIGZuIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGFkZGVkIGZvciB1cGRhdGVzXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbihUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29uY2V9IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIG9uZSB1cGRhdGVcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZE9uY2UgPSBmdW5jdGlvbiBhZGRPbmNlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub25jZShUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29mZn0gaW50ZXJuYWxseSBmb3IgJ3RpY2snIGV2ZW50LlxuICogSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMgZm9yICd0aWNrJyBldmVudC5cbiAqIElmIGl0IGRvZXMsIHRoZW4gaXQgY2FuY2VscyB0aGUgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwYXJhbSBbZm5dIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIHJlbW92ZWRcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dCB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub2ZmKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIGlmICghdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgbGlzdGVuZXJzXG4gKiBhIG5ldyBhbmltYXRpb24gZnJhbWUgaXMgcmVxdWVzdGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiBzdGFydCgpXG57XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSB0aWNrZXIuIElmIHRoZSB0aWNrZXIgaGFzIHJlcXVlc3RlZFxuICogYW4gYW5pbWF0aW9uIGZyYW1lIGl0IGlzIGNhbmNlbGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uIHN0b3AoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2FuY2VsSWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRyaWdnZXJzIGFuIHVwZGF0ZS4gQW4gdXBkYXRlIGVudGFpbHMgc2V0dGluZyB0aGVcbiAqIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNlbGFwc2VkTVN9LFxuICogdGhlIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICogaW52b2tpbmcgYWxsIGxpc3RlbmVycyB3aXRoIGN1cnJlbnQgZGVsdGFUaW1lLFxuICogYW5kIHRoZW4gZmluYWxseSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbGFzdFRpbWV9XG4gKiB3aXRoIHRoZSB2YWx1ZSBvZiBjdXJyZW50VGltZSB0aGF0IHdhcyBwcm92aWRlZC5cbiAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgYW5pbWF0aW9uXG4gKiBmcmFtZSBjYWxsYmFja3MgaWYgdGhlIHRpY2tlciBpbnN0YW5jZSBoYXMgYmVlbiBzdGFydGVkXG4gKiBhbmQgbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqXG4gKiBAcGFyYW0gW2N1cnJlbnRUaW1lPXBlcmZvcm1hbmNlLm5vdygpXSB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9IHRoZSBjdXJyZW50IHRpbWUgb2YgZXhlY3V0aW9uXG4gKi9cblRpY2tlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKGN1cnJlbnRUaW1lKVxue1xuICAgIHZhciBlbGFwc2VkTVM7XG5cbiAgICAvLyBBbGxvdyBjYWxsaW5nIHVwZGF0ZSBkaXJlY3RseSB3aXRoIGRlZmF1bHQgY3VycmVudFRpbWUuXG4gICAgY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSB8fCBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAvLyBTYXZlIHVuY2FwcGVkIGVsYXBzZWRNUyBmb3IgbWVhc3VyZW1lbnRcbiAgICBlbGFwc2VkTVMgPSB0aGlzLmVsYXBzZWRNUyA9IGN1cnJlbnRUaW1lIC0gdGhpcy5sYXN0VGltZTtcblxuICAgIC8vIGNhcCB0aGUgbWlsbGlzZWNvbmRzIGVsYXBzZWQgdXNlZCBmb3IgZGVsdGFUaW1lXG4gICAgaWYgKGVsYXBzZWRNUyA+IHRoaXMuX21heEVsYXBzZWRNUylcbiAgICB7XG4gICAgICAgIGVsYXBzZWRNUyA9IHRoaXMuX21heEVsYXBzZWRNUztcbiAgICB9XG5cbiAgICB0aGlzLmRlbHRhVGltZSA9IGVsYXBzZWRNUyAqIENPTlNULlRBUkdFVF9GUE1TICogdGhpcy5zcGVlZDtcblxuICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgYWRkZWQgdG8gaW50ZXJuYWwgZW1pdHRlclxuICAgIHRoaXMuX2VtaXR0ZXIuZW1pdChUSUNLLCB0aGlzLmRlbHRhVGltZSk7XG5cbiAgICB0aGlzLmxhc3RUaW1lID0gY3VycmVudFRpbWU7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRpY2tlcjtcbiIsInZhciBUaWNrZXIgPSByZXF1aXJlKCcuL1RpY2tlcicpO1xuXG4vKipcbiAqIFRoZSBzaGFyZWQgdGlja2VyIGluc3RhbmNlIHVzZWQgYnkge0BsaW5rIFBJWEkuZXh0cmFzLk1vdmllQ2xpcH0uXG4gKiBhbmQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqIFRoZSBwcm9wZXJ0eSB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2F1dG9TdGFydH0gaXMgc2V0IHRvIGB0cnVlYFxuICogZm9yIHRoaXMgaW5zdGFuY2UuIFBsZWFzZSBmb2xsb3cgdGhlIGV4YW1wbGVzIGZvciB1c2FnZSwgaW5jbHVkaW5nXG4gKiBob3cgdG8gb3B0LW91dCBvZiBhdXRvLXN0YXJ0aW5nIHRoZSBzaGFyZWQgdGlja2VyLlxuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgdGlja2VyID0gUElYSS50aWNrZXIuc2hhcmVkO1xuICogLy8gU2V0IHRoaXMgdG8gcHJldmVudCBzdGFydGluZyB0aGlzIHRpY2tlciB3aGVuIGxpc3RlbmVycyBhcmUgYWRkZWQuXG4gKiAvLyBCeSBkZWZhdWx0IHRoaXMgaXMgdHJ1ZSBvbmx5IGZvciB0aGUgUElYSS50aWNrZXIuc2hhcmVkIGluc3RhbmNlLlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogLy8gRllJLCBjYWxsIHRoaXMgdG8gZW5zdXJlIHRoZSB0aWNrZXIgaXMgc3RvcHBlZC4gSXQgc2hvdWxkIGJlIHN0b3BwZWRcbiAqIC8vIGlmIHlvdSBoYXZlIG5vdCBhdHRlbXB0ZWQgdG8gcmVuZGVyIGFueXRoaW5nIHlldC5cbiAqIHRpY2tlci5zdG9wKCk7XG4gKiAvLyBDYWxsIHRoaXMgd2hlbiB5b3UgYXJlIHJlYWR5IGZvciBhIHJ1bm5pbmcgc2hhcmVkIHRpY2tlci5cbiAqIHRpY2tlci5zdGFydCgpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBZb3UgbWF5IHVzZSB0aGUgc2hhcmVkIHRpY2tlciB0byByZW5kZXIuLi5cbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDgwMCwgNjAwKTtcbiAqIHZhciBzdGFnZSA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogdmFyIGludGVyYWN0aW9uTWFuYWdlciA9IFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyKTtcbiAqIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocmVuZGVyZXIudmlldyk7XG4gKiB0aWNrZXIuYWRkKGZ1bmN0aW9uICh0aW1lKSB7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBPciB5b3UgY2FuIGp1c3QgdXBkYXRlIGl0IG1hbnVhbGx5LlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogdGlja2VyLnN0b3AoKTtcbiAqIGZ1bmN0aW9uIGFuaW1hdGUodGltZSkge1xuICogICAgIHRpY2tlci51cGRhdGUodGltZSk7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XG4gKiB9XG4gKiBhbmltYXRlKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAqXG4gKiBAdHlwZSB7UElYSS50aWNrZXIuVGlja2VyfVxuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbnZhciBzaGFyZWQgPSBuZXcgVGlja2VyKCk7XG5zaGFyZWQuYXV0b1N0YXJ0ID0gdHJ1ZTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudGlja2VyXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIHNoYXJlZDogc2hhcmVkLFxuICAgIFRpY2tlcjogVGlja2VyXG59O1xuIiwiLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuXG52YXIgR0xfTUFQID0ge307XG5cblxudmFyIGNyZWF0ZUluZGljZXNGb3JRdWFkcyA9IGZ1bmN0aW9uIChzaXplKVxue1xuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYXJyYXksIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgIFxuICAgIHZhciB0b3RhbEluZGljZXMgPSBzaXplICogNjtcblxuICAgIHZhciBpbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHRvdGFsSW5kaWNlcyk7XG5cblx0Ly8gZmlsbCB0aGUgaW5kaWNlcyB3aXRoIHRoZSBxdWFkcyB0byBkcmF3XG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCB0b3RhbEluZGljZXM7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kaWNlcztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzOyIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLnV0aWxzXG4gKi9cbnZhciB1dGlscyA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIF91aWQ6IDAsXG4gICAgX3NhaWRIZWxsbzogZmFsc2UsXG5cbiAgICBFdmVudEVtaXR0ZXI6ICAgcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIHBsdWdpblRhcmdldDogICByZXF1aXJlKCcuL3BsdWdpblRhcmdldCcpLFxuICAgIGFzeW5jOiAgICAgICAgICByZXF1aXJlKCdhc3luYycpLFxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllclxuICAgICAqXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllciB0byB1c2UuXG4gICAgICovXG4gICAgdWlkOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICsrdXRpbHMuX3VpZDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBoZXggY29sb3IgbnVtYmVyIHRvIGFuIFtSLCBHLCBCXSBhcnJheVxuICAgICAqXG4gICAgICogQHBhcmFtIGhleCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSAge251bWJlcltdfSBbb3V0PVtdXVxuICAgICAqIEByZXR1cm4ge251bWJlcltdfSBBbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIFtSLCBHLCBCXSBvZiB0aGUgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnJnYjogZnVuY3Rpb24gKGhleCwgb3V0KVxuICAgIHtcbiAgICAgICAgb3V0ID0gb3V0IHx8IFtdO1xuXG4gICAgICAgIG91dFswXSA9IChoZXggPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzFdID0gKGhleCA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIG91dFsyXSA9IChoZXggJiAweEZGKSAvIDI1NTtcblxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5nIGNvbG9yLlxuICAgICAqL1xuICAgIGhleDJzdHJpbmc6IGZ1bmN0aW9uIChoZXgpXG4gICAge1xuICAgICAgICBoZXggPSBoZXgudG9TdHJpbmcoMTYpO1xuICAgICAgICBoZXggPSAnMDAwMDAwJy5zdWJzdHIoMCwgNiAtIGhleC5sZW5ndGgpICsgaGV4O1xuXG4gICAgICAgIHJldHVybiAnIycgKyBoZXg7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgY29sb3IgYXMgYW4gW1IsIEcsIEJdIGFycmF5IHRvIGEgaGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIHJnYiB7bnVtYmVyW119XG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgY29sb3IgbnVtYmVyXG4gICAgICovXG4gICAgcmdiMmhleDogZnVuY3Rpb24gKHJnYilcbiAgICB7XG4gICAgICAgIHJldHVybiAoKHJnYlswXSoyNTUgPDwgMTYpICsgKHJnYlsxXSoyNTUgPDwgOCkgKyByZ2JbMl0qMjU1KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIENhbnZhcyBCbGVuZE1vZGVzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnJvd3NlclxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciB0aGV5IGFyZSBzdXBwb3J0ZWRcbiAgICAgKi9cbiAgICBjYW5Vc2VOZXdDYW52YXNCbGVuZE1vZGVzOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwbmdIZWFkID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVFBQUFBQkFRTUFBQUREOHAyT0FBQUFBMUJNVkVYLyc7XG4gICAgICAgIHZhciBwbmdFbmQgPSAnQUFBQUNrbEVRVlFJMTJOZ0FBQUFBZ0FCNGlHOE13QUFBQUJKUlU1RXJrSmdnZz09JztcblxuICAgICAgICB2YXIgbWFnZW50YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBtYWdlbnRhLnNyYyA9IHBuZ0hlYWQgKyAnQVA4MDRPYTYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciB5ZWxsb3cgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgeWVsbG93LnNyYyA9IHBuZ0hlYWQgKyAnL3dDS3h2UkYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY2FudmFzLndpZHRoID0gNjtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IDE7XG5cbiAgICAgICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShtYWdlbnRhLCAwLCAwKTtcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoeWVsbG93LCAyLCAwKTtcblxuICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDIsMCwxLDEpLmRhdGE7XG5cbiAgICAgICAgcmV0dXJuIChkYXRhWzBdID09PSAyNTUgJiYgZGF0YVsxXSA9PT0gMCAmJiBkYXRhWzJdID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBudW1iZXIsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgdGFrZW4gZnJvbSBTdGFybGluZyBGcmFtZXdvcmsgYXMgaXRzIHByZXR0eSBuZWF0IDspXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbnVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7bnVtYmVyfSB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqL1xuICAgIGdldE5leHRQb3dlck9mVHdvOiBmdW5jdGlvbiAobnVtYmVyKVxuICAgIHtcbiAgICAgICAgLy8gc2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Bvd2VyX29mX3R3byNGYXN0X2FsZ29yaXRobV90b19jaGVja19pZl9hX3Bvc2l0aXZlX251bWJlcl9pc19hX3Bvd2VyX29mX3R3b1xuICAgICAgICBpZiAobnVtYmVyID4gMCAmJiAobnVtYmVyICYgKG51bWJlciAtIDEpKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSAxO1xuXG4gICAgICAgICAgICB3aGlsZSAocmVzdWx0IDwgbnVtYmVyKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA8PD0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBjaGVja3MgaWYgdGhlIGdpdmVuIHdpZHRoIGFuZCBoZWlnaHQgbWFrZSBhIHBvd2VyIG9mIHR3byByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSBoZWlnaHQge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzUG93ZXJPZlR3bzogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm4gKHdpZHRoID4gMCAmJiAod2lkdGggJiAod2lkdGggLSAxKSkgPT09IDAgJiYgaGVpZ2h0ID4gMCAmJiAoaGVpZ2h0ICYgKGhlaWdodCAtIDEpKSA9PT0gMCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGdldCB0aGUgcmVzb2x1dGlvbiBvZiBhbiBhc3NldCBieSBsb29raW5nIGZvciB0aGUgcHJlZml4XG4gICAgICogdXNlZCBieSBzcHJpdGVzaGVldHMgYW5kIGltYWdlIHVybHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwge3N0cmluZ30gdGhlIGltYWdlIHBhdGhcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0UmVzb2x1dGlvbk9mVXJsOiBmdW5jdGlvbiAodXJsKVxuICAgIHtcbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBDT05TVC5SRVRJTkFfUFJFRklYLmV4ZWModXJsKTtcblxuICAgICAgICBpZiAocmVzb2x1dGlvbilcbiAgICAgICAge1xuICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChyZXNvbHV0aW9uWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAxO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBMb2dzIG91dCB0aGUgdmVyc2lvbiBhbmQgcmVuZGVyZXIgaW5mb3JtYXRpb24gZm9yIHRoaXMgcnVubmluZyBpbnN0YW5jZSBvZiBQSVhJLlxuICAgICAqIElmIHlvdSBkb24ndCB3YW50IHRvIHNlZSB0aGlzIG1lc3NhZ2UgeW91IGNhbiBzZXQgYFBJWEkudXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7YFxuICAgICAqIHNvIHRoZSBsaWJyYXJ5IHRoaW5rcyBpdCBhbHJlYWR5IHNhaWQgaXQuIEtlZXAgaW4gbWluZCB0aGF0IGRvaW5nIHRoYXQgd2lsbCBmb3JldmVyXG4gICAgICogbWFrZXMgeW91IGEgamVyayBmYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBUaGUgc3RyaW5nIHJlbmRlcmVyIHR5cGUgdG8gbG9nLlxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBzYXlIZWxsbzogZnVuY3Rpb24gKHR5cGUpXG4gICAge1xuICAgICAgICBpZiAodXRpbHMuX3NhaWRIZWxsbylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjaHJvbWUnKSA+IC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtcbiAgICAgICAgICAgICAgICAnXFxuICVjICVjICVjIFBpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0g4pywICcgKyB0eXBlICsgJyDinLAgICVjICcgKyAnICVjICcgKyAnIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8gICVjICVjIOKZpSVj4pmlJWPimaUgXFxuXFxuJyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmY2NmE1OyBiYWNrZ3JvdW5kOiAjMDMwMzA3OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmYzNkYzsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOydcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBhcmdzKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3aW5kb3cuY29uc29sZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nKCdQaXhpLmpzICcgKyBDT05TVC5WRVJTSU9OICsgJyAtICcgKyB0eXBlICsgJyAtIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8nKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuXG4gICAgICAgIHV0aWxzLl9zYWlkSGVsbG8gPSB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgZm9yIGNoZWNraW5nIGZvciB3ZWJnbCBzdXBwb3J0XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzV2ViR0xTdXBwb3J0ZWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB2YXIgY29udGV4dE9wdGlvbnMgPSB7IHN0ZW5jaWw6IHRydWUgfTtcbiAgICAgICAgdHJ5XG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghd2luZG93LldlYkdMUmVuZGVyaW5nQ29udGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSxcbiAgICAgICAgICAgICAgICBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIGNvbnRleHRPcHRpb25zKSB8fCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgY29udGV4dE9wdGlvbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gISEoZ2wgJiYgZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5zdGVuY2lsKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgc2lnbiBvZiBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBuIHtudW1iZXJ9XG4gICAgICogQHJldHVybnMge251bWJlcn0gMCBpZiBuIGlzIDAsIC0xIGlmIG4gaXMgbmVnYXRpdmUsIDEgaWYgbiBpIHBvc2l0aXZlXG4gICAgICovXG4gICAgc2lnbjogZnVuY3Rpb24gKG4pXG4gICAge1xuICAgICAgICByZXR1cm4gbiA/IChuIDwgMCA/IC0xIDogMSkgOiAwO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZW1vdmVJdGVtc1xuICAgICAqXG4gICAgICogQHBhcmFtIHthcnJheX0gYXJyIFRoZSB0YXJnZXQgYXJyYXlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRJZHggVGhlIGluZGV4IHRvIGJlZ2luIHJlbW92aW5nIGZyb20gKGluY2x1c2l2ZSlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmVtb3ZlQ291bnQgSG93IG1hbnkgaXRlbXMgdG8gcmVtb3ZlXG4gICAgICovXG4gICAgcmVtb3ZlSXRlbXM6IGZ1bmN0aW9uIChhcnIsIHN0YXJ0SWR4LCByZW1vdmVDb3VudClcbiAgICB7XG4gICAgICAgIHZhciBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIGlmIChzdGFydElkeCA+PSBsZW5ndGggfHwgcmVtb3ZlQ291bnQgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbW92ZUNvdW50ID0gKHN0YXJ0SWR4K3JlbW92ZUNvdW50ID4gbGVuZ3RoID8gbGVuZ3RoLXN0YXJ0SWR4IDogcmVtb3ZlQ291bnQpO1xuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJZHgsIGxlbiA9IGxlbmd0aC1yZW1vdmVDb3VudDsgaSA8IGxlbjsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBhcnJbaV0gPSBhcnJbaSArIHJlbW92ZUNvdW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyci5sZW5ndGggPSBsZW47XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIERlc2NyaWJlIHByb3BlcnR5IHVzYWdlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBUZXh0dXJlQ2FjaGU6IHt9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHt9XG59O1xuIiwiLyoqXG4gKiBNaXhpbnMgZnVuY3Rpb25hbGl0eSB0byBtYWtlIGFuIG9iamVjdCBoYXZlIFwicGx1Z2luc1wiLlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkudXRpbHNcbiAqIEBwYXJhbSBvYmoge29iamVjdH0gVGhlIG9iamVjdCB0byBtaXggaW50by5cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIHBsdWdpblRhcmdldC5taXhpbihNeU9iamVjdCk7XG4gKi9cbmZ1bmN0aW9uIHBsdWdpblRhcmdldChvYmopXG57XG4gICAgb2JqLl9fcGx1Z2lucyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHBsdWdpbiB0byBhbiBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwbHVnaW5OYW1lIHtzdHJpbmd9IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICAgICAqIEBwYXJhbSBjdG9yIHtGdW5jdGlvbn0gVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciB0aGUgcGx1Z2luLlxuICAgICAqL1xuICAgIG9iai5yZWdpc3RlclBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW5OYW1lLCBjdG9yKVxuICAgIHtcbiAgICAgICAgb2JqLl9fcGx1Z2luc1twbHVnaW5OYW1lXSA9IGN0b3I7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlcyBhbGwgdGhlIHBsdWdpbnMgb2YgdGhpcyBvYmplY3RcbiAgICAgKlxuICAgICAqL1xuICAgIG9iai5wcm90b3R5cGUuaW5pdFBsdWdpbnMgPSBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zID0gdGhpcy5wbHVnaW5zIHx8IHt9O1xuXG4gICAgICAgIGZvciAodmFyIG8gaW4gb2JqLl9fcGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbmV3IChvYmouX19wbHVnaW5zW29dKSh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5kZXN0cm95UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBvIGluIHRoaXMucGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBsdWdpbnMgPSBudWxsO1xuICAgIH07XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLyoqXG4gICAgICogTWl4ZXMgaW4gdGhlIHByb3BlcnRpZXMgb2YgdGhlIHBsdWdpblRhcmdldCBpbnRvIGFub3RoZXIgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0IHtvYmplY3R9IFRoZSBvYmogdG8gbWl4IGludG9cbiAgICAgKi9cbiAgICBtaXhpbjogZnVuY3Rpb24gbWl4aW4ob2JqKVxuICAgIHtcbiAgICAgICAgcGx1Z2luVGFyZ2V0KG9iaik7XG4gICAgfVxufTtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciBjb3JlID0gcmVxdWlyZSgnLi9jb3JlJyksXG4gICAgbWVzaCA9IHJlcXVpcmUoJy4vbWVzaCcpLFxuICAgIGV4dHJhcyA9IHJlcXVpcmUoJy4vZXh0cmFzJyksXG4gICAgZmlsdGVycyA9IHJlcXVpcmUoJy4vZmlsdGVycycpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIFNwcml0ZUJhdGNoXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLlBhcnRpY2xlQ29udGFpbmVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlNwcml0ZUJhdGNoID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLicpO1xufTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBBc3NldExvYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBzZWUgUElYSS5sb2FkZXJzLkxvYWRlclxuICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IFRoZSBsb2FkZXIgc3lzdGVtIHdhcyBvdmVyaGF1bGVkIGluIHBpeGkgdjMsIHBsZWFzZSBzZWUgdGhlIG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyIGNsYXNzLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLkFzc2V0TG9hZGVyID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuJyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb3JlLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFN0YWdlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQ29udGFpbmVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFN0YWdlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1lvdSBkbyBub3QgbmVlZCB0byB1c2UgYSBQSVhJIFN0YWdlIGFueSBtb3JlLCB5b3UgY2FuIHNpbXBseSByZW5kZXIgYW55IGNvbnRhaW5lci4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIERpc3BsYXlPYmplY3RDb250YWluZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgRGlzcGxheU9iamVjdENvbnRhaW5lcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEaXNwbGF5T2JqZWN0Q29udGFpbmVyIGhhcyBiZWVuIHNob3J0ZW5lZCB0byBDb250YWluZXIsIHBsZWFzZSB1c2UgQ29udGFpbmVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RyaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2hcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RyaXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFN0cmlwIGNsYXNzIGhhcyBiZWVuIHJlbmFtZWQgdG8gTWVzaCBhbmQgbW92ZWQgdG8gbWVzaC5NZXNoLCBwbGVhc2UgdXNlIG1lc2guTWVzaCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLk1lc2g7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBSb3BlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkubWVzaC5Sb3BlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFJvcGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFJvcGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gbWVzaC5Sb3BlLCBwbGVhc2UgdXNlIG1lc2guUm9wZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLlJvcGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBNb3ZpZUNsaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuTW92aWVDbGlwXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIE1vdmllQ2xpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgTW92aWVDbGlwIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5Nb3ZpZUNsaXAsIHBsZWFzZSB1c2UgZXh0cmFzLk1vdmllQ2xpcCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuTW92aWVDbGlwO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGlsaW5nU3ByaXRlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBUaWxpbmdTcHJpdGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRpbGluZ1Nwcml0ZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuVGlsaW5nU3ByaXRlLCBwbGVhc2UgdXNlIGV4dHJhcy5UaWxpbmdTcHJpdGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLlRpbGluZ1Nwcml0ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJpdG1hcFRleHRcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCaXRtYXBUZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCaXRtYXBUZXh0IGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5CaXRtYXBUZXh0LCBwbGVhc2UgdXNlIGV4dHJhcy5CaXRtYXBUZXh0IGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5CaXRtYXBUZXh0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgYmxlbmRNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIGJsZW5kTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGJsZW5kTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gQkxFTkRfTU9ERVMsIHBsZWFzZSB1c2UgQkxFTkRfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5CTEVORF9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNjYWxlTW9kZXNcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBzY2FsZU1vZGVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBzY2FsZU1vZGVzIGhhcyBiZWVuIG1vdmVkIHRvIFNDQUxFX01PREVTLCBwbGVhc2UgdXNlIFNDQUxFX01PREVTIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU0NBTEVfTU9ERVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBCYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuQmFzZVRleHR1cmVDYWNoZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCYXNlVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgQmFzZVRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5CYXNlVGV4dHVyZUNhY2hlLCBwbGVhc2UgdXNlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5UZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuVGV4dHVyZUNhY2hlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIG1hdGhcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBtYXRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgbWF0aCBuYW1lc3BhY2UgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIGFjY2VzcyBtZW1iZXJzIGFscmVhZHkgYWNjZXNzaWJsZSBvbiBQSVhJLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgUElYSS5TcHJpdGUjc2V0VGV4dHVyZVxuICogQHNlZSBQSVhJLlNwcml0ZSN0ZXh0dXJlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlLnByb3RvdHlwZS5zZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dHVyZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dHVyZSBwcm9wZXJ0eSwgZS5nIDogc3ByaXRlLnRleHR1cmUgPSB0ZXh0dXJlOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3NldFRleHRcbiAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmV4dHJhcy5CaXRtYXBUZXh0LnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dClcbntcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dCBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dCBwcm9wZXJ0eSwgZS5nIDogbXlCaXRtYXBUZXh0LnRleHQgPSBcXCdteSB0ZXh0XFwnOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLlRleHQjdGV4dFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteVRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRTdHlsZVxuICogQHNlZSBQSVhJLlRleHQjc3R5bGVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0LnByb3RvdHlwZS5zZXRTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlKVxue1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldFN0eWxlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBzdHlsZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0LnN0eWxlID0gc3R5bGU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQHNlZSBQSVhJLlRleHR1cmUjc2V0RnJhbWVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0dXJlLnByb3RvdHlwZS5zZXRGcmFtZSA9IGZ1bmN0aW9uKGZyYW1lKVxue1xuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldEZyYW1lIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBmcmFtZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0dXJlLmZyYW1lID0gZnJhbWU7Jyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhmaWx0ZXJzLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBzZWUgUElYSS5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBBYnN0cmFjdEZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLkFic3RyYWN0RmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBBYnN0cmFjdEZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkFic3RyYWN0RmlsdGVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkZYQUFGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuRlhBQUZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBGWEFBRmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuRlhBQUZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgRlhBQUZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkZYQUFGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuU3ByaXRlTWFza0ZpbHRlclxuICAgICAqIEBzZWUgUElYSS5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIFNwcml0ZU1hc2tGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBTcHJpdGVNYXNrRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU3ByaXRlTWFza0ZpbHRlcjtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkudXRpbHMudXVpZFxuICogQHNlZSBQSVhJLnV0aWxzLnVpZFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICovXG5jb3JlLnV0aWxzLnV1aWQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvbnNvbGUud2FybigndXRpbHMudXVpZCgpIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdXRpbHMudWlkKCkgZnJvbSBub3cgb24uJyk7XG4gICAgcmV0dXJuIGNvcmUudXRpbHMudWlkKCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogQSBCaXRtYXBUZXh0IG9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dCB1c2luZyBiaXRtYXAgZm9udC4gVG9cbiAqIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJywgJ1xccicgb3IgJ1xcclxcbicgaW4geW91ciBzdHJpbmcuIFlvdSBjYW4gZ2VuZXJhdGUgdGhlIGZudCBmaWxlcyB1c2luZzpcbiAqXG4gKiBBIEJpdG1hcFRleHQgY2FuIG9ubHkgYmUgY3JlYXRlZCB3aGVuIHRoZSBmb250IGlzIGxvYWRlZFxuICpcbiAqIGBgYGpzXG4gKiAvLyBpbiB0aGlzIGNhc2UgdGhlIGZvbnQgaXMgaW4gYSBmaWxlIGNhbGxlZCAnZGVzeXJlbC5mbnQnXG4gKiB2YXIgYml0bWFwVGV4dCA9IG5ldyBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0KFwidGV4dCB1c2luZyBhIGZhbmN5IGZvbnQhXCIsIHtmb250OiBcIjM1cHggRGVzeXJlbFwiLCBhbGlnbjogXCJyaWdodFwifSk7XG4gKiBgYGBcbiAqXG4gKlxuICogaHR0cDovL3d3dy5hbmdlbGNvZGUuY29tL3Byb2R1Y3RzL2JtZm9udC8gZm9yIHdpbmRvd3Mgb3JcbiAqIGh0dHA6Ly93d3cuYm1nbHlwaC5jb20vIGZvciBtYWMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBzdHlsZSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIHN0eWxlLmZvbnQge3N0cmluZ3xvYmplY3R9IFRoZSBmb250IGRlc2NyaXB0b3IgZm9yIHRoZSBvYmplY3QsIGNhbiBiZSBwYXNzZWQgYXMgYSBzdHJpbmcgb2YgZm9ybVxuICogICAgICBcIjI0cHggRm9udE5hbWVcIiBvciBcIkZvbnROYW1lXCIgb3IgYXMgYW4gb2JqZWN0IHdpdGggZXhwbGljaXQgbmFtZS9zaXplIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQubmFtZV0ge3N0cmluZ30gVGhlIGJpdG1hcCBmb250IGlkXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQuc2l6ZV0ge251bWJlcn0gVGhlIHNpemUgb2YgdGhlIGZvbnQgaW4gcGl4ZWxzLCBlLmcuIDI0XG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0XG4gKiAgICAgIHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUudGludD0weEZGRkZGRl0ge251bWJlcn0gVGhlIHRpbnQgY29sb3JcbiAqL1xuZnVuY3Rpb24gQml0bWFwVGV4dCh0ZXh0LCBzdHlsZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgb3ZlcmFsbCB0ZXh0LCBkaWZmZXJlbnQgZnJvbSBmb250U2l6ZSxcbiAgICAgKiB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBzdHlsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRleHRXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dEhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBsZXR0ZXIgc3ByaXRlIHBvb2wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZ2x5cGhzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZm9udCA9IHtcbiAgICAgICAgdGludDogc3R5bGUudGludCAhPT0gdW5kZWZpbmVkID8gc3R5bGUudGludCA6IDB4RkZGRkZGLFxuICAgICAgICBhbGlnbjogc3R5bGUuYWxpZ24gfHwgJ2xlZnQnLFxuICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICBzaXplOiAwXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgZm9udC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZm9udCA9IHN0eWxlLmZvbnQ7IC8vIHJ1biBmb250IHNldHRlclxuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IHRleHQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IHdpZHRoIG9mIHRoaXMgYml0bWFwIHRleHQgaW4gcGl4ZWxzLiBJZiB0aGUgdGV4dCBwcm92aWRlZCBpcyBsb25nZXIgdGhhbiB0aGUgdmFsdWUgcHJvdmlkZWQsIGxpbmUgYnJlYWtzIHdpbGwgYmUgYXV0b21hdGljYWxseSBpbnNlcnRlZCBpbiB0aGUgbGFzdCB3aGl0ZXNwYWNlLlxuICAgICAqIERpc2FibGUgYnkgc2V0dGluZyB2YWx1ZSB0byAwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IGxpbmUgaGVpZ2h0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRyeWluZyB0byB1c2UgdGhlIHRvdGFsIGhlaWdodCBvZiB0aGUgVGV4dCwgaWU6IHdoZW4gdHJ5aW5nIHRvIHZlcnRpY2FsbHkgYWxpZ24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkaXJ0eSBzdGF0ZSBvZiB0aGlzIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy51cGRhdGVUZXh0KCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5CaXRtYXBUZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5Db250YWluZXIucHJvdG90eXBlKTtcbkJpdG1hcFRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQml0bWFwVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gQml0bWFwVGV4dDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQml0bWFwVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGludCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0aW50OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQudGludDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQudGludCA9ICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlID49IDApID8gdmFsdWUgOiAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFsaWdubWVudCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbGVmdCdcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBhbGlnbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250LmFsaWduO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC5hbGlnbiA9IHZhbHVlIHx8ICdsZWZ0JztcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZvbnQgZGVzY3JpcHRvciBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0ZvbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgZm9udDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcgJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9mb250Lm5hbWUgPSB2YWx1ZS5sZW5ndGggPT09IDEgPyB2YWx1ZVswXSA6IHZhbHVlLnNsaWNlKDEpLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB2YWx1ZS5sZW5ndGggPj0gMiA/IHBhcnNlSW50KHZhbHVlWzBdLCAxMCkgOiBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV0uc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5zaXplID0gdHlwZW9mIHZhbHVlLnNpemUgPT09ICdudW1iZXInID8gdmFsdWUuc2l6ZSA6IHBhcnNlSW50KHZhbHVlLnNpemUsIDEwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGV4dCBhbmQgdXBkYXRlcyBpdCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkYXRhID0gQml0bWFwVGV4dC5mb250c1t0aGlzLl9mb250Lm5hbWVdO1xuICAgIHZhciBwb3MgPSBuZXcgY29yZS5Qb2ludCgpO1xuICAgIHZhciBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgIHZhciBjaGFycyA9IFtdO1xuICAgIHZhciBsYXN0TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbGluZVdpZHRocyA9IFtdO1xuICAgIHZhciBsaW5lID0gMDtcbiAgICB2YXIgc2NhbGUgPSB0aGlzLl9mb250LnNpemUgLyBkYXRhLnNpemU7XG4gICAgdmFyIGxhc3RTcGFjZSA9IC0xO1xuICAgIHZhciBtYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0Lmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gdGhpcy50ZXh0LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGxhc3RTcGFjZSA9IC8oXFxzKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSA/IGkgOiBsYXN0U3BhY2U7XG5cbiAgICAgICAgaWYgKC8oPzpcXHJcXG58XFxyfFxcbikvLnRlc3QodGhpcy50ZXh0LmNoYXJBdChpKSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXN0U3BhY2UgIT09IC0xICYmIHRoaXMubWF4V2lkdGggPiAwICYmIHBvcy54ICogc2NhbGUgPiB0aGlzLm1heFdpZHRoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKGNoYXJzLCBsYXN0U3BhY2UsIGkgLSBsYXN0U3BhY2UpO1xuICAgICAgICAgICAgaSA9IGxhc3RTcGFjZTtcbiAgICAgICAgICAgIGxhc3RTcGFjZSA9IC0xO1xuXG4gICAgICAgICAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbGluZSsrO1xuXG4gICAgICAgICAgICBwb3MueCA9IDA7XG4gICAgICAgICAgICBwb3MueSArPSBkYXRhLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hhckRhdGEgPSBkYXRhLmNoYXJzW2NoYXJDb2RlXTtcblxuICAgICAgICBpZiAoIWNoYXJEYXRhKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmV2Q2hhckNvZGUgJiYgY2hhckRhdGEua2VybmluZ1twcmV2Q2hhckNvZGVdKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb3MueCArPSBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV07XG4gICAgICAgIH1cblxuICAgICAgICBjaGFycy5wdXNoKHt0ZXh0dXJlOmNoYXJEYXRhLnRleHR1cmUsIGxpbmU6IGxpbmUsIGNoYXJDb2RlOiBjaGFyQ29kZSwgcG9zaXRpb246IG5ldyBjb3JlLlBvaW50KHBvcy54ICsgY2hhckRhdGEueE9mZnNldCwgcG9zLnkgKyBjaGFyRGF0YS55T2Zmc2V0KX0pO1xuICAgICAgICBsYXN0TGluZVdpZHRoID0gcG9zLnggKyAoY2hhckRhdGEudGV4dHVyZS53aWR0aCArIGNoYXJEYXRhLnhPZmZzZXQpO1xuICAgICAgICBwb3MueCArPSBjaGFyRGF0YS54QWR2YW5jZTtcbiAgICAgICAgbWF4TGluZUhlaWdodCA9IE1hdGgubWF4KG1heExpbmVIZWlnaHQsIChjaGFyRGF0YS55T2Zmc2V0ICsgY2hhckRhdGEudGV4dHVyZS5oZWlnaHQpKTtcbiAgICAgICAgcHJldkNoYXJDb2RlID0gY2hhckNvZGU7XG4gICAgfVxuXG4gICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG5cbiAgICB2YXIgbGluZUFsaWduT2Zmc2V0cyA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8PSBsaW5lOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYWxpZ25PZmZzZXQgPSAwO1xuXG4gICAgICAgIGlmICh0aGlzLl9mb250LmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbGlnbk9mZnNldCA9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5fZm9udC5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpbmVBbGlnbk9mZnNldHMucHVzaChhbGlnbk9mZnNldCk7XG4gICAgfVxuXG4gICAgdmFyIGxlbkNoYXJzID0gY2hhcnMubGVuZ3RoO1xuICAgIHZhciB0aW50ID0gdGhpcy50aW50O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbkNoYXJzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYyA9IHRoaXMuX2dseXBoc1tpXTsgLy8gZ2V0IHRoZSBuZXh0IGdseXBoIHNwcml0ZVxuXG4gICAgICAgIGlmIChjKVxuICAgICAgICB7XG4gICAgICAgICAgICBjLnRleHR1cmUgPSBjaGFyc1tpXS50ZXh0dXJlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgYyA9IG5ldyBjb3JlLlNwcml0ZShjaGFyc1tpXS50ZXh0dXJlKTtcbiAgICAgICAgICAgIHRoaXMuX2dseXBocy5wdXNoKGMpO1xuICAgICAgICB9XG5cbiAgICAgICAgYy5wb3NpdGlvbi54ID0gKGNoYXJzW2ldLnBvc2l0aW9uLnggKyBsaW5lQWxpZ25PZmZzZXRzW2NoYXJzW2ldLmxpbmVdKSAqIHNjYWxlO1xuICAgICAgICBjLnBvc2l0aW9uLnkgPSBjaGFyc1tpXS5wb3NpdGlvbi55ICogc2NhbGU7XG4gICAgICAgIGMuc2NhbGUueCA9IGMuc2NhbGUueSA9IHNjYWxlO1xuICAgICAgICBjLnRpbnQgPSB0aW50O1xuXG4gICAgICAgIGlmICghYy5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoYyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZW1vdmUgdW5uZWNlc3NhcnkgY2hpbGRyZW4uXG4gICAgZm9yIChpID0gbGVuQ2hhcnM7IGkgPCB0aGlzLl9nbHlwaHMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKHRoaXMuX2dseXBoc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0V2lkdGggPSBtYXhMaW5lV2lkdGggKiBzY2FsZTtcbiAgICB0aGlzLnRleHRIZWlnaHQgPSAocG9zLnkgKyBkYXRhLmxpbmVIZWlnaHQpICogc2NhbGU7XG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gbWF4TGluZUhlaWdodCAqIHNjYWxlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb2YgdGhpcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGV4dCBiZWZvcmUgY2FsbGluZyBwYXJlbnQncyBnZXRMb2NhbEJvdW5kc1xuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5cbkJpdG1hcFRleHQucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICByZXR1cm4gY29yZS5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzLmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59O1xuXG5CaXRtYXBUZXh0LmZvbnRzID0ge307XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIE1vdmllQ2xpcCBpcyBhIHNpbXBsZSB3YXkgdG8gZGlzcGxheSBhbiBhbmltYXRpb24gZGVwaWN0ZWQgYnkgYSBsaXN0IG9mIHRleHR1cmVzLlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgYWxpZW5JbWFnZXMgPSBbXCJpbWFnZV9zZXF1ZW5jZV8wMS5wbmdcIixcImltYWdlX3NlcXVlbmNlXzAyLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDMucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wNC5wbmdcIl07XG4gKiB2YXIgdGV4dHVyZUFycmF5ID0gW107XG4gKlxuICogZm9yICh2YXIgaT0wOyBpIDwgNDsgaSsrKVxuICoge1xuICogICAgICB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoYWxpZW5JbWFnZXNbaV0pO1xuICogICAgICB0ZXh0dXJlQXJyYXkucHVzaCh0ZXh0dXJlKTtcbiAqIH07XG4gKlxuICogdmFyIG1jID0gbmV3IFBJWEkuTW92aWVDbGlwKHRleHR1cmVBcnJheSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0dXJlcyB7UElYSS5UZXh0dXJlW118T2JqZWN0W119IGFuIGFycmF5IG9mIHtAbGluayBQSVhJLlRleHR1cmV9IG9yIGZyYW1lIG9iamVjdHMgdGhhdCBtYWtlIHVwIHRoZSBhbmltYXRpb25cbiAqIEBwYXJhbSB0ZXh0dXJlc1tdLnRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHtAbGluayBQSVhJLlRleHR1cmV9IG9mIHRoZSBmcmFtZVxuICogQHBhcmFtIHRleHR1cmVzW10udGltZSB7bnVtYmVyfSB0aGUgZHVyYXRpb24gb2YgdGhlIGZyYW1lIGluIG1zXG4gKi9cbmZ1bmN0aW9uIE1vdmllQ2xpcCh0ZXh0dXJlcylcbntcbiAgICBjb3JlLlNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmVzWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlID8gdGV4dHVyZXNbMF0gOiB0ZXh0dXJlc1swXS50ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kdXJhdGlvbnMgPSBudWxsO1xuXG4gICAgdGhpcy50ZXh0dXJlcyA9IHRleHR1cmVzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNwZWVkIHRoYXQgdGhlIE1vdmllQ2xpcCB3aWxsIHBsYXkgYXQuIEhpZ2hlciBpcyBmYXN0ZXIsIGxvd2VyIGlzIHNsb3dlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmFuaW1hdGlvblNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBtb3ZpZSBjbGlwIHJlcGVhdHMgYWZ0ZXIgcGxheWluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMubG9vcCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gYSBNb3ZpZUNsaXAgZmluaXNoZXMgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICovXG4gICAgdGhpcy5vbkNvbXBsZXRlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEVsYXBzZWQgdGltZSBzaW5jZSBhbmltYXRpb24gaGFzIGJlZW4gc3RhcnRlZCwgdXNlZCBpbnRlcm5hbGx5IHRvIGRpc3BsYXkgY3VycmVudCB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIE1vdmllQ2xpcCBpcyBjdXJyZW50bHkgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1vdmllQ2xpcC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5Nb3ZpZUNsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTW92aWVDbGlwO1xubW9kdWxlLmV4cG9ydHMgPSBNb3ZpZUNsaXA7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1vdmllQ2xpcC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiB0b3RhbEZyYW1lcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIGZyYW1lcyBpbiB0aGUgTW92aWVDbGlwLiBUaGlzIGlzIHRoZSBzYW1lIGFzIG51bWJlciBvZiB0ZXh0dXJlc1xuICAgICAqIGFzc2lnbmVkIHRvIHRoZSBNb3ZpZUNsaXAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdG90YWxGcmFtZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIHRleHR1cmVzIHVzZWQgZm9yIHRoaXMgTW92aWVDbGlwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqXG4gICAgICovXG4gICAgdGV4dHVyZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZih2YWx1ZVswXSBpbnN0YW5jZW9mIGNvcmUuVGV4dHVyZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcy5wdXNoKHZhbHVlW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMucHVzaCh2YWx1ZVtpXS50aW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgKiBUaGUgTW92aWVDbGlwcyBjdXJyZW50IGZyYW1lIGluZGV4XG4gICAgKlxuICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAqIEByZWFkb25seVxuICAgICovXG4gICAgY3VycmVudEZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRGcmFtZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpICUgdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRGcmFtZSA8IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY3VycmVudEZyYW1lICs9IHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RnJhbWU7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKipcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYoIXRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogUGxheXMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZih0aGlzLnBsYXlpbmcpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5aW5nID0gdHJ1ZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZ29lcyB0byBhIHNwZWNpZmljIGZyYW1lXG4gKlxuICogQHBhcmFtIGZyYW1lTnVtYmVyIHtudW1iZXJ9IGZyYW1lIGluZGV4IHRvIHN0b3AgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kU3RvcCA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLnN0b3AoKTtcblxuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbdGhpcy5jdXJyZW50RnJhbWVdO1xufTtcblxuLyoqXG4gKiBHb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWUgYW5kIGJlZ2lucyBwbGF5aW5nIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RhcnQgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kUGxheSA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IGZyYW1lTnVtYmVyO1xuXG4gICAgdGhpcy5wbGF5KCk7XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKiBAcHJpdmF0ZVxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWQgPSB0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2R1cmF0aW9ucyAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIHZhciBsYWcgPSB0aGlzLl9jdXJyZW50VGltZSAlIDEgKiB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuXG4gICAgICAgIGxhZyArPSBlbGFwc2VkIC8gNjAgKiAxMDAwO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPCAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZS0tO1xuICAgICAgICAgICAgbGFnICs9IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2lnbiA9IE1hdGguc2lnbih0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lKTtcbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgPSBNYXRoLmZsb29yKHRoaXMuX2N1cnJlbnRUaW1lKTtcblxuICAgICAgICB3aGlsZSAobGFnID49IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhZyAtPSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdICogc2lnbjtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IHNpZ247XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBsYWcgLyB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBlbGFwc2VkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jdXJyZW50VGltZSA8IDAgJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AoMCk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5fY3VycmVudFRpbWUgPj0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoICYmICF0aGlzLmxvb3ApXG4gICAge1xuICAgICAgICB0aGlzLmdvdG9BbmRTdG9wKHRoaXMuX3RleHR1cmVzLmxlbmd0aCAtIDEpO1xuXG4gICAgICAgIGlmICh0aGlzLm9uQ29tcGxldGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuXG59O1xuXG4vKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZGVzdHJveXMgaXRcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICggKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuICAgIGNvcmUuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIEEgc2hvcnQgaGFuZCB3YXkgb2YgY3JlYXRpbmcgYSBtb3ZpZWNsaXAgZnJvbSBhbiBhcnJheSBvZiBmcmFtZSBpZHNcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVzIHtzdHJpbmdbXX0gdGhlIGFycmF5IG9mIGZyYW1lcyBpZHMgdGhlIG1vdmllY2xpcCB3aWxsIHVzZSBhcyBpdHMgdGV4dHVyZSBmcmFtZXNcbiAqL1xuTW92aWVDbGlwLmZyb21GcmFtZXMgPSBmdW5jdGlvbiAoZnJhbWVzKVxue1xuICAgIHZhciB0ZXh0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0ZXh0dXJlcy5wdXNoKG5ldyBjb3JlLlRleHR1cmUuZnJvbUZyYW1lKGZyYW1lc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW92aWVDbGlwKHRleHR1cmVzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGltYWdlIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgaW1hZ2UgdXJscyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUltYWdlcyA9IGZ1bmN0aW9uIChpbWFnZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTsiLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICAvLyBhIHNwcml0ZSB1c2UgZGZvciByZW5kZXJpbmcgdGV4dHVyZXMuLlxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlcicpO1xuXG4vKipcbiAqIEEgdGlsaW5nIHNwcml0ZSBpcyBhIGZhc3Qgd2F5IG9mIHJlbmRlcmluZyBhIHRpbGluZyBpbWFnZVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmUge1RleHR1cmV9IHRoZSB0ZXh0dXJlIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFRpbGluZ1Nwcml0ZSh0ZXh0dXJlLCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGluZyBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVTY2FsZSA9IG5ldyBjb3JlLlBvaW50KDEsMSk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgcG9zaXRpb24gb2YgdGhlIGltYWdlIHRoYXQgaXMgYmVpbmcgdGlsZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBuZXcgY29yZS5Qb2ludCgwLDApO1xuXG4gICAgLy8vLy8gcHJpdmF0ZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHdpdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gd2lkdGggfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0IHx8IDEwMDtcblxuICAgIC8qKlxuICAgICAqIEFuIGludGVybmFsIFdlYkdMIFVWIGNhY2hlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlVXZzfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdXZzID0gbmV3IGNvcmUuVGV4dHVyZVV2cygpO1xuXG4gICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IG51bGw7XG5cbiAgICAvL1RPRE8gbW92ZS4uXG4gICAgdGhpcy5zaGFkZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcihcblxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1VHJhbnNmb3JtOycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJyAgIGNvb3JkIC09IHVUcmFuc2Zvcm0ueHk7JyxcbiAgICAgICAgJyAgIGNvb3JkIC89IHVUcmFuc2Zvcm0uenc7JyxcbiAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBjb29yZDsnLFxuXG4gICAgICAgICcgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpOycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgIFtcbiAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdUZyYW1lOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzIgdVBpeGVsU2l6ZTsnLFxuXG4gICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IG1vZCh2VGV4dHVyZUNvb3JkLCB1RnJhbWUuencpOycsXG4gICAgICAgICcgICBjb29yZCA9IGNsYW1wKGNvb3JkLCB1UGl4ZWxTaXplLCB1RnJhbWUuencgLSB1UGl4ZWxTaXplKTsnLFxuICAgICAgICAnICAgY29vcmQgKz0gdUZyYW1lLnh5OycsXG5cbiAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9ICB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdUZyYW1lOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVRyYW5zZm9ybTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLDAsMSwxXSB9LFxuICAgICAgICAgICAgICAgIHVQaXhlbFNpemUgOiB7IHR5cGUgOiAnMmZ2JywgdmFsdWU6IFsxLCAxXX1cbiAgICAgICAgICAgIH1cbiAgICAgICk7XG59XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsaW5nU3ByaXRlO1xubW9kdWxlLmV4cG9ydHMgPSBUaWxpbmdTcHJpdGU7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsaW5nU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRpbGluZ1Nwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybjtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICAvLyB0d2VhayBvdXIgdGV4dHVyZSB0ZW1wb3JhcmlseS4uXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUgfHwgIXRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGVtcFV2cyA9IHRleHR1cmUuX3V2cyxcbiAgICAgICAgdGVtcFdpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIHRlbXBIZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQsXG4gICAgICAgIHR3ID0gdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCxcbiAgICAgICAgdGggPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRoaXMuX3V2cztcbiAgICB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51UGl4ZWxTaXplLnZhbHVlWzBdID0gMS4wL3R3O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMV0gPSAxLjAvdGg7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMF0gPSB0ZW1wVXZzLngwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVsxXSA9IHRlbXBVdnMueTA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzJdID0gdGVtcFV2cy54MSAtIHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzNdID0gdGVtcFV2cy55MiAtIHRlbXBVdnMueTA7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzBdID0gKHRoaXMudGlsZVBvc2l0aW9uLnggJSAodGVtcFdpZHRoICogdGhpcy50aWxlU2NhbGUueCkpIC8gdGhpcy5fd2lkdGg7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsxXSA9ICh0aGlzLnRpbGVQb3NpdGlvbi55ICUgKHRlbXBIZWlnaHQgKiB0aGlzLnRpbGVTY2FsZS55KSkgLyB0aGlzLl9oZWlnaHQ7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsyXSA9ICggdHcgLyB0aGlzLl93aWR0aCApICogdGhpcy50aWxlU2NhbGUueDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzNdID0gKCB0aCAvIHRoaXMuX2hlaWdodCApICogdGhpcy50aWxlU2NhbGUueTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIodGhpcyk7XG5cbiAgICB0ZXh0dXJlLl91dnMgPSB0ZW1wVXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGVtcFdpZHRoO1xuICAgIHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRlbXBIZWlnaHQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBhIHJlZmVyZW5jZSB0byB0aGUgY2FudmFzIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0LFxuICAgICAgICB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgYmFzZVRleHR1cmUgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBtb2RYID0gKHRoaXMudGlsZVBvc2l0aW9uLnggLyB0aGlzLnRpbGVTY2FsZS54KSAlIHRleHR1cmUuX2ZyYW1lLndpZHRoLFxuICAgICAgICBtb2RZID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgLyB0aGlzLnRpbGVTY2FsZS55KSAlIHRleHR1cmUuX2ZyYW1lLmhlaWdodDtcblxuICAgIC8vIGNyZWF0ZSBhIG5pY2Ugc2hpbnkgcGF0dGVybiFcbiAgICAvLyBUT0RPIHRoaXMgbmVlZHMgdG8gYmUgcmVmcmVzaGVkIGlmIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgaWYoIXRoaXMuX2NhbnZhc1BhdHRlcm4pXG4gICAge1xuICAgICAgICAvLyBjdXQgYW4gb2JqZWN0IGZyb20gYSBzcHJpdGVzaGVldC4uXG4gICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IGNvcmUuQ2FudmFzQnVmZmVyKHRleHR1cmUuX2ZyYW1lLndpZHRoLCB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQpO1xuXG4gICAgICAgIC8vIFRpbnQgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgICAgaWYgKHRoaXMudGludCAhPT0gMHhGRkZGRkYpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlZFRpbnQgIT09IHRoaXMudGludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUgPSBDYW52YXNUaW50ZXIuZ2V0VGludGVkVGV4dHVyZSh0aGlzLCB0aGlzLnRpbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZSh0aGlzLnRpbnRlZFRleHR1cmUsIDAsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZShiYXNlVGV4dHVyZS5zb3VyY2UsIC10ZXh0dXJlLl9mcmFtZS54LCAtdGV4dHVyZS5fZnJhbWUueSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IHRlbXBDYW52YXMuY29udGV4dC5jcmVhdGVQYXR0ZXJuKCB0ZW1wQ2FudmFzLmNhbnZhcywgJ3JlcGVhdCcgKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgY29udGV4dCBzdGF0ZS4uXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb24pO1xuXG4gICAgLy8gVE9ETyAtIHRoaXMgc2hvdWxkIGJlIHJvbGxlZCBpbnRvIHRoZSBzZXRUcmFuc2Zvcm0gYWJvdmUuLlxuICAgIGNvbnRleHQuc2NhbGUodGhpcy50aWxlU2NhbGUueCx0aGlzLnRpbGVTY2FsZS55KTtcblxuICAgIGNvbnRleHQudHJhbnNsYXRlKG1vZFggKyAodGhpcy5hbmNob3IueCAqIC10aGlzLl93aWR0aCApLFxuICAgICAgICAgICAgICAgICAgICAgIG1vZFkgKyAodGhpcy5hbmNob3IueSAqIC10aGlzLl9oZWlnaHQpKTtcblxuICAgIC8vIGNoZWNrIGJsZW5kIG1vZGVcbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyBmaWxsIHRoZSBwYXR0ZXJuIVxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fY2FudmFzUGF0dGVybjtcbiAgICBjb250ZXh0LmZpbGxSZWN0KC1tb2RYLFxuICAgICAgICAgICAgICAgICAgICAgLW1vZFksXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl93aWR0aCAvIHRoaXMudGlsZVNjYWxlLngsXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWlnaHQgLyB0aGlzLnRpbGVTY2FsZS55KTtcblxuXG4gICAgLy9UT0RPIC0gcHJldHR5IHN1cmUgdGhpcyBjYW4gYmUgZGVsZXRlZC4uLlxuICAgIC8vY29udGV4dC50cmFuc2xhdGUoLXRoaXMudGlsZVBvc2l0aW9uLnggKyAodGhpcy5hbmNob3IueCAqIHRoaXMuX3dpZHRoKSwgLXRoaXMudGlsZVBvc2l0aW9uLnkgKyAodGhpcy5hbmNob3IueSAqIHRoaXMuX2hlaWdodCkpO1xuICAgIC8vY29udGV4dC5zY2FsZSgxIC8gdGhpcy50aWxlU2NhbGUueCwgMSAvIHRoaXMudGlsZVNjYWxlLnkpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBzcHJpdGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xuXG4gICAgdmFyIHcwID0gd2lkdGggKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICB2YXIgdzEgPSB3aWR0aCAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgdmFyIGgwID0gaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgdmFyIGgxID0gaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG5cbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgdmFyIHgxID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTIgPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHg0ID0gIGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciBtaW5YLFxuICAgICAgICBtYXhYLFxuICAgICAgICBtaW5ZLFxuICAgICAgICBtYXhZO1xuXG4gICAgbWluWCA9IHgxO1xuICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgbWluWSA9IHkxO1xuICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgbWF4WCA9IHgxO1xuICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgbWF4WSA9IHkxO1xuICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG5cbiAgICByZXR1cm4gYm91bmRzO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byBjaGVja1xuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKlxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsZVNjYWxlID0gbnVsbDtcbiAgICB0aGlzLl90aWxlU2NhbGVPZmZzZXQgPSBudWxsO1xuICAgIHRoaXMudGlsZVBvc2l0aW9uID0gbnVsbDtcblxuICAgIHRoaXMuX3V2cyA9IG51bGw7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSB0aWxpbmcgc3ByaXRlIHRoYXQgd2lsbCB1c2UgYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICovXG5UaWxpbmdTcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQsd2lkdGgsaGVpZ2h0KVxue1xuICAgIHZhciB0ZXh0dXJlID0gY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgJyArIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKHRleHR1cmUsd2lkdGgsaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBBIG5ldyBUaWxpbmdTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgd2lkdGgsIGhlaWdodCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRpbGluZ1Nwcml0ZShjb3JlLlRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpLHdpZHRoLGhlaWdodCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgRGlzcGxheU9iamVjdCA9IGNvcmUuRGlzcGxheU9iamVjdCxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gbnVsbDtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbEhpdFRlc3QgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsRGVzdHJveSA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVkU3ByaXRlID0gbnVsbDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGlzcGxheU9iamVjdC5wcm90b3R5cGUsIHtcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgeW91IHdhbnQgdGhpcyBkaXNwbGF5IG9iamVjdCB0byBiZSBjYWNoZWQgYXMgYSBiaXRtYXAuXG4gICAgICogVGhpcyBiYXNpY2FsbHkgdGFrZXMgYSBzbmFwIHNob3Qgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IGFzIGl0IGlzIGF0IHRoYXQgbW9tZW50LiBJdCBjYW4gcHJvdmlkZSBhIHBlcmZvcm1hbmNlIGJlbmVmaXQgZm9yIGNvbXBsZXggc3RhdGljIGRpc3BsYXlPYmplY3RzLlxuICAgICAqIFRvIHJlbW92ZSBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ2ZhbHNlJ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGNhY2hlQXNCaXRtYXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVBc0JpdG1hcDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NhY2hlQXNCaXRtYXAgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSB0aGlzLnJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gdGhpcy5yZW5kZXJDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMudXBkYXRlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzID0gdGhpcy5nZXRCb3VuZHM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbERlc3Ryb3kgPSB0aGlzLmRlc3Ryb3k7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQgPSB0aGlzLmNvbnRhaW5zUG9pbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSB0aGlzLl9jYWNoZUFzQml0bWFwRGVzdHJveTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXN0cm95Q2FjaGVkRGlzcGxheU9iamVjdCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXM7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRCb3VuZHMgPSB0aGlzLl9vcmlnaW5hbEdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX29yaWdpbmFsRGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fb3JpZ2luYWxDb250YWluc1BvaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBXZWJHTFxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gdGhlIFdlYkdMIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZFdlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENhY2hlZERpc3BsYXlPYmplY3QoIHJlbmRlcmVyICk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIoIHRoaXMuX2NhY2hlZFNwcml0ZSApO1xufTtcblxuLyoqXG4qIFByZXBhcmVzIHRoZSBXZWJHTCByZW5kZXJlciB0byBjYWNoZSB0aGUgc3ByaXRlXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGZpcnN0IHdlIGZsdXNoIGFueXRoaW5nIGxlZnQgaW4gdGhlIHJlbmRlcmVyIChvdGhlcndpc2UgaXQgd291bGQgZ2V0IHJlbmRlcmVkIHRvIHRoZSBjYWNoZWQgdGV4dHVyZSlcbiAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbiAgICAvL3RoaXMuZmlsdGVycz0gW107XG4gICAgLy8gbmV4dCB3ZSBmaW5kIHRoZSBkaW1lbnNpb25zIG9mIHRoZSB1bnRyYW5zZm9ybWVkIG9iamVjdFxuICAgIC8vIHRoaXMgZnVuY3Rpb24gYWxzbyBjYWxscyB1cGRhdGV0cmFuc2Zvcm0gb24gYWxsIGl0cyBjaGlsZHJlbiBhcyBwYXJ0IG9mIHRoZSBtZWFzdXJpbmcuIFRoaXMgbWVhbnMgd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIHRyYW5zZm9ybSBhZ2FpbiBpbiB0aGlzIGZ1bmN0aW9uXG4gICAgLy8gVE9ETyBwYXNzIGFuIG9iamVjdCB0byBjbG9uZSB0b28/IHNhdmVzIGhhdmluZyB0byBjcmVhdGUgYSBuZXcgb25lIGVhY2ggdGltZSFcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmNsb25lKCk7XG5cbiAgICAvLyBhZGQgc29tZSBwYWRkaW5nIVxuICAgIGlmKHRoaXMuX2ZpbHRlcnMpXG4gICAge1xuICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuX2ZpbHRlcnNbMF0ucGFkZGluZztcbiAgICAgICAgYm91bmRzLnggLT0gcGFkZGluZztcbiAgICAgICAgYm91bmRzLnkgLT0gcGFkZGluZztcblxuICAgICAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG4gICAgfVxuXG4gICAgLy8gZm9yIG5vdyB3ZSBjYWNoZSB0aGUgY3VycmVudCByZW5kZXJUYXJnZXQgdGhhdCB0aGUgd2ViR0wgcmVuZGVyZXIgaXMgY3VycmVudGx5IHVzaW5nLlxuICAgIC8vIHRoaXMgY291bGQgYmUgbW9yZSBlbGVnZW50Li5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldDtcbiAgICAvLyBXZSBhbHNvIHN0b3JlIHRoZSBmaWx0ZXIgc3RhY2sgLSBJIHdpbGwgZGVmaW5pdGVseSBsb29rIHRvIGNoYW5nZSBob3cgdGhpcyB3b3JrcyBhIGxpdHRsZSBsYXRlciBkb3duIHRoZSBsaW5lLlxuICAgIHZhciBzdGFjayA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2s7XG5cbiAgICAvLyB0aGlzIHJlbmRlclRleHR1cmUgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBjYWNoZWQgRGlzcGxheU9iamVjdFxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG5cblxuICAgIC8vIHNldCBhbGwgcHJvcGVydGllcyB0byB0aGVyZSBvcmlnaW5hbCBzbyB3ZSBjYW4gcmVuZGVyIHRvIGEgdGV4dHVyZVxuICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoY2FjaGVkUmVuZGVyVGFyZ2V0KTtcbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmZpbHRlclN0YWNrID0gc3RhY2s7XG5cbiAgICB0aGlzLnJlbmRlcldlYkdMICAgICA9IHRoaXMuX3JlbmRlckNhY2hlZFdlYkdMO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICAgICAgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgdHJhbnNmb3JtIG9mIHRoZSBjYWNoZWQgc3ByaXRlIHRvIGF2b2lkIHRoZSBuYXN0eSBmbGlja2VyLi5cbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgLy8gbWFwIHRoZSBoaXQgdGVzdC4uXG4gICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fY2FjaGVkU3ByaXRlLmNvbnRhaW5zUG9pbnQuYmluZCh0aGlzLl9jYWNoZWRTcHJpdGUpO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgc3ByaXRlIHdpdGggY2FudmFzXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gdGhlIENhbnZhcyByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9yZW5kZXJDYWNoZWRDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdENhbnZhcyggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLnJlbmRlckNhbnZhcyhyZW5kZXJlcik7XG59O1xuXG4vL1RPRE8gdGhpcyBjYW4gYmUgdGhlIHNhbWUgYXMgdGhlIHdlYkdMIHZlcmlzb24uLiB3aWxsIG5lZWQgdG8gZG8gYSBsaXR0bGUgdHdlYWtpbmcgZmlyc3QgdGhvdWdoLi5cbi8qKlxuKiBQcmVwYXJlcyB0aGUgQ2FudmFzIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvL2dldCBib3VuZHMgYWN0dWFsbHkgdHJhbnNmb3JtcyB0aGUgb2JqZWN0IGZvciB1cyBhbHJlYWR5IVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIG0sIHRydWUpO1xuXG4gICAgLy8gbm93IHJlc3RvcmUgdGhlIHN0YXRlIGJlIHNldHRpbmcgdGhlIG5ldyBwcm9wZXJ0aWVzXG4gICAgcmVuZGVyZXIuY29udGV4dCA9IGNhY2hlZFJlbmRlclRhcmdldDtcblxuICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fcmVuZGVyQ2FjaGVkQ2FudmFzO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICA9IHRoaXMuX2dldENhY2hlZEJvdW5kcztcblxuXG4gICAgLy8gY3JlYXRlIG91ciBjYWNoZWQgc3ByaXRlXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IGNvcmUuU3ByaXRlKHJlbmRlclRleHR1cmUpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogQ2FsY3VsYXRlcyB0aGUgYm91bmRzIG9mIHRoZSBjYWNoZWQgc3ByaXRlXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2dldENhY2hlZEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLl9jYWNoZWRTcHJpdGUuZ2V0Qm91bmRzKCk7XG59O1xuXG4vKipcbiogRGVzdHJveXMgdGhlIGNhY2hlZCBzcHJpdGUuXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX3RleHR1cmUuZGVzdHJveSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59O1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcERlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSgpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSBpbnN0YW5jZSBuYW1lIG9mIHRoZSBvYmplY3QuXG4gKlxuICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAqIEBtZW1iZXIge3N0cmluZ31cbiAqL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5uYW1lID0gbnVsbDtcblxuLyoqXG4qIFJldHVybnMgdGhlIGRpc3BsYXkgb2JqZWN0IGluIHRoZSBjb250YWluZXJcbipcbiogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuKiBAcGFyYW0gbmFtZSB7c3RyaW5nfSBpbnN0YW5jZSBuYW1lXG4qIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiovXG5jb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWUgPSBmdW5jdGlvbiAobmFtZSlcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbltpXS5uYW1lID09PSBuYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdFxuKlxuKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuKiBAcGFyYW0gcG9pbnQge1BvaW50fSB0aGUgcG9pbnQgdG8gd3JpdGUgdGhlIGdsb2JhbCB2YWx1ZSB0by4gSWYgbnVsbCBhIG5ldyBwb2ludCB3aWxsIGJlIHJldHVybmVkXG4qIEByZXR1cm4ge1BvaW50fVxuKi9cbmNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0R2xvYmFsUG9zaXRpb24gPSBmdW5jdGlvbiAocG9pbnQpXG57XG4gICAgcG9pbnQgPSBwb2ludCB8fCBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgaWYodGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICBwb2ludC54ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMud29ybGRUcmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHBvaW50LnggPSB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIHBvaW50LnkgPSB0aGlzLnBvc2l0aW9uLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxucmVxdWlyZSgnLi9jYWNoZUFzQml0bWFwJyk7XG5yZXF1aXJlKCcuL2dldENoaWxkQnlOYW1lJyk7XG5yZXF1aXJlKCcuL2dldEdsb2JhbFBvc2l0aW9uJyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmV4dHJhc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNb3ZpZUNsaXA6ICAgICAgcmVxdWlyZSgnLi9Nb3ZpZUNsaXAnKSxcbiAgICBUaWxpbmdTcHJpdGU6ICAgcmVxdWlyZSgnLi9UaWxpbmdTcHJpdGUnKSxcbiAgICBCaXRtYXBUZXh0OiAgICAgcmVxdWlyZSgnLi9CaXRtYXBUZXh0Jylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGUgWSBpcyBmbGlwcGVkIGluIHRoaXMgc2hhZGVyIGZvciBzb21lIHJlYXNvbi5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgc2hhZGVyIDogaHR0cHM6Ly93d3cuc2hhZGVydG95LmNvbS92aWV3L2xzc0dEaiBieSBAbW92QVgxM2hcbiAqL1xuXG4vKipcbiAqIEFuIEFTQ0lJIGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQXNjaWlGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gZmxvYXQgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IGNoYXJhY3RlcihmbG9hdCBuLCB2ZWMyIHApXFxue1xcbiAgICBwID0gZmxvb3IocCp2ZWMyKDQuMCwgLTQuMCkgKyAyLjUpO1xcbiAgICBpZiAoY2xhbXAocC54LCAwLjAsIDQuMCkgPT0gcC54ICYmIGNsYW1wKHAueSwgMC4wLCA0LjApID09IHAueSlcXG4gICAge1xcbiAgICAgICAgaWYgKGludChtb2Qobi9leHAyKHAueCArIDUuMCpwLnkpLCAyLjApKSA9PSAxKSByZXR1cm4gMS4wO1xcbiAgICB9XFxuICAgIHJldHVybiAwLjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5O1xcblxcbiAgICB2ZWMzIGNvbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgZmxvb3IoIHV2IC8gcGl4ZWxTaXplICkgKiBwaXhlbFNpemUgLyBkaW1lbnNpb25zLnh5KS5yZ2I7XFxuXFxuICAgIGZsb2F0IGdyYXkgPSAoY29sLnIgKyBjb2wuZyArIGNvbC5iKSAvIDMuMDtcXG5cXG4gICAgZmxvYXQgbiA9ICA2NTUzNi4wOyAgICAgICAgICAgICAvLyAuXFxuICAgIGlmIChncmF5ID4gMC4yKSBuID0gNjU2MDAuMDsgICAgLy8gOlxcbiAgICBpZiAoZ3JheSA+IDAuMykgbiA9IDMzMjc3Mi4wOyAgIC8vICpcXG4gICAgaWYgKGdyYXkgPiAwLjQpIG4gPSAxNTI1NTA4Ni4wOyAvLyBvXFxuICAgIGlmIChncmF5ID4gMC41KSBuID0gMjMzODUxNjQuMDsgLy8gJlxcbiAgICBpZiAoZ3JheSA+IDAuNikgbiA9IDE1MjUyMDE0LjA7IC8vIDhcXG4gICAgaWYgKGdyYXkgPiAwLjcpIG4gPSAxMzE5OTQ1Mi4wOyAvLyBAXFxuICAgIGlmIChncmF5ID4gMC44KSBuID0gMTE1MTI4MTAuMDsgLy8gI1xcblxcbiAgICB2ZWMyIHAgPSBtb2QoIHV2IC8gKCBwaXhlbFNpemUgKiAwLjUgKSwgMi4wKSAtIHZlYzIoMS4wKTtcXG4gICAgY29sID0gY29sICogY2hhcmFjdGVyKG4sIHApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbCwgMS4wKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiA4IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkFzY2lpRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQXNjaWlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXNjaWlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFzY2lpRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBc2NpaUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGl4ZWwgc2l6ZSB1c2VkIGJ5IHRoZSBmaWx0ZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Bc2NpaUZpbHRlciNcbiAgICAgKi9cbiAgICBzaXplOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsb29tRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsb29tRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlciA9IG5ldyBCbHVyWUZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcbn1cblxuQmxvb21GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbG9vbUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbG9vbUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxvb21GaWx0ZXI7XG5cbkJsb29tRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAvL1RPRE8gLSBjb3B5VGV4U3ViSW1hZ2UyRCBjb3VsZCBiZSB1c2VkIGhlcmU/XG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5TQ1JFRU4pO1xuXG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsb29tRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cblxuLyoqXG4gKiBUaGUgQmx1ckRpckZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0b3dhcmQgYSBkaXJlY3Rpb24gdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpclhcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJZXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJEaXJGaWx0ZXIoZGlyWCwgZGlyWSlcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gZmxvYXQgZGlyWDtcXG51bmlmb3JtIGZsb2F0IGRpclk7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbM107XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWSApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApICogMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pICogMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pICogMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSAqIDAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgZGlyWDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogZGlyWCB8fCAwIH0sXG4gICAgICAgICAgICBkaXJZOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJZIHx8IDAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWCBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJYID0gZGlyWCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWSBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJZID0gZGlyWSB8fCAwO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJEaXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJEaXJGaWx0ZXI7XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcikge1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZiAodGhpcy5wYXNzZXMgPT09IDEpIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCByZW5kZXJUYXJnZXQsIGNsZWFyKTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMjsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL3RoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvICh0aGlzLnBhc3NlcysoaSoyKSkgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCByZW5kZXJUYXJnZXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IHZhbHVlICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBkaXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyWDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZGlyWC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJZO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJZLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWUZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBCbHVyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG59XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJGaWx0ZXI7XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHBhc3Nlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5ibHVyWEZpbHRlci5wYXNzZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcyA9IHRoaXMuYmx1cllGaWx0ZXIucGFzc2VzID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1clhGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJYRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAxMiAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwNCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuXFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1clhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1clhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJYRmlsdGVyO1xuXG5CbHVyWEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1clhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJYRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gIE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJZRmlsdGVyIGFwcGxpZXMgYSBob3Jpem9udGFsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAxMiAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDEyICogc3RyZW5ndGgpO1xcblxcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJZRmlsdGVyO1xuXG5CbHVyWUZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gTWF0aC5hYnModGhpcy5zdHJlbmd0aCkgLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIFNtYXJ0IEJsdXIgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTbWFydEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgKiBwZXJjZW50KTtcXG4gICAgICAgIHNhbXBsZS5yZ2IgKj0gc2FtcGxlLmE7XFxuICAgICAgICBjb2xvciArPSBzYW1wbGUgKiB3ZWlnaHQ7XFxuICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgLyB0b3RhbDtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAvPSBnbF9GcmFnQ29sb3IuYSArIDAuMDAwMDE7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgZGVsdGE6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC4xLCB5OiAwLjAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU21hcnRCbHVyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTbWFydEJsdXJGaWx0ZXI7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA1eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIGBgYGpzXG4gKiAgdmFyIGNvbG9yTWF0cml4ID0gbmV3IFBJWEkuQ29sb3JNYXRyaXhGaWx0ZXIoKTtcbiAqICBjb250YWluZXIuZmlsdGVycyA9IFtjb2xvck1hdHJpeF07XG4gKiAgY29sb3JNYXRyaXguY29udHJhc3QoMik7XG4gKiBgYGBcbiAqIEBhdXRob3IgQ2zDqW1lbnQgQ2hlbmViYXVsdCA8Y2xlbWVudEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ29sb3JNYXRyaXhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgbVsyNV07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcblxcbiAgICB2ZWM0IGMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IuciA9IChtWzBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzJdICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IG1bNF07XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5nID0gKG1bNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bN10gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gbVs5XTtcXG5cXG4gICAgIGdsX0ZyYWdDb2xvci5iID0gKG1bMTBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzExXSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IG1bMTRdO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmEgPSAobVsxNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTZdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gbVsxOV07XFxuXFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICcxZnYnLCB2YWx1ZTogW1xuICAgICAgICAgICAgICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvck1hdHJpeEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JNYXRyaXhGaWx0ZXI7XG5cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGN1cnJlbnQgbWF0cml4IGFuZCBzZXQgdGhlIG5ldyBvbmVcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IGlmIHRydWUsIGN1cnJlbnQgbWF0cml4IGFuZCBtYXRyaXggYXJlIG11bHRpcGxpZWQuIElmIGZhbHNlLCBqdXN0IHNldCB0aGUgY3VycmVudCBtYXRyaXggd2l0aCBAcGFyYW0gbWF0cml4XG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fbG9hZE1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgsIG11bHRpcGx5KVxue1xuICAgIG11bHRpcGx5ID0gISFtdWx0aXBseTtcblxuICAgIHZhciBuZXdNYXRyaXggPSBtYXRyaXg7XG5cbiAgICBpZiAobXVsdGlwbHkpIHtcbiAgICAgICAgdGhpcy5fbXVsdGlwbHkobmV3TWF0cml4LCB0aGlzLnVuaWZvcm1zLm0udmFsdWUsIG1hdHJpeCk7XG4gICAgICAgIG5ld01hdHJpeCA9IHRoaXMuX2NvbG9yTWF0cml4KG5ld01hdHJpeCk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgbWF0cml4XG4gICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gbmV3TWF0cml4O1xufTtcblxuLyoqXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQ1J3NcbiAqXG4gKiBAcGFyYW0gb3V0IHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0gYSB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIGIge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyBvdXQge251bWJlcltdfSAobWF0IDV4NClcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpXG57XG5cbiAgICAvLyBSZWQgQ2hhbm5lbFxuICAgIG91dFswXSA9IChhWzBdICogYlswXSkgKyAoYVsxXSAqIGJbNV0pICsgKGFbMl0gKiBiWzEwXSkgKyAoYVszXSAqIGJbMTVdKTtcbiAgICBvdXRbMV0gPSAoYVswXSAqIGJbMV0pICsgKGFbMV0gKiBiWzZdKSArIChhWzJdICogYlsxMV0pICsgKGFbM10gKiBiWzE2XSk7XG4gICAgb3V0WzJdID0gKGFbMF0gKiBiWzJdKSArIChhWzFdICogYls3XSkgKyAoYVsyXSAqIGJbMTJdKSArIChhWzNdICogYlsxN10pO1xuICAgIG91dFszXSA9IChhWzBdICogYlszXSkgKyAoYVsxXSAqIGJbOF0pICsgKGFbMl0gKiBiWzEzXSkgKyAoYVszXSAqIGJbMThdKTtcbiAgICBvdXRbNF0gPSAoYVswXSAqIGJbNF0pICsgKGFbMV0gKiBiWzldKSArIChhWzJdICogYlsxNF0pICsgKGFbM10gKiBiWzE5XSk7XG5cbiAgICAvLyBHcmVlbiBDaGFubmVsXG4gICAgb3V0WzVdID0gKGFbNV0gKiBiWzBdKSArIChhWzZdICogYls1XSkgKyAoYVs3XSAqIGJbMTBdKSArIChhWzhdICogYlsxNV0pO1xuICAgIG91dFs2XSA9IChhWzVdICogYlsxXSkgKyAoYVs2XSAqIGJbNl0pICsgKGFbN10gKiBiWzExXSkgKyAoYVs4XSAqIGJbMTZdKTtcbiAgICBvdXRbN10gPSAoYVs1XSAqIGJbMl0pICsgKGFbNl0gKiBiWzddKSArIChhWzddICogYlsxMl0pICsgKGFbOF0gKiBiWzE3XSk7XG4gICAgb3V0WzhdID0gKGFbNV0gKiBiWzNdKSArIChhWzZdICogYls4XSkgKyAoYVs3XSAqIGJbMTNdKSArIChhWzhdICogYlsxOF0pO1xuICAgIG91dFs5XSA9IChhWzVdICogYls0XSkgKyAoYVs2XSAqIGJbOV0pICsgKGFbN10gKiBiWzE0XSkgKyAoYVs4XSAqIGJbMTldKTtcblxuICAgIC8vIEJsdWUgQ2hhbm5lbFxuICAgIG91dFsxMF0gPSAoYVsxMF0gKiBiWzBdKSArIChhWzExXSAqIGJbNV0pICsgKGFbMTJdICogYlsxMF0pICsgKGFbMTNdICogYlsxNV0pO1xuICAgIG91dFsxMV0gPSAoYVsxMF0gKiBiWzFdKSArIChhWzExXSAqIGJbNl0pICsgKGFbMTJdICogYlsxMV0pICsgKGFbMTNdICogYlsxNl0pO1xuICAgIG91dFsxMl0gPSAoYVsxMF0gKiBiWzJdKSArIChhWzExXSAqIGJbN10pICsgKGFbMTJdICogYlsxMl0pICsgKGFbMTNdICogYlsxN10pO1xuICAgIG91dFsxM10gPSAoYVsxMF0gKiBiWzNdKSArIChhWzExXSAqIGJbOF0pICsgKGFbMTJdICogYlsxM10pICsgKGFbMTNdICogYlsxOF0pO1xuICAgIG91dFsxNF0gPSAoYVsxMF0gKiBiWzRdKSArIChhWzExXSAqIGJbOV0pICsgKGFbMTJdICogYlsxNF0pICsgKGFbMTNdICogYlsxOV0pO1xuXG4gICAgLy8gQWxwaGEgQ2hhbm5lbFxuICAgIG91dFsxNV0gPSAoYVsxNV0gKiBiWzBdKSArIChhWzE2XSAqIGJbNV0pICsgKGFbMTddICogYlsxMF0pICsgKGFbMThdICogYlsxNV0pO1xuICAgIG91dFsxNl0gPSAoYVsxNV0gKiBiWzFdKSArIChhWzE2XSAqIGJbNl0pICsgKGFbMTddICogYlsxMV0pICsgKGFbMThdICogYlsxNl0pO1xuICAgIG91dFsxN10gPSAoYVsxNV0gKiBiWzJdKSArIChhWzE2XSAqIGJbN10pICsgKGFbMTddICogYlsxMl0pICsgKGFbMThdICogYlsxN10pO1xuICAgIG91dFsxOF0gPSAoYVsxNV0gKiBiWzNdKSArIChhWzE2XSAqIGJbOF0pICsgKGFbMTddICogYlsxM10pICsgKGFbMThdICogYlsxOF0pO1xuICAgIG91dFsxOV0gPSAoYVsxNV0gKiBiWzRdKSArIChhWzE2XSAqIGJbOV0pICsgKGFbMTddICogYlsxNF0pICsgKGFbMThdICogYlsxOV0pO1xuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEByZXR1cm4gbSB7bnVtYmVyW119IChtYXQgNXg0KSB3aXRoIGFsbCB2YWx1ZXMgYmV0d2VlbiAwLTFcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9jb2xvck1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgLy8gQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICAgIHZhciBtID0gbmV3IEZsb2F0MzJBcnJheShtYXRyaXgpO1xuICAgIG1bNF0gLz0gMjU1O1xuICAgIG1bOV0gLz0gMjU1O1xuICAgIG1bMTRdIC89IDI1NTtcbiAgICBtWzE5XSAvPSAyNTU7XG5cbiAgICByZXR1cm4gbTtcbn07XG5cbi8qKlxuICogQWRqdXN0cyBicmlnaHRuZXNzXG4gKlxuICogQHBhcmFtIGIge251bWJlcn0gdmFsdWUgb2YgdGhlIGJyaWd0aG5lc3MgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJpZ2h0bmVzcyA9IGZ1bmN0aW9uIChiLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBiLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCBiLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCBiLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgbWF0cmljZXMgaW4gZ3JleSBzY2FsZXNcbiAqXG4gKiBAcGFyYW0gc2NhbGUge251bWJlcn0gdmFsdWUgb2YgdGhlIGdyZXkgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlID0gZnVuY3Rpb24gKHNjYWxlLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuLy9BbWVyaWNhbml6ZWQgYWxpYXNcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmF5c2NhbGUgPSBDb2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlO1xuXG4vKipcbiAqIFNldCB0aGUgYmxhY2sgYW5kIHdoaXRlIG1hdHJpY2VcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ibGFja0FuZFdoaXRlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBodWUgcHJvcGVydHkgb2YgdGhlIGNvbG9yXG4gKlxuICogQHBhcmFtIHJvdGF0aW9uIHtudW1iZXJ9IGluIGRlZ3JlZXNcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5odWUgPSBmdW5jdGlvbiAocm90YXRpb24sIG11bHRpcGx5KVxue1xuICAgIHJvdGF0aW9uID0gKHJvdGF0aW9uIHx8IDApIC8gMTgwICogTWF0aC5QSTtcbiAgICB2YXIgY29zID0gTWF0aC5jb3Mocm90YXRpb24pLFxuICAgICAgICBzaW4gPSBNYXRoLnNpbihyb3RhdGlvbik7XG5cbiAgICAvLyBsdW1pbmFuY2VSZWQsIGx1bWluYW5jZUdyZWVuLCBsdW1pbmFuY2VCbHVlXG4gICAgdmFyIGx1bVIgPSAwLjIxMywgLy8gb3IgMC4zMDg2XG4gICAgICAgIGx1bUcgPSAwLjcxNSwgLy8gb3IgMC42MDk0XG4gICAgICAgIGx1bUIgPSAwLjA3MjsgLy8gb3IgMC4wODIwXG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBsdW1SICsgY29zICogKDEgLSBsdW1SKSArIHNpbiAqICgtbHVtUiksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKC1sdW1HKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoMSAtIGx1bUIpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgwLjE0MyksIGx1bUcgKyBjb3MgKiAoMSAtIGx1bUcpICsgc2luICogKDAuMTQwKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoLTAuMjgzKSwgMCwgMCxcbiAgICAgICAgbHVtUiArIGNvcyAqICgtbHVtUikgKyBzaW4gKiAoLSgxIC0gbHVtUikpLCBsdW1HICsgY29zICogKC1sdW1HKSArIHNpbiAqIChsdW1HKSwgbHVtQiArIGNvcyAqICgxIC0gbHVtQikgKyBzaW4gKiAobHVtQiksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLyoqXG4gKiBTZXQgdGhlIGNvbnRyYXN0IG1hdHJpeCwgaW5jcmVhc2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBkYXJrIGFuZCBicmlnaHRcbiAqIEluY3JlYXNlIGNvbnRyYXN0IDogc2hhZG93cyBkYXJrZXIgYW5kIGhpZ2hsaWdodHMgYnJpZ2h0ZXJcbiAqIERlY3JlYXNlIGNvbnRyYXN0IDogYnJpbmcgdGhlIHNoYWRvd3MgdXAgYW5kIHRoZSBoaWdobGlnaHRzIGRvd25cbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBjb250cmFzdFxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbnRyYXN0ID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHYgPSAoYW1vdW50IHx8IDApICsgMTtcbiAgICB2YXIgbyA9IC0xMjggKiAodiAtIDEpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgdiwgMCwgMCwgMCwgbyxcbiAgICAgICAgMCwgdiwgMCwgMCwgbyxcbiAgICAgICAgMCwgMCwgdiwgMCwgbyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHNhdHVyYXRpb24gbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGNvbG9yc1xuICogSW5jcmVhc2Ugc2F0dXJhdGlvbiA6IGluY3JlYXNlIGNvbnRyYXN0LCBicmlnaHRuZXNzLCBhbmQgc2hhcnBuZXNzXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNhdHVyYXRlID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHggPSAoYW1vdW50IHx8IDApICogMiAvIDMgKyAxO1xuICAgIHZhciB5ID0gKCh4IC0gMSkgKiAtMC41KTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHgsIHksIHksIDAsIDAsXG4gICAgICAgIHksIHgsIHksIDAsIDAsXG4gICAgICAgIHksIHksIHgsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRGVzYXR1cmF0ZSBpbWFnZSAocmVtb3ZlIGNvbG9yKVxuICpcbiAqIENhbGwgdGhlIHNhdHVyYXRlIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmRlc2F0dXJhdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICB0aGlzLnNhdHVyYXRlKC0xKTtcbn07XG5cbi8qKlxuICogTmVnYXRpdmUgaW1hZ2UgKGludmVyc2Ugb2YgY2xhc3NpYyByZ2IgbWF0cml4KVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uZWdhdGl2ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAxLCAxLCAwLCAwLFxuICAgICAgICAxLCAwLCAxLCAwLCAwLFxuICAgICAgICAxLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNlcGlhIGltYWdlXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNlcGlhID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMzkzLCAwLjc2ODk5OTksIDAuMTg4OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMzQ5LCAwLjY4NTk5OTksIDAuMTY3OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMjcyLCAwLjUzMzk5OTksIDAuMTMwOTk5OTksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgbW90aW9uIHBpY3R1cmUgcHJvY2VzcyBpbnZlbnRlZCBpbiAxOTE2ICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50ZWNobmljb2xvciA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjkxMjUyNzc4OTE0NTYwODMsIC0wLjg1NDUzNDQ5NzY5NTE2NDUsIC0wLjA5MTU1NTA4NDgyNzU1NTg1LCAwLCAxMS43OTM2MDM0MzQzNzczMzcsXG4gICAgICAgIC0wLjMwODc4MzMzODU5MjgwOTcsIDEuNzY1ODkwODU1NTQ1ODQyOCwgLTAuMTA2MDE3NDMwNzQ3MjIyNDUsIDAsIC03MC4zNTIwNTE2MTQ2MTM5OCxcbiAgICAgICAgLTAuMjMxMTAzMzc3NTQ4NjE2LCAtMC43NTAxODk5MTk3NDQwMjEyLCAxLjg0NzU5NzgxNjEwODE4OSwgMCwgMzAuOTUwOTQwODY5NDkxMTM4LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFBvbGFyb2lkIGZpbHRlclxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wb2xhcm9pZCA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjQzOCwgLTAuMDYyLCAtMC4wNjIsIDAsIDAsXG4gICAgICAgIC0wLjEyMiwgMS4zNzgsIC0wLjEyMiwgMCwgMCxcbiAgICAgICAgLTAuMDE2LCAtMC4wMTYsIDEuNDgzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEZpbHRlciB3aG8gdHJhbnNmb3JtcyA6IFJlZCAtPiBCbHVlIGFuZCBCbHVlIC0+IFJlZFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50b0JHUiA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIENvbG9yIHJldmVyc2FsIGZpbG0gaW50cm9kdWNlZCBieSBFYXN0bWFuIEtvZGFrIGluIDE5MzUuICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5rb2RhY2hyb21lID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuMTI4NTU4MjM5NjU5MzUyNSwgLTAuMzk2NzM4MjI4MzYwMTM0OCwgLTAuMDM5OTI1NTkxNzI5MjE3OTMsIDAsIDYzLjcyOTU4NzYyMTk2NTAyLFxuICAgICAgICAtMC4xNjQwNDMzOTk2MjI0NDYxNiwgMS4wODM1MjUxNTY2MjkxMzA0LCAtMC4wNTQ5ODgwNTExNTYzMzEzMiwgMCwgMjQuNzMyNDA3ODk2NzA2MjAzLFxuICAgICAgICAtMC4xNjc4NjAxMDcwNjE1NTc2MywgLTAuNTYwMzQxNjI3NzY5NTI0OCwgMS42MDE0ODUwNzYxOTY0OTQzLCAwLCAzNS42Mjk4MjgwNzQ2MDk0NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBCcm93biBkZWxpY2lvdXMgYnJvd25pIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJvd25pID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNTk5NzAyMzQ5ODE1OTcxNSwgMC4zNDU1MzI0MzA0ODM5MTI2MywgLTAuMjcwODI5ODY3NDUzODA0MiwgMCwgNDcuNDMxOTI4NTU2MDA4NzMsXG4gICAgICAgIC0wLjAzNzcwMzI0OTgzNzc4MzE1NywgMC44NjA5NTc3NTg3OTkyNjQxLCAwLjE1MDU5NTUyMzg4NDU5OTEzLCAwLCAtMzYuOTY4NDE0OTgzMTkxMjcsXG4gICAgICAgIDAuMjQxMTM2MzUxMjgxNTMzMzUsIC0wLjA3NDQxMDM3OTA4NDIyNDkyLCAwLjQ0OTcyMTgyMDY0ODc3MTUzLCAwLCAtNy41NjIwNzUyNzc1OTEyODMsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBWaW50YWdlIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudmludGFnZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjYyNzkzNDU2MzU2MDU5OTQsIDAuMzIwMjE4MzQyMDgxOTM2NywgLTAuMDM5NjU0MDgyMTEzMTI0NTMsIDAsIDkuNjUxMjg1ODM1Mjk0MTIzLFxuICAgICAgICAwLjAyNTc4Mzk3NzA0ODA4ODY4LCAwLjY0NDExODg2NDQzNzQ3NzEsIDAuMDMyNTkxMjc2MTYxNDkyOTQsIDAsIDcuNDYyODI5MTc2NDcwNTkxLFxuICAgICAgICAwLjA0NjYwNTU1NTY3ODI3MTksIC0wLjA4NTEyMzI5ODcyNDc4OTEsIDAuNTI0MTY0ODAxODcwMDQ2NSwgMCwgNS4xNTkxOTA1ODgyMzUyOTYsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBXZSBkb24ndCBrbm93IGV4YWN0bHkgd2hhdCBpdCBkb2VzLCBraW5kIG9mIGdyYWRpZW50IG1hcCwgYnV0IGZ1bm55IHRvIHBsYXkgd2l0aCFcbiAqXG4gKiBAcGFyYW0gZGVzYXR1cmF0aW9uIHtudW1iZXJ9XG4gKiBAcGFyYW0gdG9uZWQge251bWJlcn1cbiAqIEBwYXJhbSBsaWdodENvbG9yIHtzdHJpbmd9IChleGFtcGxlIDogXCIweEZGRTU4MFwiKVxuICogQHBhcmFtIGRhcmtDb2xvciB7c3RyaW5nfSAgKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbG9yVG9uZSA9IGZ1bmN0aW9uIChkZXNhdHVyYXRpb24sIHRvbmVkLCBsaWdodENvbG9yLCBkYXJrQ29sb3IsIG11bHRpcGx5KVxue1xuICAgIGRlc2F0dXJhdGlvbiA9IGRlc2F0dXJhdGlvbiB8fCAwLjI7XG4gICAgdG9uZWQgPSB0b25lZCB8fCAwLjE1O1xuICAgIGxpZ2h0Q29sb3IgPSBsaWdodENvbG9yIHx8IDB4RkZFNTgwO1xuICAgIGRhcmtDb2xvciA9IGRhcmtDb2xvciB8fCAweDMzODAwMDtcblxuICAgIHZhciBsUiA9ICgobGlnaHRDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEcgPSAoKGxpZ2h0Q29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEIgPSAobGlnaHRDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgdmFyIGRSID0gKChkYXJrQ29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGRHID0gKChkYXJrQ29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEIgPSAoZGFya0NvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjMsIDAuNTksIDAuMTEsIDAsIDAsXG4gICAgICAgIGxSLCBsRywgbEIsIGRlc2F0dXJhdGlvbiwgMCxcbiAgICAgICAgZFIsIGRHLCBkQiwgdG9uZWQsIDAsXG4gICAgICAgIGxSIC0gZFIsIGxHIC0gZEcsIGxCIC0gZEIsIDAsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBOaWdodCBlZmZlY3RcbiAqXG4gKiBAcGFyYW0gaW50ZW5zaXR5IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubmlnaHQgPSBmdW5jdGlvbiAoaW50ZW5zaXR5LCBtdWx0aXBseSlcbntcbiAgICBpbnRlbnNpdHkgPSBpbnRlbnNpdHkgfHwgMC4xO1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGludGVuc2l0eSAqICggLTIuMCksIC1pbnRlbnNpdHksIDAsIDAsIDAsXG4gICAgICAgIC1pbnRlbnNpdHksIDAsIGludGVuc2l0eSwgMCwgMCxcbiAgICAgICAgMCwgaW50ZW5zaXR5LCBpbnRlbnNpdHkgKiAyLjAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLypcbiAqIFByZWRhdG9yIGVmZmVjdFxuICpcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIGEgbmV3IGluZGVwZW50IG9uZVxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gaG93IG11Y2ggdGhlIHByZWRhdG9yIGZlZWxzIGhpcyBmdXR1cmUgdmljdGltXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucHJlZGF0b3IgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxMS4yMjQxMzA2MzA0OTMxNjQgKiBhbW91bnQsIC00Ljc5NDQ4Njk5OTUxMTcxOSAqIGFtb3VudCwgLTIuODc0NjExODU0NTUzMjIyNyAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC40MDM0MjQzODIyMDk3Nzc4MyAqIGFtb3VudCxcbiAgICAgICAgLTMuNjMzMDY5NzUzNjQ2ODUwNiAqIGFtb3VudCwgOS4xOTMxNTcxOTYwNDQ5MjIgKiBhbW91bnQsIC0yLjk1MTgxMDgzNjc5MTk5MiAqIGFtb3VudCwgMCAqIGFtb3VudCwgLTEuMzE2MTM1MDQ4ODY2MjcyICogYW1vdW50LFxuICAgICAgICAtMy4yMTg0MTk3OTAyNjc5NDQzICogYW1vdW50LCAtNC4yMzc1MDMwNTE3NTc4MTI1ICogYW1vdW50LCA3LjQ3NjQ0ODA1OTA4MjAzMSAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC44MDQ0NDU5MjIzNzQ3MjUzICogYW1vdW50LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogTFNEIGVmZmVjdFxuICpcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gSG93IGNyYXp5IGlzIHlvdXIgZWZmZWN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubHNkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDIsIC0wLjQsIDAuNSwgMCwgMCxcbiAgICAgICAgLTAuNSwgMiwgLTAuNCwgMCwgMCxcbiAgICAgICAgLTAuNCwgLTAuNSwgMywgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIHRoZSBkZWZhdWx0IG9uZVxuICpcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBmYWxzZSk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hdHJpeCBvZiB0aGUgY29sb3IgbWF0cml4IGZpbHRlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvck1hdHJpeEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCBbMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMF1cbiAgICAgKi9cbiAgICBtYXRyaXg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgbG93ZXJzIHRoZSBjb2xvciBkZXB0aCBvZiB5b3VyIGltYWdlIGJ5IHRoZSBnaXZlbiBhbW91bnQsIHByb2R1Y2luZyBhbiBpbWFnZSB3aXRoIGEgc21hbGxlciBwYWxldHRlLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvclN0ZXBGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc3RlcDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBjb2xvciA9IGZsb29yKGNvbG9yICogc3RlcCkgLyBzdGVwO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdGVwOiB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvclN0ZXBGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yU3RlcEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2Ygc3RlcHMgdG8gcmVkdWNlIHRoZSBwYWxldHRlIGJ5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29sb3JTdGVwRmlsdGVyI1xuICAgICAqL1xuICAgIHN0ZXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb252b2x1dGlvbkZpbHRlciBjbGFzcyBhcHBsaWVzIGEgbWF0cml4IGNvbnZvbHV0aW9uIGZpbHRlciBlZmZlY3QuXG4gKiBBIGNvbnZvbHV0aW9uIGNvbWJpbmVzIHBpeGVscyBpbiB0aGUgaW5wdXQgaW1hZ2Ugd2l0aCBuZWlnaGJvcmluZyBwaXhlbHMgdG8gcHJvZHVjZSBhIG5ldyBpbWFnZS5cbiAqIEEgd2lkZSB2YXJpZXR5IG9mIGltYWdlIGVmZmVjdHMgY2FuIGJlIGFjaGlldmVkIHRocm91Z2ggY29udm9sdXRpb25zLCBpbmNsdWRpbmcgYmx1cnJpbmcsIGVkZ2VcbiAqIGRldGVjdGlvbiwgc2hhcnBlbmluZywgZW1ib3NzaW5nLCBhbmQgYmV2ZWxpbmcuIFRoZSBtYXRyaXggc2hvdWxkIGJlIHNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBTZWUgaHR0cDovL2RvY3MuZ2ltcC5vcmcvZW4vcGx1Zy1pbi1jb252bWF0cml4Lmh0bWwgZm9yIG1vcmUgaW5mby5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSBBbiBhcnJheSBvZiB2YWx1ZXMgdXNlZCBmb3IgbWF0cml4IHRyYW5zZm9ybWF0aW9uLiBTcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFdpZHRoIG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqL1xuZnVuY3Rpb24gQ29udm9sdXRpb25GaWx0ZXIobWF0cml4LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgbWVkaXVtcCB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTtcXG51bmlmb3JtIGZsb2F0IG1hdHJpeFs5XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjNCBjMTEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgLSB0ZXhlbFNpemUpOyAvLyB0b3AgbGVmdFxcbiAgIHZlYzQgYzEyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55IC0gdGV4ZWxTaXplLnkpKTsgLy8gdG9wIGNlbnRlclxcbiAgIHZlYzQgYzEzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgcmlnaHRcXG5cXG4gICB2ZWM0IGMyMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCBsZWZ0XFxuICAgdmVjNCBjMjIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpOyAvLyBtaWQgY2VudGVyXFxuICAgdmVjNCBjMjMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSkpOyAvLyBtaWQgcmlnaHRcXG5cXG4gICB2ZWM0IGMzMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGxlZnRcXG4gICB2ZWM0IGMzMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLngsIHZUZXh0dXJlQ29vcmQueSArIHRleGVsU2l6ZS55KSk7IC8vIGJvdHRvbSBjZW50ZXJcXG4gICB2ZWM0IGMzMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIHRleGVsU2l6ZSk7IC8vIGJvdHRvbSByaWdodFxcblxcbiAgIGdsX0ZyYWdDb2xvciA9XFxuICAgICAgIGMxMSAqIG1hdHJpeFswXSArIGMxMiAqIG1hdHJpeFsxXSArIGMxMyAqIG1hdHJpeFsyXSArXFxuICAgICAgIGMyMSAqIG1hdHJpeFszXSArIGMyMiAqIG1hdHJpeFs0XSArIGMyMyAqIG1hdHJpeFs1XSArXFxuICAgICAgIGMzMSAqIG1hdHJpeFs2XSArIGMzMiAqIG1hdHJpeFs3XSArIGMzMyAqIG1hdHJpeFs4XTtcXG5cXG4gICBnbF9GcmFnQ29sb3IuYSA9IGMyMi5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hdHJpeDogICAgIHsgdHlwZTogJzFmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCkgfSxcbiAgICAgICAgICAgIHRleGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSAvIHdpZHRoLCB5OiAxIC8gaGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb252b2x1dGlvbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29udm9sdXRpb25GaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hdHJpeC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMS90aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueCA9IDEvdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS55ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQSBDcm9zcyBIYXRjaCBlZmZlY3QgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDcm9zc0hhdGNoRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGZsb2F0IGx1bSA9IGxlbmd0aCh0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQueHkpLnJnYik7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wLCAxLjAsIDEuMCwgMS4wKTtcXG5cXG4gICAgaWYgKGx1bSA8IDEuMDApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC43NSlcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjUwKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54ICsgZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuMylcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55IC0gNS4wLCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblwiXG4gICAgKTtcbn1cblxuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNyb3NzSGF0Y2hGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBEaXNwbGFjZW1lbnRGaWx0ZXIgY2xhc3MgdXNlcyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20gdGhlIHNwZWNpZmllZCB0ZXh0dXJlIChjYWxsZWQgdGhlIGRpc3BsYWNlbWVudCBtYXApIHRvIHBlcmZvcm0gYSBkaXNwbGFjZW1lbnQgb2YgYW4gb2JqZWN0LlxuICogWW91IGNhbiB1c2UgdGhpcyBmaWx0ZXIgdG8gYXBwbHkgYWxsIG1hbm9yIG9mIGNyYXp5IHdhcnBpbmcgZWZmZWN0c1xuICogQ3VycmVudGx5IHRoZSByIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB4IGFuZCB0aGUgZyBwcm9wZXJ0eSBvZiB0aGUgdGV4dHVyZSBpcyB1c2VkIHRvIG9mZnNldCB0aGUgeS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiAobWFrZSBzdXJlIGl0cyBhZGRlZCB0byB0aGUgc2NlbmUhKVxuICovXG5mdW5jdGlvbiBEaXNwbGFjZW1lbnRGaWx0ZXIoc3ByaXRlLCBzY2FsZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuICAgIHNwcml0ZS5yZW5kZXJhYmxlID0gZmFsc2U7XG5cbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2TWFwQ29vcmQgPSAoIG90aGVyTWF0cml4ICogdmVjMyggYVRleHR1cmVDb29yZCwgMS4wKSAgKS54eTtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMiBzY2FsZTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXBTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IG1hcCA9ICB0ZXh0dXJlMkQobWFwU2FtcGxlciwgdk1hcENvb3JkKTtcXG5cXG4gICBtYXAgLT0gMC41O1xcbiAgIG1hcC54eSAqPSBzY2FsZTtcXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgbWFwLngsIHZUZXh0dXJlQ29vcmQueSArIG1hcC55KSk7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtYXBTYW1wbGVyOiAgICAgeyB0eXBlOiAnc2FtcGxlcjJEJywgdmFsdWU6IHNwcml0ZS50ZXh0dXJlIH0sXG4gICAgICAgICAgICBvdGhlck1hdHJpeDogICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBtYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSkgfSxcbiAgICAgICAgICAgIHNjYWxlOiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG5cbiAgICBpZiAoc2NhbGUgPT09IG51bGwgfHwgc2NhbGUgPT09IHVuZGVmaW5lZClcbiAgICB7XG4gICAgICAgIHNjYWxlID0gMjA7XG4gICAgfVxuXG4gICAgdGhpcy5zY2FsZSA9IG5ldyBjb3JlLlBvaW50KHNjYWxlLCBzY2FsZSk7XG59XG5cbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGFjZW1lbnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERpc3BsYWNlbWVudEZpbHRlcjtcblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICBmaWx0ZXJNYW5hZ2VyLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeChpbnB1dC5mcmFtZSwgdGhpcy5tYXNrU3ByaXRlLCB0aGlzLm1hc2tNYXRyaXgpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5vdGhlck1hdHJpeC52YWx1ZSA9IHRoaXMubWFza01hdHJpeC50b0FycmF5KHRydWUpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueCA9IHRoaXMuc2NhbGUueCAqICgxL2lucHV0LmZyYW1lLndpZHRoKTtcbiAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlLnkgPSB0aGlzLnNjYWxlLnkgKiAoMS9pbnB1dC5mcmFtZS5oZWlnaHQpO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRGlzcGxhY2VtZW50RmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvZnVuL2RvdHNjcmVlbi5qc1xuICovXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIGRvdHNjcmVlbiBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgdG8gYmUgbWFkZSBvdXQgb2ZcbiAqIGJsYWNrIGFuZCB3aGl0ZSBoYWxmdG9uZSBkb3RzIGxpa2UgYW4gb2xkIHByaW50ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIERvdFNjcmVlbkZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XFxuXFxuZmxvYXQgcGF0dGVybigpXFxue1xcbiAgIGZsb2F0IHMgPSBzaW4oYW5nbGUpLCBjID0gY29zKGFuZ2xlKTtcXG4gICB2ZWMyIHRleCA9IHZUZXh0dXJlQ29vcmQgKiBkaW1lbnNpb25zLnh5O1xcbiAgIHZlYzIgcG9pbnQgPSB2ZWMyKFxcbiAgICAgICBjICogdGV4LnggLSBzICogdGV4LnksXFxuICAgICAgIHMgKiB0ZXgueCArIGMgKiB0ZXgueVxcbiAgICkgKiBzY2FsZTtcXG4gICByZXR1cm4gKHNpbihwb2ludC54KSAqIHNpbihwb2ludC55KSkgKiA0LjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGZsb2F0IGF2ZXJhZ2UgPSAoY29sb3IuciArIGNvbG9yLmcgKyBjb2xvci5iKSAvIDMuMDtcXG4gICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzMoYXZlcmFnZSAqIDEwLjAgLSA1LjAgKyBwYXR0ZXJuKCkpLCBjb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzY2FsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEb3RTY3JlZW5GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERvdFNjcmVlbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBzY2FsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSByYWRpdXMgb2YgdGhlIGVmZmVjdC5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Eb3RTY3JlZW5GaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllUaW50RmlsdGVyIGFwcGxpZXMgYSB2ZXJ0aWNhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1cllUaW50RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24rb2Zmc2V0KSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMyBjb2xvcjtcXG51bmlmb3JtIGZsb2F0IGFscGhhO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBzdW0gPSB2ZWM0KDAuMCk7XFxuXFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KCBjb2xvci5yZ2IgKiBzdW0uYSAqIGFscGhhLCBzdW0uYSAqIGFscGhhICk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgLyA1MTIgfSxcbiAgICAgICAgICAgIGNvbG9yOiB7IHR5cGU6ICdjJywgdmFsdWU6IFswLDAsMF19LFxuICAgICAgICAgICAgYWxwaGE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNyB9LFxuICAgICAgICAgICAgb2Zmc2V0OiB7IHR5cGU6ICcyZicsIHZhbHVlOls1LCA1XX0sXG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZToxfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJZVGludEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllUaW50RmlsdGVyO1xuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCBjbGVhcik7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJZVGludEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllUaW50RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZVGludEZpbHRlciA9IHJlcXVpcmUoJy4vQmx1cllUaW50RmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIERyb3BTaGFkb3dGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRHJvcFNoYWRvd0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyID0gbmV3IEJsdXJZVGludEZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIHRoaXMucGFkZGluZyA9IDMwO1xuXG4gICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgdGhpcy5fYW5nbGUgPSA0NSAqIE1hdGguUEkgLyAxODA7XG4gICAgdGhpcy5fZGlzdGFuY2UgPSAxMDtcbiAgICB0aGlzLmFscGhhID0gMC43NTtcbiAgICB0aGlzLmhpZGVPYmplY3QgPSBmYWxzZTtcbiAgICB0aGlzLmJsZW5kTW9kZSA9IGNvcmUuQkxFTkRfTU9ERVMuTVVMVElQTFk7XG59XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERyb3BTaGFkb3dGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERyb3BTaGFkb3dGaWx0ZXI7XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICBpZih0aGlzLl9kaXJ0eVBvc2l0aW9uKVxuICAgIHtcbiAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVswXSA9IE1hdGguc2luKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5vZmZzZXQudmFsdWVbMV0gPSBNYXRoLmNvcyh0aGlzLl9hbmdsZSkgKiB0aGlzLl9kaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKHRoaXMuYmxlbmRNb2RlKTtcblxuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZighdGhpcy5oaWRlT2JqZWN0KVxuICAgIHtcblxuICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuICAgIH1cblxuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNvbG9yIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgY29sb3I6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIGNvcmUudXRpbHMucmdiMmhleCggdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmNvbG9yLnZhbHVlID0gY29yZS51dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbHBoYSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFscGhhOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzdGFuY2Ugb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBkaXN0YW5jZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3RhbmNlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYW5nbGUgb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fYW5nbGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2FuZ2xlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZ3JleXNjYWxlcyB0aGUgcGFsZXR0ZSBvZiB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gR3JheUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGdyYXk7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peChnbF9GcmFnQ29sb3IucmdiLCB2ZWMzKDAuMjEyNipnbF9GcmFnQ29sb3IuciArIDAuNzE1MipnbF9GcmFnQ29sb3IuZyArIDAuMDcyMipnbF9GcmFnQ29sb3IuYiksIGdyYXkpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBncmF5OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkdyYXlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5HcmF5RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEdyYXlGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmF5LiAxIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGJsYWNrIGFuZCB3aGl0ZSwgMCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuR3JheUZpbHRlciNcbiAgICAgKi9cbiAgICBncmF5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBmaWx0ZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5maWx0ZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEFzY2lpRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9hc2NpaS9Bc2NpaUZpbHRlcicpLFxuICAgIEJsb29tRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibG9vbS9CbG9vbUZpbHRlcicpLFxuICAgIEJsdXJGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJGaWx0ZXInKSxcbiAgICBCbHVyWEZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJZRmlsdGVyJyksXG4gICAgQmx1ckRpckZpbHRlcjogICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckRpckZpbHRlcicpLFxuICAgIENvbG9yTWF0cml4RmlsdGVyOiAgcmVxdWlyZSgnLi9jb2xvci9Db2xvck1hdHJpeEZpbHRlcicpLFxuICAgIENvbG9yU3RlcEZpbHRlcjogICAgcmVxdWlyZSgnLi9jb2xvci9Db2xvclN0ZXBGaWx0ZXInKSxcbiAgICBDb252b2x1dGlvbkZpbHRlcjogIHJlcXVpcmUoJy4vY29udm9sdXRpb24vQ29udm9sdXRpb25GaWx0ZXInKSxcbiAgICBDcm9zc0hhdGNoRmlsdGVyOiAgIHJlcXVpcmUoJy4vY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyJyksXG4gICAgRGlzcGxhY2VtZW50RmlsdGVyOiByZXF1aXJlKCcuL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXInKSxcbiAgICBEb3RTY3JlZW5GaWx0ZXI6ICAgIHJlcXVpcmUoJy4vZG90L0RvdFNjcmVlbkZpbHRlcicpLFxuICAgIEdyYXlGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ncmF5L0dyYXlGaWx0ZXInKSxcbiAgICBEcm9wU2hhZG93RmlsdGVyOiAgIHJlcXVpcmUoJy4vZHJvcHNoYWRvdy9Ecm9wU2hhZG93RmlsdGVyJyksXG4gICAgSW52ZXJ0RmlsdGVyOiAgICAgICByZXF1aXJlKCcuL2ludmVydC9JbnZlcnRGaWx0ZXInKSxcbiAgICBOb2lzZUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vbm9pc2UvTm9pc2VGaWx0ZXInKSxcbiAgICBQaXhlbGF0ZUZpbHRlcjogICAgIHJlcXVpcmUoJy4vcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXInKSxcbiAgICBSR0JTcGxpdEZpbHRlcjogICAgIHJlcXVpcmUoJy4vcmdiL1JHQlNwbGl0RmlsdGVyJyksXG4gICAgU2hvY2t3YXZlRmlsdGVyOiAgICByZXF1aXJlKCcuL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXInKSxcbiAgICBTZXBpYUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vc2VwaWEvU2VwaWFGaWx0ZXInKSxcbiAgICBTbWFydEJsdXJGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vYmx1ci9TbWFydEJsdXJGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFhGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlcicpLFxuICAgIFR3aXN0RmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi90d2lzdC9Ud2lzdEZpbHRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBpbnZlcnRzIHlvdXIgRGlzcGxheSBPYmplY3RzIGNvbG9ycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gSW52ZXJ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIGZsb2F0IGludmVydDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoICh2ZWMzKDEpLWdsX0ZyYWdDb2xvci5yZ2IpICogZ2xfRnJhZ0NvbG9yLmEsIGdsX0ZyYWdDb2xvci5yZ2IsIDEuMCAtIGludmVydCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgaW52ZXJ0OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkludmVydEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkludmVydEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnZlcnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludmVydEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgaW52ZXJ0LiBgMWAgd2lsbCBmdWxseSBpbnZlcnQgdGhlIGNvbG9ycywgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5JbnZlcnRGaWx0ZXIjXG4gICAgICovXG4gICAgaW52ZXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuaW52ZXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYWRqdXN0L25vaXNlLmpzXG4gKi9cblxuLyoqXG4gKiBBIE5vaXNlIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIE5vaXNlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IG5vaXNlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IHJhbmQodmVjMiBjbylcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGNvLnh5LCB2ZWMyKDEyLjk4OTgsIDc4LjIzMykpKSAqIDQzNzU4LjU0NTMpO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGZsb2F0IGRpZmYgPSAocmFuZCh2VGV4dHVyZUNvb3JkKSAtIDAuNSkgKiBub2lzZTtcXG5cXG4gICAgY29sb3IuciArPSBkaWZmO1xcbiAgICBjb2xvci5nICs9IGRpZmY7XFxuICAgIGNvbG9yLmIgKz0gZGlmZjtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbm9pc2U6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Ob2lzZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbk5vaXNlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE5vaXNlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBOb2lzZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTm9pc2VGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGFtb3VudCBvZiBub2lzZSB0byBhcHBseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLk5vaXNlRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDAuNVxuICAgICAqL1xuICAgIG5vaXNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm5vaXNlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSBwaXhlbGF0ZSBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgJ2Jsb2NreScuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFBpeGVsYXRlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZlYzIgc2l6ZSA9IGRpbWVuc2lvbnMueHkgLyBwaXhlbFNpemU7XFxuXFxuICAgIHZlYzIgY29sb3IgPSBmbG9vciggKCB2VGV4dHVyZUNvb3JkICogc2l6ZSApICkgLyBzaXplICsgcGl4ZWxTaXplL2RpbWVuc2lvbnMueHkgKiAwLjU7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgY29sb3IpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsICB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICd2MicsICAgdmFsdWU6IHsgeDogMTAsIHk6IDEwIH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQaXhlbGF0ZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gUGl4ZWxhdGVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgYSBwb2ludCB0aGF0IGRlc2NyaWJlcyB0aGUgc2l6ZSBvZiB0aGUgYmxvY2tzLlxuICAgICAqIHggaXMgdGhlIHdpZHRoIG9mIHRoZSBibG9jayBhbmQgeSBpcyB0aGUgaGVpZ2h0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlBpeGVsYXRlRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBbiBSR0IgU3BsaXQgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBSR0JTcGxpdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSB2ZWMyIHJlZDtcXG51bmlmb3JtIHZlYzIgZ3JlZW47XFxudW5pZm9ybSB2ZWMyIGJsdWU7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvci5yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgcmVkL2RpbWVuc2lvbnMueHkpLnI7XFxuICAgZ2xfRnJhZ0NvbG9yLmcgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBncmVlbi9kaW1lbnNpb25zLnh5KS5nO1xcbiAgIGdsX0ZyYWdDb2xvci5iID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgYmx1ZS9kaW1lbnNpb25zLnh5KS5iO1xcbiAgIGdsX0ZyYWdDb2xvci5hID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKS5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZDogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGdyZWVuOiAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogLTIwLCB5OiAyMCB9IH0sXG4gICAgICAgICAgICBibHVlOiAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDIwLCB5OiAtMjAgfSB9LFxuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLCAwLCAwLCAwXSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5SR0JTcGxpdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJHQlNwbGl0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBSR0JTcGxpdEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogUmVkIGNoYW5uZWwgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIHJlZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJlZC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR3JlZW4gY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JlZW46IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JlZW4udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBCbHVlIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGFwcGxpZXMgYSBzZXBpYSBlZmZlY3QgdG8geW91ciBEaXNwbGF5IE9iamVjdHMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNlcGlhRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHNlcGlhO1xcblxcbmNvbnN0IG1hdDMgc2VwaWFNYXRyaXggPSBtYXQzKDAuMzU4OCwgMC43MDQ0LCAwLjEzNjgsIDAuMjk5MCwgMC41ODcwLCAwLjExNDAsIDAuMjM5MiwgMC40Njk2LCAwLjA5MTIpO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGdsX0ZyYWdDb2xvci5yZ2IgKiBzZXBpYU1hdHJpeCwgc2VwaWEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNlcGlhOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNlcGlhRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU2VwaWFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2VwaWFGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNlcGlhRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTZXBpYUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIHNlcGlhLiBgMWAgd2lsbCBhcHBseSB0aGUgZnVsbCBzZXBpYSBlZmZlY3QsIGFuZFxuICAgICAqIGAwYCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2VwaWFGaWx0ZXIjXG4gICAgICovXG4gICAgc2VwaWE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc2VwaWEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbG9yTWF0cml4RmlsdGVyIGNsYXNzIGxldHMgeW91IGFwcGx5IGEgNHg0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgUkdCQVxuICogY29sb3IgYW5kIGFscGhhIHZhbHVlcyBvZiBldmVyeSBwaXhlbCBvbiB5b3VyIGRpc3BsYXlPYmplY3QgdG8gcHJvZHVjZSBhIHJlc3VsdFxuICogd2l0aCBhIG5ldyBzZXQgb2YgUkdCQSBjb2xvciBhbmQgYWxwaGEgdmFsdWVzLiBJdCdzIHByZXR0eSBwb3dlcmZ1bCFcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2hvY2t3YXZlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIHZlYzIgY2VudGVyO1xcbnVuaWZvcm0gdmVjMyBwYXJhbXM7IC8vIDEwLjAsIDAuOCwgMC4xXFxudW5pZm9ybSBmbG9hdCB0aW1lO1xcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gdlRleHR1cmVDb29yZDtcXG4gICAgdmVjMiB0ZXhDb29yZCA9IHV2O1xcblxcbiAgICBmbG9hdCBkaXN0ID0gZGlzdGFuY2UodXYsIGNlbnRlcik7XFxuXFxuICAgIGlmICggKGRpc3QgPD0gKHRpbWUgKyBwYXJhbXMueikpICYmIChkaXN0ID49ICh0aW1lIC0gcGFyYW1zLnopKSApXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IGRpZmYgPSAoZGlzdCAtIHRpbWUpO1xcbiAgICAgICAgZmxvYXQgcG93RGlmZiA9IDEuMCAtIHBvdyhhYnMoZGlmZipwYXJhbXMueCksIHBhcmFtcy55KTtcXG5cXG4gICAgICAgIGZsb2F0IGRpZmZUaW1lID0gZGlmZiAgKiBwb3dEaWZmO1xcbiAgICAgICAgdmVjMiBkaWZmVVYgPSBub3JtYWxpemUodXYgLSBjZW50ZXIpO1xcbiAgICAgICAgdGV4Q29vcmQgPSB1diArIChkaWZmVVYgKiBkaWZmVGltZSk7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB0ZXhDb29yZCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgY2VudGVyOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfSxcbiAgICAgICAgICAgIHBhcmFtczogeyB0eXBlOiAndjMnLCB2YWx1ZTogeyB4OiAxMCwgeTogMC44LCB6OiAwLjEgfSB9LFxuICAgICAgICAgICAgdGltZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hvY2t3YXZlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaG9ja3dhdmVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjZW50ZXIgb2YgdGhlIHNob2Nrd2F2ZSBpbiBub3JtYWxpemVkIHNjcmVlbiBjb29yZHMuIFRoYXQgaXNcbiAgICAgKiAoMCwwKSBpcyB0aGUgdG9wLWxlZnQgYW5kICgxLDEpIGlzIHRoZSBib3R0b20gcmlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBudW1iZXI+fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIGNlbnRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmNlbnRlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBhcmFtcyBvZiB0aGUgc2hvY2t3YXZlLiBUaGVzZSBtb2RpZnkgdGhlIGxvb2sgYW5kIGJlaGF2aW9yIG9mXG4gICAgICogdGhlIHNob2Nrd2F2ZSBhcyBpdCByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgcGFyYW1zOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGFyYW1zLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZWxhcHNlZCB0aW1lIG9mIHRoZSBzaG9ja3dhdmUuIFRoaXMgY29udHJvbHMgdGhlIHNwZWVkIGF0IHdoaWNoXG4gICAgICogdGhlIHNob2Nrd2F2ZSByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICB0aW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0QXhpc0ZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0QXhpc0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBibHVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JhZGllbnRCbHVyO1xcbnVuaWZvcm0gdmVjMiBzdGFydDtcXG51bmlmb3JtIHZlYzIgZW5kO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG51bmlmb3JtIHZlYzIgdGV4U2l6ZTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG4gICAgdmVjMiBub3JtYWwgPSBub3JtYWxpemUodmVjMihzdGFydC55IC0gZW5kLnksIGVuZC54IC0gc3RhcnQueCkpO1xcbiAgICBmbG9hdCByYWRpdXMgPSBzbW9vdGhzdGVwKDAuMCwgMS4wLCBhYnMoZG90KHZUZXh0dXJlQ29vcmQgKiB0ZXhTaXplIC0gc3RhcnQsIG5vcm1hbCkpIC8gZ3JhZGllbnRCbHVyKSAqIGJsdXI7XFxuXFxuICAgIGZvciAoZmxvYXQgdCA9IC0zMC4wOyB0IDw9IDMwLjA7IHQrKylcXG4gICAge1xcbiAgICAgICAgZmxvYXQgcGVyY2VudCA9ICh0ICsgb2Zmc2V0IC0gMC41KSAvIDMwLjA7XFxuICAgICAgICBmbG9hdCB3ZWlnaHQgPSAxLjAgLSBhYnMocGVyY2VudCk7XFxuICAgICAgICB2ZWM0IHNhbXBsZSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGRlbHRhIC8gdGV4U2l6ZSAqIHBlcmNlbnQgKiByYWRpdXMpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBibHVyOiAgICAgICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMTAwIH0sXG4gICAgICAgICAgICBncmFkaWVudEJsdXI6ICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNjAwIH0sXG4gICAgICAgICAgICBzdGFydDogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLCAgICB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIH0gfSxcbiAgICAgICAgICAgIGVuZDogICAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDYwMCwgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZGVsdGE6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMzAsICAgeTogMzAgfSB9LFxuICAgICAgICAgICAgdGV4U2l6ZTogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogd2luZG93LmlubmVyV2lkdGgsIHk6IHdpbmRvdy5pbm5lckhlaWdodCB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG59XG5cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiB0aGUgWCBhbmQgWSBmaWx0ZXJzLCBkb2VzIG5vdGhpbmcgZm9yIHRoaXMgY2xhc3MuXG4gKlxuICovXG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gMDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSAwO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmFkaWVudEJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIHN0YXJ0IHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgZW5kOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdFlGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0IEZpbHRlci4gTWFuYWdlcyB0aGUgcGFzcyBvZiBib3RoIGEgVGlsdFNoaWZ0WEZpbHRlciBhbmQgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIgPSBuZXcgVGlsdFNoaWZ0WEZpbHRlcigpO1xuICAgIHRoaXMudGlsdFNoaWZ0WUZpbHRlciA9IG5ldyBUaWx0U2hpZnRZRmlsdGVyKCk7XG59XG5cblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEZpbHRlcjtcblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JhZGllbnQgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ncmFkaWVudEJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZ3JhZGllbnRCbHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFkgdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuc3RhcnQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBlbmQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5lbmQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZW5kID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBUaWx0U2hpZnRBeGlzRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRBeGlzRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdFhGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRpbHRTaGlmdEF4aXNGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0WEZpbHRlcigpXG57XG4gICAgVGlsdFNoaWZ0QXhpc0ZpbHRlci5jYWxsKHRoaXMpO1xufVxuXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRYRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRYRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKlxuICovXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGR4ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueCAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueDtcbiAgICB2YXIgZHkgPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS55IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS55O1xuICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IGR4IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeSAvIGQ7XG59O1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRZRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gLWR5IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeCAvIGQ7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHR3aXN0IGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0d2lzdGVkIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFR3aXN0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHJhZGl1cztcXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzIgY29vcmQgPSB2VGV4dHVyZUNvb3JkIC0gb2Zmc2V0O1xcbiAgIGZsb2F0IGRpc3QgPSBsZW5ndGgoY29vcmQpO1xcblxcbiAgIGlmIChkaXN0IDwgcmFkaXVzKVxcbiAgIHtcXG4gICAgICAgZmxvYXQgcmF0aW8gPSAocmFkaXVzIC0gZGlzdCkgLyByYWRpdXM7XFxuICAgICAgIGZsb2F0IGFuZ2xlTW9kID0gcmF0aW8gKiByYXRpbyAqIGFuZ2xlO1xcbiAgICAgICBmbG9hdCBzID0gc2luKGFuZ2xlTW9kKTtcXG4gICAgICAgZmxvYXQgYyA9IGNvcyhhbmdsZU1vZCk7XFxuICAgICAgIGNvb3JkID0gdmVjMihjb29yZC54ICogYyAtIGNvb3JkLnkgKiBzLCBjb29yZC54ICogcyArIGNvb3JkLnkgKiBjKTtcXG4gICB9XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCtvZmZzZXQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhZGl1czogICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9LFxuICAgICAgICAgICAgYW5nbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9LFxuICAgICAgICAgICAgb2Zmc2V0OiAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjUsIHk6IDAuNSB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblR3aXN0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVHdpc3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHdpc3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFR3aXN0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUd2lzdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IGRlc2NyaWJlcyB0aGUgdGhlIG9mZnNldCBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgb2Zmc2V0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHJhZGl1cyBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICByYWRpdXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5yYWRpdXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgYW5nbGUgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiLy8gcnVuIHRoZSBwb2x5ZmlsbHNcbnJlcXVpcmUoJy4vcG9seWZpbGwnKTtcblxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29yZScpO1xuXG4vLyBhZGQgY29yZSBwbHVnaW5zLlxuY29yZS5leHRyYXMgICAgICAgICA9IHJlcXVpcmUoJy4vZXh0cmFzJyk7XG5jb3JlLmZpbHRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5jb3JlLmludGVyYWN0aW9uICAgID0gcmVxdWlyZSgnLi9pbnRlcmFjdGlvbicpO1xuY29yZS5sb2FkZXJzICAgICAgICA9IHJlcXVpcmUoJy4vbG9hZGVycycpO1xuY29yZS5tZXNoICAgICAgICAgICA9IHJlcXVpcmUoJy4vbWVzaCcpO1xuY29yZS5hY2Nlc3NpYmlsaXR5ICA9IHJlcXVpcmUoJy4vYWNjZXNzaWJpbGl0eScpO1xuXG4vLyBleHBvcnQgYSBwcmVtYWRlIGxvYWRlciBpbnN0YW5jZVxuLyoqXG4gKiBBIHByZW1hZGUgaW5zdGFuY2Ugb2YgdGhlIGxvYWRlciB0aGF0IGNhbiBiZSB1c2VkIHRvIGxvYWRlciByZXNvdXJjZXMuXG4gKlxuICogQG5hbWUgbG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHByb3BlcnR5IHtQSVhJLmxvYWRlcnMuTG9hZGVyfVxuICovXG5jb3JlLmxvYWRlciA9IG5ldyBjb3JlLmxvYWRlcnMuTG9hZGVyKCk7XG5cbi8vIG1peGluIHRoZSBkZXByZWNhdGlvbiBmZWF0dXJlcy5cbk9iamVjdC5hc3NpZ24oY29yZSwgcmVxdWlyZSgnLi9kZXByZWNhdGlvbicpKTtcblxuLy8gQWx3YXlzIGV4cG9ydCBwaXhpIGdsb2JhbGx5LlxuZ2xvYmFsLlBJWEkgPSBjb3JlO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogSG9sZHMgYWxsIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gYW4gSW50ZXJhY3Rpb24gZXZlbnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uRGF0YSgpXG57XG4gICAgLyoqXG4gICAgICogVGhpcyBwb2ludCBzdG9yZXMgdGhlIGdsb2JhbCBjb29yZHMgb2Ygd2hlcmUgdGhlIHRvdWNoL21vdXNlIGV2ZW50IGhhcHBlbmVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuZ2xvYmFsID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgU3ByaXRlIHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TcHJpdGV9XG4gICAgICovXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBwYXNzZWQgdG8gYW4gZXZlbnQgaGFuZGxlciwgdGhpcyB3aWxsIGJlIHRoZSBvcmlnaW5hbCBET00gRXZlbnQgdGhhdCB3YXMgY2FwdHVyZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0V2ZW50fVxuICAgICAqL1xuICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IG51bGw7XG59XG5cbkludGVyYWN0aW9uRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbkRhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uRGF0YTtcblxuLyoqXG4gKiBUaGlzIHdpbGwgcmV0dXJuIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgc3BlY2lmaWVkIGRpc3BsYXlPYmplY3QgZm9yIHRoaXMgSW50ZXJhY3Rpb25EYXRhXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgbG9jYWwgY29vcmRzIG9mZlxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBwb2ludClcbiAqIEBwYXJhbSBbZ2xvYmFsUG9zXSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgY29udGFpbmluZyB5b3VyIGN1c3RvbSBnbG9iYWwgY29vcmRzLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgdXNlIHRoZSBjdXJyZW50IGdsb2JhbCBjb29yZHMpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBJbnRlcmFjdGlvbkRhdGEgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIERpc3BsYXlPYmplY3RcbiAqL1xuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5nZXRMb2NhbFBvc2l0aW9uID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHBvaW50LCBnbG9iYWxQb3MpXG57XG4gICAgcmV0dXJuIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKGdsb2JhbFBvcyB8fCB0aGlzLmdsb2JhbCwgcG9pbnQpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIEludGVyYWN0aW9uRGF0YSA9IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25EYXRhJyk7XG5cbi8vIE1peCBpbnRlcmFjdGl2ZVRhcmdldCBpbnRvIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGVcbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbik7XG5cbi8qKlxuICogVGhlIGludGVyYWN0aW9uIG1hbmFnZXIgZGVhbHMgd2l0aCBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzLiBBbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgaW50ZXJhY3RpdmVcbiAqIGlmIGl0cyBpbnRlcmFjdGl2ZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIHRydWVcbiAqIFRoaXMgbWFuYWdlciBhbHNvIHN1cHBvcnRzIG11bHRpdG91Y2guXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH1cbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQ9dHJ1ZV0ge2Jvb2xlYW59IFNob3VsZCB0aGUgbWFuYWdlciBhdXRvbWF0aWNhbGx5IHByZXZlbnQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMuXG4gKiBAcGFyYW0gW29wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3k9MTBdIHtudW1iZXJ9IEZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQuXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uTWFuYWdlcihyZW5kZXJlciwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGludGVyYWN0aW9uIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMgYXV0b21hdGljYWxseSBiZSBwcmV2ZW50ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdCA9IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdCA6IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBcyB0aGlzIGZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQgbW9yZSBvZnRlbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgPSBvcHRpb25zLmludGVyYWN0aW9uRnJlcXVlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vdXNlIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhfVxuICAgICAqL1xuICAgIHRoaXMubW91c2UgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCBkYXRhIG9iamVjdCB0byBoYW5kbGUgYWxsIHRoZSBldmVudCB0cmFja2luZy9kaXNwYXRjaGluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnREYXRhID0ge1xuICAgICAgICBzdG9wcGVkOiBmYWxzZSxcbiAgICAgICAgdGFyZ2V0OiBudWxsLFxuICAgICAgICB0eXBlOiBudWxsLFxuICAgICAgICBkYXRhOiB0aGlzLm1vdXNlLFxuICAgICAgICBzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGlueSBsaXR0bGUgaW50ZXJhY3RpdmVEYXRhIHBvb2wgIVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGFbXX1cbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBET00gZWxlbWVudCB0byBiaW5kIHRvLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTEVsZW1lbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIYXZlIGV2ZW50cyBiZWVuIGF0dGFjaGVkIHRvIHRoZSBkb20gZWxlbWVudD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gZmFsc2U7XG5cbiAgICAvL3RoaXMgd2lsbCBtYWtlIGl0IHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gY2FsbCBiaW5kIGFsbCB0aGUgdGltZVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlVXAgPSB0aGlzLm9uTW91c2VVcC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlVXAgPSB0aGlzLnByb2Nlc3NNb3VzZVVwLmJpbmQoIHRoaXMgKTtcblxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IHRoaXMub25Nb3VzZURvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZURvd24gPSB0aGlzLnByb2Nlc3NNb3VzZURvd24uYmluZCggdGhpcyApO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IHRoaXMub25Nb3VzZU1vdmUuYmluZCggdGhpcyApO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IHRoaXMucHJvY2Vzc01vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VPdXQgPSB0aGlzLm9uTW91c2VPdXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IHRoaXMub25Ub3VjaFN0YXJ0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaEVuZCA9IHRoaXMub25Ub3VjaEVuZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gdGhpcy5wcm9jZXNzVG91Y2hFbmQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaE1vdmUgPSB0aGlzLm9uVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sYXN0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjc3Mgc3R5bGUgb2YgdGhlIGN1cnNvciB0aGF0IGlzIGJlaW5nIHVzZWRcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSAnaW5oZXJpdCc7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjYWNoZWQgdmFyXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCByZXNvbHV0aW9uXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IDE7XG5cbiAgICB0aGlzLnNldFRhcmdldEVsZW1lbnQodGhpcy5yZW5kZXJlci52aWV3LCB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24pO1xufVxuXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJhY3Rpb25NYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5cbi8qKlxuICogU2V0cyB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlL3RvdWNoIGV2ZW50cy4gVGhpcyBpcyB1c2VmdWwgZm9yIHdoZW4geW91IGhhdmVcbiAqIG90aGVyIERPTSBlbGVtZW50cyBvbiB0b3Agb2YgdGhlIHJlbmRlcmVycyBDYW52YXMgZWxlbWVudC4gV2l0aCB0aGlzIHlvdSdsbCBiZSBiYWxlIHRvIGRlbGV0ZWdhdGVcbiAqIGFub3RoZXIgRE9NIGVsZW1lbnQgdG8gcmVjZWl2ZSB0aG9zZSBldmVudHMuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQge0hUTUxFbGVtZW50fSB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVEhlIHJlc29sdXRpb24gb2YgdGhlIG5ldyBlbGVtZW50IChyZWxhdGl2ZSB0byB0aGUgY2FudmFzKS5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuc2V0VGFyZ2V0RWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCByZXNvbHV0aW9uKVxue1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICB0aGlzLmFkZEV2ZW50cygpO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYWxsIHRoZSBET00gZXZlbnRzXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5hZGRFdmVudHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29yZS50aWNrZXIuc2hhcmVkLmFkZCh0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy1jb250ZW50LXpvb21pbmcnXSA9ICdub25lJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICdub25lJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgICAgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgICAgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgICAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCAgIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICAgICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsICAgIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIHRoZSBET00gZXZlbnRzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHJlZ2lzdGVyZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJyc7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAgdGhpcy5vblRvdWNoRW5kLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlLCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgIHRoaXMub25Nb3VzZVVwLCB0cnVlKTtcblxuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc3RhdGUgb2YgaW50ZXJhY3RpdmUgb2JqZWN0cy5cbiAqIEludm9rZWQgYnkgYSB0aHJvdHRsZWQgdGlja2VyIHVwZGF0ZSBmcm9tXG4gKiB7QGxpbmsgUElYSS50aWNrZXIuc2hhcmVkfS5cbiAqXG4gKiBAcGFyYW0gZGVsdGFUaW1lIHtudW1iZXJ9XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB0aGlzLl9kZWx0YVRpbWUgKz0gZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2RlbHRhVGltZSA8IHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGVsdGFUaW1lID0gMDtcblxuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHVzZXIgbW92ZSB0aGUgbW91c2UgdGhpcyBjaGVjayBoYXMgYWxyZWFkeSBiZWVuIGRmb25lIHVzaW5nIHRoZSBtb3VzZSBtb3ZlIVxuICAgIGlmKHRoaXMuZGlkTW92ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlkTW92ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE9cbn07XG5cbi8qKlxuICogRGlzcGF0Y2hlcyBhbiBldmVudCBvbiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIGRpc3BsYXkgb2JqZWN0IGluIHF1ZXN0aW9uXG4gKiBAcGFyYW0gZXZlbnRTdHJpbmcge3N0cmluZ30gdGhlIG5hbWUgb2YgdGhlIGV2ZW50IChlLmcsIG1vdXNlZG93bilcbiAqIEBwYXJhbSBldmVudERhdGEge29iamVjdH0gdGhlIGV2ZW50IGRhdGEgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGV2ZW50U3RyaW5nLCBldmVudERhdGEgKVxue1xuICAgIGlmKCFldmVudERhdGEuc3RvcHBlZClcbiAgICB7XG4gICAgICAgIGV2ZW50RGF0YS50YXJnZXQgPSBkaXNwbGF5T2JqZWN0O1xuICAgICAgICBldmVudERhdGEudHlwZSA9IGV2ZW50U3RyaW5nO1xuXG4gICAgICAgIGRpc3BsYXlPYmplY3QuZW1pdCggZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0W2V2ZW50U3RyaW5nXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddKCBldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogTWFwcyB4IGFuZCB5IGNvb3JkcyBmcm9tIGEgRE9NIG9iamVjdCBhbmQgbWFwcyB0aGVtIGNvcnJlY3RseSB0byB0aGUgcGl4aSB2aWV3LiBUaGUgcmVzdWx0aW5nIHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUgcG9pbnQuXG4gKiBUaGlzIHRha2VzIGludG8gYWNjb3VudCB0aGUgZmFjdCB0aGF0IHRoZSBET00gZWxlbWVudCBjb3VsZCBiZSBzY2FsZWQgYW5kIHBvc2l0aW9uZWQgYW55d2hlcmUgb24gdGhlIHNjcmVlbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCB0aGUgcmVzdWx0IHdpbGwgYmUgc3RvcmVkIGluXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHggICAgIHRoZSB4IGNvb3JkIG9mIHRoZSBwb3NpdGlvbiB0byBtYXBcbiAqIEBwYXJhbSAge251bWJlcn0geSAgICAgdGhlIHkgY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm1hcFBvc2l0aW9uVG9Qb2ludCA9IGZ1bmN0aW9uICggcG9pbnQsIHgsIHkgKVxue1xuICAgIHZhciByZWN0ID0gdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcG9pbnQueCA9ICggKCB4IC0gcmVjdC5sZWZ0ICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQud2lkdGggIC8gcmVjdC53aWR0aCAgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHBvaW50LnkgPSAoICggeSAtIHJlY3QudG9wICApICogKHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmhlaWdodCAvIHJlY3QuaGVpZ2h0ICkgKSAvIHRoaXMucmVzb2x1dGlvbjtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlcyBhIG5lYXQgd2F5IG9mIGNyYXdsaW5nIHRocm91Z2ggdGhlIHNjZW5lIGdyYXBoIGFuZCBydW5uaW5nIGEgc3BlY2lmaWVkIGZ1bmN0aW9uIG9uIGFsbCBpbnRlcmFjdGl2ZSBvYmplY3RzIGl0IGZpbmRzLlxuICogSXQgd2lsbCBhbHNvIHRha2UgY2FyZSBvZiBoaXQgdGVzdGluZyB0aGUgaW50ZXJhY3RpdmUgb2JqZWN0cyBhbmQgcGFzc2VzIHRoZSBoaXQgYWNyb3NzIGluIHRoZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCBpcyB0ZXN0ZWQgZm9yIGNvbGxpc2lvblxuICogQHBhcmFtICB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBkaXNwbGF5T2JqZWN0IHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgd2lsbCBiZSBoaXQgdGVzdCAocmVjdXJjc2l2bHkgY3Jhd2xzIGl0cyBjaGlsZHJlbilcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmdW5jIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggaW50ZXJhY3RpdmUgb2JqZWN0LiBUaGUgZGlzcGxheU9iamVjdCBhbmQgaGl0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvblxuICogQHBhcmFtICB7Ym9vbGVhbn0gaGl0VGVzdCB0aGlzIGluZGljYXRlcyBpZiB0aGUgb2JqZWN0cyBpbnNpZGUgc2hvdWxkIGJlIGhpdCB0ZXN0IGFnYWluc3QgdGhlIHBvaW50XG4gKiBAcmV0dXJuIHtib29sZWFufSByZXR1cm5zIHRydWUgaWYgdGhlIGRpc3BsYXlPYmplY3QgaGl0IHRoZSBwb2ludFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NJbnRlcmFjdGl2ZSA9IGZ1bmN0aW9uIChwb2ludCwgZGlzcGxheU9iamVjdCwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmUpXG57XG4gICAgaWYoIWRpc3BsYXlPYmplY3QgfHwgIWRpc3BsYXlPYmplY3QudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUb29rIGEgbGl0dGxlIHdoaWxlIHRvIHJld29yayB0aGlzIGZ1bmN0aW9uIGNvcnJlY3RseSEgQnV0IG5vdyBpdCBpcyBkb25lIGFuZCBuaWNlIGFuZCBvcHRpbWlzZWQuIF5fXlxuICAgIC8vIFxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBub3cgbG9vcCB0aHJvdWdoIGFsbCBvYmplY3RzIGFuZCB0aGVuIG9ubHkgaGl0IHRlc3QgdGhlIG9iamVjdHMgaXQgSEFTIHRvLCBub3QgYWxsIG9mIHRoZW0uIE1VQ0ggZmFzdGVyLi5cbiAgICAvLyBBbiBvYmplY3Qgd2lsbCBiZSBoaXQgdGVzdCBpZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gICAgLy8gXG4gICAgLy8gMTogSXQgaXMgaW50ZXJhY3RpdmUuXG4gICAgLy8gMjogSXQgYmVsb25ncyB0byBhIHBhcmVudCB0aGF0IGlzIGludGVyYWN0aXZlIEFORCBvbmUgb2YgdGhlIHBhcmVudHMgY2hpbGRyZW4gaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICAvLyBcbiAgICAvLyBBcyBhbm90aGVyIGxpdHRsZSBvcHRpbWlzYXRpb24gb25jZSBhbiBpbnRlcmFjdGl2ZSBvYmplY3QgaGFzIGJlZW4gaGl0IHdlIGNhbiBjYXJyeSBvbiB0aHJvdWdoIHRoZSBzY2VuZWdyYXBoLCBidXQgd2Uga25vdyB0aGF0IHRoZXJlIHdpbGwgYmUgbm8gbW9yZSBoaXRzISBTbyB3ZSBjYW4gYXZvaWQgZXh0cmEgaGl0IHRlc3RzXG4gICAgLy8gQSBmaW5hbCBvcHRpbWlzYXRpb24gaXMgdGhhdCBhbiBvYmplY3QgaXMgbm90IGhpdCB0ZXN0IGRpcmVjdGx5IGlmIGEgY2hpbGQgaGFzIGFscmVhZHkgYmVlbiBoaXQuXG4gICAgXG4gICAgdmFyIGhpdCA9IGZhbHNlLFxuICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGludGVyYWN0aXZlID0gZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSB8fCBpbnRlcmFjdGl2ZTtcblxuICAgIC8vIGlmIHRoZSBkaXNwbGF5b2JqZWN0IGhhcyBhIGhpdEFyZWEsIHRoZW4gaXQgZG9lcyBub3QgbmVlZCB0byBoaXRUZXN0IGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaGl0QXJlYSlcbiAgICB7XG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gKiogRlJFRSBUSVAgKiohIElmIGFuIG9iamVjdCBpcyBub3QgaW50ZXJhY3R0aXZlIG9yIGhhcyBubyBidXR0b25zIGluIGl0IChzdWNoIGFzIGEgZ2FtZSBzY2VuZSEpIHNldCBpbnRlcmFjdGl2ZUNoaWxkcmVuIHRvIGZhbHNlIGZvciB0aGF0IGRpc3BsYXlPYmplY3QuXG4gICAgLy8gVGhpcyB3aWxsIGFsbG93IHBpeGkgdG8gY29tcGxldGx5IGlnbm9yZSBhbmQgYnlwYXNzIGNoZWNraW5nIHRoZSBkaXNwbGF5T2JqZWN0cyBjaGlsZHJlbi5cbiAgICBpZihkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlQ2hpbGRyZW4pXG4gICAgeyAgICAgICBcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICAgICAgXG4gICAgICAgIGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRpbWUgdG8gZ2V0IHJlY3Vyc2l2ZS4uIGlmIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gaWYgc29tdGhpbmcgaXMgaGl0Li5cbiAgICAgICAgICAgIGlmKCB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZShwb2ludCwgY2hpbGRyZW5baV0sIGZ1bmMsIGhpdFRlc3QsIGludGVyYWN0aXZlUGFyZW50KSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIHdlIG5vIGxvbmdlciBuZWVkIHRvIGhpdCB0ZXN0IGFueSBtb3JlIG9iamVjdHMgaW4gdGhpcyBjb250YWluZXIgYXMgd2Ugd2Ugbm93IGtub3cgdGhlIHBhcmVudCBoYXMgYmVlbiBoaXRcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBpcyBpbnRlcmFjdGl2ZSAsIHRoYXQgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhpdCB3YXMgYWN0dWFsbHkgaW50ZXJhY3RpdmUgYW5kIG5vdCBqdXN0IHRoZSBjaGlsZCBvZiBhbiBpbnRlcmFjdGl2ZSBvYmplY3QuIFxuICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55dGhpbmcgZWxzZS4gV2Ugc3RpbGwgbmVlZCB0byBydW4gdGhyb3VnaCBhbGwgb2JqZWN0cywgYnV0IHdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhbnkgaGl0IHRlc3RzLlxuICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuW2ldLmludGVyYWN0aXZlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGl0VGVzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIG5vIHBvaW50IHJ1bm5pbmcgdGhpcyBpZiB0aGUgaXRlbSBpcyBub3QgaW50ZXJhY3RpdmUgb3IgZG9lcyBub3QgaGF2ZSBhbiBpbnRlcmFjdGl2ZSBwYXJlbnQuXG4gICAgaWYoaW50ZXJhY3RpdmUpXG4gICAge1xuICAgICAgICAvLyBpZiB3ZSBhcmUgaGl0IHRlc3RpbmcgKGFzIGluIHdlIGhhdmUgbm8gaGl0IGFueSBvYmplY3RzIHlldClcbiAgICAgICAgLy8gV2UgYWxzbyBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGhpdCB0ZXN0aW5nIGlmIG9uY2Ugb2YgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuIGhhcyBhbHJlYWR5IGJlZW4gaGl0IVxuICAgICAgICBpZihoaXRUZXN0ICYmICFoaXQpXG4gICAgICAgIHsgIFxuICAgICAgICAgICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGhpcy5fdGVtcFBvaW50KTtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmhpdEFyZWEuY29udGFpbnMoIHRoaXMuX3RlbXBQb2ludC54LCB0aGlzLl90ZW1wUG9pbnQueSApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZihkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gZGlzcGxheU9iamVjdC5jb250YWluc1BvaW50KHBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmMoZGlzcGxheU9iamVjdCwgaGl0KTsgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGl0O1xuICBcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgZG93biBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcHJlc3NlZCBkb3duXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VEb3duLCB0cnVlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBkb3duIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlRG93biA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB2YXIgZSA9IHRoaXMubW91c2Uub3JpZ2luYWxFdmVudDtcbiAgICBcbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG5cbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nIF0gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRkb3duJyA6ICdtb3VzZWRvd24nLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcmVsZWFzZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYnV0dG9uIGJlaW5nIHJlbGVhc2VkXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VVcCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlVXAsIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIHVwIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZVVwID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuXG4gICAgdmFyIGlzUmlnaHRCdXR0b24gPSBlLmJ1dHRvbiA9PT0gMiB8fCBlLndoaWNoID09PSAzO1xuICAgIHZhciBpc0Rvd24gPSAgaXNSaWdodEJ1dHRvbiA/ICdfaXNSaWdodERvd24nIDogJ19pc0xlZnREb3duJztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodHVwJyA6ICdtb3VzZXVwJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0Y2xpY2snIDogJ2NsaWNrJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXBvdXRzaWRlJyA6ICdtb3VzZXVwb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgdGhlIG1vdXNlIG1vdmluZ1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5kaWRNb3ZlID0gdHJ1ZTtcblxuICAgIHRoaXMuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VNb3ZlLCB0cnVlICk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgIT09IHRoaXMuY3Vyc29yKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gdGhpcy5jdXJzb3I7XG4gICAgfVxuXG4gICAgLy9UT0RPIEJVRyBmb3IgcGFyZW50cyBpbmVyYWN0aXZlIG9iamVjdCAoYm9yZGVyIG9yZGVyIGlzc3VlKVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlbW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQoZGlzcGxheU9iamVjdCwgaGl0KTtcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgaXMgbW92ZWQgb3V0IG9mIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJlaW5nIG1vdmVkIG91dFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlT3V0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgLy8gVE9ETyBvcHRpbWl6ZSBieSBub3QgY2hlY2sgRVZFUlkgVElNRSEgbWF5YmUgaGFsZiBhcyBvZnRlbj8gLy9cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkgKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIGZhbHNlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBvdmVyL291dCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VPdmVyT3V0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGlmKCFkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3ZlcicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlzcGxheU9iamVjdC5idXR0b25Nb2RlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnNvciA9IGRpc3BsYXlPYmplY3QuZGVmYXVsdEN1cnNvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZihkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIHRoaXMuZXZlbnREYXRhKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIHN0YXJ0ZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggc3RhcnRpbmcgb24gdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaFN0YXJ0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuICAgICAgICAvL1RPRE8gUE9PTFxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0LCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hTdGFydCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaHN0YXJ0JywgdGhpcy5ldmVudERhdGEgKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBlbmRzIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIGVuZGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICAvL1RPRE8gdGhpcyBzaG91bGQgYmUgcGFzc2VkIGFsb25nLi4gbm8gc2V0XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoRW5kLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIGVuZCBvZiBhIHRvdWNoIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaEVuZCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZCcsIHRoaXMuZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndGFwJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZG91dHNpZGUnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIG1vdmVkIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBtb3ZpbmcgYWNyb3NzIHRoZSByZW5kZXJlciB2aWV3XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIGEgdG91Y2ggbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGhpdCA9IGhpdDtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaG1vdmUnLCB0aGlzLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hFdmVudCB7RXZlbnREYXRhfSBUaGUgdG91Y2ggZXZlbnQgd2UgbmVlZCB0byBwYWlyIHdpdGggYW4gaW50ZXJhY3Rpb25EYXRhIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZ2V0VG91Y2hEYXRhID0gZnVuY3Rpb24gKHRvdWNoRXZlbnQpXG57XG4gICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wb3AoKTtcblxuICAgIGlmKCF0b3VjaERhdGEpXG4gICAge1xuICAgICAgICB0b3VjaERhdGEgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG4gICAgfVxuXG4gICAgdG91Y2hEYXRhLmlkZW50aWZpZXIgPSB0b3VjaEV2ZW50LmlkZW50aWZpZXI7XG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRvdWNoRGF0YS5nbG9iYWwsIHRvdWNoRXZlbnQuY2xpZW50WCwgdG91Y2hFdmVudC5jbGllbnRZICk7XG5cbiAgICBpZihuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YS5nbG9iYWwueCA9IHRvdWNoRGF0YS5nbG9iYWwueCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC55ID0gdG91Y2hEYXRhLmdsb2JhbC55IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIH1cblxuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWCA9IHRvdWNoRGF0YS5nbG9iYWwueDtcbiAgICB0b3VjaEV2ZW50Lmdsb2JhbFkgPSB0b3VjaERhdGEuZ2xvYmFsLnk7XG5cbiAgICByZXR1cm4gdG91Y2hEYXRhO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IHRvIHRoZSBpbnRlcm5hbCBwb29sXG4gKlxuICogQHBhcmFtIHRvdWNoRGF0YSB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9IFRoZSB0b3VjaCBkYXRhIG9iamVjdCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmV0dXJuVG91Y2hEYXRhID0gZnVuY3Rpb24gKCB0b3VjaERhdGEgKVxue1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wdXNoKCB0b3VjaERhdGEgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGludGVyYWN0aW9uIG1hbmFnZXJcbiAqXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLm1vdXNlID0gbnVsbDtcblxuICAgIHRoaXMuZXZlbnREYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IG51bGw7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VVcCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Nb3VzZURvd24gPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUgPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlT3V0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBudWxsO1xuXG5cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IG51bGw7XG5cbiAgICB0aGlzLm9uVG91Y2hFbmQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaE1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZW1wUG9pbnQgPSBudWxsO1xufTtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBpbnRlcmFjdGlvbnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEludGVyYWN0aW9uRGF0YTogICAgcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKSxcbiAgICBJbnRlcmFjdGlvbk1hbmFnZXI6IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25NYW5hZ2VyJyksXG4gICAgaW50ZXJhY3RpdmVUYXJnZXQ6ICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbn07XG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGludGVyYWN0aXZlIG9iamVjdHNcbiAqIHVzZWQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5pbnRlcmFjdGlvbi5pbnRlcmFjdGl2ZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgaW50ZXJhY3RpdmVUYXJnZXQgPSB7XG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBidXR0b25Nb2RlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlQ2hpbGRyZW46IHRydWUsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBkZWZhdWx0Q3Vyc29yOiAncG9pbnRlcicsXG5cbiAgICAvLyBzb21lIGludGVybmFsIGNoZWNrcy4uXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX292ZXI6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdG91Y2hEb3duOiBmYWxzZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnRlcmFjdGl2ZVRhcmdldDtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi4vZXh0cmFzJyksXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxuXG5mdW5jdGlvbiBwYXJzZShyZXNvdXJjZSwgdGV4dHVyZSkge1xuICAgIHZhciBkYXRhID0ge307XG4gICAgdmFyIGluZm8gPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF07XG4gICAgdmFyIGNvbW1vbiA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NvbW1vbicpWzBdO1xuXG4gICAgZGF0YS5mb250ID0gaW5mby5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKTtcbiAgICBkYXRhLnNpemUgPSBwYXJzZUludChpbmZvLmdldEF0dHJpYnV0ZSgnc2l6ZScpLCAxMCk7XG4gICAgZGF0YS5saW5lSGVpZ2h0ID0gcGFyc2VJbnQoY29tbW9uLmdldEF0dHJpYnV0ZSgnbGluZUhlaWdodCcpLCAxMCk7XG4gICAgZGF0YS5jaGFycyA9IHt9O1xuXG4gICAgLy9wYXJzZSBsZXR0ZXJzXG4gICAgdmFyIGxldHRlcnMgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjaGFyJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxldHRlcnMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaWQnKSwgMTApO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlUmVjdCA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4JyksIDEwKSArIHRleHR1cmUuZnJhbWUueCxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd5JyksIDEwKSArIHRleHR1cmUuZnJhbWUueSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd3aWR0aCcpLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaGVpZ2h0JyksIDEwKVxuICAgICAgICApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbY2hhckNvZGVdID0ge1xuICAgICAgICAgICAgeE9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeU9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3lvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeEFkdmFuY2U6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4YWR2YW5jZScpLCAxMCksXG4gICAgICAgICAgICBrZXJuaW5nOiB7fSxcbiAgICAgICAgICAgIHRleHR1cmU6IG5ldyBjb3JlLlRleHR1cmUodGV4dHVyZS5iYXNlVGV4dHVyZSwgdGV4dHVyZVJlY3QpXG5cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvL3BhcnNlIGtlcm5pbmdzXG4gICAgdmFyIGtlcm5pbmdzID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgna2VybmluZycpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBrZXJuaW5ncy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBmaXJzdCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnZmlyc3QnKSwgMTApO1xuICAgICAgICB2YXIgc2Vjb25kID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdzZWNvbmQnKSwgMTApO1xuICAgICAgICB2YXIgYW1vdW50ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdhbW91bnQnKSwgMTApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbc2Vjb25kXS5rZXJuaW5nW2ZpcnN0XSA9IGFtb3VudDtcbiAgICB9XG5cbiAgICByZXNvdXJjZS5iaXRtYXBGb250ID0gZGF0YTtcblxuICAgIC8vIEknbSBsZWF2aW5nIHRoaXMgYXMgYSB0ZW1wb3JhcnkgZml4IHNvIHdlIGNhbiB0ZXN0IHRoZSBiaXRtYXAgZm9udHMgaW4gdjNcbiAgICAvLyBidXQgaXQncyB2ZXJ5IGxpa2VseSB0byBjaGFuZ2VcbiAgICBleHRyYXMuQml0bWFwVGV4dC5mb250c1tkYXRhLmZvbnRdID0gZGF0YTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSBvciBub3QgeG1sIGRhdGFcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhIHx8ICFyZXNvdXJjZS5pc1htbClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNraXAgaWYgbm90IGJpdG1hcCBmb250IGRhdGEsIHVzaW5nIHNvbWUgc2lsbHkgZHVjay10eXBpbmdcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGFnZScpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdLmdldEF0dHJpYnV0ZSgnZmFjZScpID09PSBudWxsXG4gICAgICAgICAgICApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeG1sVXJsID0gcGF0aC5kaXJuYW1lKHJlc291cmNlLnVybCk7XG5cbiAgICAgICAgaWYgKHhtbFVybCA9PT0gJy4nKSB7XG4gICAgICAgICAgICB4bWxVcmwgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJhc2VVcmwgJiYgeG1sVXJsKSB7XG4gICAgICAgICAgICAvLyBpZiBiYXNldXJsIGhhcyBhIHRyYWlsaW5nIHNsYXNoIHRoZW4gYWRkIG9uZSB0byB4bWxVcmwgc28gdGhlIHJlcGxhY2Ugd29ya3MgYmVsb3dcbiAgICAgICAgICAgIGlmICh0aGlzLmJhc2VVcmwuY2hhckF0KHRoaXMuYmFzZVVybC5sZW5ndGggLSAxKSA9PT0gJy8nKSB7XG4gICAgICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcmVtb3ZlIGJhc2VVcmwgZnJvbSB4bWxVcmxcbiAgICAgICAgICAgIHhtbFVybCA9IHhtbFVybC5yZXBsYWNlKHRoaXMuYmFzZVVybCwgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4geG1sVXJsIG5vdywgaXQgbmVlZHMgYSB0cmFpbGluZyBzbGFzaC4gRW5zdXJlIHRoYXQgaXQgZG9lcyBpZiB0aGUgc3RyaW5nIGlzbid0IGVtcHR5LlxuICAgICAgICBpZiAoeG1sVXJsICYmIHhtbFVybC5jaGFyQXQoeG1sVXJsLmxlbmd0aCAtIDEpICE9PSAnLycpIHtcbiAgICAgICAgICAgIHhtbFVybCArPSAnLyc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRleHR1cmVVcmwgPSB4bWxVcmwgKyByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJylbMF0uZ2V0QXR0cmlidXRlKCdmaWxlJyk7XG4gICAgICAgIGlmIChjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSkge1xuICAgICAgICAgICAgLy9yZXVzZSBleGlzdGluZyB0ZXh0dXJlXG4gICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbdGV4dHVyZVVybF0pO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGxvYWRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiByZXNvdXJjZS5tZXRhZGF0YS5pbWFnZU1ldGFkYXRhXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gbG9hZCB0aGUgdGV4dHVyZSBmb3IgdGhlIGZvbnRcbiAgICAgICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgdGV4dHVyZVVybCwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgcmVzLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBsb2FkZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5sb2FkZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIExvYWRlcjogICAgICAgICAgICAgcmVxdWlyZSgnLi9sb2FkZXInKSxcblxuICAgIC8vIHBhcnNlcnNcbiAgICBiaXRtYXBGb250UGFyc2VyOiAgIHJlcXVpcmUoJy4vYml0bWFwRm9udFBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyOiAgcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIHRleHR1cmVQYXJzZXI6ICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlUGFyc2VyJyksXG4gICAgUmVzb3VyY2U6ICAgICAgICAgICByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZVxufTtcbiIsInZhciBSZXNvdXJjZUxvYWRlciA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLFxuICAgIHRleHR1cmVQYXJzZXIgPSByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBzcHJpdGVzaGVldFBhcnNlciA9IHJlcXVpcmUoJy4vc3ByaXRlc2hlZXRQYXJzZXInKSxcbiAgICBiaXRtYXBGb250UGFyc2VyID0gcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyk7XG5cbi8qKlxuICpcbiAqIFRoZSBuZXcgbG9hZGVyLCBleHRlbmRzIFJlc291cmNlIExvYWRlciBieSBDaGFkIEVuZ2xlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9lbmdsZXJjai9yZXNvdXJjZS1sb2FkZXJcbiAqXG4gKiBgYGBqc1xuICogdmFyIGxvYWRlciA9IFBJWEkubG9hZGVyOyAvLyBwaXhpIGV4cG9zZXMgYSBwcmVtYWRlIGluc3RhbmNlIGZvciB5b3UgdG8gdXNlLlxuICogLy9vclxuICogdmFyIGxvYWRlciA9IG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyKCk7IC8vIHlvdSBjYW4gYWxzbyBjcmVhdGUgeW91ciBvd24gaWYgeW91IHdhbnRcbiAqXG4gKiBsb2FkZXIuYWRkKCdidW5ueScsXCJkYXRhL2J1bm55LnBuZ1wiKTtcbiAqXG4gKiBsb2FkZXIub25jZSgnY29tcGxldGUnLG9uQXNzZXRzTG9hZGVkKTtcbiAqXG4gKiBsb2FkZXIubG9hZCgpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlJlc291cmNlTG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5sb2FkZXJzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KVxue1xuICAgIFJlc291cmNlTG9hZGVyLmNhbGwodGhpcywgYmFzZVVybCwgY29uY3VycmVuY3kpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMudXNlKExvYWRlci5fcGl4aU1pZGRsZXdhcmVbaV0oKSk7XG4gICAgfVxufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZXNvdXJjZUxvYWRlci5wcm90b3R5cGUpO1xuTG9hZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbkxvYWRlci5fcGl4aU1pZGRsZXdhcmUgPSBbXG4gICAgLy8gcGFyc2UgYW55IGJsb2IgaW50byBtb3JlIHVzYWJsZSBvYmplY3RzIChlLmcuIEltYWdlKVxuICAgIFJlc291cmNlTG9hZGVyLm1pZGRsZXdhcmUucGFyc2luZy5ibG9iLFxuICAgIC8vIHBhcnNlIGFueSBJbWFnZSBvYmplY3RzIGludG8gdGV4dHVyZXNcbiAgICB0ZXh0dXJlUGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBzcHJpdGVzaGVldFBhcnNlcixcbiAgICAvLyBwYXJzZSBhbnkgc3ByaXRlc2hlZXQgZGF0YSBpbnRvIG11bHRpcGxlIHRleHR1cmVzXG4gICAgYml0bWFwRm9udFBhcnNlclxuXTtcblxuTG9hZGVyLmFkZFBpeGlNaWRkbGV3YXJlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgTG9hZGVyLl9waXhpTWlkZGxld2FyZS5wdXNoKGZuKTtcbn07XG5cbi8vIEFkZCBjdXN0b20gZXh0ZW50aW9uc1xudmFyIFJlc291cmNlID0gUmVzb3VyY2VMb2FkZXIuUmVzb3VyY2U7XG5cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUoJ2ZudCcsIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIHBhdGggPSByZXF1aXJlKCdwYXRoJyksXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBza2lwIGlmIG5vIGRhdGEsIGl0cyBub3QganNvbiwgb3IgaXQgaXNuJ3Qgc3ByaXRlc2hlZXQgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzSnNvbiB8fCAhcmVzb3VyY2UuZGF0YS5mcmFtZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzb3VyY2UuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcm91dGUgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJykpO1xuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwoIHJlc291cmNlLnVybCApO1xuXG4gICAgICAgIC8vIGxvYWQgdGhlIGltYWdlIGZvciB0aGlzIHNoZWV0XG4gICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgcm91dGUgKyAnLycgKyByZXNvdXJjZS5kYXRhLm1ldGEuaW1hZ2UsIGxvYWRPcHRpb25zLCBmdW5jdGlvbiAocmVzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlcyA9IHt9O1xuXG4gICAgICAgICAgICB2YXIgZnJhbWVzID0gcmVzb3VyY2UuZGF0YS5mcmFtZXM7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gZnJhbWVzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gZnJhbWVzW2ldLmZyYW1lO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlY3QpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0cmltID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QuaCwgcmVjdC53KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QudywgcmVjdC5oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vICBDaGVjayB0byBzZWUgaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0udHJpbW1lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpbSA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS54IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS55IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS53IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS5oIC8gcmVzb2x1dGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBmbGlwIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IVxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gc2l6ZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggPSBzaXplLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0ID0gdGVtcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNpemUueCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLnkgLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLmhlaWdodCAvPSByZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzW2ldID0gbmV3IGNvcmUuVGV4dHVyZShyZXMudGV4dHVyZS5iYXNlVGV4dHVyZSwgc2l6ZSwgc2l6ZS5jbG9uZSgpLCB0cmltLCBmcmFtZXNbaV0ucm90YXRlZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0cyBhbHNvIGFkZCB0aGUgZnJhbWUgdG8gcGl4aSdzIGdsb2JhbCBjYWNoZSBmb3IgZnJvbUZyYW1lIGFuZCBmcm9tSW1hZ2UgZnVuY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW2ldID0gcmVzb3VyY2UudGV4dHVyZXNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH0pO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gY3JlYXRlIGEgbmV3IHRleHR1cmUgaWYgdGhlIGRhdGEgaXMgYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgIGlmIChyZXNvdXJjZS5kYXRhICYmIHJlc291cmNlLmlzSW1hZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBiYXNlVGV4dHVyZSA9IG5ldyBjb3JlLkJhc2VUZXh0dXJlKHJlc291cmNlLmRhdGEsIG51bGwsIGNvcmUudXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKHJlc291cmNlLnVybCkpO1xuICAgICAgICAgICAgYmFzZVRleHR1cmUuaW1hZ2VVcmwgPSByZXNvdXJjZS51cmw7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlID0gbmV3IGNvcmUuVGV4dHVyZShiYXNlVGV4dHVyZSk7XG4gICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdWNudGlvbnNcbiAgICAgICAgICAgIGNvcmUudXRpbHMuQmFzZVRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gYmFzZVRleHR1cmU7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gcmVzb3VyY2UudGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgdGVtcFBvbHlnb24gPSBuZXcgY29yZS5Qb2x5Z29uKCk7XG5cbi8qKlxuICogQmFzZSBtZXNoIGNsYXNzXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0byB1c2VcbiAqIEBwYXJhbSBbdmVydGljZXNdIHtGbG9hdDMyQXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHZlcnRpY2VzXG4gKiBAcGFyYW0gW3V2c10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdXZzXG4gKiBAcGFyYW0gW2luZGljZXNdIHtVaW50MTZBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgaW5kaWNlc1xuICogQHBhcmFtIFtkcmF3TW9kZV0ge251bWJlcn0gdGhlIGRyYXdNb2RlLCBjYW4gYmUgYW55IG9mIHRoZSBNZXNoLkRSQVdfTU9ERVMgY29uc3RzXG4gKi9cbmZ1bmN0aW9uIE1lc2godGV4dHVyZSwgdmVydGljZXMsIHV2cywgaW5kaWNlcywgZHJhd01vZGUpXG57XG4gICAgY29yZS5Db250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIG9mIHRoZSBNZXNoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBVdnMgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IHV2cyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxLCAwLFxuICAgICAgICAxLCAxLFxuICAgICAgICAwLCAxXSk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB2ZXJ0aWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSB2ZXJ0aWNlcyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxMDAsIDAsXG4gICAgICAgIDEwMCwgMTAwLFxuICAgICAgICAwLCAxMDBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgLy8gIFRPRE8gYXV0byBnZW5lcmF0ZSB0aGlzIGJhc2VkIG9uIGRyYXcgbW9kZSFcbiAgICB0aGlzLmluZGljZXMgPSBpbmRpY2VzIHx8IG5ldyBVaW50MTZBcnJheShbMCwgMSwgMywgMl0pO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgTWVzaCBpcyBkaXJ0eSBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzcHJpdGUuIFNldCB0byBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlbW92ZSBhbnkgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUcmlhbmdsZXMgaW4gY2FudmFzIG1vZGUgYXJlIGF1dG9tYXRpY2FsbHkgYW50aWFsaWFzZWQsIHVzZSB0aGlzIHZhbHVlIHRvIGZvcmNlIHRyaWFuZ2xlcyB0byBvdmVybGFwIGEgYml0IHdpdGggZWFjaCBvdGhlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdheSB0aGUgTWVzaCBzaG91bGQgYmUgZHJhd24sIGNhbiBiZSBhbnkgb2YgdGhlIHtAbGluayBQSVhJLm1lc2guTWVzaC5EUkFXX01PREVTfSBjb25zdHNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAc2VlIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmRyYXdNb2RlID0gZHJhd01vZGUgfHwgTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0g7XG5cbiAgICAvLyBydW4gdGV4dHVyZSBzZXR0ZXI7XG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcblxuICAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgbWVzaCBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1lc2gucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuTWVzaC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNZXNoLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLm1lc2guTWVzaCNcbiAgICAgKi9cbiAgICB0ZXh0dXJlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl90ZXh0dXJlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBXZWJHTCByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMubWVzaCk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5tZXNoLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEsIHRyYW5zZm9ybS5iLCB0cmFuc2Zvcm0uYywgdHJhbnNmb3JtLmQsIHRyYW5zZm9ybS50eCB8IDAsIHRyYW5zZm9ybS50eSB8IDApO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4LCB0cmFuc2Zvcm0udHkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc1RyaWFuZ2xlTWVzaChjb250ZXh0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzKGNvbnRleHQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiBUcmlhbmdsZSBNZXNoIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aCAvIDI7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGggLSAyOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4LCAoaW5kZXggKyAyKSwgKGluZGV4ICsgNCkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiB0cmlhbmdsZSBtb2RlIHVzaW5nIGNhbnZhc1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc1RyaWFuZ2xlcyA9IGZ1bmN0aW9uIChjb250ZXh0KVxue1xuICAgIC8vIGRyYXcgdHJpYW5nbGVzISFcbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcblxuICAgIHZhciBsZW5ndGggPSBpbmRpY2VzLmxlbmd0aDtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAzKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4MCA9IGluZGljZXNbaV0gKiAyLCBpbmRleDEgPSBpbmRpY2VzW2kgKyAxXSAqIDIsIGluZGV4MiA9IGluZGljZXNbaSArIDJdICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3Mgb25lIG9mIHRoZSB0cmlhbmdsZXMgdGhhdCBmb3JtIHRoaXMgTWVzaFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHBhcmFtIHZlcnRpY2VzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgTWVzaFxuICogQHBhcmFtIHV2cyB7RmxvYXQzMkFycmF5fSBhIHJlZmVyZW5jZSB0byB0aGUgdXZzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gaW5kZXgwIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgxIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgc2Vjb25kIHZlcnRleFxuICogQHBhcmFtIGluZGV4MiB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIHRoaXJkIHZlcnRleFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZSA9IGZ1bmN0aW9uIChjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleDAsIGluZGV4MSwgaW5kZXgyKVxue1xuICAgIHZhciB0ZXh0dXJlU291cmNlID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2U7XG4gICAgdmFyIHRleHR1cmVXaWR0aCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdmFyIHRleHR1cmVIZWlnaHQgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHZhciB4MCA9IHZlcnRpY2VzW2luZGV4MF0sIHgxID0gdmVydGljZXNbaW5kZXgxXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleDJdO1xuICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4MCArIDFdLCB5MSA9IHZlcnRpY2VzW2luZGV4MSArIDFdLCB5MiA9IHZlcnRpY2VzW2luZGV4MiArIDFdO1xuXG4gICAgdmFyIHUwID0gdXZzW2luZGV4MF0gKiB0ZXh0dXJlV2lkdGgsIHUxID0gdXZzW2luZGV4MV0gKiB0ZXh0dXJlV2lkdGgsIHUyID0gdXZzW2luZGV4Ml0gKiB0ZXh0dXJlV2lkdGg7XG4gICAgdmFyIHYwID0gdXZzW2luZGV4MCArIDFdICogdGV4dHVyZUhlaWdodCwgdjEgPSB1dnNbaW5kZXgxICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MiA9IHV2c1tpbmRleDIgKyAxXSAqIHRleHR1cmVIZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5jYW52YXNQYWRkaW5nID4gMClcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nWCA9IHRoaXMuY2FudmFzUGFkZGluZyAvIHRoaXMud29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIHBhZGRpbmdZID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgY2VudGVyWCA9ICh4MCArIHgxICsgeDIpIC8gMztcbiAgICAgICAgdmFyIGNlbnRlclkgPSAoeTAgKyB5MSArIHkyKSAvIDM7XG5cbiAgICAgICAgdmFyIG5vcm1YID0geDAgLSBjZW50ZXJYO1xuICAgICAgICB2YXIgbm9ybVkgPSB5MCAtIGNlbnRlclk7XG5cbiAgICAgICAgdmFyIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MCA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MCA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIC8vXG5cbiAgICAgICAgbm9ybVggPSB4MSAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTEgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MSA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MSA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIG5vcm1YID0geDIgLSBjZW50ZXJYO1xuICAgICAgICBub3JtWSA9IHkyIC0gY2VudGVyWTtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDIgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTIgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LnNhdmUoKTtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG5cbiAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcblxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICBjb250ZXh0LmNsaXAoKTtcblxuICAgIC8vIENvbXB1dGUgbWF0cml4IHRyYW5zZm9ybVxuICAgIHZhciBkZWx0YSA9ICAodTAgKiB2MSkgICAgICArICh2MCAqIHUyKSAgICAgICsgKHUxICogdjIpICAgICAgLSAodjEgKiB1MikgICAgICAtICh2MCAqIHUxKSAgICAgIC0gKHUwICogdjIpO1xuICAgIHZhciBkZWx0YUEgPSAoeDAgKiB2MSkgICAgICArICh2MCAqIHgyKSAgICAgICsgKHgxICogdjIpICAgICAgLSAodjEgKiB4MikgICAgICAtICh2MCAqIHgxKSAgICAgIC0gKHgwICogdjIpO1xuICAgIHZhciBkZWx0YUIgPSAodTAgKiB4MSkgICAgICArICh4MCAqIHUyKSAgICAgICsgKHUxICogeDIpICAgICAgLSAoeDEgKiB1MikgICAgICAtICh4MCAqIHUxKSAgICAgIC0gKHUwICogeDIpO1xuICAgIHZhciBkZWx0YUMgPSAodTAgKiB2MSAqIHgyKSArICh2MCAqIHgxICogdTIpICsgKHgwICogdTEgKiB2MikgLSAoeDAgKiB2MSAqIHUyKSAtICh2MCAqIHUxICogeDIpIC0gKHUwICogeDEgKiB2Mik7XG4gICAgdmFyIGRlbHRhRCA9ICh5MCAqIHYxKSAgICAgICsgKHYwICogeTIpICAgICAgKyAoeTEgKiB2MikgICAgICAtICh2MSAqIHkyKSAgICAgIC0gKHYwICogeTEpICAgICAgLSAoeTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhRSA9ICh1MCAqIHkxKSAgICAgICsgKHkwICogdTIpICAgICAgKyAodTEgKiB5MikgICAgICAtICh5MSAqIHUyKSAgICAgIC0gKHkwICogdTEpICAgICAgLSAodTAgKiB5Mik7XG4gICAgdmFyIGRlbHRhRiA9ICh1MCAqIHYxICogeTIpICsgKHYwICogeTEgKiB1MikgKyAoeTAgKiB1MSAqIHYyKSAtICh5MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB5MikgLSAodTAgKiB5MSAqIHYyKTtcblxuICAgIGNvbnRleHQudHJhbnNmb3JtKGRlbHRhQSAvIGRlbHRhLCBkZWx0YUQgLyBkZWx0YSxcbiAgICAgICAgZGVsdGFCIC8gZGVsdGEsIGRlbHRhRSAvIGRlbHRhLFxuICAgICAgICBkZWx0YUMgLyBkZWx0YSwgZGVsdGFGIC8gZGVsdGEpO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UodGV4dHVyZVNvdXJjZSwgMCwgMCk7XG4gICAgY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5cblxuLyoqXG4gKiBSZW5kZXJzIGEgZmxhdCBNZXNoXG4gKlxuICogQHBhcmFtIE1lc2gge1BJWEkubWVzaC5NZXNofSBUaGUgTWVzaCB0byByZW5kZXJcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLnJlbmRlck1lc2hGbGF0ID0gZnVuY3Rpb24gKE1lc2gpXG57XG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgdmFyIHZlcnRpY2VzID0gTWVzaC52ZXJ0aWNlcztcblxuICAgIHZhciBsZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGgvMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgIGZvciAodmFyIGk9MTsgaSA8IGxlbmd0aC0yOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpKjI7XG5cbiAgICAgICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXhdLCAgIHgxID0gdmVydGljZXNbaW5kZXgrMl0sIHgyID0gdmVydGljZXNbaW5kZXgrNF07XG4gICAgICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4KzFdLCB5MSA9IHZlcnRpY2VzW2luZGV4KzNdLCB5MiA9IHZlcnRpY2VzW2luZGV4KzVdO1xuXG4gICAgICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgyLCB5Mik7XG4gICAgfVxuXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnI0ZGMDAwMCc7XG4gICAgY29udGV4dC5maWxsKCk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbn07XG5cbi8qKlxuICogV2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLCB0aGlzIGV2ZW50IHdpbGwgZmlyZSB0byB1cGRhdGUgdGhlIHNjYWxlIGFuZCBmcmFtZVxuICpcbiAqIEBwYXJhbSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51cGRhdGVGcmFtZSA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgbWVzaCBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAoIXRoaXMuX2N1cnJlbnRCb3VuZHMpIHtcbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gbWF0cml4IHx8IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICAgICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSB2ZXJ0aWNlcy5sZW5ndGg7IGkgPCBuOyBpICs9IDIpIHtcbiAgICAgICAgICAgIHZhciByYXdYID0gdmVydGljZXNbaV0sIHJhd1kgPSB2ZXJ0aWNlc1tpICsgMV07XG4gICAgICAgICAgICB2YXIgeCA9IChhICogcmF3WCkgKyAoYyAqIHJhd1kpICsgdHg7XG4gICAgICAgICAgICB2YXIgeSA9IChkICogcmF3WSkgKyAoYiAqIHJhd1gpICsgdHk7XG5cbiAgICAgICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG5cbiAgICAgICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuICAgICAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWluWCA9PT0gLUluZmluaXR5IHx8IG1heFkgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBtZXNoLiBXb3JrcyBvbmx5IGZvciBUUklBTkdMRV9NRVNIXG4gKlxuICogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuICovXG5NZXNoLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50ICkge1xuICAgIGlmICghdGhpcy5nZXRCb3VuZHMoKS5jb250YWlucyhwb2ludC54LCBwb2ludC55KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHBvaW50cyA9IHRlbXBQb2x5Z29uLnBvaW50cztcbiAgICB2YXIgaSwgbGVuO1xuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVMpIHtcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgICAgIGxlbiA9IHRoaXMuaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgIC8vVE9ETzogaW5saW5lIHRoaXMuXG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTMpIHtcbiAgICAgICAgICAgIHZhciBpbmQwID0gaW5kaWNlc1tpXSoyLCBpbmQxID0gaW5kaWNlc1tpKzFdKjIsIGluZDIgPSBpbmRpY2VzW2krMl0qMjtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2luZDBdO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaW5kMCsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2luZDFdO1xuICAgICAgICAgICAgcG9pbnRzWzNdID0gdmVydGljZXNbaW5kMSsxXTtcbiAgICAgICAgICAgIHBvaW50c1s0XSA9IHZlcnRpY2VzW2luZDJdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaW5kMisxXTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBsZW4gPSB2ZXJ0aWNlcy5sZW5ndGg7XG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTYpIHtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2ldO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaSsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2krMl07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpKzNdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaSs0XTtcbiAgICAgICAgICAgIHBvaW50c1s1XSA9IHZlcnRpY2VzW2krNV07XG4gICAgICAgICAgICBpZiAodGVtcFBvbHlnb24uY29udGFpbnModGVtcFBvaW50LngsIHRlbXBQb2ludC55KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGlmZmVyZW50IGRyYXdpbmcgYnVmZmVyIG1vZGVzIHN1cHBvcnRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX01FU0hcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFU1xuICovXG5NZXNoLkRSQVdfTU9ERVMgPSB7XG4gICAgVFJJQU5HTEVfTUVTSDogMCxcbiAgICBUUklBTkdMRVM6IDFcbn07XG4iLCJ2YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xuXG4vKipcbiAqIFRoZSBQbGFuZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciBQbGFuZSA9IG5ldyBQSVhJLlBsYW5lKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIFBsYW5lLlxuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWCAtIFRoZSBudW1iZXIgb3ggeCBzZWdtZW50c1xuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWSAtIFRoZSBudW1iZXIgb2YgeSBzZWdtZW50c1xuICpcbiAqL1xuZnVuY3Rpb24gUGxhbmUodGV4dHVyZSwgc2VnbWVudHNYLCBzZWdtZW50c1kpXG57XG4gICAgTWVzaC5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tlciBmb3IgaWYgdGhlIFBsYW5lIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuc2VnbWVudHNYID0gIHNlZ21lbnRzWCB8fCAxMDtcbiAgICB0aGlzLnNlZ21lbnRzWSA9IHNlZ21lbnRzWSB8fCAxMDtcblxuICAgIHRoaXMuZHJhd01vZGUgPSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVTO1xuICAgIHRoaXMucmVmcmVzaCgpO1xuXG59XG5cblxuLy8gY29uc3RydWN0b3JcblBsYW5lLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIE1lc2gucHJvdG90eXBlICk7XG5QbGFuZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQbGFuZTtcbm1vZHVsZS5leHBvcnRzID0gUGxhbmU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5QbGFuZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgdG90YWwgPSB0aGlzLnNlZ21lbnRzWCAqIHRoaXMuc2VnbWVudHNZO1xuICAgIHZhciB2ZXJ0cyA9IFtdO1xuICAgIHZhciBjb2xvcnMgPSBbXTtcbiAgICB2YXIgdXZzID0gW107XG4gICAgdmFyIGluZGljZXMgPSBbXTtcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMudGV4dHVyZTtcblxuICAvLyAgdGV4dHVyZS53aWR0aCA9IDgwMCB0ZXh0dXJlLndpZHRoIHx8IDgwMDtcbiAvLyAgIHRleHR1cmUuaGVpZ2h0ID0gODAwLy90ZXh0dXJlLmhlaWdodCB8fCA4MDA7XG5cbiAgICB2YXIgc2VnbWVudHNYU3ViID0gdGhpcy5zZWdtZW50c1ggLSAxO1xuICAgIHZhciBzZWdtZW50c1lTdWIgPSB0aGlzLnNlZ21lbnRzWSAtIDE7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgdmFyIHNpemVYID0gdGV4dHVyZS53aWR0aCAvIHNlZ21lbnRzWFN1YjtcbiAgICB2YXIgc2l6ZVkgPSB0ZXh0dXJlLmhlaWdodCAvIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbDsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHggPSAoaSAlIHRoaXMuc2VnbWVudHNYKTtcbiAgICAgICAgdmFyIHkgPSAoIChpIC8gdGhpcy5zZWdtZW50c1ggKSB8IDAgKTtcblxuXG4gICAgICAgIHZlcnRzLnB1c2goKHggKiBzaXplWCksXG4gICAgICAgICAgICAgICAgICAgKHkgKiBzaXplWSkpO1xuXG4gICAgICAgIC8vIHRoaXMgd29ya3MgZm9yIHJlY3Rhbmd1bGFyIHRleHR1cmVzLiBcbiAgICAgICAgdXZzLnB1c2godGV4dHVyZS5fdXZzLngwICsgKHRleHR1cmUuX3V2cy54MSAtIHRleHR1cmUuX3V2cy54MCkgKiAoeCAvICh0aGlzLnNlZ21lbnRzWC0xKSksIHRleHR1cmUuX3V2cy55MCArICh0ZXh0dXJlLl91dnMueTMtdGV4dHVyZS5fdXZzLnkwKSAqICh5LyAodGhpcy5zZWdtZW50c1ktMSkpKTtcbiAgICAgIH1cblxuICAgIC8vICBjb25zXG5cbiAgICB2YXIgdG90YWxTdWIgPSBzZWdtZW50c1hTdWIgKiBzZWdtZW50c1lTdWI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTdWI7IGkrKykge1xuXG4gICAgICAgIHZhciB4cG9zID0gaSAlIHNlZ21lbnRzWFN1YjtcbiAgICAgICAgdmFyIHlwb3MgPSAoaSAvIHNlZ21lbnRzWFN1YiApIHwgMDtcblxuXG4gICAgICAgIHZhciAgdmFsdWUgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWUyID0gKHlwb3MgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zICsgMTtcbiAgICAgICAgdmFyICB2YWx1ZTMgPSAoKHlwb3MrMSkgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zO1xuICAgICAgICB2YXIgIHZhbHVlNCA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuXG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZSwgdmFsdWUyLCB2YWx1ZTMpO1xuICAgICAgICBpbmRpY2VzLnB1c2godmFsdWUyLCB2YWx1ZTQsIHZhbHVlMyk7XG4gICAgfVxuXG5cbiAgICAvL2NvbnNvbGUubG9nKGluZGljZXMpXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkodmVydHMpO1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheSh1dnMpO1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShjb2xvcnMpO1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShpbmRpY2VzKTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGV4dHVyZSBVVnMgd2hlbiBuZXcgdGV4dHVyZSBpcyBzZXRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QbGFuZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFBsYW5lIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBUaGUgcm9wZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciByb3BlID0gbmV3IFBJWEkuUm9wZShQSVhJLlRleHR1cmUuZnJvbUltYWdlKFwic25ha2UucG5nXCIpLCBwb2ludHMpO1xuICogIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5tZXNoLk1lc2hcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB7UElYSS5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIHRleHR1cmUgdG8gdXNlIG9uIHRoZSByb3BlLlxuICogQHBhcmFtIHtQSVhJLlBvaW50W119IHBvaW50cyAtIEFuIGFycmF5IG9mIHtAbGluayBQSVhJLlBvaW50fSBvYmplY3RzIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gKlxuICovXG5mdW5jdGlvbiBSb3BlKHRleHR1cmUsIHBvaW50cylcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnRbXX0gQW4gYXJyYXkgb2YgcG9pbnRzIHRoYXQgZGV0ZXJtaW5lIHRoZSByb3BlXG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgb2YgdmVydGljZXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhpcyByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBUaGUgV2ViR0wgVXZzIG9mIHRoZSByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogNCk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgY29sb3IgY29tcG9uZW50c1xuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgcm9wZSBpcyByZWFkeSB0byBiZSBkcmF3bi4gTmVlZGVkIGJlY2F1c2UgTWVzaCBjdG9yIGNhblxuICAgICAqIGNhbGwgX29uVGV4dHVyZVVwZGF0ZWQgd2hpY2ggY291bGQgY2FsbCByZWZyZXNoIHRvbyBlYXJseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgIHRoaXMucmVmcmVzaCgpO1xufVxuXG5cbi8vIGNvbnN0cnVjdG9yXG5Sb3BlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTWVzaC5wcm90b3R5cGUpO1xuUm9wZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3BlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3BlO1xuXG4vKipcbiAqIFJlZnJlc2hlc1xuICpcbiAqL1xuUm9wZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgLy8gaWYgdG9vIGxpdHRsZSBwb2ludHMsIG9yIHRleHR1cmUgaGFzbid0IGdvdCBVVnMgc2V0IHlldCBqdXN0IG1vdmUgb24uXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxIHx8ICF0aGlzLl90ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuXG4gICAgdmFyIHRleHR1cmVVdnMgPSB0aGlzLl90ZXh0dXJlLl91dnM7XG4gICAgdmFyIG9mZnNldCA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDAsIHRleHR1cmVVdnMueTApO1xuICAgIHZhciBmYWN0b3IgPSBuZXcgY29yZS5Qb2ludCh0ZXh0dXJlVXZzLngyIC0gdGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MiAtIHRleHR1cmVVdnMueTApO1xuXG4gICAgdXZzWzBdID0gMCArIG9mZnNldC54O1xuICAgIHV2c1sxXSA9IDAgKyBvZmZzZXQueTtcbiAgICB1dnNbMl0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICBjb2xvcnNbMF0gPSAxO1xuICAgIGNvbG9yc1sxXSA9IDE7XG5cbiAgICBpbmRpY2VzWzBdID0gMDtcbiAgICBpbmRpY2VzWzFdID0gMTtcblxuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgYW1vdW50O1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG4gICAgICAgIC8vIHRpbWUgdG8gZG8gc29tZSBzbWFydCBkcmF3aW5nIVxuICAgICAgICBhbW91bnQgPSBpIC8gKHRvdGFsLTEpO1xuXG4gICAgICAgIHV2c1tpbmRleF0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrMV0gPSAwICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgdXZzW2luZGV4KzJdID0gYW1vdW50ICogZmFjdG9yLnggKyBvZmZzZXQueDtcbiAgICAgICAgdXZzW2luZGV4KzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgY29sb3JzW2luZGV4XSA9IDE7XG4gICAgICAgIGNvbG9yc1tpbmRleCsxXSA9IDE7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgaW5kaWNlc1tpbmRleF0gPSBpbmRleDtcbiAgICAgICAgaW5kaWNlc1tpbmRleCArIDFdID0gaW5kZXggKyAxO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIE1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUuY2FsbCh0aGlzKTtcblxuICAgIC8vIHdhaXQgZm9yIHRoZSBSb3BlIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Sb3BlLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbGFzdFBvaW50ID0gcG9pbnRzWzBdO1xuICAgIHZhciBuZXh0UG9pbnQ7XG4gICAgdmFyIHBlcnBYID0gMDtcbiAgICB2YXIgcGVycFkgPSAwO1xuXG4gICAgLy8gdGhpcy5jb3VudCAtPSAwLjI7XG5cbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgcmF0aW8sIHBlcnBMZW5ndGgsIG51bTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWw7IGkrKylcbiAgICB7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBpbmRleCA9IGkgKiA0O1xuXG4gICAgICAgIGlmIChpIDwgcG9pbnRzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0UG9pbnQgPSBwb2ludHNbaSsxXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcGVycFkgPSAtKG5leHRQb2ludC54IC0gbGFzdFBvaW50LngpO1xuICAgICAgICBwZXJwWCA9IG5leHRQb2ludC55IC0gbGFzdFBvaW50Lnk7XG5cbiAgICAgICAgcmF0aW8gPSAoMSAtIChpIC8gKHRvdGFsLTEpKSkgKiAxMDtcblxuICAgICAgICBpZiAocmF0aW8gPiAxKVxuICAgICAgICB7XG4gICAgICAgICAgICByYXRpbyA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwTGVuZ3RoID0gTWF0aC5zcXJ0KHBlcnBYICogcGVycFggKyBwZXJwWSAqIHBlcnBZKTtcbiAgICAgICAgbnVtID0gdGhpcy5fdGV4dHVyZS5oZWlnaHQgLyAyOyAvLygyMCArIE1hdGguYWJzKE1hdGguc2luKChpICsgdGhpcy5jb3VudCkgKiAwLjMpICogNTApICkqIHJhdGlvO1xuICAgICAgICBwZXJwWCAvPSBwZXJwTGVuZ3RoO1xuICAgICAgICBwZXJwWSAvPSBwZXJwTGVuZ3RoO1xuXG4gICAgICAgIHBlcnBYICo9IG51bTtcbiAgICAgICAgcGVycFkgKj0gbnVtO1xuXG4gICAgICAgIHZlcnRpY2VzW2luZGV4XSA9IHBvaW50LnggKyBwZXJwWDtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMV0gPSBwb2ludC55ICsgcGVycFk7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzJdID0gcG9pbnQueCAtIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCszXSA9IHBvaW50LnkgLSBwZXJwWTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBwb2ludDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkubWVzaFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNZXNoOiAgICAgICAgICAgcmVxdWlyZSgnLi9NZXNoJyksXG4gICAgUGxhbmU6ICAgICAgICAgICByZXF1aXJlKCcuL1BsYW5lJyksXG4gICAgUm9wZTogICAgICAgICAgIHJlcXVpcmUoJy4vUm9wZScpLFxuICAgIE1lc2hSZW5kZXJlcjogICByZXF1aXJlKCcuL3dlYmdsL01lc2hSZW5kZXJlcicpLFxuICAgIE1lc2hTaGFkZXI6ICAgICByZXF1aXJlKCcuL3dlYmdsL01lc2hTaGFkZXInKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIE1lc2ggPSByZXF1aXJlKCcuLi9NZXNoJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgTWVzaFJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9NZXNoUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgY29yZS5PYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIFxuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSgxNTAwMCk7XG5cbiAgICAvL1RPRE8gdGhpcyBjb3VsZCBiZSBhIHNpbmdsZSBidWZmZXIgc2hhcmVkIGFtb25nc3QgYWxsIHJlbmRlcmVycyBhcyB3ZSByZXVzZSB0aGlzIHNldCB1cCBpbiBtb3N0IHJlbmRlcmVyc1xuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgMTUwMDA7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufVxuXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoUmVuZGVyZXI7XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignbWVzaCcsIE1lc2hSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIG1lc2gge1BJWEkubWVzaC5NZXNofSB0aGUgbWVzaCB0byByZW5kZXJcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICBpZighbWVzaC5fdmVydGV4QnVmZmVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5faW5pdFdlYkdMKG1lc2gpO1xuICAgIH1cblxuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXIsXG4gICAgICAgIGdsID0gcmVuZGVyZXIuZ2wsXG4gICAgICAgIHRleHR1cmUgPSBtZXNoLl90ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBzaGFkZXIgPSBtZXNoLnNoYWRlcjsvLyB8fCByZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnBsdWdpbnMubWVzaFNoYWRlcjtcblxuICAgIHZhciBkcmF3TW9kZSA9IG1lc2guZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIID8gZ2wuVFJJQU5HTEVfU1RSSVAgOiBnbC5UUklBTkdMRVM7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShtZXNoLmJsZW5kTW9kZSk7XG5cbiAgICAvL1RPRE8gY2FjaGUgY3VzdG9tIHN0YXRlLi5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzaGFkZXIgPSBzaGFkZXIuc2hhZGVyc1tnbC5pZF0gfHwgc2hhZGVyLmdldFNoYWRlcihyZW5kZXJlcik7Ly8gOiBzaGFkZXI7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4LnZhbHVlID0gbWVzaC53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gbWVzaC53b3JsZEFscGhhO1xuXG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuXG4gICAgaWYgKCFtZXNoLmRpcnR5KVxuICAgIHtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIG1lc2gudmVydGljZXMpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIHV2c1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cblxuICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCAwLCBtZXNoLmluZGljZXMpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIG1lc2guZGlydHkgPSBmYWxzZTtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZG9udCBuZWVkIHRvIHVwbG9hZCFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIH1cblxuICAgIGdsLmRyYXdFbGVtZW50cyhkcmF3TW9kZSwgbWVzaC5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuXG59O1xuXG4vKipcbiAqIFByZXBhcmVzIGFsbCB0aGUgYnVmZmVycyB0byByZW5kZXIgdGhpcyBtZXNoXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLl9pbml0V2ViR0wgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICAvLyBidWlsZCB0aGUgc3RyaXAhXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIG1lc2guX3ZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIG1lc2guX2luZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5fdXZCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC52ZXJ0aWNlcywgZ2wuRFlOQU1JQ19EUkFXKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgaWYobWVzaC5jb2xvcnMpe1xuICAgICAgICBtZXNoLl9jb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fY29sb3JCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5jb2xvcnMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG59O1xuXG5cbi8qKlxuICogRW1wdGllcyB0aGUgY3VycmVudCBiYXRjaC5cbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBtZXNoIHJlbmRlcmVyLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgXG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgTWVzaCByZW5kZXJlclxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIFdlYkdMIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gTWVzaFNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIGNvcmUuU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIGFscGhhIDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYVRleHR1cmVDb29yZDowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5NZXNoU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TaGFkZXIucHJvdG90eXBlKTtcbk1lc2hTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gTWVzaFNoYWRlcjtcblxuY29yZS5TaGFkZXJNYW5hZ2VyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoU2hhZGVyJywgTWVzaFNoYWRlcik7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9zaWduXG5cbmlmICghTWF0aC5zaWduKVxue1xuICAgIE1hdGguc2lnbiA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHggPSAreDtcbiAgICAgICAgaWYgKHggPT09IDAgfHwgaXNOYU4oeCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4ID4gMCA/IDEgOiAtMTtcbiAgICB9O1xufVxuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvb2JqZWN0LWFzc2lnblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnblxuXG5pZiAoIU9iamVjdC5hc3NpZ24pXG57XG4gICAgT2JqZWN0LmFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcbn1cbiIsInJlcXVpcmUoJy4vT2JqZWN0LmFzc2lnbicpO1xucmVxdWlyZSgnLi9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUnKTtcbnJlcXVpcmUoJy4vTWF0aC5zaWduJyk7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cDovL3BhdWxpcmlzaC5jb20vMjAxMS9yZXF1ZXN0YW5pbWF0aW9uZnJhbWUtZm9yLXNtYXJ0LWFuaW1hdGluZy9cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzE1Nzk2NzFcbi8vIGh0dHA6Ly91cGRhdGVzLmh0bWw1cm9ja3MuY29tLzIwMTIvMDUvcmVxdWVzdEFuaW1hdGlvbkZyYW1lLUFQSS1ub3ctd2l0aC1zdWItbWlsbGlzZWNvbmQtcHJlY2lzaW9uXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90aW1oYWxsLzQwNzg2MTRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9GaW5hbmNpYWwtVGltZXMvcG9seWZpbGwtc2VydmljZS90cmVlL21hc3Rlci9wb2x5ZmlsbHMvcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG5cbi8vIEV4cGVjdGVkIHRvIGJlIHVzZWQgd2l0aCBCcm93c2VyZml5XG4vLyBCcm93c2VyaWZ5IGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB0aGUgdXNlIG9mIGBnbG9iYWxgIGFuZCBwYXNzZXMgdGhlXG4vLyBjb3JyZWN0IHJlZmVyZW5jZSBvZiBgZ2xvYmFsYCwgYHNlbGZgLCBhbmQgZmluYWxseSBgd2luZG93YFxuXG4vLyBEYXRlLm5vd1xuaWYgKCEoRGF0ZS5ub3cgJiYgRGF0ZS5wcm90b3R5cGUuZ2V0VGltZSkpIHtcbiAgICBEYXRlLm5vdyA9IGZ1bmN0aW9uIG5vdygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIH07XG59XG5cbi8vIHBlcmZvcm1hbmNlLm5vd1xuaWYgKCEoZ2xvYmFsLnBlcmZvcm1hbmNlICYmIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cpKSB7XG4gICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgaWYgKCFnbG9iYWwucGVyZm9ybWFuY2UpIHtcbiAgICAgICAgZ2xvYmFsLnBlcmZvcm1hbmNlID0ge307XG4gICAgfVxuICAgIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIH07XG59XG5cbi8vIHJlcXVlc3RBbmltYXRpb25GcmFtZVxudmFyIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbnZhciB2ZW5kb3JzID0gWydtcycsICdtb3onLCAnd2Via2l0JywgJ28nXTtcblxuZm9yKHZhciB4ID0gMDsgeCA8IHZlbmRvcnMubGVuZ3RoICYmICFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lOyArK3gpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnQ2FuY2VsQW5pbWF0aW9uRnJhbWUnXSB8fFxuICAgICAgICBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbn1cblxuaWYgKCFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZGVsYXkgPSAxNiArIGxhc3RUaW1lIC0gY3VycmVudFRpbWU7XG5cbiAgICAgICAgaWYgKGRlbGF5IDwgMCkge1xuICAgICAgICAgICAgZGVsYXkgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFRpbWUgPSBjdXJyZW50VGltZTtcblxuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsYXN0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBjYWxsYmFjayhwZXJmb3JtYW5jZS5ub3coKSk7XG4gICAgICAgIH0sIGRlbGF5KTtcbiAgICB9O1xufVxuXG5pZiAoIWdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSkge1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgfTtcbn1cbiJdfQ== +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L09ic2VydmFibGVQb2ludC5qcyIsInNyYy9jb3JlL2Rpc3BsYXkvVHJhbnNmb3JtU3RhdGljLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3MuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9HcmFwaGljc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvV2ViR0xHcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ2lyY2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRDb21wbGV4UG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkTGluZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL01hdHJpeC5qcyIsInNyYy9jb3JlL21hdGgvUG9pbnQuanMiLCJzcmMvY29yZS9tYXRoL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvQ2lyY2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvRWxsaXBzZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1BvbHlnb24uanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9SZWN0YW5nbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlQnVmZmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvU3lzdGVtUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNNYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1RleHR1cmVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9NYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUXVhZC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvU3RlbmNpbE1hc2tTdGFjay5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9zcHJpdGVzL1Nwcml0ZS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvdGV4dC9UZXh0LmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9CYXNlVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1JlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9UZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZVV2cy5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90aWNrZXIvVGlja2VyLmpzIiwic3JjL2NvcmUvdGlja2VyL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzLmpzIiwic3JjL2NvcmUvdXRpbHMvaW5kZXguanMiLCJzcmMvY29yZS91dGlscy9wbHVnaW5UYXJnZXQuanMiLCJzcmMvZGVwcmVjYXRpb24uanMiLCJzcmMvZXh0cmFzL0JpdG1hcFRleHQuanMiLCJzcmMvZXh0cmFzL01vdmllQ2xpcC5qcyIsInNyYy9leHRyYXMvVGlsaW5nU3ByaXRlLmpzIiwic3JjL2V4dHJhcy9jYWNoZUFzQml0bWFwLmpzIiwic3JjL2V4dHJhcy9nZXRDaGlsZEJ5TmFtZS5qcyIsInNyYy9leHRyYXMvZ2V0R2xvYmFsUG9zaXRpb24uanMiLCJzcmMvZXh0cmFzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvYXNjaWkvQXNjaWlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibG9vbS9CbG9vbUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckRpckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1clhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9TbWFydEJsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvck1hdHJpeEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbG9yL0NvbG9yU3RlcEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2RvdC9Eb3RTY3JlZW5GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0JsdXJZVGludEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2dyYXkvR3JheUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvaW52ZXJ0L0ludmVydEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL25vaXNlL05vaXNlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9yZ2IvUkdCU3BsaXRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zZXBpYS9TZXBpYUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0QXhpc0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdHdpc3QvVHdpc3RGaWx0ZXIuanMiLCJzcmMvc3JjL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL0ludGVyYWN0aW9uRGF0YS5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbk1hbmFnZXIuanMiLCJzcmMvaW50ZXJhY3Rpb24vaW5kZXguanMiLCJzcmMvaW50ZXJhY3Rpb24vaW50ZXJhY3RpdmVUYXJnZXQuanMiLCJzcmMvbG9hZGVycy9iaXRtYXBGb250UGFyc2VyLmpzIiwic3JjL2xvYWRlcnMvaW5kZXguanMiLCJzcmMvbG9hZGVycy9sb2FkZXIuanMiLCJzcmMvbG9hZGVycy9zcHJpdGVzaGVldFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL3RleHR1cmVQYXJzZXIuanMiLCJzcmMvbWVzaC9NZXNoLmpzIiwic3JjL21lc2gvUGxhbmUuanMiLCJzcmMvbWVzaC9Sb3BlLmpzIiwic3JjL21lc2gvaW5kZXguanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoUmVuZGVyZXIuanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoU2hhZGVyLmpzIiwic3JjL3BvbHlmaWxsL01hdGguc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9PYmplY3QuYXNzaWduLmpzIiwic3JjL3BvbHlmaWxsL2luZGV4LmpzIiwic3JjL3BvbHlmaWxsL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzV1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNyaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbm1DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Y0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2h5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNWxCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM21CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25iQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICBjcmVhdGVDb250ZXh0OiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9jcmVhdGVDb250ZXh0JyksXG4gICAgc2V0VmVydGV4QXR0cmliQXJyYXlzOiBcdHJlcXVpcmUoJy4vbGliL3NldFZlcnRleEF0dHJpYkFycmF5cycpLFxuICAgIFxuICAgIEdMQnVmZmVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMQnVmZmVyJyksXG4gICAgR0xGcmFtZWJ1ZmZlcjogXHRcdFx0cmVxdWlyZSgnLi9saWIvR0xGcmFtZWJ1ZmZlcicpLFxuICAgIEdMU2hhZGVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMU2hhZGVyJyksXG4gICAgR0xUZXh0dXJlOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMVGV4dHVyZScpLFxuICAgIFxuICAgIFZlcnRleEFycmF5T2JqZWN0OiBcdFx0cmVxdWlyZSgnLi9saWIvVmVydGV4QXJyYXlPYmplY3QnKVxuXG59OyIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEVNUFRZX0FSUkFZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcblxudmFyIEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuQVJSQVlfQlVGRkVSO1xuXHR0aGlzLmRyYXdUeXBlID0gZHJhd1R5cGUgfHwgZ2wuU1RBVElDX0RSQVc7XG5cdHRoaXMuZGF0YSA9IEVNUFRZX0FSUkFZX0JVRkZFUjtcblxuXHRpZihkYXRhKVxuXHR7XG5cdFx0dGhpcy51cGxvYWQoZGF0YSk7XG5cdH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihkYXRhLCBvZmZzZXQsIGRvbnRCaW5kKVxue1xuXHQvLyB0b2RvIC0gbmVlZGVkP1xuXHQvL2lmKCFkb250QmluZClcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblx0XG5cdGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcblx0b2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cblx0aWYodGhpcy5kYXRhLmJ5dGVMZW5ndGggPj0gZGF0YS5ieXRlTGVuZ3RoKVxuXHR7XHRcblx0XHRnbC5idWZmZXJTdWJEYXRhKHRoaXMudHlwZSwgb2Zmc2V0LCBkYXRhKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC5idWZmZXJEYXRhKHRoaXMudHlwZSwgZGF0YSwgdGhpcy5kcmF3VHlwZSk7XG5cdH1cblxuXHR0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRCdWZmZXIodGhpcy50eXBlLCB0aGlzLmJ1ZmZlcik7XG59XG5cbkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24oZ2wsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZSA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIHR5cGUsIGRyYXdUeXBlKTtcbn1cblxuLy9UT0RPIERlc3Ryb3kuLlxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcjtcblxuIiwiXG52YXIgVGV4dHVyZSA9IHJlcXVpcmUoJy4vR0xUZXh0dXJlJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIEZyYW1lYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEZyYW1lYnVmZmVyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblx0XG5cdHRoaXMuc3RlbmNpbCA9IG51bGw7XG5cdHRoaXMudGV4dHVyZSA9IG51bGw7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlVGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBuZXcgVGV4dHVyZShnbCk7XG5cblx0dGhpcy50ZXh0dXJlLmJpbmQoKTtcblxuXHQvL2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZS50ZXh0dXJlLCAwKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmVuYWJsZVN0ZW5jaWwgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuc3RlbmNpbClyZXR1cm47XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnN0ZW5jaWwgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcbiAgICBcbiAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBcbiAgICAvLyBUT0RPLi4gdGhpcyBpcyBkZXB0aCBBTkQgc3RlbmNpbD9cbiAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsICB0aGlzLndpZHRoICAsIHRoaXMuaGVpZ2h0ICk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCByLCBnLCBiLCBhIClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICBnbC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpO1xuICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLmZyYW1lYnVmZmVyICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuXHRpZiAoIHRoaXMudGV4dHVyZSApXG4gICAge1xuICAgIFx0dGhpcy50ZXh0dXJlLnVwbG9hZERhdGEobnVsbCwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRpZiAoIHRoaXMuc3RlbmNpbCApXG4gICAge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0ZW5jaWwgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0dmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21EYXRhKGdsLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0dGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgZmJvLnVuYmluZCgpO1xuICAgIFxuICAgIHJldHVybiBmYm87XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZUZsb2F0MzIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0Ly8gY3JlYXRlIGEgbmV3IHRleHR1cmUuLlxuICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUuZnJvbURhdGEoZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuICAgIHRleHR1cmUuZW5hYmxlTmVhcmVzdFNjYWxpbmcoKTtcbiAgICB0ZXh0dXJlLmVuYWJsZVdyYXBDbGFtcCgpO1xuXG4gICAgLy9ub3cgY3JlYXRlIHRoZSBmcmFtZWJ1ZmZlciBvYmplY3QgYW5kIGF0dGFjaCB0aGUgdGV4dHVyZSB0byBpdC5cbiAgICB2YXIgZmJvID0gbmV3IEZyYW1lYnVmZmVyKGdsLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICBmYm8uZW5hYmxlVGV4dHVyZSh0ZXh0dXJlKVxuXG4gICAgZmJvLnVuYmluZCgpO1xuXG4gICAgcmV0dXJuIGZibztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGcmFtZWJ1ZmZlcjtcblxuIiwiXG52YXIgY29tcGlsZVByb2dyYW0gPSByZXF1aXJlKCcuL3NoYWRlci9jb21waWxlUHJvZ3JhbScpLFxuXHRleHRyYWN0QXR0cmlidXRlcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RBdHRyaWJ1dGVzJyksXG5cdGV4dHJhY3RVbmlmb3JtcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RVbmlmb3JtcycpLFxuXHRnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QgPSByZXF1aXJlKCcuL3NoYWRlci9nZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgU2hhZGVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cbnZhciBTaGFkZXIgPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIEZpcnN0IGNvbXBpbGUgdGhlIHByb2dyYW0uLlxuXHR0aGlzLnByb2dyYW0gPSBjb21waWxlUHJvZ3JhbShnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7XG5cblx0Ly8gbmV4dCBleHRyYWN0IHRoZSBhdHRyaWJ1dGVzXG5cdHRoaXMuYXR0cmlidXRlcyA9IGV4dHJhY3RBdHRyaWJ1dGVzKGdsLCB0aGlzLnByb2dyYW0pOyBcblxuICAgIHZhciB1bmlmb3JtRGF0YSA9IGV4dHJhY3RVbmlmb3JtcyhnbCwgdGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMudW5pZm9ybXMgPSBnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QoIGdsLCB1bmlmb3JtRGF0YSApO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4iLCJcbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gYSBXZWJHTCBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGZvcm1hdCB7bnVtYmVyfSB0aGUgcGl4ZWwgZm9ybWF0IG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5SR0JBXG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSB0aGUgZ2wgdHlwZSBvZiB0aGUgdGV4dHVyZS4gZGVmYXVsdHMgdG8gZ2wuVU5TSUdORURfQllURVxuICovXG52YXIgVGV4dHVyZSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLnRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cblx0Ly8gc29tZSBzZXR0aW5ncy4uXG5cdHRoaXMubWlwbWFwID0gZmFsc2U7XG5cblx0dGhpcy5wcmVtdWx0aXBseUFscGhhID0gZmFsc2U7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cblx0dGhpcy5mb3JtYXQgPSBmb3JtYXQgfHwgZ2wuUkdCQTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5VTlNJR05FRF9CWVRFO1xuXG5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge1BJWEkuZ2xDb3JlLlRleHR1cmV9IFt2YXJuYW1lXSBbZGVzY3JpcHRpb25dXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKHNvdXJjZSlcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gc291cmNlLndpZHRoO1xuXHR0aGlzLmhlaWdodCA9IHNvdXJjZS5oZWlnaHQ7XG5cblx0Z2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xuICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMuZm9ybWF0LCB0aGlzLnR5cGUsIHNvdXJjZSk7XG59XG5cbnZhciBGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSBmYWxzZTtcblxuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkRGF0YSA9IGZ1bmN0aW9uKGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuYmluZCgpO1xuXHRcblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IHRoaXMud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IHRoaXMuaGVpZ2h0O1xuXG5cdGlmKGRhdGEgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpXG5cdHtcblx0XHRpZighRkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFKVxuXHRcdHtcblx0XHRcdHZhciBleHQgPSBnbC5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9mbG9hdFwiKTtcblx0XHRcdFxuXHRcdFx0aWYoZXh0KVxuXHRcdFx0e1xuXHRcdFx0XHRGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2Zsb2F0aW5nIHBvaW50IHRleHR1cmVzIG5vdCBhdmFpbGFibGUnKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnR5cGUgPSBnbC5GTE9BVDtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHQvLyBUT0RPIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzXG5cdFx0dGhpcy50eXBlID0gZ2wuVU5TSUdORURfQllURTtcblx0fVxuXG5cdC8vIHdoYXQgdHlwZSBvZiBkYXRhP1xuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG5cdGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsICB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgZGF0YSB8fCBudWxsKTtcblxufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24obG9jYXRpb24pXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0aWYobG9jYXRpb24gIT09IHVuZGVmaW5lZClcblx0e1xuXHRcdGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbik7XG5cdH1cblxuXHRnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0aGlzLnRleHR1cmUpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIG51bGwpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5taW5GaWx0ZXIgPSBmdW5jdGlvbiggbGluZWFyIClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRpZih0aGlzLm1pcG1hcClcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVJfTUlQTUFQX0xJTkVBUiA6IGdsLk5FQVJFU1RfTUlQTUFQX05FQVJFU1QpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcblx0fVx0XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1hZ0ZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTWlwbWFwID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR0aGlzLm1pcG1hcCA9IHRydWU7XG5cdGdsLmdlbmVyYXRlTWlwbWFwKGdsLlRFWFRVUkVfMkQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVMaW5lYXJTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcih0cnVlKTtcblx0dGhpcy5tYWdGaWx0ZXIodHJ1ZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZU5lYXJlc3RTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcihmYWxzZSk7XG5cdHRoaXMubWFnRmlsdGVyKGZhbHNlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlV3JhcENsYW1wID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwUmVwZWF0ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXHRcblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuUkVQRUFUKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5SRVBFQVQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlVGV4dHVyZSh0aGlzLnRleHR1cmUpO1xufVxuXG4vL1RleHR1cmUuXG5UZXh0dXJlLmZyb21Tb3VyY2UgPSBmdW5jdGlvbihnbCwgc291cmNlLCBwcmVtdWx0aXBseUFscGhhKVxue1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS5wcmVtdWx0aXBseUFscGhhID0gcHJlbXVsdGlwbHlBbHBoYSB8fCBmYWxzZTtcblx0dGV4dHVyZS51cGxvYWQoc291cmNlKTtcblxuXHRyZXR1cm4gdGV4dHVyZTtcbn1cblxuVGV4dHVyZS5mcm9tRGF0YSA9IGZ1bmN0aW9uKGdsLCBkYXRhLCB3aWR0aCwgaGVpZ2h0KVxue1xuXHQvL2NvbnNvbGUubG9nKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS51cGxvYWREYXRhKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZTtcblxuIiwiXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbi8vIHN0YXRlIG9iamVjdC8vXG5cblxuZnVuY3Rpb24gVmVydGV4QXJyYXlPYmplY3QoZ2wpXG57XG5cdFxuXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IChcbiAgICAgIGdsLmdldEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKVxuICAgICk7XG5cbi8vXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IG51bGw7XG5cblx0aWYodGhpcy5uYXRpdmVWYW9FeHRlbnNpb24pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhbyA9IHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7ICBcblx0fVxuXG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcblxuXHR0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuXHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cblx0XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZlcnRleEFycmF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBWZXJ0ZXhBcnJheU9iamVjdDtcblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKHRoaXMubmF0aXZlVmFvKTsgIFxuXG5cdFx0aWYodGhpcy5kaXJ0eSlcblx0XHR7XG5cdFx0XHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cdFx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdFx0fVxuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLm5hdGl2ZVZhbylcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIFxuXHR7XG5cdFx0dmFyIGF0dHJpYiA9IHRoaXMuYXR0cmlidXRlc1tpXTtcblx0XHRhdHRyaWIuYnVmZmVyLmJpbmQoKTtcdFxuXG5cdFx0YXR0cmliLmF0dHJpYnV0ZS5wb2ludGVyKGF0dHJpYi50eXBlLCBhdHRyaWIubm9ybWFsaXplZCwgYXR0cmliLnN0cmlkZSwgYXR0cmliLnN0YXJ0KTsgXG5cdFx0XG5cdFx0Z2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYXR0cmliLmF0dHJpYnV0ZS5sb2NhdGlvbik7XG5cdH07XG5cblx0dGhpcy5pbmRleEJ1ZmZlci5iaW5kKCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRBdHRyaWJ1dGUgPSBmdW5jdGlvbihidWZmZXIsIGF0dHJpYnV0ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydClcbntcbiAgICB0aGlzLmF0dHJpYnV0ZXMucHVzaCh7XG4gICAgXHRidWZmZXI6IFx0YnVmZmVyLFxuICAgIFx0YXR0cmlidXRlOiBcdGF0dHJpYnV0ZSxcblxuICAgIFx0bG9jYXRpb246IFx0YXR0cmlidXRlLmxvY2F0aW9uLFxuXHQgXHR0eXBlOiBcdFx0dHlwZSB8fCB0aGlzLmdsLkZMT0FULFxuXHQgXHRub3JtYWxpemVkOiBub3JtYWxpemVkIHx8IGZhbHNlLFxuXHQgXHRzdHJpZGU6IFx0c3RyaWRlIHx8IDAsXG5cdCBcdHN0YXJ0OiBcdFx0c3RhcnQgfHwgMFxuXHR9KVxuXG5cdHRoaXMuZGlydHkgPSB0cnVlO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRJbmRleCA9IGZ1bmN0aW9uKGJ1ZmZlciwgb3B0aW9ucylcbntcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gYnVmZmVyO1xuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBzdGFydClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuZHJhd0VsZW1lbnRzKHR5cGUsIHNpemUsIGdsLlVOU0lHTkVEX1NIT1JULCBzdGFydCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgQ29udGV4dFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG5cbnZhciBDT05URVhUX1VJRCA9IDA7XG5cbnZhciBjcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24oY2FudmFzLCBvcHRpb25zKVxue1xuICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgb3B0aW9ucykgfHwgXG4gICAgXHQgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFnbClcbiAgICB7XG4gICAgICAgIC8vIGZhaWwsIG5vdCBhYmxlIHRvIGdldCBhIGNvbnRleHRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB3ZWJHTC4gVHJ5IHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXInKTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCB3YW50IHRvIHBoYXNlIHRoaXMgb3V0P1xuICAgIGdsLmlkID0gQ09OVEVYVF9VSUQrKztcblxuICAgIHJldHVybiBnbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb250ZXh0O1xuXG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgc2V0VmVydGV4QXR0cmliQXJyYXlzID0gZnVuY3Rpb24gKGdsLCBhdHRyaWJzKVxue1x0XG4gICAvLyBjb25zb2xlLmxvZyhnbC5pZClcbiAgICB2YXIgZGF0YSA9IEdMX01BUFtnbC5pZF07XG5cbiAgICBpZighZGF0YSlcbiAgICB7XG5cdCAgIHZhciBtYXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cdFx0ZGF0YSA9IEdMX01BUFtnbC5pZF0gPSB7dGVtcEF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKVxuXHRcdFx0XHQgXHQgXHRcdCAgICxhdHRyaWJTdGF0ZTpuZXcgQXJyYXkobWF4QXR0cmlicyl9O1xuXHR9XG5cdFxuICAgIHZhciBpLFxuICAgIFx0dGVtcEF0dHJpYlN0YXRlID0gZGF0YS50ZW1wQXR0cmliU3RhdGUsXG4gICAgXHRhdHRyaWJTdGF0ZSA9IGRhdGEuYXR0cmliU3RhdGU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAoaSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbaV0ubG9jYXRpb25dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAoYXR0cmliU3RhdGVbaV0gIT09IHRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmliU3RhdGVbaV0gPSB0ZW1wQXR0cmliU3RhdGVbaV07XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmF0dHJpYlN0YXRlW2ldKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VmVydGV4QXR0cmliQXJyYXlzOyIsIlxuXG5cblxuY29tcGlsZVByb2dyYW0gPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcbiAgICB2YXIgZ2xWZXJ0U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuVkVSVEVYX1NIQURFUiwgdmVydGV4U3JjKTtcbiAgICB2YXIgZ2xGcmFnU2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNyYyk7XG5cbiAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbEZyYWdTaGFkZXIpO1xuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgLy8gaWYgbGlua2luZyBmYWlscywgdGhlbiBsb2cgYW5kIGNsZWFudXBcbiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUGl4aS5qcyBFcnJvcjogQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVyLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5WQUxJREFURV9TVEFUVVMnLCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLlZBTElEQVRFX1NUQVRVUykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5nZXRFcnJvcigpJywgZ2wuZ2V0RXJyb3IoKSk7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBwcm9ncmFtIGluZm8gbG9nLCBsb2cgaXRcbiAgICAgICAgaWYgKGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pICE9PSAnJylcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaXhpLmpzIFdhcm5pbmc6IGdsLmdldFByb2dyYW1JbmZvTG9nKCknLCBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICBwcm9ncmFtID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBzb21lIHNoYWRlcnNcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xGcmFnU2hhZGVyKTtcblxuICAgIHJldHVybiBwcm9ncmFtO1xufVxuXG52YXIgY29tcGlsZVNoYWRlciA9IGZ1bmN0aW9uIChnbCwgdHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzcmMpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZVByb2dyYW07XG5cbiIsIlxuXG52YXIgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkgXG57XG4gICAgc3dpdGNoICh0eXBlKVxuICAgIHtcbiAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAndmVjMic6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzQnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSg0ICogc2l6ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgY2FzZSAnc2FtcGxlcjJEJzpcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWMyJzogICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnaXZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDMgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjNCc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDQgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdib29sJzogICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMyJzpcblxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSggMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMzJzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWM0JzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ21hdDInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Myc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMV0pO1xuXG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDAsIDAsIDFdKTtcbiAgICB9XG59XG5cbnZhciBib29sZWFuQXJyYXkgPSBmdW5jdGlvbihzaXplKVxue1xuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgYXJyYXlbaV0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRWYWx1ZTtcbiIsIlxudmFyIG1hcFR5cGUgPSByZXF1aXJlKCcuL21hcFR5cGUnKTtcbnZhciBtYXBTaXplID0gcmVxdWlyZSgnLi9tYXBTaXplJyk7XG5cbnZhciBleHRyYWN0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICB2YXIgdG90YWxBdHRyaWJ1dGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxBdHRyaWJ1dGVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGF0dHJpYkRhdGEgPSBnbC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaSk7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgYXR0cmliRGF0YS50eXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYkRhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOnR5cGUsXG4gICAgICAgICAgICBzaXplOm1hcFNpemUodHlwZSksXG4gICAgICAgICAgICBsb2NhdGlvbjpnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBhdHRyaWJEYXRhLm5hbWUpLFxuICAgICAgICAgICAgLy9UT0RPIC0gbWFrZSBhbiBhdHRyaWJ1dGUgb2JqZWN0XG4gICAgICAgICAgICBwb2ludGVyOmZ1bmN0aW9uKHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpe1xuXG4gICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5sb2NhdGlvbix0aGlzLnNpemUsIHR5cGUgfHwgZ2wuRkxPQVQsIG5vcm1hbGl6ZWQgfHwgZmFsc2UsIHN0cmlkZSB8fCAwLCBzdGFydCB8fCAwKTsgXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYXR0cmlidXRlczsgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RBdHRyaWJ1dGVzO1xuXG4iLCJ2YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIGRlZmF1bHRWYWx1ZSA9IHJlcXVpcmUoJy4vZGVmYXVsdFZhbHVlJyk7XG5cblxudmFyIGV4dHJhY3RVbmlmb3JtcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuXHR2YXIgdW5pZm9ybXMgPSB7fTtcblx0XG4gICAgdmFyIHRvdGFsVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxVbmlmb3JtczsgaSsrKSBcbiAgICB7XG4gICAgXHR2YXIgdW5pZm9ybURhdGEgPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpO1xuICAgIFx0dmFyIG5hbWUgPSB1bmlmb3JtRGF0YS5uYW1lLnJlcGxhY2UoL1xcWy4qP1xcXS8sIFwiXCIpO1xuICAgICAgICB2YXIgdHlwZSA9IG1hcFR5cGUoZ2wsIHVuaWZvcm1EYXRhLnR5cGUgKTtcblxuICAgIFx0dW5pZm9ybXNbbmFtZV0gPSB7XG4gICAgXHRcdHR5cGU6dHlwZSxcbiAgICBcdFx0c2l6ZTp1bmlmb3JtRGF0YS5zaXplLFxuICAgIFx0XHRsb2NhdGlvbjpnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksXG4gICAgXHRcdHZhbHVlOmRlZmF1bHRWYWx1ZSh0eXBlLCB1bmlmb3JtRGF0YS5zaXplKVxuICAgIFx0fVxuICAgIH07XG5cdFxuXHRyZXR1cm4gdW5pZm9ybXM7XHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHRyYWN0VW5pZm9ybXM7XG5cbiIsIlxudmFyIGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IGZ1bmN0aW9uKGdsLCB1bmlmb3JtRGF0YSlcbntcbiAgICAvLyB0aGlzIGlzIHRoZSBvYmplY3Qgd2Ugd2lsbCBiZSBzZW5kaW5nIGJhY2suXG4gICAgLy8gYW4gb2JqZWN0IGhpZXJhY2h5IHdpbGwgYmUgY3JlYXRlZCBmb3Igc3RydWN0c1xuICAgIHZhciB1bmlmb3JtcyA9IHtkYXRhOnt9fTtcblxuICAgIHVuaWZvcm1zLmdsID0gZ2w7XG4gICAgXG4gICAgdmFyIHVuaWZvcm1LZXlzPSBPYmplY3Qua2V5cyh1bmlmb3JtRGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1LZXlzLmxlbmd0aDsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBmdWxsTmFtZSA9IHVuaWZvcm1LZXlzW2ldXG5cbiAgICAgICAgdmFyIG5hbWVUb2tlbnMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAxXTtcblxuICAgICAgICB2YXIgdW5pZm9ybUdyb3VwID0gZ2V0VW5pZm9ybUdyb3VwKG5hbWVUb2tlbnMsIHVuaWZvcm1zKTtcblxuICAgICAgICB2YXIgdW5pZm9ybSA9ICB1bmlmb3JtRGF0YVtmdWxsTmFtZV07XG4gICAgICAgIHVuaWZvcm1Hcm91cC5kYXRhW25hbWVdID0gdW5pZm9ybTtcblxuICAgICAgICB1bmlmb3JtR3JvdXAuZ2wgPSBnbDtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5pZm9ybUdyb3VwLCBuYW1lLCB7XG4gICAgICAgICAgICBnZXQ6IGdlbmVyYXRlR2V0dGVyKG5hbWUpLFxuICAgICAgICAgICAgc2V0OiBnZW5lcmF0ZVNldHRlcihuYW1lLCB1bmlmb3JtKVxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdW5pZm9ybXM7XG59XG5cbnZhciBnZW5lcmF0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpXG57XG5cdHZhciB0ZW1wbGF0ZSA9IGdldHRlclRlbXBsYXRlLnJlcGxhY2UoJyUlJywgbmFtZSk7XG5cdHJldHVybiBuZXcgRnVuY3Rpb24odGVtcGxhdGUpO1xufVxuXG52YXIgZ2VuZXJhdGVTZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCB1bmlmb3JtKVxue1xuICAgIHZhciB0ZW1wbGF0ZSA9IHNldHRlclRlbXBsYXRlLnJlcGxhY2UoLyUlL2csIG5hbWUpO1xuICAgIHZhciBzZXRUZW1wbGF0ZVxuICAgIFxuICAgIGlmKHVuaWZvcm0uc2l6ZSA9PT0gMSlcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19TSU5HTEVfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzZXRUZW1wbGF0ZSA9IEdMU0xfVE9fQVJSQVlfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cblxuICAgIGlmKHNldFRlbXBsYXRlKVxuICAgIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gXCJcXG50aGlzLmdsLlwiICsgc2V0VGVtcGxhdGUgKyBcIjtcIjtcbiAgICB9XG5cbiAgXHRyZXR1cm4gbmV3IEZ1bmN0aW9uKCd2YWx1ZScsIHRlbXBsYXRlKTtcbn1cblxudmFyIGdldFVuaWZvcm1Hcm91cCA9IGZ1bmN0aW9uKG5hbWVUb2tlbnMsIHVuaWZvcm0pXG57XG4gICAgdmFyIGN1ciA9IHVuaWZvcm07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVUb2tlbnMubGVuZ3RoIC0gMTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBvID0gY3VyW25hbWVUb2tlbnNbaV1dIHx8IHtkYXRhOnt9fTtcbiAgICAgICAgY3VyW25hbWVUb2tlbnNbaV1dID0gbztcbiAgICAgICAgY3VyID0gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGN1clxufVxuXG52YXIgZ2V0dGVyVGVtcGxhdGUgPSBbXG4gICAgJ3JldHVybiB0aGlzLmRhdGEuJSUudmFsdWU7Jyxcbl0uam9pbignXFxuJyk7XG5cbnZhciBzZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAndGhpcy5kYXRhLiUlLnZhbHVlID0gdmFsdWU7JyxcbiAgICAndmFyIGxvY2F0aW9uID0gdGhpcy5kYXRhLiUlLmxvY2F0aW9uOydcbl0uam9pbignXFxuJyk7XG5cblxudmFyIEdMU0xfVE9fU0lOR0xFX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ3ZlYzInOiAgICAgJ3VuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ3ZlYzMnOiAgICAgJ3VuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG4gICAgXHRcbiAgICAnaW50JzogICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnaXZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcblxuICAgICdtYXQyJzogICAgICd1bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0Myc6ICAgICAndW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG4gICAgJ21hdDQnOiAgICAgJ3VuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuXG4gICAgJ3NhbXBsZXIyRCc6J3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG52YXIgR0xTTF9UT19BUlJBWV9TRVRURVJTID0ge1xuXG4gICAgJ2Zsb2F0JzogICAgJ3VuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjNCc6ICAgICAndW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG4gICBcbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdDtcblxuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24odHlwZSkgXG57IFxuICAgIHJldHVybiBHTFNMX1RPX1NJWkVbdHlwZV07XG59XG5cblxudmFyIEdMU0xfVE9fU0laRSA9IHtcbiAgICAnZmxvYXQnOiAgICAxLFxuICAgICd2ZWMyJzogICAgIDIsXG4gICAgJ3ZlYzMnOiAgICAgMyxcbiAgICAndmVjNCc6ICAgICA0LFxuXG4gICAgJ2ludCc6ICAgICAgMSxcbiAgICAnaXZlYzInOiAgICAyLFxuICAgICdpdmVjMyc6ICAgIDMsXG4gICAgJ2l2ZWM0JzogICAgNCxcblxuICAgICdib29sJzogICAgIDEsXG4gICAgJ2J2ZWMyJzogICAgMixcbiAgICAnYnZlYzMnOiAgICAzLFxuICAgICdidmVjNCc6ICAgIDQsXG5cbiAgICAnbWF0Mic6ICAgICA0LFxuICAgICdtYXQzJzogICAgIDksXG4gICAgJ21hdDQnOiAgICAgMTYsXG5cbiAgICAnc2FtcGxlcjJEJzogIDFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24oZ2wsIHR5cGUpIFxue1xuICAgIGlmKCFHTF9UQUJMRSkgXG4gICAge1xuICAgICAgICB2YXIgdHlwZU5hbWVzID0gT2JqZWN0LmtleXMoR0xfVE9fR0xTTF9UWVBFUyk7XG5cbiAgICAgICAgR0xfVEFCTEUgPSB7fTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdHlwZU5hbWVzLmxlbmd0aDsgKytpKSBcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHRuID0gdHlwZU5hbWVzW2ldO1xuICAgICAgICAgICAgR0xfVEFCTEVbIGdsW3RuXSBdID0gR0xfVE9fR0xTTF9UWVBFU1t0bl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIEdMX1RBQkxFW3R5cGVdO1xufVxuXG52YXIgR0xfVEFCTEUgPSBudWxsO1xuXG52YXIgR0xfVE9fR0xTTF9UWVBFUyA9IHtcbiAgJ0ZMT0FUJzogICAgICAgJ2Zsb2F0JyxcbiAgJ0ZMT0FUX1ZFQzInOiAgJ3ZlYzInLFxuICAnRkxPQVRfVkVDMyc6ICAndmVjMycsXG4gICdGTE9BVF9WRUM0JzogICd2ZWM0JyxcblxuICAnSU5UJzogICAgICAgICAnaW50JyxcbiAgJ0lOVF9WRUMyJzogICAgJ2l2ZWMyJyxcbiAgJ0lOVF9WRUMzJzogICAgJ2l2ZWMzJyxcbiAgJ0lOVF9WRUM0JzogICAgJ2l2ZWM0JyxcbiAgXG4gICdCT09MJzogICAgICAgICdib29sJyxcbiAgJ0JPT0xfVkVDMic6ICAgJ2J2ZWMyJyxcbiAgJ0JPT0xfVkVDMyc6ICAgJ2J2ZWMzJyxcbiAgJ0JPT0xfVkVDNCc6ICAgJ2J2ZWM0JyxcbiAgXG4gICdGTE9BVF9NQVQyJzogICdtYXQyJyxcbiAgJ0ZMT0FUX01BVDMnOiAgJ21hdDMnLFxuICAnRkxPQVRfTUFUNCc6ICAnbWF0NCcsXG4gIFxuICAnU0FNUExFUl8yRCc6ICAnc2FtcGxlcjJEJyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwU2l6ZTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvQm9vbCh2KSB7XG4gICAgICAgIHJldHVybiAhIXY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vdElkKHYpIHtcbiAgICAgICAgcmV0dXJuICF2O1xuICAgIH1cblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcHJldmlvdXNfYXN5bmM7XG5cbiAgICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gICAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZiB8fFxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgdGhpcztcblxuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgICAgcHJldmlvdXNfYXN5bmMgPSByb290LmFzeW5jO1xuICAgIH1cblxuICAgIGFzeW5jLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBwcmV2aW91c19hc3luYztcbiAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbmx5X29uY2UoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIC8vIFBvcnRlZCBmcm9tIHVuZGVyc2NvcmUuanMgaXNPYmplY3RcbiAgICB2YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9pc0FycmF5TGlrZShhcnIpIHtcbiAgICAgICAgcmV0dXJuIF9pc0FycmF5KGFycikgfHwgKFxuICAgICAgICAgICAgLy8gaGFzIGEgcG9zaXRpdmUgaW50ZWdlciBsZW5ndGggcHJvcGVydHlcbiAgICAgICAgICAgIHR5cGVvZiBhcnIubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICBhcnIubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggJSAxID09PSAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2FycmF5RWFjaChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfbWFwKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdG9yKGFycltpbmRleF0sIGluZGV4LCBhcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JhbmdlKGNvdW50KSB7XG4gICAgICAgIHJldHVybiBfbWFwKEFycmF5KGNvdW50KSwgZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGk7IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9yZWR1Y2UoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBfYXJyYXlFYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9mb3JFYWNoT2Yob2JqZWN0LCBpdGVyYXRvcikge1xuICAgICAgICBfYXJyYXlFYWNoKF9rZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnIsIGl0ZW0pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfa2V5SXRlcmF0b3IoY29sbCkge1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB2YXIgbGVuO1xuICAgICAgICB2YXIga2V5cztcbiAgICAgICAgaWYgKF9pc0FycmF5TGlrZShjb2xsKSkge1xuICAgICAgICAgICAgbGVuID0gY29sbC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBsZW4gPyBpIDogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXlzID0gX2tleXMoY29sbCk7XG4gICAgICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGtleXNbaV0gOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpbWlsYXIgdG8gRVM2J3MgcmVzdCBwYXJhbSAoaHR0cDovL2FyaXlhLm9maWxhYnMuY29tLzIwMTMvMDMvZXM2LWFuZC1yZXN0LXBhcmFtZXRlci5odG1sKVxuICAgIC8vIFRoaXMgYWNjdW11bGF0ZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byBhbiBhcnJheSwgYWZ0ZXIgYSBnaXZlbiBpbmRleC5cbiAgICAvLyBGcm9tIHVuZGVyc2NvcmUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzIxNDApLlxuICAgIGZ1bmN0aW9uIF9yZXN0UGFyYW0oZnVuYywgc3RhcnRJbmRleCkge1xuICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCk7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSB1bnVzZWQgYnV0IGhhbmRsZSBjYXNlcyBvdXRzaWRlIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50OlxuICAgICAgICAgICAgLy8gdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICAgICAgICAvLyBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAvLyAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICAgICAgICAvLyByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBleHBvcnRlZCBhc3luYyBtb2R1bGUgZnVuY3Rpb25zIC8vLy9cblxuICAgIC8vLy8gbmV4dFRpY2sgaW1wbGVtZW50YXRpb24gd2l0aCBicm93c2VyLWNvbXBhdGlibGUgZmFsbGJhY2sgLy8vL1xuXG4gICAgLy8gY2FwdHVyZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZSB0byBndWFyZCBhZ2FpbnN0IGZha2VUaW1lciBtb2Nrc1xuICAgIHZhciBfc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzZXRJbW1lZGlhdGU7XG5cbiAgICB2YXIgX2RlbGF5ID0gX3NldEltbWVkaWF0ZSA/IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgIF9zZXRJbW1lZGlhdGUoZm4pO1xuICAgIH0gOiBmdW5jdGlvbihmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBfZGVsYXk7XG4gICAgfVxuICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IF9zZXRJbW1lZGlhdGUgPyBfZGVsYXkgOiBhc3luYy5uZXh0VGljaztcblxuXG4gICAgYXN5bmMuZm9yRWFjaCA9XG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9XG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mU2VyaWVzKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG5cbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPVxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9lYWNoT2ZMaW1pdChsaW1pdCkoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoT2YgPVxuICAgIGFzeW5jLmVhY2hPZiA9IGZ1bmN0aW9uIChvYmplY3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBvYmplY3QgPSBvYmplY3QgfHwgW107XG5cbiAgICAgICAgdmFyIGl0ZXIgPSBfa2V5SXRlcmF0b3Iob2JqZWN0KTtcbiAgICAgICAgdmFyIGtleSwgY29tcGxldGVkID0gMDtcblxuICAgICAgICB3aGlsZSAoKGtleSA9IGl0ZXIoKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpdGVyYXRvcihvYmplY3Rba2V5XSwga2V5LCBvbmx5X29uY2UoZG9uZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gMCkgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZC0tO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBrZXkgaXMgbnVsbCBpbiBjYXNlIGl0ZXJhdG9yIGlzbid0IGV4aGF1c3RlZFxuICAgICAgICAgICAgLy8gYW5kIGRvbmUgcmVzb2x2ZWQgc3luY2hyb25vdXNseS5cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gbnVsbCAmJiBjb21wbGV0ZWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZlNlcmllcyA9XG4gICAgYXN5bmMuZWFjaE9mU2VyaWVzID0gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iaiA9IG9iaiB8fCBbXTtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgdmFyIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRvcihvYmpba2V5XSwga2V5LCBvbmx5X29uY2UoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoaXRlcmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5mb3JFYWNoT2ZMaW1pdCA9XG4gICAgYXN5bmMuZWFjaE9mTGltaXQgPSBmdW5jdGlvbiAob2JqLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9lYWNoT2ZMaW1pdChsaW1pdCkob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZWFjaE9mTGltaXQobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBydW5uaW5nID0gMDtcbiAgICAgICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChkb25lICYmIHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWwoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZiwgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb1BhcmFsbGVsTGltaXQoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihfZWFjaE9mTGltaXQobGltaXQpLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvU2VyaWVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihhc3luYy5lYWNoT2ZTZXJpZXMsIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gX2lzQXJyYXlMaWtlKGFycikgPyBbXSA6IHt9O1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfYXN5bmNNYXApO1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLmluamVjdCA9XG4gICAgYXN5bmMuZm9sZGwgPVxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgaSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5mb2xkciA9XG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGlkZW50aXR5KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudHJhbnNmb3JtID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGl0ZXJhdG9yO1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBtZW1vO1xuICAgICAgICAgICAgbWVtbyA9IF9pc0FycmF5KGFycikgPyBbXSA6IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuZWFjaE9mKGFyciwgZnVuY3Rpb24odiwgaywgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHYsIGssIGNiKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleDogaW5kZXgsIHZhbHVlOiB4fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soX21hcChyZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICB9KSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMuc2VsZWN0ID1cbiAgICBhc3luYy5maWx0ZXIgPSBkb1BhcmFsbGVsKF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0TGltaXQgPVxuICAgIGFzeW5jLmZpbHRlckxpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID1cbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcblxuICAgIGZ1bmN0aW9uIF9yZWplY3QoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBfZmlsdGVyKGVhY2hmbiwgYXJyLCBmdW5jdGlvbih2YWx1ZSwgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgY2IoIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoZWFjaGZuLCBjaGVjaywgZ2V0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2IpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSBjYihnZXRSZXN1bHQoZmFsc2UsIHZvaWQgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWUoeCwgXywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNiKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2IgJiYgY2hlY2sodikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGdldFJlc3VsdCh0cnVlLCB4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGl0ZXJhdG9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGxpbWl0LCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBsaW1pdDtcbiAgICAgICAgICAgICAgICBlYWNoZm4oYXJyLCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMuYW55ID1cbiAgICBhc3luYy5zb21lID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIHRvQm9vbCwgaWRlbnRpdHkpO1xuXG4gICAgYXN5bmMuc29tZUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5hbGwgPVxuICAgIGFzeW5jLmV2ZXJ5ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIG5vdElkLCBub3RJZCk7XG5cbiAgICBhc3luYy5ldmVyeUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgbm90SWQsIG5vdElkKTtcblxuICAgIGZ1bmN0aW9uIF9maW5kR2V0UmVzdWx0KHYsIHgpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIGFzeW5jLmRldGVjdCA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mU2VyaWVzLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdExpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgaWRlbnRpdHksIF9maW5kR2V0UmVzdWx0KTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoY29tcGFyYXRvciksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgb3B0aW9uYWwsIHNoaWZ0IHRoZSBhcmdzLlxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHJlbWFpbmluZ1Rhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoZm4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gX2luZGV4T2YobGlzdGVuZXJzLCBmbik7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgX2FycmF5RWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2FycmF5RWFjaChrZXlzLCBmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSBfaXNBcnJheSh0YXNrc1trXSkgPyB0YXNrc1trXTogW3Rhc2tzW2tdXTtcbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBfZm9yRWFjaE9mKHJlc3VsdHMsIGZ1bmN0aW9uKHZhbCwgcmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCB0YXNrLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWFkLWxvY2tzXG4gICAgICAgICAgICB2YXIgbGVuID0gcmVxdWlyZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGRlcDtcbiAgICAgICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgICAgICAgIGlmICghKGRlcCA9IHRhc2tzW3JlcXVpcmVzW2xlbl1dKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhcyBpbmV4aXN0YW50IGRlcGVuZGVuY3knKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc0FycmF5KGRlcCkgJiYgX2luZGV4T2YoZGVwLCBrKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGN5Y2xpYyBkZXBlbmRlbmNpZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kgJiYgX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcblxuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHRpbWVzOiBERUZBVUxUX1RJTUVTLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IERFRkFVTFRfSU5URVJWQUxcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgdCA9PT0gJ251bWJlcicpe1xuICAgICAgICAgICAgICAgIGFjYy50aW1lcyA9IHBhcnNlSW50KHQsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiB0ID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodC50aW1lcywgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICAgICAgYWNjLmludGVydmFsID0gcGFyc2VJbnQodC5pbnRlcnZhbCwgMTApIHx8IERFRkFVTFRfSU5URVJWQUw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYXJndW1lbnQgdHlwZSBmb3IgXFwndGltZXNcXCc6ICcgKyB0eXBlb2YgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDEgfHwgbGVuZ3RoID4gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyAtIG11c3QgYmUgZWl0aGVyICh0YXNrKSwgKHRhc2ssIGNhbGxiYWNrKSwgKHRpbWVzLCB0YXNrKSBvciAodGltZXMsIHRhc2ssIGNhbGxiYWNrKScpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA8PSAyICYmIHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGltZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0cywgdGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgb3B0cy50YXNrID0gdGFzaztcblxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVkVGFzayh3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQodGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5SW50ZXJ2YWwoaW50ZXJ2YWwpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKG9wdHMudGltZXMpIHtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5hbEF0dGVtcHQgPSAhKG9wdHMudGltZXMtPTEpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KG9wdHMudGFzaywgZmluYWxBdHRlbXB0KSk7XG4gICAgICAgICAgICAgICAgaWYoIWZpbmFsQXR0ZW1wdCAmJiBvcHRzLmludGVydmFsID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlJbnRlcnZhbChvcHRzLmludGVydmFsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBvcHRzLmNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNhbGxiYWNrIGlzIHBhc3NlZCwgcnVuIHRoaXMgYXMgYSBjb250cm9sbCBmbG93XG4gICAgICAgIHJldHVybiBvcHRzLmNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrO1xuICAgIH07XG5cbiAgICBhc3luYy53YXRlcmZhbGwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGlmICghX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3cmFwSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCh3cmFwSXRlcmF0b3IobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbnN1cmVBc3luYyhpdGVyYXRvcikuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3BhcmFsbGVsKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgbm9vcDtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsIGZ1bmN0aW9uICh0YXNrLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0YXNrKF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLnBhcmFsbGVsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoYXN5bmMuZWFjaE9mLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24odGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoX2VhY2hPZkxpbWl0KGxpbWl0KSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2ZTZXJpZXMsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VDYWxsYmFjayhpbmRleCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYWtlQ2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIGFzeW5jLmFwcGx5ID0gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGNhbGxBcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoY2FsbEFyZ3MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb25jYXQoZWFjaGZuLCBhcnIsIGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIGZuKHgsIGZ1bmN0aW9uIChlcnIsIHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICB2YXIgbmV4dCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdC5hcHBseSh0aGlzLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihuZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gKytjYWxscyA8PSAxIHx8IHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9VbnRpbCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmR1cmluZyA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hlY2spO1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cnV0aCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0KGNoZWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9EdXJpbmcgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIGFzeW5jLmR1cmluZyhmdW5jdGlvbihuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY2FsbHMrKyA8IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBtdXN0IG5vdCBiZSB6ZXJvJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sgfHwgbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBxLnRhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfbmV4dChxLCB0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgd29ya2VycyAtPSAxO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHdvcmtlcnNMaXN0LCBmdW5jdGlvbiAod29ya2VyLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtlciA9PT0gdGFzayAmJiAhcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgdGFza3M6IFtdLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IGNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbm9vcCxcbiAgICAgICAgICAgIGVtcHR5OiBub29wLFxuICAgICAgICAgICAgZHJhaW46IG5vb3AsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHEuZHJhaW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHRydWUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFxLnBhdXNlZCAmJiB3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSh3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBxLnBheWxvYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEucGF5bG9hZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEudGFza3MubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfbWFwKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaCh0YXNrc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UoX25leHQocSwgdGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdW1lQ291bnQgPSBNYXRoLm1pbihxLmNvbmN1cnJlbmN5LCBxLnRhc2tzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSByZXN1bWVDb3VudDsgdysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgcSA9IF9xdWV1ZShmdW5jdGlvbiAoaXRlbXMsIGNiKSB7XG4gICAgICAgICAgICB3b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICAgIGVuZCA9IHNlcXVlbmNlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGJlZyArICgoZW5kIC0gYmVnICsgMSkgPj4+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3BcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoX2JpbmFyeVNlYXJjaChxLnRhc2tzLCBpdGVtLCBfY29tcGFyZVRhc2tzKSArIDEsIDAsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBxLnVuc2hpZnQ7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLmNhcmdvID0gZnVuY3Rpb24gKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gX3F1ZXVlKHdvcmtlciwgMSwgcGF5bG9hZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9jb25zb2xlX2ZuKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGlkZW50aXR5O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIG1lbW9pemVkKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGtleSBpbiBtZW1vKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF90aW1lcyhtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBtYXBwZXIoX3JhbmdlKGNvdW50KSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy50aW1lcyA9IF90aW1lcyhhc3luYy5tYXApO1xuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gX3RpbWVzKGFzeW5jLm1hcFNlcmllcyk7XG4gICAgYXN5bmMudGltZXNMaW1pdCA9IGZ1bmN0aW9uIChjb3VudCwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMubWFwTGltaXQoX3JhbmdlKGNvdW50KSwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBub29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW19yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgbmV4dGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfSldKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoYXQsIFtlcnJdLmNvbmNhdChyZXN1bHRzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5zZXEuYXBwbHkobnVsbCwgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBfYXBwbHlFYWNoKGVhY2hmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbihmbnMsIGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBnbyA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlYWNoZm4oZm5zLCBmdW5jdGlvbiAoZm4sIF8sIGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5hcHBseUVhY2ggPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZik7XG4gICAgYXN5bmMuYXBwbHlFYWNoU2VyaWVzID0gX2FwcGx5RWFjaChhc3luYy5lYWNoT2ZTZXJpZXMpO1xuXG5cbiAgICBhc3luYy5mb3JldmVyID0gZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZG9uZSA9IG9ubHlfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgdmFyIHRhc2sgPSBlbnN1cmVBc3luYyhmbik7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVBc3luYyhmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuXG4gICAgYXN5bmMuY29uc3RhbnQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICB2YXIgYXJncyA9IFtudWxsXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXN5bmMud3JhcFN5bmMgPVxuICAgIGFzeW5jLmFzeW5jaWZ5ID0gZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAoX2lzT2JqZWN0KHJlc3VsdCkgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLm1lc3NhZ2UgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBOb2RlLmpzXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG4gICAgfVxuICAgIC8vIEFNRCAvIFJlcXVpcmVKU1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG5cdCAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXG5cdCAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cblx0ICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSlcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cblx0ICogQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuXHQgKiBVbmljb2RlIHN0cmluZy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gJ3huLS0nICsgZW5jb2RlKHN0cmluZylcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG5cdHB1bnljb2RlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHQndmVyc2lvbic6ICcxLjMuMicsXG5cdFx0LyoqXG5cdFx0ICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHRcdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMpIHtcblx0XHRcdC8vIGluIE5vZGUuanMsIGlvLmpzLCBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IHB1bnljb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5wdW55Y29kZSA9IHB1bnljb2RlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUpIHJldHVybiB0cmlhbmdsZXM7XG5cbiAgICB2YXIgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgc2l6ZTtcblxuICAgIGlmIChoYXNIb2xlcykgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKTtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG4gICAgICAgIG1pblggPSBtYXhYID0gZGF0YVswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xuICAgICAgICAgICAgeSA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIHNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIHNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgICAgICBpLCBqLCBsYXN0O1xuXG4gICAgLy8gY2FsY3VsYXRlIG9yaWdpbmFsIHdpbmRpbmcgb3JkZXIgb2YgYSBwb2x5Z29uIHJpbmdcbiAgICBmb3IgKGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cblxuICAgIC8vIGxpbmsgcG9pbnRzIGludG8gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuICAgIGlmIChjbG9ja3dpc2UgPT09IChzdW0gPiAwKSkge1xuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgc2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChzaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0aWNlIGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZWFyLCB0cmlhbmdsZXMsIGRpbSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDIpO1xuXG4gICAgICAgICAgICAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgd2hpbGUgKHAgIT09IGVhci5wcmV2KSB7XG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG4gICAgdmFyIG1pblRYID0gYS54IDwgYi54ID8gKGEueCA8IGMueCA/IGEueCA6IGMueCkgOiAoYi54IDwgYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoYS55IDwgYy55ID8gYS55IDogYy55KSA6IChiLnkgPCBjLnkgPyBiLnkgOiBjLnkpLFxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1heFRZID0gYS55ID4gYi55ID8gKGEueSA+IGMueSA/IGEueSA6IGMueSkgOiAoYi55ID4gYy55ID8gYi55IDogYy55KTtcblxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgdmFyIG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBzaXplKSxcbiAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgdmFyIHAgPSBlYXIubmV4dFo7XG5cbiAgICB3aGlsZSAocCAmJiBwLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgcCA9IGVhci5wcmV2WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIC8vIGEgc2VsZi1pbnRlcnNlY3Rpb24gd2hlcmUgZWRnZSAodltpLTFdLHZbaV0pIGludGVyc2VjdHMgKHZbaSsxXSx2W2krMl0pXG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcblxuICAgICAgICAgICAgcCA9IHN0YXJ0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBwO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBzdG9wID0gbSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtLm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBtLnggJiZcbiAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoaHkgPCBtLnkgPyBoeCA6IHF4LCBoeSwgbS54LCBtLnksIGh5IDwgbS55ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxU2l6ZSA9PT0gMCB8fCAhcSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwLnogPD0gcS56KSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBzaXplIG9mIHRoZSBkYXRhIGJvdW5kaW5nIGJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlXG4gICAgeCA9IDMyNzY3ICogKHggLSBtaW5YKSAvIHNpemU7XG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAvIHNpemU7XG5cbiAgICB4ID0gKHggfCAoeCA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB4ID0gKHggfCAoeCA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnggPCBsZWZ0bW9zdC54KSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGVxdWFscyhhLCBiKSB8fCBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmXG4gICAgICAgICAgIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYik7XG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgcmV0dXJuIGFyZWEocDEsIHExLCBwMikgPiAwICE9PSBhcmVhKHAxLCBxMSwgcTIpID4gMCAmJlxuICAgICAgICAgICBhcmVhKHAyLCBxMiwgcDEpID4gMCAhPT0gYXJlYShwMiwgcTIsIHExKSA+IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGljZSBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0aWNlIG5vZGVzIGluIGEgcG9seWdvbiByaW5nXG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZVxuICAgIHRoaXMueiA9IG51bGw7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG5cbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuICAgIHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1xuLy8gV2Ugc3RvcmUgb3VyIEVFIG9iamVjdHMgaW4gYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gYH5gIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IG92ZXJyaWRkZW4gb3Jcbi8vIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vIFdlIGFsc28gYXNzdW1lIHRoYXQgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBldmVudCBuYW1lXG4vLyBpcyBhbiBFUzYgU3ltYm9sLlxuLy9cbnZhciBwcmVmaXggPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJyA/ICd+JyA6IGZhbHNlO1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIEV2ZW50RW1pdHRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgQ29udGV4dCBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgZW1pdCBvbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIE1pbmltYWwgRXZlbnRFbWl0dGVyIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkgeyAvKiBOb3RoaW5nIHRvIHNldCAqLyB9XG5cbi8qKlxuICogSG9sZHMgdGhlIGFzc2lnbmVkIEV2ZW50RW1pdHRlcnMgYnkgbmFtZS5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiBhIGxpc3Qgb2YgYXNzaWduZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZXhpc3RzIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7QXJyYXl8Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50LCBleGlzdHMpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGF2YWlsYWJsZSA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoZXhpc3RzKSByZXR1cm4gISFhdmFpbGFibGU7XG4gIGlmICghYXZhaWxhYmxlKSByZXR1cm4gW107XG4gIGlmIChhdmFpbGFibGUuZm4pIHJldHVybiBbYXZhaWxhYmxlLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGF2YWlsYWJsZS5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBhdmFpbGFibGVbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIEVtaXQgYW4gZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSW5kaWNhdGlvbiBpZiB3ZSd2ZSBlbWl0dGVkIGFuIGV2ZW50LlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyBFdmVudExpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdG9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgdGhpcylcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgdGhpcy5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lcjtcbiAgZWxzZSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XS5mbikgdGhpcy5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gICAgZWxzZSB0aGlzLl9ldmVudHNbZXZ0XSA9IFtcbiAgICAgIHRoaXMuX2V2ZW50c1tldnRdLCBsaXN0ZW5lclxuICAgIF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGFuIEV2ZW50TGlzdGVuZXIgdGhhdCdzIG9ubHkgY2FsbGVkIG9uY2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzLCB0cnVlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2Ugd2FudCB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgdGhhdCB3ZSBuZWVkIHRvIGZpbmQuXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IE9ubHkgcmVtb3ZlIGxpc3RlbmVycyBtYXRjaGluZyB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25jZSBsaXN0ZW5lcnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBldmVudHMgPSBbXTtcblxuICBpZiAoZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgIGxpc3RlbmVycy5mbiAhPT0gZm5cbiAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVycy5vbmNlKVxuICAgICAgICB8fCAoY29udGV4dCAmJiBsaXN0ZW5lcnMuY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuXG4gICAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKVxuICAgICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAvL1xuICBpZiAoZXZlbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW2V2dF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgb3Igb25seSB0aGUgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmVycyBmb3IuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKGV2ZW50KSBkZWxldGUgdGhpcy5fZXZlbnRzW3ByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRdO1xuICBlbHNlIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFwcGx5IGFueW1vcmUuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4ndXNlIHN0cmljdCc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiFcbiAqIGFzeW5jXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jXG4gKlxuICogQ29weXJpZ2h0IDIwMTAtMjAxNCBDYW9sYW4gTWNNYWhvblxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbi8qanNoaW50IG9uZXZhcjogZmFsc2UsIGluZGVudDo0ICovXG4vKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cbihmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXN5bmMgPSB7fTtcblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcm9vdCwgcHJldmlvdXNfYXN5bmM7XG5cbiAgICByb290ID0gdGhpcztcbiAgICBpZiAocm9vdCAhPSBudWxsKSB7XG4gICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWQpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkocm9vdCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8gY3Jvc3MtYnJvd3NlciBjb21wYXRpYmxpdHkgZnVuY3Rpb25zIC8vLy9cblxuICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgdmFyIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG5cbiAgICB2YXIgX2VhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBfbWFwID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgaWYgKGFyci5tYXApIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIubWFwKGl0ZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IoeCwgaSwgYSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHZhciBfcmVkdWNlID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIG1lbW8pIHtcbiAgICAgICAgaWYgKGFyci5yZWR1Y2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGl0ZXJhdG9yLCBtZW1vKTtcbiAgICAgICAgfVxuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICBtZW1vID0gaXRlcmF0b3IobWVtbywgeCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuXG4gICAgdmFyIF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgX2VhY2goYXJyLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgb25seV9vbmNlKGRvbmUpICk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2ggPSBhc3luYy5lYWNoO1xuXG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICB2YXIgaXRlcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGFycltjb21wbGV0ZWRdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID0gYXN5bmMuZWFjaFNlcmllcztcblxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZuID0gX2VhY2hMaW1pdChsaW1pdCk7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIFthcnIsIGl0ZXJhdG9yLCBjYWxsYmFja10pO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaExpbWl0ID0gYXN5bmMuZWFjaExpbWl0O1xuXG4gICAgdmFyIF9lYWNoTGltaXQgPSBmdW5jdGlvbiAobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgaWYgKCFhcnIubGVuZ3RoIHx8IGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVwbGVuaXNoICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiBzdGFydGVkIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoYXJyW3N0YXJ0ZWQgLSAxXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB2YXIgZG9QYXJhbGxlbCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvUGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKGxpbWl0LCBmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFtfZWFjaExpbWl0KGxpbWl0KV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBkb1NlcmllcyA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoU2VyaWVzXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBfYXN5bmNNYXAgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1t4LmluZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9tYXBMaW1pdChsaW1pdCkoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB2YXIgX21hcExpbWl0ID0gZnVuY3Rpb24obGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGRvUGFyYWxsZWxMaW1pdChsaW1pdCwgX2FzeW5jTWFwKTtcbiAgICB9O1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihtZW1vLCB4LCBmdW5jdGlvbiAoZXJyLCB2KSB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGluamVjdCBhbGlhc1xuICAgIGFzeW5jLmluamVjdCA9IGFzeW5jLnJlZHVjZTtcbiAgICAvLyBmb2xkbCBhbGlhc1xuICAgIGFzeW5jLmZvbGRsID0gYXN5bmMucmVkdWNlO1xuXG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSkucmV2ZXJzZSgpO1xuICAgICAgICBhc3luYy5yZWR1Y2UocmV2ZXJzZWQsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICAvLyBmb2xkciBhbGlhc1xuICAgIGFzeW5jLmZvbGRyID0gYXN5bmMucmVkdWNlUmlnaHQ7XG5cbiAgICB2YXIgX2ZpbHRlciA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LnZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG4gICAgYXN5bmMuZmlsdGVyU2VyaWVzID0gZG9TZXJpZXMoX2ZpbHRlcik7XG4gICAgLy8gc2VsZWN0IGFsaWFzXG4gICAgYXN5bmMuc2VsZWN0ID0gYXN5bmMuZmlsdGVyO1xuICAgIGFzeW5jLnNlbGVjdFNlcmllcyA9IGFzeW5jLmZpbHRlclNlcmllcztcblxuICAgIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLnJlamVjdCA9IGRvUGFyYWxsZWwoX3JlamVjdCk7XG4gICAgYXN5bmMucmVqZWN0U2VyaWVzID0gZG9TZXJpZXMoX3JlamVjdCk7XG5cbiAgICB2YXIgX2RldGVjdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIG1haW5fY2FsbGJhY2spIHtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKHgpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZGV0ZWN0ID0gZG9QYXJhbGxlbChfZGV0ZWN0KTtcbiAgICBhc3luYy5kZXRlY3RTZXJpZXMgPSBkb1NlcmllcyhfZGV0ZWN0KTtcblxuICAgIGFzeW5jLnNvbWUgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbnkgYWxpYXNcbiAgICBhc3luYy5hbnkgPSBhc3luYy5zb21lO1xuXG4gICAgYXN5bmMuZXZlcnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghdikge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gYWxsIGFsaWFzXG4gICAgYXN5bmMuYWxsID0gYXN5bmMuZXZlcnk7XG5cbiAgICBhc3luYy5zb3J0QnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgYXN5bmMubWFwKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAoZXJyLCBjcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHt2YWx1ZTogeCwgY3JpdGVyaWE6IGNyaXRlcmlhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoZm4pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGhcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldID09PSBmbikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdGFza0NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtYWluaW5nVGFza3MtLVxuICAgICAgICAgICAgX2VhY2gobGlzdGVuZXJzLnNsaWNlKDApLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIHZhciB0aGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZmluYWwgY2FsbGJhY2sgZnJvbSBjYWxsaW5nIGl0c2VsZiBpZiBpdCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdGhlQ2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9lYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKF9rZXlzKHJlc3VsdHMpLCBmdW5jdGlvbihya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIHN1YnNlcXVlbnQgZXJyb3JzIGhpdHRpbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUodGFza0NvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCBNYXRoLmFicyh0YXNrLmxlbmd0aCAtIDEpKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucmV0cnkgPSBmdW5jdGlvbih0aW1lcywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIERFRkFVTFRfVElNRVMgPSA1O1xuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcbiAgICAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHRpbWVzIG5vdCBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICAgICAgdGltZXMgPSBERUZBVUxUX1RJTUVTO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lcyBpcyBhIG51bWJlclxuICAgICAgICB0aW1lcyA9IHBhcnNlSW50KHRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgdmFyIHdyYXBwZWRUYXNrID0gZnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkUmVzdWx0cykge1xuICAgICAgICAgICAgdmFyIHJldHJ5QXR0ZW1wdCA9IGZ1bmN0aW9uKHRhc2ssIGZpbmFsQXR0ZW1wdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKGZ1bmN0aW9uKGVyciwgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKCFlcnIgfHwgZmluYWxBdHRlbXB0LCB7ZXJyOiBlcnIsIHJlc3VsdDogcmVzdWx0fSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXBwZWRSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcykge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KHRhc2ssICEodGltZXMtPTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBjYWxsYmFjaykoZGF0YS5lcnIsIGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrXG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJdGVyYXRvciA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGZ1bmN0aW9uKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGVhY2hmbi5tYXAodGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGVhY2hmbi5lYWNoKF9rZXlzKHRhc2tzKSwgZnVuY3Rpb24gKGssIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGFza3Nba10oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogYXN5bmMubWFwLCBlYWNoOiBhc3luYy5lYWNoIH0sIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogX21hcExpbWl0KGxpbWl0KSwgZWFjaDogX2VhY2hMaW1pdChsaW1pdCkgfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICBhc3luYy5tYXBTZXJpZXModGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5pdGVyYXRvciA9IGZ1bmN0aW9uICh0YXNrcykge1xuICAgICAgICB2YXIgbWFrZUNhbGxiYWNrID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmbi5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCB0YXNrcy5sZW5ndGggLSAxKSA/IG1ha2VDYWxsYmFjayhpbmRleCArIDEpOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KFxuICAgICAgICAgICAgICAgIG51bGwsIGFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgX2NvbmNhdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHIgPSByLmNvbmNhdCh5IHx8IFtdKTtcbiAgICAgICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRlc3QoKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLndoaWxzdCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvV2hpbHN0ID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAodGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMudW50aWwodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAoIXRlc3QuYXBwbHkobnVsbCwgYXJncykpIHtcbiAgICAgICAgICAgICAgICBhc3luYy5kb1VudGlsKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcG9zLCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxLnNhdHVyYXRlZCAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHEuZHJhaW4gPSBudWxsO1xuICAgICAgICAgICAgICBxLnRhc2tzID0gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gcS50YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocS5lbXB0eSAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLmRyYWluICYmIHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UobmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcih0YXNrLmRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSB0cnVlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSBxLmNvbmN1cnJlbmN5OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMucHJpb3JpdHlRdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG5cbiAgICAgICAgZnVuY3Rpb24gX2NvbXBhcmVUYXNrcyhhLCBiKXtcbiAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgIHZhciBiZWcgPSAtMSxcbiAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBzZXF1ZW5jZVttaWRdKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGJlZyA9IG1pZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiZWc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG5vcm1hbCBxdWV1ZVxuICAgICAgICB2YXIgcSA9IGFzeW5jLnF1ZXVlKHdvcmtlciwgY29uY3VycmVuY3kpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciB3b3JraW5nICAgICA9IGZhbHNlLFxuICAgICAgICAgICAgdGFza3MgICAgICAgPSBbXTtcblxuICAgICAgICB2YXIgY2FyZ28gPSB7XG4gICAgICAgICAgICB0YXNrczogdGFza3MsXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBudWxsLFxuICAgICAgICAgICAgZW1wdHk6IG51bGwsXG4gICAgICAgICAgICBkcmFpbjogbnVsbCxcbiAgICAgICAgICAgIGRyYWluZWQ6IHRydWUsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZ28uc2F0dXJhdGVkICYmIHRhc2tzLmxlbmd0aCA9PT0gcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ28uc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoY2FyZ28ucHJvY2Vzcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcygpIHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2luZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2FyZ28uZHJhaW4gJiYgIWNhcmdvLmRyYWluZWQpIGNhcmdvLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvLmRyYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRzID0gdHlwZW9mIHBheWxvYWQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0YXNrcy5zcGxpY2UoMCwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tzLnNwbGljZSgwLCB0YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRzID0gX21hcCh0cywgZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmKGNhcmdvLmVtcHR5KSBjYXJnby5lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHdvcmtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtlcihkcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JraW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKHRzLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjYXJnbztcbiAgICB9O1xuXG4gICAgdmFyIF9jb25zb2xlX2ZuID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZWFjaChhcmdzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbmFtZV0oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIG1lbW9ba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICBxW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfTtcblxuICAgIGFzeW5jLnVubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb3VudGVyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jLm1hcFNlcmllcyhjb3VudGVyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXEgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXN5bmMucmVkdWNlKGZucywgYXJncywgZnVuY3Rpb24gKG5ld2FyZ3MsIGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KFtmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1dKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy5jb21wb3NlID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICB2YXIgX2FwcGx5RWFjaCA9IGZ1bmN0aW9uIChlYWNoZm4sIGZucyAvKmFyZ3MuLi4qLykge1xuICAgICAgICB2YXIgZ28gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzLmNvbmNhdChbY2JdKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgICAgIHJldHVybiBnby5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuYXBwbHlFYWNoID0gZG9QYXJhbGxlbChfYXBwbHlFYWNoKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBkb1NlcmllcyhfYXBwbHlFYWNoKTtcblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbihuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsInZhciBhc3luYyAgICAgICA9IHJlcXVpcmUoJ2FzeW5jJyksXG4gICAgdXJsUGFyc2VyICAgPSByZXF1aXJlKCd1cmwnKSxcbiAgICBSZXNvdXJjZSAgICA9IHJlcXVpcmUoJy4vUmVzb3VyY2UnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgbXVsdGlwbGUgcmVzb3VyY2VzIHRvIGxvYWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KSB7XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICBjb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByb2dyZXNzIHBlcmNlbnQgb2YgdGhlIGxvYWRlciBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRpbmcgc3RhdGUgb2YgdGhlIGxvYWRlciwgdHJ1ZSBpZiBpdCBpcyBjdXJyZW50bHkgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdG90YWwgcHJvZ3Jlc3MgdGhhdCBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGJlZm9yZSBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaWRkbGV3YXJlIHRvIHJ1biBhZnRlciBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfbG9hZFJlc291cmNlYCBmdW5jdGlvbiBib3VuZCB3aXRoIHRoaXMgb2JqZWN0IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kTG9hZFJlc291cmNlID0gdGhpcy5fbG9hZFJlc291cmNlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkxvYWRgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkxvYWQgPSB0aGlzLl9vbkxvYWQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvdXJjZSBidWZmZXIgdGhhdCBmaWxscyB1bnRpbCBgbG9hZGAgaXMgY2FsbGVkIHRvIHN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB0cmFjayBsb2FkIGNvbXBsZXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9udW1Ub0xvYWQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlcyB3YWl0aW5nIHRvIGJlIGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2VbXX1cbiAgICAgKi9cbiAgICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX2JvdW5kTG9hZFJlc291cmNlLCBjb25jdXJyZW5jeSk7XG5cbiAgICAvKipcbiAgICAgKiBBbGwgdGhlIHJlc291cmNlcyBmb3IgdGhpcyBsb2FkZXIga2V5ZWQgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIFJlc291cmNlPn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgb3IgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwcm9ncmVzc1xuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGVycm9yZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGxvYWRlciBiZWdpbnMgdG8gcHJvY2VzcyB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBxdWV1ZWQgcmVzb3VyY2VzIGFsbCBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbi8qKlxuICogQWRkcyBhIHJlc291cmNlIChvciBtdWx0aXBsZSByZXNvdXJjZXMpIHRvIHRoZSBsb2FkZXIgcXVldWUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gdGFrZSBhIHdpZGUgdmFyaWV0eSBvZiBkaWZmZXJlbnQgcGFyYW1ldGVycy4gVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBhbHdheXNcbiAqIHJlcXVpcmVkIHRoZSB1cmwgdG8gbG9hZC4gQWxsIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOlxuICpcbiAqIGBgYGpzXG4gKiBsb2FkZXJcbiAqICAgICAvLyBub3JtYWwgcGFyYW0gc3ludGF4XG4gKiAgICAgLmFkZCgna2V5JywgJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJywgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCgnaHR0cDovLy4uLicpXG4gKlxuICogICAgIC8vIG9iamVjdCBzeW50YXhcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgbmFtZTogJ2tleTInLFxuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MycsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9XG4gKiAgICAgfSlcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgdXJsOiAnaHR0cHM6Ly8uLi4nLFxuICogICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7fSxcbiAqICAgICAgICAgY3Jvc3NPcmlnaW46IHRydWVcbiAqICAgICB9KVxuICpcbiAqICAgICAvLyB5b3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBvYmplY3RzIG9yIHVybHMgb3IgYm90aFxuICogICAgIC5hZGQoW1xuICogICAgICAgICB7IG5hbWU6ICdrZXk0JywgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgIHsgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgICdodHRwOi8vLi4uJ1xuICogICAgIF0pO1xuICogYGBgXG4gKlxuICogQGFsaWFzIGVucXVldWVcbiAqIEBwYXJhbSBbbmFtZV0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQsIGlmIG5vdCBwYXNzZWQgdGhlIHVybCBpcyB1c2VkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCByZWxhdGl2ZSB0byB0aGUgYmFzZVVybCBvZiB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7Ym9vbGVhbn0gSXMgdGhpcyByZXF1ZXN0IGNyb3NzLW9yaWdpbj8gRGVmYXVsdCBpcyB0byBkZXRlcm1pbmUgYXV0b21hdGljYWxseS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5sb2FkVHlwZT1SZXNvdXJjZS5MT0FEX1RZUEUuWEhSXSB7UmVzb3VyY2UuWEhSX0xPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGlzIHNwZWNpZmljIHJlc291cmNlIGNvbXBsZXRlcyBsb2FkaW5nLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFkZCA9IExvYWRlci5wcm90b3R5cGUuZW5xdWV1ZSA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIGNiKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIG9mIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hZGQobmFtZVtpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBpZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluc3RlYWQgb2YgcGFyYW1zXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYiA9IHVybCB8fCBuYW1lLmNhbGxiYWNrIHx8IG5hbWUub25Db21wbGV0ZTtcbiAgICAgICAgb3B0aW9ucyA9IG5hbWU7XG4gICAgICAgIHVybCA9IG5hbWUudXJsO1xuICAgICAgICBuYW1lID0gbmFtZS5uYW1lIHx8IG5hbWUua2V5IHx8IG5hbWUudXJsO1xuICAgIH1cblxuICAgIC8vIGNhc2Ugd2hlcmUgbm8gbmFtZSBpcyBwYXNzZWQgc2hpZnQgYWxsIGFyZ3Mgb3ZlciBieSBvbmUuXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHVybDtcbiAgICAgICAgdXJsID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBzaGlmdGVkIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIHVybC5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB1cmwgcGFzc2VkIHRvIGFkZCByZXNvdXJjZSB0byBsb2FkZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gb3B0aW9ucyBhcmUgb3B0aW9uYWwgc28gcGVvcGxlIG1pZ2h0IHBhc3MgYSBmdW5jdGlvbiBhbmQgbm8gb3B0aW9uc1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHJlc291cmNlIGFscmVhZHkgZXhpc3RzLlxuICAgIGlmICh0aGlzLnJlc291cmNlc1tuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc291cmNlIHdpdGggbmFtZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgIH1cblxuICAgIC8vIGFkZCBiYXNlIHVybCBpZiB0aGlzIGlzbid0IGFuIGFic29sdXRlIHVybFxuICAgIHVybCA9IHRoaXMuX2hhbmRsZUJhc2VVcmwodXJsKTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgc3RvcmUgdGhlIHJlc291cmNlXG4gICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0gPSBuZXcgUmVzb3VyY2UobmFtZSwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0ub25jZSgnYWZ0ZXJNaWRkbGV3YXJlJywgY2IpO1xuICAgIH1cblxuICAgIHRoaXMuX251bVRvTG9hZCsrO1xuXG4gICAgLy8gaWYgYWxyZWFkeSBsb2FkaW5nIGFkZCBpdCB0byB0aGUgd29ya2VyIHF1ZXVlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAoMTAwIC0gdGhpcy5wcm9ncmVzcykgLyAodGhpcy5fcXVldWUubGVuZ3RoKCkgKyB0aGlzLl9xdWV1ZS5ydW5uaW5nKCkpO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgYnVmZmVyIGl0IHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSBsYXRlclxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9idWZmZXIucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAxMDAgLyB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuTG9hZGVyLnByb3RvdHlwZS5faGFuZGxlQmFzZVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFyc2VkVXJsID0gdXJsUGFyc2VyLnBhcnNlKHVybCk7XG5cbiAgICAvLyBhYnNvbHV0ZSB1cmwsIGp1c3QgdXNlIGl0IGFzIGlzLlxuICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgfHwgcGFyc2VkVXJsLnBhdGhuYW1lLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBpZiBiYXNlVXJsIGRvZXNuJ3QgZW5kIGluIHNsYXNoIGFuZCB1cmwgZG9lc24ndCBzdGFydCB3aXRoIHNsYXNoLCB0aGVuIGFkZCBhIHNsYXNoIGluYmV0d2VlblxuICAgIGlmIChcbiAgICAgICAgdGhpcy5iYXNlVXJsLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmJhc2VVcmwubGFzdEluZGV4T2YoJy8nKSAhPT0gdGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgdXJsLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyAnLycgKyB1cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsICsgdXJsO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBTZXRzIHVwIGEgbWlkZGxld2FyZSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuICpiZWZvcmUqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyBwcmVcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYmVmb3JlID0gTG9hZGVyLnByb3RvdHlwZS5wcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLnB1c2goZm4pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmFmdGVyKiB0aGVcbiAqIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqXG4gKiBAYWxpYXMgdXNlXG4gKiBAcGFyYW0gbWlkZGxld2FyZSB7ZnVuY3Rpb259IFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFmdGVyID0gTG9hZGVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9hZnRlck1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoZSBxdWV1ZSBvZiB0aGUgbG9hZGVyIHRvIHByZXBhcmUgZm9yIGEgbmV3IGxvYWQuXG4gKlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvLyB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG4gICAgLy8gdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gICAgdGhpcy5fcXVldWUuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGxvYWRpbmcgdGhlIHF1ZXVlZCByZXNvdXJjZXMuXG4gKlxuICogQGZpcmVzIHN0YXJ0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgYGNvbXBsZXRlYCBldmVudC5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgLy8gcmVnaXN0ZXIgY29tcGxldGUgY2FsbGJhY2sgaWYgdGhleSBwYXNzIG9uZVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcXVldWUgaGFzIGFscmVhZHkgc3RhcnRlZCB3ZSBhcmUgZG9uZSBoZXJlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm90aWZ5IG9mIHN0YXJ0XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gc3RhcnQgdGhlIGludGVybmFsIHF1ZXVlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLl9idWZmZXJbaV0pO1xuICAgIH1cblxuICAgIC8vIGVtcHR5IHRoZSBidWZmZXJcbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBMb2FkcyBhIHNpbmdsZSByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX2xvYWRSZXNvdXJjZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZGVxdWV1ZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHJlc291cmNlLl9kZXF1ZXVlID0gZGVxdWV1ZTtcblxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gcmVzb3VyY2Uub24oJ3Byb2dyZXNzJywgc2VsZi5lbWl0LmJpbmQoc2VsZiwgJ3Byb2dyZXNzJykpO1xuXG4gICAgICAgIHJlc291cmNlLmxvYWQoc2VsZi5fYm91bmRPbkxvYWQpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgb25jZSBlYWNoIHJlc291cmNlIGhhcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzLCB0aGlzLnJlc291cmNlcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBlYWNoIHRpbWUgYSByZXNvdXJjZXMgaXMgbG9hZGVkLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQGZpcmVzIGVycm9yXG4gKiBAZmlyZXMgbG9hZFxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgdGhpcy5wcm9ncmVzcyArPSB0aGlzLl9wcm9ncmVzc0NodW5rO1xuXG4gICAgdGhpcy5lbWl0KCdwcm9ncmVzcycsIHRoaXMsIHJlc291cmNlKTtcblxuICAgIC8vIHJ1biBtaWRkbGV3YXJlLCB0aGlzICptdXN0KiBoYXBwZW4gYmVmb3JlIGRlcXVldWUgc28gc3ViLWFzc2V0cyBnZXQgYWRkZWQgcHJvcGVybHlcbiAgICB0aGlzLl9ydW5NaWRkbGV3YXJlKHJlc291cmNlLCB0aGlzLl9hZnRlck1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzb3VyY2UuZW1pdCgnYWZ0ZXJNaWRkbGV3YXJlJywgcmVzb3VyY2UpO1xuXG4gICAgICAgIHRoaXMuX251bVRvTG9hZC0tO1xuXG4gICAgICAgIC8vIGRvIGNvbXBsZXRpb24gY2hlY2tcbiAgICAgICAgaWYgKHRoaXMuX251bVRvTG9hZCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgIHRoaXMuX29uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc291cmNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgcmVzb3VyY2UuZXJyb3IsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZCcsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuXG5cbiAgICAvLyByZW1vdmUgdGhpcyByZXNvdXJjZSBmcm9tIHRoZSBhc3luYyBxdWV1ZVxuICAgIHJlc291cmNlLl9kZXF1ZXVlKCk7XG59O1xuXG4vKipcbiAqIFJ1biBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvbiBhIHJlc291cmNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX3J1bk1pZGRsZXdhcmUgPSBmdW5jdGlvbiAocmVzb3VyY2UsIGZucywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzKGZucywgZnVuY3Rpb24gKGZuLCBuZXh0KSB7XG4gICAgICAgIGZuLmNhbGwoc2VsZiwgcmVzb3VyY2UsIG5leHQpO1xuICAgIH0sIGNiLmJpbmQodGhpcywgcmVzb3VyY2UpKTtcbn07XG5cbkxvYWRlci5MT0FEX1RZUEUgPSBSZXNvdXJjZS5MT0FEX1RZUEU7XG5Mb2FkZXIuWEhSX1JFQURZX1NUQVRFID0gUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFO1xuTG9hZGVyLlhIUl9SRVNQT05TRV9UWVBFID0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEU7XG4iLCJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIF91cmwgPSByZXF1aXJlKCd1cmwnKSxcbiAgICAvLyB0ZXN0cyBpcyBDT1JTIGlzIHN1cHBvcnRlZCBpbiBYSFIsIGlmIG5vdCB3ZSBuZWVkIHRvIHVzZSBYRFJcbiAgICB1c2VYZHIgPSAhISh3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiAobmV3IFhNTEh0dHBSZXF1ZXN0KCkpKSksXG4gICAgdGVtcEFuY2hvciA9IG51bGw7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgYSBzaW5nbGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnlcbiAqIGEgc2luZ2xlIFVSTC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBuYW1lIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCBmb3IgYXVkaW8vdmlkZW8gbG9hZHMgeW91IGNhbiBwYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMuXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5jcm9zc09yaWdpbl0ge3N0cmluZ3xib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5MT0FEX1RZUEV9IEhvdyBzaG91bGQgdGhpcyByZXNvdXJjZSBiZSBsb2FkZWQ/XG4gKiBAcGFyYW0gW29wdGlvbnMueGhyVHlwZT1SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ERUZBVUxUXSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IEhvdyBzaG91bGQgdGhlIGRhdGEgYmVpbmdcbiAqICAgICAgbG9hZGVkIGJlIGludGVycHJldGVkIHdoZW4gdXNpbmcgWEhSP1xuICogQHBhcmFtIFtvcHRpb25zLm1ldGFkYXRhXSB7b2JqZWN0fSBFeHRyYSBpbmZvIGZvciBtaWRkbGV3YXJlLlxuICovXG5mdW5jdGlvbiBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggbmFtZSBhbmQgdXJsIGFyZSByZXF1aXJlZCBmb3IgY29uc3RydWN0aW5nIGEgcmVzb3VyY2UuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVybCB1c2VkIHRvIGxvYWQgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHVybCBpcyBhIGRhdGEgdXJsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzRGF0YVVybCA9IHRoaXMudXJsLmluZGV4T2YoJ2RhdGE6JykgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSB0aGF0IHdhcyBsb2FkZWQgYnkgdGhlIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55fVxuICAgICAqL1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBvcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJ2Fub255bW91cycgOiBvcHRpb25zLmNyb3NzT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCBvZiBsb2FkaW5nIHRvIHVzZSBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlLkxPQURfVFlQRX1cbiAgICAgKi9cbiAgICB0aGlzLmxvYWRUeXBlID0gb3B0aW9ucy5sb2FkVHlwZSB8fCB0aGlzLl9kZXRlcm1pbmVMb2FkVHlwZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgdXNlZCB0byBsb2FkIHRoZSByZXNvdXJjZSB2aWEgWEhSLiBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMueGhyVHlwZSA9IG9wdGlvbnMueGhyVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgKGlmIGFueSkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFcnJvcn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBYSFIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLiBUaGlzIGlzIG9ubHkgc2V0XG4gICAgICogd2hlbiBgbG9hZFR5cGVgIGlzIGBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1hNTEh0dHBSZXF1ZXN0fVxuICAgICAqL1xuICAgIHRoaXMueGhyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMganNvbi4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNKc29uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIHhtbC4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNYbWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gaW1hZ2UgdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0ltYWdlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGFuIGF1ZGlvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNBdWRpbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhIHZpZGVvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNWaWRlbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBkZXF1ZXVlYCBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgYSBzdG9yYWdlIHBsYWNlIGZvciB0aGUgYXN5bmMgcXVldWUgZGVxdWV1ZSBtZXRob2RcbiAgICAgKiB1c2VkIHByaXZhdGVseSBieSB0aGUgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kZXF1ZXVlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tcGxldGVgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZENvbXBsZXRlID0gdGhpcy5jb21wbGV0ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25FcnJvcmAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25FcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uUHJvZ3Jlc3NgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MgPSB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyk7XG5cbiAgICAvLyB4aHIgY2FsbGJhY2tzXG4gICAgdGhpcy5fYm91bmRYaHJPbkVycm9yID0gdGhpcy5feGhyT25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25BYm9ydCA9IHRoaXMuX3hock9uQWJvcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9ib3VuZFhock9uTG9hZCA9IHRoaXMuX3hock9uTG9hZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0ID0gdGhpcy5feGRyT25UaW1lb3V0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJlc291cmNlIGJlaW5ncyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBlYWNoIHRpbWUgcHJvZ3Jlc3Mgb2YgdGhpcyByZXNvdXJjZSBsb2FkIHVwZGF0ZXMuXG4gICAgICogTm90IGFsbCByZXNvdXJjZXMgdHlwZXMgYW5kIGxvYWRlciBzeXN0ZW1zIGNhbiBzdXBwb3J0IHRoaXMgZXZlbnRcbiAgICAgKiBzbyBzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIElmIHRoZSByZXNvdXJjZVxuICAgICAqIGlzIGJlaW5nIGxvYWRlZCBvbiBhIG1vZGVybiBicm93c2VyLCB1c2luZyBYSFIsIGFuZCB0aGUgcmVtb3RlIHNlcnZlclxuICAgICAqIHByb3Blcmx5IHNldHMgQ29udGVudC1MZW5ndGggaGVhZGVycywgdGhlbiB0aGlzIHdpbGwgYmUgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHRoaXMgcmVzb3VyY2UgaGFzIGxvYWRlZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGl0IHdpbGxcbiAgICAgKiBiZSBpbiB0aGUgYGVycm9yYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb21wbGV0ZVxuICAgICAqIEBtZW1iZXJvZiBSZXNvdXJjZSNcbiAgICAgKi9cbn1cblxuUmVzb3VyY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblJlc291cmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlc291cmNlO1xubW9kdWxlLmV4cG9ydHMgPSBSZXNvdXJjZTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgcmVzb3VyY2UgYXMgY29tcGxldGUuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIGluIGEgd3JhcHBlciBvciBzb21ldGhpbmcuLi5ncm9zcy4uLi5cbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvcik7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgICBpZiAodGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGhyLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub250aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMueGhyLm9ucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25sb2FkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogS2lja3Mgb2ZmIGxvYWRpbmcgb2YgdGhpcyByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gaWYgYSBjYWxsYmFjayBpcyBzZXQsIGxpc3RlbiBmb3IgY29tcGxldGUgZXZlbnRcbiAgICBpZiAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luID09PSBmYWxzZSB8fCB0eXBlb2YgdGhpcy5jcm9zc09yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHRoaXMuX2RldGVybWluZUNyb3NzT3JpZ2luKHRoaXMudXJsKTtcbiAgICB9XG5cbiAgICBzd2l0Y2godGhpcy5sb2FkVHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRTpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRJbWFnZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuQVVESU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlZJREVPOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5YSFI6XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodXNlWGRyICYmIHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGRyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGhyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEltYWdlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLnNyYyA9IHRoaXMudXJsO1xuXG4gICAgdGhpcy5pc0ltYWdlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBIVE1MQXVkaW9FbGVtZW50IG9yIEhUTUxWaWRlb0VsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdhdWRpbycgJiYgdHlwZW9mIEF1ZGlvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQXVkaW8oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBlbGVtZW50ICcgKyB0eXBlKTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBmb3IgQ29jb29uSlMgQ2FudmFzKyBydW50aW1lLCBsYWNrcyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKVxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUykge1xuICAgICAgICB0aGlzLmRhdGEuc3JjID0gQXJyYXkuaXNBcnJheSh0aGlzLnVybCkgPyB0aGlzLnVybFswXSA6IHRoaXMudXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51cmwpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXJsLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybFtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1snaXMnICsgdHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSldID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUsIGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YS5sb2FkKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhNTEh0dHBSZXF1ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBzZXQgdGhlIHJlcXVlc3QgdHlwZSBhbmQgdXJsXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsLCB0cnVlKTtcblxuICAgIC8vIGxvYWQganNvbiBhcyB0ZXh0IGFuZCBwYXJzZSBpdCBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgLy8gKmNvdWdoKiBzYWZhcmkgKmNvdWdoKiBjYW4ndCBkZWFsIHdpdGggaXQuXG4gICAgaWYgKHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTiB8fCB0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHRoaXMueGhyVHlwZTtcbiAgICB9XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkLCBmYWxzZSk7XG5cbiAgICB4aHIuc2VuZCgpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBYRG9tYWluUmVxdWVzdC4gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdXBwb3J0IElFOSAoZ3Jvc3MpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhkciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhkciA9IHRoaXMueGhyID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7XG5cbiAgICAvLyBYRG9tYWluUmVxdWVzdCBoYXMgYSBmZXcgcXVpcmtzLiBPY2Nhc2lvbmFsbHkgaXQgd2lsbCBhYm9ydCByZXF1ZXN0c1xuICAgIC8vIEEgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbWFrZSBzdXJlIEFMTCBjYWxsYmFja3MgYXJlIHNldCBldmVuIGlmIG5vdCB1c2VkXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU3ODY5NjYveGRvbWFpbnJlcXVlc3QtYWJvcnRzLXBvc3Qtb24taWUtOVxuICAgIHhkci50aW1lb3V0ID0gNTAwMDtcblxuICAgIHhkci5vbmVycm9yID0gdGhpcy5fYm91bmRYaHJPbkVycm9yO1xuICAgIHhkci5vbnRpbWVvdXQgPSB0aGlzLl9ib3VuZFhkck9uVGltZW91dDtcbiAgICB4ZHIub25wcm9ncmVzcyA9IHRoaXMuX2JvdW5kT25Qcm9ncmVzcztcbiAgICB4ZHIub25sb2FkID0gdGhpcy5fYm91bmRYaHJPbkxvYWQ7XG5cbiAgICB4ZHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gIE5vdGU6IFRoZSB4ZHIuc2VuZCgpIGNhbGwgaXMgd3JhcHBlZCBpbiBhIHRpbWVvdXQgdG8gcHJldmVudCBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmZhY2Ugd2hlcmUgc29tZSByZXF1ZXN0cyBhcmUgbG9zdFxuICAgIC8vICBpZiBtdWx0aXBsZSBYRG9tYWluUmVxdWVzdHMgYXJlIGJlaW5nIHNlbnQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAvLyBTb21lIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9pc3N1ZXMvMTI0OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB4ZHIuc2VuZCgpO1xuICAgIH0sIDApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc291cmNlIHVzZWQgaW4gbG9hZGluZyB2aWEgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSBUaGUgZWxlbWVudCB0eXBlICh2aWRlbyBvciBhdWRpbykuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSBzb3VyY2UgVVJMIHRvIGxvYWQgZnJvbS5cbiAqIEBwYXJhbSBbbWltZV0ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSBvZiB0aGUgdmlkZW9cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fY3JlYXRlU291cmNlID0gZnVuY3Rpb24gKHR5cGUsIHVybCwgbWltZSkge1xuICAgIGlmICghbWltZSkge1xuICAgICAgICBtaW1lID0gdHlwZSArICcvJyArIHVybC5zdWJzdHIodXJsLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gdXJsO1xuICAgIHNvdXJjZS50eXBlID0gbWltZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgZXJyb3JzIG91dC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgZXJyb3IgZXZlbnQgZnJvbSB0aGUgZWxlbWVudCB0aGF0IGVtaXRzIGl0LlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgZWxlbWVudCB1c2luZyAnICsgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgcHJvZ3Jlc3MgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fb25Qcm9ncmVzcyA9ICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGVycm9yIGV2ZW50IGZpcmVzIGZvciB4aHIveGRyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RFcnJvckV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIHJlcVR5cGUodGhpcy54aHIpICsgJyBSZXF1ZXN0IGZhaWxlZC4gJyArXG4gICAgICAgICdTdGF0dXM6ICcgKyB0aGlzLnhoci5zdGF0dXMgKyAnLCB0ZXh0OiBcIicgKyB0aGlzLnhoci5zdGF0dXNUZXh0ICsgJ1wiJ1xuICAgICk7XG5cbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhbiBhYm9ydCBldmVudCBmaXJlcyBmb3IgeGhyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RBYm9ydEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3Qgd2FzIGFib3J0ZWQgYnkgdGhlIHVzZXIuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYSB0aW1lb3V0IGV2ZW50IGZpcmVzIGZvciB4ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGRyT25UaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgdGltZWQgb3V0LicpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gZGF0YSBzdWNjZXNzZnVsbHkgbG9hZHMgZnJvbSBhbiB4aHIveGRyIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdExvYWRFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGhyT25Mb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB4aHIgPSB0aGlzLnhocixcbiAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1cyAhPT0gdW5kZWZpbmVkID8geGhyLnN0YXR1cyA6IDIwMDsgLy9YRFIgaGFzIG5vIGAuc3RhdHVzYCwgYXNzdW1lIDIwMC5cblxuICAgIC8vIHN0YXR1cyBjYW4gYmUgMCB3aGVuIHVzaW5nIHRoZSBmaWxlOi8vIHByb3RvY29sLCBhbHNvIGNoZWNrIGlmIGEgcmVzcG9uc2Ugd2FzIGZvdW5kXG4gICAgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA0IHx8IChzdGF0dXMgPT09IDAgJiYgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkge1xuICAgICAgICAvLyBpZiB0ZXh0LCBqdXN0IHJldHVybiBpdFxuICAgICAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGpzb24sIHBhcnNlIGludG8ganNvbiBvYmplY3RcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0pzb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGxvYWRlZCBqc29uOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHhtbCwgcGFyc2UgaW50byBhbiB4bWwgZG9jdW1lbnQgb3IgZGl2IGVsZW1lbnRcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LkRPTVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhoci5yZXNwb25zZVRleHQsICd0ZXh0L3htbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZGl2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzWG1sID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIHhtbDonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlciB0eXBlcyBqdXN0IHJldHVybiB0aGUgcmVzcG9uc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2UgfHwgeGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignWycgKyB4aHIuc3RhdHVzICsgJ10nICsgeGhyLnN0YXR1c1RleHQgKyAnOicgKyB4aHIucmVzcG9uc2VVUkwpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbmZ1bmN0aW9uIHJlcVR5cGUoeGhyKSB7XG4gICAgcmV0dXJuIHhoci50b1N0cmluZygpLnJlcGxhY2UoJ29iamVjdCAnLCAnJyk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYGNyb3NzT3JpZ2luYCBwcm9wZXJ0eSBmb3IgdGhpcyByZXNvdXJjZSBiYXNlZCBvbiBpZiB0aGUgdXJsXG4gKiBmb3IgdGhpcyByZXNvdXJjZSBpcyBjcm9zcy1vcmlnaW4uIElmIGNyb3NzT3JpZ2luIHdhcyBtYW51YWxseSBzZXQsIHRoaXNcbiAqIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIHRvIHRlc3QuXG4gKiBAcGFyYW0gW2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbl0ge29iamVjdH0gVGhlIGxvY2F0aW9uIG9iamVjdCB0byB0ZXN0IGFnYWluc3QuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjcm9zc09yaWdpbiB2YWx1ZSB0byB1c2UgKG9yIGVtcHR5IHN0cmluZyBmb3Igbm9uZSkuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbiAodXJsLCBsb2MpIHtcbiAgICAvLyBkYXRhOiBhbmQgamF2YXNjcmlwdDogdXJscyBhcmUgY29uc2lkZXJlZCBzYW1lLW9yaWdpblxuICAgIGlmICh1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBpcyB3aW5kb3cubG9jYXRpb25cbiAgICBsb2MgPSBsb2MgfHwgd2luZG93LmxvY2F0aW9uO1xuXG4gICAgaWYgKCF0ZW1wQW5jaG9yKSB7XG4gICAgICAgIHRlbXBBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgfVxuXG4gICAgLy8gbGV0IHRoZSBicm93c2VyIGRldGVybWluZSB0aGUgZnVsbCBocmVmIGZvciB0aGUgdXJsIG9mIHRoaXMgcmVzb3VyY2UgYW5kIHRoZW5cbiAgICAvLyBwYXJzZSB3aXRoIHRoZSBub2RlIHVybCBsaWIsIHdlIGNhbid0IHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgICAvLyBiZWNhdXNlIHRoZXkgZG9uJ3Qgd29yayBpbiBJRTkgOihcbiAgICB0ZW1wQW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgdXJsID0gX3VybC5wYXJzZSh0ZW1wQW5jaG9yLmhyZWYpO1xuXG4gICAgdmFyIHNhbWVQb3J0ID0gKCF1cmwucG9ydCAmJiBsb2MucG9ydCA9PT0gJycpIHx8ICh1cmwucG9ydCA9PT0gbG9jLnBvcnQpO1xuXG4gICAgLy8gaWYgY3Jvc3Mgb3JpZ2luXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gbG9jLmhvc3RuYW1lIHx8ICFzYW1lUG9ydCB8fCB1cmwucHJvdG9jb2wgIT09IGxvYy5wcm90b2NvbCkge1xuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZXNwb25zZVR5cGUgb2YgYW4gWEhSIHJlcXVlc3QgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGVcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSByZXNwb25zZVR5cGUgdG8gdXNlLlxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZVhoclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlc291cmNlLl94aHJUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVMb2FkVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX2xvYWRUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXMudXJsLFxuICAgICAgICBleHQ7XG5cbiAgICBpZiAodGhpcy5pc0RhdGFVcmwpIHtcbiAgICAgICAgdmFyIHNsYXNoSW5kZXggPSB1cmwuaW5kZXhPZignLycpO1xuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHNsYXNoSW5kZXggKyAxLCB1cmwuaW5kZXhPZignOycsIHNsYXNoSW5kZXgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBxdWVyeVN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXh0ID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQ7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG1pbWUgdHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgcmVzcG9uc2VUeXBlIG9mXG4gKiByZXNvdXJjZSBiZWluZyBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZ2V0TWltZUZyb21YaHJUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5JztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0I6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2Jsb2InO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQ6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCc7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQ6XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVDpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG5cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsb2FkaW5nIGEgcmVzb3VyY2UgY2FuIHVzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBMT0FEX1RZUEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuWEhSIC0gVXNlcyBYTUxIdHRwUmVxdWVzdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuSU1BR0UgLSBVc2VzIGFuIGBJbWFnZWAgb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5BVURJTyAtIFVzZXMgYW4gYEF1ZGlvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLlZJREVPIC0gVXNlcyBhIGBWaWRlb2Agb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICovXG5SZXNvdXJjZS5MT0FEX1RZUEUgPSB7XG4gICAgWEhSOiAgICAxLFxuICAgIElNQUdFOiAgMixcbiAgICBBVURJTzogIDMsXG4gICAgVklERU86ICA0XG59O1xuXG4vKipcbiAqIFRoZSBYSFIgcmVhZHkgc3RhdGVzLCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gWEhSX1JFQURZX1NUQVRFXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLlVOU0VOVCAtIG9wZW4oKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5PUEVORUQgLSBzZW5kKCloYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuSEVBREVSU19SRUNFSVZFRCAtIHNlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuTE9BRElORyAtIERvd25sb2FkaW5nOyByZXNwb25zZVRleHQgaG9sZHMgcGFydGlhbCBkYXRhLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5ET05FIC0gVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFID0ge1xuICAgIFVOU0VOVDogMCxcbiAgICBPUEVORUQ6IDEsXG4gICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICBMT0FESU5HOiAzLFxuICAgIERPTkU6IDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVTUE9OU0VfVFlQRVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQgLSBkZWZhdWx0cyB0byB0ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSIC0gQXJyYXlCdWZmZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CTE9CIC0gQmxvYlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UIC0gRG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5KU09OIC0gT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCAtIFN0cmluZ1xuICovXG5SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRSA9IHtcbiAgICBERUZBVUxUOiAgICAndGV4dCcsXG4gICAgQlVGRkVSOiAgICAgJ2FycmF5YnVmZmVyJyxcbiAgICBCTE9COiAgICAgICAnYmxvYicsXG4gICAgRE9DVU1FTlQ6ICAgJ2RvY3VtZW50JyxcbiAgICBKU09OOiAgICAgICAnanNvbicsXG4gICAgVEVYVDogICAgICAgJ3RleHQnXG59O1xuXG5SZXNvdXJjZS5fbG9hZFR5cGVNYXAgPSB7XG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnYm1wJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGdhJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0Vcbn07XG5cblJlc291cmNlLl94aHJUeXBlTWFwID0ge1xuICAgIC8vIHhtbFxuICAgICd4aHRtbCc6ICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG1sJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG0nOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd4bWwnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0bXgnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0c3gnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdzdmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuXG4gICAgLy8gaW1hZ2VzXG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAncG5nJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBlZyc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnd2VicCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG5cbiAgICAvLyBqc29uXG4gICAgJ2pzb24nOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTixcblxuICAgIC8vIHRleHRcbiAgICAndGV4dCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhULFxuICAgICd0eHQnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFRcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSBsb2FkVHlwZSB7UmVzb3VyY2UuTE9BRF9UWVBFfSBUaGUgbG9hZCB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uTG9hZFR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgbG9hZFR5cGUpIHtcbiAgICBzZXRFeHRNYXAoUmVzb3VyY2UuX2xvYWRUeXBlTWFwLCBleHRuYW1lLCBsb2FkVHlwZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGxvYWQgdHlwZSB0byBiZSB1c2VkIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZXh0bmFtZSB7c3RyaW5nfSBUaGUgZXh0ZW5zaW9uIHRvIHNldCB0aGUgdHlwZSBmb3IsIGUuZy4gXCJwbmdcIiBvciBcImZudFwiXG4gKiBAcGFyYW0geGhyVHlwZSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSB4aHIgdHlwZSB0byBzZXQgaXQgdG8uXG4gKi9cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgeGhyVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5feGhyVHlwZU1hcCwgZXh0bmFtZSwgeGhyVHlwZSk7XG59O1xuXG5mdW5jdGlvbiBzZXRFeHRNYXAobWFwLCBleHRuYW1lLCB2YWwpIHtcbiAgICBpZiAoZXh0bmFtZSAmJiBleHRuYW1lLmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICBleHRuYW1lID0gZXh0bmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRuYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYXBbZXh0bmFtZV0gPSB2YWw7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIHByaXZhdGUgcHJvcGVydHlcbiAgICBfa2V5U3RyOiBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIsXG5cbiAgICBlbmNvZGVCaW5hcnk6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICAgICAgdmFyIGJ5dGVidWZmZXI7XG4gICAgICAgIHZhciBlbmNvZGVkQ2hhckluZGV4ZXMgPSBuZXcgQXJyYXkoNCk7XG4gICAgICAgIHZhciBpbnggPSAwO1xuICAgICAgICB2YXIgam54ID0gMDtcbiAgICAgICAgdmFyIHBhZGRpbmdCeXRlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmlsbCBieXRlIGJ1ZmZlciBhcnJheVxuICAgICAgICAgICAgYnl0ZWJ1ZmZlciA9IG5ldyBBcnJheSgzKTtcbiAgICAgICAgICAgIGZvciAoam54ID0gMDsgam54IDwgYnl0ZWJ1ZmZlci5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhd2F5IGhpZ2gtb3JkZXIgYnl0ZSwgYXMgZG9jdW1lbnRlZCBhdDpcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1MSHR0cFJlcXVlc3QjSGFuZGxpbmdfYmluYXJ5X2RhdGFcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gaW5wdXQuY2hhckNvZGVBdChpbngrKykgJiAweGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCBlYWNoIGVuY29kZWQgY2hhcmFjdGVyLCA2IGJpdHMgYXQgYSB0aW1lXG4gICAgICAgICAgICAvLyBpbmRleCAxOiBmaXJzdCA2IGJpdHNcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1swXSA9IGJ5dGVidWZmZXJbMF0gPj4gMjtcbiAgICAgICAgICAgIC8vIGluZGV4IDI6IHNlY29uZCA2IGJpdHMgKDIgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMSArIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAyKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzFdID0gKChieXRlYnVmZmVyWzBdICYgMHgzKSA8PCA0KSB8IChieXRlYnVmZmVyWzFdID4+IDQpO1xuICAgICAgICAgICAgLy8gaW5kZXggMzogdGhpcmQgNiBiaXRzICg0IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBpbnB1dCBieXRlIDIgKyAyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1syXSA9ICgoYnl0ZWJ1ZmZlclsxXSAmIDB4MGYpIDw8IDIpIHwgKGJ5dGVidWZmZXJbMl0gPj4gNik7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiBmb3J0aCA2IGJpdHMgKDYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IGJ5dGVidWZmZXJbMl0gJiAweDNmO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBwYWRkaW5nIGhhcHBlbmVkLCBhbmQgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBwYWRkaW5nQnl0ZXMgPSBpbnggLSAoaW5wdXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhZGRpbmdCeXRlcykge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxhc3QgMiBjaGFyYWN0ZXJzIHRvIHBhZGRpbmcgY2hhclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbM10gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCBjaGFyYWN0ZXIgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBObyBwYWRkaW5nIC0gcHJvY2VlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb3cgd2Ugd2lsbCBncmFiIGVhY2ggYXBwcm9wcmlhdGUgY2hhcmFjdGVyIG91dCBvZiBvdXIga2V5c3RyaW5nXG4gICAgICAgICAgICAvLyBiYXNlZCBvbiBvdXIgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCBpdCB0byB0aGUgb3V0cHV0IHN0cmluZ1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBlbmNvZGVkQ2hhckluZGV4ZXMubGVuZ3RoOyBqbngrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSB0aGlzLl9rZXlTdHIuY2hhckF0KGVuY29kZWRDaGFySW5kZXhlc1tqbnhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vTG9hZGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJlc291cmNlID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5taWRkbGV3YXJlID0ge1xuICAgIGNhY2hpbmc6IHtcbiAgICAgICAgbWVtb3J5OiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL2NhY2hpbmcvbWVtb3J5JylcbiAgICB9LFxuICAgIHBhcnNpbmc6IHtcbiAgICAgICAgYmxvYjogcmVxdWlyZSgnLi9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2InKVxuICAgIH1cbn07XG4iLCIvLyBhIHNpbXBsZSBpbi1tZW1vcnkgY2FjaGUgZm9yIHJlc291cmNlc1xudmFyIGNhY2hlID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgLy8gaWYgY2FjaGVkLCB0aGVuIHNldCBkYXRhIGFuZCBjb21wbGV0ZSB0aGUgcmVzb3VyY2VcbiAgICAgICAgaWYgKGNhY2hlW3Jlc291cmNlLnVybF0pIHtcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBjYWNoZVtyZXNvdXJjZS51cmxdO1xuICAgICAgICAgICAgcmVzb3VyY2UuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBub3QgY2FjaGVkLCB3YWl0IGZvciBjb21wbGV0ZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlLm9uY2UoJ2NvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgY2FjaGVbdGhpcy51cmxdID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJy4uLy4uL1Jlc291cmNlJyksXG4gICAgYjY0ID0gcmVxdWlyZSgnLi4vLi4vYjY0Jyk7XG5cbndpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cbi8vIGEgbWlkZGxld2FyZSBmb3IgdHJhbnNmb3JtaW5nIFhIUiBsb2FkZWQgQmxvYnMgaW50byBtb3JlIHVzZWZ1bCBvYmplY3RzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgYW4gWEhSIGxvYWQgb2YgYSBibG9iXG4gICAgICAgIGlmIChyZXNvdXJjZS54aHIgJiYgcmVzb3VyY2UueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQikge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYmxvYiBzdXBwb3J0IHdlIHByb2JhYmx5IGdvdCBhIGJpbmFyeSBzdHJpbmcgYmFja1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuQmxvYiB8fCB0eXBlb2YgcmVzb3VyY2UuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlc291cmNlLnhoci5nZXRSZXNwb25zZUhlYWRlcignY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGltYWdlLCBjb252ZXJ0IHRoZSBiaW5hcnkgc3RyaW5nIGludG8gYSBkYXRhIHVybFxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIHR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gJ2RhdGE6JyArIHR5cGUgKyAnO2Jhc2U2NCwnICsgYjY0LmVuY29kZUJpbmFyeShyZXNvdXJjZS54aHIucmVzcG9uc2VUZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5pc0ltYWdlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IHVudGlsIHRoZSBpbWFnZSBsb2FkcyBhbmQgdGhlbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnQgdHlwZSBzYXlzIHRoaXMgaXMgYW4gaW1hZ2UsIHRoZW4gd2Ugc2hvdWxkIHRyYW5zZm9ybSB0aGUgYmxvYiBpbnRvIGFuIEltYWdlIG9iamVjdFxuICAgICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UuZGF0YS50eXBlLmluZGV4T2YoJ2ltYWdlJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXNvdXJjZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmJsb2IgPSByZXNvdXJjZS5kYXRhO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLnNyYyA9IHNyYztcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCB0aGUgbm8gbG9uZ2VyIHVzZWQgYmxvYiBhZnRlciB0aGUgaW1hZ2UgbG9hZHNcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChzcmMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwicGl4aS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIzLjAuMTAtZGV2XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJQaXhpLmpzIGlzIGEgZmFzdCBsaWdodHdlaWdodCAyRCBsaWJyYXJ5IHRoYXQgd29ya3MgYWNyb3NzIGFsbCBkZXZpY2VzLlwiLFxuICBcImF1dGhvclwiOiBcIk1hdCBHcm92ZXNcIixcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIFwiQ2hhZCBFbmdsZXIgPGNoYWRAcGFudGhlcmRldi5jb20+XCIsXG4gICAgXCJSaWNoYXJkIERhdmV5IDxyZGF2ZXlAZ21haWwuY29tPlwiXG4gIF0sXG4gIFwibWFpblwiOiBcIi4vc3JjL2luZGV4LmpzXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ29vZGJveWRpZ2l0YWwuY29tL1wiLFxuICBcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzXCIsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJzdGFydFwiOiBcImd1bHAgJiYgZ3VscCB3YXRjaFwiLFxuICAgIFwidGVzdFwiOiBcImd1bHAgJiYgdGVzdGVtIGNpXCIsXG4gICAgXCJidWlsZFwiOiBcImd1bHBcIixcbiAgICBcImRvY3NcIjogXCJqc2RvYyAtYyAuL2d1bHAvdXRpbC9qc2RvYy5jb25mLmpzb24gLVIgUkVBRE1FLm1kXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW4vXCIsXG4gICAgXCJzcmMvXCIsXG4gICAgXCJDT05UUklCVVRJTkcubWRcIixcbiAgICBcIkxJQ0VOU0VcIixcbiAgICBcInBhY2thZ2UuanNvblwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYXN5bmNcIjogXCJeMS41LjBcIixcbiAgICBcImJyZnNcIjogXCJeMS40LjFcIixcbiAgICBcImVhcmN1dFwiOiBcIl4yLjAuN1wiLFxuICAgIFwiZXZlbnRlbWl0dGVyM1wiOiBcIl4xLjEuMVwiLFxuICAgIFwiZ2wtbWF0cml4XCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS90b2ppL2dsLW1hdHJpeC5naXRcIixcbiAgICBcIm9iamVjdC1hc3NpZ25cIjogXCJeNC4wLjFcIixcbiAgICBcInBpeGktZ2wtY29yZVwiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vR29vZEJveURpZ2l0YWwvcGl4aS1nbC1jb3JlLmdpdFwiLFxuICAgIFwicmVzb3VyY2UtbG9hZGVyXCI6IFwiXjEuNi40XCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYnJvd3NlcmlmeVwiOiBcIl4xMS4xLjBcIixcbiAgICBcImNoYWlcIjogXCJeMy4yLjBcIixcbiAgICBcImRlbFwiOiBcIl4yLjAuMlwiLFxuICAgIFwiZ3VscFwiOiBcIl4zLjkuMFwiLFxuICAgIFwiZ3VscC1jYWNoZWRcIjogXCJeMS4xLjBcIixcbiAgICBcImd1bHAtY29uY2F0XCI6IFwiXjIuNi4wXCIsXG4gICAgXCJndWxwLWRlYnVnXCI6IFwiXjIuMS4wXCIsXG4gICAgXCJndWxwLWhlYWRlclwiOiBcIl4xLjcuMVwiLFxuICAgIFwiZ3VscC1qc2hpbnRcIjogXCJeMS4xMS4yXCIsXG4gICAgXCJndWxwLW1pcnJvclwiOiBcIl4wLjQuMFwiLFxuICAgIFwiZ3VscC1wbHVtYmVyXCI6IFwiXjEuMC4xXCIsXG4gICAgXCJndWxwLXJlbmFtZVwiOiBcIl4xLjIuMlwiLFxuICAgIFwiZ3VscC1zb3VyY2VtYXBzXCI6IFwiXjEuNS4yXCIsXG4gICAgXCJndWxwLXVnbGlmeVwiOiBcIl4xLjQuMVwiLFxuICAgIFwiZ3VscC11dGlsXCI6IFwiXjMuMC42XCIsXG4gICAgXCJqYWd1YXJqcy1qc2RvY1wiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vZGF2aWRzaGltanMvamFndWFyanMtanNkb2MuZ2l0XCIsXG4gICAgXCJqc2RvY1wiOiBcIl4zLjMuMlwiLFxuICAgIFwianNoaW50LXN1bW1hcnlcIjogXCJeMC40LjBcIixcbiAgICBcIm1pbmltaXN0XCI6IFwiXjEuMi4wXCIsXG4gICAgXCJtb2NoYVwiOiBcIl4yLjMuMlwiLFxuICAgIFwicmVxdWlyZS1kaXJcIjogXCJeMC4zLjBcIixcbiAgICBcInJ1bi1zZXF1ZW5jZVwiOiBcIl4xLjEuMlwiLFxuICAgIFwidGVzdGVtXCI6IFwiXjAuOS40XCIsXG4gICAgXCJ2aW55bC1idWZmZXJcIjogXCJeMS4wLjBcIixcbiAgICBcInZpbnlsLXNvdXJjZS1zdHJlYW1cIjogXCJeMS4xLjBcIixcbiAgICBcIndhdGNoaWZ5XCI6IFwiXjMuNC4wXCJcbiAgfSxcbiAgXCJicm93c2VyaWZ5XCI6IHtcbiAgICBcInRyYW5zZm9ybVwiOiBbXG4gICAgICBcImJyZnNcIlxuICAgIF1cbiAgfVxufVxuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8vIGFkZCBzb21lIGV4dHJhIHZhcmlhYmxlcyB0byB0aGUgY29udGFpbmVyLi5cbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKVxuKTtcblxuXG4vKipcbiAqIFRoZSBBY2Nlc3NpYmlsaXR5IG1hbmFnZXIgcmVhY3JlYXRlcyB0aGUgYWJpbGl0eSB0byB0YWIgYW5kIGFuZCBoYXZlIGNvbnRlbnQgcmVhZCBieSBzY3JlZW4gcmVhZGVycy4gVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCBhcyBpdCBjYW4gcG9zc2libHkgaGVscCBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMgYWNjZXNzIHBpeGkgY29udGVudC5cbiAqIE11Y2ggbGlrZSBpbnRlcmFjdGlvbiBhbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgbWFkZSBhY2Nlc3NpYmxlLiBUaGlzIG1hbmFnZXIgd2lsbCBtYXAgdGhlIGV2ZW50cyBhcyBpZiB0aGUgbW91c2Ugd2FzIGJlaW5nIHVzZWQsIG1pbmltaXppbmcgdGhlIGVmZmVyb3QgcmVxdWlyZWQgdG8gaW1wbGVtZW50LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyXG4gKi9cbmZ1bmN0aW9uIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKHJlbmRlcmVyKVxue1xuXHQvLyBmaXJzdCB3ZSBjcmVhdGUgYSBkaXYgdGhhdCB3aWxsIHNpdCBvdmVyIHRoZSBwaXhpIGVsZW1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGRpdiBvdmVybGF5cyB3aWxsIGdvLlxuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBcbiAgICBkaXYuc3R5bGUud2lkdGggPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgZGl2LnN0eWxlLnRvcCA9IDA7XG4gICAgZGl2LnN0eWxlLmxlZnQgPSAwO1xuICAgLy9cbiAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcbiAgIFx0XG4gICBcdC8qKlxuICAgXHQgKiBUaGlzIGlzIHRoZSBkb20gZWxlbWVudCB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuICAgXHR0aGlzLmRpdiA9IGRpdjtcblxuICAgXHQvKipcbiAgIFx0ICogQSBzaW1wbGUgcG9vbCBmb3Igc3RvcmluZyBkaXZzLlxuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0FycmF5fVxuICAgXHQgKiBAcHJpdmF0ZVxuICAgXHQgKi9cbiBcdHRoaXMucG9vbCA9IFtdO1xuXG4gXHQvKipcbiBcdCAqIFRoaXMgaXMgYSB0aWNrIHVzZWQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIG5vIGxvbmdlciBiZWluZyByZW5kZXJlZC5cbiBcdCAqIFxuIFx0ICogQHR5cGUge051bWJlcn1cbiBcdCAqIEBwcml2YXRlXG4gXHQgKi9cbiAgIFx0dGhpcy5yZW5kZXJJZCA9IDA7XG5cbiAgIFx0LyoqXG4gICBcdCAqIFNldHRpbmcgdGhpcyB0byB0cnVlIHdpbGwgdmlzdWFsbHkgc2hvdyB0aGUgZGl2c1xuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0Jvb2xlYW59XG4gICBcdCAqL1xuICAgXHR0aGlzLmRlYnVnID0gZmFsc2U7XG5cbiAgXHQvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBhY2Nlc3NpYmlsaXR5IG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgIFx0dGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICBcdC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjdXJyZW50bHkgYWN0aXZlIGFjY2Vzc2libGUgaXRlbXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgXHR0aGlzLmNoaWxkcmVuID0gW107XG4gICBcdFxuICAgXHQvKipcbiAgICAgKiBwcmUgYmluZCB0aGUgZnVuY3Rpb25zLi5cbiAgICAgKi9cbiAgIFx0dGhpcy5fb25LZXlEb3duID0gdGhpcy5fb25LZXlEb3duLmJpbmQodGhpcyk7XG4gICBcdHRoaXMuX29uTW91c2VNb3ZlID0gdGhpcy5fb25Nb3VzZU1vdmUuYmluZCh0aGlzKTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHN0b3JlcyB0aGUgc3RhdGUgb2YgdGhlIG1hbmFnZXIuIElmIHRoZXJlIGFyZSBubyBhY2Nlc3NpYmxlIG9iamVjdHMgb3IgdGhlIG1vdXNlIGlzIG1vdmluZyB0aGUgd2lsbCBiZSBmYWxzZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcblxuXG4gICBcdC8vIGxldCBsaXN0ZW4gZm9yIHRhYi4uIG9uY2UgcHJlc3NlZCB3ZSBjYW4gZmlyZSB1cCBhbmQgc2hvdyB0aGUgYWNjZXNzaWJpbGl0eSBsYXllclxuICAgXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xufVxuXG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBBY2Nlc3NpYmlsaXR5TWFuYWdlcjtcblxuLyoqXG4gKiBBY3RpdmF0aW5nIHdpbGwgY2F1c2UgdGhlIEFjY2Vzc2liaWxpdHkgbGF5ZXIgdG8gYmUgc2hvd24uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIHByZXNlcyB0aGUgdGFiIGtleVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IHRydWU7XG5cblx0d2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCB0cnVlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9uKCdwb3N0cmVuZGVyJywgdGhpcy51cGRhdGUsIHRoaXMpO1xuXG5cdHRoaXMucmVuZGVyZXIudmlldy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuZGl2KTtcdFxufTtcblxuLyoqXG4gKiBEZWFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBoaWRkZW4uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIG1vdmVzIHRoZSBtb3VzZVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmRlYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKCF0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG5cblx0dGhpcy5yZW5kZXJlci5vZmYoJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSk7XG5cblx0dGhpcy5kaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmRpdik7XG5cbn07XG5cbi8qKlxuICogVGhpcyByZWN1cnNpdmUgZnVuY3Rpb24gd2lsbCBydW4gdGhyb3VnaHQgaGUgc2NlbmUgZ3JhcGggYW5kIGFkZCBhbnkgbmV3IGFjY2Vzc2libGUgb2JqZWN0cyB0byB0aGUgRE9NIGxheWVyLlxuICogQHBhcmFtIGVsZW1lbnQge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIERpc3BsYXlPYmplY3QgdG8gY2hlY2suXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlQWNjZXNzaWJsZU9iamVjdHMgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuXHRpZighZGlzcGxheU9iamVjdC52aXNpYmxlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYoZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlICYmIGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG5cdHtcblx0XHRpZighZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZUFjdGl2ZSlcblx0XHR7XG5cdFx0XHR0aGlzLmFkZENoaWxkKGRpc3BsYXlPYmplY3QpO1xuXHRcdH1cblx0ICAgXHRcblx0ICAgXHRkaXNwbGF5T2JqZWN0LnJlbmRlcklkID0gdGhpcy5yZW5kZXJJZDtcblx0fVxuXG5cdHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG5cblx0Zm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XG5cdFx0dGhpcy51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyhjaGlsZHJlbltpXSk7XG5cdH1cbn07XG5cblxuLyoqXG4gKiBCZWZvcmUgZWFjaCByZW5kZXIgdGhpcyBmdW5jdGlvbiB3aWxsIGVuc3VyZSB0aGF0IGFsbCBkaXZzIGFyZSBtYXBwZWQgY29ycmVjdGx5IHRvIHRoZWlyIERpc3BsYXlPYmplY3RzXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oKVxue1xuXG5cdC8vIHVwZGF0ZSBjaGlsZHJlbi4uLlxuXHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCk7XG5cblx0dmFyIHJlY3QgPSB0aGlzLnJlbmRlcmVyLnZpZXcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdHZhciBzeCA9IHJlY3Qud2lkdGggIC8gdGhpcy5yZW5kZXJlci53aWR0aDtcblx0dmFyIHN5ID0gcmVjdC5oZWlnaHQgLyB0aGlzLnJlbmRlcmVyLmhlaWdodDtcblxuXHR2YXIgZGl2ID0gdGhpcy5kaXY7XG5cblx0ZGl2LnN0eWxlLmxlZnQgPSByZWN0LmxlZnQgKyAncHgnO1xuXHRkaXYuc3R5bGUudG9wID0gcmVjdC50b3AgKyAncHgnO1xuXHRkaXYuc3R5bGUud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoICsgJ3B4Jztcblx0ZGl2LnN0eWxlLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0ICsgJ3B4JztcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblxuXHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cblx0XHRpZihjaGlsZC5yZW5kZXJJZCAhPT0gdGhpcy5yZW5kZXJJZClcblx0XHR7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGksIDEpO1xuXHRcdFx0dGhpcy5kaXYucmVtb3ZlQ2hpbGQoIGNoaWxkLl9hY2Nlc3NpYmxlRGl2ICk7XG5cdFx0XHR0aGlzLnBvb2wucHVzaChjaGlsZC5fYWNjZXNzaWJsZURpdik7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZURpdiA9IG51bGw7XG5cblx0XHRcdGktLTtcblxuXHRcdFx0aWYodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0Ly8gbWFwIGRpdiB0byBkaXNwbGF5Li5cblx0XHRcdGRpdiA9IGNoaWxkLl9hY2Nlc3NpYmxlRGl2O1xuXHRcdFx0dmFyIGhpdEFyZWEgPSBjaGlsZC5oaXRBcmVhO1xuXHRcdFx0dmFyIHd0ID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cblx0XHRcdGlmKGNoaWxkLmhpdEFyZWEpXG5cdFx0XHR7XG5cdFx0XHRcdGRpdi5zdHlsZS5sZWZ0ID0gKCh3dC50eCArIChoaXRBcmVhLnggKiB3dC5hKSkgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gICgod3QudHkgKyAoaGl0QXJlYS55ICogd3QuZCkpICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiB3dC5hICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLmhlaWdodCA9IChoaXRBcmVhLmhlaWdodCAqIHd0LmQgKiBzeSkgKyAncHgnO1xuXHRcdFx0XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdGhpdEFyZWEgPSBjaGlsZC5nZXRCb3VuZHMoKTtcblxuXHRcdFx0XHR0aGlzLmNhcEhpdEFyZWEoaGl0QXJlYSk7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoaGl0QXJlYS54ICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLnRvcCA9ICAoaGl0QXJlYS55ICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogc3kpICsgJ3B4Jztcblx0XHRcdH1cdFx0XG5cdFx0fVxuXHR9XG5cblx0Ly8gaW5jcmVtZW50IHRoZSByZW5kZXIgaWQuLlxuXHR0aGlzLnJlbmRlcklkKys7XG59O1xuXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuY2FwSGl0QXJlYSA9IGZ1bmN0aW9uIChoaXRBcmVhKVxue1xuICAgIGlmIChoaXRBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS53aWR0aCArPSBoaXRBcmVhLng7XG4gICAgICAgIGhpdEFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGhpdEFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCArPSBoaXRBcmVhLnk7XG4gICAgICAgIGhpdEFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBoaXRBcmVhLnggKyBoaXRBcmVhLndpZHRoID4gdGhpcy5yZW5kZXJlci53aWR0aCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoID0gdGhpcy5yZW5kZXJlci53aWR0aCAtIGhpdEFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueSArIGhpdEFyZWEuaGVpZ2h0ID4gdGhpcy5yZW5kZXJlci5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmhlaWdodCAtIGhpdEFyZWEueTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogQWRkcyBhIERpc3BsYXlPYmplY3QgdG8gdGhlIGFjY2Vzc2liaWxpdHkgbWFuYWdlclxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24oZGlzcGxheU9iamVjdClcbntcbi8vXHR0aGlzLmFjdGl2YXRlKCk7XG5cdFxuXHR2YXIgZGl2ID0gdGhpcy5wb29sLnBvcCgpO1xuXG5cdGlmKCFkaXYpXG5cdHtcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgXG5cblx0ICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG5cdCAgICBkaXYuc3R5bGUuaGVpZ2h0ID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmRlYnVnID8gJ3JnYmEoMjU1LDAsMCwwLjUpJyA6ICd0cmFuc3BhcmVudCc7XG5cdCAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXHQgICAgZGl2LnN0eWxlLnpJbmRleCA9IDI7XG5cdCAgICBkaXYuc3R5bGUuYm9yZGVyU3R5bGUgPSAnbm9uZSc7XG5cblx0ICAgIFxuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGljay5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKSk7XG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCB0aGlzLl9vbkZvY3VzT3V0LmJpbmQodGhpcykpO1xuXHR9XG5cdCAgIFx0XG5cblxuXG5cdGRpdi50aXRsZSA9IGRpc3BsYXlPYmplY3QuYWNjZXNzaWJsZVRpdGxlIHx8ICdkaXNwbGF5T2JqZWN0ICcgKyB0aGlzLnRhYkluZGV4O1xuXG5cdC8vXG5cdFxuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlID0gdHJ1ZTtcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiA9IGRpdjtcblx0ZGl2LmRpc3BsYXlPYmplY3QgPSBkaXNwbGF5T2JqZWN0O1xuXG5cblx0dGhpcy5jaGlsZHJlbi5wdXNoKGRpc3BsYXlPYmplY3QpO1xuXHR0aGlzLmRpdi5hcHBlbmRDaGlsZCggZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiApO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2LnRhYkluZGV4ID0gZGlzcGxheU9iamVjdC50YWJJbmRleDtcbn07XG5cblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgYnV0dG9uIHByZXNzIHRvIHBpeGkncyBJbnRlcmFjdGlvbk1hbmFnZXIgKGNsaWNrKVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkNsaWNrID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ2NsaWNrJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW92ZXIpXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uRm9jdXMgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW91dClcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1c091dCA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIGtleSBpcyBwcmVzc2VkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbktleURvd24gPSBmdW5jdGlvbihlKVxue1xuXHRpZihlLmtleUNvZGUgIT09IDkpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmFjdGl2YXRlKCk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uTW91c2VNb3ZlID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmRlYWN0aXZhdGUoKTtcbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKlxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIFxue1xuXHR0aGlzLmRpdiA9IG51bGw7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHR7XG5cdFx0dGhpcy5jaGlsZHJlbltpXS5kaXYgPSBudWxsO1xuXHR9XG5cblx0XG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duKTtcblx0XHRcblx0dGhpcy5wb29sID0gbnVsbDtcblx0dGhpcy5jaGlsZHJlbiA9IG51bGw7XG5cdHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdhY2Nlc3NpYmlsaXR5JywgQWNjZXNzaWJpbGl0eU1hbmFnZXIpO1xuXG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGFjY2Vzc2libGUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlNYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5hY2Nlc3NpYmlsaXR5LmFjY2Vzc2libGVUYXJnZXRcbiAqICAgICAgKTtcbiAqL1xudmFyIGFjY2Vzc2libGVUYXJnZXQgPSB7XG4gICAgXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlOmZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlVGl0bGU6bnVsbCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgdGFiSW5kZXg6MCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVBY3RpdmU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIF9hY2Nlc3NpYmxlRGl2OmZhbHNlXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYWNjZXNzaWJsZVRhcmdldDtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGFjY2Vzc2liaWxpdHkgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGFjY2Vzc2libGVUYXJnZXQ6ICAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKSxcbiAgICBBY2Nlc3NpYmlsaXR5TWFuYWdlcjogcmVxdWlyZSgnLi9BY2Nlc3NpYmlsaXR5TWFuYWdlcicpXG59O1xuIiwiLyoqXG4gKiBDb25zdGFudCB2YWx1ZXMgdXNlZCBpbiBwaXhpXG4gKlxuICogQGxlbmRzIFBJWElcbiAqL1xudmFyIENPTlNUID0ge1xuICAgIC8qKlxuICAgICAqIFN0cmluZyBvZiB0aGUgY3VycmVudCBQSVhJIHZlcnNpb25cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gVkVSU0lPTlxuICAgICAqL1xuICAgIFZFUlNJT046IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb24sXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUElfMiAtIFR3byBQaVxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBQSV8yOiBNYXRoLlBJICogMixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSQURfVE9fREVHIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgcmFkaWFucyB0byBkZWdyZWVzXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFJBRF9UT19ERUc6IDE4MCAvIE1hdGguUEksXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge051bWJlcn0gREVHX1RPX1JBRCAtIENvbnN0YW50IGNvbnZlcnNpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIGRlZ3JlZXMgdG8gcmFkaWFuc1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBERUdfVE9fUkFEOiBNYXRoLlBJIC8gMTgwLFxuXG4gICAgLyoqXG4gICAgICogVGFyZ2V0IGZyYW1lcyBwZXIgbWlsbGlzZWNvbmQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFRBUkdFVF9GUE1TPTAuMDZcbiAgICAgKi9cbiAgICBUQVJHRVRfRlBNUzogMC4wNixcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IHRvIGlkZW50aWZ5IHRoZSBSZW5kZXJlciBUeXBlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBSRU5ERVJFUl9UWVBFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuVU5LTk9XTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLldFQkdMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuQ0FOVkFTXG4gICAgICovXG4gICAgUkVOREVSRVJfVFlQRToge1xuICAgICAgICBVTktOT1dOOiAgICAwLFxuICAgICAgICBXRUJHTDogICAgICAxLFxuICAgICAgICBDQU5WQVM6ICAgICAyXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFZhcmlvdXMgYmxlbmQgbW9kZXMgc3VwcG9ydGVkIGJ5IFBJWEkuIElNUE9SVEFOVCAtIFRoZSBXZWJHTCByZW5kZXJlciBvbmx5IHN1cHBvcnRzXG4gICAgICogdGhlIE5PUk1BTCwgQURELCBNVUxUSVBMWSBhbmQgU0NSRUVOIGJsZW5kIG1vZGVzLiBBbnl0aGluZyBlbHNlIHdpbGwgc2lsZW50bHkgYWN0IGxpa2VcbiAgICAgKiBOT1JNQUwuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IEJMRU5EX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5BRERcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTVVMVElQTFlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0NSRUVOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk9WRVJMQVlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuREFSS0VOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkxJR0hURU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfQlVSTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IQVJEX0xJR0hUXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNPRlRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuRElGRkVSRU5DRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5FWENMVVNJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuSFVFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNBVFVSQVRJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTFVNSU5PU0lUWVxuICAgICAqL1xuICAgIEJMRU5EX01PREVTOiB7XG4gICAgICAgIE5PUk1BTDogICAgICAgICAwLFxuICAgICAgICBBREQ6ICAgICAgICAgICAgMSxcbiAgICAgICAgTVVMVElQTFk6ICAgICAgIDIsXG4gICAgICAgIFNDUkVFTjogICAgICAgICAzLFxuICAgICAgICBPVkVSTEFZOiAgICAgICAgNCxcbiAgICAgICAgREFSS0VOOiAgICAgICAgIDUsXG4gICAgICAgIExJR0hURU46ICAgICAgICA2LFxuICAgICAgICBDT0xPUl9ET0RHRTogICAgNyxcbiAgICAgICAgQ09MT1JfQlVSTjogICAgIDgsXG4gICAgICAgIEhBUkRfTElHSFQ6ICAgICA5LFxuICAgICAgICBTT0ZUX0xJR0hUOiAgICAgMTAsXG4gICAgICAgIERJRkZFUkVOQ0U6ICAgICAxMSxcbiAgICAgICAgRVhDTFVTSU9OOiAgICAgIDEyLFxuICAgICAgICBIVUU6ICAgICAgICAgICAgMTMsXG4gICAgICAgIFNBVFVSQVRJT046ICAgICAxNCxcbiAgICAgICAgQ09MT1I6ICAgICAgICAgIDE1LFxuICAgICAgICBMVU1JTk9TSVRZOiAgICAgMTZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyB3ZWJnbCBkcmF3IG1vZGVzLiBUaGVzZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIEdMIGRyYXdNb2RlIHRvIHVzZVxuICAgICAqIHVuZGVyIGNlcnRhaW4gc2l0dWF0aW9ucyBhbmQgcmVuZGVyZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBEUkFXX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuUE9JTlRTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX0xPT1BcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX1NUUklQXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9GQU5cbiAgICAgKi9cbiAgICBEUkFXX01PREVTOiB7XG4gICAgICAgIFBPSU5UUzogICAgICAgICAwLFxuICAgICAgICBMSU5FUzogICAgICAgICAgMSxcbiAgICAgICAgTElORV9MT09QOiAgICAgIDIsXG4gICAgICAgIExJTkVfU1RSSVA6ICAgICAzLFxuICAgICAgICBUUklBTkdMRVM6ICAgICAgNCxcbiAgICAgICAgVFJJQU5HTEVfU1RSSVA6IDUsXG4gICAgICAgIFRSSUFOR0xFX0ZBTjogICA2XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgcGl4aS5cbiAgICAgKlxuICAgICAqIFRoZSBERUZBVUxUIHNjYWxlIG1vZGUgYWZmZWN0cyB0aGUgZGVmYXVsdCBzY2FsaW5nIG1vZGUgb2YgZnV0dXJlIG9wZXJhdGlvbnMuXG4gICAgICogSXQgY2FuIGJlIHJlLWFzc2lnbmVkIHRvIGVpdGhlciBMSU5FQVIgb3IgTkVBUkVTVCwgZGVwZW5kaW5nIHVwb24gc3VpdGFiaWxpdHkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNDQUxFX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkRFRkFVTFQ9TElORUFSXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkxJTkVBUiBTbW9vdGggc2NhbGluZ1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5ORUFSRVNUIFBpeGVsYXRpbmcgc2NhbGluZ1xuICAgICAqL1xuICAgIFNDQUxFX01PREVTOiB7XG4gICAgICAgIERFRkFVTFQ6ICAgIDAsXG4gICAgICAgIExJTkVBUjogICAgIDAsXG4gICAgICAgIE5FQVJFU1Q6ICAgIDFcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHByZWZpeCB0aGF0IGRlbm90ZXMgYSBVUkwgaXMgZm9yIGEgcmV0aW5hIGFzc2V0XG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFJFVElOQV9QUkVGSVhcbiAgICAgKi9cbiAgICAvL2V4YW1wbGU6ICdAMngnLFxuICAgIFJFVElOQV9QUkVGSVg6IC9AKC4rKXgvLFxuXG4gICAgUkVTT0xVVElPTjoxLFxuXG4gICAgRklMVEVSX1JFU09MVVRJT046MSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHJlbmRlciBvcHRpb25zIGlmIG5vbmUgYXJlIHN1cHBsaWVkIHRvIHtAbGluayBQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICogb3Ige0BsaW5rIFBJWEkuQ2FudmFzUmVuZGVyZXJ9LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TXG4gICAgICogQHByb3BlcnR5IHtIVE1MQ2FudmFzRWxlbWVudH0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy52aWV3PW51bGxcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMudHJhbnNwYXJlbnQ9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuYW50aWFsaWFzPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmZvcmNlRlhBQT1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5yZXNvbHV0aW9uPTFcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hdXRvUmVzaXplPWZhbHNlXG4gICAgICovXG4gICAgREVGQVVMVF9SRU5ERVJfT1BUSU9OUzoge1xuICAgICAgICB2aWV3OiBudWxsLFxuICAgICAgICByZXNvbHV0aW9uOiAxLFxuICAgICAgICBhbnRpYWxpYXM6IGZhbHNlLFxuICAgICAgICBmb3JjZUZYQUE6IGZhbHNlLFxuICAgICAgICBhdXRvUmVzaXplOiBmYWxzZSxcbiAgICAgICAgdHJhbnNwYXJlbnQ6IGZhbHNlLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IDB4MDAwMDAwLFxuICAgICAgICBjbGVhckJlZm9yZVJlbmRlcjogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBmYWxzZSxcbiAgICAgICAgcm91bmRQaXhlbHM6IGZhbHNlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50cyB0aGF0IGlkZW50aWZ5IHNoYXBlcywgbWFpbmx5IHRvIHByZXZlbnQgYGluc3RhbmNlb2ZgIGNhbGxzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVNcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlBPTFk9MFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUkVDVD0xXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5DSVJDPTJcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkVMSVA9M1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUlJFQz00XG4gICAgICovXG4gICAgU0hBUEVTOiB7XG4gICAgICAgIFBPTFk6IDAsXG4gICAgICAgIFJFQ1Q6IDEsXG4gICAgICAgIENJUkM6IDIsXG4gICAgICAgIEVMSVA6IDMsXG4gICAgICAgIFJSRUM6IDRcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogbWF5YmUgY2hhbmdlIHRvIFNQUklURS5CQVRDSF9TSVpFOiAyMDAwXG4gICAgLy8gVE9ETzogbWF5YmUgYWRkIFBBUlRJQ0xFLkJBVENIX1NJWkU6IDE1MDAwXG4gICAgU1BSSVRFX0JBVENIX1NJWkU6IDIwMDAgLy9uaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgYW5kIGRlc2t0b3AgbWFjaGluZXNcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ09OU1Q7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgRGlzcGxheU9iamVjdCA9IHJlcXVpcmUoJy4vRGlzcGxheU9iamVjdCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIENvbnRhaW5lciByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBkaXNwbGF5IG9iamVjdHMuXG4gKiBJdCBpcyB0aGUgYmFzZSBjbGFzcyBvZiBhbGwgZGlzcGxheSBvYmplY3RzIHRoYXQgYWN0IGFzIGEgY29udGFpbmVyIGZvciBvdGhlciBvYmplY3RzLlxuICpcbiAqYGBganNcbiAqIHZhciBjb250YWluZXIgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogYGBgXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuRGlzcGxheU9iamVjdFxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ29udGFpbmVyKClcbntcbiAgICBEaXNwbGF5T2JqZWN0LmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3RbXX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5Db250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSk7XG5Db250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb250YWluZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnRhaW5lci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG5cbiAgICAgICAgICAgIGlmICh3aWR0aCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IDE7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmIChoZWlnaHQgIT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyBoZWlnaHQgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogT3ZlcnJpZGFibGUgbWV0aG9kIHRoYXQgY2FuIGJlIHVzZWQgYnkgQ29udGFpbmVyIHN1YmNsYXNzZXMgd2hlbmV2ZXIgdGhlIGNoaWxkcmVuIGFycmF5IGlzIG1vZGlmaWVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5vbkNoaWxkcmVuQ2hhbmdlID0gZnVuY3Rpb24gKCkge307XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIuXG4gKiBcbiAqIFlvdSBjYW4gYWxzbyBhZGQgbXVsdHBsZSBpdGVtcyBsaWtlIHNvOiBteUNvbnRhaW5lci5hZGRDaGlsZCh0aGlua09uZSwgdGhpbmdUd28sIHRoaW5nVGhyZWUpXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gYWRkIHRvIHRoZSBjb250YWluZXJcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxueyBcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IHdlIGNhbiBieXBhc3MgbG9vcGluZyB0aHJvdWdoIHRoZSB0aGVtXG4gICAgaWYoYXJndW1lbnRzTGVuZ3RoID4gMSlcbiAgICB7XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgYXJndW1lbnRzIHByb3BlcnR5IGFuZCBhZGQgYWxsIGNoaWxkcmVuXG4gICAgICAgIC8vIHVzZSBpdCB0aGUgcmlnaHQgd2F5ICgubGVuZ3RoIGFuZCBbaV0pIHNvIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc3RpbGwgYmUgb3B0aW1pc2VkIGJ5IEpTIHJ1bnRpbWVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoIGFyZ3VtZW50c1tpXSApO1xuICAgICAgICB9XG4gICAgfSAgICAgXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIGNoaWxkIGhhcyBhIHBhcmVudCB0aGVuIGxldHMgcmVtb3ZlIGl0IGFzIFBpeGkgb2JqZWN0cyBjYW4gb25seSBleGlzdCBpbiBvbmUgcGxhY2VcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKHRoaXMuY2hpbGRyZW4ubGVuZ3RoLTEpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIgYXQgYSBzcGVjaWZpZWQgaW5kZXguIElmIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0byBhZGRcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gcGxhY2UgdGhlIGNoaWxkIGluXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyBhZGRlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5hZGRDaGlsZEF0ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuXG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNoaWxkICsgJ2FkZENoaWxkQXQ6IFRoZSBpbmRleCAnKyBpbmRleCArJyBzdXBwbGllZCBpcyBvdXQgb2YgYm91bmRzICcgKyB0aGlzLmNoaWxkcmVuLmxlbmd0aCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBTd2FwcyB0aGUgcG9zaXRpb24gb2YgMiBEaXNwbGF5IE9iamVjdHMgd2l0aGluIHRoaXMgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGNoaWxkMiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnN3YXBDaGlsZHJlbiA9IGZ1bmN0aW9uIChjaGlsZCwgY2hpbGQyKVxue1xuICAgIGlmIChjaGlsZCA9PT0gY2hpbGQyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbmRleDEgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuICAgIHZhciBpbmRleDIgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQyKTtcblxuICAgIGlmIChpbmRleDEgPCAwIHx8IGluZGV4MiA8IDApXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N3YXBDaGlsZHJlbjogQm90aCB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdHMgbXVzdCBiZSBjaGlsZHJlbiBvZiB0aGUgY2FsbGVyLicpO1xuICAgIH1cblxuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgxXSA9IGNoaWxkMjtcbiAgICB0aGlzLmNoaWxkcmVuW2luZGV4Ml0gPSBjaGlsZDtcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgxIDwgaW5kZXgyID8gaW5kZXgxIDogaW5kZXgyKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW5kZXggcG9zaXRpb24gb2YgYSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIHRvIGlkZW50aWZ5XG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3QgdG8gaWRlbnRpZnlcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBtdXN0IGJlIGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgcG9zaXRpb24gb2YgYW4gZXhpc3RpbmcgY2hpbGQgaW4gdGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgRGlzcGxheU9iamVjdCBpbnN0YW5jZSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBpbmRleCBudW1iZXJcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgcmVzdWx0aW5nIGluZGV4IG51bWJlciBmb3IgdGhlIGNoaWxkIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc2V0Q2hpbGRJbmRleCA9IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN1cHBsaWVkIGluZGV4IGlzIG91dCBvZiBib3VuZHMnKTtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudEluZGV4ID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkKTtcblxuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGN1cnJlbnRJbmRleCwgMSk7IC8vIHJlbW92ZSBmcm9tIG9sZCBwb3NpdGlvblxuICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7IC8vYWRkIGF0IG5ldyBwb3NpdGlvblxuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNoaWxkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhcbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgYXRcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIGF0IHRoZSBnaXZlbiBpbmRleCwgaWYgYW55LlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkQXQgPSBmdW5jdGlvbiAoaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0Q2hpbGRBdDogU3VwcGxpZWQgaW5kZXggJyArIGluZGV4ICsgJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY2hpbGQgbGlzdCwgb3IgdGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3QgaXMgbm90IGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2luZGV4XTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVtb3ZlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyByZW1vdmVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuXG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYSBjaGlsZCBmcm9tIHRoZSBzcGVjaWZpZWQgaW5kZXggcG9zaXRpb24uXG4gKlxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBnZXQgdGhlIGNoaWxkIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICB2YXIgY2hpbGQgPSB0aGlzLmdldENoaWxkQXQoaW5kZXgpO1xuXG4gICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpbmRleCwgMSk7XG5cbiAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICBjaGlsZC5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGNoaWxkcmVuIGZyb20gdGhpcyBjb250YWluZXIgdGhhdCBhcmUgd2l0aGluIHRoZSBiZWdpbiBhbmQgZW5kIGluZGV4ZXMuXG4gKlxuICogQHBhcmFtIGJlZ2luSW5kZXgge251bWJlcn0gVGhlIGJlZ2lubmluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyAwLlxuICogQHBhcmFtIGVuZEluZGV4IHtudW1iZXJ9IFRoZSBlbmRpbmcgcG9zaXRpb24uIERlZmF1bHQgdmFsdWUgaXMgc2l6ZSBvZiB0aGUgY29udGFpbmVyLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkcmVuID0gZnVuY3Rpb24gKGJlZ2luSW5kZXgsIGVuZEluZGV4KVxue1xuICAgIHZhciBiZWdpbiA9IGJlZ2luSW5kZXggfHwgMDtcbiAgICB2YXIgZW5kID0gdHlwZW9mIGVuZEluZGV4ID09PSAnbnVtYmVyJyA/IGVuZEluZGV4IDogdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgdmFyIHJhbmdlID0gZW5kIC0gYmVnaW47XG4gICAgdmFyIHJlbW92ZWQsIGk7XG5cbiAgICBpZiAocmFuZ2UgPiAwICYmIHJhbmdlIDw9IGVuZClcbiAgICB7XG4gICAgICAgIHJlbW92ZWQgPSB0aGlzLmNoaWxkcmVuLnNwbGljZShiZWdpbiwgcmFuZ2UpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW1vdmVkW2ldLnBhcmVudCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoYmVnaW5JbmRleCk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0uZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbW92ZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJhbmdlID09PSAwICYmIHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigncmVtb3ZlQ2hpbGRyZW46IG51bWVyaWMgdmFsdWVzIGFyZSBvdXRzaWRlIHRoZSBhY2NlcHRhYmxlIHJhbmdlLicpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb24gYWxsIGNoaWxkcmVuIG9mIHRoaXMgY29udGFpbmVyIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0gPSBDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgQ29udGFpbmVyIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIGFsbCB2aXNpYmxlIGNoaWxkcmVuIGludG8gY29uc2lkZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE8gdGhlIGJvdW5kcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHRoaXMgcmVuZGVyIHNlc3Npb24gc28gcmV0dXJuIHdoYXQgd2UgaGF2ZVxuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBjaGlsZEJvdW5kcztcbiAgICAgICAgdmFyIGNoaWxkTWF4WDtcbiAgICAgICAgdmFyIGNoaWxkTWF4WTtcblxuICAgICAgICB2YXIgY2hpbGRWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZFZpc2libGUgPSB0cnVlO1xuXG4gICAgICAgICAgICBjaGlsZEJvdW5kcyA9IHRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIG1pblggPSBtaW5YIDwgY2hpbGRCb3VuZHMueCA/IG1pblggOiBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgbWluWSA9IG1pblkgPCBjaGlsZEJvdW5kcy55ID8gbWluWSA6IGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIGNoaWxkTWF4WCA9IGNoaWxkQm91bmRzLndpZHRoICsgY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIGNoaWxkTWF4WSA9IGNoaWxkQm91bmRzLmhlaWdodCArIGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIG1heFggPSBtYXhYID4gY2hpbGRNYXhYID8gbWF4WCA6IGNoaWxkTWF4WDtcbiAgICAgICAgICAgIG1heFkgPSBtYXhZID4gY2hpbGRNYXhZID8gbWF4WSA6IGNoaWxkTWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGRWaXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG5Db250YWluZXIucHJvdG90eXBlLmNvbnRhaW5lckdldEJvdW5kcyA9IENvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbm9uLWdsb2JhbCBsb2NhbCBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS5cbiAqIFRoZSBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXhDYWNoZSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0aC5NYXRyaXguSURFTlRJVFk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0cml4Q2FjaGU7XG5cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyggbWF0aC5NYXRyaXguSURFTlRJVFkgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcblxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGksIGo7XG5cbiAgICAvLyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgbWFzayBvciBhIGZpbHRlci5cbiAgICBpZiAodGhpcy5fbWFzayB8fCB0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgLy8gcHVzaCBmaWx0ZXIgZmlyc3QgYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIGNvcnJlY3QgZm9yIGFueSBtYXNraW5nXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzICYmIHRoaXMuX2ZpbHRlcnMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGhpcywgdGhpcy5fZmlsdGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcblxuICAgICAgICAvLyBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIGJhdGNoLCBvbmx5IHJlbmRlcmVkIGlmIGl0IGhhcyBhIHRleHR1cmUuXG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgbWFrZSBzdXJlIHRoZXkgZ2V0IHJlbmRlcmVkXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJXZWJHTChyZW5kZXJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayh0aGlzLCB0aGlzLl9tYXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBzaW1wbGUgcmVuZGVyIGNoaWxkcmVuIVxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gdGhpcyBpcyB3aGVyZSBjb250ZW50IGl0c2VsZiBnZXRzIHJlbmRlcmVkLi4uXG59O1xuXG4vKipcbiAqIFRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzXG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy5hbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hc2spXG4gICAge1xuICAgICAgICByZW5kZXJlci5tYXNrTWFuYWdlci5wdXNoTWFzayh0aGlzLl9tYXNrLCByZW5kZXJlcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayhyZW5kZXJlcik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUNoaWxkcmVuKVxue1xuICAgIERpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGlmIChkZXN0cm95Q2hpbGRyZW4pXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLmRlc3Ryb3koZGVzdHJveUNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xufTtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBUcmFuc2Zvcm0gPSByZXF1aXJlKCcuL1RyYW5zZm9ybVN0YXRpYycpLFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB3b3JsZEFscGhhOjEsIGNoaWxkcmVuOltdfTtcblxuXG4vKipcbiAqIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCBvbiB0aGUgc2NyZWVuLlxuICogVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIG9uIGl0cyBvd24gcmF0aGVyIGl0IHNob3VsZCBiZSBleHRlbmRlZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIEV2ZW50RW1pdHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gRGlzcGxheU9iamVjdCgpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb29yZGluYXRlIG9mIHRoZSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLnRyYW5zZm9ybS5wb3NpdGlvbjtcbiAgIC8vIHRoaXMuX3Bvc2l0aW9uID0gbmV3IENhY2hlUG9pbnQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHBpdm90IHBvaW50IG9mIHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgaXQgcm90YXRlcyBhcm91bmRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5waXZvdCA9IHRoaXMudHJhbnNmb3JtLnBpdm90XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBza2V3IGZhY3RvciBmb3IgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNrZXcgPSB0aGlzLnRyYW5zZm9ybS5za2V3XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3JvdGF0aW9uID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcGFjaXR5IG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgb2JqZWN0LiBJZiBmYWxzZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGRyYXduLCBhbmRcbiAgICAgKiB0aGUgdXBkYXRlVHJhbnNmb3JtIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENhbiB0aGlzIG9iamVjdCBiZSByZW5kZXJlZCwgaWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biBidXQgdGhlIHVwZGF0ZVRyYW5zZm9ybVxuICAgICAqIG1ldGhvZHMgd2lsbCBzdGlsbCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyIHRoYXQgY29udGFpbnMgdGhpcyBkaXNwbGF5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ29udGFpbmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtdWx0aXBsaWVkIGFscGhhIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgdHJhbnNmb3JtIG9mIHRoZSBvYmplY3QgYmFzZWQgb24gd29ybGQgKHBhcmVudCkgZmFjdG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS5sb2NhbFRyYW5zZm9ybTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcmVhIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0by4gVGhpcyBpcyB1c2VkIGFzIG1vcmUgb2YgYW4gb3B0aW1pc2F0aW9uXG4gICAgICogcmF0aGVyIHRoYW4gZmlndXJpbmcgb3V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGVhY2ggZnJhbWUgeW91IGNhbiBzZXQgdGhpcyByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW9zdCB1cC10by1kYXRlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgbWFzayBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gIC8vICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxheU9iamVjdDtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNjYWxlWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcm90YXRpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uZGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX2NyID0gTWF0aC5jb3ModmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBzcHJpdGUgaXMgZ2xvYmFsbHkgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB3b3JsZFZpc2libGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udmlzaWJsZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICB9IHdoaWxlIChpdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIG1hc2sgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LiBBIG1hc2sgaXMgYW4gb2JqZWN0IHRoYXQgbGltaXRzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIG9iamVjdCB0byB0aGUgc2hhcGUgb2YgdGhlIG1hc2sgYXBwbGllZCB0byBpdC5cbiAgICAgKiBJbiBQSVhJIGEgcmVndWxhciBtYXNrIG11c3QgYmUgYSBQSVhJLkdyYXBoaWNzIG9yIGEgUElYSS5TcHJpdGUgb2JqZWN0LiBUaGlzIGFsbG93cyBmb3IgbXVjaCBmYXN0ZXIgbWFza2luZyBpbiBjYW52YXMgYXMgaXQgdXRpbGlzZXMgc2hhcGUgY2xpcHBpbmcuXG4gICAgICogVG8gcmVtb3ZlIGEgbWFzaywgc2V0IHRoaXMgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3N8UElYSS5TcHJpdGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBtYXNrOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrLnJlbmRlcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXNrID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LlxuICAgICAqICogSU1QT1JUQU5UOiBUaGlzIGlzIGEgd2ViR0wgb25seSBmZWF0dXJlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlci5cbiAgICAgKiBUbyByZW1vdmUgZmlsdGVycyBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ251bGwnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkFic3RyYWN0RmlsdGVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMgJiYgdGhpcy5fZmlsdGVycy5zbGljZSgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlICYmIHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogVE9ETyAtIE9wdGltaXphdGlvbiBwYXNzIVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vaWYodGhpcy50cmFuc2Zvcm0uZGlydHkgfHwgcGFyZW50LnRyYW5zZm9ybS5kaXJ0eSlcbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICAvLyBtdWx0aXBseSB0aGUgYWxwaGFzLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gPSBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICpcbiAqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH1cbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyhtYXRoLk1hdHJpeC5JREVOVElUWSk7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9HbG9iYWwgPSBmdW5jdGlvbiAocG9zaXRpb24pXG57XG4gICAgLy8gdGhpcyBwYXJlbnQgY2hlY2sgaXMgZm9yIGp1c3QgaW4gY2FzZSB0aGUgaXRlbSBpcyBhIHJvb3Qgb2JqZWN0LlxuICAgIC8vIElmIGl0IGlzIHdlIG5lZWQgdG8gZ2l2ZSBpdCBhIHRlbXBvcmFyeSBwYXJlbnQgc28gdGhhdCBkaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtIHdvcmtzIGNvcnJlY3RseVxuICAgIC8vIHRoaXMgaXMgbWFpbmx5IHRvIGF2b2lkIGEgcGFyZW50IGNoZWNrIGluIHRoZSBtYWluIGxvb3AuIEV2ZXJ5IGxpdHRsZSBoZWxwcyBmb3IgcGVyZm9ybWFuY2UgOilcbiAgICBpZighdGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLnBhcmVudCA9IF90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIGxvdFxuICAgIHJldHVybiB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5KHBvc2l0aW9uKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgbG9jYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHJlbGF0aXZlIHRvIGFub3RoZXIgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEBwYXJhbSBbZnJvbV0ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gY2FsY3VsYXRlIHRoZSBnbG9iYWwgcG9zaXRpb24gZnJvbVxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBQb2ludClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9Mb2NhbCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgZnJvbSwgcG9pbnQpXG57XG4gICAgaWYgKGZyb20pXG4gICAge1xuICAgICAgICBwb3NpdGlvbiA9IGZyb20udG9HbG9iYWwocG9zaXRpb24pO1xuICAgIH1cblxuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIHNpbXBseSBhcHBseSB0aGUgbWF0cml4Li5cbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9zaXRpb24sIHBvaW50KTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyBPVkVSV1JJVEU7XG59O1xuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBwYXJlbnQgQ29udGFpbmVyIG9mIHRoaXMgRGlzcGxheU9iamVjdFxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge0NvbnRhaW5lcn0gVGhlIENvbnRhaW5lciB0byBhZGQgdGhpcyBEaXNwbGF5T2JqZWN0IHRvXG4gKiBAcmV0dXJuIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdGhhdCB0aGlzIERpc3BsYXlPYmplY3Qgd2FzIGFkZGVkIHRvXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFBhcmVudCA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWNvbnRhaW5lci5hZGRDaGlsZClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0UGFyZW50OiBBcmd1bWVudCBtdXN0IGJlIGEgQ29udGFpbmVyJyk7XG4gICAgfVxuXG4gICAgY29udGFpbmVyLmFkZENoaWxkKHRoaXMpO1xuICAgIHJldHVybiBjb250YWluZXI7XG59O1xuXG4vKipcbiAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHNldCB0aGUgcG9zdGlvbiwgc2NhbGUsIHNrZXcgYW5kIHBpdm90IGF0IG9uY2UuXG4gKlxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IFRoZSBYIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gVGhlIFkgcG9zaXRpb25cbiAqIEBwYXJhbSBbc2NhbGVYPTFdIHtudW1iZXJ9IFRoZSBYIHNjYWxlIHZhbHVlXG4gKiBAcGFyYW0gW3NjYWxlWT0xXSB7bnVtYmVyfSBUaGUgWSBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtyb3RhdGlvbj0wXSB7bnVtYmVyfSBUaGUgcm90YXRpb25cbiAqIEBwYXJhbSBbc2tld1g9MF0ge251bWJlcn0gVGhlIFggc2tldyB2YWx1ZVxuICogQHBhcmFtIFtza2V3WT0wXSB7bnVtYmVyfSBUaGUgWSBza2V3IHZhbHVlXG4gKiBAcGFyYW0gW3Bpdm90WD0wXSB7bnVtYmVyfSBUaGUgWCBwaXZvdCB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFk9MF0ge251bWJlcn0gVGhlIFkgcGl2b3QgdmFsdWVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24oeCwgeSwgc2NhbGVYLCBzY2FsZVksIHJvdGF0aW9uLCBza2V3WCwgc2tld1ksIHBpdm90WCwgcGl2b3RZKSAvL2pzaGludCBpZ25vcmU6bGluZVxue1xuICAgIHRoaXMucG9zaXRpb24ueCA9IHggfHwgMDtcbiAgICB0aGlzLnBvc2l0aW9uLnkgPSB5IHx8IDA7XG4gICAgdGhpcy5zY2FsZS54ID0gIXNjYWxlWCA/IDEgOiBzY2FsZVg7XG4gICAgdGhpcy5zY2FsZS55ID0gIXNjYWxlWSA/IDEgOiBzY2FsZVk7XG4gICAgdGhpcy5yb3RhdGlvbiA9IHJvdGF0aW9uIHx8IDA7XG4gICAgdGhpcy5za2V3LnggPSBza2V3WCB8fCAwO1xuICAgIHRoaXMuc2tldy55ID0gc2tld1kgfHwgMDtcbiAgICB0aGlzLnBpdm90LnggPSBwaXZvdFggfHwgMDtcbiAgICB0aGlzLnBpdm90LnkgPSBwaXZvdFkgfHwgMDtcbiAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQmFzZSBkZXN0cm95IG1ldGhvZCBmb3IgZ2VuZXJpYyBkaXNwbGF5IG9iamVjdHNcbiAqXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdGhpcy5wb3NpdGlvbiA9IG51bGw7XG4gICAgdGhpcy5zY2FsZSA9IG51bGw7XG4gICAgdGhpcy5waXZvdCA9IG51bGw7XG4gICAgdGhpcy5za2V3ID0gbnVsbDtcblxuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIHRoaXMuX2JvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fbWFzayA9IG51bGw7XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xufTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIE9ic2VydmFibGVQb2ludCh0cmFuc2Zvcm0sIHgsIHkpXG57XG4gICAgdGhpcy5feCA9IHggfHwgMDtcbiAgICB0aGlzLl95ID0geSB8fCAwO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG59XG5cbk9ic2VydmFibGVQb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYnNlcnZhYmxlUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IE9ic2VydmFibGVQb2ludDtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE9ic2VydmFibGVQb2ludC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3Qgb24gdGhlIHggYXhpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIHg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5feDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3ggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3k7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl95ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5PYnNlcnZhYmxlUG9pbnQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuX3ggPSB4IHx8IDA7XG4gICAgdGhpcy5feSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLl94IDogMCApO1xuICAgIFxuICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcbnZhciBPYnNlcnZhYmxlUG9pbnQgPSByZXF1aXJlKCcuL09ic2VydmFibGVQb2ludCcpO1xuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLCAwKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLDEsIDEpO1xuICAgIHRoaXMucGl2b3QgPSBuZXcgT2JzZXJ2YWJsZVBvaW50KHRoaXMsIDAsIDApO1xuICAgIHRoaXMuc2tldyA9IG5ldyBPYnNlcnZhYmxlUG9pbnQodGhpcywgMCwwKTtcbiAgICBcbiAgICB0aGlzLnJvdGF0aW9uID0gMDtcbiAgICB0aGlzLl9zciA9IE1hdGguc2luKDApO1xuICAgIHRoaXMuX2NyID0gTWF0aC5jb3MoMCk7XG4gICAgXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cblxuICAgIHRoaXMudXBkYXRlZCA9IHRydWU7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUcmFuc2Zvcm07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKHBhcmVudFRyYW5zZm9ybSlcbntcbiAgICB2YXIgcHQgPSBwYXJlbnRUcmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgbHQgPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3g7XG4gICAgICAgIGx0LmIgID0gIHRoaXMuX3NyICogdGhpcy5zY2FsZS5feDtcbiAgICAgICAgbHQuYyAgPSAtdGhpcy5fc3IgKiB0aGlzLnNjYWxlLl95O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3k7XG4gICAgICAgIGx0LnR4ID0gIHRoaXMucG9zaXRpb24uX3ggLSAodGhpcy5waXZvdC5feCAqIGx0LmEgKyB0aGlzLnBpdm90Ll95ICogbHQuYyk7XG4gICAgICAgIGx0LnR5ID0gIHRoaXMucG9zaXRpb24uX3kgLSAodGhpcy5waXZvdC5feCAqIGx0LmIgKyB0aGlzLnBpdm90Ll95ICogbHQuZCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVkID0gdGhpcy5kaXJ0eSB8fCBwYXJlbnRUcmFuc2Zvcm0uZGlydHk7XG5cbiAgICBpZih0aGlzLnVwZGF0ZWQpXG4gICAgeyAgICAgIFxuICAgICAgICAvLyBjb25jYXQgdGhlIHBhcmVudCBtYXRyaXggd2l0aCB0aGUgb2JqZWN0cyB0cmFuc2Zvcm0uXG4gICAgICAgIHd0LmEgID0gbHQuYSAgKiBwdC5hICsgbHQuYiAgKiBwdC5jO1xuICAgICAgICB3dC5iICA9IGx0LmEgICogcHQuYiArIGx0LmIgICogcHQuZDtcbiAgICAgICAgd3QuYyAgPSBsdC5jICAqIHB0LmEgKyBsdC5kICAqIHB0LmM7XG4gICAgICAgIHd0LmQgID0gbHQuYyAgKiBwdC5iICsgbHQuZCAgKiBwdC5kO1xuICAgICAgICB3dC50eCA9IGx0LnR4ICogcHQuYSArIGx0LnR5ICogcHQuYyArIHB0LnR4O1xuICAgICAgICB3dC50eSA9IGx0LnR4ICogcHQuYiArIGx0LnR5ICogcHQuZCArIHB0LnR5O1xuICAgIH1cbiAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhbnNmb3JtO1xuXG5cbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBDYW52YXNHcmFwaGljcyA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL0dyYXBoaWNzRGF0YScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIEdyYXBoaWNzIGNsYXNzIGNvbnRhaW5zIG1ldGhvZHMgdXNlZCB0byBkcmF3IHByaW1pdGl2ZSBzaGFwZXMgc3VjaCBhcyBsaW5lcywgY2lyY2xlcyBhbmRcbiAqIHJlY3RhbmdsZXMgdG8gdGhlIGRpc3BsYXksIGFuZCB0byBjb2xvciBhbmQgZmlsbCB0aGVtLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzKClcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSB2YWx1ZSB1c2VkIHdoZW4gZmlsbGluZyB0aGUgR3JhcGhpY3Mgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggKHRoaWNrbmVzcykgb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29sb3Igb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBHcmFwaGljcyBkYXRhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFRoaXMgaXMgYSBoZXggdmFsdWUuIEFwcGx5IGEgdmFsdWUgb2YgMHhGRkZGRkYgdG8gcmVzZXQgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmV2aW91cyB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFVzZWQgdG8gY29tcGFyZSB0byB0aGUgY3VycmVudCB0aW50IGFuZCBjaGVjayBpZiB0aGVyZXMgY2hhbmdlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLl9wcmV2VGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMO1xuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCBwYXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgY29udGFpbmluZyBzb21lIFdlYkdMLXJlbGF0ZWQgcHJvcGVydGllcyB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIG9iamVjdD59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAvLyBUT0RPIC0gX3dlYmdsIHNob3VsZCB1c2UgYSBwcm90b3R5cGUgb2JqZWN0LCBub3QgYSByYW5kb20gdW5kb2N1bWVudGVkIG9iamVjdC4uLlxuICAgIHRoaXMuX3dlYkdMID0ge307XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgc2hhcGUgaXMgYmVpbmcgdXNlZCBhcyBhIG1hc2suXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNNYXNrID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYm91bmRzJyBwYWRkaW5nIHVzZWQgZm9yIGJvdW5kcyBjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJvdW5kc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQSBjYWNoZSBvZiB0aGUgbG9jYWwgYm91bmRzIHRvIHByZXZlbnQgcmVjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwwLDEsMSk7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlIGdyYXBoaWNzXG4gICAgICogb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIFdlYkdMIGdyYXBoaWNzIG9iamVjdCBoYXMgY2hhbmdlZC4gSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZVxuICAgICAqIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlY2FsY3VsYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcblxuICAgIHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIGNhY2hlZCBzcHJpdGUgb2JqZWN0IG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBjYWNoZUFzQml0bWFwIGlzIHNldCB0byB0cnVlIHRoZSBncmFwaGljcyBvYmplY3Qgd2lsbCBiZSByZW5kZXJlZCBhcyBpZiBpdCB3YXMgYSBzcHJpdGUuXG4gICAgICogVGhpcyBpcyB1c2VmdWwgaWYgeW91ciBncmFwaGljcyBlbGVtZW50IGRvZXMgbm90IGNoYW5nZSBvZnRlbiwgYXMgaXQgd2lsbCBzcGVlZCB1cCB0aGUgcmVuZGVyaW5nXG4gICAgICogb2YgdGhlIG9iamVjdCBpbiBleGNoYW5nZSBmb3IgdGFraW5nIHVwIHRleHR1cmUgbWVtb3J5LiBJdCBpcyBhbHNvIHVzZWZ1bCBpZiB5b3UgbmVlZCB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3QgdG8gYmUgYW50aS1hbGlhc2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVuZGVyZWQgdXNpbmcgY2FudmFzLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCBpZlxuICAgICAqIHlvdSBhcmUgY29uc3RhbnRseSByZWRyYXdpbmcgdGhlIGdyYXBoaWNzIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBjYWNoZUFzQml0bWFwXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5HcmFwaGljcyNcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuR3JhcGhpY3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcbkdyYXBoaWNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljcztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEdyYXBoaWNzIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqIE5vdGUgdGhhdCB0aGUgb25seSB0aGUgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IGFyZSBjbG9uZWQsIG5vdCBpdHMgdHJhbnNmb3JtIChwb3NpdGlvbixzY2FsZSxldGMpXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2xvbmUgPSBuZXcgR3JhcGhpY3MoKTtcblxuICAgIGNsb25lLnJlbmRlcmFibGUgICAgPSB0aGlzLnJlbmRlcmFibGU7XG4gICAgY2xvbmUuZmlsbEFscGhhICAgICA9IHRoaXMuZmlsbEFscGhhO1xuICAgIGNsb25lLmxpbmVXaWR0aCAgICAgPSB0aGlzLmxpbmVXaWR0aDtcbiAgICBjbG9uZS5saW5lQ29sb3IgICAgID0gdGhpcy5saW5lQ29sb3I7XG4gICAgY2xvbmUudGludCAgICAgICAgICA9IHRoaXMudGludDtcbiAgICBjbG9uZS5ibGVuZE1vZGUgICAgID0gdGhpcy5ibGVuZE1vZGU7XG4gICAgY2xvbmUuaXNNYXNrICAgICAgICA9IHRoaXMuaXNNYXNrO1xuICAgIGNsb25lLmJvdW5kc1BhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG4gICAgY2xvbmUuZGlydHkgICAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuZ2xEaXJ0eSAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuY2FjaGVkU3ByaXRlRGlydHkgPSB0aGlzLmNhY2hlZFNwcml0ZURpcnR5O1xuXG4gICAgLy8gY29weSBncmFwaGljcyBkYXRhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIGNsb25lLmdyYXBoaWNzRGF0YS5wdXNoKHRoaXMuZ3JhcGhpY3NEYXRhW2ldLmNsb25lKCkpO1xuICAgIH1cblxuICAgIGNsb25lLmN1cnJlbnRQYXRoID0gY2xvbmUuZ3JhcGhpY3NEYXRhW2Nsb25lLmdyYXBoaWNzRGF0YS5sZW5ndGggLSAxXTtcblxuICAgIGNsb25lLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICByZXR1cm4gY2xvbmU7XG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgbGluZSBzdHlsZSB1c2VkIGZvciBzdWJzZXF1ZW50IGNhbGxzIHRvIEdyYXBoaWNzIG1ldGhvZHMgc3VjaCBhcyB0aGUgbGluZVRvKCkgbWV0aG9kIG9yIHRoZSBkcmF3Q2lyY2xlKCkgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUubGluZVN0eWxlID0gZnVuY3Rpb24gKGxpbmVXaWR0aCwgY29sb3IsIGFscGhhKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoIHx8IDA7XG4gICAgdGhpcy5saW5lQ29sb3IgPSBjb2xvciB8fCAwO1xuICAgIHRoaXMubGluZUFscGhhID0gKGFscGhhID09PSB1bmRlZmluZWQpID8gMSA6IGFscGhhO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBoYWxmd2F5IHRocm91Z2ggYSBsaW5lPyBzdGFydCBhIG5ldyBvbmUhXG4gICAgICAgICAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnNsaWNlKC0yKSk7XG4gICAgICAgICAgICBzaGFwZS5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSBpdHMgZW1wdHkgc28gbGV0cyBqdXN0IHNldCB0aGUgbGluZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVXaWR0aCA9IHRoaXMubGluZVdpZHRoO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZUFscGhhID0gdGhpcy5saW5lQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogTW92ZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byB4LCB5LlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IHRoZSBYIGNvb3JkaW5hdGUgdG8gbW92ZSB0b1xuICogQHBhcmFtIHkge251bWJlcn0gdGhlIFkgY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICAqL1xuR3JhcGhpY3MucHJvdG90eXBlLm1vdmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24oW3gseV0pO1xuICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIGxpbmUgdXNpbmcgdGhlIGN1cnJlbnQgbGluZSBzdHlsZSBmcm9tIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8gKHgsIHkpO1xuICogVGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiBpcyB0aGVuIHNldCB0byAoeCwgeSkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBkcmF3IHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lVG8gPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgsIHkpO1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnF1YWRyYXRpY0N1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICBuID0gMjAsXG4gICAgICAgIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLCAwKTtcbiAgICB9XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBuOyArK2kpXG4gICAge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgeGEgPSBmcm9tWCArICggKGNwWCAtIGZyb21YKSAqIGogKTtcbiAgICAgICAgeWEgPSBmcm9tWSArICggKGNwWSAtIGZyb21ZKSAqIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCggeGEgKyAoICgoY3BYICsgKCAodG9YIC0gY3BYKSAqIGogKSkgLSB4YSkgKiBqICksXG4gICAgICAgICAgICAgICAgICAgICB5YSArICggKChjcFkgKyAoICh0b1kgLSBjcFkpICogaiApKSAtIHlhKSAqIGogKSApO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gY3BYMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlemllckN1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIGNwWDIsIGNwWTIsIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgbiA9IDIwLFxuICAgICAgICBkdCxcbiAgICAgICAgZHQyLFxuICAgICAgICBkdDMsXG4gICAgICAgIHQyLFxuICAgICAgICB0MyxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICBkdCA9ICgxIC0gaik7XG4gICAgICAgIGR0MiA9IGR0ICogZHQ7XG4gICAgICAgIGR0MyA9IGR0MiAqIGR0O1xuXG4gICAgICAgIHQyID0gaiAqIGo7XG4gICAgICAgIHQzID0gdDIgKiBqO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCBkdDMgKiBmcm9tWCArIDMgKiBkdDIgKiBqICogY3BYICsgMyAqIGR0ICogdDIgKiBjcFgyICsgdDMgKiB0b1gsXG4gICAgICAgICAgICAgICAgICAgICBkdDMgKiBmcm9tWSArIDMgKiBkdDIgKiBqICogY3BZICsgMyAqIGR0ICogdDIgKiBjcFkyICsgdDMgKiB0b1kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjVG8oKSBtZXRob2QgY3JlYXRlcyBhbiBhcmMvY3VydmUgYmV0d2VlbiB0d28gdGFuZ2VudHMgb24gdGhlIGNhbnZhcy5cbiAqXG4gKiBcImJvcnJvd2VkXCIgZnJvbSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Z4Y2FudmFzLyAtIHRoYW5rcyBnb29nbGUhXG4gKlxuICogQHBhcmFtIHgxIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTEge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB4MiB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGFyY1xuICogQHBhcmFtIHkyIHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGFyY1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmFyY1RvID0gZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyLCByYWRpdXMpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oeDEsIHkxKTtcbiAgICB9XG5cbiAgICB2YXIgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMsXG4gICAgICAgIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0sXG4gICAgICAgIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0sXG4gICAgICAgIGExID0gZnJvbVkgLSB5MSxcbiAgICAgICAgYjEgPSBmcm9tWCAtIHgxLFxuICAgICAgICBhMiA9IHkyICAgLSB5MSxcbiAgICAgICAgYjIgPSB4MiAgIC0geDEsXG4gICAgICAgIG1tID0gTWF0aC5hYnMoYTEgKiBiMiAtIGIxICogYTIpO1xuXG4gICAgaWYgKG1tIDwgMS4wZS04IHx8IHJhZGl1cyA9PT0gMClcbiAgICB7XG4gICAgICAgIGlmIChwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAhPT0geDEgfHwgcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0gIT09IHkxKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHMucHVzaCh4MSwgeTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBkZCA9IGExICogYTEgKyBiMSAqIGIxLFxuICAgICAgICAgICAgY2MgPSBhMiAqIGEyICsgYjIgKiBiMixcbiAgICAgICAgICAgIHR0ID0gYTEgKiBhMiArIGIxICogYjIsXG4gICAgICAgICAgICBrMSA9IHJhZGl1cyAqIE1hdGguc3FydChkZCkgLyBtbSxcbiAgICAgICAgICAgIGsyID0gcmFkaXVzICogTWF0aC5zcXJ0KGNjKSAvIG1tLFxuICAgICAgICAgICAgajEgPSBrMSAqIHR0IC8gZGQsXG4gICAgICAgICAgICBqMiA9IGsyICogdHQgLyBjYyxcbiAgICAgICAgICAgIGN4ID0gazEgKiBiMiArIGsyICogYjEsXG4gICAgICAgICAgICBjeSA9IGsxICogYTIgKyBrMiAqIGExLFxuICAgICAgICAgICAgcHggPSBiMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHB5ID0gYTEgKiAoazIgKyBqMSksXG4gICAgICAgICAgICBxeCA9IGIyICogKGsxICsgajIpLFxuICAgICAgICAgICAgcXkgPSBhMiAqIChrMSArIGoyKSxcbiAgICAgICAgICAgIHN0YXJ0QW5nbGUgPSBNYXRoLmF0YW4yKHB5IC0gY3ksIHB4IC0gY3gpLFxuICAgICAgICAgICAgZW5kQW5nbGUgICA9IE1hdGguYXRhbjIocXkgLSBjeSwgcXggLSBjeCk7XG5cbiAgICAgICAgdGhpcy5hcmMoY3ggKyB4MSwgY3kgKyB5MSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYjEgKiBhMiA+IGIyICogYTEpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSAodXNlZCB0byBjcmVhdGUgY2lyY2xlcywgb3IgcGFydHMgb2YgY2lyY2xlcykuXG4gKlxuICogQHBhcmFtIGN4IHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gY3kge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gc3RhcnRBbmdsZSB7bnVtYmVyfSBUaGUgc3RhcnRpbmcgYW5nbGUsIGluIHJhZGlhbnMgKDAgaXMgYXQgdGhlIDMgbydjbG9jayBwb3NpdGlvbiBvZiB0aGUgYXJjJ3MgY2lyY2xlKVxuICogQHBhcmFtIGVuZEFuZ2xlIHtudW1iZXJ9IFRoZSBlbmRpbmcgYW5nbGUsIGluIHJhZGlhbnNcbiAqIEBwYXJhbSBhbnRpY2xvY2t3aXNlIHtib29sZWFufSBPcHRpb25hbC4gU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGRyYXdpbmcgc2hvdWxkIGJlIGNvdW50ZXJjbG9ja3dpc2Ugb3IgY2xvY2t3aXNlLiBGYWxzZSBpcyBkZWZhdWx0LCBhbmQgaW5kaWNhdGVzIGNsb2Nrd2lzZSwgd2hpbGUgdHJ1ZSBpbmRpY2F0ZXMgY291bnRlci1jbG9ja3dpc2UuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjID0gZnVuY3Rpb24oY3gsIGN5LCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBhbnRpY2xvY2t3aXNlKVxue1xuICAgIGFudGljbG9ja3dpc2UgPSBhbnRpY2xvY2t3aXNlIHx8IGZhbHNlO1xuXG4gICAgaWYgKHN0YXJ0QW5nbGUgPT09IGVuZEFuZ2xlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYoICFhbnRpY2xvY2t3aXNlICYmIGVuZEFuZ2xlIDw9IHN0YXJ0QW5nbGUgKVxuICAgIHtcbiAgICAgICAgZW5kQW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuICAgIGVsc2UgaWYoIGFudGljbG9ja3dpc2UgJiYgc3RhcnRBbmdsZSA8PSBlbmRBbmdsZSApXG4gICAge1xuICAgICAgICBzdGFydEFuZ2xlICs9IE1hdGguUEkgKiAyO1xuICAgIH1cblxuICAgIHZhciBzd2VlcCA9IGFudGljbG9ja3dpc2UgPyAoc3RhcnRBbmdsZSAtIGVuZEFuZ2xlKSAqIC0xIDogKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSk7XG4gICAgdmFyIHNlZ3MgPSAgTWF0aC5jZWlsKE1hdGguYWJzKHN3ZWVwKSAvIChNYXRoLlBJICogMikpICogNDA7XG5cbiAgICBpZihzd2VlcCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBzdGFydFggPSBjeCArIE1hdGguY29zKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuICAgIHZhciBzdGFydFkgPSBjeSArIE1hdGguc2luKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHN0YXJ0WCwgc3RhcnRZKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciB0aGV0YSA9IHN3ZWVwLyhzZWdzKjIpO1xuICAgIHZhciB0aGV0YTIgPSB0aGV0YSoyO1xuXG4gICAgdmFyIGNUaGV0YSA9IE1hdGguY29zKHRoZXRhKTtcbiAgICB2YXIgc1RoZXRhID0gTWF0aC5zaW4odGhldGEpO1xuXG4gICAgdmFyIHNlZ01pbnVzID0gc2VncyAtIDE7XG5cbiAgICB2YXIgcmVtYWluZGVyID0gKCBzZWdNaW51cyAlIDEgKSAvIHNlZ01pbnVzO1xuXG4gICAgZm9yKHZhciBpPTA7IGk8PXNlZ01pbnVzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcmVhbCA9ICBpICsgcmVtYWluZGVyICogaTtcblxuXG4gICAgICAgIHZhciBhbmdsZSA9ICgodGhldGEpICsgc3RhcnRBbmdsZSArICh0aGV0YTIgKiByZWFsKSk7XG5cbiAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgIHZhciBzID0gLU1hdGguc2luKGFuZ2xlKTtcblxuICAgICAgICBwb2ludHMucHVzaCgoIChjVGhldGEgKiAgYykgKyAoc1RoZXRhICogcykgKSAqIHJhZGl1cyArIGN4LFxuICAgICAgICAgICAgICAgICAgICAoIChjVGhldGEgKiAtcykgKyAoc1RoZXRhICogYykgKSAqIHJhZGl1cyArIGN5KTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIGEgc2ltcGxlIG9uZS1jb2xvciBmaWxsIHRoYXQgc3Vic2VxdWVudCBjYWxscyB0byBvdGhlciBHcmFwaGljcyBtZXRob2RzXG4gKiAoc3VjaCBhcyBsaW5lVG8oKSBvciBkcmF3Q2lyY2xlKCkpIHVzZSB3aGVuIGRyYXdpbmcuXG4gKlxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlZ2luRmlsbCA9IGZ1bmN0aW9uIChjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5maWxsaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPD0gMilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsID0gdGhpcy5maWxsaW5nO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQ29sb3IgPSB0aGlzLmZpbGxDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbEFscGhhID0gdGhpcy5maWxsQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBmaWxsIHRvIHRoZSBsaW5lcyBhbmQgc2hhcGVzIHRoYXQgd2VyZSBhZGRlZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHRoZSBiZWdpbkZpbGwoKSBtZXRob2QuXG4gKlxuICogQHJldHVybiB7R3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5lbmRGaWxsID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IG51bGw7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCApXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguUmVjdGFuZ2xlKHgseSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gUmFkaXVzIG9mIHRoZSByZWN0YW5nbGUgY29ybmVyc1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSb3VuZGVkUmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzIClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5Sb3VuZGVkUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgY2lyY2xlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3Q2lyY2xlID0gZnVuY3Rpb24gKHgsIHksIHJhZGl1cylcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5DaXJjbGUoeCx5LCByYWRpdXMpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhbiBlbGxpcHNlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIGhhbGYgd2lkdGggb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd0VsbGlwc2UgPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5FbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIHBvbHlnb24gdXNpbmcgdGhlIGdpdmVuIHBhdGguXG4gKlxuICogQHBhcmFtIHBhdGgge251bWJlcltdfFBJWEkuUG9pbnRbXX0gVGhlIHBhdGggZGF0YSB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgcG9seWdvbi5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UG9seWdvbiA9IGZ1bmN0aW9uIChwYXRoKVxue1xuICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGFzc2lnbm1lbnQgZGVvcHRcbiAgICAvLyBzZWUgc2VjdGlvbiAzLjE6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgIHZhciBwb2ludHMgPSBwYXRoO1xuXG4gICAgdmFyIGNsb3NlZCA9IHRydWU7XG5cbiAgICBpZiAocG9pbnRzIGluc3RhbmNlb2YgbWF0aC5Qb2x5Z29uKVxuICAgIHtcbiAgICAgICAgY2xvc2VkID0gcG9pbnRzLmNsb3NlZDtcbiAgICAgICAgcG9pbnRzID0gcG9pbnRzLnBvaW50cztcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHNbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHBvaW50cyk7XG4gICAgc2hhcGUuY2xvc2VkID0gY2xvc2VkO1xuXG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZ3JhcGhpY3MgdGhhdCB3ZXJlIGRyYXduIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LCBhbmQgcmVzZXRzIGZpbGwgYW5kIGxpbmUgc3R5bGUgc2V0dGluZ3MuXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG4gICAgdGhpcy5maWxsaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmNsZWFyRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gW107XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGdlb21ldHJ5IGlzIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNob3VsZCBiZSBvbmUgb2YgdGhlIHNjYWxlTW9kZSBjb25zdHNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBncmFwaGljcyBvYmplY3RcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVzb2x1dGlvbiwgc2NhbGVNb2RlKVxue1xuXG4gICAgcmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGggKiByZXNvbHV0aW9uLCBib3VuZHMuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXNCdWZmZXIuY29udGV4dC5zY2FsZShyZXNvbHV0aW9uLCByZXNvbHV0aW9uKTtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIGNhbnZhc0J1ZmZlci5jb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcblxuICAgIGlmICh0aGlzLmdsRGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5nbERpcnR5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5yZW5kZXIodGhpcyk7XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5pc01hc2sgPT09IHRydWUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHRpbnQgaGFzIGNoYW5nZWQsIHNldCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRpcnR5LlxuICAgIGlmICh0aGlzLl9wcmV2VGludCAhPT0gdGhpcy50aW50KSB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIHRoaXMgY29kZSBtYXkgc3RpbGwgYmUgbmVlZGVkIHNvIGxlYXZpbmcgZm9yIG5vdy4uXG4gICAgLy9cbiAgICAvKlxuICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuZGlydHkgfHwgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVDYWNoZWRTcHJpdGUoKTtcblxuICAgICAgICAgICAgLy8gd2Ugd2lsbCBhbHNvIG5lZWQgdG8gdXBkYXRlIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUoKTtcblxuICAgICAgICAgICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFscGhhID0gdGhpcy5hbHBoYTtcblxuICAgICAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLl9jYWNoZWRTcHJpdGUsIHJlbmRlcmVyKTtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgICovXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY29udGV4dCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYm91bmRzIG9mIHRoZSBncmFwaGljIHNoYXBlIGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IFRoZSB3b3JsZCB0cmFuc2Zvcm0gbWF0cml4IHRvIHVzZSwgZGVmYXVsdHMgdG8gdGhpc1xuICogIG9iamVjdCdzIHdvcmxkVHJhbnNmb3JtLlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICAvLyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBpdGVtIGlzIGEgbWFzayFcbiAgICAgICAgaWYgKCF0aGlzLnJlbmRlcmFibGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJvdW5kc0RpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICAgICAgICAgIHRoaXMuZ2xEaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYm91bmRzRGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9sb2NhbEJvdW5kcztcblxuICAgICAgICB2YXIgdzAgPSBib3VuZHMueDtcbiAgICAgICAgdmFyIHcxID0gYm91bmRzLndpZHRoICsgYm91bmRzLng7XG5cbiAgICAgICAgdmFyIGgwID0gYm91bmRzLnk7XG4gICAgICAgIHZhciBoMSA9IGJvdW5kcy5oZWlnaHQgKyBib3VuZHMueTtcblxuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAgICAgdmFyIHgyID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgICAgICB2YXIgeTMgPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgICAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgbWF4WCA9IHgxO1xuICAgICAgICB2YXIgbWF4WSA9IHkxO1xuXG4gICAgICAgIHZhciBtaW5YID0geDE7XG4gICAgICAgIHZhciBtaW5ZID0geTE7XG5cbiAgICAgICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICAgICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICAgICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgICAgICB0aGlzLl9ib3VuZHMueCA9IG1pblg7XG4gICAgICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy55ID0gbWluWTtcbiAgICAgICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSB0aGlzLl9ib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBncmFwaGljcyBvYmplY3RcbipcbiogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4qL1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciBncmFwaGljc0RhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKCFkYXRhLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gb25seSBkZWFsIHdpdGggZmlsbHMuLlxuICAgICAgICBpZiAoZGF0YS5zaGFwZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCBkYXRhLnNoYXBlLmNvbnRhaW5zKCB0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkgKSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAqXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcblxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICBpZiAodGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdmFyIHNoYXBlLCBwb2ludHMsIHgsIHksIHcsIGg7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVtpXTtcbiAgICAgICAgICAgIHZhciB0eXBlID0gZGF0YS50eXBlO1xuICAgICAgICAgICAgdmFyIGxpbmVXaWR0aCA9IGRhdGEubGluZVdpZHRoO1xuICAgICAgICAgICAgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QgfHwgdHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLnggLSBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueSAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS53aWR0aCArIGxpbmVXaWR0aDtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLnJhZGl1cyArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLng7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLmhlaWdodCArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFBPTFlcbiAgICAgICAgICAgICAgICBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBvaW50cy5sZW5ndGg7IGogKz0gMilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHggPSBwb2ludHNbal07XG4gICAgICAgICAgICAgICAgICAgIHkgPSBwb2ludHNbaisxXTtcblxuICAgICAgICAgICAgICAgICAgICBtaW5YID0geC1saW5lV2lkdGggPCBtaW5YID8geC1saW5lV2lkdGggOiBtaW5YO1xuICAgICAgICAgICAgICAgICAgICBtYXhYID0geCtsaW5lV2lkdGggPiBtYXhYID8geCtsaW5lV2lkdGggOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblkgPSB5LWxpbmVXaWR0aCA8IG1pblkgPyB5LWxpbmVXaWR0aCA6IG1pblk7XG4gICAgICAgICAgICAgICAgICAgIG1heFkgPSB5K2xpbmVXaWR0aCA+IG1heFkgPyB5K2xpbmVXaWR0aCA6IG1heFk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIG1pblggPSAwO1xuICAgICAgICBtYXhYID0gMDtcbiAgICAgICAgbWluWSA9IDA7XG4gICAgICAgIG1heFkgPSAwO1xuICAgIH1cblxuICAgIHZhciBwYWRkaW5nID0gdGhpcy5ib3VuZHNQYWRkaW5nO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueCA9IG1pblggLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLndpZHRoID0gKG1heFggLSBtaW5YKSArIHBhZGRpbmcgKiAyO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueSA9IG1pblkgLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLmhlaWdodCA9IChtYXhZIC0gbWluWSkgKyBwYWRkaW5nICogMjtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjYWNoZWQgc3ByaXRlIHdoZW4gdGhlIHNwcml0ZSBoYXMgY2FjaGVBc0JpdG1hcCA9IHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIGlmICghdGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgdmFyIGNhbnZhc0J1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcbiAgICAgICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzQnVmZmVyLmNhbnZhcyk7XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlciA9IGNhbnZhc0J1ZmZlcjtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLnJlc2l6ZShib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIC8vIGxldmVyYWdlIHRoZSBhbmNob3IgdG8gYWNjb3VudCBmb3IgdGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudFxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQuc2F2ZSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC50cmFuc2xhdGUoLWJvdW5kcy54LC1ib3VuZHMueSk7XG5cbiAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3MgdG8gMSBmb3IgdGhlIHJlbmRlci4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIG5vdyByZW5kZXIgdGhlIGdyYXBoaWMuLlxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dCk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xufTtcbiovXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVDYWNoZWRTcHJpdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2FjaGVkU3ByaXRlID0gdGhpcy5fY2FjaGVkU3ByaXRlO1xuICAgIHZhciB0ZXh0dXJlID0gY2FjaGVkU3ByaXRlLnRleHR1cmU7XG4gICAgdmFyIGNhbnZhcyA9IGNhY2hlZFNwcml0ZS5idWZmZXIuY2FudmFzO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG4gICAgdGV4dHVyZS5jcm9wLndpZHRoID0gdGV4dHVyZS5mcmFtZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmNyb3AuaGVpZ2h0ID0gdGV4dHVyZS5mcmFtZS5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgY2FjaGVkU3ByaXRlLl93aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICBjYWNoZWRTcHJpdGUuX2hlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIGRpcnR5IGJhc2UgdGV4dHVyZXNcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmRpcnR5KCk7XG59OyovXG5cbi8qKlxuICogRGVzdHJveXMgYSBwcmV2aW91cyBjYWNoZWQgc3ByaXRlLlxuICpcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95Q2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUudGV4dHVyZS5kZXN0cm95KHRydWUpO1xuXG4gICAgLy8gbGV0IHRoZSBnYyBjb2xsZWN0IHRoZSB1bnVzZWQgc3ByaXRlXG4gICAgLy8gVE9ETyBjb3VsZCBiZSBvYmplY3QgcG9vbGVkIVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59OyovXG5cbi8qKlxuICogRHJhd3MgdGhlIGdpdmVuIHNoYXBlIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LiBDYW4gYmUgYW55IG9mIENpcmNsZSwgUmVjdGFuZ2xlLCBFbGxpcHNlLCBMaW5lIG9yIFBvbHlnb24uXG4gKlxuICogQHBhcmFtIHNoYXBlIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc0RhdGF9IFRoZSBnZW5lcmF0ZWQgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdTaGFwZSA9IGZ1bmN0aW9uIChzaGFwZSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIC8vIGNoZWNrIGN1cnJlbnQgcGF0aCFcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YS5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgdmFyIGRhdGEgPSBuZXcgR3JhcGhpY3NEYXRhKHRoaXMubGluZVdpZHRoLCB0aGlzLmxpbmVDb2xvciwgdGhpcy5saW5lQWxwaGEsIHRoaXMuZmlsbENvbG9yLCB0aGlzLmZpbGxBbHBoYSwgdGhpcy5maWxsaW5nLCBzaGFwZSk7XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YS5wdXNoKGRhdGEpO1xuXG4gICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAge1xuICAgICAgICBkYXRhLnNoYXBlLmNsb3NlZCA9IGRhdGEuc2hhcGUuY2xvc2VkIHx8IHRoaXMuZmlsbGluZztcbiAgICAgICAgdGhpcy5jdXJyZW50UGF0aCA9IGRhdGE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGRhdGE7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgLy8gZGVzdHJveSBlYWNoIG9mIHRoZSBHcmFwaGljc0RhdGEgb2JqZWN0c1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8vIGZvciBlYWNoIHdlYmdsIGRhdGEgZW50cnksIGRlc3Ryb3kgdGhlIFdlYkdMR3JhcGhpY3NEYXRhXG4gICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fd2ViZ2wpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl93ZWJnbFtpZF0uZGF0YS5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgdGhpcy5fd2ViZ2xbaWRdLmRhdGFbal0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG4gICAgdGhpcy5fd2ViZ2wgPSBudWxsO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEEgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gbGluZVdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gZmlsbENvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGxBbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBmaWxsICAgICAge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICogQHBhcmFtIHNoYXBlICAgICB7Q2lyY2xlfFJlY3RhbmdsZXxFbGxpcHNlfExpbmV8UG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICovXG5mdW5jdGlvbiBHcmFwaGljc0RhdGEobGluZVdpZHRoLCBsaW5lQ29sb3IsIGxpbmVBbHBoYSwgZmlsbENvbG9yLCBmaWxsQWxwaGEsIGZpbGwsIHNoYXBlKVxue1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQ29sb3IgPSBsaW5lQ29sb3I7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQWxwaGEgPSBsaW5lQWxwaGE7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLl9saW5lVGludCA9IGxpbmVDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxDb2xvciA9IGZpbGxDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IGZpbGxBbHBoYTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBjYWNoZWQgdGludCBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuX2ZpbGxUaW50ID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhcGUgaXMgZmlsbGVkIHdpdGggYSBjb2xvdXJcbiAgICAgKi9cbiAgICB0aGlzLmZpbGwgPSBmaWxsO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICAgICAqL1xuICAgIHRoaXMuc2hhcGUgPSBzaGFwZTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBUaGUgdHlwZSBvZiB0aGUgc2hhcGUsIHNlZSB0aGUgQ29uc3QuU2hhcGVzIGZpbGUgZm9yIGFsbCB0aGUgZXhpc3RpbmcgdHlwZXMsXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gc2hhcGUudHlwZTtcbn1cblxuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3NEYXRhIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBHcmFwaGljc0RhdGEoXG4gICAgICAgIHRoaXMubGluZVdpZHRoLFxuICAgICAgICB0aGlzLmxpbmVDb2xvcixcbiAgICAgICAgdGhpcy5saW5lQWxwaGEsXG4gICAgICAgIHRoaXMuZmlsbENvbG9yLFxuICAgICAgICB0aGlzLmZpbGxBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsLFxuICAgICAgICB0aGlzLnNoYXBlXG4gICAgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIGRhdGEuXG4gKi9cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnNoYXBlID0gbnVsbDtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL1dlYkdMR3JhcGhpY3NEYXRhJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuXG4gICAgLy8gc29tZSBkcmF3aW5nIGZ1bmN0aW9ucy4uXG4gICAgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi91dGlscy9idWlsZExpbmUnKTtcbiAgICBidWlsZFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUG9seScpO1xuICAgIGJ1aWxkQ29tcGxleFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ29tcGxleFBvbHknKTtcbiAgICBidWlsZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSZWN0YW5nbGUnKTtcbiAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkQ2lyY2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZENpcmNsZScpO1xuXG4gICAgZWFyY3V0ID0gcmVxdWlyZSgnZWFyY3V0Jyk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IFtdO1xuXG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgYSBwb2x5IGNhbiBjb250YWluIGJlZm9yZSBpdCBpcyByZW5kZXJlZCBhcyBhIGNvbXBsZXggcG9seWdvbiAodXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyKVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgPSAyMDA7XG59XG5cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc1JlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdncmFwaGljcycsIEdyYXBoaWNzUmVuZGVyZXIpO1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMuZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzLmdsKVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHJlbmRlcmVyLlxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YVBvb2wubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBudWxsO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuICAvLyAgY29uc29sZS5sb2coZ3JhcGhpY3MpXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5IHx8ICFncmFwaGljcy5fd2ViR0xbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljcyhncmFwaGljcyk7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIFRoaXMgIGNvdWxkIGJlIHNwZWVkZWQgdXAgZm9yIHN1cmUhXG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggZ3JhcGhpY3MuYmxlbmRNb2RlICk7XG5cbi8vICAgIHZhciBtYXRyaXggPSAgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0uY2xvbmUoKTtcbi8vICAgIHZhciBtYXRyaXggPSAgcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7XG4vLyAgICBtYXRyaXguYXBwZW5kKGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gd2ViR0wuZGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTC5kYXRhW2ldLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyBmaXggdGhpcyBvbmUhXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEgKiB3ZWJHTERhdGEuYWxwaGEpO1xuXG4gICAgICAgICAgICAvLyByZW5kZXIgcXVhZC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgcmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeCA9IGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLmxvY2F0aW9uKTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHVwZGF0ZVxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgLy8gZ2V0IHRoZSBjb250ZXh0cyBncmFwaGljcyBvYmplY3RcbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd2ViR0wgY29udGV4dCB0aW1lIHRvIGNyZWF0ZSBpdCFcbiAgICBpZiAoIXdlYkdMKVxuICAgIHtcbiAgICAgICAgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdID0ge2xhc3RJbmRleDowLCBkYXRhOltdLCBnbDpnbH07XG4gICAgfVxuXG4gICBcbiAgICAvLyBmbGFnIHRoZSBncmFwaGljcyBhcyBub3QgZGlydHkgYXMgd2UgYXJlIGFib3V0IHRvIHVwZGF0ZSBpdC4uLlxuICAgIGdyYXBoaWNzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB2YXIgaTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGNsZWFyZWQgdGhlIGdyYXBoaWNzIG9iamVjdCB3ZSB3aWxsIG5lZWQgdG8gY2xlYXIgZXZlcnkgb2JqZWN0XG4gICAgaWYgKGdyYXBoaWNzLmNsZWFyRGlydHkpXG4gICAge1xuICAgICAgICBncmFwaGljcy5jbGVhckRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuZCByZXR1cm4gYWxsIHRoZSB3ZWJHTERhdGFzIHRvIHRoZSBvYmplY3QgcG9vbCBzbyB0aGFuIGNhbiBiZSByZXVzZWQgbGF0ZXIgb25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBncmFwaGljc0RhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucHVzaCggZ3JhcGhpY3NEYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgYXJyYXkgYW5kIHJlc2V0IHRoZSBpbmRleC4uXG4gICAgICAgIHdlYkdMLmRhdGEgPSBbXTtcbiAgICAgICAgd2ViR0wubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBncmFwaGljcyBkYXRhcyBhbmQgY29uc3RydWN0IGVhY2ggb25lLi5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGEgY29tcGxleCBmaWxsIHRoZW4gdGhlIG5ldyBzdGVuY2lsIGJ1ZmZlciB0ZWNobmlxdWUgd2lsbCBiZSB1c2VkXG4gICAgLy8gb3RoZXIgd2lzZSBncmFwaGljcyBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIGludG8gYSBiYXRjaC4uXG4gICAgZm9yIChpID0gd2ViR0wubGFzdEluZGV4OyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBwb2ludHMgdGhlIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgICAgICAgICAgZGF0YS5wb2ludHMgPSBkYXRhLnNoYXBlLnBvaW50cy5zbGljZSgpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBwb2x5IGlmIHRoZSB2YWx1ZSBpcyB0cnVlIVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50c1swXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTJdIHx8IGRhdGEucG9pbnRzWzFdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKGRhdGEucG9pbnRzWzBdLCBkYXRhLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNQUtFIFNVUkUgV0UgSEFWRSBUSEUgQ09SUkVDVCBUWVBFLi5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA+PSA2KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA8IHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplICogMilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkRyYXdVc2luZ1NpbXBsZSA9IGJ1aWxkUG9seShkYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkRyYXdVc2luZ1NpbXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoID4gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuICAgICAgICAgICAgICAgIGJ1aWxkTGluZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMgfHwgZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZENpcmNsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCsrO1xuICAgIH1cblxuICAgIC8vIHVwbG9hZCBhbGwgdGhlIGRpcnR5IGRhdGEuLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5kaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhLnVwbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gd2ViR0wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSBUT0RPIEBBbHZpblxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5zd2l0Y2hNb2RlID0gZnVuY3Rpb24gKHdlYkdMLCB0eXBlKVxue1xuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICBpZiAoIXdlYkdMLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbd2ViR0wuZGF0YS5sZW5ndGgtMV07XG5cbiAgICAgICAgaWYgKCh3ZWJHTERhdGEucG9pbnRzLmxlbmd0aCA+IDMyMDAwMCkgfHwgd2ViR0xEYXRhLm1vZGUgIT09IHR5cGUgfHwgdHlwZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdlYkdMRGF0YS5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gd2ViR0xEYXRhO1xufTtcblxuIiwiLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyBXZWJHTCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gV2ViR0xHcmFwaGljc0RhdGEoZ2wpIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vVE9ETyBkb2VzIHRoaXMgbmVlZCB0byBiZSBzcGxpdCBiZWZvcmUgdXBsb2Rpbmc/P1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvbG9yIGNvbXBvbmVudHMgKHIsZyxiKVxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3IgPSBbMCwwLDBdOyAvLyBjb2xvciBzcGxpdCFcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBvaW50cyB0byBkcmF3XG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIHRvZG8gQGFsdmluXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubW9kZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGdyYXBoaWNzIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHZlcnRpY2VzIGFuZCB0aGUgaW5kaWNlc1xuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb2ludHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmluZGljZXMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4vLyAgICB0aGlzLmxhc3RJbmRleCA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5nbFBvaW50cyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5wb2ludHMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuYnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5nbFBvaW50cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5nbEluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuZ2xJbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLnBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBcbiAgICB0aGlzLmdsID0gbnVsbDtcblxuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoZ2wpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgZ2wsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgY2lyY2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byBkcmF3XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ2lyY2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIHZhciBjaXJjbGVEYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gY2lyY2xlRGF0YS54O1xuICAgIHZhciB5ID0gY2lyY2xlRGF0YS55O1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuXG4gICAgLy8gVE9ETyAtIGJpdCBoYWNreT8/XG4gICAgaWYgKGdyYXBoaWNzRGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB0b3RhbFNlZ3MgPSBNYXRoLmZsb29yKDMwICogTWF0aC5zcXJ0KGNpcmNsZURhdGEucmFkaXVzKSkgfHwgTWF0aC5mbG9vcigxNSAqIE1hdGguc3FydChjaXJjbGVEYXRhLndpZHRoICsgY2lyY2xlRGF0YS5oZWlnaHQpKTtcbiAgICB2YXIgc2VnID0gKE1hdGguUEkgKiAyKSAvIHRvdGFsU2VncyA7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcyk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDEgOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCx5LCByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKyssIHZlY1BvcysrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MtMSk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDaXJjbGU7IiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuICAgIFxuXG5cbi8qKlxuICogQnVpbGRzIGEgY29tcGxleCBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDb21wbGV4UG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvL1RPRE8gLSBubyBuZWVkIHRvIGNvcHkgdGhpcyBhcyBpdCBnZXRzIHR1cm5lZCBpbnRvIGEgRkxvYXQzMkFycmF5IGFueXdheXMuLlxuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzLnNsaWNlKCk7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDYpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgd2ViR0xEYXRhLnBvaW50cyA9IHBvaW50cztcbiAgICB3ZWJHTERhdGEuYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHdlYkdMRGF0YS5jb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG5cbiAgICAvLyBjYWxjbGF0ZSB0aGUgYm91bmRzLi5cbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIHZhciB4LHk7XG5cbiAgICAvLyBnZXQgc2l6ZS4uXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKz0yKVxuICAgIHtcbiAgICAgICAgeCA9IHBvaW50c1tpXTtcbiAgICAgICAgeSA9IHBvaW50c1tpKzFdO1xuXG4gICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICBtYXhYID0geCA+IG1heFggPyB4IDogbWF4WDtcblxuICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcbiAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgcXVhZCB0byB0aGUgZW5kIGNvcyB0aGVyZSBpcyBubyBwb2ludCBtYWtpbmcgYW5vdGhlciBidWZmZXIhXG4gICAgcG9pbnRzLnB1c2gobWluWCwgbWluWSxcbiAgICAgICAgICAgICAgICBtYXhYLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1heFksXG4gICAgICAgICAgICAgICAgbWluWCwgbWF4WSk7XG5cbiAgICAvLyBwdXNoIGEgcXVhZCBvbnRvIHRoZSBlbmQuLlxuXG4gICAgLy9UT0RPIC0gdGhpcyBhaW50IG5lZWRlZCFcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKCBpICk7XG4gICAgfVxuXG59O1xuXG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENvbXBsZXhQb2x5OyIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBsaW5lIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRMaW5lID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIFRPRE8gT1BUSU1JU0UhXG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGlmIHRoZSBsaW5lIHdpZHRoIGlzIGFuIG9kZCBudW1iZXIgYWRkIDAuNSB0byBhbGlnbiB0byBhIHdob2xlIHBpeGVsXG4gICAgLy8gY29tbWVudGluZyB0aGlzIG91dCBmaXhlcyAjNzExIGFuZCAjMTYyMFxuICAgIC8vIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoJTIpXG4gICAgLy8ge1xuICAgIC8vICAgICBmb3IgKGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKVxuICAgIC8vICAgICB7XG4gICAgLy8gICAgICAgICBwb2ludHNbaV0gKz0gMC41O1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBmaXJzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgIHZhciBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgIC8vIGlmIHRoZSBmaXJzdCBwb2ludCBpcyB0aGUgbGFzdCBwb2ludCAtIGdvbm5hIGhhdmUgaXNzdWVzIDopXG4gICAgaWYgKGZpcnN0UG9pbnQueCA9PT0gbGFzdFBvaW50LnggJiYgZmlyc3RQb2ludC55ID09PSBsYXN0UG9pbnQueSlcbiAgICB7XG4gICAgICAgIC8vIG5lZWQgdG8gY2xvbmUgYXMgd2UgYXJlIGdvaW5nIHRvIHNsaWdodGx5IG1vZGlmeSB0aGUgc2hhcGUuLlxuICAgICAgICBwb2ludHMgPSBwb2ludHMuc2xpY2UoKTtcblxuICAgICAgICBwb2ludHMucG9wKCk7XG4gICAgICAgIHBvaW50cy5wb3AoKTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgICAgICB2YXIgbWlkUG9pbnRYID0gbGFzdFBvaW50LnggKyAoZmlyc3RQb2ludC54IC0gbGFzdFBvaW50LngpICowLjU7XG4gICAgICAgIHZhciBtaWRQb2ludFkgPSBsYXN0UG9pbnQueSArIChmaXJzdFBvaW50LnkgLSBsYXN0UG9pbnQueSkgKjAuNTtcblxuICAgICAgICBwb2ludHMudW5zaGlmdChtaWRQb2ludFgsIG1pZFBvaW50WSk7XG4gICAgICAgIHBvaW50cy5wdXNoKG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICB9XG5cbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgIHZhciBpbmRleENvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICB2YXIgaW5kZXhTdGFydCA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgLy8gRFJBVyB0aGUgTGluZVxuICAgIHZhciB3aWR0aCA9IGdyYXBoaWNzRGF0YS5saW5lV2lkdGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmxpbmVDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmxpbmVBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciBweCwgcHksIHAxeCwgcDF5LCBwMngsIHAyeSwgcDN4LCBwM3k7XG4gICAgdmFyIHBlcnB4LCBwZXJweSwgcGVycDJ4LCBwZXJwMnksIHBlcnAzeCwgcGVycDN5O1xuICAgIHZhciBhMSwgYjEsIGMxLCBhMiwgYjIsIGMyO1xuICAgIHZhciBkZW5vbSwgcGRpc3QsIGRpc3Q7XG5cbiAgICBwMXggPSBwb2ludHNbMF07XG4gICAgcDF5ID0gcG9pbnRzWzFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWzJdO1xuICAgIHAyeSA9IHBvaW50c1szXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gIHAxeCAtIHAyeDtcblxuICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG5cbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAvLyBzdGFydFxuICAgIHZlcnRzLnB1c2gocDF4IC0gcGVycHggLCBwMXkgLSBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAxeCArIHBlcnB4ICwgcDF5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgZm9yIChpID0gMTsgaSA8IGxlbmd0aC0xOyBpKyspXG4gICAge1xuICAgICAgICBwMXggPSBwb2ludHNbKGktMSkqMl07XG4gICAgICAgIHAxeSA9IHBvaW50c1soaS0xKSoyICsgMV07XG5cbiAgICAgICAgcDJ4ID0gcG9pbnRzWyhpKSoyXTtcbiAgICAgICAgcDJ5ID0gcG9pbnRzWyhpKSoyICsgMV07XG5cbiAgICAgICAgcDN4ID0gcG9pbnRzWyhpKzEpKjJdO1xuICAgICAgICBwM3kgPSBwb2ludHNbKGkrMSkqMiArIDFdO1xuXG4gICAgICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgICAgICBwZXJweSA9IHAxeCAtIHAyeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgICAgICBwZXJweCAvPSBkaXN0O1xuICAgICAgICBwZXJweSAvPSBkaXN0O1xuICAgICAgICBwZXJweCAqPSB3aWR0aDtcbiAgICAgICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAgICAgcGVycDJ4ID0gLShwMnkgLSBwM3kpO1xuICAgICAgICBwZXJwMnkgPSBwMnggLSBwM3g7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwMngqcGVycDJ4ICsgcGVycDJ5KnBlcnAyeSk7XG4gICAgICAgIHBlcnAyeCAvPSBkaXN0O1xuICAgICAgICBwZXJwMnkgLz0gZGlzdDtcbiAgICAgICAgcGVycDJ4ICo9IHdpZHRoO1xuICAgICAgICBwZXJwMnkgKj0gd2lkdGg7XG5cbiAgICAgICAgYTEgPSAoLXBlcnB5ICsgcDF5KSAtICgtcGVycHkgKyBwMnkpO1xuICAgICAgICBiMSA9ICgtcGVycHggKyBwMngpIC0gKC1wZXJweCArIHAxeCk7XG4gICAgICAgIGMxID0gKC1wZXJweCArIHAxeCkgKiAoLXBlcnB5ICsgcDJ5KSAtICgtcGVycHggKyBwMngpICogKC1wZXJweSArIHAxeSk7XG4gICAgICAgIGEyID0gKC1wZXJwMnkgKyBwM3kpIC0gKC1wZXJwMnkgKyBwMnkpO1xuICAgICAgICBiMiA9ICgtcGVycDJ4ICsgcDJ4KSAtICgtcGVycDJ4ICsgcDN4KTtcbiAgICAgICAgYzIgPSAoLXBlcnAyeCArIHAzeCkgKiAoLXBlcnAyeSArIHAyeSkgLSAoLXBlcnAyeCArIHAyeCkgKiAoLXBlcnAyeSArIHAzeSk7XG5cbiAgICAgICAgZGVub20gPSBhMSpiMiAtIGEyKmIxO1xuXG4gICAgICAgIGlmIChNYXRoLmFicyhkZW5vbSkgPCAwLjEgKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIGRlbm9tKz0xMC4xO1xuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJweCAsIHAyeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBweCA9IChiMSpjMiAtIGIyKmMxKS9kZW5vbTtcbiAgICAgICAgcHkgPSAoYTIqYzEgLSBhMSpjMikvZGVub207XG5cblxuICAgICAgICBwZGlzdCA9IChweCAtcDJ4KSAqIChweCAtcDJ4KSArIChweSAtcDJ5KSAqIChweSAtcDJ5KTtcblxuXG4gICAgICAgIGlmIChwZGlzdCA+IDE0MCAqIDE0MClcbiAgICAgICAge1xuICAgICAgICAgICAgcGVycDN4ID0gcGVycHggLSBwZXJwMng7XG4gICAgICAgICAgICBwZXJwM3kgPSBwZXJweSAtIHBlcnAyeTtcblxuICAgICAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwM3gqcGVycDN4ICsgcGVycDN5KnBlcnAzeSk7XG4gICAgICAgICAgICBwZXJwM3ggLz0gZGlzdDtcbiAgICAgICAgICAgIHBlcnAzeSAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN4ICo9IHdpZHRoO1xuICAgICAgICAgICAgcGVycDN5ICo9IHdpZHRoO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycDN4LCBwMnkgK3BlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJwM3gsIHAyeSAtcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRleENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocHggLCBweSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSAocHgtcDJ4KSwgcDJ5IC0gKHB5IC0gcDJ5KSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHAxeCA9IHBvaW50c1sobGVuZ3RoLTIpKjJdO1xuICAgIHAxeSA9IHBvaW50c1sobGVuZ3RoLTIpKjIgKyAxXTtcblxuICAgIHAyeCA9IHBvaW50c1sobGVuZ3RoLTEpKjJdO1xuICAgIHAyeSA9IHBvaW50c1sobGVuZ3RoLTEpKjIgKyAxXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5KTtcbiAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBpbmRleENvdW50OyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydCsrKTtcbiAgICB9XG5cbiAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydC0xKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRMaW5lOyIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcG9seWdvbiB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuV2ViR0xHcmFwaGljc0RhdGF9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocG9pbnRzLCBudWxsLCAyKTtcblxuICAgIGlmICghdHJpYW5nbGVzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgdmVydFBvcyA9IHZlcnRzLmxlbmd0aCAvIDY7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICt2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVydFBvcyk7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmVydHMucHVzaChwb2ludHNbaSAqIDJdLCBwb2ludHNbaSAqIDIgKyAxXSxcbiAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRQb2x5O1xuIiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHJlY3RhbmdsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIC0tLSAvL1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIC8vXG4gICAgdmFyIHJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcmVjdERhdGEueDtcbiAgICB2YXIgeSA9IHJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJlY3REYXRhLmhlaWdodDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgLy8gc3RhcnRcbiAgICAgICAgdmVydHMucHVzaCh4LCB5KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAvLyBpbnNlcnQgMiBkZWFkIHRyaWFuZ2xlcy4uXG4gICAgICAgIGluZGljZXMucHVzaCh2ZXJ0UG9zLCB2ZXJ0UG9zLCB2ZXJ0UG9zKzEsIHZlcnRQb3MrMiwgdmVydFBvcyszLCB2ZXJ0UG9zKzMpO1xuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSBbeCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHkgKyBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICB4LCB5XTtcblxuXG4gICAgICAgIGJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJlY3RhbmdsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG4vKipcbiAqIEJ1aWxkcyBhIHJvdW5kZWQgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG5idWlsZFJvdW5kZWRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIHJyZWN0RGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IHJyZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcnJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcnJlY3REYXRhLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSBycmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgdmFyIHJhZGl1cyA9IHJyZWN0RGF0YS5yYWRpdXM7XG5cbiAgICB2YXIgcmVjUG9pbnRzID0gW107XG4gICAgcmVjUG9pbnRzLnB1c2goeCwgeSArIHJhZGl1cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4LCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCB4LCB5ICsgaGVpZ2h0LCB4ICsgcmFkaXVzLCB5ICsgaGVpZ2h0LCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoIC0gcmFkaXVzLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCAtIHJhZGl1cywgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyB3aWR0aCwgeSArIHJhZGl1cywgeCArIHdpZHRoLCB5LCB4ICsgd2lkdGggLSByYWRpdXMsIHksIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgcmFkaXVzLCB5LCB4LCB5LCB4LCB5ICsgcmFkaXVzICsgMC4wMDAwMDAwMDAxLCByZWNQb2ludHMpO1xuXG4gICAgLy8gdGhpcyB0aW55IG51bWJlciBkZWFscyB3aXRoIHRoZSBpc3N1ZSB0aGF0IG9jY3VycyB3aGVuIHBvaW50cyBvdmVybGFwIGFuZCBlYXJjdXQgZmFpbHMgdG8gdHJpYW5ndWxhdGUgdGhlIGl0ZW0uXG4gICAgLy8gVE9ETyAtIGZpeCB0aGlzIHByb3Blcmx5LCB0aGlzIGlzIG5vdCB2ZXJ5IGVsZWdhbnQuLiBidXQgaXQgd29ya3MgZm9yIG5vdy5cblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICB2YXIgdHJpYW5nbGVzID0gZWFyY3V0KHJlY1BvaW50cywgbnVsbCwgMik7XG5cbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICAgICAge1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVjUG9zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZWNQb2ludHMubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gocmVjUG9pbnRzW2ldLCByZWNQb2ludHNbKytpXSwgciwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHJlY1BvaW50cztcblxuICAgICAgICB0aGlzLmJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlLiAoaGVscGVyIGZ1bmN0aW9uLi4pXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBmcm9tWCB7bnVtYmVyfSBPcmlnaW4gcG9pbnQgeFxuICogQHBhcmFtIGZyb21ZIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcGFyYW0gW291dF0ge251bWJlcltdfSBUaGUgb3V0cHV0IGFycmF5IHRvIGFkZCBwb2ludHMgaW50by4gSWYgbm90IHBhc3NlZCwgYSBuZXcgYXJyYXkgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm4ge251bWJlcltdfSBhbiBhcnJheSBvZiBwb2ludHNcbiAqL1xucXVhZHJhdGljQmV6aWVyQ3VydmUgPSBmdW5jdGlvbiAoZnJvbVgsIGZyb21ZLCBjcFgsIGNwWSwgdG9YLCB0b1ksIG91dClcbntcbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICB4YixcbiAgICAgICAgeWIsXG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gb3V0IHx8IFtdO1xuXG4gICAgZnVuY3Rpb24gZ2V0UHQobjEgLCBuMiwgcGVyYykge1xuICAgICAgICB2YXIgZGlmZiA9IG4yIC0gbjE7XG5cbiAgICAgICAgcmV0dXJuIG4xICsgKCBkaWZmICogcGVyYyApO1xuICAgIH1cblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBuOyBpKysgKSB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICAvLyBUaGUgR3JlZW4gTGluZVxuICAgICAgICB4YSA9IGdldFB0KCBmcm9tWCAsIGNwWCAsIGogKTtcbiAgICAgICAgeWEgPSBnZXRQdCggZnJvbVkgLCBjcFkgLCBqICk7XG4gICAgICAgIHhiID0gZ2V0UHQoIGNwWCAsIHRvWCAsIGogKTtcbiAgICAgICAgeWIgPSBnZXRQdCggY3BZICwgdG9ZICwgaiApO1xuXG4gICAgICAgIC8vIFRoZSBCbGFjayBEb3RcbiAgICAgICAgeCA9IGdldFB0KCB4YSAsIHhiICwgaiApO1xuICAgICAgICB5ID0gZ2V0UHQoIHlhICwgeWIgLCBqICk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goeCwgeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50cztcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJvdW5kZWRSZWN0YW5nbGU7IiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgY29yZSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWElcbiAqL1xuLy8gZXhwb3J0IGNvcmUgYW5kIGNvbnN0LiBXZSBhc3NpZ24gY29yZSB0byBjb25zdCBzbyB0aGF0IHRoZSBub24tcmVmZXJlbmNlIHR5cGVzIGluIGNvbnN0IHJlbWFpbiBpbi10YWN0XG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihyZXF1aXJlKCcuL2NvbnN0JyksIHJlcXVpcmUoJy4vbWF0aCcpLCB7XG4gICAgLy8gdXRpbHNcbiAgICB1dGlsczogcmVxdWlyZSgnLi91dGlscycpLFxuICAgIHRpY2tlcjogcmVxdWlyZSgnLi90aWNrZXInKSxcblxuICAgIC8vIGRpc3BsYXlcbiAgICBEaXNwbGF5T2JqZWN0OiAgICAgICAgICByZXF1aXJlKCcuL2Rpc3BsYXkvRGlzcGxheU9iamVjdCcpLFxuICAgIENvbnRhaW5lcjogICAgICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9Db250YWluZXInKSxcblxuICAgIC8vIHNwcml0ZXNcbiAgICBTcHJpdGU6ICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgUGFydGljbGVDb250YWluZXI6ICAgICAgcmVxdWlyZSgnLi9wYXJ0aWNsZXMvUGFydGljbGVDb250YWluZXInKSxcbiAgICBTcHJpdGVSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXInKSxcbiAgICBQYXJ0aWNsZVJlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyJyksXG5cbiAgICAvLyB0ZXh0XG4gICAgVGV4dDogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0L1RleHQnKSxcblxuICAgIC8vIHByaW1pdGl2ZXNcbiAgICBHcmFwaGljczogICAgICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzJyksXG4gICAgR3JhcGhpY3NEYXRhOiAgICAgICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljc0RhdGEnKSxcbiAgICBHcmFwaGljc1JlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHR1cmVzXG4gICAgVGV4dHVyZTogICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQmFzZVRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlVGV4dHVyZScpLFxuICAgIFJlbmRlclRleHR1cmU6ICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEJhc2VSZW5kZXJUZXh0dXJlOiAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlOiAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzOiAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmVVdnMnKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIGNhbnZhc1xuICAgIENhbnZhc1JlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIENhbnZhc0J1ZmZlcjogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIHdlYmdsXG4gICAgV2ViR0xSZW5kZXJlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyksXG4gICAgU2hhZGVyTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIFNoYWRlcjogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyJyksXG4gICAgT2JqZWN0UmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBSZW5kZXJUYXJnZXQ6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcblxuICAgIC8vIGZpbHRlcnMgLSB3ZWJnbFxuICAgIEFic3RyYWN0RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBGWEFBRmlsdGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBTcHJpdGVNYXNrRmlsdGVyOiAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKSxcblxuICAgIGdsQ29yZTogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncGl4aS1nbC1jb3JlJyksXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoaWNoIHJlbmRlcmVyIHlvdSBzaG91bGQgYmUgdXNpbmcuXG4gICAgICogV2ViR0wgaXMgdGhlIHByZWZlcnJlZCByZW5kZXJlciBhcyBpdCBpcyBhIGxvdCBmYXN0ZXIuIElmIHdlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnlcbiAgICAgKiB0aGUgYnJvd3NlciB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBjYW52YXMgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHBhcmFtIHdpZHRoPTgwMCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIGhlaWdodD02MDAge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWYgeW91XG4gICAgICogICAgICBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0XG4gICAgICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyLCByZXRpbmEgd291bGQgYmUgMlxuICAgICAqIEBwYXJhbSBbbm9XZWJHTD1mYWxzZV0ge2Jvb2xlYW59IHByZXZlbnRzIHNlbGVjdGlvbiBvZiBXZWJHTCByZW5kZXJlciwgZXZlbiBpZiBzdWNoIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyZXJ8Q2FudmFzUmVuZGVyZXJ9IFJldHVybnMgV2ViR0wgcmVuZGVyZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgQ2FudmFzUmVuZGVyZXJcbiAgICAgKi9cbiAgICBhdXRvRGV0ZWN0UmVuZGVyZXI6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCBub1dlYkdMKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB3aWR0aCB8fCA4MDA7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAgICAgaWYgKCFub1dlYkdMICYmIGNvcmUudXRpbHMuaXNXZWJHTFN1cHBvcnRlZCgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGNvcmUuV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgY29yZS5DYW52YXNSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB9XG59KTtcbiIsIi8vIEB0b2RvIC0gaWdub3JlIHRoZSB0b28gbWFueSBwYXJhbWV0ZXJzIHdhcm5pbmcgZm9yIG5vd1xuLy8gc2hvdWxkIGVpdGhlciBmaXggaXQgb3IgY2hhbmdlIHRoZSBqc2hpbnQgY29uZmlnXG4vLyBqc2hpbnQgLVcwNzJcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xuXG4vKipcbiAqIFRoZSBwaXhpIE1hdHJpeCBjbGFzcyBhcyBhbiBvYmplY3QsIHdoaWNoIG1ha2VzIGl0IGEgbG90IGZhc3RlcixcbiAqIGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBpdCA6XG4gKiB8IGEgfCBiIHwgdHh8XG4gKiB8IGMgfCBkIHwgdHl8XG4gKiB8IDAgfCAwIHwgMSB8XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBNYXRyaXgoKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5iID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5jID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHkgPSAwO1xufVxuXG5NYXRyaXgucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWF0cml4O1xubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1hdHJpeCBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5LiBUaGUgRWxlbWVudCB0byBNYXRyaXggbWFwcGluZyBvcmRlciBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIGEgPSBhcnJheVswXVxuICogYiA9IGFycmF5WzFdXG4gKiBjID0gYXJyYXlbM11cbiAqIGQgPSBhcnJheVs0XVxuICogdHggPSBhcnJheVsyXVxuICogdHkgPSBhcnJheVs1XVxuICpcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119IFRoZSBhcnJheSB0aGF0IHRoZSBtYXRyaXggd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbS5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpXG57XG4gICAgdGhpcy5hID0gYXJyYXlbMF07XG4gICAgdGhpcy5iID0gYXJyYXlbMV07XG4gICAgdGhpcy5jID0gYXJyYXlbM107XG4gICAgdGhpcy5kID0gYXJyYXlbNF07XG4gICAgdGhpcy50eCA9IGFycmF5WzJdO1xuICAgIHRoaXMudHkgPSBhcnJheVs1XTtcbn07XG5cblxuLyoqXG4gKiBzZXRzIHRoZSBtYXRyaXggcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkXG4gKiBAcGFyYW0ge251bWJlcn0gdHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXG57XG4gICAgdGhpcy5hID0gYTtcbiAgICB0aGlzLmIgPSBiO1xuICAgIHRoaXMuYyA9IGM7XG4gICAgdGhpcy5kID0gZDtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy50eSA9IHR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmcm9tIHRoZSBjdXJyZW50IE1hdHJpeCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9zZSB7Ym9vbGVhbn0gV2hldGhlciB3ZSBuZWVkIHRvIHRyYW5zcG9zZSB0aGUgbWF0cml4IG9yIG5vdFxuICogQHBhcmFtIFtvdXRdIHtBcnJheX0gSWYgcHJvdmlkZWQgdGhlIGFycmF5IHdpbGwgYmUgYXNzaWduZWQgdG8gb3V0XG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gdGhlIG5ld2x5IGNyZWF0ZWQgYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAodHJhbnNwb3NlLCBvdXQpXG57XG4gICAgaWYgKCF0aGlzLmFycmF5KVxuICAgIHtcbiAgICAgICAgdGhpcy5hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gb3V0IHx8IHRoaXMuYXJyYXk7XG5cbiAgICBpZiAodHJhbnNwb3NlKVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVsyXSA9IDA7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSAwO1xuICAgICAgICBhcnJheVs2XSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzddID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzJdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzZdID0gMDtcbiAgICAgICAgYXJyYXlbN10gPSAwO1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZSB0byB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gcmVuZGVyaW5nKVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5hICogeCArIHRoaXMuYyAqIHkgKyB0aGlzLnR4O1xuICAgIG5ld1Bvcy55ID0gdGhpcy5iICogeCArIHRoaXMuZCAqIHkgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGludmVyc2Ugb2YgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UgdG8gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIGlucHV0KVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHlJbnZlcnNlID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciBpZCA9IDEgLyAodGhpcy5hICogdGhpcy5kICsgdGhpcy5jICogLXRoaXMuYik7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuZCAqIGlkICogeCArIC10aGlzLmMgKiBpZCAqIHkgKyAodGhpcy50eSAqIHRoaXMuYyAtIHRoaXMudHggKiB0aGlzLmQpICogaWQ7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmEgKiBpZCAqIHkgKyAtdGhpcy5iICogaWQgKiB4ICsgKC10aGlzLnR5ICogdGhpcy5hICsgdGhpcy50eCAqIHRoaXMuYikgKiBpZDtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdHJpeCBvbiB0aGUgeCBhbmQgeS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMudHggKz0geDtcbiAgICB0aGlzLnR5ICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIHNjYWxlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIGFtb3VudCB0byBzY2FsZSBob3Jpem9udGFsbHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSBhbW91bnQgdG8gc2NhbGUgdmVydGljYWxseVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2NhbGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmEgKj0geDtcbiAgICB0aGlzLmQgKj0geTtcbiAgICB0aGlzLmMgKj0geDtcbiAgICB0aGlzLmIgKj0geTtcbiAgICB0aGlzLnR4ICo9IHg7XG4gICAgdGhpcy50eSAqPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyBhIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpXG57XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKCBhbmdsZSApO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbiggYW5nbGUgKTtcblxuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICB0aGlzLmEgPSBhMSAqIGNvcy10aGlzLmIgKiBzaW47XG4gICAgdGhpcy5iID0gYTEgKiBzaW4rdGhpcy5iICogY29zO1xuICAgIHRoaXMuYyA9IGMxICogY29zLXRoaXMuZCAqIHNpbjtcbiAgICB0aGlzLmQgPSBjMSAqIHNpbit0aGlzLmQgKiBjb3M7XG4gICAgdGhpcy50eCA9IHR4MSAqIGNvcyAtIHRoaXMudHkgKiBzaW47XG4gICAgdGhpcy50eSA9IHR4MSAqIHNpbiArIHRoaXMudHkgKiBjb3M7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG5cbiAgICB0aGlzLmEgID0gbWF0cml4LmEgKiBhMSArIG1hdHJpeC5iICogYzE7XG4gICAgdGhpcy5iICA9IG1hdHJpeC5hICogYjEgKyBtYXRyaXguYiAqIGQxO1xuICAgIHRoaXMuYyAgPSBtYXRyaXguYyAqIGExICsgbWF0cml4LmQgKiBjMTtcbiAgICB0aGlzLmQgID0gbWF0cml4LmMgKiBiMSArIG1hdHJpeC5kICogZDE7XG5cbiAgICB0aGlzLnR4ID0gbWF0cml4LnR4ICogYTEgKyBtYXRyaXgudHkgKiBjMSArIHRoaXMudHg7XG4gICAgdGhpcy50eSA9IG1hdHJpeC50eCAqIGIxICsgbWF0cml4LnR5ICogZDEgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1hdHJpeCBiYXNlZCBvbiBhbGwgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RYXG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RZXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXG4gKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WFxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdZXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKHgsIHksIHBpdm90WCwgcGl2b3RZLCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSlcbntcbiAgICB2YXIgYSwgYiwgYywgZCwgc3IsIGNyLCBjeSwgc3ksIG5zeCwgY3g7XG5cbiAgICBzciAgPSBNYXRoLnNpbihyb3RhdGlvbik7XG4gICAgY3IgID0gTWF0aC5jb3Mocm90YXRpb24pO1xuICAgIGN5ICA9IE1hdGguY29zKHNrZXdZKTtcbiAgICBzeSAgPSBNYXRoLnNpbihza2V3WSk7XG4gICAgbnN4ID0gLU1hdGguc2luKHNrZXdYKTtcbiAgICBjeCAgPSAgTWF0aC5jb3Moc2tld1gpO1xuXG4gICAgYSAgPSAgY3IgKiBzY2FsZVg7XG4gICAgYiAgPSAgc3IgKiBzY2FsZVg7XG4gICAgYyAgPSAtc3IgKiBzY2FsZVk7XG4gICAgZCAgPSAgY3IgKiBzY2FsZVk7XG5cbiAgICB0aGlzLmEgID0gY3kgKiBhICsgc3kgKiBjO1xuICAgIHRoaXMuYiAgPSBjeSAqIGIgKyBzeSAqIGQ7XG4gICAgdGhpcy5jICA9IG5zeCAqIGEgKyBjeCAqIGM7XG4gICAgdGhpcy5kICA9IG5zeCAqIGIgKyBjeCAqIGQ7XG5cbiAgICB0aGlzLnR4ID0geCArICggcGl2b3RYICogYSArIHBpdm90WSAqIGMgKTtcbiAgICB0aGlzLnR5ID0geSArICggcGl2b3RYICogYiArIHBpdm90WSAqIGQgKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQcmVwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uKG1hdHJpeClcbntcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIGlmIChtYXRyaXguYSAhPT0gMSB8fCBtYXRyaXguYiAhPT0gMCB8fCBtYXRyaXguYyAhPT0gMCB8fCBtYXRyaXguZCAhPT0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICAgICAgdmFyIGMxID0gdGhpcy5jO1xuICAgICAgICB0aGlzLmEgID0gYTEqbWF0cml4LmErdGhpcy5iKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmIgID0gYTEqbWF0cml4LmIrdGhpcy5iKm1hdHJpeC5kO1xuICAgICAgICB0aGlzLmMgID0gYzEqbWF0cml4LmErdGhpcy5kKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmQgID0gYzEqbWF0cml4LmIrdGhpcy5kKm1hdHJpeC5kO1xuICAgIH1cblxuICAgIHRoaXMudHggPSB0eDEqbWF0cml4LmErdGhpcy50eSptYXRyaXguYyttYXRyaXgudHg7XG4gICAgdGhpcy50eSA9IHR4MSptYXRyaXguYit0aGlzLnR5Km1hdHJpeC5kK21hdHJpeC50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0ID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcbiAgICB2YXIgbiA9IGExKmQxLWIxKmMxO1xuXG4gICAgdGhpcy5hID0gZDEvbjtcbiAgICB0aGlzLmIgPSAtYjEvbjtcbiAgICB0aGlzLmMgPSAtYzEvbjtcbiAgICB0aGlzLmQgPSBhMS9uO1xuICAgIHRoaXMudHggPSAoYzEqdGhpcy50eS1kMSp0eDEpL247XG4gICAgdGhpcy50eSA9IC0oYTEqdGhpcy50eS1iMSp0eDEpL247XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBSZXNldHMgdGhpcyBNYXRpeCB0byBhbiBpZGVudGl0eSAoZGVmYXVsdCkgbWF0cml4LlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmlkZW50aXR5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmEgPSAxO1xuICAgIHRoaXMuYiA9IDA7XG4gICAgdGhpcy5jID0gMDtcbiAgICB0aGlzLmQgPSAxO1xuICAgIHRoaXMudHggPSAwO1xuICAgIHRoaXMudHkgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgTWF0cml4IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gQSBjb3B5IG9mIHRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgdmFsdWVzIG9mIHRoZSBnaXZlbiBtYXRyaXggdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZXMgaW4gdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhlIG1hdHJpeCBnaXZlbiBpbiBwYXJhbWV0ZXIgd2l0aCBpdHMgdmFsdWVzIHVwZGF0ZWQuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQSBkZWZhdWx0IChpZGVudGl0eSkgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5JREVOVElUWSA9IG5ldyBNYXRyaXgoKTtcblxuLyoqXG4gKiBBIHRlbXAgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5URU1QX01BVFJJWCA9IG5ldyBNYXRyaXgoKTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcbn1cblxuUG9pbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvaW50XG4gKlxuICogQHJldHVybiB7UElYSS5Qb2ludH0gYSBjb3B5IG9mIHRoZSBwb2ludFxuICovXG5Qb2ludC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBDb3BpZXMgeCBhbmQgeSBmcm9tIHRoZSBnaXZlbiBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICovXG5Qb2ludC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgdGhpcy5zZXQocC54LCBwLnkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGVxdWFsIHRvIHRoaXMgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gKHAueCA9PT0gdGhpcy54KSAmJiAocC55ID09PSB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5Qb2ludC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy54ID0geCB8fCAwO1xuICAgIHRoaXMueSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLnggOiAwICkgO1xufTtcbiIsIi8qKlxuICogTWF0aCBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgbWl4ZWQgaW50byBQSVhJIG5hbWVzcGFjZS5cbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBUaGVzZSB3aWxsIGJlIG1peGVkIHRvIGJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLFxuICAgIC8vIHdoaWxlIHRoaXMgbW9kdWxlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBjb3JlXG4gICAgLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBjdXQgZG93biBvblxuICAgIC8vIGludGVybmFsIG1vZHVsZSByZXF1aXJlcy5cblxuICAgIFBvaW50OiAgICAgIHJlcXVpcmUoJy4vUG9pbnQnKSxcbiAgICBNYXRyaXg6ICAgICByZXF1aXJlKCcuL01hdHJpeCcpLFxuXG4gICAgQ2lyY2xlOiAgICAgcmVxdWlyZSgnLi9zaGFwZXMvQ2lyY2xlJyksXG4gICAgRWxsaXBzZTogICAgcmVxdWlyZSgnLi9zaGFwZXMvRWxsaXBzZScpLFxuICAgIFBvbHlnb246ICAgIHJlcXVpcmUoJy4vc2hhcGVzL1BvbHlnb24nKSxcbiAgICBSZWN0YW5nbGU6ICByZXF1aXJlKCcuL3NoYXBlcy9SZWN0YW5nbGUnKSxcbiAgICBSb3VuZGVkUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlJylcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIENpcmNsZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICovXG5mdW5jdGlvbiBDaXJjbGUoeCwgeSwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkNJUkM7XG59XG5cbkNpcmNsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaXJjbGU7XG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBDaXJjbGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkNpcmNsZX0gYSBjb3B5IG9mIHRoZSBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBDaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBjaXJjbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmFkaXVzIDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGR4ID0gKHRoaXMueCAtIHgpLFxuICAgICAgICBkeSA9ICh0aGlzLnkgLSB5KSxcbiAgICAgICAgcjIgPSB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzO1xuXG4gICAgZHggKj0gZHg7XG4gICAgZHkgKj0gZHk7XG5cbiAgICByZXR1cm4gKGR4ICsgZHkgPD0gcjIpO1xufTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBjaXJjbGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4qIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiovXG5DaXJjbGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy5yYWRpdXMsIHRoaXMueSAtIHRoaXMucmFkaXVzLCB0aGlzLnJhZGl1cyAqIDIsIHRoaXMucmFkaXVzICogMik7XG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBFbGxpcHNlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGlzIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZVxuICovXG5mdW5jdGlvbiBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkVMSVA7XG59XG5cbkVsbGlwc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRWxsaXBzZTtcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBFbGxpcHNlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5FbGxpcHNlfSBhIGNvcHkgb2YgdGhlIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgRWxsaXBzZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRzIGFyZSB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vbm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDBcbiAgICB2YXIgbm9ybXggPSAoKHggLSB0aGlzLngpIC8gdGhpcy53aWR0aCksXG4gICAgICAgIG5vcm15ID0gKCh5IC0gdGhpcy55KSAvIHRoaXMuaGVpZ2h0KTtcblxuICAgIG5vcm14ICo9IG5vcm14O1xuICAgIG5vcm15ICo9IG5vcm15O1xuXG4gICAgcmV0dXJuIChub3JteCArIG5vcm15IDw9IDEpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgZWxsaXBzZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy53aWR0aCwgdGhpcy55IC0gdGhpcy5oZWlnaHQsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG4iLCJ2YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9Qb2ludCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcG9pbnRzIHtQSVhJLlBvaW50W118bnVtYmVyW118Li4uUElYSS5Qb2ludHwuLi5udW1iZXJ9IFRoaXMgY2FuIGJlIGFuIGFycmF5IG9mIFBvaW50cyB0aGF0IGZvcm0gdGhlIHBvbHlnb24sXG4gKiAgICAgIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIHRoYXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBbeCx5LCB4LHksIC4uLl0sIG9yIHRoZSBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZVxuICogICAgICBhbGwgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvbiBlLmcuIGBuZXcgUElYSS5Qb2x5Z29uKG5ldyBQSVhJLlBvaW50KCksIG5ldyBQSVhJLlBvaW50KCksIC4uLilgLCBvciB0aGVcbiAqICAgICAgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmUgZmxhdCB4LHkgdmFsdWVzIGUuZy4gYG5ldyBQb2x5Z29uKHgseSwgeCx5LCB4LHksIC4uLilgIHdoZXJlIGB4YCBhbmQgYHlgIGFyZVxuICogICAgICBOdW1iZXJzLlxuICovXG5mdW5jdGlvbiBQb2x5Z29uKHBvaW50c18pXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBvaW50c187XG5cbiAgICAvL2lmIHBvaW50cyBpc24ndCBhbiBhcnJheSwgdXNlIGFyZ3VtZW50cyBhcyB0aGUgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgcG9pbnRzLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICBwb2ludHNbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IG9mIHBvaW50cywgY29udmVydCBpdCB0byBhIGZsYXQgYXJyYXkgb2YgbnVtYmVyc1xuICAgIGlmIChwb2ludHNbMF0gaW5zdGFuY2VvZiBQb2ludClcbiAgICB7XG4gICAgICAgIHZhciBwID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBwLnB1c2gocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50cyA9IHA7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5QT0xZO1xufVxuXG5Qb2x5Z29uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvbHlnb247XG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9seWdvblxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9seWdvbn0gYSBjb3B5IG9mIHRoZSBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvbHlnb24odGhpcy5wb2ludHMuc2xpY2UoKSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcG9seWdvblxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBpbnNpZGUgPSBmYWxzZTtcblxuICAgIC8vIHVzZSBzb21lIHJheWNhc3RpbmcgdG8gdGVzdCBoaXRzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL3BvaW50LWluLXBvbHlnb24vYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5wb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbGVuZ3RoIC0gMTsgaSA8IGxlbmd0aDsgaiA9IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB4aSA9IHRoaXMucG9pbnRzW2kgKiAyXSwgeWkgPSB0aGlzLnBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgeGogPSB0aGlzLnBvaW50c1tqICogMl0sIHlqID0gdGhpcy5wb2ludHNbaiAqIDIgKyAxXSxcbiAgICAgICAgICAgIGludGVyc2VjdCA9ICgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICh4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aSk7XG5cbiAgICAgICAgaWYgKGludGVyc2VjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiB0aGUgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcmVjdGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SRUNUO1xufVxuXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XG5cbi8qKlxuICogQSBjb25zdGFudCBlbXB0eSByZWN0YW5nbGUuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblJlY3RhbmdsZS5FTVBUWSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDwgdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDwgdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFJvdW5kZWQgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIHRoYXQgaGFzIG5pY2Ugcm91bmRlZCBjb3JuZXJzLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodCBhbmQgaXRzIHJhZGl1cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gQ29udHJvbHMgdGhlIHJhZGl1cyBvZiB0aGUgcm91bmRlZCBjb3JuZXJzXG4gKi9cbmZ1bmN0aW9uIFJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJSRUM7XG59XG5cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm91bmRlZFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUm91bmRlZFJlY3RhbmdsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUm91bmRlZFJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSb3VuZGVkUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8PSB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUGFydGljbGVDb250YWluZXIgY2xhc3MgaXMgYSByZWFsbHkgZmFzdCB2ZXJzaW9uIG9mIHRoZSBDb250YWluZXIgYnVpbHQgc29sZWx5IGZvciBzcGVlZCxcbiAqIHNvIHVzZSB3aGVuIHlvdSBuZWVkIGEgbG90IG9mIHNwcml0ZXMgb3IgcGFydGljbGVzLiBUaGUgdHJhZGVvZmYgb2YgdGhlIFBhcnRpY2xlQ29udGFpbmVyIGlzIHRoYXQgYWR2YW5jZWRcbiAqIGZ1bmN0aW9uYWxpdHkgd2lsbCBub3Qgd29yay4gUGFydGljbGVDb250YWluZXIgaW1wbGVtZW50cyBvbmx5IHRoZSBiYXNpYyBvYmplY3QgdHJhbnNmb3JtIChwb3NpdGlvbiwgc2NhbGUsIHJvdGF0aW9uKS5cbiAqIEFueSBvdGhlciBmdW5jdGlvbmFsaXR5IGxpa2UgdGludGluZywgbWFza2luZywgZXRjIHdpbGwgbm90IHdvcmsgb24gc3ByaXRlcyBpbiB0aGlzIGJhdGNoLlxuICpcbiAqIEl0J3MgZXh0cmVtZWx5IGVhc3kgdG8gdXNlIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQYXJ0aWNsZUNvbnRhaW5lcigpO1xuICpcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpXG4gKiB7XG4gKiAgICAgdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJteUltYWdlLnBuZ1wiKTtcbiAqICAgICBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEFuZCBoZXJlIHlvdSBoYXZlIGEgaHVuZHJlZCBzcHJpdGVzIHRoYXQgd2lsbCBiZSByZW5kZXJlciBhdCB0aGUgc3BlZWQgb2YgbGlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbbWF4U2l6ZT0xNTAwMF0ge251bWJlcn0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGF0IGNhbiBiZSByZW5kZXJlciBieSB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzXSB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyBvZiBjaGlsZHJlbiB0aGF0IHNob3VsZCBiZSB1cGxvYWRlZCB0byB0aGUgZ3B1IGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnNjYWxlPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBzY2FsZSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5wb3NpdGlvbj10cnVlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBwb3NpdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5yb3RhdGlvbj1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcm90YXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMudXZzPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCB1dnMgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuYWxwaGE9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIGFscGhhIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtiYXRjaFNpemU9MTUwMDBdIHtudW1iZXJ9IE51bWJlciBvZiBwYXJ0aWNsZXMgcGVyIGJhdGNoLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUNvbnRhaW5lcihtYXhTaXplLCBwcm9wZXJ0aWVzLCBiYXRjaFNpemUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBiYXRjaFNpemUgPSBiYXRjaFNpemUgfHwgMTUwMDA7IC8vQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG4gICAgbWF4U2l6ZSA9IG1heFNpemUgfHwgMTUwMDA7XG5cbiAgICAvLyBNYWtpbmcgc3VyZSB0aGUgYmF0Y2ggc2l6ZSBpcyB2YWxpZFxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICB2YXIgbWF4QmF0Y2hTaXplID0gMTYzODQ7XG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhCYXRjaFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgcHJvcGVydGllcyB0byBiZSBkeW5hbWljICh0cnVlKSAvIHN0YXRpYyAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFuW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmF0Y2hTaXplID0gYmF0Y2hTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICpcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlQ2hpbGRyZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBjYW52YXMgcmVuZGVyZXJpbmcuIElmIHRydWUgdGhlbiB0aGUgZWxlbWVudHMgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBuZWFyZXN0IHBpeGVsLiBUaGlzIHByb3ZpZGVzIGEgbmljZSBzcGVlZCBib29zdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZTtcbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbn1cblxuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBwcml2YXRlIHByb3BlcnRpZXMgYXJyYXkgdG8gZHluYW1pYyAvIHN0YXRpYyBiYXNlZCBvbiB0aGUgcGFzc2VkIHByb3BlcnRpZXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMge29iamVjdH0gVGhlIHByb3BlcnRpZXMgdG8gYmUgdXBsb2FkZWRcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnNldFByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKVxue1xuICAgIGlmICggcHJvcGVydGllcyApIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1swXSA9ICdzY2FsZScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5zY2FsZSA6IHRoaXMuX3Byb3BlcnRpZXNbMF07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMV0gPSAncG9zaXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucG9zaXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzFdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzJdID0gJ3JvdGF0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnJvdGF0aW9uIDogdGhpcy5fcHJvcGVydGllc1syXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1szXSA9ICd1dnMnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMudXZzIDogdGhpcy5fcHJvcGVydGllc1szXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1s0XSA9ICdhbHBoYScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5hbHBoYSA6IHRoaXMuX3Byb3BlcnRpZXNbNF07XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcblxuICAgIC8vIFRPRE8gZG9uJ3QgbmVlZCB0byFcbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAvLyAgUElYSS5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybS5jYWxsKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRhaW5lciB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHdlYmdsIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIoIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUgKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlLnJlbmRlciggdGhpcyApO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGZsYWcgdGhhdCBzdGF0aWMgZGF0YSBzaG91bGQgYmUgdXBkYXRlZCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoc21hbGxlc3RDaGlsZEluZGV4KVxue1xuICAgIHZhciBidWZmZXJJbmRleCA9IE1hdGguZmxvb3Ioc21hbGxlc3RDaGlsZEluZGV4IC8gdGhpcy5fYmF0Y2hTaXplKTtcbiAgICBpZiAoYnVmZmVySW5kZXggPCB0aGlzLl9idWZmZXJUb1VwZGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IGJ1ZmZlckluZGV4O1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciBpc1JvdGF0ZWQgPSB0cnVlO1xuXG4gICAgdmFyIHBvc2l0aW9uWCA9IDA7XG4gICAgdmFyIHBvc2l0aW9uWSA9IDA7XG5cbiAgICB2YXIgZmluYWxXaWR0aCA9IDA7XG4gICAgdmFyIGZpbmFsSGVpZ2h0ID0gMDtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZSA9IGNoaWxkLnRleHR1cmUuZnJhbWU7XG5cbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYSAqIGNoaWxkLmFscGhhO1xuXG4gICAgICAgIGlmIChjaGlsZC5yb3RhdGlvbiAlIChNYXRoLlBJICogMikgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZhc3Rlc3QgIHdheSB0byBvcHRpbWlzZSEgLSBpZiByb3RhdGlvbiBpcyAwIHRoZW4gd2UgY2FuIGF2b2lkIGFueSBraW5kIG9mIHNldFRyYW5zZm9ybSBjYWxsXG4gICAgICAgICAgICBpZiAoaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLngpICsgY2hpbGQucG9zaXRpb24ueCAgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnkpICsgY2hpbGQucG9zaXRpb24ueSAgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54O1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55O1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZC5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZFRyYW5zZm9ybSA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHkgfCAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoKSArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0KSArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICBjaGlsZC50ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgIGZyYW1lLngsXG4gICAgICAgICAgICBmcmFtZS55LFxuICAgICAgICAgICAgZnJhbWUud2lkdGgsXG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQsXG4gICAgICAgICAgICBwb3NpdGlvblgsXG4gICAgICAgICAgICBwb3NpdGlvblksXG4gICAgICAgICAgICBmaW5hbFdpZHRoLFxuICAgICAgICAgICAgZmluYWxIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIGlmICh0aGlzLl9idWZmZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcbn07XG4iLCJcbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVCdWZmZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlQnVmZmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFRoZSBwYXJ0aWNsZSBidWZmZXIgbWFuYWdlcyB0aGUgc3RhdGljIGFuZCBkeW5hbWljIGJ1ZmZlcnMgZm9yIGEgcGFydGljbGUgY29udGFpbmVyLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQnVmZmVyKGdsLCBwcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgc2l6ZSlcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleCBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhlIGJ1ZmZlciBjYW4gaG9sZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgZHluYW1pYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBzdGF0aWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgaWYoZHluYW1pY1Byb3BlcnR5RmxhZ3NbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRCdWZmZXJzKCk7XG5cbn1cblxuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQnVmZmVyO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5pbml0QnVmZmVycyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcHJvcGVydHk7XG5cbiAgICB2YXIgZHluYW1pY09mZnNldCA9IDA7XG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IGR5bmFtaWNPZmZzZXQ7XG4gICAgICAgIGR5bmFtaWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5keW5hbWljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG5cblxuICAgIC8vIHN0YXRpYyAvL1xuICAgIHZhciBzdGF0aWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBzdGF0aWNPZmZzZXQ7XG4gICAgICAgIHN0YXRpY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLnN0YXRpY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuc3RhdGljU3RyaWRlICogNCk7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZHluYW1pYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZER5bmFtaWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLmR5bmFtaWNEYXRhLCB0aGlzLmR5bmFtaWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuZHluYW1pY0RhdGEpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBzdGF0aWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWRTdGF0aWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5zdGF0aWNEYXRhLCB0aGlzLnN0YXRpY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLnN0YXRpY0RhdGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyB0byB0aGUgR1BVXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaSwgcHJvcGVydHk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnN0YXRpY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlQnVmZmVyLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5zdGF0aWNCdWZmZXIpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlU2hhZGVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZVNoYWRlcicpLFxuICAgIFBhcnRpY2xlQnVmZmVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUJ1ZmZlcicpLFxuICAgIG1hdGggICAgICAgICAgICA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgLy8gYW5kIG1heCBudW1iZXIgb2YgZWxlbWVudCBpbiB0aGUgaW5kZXggYnVmZmVyIGlzIDE2Mzg0ICogNiA9IDk4MzA0XG4gICAgLy8gQ3JlYXRpbmcgYSBmdWxsIGluZGV4IGJ1ZmZlciwgb3ZlcmhlYWQgaXMgOTgzMDQgKiAyID0gMTk2S29cbiAgICB2YXIgbnVtSW5kaWNlcyA9IDk4MzA0O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShudW1JbmRpY2VzKTtcblxuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgbnVtSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IG51bGw7XG5cbiAgICB0aGlzLnRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcbn1cblxuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3BhcnRpY2xlJywgUGFydGljbGVSZW5kZXJlcik7XG5cbi8qKlxuICogV2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IG5ldyBQYXJ0aWNsZVNoYWRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIpO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IGluZGV4LCBzbyA2NTUzNSAvIDYgPSAxMDkyMi5cblxuICAgIC8vdXBsb2FkIHRoZSBpbmRleCBkYXRhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBbXG4gICAgICAgIC8vIHZlcnRpY2VzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFZlcnRpY2VzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcG9zaXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbkNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRQb3NpdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJvdGF0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUm90YXRpb24sXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFJvdGF0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdXZzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRVdnMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBhbHBoYURhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRBbHBoYSxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgcGFydGljbGUgYmF0Y2guXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGJpbmQgdGhlIG1haW4gdGV4dHVyZVxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgLy8gYmluZCB0aGUgYnVmZmVyc1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgcGFydGljbGUgY29udGFpbmVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgY2hpbGRyZW4gPSBjb250YWluZXIuY2hpbGRyZW4sXG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIG1heFNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplO1xuXG4gICAgaWYodG90YWxDaGlsZHJlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZih0b3RhbENoaWxkcmVuID4gbWF4U2l6ZSlcbiAgICB7XG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBtYXhTaXplO1xuICAgIH1cblxuICAgIGlmKCFjb250YWluZXIuX2J1ZmZlcnMpXG4gICAge1xuICAgICAgICBjb250YWluZXIuX2J1ZmZlcnMgPSB0aGlzLmdlbmVyYXRlQnVmZmVycyggY29udGFpbmVyICk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29udGFpbmVyLmJsZW5kTW9kZSk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIG0gPSAgY29udGFpbmVyLndvcmxkVHJhbnNmb3JtLmNvcHkoIHRoaXMudGVtcE1hdHJpeCApO1xuICAgIG0ucHJlcGVuZCggdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXggKTtcbiAgICBnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgbS50b0FycmF5KHRydWUpKTtcbiAgICBnbC51bmlmb3JtMWYodGhpcy5zaGFkZXIudW5pZm9ybXMudUFscGhhLl9sb2NhdGlvbiwgY29udGFpbmVyLndvcmxkQWxwaGEpO1xuXG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHRleHR1cmUgaXMgYm91bmQuLlxuICAgIHZhciBiYXNlVGV4dHVyZSA9IGNoaWxkcmVuWzBdLl90ZXh0dXJlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgdGV4dHVyZSBoYXMgbm90IHVwZGF0ZWQgdGhlbiBsZXRzIG5vdCB1cGxvYWQgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmKCF0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUoYmFzZVRleHR1cmUpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZighY29udGFpbmVyLl9wcm9wZXJ0aWVzWzBdIHx8ICFjb250YWluZXIuX3Byb3BlcnRpZXNbM10pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgfVxuXG4gICAgLy8gbm93IGxldHMgdXBsb2FkIGFuZCByZW5kZXIgdGhlIGJ1ZmZlcnMuLlxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IHRvdGFsQ2hpbGRyZW47IGkgKz0gYmF0Y2hTaXplLCBqICs9IDEpXG4gICAge1xuICAgICAgICB2YXIgYW1vdW50ID0gKCB0b3RhbENoaWxkcmVuIC0gaSk7XG4gICAgICAgIGlmKGFtb3VudCA+IGJhdGNoU2l6ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50ID0gYmF0Y2hTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRhaW5lci5fYnVmZmVyc1tqXTtcblxuICAgICAgICAvLyB3ZSBhbHdheXMgdXBsb2FkIHRoZSBkeW5hbWljXG4gICAgICAgIGJ1ZmZlci51cGxvYWREeW5hbWljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuXG4gICAgICAgIC8vIHdlIG9ubHkgdXBsb2FkIHRoZSBzdGF0aWMgY29udGVudCB3aGVuIHdlIGhhdmUgdG8hXG4gICAgICAgIGlmKGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPT09IGopXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJ1ZmZlci51cGxvYWRTdGF0aWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gaiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5kIHRoZSBidWZmZXJcbiAgICAgICAgYnVmZmVyLmJpbmQoIHRoaXMuc2hhZGVyICk7XG5cbiAgICAgICAgIC8vIG5vdyBkcmF3IHRob3NlIHN1Y2thcyFcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgYW1vdW50ICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBvbmUgcGFydGljbGUgYnVmZmVyIGZvciBlYWNoIGNoaWxkIGluIHRoZSBjb250YWluZXIgd2Ugd2FudCB0byByZW5kZXIgYW5kIHVwZGF0ZXMgaW50ZXJuYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5nZW5lcmF0ZUJ1ZmZlcnMgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIGJ1ZmZlcnMgPSBbXSxcbiAgICAgICAgc2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemUsXG4gICAgICAgIGR5bmFtaWNQcm9wZXJ0eUZsYWdzID0gY29udGFpbmVyLl9wcm9wZXJ0aWVzLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gYmF0Y2hTaXplKVxuICAgIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKG5ldyBQYXJ0aWNsZUJ1ZmZlcihnbCwgdGhpcy5wcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgYmF0Y2hTaXplKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHZlcnRpY2llcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgdmVydGljZXMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFZlcnRpY2VzID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICB2YXIgc3ByaXRlLFxuICAgICAgICB0ZXh0dXJlLFxuICAgICAgICB0cmltLFxuICAgICAgICBzeCxcbiAgICAgICAgc3ksXG4gICAgICAgIHcwLCB3MSwgaDAsIGgxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xuXG4gICAgICAgIHNwcml0ZSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXTtcbiAgICAgICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZTtcbiAgICAgICAgc3ggPSBzcHJpdGUuc2NhbGUueDtcbiAgICAgICAgc3kgPSBzcHJpdGUuc2NhbGUueTtcblxuICAgICAgICBpZiAodGV4dHVyZS50cmltKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgICAgICB0cmltID0gdGV4dHVyZS50cmltO1xuXG4gICAgICAgICAgICB3MSA9IHRyaW0ueCAtIHNwcml0ZS5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBoMSA9IHRyaW0ueSAtIHNwcml0ZS5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtc3ByaXRlLmFuY2hvci54KTtcbiAgICAgICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtc3ByaXRlLmFuY2hvci54O1xuXG4gICAgICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXNwcml0ZS5hbmNob3IueSk7XG4gICAgICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC1zcHJpdGUuYW5jaG9yLnk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBwb3NpdGlvbnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFBvc2l0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUG9zaXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucG9zaXRpb247XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcm90YXRpb24gdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFJvdGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUm90YXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucm90YXRpb247XG5cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVSb3RhdGlvbjtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgVXZzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRVdnMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlVXZzID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLl90ZXh0dXJlLl91dnM7XG5cbiAgICAgICAgaWYgKHRleHR1cmVVdnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSB0ZXh0dXJlVXZzLngwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZXh0dXJlVXZzLnkwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdGV4dHVyZVV2cy54MTtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gdGV4dHVyZVV2cy55MTtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB0ZXh0dXJlVXZzLngyO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gdGV4dHVyZVV2cy55MjtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB0ZXh0dXJlVXZzLngzO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gdGV4dHVyZVV2cy55MztcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8geW91IGtub3cgdGhpcyBjYW4gYmUgZWFzaWVyIVxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBhbHBoYSB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkQWxwaGEgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZUFscGhhID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLmFscGhhO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZUFscGhhO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVSZW5kZXJlci5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuICAgIHRoaXMudGVtcE1hdHJpeCA9IG51bGw7XG59O1xuIiwidmFyIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVTaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBUZXh0dXJlU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFQb3NpdGlvbkNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVNjYWxlOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFSb3RhdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIHZlYzIgdiA9IGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAnICAgdi54ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIGNvcyhhUm90YXRpb24pIC0gKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIHNpbihhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdi55ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIHNpbihhUm90YXRpb24pICsgKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIGNvcyhhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdiA9IHYgKyBhUG9zaXRpb25Db29yZDsnLFxuXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyh2LCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGhlbGxvXG4gICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCB1QWxwaGE7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3IgKiB1QWxwaGE7JyxcbiAgICAgICAgICAgICcgIGlmIChjb2xvci5hID09IDAuMCkgZGlzY2FyZDsnLFxuICAgICAgICAgICAgJyAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdUFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFQb3NpdGlvbkNvb3JkOiAwLFxuICAgICAgICAgICAvLyBhU2NhbGU6ICAgICAgICAgMCxcbiAgICAgICAgICAgIGFSb3RhdGlvbjogICAgICAwXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVEVNUCBIQUNLXG5cbn1cblxuUGFydGljbGVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlU2hhZGVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVNoYWRlcjtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHN5c3RlbSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgc3lzdGVtIHRoaXMgcmVuZGVyZXIgaXMgZm9yLlxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXSB7bnVtYmVyfSBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcmVuZGVyZWQgYXJlYSAoc2hvd24gaWYgbm90IHRyYW5zcGFyZW50KS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5yb3VuZFBpeGVscz1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBTeXN0ZW1SZW5kZXJlcihzeXN0ZW0sIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB1dGlscy5zYXlIZWxsbyhzeXN0ZW0pO1xuXG4gICAgLy8gcHJlcGFyZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpIGluIENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tpXSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgb3B0aW9ucyA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHNlZSBQSVhJLlJFTkRFUkVSX1RZUEVcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgODAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDgwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgNjAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy52aWV3ID0gb3B0aW9ucy52aWV3IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG9wdGlvbnMucmVzb2x1dGlvbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBvcHRpb25zLnRyYW5zcGFyZW50O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgc2hvdWxkIGJlIHJlc2l6ZWQgYXV0b21hdGljYWxseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvcHRpb25zLmF1dG9SZXNpemUgfHwgZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIGJsZW5kIG1vZGVzIHVzZWZ1bCBmb3IgdGhpcyByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG1peGVkPn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgZmxhZyBhZmZlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50cyBvZiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgcmV0YWluZWQgYWZ0ZXIgcmVuZGVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3Igbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyBOT1QgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBhIGNhbnZhcyBzaXplZCBmaWxsUmVjdCBvcGVyYXRpb24gZXZlcnkgZnJhbWUgdG8gc2V0IHRoZSBjYW52YXMgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBjbGVhclJlY3QgdG8gY2xlYXIgdGhlIGNhbnZhcyBldmVyeSBmcmFtZS5cbiAgICAgKiBEaXNhYmxlIHRoaXMgYnkgc2V0dGluZyB0aGlzIHRvIGZhbHNlLiBGb3IgZXhhbXBsZSBpZiB5b3VyIGdhbWUgaGFzIGEgY2FudmFzIGZpbGxpbmcgYmFja2dyb3VuZCBpbWFnZSB5b3Ugb2Z0ZW4gZG9uJ3QgbmVlZCB0aGlzIHNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHRcbiAgICAgKi9cbiAgICB0aGlzLmNsZWFyQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICAgICAqIEhhbmR5IGZvciBjcmlzcCBwaXhlbCBhcnQgYW5kIHNwZWVkIG9uIGxlZ2FjeSBkZXZpY2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gb3B0aW9ucy5yb3VuZFBpeGVscztcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmEgPSBbMCwgMCwgMCwgMF07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9ICcjMDAwMDAwJztcblxuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yOyAvLyBydW4gYmcgY29sb3Igc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgdHJhbnNmb3JtOnt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKX0sIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3Qgcm9vdCBvYmplY3QgdGhhdCB0aGUgcmVuZGVyZXIgdHJpZWQgdG8gcmVuZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3lzdGVtUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFN5c3RlbVJlbmRlcmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciB0byBmaWxsIGlmIG5vdCB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlN5c3RlbVJlbmRlcmVyI1xuICAgICAqL1xuICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSB1dGlscy5oZXgyc3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB1dGlscy5oZXgycmdiKHZhbCwgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBjYW52YXMgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMudmlldy53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGhpcy52aWV3LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgICAgICB0aGlzLnZpZXcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpIHtcbiAgICBpZiAocmVtb3ZlVmlldyAmJiB0aGlzLnZpZXcucGFyZW50Tm9kZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMudmlldyk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgdGhpcy52aWV3ID0gbnVsbDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IDA7XG5cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBmYWxzZTtcblxuICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcblxuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDA7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IG51bGw7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gbnVsbDtcbn07XG4iLCJ2YXIgU3lzdGVtUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9TeXN0ZW1SZW5kZXJlcicpLFxuICAgIENhbnZhc01hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi91dGlscy9DYW52YXNNYXNrTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBTeXN0ZW1SZW5kZXJlci5jYWxsKHRoaXMsICdDYW52YXMnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuQ0FOVkFTO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMudmlldy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIGZsYWcgY29udHJvbGxpbmcgY2FudmFzIHJlZnJlc2guXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVmcmVzaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBhIENhbnZhc01hc2tNYW5hZ2VyLCBoYW5kbGVzIG1hc2tpbmcgd2hlbiB1c2luZyB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNNYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IENhbnZhc01hc2tNYW5hZ2VyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIHByb3BlcnR5IHVzZWQgdG8gc2V0IHRoZSBjYW52YXMgc21vb3RoaW5nIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnaW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcblxuICAgIGlmICghdGhpcy5jb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ3dlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ29JbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB0aGlzLl9tYXBCbGVuZE1vZGVzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHtcbiAgICAgICAgd29ybGRUcmFuc2Zvcm06IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgICAgICB3b3JsZEFscGhhOiAxXG4gICAgfTtcblxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oQ2FudmFzUmVuZGVyZXIpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byB0aGlzIGNhbnZhcyB2aWV3XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSB0aGUgb2JqZWN0IHRvIGJlIHJlbmRlcmVkXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KVxue1xuICAgIHRoaXMuZW1pdCgncHJlcmVuZGVyJyk7XG5cbiAgICB2YXIgY2FjaGVQYXJlbnQgPSBvYmplY3QucGFyZW50O1xuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gb2JqZWN0O1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIG9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIG9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTICYmIHRoaXMudmlldy5zY3JlZW5jYW52YXMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpXG4gICAge1xuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGggLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlckRpc3BsYXlPYmplY3Qob2JqZWN0LCB0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciBhbmQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSBDYW52YXMgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIFtyZW1vdmVWaWV3PWZhbHNlXSB7Ym9vbGVhbn0gUmVtb3ZlcyB0aGUgQ2FudmFzIGVsZW1lbnQgZnJvbSB0aGUgRE9NLlxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIGNhbGwgdGhlIGJhc2UgZGVzdHJveVxuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcywgcmVtb3ZlVmlldyk7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5T2JqZWN0IHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgY29udGV4dClcbntcbiAgICB2YXIgdGVtcENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyQ2FudmFzKHRoaXMpO1xuICAgIHRoaXMuY29udGV4dCA9IHRlbXBDb250ZXh0O1xufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBQSVhJLlN5c3RlbVJlbmRlcmVyI3Jlc2l6ZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKiBAcGFyYW0ge251bWJlcn0gaFxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHcsIGgpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xuXG4gICAgLy9yZXNldCB0aGUgc2NhbGUgbW9kZS4uIG9kZGx5IHRoaXMgc2VlbXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgY2FudmFzIGlzIHJlc2l6ZWQuXG4gICAgLy9zdXJlbHkgYSBicm93c2VyIGJ1Zz8/IExldCBwaXhpIGZpeCB0aGF0IGZvciB5b3UuLlxuICAgIGlmKHRoaXMuc21vb3RoUHJvcGVydHkpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHRbdGhpcy5zbW9vdGhQcm9wZXJ0eV0gPSAoQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVCA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogTWFwcyBQaXhpIGJsZW5kIG1vZGVzIHRvIGNhbnZhcyBibGVuZCBtb2Rlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX21hcEJsZW5kTW9kZXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5ibGVuZE1vZGVzKVxuICAgIHtcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzID0ge307XG5cbiAgICAgICAgaWYgKHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnbXVsdGlwbHknO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NjcmVlbic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSAnb3ZlcmxheSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnZGFya2VuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MSUdIVEVOXSAgICAgICA9ICdsaWdodGVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdjb2xvci1kb2RnZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnY29sb3ItYnVybic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnaGFyZC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSAnc29mdC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnZGlmZmVyZW5jZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnZXhjbHVzaW9uJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdodWUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gJ3NhdHVyYXRlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl0gICAgICAgICA9ICdjb2xvcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSAnbHVtaW5vc2l0eSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29vbCBuZXcgYmxlbmQgbW9kZXMgaW4gY2FudmFzICdjb3VnaCcgaWUgJ2NvdWdoJ1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNpemUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGNhbnZhc1xuICovXG5mdW5jdGlvbiBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgQ2FudmFzIG9iamVjdCB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBDYW52YXNCdWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogQSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHR3by1kaW1lbnNpb25hbCByZW5kZXJpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59XG5cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0J1ZmZlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FudmFzQnVmZmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIGJ1ZmZlciBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ2FudmFzQnVmZmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdmFsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGNhbnZhcyB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZSBDYW52YXNCdWZmZXIgY2xhc3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbnZhc1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgY2FudmFzLlxuICpcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBjYW52YXMgcmVuZGVyZXIgdG8gZHJhdyB0aGUgcHJpbWl0aXZlIGdyYXBoaWNzIGRhdGEuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNHcmFwaGljcyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNHcmFwaGljcztcblxuLypcbiAqIFJlbmRlcnMgYSBHcmFwaGljcyBvYmplY3QgdG8gYSBjYW52YXMuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgYWN0dWFsIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSAyZCBkcmF3aW5nIG1ldGhvZCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciB3b3JsZEFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuICAgIGlmIChncmFwaGljcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3NUaW50KGdyYXBoaWNzKTtcbiAgICAgICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLl9maWxsVGludDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEuX2xpbmVUaW50O1xuXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZSBjbG9zZSB0aGUgcGF0aCAtIG11Y2ggbmVhdGVyIDopXG4gICAgICAgICAgICBpZiAocG9pbnRzWzBdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAmJiBwb2ludHNbMV0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbENvbG9yIHx8IGRhdGEuZmlsbENvbG9yID09PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmZpbGxBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggZmlsbENvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUud2lkdGgsIHNoYXBlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLDAsMipNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVsbGlwc2UgY29kZSB0YWtlbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcblxuICAgICAgICAgICAgdmFyIHcgPSBzaGFwZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB2YXIgaCA9IHNoYXBlLmhlaWdodCAqIDI7XG5cbiAgICAgICAgICAgIHZhciB4ID0gc2hhcGUueCAtIHcvMjtcbiAgICAgICAgICAgIHZhciB5ID0gc2hhcGUueSAtIGgvMjtcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIGthcHBhID0gMC41NTIyODQ4LFxuICAgICAgICAgICAgICAgIG94ID0gKHcgLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgb3kgPSAoaCAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgeGUgPSB4ICsgdywgICAgICAgICAgIC8vIHgtZW5kXG4gICAgICAgICAgICAgICAgeWUgPSB5ICsgaCwgICAgICAgICAgIC8vIHktZW5kXG4gICAgICAgICAgICAgICAgeG0gPSB4ICsgdyAvIDIsICAgICAgIC8vIHgtbWlkZGxlXG4gICAgICAgICAgICAgICAgeW0gPSB5ICsgaCAvIDI7ICAgICAgIC8vIHktbWlkZGxlXG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG1hc2tcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3Mgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgbWFza1xuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGNvbnRleHQgMmQgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciBsZW4gPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gVE9ETyAtIG5lZWQgdG8gYmUgVW5kZWZpbmVkIVxuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgcnggPSBzaGFwZS54O1xuICAgICAgICAgICAgdmFyIHJ5ID0gc2hhcGUueTtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcbiAgICAgICAgICAgIHZhciByYWRpdXMgPSBzaGFwZS5yYWRpdXM7XG5cbiAgICAgICAgICAgIHZhciBtYXhSYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDIgfCAwO1xuICAgICAgICAgICAgcmFkaXVzID0gcmFkaXVzID4gbWF4UmFkaXVzID8gbWF4UmFkaXVzIDogcmFkaXVzO1xuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRpbnQgb2YgYSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3MgdGhhdCB3aWxsIGhhdmUgaXRzIHRpbnQgdXBkYXRlZFxuICpcbiAqL1xuQ2FudmFzR3JhcGhpY3MudXBkYXRlR3JhcGhpY3NUaW50ID0gZnVuY3Rpb24gKGdyYXBoaWNzKVxue1xuICAgIGlmIChncmFwaGljcy50aW50ID09PSAweEZGRkZGRiAmJiBncmFwaGljcy5fcHJldlRpbnQgPT09IGdyYXBoaWNzLnRpbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyYXBoaWNzLl9wcmV2VGludCA9IGdyYXBoaWNzLnRpbnQ7XG5cbiAgICB2YXIgdGludFIgPSAoZ3JhcGhpY3MudGludCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50RyA9IChncmFwaGljcy50aW50ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgdGludEIgPSAoZ3JhcGhpY3MudGludCAmIDB4RkYpLyAyNTU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLmZpbGxDb2xvciB8IDA7XG4gICAgICAgIHZhciBsaW5lQ29sb3IgPSBkYXRhLmxpbmVDb2xvciB8IDA7XG5cbiAgICAgICAgLypcbiAgICAgICAgdmFyIGNvbG9yUiA9IChmaWxsQ29sb3IgPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgdmFyIGNvbG9yRyA9IChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JCID0gKGZpbGxDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgZmlsbENvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG5cbiAgICAgICAgY29sb3JSID0gKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckcgPSAobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgY29sb3JCID0gKGxpbmVDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgbGluZUNvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG4gICAgICAgICovXG5cbiAgICAgICAgLy8gc3VwZXIgaW5saW5lIGNvcyBpbSBhbiBvcHRpbWl6YXRpb24gTkFaSSA6KVxuICAgICAgICBkYXRhLl9maWxsVGludCA9ICgoKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgoZmlsbENvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAoZmlsbENvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuICAgICAgICBkYXRhLl9saW5lVGludCA9ICgoKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAobGluZUNvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuXG4gICAgfVxufTtcblxuIiwidmFyIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi9DYW52YXNHcmFwaGljcycpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBtYXNraW5nLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ2FudmFzTWFza01hbmFnZXIoKVxue31cblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FudmFzTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc01hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgc3RhY2sgb2YgbWFza3MuXG4gKlxuICogQHBhcmFtIG1hc2tEYXRhIHtvYmplY3R9IHRoZSBtYXNrRGF0YSB0aGF0IHdpbGwgYmUgcHVzaGVkXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSwgcmVuZGVyZXIpXG57XG5cbiAgICByZW5kZXJlci5jb250ZXh0LnNhdmUoKTtcblxuICAgIHZhciBjYWNoZUFscGhhID0gbWFza0RhdGEuYWxwaGE7XG4gICAgdmFyIHRyYW5zZm9ybSA9IG1hc2tEYXRhLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgLy9UT0RPIHN1cG9ydCBzcHJpdGUgYWxwaGEgbWFza3M/P1xuICAgIC8vbG90cyBvZiBlZmZvcnQgcmVxdWlyZWQuIElmIGRlbWFuZCBpcyBncmVhdCBlbm91Z2guLlxuICAgIGlmKCFtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrKG1hc2tEYXRhLCByZW5kZXJlci5jb250ZXh0KTtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5jbGlwKCk7XG4gICAgfVxuXG4gICAgbWFza0RhdGEud29ybGRBbHBoYSA9IGNhY2hlQWxwaGE7XG59O1xuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dCB0byB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZSB0aGUgbWFzayB3YXMgYXBwbGllZC5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLmNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7fTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2RzIGZvciBTcHJpdGUvVGV4dHVyZSB0aW50aW5nLlxuICogQHN0YXRpY1xuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG52YXIgQ2FudmFzVGludGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1RpbnRlcjtcblxuLyoqXG4gKiBCYXNpY2FsbHkgdGhpcyBtZXRob2QganVzdCBuZWVkcyBhIHNwcml0ZSBhbmQgYSBjb2xvciBhbmQgdGludHMgdGhlIHNwcml0ZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSB0aW50ZWQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlID0gZnVuY3Rpb24gKHNwcml0ZSwgY29sb3IpXG57XG4gICAgdmFyIHRleHR1cmUgPSBzcHJpdGUudGV4dHVyZTtcblxuICAgIGNvbG9yID0gQ2FudmFzVGludGVyLnJvdW5kQ29sb3IoY29sb3IpO1xuXG4gICAgdmFyIHN0cmluZ0NvbG9yID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgdGV4dHVyZS50aW50Q2FjaGUgPSB0ZXh0dXJlLnRpbnRDYWNoZSB8fCB7fTtcblxuICAgIGlmICh0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0pXG4gICAge1xuICAgICAgICByZXR1cm4gdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdO1xuICAgIH1cblxuICAgICAvLyBjbG9uZSB0ZXh0dXJlLi5cbiAgICB2YXIgY2FudmFzID0gQ2FudmFzVGludGVyLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8vQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWwodGV4dHVyZSwgc3RyaW5nQ29sb3IsIGNhbnZhcyk7XG4gICAgQ2FudmFzVGludGVyLnRpbnRNZXRob2QodGV4dHVyZSwgY29sb3IsIGNhbnZhcyk7XG5cbiAgICBpZiAoQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSlcbiAgICB7XG4gICAgICAgIC8vIGlzIHRoaXMgYmV0dGVyP1xuICAgICAgICB2YXIgdGludEltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHRpbnRJbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKCk7XG5cbiAgICAgICAgdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdID0gdGludEltYWdlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSBjYW52YXM7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBub3QgY29udmVydGluZyB0aGUgdGV4dHVyZSB0byBhbiBpbWFnZSB0aGVuIHdlIG5lZWQgdG8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXNcbiAgICAgICAgQ2FudmFzVGludGVyLmNhbnZhcyA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdtdWx0aXBseScgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcblxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdvdmVybGF5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoT3ZlcmxheSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1hdG9wJztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgLy8gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG59O1xuXG4vKipcbiAqIFRpbnQgYSB0ZXh0dXJlIHBpeGVsIHBlciBwaXhlbC5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcbiAgICB2YXIgciA9IHJnYlZhbHVlc1swXSwgZyA9IHJnYlZhbHVlc1sxXSwgYiA9IHJnYlZhbHVlc1syXTtcblxuICAgIHZhciBwaXhlbERhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICB2YXIgcGl4ZWxzID0gcGl4ZWxEYXRhLmRhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBpeGVscy5sZW5ndGg7IGkgKz0gNClcbiAgICB7XG4gICAgICAgIHBpeGVsc1tpKzBdICo9IHI7XG4gICAgICAgIHBpeGVsc1tpKzFdICo9IGc7XG4gICAgICAgIHBpeGVsc1tpKzJdICo9IGI7XG4gICAgfVxuXG4gICAgY29udGV4dC5wdXRJbWFnZURhdGEocGl4ZWxEYXRhLCAwLCAwKTtcbn07XG5cbi8qKlxuICogUm91bmRzIHRoZSBzcGVjaWZpZWQgY29sb3IgYWNjb3JkaW5nIHRvIHRoZSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbC5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHJvdW5kLCBzaG91bGQgYmUgYSBoZXggY29sb3JcbiAqL1xuQ2FudmFzVGludGVyLnJvdW5kQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IpXG57XG4gICAgdmFyIHN0ZXAgPSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbDtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcblxuICAgIHJnYlZhbHVlc1swXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1swXSAvIHN0ZXApICogc3RlcCk7XG4gICAgcmdiVmFsdWVzWzFdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzFdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMl0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMl0gLyBzdGVwKSAqIHN0ZXApO1xuXG4gICAgcmV0dXJuIHV0aWxzLnJnYjJoZXgocmdiVmFsdWVzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGNhcCB3aGVuIHJvdW5kaW5nIGNvbG9ycy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsID0gODtcblxuLyoqXG4gKiBUaW50IGNhY2hlIGJvb2xlYW4gZmxhZy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jb252ZXJ0VGludFRvSW1hZ2UgPSBmYWxzZTtcblxuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCwgY29uc2VxdWVudGx5IHRoZSBhYmlsaXR5IHRvIHRpbnQgdXNpbmcgdGhlIG11bHRpcGx5IG1ldGhvZC5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA9IHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKTtcblxuLyoqXG4gKiBUaGUgdGludGluZyBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQuXG4gKlxuICovXG5DYW52YXNUaW50ZXIudGludE1ldGhvZCA9IENhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA/IENhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5IDogIENhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsO1xuIiwidmFyIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcblx0dXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIFRleHR1cmVNYW5hZ2VyID0gZnVuY3Rpb24oZ2wpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyB0cmFjayB0ZXh0dXJlcyBpbiB0aGUgcmVuZGVyZXIgc28gd2UgY2FuIG5vIGxvbmdlciBsaXN0ZW4gdG8gdGhlbSBvbiBkZXN0cnVjdGlvbi5cblx0dGhpcy5fbWFuYWdlZFRleHR1cmVzID0gW107XG4gICAgdGhpcy5nbFRleHR1cmVzID0ge307XG5cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5nZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW5kL29yIENyZWF0ZXMgYSBXZWJHTCB0ZXh0dXJlIGZvciB0aGUgcmVuZGVyZXIncyBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdXBkYXRlXG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuXHRpZiAoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGdsVGV4dHVyZSA9IHRoaXMuZ2xUZXh0dXJlc1t0ZXh0dXJlLnVpZF0vL3RleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgaWYgKCFnbFRleHR1cmUpXG4gICAge1xuICAgICAgICBnbFRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcbiAgICAgICAgZ2xUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSB0cnVlXG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgLy8gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXSA9IGdsVGV4dHVyZTtcblxuICAgICAgICB0ZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9uKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICBnbFRleHR1cmUudXBsb2FkKHRleHR1cmUuc291cmNlKTtcbiAgICBcbiAgICAvL1RPRE8gY2hlY2sgaXMgcG93ZXIgb2YgdHdvLi5cbiAgICBnbFRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cblxuICAgIC8vIFRPRE8gY2hlY2sgZm9yIHNjYWxpbmcgdHlwZVxuICAgIGdsVGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKCk7XG5cbiAgICByZXR1cm4gIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTFxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gZGVzdHJveVxuICovXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlLCBfc2tpcFJlbW92ZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0pXG4gICAge1xuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG5cblxuICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcblxuICAgICAgICBpZiAoIV9za2lwUmVtb3ZlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5pbmRleE9mKHRleHR1cmUpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5fbWFuYWdlZFRleHR1cmVzLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKClcbntcblx0Ly8gZW1wdHkgYWxsIHRoZSBvbGQgZ2wgdGV4dHVyZXMgYXMgdGhleSBhcmUgdXNlbGVzcyBub3dcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzW2ldO1xuICAgICAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuICAgIC8vIGRlc3Ryb3kgbWFuYWdlZCB0ZXh0dXJlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIHRoaXMuZGVzdHJveVRleHR1cmUodGV4dHVyZSwgdHJ1ZSk7XG4gICAgICAgIHRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9mZignZGlzcG9zZScsIHRoaXMuZGVzdHJveVRleHR1cmUsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcyA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZU1hbmFnZXI7XG5cbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgU2hhZGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIE1hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9NYXNrTWFuYWdlcicpLFxuICAgIFN0ZW5jaWxNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlcicpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBCbGVuZE1vZGVNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4vdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBGWEFBRmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBUZXh0dXJlTWFuYWdlciA9IHJlcXVpcmUoJy4vVGV4dHVyZU1hbmFnZXInKSxcbiAgICBjcmVhdGVDb250ZXh0ID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuY3JlYXRlQ29udGV4dCxcbiAgICBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aScpLFxuICAgIG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpID0gcmVxdWlyZSgnLi91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFdlYkdMUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIHdlYkdMIGVuYWJsZWQgY2FudmFzLiBUaGlzIHJlbmRlcmVyXG4gKiBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMLiBUaGlzIFJlbmRlciB3b3JrcyBieSBhdXRvbWF0aWNhbGx5IG1hbmFnaW5nIHdlYkdMQmF0Y2hzLlxuICogU28gbm8gbmVlZCBmb3IgU3ByaXRlIEJhdGNoZXMgb3IgU3ByaXRlIENsb3Vkcy5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIHZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9MF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9MF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMuIElmIG5vdCBhdmFpbGFibGUgbmF0aXZlbHkgdGhlbiBGWEFBIGFudGlhbGlhc2luZyBpcyB1c2VkXG4gKiBAcGFyYW0gW29wdGlvbnMuZm9yY2VGWEFBPWZhbHNlXSB7Ym9vbGVhbn0gZm9yY2VzIEZYQUEgYW50aWFsaWFzaW5nIHRvIGJlIHVzZWQgb3ZlciBuYXRpdmUuIEZYQUEgaXMgZmFzdGVyLCBidXQgbWF5IG5vdCBhbHdheXMgbG9vayBhcyBncmVhdFxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy4gSWYgeW91IHdpc2ggdG8gc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSAqbXVzdCogc2V0IHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byBgdHJ1ZWAuXG4gKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmXG4gKiAgICAgIHlvdSBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0LlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ1dlYkdMJywgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIHJlbmRlcmVyIGFzIGEgc3RhbmRhcmRpc2VkIGNvbnN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9Ly9cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0w7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gdGhpcy5oYW5kbGVDb250ZXh0TG9zdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5oYW5kbGVDb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gY3JlYXRlIGEgbmV3IHdlYmdsIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgICAgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQsXG4gICAgICAgIGFudGlhbGlhczogb3B0aW9ucy5hbnRpYWxpYXMsXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnRyYW5zcGFyZW50ICE9PSAnbm90TXVsdGlwbGllZCcsXG4gICAgICAgIHN0ZW5jaWw6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICB9O1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYVszXSA9IHRoaXMudHJhbnNwYXJlbnQgPyAwIDogMTtcblxuICAgIC8qKlxuICAgICAqIERlYWxzIHdpdGggbWFuYWdpbmcgdGhlIHNoYWRlciBwcm9ncmFtcyBhbmQgdGhlaXIgYXR0cmlicy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBuZXcgU2hhZGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1hc2tzIHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWFza01hbmFnZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG5ldyBNYXNrTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyID0gbmV3IFN0ZW5jaWxNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRmlsdGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlck1hbmFnZXIgPSBuZXcgRmlsdGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIGJsZW5kTW9kZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmxlbmRNb2RlTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBuZXcgQmxlbmRNb2RlTWFuYWdlcih0aGlzKTtcblxuICAgIFxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIE9iamVjdFJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5PYmplY3RSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG5ldyBPYmplY3RSZW5kZXJlcih0aGlzKTtcblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIGNvbnRleHQgc28gaXQgaXMgcmVhZHkgZm9yIHRoZSBtYW5hZ2Vycy5cbiAgICB0aGlzLmdsID0gY3JlYXRlQ29udGV4dCh0aGlzLnZpZXcsIHRoaXMuX2NvbnRleHRPcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXRDb250ZXh0KCk7XG5cbiAgICAvLyBtYXAgc29tZSB3ZWJHTCBibGVuZCBhbmQgZHJhd21vZGVzLi5cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wpO1xuICAgIHRoaXMuZHJhd01vZGVzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wpXG5cbiAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXR9XG4gICAgICovXG4gICAgdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUZXh0dXJlTG9jYXRpb24gPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oV2ViR0xSZW5kZXJlcik7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgV2ViR0wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLl9pbml0Q29udGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgbWFuYWdlci4uLlxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hbmFnZXIoZ2wpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBkZWZhdWx0IHBpeGkgc2V0dGluZ3MuLlxuICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG5cblxuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBudWxsLCB0aGlzLnJlc29sdXRpb24sIHRydWUpO1xuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5jbGVhckNvbG9yID0gdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYTtcbiAgICBcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQodGhpcy5yb290UmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMuZW1pdCgnY29udGV4dCcsIGdsKTtcblxuICAgIC8vIHNldHVwIHRoZSB3aWR0aC9oZWlnaHQgcHJvcGVydGllcyBhbmQgZ2wgdmlld3BvcnRcbiAgICB0aGlzLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7ICAgIFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gaXRzIHdlYkdMIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIC8vIG5vIHBvaW50IHJlbmRlcmluZyBpZiBvdXIgY29udGV4dCBoYXMgYmVlbiBibG93biB1cCFcbiAgICBpZiAodGhpcy5nbC5pc0NvbnRleHRMb3N0KCkpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gZGlzcGxheU9iamVjdDtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IGRpc3BsYXlPYmplY3QucGFyZW50O1xuICAgIGRpc3BsYXlPYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIGRpc3BsYXlPYmplY3QudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnJvb3RSZW5kZXJUYXJnZXQsIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpOy8vdGhpcy5wcm9qZWN0aW9uKTtcblxuICAgIHRoaXMuZW1pdCgncG9zdHJlbmRlcicpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgRGlzcGxheSBPYmplY3QuXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0gcmVuZGVyVGFyZ2V0IHtQSVhJLlJlbmRlclRhcmdldH0gVGhlIHJlbmRlciB0YXJnZXQgdG8gdXNlIHRvIHJlbmRlciB0aGlzIGRpc3BsYXkgb2JqZWN0XG4gKlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJEaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHJlbmRlclRhcmdldCwgY2xlYXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgdGhpcy5iaW5kUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG5cbiAgICBpZihjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IHRoZSBmaWx0ZXIgbWFuYWdlclxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5zZXRGaWx0ZXJTdGFjayggcmVuZGVyVGFyZ2V0LmZpbHRlclN0YWNrICk7XG5cbiAgICAvLyByZW5kZXIgdGhlIHNjZW5lIVxuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyV2ViR0wodGhpcyk7XG5cbiAgICAvLyBmaW5pc2ggdGhlIGN1cnJlbnQgcmVuZGVyZXIuLlxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdGhlIG9uZSBnaXZlbiBpbiBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gb2JqZWN0UmVuZGVyZXIge1BJWEkuT2JqZWN0UmVuZGVyZXJ9IFRoZSBvYmplY3QgcmVuZGVyZXIgdG8gdXNlLlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRPYmplY3RSZW5kZXJlciA9IGZ1bmN0aW9uIChvYmplY3RSZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyZXIgPT09IG9iamVjdFJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0b3AoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG9iamVjdFJlbmRlcmVyO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHdlYkdMIHZpZXcgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB3ZWJHTCB2aWV3XG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB3ZWJHTCB2aWV3XG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9PT0gdGhpcy5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSB0aGUgbmV3IHJlbmRlciB0YXJnZXRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgaWYocmVuZGVyVGFyZ2V0ICE9PSB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcblxuICAgICAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLnNldE1hc2tTdGFjayggcmVuZGVyVGFyZ2V0LnN0ZW5jaWxNYXNrU3RhY2sgKTtcbiAgICB9XG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKS8vcHJvamVjdGlvbiwgYnVmZmVyKVxue1xuICAgIC8vVE9ETyBjYWNoZVxuICAgIGlmKHRoaXMuX2FjdGl2ZVNoYWRlciAhPT0gc2hhZGVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlU2hhZGVyID0gc2hhZGVyO1xuICAgICAgICBzaGFkZXIuYmluZCgpO1xuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgfVxufVxuXG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvY2F0aW9uKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvL1RPRE8gdGVzdCBwZXJmIG9mIGNhY2hlP1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gfHwgMDtcblxuICAgIGlmKHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiAhPT0gbG9jYXRpb24pLy9cbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbiApO1xuICAgIH1cblxuICAgIC8vVE9ETyAtIGNhbiB3ZSBjYWNoZSB0aGlzIHRleHR1cmUgdG9vP1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOyAgICAgIFxuICAgIFxuICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBiaW5kIHRoZSB0ZXh0dXJlLi5cbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0uYmluZCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEhhbmRsZXMgYSBsb3N0IHdlYmdsIGNvbnRleHRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5oYW5kbGVDb250ZXh0TG9zdCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGEgcmVzdG9yZWQgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnJlbW92ZUFsbCgpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgKGV2ZW50IGxpc3RlbmVycywgc3ByaXRlYmF0Y2gsIGV0Yy4uLilcbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldylcbntcbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICAvLyByZW1vdmUgbGlzdGVuZXJzXG4gICAgdGhpcy52aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0KTtcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCk7XG5cbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLmRlc3Ryb3lBbGwoKTtcblxuICAgIC8vIGNhbGwgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMudWlkID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIG1hbmFnZXJzXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLm1hc2tNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gbnVsbDtcbiAgICB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLnVzZVByb2dyYW0obnVsbCk7XG4gICAgdGhpcy5nbCA9IG51bGw7XG59O1xuXG4iLCJ2YXIgRGVmYXVsdFNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgUElYSSBmaWx0ZXIuIEN1cnJlbnRseSBvbmx5IFdlYkdMIHN1cHBvcnRzIGZpbHRlcnMuXG4gKiBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIGZpbHRlciB0aGlzIHNob3VsZCBiZSB5b3VyIGJhc2UgY2xhc3MuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHZlcnRleFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdmVydGV4IHNoYWRlciBzb3VyY2UgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBmcmFnbWVudFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIHVuaWZvcm1zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1bmlmb3JtcyBmb3IgdGhpcyBmaWx0ZXIuXG4gKi9cbmZ1bmN0aW9uIEFic3RyYWN0RmlsdGVyKHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zKVxue1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygc2hhZGVyc1xuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlcnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHRyYSBwYWRkaW5nIHRoYXQgdGhlIGZpbHRlciBtaWdodCBuZWVkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIHZlcnRleCBzaGFkZXJcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmdbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmVydGV4U3JjID0gdmVydGV4U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIG9mIHRoZSBmcmFtZW50IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgLy9UT0RPIGEgcmVtaW5kZXIgLSB3b3VsZCBiZSBjb29sIHRvIGhhdmUgbG93ZXIgcmVzIGZpbHRlcnMgYXMgdGhpcyB3b3VsZCBnaXZlIGJldHRlciBwZXJmb3JtYW5jZS5cblxuICAgIC8vdHlwZW9mIGZyYWdtZW50U3JjID09PSAnc3RyaW5nJyA/IGZyYWdtZW50U3JjLnNwbGl0KCcnKSA6IChmcmFnbWVudFNyYyB8fCBbXSk7XG5cbn1cblxuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RmlsdGVyO1xuXG4vKipcbiAqIEdyYWJzIGEgc2hhZGVyIGZyb20gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBzaGFkZXIgZnJvbVxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuZ2V0U2hhZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyc1tnbC5pZF07XG5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IG5ldyBEZWZhdWx0U2hhZGVyKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIsXG4gICAgICAgICAgICB0aGlzLnZlcnRleFNyYyxcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRTcmMsXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaGFkZXJzW2dsLmlkXSA9IHNoYWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbn07XG5cbi8qKlxuICogU3luY3MgYSB1bmlmb3JtIGJldHdlZW4gdGhlIGNsYXNzIG9iamVjdCBhbmQgdGhlIHNoYWRlcnMuXG4gKlxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuc2hhZGVycy5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnNoYWRlcnNbaV0uc3luY1VuaWZvcm0odW5pZm9ybSk7XG4gICAgfVxufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKlxuICogQmFzaWMgRlhBQSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgY29kZSBvbiBnZWVrczNkLmNvbSB3aXRoIHRoZVxuICogbW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXG4gKiB1bnN1cHBvcnRlZCBieSBXZWJHTC5cbiAqXG4gKiAtLVxuICogRnJvbTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICpcbiAqL1xuZnVuY3Rpb24gRlhBQUZpbHRlcigpXG57XG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxuXFxudm9pZCB0ZXhjb29yZHModmVjMiBmcmFnQ29vcmQsIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk5XLCBvdXQgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiU1csIG91dCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzIgaW52ZXJzZVZQID0gMS4wIC8gcmVzb2x1dGlvbi54eTtcXG4gICAgdl9yZ2JOVyA9IChmcmFnQ29vcmQgKyB2ZWMyKC0xLjAsIC0xLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JORSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYlNXID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU0UgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIDEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk0gPSB2ZWMyKGZyYWdDb29yZCAqIGludmVyc2VWUCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbiAgIHZSZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcXG5cXG4gICAvL2NvbXB1dGUgdGhlIHRleHR1cmUgY29vcmRzIGFuZCBzZW5kIHRoZW0gdG8gdmFyeWluZ3NcXG4gICB0ZXhjb29yZHMoYVRleHR1cmVDb29yZCAqIHJlc29sdXRpb24sIHJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG5cXG4vKipcXG5CYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXFxubW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXFxudW5zdXBwb3J0ZWQgYnkgV2ViR0wuXFxuXFxuLS1cXG5cXG5Gcm9tOlxcbmh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XFxuXFxuQ29weXJpZ2h0IChjKSAyMDExIGJ5IEFybWluIFJvbmFjaGVyLlxcblxcblNvbWUgcmlnaHRzIHJlc2VydmVkLlxcblxcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcXG5tZXQ6XFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcXG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxcbiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXFxuICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXFxuICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxcblxcbiAgICAqIFRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yXFxuICAgICAgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljXFxuICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxcblxcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcXG5cXFwiQVMgSVNcXFwiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxcbkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXFxuT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXFxuU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxcblRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxcbiovXFxuXFxuI2lmbmRlZiBGWEFBX1JFRFVDRV9NSU5cXG4gICAgI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gICAoMS4wLyAxMjguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01VTFxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAgICgxLjAgLyA4LjApXFxuI2VuZGlmXFxuI2lmbmRlZiBGWEFBX1NQQU5fTUFYXFxuICAgICNkZWZpbmUgRlhBQV9TUEFOX01BWCAgICAgOC4wXFxuI2VuZGlmXFxuXFxuLy9vcHRpbWl6ZWQgdmVyc2lvbiBmb3IgbW9iaWxlLCB3aGVyZSBkZXBlbmRlbnRcXG4vL3RleHR1cmUgcmVhZHMgY2FuIGJlIGEgYm90dGxlbmVja1xcbnZlYzQgZnhhYShzYW1wbGVyMkQgdGV4LCB2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JOVywgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JTVywgdmVjMiB2X3JnYlNFLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzQgY29sb3I7XFxuICAgIG1lZGl1bXAgdmVjMiBpbnZlcnNlVlAgPSB2ZWMyKDEuMCAvIHJlc29sdXRpb24ueCwgMS4wIC8gcmVzb2x1dGlvbi55KTtcXG4gICAgdmVjMyByZ2JOVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTlcpLnh5ejtcXG4gICAgdmVjMyByZ2JORSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTkUpLnh5ejtcXG4gICAgdmVjMyByZ2JTVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU1cpLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU0UpLnh5ejtcXG4gICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTSk7XFxuICAgIHZlYzMgcmdiTSAgPSB0ZXhDb2xvci54eXo7XFxuICAgIHZlYzMgbHVtYSA9IHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdChyZ2JOVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFORSA9IGRvdChyZ2JORSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTVyA9IGRvdChyZ2JTVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdChyZ2JTRSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNICA9IGRvdChyZ2JNLCAgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNaW4gPSBtaW4obHVtYU0sIG1pbihtaW4obHVtYU5XLCBsdW1hTkUpLCBtaW4obHVtYVNXLCBsdW1hU0UpKSk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgobHVtYU0sIG1heChtYXgobHVtYU5XLCBsdW1hTkUpLCBtYXgobHVtYVNXLCBsdW1hU0UpKSk7XFxuXFxuICAgIG1lZGl1bXAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcblxcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoKGx1bWFOVyArIGx1bWFORSArIGx1bWFTVyArIGx1bWFTRSkgKlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwpLCBGWEFBX1JFRFVDRV9NSU4pO1xcblxcbiAgICBmbG9hdCByY3BEaXJNaW4gPSAxLjAgLyAobWluKGFicyhkaXIueCksIGFicyhkaXIueSkpICsgZGlyUmVkdWNlKTtcXG4gICAgZGlyID0gbWluKHZlYzIoRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBtYXgodmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiBpbnZlcnNlVlA7XFxuXFxuICAgIHZlYzMgcmdiQSA9IDAuNSAqIChcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqICgxLjAgLyAzLjAgLSAwLjUpKS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDIuMCAvIDMuMCAtIDAuNSkpLnh5eik7XFxuICAgIHZlYzMgcmdiQiA9IHJnYkEgKiAwLjUgKyAwLjI1ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogLTAuNSkueHl6ICtcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqIDAuNSkueHl6KTtcXG5cXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QocmdiQiwgbHVtYSk7XFxuICAgIGlmICgobHVtYUIgPCBsdW1hTWluKSB8fCAobHVtYUIgPiBsdW1hTWF4KSlcXG4gICAgICAgIGNvbG9yID0gdmVjNChyZ2JBLCB0ZXhDb2xvci5hKTtcXG4gICAgZWxzZVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkIsIHRleENvbG9yLmEpO1xcbiAgICByZXR1cm4gY29sb3I7XFxufVxcblxcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBmeGFhKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICogdlJlc29sdXRpb24sIHZSZXNvbHV0aW9uLCB2X3JnYk5XLCB2X3JnYk5FLCB2X3JnYlNXLCB2X3JnYlNFLCB2X3JnYk0pO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxufVxuXG5GWEFBRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkZYQUFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRlhBQUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRlhBQUZpbHRlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICovXG5GWEFBRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIoIHJlbmRlcmVyICk7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG4iLCJ2YXIgQWJzdHJhY3RGaWx0ZXIgPSByZXF1aXJlKCcuL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgU3ByaXRlTWFza0ZpbHRlciBjbGFzc1xuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICovXG5mdW5jdGlvbiBTcHJpdGVNYXNrRmlsdGVyKHNwcml0ZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXNrQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICAgdk1hc2tDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIC8vIGNoZWNrIGNsaXAhIHRoaXMgd2lsbCBzdG9wIHRoZSBtYXNrIGJsZWVkaW5nIG91dCBmcm9tIHRoZSBlZGdlc1xcbiAgICB2ZWMyIHRleHQgPSBhYnMoIHZNYXNrQ29vcmQgLSAwLjUgKTtcXG4gICAgdGV4dCA9IHN0ZXAoMC41LCB0ZXh0KTtcXG4gICAgZmxvYXQgY2xpcCA9IDEuMCAtIG1heCh0ZXh0LnksIHRleHQueCk7XFxuICAgIHZlYzQgb3JpZ2luYWwgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgICB2ZWM0IG1hc2t5ID0gdGV4dHVyZTJEKG1hc2ssIHZNYXNrQ29vcmQpO1xcbiAgICBvcmlnaW5hbCAqPSAobWFza3kuciAqIG1hc2t5LmEgKiBhbHBoYSAqIGNsaXApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBvcmlnaW5hbDtcXG59XFxuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hc2s6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLl90ZXh0dXJlIH0sXG4gICAgICAgICAgICBhbHBoYTogICAgICAgICAgeyB0eXBlOiAnZicsIHZhbHVlOiAxfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG59XG5cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVNYXNrRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVNYXNrRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS5fdGV4dHVyZTtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS53b3JsZEFscGhhO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHVzZWQgdG8gbW92ZSB0aGUgZGlzcGxhY2VtZW50IG1hcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlTWFza0ZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHbE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQmxlbmRNb2RlTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59XG5cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmRNb2RlTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxlbmRNb2RlTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzLXVwIHRoZSBnaXZlbiBibGVuZE1vZGUgZnJvbSBXZWJHTCdzIHBvaW50IG9mIHZpZXcuXG4gKlxuICogQHBhcmFtIGJsZW5kTW9kZSB7bnVtYmVyfSB0aGUgYmxlbmRNb2RlLCBzaG91bGQgYmUgYSBQaXhpIGNvbnN0LCBzdWNoIGFzIGBQSVhJLkJMRU5EX01PREVTLkFERGAuIFNlZVxuICogIHtAbGluayBQSVhJLkJMRU5EX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICovXG5CbGVuZE1vZGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRCbGVuZE1vZGUgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPT09IGJsZW5kTW9kZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMucmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmN1cnJlbnRCbGVuZE1vZGVdO1xuICAgIHRoaXMucmVuZGVyZXIuZ2wuYmxlbmRGdW5jKG1vZGVbMF0sIG1vZGVbMV0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpLFxuICAgIFF1YWQgPSByZXF1aXJlKCcuLi91dGlscy9RdWFkJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gRmlsdGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW107XG5cbiAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICByZW5kZXJUYXJnZXQ6cmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldCxcbiAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICBib3VuZHM6bnVsbFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgLy8gbGlzdGVuIGZvciBjb250ZXh0IGFuZCB1cGRhdGUgbmVjZXNzYXJ5IGJ1ZmZlcnNcbiAgICAvL1RPRE8gbWFrZSB0aGlzIGR5bmFtaWMhXG4gICAgLy9UT0RPIHRlc3QgdGhpcyBvdXQgYnkgZm9yY2VzIHBvd2VyIG9mIHR3bz9cbiAgICB0aGlzLnRleHR1cmVTaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZnJhbWVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcbn1cblxuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWx0ZXJNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBGaWx0ZXJNYW5hZ2VyO1xuXG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnF1YWQgPSBuZXcgUXVhZChnbCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHBhcmFtIGJ1ZmZlciB7QXJyYXlCdWZmZXJ9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnNldEZpbHRlclN0YWNrID0gZnVuY3Rpb24gKCBmaWx0ZXJTdGFjayApXG57XG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IGZpbHRlclN0YWNrO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXIgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBmaWx0ZXJzIHtQSVhJLkFic3RyYWN0RmlsZXJbXX0gdGhlIGZpbHRlcnMgdGhhdCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2tcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucHVzaEZpbHRlciA9IGZ1bmN0aW9uICh0YXJnZXQsIGZpbHRlcnMpXG57XG4gICAgLy8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdC4uXG4gICAgLy8gVE9ETyByZXBsYWNlIGNsb25lIHdpdGggYSBjb3B5IHRvIHNhdmUgb2JqZWN0IGNyZWF0aW9uXG4gICAgdmFyIGJvdW5kcyA9IHRhcmdldC5maWx0ZXJBcmVhID8gdGFyZ2V0LmZpbHRlckFyZWEuY2xvbmUoKSA6IHRhcmdldC5nZXRCb3VuZHMoKTtcblxuICAgIC8vYm91bmRzID0gYm91bmRzLmNsb25lKCk7XG5cbiAgICAvLyByb3VuZCBvZmYgdGhlIHJlY3RhbmdsZSB0byBnZXQgYSBuaWNlIHNtb29vb29vb3RoIGZpbHRlciA6KVxuICAgIGJvdW5kcy54ID0gYm91bmRzLnggfCAwO1xuICAgIGJvdW5kcy55ID0gYm91bmRzLnkgfCAwO1xuICAgIGJvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCB8IDA7XG4gICAgYm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgfCAwO1xuXG5cbiAgICAvLyBwYWRkaW5nIVxuICAgIHZhciBwYWRkaW5nID0gZmlsdGVyc1swXS5wYWRkaW5nIHwgMDtcbiAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG5cblxuICAgIGlmKHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvL1RPRE8gdGhpcyB3aWxsIGJyZWFrIGlmIHRoZSByZW5kZXJUZXh0dXJlIHRyYW5zZm9ybSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgdHJhbnNsYXRpb24uXG4gICAgICAgIC8vV2lsbCBuZWVkIHRvIHRha2UgdGhlIGZ1bGwgbWF0cml4IHRyYW5zZm9ybSBpbnRvIGFjb3VudC4uXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQudHJhbnNmb3JtO1xuXG4gICAgICAgIGJvdW5kcy54ICs9IHRyYW5zZm9ybS50eDtcbiAgICAgICAgYm91bmRzLnkgKz0gdHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG5cbiAgICAgICAgYm91bmRzLnggLT0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSAtPSB0cmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgICB0aGlzLmNhcEZpbHRlckFyZWEoIGJvdW5kcyApO1xuICAgIH1cblxuICAgIGlmKGJvdW5kcy53aWR0aCA+IDAgJiYgYm91bmRzLmhlaWdodCA+IDApXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGJvdW5kcztcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGV4dHVyZSk7XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRleHR1cmUuLlxuICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gVE9ETyBnZXQgcmlkIG9mIG9iamVjdCBjcmVhdGlvbiFcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogdGV4dHVyZSxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBwdXNoIHNvbXRoaW5nIG9uIHRvIHRoZSBzdGFjayB0aGF0IGlzIGVtcHR5XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcnNcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnBvcEZpbHRlciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrLnBvcCgpO1xuICAgIHZhciBwcmV2aW91c0ZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrW3RoaXMuZmlsdGVyU3RhY2subGVuZ3RoLTFdO1xuXG4gICAgdmFyIGlucHV0ID0gZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyBpZiB0aGUgcmVuZGVyVGFyZ2V0IGlzIG51bGwgdGhlbiB3ZSBkb24ndCBhcHBseSB0aGUgZmlsdGVyIGFzIGl0cyBvZmZzY3JlZW5cbiAgICBpZighZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IHByZXZpb3VzRmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyB1c2UgcHJvZ3JhbVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaW5wdXQuZnJhbWU7XG5cbiAgICB0aGlzLnF1YWQubWFwKHRoaXMudGV4dHVyZVNpemUsIGlucHV0LmZyYW1lKTtcblxuXG4gICAgLy8gVE9ETy4uIHRoaXMgcHJvYmFibHkgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgZmlsdGVycyA9IGZpbHRlckRhdGEuZmlsdGVyO1xuXG4gICAgLy8gYXNzdW1pbmcgYWxsIGZpbHRlcnMgZm9sbG93IHRoZSBjb3JyZWN0IGZvcm1hdD8/XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAyICogNCAqIDQpO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIG5vcm1hbCBibGVuZG1vZGUhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShDT05TVC5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAxKVxuICAgIHtcbiAgICAgICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoZW4gc2V0dGluZyB0aGlzIGVhY2ggdGltZT9cbiAgICAgICAgaWYgKGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgIGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1swXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgaW5wdXQsIG91dHB1dCApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggaW5wdXQgKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZmxpcFRleHR1cmUgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3BUZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aC0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICAgICAgaWYgKGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBmbG9wVGV4dHVyZSApO1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGZsaXBUZXh0dXJlO1xuICAgICAgICAgICAgZmxpcFRleHR1cmUgPSBmbG9wVGV4dHVyZTtcbiAgICAgICAgICAgIGZsb3BUZXh0dXJlID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlcnNbZmlsdGVycy5sZW5ndGgtMV0uYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBvdXRwdXQgKTtcblxuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxpcFRleHR1cmUgKTtcbiAgICAgICAgdGhpcy5yZXR1cm5SZW5kZXJUYXJnZXQoIGZsb3BUZXh0dXJlICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckRhdGEuZmlsdGVyO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY2xlYXIgdGhlIFJlbmRlclRhcmdldFxuICogQHJldHVybiB7UmVuZGVyVGFyZ2V0fVxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIGNsZWFyIClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy50ZXh0dXJlUG9vbC5wb3AoKSB8fCBuZXcgUmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyZXIuZ2wsIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0LCBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiAqIENPTlNULkZJTFRFUl9SRVNPTFVUSU9OKTtcbiAgICByZW5kZXJUYXJnZXQuZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcih0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyVGFyZ2V0O1xufTtcblxuLypcbiAqIFJldHVybnMgYSBSZW5kZXJUYXJnZXQgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1JlbmRlclRhcmdldH0gVGhlIFJlbmRlclRhcmdldCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5SZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0KVxue1xuICAgIHRoaXMudGV4dHVyZVBvb2wucHVzaCggcmVuZGVyVGFyZ2V0ICk7XG59O1xuXG4vKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2hhZGVyIHtTaGFkZXJ9IFRoZSBzaGFkZXIgdG8gdXBsb2FkXG4gKiBAcGFyYW0gaW5wdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBjbGVhciB0aGUgb3V0cHV0VGFyZ2V0XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHNoYWRlciwgaW5wdXRUYXJnZXQsIG91dHB1dFRhcmdldCwgY2xlYXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG91dHB1dFRhcmdldCk7XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICBvdXRwdXRUYXJnZXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHNoYWRlclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gQ2FuIHRoaXMgYmUgY2FjaGVkIGFuZCBub3QgYHRvQXJyYXlgZWQgZWFjaCBmcmFtZT9cbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG5cbiAgICAvL1RPRE8gY2FuIHRoaXMgYmUgb3B0aW1pc2VkP1xuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcbi8qXG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcbiovXG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBpbnB1dFRhcmdldC50ZXh0dXJlKTtcblxuICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbn07XG5cbi8qXG4gKiBDYWxjdWxhdGVzIHRoZSBtYXBwZWQgbWF0cml4XG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWFcbiAqIEBwYXJhbSBzcHJpdGUge1Nwcml0ZX0gdGhlIHRhcmdldCBzcHJpdGVcbiAqIEBwYXJhbSBvdXRwdXRNYXRyaXgge01hdHJpeH0gQGFsdmluXG4gKi9cbi8vIFRPRE8gcGxheWluZyBhcm91bmQgaGVyZS4uIHRoaXMgaXMgdGVtcG9yYXJ5IC0gKHdpbGwgZW5kIHVwIGluIHRoZSBzaGFkZXIpXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jYWxjdWxhdGVNYXBwZWRNYXRyaXggPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSwgc3ByaXRlLCBvdXRwdXRNYXRyaXgpXG57XG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gc3ByaXRlLndvcmxkVHJhbnNmb3JtLmNvcHkobWF0aC5NYXRyaXguVEVNUF9NQVRSSVgpLFxuICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICB2YXIgbWFwcGVkTWF0cml4ID0gb3V0cHV0TWF0cml4LmlkZW50aXR5KCk7XG5cbiAgICAvLyBzY2FsZS4uXG4gICAgdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCApO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKDEgLCByYXRpbyk7XG5cbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyB0ZXh0dXJlLndpZHRoKTtcbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gdGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0udHggLz0gdGV4dHVyZS53aWR0aCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICB3b3JsZFRyYW5zZm9ybS50eSAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0uaW52ZXJ0KCk7XG5cbiAgICBtYXBwZWRNYXRyaXgucHJlcGVuZCh3b3JsZFRyYW5zZm9ybSk7XG5cbiAgICAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIG1hcHBlZE1hdHJpeC50cmFuc2xhdGUoc3ByaXRlLmFuY2hvci54LCBzcHJpdGUuYW5jaG9yLnkpO1xuXG4gICAgcmV0dXJuIG1hcHBlZE1hdHJpeDtcblxuICAgIC8vIEtlZXBpbmcgdGhlIG9yZ2luYWwgYXMgYSByZW1pbmRlciB0byBtZSBvbiBob3cgdGhpcyB3b3JrcyFcbiAgICAvL1xuICAgIC8vIHZhciBtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvLyAvLyBzY2FsZS4uXG4gICAgLy8gdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgLy8gbS50cmFuc2xhdGUoZmlsdGVyQXJlYS54IC8gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgZmlsdGVyQXJlYS55IC8gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQpO1xuXG5cbiAgICAvLyBtLnNjYWxlKDEgLCByYXRpbyk7XG5cblxuICAgIC8vIHZhciB0cmFuc2Zvcm0gPSB3dC5jbG9uZSgpO1xuXG4gICAgLy8gdmFyIHRyYW5zbGF0ZVNjYWxlWCA9ICh0aGlzLnRleHR1cmVTaXplLndpZHRoIC8gNjIwKTtcbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gMzgwKTtcblxuICAgIC8vIHRyYW5zZm9ybS50eCAvPSA2MjAgKiB0cmFuc2xhdGVTY2FsZVg7XG4gICAgLy8gdHJhbnNmb3JtLnR5IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcblxuICAgIC8vIHRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIC8vIHRyYW5zZm9ybS5hcHBlbmQobSk7XG5cbiAgICAvLyAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgLy8gdHJhbnNmb3JtLnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIC8vIHJldHVybiB0cmFuc2Zvcm07XG59O1xuXG4vKlxuICogQ29uc3RyYWlucyB0aGUgZmlsdGVyIGFyZWEgdG8gdGhlIHRleHR1cmUgc2l6ZVxuICogQHBhcmFtIGZpbHRlckFyZWEge1JlY3RhbmdsZX0gVGhlIGZpbHRlciBhcmVhIHdlIHdhbnQgdG8gY2FwXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhcEZpbHRlckFyZWEgPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSlcbntcbiAgICBpZiAoZmlsdGVyQXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEud2lkdGggKz0gZmlsdGVyQXJlYS54O1xuICAgICAgICBmaWx0ZXJBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgKz0gZmlsdGVyQXJlYS55O1xuICAgICAgICBmaWx0ZXJBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggZmlsdGVyQXJlYS54ICsgZmlsdGVyQXJlYS53aWR0aCA+IHRoaXMudGV4dHVyZVNpemUud2lkdGggKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCA9IHRoaXMudGV4dHVyZVNpemUud2lkdGggLSBmaWx0ZXJBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnkgKyBmaWx0ZXJBcmVhLmhlaWdodCA+IHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLSBmaWx0ZXJBcmVhLnk7XG4gICAgfVxufTtcblxuLypcbiAqIFJlc2l6ZXMgYWxsIHRoZSByZW5kZXIgdGFyZ2V0cyBpbiB0aGUgcG9vbFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLnRleHR1cmVTaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLnJlc2l6ZSggd2lkdGgsIGhlaWdodCApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGZpbHRlciBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBmaWx0ZXIgc3RhY2suXG4gKlxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnF1YWQuZGVzdHJveSgpO1xuICAgIFxuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBudWxsO1xuICAgIHRoaXMub2Zmc2V0WSA9IDA7XG5cbiAgICAvLyBkZXN0cm95IHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHR1cmVQb29sLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlUG9vbCA9IG51bGw7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgQWxwaGFNYXNrRmlsdGVyID0gcmVxdWlyZSgnLi4vZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNYXNrTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICB0aGlzLmFscGhhTWFza1Bvb2wgPSBbXTtcbn1cblxuTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hc2tNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgaWYgKG1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBtYXNrIGZyb20gdGhlIG1hc2sgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucG9wU3ByaXRlTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTcHJpdGVNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdmFyIGFscGhhTWFza0ZpbHRlciA9IHRoaXMuYWxwaGFNYXNrUG9vbC5wb3AoKTtcblxuICAgIGlmICghYWxwaGFNYXNrRmlsdGVyKVxuICAgIHtcbiAgICAgICAgYWxwaGFNYXNrRmlsdGVyID0gW25ldyBBbHBoYU1hc2tGaWx0ZXIobWFza0RhdGEpXTtcbiAgICB9XG5cbiAgICBhbHBoYU1hc2tGaWx0ZXJbMF0ubWFza1Nwcml0ZSA9IG1hc2tEYXRhO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRhcmdldCwgYWxwaGFNYXNrRmlsdGVyKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKi9cbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTcHJpdGVNYXNrID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVycyA9IHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbC5wdXNoKGZpbHRlcnMpO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTdGVuY2lsTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaE1hc2sobWFza0RhdGEpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BNYXNrKG1hc2tEYXRhKTtcbn07XG5cbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1RleHR1cmVTaGFkZXInKSxcbiAgICBDb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhBdHRpYnMgPSAxMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG5cbi8vICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcbn1cblxuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaGFkZXJNYW5hZ2VyO1xudXRpbHMucGx1Z2luVGFyZ2V0Lm1peGluKFNoYWRlck1hbmFnZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlck1hbmFnZXI7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cblNoYWRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlIGNvcnJlY3RseSBhcyB0aGlzIHRlbmRzIHRvIHZhcnlcbiAgICB0aGlzLm1heEF0dGlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xuXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1heEF0dGliczsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRPRE8gLSBXaHkgYXJlIHRoZXNlIG5vdCBwbHVnaW5zPyBXZSBjYW4ndCBkZWNvdXBsZSBwcmltaXRpdmVzIHVubGVzcyB0aGV5IGFyZS4uLi5cbiAgICB0aGlzLmRlZmF1bHRTaGFkZXIgPSBuZXcgVGV4dHVyZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcyk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbmV3IENvbXBsZXhQcmltaXRpdmVTaGFkZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFRha2VzIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHBhcmFtZXRlcnMgYW5kIHVwbG9hZHMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXR0cmlicyB7YW55W119IGF0dHJpYnNcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0QXR0cmlicyA9IGZ1bmN0aW9uIChhdHRyaWJzKVxue1xuICAgIC8vIHJlc2V0IHRlbXAgc3RhdGVcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRlbXBBdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAodmFyIGEgaW4gYXR0cmlicylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbYV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSAhPT0gdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHNoYWRlci5cbiAqXG4gKiBAcGFyYW0gc2hhZGVyIHtQSVhJLlNoYWRlcn0gdGhlIHNoYWRlciB0byB1cGxvYWRcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0U2hhZGVyID0gZnVuY3Rpb24gKHNoYWRlcilcbntcbiAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRJZCA9PT0gc2hhZGVyLnVpZClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50SWQgPSBzaGFkZXIudWlkO1xuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5nbC51c2VQcm9ncmFtKHNoYWRlci5wcm9ncmFtKTtcbiAgICB0aGlzLnNldEF0dHJpYnMoc2hhZGVyLmF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0LlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBXZWJHTE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBudWxsO1xufVxuXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFza01hbmFnZXI7XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgbWFzayBzdGFjayB0aGF0IGlzIHVzZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICpcbiAqIEBwYXJhbSBzdGVuY2lsTWFza1N0YWNrIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9IFRoZSBtYXNrIHN0YWNrXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnNldE1hc2tTdGFjayA9IGZ1bmN0aW9uICggc3RlbmNpbE1hc2tTdGFjayApXG57XG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBpZiAoc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLiBAYWx2aW5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWwgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQuYXR0YWNoU3RlbmNpbEJ1ZmZlcigpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICBpZiAoc21zLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgZ2wuY2xlYXIoZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTtcbiAgICAgICAgc21zLnJldmVyc2UgPSB0cnVlO1xuICAgICAgICBzbXMuY291bnQgPSAwO1xuICAgIH1cblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucHVzaCh3ZWJHTERhdGEpO1xuXG4gICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5WRVJUKTtcblxuICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgIGlmIChzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgIH1cblxuICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSBsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLktFRVApO1xuXG4gICAgc21zLmNvdW50Kys7XG59O1xuXG4vKipcbiAqIFRPRE8gdGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSFcbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuYmluZEdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgLy9pZiAodGhpcy5fY3VycmVudEdyYXBoaWNzID09PSBncmFwaGljcylyZXR1cm47XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBiaW5kIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0zZnYoc2hhZGVyLnVuaWZvcm1zLmNvbG9yLl9sb2NhdGlvbiwgd2ViR0xEYXRhLmNvbG9yKTtcblxuICAgICAgICBnbC51bmlmb3JtMWYoc2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSk7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDQgKiAyLCAwKTtcblxuICAgICAgICAvLyBub3cgZG8gdGhlIHJlc3QuLlxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAqL1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvL3RoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5hY3RpdmF0ZVByaW1pdGl2ZVNoYWRlcigpO1xuLy8gICAgICAgIHNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wcmltaXRpdmVTaGFkZXI7XG4gICAgICAgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG5cbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuLy8gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuXG4gICAgICAvKiAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7Ki9cbiAgICB9XG59O1xuXG4vKipcbiAqIFRPRE8gQGFsdmluXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIHNtcyA9IHRoaXMuc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucG9wKCk7XG5cbiAgICBzbXMuY291bnQtLTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIC8vIHRoZSBzdGFjayBpcyBlbXB0eSFcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgICAgIHRoaXMuYmluZEdyYXBoaWNzKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcblxuICAgICAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRyYXcgYSBxdWFkIHRvIGluY3JlbWVudC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgICAgICAgICAvLyBkcmF3IHRoZSB0cmlhbmdsZSBzdHJpcCFcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCArPSAyO1xuXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKSwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgLy8gIGNvbnNvbGUubG9nKFwiPDw+PlwiKVxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIChsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cblxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIG1hc2sgc3RhY2suXG4gKlxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2sgPSBudWxsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfSBUaGUgbWFzayBkYXRhIHN0cnVjdHVyZSB0byB1c2VcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIFxuICAgIC8vVE9ETyBGSVhcbiAgICBpZiAobWFza0RhdGEuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MudXBkYXRlR3JhcGhpY3MobWFza0RhdGEsIHRoaXMucmVuZGVyZXIuZ2wpO1xuICAgIH1cblxuICAgIGlmICghbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFN0ZW5jaWwobWFza0RhdGEsIG1hc2tEYXRhLl93ZWJHTFt0aGlzLnJlbmRlcmVyLmdsLmlkXS5kYXRhWzBdKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIodGhpcy5yZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcblxuICAgIHRoaXMucG9wU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuIiwiLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLm9uKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xufVxuXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTE1hbmFnZXI7XG5cbi8qKlxuICogR2VuZXJpYyBtZXRob2QgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbldlYkdMTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblx0Ly8gZG8gc29tZSBjb2RlcyBpbml0IVxufTtcblxuLyoqXG4gKiBHZW5lcmljIGRlc3Ryb3kgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlbmRlcmVyLm9mZignY29udGV4dCcsIHRoaXMub25Db250ZXh0Q2hhbmdlLCB0aGlzKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCcuL1NoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBjb21wbGV4IHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQ29tcGxleFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyBjb2xvcjsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoY29sb3IgKiBhbHBoYSAqIHRpbnQsIGFscGhhKTsnLC8vXCIgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIGNvbG9yOiAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsMCwwXSB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB0aW50OiAgIHsgdHlwZTogJzNmJywgdmFsdWU6IFswLCAwLCAwXSB9LFxuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFDb2xvcjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQmFzZSBzaGFkZXIgY2xhc3MgZm9yIFBJWEkgbWFuYWdlZCBzaGFkZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbdW5pZm9ybXNdIHtvYmplY3R9IFVuaWZvcm1zIGZvciB0aGlzIHNoYWRlci5cbiAqIEBwYXJhbSBbYXR0cmlidXRlc10ge29iamVjdH0gQXR0cmlidXRlcyBmb3IgdGhpcyBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIFNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcylcbntcbiAgICBpZiAoIXZlcnRleFNyYyB8fCAhZnJhZ21lbnRTcmMpXG4gICAge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXhpLmpzIEVycm9yLiBTaGFkZXIgcmVxdWlyZXMgdmVydGV4U3JjIGFuZCBmcmFnbWVudFNyYycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5nbCA9IHNoYWRlck1hbmFnZXIucmVuZGVyZXIuZ2w7XG5cbiAgICAvL1RPRE8gbWF5YmUgd2Ugc2hvdWxkIHBhc3MgcmVuZGVyZXIgcmF0aGVyIHRoYW4gc2hhZGVyIG1hbmdlcj8/IGZvb2QgZm9yIHRob3VnaHQuLlxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IHNoYWRlck1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgcHJvZ3JhbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUHJvZ3JhbX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaWZvcm1zIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhdHRyaWJ1dGVzIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50ZXJcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlciBhcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmM7XG5cbiAgICB0aGlzLmluaXQoKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHNoYWRlciBhbmQgdXNlcyBpdFxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbXBpbGUoKTtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy51bmlmb3JtcykpO1xuICAgIHRoaXMuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKSk7XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSB1bmlmb3JtIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgdW5pZm9ybXMgdG8gY2FjaGVcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnVuaWZvcm1zW2tleXNbaV1dLl9sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWNoZXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgYXR0cmlidXRlIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgYXR0cmlidXRlcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlQXR0cmlidXRlTG9jYXRpb25zID0gZnVuY3Rpb24gKGtleXMpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleXNbaV1dID0gdGhpcy5nbC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGtleXNbaV0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgbmVlZGVkIGFueW1vcmUuLi5cblxuICAgIC8vIEJlZ2luIHdvcnN0IGhhY2sgZXZhIC8vXG5cbiAgICAvLyBXSFk/Pz8gT05MWSBvbiBteSBjaHJvbWUgcGl4ZWwgdGhlIGxpbmUgYWJvdmUgcmV0dXJucyAtMSB3aGVuIHVzaW5nIGZpbHRlcnM/XG4gICAgLy8gbWF5YmUgaXRzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnbCBjb250ZXh0LlxuICAgIC8vIEknbSBjb252aW5jZWQgdGhpcyBpcyBhIGJ1ZyBpbiB0aGUgY2hyb21lIGJyb3dzZXIgYXMgdGhlcmUgaXMgTk8gcmVhc29uIHdoeSB0aGlzIHNob3VsZCBiZSByZXR1cm5pbmcgLTEgZXNwZWNpYWxseSBhcyBpdCBvbmx5IG1hbmlmZXN0cyBvbiBteSBjaHJvbWUgcGl4ZWxcbiAgICAvLyBJZiB0aGVyZXMgYW55IHdlYkdMIHBlb3BsZSB0aGF0IGtub3cgd2h5IGNvdWxkIGhhcHBlbiBwbGVhc2UgaGVscCA6KVxuICAgIC8vIGlmICh0aGlzLmF0dHJpYnV0ZXMuYUNvbG9yID09PSAtMSl7XG4gICAgLy8gICAgIHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPSAyO1xuICAgIC8vIH1cblxuICAgIC8vIEVuZCB3b3JzdCBoYWNrIGV2YSAvL1xufTtcblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQgY3JlYXRlcyB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19XG4gKi9cblNoYWRlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHZhciBnbFZlcnRTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuVkVSVEVYX1NIQURFUiwgdGhpcy52ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuRlJBR01FTlRfU0hBREVSLCB0aGlzLmZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuICh0aGlzLnByb2dyYW0gPSBwcm9ncmFtKTtcbn07XG5cbi8qKlxuKiBBZGRzIGEgbmV3IHVuaWZvcm1cbipcbiogQHBhcmFtIHVuaWZvcm0ge29iamVjdH0gdGhlIG5ldyB1bmlmb3JtIHRvIGF0dGFjaFxuKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgbG9jYXRpb24gPSB1bmlmb3JtLl9sb2NhdGlvbixcbiAgICAgICAgdmFsdWUgPSB1bmlmb3JtLnZhbHVlLFxuICAgICAgICBnbCA9IHRoaXMuZ2wsXG4gICAgICAgIGksIGlsO1xuXG4gICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIHNpbmdsZSBpbnQgdmFsdWVcbiAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGZsb2F0IHZhbHVlXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBjYXNlICcxZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSgyKSBvciBKUyBBcnJyYXlcbiAgICAgICAgY2FzZSAnMmYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDMpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICczZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDQpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgMkQgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YyJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDNEIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2Myc6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSA0RCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjQnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMWl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMml2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnNGl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20yJzpcbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgIGNhc2UgJ01hdHJpeDJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB1bmlmb3JtLnRyYW5zcG9zZSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20zJzpcbiAgICAgICAgY2FzZSAnbWF0Myc6XG4gICAgICAgIGNhc2UgJ01hdHJpeDNmdic6XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICBjYXNlICdtYXQ0JzpcbiAgICAgICAgY2FzZSAnTWF0cml4NGZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIENvbG9yIFZhbHVlXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgaW50ZWdlcnMgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdjEnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAyRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yydic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgyICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAyXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDIgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYXJyYXkgb2YgM0QgUG9pbnQgb2JqZWN0c1xuICAgICAgICBjYXNlICd2M3YnOlxuICAgICAgICAgICAgaWYgKCF1bmlmb3JtLl9hcnJheSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMyAqIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlsID0gdmFsdWUubGVuZ3RoOyBpIDwgaWw7ICsraSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogM10gICAgICAgPSB2YWx1ZVtpXS54O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzICsgMV0gICA9IHZhbHVlW2ldLnk7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAyXSAgID0gdmFsdWVbaV0uejtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiA0RCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Y0dic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg0ICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0XSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDJdICAgPSB2YWx1ZVtpXS56O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgM10gICA9IHZhbHVlW2ldLnc7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gUElYSS5UZXh0dXJlXG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuXG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUgfHwgIXVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGlzIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xbJ1RFWFRVUkUnICsgdGhpcy50ZXh0dXJlQ291bnRdKTtcblxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXTtcblxuICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdGV4dHVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9uZS4uXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgICAgICAgICAgLy8gc2V0IHVuaWZvcm0gdG8gdGV4dHVyZSBpbmRleFxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0uX2xvY2F0aW9uLCB0aGlzLnRleHR1cmVDb3VudCk7XG5cbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBuZXh0IHRleHR1cmUgaWRcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgU2hhZGVyIFdhcm5pbmc6IFVua25vd24gdW5pZm9ybSB0eXBlOiAnICsgdW5pZm9ybS50eXBlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNoYWRlciB1bmlmb3JtIHZhbHVlcy5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm1zID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy51bmlmb3JtcylcbiAgICB7XG4gICAgICAgIHRoaXMuc3luY1VuaWZvcm0odGhpcy51bmlmb3Jtc1trZXldKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSW5pdGlhbGlzZXMgYSBTYW1wbGVyMkQgdW5pZm9ybSAod2hpY2ggbWF5IG9ubHkgYmUgYXZhaWxhYmxlIGxhdGVyIG9uIGFmdGVyIGluaXRVbmlmb3JtcyBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBsb2FkZWQpXG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXRTYW1wbGVyMkQgPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbiAgICBpZiAodW5pZm9ybS50ZXh0dXJlRGF0YSlcbiAgICB7XG5cbiAgICAgICAgLy9UT0RPIG1vdmUgdGhpcy4uLlxuICAgICAgICB2YXIgZGF0YSA9IHVuaWZvcm0udGV4dHVyZURhdGE7XG5cbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuXG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBsaWVkQWxwaGEpO1xuICAgICAgICAvLyBHTFRleHR1cmUgPSBtYWcgbGluZWFyLCBtaW4gbGluZWFyX21pcG1hcF9saW5lYXIsIHdyYXAgcmVwZWF0ICsgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIC8vIEdMVGV4dHVyZUxpbmVhciA9IG1hZy9taW4gbGluZWFyLCB3cmFwIGNsYW1wXG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3RSZXBlYXQgPSBtYWcvbWluIE5FQVJFU1QsIHdyYXAgcmVwZWF0XG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3QgPSBtYWcvbWluIG5lYXJlc3QsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gQXVkaW9UZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCA1MTIsIGhlaWdodCAyLCBib3JkZXIgMFxuICAgICAgICAvLyBLZXlUZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCAyNTYsIGhlaWdodCAyLCBib3JkZXIgMFxuXG4gICAgICAgIC8vICBtYWdGaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcbiAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxuXG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZGF0YS5sdW1pbmFuY2UgPyBnbC5MVU1JTkFOQ0UgOiBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLnNvdXJjZSk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGRhdGEubWFnRmlsdGVyID8gZGF0YS5tYWdGaWx0ZXIgOiBnbC5MSU5FQVIgKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSApO1xuXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGRhdGEud3JhcFQgPyBkYXRhLndyYXBUIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyTWFuYWdlci5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHNoYWRlci5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5nbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmdsID0gbnVsbDtcbiAgICB0aGlzLnVuaWZvcm1zID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSBudWxsO1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBudWxsO1xufTtcblxuU2hhZGVyLnByb3RvdHlwZS5fZ2xDb21waWxlID0gZnVuY3Rpb24gKHR5cGUsIHNyYylcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICB0aGlzLmdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgdGhpcy5nbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cbiAgICBpZiAoIXRoaXMuZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgdGhpcy5nbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCBjdXN0b21Vbmlmb3JtcywgY3VzdG9tQXR0cmlidXRlcylcbntcbiAgICB2YXIgdW5pZm9ybXMgPSB7XG5cbiAgICAgICAgdVNhbXBsZXI6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogMCB9LFxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxXSkgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVW5pZm9ybXMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciB1IGluIGN1c3RvbVVuaWZvcm1zKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bmlmb3Jtc1t1XSA9IGN1c3RvbVVuaWZvcm1zW3VdO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgYVZlcnRleFBvc2l0aW9uOiAgICAwLFxuICAgICAgICBhVGV4dHVyZUNvb3JkOiAgICAgIDAsXG4gICAgICAgIGFDb2xvcjogICAgICAgICAgICAgMFxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tQXR0cmlidXRlcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGEgaW4gY3VzdG9tQXR0cmlidXRlcylcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlc1thXSA9IGN1c3RvbUF0dHJpYnV0ZXNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYWdtZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IFRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgU2hhZGVyLmNhbGwodGhpcywgc2hhZGVyTWFuYWdlciwgdmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihnbClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7Ly8sIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKTtcblxufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi4vbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQmFzZSBmb3IgYSBjb21tb24gb2JqZWN0IHJlbmRlcmVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzeXN0ZW0gcmVuZGVyZXIgcGx1Z2luLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gT2JqZWN0UmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufVxuXG5cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYmplY3RSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0UmVuZGVyZXI7XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZW5kZXJlciBhbmQgc2V0cyB0aGUgc2hhZGVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIHNldCB0aGUgc2hhZGVyLi5cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHJlbmRlcmVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xufTtcblxuLyoqXG4gKiBmbHVzaGVzXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIGZsdXNoIVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gcmVuZGVyIHRoZSBvYmplY3Rcbn07XG4iLCIvKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSBxdWFkXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFRoZSBnbCBjb250ZXh0IGZvciB0aGlzIHF1YWQgdG8gdXNlLlxuICovXG5mdW5jdGlvbiBRdWFkKGdsKVxue1xuICAgIC8qXG4gICAgICogdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4vLyAgICB0aGlzLnRleHR1cmVzID0gbmV3IFRleHR1cmVVdnMoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAwLDAsXG4gICAgICAgIDIwMCwwLFxuICAgICAgICAyMDAsMjAwLFxuICAgICAgICAwLDIwMFxuICAgIF0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgcXVhZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMSwwLFxuICAgICAgICAxLDEsXG4gICAgICAgIDAsMVxuICAgIF0pO1xuXG4vLyAgICB2YXIgd2hpdGUgPSAoMHhGRkZGRkYgPj4gMTYpICsgKDB4RkZGRkZGICYgMHhmZjAwKSArICgoMHhGRkZGRkYgJiAweGZmKSA8PCAxNikgKyAoMSAqIDI1NSA8PCAyNCk7XG4gICAgLy9UT0RPIGNvbnZlcnQgdGhpcyB0byBhIDMyIHVuc2lnbmVkIGludCBhcnJheVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBjb21wb25lbnRzIG9mIHRoZSB0cmlhbmdsZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxXG4gICAgXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbXG4gICAgICAgIDAsIDEsIDIsIDAsIDMsIDJcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSB2ZXJ0ZXggYnVmZmVyXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSBpbmRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDggKyAxNikgKiA0LCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnVwbG9hZCgpO1xufVxuXG5RdWFkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFF1YWQ7XG5cbi8qKlxuICogTWFwcyB0d28gUmVjdGFuZ2xlIHRvIHRoZSBxdWFkXG4gKiBAcGFyYW0gcmVjdCB7UElYSS5SZWN0YW5nbGV9IHRoZSBmaXJzdCByZWN0YW5nbGVcbiAqIEBwYXJhbSByZWN0MiB7UElYSS5SZWN0YW5nbGV9IHRoZSBzZWNvbmQgcmVjdGFuZ2xlXG4gKi9cblF1YWQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKHJlY3QsIHJlY3QyKVxue1xuICAgIHZhciB4ID0gMDsgLy9yZWN0Mi54IC8gcmVjdC53aWR0aDtcbiAgICB2YXIgeSA9IDA7IC8vcmVjdDIueSAvIHJlY3QuaGVpZ2h0O1xuXG4gICAgdGhpcy51dnNbMF0gPSB4O1xuICAgIHRoaXMudXZzWzFdID0geTtcblxuICAgIHRoaXMudXZzWzJdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1szXSA9IHk7XG5cbiAgICB0aGlzLnV2c1s0XSA9IHggKyByZWN0Mi53aWR0aCAvIHJlY3Qud2lkdGg7XG4gICAgdGhpcy51dnNbNV0gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1s2XSA9IHg7XG4gICAgdGhpcy51dnNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICAvLy8gLS0tLS1cbiAgICB4ID0gcmVjdDIueDtcbiAgICB5ID0gcmVjdDIueTtcblxuICAgIHRoaXMudmVydGljZXNbMF0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbMV0gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1syXSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzNdID0geTtcblxuICAgIHRoaXMudmVydGljZXNbNF0gPSB4ICsgcmVjdDIud2lkdGg7XG4gICAgdGhpcy52ZXJ0aWNlc1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQ7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzZdID0geDtcbiAgICB0aGlzLnZlcnRpY2VzWzddID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXIgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuUXVhZC5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvLyBUT0RPIGNvdWxkIHByb2JhYmx5IGJlIHB1c2hlZCBpbnRvIG9uZSB1cGxvYWQhXG4gICAgZ2wuYmluZEJ1ZmZlciggZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlciApO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMudmVydGljZXMpO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDggKiA0LCB0aGlzLnV2cyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgKDggKyA4KSAqIDQsIHRoaXMuY29sb3JzKTtcbn07XG5cblF1YWQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xuXG5cbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgICAgIFxuICAgIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcbiAgICBHTEZyYW1lYnVmZmVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xGcmFtZWJ1ZmZlcixcbiAgICBcbiAgICBTdGVuY2lsTWFza1N0YWNrID0gcmVxdWlyZSgnLi9TdGVuY2lsTWFza1N0YWNrJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIGhvcml6b250YWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgdmVydGljYWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAqIEBwYXJhbSByb290IHtib29sZWFufSBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gKi9cbnZhciBSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uLCByb290KVxue1xuICAgIC8vVE9ETyBSZXNvbHV0aW9uIGNvdWxkIGdvIGhlcmUgKCBlZyBsb3cgcmVzIGJsdXJzIClcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvLyBuZXh0IHRpbWUgdG8gY3JlYXRlIGEgZnJhbWUgYnVmZmVyIGFuZCB0ZXh0dXJlXG5cbiAgICAvKipcbiAgICAgKiBBIGZyYW1lIGJ1ZmZlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xGcmFtZUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJDb2xvciA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBvYmplY3QgYXMgYSByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9iamVjdCdzIHRyYW5zZm9ybVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5mcmFtZSA9IG51bGw7XG4gICAgXG4gICAgdGhpcy5kZWZhdWx0RnJhbWUgPSBuZXcgUElYSS5SZWN0YW5nbGUoKTtcbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBudWxsO1xuICAgIHRoaXMuc291cmNlRnJhbWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHN0ZW5jaWwgYnVmZmVyIHN0b3JlcyBtYXNraW5nIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlckJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgc3RlbmNpbCBtYXNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFza1N0YWNrfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG5ldyBTdGVuY2lsTWFza1N0YWNrKCk7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZXMgZmlsdGVyIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6dGhpcyxcbiAgICAgICAgICAgIGZpbHRlcjpbXSxcbiAgICAgICAgICAgIGJvdW5kczp0aGlzLnNpemVcbiAgICAgICAgfVxuICAgIF07XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVFxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gR0xGcmFtZWJ1ZmZlci5jcmVhdGVSR0JBKGdsLCAxMDAsIDEwMCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBBIGZyYW1lIGJ1ZmZlciBuZWVkcyBhIHRhcmdldCB0byByZW5kZXIgdG8uLlxuICAgICAgICAgICAgY3JlYXRlIGEgdGV4dHVyZSBhbmQgYmluZCBpdCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgICovXG4gICAgICAgIFxuXG4gICAgICAgLy8gVE9ETyBjaGFuZ2UhXG4gICAgICAgIC8vIHRoaXMgaXMgdXNlZCBieSB0aGUgYmFzZSB0ZXh0dXJlXG4gICAgICAgIHRoaXMudGV4dHVyZSA9IHRoaXMuZnJhbWVCdWZmZXIudGV4dHVyZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbWFrZSBpdCBhIG51bGwgZnJhbWVidWZmZXIuLlxuICAgICAgICB0aGlzLmZyYW1lQnVmZmVyLmZyYW1lYnVmZmVyID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn07XG5cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZW5kZXJUYXJnZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRhcmdldDtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpbHRlciB0ZXh0dXJlLlxuICpcbiAqIEBwYXJhbSBbYmluZD1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCB3ZSBiaW5kIG91ciBmcmFtZWJ1ZmZlciBiZWZvcmUgY2xlYXJpbmc/XG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbihjbGVhckNvbG9yKVxue1xuICAgIHZhciBjYyA9IGNsZWFyQ29sb3IgfHwgdGhpcy5jbGVhckNvbG9yXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5jbGVhcihjY1swXSxjY1sxXSxjY1syXSxjY1szXSkvL3IsZyxiLGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmF0dGFjaFN0ZW5jaWxCdWZmZXIgPSBmdW5jdGlvbigpXG57XG4gICAgLy9UT0RPIGNoZWNrIGlmIHN0ZW5jaWwgaXMgZG9uZT9cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgaXMgdXNlZCBmb3IgbWFza2luZyBpbiBwaXhpXG4gICAgICogbGV0cyBjcmVhdGUgb25lIGFuZCB0aGVuIGFkZCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgKi9cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZW5hYmxlU3RlbmNpbCgpO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXdwb3J0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIC8vVE9PRCByZWZhY3RvciB1c2FnZSBvZiBmcmFtZS4uXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIuYmluZCgpO1xuXG4gICAgdGhpcy5kZXN0aW5hdGlvbkZyYW1lID0gZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgfHwgdGhpcy5kZWZhdWx0RnJhbWU7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IHRoaXMuc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggdGhpcy5kZXN0aW5hdGlvbkZyYW1lLCB0aGlzLnNvdXJjZUZyYW1lICk7XG5cbiAgICBpZih0aGlzLnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5hcHBlbmQodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIGlmKHRoaXMuZGVzdGluYXRpb25GcmFtZSAhPT0gdGhpcy5zb3VyY2VGcmFtZSlcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgICAgICBnbC5zY2lzc29yKHRoaXMuZGVzdGluYXRpb25GcmFtZS54LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmRpc2FibGUoZ2wuU0NJU1NPUl9URVNUKTtcbiAgICB9XG5cblxuICAgIC8vIFRPRE8gLSBkb2VzIG5vdCBuZWVkIHRvIGJlIHVwZGF0ZWQgYWxsIHRoZSB0aW1lPz9cbiAgICBnbC52aWV3cG9ydCh0aGlzLmRlc3RpbmF0aW9uRnJhbWUueCx0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uKTtcblxuXG59O1xuXG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmFzZWQgb24gYSBwcm9qZWN0aW9uIGZyYW1lICh3aGljaCBpcyBhIHJlY3RhbmdsZSlcbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2FsY3VsYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbkZyYW1lLCBzb3VyY2VGcmFtZSlcbntcbiAgICB2YXIgcG0gPSB0aGlzLnByb2plY3Rpb25NYXRyaXg7XG5cbiAgICBzb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IGRlc3RpbmF0aW9uRnJhbWU7XG5cbiAgICBwbS5pZGVudGl0eSgpO1xuXG4gICAgLy8gVE9ETzogbWFrZSBkZXN0IHNjYWxlIHNvdXJjZVxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAxIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gLTEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAtMSAvIGRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0KjI7XG5cbiAgICAgICAgcG0udHggPSAtMSAtIHNvdXJjZUZyYW1lLnggKiBwbS5hO1xuICAgICAgICBwbS50eSA9IDEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVzaXplcyB0aGUgdGV4dHVyZSB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge051bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGhlaWdodCB7TnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgdGV4dHVyZVxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHdpZHRoID0gd2lkdGggfCAwO1xuICAgIGhlaWdodCA9IGhlaWdodCB8IDA7XG5cbiAgICBpZiAodGhpcy5zaXplLndpZHRoID09PSB3aWR0aCAmJiB0aGlzLnNpemUuaGVpZ2h0ID09PSBoZWlnaHQpIFxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2l6ZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuc2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICB0aGlzLmRlZmF1bHRGcmFtZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuZGVmYXVsdEZyYW1lLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIucmVzaXplKHdpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBoZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuICAgIFxuICAgIHZhciBwcm9qZWN0aW9uRnJhbWUgPSB0aGlzLmZyYW1lIHx8IHRoaXMuc2l6ZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSByZW5kZXIgdGFyZ2V0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIHRoaXMuZnJhbWVCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBTdGVuY2lsTWFza1N0YWNrKClcbntcblx0LyoqXG4gICAgICogVGhlIGFjdHVhbCBzdGFja1xuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsU3RhY2sgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQGFsdmluXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb3VudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY291bnQgPSAwO1xufVxuXG5TdGVuY2lsTWFza1N0YWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0ZW5jaWxNYXNrU3RhY2s7XG5tb2R1bGUuZXhwb3J0cyA9IFN0ZW5jaWxNYXNrU3RhY2s7XG4iLCJDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogTWFwcyBnbCBibGVuZCBjb21iaW5hdGlvbnMgdG8gV2ViR0xcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpKGdsLCBvYmplY3QpXG57XG4gICAgb2JqZWN0ID0gb2JqZWN0IHx8IHt9O1xuXG4gICAgLy9UT0RPIC0gcHJlbXVsdGlwbHkgYWxwaGEgd291bGQgYmUgZGlmZmVyZW50LlxuICAgIC8vYWRkIGEgYm9vbGVhbiBmb3IgdGhhdCFcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQUREXSAgICAgICAgICAgPSBbZ2wuU1JDX0FMUEhBLCBnbC5EU1RfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9IFtnbC5EU1RfQ09MT1IsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5TQ1JFRU5dICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLk9ORV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRBUktFTl0gICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0JVUk5dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRJRkZFUkVOQ0VdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aTtcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcblx0b2JqZWN0PSBvYmplY3QgfHwge307XG5cbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5QT0lOVFNdICAgICAgICAgPSBnbC5QT0lOVFM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORVNdICAgICAgICAgID0gZ2wuTElORVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9MT09QXSAgICAgID0gZ2wuTElORV9MT09QO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLkxJTkVfU1RSSVBdICAgICA9IGdsLkxJTkVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVTXSAgICAgID0gZ2wuVFJJQU5HTEVTO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXSA9IGdsLlRSSUFOR0xFX1NUUklQO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX0ZBTl0gICA9IGdsLlRSSUFOR0xFX0ZBTjtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBTcHJpdGUgb2JqZWN0IGlzIHRoZSBiYXNlIGZvciBhbGwgdGV4dHVyZWQgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCB0byB0aGUgc2NyZWVuXG4gKlxuICogQSBzcHJpdGUgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhbiBpbWFnZSBsaWtlIHRoaXM6XG4gKlxuICogYGBganNcbiAqIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgZm9yIHRoaXMgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZSh0ZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFuY2hvciBzZXRzIHRoZSBvcmlnaW4gcG9pbnQgb2YgdGhlIHRleHR1cmUuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgMCwwIHRoaXMgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0XG4gICAgICogU2V0dGluZyB0aGUgYW5jaG9yIHRvIDAuNSwwLjUgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgY2VudGVyZWRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMSwxIHdvdWxkIG1lYW4gdGhlIHRleHR1cmUncyBvcmlnaW4gcG9pbnQgd2lsbCBiZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmFuY2hvciA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUgKHRoaXMgaXMgaW5pdGlhbGx5IHNldCBieSB0aGUgdGV4dHVyZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQSB2YWx1ZSBvZiAweEZGRkZGRiB3aWxsIHJlbW92ZSBhbnkgdGludCBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2hhZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgc3ByaXRlLiBTZXQgdG8gbnVsbCB0byByZW1vdmUgYSBjdXJyZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJ8UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgY2FjaGVkIHZhbHVlIG9mIHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvLyBjYWxsIHRleHR1cmUgc2V0dGVyXG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBUZXh0dXJlLkVNUFRZO1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZVxuICAgIHRoaXMudmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblNwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLngpICogdGhpcy50ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzaWduID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLngpIHx8IDE7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBzaWduICogdmFsdWUgLyB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgTWF0aC5hYnModGhpcy5zY2FsZS55KSAqIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHByaXZhdGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBzbyBpZiBfd2lkdGggaXMgMCB0aGVuIHdpZHRoIHdhcyBub3Qgc2V0Li5cbiAgICBpZiAodGhpcy5fd2lkdGgpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnggPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgKiB0aGlzLl93aWR0aCAvIHRoaXMudGV4dHVyZS5mcmFtZS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zY2FsZS55ID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLnkpICogdGhpcy5faGVpZ2h0IC8gdGhpcy50ZXh0dXJlLmZyYW1lLmhlaWdodDtcbiAgICB9XG59O1xuXG5TcHJpdGUucHJvdG90eXBlLmNhY2x1bGF0ZVZlcnRpY2VzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgIHd0ID0gdGhpcy50cmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIGEgPSB3dC5hLCBiID0gd3QuYiwgYyA9IHd0LmMsIGQgPSB3dC5kLCB0eCA9IHd0LnR4LCB0eSA9IHd0LnR5LFxuICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhLFxuICAgICAgICB3MCwgdzEsIGgwLCBoMSxcbiAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcbiAgICAgICAgXG4gICAgaWYgKHRyaW0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgYW5kIGlzIG5vdCBhIHRpbGluZ3Nwcml0ZSB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgdzEgPSB0cmltLnggLSB0aGlzLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICBoMSA9IHRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcbiAgICB9XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMF0gPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzFdID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMl0gPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzNdID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzRdID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs1XSA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzZdID0gYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs3XSA9IGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG5cbn1cblxuLyoqXG4qXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy50cmFuc2Zvcm0udXBkYXRlZCB8fCB0aGlzLnRleHR1cmVEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZURpcnR5ID0gZmFsc2U7XG4gICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuICAgIH1cbiAgICBcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFNwcml0ZSBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcbiAgICAgICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5YLFxuICAgICAgICAgICAgbWF4WCxcbiAgICAgICAgICAgIG1pblksXG4gICAgICAgICAgICBtYXhZLFxuICAgICAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YTtcblxuICAgICAgICB2YXIgeDEgPSB2ZXJ0ZXhEYXRhWzBdXG4gICAgICAgIHZhciB5MSA9IHZlcnRleERhdGFbMV1cblxuICAgICAgICB2YXIgeDIgPSB2ZXJ0ZXhEYXRhWzJdXG4gICAgICAgIHZhciB5MiA9IHZlcnRleERhdGFbM11cblxuICAgICAgICB2YXIgeDMgPSB2ZXJ0ZXhEYXRhWzRdXG4gICAgICAgIHZhciB5MyA9IHZlcnRleERhdGFbNV1cblxuICAgICAgICB2YXIgeDQgPSB2ZXJ0ZXhEYXRhWzZdXG4gICAgICAgIHZhciB5NCA9IHZlcnRleERhdGFbN11cblxuICAgICAgICBtaW5YID0geDE7XG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkxO1xuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MTtcbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTE7XG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoaWxkcmVuXG4gICAgICAgIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGRCb3VuZHMgPSB0aGlzLmNvbnRhaW5lckdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICB3MCA9IGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICB3MSA9IGNoaWxkQm91bmRzLnggKyBjaGlsZEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGgwID0gY2hpbGRCb3VuZHMueTtcbiAgICAgICAgICAgIGgxID0gY2hpbGRCb3VuZHMueSArIGNoaWxkQm91bmRzLmhlaWdodDtcblxuICAgICAgICAgICAgbWluWCA9IChtaW5YIDwgdzApID8gbWluWCA6IHcwO1xuICAgICAgICAgICAgbWluWSA9IChtaW5ZIDwgaDApID8gbWluWSA6IGgwO1xuXG4gICAgICAgICAgICBtYXhYID0gKG1heFggPiB3MSkgPyBtYXhYIDogdzE7XG4gICAgICAgICAgICBtYXhZID0gKG1heFkgPiBoMSkgPyBtYXhZIDogaDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fYm91bmRzLnggPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHRoaXMuX2JvdW5kcy55ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG4gICAgdGhpcy5fYm91bmRzLndpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICByZXR1cm4gdGhpcy5fYm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgc3ByaXRlXG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cblNwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLnRleHR1cmUuY3JvcC53aWR0aCA8PSAwIHx8IHRoaXMudGV4dHVyZS5jcm9wLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vICBJZ25vcmUgbnVsbCBzb3VyY2VzXG4gICAgaWYgKHRoaXMudGV4dHVyZS52YWxpZClcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgICAgIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgIGR4LFxuICAgICAgICAgICAgZHksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDtcblxuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgICAgIC8vIElmIHNtb290aGluZ0VuYWJsZWQgaXMgc3VwcG9ydGVkIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgc21vb3RoaW5nIHByb3BlcnR5IGZvciB0aGlzIHRleHR1cmVcbiAgICAgICAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSO1xuICAgICAgICBpZiAocmVuZGVyZXIuc21vb3RoUHJvcGVydHkgJiYgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gIT09IHNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldID0gc21vb3RoaW5nRW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHRyaW1tZWQgd2Ugb2Zmc2V0IGJ5IHRoZSB0cmltIHgveSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgZnJhbWUgZGltZW5zaW9uc1xuXG4gICAgICAgIGlmKHRleHR1cmUucm90YXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICBcbiAgICAgICAgICAgIGR4ICs9IHdpZHRoO1xuXG4gICAgICAgICAgICB3dC50eCA9IGR5ICogd3QuYSArIGR4ICogd3QuYyArIHd0LnR4O1xuICAgICAgICAgICAgd3QudHkgPSBkeSAqIHd0LmIgKyBkeCAqIHd0LmQgKyB3dC50eTtcblxuICAgICAgICAgICAgdmFyIHRlbXAgPSB3dC5hO1xuICAgICAgICAgICAgd3QuYSAgPSAtd3QuYztcbiAgICAgICAgICAgIHd0LmMgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIHRlbXAgPSB3dC5iO1xuICAgICAgICAgICAgd3QuYiAgPSAtd3QuZDtcbiAgICAgICAgICAgIHd0LmQgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIC8vIHRoZSBhbmNob3IgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFib3ZlLCBzbyBsZXRzIHNldCBpdCB0byB6ZXJvXG4gICAgICAgICAgICBkeCA9IDA7XG4gICAgICAgICAgICBkeSA9IDA7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIC8vIEFsbG93IGZvciBwaXhlbCByb3VuZGluZ1xuICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgKHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwLFxuICAgICAgICAgICAgICAgICh3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHggPSBkeCB8IDA7XG4gICAgICAgICAgICBkeSA9IGR5IHwgMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICB3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjbGVhbiB1cCBjYWNoaW5nIC0gaG93IHRvIGNsZWFuIHVwIHRoZSBjYWNoZXM/XG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC55ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgc3ByaXRlIGFuZCBvcHRpb25hbGx5IGl0cyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95VGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95VGV4dHVyZSwgZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5hbmNob3IgPSBudWxsO1xuXG4gICAgaWYgKGRlc3Ryb3lUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcblxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zLi5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICovXG5TcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgU3ByaXRlKFRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXInKSxcbiAgICBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9jcmVhdGVJbmRpY2VzRm9yUXVhZHMnKSxcbiAgICBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4vZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgZ2xDb3JlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgU3ByaXRlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1Nwcml0ZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFJlbmRlcmVyIGRlZGljYXRlZCB0byBkcmF3aW5nIGFuZCBiYXRjaGluZyBzcHJpdGVzLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU3ByaXRlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgdmFsdWVzIHNlbnQgaW4gdGhlIHZlcnRleCBidWZmZXIuXG4gICAgICogcG9zaXRpb25YLCBwb3NpdGlvblksIGNvbG9yUiwgY29sb3JHLCBjb2xvckIgPSA1XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdmVydGV4IGluZm9ybWF0aW9uIGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgU3ByaXRlQmF0Y2ggYmVmb3JlIGl0IGZsdXNoZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIG91ciBiYXRjaFxuICAgIHZhciBudW1WZXJ0cyA9ICh0aGlzLnNpemUgKiA0KSAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBiYXRjaCwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgIHZhciBudW1JbmRpY2VzID0gdGhpcy5zaXplICogNjtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSB2ZXJ0ZXggZGF0YSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5QnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgQXJyYXlCdWZmZXIobnVtVmVydHMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBGbG9hdDMyQXJyYXkgZm9yIHBvc2l0aW9uc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciB1dnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIGNvbG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlcyBvZiB0aGUgZ2VvbWV0cnkgKHF1YWRzKSB0byBkcmF3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHModGhpcy5zaXplKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIFxuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICBcbiAgICAvL1RPRE8gLSAzMDAgaXMgYSBiaXQgbWFnaWMsIGZpZ3VyZSBvdXQgYSBuaWNlciBhbW91bnQhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykgXG4gICAge1xuICAgICAgICB0aGlzLmdyb3Vwc1tpXSA9IHt0ZXh0dXJlczpbXSwgdGV4dHVyZUNvdW50OjAsIGlkczpbXSwgc2l6ZTowLCBzdGFydDowLCBibGVuZDowfTsgXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcblxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsOyAgICBcbn1cblxuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3Nwcml0ZScsIFNwcml0ZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5NQVhfVEVYVFVFUyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cbiAgICB0aGlzLl9zaGFkZXIgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgdGhpcy5NQVhfVEVYVFVFUykvL25ldyBUZXh0dXJlU2hhZGVyKGdsKTtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlcjtcblxuICAgIC8vIGNyZWF0ZSBhIGNvdXBsZSBvZiBidWZmZXJzXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKGdsLCBudWxsLCBnbC5EWU5BTUlDX0RSQVcpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoZ2wsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgLy8gYnVpbGQgdGhlIHZhbyBvYmplY3QgdGhhdCB3aWxsIHJlbmRlci4uXG4gICAgdGhpcy52YW8gPSBuZXcgZ2xDb3JlLlZlcnRleEFycmF5T2JqZWN0KGdsKTtcblxuICAgIHRoaXMudmFvLmFkZEluZGV4KHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCAwKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIGdsLlVOU0lHTkVEX1NIT1JULCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMiAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMyAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVJZCwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgNCAqIDQpO1xuXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdG8gcmVuZGVyIHdoZW4gdXNpbmcgdGhpcyBzcHJpdGViYXRjaFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHNwcml0ZSlcbntcbiAgICAvL1RPRE8gc2V0IGJsZW5kIG1vZGVzLi5cbiAgICAvLyBjaGVjayB0ZXh0dXJlLi5cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPj0gdGhpcy5zaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICBcbiAgICAvLyBnZXQgdGhlIHV2cyBmb3IgdGhlIHRleHR1cmVcbiAgIFxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIGlmICghc3ByaXRlLnRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgLy8gcHVzaCBhIHRleHR1cmUuXG4gICAgLy8gaW5jcmVtZW50IHRoZSBiYXRjaHNpemVcbiAgICB2YXIgbmV4dFRleHR1cmUgPSAgc3ByaXRlLnRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgdmFyIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwO1xuICAgIHZhciBpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50VGV4dHVyZSAhPT0gbmV4dFRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbmV4dFRleHR1cmU7XG4gICAgICAgIFxuICAgICAgICBpZighbmV4dFRleHR1cmUuX2VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9pZCA9IHRoaXMudGV4dHVyZUNvdW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLnRleHR1cmVDb3VudCA9PT0gdGhpcy5NQVhfVEVYVFVFUylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgICAgICAgICAgICAgeyAgICAgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnN0YXJ0ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50KytdID0gbmV4dFRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHR1cmVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdHJpbT8/XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG5cbiAgICAvLyB1cGxvYWQgdGhlIHNwcml0ZSBlbGVtZXRucy4uLlxuICAgIC8vIHRoZXkgaGF2ZSBhbGwgcmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIHdlIGp1c3QgbmVlZCB0byBwdXNoIHRoZW0gaW50byB0aGUgYnVmZmVyLlxuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7XG4gICAgdmFyIHZlcnRleERhdGEgPSBzcHJpdGUudmVydGV4RGF0YVxuICAgIHZhciB0aW50ID0gKHNwcml0ZS50aW50ID4+IDE2KSArIChzcHJpdGUudGludCAmIDB4ZmYwMCkgKyAoKHNwcml0ZS50aW50ICYgMHhmZikgPDwgMTYpICsgKHNwcml0ZS53b3JsZEFscGhhICogMjU1IDw8IDI0KTtcbiAgICB2YXIgdXZzID0gc3ByaXRlLnRleHR1cmUuX3V2cy51dnNfdWludDMyO1xuICAgIC8veHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzBdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMF07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7IFxuICAgIFxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsyXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzNdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzFdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs0XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzVdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzJdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzZdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbN107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbM107XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgYW5kIGVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA9PT0gMClyZXR1cm47XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG5cbiAgICB0aGlzLmN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSB0aGlzLmN1cnJlbnRHcm91cC5zdGFydDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICB7ICAgICBcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgXG4gICAgLy8gZG8gc29tZSBzbWFydCBhcnJheSBzdHVmZi4uXG4gICAgLy8gZG91YmxlIHNpemUgc28gd2UgZG9udCBhbHdheSBzdWJhcnJheSB0aGUgZWxlbWVudHMuLlxuICAgIC8vIHVwbG9hZCB0aGUgdmVydHMgdG8gdGhlIGJ1ZmZlclxuICAgIGlmICh0aGlzLmN1cnJlbnRCYXRjaFNpemUgPiAoIHRoaXMuc2l6ZSAqIDAuNSApIClcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh0aGlzLnZlcnRpY2VzLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbyBrIC4uIHN1YiBhcnJheSBpcyBTTE9XPj9cbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnBvc2l0aW9ucy5zdWJhcnJheSgwLCB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplKTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHZpZXcsIDAsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgc2hhZGVyLi5cbiAgICB0aGlzLnJlbmRlcmVyLmJpbmRTaGFkZXIodGhpcy5fc2hhZGVyKTtcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCAwICk7XG5cbiAgICAvLy8gcmVuZGVyIHRoZSBncm91cHMuLlxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdyb3VwQ291bnQ7IGkrKykge1xuICAgICAgICBcbiAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5ncm91cHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC50ZXh0dXJlQ291bnQ7IGorKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kVGV4dHVyZShncm91cC50ZXh0dXJlc1tqXSwgaik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgZ3JvdXAuc2l6ZSAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCBncm91cC5zdGFydCAqIDYgKiAyKTtcbiAgICB9O1xuXG4gICAgLy8gcmVzZXQgZWxlbWVudHMgZm9yIHRoZSBuZXh0IGZsdXNoXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBzcHJpdGUgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFvLmJpbmQoKTtcbn07XG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgdGhpcy52YW8udW5iaW5kKCk7XG59O1xuLyoqXG4gKiBEZXN0cm95cyB0aGUgU3ByaXRlQmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuY29sb3JzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zcHJpdGVzID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCBtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgdmVydGV4U3JjID0gXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGFUZXh0dXJlSWQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZUZXh0dXJlSWQgPSBhVGV4dHVyZUlkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVwiO1xuICAgIHZhciBmcmFnbWVudFNyYyA9ICdwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG4nICsgZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpICsgXCJcXG5cXG5cIiArIGZyYWdUZW1wbGF0ZVxuXG4gICAgZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYy5yZXBsYWNlKC9cXCVcXCUvZ2ksICcxNicpO1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cbiAgICB2YXIgc2FtcGxlVmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSB7XG4gICAgICAgIHNhbXBsZVZhbHVlc1tpXSA9IGk7XG4gICAgfTtcblxuICAgIHNoYWRlci5iaW5kKCk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnVTYW1wbGVycyA9IHNhbXBsZVZhbHVlcztcblxuICAgIHJldHVybiBzaGFkZXI7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKVxue1xuICAgIHZhciBzcmMgPSAndmVjNCBnZXRTYW1wbGVGcm9tQXJyYXkoc2FtcGxlcjJEIHRleHR1cmVzWyUlXSwgaW50IG5keCwgdmVjMiB1dikge1xcblxcbnZlYzQgY29sb3I7J1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgaWYoaSA+IDApc3JjICs9ICdcXG5lbHNlICc7XG4gICAgICAgIGlmKGkgPCBtYXhUZXh0dXJlcy0xKXNyYyArPSAnaWYobmR4ID09ICcgKyBpICsgJyknO1xuICAgICAgICBzcmMgKz0gJ1xcbnsnO1xuICAgICAgICBzcmMgKz0gJ1xcblxcdGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmVzWycraSsnXSwgdXYpOyc7XG4gICAgICAgIHNyYyArPSAnXFxufSc7XG4gICAgfTtcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdyZXR1cm4gY29sb3I7JztcbiAgICBzcmMgKz0gJ1xcbn0nO1xuXG4gICAgcmV0dXJuIHNyYztcbn1cblxudmFyIGZyYWdUZW1wbGF0ZSA9IFtcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG4gICAgJ3ZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsnLFxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcnNbJSVdOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICdnbF9GcmFnQ29sb3IgPSBnZXRTYW1wbGVGcm9tQXJyYXkodVNhbXBsZXJzLCBpbnQodlRleHR1cmVJZCksIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yOycsXG4gICAgJ30nXG5dLmpvaW4oJ1xcbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyO1xuIiwidmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBUZXh0IE9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nIGluIHlvdXIgdGV4dCBzdHJpbmcsXG4gKiBvciBhZGQgYSB3b3JkV3JhcCBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSBhbmQgYW5kIHdvcmRXcmFwV2lkdGggcHJvcGVydHkgd2l0aCBhIHZhbHVlIGluIHRoZSBzdHlsZSBvYmplY3QuXG4gKlxuICogQSBUZXh0IGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBzdHJpbmcgYW5kIGEgc3R5bGUgb2JqZWN0XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0ID0gbmV3IFBJWEkuVGV4dCgnVGhpcyBpcyBhIHBpeGkgdGV4dCcse2ZvbnQgOiAnMjRweCBBcmlhbCcsIGZpbGwgOiAweGZmMTAxMCwgYWxpZ24gOiAnY2VudGVyJ30pO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbc3R5bGUuZm9udF0ge3N0cmluZ30gZGVmYXVsdCAnYm9sZCAyMHB4IEFyaWFsJyBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlLmcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcCwgaXQgbmVlZHMgd29yZFdyYXAgdG8gYmUgc2V0IHRvIHRydWVcbiAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzRdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gKi9cbmZ1bmN0aW9uIFRleHQodGV4dCwgc3R5bGUsIHJlc29sdXRpb24pXG57XG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgMmQgY29udGV4dCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gd2l0aFxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY2FudmFzLlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyh0aGlzLmNhbnZhcyk7XG4gICAgdGV4dHVyZS50cmltID0gbmV3IG1hdGguUmVjdGFuZ2xlKCk7XG4gICAgU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbn1cblxuLy8gY29uc3RydWN0b3JcblRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTcHJpdGUucHJvdG90eXBlKTtcblRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gVGV4dDtcblxuVGV4dC5mb250UHJvcGVydGllc0NhY2hlID0ge307XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZm9udD0nYm9sZCAyMHB0IEFyaWFsJ10ge3N0cmluZ30gVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gICAgICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZWcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGVnICdibHVlJywgJyNGQ0ZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXBcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd8bnVtYmVyfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNl0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gICAgICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAgICAgKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAgICAgKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHN0eWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdHlsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5maWxsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpbGwgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmZpbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLnN0cm9rZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zdHJva2UgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLnN0cm9rZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZHJvcFNoYWRvd0NvbG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZHJvcFNoYWRvd0NvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGUuZm9udCA9IHN0eWxlLmZvbnQgfHwgJ2JvbGQgMjBwdCBBcmlhbCc7XG4gICAgICAgICAgICBzdHlsZS5maWxsID0gc3R5bGUuZmlsbCB8fCAnYmxhY2snO1xuICAgICAgICAgICAgc3R5bGUuYWxpZ24gPSBzdHlsZS5hbGlnbiB8fCAnbGVmdCc7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2UgPSBzdHlsZS5zdHJva2UgfHwgJ2JsYWNrJzsgLy9wcm92aWRlIGEgZGVmYXVsdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzLzEzNlxuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIHx8IDA7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcCA9IHN0eWxlLndvcmRXcmFwIHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXBXaWR0aCA9IHN0eWxlLndvcmRXcmFwV2lkdGggfHwgMTAwO1xuXG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93ID0gc3R5bGUuZHJvcFNoYWRvdyB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvciB8fCAnIzAwMDAwMCc7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93QW5nbGUgPSBzdHlsZS5kcm9wU2hhZG93QW5nbGUgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA6IE1hdGguUEkgLyA2O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlID0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgOiA1O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0JsdXIgOiAwOyAvL3NoYWRvd0JsdXIgaXMgJzAnIGJ5IGRlZmF1bHQgYWNjb3JkaW5nIHRvIEhUTUxcblxuICAgICAgICAgICAgc3R5bGUucGFkZGluZyA9IHN0eWxlLnBhZGRpbmcgfHwgMDtcblxuICAgICAgICAgICAgc3R5bGUudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lIHx8ICdhbHBoYWJldGljJztcblxuICAgICAgICAgICAgc3R5bGUubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbiB8fCAnbWl0ZXInO1xuICAgICAgICAgICAgc3R5bGUubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQgfHwgMTA7XG5cbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gc3R5bGU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNvcHkgZm9yIHRoZSB0ZXh0IG9iamVjdC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCl7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgc3R5bGUgPSB0aGlzLl9zdHlsZTtcbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG5cbiAgICAvLyB3b3JkIHdyYXBcbiAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbCB0ZXh0XG4gICAgdmFyIG91dHB1dFRleHQgPSBzdHlsZS53b3JkV3JhcCA/IHRoaXMud29yZFdyYXAodGhpcy5fdGV4dCkgOiB0aGlzLl90ZXh0O1xuXG4gICAgLy8gc3BsaXQgdGV4dCBpbnRvIGxpbmVzXG4gICAgdmFyIGxpbmVzID0gb3V0cHV0VGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCB3aWR0aFxuICAgIHZhciBsaW5lV2lkdGhzID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aCk7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGZvbnRQcm9wZXJ0aWVzID0gdGhpcy5kZXRlcm1pbmVGb250UHJvcGVydGllcyhzdHlsZS5mb250KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBsaW5lV2lkdGg7XG4gICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICB2YXIgd2lkdGggPSBtYXhMaW5lV2lkdGggKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICB3aWR0aCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSAoIHdpZHRoICsgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgaGVpZ2h0XG4gICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLnN0eWxlLmxpbmVIZWlnaHQgfHwgZm9udFByb3BlcnRpZXMuZm9udFNpemUgKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG5cbiAgICB2YXIgaGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aDtcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGhlaWdodCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gKCBoZWlnaHQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nICogMiApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5jb250ZXh0LnNjYWxlKCB0aGlzLnJlc29sdXRpb24sIHRoaXMucmVzb2x1dGlvbik7XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgfVxuXG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFN0eWxlPVwiI0ZGMDAwMFwiO1xuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuICAgIHRoaXMuY29udGV4dC5zdHJva2VTdHlsZSA9IHN0eWxlLnN0cm9rZTtcbiAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIHRoaXMuY29udGV4dC50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmU7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVKb2luID0gc3R5bGUubGluZUpvaW47XG4gICAgdGhpcy5jb250ZXh0Lm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0O1xuXG4gICAgdmFyIGxpbmVQb3NpdGlvblg7XG4gICAgdmFyIGxpbmVQb3NpdGlvblk7XG5cbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGlmIChzdHlsZS5kcm9wU2hhZG93Qmx1ciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhTaGFkb3dPZmZzZXQgPSBNYXRoLmNvcyhzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgICAgICB2YXIgeVNoYWRvd09mZnNldCA9IE1hdGguc2luKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCArIHhTaGFkb3dPZmZzZXQsIGxpbmVQb3NpdGlvblkgKyB5U2hhZG93T2Zmc2V0ICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL3NldCBjYW52YXMgdGV4dCBzdHlsZXNcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZmlsbDtcblxuICAgIC8vZHJhdyBsaW5lcyBsaW5lIGJ5IGxpbmVcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0cm9rZSAmJiBzdHlsZS5zdHJva2VUaGlja25lc3MpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJva2VUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUudHJpbS54ID0gMDtcbiAgICB0ZXh0dXJlLnRyaW0ueSA9IC10aGlzLl9zdHlsZS5wYWRkaW5nO1xuXG4gICAgdGV4dHVyZS50cmltLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGV4dHVyZS50cmltLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAtIHRoaXMuX3N0eWxlLnBhZGRpbmcqMjtcblxuICAgIHRoaXMuX3dpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5lbWl0KCd1cGRhdGUnLCAgdGV4dHVyZS5iYXNlVGV4dHVyZSk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqL1xuVGV4dC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICAvL3RoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5yZW5kZXJXZWJHTC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgLy8gICB0aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYXNjZW50LCBkZXNjZW50IGFuZCBmb250U2l6ZSBvZiBhIGdpdmVuIGZvbnRTdHlsZVxuICpcbiAqIEBwYXJhbSBmb250U3R5bGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGZvbnRTdHlsZSlcbntcbiAgICB2YXIgcHJvcGVydGllcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdO1xuXG4gICAgaWYgKCFwcm9wZXJ0aWVzKVxuICAgIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzO1xuICAgICAgICB2YXIgY29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnfE3DiXEnKS53aWR0aCk7XG4gICAgICAgIHZhciBiYXNlbGluZSA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCdNJykud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xuXG4gICAgICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiAxLjQgfCAwO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNmMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQoJ3xNw4lxJywgMCwgYmFzZWxpbmUpO1xuXG4gICAgICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgICB2YXIgcGl4ZWxzID0gaW1hZ2VkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmUgPSB3aWR0aCAqIDQ7XG5cbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgIHZhciBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZWxpbmU7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCArPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnQgPSBiYXNlbGluZSAtIGk7XG5cbiAgICAgICAgaWR4ID0gcGl4ZWxzIC0gbGluZTtcbiAgICAgICAgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGRlc2NlbnQuIHNjYW4gZnJvbSBib3R0b20gdG8gdG9wIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggLT0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IGkgLSBiYXNlbGluZTtcbiAgICAgICAgcHJvcGVydGllcy5mb250U2l6ZSA9IHByb3BlcnRpZXMuYXNjZW50ICsgcHJvcGVydGllcy5kZXNjZW50O1xuXG4gICAgICAgIFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBuZXdsaW5lcyB0byBhIHN0cmluZyB0byBoYXZlIGl0IG9wdGltYWxseSBmaXQgaW50byB0aGUgaG9yaXpvbnRhbFxuICogYm91bmRzIHNldCBieSB0aGUgVGV4dCBvYmplY3QncyB3b3JkV3JhcFdpZHRoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS53b3JkV3JhcCA9IGZ1bmN0aW9uICh0ZXh0KVxue1xuICAgIC8vIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyXG4gICAgLy8gdGhhbiBpdHMgaG9yaXpvbnRhbCBib3VuZHMuXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICAgIHZhciB3b3JkV3JhcFdpZHRoID0gdGhpcy5fc3R5bGUud29yZFdyYXBXaWR0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XG4gICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQod29yZHNbal0pLndpZHRoO1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aFdpdGhTcGFjZSA9IHdvcmRXaWR0aCArIHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xuICAgICAgICAgICAgaWYgKGogPT09IDAgfHwgd29yZFdpZHRoV2l0aFNwYWNlID4gc3BhY2VMZWZ0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcHJpbnRpbmcgdGhlIG5ld2xpbmUgaWYgaXQncyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZSB0aGF0IGlzXG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSB3b3JkIHdyYXAgd2lkdGguXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal07XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB3b3Jkc1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgbGluZXMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFRleHQgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgVGV4dFxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UZXh0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzLmNhbGwodGhpcywgbWF0cml4KTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT10cnVlXSB7Ym9vbGVhbn0gd2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICAvLyBtYWtlIHN1cmUgdG8gcmVzZXQgdGhlIHRoZSBjb250ZXh0IGFuZCBjYW52YXMuLiBkb250IHdhbnQgdGhpcyBoYW5naW5nIGFyb3VuZCBpbiBtZW1vcnkhXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG5cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGVzdHJveUJhc2VUZXh0dXJlKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIFJlbmRlclRhcmdldCA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBGaWx0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKSxcbiAgICB0ZW1wUmVjdCA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuXG4vKipcbiAqIEEgQmFzZVJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIEJhc2VSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIHRha2VzIGEgc25hcHNob3Qgb2YgYW55IERpc3BsYXkgT2JqZWN0IGdpdmVuIHRvIGl0cyByZW5kZXIgbWV0aG9kLiBUaGUgcG9zaXRpb25cbiAqIGFuZCByb3RhdGlvbiBvZiB0aGUgZ2l2ZW4gRGlzcGxheSBPYmplY3RzIGlzIGlnbm9yZWQuIEZvciBleGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcigxMDI0LCAxMDI0LCB7IHZpZXc6IGNhbnZhcywgcmF0aW86IDEgfSk7XG4gKiB2YXIgQmFzZXJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5CYXNlUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihzcHJpdGUpO1xuICogYGBgXG4gKlxuICogVGhlIFNwcml0ZSBpbiB0aGlzIGNhc2Ugd2lsbCBiZSByZW5kZXJlZCB0byBhIHBvc2l0aW9uIG9mIDAsMC4gVG8gcmVuZGVyIHRoaXMgc3ByaXRlIGF0IGl0cyBhY3R1YWxcbiAqIHBvc2l0aW9uIGEgQ29udGFpbmVyIHNob3VsZCBiZSB1c2VkOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZG9jID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKlxuICogZG9jLmFkZENoaWxkKHNwcml0ZSk7XG4gKlxuICogQmFzZXJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiBCYXNlcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZVxuICogQHBhcmFtIFt3aWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbaGVpZ2h0PTEwMF0ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIEJhc2VSZW5kZXJUZXh0dXJlLCB5b3UgbXVzdCBwYXNzIGEgcmVuZGVyZXIgaW50byB0aGUgY29uc3RydWN0b3IuJyk7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUuY2FsbCh0aGlzLCBudWxsLCBzY2FsZU1vZGUpO1xuICAgXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047O1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRHJhdy9yZW5kZXIgdGhlIGdpdmVuIERpc3BsYXlPYmplY3Qgb250byB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBkZXNjZW5kZW50cyBhcmUgdHJhbnNmb3JtZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIElmIGB1cGRhdGVUcmFuc2Zvcm1gIGlzIHRydWUgdGhlbiB0aGUgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQgYmVmb3JlIHRoZVxuICAgICAqIG1ldGhvZCByZXR1cm5zLiBPdGhlcndpc2UgaXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcgY29kZSB0byBjb3JyZWN0bHkgdXNlIG9yIHJlc2V0XG4gICAgICogdGhlIHRyYW5zZm9ybWVkIGRpc3BsYXkgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5IG9iamVjdCBpcyBhbHdheXMgcmVuZGVyZWQgd2l0aCBhIHdvcmxkQWxwaGEgdmFsdWUgb2YgMS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICAgICAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gICAgICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAgICAgKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB1c2VzLiBBIEJhc2VSZW5kZXJUZXh0dXJlIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgcmVuZGVyZXIgYXQgdGhlIG1vbWVudCBpZiBpdHMgd2ViR0wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnNjYWxlTW9kZSwgdGhpcy5yZXNvbHV0aW9uKTsvLywgdGhpcy50aGlzLnNjYWxlTW9kZSk7XG4gICAgICAgIHRoaXMuX2dsVGV4dHVyZXNbZ2wuaWRdID0gIHRoaXMudGV4dHVyZUJ1ZmZlci50ZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgLy9UT0RPIHJlZmFjdG9yIGZpbHRlciBtYW5hZ2VyLi4gYXMgcmVhbGx5IGl0cyBubyBsb25nZXIgYSBtYW5hZ2VyIGlmIHdlIHVzZSBpdCBoZXJlLi5cbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbmV3IEZpbHRlck1hbmFnZXIodGhpcy5yZW5kZXJlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlcldlYkdMO1xuXG4gICAgICAgIC8vIHRoZSBjcmVhdGlvbiBvZiBhIGZpbHRlciBtYW5hZ2VyIHVuYmluZHMgdGhlIGJ1ZmZlcnMuLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgICAgICBpZih0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQpdGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlckNhbnZhcztcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcih0aGlzLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuaGVpZ2h0KiB0aGlzLnJlc29sdXRpb24pO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcblxufVxuXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIHVwZGF0ZUJhc2Uge2Jvb2xlYW59IFNob3VsZCB0aGUgYmFzZVRleHR1cmUud2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYmUgcmVzaXplZCBhcyB3ZWxsP1xuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgaWYgKHdpZHRoID09PSB0aGlzLndpZHRoICYmIGhlaWdodCA9PT0gdGhpcy5oZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZCA9ICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7XG5cbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoZGVzdGluYXRpb25GcmFtZSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuYmluZEZyYW1lYnVmZmVyKHRoaXMucmVuZGVyZXIuZ2wuRlJBTUVCVUZGRVIsIHRoaXMudGV4dHVyZUJ1ZmZlci5mcmFtZUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKGZhbHNlLCBkZXN0aW5hdGlvbkZyYW1lKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAoZnJhbWUsIGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAodXBkYXRlVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpID8gdXBkYXRlVHJhbnNmb3JtIDogdHJ1ZTsvLyF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIudHJhbnNmb3JtID0gbWF0cml4O1xuXG4gICAgLy9UT0RPIG5vdCBhIGZhbiB0aGF0IHRoaXMgaXMgaGVyZS4uLiBpdCB3aWxsIG1vdmUhXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKCk7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICBpZiAodXBkYXRlVHJhbnNmb3JtKVxuICAgIHtcblxuICAgICAgICAvLyByZXNldCB0aGUgbWF0cml4IG9mIHRoZSBkaXNwbGF0eU9iamVjdC4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uaWRlbnRpdHkoKTtcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmN1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGVtcFJlY3Qud2lkdGggPSBmcmFtZS5oZWlnaHQ7XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gZnJhbWUud2lkdGg7XG4gICBcbiAgICAvL1RPRE8gcmVuYW1lIHRleHR1cmVCdWZmZXIgdG8gcmVuZGVyVGFyZ2V0Li5cbiAgICB2YXIgdGVtcCA9ICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0aGlzLmZpbHRlck1hbmFnZXI7XG4gICAgXG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIuYWN0aXZhdGUoZnJhbWUsIHRlbXBSZWN0KTtcbiAgICBjb25zb2xlLmxvZyhkaXNwbGF5T2JqZWN0KVxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnRleHR1cmVCdWZmZXIsIGNsZWFyKTtcblxuICAgLy8gY29uc29sZS5sb2coXCJSRU5ERVJJTkcgXCIpO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRlbXA7XG59O1xuXG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcl0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVwZGF0ZVRyYW5zZm9ybSA9ICEhdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdmFyIHd0ID0gdGVtcE1hdHJpeDtcblxuICAgIHd0LmlkZW50aXR5KCk7XG5cbiAgICBpZiAobWF0cml4KVxuICAgIHtcbiAgICAgICAgd3QuYXBwZW5kKG1hdHJpeCk7XG4gICAgfVxuXG5cbiAgICB3dC50eCArPSBmcmFtZS54O1xuICAgIHd0LnR5ICs9IGZyYW1lLnk7XG5cbiAgICB2YXIgY2FjaGVkV3QgPSBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtO1xuICAgIFxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSB3dDtcblxuICAgIC8vIHNldFdvcmxkIEFscGhhIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgcmVuZGVyZXIgYXQgZnVsbCBvcGFjaXR5XG4gICAgZGlzcGxheU9iamVjdC53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICB2YXIgaSwgajtcblxuICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBcbi8vICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5cbiAgICB2YXIgY29udGV4dCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlYWxSZXNvbHV0aW9uID0gdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIGNvbnRleHQpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gcmVhbFJlc29sdXRpb247XG5cbiAgICBpZihkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID09PSB3dClcbiAgICB7XG4gICAgICAgIC8vIGZpeGVzIGNhY2hlQXNCaXRtYXAgSGFwcGVuaW5nIGR1cmluZyB0aGUgYWJvdmUuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gY2FjaGVkV3Q7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBkZXN0cm95QmFzZSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIGZpbHRlcm1hbmFnZXIuLlxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoZnJhbWUpXG57XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uuc3JjID0gdGhpcy5nZXRCYXNlNjQoZnJhbWUpO1xuICAgIHJldHVybiBpbWFnZTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGlzIHRleHR1cmUuIEl0IHdvcmtzIGJ5IGNhbGxpbmcgQmFzZVJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgIHJldHVybiB0aGlzLmdldENhbnZhcyhmcmFtZSkudG9EYXRhVVJMKCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIEJhc2VSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldENhbnZhcyA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2lkdGggPSBmcmFtZS53aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBjYW52YXNEYXRhID0gdGVtcENhbnZhcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2FudmFzRGF0YS5kYXRhLnNldCh3ZWJHTFBpeGVscyk7XG5cbiAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICByZXR1cm4gdGVtcENhbnZhcy5jYW52YXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy53aWR0aDtcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoZnJhbWUud2lkdGggPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGggJiYgXG4gICAgICAgICAgIGZyYW1lLmhlaWdodCA9PT0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5oZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IENhbnZhc0J1ZmZlcihmcmFtZS53aWR0aCAqIHJlc29sdXRpb24sIGZyYW1lLmhlaWdodCAqIHJlc29sdXRpb24pO1xuICAgICAgICAgICAgdmFyIGNhbnZhc0RhdGEgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dC5nZXRJbWFnZURhdGEoZnJhbWUueCAgKiByZXNvbHV0aW9uLCBmcmFtZS55ICogcmVzb2x1dGlvbiwgZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIHRoZSBlbnRpcmUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICBpZighZnJhbWUpXG4gICAge1xuICAgICAgICBmcmFtZSA9IHRlbXBSZWN0O1xuICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICByZXR1cm4gd2ViR0xQaXhlbHM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIGEgcGl4ZWwgd2l0aGluIHRoZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uIChmcmFtZSwgeCwgeSlcbntcbiAgICB0ZW1wUmVjdC54ID0geDtcbiAgICB0ZW1wUmVjdC55ID0geTtcbiAgICB0ZW1wUmVjdC53aWR0aCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gMSAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmKGZyYW1lKVxuICAgIHtcbiAgICAgICAgdGVtcFJlY3QueCArPSBmcmFtZS54O1xuICAgICAgICB0ZW1wUmVjdC55ICs9IGZyYW1lLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UGl4ZWxzKHRlbXBSZWN0KTtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlLiBBbGwgdGV4dHVyZXMgaGF2ZSBhIGJhc2UgdGV4dHVyZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50IHBpeGVsIHJhdGlvc1xuICovXG5mdW5jdGlvbiBCYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDEwMDtcblxuICAgIC8vIFRPRE8gZG9jc1xuICAgIC8vIHVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2VcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxXaWR0aCA9IDEwMDtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgaGVpZ2h0IG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUgdG8gYXBwbHkgd2hlbiBzY2FsaW5nIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuTElORUFSXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIG9uY2UgdGhlIGJhc2UgdGV4dHVyZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbmV2ZXIgdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmFpbHMgdG8gbG9hZCBvciBoYXMgbm8gdGV4dHVyZSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgaWYgdGhlIHNvdXJjZSBpcyBjdXJyZW50bHkgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIElmIGFuIEltYWdlIHNvdXJjZSBpcyBsb2FkaW5nIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmVcbiAgICAgKiBkaXNwYXRjaGVkIHdoZW4gdGhlIG9wZXJhdGlvbiBlbmRzLiBBbiB1bmRlcnlsaW5nIHNvdXJjZSB0aGF0IGlzXG4gICAgICogaW1tZWRpYXRlbHktYXZhaWxhYmxlIGJ5cGFzc2VzIGxvYWRpbmcgZW50aXJlbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW1hZ2Ugc291cmNlIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUT0RPOiBNYWtlIHRoaXMgYSBzZXR0ZXIgdGhhdCBjYWxscyBsb2FkU291cmNlKCk7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtJbWFnZXxDYW52YXN9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsOyAvLyBzZXQgaW4gbG9hZFNvdXJjZSwgaWYgYXQgYWxsXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiBSR0IgY2hhbm5lbHMgc2hvdWxkIGJlIHByZS1tdWx0aXBsaWVkIGJ5IEFscGhhICAoV2ViR0wgb25seSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBvciBub3QgdGhlIHRleHR1cmUgaXMgYSBwb3dlciBvZiB0d28sIHRyeSB0byB1c2UgcG93ZXIgb2YgdHdvIHRleHR1cmVzIGFzIG11Y2ggYXMgeW91IGNhblxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IGZhbHNlO1xuXG4gICAgLy8gdXNlZCBmb3Igd2ViR0xcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiBhIG1pcG1hcCBvZiB0aGlzIHRleHR1cmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLiBUaGlzIHZhbHVlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIHRleHR1cmUgaXMgdXNlZFxuICAgICAqIEFsc28gdGhlIHRleHR1cmUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBzaXplIHRvIHdvcmtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5taXBtYXAgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHJlbmRlcmVyIElEcyB0byB3ZWJnbCB0ZXh0dXJlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgV2ViR0xUZXh0dXJlPn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9pZCA9IDA7XG4gICAgXG4gICAgLy8gaWYgbm8gc291cmNlIHBhc3NlZCBkb24ndCB0cnkgdG8gbG9hZFxuICAgIGlmIChzb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmluaXNoZXMgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkZWRcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmFpbHMgdG8gbG9hZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBCYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0ZXh0dXJlIG9uIGFsbCB0aGUgd2ViZ2wgcmVuZGVyZXJzLCB0aGlzIGFsc28gYXNzdW1lcyB0aGUgc3JjIGhhcyBjaGFuZ2VkLlxuICpcbiAqIEBmaXJlcyB1cGRhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5yZWFsV2lkdGggPSB0aGlzLnNvdXJjZS5uYXR1cmFsV2lkdGggfHwgdGhpcy5zb3VyY2Uud2lkdGg7XG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gdGhpcy5zb3VyY2UubmF0dXJhbEhlaWdodCB8fCB0aGlzLnNvdXJjZS5oZWlnaHQ7XG5cbiAgICB0aGlzLndpZHRoID0gdGhpcy5yZWFsV2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlYWxIZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IHV0aWxzLmlzUG93ZXJPZlR3byh0aGlzLnJlYWxXaWR0aCwgdGhpcy5yZWFsSGVpZ2h0KTtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIExvYWQgYSBzb3VyY2UuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBpcyBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlLCBzdWNoIGFzIGFuIGltYWdlIHRoYXQgbmVlZHMgdG8gYmVcbiAqIGRvd25sb2FkZWQsIHRoZW4gdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIGluIHRoZSBmdXR1cmVcbiAqIGFuZCBgaGFzTG9hZGVkYCB3aWxsIHJlbWFpbiBmYWxzZSBhZnRlciB0aGlzIGNhbGwuXG4gKlxuICogVGhlIGxvZ2ljIHN0YXRlIGFmdGVyIGNhbGxpbmcgYGxvYWRTb3VyY2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGVnLiBgZnJvbUltYWdlYCwgYG5ldyBCYXNlVGV4dHVyZWApIGlzOlxuICpcbiAqICAgICBpZiAodGV4dHVyZS5oYXNMb2FkZWQpXG4ge1xuICogICAgICAgIC8vIHRleHR1cmUgcmVhZHkgZm9yIHVzZVxuICogICAgIH0gZWxzZSBpZiAodGV4dHVyZS5pc0xvYWRpbmcpXG4ge1xuICogICAgICAgIC8vIGxpc3RlbiB0byAnbG9hZGVkJyBhbmQvb3IgJ2Vycm9yJyBldmVudHMgb24gdGV4dHVyZVxuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAgLy8gbm90IGxvYWRpbmcsIG5vdCBnb2luZyB0byBsb2FkIFVOTEVTUyB0aGUgc291cmNlIGlzIHJlbG9hZGVkXG4gKiAgICAgICAgLy8gKGl0IG1heSBzdGlsbCBtYWtlIHNlbnNlIHRvIGxpc3RlbiB0byB0aGUgZXZlbnRzKVxuICogICAgIH1cbiAqXG4gKiBAcHJvdGVjdGVkXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUubG9hZFNvdXJjZSA9IGZ1bmN0aW9uIChzb3VyY2UpXG57XG4gICAgdmFyIHdhc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZztcbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAod2FzTG9hZGluZyAmJiB0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc291cmNlLm9uZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgLy8gQXBwbHkgc291cmNlIGlmIGxvYWRlZC4gT3RoZXJ3aXNlIHNldHVwIGFwcHJvcHJpYXRlIGxvYWRpbmcgbW9uaXRvcnMuXG4gICAgaWYgKCh0aGlzLnNvdXJjZS5jb21wbGV0ZSB8fCB0aGlzLnNvdXJjZS5nZXRDb250ZXh0KSAmJiB0aGlzLnNvdXJjZS53aWR0aCAmJiB0aGlzLnNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNvdXJjZS5nZXRDb250ZXh0KVxuICAgIHtcblxuICAgICAgICAvLyBJbWFnZSBmYWlsIC8gbm90IHJlYWR5XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuXG4gICAgICAgIHNvdXJjZS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgc2NvcGUuZW1pdCgnbG9hZGVkJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvdXJjZS5vbmVycm9yID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5lbWl0KCdlcnJvcicsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQZXIgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjdGhlLWltZy1lbGVtZW50XG4gICAgICAgIC8vICAgXCJUaGUgdmFsdWUgb2YgYGNvbXBsZXRlYCBjYW4gdGh1cyBjaGFuZ2Ugd2hpbGUgYSBzY3JpcHQgaXMgZXhlY3V0aW5nLlwiXG4gICAgICAgIC8vIFNvIGNvbXBsZXRlIG5lZWRzIHRvIGJlIHJlLWNoZWNrZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gYWRkZWQuLlxuICAgICAgICAvLyBOT1RFOiBjb21wbGV0ZSB3aWxsIGJlIHRydWUgaWYgdGhlIGltYWdlIGhhcyBubyBzcmMgc28gYmVzdCB0byBjaGVjayBpZiB0aGUgc3JjIGlzIHNldC5cbiAgICAgICAgaWYgKHNvdXJjZS5jb21wbGV0ZSAmJiBzb3VyY2Uuc3JjKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyAuLmFuZCBpZiB3ZSdyZSBjb21wbGV0ZSBub3csIG5vIG5lZWQgZm9yIGNhbGxiYWNrc1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgc29tZSBvdGhlciB0cmFja2luZyB2YXJzIG9uY2VcbiAqIGEgc291cmNlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5fc291cmNlTG9hZGVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBiYXNlIHRleHR1cmVcbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5pbWFnZVVybClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuICAgICAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlLnNyYyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLnNvdXJjZS5fcGl4aUlkXTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG5cbiAgICB0aGlzLmRpc3Bvc2UoKTtcbn07XG5cbi8qKlxuICogRnJlZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTCBtZW1vcnkgd2l0aG91dCBkZXN0cm95aW5nIHRoaXMgdGV4dHVyZSBvYmplY3QuXG4gKiBUaGlzIG1lYW5zIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSB0ZXh0dXJlIGxhdGVyIHdoaWNoIHdpbGwgdXBsb2FkIGl0IHRvIEdQVVxuICogbWVtb3J5IGFnYWluLlxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIHRoaXMpO1xuXG4gICAgLy8gdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lZWRlZCwgdGhlIHJlbmRlcmVycyBzaG91bGQgY2xlYW51cCBhbGwgdGhlIGdsIHRleHR1cmVzLlxuICAgIC8vIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgc291cmNlIGltYWdlIG9mIHRoZSB0ZXh0dXJlLlxuICogVGhlIG9yaWdpbmFsIHNvdXJjZSBtdXN0IGJlIGFuIEltYWdlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5ld1NyYyB7c3RyaW5nfSB0aGUgcGF0aCBvZiB0aGUgaW1hZ2VcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNvdXJjZUltYWdlID0gZnVuY3Rpb24gKG5ld1NyYylcbntcbiAgICB0aGlzLnNvdXJjZS5zcmMgPSBuZXdTcmM7XG5cbiAgICB0aGlzLmxvYWRTb3VyY2UodGhpcy5zb3VyY2UpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIGJhc2UgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBTaG91bGQgdXNlIGFub255bW91cyBDT1JTPyBEZWZhdWx0cyB0byB0cnVlIGlmIHRoZSBVUkwgaXMgbm90IGEgZGF0YS1VUkkuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmIChjcm9zc29yaWdpbiA9PT0gdW5kZWZpbmVkICYmIGltYWdlVXJsLmluZGV4T2YoJ2RhdGE6JykgIT09IDApXG4gICAge1xuICAgICAgICBjcm9zc29yaWdpbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIC8vIG5ldyBJbWFnZSgpIGJyZWFrcyB0ZXggbG9hZGluZyBpbiBzb21lIHZlcnNpb25zIG9mIENocm9tZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMzgwNzFcbiAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgaWYgKGNyb3Nzb3JpZ2luKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoaW1hZ2UsIHNjYWxlTW9kZSk7XG4gICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgaW1hZ2Uuc3JjID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSBiYXNlVGV4dHVyZTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBAMnggYXQgdGhlIGVuZCBvZiB0aGUgdXJsIHdlIGFyZSBnb2luZyB0byBhc3N1bWUgaXRzIGEgaGlnaHJlcyBpbWFnZVxuICAgICAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKGltYWdlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFjYW52YXMuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGNhbnZhcy5fcGl4aUlkID0gJ2NhbnZhc18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG4iLCJ2YXIgQmFzZVJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VSZW5kZXJUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIFJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIFJlbmRlclRleHR1cmUgc2hvdWxkIGJlIHByZWxvYWRlZFxuICogb3RoZXJ3aXNlIGJsYWNrIHJlY3RhbmdsZXMgd2lsbCBiZSBkcmF3biBpbnN0ZWFkLlxuICpcbiAqIEEgUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCA4MDAsIDYwMCk7XG4gKiB2YXIgc3ByaXRlID0gUElYSS5TcHJpdGUuZnJvbUltYWdlKFwic3Bpbk9ial8wMS5wbmdcIik7XG4gKlxuICogc3ByaXRlLnBvc2l0aW9uLnggPSA4MDAvMjtcbiAqIHNwcml0ZS5wb3NpdGlvbi55ID0gNjAwLzI7XG4gKiBzcHJpdGUuYW5jaG9yLnggPSAwLjU7XG4gKiBzcHJpdGUuYW5jaG9yLnkgPSAwLjU7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiByZW5kZXJUZXh0dXJlXG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIGZvciB0aGlzIFJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIFJlbmRlclRleHR1cmUoYmFzZVJlbmRlclRleHR1cmUsIGZyYW1lKVxue1xuICAgIGlmICghcmVuZGVyZXIpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgb2JqZWN0IHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Jhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIFRleHR1cmUuY2FsbCh0aGlzLFxuICAgICAgICBiYXNlUmVuZGVyVGV4dHVyZSxcbiAgICAgICAgZnJhbWUgXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn1cblxuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmUucHJvdG90eXBlKTtcblJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGV4dHVyZTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIHVwZGF0ZUJhc2UpXG57XG4gICBcbiAgICAvL1RPRE8gLSBjb3VsZCBiZSBub3QgcmVxdWlyZWQuLlxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSB0aGlzLmNyb3Aud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNyb3AuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKHVwZGF0ZUJhc2UpXG4gICAge1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYmFzZVRleHR1cmUuY2xlYXIodGhpcy5mcmFtZSlcbiAgICBcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLnJlbmRlcih0aGlzLmZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRJbWFnZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuYmFzZVRleHR1cmUuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIFJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0QmFzZTY0ID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNlNjQuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIFJlbmRlclRleHR1cmUgdG8gaXQgYW5kIHRoZW4gcmV0dXJucyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gQSBDYW52YXMgZWxlbWVudCB3aXRoIHRoZSB0ZXh0dXJlIHJlbmRlcmVkIG9uLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldENhbnZhcyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVscyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVsKHRoaXMuZnJhbWUsIHgsIHkpO1xufTtcblxuUmVuZGVyVGV4dHVyZS5jcmVhdGUgPSBmdW5jdGlvbihyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHJldHVybiBuZXcgUmVuZGVyVGV4dHVyZShuZXcgQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbikpO1xufVxuXG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnMgPSByZXF1aXJlKCcuL1RleHR1cmVVdnMnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlIG9yIHBhcnQgb2YgYW4gaW1hZ2UuIEl0IGNhbm5vdCBiZSBhZGRlZFxuICogdG8gdGhlIGRpc3BsYXkgbGlzdCBkaXJlY3RseS4gSW5zdGVhZCB1c2UgaXQgYXMgdGhlIHRleHR1cmUgZm9yIGEgU3ByaXRlLiBJZiBubyBmcmFtZSBpcyBwcm92aWRlZCB0aGVuIHRoZSB3aG9sZSBpbWFnZSBpcyB1c2VkLlxuICpcbiAqIFlvdSBjYW4gZGlyZWN0bHkgY3JlYXRlIGEgdGV4dHVyZSBmcm9tIGFuIGltYWdlIGFuZCB0aGVuIHJldXNlIGl0IG11bHRpcGxlIHRpbWVzIGxpa2UgdGhpcyA6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZSgnYXNzZXRzL2ltYWdlLnBuZycpO1xuICogdmFyIHNwcml0ZTEgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiB2YXIgc3ByaXRlMiA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBiYXNlVGV4dHVyZSB7UElYSS5CYXNlVGV4dHVyZX0gVGhlIGJhc2UgdGV4dHVyZSBzb3VyY2UgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlIGZyb21cbiAqIEBwYXJhbSBbZnJhbWVdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3RhbmdsZSBmcmFtZSBvZiB0aGUgdGV4dHVyZSB0byBzaG93XG4gKiBAcGFyYW0gW2Nyb3BdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIGFyZWEgb2Ygb3JpZ2luYWwgdGV4dHVyZVxuICogQHBhcmFtIFt0cmltXSB7UElYSS5SZWN0YW5nbGV9IFRyaW1tZWQgdGV4dHVyZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBbcm90YXRlXSB7Ym9vbGVhbn0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlcyAoIHVzZWQgYnkgdGV4dHVyZSBwYWNrZXIgKVxuICovXG5mdW5jdGlvbiBUZXh0dXJlKGJhc2VUZXh0dXJlLCBmcmFtZSwgY3JvcCwgdHJpbSwgcm90YXRlKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogRG9lcyB0aGlzIFRleHR1cmUgaGF2ZSBhbnkgZnJhbWUgZGF0YSBhc3NpZ25lZCB0byBpdD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5ub0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VUZXh0dXJlIGluc3RhbmNlb2YgVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0cmltIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLnRyaW0gPSB0cmltO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCB0aGUgcmVuZGVyZXIga25vdyBpZiB0aGUgdGV4dHVyZSBpcyB2YWxpZC4gSWYgaXQncyBub3QgdGhlbiBpdCBjYW5ub3QgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgYSByZW5kZXJlciBrbm93IHRoYXQgYSB0ZXh0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgKHVzZWQgbWFpbmx5IGZvciB3ZWJHTCB1diB1cGRhdGVzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVpcmVzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgVVYgZGF0YSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgYXJlYSBvZiB0aGUgQmFzZVRleHR1cmUgaW1hZ2UgdG8gYWN0dWFsbHkgY29weSB0byB0aGUgQ2FudmFzIC8gV2ViR0wgd2hlbiByZW5kZXJpbmcsXG4gICAgICogaXJyZXNwZWN0aXZlIG9mIHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBvciBwbGFjZW1lbnQgKHdoaWNoIGNhbiBiZSBpbmZsdWVuY2VkIGJ5IHRyaW1tZWQgdGV4dHVyZSBhdGxhc2VzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jcm9wID0gY3JvcCB8fCBmcmFtZTsvL25ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdGF0ZSA9ICEhcm90YXRlO1xuXG4gICAgaWYgKGJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBmcmFtZSB3ZSBzaG91bGQgbW9uaXRvciBmb3IgYW55IGJhc2UgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlLm9uY2UoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZyYW1lIG9yIHRoZSBiYXNlVGV4dHVyZSBpcyB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICovXG4gICAgZnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgICAgICAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50cmltICYmICF0aGlzLnJvdGF0ZSAmJiAoZnJhbWUueCArIGZyYW1lLndpZHRoID4gdGhpcy5iYXNlVGV4dHVyZS53aWR0aCB8fCBmcmFtZS55ICsgZnJhbWUuaGVpZ2h0ID4gdGhpcy5iYXNlVGV4dHVyZS5oZWlnaHQpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dHVyZSBFcnJvcjogZnJhbWUgZG9lcyBub3QgZml0IGluc2lkZSB0aGUgYmFzZSBUZXh0dXJlIGRpbWVuc2lvbnMgJyArIHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5zb3VyY2UgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50cmltKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wID0gZnJhbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlcyB0aGlzIHRleHR1cmUgb24gdGhlIGdwdS5cbiAqXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5iYXNlVGV4dHVyZS51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyBsb2FkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlTG9hZGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIC8vIFRPRE8gdGhpcyBjb2RlIGxvb2tzIGNvbmZ1c2luZy4uIGJvbyB0byBhYnVzaW5nIGdldHRlcnMgYW5kIHNldHRlcnNzIVxuICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy5fZnJhbWU7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyB1cGRhdGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZVVwZGF0ZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSBiYXNlVGV4dHVyZS53aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSBiYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlPWZhbHNlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlKVxue1xuICAgIGlmICh0aGlzLmJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGRlc3Ryb3lCYXNlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG4gICAgdGhpcy50cmltID0gbnVsbDtcbiAgICB0aGlzLmNyb3AgPSBudWxsO1xuXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UsIHRoaXMpO1xuICAgIHRoaXMub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGV4dHVyZSBvYmplY3QgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLmZyYW1lLCB0aGlzLmNyb3AsIHRoaXMudHJpbSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5fdXBkYXRlVXZzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuX3V2cylcbiAgICB7XG4gICAgICAgIHRoaXMuX3V2cyA9IG5ldyBUZXh0dXJlVXZzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXZzLnNldCh0aGlzLmNyb3AsIHRoaXMuYmFzZVRleHR1cmUsIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFRleHR1cmUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSAgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gY3Jvc3NvcmlnaW4ge2Jvb2xlYW59IFdoZXRoZXIgcmVxdWVzdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY3Jvc3NvcmlnaW5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21JbWFnZShpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xuICAgICAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gdGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICh0eXBlb2YgdmlkZW8gPT09ICdzdHJpbmcnKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFRleHR1cmUuZnJvbVZpZGVvVXJsKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSB2aWRlbyB1cmwuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvVXJsIHtzdHJpbmd9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW9VcmwgPSBmdW5jdGlvbiAodmlkZW9VcmwsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHZpZGVvVXJsLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIHRleHR1cmUgdG8gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuIFRoaXMgY2FjaGUgaXMgc2hhcmVkIGFjcm9zcyB0aGUgd2hvbGUgUElYSSBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIFRleHR1cmUgdG8gYWRkIHRvIHRoZSBjYWNoZS5cbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIGJlIHN0b3JlZCBhZ2FpbnN0LlxuICovXG5UZXh0dXJlLmFkZFRleHR1cmVUb0NhY2hlID0gZnVuY3Rpb24gKHRleHR1cmUsIGlkKVxue1xuICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpZF0gPSB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB0ZXh0dXJlIGZyb20gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCBvZiB0aGUgdGV4dHVyZSB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRoYXQgd2FzIHJlbW92ZWRcbiAqL1xuVGV4dHVyZS5yZW1vdmVUZXh0dXJlRnJvbUNhY2hlID0gZnVuY3Rpb24gKGlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBBbiBlbXB0eSB0ZXh0dXJlLCB1c2VkIG9mdGVuIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBtdWx0aXBsZSBlbXB0eSB0ZXh0dXJlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZS5FTVBUWSA9IG5ldyBUZXh0dXJlKG5ldyBCYXNlVGV4dHVyZSgpKTtcbiIsIlxuLyoqXG4gKiBBIHN0YW5kYXJkIG9iamVjdCB0byBzdG9yZSB0aGUgVXZzIG9mIGEgdGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmVVdnMoKVxue1xuICAgIHRoaXMueDAgPSAwO1xuICAgIHRoaXMueTAgPSAwO1xuXG4gICAgdGhpcy54MSA9IDE7XG4gICAgdGhpcy55MSA9IDA7XG5cbiAgICB0aGlzLngyID0gMTtcbiAgICB0aGlzLnkyID0gMTtcblxuICAgIHRoaXMueDMgPSAwO1xuICAgIHRoaXMueTMgPSAxO1xuXG4gICAgdGhpcy54eTBfdWludDMyID0gMDtcbiAgICB0aGlzLnh5MV91aW50MzIgPSAwO1xuICAgIHRoaXMueHkyX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTNfdWludDMyID0gMDtcblxuICAgIHRoaXMudXZzX3VpbnQzMiA9IG5ldyBVaW50MzJBcnJheSg0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVVdnM7XG5cbi8qKlxuICogU2V0cyB0aGUgdGV4dHVyZSBVdnMgYmFzZWQgb24gdGhlIGdpdmVuIGZyYW1lIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gZnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIGJhc2VGcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gcm90YXRlIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgcm90YXRlZFxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZVV2cy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZyYW1lLCBiYXNlRnJhbWUsIHJvdGF0ZSlcbntcbiAgICB2YXIgdHcgPSBiYXNlRnJhbWUud2lkdGg7XG4gICAgdmFyIHRoID0gYmFzZUZyYW1lLmhlaWdodDtcblxuICAgIGlmKHJvdGF0ZSlcbiAgICB7XG4gICAgICAgIHRoaXMueDAgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSBmcmFtZS55IC8gdGg7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy54MCA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcbiAgICB9XG5cbiAgICB0aGlzLnV2c191aW50MzJbMF0gPSAoKCh0aGlzLnkwICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDAgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsxXSA9ICgoKHRoaXMueTEgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MSAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzJdID0gKCgodGhpcy55MiAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngyICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbM10gPSAoKCh0aGlzLnkzICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDMgKiA2NTUzNSkgJiAweEZGRkYpO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIG9mIGEgW3BsYXlpbmddIFZpZGVvLlxuICpcbiAqIFZpZGVvIGJhc2UgdGV4dHVyZXMgbWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QgaW4gdGhlaXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNldmVyYWwgd2F5cywgc3VjaCBhczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCgnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHsgc3JjOiAnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9KTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbJy92aWRlby53ZWJtJywgJy92aWRlby5tcDQnXSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoW1xuICogICAgIHsgc3JjOiAnL3ZpZGVvLndlYm0nLCBtaW1lOiAndmlkZW8vd2VibScgfSxcbiAqICAgICB7IHNyYzogJy92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9XG4gKiBdKTtcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgW1wiZGV1c1wiIGRlbW9dKGh0dHA6Ly93d3cuZ29vZGJveWRpZ2l0YWwuY29tL3BpeGlqcy9leGFtcGxlcy9kZXVzLykuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkJhc2VUZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gVmlkZW9CYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmlkZW8gc291cmNlIGVsZW1lbnQgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIC8vIGhvb2sgaW4gaGVyZSB0byBjaGVjayBpZiB2aWRlbyBpcyBhbHJlYWR5IGF2YWlsYWJsZS5cbiAgICAvLyBCYXNlVGV4dHVyZSBsb29rcyBmb3IgYSBzb3VyY2UuY29tcGxldGUgYm9vbGVhbiwgcGx1cyB3aWR0aCAmIGhlaWdodC5cblxuICAgIGlmICgoc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0VOT1VHSF9EQVRBIHx8IHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9GVVRVUkVfREFUQSkgJiYgc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICBzb3VyY2UuY29tcGxldGUgPSB0cnVlO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgc291cmNlLCBzY2FsZU1vZGUpO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBiYXNlIHRleHR1cmUgYXV0b21hdGljYWxseSB1cGRhdGUgaXRzZWxmLCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX29uVXBkYXRlID0gdGhpcy5fb25VcGRhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkNhblBsYXkgPSB0aGlzLl9vbkNhblBsYXkuYmluZCh0aGlzKTtcblxuICAgIGlmICghc291cmNlLmNvbXBsZXRlKVxuICAgIHtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIC8vIHN0YXJ0ZWQgcGxheWluZy4uXG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fb25QbGF5U3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX29uUGxheVN0b3AuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fX2xvYWRlZCA9IGZhbHNlO1xufVxuXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZVRleHR1cmUucHJvdG90eXBlKTtcblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmlkZW9CYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9CYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3Agb2YgdGhlIHZpZGVvIGJhc2UgdGV4dHVyZSwgb25seSBydW5zIHdoZW4gYXV0b1VwZGF0ZSBpcyBzZXQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUnVucyB0aGUgdXBkYXRlIGxvb3Agd2hlbiB0aGUgdmlkZW8gaXMgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBwYXVzZSBldmVudCBpcyB0cmlnZ2VyZWQsIHN0b3BzIHRoZSB1cGRhdGUgbG9vcFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgdmlkZW8gaXMgbG9hZGVkIGFuZCByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uQ2FuUGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2UudmlkZW9XaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnNvdXJjZS52aWRlb0hlaWdodDtcblxuICAgICAgICB0aGlzLnNvdXJjZS5wbGF5KCk7XG5cbiAgICAgICAgLy8gcHJldmVudCBtdWx0aXBsZSBsb2FkZWQgZGlzcGF0Y2hlcy4uXG4gICAgICAgIGlmICghdGhpcy5fX2xvYWRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHRoaXMuc291cmNlLl9waXhpSWQgXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlLl9waXhpSWQ7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogTWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXZpZGVvLl9waXhpSWQpXG4gICAge1xuICAgICAgICB2aWRlby5fcGl4aUlkID0gJ3ZpZGVvXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3ZpZGVvLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IFZpZGVvQmFzZVRleHR1cmUodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHZpZGVvLl9waXhpSWQgXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBCYXNlVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqIFRoaXMgQmFzZVRleHR1cmUgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYSB0ZXh0dXJlXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvU3JjIHtzdHJpbmd8b2JqZWN0fHN0cmluZ1tdfG9iamVjdFtdfSBUaGUgVVJMKHMpIGZvciB0aGUgdmlkZW8uXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLnNyY10ge3N0cmluZ30gT25lIG9mIHRoZSBzb3VyY2UgdXJscyBmb3IgdGhlIHZpZGVvXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLm1pbWVdIHtzdHJpbmd9IFRoZSBtaW1ldHlwZSBvZiB0aGUgdmlkZW8gKGUuZy4gJ3ZpZGVvL21wNCcpLiBJZiBub3Qgc3BlY2lmaWVkXG4gKiAgdGhlIHVybCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBtaW1lIHR5cGUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwgPSBmdW5jdGlvbiAodmlkZW9TcmMsIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXG4gICAgLy8gYXJyYXkgb2Ygb2JqZWN0cyBvciBzdHJpbmdzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW9TcmMpKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWRlb1NyYy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjW2ldLnNyYyB8fCB2aWRlb1NyY1tpXSwgdmlkZW9TcmNbaV0ubWltZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNpbmdsZSBvYmplY3Qgb3Igc3RyaW5nXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjLnNyYyB8fCB2aWRlb1NyYywgdmlkZW9TcmMubWltZSkpO1xuICAgIH1cblxuICAgIHZpZGVvLmxvYWQoKTtcbiAgICB2aWRlby5wbGF5KCk7XG5cbiAgICByZXR1cm4gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSk7XG59O1xuXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzID0gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsO1xuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2UocGF0aCwgdHlwZSlcbntcbiAgICBpZiAoIXR5cGUpXG4gICAge1xuICAgICAgICB0eXBlID0gJ3ZpZGVvLycgKyBwYXRoLnN1YnN0cihwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gcGF0aDtcbiAgICBzb3VyY2UudHlwZSA9IHR5cGU7XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgLy8gSW50ZXJuYWwgZXZlbnQgdXNlZCBieSBjb21wb3NlZCBlbWl0dGVyXG4gICAgVElDSyA9ICd0aWNrJztcblxuLyoqXG4gKiBBIFRpY2tlciBjbGFzcyB0aGF0IHJ1bnMgYW4gdXBkYXRlIGxvb3AgdGhhdCBvdGhlciBvYmplY3RzIGxpc3RlbiB0by5cbiAqIFRoaXMgY2xhc3MgaXMgY29tcG9zZWQgYXJvdW5kIGFuIEV2ZW50RW1pdHRlciBvYmplY3QgdG8gYWRkIGxpc3RlbmVyc1xuICogbWVhbnQgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lLlxuICogQW5pbWF0aW9uIGZyYW1lcyBhcmUgcmVxdWVzdGVkIG9ubHkgd2hlbiBuZWNlc3NhcnksXG4gKiBlLmcuIFdoZW4gdGhlIHRpY2tlciBpcyBzdGFydGVkIGFuZCB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbmZ1bmN0aW9uIFRpY2tlcigpXG57XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRpY2sgbWV0aG9kIGJvdW5kIHRvIHRpY2tlciBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaW4gZWFybHkgMjAxNSwgRnVuY3Rpb24uYmluZFxuICAgICAqIGlzIHN0aWxsIDYwJSBzbG93ZXIgaW4gaGlnaCBwZXJmb3JtYW5jZSBzY2VuYXJpb3MuXG4gICAgICogQWxzbyBzZXBhcmF0aW5nIGZyYW1lIHJlcXVlc3RzIGZyb20gdXBkYXRlIG1ldGhvZFxuICAgICAqIHNvIGxpc3RlbmVycyBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGFuZCB3aXRoXG4gICAgICogYW55IGFuaW1hdGlvbiBBUEksIGp1c3QgaW52b2tlIHRpY2tlci51cGRhdGUodGltZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RpY2sgPSBmdW5jdGlvbiBfdGljayh0aW1lKSB7XG5cbiAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgbm93XG4gICAgICAgICAgICBfdGhpcy51cGRhdGUodGltZSk7XG4gICAgICAgICAgICAvLyBMaXN0ZW5lciBzaWRlIGVmZmVjdHMgbWF5IGhhdmUgbW9kaWZpZWQgdGlja2VyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQgJiYgX3RoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiBfdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fdGljayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZW1pdHRlciB1c2VkIHRvIGZpcmUgJ3RpY2snIGV2ZW50XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9lbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY3VycmVudCBmcmFtZSByZXF1ZXN0IElEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdmFsdWUgbWFuYWdlZCBieSBtaW5GUFMgcHJvcGVydHkgc2V0dGVyIGFuZCBnZXR0ZXIuXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHVwZGF0ZXMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBzaG91bGQgaW52b2tlIHRoZSBtZXRob2RcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBhdXRvbWF0aWNhbGx5XG4gICAgICogd2hlbiBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1N0YXJ0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTY2FsYXIgdGltZSB2YWx1ZSBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbWluRlBTfVxuICAgICAqIGFuZCBpcyBzY2FsZWQgd2l0aCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfS5cbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhcCBtYXkgYmUgZXhjZWVkZWQgYnkgc2NhbGluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kZWx0YVRpbWUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGltZSBlbGFwc2VkIGluIG1pbGxpc2Vjb25kcyBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBPcHBvc2VkIHRvIHdoYXQgdGhlIHNjYWxhciB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX1cbiAgICAgKiBpcyBiYXNlZCwgdGhpcyB2YWx1ZSBpcyBuZWl0aGVyIGNhcHBlZCBub3Igc2NhbGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMSAvIFRBUkdFVF9GUE1TXG4gICAgICovXG4gICAgdGhpcy5lbGFwc2VkTVMgPSAxIC8gQ09OU1QuVEFSR0VUX0ZQTVM7IC8vIGRlZmF1bHQgdG8gdGFyZ2V0IGZyYW1lIHRpbWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBsYXN0IHRpbWUge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9IHdhcyBpbnZva2VkLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgYWxzbyByZXNldCBpbnRlcm5hbGx5IG91dHNpZGUgb2YgaW52b2tpbmdcbiAgICAgKiB1cGRhdGUsIGJ1dCBvbmx5IHdoZW4gYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxhc3RUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEZhY3RvciBvZiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNjYWxlcyB0aWNrZXIuZGVsdGFUaW1lIHRvIHdoYXQgd291bGQgYmVcbiAgICAgKiAvLyB0aGUgZXF1aXZhbGVudCBvZiBhcHByb3hpbWF0ZWx5IDEyMCBGUFNcbiAgICAgKiB0aWNrZXIuc3BlZWQgPSAyO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICogYHRydWVgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBgZmFsc2VgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RvcH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIFdoaWxlIGBmYWxzZWAsIHRoaXMgdmFsdWUgbWF5IGNoYW5nZSB0byBgdHJ1ZWAgaW4gdGhlXG4gICAgICogZXZlbnQgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGJlaW5nIGB0cnVlYFxuICAgICAqIGFuZCBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWNrZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lcyBwZXIgc2Vjb25kIGF0IHdoaWNoIHRoaXMgdGlja2VyIGlzIHJ1bm5pbmcuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgYXBwcm94aW1hdGVseSA2MCBpbiBtb3N0IG1vZGVybiBicm93c2Vycy5cbiAgICAgKiAqKk5vdGU6KiogVGhpcyBkb2VzIG5vdCBmYWN0b3IgaW4gdGhlIHZhbHVlIG9mXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0sIHdoaWNoIGlzIHNwZWNpZmljXG4gICAgICogdG8gc2NhbGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBGUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5lbGFwc2VkTVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGFsbG93ZWQgdG9cbiAgICAgKiBlbGFwc2UgYmV0d2VlbiBpbnZva2luZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0uXG4gICAgICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNhcCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gICAgICogYnV0IGRvZXMgbm90IGVmZmVjdCB0aGUgbWVhc3VyZWQgdmFsdWUgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNGUFN9LlxuICAgICAqIFdoZW4gc2V0dGluZyB0aGlzIHByb3BlcnR5IGl0IGlzIGNsYW1wZWQgdG8gYSB2YWx1ZSBiZXR3ZWVuXG4gICAgICogYDBgIGFuZCBgUElYSS5UQVJHRVRfRlBNUyAqIDEwMDBgLlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICBtaW5GUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZwcylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gQ2xhbXA6IDAgdG8gVEFSR0VUX0ZQTVNcbiAgICAgICAgICAgIHZhciBtaW5GUE1TID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZnBzKSAvIDEwMDAsIENPTlNULlRBUkdFVF9GUE1TKTtcbiAgICAgICAgICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEgLyBtaW5GUE1TO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbFxuICogZW1pdHRlciBoYXMgbGlzdGVuZXJzLCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fcmVxdWVzdElmTmVlZGVkID0gZnVuY3Rpb24gX3JlcXVlc3RJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiB0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIC8vIGVuc3VyZSBjYWxsYmFja3MgZ2V0IGNvcnJlY3QgZGVsdGFcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fdGljayk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IGNhbmNlbHMgYSBwZW5kaW5nIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9jYW5jZWxJZk5lZWRlZCA9IGZ1bmN0aW9uIF9jYW5jZWxJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIHRoZSB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZCBpdCBjaGVja3MgaWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHlcbiAqIGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy4gSWYgdGhlc2VcbiAqIGNvbmRpdGlvbnMgYXJlIG1ldCwgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgdGlja2VyIGhhcyBub3RcbiAqIGJlZW4gc3RhcnRlZCwgYnV0IGF1dG9TdGFydCBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHRpY2tlciBzdGFydHMgbm93LFxuICogYW5kIGNvbnRpbnVlcyB3aXRoIHRoZSBwcmV2aW91cyBjb25kaXRpb25zIHRvIHJlcXVlc3QgYSBuZXcgZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fc3RhcnRJZlBvc3NpYmxlID0gZnVuY3Rpb24gX3N0YXJ0SWZQb3NzaWJsZSgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmF1dG9TdGFydClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb259IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIHVwZGF0ZXNcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb25jZX0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3Igb25lIHVwZGF0ZVxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIGFkZE9uY2UoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbmNlKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb2ZmfSBpbnRlcm5hbGx5IGZvciAndGljaycgZXZlbnQuXG4gKiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyBmb3IgJ3RpY2snIGV2ZW50LlxuICogSWYgaXQgZG9lcywgdGhlbiBpdCBjYW5jZWxzIHRoZSBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHBhcmFtIFtmbl0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZFxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0IHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vZmYoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgaWYgKCF0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyBsaXN0ZW5lcnNcbiAqIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIHN0YXJ0KClcbntcbiAgICBpZiAoIXRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgcmVxdWVzdGVkXG4gKiBhbiBhbmltYXRpb24gZnJhbWUgaXQgaXMgY2FuY2VsZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcCgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVHJpZ2dlcnMgYW4gdXBkYXRlLiBBbiB1cGRhdGUgZW50YWlscyBzZXR0aW5nIHRoZVxuICogY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2VsYXBzZWRNU30sXG4gKiB0aGUgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gKiBpbnZva2luZyBhbGwgbGlzdGVuZXJzIHdpdGggY3VycmVudCBkZWx0YVRpbWUsXG4gKiBhbmQgdGhlbiBmaW5hbGx5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNsYXN0VGltZX1cbiAqIHdpdGggdGhlIHZhbHVlIG9mIGN1cnJlbnRUaW1lIHRoYXQgd2FzIHByb3ZpZGVkLlxuICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBieSBhbmltYXRpb25cbiAqIGZyYW1lIGNhbGxiYWNrcyBpZiB0aGUgdGlja2VyIGluc3RhbmNlIGhhcyBiZWVuIHN0YXJ0ZWRcbiAqIGFuZCBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSBbY3VycmVudFRpbWU9cGVyZm9ybWFuY2Uubm93KCldIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn0gdGhlIGN1cnJlbnQgdGltZSBvZiBleGVjdXRpb25cbiAqL1xuVGlja2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoY3VycmVudFRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWRNUztcblxuICAgIC8vIEFsbG93IGNhbGxpbmcgdXBkYXRlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBjdXJyZW50VGltZS5cbiAgICBjdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIHx8IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIC8vIFNhdmUgdW5jYXBwZWQgZWxhcHNlZE1TIGZvciBtZWFzdXJlbWVudFxuICAgIGVsYXBzZWRNUyA9IHRoaXMuZWxhcHNlZE1TID0gY3VycmVudFRpbWUgLSB0aGlzLmxhc3RUaW1lO1xuXG4gICAgLy8gY2FwIHRoZSBtaWxsaXNlY29uZHMgZWxhcHNlZCB1c2VkIGZvciBkZWx0YVRpbWVcbiAgICBpZiAoZWxhcHNlZE1TID4gdGhpcy5fbWF4RWxhcHNlZE1TKVxuICAgIHtcbiAgICAgICAgZWxhcHNlZE1TID0gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgIH1cblxuICAgIHRoaXMuZGVsdGFUaW1lID0gZWxhcHNlZE1TICogQ09OU1QuVEFSR0VUX0ZQTVMgKiB0aGlzLnNwZWVkO1xuXG4gICAgLy8gSW52b2tlIGxpc3RlbmVycyBhZGRlZCB0byBpbnRlcm5hbCBlbWl0dGVyXG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KFRJQ0ssIHRoaXMuZGVsdGFUaW1lKTtcblxuICAgIHRoaXMubGFzdFRpbWUgPSBjdXJyZW50VGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGlja2VyO1xuIiwidmFyIFRpY2tlciA9IHJlcXVpcmUoJy4vVGlja2VyJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZCB0aWNrZXIgaW5zdGFuY2UgdXNlZCBieSB7QGxpbmsgUElYSS5leHRyYXMuTW92aWVDbGlwfS5cbiAqIGFuZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICogVGhlIHByb3BlcnR5IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBpcyBzZXQgdG8gYHRydWVgXG4gKiBmb3IgdGhpcyBpbnN0YW5jZS4gUGxlYXNlIGZvbGxvdyB0aGUgZXhhbXBsZXMgZm9yIHVzYWdlLCBpbmNsdWRpbmdcbiAqIGhvdyB0byBvcHQtb3V0IG9mIGF1dG8tc3RhcnRpbmcgdGhlIHNoYXJlZCB0aWNrZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciB0aWNrZXIgPSBQSVhJLnRpY2tlci5zaGFyZWQ7XG4gKiAvLyBTZXQgdGhpcyB0byBwcmV2ZW50IHN0YXJ0aW5nIHRoaXMgdGlja2VyIHdoZW4gbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqIC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyB0cnVlIG9ubHkgZm9yIHRoZSBQSVhJLnRpY2tlci5zaGFyZWQgaW5zdGFuY2UuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiAvLyBGWUksIGNhbGwgdGhpcyB0byBlbnN1cmUgdGhlIHRpY2tlciBpcyBzdG9wcGVkLiBJdCBzaG91bGQgYmUgc3RvcHBlZFxuICogLy8gaWYgeW91IGhhdmUgbm90IGF0dGVtcHRlZCB0byByZW5kZXIgYW55dGhpbmcgeWV0LlxuICogdGlja2VyLnN0b3AoKTtcbiAqIC8vIENhbGwgdGhpcyB3aGVuIHlvdSBhcmUgcmVhZHkgZm9yIGEgcnVubmluZyBzaGFyZWQgdGlja2VyLlxuICogdGlja2VyLnN0YXJ0KCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFlvdSBtYXkgdXNlIHRoZSBzaGFyZWQgdGlja2VyIHRvIHJlbmRlci4uLlxuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoODAwLCA2MDApO1xuICogdmFyIHN0YWdlID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiB2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIpO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZW5kZXJlci52aWV3KTtcbiAqIHRpY2tlci5hZGQoZnVuY3Rpb24gKHRpbWUpIHtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE9yIHlvdSBjYW4ganVzdCB1cGRhdGUgaXQgbWFudWFsbHkuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiB0aWNrZXIuc3RvcCgpO1xuICogZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XG4gKiAgICAgdGlja2VyLnVwZGF0ZSh0aW1lKTtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAqIH1cbiAqIGFuaW1hdGUocGVyZm9ybWFuY2Uubm93KCkpO1xuICpcbiAqIEB0eXBlIHtQSVhJLnRpY2tlci5UaWNrZXJ9XG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xudmFyIHNoYXJlZCA9IG5ldyBUaWNrZXIoKTtcbnNoYXJlZC5hdXRvU3RhcnQgPSB0cnVlO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS50aWNrZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc2hhcmVkOiBzaGFyZWQsXG4gICAgVGlja2VyOiBUaWNrZXJcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gZnVuY3Rpb24gKHNpemUpXG57XG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBhcnJheSwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgXG4gICAgdmFyIHRvdGFsSW5kaWNlcyA9IHNpemUgKiA2O1xuXG4gICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodG90YWxJbmRpY2VzKTtcblxuXHQvLyBmaWxsIHRoZSBpbmRpY2VzIHdpdGggdGhlIHF1YWRzIHRvIGRyYXdcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IHRvdGFsSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICBpbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICBpbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHM7IiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudXRpbHNcbiAqL1xudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgX3VpZDogMCxcbiAgICBfc2FpZEhlbGxvOiBmYWxzZSxcblxuICAgIEV2ZW50RW1pdHRlcjogICByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgcGx1Z2luVGFyZ2V0OiAgIHJlcXVpcmUoJy4vcGx1Z2luVGFyZ2V0JyksXG4gICAgYXN5bmM6ICAgICAgICAgIHJlcXVpcmUoJ2FzeW5jJyksXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZS5cbiAgICAgKi9cbiAgICB1aWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICByZXR1cm4gKyt1dGlscy5fdWlkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYW4gW1IsIEcsIEJdIGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHBhcmFtICB7bnVtYmVyW119IFtvdXQ9W11dXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgW1IsIEcsIEJdIG9mIHRoZSBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgycmdiOiBmdW5jdGlvbiAoaGV4LCBvdXQpXG4gICAge1xuICAgICAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICAgICAgb3V0WzBdID0gKGhleCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMV0gPSAoaGV4ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzJdID0gKGhleCAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnN0cmluZzogZnVuY3Rpb24gKGhleClcbiAgICB7XG4gICAgICAgIGhleCA9IGhleC50b1N0cmluZygxNik7XG4gICAgICAgIGhleCA9ICcwMDAwMDAnLnN1YnN0cigwLCA2IC0gaGV4Lmxlbmd0aCkgKyBoZXg7XG5cbiAgICAgICAgcmV0dXJuICcjJyArIGhleDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkgdG8gYSBoZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmdiIHtudW1iZXJbXX1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb2xvciBudW1iZXJcbiAgICAgKi9cbiAgICByZ2IyaGV4OiBmdW5jdGlvbiAocmdiKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgocmdiWzBdKjI1NSA8PCAxNikgKyAocmdiWzFdKjI1NSA8PCA4KSArIHJnYlsyXSoyNTUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZFxuICAgICAqL1xuICAgIGNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXM6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBuZ0hlYWQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFCQVFNQUFBREQ4cDJPQUFBQUExQk1WRVgvJztcbiAgICAgICAgdmFyIHBuZ0VuZCA9ICdBQUFBQ2tsRVFWUUkxMk5nQUFBQUFnQUI0aUc4TXdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG4gICAgICAgIHZhciBtYWdlbnRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSA2O1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcblxuICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1hZ2VudGEsIDAsIDApO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh5ZWxsb3csIDIsIDApO1xuXG4gICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwwLDEsMSkuZGF0YTtcblxuICAgICAgICByZXR1cm4gKGRhdGFbMF0gPT09IDI1NSAmJiBkYXRhWzFdID09PSAwICYmIGRhdGFbMl0gPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIG51bWJlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICogdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIFN0YXJsaW5nIEZyYW1ld29yayBhcyBpdHMgcHJldHR5IG5lYXQgOylcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICovXG4gICAgZ2V0TmV4dFBvd2VyT2ZUd286IGZ1bmN0aW9uIChudW1iZXIpXG4gICAge1xuICAgICAgICAvLyBzZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG93ZXJfb2ZfdHdvI0Zhc3RfYWxnb3JpdGhtX3RvX2NoZWNrX2lmX2FfcG9zaXRpdmVfbnVtYmVyX2lzX2FfcG93ZXJfb2ZfdHdvXG4gICAgICAgIGlmIChudW1iZXIgPiAwICYmIChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDE7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPCBudW1iZXIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzdWx0IDw8PSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBtYWtlIGEgcG93ZXIgb2YgdHdvIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9XG4gICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybiAod2lkdGggPiAwICYmICh3aWR0aCAmICh3aWR0aCAtIDEpKSA9PT0gMCAmJiBoZWlnaHQgPiAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIGFuIGFzc2V0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwcmVmaXhcbiAgICAgKiB1c2VkIGJ5IHNwcml0ZXNoZWV0cyBhbmQgaW1hZ2UgdXJsc1xuICAgICAqXG4gICAgICogQHBhcmFtIHVybCB7c3RyaW5nfSB0aGUgaW1hZ2UgcGF0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRSZXNvbHV0aW9uT2ZVcmw6IGZ1bmN0aW9uICh1cmwpXG4gICAge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IENPTlNULlJFVElOQV9QUkVGSVguZXhlYyh1cmwpO1xuXG4gICAgICAgIGlmIChyZXNvbHV0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlc29sdXRpb25bMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvZ3Mgb3V0IHRoZSB2ZXJzaW9uIGFuZCByZW5kZXJlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBydW5uaW5nIGluc3RhbmNlIG9mIFBJWEkuXG4gICAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoaXMgbWVzc2FnZSB5b3UgY2FuIHNldCBgUElYSS51dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtgXG4gICAgICogc28gdGhlIGxpYnJhcnkgdGhpbmtzIGl0IGFscmVhZHkgc2FpZCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgZG9pbmcgdGhhdCB3aWxsIGZvcmV2ZXJcbiAgICAgKiBtYWtlcyB5b3UgYSBqZXJrIGZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBzdHJpbmcgcmVuZGVyZXIgdHlwZSB0byBsb2cuXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIHNheUhlbGxvOiBmdW5jdGlvbiAodHlwZSlcbiAgICB7XG4gICAgICAgIGlmICh1dGlscy5fc2FpZEhlbGxvKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZScpID4gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW1xuICAgICAgICAgICAgICAgICdcXG4gJWMgJWMgJWMgUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSDinLAgJyArIHR5cGUgKyAnIOKcsCAgJWMgJyArICcgJWMgJyArICcgaHR0cDovL3d3dy5waXhpanMuY29tLyAgJWMgJWMg4pmlJWPimaUlY+KZpSBcXG5cXG4nLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjY2YTU7IGJhY2tncm91bmQ6ICMwMzAzMDc7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmZjM2RjOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7J1xuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3MpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1BpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0gJyArIHR5cGUgKyAnIC0gaHR0cDovL3d3dy5waXhpanMuY29tLycpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmb3IgY2hlY2tpbmcgZm9yIHdlYmdsIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNXZWJHTFN1cHBvcnRlZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHZhciBjb250ZXh0T3B0aW9ucyA9IHsgc3RlbmNpbDogdHJ1ZSB9O1xuICAgICAgICB0cnlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgY29udGV4dE9wdGlvbnMpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBjb250ZXh0T3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIShnbCAmJiBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnN0ZW5jaWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzaWduIG9mIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIG4ge251bWJlcn1cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIG4gaXMgMCwgLTEgaWYgbiBpcyBuZWdhdGl2ZSwgMSBpZiBuIGkgcG9zaXRpdmVcbiAgICAgKi9cbiAgICBzaWduOiBmdW5jdGlvbiAobilcbiAgICB7XG4gICAgICAgIHJldHVybiBuID8gKG4gPCAwID8gLTEgOiAxKSA6IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZUl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydElkeCBUaGUgaW5kZXggdG8gYmVnaW4gcmVtb3ZpbmcgZnJvbSAoaW5jbHVzaXZlKVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVJdGVtczogZnVuY3Rpb24gKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KVxuICAgIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN0YXJ0SWR4ID49IGxlbmd0aCB8fCByZW1vdmVDb3VudCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVtb3ZlQ291bnQgPSAoc3RhcnRJZHgrcmVtb3ZlQ291bnQgPiBsZW5ndGggPyBsZW5ndGgtc3RhcnRJZHggOiByZW1vdmVDb3VudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydElkeCwgbGVuID0gbGVuZ3RoLXJlbW92ZUNvdW50OyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyLmxlbmd0aCA9IGxlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge30sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge31cbn07XG4iLCIvKipcbiAqIE1peGlucyBmdW5jdGlvbmFsaXR5IHRvIG1ha2UgYW4gb2JqZWN0IGhhdmUgXCJwbHVnaW5zXCIuXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS51dGlsc1xuICogQHBhcmFtIG9iaiB7b2JqZWN0fSBUaGUgb2JqZWN0IHRvIG1peCBpbnRvLlxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgcGx1Z2luVGFyZ2V0Lm1peGluKE15T2JqZWN0KTtcbiAqL1xuZnVuY3Rpb24gcGx1Z2luVGFyZ2V0KG9iailcbntcbiAgICBvYmouX19wbHVnaW5zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcGx1Z2luIHRvIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHBsdWdpbk5hbWUge3N0cmluZ30gVGhlIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQuXG4gICAgICogQHBhcmFtIGN0b3Ige0Z1bmN0aW9ufSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBwbHVnaW4uXG4gICAgICovXG4gICAgb2JqLnJlZ2lzdGVyUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGN0b3IpXG4gICAge1xuICAgICAgICBvYmouX19wbHVnaW5zW3BsdWdpbk5hbWVdID0gY3RvcjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5pbml0UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLnBsdWdpbnMgfHwge307XG5cbiAgICAgICAgZm9yICh2YXIgbyBpbiBvYmouX19wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBuZXcgKG9iai5fX3BsdWdpbnNbb10pKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmRlc3Ryb3lQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGZvciAodmFyIG8gaW4gdGhpcy5wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG51bGw7XG4gICAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvKipcbiAgICAgKiBNaXhlcyBpbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGx1Z2luVGFyZ2V0IGludG8gYW5vdGhlciBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3Qge29iamVjdH0gVGhlIG9iaiB0byBtaXggaW50b1xuICAgICAqL1xuICAgIG1peGluOiBmdW5jdGlvbiBtaXhpbihvYmopXG4gICAge1xuICAgICAgICBwbHVnaW5UYXJnZXQob2JqKTtcbiAgICB9XG59O1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKSxcbiAgICBtZXNoID0gcmVxdWlyZSgnLi9tZXNoJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi9leHRyYXMnKSxcbiAgICBmaWx0ZXJzID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgU3ByaXRlQmF0Y2hcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkuUGFydGljbGVDb250YWluZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlQmF0Y2ggPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuJyk7XG59O1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIEFzc2V0TG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLmxvYWRlcnMuTG9hZGVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuQXNzZXRMb2FkZXIgPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy4nKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvcmUsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RhZ2VcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RhZ2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignWW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIFBJWEkgU3RhZ2UgYW55IG1vcmUsIHlvdSBjYW4gc2ltcGx5IHJlbmRlciBhbnkgY29udGFpbmVyLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgRGlzcGxheU9iamVjdENvbnRhaW5lclxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBEaXNwbGF5T2JqZWN0Q29udGFpbmVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Rpc3BsYXlPYmplY3RDb250YWluZXIgaGFzIGJlZW4gc2hvcnRlbmVkIHRvIENvbnRhaW5lciwgcGxlYXNlIHVzZSBDb250YWluZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdHJpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdHJpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgU3RyaXAgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBNZXNoIGFuZCBtb3ZlZCB0byBtZXNoLk1lc2gsIHBsZWFzZSB1c2UgbWVzaC5NZXNoIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guTWVzaDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFJvcGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLlJvcGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgUm9wZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgUm9wZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBtZXNoLlJvcGUsIHBsZWFzZSB1c2UgbWVzaC5Sb3BlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guUm9wZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIE1vdmllQ2xpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXBcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgTW92aWVDbGlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBNb3ZpZUNsaXAgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLk1vdmllQ2xpcCwgcGxlYXNlIHVzZSBleHRyYXMuTW92aWVDbGlwIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5Nb3ZpZUNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUaWxpbmdTcHJpdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRpbGluZ1Nwcml0ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGlsaW5nU3ByaXRlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5UaWxpbmdTcHJpdGUsIHBsZWFzZSB1c2UgZXh0cmFzLlRpbGluZ1Nwcml0ZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuVGlsaW5nU3ByaXRlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQml0bWFwVGV4dFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJpdG1hcFRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJpdG1hcFRleHQgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLkJpdG1hcFRleHQsIHBsZWFzZSB1c2UgZXh0cmFzLkJpdG1hcFRleHQgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLkJpdG1hcFRleHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBibGVuZE1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgYmxlbmRNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYmxlbmRNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBCTEVORF9NT0RFUywgcGxlYXNlIHVzZSBCTEVORF9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkJMRU5EX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2NhbGVNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIHNjYWxlTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHNjYWxlTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gU0NBTEVfTU9ERVMsIHBsZWFzZSB1c2UgU0NBTEVfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TQ0FMRV9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5CYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCYXNlVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuQmFzZVRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5UZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLlRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5UZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5UZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgbWF0aFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIG1hdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBtYXRoIG5hbWVzcGFjZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgYWNjZXNzIG1lbWJlcnMgYWxyZWFkeSBhY2Nlc3NpYmxlIG9uIFBJWEkuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBQSVhJLlNwcml0ZSNzZXRUZXh0dXJlXG4gKiBAc2VlIFBJWEkuU3ByaXRlI3RleHR1cmVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0dXJlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0dXJlIHByb3BlcnR5LCBlLmcgOiBzcHJpdGUudGV4dHVyZSA9IHRleHR1cmU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuZXh0cmFzLkJpdG1hcFRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteUJpdG1hcFRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15VGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFN0eWxlXG4gKiBAc2VlIFBJWEkuVGV4dCNzdHlsZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpXG57XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgIGNvbnNvbGUud2Fybignc2V0U3R5bGUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5LCBlLmcgOiBteVRleHQuc3R5bGUgPSBzdHlsZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAc2VlIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHR1cmUucHJvdG90eXBlLnNldEZyYW1lID0gZnVuY3Rpb24oZnJhbWUpXG57XG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIGNvbnNvbGUud2Fybignc2V0RnJhbWUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIGZyYW1lIHByb3BlcnR5LCBlLmcgOiBteVRleHR1cmUuZnJhbWUgPSBmcmFtZTsnKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpbHRlcnMsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkFic3RyYWN0RmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkFic3RyYWN0RmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEFic3RyYWN0RmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuQWJzdHJhY3RGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEFic3RyYWN0RmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQWJzdHJhY3RGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuRlhBQUZpbHRlclxuICAgICAqIEBzZWUgUElYSS5GWEFBRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEZYQUFGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5GWEFBRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBGWEFBRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuRlhBQUZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgU3ByaXRlTWFza0ZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIFNwcml0ZU1hc2tGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TcHJpdGVNYXNrRmlsdGVyO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS51dGlscy51dWlkXG4gKiBAc2VlIFBJWEkudXRpbHMudWlkXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gKi9cbmNvcmUudXRpbHMudXVpZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29uc29sZS53YXJuKCd1dGlscy51dWlkKCkgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB1dGlscy51aWQoKSBmcm9tIG5vdyBvbi4nKTtcbiAgICByZXR1cm4gY29yZS51dGlscy51aWQoKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIEJpdG1hcFRleHQgb2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0IHVzaW5nIGJpdG1hcCBmb250LiBUb1xuICogc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLCAnXFxyJyBvciAnXFxyXFxuJyBpbiB5b3VyIHN0cmluZy4gWW91IGNhbiBnZW5lcmF0ZSB0aGUgZm50IGZpbGVzIHVzaW5nOlxuICpcbiAqIEEgQml0bWFwVGV4dCBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGZvbnQgaXMgbG9hZGVkXG4gKlxuICogYGBganNcbiAqIC8vIGluIHRoaXMgY2FzZSB0aGUgZm9udCBpcyBpbiBhIGZpbGUgY2FsbGVkICdkZXN5cmVsLmZudCdcbiAqIHZhciBiaXRtYXBUZXh0ID0gbmV3IFBJWEkuZXh0cmFzLkJpdG1hcFRleHQoXCJ0ZXh0IHVzaW5nIGEgZmFuY3kgZm9udCFcIiwge2ZvbnQ6IFwiMzVweCBEZXN5cmVsXCIsIGFsaWduOiBcInJpZ2h0XCJ9KTtcbiAqIGBgYFxuICpcbiAqXG4gKiBodHRwOi8vd3d3LmFuZ2VsY29kZS5jb20vcHJvZHVjdHMvYm1mb250LyBmb3Igd2luZG93cyBvclxuICogaHR0cDovL3d3dy5ibWdseXBoLmNvbS8gZm9yIG1hYy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIHN0eWxlIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gc3R5bGUuZm9udCB7c3RyaW5nfG9iamVjdH0gVGhlIGZvbnQgZGVzY3JpcHRvciBmb3IgdGhlIG9iamVjdCwgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZyBvZiBmb3JtXG4gKiAgICAgIFwiMjRweCBGb250TmFtZVwiIG9yIFwiRm9udE5hbWVcIiBvciBhcyBhbiBvYmplY3Qgd2l0aCBleHBsaWNpdCBuYW1lL3NpemUgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5uYW1lXSB7c3RyaW5nfSBUaGUgYml0bWFwIGZvbnQgaWRcbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5zaXplXSB7bnVtYmVyfSBUaGUgc2l6ZSBvZiB0aGUgZm9udCBpbiBwaXhlbHMsIGUuZy4gMjRcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3RcbiAqICAgICAgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS50aW50PTB4RkZGRkZGXSB7bnVtYmVyfSBUaGUgdGludCBjb2xvclxuICovXG5mdW5jdGlvbiBCaXRtYXBUZXh0KHRleHQsIHN0eWxlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGxldHRlciBzcHJpdGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbHlwaHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mb250ID0ge1xuICAgICAgICB0aW50OiBzdHlsZS50aW50ICE9PSB1bmRlZmluZWQgPyBzdHlsZS50aW50IDogMHhGRkZGRkYsXG4gICAgICAgIGFsaWduOiBzdHlsZS5hbGlnbiB8fCAnbGVmdCcsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIHNpemU6IDBcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBmb250LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mb250ID0gc3R5bGUuZm9udDsgLy8gcnVuIGZvbnQgc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggd2lkdGggb2YgdGhpcyBiaXRtYXAgdGV4dCBpbiBwaXhlbHMuIElmIHRoZSB0ZXh0IHByb3ZpZGVkIGlzIGxvbmdlciB0aGFuIHRoZSB2YWx1ZSBwcm92aWRlZCwgbGluZSBicmVha3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoZSBsYXN0IHdoaXRlc3BhY2UuXG4gICAgICogRGlzYWJsZSBieSBzZXR0aW5nIHZhbHVlIHRvIDBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggbGluZSBoZWlnaHQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBUZXh0LCBpZTogd2hlbiB0cnlpbmcgdG8gdmVydGljYWxseSBhbGlnbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpcnR5IHN0YXRlIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkJpdG1hcFRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuQml0bWFwVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCaXRtYXBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCaXRtYXBUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRpbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC50aW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC50aW50ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCkgPyB2YWx1ZSA6IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdsZWZ0J1xuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGFsaWduOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQuYWxpZ247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LmFsaWduID0gdmFsdWUgfHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9udCBkZXNjcmlwdG9yIG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Rm9udH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBmb250OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWUuc2xpY2UoMSkuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gcGFyc2VJbnQodmFsdWVbMF0sIDEwKSA6IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicgPyB2YWx1ZS5zaXplIDogcGFyc2VJbnQodmFsdWUuc2l6ZSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGRhdGEgPSBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV07XG4gICAgdmFyIHBvcyA9IG5ldyBjb3JlLlBvaW50KCk7XG4gICAgdmFyIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgdmFyIGNoYXJzID0gW107XG4gICAgdmFyIGxhc3RMaW5lV2lkdGggPSAwO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBsaW5lV2lkdGhzID0gW107XG4gICAgdmFyIGxpbmUgPSAwO1xuICAgIHZhciBzY2FsZSA9IHRoaXMuX2ZvbnQuc2l6ZSAvIGRhdGEuc2l6ZTtcbiAgICB2YXIgbGFzdFNwYWNlID0gLTE7XG4gICAgdmFyIG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHQubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSB0aGlzLnRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgbGFzdFNwYWNlID0gLyhcXHMpLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpID8gaSA6IGxhc3RTcGFjZTtcblxuICAgICAgICBpZiAoLyg/OlxcclxcbnxcXHJ8XFxuKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RTcGFjZSAhPT0gLTEgJiYgdGhpcy5tYXhXaWR0aCA+IDAgJiYgcG9zLnggKiBzY2FsZSA+IHRoaXMubWF4V2lkdGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXMoY2hhcnMsIGxhc3RTcGFjZSwgaSAtIGxhc3RTcGFjZSk7XG4gICAgICAgICAgICBpID0gbGFzdFNwYWNlO1xuICAgICAgICAgICAgbGFzdFNwYWNlID0gLTE7XG5cbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFyRGF0YSA9IGRhdGEuY2hhcnNbY2hhckNvZGVdO1xuXG4gICAgICAgIGlmICghY2hhckRhdGEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZDaGFyQ29kZSAmJiBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJzLnB1c2goe3RleHR1cmU6Y2hhckRhdGEudGV4dHVyZSwgbGluZTogbGluZSwgY2hhckNvZGU6IGNoYXJDb2RlLCBwb3NpdGlvbjogbmV3IGNvcmUuUG9pbnQocG9zLnggKyBjaGFyRGF0YS54T2Zmc2V0LCBwb3MueSArIGNoYXJEYXRhLnlPZmZzZXQpfSk7XG4gICAgICAgIGxhc3RMaW5lV2lkdGggPSBwb3MueCArIChjaGFyRGF0YS50ZXh0dXJlLndpZHRoICsgY2hhckRhdGEueE9mZnNldCk7XG4gICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLnhBZHZhbmNlO1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgKGNoYXJEYXRhLnlPZmZzZXQgKyBjaGFyRGF0YS50ZXh0dXJlLmhlaWdodCkpO1xuICAgICAgICBwcmV2Q2hhckNvZGUgPSBjaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcblxuICAgIHZhciBsaW5lQWxpZ25PZmZzZXRzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IGxpbmU7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBhbGlnbk9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9mb250LmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZUFsaWduT2Zmc2V0cy5wdXNoKGFsaWduT2Zmc2V0KTtcbiAgICB9XG5cbiAgICB2YXIgbGVuQ2hhcnMgPSBjaGFycy5sZW5ndGg7XG4gICAgdmFyIHRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuQ2hhcnM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjID0gdGhpcy5fZ2x5cGhzW2ldOyAvLyBnZXQgdGhlIG5leHQgZ2x5cGggc3ByaXRlXG5cbiAgICAgICAgaWYgKGMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMudGV4dHVyZSA9IGNoYXJzW2ldLnRleHR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjID0gbmV3IGNvcmUuU3ByaXRlKGNoYXJzW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZ2x5cGhzLnB1c2goYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjLnBvc2l0aW9uLnggPSAoY2hhcnNbaV0ucG9zaXRpb24ueCArIGxpbmVBbGlnbk9mZnNldHNbY2hhcnNbaV0ubGluZV0pICogc2NhbGU7XG4gICAgICAgIGMucG9zaXRpb24ueSA9IGNoYXJzW2ldLnBvc2l0aW9uLnkgKiBzY2FsZTtcbiAgICAgICAgYy5zY2FsZS54ID0gYy5zY2FsZS55ID0gc2NhbGU7XG4gICAgICAgIGMudGludCA9IHRpbnQ7XG5cbiAgICAgICAgaWYgKCFjLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBjaGlsZHJlbi5cbiAgICBmb3IgKGkgPSBsZW5DaGFyczsgaSA8IHRoaXMuX2dseXBocy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5fZ2x5cGhzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHRXaWR0aCA9IG1heExpbmVXaWR0aCAqIHNjYWxlO1xuICAgIHRoaXMudGV4dEhlaWdodCA9IChwb3MueSArIGRhdGEubGluZUhlaWdodCkgKiBzY2FsZTtcbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSBtYXhMaW5lSGVpZ2h0ICogc2NhbGU7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvZiB0aGlzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0ZXh0IGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGdldExvY2FsQm91bmRzXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cblxuQml0bWFwVGV4dC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHJldHVybiBjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn07XG5cbkJpdG1hcFRleHQuZm9udHMgPSB7fTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgTW92aWVDbGlwIGlzIGEgc2ltcGxlIHdheSB0byBkaXNwbGF5IGFuIGFuaW1hdGlvbiBkZXBpY3RlZCBieSBhIGxpc3Qgb2YgdGV4dHVyZXMuXG4gKlxuICogYGBganNcbiAqIHZhciBhbGllbkltYWdlcyA9IFtcImltYWdlX3NlcXVlbmNlXzAxLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDIucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMy5wbmdcIixcImltYWdlX3NlcXVlbmNlXzA0LnBuZ1wiXTtcbiAqIHZhciB0ZXh0dXJlQXJyYXkgPSBbXTtcbiAqXG4gKiBmb3IgKHZhciBpPTA7IGkgPCA0OyBpKyspXG4gKiB7XG4gKiAgICAgIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZShhbGllbkltYWdlc1tpXSk7XG4gKiAgICAgIHRleHR1cmVBcnJheS5wdXNoKHRleHR1cmUpO1xuICogfTtcbiAqXG4gKiB2YXIgbWMgPSBuZXcgUElYSS5Nb3ZpZUNsaXAodGV4dHVyZUFycmF5KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmVzIHtQSVhJLlRleHR1cmVbXXxPYmplY3RbXX0gYW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuVGV4dHVyZX0gb3IgZnJhbWUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIGFuaW1hdGlvblxuICogQHBhcmFtIHRleHR1cmVzW10udGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUge0BsaW5rIFBJWEkuVGV4dHVyZX0gb2YgdGhlIGZyYW1lXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50aW1lIHtudW1iZXJ9IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWUgaW4gbXNcbiAqL1xuZnVuY3Rpb24gTW92aWVDbGlwKHRleHR1cmVzKVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZXNbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUgPyB0ZXh0dXJlc1swXSA6IHRleHR1cmVzWzBdLnRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVzID0gdGV4dHVyZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3BlZWQgdGhhdCB0aGUgTW92aWVDbGlwIHdpbGwgcGxheSBhdC4gSGlnaGVyIGlzIGZhc3RlciwgbG93ZXIgaXMgc2xvd2VyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIG1vdmllIGNsaXAgcmVwZWF0cyBhZnRlciBwbGF5aW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5sb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIE1vdmllQ2xpcCBmaW5pc2hlcyBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKi9cbiAgICB0aGlzLm9uQ29tcGxldGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRWxhcHNlZCB0aW1lIHNpbmNlIGFuaW1hdGlvbiBoYXMgYmVlbiBzdGFydGVkLCB1c2VkIGludGVybmFsbHkgdG8gZGlzcGxheSBjdXJyZW50IHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgTW92aWVDbGlwIGlzIGN1cnJlbnRseSBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTW92aWVDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcbk1vdmllQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNb3ZpZUNsaXA7XG5tb2R1bGUuZXhwb3J0cyA9IE1vdmllQ2xpcDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTW92aWVDbGlwLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIHRvdGFsRnJhbWVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBNb3ZpZUNsaXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbnVtYmVyIG9mIHRleHR1cmVzXG4gICAgICogYXNzaWduZWQgdG8gdGhlIE1vdmllQ2xpcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0b3RhbEZyYW1lczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgdGV4dHVyZXMgdXNlZCBmb3IgdGhpcyBNb3ZpZUNsaXBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVtdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICpcbiAgICAgKi9cbiAgICB0ZXh0dXJlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzLnB1c2godmFsdWVbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucy5wdXNoKHZhbHVlW2ldLnRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAqIFRoZSBNb3ZpZUNsaXBzIGN1cnJlbnQgZnJhbWUgaW5kZXhcbiAgICAqXG4gICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICogQHJlYWRvbmx5XG4gICAgKi9cbiAgICBjdXJyZW50RnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSkgJSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lIDwgMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUgKz0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGcmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBQbGF5cyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKHRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBnb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RvcCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRTdG9wID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG59O1xuXG4vKipcbiAqIEdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZSBhbmQgYmVnaW5zIHBsYXlpbmcgdGhlIE1vdmllQ2xpcFxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdGFydCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRQbGF5ID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLnBsYXkoKTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqIEBwcml2YXRlXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB2YXIgZWxhcHNlZCA9IHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZHVyYXRpb25zICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGxhZyA9IHRoaXMuX2N1cnJlbnRUaW1lICUgMSAqIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG5cbiAgICAgICAgbGFnICs9IGVsYXBzZWQgLyA2MCAqIDEwMDA7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA8IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lLS07XG4gICAgICAgICAgICBsYWcgKz0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWduID0gTWF0aC5zaWduKHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPj0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGFnIC09IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0gKiBzaWduO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gc2lnbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGxhZyAvIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGVsYXBzZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lIDwgMCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCgwKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VGltZSA+PSB0aGlzLl90ZXh0dXJlcy5sZW5ndGggJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AodGhpcy5fdGV4dHVyZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG5cbn07XG5cbi8qXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBkZXN0cm95cyBpdFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCApXG57XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGZyYW1lIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgZnJhbWVzIGlkcyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUZyYW1lcyA9IGZ1bmN0aW9uIChmcmFtZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tRnJhbWUoZnJhbWVzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBpbWFnZSB1cmxzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tSW1hZ2VzID0gZnVuY3Rpb24gKGltYWdlcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59OyIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIC8vIGEgc3ByaXRlIHVzZSBkZm9yIHJlbmRlcmluZyB0ZXh0dXJlcy4uXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICBDYW52YXNUaW50ZXIgPSByZXF1aXJlKCcuLi9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyk7XG5cbi8qKlxuICogQSB0aWxpbmcgc3ByaXRlIGlzIGEgZmFzdCB3YXkgb2YgcmVuZGVyaW5nIGEgdGlsaW5nIGltYWdlXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZSB7VGV4dHVyZX0gdGhlIHRleHR1cmUgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gVGlsaW5nU3ByaXRlKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsaW5nIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVNjYWxlID0gbmV3IGNvcmUuUG9pbnQoMSwxKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIG9mZnNldCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG5ldyBjb3JlLlBvaW50KDAsMCk7XG5cbiAgICAvLy8vLyBwcml2YXRlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2l0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBuZXcgY29yZS5UZXh0dXJlVXZzKCk7XG5cbiAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gbnVsbDtcblxuICAgIC8vVE9ETyBtb3ZlLi5cbiAgICB0aGlzLnNoYWRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKFxuXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVUcmFuc2Zvcm07JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnICAgY29vcmQgLT0gdVRyYW5zZm9ybS54eTsnLFxuICAgICAgICAnICAgY29vcmQgLz0gdVRyYW5zZm9ybS56dzsnLFxuICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGNvb3JkOycsXG5cbiAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjMiB1UGl4ZWxTaXplOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gbW9kKHZUZXh0dXJlQ29vcmQsIHVGcmFtZS56dyk7JyxcbiAgICAgICAgJyAgIGNvb3JkID0gY2xhbXAoY29vcmQsIHVQaXhlbFNpemUsIHVGcmFtZS56dyAtIHVQaXhlbFNpemUpOycsXG4gICAgICAgICcgICBjb29yZCArPSB1RnJhbWUueHk7JyxcblxuICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gIHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQpICogdkNvbG9yIDsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1RnJhbWU6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1VHJhbnNmb3JtOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVBpeGVsU2l6ZSA6IHsgdHlwZSA6ICcyZnYnLCB2YWx1ZTogWzEsIDFdfVxuICAgICAgICAgICAgfVxuICAgICAgKTtcbn1cblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWxpbmdTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbGluZ1Nwcml0ZTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWxpbmdTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGlsaW5nU3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIHR3ZWFrIG91ciB0ZXh0dXJlIHRlbXBvcmFyaWx5Li5cbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZSB8fCAhdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZW1wVXZzID0gdGV4dHVyZS5fdXZzLFxuICAgICAgICB0ZW1wV2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgdGVtcEhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCxcbiAgICAgICAgdHcgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoLFxuICAgICAgICB0aCA9IHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGhpcy5fdXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMF0gPSAxLjAvdHc7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVsxXSA9IDEuMC90aDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVswXSA9IHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzFdID0gdGVtcFV2cy55MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMl0gPSB0ZW1wVXZzLngxIC0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbM10gPSB0ZW1wVXZzLnkyIC0gdGVtcFV2cy55MDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMF0gPSAodGhpcy50aWxlUG9zaXRpb24ueCAlICh0ZW1wV2lkdGggKiB0aGlzLnRpbGVTY2FsZS54KSkgLyB0aGlzLl93aWR0aDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzFdID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgJSAodGVtcEhlaWdodCAqIHRoaXMudGlsZVNjYWxlLnkpKSAvIHRoaXMuX2hlaWdodDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzJdID0gKCB0dyAvIHRoaXMuX3dpZHRoICkgKiB0aGlzLnRpbGVTY2FsZS54O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbM10gPSAoIHRoIC8gdGhpcy5faGVpZ2h0ICkgKiB0aGlzLnRpbGVTY2FsZS55O1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRlbXBVdnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0ZW1wV2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGVtcEhlaWdodDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZiAoIXRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQsXG4gICAgICAgIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICBiYXNlVGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIG1vZFggPSAodGhpcy50aWxlUG9zaXRpb24ueCAvIHRoaXMudGlsZVNjYWxlLngpICUgdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIG1vZFkgPSAodGhpcy50aWxlUG9zaXRpb24ueSAvIHRoaXMudGlsZVNjYWxlLnkpICUgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuXG4gICAgLy8gY3JlYXRlIGEgbmljZSBzaGlueSBwYXR0ZXJuIVxuICAgIC8vIFRPRE8gdGhpcyBuZWVkcyB0byBiZSByZWZyZXNoZWQgaWYgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICBpZighdGhpcy5fY2FudmFzUGF0dGVybilcbiAgICB7XG4gICAgICAgIC8vIGN1dCBhbiBvYmplY3QgZnJvbSBhIHNwcml0ZXNoZWV0Li5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgY29yZS5DYW52YXNCdWZmZXIodGV4dHVyZS5fZnJhbWUud2lkdGgsIHRleHR1cmUuX2ZyYW1lLmhlaWdodCk7XG5cbiAgICAgICAgLy8gVGludCB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMudGludGVkVGV4dHVyZSwgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKGJhc2VUZXh0dXJlLnNvdXJjZSwgLXRleHR1cmUuX2ZyYW1lLngsIC10ZXh0dXJlLl9mcmFtZS55KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gdGVtcENhbnZhcy5jb250ZXh0LmNyZWF0ZVBhdHRlcm4oIHRlbXBDYW52YXMuY2FudmFzLCAncmVwZWF0JyApO1xuICAgIH1cblxuICAgIC8vIHNldCBjb250ZXh0IHN0YXRlLi5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvbik7XG5cbiAgICAvLyBUT0RPIC0gdGhpcyBzaG91bGQgYmUgcm9sbGVkIGludG8gdGhlIHNldFRyYW5zZm9ybSBhYm92ZS4uXG4gICAgY29udGV4dC5zY2FsZSh0aGlzLnRpbGVTY2FsZS54LHRoaXMudGlsZVNjYWxlLnkpO1xuXG4gICAgY29udGV4dC50cmFuc2xhdGUobW9kWCArICh0aGlzLmFuY2hvci54ICogLXRoaXMuX3dpZHRoICksXG4gICAgICAgICAgICAgICAgICAgICAgbW9kWSArICh0aGlzLmFuY2hvci55ICogLXRoaXMuX2hlaWdodCkpO1xuXG4gICAgLy8gY2hlY2sgYmxlbmQgbW9kZVxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vIGZpbGwgdGhlIHBhdHRlcm4hXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9jYW52YXNQYXR0ZXJuO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoLW1vZFgsXG4gICAgICAgICAgICAgICAgICAgICAtbW9kWSxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoIC8gdGhpcy50aWxlU2NhbGUueCxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCAvIHRoaXMudGlsZVNjYWxlLnkpO1xuXG5cbiAgICAvL1RPRE8gLSBwcmV0dHkgc3VyZSB0aGlzIGNhbiBiZSBkZWxldGVkLi4uXG4gICAgLy9jb250ZXh0LnRyYW5zbGF0ZSgtdGhpcy50aWxlUG9zaXRpb24ueCArICh0aGlzLmFuY2hvci54ICogdGhpcy5fd2lkdGgpLCAtdGhpcy50aWxlUG9zaXRpb24ueSArICh0aGlzLmFuY2hvci55ICogdGhpcy5faGVpZ2h0KSk7XG4gICAgLy9jb250ZXh0LnNjYWxlKDEgLyB0aGlzLnRpbGVTY2FsZS54LCAxIC8gdGhpcy50aWxlU2NhbGUueSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIHNwcml0ZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG5cbiAgICB2YXIgdzAgPSB3aWR0aCAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgIHZhciB3MSA9IHdpZHRoICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICB2YXIgaDAgPSBoZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICB2YXIgaDEgPSBoZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcblxuICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIG1pblgsXG4gICAgICAgIG1heFgsXG4gICAgICAgIG1pblksXG4gICAgICAgIG1heFk7XG5cbiAgICBtaW5YID0geDE7XG4gICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICBtaW5ZID0geTE7XG4gICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICBtYXhYID0geDE7XG4gICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICBtYXhZID0geTE7XG4gICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgYm91bmRzLnggPSBtaW5YO1xuICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcblxuICAgIHJldHVybiBib3VuZHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIGNoZWNrXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRpbGluZyBzcHJpdGVcbiAqXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWxlU2NhbGUgPSBudWxsO1xuICAgIHRoaXMuX3RpbGVTY2FsZU9mZnNldCA9IG51bGw7XG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHRpbGluZyBzcHJpdGUgdGhhdCB3aWxsIHVzZSBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZCx3aWR0aCxoZWlnaHQpXG57XG4gICAgdmFyIHRleHR1cmUgPSBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSAnICsgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUodGV4dHVyZSx3aWR0aCxoZWlnaHQpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCB3aWR0aCwgaGVpZ2h0LCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSksd2lkdGgsaGVpZ2h0KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gY29yZS5EaXNwbGF5T2JqZWN0LFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwID0gZmFsc2U7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSBudWxsO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsSGl0VGVzdCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxEZXN0cm95ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGlzIGRpc3BsYXkgb2JqZWN0IHRvIGJlIGNhY2hlZCBhcyBhIGJpdG1hcC5cbiAgICAgKiBUaGlzIGJhc2ljYWxseSB0YWtlcyBhIHNuYXAgc2hvdCBvZiB0aGUgZGlzcGxheSBvYmplY3QgYXMgaXQgaXMgYXQgdGhhdCBtb21lbnQuIEl0IGNhbiBwcm92aWRlIGEgcGVyZm9ybWFuY2UgYmVuZWZpdCBmb3IgY29tcGxleCBzdGF0aWMgZGlzcGxheU9iamVjdHMuXG4gICAgICogVG8gcmVtb3ZlIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnZmFsc2UnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgY2FjaGVBc0JpdG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZUFzQml0bWFwO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXAgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVBc0JpdG1hcCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IHRoaXMucmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSB0aGlzLnJlbmRlckNhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gdGhpcy51cGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHMgPSB0aGlzLmdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSA9IHRoaXMuZGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludCA9IHRoaXMuY29udGFpbnNQb2ludDtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX2NhY2hlQXNCaXRtYXBEZXN0cm95O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJvdW5kcyA9IHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fb3JpZ2luYWxEZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIFdlYkdMXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlciggdGhpcy5fY2FjaGVkU3ByaXRlICk7XG59O1xuXG4vKipcbiogUHJlcGFyZXMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZmlyc3Qgd2UgZmx1c2ggYW55dGhpbmcgbGVmdCBpbiB0aGUgcmVuZGVyZXIgKG90aGVyd2lzZSBpdCB3b3VsZCBnZXQgcmVuZGVyZWQgdG8gdGhlIGNhY2hlZCB0ZXh0dXJlKVxuICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuICAgIC8vdGhpcy5maWx0ZXJzPSBbXTtcbiAgICAvLyBuZXh0IHdlIGZpbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHVudHJhbnNmb3JtZWQgb2JqZWN0XG4gICAgLy8gdGhpcyBmdW5jdGlvbiBhbHNvIGNhbGxzIHVwZGF0ZXRyYW5zZm9ybSBvbiBhbGwgaXRzIGNoaWxkcmVuIGFzIHBhcnQgb2YgdGhlIG1lYXN1cmluZy4gVGhpcyBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgdHJhbnNmb3JtIGFnYWluIGluIHRoaXMgZnVuY3Rpb25cbiAgICAvLyBUT0RPIHBhc3MgYW4gb2JqZWN0IHRvIGNsb25lIHRvbz8gc2F2ZXMgaGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBvbmUgZWFjaCB0aW1lIVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuY2xvbmUoKTtcblxuICAgIC8vIGFkZCBzb21lIHBhZGRpbmchXG4gICAgaWYodGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5fZmlsdGVyc1swXS5wYWRkaW5nO1xuICAgICAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgICAgICBib3VuZHMueSAtPSBwYWRkaW5nO1xuXG4gICAgICAgIGJvdW5kcy53aWR0aCArPSBwYWRkaW5nICogMjtcbiAgICAgICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcbiAgICB9XG5cbiAgICAvLyBmb3Igbm93IHdlIGNhY2hlIHRoZSBjdXJyZW50IHJlbmRlclRhcmdldCB0aGF0IHRoZSB3ZWJHTCByZW5kZXJlciBpcyBjdXJyZW50bHkgdXNpbmcuXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBtb3JlIGVsZWdlbnQuLlxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0O1xuICAgIC8vIFdlIGFsc28gc3RvcmUgdGhlIGZpbHRlciBzdGFjayAtIEkgd2lsbCBkZWZpbml0ZWx5IGxvb2sgdG8gY2hhbmdlIGhvdyB0aGlzIHdvcmtzIGEgbGl0dGxlIGxhdGVyIGRvd24gdGhlIGxpbmUuXG4gICAgdmFyIHN0YWNrID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjaztcblxuICAgIC8vIHRoaXMgcmVuZGVyVGV4dHVyZSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlZCBEaXNwbGF5T2JqZWN0XG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cblxuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjYWNoZWRSZW5kZXJUYXJnZXQpO1xuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2sgPSBzdGFjaztcblxuICAgIHRoaXMucmVuZGVyV2ViR0wgICAgID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgICAgICAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyByZXN0b3JlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIGNhY2hlZCBzcHJpdGUgdG8gYXZvaWQgdGhlIG5hc3R5IGZsaWNrZXIuLlxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAvLyBtYXAgdGhlIGhpdCB0ZXN0Li5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBjYW52YXNcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzKCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbn07XG5cbi8vVE9ETyB0aGlzIGNhbiBiZSB0aGUgc2FtZSBhcyB0aGUgd2ViR0wgdmVyaXNvbi4uIHdpbGwgbmVlZCB0byBkbyBhIGxpdHRsZSB0d2Vha2luZyBmaXJzdCB0aG91Z2guLlxuLyoqXG4qIFByZXBhcmVzIHRoZSBDYW52YXMgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vZ2V0IGJvdW5kcyBhY3R1YWxseSB0cmFuc2Zvcm1zIHRoZSBvYmplY3QgZm9yIHVzIGFscmVhZHkhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5jb250ZXh0ID0gY2FjaGVkUmVuZGVyVGFyZ2V0O1xuXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBDYWxjdWxhdGVzIHRoZSBib3VuZHMgb2YgdGhlIGNhY2hlZCBzcHJpdGVcbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZ2V0Q2FjaGVkQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNwcml0ZS5nZXRCb3VuZHMoKTtcbn07XG5cbi8qKlxuKiBEZXN0cm95cyB0aGUgY2FjaGVkIHNwcml0ZS5cbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fdGV4dHVyZS5kZXN0cm95KCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwRGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jYWNoZUFzQml0bWFwID0gZmFsc2U7XG4gICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95KCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIG9iamVjdC5cbiAqXG4gKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICogQG1lbWJlciB7c3RyaW5nfVxuICovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZGlzcGxheSBvYmplY3QgaW4gdGhlIGNvbnRhaW5lclxuKlxuKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4qIEBwYXJhbSBuYW1lIHtzdHJpbmd9IGluc3RhbmNlIG5hbWVcbiogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuKi9cbmNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4qXG4qIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4qIEBwYXJhbSBwb2ludCB7UG9pbnR9IHRoZSBwb2ludCB0byB3cml0ZSB0aGUgZ2xvYmFsIHZhbHVlIHRvLiBJZiBudWxsIGEgbmV3IHBvaW50IHdpbGwgYmUgcmV0dXJuZWRcbiogQHJldHVybiB7UG9pbnR9XG4qL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRHbG9iYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb2ludClcbntcbiAgICBwb2ludCA9IHBvaW50IHx8IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICBpZih0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHBvaW50LnggPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICBwb2ludC55ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG9pbnQueCA9IHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMucG9zaXRpb24ueTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG5yZXF1aXJlKCcuL2NhY2hlQXNCaXRtYXAnKTtcbnJlcXVpcmUoJy4vZ2V0Q2hpbGRCeU5hbWUnKTtcbnJlcXVpcmUoJy4vZ2V0R2xvYmFsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZXh0cmFzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1vdmllQ2xpcDogICAgICByZXF1aXJlKCcuL01vdmllQ2xpcCcpLFxuICAgIFRpbGluZ1Nwcml0ZTogICByZXF1aXJlKCcuL1RpbGluZ1Nwcml0ZScpLFxuICAgIEJpdG1hcFRleHQ6ICAgICByZXF1aXJlKCcuL0JpdG1hcFRleHQnKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vLyBUT0RPIChjZW5nbGVyKSAtIFRoZSBZIGlzIGZsaXBwZWQgaW4gdGhpcyBzaGFkZXIgZm9yIHNvbWUgcmVhc29uLlxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBzaGFkZXIgOiBodHRwczovL3d3dy5zaGFkZXJ0b3kuY29tL3ZpZXcvbHNzR0RqIGJ5IEBtb3ZBWDEzaFxuICovXG5cbi8qKlxuICogQW4gQVNDSUkgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBBc2NpaUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgY2hhcmFjdGVyKGZsb2F0IG4sIHZlYzIgcClcXG57XFxuICAgIHAgPSBmbG9vcihwKnZlYzIoNC4wLCAtNC4wKSArIDIuNSk7XFxuICAgIGlmIChjbGFtcChwLngsIDAuMCwgNC4wKSA9PSBwLnggJiYgY2xhbXAocC55LCAwLjAsIDQuMCkgPT0gcC55KVxcbiAgICB7XFxuICAgICAgICBpZiAoaW50KG1vZChuL2V4cDIocC54ICsgNS4wKnAueSksIDIuMCkpID09IDEpIHJldHVybiAxLjA7XFxuICAgIH1cXG4gICAgcmV0dXJuIDAuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHk7XFxuXFxuICAgIHZlYzMgY29sID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBmbG9vciggdXYgLyBwaXhlbFNpemUgKSAqIHBpeGVsU2l6ZSAvIGRpbWVuc2lvbnMueHkpLnJnYjtcXG5cXG4gICAgZmxvYXQgZ3JheSA9IChjb2wuciArIGNvbC5nICsgY29sLmIpIC8gMy4wO1xcblxcbiAgICBmbG9hdCBuID0gIDY1NTM2LjA7ICAgICAgICAgICAgIC8vIC5cXG4gICAgaWYgKGdyYXkgPiAwLjIpIG4gPSA2NTYwMC4wOyAgICAvLyA6XFxuICAgIGlmIChncmF5ID4gMC4zKSBuID0gMzMyNzcyLjA7ICAgLy8gKlxcbiAgICBpZiAoZ3JheSA+IDAuNCkgbiA9IDE1MjU1MDg2LjA7IC8vIG9cXG4gICAgaWYgKGdyYXkgPiAwLjUpIG4gPSAyMzM4NTE2NC4wOyAvLyAmXFxuICAgIGlmIChncmF5ID4gMC42KSBuID0gMTUyNTIwMTQuMDsgLy8gOFxcbiAgICBpZiAoZ3JheSA+IDAuNykgbiA9IDEzMTk5NDUyLjA7IC8vIEBcXG4gICAgaWYgKGdyYXkgPiAwLjgpIG4gPSAxMTUxMjgxMC4wOyAvLyAjXFxuXFxuICAgIHZlYzIgcCA9IG1vZCggdXYgLyAoIHBpeGVsU2l6ZSAqIDAuNSApLCAyLjApIC0gdmVjMigxLjApO1xcbiAgICBjb2wgPSBjb2wgKiBjaGFyYWN0ZXIobiwgcCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sLCAxLjApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDggfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQXNjaWlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Bc2NpaUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc2NpaUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQXNjaWlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFzY2lpRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBzaXplIHVzZWQgYnkgdGhlIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkFzY2lpRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmxvb21GaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmxvb21GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xufVxuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsb29tRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb29tRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbG9vbUZpbHRlcjtcblxuQmxvb21GaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLlNDUkVFTik7XG5cbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvb21GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuXG4vKipcbiAqIFRoZSBCbHVyRGlyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvd2FyZCBhIGRpcmVjdGlvbiB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWFxuICogQHBhcmFtIHtudW1iZXJ9IGRpcllcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckRpckZpbHRlcihkaXJYLCBkaXJZKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBmbG9hdCBkaXJYO1xcbnVuaWZvcm0gZmxvYXQgZGlyWTtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1swXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDEyICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDEyICogc3RyZW5ndGgpICogZGlyWSApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkgKiAwLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkgKiAwLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkgKiAwLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pICogMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBkaXJYOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJYIHx8IDAgfSxcbiAgICAgICAgICAgIGRpclk6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclkgfHwgMCB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclggPSBkaXJYIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclkgPSBkaXJZIHx8IDA7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckRpckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckRpckZpbHRlcjtcblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKSB7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmICh0aGlzLnBhc3NlcyA9PT0gMSkge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0yOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gKHRoaXMucGFzc2VzKyhpKjIpKSAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckRpckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJYO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJYLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsdXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcbn1cblxuQmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckZpbHRlcjtcblxuQmx1ckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcGFzc2VzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzID0gdGhpcy5ibHVyWUZpbHRlci5wYXNzZXMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWEZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1clhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1clhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1clhGaWx0ZXI7XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1clhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSAgTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllGaWx0ZXI7XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSBNYXRoLmFicyh0aGlzLnN0cmVuZ3RoKSAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgU21hcnQgQmx1ciBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNtYXJ0Qmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAqIHBlcmNlbnQpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICBkZWx0YTogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjEsIHk6IDAuMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTbWFydEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNtYXJ0Qmx1ckZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDV4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogYGBganNcbiAqICB2YXIgY29sb3JNYXRyaXggPSBuZXcgUElYSS5Db2xvck1hdHJpeEZpbHRlcigpO1xuICogIGNvbnRhaW5lci5maWx0ZXJzID0gW2NvbG9yTWF0cml4XTtcbiAqICBjb2xvck1hdHJpeC5jb250cmFzdCgyKTtcbiAqIGBgYFxuICogQGF1dGhvciBDbMOpbWVudCBDaGVuZWJhdWx0IDxjbGVtZW50QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvck1hdHJpeEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBtWzI1XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuXFxuICAgIHZlYzQgYyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yID0gKG1bMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gbVs0XTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLmcgPSAobVs1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSBtWzldO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmIgPSAobVsxMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gbVsxNF07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYSA9IChtWzE1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSBtWzE5XTtcXG5cXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJzFmdicsIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yTWF0cml4RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvck1hdHJpeEZpbHRlcjtcblxuXG4vKipcbiAqIFRyYW5zZm9ybXMgY3VycmVudCBtYXRyaXggYW5kIHNldCB0aGUgbmV3IG9uZVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gaWYgdHJ1ZSwgY3VycmVudCBtYXRyaXggYW5kIG1hdHJpeCBhcmUgbXVsdGlwbGllZC4gSWYgZmFsc2UsIGp1c3Qgc2V0IHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIEBwYXJhbSBtYXRyaXhcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9sb2FkTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgbXVsdGlwbHkpXG57XG4gICAgbXVsdGlwbHkgPSAhIW11bHRpcGx5O1xuXG4gICAgdmFyIG5ld01hdHJpeCA9IG1hdHJpeDtcblxuICAgIGlmIChtdWx0aXBseSkge1xuICAgICAgICB0aGlzLl9tdWx0aXBseShuZXdNYXRyaXgsIHRoaXMudW5pZm9ybXMubS52YWx1ZSwgbWF0cml4KTtcbiAgICAgICAgbmV3TWF0cml4ID0gdGhpcy5fY29sb3JNYXRyaXgobmV3TWF0cml4KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBtYXRyaXhcbiAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSBuZXdNYXRyaXg7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDUnc1xuICpcbiAqIEBwYXJhbSBvdXQge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSBhIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0gYiB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIG91dCB7bnVtYmVyW119IChtYXQgNXg0KVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYilcbntcblxuICAgIC8vIFJlZCBDaGFubmVsXG4gICAgb3V0WzBdID0gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYls1XSkgKyAoYVsyXSAqIGJbMTBdKSArIChhWzNdICogYlsxNV0pO1xuICAgIG91dFsxXSA9IChhWzBdICogYlsxXSkgKyAoYVsxXSAqIGJbNl0pICsgKGFbMl0gKiBiWzExXSkgKyAoYVszXSAqIGJbMTZdKTtcbiAgICBvdXRbMl0gPSAoYVswXSAqIGJbMl0pICsgKGFbMV0gKiBiWzddKSArIChhWzJdICogYlsxMl0pICsgKGFbM10gKiBiWzE3XSk7XG4gICAgb3V0WzNdID0gKGFbMF0gKiBiWzNdKSArIChhWzFdICogYls4XSkgKyAoYVsyXSAqIGJbMTNdKSArIChhWzNdICogYlsxOF0pO1xuICAgIG91dFs0XSA9IChhWzBdICogYls0XSkgKyAoYVsxXSAqIGJbOV0pICsgKGFbMl0gKiBiWzE0XSkgKyAoYVszXSAqIGJbMTldKTtcblxuICAgIC8vIEdyZWVuIENoYW5uZWxcbiAgICBvdXRbNV0gPSAoYVs1XSAqIGJbMF0pICsgKGFbNl0gKiBiWzVdKSArIChhWzddICogYlsxMF0pICsgKGFbOF0gKiBiWzE1XSk7XG4gICAgb3V0WzZdID0gKGFbNV0gKiBiWzFdKSArIChhWzZdICogYls2XSkgKyAoYVs3XSAqIGJbMTFdKSArIChhWzhdICogYlsxNl0pO1xuICAgIG91dFs3XSA9IChhWzVdICogYlsyXSkgKyAoYVs2XSAqIGJbN10pICsgKGFbN10gKiBiWzEyXSkgKyAoYVs4XSAqIGJbMTddKTtcbiAgICBvdXRbOF0gPSAoYVs1XSAqIGJbM10pICsgKGFbNl0gKiBiWzhdKSArIChhWzddICogYlsxM10pICsgKGFbOF0gKiBiWzE4XSk7XG4gICAgb3V0WzldID0gKGFbNV0gKiBiWzRdKSArIChhWzZdICogYls5XSkgKyAoYVs3XSAqIGJbMTRdKSArIChhWzhdICogYlsxOV0pO1xuXG4gICAgLy8gQmx1ZSBDaGFubmVsXG4gICAgb3V0WzEwXSA9IChhWzEwXSAqIGJbMF0pICsgKGFbMTFdICogYls1XSkgKyAoYVsxMl0gKiBiWzEwXSkgKyAoYVsxM10gKiBiWzE1XSk7XG4gICAgb3V0WzExXSA9IChhWzEwXSAqIGJbMV0pICsgKGFbMTFdICogYls2XSkgKyAoYVsxMl0gKiBiWzExXSkgKyAoYVsxM10gKiBiWzE2XSk7XG4gICAgb3V0WzEyXSA9IChhWzEwXSAqIGJbMl0pICsgKGFbMTFdICogYls3XSkgKyAoYVsxMl0gKiBiWzEyXSkgKyAoYVsxM10gKiBiWzE3XSk7XG4gICAgb3V0WzEzXSA9IChhWzEwXSAqIGJbM10pICsgKGFbMTFdICogYls4XSkgKyAoYVsxMl0gKiBiWzEzXSkgKyAoYVsxM10gKiBiWzE4XSk7XG4gICAgb3V0WzE0XSA9IChhWzEwXSAqIGJbNF0pICsgKGFbMTFdICogYls5XSkgKyAoYVsxMl0gKiBiWzE0XSkgKyAoYVsxM10gKiBiWzE5XSk7XG5cbiAgICAvLyBBbHBoYSBDaGFubmVsXG4gICAgb3V0WzE1XSA9IChhWzE1XSAqIGJbMF0pICsgKGFbMTZdICogYls1XSkgKyAoYVsxN10gKiBiWzEwXSkgKyAoYVsxOF0gKiBiWzE1XSk7XG4gICAgb3V0WzE2XSA9IChhWzE1XSAqIGJbMV0pICsgKGFbMTZdICogYls2XSkgKyAoYVsxN10gKiBiWzExXSkgKyAoYVsxOF0gKiBiWzE2XSk7XG4gICAgb3V0WzE3XSA9IChhWzE1XSAqIGJbMl0pICsgKGFbMTZdICogYls3XSkgKyAoYVsxN10gKiBiWzEyXSkgKyAoYVsxOF0gKiBiWzE3XSk7XG4gICAgb3V0WzE4XSA9IChhWzE1XSAqIGJbM10pICsgKGFbMTZdICogYls4XSkgKyAoYVsxN10gKiBiWzEzXSkgKyAoYVsxOF0gKiBiWzE4XSk7XG4gICAgb3V0WzE5XSA9IChhWzE1XSAqIGJbNF0pICsgKGFbMTZdICogYls5XSkgKyAoYVsxN10gKiBiWzE0XSkgKyAoYVsxOF0gKiBiWzE5XSk7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHJldHVybiBtIHtudW1iZXJbXX0gKG1hdCA1eDQpIHdpdGggYWxsIHZhbHVlcyBiZXR3ZWVuIDAtMVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2NvbG9yTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICAvLyBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gICAgdmFyIG0gPSBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCk7XG4gICAgbVs0XSAvPSAyNTU7XG4gICAgbVs5XSAvPSAyNTU7XG4gICAgbVsxNF0gLz0gMjU1O1xuICAgIG1bMTldIC89IDI1NTtcblxuICAgIHJldHVybiBtO1xufTtcblxuLyoqXG4gKiBBZGp1c3RzIGJyaWdodG5lc3NcbiAqXG4gKiBAcGFyYW0gYiB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgYnJpZ3RobmVzcyAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icmlnaHRuZXNzID0gZnVuY3Rpb24gKGIsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGIsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIGIsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIGIsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXRyaWNlcyBpbiBncmV5IHNjYWxlc1xuICpcbiAqIEBwYXJhbSBzY2FsZSB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgZ3JleSAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG4vL0FtZXJpY2FuaXplZCBhbGlhc1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyYXlzY2FsZSA9IENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGU7XG5cbi8qKlxuICogU2V0IHRoZSBibGFjayBhbmQgd2hpdGUgbWF0cmljZVxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJsYWNrQW5kV2hpdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGh1ZSBwcm9wZXJ0eSBvZiB0aGUgY29sb3JcbiAqXG4gKiBAcGFyYW0gcm90YXRpb24ge251bWJlcn0gaW4gZGVncmVlc1xuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmh1ZSA9IGZ1bmN0aW9uIChyb3RhdGlvbiwgbXVsdGlwbHkpXG57XG4gICAgcm90YXRpb24gPSAocm90YXRpb24gfHwgMCkgLyAxODAgKiBNYXRoLlBJO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyhyb3RhdGlvbiksXG4gICAgICAgIHNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcblxuICAgIC8vIGx1bWluYW5jZVJlZCwgbHVtaW5hbmNlR3JlZW4sIGx1bWluYW5jZUJsdWVcbiAgICB2YXIgbHVtUiA9IDAuMjEzLCAvLyBvciAwLjMwODZcbiAgICAgICAgbHVtRyA9IDAuNzE1LCAvLyBvciAwLjYwOTRcbiAgICAgICAgbHVtQiA9IDAuMDcyOyAvLyBvciAwLjA4MjBcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoMSAtIGx1bVIpICsgc2luICogKC1sdW1SKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAoLWx1bUcpLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgxIC0gbHVtQiksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKDAuMTQzKSwgbHVtRyArIGNvcyAqICgxIC0gbHVtRykgKyBzaW4gKiAoMC4xNDApLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgtMC4yODMpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgtKDEgLSBsdW1SKSksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKGx1bUcpLCBsdW1CICsgY29zICogKDEgLSBsdW1CKSArIHNpbiAqIChsdW1CKSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKipcbiAqIFNldCB0aGUgY29udHJhc3QgbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGRhcmsgYW5kIGJyaWdodFxuICogSW5jcmVhc2UgY29udHJhc3QgOiBzaGFkb3dzIGRhcmtlciBhbmQgaGlnaGxpZ2h0cyBicmlnaHRlclxuICogRGVjcmVhc2UgY29udHJhc3QgOiBicmluZyB0aGUgc2hhZG93cyB1cCBhbmQgdGhlIGhpZ2hsaWdodHMgZG93blxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdmFsdWUgb2YgdGhlIGNvbnRyYXN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29udHJhc3QgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgdiA9IChhbW91bnQgfHwgMCkgKyAxO1xuICAgIHZhciBvID0gLTEyOCAqICh2IC0gMSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB2LCAwLCAwLCAwLCBvLFxuICAgICAgICAwLCB2LCAwLCAwLCBvLFxuICAgICAgICAwLCAwLCB2LCAwLCBvLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc2F0dXJhdGlvbiBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gY29sb3JzXG4gKiBJbmNyZWFzZSBzYXR1cmF0aW9uIDogaW5jcmVhc2UgY29udHJhc3QsIGJyaWdodG5lc3MsIGFuZCBzaGFycG5lc3NcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgeCA9IChhbW91bnQgfHwgMCkgKiAyIC8gMyArIDE7XG4gICAgdmFyIHkgPSAoKHggLSAxKSAqIC0wLjUpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgeCwgeSwgeSwgMCwgMCxcbiAgICAgICAgeSwgeCwgeSwgMCwgMCxcbiAgICAgICAgeSwgeSwgeCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBEZXNhdHVyYXRlIGltYWdlIChyZW1vdmUgY29sb3IpXG4gKlxuICogQ2FsbCB0aGUgc2F0dXJhdGUgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHRoaXMuc2F0dXJhdGUoLTEpO1xufTtcblxuLyoqXG4gKiBOZWdhdGl2ZSBpbWFnZSAoaW52ZXJzZSBvZiBjbGFzc2ljIHJnYiBtYXRyaXgpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5lZ2F0aXZlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDEsIDEsIDAsIDAsXG4gICAgICAgIDEsIDAsIDEsIDAsIDAsXG4gICAgICAgIDEsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2VwaWEgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2VwaWEgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zOTMsIDAuNzY4OTk5OSwgMC4xODg5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4zNDksIDAuNjg1OTk5OSwgMC4xNjc5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4yNzIsIDAuNTMzOTk5OSwgMC4xMzA5OTk5OSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciBtb3Rpb24gcGljdHVyZSBwcm9jZXNzIGludmVudGVkIGluIDE5MTYgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRlY2huaWNvbG9yID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuOTEyNTI3Nzg5MTQ1NjA4MywgLTAuODU0NTM0NDk3Njk1MTY0NSwgLTAuMDkxNTU1MDg0ODI3NTU1ODUsIDAsIDExLjc5MzYwMzQzNDM3NzMzNyxcbiAgICAgICAgLTAuMzA4NzgzMzM4NTkyODA5NywgMS43NjU4OTA4NTU1NDU4NDI4LCAtMC4xMDYwMTc0MzA3NDcyMjI0NSwgMCwgLTcwLjM1MjA1MTYxNDYxMzk4LFxuICAgICAgICAtMC4yMzExMDMzNzc1NDg2MTYsIC0wLjc1MDE4OTkxOTc0NDAyMTIsIDEuODQ3NTk3ODE2MTA4MTg5LCAwLCAzMC45NTA5NDA4Njk0OTExMzgsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogUG9sYXJvaWQgZmlsdGVyXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnBvbGFyb2lkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuNDM4LCAtMC4wNjIsIC0wLjA2MiwgMCwgMCxcbiAgICAgICAgLTAuMTIyLCAxLjM3OCwgLTAuMTIyLCAwLCAwLFxuICAgICAgICAtMC4wMTYsIC0wLjAxNiwgMS40ODMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRmlsdGVyIHdobyB0cmFuc2Zvcm1zIDogUmVkIC0+IEJsdWUgYW5kIEJsdWUgLT4gUmVkXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRvQkdSID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgcmV2ZXJzYWwgZmlsbSBpbnRyb2R1Y2VkIGJ5IEVhc3RtYW4gS29kYWsgaW4gMTkzNS4gKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmtvZGFjaHJvbWUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS4xMjg1NTgyMzk2NTkzNTI1LCAtMC4zOTY3MzgyMjgzNjAxMzQ4LCAtMC4wMzk5MjU1OTE3MjkyMTc5MywgMCwgNjMuNzI5NTg3NjIxOTY1MDIsXG4gICAgICAgIC0wLjE2NDA0MzM5OTYyMjQ0NjE2LCAxLjA4MzUyNTE1NjYyOTEzMDQsIC0wLjA1NDk4ODA1MTE1NjMzMTMyLCAwLCAyNC43MzI0MDc4OTY3MDYyMDMsXG4gICAgICAgIC0wLjE2Nzg2MDEwNzA2MTU1NzYzLCAtMC41NjAzNDE2Mjc3Njk1MjQ4LCAxLjYwMTQ4NTA3NjE5NjQ5NDMsIDAsIDM1LjYyOTgyODA3NDYwOTQ2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEJyb3duIGRlbGljaW91cyBicm93bmkgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icm93bmkgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC41OTk3MDIzNDk4MTU5NzE1LCAwLjM0NTUzMjQzMDQ4MzkxMjYzLCAtMC4yNzA4Mjk4Njc0NTM4MDQyLCAwLCA0Ny40MzE5Mjg1NTYwMDg3MyxcbiAgICAgICAgLTAuMDM3NzAzMjQ5ODM3NzgzMTU3LCAwLjg2MDk1Nzc1ODc5OTI2NDEsIDAuMTUwNTk1NTIzODg0NTk5MTMsIDAsIC0zNi45Njg0MTQ5ODMxOTEyNyxcbiAgICAgICAgMC4yNDExMzYzNTEyODE1MzMzNSwgLTAuMDc0NDEwMzc5MDg0MjI0OTIsIDAuNDQ5NzIxODIwNjQ4NzcxNTMsIDAsIC03LjU2MjA3NTI3NzU5MTI4MyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFZpbnRhZ2UgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS52aW50YWdlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNjI3OTM0NTYzNTYwNTk5NCwgMC4zMjAyMTgzNDIwODE5MzY3LCAtMC4wMzk2NTQwODIxMTMxMjQ1MywgMCwgOS42NTEyODU4MzUyOTQxMjMsXG4gICAgICAgIDAuMDI1NzgzOTc3MDQ4MDg4NjgsIDAuNjQ0MTE4ODY0NDM3NDc3MSwgMC4wMzI1OTEyNzYxNjE0OTI5NCwgMCwgNy40NjI4MjkxNzY0NzA1OTEsXG4gICAgICAgIDAuMDQ2NjA1NTU1Njc4MjcxOSwgLTAuMDg1MTIzMjk4NzI0Nzg5MSwgMC41MjQxNjQ4MDE4NzAwNDY1LCAwLCA1LjE1OTE5MDU4ODIzNTI5NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGtpbmQgb2YgZ3JhZGllbnQgbWFwLCBidXQgZnVubnkgdG8gcGxheSB3aXRoIVxuICpcbiAqIEBwYXJhbSBkZXNhdHVyYXRpb24ge251bWJlcn1cbiAqIEBwYXJhbSB0b25lZCB7bnVtYmVyfVxuICogQHBhcmFtIGxpZ2h0Q29sb3Ige3N0cmluZ30gKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKiBAcGFyYW0gZGFya0NvbG9yIHtzdHJpbmd9ICAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29sb3JUb25lID0gZnVuY3Rpb24gKGRlc2F0dXJhdGlvbiwgdG9uZWQsIGxpZ2h0Q29sb3IsIGRhcmtDb2xvciwgbXVsdGlwbHkpXG57XG4gICAgZGVzYXR1cmF0aW9uID0gZGVzYXR1cmF0aW9uIHx8IDAuMjtcbiAgICB0b25lZCA9IHRvbmVkIHx8IDAuMTU7XG4gICAgbGlnaHRDb2xvciA9IGxpZ2h0Q29sb3IgfHwgMHhGRkU1ODA7XG4gICAgZGFya0NvbG9yID0gZGFya0NvbG9yIHx8IDB4MzM4MDAwO1xuXG4gICAgdmFyIGxSID0gKChsaWdodENvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsRyA9ICgobGlnaHRDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsQiA9IChsaWdodENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgZFIgPSAoKGRhcmtDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEcgPSAoKGRhcmtDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkQiA9IChkYXJrQ29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC41OSwgMC4xMSwgMCwgMCxcbiAgICAgICAgbFIsIGxHLCBsQiwgZGVzYXR1cmF0aW9uLCAwLFxuICAgICAgICBkUiwgZEcsIGRCLCB0b25lZCwgMCxcbiAgICAgICAgbFIgLSBkUiwgbEcgLSBkRywgbEIgLSBkQiwgMCwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIE5pZ2h0IGVmZmVjdFxuICpcbiAqIEBwYXJhbSBpbnRlbnNpdHkge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uaWdodCA9IGZ1bmN0aW9uIChpbnRlbnNpdHksIG11bHRpcGx5KVxue1xuICAgIGludGVuc2l0eSA9IGludGVuc2l0eSB8fCAwLjE7XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgaW50ZW5zaXR5ICogKCAtMi4wKSwgLWludGVuc2l0eSwgMCwgMCwgMCxcbiAgICAgICAgLWludGVuc2l0eSwgMCwgaW50ZW5zaXR5LCAwLCAwLFxuICAgICAgICAwLCBpbnRlbnNpdHksIGludGVuc2l0eSAqIDIuMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKlxuICogUHJlZGF0b3IgZWZmZWN0XG4gKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgYSBuZXcgaW5kZXBlbnQgb25lXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBob3cgbXVjaCB0aGUgcHJlZGF0b3IgZmVlbHMgaGlzIGZ1dHVyZSB2aWN0aW1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wcmVkYXRvciA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDExLjIyNDEzMDYzMDQ5MzE2NCAqIGFtb3VudCwgLTQuNzk0NDg2OTk5NTExNzE5ICogYW1vdW50LCAtMi44NzQ2MTE4NTQ1NTMyMjI3ICogYW1vdW50LCAwICogYW1vdW50LCAwLjQwMzQyNDM4MjIwOTc3NzgzICogYW1vdW50LFxuICAgICAgICAtMy42MzMwNjk3NTM2NDY4NTA2ICogYW1vdW50LCA5LjE5MzE1NzE5NjA0NDkyMiAqIGFtb3VudCwgLTIuOTUxODEwODM2NzkxOTkyICogYW1vdW50LCAwICogYW1vdW50LCAtMS4zMTYxMzUwNDg4NjYyNzIgKiBhbW91bnQsXG4gICAgICAgIC0zLjIxODQxOTc5MDI2Nzk0NDMgKiBhbW91bnQsIC00LjIzNzUwMzA1MTc1NzgxMjUgKiBhbW91bnQsIDcuNDc2NDQ4MDU5MDgyMDMxICogYW1vdW50LCAwICogYW1vdW50LCAwLjgwNDQ0NTkyMjM3NDcyNTMgKiBhbW91bnQsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBMU0QgZWZmZWN0XG4gKlxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBIb3cgY3JhenkgaXMgeW91ciBlZmZlY3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5sc2QgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMiwgLTAuNCwgMC41LCAwLCAwLFxuICAgICAgICAtMC41LCAyLCAtMC40LCAwLCAwLFxuICAgICAgICAtMC40LCAtMC41LCAzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgb25lXG4gKlxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIGZhbHNlKTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF0cml4IG9mIHRoZSBjb2xvciBtYXRyaXggZmlsdGVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yTWF0cml4RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IFsxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwXVxuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm0udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBsb3dlcnMgdGhlIGNvbG9yIGRlcHRoIG9mIHlvdXIgaW1hZ2UgYnkgdGhlIGdpdmVuIGFtb3VudCwgcHJvZHVjaW5nIGFuIGltYWdlIHdpdGggYSBzbWFsbGVyIHBhbGV0dGUuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yU3RlcEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzdGVwO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGNvbG9yID0gZmxvb3IoY29sb3IgKiBzdGVwKSAvIHN0ZXA7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXA6IHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yU3RlcEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JTdGVwRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBzdGVwcyB0byByZWR1Y2UgdGhlIHBhbGV0dGUgYnkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvclN0ZXBGaWx0ZXIjXG4gICAgICovXG4gICAgc3RlcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbnZvbHV0aW9uRmlsdGVyIGNsYXNzIGFwcGxpZXMgYSBtYXRyaXggY29udm9sdXRpb24gZmlsdGVyIGVmZmVjdC5cbiAqIEEgY29udm9sdXRpb24gY29tYmluZXMgcGl4ZWxzIGluIHRoZSBpbnB1dCBpbWFnZSB3aXRoIG5laWdoYm9yaW5nIHBpeGVscyB0byBwcm9kdWNlIGEgbmV3IGltYWdlLlxuICogQSB3aWRlIHZhcmlldHkgb2YgaW1hZ2UgZWZmZWN0cyBjYW4gYmUgYWNoaWV2ZWQgdGhyb3VnaCBjb252b2x1dGlvbnMsIGluY2x1ZGluZyBibHVycmluZywgZWRnZVxuICogZGV0ZWN0aW9uLCBzaGFycGVuaW5nLCBlbWJvc3NpbmcsIGFuZCBiZXZlbGluZy4gVGhlIG1hdHJpeCBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIFNlZSBodHRwOi8vZG9jcy5naW1wLm9yZy9lbi9wbHVnLWluLWNvbnZtYXRyaXguaHRtbCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICovXG5mdW5jdGlvbiBDb252b2x1dGlvbkZpbHRlcihtYXRyaXgsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyBtZWRpdW1wIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xcbnVuaWZvcm0gZmxvYXQgbWF0cml4WzldO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IGMxMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAtIHRleGVsU2l6ZSk7IC8vIHRvcCBsZWZ0XFxuICAgdmVjNCBjMTIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgY2VudGVyXFxuICAgdmVjNCBjMTMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCByaWdodFxcblxcbiAgIHZlYzQgYzIxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIGxlZnRcXG4gICB2ZWM0IGMyMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7IC8vIG1pZCBjZW50ZXJcXG4gICB2ZWM0IGMyMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCByaWdodFxcblxcbiAgIHZlYzQgYzMxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gbGVmdFxcbiAgIHZlYzQgYzMyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGNlbnRlclxcbiAgIHZlYzQgYzMzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgdGV4ZWxTaXplKTsgLy8gYm90dG9tIHJpZ2h0XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID1cXG4gICAgICAgYzExICogbWF0cml4WzBdICsgYzEyICogbWF0cml4WzFdICsgYzEzICogbWF0cml4WzJdICtcXG4gICAgICAgYzIxICogbWF0cml4WzNdICsgYzIyICogbWF0cml4WzRdICsgYzIzICogbWF0cml4WzVdICtcXG4gICAgICAgYzMxICogbWF0cml4WzZdICsgYzMyICogbWF0cml4WzddICsgYzMzICogbWF0cml4WzhdO1xcblxcbiAgIGdsX0ZyYWdDb2xvci5hID0gYzIyLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWF0cml4OiAgICAgeyB0eXBlOiAnMWZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KSB9LFxuICAgICAgICAgICAgdGV4ZWxTaXplOiAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxIC8gd2lkdGgsIHk6IDEgLyBoZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnZvbHV0aW9uRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb252b2x1dGlvbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnkgPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIENyb3NzIEhhdGNoIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENyb3NzSGF0Y2hGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZmxvYXQgbHVtID0gbGVuZ3RoKHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZC54eSkucmdiKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDEuMCwgMS4wLCAxLjApO1xcblxcbiAgICBpZiAobHVtIDwgMS4wMClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjc1KVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNTApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC4zKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXCJcbiAgICApO1xufVxuXG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDcm9zc0hhdGNoRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDcm9zc0hhdGNoRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIERpc3BsYWNlbWVudEZpbHRlciBjbGFzcyB1c2VzIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHRleHR1cmUgKGNhbGxlZCB0aGUgZGlzcGxhY2VtZW50IG1hcCkgdG8gcGVyZm9ybSBhIGRpc3BsYWNlbWVudCBvZiBhbiBvYmplY3QuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGZpbHRlciB0byBhcHBseSBhbGwgbWFub3Igb2YgY3Jhenkgd2FycGluZyBlZmZlY3RzXG4gKiBDdXJyZW50bHkgdGhlIHIgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHggYW5kIHRoZSBnIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIChtYWtlIHN1cmUgaXRzIGFkZGVkIHRvIHRoZSBzY2VuZSEpXG4gKi9cbmZ1bmN0aW9uIERpc3BsYWNlbWVudEZpbHRlcihzcHJpdGUsIHNjYWxlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG4gICAgc3ByaXRlLnJlbmRlcmFibGUgPSBmYWxzZTtcblxuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZNYXBDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcFNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgbWFwID0gIHRleHR1cmUyRChtYXBTYW1wbGVyLCB2TWFwQ29vcmQpO1xcblxcbiAgIG1hcCAtPSAwLjU7XFxuICAgbWFwLnh5ICo9IHNjYWxlO1xcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyBtYXAueCwgdlRleHR1cmVDb29yZC55ICsgbWFwLnkpKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcFNhbXBsZXI6ICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLnRleHR1cmUgfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9LFxuICAgICAgICAgICAgc2NhbGU6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSwgeTogMSB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcblxuICAgIGlmIChzY2FsZSA9PT0gbnVsbCB8fCBzY2FsZSA9PT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgICAgc2NhbGUgPSAyMDtcbiAgICB9XG5cbiAgICB0aGlzLnNjYWxlID0gbmV3IGNvcmUuUG9pbnQoc2NhbGUsIHNjYWxlKTtcbn1cblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYWNlbWVudEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxhY2VtZW50RmlsdGVyO1xuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS54ID0gdGhpcy5zY2FsZS54ICogKDEvaW5wdXQuZnJhbWUud2lkdGgpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueSA9IHRoaXMuc2NhbGUueSAqICgxL2lucHV0LmZyYW1lLmhlaWdodCk7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gTXVzdCBiZSBwb3dlciBvZiAyIHNpemVkIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5EaXNwbGFjZW1lbnRGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3ZlcyBodHRwOi8vbWF0Z3JvdmVzLmNvbS8gQERvb3JtYXQyM1xuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9mdW4vZG90c2NyZWVuLmpzXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgZG90c2NyZWVuIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0byBiZSBtYWRlIG91dCBvZlxuICogYmxhY2sgYW5kIHdoaXRlIGhhbGZ0b25lIGRvdHMgbGlrZSBhbiBvbGQgcHJpbnRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRG90U2NyZWVuRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG5cXG5mbG9hdCBwYXR0ZXJuKClcXG57XFxuICAgZmxvYXQgcyA9IHNpbihhbmdsZSksIGMgPSBjb3MoYW5nbGUpO1xcbiAgIHZlYzIgdGV4ID0gdlRleHR1cmVDb29yZCAqIGRpbWVuc2lvbnMueHk7XFxuICAgdmVjMiBwb2ludCA9IHZlYzIoXFxuICAgICAgIGMgKiB0ZXgueCAtIHMgKiB0ZXgueSxcXG4gICAgICAgcyAqIHRleC54ICsgYyAqIHRleC55XFxuICAgKSAqIHNjYWxlO1xcbiAgIHJldHVybiAoc2luKHBvaW50LngpICogc2luKHBvaW50LnkpKSAqIDQuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhhdmVyYWdlICogMTAuMCAtIDUuMCArIHBhdHRlcm4oKSksIGNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNjYWxlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvdFNjcmVlbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRG90U2NyZWVuRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIHNjYWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHJhZGl1cyBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWVRpbnRGaWx0ZXIgYXBwbGllcyBhIHZlcnRpY2FsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWVRpbnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbitvZmZzZXQpLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IHN1bSA9IHZlYzQoMC4wKTtcXG5cXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLnJnYiAqIHN1bS5hICogYWxwaGEsIHN1bS5hICogYWxwaGEgKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSAvIDUxMiB9LFxuICAgICAgICAgICAgY29sb3I6IHsgdHlwZTogJ2MnLCB2YWx1ZTogWzAsMCwwXX0sXG4gICAgICAgICAgICBhbHBoYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC43IH0sXG4gICAgICAgICAgICBvZmZzZXQ6IHsgdHlwZTogJzJmJywgdmFsdWU6WzUsIDVdfSxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOjF9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllUaW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWVRpbnRGaWx0ZXI7XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIGNsZWFyKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWVRpbnRGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllUaW50RmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWVRpbnRGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgRHJvcFNoYWRvd0ZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEcm9wU2hhZG93RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIgPSBuZXcgQmx1cllUaW50RmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgdGhpcy5wYWRkaW5nID0gMzA7XG5cbiAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9hbmdsZSA9IDQ1ICogTWF0aC5QSSAvIDE4MDtcbiAgICB0aGlzLl9kaXN0YW5jZSA9IDEwO1xuICAgIHRoaXMuYWxwaGEgPSAwLjc1O1xuICAgIHRoaXMuaGlkZU9iamVjdCA9IGZhbHNlO1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5NVUxUSVBMWTtcbn1cblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRHJvcFNoYWRvd0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRHJvcFNoYWRvd0ZpbHRlcjtcblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIGlmKHRoaXMuX2RpcnR5UG9zaXRpb24pXG4gICAge1xuICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzBdID0gTWF0aC5zaW4odGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVsxXSA9IE1hdGguY29zKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUodGhpcy5ibGVuZE1vZGUpO1xuXG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIGlmKCF0aGlzLmhpZGVPYmplY3QpXG4gICAge1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG4gICAgfVxuXG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBjb2xvcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgY29yZS51dGlscy5yZ2IyaGV4KCB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgPSBjb3JlLnV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYWxwaGE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXN0YW5jZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGRpc3RhbmNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9hbmdsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fYW5nbGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBncmV5c2NhbGVzIHRoZSBwYWxldHRlIG9mIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBHcmF5RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JheTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIHZlYzMoMC4yMTI2KmdsX0ZyYWdDb2xvci5yICsgMC43MTUyKmdsX0ZyYWdDb2xvci5nICsgMC4wNzIyKmdsX0ZyYWdDb2xvci5iKSwgZ3JheSk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXk6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuR3JheUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkdyYXlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JheUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JheUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR3JheUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXkuIDEgd2lsbCBtYWtlIHRoZSBvYmplY3QgYmxhY2sgYW5kIHdoaXRlLCAwIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5HcmF5RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYXk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGZpbHRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmZpbHRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXNjaWlGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2FzY2lpL0FzY2lpRmlsdGVyJyksXG4gICAgQmxvb21GaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2Jsb29tL0Jsb29tRmlsdGVyJyksXG4gICAgQmx1ckZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckZpbHRlcicpLFxuICAgIEJsdXJYRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1cllGaWx0ZXInKSxcbiAgICBCbHVyRGlyRmlsdGVyOiAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRGlyRmlsdGVyJyksXG4gICAgQ29sb3JNYXRyaXhGaWx0ZXI6ICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yTWF0cml4RmlsdGVyJyksXG4gICAgQ29sb3JTdGVwRmlsdGVyOiAgICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yU3RlcEZpbHRlcicpLFxuICAgIENvbnZvbHV0aW9uRmlsdGVyOiAgcmVxdWlyZSgnLi9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlcicpLFxuICAgIENyb3NzSGF0Y2hGaWx0ZXI6ICAgcmVxdWlyZSgnLi9jcm9zc2hhdGNoL0Nyb3NzSGF0Y2hGaWx0ZXInKSxcbiAgICBEaXNwbGFjZW1lbnRGaWx0ZXI6IHJlcXVpcmUoJy4vZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlcicpLFxuICAgIERvdFNjcmVlbkZpbHRlcjogICAgcmVxdWlyZSgnLi9kb3QvRG90U2NyZWVuRmlsdGVyJyksXG4gICAgR3JheUZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2dyYXkvR3JheUZpbHRlcicpLFxuICAgIERyb3BTaGFkb3dGaWx0ZXI6ICAgcmVxdWlyZSgnLi9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXInKSxcbiAgICBJbnZlcnRGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vaW52ZXJ0L0ludmVydEZpbHRlcicpLFxuICAgIE5vaXNlRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ub2lzZS9Ob2lzZUZpbHRlcicpLFxuICAgIFBpeGVsYXRlRmlsdGVyOiAgICAgcmVxdWlyZSgnLi9waXhlbGF0ZS9QaXhlbGF0ZUZpbHRlcicpLFxuICAgIFJHQlNwbGl0RmlsdGVyOiAgICAgcmVxdWlyZSgnLi9yZ2IvUkdCU3BsaXRGaWx0ZXInKSxcbiAgICBTaG9ja3dhdmVGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vc2hvY2t3YXZlL1Nob2Nrd2F2ZUZpbHRlcicpLFxuICAgIFNlcGlhRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9zZXBpYS9TZXBpYUZpbHRlcicpLFxuICAgIFNtYXJ0Qmx1ckZpbHRlcjogICAgcmVxdWlyZSgnLi9ibHVyL1NtYXJ0Qmx1ckZpbHRlcicpLFxuICAgIFRpbHRTaGlmdEZpbHRlcjogICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyJyksXG4gICAgVHdpc3RGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3R3aXN0L1R3aXN0RmlsdGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGludmVydHMgeW91ciBEaXNwbGF5IE9iamVjdHMgY29sb3JzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBJbnZlcnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gZmxvYXQgaW52ZXJ0O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggKHZlYzMoMSktZ2xfRnJhZ0NvbG9yLnJnYikgKiBnbF9GcmFnQ29sb3IuYSwgZ2xfRnJhZ0NvbG9yLnJnYiwgMS4wIC0gaW52ZXJ0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBpbnZlcnQ6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludmVydEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gSW52ZXJ0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhJbnZlcnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBpbnZlcnQuIGAxYCB3aWxsIGZ1bGx5IGludmVydCB0aGUgY29sb3JzLCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkludmVydEZpbHRlciNcbiAgICAgKi9cbiAgICBpbnZlcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9hZGp1c3Qvbm9pc2UuanNcbiAqL1xuXG4vKipcbiAqIEEgTm9pc2UgZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gTm9pc2VGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgbm9pc2U7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgcmFuZCh2ZWMyIGNvKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoY28ueHksIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZmxvYXQgZGlmZiA9IChyYW5kKHZUZXh0dXJlQ29vcmQpIC0gMC41KSAqIG5vaXNlO1xcblxcbiAgICBjb2xvci5yICs9IGRpZmY7XFxuICAgIGNvbG9yLmcgKz0gZGlmZjtcXG4gICAgY29sb3IuYiArPSBkaWZmO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBub2lzZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbk5vaXNlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuTm9pc2VGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTm9pc2VGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE5vaXNlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2lzZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIG5vaXNlIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuTm9pc2VGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMC41XG4gICAgICovXG4gICAgbm9pc2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHBpeGVsYXRlIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciAnYmxvY2t5Jy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUGl4ZWxhdGVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZDtcXG5cXG4gICAgdmVjMiBzaXplID0gZGltZW5zaW9ucy54eSAvIHBpeGVsU2l6ZTtcXG5cXG4gICAgdmVjMiBjb2xvciA9IGZsb29yKCAoIHZUZXh0dXJlQ29vcmQgKiBzaXplICkgKSAvIHNpemUgKyBwaXhlbFNpemUvZGltZW5zaW9ucy54eSAqIDAuNTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb2xvcik7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgICB2YWx1ZTogeyB4OiAxMCwgeTogMTAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBpeGVsYXRlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBQaXhlbGF0ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBhIHBvaW50IHRoYXQgZGVzY3JpYmVzIHRoZSBzaXplIG9mIHRoZSBibG9ja3MuXG4gICAgICogeCBpcyB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGFuZCB5IGlzIHRoZSBoZWlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUGl4ZWxhdGVGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEFuIFJHQiBTcGxpdCBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFJHQlNwbGl0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcmVkO1xcbnVuaWZvcm0gdmVjMiBncmVlbjtcXG51bmlmb3JtIHZlYzIgYmx1ZTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yLnIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyByZWQvZGltZW5zaW9ucy54eSkucjtcXG4gICBnbF9GcmFnQ29sb3IuZyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGdyZWVuL2RpbWVuc2lvbnMueHkpLmc7XFxuICAgZ2xfRnJhZ0NvbG9yLmIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBibHVlL2RpbWVuc2lvbnMueHkpLmI7XFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgZ3JlZW46ICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAtMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGJsdWU6ICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IC0yMCB9IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUkdCU3BsaXRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFJHQlNwbGl0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSR0JTcGxpdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBSZWQgY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgcmVkOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yZWQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmVlbiBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmVlbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEJsdWUgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgYXBwbGllcyBhIHNlcGlhIGVmZmVjdCB0byB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2VwaWFGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc2VwaWE7XFxuXFxuY29uc3QgbWF0MyBzZXBpYU1hdHJpeCA9IG1hdDMoMC4zNTg4LCAwLjcwNDQsIDAuMTM2OCwgMC4yOTkwLCAwLjU4NzAsIDAuMTE0MCwgMC4yMzkyLCAwLjQ2OTYsIDAuMDkxMik7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZ2xfRnJhZ0NvbG9yLnJnYiAqIHNlcGlhTWF0cml4LCBzZXBpYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2VwaWE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2VwaWFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TZXBpYUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXBpYUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2VwaWFGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNlcGlhRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgc2VwaWEuIGAxYCB3aWxsIGFwcGx5IHRoZSBmdWxsIHNlcGlhIGVmZmVjdCwgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TZXBpYUZpbHRlciNcbiAgICAgKi9cbiAgICBzZXBpYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA0eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTaG9ja3dhdmVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XFxudW5pZm9ybSB2ZWMzIHBhcmFtczsgLy8gMTAuMCwgMC44LCAwLjFcXG51bmlmb3JtIGZsb2F0IHRpbWU7XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSB2VGV4dHVyZUNvb3JkO1xcbiAgICB2ZWMyIHRleENvb3JkID0gdXY7XFxuXFxuICAgIGZsb2F0IGRpc3QgPSBkaXN0YW5jZSh1diwgY2VudGVyKTtcXG5cXG4gICAgaWYgKCAoZGlzdCA8PSAodGltZSArIHBhcmFtcy56KSkgJiYgKGRpc3QgPj0gKHRpbWUgLSBwYXJhbXMueikpIClcXG4gICAge1xcbiAgICAgICAgZmxvYXQgZGlmZiA9IChkaXN0IC0gdGltZSk7XFxuICAgICAgICBmbG9hdCBwb3dEaWZmID0gMS4wIC0gcG93KGFicyhkaWZmKnBhcmFtcy54KSwgcGFyYW1zLnkpO1xcblxcbiAgICAgICAgZmxvYXQgZGlmZlRpbWUgPSBkaWZmICAqIHBvd0RpZmY7XFxuICAgICAgICB2ZWMyIGRpZmZVViA9IG5vcm1hbGl6ZSh1diAtIGNlbnRlcik7XFxuICAgICAgICB0ZXhDb29yZCA9IHV2ICsgKGRpZmZVViAqIGRpZmZUaW1lKTtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHRleENvb3JkKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBjZW50ZXI6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9LFxuICAgICAgICAgICAgcGFyYW1zOiB7IHR5cGU6ICd2MycsIHZhbHVlOiB7IHg6IDEwLCB5OiAwLjgsIHo6IDAuMSB9IH0sXG4gICAgICAgICAgICB0aW1lOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaG9ja3dhdmVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNob2Nrd2F2ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNlbnRlciBvZiB0aGUgc2hvY2t3YXZlIGluIG5vcm1hbGl6ZWQgc2NyZWVuIGNvb3Jkcy4gVGhhdCBpc1xuICAgICAqICgwLDApIGlzIHRoZSB0b3AtbGVmdCBhbmQgKDEsMSkgaXMgdGhlIGJvdHRvbSByaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgY2VudGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGFyYW1zIG9mIHRoZSBzaG9ja3dhdmUuIFRoZXNlIG1vZGlmeSB0aGUgbG9vayBhbmQgYmVoYXZpb3Igb2ZcbiAgICAgKiB0aGUgc2hvY2t3YXZlIGFzIGl0IHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIHNob2Nrd2F2ZS4gVGhpcyBjb250cm9scyB0aGUgc3BlZWQgYXQgd2hpY2hcbiAgICAgKiB0aGUgc2hvY2t3YXZlIHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHRpbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRBeGlzRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRBeGlzRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGJsdXI7XFxudW5pZm9ybSBmbG9hdCBncmFkaWVudEJsdXI7XFxudW5pZm9ybSB2ZWMyIHN0YXJ0O1xcbnVuaWZvcm0gdmVjMiBlbmQ7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcbnVuaWZvcm0gdmVjMiB0ZXhTaXplO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcbiAgICB2ZWMyIG5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMyKHN0YXJ0LnkgLSBlbmQueSwgZW5kLnggLSBzdGFydC54KSk7XFxuICAgIGZsb2F0IHJhZGl1cyA9IHNtb290aHN0ZXAoMC4wLCAxLjAsIGFicyhkb3QodlRleHR1cmVDb29yZCAqIHRleFNpemUgLSBzdGFydCwgbm9ybWFsKSkgLyBncmFkaWVudEJsdXIpICogYmx1cjtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgLyB0ZXhTaXplICogcGVyY2VudCAqIHJhZGl1cyk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6ICAgICAgICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxMDAgfSxcbiAgICAgICAgICAgIGdyYWRpZW50Qmx1cjogICB7IHR5cGU6ICcxZicsIHZhbHVlOiA2MDAgfSxcbiAgICAgICAgICAgIHN0YXJ0OiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAsICAgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZW5kOiAgICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogNjAwLCAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBkZWx0YTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAzMCwgICB5OiAzMCB9IH0sXG4gICAgICAgICAgICB0ZXhTaXplOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiB3aW5kb3cuaW5uZXJXaWR0aCwgeTogd2luZG93LmlubmVySGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbn1cblxuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICogVGhpcyBpcyBvdmVycmlkZGVuIGluIHRoZSBYIGFuZCBZIGZpbHRlcnMsIGRvZXMgbm90aGluZyBmb3IgdGhpcyBjbGFzcy5cbiAqXG4gKi9cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAwO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IDA7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WUZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnQgRmlsdGVyLiBNYW5hZ2VzIHRoZSBwYXNzIG9mIGJvdGggYSBUaWx0U2hpZnRYRmlsdGVyIGFuZCBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlciA9IG5ldyBUaWx0U2hpZnRYRmlsdGVyKCk7XG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyID0gbmV3IFRpbHRTaGlmdFlGaWx0ZXIoKTtcbn1cblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0RmlsdGVyO1xuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ncmFkaWVudEJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5zdGFydCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5lbmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRYRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gZHggLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR5IC8gZDtcbn07XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFlGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WUZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAtZHkgLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR4IC8gZDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgdHdpc3QgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHR3aXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVHdpc3RGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgLSBvZmZzZXQ7XFxuICAgZmxvYXQgZGlzdCA9IGxlbmd0aChjb29yZCk7XFxuXFxuICAgaWYgKGRpc3QgPCByYWRpdXMpXFxuICAge1xcbiAgICAgICBmbG9hdCByYXRpbyA9IChyYWRpdXMgLSBkaXN0KSAvIHJhZGl1cztcXG4gICAgICAgZmxvYXQgYW5nbGVNb2QgPSByYXRpbyAqIHJhdGlvICogYW5nbGU7XFxuICAgICAgIGZsb2F0IHMgPSBzaW4oYW5nbGVNb2QpO1xcbiAgICAgICBmbG9hdCBjID0gY29zKGFuZ2xlTW9kKTtcXG4gICAgICAgY29vcmQgPSB2ZWMyKGNvb3JkLnggKiBjIC0gY29vcmQueSAqIHMsIGNvb3JkLnggKiBzICsgY29vcmQueSAqIGMpO1xcbiAgIH1cXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkK29mZnNldCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBvZmZzZXQ6ICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuVHdpc3RGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ud2lzdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUd2lzdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVHdpc3RGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFR3aXN0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgZGVzY3JpYmVzIHRoZSB0aGUgb2Zmc2V0IG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcmFkaXVzIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIHJhZGl1czoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBhbmdsZSBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvLyBydW4gdGhlIHBvbHlmaWxsc1xucmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbi8vIGFkZCBjb3JlIHBsdWdpbnMuXG5jb3JlLmV4dHJhcyAgICAgICAgID0gcmVxdWlyZSgnLi9leHRyYXMnKTtcbmNvcmUuZmlsdGVycyAgICAgICAgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcbmNvcmUuaW50ZXJhY3Rpb24gICAgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9uJyk7XG5jb3JlLmxvYWRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9sb2FkZXJzJyk7XG5jb3JlLm1lc2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9tZXNoJyk7XG5jb3JlLmFjY2Vzc2liaWxpdHkgID0gcmVxdWlyZSgnLi9hY2Nlc3NpYmlsaXR5Jyk7XG5cbi8vIGV4cG9ydCBhIHByZW1hZGUgbG9hZGVyIGluc3RhbmNlXG4vKipcbiAqIEEgcHJlbWFkZSBpbnN0YW5jZSBvZiB0aGUgbG9hZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZGVyIHJlc291cmNlcy5cbiAqXG4gKiBAbmFtZSBsb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcHJvcGVydHkge1BJWEkubG9hZGVycy5Mb2FkZXJ9XG4gKi9cbmNvcmUubG9hZGVyID0gbmV3IGNvcmUubG9hZGVycy5Mb2FkZXIoKTtcblxuLy8gbWl4aW4gdGhlIGRlcHJlY2F0aW9uIGZlYXR1cmVzLlxuT2JqZWN0LmFzc2lnbihjb3JlLCByZXF1aXJlKCcuL2RlcHJlY2F0aW9uJykpO1xuXG4vLyBBbHdheXMgZXhwb3J0IHBpeGkgZ2xvYmFsbHkuXG5nbG9iYWwuUElYSSA9IGNvcmU7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBIb2xkcyBhbGwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhbiBJbnRlcmFjdGlvbiBldmVudFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25EYXRhKClcbntcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IHN0b3JlcyB0aGUgZ2xvYmFsIGNvb3JkcyBvZiB3aGVyZSB0aGUgdG91Y2gvbW91c2UgZXZlbnQgaGFwcGVuZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5nbG9iYWwgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBTcHJpdGUgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBhc3NlZCB0byBhbiBldmVudCBoYW5kbGVyLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbmFsIERPTSBFdmVudCB0aGF0IHdhcyBjYXB0dXJlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gbnVsbDtcbn1cblxuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25EYXRhO1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBzcGVjaWZpZWQgZGlzcGxheU9iamVjdCBmb3IgdGhpcyBJbnRlcmFjdGlvbkRhdGFcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSBsb2NhbCBjb29yZHMgb2ZmXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IHBvaW50KVxuICogQHBhcmFtIFtnbG9iYWxQb3NdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHlvdXIgY3VzdG9tIGdsb2JhbCBjb29yZHMsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCB1c2UgdGhlIGN1cnJlbnQgZ2xvYmFsIGNvb3JkcylcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEludGVyYWN0aW9uRGF0YSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgRGlzcGxheU9iamVjdFxuICovXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmdldExvY2FsUG9zaXRpb24gPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcG9pbnQsIGdsb2JhbFBvcylcbntcbiAgICByZXR1cm4gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UoZ2xvYmFsUG9zIHx8IHRoaXMuZ2xvYmFsLCBwb2ludCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgSW50ZXJhY3Rpb25EYXRhID0gcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKTtcblxuLy8gTWl4IGludGVyYWN0aXZlVGFyZ2V0IGludG8gY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZVxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxuKTtcblxuLyoqXG4gKiBUaGUgaW50ZXJhY3Rpb24gbWFuYWdlciBkZWFscyB3aXRoIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuIEFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBpbnRlcmFjdGl2ZVxuICogaWYgaXRzIGludGVyYWN0aXZlIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZVxuICogVGhpcyBtYW5hZ2VyIGFsc28gc3VwcG9ydHMgbXVsdGl0b3VjaC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdD10cnVlXSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBtYW5hZ2VyIGF1dG9tYXRpY2FsbHkgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeT0xMF0ge251bWJlcn0gRnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyLCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgaW50ZXJhY3Rpb24gbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGJlIHByZXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0ID0gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0IDogdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFzIHRoaXMgZnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZCBtb3JlIG9mdGVuLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSA9IG9wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW91c2UgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9XG4gICAgICovXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IGRhdGEgb2JqZWN0IHRvIGhhbmRsZSBhbGwgdGhlIGV2ZW50IHRyYWNraW5nL2Rpc3BhdGNoaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5ldmVudERhdGEgPSB7XG4gICAgICAgIHN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgIGRhdGE6IHRoaXMubW91c2UsXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGxpdHRsZSBpbnRlcmFjdGl2ZURhdGEgcG9vbCAhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YVtdfVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBlbGVtZW50IHRvIGJpbmQgdG8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhhdmUgZXZlbnRzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGRvbSBlbGVtZW50P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcblxuICAgIC8vdGhpcyB3aWxsIG1ha2UgaXQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGJpbmQgYWxsIHRoZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VVcCA9IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IHRoaXMucHJvY2Vzc01vdXNlVXAuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IHRoaXMucHJvY2Vzc01vdXNlRG93bi5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gdGhpcy5wcm9jZXNzTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU91dCA9IHRoaXMub25Nb3VzZU91dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gdGhpcy5vblRvdWNoU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gdGhpcy5wcm9jZXNzVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoRW5kID0gdGhpcy5vblRvdWNoRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSB0aGlzLnByb2Nlc3NUb3VjaEVuZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IHRoaXMub25Ub3VjaE1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSB0aGlzLnByb2Nlc3NUb3VjaE1vdmUuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxhc3QgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNzcyBzdHlsZSBvZiB0aGUgY3Vyc29yIHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9ICdpbmhlcml0JztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNhY2hlZCB2YXJcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcblxuICAgIHRoaXMuc2V0VGFyZ2V0RWxlbWVudCh0aGlzLnJlbmRlcmVyLnZpZXcsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbik7XG59XG5cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UvdG91Y2ggZXZlbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZVxuICogb3RoZXIgRE9NIGVsZW1lbnRzIG9uIHRvcCBvZiB0aGUgcmVuZGVyZXJzIENhbnZhcyBlbGVtZW50LiBXaXRoIHRoaXMgeW91J2xsIGJlIGJhbGUgdG8gZGVsZXRlZ2F0ZVxuICogYW5vdGhlciBET00gZWxlbWVudCB0byByZWNlaXZlIHRob3NlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9IHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUSGUgcmVzb2x1dGlvbiBvZiB0aGUgbmV3IGVsZW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBjYW52YXMpLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXRUYXJnZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJlc29sdXRpb24pXG57XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgdGhlIERPTSBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAgICB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgICB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICAgICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICAgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgICAgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgICAgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgdGhlIERPTSBldmVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICcnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzLlxuICogSW52b2tlZCBieSBhIHRocm90dGxlZCB0aWNrZXIgdXBkYXRlIGZyb21cbiAqIHtAbGluayBQSVhJLnRpY2tlci5zaGFyZWR9LlxuICpcbiAqIEBwYXJhbSBkZWx0YVRpbWUge251bWJlcn1cbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHRoaXMuX2RlbHRhVGltZSArPSBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZGVsdGFUaW1lIDwgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWx0YVRpbWUgPSAwO1xuXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBtb3ZlIHRoZSBtb3VzZSB0aGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gZGZvbmUgdXNpbmcgdGhlIG1vdXNlIG1vdmUhXG4gICAgaWYodGhpcy5kaWRNb3ZlKVxuICAgIHtcbiAgICAgICAgdGhpcy5kaWRNb3ZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ET1xufTtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgZGlzcGxheSBvYmplY3QgaW4gcXVlc3Rpb25cbiAqIEBwYXJhbSBldmVudFN0cmluZyB7c3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGUuZywgbW91c2Vkb3duKVxuICogQHBhcmFtIGV2ZW50RGF0YSB7b2JqZWN0fSB0aGUgZXZlbnQgZGF0YSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApXG57XG4gICAgaWYoIWV2ZW50RGF0YS5zdG9wcGVkKVxuICAgIHtcbiAgICAgICAgZXZlbnREYXRhLnRhcmdldCA9IGRpc3BsYXlPYmplY3Q7XG4gICAgICAgIGV2ZW50RGF0YS50eXBlID0gZXZlbnRTdHJpbmc7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5lbWl0KCBldmVudFN0cmluZywgZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10oIGV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXBzIHggYW5kIHkgY29vcmRzIGZyb20gYSBET00gb2JqZWN0IGFuZCBtYXBzIHRoZW0gY29ycmVjdGx5IHRvIHRoZSBwaXhpIHZpZXcuIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBwb2ludC5cbiAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgdGhlIERPTSBlbGVtZW50IGNvdWxkIGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCBhbnl3aGVyZSBvbiB0aGUgc2NyZWVuLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW5cbiAqIEBwYXJhbSAge251bWJlcn0geCAgICAgdGhlIHggY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICogQHBhcmFtICB7bnVtYmVyfSB5ICAgICB0aGUgeSBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUubWFwUG9zaXRpb25Ub1BvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgeCwgeSApXG57XG4gICAgdmFyIHJlY3QgPSB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBwb2ludC54ID0gKCAoIHggLSByZWN0LmxlZnQgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC53aWR0aCAgLyByZWN0LndpZHRoICApICkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgcG9pbnQueSA9ICggKCB5IC0gcmVjdC50b3AgICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuaGVpZ2h0IC8gcmVjdC5oZWlnaHQgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVzIGEgbmVhdCB3YXkgb2YgY3Jhd2xpbmcgdGhyb3VnaCB0aGUgc2NlbmUgZ3JhcGggYW5kIHJ1bm5pbmcgYSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gYWxsIGludGVyYWN0aXZlIG9iamVjdHMgaXQgZmluZHMuXG4gKiBJdCB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIGhpdCB0ZXN0aW5nIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlIGhpdCBhY3Jvc3MgaW4gdGhlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IGlzIHRlc3RlZCBmb3IgY29sbGlzaW9uXG4gKiBAcGFyYW0gIHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IGRpc3BsYXlPYmplY3QgdGhlIGRpc3BsYXlPYmplY3QgdGhhdCB3aWxsIGJlIGhpdCB0ZXN0IChyZWN1cmNzaXZseSBjcmF3bHMgaXRzIGNoaWxkcmVuKVxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBpbnRlcmFjdGl2ZSBvYmplY3QuIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBoaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtib29sZWFufSBoaXRUZXN0IHRoaXMgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3RzIGluc2lkZSBzaG91bGQgYmUgaGl0IHRlc3QgYWdhaW5zdCB0aGUgcG9pbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiB0aGUgZGlzcGxheU9iamVjdCBoaXQgdGhlIHBvaW50XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0ludGVyYWN0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBkaXNwbGF5T2JqZWN0LCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZSlcbntcbiAgICBpZighZGlzcGxheU9iamVjdCB8fCAhZGlzcGxheU9iamVjdC52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRvb2sgYSBsaXR0bGUgd2hpbGUgdG8gcmV3b3JrIHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5ISBCdXQgbm93IGl0IGlzIGRvbmUgYW5kIG5pY2UgYW5kIG9wdGltaXNlZC4gXl9eXG4gICAgLy8gXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdyBsb29wIHRocm91Z2ggYWxsIG9iamVjdHMgYW5kIHRoZW4gb25seSBoaXQgdGVzdCB0aGUgb2JqZWN0cyBpdCBIQVMgdG8sIG5vdCBhbGwgb2YgdGhlbS4gTVVDSCBmYXN0ZXIuLlxuICAgIC8vIEFuIG9iamVjdCB3aWxsIGJlIGhpdCB0ZXN0IGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICAvLyBcbiAgICAvLyAxOiBJdCBpcyBpbnRlcmFjdGl2ZS5cbiAgICAvLyAyOiBJdCBiZWxvbmdzIHRvIGEgcGFyZW50IHRoYXQgaXMgaW50ZXJhY3RpdmUgQU5EIG9uZSBvZiB0aGUgcGFyZW50cyBjaGlsZHJlbiBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIC8vIFxuICAgIC8vIEFzIGFub3RoZXIgbGl0dGxlIG9wdGltaXNhdGlvbiBvbmNlIGFuIGludGVyYWN0aXZlIG9iamVjdCBoYXMgYmVlbiBoaXQgd2UgY2FuIGNhcnJ5IG9uIHRocm91Z2ggdGhlIHNjZW5lZ3JhcGgsIGJ1dCB3ZSBrbm93IHRoYXQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGhpdHMhIFNvIHdlIGNhbiBhdm9pZCBleHRyYSBoaXQgdGVzdHNcbiAgICAvLyBBIGZpbmFsIG9wdGltaXNhdGlvbiBpcyB0aGF0IGFuIG9iamVjdCBpcyBub3QgaGl0IHRlc3QgZGlyZWN0bHkgaWYgYSBjaGlsZCBoYXMgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICBcbiAgICB2YXIgaGl0ID0gZmFsc2UsXG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gaW50ZXJhY3RpdmUgPSBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlIHx8IGludGVyYWN0aXZlO1xuXG4gICAgLy8gaWYgdGhlIGRpc3BsYXlvYmplY3QgaGFzIGEgaGl0QXJlYSwgdGhlbiBpdCBkb2VzIG5vdCBuZWVkIHRvIGhpdFRlc3QgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAqKiBGUkVFIFRJUCAqKiEgSWYgYW4gb2JqZWN0IGlzIG5vdCBpbnRlcmFjdHRpdmUgb3IgaGFzIG5vIGJ1dHRvbnMgaW4gaXQgKHN1Y2ggYXMgYSBnYW1lIHNjZW5lISkgc2V0IGludGVyYWN0aXZlQ2hpbGRyZW4gdG8gZmFsc2UgZm9yIHRoYXQgZGlzcGxheU9iamVjdC5cbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgcGl4aSB0byBjb21wbGV0bHkgaWdub3JlIGFuZCBieXBhc3MgY2hlY2tpbmcgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmVDaGlsZHJlbilcbiAgICB7ICAgICAgIFxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aC0xOyBpID49IDA7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGltZSB0byBnZXQgcmVjdXJzaXZlLi4gaWYgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpZiBzb210aGluZyBpcyBoaXQuLlxuICAgICAgICAgICAgaWYoIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHBvaW50LCBjaGlsZHJlbltpXSwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmVQYXJlbnQpIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55IG1vcmUgb2JqZWN0cyBpbiB0aGlzIGNvbnRhaW5lciBhcyB3ZSB3ZSBub3cga25vdyB0aGUgcGFyZW50IGhhcyBiZWVuIGhpdFxuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGludGVyYWN0aXZlICwgdGhhdCBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGl0IHdhcyBhY3R1YWxseSBpbnRlcmFjdGl2ZSBhbmQgbm90IGp1c3QgdGhlIGNoaWxkIG9mIGFuIGludGVyYWN0aXZlIG9iamVjdC4gXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnl0aGluZyBlbHNlLiBXZSBzdGlsbCBuZWVkIHRvIHJ1biB0aHJvdWdoIGFsbCBvYmplY3RzLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBoaXQgdGVzdHMuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uaW50ZXJhY3RpdmUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoaXRUZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm8gcG9pbnQgcnVubmluZyB0aGlzIGlmIHRoZSBpdGVtIGlzIG5vdCBpbnRlcmFjdGl2ZSBvciBkb2VzIG5vdCBoYXZlIGFuIGludGVyYWN0aXZlIHBhcmVudC5cbiAgICBpZihpbnRlcmFjdGl2ZSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBoaXQgdGVzdGluZyAoYXMgaW4gd2UgaGF2ZSBubyBoaXQgYW55IG9iamVjdHMgeWV0KVxuICAgICAgICAvLyBXZSBhbHNvIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGl0IHRlc3RpbmcgaWYgb25jZSBvZiB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4gaGFzIGFscmVhZHkgYmVlbiBoaXQhXG4gICAgICAgIGlmKGhpdFRlc3QgJiYgIWhpdClcbiAgICAgICAgeyAgXG4gICAgICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0aGlzLl90ZW1wUG9pbnQpO1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuaGl0QXJlYS5jb250YWlucyggdGhpcy5fdGVtcFBvaW50LngsIHRoaXMuX3RlbXBQb2ludC55ICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnVuYyhkaXNwbGF5T2JqZWN0LCBoaXQpOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIFxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyBwcmVzc2VkIGRvd25cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZURvd24sIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIGRvd24gY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VEb3duID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuICAgIFxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3RbIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bicgXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGRvd24nIDogJ21vdXNlZG93bicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcmVsZWFzZWRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VVcCwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgdXAgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlVXAgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG4gICAgdmFyIGlzRG93biA9ICBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXAnIDogJ21vdXNldXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRjbGljaycgOiAnY2xpY2snLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cG91dHNpZGUnIDogJ21vdXNldXBvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiB0aGUgbW91c2UgbW92aW5nXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmRpZE1vdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU1vdmUsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE8gQlVHIGZvciBwYXJlbnRzIGluZXJhY3RpdmUgb2JqZWN0IChib3JkZXIgb3JkZXIgaXNzdWUpXG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2Vtb3ZlJywgdGhpcy5ldmVudERhdGEpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dChkaXNwbGF5T2JqZWN0LCBoaXQpO1xufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYmVpbmcgbW92ZWQgb3V0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICAvLyBUT0RPIG9wdGltaXplIGJ5IG5vdCBjaGVjayBFVkVSWSBUSU1FISBtYXliZSBoYWxmIGFzIG9mdGVuPyAvL1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgZmFsc2UgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG92ZXIvb3V0IGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgaWYoIWRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5T2JqZWN0LmJ1dHRvbk1vZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gZGlzcGxheU9iamVjdC5kZWZhdWx0Q3Vyc29yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgdGhpcy5ldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgc3RhcnRlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBzdGFydGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG4gICAgICAgIC8vVE9ETyBQT09MXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaFN0YXJ0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoc3RhcnQnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGVuZHMgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggZW5kaW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIC8vVE9ETyB0aGlzIHNob3VsZCBiZSBwYXNzZWQgYWxvbmcuLiBubyBzZXRcbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hFbmQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgZW5kIG9mIGEgdG91Y2ggYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoRW5kID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0YXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgbW92ZWQgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIG1vdmluZyBhY3Jvc3MgdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaE1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaGl0ID0gaGl0O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNobW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogR3JhYnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaEV2ZW50IHtFdmVudERhdGF9IFRoZSB0b3VjaCBldmVudCB3ZSBuZWVkIHRvIHBhaXIgd2l0aCBhbiBpbnRlcmFjdGlvbkRhdGEgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRUb3VjaERhdGEgPSBmdW5jdGlvbiAodG91Y2hFdmVudClcbntcbiAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnBvcCgpO1xuXG4gICAgaWYoIXRvdWNoRGF0YSlcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcbiAgICB9XG5cbiAgICB0b3VjaERhdGEuaWRlbnRpZmllciA9IHRvdWNoRXZlbnQuaWRlbnRpZmllcjtcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdG91Y2hEYXRhLmdsb2JhbCwgdG91Y2hFdmVudC5jbGllbnRYLCB0b3VjaEV2ZW50LmNsaWVudFkgKTtcblxuICAgIGlmKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC54ID0gdG91Y2hEYXRhLmdsb2JhbC54IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnkgPSB0b3VjaERhdGEuZ2xvYmFsLnkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgfVxuXG4gICAgdG91Y2hFdmVudC5nbG9iYWxYID0gdG91Y2hEYXRhLmdsb2JhbC54O1xuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWSA9IHRvdWNoRGF0YS5nbG9iYWwueTtcblxuICAgIHJldHVybiB0b3VjaERhdGE7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hEYXRhIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX0gVGhlIHRvdWNoIGRhdGEgb2JqZWN0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5Ub3VjaERhdGEgPSBmdW5jdGlvbiAoIHRvdWNoRGF0YSApXG57XG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnB1c2goIHRvdWNoRGF0YSApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgaW50ZXJhY3Rpb24gbWFuYWdlclxuICpcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMubW91c2UgPSBudWxsO1xuXG4gICAgdGhpcy5ldmVudERhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZVVwID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gbnVsbDtcblxuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaEVuZCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMuX3RlbXBQb2ludCA9IG51bGw7XG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGludGVyYWN0aW9ucyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSW50ZXJhY3Rpb25EYXRhOiAgICByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpLFxuICAgIEludGVyYWN0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9JbnRlcmFjdGlvbk1hbmFnZXInKSxcbiAgICBpbnRlcmFjdGl2ZVRhcmdldDogIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxufTtcbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgaW50ZXJhY3RpdmUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmludGVyYWN0aW9uLmludGVyYWN0aXZlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBpbnRlcmFjdGl2ZVRhcmdldCA9IHtcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGJ1dHRvbk1vZGU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmVDaGlsZHJlbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGRlZmF1bHRDdXJzb3I6ICdwb2ludGVyJyxcblxuICAgIC8vIHNvbWUgaW50ZXJuYWwgY2hlY2tzLi5cblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb3ZlcjogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90b3VjaERvd246IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyYWN0aXZlVGFyZ2V0O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuLi9leHRyYXMnKSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5cbmZ1bmN0aW9uIHBhcnNlKHJlc291cmNlLCB0ZXh0dXJlKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgaW5mbyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXTtcbiAgICB2YXIgY29tbW9uID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XG5cbiAgICBkYXRhLmZvbnQgPSBpbmZvLmdldEF0dHJpYnV0ZSgnZmFjZScpO1xuICAgIGRhdGEuc2l6ZSA9IHBhcnNlSW50KGluZm8uZ2V0QXR0cmlidXRlKCdzaXplJyksIDEwKTtcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBwYXJzZUludChjb21tb24uZ2V0QXR0cmlidXRlKCdsaW5lSGVpZ2h0JyksIDEwKTtcbiAgICBkYXRhLmNoYXJzID0ge307XG5cbiAgICAvL3BhcnNlIGxldHRlcnNcbiAgICB2YXIgbGV0dGVycyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NoYXInKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdpZCcpLCAxMCk7XG5cbiAgICAgICAgdmFyIHRleHR1cmVSZWN0ID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3gnKSwgMTApICsgdGV4dHVyZS5mcmFtZS54LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3knKSwgMTApICsgdGV4dHVyZS5mcmFtZS55LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSwgMTApXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICB4T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneG9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB5T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneW9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB4QWR2YW5jZTogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hhZHZhbmNlJyksIDEwKSxcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9LFxuICAgICAgICAgICAgdGV4dHVyZTogbmV3IGNvcmUuVGV4dHVyZSh0ZXh0dXJlLmJhc2VUZXh0dXJlLCB0ZXh0dXJlUmVjdClcblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vcGFyc2Uga2VybmluZ3NcbiAgICB2YXIga2VybmluZ3MgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXJuaW5nJyk7XG4gICAgZm9yIChpID0gMDsgaSA8IGtlcm5pbmdzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdmaXJzdCcpLCAxMCk7XG4gICAgICAgIHZhciBzZWNvbmQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ3NlY29uZCcpLCAxMCk7XG4gICAgICAgIHZhciBhbW91bnQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2Ftb3VudCcpLCAxMCk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tzZWNvbmRdLmtlcm5pbmdbZmlyc3RdID0gYW1vdW50O1xuICAgIH1cblxuICAgIHJlc291cmNlLmJpdG1hcEZvbnQgPSBkYXRhO1xuXG4gICAgLy8gSSdtIGxlYXZpbmcgdGhpcyBhcyBhIHRlbXBvcmFyeSBmaXggc28gd2UgY2FuIHRlc3QgdGhlIGJpdG1hcCBmb250cyBpbiB2M1xuICAgIC8vIGJ1dCBpdCdzIHZlcnkgbGlrZWx5IHRvIGNoYW5nZVxuICAgIGV4dHJhcy5CaXRtYXBUZXh0LmZvbnRzW2RhdGEuZm9udF0gPSBkYXRhO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhIG9yIG5vdCB4bWwgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzWG1sKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBpZiBub3QgYml0bWFwIGZvbnQgZGF0YSwgdXNpbmcgc29tZSBzaWxseSBkdWNrLXR5cGluZ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF0uZ2V0QXR0cmlidXRlKCdmYWNlJykgPT09IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4bWxVcmwgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsKTtcblxuICAgICAgICBpZiAoeG1sVXJsID09PSAnLicpIHtcbiAgICAgICAgICAgIHhtbFVybCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmFzZVVybCAmJiB4bWxVcmwpIHtcbiAgICAgICAgICAgIC8vIGlmIGJhc2V1cmwgaGFzIGEgdHJhaWxpbmcgc2xhc2ggdGhlbiBhZGQgb25lIHRvIHhtbFVybCBzbyB0aGUgcmVwbGFjZSB3b3JrcyBiZWxvd1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVVybC5jaGFyQXQodGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEpID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYmFzZVVybCBmcm9tIHhtbFVybFxuICAgICAgICAgICAgeG1sVXJsID0geG1sVXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiB4bWxVcmwgbm93LCBpdCBuZWVkcyBhIHRyYWlsaW5nIHNsYXNoLiBFbnN1cmUgdGhhdCBpdCBkb2VzIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZW1wdHkuXG4gICAgICAgIGlmICh4bWxVcmwgJiYgeG1sVXJsLmNoYXJBdCh4bWxVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4dHVyZVVybCA9IHhtbFVybCArIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKVswXS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKTtcbiAgICAgICAgaWYgKGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKSB7XG4gICAgICAgICAgICAvL3JldXNlIGV4aXN0aW5nIHRleHR1cmVcbiAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBsb2FkIHRoZSB0ZXh0dXJlIGZvciB0aGUgZm9udFxuICAgICAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCB0ZXh0dXJlVXJsLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCByZXMudGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGxvYWRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmxvYWRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTG9hZGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlcicpLFxuXG4gICAgLy8gcGFyc2Vyc1xuICAgIGJpdG1hcEZvbnRQYXJzZXI6ICAgcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXI6ICByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgdGV4dHVyZVBhcnNlcjogICAgICByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBSZXNvdXJjZTogICAgICAgICAgIHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlXG59O1xuIiwidmFyIFJlc291cmNlTG9hZGVyID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJyksXG4gICAgdGV4dHVyZVBhcnNlciA9IHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyID0gcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIGJpdG1hcEZvbnRQYXJzZXIgPSByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKTtcblxuLyoqXG4gKlxuICogVGhlIG5ldyBsb2FkZXIsIGV4dGVuZHMgUmVzb3VyY2UgTG9hZGVyIGJ5IENoYWQgRW5nbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2VuZ2xlcmNqL3Jlc291cmNlLWxvYWRlclxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbG9hZGVyID0gUElYSS5sb2FkZXI7IC8vIHBpeGkgZXhwb3NlcyBhIHByZW1hZGUgaW5zdGFuY2UgZm9yIHlvdSB0byB1c2UuXG4gKiAvL29yXG4gKiB2YXIgbG9hZGVyID0gbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIoKTsgLy8geW91IGNhbiBhbHNvIGNyZWF0ZSB5b3VyIG93biBpZiB5b3Ugd2FudFxuICpcbiAqIGxvYWRlci5hZGQoJ2J1bm55JyxcImRhdGEvYnVubnkucG5nXCIpO1xuICpcbiAqIGxvYWRlci5vbmNlKCdjb21wbGV0ZScsb25Bc3NldHNMb2FkZWQpO1xuICpcbiAqIGxvYWRlci5sb2FkKCk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuUmVzb3VyY2VMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmxvYWRlcnNcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpXG57XG4gICAgUmVzb3VyY2VMb2FkZXIuY2FsbCh0aGlzLCBiYXNlVXJsLCBjb25jdXJyZW5jeSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IExvYWRlci5fcGl4aU1pZGRsZXdhcmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy51c2UoTG9hZGVyLl9waXhpTWlkZGxld2FyZVtpXSgpKTtcbiAgICB9XG59XG5cbkxvYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuTG9hZGVyLl9waXhpTWlkZGxld2FyZSA9IFtcbiAgICAvLyBwYXJzZSBhbnkgYmxvYiBpbnRvIG1vcmUgdXNhYmxlIG9iamVjdHMgKGUuZy4gSW1hZ2UpXG4gICAgUmVzb3VyY2VMb2FkZXIubWlkZGxld2FyZS5wYXJzaW5nLmJsb2IsXG4gICAgLy8gcGFyc2UgYW55IEltYWdlIG9iamVjdHMgaW50byB0ZXh0dXJlc1xuICAgIHRleHR1cmVQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIHNwcml0ZXNoZWV0UGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBiaXRtYXBGb250UGFyc2VyXG5dO1xuXG5Mb2FkZXIuYWRkUGl4aU1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLnB1c2goZm4pO1xufTtcblxuLy8gQWRkIGN1c3RvbSBleHRlbnRpb25zXG52YXIgUmVzb3VyY2UgPSBSZXNvdXJjZUxvYWRlci5SZXNvdXJjZTtcblxuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSgnZm50JywgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpO1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSwgaXRzIG5vdCBqc29uLCBvciBpdCBpc24ndCBzcHJpdGVzaGVldCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNKc29uIHx8ICFyZXNvdXJjZS5kYXRhLmZyYW1lcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByb3V0ZSA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKSk7XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybCggcmVzb3VyY2UudXJsICk7XG5cbiAgICAgICAgLy8gbG9hZCB0aGUgaW1hZ2UgZm9yIHRoaXMgc2hlZXRcbiAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCByb3V0ZSArICcvJyArIHJlc291cmNlLmRhdGEubWV0YS5pbWFnZSwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzID0ge307XG5cbiAgICAgICAgICAgIHZhciBmcmFtZXMgPSByZXNvdXJjZS5kYXRhLmZyYW1lcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmcmFtZXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBmcmFtZXNbaV0uZnJhbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVjdClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaW0gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC5oLCByZWN0LncpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC53LCByZWN0LmgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS50cmltbWVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmltID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnggLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnkgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLncgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLmggLyByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsaXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQhXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBzaXplLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUueSAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoIC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0IC89IHJlc29sdXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXNbaV0gPSBuZXcgY29yZS5UZXh0dXJlKHJlcy50ZXh0dXJlLmJhc2VUZXh0dXJlLCBzaXplLCBzaXplLmNsb25lKCksIHRyaW0sIGZyYW1lc1tpXS5yb3RhdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbaV0gPSByZXNvdXJjZS50ZXh0dXJlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZSBpZiB0aGUgZGF0YSBpcyBhbiBJbWFnZSBvYmplY3RcbiAgICAgICAgaWYgKHJlc291cmNlLmRhdGEgJiYgcmVzb3VyY2UuaXNJbWFnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGJhc2VUZXh0dXJlID0gbmV3IGNvcmUuQmFzZVRleHR1cmUocmVzb3VyY2UuZGF0YSwgbnVsbCwgY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwocmVzb3VyY2UudXJsKSk7XG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IHJlc291cmNlLnVybDtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmUgPSBuZXcgY29yZS5UZXh0dXJlKGJhc2VUZXh0dXJlKTtcbiAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1Y250aW9uc1xuICAgICAgICAgICAgY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSBiYXNlVGV4dHVyZTtcbiAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSByZXNvdXJjZS50ZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICB0ZW1wUG9seWdvbiA9IG5ldyBjb3JlLlBvbHlnb24oKTtcblxuLyoqXG4gKiBCYXNlIG1lc2ggY2xhc3NcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRvIHVzZVxuICogQHBhcmFtIFt2ZXJ0aWNlc10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdmVydGljZXNcbiAqIEBwYXJhbSBbdXZzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB1dnNcbiAqIEBwYXJhbSBbaW5kaWNlc10ge1VpbnQxNkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBpbmRpY2VzXG4gKiBAcGFyYW0gW2RyYXdNb2RlXSB7bnVtYmVyfSB0aGUgZHJhd01vZGUsIGNhbiBiZSBhbnkgb2YgdGhlIE1lc2guRFJBV19NT0RFUyBjb25zdHNcbiAqL1xuZnVuY3Rpb24gTWVzaCh0ZXh0dXJlLCB2ZXJ0aWNlcywgdXZzLCBpbmRpY2VzLCBkcmF3TW9kZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gdXZzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEsIDAsXG4gICAgICAgIDEsIDEsXG4gICAgICAgIDAsIDFdKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEwMCwgMCxcbiAgICAgICAgMTAwLCAxMDAsXG4gICAgICAgIDAsIDEwMF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICAvLyAgVE9ETyBhdXRvIGdlbmVyYXRlIHRoaXMgYmFzZWQgb24gZHJhdyBtb2RlIVxuICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXMgfHwgbmV3IFVpbnQxNkFycmF5KFswLCAxLCAzLCAyXSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBNZXNoIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gU2V0IHRvIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVtb3ZlIGFueSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRyaWFuZ2xlcyBpbiBjYW52YXMgbW9kZSBhcmUgYXV0b21hdGljYWxseSBhbnRpYWxpYXNlZCwgdXNlIHRoaXMgdmFsdWUgdG8gZm9yY2UgdHJpYW5nbGVzIHRvIG92ZXJsYXAgYSBiaXQgd2l0aCBlYWNoIG90aGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2F5IHRoZSBNZXNoIHNob3VsZCBiZSBkcmF3biwgY2FuIGJlIGFueSBvZiB0aGUge0BsaW5rIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVN9IGNvbnN0c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuZHJhd01vZGUgPSBkcmF3TW9kZSB8fCBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSDtcblxuICAgIC8vIHJ1biB0ZXh0dXJlIHNldHRlcjtcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBtZXNoIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5NZXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2g7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2g7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc2gucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkubWVzaC5NZXNoI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5tZXNoKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLm1lc2gucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4IHwgMCwgdHJhbnNmb3JtLnR5IHwgMCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHgsIHRyYW5zZm9ybS50eSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoKGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMoY29udGV4dCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIFRyaWFuZ2xlIE1lc2ggbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2ggPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoIC8gMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkgKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgsIChpbmRleCArIDIpLCAoaW5kZXggKyA0KSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIHRyaWFuZ2xlIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDMpXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXgwID0gaW5kaWNlc1tpXSAqIDIsIGluZGV4MSA9IGluZGljZXNbaSArIDFdICogMiwgaW5kZXgyID0gaW5kaWNlc1tpICsgMl0gKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4Mik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyBvbmUgb2YgdGhlIHRyaWFuZ2xlcyB0aGF0IGZvcm0gdGhpcyBNZXNoXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdmVydGljZXMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHZlcnRpY2VzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gdXZzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB1dnMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSBpbmRleDAge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDEge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgyIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlID0gZnVuY3Rpb24gKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpXG57XG4gICAgdmFyIHRleHR1cmVTb3VyY2UgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZTtcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aDtcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXgwXSwgeDEgPSB2ZXJ0aWNlc1tpbmRleDFdLCB4MiA9IHZlcnRpY2VzW2luZGV4Ml07XG4gICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgwICsgMV0sIHkxID0gdmVydGljZXNbaW5kZXgxICsgMV0sIHkyID0gdmVydGljZXNbaW5kZXgyICsgMV07XG5cbiAgICB2YXIgdTAgPSB1dnNbaW5kZXgwXSAqIHRleHR1cmVXaWR0aCwgdTEgPSB1dnNbaW5kZXgxXSAqIHRleHR1cmVXaWR0aCwgdTIgPSB1dnNbaW5kZXgyXSAqIHRleHR1cmVXaWR0aDtcbiAgICB2YXIgdjAgPSB1dnNbaW5kZXgwICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MSA9IHV2c1tpbmRleDEgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYyID0gdXZzW2luZGV4MiArIDFdICogdGV4dHVyZUhlaWdodDtcblxuICAgIGlmICh0aGlzLmNhbnZhc1BhZGRpbmcgPiAwKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmdYID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgcGFkZGluZ1kgPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciBjZW50ZXJYID0gKHgwICsgeDEgKyB4MikgLyAzO1xuICAgICAgICB2YXIgY2VudGVyWSA9ICh5MCArIHkxICsgeTIpIC8gMztcblxuICAgICAgICB2YXIgbm9ybVggPSB4MCAtIGNlbnRlclg7XG4gICAgICAgIHZhciBub3JtWSA9IHkwIC0gY2VudGVyWTtcblxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgwID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkwID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgLy9cblxuICAgICAgICBub3JtWCA9IHgxIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MSAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgxID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkxID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgbm9ybVggPSB4MiAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTIgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MiA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MiA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cblxuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGNvbnRleHQuY2xpcCgpO1xuXG4gICAgLy8gQ29tcHV0ZSBtYXRyaXggdHJhbnNmb3JtXG4gICAgdmFyIGRlbHRhID0gICh1MCAqIHYxKSAgICAgICsgKHYwICogdTIpICAgICAgKyAodTEgKiB2MikgICAgICAtICh2MSAqIHUyKSAgICAgIC0gKHYwICogdTEpICAgICAgLSAodTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQSA9ICh4MCAqIHYxKSAgICAgICsgKHYwICogeDIpICAgICAgKyAoeDEgKiB2MikgICAgICAtICh2MSAqIHgyKSAgICAgIC0gKHYwICogeDEpICAgICAgLSAoeDAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQiA9ICh1MCAqIHgxKSAgICAgICsgKHgwICogdTIpICAgICAgKyAodTEgKiB4MikgICAgICAtICh4MSAqIHUyKSAgICAgIC0gKHgwICogdTEpICAgICAgLSAodTAgKiB4Mik7XG4gICAgdmFyIGRlbHRhQyA9ICh1MCAqIHYxICogeDIpICsgKHYwICogeDEgKiB1MikgKyAoeDAgKiB1MSAqIHYyKSAtICh4MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB4MikgLSAodTAgKiB4MSAqIHYyKTtcbiAgICB2YXIgZGVsdGFEID0gKHkwICogdjEpICAgICAgKyAodjAgKiB5MikgICAgICArICh5MSAqIHYyKSAgICAgIC0gKHYxICogeTIpICAgICAgLSAodjAgKiB5MSkgICAgICAtICh5MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFFID0gKHUwICogeTEpICAgICAgKyAoeTAgKiB1MikgICAgICArICh1MSAqIHkyKSAgICAgIC0gKHkxICogdTIpICAgICAgLSAoeTAgKiB1MSkgICAgICAtICh1MCAqIHkyKTtcbiAgICB2YXIgZGVsdGFGID0gKHUwICogdjEgKiB5MikgKyAodjAgKiB5MSAqIHUyKSArICh5MCAqIHUxICogdjIpIC0gKHkwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHkyKSAtICh1MCAqIHkxICogdjIpO1xuXG4gICAgY29udGV4dC50cmFuc2Zvcm0oZGVsdGFBIC8gZGVsdGEsIGRlbHRhRCAvIGRlbHRhLFxuICAgICAgICBkZWx0YUIgLyBkZWx0YSwgZGVsdGFFIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQyAvIGRlbHRhLCBkZWx0YUYgLyBkZWx0YSk7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlU291cmNlLCAwLCAwKTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBmbGF0IE1lc2hcbiAqXG4gKiBAcGFyYW0gTWVzaCB7UElYSS5tZXNoLk1lc2h9IFRoZSBNZXNoIHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUucmVuZGVyTWVzaEZsYXQgPSBmdW5jdGlvbiAoTWVzaClcbntcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICB2YXIgdmVydGljZXMgPSBNZXNoLnZlcnRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aC8yO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgZm9yICh2YXIgaT0xOyBpIDwgbGVuZ3RoLTI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkqMjtcblxuICAgICAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleF0sICAgeDEgPSB2ZXJ0aWNlc1tpbmRleCsyXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleCs0XTtcbiAgICAgICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgrMV0sIHkxID0gdmVydGljZXNbaW5kZXgrM10sIHkyID0gdmVydGljZXNbaW5kZXgrNV07XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVwZGF0ZUZyYW1lID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBtZXNoIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5NZXNoLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICghdGhpcy5fY3VycmVudEJvdW5kcykge1xuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1pblkgPSBJbmZpbml0eTtcblxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IG47IGkgKz0gMikge1xuICAgICAgICAgICAgdmFyIHJhd1ggPSB2ZXJ0aWNlc1tpXSwgcmF3WSA9IHZlcnRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciB4ID0gKGEgKiByYXdYKSArIChjICogcmF3WSkgKyB0eDtcbiAgICAgICAgICAgIHZhciB5ID0gKGQgKiByYXdZKSArIChiICogcmF3WCkgKyB0eTtcblxuICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcblxuICAgICAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG4gICAgICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5YID09PSAtSW5maW5pdHkgfHwgbWF4WSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIG1lc2guIFdvcmtzIG9ubHkgZm9yIFRSSUFOR0xFX01FU0hcbiAqXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4gKi9cbk1lc2gucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKSB7XG4gICAgaWYgKCF0aGlzLmdldEJvdW5kcygpLmNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgcG9pbnRzID0gdGVtcFBvbHlnb24ucG9pbnRzO1xuICAgIHZhciBpLCBsZW47XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUykge1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICAgICAgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgLy9UT0RPOiBpbmxpbmUgdGhpcy5cbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Mykge1xuICAgICAgICAgICAgdmFyIGluZDAgPSBpbmRpY2VzW2ldKjIsIGluZDEgPSBpbmRpY2VzW2krMV0qMiwgaW5kMiA9IGluZGljZXNbaSsyXSoyO1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaW5kMF07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpbmQwKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaW5kMV07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpbmQxKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaW5kMl07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpbmQyKzFdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Nikge1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaSsyXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2krM107XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpKzRdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaSs1XTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEaWZmZXJlbnQgZHJhd2luZyBidWZmZXIgbW9kZXMgc3VwcG9ydGVkXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSFxuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gKi9cbk1lc2guRFJBV19NT0RFUyA9IHtcbiAgICBUUklBTkdMRV9NRVNIOiAwLFxuICAgIFRSSUFOR0xFUzogMVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG5cbi8qKlxuICogVGhlIFBsYW5lIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIFBsYW5lID0gbmV3IFBJWEkuUGxhbmUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgUGxhbmUuXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNYIC0gVGhlIG51bWJlciBveCB4IHNlZ21lbnRzXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNZIC0gVGhlIG51bWJlciBvZiB5IHNlZ21lbnRzXG4gKlxuICovXG5mdW5jdGlvbiBQbGFuZSh0ZXh0dXJlLCBzZWdtZW50c1gsIHNlZ21lbnRzWSlcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgUGxhbmUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWdtZW50c1ggPSAgc2VnbWVudHNYIHx8IDEwO1xuICAgIHRoaXMuc2VnbWVudHNZID0gc2VnbWVudHNZIHx8IDEwO1xuXG4gICAgdGhpcy5kcmF3TW9kZSA9IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVM7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUGxhbmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKTtcblBsYW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsYW5lO1xubW9kdWxlLmV4cG9ydHMgPSBQbGFuZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblBsYW5lLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciB0b3RhbCA9IHRoaXMuc2VnbWVudHNYICogdGhpcy5zZWdtZW50c1k7XG4gICAgdmFyIHZlcnRzID0gW107XG4gICAgdmFyIGNvbG9ycyA9IFtdO1xuICAgIHZhciB1dnMgPSBbXTtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuXG4gIC8vICB0ZXh0dXJlLndpZHRoID0gODAwIHRleHR1cmUud2lkdGggfHwgODAwO1xuIC8vICAgdGV4dHVyZS5oZWlnaHQgPSA4MDAvL3RleHR1cmUuaGVpZ2h0IHx8IDgwMDtcblxuICAgIHZhciBzZWdtZW50c1hTdWIgPSB0aGlzLnNlZ21lbnRzWCAtIDE7XG4gICAgdmFyIHNlZ21lbnRzWVN1YiA9IHRoaXMuc2VnbWVudHNZIC0gMTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB2YXIgc2l6ZVggPSB0ZXh0dXJlLndpZHRoIC8gc2VnbWVudHNYU3ViO1xuICAgIHZhciBzaXplWSA9IHRleHR1cmUuaGVpZ2h0IC8gc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcblxuICAgICAgICB2YXIgeCA9IChpICUgdGhpcy5zZWdtZW50c1gpO1xuICAgICAgICB2YXIgeSA9ICggKGkgLyB0aGlzLnNlZ21lbnRzWCApIHwgMCApO1xuXG5cbiAgICAgICAgdmVydHMucHVzaCgoeCAqIHNpemVYKSxcbiAgICAgICAgICAgICAgICAgICAoeSAqIHNpemVZKSk7XG5cbiAgICAgICAgLy8gdGhpcyB3b3JrcyBmb3IgcmVjdGFuZ3VsYXIgdGV4dHVyZXMuIFxuICAgICAgICB1dnMucHVzaCh0ZXh0dXJlLl91dnMueDAgKyAodGV4dHVyZS5fdXZzLngxIC0gdGV4dHVyZS5fdXZzLngwKSAqICh4IC8gKHRoaXMuc2VnbWVudHNYLTEpKSwgdGV4dHVyZS5fdXZzLnkwICsgKHRleHR1cmUuX3V2cy55My10ZXh0dXJlLl91dnMueTApICogKHkvICh0aGlzLnNlZ21lbnRzWS0xKSkpO1xuICAgICAgfVxuXG4gICAgLy8gIGNvbnNcblxuICAgIHZhciB0b3RhbFN1YiA9IHNlZ21lbnRzWFN1YiAqIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFN1YjsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHhwb3MgPSBpICUgc2VnbWVudHNYU3ViO1xuICAgICAgICB2YXIgeXBvcyA9IChpIC8gc2VnbWVudHNYU3ViICkgfCAwO1xuXG5cbiAgICAgICAgdmFyICB2YWx1ZSA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTIgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuICAgICAgICB2YXIgIHZhbHVlMyA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWU0ID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMyk7XG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZTIsIHZhbHVlNCwgdmFsdWUzKTtcbiAgICB9XG5cblxuICAgIC8vY29uc29sZS5sb2coaW5kaWNlcylcbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0cyk7XG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHV2cyk7XG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvbG9ycyk7XG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBsYW5lLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUGxhbmUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSByb3BlIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIHJvcGUgPSBuZXcgUElYSS5Sb3BlKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIHJvcGUuXG4gKiBAcGFyYW0ge1BJWEkuUG9pbnRbXX0gcG9pbnRzIC0gQW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuUG9pbnR9IG9iamVjdHMgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAqXG4gKi9cbmZ1bmN0aW9uIFJvcGUodGV4dHVyZSwgcG9pbnRzKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfSBBbiBhcnJheSBvZiBwb2ludHMgdGhhdCBkZXRlcm1pbmUgdGhlIHJvcGVcbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBvZiB2ZXJ0aWNlcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IFRoZSBXZWJHTCBVdnMgb2YgdGhlIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBjb21wb25lbnRzXG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSByb3BlIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICAgdGhpcy5yZWZyZXNoKCk7XG59XG5cblxuLy8gY29uc3RydWN0b3JcblJvcGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNZXNoLnByb3RvdHlwZSk7XG5Sb3BlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvcGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvcGU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5Sb3BlLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICAvLyBpZiB0b28gbGl0dGxlIHBvaW50cywgb3IgdGV4dHVyZSBoYXNuJ3QgZ290IFVWcyBzZXQgeWV0IGp1c3QgbW92ZSBvbi5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEgfHwgIXRoaXMuX3RleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cbiAgICB2YXIgdGV4dHVyZVV2cyA9IHRoaXMuX3RleHR1cmUuX3V2cztcbiAgICB2YXIgb2Zmc2V0ID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MCk7XG4gICAgdmFyIGZhY3RvciA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDIgLSB0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkyIC0gdGV4dHVyZVV2cy55MCk7XG5cbiAgICB1dnNbMF0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzFdID0gMCArIG9mZnNldC55O1xuICAgIHV2c1syXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgIGNvbG9yc1swXSA9IDE7XG4gICAgY29sb3JzWzFdID0gMTtcblxuICAgIGluZGljZXNbMF0gPSAwO1xuICAgIGluZGljZXNbMV0gPSAxO1xuXG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCBhbW91bnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcbiAgICAgICAgLy8gdGltZSB0byBkbyBzb21lIHNtYXJ0IGRyYXdpbmchXG4gICAgICAgIGFtb3VudCA9IGkgLyAodG90YWwtMSk7XG5cbiAgICAgICAgdXZzW2luZGV4XSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCsxXSA9IDAgKyBvZmZzZXQueTtcblxuICAgICAgICB1dnNbaW5kZXgrMl0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBjb2xvcnNbaW5kZXhdID0gMTtcbiAgICAgICAgY29sb3JzW2luZGV4KzFdID0gMTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGluZGV4O1xuICAgICAgICBpbmRpY2VzW2luZGV4ICsgMV0gPSBpbmRleCArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFJvcGUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9pbnQgPSBwb2ludHNbMF07XG4gICAgdmFyIG5leHRQb2ludDtcbiAgICB2YXIgcGVycFggPSAwO1xuICAgIHZhciBwZXJwWSA9IDA7XG5cbiAgICAvLyB0aGlzLmNvdW50IC09IDAuMjtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCByYXRpbywgcGVycExlbmd0aCwgbnVtO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG5cbiAgICAgICAgaWYgKGkgPCBwb2ludHMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50c1tpKzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwWSA9IC0obmV4dFBvaW50LnggLSBsYXN0UG9pbnQueCk7XG4gICAgICAgIHBlcnBYID0gbmV4dFBvaW50LnkgLSBsYXN0UG9pbnQueTtcblxuICAgICAgICByYXRpbyA9ICgxIC0gKGkgLyAodG90YWwtMSkpKSAqIDEwO1xuXG4gICAgICAgIGlmIChyYXRpbyA+IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhdGlvID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBMZW5ndGggPSBNYXRoLnNxcnQocGVycFggKiBwZXJwWCArIHBlcnBZICogcGVycFkpO1xuICAgICAgICBudW0gPSB0aGlzLl90ZXh0dXJlLmhlaWdodCAvIDI7IC8vKDIwICsgTWF0aC5hYnMoTWF0aC5zaW4oKGkgKyB0aGlzLmNvdW50KSAqIDAuMykgKiA1MCkgKSogcmF0aW87XG4gICAgICAgIHBlcnBYIC89IHBlcnBMZW5ndGg7XG4gICAgICAgIHBlcnBZIC89IHBlcnBMZW5ndGg7XG5cbiAgICAgICAgcGVycFggKj0gbnVtO1xuICAgICAgICBwZXJwWSAqPSBudW07XG5cbiAgICAgICAgdmVydGljZXNbaW5kZXhdID0gcG9pbnQueCArIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsxXSA9IHBvaW50LnkgKyBwZXJwWTtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMl0gPSBwb2ludC54IC0gcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzNdID0gcG9pbnQueSAtIHBlcnBZO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IHBvaW50O1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5tZXNoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1lc2g6ICAgICAgICAgICByZXF1aXJlKCcuL01lc2gnKSxcbiAgICBQbGFuZTogICAgICAgICAgIHJlcXVpcmUoJy4vUGxhbmUnKSxcbiAgICBSb3BlOiAgICAgICAgICAgcmVxdWlyZSgnLi9Sb3BlJyksXG4gICAgTWVzaFJlbmRlcmVyOiAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFJlbmRlcmVyJyksXG4gICAgTWVzaFNoYWRlcjogICAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFNoYWRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgTWVzaCA9IHJlcXVpcmUoJy4uL01lc2gnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBNZXNoUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL01lc2hSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDE1MDAwKTtcblxuICAgIC8vVE9ETyB0aGlzIGNvdWxkIGJlIGEgc2luZ2xlIGJ1ZmZlciBzaGFyZWQgYW1vbmdzdCBhbGwgcmVuZGVyZXJzIGFzIHdlIHJldXNlIHRoaXMgc2V0IHVwIGluIG1vc3QgcmVuZGVyZXJzXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCAxNTAwMDsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59XG5cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hSZW5kZXJlcjtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoJywgTWVzaFJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIGlmKCFtZXNoLl92ZXJ0ZXhCdWZmZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9pbml0V2ViR0wobWVzaCk7XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcixcbiAgICAgICAgZ2wgPSByZW5kZXJlci5nbCxcbiAgICAgICAgdGV4dHVyZSA9IG1lc2guX3RleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIHNoYWRlciA9IG1lc2guc2hhZGVyOy8vIHx8IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuXG4gICAgdmFyIGRyYXdNb2RlID0gbWVzaC5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0ggPyBnbC5UUklBTkdMRV9TVFJJUCA6IGdsLlRSSUFOR0xFUztcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKG1lc2guYmxlbmRNb2RlKTtcblxuICAgIC8vVE9ETyBjYWNoZSBjdXN0b20gc3RhdGUuLlxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHNoYWRlci5zaGFkZXJzW2dsLmlkXSB8fCBzaGFkZXIuZ2V0U2hhZGVyKHJlbmRlcmVyKTsvLyA6IHNoYWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXgudmFsdWUgPSBtZXNoLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXgudmFsdWUgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSBtZXNoLndvcmxkQWxwaGE7XG5cbiAgICBzaGFkZXIuc3luY1VuaWZvcm1zKCk7XG5cbiAgICBpZiAoIW1lc2guZGlydHkpXG4gICAge1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgbWVzaC52ZXJ0aWNlcyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG1lc2guaW5kaWNlcyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgbWVzaC5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb250IG5lZWQgdG8gdXBsb2FkIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgfVxuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGRyYXdNb2RlLCBtZXNoLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG5cbn07XG5cbi8qKlxuICogUHJlcGFyZXMgYWxsIHRoZSBidWZmZXJzIHRvIHJlbmRlciB0aGlzIG1lc2hcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuX2luaXRXZWJHTCA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIC8vIGJ1aWxkIHRoZSBzdHJpcCFcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgbWVzaC5fdmVydGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5faW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl91dkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG5cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICBpZihtZXNoLmNvbG9ycyl7XG4gICAgICAgIG1lc2guX2NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl9jb2xvckJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLmNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbn07XG5cblxuLyoqXG4gKiBFbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IG1lc2ggcmVuZGVyZXIuXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBcblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBNZXNoIHJlbmRlcmVyXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgV2ViR0wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgY29yZS5TaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogYWxwaGEgOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVZlcnRleFBvc2l0aW9uOjAsXG4gICAgICAgICAgICBhVGV4dHVyZUNvb3JkOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cbk1lc2hTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNoYWRlci5wcm90b3R5cGUpO1xuTWVzaFNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoU2hhZGVyO1xuXG5jb3JlLlNoYWRlck1hbmFnZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2hTaGFkZXInLCBNZXNoU2hhZGVyKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3NpZ25cblxuaWYgKCFNYXRoLnNpZ24pXG57XG4gICAgTWF0aC5zaWduID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCA9ICt4O1xuICAgICAgICBpZiAoeCA9PT0gMCB8fCBpc05hTih4KSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPiAwID8gMSA6IC0xO1xuICAgIH07XG59XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9vYmplY3QtYXNzaWduXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5cbmlmICghT2JqZWN0LmFzc2lnbilcbntcbiAgICBPYmplY3QuYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xufVxuIiwicmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL3JlcXVlc3RBbmltYXRpb25GcmFtZScpO1xucmVxdWlyZSgnLi9NYXRoLnNpZ24nKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTU3OTY3MVxuLy8gaHR0cDovL3VwZGF0ZXMuaHRtbDVyb2Nrcy5jb20vMjAxMi8wNS9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUtQVBJLW5vdy13aXRoLXN1Yi1taWxsaXNlY29uZC1wcmVjaXNpb25cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RpbWhhbGwvNDA3ODYxNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0ZpbmFuY2lhbC1UaW1lcy9wb2x5ZmlsbC1zZXJ2aWNlL3RyZWUvbWFzdGVyL3BvbHlmaWxscy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcblxuLy8gRXhwZWN0ZWQgdG8gYmUgdXNlZCB3aXRoIEJyb3dzZXJmaXlcbi8vIEJyb3dzZXJpZnkgYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZSB1c2Ugb2YgYGdsb2JhbGAgYW5kIHBhc3NlcyB0aGVcbi8vIGNvcnJlY3QgcmVmZXJlbmNlIG9mIGBnbG9iYWxgLCBgc2VsZmAsIGFuZCBmaW5hbGx5IGB3aW5kb3dgXG5cbi8vIERhdGUubm93XG5pZiAoIShEYXRlLm5vdyAmJiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lKSkge1xuICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcbn1cblxuLy8gcGVyZm9ybWFuY2Uubm93XG5pZiAoIShnbG9iYWwucGVyZm9ybWFuY2UgJiYgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdykpIHtcbiAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIWdsb2JhbC5wZXJmb3JtYW5jZSkge1xuICAgICAgICBnbG9iYWwucGVyZm9ybWFuY2UgPSB7fTtcbiAgICB9XG4gICAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgfTtcbn1cblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xudmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xuXG5mb3IodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8XG4gICAgICAgIGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xufVxuXG5pZiAoIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCksXG4gICAgICAgICAgICBkZWxheSA9IDE2ICsgbGFzdFRpbWUgLSBjdXJyZW50VGltZTtcblxuICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgIH07XG59XG5cbmlmICghZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xufVxuIl19 //# sourceMappingURL=pixi.js.map diff --git a/bin/pixi.js.map b/bin/pixi.js.map index 1d72f43..3256814 100644 --- a/bin/pixi.js.map +++ b/bin/pixi.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi.js","sourceRoot":"./","sourcesContent":[]} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi.js","sourceRoot":"./","sourcesContent":[]} \ No newline at end of file diff --git a/bin/pixi.min.js b/bin/pixi.min.js index db31e4a..ee1b45b 100644 --- a/bin/pixi.min.js +++ b/bin/pixi.min.js @@ -1,11 +1,11 @@ !function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&this.texture.uploadData(null,t,e),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=i.fromData(t,null,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a.unbind(),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a.unbind(),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t||null)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){return this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate(),this},i.prototype.unbind=function(){return this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null),this},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=X(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function P(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function D(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},X=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},Y="function"==typeof setImmediate&&setImmediate,z=Y?function(t){Y(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=Y?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=X(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return P(t,1,e)},N.log=D("log"),N.dir=D("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return P.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return D.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",P=/^xn--/,D=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r); g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v,p=""),d=decodeURIComponent(c),f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,P=M.length;P>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var D=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(D.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=D.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var X=i.indexOf("#");-1!==X&&(this.hash=i.substr(X),i=i.slice(0,X));var Y=i.indexOf("?");if(-1!==Y?(this.search=i.substr(Y),this.query=i.substr(Y+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,Y)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","gl-matrix":"git+https://github.com/toji/gl-matrix.git","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirtyTransform=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":56,"../textures/RenderTexture":100,"../utils":107,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.transform=new a,this.position=this.transform.position,this.scale=this.transform.scale,this.pivot=this.transform.pivot,this.skew=this.transform.skew,this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),t("./Transform")),h=new n.Matrix,u={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i;var l=function(t){this.doc=t,this.x=0,this.y=0};Object.defineProperties(l.prototype,{x:{get:function(){return this.doc.position.x},set:function(t){this.doc.position.x=t,this.doc.dirtyTransform=!0}},y:{get:function(){return this.doc.posiiton.y},set:function(t){this.doc.position.y=t,this.doc.dirtyTransform=!0}}}),Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return h.tx=-i.x,h.ty=-i.y,n.render(this,h),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":56,"../textures/RenderTexture":100,"./Transform":41,eventemitter3:25}],41:[function(t,e,r){function i(){this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.position=new n.Point(0),this.scale=new n.Point(1,1),this.pivot=new n.Point(0),this.skew=new n.Point(0),this.rotation=0,this.dirty=!0}var n=t("../math");i.prototype.constructor=i,i.prototype.updateTransform=function(t){var e=t.worldTransform,r=this.worldTransform,i=this.localTransform;return i.a=this._cr*this.scale.x,i.b=this._sr*this.scale.x,i.c=-this._sr*this.scale.y,i.d=this._cr*this.scale.y,i.tx=this.position.x-(this.pivot.x*i.a+this.pivot.y*i.c),i.ty=this.position.y-(this.pivot.x*i.b+this.pivot.y*i.d),r.a=i.a*e.a+i.b*e.c,r.b=i.a*e.b+i.b*e.d,r.c=i.c*e.a+i.d*e.c,r.d=i.c*e.b+i.d*e.d,r.tx=i.tx*e.a+i.ty*e.c+e.tx,r.ty=i.tx*e.b+i.ty*e.d+e.ty,this.dirty=!1,!0},e.exports=i},{"../math":56}],42:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils":107,"./WebGLGraphicsData":45,"./shaders/PrimitiveShader":46,"./utils/buildCircle":47,"./utils/buildComplexPoly":48,"./utils/buildLine":49,"./utils/buildPoly":50,"./utils/buildRectangle":51,"./utils/buildRoundedRectangle":52,earcut:24}],45:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],46:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],47:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":107,"./buildLine":49}],48:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":107,"./buildLine":49}],49:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":56,"../../../utils":107}],50:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":107}],51:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":107,"./buildLine":49}],52:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":107,"./buildLine":49}],53:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),BaseRenderTexture:t("./textures/BaseRenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":42,"./graphics/GraphicsData":43,"./graphics/webgl/GraphicsRenderer":44,"./math":56,"./particles/ParticleContainer":62,"./particles/webgl/ParticleRenderer":64,"./renderers/canvas/CanvasRenderer":67,"./renderers/canvas/utils/CanvasBuffer":68,"./renderers/canvas/utils/CanvasGraphics":69,"./renderers/webgl/WebGLRenderer":73,"./renderers/webgl/filters/AbstractFilter":74,"./renderers/webgl/filters/FXAAFilter":75,"./renderers/webgl/filters/SpriteMaskFilter":76,"./renderers/webgl/managers/ShaderManager":80,"./renderers/webgl/managers/WebGLManager":82,"./renderers/webgl/shaders/Shader":85,"./renderers/webgl/utils/ObjectRenderer":88,"./renderers/webgl/utils/RenderTarget":90,"./sprites/Sprite":94,"./sprites/webgl/SpriteRenderer":95,"./text/Text":97,"./textures/BaseRenderTexture":98,"./textures/BaseTexture":99,"./textures/RenderTexture":100,"./textures/Texture":101,"./textures/TextureUvs":102,"./textures/VideoBaseTexture":103,"./ticker":105,"./utils":107,"pixi-gl-core":1}],54:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":55}],55:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],56:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":54,"./Point":55,"./shapes/Circle":57,"./shapes/Ellipse":58,"./shapes/Polygon":59,"./shapes/Rectangle":60,"./shapes/RoundedRectangle":61}],57:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":60}],58:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":60}],59:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":55}],60:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],62:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"./ParticleBuffer":63,"./ParticleShader":65}],65:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{ -uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":86}],66:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,transform:{worldTransform:new o.Matrix},worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":56,"../utils":107,eventemitter3:25}],67:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":56,"../../utils":107,"../SystemRenderer":66,"./utils/CanvasMaskManager":70}],68:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],69:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],70:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":69}],71:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":86}],75:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\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\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\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)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":74}],76:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":56,"./AbstractFilter":74}],77:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":82}],78:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":107}],86:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":85}],87:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],88:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":82}],89:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],90:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=(t("pixi-gl-core").GLTexture,t("pixi-gl-core").GLFramebuffer),s=t("./StencilMaskStack"),a=function(t,e,r,a,h,u){this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=h||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.defaultFrame=new PIXI.Rectangle,this.destinationFrame=null,this.sourceFrame=null,this.stencilBuffer=null,this.stencilMaskStack=new s,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=a||n.SCALE_MODES.DEFAULT,this.root=u,this.frameBuffer=o.createRGBA(t,100,100),this.root?this.frameBuffer.framebuffer=null:this.texture=this.frameBuffer.texture,this.resize(e,r)};a.prototype.constructor=a,e.exports=a,a.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},a.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},a.prototype.activate=function(t,e){var r=this.gl;this.frameBuffer.bind(),this.destinationFrame=t||this.destinationFrame||this.defaultFrame,this.sourceFrame=e||this.sourceFrame||t,this.calculateProjection(this.destinationFrame,this.sourceFrame),this.transform&&this.projectionMatrix.append(this.transform),this.destinationFrame!==this.sourceFrame?(r.enable(r.SCISSOR_TEST),r.scissor(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)):r.disable(r.SCISSOR_TEST),r.viewport(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)},a.prototype.calculateProjection=function(t,e){var r=this.projectionMatrix;e=e||t,r.identity(),this.root?(r.a=1/t.width*2,r.d=-1/t.height*2,r.tx=-1-e.x*r.a,r.ty=1-e.y*r.d):(r.a=1/t.width*2,r.d=1/t.height*2,r.tx=-1-e.x*r.a,r.ty=-1-e.y*r.d)},a.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.defaultFrame.width=t,this.defaultFrame.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},a.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":56,"../../../utils":107,"./StencilMaskStack":91,"pixi-gl-core":1}],91:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],92:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],93:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],94:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.transform.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0); -}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],97:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=t,this.height=e,this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(t){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear(!1,t))},i.prototype.renderWebGL=function(t,e,r,i,n){if(this.valid){if(n=void 0!==n?n:!0,this.textureBuffer.transform=r,this.textureBuffer.activate(),e.worldAlpha=1,n){e.worldTransform.identity(),e.currentBounds=null;var o,s,a=e.children;for(o=0,s=a.length;s>o;++o)a[o].updateTransform()}p.width=t.height,p.height=t.width;var h=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.textureBuffer.activate(t,p),console.log(e),this.renderer.renderDisplayObject(e,this.textureBuffer,i),this.renderer.filterManager=h}},i.prototype.renderCanvas=function(t,e,r,i,n){if(this.valid){n=!!n;var o=c;o.identity(),r&&o.append(r),o.tx+=t.x,o.ty+=t.y;var s=e.worldTransform;e.worldTransform=o,e.worldAlpha=1;var a,h,u=e.children;for(a=0,h=u.length;h>a;++a)u[a].updateTransform();i&&this.textureBuffer.clear();var l=this.textureBuffer.context,p=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(e,l),this.renderer.resolution=p,e.worldTransform===o&&(e.worldTransform=s)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(t){var e=new Image;return e.src=this.getBase64(t),e},i.prototype.getBase64=function(t){return this.getCanvas(t).toDataURL()},i.prototype.getCanvas=function(t){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution,i=this.renderer.gl,n=new Uint8Array(4*e*r);i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null);var o=new h(e,r),s=o.context.getImageData(0,0,e,r);return s.data.set(n),o.context.putImageData(s,0,0),o.canvas}if(t||(t=p,t.width=this.textureBuffer.canvas.width,t.height=this.textureBuffer.canvas.height),t.width===this.textureBuffer.canvas.width&&t.height===this.textureBuffer.canvas.height)return this.textureBuffer.canvas;var a=this.resolution,o=new h(t.width*a,t.height*a),s=this.textureBuffer.context.getImageData(t.x*a,t.y*a,t.width*a,t.height*a);return o.context.putImageData(s,0,0),o.canvas},i.prototype.getPixels=function(t){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var i=this.renderer.gl,n=new Uint8Array(4*e*r);return i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null),n}return this.textureBuffer.canvas.getContext("2d").getImageData(t.x*this.resolution,t.y*this.resolution,e,r).data},i.prototype.getPixel=function(t,e,r){return p.x=e,p.y=r,p.width=1/this.resolution,p.height=1/this.resolution,t&&(p.x+=t.x,p.y+=t.y),this.getPixels(p)}},{"../const":38,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/webgl/managers/FilterManager":78,"../renderers/webgl/utils/RenderTarget":90,"./BaseTexture":99,"./Texture":101}],99:[function(t,e,r){function i(t,e,r){s.call(this),this.uid=n.uid(),this.resolution=r||1,this.width=100,this.height=100,this.realWidth=100,this.realHeight=100,this.scaleMode=e||o.SCALE_MODES.DEFAULT,this.hasLoaded=!1,this.isLoading=!1,this.source=null,this.premultipliedAlpha=!0,this.imageUrl=null,this.isPowerOfTwo=!1,this.mipmap=!1,this._glTextures={},this._active=!1,this._id=0,t&&this.loadSource(t)}var n=t("../utils"),o=t("../const"),s=t("eventemitter3");i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.update=function(){this.realWidth=this.source.naturalWidth||this.source.width,this.realHeight=this.source.naturalHeight||this.source.height,this.width=this.realWidth/this.resolution,this.height=this.realHeight/this.resolution,this.isPowerOfTwo=n.isPowerOfTwo(this.realWidth,this.realHeight),this.emit("update",this)},i.prototype.loadSource=function(t){var e=this.isLoading;if(this.hasLoaded=!1,this.isLoading=!1,e&&this.source&&(this.source.onload=null,this.source.onerror=null),this.source=t,(this.source.complete||this.source.getContext)&&this.source.width&&this.source.height)this._sourceLoaded();else if(!t.getContext){this.isLoading=!0;var r=this;t.onload=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r._sourceLoaded(),r.emit("loaded",r))},t.onerror=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r.emit("error",r))},t.complete&&t.src&&(this.isLoading=!1,t.onload=null,t.onerror=null,t.width&&t.height?(this._sourceLoaded(),e&&this.emit("loaded",this)):e&&this.emit("error",this))}},i.prototype._sourceLoaded=function(){this.hasLoaded=!0,this.update()},i.prototype.destroy=function(){this.imageUrl?(delete n.BaseTextureCache[this.imageUrl],delete n.TextureCache[this.imageUrl],this.imageUrl=null,navigator.isCocoonJS||(this.source.src="")):this.source&&this.source._pixiId&&delete n.BaseTextureCache[this.source._pixiId],this.source=null,this.dispose()},i.prototype.dispose=function(){this.emit("dispose",this)},i.prototype.updateSourceImage=function(t){this.source.src=t,this.loadSource(this.source)},i.fromImage=function(t,e,r){var o=n.BaseTextureCache[t];if(void 0===e&&0!==t.indexOf("data:")&&(e=!0),!o){var s=new Image;e&&(s.crossOrigin=""),o=new i(s,r),o.imageUrl=t,s.src=t,n.BaseTextureCache[t]=o,o.resolution=n.getResolutionOfUrl(t)}return o},i.fromCanvas=function(t,e){t._pixiId||(t._pixiId="canvas_"+n.uid());var r=n.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),n.BaseTextureCache[t._pixiId]=r),r}},{"../const":38,"../utils":107,eventemitter3:25}],100:[function(t,e,r){function i(t,e){if(!renderer)throw new Error("Unable to create RenderTexture, you must pass a renderer into the constructor.");o.call(this,t,e),this.valid=!0,this._updateUvs()}var n=t("./BaseRenderTexture"),o=t("./Texture"),s=t("../math");t("../const"),new s.Matrix;i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.resize=function(t,e,r){this.valid=t>0&&e>0,this._frame.width=this.crop.width=t,this._frame.height=this.crop.height=e,r&&this.baseTexture.resize(t,e),this._updateUvs()},i.prototype.clear=function(){this.valid&&this.baseTexture.clear(this.frame)},i.prototype.render=function(t,e,r,i){this.valid&&this.baseTexture.render(this.frame,t,e,r,i)},i.prototype.getImage=function(){return this.baseTexture.getImage(this.frame)},i.prototype.getBase64=function(){return this.getBase64.getImage(this.frame)},i.prototype.getCanvas=function(){return this.baseTexture.getCanvas(this.frame)},i.prototype.getPixels=function(){return this.baseTexture.getPixels(this.frame)},i.prototype.getPixel=function(t,e){return this.baseTexture.getPixel(this.frame,t,e)},i.create=function(t,e,r,o,s){return new i(new n(t,e,r,o,s))}},{"../const":38,"../math":56,"./BaseRenderTexture":98,"./Texture":101}],101:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":56,"../utils":107,"./BaseTexture":99,"./TextureUvs":102,"./VideoBaseTexture":103,eventemitter3:25}],102:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],103:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],105:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":104}],106:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],107:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":108,async:16,eventemitter3:25}],108:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],109:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":53, -"./extras":116,"./filters":133,"./mesh":158}],110:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":53}],118:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":53,"../blur/BlurXFilter":121,"../blur/BlurYFilter":122}],119:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){ -t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":53}],125:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":53}],126:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":53}],127:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":53}],128:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":53}],129:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":53}],130:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":53}],140:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":53}],141:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":53,"./TiltShiftXFilter":142,"./TiltShiftYFilter":143}],142:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":140}],143:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":140}],144:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":53}],145:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":53,"./deprecation":109,"./extras":116,"./filters":133,"./interaction":148,"./loaders":151,"./mesh":158,"./polyfill":163}],146:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":53}],147:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){ -var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":53,"./InteractionData":146,"./interactiveTarget":149}],148:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":146,"./InteractionManager":147,"./interactiveTarget":149}],149:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],150:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":53}],156:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":155}],157:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":53,"./Mesh":155}],158:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":155,"./Plane":156,"./Rope":157,"./webgl/MeshRenderer":159,"./webgl/MeshShader":160}],159:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":53,"../Mesh":155}],160:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":53}],161:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],162:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],163:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":161,"./Object.assign":162,"./requestAnimationFrame":164}],164:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[145])(145)}); +i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.complete=function(){this.data&&this.data.removeEventListener&&(this.data.removeEventListener("error",this._boundOnError),this.data.removeEventListener("load",this._boundComplete),this.data.removeEventListener("progress",this._boundOnProgress),this.data.removeEventListener("canplaythrough",this._boundComplete)),this.xhr&&(this.xhr.removeEventListener?(this.xhr.removeEventListener("error",this._boundXhrOnError),this.xhr.removeEventListener("abort",this._boundXhrOnAbort),this.xhr.removeEventListener("progress",this._boundOnProgress),this.xhr.removeEventListener("load",this._boundXhrOnLoad)):(this.xhr.onerror=null,this.xhr.ontimeout=null,this.xhr.onprogress=null,this.xhr.onload=null)),this.emit("complete",this)},i.prototype.load=function(t){switch(this.emit("start",this),t&&this.once("complete",t),(this.crossOrigin===!1||"string"!=typeof this.crossOrigin)&&(this.crossOrigin=this._determineCrossOrigin(this.url)),this.loadType){case i.LOAD_TYPE.IMAGE:this._loadImage();break;case i.LOAD_TYPE.AUDIO:this._loadElement("audio");break;case i.LOAD_TYPE.VIDEO:this._loadElement("video");break;case i.LOAD_TYPE.XHR:default:h&&this.crossOrigin?this._loadXdr():this._loadXhr()}},i.prototype._loadImage=function(){this.data=new Image,this.crossOrigin&&(this.data.crossOrigin=this.crossOrigin),this.data.src=this.url,this.isImage=!0,this.data.addEventListener("error",this._boundOnError,!1),this.data.addEventListener("load",this._boundComplete,!1),this.data.addEventListener("progress",this._boundOnProgress,!1)},i.prototype._loadElement=function(t){if("audio"===t&&"undefined"!=typeof Audio?this.data=new Audio:this.data=document.createElement(t),null===this.data)return this.error=new Error("Unsupported element "+t),void this.complete();if(navigator.isCocoonJS)this.data.src=Array.isArray(this.url)?this.url[0]:this.url;else if(Array.isArray(this.url))for(var e=0;e0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","gl-matrix":"git+https://github.com/toji/gl-matrix.git","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.transform.dirty=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":57,"../textures/RenderTexture":101,"../utils":108,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.transform=new a,this.position=this.transform.position,this.scale=this.transform.scale,this.pivot=this.transform.pivot,this.skew=this.transform.skew,this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=this.transform.worldTransform,this.localTransform=this.transform.localTransform,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),t("./TransformStatic")),h=new n.Matrix,u={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return h.tx=-i.x,h.ty=-i.y,n.render(this,h),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":57,"../textures/RenderTexture":101,"./TransformStatic":42,eventemitter3:25}],41:[function(t,e,r){function i(t,e,r){this._x=e||0,this._y=r||0,this.transform=t}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this._x},set:function(t){this._x=t,this.transform.dirty=!0}},y:{get:function(){return this._y},set:function(t){this._y=t,this.transform.dirty=!0}}}),i.prototype.set=function(t,e){this._x=t||0,this._y=e||(0!==e?this._x:0),this.transform.dirty=!0}},{}],42:[function(t,e,r){function i(){this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.position=new o(this,0),this.scale=new o(this,1,1),this.pivot=new o(this,0,0),this.skew=new o(this,0,0),this.rotation=0,this._sr=Math.sin(0),this._cr=Math.cos(0),this.dirty=!0}var n=t("../math"),o=t("./ObservablePoint");i.prototype.constructor=i,i.prototype.updateTransform=function(t){var e=t.worldTransform,r=this.worldTransform,i=this.localTransform;console.log("DIRTY"),this.dirty&&(i.a=this._cr*this.scale._x,i.b=this._sr*this.scale._x,i.c=-this._sr*this.scale._y,i.d=this._cr*this.scale._y,i.tx=this.position._x-(this.pivot._x*i.a+this.pivot._y*i.c),i.ty=this.position._y-(this.pivot._x*i.b+this.pivot._y*i.d)),(this.dirty||parent.dirty)&&(r.a=i.a*e.a+i.b*e.c,r.b=i.a*e.b+i.b*e.d,r.c=i.c*e.a+i.d*e.c,r.d=i.c*e.b+i.d*e.d,r.tx=i.tx*e.a+i.ty*e.c+e.tx,r.ty=i.tx*e.b+i.ty*e.d+e.ty)},e.exports=i},{"../math":57,"./ObservablePoint":41}],43:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils":108,"./WebGLGraphicsData":46,"./shaders/PrimitiveShader":47,"./utils/buildCircle":48,"./utils/buildComplexPoly":49,"./utils/buildLine":50,"./utils/buildPoly":51,"./utils/buildRectangle":52,"./utils/buildRoundedRectangle":53,earcut:24}],46:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],47:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],48:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":108,"./buildLine":50}],49:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":108,"./buildLine":50}],50:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":57,"../../../utils":108}],51:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":108}],52:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":108,"./buildLine":50}],53:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":108,"./buildLine":50}],54:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),BaseRenderTexture:t("./textures/BaseRenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":43,"./graphics/GraphicsData":44,"./graphics/webgl/GraphicsRenderer":45,"./math":57,"./particles/ParticleContainer":63,"./particles/webgl/ParticleRenderer":65,"./renderers/canvas/CanvasRenderer":68,"./renderers/canvas/utils/CanvasBuffer":69,"./renderers/canvas/utils/CanvasGraphics":70,"./renderers/webgl/WebGLRenderer":74,"./renderers/webgl/filters/AbstractFilter":75,"./renderers/webgl/filters/FXAAFilter":76,"./renderers/webgl/filters/SpriteMaskFilter":77,"./renderers/webgl/managers/ShaderManager":81,"./renderers/webgl/managers/WebGLManager":83,"./renderers/webgl/shaders/Shader":86,"./renderers/webgl/utils/ObjectRenderer":89,"./renderers/webgl/utils/RenderTarget":91,"./sprites/Sprite":95,"./sprites/webgl/SpriteRenderer":96,"./text/Text":98,"./textures/BaseRenderTexture":99,"./textures/BaseTexture":100,"./textures/RenderTexture":101,"./textures/Texture":102,"./textures/TextureUvs":103,"./textures/VideoBaseTexture":104,"./ticker":106,"./utils":108,"pixi-gl-core":1}],55:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":56}],56:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],57:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":55,"./Point":56,"./shapes/Circle":58,"./shapes/Ellipse":59,"./shapes/Polygon":60,"./shapes/Rectangle":61,"./shapes/RoundedRectangle":62}],58:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":61}],59:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":61}],60:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":56}],61:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],63:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"./ParticleBuffer":64,"./ParticleShader":66}],66:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{ +uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":87}],67:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,transform:{worldTransform:new o.Matrix},worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":57,"../utils":108,eventemitter3:25}],68:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":57,"../../utils":108,"../SystemRenderer":67,"./utils/CanvasMaskManager":71}],69:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],70:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],71:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":70}],72:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":87}],76:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\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\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\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)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":75}],77:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":57,"./AbstractFilter":75}],78:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":83}],79:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":108}],87:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":86}],88:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],89:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":83}],90:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],91:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=(t("pixi-gl-core").GLTexture,t("pixi-gl-core").GLFramebuffer),s=t("./StencilMaskStack"),a=function(t,e,r,a,h,u){this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=h||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.defaultFrame=new PIXI.Rectangle,this.destinationFrame=null,this.sourceFrame=null,this.stencilBuffer=null,this.stencilMaskStack=new s,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=a||n.SCALE_MODES.DEFAULT,this.root=u,this.frameBuffer=o.createRGBA(t,100,100),this.root?this.frameBuffer.framebuffer=null:this.texture=this.frameBuffer.texture,this.resize(e,r)};a.prototype.constructor=a,e.exports=a,a.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},a.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},a.prototype.activate=function(t,e){var r=this.gl;this.frameBuffer.bind(),this.destinationFrame=t||this.destinationFrame||this.defaultFrame,this.sourceFrame=e||this.sourceFrame||t,this.calculateProjection(this.destinationFrame,this.sourceFrame),this.transform&&this.projectionMatrix.append(this.transform),this.destinationFrame!==this.sourceFrame?(r.enable(r.SCISSOR_TEST),r.scissor(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)):r.disable(r.SCISSOR_TEST),r.viewport(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)},a.prototype.calculateProjection=function(t,e){var r=this.projectionMatrix;e=e||t,r.identity(),this.root?(r.a=1/t.width*2,r.d=-1/t.height*2,r.tx=-1-e.x*r.a,r.ty=1-e.y*r.d):(r.a=1/t.width*2,r.d=1/t.height*2,r.tx=-1-e.x*r.a,r.ty=-1-e.y*r.d)},a.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.defaultFrame.width=t,this.defaultFrame.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},a.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":57,"../../../utils":108,"./StencilMaskStack":92,"pixi-gl-core":1}],92:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],93:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],94:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],95:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.transform.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0); +}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],98:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=t,this.height=e,this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(t){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear(!1,t))},i.prototype.renderWebGL=function(t,e,r,i,n){if(this.valid){if(n=void 0!==n?n:!0,this.textureBuffer.transform=r,this.textureBuffer.activate(),e.worldAlpha=1,n){e.worldTransform.identity(),e.currentBounds=null;var o,s,a=e.children;for(o=0,s=a.length;s>o;++o)a[o].updateTransform()}p.width=t.height,p.height=t.width;var h=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.textureBuffer.activate(t,p),console.log(e),this.renderer.renderDisplayObject(e,this.textureBuffer,i),this.renderer.filterManager=h}},i.prototype.renderCanvas=function(t,e,r,i,n){if(this.valid){n=!!n;var o=c;o.identity(),r&&o.append(r),o.tx+=t.x,o.ty+=t.y;var s=e.worldTransform;e.worldTransform=o,e.worldAlpha=1;var a,h,u=e.children;for(a=0,h=u.length;h>a;++a)u[a].updateTransform();i&&this.textureBuffer.clear();var l=this.textureBuffer.context,p=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(e,l),this.renderer.resolution=p,e.worldTransform===o&&(e.worldTransform=s)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(t){var e=new Image;return e.src=this.getBase64(t),e},i.prototype.getBase64=function(t){return this.getCanvas(t).toDataURL()},i.prototype.getCanvas=function(t){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution,i=this.renderer.gl,n=new Uint8Array(4*e*r);i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null);var o=new h(e,r),s=o.context.getImageData(0,0,e,r);return s.data.set(n),o.context.putImageData(s,0,0),o.canvas}if(t||(t=p,t.width=this.textureBuffer.canvas.width,t.height=this.textureBuffer.canvas.height),t.width===this.textureBuffer.canvas.width&&t.height===this.textureBuffer.canvas.height)return this.textureBuffer.canvas;var a=this.resolution,o=new h(t.width*a,t.height*a),s=this.textureBuffer.context.getImageData(t.x*a,t.y*a,t.width*a,t.height*a);return o.context.putImageData(s,0,0),o.canvas},i.prototype.getPixels=function(t){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var i=this.renderer.gl,n=new Uint8Array(4*e*r);return i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null),n}return this.textureBuffer.canvas.getContext("2d").getImageData(t.x*this.resolution,t.y*this.resolution,e,r).data},i.prototype.getPixel=function(t,e,r){return p.x=e,p.y=r,p.width=1/this.resolution,p.height=1/this.resolution,t&&(p.x+=t.x,p.y+=t.y),this.getPixels(p)}},{"../const":38,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/webgl/managers/FilterManager":79,"../renderers/webgl/utils/RenderTarget":91,"./BaseTexture":100,"./Texture":102}],100:[function(t,e,r){function i(t,e,r){s.call(this),this.uid=n.uid(),this.resolution=r||1,this.width=100,this.height=100,this.realWidth=100,this.realHeight=100,this.scaleMode=e||o.SCALE_MODES.DEFAULT,this.hasLoaded=!1,this.isLoading=!1,this.source=null,this.premultipliedAlpha=!0,this.imageUrl=null,this.isPowerOfTwo=!1,this.mipmap=!1,this._glTextures={},this._active=!1,this._id=0,t&&this.loadSource(t)}var n=t("../utils"),o=t("../const"),s=t("eventemitter3");i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.update=function(){this.realWidth=this.source.naturalWidth||this.source.width,this.realHeight=this.source.naturalHeight||this.source.height,this.width=this.realWidth/this.resolution,this.height=this.realHeight/this.resolution,this.isPowerOfTwo=n.isPowerOfTwo(this.realWidth,this.realHeight),this.emit("update",this)},i.prototype.loadSource=function(t){var e=this.isLoading;if(this.hasLoaded=!1,this.isLoading=!1,e&&this.source&&(this.source.onload=null,this.source.onerror=null),this.source=t,(this.source.complete||this.source.getContext)&&this.source.width&&this.source.height)this._sourceLoaded();else if(!t.getContext){this.isLoading=!0;var r=this;t.onload=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r._sourceLoaded(),r.emit("loaded",r))},t.onerror=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r.emit("error",r))},t.complete&&t.src&&(this.isLoading=!1,t.onload=null,t.onerror=null,t.width&&t.height?(this._sourceLoaded(),e&&this.emit("loaded",this)):e&&this.emit("error",this))}},i.prototype._sourceLoaded=function(){this.hasLoaded=!0,this.update()},i.prototype.destroy=function(){this.imageUrl?(delete n.BaseTextureCache[this.imageUrl],delete n.TextureCache[this.imageUrl],this.imageUrl=null,navigator.isCocoonJS||(this.source.src="")):this.source&&this.source._pixiId&&delete n.BaseTextureCache[this.source._pixiId],this.source=null,this.dispose()},i.prototype.dispose=function(){this.emit("dispose",this)},i.prototype.updateSourceImage=function(t){this.source.src=t,this.loadSource(this.source)},i.fromImage=function(t,e,r){var o=n.BaseTextureCache[t];if(void 0===e&&0!==t.indexOf("data:")&&(e=!0),!o){var s=new Image;e&&(s.crossOrigin=""),o=new i(s,r),o.imageUrl=t,s.src=t,n.BaseTextureCache[t]=o,o.resolution=n.getResolutionOfUrl(t)}return o},i.fromCanvas=function(t,e){t._pixiId||(t._pixiId="canvas_"+n.uid());var r=n.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),n.BaseTextureCache[t._pixiId]=r),r}},{"../const":38,"../utils":108,eventemitter3:25}],101:[function(t,e,r){function i(t,e){if(!renderer)throw new Error("Unable to create RenderTexture, you must pass a renderer into the constructor.");o.call(this,t,e),this.valid=!0,this._updateUvs()}var n=t("./BaseRenderTexture"),o=t("./Texture"),s=t("../math");t("../const"),new s.Matrix;i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.resize=function(t,e,r){this.valid=t>0&&e>0,this._frame.width=this.crop.width=t,this._frame.height=this.crop.height=e,r&&this.baseTexture.resize(t,e),this._updateUvs()},i.prototype.clear=function(){this.valid&&this.baseTexture.clear(this.frame)},i.prototype.render=function(t,e,r,i){this.valid&&this.baseTexture.render(this.frame,t,e,r,i)},i.prototype.getImage=function(){return this.baseTexture.getImage(this.frame)},i.prototype.getBase64=function(){return this.getBase64.getImage(this.frame)},i.prototype.getCanvas=function(){return this.baseTexture.getCanvas(this.frame)},i.prototype.getPixels=function(){return this.baseTexture.getPixels(this.frame)},i.prototype.getPixel=function(t,e){return this.baseTexture.getPixel(this.frame,t,e)},i.create=function(t,e,r,o,s){return new i(new n(t,e,r,o,s))}},{"../const":38,"../math":57,"./BaseRenderTexture":99,"./Texture":102}],102:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":57,"../utils":108,"./BaseTexture":100,"./TextureUvs":103,"./VideoBaseTexture":104,eventemitter3:25}],103:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],104:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],106:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":105}],107:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],108:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":109,async:16,eventemitter3:25}],109:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],110:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":54, +"./extras":117,"./filters":134,"./mesh":159}],111:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":54}],119:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":54,"../blur/BlurXFilter":122,"../blur/BlurYFilter":123}],120:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){ +t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":54}],126:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":54}],127:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":54}],128:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":54}],129:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":54}],130:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":54}],131:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":54}],141:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":54}],142:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":54,"./TiltShiftXFilter":143,"./TiltShiftYFilter":144}],143:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":141}],144:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":141}],145:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":54}],146:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":54,"./deprecation":110,"./extras":117,"./filters":134,"./interaction":149,"./loaders":152,"./mesh":159,"./polyfill":164}],147:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":54}],148:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){ +var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":54,"./InteractionData":147,"./interactiveTarget":150}],149:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":147,"./InteractionManager":148,"./interactiveTarget":150}],150:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],151:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":54}],157:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":156}],158:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":54,"./Mesh":156}],159:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":156,"./Plane":157,"./Rope":158,"./webgl/MeshRenderer":160,"./webgl/MeshShader":161}],160:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":54,"../Mesh":156}],161:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":54}],162:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],163:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],164:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":162,"./Object.assign":163,"./requestAnimationFrame":165}],165:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[146])(146)}); //# sourceMappingURL=pixi.min.js.map diff --git a/bin/pixi.js b/bin/pixi.js index df52170..915f5c1 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -1,7 +1,7 @@ /** * @license * pixi.js - v3.0.10-dev - * Compiled 2016-01-18T21:33:26.540Z + * Compiled 2016-01-18T22:34:48.843Z * * pixi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -8072,7 +8072,7 @@ core.CanvasRenderer.registerPlugin('accessibility', AccessibilityManager); -},{"../core":53,"./accessibleTarget":36}],36:[function(require,module,exports){ +},{"../core":54,"./accessibleTarget":36}],36:[function(require,module,exports){ /** * Default property values of accessible objects * used by {@link PIXI.accessibility.AccessibilityManager}. @@ -8759,7 +8759,7 @@ this.children[i].updateTransform(); } - this.dirtyTransform = false; + this.transform.dirty = false; }; // performance increase to avoid using call.. (10x faster) @@ -9005,12 +9005,12 @@ this.children = null; }; -},{"../math":56,"../textures/RenderTexture":100,"../utils":107,"./DisplayObject":40}],40:[function(require,module,exports){ +},{"../math":57,"../textures/RenderTexture":101,"../utils":108,"./DisplayObject":40}],40:[function(require,module,exports){ var math = require('../math'), RenderTexture = require('../textures/RenderTexture'), EventEmitter = require('eventemitter3'), CONST = require('../const'), - Transform = require('./Transform'), + Transform = require('./TransformStatic'), _tempMatrix = new math.Matrix(), _tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1, children:[]}; @@ -9122,22 +9122,6 @@ */ this.filterArea = null; - /**xww - * cached sin rotation - * - * @member {number} - * @private - */ - this._sr = 0; - - /** - * cached cos rotation - * - * @member {number} - * @private - */ - this._cr = 1; - /** * The original, cached bounds of the object * @@ -9162,7 +9146,7 @@ */ this._mask = null; - this.dirtyTransform = true; + // this.dirtyTransform = true; } // constructor @@ -9246,9 +9230,9 @@ set: function (value) { this._rotation = value; - this.dirtyTransform = true; - this._sr = Math.sin(value); - this._cr = Math.cos(value); + this.transform.dirty = true; + this.transform._sr = Math.sin(value); + this.transform._cr = Math.cos(value); } }, @@ -9352,6 +9336,7 @@ */ DisplayObject.prototype.updateTransform = function () { + //if(this.transform.dirty || parent.transform.dirty) this.transform.updateTransform(this.parent.transform); // multiply the alphas.. this.worldAlpha = this.alpha * this.parent.worldAlpha; @@ -9554,9 +9539,79 @@ this.filterArea = null; }; -},{"../const":38,"../math":56,"../textures/RenderTexture":100,"./Transform":41,"eventemitter3":25}],41:[function(require,module,exports){ -var math = require('../math'); +},{"../const":38,"../math":57,"../textures/RenderTexture":101,"./TransformStatic":42,"eventemitter3":25}],41:[function(require,module,exports){ +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents + * the horizontal axis and y represents the vertical axis. + * + * @class + * @memberof PIXI + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +function ObservablePoint(transform, x, y) +{ + this._x = x || 0; + this._y = y || 0; + this.transform = transform; +} + +ObservablePoint.prototype.constructor = ObservablePoint; +module.exports = ObservablePoint; + + + +Object.defineProperties(ObservablePoint.prototype, { + /** + * The position of the displayObject on the x axis relative to the local coordinates of the parent. + * + * @member {number} + * @memberof PIXI.DisplayObject# + */ + x: { + get: function () + { + return this._x; + }, + set: function (value) + { + this._x = value; + this.transform.dirty = true; + } + }, + + y: { + get: function () + { + return this._y; + }, + set: function (value) + { + this._y = value; + this.transform.dirty = true; + } + } +}); + +/** + * Sets the point to a new x and y position. + * If y is omitted, both x and y will be set to x. + * + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +ObservablePoint.prototype.set = function (x, y) +{ + this._x = x || 0; + this._y = y || ( (y !== 0) ? this._x : 0 ); + + this.transform.dirty = true; +}; + +},{}],42:[function(require,module,exports){ +var math = require('../math'); +var ObservablePoint = require('./ObservablePoint'); /** * The Point object represents a location in a two-dimensional coordinate system, where x represents @@ -9572,17 +9627,19 @@ this.worldTransform = new math.Matrix(); this.localTransform = new math.Matrix(); - this.position = new math.Point(0.0); - this.scale = new math.Point(1,1); - this.pivot = new math.Point(0.0); - this.skew = new math.Point(0.0); + this.position = new ObservablePoint(this, 0); + this.scale = new ObservablePoint(this,1, 1); + this.pivot = new ObservablePoint(this, 0, 0); + this.skew = new ObservablePoint(this, 0,0); this.rotation = 0; this._sr = Math.sin(0); this._cr = Math.cos(0); - this.dirty = true; + + + this.updated = true; } Transform.prototype.constructor = Transform; @@ -9593,19 +9650,20 @@ var wt = this.worldTransform; var lt = this.localTransform; - if(this.dirty) { // get the matrix values of the displayobject based on its transform properties.. - lt.a = this._cr * this.scale.x; - lt.b = this._sr * this.scale.x; - lt.c = -this._sr * this.scale.y; - lt.d = this._cr * this.scale.y; - lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c); - lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d); + lt.a = this._cr * this.scale._x; + lt.b = this._sr * this.scale._x; + lt.c = -this._sr * this.scale._y; + lt.d = this._cr * this.scale._y; + lt.tx = this.position._x - (this.pivot._x * lt.a + this.pivot._y * lt.c); + lt.ty = this.position._y - (this.pivot._x * lt.b + this.pivot._y * lt.d); } - if(this.dirty || parent.dirty) + this.updated = this.dirty || parentTransform.dirty; + + if(this.updated) { // concat the parent matrix with the objects transform. wt.a = lt.a * pt.a + lt.b * pt.c; @@ -9613,21 +9671,16 @@ wt.c = lt.c * pt.a + lt.d * pt.c; wt.d = lt.c * pt.b + lt.d * pt.d; wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; - wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; - - // this.dirty = false; - // return true; + wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; } - -// this.dirty = false; - // return false; + } module.exports = Transform; -},{"../math":56}],42:[function(require,module,exports){ +},{"../math":57,"./ObservablePoint":41}],43:[function(require,module,exports){ var Container = require('../display/Container'), Texture = require('../textures/Texture'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), @@ -10787,7 +10840,7 @@ this._localBounds = null; }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/canvas/utils/CanvasGraphics":69,"../textures/Texture":101,"./GraphicsData":43}],43:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/canvas/utils/CanvasGraphics":70,"../textures/Texture":102,"./GraphicsData":44}],44:[function(require,module,exports){ /** * A GraphicsData object. * @@ -10880,7 +10933,7 @@ this.shape = null; }; -},{}],44:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ var utils = require('../../utils'), math = require('../../math'), CONST = require('../../const'), @@ -11200,7 +11253,7 @@ }; -},{"../../const":38,"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils":107,"./WebGLGraphicsData":45,"./shaders/PrimitiveShader":46,"./utils/buildCircle":47,"./utils/buildComplexPoly":48,"./utils/buildLine":49,"./utils/buildPoly":50,"./utils/buildRectangle":51,"./utils/buildRoundedRectangle":52,"earcut":24}],45:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils":108,"./WebGLGraphicsData":46,"./shaders/PrimitiveShader":47,"./utils/buildCircle":48,"./utils/buildComplexPoly":49,"./utils/buildLine":50,"./utils/buildPoly":51,"./utils/buildRectangle":52,"./utils/buildRoundedRectangle":53,"earcut":24}],46:[function(require,module,exports){ /** * An object containing WebGL specific properties to be used by the WebGL renderer * @@ -11318,7 +11371,7 @@ this.glIndices = null; }; -},{}],46:[function(require,module,exports){ +},{}],47:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -11370,7 +11423,7 @@ module.exports = PrimitiveShader; -},{"pixi-gl-core":1}],47:[function(require,module,exports){ +},{"pixi-gl-core":1}],48:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11457,7 +11510,7 @@ module.exports = buildCircle; -},{"../../../utils":107,"./buildLine":49}],48:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],49:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11528,7 +11581,7 @@ module.exports = buildComplexPoly; -},{"../../../utils":107,"./buildLine":49}],49:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],50:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'); @@ -11748,7 +11801,7 @@ }; module.exports = buildLine; -},{"../../../math":56,"../../../utils":107}],50:[function(require,module,exports){ +},{"../../../math":57,"../../../utils":108}],51:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -11811,7 +11864,7 @@ module.exports = buildPoly; -},{"../../../utils":107}],51:[function(require,module,exports){ +},{"../../../utils":108}],52:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11882,7 +11935,7 @@ }; module.exports = buildRectangle; -},{"../../../utils":107,"./buildLine":49}],52:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],53:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -12010,7 +12063,7 @@ module.exports = buildRoundedRectangle; -},{"../../../utils":107,"./buildLine":49}],53:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],54:[function(require,module,exports){ /** * @file Main export of the PIXI core library * @author Mat Groves @@ -12106,7 +12159,7 @@ } }); -},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":42,"./graphics/GraphicsData":43,"./graphics/webgl/GraphicsRenderer":44,"./math":56,"./particles/ParticleContainer":62,"./particles/webgl/ParticleRenderer":64,"./renderers/canvas/CanvasRenderer":67,"./renderers/canvas/utils/CanvasBuffer":68,"./renderers/canvas/utils/CanvasGraphics":69,"./renderers/webgl/WebGLRenderer":73,"./renderers/webgl/filters/AbstractFilter":74,"./renderers/webgl/filters/FXAAFilter":75,"./renderers/webgl/filters/SpriteMaskFilter":76,"./renderers/webgl/managers/ShaderManager":80,"./renderers/webgl/managers/WebGLManager":82,"./renderers/webgl/shaders/Shader":85,"./renderers/webgl/utils/ObjectRenderer":88,"./renderers/webgl/utils/RenderTarget":90,"./sprites/Sprite":94,"./sprites/webgl/SpriteRenderer":95,"./text/Text":97,"./textures/BaseRenderTexture":98,"./textures/BaseTexture":99,"./textures/RenderTexture":100,"./textures/Texture":101,"./textures/TextureUvs":102,"./textures/VideoBaseTexture":103,"./ticker":105,"./utils":107,"pixi-gl-core":1}],54:[function(require,module,exports){ +},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":43,"./graphics/GraphicsData":44,"./graphics/webgl/GraphicsRenderer":45,"./math":57,"./particles/ParticleContainer":63,"./particles/webgl/ParticleRenderer":65,"./renderers/canvas/CanvasRenderer":68,"./renderers/canvas/utils/CanvasBuffer":69,"./renderers/canvas/utils/CanvasGraphics":70,"./renderers/webgl/WebGLRenderer":74,"./renderers/webgl/filters/AbstractFilter":75,"./renderers/webgl/filters/FXAAFilter":76,"./renderers/webgl/filters/SpriteMaskFilter":77,"./renderers/webgl/managers/ShaderManager":81,"./renderers/webgl/managers/WebGLManager":83,"./renderers/webgl/shaders/Shader":86,"./renderers/webgl/utils/ObjectRenderer":89,"./renderers/webgl/utils/RenderTarget":91,"./sprites/Sprite":95,"./sprites/webgl/SpriteRenderer":96,"./text/Text":98,"./textures/BaseRenderTexture":99,"./textures/BaseTexture":100,"./textures/RenderTexture":101,"./textures/Texture":102,"./textures/TextureUvs":103,"./textures/VideoBaseTexture":104,"./ticker":106,"./utils":108,"pixi-gl-core":1}],55:[function(require,module,exports){ // @todo - ignore the too many parameters warning for now // should either fix it or change the jshint config // jshint -W072 @@ -12546,7 +12599,7 @@ */ Matrix.TEMP_MATRIX = new Matrix(); -},{"./Point":55}],55:[function(require,module,exports){ +},{"./Point":56}],56:[function(require,module,exports){ /** * The Point object represents a location in a two-dimensional coordinate system, where x represents * the horizontal axis and y represents the vertical axis. @@ -12616,7 +12669,7 @@ this.y = y || ( (y !== 0) ? this.x : 0 ) ; }; -},{}],56:[function(require,module,exports){ +},{}],57:[function(require,module,exports){ /** * Math classes and utilities mixed into PIXI namespace. * @@ -12638,7 +12691,7 @@ RoundedRectangle: require('./shapes/RoundedRectangle') }; -},{"./Matrix":54,"./Point":55,"./shapes/Circle":57,"./shapes/Ellipse":58,"./shapes/Polygon":59,"./shapes/Rectangle":60,"./shapes/RoundedRectangle":61}],57:[function(require,module,exports){ +},{"./Matrix":55,"./Point":56,"./shapes/Circle":58,"./shapes/Ellipse":59,"./shapes/Polygon":60,"./shapes/Rectangle":61,"./shapes/RoundedRectangle":62}],58:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12726,7 +12779,7 @@ return new Rectangle(this.x - this.radius, this.y - this.radius, this.radius * 2, this.radius * 2); }; -},{"../../const":38,"./Rectangle":60}],58:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],59:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12821,7 +12874,7 @@ return new Rectangle(this.x - this.width, this.y - this.height, this.width, this.height); }; -},{"../../const":38,"./Rectangle":60}],59:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],60:[function(require,module,exports){ var Point = require('../Point'), CONST = require('../../const'); @@ -12924,7 +12977,7 @@ return inside; }; -},{"../../const":38,"../Point":55}],60:[function(require,module,exports){ +},{"../../const":38,"../Point":56}],61:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13018,7 +13071,7 @@ return false; }; -},{"../../const":38}],61:[function(require,module,exports){ +},{"../../const":38}],62:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13110,7 +13163,7 @@ return false; }; -},{"../../const":38}],62:[function(require,module,exports){ +},{"../../const":38}],63:[function(require,module,exports){ var Container = require('../display/Container'), CONST = require('../const'); @@ -13429,7 +13482,7 @@ this._buffers = null; }; -},{"../const":38,"../display/Container":39}],63:[function(require,module,exports){ +},{"../const":38,"../display/Container":39}],64:[function(require,module,exports){ /** * @author Mat Groves @@ -13649,7 +13702,7 @@ this.gl.deleteBuffer(this.staticBuffer); }; -},{}],64:[function(require,module,exports){ +},{}],65:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), ParticleShader = require('./ParticleShader'), @@ -14125,7 +14178,7 @@ this.tempMatrix = null; }; -},{"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"./ParticleBuffer":63,"./ParticleShader":65}],65:[function(require,module,exports){ +},{"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"./ParticleBuffer":64,"./ParticleShader":66}],66:[function(require,module,exports){ var TextureShader = require('../../renderers/webgl/shaders/TextureShader'); /** @@ -14203,7 +14256,7 @@ module.exports = ParticleShader; -},{"../../renderers/webgl/shaders/TextureShader":86}],66:[function(require,module,exports){ +},{"../../renderers/webgl/shaders/TextureShader":87}],67:[function(require,module,exports){ var utils = require('../utils'), math = require('../math'), CONST = require('../const'), @@ -14464,7 +14517,7 @@ this._backgroundColorString = null; }; -},{"../const":38,"../math":56,"../utils":107,"eventemitter3":25}],67:[function(require,module,exports){ +},{"../const":38,"../math":57,"../utils":108,"eventemitter3":25}],68:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), CanvasMaskManager = require('./utils/CanvasMaskManager'), utils = require('../../utils'), @@ -14732,7 +14785,7 @@ } }; -},{"../../const":38,"../../math":56,"../../utils":107,"../SystemRenderer":66,"./utils/CanvasMaskManager":70}],68:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../utils":108,"../SystemRenderer":67,"./utils/CanvasMaskManager":71}],69:[function(require,module,exports){ /** * Creates a Canvas element of the given size. * @@ -14832,7 +14885,7 @@ this.canvas = null; }; -},{}],69:[function(require,module,exports){ +},{}],70:[function(require,module,exports){ var CONST = require('../../../const'); /** @@ -15186,7 +15239,7 @@ }; -},{"../../../const":38}],70:[function(require,module,exports){ +},{"../../../const":38}],71:[function(require,module,exports){ var CanvasGraphics = require('./CanvasGraphics'); /** @@ -15248,7 +15301,7 @@ CanvasMaskManager.prototype.destroy = function () {}; -},{"./CanvasGraphics":69}],71:[function(require,module,exports){ +},{"./CanvasGraphics":70}],72:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -15500,7 +15553,7 @@ */ CanvasTinter.tintMethod = CanvasTinter.canUseMultiply ? CanvasTinter.tintWithMultiply : CanvasTinter.tintWithPerPixel; -},{"../../../utils":107}],72:[function(require,module,exports){ +},{"../../../utils":108}],73:[function(require,module,exports){ var GLTexture = require('pixi-gl-core').GLTexture, utils = require('../../utils'); @@ -15640,7 +15693,7 @@ module.exports = TextureManager; -},{"../../utils":107,"pixi-gl-core":1}],73:[function(require,module,exports){ +},{"../../utils":108,"pixi-gl-core":1}],74:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), ShaderManager = require('./managers/ShaderManager'), MaskManager = require('./managers/MaskManager'), @@ -16037,7 +16090,7 @@ }; -},{"../../const":38,"../../utils":107,"../SystemRenderer":66,"./TextureManager":72,"./filters/FXAAFilter":75,"./managers/BlendModeManager":77,"./managers/FilterManager":78,"./managers/MaskManager":79,"./managers/ShaderManager":80,"./managers/StencilManager":81,"./utils/ObjectRenderer":88,"./utils/RenderTarget":90,"./utils/mapWebGLBlendModesToPixi":92,"./utils/mapWebGLDrawModesToPixi":93,"pixi-gl-core":1}],74:[function(require,module,exports){ +},{"../../const":38,"../../utils":108,"../SystemRenderer":67,"./TextureManager":73,"./filters/FXAAFilter":76,"./managers/BlendModeManager":78,"./managers/FilterManager":79,"./managers/MaskManager":80,"./managers/ShaderManager":81,"./managers/StencilManager":82,"./utils/ObjectRenderer":89,"./utils/RenderTarget":91,"./utils/mapWebGLBlendModesToPixi":93,"./utils/mapWebGLDrawModesToPixi":94,"pixi-gl-core":1}],75:[function(require,module,exports){ var DefaultShader = require('../shaders/TextureShader'); /** @@ -16149,7 +16202,7 @@ } }; -},{"../shaders/TextureShader":86}],75:[function(require,module,exports){ +},{"../shaders/TextureShader":87}],76:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'); // @see https://github.com/substack/brfs/issues/25 @@ -16204,7 +16257,7 @@ filterManager.applyFilter(shader, input, output); }; -},{"./AbstractFilter":74}],76:[function(require,module,exports){ +},{"./AbstractFilter":75}],77:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'), math = require('../../../math'); @@ -16301,7 +16354,7 @@ } }); -},{"../../../math":56,"./AbstractFilter":74}],77:[function(require,module,exports){ +},{"../../../math":57,"./AbstractFilter":75}],78:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'); /** @@ -16345,7 +16398,7 @@ return true; }; -},{"./WebGLManager":82}],78:[function(require,module,exports){ +},{"./WebGLManager":83}],79:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), RenderTarget = require('../utils/RenderTarget'), CONST = require('../../../const'), @@ -16797,7 +16850,7 @@ this.texturePool = null; }; -},{"../../../const":38,"../../../math":56,"../utils/Quad":89,"../utils/RenderTarget":90,"./WebGLManager":82}],79:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../utils/Quad":90,"../utils/RenderTarget":91,"./WebGLManager":83}],80:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), AlphaMaskFilter = require('../filters/SpriteMaskFilter'); @@ -16912,7 +16965,7 @@ }; -},{"../filters/SpriteMaskFilter":76,"./WebGLManager":82}],80:[function(require,module,exports){ +},{"../filters/SpriteMaskFilter":77,"./WebGLManager":83}],81:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), TextureShader = require('../shaders/TextureShader'), ComplexPrimitiveShader = require('../shaders/ComplexPrimitiveShader'), @@ -17082,7 +17135,7 @@ this.tempAttribState = null; }; -},{"../../../utils":107,"../shaders/ComplexPrimitiveShader":83,"../shaders/PrimitiveShader":84,"../shaders/TextureShader":86,"./WebGLManager":82}],81:[function(require,module,exports){ +},{"../../../utils":108,"../shaders/ComplexPrimitiveShader":84,"../shaders/PrimitiveShader":85,"../shaders/TextureShader":87,"./WebGLManager":83}],82:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), utils = require('../../../utils'); @@ -17449,7 +17502,7 @@ }; -},{"../../../utils":107,"./WebGLManager":82}],82:[function(require,module,exports){ +},{"../../../utils":108,"./WebGLManager":83}],83:[function(require,module,exports){ /** * @class * @memberof PIXI @@ -17490,7 +17543,7 @@ this.renderer = null; }; -},{}],83:[function(require,module,exports){ +},{}],84:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17552,7 +17605,7 @@ ComplexPrimitiveShader.prototype.constructor = ComplexPrimitiveShader; module.exports = ComplexPrimitiveShader; -},{"./Shader":85}],84:[function(require,module,exports){ +},{"./Shader":86}],85:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17615,7 +17668,7 @@ PrimitiveShader.prototype.constructor = PrimitiveShader; module.exports = PrimitiveShader; -},{"./Shader":85}],85:[function(require,module,exports){ +},{"./Shader":86}],86:[function(require,module,exports){ /*global console */ var utils = require('../../../utils'); @@ -18143,7 +18196,7 @@ return shader; }; -},{"../../../utils":107}],86:[function(require,module,exports){ +},{"../../../utils":108}],87:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -18254,7 +18307,7 @@ '}' ].join('\n'); -},{"./Shader":85}],87:[function(require,module,exports){ +},{"./Shader":86}],88:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -18335,7 +18388,7 @@ '}' ].join('\n'); -},{"pixi-gl-core":1}],88:[function(require,module,exports){ +},{"pixi-gl-core":1}],89:[function(require,module,exports){ var WebGLManager = require('../managers/WebGLManager'); /** @@ -18393,7 +18446,7 @@ // render the object }; -},{"../managers/WebGLManager":82}],89:[function(require,module,exports){ +},{"../managers/WebGLManager":83}],90:[function(require,module,exports){ /** * Helper class to create a quad * @@ -18548,7 +18601,7 @@ -},{}],90:[function(require,module,exports){ +},{}],91:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'), CONST = require('../../../const'), @@ -18853,7 +18906,7 @@ this.texture = null; }; -},{"../../../const":38,"../../../math":56,"../../../utils":107,"./StencilMaskStack":91,"pixi-gl-core":1}],91:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../../../utils":108,"./StencilMaskStack":92,"pixi-gl-core":1}],92:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -18886,7 +18939,7 @@ StencilMaskStack.prototype.constructor = StencilMaskStack; module.exports = StencilMaskStack; -},{}],92:[function(require,module,exports){ +},{}],93:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18923,7 +18976,7 @@ module.exports = mapWebGLBlendModesToPixi; -},{"../../../const":38}],93:[function(require,module,exports){ +},{"../../../const":38}],94:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18947,7 +19000,7 @@ module.exports = mapWebGLDrawModesToPixi; -},{"../../../const":38}],94:[function(require,module,exports){ +},{"../../../const":38}],95:[function(require,module,exports){ var math = require('../math'), Texture = require('../textures/Texture'), Container = require('../display/Container'), @@ -19043,7 +19096,6 @@ // call texture setter this.texture = texture || Texture.EMPTY; this.textureDirty = true - this.vertexDirty = true; this.vertexData = new Float32Array(8); } @@ -19153,7 +19205,6 @@ Sprite.prototype.caclulateVertices = function () { - var texture = this._texture, wt = this.transform.worldTransform, a = wt.a, b = wt.b, c = wt.c, d = wt.d, tx = wt.tx, ty = wt.ty, @@ -19208,22 +19259,11 @@ */ Sprite.prototype._renderWebGL = function (renderer) { - if(this.textureDirty) + if(this.transform.updated || this.textureDirty) { this.textureDirty = false; - - this._onTextureUpdate(); - - this.vertexDirty = true; - } - - if(this.vertexDirty) - { - this.vertexDirty = false; - // set the vertex data this.caclulateVertices(); - } renderer.setObjectRenderer(renderer.plugins.sprite); @@ -19566,7 +19606,7 @@ return new Sprite(Texture.fromImage(imageId, crossorigin, scaleMode)); }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasTinter":71,"../textures/Texture":101,"../utils":107}],95:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasTinter":72,"../textures/Texture":102,"../utils":108}],96:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), TextureShader = require('../../renderers/webgl/shaders/_TextureShader'), @@ -19927,7 +19967,7 @@ this.shader = null; }; -},{"../../const":38,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/shaders/_TextureShader":87,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils/createIndicesForQuads":106,"./generateMultiTextureShader":96,"pixi-gl-core":1}],96:[function(require,module,exports){ +},{"../../const":38,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/shaders/_TextureShader":88,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils/createIndicesForQuads":107,"./generateMultiTextureShader":97,"pixi-gl-core":1}],97:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; @@ -19990,7 +20030,7 @@ module.exports = generateMultiTextureShader; -},{"pixi-gl-core":1}],97:[function(require,module,exports){ +},{"pixi-gl-core":1}],98:[function(require,module,exports){ var Sprite = require('../sprites/Sprite'), Texture = require('../textures/Texture'), math = require('../math'), @@ -20611,7 +20651,7 @@ this._texture.destroy(destroyBaseTexture === undefined ? true : destroyBaseTexture); }; -},{"../const":38,"../math":56,"../sprites/Sprite":94,"../textures/Texture":101,"../utils":107}],98:[function(require,module,exports){ +},{"../const":38,"../math":57,"../sprites/Sprite":95,"../textures/Texture":102,"../utils":108}],99:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), Texture = require('./Texture'), RenderTarget = require('../renderers/webgl/utils/RenderTarget'), @@ -21095,7 +21135,7 @@ return this.getPixels(tempRect); }; -},{"../const":38,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/webgl/managers/FilterManager":78,"../renderers/webgl/utils/RenderTarget":90,"./BaseTexture":99,"./Texture":101}],99:[function(require,module,exports){ +},{"../const":38,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/webgl/managers/FilterManager":79,"../renderers/webgl/utils/RenderTarget":91,"./BaseTexture":100,"./Texture":102}],100:[function(require,module,exports){ var utils = require('../utils'), CONST = require('../const'), EventEmitter = require('eventemitter3'); @@ -21532,7 +21572,7 @@ return baseTexture; }; -},{"../const":38,"../utils":107,"eventemitter3":25}],100:[function(require,module,exports){ +},{"../const":38,"../utils":108,"eventemitter3":25}],101:[function(require,module,exports){ var BaseRenderTexture = require('./BaseRenderTexture'), Texture = require('./Texture'), math = require('../math'), @@ -21727,7 +21767,7 @@ } -},{"../const":38,"../math":56,"./BaseRenderTexture":98,"./Texture":101}],101:[function(require,module,exports){ +},{"../const":38,"../math":57,"./BaseRenderTexture":99,"./Texture":102}],102:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), VideoBaseTexture = require('./VideoBaseTexture'), TextureUvs = require('./TextureUvs'), @@ -22153,7 +22193,7 @@ */ Texture.EMPTY = new Texture(new BaseTexture()); -},{"../math":56,"../utils":107,"./BaseTexture":99,"./TextureUvs":102,"./VideoBaseTexture":103,"eventemitter3":25}],102:[function(require,module,exports){ +},{"../math":57,"../utils":108,"./BaseTexture":100,"./TextureUvs":103,"./VideoBaseTexture":104,"eventemitter3":25}],103:[function(require,module,exports){ /** * A standard object to store the Uvs of a texture @@ -22234,7 +22274,7 @@ this.uvs_uint32[3] = (((this.y3 * 65535) & 0xFFFF) << 16) | ((this.x3 * 65535) & 0xFFFF); }; -},{}],103:[function(require,module,exports){ +},{}],104:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), utils = require('../utils'); @@ -22471,7 +22511,7 @@ return source; } -},{"../utils":107,"./BaseTexture":99}],104:[function(require,module,exports){ +},{"../utils":108,"./BaseTexture":100}],105:[function(require,module,exports){ var CONST = require('../const'), EventEmitter = require('eventemitter3'), // Internal event used by composed emitter @@ -22826,7 +22866,7 @@ module.exports = Ticker; -},{"../const":38,"eventemitter3":25}],105:[function(require,module,exports){ +},{"../const":38,"eventemitter3":25}],106:[function(require,module,exports){ var Ticker = require('./Ticker'); /** @@ -22882,7 +22922,7 @@ Ticker: Ticker }; -},{"./Ticker":104}],106:[function(require,module,exports){ +},{"./Ticker":105}],107:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -22915,7 +22955,7 @@ }; module.exports = createIndicesForQuads; -},{}],107:[function(require,module,exports){ +},{}],108:[function(require,module,exports){ var CONST = require('../const'); /** @@ -23192,7 +23232,7 @@ BaseTextureCache: {} }; -},{"../const":38,"./pluginTarget":108,"async":16,"eventemitter3":25}],108:[function(require,module,exports){ +},{"../const":38,"./pluginTarget":109,"async":16,"eventemitter3":25}],109:[function(require,module,exports){ /** * Mixins functionality to make an object have "plugins". * @@ -23262,7 +23302,7 @@ } }; -},{}],109:[function(require,module,exports){ +},{}],110:[function(require,module,exports){ /*global console */ var core = require('./core'), mesh = require('./mesh'), @@ -23613,7 +23653,7 @@ return core.utils.uid(); }; -},{"./core":53,"./extras":116,"./filters":133,"./mesh":158}],110:[function(require,module,exports){ +},{"./core":54,"./extras":117,"./filters":134,"./mesh":159}],111:[function(require,module,exports){ var core = require('../core'); /** @@ -24001,7 +24041,7 @@ BitmapText.fonts = {}; -},{"../core":53}],111:[function(require,module,exports){ +},{"../core":54}],112:[function(require,module,exports){ var core = require('../core'); /** @@ -24321,7 +24361,7 @@ return new MovieClip(textures); }; -},{"../core":53}],112:[function(require,module,exports){ +},{"../core":54}],113:[function(require,module,exports){ var core = require('../core'), // a sprite use dfor rendering textures.. tempPoint = new core.Point(), @@ -24773,7 +24813,7 @@ return new TilingSprite(core.Texture.fromImage(imageId, crossorigin, scaleMode),width,height); }; -},{"../core":53,"../core/renderers/canvas/utils/CanvasTinter":71}],113:[function(require,module,exports){ +},{"../core":54,"../core/renderers/canvas/utils/CanvasTinter":72}],114:[function(require,module,exports){ var core = require('../core'), DisplayObject = core.DisplayObject, _tempMatrix = new core.Matrix(); @@ -25045,7 +25085,7 @@ this._originalDestroy(); }; -},{"../core":53}],114:[function(require,module,exports){ +},{"../core":54}],115:[function(require,module,exports){ var core = require('../core'); /** @@ -25075,7 +25115,7 @@ return null; }; -},{"../core":53}],115:[function(require,module,exports){ +},{"../core":54}],116:[function(require,module,exports){ var core = require('../core'); /** @@ -25105,7 +25145,7 @@ return point; }; -},{"../core":53}],116:[function(require,module,exports){ +},{"../core":54}],117:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -25126,7 +25166,7 @@ BitmapText: require('./BitmapText') }; -},{"./BitmapText":110,"./MovieClip":111,"./TilingSprite":112,"./cacheAsBitmap":113,"./getChildByName":114,"./getGlobalPosition":115}],117:[function(require,module,exports){ +},{"./BitmapText":111,"./MovieClip":112,"./TilingSprite":113,"./cacheAsBitmap":114,"./getChildByName":115,"./getGlobalPosition":116}],118:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25183,7 +25223,7 @@ } }); -},{"../../core":53}],118:[function(require,module,exports){ +},{"../../core":54}],119:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYFilter = require('../blur/BlurYFilter'); @@ -25284,7 +25324,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"../blur/BlurYFilter":122}],119:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"../blur/BlurYFilter":123}],120:[function(require,module,exports){ var core = require('../../core'); @@ -25426,7 +25466,7 @@ } }); -},{"../../core":53}],120:[function(require,module,exports){ +},{"../../core":54}],121:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('./BlurXFilter'), BlurYFilter = require('./BlurYFilter'); @@ -25536,7 +25576,7 @@ } }); -},{"../../core":53,"./BlurXFilter":121,"./BlurYFilter":122}],121:[function(require,module,exports){ +},{"../../core":54,"./BlurXFilter":122,"./BlurYFilter":123}],122:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25629,7 +25669,7 @@ } }); -},{"../../core":53}],122:[function(require,module,exports){ +},{"../../core":54}],123:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25715,7 +25755,7 @@ } }); -},{"../../core":53}],123:[function(require,module,exports){ +},{"../../core":54}],124:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25745,7 +25785,7 @@ SmartBlurFilter.prototype.constructor = SmartBlurFilter; module.exports = SmartBlurFilter; -},{"../../core":53}],124:[function(require,module,exports){ +},{"../../core":54}],125:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26281,7 +26321,7 @@ } }); -},{"../../core":53}],125:[function(require,module,exports){ +},{"../../core":54}],126:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26330,7 +26370,7 @@ } }); -},{"../../core":53}],126:[function(require,module,exports){ +},{"../../core":54}],127:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26421,7 +26461,7 @@ } }); -},{"../../core":53}],127:[function(require,module,exports){ +},{"../../core":54}],128:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26447,7 +26487,7 @@ CrossHatchFilter.prototype.constructor = CrossHatchFilter; module.exports = CrossHatchFilter; -},{"../../core":53}],128:[function(require,module,exports){ +},{"../../core":54}],129:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26531,7 +26571,7 @@ } }); -},{"../../core":53}],129:[function(require,module,exports){ +},{"../../core":54}],130:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26603,7 +26643,7 @@ } }); -},{"../../core":53}],130:[function(require,module,exports){ +},{"../../core":54}],131:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26694,7 +26734,7 @@ } }); -},{"../../core":53}],131:[function(require,module,exports){ +},{"../../core":54}],132:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYTintFilter = require('./BlurYTintFilter'); @@ -26887,7 +26927,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"./BlurYTintFilter":130}],132:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"./BlurYTintFilter":131}],133:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26936,7 +26976,7 @@ } }); -},{"../../core":53}],133:[function(require,module,exports){ +},{"../../core":54}],134:[function(require,module,exports){ /** * @file Main export of the PIXI filters library * @author Mat Groves @@ -26975,7 +27015,7 @@ TwistFilter: require('./twist/TwistFilter') }; -},{"./ascii/AsciiFilter":117,"./bloom/BloomFilter":118,"./blur/BlurDirFilter":119,"./blur/BlurFilter":120,"./blur/BlurXFilter":121,"./blur/BlurYFilter":122,"./blur/SmartBlurFilter":123,"./color/ColorMatrixFilter":124,"./color/ColorStepFilter":125,"./convolution/ConvolutionFilter":126,"./crosshatch/CrossHatchFilter":127,"./displacement/DisplacementFilter":128,"./dot/DotScreenFilter":129,"./dropshadow/DropShadowFilter":131,"./gray/GrayFilter":132,"./invert/InvertFilter":134,"./noise/NoiseFilter":135,"./pixelate/PixelateFilter":136,"./rgb/RGBSplitFilter":137,"./sepia/SepiaFilter":138,"./shockwave/ShockwaveFilter":139,"./tiltshift/TiltShiftFilter":141,"./tiltshift/TiltShiftXFilter":142,"./tiltshift/TiltShiftYFilter":143,"./twist/TwistFilter":144}],134:[function(require,module,exports){ +},{"./ascii/AsciiFilter":118,"./bloom/BloomFilter":119,"./blur/BlurDirFilter":120,"./blur/BlurFilter":121,"./blur/BlurXFilter":122,"./blur/BlurYFilter":123,"./blur/SmartBlurFilter":124,"./color/ColorMatrixFilter":125,"./color/ColorStepFilter":126,"./convolution/ConvolutionFilter":127,"./crosshatch/CrossHatchFilter":128,"./displacement/DisplacementFilter":129,"./dot/DotScreenFilter":130,"./dropshadow/DropShadowFilter":132,"./gray/GrayFilter":133,"./invert/InvertFilter":135,"./noise/NoiseFilter":136,"./pixelate/PixelateFilter":137,"./rgb/RGBSplitFilter":138,"./sepia/SepiaFilter":139,"./shockwave/ShockwaveFilter":140,"./tiltshift/TiltShiftFilter":142,"./tiltshift/TiltShiftXFilter":143,"./tiltshift/TiltShiftYFilter":144,"./twist/TwistFilter":145}],135:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27025,7 +27065,7 @@ } }); -},{"../../core":53}],135:[function(require,module,exports){ +},{"../../core":54}],136:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27080,7 +27120,7 @@ } }); -},{"../../core":53}],136:[function(require,module,exports){ +},{"../../core":54}],137:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27131,7 +27171,7 @@ } }); -},{"../../core":53}],137:[function(require,module,exports){ +},{"../../core":54}],138:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27217,7 +27257,7 @@ } }); -},{"../../core":53}],138:[function(require,module,exports){ +},{"../../core":54}],139:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27267,7 +27307,7 @@ } }); -},{"../../core":53}],139:[function(require,module,exports){ +},{"../../core":54}],140:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27355,7 +27395,7 @@ } }); -},{"../../core":53}],140:[function(require,module,exports){ +},{"../../core":54}],141:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27480,7 +27520,7 @@ } }); -},{"../../core":53}],141:[function(require,module,exports){ +},{"../../core":54}],142:[function(require,module,exports){ var core = require('../../core'), TiltShiftXFilter = require('./TiltShiftXFilter'), TiltShiftYFilter = require('./TiltShiftYFilter'); @@ -27590,7 +27630,7 @@ } }); -},{"../../core":53,"./TiltShiftXFilter":142,"./TiltShiftYFilter":143}],142:[function(require,module,exports){ +},{"../../core":54,"./TiltShiftXFilter":143,"./TiltShiftYFilter":144}],143:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27628,7 +27668,7 @@ this.uniforms.delta.value.y = dy / d; }; -},{"./TiltShiftAxisFilter":140}],143:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],144:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27666,7 +27706,7 @@ this.uniforms.delta.value.y = dx / d; }; -},{"./TiltShiftAxisFilter":140}],144:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],145:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27751,7 +27791,7 @@ } }); -},{"../../core":53}],145:[function(require,module,exports){ +},{"../../core":54}],146:[function(require,module,exports){ (function (global){ // run the polyfills require('./polyfill'); @@ -27784,7 +27824,7 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./accessibility":37,"./core":53,"./deprecation":109,"./extras":116,"./filters":133,"./interaction":148,"./loaders":151,"./mesh":158,"./polyfill":163}],146:[function(require,module,exports){ +},{"./accessibility":37,"./core":54,"./deprecation":110,"./extras":117,"./filters":134,"./interaction":149,"./loaders":152,"./mesh":159,"./polyfill":164}],147:[function(require,module,exports){ var core = require('../core'); /** @@ -27833,7 +27873,7 @@ return displayObject.worldTransform.applyInverse(globalPos || this.global, point); }; -},{"../core":53}],147:[function(require,module,exports){ +},{"../core":54}],148:[function(require,module,exports){ var core = require('../core'), InteractionData = require('./InteractionData'); @@ -28709,7 +28749,7 @@ core.WebGLRenderer.registerPlugin('interaction', InteractionManager); core.CanvasRenderer.registerPlugin('interaction', InteractionManager); -},{"../core":53,"./InteractionData":146,"./interactiveTarget":149}],148:[function(require,module,exports){ +},{"../core":54,"./InteractionData":147,"./interactiveTarget":150}],149:[function(require,module,exports){ /** * @file Main export of the PIXI interactions library * @author Mat Groves @@ -28726,7 +28766,7 @@ interactiveTarget: require('./interactiveTarget') }; -},{"./InteractionData":146,"./InteractionManager":147,"./interactiveTarget":149}],149:[function(require,module,exports){ +},{"./InteractionData":147,"./InteractionManager":148,"./interactiveTarget":150}],150:[function(require,module,exports){ /** * Default property values of interactive objects * used by {@link PIXI.interaction.InteractionManager}. @@ -28775,7 +28815,7 @@ module.exports = interactiveTarget; -},{}],150:[function(require,module,exports){ +},{}],151:[function(require,module,exports){ var Resource = require('resource-loader').Resource, core = require('../core'), extras = require('../extras'), @@ -28896,7 +28936,7 @@ }; }; -},{"../core":53,"../extras":116,"path":17,"resource-loader":31}],151:[function(require,module,exports){ +},{"../core":54,"../extras":117,"path":17,"resource-loader":31}],152:[function(require,module,exports){ /** * @file Main export of the PIXI loaders library * @author Mat Groves @@ -28917,7 +28957,7 @@ Resource: require('resource-loader').Resource }; -},{"./bitmapFontParser":150,"./loader":152,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],152:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./loader":153,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],153:[function(require,module,exports){ var ResourceLoader = require('resource-loader'), textureParser = require('./textureParser'), spritesheetParser = require('./spritesheetParser'), @@ -28979,7 +29019,7 @@ Resource.setExtensionXhrType('fnt', Resource.XHR_RESPONSE_TYPE.DOCUMENT); -},{"./bitmapFontParser":150,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],153:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],154:[function(require,module,exports){ var Resource = require('resource-loader').Resource, path = require('path'), core = require('../core'); @@ -29063,7 +29103,7 @@ }; }; -},{"../core":53,"path":17,"resource-loader":31}],154:[function(require,module,exports){ +},{"../core":54,"path":17,"resource-loader":31}],155:[function(require,module,exports){ var core = require('../core'); module.exports = function () @@ -29085,7 +29125,7 @@ }; }; -},{"../core":53}],155:[function(require,module,exports){ +},{"../core":54}],156:[function(require,module,exports){ var core = require('../core'), tempPoint = new core.Point(), tempPolygon = new core.Polygon(); @@ -29561,7 +29601,7 @@ TRIANGLES: 1 }; -},{"../core":53}],156:[function(require,module,exports){ +},{"../core":54}],157:[function(require,module,exports){ var Mesh = require('./Mesh'); /** @@ -29687,7 +29727,7 @@ } }; -},{"./Mesh":155}],157:[function(require,module,exports){ +},{"./Mesh":156}],158:[function(require,module,exports){ var Mesh = require('./Mesh'); var core = require('../core'); @@ -29900,7 +29940,7 @@ this.containerUpdateTransform(); }; -},{"../core":53,"./Mesh":155}],158:[function(require,module,exports){ +},{"../core":54,"./Mesh":156}],159:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -29919,7 +29959,7 @@ MeshShader: require('./webgl/MeshShader') }; -},{"./Mesh":155,"./Plane":156,"./Rope":157,"./webgl/MeshRenderer":159,"./webgl/MeshShader":160}],159:[function(require,module,exports){ +},{"./Mesh":156,"./Plane":157,"./Rope":158,"./webgl/MeshRenderer":160,"./webgl/MeshShader":161}],160:[function(require,module,exports){ var core = require('../../core'), Mesh = require('../Mesh'); @@ -30148,7 +30188,7 @@ core.ObjectRenderer.prototype.destroy.call(this); }; -},{"../../core":53,"../Mesh":155}],160:[function(require,module,exports){ +},{"../../core":54,"../Mesh":156}],161:[function(require,module,exports){ var core = require('../../core'); /** @@ -30209,7 +30249,7 @@ core.ShaderManager.registerPlugin('meshShader', MeshShader); -},{"../../core":53}],161:[function(require,module,exports){ +},{"../../core":54}],162:[function(require,module,exports){ // References: // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign @@ -30225,7 +30265,7 @@ }; } -},{}],162:[function(require,module,exports){ +},{}],163:[function(require,module,exports){ // References: // https://github.com/sindresorhus/object-assign // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign @@ -30235,12 +30275,12 @@ Object.assign = require('object-assign'); } -},{"object-assign":26}],163:[function(require,module,exports){ +},{"object-assign":26}],164:[function(require,module,exports){ require('./Object.assign'); require('./requestAnimationFrame'); require('./Math.sign'); -},{"./Math.sign":161,"./Object.assign":162,"./requestAnimationFrame":164}],164:[function(require,module,exports){ +},{"./Math.sign":162,"./Object.assign":163,"./requestAnimationFrame":165}],165:[function(require,module,exports){ (function (global){ // References: // http://paulirish.com/2011/requestanimationframe-for-smart-animating/ @@ -30311,8 +30351,8 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[145])(145) +},{}]},{},[146])(146) }); -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L1RyYW5zZm9ybS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL1dlYkdMR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZENpcmNsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ29tcGxleFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZExpbmUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9NYXRyaXguanMiLCJzcmMvY29yZS9tYXRoL1BvaW50LmpzIiwic3JjL2NvcmUvbWF0aC9pbmRleC5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0NpcmNsZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0VsbGlwc2UuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Qb2x5Z29uLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZUJ1ZmZlci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL1N5c3RlbVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcy5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9UZXh0dXJlTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9GWEFBRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1F1YWQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0LmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1N0ZW5jaWxNYXNrU3RhY2suanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvc3ByaXRlcy9TcHJpdGUuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL1Nwcml0ZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvc3ByaXRlcy93ZWJnbC9nZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3RleHQvVGV4dC5qcyIsInNyYy9jb3JlL3RleHR1cmVzL0Jhc2VSZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1RleHR1cmVVdnMuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGlja2VyL1RpY2tlci5qcyIsInNyYy9jb3JlL3RpY2tlci9pbmRleC5qcyIsInNyYy9jb3JlL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcy5qcyIsInNyYy9jb3JlL3V0aWxzL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvcGx1Z2luVGFyZ2V0LmpzIiwic3JjL2RlcHJlY2F0aW9uLmpzIiwic3JjL2V4dHJhcy9CaXRtYXBUZXh0LmpzIiwic3JjL2V4dHJhcy9Nb3ZpZUNsaXAuanMiLCJzcmMvZXh0cmFzL1RpbGluZ1Nwcml0ZS5qcyIsInNyYy9leHRyYXMvY2FjaGVBc0JpdG1hcC5qcyIsInNyYy9leHRyYXMvZ2V0Q2hpbGRCeU5hbWUuanMiLCJzcmMvZXh0cmFzL2dldEdsb2JhbFBvc2l0aW9uLmpzIiwic3JjL2V4dHJhcy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2FzY2lpL0FzY2lpRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmxvb20vQmxvb21GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJEaXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJYRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9CbHVyWUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvU21hcnRCbHVyRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvclN0ZXBGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kb3QvRG90U2NyZWVuRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZHJvcHNoYWRvdy9CbHVyWVRpbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ncmF5L0dyYXlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2ludmVydC9JbnZlcnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ub2lzZS9Ob2lzZUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcmdiL1JHQlNwbGl0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvc2VwaWEvU2VwaWFGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdEF4aXNGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3R3aXN0L1R3aXN0RmlsdGVyLmpzIiwic3JjL3NyYy9pbmRleC5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbkRhdGEuanMiLCJzcmMvaW50ZXJhY3Rpb24vSW50ZXJhY3Rpb25NYW5hZ2VyLmpzIiwic3JjL2ludGVyYWN0aW9uL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL2ludGVyYWN0aXZlVGFyZ2V0LmpzIiwic3JjL2xvYWRlcnMvYml0bWFwRm9udFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL2luZGV4LmpzIiwic3JjL2xvYWRlcnMvbG9hZGVyLmpzIiwic3JjL2xvYWRlcnMvc3ByaXRlc2hlZXRQYXJzZXIuanMiLCJzcmMvbG9hZGVycy90ZXh0dXJlUGFyc2VyLmpzIiwic3JjL21lc2gvTWVzaC5qcyIsInNyYy9tZXNoL1BsYW5lLmpzIiwic3JjL21lc2gvUm9wZS5qcyIsInNyYy9tZXNoL2luZGV4LmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFJlbmRlcmVyLmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFNoYWRlci5qcyIsInNyYy9wb2x5ZmlsbC9NYXRoLnNpZ24uanMiLCJzcmMvcG9seWZpbGwvT2JqZWN0LmFzc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9pbmRleC5qcyIsInNyYy9wb2x5ZmlsbC9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM1dUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbnNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25tQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0b0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6bUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIGNyZWF0ZUNvbnRleHQ6IFx0XHRcdHJlcXVpcmUoJy4vbGliL2NyZWF0ZUNvbnRleHQnKSxcbiAgICBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM6IFx0cmVxdWlyZSgnLi9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzJyksXG4gICAgXG4gICAgR0xCdWZmZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xCdWZmZXInKSxcbiAgICBHTEZyYW1lYnVmZmVyOiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9HTEZyYW1lYnVmZmVyJyksXG4gICAgR0xTaGFkZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xTaGFkZXInKSxcbiAgICBHTFRleHR1cmU6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xUZXh0dXJlJyksXG4gICAgXG4gICAgVmVydGV4QXJyYXlPYmplY3Q6IFx0XHRyZXF1aXJlKCcuL2xpYi9WZXJ0ZXhBcnJheU9iamVjdCcpXG5cbn07IiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRU1QVFlfQVJSQVlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xuXG52YXIgQnVmZmVyID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5BUlJBWV9CVUZGRVI7XG5cdHRoaXMuZHJhd1R5cGUgPSBkcmF3VHlwZSB8fCBnbC5TVEFUSUNfRFJBVztcblx0dGhpcy5kYXRhID0gRU1QVFlfQVJSQVlfQlVGRkVSO1xuXG5cdGlmKGRhdGEpXG5cdHtcblx0XHR0aGlzLnVwbG9hZChkYXRhKTtcblx0fVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKGRhdGEsIG9mZnNldCwgZG9udEJpbmQpXG57XG5cdC8vIHRvZG8gLSBuZWVkZWQ/XG5cdC8vaWYoIWRvbnRCaW5kKVxuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRcblx0ZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuXHRvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuXHRpZih0aGlzLmRhdGEuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpXG5cdHtcdFxuXHRcdGdsLmJ1ZmZlclN1YkRhdGEodGhpcy50eXBlLCBvZmZzZXQsIGRhdGEpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLCBkYXRhLCB0aGlzLmRyYXdUeXBlKTtcblx0fVxuXG5cdHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKTtcbn1cblxuQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIGdsLkFSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgdHlwZSwgZHJhd1R5cGUpO1xufVxuXG4vL1RPRE8gRGVzdHJveS4uXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyO1xuXG4iLCJcbnZhciBUZXh0dXJlID0gcmVxdWlyZSgnLi9HTFRleHR1cmUnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgRnJhbWVidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRnJhbWVidWZmZXIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcblx0dGhpcy5zdGVuY2lsID0gbnVsbDtcblx0dGhpcy50ZXh0dXJlID0gbnVsbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMTAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5lbmFibGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IG5ldyBUZXh0dXJlKGdsKTtcblxuXHR0aGlzLnRleHR1cmUuYmluZCgpO1xuXG5cdC8vZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlLnRleHR1cmUsIDApO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlU3RlbmNpbCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5zdGVuY2lsKXJldHVybjtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuc3RlbmNpbCA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgIFxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCB0aGlzLnN0ZW5jaWwpO1xuICAgIFxuICAgIC8vIFRPRE8uLiB0aGlzIGlzIGRlcHRoIEFORCBzdGVuY2lsP1xuICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTCwgIHRoaXMud2lkdGggICwgdGhpcy5oZWlnaHQgKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oIHIsIGcsIGIsIGEgKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIGdsLmNsZWFyQ29sb3IociwgZywgYiwgYSk7XG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZnJhbWVidWZmZXIgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdGlmICggdGhpcy50ZXh0dXJlIClcbiAgICB7XG4gICAgXHR0aGlzLnRleHR1cmUudXBsb2FkRGF0YShudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdGlmICggdGhpcy5zdGVuY2lsIClcbiAgICB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgc3RlbmNpbCBidWZmZXIgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlUkdCQSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHR2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbURhdGEoZ2wsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xuXHR0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSk7XG5cbiAgICBmYm8udW5iaW5kKCk7XG4gICAgXG4gICAgcmV0dXJuIGZibztcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlRmxvYXQzMiA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHQvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZS4uXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZS5mcm9tRGF0YShnbCwgZGF0YSwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpXG5cbiAgICBmYm8udW5iaW5kKCk7XG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lYnVmZmVyO1xuXG4iLCJcbnZhciBjb21waWxlUHJvZ3JhbSA9IHJlcXVpcmUoJy4vc2hhZGVyL2NvbXBpbGVQcm9ncmFtJyksXG5cdGV4dHJhY3RBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdEF0dHJpYnV0ZXMnKSxcblx0ZXh0cmFjdFVuaWZvcm1zID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdFVuaWZvcm1zJyksXG5cdGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IHJlcXVpcmUoJy4vc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCcpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBTaGFkZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xudmFyIFNoYWRlciA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0Ly8gRmlyc3QgY29tcGlsZSB0aGUgcHJvZ3JhbS4uXG5cdHRoaXMucHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXHQvLyBuZXh0IGV4dHJhY3QgdGhlIGF0dHJpYnV0ZXNcblx0dGhpcy5hdHRyaWJ1dGVzID0gZXh0cmFjdEF0dHJpYnV0ZXMoZ2wsIHRoaXMucHJvZ3JhbSk7IFxuXG4gICAgdmFyIHVuaWZvcm1EYXRhID0gZXh0cmFjdFVuaWZvcm1zKGdsLCB0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy51bmlmb3JtcyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCggZ2wsIHVuaWZvcm1EYXRhICk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgVGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBhIFdlYkdMIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gZm9ybWF0IHtudW1iZXJ9IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlJHQkFcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IHRoZSBnbCB0eXBlIG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5VTlNJR05FRF9CWVRFXG4gKi9cbnZhciBUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHQvLyBzb21lIHNldHRpbmdzLi5cblx0dGhpcy5taXBtYXAgPSBmYWxzZTtcblxuXHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdCB8fCBnbC5SR0JBO1xuXHR0aGlzLnR5cGUgPSB0eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7XG5cblxufVxuXG4vKipcbiAqIEBwYXJhbSB7UElYSS5nbENvcmUuVGV4dHVyZX0gW3Zhcm5hbWVdIFtkZXNjcmlwdGlvbl1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oc291cmNlKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblxuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgc291cmNlKTtcbn1cblxudmFyIEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IGZhbHNlO1xuXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWREYXRhID0gZnVuY3Rpb24oZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5iaW5kKCk7XG5cdFxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgdGhpcy53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG5cblx0aWYoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcblx0e1xuXHRcdGlmKCFGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUpXG5cdFx0e1xuXHRcdFx0dmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO1xuXHRcdFx0XG5cdFx0XHRpZihleHQpXG5cdFx0XHR7XG5cdFx0XHRcdEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHlwZSA9IGdsLkZMT0FUO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdC8vIFRPRE8gc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXNcblx0XHR0aGlzLnR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuXHR9XG5cblx0Ly8gd2hhdCB0eXBlIG9mIGRhdGE/XG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcblx0Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBkYXRhIHx8IG51bGwpO1xuXG59XG5cblRleHR1cmUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihsb2NhdGlvbilcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRpZihsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKVxuXHR7XG5cdFx0Z2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uKTtcblx0fVxuXG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1pbkZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGlmKHRoaXMubWlwbWFwKVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCk7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xuXHR9XHRcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWFnRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVNaXBtYXAgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHRoaXMubWlwbWFwID0gdHJ1ZTtcblx0Z2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZUxpbmVhclNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKHRydWUpO1xuXHR0aGlzLm1hZ0ZpbHRlcih0cnVlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTmVhcmVzdFNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKGZhbHNlKTtcblx0dGhpcy5tYWdGaWx0ZXIoZmFsc2UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwQ2xhbXAgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBSZXBlYXQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cdFxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5SRVBFQVQpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG59XG5cbi8vVGV4dHVyZS5cblRleHR1cmUuZnJvbVNvdXJjZSA9IGZ1bmN0aW9uKGdsLCBzb3VyY2UsIHByZW11bHRpcGx5QWxwaGEpXG57XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhIHx8IGZhbHNlO1xuXHR0ZXh0dXJlLnVwbG9hZChzb3VyY2UpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5UZXh0dXJlLmZyb21EYXRhID0gZnVuY3Rpb24oZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdC8vY29uc29sZS5sb2coZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnVwbG9hZERhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG4iLCJcbi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxuLy8gc3RhdGUgb2JqZWN0Ly9cblxuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChnbClcbntcblx0XG5cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gKFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpXG4gICAgKTtcblxuLy9cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gbnVsbDtcblxuXHRpZih0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbilcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvID0gdGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsgIFxuXHR9XG5cblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG5cdHRoaXMuZGlydHkgPSBmYWxzZTtcblxuXHRcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVydGV4QXJyYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFZlcnRleEFycmF5T2JqZWN0O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5uYXRpdmVWYW8pOyAgXG5cblx0XHRpZih0aGlzLmRpcnR5KVxuXHRcdHtcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0XHR9XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgXG5cdHtcblx0XHR2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW2ldO1xuXHRcdGF0dHJpYi5idWZmZXIuYmluZCgpO1x0XG5cblx0XHRhdHRyaWIuYXR0cmlidXRlLnBvaW50ZXIoYXR0cmliLnR5cGUsIGF0dHJpYi5ub3JtYWxpemVkLCBhdHRyaWIuc3RyaWRlLCBhdHRyaWIuc3RhcnQpOyBcblx0XHRcblx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWIuYXR0cmlidXRlLmxvY2F0aW9uKTtcblx0fTtcblxuXHR0aGlzLmluZGV4QnVmZmVyLmJpbmQoKTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgYXR0cmlidXRlLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXJ0KVxue1xuICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHtcbiAgICBcdGJ1ZmZlcjogXHRidWZmZXIsXG4gICAgXHRhdHRyaWJ1dGU6IFx0YXR0cmlidXRlLFxuXG4gICAgXHRsb2NhdGlvbjogXHRhdHRyaWJ1dGUubG9jYXRpb24sXG5cdCBcdHR5cGU6IFx0XHR0eXBlIHx8IHRoaXMuZ2wuRkxPQVQsXG5cdCBcdG5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWQgfHwgZmFsc2UsXG5cdCBcdHN0cmlkZTogXHRzdHJpZGUgfHwgMCxcblx0IFx0c3RhcnQ6IFx0XHRzdGFydCB8fCAwXG5cdH0pXG5cblx0dGhpcy5kaXJ0eSA9IHRydWU7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRpb25zKVxue1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBidWZmZXI7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHR5cGUsIHNpemUsIHN0YXJ0KVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5kcmF3RWxlbWVudHModHlwZSwgc2l6ZSwgZ2wuVU5TSUdORURfU0hPUlQsIHN0YXJ0KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBDb250ZXh0XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIENPTlRFWFRfVUlEID0gMDtcblxudmFyIGNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbihjYW52YXMsIG9wdGlvbnMpXG57XG4gICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRpb25zKSB8fCBcbiAgICBcdCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdsKVxuICAgIHtcbiAgICAgICAgLy8gZmFpbCwgbm90IGFibGUgdG8gZ2V0IGEgY29udGV4dFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHdlYkdMLiBUcnkgdXNpbmcgdGhlIGNhbnZhcyByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIC8vIG1pZ2h0IHdhbnQgdG8gcGhhc2UgdGhpcyBvdXQ/XG4gICAgZ2wuaWQgPSBDT05URVhUX1VJRCsrO1xuXG4gICAgcmV0dXJuIGdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbnRleHQ7XG5cbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBzZXRWZXJ0ZXhBdHRyaWJBcnJheXMgPSBmdW5jdGlvbiAoZ2wsIGF0dHJpYnMpXG57XHRcbiAgIC8vIGNvbnNvbGUubG9nKGdsLmlkKVxuICAgIHZhciBkYXRhID0gR0xfTUFQW2dsLmlkXTtcblxuICAgIGlmKCFkYXRhKVxuICAgIHtcblx0ICAgdmFyIG1heEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0XHRkYXRhID0gR0xfTUFQW2dsLmlkXSA9IHt0ZW1wQXR0cmliU3RhdGU6bmV3IEFycmF5KG1heEF0dHJpYnMpXG5cdFx0XHRcdCBcdCBcdFx0ICAgLGF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKX07XG5cdH1cblx0XG4gICAgdmFyIGksXG4gICAgXHR0ZW1wQXR0cmliU3RhdGUgPSBkYXRhLnRlbXBBdHRyaWJTdGF0ZSxcbiAgICBcdGF0dHJpYlN0YXRlID0gZGF0YS5hdHRyaWJTdGF0ZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wQXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yIChpIGluIGF0dHJpYnMpXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbYXR0cmlic1tpXS5sb2NhdGlvbl0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDE7IGkgPCBhdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChhdHRyaWJTdGF0ZVtpXSAhPT0gdGVtcEF0dHJpYlN0YXRlW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJTdGF0ZVtpXSA9IHRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM7IiwiXG5cblxuXG5jb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuICAgIHZhciBnbFZlcnRTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbnZhciBjb21waWxlU2hhZGVyID0gZnVuY3Rpb24gKGdsLCB0eXBlLCBzcmMpXG57XG4gICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuXG4gICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlUHJvZ3JhbTtcblxuIiwiXG5cbnZhciBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBzaXplKSBcbntcbiAgICBzd2l0Y2ggKHR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICBjYXNlICd2ZWMyJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjNCc6ICAgICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KDQgKiBzaXplKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnaXZlYzInOiAgIFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDIgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWM0JzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2wnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY2FzZSAnYnZlYzInOlxuXG4gICAgICAgICAgICByZXR1cm4gYm9vbGVhbkFycmF5KCAyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzQnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSg0ICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDFdKTtcblxuICAgICAgICBjYXNlICdtYXQzJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0NCc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMCwgMV0pO1xuICAgIH1cbn1cblxudmFyIGJvb2xlYW5BcnJheSA9IGZ1bmN0aW9uKHNpemUpXG57XG4gICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgXG4gICAge1xuICAgICAgICBhcnJheVtpXSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdFZhbHVlO1xuIiwiXG52YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIG1hcFNpemUgPSByZXF1aXJlKCcuL21hcFNpemUnKTtcblxudmFyIGV4dHJhY3RBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcblxuICAgIHZhciB0b3RhbEF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9BVFRSSUJVVEVTKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEF0dHJpYnV0ZXM7IGkrKykgXG4gICAge1xuICAgICAgICB2YXIgYXR0cmliRGF0YSA9IGdsLmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpKTtcbiAgICAgICAgdmFyIHR5cGUgPSBtYXBUeXBlKGdsLCBhdHRyaWJEYXRhLnR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNbYXR0cmliRGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgIHR5cGU6dHlwZSxcbiAgICAgICAgICAgIHNpemU6bWFwU2l6ZSh0eXBlKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOmdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGF0dHJpYkRhdGEubmFtZSksXG4gICAgICAgICAgICAvL1RPRE8gLSBtYWtlIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAgICAgICAgICAgIHBvaW50ZXI6ZnVuY3Rpb24odHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydCl7XG5cbiAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmxvY2F0aW9uLHRoaXMuc2l6ZSwgdHlwZSB8fCBnbC5GTE9BVCwgbm9ybWFsaXplZCB8fCBmYWxzZSwgc3RyaWRlIHx8IDAsIHN0YXJ0IHx8IDApOyBcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzOyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0cmFjdEF0dHJpYnV0ZXM7XG5cbiIsInZhciBtYXBUeXBlID0gcmVxdWlyZSgnLi9tYXBUeXBlJyk7XG52YXIgZGVmYXVsdFZhbHVlID0gcmVxdWlyZSgnLi9kZWZhdWx0VmFsdWUnKTtcblxuXG52YXIgZXh0cmFjdFVuaWZvcm1zID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG5cdHZhciB1bmlmb3JtcyA9IHt9O1xuXHRcbiAgICB2YXIgdG90YWxVbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbFVuaWZvcm1zOyBpKyspIFxuICAgIHtcbiAgICBcdHZhciB1bmlmb3JtRGF0YSA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSk7XG4gICAgXHR2YXIgbmFtZSA9IHVuaWZvcm1EYXRhLm5hbWUucmVwbGFjZSgvXFxbLio/XFxdLywgXCJcIik7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgdW5pZm9ybURhdGEudHlwZSApO1xuXG4gICAgXHR1bmlmb3Jtc1tuYW1lXSA9IHtcbiAgICBcdFx0dHlwZTp0eXBlLFxuICAgIFx0XHRzaXplOnVuaWZvcm1EYXRhLnNpemUsXG4gICAgXHRcdGxvY2F0aW9uOmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSxcbiAgICBcdFx0dmFsdWU6ZGVmYXVsdFZhbHVlKHR5cGUsIHVuaWZvcm1EYXRhLnNpemUpXG4gICAgXHR9XG4gICAgfTtcblx0XG5cdHJldHVybiB1bmlmb3JtcztcdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RVbmlmb3JtcztcblxuIiwiXG52YXIgZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gZnVuY3Rpb24oZ2wsIHVuaWZvcm1EYXRhKVxue1xuICAgIC8vIHRoaXMgaXMgdGhlIG9iamVjdCB3ZSB3aWxsIGJlIHNlbmRpbmcgYmFjay5cbiAgICAvLyBhbiBvYmplY3QgaGllcmFjaHkgd2lsbCBiZSBjcmVhdGVkIGZvciBzdHJ1Y3RzXG4gICAgdmFyIHVuaWZvcm1zID0ge2RhdGE6e319O1xuXG4gICAgdW5pZm9ybXMuZ2wgPSBnbDtcbiAgICBcbiAgICB2YXIgdW5pZm9ybUtleXM9IE9iamVjdC5rZXlzKHVuaWZvcm1EYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybUtleXMubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGZ1bGxOYW1lID0gdW5pZm9ybUtleXNbaV1cblxuICAgICAgICB2YXIgbmFtZVRva2VucyA9IGZ1bGxOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHZhciB1bmlmb3JtR3JvdXAgPSBnZXRVbmlmb3JtR3JvdXAobmFtZVRva2VucywgdW5pZm9ybXMpO1xuXG4gICAgICAgIHZhciB1bmlmb3JtID0gIHVuaWZvcm1EYXRhW2Z1bGxOYW1lXTtcbiAgICAgICAgdW5pZm9ybUdyb3VwLmRhdGFbbmFtZV0gPSB1bmlmb3JtO1xuXG4gICAgICAgIHVuaWZvcm1Hcm91cC5nbCA9IGdsO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bmlmb3JtR3JvdXAsIG5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2VuZXJhdGVHZXR0ZXIobmFtZSksXG4gICAgICAgICAgICBzZXQ6IGdlbmVyYXRlU2V0dGVyKG5hbWUsIHVuaWZvcm0pXG4gICAgICAgIH0pXG4gICAgfTtcblxuICAgIHJldHVybiB1bmlmb3Jtcztcbn1cblxudmFyIGdlbmVyYXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSlcbntcblx0dmFyIHRlbXBsYXRlID0gZ2V0dGVyVGVtcGxhdGUucmVwbGFjZSgnJSUnLCBuYW1lKTtcblx0cmV0dXJuIG5ldyBGdW5jdGlvbih0ZW1wbGF0ZSk7XG59XG5cbnZhciBnZW5lcmF0ZVNldHRlciA9IGZ1bmN0aW9uKG5hbWUsIHVuaWZvcm0pXG57XG4gICAgdmFyIHRlbXBsYXRlID0gc2V0dGVyVGVtcGxhdGUucmVwbGFjZSgvJSUvZywgbmFtZSk7XG4gICAgdmFyIHNldFRlbXBsYXRlXG4gICAgXG4gICAgaWYodW5pZm9ybS5zaXplID09PSAxKVxuICAgIHtcbiAgICAgICAgc2V0VGVtcGxhdGUgPSBHTFNMX1RPX1NJTkdMRV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19BUlJBWV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuXG4gICAgaWYoc2V0VGVtcGxhdGUpXG4gICAge1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIlxcbnRoaXMuZ2wuXCIgKyBzZXRUZW1wbGF0ZSArIFwiO1wiO1xuICAgIH1cblxuICBcdHJldHVybiBuZXcgRnVuY3Rpb24oJ3ZhbHVlJywgdGVtcGxhdGUpO1xufVxuXG52YXIgZ2V0VW5pZm9ybUdyb3VwID0gZnVuY3Rpb24obmFtZVRva2VucywgdW5pZm9ybSlcbntcbiAgICB2YXIgY3VyID0gdW5pZm9ybTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZVRva2Vucy5sZW5ndGggLSAxOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIG8gPSBjdXJbbmFtZVRva2Vuc1tpXV0gfHwge2RhdGE6e319O1xuICAgICAgICBjdXJbbmFtZVRva2Vuc1tpXV0gPSBvO1xuICAgICAgICBjdXIgPSBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gY3VyXG59XG5cbnZhciBnZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAncmV0dXJuIHRoaXMuZGF0YS4lJS52YWx1ZTsnLFxuXS5qb2luKCdcXG4nKTtcblxudmFyIHNldHRlclRlbXBsYXRlID0gW1xuICAgICd0aGlzLmRhdGEuJSUudmFsdWUgPSB2YWx1ZTsnLFxuICAgICd2YXIgbG9jYXRpb24gPSB0aGlzLmRhdGEuJSUubG9jYXRpb247J1xuXS5qb2luKCdcXG4nKTtcblxuXG52YXIgR0xTTF9UT19TSU5HTEVfU0VUVEVSUyA9IHtcblxuICAgICdmbG9hdCc6ICAgICd1bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ3ZlYzQnOiAgICAgJ3VuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdidmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdidmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ21hdDInOiAgICAgJ3VuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuICAgICdtYXQzJzogICAgICd1bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0NCc6ICAgICAndW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG5cbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbnZhciBHTFNMX1RPX0FSUkFZX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpJyxcblxuICAgICd2ZWMyJzogICAgICd1bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWMzJzogICAgICd1bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgIFx0XG4gICAgJ2ludCc6ICAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgIFxuICAgICdzYW1wbGVyMkQnOid1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0O1xuXG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbih0eXBlKSBcbnsgXG4gICAgcmV0dXJuIEdMU0xfVE9fU0laRVt0eXBlXTtcbn1cblxuXG52YXIgR0xTTF9UT19TSVpFID0ge1xuICAgICdmbG9hdCc6ICAgIDEsXG4gICAgJ3ZlYzInOiAgICAgMixcbiAgICAndmVjMyc6ICAgICAzLFxuICAgICd2ZWM0JzogICAgIDQsXG5cbiAgICAnaW50JzogICAgICAxLFxuICAgICdpdmVjMic6ICAgIDIsXG4gICAgJ2l2ZWMzJzogICAgMyxcbiAgICAnaXZlYzQnOiAgICA0LFxuXG4gICAgJ2Jvb2wnOiAgICAgMSxcbiAgICAnYnZlYzInOiAgICAyLFxuICAgICdidmVjMyc6ICAgIDMsXG4gICAgJ2J2ZWM0JzogICAgNCxcblxuICAgICdtYXQyJzogICAgIDQsXG4gICAgJ21hdDMnOiAgICAgOSxcbiAgICAnbWF0NCc6ICAgICAxNixcblxuICAgICdzYW1wbGVyMkQnOiAgMVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFNpemU7XG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbihnbCwgdHlwZSkgXG57XG4gICAgaWYoIUdMX1RBQkxFKSBcbiAgICB7XG4gICAgICAgIHZhciB0eXBlTmFtZXMgPSBPYmplY3Qua2V5cyhHTF9UT19HTFNMX1RZUEVTKTtcblxuICAgICAgICBHTF9UQUJMRSA9IHt9O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlTmFtZXMubGVuZ3RoOyArK2kpIFxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdG4gPSB0eXBlTmFtZXNbaV07XG4gICAgICAgICAgICBHTF9UQUJMRVsgZ2xbdG5dIF0gPSBHTF9UT19HTFNMX1RZUEVTW3RuXTtcbiAgICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gR0xfVEFCTEVbdHlwZV07XG59XG5cbnZhciBHTF9UQUJMRSA9IG51bGw7XG5cbnZhciBHTF9UT19HTFNMX1RZUEVTID0ge1xuICAnRkxPQVQnOiAgICAgICAnZmxvYXQnLFxuICAnRkxPQVRfVkVDMic6ICAndmVjMicsXG4gICdGTE9BVF9WRUMzJzogICd2ZWMzJyxcbiAgJ0ZMT0FUX1ZFQzQnOiAgJ3ZlYzQnLFxuXG4gICdJTlQnOiAgICAgICAgICdpbnQnLFxuICAnSU5UX1ZFQzInOiAgICAnaXZlYzInLFxuICAnSU5UX1ZFQzMnOiAgICAnaXZlYzMnLFxuICAnSU5UX1ZFQzQnOiAgICAnaXZlYzQnLFxuICBcbiAgJ0JPT0wnOiAgICAgICAgJ2Jvb2wnLFxuICAnQk9PTF9WRUMyJzogICAnYnZlYzInLFxuICAnQk9PTF9WRUMzJzogICAnYnZlYzMnLFxuICAnQk9PTF9WRUM0JzogICAnYnZlYzQnLFxuICBcbiAgJ0ZMT0FUX01BVDInOiAgJ21hdDInLFxuICAnRkxPQVRfTUFUMyc6ICAnbWF0MycsXG4gICdGTE9BVF9NQVQ0JzogICdtYXQ0JyxcbiAgXG4gICdTQU1QTEVSXzJEJzogICdzYW1wbGVyMkQnICBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiLyohXG4gKiBhc3luY1xuICogaHR0cHM6Ly9naXRodWIuY29tL2Nhb2xhbi9hc3luY1xuICpcbiAqIENvcHlyaWdodCAyMDEwLTIwMTQgQ2FvbGFuIE1jTWFob25cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9Cb29sKHYpIHtcbiAgICAgICAgcmV0dXJuICEhdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90SWQodikge1xuICAgICAgICByZXR1cm4gIXY7XG4gICAgfVxuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBwcmV2aW91c19hc3luYztcblxuICAgIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAgIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICAgIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsIHx8XG4gICAgICAgICAgICB0aGlzO1xuXG4gICAgaWYgKHJvb3QgIT0gbnVsbCkge1xuICAgICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsaXR5IGZ1bmN0aW9ucyAvLy8vXG5cbiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIHZhciBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xuXG4gICAgLy8gUG9ydGVkIGZyb20gdW5kZXJzY29yZS5qcyBpc09iamVjdFxuICAgIHZhciBfaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2lzQXJyYXlMaWtlKGFycikge1xuICAgICAgICByZXR1cm4gX2lzQXJyYXkoYXJyKSB8fCAoXG4gICAgICAgICAgICAvLyBoYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAgICAgICAgdHlwZW9mIGFyci5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgICAgYXJyLmxlbmd0aCAlIDEgPT09IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXJyYXlFYWNoKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaW5kZXhdLCBpbmRleCwgYXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IGFyci5sZW5ndGgsXG4gICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcmFuZ2UoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9tYXAoQXJyYXkoY291bnQpLCBmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gaTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZHVjZShhcnIsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgIF9hcnJheUVhY2goYXJyLCBmdW5jdGlvbiAoeCwgaSwgYSkge1xuICAgICAgICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHgsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZvckVhY2hPZihvYmplY3QsIGl0ZXJhdG9yKSB7XG4gICAgICAgIF9hcnJheUVhY2goX2tleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaXRlcmF0b3Iob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbmRleE9mKGFyciwgaXRlbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9rZXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW47XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBpZiAoX2lzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGkgOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBfa2V5cyhjb2xsKTtcbiAgICAgICAgICAgIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ga2V5c1tpXSA6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2ltaWxhciB0byBFUzYncyByZXN0IHBhcmFtIChodHRwOi8vYXJpeWEub2ZpbGFicy5jb20vMjAxMy8wMy9lczYtYW5kLXJlc3QtcGFyYW1ldGVyLmh0bWwpXG4gICAgLy8gVGhpcyBhY2N1bXVsYXRlcyB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGFuIGFycmF5LCBhZnRlciBhIGdpdmVuIGluZGV4LlxuICAgIC8vIEZyb20gdW5kZXJzY29yZS5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMjE0MCkuXG4gICAgZnVuY3Rpb24gX3Jlc3RQYXJhbShmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IHVudXNlZCBidXQgaGFuZGxlIGNhc2VzIG91dHNpZGUgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQ6XG4gICAgICAgICAgICAvLyB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgIC8vIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIC8vICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgICAgICAgIC8vIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IodmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG5cbiAgICAvLyBjYXB0dXJlIHRoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIGd1YXJkIGFnYWluc3QgZmFrZVRpbWVyIG1vY2tzXG4gICAgdmFyIF9zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcblxuICAgIHZhciBfZGVsYXkgPSBfc2V0SW1tZWRpYXRlID8gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgX3NldEltbWVkaWF0ZShmbik7XG4gICAgfSA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IF9kZWxheTtcbiAgICB9XG4gICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gX3NldEltbWVkaWF0ZSA/IF9kZWxheSA6IGFzeW5jLm5leHRUaWNrO1xuXG5cbiAgICBhc3luYy5mb3JFYWNoID1cbiAgICBhc3luYy5lYWNoID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2YoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID1cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cblxuICAgIGFzeW5jLmZvckVhY2hMaW1pdCA9XG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2VhY2hPZkxpbWl0KGxpbWl0KShhcnIsIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZiA9XG4gICAgYXN5bmMuZWFjaE9mID0gZnVuY3Rpb24gKG9iamVjdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdCB8fCBbXTtcblxuICAgICAgICB2YXIgaXRlciA9IF9rZXlJdGVyYXRvcihvYmplY3QpO1xuICAgICAgICB2YXIga2V5LCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgICAgIHdoaWxlICgoa2V5ID0gaXRlcigpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXksIG9ubHlfb25jZShkb25lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkID09PSAwKSBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgICAgY29tcGxldGVkLS07XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGtleSBpcyBudWxsIGluIGNhc2UgaXRlcmF0b3IgaXNuJ3QgZXhoYXVzdGVkXG4gICAgICAgICAgICAvLyBhbmQgZG9uZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBudWxsICYmIGNvbXBsZXRlZCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaE9mU2VyaWVzID1cbiAgICBhc3luYy5lYWNoT2ZTZXJpZXMgPSBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShpdGVyYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLmZvckVhY2hPZkxpbWl0ID1cbiAgICBhc3luYy5lYWNoT2ZMaW1pdCA9IGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgX2VhY2hPZkxpbWl0KGxpbWl0KShvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9lYWNoT2ZMaW1pdChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgICAgICBvYmogPSBvYmogfHwgW107XG4gICAgICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUgJiYgcnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmICFlcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBuZXh0S2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iob2JqW2tleV0sIGtleSwgb25seV9vbmNlKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZG9QYXJhbGxlbChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oYXN5bmMuZWFjaE9mLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWxMaW1pdChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKF9lYWNoT2ZMaW1pdChsaW1pdCksIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9TZXJpZXMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZlNlcmllcywgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UoYXJyKSA/IFtdIDoge307XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih2YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9hc3luY01hcCk7XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMuaW5qZWN0ID1cbiAgICBhc3luYy5mb2xkbCA9XG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hPZlNlcmllcyhhcnIsIGZ1bmN0aW9uICh4LCBpLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgeCwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBtZW1vKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvbGRyID1cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgaWRlbnRpdHkpLnJldmVyc2UoKTtcbiAgICAgICAgYXN5bmMucmVkdWNlKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0b3I7XG4gICAgICAgICAgICBpdGVyYXRvciA9IG1lbW87XG4gICAgICAgICAgICBtZW1vID0gX2lzQXJyYXkoYXJyKSA/IFtdIDoge307XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoT2YoYXJyLCBmdW5jdGlvbih2LCBrLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgdiwgaywgY2IpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4OiBpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5zZWxlY3QgPVxuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RMaW1pdCA9XG4gICAgYXN5bmMuZmlsdGVyTGltaXQgPSBkb1BhcmFsbGVsTGltaXQoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RTZXJpZXMgPVxuICAgIGFzeW5jLmZpbHRlclNlcmllcyA9IGRvU2VyaWVzKF9maWx0ZXIpO1xuXG4gICAgZnVuY3Rpb24gX3JlamVjdChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9maWx0ZXIoZWFjaGZuLCBhcnIsIGZ1bmN0aW9uKHZhbHVlLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBjYighdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBhc3luYy5yZWplY3QgPSBkb1BhcmFsbGVsKF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdFNlcmllcyA9IGRvU2VyaWVzKF9yZWplY3QpO1xuXG4gICAgZnVuY3Rpb24gX2NyZWF0ZVRlc3RlcihlYWNoZm4sIGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYikge1xuICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIGNiKGdldFJlc3VsdChmYWxzZSwgdm9pZCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZSh4LCBfLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYiAmJiBjaGVjayh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoZ2V0UmVzdWx0KHRydWUsIHgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgZWFjaGZuKGFyciwgbGltaXQsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2IgPSBpdGVyYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGxpbWl0O1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy5hbnkgPVxuICAgIGFzeW5jLnNvbWUgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5zb21lTGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCB0b0Jvb2wsIGlkZW50aXR5KTtcblxuICAgIGFzeW5jLmFsbCA9XG4gICAgYXN5bmMuZXZlcnkgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgbm90SWQsIG5vdElkKTtcblxuICAgIGFzeW5jLmV2ZXJ5TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBub3RJZCwgbm90SWQpO1xuXG4gICAgZnVuY3Rpb24gX2ZpbmRHZXRSZXN1bHQodiwgeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgYXN5bmMuZGV0ZWN0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0U2VyaWVzID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZTZXJpZXMsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuXG4gICAgYXN5bmMuc29ydEJ5ID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLm1hcChhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKGVyciwgY3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7dmFsdWU6IHgsIGNyaXRlcmlhOiBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChjb21wYXJhdG9yKSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNvbmN1cnJlbmN5LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gcmVtYWluaW5nVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBfaW5kZXhPZihsaXN0ZW5lcnMsIGZuKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRhc2tDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLS07XG4gICAgICAgICAgICBfYXJyYXlFYWNoKGxpc3RlbmVycy5zbGljZSgwKSwgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBfYXJyYXlFYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9mb3JFYWNoT2YocmVzdWx0cywgZnVuY3Rpb24odmFsLCBya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHRhc2tDb21wbGV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRlYWQtbG9ja3NcbiAgICAgICAgICAgIHZhciBsZW4gPSByZXF1aXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZGVwO1xuICAgICAgICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZGVwID0gdGFza3NbcmVxdWlyZXNbbGVuXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGluZXhpc3RhbnQgZGVwZW5kZW5jeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzQXJyYXkoZGVwKSAmJiBfaW5kZXhPZihkZXAsIGspID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXMgY3ljbGljIGRlcGVuZGVuY2llcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5uaW5nVGFza3MgPCBjb25jdXJyZW5jeSAmJiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzKys7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLnJldHJ5ID0gZnVuY3Rpb24odGltZXMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBERUZBVUxUX1RJTUVTID0gNTtcbiAgICAgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuXG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbDogREVGQVVMVF9JTlRFUlZBTFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KXtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0ID09PSAnbnVtYmVyJyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodCwgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYodHlwZW9mIHQgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBhY2MudGltZXMgPSBwYXJzZUludCh0LnRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgICAgICAgICBhY2MuaW50ZXJ2YWwgPSBwYXJzZUludCh0LmludGVydmFsLCAxMCkgfHwgREVGQVVMVF9JTlRFUlZBTDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGZvciBcXCd0aW1lc1xcJzogJyArIHR5cGVvZiB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgMSB8fCBsZW5ndGggPiAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIC0gbXVzdCBiZSBlaXRoZXIgKHRhc2spLCAodGFzaywgY2FsbGJhY2spLCAodGltZXMsIHRhc2spIG9yICh0aW1lcywgdGFzaywgY2FsbGJhY2spJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoIDw9IDIgJiYgdHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRzLCB0aW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBvcHRzLnRhc2sgPSB0YXNrO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRUYXNrKHdyYXBwZWRDYWxsYmFjaywgd3JhcHBlZFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCh0YXNrLCBmaW5hbEF0dGVtcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VyaWVzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayhmdW5jdGlvbihlcnIsIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXNDYWxsYmFjayghZXJyIHx8IGZpbmFsQXR0ZW1wdCwge2VycjogZXJyLCByZXN1bHQ6IHJlc3VsdH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVkUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmV0cnlJbnRlcnZhbChpbnRlcnZhbCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAob3B0cy50aW1lcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsQXR0ZW1wdCA9ICEob3B0cy50aW1lcy09MSk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQob3B0cy50YXNrLCBmaW5hbEF0dGVtcHQpKTtcbiAgICAgICAgICAgICAgICBpZighZmluYWxBdHRlbXB0ICYmIG9wdHMuaW50ZXJ2YWwgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUludGVydmFsKG9wdHMuaW50ZXJ2YWwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IG9wdHMuY2FsbGJhY2spKGRhdGEuZXJyLCBkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIG9wdHMuY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2s7XG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBJdGVyYXRvcihpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgW2Vycl0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuc3VyZUFzeW5jKGl0ZXJhdG9yKS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfcGFyYWxsZWwoZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IF9pc0FycmF5TGlrZSh0YXNrcykgPyBbXSA6IHt9O1xuXG4gICAgICAgIGVhY2hmbih0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGtleSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRhc2soX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2YsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChfZWFjaE9mTGltaXQobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKGFzeW5jLmVhY2hPZlNlcmllcywgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuaXRlcmF0b3IgPSBmdW5jdGlvbiAodGFza3MpIHtcbiAgICAgICAgZnVuY3Rpb24gbWFrZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm4ubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgdGFza3MubGVuZ3RoIC0gMSkgPyBtYWtlQ2FsbGJhY2soaW5kZXggKyAxKTogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIChmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoY2FsbEFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLCBhcmdzLmNvbmNhdChjYWxsQXJncylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gX2NvbmNhdChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoeSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG4gICAgICAgIGlmICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0LmFwcGx5KHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1doaWxzdCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiArK2NhbGxzIDw9IDEgfHwgdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZHVyaW5nID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG5cbiAgICAgICAgdmFyIG5leHQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjaGVjayk7XG4gICAgICAgICAgICAgICAgdGVzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24oZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRydXRoKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QoY2hlY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb0R1cmluZyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgYXN5bmMuZHVyaW5nKGZ1bmN0aW9uKG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjYWxscysrIDwgMSkge1xuICAgICAgICAgICAgICAgIG5leHQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3F1ZXVlKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHBvcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayB8fCBub29wXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9uZXh0KHEsIHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIF9hcnJheUVhY2godGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2god29ya2Vyc0xpc3QsIGZ1bmN0aW9uICh3b3JrZXIsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya2VyID09PSB0YXNrICYmICFyZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBub29wLFxuICAgICAgICAgICAgZW1wdHk6IG5vb3AsXG4gICAgICAgICAgICBkcmFpbjogbm9vcCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5kcmFpbiA9IG5vb3A7XG4gICAgICAgICAgICAgICAgcS50YXNrcyA9IFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnQ6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrcyA9IHEucGF5bG9hZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS5wYXlsb2FkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS50YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9tYXAodGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5wdXNoKHRhc2tzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShfbmV4dChxLCB0YXNrcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyKGRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtlcnNMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSBmYWxzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bWVDb3VudCA9IE1hdGgubWluKHEuY29uY3VycmVuY3ksIHEudGFza3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHJlc3VtZUNvdW50OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBxID0gX3F1ZXVlKGZ1bmN0aW9uIChpdGVtcywgY2IpIHtcbiAgICAgICAgICAgIHdvcmtlcihpdGVtc1swXSwgY2IpO1xuICAgICAgICB9LCBjb25jdXJyZW5jeSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLnByaW9yaXR5UXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuXG4gICAgICAgIGZ1bmN0aW9uIF9jb21wYXJlVGFza3MoYSwgYil7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgICB2YXIgYmVnID0gLTEsXG4gICAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgc2VxdWVuY2VbbWlkXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWcgPSBtaWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmVnO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBfcXVldWUod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2NvbnNvbGVfZm4obmFtZSkge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2goYXJncywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlW25hbWVdKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgaWRlbnRpdHk7XG4gICAgICAgIHZhciBtZW1vaXplZCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24gbWVtb2l6ZWQoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBtZW1vW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0gPSBbY2FsbGJhY2tdO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW9ba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH07XG5cbiAgICBhc3luYy51bm1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3RpbWVzKG1hcHBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG1hcHBlcihfcmFuZ2UoY291bnQpLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jLnRpbWVzID0gX3RpbWVzKGFzeW5jLm1hcCk7XG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBfdGltZXMoYXN5bmMubWFwU2VyaWVzKTtcbiAgICBhc3luYy50aW1lc0xpbWl0ID0gZnVuY3Rpb24gKGNvdW50LCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5tYXBMaW1pdChfcmFuZ2UoY291bnQpLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VxID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5vb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnJlZHVjZShmbnMsIGFyZ3MsIGZ1bmN0aW9uIChuZXdhcmdzLCBmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBuZXdhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBuZXh0YXJncykge1xuICAgICAgICAgICAgICAgICAgICBjYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY29tcG9zZSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIF9hcHBseUVhY2goZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uKGZucywgYXJncykge1xuICAgICAgICAgICAgdmFyIGdvID0gX3Jlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgXywgY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncy5jb25jYXQoW2NiXSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ28uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ287XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmFwcGx5RWFjaCA9IF9hcHBseUVhY2goYXN5bmMuZWFjaE9mKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZlNlcmllcyk7XG5cblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seV9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIgdGFzayA9IGVuc3VyZUFzeW5jKGZuKTtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmVuc3VyZUFzeW5jID0gZW5zdXJlQXN5bmM7XG5cbiAgICBhc3luYy5jb25zdGFudCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICAgIHZhciBhcmdzID0gW251bGxdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhc3luYy53cmFwU3luYyA9XG4gICAgYXN5bmMuYXN5bmNpZnkgPSBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChfaXNPYmplY3QocmVzdWx0KSAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIubWVzc2FnZSA/IGVyciA6IG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcblxuICAgIGRpbSA9IGRpbSB8fCAyO1xuXG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLFxuICAgICAgICBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcbiAgICAgICAgdHJpYW5nbGVzID0gW107XG5cbiAgICBpZiAoIW91dGVyTm9kZSkgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBzaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgc2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIHN1bSA9IDAsXG4gICAgICAgIGksIGosIGxhc3Q7XG5cbiAgICAvLyBjYWxjdWxhdGUgb3JpZ2luYWwgd2luZGluZyBvcmRlciBvZiBhIHBvbHlnb24gcmluZ1xuICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuXG4gICAgLy8gbGluayBwb2ludHMgaW50byBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHN1bSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG4gICAgaWYgKCFzdGFydCkgcmV0dXJuIHN0YXJ0O1xuICAgIGlmICghZW5kKSBlbmQgPSBzdGFydDtcblxuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcCA9IGVuZCA9IHAucHJldjtcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuICAgIHJldHVybiBlbmQ7XG59XG5cbi8vIG1haW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBhcyBhIGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIHBhc3MpIHtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuICAgIGlmICghcGFzcyAmJiBzaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICB2YXIgc3RvcCA9IGVhcixcbiAgICAgICAgcHJldiwgbmV4dDtcblxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuICAgIHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcbiAgICAgICAgcHJldiA9IGVhci5wcmV2O1xuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XG5cbiAgICAgICAgaWYgKHNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIHNpemUpIDogaXNFYXIoZWFyKSkge1xuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXG4gICAgICAgICAgICByZW1vdmVOb2RlKGVhcik7XG5cbiAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRpY2UgbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhlYXIsIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIHNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICAvLyBmaXJzdCBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBpbmNyZWFzaW5nIHotb3JkZXJcbiAgICB2YXIgcCA9IGVhci5uZXh0WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyB0aGVuIGxvb2sgZm9yIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICBwID0gZWFyLnByZXZaO1xuXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgLy8gYSBzZWxmLWludGVyc2VjdGlvbiB3aGVyZSBlZGdlICh2W2ktMV0sdltpXSkgaW50ZXJzZWN0cyAodltpKzFdLHZbaSsyXSlcbiAgICAgICAgaWYgKGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHA7XG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBsb29rIGZvciBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgICAgICAgICBhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiA9IGIubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBhID0gYS5uZXh0O1xuICAgIH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG4gICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuICAgICAgICBpZiAobGlzdCA9PT0gbGlzdC5uZXh0KSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuICAgICAgICBxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcbiAgICB9XG5cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0ZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlWChhLCBiKSB7XG4gICAgcmV0dXJuIGEueCAtIGIueDtcbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkge1xuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xuICAgICAgICBmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcbiAgICB9XG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBwID0gb3V0ZXJOb2RlLFxuICAgICAgICBoeCA9IGhvbGUueCxcbiAgICAgICAgaHkgPSBob2xlLnksXG4gICAgICAgIHF4ID0gLUluZmluaXR5LFxuICAgICAgICBtO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgdGFuO1xuXG4gICAgcCA9IG0ubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBzdG9wKSB7XG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG0ueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG0ueSA/IGh4IDogcXgsIGh5LCBtLngsIG0ueSwgaHkgPCBtLnkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuICAgICAgICAgICAgaWYgKCh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIHAueCA+IG0ueCkpICYmIGxvY2FsbHlJbnNpZGUocCwgaG9sZSkpIHtcbiAgICAgICAgICAgICAgICBtID0gcDtcbiAgICAgICAgICAgICAgICB0YW5NaW4gPSB0YW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBtO1xufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgIHAucHJldlogPSBwLnByZXY7XG4gICAgICAgIHAubmV4dFogPSBwLm5leHQ7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgcC5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKHApO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIGRvIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHFTaXplID09PSAwIHx8ICFxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAueiA8PSBxLnopIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuICAgICAgICBpblNpemUgKj0gMjtcblxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIHNpemUgb2YgdGhlIGRhdGEgYm91bmRpbmcgYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpIC8gc2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpIC8gc2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LngpIGxlZnRtb3N0ID0gcDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gbGVmdG1vc3Q7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcbiAgICByZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXF1YWxzKGEsIGIpIHx8IGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcbiAgICAgICAgICAgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKTtcbn1cblxuLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xufVxuXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXG4gICAgICAgICAgIGFyZWEocDIsIHEyLCBwMSkgPiAwICE9PSBhcmVhKHAyLCBxMiwgcTEpID4gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG4vLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG4gICAgICAgIGFuID0gYS5uZXh0LFxuICAgICAgICBicCA9IGIucHJldjtcblxuICAgIGEubmV4dCA9IGI7XG4gICAgYi5wcmV2ID0gYTtcblxuICAgIGEyLm5leHQgPSBhbjtcbiAgICBhbi5wcmV2ID0gYTI7XG5cbiAgICBiMi5uZXh0ID0gYTI7XG4gICAgYTIucHJldiA9IGIyO1xuXG4gICAgYnAubmV4dCA9IGIyO1xuICAgIGIyLnByZXYgPSBicDtcblxuICAgIHJldHVybiBiMjtcbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgcC5wcmV2ID0gcDtcbiAgICAgICAgcC5uZXh0ID0gcDtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHAubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgcC5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xuICAgICAgICBsYXN0Lm5leHQgPSBwO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XG4gICAgcC5uZXh0LnByZXYgPSBwLnByZXY7XG4gICAgcC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cbiAgICBpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG4gICAgaWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcbiAgICAvLyB2ZXJ0aWNlIGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRpY2Ugbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vXG4vLyBXZSBzdG9yZSBvdXIgRUUgb2JqZWN0cyBpbiBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBgfmAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Qgb3ZlcnJpZGRlbiBvclxuLy8gdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy8gV2UgYWxzbyBhc3N1bWUgdGhhdCBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV2ZW50IG5hbWVcbi8vIGlzIGFuIEVTNiBTeW1ib2wuXG4vL1xudmFyIHByZWZpeCA9IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nID8gJ34nIDogZmFsc2U7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgRXZlbnRFbWl0dGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBDb250ZXh0IGZvciBmdW5jdGlvbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSBlbWl0IG9uY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTWluaW1hbCBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIEV2ZW50RW1pdHRlciBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7IC8qIE5vdGhpbmcgdG8gc2V0ICovIH1cblxuLyoqXG4gKiBIb2xkcyB0aGUgYXNzaWduZWQgRXZlbnRFbWl0dGVycyBieSBuYW1lLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBhc3NpZ25lZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBleGlzdHMgV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtBcnJheXxCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQsIGV4aXN0cykge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgYXZhaWxhYmxlID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChleGlzdHMpIHJldHVybiAhIWF2YWlsYWJsZTtcbiAgaWYgKCFhdmFpbGFibGUpIHJldHVybiBbXTtcbiAgaWYgKGF2YWlsYWJsZS5mbikgcmV0dXJuIFthdmFpbGFibGUuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXZhaWxhYmxlLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGF2YWlsYWJsZVtpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB0byBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJbmRpY2F0aW9uIGlmIHdlJ3ZlIGVtaXR0ZWQgYW4gZXZlbnQuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IEV2ZW50TGlzdGVuZXIgZm9yIHRoZSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0b259IGZuIENhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGQgYW4gRXZlbnRMaXN0ZW5lciB0aGF0J3Mgb25seSBjYWxsZWQgb25jZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IHRoaXMsIHRydWUpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKSB0aGlzLl9ldmVudHMgPSBwcmVmaXggPyB7fSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHRoaXMuX2V2ZW50c1tldnRdID0gbGlzdGVuZXI7XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5fZXZlbnRzW2V2dF0uZm4pIHRoaXMuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIGVsc2UgdGhpcy5fZXZlbnRzW2V2dF0gPSBbXG4gICAgICB0aGlzLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3ZSB3YW50IHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciB0aGF0IHdlIG5lZWQgdG8gZmluZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgT25seSByZW1vdmUgbGlzdGVuZXJzIG1hdGNoaW5nIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmNlIGxpc3RlbmVycy5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGV2ZW50cyA9IFtdO1xuXG4gIGlmIChmbikge1xuICAgIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgICAgbGlzdGVuZXJzLmZuICE9PSBmblxuICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzLm9uY2UpXG4gICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVycy5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm5cbiAgICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpXG4gICAgICAgICAgfHwgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gIC8vXG4gIGlmIChldmVudHMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbZXZ0XTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycyBvciBvbmx5IHRoZSBsaXN0ZW5lcnMgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvci5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcztcblxuICBpZiAoZXZlbnQpIGRlbGV0ZSB0aGlzLl9ldmVudHNbcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudF07XG4gIGVsc2UgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYXBwbHkgYW55bW9yZS5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLypqc2hpbnQgb25ldmFyOiBmYWxzZSwgaW5kZW50OjQgKi9cbi8qZ2xvYmFsIHNldEltbWVkaWF0ZTogZmFsc2UsIHNldFRpbWVvdXQ6IGZhbHNlLCBjb25zb2xlOiBmYWxzZSAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciByb290LCBwcmV2aW91c19hc3luYztcblxuICAgIHJvb3QgPSB0aGlzO1xuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgIHByZXZpb3VzX2FzeW5jID0gcm9vdC5hc3luYztcbiAgICB9XG5cbiAgICBhc3luYy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmFzeW5jID0gcHJldmlvdXNfYXN5bmM7XG4gICAgICAgIHJldHVybiBhc3luYztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb25seV9vbmNlKGZuKSB7XG4gICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGNhbGxlZCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseShyb290LCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIHZhciBfZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaV0sIGksIGFycik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIF9tYXAgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBpZiAoYXJyLm1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5tYXAoaXRlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih4LCBpLCBhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgdmFyIF9yZWR1Y2UgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBpZiAoYXJyLnJlZHVjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8pO1xuICAgICAgICB9XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICB2YXIgX2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIC8vLy8gZXhwb3J0ZWQgYXN5bmMgbW9kdWxlIGZ1bmN0aW9ucyAvLy8vXG5cbiAgICAvLy8vIG5leHRUaWNrIGltcGxlbWVudGF0aW9uIHdpdGggYnJvd3Nlci1jb21wYXRpYmxlIGZhbGxiYWNrIC8vLy9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICEocHJvY2Vzcy5uZXh0VGljaykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgICBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAvLyBub3QgYSBkaXJlY3QgYWxpYXMgZm9yIElFMTAgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBvbmx5X29uY2UoZG9uZSkgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaCA9IGFzeW5jLmVhY2g7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmICghYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgIHZhciBpdGVyYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA+PSBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2hTZXJpZXMgPSBhc3luYy5lYWNoU2VyaWVzO1xuXG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZm4gPSBfZWFjaExpbWl0KGxpbWl0KTtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgW2FyciwgaXRlcmF0b3IsIGNhbGxiYWNrXSk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPSBhc3luYy5lYWNoTGltaXQ7XG5cbiAgICB2YXIgX2VhY2hMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBpZiAoIWFyci5sZW5ndGggfHwgbGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmIHN0YXJ0ZWQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihhcnJbc3RhcnRlZCAtIDFdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBkb1BhcmFsbGVsID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZG9QYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24obGltaXQsIGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW19lYWNoTGltaXQobGltaXQpXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvU2VyaWVzID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hTZXJpZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuXG4gICAgdmFyIF9hc3luY01hcCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW3guaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX21hcExpbWl0KGxpbWl0KShhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHZhciBfbWFwTGltaXQgPSBmdW5jdGlvbihsaW1pdCkge1xuICAgICAgICByZXR1cm4gZG9QYXJhbGxlbExpbWl0KGxpbWl0LCBfYXN5bmNNYXApO1xuICAgIH07XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gaW5qZWN0IGFsaWFzXG4gICAgYXN5bmMuaW5qZWN0ID0gYXN5bmMucmVkdWNlO1xuICAgIC8vIGZvbGRsIGFsaWFzXG4gICAgYXN5bmMuZm9sZGwgPSBhc3luYy5yZWR1Y2U7XG5cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIC8vIGZvbGRyIGFsaWFzXG4gICAgYXN5bmMuZm9sZHIgPSBhc3luYy5yZWR1Y2VSaWdodDtcblxuICAgIHZhciBfZmlsdGVyID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZmlsdGVyID0gZG9QYXJhbGxlbChfZmlsdGVyKTtcbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcbiAgICAvLyBzZWxlY3QgYWxpYXNcbiAgICBhc3luYy5zZWxlY3QgPSBhc3luYy5maWx0ZXI7XG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID0gYXN5bmMuZmlsdGVyU2VyaWVzO1xuXG4gICAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIHZhciBfZGV0ZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5kZXRlY3QgPSBkb1BhcmFsbGVsKF9kZXRlY3QpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IGRvU2VyaWVzKF9kZXRlY3QpO1xuXG4gICAgYXN5bmMuc29tZSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGFueSBhbGlhc1xuICAgIGFzeW5jLmFueSA9IGFzeW5jLnNvbWU7XG5cbiAgICBhc3luYy5ldmVyeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbGwgYWxpYXNcbiAgICBhc3luYy5hbGwgPSBhc3luYy5ldmVyeTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChmbiksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aFxuICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB2YXIgYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGZuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0YXNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tXG4gICAgICAgICAgICBfZWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudCBmaW5hbCBjYWxsYmFjayBmcm9tIGNhbGxpbmcgaXRzZWxmIGlmIGl0IGVycm9yc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICB0aGVDYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2VhY2goa2V5cywgZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gX2lzQXJyYXkodGFza3Nba10pID8gdGFza3Nba106IFt0YXNrc1trXV07XG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2FmZVJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgX2VhY2goX2tleXMocmVzdWx0cyksIGZ1bmN0aW9uKHJrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW3JrZXldID0gcmVzdWx0c1tya2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3Agc3Vic2VxdWVudCBlcnJvcnMgaGl0dGluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIE1hdGguYWJzKHRhc2subGVuZ3RoIC0gMSkpIHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuICAgICAgICAvLyBVc2UgZGVmYXVsdHMgaWYgdGltZXMgbm90IHBhc3NlZFxuICAgICAgICBpZiAodHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgICAgICB0aW1lcyA9IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRpbWVzIGlzIGEgbnVtYmVyXG4gICAgICAgIHRpbWVzID0gcGFyc2VJbnQodGltZXMsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICB2YXIgd3JhcHBlZFRhc2sgPSBmdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICB2YXIgcmV0cnlBdHRlbXB0ID0gZnVuY3Rpb24odGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2hpbGUgKHRpbWVzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQodGFzaywgISh0aW1lcy09MSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IGNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQsIHJ1biB0aGlzIGFzIGEgY29udHJvbGwgZmxvd1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2tcbiAgICB9O1xuXG4gICAgYXN5bmMud2F0ZXJmYWxsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIV9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd3JhcEl0ZXJhdG9yID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2god3JhcEl0ZXJhdG9yKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gZnVuY3Rpb24oZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKF9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgZWFjaGZuLm1hcCh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgZWFjaGZuLmVhY2goX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBhc3luYy5tYXAsIGVhY2g6IGFzeW5jLmVhY2ggfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKHRhc2tzLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBfbWFwTGltaXQobGltaXQpLCBlYWNoOiBfZWFjaExpbWl0KGxpbWl0KSB9LCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGFzeW5jLm1hcFNlcmllcyh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhfa2V5cyh0YXNrcyksIGZ1bmN0aW9uIChrLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRhc2tzW2tdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIHZhciBtYWtlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbWFrZUNhbGxiYWNrKDApO1xuICAgIH07XG5cbiAgICBhc3luYy5hcHBseSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBfY29uY2F0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNiKSB7XG4gICAgICAgICAgICBmbih4LCBmdW5jdGlvbiAoZXJyLCB5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMud2hpbHN0KHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICh0ZXN0LmFwcGx5KG51bGwsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0ZXN0KCkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3luYy51bnRpbCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvVW50aWwgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICghdGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvVW50aWwoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICBxLnRhc2tzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbnVsbCxcbiAgICAgICAgICAgIGVtcHR5OiBudWxsLFxuICAgICAgICAgICAgZHJhaW46IG51bGwsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcS5kcmFpbiA9IG51bGw7XG4gICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghcS5wYXVzZWQgJiYgd29ya2VycyA8IHEuY29uY3VycmVuY3kgJiYgcS50YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBxLnRhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLmVtcHR5ICYmIHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4gJiYgcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyKHRhc2suZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHEuY29uY3VycmVuY3k7IHcrKykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICBlbmQgPSBzZXF1ZW5jZS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciBtaWQgPSBiZWcgKyAoKGVuZCAtIGJlZyArIDEpID4+PiAxKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKF9iaW5hcnlTZWFyY2gocS50YXNrcywgaXRlbSwgX2NvbXBhcmVUYXNrcykgKyAxLCAwLCBpdGVtKTtcblxuICAgICAgICAgICAgICBpZiAocS5zYXR1cmF0ZWQgJiYgcS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvblxuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5jYXJnbyA9IGZ1bmN0aW9uICh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHdvcmtpbmcgICAgID0gZmFsc2UsXG4gICAgICAgICAgICB0YXNrcyAgICAgICA9IFtdO1xuXG4gICAgICAgIHZhciBjYXJnbyA9IHtcbiAgICAgICAgICAgIHRhc2tzOiB0YXNrcyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgZHJhaW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX2VhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXJnby5kcmFpbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXJnby5zYXR1cmF0ZWQgJiYgdGFza3MubGVuZ3RoID09PSBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnby5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShjYXJnby5wcm9jZXNzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICAgICAgICAgIGlmICh3b3JraW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZihjYXJnby5kcmFpbiAmJiAhY2FyZ28uZHJhaW5lZCkgY2FyZ28uZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdHMgPSB0eXBlb2YgcGF5bG9hZCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRhc2tzLnNwbGljZSgwLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza3Muc3BsaWNlKDAsIHRhc2tzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZHMgPSBfbWFwKHRzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFzay5kYXRhO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoY2FyZ28uZW1wdHkpIGNhcmdvLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgd29ya2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2VyKGRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgX2VhY2godHMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNhcmdvO1xuICAgIH07XG5cbiAgICB2YXIgX2NvbnNvbGVfZm4gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy50aW1lcyA9IGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb3VudGVyID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY291bnRlci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luYy5tYXAoY291bnRlciwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwU2VyaWVzKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGF0LCBbZXJyXS5jb25jYXQocmVzdWx0cykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICByZXR1cm4gYXN5bmMuc2VxLmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIHZhciBfYXBwbHlFYWNoID0gZnVuY3Rpb24gKGVhY2hmbiwgZm5zIC8qYXJncy4uLiovKSB7XG4gICAgICAgIHZhciBnbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgZnVuY3Rpb24gKGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5hcHBseUVhY2ggPSBkb1BhcmFsbGVsKF9hcHBseUVhY2gpO1xuICAgIGFzeW5jLmFwcGx5RWFjaFNlcmllcyA9IGRvU2VyaWVzKF9hcHBseUVhY2gpO1xuXG4gICAgYXN5bmMuZm9yZXZlciA9IGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xuXG4gICAgLy8gTm9kZS5qc1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwidmFyIGFzeW5jICAgICAgID0gcmVxdWlyZSgnYXN5bmMnKSxcbiAgICB1cmxQYXJzZXIgICA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIFJlc291cmNlICAgID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBtdWx0aXBsZSByZXNvdXJjZXMgdG8gbG9hZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIGNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvZ3Jlc3MgcGVyY2VudCBvZiB0aGUgbG9hZGVyIGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogTG9hZGluZyBzdGF0ZSBvZiB0aGUgbG9hZGVyLCB0cnVlIGlmIGl0IGlzIGN1cnJlbnRseSBsb2FkaW5nIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0b3RhbCBwcm9ncmVzcyB0aGF0IGEgc2luZ2xlIHJlc291cmNlIHJlcHJlc2VudHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWlkZGxld2FyZSB0byBydW4gYmVmb3JlIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGFmdGVyIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9sb2FkUmVzb3VyY2VgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRMb2FkUmVzb3VyY2UgPSB0aGlzLl9sb2FkUmVzb3VyY2UuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uTG9hZGAgZnVuY3Rpb24gYm91bmQgd2l0aCB0aGlzIG9iamVjdCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uTG9hZCA9IHRoaXMuX29uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlIGJ1ZmZlciB0aGF0IGZpbGxzIHVudGlsIGBsb2FkYCBpcyBjYWxsZWQgdG8gc3RhcnQgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlW119XG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyID0gW107XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHRyYWNrIGxvYWQgY29tcGxldGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb3VyY2VzIHdhaXRpbmcgdG8gYmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX3F1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fYm91bmRMb2FkUmVzb3VyY2UsIGNvbmN1cnJlbmN5KTtcblxuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGlzIGxvYWRlciBrZXllZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgUmVzb3VyY2U+fVxuICAgICAqL1xuICAgIHRoaXMucmVzb3VyY2VzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCBvciBlcnJvcmVkIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgb25jZSBwZXIgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbG9hZGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdGFydFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHF1ZXVlZCByZXNvdXJjZXMgYWxsIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY29tcGxldGVcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuLyoqXG4gKiBBZGRzIGEgcmVzb3VyY2UgKG9yIG11bHRpcGxlIHJlc291cmNlcykgdG8gdGhlIGxvYWRlciBxdWV1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGEgd2lkZSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwYXJhbWV0ZXJzLiBUaGUgb25seSB0aGluZyB0aGF0IGlzIGFsd2F5c1xuICogcmVxdWlyZWQgdGhlIHVybCB0byBsb2FkLiBBbGwgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6XG4gKlxuICogYGBganNcbiAqIGxvYWRlclxuICogICAgIC8vIG5vcm1hbCBwYXJhbSBzeW50YXhcbiAqICAgICAuYWRkKCdrZXknLCAnaHR0cDovLy4uLicsIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJylcbiAqXG4gKiAgICAgLy8gb2JqZWN0IHN5bnRheFxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MicsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIG5hbWU6ICdrZXkzJyxcbiAqICAgICAgICAgdXJsOiAnaHR0cDovLy4uLidcbiAqICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge31cbiAqICAgICB9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwczovLy4uLicsXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9LFxuICogICAgICAgICBjcm9zc09yaWdpbjogdHJ1ZVxuICogICAgIH0pXG4gKlxuICogICAgIC8vIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJscyBvciBib3RoXG4gKiAgICAgLmFkZChbXG4gKiAgICAgICAgIHsgbmFtZTogJ2tleTQnLCB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgeyB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgJ2h0dHA6Ly8uLi4nXG4gKiAgICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAYWxpYXMgZW5xdWV1ZVxuICogQHBhcmFtIFtuYW1lXSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZCwgaWYgbm90IHBhc3NlZCB0aGUgdXJsIGlzIHVzZWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIHJlbGF0aXZlIHRvIHRoZSBiYXNlVXJsIG9mIHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcGFyYW0gW29wdGlvbnMuY3Jvc3NPcmlnaW5dIHtib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5YSFJfTE9BRF9UWVBFfSBIb3cgc2hvdWxkIHRoaXMgcmVzb3VyY2UgYmUgbG9hZGVkP1xuICogQHBhcmFtIFtvcHRpb25zLnhoclR5cGU9UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVF0ge1Jlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFfSBIb3cgc2hvdWxkIHRoZSBkYXRhIGJlaW5nXG4gKiAgICAgIGxvYWRlZCBiZSBpbnRlcnByZXRlZCB3aGVuIHVzaW5nIFhIUj9cbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMgc3BlY2lmaWMgcmVzb3VyY2UgY29tcGxldGVzIGxvYWRpbmcuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWRkID0gTG9hZGVyLnByb3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgb3B0aW9ucywgY2IpIHtcbiAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciB1cmxzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChuYW1lW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGlmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW5zdGVhZCBvZiBwYXJhbXNcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNiID0gdXJsIHx8IG5hbWUuY2FsbGJhY2sgfHwgbmFtZS5vbkNvbXBsZXRlO1xuICAgICAgICBvcHRpb25zID0gbmFtZTtcbiAgICAgICAgdXJsID0gbmFtZS51cmw7XG4gICAgICAgIG5hbWUgPSBuYW1lLm5hbWUgfHwgbmFtZS5rZXkgfHwgbmFtZS51cmw7XG4gICAgfVxuXG4gICAgLy8gY2FzZSB3aGVyZSBubyBuYW1lIGlzIHBhc3NlZCBzaGlmdCBhbGwgYXJncyBvdmVyIGJ5IG9uZS5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdXJsO1xuICAgICAgICB1cmwgPSBuYW1lO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IHdlIHNoaWZ0ZWQgbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9wZXIgdXJsLlxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVybCBwYXNzZWQgdG8gYWRkIHJlc291cmNlIHRvIGxvYWRlci4nKTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zIGFyZSBvcHRpb25hbCBzbyBwZW9wbGUgbWlnaHQgcGFzcyBhIGZ1bmN0aW9uIGFuZCBubyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW25hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzb3VyY2Ugd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBleGlzdHMuJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJhc2UgdXJsIGlmIHRoaXMgaXNuJ3QgYW4gYWJzb2x1dGUgdXJsXG4gICAgdXJsID0gdGhpcy5faGFuZGxlQmFzZVVybCh1cmwpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBzdG9yZSB0aGUgcmVzb3VyY2VcbiAgICB0aGlzLnJlc291cmNlc1tuYW1lXSA9IG5ldyBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlc291cmNlc1tuYW1lXS5vbmNlKCdhZnRlck1pZGRsZXdhcmUnLCBjYik7XG4gICAgfVxuXG4gICAgdGhpcy5fbnVtVG9Mb2FkKys7XG5cbiAgICAvLyBpZiBhbHJlYWR5IGxvYWRpbmcgYWRkIGl0IHRvIHRoZSB3b3JrZXIgcXVldWVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9ICgxMDAgLSB0aGlzLnByb2dyZXNzKSAvICh0aGlzLl9xdWV1ZS5sZW5ndGgoKSArIHRoaXMuX3F1ZXVlLnJ1bm5pbmcoKSk7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBidWZmZXIgaXQgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlIGxhdGVyXG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDEwMCAvIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5Mb2FkZXIucHJvdG90eXBlLl9oYW5kbGVCYXNlVXJsID0gZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBwYXJzZWRVcmwgPSB1cmxQYXJzZXIucGFyc2UodXJsKTtcblxuICAgIC8vIGFic29sdXRlIHVybCwganVzdCB1c2UgaXQgYXMgaXMuXG4gICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCB8fCBwYXJzZWRVcmwucGF0aG5hbWUuaW5kZXhPZignLy8nKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIC8vIGlmIGJhc2VVcmwgZG9lc24ndCBlbmQgaW4gc2xhc2ggYW5kIHVybCBkb2Vzbid0IHN0YXJ0IHdpdGggc2xhc2gsIHRoZW4gYWRkIGEgc2xhc2ggaW5iZXR3ZWVuXG4gICAgaWYgKFxuICAgICAgICB0aGlzLmJhc2VVcmwubGVuZ3RoICYmXG4gICAgICAgIHRoaXMuYmFzZVVybC5sYXN0SW5kZXhPZignLycpICE9PSB0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSAmJlxuICAgICAgICB1cmwuY2hhckF0KDApICE9PSAnLydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybCArICcvJyArIHVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmJlZm9yZSogdGhlXG4gKiByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKlxuICogQGFsaWFzIHByZVxuICogQHBhcmFtIG1pZGRsZXdhcmUge2Z1bmN0aW9ufSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5iZWZvcmUgPSBMb2FkZXIucHJvdG90eXBlLnByZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB1cCBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gdGhhdCB3aWxsIHJ1biAqYWZ0ZXIqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyB1c2VcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWZ0ZXIgPSBMb2FkZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZS5wdXNoKGZuKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHF1ZXVlIG9mIHRoZSBsb2FkZXIgdG8gcHJlcGFyZSBmb3IgYSBuZXcgbG9hZC5cbiAqXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gdGhpcy5iYXNlVXJsID0gYmFzZVVybCB8fCAnJztcblxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9ncmVzc0NodW5rID0gMDtcblxuICAgIC8vIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUubGVuZ3RoID0gMDtcbiAgICAvLyB0aGlzLl9hZnRlck1pZGRsZXdhcmUubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fbnVtVG9Mb2FkID0gMDtcblxuICAgIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgICB0aGlzLl9xdWV1ZS5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBTdGFydHMgbG9hZGluZyB0aGUgcXVldWVkIHJlc291cmNlcy5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgY29tcGxldGVgIGV2ZW50LlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAvLyByZWdpc3RlciBjb21wbGV0ZSBjYWxsYmFjayBpZiB0aGV5IHBhc3Mgb25lXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBxdWV1ZSBoYXMgYWxyZWFkeSBzdGFydGVkIHdlIGFyZSBkb25lIGhlcmVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBub3RpZnkgb2Ygc3RhcnRcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBzdGFydCB0aGUgaW50ZXJuYWwgcXVldWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMuX2J1ZmZlcltpXSk7XG4gICAgfVxuXG4gICAgLy8gZW1wdHkgdGhlIGJ1ZmZlclxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIExvYWRzIGEgc2luZ2xlIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc291cmNlID0gZnVuY3Rpb24gKHJlc291cmNlLCBkZXF1ZXVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmVzb3VyY2UuX2RlcXVldWUgPSBkZXF1ZXVlO1xuXG4gICAgdGhpcy5fcnVuTWlkZGxld2FyZShyZXNvdXJjZSwgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXNvdXJjZS5vbigncHJvZ3Jlc3MnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAncHJvZ3Jlc3MnKSk7XG5cbiAgICAgICAgcmVzb3VyY2UubG9hZChzZWxmLl9ib3VuZE9uTG9hZCk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbmNlIGVhY2ggcmVzb3VyY2UgaGFzIGxvYWRlZC5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX29uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMsIHRoaXMucmVzb3VyY2VzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGVhY2ggdGltZSBhIHJlc291cmNlcyBpcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAZmlyZXMgZXJyb3JcbiAqIEBmaXJlcyBsb2FkXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICB0aGlzLnByb2dyZXNzICs9IHRoaXMuX3Byb2dyZXNzQ2h1bms7XG5cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgcmVzb3VyY2UpO1xuXG4gICAgLy8gcnVuIG1pZGRsZXdhcmUsIHRoaXMgKm11c3QqIGhhcHBlbiBiZWZvcmUgZGVxdWV1ZSBzbyBzdWItYXNzZXRzIGdldCBhZGRlZCBwcm9wZXJseVxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2FmdGVyTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvdXJjZS5lbWl0KCdhZnRlck1pZGRsZXdhcmUnLCByZXNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5fbnVtVG9Mb2FkLS07XG5cbiAgICAgICAgLy8gZG8gY29tcGxldGlvbiBjaGVja1xuICAgICAgICBpZiAodGhpcy5fbnVtVG9Mb2FkID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgdGhpcy5fb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzb3VyY2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCByZXNvdXJjZS5lcnJvciwgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkJywgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG5cblxuICAgIC8vIHJlbW92ZSB0aGlzIHJlc291cmNlIGZyb20gdGhlIGFzeW5jIHF1ZXVlXG4gICAgcmVzb3VyY2UuX2RlcXVldWUoKTtcbn07XG5cbi8qKlxuICogUnVuIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9uIGEgcmVzb3VyY2UuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fcnVuTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZm5zLCBjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGFzeW5jLmVhY2hTZXJpZXMoZm5zLCBmdW5jdGlvbiAoZm4sIG5leHQpIHtcbiAgICAgICAgZm4uY2FsbChzZWxmLCByZXNvdXJjZSwgbmV4dCk7XG4gICAgfSwgY2IuYmluZCh0aGlzLCByZXNvdXJjZSkpO1xufTtcblxuTG9hZGVyLkxPQURfVFlQRSA9IFJlc291cmNlLkxPQURfVFlQRTtcbkxvYWRlci5YSFJfUkVBRFlfU1RBVEUgPSBSZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEU7XG5Mb2FkZXIuWEhSX1JFU1BPTlNFX1RZUEUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRTtcbiIsInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgX3VybCA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIC8vIHRlc3RzIGlzIENPUlMgaXMgc3VwcG9ydGVkIGluIFhIUiwgaWYgbm90IHdlIG5lZWQgdG8gdXNlIFhEUlxuICAgIHVzZVhkciA9ICEhKHdpbmRvdy5YRG9tYWluUmVxdWVzdCAmJiAhKCd3aXRoQ3JlZGVudGlhbHMnIGluIChuZXcgWE1MSHR0cFJlcXVlc3QoKSkpKSxcbiAgICB0ZW1wQW5jaG9yID0gbnVsbDtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRlZCBieVxuICogYSBzaW5nbGUgVVJMLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIG5hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd8c3RyaW5nW119IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIGZvciBhdWRpby92aWRlbyBsb2FkcyB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7c3RyaW5nfGJvb2xlYW59IElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IERlZmF1bHQgaXMgdG8gZGV0ZXJtaW5lIGF1dG9tYXRpY2FsbHkuXG4gKiBAcGFyYW0gW29wdGlvbnMubG9hZFR5cGU9UmVzb3VyY2UuTE9BRF9UWVBFLlhIUl0ge1Jlc291cmNlLkxPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW29wdGlvbnMubWV0YWRhdGFdIHtvYmplY3R9IEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmUuXG4gKi9cbmZ1bmN0aW9uIFJlc291cmNlKG5hbWUsIHVybCwgb3B0aW9ucykge1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBuYW1lIGFuZCB1cmwgYXJlIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgYSByZXNvdXJjZS4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdXJsIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgdXJsIGlzIGEgZGF0YSB1cmwuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNEYXRhVXJsID0gdGhpcy51cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnl9XG4gICAgICovXG4gICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jcm9zc09yaWdpbiA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnYW5vbnltb3VzJyA6IG9wdGlvbnMuY3Jvc3NPcmlnaW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIG9mIGxvYWRpbmcgdG8gdXNlIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2UuTE9BRF9UWVBFfVxuICAgICAqL1xuICAgIHRoaXMubG9hZFR5cGUgPSBvcHRpb25zLmxvYWRUeXBlIHx8IHRoaXMuX2RldGVybWluZUxvYWRUeXBlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSB1c2VkIHRvIGxvYWQgdGhlIHJlc291cmNlIHZpYSBYSFIuIElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy54aHJUeXBlID0gb3B0aW9ucy54aHJUeXBlO1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgaW5mbyBmb3IgbWlkZGxld2FyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgd2hpbGUgbG9hZGluZyAoaWYgYW55KS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Vycm9yfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFhIUiBvYmplY3QgdGhhdCB3YXMgdXNlZCB0byBsb2FkIHRoaXMgcmVzb3VyY2UuIFRoaXMgaXMgb25seSBzZXRcbiAgICAgKiB3aGVuIGBsb2FkVHlwZWAgaXMgYFJlc291cmNlLkxPQURfVFlQRS5YSFJgLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7WE1MSHR0cFJlcXVlc3R9XG4gICAgICovXG4gICAgdGhpcy54aHIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBqc29uLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0pzb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgeG1sLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1htbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhbiBpbWFnZSB0YWcuIE9ubHkgdmFsaWQgYWZ0ZXIgdGhlIHJlc291cmNlXG4gICAgICogaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gYXVkaW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0F1ZGlvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGEgdmlkZW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1ZpZGVvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGRlcXVldWVgIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBhIHN0b3JhZ2UgcGxhY2UgZm9yIHRoZSBhc3luYyBxdWV1ZSBkZXF1ZXVlIG1ldGhvZFxuICAgICAqIHVzZWQgcHJpdmF0ZWx5IGJ5IHRoZSBsb2FkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2RlcXVldWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBjb21wbGV0ZWAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kQ29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkVycm9yYCBmdW5jdGlvbiBib3VuZCB0byB0aGlzIHJlc291cmNlJ3MgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25Qcm9ncmVzc2AgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyA9IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcblxuICAgIC8vIHhociBjYWxsYmFja3NcbiAgICB0aGlzLl9ib3VuZFhock9uRXJyb3IgPSB0aGlzLl94aHJPbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYaHJPbkFib3J0ID0gdGhpcy5feGhyT25BYm9ydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25Mb2FkID0gdGhpcy5feGhyT25Mb2FkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYZHJPblRpbWVvdXQgPSB0aGlzLl94ZHJPblRpbWVvdXQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcmVzb3VyY2UgYmVpbmdzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGVhY2ggdGltZSBwcm9ncmVzcyBvZiB0aGlzIHJlc291cmNlIGxvYWQgdXBkYXRlcy5cbiAgICAgKiBOb3QgYWxsIHJlc291cmNlcyB0eXBlcyBhbmQgbG9hZGVyIHN5c3RlbXMgY2FuIHN1cHBvcnQgdGhpcyBldmVudFxuICAgICAqIHNvIHNvbWV0aW1lcyBpdCBtYXkgbm90IGJlIGF2YWlsYWJsZS4gSWYgdGhlIHJlc291cmNlXG4gICAgICogaXMgYmVpbmcgbG9hZGVkIG9uIGEgbW9kZXJuIGJyb3dzZXIsIHVzaW5nIFhIUiwgYW5kIHRoZSByZW1vdGUgc2VydmVyXG4gICAgICogcHJvcGVybHkgc2V0cyBDb250ZW50LUxlbmd0aCBoZWFkZXJzLCB0aGVuIHRoaXMgd2lsbCBiZSBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcHJvZ3Jlc3NcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgdGhpcyByZXNvdXJjZSBoYXMgbG9hZGVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaXQgd2lsbFxuICAgICAqIGJlIGluIHRoZSBgZXJyb3JgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xufVxuXG5SZXNvdXJjZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVzb3VyY2U7XG5tb2R1bGUuZXhwb3J0cyA9IFJlc291cmNlO1xuXG4vKipcbiAqIE1hcmtzIHRoZSByZXNvdXJjZSBhcyBjb21wbGV0ZS5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgaW4gYSB3cmFwcGVyIG9yIHNvbWV0aGluZy4uLmdyb3NzLi4uLlxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICAgIGlmICh0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvcik7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIub25lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25wcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbmxvYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBLaWNrcyBvZmYgbG9hZGluZyBvZiB0aGlzIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBzdGFydFxuICogQHBhcmFtIFtjYWxsYmFja10ge2Z1bmN0aW9ufSBPcHRpb25hbCBjYWxsYmFjayB0byBjYWxsIG9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBpZiBhIGNhbGxiYWNrIGlzIHNldCwgbGlzdGVuIGZvciBjb21wbGV0ZSBldmVudFxuICAgIGlmIChjYikge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4gPT09IGZhbHNlIHx8IHR5cGVvZiB0aGlzLmNyb3NzT3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdGhpcy5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4odGhpcy51cmwpO1xuICAgIH1cblxuICAgIHN3aXRjaCh0aGlzLmxvYWRUeXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEltYWdlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5BVURJTzpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuVklERU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlhIUjpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh1c2VYZHIgJiYgdGhpcy5jcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYZHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYaHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gSW1hZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuc3JjID0gdGhpcy51cmw7XG5cbiAgICB0aGlzLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEhUTUxBdWRpb0VsZW1lbnQgb3IgSFRNTFZpZGVvRWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJyAmJiB0eXBlb2YgQXVkaW8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBBdWRpbygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgJyArIHR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBDb2Nvb25KUyBDYW52YXMrIHJ1bnRpbWUsIGxhY2tzIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zcmMgPSBBcnJheS5pc0FycmF5KHRoaXMudXJsKSA/IHRoaXMudXJsWzBdIDogdGhpcy51cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51cmwubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWydpcycgKyB0eXBlWzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKV0gPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuXG4gICAgdGhpcy5kYXRhLmxvYWQoKTtcbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gWE1MSHR0cFJlcXVlc3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGhyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIHNldCB0aGUgcmVxdWVzdCB0eXBlIGFuZCB1cmxcbiAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gbG9hZCBqc29uIGFzIHRleHQgYW5kIHBhcnNlIGl0IG91cnNlbHZlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHNvbWUgYnJvd3NlcnNcbiAgICAvLyAqY291Z2gqIHNhZmFyaSAqY291Z2gqIGNhbid0IGRlYWwgd2l0aCBpdC5cbiAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OIHx8IHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gdGhpcy54aHJUeXBlO1xuICAgIH1cblxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvciwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQsIGZhbHNlKTtcblxuICAgIHhoci5zZW5kKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhEb21haW5SZXF1ZXN0LiBUaGlzIGlzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHN1cHBvcnQgSUU5IChncm9zcykuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGRyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGRyID0gdGhpcy54aHIgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcblxuICAgIC8vIFhEb21haW5SZXF1ZXN0IGhhcyBhIGZldyBxdWlya3MuIE9jY2FzaW9uYWxseSBpdCB3aWxsIGFib3J0IHJlcXVlc3RzXG4gICAgLy8gQSB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBtYWtlIHN1cmUgQUxMIGNhbGxiYWNrcyBhcmUgc2V0IGV2ZW4gaWYgbm90IHVzZWRcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTc4Njk2Ni94ZG9tYWlucmVxdWVzdC1hYm9ydHMtcG9zdC1vbi1pZS05XG4gICAgeGRyLnRpbWVvdXQgPSA1MDAwO1xuXG4gICAgeGRyLm9uZXJyb3IgPSB0aGlzLl9ib3VuZFhock9uRXJyb3I7XG4gICAgeGRyLm9udGltZW91dCA9IHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0O1xuICAgIHhkci5vbnByb2dyZXNzID0gdGhpcy5fYm91bmRPblByb2dyZXNzO1xuICAgIHhkci5vbmxvYWQgPSB0aGlzLl9ib3VuZFhock9uTG9hZDtcblxuICAgIHhkci5vcGVuKCdHRVQnLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyAgTm90ZTogVGhlIHhkci5zZW5kKCkgY2FsbCBpcyB3cmFwcGVkIGluIGEgdGltZW91dCB0byBwcmV2ZW50IGFuIGlzc3VlIHdpdGggdGhlIGludGVyZmFjZSB3aGVyZSBzb21lIHJlcXVlc3RzIGFyZSBsb3N0XG4gICAgLy8gIGlmIG11bHRpcGxlIFhEb21haW5SZXF1ZXN0cyBhcmUgYmVpbmcgc2VudCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIC8vIFNvbWUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2lzc3Vlcy8xMjQ4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHhkci5zZW5kKCk7XG4gICAgfSwgMCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzb3VyY2UgdXNlZCBpbiBsb2FkaW5nIHZpYSBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB0eXBlIHtzdHJpbmd9IFRoZSBlbGVtZW50IHR5cGUgKHZpZGVvIG9yIGF1ZGlvKS5cbiAqIEBwYXJhbSB1cmwge3N0cmluZ30gVGhlIHNvdXJjZSBVUkwgdG8gbG9hZCBmcm9tLlxuICogQHBhcmFtIFttaW1lXSB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIG9mIHRoZSB2aWRlb1xuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9jcmVhdGVTb3VyY2UgPSBmdW5jdGlvbiAodHlwZSwgdXJsLCBtaW1lKSB7XG4gICAgaWYgKCFtaW1lKSB7XG4gICAgICAgIG1pbWUgPSB0eXBlICsgJy8nICsgdXJsLnN1YnN0cih1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSB1cmw7XG4gICAgc291cmNlLnR5cGUgPSBtaW1lO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBlcnJvcnMgb3V0LlxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBlcnJvciBldmVudCBmcm9tIHRoZSBlbGVtZW50IHRoYXQgZW1pdHMgaXQuXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX29uRXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBlbGVtZW50IHVzaW5nICcgKyBldmVudC50YXJnZXQubm9kZU5hbWUpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBwcm9ncmVzcyBldmVudCBmaXJlcyBmb3IgeGhyL3hkci5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vblByb2dyZXNzID0gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB0aGlzLCBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYW4gZXJyb3IgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEVycm9yRXZlbnR8RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgcmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgZmFpbGVkLiAnICtcbiAgICAgICAgJ1N0YXR1czogJyArIHRoaXMueGhyLnN0YXR1cyArICcsIHRleHQ6IFwiJyArIHRoaXMueGhyLnN0YXR1c1RleHQgKyAnXCInXG4gICAgKTtcblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGFib3J0IGV2ZW50IGZpcmVzIGZvciB4aHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEFib3J0RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB3YXMgYWJvcnRlZCBieSB0aGUgdXNlci4nKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIHRpbWVvdXQgZXZlbnQgZmlyZXMgZm9yIHhkci5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94ZHJPblRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB0aW1lZCBvdXQuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBkYXRhIHN1Y2Nlc3NmdWxseSBsb2FkcyBmcm9tIGFuIHhoci94ZHIgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0TG9hZEV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHhociA9IHRoaXMueGhyLFxuICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzICE9PSB1bmRlZmluZWQgPyB4aHIuc3RhdHVzIDogMjAwOyAvL1hEUiBoYXMgbm8gYC5zdGF0dXNgLCBhc3N1bWUgMjAwLlxuXG4gICAgLy8gc3RhdHVzIGNhbiBiZSAwIHdoZW4gdXNpbmcgdGhlIGZpbGU6Ly8gcHJvdG9jb2wsIGFsc28gY2hlY2sgaWYgYSByZXNwb25zZSB3YXMgZm91bmRcbiAgICBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDQgfHwgKHN0YXR1cyA9PT0gMCAmJiB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIC8vIGlmIHRleHQsIGp1c3QgcmV0dXJuIGl0XG4gICAgICAgIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYganNvbiwgcGFyc2UgaW50byBqc29uIG9iamVjdFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT04pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSnNvbiA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIGpzb246JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgeG1sLCBwYXJzZSBpbnRvIGFuIHhtbCBkb2N1bWVudCBvciBkaXYgZWxlbWVudFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkaXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNYbWwgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSBsb2FkZWQgeG1sOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyIHR5cGVzIGp1c3QgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdbJyArIHhoci5zdGF0dXMgKyAnXScgKyB4aHIuc3RhdHVzVGV4dCArICc6JyArIHhoci5yZXNwb25zZVVSTCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gcmVxVHlwZSh4aHIpIHtcbiAgICByZXR1cm4geGhyLnRvU3RyaW5nKCkucmVwbGFjZSgnb2JqZWN0ICcsICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGZvciB0aGlzIHJlc291cmNlIGJhc2VkIG9uIGlmIHRoZSB1cmxcbiAqIGZvciB0aGlzIHJlc291cmNlIGlzIGNyb3NzLW9yaWdpbi4gSWYgY3Jvc3NPcmlnaW4gd2FzIG1hbnVhbGx5IHNldCwgdGhpc1xuICogZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgdG8gdGVzdC5cbiAqIEBwYXJhbSBbbG9jYXRpb249d2luZG93LmxvY2F0aW9uXSB7b2JqZWN0fSBUaGUgbG9jYXRpb24gb2JqZWN0IHRvIHRlc3QgYWdhaW5zdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNyb3NzT3JpZ2luIHZhbHVlIHRvIHVzZSAob3IgZW1wdHkgc3RyaW5nIGZvciBub25lKS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVDcm9zc09yaWdpbiA9IGZ1bmN0aW9uICh1cmwsIGxvYykge1xuICAgIC8vIGRhdGE6IGFuZCBqYXZhc2NyaXB0OiB1cmxzIGFyZSBjb25zaWRlcmVkIHNhbWUtb3JpZ2luXG4gICAgaWYgKHVybC5pbmRleE9mKCdkYXRhOicpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGlzIHdpbmRvdy5sb2NhdGlvblxuICAgIGxvYyA9IGxvYyB8fCB3aW5kb3cubG9jYXRpb247XG5cbiAgICBpZiAoIXRlbXBBbmNob3IpIHtcbiAgICAgICAgdGVtcEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG5cbiAgICAvLyBsZXQgdGhlIGJyb3dzZXIgZGV0ZXJtaW5lIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSB1cmwgb2YgdGhpcyByZXNvdXJjZSBhbmQgdGhlblxuICAgIC8vIHBhcnNlIHdpdGggdGhlIG5vZGUgdXJsIGxpYiwgd2UgY2FuJ3QgdXNlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICAgIC8vIGJlY2F1c2UgdGhleSBkb24ndCB3b3JrIGluIElFOSA6KFxuICAgIHRlbXBBbmNob3IuaHJlZiA9IHVybDtcbiAgICB1cmwgPSBfdXJsLnBhcnNlKHRlbXBBbmNob3IuaHJlZik7XG5cbiAgICB2YXIgc2FtZVBvcnQgPSAoIXVybC5wb3J0ICYmIGxvYy5wb3J0ID09PSAnJykgfHwgKHVybC5wb3J0ID09PSBsb2MucG9ydCk7XG5cbiAgICAvLyBpZiBjcm9zcyBvcmlnaW5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9PSBsb2MuaG9zdG5hbWUgfHwgIXNhbWVQb3J0IHx8IHVybC5wcm90b2NvbCAhPT0gbG9jLnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiAnYW5vbnltb3VzJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlc3BvbnNlVHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZVxuICogcmVzb3VyY2UgYmVpbmcgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHJlc3BvbnNlVHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lWGhyVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX3hoclR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZUxvYWRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZXNvdXJjZS5fbG9hZFR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLkxPQURfVFlQRS5YSFI7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2dldEV4dGVuc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcy51cmwsXG4gICAgICAgIGV4dDtcblxuICAgIGlmICh0aGlzLmlzRGF0YVVybCkge1xuICAgICAgICB2YXIgc2xhc2hJbmRleCA9IHVybC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGV4dCA9IHVybC5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEsIHVybC5pbmRleE9mKCc7Jywgc2xhc2hJbmRleCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXJ5U3RhcnQgPSB1cmwuaW5kZXhPZignPycpO1xuICAgICAgICBpZiAocXVlcnlTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dDtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWltZSB0eXBlIG9mIGFuIFhIUiByZXF1ZXN0IGJhc2VkIG9uIHRoZSByZXNwb25zZVR5cGUgb2ZcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIHRvIHVzZS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRNaW1lRnJvbVhoclR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1iaW5hcnknO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vYmxvYic7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veG1sJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT046XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVDpcbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUOlxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcblxuICAgIH1cbn07XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxvYWRpbmcgYSByZXNvdXJjZSBjYW4gdXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IExPQURfVFlQRVxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5YSFIgLSBVc2VzIFhNTEh0dHBSZXF1ZXN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5JTUFHRSAtIFVzZXMgYW4gYEltYWdlYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLkFVRElPIC0gVXNlcyBhbiBgQXVkaW9gIG9iamVjdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuVklERU8gLSBVc2VzIGEgYFZpZGVvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlLkxPQURfVFlQRSA9IHtcbiAgICBYSFI6ICAgIDEsXG4gICAgSU1BR0U6ICAyLFxuICAgIEFVRElPOiAgMyxcbiAgICBWSURFTzogIDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVBRFlfU1RBVEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuVU5TRU5UIC0gb3BlbigpaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLk9QRU5FRCAtIHNlbmQoKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5IRUFERVJTX1JFQ0VJVkVEIC0gc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIGhlYWRlcnMgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5MT0FESU5HIC0gRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLkRPTkUgLSBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5SZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEUgPSB7XG4gICAgVU5TRU5UOiAwLFxuICAgIE9QRU5FRDogMSxcbiAgICBIRUFERVJTX1JFQ0VJVkVEOiAyLFxuICAgIExPQURJTkc6IDMsXG4gICAgRE9ORTogNFxufTtcblxuLyoqXG4gKiBUaGUgWEhSIHJlYWR5IHN0YXRlcywgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IFhIUl9SRVNQT05TRV9UWVBFXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVCAtIGRlZmF1bHRzIHRvIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVIgLSBBcnJheUJ1ZmZlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkJMT0IgLSBCbG9iXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQgLSBEb2N1bWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkpTT04gLSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5URVhUIC0gU3RyaW5nXG4gKi9cblJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFID0ge1xuICAgIERFRkFVTFQ6ICAgICd0ZXh0JyxcbiAgICBCVUZGRVI6ICAgICAnYXJyYXlidWZmZXInLFxuICAgIEJMT0I6ICAgICAgICdibG9iJyxcbiAgICBET0NVTUVOVDogICAnZG9jdW1lbnQnLFxuICAgIEpTT046ICAgICAgICdqc29uJyxcbiAgICBURVhUOiAgICAgICAndGV4dCdcbn07XG5cblJlc291cmNlLl9sb2FkVHlwZU1hcCA9IHtcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3BuZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZWcnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3dlYnAnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRVxufTtcblxuUmVzb3VyY2UuX3hoclR5cGVNYXAgPSB7XG4gICAgLy8geG1sXG4gICAgJ3hodG1sJzogICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bWwnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3htbCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RteCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RzeCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3N2Zyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG5cbiAgICAvLyBpbWFnZXNcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2JtcCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RnYSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcblxuICAgIC8vIGpzb25cbiAgICAnanNvbic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OLFxuXG4gICAgLy8gdGV4dFxuICAgICd0ZXh0JzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQsXG4gICAgJ3R4dCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsb2FkIHR5cGUgdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGV4dG5hbWUge3N0cmluZ30gVGhlIGV4dGVuc2lvbiB0byBzZXQgdGhlIHR5cGUgZm9yLCBlLmcuIFwicG5nXCIgb3IgXCJmbnRcIlxuICogQHBhcmFtIGxvYWRUeXBlIHtSZXNvdXJjZS5MT0FEX1RZUEV9IFRoZSBsb2FkIHR5cGUgdG8gc2V0IGl0IHRvLlxuICovXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25Mb2FkVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCBsb2FkVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5fbG9hZFR5cGVNYXAsIGV4dG5hbWUsIGxvYWRUeXBlKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSB4aHJUeXBlIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHhociB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCB4aHJUeXBlKSB7XG4gICAgc2V0RXh0TWFwKFJlc291cmNlLl94aHJUeXBlTWFwLCBleHRuYW1lLCB4aHJUeXBlKTtcbn07XG5cbmZ1bmN0aW9uIHNldEV4dE1hcChtYXAsIGV4dG5hbWUsIHZhbCkge1xuICAgIGlmIChleHRuYW1lICYmIGV4dG5hbWUuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgIGV4dG5hbWUgPSBleHRuYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dG5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hcFtleHRuYW1lXSA9IHZhbDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICAgIF9rZXlTdHI6IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIixcblxuICAgIGVuY29kZUJpbmFyeTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBcIlwiO1xuICAgICAgICB2YXIgYnl0ZWJ1ZmZlcjtcbiAgICAgICAgdmFyIGVuY29kZWRDaGFySW5kZXhlcyA9IG5ldyBBcnJheSg0KTtcbiAgICAgICAgdmFyIGlueCA9IDA7XG4gICAgICAgIHZhciBqbnggPSAwO1xuICAgICAgICB2YXIgcGFkZGluZ0J5dGVzID0gMDtcblxuICAgICAgICB3aGlsZSAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBGaWxsIGJ5dGUgYnVmZmVyIGFycmF5XG4gICAgICAgICAgICBieXRlYnVmZmVyID0gbmV3IEFycmF5KDMpO1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBieXRlYnVmZmVyLmxlbmd0aDsgam54KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGF3YXkgaGlnaC1vcmRlciBieXRlLCBhcyBkb2N1bWVudGVkIGF0OlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdCNIYW5kbGluZ19iaW5hcnlfZGF0YVxuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSBpbnB1dC5jaGFyQ29kZUF0KGlueCsrKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGVhY2ggZW5jb2RlZCBjaGFyYWN0ZXIsIDYgYml0cyBhdCBhIHRpbWVcbiAgICAgICAgICAgIC8vIGluZGV4IDE6IGZpcnN0IDYgYml0c1xuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzBdID0gYnl0ZWJ1ZmZlclswXSA+PiAyO1xuICAgICAgICAgICAgLy8gaW5kZXggMjogc2Vjb25kIDYgYml0cyAoMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAxICsgNCBtb3N0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBieXRlIDIpXG4gICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMV0gPSAoKGJ5dGVidWZmZXJbMF0gJiAweDMpIDw8IDQpIHwgKGJ5dGVidWZmZXJbMV0gPj4gNCk7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiB0aGlyZCA2IGJpdHMgKDQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMiArIDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gKChieXRlYnVmZmVyWzFdICYgMHgwZikgPDwgMikgfCAoYnl0ZWJ1ZmZlclsyXSA+PiA2KTtcbiAgICAgICAgICAgIC8vIGluZGV4IDM6IGZvcnRoIDYgYml0cyAoNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gYnl0ZWJ1ZmZlclsyXSAmIDB4M2Y7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHBhZGRpbmcgaGFwcGVuZWQsIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgIHBhZGRpbmdCeXRlcyA9IGlueCAtIChpbnB1dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFkZGluZ0J5dGVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCAyIGNoYXJhY3RlcnMgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMl0gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBsYXN0IGNoYXJhY3RlciB0byBwYWRkaW5nIGNoYXJcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vIHBhZGRpbmcgLSBwcm9jZWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vdyB3ZSB3aWxsIGdyYWIgZWFjaCBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgb3V0IG9mIG91ciBrZXlzdHJpbmdcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIG91ciBpbmRleCBhcnJheSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQgc3RyaW5nXG4gICAgICAgICAgICBmb3IgKGpueCA9IDA7IGpueCA8IGVuY29kZWRDaGFySW5kZXhlcy5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHRoaXMuX2tleVN0ci5jaGFyQXQoZW5jb2RlZENoYXJJbmRleGVzW2pueF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9Mb2FkZXInKTtcblxubW9kdWxlLmV4cG9ydHMuUmVzb3VyY2UgPSByZXF1aXJlKCcuL1Jlc291cmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzLm1pZGRsZXdhcmUgPSB7XG4gICAgY2FjaGluZzoge1xuICAgICAgICBtZW1vcnk6IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnknKVxuICAgIH0sXG4gICAgcGFyc2luZzoge1xuICAgICAgICBibG9iOiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL3BhcnNpbmcvYmxvYicpXG4gICAgfVxufTtcbiIsIi8vIGEgc2ltcGxlIGluLW1lbW9yeSBjYWNoZSBmb3IgcmVzb3VyY2VzXG52YXIgY2FjaGUgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICAvLyBpZiBjYWNoZWQsIHRoZW4gc2V0IGRhdGEgYW5kIGNvbXBsZXRlIHRoZSByZXNvdXJjZVxuICAgICAgICBpZiAoY2FjaGVbcmVzb3VyY2UudXJsXSkge1xuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IGNhY2hlW3Jlc291cmNlLnVybF07XG4gICAgICAgICAgICByZXNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIG5vdCBjYWNoZWQsIHdhaXQgZm9yIGNvbXBsZXRlIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb3VyY2Uub25jZSgnY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICBjYWNoZVt0aGlzLnVybF0gPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgnLi4vLi4vUmVzb3VyY2UnKSxcbiAgICBiNjQgPSByZXF1aXJlKCcuLi8uLi9iNjQnKTtcblxud2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblxuLy8gYSBtaWRkbGV3YXJlIGZvciB0cmFuc2Zvcm1pbmcgWEhSIGxvYWRlZCBCbG9icyBpbnRvIG1vcmUgdXNlZnVsIG9iamVjdHNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIHdhcyBhbiBYSFIgbG9hZCBvZiBhIGJsb2JcbiAgICAgICAgaWYgKHJlc291cmNlLnhociAmJiByZXNvdXJjZS54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBibG9iIHN1cHBvcnQgd2UgcHJvYmFibHkgZ290IGEgYmluYXJ5IHN0cmluZyBiYWNrXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5CbG9iIHx8IHR5cGVvZiByZXNvdXJjZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVzb3VyY2UueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaW1hZ2UsIGNvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgaW50byBhIGRhdGEgdXJsXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgdHlwZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5zcmMgPSAnZGF0YTonICsgdHlwZSArICc7YmFzZTY0LCcgKyBiNjQuZW5jb2RlQmluYXJ5KHJlc291cmNlLnhoci5yZXNwb25zZVRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGltYWdlIGxvYWRzIGFuZCB0aGVuIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5vbmxvYWQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY29udGVudCB0eXBlIHNheXMgdGhpcyBpcyBhbiBpbWFnZSwgdGhlbiB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBibG9iIGludG8gYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvdXJjZS5kYXRhLnR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlc291cmNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuYmxvYiA9IHJlc291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gc3JjO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuaXNJbWFnZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBubyBsb25nZXIgdXNlZCBibG9iIGFmdGVyIHRoZSBpbWFnZSBsb2Fkc1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJwaXhpLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMC4xMC1kZXZcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlBpeGkuanMgaXMgYSBmYXN0IGxpZ2h0d2VpZ2h0IDJEIGxpYnJhcnkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGRldmljZXMuXCIsXG4gIFwiYXV0aG9yXCI6IFwiTWF0IEdyb3Zlc1wiLFxuICBcImNvbnRyaWJ1dG9yc1wiOiBbXG4gICAgXCJDaGFkIEVuZ2xlciA8Y2hhZEBwYW50aGVyZGV2LmNvbT5cIixcbiAgICBcIlJpY2hhcmQgRGF2ZXkgPHJkYXZleUBnbWFpbC5jb20+XCJcbiAgXSxcbiAgXCJtYWluXCI6IFwiLi9zcmMvaW5kZXguanNcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHA6Ly9nb29kYm95ZGlnaXRhbC5jb20vXCIsXG4gIFwiYnVnc1wiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXNcIixcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiZ3VscCAmJiBndWxwIHdhdGNoXCIsXG4gICAgXCJ0ZXN0XCI6IFwiZ3VscCAmJiB0ZXN0ZW0gY2lcIixcbiAgICBcImJ1aWxkXCI6IFwiZ3VscFwiLFxuICAgIFwiZG9jc1wiOiBcImpzZG9jIC1jIC4vZ3VscC91dGlsL2pzZG9jLmNvbmYuanNvbiAtUiBSRUFETUUubWRcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpbi9cIixcbiAgICBcInNyYy9cIixcbiAgICBcIkNPTlRSSUJVVElORy5tZFwiLFxuICAgIFwiTElDRU5TRVwiLFxuICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgXCJSRUFETUUubWRcIlxuICBdLFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhc3luY1wiOiBcIl4xLjUuMFwiLFxuICAgIFwiYnJmc1wiOiBcIl4xLjQuMVwiLFxuICAgIFwiZWFyY3V0XCI6IFwiXjIuMC43XCIsXG4gICAgXCJldmVudGVtaXR0ZXIzXCI6IFwiXjEuMS4xXCIsXG4gICAgXCJnbC1tYXRyaXhcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL3RvamkvZ2wtbWF0cml4LmdpdFwiLFxuICAgIFwib2JqZWN0LWFzc2lnblwiOiBcIl40LjAuMVwiLFxuICAgIFwicGl4aS1nbC1jb3JlXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9Hb29kQm95RGlnaXRhbC9waXhpLWdsLWNvcmUuZ2l0XCIsXG4gICAgXCJyZXNvdXJjZS1sb2FkZXJcIjogXCJeMS42LjRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjExLjEuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4zLjIuMFwiLFxuICAgIFwiZGVsXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOS4wXCIsXG4gICAgXCJndWxwLWNhY2hlZFwiOiBcIl4xLjEuMFwiLFxuICAgIFwiZ3VscC1jb25jYXRcIjogXCJeMi42LjBcIixcbiAgICBcImd1bHAtZGVidWdcIjogXCJeMi4xLjBcIixcbiAgICBcImd1bHAtaGVhZGVyXCI6IFwiXjEuNy4xXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjExLjJcIixcbiAgICBcImd1bHAtbWlycm9yXCI6IFwiXjAuNC4wXCIsXG4gICAgXCJndWxwLXBsdW1iZXJcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtcmVuYW1lXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJndWxwLXNvdXJjZW1hcHNcIjogXCJeMS41LjJcIixcbiAgICBcImd1bHAtdWdsaWZ5XCI6IFwiXjEuNC4xXCIsXG4gICAgXCJndWxwLXV0aWxcIjogXCJeMy4wLjZcIixcbiAgICBcImphZ3VhcmpzLWpzZG9jXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZHNoaW1qcy9qYWd1YXJqcy1qc2RvYy5naXRcIixcbiAgICBcImpzZG9jXCI6IFwiXjMuMy4yXCIsXG4gICAgXCJqc2hpbnQtc3VtbWFyeVwiOiBcIl4wLjQuMFwiLFxuICAgIFwibWluaW1pc3RcIjogXCJeMS4yLjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMy4yXCIsXG4gICAgXCJyZXF1aXJlLWRpclwiOiBcIl4wLjMuMFwiLFxuICAgIFwicnVuLXNlcXVlbmNlXCI6IFwiXjEuMS4yXCIsXG4gICAgXCJ0ZXN0ZW1cIjogXCJeMC45LjRcIixcbiAgICBcInZpbnlsLWJ1ZmZlclwiOiBcIl4xLjAuMFwiLFxuICAgIFwidmlueWwtc291cmNlLXN0cmVhbVwiOiBcIl4xLjEuMFwiLFxuICAgIFwid2F0Y2hpZnlcIjogXCJeMy40LjBcIlxuICB9LFxuICBcImJyb3dzZXJpZnlcIjoge1xuICAgIFwidHJhbnNmb3JtXCI6IFtcbiAgICAgIFwiYnJmc1wiXG4gICAgXVxuICB9XG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLy8gYWRkIHNvbWUgZXh0cmEgdmFyaWFibGVzIHRvIHRoZSBjb250YWluZXIuLlxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpXG4pO1xuXG5cbi8qKlxuICogVGhlIEFjY2Vzc2liaWxpdHkgbWFuYWdlciByZWFjcmVhdGVzIHRoZSBhYmlsaXR5IHRvIHRhYiBhbmQgYW5kIGhhdmUgY29udGVudCByZWFkIGJ5IHNjcmVlbiByZWFkZXJzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGFzIGl0IGNhbiBwb3NzaWJseSBoZWxwIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyBhY2Nlc3MgcGl4aSBjb250ZW50LlxuICogTXVjaCBsaWtlIGludGVyYWN0aW9uIGFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBtYWRlIGFjY2Vzc2libGUuIFRoaXMgbWFuYWdlciB3aWxsIG1hcCB0aGUgZXZlbnRzIGFzIGlmIHRoZSBtb3VzZSB3YXMgYmVpbmcgdXNlZCwgbWluaW1pemluZyB0aGUgZWZmZXJvdCByZXF1aXJlZCB0byBpbXBsZW1lbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqL1xuZnVuY3Rpb24gQWNjZXNzaWJpbGl0eU1hbmFnZXIocmVuZGVyZXIpXG57XG5cdC8vIGZpcnN0IHdlIGNyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFxuICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUubGVmdCA9IDA7XG4gICAvL1xuICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuICAgXHRcbiAgIFx0LyoqXG4gICBcdCAqIFRoaXMgaXMgdGhlIGRvbSBlbGVtZW50IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gICBcdHRoaXMuZGl2ID0gZGl2O1xuXG4gICBcdC8qKlxuICAgXHQgKiBBIHNpbXBsZSBwb29sIGZvciBzdG9yaW5nIGRpdnMuXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7QXJyYXl9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuIFx0dGhpcy5wb29sID0gW107XG5cbiBcdC8qKlxuIFx0ICogVGhpcyBpcyBhIHRpY2sgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHJlbmRlcmVkLlxuIFx0ICogXG4gXHQgKiBAdHlwZSB7TnVtYmVyfVxuIFx0ICogQHByaXZhdGVcbiBcdCAqL1xuICAgXHR0aGlzLnJlbmRlcklkID0gMDtcblxuICAgXHQvKipcbiAgIFx0ICogU2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB2aXN1YWxseSBzaG93IHRoZSBkaXZzXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgIFx0ICovXG4gICBcdHRoaXMuZGVidWcgPSBmYWxzZTtcblxuICBcdC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGFjY2Vzc2liaWxpdHkgbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgIFx0LyoqXG4gICAgICogVGhlIGFycmF5IG9mIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzaWJsZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHByZSBiaW5kIHRoZSBmdW5jdGlvbnMuLlxuICAgICAqL1xuICAgXHR0aGlzLl9vbktleURvd24gPSB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKTtcbiAgIFx0dGhpcy5fb25Nb3VzZU1vdmUgPSB0aGlzLl9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogc3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFuYWdlci4gSWYgdGhlcmUgYXJlIG5vIGFjY2Vzc2libGUgb2JqZWN0cyBvciB0aGUgbW91c2UgaXMgbW92aW5nIHRoZSB3aWxsIGJlIGZhbHNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cbiAgIFx0Ly8gbGV0IGxpc3RlbiBmb3IgdGFiLi4gb25jZSBwcmVzc2VkIHdlIGNhbiBmaXJlIHVwIGFuZCBzaG93IHRoZSBhY2Nlc3NpYmlsaXR5IGxheWVyXG4gICBcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG59XG5cblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xuXG4vKipcbiAqIEFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBzaG93bi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgcHJlc2VzIHRoZSB0YWIga2V5XG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHRydWUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub24oJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cblx0dGhpcy5yZW5kZXJlci52aWV3LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5kaXYpO1x0XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIGhpZGRlbi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgbW92ZXMgdGhlIG1vdXNlXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYoIXRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9mZigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlKTtcblxuXHR0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcblxufTtcblxuLyoqXG4gKiBUaGlzIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aWxsIHJ1biB0aHJvdWdodCBoZSBzY2VuZSBncmFwaCBhbmQgYWRkIGFueSBuZXcgYWNjZXNzaWJsZSBvYmplY3RzIHRvIHRoZSBET00gbGF5ZXIuXG4gKiBAcGFyYW0gZWxlbWVudCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgRGlzcGxheU9iamVjdCB0byBjaGVjay5cbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG5cdGlmKCFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZihkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGUgJiYgZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcblx0e1xuXHRcdGlmKCFkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlKVxuXHRcdHtcblx0XHRcdHRoaXMuYWRkQ2hpbGQoZGlzcGxheU9iamVjdCk7XG5cdFx0fVxuXHQgICBcdFxuXHQgICBcdGRpc3BsYXlPYmplY3QucmVuZGVySWQgPSB0aGlzLnJlbmRlcklkO1xuXHR9XG5cblx0dmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcblxuXHRmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcblx0XHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKGNoaWxkcmVuW2ldKTtcblx0fVxufTtcblxuXG4vKipcbiAqIEJlZm9yZSBlYWNoIHJlbmRlciB0aGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGRpdnMgYXJlIG1hcHBlZCBjb3JyZWN0bHkgdG8gdGhlaXIgRGlzcGxheU9iamVjdHNcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpXG57XG5cblx0Ly8gdXBkYXRlIGNoaWxkcmVuLi4uXG5cdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHModGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkKTtcblxuXHR2YXIgcmVjdCA9IHRoaXMucmVuZGVyZXIudmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0dmFyIHN4ID0gcmVjdC53aWR0aCAgLyB0aGlzLnJlbmRlcmVyLndpZHRoO1xuXHR2YXIgc3kgPSByZWN0LmhlaWdodCAvIHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuXG5cdHZhciBkaXYgPSB0aGlzLmRpdjtcblxuXHRkaXYuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICdweCc7XG5cdGRpdi5zdHlsZS50b3AgPSByZWN0LnRvcCArICdweCc7XG5cdGRpdi5zdHlsZS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggKyAncHgnO1xuXHRkaXYuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgKyAncHgnO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuXHRcdGlmKGNoaWxkLnJlbmRlcklkICE9PSB0aGlzLnJlbmRlcklkKVxuXHRcdHtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaSwgMSk7XG5cdFx0XHR0aGlzLmRpdi5yZW1vdmVDaGlsZCggY2hpbGQuX2FjY2Vzc2libGVEaXYgKTtcblx0XHRcdHRoaXMucG9vbC5wdXNoKGNoaWxkLl9hY2Nlc3NpYmxlRGl2KTtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlRGl2ID0gbnVsbDtcblxuXHRcdFx0aS0tO1xuXG5cdFx0XHRpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBtYXAgZGl2IHRvIGRpc3BsYXkuLlxuXHRcdFx0ZGl2ID0gY2hpbGQuX2FjY2Vzc2libGVEaXY7XG5cdFx0XHR2YXIgaGl0QXJlYSA9IGNoaWxkLmhpdEFyZWE7XG5cdFx0XHR2YXIgd3QgPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuXHRcdFx0aWYoY2hpbGQuaGl0QXJlYSlcblx0XHRcdHtcblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoKHd0LnR4ICsgKGhpdEFyZWEueCAqIHd0LmEpKSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKCh3dC50eSArIChoaXRBcmVhLnkgKiB3dC5kKSkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHd0LmEgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogd3QuZCAqIHN5KSArICdweCc7XG5cdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0aGl0QXJlYSA9IGNoaWxkLmdldEJvdW5kcygpO1xuXG5cdFx0XHRcdHRoaXMuY2FwSGl0QXJlYShoaXRBcmVhKTtcblxuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9IChoaXRBcmVhLnggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gIChoaXRBcmVhLnkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiBzeSkgKyAncHgnO1xuXHRcdFx0fVx0XHRcblx0XHR9XG5cdH1cblxuXHQvLyBpbmNyZW1lbnQgdGhlIHJlbmRlciBpZC4uXG5cdHRoaXMucmVuZGVySWQrKztcbn07XG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYXBIaXRBcmVhID0gZnVuY3Rpb24gKGhpdEFyZWEpXG57XG4gICAgaWYgKGhpdEFyZWEueCA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoICs9IGhpdEFyZWEueDtcbiAgICAgICAgaGl0QXJlYS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaGl0QXJlYS55IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ICs9IGhpdEFyZWEueTtcbiAgICAgICAgaGl0QXJlYS55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueCArIGhpdEFyZWEud2lkdGggPiB0aGlzLnJlbmRlcmVyLndpZHRoIClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoIC0gaGl0QXJlYS54O1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS55ICsgaGl0QXJlYS5oZWlnaHQgPiB0aGlzLnJlbmRlcmVyLmhlaWdodCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0IC0gaGl0QXJlYS55O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBBZGRzIGEgRGlzcGxheU9iamVjdCB0byB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuLy9cdHRoaXMuYWN0aXZhdGUoKTtcblx0XG5cdHZhciBkaXYgPSB0aGlzLnBvb2wucG9wKCk7XG5cblx0aWYoIWRpdilcblx0e1xuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBcblxuXHQgICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGVidWcgPyAncmdiYSgyNTUsMCwwLDAuNSknIDogJ3RyYW5zcGFyZW50Jztcblx0ICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdCAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcblx0ICAgIGRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdub25lJztcblxuXHQgICAgXG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX29uRm9jdXNPdXQuYmluZCh0aGlzKSk7XG5cdH1cblx0ICAgXHRcblxuXG5cblx0ZGl2LnRpdGxlID0gZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlVGl0bGUgfHwgJ2Rpc3BsYXlPYmplY3QgJyArIHRoaXMudGFiSW5kZXg7XG5cblx0Ly9cblx0XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUgPSB0cnVlO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ID0gZGl2O1xuXHRkaXYuZGlzcGxheU9iamVjdCA9IGRpc3BsYXlPYmplY3Q7XG5cblxuXHR0aGlzLmNoaWxkcmVuLnB1c2goZGlzcGxheU9iamVjdCk7XG5cdHRoaXMuZGl2LmFwcGVuZENoaWxkKCBkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ICk7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYudGFiSW5kZXggPSBkaXNwbGF5T2JqZWN0LnRhYkluZGV4O1xufTtcblxuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBidXR0b24gcHJlc3MgdG8gcGl4aSdzIEludGVyYWN0aW9uTWFuYWdlciAoY2xpY2spXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnY2xpY2snLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3ZlcilcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1cyA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3V0KVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzT3V0ID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uS2V5RG93biA9IGZ1bmN0aW9uKGUpXG57XG5cdGlmKGUua2V5Q29kZSAhPT0gOSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuYWN0aXZhdGUoKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmUgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZGVhY3RpdmF0ZSgpO1xufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgXG57XG5cdHRoaXMuZGl2ID0gbnVsbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblx0XHR0aGlzLmNoaWxkcmVuW2ldLmRpdiA9IG51bGw7XG5cdH1cblxuXHRcblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuXHRcdFxuXHR0aGlzLnBvb2wgPSBudWxsO1xuXHR0aGlzLmNoaWxkcmVuID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5cbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYWNjZXNzaWJsZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmFjY2Vzc2liaWxpdHkuYWNjZXNzaWJsZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgYWNjZXNzaWJsZVRhcmdldCA9IHtcbiAgICBcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGVUaXRsZTpudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICB0YWJJbmRleDowLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZUFjdGl2ZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVEaXY6ZmFsc2VcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBhY2Nlc3NpYmxlVGFyZ2V0O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgYWNjZXNzaWJpbGl0eSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYWNjZXNzaWJsZVRhcmdldDogICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpLFxuICAgIEFjY2Vzc2liaWxpdHlNYW5hZ2VyOiByZXF1aXJlKCcuL0FjY2Vzc2liaWxpdHlNYW5hZ2VyJylcbn07XG4iLCIvKipcbiAqIENvbnN0YW50IHZhbHVlcyB1c2VkIGluIHBpeGlcbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG52YXIgQ09OU1QgPSB7XG4gICAgLyoqXG4gICAgICogU3RyaW5nIG9mIHRoZSBjdXJyZW50IFBJWEkgdmVyc2lvblxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBWRVJTSU9OXG4gICAgICovXG4gICAgVkVSU0lPTjogcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQSV8yIC0gVHdvIFBpXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFBJXzI6IE1hdGguUEkgKiAyLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJBRF9UT19ERUcgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyByYWRpYW5zIHRvIGRlZ3JlZXNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUkFEX1RPX0RFRzogMTgwIC8gTWF0aC5QSSxcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBERUdfVE9fUkFEIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgZGVncmVlcyB0byByYWRpYW5zXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIERFR19UT19SQUQ6IE1hdGguUEkgLyAxODAsXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgZnJhbWVzIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gVEFSR0VUX0ZQTVM9MC4wNlxuICAgICAqL1xuICAgIFRBUkdFVF9GUE1TOiAwLjA2LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgdG8gaWRlbnRpZnkgdGhlIFJlbmRlcmVyIFR5cGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFJFTkRFUkVSX1RZUEVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuV0VCR0xcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5DQU5WQVNcbiAgICAgKi9cbiAgICBSRU5ERVJFUl9UWVBFOiB7XG4gICAgICAgIFVOS05PV046ICAgIDAsXG4gICAgICAgIFdFQkdMOiAgICAgIDEsXG4gICAgICAgIENBTlZBUzogICAgIDJcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyBibGVuZCBtb2RlcyBzdXBwb3J0ZWQgYnkgUElYSS4gSU1QT1JUQU5UIC0gVGhlIFdlYkdMIHJlbmRlcmVyIG9ubHkgc3VwcG9ydHNcbiAgICAgKiB0aGUgTk9STUFMLCBBREQsIE1VTFRJUExZIGFuZCBTQ1JFRU4gYmxlbmQgbW9kZXMuIEFueXRoaW5nIGVsc2Ugd2lsbCBzaWxlbnRseSBhY3QgbGlrZVxuICAgICAqIE5PUk1BTC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gQkxFTkRfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkFERFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5NVUxUSVBMWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQ1JFRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuT1ZFUkxBWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5EQVJLRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTElHSFRFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9ET0RHRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9CVVJOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhBUkRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU09GVF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5ESUZGRVJFTkNFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkVYQ0xVU0lPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IVUVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0FUVVJBVElPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MVU1JTk9TSVRZXG4gICAgICovXG4gICAgQkxFTkRfTU9ERVM6IHtcbiAgICAgICAgTk9STUFMOiAgICAgICAgIDAsXG4gICAgICAgIEFERDogICAgICAgICAgICAxLFxuICAgICAgICBNVUxUSVBMWTogICAgICAgMixcbiAgICAgICAgU0NSRUVOOiAgICAgICAgIDMsXG4gICAgICAgIE9WRVJMQVk6ICAgICAgICA0LFxuICAgICAgICBEQVJLRU46ICAgICAgICAgNSxcbiAgICAgICAgTElHSFRFTjogICAgICAgIDYsXG4gICAgICAgIENPTE9SX0RPREdFOiAgICA3LFxuICAgICAgICBDT0xPUl9CVVJOOiAgICAgOCxcbiAgICAgICAgSEFSRF9MSUdIVDogICAgIDksXG4gICAgICAgIFNPRlRfTElHSFQ6ICAgICAxMCxcbiAgICAgICAgRElGRkVSRU5DRTogICAgIDExLFxuICAgICAgICBFWENMVVNJT046ICAgICAgMTIsXG4gICAgICAgIEhVRTogICAgICAgICAgICAxMyxcbiAgICAgICAgU0FUVVJBVElPTjogICAgIDE0LFxuICAgICAgICBDT0xPUjogICAgICAgICAgMTUsXG4gICAgICAgIExVTUlOT1NJVFk6ICAgICAxNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIHdlYmdsIGRyYXcgbW9kZXMuIFRoZXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggR0wgZHJhd01vZGUgdG8gdXNlXG4gICAgICogdW5kZXIgY2VydGFpbiBzaXR1YXRpb25zIGFuZCByZW5kZXJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5QT0lOVFNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfTE9PUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX0ZBTlxuICAgICAqL1xuICAgIERSQVdfTU9ERVM6IHtcbiAgICAgICAgUE9JTlRTOiAgICAgICAgIDAsXG4gICAgICAgIExJTkVTOiAgICAgICAgICAxLFxuICAgICAgICBMSU5FX0xPT1A6ICAgICAgMixcbiAgICAgICAgTElORV9TVFJJUDogICAgIDMsXG4gICAgICAgIFRSSUFOR0xFUzogICAgICA0LFxuICAgICAgICBUUklBTkdMRV9TVFJJUDogNSxcbiAgICAgICAgVFJJQU5HTEVfRkFOOiAgIDZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBwaXhpLlxuICAgICAqXG4gICAgICogVGhlIERFRkFVTFQgc2NhbGUgbW9kZSBhZmZlY3RzIHRoZSBkZWZhdWx0IHNjYWxpbmcgbW9kZSBvZiBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAgKiBJdCBjYW4gYmUgcmUtYXNzaWduZWQgdG8gZWl0aGVyIExJTkVBUiBvciBORUFSRVNULCBkZXBlbmRpbmcgdXBvbiBzdWl0YWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0NBTEVfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuREVGQVVMVD1MSU5FQVJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTElORUFSIFNtb290aCBzY2FsaW5nXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLk5FQVJFU1QgUGl4ZWxhdGluZyBzY2FsaW5nXG4gICAgICovXG4gICAgU0NBTEVfTU9ERVM6IHtcbiAgICAgICAgREVGQVVMVDogICAgMCxcbiAgICAgICAgTElORUFSOiAgICAgMCxcbiAgICAgICAgTkVBUkVTVDogICAgMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZml4IHRoYXQgZGVub3RlcyBhIFVSTCBpcyBmb3IgYSByZXRpbmEgYXNzZXRcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gUkVUSU5BX1BSRUZJWFxuICAgICAqL1xuICAgIC8vZXhhbXBsZTogJ0AyeCcsXG4gICAgUkVUSU5BX1BSRUZJWDogL0AoLispeC8sXG5cbiAgICBSRVNPTFVUSU9OOjEsXG5cbiAgICBGSUxURVJfUkVTT0xVVElPTjoxLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgcmVuZGVyIG9wdGlvbnMgaWYgbm9uZSBhcmUgc3VwcGxpZWQgdG8ge0BsaW5rIFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKiBvciB7QGxpbmsgUElYSS5DYW52YXNSZW5kZXJlcn0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERFRkFVTFRfUkVOREVSX09QVElPTlNcbiAgICAgKiBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnZpZXc9bnVsbFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy50cmFuc3BhcmVudD1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hbnRpYWxpYXM9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuZm9yY2VGWEFBPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnJlc29sdXRpb249MVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmF1dG9SZXNpemU9ZmFsc2VcbiAgICAgKi9cbiAgICBERUZBVUxUX1JFTkRFUl9PUFRJT05TOiB7XG4gICAgICAgIHZpZXc6IG51bGwsXG4gICAgICAgIHJlc29sdXRpb246IDEsXG4gICAgICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgICAgIGZvcmNlRlhBQTogZmFsc2UsXG4gICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgIGNsZWFyQmVmb3JlUmVuZGVyOiB0cnVlLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgICAgICByb3VuZFBpeGVsczogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnRzIHRoYXQgaWRlbnRpZnkgc2hhcGVzLCBtYWlubHkgdG8gcHJldmVudCBgaW5zdGFuY2VvZmAgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFU1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUE9MWT0wXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SRUNUPTFcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkNJUkM9MlxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuRUxJUD0zXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SUkVDPTRcbiAgICAgKi9cbiAgICBTSEFQRVM6IHtcbiAgICAgICAgUE9MWTogMCxcbiAgICAgICAgUkVDVDogMSxcbiAgICAgICAgQ0lSQzogMixcbiAgICAgICAgRUxJUDogMyxcbiAgICAgICAgUlJFQzogNFxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBtYXliZSBjaGFuZ2UgdG8gU1BSSVRFLkJBVENIX1NJWkU6IDIwMDBcbiAgICAvLyBUT0RPOiBtYXliZSBhZGQgUEFSVElDTEUuQkFUQ0hfU0laRTogMTUwMDBcbiAgICBTUFJJVEVfQkFUQ0hfU0laRTogMjAwMCAvL25pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSBhbmQgZGVza3RvcCBtYWNoaW5lc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDT05TVDtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gcmVxdWlyZSgnLi9EaXNwbGF5T2JqZWN0JyksXG4gICAgUmVuZGVyVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgQ29udGFpbmVyIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0cy5cbiAqIEl0IGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBkaXNwbGF5IG9iamVjdHMgdGhhdCBhY3QgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIG9iamVjdHMuXG4gKlxuICpgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiBgYGBcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5EaXNwbGF5T2JqZWN0XG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDb250YWluZXIoKVxue1xuICAgIERpc3BsYXlPYmplY3QuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdFtdfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERpc3BsYXlPYmplY3QucHJvdG90eXBlKTtcbkNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5lcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udGFpbmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gMTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIGhlaWdodCA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBPdmVycmlkYWJsZSBtZXRob2QgdGhhdCBjYW4gYmUgdXNlZCBieSBDb250YWluZXIgc3ViY2xhc3NlcyB3aGVuZXZlciB0aGUgY2hpbGRyZW4gYXJyYXkgaXMgbW9kaWZpZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7fTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lci5cbiAqIFxuICogWW91IGNhbiBhbHNvIGFkZCBtdWx0cGxlIGl0ZW1zIGxpa2Ugc286IG15Q29udGFpbmVyLmFkZENoaWxkKHRoaW5rT25lLCB0aGluZ1R3bywgdGhpbmdUaHJlZSlcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBhZGQgdG8gdGhlIGNvbnRhaW5lclxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57IFxuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaGFzIGEgcGFyZW50IHRoZW4gbGV0cyByZW1vdmUgaXQgYXMgUGl4aSBvYmplY3RzIGNhbiBvbmx5IGV4aXN0IGluIG9uZSBwbGFjZVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UodGhpcy5jaGlsZHJlbi5sZW5ndGgtMSk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lciBhdCBhIHNwZWNpZmllZCBpbmRleC4gSWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd25cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRvIGFkZFxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBwbGFjZSB0aGUgY2hpbGQgaW5cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkQXQgPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hpbGQgKyAnYWRkQ2hpbGRBdDogVGhlIGluZGV4ICcrIGluZGV4ICsnIHN1cHBsaWVkIGlzIG91dCBvZiBib3VuZHMgJyArIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiAyIERpc3BsYXkgT2JqZWN0cyB3aXRoaW4gdGhpcyBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKiBAcGFyYW0gY2hpbGQyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc3dhcENoaWxkcmVuID0gZnVuY3Rpb24gKGNoaWxkLCBjaGlsZDIpXG57XG4gICAgaWYgKGNoaWxkID09PSBjaGlsZDIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluZGV4MSA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG4gICAgdmFyIGluZGV4MiA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZDIpO1xuXG4gICAgaWYgKGluZGV4MSA8IDAgfHwgaW5kZXgyIDwgMClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3dhcENoaWxkcmVuOiBCb3RoIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0cyBtdXN0IGJlIGNoaWxkcmVuIG9mIHRoZSBjYWxsZXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDFdID0gY2hpbGQyO1xuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgyXSA9IGNoaWxkO1xuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleDEgPCBpbmRleDIgPyBpbmRleDEgOiBpbmRleDIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBwb3NpdGlvbiBvZiBhIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgdG8gaWRlbnRpZnlcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdCB0byBpZGVudGlmeVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiBhbiBleGlzdGluZyBjaGlsZCBpbiB0aGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIGZvciB3aGljaCB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGluZGV4IG51bWJlclxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSByZXN1bHRpbmcgaW5kZXggbnVtYmVyIGZvciB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuXG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgY3VycmVudEluZGV4LCAxKTsgLy8gcmVtb3ZlIGZyb20gb2xkIHBvc2l0aW9uXG4gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsgLy9hZGQgYXQgbmV3IHBvc2l0aW9uXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBhdFxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgYXQgdGhlIGdpdmVuIGluZGV4LCBpZiBhbnkuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDaGlsZEF0OiBTdXBwbGllZCBpbmRleCAnICsgaW5kZXggKyAnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjaGlsZCBsaXN0LCBvciB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baW5kZXhdO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW1vdmVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIHNwZWNpZmllZCBpbmRleCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgZnJvbVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIHZhciBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRBdChpbmRleCk7XG5cbiAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIGNvbnRhaW5lciB0aGF0IGFyZSB3aXRoaW4gdGhlIGJlZ2luIGFuZCBlbmQgaW5kZXhlcy5cbiAqXG4gKiBAcGFyYW0gYmVnaW5JbmRleCB7bnVtYmVyfSBUaGUgYmVnaW5uaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gKiBAcGFyYW0gZW5kSW5kZXgge251bWJlcn0gVGhlIGVuZGluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzaXplIG9mIHRoZSBjb250YWluZXIuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbiAoYmVnaW5JbmRleCwgZW5kSW5kZXgpXG57XG4gICAgdmFyIGJlZ2luID0gYmVnaW5JbmRleCB8fCAwO1xuICAgIHZhciBlbmQgPSB0eXBlb2YgZW5kSW5kZXggPT09ICdudW1iZXInID8gZW5kSW5kZXggOiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgcmFuZ2UgPSBlbmQgLSBiZWdpbjtcbiAgICB2YXIgcmVtb3ZlZCwgaTtcblxuICAgIGlmIChyYW5nZSA+IDAgJiYgcmFuZ2UgPD0gZW5kKVxuICAgIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGJlZ2luLCByYW5nZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0ucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShiZWdpbkluZGV4KTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZ2UgPT09IDAgJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyZW1vdmVDaGlsZHJlbjogbnVtZXJpYyB2YWx1ZXMgYXJlIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UuJyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIgZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSBmYWxzZTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkNvbnRhaW5lci5wcm90b3R5cGUuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtID0gQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIHRoZSBib3VuZHMgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCB0aGlzIHJlbmRlciBzZXNzaW9uIHNvIHJldHVybiB3aGF0IHdlIGhhdmVcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgY2hpbGRCb3VuZHM7XG4gICAgICAgIHZhciBjaGlsZE1heFg7XG4gICAgICAgIHZhciBjaGlsZE1heFk7XG5cbiAgICAgICAgdmFyIGNoaWxkVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgY2hpbGRCb3VuZHMgPSB0aGlzLmNoaWxkcmVuW2ldLmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBtaW5YID0gbWluWCA8IGNoaWxkQm91bmRzLnggPyBtaW5YIDogY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIG1pblkgPSBtaW5ZIDwgY2hpbGRCb3VuZHMueSA/IG1pblkgOiBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBjaGlsZE1heFggPSBjaGlsZEJvdW5kcy53aWR0aCArIGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICBjaGlsZE1heFkgPSBjaGlsZEJvdW5kcy5oZWlnaHQgKyBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBtYXhYID0gbWF4WCA+IGNoaWxkTWF4WCA/IG1heFggOiBjaGlsZE1heFg7XG4gICAgICAgICAgICBtYXhZID0gbWF4WSA+IGNoaWxkTWF4WSA/IG1heFkgOiBjaGlsZE1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkVmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJHZXRCb3VuZHMgPSBDb250YWluZXIucHJvdG90eXBlLmdldEJvdW5kcztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5vbi1nbG9iYWwgbG9jYWwgYm91bmRzIG9mIHRoZSBDb250YWluZXIgYXMgYSByZWN0YW5nbGUuXG4gKiBUaGUgY2FsY3VsYXRpb24gdGFrZXMgYWxsIHZpc2libGUgY2hpbGRyZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4Q2FjaGUgPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdGguTWF0cml4LklERU5USVRZO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdHJpeENhY2hlO1xuXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMoIG1hdGguTWF0cml4LklERU5USVRZICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICBcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpLCBqO1xuXG4gICAgLy8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyBlbGVtZW50IGhhcyBhIG1hc2sgb3IgYSBmaWx0ZXIuXG4gICAgaWYgKHRoaXMuX21hc2sgfHwgdGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuXG4gICAgICAgIC8vIHB1c2ggZmlsdGVyIGZpcnN0IGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyBjb3JyZWN0IGZvciBhbnkgbWFza2luZ1xuICAgICAgICBpZiAodGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRoaXMsIHRoaXMuX2ZpbHRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnB1c2hNYXNrKHRoaXMsIHRoaXMuX21hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgLy8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBiYXRjaCwgb25seSByZW5kZXJlZCBpZiBpdCBoYXMgYSB0ZXh0dXJlLlxuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIG1ha2Ugc3VyZSB0aGV5IGdldCByZW5kZXJlZFxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmlsdGVycylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gc2ltcGxlIHJlbmRlciBjaGlsZHJlbiFcbiAgICAgICAgZm9yIChpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnJlbmRlcldlYkdMKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3ViY2xhc3NcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyB0aGlzIGlzIHdoZXJlIGNvbnRlbnQgaXRzZWxmIGdldHMgcmVuZGVyZWQuLi5cbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpc1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMuYWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcy5fbWFzaywgcmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlckNhbnZhcyhyZW5kZXJlcik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFzaylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2socmVuZGVyZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcbntcbiAgICBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBpZiAoZGVzdHJveUNoaWxkcmVuKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KGRlc3Ryb3lDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9UcmFuc2Zvcm0nKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgIF90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgdGhhdCBhcmUgcmVuZGVyZWQgb24gdGhlIHNjcmVlbi5cbiAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvbiBpdHMgb3duIHJhdGhlciBpdCBzaG91bGQgYmUgZXh0ZW5kZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIERpc3BsYXlPYmplY3QoKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29vcmRpbmF0ZSBvZiB0aGUgb2JqZWN0IHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy50cmFuc2Zvcm0ucG9zaXRpb247XG4gICAvLyB0aGlzLl9wb3NpdGlvbiA9IG5ldyBDYWNoZVBvaW50KHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIGZhY3RvciBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlID0gdGhpcy50cmFuc2Zvcm0uc2NhbGVcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXZvdCBwb2ludCBvZiB0aGUgZGlzcGxheU9iamVjdCB0aGF0IGl0IHJvdGF0ZXMgYXJvdW5kXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucGl2b3QgPSB0aGlzLnRyYW5zZm9ybS5waXZvdFxuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2tldyBmYWN0b3IgZm9yIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5za2V3ID0gdGhpcy50cmFuc2Zvcm0uc2tld1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9yb3RhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BhY2l0eSBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpc2liaWxpdHkgb2YgdGhlIG9iamVjdC4gSWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biwgYW5kXG4gICAgICogdGhlIHVwZGF0ZVRyYW5zZm9ybSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDYW4gdGhpcyBvYmplY3QgYmUgcmVuZGVyZWQsIGlmIGZhbHNlIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgZHJhd24gYnV0IHRoZSB1cGRhdGVUcmFuc2Zvcm1cbiAgICAgKiBtZXRob2RzIHdpbGwgc3RpbGwgYmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmFibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIHRoaXMgZGlzcGxheSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNvbnRhaW5lcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbXVsdGlwbGllZCBhbHBoYSBvZiB0aGUgZGlzcGxheU9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRyYW5zZm9ybSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIHdvcmxkIChwYXJlbnQpIGZhY3RvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gdGhpcy50cmFuc2Zvcm0ubG9jYWxUcmFuc2Zvcm07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJlYSB0aGUgZmlsdGVyIGlzIGFwcGxpZWQgdG8uIFRoaXMgaXMgdXNlZCBhcyBtb3JlIG9mIGFuIG9wdGltaXNhdGlvblxuICAgICAqIHJhdGhlciB0aGFuIGZpZ3VyaW5nIG91dCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgZGlzcGxheU9iamVjdCBlYWNoIGZyYW1lIHlvdSBjYW4gc2V0IHRoaXMgcmVjdGFuZ2xlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xuXG4gICAgLyoqeHd3XG4gICAgICogY2FjaGVkIHNpbiByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3IgPSAwO1xuXG4gICAgLyoqXG4gICAgICogY2FjaGVkIGNvcyByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3IgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRzID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vc3QgdXAtdG8tZGF0ZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcmlnaW5hbCwgY2FjaGVkIG1hc2sgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXNrID0gbnVsbDtcblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGF5T2JqZWN0O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB4IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NhbGVYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByb3RhdGlvbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY3IgPSBNYXRoLmNvcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHNwcml0ZSBpcyBnbG9iYWxseSB2aXNpYmxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHdvcmxkVmlzaWJsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcztcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbWFzayBmb3IgdGhlIGRpc3BsYXlPYmplY3QuIEEgbWFzayBpcyBhbiBvYmplY3QgdGhhdCBsaW1pdHMgdGhlIHZpc2liaWxpdHkgb2YgYW4gb2JqZWN0IHRvIHRoZSBzaGFwZSBvZiB0aGUgbWFzayBhcHBsaWVkIHRvIGl0LlxuICAgICAqIEluIFBJWEkgYSByZWd1bGFyIG1hc2sgbXVzdCBiZSBhIFBJWEkuR3JhcGhpY3Mgb3IgYSBQSVhJLlNwcml0ZSBvYmplY3QuIFRoaXMgYWxsb3dzIGZvciBtdWNoIGZhc3RlciBtYXNraW5nIGluIGNhbnZhcyBhcyBpdCB1dGlsaXNlcyBzaGFwZSBjbGlwcGluZy5cbiAgICAgKiBUbyByZW1vdmUgYSBtYXNrLCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc3xQSVhJLlNwcml0ZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIG1hc2s6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFzaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX21hc2sgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFzay5yZW5kZXJhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVycyBmb3IgdGhlIGRpc3BsYXlPYmplY3QuXG4gICAgICogKiBJTVBPUlRBTlQ6IFRoaXMgaXMgYSB3ZWJHTCBvbmx5IGZlYXR1cmUgYW5kIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqIFRvIHJlbW92ZSBmaWx0ZXJzIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnbnVsbCdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGZpbHRlcnM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLnNsaWNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gdmFsdWUgJiYgdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBUT0RPIC0gT3B0aW1pemF0aW9uIHBhc3MhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgLy8gbXVsdGlwbHkgdGhlIGFscGhhcy4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG59O1xuXG4vLyBwZXJmb3JtYW5jZSBpbmNyZWFzZSB0byBhdm9pZCB1c2luZyBjYWxsLi4gKDEweCBmYXN0ZXIpXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtID0gRGlzcGxheU9iamVjdC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtO1xuXG4vKipcbiAqXG4gKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeCkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMobWF0aC5NYXRyaXguSURFTlRJVFkpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvR2xvYmFsID0gZnVuY3Rpb24gKHBvc2l0aW9uKVxue1xuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb3RcbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseShwb3NpdGlvbik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdCByZWxhdGl2ZSB0byBhbm90aGVyIHBvaW50XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcGFyYW0gW2Zyb21dIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgZ2xvYmFsIHBvc2l0aW9uIGZyb21cbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgUG9pbnQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvTG9jYWwgPSBmdW5jdGlvbiAocG9zaXRpb24sIGZyb20sIHBvaW50KVxue1xuICAgIGlmIChmcm9tKVxuICAgIHtcbiAgICAgICAgcG9zaXRpb24gPSBmcm9tLnRvR2xvYmFsKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBzaW1wbHkgYXBwbHkgdGhlIG1hdHJpeC4uXG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvc2l0aW9uLCBwb2ludCk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFyZW50IENvbnRhaW5lciBvZiB0aGlzIERpc3BsYXlPYmplY3RcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdG8gYWRkIHRoaXMgRGlzcGxheU9iamVjdCB0b1xuICogQHJldHVybiB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRoYXQgdGhpcyBEaXNwbGF5T2JqZWN0IHdhcyBhZGRlZCB0b1xuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXIuYWRkQ2hpbGQpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFBhcmVudDogQXJndW1lbnQgbXVzdCBiZSBhIENvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRDaGlsZCh0aGlzKTtcbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzZXQgdGhlIHBvc3Rpb24sIHNjYWxlLCBza2V3IGFuZCBwaXZvdCBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBUaGUgWCBwb3NpdGlvblxuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IFRoZSBZIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3NjYWxlWD0xXSB7bnVtYmVyfSBUaGUgWCBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtzY2FsZVk9MV0ge251bWJlcn0gVGhlIFkgc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbcm90YXRpb249MF0ge251bWJlcn0gVGhlIHJvdGF0aW9uXG4gKiBAcGFyYW0gW3NrZXdYPTBdIHtudW1iZXJ9IFRoZSBYIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbc2tld1k9MF0ge251bWJlcn0gVGhlIFkgc2tldyB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFg9MF0ge251bWJlcn0gVGhlIFggcGl2b3QgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RZPTBdIHtudW1iZXJ9IFRoZSBZIHBpdm90IHZhbHVlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKHgsIHksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZLCBwaXZvdFgsIHBpdm90WSkgLy9qc2hpbnQgaWdub3JlOmxpbmVcbntcbiAgICB0aGlzLnBvc2l0aW9uLnggPSB4IHx8IDA7XG4gICAgdGhpcy5wb3NpdGlvbi55ID0geSB8fCAwO1xuICAgIHRoaXMuc2NhbGUueCA9ICFzY2FsZVggPyAxIDogc2NhbGVYO1xuICAgIHRoaXMuc2NhbGUueSA9ICFzY2FsZVkgPyAxIDogc2NhbGVZO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgIHRoaXMuc2tldy54ID0gc2tld1ggfHwgMDtcbiAgICB0aGlzLnNrZXcueSA9IHNrZXdZIHx8IDA7XG4gICAgdGhpcy5waXZvdC54ID0gcGl2b3RYIHx8IDA7XG4gICAgdGhpcy5waXZvdC55ID0gcGl2b3RZIHx8IDA7XG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEJhc2UgZGVzdHJveSBtZXRob2QgZm9yIGdlbmVyaWMgZGlzcGxheSBvYmplY3RzXG4gKlxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcblxuICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2NhbGUgPSBudWxsO1xuICAgIHRoaXMucGl2b3QgPSBudWxsO1xuICAgIHRoaXMuc2tldyA9IG51bGw7XG5cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcblxuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IG1hdGguUG9pbnQoMSwxKTtcbiAgICB0aGlzLnBpdm90ID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNrZXcgPSBuZXcgbWF0aC5Qb2ludCgwLjApO1xuICAgIFxuICAgIHRoaXMucm90YXRpb24gPSAwO1xuICAgIHRoaXMuX3NyID0gTWF0aC5zaW4oMCk7XG4gICAgdGhpcy5fY3IgPSBNYXRoLmNvcygwKTtcbiAgICBcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufVxuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHJhbnNmb3JtO1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uIChwYXJlbnRUcmFuc2Zvcm0pXG57XG4gICAgdmFyIHB0ID0gcGFyZW50VHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGx0ID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcblxuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueDtcbiAgICAgICAgbHQuYiAgPSAgdGhpcy5fc3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmMgID0gLXRoaXMuX3NyICogdGhpcy5zY2FsZS55O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQudHggPSAgdGhpcy5wb3NpdGlvbi54IC0gKHRoaXMucGl2b3QueCAqIGx0LmEgKyB0aGlzLnBpdm90LnkgKiBsdC5jKTtcbiAgICAgICAgbHQudHkgPSAgdGhpcy5wb3NpdGlvbi55IC0gKHRoaXMucGl2b3QueCAqIGx0LmIgKyB0aGlzLnBpdm90LnkgKiBsdC5kKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmRpcnR5IHx8IHBhcmVudC5kaXJ0eSlcbiAgICB7ICAgICAgXG4gICAgICAgIC8vIGNvbmNhdCB0aGUgcGFyZW50IG1hdHJpeCB3aXRoIHRoZSBvYmplY3RzIHRyYW5zZm9ybS5cbiAgICAgICAgd3QuYSAgPSBsdC5hICAqIHB0LmEgKyBsdC5iICAqIHB0LmM7XG4gICAgICAgIHd0LmIgID0gbHQuYSAgKiBwdC5iICsgbHQuYiAgKiBwdC5kO1xuICAgICAgICB3dC5jICA9IGx0LmMgICogcHQuYSArIGx0LmQgICogcHQuYztcbiAgICAgICAgd3QuZCAgPSBsdC5jICAqIHB0LmIgKyBsdC5kICAqIHB0LmQ7XG4gICAgICAgIHd0LnR4ID0gbHQudHggKiBwdC5hICsgbHQudHkgKiBwdC5jICsgcHQudHg7XG4gICAgICAgIHd0LnR5ID0gbHQudHggKiBwdC5iICsgbHQudHkgKiBwdC5kICsgcHQudHk7ICAgICAgIFxuICAgIFxuICAgLy8gICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgLy8gICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbi8vICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgLy8gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm07XG5cblxuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vR3JhcGhpY3NEYXRhJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcFBvaW50ID0gbmV3IG1hdGguUG9pbnQoKTtcblxuLyoqXG4gKiBUaGUgR3JhcGhpY3MgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB1c2VkIHRvIGRyYXcgcHJpbWl0aXZlIHNoYXBlcyBzdWNoIGFzIGxpbmVzLCBjaXJjbGVzIGFuZFxuICogcmVjdGFuZ2xlcyB0byB0aGUgZGlzcGxheSwgYW5kIHRvIGNvbG9yIGFuZCBmaWxsIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3MoKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCAodGhpY2tuZXNzKSBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gMDtcblxuICAgIC8qKlxuICAgICAqIEdyYXBoaWNzIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQXBwbHkgYSB2YWx1ZSBvZiAweEZGRkZGRiB0byByZXNldCB0aGUgdGludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByZXZpb3VzIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVXNlZCB0byBjb21wYXJlIHRvIHRoZSBjdXJyZW50IHRpbnQgYW5kIGNoZWNrIGlmIHRoZXJlcyBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMuX3ByZXZUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUw7XG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHBhdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBjb250YWluaW5nIHNvbWUgV2ViR0wtcmVsYXRlZCBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgb2JqZWN0Pn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIFRPRE8gLSBfd2ViZ2wgc2hvdWxkIHVzZSBhIHByb3RvdHlwZSBvYmplY3QsIG5vdCBhIHJhbmRvbSB1bmRvY3VtZW50ZWQgb2JqZWN0Li4uXG4gICAgdGhpcy5fd2ViR0wgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBzaGFwZSBpcyBiZWluZyB1c2VkIGFzIGEgbWFzay5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc01hc2sgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBib3VuZHMnIHBhZGRpbmcgdXNlZCBmb3IgYm91bmRzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYm91bmRzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBsb2NhbCBib3VuZHMgdG8gcHJldmVudCByZWNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLDAsMSwxKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgV2ViR0wgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlXG4gICAgICogZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgY2FjaGVkIHNwcml0ZSBvYmplY3QgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGNhY2hlQXNCaXRtYXAgaXMgc2V0IHRvIHRydWUgdGhlIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIGFzIGlmIGl0IHdhcyBhIHNwcml0ZS5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGdyYXBoaWNzIGVsZW1lbnQgZG9lcyBub3QgY2hhbmdlIG9mdGVuLCBhcyBpdCB3aWxsIHNwZWVkIHVwIHRoZSByZW5kZXJpbmdcbiAgICAgKiBvZiB0aGUgb2JqZWN0IGluIGV4Y2hhbmdlIGZvciB0YWtpbmcgdXAgdGV4dHVyZSBtZW1vcnkuIEl0IGlzIGFsc28gdXNlZnVsIGlmIHlvdSBuZWVkIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB0byBiZSBhbnRpLWFsaWFzZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyBjYW52YXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGlmXG4gICAgICogeW91IGFyZSBjb25zdGFudGx5IHJlZHJhd2luZyB0aGUgZ3JhcGhpY3MgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhY2hlQXNCaXRtYXBcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkdyYXBoaWNzI1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5HcmFwaGljcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3M7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICogTm90ZSB0aGF0IHRoZSBvbmx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIGNsb25lZCwgbm90IGl0cyB0cmFuc2Zvcm0gKHBvc2l0aW9uLHNjYWxlLGV0YylcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjbG9uZSA9IG5ldyBHcmFwaGljcygpO1xuXG4gICAgY2xvbmUucmVuZGVyYWJsZSAgICA9IHRoaXMucmVuZGVyYWJsZTtcbiAgICBjbG9uZS5maWxsQWxwaGEgICAgID0gdGhpcy5maWxsQWxwaGE7XG4gICAgY2xvbmUubGluZVdpZHRoICAgICA9IHRoaXMubGluZVdpZHRoO1xuICAgIGNsb25lLmxpbmVDb2xvciAgICAgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICBjbG9uZS50aW50ICAgICAgICAgID0gdGhpcy50aW50O1xuICAgIGNsb25lLmJsZW5kTW9kZSAgICAgPSB0aGlzLmJsZW5kTW9kZTtcbiAgICBjbG9uZS5pc01hc2sgICAgICAgID0gdGhpcy5pc01hc2s7XG4gICAgY2xvbmUuYm91bmRzUGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcbiAgICBjbG9uZS5kaXJ0eSAgICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5nbERpcnR5ICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRoaXMuY2FjaGVkU3ByaXRlRGlydHk7XG5cbiAgICAvLyBjb3B5IGdyYXBoaWNzIGRhdGFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgY2xvbmUuZ3JhcGhpY3NEYXRhLnB1c2godGhpcy5ncmFwaGljc0RhdGFbaV0uY2xvbmUoKSk7XG4gICAgfVxuXG4gICAgY2xvbmUuY3VycmVudFBhdGggPSBjbG9uZS5ncmFwaGljc0RhdGFbY2xvbmUuZ3JhcGhpY3NEYXRhLmxlbmd0aCAtIDFdO1xuXG4gICAgY2xvbmUudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgIHJldHVybiBjbG9uZTtcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsaW5lIHN0eWxlIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gR3JhcGhpY3MgbWV0aG9kcyBzdWNoIGFzIHRoZSBsaW5lVG8oKSBtZXRob2Qgb3IgdGhlIGRyYXdDaXJjbGUoKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lU3R5bGUgPSBmdW5jdGlvbiAobGluZVdpZHRoLCBjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGggfHwgMDtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5saW5lQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGhhbGZ3YXkgdGhyb3VnaCBhIGxpbmU/IHN0YXJ0IGEgbmV3IG9uZSFcbiAgICAgICAgICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24odGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMuc2xpY2UoLTIpKTtcbiAgICAgICAgICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0cyBlbXB0eSBzbyBsZXRzIGp1c3Qgc2V0IHRoZSBsaW5lIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQWxwaGEgPSB0aGlzLmxpbmVBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBNb3ZlcyB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvIHgsIHkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gICovXG5HcmFwaGljcy5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihbeCx5XSk7XG4gICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgbGluZSB1c2luZyB0aGUgY3VycmVudCBsaW5lIHN0eWxlIGZyb20gdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byAoeCwgeSk7XG4gKiBUaGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIGlzIHRoZW4gc2V0IHRvICh4LCB5KS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeCwgeSk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsIDApO1xuICAgIH1cblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICB4YSA9IGZyb21YICsgKCAoY3BYIC0gZnJvbVgpICogaiApO1xuICAgICAgICB5YSA9IGZyb21ZICsgKCAoY3BZIC0gZnJvbVkpICogaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCB4YSArICggKChjcFggKyAoICh0b1ggLSBjcFgpICogaiApKSAtIHhhKSAqIGogKSxcbiAgICAgICAgICAgICAgICAgICAgIHlhICsgKCAoKGNwWSArICggKHRvWSAtIGNwWSkgKiBqICkpIC0geWEpICogaiApICk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSBjcFgyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgY3BYMiwgY3BZMiwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciBuID0gMjAsXG4gICAgICAgIGR0LFxuICAgICAgICBkdDIsXG4gICAgICAgIGR0MyxcbiAgICAgICAgdDIsXG4gICAgICAgIHQzLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIGR0ID0gKDEgLSBqKTtcbiAgICAgICAgZHQyID0gZHQgKiBkdDtcbiAgICAgICAgZHQzID0gZHQyICogZHQ7XG5cbiAgICAgICAgdDIgPSBqICogajtcbiAgICAgICAgdDMgPSB0MiAqIGo7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIGR0MyAqIGZyb21YICsgMyAqIGR0MiAqIGogKiBjcFggKyAzICogZHQgKiB0MiAqIGNwWDIgKyB0MyAqIHRvWCxcbiAgICAgICAgICAgICAgICAgICAgIGR0MyAqIGZyb21ZICsgMyAqIGR0MiAqIGogKiBjcFkgKyAzICogZHQgKiB0MiAqIGNwWTIgKyB0MyAqIHRvWSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmNUbygpIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSBiZXR3ZWVuIHR3byB0YW5nZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFwiYm9ycm93ZWRcIiBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZnhjYW52YXMvIC0gdGhhbmtzIGdvb2dsZSFcbiAqXG4gKiBAcGFyYW0geDEge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHgyIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTIge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjVG8gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIHJhZGl1cylcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyh4MSwgeTEpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyxcbiAgICAgICAgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSxcbiAgICAgICAgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSxcbiAgICAgICAgYTEgPSBmcm9tWSAtIHkxLFxuICAgICAgICBiMSA9IGZyb21YIC0geDEsXG4gICAgICAgIGEyID0geTIgICAtIHkxLFxuICAgICAgICBiMiA9IHgyICAgLSB4MSxcbiAgICAgICAgbW0gPSBNYXRoLmFicyhhMSAqIGIyIC0gYjEgKiBhMik7XG5cbiAgICBpZiAobW0gPCAxLjBlLTggfHwgcmFkaXVzID09PSAwKVxuICAgIHtcbiAgICAgICAgaWYgKHBvaW50c1twb2ludHMubGVuZ3RoLTJdICE9PSB4MSB8fCBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSAhPT0geTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIGRkID0gYTEgKiBhMSArIGIxICogYjEsXG4gICAgICAgICAgICBjYyA9IGEyICogYTIgKyBiMiAqIGIyLFxuICAgICAgICAgICAgdHQgPSBhMSAqIGEyICsgYjEgKiBiMixcbiAgICAgICAgICAgIGsxID0gcmFkaXVzICogTWF0aC5zcXJ0KGRkKSAvIG1tLFxuICAgICAgICAgICAgazIgPSByYWRpdXMgKiBNYXRoLnNxcnQoY2MpIC8gbW0sXG4gICAgICAgICAgICBqMSA9IGsxICogdHQgLyBkZCxcbiAgICAgICAgICAgIGoyID0gazIgKiB0dCAvIGNjLFxuICAgICAgICAgICAgY3ggPSBrMSAqIGIyICsgazIgKiBiMSxcbiAgICAgICAgICAgIGN5ID0gazEgKiBhMiArIGsyICogYTEsXG4gICAgICAgICAgICBweCA9IGIxICogKGsyICsgajEpLFxuICAgICAgICAgICAgcHkgPSBhMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHF4ID0gYjIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBxeSA9IGEyICogKGsxICsgajIpLFxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IE1hdGguYXRhbjIocHkgLSBjeSwgcHggLSBjeCksXG4gICAgICAgICAgICBlbmRBbmdsZSAgID0gTWF0aC5hdGFuMihxeSAtIGN5LCBxeCAtIGN4KTtcblxuICAgICAgICB0aGlzLmFyYyhjeCArIHgxLCBjeSArIHkxLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBiMSAqIGEyID4gYjIgKiBhMSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmMgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlICh1c2VkIHRvIGNyZWF0ZSBjaXJjbGVzLCBvciBwYXJ0cyBvZiBjaXJjbGVzKS5cbiAqXG4gKiBAcGFyYW0gY3gge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBjeSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBzdGFydEFuZ2xlIHtudW1iZXJ9IFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucyAoMCBpcyBhdCB0aGUgMyBvJ2Nsb2NrIHBvc2l0aW9uIG9mIHRoZSBhcmMncyBjaXJjbGUpXG4gKiBAcGFyYW0gZW5kQW5nbGUge251bWJlcn0gVGhlIGVuZGluZyBhbmdsZSwgaW4gcmFkaWFuc1xuICogQHBhcmFtIGFudGljbG9ja3dpc2Uge2Jvb2xlYW59IE9wdGlvbmFsLiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgY291bnRlcmNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuIEZhbHNlIGlzIGRlZmF1bHQsIGFuZCBpbmRpY2F0ZXMgY2xvY2t3aXNlLCB3aGlsZSB0cnVlIGluZGljYXRlcyBjb3VudGVyLWNsb2Nrd2lzZS5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmMgPSBmdW5jdGlvbihjeCwgY3ksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UpXG57XG4gICAgYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gZW5kQW5nbGUpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiggIWFudGljbG9ja3dpc2UgJiYgZW5kQW5nbGUgPD0gc3RhcnRBbmdsZSApXG4gICAge1xuICAgICAgICBlbmRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG4gICAgZWxzZSBpZiggYW50aWNsb2Nrd2lzZSAmJiBzdGFydEFuZ2xlIDw9IGVuZEFuZ2xlIClcbiAgICB7XG4gICAgICAgIHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuXG4gICAgdmFyIHN3ZWVwID0gYW50aWNsb2Nrd2lzZSA/IChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpICogLTEgOiAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKTtcbiAgICB2YXIgc2VncyA9ICBNYXRoLmNlaWwoTWF0aC5hYnMoc3dlZXApIC8gKE1hdGguUEkgKiAyKSkgKiA0MDtcblxuICAgIGlmKHN3ZWVwID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0WCA9IGN4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXM7XG4gICAgdmFyIHN0YXJ0WSA9IGN5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXM7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyhzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIHRoZXRhID0gc3dlZXAvKHNlZ3MqMik7XG4gICAgdmFyIHRoZXRhMiA9IHRoZXRhKjI7XG5cbiAgICB2YXIgY1RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgICB2YXIgc2VnTWludXMgPSBzZWdzIC0gMTtcblxuICAgIHZhciByZW1haW5kZXIgPSAoIHNlZ01pbnVzICUgMSApIC8gc2VnTWludXM7XG5cbiAgICBmb3IodmFyIGk9MDsgaTw9c2VnTWludXM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciByZWFsID0gIGkgKyByZW1haW5kZXIgKiBpO1xuXG5cbiAgICAgICAgdmFyIGFuZ2xlID0gKCh0aGV0YSkgKyBzdGFydEFuZ2xlICsgKHRoZXRhMiAqIHJlYWwpKTtcblxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgdmFyIHMgPSAtTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCggKGNUaGV0YSAqICBjKSArIChzVGhldGEgKiBzKSApICogcmFkaXVzICsgY3gsXG4gICAgICAgICAgICAgICAgICAgICggKGNUaGV0YSAqIC1zKSArIChzVGhldGEgKiBjKSApICogcmFkaXVzICsgY3kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSBzaW1wbGUgb25lLWNvbG9yIGZpbGwgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIG90aGVyIEdyYXBoaWNzIG1ldGhvZHNcbiAqIChzdWNoIGFzIGxpbmVUbygpIG9yIGRyYXdDaXJjbGUoKSkgdXNlIHdoZW4gZHJhd2luZy5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmVnaW5GaWxsID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmZpbGxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGwgPSB0aGlzLmZpbGxpbmc7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxDb2xvciA9IHRoaXMuZmlsbENvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQWxwaGEgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbGwgdG8gdGhlIGxpbmVzIGFuZCBzaGFwZXMgdGhhdCB3ZXJlIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhlIGJlZ2luRmlsbCgpIG1ldGhvZC5cbiAqXG4gKiBAcmV0dXJuIHtHcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmVuZEZpbGwgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gbnVsbDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5SZWN0YW5nbGUoeCx5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBSYWRpdXMgb2YgdGhlIHJlY3RhbmdsZSBjb3JuZXJzXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JvdW5kZWRSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdDaXJjbGUgPSBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkNpcmNsZSh4LHksIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhlIGVsbGlwc2VcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3RWxsaXBzZSA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgcG9seWdvbiB1c2luZyB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCB7bnVtYmVyW118UElYSS5Qb2ludFtdfSBUaGUgcGF0aCBkYXRhIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwb2x5Z29uLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24gKHBhdGgpXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBhdGg7XG5cbiAgICB2YXIgY2xvc2VkID0gdHJ1ZTtcblxuICAgIGlmIChwb2ludHMgaW5zdGFuY2VvZiBtYXRoLlBvbHlnb24pXG4gICAge1xuICAgICAgICBjbG9zZWQgPSBwb2ludHMuY2xvc2VkO1xuICAgICAgICBwb2ludHMgPSBwb2ludHMucG9pbnRzO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50c1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24ocG9pbnRzKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBjbG9zZWQ7XG5cbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBncmFwaGljcyB0aGF0IHdlcmUgZHJhd24gdG8gdGhpcyBHcmFwaGljcyBvYmplY3QsIGFuZCByZXNldHMgZmlsbCBhbmQgbGluZSBzdHlsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuY2xlYXJEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZ2VvbWV0cnkgaXMgY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2hvdWxkIGJlIG9uZSBvZiB0aGUgc2NhbGVNb2RlIGNvbnN0c1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdFxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG5cbiAgICByZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCAqIHJlc29sdXRpb24sIGJvdW5kcy5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY2FudmFzQnVmZmVyLmNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgdGhlIHNwcml0ZSBpcyBub3QgdmlzaWJsZSBvciB0aGUgYWxwaGEgaXMgMCB0aGVuIG5vIG5lZWQgdG8gcmVuZGVyIHRoaXMgZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuZ2xEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzLnJlbmRlcih0aGlzKTtcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmlzTWFzayA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdGludCBoYXMgY2hhbmdlZCwgc2V0IHRoZSBncmFwaGljcyBvYmplY3QgdG8gZGlydHkuXG4gICAgaWYgKHRoaXMuX3ByZXZUaW50ICE9PSB0aGlzLnRpbnQpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjb2RlIG1heSBzdGlsbCBiZSBuZWVkZWQgc28gbGVhdmluZyBmb3Igbm93Li5cbiAgICAvL1xuICAgIC8qXG4gICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXApXG4gICAge1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSB8fCB0aGlzLmNhY2hlZFNwcml0ZURpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSgpO1xuXG4gICAgICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xuXG4gICAgICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMuX2NhY2hlZFNwcml0ZSwgcmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb247XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjb250ZXh0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGdyYXBoaWMgc2hhcGUgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gVGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlLCBkZWZhdWx0cyB0byB0aGlzXG4gKiAgb2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuXG4gICAgICAgIC8vIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGl0ZW0gaXMgYSBtYXNrIVxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyYWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgICAgICAgICAgdGhpcy5nbERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2xvY2FsQm91bmRzO1xuXG4gICAgICAgIHZhciB3MCA9IGJvdW5kcy54O1xuICAgICAgICB2YXIgdzEgPSBib3VuZHMud2lkdGggKyBib3VuZHMueDtcblxuICAgICAgICB2YXIgaDAgPSBib3VuZHMueTtcbiAgICAgICAgdmFyIGgxID0gYm91bmRzLmhlaWdodCArIGJvdW5kcy55O1xuXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciBtYXhYID0geDE7XG4gICAgICAgIHZhciBtYXhZID0geTE7XG5cbiAgICAgICAgdmFyIG1pblggPSB4MTtcbiAgICAgICAgdmFyIG1pblkgPSB5MTtcblxuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy54ID0gbWluWDtcbiAgICAgICAgdGhpcy5fYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IHRoaXMuX2JvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIGdyYXBoaWNzIG9iamVjdFxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5HcmFwaGljcy5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIGdyYXBoaWNzRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoIWRhdGEuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGRlYWwgd2l0aCBmaWxscy4uXG4gICAgICAgIGlmIChkYXRhLnNoYXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIGRhdGEuc2hhcGUuY29udGFpbnMoIHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSApIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICpcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUxvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGlmICh0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB2YXIgc2hhcGUsIHBvaW50cywgeCwgeSwgdywgaDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG4gICAgICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVCB8fCB0eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueCAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gUE9MWVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSAyKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvaW50c1tqKzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblggPSB4LWxpbmVXaWR0aCA8IG1pblggPyB4LWxpbmVXaWR0aCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSB4K2xpbmVXaWR0aCA+IG1heFggPyB4K2xpbmVXaWR0aCA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IHktbGluZVdpZHRoIDwgbWluWSA/IHktbGluZVdpZHRoIDogbWluWTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IHkrbGluZVdpZHRoID4gbWF4WSA/IHkrbGluZVdpZHRoIDogbWF4WTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgbWluWCA9IDA7XG4gICAgICAgIG1heFggPSAwO1xuICAgICAgICBtaW5ZID0gMDtcbiAgICAgICAgbWF4WSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy54ID0gbWluWCAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMud2lkdGggPSAobWF4WCAtIG1pblgpICsgcGFkZGluZyAqIDI7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy55ID0gbWluWSAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMuaGVpZ2h0ID0gKG1heFkgLSBtaW5ZKSArIHBhZGRpbmcgKiAyO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNhY2hlZCBzcHJpdGUgd2hlbiB0aGUgc3ByaXRlIGhhcyBjYWNoZUFzQml0bWFwID0gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgaWYgKCF0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzKTtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgU3ByaXRlKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyID0gY2FudmFzQnVmZmVyO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIucmVzaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gbGV2ZXJhZ2UgdGhlIGFuY2hvciB0byBhY2NvdW50IGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC5zYXZlKCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGFscGhhIG9mIHRoZSBncmFwaGljcyB0byAxIGZvciB0aGUgcmVuZGVyLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gbm93IHJlbmRlciB0aGUgZ3JhcGhpYy4uXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0KTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG59O1xuKi9cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjYWNoZWRTcHJpdGUgPSB0aGlzLl9jYWNoZWRTcHJpdGU7XG4gICAgdmFyIHRleHR1cmUgPSBjYWNoZWRTcHJpdGUudGV4dHVyZTtcbiAgICB2YXIgY2FudmFzID0gY2FjaGVkU3ByaXRlLmJ1ZmZlci5jYW52YXM7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLmZyYW1lLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLmZyYW1lLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICBjYWNoZWRTcHJpdGUuX3dpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIGNhY2hlZFNwcml0ZS5faGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgZGlydHkgYmFzZSB0ZXh0dXJlc1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZGlydHkoKTtcbn07Ki9cblxuLyoqXG4gKiBEZXN0cm95cyBhIHByZXZpb3VzIGNhY2hlZCBzcHJpdGUuXG4gKlxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3lDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS50ZXh0dXJlLmRlc3Ryb3kodHJ1ZSk7XG5cbiAgICAvLyBsZXQgdGhlIGdjIGNvbGxlY3QgdGhlIHVudXNlZCBzcHJpdGVcbiAgICAvLyBUT0RPIGNvdWxkIGJlIG9iamVjdCBwb29sZWQhXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07Ki9cblxuLyoqXG4gKiBEcmF3cyB0aGUgZ2l2ZW4gc2hhcGUgdG8gdGhpcyBHcmFwaGljcyBvYmplY3QuIENhbiBiZSBhbnkgb2YgQ2lyY2xlLCBSZWN0YW5nbGUsIEVsbGlwc2UsIExpbmUgb3IgUG9seWdvbi5cbiAqXG4gKiBAcGFyYW0gc2hhcGUge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX0gVGhlIGdlbmVyYXRlZCBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24gKHNoYXBlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgLy8gY2hlY2sgY3VycmVudCBwYXRoIVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IG5ldyBHcmFwaGljc0RhdGEodGhpcy5saW5lV2lkdGgsIHRoaXMubGluZUNvbG9yLCB0aGlzLmxpbmVBbHBoYSwgdGhpcy5maWxsQ29sb3IsIHRoaXMuZmlsbEFscGhhLCB0aGlzLmZpbGxpbmcsIHNoYXBlKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnB1c2goZGF0YSk7XG5cbiAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICB7XG4gICAgICAgIGRhdGEuc2hhcGUuY2xvc2VkID0gZGF0YS5zaGFwZS5jbG9zZWQgfHwgdGhpcy5maWxsaW5nO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBkZXN0cm95IGVhY2ggb2YgdGhlIEdyYXBoaWNzRGF0YSBvYmplY3RzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggd2ViZ2wgZGF0YSBlbnRyeSwgZGVzdHJveSB0aGUgV2ViR0xHcmFwaGljc0RhdGFcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl93ZWJnbCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3dlYmdsW2lkXS5kYXRhLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJnbFtpZF0uZGF0YVtqXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl93ZWJnbCA9IG51bGw7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBudWxsO1xufTtcbiIsIi8qKlxuICogQSBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBmaWxsQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbEFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGwgICAgICB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gKiBAcGFyYW0gc2hhcGUgICAgIHtDaXJjbGV8UmVjdGFuZ2xlfEVsbGlwc2V8TGluZXxQb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzRGF0YShsaW5lV2lkdGgsIGxpbmVDb2xvciwgbGluZUFscGhhLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgZmlsbCwgc2hhcGUpXG57XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IGxpbmVDb2xvcjtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVBbHBoYSA9IGxpbmVBbHBoYTtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMuX2xpbmVUaW50ID0gbGluZUNvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5fZmlsbFRpbnQgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICAgICAqL1xuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gICAgICovXG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFRoZSB0eXBlIG9mIHRoZSBzaGFwZSwgc2VlIHRoZSBDb25zdC5TaGFwZXMgZmlsZSBmb3IgYWxsIHRoZSBleGlzdGluZyB0eXBlcyxcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBzaGFwZS50eXBlO1xufVxuXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljc0RhdGEgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfVxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEdyYXBoaWNzRGF0YShcbiAgICAgICAgdGhpcy5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMubGluZUNvbG9yLFxuICAgICAgICB0aGlzLmxpbmVBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuZmlsbEFscGhhLFxuICAgICAgICB0aGlzLmZpbGwsXG4gICAgICAgIHRoaXMuc2hhcGVcbiAgICApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3MgZGF0YS5cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2hhcGUgPSBudWxsO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vV2ViR0xHcmFwaGljc0RhdGEnKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyJyksXG5cbiAgICAvLyBzb21lIGRyYXdpbmcgZnVuY3Rpb25zLi5cbiAgICBidWlsZExpbmUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkTGluZScpO1xuICAgIGJ1aWxkUG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRQb2x5Jyk7XG4gICAgYnVpbGRDb21wbGV4UG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRDb21wbGV4UG9seScpO1xuICAgIGJ1aWxkUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlJyk7XG4gICAgYnVpbGRDaXJjbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ2lyY2xlJyk7XG5cbiAgICBlYXJjdXQgPSByZXF1aXJlKCdlYXJjdXQnKTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBHcmFwaGljc1JlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgdGhpcy5ncmFwaGljc0RhdGFQb29sID0gW107XG5cbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBvaW50cyBhIHBvbHkgY2FuIGNvbnRhaW4gYmVmb3JlIGl0IGlzIHJlbmRlcmVkIGFzIGEgY29tcGxleCBwb2x5Z29uICh1c2luZyB0aGUgc3RlbmNpbCBidWZmZXIpXG4gICAgICogQHR5cGUge051bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heGltdW1TaW1wbGVQb2x5U2l6ZSA9IDIwMDtcbn1cblxuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2dyYXBoaWNzJywgR3JhcGhpY3NSZW5kZXJlcik7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZVxuICpcbiAqIEBwcml2YXRlXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy5nbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBuZXcgUHJpbWl0aXZlU2hhZGVyKHRoaXMuZ2wpXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgcmVuZGVyZXIuXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2xbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcbiAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIHZhciB3ZWJHTERhdGE7XG4gIC8vICBjb25zb2xlLmxvZyhncmFwaGljcylcbiAgICBpZiAoZ3JhcGhpY3MuZGlydHkgfHwgIWdyYXBoaWNzLl93ZWJHTFtnbC5pZF0pXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZUdyYXBoaWNzKGdyYXBoaWNzKTtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gVGhpcyAgY291bGQgYmUgc3BlZWRlZCB1cCBmb3Igc3VyZSFcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCBncmFwaGljcy5ibGVuZE1vZGUgKTtcblxuLy8gICAgdmFyIG1hdHJpeCA9ICBncmFwaGljcy53b3JsZFRyYW5zZm9ybS5jbG9uZSgpO1xuLy8gICAgdmFyIG1hdHJpeCA9ICByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXguY2xvbmUoKTtcbi8vICAgIG1hdHJpeC5hcHBlbmQoZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0pO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB3ZWJHTC5kYXRhLmxlbmd0aDsgaSA8IG47IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMLmRhdGFbaV0ubW9kZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy9UT0RPIGZpeCB0aGlzIG9uZSFcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnB1c2hTdGVuY2lsKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICBnbC51bmlmb3JtMWYocmVuZGVyZXIuc2hhZGVyTWFuYWdlci5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSAqIHdlYkdMRGF0YS5hbHBoYSk7XG5cbiAgICAgICAgICAgIC8vIHJlbmRlciBxdWFkLi5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgcmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucG9wU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICovXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHNoYWRlciA9IHRoaXMucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgICAgICAgICByZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50aW50ID0gdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5kcmF3Q291bnQrKztcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gdXBkYXRlXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnVwZGF0ZUdyYXBoaWNzID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBnZXQgdGhlIGNvbnRleHRzIGdyYXBoaWNzIG9iamVjdFxuICAgIHZhciB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF07XG5cbiAgICAvLyBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGRvZXMgbm90IGV4aXN0IGluIHRoZSB3ZWJHTCBjb250ZXh0IHRpbWUgdG8gY3JlYXRlIGl0IVxuICAgIGlmICghd2ViR0wpXG4gICAge1xuICAgICAgICB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF0gPSB7bGFzdEluZGV4OjAsIGRhdGE6W10sIGdsOmdsfTtcbiAgICB9XG5cbiAgIFxuICAgIC8vIGZsYWcgdGhlIGdyYXBoaWNzIGFzIG5vdCBkaXJ0eSBhcyB3ZSBhcmUgYWJvdXQgdG8gdXBkYXRlIGl0Li4uXG4gICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcblxuICAgIHZhciBpO1xuXG4gICAgLy8gaWYgdGhlIHVzZXIgY2xlYXJlZCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHdlIHdpbGwgbmVlZCB0byBjbGVhciBldmVyeSBvYmplY3RcbiAgICBpZiAoZ3JhcGhpY3MuY2xlYXJEaXJ0eSlcbiAgICB7XG4gICAgICAgIGdyYXBoaWNzLmNsZWFyRGlydHkgPSBmYWxzZTtcblxuICAgICAgICAvLyBsb29wIHRocm91Z2ggYW5kIHJldHVybiBhbGwgdGhlIHdlYkdMRGF0YXMgdG8gdGhlIG9iamVjdCBwb29sIHNvIHRoYW4gY2FuIGJlIHJldXNlZCBsYXRlciBvblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGdyYXBoaWNzRGF0YSA9IHdlYkdMLmRhdGFbaV07XG4gICAgICAgICAgICBncmFwaGljc0RhdGEucmVzZXQoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wdXNoKCBncmFwaGljc0RhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIHRoZSBhcnJheSBhbmQgcmVzZXQgdGhlIGluZGV4Li5cbiAgICAgICAgd2ViR0wuZGF0YSA9IFtdO1xuICAgICAgICB3ZWJHTC5sYXN0SW5kZXggPSAwO1xuICAgIH1cblxuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICAvLyBsb29wIHRocm91Z2ggdGhlIGdyYXBoaWNzIGRhdGFzIGFuZCBjb25zdHJ1Y3QgZWFjaCBvbmUuLlxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgYSBjb21wbGV4IGZpbGwgdGhlbiB0aGUgbmV3IHN0ZW5jaWwgYnVmZmVyIHRlY2huaXF1ZSB3aWxsIGJlIHVzZWRcbiAgICAvLyBvdGhlciB3aXNlIGdyYXBoaWNzIG9iamVjdHMgd2lsbCBiZSBwdXNoZWQgaW50byBhIGJhdGNoLi5cbiAgICBmb3IgKGkgPSB3ZWJHTC5sYXN0SW5kZXg7IGkgPCBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gbmVlZCB0byBhZGQgdGhlIHBvaW50cyB0aGUgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgICAgICAgICBkYXRhLnBvaW50cyA9IGRhdGEuc2hhcGUucG9pbnRzLnNsaWNlKCk7XG4gICAgICAgICAgICBpZiAoZGF0YS5zaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gY2xvc2UgdGhlIHBvbHkgaWYgdGhlIHZhbHVlIGlzIHRydWUhXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzWzBdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMl0gfHwgZGF0YS5wb2ludHNbMV0gIT09IGRhdGEucG9pbnRzW2RhdGEucG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucG9pbnRzLnB1c2goZGF0YS5wb2ludHNbMF0sIGRhdGEucG9pbnRzWzFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1BS0UgU1VSRSBXRSBIQVZFIFRIRSBDT1JSRUNUIFRZUEUuLlxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoID49IDYpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoIDwgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgKiAyKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FuRHJhd1VzaW5nU2ltcGxlID0gYnVpbGRQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuRHJhd1VzaW5nU2ltcGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGggPiAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG4gICAgICAgICAgICAgICAgYnVpbGRMaW5lKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQyB8fCBkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5FTElQKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkQ2lyY2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2ViR0wubGFzdEluZGV4Kys7XG4gICAgfVxuXG4gICAgLy8gdXBsb2FkIGFsbCB0aGUgZGlydHkgZGF0YS4uLlxuICAgIGZvciAoaSA9IDA7IGkgPCB3ZWJHTC5kYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVtpXTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLmRpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEudXBsb2FkKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB3ZWJHTCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IFRPRE8gQEFsdmluXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnN3aXRjaE1vZGUgPSBmdW5jdGlvbiAod2ViR0wsIHR5cGUpXG57XG4gICAgdmFyIHdlYkdMRGF0YTtcblxuICAgIGlmICghd2ViR0wuZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgd2ViR0xEYXRhLm1vZGUgPSB0eXBlO1xuICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVt3ZWJHTC5kYXRhLmxlbmd0aC0xXTtcblxuICAgICAgICBpZiAoKHdlYkdMRGF0YS5wb2ludHMubGVuZ3RoID4gMzIwMDAwKSB8fCB3ZWJHTERhdGEubW9kZSAhPT0gdHlwZSB8fCB0eXBlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgICAgIHdlYkdMLmRhdGEucHVzaCh3ZWJHTERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd2ViR0xEYXRhLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB3ZWJHTERhdGE7XG59O1xuXG4iLCIvKipcbiAqIEFuIG9iamVjdCBjb250YWluaW5nIFdlYkdMIHNwZWNpZmljIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBXZWJHTEdyYXBoaWNzRGF0YShnbCkge1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLy9UT0RPIGRvZXMgdGhpcyBuZWVkIHRvIGJlIHNwbGl0IGJlZm9yZSB1cGxvZGluZz8/XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgY29sb3IgY29tcG9uZW50cyAocixnLGIpXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5jb2xvciA9IFswLDAsMF07IC8vIGNvbG9yIHNwbGl0IVxuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgcG9pbnRzIHRvIGRyYXdcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50W119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IFtdO1xuICAgIC8qKlxuICAgICAqIFRoZSBtYWluIGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggYnVmZmVyXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogdG9kbyBAYWx2aW5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tb2RlID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgZ3JhcGhpY3MgaXMgZGlydHkgb3Igbm90XG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn1cblxuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xHcmFwaGljc0RhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIFJlc2V0cyB0aGUgdmVydGljZXMgYW5kIHRoZSBpbmRpY2VzXG4gKi9cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnBvaW50cy5sZW5ndGggPSAwO1xuICAgIHRoaXMuaW5kaWNlcy5sZW5ndGggPSAwO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbi8vICAgIHRoaXMubGFzdEluZGV4ID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDtcbiAgICB0aGlzLmdsUG9pbnRzID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnBvaW50cyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5idWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmdsUG9pbnRzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmdsSW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmluZGljZXMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5nbEluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuY29sb3IgPSBudWxsO1xuICAgIHRoaXMucG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIFxuICAgIHRoaXMuZ2wgPSBudWxsO1xuXG4gICAgdGhpcy5idWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5nbFBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5nbEluZGljZXMgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihnbClcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBnbCxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgZmxpcFk7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIHZlYzMgdGludDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvciAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpXG4gICAgKTtcbn1cblxuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHJpbWl0aXZlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBjaXJjbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRyYXdcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDaXJjbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgdmFyIGNpcmNsZURhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSBjaXJjbGVEYXRhLng7XG4gICAgdmFyIHkgPSBjaXJjbGVEYXRhLnk7XG4gICAgdmFyIHdpZHRoO1xuICAgIHZhciBoZWlnaHQ7XG5cbiAgICAvLyBUT0RPIC0gYml0IGhhY2t5Pz9cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSBjaXJjbGVEYXRhLnJhZGl1cztcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS53aWR0aDtcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHRvdGFsU2VncyA9IE1hdGguZmxvb3IoMzAgKiBNYXRoLnNxcnQoY2lyY2xlRGF0YS5yYWRpdXMpKSB8fCBNYXRoLmZsb29yKDE1ICogTWF0aC5zcXJ0KGNpcmNsZURhdGEud2lkdGggKyBjaXJjbGVEYXRhLmhlaWdodCkpO1xuICAgIHZhciBzZWcgPSAoTWF0aC5QSSAqIDIpIC8gdG90YWxTZWdzIDtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTZWdzICsgMSA7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaCh4LHksIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgeSArIE1hdGguY29zKHNlZyAqIGkpICogaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MrKywgdmVjUG9zKyspO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcy0xKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cy5wdXNoKHggKyBNYXRoLnNpbihzZWcgKiBpKSAqIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBidWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENpcmNsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21wbGV4IHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENvbXBsZXhQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vVE9ETyAtIG5vIG5lZWQgdG8gY29weSB0aGlzIGFzIGl0IGdldHMgdHVybmVkIGludG8gYSBGTG9hdDMyQXJyYXkgYW55d2F5cy4uXG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHMuc2xpY2UoKTtcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB3ZWJHTERhdGEucG9pbnRzID0gcG9pbnRzO1xuICAgIHdlYkdMRGF0YS5hbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgd2ViR0xEYXRhLmNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcblxuICAgIC8vIGNhbGNsYXRlIHRoZSBib3VuZHMuLlxuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgdmFyIHgseTtcblxuICAgIC8vIGdldCBzaXplLi5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrPTIpXG4gICAge1xuICAgICAgICB4ID0gcG9pbnRzW2ldO1xuICAgICAgICB5ID0gcG9pbnRzW2krMV07XG5cbiAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBxdWFkIHRvIHRoZSBlbmQgY29zIHRoZXJlIGlzIG5vIHBvaW50IG1ha2luZyBhbm90aGVyIGJ1ZmZlciFcbiAgICBwb2ludHMucHVzaChtaW5YLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWF4WSxcbiAgICAgICAgICAgICAgICBtaW5YLCBtYXhZKTtcblxuICAgIC8vIHB1c2ggYSBxdWFkIG9udG8gdGhlIGVuZC4uXG5cbiAgICAvL1RPRE8gLSB0aGlzIGFpbnQgbmVlZGVkIVxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goIGkgKTtcbiAgICB9XG5cbn07XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29tcGxleFBvbHk7IiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZExpbmUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gVE9ETyBPUFRJTUlTRSFcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGxpbmUgd2lkdGggaXMgYW4gb2RkIG51bWJlciBhZGQgMC41IHRvIGFsaWduIHRvIGEgd2hvbGUgcGl4ZWxcbiAgICAvLyBjb21tZW50aW5nIHRoaXMgb3V0IGZpeGVzICM3MTEgYW5kICMxNjIwXG4gICAgLy8gaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGglMilcbiAgICAvLyB7XG4gICAgLy8gICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAgIHBvaW50c1tpXSArPSAwLjU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGZpcnN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgdmFyIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IHBvaW50IGlzIHRoZSBsYXN0IHBvaW50IC0gZ29ubmEgaGF2ZSBpc3N1ZXMgOilcbiAgICBpZiAoZmlyc3RQb2ludC54ID09PSBsYXN0UG9pbnQueCAmJiBmaXJzdFBvaW50LnkgPT09IGxhc3RQb2ludC55KVxuICAgIHtcbiAgICAgICAgLy8gbmVlZCB0byBjbG9uZSBhcyB3ZSBhcmUgZ29pbmcgdG8gc2xpZ2h0bHkgbW9kaWZ5IHRoZSBzaGFwZS4uXG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5zbGljZSgpO1xuXG4gICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHZhciBtaWRQb2ludFggPSBsYXN0UG9pbnQueCArIChmaXJzdFBvaW50LnggLSBsYXN0UG9pbnQueCkgKjAuNTtcbiAgICAgICAgdmFyIG1pZFBvaW50WSA9IGxhc3RQb2ludC55ICsgKGZpcnN0UG9pbnQueSAtIGxhc3RQb2ludC55KSAqMC41O1xuXG4gICAgICAgIHBvaW50cy51bnNoaWZ0KG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICAgICAgcG9pbnRzLnB1c2gobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgdmFyIGluZGV4Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIHZhciBpbmRleFN0YXJ0ID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAvLyBEUkFXIHRoZSBMaW5lXG4gICAgdmFyIHdpZHRoID0gZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEubGluZUNvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEubGluZUFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHB4LCBweSwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeTtcbiAgICB2YXIgcGVycHgsIHBlcnB5LCBwZXJwMngsIHBlcnAyeSwgcGVycDN4LCBwZXJwM3k7XG4gICAgdmFyIGExLCBiMSwgYzEsIGEyLCBiMiwgYzI7XG4gICAgdmFyIGRlbm9tLCBwZGlzdCwgZGlzdDtcblxuICAgIHAxeCA9IHBvaW50c1swXTtcbiAgICBwMXkgPSBwb2ludHNbMV07XG5cbiAgICBwMnggPSBwb2ludHNbMl07XG4gICAgcDJ5ID0gcG9pbnRzWzNdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSAgcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcblxuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIC8vIHN0YXJ0XG4gICAgdmVydHMucHVzaChwMXggLSBwZXJweCAsIHAxeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDF4ICsgcGVycHggLCBwMXkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoLTE7IGkrKylcbiAgICB7XG4gICAgICAgIHAxeCA9IHBvaW50c1soaS0xKSoyXTtcbiAgICAgICAgcDF5ID0gcG9pbnRzWyhpLTEpKjIgKyAxXTtcblxuICAgICAgICBwMnggPSBwb2ludHNbKGkpKjJdO1xuICAgICAgICBwMnkgPSBwb2ludHNbKGkpKjIgKyAxXTtcblxuICAgICAgICBwM3ggPSBwb2ludHNbKGkrMSkqMl07XG4gICAgICAgIHAzeSA9IHBvaW50c1soaSsxKSoyICsgMV07XG5cbiAgICAgICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgICAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgICAgICBwZXJwMnggPSAtKHAyeSAtIHAzeSk7XG4gICAgICAgIHBlcnAyeSA9IHAyeCAtIHAzeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAyeCpwZXJwMnggKyBwZXJwMnkqcGVycDJ5KTtcbiAgICAgICAgcGVycDJ4IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeSAvPSBkaXN0O1xuICAgICAgICBwZXJwMnggKj0gd2lkdGg7XG4gICAgICAgIHBlcnAyeSAqPSB3aWR0aDtcblxuICAgICAgICBhMSA9ICgtcGVycHkgKyBwMXkpIC0gKC1wZXJweSArIHAyeSk7XG4gICAgICAgIGIxID0gKC1wZXJweCArIHAyeCkgLSAoLXBlcnB4ICsgcDF4KTtcbiAgICAgICAgYzEgPSAoLXBlcnB4ICsgcDF4KSAqICgtcGVycHkgKyBwMnkpIC0gKC1wZXJweCArIHAyeCkgKiAoLXBlcnB5ICsgcDF5KTtcbiAgICAgICAgYTIgPSAoLXBlcnAyeSArIHAzeSkgLSAoLXBlcnAyeSArIHAyeSk7XG4gICAgICAgIGIyID0gKC1wZXJwMnggKyBwMngpIC0gKC1wZXJwMnggKyBwM3gpO1xuICAgICAgICBjMiA9ICgtcGVycDJ4ICsgcDN4KSAqICgtcGVycDJ5ICsgcDJ5KSAtICgtcGVycDJ4ICsgcDJ4KSAqICgtcGVycDJ5ICsgcDN5KTtcblxuICAgICAgICBkZW5vbSA9IGExKmIyIC0gYTIqYjE7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8IDAuMSApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgZGVub20rPTEwLjE7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4ID0gKGIxKmMyIC0gYjIqYzEpL2Rlbm9tO1xuICAgICAgICBweSA9IChhMipjMSAtIGExKmMyKS9kZW5vbTtcblxuXG4gICAgICAgIHBkaXN0ID0gKHB4IC1wMngpICogKHB4IC1wMngpICsgKHB5IC1wMnkpICogKHB5IC1wMnkpO1xuXG5cbiAgICAgICAgaWYgKHBkaXN0ID4gMTQwICogMTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICBwZXJwM3ggPSBwZXJweCAtIHBlcnAyeDtcbiAgICAgICAgICAgIHBlcnAzeSA9IHBlcnB5IC0gcGVycDJ5O1xuXG4gICAgICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAzeCpwZXJwM3ggKyBwZXJwM3kqcGVycDN5KTtcbiAgICAgICAgICAgIHBlcnAzeCAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN5IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3ggKj0gd2lkdGg7XG4gICAgICAgICAgICBwZXJwM3kgKj0gd2lkdGg7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJwM3gsIHAyeSArcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGV4Q291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmVydHMucHVzaChweCAsIHB5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIChweC1wMngpLCBwMnkgLSAocHkgLSBwMnkpKTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcDF4ID0gcG9pbnRzWyhsZW5ndGgtMikqMl07XG4gICAgcDF5ID0gcG9pbnRzWyhsZW5ndGgtMikqMiArIDFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWyhsZW5ndGgtMSkqMl07XG4gICAgcDJ5ID0gcG9pbnRzWyhsZW5ndGgtMSkqMiArIDFdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KyspO1xuICAgIH1cblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0LTEpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZExpbmU7IiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5XZWJHTEdyYXBoaWNzRGF0YX0gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChwb2ludHMsIG51bGwsIDIpO1xuXG4gICAgaWYgKCF0cmlhbmdsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoIC8gNjtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gK3ZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZXJ0UG9zKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2ZXJ0cy5wdXNoKHBvaW50c1tpICogMl0sIHBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFBvbHk7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gLS0tIC8vXG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgLy9cbiAgICB2YXIgcmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSByZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSByZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICAvLyBzdGFydFxuICAgICAgICB2ZXJ0cy5wdXNoKHgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCAsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIC8vIGluc2VydCAyIGRlYWQgdHJpYW5nbGVzLi5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRQb3MsIHZlcnRQb3MsIHZlcnRQb3MrMSwgdmVydFBvcysyLCB2ZXJ0UG9zKzMsIHZlcnRQb3MrMyk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFt4LCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHldO1xuXG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUmVjdGFuZ2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcbiAgICBcbi8qKlxuICogQnVpbGRzIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbmJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcnJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcnJlY3REYXRhLng7XG4gICAgdmFyIHkgPSBycmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSBycmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJyZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICB2YXIgcmFkaXVzID0gcnJlY3REYXRhLnJhZGl1cztcblxuICAgIHZhciByZWNQb2ludHMgPSBbXTtcbiAgICByZWNQb2ludHMucHVzaCh4LCB5ICsgcmFkaXVzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHgsIHkgKyBoZWlnaHQsIHggKyByYWRpdXMsIHkgKyBoZWlnaHQsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoLCB5ICsgcmFkaXVzLCB4ICsgd2lkdGgsIHksIHggKyB3aWR0aCAtIHJhZGl1cywgeSwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyByYWRpdXMsIHksIHgsIHksIHgsIHkgKyByYWRpdXMgKyAwLjAwMDAwMDAwMDEsIHJlY1BvaW50cyk7XG5cbiAgICAvLyB0aGlzIHRpbnkgbnVtYmVyIGRlYWxzIHdpdGggdGhlIGlzc3VlIHRoYXQgb2NjdXJzIHdoZW4gcG9pbnRzIG92ZXJsYXAgYW5kIGVhcmN1dCBmYWlscyB0byB0cmlhbmd1bGF0ZSB0aGUgaXRlbS5cbiAgICAvLyBUT0RPIC0gZml4IHRoaXMgcHJvcGVybHksIHRoaXMgaXMgbm90IHZlcnkgZWxlZ2FudC4uIGJ1dCBpdCB3b3JrcyBmb3Igbm93LlxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocmVjUG9pbnRzLCBudWxsLCAyKTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlY1BvaW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaChyZWNQb2ludHNbaV0sIHJlY1BvaW50c1srK2ldLCByLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gcmVjUG9pbnRzO1xuXG4gICAgICAgIHRoaXMuYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUuIChoZWxwZXIgZnVuY3Rpb24uLilcbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZyb21YIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gZnJvbVkge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEBwYXJhbSBbb3V0XSB7bnVtYmVyW119IFRoZSBvdXRwdXQgYXJyYXkgdG8gYWRkIHBvaW50cyBpbnRvLiBJZiBub3QgcGFzc2VkLCBhIG5ldyBhcnJheSBpcyBjcmVhdGVkLlxuICogQHJldHVybiB7bnVtYmVyW119IGFuIGFycmF5IG9mIHBvaW50c1xuICovXG5xdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IGZ1bmN0aW9uIChmcm9tWCwgZnJvbVksIGNwWCwgY3BZLCB0b1gsIHRvWSwgb3V0KVxue1xuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIHhiLFxuICAgICAgICB5YixcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSBvdXQgfHwgW107XG5cbiAgICBmdW5jdGlvbiBnZXRQdChuMSAsIG4yLCBwZXJjKSB7XG4gICAgICAgIHZhciBkaWZmID0gbjIgLSBuMTtcblxuICAgICAgICByZXR1cm4gbjEgKyAoIGRpZmYgKiBwZXJjICk7XG4gICAgfVxuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKyApIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIC8vIFRoZSBHcmVlbiBMaW5lXG4gICAgICAgIHhhID0gZ2V0UHQoIGZyb21YICwgY3BYICwgaiApO1xuICAgICAgICB5YSA9IGdldFB0KCBmcm9tWSAsIGNwWSAsIGogKTtcbiAgICAgICAgeGIgPSBnZXRQdCggY3BYICwgdG9YICwgaiApO1xuICAgICAgICB5YiA9IGdldFB0KCBjcFkgLCB0b1kgLCBqICk7XG5cbiAgICAgICAgLy8gVGhlIEJsYWNrIERvdFxuICAgICAgICB4ID0gZ2V0UHQoIHhhICwgeGIgLCBqICk7XG4gICAgICAgIHkgPSBnZXRQdCggeWEgLCB5YiAsIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUm91bmRlZFJlY3RhbmdsZTsiLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBjb3JlIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSVxuICovXG4vLyBleHBvcnQgY29yZSBhbmQgY29uc3QuIFdlIGFzc2lnbiBjb3JlIHRvIGNvbnN0IHNvIHRoYXQgdGhlIG5vbi1yZWZlcmVuY2UgdHlwZXMgaW4gY29uc3QgcmVtYWluIGluLXRhY3RcbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduKHJlcXVpcmUoJy4vY29uc3QnKSwgcmVxdWlyZSgnLi9tYXRoJyksIHtcbiAgICAvLyB1dGlsc1xuICAgIHV0aWxzOiByZXF1aXJlKCcuL3V0aWxzJyksXG4gICAgdGlja2VyOiByZXF1aXJlKCcuL3RpY2tlcicpLFxuXG4gICAgLy8gZGlzcGxheVxuICAgIERpc3BsYXlPYmplY3Q6ICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9EaXNwbGF5T2JqZWN0JyksXG4gICAgQ29udGFpbmVyOiAgICAgICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuXG4gICAgLy8gc3ByaXRlc1xuICAgIFNwcml0ZTogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBQYXJ0aWNsZUNvbnRhaW5lcjogICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lcicpLFxuICAgIFNwcml0ZVJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHRcbiAgICBUZXh0OiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHQvVGV4dCcpLFxuXG4gICAgLy8gcHJpbWl0aXZlc1xuICAgIEdyYXBoaWNzOiAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGE6ICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRGF0YScpLFxuICAgIEdyYXBoaWNzUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dHVyZXNcbiAgICBUZXh0dXJlOiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBCYXNlVGV4dHVyZTogICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL0Jhc2VUZXh0dXJlJyksXG4gICAgUmVuZGVyVGV4dHVyZTogICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgQmFzZVJlbmRlclRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmU6ICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnM6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVGV4dHVyZVV2cycpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gY2FudmFzXG4gICAgQ2FudmFzUmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyJyksXG4gICAgQ2FudmFzR3JhcGhpY3M6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzJyksXG4gICAgQ2FudmFzQnVmZmVyOiAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gd2ViZ2xcbiAgICBXZWJHTFJlbmRlcmVyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgU2hhZGVyOiAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXInKSxcbiAgICBPYmplY3RSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFJlbmRlclRhcmdldDogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuXG4gICAgLy8gZmlsdGVycyAtIHdlYmdsXG4gICAgQWJzdHJhY3RGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlcicpLFxuICAgIEZYQUFGaWx0ZXI6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFNwcml0ZU1hc2tGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlcicpLFxuXG4gICAgZ2xDb3JlOiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3Qgd2hpY2ggcmVuZGVyZXIgeW91IHNob3VsZCBiZSB1c2luZy5cbiAgICAgKiBXZWJHTCBpcyB0aGUgcHJlZmVycmVkIHJlbmRlcmVyIGFzIGl0IGlzIGEgbG90IGZhc3Rlci4gSWYgd2ViR0wgaXMgbm90IHN1cHBvcnRlZCBieVxuICAgICAqIHRoZSBicm93c2VyIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhIGNhbnZhcyByZW5kZXJlclxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAcGFyYW0gd2lkdGg9ODAwIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gaGVpZ2h0PTYwMCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSByZW5kZXJlcnMgdmlld1xuICAgICAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gICAgICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZV0ge2Jvb2xlYW59IGVuYWJsZXMgZHJhd2luZyBidWZmZXIgcHJlc2VydmF0aW9uLCBlbmFibGUgdGhpcyBpZiB5b3VcbiAgICAgKiAgICAgIG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIsIHJldGluYSB3b3VsZCBiZSAyXG4gICAgICogQHBhcmFtIFtub1dlYkdMPWZhbHNlXSB7Ym9vbGVhbn0gcHJldmVudHMgc2VsZWN0aW9uIG9mIFdlYkdMIHJlbmRlcmVyLCBldmVuIGlmIHN1Y2ggaXMgcHJlc2VudFxuICAgICAqXG4gICAgICogQHJldHVybiB7V2ViR0xSZW5kZXJlcnxDYW52YXNSZW5kZXJlcn0gUmV0dXJucyBXZWJHTCByZW5kZXJlciBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBDYW52YXNSZW5kZXJlclxuICAgICAqL1xuICAgIGF1dG9EZXRlY3RSZW5kZXJlcjogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMsIG5vV2ViR0wpXG4gICAge1xuICAgICAgICB3aWR0aCA9IHdpZHRoIHx8IDgwMDtcbiAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0IHx8IDYwMDtcblxuICAgICAgICBpZiAoIW5vV2ViR0wgJiYgY29yZS51dGlscy5pc1dlYkdMU3VwcG9ydGVkKCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgY29yZS5XZWJHTFJlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBjb3JlLkNhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgIH1cbn0pO1xuIiwiLy8gQHRvZG8gLSBpZ25vcmUgdGhlIHRvbyBtYW55IHBhcmFtZXRlcnMgd2FybmluZyBmb3Igbm93XG4vLyBzaG91bGQgZWl0aGVyIGZpeCBpdCBvciBjaGFuZ2UgdGhlIGpzaGludCBjb25maWdcbi8vIGpzaGludCAtVzA3MlxuXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuL1BvaW50Jyk7XG5cbi8qKlxuICogVGhlIHBpeGkgTWF0cml4IGNsYXNzIGFzIGFuIG9iamVjdCwgd2hpY2ggbWFrZXMgaXQgYSBsb3QgZmFzdGVyLFxuICogaGVyZSBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIGl0IDpcbiAqIHwgYSB8IGIgfCB0eHxcbiAqIHwgYyB8IGQgfCB0eXxcbiAqIHwgMCB8IDAgfCAxIHxcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIE1hdHJpeCgpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmIgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmMgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnR4ID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eSA9IDA7XG59XG5cbk1hdHJpeC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNYXRyaXg7XG5tb2R1bGUuZXhwb3J0cyA9IE1hdHJpeDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgTWF0cml4IG9iamVjdCBiYXNlZCBvbiB0aGUgZ2l2ZW4gYXJyYXkuIFRoZSBFbGVtZW50IHRvIE1hdHJpeCBtYXBwaW5nIG9yZGVyIGlzIGFzIGZvbGxvd3M6XG4gKlxuICogYSA9IGFycmF5WzBdXG4gKiBiID0gYXJyYXlbMV1cbiAqIGMgPSBhcnJheVszXVxuICogZCA9IGFycmF5WzRdXG4gKiB0eCA9IGFycmF5WzJdXG4gKiB0eSA9IGFycmF5WzVdXG4gKlxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX0gVGhlIGFycmF5IHRoYXQgdGhlIG1hdHJpeCB3aWxsIGJlIHBvcHVsYXRlZCBmcm9tLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJheSlcbntcbiAgICB0aGlzLmEgPSBhcnJheVswXTtcbiAgICB0aGlzLmIgPSBhcnJheVsxXTtcbiAgICB0aGlzLmMgPSBhcnJheVszXTtcbiAgICB0aGlzLmQgPSBhcnJheVs0XTtcbiAgICB0aGlzLnR4ID0gYXJyYXlbMl07XG4gICAgdGhpcy50eSA9IGFycmF5WzVdO1xufTtcblxuXG4vKipcbiAqIHNldHMgdGhlIG1hdHJpeCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gKiBAcGFyYW0ge251bWJlcn0gY1xuICogQHBhcmFtIHtudW1iZXJ9IGRcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eFxuICogQHBhcmFtIHtudW1iZXJ9IHR5XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHR4LCB0eSlcbntcbiAgICB0aGlzLmEgPSBhO1xuICAgIHRoaXMuYiA9IGI7XG4gICAgdGhpcy5jID0gYztcbiAgICB0aGlzLmQgPSBkO1xuICAgIHRoaXMudHggPSB0eDtcbiAgICB0aGlzLnR5ID0gdHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGZyb20gdGhlIGN1cnJlbnQgTWF0cml4IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3NlIHtib29sZWFufSBXaGV0aGVyIHdlIG5lZWQgdG8gdHJhbnNwb3NlIHRoZSBtYXRyaXggb3Igbm90XG4gKiBAcGFyYW0gW291dF0ge0FycmF5fSBJZiBwcm92aWRlZCB0aGUgYXJyYXkgd2lsbCBiZSBhc3NpZ25lZCB0byBvdXRcbiAqIEByZXR1cm4ge251bWJlcltdfSB0aGUgbmV3bHkgY3JlYXRlZCBhcnJheSB3aGljaCBjb250YWlucyB0aGUgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICh0cmFuc3Bvc2UsIG91dClcbntcbiAgICBpZiAoIXRoaXMuYXJyYXkpXG4gICAge1xuICAgICAgICB0aGlzLmFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg5KTtcbiAgICB9XG5cbiAgICB2YXIgYXJyYXkgPSBvdXQgfHwgdGhpcy5hcnJheTtcblxuICAgIGlmICh0cmFuc3Bvc2UpXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzJdID0gMDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IDA7XG4gICAgICAgIGFycmF5WzZdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbN10gPSB0aGlzLnR5O1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGFycmF5WzBdID0gdGhpcy5hO1xuICAgICAgICBhcnJheVsxXSA9IHRoaXMuYztcbiAgICAgICAgYXJyYXlbMl0gPSB0aGlzLnR4O1xuICAgICAgICBhcnJheVszXSA9IHRoaXMuYjtcbiAgICAgICAgYXJyYXlbNF0gPSB0aGlzLmQ7XG4gICAgICAgIGFycmF5WzVdID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbNl0gPSAwO1xuICAgICAgICBhcnJheVs3XSA9IDA7XG4gICAgICAgIGFycmF5WzhdID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59O1xuXG4vKipcbiAqIEdldCBhIG5ldyBwb3NpdGlvbiB3aXRoIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXG4gKiBDYW4gYmUgdXNlZCB0byBnbyBmcm9tIGEgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlIHRvIHRoZSB3b3JsZCBjb29yZGluYXRlIHNwYWNlLiAoZS5nLiByZW5kZXJpbmcpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCB0cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIHggPSBwb3MueDtcbiAgICB2YXIgeSA9IHBvcy55O1xuXG4gICAgbmV3UG9zLnggPSB0aGlzLmEgKiB4ICsgdGhpcy5jICogeSArIHRoaXMudHg7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmIgKiB4ICsgdGhpcy5kICogeSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gbmV3UG9zO1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgaW52ZXJzZSBvZiB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZSB0byBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gaW5wdXQpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCBpbnZlcnNlLXRyYW5zZm9ybWVkIHRocm91Z2ggdGhpcyBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBseUludmVyc2UgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIGlkID0gMSAvICh0aGlzLmEgKiB0aGlzLmQgKyB0aGlzLmMgKiAtdGhpcy5iKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5kICogaWQgKiB4ICsgLXRoaXMuYyAqIGlkICogeSArICh0aGlzLnR5ICogdGhpcy5jIC0gdGhpcy50eCAqIHRoaXMuZCkgKiBpZDtcbiAgICBuZXdQb3MueSA9IHRoaXMuYSAqIGlkICogeSArIC10aGlzLmIgKiBpZCAqIHggKyAoLXRoaXMudHkgKiB0aGlzLmEgKyB0aGlzLnR4ICogdGhpcy5iKSAqIGlkO1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogVHJhbnNsYXRlcyB0aGUgbWF0cml4IG9uIHRoZSB4IGFuZCB5LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudHJhbnNsYXRlID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy50eCArPSB4O1xuICAgIHRoaXMudHkgKz0geTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgc2NhbGUgdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geCBUaGUgYW1vdW50IHRvIHNjYWxlIGhvcml6b250YWxseVxuICogQHBhcmFtIHtudW1iZXJ9IHkgVGhlIGFtb3VudCB0byBzY2FsZSB2ZXJ0aWNhbGx5XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zY2FsZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuYSAqPSB4O1xuICAgIHRoaXMuZCAqPSB5O1xuICAgIHRoaXMuYyAqPSB4O1xuICAgIHRoaXMuYiAqPSB5O1xuICAgIHRoaXMudHggKj0geDtcbiAgICB0aGlzLnR5ICo9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBBcHBsaWVzIGEgcm90YXRpb24gdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgaW4gcmFkaWFucy5cbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZSA9IGZ1bmN0aW9uIChhbmdsZSlcbntcbiAgICB2YXIgY29zID0gTWF0aC5jb3MoIGFuZ2xlICk7XG4gICAgdmFyIHNpbiA9IE1hdGguc2luKCBhbmdsZSApO1xuXG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIHRoaXMuYSA9IGExICogY29zLXRoaXMuYiAqIHNpbjtcbiAgICB0aGlzLmIgPSBhMSAqIHNpbit0aGlzLmIgKiBjb3M7XG4gICAgdGhpcy5jID0gYzEgKiBjb3MtdGhpcy5kICogc2luO1xuICAgIHRoaXMuZCA9IGMxICogc2luK3RoaXMuZCAqIGNvcztcbiAgICB0aGlzLnR4ID0gdHgxICogY29zIC0gdGhpcy50eSAqIHNpbjtcbiAgICB0aGlzLnR5ID0gdHgxICogc2luICsgdGhpcy50eSAqIGNvcztcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcblxuICAgIHRoaXMuYSAgPSBtYXRyaXguYSAqIGExICsgbWF0cml4LmIgKiBjMTtcbiAgICB0aGlzLmIgID0gbWF0cml4LmEgKiBiMSArIG1hdHJpeC5iICogZDE7XG4gICAgdGhpcy5jICA9IG1hdHJpeC5jICogYTEgKyBtYXRyaXguZCAqIGMxO1xuICAgIHRoaXMuZCAgPSBtYXRyaXguYyAqIGIxICsgbWF0cml4LmQgKiBkMTtcblxuICAgIHRoaXMudHggPSBtYXRyaXgudHggKiBhMSArIG1hdHJpeC50eSAqIGMxICsgdGhpcy50eDtcbiAgICB0aGlzLnR5ID0gbWF0cml4LnR4ICogYjEgKyBtYXRyaXgudHkgKiBkMSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbWF0cml4IGJhc2VkIG9uIGFsbCB0aGUgYXZhaWxhYmxlIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFhcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFlcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVlcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3RhdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdYXG4gKiBAcGFyYW0ge251bWJlcn0gc2tld1lcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoeCwgeSwgcGl2b3RYLCBwaXZvdFksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZKVxue1xuICAgIHZhciBhLCBiLCBjLCBkLCBzciwgY3IsIGN5LCBzeSwgbnN4LCBjeDtcblxuICAgIHNyICA9IE1hdGguc2luKHJvdGF0aW9uKTtcbiAgICBjciAgPSBNYXRoLmNvcyhyb3RhdGlvbik7XG4gICAgY3kgID0gTWF0aC5jb3Moc2tld1kpO1xuICAgIHN5ICA9IE1hdGguc2luKHNrZXdZKTtcbiAgICBuc3ggPSAtTWF0aC5zaW4oc2tld1gpO1xuICAgIGN4ICA9ICBNYXRoLmNvcyhza2V3WCk7XG5cbiAgICBhICA9ICBjciAqIHNjYWxlWDtcbiAgICBiICA9ICBzciAqIHNjYWxlWDtcbiAgICBjICA9IC1zciAqIHNjYWxlWTtcbiAgICBkICA9ICBjciAqIHNjYWxlWTtcblxuICAgIHRoaXMuYSAgPSBjeSAqIGEgKyBzeSAqIGM7XG4gICAgdGhpcy5iICA9IGN5ICogYiArIHN5ICogZDtcbiAgICB0aGlzLmMgID0gbnN4ICogYSArIGN4ICogYztcbiAgICB0aGlzLmQgID0gbnN4ICogYiArIGN4ICogZDtcblxuICAgIHRoaXMudHggPSB4ICsgKCBwaXZvdFggKiBhICsgcGl2b3RZICogYyApO1xuICAgIHRoaXMudHkgPSB5ICsgKCBwaXZvdFggKiBiICsgcGl2b3RZICogZCApO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFByZXBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24obWF0cml4KVxue1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuXG4gICAgaWYgKG1hdHJpeC5hICE9PSAxIHx8IG1hdHJpeC5iICE9PSAwIHx8IG1hdHJpeC5jICE9PSAwIHx8IG1hdHJpeC5kICE9PSAxKVxuICAgIHtcbiAgICAgICAgdmFyIGExID0gdGhpcy5hO1xuICAgICAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgICAgIHRoaXMuYSAgPSBhMSptYXRyaXguYSt0aGlzLmIqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuYiAgPSBhMSptYXRyaXguYit0aGlzLmIqbWF0cml4LmQ7XG4gICAgICAgIHRoaXMuYyAgPSBjMSptYXRyaXguYSt0aGlzLmQqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuZCAgPSBjMSptYXRyaXguYit0aGlzLmQqbWF0cml4LmQ7XG4gICAgfVxuXG4gICAgdGhpcy50eCA9IHR4MSptYXRyaXguYSt0aGlzLnR5Km1hdHJpeC5jK21hdHJpeC50eDtcbiAgICB0aGlzLnR5ID0gdHgxKm1hdHJpeC5iK3RoaXMudHkqbWF0cml4LmQrbWF0cml4LnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEludmVydHMgdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5pbnZlcnQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBiMSA9IHRoaXMuYjtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIGQxID0gdGhpcy5kO1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuICAgIHZhciBuID0gYTEqZDEtYjEqYzE7XG5cbiAgICB0aGlzLmEgPSBkMS9uO1xuICAgIHRoaXMuYiA9IC1iMS9uO1xuICAgIHRoaXMuYyA9IC1jMS9uO1xuICAgIHRoaXMuZCA9IGExL247XG4gICAgdGhpcy50eCA9IChjMSp0aGlzLnR5LWQxKnR4MSkvbjtcbiAgICB0aGlzLnR5ID0gLShhMSp0aGlzLnR5LWIxKnR4MSkvbjtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIFJlc2V0cyB0aGlzIE1hdGl4IHRvIGFuIGlkZW50aXR5IChkZWZhdWx0KSBtYXRyaXguXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaWRlbnRpdHkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYSA9IDE7XG4gICAgdGhpcy5iID0gMDtcbiAgICB0aGlzLmMgPSAwO1xuICAgIHRoaXMuZCA9IDE7XG4gICAgdGhpcy50eCA9IDA7XG4gICAgdGhpcy50eSA9IDA7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBNYXRyaXggb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBBIGNvcHkgb2YgdGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1hdHJpeCA9IG5ldyBNYXRyaXgoKTtcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSB2YWx1ZXMgb2YgdGhlIGdpdmVuIG1hdHJpeCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgb25lcyBpbiB0aGlzIG1hdHJpeFxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGUgbWF0cml4IGdpdmVuIGluIHBhcmFtZXRlciB3aXRoIGl0cyB2YWx1ZXMgdXBkYXRlZC5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBBIGRlZmF1bHQgKGlkZW50aXR5KSBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LklERU5USVRZID0gbmV3IE1hdHJpeCgpO1xuXG4vKipcbiAqIEEgdGVtcCBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LlRFTVBfTUFUUklYID0gbmV3IE1hdHJpeCgpO1xuIiwiLyoqXG4gKiBUaGUgUG9pbnQgb2JqZWN0IHJlcHJlc2VudHMgYSBsb2NhdGlvbiBpbiBhIHR3by1kaW1lbnNpb25hbCBjb29yZGluYXRlIHN5c3RlbSwgd2hlcmUgeCByZXByZXNlbnRzXG4gKiB0aGUgaG9yaXpvbnRhbCBheGlzIGFuZCB5IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIGF4aXMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXNcbiAqL1xuZnVuY3Rpb24gUG9pbnQoeCwgeSlcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xufVxuXG5Qb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2ludDtcbm1vZHVsZS5leHBvcnRzID0gUG9pbnQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9pbnRcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBhIGNvcHkgb2YgdGhlIHBvaW50XG4gKi9cblBvaW50LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLngsIHRoaXMueSk7XG59O1xuXG4vKipcbiAqIENvcGllcyB4IGFuZCB5IGZyb20gdGhlIGdpdmVuIHBvaW50XG4gKlxuICogQHBhcmFtIHAge1BJWEkuUG9pbnR9XG4gKi9cblBvaW50LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKHApIHtcbiAgICB0aGlzLnNldChwLngsIHAueSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcG9pbnQgaXMgZXF1YWwgdG8gdGhpcyBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cblBvaW50LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiAocC54ID09PSB0aGlzLngpICYmIChwLnkgPT09IHRoaXMueSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIHBvaW50IHRvIGEgbmV3IHggYW5kIHkgcG9zaXRpb24uXG4gKiBJZiB5IGlzIG9taXR0ZWQsIGJvdGggeCBhbmQgeSB3aWxsIGJlIHNldCB0byB4LlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cblBvaW50LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLnggPSB4IHx8IDA7XG4gICAgdGhpcy55ID0geSB8fCAoICh5ICE9PSAwKSA/IHRoaXMueCA6IDAgKSA7XG59O1xuIiwiLyoqXG4gKiBNYXRoIGNsYXNzZXMgYW5kIHV0aWxpdGllcyBtaXhlZCBpbnRvIFBJWEkgbmFtZXNwYWNlLlxuICpcbiAqIEBsZW5kcyBQSVhJXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8vIFRoZXNlIHdpbGwgYmUgbWl4ZWQgdG8gYmUgbWFkZSBwdWJsaWNseSBhdmFpbGFibGUsXG4gICAgLy8gd2hpbGUgdGhpcyBtb2R1bGUgaXMgdXNlZCBpbnRlcm5hbGx5IGluIGNvcmVcbiAgICAvLyB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYW5kIGN1dCBkb3duIG9uXG4gICAgLy8gaW50ZXJuYWwgbW9kdWxlIHJlcXVpcmVzLlxuXG4gICAgUG9pbnQ6ICAgICAgcmVxdWlyZSgnLi9Qb2ludCcpLFxuICAgIE1hdHJpeDogICAgIHJlcXVpcmUoJy4vTWF0cml4JyksXG5cbiAgICBDaXJjbGU6ICAgICByZXF1aXJlKCcuL3NoYXBlcy9DaXJjbGUnKSxcbiAgICBFbGxpcHNlOiAgICByZXF1aXJlKCcuL3NoYXBlcy9FbGxpcHNlJyksXG4gICAgUG9seWdvbjogICAgcmVxdWlyZSgnLi9zaGFwZXMvUG9seWdvbicpLFxuICAgIFJlY3RhbmdsZTogIHJlcXVpcmUoJy4vc2hhcGVzL1JlY3RhbmdsZScpLFxuICAgIFJvdW5kZWRSZWN0YW5nbGU6IHJlcXVpcmUoJy4vc2hhcGVzL1JvdW5kZWRSZWN0YW5nbGUnKVxufTtcbiIsInZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2lyY2xlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKi9cbmZ1bmN0aW9uIENpcmNsZSh4LCB5LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuQ0lSQztcbn1cblxuQ2lyY2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENpcmNsZTtcbm1vZHVsZS5leHBvcnRzID0gQ2lyY2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIENpcmNsZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuQ2lyY2xlfSBhIGNvcHkgb2YgdGhlIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IENpcmNsZSh0aGlzLngsIHRoaXMueSwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGNpcmNsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgQ2lyY2xlXG4gKi9cbkNpcmNsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy5yYWRpdXMgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgZHggPSAodGhpcy54IC0geCksXG4gICAgICAgIGR5ID0gKHRoaXMueSAtIHkpLFxuICAgICAgICByMiA9IHRoaXMucmFkaXVzICogdGhpcy5yYWRpdXM7XG5cbiAgICBkeCAqPSBkeDtcbiAgICBkeSAqPSBkeTtcblxuICAgIHJldHVybiAoZHggKyBkeSA8PSByMik7XG59O1xuXG4vKipcbiogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIGNpcmNsZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuKi9cbkNpcmNsZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLnJhZGl1cywgdGhpcy55IC0gdGhpcy5yYWRpdXMsIHRoaXMucmFkaXVzICogMiwgdGhpcy5yYWRpdXMgKiAyKTtcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIEVsbGlwc2Ugb2JqZWN0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBoaXQgYXJlYSBmb3IgZGlzcGxheU9iamVjdHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBoYWxmIHdpZHRoIG9mIHRoaXMgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhpcyBlbGxpcHNlXG4gKi9cbmZ1bmN0aW9uIEVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuRUxJUDtcbn1cblxuRWxsaXBzZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFbGxpcHNlO1xubW9kdWxlLmV4cG9ydHMgPSBFbGxpcHNlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIEVsbGlwc2UgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkVsbGlwc2V9IGEgY29weSBvZiB0aGUgZWxsaXBzZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBFbGxpcHNlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgZWxsaXBzZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZHMgYXJlIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy9ub3JtYWxpemUgdGhlIGNvb3JkcyB0byBhbiBlbGxpcHNlIHdpdGggY2VudGVyIDAsMFxuICAgIHZhciBub3JteCA9ICgoeCAtIHRoaXMueCkgLyB0aGlzLndpZHRoKSxcbiAgICAgICAgbm9ybXkgPSAoKHkgLSB0aGlzLnkpIC8gdGhpcy5oZWlnaHQpO1xuXG4gICAgbm9ybXggKj0gbm9ybXg7XG4gICAgbm9ybXkgKj0gbm9ybXk7XG5cbiAgICByZXR1cm4gKG5vcm14ICsgbm9ybXkgPD0gMSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBlbGxpcHNlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLndpZHRoLCB0aGlzLnkgLSB0aGlzLmhlaWdodCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcbiIsInZhciBQb2ludCA9IHJlcXVpcmUoJy4uL1BvaW50JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBwb2ludHMge1BJWEkuUG9pbnRbXXxudW1iZXJbXXwuLi5QSVhJLlBvaW50fC4uLm51bWJlcn0gVGhpcyBjYW4gYmUgYW4gYXJyYXkgb2YgUG9pbnRzIHRoYXQgZm9ybSB0aGUgcG9seWdvbixcbiAqICAgICAgYSBmbGF0IGFycmF5IG9mIG51bWJlcnMgdGhhdCB3aWxsIGJlIGludGVycHJldGVkIGFzIFt4LHksIHgseSwgLi4uXSwgb3IgdGhlIGFyZ3VtZW50cyBwYXNzZWQgY2FuIGJlXG4gKiAgICAgIGFsbCB0aGUgcG9pbnRzIG9mIHRoZSBwb2x5Z29uIGUuZy4gYG5ldyBQSVhJLlBvbHlnb24obmV3IFBJWEkuUG9pbnQoKSwgbmV3IFBJWEkuUG9pbnQoKSwgLi4uKWAsIG9yIHRoZVxuICogICAgICBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZSBmbGF0IHgseSB2YWx1ZXMgZS5nLiBgbmV3IFBvbHlnb24oeCx5LCB4LHksIHgseSwgLi4uKWAgd2hlcmUgYHhgIGFuZCBgeWAgYXJlXG4gKiAgICAgIE51bWJlcnMuXG4gKi9cbmZ1bmN0aW9uIFBvbHlnb24ocG9pbnRzXylcbntcbiAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBhc3NpZ25tZW50IGRlb3B0XG4gICAgLy8gc2VlIHNlY3Rpb24gMy4xOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICB2YXIgcG9pbnRzID0gcG9pbnRzXztcblxuICAgIC8vaWYgcG9pbnRzIGlzbid0IGFuIGFycmF5LCB1c2UgYXJndW1lbnRzIGFzIHRoZSBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBwb2ludHMubGVuZ3RoOyArK2EpIHtcbiAgICAgICAgICAgIHBvaW50c1thXSA9IGFyZ3VtZW50c1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHRoaXMgaXMgYW4gYXJyYXkgb2YgcG9pbnRzLCBjb252ZXJ0IGl0IHRvIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzXG4gICAgaWYgKHBvaW50c1swXSBpbnN0YW5jZW9mIFBvaW50KVxuICAgIHtcbiAgICAgICAgdmFyIHAgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHAucHVzaChwb2ludHNbaV0ueCwgcG9pbnRzW2ldLnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9pbnRzID0gcDtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB0aGUgcG9pbnRzIG9mIHRoaXMgcG9seWdvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlBPTFk7XG59XG5cblBvbHlnb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9seWdvbjtcbm1vZHVsZS5leHBvcnRzID0gUG9seWdvbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBwb2x5Z29uXG4gKlxuICogQHJldHVybiB7UElYSS5Qb2x5Z29ufSBhIGNvcHkgb2YgdGhlIHBvbHlnb25cbiAqL1xuUG9seWdvbi5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9seWdvbih0aGlzLnBvaW50cy5zbGljZSgpKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIGluc2lkZSA9IGZhbHNlO1xuXG4gICAgLy8gdXNlIHNvbWUgcmF5Y2FzdGluZyB0byB0ZXN0IGhpdHNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svcG9pbnQtaW4tcG9seWdvbi9ibG9iL21hc3Rlci9pbmRleC5qc1xuICAgIHZhciBsZW5ndGggPSB0aGlzLnBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBsZW5ndGggLSAxOyBpIDwgbGVuZ3RoOyBqID0gaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHhpID0gdGhpcy5wb2ludHNbaSAqIDJdLCB5aSA9IHRoaXMucG9pbnRzW2kgKiAyICsgMV0sXG4gICAgICAgICAgICB4aiA9IHRoaXMucG9pbnRzW2ogKiAyXSwgeWogPSB0aGlzLnBvaW50c1tqICogMiArIDFdLFxuICAgICAgICAgICAgaW50ZXJzZWN0ID0gKCh5aSA+IHkpICE9PSAoeWogPiB5KSkgJiYgKHggPCAoeGogLSB4aSkgKiAoeSAtIHlpKSAvICh5aiAtIHlpKSArIHhpKTtcblxuICAgICAgICBpZiAoaW50ZXJzZWN0KVxuICAgICAgICB7XG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc2lkZTtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIHRoZSBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgZGVmaW5lZCBieSBpdHMgcG9zaXRpb24sIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCB3aWR0aCBvZiB0aGlzIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByZWN0YW5nbGVcbiAqL1xuZnVuY3Rpb24gUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJFQ1Q7XG59XG5cblJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZWN0YW5nbGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlY3RhbmdsZTtcblxuLyoqXG4gKiBBIGNvbnN0YW50IGVtcHR5IHJlY3RhbmdsZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuUmVjdGFuZ2xlLkVNUFRZID0gbmV3IFJlY3RhbmdsZSgwLCAwLCAwLCAwKTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgUmVjdGFuZ2xlXG4gKi9cblJlY3RhbmdsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHggPj0gdGhpcy54ICYmIHggPCB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPCB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUm91bmRlZCBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgdGhhdCBoYXMgbmljZSByb3VuZGVkIGNvcm5lcnMsIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0IGFuZCBpdHMgcmFkaXVzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBDb250cm9scyB0aGUgcmFkaXVzIG9mIHRoZSByb3VuZGVkIGNvcm5lcnNcbiAqL1xuZnVuY3Rpb24gUm91bmRlZFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMjBcbiAgICAgKi9cbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCAyMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUlJFQztcbn1cblxuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3VuZGVkUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3VuZGVkUmVjdGFuZ2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHJldHVybiB7UElYSS5Sb3VuZGVkUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJvdW5kZWRSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnJhZGl1cyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDw9IHRoaXMueCArIHRoaXMud2lkdGgpXG4gICAge1xuICAgICAgICBpZiAoeSA+PSB0aGlzLnkgJiYgeSA8PSB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBQYXJ0aWNsZUNvbnRhaW5lciBjbGFzcyBpcyBhIHJlYWxseSBmYXN0IHZlcnNpb24gb2YgdGhlIENvbnRhaW5lciBidWlsdCBzb2xlbHkgZm9yIHNwZWVkLFxuICogc28gdXNlIHdoZW4geW91IG5lZWQgYSBsb3Qgb2Ygc3ByaXRlcyBvciBwYXJ0aWNsZXMuIFRoZSB0cmFkZW9mZiBvZiB0aGUgUGFydGljbGVDb250YWluZXIgaXMgdGhhdCBhZHZhbmNlZFxuICogZnVuY3Rpb25hbGl0eSB3aWxsIG5vdCB3b3JrLiBQYXJ0aWNsZUNvbnRhaW5lciBpbXBsZW1lbnRzIG9ubHkgdGhlIGJhc2ljIG9iamVjdCB0cmFuc2Zvcm0gKHBvc2l0aW9uLCBzY2FsZSwgcm90YXRpb24pLlxuICogQW55IG90aGVyIGZ1bmN0aW9uYWxpdHkgbGlrZSB0aW50aW5nLCBtYXNraW5nLCBldGMgd2lsbCBub3Qgd29yayBvbiBzcHJpdGVzIGluIHRoaXMgYmF0Y2guXG4gKlxuICogSXQncyBleHRyZW1lbHkgZWFzeSB0byB1c2UgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgY29udGFpbmVyID0gbmV3IFBhcnRpY2xlQ29udGFpbmVyKCk7XG4gKlxuICogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSlcbiAqIHtcbiAqICAgICB2YXIgc3ByaXRlID0gbmV3IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcIm15SW1hZ2UucG5nXCIpO1xuICogICAgIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogfVxuICogYGBgXG4gKlxuICogQW5kIGhlcmUgeW91IGhhdmUgYSBodW5kcmVkIHNwcml0ZXMgdGhhdCB3aWxsIGJlIHJlbmRlcmVyIGF0IHRoZSBzcGVlZCBvZiBsaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFttYXhTaXplPTE1MDAwXSB7bnVtYmVyfSBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFydGljbGVzIHRoYXQgY2FuIGJlIHJlbmRlcmVyIGJ5IHRoZSBjb250YWluZXIuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXNdIHtvYmplY3R9IFRoZSBwcm9wZXJ0aWVzIG9mIGNoaWxkcmVuIHRoYXQgc2hvdWxkIGJlIHVwbG9hZGVkIHRvIHRoZSBncHUgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuc2NhbGU9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHNjYWxlIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnBvc2l0aW9uPXRydWVdIHtib29sZWFufSBXaGVuIHRydWUsIHBvc2l0aW9uIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnJvdGF0aW9uPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCByb3RhdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy51dnM9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHV2cyBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5hbHBoYT1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgYWxwaGEgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW2JhdGNoU2l6ZT0xNTAwMF0ge251bWJlcn0gTnVtYmVyIG9mIHBhcnRpY2xlcyBwZXIgYmF0Y2guXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQ29udGFpbmVyKG1heFNpemUsIHByb3BlcnRpZXMsIGJhdGNoU2l6ZSlcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIGJhdGNoU2l6ZSA9IGJhdGNoU2l6ZSB8fCAxNTAwMDsgLy9DT05TVC5TUFJJVEVfQkFUQ0hfU0laRTsgLy8gMjAwMCBpcyBhIG5pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSAvIGRlc2t0b3BcbiAgICBtYXhTaXplID0gbWF4U2l6ZSB8fCAxNTAwMDtcblxuICAgIC8vIE1ha2luZyBzdXJlIHRoZSBiYXRjaCBzaXplIGlzIHZhbGlkXG4gICAgLy8gNjU1MzUgaXMgbWF4IHZlcnRleCBpbmRleCBpbiB0aGUgaW5kZXggYnVmZmVyIChzZWUgUGFydGljbGVSZW5kZXJlcilcbiAgICAvLyBzbyBtYXggbnVtYmVyIG9mIHBhcnRpY2xlcyBpcyA2NTUzNiAvIDQgPSAxNjM4NFxuICAgIHZhciBtYXhCYXRjaFNpemUgPSAxNjM4NDtcbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4QmF0Y2hTaXplKSB7XG4gICAgICAgIGJhdGNoU2l6ZSA9IG1heEJhdGNoU2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4U2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhTaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBwcm9wZXJ0aWVzIHRvIGJlIGR5bmFtaWMgKHRydWUpIC8gc3RhdGljIChmYWxzZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW5bXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4U2l6ZSA9IG1heFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYXRjaFNpemUgPSBiYXRjaFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVDaGlsZHJlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGNhbnZhcyByZW5kZXJlcmluZy4gSWYgdHJ1ZSB0aGVuIHRoZSBlbGVtZW50cyB3aWxsIGJlIHBvc2l0aW9uZWQgYXQgdGhlIG5lYXJlc3QgcGl4ZWwuIFRoaXMgcHJvdmlkZXMgYSBuaWNlIHNwZWVkIGJvb3N0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlO1xuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSB0cnVlO1xuXG4gICAgdGhpcy5zZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xufVxuXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQ29udGFpbmVyO1xuXG4vKipcbiAqIFNldHMgdGhlIHByaXZhdGUgcHJvcGVydGllcyBhcnJheSB0byBkeW5hbWljIC8gc3RhdGljIGJhc2VkIG9uIHRoZSBwYXNzZWQgcHJvcGVydGllcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcHJvcGVydGllcyB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyB0byBiZSB1cGxvYWRlZFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuc2V0UHJvcGVydGllcyA9IGZ1bmN0aW9uKHByb3BlcnRpZXMpXG57XG4gICAgaWYgKCBwcm9wZXJ0aWVzICkge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzBdID0gJ3NjYWxlJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnNjYWxlIDogdGhpcy5fcHJvcGVydGllc1swXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1sxXSA9ICdwb3NpdGlvbicgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5wb3NpdGlvbiA6IHRoaXMuX3Byb3BlcnRpZXNbMV07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMl0gPSAncm90YXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucm90YXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzJdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzNdID0gJ3V2cycgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy51dnMgOiB0aGlzLl9wcm9wZXJ0aWVzWzNdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzRdID0gJ2FscGhhJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLmFscGhhIDogdGhpcy5fcHJvcGVydGllc1s0XTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgLy8gVE9ETyBkb24ndCBuZWVkIHRvIVxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIC8vICBQSVhJLkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtLmNhbGwoIHRoaXMgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGFpbmVyIHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgd2ViZ2wgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlciggcmVuZGVyZXIucGx1Z2lucy5wYXJ0aWNsZSApO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUucmVuZGVyKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgZmxhZyB0aGF0IHN0YXRpYyBkYXRhIHNob3VsZCBiZSB1cGRhdGVkIHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUub25DaGlsZHJlbkNoYW5nZSA9IGZ1bmN0aW9uIChzbWFsbGVzdENoaWxkSW5kZXgpXG57XG4gICAgdmFyIGJ1ZmZlckluZGV4ID0gTWF0aC5mbG9vcihzbWFsbGVzdENoaWxkSW5kZXggLyB0aGlzLl9iYXRjaFNpemUpO1xuICAgIGlmIChidWZmZXJJbmRleCA8IHRoaXMuX2J1ZmZlclRvVXBkYXRlKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gYnVmZmVySW5kZXg7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIGNhbnZhcyByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGlzUm90YXRlZCA9IHRydWU7XG5cbiAgICB2YXIgcG9zaXRpb25YID0gMDtcbiAgICB2YXIgcG9zaXRpb25ZID0gMDtcblxuICAgIHZhciBmaW5hbFdpZHRoID0gMDtcbiAgICB2YXIgZmluYWxIZWlnaHQgPSAwO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICBpZiAoIWNoaWxkLnZpc2libGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZyYW1lID0gY2hpbGQudGV4dHVyZS5mcmFtZTtcblxuICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhICogY2hpbGQuYWxwaGE7XG5cbiAgICAgICAgaWYgKGNoaWxkLnJvdGF0aW9uICUgKE1hdGguUEkgKiAyKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgZmFzdGVzdCAgd2F5IHRvIG9wdGltaXNlISAtIGlmIHJvdGF0aW9uIGlzIDAgdGhlbiB3ZSBjYW4gYXZvaWQgYW55IGtpbmQgb2Ygc2V0VHJhbnNmb3JtIGNhbGxcbiAgICAgICAgICAgIGlmIChpc1JvdGF0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoICogY2hpbGQuc2NhbGUueCkgKyBjaGlsZC5wb3NpdGlvbi54ICArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0ICogY2hpbGQuc2NhbGUueSkgKyBjaGlsZC5wb3NpdGlvbi55ICArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLng7XG4gICAgICAgICAgICBmaW5hbEhlaWdodCA9IGZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnk7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzUm90YXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoaWxkLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICAgICAgdmFyIGNoaWxkVHJhbnNmb3JtID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHggfCAwLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eSB8IDBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvblggPSAoKGNoaWxkLmFuY2hvci54KSAqICgtZnJhbWUud2lkdGgpICsgMC41KTtcbiAgICAgICAgICAgIHBvc2l0aW9uWSA9ICgoY2hpbGQuYW5jaG9yLnkpICogKC1mcmFtZS5oZWlnaHQpICsgMC41KTtcblxuICAgICAgICAgICAgZmluYWxXaWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgIGNoaWxkLnRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgZnJhbWUueCxcbiAgICAgICAgICAgIGZyYW1lLnksXG4gICAgICAgICAgICBmcmFtZS53aWR0aCxcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCxcbiAgICAgICAgICAgIHBvc2l0aW9uWCxcbiAgICAgICAgICAgIHBvc2l0aW9uWSxcbiAgICAgICAgICAgIGZpbmFsV2lkdGgsXG4gICAgICAgICAgICBmaW5hbEhlaWdodFxuICAgICAgICApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUNoaWxkcmVuPWZhbHNlXSB7Ym9vbGVhbn0gaWYgc2V0IHRvIHRydWUsIGFsbCB0aGUgY2hpbGRyZW4gd2lsbCBoYXZlIHRoZWlyIGRlc3Ryb3kgbWV0aG9kIGNhbGxlZCBhcyB3ZWxsXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgaWYgKHRoaXMuX2J1ZmZlcnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLl9idWZmZXJzW2ldLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xufTtcbiIsIlxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZUJ1ZmZlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvUGFydGljbGVCdWZmZXIuamF2YVxuICovXG5cbi8qKlxuICogVGhlIHBhcnRpY2xlIGJ1ZmZlciBtYW5hZ2VzIHRoZSBzdGF0aWMgYW5kIGR5bmFtaWMgYnVmZmVycyBmb3IgYSBwYXJ0aWNsZSBjb250YWluZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gUGFydGljbGVCdWZmZXIoZ2wsIHByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBzaXplKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRTaXplID0gMjtcblxuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYSBzaW5nbGUgdmVydGV4IGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGUgYnVmZmVyIGNhbiBob2xkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gc2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBkeW5hbWljLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIHN0YXRpYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcblxuICAgICAgICBpZihkeW5hbWljUHJvcGVydHlGbGFnc1tpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5keW5hbWljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuZHluYW1pY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW5pdEJ1ZmZlcnMoKTtcblxufVxuXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZUJ1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVCdWZmZXI7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmluaXRCdWZmZXJzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpO1xuICAgIHZhciBwcm9wZXJ0eTtcblxuICAgIHZhciBkeW5hbWljT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG5cbiAgICAgICAgcHJvcGVydHkub2Zmc2V0ID0gZHluYW1pY09mZnNldDtcbiAgICAgICAgZHluYW1pY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLmR5bmFtaWNTdHJpZGUgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5keW5hbWljU3RyaWRlICogNCk7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcblxuXG4gICAgLy8gc3RhdGljIC8vXG4gICAgdmFyIHN0YXRpY09mZnNldCA9IDA7XG4gICAgdGhpcy5zdGF0aWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IHN0YXRpY09mZnNldDtcbiAgICAgICAgc3RhdGljT2Zmc2V0ICs9IHByb3BlcnR5LnNpemU7XG4gICAgICAgIHRoaXMuc3RhdGljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5zdGF0aWNTdHJpZGUgKiA0KTtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNEYXRhLCBnbC5EWU5BTUlDX0RSQVcpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBkeW5hbWljIHByb3BlcnRpZXMuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUudXBsb2FkRHluYW1pYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIHByb3BlcnR5LnVwbG9hZEZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIHRoaXMuZHluYW1pY0RhdGEsIHRoaXMuZHluYW1pY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy5keW5hbWljRGF0YSk7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHN0YXRpYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZFN0YXRpYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLnN0YXRpY0RhdGEsIHRoaXMuc3RhdGljU3RyaWRlLCBwcm9wZXJ0eS5vZmZzZXQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuc3RhdGljRGF0YSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIHRvIHRoZSBHUFVcbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpLCBwcm9wZXJ0eTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuc3RhdGljU3RyaWRlICogNCwgcHJvcGVydHkub2Zmc2V0ICogNCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVCdWZmZXIuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLnN0YXRpY0J1ZmZlcik7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgUGFydGljbGVTaGFkZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlU2hhZGVyJyksXG4gICAgUGFydGljbGVCdWZmZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlQnVmZmVyJyksXG4gICAgbWF0aCAgICAgICAgICAgID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFBhcnRpY2xlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICAvLyBhbmQgbWF4IG51bWJlciBvZiBlbGVtZW50IGluIHRoZSBpbmRleCBidWZmZXIgaXMgMTYzODQgKiA2ID0gOTgzMDRcbiAgICAvLyBDcmVhdGluZyBhIGZ1bGwgaW5kZXggYnVmZmVyLCBvdmVyaGVhZCBpcyA5ODMwNCAqIDIgPSAxOTZLb1xuICAgIHZhciBudW1JbmRpY2VzID0gOTgzMDQ7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KG51bUluZGljZXMpO1xuXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCBudW1JbmRpY2VzOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gbnVsbDtcblxuICAgIHRoaXMudGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xufVxuXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbigncGFydGljbGUnLCBQYXJ0aWNsZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBXaGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gbmV3IFBhcnRpY2xlU2hhZGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlcik7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggaW5kZXgsIHNvIDY1NTM1IC8gNiA9IDEwOTIyLlxuXG4gICAgLy91cGxvYWQgdGhlIGluZGV4IGRhdGFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IFtcbiAgICAgICAgLy8gdmVydGljZXNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbixcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkVmVydGljZXMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBwb3NpdGlvbkRhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFBvc2l0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcm90YXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFSb3RhdGlvbixcbiAgICAgICAgICAgIHNpemU6MSxcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkUm90YXRpb24sXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyB1dnNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFV2cyxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIGFscGhhRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZEFscGhhLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfVxuICAgIF07XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBwYXJ0aWNsZSBiYXRjaC5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gYmluZCB0aGUgbWFpbiB0ZXh0dXJlXG4gICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAvLyBiaW5kIHRoZSBidWZmZXJzXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnNoYWRlcjtcblxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBwYXJ0aWNsZSBjb250YWluZXIgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBjaGlsZHJlbiA9IGNvbnRhaW5lci5jaGlsZHJlbixcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aCxcbiAgICAgICAgbWF4U2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemU7XG5cbiAgICBpZih0b3RhbENoaWxkcmVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIGlmKHRvdGFsQ2hpbGRyZW4gPiBtYXhTaXplKVxuICAgIHtcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IG1heFNpemU7XG4gICAgfVxuXG4gICAgaWYoIWNvbnRhaW5lci5fYnVmZmVycylcbiAgICB7XG4gICAgICAgIGNvbnRhaW5lci5fYnVmZmVycyA9IHRoaXMuZ2VuZXJhdGVCdWZmZXJzKCBjb250YWluZXIgKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXZzIGhhdmUgbm90IHVwZGF0ZWQgdGhlbiBubyBwb2ludCByZW5kZXJpbmcganVzdCB5ZXQhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb250YWluZXIuYmxlbmRNb2RlKTtcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgbSA9ICBjb250YWluZXIud29ybGRUcmFuc2Zvcm0uY29weSggdGhpcy50ZW1wTWF0cml4ICk7XG4gICAgbS5wcmVwZW5kKCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeCApO1xuICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5zaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCBtLnRvQXJyYXkodHJ1ZSkpO1xuICAgIGdsLnVuaWZvcm0xZih0aGlzLnNoYWRlci51bmlmb3Jtcy51QWxwaGEuX2xvY2F0aW9uLCBjb250YWluZXIud29ybGRBbHBoYSk7XG5cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgdGV4dHVyZSBpcyBib3VuZC4uXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gY2hpbGRyZW5bMF0uX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSB0ZXh0dXJlIGhhcyBub3QgdXBkYXRlZCB0aGVuIGxldHMgbm90IHVwbG9hZCBhbnkgc3RhdGljIHByb3BlcnRpZXNcbiAgICAgICAgaWYoIXRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZShiYXNlVGV4dHVyZSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFjb250YWluZXIuX3Byb3BlcnRpZXNbMF0gfHwgIWNvbnRhaW5lci5fcHJvcGVydGllc1szXSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICB9XG5cbiAgICAvLyBub3cgbGV0cyB1cGxvYWQgYW5kIHJlbmRlciB0aGUgYnVmZmVycy4uXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgdG90YWxDaGlsZHJlbjsgaSArPSBiYXRjaFNpemUsIGogKz0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhbW91bnQgPSAoIHRvdGFsQ2hpbGRyZW4gLSBpKTtcbiAgICAgICAgaWYoYW1vdW50ID4gYmF0Y2hTaXplKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbW91bnQgPSBiYXRjaFNpemU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYnVmZmVyID0gY29udGFpbmVyLl9idWZmZXJzW2pdO1xuXG4gICAgICAgIC8vIHdlIGFsd2F5cyB1cGxvYWQgdGhlIGR5bmFtaWNcbiAgICAgICAgYnVmZmVyLnVwbG9hZER5bmFtaWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG5cbiAgICAgICAgLy8gd2Ugb25seSB1cGxvYWQgdGhlIHN0YXRpYyBjb250ZW50IHdoZW4gd2UgaGF2ZSB0byFcbiAgICAgICAgaWYoY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9PT0gailcbiAgICAgICAge1xuICAgICAgICAgICAgYnVmZmVyLnVwbG9hZFN0YXRpYyhjaGlsZHJlbiwgaSwgYW1vdW50KTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSBqICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJpbmQgdGhlIGJ1ZmZlclxuICAgICAgICBidWZmZXIuYmluZCggdGhpcy5zaGFkZXIgKTtcblxuICAgICAgICAgLy8gbm93IGRyYXcgdGhvc2Ugc3Vja2FzIVxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBhbW91bnQgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIG9uZSBwYXJ0aWNsZSBidWZmZXIgZm9yIGVhY2ggY2hpbGQgaW4gdGhlIGNvbnRhaW5lciB3ZSB3YW50IHRvIHJlbmRlciBhbmQgdXBkYXRlcyBpbnRlcm5hbCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7UElYSS5QYXJ0aWNsZUNvbnRhaW5lcn0gVGhlIGNvbnRhaW5lciB0byByZW5kZXIgdXNpbmcgdGhpcyBQYXJ0aWNsZVJlbmRlcmVyXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmdlbmVyYXRlQnVmZmVycyA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgYnVmZmVycyA9IFtdLFxuICAgICAgICBzaXplID0gY29udGFpbmVyLl9tYXhTaXplLFxuICAgICAgICBiYXRjaFNpemUgPSBjb250YWluZXIuX2JhdGNoU2l6ZSxcbiAgICAgICAgZHluYW1pY1Byb3BlcnR5RmxhZ3MgPSBjb250YWluZXIuX3Byb3BlcnRpZXMsXG4gICAgICAgIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBiYXRjaFNpemUpXG4gICAge1xuICAgICAgICBidWZmZXJzLnB1c2gobmV3IFBhcnRpY2xlQnVmZmVyKGdsLCB0aGlzLnByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBiYXRjaFNpemUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVycztcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgdmVydGljaWVzLlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciB2ZXJ0aWNlcyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkVmVydGljZXMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIHZhciBzcHJpdGUsXG4gICAgICAgIHRleHR1cmUsXG4gICAgICAgIHRyaW0sXG4gICAgICAgIHN4LFxuICAgICAgICBzeSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKSB7XG5cbiAgICAgICAgc3ByaXRlID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldO1xuICAgICAgICB0ZXh0dXJlID0gc3ByaXRlLl90ZXh0dXJlO1xuICAgICAgICBzeCA9IHNwcml0ZS5zY2FsZS54O1xuICAgICAgICBzeSA9IHNwcml0ZS5zY2FsZS55O1xuXG4gICAgICAgIGlmICh0ZXh0dXJlLnRyaW0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZCB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG5cbiAgICAgICAgICAgIHcxID0gdHJpbS54IC0gc3ByaXRlLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGgxID0gdHJpbS55IC0gc3ByaXRlLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICBoMCA9IGgxICsgdGV4dHVyZS5jcm9wLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS1zcHJpdGUuYW5jaG9yLngpO1xuICAgICAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC1zcHJpdGUuYW5jaG9yLng7XG5cbiAgICAgICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtc3ByaXRlLmFuY2hvci55KTtcbiAgICAgICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXNwcml0ZS5hbmNob3IueTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gaDEgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IGgwICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHBvc2l0aW9ucyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUG9zaXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVQb3NpdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5wb3NpdGlvbjtcblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciByb3RhdGlvbiB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUm90YXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVSb3RhdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5yb3RhdGlvbjtcblxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVJvdGF0aW9uO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBVdnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFV2cyA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmVVdnMgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uX3RleHR1cmUuX3V2cztcblxuICAgICAgICBpZiAodGV4dHVyZVV2cylcbiAgICAgICAge1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHRleHR1cmVVdnMueDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IHRleHR1cmVVdnMueTA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB0ZXh0dXJlVXZzLngxO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSB0ZXh0dXJlVXZzLnkxO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHRleHR1cmVVdnMueDI7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSB0ZXh0dXJlVXZzLnkyO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHRleHR1cmVVdnMueDM7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSB0ZXh0dXJlVXZzLnkzO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyB5b3Uga25vdyB0aGlzIGNhbiBiZSBlYXNpZXIhXG4gICAgICAgICAgICBhcnJheVtvZmZzZXRdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIGFscGhhIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRBbHBoYSA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICAge1xuICAgICAgICB2YXIgc3ByaXRlQWxwaGEgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uYWxwaGE7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlQWxwaGE7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBQYXJ0aWNsZVJlbmRlcmVyLlxuICpcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIuZ2wpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5nbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgfVxuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG4gICAgdGhpcy50ZW1wTWF0cml4ID0gbnVsbDtcbn07XG4iLCJ2YXIgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1RleHR1cmVTaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVNoYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFRleHR1cmVTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVBvc2l0aW9uQ29vcmQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhU2NhbGU7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgZmxvYXQgYVJvdGF0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgdmVjMiB2ID0gYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICcgICB2LnggPSAoYVZlcnRleFBvc2l0aW9uLngpICogY29zKGFSb3RhdGlvbikgLSAoYVZlcnRleFBvc2l0aW9uLnkpICogc2luKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2LnkgPSAoYVZlcnRleFBvc2l0aW9uLngpICogc2luKGFSb3RhdGlvbikgKyAoYVZlcnRleFBvc2l0aW9uLnkpICogY29zKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2ID0gdiArIGFQb3NpdGlvbkNvb3JkOycsXG5cbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKHYsIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gaGVsbG9cbiAgICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IHVBbHBoYTsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciAqIHVBbHBoYTsnLFxuICAgICAgICAgICAgJyAgaWYgKGNvbG9yLmEgPT0gMC4wKSBkaXNjYXJkOycsXG4gICAgICAgICAgICAnICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB1QWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVBvc2l0aW9uQ29vcmQ6IDAsXG4gICAgICAgICAgIC8vIGFTY2FsZTogICAgICAgICAwLFxuICAgICAgICAgICAgYVJvdGF0aW9uOiAgICAgIDBcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBURU1QIEhBQ0tcblxufVxuXG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmVTaGFkZXIucHJvdG90eXBlKTtcblBhcnRpY2xlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlU2hhZGVyO1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogVGhlIENhbnZhc1JlbmRlcmVyIGRyYXdzIHRoZSBzY2VuZSBhbmQgYWxsIGl0cyBjb250ZW50IG9udG8gYSAyZCBjYW52YXMuIFRoaXMgcmVuZGVyZXIgc2hvdWxkIGJlIHVzZWQgZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgd2ViR0wuXG4gKiBEb24ndCBmb3JnZXQgdG8gYWRkIHRoZSBDYW52YXNSZW5kZXJlci52aWV3IHRvIHlvdXIgRE9NIG9yIHlvdSB3aWxsIG5vdCBzZWUgYW55dGhpbmcgOilcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc3lzdGVtIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSBzeXN0ZW0gdGhpcyByZW5kZXJlciBpcyBmb3IuXG4gKiBAcGFyYW0gW3dpZHRoPTgwMF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9NjAwXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBdIHtudW1iZXJ9IFRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSByZW5kZXJlZCBhcmVhIChzaG93biBpZiBub3QgdHJhbnNwYXJlbnQpLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFN5c3RlbVJlbmRlcmVyKHN5c3RlbSwgd2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHV0aWxzLnNheUhlbGxvKHN5c3RlbSk7XG5cbiAgICAvLyBwcmVwYXJlIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zW2ldID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zW2ldID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OU1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBvcHRpb25zID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5SRU5ERVJFUl9UWVBFLlVOS05PV05cbiAgICAgKiBAc2VlIFBJWEkuUkVOREVSRVJfVFlQRVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuVU5LTk9XTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA4MDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgODAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA2MDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHRvXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLnZpZXcgPSBvcHRpb25zLnZpZXcgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gb3B0aW9ucy5yZXNvbHV0aW9uO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy50cmFuc3BhcmVudCA9IG9wdGlvbnMudHJhbnNwYXJlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByZW5kZXIgdmlldyBzaG91bGQgYmUgcmVzaXplZCBhdXRvbWF0aWNhbGx5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IG9wdGlvbnMuYXV0b1Jlc2l6ZSB8fCBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrcyB0aGUgYmxlbmQgbW9kZXMgdXNlZnVsIGZvciB0aGlzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbWl4ZWQ+fVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIHByZXNlcnZlRHJhd2luZ0J1ZmZlciBmbGFnIGFmZmVjdHMgd2hldGhlciBvciBub3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyByZXRhaW5lZCBhZnRlciByZW5kZXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvciBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gICAgICogSWYgdGhlIHNjZW5lIGlzIE5PVCB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGEgY2FudmFzIHNpemVkIGZpbGxSZWN0IG9wZXJhdGlvbiBldmVyeSBmcmFtZSB0byBzZXQgdGhlIGNhbnZhcyBiYWNrZ3JvdW5kIGNvbG9yLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGNsZWFyUmVjdCB0byBjbGVhciB0aGUgY2FudmFzIGV2ZXJ5IGZyYW1lLlxuICAgICAqIERpc2FibGUgdGhpcyBieSBzZXR0aW5nIHRoaXMgdG8gZmFsc2UuIEZvciBleGFtcGxlIGlmIHlvdXIgZ2FtZSBoYXMgYSBjYW52YXMgZmlsbGluZyBiYWNrZ3JvdW5kIGltYWdlIHlvdSBvZnRlbiBkb24ndCBuZWVkIHRoaXMgc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdFxuICAgICAqL1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyO1xuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gICAgICogSGFuZHkgZm9yIGNyaXNwIHBpeGVsIGFydCBhbmQgc3BlZWQgb24gbGVnYWN5IGRldmljZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSBvcHRpb25zLnJvdW5kUGl4ZWxzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSAweDAwMDAwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGFuIFtSLCBHLCBCXSBhcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gJyMwMDAwMDAnO1xuXG4gICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBvcHRpb25zLmJhY2tncm91bmRDb2xvciB8fCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3I7IC8vIHJ1biBiZyBjb2xvciBzZXR0ZXJcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB0cmFuc2Zvcm06e3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpfSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCByb290IG9iamVjdCB0aGF0IHRoZSByZW5kZXJlciB0cmllZCB0byByZW5kZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbn1cblxuLy8gY29uc3RydWN0b3JcblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeXN0ZW1SZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3lzdGVtUmVuZGVyZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZpbGwgaWYgbm90IHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3lzdGVtUmVuZGVyZXIjXG4gICAgICovXG4gICAgYmFja2dyb3VuZENvbG9yOlxuICAgIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9IHV0aWxzLmhleDJzdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHV0aWxzLmhleDJyZ2IodmFsLCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB2aWV3IHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy52aWV3LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0aGlzLnZpZXcuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5hdXRvUmVzaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgYW5kIG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgQ2FudmFzIERPTSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldykge1xuICAgIGlmIChyZW1vdmVWaWV3ICYmIHRoaXMudmlldy5wYXJlbnROb2RlKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy52aWV3KTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICB0aGlzLnZpZXcgPSBudWxsO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMDtcblxuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gbnVsbDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSBudWxsO1xufTtcbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgQ2FudmFzTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ0NhbnZhcycsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5DQU5WQVM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy52aWV3LmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogdGhpcy50cmFuc3BhcmVudCB9KTtcblxuICAgIC8qKlxuICAgICAqIEJvb2xlYW4gZmxhZyBjb250cm9sbGluZyBjYW52YXMgcmVmcmVzaC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIGEgQ2FudmFzTWFza01hbmFnZXIsIGhhbmRsZXMgbWFza2luZyB3aGVuIHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc01hc2tNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBuZXcgQ2FudmFzTWFza01hbmFnZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgcHJvcGVydHkgdXNlZCB0byBzZXQgdGhlIGNhbnZhcyBzbW9vdGhpbmcgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdpbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnd2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21vekltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnb0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21zSW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIHRoaXMuX21hcEJsZW5kTW9kZXMoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge1xuICAgICAgICB3b3JsZFRyYW5zZm9ybTogbmV3IG1hdGguTWF0cml4KCksXG4gICAgICAgIHdvcmxkQWxwaGE6IDFcbiAgICB9O1xuXG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihDYW52YXNSZW5kZXJlcik7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIHRoaXMgY2FudmFzIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IG9iamVjdC5wYXJlbnQ7XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBvYmplY3Q7XG5cbiAgICBvYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgb2JqZWN0LnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIHRoaXMuY29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF07XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMgJiYgdGhpcy52aWV3LnNjcmVlbmNhbnZhcylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGVhckJlZm9yZVJlbmRlcilcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy53aWR0aCAsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChvYmplY3QsIHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGlzLmVtaXQoJ3Bvc3RyZW5kZXInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpXG57XG4gICAgdGhpcy5kZXN0cm95UGx1Z2lucygpO1xuXG4gICAgLy8gY2FsbCB0aGUgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLnJlZnJlc2ggPSB0cnVlO1xuXG4gICAgdGhpcy5tYXNrTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG5cbiAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KVxue1xuICAgIHZhciB0ZW1wQ29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJDYW52YXModGhpcyk7XG4gICAgdGhpcy5jb250ZXh0ID0gdGVtcENvbnRleHQ7XG59O1xuXG4vKipcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXIjcmVzaXplXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAodywgaClcbntcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcywgdywgaCk7XG5cbiAgICAvL3Jlc2V0IHRoZSBzY2FsZSBtb2RlLi4gb2RkbHkgdGhpcyBzZWVtcyB0byBiZSByZXNldCB3aGVuIHRoZSBjYW52YXMgaXMgcmVzaXplZC5cbiAgICAvL3N1cmVseSBhIGJyb3dzZXIgYnVnPz8gTGV0IHBpeGkgZml4IHRoYXQgZm9yIHlvdS4uXG4gICAgaWYodGhpcy5zbW9vdGhQcm9wZXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dFt0aGlzLnNtb290aFByb3BlcnR5XSA9IChDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBNYXBzIFBpeGkgYmxlbmQgbW9kZXMgdG8gY2FudmFzIGJsZW5kIG1vZGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fbWFwQmxlbmRNb2RlcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmJsZW5kTW9kZXMpXG4gICAge1xuICAgICAgICB0aGlzLmJsZW5kTW9kZXMgPSB7fTtcblxuICAgICAgICBpZiAodXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdtdWx0aXBseSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc2NyZWVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdvdmVybGF5JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdkYXJrZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ2xpZ2h0ZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ2NvbG9yLWRvZGdlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdjb2xvci1idXJuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IQVJEX0xJR0hUXSAgICA9ICdoYXJkLWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb2Z0LWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdkaWZmZXJlbmNlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5FWENMVVNJT05dICAgICA9ICdleGNsdXNpb24nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ2h1ZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc2F0dXJhdGUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ2NvbG9yJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdsdW1pbm9zaXR5JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb29sIG5ldyBibGVuZCBtb2RlcyBpbiBjYW52YXMgJ2NvdWdoJyBpZSAnY291Z2gnXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TQVRVUkFUSU9OXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBjYW52YXNcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKi9cbmZ1bmN0aW9uIENhbnZhc0J1ZmZlcih3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBDYW52YXMgb2JqZWN0IHRoYXQgYmVsb25ncyB0byB0aGlzIENhbnZhc0J1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBBIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHdvLWRpbWVuc2lvbmFsIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn1cblxuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc0J1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzQnVmZmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYW52YXNCdWZmZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB2YWw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyBidWZmZXIgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNhbnZhc0J1ZmZlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENsZWFycyB0aGUgY2FudmFzIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIENhbnZhc0J1ZmZlciBjbGFzcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgY2FudmFzIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBjYW52YXMuXG4gKlxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlciB0byBkcmF3IHRoZSBwcmltaXRpdmUgZ3JhcGhpY3MgZGF0YS5cbiAqIEBzdGF0aWNcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xudmFyIENhbnZhc0dyYXBoaWNzID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0dyYXBoaWNzO1xuXG4vKlxuICogUmVuZGVycyBhIEdyYXBoaWNzIG9iamVjdCB0byBhIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBhY3R1YWwgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIDJkIGRyYXdpbmcgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIHdvcmxkQWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljc1RpbnQoZ3JhcGhpY3MpO1xuICAgICAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuX2ZpbGxUaW50O1xuICAgICAgICB2YXIgbGluZUNvbG9yID0gZGF0YS5fbGluZVRpbnQ7XG5cbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRPRE8gLSBuZWVkIHRvIGJlIFVuZGVmaW5lZCFcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsMCwyKk1hdGguUEkpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcblxuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJ4ID0gc2hhcGUueDtcbiAgICAgICAgICAgIHZhciByeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBzaGFwZS53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgcmFkaXVzID0gc2hhcGUucmFkaXVzO1xuXG4gICAgICAgICAgICB2YXIgbWF4UmFkaXVzID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyIHwgMDtcbiAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1cyA+IG1heFJhZGl1cyA/IG1heFJhZGl1cyA6IHJhZGl1cztcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGxDb2xvciB8fCBkYXRhLmZpbGxDb2xvciA9PT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3MgbWFza1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBtYXNrXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY29udGV4dCAyZCBtZXRob2Qgb2YgdGhlIGNhbnZhc1xuICovXG5DYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIGxlbiA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG5cbiAgICBpZiAobGVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludCBhcmUgdGhlIHNhbWUgY2xvc2UgdGhlIHBhdGggLSBtdWNoIG5lYXRlciA6KVxuICAgICAgICAgICAgaWYgKHBvaW50c1swXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gJiYgcG9pbnRzWzFdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5yZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuXG4gICAgICAgICAgICAvLyBlbGxpcHNlIGNvZGUgdGFrZW4gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG5cbiAgICAgICAgICAgIHZhciB3ID0gc2hhcGUud2lkdGggKiAyO1xuICAgICAgICAgICAgdmFyIGggPSBzaGFwZS5oZWlnaHQgKiAyO1xuXG4gICAgICAgICAgICB2YXIgeCA9IHNoYXBlLnggLSB3LzI7XG4gICAgICAgICAgICB2YXIgeSA9IHNoYXBlLnkgLSBoLzI7XG5cbiAgICAgICAgICAgIHZhciBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICAgICAgICAgICAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgIHhlID0geCArIHcsICAgICAgICAgICAvLyB4LWVuZFxuICAgICAgICAgICAgICAgIHllID0geSArIGgsICAgICAgICAgICAvLyB5LWVuZFxuICAgICAgICAgICAgICAgIHhtID0geCArIHcgLyAyLCAgICAgICAvLyB4LW1pZGRsZVxuICAgICAgICAgICAgICAgIHltID0geSArIGggLyAyOyAgICAgICAvLyB5LW1pZGRsZVxuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhlLCB5bSArIG95LCB4bSArIG94LCB5ZSwgeG0sIHllKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdGludCBvZiBhIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB0aGF0IHdpbGwgaGF2ZSBpdHMgdGludCB1cGRhdGVkXG4gKlxuICovXG5DYW52YXNHcmFwaGljcy51cGRhdGVHcmFwaGljc1RpbnQgPSBmdW5jdGlvbiAoZ3JhcGhpY3MpXG57XG4gICAgaWYgKGdyYXBoaWNzLnRpbnQgPT09IDB4RkZGRkZGICYmIGdyYXBoaWNzLl9wcmV2VGludCA9PT0gZ3JhcGhpY3MudGludClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGhpY3MuX3ByZXZUaW50ID0gZ3JhcGhpY3MudGludDtcblxuICAgIHZhciB0aW50UiA9IChncmFwaGljcy50aW50ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIHRpbnRHID0gKGdyYXBoaWNzLnRpbnQgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50QiA9IChncmFwaGljcy50aW50ICYgMHhGRikvIDI1NTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuZmlsbENvbG9yIHwgMDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEubGluZUNvbG9yIHwgMDtcblxuICAgICAgICAvKlxuICAgICAgICB2YXIgY29sb3JSID0gKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JHID0gKGZpbGxDb2xvciA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIHZhciBjb2xvckIgPSAoZmlsbENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBmaWxsQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcblxuICAgICAgICBjb2xvclIgPSAobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIGNvbG9yRyA9IChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckIgPSAobGluZUNvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBsaW5lQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcbiAgICAgICAgKi9cblxuICAgICAgICAvLyBzdXBlciBpbmxpbmUgY29zIGltIGFuIG9wdGltaXphdGlvbiBOQVpJIDopXG4gICAgICAgIGRhdGEuX2ZpbGxUaW50ID0gKCgoZmlsbENvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChmaWxsQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG4gICAgICAgIGRhdGEuX2xpbmVUaW50ID0gKCgobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChsaW5lQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG5cbiAgICB9XG59O1xuXG4iLCJ2YXIgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuL0NhbnZhc0dyYXBoaWNzJyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgdG8gaGFuZGxlIG1hc2tpbmcuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDYW52YXNNYXNrTWFuYWdlcigpXG57fVxuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzTWFza01hbmFnZXI7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgYWRkcyBpdCB0byB0aGUgY3VycmVudCBzdGFjayBvZiBtYXNrcy5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge29iamVjdH0gdGhlIG1hc2tEYXRhIHRoYXQgd2lsbCBiZSBwdXNoZWRcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhLCByZW5kZXJlcilcbntcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2F2ZSgpO1xuXG4gICAgdmFyIGNhY2hlQWxwaGEgPSBtYXNrRGF0YS5hbHBoYTtcbiAgICB2YXIgdHJhbnNmb3JtID0gbWFza0RhdGEud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICAvL1RPRE8gc3Vwb3J0IHNwcml0ZSBhbHBoYSBtYXNrcz8/XG4gICAgLy9sb3RzIG9mIGVmZm9ydCByZXF1aXJlZC4gSWYgZGVtYW5kIGlzIGdyZWF0IGVub3VnaC4uXG4gICAgaWYoIW1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sobWFza0RhdGEsIHJlbmRlcmVyLmNvbnRleHQpO1xuICAgICAgICByZW5kZXJlci5jb250ZXh0LmNsaXAoKTtcbiAgICB9XG5cbiAgICBtYXNrRGF0YS53b3JsZEFscGhhID0gY2FjaGVBbHBoYTtcbn07XG5cbi8qKlxuICogUmVzdG9yZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlIHRoZSBtYXNrIHdhcyBhcHBsaWVkLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIFNwcml0ZS9UZXh0dXJlIHRpbnRpbmcuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNUaW50ZXIgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzVGludGVyO1xuXG4vKipcbiAqIEJhc2ljYWxseSB0aGlzIG1ldGhvZCBqdXN0IG5lZWRzIGEgc3ByaXRlIGFuZCBhIGNvbG9yIGFuZCB0aW50cyB0aGUgc3ByaXRlIHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIHRpbnRlZCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUgPSBmdW5jdGlvbiAoc3ByaXRlLCBjb2xvcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHNwcml0ZS50ZXh0dXJlO1xuXG4gICAgY29sb3IgPSBDYW52YXNUaW50ZXIucm91bmRDb2xvcihjb2xvcik7XG5cbiAgICB2YXIgc3RyaW5nQ29sb3IgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG5cbiAgICB0ZXh0dXJlLnRpbnRDYWNoZSA9IHRleHR1cmUudGludENhY2hlIHx8IHt9O1xuXG4gICAgaWYgKHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl07XG4gICAgfVxuXG4gICAgIC8vIGNsb25lIHRleHR1cmUuLlxuICAgIHZhciBjYW52YXMgPSBDYW52YXNUaW50ZXIuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLy9DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCh0ZXh0dXJlLCBzdHJpbmdDb2xvciwgY2FudmFzKTtcbiAgICBDYW52YXNUaW50ZXIudGludE1ldGhvZCh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKTtcblxuICAgIGlmIChDYW52YXNUaW50ZXIuY29udmVydFRpbnRUb0ltYWdlKVxuICAgIHtcbiAgICAgICAgLy8gaXMgdGhpcyBiZXR0ZXI/XG4gICAgICAgIHZhciB0aW50SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgdGludEltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcblxuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSB0aW50SW1hZ2U7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSA9IGNhbnZhcztcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCBjb252ZXJ0aW5nIHRoZSB0ZXh0dXJlIHRvIGFuIGltYWdlIHRoZW4gd2UgbmVlZCB0byBsb3NlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhc1xuICAgICAgICBDYW52YXNUaW50ZXIuY2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ211bHRpcGx5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgPSBmdW5jdGlvbiAodGV4dHVyZSwgY29sb3IsIGNhbnZhcylcbntcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgIHZhciBjcm9wID0gdGV4dHVyZS5jcm9wLmNsb25lKCk7XG4gICAgY3JvcC54ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC55ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC53aWR0aCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AuaGVpZ2h0ICo9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXMud2lkdGggPSBjcm9wLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wLmhlaWdodDtcblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tYXRvcCc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ292ZXJsYXknIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhPdmVybGF5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgY3JvcC54LFxuICAgICAgICBjcm9wLnksXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodFxuICAgICk7XG5cbiAgICAvLyBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5Jztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgcGl4ZWwgcGVyIHBpeGVsLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuICAgIHZhciByID0gcmdiVmFsdWVzWzBdLCBnID0gcmdiVmFsdWVzWzFdLCBiID0gcmdiVmFsdWVzWzJdO1xuXG4gICAgdmFyIHBpeGVsRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIHZhciBwaXhlbHMgPSBwaXhlbERhdGEuZGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGl4ZWxzLmxlbmd0aDsgaSArPSA0KVxuICAgIHtcbiAgICAgICAgcGl4ZWxzW2krMF0gKj0gcjtcbiAgICAgICAgcGl4ZWxzW2krMV0gKj0gZztcbiAgICAgICAgcGl4ZWxzW2krMl0gKj0gYjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnB1dEltYWdlRGF0YShwaXhlbERhdGEsIDAsIDApO1xufTtcblxuLyoqXG4gKiBSb3VuZHMgdGhlIHNwZWNpZmllZCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gcm91bmQsIHNob3VsZCBiZSBhIGhleCBjb2xvclxuICovXG5DYW52YXNUaW50ZXIucm91bmRDb2xvciA9IGZ1bmN0aW9uIChjb2xvcilcbntcbiAgICB2YXIgc3RlcCA9IENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuXG4gICAgcmdiVmFsdWVzWzBdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzBdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMV0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMV0gLyBzdGVwKSAqIHN0ZXApO1xuICAgIHJnYlZhbHVlc1syXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1syXSAvIHN0ZXApICogc3RlcCk7XG5cbiAgICByZXR1cm4gdXRpbHMucmdiMmhleChyZ2JWYWx1ZXMpO1xufTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygc3RlcHMgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgY2FwIHdoZW4gcm91bmRpbmcgY29sb3JzLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhY2hlU3RlcHNQZXJDb2xvckNoYW5uZWwgPSA4O1xuXG4vKipcbiAqIFRpbnQgY2FjaGUgYm9vbGVhbiBmbGFnLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSA9IGZhbHNlO1xuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkLCBjb25zZXF1ZW50bHkgdGhlIGFiaWxpdHkgdG8gdGludCB1c2luZyB0aGUgbXVsdGlwbHkgbWV0aG9kLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID0gdXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpO1xuXG4vKipcbiAqIFRoZSB0aW50aW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKi9cbkNhbnZhc1RpbnRlci50aW50TWV0aG9kID0gQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID8gQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgOiAgQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWw7XG4iLCJ2YXIgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuXHR1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgVGV4dHVyZU1hbmFnZXIgPSBmdW5jdGlvbihnbClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIHRyYWNrIHRleHR1cmVzIGluIHRoZSByZW5kZXJlciBzbyB3ZSBjYW4gbm8gbG9uZ2VyIGxpc3RlbiB0byB0aGVtIG9uIGRlc3RydWN0aW9uLlxuXHR0aGlzLl9tYW5hZ2VkVGV4dHVyZXMgPSBbXTtcbiAgICB0aGlzLmdsVGV4dHVyZXMgPSB7fTtcblxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmdldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cbi8qKlxuICogVXBkYXRlcyBhbmQvb3IgQ3JlYXRlcyBhIFdlYkdMIHRleHR1cmUgZm9yIHRoZSByZW5kZXJlcidzIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB1cGRhdGVcbiAqL1xuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG5cdGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXS8vdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG5cbiAgICBpZiAoIWdsVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGdsVGV4dHVyZSA9IG5ldyBHTFRleHR1cmUoZ2wpO1xuICAgICAgICBnbFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHRydWVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbFRleHR1cmU7XG5cbiAgICAgICAvLyB0aGlzLmdsVGV4dHVyZXNbdGV4dHVyZS51aWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgIHRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub24oJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xuICAgIH1cblxuICAgIGdsVGV4dHVyZS51cGxvYWQodGV4dHVyZS5zb3VyY2UpO1xuICAgIFxuICAgIC8vVE9ETyBjaGVjayBpcyBwb3dlciBvZiB0d28uLlxuICAgIGdsVGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuXG4gICAgLy8gVE9ETyBjaGVjayBmb3Igc2NhbGluZyB0eXBlXG4gICAgZ2xUZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKTtcblxuICAgIHJldHVybiAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG59XG5cbi8qKlxuICogRGVsZXRlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byBkZXN0cm95XG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUsIF9za2lwUmVtb3ZlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0uZGVzdHJveSgpO1xuICAgICAgICB0ZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGVUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcblxuXG4gICAgICAgIGRlbGV0ZSB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdO1xuXG4gICAgICAgIGlmICghX3NraXBSZW1vdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzLmluZGV4T2YodGV4dHVyZSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLl9tYW5hZ2VkVGV4dHVyZXMsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24oKVxue1xuXHQvLyBlbXB0eSBhbGwgdGhlIG9sZCBnbCB0ZXh0dXJlcyBhcyB0aGV5IGFyZSB1c2VsZXNzIG5vd1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIGlmICh0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgLy8gZGVzdHJveSBtYW5hZ2VkIHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgdGhpcy5kZXN0cm95VGV4dHVyZSh0ZXh0dXJlLCB0cnVlKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFuYWdlZFRleHR1cmVzID0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlTWFuYWdlcjtcblxuIiwidmFyIFN5c3RlbVJlbmRlcmVyID0gcmVxdWlyZSgnLi4vU3lzdGVtUmVuZGVyZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL01hc2tNYW5hZ2VyJyksXG4gICAgU3RlbmNpbE1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyJyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIEJsZW5kTW9kZU1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIEZYQUFGaWx0ZXIgPSByZXF1aXJlKCcuL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi9UZXh0dXJlTWFuYWdlcicpLFxuICAgIGNyZWF0ZUNvbnRleHQgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5jcmVhdGVDb250ZXh0LFxuICAgIG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aSA9IHJlcXVpcmUoJy4vdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpJyksXG4gICAgbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgV2ViR0xSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgd2ViR0wgZW5hYmxlZCBjYW52YXMuIFRoaXMgcmVuZGVyZXJcbiAqIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wuIFRoaXMgUmVuZGVyIHdvcmtzIGJ5IGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgd2ViR0xCYXRjaHMuXG4gKiBTbyBubyBuZWVkIGZvciBTcHJpdGUgQmF0Y2hlcyBvciBTcHJpdGUgQ2xvdWRzLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgdmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD0wXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD0wXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcy4gSWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseSB0aGVuIEZYQUEgYW50aWFsaWFzaW5nIGlzIHVzZWRcbiAqIEBwYXJhbSBbb3B0aW9ucy5mb3JjZUZYQUE9ZmFsc2VdIHtib29sZWFufSBmb3JjZXMgRlhBQSBhbnRpYWxpYXNpbmcgdG8gYmUgdXNlZCBvdmVyIG5hdGl2ZS4gRlhBQSBpcyBmYXN0ZXIsIGJ1dCBtYXkgbm90IGFsd2F5cyBsb29rIGFzIGdyZWF0XG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLiBJZiB5b3Ugd2lzaCB0byBzZXQgdGhpcyB0byBmYWxzZSwgeW91ICptdXN0KiBzZXQgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHRvIGB0cnVlYC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWZcbiAqICAgICAgeW91IG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHQuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgU3lzdGVtUmVuZGVyZXIuY2FsbCh0aGlzLCAnV2ViR0wnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgcmVuZGVyZXIgYXMgYSBzdGFuZGFyZGlzZWQgY29uc3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0vL1xuICAgICAqXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQgPSB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHBhc3NlZCBpbiB0byBjcmVhdGUgYSBuZXcgd2ViZ2wgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0ge1xuICAgICAgICBhbHBoYTogdGhpcy50cmFuc3BhcmVudCxcbiAgICAgICAgYW50aWFsaWFzOiBvcHRpb25zLmFudGlhbGlhcyxcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnRyYW5zcGFyZW50ICYmIHRoaXMudHJhbnNwYXJlbnQgIT09ICdub3RNdWx0aXBsaWVkJyxcbiAgICAgICAgc3RlbmNpbDogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgIH07XG5cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhWzNdID0gdGhpcy50cmFuc3BhcmVudCA/IDAgOiAxO1xuXG4gICAgLyoqXG4gICAgICogRGVhbHMgd2l0aCBtYW5hZ2luZyB0aGUgc2hhZGVyIHByb2dyYW1zIGFuZCB0aGVpciBhdHRyaWJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG5ldyBTaGFkZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWFza3MgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IE1hc2tNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIgPSBuZXcgU3RlbmNpbE1hbmFnZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5GaWx0ZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgYmxlbmRNb2Rlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CbGVuZE1vZGVNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlciA9IG5ldyBCbGVuZE1vZGVNYW5hZ2VyKHRoaXMpO1xuXG4gICAgXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgT2JqZWN0UmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk9iamVjdFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbmV3IE9iamVjdFJlbmRlcmVyKHRoaXMpO1xuXG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBzbyBpdCBpcyByZWFkeSBmb3IgdGhlIG1hbmFnZXJzLlxuICAgIHRoaXMuZ2wgPSBjcmVhdGVDb250ZXh0KHRoaXMudmlldywgdGhpcy5fY29udGV4dE9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcblxuICAgIC8vIG1hcCBzb21lIHdlYkdMIGJsZW5kIGFuZCBkcmF3bW9kZXMuLlxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aShnbCk7XG4gICAgdGhpcy5kcmF3TW9kZXMgPSBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbClcblxuICAgIHRoaXMuX2FjdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldH1cbiAgICAgKi9cbiAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihXZWJHTFJlbmRlcmVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBXZWJHTCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuX2luaXRDb250ZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgLy8gY3JlYXRlIGEgdGV4dHVyZSBtYW5hZ2VyLi4uXG4gICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG5ldyBUZXh0dXJlTWFuYWdlcihnbCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIGRlZmF1bHQgcGl4aSBzZXR0aW5ncy4uXG4gICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcblxuXG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG51bGwsIHRoaXMucmVzb2x1dGlvbiwgdHJ1ZSk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LmNsZWFyQ29sb3IgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhO1xuICAgIFxuICAgIHRoaXMuYmluZFJlbmRlclRhcmdldCh0aGlzLnJvb3RSZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy5lbWl0KCdjb250ZXh0JywgZ2wpO1xuXG4gICAgLy8gc2V0dXAgdGhlIHdpZHRoL2hlaWdodCBwcm9wZXJ0aWVzIGFuZCBnbCB2aWV3cG9ydFxuICAgIHRoaXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsgICAgXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBpdHMgd2ViR0wgdmlld1xuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gdGhlIG9iamVjdCB0byBiZSByZW5kZXJlZFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdClcbntcbiAgICB0aGlzLmVtaXQoJ3ByZXJlbmRlcicpO1xuXG4gICAgLy8gbm8gcG9pbnQgcmVuZGVyaW5nIGlmIG91ciBjb250ZXh0IGhhcyBiZWVuIGJsb3duIHVwIVxuICAgIGlmICh0aGlzLmdsLmlzQ29udGV4dExvc3QoKSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBkaXNwbGF5T2JqZWN0O1xuXG4gICAgdmFyIGNhY2hlUGFyZW50ID0gZGlzcGxheU9iamVjdC5wYXJlbnQ7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgZGlzcGxheU9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICBkaXNwbGF5T2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIHRoaXMucm9vdFJlbmRlclRhcmdldCwgdGhpcy5jbGVhckJlZm9yZVJlbmRlcik7Ly90aGlzLnByb2plY3Rpb24pO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBEaXNwbGF5IE9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSBUaGUgcmVuZGVyIHRhcmdldCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgZGlzcGxheSBvYmplY3RcbiAqXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcmVuZGVyVGFyZ2V0LCBjbGVhcikvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblxuICAgIGlmKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIGZpbHRlciBtYW5hZ2VyXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnNldEZpbHRlclN0YWNrKCByZW5kZXJUYXJnZXQuZmlsdGVyU3RhY2sgKTtcblxuICAgIC8vIHJlbmRlciB0aGUgc2NlbmUhXG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJXZWJHTCh0aGlzKTtcblxuICAgIC8vIGZpbmlzaCB0aGUgY3VycmVudCByZW5kZXJlci4uXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXJlciB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSBvYmplY3RSZW5kZXJlciB7UElYSS5PYmplY3RSZW5kZXJlcn0gVGhlIG9iamVjdCByZW5kZXJlciB0byB1c2UuXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldE9iamVjdFJlbmRlcmVyID0gZnVuY3Rpb24gKG9iamVjdFJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRSZW5kZXJlciA9PT0gb2JqZWN0UmVuZGVyZXIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RvcCgpO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gb2JqZWN0UmVuZGVyZXI7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgd2ViR0wgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHdlYkdMIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHdlYkdMIHZpZXdcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSB0aGlzLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRvIHRoZSBvbmUgZ2l2ZW4gaW4gcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9IHRoZSBuZXcgcmVuZGVyIHRhcmdldFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5iaW5kUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICBpZihyZW5kZXJUYXJnZXQgIT09IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBpZih0aGlzLl9hY3RpdmVTaGFkZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gcmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuc2V0TWFza1N0YWNrKCByZW5kZXJUYXJnZXQuc3RlbmNpbE1hc2tTdGFjayApO1xuICAgIH1cbn1cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFNoYWRlciA9IGZ1bmN0aW9uIChzaGFkZXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgLy9UT0RPIGNhY2hlXG4gICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyICE9PSBzaGFkZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBzaGFkZXI7XG4gICAgICAgIHNoYWRlci5iaW5kKCk7XG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB9XG59XG5cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgbG9jYXRpb24pXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vVE9ETyB0ZXN0IHBlcmYgb2YgY2FjaGU/XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCAwO1xuXG4gICAgaWYodGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uICE9PSBsb2NhdGlvbikvL1xuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uID0gbG9jYXRpb25cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uICk7XG4gICAgfVxuXG4gICAgLy9UT0RPIC0gY2FuIHdlIGNhY2hlIHRoaXMgdGV4dHVyZSB0b28/XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7ICAgICAgXG4gICAgXG4gICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIGJpbmQgdGhlIHRleHR1cmUuLlxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXS5iaW5kKCk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogSGFuZGxlcyBhIGxvc3Qgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRMb3N0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgYSByZXN0b3JlZCB3ZWJnbCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9pbml0Q29udGV4dCgpO1xuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIucmVtb3ZlQWxsKCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciAoZXZlbnQgbGlzdGVuZXJzLCBzcHJpdGViYXRjaCwgZXRjLi4uKVxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIHJlbW92ZSBsaXN0ZW5lcnNcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuaGFuZGxlQ29udGV4dExvc3QpO1xuICAgIHRoaXMudmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkKTtcblxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIuZGVzdHJveUFsbCgpO1xuXG4gICAgLy8gY2FsbCBiYXNlIGRlc3Ryb3lcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHJlbW92ZVZpZXcpO1xuXG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgLy8gZGVzdHJveSB0aGUgbWFuYWdlcnNcbiAgICB0aGlzLnNoYWRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSBudWxsO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0gbnVsbDtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICB0aGlzLmdsID0gbnVsbDtcbn07XG5cbiIsInZhciBEZWZhdWx0U2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBQSVhJIGZpbHRlci4gQ3VycmVudGx5IG9ubHkgV2ViR0wgc3VwcG9ydHMgZmlsdGVycy5cbiAqIElmIHlvdSB3YW50IHRvIG1ha2UgYSBjdXN0b20gZmlsdGVyIHRoaXMgc2hvdWxkIGJlIHlvdXIgYmFzZSBjbGFzcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdmVydGV4U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIGZyYWdtZW50U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlIGFzIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gdW5pZm9ybXMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuaWZvcm1zIGZvciB0aGlzIGZpbHRlci5cbiAqL1xuZnVuY3Rpb24gQWJzdHJhY3RGaWx0ZXIodmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMpXG57XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBzaGFkZXJzXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVycyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4dHJhIHBhZGRpbmcgdGhhdCB0aGUgZmlsdGVyIG1pZ2h0IG5lZWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmlmb3JtcyBhcyBhbiBvYmplY3RcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29kZSBvZiB0aGUgdmVydGV4IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIGZyYW1lbnQgc2hhZGVyXG4gICAgICogQG1lbWJlciB7c3RyaW5nW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICAvL1RPRE8gYSByZW1pbmRlciAtIHdvdWxkIGJlIGNvb2wgdG8gaGF2ZSBsb3dlciByZXMgZmlsdGVycyBhcyB0aGlzIHdvdWxkIGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlLlxuXG4gICAgLy90eXBlb2YgZnJhZ21lbnRTcmMgPT09ICdzdHJpbmcnID8gZnJhZ21lbnRTcmMuc3BsaXQoJycpIDogKGZyYWdtZW50U3JjIHx8IFtdKTtcblxufVxuXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RGaWx0ZXI7XG5cbi8qKlxuICogR3JhYnMgYSBzaGFkZXIgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIHNoYWRlciBmcm9tXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5nZXRTaGFkZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXJzW2dsLmlkXTtcblxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gbmV3IERlZmF1bHRTaGFkZXIocmVuZGVyZXIuc2hhZGVyTWFuYWdlcixcbiAgICAgICAgICAgIHRoaXMudmVydGV4U3JjLFxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudFNyYyxcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNoYWRlcnNbZ2wuaWRdID0gc2hhZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8gY2xlYXIgdGhlIG91dHB1dFRhcmdldFxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xufTtcblxuLyoqXG4gKiBTeW5jcyBhIHVuaWZvcm0gYmV0d2VlbiB0aGUgY2xhc3Mgb2JqZWN0IGFuZCB0aGUgc2hhZGVycy5cbiAqXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5zaGFkZXJzLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyc1tpXS5zeW5jVW5pZm9ybSh1bmlmb3JtKTtcbiAgICB9XG59O1xuIiwidmFyIEFic3RyYWN0RmlsdGVyID0gcmVxdWlyZSgnLi9BYnN0cmFjdEZpbHRlcicpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqXG4gKiBCYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXG4gKiBtb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcbiAqIHVuc3VwcG9ydGVkIGJ5IFdlYkdMLlxuICpcbiAqIC0tXG4gKiBGcm9tOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKlxuICovXG5mdW5jdGlvbiBGWEFBRmlsdGVyKClcbntcbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG5cXG52b2lkIHRleGNvb3Jkcyh2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTlcsIG91dCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JTVywgb3V0IHZlYzIgdl9yZ2JTRSxcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjMiBpbnZlcnNlVlAgPSAxLjAgLyByZXNvbHV0aW9uLnh5O1xcbiAgICB2X3JnYk5XID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk5FID0gKGZyYWdDb29yZCArIHZlYzIoMS4wLCAtMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU1cgPSAoZnJhZ0Nvb3JkICsgdmVjMigtMS4wLCAxLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JTRSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiTSA9IHZlYzIoZnJhZ0Nvb3JkICogaW52ZXJzZVZQKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxuICAgdlJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xcblxcbiAgIC8vY29tcHV0ZSB0aGUgdGV4dHVyZSBjb29yZHMgYW5kIHNlbmQgdGhlbSB0byB2YXJ5aW5nc1xcbiAgIHRleGNvb3JkcyhhVGV4dHVyZUNvb3JkICogcmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgdl9yZ2JOVywgdl9yZ2JORSwgdl9yZ2JTVywgdl9yZ2JTRSwgdl9yZ2JNKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcblxcbi8qKlxcbkJhc2ljIEZYQUEgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGNvZGUgb24gZ2Vla3MzZC5jb20gd2l0aCB0aGVcXG5tb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcXG51bnN1cHBvcnRlZCBieSBXZWJHTC5cXG5cXG4tLVxcblxcbkZyb206XFxuaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcXG5cXG5Db3B5cmlnaHQgKGMpIDIwMTEgYnkgQXJtaW4gUm9uYWNoZXIuXFxuXFxuU29tZSByaWdodHMgcmVzZXJ2ZWQuXFxuXFxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxcbm1ldDpcXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXFxuICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcXG4gICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcXG4gICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXFxuXFxuICAgICogVGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3JcXG4gICAgICBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWNcXG4gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXFxuXFxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xcblxcXCJBUyBJU1xcXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXFxuQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcXG5PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcXG5TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXFxuVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXFxuKi9cXG5cXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01JTlxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvIDEyOC4wKVxcbiNlbmRpZlxcbiNpZm5kZWYgRlhBQV9SRURVQ0VfTVVMXFxuICAgICNkZWZpbmUgRlhBQV9SRURVQ0VfTVVMICAgKDEuMCAvIDguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfU1BBTl9NQVhcXG4gICAgI2RlZmluZSBGWEFBX1NQQU5fTUFYICAgICA4LjBcXG4jZW5kaWZcXG5cXG4vL29wdGltaXplZCB2ZXJzaW9uIGZvciBtb2JpbGUsIHdoZXJlIGRlcGVuZGVudFxcbi8vdGV4dHVyZSByZWFkcyBjYW4gYmUgYSBib3R0bGVuZWNrXFxudmVjNCBmeGFhKHNhbXBsZXIyRCB0ZXgsIHZlYzIgZnJhZ0Nvb3JkLCB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk5XLCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYlNXLCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjNCBjb2xvcjtcXG4gICAgbWVkaXVtcCB2ZWMyIGludmVyc2VWUCA9IHZlYzIoMS4wIC8gcmVzb2x1dGlvbi54LCAxLjAgLyByZXNvbHV0aW9uLnkpO1xcbiAgICB2ZWMzIHJnYk5XID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JOVykueHl6O1xcbiAgICB2ZWMzIHJnYk5FID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JORSkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTVykueHl6O1xcbiAgICB2ZWMzIHJnYlNFID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTRSkueHl6O1xcbiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JNKTtcXG4gICAgdmVjMyByZ2JNICA9IHRleENvbG9yLnh5ejtcXG4gICAgdmVjMyBsdW1hID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTtcXG4gICAgZmxvYXQgbHVtYU5XID0gZG90KHJnYk5XLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KHJnYk5FLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gZG90KHJnYlNXLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNFID0gZG90KHJnYlNFLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KHJnYk0sICBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU1pbiA9IG1pbihsdW1hTSwgbWluKG1pbihsdW1hTlcsIGx1bWFORSksIG1pbihsdW1hU1csIGx1bWFTRSkpKTtcXG4gICAgZmxvYXQgbHVtYU1heCA9IG1heChsdW1hTSwgbWF4KG1heChsdW1hTlcsIGx1bWFORSksIG1heChsdW1hU1csIGx1bWFTRSkpKTtcXG5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpcjtcXG4gICAgZGlyLnggPSAtKChsdW1hTlcgKyBsdW1hTkUpIC0gKGx1bWFTVyArIGx1bWFTRSkpO1xcbiAgICBkaXIueSA9ICAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuXFxuICAgIGZsb2F0IGRpclJlZHVjZSA9IG1heCgobHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFKSAqXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNSAqIEZYQUFfUkVEVUNFX01VTCksIEZYQUFfUkVEVUNFX01JTik7XFxuXFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvIChtaW4oYWJzKGRpci54KSwgYWJzKGRpci55KSkgKyBkaXJSZWR1Y2UpO1xcbiAgICBkaXIgPSBtaW4odmVjMihGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgIG1heCh2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBkaXIgKiByY3BEaXJNaW4pKSAqIGludmVyc2VWUDtcXG5cXG4gICAgdmVjMyByZ2JBID0gMC41ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDEuMCAvIDMuMCAtIDAuNSkpLnh5eiArXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMi4wIC8gMy4wIC0gMC41KSkueHl6KTtcXG4gICAgdmVjMyByZ2JCID0gcmdiQSAqIDAuNSArIDAuMjUgKiAoXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAtMC41KS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogMC41KS54eXopO1xcblxcbiAgICBmbG9hdCBsdW1hQiA9IGRvdChyZ2JCLCBsdW1hKTtcXG4gICAgaWYgKChsdW1hQiA8IGx1bWFNaW4pIHx8IChsdW1hQiA+IGx1bWFNYXgpKVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkEsIHRleENvbG9yLmEpO1xcbiAgICBlbHNlXFxuICAgICAgICBjb2xvciA9IHZlYzQocmdiQiwgdGV4Q29sb3IuYSk7XFxuICAgIHJldHVybiBjb2xvcjtcXG59XFxuXFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGZ4YWEodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKiB2UmVzb2x1dGlvbiwgdlJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxuXFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG59XG5cbkZYQUFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRlhBQUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGWEFBRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBGWEFBRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cbkZYQUFGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlciggcmVuZGVyZXIgKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBTcHJpdGVNYXNrRmlsdGVyIGNsYXNzXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSB0YXJnZXQgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZU1hc2tGaWx0ZXIoc3ByaXRlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgICB2TWFza0Nvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFza0Nvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgLy8gY2hlY2sgY2xpcCEgdGhpcyB3aWxsIHN0b3AgdGhlIG1hc2sgYmxlZWRpbmcgb3V0IGZyb20gdGhlIGVkZ2VzXFxuICAgIHZlYzIgdGV4dCA9IGFicyggdk1hc2tDb29yZCAtIDAuNSApO1xcbiAgICB0ZXh0ID0gc3RlcCgwLjUsIHRleHQpO1xcbiAgICBmbG9hdCBjbGlwID0gMS4wIC0gbWF4KHRleHQueSwgdGV4dC54KTtcXG4gICAgdmVjNCBvcmlnaW5hbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgIHZlYzQgbWFza3kgPSB0ZXh0dXJlMkQobWFzaywgdk1hc2tDb29yZCk7XFxuICAgIG9yaWdpbmFsICo9IChtYXNreS5yICogbWFza3kuYSAqIGFscGhhICogY2xpcCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG9yaWdpbmFsO1xcbn1cXG5cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbWFzazogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUuX3RleHR1cmUgfSxcbiAgICAgICAgICAgIGFscGhhOiAgICAgICAgICB7IHR5cGU6ICdmJywgdmFsdWU6IDF9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcbn1cblxuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0byByZXRyaWV2ZSB0aGUgZmlsdGVyIGZyb21cbiAqIEBwYXJhbSBpbnB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gb3V0cHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqL1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5tYXNrLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLl90ZXh0dXJlO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLndvcmxkQWxwaGE7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZU1hc2tGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgdXNlZCB0byBtb3ZlIHRoZSBkaXNwbGFjZW1lbnQgbWFwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdsTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBCbGVuZE1vZGVNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn1cblxuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZE1vZGVNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGVNYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMtdXAgdGhlIGdpdmVuIGJsZW5kTW9kZSBmcm9tIFdlYkdMJ3MgcG9pbnQgb2Ygdmlldy5cbiAqXG4gKiBAcGFyYW0gYmxlbmRNb2RlIHtudW1iZXJ9IHRoZSBibGVuZE1vZGUsIHNob3VsZCBiZSBhIFBpeGkgY29uc3QsIHN1Y2ggYXMgYFBJWEkuQkxFTkRfTU9ERVMuQUREYC4gU2VlXG4gKiAge0BsaW5rIFBJWEkuQkxFTkRfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLnNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChibGVuZE1vZGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblxuICAgIHZhciBtb2RlID0gdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuY3VycmVudEJsZW5kTW9kZV07XG4gICAgdGhpcy5yZW5kZXJlci5nbC5ibGVuZEZ1bmMobW9kZVswXSwgbW9kZVsxXSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgUXVhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL1F1YWQnKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXTtcblxuICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgIHJlbmRlclRhcmdldDpyZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LFxuICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgIGJvdW5kczpudWxsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldFtdfVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICAvLyBsaXN0ZW4gZm9yIGNvbnRleHQgYW5kIHVwZGF0ZSBuZWNlc3NhcnkgYnVmZmVyc1xuICAgIC8vVE9ETyBtYWtlIHRoaXMgZHluYW1pYyFcbiAgICAvL1RPRE8gdGVzdCB0aGlzIG91dCBieSBmb3JjZXMgcG93ZXIgb2YgdHdvP1xuICAgIHRoaXMudGV4dHVyZVNpemUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgcmVuZGVyZXIud2lkdGgsIHJlbmRlcmVyLmhlaWdodCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmcmFtZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBudWxsO1xufVxuXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbHRlck1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlck1hbmFnZXI7XG5cblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVQb29sLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucXVhZCA9IG5ldyBRdWFkKGdsKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcGFyYW0gYnVmZmVyIHtBcnJheUJ1ZmZlcn1cbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuc2V0RmlsdGVyU3RhY2sgPSBmdW5jdGlvbiAoIGZpbHRlclN0YWNrIClcbntcbiAgICB0aGlzLmZpbHRlclN0YWNrID0gZmlsdGVyU3RhY2s7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlciBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGZpbHRlcnMge1BJWEkuQWJzdHJhY3RGaWxlcltdfSB0aGUgZmlsdGVycyB0aGF0IHdpbGwgYmUgcHVzaGVkIHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFja1xuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5wdXNoRmlsdGVyID0gZnVuY3Rpb24gKHRhcmdldCwgZmlsdGVycylcbntcbiAgICAvLyBnZXQgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0Li5cbiAgICAvLyBUT0RPIHJlcGxhY2UgY2xvbmUgd2l0aCBhIGNvcHkgdG8gc2F2ZSBvYmplY3QgY3JlYXRpb25cbiAgICB2YXIgYm91bmRzID0gdGFyZ2V0LmZpbHRlckFyZWEgPyB0YXJnZXQuZmlsdGVyQXJlYS5jbG9uZSgpIDogdGFyZ2V0LmdldEJvdW5kcygpO1xuXG4gICAgLy9ib3VuZHMgPSBib3VuZHMuY2xvbmUoKTtcblxuICAgIC8vIHJvdW5kIG9mZiB0aGUgcmVjdGFuZ2xlIHRvIGdldCBhIG5pY2Ugc21vb29vb29vdGggZmlsdGVyIDopXG4gICAgYm91bmRzLnggPSBib3VuZHMueCB8IDA7XG4gICAgYm91bmRzLnkgPSBib3VuZHMueSB8IDA7XG4gICAgYm91bmRzLndpZHRoID0gYm91bmRzLndpZHRoIHwgMDtcbiAgICBib3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCB8IDA7XG5cblxuICAgIC8vIHBhZGRpbmchXG4gICAgdmFyIHBhZGRpbmcgPSBmaWx0ZXJzWzBdLnBhZGRpbmcgfCAwO1xuICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLnkgLT0gcGFkZGluZztcbiAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcblxuXG4gICAgaWYodGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vVE9ETyB0aGlzIHdpbGwgYnJlYWsgaWYgdGhlIHJlbmRlclRleHR1cmUgdHJhbnNmb3JtIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYSB0cmFuc2xhdGlvbi5cbiAgICAgICAgLy9XaWxsIG5lZWQgdG8gdGFrZSB0aGUgZnVsbCBtYXRyaXggdHJhbnNmb3JtIGludG8gYWNvdW50Li5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm07XG5cbiAgICAgICAgYm91bmRzLnggKz0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSArPSB0cmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdGhpcy5jYXBGaWx0ZXJBcmVhKCBib3VuZHMgKTtcblxuICAgICAgICBib3VuZHMueCAtPSB0cmFuc2Zvcm0udHg7XG4gICAgICAgIGJvdW5kcy55IC09IHRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG4gICAgfVxuXG4gICAgaWYoYm91bmRzLndpZHRoID4gMCAmJiBib3VuZHMuaGVpZ2h0ID4gMClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gYm91bmRzO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBjbGVhciB0aGUgdGV4dHVyZS4uXG4gICAgICAgIHRleHR1cmUuY2xlYXIoKTtcblxuICAgICAgICAvLyBUT0RPIGdldCByaWQgb2Ygb2JqZWN0IGNyZWF0aW9uIVxuICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OiB0ZXh0dXJlLFxuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJzXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIHB1c2ggc29tdGhpbmcgb24gdG8gdGhlIHN0YWNrIHRoYXQgaXMgZW1wdHlcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucG9wRmlsdGVyID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2sucG9wKCk7XG4gICAgdmFyIHByZXZpb3VzRmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2tbdGhpcy5maWx0ZXJTdGFjay5sZW5ndGgtMV07XG5cbiAgICB2YXIgaW5wdXQgPSBmaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIGlmIHRoZSByZW5kZXJUYXJnZXQgaXMgbnVsbCB0aGVuIHdlIGRvbid0IGFwcGx5IHRoZSBmaWx0ZXIgYXMgaXRzIG9mZnNjcmVlblxuICAgIGlmKCFmaWx0ZXJEYXRhLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gcHJldmlvdXNGaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIHVzZSBwcm9ncmFtXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpbnB1dC5mcmFtZTtcblxuICAgIHRoaXMucXVhZC5tYXAodGhpcy50ZXh0dXJlU2l6ZSwgaW5wdXQuZnJhbWUpO1xuXG5cbiAgICAvLyBUT0RPLi4gdGhpcyBwcm9iYWJseSBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBmaWx0ZXJzID0gZmlsdGVyRGF0YS5maWx0ZXI7XG5cbiAgICAvLyBhc3N1bWluZyBhbGwgZmlsdGVycyBmb2xsb3cgdGhlIGNvcnJlY3QgZm9ybWF0Pz9cbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgbm9ybWFsIGJsZW5kbW9kZSFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKENPTlNULkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDEpXG4gICAge1xuICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICBpZiAoZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJzWzBdLmFwcGx5RmlsdGVyKCB0aGlzLnJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0ICk7XG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBpbnB1dCApO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBmbGlwVGV4dHVyZSA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcFRleHR1cmUgPSB0aGlzLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGZpbHRlcnNbaV07XG5cbiAgICAgICAgICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSB0aGVuIHNldHRpbmcgdGhpcyBlYWNoIHRpbWU/XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlci5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIGZsb3BUZXh0dXJlICk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gZmxpcFRleHR1cmU7XG4gICAgICAgICAgICBmbGlwVGV4dHVyZSA9IGZsb3BUZXh0dXJlO1xuICAgICAgICAgICAgZmxvcFRleHR1cmUgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aC0xXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIG91dHB1dCApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBmbGlwVGV4dHVyZSApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxvcFRleHR1cmUgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyRGF0YS5maWx0ZXI7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgUmVuZGVyVGFyZ2V0XG4gKiBAcmV0dXJuIHtSZW5kZXJUYXJnZXR9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICggY2xlYXIgKVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSB0aGlzLnRleHR1cmVQb29sLnBvcCgpIHx8IG5ldyBSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJlci5nbCwgdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQsIENPTlNULlNDQUxFX01PREVTLkxJTkVBUiwgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uICogQ09OU1QuRklMVEVSX1JFU09MVVRJT04pO1xuICAgIHJlbmRlclRhcmdldC5mcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJUYXJnZXQ7XG59O1xuXG4vKlxuICogUmV0dXJucyBhIFJlbmRlclRhcmdldCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UmVuZGVyVGFyZ2V0fSBUaGUgUmVuZGVyVGFyZ2V0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnJldHVyblJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5wdXNoKCByZW5kZXJUYXJnZXQgKTtcbn07XG5cbi8qXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBzaGFkZXIge1NoYWRlcn0gVGhlIHNoYWRlciB0byB1cGxvYWRcbiAqIEBwYXJhbSBpbnB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAoc2hhZGVyLCBpbnB1dFRhcmdldCwgb3V0cHV0VGFyZ2V0LCBjbGVhcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQob3V0cHV0VGFyZ2V0KTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIG91dHB1dFRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2hhZGVyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBDYW4gdGhpcyBiZSBjYWNoZWQgYW5kIG5vdCBgdG9BcnJheWBlZCBlYWNoIGZyYW1lP1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcblxuICAgIC8vVE9ETyBjYW4gdGhpcyBiZSBvcHRpbWlzZWQ/XG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuLypcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMiAqIDQgKiA0KTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuKi9cblxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGlucHV0VGFyZ2V0LnRleHR1cmUpO1xuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIG1hcHBlZCBtYXRyaXhcbiAqIEBwYXJhbSBmaWx0ZXJBcmVhIHtSZWN0YW5nbGV9IFRoZSBmaWx0ZXIgYXJlYVxuICogQHBhcmFtIHNwcml0ZSB7U3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICogQHBhcmFtIG91dHB1dE1hdHJpeCB7TWF0cml4fSBAYWx2aW5cbiAqL1xuLy8gVE9ETyBwbGF5aW5nIGFyb3VuZCBoZXJlLi4gdGhpcyBpcyB0ZW1wb3JhcnkgLSAod2lsbCBlbmQgdXAgaW4gdGhlIHNoYWRlcilcbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeCA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhLCBzcHJpdGUsIG91dHB1dE1hdHJpeClcbntcbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBzcHJpdGUud29ybGRUcmFuc2Zvcm0uY29weShtYXRoLk1hdHJpeC5URU1QX01BVFJJWCksXG4gICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIHZhciBtYXBwZWRNYXRyaXggPSBvdXRwdXRNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIC8vIHNjYWxlLi5cbiAgICB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICBtYXBwZWRNYXRyaXgudHJhbnNsYXRlKGZpbHRlckFyZWEueCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIGZpbHRlckFyZWEueSAvIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0ICk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIHJhdGlvKTtcblxuICAgIHZhciB0cmFuc2xhdGVTY2FsZVggPSAodGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAvIHRleHR1cmUud2lkdGgpO1xuICAgIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0ZXh0dXJlLmhlaWdodCk7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS50eCAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuICAgIHdvcmxkVHJhbnNmb3JtLnR5IC89IHRleHR1cmUud2lkdGggKiB0cmFuc2xhdGVTY2FsZVg7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIG1hcHBlZE1hdHJpeC5wcmVwZW5kKHdvcmxkVHJhbnNmb3JtKTtcblxuICAgIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIG1hcHBlZE1hdHJpeC5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShzcHJpdGUuYW5jaG9yLngsIHNwcml0ZS5hbmNob3IueSk7XG5cbiAgICByZXR1cm4gbWFwcGVkTWF0cml4O1xuXG4gICAgLy8gS2VlcGluZyB0aGUgb3JnaW5hbCBhcyBhIHJlbWluZGVyIHRvIG1lIG9uIGhvdyB0aGlzIHdvcmtzIVxuICAgIC8vXG4gICAgLy8gdmFyIG0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuICAgIC8vIC8vIHNjYWxlLi5cbiAgICAvLyB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICAvLyBtLnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCk7XG5cblxuICAgIC8vIG0uc2NhbGUoMSAsIHJhdGlvKTtcblxuXG4gICAgLy8gdmFyIHRyYW5zZm9ybSA9IHd0LmNsb25lKCk7XG5cbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyA2MjApO1xuICAgIC8vIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyAzODApO1xuXG4gICAgLy8gdHJhbnNmb3JtLnR4IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICAvLyB0cmFuc2Zvcm0udHkgLz0gNjIwICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgLy8gdHJhbnNmb3JtLmludmVydCgpO1xuXG4gICAgLy8gdHJhbnNmb3JtLmFwcGVuZChtKTtcblxuICAgIC8vIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIC8vIHRyYW5zZm9ybS5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgLy8gcmV0dXJuIHRyYW5zZm9ybTtcbn07XG5cbi8qXG4gKiBDb25zdHJhaW5zIHRoZSBmaWx0ZXIgYXJlYSB0byB0aGUgdGV4dHVyZSBzaXplXG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWEgd2Ugd2FudCB0byBjYXBcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY2FwRmlsdGVyQXJlYSA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhKVxue1xuICAgIGlmIChmaWx0ZXJBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCArPSBmaWx0ZXJBcmVhLng7XG4gICAgICAgIGZpbHRlckFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlckFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLmhlaWdodCArPSBmaWx0ZXJBcmVhLnk7XG4gICAgICAgIGZpbHRlckFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnggKyBmaWx0ZXJBcmVhLndpZHRoID4gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLndpZHRoID0gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAtIGZpbHRlckFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGZpbHRlckFyZWEueSArIGZpbHRlckFyZWEuaGVpZ2h0ID4gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAtIGZpbHRlckFyZWEueTtcbiAgICB9XG59O1xuXG4vKlxuICogUmVzaXplcyBhbGwgdGhlIHJlbmRlciB0YXJnZXRzIGluIHRoZSBwb29sXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMudGV4dHVyZVNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZVBvb2xbaV0ucmVzaXplKCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgZmlsdGVyIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGZpbHRlciBzdGFjay5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucXVhZC5kZXN0cm95KCk7XG4gICAgXG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG4gICAgXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IG51bGw7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGV4dHVyZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVQb29sID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBBbHBoYU1hc2tGaWx0ZXIgPSByZXF1aXJlKCcuLi9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuc3RlbmNpbFN0YWNrID0gW107XG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ID0gMDtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbCA9IFtdO1xufVxuXG5NYXNrTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFNwcml0ZU1hc2sodGFyZ2V0LCBtYXNrRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IG1hc2sgZnJvbSB0aGUgbWFzayBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIGlmIChtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnBvcFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB2YXIgYWxwaGFNYXNrRmlsdGVyID0gdGhpcy5hbHBoYU1hc2tQb29sLnBvcCgpO1xuXG4gICAgaWYgKCFhbHBoYU1hc2tGaWx0ZXIpXG4gICAge1xuICAgICAgICBhbHBoYU1hc2tGaWx0ZXIgPSBbbmV3IEFscGhhTWFza0ZpbHRlcihtYXNrRGF0YSldO1xuICAgIH1cblxuICAgIGFscGhhTWFza0ZpbHRlclswXS5tYXNrU3ByaXRlID0gbWFza0RhdGE7XG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGFyZ2V0LCBhbHBoYU1hc2tGaWx0ZXIpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBmaWx0ZXJzID0gdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgdGhpcy5hbHBoYU1hc2tQb29sLnB1c2goZmlsdGVycyk7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoTWFzayhtYXNrRGF0YSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcE1hc2sobWFza0RhdGEpO1xufTtcblxuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpLFxuICAgIENvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXInKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTaGFkZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heEF0dGlicyA9IDEwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXhBdHRpYnM7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YWNrID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcblxuLy8gICAgdGhpcy5pbml0UGx1Z2lucygpO1xufVxuXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hbmFnZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oU2hhZGVyTWFuYWdlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyTWFuYWdlcjtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRyaWJ1dGUgY29ycmVjdGx5IGFzIHRoaXMgdGVuZHMgdG8gdmFyeVxuICAgIHRoaXMubWF4QXR0aWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVE9ETyAtIFdoeSBhcmUgdGhlc2Ugbm90IHBsdWdpbnM/IFdlIGNhbid0IGRlY291cGxlIHByaW1pdGl2ZXMgdW5sZXNzIHRoZXkgYXJlLi4uLlxuICAgIHRoaXMuZGVmYXVsdFNoYWRlciA9IG5ldyBUZXh0dXJlU2hhZGVyKHRoaXMpO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBuZXcgQ29tcGxleFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogVGFrZXMgdGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gaW4gcGFyYW1ldGVycyBhbmQgdXBsb2FkcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJzIHthbnlbXX0gYXR0cmlic1xuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRBdHRyaWJzID0gZnVuY3Rpb24gKGF0dHJpYnMpXG57XG4gICAgLy8gcmVzZXQgdGVtcCBzdGF0ZVxuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMudGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yICh2YXIgYSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbYXR0cmlic1thXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYlN0YXRlW2ldICE9PSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgc2hhZGVyLlxuICpcbiAqIEBwYXJhbSBzaGFkZXIge1BJWEkuU2hhZGVyfSB0aGUgc2hhZGVyIHRvIHVwbG9hZFxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKVxue1xuICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5fY3VycmVudElkID09PSBzaGFkZXIudWlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IHNoYWRlci51aWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBzaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmdsLnVzZVByb2dyYW0oc2hhZGVyLnByb2dyYW0pO1xuICAgIHRoaXMuc2V0QXR0cmlicyhzaGFkZXIuYXR0cmlidXRlcyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBvYmplY3QuXG4gKlxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLmRlc3Ryb3koKTtcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBudWxsO1xufTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFza01hbmFnZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG51bGw7XG59XG5cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBtYXNrIHN0YWNrIHRoYXQgaXMgdXNlZCBieSB0aGlzIG1hbmFnZXIuXG4gKlxuICogQHBhcmFtIHN0ZW5jaWxNYXNrU3RhY2sge1BJWEkuU3RlbmNpbE1hc2tTdGFja30gVGhlIG1hc2sgc3RhY2tcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuc2V0TWFza1N0YWNrID0gZnVuY3Rpb24gKCBzdGVuY2lsTWFza1N0YWNrIClcbntcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBzdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIGlmIChzdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suIEBhbHZpblxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hdHRhY2hTdGVuY2lsQnVmZmVyKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBzbXMgPSB0aGlzLnN0ZW5jaWxNYXNrU3RhY2s7XG5cbiAgICB0aGlzLmJpbmRHcmFwaGljcyhncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xuICAgICAgICBzbXMucmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIHNtcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wdXNoKHdlYkdMRGF0YSk7XG5cbiAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgLy8gZHJhdyB0aGUgdHJpYW5nbGUgc3RyaXAhXG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IGEgcXVhZCB0byBpbmNyZW1lbnQuLlxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cbiAgICBzbXMuY291bnQrKztcbn07XG5cbi8qKlxuICogVE9ETyB0aGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIVxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5iaW5kR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICAvL2lmICh0aGlzLl9jdXJyZW50R3JhcGhpY3MgPT09IGdyYXBoaWNzKXJldHVybjtcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGJpbmQgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgdmFyIHNoYWRlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICAvKlxuICAgICAgICBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMuY29sb3IuX2xvY2F0aW9uLCB3ZWJHTERhdGEuY29sb3IpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDIsIDApO1xuXG4gICAgICAgIC8vIG5vdyBkbyB0aGUgcmVzdC4uXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICovXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmFjdGl2YXRlUHJpbWl0aXZlU2hhZGVyKCk7XG4vLyAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnByaW1pdGl2ZVNoYWRlcjtcbiAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cblxuICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4vLyAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG5cbiAgICAgIC8qICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTFmKHNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEpO1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCA0LCBnbC5GTE9BVCwgZmFsc2UsNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTsqL1xuICAgIH1cbn07XG5cbi8qKlxuICogVE9ETyBAYWx2aW5cbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTdGVuY2lsID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wb3AoKTtcblxuICAgIHNtcy5jb3VudC0tO1xuXG4gICAgaWYgKHNtcy5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgLy8gdGhlIHN0YWNrIGlzIGVtcHR5IVxuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICAgICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuXG4gICAgICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSAobGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOVkVSVCk7XG5cbiAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50ICs9IDI7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAvLyAgY29uc29sZS5sb2coXCI8PD4+XCIpXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcblxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCksIDB4RkYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5LRUVQKTtcblxuXG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgbWFzayBzdGFjay5cbiAqXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjayA9IG51bGw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119IFRoZSBtYXNrIGRhdGEgc3RydWN0dXJlIHRvIHVzZVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgXG4gICAgLy9UT0RPIEZJWFxuICAgIGlmIChtYXNrRGF0YS5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy51cGRhdGVHcmFwaGljcyhtYXNrRGF0YSwgdGhpcy5yZW5kZXJlci5nbCk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119XG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuXG4gICAgdGhpcy5wb3BTdGVuY2lsKG1hc2tEYXRhLCBtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YVswXSk7XG59O1xuXG4iLCIvKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gV2ViR0xNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMucmVuZGVyZXIub24oJ2NvbnRleHQnLCB0aGlzLm9uQ29udGV4dENoYW5nZSwgdGhpcyk7XG59XG5cbldlYkdMTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFuYWdlcjtcblxuLyoqXG4gKiBHZW5lcmljIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXHQvLyBkbyBzb21lIGNvZGVzIGluaXQhXG59O1xuXG4vKipcbiAqIEdlbmVyaWMgZGVzdHJveSBtZXRob2RzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICovXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVuZGVyZXIub2ZmKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IGNvbXBsZXggcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBDb21wbGV4UHJpbWl0aXZlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gdmVjNChjb2xvciAqIGFscGhhICogdGludCwgYWxwaGEpOycsLy9cIiAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdGludDogICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwgMCwgMF0gfSxcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgY29sb3I6ICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwwLDBdIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYUNvbG9yOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCYXNlIHNoYWRlciBjbGFzcyBmb3IgUElYSSBtYW5hZ2VkIHNoYWRlcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFt1bmlmb3Jtc10ge29iamVjdH0gVW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxuICogQHBhcmFtIFthdHRyaWJ1dGVzXSB7b2JqZWN0fSBBdHRyaWJ1dGVzIGZvciB0aGlzIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKVxue1xuICAgIGlmICghdmVydGV4U3JjIHx8ICFmcmFnbWVudFNyYylcbiAgICB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpeGkuanMgRXJyb3IuIFNoYWRlciByZXF1aXJlcyB2ZXJ0ZXhTcmMgYW5kIGZyYWdtZW50U3JjJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmdsID0gc2hhZGVyTWFuYWdlci5yZW5kZXJlci5nbDtcblxuICAgIC8vVE9ETyBtYXliZSB3ZSBzaG91bGQgcGFzcyByZW5kZXJlciByYXRoZXIgdGhhbiBzaGFkZXIgbWFuZ2VyPz8gZm9vZCBmb3IgdGhvdWdodC4uXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyID0gc2hhZGVyTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBwcm9ncmFtLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xQcm9ncmFtfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF0dHJpYnV0ZXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRleHR1cmUgY291bnRlclxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYztcblxuICAgIHRoaXMuaW5pdCgpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc2hhZGVyIGFuZCB1c2VzIGl0XG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29tcGlsZSgpO1xuXG4gICAgdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLnVuaWZvcm1zKSk7XG4gICAgdGhpcy5jYWNoZUF0dHJpYnV0ZUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpKTtcbn07XG5cbi8qKlxuICogQ2FjaGVzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHVuaWZvcm0gZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSB1bmlmb3JtcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyA9IGZ1bmN0aW9uIChrZXlzKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMudW5pZm9ybXNba2V5c1tpXV0uX2xvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBrZXlzW2ldKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSBhdHRyaWJ1dGVzIHRvIGNhY2hlXG4gKi9cblNoYWRlci5wcm90b3R5cGUuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNba2V5c1tpXV0gPSB0aGlzLmdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4uLlxuXG4gICAgLy8gQmVnaW4gd29yc3QgaGFjayBldmEgLy9cblxuICAgIC8vIFdIWT8/PyBPTkxZIG9uIG15IGNocm9tZSBwaXhlbCB0aGUgbGluZSBhYm92ZSByZXR1cm5zIC0xIHdoZW4gdXNpbmcgZmlsdGVycz9cbiAgICAvLyBtYXliZSBpdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdsIGNvbnRleHQuXG4gICAgLy8gSSdtIGNvbnZpbmNlZCB0aGlzIGlzIGEgYnVnIGluIHRoZSBjaHJvbWUgYnJvd3NlciBhcyB0aGVyZSBpcyBOTyByZWFzb24gd2h5IHRoaXMgc2hvdWxkIGJlIHJldHVybmluZyAtMSBlc3BlY2lhbGx5IGFzIGl0IG9ubHkgbWFuaWZlc3RzIG9uIG15IGNocm9tZSBwaXhlbFxuICAgIC8vIElmIHRoZXJlcyBhbnkgd2ViR0wgcGVvcGxlIHRoYXQga25vdyB3aHkgY291bGQgaGFwcGVuIHBsZWFzZSBoZWxwIDopXG4gICAgLy8gaWYgKHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPT09IC0xKXtcbiAgICAvLyAgICAgdGhpcy5hdHRyaWJ1dGVzLmFDb2xvciA9IDI7XG4gICAgLy8gfVxuXG4gICAgLy8gRW5kIHdvcnN0IGhhY2sgZXZhIC8vXG59O1xuXG4vKipcbiAqIEF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZCBjcmVhdGVzIHRoZSBwcm9ncmFtLlxuICpcbiAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX1cbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIGdsVmVydFNoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5WRVJURVhfU0hBREVSLCB0aGlzLnZlcnRleFNyYyk7XG4gICAgdmFyIGdsRnJhZ1NoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuZnJhZ21lbnRTcmMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xGcmFnU2hhZGVyKTtcbiAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcblxuICAgIC8vIGlmIGxpbmtpbmcgZmFpbHMsIHRoZW4gbG9nIGFuZCBjbGVhbnVwXG4gICAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BpeGkuanMgRXJyb3I6IENvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlci4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuVkFMSURBVEVfU1RBVFVTJywgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuZ2V0RXJyb3IoKScsIGdsLmdldEVycm9yKCkpO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcHJvZ3JhbSBpbmZvIGxvZywgbG9nIGl0XG4gICAgICAgIGlmIChnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSAhPT0gJycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBXYXJuaW5nOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpJywgZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgcHJvZ3JhbSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgc29tZSBzaGFkZXJzXG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsVmVydFNoYWRlcik7XG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsRnJhZ1NoYWRlcik7XG5cbiAgICByZXR1cm4gKHRoaXMucHJvZ3JhbSA9IHByb2dyYW0pO1xufTtcblxuLyoqXG4qIEFkZHMgYSBuZXcgdW5pZm9ybVxuKlxuKiBAcGFyYW0gdW5pZm9ybSB7b2JqZWN0fSB0aGUgbmV3IHVuaWZvcm0gdG8gYXR0YWNoXG4qL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBsb2NhdGlvbiA9IHVuaWZvcm0uX2xvY2F0aW9uLFxuICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWUsXG4gICAgICAgIGdsID0gdGhpcy5nbCxcbiAgICAgICAgaSwgaWw7XG5cbiAgICBzd2l0Y2ggKHVuaWZvcm0udHlwZSlcbiAgICB7XG4gICAgICAgIGNhc2UgJ2InOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlID8gMSA6IDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGludCB2YWx1ZVxuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBzaW5nbGUgZmxvYXQgdmFsdWVcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDIpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoMykgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoNCkgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzRmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSAyRCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjInOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgM0QgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YzJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDREIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2NCc6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzFmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzRmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTInOlxuICAgICAgICBjYXNlICdtYXQyJzpcbiAgICAgICAgY2FzZSAnTWF0cml4MmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICBjYXNlICdtYXQzJzpcbiAgICAgICAgY2FzZSAnTWF0cml4M2Z2JzpcblxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICdtNCc6XG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICBjYXNlICdNYXRyaXg0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgQ29sb3IgVmFsdWVcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGludGVnZXJzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIChKUyBvciB0eXBlZCBhcnJheSlcbiAgICAgICAgY2FzZSAnZnYxJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDJEIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjJ2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDIgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDJdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMiArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAzRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yzdic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgzICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMyArIDJdICAgPSB2YWx1ZVtpXS56O1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHVuaWZvcm0uX2FycmF5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDREIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjR2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDRdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgMl0gICA9IHZhbHVlW2ldLno7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAzXSAgID0gdmFsdWVbaV0udztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBQSVhJLlRleHR1cmVcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgIGNhc2UgJ3NhbXBsZXIyRCc6XG5cbiAgICAgICAgICAgIGlmICghdW5pZm9ybS52YWx1ZSB8fCAhdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFjdGl2YXRlIHRoaXMgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0aGlzLnRleHR1cmVDb3VudF0pO1xuXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgICAgICAgICBpZiAoIXRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2FtcGxlcjJEKHVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSB0ZXh0dXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb25lLi5cbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gICAgICAgICAgICAvLyBzZXQgdW5pZm9ybSB0byB0ZXh0dXJlIGluZGV4XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkodW5pZm9ybS5fbG9jYXRpb24sIHRoaXMudGV4dHVyZUNvdW50KTtcblxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IG5leHQgdGV4dHVyZSBpZFxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBTaGFkZXIgV2FybmluZzogVW5rbm93biB1bmlmb3JtIHR5cGU6ICcgKyB1bmlmb3JtLnR5cGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnVuaWZvcm1zKVxuICAgIHtcbiAgICAgICAgdGhpcy5zeW5jVW5pZm9ybSh0aGlzLnVuaWZvcm1zW2tleV0pO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJbml0aWFsaXNlcyBhIFNhbXBsZXIyRCB1bmlmb3JtICh3aGljaCBtYXkgb25seSBiZSBhdmFpbGFibGUgbGF0ZXIgb24gYWZ0ZXIgaW5pdFVuaWZvcm1zIG9uY2UgdGhlIHRleHR1cmUgaGFzIGxvYWRlZClcbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuaW5pdFNhbXBsZXIyRCA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGlmICh1bmlmb3JtLnRleHR1cmVEYXRhKVxuICAgIHtcblxuICAgICAgICAvL1RPRE8gbW92ZSB0aGlzLi4uXG4gICAgICAgIHZhciBkYXRhID0gdW5pZm9ybS50ZXh0dXJlRGF0YTtcblxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG5cbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGxpZWRBbHBoYSk7XG4gICAgICAgIC8vIEdMVGV4dHVyZSA9IG1hZyBsaW5lYXIsIG1pbiBsaW5lYXJfbWlwbWFwX2xpbmVhciwgd3JhcCByZXBlYXQgKyBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgLy8gR0xUZXh0dXJlTGluZWFyID0gbWFnL21pbiBsaW5lYXIsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdFJlcGVhdCA9IG1hZy9taW4gTkVBUkVTVCwgd3JhcCByZXBlYXRcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdCA9IG1hZy9taW4gbmVhcmVzdCwgd3JhcCBjbGFtcFxuICAgICAgICAvLyBBdWRpb1RleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDUxMiwgaGVpZ2h0IDIsIGJvcmRlciAwXG4gICAgICAgIC8vIEtleVRleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDI1NiwgaGVpZ2h0IDIsIGJvcmRlciAwXG5cbiAgICAgICAgLy8gIG1hZ0ZpbHRlciBjYW4gYmU6IGdsLkxJTkVBUiwgZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgb3IgZ2wuTkVBUkVTVFxuICAgICAgICAvLyAgd3JhcFMvVCBjYW4gYmU6IGdsLkNMQU1QX1RPX0VER0Ugb3IgZ2wuUkVQRUFUXG5cbiAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBkYXRhLmx1bWluYW5jZSA/IGdsLkxVTUlOQU5DRSA6IGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRleHR1cmUuc291cmNlKTtcblxuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZGF0YS5tYWdGaWx0ZXIgPyBkYXRhLm1hZ0ZpbHRlciA6IGdsLkxJTkVBUiApO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFICk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZGF0YS53cmFwVCA/IGRhdGEud3JhcFQgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5zaGFkZXJNYW5hZ2VyLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgc2hhZGVyLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmdsLmRlbGV0ZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgIHRoaXMudW5pZm9ybXMgPSBudWxsO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleFNyYyA9IG51bGw7XG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IG51bGw7XG59O1xuXG5TaGFkZXIucHJvdG90eXBlLl9nbENvbXBpbGUgPSBmdW5jdGlvbiAodHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIHRoaXMuZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc3JjKTtcbiAgICB0aGlzLmdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghdGhpcy5nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCB0aGlzLmdsLkNPTVBJTEVfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIGN1c3RvbVVuaWZvcm1zLCBjdXN0b21BdHRyaWJ1dGVzKVxue1xuICAgIHZhciB1bmlmb3JtcyA9IHtcblxuICAgICAgICB1U2FtcGxlcjogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiAwIH0sXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6ICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDFdKSB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21Vbmlmb3JtcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIHUgaW4gY3VzdG9tVW5pZm9ybXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVuaWZvcm1zW3VdID0gY3VzdG9tVW5pZm9ybXNbdV07XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBhVmVydGV4UG9zaXRpb246ICAgIDAsXG4gICAgICAgIGFUZXh0dXJlQ29vcmQ6ICAgICAgMCxcbiAgICAgICAgYUNvbG9yOiAgICAgICAgICAgICAwXG4gICAgfTtcblxuICAgIGlmIChjdXN0b21BdHRyaWJ1dGVzKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgYSBpbiBjdXN0b21BdHRyaWJ1dGVzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2FdID0gY3VzdG9tQXR0cmlidXRlc1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IHZlcnRleFNyYyB8fCBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcyk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKGdsKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IFRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgZnJhZ21lbnRTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYztcblxuICAgIFNoYWRlci5jYWxsKHRoaXMsIGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTsvLywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xuXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuLi9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBCYXNlIGZvciBhIGNvbW1vbiBvYmplY3QgcmVuZGVyZXIgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHN5c3RlbSByZW5kZXJlciBwbHVnaW4uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBPYmplY3RSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59XG5cblxuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9iamVjdFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RSZW5kZXJlcjtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHJlbmRlcmVyIGFuZCBzZXRzIHRoZSBzaGFkZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gc2V0IHRoZSBzaGFkZXIuLlxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgcmVuZGVyZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIGZsdXNoZXNcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gZmx1c2ghXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyByZW5kZXIgdGhlIG9iamVjdFxufTtcbiIsIi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHF1YWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gVGhlIGdsIGNvbnRleHQgZm9yIHRoaXMgcXVhZCB0byB1c2UuXG4gKi9cbmZ1bmN0aW9uIFF1YWQoZ2wpXG57XG4gICAgLypcbiAgICAgKiB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbi8vICAgIHRoaXMudGV4dHVyZXMgPSBuZXcgVGV4dHVyZVV2cygpO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMjAwLDAsXG4gICAgICAgIDIwMCwyMDAsXG4gICAgICAgIDAsMjAwXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBxdWFkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KFtcbiAgICAgICAgMCwwLFxuICAgICAgICAxLDAsXG4gICAgICAgIDEsMSxcbiAgICAgICAgMCwxXG4gICAgXSk7XG5cbi8vICAgIHZhciB3aGl0ZSA9ICgweEZGRkZGRiA+PiAxNikgKyAoMHhGRkZGRkYgJiAweGZmMDApICsgKCgweEZGRkZGRiAmIDB4ZmYpIDw8IDE2KSArICgxICogMjU1IDw8IDI0KTtcbiAgICAvL1RPRE8gY29udmVydCB0aGlzIHRvIGEgMzIgdW5zaWduZWQgaW50IGFycmF5XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIGNvbXBvbmVudHMgb2YgdGhlIHRyaWFuZ2xlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDFcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KFtcbiAgICAgICAgMCwgMSwgMiwgMCwgMywgMlxuICAgIF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIHZlcnRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICg4ICsgOCArIDE2KSAqIDQsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59XG5cblF1YWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUXVhZDtcblxuLyoqXG4gKiBNYXBzIHR3byBSZWN0YW5nbGUgdG8gdGhlIHF1YWRcbiAqIEBwYXJhbSByZWN0IHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZpcnN0IHJlY3RhbmdsZVxuICogQHBhcmFtIHJlY3QyIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHNlY29uZCByZWN0YW5nbGVcbiAqL1xuUXVhZC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24ocmVjdCwgcmVjdDIpXG57XG4gICAgdmFyIHggPSAwOyAvL3JlY3QyLnggLyByZWN0LndpZHRoO1xuICAgIHZhciB5ID0gMDsgLy9yZWN0Mi55IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1swXSA9IHg7XG4gICAgdGhpcy51dnNbMV0gPSB5O1xuXG4gICAgdGhpcy51dnNbMl0gPSB4ICsgcmVjdDIud2lkdGggLyByZWN0LndpZHRoO1xuICAgIHRoaXMudXZzWzNdID0geTtcblxuICAgIHRoaXMudXZzWzRdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIHRoaXMudXZzWzZdID0geDtcbiAgICB0aGlzLnV2c1s3XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIC8vLyAtLS0tLVxuICAgIHggPSByZWN0Mi54O1xuICAgIHkgPSByZWN0Mi55O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1swXSA9IHg7XG4gICAgdGhpcy52ZXJ0aWNlc1sxXSA9IHk7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzJdID0geCArIHJlY3QyLndpZHRoO1xuICAgIHRoaXMudmVydGljZXNbM10gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1s0XSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzVdID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudmVydGljZXNbNl0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0O1xuXG4gICAgdGhpcy51cGxvYWQoKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlciBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5RdWFkLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIFRPRE8gY291bGQgcHJvYmFibHkgYmUgcHVzaGVkIGludG8gb25lIHVwbG9hZCFcbiAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHRoaXMudmVydGV4QnVmZmVyICk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy52ZXJ0aWNlcyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgOCAqIDQsIHRoaXMudXZzKTtcblxuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDgpICogNCwgdGhpcy5jb2xvcnMpO1xufTtcblxuUXVhZC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWQ7XG5cblxuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKSxcbiAgICAgICAgXG4gICAgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuICAgIEdMRnJhbWVidWZmZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTEZyYW1lYnVmZmVyLFxuICAgIFxuICAgIFN0ZW5jaWxNYXNrU3RhY2sgPSByZXF1aXJlKCcuL1N0ZW5jaWxNYXNrU3RhY2snKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqL1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgaG9yaXpvbnRhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSB2ZXJ0aWNhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICogQHBhcmFtIHJvb3Qge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAqL1xudmFyIFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24sIHJvb3QpXG57XG4gICAgLy9UT0RPIFJlc29sdXRpb24gY291bGQgZ28gaGVyZSAoIGVnIGxvdyByZXMgYmx1cnMgKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vIG5leHQgdGltZSB0byBjcmVhdGUgYSBmcmFtZSBidWZmZXIgYW5kIHRleHR1cmVcblxuICAgIC8qKlxuICAgICAqIEEgZnJhbWUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEZyYW1lQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuXG4gICAgdGhpcy5jbGVhckNvbG9yID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIG9iamVjdCBhcyBhIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2JqZWN0J3MgdHJhbnNmb3JtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk1hdHJpeH1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lID0gbnVsbDtcbiAgICBcbiAgICB0aGlzLmRlZmF1bHRGcmFtZSA9IG5ldyBQSVhJLlJlY3RhbmdsZSgpO1xuICAgIHRoaXMuZGVzdGluYXRpb25GcmFtZSA9IG51bGw7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgc3RvcmVzIG1hc2tpbmcgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbEJ1ZmZlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzdGVuY2lsIG1hc2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gbmV3IFN0ZW5jaWxNYXNrU3RhY2soKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyBmaWx0ZXIgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDp0aGlzLFxuICAgICAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICAgICAgYm91bmRzOnRoaXMuc2l6ZVxuICAgICAgICB9XG4gICAgXTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEEgZnJhbWUgYnVmZmVyIG5lZWRzIGEgdGFyZ2V0IHRvIHJlbmRlciB0by4uXG4gICAgICAgICAgICBjcmVhdGUgYSB0ZXh0dXJlIGFuZCBiaW5kIGl0IGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAgICAgKi9cbiAgICAgICAgXG5cbiAgICAgICAvLyBUT0RPIGNoYW5nZSFcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGJ5IHRoZSBiYXNlIHRleHR1cmVcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGhpcy5mcmFtZUJ1ZmZlci50ZXh0dXJlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBtYWtlIGl0IGEgbnVsbCBmcmFtZWJ1ZmZlci4uXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZnJhbWVidWZmZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xufTtcblxuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRhcmdldDtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGFyZ2V0O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZmlsdGVyIHRleHR1cmUuXG4gKlxuICogQHBhcmFtIFtiaW5kPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIHdlIGJpbmQgb3VyIGZyYW1lYnVmZmVyIGJlZm9yZSBjbGVhcmluZz9cbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGNsZWFyQ29sb3IpXG57XG4gICAgdmFyIGNjID0gY2xlYXJDb2xvciB8fCB0aGlzLmNsZWFyQ29sb3JcbiAgICB0aGlzLmZyYW1lQnVmZmVyLmNsZWFyKGNjWzBdLGNjWzFdLGNjWzJdLGNjWzNdKS8vcixnLGIsYSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuYXR0YWNoU3RlbmNpbEJ1ZmZlciA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPRE8gY2hlY2sgaWYgc3RlbmNpbCBpcyBkb25lP1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBpcyB1c2VkIGZvciBtYXNraW5nIGluIHBpeGlcbiAgICAgKiBsZXRzIGNyZWF0ZSBvbmUgYW5kIHRoZW4gYWRkIGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVTdGVuY2lsKCk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCBpbml0aWFsaXNlcyB0aGUgdmlld3BvcnQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oZGVzdGluYXRpb25GcmFtZSwgc291cmNlRnJhbWUpXG57XG4gICAgLy9UT09EIHJlZmFjdG9yIHVzYWdlIG9mIGZyYW1lLi5cbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5iaW5kKCk7XG5cbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBkZXN0aW5hdGlvbkZyYW1lIHx8IHRoaXMuZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlZmF1bHRGcmFtZTtcbiAgICB0aGlzLnNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgdGhpcy5zb3VyY2VGcmFtZSB8fCBkZXN0aW5hdGlvbkZyYW1lO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUsIHRoaXMuc291cmNlRnJhbWUgKTtcblxuICAgIGlmKHRoaXMudHJhbnNmb3JtKVxuICAgIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFwcGVuZCh0aGlzLnRyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5kZXN0aW5hdGlvbkZyYW1lICE9PSB0aGlzLnNvdXJjZUZyYW1lKVxuICAgIHtcbiAgICAgICAgZ2wuZW5hYmxlKGdsLlNDSVNTT1JfVEVTVCk7XG4gICAgICAgIGdsLnNjaXNzb3IodGhpcy5kZXN0aW5hdGlvbkZyYW1lLngsIHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGgqIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgIH1cblxuXG4gICAgLy8gVE9ETyAtIGRvZXMgbm90IG5lZWQgdG8gYmUgdXBkYXRlZCBhbGwgdGhlIHRpbWU/P1xuICAgIGdsLnZpZXdwb3J0KHRoaXMuZGVzdGluYXRpb25GcmFtZS54LHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuXG5cbn07XG5cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBwcm9qZWN0aW9uIG1hdHJpeCBiYXNlZCBvbiBhIHByb2plY3Rpb24gZnJhbWUgKHdoaWNoIGlzIGEgcmVjdGFuZ2xlKVxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jYWxjdWxhdGVQcm9qZWN0aW9uID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcblxuICAgIHNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHBtLmlkZW50aXR5KCk7XG5cbiAgICAvLyBUT0RPOiBtYWtlIGRlc3Qgc2NhbGUgc291cmNlXG4gICAgaWYgKCF0aGlzLnJvb3QpXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBzb3VyY2VGcmFtZS54ICogcG0uYTtcbiAgICAgICAgcG0udHkgPSAtMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IC0xIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBSZXNpemVzIHRoZSB0ZXh0dXJlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7TnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gaGVpZ2h0IHtOdW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgd2lkdGggPSB3aWR0aCB8IDA7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDtcblxuICAgIGlmICh0aGlzLnNpemUud2lkdGggPT09IHdpZHRoICYmIHRoaXMuc2l6ZS5oZWlnaHQgPT09IGhlaWdodCkgXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZGVmYXVsdEZyYW1lLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5kZWZhdWx0RnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5yZXNpemUod2lkdGggKiB0aGlzLnJlc29sdXRpb24sIGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCBwcm9qZWN0aW9uRnJhbWUgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHJlbmRlciB0YXJnZXQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFN0ZW5jaWxNYXNrU3RhY2soKVxue1xuXHQvKipcbiAgICAgKiBUaGUgYWN0dWFsIHN0YWNrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVE9ETyBAYWx2aW5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvdW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb3VudCA9IDA7XG59XG5cblN0ZW5jaWxNYXNrU3RhY2sucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RlbmNpbE1hc2tTdGFjaztcbm1vZHVsZS5leHBvcnRzID0gU3RlbmNpbE1hc2tTdGFjaztcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBNYXBzIGdsIGJsZW5kIGNvbWJpbmF0aW9ucyB0byBXZWJHTFxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcbiAgICBvYmplY3QgPSBvYmplY3QgfHwge307XG5cbiAgICAvL1RPRE8gLSBwcmVtdWx0aXBseSBhbHBoYSB3b3VsZCBiZSBkaWZmZXJlbnQuXG4gICAgLy9hZGQgYSBib29sZWFuIGZvciB0aGF0IVxuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdICAgICAgICA9IFtnbC5PTkUsICAgICAgIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLkRTVF9BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk1VTFRJUExZXSAgICAgID0gW2dsLkRTVF9DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gW2dsLlNSQ19BTFBIQSwgZ2wuT05FXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VdICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSFVFXSAgICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcblxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpO1xuIiwiQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbCwgb2JqZWN0KVxue1xuXHRvYmplY3Q9IG9iamVjdCB8fCB7fTtcblxuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlBPSU5UU10gICAgICAgICA9IGdsLlBPSU5UUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FU10gICAgICAgICAgPSBnbC5MSU5FUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FX0xPT1BdICAgICAgPSBnbC5MSU5FX0xPT1A7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9TVFJJUF0gICAgID0gZ2wuTElORV9TVFJJUDtcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5UUklBTkdMRVNdICAgICAgPSBnbC5UUklBTkdMRVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBdID0gZ2wuVFJJQU5HTEVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXSAgID0gZ2wuVFJJQU5HTEVfRkFOO1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGk7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIFNwcml0ZSBvYmplY3QgaXMgdGhlIGJhc2UgZm9yIGFsbCB0ZXh0dXJlZCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIHRvIHRoZSBzY3JlZW5cbiAqXG4gKiBBIHNwcml0ZSBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGFuIGltYWdlIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSBmb3IgdGhpcyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gU3ByaXRlKHRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW5jaG9yIHNldHMgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLDAgdGhpcyBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMC41LDAuNSBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyBjZW50ZXJlZFxuICAgICAqIFNldHRpbmcgdGhlIGFuY2hvciB0byAxLDEgd291bGQgbWVhbiB0aGUgdGV4dHVyZSdzIG9yaWdpbiBwb2ludCB3aWxsIGJlIHRoZSBib3R0b20gcmlnaHQgY29ybmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuYW5jaG9yID0gbmV3IG1hdGguUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgc3ByaXRlICh0aGlzIGlzIGluaXRpYWxseSBzZXQgYnkgdGhlIHRleHR1cmUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBIHZhbHVlIG9mIDB4RkZGRkZGIHdpbGwgcmVtb3ZlIGFueSB0aW50IGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaGFkZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBzcHJpdGUuIFNldCB0byBudWxsIHRvIHJlbW92ZSBhIGN1cnJlbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5BYnN0cmFjdEZpbHRlcnxQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBjYWNoZWQgdmFsdWUgb2YgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8vIGNhbGwgdGV4dHVyZSBzZXR0ZXJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG4gICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlXG4gICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy52ZXJ0ZXhEYXRhID0gbmV3IEZsb2F0MzJBcnJheSg4KTtcbn1cblxuLy8gY29uc3RydWN0b3JcblNwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuc2NhbGUueCkgKiB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBNYXRoLmFicyh0aGlzLnNjYWxlLnkpICogdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc2lnbiA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS55KSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gc2lnbiAqIHZhbHVlIC8gdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5TcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIHNvIGlmIF93aWR0aCBpcyAwIHRoZW4gd2lkdGggd2FzIG5vdCBzZXQuLlxuICAgIGlmICh0aGlzLl93aWR0aClcbiAgICB7XG4gICAgICAgIHRoaXMuc2NhbGUueCA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS54KSAqIHRoaXMuX3dpZHRoIC8gdGhpcy50ZXh0dXJlLmZyYW1lLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnkgPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgKiB0aGlzLl9oZWlnaHQgLyB0aGlzLnRleHR1cmUuZnJhbWUuaGVpZ2h0O1xuICAgIH1cbn07XG5cblNwcml0ZS5wcm90b3R5cGUuY2FjbHVsYXRlVmVydGljZXMgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICB3dCA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICBhID0gd3QuYSwgYiA9IHd0LmIsIGMgPSB3dC5jLCBkID0gd3QuZCwgdHggPSB3dC50eCwgdHkgPSB3dC50eSxcbiAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDEsXG4gICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG4gICAgICAgIFxuICAgIGlmICh0cmltKVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkIGFuZCBpcyBub3QgYSB0aWxpbmdzcHJpdGUgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgIHcxID0gdHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgaDEgPSB0cmltLnkgLSB0aGlzLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgIGgwID0gaDEgKyB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG4gICAgfVxuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzBdID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVsxXSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzJdID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVszXSA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs0XSA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbNV0gPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs2XSA9IGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbN10gPSBkICogaDAgKyBiICogdzEgKyB0eTtcblxuXG59XG5cbi8qKlxuKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMudGV4dHVyZURpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMudmVydGV4RGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICB9XG4gICAgXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBTcHJpdGUgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgc3ByaXRlXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG4gICAgICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudmVydGV4RGlydHkgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWluWCxcbiAgICAgICAgICAgIG1heFgsXG4gICAgICAgICAgICBtaW5ZLFxuICAgICAgICAgICAgbWF4WSxcbiAgICAgICAgICAgIHZlcnRleERhdGEgPSB0aGlzLnZlcnRleERhdGE7XG5cbiAgICAgICAgdmFyIHgxID0gdmVydGV4RGF0YVswXVxuICAgICAgICB2YXIgeTEgPSB2ZXJ0ZXhEYXRhWzFdXG5cbiAgICAgICAgdmFyIHgyID0gdmVydGV4RGF0YVsyXVxuICAgICAgICB2YXIgeTIgPSB2ZXJ0ZXhEYXRhWzNdXG5cbiAgICAgICAgdmFyIHgzID0gdmVydGV4RGF0YVs0XVxuICAgICAgICB2YXIgeTMgPSB2ZXJ0ZXhEYXRhWzVdXG5cbiAgICAgICAgdmFyIHg0ID0gdmVydGV4RGF0YVs2XVxuICAgICAgICB2YXIgeTQgPSB2ZXJ0ZXhEYXRhWzddXG5cbiAgICAgICAgbWluWCA9IHgxO1xuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MTtcbiAgICAgICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICAgICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICAgICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgICAgICBtYXhYID0geDE7XG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkxO1xuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIC8vIGNoZWNrIGZvciBjaGlsZHJlblxuICAgICAgICBpZih0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkQm91bmRzID0gdGhpcy5jb250YWluZXJHZXRCb3VuZHMoKTtcblxuICAgICAgICAgICAgdzAgPSBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgdzEgPSBjaGlsZEJvdW5kcy54ICsgY2hpbGRCb3VuZHMud2lkdGg7XG4gICAgICAgICAgICBoMCA9IGNoaWxkQm91bmRzLnk7XG4gICAgICAgICAgICBoMSA9IGNoaWxkQm91bmRzLnkgKyBjaGlsZEJvdW5kcy5oZWlnaHQ7XG5cbiAgICAgICAgICAgIG1pblggPSAobWluWCA8IHcwKSA/IG1pblggOiB3MDtcbiAgICAgICAgICAgIG1pblkgPSAobWluWSA8IGgwKSA/IG1pblkgOiBoMDtcblxuICAgICAgICAgICAgbWF4WCA9IChtYXhYID4gdzEpID8gbWF4WCA6IHcxO1xuICAgICAgICAgICAgbWF4WSA9IChtYXhZID4gaDEpID8gbWF4WSA6IGgxO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2JvdW5kcy54ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB0aGlzLl9ib3VuZHMueSA9IC10aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRoaXMuX2JvdW5kcy5oZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgcmV0dXJuIHRoaXMuX2JvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHNwcml0ZVxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5TcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy50ZXh0dXJlLmNyb3Aud2lkdGggPD0gMCB8fCB0aGlzLnRleHR1cmUuY3JvcC5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyAgSWdub3JlIG51bGwgc291cmNlc1xuICAgIGlmICh0aGlzLnRleHR1cmUudmFsaWQpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgICAgICB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgICAgICBkeCxcbiAgICAgICAgICAgIGR5LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ7XG5cbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgICAgICAvLyBJZiBzbW9vdGhpbmdFbmFibGVkIGlzIHN1cHBvcnRlZCBhbmQgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIHNtb290aGluZyBwcm9wZXJ0eSBmb3IgdGhpcyB0ZXh0dXJlXG4gICAgICAgIHZhciBzbW9vdGhpbmdFbmFibGVkID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5zY2FsZU1vZGUgPT09IENPTlNULlNDQUxFX01PREVTLkxJTkVBUjtcbiAgICAgICAgaWYgKHJlbmRlcmVyLnNtb290aFByb3BlcnR5ICYmIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldICE9PSBzbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0W3JlbmRlcmVyLnNtb290aFByb3BlcnR5XSA9IHNtb290aGluZ0VuYWJsZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgdGV4dHVyZSBpcyB0cmltbWVkIHdlIG9mZnNldCBieSB0aGUgdHJpbSB4L3ksIG90aGVyd2lzZSB3ZSB1c2UgdGhlIGZyYW1lIGRpbWVuc2lvbnNcblxuICAgICAgICBpZih0ZXh0dXJlLnJvdGF0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2lkdGggPSB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBkeCA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgXG4gICAgICAgICAgICBkeCArPSB3aWR0aDtcblxuICAgICAgICAgICAgd3QudHggPSBkeSAqIHd0LmEgKyBkeCAqIHd0LmMgKyB3dC50eDtcbiAgICAgICAgICAgIHd0LnR5ID0gZHkgKiB3dC5iICsgZHggKiB3dC5kICsgd3QudHk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gd3QuYTtcbiAgICAgICAgICAgIHd0LmEgID0gLXd0LmM7XG4gICAgICAgICAgICB3dC5jICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICB0ZW1wID0gd3QuYjtcbiAgICAgICAgICAgIHd0LmIgID0gLXd0LmQ7XG4gICAgICAgICAgICB3dC5kICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICAvLyB0aGUgYW5jaG9yIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCBhYm92ZSwgc28gbGV0cyBzZXQgaXQgdG8gemVyb1xuICAgICAgICAgICAgZHggPSAwO1xuICAgICAgICAgICAgZHkgPSAwO1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC53aWR0aDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0ZXh0dXJlLnRyaW0ud2lkdGggOiB0aGlzLmFuY2hvci54ICogLXRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRleHR1cmUudHJpbS5oZWlnaHQgOiB0aGlzLmFuY2hvci55ICogLXRleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfVxuXG5cblxuICAgICAgICAvLyBBbGxvdyBmb3IgcGl4ZWwgcm91bmRpbmdcbiAgICAgICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB3dC5hLFxuICAgICAgICAgICAgICAgIHd0LmIsXG4gICAgICAgICAgICAgICAgd3QuYyxcbiAgICAgICAgICAgICAgICB3dC5kLFxuICAgICAgICAgICAgICAgICh3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMCxcbiAgICAgICAgICAgICAgICAod3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uKSB8IDBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGR4ID0gZHggfCAwO1xuICAgICAgICAgICAgZHkgPSBkeSB8IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgd3QudHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHd0LnR5ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcblxuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIC8vIFRPRE8gY2xlYW4gdXAgY2FjaGluZyAtIGhvdyB0byBjbGVhbiB1cCB0aGUgY2FjaGVzP1xuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC54ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmNyb3AueSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeSAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHNwcml0ZSBhbmQgb3B0aW9uYWxseSBpdHMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBbZGVzdHJveVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgY3VycmVudCB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICovXG5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveVRleHR1cmUsIGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYW5jaG9yID0gbnVsbDtcblxuICAgIGlmIChkZXN0cm95VGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUuZGVzdHJveShkZXN0cm95QmFzZVRleHR1cmUpO1xuICAgIH1cblxuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn07XG5cbi8vIHNvbWUgaGVscGVyIGZ1bmN0aW9ucy4uXG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgY3Jvc3Mtb3JpZ2luIHBhcmFtZXRlclxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBzY2FsZSBtb2RlLCBzZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGZyYW1lSWRcbiAqL1xuU3ByaXRlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTcHJpdGUodGV4dHVyZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGJhc2VkIG9uIGFuIGltYWdlIHVybFxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZUlkIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblNwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFNwcml0ZShUZXh0dXJlLmZyb21JbWFnZShpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSk7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyJyksXG4gICAgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzJyksXG4gICAgZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIGdsQ29yZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFNwcml0ZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9TcHJpdGVSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKiBSZW5kZXJlciBkZWRpY2F0ZWQgdG8gZHJhd2luZyBhbmQgYmF0Y2hpbmcgc3ByaXRlcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZVJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIHZhbHVlcyBzZW50IGluIHRoZSB2ZXJ0ZXggYnVmZmVyLlxuICAgICAqIHBvc2l0aW9uWCwgcG9zaXRpb25ZLCBjb2xvclIsIGNvbG9yRywgY29sb3JCID0gNVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydFNpemUgPSA1O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIHZlcnRleCBpbmZvcm1hdGlvbiBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBpbWFnZXMgaW4gdGhlIFNwcml0ZUJhdGNoIGJlZm9yZSBpdCBmbHVzaGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IENPTlNULlNQUklURV9CQVRDSF9TSVpFOyAvLyAyMDAwIGlzIGEgbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIC8gZGVza3RvcFxuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBpbiBvdXIgYmF0Y2hcbiAgICB2YXIgbnVtVmVydHMgPSAodGhpcy5zaXplICogNCkgKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYmF0Y2gsIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgICB2YXIgbnVtSW5kaWNlcyA9IHRoaXMuc2l6ZSAqIDY7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgdmVydGV4IGRhdGEgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdGhlIHZlcnRleCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEFycmF5QnVmZmVyKG51bVZlcnRzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgRmxvYXQzMkFycmF5IGZvciBwb3NpdGlvbnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG4gICAgXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBVaW50MzJBcnJheSBmb3IgdXZzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciBjb2xvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXMgb2YgdGhlIGdlb21ldHJ5IChxdWFkcykgdG8gZHJhd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzKHRoaXMuc2l6ZSlcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICBcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIHRoaXMuZ3JvdXBzID0gW107XG4gICAgXG4gICAgLy9UT0RPIC0gMzAwIGlzIGEgYml0IG1hZ2ljLCBmaWd1cmUgb3V0IGEgbmljZXIgYW1vdW50IVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zaXplOyBpKyspIFxuICAgIHtcbiAgICAgICAgdGhpcy5ncm91cHNbaV0gPSB7dGV4dHVyZXM6W10sIHRleHR1cmVDb3VudDowLCBpZHM6W10sIHNpemU6MCwgc3RhcnQ6MCwgYmxlbmQ6MH07IFxuICAgIH07XG4gICAgXG4gICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG5cbiAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbnVsbDsgICAgXG59XG5cblxuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ByaXRlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZVJlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdzcHJpdGUnLCBTcHJpdGVSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMuTUFYX1RFWFRVRVMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpO1xuXG4gICAgdGhpcy5fc2hhZGVyID0gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIoZ2wsIHRoaXMuTUFYX1RFWFRVRVMpLy9uZXcgVGV4dHVyZVNoYWRlcihnbCk7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXI7XG5cbiAgICAvLyBjcmVhdGUgYSBjb3VwbGUgb2YgYnVmZmVyc1xuICAgIHRoaXMudmVydGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlcihnbCwgbnVsbCwgZ2wuRFlOQU1JQ19EUkFXKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyKGdsLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIC8vIGJ1aWxkIHRoZSB2YW8gb2JqZWN0IHRoYXQgd2lsbCByZW5kZXIuLlxuICAgIHRoaXMudmFvID0gbmV3IGdsQ29yZS5WZXJ0ZXhBcnJheU9iamVjdChnbCk7XG5cbiAgICB0aGlzLnZhby5hZGRJbmRleCh0aGlzLmluZGV4QnVmZmVyKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCBnbC5VTlNJR05FRF9TSE9SVCwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDIgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgZ2wuVU5TSUdORURfQllURSwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDMgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlSWQsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDQgKiA0KTtcblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IDk5OTk5O1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHJlbmRlciB3aGVuIHVzaW5nIHRoaXMgc3ByaXRlYmF0Y2hcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChzcHJpdGUpXG57XG4gICAgLy9UT0RPIHNldCBibGVuZCBtb2Rlcy4uXG4gICAgLy8gY2hlY2sgdGV4dHVyZS4uXG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID49IHRoaXMuc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICB9XG5cbiAgXG4gICAgLy8gZ2V0IHRoZSB1dnMgZm9yIHRoZSB0ZXh0dXJlXG4gICBcblxuICAgIC8vIGlmIHRoZSB1dnMgaGF2ZSBub3QgdXBkYXRlZCB0aGVuIG5vIHBvaW50IHJlbmRlcmluZyBqdXN0IHlldCFcbiAgICBpZiAoIXNwcml0ZS50ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgIC8vIHB1c2ggYSB0ZXh0dXJlLlxuICAgIC8vIGluY3JlbWVudCB0aGUgYmF0Y2hzaXplXG4gICAgdmFyIG5leHRUZXh0dXJlID0gIHNwcml0ZS50ZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIHZhciBjdXJyZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRHcm91cDtcbiAgICB2YXIgaTtcblxuICAgIGlmKHRoaXMuY3VycmVudFRleHR1cmUgIT09IG5leHRUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG5leHRUZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgaWYoIW5leHRUZXh0dXJlLl9lbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5fZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5faWQgPSB0aGlzLnRleHR1cmVDb3VudDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy50ZXh0dXJlQ291bnQgPT09IHRoaXMuTUFYX1RFWFRVRVMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50OyBpKyspIFxuICAgICAgICAgICAgICAgIHsgICAgIFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnNpemUgPSB0aGlzLmN1cnJlbnRJbmRleCAtIGN1cnJlbnRHcm91cC5zdGFydDtcbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC5zdGFydCA9IHRoaXMuY3VycmVudEluZGV4O1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCsrXSA9IG5leHRUZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcbiAgICB9XG5cbiAgICAvLyBUT0RPIHRyaW0/P1xuICAgIHZhciBpbmRleCA9IHRoaXMuY3VycmVudEluZGV4ICogdGhpcy52ZXJ0Qnl0ZVNpemU7XG5cbiAgICB0aGlzLmN1cnJlbnRJbmRleCsrO1xuXG4gICAgLy8gdXBsb2FkIHRoZSBzcHJpdGUgZWxlbWV0bnMuLi5cbiAgICAvLyB0aGV5IGhhdmUgYWxsIHJlYWR5IGJlZW4gY2FsY3VsYXRlZCBzbyB3ZSBqdXN0IG5lZWQgdG8gcHVzaCB0aGVtIGludG8gdGhlIGJ1ZmZlci5cbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG4gICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMucG9zaXRpb25zO1xuICAgIHZhciB2ZXJ0ZXhEYXRhID0gc3ByaXRlLnZlcnRleERhdGFcbiAgICB2YXIgdGludCA9IChzcHJpdGUudGludCA+PiAxNikgKyAoc3ByaXRlLnRpbnQgJiAweGZmMDApICsgKChzcHJpdGUudGludCAmIDB4ZmYpIDw8IDE2KSArIChzcHJpdGUud29ybGRBbHBoYSAqIDI1NSA8PCAyNCk7XG4gICAgdmFyIHV2cyA9IHNwcml0ZS50ZXh0dXJlLl91dnMudXZzX3VpbnQzMjtcbiAgICAvL3h5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVswXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzFdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzBdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkOyBcbiAgICBcbiAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMl07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVszXTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1sxXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNF07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs1XTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1syXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs2XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzddO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzNdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb250ZW50IGFuZCBlbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPT09IDApcmV0dXJuO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gdGhpcy5jdXJyZW50R3JvdXAuc3RhcnQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgeyAgICAgXG4gICAgICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVzW2ldLl9lbmFibGVkID0gZmFsc2U7XG4gICAgfTtcbiAgIFxuICAgIC8vIGRvIHNvbWUgc21hcnQgYXJyYXkgc3R1ZmYuLlxuICAgIC8vIGRvdWJsZSBzaXplIHNvIHdlIGRvbnQgYWx3YXkgc3ViYXJyYXkgdGhlIGVsZW1lbnRzLi5cbiAgICAvLyB1cGxvYWQgdGhlIHZlcnRzIHRvIHRoZSBidWZmZXJcbiAgICBpZiAodGhpcy5jdXJyZW50QmF0Y2hTaXplID4gKCB0aGlzLnNpemUgKiAwLjUgKSApXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlci51cGxvYWQodGhpcy52ZXJ0aWNlcywgMCwgdHJ1ZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIG8gayAuLiBzdWIgYXJyYXkgaXMgU0xPVz4/XG4gICAgICAgIHZhciB2aWV3ID0gdGhpcy5wb3NpdGlvbnMuc3ViYXJyYXkoMCwgdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZSk7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh2aWV3LCAwLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBiaW5kIHNoYWRlci4uXG4gICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHRoaXMuX3NoYWRlcik7XG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggMCApO1xuXG4gICAgLy8vIHJlbmRlciB0aGUgZ3JvdXBzLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5ncm91cENvdW50OyBpKyspIHtcbiAgICAgICAgXG4gICAgICAgIHZhciBncm91cCA9IHRoaXMuZ3JvdXBzW2ldO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ3JvdXAudGV4dHVyZUNvdW50OyBqKyspIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFRleHR1cmUoZ3JvdXAudGV4dHVyZXNbal0sIGopO1xuICAgICAgICB9O1xuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGdyb3VwLnNpemUgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgZ3JvdXAuc3RhcnQgKiA2ICogMik7XG4gICAgfTtcblxuICAgIC8vIHJlc2V0IGVsZW1lbnRzIGZvciB0aGUgbmV4dCBmbHVzaFxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cENvdW50ID0gMDtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcbiAgICB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgc3ByaXRlIGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZhby5iaW5kKCk7XG59O1xuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xuICAgIHRoaXMudmFvLnVuYmluZCgpO1xufTtcbi8qKlxuICogRGVzdHJveXMgdGhlIFNwcml0ZUJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMudmVydGljZXMgPSBudWxsO1xuICAgIHRoaXMucG9zaXRpb25zID0gbnVsbDtcbiAgICB0aGlzLmNvbG9ycyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMudmVydGV4QnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuc3ByaXRlcyA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuXG5mdW5jdGlvbiBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgbWF4VGV4dHVyZXMpXG57XG4gICAgdmFyIHZlcnRleFNyYyA9IFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcbmF0dHJpYnV0ZSBmbG9hdCBhVGV4dHVyZUlkO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyBmbG9hdCB2VGV4dHVyZUlkO1xcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2VGV4dHVyZUlkID0gYVRleHR1cmVJZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cIjtcbiAgICB2YXIgZnJhZ21lbnRTcmMgPSAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxuJyArIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKSArIFwiXFxuXFxuXCIgKyBmcmFnVGVtcGxhdGVcblxuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMucmVwbGFjZSgvXFwlXFwlL2dpLCAnMTYnKTtcblxuICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXG4gICAgdmFyIHNhbXBsZVZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkrKykge1xuICAgICAgICBzYW1wbGVWYWx1ZXNbaV0gPSBpO1xuICAgIH07XG5cbiAgICBzaGFkZXIuYmluZCgpO1xuICAgIHNoYWRlci51bmlmb3Jtcy51U2FtcGxlcnMgPSBzYW1wbGVWYWx1ZXM7XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVNhbXBsZVNyYyhtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgc3JjID0gJ3ZlYzQgZ2V0U2FtcGxlRnJvbUFycmF5KHNhbXBsZXIyRCB0ZXh0dXJlc1slJV0sIGludCBuZHgsIHZlYzIgdXYpIHtcXG5cXG52ZWM0IGNvbG9yOydcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSBcbiAgICB7XG4gICAgICAgIGlmKGkgPiAwKXNyYyArPSAnXFxuZWxzZSAnO1xuICAgICAgICBpZihpIDwgbWF4VGV4dHVyZXMtMSlzcmMgKz0gJ2lmKG5keCA9PSAnICsgaSArICcpJztcbiAgICAgICAgc3JjICs9ICdcXG57JztcbiAgICAgICAgc3JjICs9ICdcXG5cXHRjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlc1snK2krJ10sIHV2KTsnO1xuICAgICAgICBzcmMgKz0gJ1xcbn0nO1xuICAgIH07XG5cbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAncmV0dXJuIGNvbG9yOyc7XG4gICAgc3JjICs9ICdcXG59JztcblxuICAgIHJldHVybiBzcmM7XG59XG5cbnZhciBmcmFnVGVtcGxhdGUgPSBbXG5cbiAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuICAgICd2YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7JyxcbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJzWyUlXTsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnZ2xfRnJhZ0NvbG9yID0gZ2V0U2FtcGxlRnJvbUFycmF5KHVTYW1wbGVycywgaW50KHZUZXh0dXJlSWQpLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvcjsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcjtcbiIsInZhciBTcHJpdGUgPSByZXF1aXJlKCcuLi9zcHJpdGVzL1Nwcml0ZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgVGV4dCBPYmplY3Qgd2lsbCBjcmVhdGUgYSBsaW5lIG9yIG11bHRpcGxlIGxpbmVzIG9mIHRleHQuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJyBpbiB5b3VyIHRleHQgc3RyaW5nLFxuICogb3IgYWRkIGEgd29yZFdyYXAgcHJvcGVydHkgc2V0IHRvIHRydWUgYW5kIGFuZCB3b3JkV3JhcFdpZHRoIHByb3BlcnR5IHdpdGggYSB2YWx1ZSBpbiB0aGUgc3R5bGUgb2JqZWN0LlxuICpcbiAqIEEgVGV4dCBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGEgc3RyaW5nIGFuZCBhIHN0eWxlIG9iamVjdFxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dCA9IG5ldyBQSVhJLlRleHQoJ1RoaXMgaXMgYSBwaXhpIHRleHQnLHtmb250IDogJzI0cHggQXJpYWwnLCBmaWxsIDogMHhmZjEwMTAsIGFsaWduIDogJ2NlbnRlcid9KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBbc3R5bGVdIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnRdIHtzdHJpbmd9IGRlZmF1bHQgJ2JvbGQgMjBweCBBcmlhbCcgVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gKiBAcGFyYW0gW3N0eWxlLmZpbGw9J2JsYWNrJ10ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdCBzaW5nbGUgbGluZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZV0ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBzdHJva2UgZS5nICdibHVlJywgJyNGQ0ZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZVRoaWNrbmVzcz0wXSB7bnVtYmVyfSBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgc3Ryb2tlLiBEZWZhdWx0IGlzIDAgKG5vIHN0cm9rZSlcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXAsIGl0IG5lZWRzIHdvcmRXcmFwIHRvIGJlIHNldCB0byB0cnVlXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvdz1mYWxzZV0ge2Jvb2xlYW59IFNldCBhIGRyb3Agc2hhZG93IGZvciB0aGUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93QW5nbGU9TWF0aC5QSS80XSB7bnVtYmVyfSBTZXQgYSBhbmdsZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAqIEBwYXJhbSBbc3R5bGUucGFkZGluZz0wXSB7bnVtYmVyfSBPY2Nhc2lvbmFsbHkgc29tZSBmb250cyBhcmUgY3JvcHBlZCBvbiB0b3Agb3IgYm90dG9tLiBBZGRpbmcgc29tZSBwYWRkaW5nIHdpbGxcbiAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVKb2luPSdtaXRlciddIHtzdHJpbmd9IFRoZSBsaW5lSm9pbiBwcm9wZXJ0eSBzZXRzIHRoZSB0eXBlIG9mIGNvcm5lciBjcmVhdGVkLCBpdCBjYW4gcmVzb2x2ZVxuICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAqICAgICAgb3IgaW5jcmVhc2UgdGhlIHNwaWtpbmVzcyBvZiByZW5kZXJlZCB0ZXh0LlxuICovXG5mdW5jdGlvbiBUZXh0KHRleHQsIHN0eWxlLCByZXNvbHV0aW9uKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgZWxlbWVudCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gdG9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGhcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIGNhbnZhcy5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXModGhpcy5jYW52YXMpO1xuICAgIHRleHR1cmUudHJpbSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuICAgIFNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3ByaXRlLnByb3RvdHlwZSk7XG5UZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHQ7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHQ7XG5cblRleHQuZm9udFByb3BlcnRpZXNDYWNoZSA9IHt9O1xuVGV4dC5mb250UHJvcGVydGllc0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuVGV4dC5mb250UHJvcGVydGllc0NvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHQucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueCAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dCwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc2NhbGUueSAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlIC8gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBzdHlsZSBvZiB0aGUgdGV4dFxuICAgICAqXG4gICAgICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmZvbnQ9J2JvbGQgMjBwdCBBcmlhbCddIHtzdHJpbmd9IFRoZSBzdHlsZSBhbmQgc2l6ZSBvZiB0aGUgZm9udFxuICAgICAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGVnICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnN0cm9rZT0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlZyAnYmx1ZScsICcjRkNGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICAgICAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcFdpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIGF0IHdoaWNoIHRleHQgd2lsbCB3cmFwXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSGVpZ2h0XSB7bnVtYmVyfSBUaGUgbGluZSBoZWlnaHQsIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgc3BhY2UgdGhhdCBhIGxldHRlciB1c2VzXG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfG51bWJlcn0gQSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgb24gdGhlIGRyb3BzaGFkb3cgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzZdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0JsdXI9MF0ge251bWJlcn0gU2V0IGEgc2hhZG93IGJsdXIgcmFkaXVzXG4gICAgICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICAgICAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLnRleHRCYXNlbGluZT0nYWxwaGFiZXRpYyddIHtzdHJpbmd9IFRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dCB0aGF0IGlzIHJlbmRlcmVkLlxuICAgICAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gICAgICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gICAgICogQHBhcmFtIFtzdHlsZS5taXRlckxpbWl0PTEwXSB7bnVtYmVyfSBUaGUgbWl0ZXIgbGltaXQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdtaXRlcicgbGluZUpvaW4gbW9kZS4gVGhpcyBjYW4gcmVkdWNlXG4gICAgICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICBzdHlsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdHlsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3R5bGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZmlsbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5maWxsID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5maWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5zdHJva2UgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5zdHJva2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmRyb3BTaGFkb3dDb2xvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlLmZvbnQgPSBzdHlsZS5mb250IHx8ICdib2xkIDIwcHQgQXJpYWwnO1xuICAgICAgICAgICAgc3R5bGUuZmlsbCA9IHN0eWxlLmZpbGwgfHwgJ2JsYWNrJztcbiAgICAgICAgICAgIHN0eWxlLmFsaWduID0gc3R5bGUuYWxpZ24gfHwgJ2xlZnQnO1xuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gc3R5bGUuc3Ryb2tlIHx8ICdibGFjayc7IC8vcHJvdmlkZSBhIGRlZmF1bHQsIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2lzc3Vlcy8xMzZcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZVRoaWNrbmVzcyA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyB8fCAwO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXAgPSBzdHlsZS53b3JkV3JhcCB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLndvcmRXcmFwV2lkdGggPSBzdHlsZS53b3JkV3JhcFdpZHRoIHx8IDEwMDtcblxuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvdyA9IHN0eWxlLmRyb3BTaGFkb3cgfHwgZmFsc2U7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3IgfHwgJyMwMDAwMDAnO1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0FuZ2xlID0gc3R5bGUuZHJvcFNoYWRvd0FuZ2xlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93QW5nbGUgOiBNYXRoLlBJIC8gNjtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSA9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlIDogNTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXIgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dCbHVyIDogMDsgLy9zaGFkb3dCbHVyIGlzICcwJyBieSBkZWZhdWx0IGFjY29yZGluZyB0byBIVE1MXG5cbiAgICAgICAgICAgIHN0eWxlLnBhZGRpbmcgPSBzdHlsZS5wYWRkaW5nIHx8IDA7XG5cbiAgICAgICAgICAgIHN0eWxlLnRleHRCYXNlbGluZSA9IHN0eWxlLnRleHRCYXNlbGluZSB8fCAnYWxwaGFiZXRpYyc7XG5cbiAgICAgICAgICAgIHN0eWxlLmxpbmVKb2luID0gc3R5bGUubGluZUpvaW4gfHwgJ21pdGVyJztcbiAgICAgICAgICAgIHN0eWxlLm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0IHx8IDEwO1xuXG4gICAgICAgICAgICB0aGlzLl9zdHlsZSA9IHN0eWxlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjb3B5IGZvciB0aGUgdGV4dCBvYmplY3QuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHRleHQpe1xuICAgICAgICAgICAgdGV4dCA9IHRleHQudG9TdHJpbmcoKSB8fCAnICc7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dCA9PT0gdGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdGV4dDtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHN0eWxlID0gdGhpcy5fc3R5bGU7XG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuXG4gICAgLy8gd29yZCB3cmFwXG4gICAgLy8gcHJlc2VydmUgb3JpZ2luYWwgdGV4dFxuICAgIHZhciBvdXRwdXRUZXh0ID0gc3R5bGUud29yZFdyYXAgPyB0aGlzLndvcmRXcmFwKHRoaXMuX3RleHQpIDogdGhpcy5fdGV4dDtcblxuICAgIC8vIHNwbGl0IHRleHQgaW50byBsaW5lc1xuICAgIHZhciBsaW5lcyA9IG91dHB1dFRleHQuc3BsaXQoLyg/OlxcclxcbnxcXHJ8XFxuKS8pO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgd2lkdGhcbiAgICB2YXIgbGluZVdpZHRocyA9IG5ldyBBcnJheShsaW5lcy5sZW5ndGgpO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBmb250UHJvcGVydGllcyA9IHRoaXMuZGV0ZXJtaW5lRm9udFByb3BlcnRpZXMoc3R5bGUuZm9udCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBsaW5lV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQobGluZXNbaV0pLndpZHRoO1xuICAgICAgICBsaW5lV2lkdGhzW2ldID0gbGluZVdpZHRoO1xuICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxpbmVXaWR0aCk7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gbWF4TGluZVdpZHRoICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgd2lkdGggKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gKCB3aWR0aCArIHRoaXMuY29udGV4dC5saW5lV2lkdGggKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIC8vIGNhbGN1bGF0ZSB0ZXh0IGhlaWdodFxuICAgIHZhciBsaW5lSGVpZ2h0ID0gdGhpcy5zdHlsZS5saW5lSGVpZ2h0IHx8IGZvbnRQcm9wZXJ0aWVzLmZvbnRTaXplICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuXG4gICAgdmFyIGhlaWdodCA9IGxpbmVIZWlnaHQgKiBsaW5lcy5sZW5ndGg7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBoZWlnaHQgKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9ICggaGVpZ2h0ICsgdGhpcy5fc3R5bGUucGFkZGluZyAqIDIgKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMuY29udGV4dC5zY2FsZSggdGhpcy5yZXNvbHV0aW9uLCB0aGlzLnJlc29sdXRpb24pO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIH1cblxuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxTdHlsZT1cIiNGRjAwMDBcIjtcbiAgICAvL3RoaXMuY29udGV4dC5maWxsUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIHRoaXMuY29udGV4dC5mb250ID0gc3R5bGUuZm9udDtcbiAgICB0aGlzLmNvbnRleHQuc3Ryb2tlU3R5bGUgPSBzdHlsZS5zdHJva2U7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcbiAgICB0aGlzLmNvbnRleHQudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lO1xuICAgIHRoaXMuY29udGV4dC5saW5lSm9pbiA9IHN0eWxlLmxpbmVKb2luO1xuICAgIHRoaXMuY29udGV4dC5taXRlckxpbWl0ID0gc3R5bGUubWl0ZXJMaW1pdDtcblxuICAgIHZhciBsaW5lUG9zaXRpb25YO1xuICAgIHZhciBsaW5lUG9zaXRpb25ZO1xuXG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBpZiAoc3R5bGUuZHJvcFNoYWRvd0JsdXIgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3I7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Qmx1ciA9IHN0eWxlLmRyb3BTaGFkb3dCbHVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4U2hhZG93T2Zmc2V0ID0gTWF0aC5jb3Moc3R5bGUuZHJvcFNoYWRvd0FuZ2xlKSAqIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICAgICAgdmFyIHlTaGFkb3dPZmZzZXQgPSBNYXRoLnNpbihzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogbGluZUhlaWdodCkgKyBmb250UHJvcGVydGllcy5hc2NlbnQ7XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblggKyB4U2hhZG93T2Zmc2V0LCBsaW5lUG9zaXRpb25ZICsgeVNoYWRvd09mZnNldCArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9zZXQgY2FudmFzIHRleHQgc3R5bGVzXG4gICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmZpbGw7XG5cbiAgICAvL2RyYXcgbGluZXMgbGluZSBieSBsaW5lXG4gICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICBpZiAoc3R5bGUuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHlsZS5zdHJva2UgJiYgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVUZXh0dXJlKCk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLnRyaW0ueCA9IDA7XG4gICAgdGV4dHVyZS50cmltLnkgPSAtdGhpcy5fc3R5bGUucGFkZGluZztcblxuICAgIHRleHR1cmUudHJpbS53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRleHR1cmUudHJpbS5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgLSB0aGlzLl9zdHlsZS5wYWRkaW5nKjI7XG5cbiAgICB0aGlzLl93aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuX2hlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZW1pdCgndXBkYXRlJywgIHRleHR1cmUuYmFzZVRleHR1cmUpO1xuXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKi9cblRleHQucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgLy90aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUucmVuZGVyV2ViR0wuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgIC8vICAgdGhpcy5yZXNvbHV0aW9uID0gMS8vcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGFzY2VudCwgZGVzY2VudCBhbmQgZm9udFNpemUgb2YgYSBnaXZlbiBmb250U3R5bGVcbiAqXG4gKiBAcGFyYW0gZm9udFN0eWxlIHtvYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5kZXRlcm1pbmVGb250UHJvcGVydGllcyA9IGZ1bmN0aW9uIChmb250U3R5bGUpXG57XG4gICAgdmFyIHByb3BlcnRpZXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXTtcblxuICAgIGlmICghcHJvcGVydGllcylcbiAgICB7XG4gICAgICAgIHByb3BlcnRpZXMgPSB7fTtcblxuICAgICAgICB2YXIgY2FudmFzID0gVGV4dC5mb250UHJvcGVydGllc0NhbnZhcztcbiAgICAgICAgdmFyIGNvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dDtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgdmFyIHdpZHRoID0gTWF0aC5jZWlsKGNvbnRleHQubWVhc3VyZVRleHQoJ3xNw4lxJykud2lkdGgpO1xuICAgICAgICB2YXIgYmFzZWxpbmUgPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnTScpLndpZHRoKTtcbiAgICAgICAgdmFyIGhlaWdodCA9IDIgKiBiYXNlbGluZTtcblxuICAgICAgICBiYXNlbGluZSA9IGJhc2VsaW5lICogMS40IHwgMDtcblxuICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjZjAwJztcbiAgICAgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgY29udGV4dC50ZXh0QmFzZWxpbmUgPSAnYWxwaGFiZXRpYyc7XG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMwMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxUZXh0KCd8TcOJcScsIDAsIGJhc2VsaW5lKTtcblxuICAgICAgICB2YXIgaW1hZ2VkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCkuZGF0YTtcbiAgICAgICAgdmFyIHBpeGVscyA9IGltYWdlZGF0YS5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lID0gd2lkdGggKiA0O1xuXG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIHZhciBpZHggPSAwO1xuICAgICAgICB2YXIgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGFzY2VudC4gc2NhbiBmcm9tIHRvcCB0byBib3R0b20gdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGJhc2VsaW5lOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggKz0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuYXNjZW50ID0gYmFzZWxpbmUgLSBpO1xuXG4gICAgICAgIGlkeCA9IHBpeGVscyAtIGxpbmU7XG4gICAgICAgIHN0b3AgPSBmYWxzZTtcblxuICAgICAgICAvLyBkZXNjZW50LiBzY2FuIGZyb20gYm90dG9tIHRvIHRvcCB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSBoZWlnaHQ7IGkgPiBiYXNlbGluZTsgaS0tKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGluZTsgaiArPSA0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0b3ApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWR4IC09IGxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLmRlc2NlbnQgPSBpIC0gYmFzZWxpbmU7XG4gICAgICAgIHByb3BlcnRpZXMuZm9udFNpemUgPSBwcm9wZXJ0aWVzLmFzY2VudCArIHByb3BlcnRpZXMuZGVzY2VudDtcblxuICAgICAgICBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXSA9IHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgbmV3bGluZXMgdG8gYSBzdHJpbmcgdG8gaGF2ZSBpdCBvcHRpbWFsbHkgZml0IGludG8gdGhlIGhvcml6b250YWxcbiAqIGJvdW5kcyBzZXQgYnkgdGhlIFRleHQgb2JqZWN0J3Mgd29yZFdyYXBXaWR0aCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUud29yZFdyYXAgPSBmdW5jdGlvbiAodGV4dClcbntcbiAgICAvLyBHcmVlZHkgd3JhcHBpbmcgYWxnb3JpdGhtIHRoYXQgd2lsbCB3cmFwIHdvcmRzIGFzIHRoZSBsaW5lIGdyb3dzIGxvbmdlclxuICAgIC8vIHRoYW4gaXRzIGhvcml6b250YWwgYm91bmRzLlxuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgICB2YXIgd29yZFdyYXBXaWR0aCA9IHRoaXMuX3N0eWxlLndvcmRXcmFwV2lkdGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcGFjZUxlZnQgPSB3b3JkV3JhcFdpZHRoO1xuICAgICAgICB2YXIgd29yZHMgPSBsaW5lc1tpXS5zcGxpdCgnICcpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdvcmRzLmxlbmd0aDsgaisrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgd29yZFdpZHRoID0gdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KHdvcmRzW2pdKS53aWR0aDtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGhXaXRoU3BhY2UgPSB3b3JkV2lkdGggKyB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQoJyAnKS53aWR0aDtcbiAgICAgICAgICAgIGlmIChqID09PSAwIHx8IHdvcmRXaWR0aFdpdGhTcGFjZSA+IHNwYWNlTGVmdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHByaW50aW5nIHRoZSBuZXdsaW5lIGlmIGl0J3MgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxpbmUgdGhhdCBpc1xuICAgICAgICAgICAgICAgIC8vIGdyZWF0ZXIgdGhhbiB0aGUgd29yZCB3cmFwIHdpZHRoLlxuICAgICAgICAgICAgICAgIGlmIChqID4gMClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdvcmRzW2pdO1xuICAgICAgICAgICAgICAgIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGggLSB3b3JkV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0IC09IHdvcmRXaWR0aFdpdGhTcGFjZTtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyAnICsgd29yZHNbal07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaSA8IGxpbmVzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBUZXh0IGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIFRleHRcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIHJldHVybiBTcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcy5jYWxsKHRoaXMsIG1hdHJpeCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dCBvYmplY3QuXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9dHJ1ZV0ge2Jvb2xlYW59IHdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZVRleHR1cmUpXG57XG4gICAgLy8gbWFrZSBzdXJlIHRvIHJlc2V0IHRoZSB0aGUgY29udGV4dCBhbmQgY2FudmFzLi4gZG9udCB3YW50IHRoaXMgaGFuZ2luZyBhcm91bmQgaW4gbWVtb3J5IVxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xuXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG59O1xuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9GaWx0ZXJNYW5hZ2VyJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgdGVtcFJlY3QgPSBuZXcgbWF0aC5SZWN0YW5nbGUoKTtcblxuLyoqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBCYXNlUmVuZGVyVGV4dHVyZSBzaG91bGQgYmUgcHJlbG9hZGVkXG4gKiBvdGhlcndpc2UgYmxhY2sgcmVjdGFuZ2xlcyB3aWxsIGJlIGRyYXduIGluc3RlYWQuXG4gKlxuICogQSBCYXNlUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIEJhc2VyZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIDgwMCwgNjAwKTtcbiAqIHZhciBzcHJpdGUgPSBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJzcGluT2JqXzAxLnBuZ1wiKTtcbiAqXG4gKiBzcHJpdGUucG9zaXRpb24ueCA9IDgwMC8yO1xuICogc3ByaXRlLnBvc2l0aW9uLnkgPSA2MDAvMjtcbiAqIHNwcml0ZS5hbmNob3IueCA9IDAuNTtcbiAqIHNwcml0ZS5hbmNob3IueSA9IDAuNTtcbiAqXG4gKiBCYXNlcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgQmFzZXJlbmRlclRleHR1cmVcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgZm9yIHRoaXMgQmFzZVJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgaWYgKCFyZW5kZXJlcilcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNyZWF0ZSBCYXNlUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgbnVsbCwgc2NhbGVNb2RlKTtcbiAgIFxuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAxMDA7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OOztcbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIERyYXcvcmVuZGVyIHRoZSBnaXZlbiBEaXNwbGF5T2JqZWN0IG9udG8gdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheU9iamVjdCBhbmQgZGVzY2VuZGVudHMgYXJlIHRyYW5zZm9ybWVkIGR1cmluZyB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBJZiBgdXBkYXRlVHJhbnNmb3JtYCBpcyB0cnVlIHRoZW4gdGhlIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkIGJlZm9yZSB0aGVcbiAgICAgKiBtZXRob2QgcmV0dXJucy4gT3RoZXJ3aXNlIGl0IGlzIHVwIHRvIHRoZSBjYWxsaW5nIGNvZGUgdG8gY29ycmVjdGx5IHVzZSBvciByZXNldFxuICAgICAqIHRoZSB0cmFuc2Zvcm1lZCBkaXNwbGF5IG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgaXMgYWx3YXlzIHJlbmRlcmVkIHdpdGggYSB3b3JsZEFscGhhIHZhbHVlIG9mIDEuXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAgICAgKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBPcHRpb25hbCBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIGRpc3BsYXkgb2JqZWN0IGJlZm9yZSByZW5kZXJpbmcuXG4gICAgICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICAgICAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gICAgICogIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkLiBOb3QgcmVzdG9yaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBhIGxpdHRsZSBmYXN0ZXIuXG4gICAgICovXG4gICAgdGhpcy5yZW5kZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgQmFzZVJlbmRlclRleHR1cmUgdXNlcy4gQSBCYXNlUmVuZGVyVGV4dHVyZSBjYW4gb25seSBiZWxvbmcgdG8gb25lIHJlbmRlcmVyIGF0IHRoZSBtb21lbnQgaWYgaXRzIHdlYkdMLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgUmVuZGVyVGFyZ2V0KGdsLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5zY2FsZU1vZGUsIHRoaXMucmVzb2x1dGlvbik7Ly8sIHRoaXMudGhpcy5zY2FsZU1vZGUpO1xuICAgICAgICB0aGlzLl9nbFRleHR1cmVzW2dsLmlkXSA9ICB0aGlzLnRleHR1cmVCdWZmZXIudGV4dHVyZTtcbiAgICAgICAgXG4gICAgICAgIC8vVE9ETyByZWZhY3RvciBmaWx0ZXIgbWFuYWdlci4uIGFzIHJlYWxseSBpdHMgbm8gbG9uZ2VyIGEgbWFuYWdlciBpZiB3ZSB1c2UgaXQgaGVyZS4uXG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJXZWJHTDtcblxuICAgICAgICAvLyB0aGUgY3JlYXRpb24gb2YgYSBmaWx0ZXIgbWFuYWdlciB1bmJpbmRzIHRoZSBidWZmZXJzLi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbiAgICAgICAgaWYodGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0KXRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJDYW52YXM7XG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIodGhpcy53aWR0aCogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbn1cblxuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlVGV4dHVyZS5wcm90b3R5cGUpO1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzZVJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VSZW5kZXJUZXh0dXJlO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGlmICh3aWR0aCA9PT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT09IHRoaXMuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5maWx0ZXJNYW5hZ2VyKVxuICAgIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLnJlbmRlcmVyLmdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcihmYWxzZSwgZGVzdGluYXRpb25GcmFtZSk7XG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gKHVwZGF0ZVRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSA/IHVwZGF0ZVRyYW5zZm9ybSA6IHRydWU7Ly8hdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnRyYW5zZm9ybSA9IG1hdHJpeDtcblxuICAgIC8vVE9ETyBub3QgYSBmYW4gdGhhdCB0aGlzIGlzIGhlcmUuLi4gaXQgd2lsbCBtb3ZlIVxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5hY3RpdmF0ZSgpO1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgaWYgKHVwZGF0ZVRyYW5zZm9ybSlcbiAgICB7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIG1hdHJpeCBvZiB0aGUgZGlzcGxhdHlPYmplY3QuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmlkZW50aXR5KCk7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgICAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRlbXBSZWN0LndpZHRoID0gZnJhbWUuaGVpZ2h0O1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IGZyYW1lLndpZHRoO1xuICAgXG4gICAgLy9UT0RPIHJlbmFtZSB0ZXh0dXJlQnVmZmVyIHRvIHJlbmRlclRhcmdldC4uXG4gICAgdmFyIHRlbXAgPSAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyID0gdGhpcy5maWx0ZXJNYW5hZ2VyO1xuICAgIFxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKGZyYW1lLCB0ZW1wUmVjdCk7XG4gICAgY29uc29sZS5sb2coZGlzcGxheU9iamVjdClcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgdGhpcy50ZXh0dXJlQnVmZmVyLCBjbGVhcik7XG5cbiAgIC8vIGNvbnNvbGUubG9nKFwiUkVOREVSSU5HIFwiKTtcbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0ZW1wO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXJdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChmcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAhIXVwZGF0ZVRyYW5zZm9ybTtcblxuICAgIHZhciB3dCA9IHRlbXBNYXRyaXg7XG5cbiAgICB3dC5pZGVudGl0eSgpO1xuXG4gICAgaWYgKG1hdHJpeClcbiAgICB7XG4gICAgICAgIHd0LmFwcGVuZChtYXRyaXgpO1xuICAgIH1cblxuXG4gICAgd3QudHggKz0gZnJhbWUueDtcbiAgICB3dC50eSArPSBmcmFtZS55O1xuXG4gICAgdmFyIGNhY2hlZFd0ID0gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybTtcbiAgICBcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gd3Q7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgdmFyIGksIGo7XG5cbiAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgXG4vLyAgICB0aGlzLnRleHR1cmVCdWZmZXIuXG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dDtcblxuICAgIHZhciByZWFsUmVzb2x1dGlvbiA9IHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHJlYWxSZXNvbHV0aW9uO1xuXG4gICAgaWYoZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9PT0gd3QpXG4gICAge1xuICAgICAgICAvLyBmaXhlcyBjYWNoZUFzQml0bWFwIEhhcHBlbmluZyBkdXJpbmcgdGhlIGFib3ZlLi5cbiAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IGNhY2hlZFd0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gZGVzdHJveUJhc2Uge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCB0cnVlKTtcblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICAvLyBkZXN0cm95IHRoZSBmaWx0ZXJtYW5hZ2VyLi5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEltYWdlID0gZnVuY3Rpb24gKGZyYW1lKVxue1xuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLnNyYyA9IHRoaXMuZ2V0QmFzZTY0KGZyYW1lKTtcbiAgICByZXR1cm4gaW1hZ2U7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIEJhc2VSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRCYXNlNjQgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRDYW52YXMoZnJhbWUpLnRvRGF0YVVSTCgpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB0byBpdCBhbmQgdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBBIENhbnZhcyBlbGVtZW50IHdpdGggdGhlIHRleHR1cmUgcmVuZGVyZWQgb24uXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgIFxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgQ2FudmFzQnVmZmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHRlbXBDYW52YXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0RhdGEuZGF0YS5zZXQod2ViR0xQaXhlbHMpO1xuXG4gICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGZyYW1lLndpZHRoID09PSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLndpZHRoICYmIFxuICAgICAgICAgICBmcmFtZS5oZWlnaHQgPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIoZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcbiAgICAgICAgICAgIHZhciBjYW52YXNEYXRhID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNvbnRleHQuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggICogcmVzb2x1dGlvbiwgZnJhbWUueSAqIHJlc29sdXRpb24sIGZyYW1lLndpZHRoICogcmVzb2x1dGlvbiwgZnJhbWUuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0ZW1wQ2FudmFzLmNhbnZhcztcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKCBmcmFtZSApXG57XG4gICAgaWYoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgZnJhbWUud2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS53aWR0aDtcbiAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IGZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YShmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoZnJhbWUsIHgsIHkpXG57XG4gICAgdGVtcFJlY3QueCA9IHg7XG4gICAgdGVtcFJlY3QueSA9IHk7XG4gICAgdGVtcFJlY3Qud2lkdGggPSAxIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZihmcmFtZSlcbiAgICB7XG4gICAgICAgIHRlbXBSZWN0LnggKz0gZnJhbWUueDtcbiAgICAgICAgdGVtcFJlY3QueSArPSBmcmFtZS55O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFBpeGVscyh0ZW1wUmVjdCk7XG59O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZS4gQWxsIHRleHR1cmVzIGhhdmUgYSBiYXNlIHRleHR1cmUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBmb3IgZGV2aWNlcyB3aXRoIGRpZmZlcmVudCBwaXhlbCByYXRpb3NcbiAqL1xuZnVuY3Rpb24gQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnVpZCA9IHV0aWxzLnVpZCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgYmFzZSB0ZXh0dXJlIHNldCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAxMDA7XG5cbiAgICAvLyBUT0RPIGRvY3NcbiAgICAvLyB1c2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgZGltZW5zaW9ucyBvZiB0aGUgc291cmNlXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIHdpZHRoIG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsV2lkdGggPSAxMDA7XG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIGhlaWdodCBvZiB0aGUgc291cmNlIG9mIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucmVhbEhlaWdodCA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlIHRvIGFwcGx5IHdoZW4gc2NhbGluZyB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlNDQUxFX01PREVTLkxJTkVBUlxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSBvbmNlIHRoZSBiYXNlIHRleHR1cmUgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG5ldmVyIHRydWUgaWYgdGhlIHVuZGVybHlpbmcgc291cmNlIGZhaWxzIHRvIGxvYWQgb3IgaGFzIG5vIHRleHR1cmUgZGF0YS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIGlmIHRoZSBzb3VyY2UgaXMgY3VycmVudGx5IGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBJZiBhbiBJbWFnZSBzb3VyY2UgaXMgbG9hZGluZyB0aGUgJ2xvYWRlZCcgb3IgJ2Vycm9yJyBldmVudCB3aWxsIGJlXG4gICAgICogZGlzcGF0Y2hlZCB3aGVuIHRoZSBvcGVyYXRpb24gZW5kcy4gQW4gdW5kZXJ5bGluZyBzb3VyY2UgdGhhdCBpc1xuICAgICAqIGltbWVkaWF0ZWx5LWF2YWlsYWJsZSBieXBhc3NlcyBsb2FkaW5nIGVudGlyZWx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGltYWdlIHNvdXJjZSB0aGF0IGlzIHVzZWQgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogVE9ETzogTWFrZSB0aGlzIGEgc2V0dGVyIHRoYXQgY2FsbHMgbG9hZFNvdXJjZSgpO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SW1hZ2V8Q2FudmFzfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuc291cmNlID0gbnVsbDsgLy8gc2V0IGluIGxvYWRTb3VyY2UsIGlmIGF0IGFsbFxuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgaWYgUkdCIGNoYW5uZWxzIHNob3VsZCBiZSBwcmUtbXVsdGlwbGllZCBieSBBbHBoYSAgKFdlYkdMIG9ubHkpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgb3Igbm90IHRoZSB0ZXh0dXJlIGlzIGEgcG93ZXIgb2YgdHdvLCB0cnkgdG8gdXNlIHBvd2VyIG9mIHR3byB0ZXh0dXJlcyBhcyBtdWNoIGFzIHlvdSBjYW5cbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSBmYWxzZTtcblxuICAgIC8vIHVzZWQgZm9yIHdlYkdMXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgYSBtaXBtYXAgb2YgdGhpcyB0ZXh0dXJlIG5lZWRzIHRvIGJlIGdlbmVyYXRlZC4gVGhpcyB2YWx1ZSBuZWVkcyB0byBiZSBzZXQgYmVmb3JlIHRoZSB0ZXh0dXJlIGlzIHVzZWRcbiAgICAgKiBBbHNvIHRoZSB0ZXh0dXJlIG11c3QgYmUgYSBwb3dlciBvZiB0d28gc2l6ZSB0byB3b3JrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubWlwbWFwID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBBIG1hcCBvZiByZW5kZXJlciBJRHMgdG8gd2ViZ2wgdGV4dHVyZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIFdlYkdMVGV4dHVyZT59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbFRleHR1cmVzID0ge307XG4gICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5faWQgPSAwO1xuICAgIFxuICAgIC8vIGlmIG5vIHNvdXJjZSBwYXNzZWQgZG9uJ3QgdHJ5IHRvIGxvYWRcbiAgICBpZiAoc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5sb2FkU291cmNlKHNvdXJjZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZpbmlzaGVzIGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZGVkXG4gICAgICogQG1lbWJlcm9mIFBJWEkuQmFzZVRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZhaWxzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG59XG5cbkJhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdGV4dHVyZSBvbiBhbGwgdGhlIHdlYmdsIHJlbmRlcmVycywgdGhpcyBhbHNvIGFzc3VtZXMgdGhlIHNyYyBoYXMgY2hhbmdlZC5cbiAqXG4gKiBAZmlyZXMgdXBkYXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVhbFdpZHRoID0gdGhpcy5zb3VyY2UubmF0dXJhbFdpZHRoIHx8IHRoaXMuc291cmNlLndpZHRoO1xuICAgIHRoaXMucmVhbEhlaWdodCA9IHRoaXMuc291cmNlLm5hdHVyYWxIZWlnaHQgfHwgdGhpcy5zb3VyY2UuaGVpZ2h0O1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMucmVhbFdpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5yZWFsSGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSB1dGlscy5pc1Bvd2VyT2ZUd28odGhpcy5yZWFsV2lkdGgsIHRoaXMucmVhbEhlaWdodCk7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBMb2FkIGEgc291cmNlLlxuICpcbiAqIElmIHRoZSBzb3VyY2UgaXMgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSwgc3VjaCBhcyBhbiBpbWFnZSB0aGF0IG5lZWRzIHRvIGJlXG4gKiBkb3dubG9hZGVkLCB0aGVuIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmUgZGlzcGF0Y2hlZCBpbiB0aGUgZnV0dXJlXG4gKiBhbmQgYGhhc0xvYWRlZGAgd2lsbCByZW1haW4gZmFsc2UgYWZ0ZXIgdGhpcyBjYWxsLlxuICpcbiAqIFRoZSBsb2dpYyBzdGF0ZSBhZnRlciBjYWxsaW5nIGBsb2FkU291cmNlYCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IChlZy4gYGZyb21JbWFnZWAsIGBuZXcgQmFzZVRleHR1cmVgKSBpczpcbiAqXG4gKiAgICAgaWYgKHRleHR1cmUuaGFzTG9hZGVkKVxuIHtcbiAqICAgICAgICAvLyB0ZXh0dXJlIHJlYWR5IGZvciB1c2VcbiAqICAgICB9IGVsc2UgaWYgKHRleHR1cmUuaXNMb2FkaW5nKVxuIHtcbiAqICAgICAgICAvLyBsaXN0ZW4gdG8gJ2xvYWRlZCcgYW5kL29yICdlcnJvcicgZXZlbnRzIG9uIHRleHR1cmVcbiAqICAgICB9IGVsc2Uge1xuICogICAgICAgIC8vIG5vdCBsb2FkaW5nLCBub3QgZ29pbmcgdG8gbG9hZCBVTkxFU1MgdGhlIHNvdXJjZSBpcyByZWxvYWRlZFxuICogICAgICAgIC8vIChpdCBtYXkgc3RpbGwgbWFrZSBzZW5zZSB0byBsaXN0ZW4gdG8gdGhlIGV2ZW50cylcbiAqICAgICB9XG4gKlxuICogQHByb3RlY3RlZFxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmxvYWRTb3VyY2UgPSBmdW5jdGlvbiAoc291cmNlKVxue1xuICAgIHZhciB3YXNMb2FkaW5nID0gdGhpcy5pc0xvYWRpbmc7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKHdhc0xvYWRpbmcgJiYgdGhpcy5zb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmVycm9yID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcblxuICAgIC8vIEFwcGx5IHNvdXJjZSBpZiBsb2FkZWQuIE90aGVyd2lzZSBzZXR1cCBhcHByb3ByaWF0ZSBsb2FkaW5nIG1vbml0b3JzLlxuICAgIGlmICgodGhpcy5zb3VyY2UuY29tcGxldGUgfHwgdGhpcy5zb3VyY2UuZ2V0Q29udGV4dCkgJiYgdGhpcy5zb3VyY2Uud2lkdGggJiYgdGhpcy5zb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFzb3VyY2UuZ2V0Q29udGV4dClcbiAgICB7XG5cbiAgICAgICAgLy8gSW1hZ2UgZmFpbCAvIG5vdCByZWFkeVxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgdmFyIHNjb3BlID0gdGhpcztcblxuICAgICAgICBzb3VyY2Uub25sb2FkID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgIHNjb3BlLmVtaXQoJ2xvYWRlZCcsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzb3VyY2Uub25lcnJvciA9IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXNjb3BlLmlzTG9hZGluZylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuZW1pdCgnZXJyb3InLCBzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUGVyIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI3RoZS1pbWctZWxlbWVudFxuICAgICAgICAvLyAgIFwiVGhlIHZhbHVlIG9mIGBjb21wbGV0ZWAgY2FuIHRodXMgY2hhbmdlIHdoaWxlIGEgc2NyaXB0IGlzIGV4ZWN1dGluZy5cIlxuICAgICAgICAvLyBTbyBjb21wbGV0ZSBuZWVkcyB0byBiZSByZS1jaGVja2VkIGFmdGVyIHRoZSBjYWxsYmFja3MgaGF2ZSBiZWVuIGFkZGVkLi5cbiAgICAgICAgLy8gTk9URTogY29tcGxldGUgd2lsbCBiZSB0cnVlIGlmIHRoZSBpbWFnZSBoYXMgbm8gc3JjIHNvIGJlc3QgdG8gY2hlY2sgaWYgdGhlIHNyYyBpcyBzZXQuXG4gICAgICAgIGlmIChzb3VyY2UuY29tcGxldGUgJiYgc291cmNlLnNyYylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gLi5hbmQgaWYgd2UncmUgY29tcGxldGUgbm93LCBubyBuZWVkIGZvciBjYWxsYmFja3NcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiBhbnkgcHJldmlvdXMgc3Vic2NyaWJlcnMgcG9zc2libGVcbiAgICAgICAgICAgICAgICBpZiAod2FzTG9hZGluZylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZCBpbnRlcm5hbGx5IHRvIHVwZGF0ZSB0aGUgd2lkdGgsIGhlaWdodCwgYW5kIHNvbWUgb3RoZXIgdHJhY2tpbmcgdmFycyBvbmNlXG4gKiBhIHNvdXJjZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuX3NvdXJjZUxvYWRlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgYmFzZSB0ZXh0dXJlXG4gKlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuaW1hZ2VVcmwpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcbiAgICAgICAgZGVsZXRlIHV0aWxzLlRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcblxuICAgICAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgICAgICBpZiAoIW5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZS5zcmMgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdGhpcy5zb3VyY2UuX3BpeGlJZF07XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsO1xuXG4gICAgdGhpcy5kaXNwb3NlKCk7XG59O1xuXG4vKipcbiAqIEZyZWVzIHRoZSB0ZXh0dXJlIGZyb20gV2ViR0wgbWVtb3J5IHdpdGhvdXQgZGVzdHJveWluZyB0aGlzIHRleHR1cmUgb2JqZWN0LlxuICogVGhpcyBtZWFucyB5b3UgY2FuIHN0aWxsIHVzZSB0aGUgdGV4dHVyZSBsYXRlciB3aGljaCB3aWxsIHVwbG9hZCBpdCB0byBHUFVcbiAqIG1lbW9yeSBhZ2Fpbi5cbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmVtaXQoJ2Rpc3Bvc2UnLCB0aGlzKTtcblxuICAgIC8vIHRoaXMgc2hvdWxkIG5vIGxvbmdlciBiZSBuZWVkZWQsIHRoZSByZW5kZXJlcnMgc2hvdWxkIGNsZWFudXAgYWxsIHRoZSBnbCB0ZXh0dXJlcy5cbiAgICAvLyB0aGlzLl9nbFRleHR1cmVzID0ge307XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHNvdXJjZSBpbWFnZSBvZiB0aGUgdGV4dHVyZS5cbiAqIFRoZSBvcmlnaW5hbCBzb3VyY2UgbXVzdCBiZSBhbiBJbWFnZSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBuZXdTcmMge3N0cmluZ30gdGhlIHBhdGggb2YgdGhlIGltYWdlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGVTb3VyY2VJbWFnZSA9IGZ1bmN0aW9uIChuZXdTcmMpXG57XG4gICAgdGhpcy5zb3VyY2Uuc3JjID0gbmV3U3JjO1xuXG4gICAgdGhpcy5sb2FkU291cmNlKHRoaXMuc291cmNlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGJhc2UgdGV4dHVyZSBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSBiYXNlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBjcmVhdGVkIGFuZCBsb2FkZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlVXJsIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gU2hvdWxkIHVzZSBhbm9ueW1vdXMgQ09SUz8gRGVmYXVsdHMgdG8gdHJ1ZSBpZiB0aGUgVVJMIGlzIG5vdCBhIGRhdGEtVVJJLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF07XG5cbiAgICBpZiAoY3Jvc3NvcmlnaW4gPT09IHVuZGVmaW5lZCAmJiBpbWFnZVVybC5pbmRleE9mKCdkYXRhOicpICE9PSAwKVxuICAgIHtcbiAgICAgICAgY3Jvc3NvcmlnaW4gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICAvLyBuZXcgSW1hZ2UoKSBicmVha3MgdGV4IGxvYWRpbmcgaW4gc29tZSB2ZXJzaW9ucyBvZiBDaHJvbWUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjM4MDcxXG4gICAgICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpOy8vZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgICAgIGlmIChjcm9zc29yaWdpbilcbiAgICAgICAge1xuICAgICAgICAgICAgaW1hZ2UuY3Jvc3NPcmlnaW4gPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGltYWdlLCBzY2FsZU1vZGUpO1xuICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IGltYWdlVXJsO1xuXG4gICAgICAgIGltYWdlLnNyYyA9IGltYWdlVXJsO1xuXG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gYmFzZVRleHR1cmU7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4gQDJ4IGF0IHRoZSBlbmQgb2YgdGhlIHVybCB3ZSBhcmUgZ29pbmcgdG8gYXNzdW1lIGl0cyBhIGhpZ2hyZXMgaW1hZ2VcbiAgICAgICAgYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHV0aWxzLmdldFJlc29sdXRpb25PZlVybChpbWFnZVVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIGlmICghY2FudmFzLl9waXhpSWQpXG4gICAge1xuICAgICAgICBjYW52YXMuX3BpeGlJZCA9ICdjYW52YXNfJyArIHV0aWxzLnVpZCgpO1xuICAgIH1cblxuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbY2FudmFzLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGNhbnZhcywgc2NhbGVNb2RlKTtcbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuIiwidmFyIEJhc2VSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbi8qKlxuICogQSBSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIFJlbmRlclRleHR1cmUgdGFrZXMgYSBzbmFwc2hvdCBvZiBhbnkgRGlzcGxheSBPYmplY3QgZ2l2ZW4gdG8gaXRzIHJlbmRlciBtZXRob2QuIFRoZSBwb3NpdGlvblxuICogYW5kIHJvdGF0aW9uIG9mIHRoZSBnaXZlbiBEaXNwbGF5IE9iamVjdHMgaXMgaWdub3JlZC4gRm9yIGV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDEwMjQsIDEwMjQsIHsgdmlldzogY2FudmFzLCByYXRpbzogMSB9KTtcbiAqIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKHNwcml0ZSk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgU3ByaXRlIGluIHRoaXMgY2FzZSB3aWxsIGJlIHJlbmRlcmVkIHRvIGEgcG9zaXRpb24gb2YgMCwwLiBUbyByZW5kZXIgdGhpcyBzcHJpdGUgYXQgaXRzIGFjdHVhbFxuICogcG9zaXRpb24gYSBDb250YWluZXIgc2hvdWxkIGJlIHVzZWQ6XG4gKlxuICogYGBganNcbiAqIHZhciBkb2MgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqXG4gKiBkb2MuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqXG4gKiByZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBSZW5kZXJUZXh0dXJlXG4gKiBAcGFyYW0gW3dpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtoZWlnaHQ9MTAwXSB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtzY2FsZU1vZGVdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIFtyZXNvbHV0aW9uPTFdIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICovXG5mdW5jdGlvbiBSZW5kZXJUZXh0dXJlKGJhc2VSZW5kZXJUZXh0dXJlLCBmcmFtZSlcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIFJlbmRlclRleHR1cmUsIHlvdSBtdXN0IHBhc3MgYSByZW5kZXJlciBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIG9iamVjdCB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtCYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICBUZXh0dXJlLmNhbGwodGhpcyxcbiAgICAgICAgYmFzZVJlbmRlclRleHR1cmUsXG4gICAgICAgIGZyYW1lIFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fdXBkYXRlVXZzKCk7XG59XG5cblJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlLnByb3RvdHlwZSk7XG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgUmVuZGVyVGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gdXBkYXRlQmFzZSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBiYXNlVGV4dHVyZS53aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBiZSByZXNpemVkIGFzIHdlbGw/XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB1cGRhdGVCYXNlKVxue1xuICAgXG4gICAgLy9UT0RPIC0gY291bGQgYmUgbm90IHJlcXVpcmVkLi5cbiAgICB0aGlzLnZhbGlkID0gKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTtcblxuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy5jcm9wLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jcm9wLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh1cGRhdGVCYXNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5yZXNpemUod2lkdGgsIGhlaWdodClcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLmNsZWFyKHRoaXMuZnJhbWUpXG4gICAgXG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5iYXNlVGV4dHVyZS5yZW5kZXIodGhpcy5mcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIHRoaXMgdGV4dHVyZS4gSXQgd29ya3MgYnkgY2FsbGluZyBSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0QmFzZTY0LmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0Q2FudmFzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRDYW52YXModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgdGhlIGVudGlyZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbHModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgYSBwaXhlbCB3aXRoaW4gdGhlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbCh0aGlzLmZyYW1lLCB4LCB5KTtcbn07XG5cblJlbmRlclRleHR1cmUuY3JlYXRlID0gZnVuY3Rpb24ocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICByZXR1cm4gbmV3IFJlbmRlclRleHR1cmUobmV3IEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pKTtcbn1cblxuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzID0gcmVxdWlyZSgnLi9UZXh0dXJlVXZzJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZSBvciBwYXJ0IG9mIGFuIGltYWdlLiBJdCBjYW5ub3QgYmUgYWRkZWRcbiAqIHRvIHRoZSBkaXNwbGF5IGxpc3QgZGlyZWN0bHkuIEluc3RlYWQgdXNlIGl0IGFzIHRoZSB0ZXh0dXJlIGZvciBhIFNwcml0ZS4gSWYgbm8gZnJhbWUgaXMgcHJvdmlkZWQgdGhlbiB0aGUgd2hvbGUgaW1hZ2UgaXMgdXNlZC5cbiAqXG4gKiBZb3UgY2FuIGRpcmVjdGx5IGNyZWF0ZSBhIHRleHR1cmUgZnJvbSBhbiBpbWFnZSBhbmQgdGhlbiByZXVzZSBpdCBtdWx0aXBsZSB0aW1lcyBsaWtlIHRoaXMgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIHZhciBzcHJpdGUxID0gbmV3IFBJWEkuU3ByaXRlKHRleHR1cmUpO1xuICogdmFyIHNwcml0ZTIgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gYmFzZVRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV9IFRoZSBiYXNlIHRleHR1cmUgc291cmNlIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZSBmcm9tXG4gKiBAcGFyYW0gW2ZyYW1lXSB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5nbGUgZnJhbWUgb2YgdGhlIHRleHR1cmUgdG8gc2hvd1xuICogQHBhcmFtIFtjcm9wXSB7UElYSS5SZWN0YW5nbGV9IFRoZSBhcmVhIG9mIG9yaWdpbmFsIHRleHR1cmVcbiAqIEBwYXJhbSBbdHJpbV0ge1BJWEkuUmVjdGFuZ2xlfSBUcmltbWVkIHRleHR1cmUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gW3JvdGF0ZV0ge2Jvb2xlYW59IGluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXMgKCB1c2VkIGJ5IHRleHR1cmUgcGFja2VyIClcbiAqL1xuZnVuY3Rpb24gVGV4dHVyZShiYXNlVGV4dHVyZSwgZnJhbWUsIGNyb3AsIHRyaW0sIHJvdGF0ZSlcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIERvZXMgdGhpcyBUZXh0dXJlIGhhdmUgYW55IGZyYW1lIGRhdGEgYXNzaWduZWQgdG8gaXQ/XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubm9GcmFtZSA9IGZhbHNlO1xuXG4gICAgaWYgKCFmcmFtZSlcbiAgICB7XG4gICAgICAgIHRoaXMubm9GcmFtZSA9IHRydWU7XG4gICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuICAgIH1cblxuICAgIGlmIChiYXNlVGV4dHVyZSBpbnN0YW5jZW9mIFRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmFzZVRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy5iYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdHJpbSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy50cmltID0gdHJpbTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgdGhlIHJlbmRlcmVyIGtub3cgaWYgdGhlIHRleHR1cmUgaXMgdmFsaWQuIElmIGl0J3Mgbm90IHRoZW4gaXQgY2Fubm90IGJlIHJlbmRlcmVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHdpbGwgbGV0IGEgcmVuZGVyZXIga25vdyB0aGF0IGEgdGV4dHVyZSBoYXMgYmVlbiB1cGRhdGVkICh1c2VkIG1haW5seSBmb3Igd2ViR0wgdXYgdXBkYXRlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXF1aXJlc1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFdlYkdMIFVWIGRhdGEgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0dXJlIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIGFyZWEgb2YgdGhlIEJhc2VUZXh0dXJlIGltYWdlIHRvIGFjdHVhbGx5IGNvcHkgdG8gdGhlIENhbnZhcyAvIFdlYkdMIHdoZW4gcmVuZGVyaW5nLFxuICAgICAqIGlycmVzcGVjdGl2ZSBvZiB0aGUgYWN0dWFsIGZyYW1lIHNpemUgb3IgcGxhY2VtZW50ICh3aGljaCBjYW4gYmUgaW5mbHVlbmNlZCBieSB0cmltbWVkIHRleHR1cmUgYXRsYXNlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3JvcCA9IGNyb3AgfHwgZnJhbWU7Ly9uZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgcm90YXRlZCBieSA5MCBkZWdyZWVzXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb3RhdGUgPSAhIXJvdGF0ZTtcblxuICAgIGlmIChiYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICBmcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gZnJhbWUgd2Ugc2hvdWxkIG1vbml0b3IgZm9yIGFueSBiYXNlIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5vbigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZS5vbmNlKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZC4gVGhpcyBoYXBwZW5zIGlmIHRoZSBmcmFtZSBvciB0aGUgYmFzZVRleHR1cmUgaXMgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBldmVudCB1cGRhdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0dXJlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqL1xuICAgIGZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBmcmFtZTtcblxuICAgICAgICAgICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHRoaXMud2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMudHJpbSAmJiAhdGhpcy5yb3RhdGUgJiYgKGZyYW1lLnggKyBmcmFtZS53aWR0aCA+IHRoaXMuYmFzZVRleHR1cmUud2lkdGggfHwgZnJhbWUueSArIGZyYW1lLmhlaWdodCA+IHRoaXMuYmFzZVRleHR1cmUuaGVpZ2h0KSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHR1cmUgRXJyb3I6IGZyYW1lIGRvZXMgbm90IGZpdCBpbnNpZGUgdGhlIGJhc2UgVGV4dHVyZSBkaW1lbnNpb25zICcgKyB0aGlzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy90aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuc291cmNlICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuICAgICAgICAgICAgdGhpcy52YWxpZCA9IGZyYW1lICYmIGZyYW1lLndpZHRoICYmIGZyYW1lLmhlaWdodCAmJiB0aGlzLmJhc2VUZXh0dXJlLmhhc0xvYWRlZDtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJpbSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy50cmltLmhlaWdodDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS53aWR0aCA9IHRoaXMudHJpbS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JvcCA9IGZyYW1lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy52YWxpZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVVdnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhpcyB0ZXh0dXJlIG9uIHRoZSBncHUuXG4gKlxuICovXG5UZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYmFzZVRleHR1cmUudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgbG9hZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZUxvYWRlZCA9IGZ1bmN0aW9uIChiYXNlVGV4dHVyZSlcbntcbiAgICAvLyBUT0RPIHRoaXMgY29kZSBsb29rcyBjb25mdXNpbmcuLiBib28gdG8gYWJ1c2luZyBnZXR0ZXJzIGFuZCBzZXR0ZXJzcyFcbiAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMuX2ZyYW1lO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgdXBkYXRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLm9uQmFzZVRleHR1cmVVcGRhdGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZT1mYWxzZV0ge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZSlcbntcbiAgICBpZiAodGhpcy5iYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGlmIChkZXN0cm95QmFzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2ZyYW1lID0gbnVsbDtcbiAgICB0aGlzLl91dnMgPSBudWxsO1xuICAgIHRoaXMudHJpbSA9IG51bGw7XG4gICAgdGhpcy5jcm9wID0gbnVsbDtcblxuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIHRoaXMub2ZmKCdkaXNwb3NlJywgdGhpcy5kaXNwb3NlLCB0aGlzKTtcbiAgICB0aGlzLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRleHR1cmUgb2JqZWN0IHRoYXQgYWN0cyB0aGUgc2FtZSBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9XG4gKi9cblRleHR1cmUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUodGhpcy5iYXNlVGV4dHVyZSwgdGhpcy5mcmFtZSwgdGhpcy5jcm9wLCB0aGlzLnRyaW0sIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuX3VwZGF0ZVV2cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLl91dnMpXG4gICAge1xuICAgICAgICB0aGlzLl91dnMgPSBuZXcgVGV4dHVyZVV2cygpO1xuICAgIH1cblxuICAgIHRoaXMuX3V2cy5zZXQodGhpcy5jcm9wLCB0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLnJvdGF0ZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBUZXh0dXJlIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGNyb3Nzb3JpZ2luIHtib29sZWFufSBXaGV0aGVyIHJlcXVlc3RzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGNyb3Nzb3JpZ2luXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbiAgICAgICAgdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXSA9IHRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZScpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhcywgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW8ge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAodHlwZW9mIHZpZGVvID09PSAnc3RyaW5nJylcbiAgICB7XG4gICAgICAgIHJldHVybiBUZXh0dXJlLmZyb21WaWRlb1VybCh2aWRlbywgc2NhbGVNb2RlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgdmlkZW8gdXJsLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1VybCB7c3RyaW5nfVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gQSBUZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbVZpZGVvVXJsID0gZnVuY3Rpb24gKHZpZGVvVXJsLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh2aWRlb1VybCwgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEFkZHMgYSB0ZXh0dXJlIHRvIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLiBUaGlzIGNhY2hlIGlzIHNoYXJlZCBhY3Jvc3MgdGhlIHdob2xlIFBJWEkgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSBUZXh0dXJlIHRvIGFkZCB0byB0aGUgY2FjaGUuXG4gKiBAcGFyYW0gaWQge3N0cmluZ30gVGhlIGlkIHRoYXQgdGhlIHRleHR1cmUgd2lsbCBiZSBzdG9yZWQgYWdhaW5zdC5cbiAqL1xuVGV4dHVyZS5hZGRUZXh0dXJlVG9DYWNoZSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBpZClcbntcbiAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdID0gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgdGV4dHVyZSBmcm9tIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgb2YgdGhlIHRleHR1cmUgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0aGF0IHdhcyByZW1vdmVkXG4gKi9cblRleHR1cmUucmVtb3ZlVGV4dHVyZUZyb21DYWNoZSA9IGZ1bmN0aW9uIChpZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtpZF07XG5cbiAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcbiAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpZF07XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogQW4gZW1wdHkgdGV4dHVyZSwgdXNlZCBvZnRlbiB0byBub3QgaGF2ZSB0byBjcmVhdGUgbXVsdGlwbGUgZW1wdHkgdGV4dHVyZXMuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmUuRU1QVFkgPSBuZXcgVGV4dHVyZShuZXcgQmFzZVRleHR1cmUoKSk7XG4iLCJcbi8qKlxuICogQSBzdGFuZGFyZCBvYmplY3QgdG8gc3RvcmUgdGhlIFV2cyBvZiBhIHRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBUZXh0dXJlVXZzKClcbntcbiAgICB0aGlzLngwID0gMDtcbiAgICB0aGlzLnkwID0gMDtcblxuICAgIHRoaXMueDEgPSAxO1xuICAgIHRoaXMueTEgPSAwO1xuXG4gICAgdGhpcy54MiA9IDE7XG4gICAgdGhpcy55MiA9IDE7XG5cbiAgICB0aGlzLngzID0gMDtcbiAgICB0aGlzLnkzID0gMTtcblxuICAgIHRoaXMueHkwX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTFfdWludDMyID0gMDtcbiAgICB0aGlzLnh5Ml91aW50MzIgPSAwO1xuICAgIHRoaXMueHkzX3VpbnQzMiA9IDA7XG5cbiAgICB0aGlzLnV2c191aW50MzIgPSBuZXcgVWludDMyQXJyYXkoNClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlVXZzO1xuXG4vKipcbiAqIFNldHMgdGhlIHRleHR1cmUgVXZzIGJhc2VkIG9uIHRoZSBnaXZlbiBmcmFtZSBpbmZvcm1hdGlvblxuICogQHBhcmFtIGZyYW1lIHtQSVhJLlJlY3RhbmdsZX1cbiAqIEBwYXJhbSBiYXNlRnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIHJvdGF0ZSB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIGZyYW1lIGlzIHJvdGF0ZWRcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmVVdnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChmcmFtZSwgYmFzZUZyYW1lLCByb3RhdGUpXG57XG4gICAgdmFyIHR3ID0gYmFzZUZyYW1lLndpZHRoO1xuICAgIHZhciB0aCA9IGJhc2VGcmFtZS5oZWlnaHQ7XG5cbiAgICBpZihyb3RhdGUpXG4gICAge1xuICAgICAgICB0aGlzLngwID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUuaGVpZ2h0KSAvIHR3O1xuICAgICAgICB0aGlzLnkxID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkyID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gZnJhbWUueSAvIHRoO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMueDAgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MiA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gKGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQpIC8gdGg7XG4gICAgfVxuXG4gICAgdGhpcy51dnNfdWludDMyWzBdID0gKCgodGhpcy55MCAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngwICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbMV0gPSAoKCh0aGlzLnkxICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDEgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsyXSA9ICgoKHRoaXMueTIgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MiAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzNdID0gKCgodGhpcy55MyAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngzICogNjU1MzUpICYgMHhGRkZGKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBvZiBhIFtwbGF5aW5nXSBWaWRlby5cbiAqXG4gKiBWaWRlbyBiYXNlIHRleHR1cmVzIG1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kIGluIHRoZWlyIGNyZWF0aW9uIHByb2Nlc3MuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZCBpbiBzZXZlcmFsIHdheXMsIHN1Y2ggYXM6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwoJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0Jyk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh7IHNyYzogJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoWycvdmlkZW8ud2VibScsICcvdmlkZW8ubXA0J10pO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzKFtcbiAqICAgICB7IHNyYzogJy92aWRlby53ZWJtJywgbWltZTogJ3ZpZGVvL3dlYm0nIH0sXG4gKiAgICAgeyBzcmM6ICcvdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfVxuICogXSk7XG4gKiBgYGBcbiAqXG4gKiBTZWUgdGhlIFtcImRldXNcIiBkZW1vXShodHRwOi8vd3d3Lmdvb2Rib3lkaWdpdGFsLmNvbS9waXhpanMvZXhhbXBsZXMvZGV1cy8pLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5CYXNlVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzb3VyY2Uge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIFZpZGVvQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFzb3VyY2UpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHZpZGVvIHNvdXJjZSBlbGVtZW50IHNwZWNpZmllZC4nKTtcbiAgICB9XG5cbiAgICAvLyBob29rIGluIGhlcmUgdG8gY2hlY2sgaWYgdmlkZW8gaXMgYWxyZWFkeSBhdmFpbGFibGUuXG4gICAgLy8gQmFzZVRleHR1cmUgbG9va3MgZm9yIGEgc291cmNlLmNvbXBsZXRlIGJvb2xlYW4sIHBsdXMgd2lkdGggJiBoZWlnaHQuXG5cbiAgICBpZiAoKHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9FTk9VR0hfREFUQSB8fCBzb3VyY2UucmVhZHlTdGF0ZSA9PT0gc291cmNlLkhBVkVfRlVUVVJFX0RBVEEpICYmIHNvdXJjZS53aWR0aCAmJiBzb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgc291cmNlLmNvbXBsZXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBCYXNlVGV4dHVyZS5jYWxsKHRoaXMsIHNvdXJjZSwgc2NhbGVNb2RlKTtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCB0aGUgYmFzZSB0ZXh0dXJlIGF1dG9tYXRpY2FsbHkgdXBkYXRlIGl0c2VsZiwgc2V0IHRvIHRydWUgYnkgZGVmYXVsdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG5cbiAgICB0aGlzLl9vblVwZGF0ZSA9IHRoaXMuX29uVXBkYXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fb25DYW5QbGF5ID0gdGhpcy5fb25DYW5QbGF5LmJpbmQodGhpcyk7XG5cbiAgICBpZiAoIXNvdXJjZS5jb21wbGV0ZSlcbiAgICB7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgdGhpcy5fb25DYW5QbGF5KTtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICAvLyBzdGFydGVkIHBsYXlpbmcuLlxuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX29uUGxheVN0YXJ0LmJpbmQodGhpcykpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9vblBsYXlTdG9wLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHRoaXMuX19sb2FkZWQgPSBmYWxzZTtcbn1cblxuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZpZGVvQmFzZVRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFZpZGVvQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVGhlIGludGVybmFsIHVwZGF0ZSBsb29wIG9mIHRoZSB2aWRlbyBiYXNlIHRleHR1cmUsIG9ubHkgcnVucyB3aGVuIGF1dG9VcGRhdGUgaXMgc2V0IHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25VcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJ1bnMgdGhlIHVwZGF0ZSBsb29wIHdoZW4gdGhlIHZpZGVvIGlzIHJlYWR5IHRvIHBsYXlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5hdXRvVXBkYXRlKVxuICAgIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9vblVwZGF0ZSk7XG4gICAgICAgIHRoaXMuYXV0b1VwZGF0ZSA9IHRydWU7XG4gICAgfVxufTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIGEgcGF1c2UgZXZlbnQgaXMgdHJpZ2dlcmVkLCBzdG9wcyB0aGUgdXBkYXRlIGxvb3BcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gdGhlIHZpZGVvIGlzIGxvYWRlZCBhbmQgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vbkNhblBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX29uQ2FuUGxheSk7XG5cbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuc291cmNlLnZpZGVvV2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5zb3VyY2UudmlkZW9IZWlnaHQ7XG5cbiAgICAgICAgdGhpcy5zb3VyY2UucGxheSgpO1xuXG4gICAgICAgIC8vIHByZXZlbnQgbXVsdGlwbGUgbG9hZGVkIGRpc3BhdGNoZXMuLlxuICAgICAgICBpZiAoIXRoaXMuX19sb2FkZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX19sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5zb3VyY2UuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB0aGlzLnNvdXJjZS5fcGl4aUlkIF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNvdXJjZS5fcGl4aUlkO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIE1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlZpZGVvQmFzZVRleHR1cmV9XG4gKi9cblZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvID0gZnVuY3Rpb24gKHZpZGVvLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCF2aWRlby5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgdmlkZW8uX3BpeGlJZCA9ICd2aWRlb18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt2aWRlby5fcGl4aUlkXTtcblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBWaWRlb0Jhc2VUZXh0dXJlKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB2aWRlby5fcGl4aUlkIF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgQmFzZVRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIHZpZGVvIGVsZW1lbnQuXG4gKiBUaGlzIEJhc2VUZXh0dXJlIGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIGEgdGV4dHVyZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1NyYyB7c3RyaW5nfG9iamVjdHxzdHJpbmdbXXxvYmplY3RbXX0gVGhlIFVSTChzKSBmb3IgdGhlIHZpZGVvLlxuICogQHBhcmFtIFt2aWRlb1NyYy5zcmNdIHtzdHJpbmd9IE9uZSBvZiB0aGUgc291cmNlIHVybHMgZm9yIHRoZSB2aWRlb1xuICogQHBhcmFtIFt2aWRlb1NyYy5taW1lXSB7c3RyaW5nfSBUaGUgbWltZXR5cGUgb2YgdGhlIHZpZGVvIChlLmcuICd2aWRlby9tcDQnKS4gSWYgbm90IHNwZWNpZmllZFxuICogIHRoZSB1cmwncyBleHRlbnNpb24gd2lsbCBiZSB1c2VkIGFzIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgbWltZSB0eXBlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsID0gZnVuY3Rpb24gKHZpZGVvU3JjLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcblxuICAgIC8vIGFycmF5IG9mIG9iamVjdHMgb3Igc3RyaW5nc1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZpZGVvU3JjKSlcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlkZW9TcmMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyY1tpXS5zcmMgfHwgdmlkZW9TcmNbaV0sIHZpZGVvU3JjW2ldLm1pbWUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzaW5nbGUgb2JqZWN0IG9yIHN0cmluZ1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyYy5zcmMgfHwgdmlkZW9TcmMsIHZpZGVvU3JjLm1pbWUpKTtcbiAgICB9XG5cbiAgICB2aWRlby5sb2FkKCk7XG4gICAgdmlkZW8ucGxheSgpO1xuXG4gICAgcmV0dXJuIFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpO1xufTtcblxuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyA9IFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybDtcblxuZnVuY3Rpb24gY3JlYXRlU291cmNlKHBhdGgsIHR5cGUpXG57XG4gICAgaWYgKCF0eXBlKVxuICAgIHtcbiAgICAgICAgdHlwZSA9ICd2aWRlby8nICsgcGF0aC5zdWJzdHIocGF0aC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpO1xuXG4gICAgc291cmNlLnNyYyA9IHBhdGg7XG4gICAgc291cmNlLnR5cGUgPSB0eXBlO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn1cbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIC8vIEludGVybmFsIGV2ZW50IHVzZWQgYnkgY29tcG9zZWQgZW1pdHRlclxuICAgIFRJQ0sgPSAndGljayc7XG5cbi8qKlxuICogQSBUaWNrZXIgY2xhc3MgdGhhdCBydW5zIGFuIHVwZGF0ZSBsb29wIHRoYXQgb3RoZXIgb2JqZWN0cyBsaXN0ZW4gdG8uXG4gKiBUaGlzIGNsYXNzIGlzIGNvbXBvc2VkIGFyb3VuZCBhbiBFdmVudEVtaXR0ZXIgb2JqZWN0IHRvIGFkZCBsaXN0ZW5lcnNcbiAqIG1lYW50IGZvciBleGVjdXRpb24gb24gdGhlIG5leHQgcmVxdWVzdGVkIGFuaW1hdGlvbiBmcmFtZS5cbiAqIEFuaW1hdGlvbiBmcmFtZXMgYXJlIHJlcXVlc3RlZCBvbmx5IHdoZW4gbmVjZXNzYXJ5LFxuICogZS5nLiBXaGVuIHRoZSB0aWNrZXIgaXMgc3RhcnRlZCBhbmQgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlclxuICovXG5mdW5jdGlvbiBUaWNrZXIoKVxue1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0aWNrIG1ldGhvZCBib3VuZCB0byB0aWNrZXIgaW5zdGFuY2UuXG4gICAgICogVGhpcyBpcyBiZWNhdXNlIGluIGVhcmx5IDIwMTUsIEZ1bmN0aW9uLmJpbmRcbiAgICAgKiBpcyBzdGlsbCA2MCUgc2xvd2VyIGluIGhpZ2ggcGVyZm9ybWFuY2Ugc2NlbmFyaW9zLlxuICAgICAqIEFsc28gc2VwYXJhdGluZyBmcmFtZSByZXF1ZXN0cyBmcm9tIHVwZGF0ZSBtZXRob2RcbiAgICAgKiBzbyBsaXN0ZW5lcnMgbWF5IGJlIGNhbGxlZCBhdCBhbnkgdGltZSBhbmQgd2l0aFxuICAgICAqIGFueSBhbmltYXRpb24gQVBJLCBqdXN0IGludm9rZSB0aWNrZXIudXBkYXRlKHRpbWUpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90aWNrID0gZnVuY3Rpb24gX3RpY2sodGltZSkge1xuXG4gICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgICAgIGlmIChfdGhpcy5zdGFydGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBJbnZva2UgbGlzdGVuZXJzIG5vd1xuICAgICAgICAgICAgX3RoaXMudXBkYXRlKHRpbWUpO1xuICAgICAgICAgICAgLy8gTGlzdGVuZXIgc2lkZSBlZmZlY3RzIG1heSBoYXZlIG1vZGlmaWVkIHRpY2tlciBzdGF0ZS5cbiAgICAgICAgICAgIGlmIChfdGhpcy5zdGFydGVkICYmIF90aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgX3RoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMuX3RpY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGVtaXR0ZXIgdXNlZCB0byBmaXJlICd0aWNrJyBldmVudFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGN1cnJlbnQgZnJhbWUgcmVxdWVzdCBJRFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHZhbHVlIG1hbmFnZWQgYnkgbWluRlBTIHByb3BlcnR5IHNldHRlciBhbmQgZ2V0dGVyLlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gYWxsb3dlZCBtaWxsaXNlY29uZHMgYmV0d2VlbiB1cGRhdGVzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4RWxhcHNlZE1TID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhpcyB0aWNrZXIgc2hvdWxkIGludm9rZSB0aGUgbWV0aG9kXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdGFydH0gYXV0b21hdGljYWxseVxuICAgICAqIHdoZW4gYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9TdGFydCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2NhbGFyIHRpbWUgdmFsdWUgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgc2V0dGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI21pbkZQU31cbiAgICAgKiBhbmQgaXMgc2NhbGVkIHdpdGgge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0uXG4gICAgICogKipOb3RlOioqIFRoZSBjYXAgbWF5IGJlIGV4Y2VlZGVkIGJ5IHNjYWxpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZGVsdGFUaW1lID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRpbWUgZWxhcHNlZCBpbiBtaWxsaXNlY29uZHMgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogT3Bwb3NlZCB0byB3aGF0IHRoZSBzY2FsYXIge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9XG4gICAgICogaXMgYmFzZWQsIHRoaXMgdmFsdWUgaXMgbmVpdGhlciBjYXBwZWQgbm9yIHNjYWxlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEgLyBUQVJHRVRfRlBNU1xuICAgICAqL1xuICAgIHRoaXMuZWxhcHNlZE1TID0gMSAvIENPTlNULlRBUkdFVF9GUE1TOyAvLyBkZWZhdWx0IHRvIHRhcmdldCBmcmFtZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCB0aW1lIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjdXBkYXRlfSB3YXMgaW52b2tlZC5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGFsc28gcmVzZXQgaW50ZXJuYWxseSBvdXRzaWRlIG9mIGludm9raW5nXG4gICAgICogdXBkYXRlLCBidXQgb25seSB3aGVuIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gICAgICogSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERPTUhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgICogdGhpcyB2YWx1ZSB3aWxsIGhhdmUgYSBwcmVjaXNpb24gb2YgMSDCtXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5sYXN0VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBGYWN0b3Igb2YgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBTY2FsZXMgdGlja2VyLmRlbHRhVGltZSB0byB3aGF0IHdvdWxkIGJlXG4gICAgICogLy8gdGhlIGVxdWl2YWxlbnQgb2YgYXBwcm94aW1hdGVseSAxMjAgRlBTXG4gICAgICogdGlja2VyLnNwZWVkID0gMjtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5zcGVlZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBoYXMgYmVlbiBzdGFydGVkLlxuICAgICAqIGB0cnVlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogYGZhbHNlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0b3B9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBXaGlsZSBgZmFsc2VgLCB0aGlzIHZhbHVlIG1heSBjaGFuZ2UgdG8gYHRydWVgIGluIHRoZVxuICAgICAqIGV2ZW50IG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBiZWluZyBgdHJ1ZWBcbiAgICAgKiBhbmQgYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlja2VyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZXMgcGVyIHNlY29uZCBhdCB3aGljaCB0aGlzIHRpY2tlciBpcyBydW5uaW5nLlxuICAgICAqIFRoZSBkZWZhdWx0IGlzIGFwcHJveGltYXRlbHkgNjAgaW4gbW9zdCBtb2Rlcm4gYnJvd3NlcnMuXG4gICAgICogKipOb3RlOioqIFRoaXMgZG9lcyBub3QgZmFjdG9yIGluIHRoZSB2YWx1ZSBvZlxuICAgICAqIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3BlZWR9LCB3aGljaCBpcyBzcGVjaWZpY1xuICAgICAqIHRvIHNjYWxpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuZWxhcHNlZE1TO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIG1pbGxpc2Vjb25kcyBhbGxvd2VkIHRvXG4gICAgICogZWxhcHNlIGJldHdlZW4gaW52b2tpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9LlxuICAgICAqIFRoaXMgdmFsdWUgaXMgdXNlZCB0byBjYXAge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICAgICAqIGJ1dCBkb2VzIG5vdCBlZmZlY3QgdGhlIG1lYXN1cmVkIHZhbHVlIG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjRlBTfS5cbiAgICAgKiBXaGVuIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSBpdCBpcyBjbGFtcGVkIHRvIGEgdmFsdWUgYmV0d2VlblxuICAgICAqIGAwYCBhbmQgYFBJWEkuVEFSR0VUX0ZQTVMgKiAxMDAwYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSS50aWNrZXIuVGlja2VyI1xuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgbWluRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuX21heEVsYXBzZWRNUztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbihmcHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIENsYW1wOiAwIHRvIFRBUkdFVF9GUE1TXG4gICAgICAgICAgICB2YXIgbWluRlBNUyA9IE1hdGgubWluKE1hdGgubWF4KDAsIGZwcykgLyAxMDAwLCBDT05TVC5UQVJHRVRfRlBNUyk7XG4gICAgICAgICAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxIC8gbWluRlBNUztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lLlxuICogSWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHkgYmVlbiByZXF1ZXN0ZWQsIGFuZCBpZiB0aGUgaW50ZXJuYWxcbiAqIGVtaXR0ZXIgaGFzIGxpc3RlbmVycywgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3JlcXVlc3RJZk5lZWRlZCA9IGZ1bmN0aW9uIF9yZXF1ZXN0SWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICAvLyBlbnN1cmUgY2FsbGJhY2tzIGdldCBjb3JyZWN0IGRlbHRhXG4gICAgICAgIHRoaXMubGFzdFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX3RpY2spO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSBjYW5jZWxzIGEgcGVuZGluZyBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fY2FuY2VsSWZOZWVkZWQgPSBmdW5jdGlvbiBfY2FuY2VsSWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgIT09IG51bGwpXG4gICAge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZXF1ZXN0SWQpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiB0aGUgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQgaXQgY2hlY2tzIGlmIGEgZnJhbWUgaGFzIG5vdCBhbHJlYWR5XG4gKiBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbCBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMuIElmIHRoZXNlXG4gKiBjb25kaXRpb25zIGFyZSBtZXQsIGEgbmV3IGZyYW1lIGlzIHJlcXVlc3RlZC4gSWYgdGhlIHRpY2tlciBoYXMgbm90XG4gKiBiZWVuIHN0YXJ0ZWQsIGJ1dCBhdXRvU3RhcnQgaXMgYHRydWVgLCB0aGVuIHRoZSB0aWNrZXIgc3RhcnRzIG5vdyxcbiAqIGFuZCBjb250aW51ZXMgd2l0aCB0aGUgcHJldmlvdXMgY29uZGl0aW9ucyB0byByZXF1ZXN0IGEgbmV3IGZyYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3N0YXJ0SWZQb3NzaWJsZSA9IGZ1bmN0aW9uIF9zdGFydElmUG9zc2libGUoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5hdXRvU3RhcnQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29ufSBpbnRlcm5hbGx5IGZvciB0aGVcbiAqIGludGVybmFsICd0aWNrJyBldmVudC4gSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsXG4gKiBhbmQgaWYgc28gaXQgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGF0IHRoaXMgcG9pbnQuXG4gKlxuICogQHBhcmFtIGZuIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGFkZGVkIGZvciB1cGRhdGVzXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbihUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29uY2V9IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIG9uZSB1cGRhdGVcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZE9uY2UgPSBmdW5jdGlvbiBhZGRPbmNlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub25jZShUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29mZn0gaW50ZXJuYWxseSBmb3IgJ3RpY2snIGV2ZW50LlxuICogSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMgZm9yICd0aWNrJyBldmVudC5cbiAqIElmIGl0IGRvZXMsIHRoZW4gaXQgY2FuY2VscyB0aGUgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwYXJhbSBbZm5dIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIHJlbW92ZWRcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dCB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub2ZmKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIGlmICghdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgbGlzdGVuZXJzXG4gKiBhIG5ldyBhbmltYXRpb24gZnJhbWUgaXMgcmVxdWVzdGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiBzdGFydCgpXG57XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSB0aWNrZXIuIElmIHRoZSB0aWNrZXIgaGFzIHJlcXVlc3RlZFxuICogYW4gYW5pbWF0aW9uIGZyYW1lIGl0IGlzIGNhbmNlbGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uIHN0b3AoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2FuY2VsSWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRyaWdnZXJzIGFuIHVwZGF0ZS4gQW4gdXBkYXRlIGVudGFpbHMgc2V0dGluZyB0aGVcbiAqIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNlbGFwc2VkTVN9LFxuICogdGhlIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICogaW52b2tpbmcgYWxsIGxpc3RlbmVycyB3aXRoIGN1cnJlbnQgZGVsdGFUaW1lLFxuICogYW5kIHRoZW4gZmluYWxseSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbGFzdFRpbWV9XG4gKiB3aXRoIHRoZSB2YWx1ZSBvZiBjdXJyZW50VGltZSB0aGF0IHdhcyBwcm92aWRlZC5cbiAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgYW5pbWF0aW9uXG4gKiBmcmFtZSBjYWxsYmFja3MgaWYgdGhlIHRpY2tlciBpbnN0YW5jZSBoYXMgYmVlbiBzdGFydGVkXG4gKiBhbmQgbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqXG4gKiBAcGFyYW0gW2N1cnJlbnRUaW1lPXBlcmZvcm1hbmNlLm5vdygpXSB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9IHRoZSBjdXJyZW50IHRpbWUgb2YgZXhlY3V0aW9uXG4gKi9cblRpY2tlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKGN1cnJlbnRUaW1lKVxue1xuICAgIHZhciBlbGFwc2VkTVM7XG5cbiAgICAvLyBBbGxvdyBjYWxsaW5nIHVwZGF0ZSBkaXJlY3RseSB3aXRoIGRlZmF1bHQgY3VycmVudFRpbWUuXG4gICAgY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSB8fCBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAvLyBTYXZlIHVuY2FwcGVkIGVsYXBzZWRNUyBmb3IgbWVhc3VyZW1lbnRcbiAgICBlbGFwc2VkTVMgPSB0aGlzLmVsYXBzZWRNUyA9IGN1cnJlbnRUaW1lIC0gdGhpcy5sYXN0VGltZTtcblxuICAgIC8vIGNhcCB0aGUgbWlsbGlzZWNvbmRzIGVsYXBzZWQgdXNlZCBmb3IgZGVsdGFUaW1lXG4gICAgaWYgKGVsYXBzZWRNUyA+IHRoaXMuX21heEVsYXBzZWRNUylcbiAgICB7XG4gICAgICAgIGVsYXBzZWRNUyA9IHRoaXMuX21heEVsYXBzZWRNUztcbiAgICB9XG5cbiAgICB0aGlzLmRlbHRhVGltZSA9IGVsYXBzZWRNUyAqIENPTlNULlRBUkdFVF9GUE1TICogdGhpcy5zcGVlZDtcblxuICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgYWRkZWQgdG8gaW50ZXJuYWwgZW1pdHRlclxuICAgIHRoaXMuX2VtaXR0ZXIuZW1pdChUSUNLLCB0aGlzLmRlbHRhVGltZSk7XG5cbiAgICB0aGlzLmxhc3RUaW1lID0gY3VycmVudFRpbWU7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRpY2tlcjtcbiIsInZhciBUaWNrZXIgPSByZXF1aXJlKCcuL1RpY2tlcicpO1xuXG4vKipcbiAqIFRoZSBzaGFyZWQgdGlja2VyIGluc3RhbmNlIHVzZWQgYnkge0BsaW5rIFBJWEkuZXh0cmFzLk1vdmllQ2xpcH0uXG4gKiBhbmQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqIFRoZSBwcm9wZXJ0eSB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2F1dG9TdGFydH0gaXMgc2V0IHRvIGB0cnVlYFxuICogZm9yIHRoaXMgaW5zdGFuY2UuIFBsZWFzZSBmb2xsb3cgdGhlIGV4YW1wbGVzIGZvciB1c2FnZSwgaW5jbHVkaW5nXG4gKiBob3cgdG8gb3B0LW91dCBvZiBhdXRvLXN0YXJ0aW5nIHRoZSBzaGFyZWQgdGlja2VyLlxuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgdGlja2VyID0gUElYSS50aWNrZXIuc2hhcmVkO1xuICogLy8gU2V0IHRoaXMgdG8gcHJldmVudCBzdGFydGluZyB0aGlzIHRpY2tlciB3aGVuIGxpc3RlbmVycyBhcmUgYWRkZWQuXG4gKiAvLyBCeSBkZWZhdWx0IHRoaXMgaXMgdHJ1ZSBvbmx5IGZvciB0aGUgUElYSS50aWNrZXIuc2hhcmVkIGluc3RhbmNlLlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogLy8gRllJLCBjYWxsIHRoaXMgdG8gZW5zdXJlIHRoZSB0aWNrZXIgaXMgc3RvcHBlZC4gSXQgc2hvdWxkIGJlIHN0b3BwZWRcbiAqIC8vIGlmIHlvdSBoYXZlIG5vdCBhdHRlbXB0ZWQgdG8gcmVuZGVyIGFueXRoaW5nIHlldC5cbiAqIHRpY2tlci5zdG9wKCk7XG4gKiAvLyBDYWxsIHRoaXMgd2hlbiB5b3UgYXJlIHJlYWR5IGZvciBhIHJ1bm5pbmcgc2hhcmVkIHRpY2tlci5cbiAqIHRpY2tlci5zdGFydCgpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBZb3UgbWF5IHVzZSB0aGUgc2hhcmVkIHRpY2tlciB0byByZW5kZXIuLi5cbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDgwMCwgNjAwKTtcbiAqIHZhciBzdGFnZSA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogdmFyIGludGVyYWN0aW9uTWFuYWdlciA9IFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyKTtcbiAqIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocmVuZGVyZXIudmlldyk7XG4gKiB0aWNrZXIuYWRkKGZ1bmN0aW9uICh0aW1lKSB7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBPciB5b3UgY2FuIGp1c3QgdXBkYXRlIGl0IG1hbnVhbGx5LlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogdGlja2VyLnN0b3AoKTtcbiAqIGZ1bmN0aW9uIGFuaW1hdGUodGltZSkge1xuICogICAgIHRpY2tlci51cGRhdGUodGltZSk7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XG4gKiB9XG4gKiBhbmltYXRlKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAqXG4gKiBAdHlwZSB7UElYSS50aWNrZXIuVGlja2VyfVxuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbnZhciBzaGFyZWQgPSBuZXcgVGlja2VyKCk7XG5zaGFyZWQuYXV0b1N0YXJ0ID0gdHJ1ZTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudGlja2VyXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIHNoYXJlZDogc2hhcmVkLFxuICAgIFRpY2tlcjogVGlja2VyXG59O1xuIiwiLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuXG52YXIgR0xfTUFQID0ge307XG5cblxudmFyIGNyZWF0ZUluZGljZXNGb3JRdWFkcyA9IGZ1bmN0aW9uIChzaXplKVxue1xuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYXJyYXksIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgIFxuICAgIHZhciB0b3RhbEluZGljZXMgPSBzaXplICogNjtcblxuICAgIHZhciBpbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHRvdGFsSW5kaWNlcyk7XG5cblx0Ly8gZmlsbCB0aGUgaW5kaWNlcyB3aXRoIHRoZSBxdWFkcyB0byBkcmF3XG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCB0b3RhbEluZGljZXM7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kaWNlcztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzOyIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLnV0aWxzXG4gKi9cbnZhciB1dGlscyA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIF91aWQ6IDAsXG4gICAgX3NhaWRIZWxsbzogZmFsc2UsXG5cbiAgICBFdmVudEVtaXR0ZXI6ICAgcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIHBsdWdpblRhcmdldDogICByZXF1aXJlKCcuL3BsdWdpblRhcmdldCcpLFxuICAgIGFzeW5jOiAgICAgICAgICByZXF1aXJlKCdhc3luYycpLFxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllclxuICAgICAqXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllciB0byB1c2UuXG4gICAgICovXG4gICAgdWlkOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICsrdXRpbHMuX3VpZDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBoZXggY29sb3IgbnVtYmVyIHRvIGFuIFtSLCBHLCBCXSBhcnJheVxuICAgICAqXG4gICAgICogQHBhcmFtIGhleCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSAge251bWJlcltdfSBbb3V0PVtdXVxuICAgICAqIEByZXR1cm4ge251bWJlcltdfSBBbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIFtSLCBHLCBCXSBvZiB0aGUgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnJnYjogZnVuY3Rpb24gKGhleCwgb3V0KVxuICAgIHtcbiAgICAgICAgb3V0ID0gb3V0IHx8IFtdO1xuXG4gICAgICAgIG91dFswXSA9IChoZXggPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzFdID0gKGhleCA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIG91dFsyXSA9IChoZXggJiAweEZGKSAvIDI1NTtcblxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5nIGNvbG9yLlxuICAgICAqL1xuICAgIGhleDJzdHJpbmc6IGZ1bmN0aW9uIChoZXgpXG4gICAge1xuICAgICAgICBoZXggPSBoZXgudG9TdHJpbmcoMTYpO1xuICAgICAgICBoZXggPSAnMDAwMDAwJy5zdWJzdHIoMCwgNiAtIGhleC5sZW5ndGgpICsgaGV4O1xuXG4gICAgICAgIHJldHVybiAnIycgKyBoZXg7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgY29sb3IgYXMgYW4gW1IsIEcsIEJdIGFycmF5IHRvIGEgaGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIHJnYiB7bnVtYmVyW119XG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgY29sb3IgbnVtYmVyXG4gICAgICovXG4gICAgcmdiMmhleDogZnVuY3Rpb24gKHJnYilcbiAgICB7XG4gICAgICAgIHJldHVybiAoKHJnYlswXSoyNTUgPDwgMTYpICsgKHJnYlsxXSoyNTUgPDwgOCkgKyByZ2JbMl0qMjU1KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIENhbnZhcyBCbGVuZE1vZGVzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnJvd3NlclxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciB0aGV5IGFyZSBzdXBwb3J0ZWRcbiAgICAgKi9cbiAgICBjYW5Vc2VOZXdDYW52YXNCbGVuZE1vZGVzOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwbmdIZWFkID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVFBQUFBQkFRTUFBQUREOHAyT0FBQUFBMUJNVkVYLyc7XG4gICAgICAgIHZhciBwbmdFbmQgPSAnQUFBQUNrbEVRVlFJMTJOZ0FBQUFBZ0FCNGlHOE13QUFBQUJKUlU1RXJrSmdnZz09JztcblxuICAgICAgICB2YXIgbWFnZW50YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBtYWdlbnRhLnNyYyA9IHBuZ0hlYWQgKyAnQVA4MDRPYTYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciB5ZWxsb3cgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgeWVsbG93LnNyYyA9IHBuZ0hlYWQgKyAnL3dDS3h2UkYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY2FudmFzLndpZHRoID0gNjtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IDE7XG5cbiAgICAgICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShtYWdlbnRhLCAwLCAwKTtcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoeWVsbG93LCAyLCAwKTtcblxuICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDIsMCwxLDEpLmRhdGE7XG5cbiAgICAgICAgcmV0dXJuIChkYXRhWzBdID09PSAyNTUgJiYgZGF0YVsxXSA9PT0gMCAmJiBkYXRhWzJdID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBudW1iZXIsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgdGFrZW4gZnJvbSBTdGFybGluZyBGcmFtZXdvcmsgYXMgaXRzIHByZXR0eSBuZWF0IDspXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbnVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7bnVtYmVyfSB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqL1xuICAgIGdldE5leHRQb3dlck9mVHdvOiBmdW5jdGlvbiAobnVtYmVyKVxuICAgIHtcbiAgICAgICAgLy8gc2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Bvd2VyX29mX3R3byNGYXN0X2FsZ29yaXRobV90b19jaGVja19pZl9hX3Bvc2l0aXZlX251bWJlcl9pc19hX3Bvd2VyX29mX3R3b1xuICAgICAgICBpZiAobnVtYmVyID4gMCAmJiAobnVtYmVyICYgKG51bWJlciAtIDEpKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSAxO1xuXG4gICAgICAgICAgICB3aGlsZSAocmVzdWx0IDwgbnVtYmVyKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA8PD0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBjaGVja3MgaWYgdGhlIGdpdmVuIHdpZHRoIGFuZCBoZWlnaHQgbWFrZSBhIHBvd2VyIG9mIHR3byByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSBoZWlnaHQge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzUG93ZXJPZlR3bzogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm4gKHdpZHRoID4gMCAmJiAod2lkdGggJiAod2lkdGggLSAxKSkgPT09IDAgJiYgaGVpZ2h0ID4gMCAmJiAoaGVpZ2h0ICYgKGhlaWdodCAtIDEpKSA9PT0gMCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGdldCB0aGUgcmVzb2x1dGlvbiBvZiBhbiBhc3NldCBieSBsb29raW5nIGZvciB0aGUgcHJlZml4XG4gICAgICogdXNlZCBieSBzcHJpdGVzaGVldHMgYW5kIGltYWdlIHVybHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwge3N0cmluZ30gdGhlIGltYWdlIHBhdGhcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0UmVzb2x1dGlvbk9mVXJsOiBmdW5jdGlvbiAodXJsKVxuICAgIHtcbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBDT05TVC5SRVRJTkFfUFJFRklYLmV4ZWModXJsKTtcblxuICAgICAgICBpZiAocmVzb2x1dGlvbilcbiAgICAgICAge1xuICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChyZXNvbHV0aW9uWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAxO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBMb2dzIG91dCB0aGUgdmVyc2lvbiBhbmQgcmVuZGVyZXIgaW5mb3JtYXRpb24gZm9yIHRoaXMgcnVubmluZyBpbnN0YW5jZSBvZiBQSVhJLlxuICAgICAqIElmIHlvdSBkb24ndCB3YW50IHRvIHNlZSB0aGlzIG1lc3NhZ2UgeW91IGNhbiBzZXQgYFBJWEkudXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7YFxuICAgICAqIHNvIHRoZSBsaWJyYXJ5IHRoaW5rcyBpdCBhbHJlYWR5IHNhaWQgaXQuIEtlZXAgaW4gbWluZCB0aGF0IGRvaW5nIHRoYXQgd2lsbCBmb3JldmVyXG4gICAgICogbWFrZXMgeW91IGEgamVyayBmYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBUaGUgc3RyaW5nIHJlbmRlcmVyIHR5cGUgdG8gbG9nLlxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBzYXlIZWxsbzogZnVuY3Rpb24gKHR5cGUpXG4gICAge1xuICAgICAgICBpZiAodXRpbHMuX3NhaWRIZWxsbylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjaHJvbWUnKSA+IC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtcbiAgICAgICAgICAgICAgICAnXFxuICVjICVjICVjIFBpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0g4pywICcgKyB0eXBlICsgJyDinLAgICVjICcgKyAnICVjICcgKyAnIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8gICVjICVjIOKZpSVj4pmlJWPimaUgXFxuXFxuJyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmY2NmE1OyBiYWNrZ3JvdW5kOiAjMDMwMzA3OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmYzNkYzsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOydcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBhcmdzKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3aW5kb3cuY29uc29sZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nKCdQaXhpLmpzICcgKyBDT05TVC5WRVJTSU9OICsgJyAtICcgKyB0eXBlICsgJyAtIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8nKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuXG4gICAgICAgIHV0aWxzLl9zYWlkSGVsbG8gPSB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgZm9yIGNoZWNraW5nIGZvciB3ZWJnbCBzdXBwb3J0XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzV2ViR0xTdXBwb3J0ZWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB2YXIgY29udGV4dE9wdGlvbnMgPSB7IHN0ZW5jaWw6IHRydWUgfTtcbiAgICAgICAgdHJ5XG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghd2luZG93LldlYkdMUmVuZGVyaW5nQ29udGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSxcbiAgICAgICAgICAgICAgICBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIGNvbnRleHRPcHRpb25zKSB8fCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgY29udGV4dE9wdGlvbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gISEoZ2wgJiYgZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5zdGVuY2lsKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgc2lnbiBvZiBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBuIHtudW1iZXJ9XG4gICAgICogQHJldHVybnMge251bWJlcn0gMCBpZiBuIGlzIDAsIC0xIGlmIG4gaXMgbmVnYXRpdmUsIDEgaWYgbiBpIHBvc2l0aXZlXG4gICAgICovXG4gICAgc2lnbjogZnVuY3Rpb24gKG4pXG4gICAge1xuICAgICAgICByZXR1cm4gbiA/IChuIDwgMCA/IC0xIDogMSkgOiAwO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZW1vdmVJdGVtc1xuICAgICAqXG4gICAgICogQHBhcmFtIHthcnJheX0gYXJyIFRoZSB0YXJnZXQgYXJyYXlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRJZHggVGhlIGluZGV4IHRvIGJlZ2luIHJlbW92aW5nIGZyb20gKGluY2x1c2l2ZSlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmVtb3ZlQ291bnQgSG93IG1hbnkgaXRlbXMgdG8gcmVtb3ZlXG4gICAgICovXG4gICAgcmVtb3ZlSXRlbXM6IGZ1bmN0aW9uIChhcnIsIHN0YXJ0SWR4LCByZW1vdmVDb3VudClcbiAgICB7XG4gICAgICAgIHZhciBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIGlmIChzdGFydElkeCA+PSBsZW5ndGggfHwgcmVtb3ZlQ291bnQgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbW92ZUNvdW50ID0gKHN0YXJ0SWR4K3JlbW92ZUNvdW50ID4gbGVuZ3RoID8gbGVuZ3RoLXN0YXJ0SWR4IDogcmVtb3ZlQ291bnQpO1xuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJZHgsIGxlbiA9IGxlbmd0aC1yZW1vdmVDb3VudDsgaSA8IGxlbjsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBhcnJbaV0gPSBhcnJbaSArIHJlbW92ZUNvdW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyci5sZW5ndGggPSBsZW47XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIERlc2NyaWJlIHByb3BlcnR5IHVzYWdlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBUZXh0dXJlQ2FjaGU6IHt9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHt9XG59O1xuIiwiLyoqXG4gKiBNaXhpbnMgZnVuY3Rpb25hbGl0eSB0byBtYWtlIGFuIG9iamVjdCBoYXZlIFwicGx1Z2luc1wiLlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkudXRpbHNcbiAqIEBwYXJhbSBvYmoge29iamVjdH0gVGhlIG9iamVjdCB0byBtaXggaW50by5cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIHBsdWdpblRhcmdldC5taXhpbihNeU9iamVjdCk7XG4gKi9cbmZ1bmN0aW9uIHBsdWdpblRhcmdldChvYmopXG57XG4gICAgb2JqLl9fcGx1Z2lucyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHBsdWdpbiB0byBhbiBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwbHVnaW5OYW1lIHtzdHJpbmd9IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICAgICAqIEBwYXJhbSBjdG9yIHtGdW5jdGlvbn0gVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciB0aGUgcGx1Z2luLlxuICAgICAqL1xuICAgIG9iai5yZWdpc3RlclBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW5OYW1lLCBjdG9yKVxuICAgIHtcbiAgICAgICAgb2JqLl9fcGx1Z2luc1twbHVnaW5OYW1lXSA9IGN0b3I7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlcyBhbGwgdGhlIHBsdWdpbnMgb2YgdGhpcyBvYmplY3RcbiAgICAgKlxuICAgICAqL1xuICAgIG9iai5wcm90b3R5cGUuaW5pdFBsdWdpbnMgPSBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zID0gdGhpcy5wbHVnaW5zIHx8IHt9O1xuXG4gICAgICAgIGZvciAodmFyIG8gaW4gb2JqLl9fcGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbmV3IChvYmouX19wbHVnaW5zW29dKSh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5kZXN0cm95UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBvIGluIHRoaXMucGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBsdWdpbnMgPSBudWxsO1xuICAgIH07XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLyoqXG4gICAgICogTWl4ZXMgaW4gdGhlIHByb3BlcnRpZXMgb2YgdGhlIHBsdWdpblRhcmdldCBpbnRvIGFub3RoZXIgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0IHtvYmplY3R9IFRoZSBvYmogdG8gbWl4IGludG9cbiAgICAgKi9cbiAgICBtaXhpbjogZnVuY3Rpb24gbWl4aW4ob2JqKVxuICAgIHtcbiAgICAgICAgcGx1Z2luVGFyZ2V0KG9iaik7XG4gICAgfVxufTtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciBjb3JlID0gcmVxdWlyZSgnLi9jb3JlJyksXG4gICAgbWVzaCA9IHJlcXVpcmUoJy4vbWVzaCcpLFxuICAgIGV4dHJhcyA9IHJlcXVpcmUoJy4vZXh0cmFzJyksXG4gICAgZmlsdGVycyA9IHJlcXVpcmUoJy4vZmlsdGVycycpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIFNwcml0ZUJhdGNoXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLlBhcnRpY2xlQ29udGFpbmVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlNwcml0ZUJhdGNoID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLicpO1xufTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBBc3NldExvYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBzZWUgUElYSS5sb2FkZXJzLkxvYWRlclxuICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IFRoZSBsb2FkZXIgc3lzdGVtIHdhcyBvdmVyaGF1bGVkIGluIHBpeGkgdjMsIHBsZWFzZSBzZWUgdGhlIG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyIGNsYXNzLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLkFzc2V0TG9hZGVyID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuJyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb3JlLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFN0YWdlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQ29udGFpbmVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFN0YWdlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1lvdSBkbyBub3QgbmVlZCB0byB1c2UgYSBQSVhJIFN0YWdlIGFueSBtb3JlLCB5b3UgY2FuIHNpbXBseSByZW5kZXIgYW55IGNvbnRhaW5lci4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIERpc3BsYXlPYmplY3RDb250YWluZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgRGlzcGxheU9iamVjdENvbnRhaW5lcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEaXNwbGF5T2JqZWN0Q29udGFpbmVyIGhhcyBiZWVuIHNob3J0ZW5lZCB0byBDb250YWluZXIsIHBsZWFzZSB1c2UgQ29udGFpbmVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RyaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2hcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RyaXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFN0cmlwIGNsYXNzIGhhcyBiZWVuIHJlbmFtZWQgdG8gTWVzaCBhbmQgbW92ZWQgdG8gbWVzaC5NZXNoLCBwbGVhc2UgdXNlIG1lc2guTWVzaCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLk1lc2g7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBSb3BlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkubWVzaC5Sb3BlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFJvcGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFJvcGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gbWVzaC5Sb3BlLCBwbGVhc2UgdXNlIG1lc2guUm9wZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLlJvcGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBNb3ZpZUNsaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuTW92aWVDbGlwXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIE1vdmllQ2xpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgTW92aWVDbGlwIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5Nb3ZpZUNsaXAsIHBsZWFzZSB1c2UgZXh0cmFzLk1vdmllQ2xpcCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuTW92aWVDbGlwO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGlsaW5nU3ByaXRlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBUaWxpbmdTcHJpdGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRpbGluZ1Nwcml0ZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuVGlsaW5nU3ByaXRlLCBwbGVhc2UgdXNlIGV4dHJhcy5UaWxpbmdTcHJpdGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLlRpbGluZ1Nwcml0ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJpdG1hcFRleHRcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCaXRtYXBUZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCaXRtYXBUZXh0IGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5CaXRtYXBUZXh0LCBwbGVhc2UgdXNlIGV4dHJhcy5CaXRtYXBUZXh0IGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5CaXRtYXBUZXh0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgYmxlbmRNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIGJsZW5kTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGJsZW5kTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gQkxFTkRfTU9ERVMsIHBsZWFzZSB1c2UgQkxFTkRfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5CTEVORF9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNjYWxlTW9kZXNcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBzY2FsZU1vZGVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBzY2FsZU1vZGVzIGhhcyBiZWVuIG1vdmVkIHRvIFNDQUxFX01PREVTLCBwbGVhc2UgdXNlIFNDQUxFX01PREVTIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU0NBTEVfTU9ERVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBCYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuQmFzZVRleHR1cmVDYWNoZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCYXNlVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgQmFzZVRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5CYXNlVGV4dHVyZUNhY2hlLCBwbGVhc2UgdXNlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5UZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuVGV4dHVyZUNhY2hlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIG1hdGhcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBtYXRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgbWF0aCBuYW1lc3BhY2UgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIGFjY2VzcyBtZW1iZXJzIGFscmVhZHkgYWNjZXNzaWJsZSBvbiBQSVhJLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgUElYSS5TcHJpdGUjc2V0VGV4dHVyZVxuICogQHNlZSBQSVhJLlNwcml0ZSN0ZXh0dXJlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlLnByb3RvdHlwZS5zZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dHVyZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dHVyZSBwcm9wZXJ0eSwgZS5nIDogc3ByaXRlLnRleHR1cmUgPSB0ZXh0dXJlOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3NldFRleHRcbiAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmV4dHJhcy5CaXRtYXBUZXh0LnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dClcbntcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dCBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dCBwcm9wZXJ0eSwgZS5nIDogbXlCaXRtYXBUZXh0LnRleHQgPSBcXCdteSB0ZXh0XFwnOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLlRleHQjdGV4dFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteVRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRTdHlsZVxuICogQHNlZSBQSVhJLlRleHQjc3R5bGVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0LnByb3RvdHlwZS5zZXRTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlKVxue1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldFN0eWxlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBzdHlsZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0LnN0eWxlID0gc3R5bGU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQHNlZSBQSVhJLlRleHR1cmUjc2V0RnJhbWVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0dXJlLnByb3RvdHlwZS5zZXRGcmFtZSA9IGZ1bmN0aW9uKGZyYW1lKVxue1xuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldEZyYW1lIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBmcmFtZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0dXJlLmZyYW1lID0gZnJhbWU7Jyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhmaWx0ZXJzLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBzZWUgUElYSS5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBBYnN0cmFjdEZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLkFic3RyYWN0RmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBBYnN0cmFjdEZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkFic3RyYWN0RmlsdGVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkZYQUFGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuRlhBQUZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBGWEFBRmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuRlhBQUZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgRlhBQUZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkZYQUFGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuU3ByaXRlTWFza0ZpbHRlclxuICAgICAqIEBzZWUgUElYSS5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIFNwcml0ZU1hc2tGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBTcHJpdGVNYXNrRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU3ByaXRlTWFza0ZpbHRlcjtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkudXRpbHMudXVpZFxuICogQHNlZSBQSVhJLnV0aWxzLnVpZFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICovXG5jb3JlLnV0aWxzLnV1aWQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvbnNvbGUud2FybigndXRpbHMudXVpZCgpIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdXRpbHMudWlkKCkgZnJvbSBub3cgb24uJyk7XG4gICAgcmV0dXJuIGNvcmUudXRpbHMudWlkKCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogQSBCaXRtYXBUZXh0IG9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dCB1c2luZyBiaXRtYXAgZm9udC4gVG9cbiAqIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJywgJ1xccicgb3IgJ1xcclxcbicgaW4geW91ciBzdHJpbmcuIFlvdSBjYW4gZ2VuZXJhdGUgdGhlIGZudCBmaWxlcyB1c2luZzpcbiAqXG4gKiBBIEJpdG1hcFRleHQgY2FuIG9ubHkgYmUgY3JlYXRlZCB3aGVuIHRoZSBmb250IGlzIGxvYWRlZFxuICpcbiAqIGBgYGpzXG4gKiAvLyBpbiB0aGlzIGNhc2UgdGhlIGZvbnQgaXMgaW4gYSBmaWxlIGNhbGxlZCAnZGVzeXJlbC5mbnQnXG4gKiB2YXIgYml0bWFwVGV4dCA9IG5ldyBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0KFwidGV4dCB1c2luZyBhIGZhbmN5IGZvbnQhXCIsIHtmb250OiBcIjM1cHggRGVzeXJlbFwiLCBhbGlnbjogXCJyaWdodFwifSk7XG4gKiBgYGBcbiAqXG4gKlxuICogaHR0cDovL3d3dy5hbmdlbGNvZGUuY29tL3Byb2R1Y3RzL2JtZm9udC8gZm9yIHdpbmRvd3Mgb3JcbiAqIGh0dHA6Ly93d3cuYm1nbHlwaC5jb20vIGZvciBtYWMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBzdHlsZSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIHN0eWxlLmZvbnQge3N0cmluZ3xvYmplY3R9IFRoZSBmb250IGRlc2NyaXB0b3IgZm9yIHRoZSBvYmplY3QsIGNhbiBiZSBwYXNzZWQgYXMgYSBzdHJpbmcgb2YgZm9ybVxuICogICAgICBcIjI0cHggRm9udE5hbWVcIiBvciBcIkZvbnROYW1lXCIgb3IgYXMgYW4gb2JqZWN0IHdpdGggZXhwbGljaXQgbmFtZS9zaXplIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQubmFtZV0ge3N0cmluZ30gVGhlIGJpdG1hcCBmb250IGlkXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQuc2l6ZV0ge251bWJlcn0gVGhlIHNpemUgb2YgdGhlIGZvbnQgaW4gcGl4ZWxzLCBlLmcuIDI0XG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0XG4gKiAgICAgIHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUudGludD0weEZGRkZGRl0ge251bWJlcn0gVGhlIHRpbnQgY29sb3JcbiAqL1xuZnVuY3Rpb24gQml0bWFwVGV4dCh0ZXh0LCBzdHlsZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgb3ZlcmFsbCB0ZXh0LCBkaWZmZXJlbnQgZnJvbSBmb250U2l6ZSxcbiAgICAgKiB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBzdHlsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRleHRXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dEhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBsZXR0ZXIgc3ByaXRlIHBvb2wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZ2x5cGhzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZm9udCA9IHtcbiAgICAgICAgdGludDogc3R5bGUudGludCAhPT0gdW5kZWZpbmVkID8gc3R5bGUudGludCA6IDB4RkZGRkZGLFxuICAgICAgICBhbGlnbjogc3R5bGUuYWxpZ24gfHwgJ2xlZnQnLFxuICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICBzaXplOiAwXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgZm9udC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZm9udCA9IHN0eWxlLmZvbnQ7IC8vIHJ1biBmb250IHNldHRlclxuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IHRleHQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IHdpZHRoIG9mIHRoaXMgYml0bWFwIHRleHQgaW4gcGl4ZWxzLiBJZiB0aGUgdGV4dCBwcm92aWRlZCBpcyBsb25nZXIgdGhhbiB0aGUgdmFsdWUgcHJvdmlkZWQsIGxpbmUgYnJlYWtzIHdpbGwgYmUgYXV0b21hdGljYWxseSBpbnNlcnRlZCBpbiB0aGUgbGFzdCB3aGl0ZXNwYWNlLlxuICAgICAqIERpc2FibGUgYnkgc2V0dGluZyB2YWx1ZSB0byAwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IGxpbmUgaGVpZ2h0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRyeWluZyB0byB1c2UgdGhlIHRvdGFsIGhlaWdodCBvZiB0aGUgVGV4dCwgaWU6IHdoZW4gdHJ5aW5nIHRvIHZlcnRpY2FsbHkgYWxpZ24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkaXJ0eSBzdGF0ZSBvZiB0aGlzIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy51cGRhdGVUZXh0KCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5CaXRtYXBUZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5Db250YWluZXIucHJvdG90eXBlKTtcbkJpdG1hcFRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQml0bWFwVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gQml0bWFwVGV4dDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQml0bWFwVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGludCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0aW50OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQudGludDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQudGludCA9ICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlID49IDApID8gdmFsdWUgOiAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFsaWdubWVudCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbGVmdCdcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBhbGlnbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250LmFsaWduO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC5hbGlnbiA9IHZhbHVlIHx8ICdsZWZ0JztcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZvbnQgZGVzY3JpcHRvciBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0ZvbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgZm9udDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcgJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9mb250Lm5hbWUgPSB2YWx1ZS5sZW5ndGggPT09IDEgPyB2YWx1ZVswXSA6IHZhbHVlLnNsaWNlKDEpLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB2YWx1ZS5sZW5ndGggPj0gMiA/IHBhcnNlSW50KHZhbHVlWzBdLCAxMCkgOiBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV0uc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5zaXplID0gdHlwZW9mIHZhbHVlLnNpemUgPT09ICdudW1iZXInID8gdmFsdWUuc2l6ZSA6IHBhcnNlSW50KHZhbHVlLnNpemUsIDEwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGV4dCBhbmQgdXBkYXRlcyBpdCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkYXRhID0gQml0bWFwVGV4dC5mb250c1t0aGlzLl9mb250Lm5hbWVdO1xuICAgIHZhciBwb3MgPSBuZXcgY29yZS5Qb2ludCgpO1xuICAgIHZhciBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgIHZhciBjaGFycyA9IFtdO1xuICAgIHZhciBsYXN0TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbGluZVdpZHRocyA9IFtdO1xuICAgIHZhciBsaW5lID0gMDtcbiAgICB2YXIgc2NhbGUgPSB0aGlzLl9mb250LnNpemUgLyBkYXRhLnNpemU7XG4gICAgdmFyIGxhc3RTcGFjZSA9IC0xO1xuICAgIHZhciBtYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0Lmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gdGhpcy50ZXh0LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGxhc3RTcGFjZSA9IC8oXFxzKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSA/IGkgOiBsYXN0U3BhY2U7XG5cbiAgICAgICAgaWYgKC8oPzpcXHJcXG58XFxyfFxcbikvLnRlc3QodGhpcy50ZXh0LmNoYXJBdChpKSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXN0U3BhY2UgIT09IC0xICYmIHRoaXMubWF4V2lkdGggPiAwICYmIHBvcy54ICogc2NhbGUgPiB0aGlzLm1heFdpZHRoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKGNoYXJzLCBsYXN0U3BhY2UsIGkgLSBsYXN0U3BhY2UpO1xuICAgICAgICAgICAgaSA9IGxhc3RTcGFjZTtcbiAgICAgICAgICAgIGxhc3RTcGFjZSA9IC0xO1xuXG4gICAgICAgICAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbGluZSsrO1xuXG4gICAgICAgICAgICBwb3MueCA9IDA7XG4gICAgICAgICAgICBwb3MueSArPSBkYXRhLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hhckRhdGEgPSBkYXRhLmNoYXJzW2NoYXJDb2RlXTtcblxuICAgICAgICBpZiAoIWNoYXJEYXRhKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmV2Q2hhckNvZGUgJiYgY2hhckRhdGEua2VybmluZ1twcmV2Q2hhckNvZGVdKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb3MueCArPSBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV07XG4gICAgICAgIH1cblxuICAgICAgICBjaGFycy5wdXNoKHt0ZXh0dXJlOmNoYXJEYXRhLnRleHR1cmUsIGxpbmU6IGxpbmUsIGNoYXJDb2RlOiBjaGFyQ29kZSwgcG9zaXRpb246IG5ldyBjb3JlLlBvaW50KHBvcy54ICsgY2hhckRhdGEueE9mZnNldCwgcG9zLnkgKyBjaGFyRGF0YS55T2Zmc2V0KX0pO1xuICAgICAgICBsYXN0TGluZVdpZHRoID0gcG9zLnggKyAoY2hhckRhdGEudGV4dHVyZS53aWR0aCArIGNoYXJEYXRhLnhPZmZzZXQpO1xuICAgICAgICBwb3MueCArPSBjaGFyRGF0YS54QWR2YW5jZTtcbiAgICAgICAgbWF4TGluZUhlaWdodCA9IE1hdGgubWF4KG1heExpbmVIZWlnaHQsIChjaGFyRGF0YS55T2Zmc2V0ICsgY2hhckRhdGEudGV4dHVyZS5oZWlnaHQpKTtcbiAgICAgICAgcHJldkNoYXJDb2RlID0gY2hhckNvZGU7XG4gICAgfVxuXG4gICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG5cbiAgICB2YXIgbGluZUFsaWduT2Zmc2V0cyA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8PSBsaW5lOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYWxpZ25PZmZzZXQgPSAwO1xuXG4gICAgICAgIGlmICh0aGlzLl9mb250LmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbGlnbk9mZnNldCA9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5fZm9udC5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpbmVBbGlnbk9mZnNldHMucHVzaChhbGlnbk9mZnNldCk7XG4gICAgfVxuXG4gICAgdmFyIGxlbkNoYXJzID0gY2hhcnMubGVuZ3RoO1xuICAgIHZhciB0aW50ID0gdGhpcy50aW50O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbkNoYXJzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYyA9IHRoaXMuX2dseXBoc1tpXTsgLy8gZ2V0IHRoZSBuZXh0IGdseXBoIHNwcml0ZVxuXG4gICAgICAgIGlmIChjKVxuICAgICAgICB7XG4gICAgICAgICAgICBjLnRleHR1cmUgPSBjaGFyc1tpXS50ZXh0dXJlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgYyA9IG5ldyBjb3JlLlNwcml0ZShjaGFyc1tpXS50ZXh0dXJlKTtcbiAgICAgICAgICAgIHRoaXMuX2dseXBocy5wdXNoKGMpO1xuICAgICAgICB9XG5cbiAgICAgICAgYy5wb3NpdGlvbi54ID0gKGNoYXJzW2ldLnBvc2l0aW9uLnggKyBsaW5lQWxpZ25PZmZzZXRzW2NoYXJzW2ldLmxpbmVdKSAqIHNjYWxlO1xuICAgICAgICBjLnBvc2l0aW9uLnkgPSBjaGFyc1tpXS5wb3NpdGlvbi55ICogc2NhbGU7XG4gICAgICAgIGMuc2NhbGUueCA9IGMuc2NhbGUueSA9IHNjYWxlO1xuICAgICAgICBjLnRpbnQgPSB0aW50O1xuXG4gICAgICAgIGlmICghYy5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoYyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZW1vdmUgdW5uZWNlc3NhcnkgY2hpbGRyZW4uXG4gICAgZm9yIChpID0gbGVuQ2hhcnM7IGkgPCB0aGlzLl9nbHlwaHMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKHRoaXMuX2dseXBoc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0V2lkdGggPSBtYXhMaW5lV2lkdGggKiBzY2FsZTtcbiAgICB0aGlzLnRleHRIZWlnaHQgPSAocG9zLnkgKyBkYXRhLmxpbmVIZWlnaHQpICogc2NhbGU7XG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gbWF4TGluZUhlaWdodCAqIHNjYWxlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb2YgdGhpcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGV4dCBiZWZvcmUgY2FsbGluZyBwYXJlbnQncyBnZXRMb2NhbEJvdW5kc1xuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5cbkJpdG1hcFRleHQucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICByZXR1cm4gY29yZS5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzLmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59O1xuXG5CaXRtYXBUZXh0LmZvbnRzID0ge307XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIE1vdmllQ2xpcCBpcyBhIHNpbXBsZSB3YXkgdG8gZGlzcGxheSBhbiBhbmltYXRpb24gZGVwaWN0ZWQgYnkgYSBsaXN0IG9mIHRleHR1cmVzLlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgYWxpZW5JbWFnZXMgPSBbXCJpbWFnZV9zZXF1ZW5jZV8wMS5wbmdcIixcImltYWdlX3NlcXVlbmNlXzAyLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDMucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wNC5wbmdcIl07XG4gKiB2YXIgdGV4dHVyZUFycmF5ID0gW107XG4gKlxuICogZm9yICh2YXIgaT0wOyBpIDwgNDsgaSsrKVxuICoge1xuICogICAgICB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoYWxpZW5JbWFnZXNbaV0pO1xuICogICAgICB0ZXh0dXJlQXJyYXkucHVzaCh0ZXh0dXJlKTtcbiAqIH07XG4gKlxuICogdmFyIG1jID0gbmV3IFBJWEkuTW92aWVDbGlwKHRleHR1cmVBcnJheSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0dXJlcyB7UElYSS5UZXh0dXJlW118T2JqZWN0W119IGFuIGFycmF5IG9mIHtAbGluayBQSVhJLlRleHR1cmV9IG9yIGZyYW1lIG9iamVjdHMgdGhhdCBtYWtlIHVwIHRoZSBhbmltYXRpb25cbiAqIEBwYXJhbSB0ZXh0dXJlc1tdLnRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHtAbGluayBQSVhJLlRleHR1cmV9IG9mIHRoZSBmcmFtZVxuICogQHBhcmFtIHRleHR1cmVzW10udGltZSB7bnVtYmVyfSB0aGUgZHVyYXRpb24gb2YgdGhlIGZyYW1lIGluIG1zXG4gKi9cbmZ1bmN0aW9uIE1vdmllQ2xpcCh0ZXh0dXJlcylcbntcbiAgICBjb3JlLlNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmVzWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlID8gdGV4dHVyZXNbMF0gOiB0ZXh0dXJlc1swXS50ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kdXJhdGlvbnMgPSBudWxsO1xuXG4gICAgdGhpcy50ZXh0dXJlcyA9IHRleHR1cmVzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNwZWVkIHRoYXQgdGhlIE1vdmllQ2xpcCB3aWxsIHBsYXkgYXQuIEhpZ2hlciBpcyBmYXN0ZXIsIGxvd2VyIGlzIHNsb3dlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmFuaW1hdGlvblNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBtb3ZpZSBjbGlwIHJlcGVhdHMgYWZ0ZXIgcGxheWluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMubG9vcCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gYSBNb3ZpZUNsaXAgZmluaXNoZXMgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICovXG4gICAgdGhpcy5vbkNvbXBsZXRlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEVsYXBzZWQgdGltZSBzaW5jZSBhbmltYXRpb24gaGFzIGJlZW4gc3RhcnRlZCwgdXNlZCBpbnRlcm5hbGx5IHRvIGRpc3BsYXkgY3VycmVudCB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIE1vdmllQ2xpcCBpcyBjdXJyZW50bHkgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1vdmllQ2xpcC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5Nb3ZpZUNsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTW92aWVDbGlwO1xubW9kdWxlLmV4cG9ydHMgPSBNb3ZpZUNsaXA7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1vdmllQ2xpcC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiB0b3RhbEZyYW1lcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIGZyYW1lcyBpbiB0aGUgTW92aWVDbGlwLiBUaGlzIGlzIHRoZSBzYW1lIGFzIG51bWJlciBvZiB0ZXh0dXJlc1xuICAgICAqIGFzc2lnbmVkIHRvIHRoZSBNb3ZpZUNsaXAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdG90YWxGcmFtZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIHRleHR1cmVzIHVzZWQgZm9yIHRoaXMgTW92aWVDbGlwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqXG4gICAgICovXG4gICAgdGV4dHVyZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZih2YWx1ZVswXSBpbnN0YW5jZW9mIGNvcmUuVGV4dHVyZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcy5wdXNoKHZhbHVlW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMucHVzaCh2YWx1ZVtpXS50aW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgKiBUaGUgTW92aWVDbGlwcyBjdXJyZW50IGZyYW1lIGluZGV4XG4gICAgKlxuICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAqIEByZWFkb25seVxuICAgICovXG4gICAgY3VycmVudEZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRGcmFtZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpICUgdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRGcmFtZSA8IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY3VycmVudEZyYW1lICs9IHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RnJhbWU7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKipcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYoIXRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogUGxheXMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZih0aGlzLnBsYXlpbmcpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5aW5nID0gdHJ1ZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZ29lcyB0byBhIHNwZWNpZmljIGZyYW1lXG4gKlxuICogQHBhcmFtIGZyYW1lTnVtYmVyIHtudW1iZXJ9IGZyYW1lIGluZGV4IHRvIHN0b3AgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kU3RvcCA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLnN0b3AoKTtcblxuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbdGhpcy5jdXJyZW50RnJhbWVdO1xufTtcblxuLyoqXG4gKiBHb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWUgYW5kIGJlZ2lucyBwbGF5aW5nIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RhcnQgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kUGxheSA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IGZyYW1lTnVtYmVyO1xuXG4gICAgdGhpcy5wbGF5KCk7XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKiBAcHJpdmF0ZVxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWQgPSB0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2R1cmF0aW9ucyAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIHZhciBsYWcgPSB0aGlzLl9jdXJyZW50VGltZSAlIDEgKiB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuXG4gICAgICAgIGxhZyArPSBlbGFwc2VkIC8gNjAgKiAxMDAwO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPCAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZS0tO1xuICAgICAgICAgICAgbGFnICs9IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2lnbiA9IE1hdGguc2lnbih0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lKTtcbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgPSBNYXRoLmZsb29yKHRoaXMuX2N1cnJlbnRUaW1lKTtcblxuICAgICAgICB3aGlsZSAobGFnID49IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhZyAtPSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdICogc2lnbjtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IHNpZ247XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBsYWcgLyB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBlbGFwc2VkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jdXJyZW50VGltZSA8IDAgJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AoMCk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5fY3VycmVudFRpbWUgPj0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoICYmICF0aGlzLmxvb3ApXG4gICAge1xuICAgICAgICB0aGlzLmdvdG9BbmRTdG9wKHRoaXMuX3RleHR1cmVzLmxlbmd0aCAtIDEpO1xuXG4gICAgICAgIGlmICh0aGlzLm9uQ29tcGxldGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuXG59O1xuXG4vKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZGVzdHJveXMgaXRcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICggKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuICAgIGNvcmUuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIEEgc2hvcnQgaGFuZCB3YXkgb2YgY3JlYXRpbmcgYSBtb3ZpZWNsaXAgZnJvbSBhbiBhcnJheSBvZiBmcmFtZSBpZHNcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVzIHtzdHJpbmdbXX0gdGhlIGFycmF5IG9mIGZyYW1lcyBpZHMgdGhlIG1vdmllY2xpcCB3aWxsIHVzZSBhcyBpdHMgdGV4dHVyZSBmcmFtZXNcbiAqL1xuTW92aWVDbGlwLmZyb21GcmFtZXMgPSBmdW5jdGlvbiAoZnJhbWVzKVxue1xuICAgIHZhciB0ZXh0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0ZXh0dXJlcy5wdXNoKG5ldyBjb3JlLlRleHR1cmUuZnJvbUZyYW1lKGZyYW1lc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW92aWVDbGlwKHRleHR1cmVzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGltYWdlIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgaW1hZ2UgdXJscyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUltYWdlcyA9IGZ1bmN0aW9uIChpbWFnZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTsiLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICAvLyBhIHNwcml0ZSB1c2UgZGZvciByZW5kZXJpbmcgdGV4dHVyZXMuLlxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlcicpO1xuXG4vKipcbiAqIEEgdGlsaW5nIHNwcml0ZSBpcyBhIGZhc3Qgd2F5IG9mIHJlbmRlcmluZyBhIHRpbGluZyBpbWFnZVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmUge1RleHR1cmV9IHRoZSB0ZXh0dXJlIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFRpbGluZ1Nwcml0ZSh0ZXh0dXJlLCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGluZyBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVTY2FsZSA9IG5ldyBjb3JlLlBvaW50KDEsMSk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgcG9zaXRpb24gb2YgdGhlIGltYWdlIHRoYXQgaXMgYmVpbmcgdGlsZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBuZXcgY29yZS5Qb2ludCgwLDApO1xuXG4gICAgLy8vLy8gcHJpdmF0ZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHdpdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gd2lkdGggfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0IHx8IDEwMDtcblxuICAgIC8qKlxuICAgICAqIEFuIGludGVybmFsIFdlYkdMIFVWIGNhY2hlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlVXZzfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdXZzID0gbmV3IGNvcmUuVGV4dHVyZVV2cygpO1xuXG4gICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IG51bGw7XG5cbiAgICAvL1RPRE8gbW92ZS4uXG4gICAgdGhpcy5zaGFkZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcihcblxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1VHJhbnNmb3JtOycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJyAgIGNvb3JkIC09IHVUcmFuc2Zvcm0ueHk7JyxcbiAgICAgICAgJyAgIGNvb3JkIC89IHVUcmFuc2Zvcm0uenc7JyxcbiAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBjb29yZDsnLFxuXG4gICAgICAgICcgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpOycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgIFtcbiAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdUZyYW1lOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzIgdVBpeGVsU2l6ZTsnLFxuXG4gICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IG1vZCh2VGV4dHVyZUNvb3JkLCB1RnJhbWUuencpOycsXG4gICAgICAgICcgICBjb29yZCA9IGNsYW1wKGNvb3JkLCB1UGl4ZWxTaXplLCB1RnJhbWUuencgLSB1UGl4ZWxTaXplKTsnLFxuICAgICAgICAnICAgY29vcmQgKz0gdUZyYW1lLnh5OycsXG5cbiAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9ICB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdUZyYW1lOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVRyYW5zZm9ybTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLDAsMSwxXSB9LFxuICAgICAgICAgICAgICAgIHVQaXhlbFNpemUgOiB7IHR5cGUgOiAnMmZ2JywgdmFsdWU6IFsxLCAxXX1cbiAgICAgICAgICAgIH1cbiAgICAgICk7XG59XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsaW5nU3ByaXRlO1xubW9kdWxlLmV4cG9ydHMgPSBUaWxpbmdTcHJpdGU7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsaW5nU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRpbGluZ1Nwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybjtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICAvLyB0d2VhayBvdXIgdGV4dHVyZSB0ZW1wb3JhcmlseS4uXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUgfHwgIXRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGVtcFV2cyA9IHRleHR1cmUuX3V2cyxcbiAgICAgICAgdGVtcFdpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIHRlbXBIZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQsXG4gICAgICAgIHR3ID0gdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCxcbiAgICAgICAgdGggPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRoaXMuX3V2cztcbiAgICB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51UGl4ZWxTaXplLnZhbHVlWzBdID0gMS4wL3R3O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMV0gPSAxLjAvdGg7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMF0gPSB0ZW1wVXZzLngwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVsxXSA9IHRlbXBVdnMueTA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzJdID0gdGVtcFV2cy54MSAtIHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzNdID0gdGVtcFV2cy55MiAtIHRlbXBVdnMueTA7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzBdID0gKHRoaXMudGlsZVBvc2l0aW9uLnggJSAodGVtcFdpZHRoICogdGhpcy50aWxlU2NhbGUueCkpIC8gdGhpcy5fd2lkdGg7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsxXSA9ICh0aGlzLnRpbGVQb3NpdGlvbi55ICUgKHRlbXBIZWlnaHQgKiB0aGlzLnRpbGVTY2FsZS55KSkgLyB0aGlzLl9oZWlnaHQ7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsyXSA9ICggdHcgLyB0aGlzLl93aWR0aCApICogdGhpcy50aWxlU2NhbGUueDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzNdID0gKCB0aCAvIHRoaXMuX2hlaWdodCApICogdGhpcy50aWxlU2NhbGUueTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIodGhpcyk7XG5cbiAgICB0ZXh0dXJlLl91dnMgPSB0ZW1wVXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGVtcFdpZHRoO1xuICAgIHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRlbXBIZWlnaHQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBhIHJlZmVyZW5jZSB0byB0aGUgY2FudmFzIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0LFxuICAgICAgICB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgYmFzZVRleHR1cmUgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBtb2RYID0gKHRoaXMudGlsZVBvc2l0aW9uLnggLyB0aGlzLnRpbGVTY2FsZS54KSAlIHRleHR1cmUuX2ZyYW1lLndpZHRoLFxuICAgICAgICBtb2RZID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgLyB0aGlzLnRpbGVTY2FsZS55KSAlIHRleHR1cmUuX2ZyYW1lLmhlaWdodDtcblxuICAgIC8vIGNyZWF0ZSBhIG5pY2Ugc2hpbnkgcGF0dGVybiFcbiAgICAvLyBUT0RPIHRoaXMgbmVlZHMgdG8gYmUgcmVmcmVzaGVkIGlmIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgaWYoIXRoaXMuX2NhbnZhc1BhdHRlcm4pXG4gICAge1xuICAgICAgICAvLyBjdXQgYW4gb2JqZWN0IGZyb20gYSBzcHJpdGVzaGVldC4uXG4gICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IGNvcmUuQ2FudmFzQnVmZmVyKHRleHR1cmUuX2ZyYW1lLndpZHRoLCB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQpO1xuXG4gICAgICAgIC8vIFRpbnQgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgICAgaWYgKHRoaXMudGludCAhPT0gMHhGRkZGRkYpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlZFRpbnQgIT09IHRoaXMudGludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUgPSBDYW52YXNUaW50ZXIuZ2V0VGludGVkVGV4dHVyZSh0aGlzLCB0aGlzLnRpbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZSh0aGlzLnRpbnRlZFRleHR1cmUsIDAsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZShiYXNlVGV4dHVyZS5zb3VyY2UsIC10ZXh0dXJlLl9mcmFtZS54LCAtdGV4dHVyZS5fZnJhbWUueSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IHRlbXBDYW52YXMuY29udGV4dC5jcmVhdGVQYXR0ZXJuKCB0ZW1wQ2FudmFzLmNhbnZhcywgJ3JlcGVhdCcgKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgY29udGV4dCBzdGF0ZS4uXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb24pO1xuXG4gICAgLy8gVE9ETyAtIHRoaXMgc2hvdWxkIGJlIHJvbGxlZCBpbnRvIHRoZSBzZXRUcmFuc2Zvcm0gYWJvdmUuLlxuICAgIGNvbnRleHQuc2NhbGUodGhpcy50aWxlU2NhbGUueCx0aGlzLnRpbGVTY2FsZS55KTtcblxuICAgIGNvbnRleHQudHJhbnNsYXRlKG1vZFggKyAodGhpcy5hbmNob3IueCAqIC10aGlzLl93aWR0aCApLFxuICAgICAgICAgICAgICAgICAgICAgIG1vZFkgKyAodGhpcy5hbmNob3IueSAqIC10aGlzLl9oZWlnaHQpKTtcblxuICAgIC8vIGNoZWNrIGJsZW5kIG1vZGVcbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyBmaWxsIHRoZSBwYXR0ZXJuIVxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fY2FudmFzUGF0dGVybjtcbiAgICBjb250ZXh0LmZpbGxSZWN0KC1tb2RYLFxuICAgICAgICAgICAgICAgICAgICAgLW1vZFksXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl93aWR0aCAvIHRoaXMudGlsZVNjYWxlLngsXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWlnaHQgLyB0aGlzLnRpbGVTY2FsZS55KTtcblxuXG4gICAgLy9UT0RPIC0gcHJldHR5IHN1cmUgdGhpcyBjYW4gYmUgZGVsZXRlZC4uLlxuICAgIC8vY29udGV4dC50cmFuc2xhdGUoLXRoaXMudGlsZVBvc2l0aW9uLnggKyAodGhpcy5hbmNob3IueCAqIHRoaXMuX3dpZHRoKSwgLXRoaXMudGlsZVBvc2l0aW9uLnkgKyAodGhpcy5hbmNob3IueSAqIHRoaXMuX2hlaWdodCkpO1xuICAgIC8vY29udGV4dC5zY2FsZSgxIC8gdGhpcy50aWxlU2NhbGUueCwgMSAvIHRoaXMudGlsZVNjYWxlLnkpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBzcHJpdGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xuXG4gICAgdmFyIHcwID0gd2lkdGggKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICB2YXIgdzEgPSB3aWR0aCAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgdmFyIGgwID0gaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgdmFyIGgxID0gaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG5cbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgdmFyIHgxID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTIgPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHg0ID0gIGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciBtaW5YLFxuICAgICAgICBtYXhYLFxuICAgICAgICBtaW5ZLFxuICAgICAgICBtYXhZO1xuXG4gICAgbWluWCA9IHgxO1xuICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgbWluWSA9IHkxO1xuICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgbWF4WCA9IHgxO1xuICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgbWF4WSA9IHkxO1xuICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG5cbiAgICByZXR1cm4gYm91bmRzO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byBjaGVja1xuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKlxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsZVNjYWxlID0gbnVsbDtcbiAgICB0aGlzLl90aWxlU2NhbGVPZmZzZXQgPSBudWxsO1xuICAgIHRoaXMudGlsZVBvc2l0aW9uID0gbnVsbDtcblxuICAgIHRoaXMuX3V2cyA9IG51bGw7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSB0aWxpbmcgc3ByaXRlIHRoYXQgd2lsbCB1c2UgYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICovXG5UaWxpbmdTcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQsd2lkdGgsaGVpZ2h0KVxue1xuICAgIHZhciB0ZXh0dXJlID0gY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgJyArIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKHRleHR1cmUsd2lkdGgsaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBBIG5ldyBUaWxpbmdTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgd2lkdGgsIGhlaWdodCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRpbGluZ1Nwcml0ZShjb3JlLlRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpLHdpZHRoLGhlaWdodCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgRGlzcGxheU9iamVjdCA9IGNvcmUuRGlzcGxheU9iamVjdCxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gbnVsbDtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbEhpdFRlc3QgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsRGVzdHJveSA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVkU3ByaXRlID0gbnVsbDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGlzcGxheU9iamVjdC5wcm90b3R5cGUsIHtcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgeW91IHdhbnQgdGhpcyBkaXNwbGF5IG9iamVjdCB0byBiZSBjYWNoZWQgYXMgYSBiaXRtYXAuXG4gICAgICogVGhpcyBiYXNpY2FsbHkgdGFrZXMgYSBzbmFwIHNob3Qgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IGFzIGl0IGlzIGF0IHRoYXQgbW9tZW50LiBJdCBjYW4gcHJvdmlkZSBhIHBlcmZvcm1hbmNlIGJlbmVmaXQgZm9yIGNvbXBsZXggc3RhdGljIGRpc3BsYXlPYmplY3RzLlxuICAgICAqIFRvIHJlbW92ZSBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ2ZhbHNlJ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGNhY2hlQXNCaXRtYXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVBc0JpdG1hcDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NhY2hlQXNCaXRtYXAgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSB0aGlzLnJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gdGhpcy5yZW5kZXJDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMudXBkYXRlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzID0gdGhpcy5nZXRCb3VuZHM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbERlc3Ryb3kgPSB0aGlzLmRlc3Ryb3k7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQgPSB0aGlzLmNvbnRhaW5zUG9pbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSB0aGlzLl9jYWNoZUFzQml0bWFwRGVzdHJveTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXN0cm95Q2FjaGVkRGlzcGxheU9iamVjdCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXM7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRCb3VuZHMgPSB0aGlzLl9vcmlnaW5hbEdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX29yaWdpbmFsRGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fb3JpZ2luYWxDb250YWluc1BvaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBXZWJHTFxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gdGhlIFdlYkdMIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZFdlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENhY2hlZERpc3BsYXlPYmplY3QoIHJlbmRlcmVyICk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIoIHRoaXMuX2NhY2hlZFNwcml0ZSApO1xufTtcblxuLyoqXG4qIFByZXBhcmVzIHRoZSBXZWJHTCByZW5kZXJlciB0byBjYWNoZSB0aGUgc3ByaXRlXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGZpcnN0IHdlIGZsdXNoIGFueXRoaW5nIGxlZnQgaW4gdGhlIHJlbmRlcmVyIChvdGhlcndpc2UgaXQgd291bGQgZ2V0IHJlbmRlcmVkIHRvIHRoZSBjYWNoZWQgdGV4dHVyZSlcbiAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbiAgICAvL3RoaXMuZmlsdGVycz0gW107XG4gICAgLy8gbmV4dCB3ZSBmaW5kIHRoZSBkaW1lbnNpb25zIG9mIHRoZSB1bnRyYW5zZm9ybWVkIG9iamVjdFxuICAgIC8vIHRoaXMgZnVuY3Rpb24gYWxzbyBjYWxscyB1cGRhdGV0cmFuc2Zvcm0gb24gYWxsIGl0cyBjaGlsZHJlbiBhcyBwYXJ0IG9mIHRoZSBtZWFzdXJpbmcuIFRoaXMgbWVhbnMgd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIHRyYW5zZm9ybSBhZ2FpbiBpbiB0aGlzIGZ1bmN0aW9uXG4gICAgLy8gVE9ETyBwYXNzIGFuIG9iamVjdCB0byBjbG9uZSB0b28/IHNhdmVzIGhhdmluZyB0byBjcmVhdGUgYSBuZXcgb25lIGVhY2ggdGltZSFcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmNsb25lKCk7XG5cbiAgICAvLyBhZGQgc29tZSBwYWRkaW5nIVxuICAgIGlmKHRoaXMuX2ZpbHRlcnMpXG4gICAge1xuICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuX2ZpbHRlcnNbMF0ucGFkZGluZztcbiAgICAgICAgYm91bmRzLnggLT0gcGFkZGluZztcbiAgICAgICAgYm91bmRzLnkgLT0gcGFkZGluZztcblxuICAgICAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG4gICAgfVxuXG4gICAgLy8gZm9yIG5vdyB3ZSBjYWNoZSB0aGUgY3VycmVudCByZW5kZXJUYXJnZXQgdGhhdCB0aGUgd2ViR0wgcmVuZGVyZXIgaXMgY3VycmVudGx5IHVzaW5nLlxuICAgIC8vIHRoaXMgY291bGQgYmUgbW9yZSBlbGVnZW50Li5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldDtcbiAgICAvLyBXZSBhbHNvIHN0b3JlIHRoZSBmaWx0ZXIgc3RhY2sgLSBJIHdpbGwgZGVmaW5pdGVseSBsb29rIHRvIGNoYW5nZSBob3cgdGhpcyB3b3JrcyBhIGxpdHRsZSBsYXRlciBkb3duIHRoZSBsaW5lLlxuICAgIHZhciBzdGFjayA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2s7XG5cbiAgICAvLyB0aGlzIHJlbmRlclRleHR1cmUgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBjYWNoZWQgRGlzcGxheU9iamVjdFxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG5cblxuICAgIC8vIHNldCBhbGwgcHJvcGVydGllcyB0byB0aGVyZSBvcmlnaW5hbCBzbyB3ZSBjYW4gcmVuZGVyIHRvIGEgdGV4dHVyZVxuICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoY2FjaGVkUmVuZGVyVGFyZ2V0KTtcbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmZpbHRlclN0YWNrID0gc3RhY2s7XG5cbiAgICB0aGlzLnJlbmRlcldlYkdMICAgICA9IHRoaXMuX3JlbmRlckNhY2hlZFdlYkdMO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICAgICAgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgdHJhbnNmb3JtIG9mIHRoZSBjYWNoZWQgc3ByaXRlIHRvIGF2b2lkIHRoZSBuYXN0eSBmbGlja2VyLi5cbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgLy8gbWFwIHRoZSBoaXQgdGVzdC4uXG4gICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fY2FjaGVkU3ByaXRlLmNvbnRhaW5zUG9pbnQuYmluZCh0aGlzLl9jYWNoZWRTcHJpdGUpO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgc3ByaXRlIHdpdGggY2FudmFzXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gdGhlIENhbnZhcyByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9yZW5kZXJDYWNoZWRDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdENhbnZhcyggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLnJlbmRlckNhbnZhcyhyZW5kZXJlcik7XG59O1xuXG4vL1RPRE8gdGhpcyBjYW4gYmUgdGhlIHNhbWUgYXMgdGhlIHdlYkdMIHZlcmlzb24uLiB3aWxsIG5lZWQgdG8gZG8gYSBsaXR0bGUgdHdlYWtpbmcgZmlyc3QgdGhvdWdoLi5cbi8qKlxuKiBQcmVwYXJlcyB0aGUgQ2FudmFzIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvL2dldCBib3VuZHMgYWN0dWFsbHkgdHJhbnNmb3JtcyB0aGUgb2JqZWN0IGZvciB1cyBhbHJlYWR5IVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIG0sIHRydWUpO1xuXG4gICAgLy8gbm93IHJlc3RvcmUgdGhlIHN0YXRlIGJlIHNldHRpbmcgdGhlIG5ldyBwcm9wZXJ0aWVzXG4gICAgcmVuZGVyZXIuY29udGV4dCA9IGNhY2hlZFJlbmRlclRhcmdldDtcblxuICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fcmVuZGVyQ2FjaGVkQ2FudmFzO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICA9IHRoaXMuX2dldENhY2hlZEJvdW5kcztcblxuXG4gICAgLy8gY3JlYXRlIG91ciBjYWNoZWQgc3ByaXRlXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IGNvcmUuU3ByaXRlKHJlbmRlclRleHR1cmUpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogQ2FsY3VsYXRlcyB0aGUgYm91bmRzIG9mIHRoZSBjYWNoZWQgc3ByaXRlXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2dldENhY2hlZEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLl9jYWNoZWRTcHJpdGUuZ2V0Qm91bmRzKCk7XG59O1xuXG4vKipcbiogRGVzdHJveXMgdGhlIGNhY2hlZCBzcHJpdGUuXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX3RleHR1cmUuZGVzdHJveSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59O1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcERlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSgpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSBpbnN0YW5jZSBuYW1lIG9mIHRoZSBvYmplY3QuXG4gKlxuICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAqIEBtZW1iZXIge3N0cmluZ31cbiAqL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5uYW1lID0gbnVsbDtcblxuLyoqXG4qIFJldHVybnMgdGhlIGRpc3BsYXkgb2JqZWN0IGluIHRoZSBjb250YWluZXJcbipcbiogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuKiBAcGFyYW0gbmFtZSB7c3RyaW5nfSBpbnN0YW5jZSBuYW1lXG4qIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiovXG5jb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWUgPSBmdW5jdGlvbiAobmFtZSlcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbltpXS5uYW1lID09PSBuYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdFxuKlxuKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuKiBAcGFyYW0gcG9pbnQge1BvaW50fSB0aGUgcG9pbnQgdG8gd3JpdGUgdGhlIGdsb2JhbCB2YWx1ZSB0by4gSWYgbnVsbCBhIG5ldyBwb2ludCB3aWxsIGJlIHJldHVybmVkXG4qIEByZXR1cm4ge1BvaW50fVxuKi9cbmNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0R2xvYmFsUG9zaXRpb24gPSBmdW5jdGlvbiAocG9pbnQpXG57XG4gICAgcG9pbnQgPSBwb2ludCB8fCBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgaWYodGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICBwb2ludC54ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMud29ybGRUcmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHBvaW50LnggPSB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIHBvaW50LnkgPSB0aGlzLnBvc2l0aW9uLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxucmVxdWlyZSgnLi9jYWNoZUFzQml0bWFwJyk7XG5yZXF1aXJlKCcuL2dldENoaWxkQnlOYW1lJyk7XG5yZXF1aXJlKCcuL2dldEdsb2JhbFBvc2l0aW9uJyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmV4dHJhc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNb3ZpZUNsaXA6ICAgICAgcmVxdWlyZSgnLi9Nb3ZpZUNsaXAnKSxcbiAgICBUaWxpbmdTcHJpdGU6ICAgcmVxdWlyZSgnLi9UaWxpbmdTcHJpdGUnKSxcbiAgICBCaXRtYXBUZXh0OiAgICAgcmVxdWlyZSgnLi9CaXRtYXBUZXh0Jylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGUgWSBpcyBmbGlwcGVkIGluIHRoaXMgc2hhZGVyIGZvciBzb21lIHJlYXNvbi5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgc2hhZGVyIDogaHR0cHM6Ly93d3cuc2hhZGVydG95LmNvbS92aWV3L2xzc0dEaiBieSBAbW92QVgxM2hcbiAqL1xuXG4vKipcbiAqIEFuIEFTQ0lJIGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQXNjaWlGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gZmxvYXQgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IGNoYXJhY3RlcihmbG9hdCBuLCB2ZWMyIHApXFxue1xcbiAgICBwID0gZmxvb3IocCp2ZWMyKDQuMCwgLTQuMCkgKyAyLjUpO1xcbiAgICBpZiAoY2xhbXAocC54LCAwLjAsIDQuMCkgPT0gcC54ICYmIGNsYW1wKHAueSwgMC4wLCA0LjApID09IHAueSlcXG4gICAge1xcbiAgICAgICAgaWYgKGludChtb2Qobi9leHAyKHAueCArIDUuMCpwLnkpLCAyLjApKSA9PSAxKSByZXR1cm4gMS4wO1xcbiAgICB9XFxuICAgIHJldHVybiAwLjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5O1xcblxcbiAgICB2ZWMzIGNvbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgZmxvb3IoIHV2IC8gcGl4ZWxTaXplICkgKiBwaXhlbFNpemUgLyBkaW1lbnNpb25zLnh5KS5yZ2I7XFxuXFxuICAgIGZsb2F0IGdyYXkgPSAoY29sLnIgKyBjb2wuZyArIGNvbC5iKSAvIDMuMDtcXG5cXG4gICAgZmxvYXQgbiA9ICA2NTUzNi4wOyAgICAgICAgICAgICAvLyAuXFxuICAgIGlmIChncmF5ID4gMC4yKSBuID0gNjU2MDAuMDsgICAgLy8gOlxcbiAgICBpZiAoZ3JheSA+IDAuMykgbiA9IDMzMjc3Mi4wOyAgIC8vICpcXG4gICAgaWYgKGdyYXkgPiAwLjQpIG4gPSAxNTI1NTA4Ni4wOyAvLyBvXFxuICAgIGlmIChncmF5ID4gMC41KSBuID0gMjMzODUxNjQuMDsgLy8gJlxcbiAgICBpZiAoZ3JheSA+IDAuNikgbiA9IDE1MjUyMDE0LjA7IC8vIDhcXG4gICAgaWYgKGdyYXkgPiAwLjcpIG4gPSAxMzE5OTQ1Mi4wOyAvLyBAXFxuICAgIGlmIChncmF5ID4gMC44KSBuID0gMTE1MTI4MTAuMDsgLy8gI1xcblxcbiAgICB2ZWMyIHAgPSBtb2QoIHV2IC8gKCBwaXhlbFNpemUgKiAwLjUgKSwgMi4wKSAtIHZlYzIoMS4wKTtcXG4gICAgY29sID0gY29sICogY2hhcmFjdGVyKG4sIHApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbCwgMS4wKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiA4IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkFzY2lpRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQXNjaWlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXNjaWlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFzY2lpRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBc2NpaUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGl4ZWwgc2l6ZSB1c2VkIGJ5IHRoZSBmaWx0ZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Bc2NpaUZpbHRlciNcbiAgICAgKi9cbiAgICBzaXplOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsb29tRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsb29tRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlciA9IG5ldyBCbHVyWUZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcbn1cblxuQmxvb21GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbG9vbUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbG9vbUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxvb21GaWx0ZXI7XG5cbkJsb29tRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAvL1RPRE8gLSBjb3B5VGV4U3ViSW1hZ2UyRCBjb3VsZCBiZSB1c2VkIGhlcmU/XG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5TQ1JFRU4pO1xuXG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsb29tRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cblxuLyoqXG4gKiBUaGUgQmx1ckRpckZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0b3dhcmQgYSBkaXJlY3Rpb24gdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpclhcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJZXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJEaXJGaWx0ZXIoZGlyWCwgZGlyWSlcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gZmxvYXQgZGlyWDtcXG51bmlmb3JtIGZsb2F0IGRpclk7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbM107XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWSApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApICogMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pICogMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pICogMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSAqIDAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgZGlyWDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogZGlyWCB8fCAwIH0sXG4gICAgICAgICAgICBkaXJZOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJZIHx8IDAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWCBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJYID0gZGlyWCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWSBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJZID0gZGlyWSB8fCAwO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJEaXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJEaXJGaWx0ZXI7XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcikge1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZiAodGhpcy5wYXNzZXMgPT09IDEpIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCByZW5kZXJUYXJnZXQsIGNsZWFyKTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMjsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL3RoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvICh0aGlzLnBhc3NlcysoaSoyKSkgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCByZW5kZXJUYXJnZXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IHZhbHVlICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBkaXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyWDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZGlyWC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJZO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJZLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWUZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBCbHVyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG59XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJGaWx0ZXI7XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHBhc3Nlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5ibHVyWEZpbHRlci5wYXNzZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcyA9IHRoaXMuYmx1cllGaWx0ZXIucGFzc2VzID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1clhGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJYRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAxMiAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwNCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuXFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1clhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1clhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJYRmlsdGVyO1xuXG5CbHVyWEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1clhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJYRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gIE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJZRmlsdGVyIGFwcGxpZXMgYSBob3Jpem9udGFsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAxMiAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDEyICogc3RyZW5ndGgpO1xcblxcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJZRmlsdGVyO1xuXG5CbHVyWUZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gTWF0aC5hYnModGhpcy5zdHJlbmd0aCkgLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIFNtYXJ0IEJsdXIgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTbWFydEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgKiBwZXJjZW50KTtcXG4gICAgICAgIHNhbXBsZS5yZ2IgKj0gc2FtcGxlLmE7XFxuICAgICAgICBjb2xvciArPSBzYW1wbGUgKiB3ZWlnaHQ7XFxuICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgLyB0b3RhbDtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAvPSBnbF9GcmFnQ29sb3IuYSArIDAuMDAwMDE7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgZGVsdGE6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC4xLCB5OiAwLjAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU21hcnRCbHVyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTbWFydEJsdXJGaWx0ZXI7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA1eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIGBgYGpzXG4gKiAgdmFyIGNvbG9yTWF0cml4ID0gbmV3IFBJWEkuQ29sb3JNYXRyaXhGaWx0ZXIoKTtcbiAqICBjb250YWluZXIuZmlsdGVycyA9IFtjb2xvck1hdHJpeF07XG4gKiAgY29sb3JNYXRyaXguY29udHJhc3QoMik7XG4gKiBgYGBcbiAqIEBhdXRob3IgQ2zDqW1lbnQgQ2hlbmViYXVsdCA8Y2xlbWVudEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ29sb3JNYXRyaXhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgbVsyNV07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcblxcbiAgICB2ZWM0IGMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IuciA9IChtWzBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzJdICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IG1bNF07XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5nID0gKG1bNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bN10gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gbVs5XTtcXG5cXG4gICAgIGdsX0ZyYWdDb2xvci5iID0gKG1bMTBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzExXSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IG1bMTRdO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmEgPSAobVsxNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTZdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gbVsxOV07XFxuXFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICcxZnYnLCB2YWx1ZTogW1xuICAgICAgICAgICAgICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvck1hdHJpeEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JNYXRyaXhGaWx0ZXI7XG5cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGN1cnJlbnQgbWF0cml4IGFuZCBzZXQgdGhlIG5ldyBvbmVcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IGlmIHRydWUsIGN1cnJlbnQgbWF0cml4IGFuZCBtYXRyaXggYXJlIG11bHRpcGxpZWQuIElmIGZhbHNlLCBqdXN0IHNldCB0aGUgY3VycmVudCBtYXRyaXggd2l0aCBAcGFyYW0gbWF0cml4XG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fbG9hZE1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgsIG11bHRpcGx5KVxue1xuICAgIG11bHRpcGx5ID0gISFtdWx0aXBseTtcblxuICAgIHZhciBuZXdNYXRyaXggPSBtYXRyaXg7XG5cbiAgICBpZiAobXVsdGlwbHkpIHtcbiAgICAgICAgdGhpcy5fbXVsdGlwbHkobmV3TWF0cml4LCB0aGlzLnVuaWZvcm1zLm0udmFsdWUsIG1hdHJpeCk7XG4gICAgICAgIG5ld01hdHJpeCA9IHRoaXMuX2NvbG9yTWF0cml4KG5ld01hdHJpeCk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgbWF0cml4XG4gICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gbmV3TWF0cml4O1xufTtcblxuLyoqXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQ1J3NcbiAqXG4gKiBAcGFyYW0gb3V0IHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0gYSB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIGIge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyBvdXQge251bWJlcltdfSAobWF0IDV4NClcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpXG57XG5cbiAgICAvLyBSZWQgQ2hhbm5lbFxuICAgIG91dFswXSA9IChhWzBdICogYlswXSkgKyAoYVsxXSAqIGJbNV0pICsgKGFbMl0gKiBiWzEwXSkgKyAoYVszXSAqIGJbMTVdKTtcbiAgICBvdXRbMV0gPSAoYVswXSAqIGJbMV0pICsgKGFbMV0gKiBiWzZdKSArIChhWzJdICogYlsxMV0pICsgKGFbM10gKiBiWzE2XSk7XG4gICAgb3V0WzJdID0gKGFbMF0gKiBiWzJdKSArIChhWzFdICogYls3XSkgKyAoYVsyXSAqIGJbMTJdKSArIChhWzNdICogYlsxN10pO1xuICAgIG91dFszXSA9IChhWzBdICogYlszXSkgKyAoYVsxXSAqIGJbOF0pICsgKGFbMl0gKiBiWzEzXSkgKyAoYVszXSAqIGJbMThdKTtcbiAgICBvdXRbNF0gPSAoYVswXSAqIGJbNF0pICsgKGFbMV0gKiBiWzldKSArIChhWzJdICogYlsxNF0pICsgKGFbM10gKiBiWzE5XSk7XG5cbiAgICAvLyBHcmVlbiBDaGFubmVsXG4gICAgb3V0WzVdID0gKGFbNV0gKiBiWzBdKSArIChhWzZdICogYls1XSkgKyAoYVs3XSAqIGJbMTBdKSArIChhWzhdICogYlsxNV0pO1xuICAgIG91dFs2XSA9IChhWzVdICogYlsxXSkgKyAoYVs2XSAqIGJbNl0pICsgKGFbN10gKiBiWzExXSkgKyAoYVs4XSAqIGJbMTZdKTtcbiAgICBvdXRbN10gPSAoYVs1XSAqIGJbMl0pICsgKGFbNl0gKiBiWzddKSArIChhWzddICogYlsxMl0pICsgKGFbOF0gKiBiWzE3XSk7XG4gICAgb3V0WzhdID0gKGFbNV0gKiBiWzNdKSArIChhWzZdICogYls4XSkgKyAoYVs3XSAqIGJbMTNdKSArIChhWzhdICogYlsxOF0pO1xuICAgIG91dFs5XSA9IChhWzVdICogYls0XSkgKyAoYVs2XSAqIGJbOV0pICsgKGFbN10gKiBiWzE0XSkgKyAoYVs4XSAqIGJbMTldKTtcblxuICAgIC8vIEJsdWUgQ2hhbm5lbFxuICAgIG91dFsxMF0gPSAoYVsxMF0gKiBiWzBdKSArIChhWzExXSAqIGJbNV0pICsgKGFbMTJdICogYlsxMF0pICsgKGFbMTNdICogYlsxNV0pO1xuICAgIG91dFsxMV0gPSAoYVsxMF0gKiBiWzFdKSArIChhWzExXSAqIGJbNl0pICsgKGFbMTJdICogYlsxMV0pICsgKGFbMTNdICogYlsxNl0pO1xuICAgIG91dFsxMl0gPSAoYVsxMF0gKiBiWzJdKSArIChhWzExXSAqIGJbN10pICsgKGFbMTJdICogYlsxMl0pICsgKGFbMTNdICogYlsxN10pO1xuICAgIG91dFsxM10gPSAoYVsxMF0gKiBiWzNdKSArIChhWzExXSAqIGJbOF0pICsgKGFbMTJdICogYlsxM10pICsgKGFbMTNdICogYlsxOF0pO1xuICAgIG91dFsxNF0gPSAoYVsxMF0gKiBiWzRdKSArIChhWzExXSAqIGJbOV0pICsgKGFbMTJdICogYlsxNF0pICsgKGFbMTNdICogYlsxOV0pO1xuXG4gICAgLy8gQWxwaGEgQ2hhbm5lbFxuICAgIG91dFsxNV0gPSAoYVsxNV0gKiBiWzBdKSArIChhWzE2XSAqIGJbNV0pICsgKGFbMTddICogYlsxMF0pICsgKGFbMThdICogYlsxNV0pO1xuICAgIG91dFsxNl0gPSAoYVsxNV0gKiBiWzFdKSArIChhWzE2XSAqIGJbNl0pICsgKGFbMTddICogYlsxMV0pICsgKGFbMThdICogYlsxNl0pO1xuICAgIG91dFsxN10gPSAoYVsxNV0gKiBiWzJdKSArIChhWzE2XSAqIGJbN10pICsgKGFbMTddICogYlsxMl0pICsgKGFbMThdICogYlsxN10pO1xuICAgIG91dFsxOF0gPSAoYVsxNV0gKiBiWzNdKSArIChhWzE2XSAqIGJbOF0pICsgKGFbMTddICogYlsxM10pICsgKGFbMThdICogYlsxOF0pO1xuICAgIG91dFsxOV0gPSAoYVsxNV0gKiBiWzRdKSArIChhWzE2XSAqIGJbOV0pICsgKGFbMTddICogYlsxNF0pICsgKGFbMThdICogYlsxOV0pO1xuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEByZXR1cm4gbSB7bnVtYmVyW119IChtYXQgNXg0KSB3aXRoIGFsbCB2YWx1ZXMgYmV0d2VlbiAwLTFcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9jb2xvck1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgLy8gQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICAgIHZhciBtID0gbmV3IEZsb2F0MzJBcnJheShtYXRyaXgpO1xuICAgIG1bNF0gLz0gMjU1O1xuICAgIG1bOV0gLz0gMjU1O1xuICAgIG1bMTRdIC89IDI1NTtcbiAgICBtWzE5XSAvPSAyNTU7XG5cbiAgICByZXR1cm4gbTtcbn07XG5cbi8qKlxuICogQWRqdXN0cyBicmlnaHRuZXNzXG4gKlxuICogQHBhcmFtIGIge251bWJlcn0gdmFsdWUgb2YgdGhlIGJyaWd0aG5lc3MgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJpZ2h0bmVzcyA9IGZ1bmN0aW9uIChiLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBiLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCBiLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCBiLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgbWF0cmljZXMgaW4gZ3JleSBzY2FsZXNcbiAqXG4gKiBAcGFyYW0gc2NhbGUge251bWJlcn0gdmFsdWUgb2YgdGhlIGdyZXkgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlID0gZnVuY3Rpb24gKHNjYWxlLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuLy9BbWVyaWNhbml6ZWQgYWxpYXNcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmF5c2NhbGUgPSBDb2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlO1xuXG4vKipcbiAqIFNldCB0aGUgYmxhY2sgYW5kIHdoaXRlIG1hdHJpY2VcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ibGFja0FuZFdoaXRlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBodWUgcHJvcGVydHkgb2YgdGhlIGNvbG9yXG4gKlxuICogQHBhcmFtIHJvdGF0aW9uIHtudW1iZXJ9IGluIGRlZ3JlZXNcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5odWUgPSBmdW5jdGlvbiAocm90YXRpb24sIG11bHRpcGx5KVxue1xuICAgIHJvdGF0aW9uID0gKHJvdGF0aW9uIHx8IDApIC8gMTgwICogTWF0aC5QSTtcbiAgICB2YXIgY29zID0gTWF0aC5jb3Mocm90YXRpb24pLFxuICAgICAgICBzaW4gPSBNYXRoLnNpbihyb3RhdGlvbik7XG5cbiAgICAvLyBsdW1pbmFuY2VSZWQsIGx1bWluYW5jZUdyZWVuLCBsdW1pbmFuY2VCbHVlXG4gICAgdmFyIGx1bVIgPSAwLjIxMywgLy8gb3IgMC4zMDg2XG4gICAgICAgIGx1bUcgPSAwLjcxNSwgLy8gb3IgMC42MDk0XG4gICAgICAgIGx1bUIgPSAwLjA3MjsgLy8gb3IgMC4wODIwXG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBsdW1SICsgY29zICogKDEgLSBsdW1SKSArIHNpbiAqICgtbHVtUiksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKC1sdW1HKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoMSAtIGx1bUIpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgwLjE0MyksIGx1bUcgKyBjb3MgKiAoMSAtIGx1bUcpICsgc2luICogKDAuMTQwKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoLTAuMjgzKSwgMCwgMCxcbiAgICAgICAgbHVtUiArIGNvcyAqICgtbHVtUikgKyBzaW4gKiAoLSgxIC0gbHVtUikpLCBsdW1HICsgY29zICogKC1sdW1HKSArIHNpbiAqIChsdW1HKSwgbHVtQiArIGNvcyAqICgxIC0gbHVtQikgKyBzaW4gKiAobHVtQiksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLyoqXG4gKiBTZXQgdGhlIGNvbnRyYXN0IG1hdHJpeCwgaW5jcmVhc2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBkYXJrIGFuZCBicmlnaHRcbiAqIEluY3JlYXNlIGNvbnRyYXN0IDogc2hhZG93cyBkYXJrZXIgYW5kIGhpZ2hsaWdodHMgYnJpZ2h0ZXJcbiAqIERlY3JlYXNlIGNvbnRyYXN0IDogYnJpbmcgdGhlIHNoYWRvd3MgdXAgYW5kIHRoZSBoaWdobGlnaHRzIGRvd25cbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBjb250cmFzdFxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbnRyYXN0ID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHYgPSAoYW1vdW50IHx8IDApICsgMTtcbiAgICB2YXIgbyA9IC0xMjggKiAodiAtIDEpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgdiwgMCwgMCwgMCwgbyxcbiAgICAgICAgMCwgdiwgMCwgMCwgbyxcbiAgICAgICAgMCwgMCwgdiwgMCwgbyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHNhdHVyYXRpb24gbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGNvbG9yc1xuICogSW5jcmVhc2Ugc2F0dXJhdGlvbiA6IGluY3JlYXNlIGNvbnRyYXN0LCBicmlnaHRuZXNzLCBhbmQgc2hhcnBuZXNzXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNhdHVyYXRlID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHggPSAoYW1vdW50IHx8IDApICogMiAvIDMgKyAxO1xuICAgIHZhciB5ID0gKCh4IC0gMSkgKiAtMC41KTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHgsIHksIHksIDAsIDAsXG4gICAgICAgIHksIHgsIHksIDAsIDAsXG4gICAgICAgIHksIHksIHgsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRGVzYXR1cmF0ZSBpbWFnZSAocmVtb3ZlIGNvbG9yKVxuICpcbiAqIENhbGwgdGhlIHNhdHVyYXRlIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmRlc2F0dXJhdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICB0aGlzLnNhdHVyYXRlKC0xKTtcbn07XG5cbi8qKlxuICogTmVnYXRpdmUgaW1hZ2UgKGludmVyc2Ugb2YgY2xhc3NpYyByZ2IgbWF0cml4KVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uZWdhdGl2ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAxLCAxLCAwLCAwLFxuICAgICAgICAxLCAwLCAxLCAwLCAwLFxuICAgICAgICAxLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNlcGlhIGltYWdlXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNlcGlhID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMzkzLCAwLjc2ODk5OTksIDAuMTg4OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMzQ5LCAwLjY4NTk5OTksIDAuMTY3OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMjcyLCAwLjUzMzk5OTksIDAuMTMwOTk5OTksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgbW90aW9uIHBpY3R1cmUgcHJvY2VzcyBpbnZlbnRlZCBpbiAxOTE2ICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50ZWNobmljb2xvciA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjkxMjUyNzc4OTE0NTYwODMsIC0wLjg1NDUzNDQ5NzY5NTE2NDUsIC0wLjA5MTU1NTA4NDgyNzU1NTg1LCAwLCAxMS43OTM2MDM0MzQzNzczMzcsXG4gICAgICAgIC0wLjMwODc4MzMzODU5MjgwOTcsIDEuNzY1ODkwODU1NTQ1ODQyOCwgLTAuMTA2MDE3NDMwNzQ3MjIyNDUsIDAsIC03MC4zNTIwNTE2MTQ2MTM5OCxcbiAgICAgICAgLTAuMjMxMTAzMzc3NTQ4NjE2LCAtMC43NTAxODk5MTk3NDQwMjEyLCAxLjg0NzU5NzgxNjEwODE4OSwgMCwgMzAuOTUwOTQwODY5NDkxMTM4LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFBvbGFyb2lkIGZpbHRlclxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wb2xhcm9pZCA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjQzOCwgLTAuMDYyLCAtMC4wNjIsIDAsIDAsXG4gICAgICAgIC0wLjEyMiwgMS4zNzgsIC0wLjEyMiwgMCwgMCxcbiAgICAgICAgLTAuMDE2LCAtMC4wMTYsIDEuNDgzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEZpbHRlciB3aG8gdHJhbnNmb3JtcyA6IFJlZCAtPiBCbHVlIGFuZCBCbHVlIC0+IFJlZFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50b0JHUiA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIENvbG9yIHJldmVyc2FsIGZpbG0gaW50cm9kdWNlZCBieSBFYXN0bWFuIEtvZGFrIGluIDE5MzUuICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5rb2RhY2hyb21lID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuMTI4NTU4MjM5NjU5MzUyNSwgLTAuMzk2NzM4MjI4MzYwMTM0OCwgLTAuMDM5OTI1NTkxNzI5MjE3OTMsIDAsIDYzLjcyOTU4NzYyMTk2NTAyLFxuICAgICAgICAtMC4xNjQwNDMzOTk2MjI0NDYxNiwgMS4wODM1MjUxNTY2MjkxMzA0LCAtMC4wNTQ5ODgwNTExNTYzMzEzMiwgMCwgMjQuNzMyNDA3ODk2NzA2MjAzLFxuICAgICAgICAtMC4xNjc4NjAxMDcwNjE1NTc2MywgLTAuNTYwMzQxNjI3NzY5NTI0OCwgMS42MDE0ODUwNzYxOTY0OTQzLCAwLCAzNS42Mjk4MjgwNzQ2MDk0NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBCcm93biBkZWxpY2lvdXMgYnJvd25pIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJvd25pID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNTk5NzAyMzQ5ODE1OTcxNSwgMC4zNDU1MzI0MzA0ODM5MTI2MywgLTAuMjcwODI5ODY3NDUzODA0MiwgMCwgNDcuNDMxOTI4NTU2MDA4NzMsXG4gICAgICAgIC0wLjAzNzcwMzI0OTgzNzc4MzE1NywgMC44NjA5NTc3NTg3OTkyNjQxLCAwLjE1MDU5NTUyMzg4NDU5OTEzLCAwLCAtMzYuOTY4NDE0OTgzMTkxMjcsXG4gICAgICAgIDAuMjQxMTM2MzUxMjgxNTMzMzUsIC0wLjA3NDQxMDM3OTA4NDIyNDkyLCAwLjQ0OTcyMTgyMDY0ODc3MTUzLCAwLCAtNy41NjIwNzUyNzc1OTEyODMsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBWaW50YWdlIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudmludGFnZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjYyNzkzNDU2MzU2MDU5OTQsIDAuMzIwMjE4MzQyMDgxOTM2NywgLTAuMDM5NjU0MDgyMTEzMTI0NTMsIDAsIDkuNjUxMjg1ODM1Mjk0MTIzLFxuICAgICAgICAwLjAyNTc4Mzk3NzA0ODA4ODY4LCAwLjY0NDExODg2NDQzNzQ3NzEsIDAuMDMyNTkxMjc2MTYxNDkyOTQsIDAsIDcuNDYyODI5MTc2NDcwNTkxLFxuICAgICAgICAwLjA0NjYwNTU1NTY3ODI3MTksIC0wLjA4NTEyMzI5ODcyNDc4OTEsIDAuNTI0MTY0ODAxODcwMDQ2NSwgMCwgNS4xNTkxOTA1ODgyMzUyOTYsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBXZSBkb24ndCBrbm93IGV4YWN0bHkgd2hhdCBpdCBkb2VzLCBraW5kIG9mIGdyYWRpZW50IG1hcCwgYnV0IGZ1bm55IHRvIHBsYXkgd2l0aCFcbiAqXG4gKiBAcGFyYW0gZGVzYXR1cmF0aW9uIHtudW1iZXJ9XG4gKiBAcGFyYW0gdG9uZWQge251bWJlcn1cbiAqIEBwYXJhbSBsaWdodENvbG9yIHtzdHJpbmd9IChleGFtcGxlIDogXCIweEZGRTU4MFwiKVxuICogQHBhcmFtIGRhcmtDb2xvciB7c3RyaW5nfSAgKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbG9yVG9uZSA9IGZ1bmN0aW9uIChkZXNhdHVyYXRpb24sIHRvbmVkLCBsaWdodENvbG9yLCBkYXJrQ29sb3IsIG11bHRpcGx5KVxue1xuICAgIGRlc2F0dXJhdGlvbiA9IGRlc2F0dXJhdGlvbiB8fCAwLjI7XG4gICAgdG9uZWQgPSB0b25lZCB8fCAwLjE1O1xuICAgIGxpZ2h0Q29sb3IgPSBsaWdodENvbG9yIHx8IDB4RkZFNTgwO1xuICAgIGRhcmtDb2xvciA9IGRhcmtDb2xvciB8fCAweDMzODAwMDtcblxuICAgIHZhciBsUiA9ICgobGlnaHRDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEcgPSAoKGxpZ2h0Q29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEIgPSAobGlnaHRDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgdmFyIGRSID0gKChkYXJrQ29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGRHID0gKChkYXJrQ29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEIgPSAoZGFya0NvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjMsIDAuNTksIDAuMTEsIDAsIDAsXG4gICAgICAgIGxSLCBsRywgbEIsIGRlc2F0dXJhdGlvbiwgMCxcbiAgICAgICAgZFIsIGRHLCBkQiwgdG9uZWQsIDAsXG4gICAgICAgIGxSIC0gZFIsIGxHIC0gZEcsIGxCIC0gZEIsIDAsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBOaWdodCBlZmZlY3RcbiAqXG4gKiBAcGFyYW0gaW50ZW5zaXR5IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubmlnaHQgPSBmdW5jdGlvbiAoaW50ZW5zaXR5LCBtdWx0aXBseSlcbntcbiAgICBpbnRlbnNpdHkgPSBpbnRlbnNpdHkgfHwgMC4xO1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGludGVuc2l0eSAqICggLTIuMCksIC1pbnRlbnNpdHksIDAsIDAsIDAsXG4gICAgICAgIC1pbnRlbnNpdHksIDAsIGludGVuc2l0eSwgMCwgMCxcbiAgICAgICAgMCwgaW50ZW5zaXR5LCBpbnRlbnNpdHkgKiAyLjAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLypcbiAqIFByZWRhdG9yIGVmZmVjdFxuICpcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIGEgbmV3IGluZGVwZW50IG9uZVxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gaG93IG11Y2ggdGhlIHByZWRhdG9yIGZlZWxzIGhpcyBmdXR1cmUgdmljdGltXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucHJlZGF0b3IgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxMS4yMjQxMzA2MzA0OTMxNjQgKiBhbW91bnQsIC00Ljc5NDQ4Njk5OTUxMTcxOSAqIGFtb3VudCwgLTIuODc0NjExODU0NTUzMjIyNyAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC40MDM0MjQzODIyMDk3Nzc4MyAqIGFtb3VudCxcbiAgICAgICAgLTMuNjMzMDY5NzUzNjQ2ODUwNiAqIGFtb3VudCwgOS4xOTMxNTcxOTYwNDQ5MjIgKiBhbW91bnQsIC0yLjk1MTgxMDgzNjc5MTk5MiAqIGFtb3VudCwgMCAqIGFtb3VudCwgLTEuMzE2MTM1MDQ4ODY2MjcyICogYW1vdW50LFxuICAgICAgICAtMy4yMTg0MTk3OTAyNjc5NDQzICogYW1vdW50LCAtNC4yMzc1MDMwNTE3NTc4MTI1ICogYW1vdW50LCA3LjQ3NjQ0ODA1OTA4MjAzMSAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC44MDQ0NDU5MjIzNzQ3MjUzICogYW1vdW50LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogTFNEIGVmZmVjdFxuICpcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gSG93IGNyYXp5IGlzIHlvdXIgZWZmZWN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubHNkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDIsIC0wLjQsIDAuNSwgMCwgMCxcbiAgICAgICAgLTAuNSwgMiwgLTAuNCwgMCwgMCxcbiAgICAgICAgLTAuNCwgLTAuNSwgMywgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIHRoZSBkZWZhdWx0IG9uZVxuICpcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBmYWxzZSk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hdHJpeCBvZiB0aGUgY29sb3IgbWF0cml4IGZpbHRlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvck1hdHJpeEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCBbMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMF1cbiAgICAgKi9cbiAgICBtYXRyaXg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgbG93ZXJzIHRoZSBjb2xvciBkZXB0aCBvZiB5b3VyIGltYWdlIGJ5IHRoZSBnaXZlbiBhbW91bnQsIHByb2R1Y2luZyBhbiBpbWFnZSB3aXRoIGEgc21hbGxlciBwYWxldHRlLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvclN0ZXBGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc3RlcDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBjb2xvciA9IGZsb29yKGNvbG9yICogc3RlcCkgLyBzdGVwO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdGVwOiB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvclN0ZXBGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yU3RlcEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2Ygc3RlcHMgdG8gcmVkdWNlIHRoZSBwYWxldHRlIGJ5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29sb3JTdGVwRmlsdGVyI1xuICAgICAqL1xuICAgIHN0ZXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb252b2x1dGlvbkZpbHRlciBjbGFzcyBhcHBsaWVzIGEgbWF0cml4IGNvbnZvbHV0aW9uIGZpbHRlciBlZmZlY3QuXG4gKiBBIGNvbnZvbHV0aW9uIGNvbWJpbmVzIHBpeGVscyBpbiB0aGUgaW5wdXQgaW1hZ2Ugd2l0aCBuZWlnaGJvcmluZyBwaXhlbHMgdG8gcHJvZHVjZSBhIG5ldyBpbWFnZS5cbiAqIEEgd2lkZSB2YXJpZXR5IG9mIGltYWdlIGVmZmVjdHMgY2FuIGJlIGFjaGlldmVkIHRocm91Z2ggY29udm9sdXRpb25zLCBpbmNsdWRpbmcgYmx1cnJpbmcsIGVkZ2VcbiAqIGRldGVjdGlvbiwgc2hhcnBlbmluZywgZW1ib3NzaW5nLCBhbmQgYmV2ZWxpbmcuIFRoZSBtYXRyaXggc2hvdWxkIGJlIHNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBTZWUgaHR0cDovL2RvY3MuZ2ltcC5vcmcvZW4vcGx1Zy1pbi1jb252bWF0cml4Lmh0bWwgZm9yIG1vcmUgaW5mby5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSBBbiBhcnJheSBvZiB2YWx1ZXMgdXNlZCBmb3IgbWF0cml4IHRyYW5zZm9ybWF0aW9uLiBTcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFdpZHRoIG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqL1xuZnVuY3Rpb24gQ29udm9sdXRpb25GaWx0ZXIobWF0cml4LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgbWVkaXVtcCB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTtcXG51bmlmb3JtIGZsb2F0IG1hdHJpeFs5XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjNCBjMTEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgLSB0ZXhlbFNpemUpOyAvLyB0b3AgbGVmdFxcbiAgIHZlYzQgYzEyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55IC0gdGV4ZWxTaXplLnkpKTsgLy8gdG9wIGNlbnRlclxcbiAgIHZlYzQgYzEzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgcmlnaHRcXG5cXG4gICB2ZWM0IGMyMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCBsZWZ0XFxuICAgdmVjNCBjMjIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpOyAvLyBtaWQgY2VudGVyXFxuICAgdmVjNCBjMjMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSkpOyAvLyBtaWQgcmlnaHRcXG5cXG4gICB2ZWM0IGMzMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGxlZnRcXG4gICB2ZWM0IGMzMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLngsIHZUZXh0dXJlQ29vcmQueSArIHRleGVsU2l6ZS55KSk7IC8vIGJvdHRvbSBjZW50ZXJcXG4gICB2ZWM0IGMzMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIHRleGVsU2l6ZSk7IC8vIGJvdHRvbSByaWdodFxcblxcbiAgIGdsX0ZyYWdDb2xvciA9XFxuICAgICAgIGMxMSAqIG1hdHJpeFswXSArIGMxMiAqIG1hdHJpeFsxXSArIGMxMyAqIG1hdHJpeFsyXSArXFxuICAgICAgIGMyMSAqIG1hdHJpeFszXSArIGMyMiAqIG1hdHJpeFs0XSArIGMyMyAqIG1hdHJpeFs1XSArXFxuICAgICAgIGMzMSAqIG1hdHJpeFs2XSArIGMzMiAqIG1hdHJpeFs3XSArIGMzMyAqIG1hdHJpeFs4XTtcXG5cXG4gICBnbF9GcmFnQ29sb3IuYSA9IGMyMi5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hdHJpeDogICAgIHsgdHlwZTogJzFmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCkgfSxcbiAgICAgICAgICAgIHRleGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSAvIHdpZHRoLCB5OiAxIC8gaGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb252b2x1dGlvbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29udm9sdXRpb25GaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hdHJpeC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMS90aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueCA9IDEvdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS55ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQSBDcm9zcyBIYXRjaCBlZmZlY3QgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDcm9zc0hhdGNoRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGZsb2F0IGx1bSA9IGxlbmd0aCh0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQueHkpLnJnYik7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wLCAxLjAsIDEuMCwgMS4wKTtcXG5cXG4gICAgaWYgKGx1bSA8IDEuMDApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC43NSlcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjUwKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54ICsgZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuMylcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55IC0gNS4wLCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblwiXG4gICAgKTtcbn1cblxuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNyb3NzSGF0Y2hGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBEaXNwbGFjZW1lbnRGaWx0ZXIgY2xhc3MgdXNlcyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20gdGhlIHNwZWNpZmllZCB0ZXh0dXJlIChjYWxsZWQgdGhlIGRpc3BsYWNlbWVudCBtYXApIHRvIHBlcmZvcm0gYSBkaXNwbGFjZW1lbnQgb2YgYW4gb2JqZWN0LlxuICogWW91IGNhbiB1c2UgdGhpcyBmaWx0ZXIgdG8gYXBwbHkgYWxsIG1hbm9yIG9mIGNyYXp5IHdhcnBpbmcgZWZmZWN0c1xuICogQ3VycmVudGx5IHRoZSByIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB4IGFuZCB0aGUgZyBwcm9wZXJ0eSBvZiB0aGUgdGV4dHVyZSBpcyB1c2VkIHRvIG9mZnNldCB0aGUgeS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiAobWFrZSBzdXJlIGl0cyBhZGRlZCB0byB0aGUgc2NlbmUhKVxuICovXG5mdW5jdGlvbiBEaXNwbGFjZW1lbnRGaWx0ZXIoc3ByaXRlLCBzY2FsZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuICAgIHNwcml0ZS5yZW5kZXJhYmxlID0gZmFsc2U7XG5cbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2TWFwQ29vcmQgPSAoIG90aGVyTWF0cml4ICogdmVjMyggYVRleHR1cmVDb29yZCwgMS4wKSAgKS54eTtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMiBzY2FsZTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXBTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IG1hcCA9ICB0ZXh0dXJlMkQobWFwU2FtcGxlciwgdk1hcENvb3JkKTtcXG5cXG4gICBtYXAgLT0gMC41O1xcbiAgIG1hcC54eSAqPSBzY2FsZTtcXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgbWFwLngsIHZUZXh0dXJlQ29vcmQueSArIG1hcC55KSk7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtYXBTYW1wbGVyOiAgICAgeyB0eXBlOiAnc2FtcGxlcjJEJywgdmFsdWU6IHNwcml0ZS50ZXh0dXJlIH0sXG4gICAgICAgICAgICBvdGhlck1hdHJpeDogICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBtYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSkgfSxcbiAgICAgICAgICAgIHNjYWxlOiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG5cbiAgICBpZiAoc2NhbGUgPT09IG51bGwgfHwgc2NhbGUgPT09IHVuZGVmaW5lZClcbiAgICB7XG4gICAgICAgIHNjYWxlID0gMjA7XG4gICAgfVxuXG4gICAgdGhpcy5zY2FsZSA9IG5ldyBjb3JlLlBvaW50KHNjYWxlLCBzY2FsZSk7XG59XG5cbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGFjZW1lbnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERpc3BsYWNlbWVudEZpbHRlcjtcblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICBmaWx0ZXJNYW5hZ2VyLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeChpbnB1dC5mcmFtZSwgdGhpcy5tYXNrU3ByaXRlLCB0aGlzLm1hc2tNYXRyaXgpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5vdGhlck1hdHJpeC52YWx1ZSA9IHRoaXMubWFza01hdHJpeC50b0FycmF5KHRydWUpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueCA9IHRoaXMuc2NhbGUueCAqICgxL2lucHV0LmZyYW1lLndpZHRoKTtcbiAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlLnkgPSB0aGlzLnNjYWxlLnkgKiAoMS9pbnB1dC5mcmFtZS5oZWlnaHQpO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRGlzcGxhY2VtZW50RmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvZnVuL2RvdHNjcmVlbi5qc1xuICovXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIGRvdHNjcmVlbiBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgdG8gYmUgbWFkZSBvdXQgb2ZcbiAqIGJsYWNrIGFuZCB3aGl0ZSBoYWxmdG9uZSBkb3RzIGxpa2UgYW4gb2xkIHByaW50ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIERvdFNjcmVlbkZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XFxuXFxuZmxvYXQgcGF0dGVybigpXFxue1xcbiAgIGZsb2F0IHMgPSBzaW4oYW5nbGUpLCBjID0gY29zKGFuZ2xlKTtcXG4gICB2ZWMyIHRleCA9IHZUZXh0dXJlQ29vcmQgKiBkaW1lbnNpb25zLnh5O1xcbiAgIHZlYzIgcG9pbnQgPSB2ZWMyKFxcbiAgICAgICBjICogdGV4LnggLSBzICogdGV4LnksXFxuICAgICAgIHMgKiB0ZXgueCArIGMgKiB0ZXgueVxcbiAgICkgKiBzY2FsZTtcXG4gICByZXR1cm4gKHNpbihwb2ludC54KSAqIHNpbihwb2ludC55KSkgKiA0LjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGZsb2F0IGF2ZXJhZ2UgPSAoY29sb3IuciArIGNvbG9yLmcgKyBjb2xvci5iKSAvIDMuMDtcXG4gICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzMoYXZlcmFnZSAqIDEwLjAgLSA1LjAgKyBwYXR0ZXJuKCkpLCBjb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzY2FsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEb3RTY3JlZW5GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERvdFNjcmVlbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBzY2FsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSByYWRpdXMgb2YgdGhlIGVmZmVjdC5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Eb3RTY3JlZW5GaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllUaW50RmlsdGVyIGFwcGxpZXMgYSB2ZXJ0aWNhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1cllUaW50RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24rb2Zmc2V0KSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMyBjb2xvcjtcXG51bmlmb3JtIGZsb2F0IGFscGhhO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBzdW0gPSB2ZWM0KDAuMCk7XFxuXFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KCBjb2xvci5yZ2IgKiBzdW0uYSAqIGFscGhhLCBzdW0uYSAqIGFscGhhICk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgLyA1MTIgfSxcbiAgICAgICAgICAgIGNvbG9yOiB7IHR5cGU6ICdjJywgdmFsdWU6IFswLDAsMF19LFxuICAgICAgICAgICAgYWxwaGE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNyB9LFxuICAgICAgICAgICAgb2Zmc2V0OiB7IHR5cGU6ICcyZicsIHZhbHVlOls1LCA1XX0sXG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZToxfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJZVGludEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllUaW50RmlsdGVyO1xuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCBjbGVhcik7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJZVGludEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllUaW50RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZVGludEZpbHRlciA9IHJlcXVpcmUoJy4vQmx1cllUaW50RmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIERyb3BTaGFkb3dGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRHJvcFNoYWRvd0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyID0gbmV3IEJsdXJZVGludEZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIHRoaXMucGFkZGluZyA9IDMwO1xuXG4gICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgdGhpcy5fYW5nbGUgPSA0NSAqIE1hdGguUEkgLyAxODA7XG4gICAgdGhpcy5fZGlzdGFuY2UgPSAxMDtcbiAgICB0aGlzLmFscGhhID0gMC43NTtcbiAgICB0aGlzLmhpZGVPYmplY3QgPSBmYWxzZTtcbiAgICB0aGlzLmJsZW5kTW9kZSA9IGNvcmUuQkxFTkRfTU9ERVMuTVVMVElQTFk7XG59XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERyb3BTaGFkb3dGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERyb3BTaGFkb3dGaWx0ZXI7XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICBpZih0aGlzLl9kaXJ0eVBvc2l0aW9uKVxuICAgIHtcbiAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVswXSA9IE1hdGguc2luKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5vZmZzZXQudmFsdWVbMV0gPSBNYXRoLmNvcyh0aGlzLl9hbmdsZSkgKiB0aGlzLl9kaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKHRoaXMuYmxlbmRNb2RlKTtcblxuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZighdGhpcy5oaWRlT2JqZWN0KVxuICAgIHtcblxuICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuICAgIH1cblxuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNvbG9yIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgY29sb3I6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIGNvcmUudXRpbHMucmdiMmhleCggdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmNvbG9yLnZhbHVlID0gY29yZS51dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbHBoYSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFscGhhOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzdGFuY2Ugb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBkaXN0YW5jZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3RhbmNlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYW5nbGUgb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fYW5nbGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2FuZ2xlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZ3JleXNjYWxlcyB0aGUgcGFsZXR0ZSBvZiB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gR3JheUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGdyYXk7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peChnbF9GcmFnQ29sb3IucmdiLCB2ZWMzKDAuMjEyNipnbF9GcmFnQ29sb3IuciArIDAuNzE1MipnbF9GcmFnQ29sb3IuZyArIDAuMDcyMipnbF9GcmFnQ29sb3IuYiksIGdyYXkpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBncmF5OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkdyYXlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5HcmF5RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEdyYXlGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmF5LiAxIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGJsYWNrIGFuZCB3aGl0ZSwgMCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuR3JheUZpbHRlciNcbiAgICAgKi9cbiAgICBncmF5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBmaWx0ZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5maWx0ZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEFzY2lpRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9hc2NpaS9Bc2NpaUZpbHRlcicpLFxuICAgIEJsb29tRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibG9vbS9CbG9vbUZpbHRlcicpLFxuICAgIEJsdXJGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJGaWx0ZXInKSxcbiAgICBCbHVyWEZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJZRmlsdGVyJyksXG4gICAgQmx1ckRpckZpbHRlcjogICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckRpckZpbHRlcicpLFxuICAgIENvbG9yTWF0cml4RmlsdGVyOiAgcmVxdWlyZSgnLi9jb2xvci9Db2xvck1hdHJpeEZpbHRlcicpLFxuICAgIENvbG9yU3RlcEZpbHRlcjogICAgcmVxdWlyZSgnLi9jb2xvci9Db2xvclN0ZXBGaWx0ZXInKSxcbiAgICBDb252b2x1dGlvbkZpbHRlcjogIHJlcXVpcmUoJy4vY29udm9sdXRpb24vQ29udm9sdXRpb25GaWx0ZXInKSxcbiAgICBDcm9zc0hhdGNoRmlsdGVyOiAgIHJlcXVpcmUoJy4vY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyJyksXG4gICAgRGlzcGxhY2VtZW50RmlsdGVyOiByZXF1aXJlKCcuL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXInKSxcbiAgICBEb3RTY3JlZW5GaWx0ZXI6ICAgIHJlcXVpcmUoJy4vZG90L0RvdFNjcmVlbkZpbHRlcicpLFxuICAgIEdyYXlGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ncmF5L0dyYXlGaWx0ZXInKSxcbiAgICBEcm9wU2hhZG93RmlsdGVyOiAgIHJlcXVpcmUoJy4vZHJvcHNoYWRvdy9Ecm9wU2hhZG93RmlsdGVyJyksXG4gICAgSW52ZXJ0RmlsdGVyOiAgICAgICByZXF1aXJlKCcuL2ludmVydC9JbnZlcnRGaWx0ZXInKSxcbiAgICBOb2lzZUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vbm9pc2UvTm9pc2VGaWx0ZXInKSxcbiAgICBQaXhlbGF0ZUZpbHRlcjogICAgIHJlcXVpcmUoJy4vcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXInKSxcbiAgICBSR0JTcGxpdEZpbHRlcjogICAgIHJlcXVpcmUoJy4vcmdiL1JHQlNwbGl0RmlsdGVyJyksXG4gICAgU2hvY2t3YXZlRmlsdGVyOiAgICByZXF1aXJlKCcuL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXInKSxcbiAgICBTZXBpYUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vc2VwaWEvU2VwaWFGaWx0ZXInKSxcbiAgICBTbWFydEJsdXJGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vYmx1ci9TbWFydEJsdXJGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFhGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlcicpLFxuICAgIFR3aXN0RmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi90d2lzdC9Ud2lzdEZpbHRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBpbnZlcnRzIHlvdXIgRGlzcGxheSBPYmplY3RzIGNvbG9ycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gSW52ZXJ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIGZsb2F0IGludmVydDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoICh2ZWMzKDEpLWdsX0ZyYWdDb2xvci5yZ2IpICogZ2xfRnJhZ0NvbG9yLmEsIGdsX0ZyYWdDb2xvci5yZ2IsIDEuMCAtIGludmVydCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgaW52ZXJ0OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkludmVydEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkludmVydEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnZlcnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludmVydEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgaW52ZXJ0LiBgMWAgd2lsbCBmdWxseSBpbnZlcnQgdGhlIGNvbG9ycywgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5JbnZlcnRGaWx0ZXIjXG4gICAgICovXG4gICAgaW52ZXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuaW52ZXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYWRqdXN0L25vaXNlLmpzXG4gKi9cblxuLyoqXG4gKiBBIE5vaXNlIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIE5vaXNlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IG5vaXNlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IHJhbmQodmVjMiBjbylcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGNvLnh5LCB2ZWMyKDEyLjk4OTgsIDc4LjIzMykpKSAqIDQzNzU4LjU0NTMpO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGZsb2F0IGRpZmYgPSAocmFuZCh2VGV4dHVyZUNvb3JkKSAtIDAuNSkgKiBub2lzZTtcXG5cXG4gICAgY29sb3IuciArPSBkaWZmO1xcbiAgICBjb2xvci5nICs9IGRpZmY7XFxuICAgIGNvbG9yLmIgKz0gZGlmZjtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbm9pc2U6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Ob2lzZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbk5vaXNlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE5vaXNlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBOb2lzZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTm9pc2VGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGFtb3VudCBvZiBub2lzZSB0byBhcHBseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLk5vaXNlRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDAuNVxuICAgICAqL1xuICAgIG5vaXNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm5vaXNlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSBwaXhlbGF0ZSBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgJ2Jsb2NreScuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFBpeGVsYXRlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZlYzIgc2l6ZSA9IGRpbWVuc2lvbnMueHkgLyBwaXhlbFNpemU7XFxuXFxuICAgIHZlYzIgY29sb3IgPSBmbG9vciggKCB2VGV4dHVyZUNvb3JkICogc2l6ZSApICkgLyBzaXplICsgcGl4ZWxTaXplL2RpbWVuc2lvbnMueHkgKiAwLjU7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgY29sb3IpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsICB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICd2MicsICAgdmFsdWU6IHsgeDogMTAsIHk6IDEwIH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQaXhlbGF0ZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gUGl4ZWxhdGVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgYSBwb2ludCB0aGF0IGRlc2NyaWJlcyB0aGUgc2l6ZSBvZiB0aGUgYmxvY2tzLlxuICAgICAqIHggaXMgdGhlIHdpZHRoIG9mIHRoZSBibG9jayBhbmQgeSBpcyB0aGUgaGVpZ2h0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlBpeGVsYXRlRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBbiBSR0IgU3BsaXQgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBSR0JTcGxpdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSB2ZWMyIHJlZDtcXG51bmlmb3JtIHZlYzIgZ3JlZW47XFxudW5pZm9ybSB2ZWMyIGJsdWU7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvci5yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgcmVkL2RpbWVuc2lvbnMueHkpLnI7XFxuICAgZ2xfRnJhZ0NvbG9yLmcgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBncmVlbi9kaW1lbnNpb25zLnh5KS5nO1xcbiAgIGdsX0ZyYWdDb2xvci5iID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgYmx1ZS9kaW1lbnNpb25zLnh5KS5iO1xcbiAgIGdsX0ZyYWdDb2xvci5hID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKS5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZDogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGdyZWVuOiAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogLTIwLCB5OiAyMCB9IH0sXG4gICAgICAgICAgICBibHVlOiAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDIwLCB5OiAtMjAgfSB9LFxuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLCAwLCAwLCAwXSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5SR0JTcGxpdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJHQlNwbGl0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBSR0JTcGxpdEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogUmVkIGNoYW5uZWwgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIHJlZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJlZC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR3JlZW4gY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JlZW46IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JlZW4udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBCbHVlIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGFwcGxpZXMgYSBzZXBpYSBlZmZlY3QgdG8geW91ciBEaXNwbGF5IE9iamVjdHMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNlcGlhRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHNlcGlhO1xcblxcbmNvbnN0IG1hdDMgc2VwaWFNYXRyaXggPSBtYXQzKDAuMzU4OCwgMC43MDQ0LCAwLjEzNjgsIDAuMjk5MCwgMC41ODcwLCAwLjExNDAsIDAuMjM5MiwgMC40Njk2LCAwLjA5MTIpO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGdsX0ZyYWdDb2xvci5yZ2IgKiBzZXBpYU1hdHJpeCwgc2VwaWEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNlcGlhOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNlcGlhRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU2VwaWFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2VwaWFGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNlcGlhRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTZXBpYUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIHNlcGlhLiBgMWAgd2lsbCBhcHBseSB0aGUgZnVsbCBzZXBpYSBlZmZlY3QsIGFuZFxuICAgICAqIGAwYCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2VwaWFGaWx0ZXIjXG4gICAgICovXG4gICAgc2VwaWE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc2VwaWEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbG9yTWF0cml4RmlsdGVyIGNsYXNzIGxldHMgeW91IGFwcGx5IGEgNHg0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgUkdCQVxuICogY29sb3IgYW5kIGFscGhhIHZhbHVlcyBvZiBldmVyeSBwaXhlbCBvbiB5b3VyIGRpc3BsYXlPYmplY3QgdG8gcHJvZHVjZSBhIHJlc3VsdFxuICogd2l0aCBhIG5ldyBzZXQgb2YgUkdCQSBjb2xvciBhbmQgYWxwaGEgdmFsdWVzLiBJdCdzIHByZXR0eSBwb3dlcmZ1bCFcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2hvY2t3YXZlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIHZlYzIgY2VudGVyO1xcbnVuaWZvcm0gdmVjMyBwYXJhbXM7IC8vIDEwLjAsIDAuOCwgMC4xXFxudW5pZm9ybSBmbG9hdCB0aW1lO1xcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gdlRleHR1cmVDb29yZDtcXG4gICAgdmVjMiB0ZXhDb29yZCA9IHV2O1xcblxcbiAgICBmbG9hdCBkaXN0ID0gZGlzdGFuY2UodXYsIGNlbnRlcik7XFxuXFxuICAgIGlmICggKGRpc3QgPD0gKHRpbWUgKyBwYXJhbXMueikpICYmIChkaXN0ID49ICh0aW1lIC0gcGFyYW1zLnopKSApXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IGRpZmYgPSAoZGlzdCAtIHRpbWUpO1xcbiAgICAgICAgZmxvYXQgcG93RGlmZiA9IDEuMCAtIHBvdyhhYnMoZGlmZipwYXJhbXMueCksIHBhcmFtcy55KTtcXG5cXG4gICAgICAgIGZsb2F0IGRpZmZUaW1lID0gZGlmZiAgKiBwb3dEaWZmO1xcbiAgICAgICAgdmVjMiBkaWZmVVYgPSBub3JtYWxpemUodXYgLSBjZW50ZXIpO1xcbiAgICAgICAgdGV4Q29vcmQgPSB1diArIChkaWZmVVYgKiBkaWZmVGltZSk7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB0ZXhDb29yZCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgY2VudGVyOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfSxcbiAgICAgICAgICAgIHBhcmFtczogeyB0eXBlOiAndjMnLCB2YWx1ZTogeyB4OiAxMCwgeTogMC44LCB6OiAwLjEgfSB9LFxuICAgICAgICAgICAgdGltZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hvY2t3YXZlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaG9ja3dhdmVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjZW50ZXIgb2YgdGhlIHNob2Nrd2F2ZSBpbiBub3JtYWxpemVkIHNjcmVlbiBjb29yZHMuIFRoYXQgaXNcbiAgICAgKiAoMCwwKSBpcyB0aGUgdG9wLWxlZnQgYW5kICgxLDEpIGlzIHRoZSBib3R0b20gcmlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBudW1iZXI+fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIGNlbnRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmNlbnRlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBhcmFtcyBvZiB0aGUgc2hvY2t3YXZlLiBUaGVzZSBtb2RpZnkgdGhlIGxvb2sgYW5kIGJlaGF2aW9yIG9mXG4gICAgICogdGhlIHNob2Nrd2F2ZSBhcyBpdCByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgcGFyYW1zOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGFyYW1zLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZWxhcHNlZCB0aW1lIG9mIHRoZSBzaG9ja3dhdmUuIFRoaXMgY29udHJvbHMgdGhlIHNwZWVkIGF0IHdoaWNoXG4gICAgICogdGhlIHNob2Nrd2F2ZSByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICB0aW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0QXhpc0ZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0QXhpc0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBibHVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JhZGllbnRCbHVyO1xcbnVuaWZvcm0gdmVjMiBzdGFydDtcXG51bmlmb3JtIHZlYzIgZW5kO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG51bmlmb3JtIHZlYzIgdGV4U2l6ZTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG4gICAgdmVjMiBub3JtYWwgPSBub3JtYWxpemUodmVjMihzdGFydC55IC0gZW5kLnksIGVuZC54IC0gc3RhcnQueCkpO1xcbiAgICBmbG9hdCByYWRpdXMgPSBzbW9vdGhzdGVwKDAuMCwgMS4wLCBhYnMoZG90KHZUZXh0dXJlQ29vcmQgKiB0ZXhTaXplIC0gc3RhcnQsIG5vcm1hbCkpIC8gZ3JhZGllbnRCbHVyKSAqIGJsdXI7XFxuXFxuICAgIGZvciAoZmxvYXQgdCA9IC0zMC4wOyB0IDw9IDMwLjA7IHQrKylcXG4gICAge1xcbiAgICAgICAgZmxvYXQgcGVyY2VudCA9ICh0ICsgb2Zmc2V0IC0gMC41KSAvIDMwLjA7XFxuICAgICAgICBmbG9hdCB3ZWlnaHQgPSAxLjAgLSBhYnMocGVyY2VudCk7XFxuICAgICAgICB2ZWM0IHNhbXBsZSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGRlbHRhIC8gdGV4U2l6ZSAqIHBlcmNlbnQgKiByYWRpdXMpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBibHVyOiAgICAgICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMTAwIH0sXG4gICAgICAgICAgICBncmFkaWVudEJsdXI6ICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNjAwIH0sXG4gICAgICAgICAgICBzdGFydDogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLCAgICB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIH0gfSxcbiAgICAgICAgICAgIGVuZDogICAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDYwMCwgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZGVsdGE6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMzAsICAgeTogMzAgfSB9LFxuICAgICAgICAgICAgdGV4U2l6ZTogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogd2luZG93LmlubmVyV2lkdGgsIHk6IHdpbmRvdy5pbm5lckhlaWdodCB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG59XG5cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiB0aGUgWCBhbmQgWSBmaWx0ZXJzLCBkb2VzIG5vdGhpbmcgZm9yIHRoaXMgY2xhc3MuXG4gKlxuICovXG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gMDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSAwO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmFkaWVudEJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIHN0YXJ0IHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgZW5kOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdFlGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0IEZpbHRlci4gTWFuYWdlcyB0aGUgcGFzcyBvZiBib3RoIGEgVGlsdFNoaWZ0WEZpbHRlciBhbmQgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIgPSBuZXcgVGlsdFNoaWZ0WEZpbHRlcigpO1xuICAgIHRoaXMudGlsdFNoaWZ0WUZpbHRlciA9IG5ldyBUaWx0U2hpZnRZRmlsdGVyKCk7XG59XG5cblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEZpbHRlcjtcblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JhZGllbnQgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ncmFkaWVudEJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZ3JhZGllbnRCbHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFkgdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuc3RhcnQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBlbmQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5lbmQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZW5kID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBUaWx0U2hpZnRBeGlzRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRBeGlzRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdFhGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRpbHRTaGlmdEF4aXNGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0WEZpbHRlcigpXG57XG4gICAgVGlsdFNoaWZ0QXhpc0ZpbHRlci5jYWxsKHRoaXMpO1xufVxuXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRYRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRYRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKlxuICovXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGR4ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueCAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueDtcbiAgICB2YXIgZHkgPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS55IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS55O1xuICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IGR4IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeSAvIGQ7XG59O1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRZRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gLWR5IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeCAvIGQ7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHR3aXN0IGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0d2lzdGVkIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFR3aXN0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHJhZGl1cztcXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzIgY29vcmQgPSB2VGV4dHVyZUNvb3JkIC0gb2Zmc2V0O1xcbiAgIGZsb2F0IGRpc3QgPSBsZW5ndGgoY29vcmQpO1xcblxcbiAgIGlmIChkaXN0IDwgcmFkaXVzKVxcbiAgIHtcXG4gICAgICAgZmxvYXQgcmF0aW8gPSAocmFkaXVzIC0gZGlzdCkgLyByYWRpdXM7XFxuICAgICAgIGZsb2F0IGFuZ2xlTW9kID0gcmF0aW8gKiByYXRpbyAqIGFuZ2xlO1xcbiAgICAgICBmbG9hdCBzID0gc2luKGFuZ2xlTW9kKTtcXG4gICAgICAgZmxvYXQgYyA9IGNvcyhhbmdsZU1vZCk7XFxuICAgICAgIGNvb3JkID0gdmVjMihjb29yZC54ICogYyAtIGNvb3JkLnkgKiBzLCBjb29yZC54ICogcyArIGNvb3JkLnkgKiBjKTtcXG4gICB9XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCtvZmZzZXQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhZGl1czogICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9LFxuICAgICAgICAgICAgYW5nbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9LFxuICAgICAgICAgICAgb2Zmc2V0OiAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjUsIHk6IDAuNSB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblR3aXN0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVHdpc3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHdpc3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFR3aXN0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUd2lzdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IGRlc2NyaWJlcyB0aGUgdGhlIG9mZnNldCBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgb2Zmc2V0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHJhZGl1cyBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICByYWRpdXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5yYWRpdXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgYW5nbGUgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiLy8gcnVuIHRoZSBwb2x5ZmlsbHNcbnJlcXVpcmUoJy4vcG9seWZpbGwnKTtcblxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29yZScpO1xuXG4vLyBhZGQgY29yZSBwbHVnaW5zLlxuY29yZS5leHRyYXMgICAgICAgICA9IHJlcXVpcmUoJy4vZXh0cmFzJyk7XG5jb3JlLmZpbHRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5jb3JlLmludGVyYWN0aW9uICAgID0gcmVxdWlyZSgnLi9pbnRlcmFjdGlvbicpO1xuY29yZS5sb2FkZXJzICAgICAgICA9IHJlcXVpcmUoJy4vbG9hZGVycycpO1xuY29yZS5tZXNoICAgICAgICAgICA9IHJlcXVpcmUoJy4vbWVzaCcpO1xuY29yZS5hY2Nlc3NpYmlsaXR5ICA9IHJlcXVpcmUoJy4vYWNjZXNzaWJpbGl0eScpO1xuXG4vLyBleHBvcnQgYSBwcmVtYWRlIGxvYWRlciBpbnN0YW5jZVxuLyoqXG4gKiBBIHByZW1hZGUgaW5zdGFuY2Ugb2YgdGhlIGxvYWRlciB0aGF0IGNhbiBiZSB1c2VkIHRvIGxvYWRlciByZXNvdXJjZXMuXG4gKlxuICogQG5hbWUgbG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHByb3BlcnR5IHtQSVhJLmxvYWRlcnMuTG9hZGVyfVxuICovXG5jb3JlLmxvYWRlciA9IG5ldyBjb3JlLmxvYWRlcnMuTG9hZGVyKCk7XG5cbi8vIG1peGluIHRoZSBkZXByZWNhdGlvbiBmZWF0dXJlcy5cbk9iamVjdC5hc3NpZ24oY29yZSwgcmVxdWlyZSgnLi9kZXByZWNhdGlvbicpKTtcblxuLy8gQWx3YXlzIGV4cG9ydCBwaXhpIGdsb2JhbGx5LlxuZ2xvYmFsLlBJWEkgPSBjb3JlO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogSG9sZHMgYWxsIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gYW4gSW50ZXJhY3Rpb24gZXZlbnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uRGF0YSgpXG57XG4gICAgLyoqXG4gICAgICogVGhpcyBwb2ludCBzdG9yZXMgdGhlIGdsb2JhbCBjb29yZHMgb2Ygd2hlcmUgdGhlIHRvdWNoL21vdXNlIGV2ZW50IGhhcHBlbmVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuZ2xvYmFsID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgU3ByaXRlIHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TcHJpdGV9XG4gICAgICovXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBwYXNzZWQgdG8gYW4gZXZlbnQgaGFuZGxlciwgdGhpcyB3aWxsIGJlIHRoZSBvcmlnaW5hbCBET00gRXZlbnQgdGhhdCB3YXMgY2FwdHVyZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0V2ZW50fVxuICAgICAqL1xuICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IG51bGw7XG59XG5cbkludGVyYWN0aW9uRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbkRhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uRGF0YTtcblxuLyoqXG4gKiBUaGlzIHdpbGwgcmV0dXJuIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgc3BlY2lmaWVkIGRpc3BsYXlPYmplY3QgZm9yIHRoaXMgSW50ZXJhY3Rpb25EYXRhXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgbG9jYWwgY29vcmRzIG9mZlxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBwb2ludClcbiAqIEBwYXJhbSBbZ2xvYmFsUG9zXSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgY29udGFpbmluZyB5b3VyIGN1c3RvbSBnbG9iYWwgY29vcmRzLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgdXNlIHRoZSBjdXJyZW50IGdsb2JhbCBjb29yZHMpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBJbnRlcmFjdGlvbkRhdGEgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIERpc3BsYXlPYmplY3RcbiAqL1xuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5nZXRMb2NhbFBvc2l0aW9uID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHBvaW50LCBnbG9iYWxQb3MpXG57XG4gICAgcmV0dXJuIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKGdsb2JhbFBvcyB8fCB0aGlzLmdsb2JhbCwgcG9pbnQpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIEludGVyYWN0aW9uRGF0YSA9IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25EYXRhJyk7XG5cbi8vIE1peCBpbnRlcmFjdGl2ZVRhcmdldCBpbnRvIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGVcbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbik7XG5cbi8qKlxuICogVGhlIGludGVyYWN0aW9uIG1hbmFnZXIgZGVhbHMgd2l0aCBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzLiBBbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgaW50ZXJhY3RpdmVcbiAqIGlmIGl0cyBpbnRlcmFjdGl2ZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIHRydWVcbiAqIFRoaXMgbWFuYWdlciBhbHNvIHN1cHBvcnRzIG11bHRpdG91Y2guXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH1cbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQ9dHJ1ZV0ge2Jvb2xlYW59IFNob3VsZCB0aGUgbWFuYWdlciBhdXRvbWF0aWNhbGx5IHByZXZlbnQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMuXG4gKiBAcGFyYW0gW29wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3k9MTBdIHtudW1iZXJ9IEZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQuXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uTWFuYWdlcihyZW5kZXJlciwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGludGVyYWN0aW9uIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMgYXV0b21hdGljYWxseSBiZSBwcmV2ZW50ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdCA9IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdCA6IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBcyB0aGlzIGZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQgbW9yZSBvZnRlbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgPSBvcHRpb25zLmludGVyYWN0aW9uRnJlcXVlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vdXNlIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhfVxuICAgICAqL1xuICAgIHRoaXMubW91c2UgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCBkYXRhIG9iamVjdCB0byBoYW5kbGUgYWxsIHRoZSBldmVudCB0cmFja2luZy9kaXNwYXRjaGluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnREYXRhID0ge1xuICAgICAgICBzdG9wcGVkOiBmYWxzZSxcbiAgICAgICAgdGFyZ2V0OiBudWxsLFxuICAgICAgICB0eXBlOiBudWxsLFxuICAgICAgICBkYXRhOiB0aGlzLm1vdXNlLFxuICAgICAgICBzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGlueSBsaXR0bGUgaW50ZXJhY3RpdmVEYXRhIHBvb2wgIVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGFbXX1cbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBET00gZWxlbWVudCB0byBiaW5kIHRvLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTEVsZW1lbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIYXZlIGV2ZW50cyBiZWVuIGF0dGFjaGVkIHRvIHRoZSBkb20gZWxlbWVudD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gZmFsc2U7XG5cbiAgICAvL3RoaXMgd2lsbCBtYWtlIGl0IHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gY2FsbCBiaW5kIGFsbCB0aGUgdGltZVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlVXAgPSB0aGlzLm9uTW91c2VVcC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlVXAgPSB0aGlzLnByb2Nlc3NNb3VzZVVwLmJpbmQoIHRoaXMgKTtcblxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IHRoaXMub25Nb3VzZURvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZURvd24gPSB0aGlzLnByb2Nlc3NNb3VzZURvd24uYmluZCggdGhpcyApO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IHRoaXMub25Nb3VzZU1vdmUuYmluZCggdGhpcyApO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IHRoaXMucHJvY2Vzc01vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VPdXQgPSB0aGlzLm9uTW91c2VPdXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IHRoaXMub25Ub3VjaFN0YXJ0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaEVuZCA9IHRoaXMub25Ub3VjaEVuZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gdGhpcy5wcm9jZXNzVG91Y2hFbmQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaE1vdmUgPSB0aGlzLm9uVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sYXN0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjc3Mgc3R5bGUgb2YgdGhlIGN1cnNvciB0aGF0IGlzIGJlaW5nIHVzZWRcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSAnaW5oZXJpdCc7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjYWNoZWQgdmFyXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCByZXNvbHV0aW9uXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IDE7XG5cbiAgICB0aGlzLnNldFRhcmdldEVsZW1lbnQodGhpcy5yZW5kZXJlci52aWV3LCB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24pO1xufVxuXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJhY3Rpb25NYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5cbi8qKlxuICogU2V0cyB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlL3RvdWNoIGV2ZW50cy4gVGhpcyBpcyB1c2VmdWwgZm9yIHdoZW4geW91IGhhdmVcbiAqIG90aGVyIERPTSBlbGVtZW50cyBvbiB0b3Agb2YgdGhlIHJlbmRlcmVycyBDYW52YXMgZWxlbWVudC4gV2l0aCB0aGlzIHlvdSdsbCBiZSBiYWxlIHRvIGRlbGV0ZWdhdGVcbiAqIGFub3RoZXIgRE9NIGVsZW1lbnQgdG8gcmVjZWl2ZSB0aG9zZSBldmVudHMuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQge0hUTUxFbGVtZW50fSB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVEhlIHJlc29sdXRpb24gb2YgdGhlIG5ldyBlbGVtZW50IChyZWxhdGl2ZSB0byB0aGUgY2FudmFzKS5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuc2V0VGFyZ2V0RWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCByZXNvbHV0aW9uKVxue1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICB0aGlzLmFkZEV2ZW50cygpO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYWxsIHRoZSBET00gZXZlbnRzXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5hZGRFdmVudHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29yZS50aWNrZXIuc2hhcmVkLmFkZCh0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy1jb250ZW50LXpvb21pbmcnXSA9ICdub25lJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICdub25lJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgICAgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgICAgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgICAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCAgIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICAgICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsICAgIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIHRoZSBET00gZXZlbnRzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHJlZ2lzdGVyZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJyc7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAgdGhpcy5vblRvdWNoRW5kLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlLCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgIHRoaXMub25Nb3VzZVVwLCB0cnVlKTtcblxuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc3RhdGUgb2YgaW50ZXJhY3RpdmUgb2JqZWN0cy5cbiAqIEludm9rZWQgYnkgYSB0aHJvdHRsZWQgdGlja2VyIHVwZGF0ZSBmcm9tXG4gKiB7QGxpbmsgUElYSS50aWNrZXIuc2hhcmVkfS5cbiAqXG4gKiBAcGFyYW0gZGVsdGFUaW1lIHtudW1iZXJ9XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB0aGlzLl9kZWx0YVRpbWUgKz0gZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2RlbHRhVGltZSA8IHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGVsdGFUaW1lID0gMDtcblxuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHVzZXIgbW92ZSB0aGUgbW91c2UgdGhpcyBjaGVjayBoYXMgYWxyZWFkeSBiZWVuIGRmb25lIHVzaW5nIHRoZSBtb3VzZSBtb3ZlIVxuICAgIGlmKHRoaXMuZGlkTW92ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlkTW92ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE9cbn07XG5cbi8qKlxuICogRGlzcGF0Y2hlcyBhbiBldmVudCBvbiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIGRpc3BsYXkgb2JqZWN0IGluIHF1ZXN0aW9uXG4gKiBAcGFyYW0gZXZlbnRTdHJpbmcge3N0cmluZ30gdGhlIG5hbWUgb2YgdGhlIGV2ZW50IChlLmcsIG1vdXNlZG93bilcbiAqIEBwYXJhbSBldmVudERhdGEge29iamVjdH0gdGhlIGV2ZW50IGRhdGEgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGV2ZW50U3RyaW5nLCBldmVudERhdGEgKVxue1xuICAgIGlmKCFldmVudERhdGEuc3RvcHBlZClcbiAgICB7XG4gICAgICAgIGV2ZW50RGF0YS50YXJnZXQgPSBkaXNwbGF5T2JqZWN0O1xuICAgICAgICBldmVudERhdGEudHlwZSA9IGV2ZW50U3RyaW5nO1xuXG4gICAgICAgIGRpc3BsYXlPYmplY3QuZW1pdCggZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0W2V2ZW50U3RyaW5nXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddKCBldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogTWFwcyB4IGFuZCB5IGNvb3JkcyBmcm9tIGEgRE9NIG9iamVjdCBhbmQgbWFwcyB0aGVtIGNvcnJlY3RseSB0byB0aGUgcGl4aSB2aWV3LiBUaGUgcmVzdWx0aW5nIHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUgcG9pbnQuXG4gKiBUaGlzIHRha2VzIGludG8gYWNjb3VudCB0aGUgZmFjdCB0aGF0IHRoZSBET00gZWxlbWVudCBjb3VsZCBiZSBzY2FsZWQgYW5kIHBvc2l0aW9uZWQgYW55d2hlcmUgb24gdGhlIHNjcmVlbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCB0aGUgcmVzdWx0IHdpbGwgYmUgc3RvcmVkIGluXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHggICAgIHRoZSB4IGNvb3JkIG9mIHRoZSBwb3NpdGlvbiB0byBtYXBcbiAqIEBwYXJhbSAge251bWJlcn0geSAgICAgdGhlIHkgY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm1hcFBvc2l0aW9uVG9Qb2ludCA9IGZ1bmN0aW9uICggcG9pbnQsIHgsIHkgKVxue1xuICAgIHZhciByZWN0ID0gdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcG9pbnQueCA9ICggKCB4IC0gcmVjdC5sZWZ0ICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQud2lkdGggIC8gcmVjdC53aWR0aCAgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHBvaW50LnkgPSAoICggeSAtIHJlY3QudG9wICApICogKHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmhlaWdodCAvIHJlY3QuaGVpZ2h0ICkgKSAvIHRoaXMucmVzb2x1dGlvbjtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlcyBhIG5lYXQgd2F5IG9mIGNyYXdsaW5nIHRocm91Z2ggdGhlIHNjZW5lIGdyYXBoIGFuZCBydW5uaW5nIGEgc3BlY2lmaWVkIGZ1bmN0aW9uIG9uIGFsbCBpbnRlcmFjdGl2ZSBvYmplY3RzIGl0IGZpbmRzLlxuICogSXQgd2lsbCBhbHNvIHRha2UgY2FyZSBvZiBoaXQgdGVzdGluZyB0aGUgaW50ZXJhY3RpdmUgb2JqZWN0cyBhbmQgcGFzc2VzIHRoZSBoaXQgYWNyb3NzIGluIHRoZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCBpcyB0ZXN0ZWQgZm9yIGNvbGxpc2lvblxuICogQHBhcmFtICB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBkaXNwbGF5T2JqZWN0IHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgd2lsbCBiZSBoaXQgdGVzdCAocmVjdXJjc2l2bHkgY3Jhd2xzIGl0cyBjaGlsZHJlbilcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmdW5jIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggaW50ZXJhY3RpdmUgb2JqZWN0LiBUaGUgZGlzcGxheU9iamVjdCBhbmQgaGl0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvblxuICogQHBhcmFtICB7Ym9vbGVhbn0gaGl0VGVzdCB0aGlzIGluZGljYXRlcyBpZiB0aGUgb2JqZWN0cyBpbnNpZGUgc2hvdWxkIGJlIGhpdCB0ZXN0IGFnYWluc3QgdGhlIHBvaW50XG4gKiBAcmV0dXJuIHtib29sZWFufSByZXR1cm5zIHRydWUgaWYgdGhlIGRpc3BsYXlPYmplY3QgaGl0IHRoZSBwb2ludFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NJbnRlcmFjdGl2ZSA9IGZ1bmN0aW9uIChwb2ludCwgZGlzcGxheU9iamVjdCwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmUpXG57XG4gICAgaWYoIWRpc3BsYXlPYmplY3QgfHwgIWRpc3BsYXlPYmplY3QudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUb29rIGEgbGl0dGxlIHdoaWxlIHRvIHJld29yayB0aGlzIGZ1bmN0aW9uIGNvcnJlY3RseSEgQnV0IG5vdyBpdCBpcyBkb25lIGFuZCBuaWNlIGFuZCBvcHRpbWlzZWQuIF5fXlxuICAgIC8vIFxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBub3cgbG9vcCB0aHJvdWdoIGFsbCBvYmplY3RzIGFuZCB0aGVuIG9ubHkgaGl0IHRlc3QgdGhlIG9iamVjdHMgaXQgSEFTIHRvLCBub3QgYWxsIG9mIHRoZW0uIE1VQ0ggZmFzdGVyLi5cbiAgICAvLyBBbiBvYmplY3Qgd2lsbCBiZSBoaXQgdGVzdCBpZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gICAgLy8gXG4gICAgLy8gMTogSXQgaXMgaW50ZXJhY3RpdmUuXG4gICAgLy8gMjogSXQgYmVsb25ncyB0byBhIHBhcmVudCB0aGF0IGlzIGludGVyYWN0aXZlIEFORCBvbmUgb2YgdGhlIHBhcmVudHMgY2hpbGRyZW4gaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICAvLyBcbiAgICAvLyBBcyBhbm90aGVyIGxpdHRsZSBvcHRpbWlzYXRpb24gb25jZSBhbiBpbnRlcmFjdGl2ZSBvYmplY3QgaGFzIGJlZW4gaGl0IHdlIGNhbiBjYXJyeSBvbiB0aHJvdWdoIHRoZSBzY2VuZWdyYXBoLCBidXQgd2Uga25vdyB0aGF0IHRoZXJlIHdpbGwgYmUgbm8gbW9yZSBoaXRzISBTbyB3ZSBjYW4gYXZvaWQgZXh0cmEgaGl0IHRlc3RzXG4gICAgLy8gQSBmaW5hbCBvcHRpbWlzYXRpb24gaXMgdGhhdCBhbiBvYmplY3QgaXMgbm90IGhpdCB0ZXN0IGRpcmVjdGx5IGlmIGEgY2hpbGQgaGFzIGFscmVhZHkgYmVlbiBoaXQuXG4gICAgXG4gICAgdmFyIGhpdCA9IGZhbHNlLFxuICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGludGVyYWN0aXZlID0gZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSB8fCBpbnRlcmFjdGl2ZTtcblxuICAgIC8vIGlmIHRoZSBkaXNwbGF5b2JqZWN0IGhhcyBhIGhpdEFyZWEsIHRoZW4gaXQgZG9lcyBub3QgbmVlZCB0byBoaXRUZXN0IGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaGl0QXJlYSlcbiAgICB7XG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gKiogRlJFRSBUSVAgKiohIElmIGFuIG9iamVjdCBpcyBub3QgaW50ZXJhY3R0aXZlIG9yIGhhcyBubyBidXR0b25zIGluIGl0IChzdWNoIGFzIGEgZ2FtZSBzY2VuZSEpIHNldCBpbnRlcmFjdGl2ZUNoaWxkcmVuIHRvIGZhbHNlIGZvciB0aGF0IGRpc3BsYXlPYmplY3QuXG4gICAgLy8gVGhpcyB3aWxsIGFsbG93IHBpeGkgdG8gY29tcGxldGx5IGlnbm9yZSBhbmQgYnlwYXNzIGNoZWNraW5nIHRoZSBkaXNwbGF5T2JqZWN0cyBjaGlsZHJlbi5cbiAgICBpZihkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlQ2hpbGRyZW4pXG4gICAgeyAgICAgICBcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICAgICAgXG4gICAgICAgIGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRpbWUgdG8gZ2V0IHJlY3Vyc2l2ZS4uIGlmIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gaWYgc29tdGhpbmcgaXMgaGl0Li5cbiAgICAgICAgICAgIGlmKCB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZShwb2ludCwgY2hpbGRyZW5baV0sIGZ1bmMsIGhpdFRlc3QsIGludGVyYWN0aXZlUGFyZW50KSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIHdlIG5vIGxvbmdlciBuZWVkIHRvIGhpdCB0ZXN0IGFueSBtb3JlIG9iamVjdHMgaW4gdGhpcyBjb250YWluZXIgYXMgd2Ugd2Ugbm93IGtub3cgdGhlIHBhcmVudCBoYXMgYmVlbiBoaXRcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBpcyBpbnRlcmFjdGl2ZSAsIHRoYXQgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhpdCB3YXMgYWN0dWFsbHkgaW50ZXJhY3RpdmUgYW5kIG5vdCBqdXN0IHRoZSBjaGlsZCBvZiBhbiBpbnRlcmFjdGl2ZSBvYmplY3QuIFxuICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55dGhpbmcgZWxzZS4gV2Ugc3RpbGwgbmVlZCB0byBydW4gdGhyb3VnaCBhbGwgb2JqZWN0cywgYnV0IHdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhbnkgaGl0IHRlc3RzLlxuICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuW2ldLmludGVyYWN0aXZlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGl0VGVzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIG5vIHBvaW50IHJ1bm5pbmcgdGhpcyBpZiB0aGUgaXRlbSBpcyBub3QgaW50ZXJhY3RpdmUgb3IgZG9lcyBub3QgaGF2ZSBhbiBpbnRlcmFjdGl2ZSBwYXJlbnQuXG4gICAgaWYoaW50ZXJhY3RpdmUpXG4gICAge1xuICAgICAgICAvLyBpZiB3ZSBhcmUgaGl0IHRlc3RpbmcgKGFzIGluIHdlIGhhdmUgbm8gaGl0IGFueSBvYmplY3RzIHlldClcbiAgICAgICAgLy8gV2UgYWxzbyBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGhpdCB0ZXN0aW5nIGlmIG9uY2Ugb2YgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuIGhhcyBhbHJlYWR5IGJlZW4gaGl0IVxuICAgICAgICBpZihoaXRUZXN0ICYmICFoaXQpXG4gICAgICAgIHsgIFxuICAgICAgICAgICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGhpcy5fdGVtcFBvaW50KTtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmhpdEFyZWEuY29udGFpbnMoIHRoaXMuX3RlbXBQb2ludC54LCB0aGlzLl90ZW1wUG9pbnQueSApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZihkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gZGlzcGxheU9iamVjdC5jb250YWluc1BvaW50KHBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmMoZGlzcGxheU9iamVjdCwgaGl0KTsgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGl0O1xuICBcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgZG93biBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcHJlc3NlZCBkb3duXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VEb3duLCB0cnVlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBkb3duIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlRG93biA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB2YXIgZSA9IHRoaXMubW91c2Uub3JpZ2luYWxFdmVudDtcbiAgICBcbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG5cbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nIF0gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRkb3duJyA6ICdtb3VzZWRvd24nLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcmVsZWFzZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYnV0dG9uIGJlaW5nIHJlbGVhc2VkXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VVcCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlVXAsIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIHVwIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZVVwID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuXG4gICAgdmFyIGlzUmlnaHRCdXR0b24gPSBlLmJ1dHRvbiA9PT0gMiB8fCBlLndoaWNoID09PSAzO1xuICAgIHZhciBpc0Rvd24gPSAgaXNSaWdodEJ1dHRvbiA/ICdfaXNSaWdodERvd24nIDogJ19pc0xlZnREb3duJztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodHVwJyA6ICdtb3VzZXVwJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0Y2xpY2snIDogJ2NsaWNrJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXBvdXRzaWRlJyA6ICdtb3VzZXVwb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgdGhlIG1vdXNlIG1vdmluZ1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5kaWRNb3ZlID0gdHJ1ZTtcblxuICAgIHRoaXMuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VNb3ZlLCB0cnVlICk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgIT09IHRoaXMuY3Vyc29yKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gdGhpcy5jdXJzb3I7XG4gICAgfVxuXG4gICAgLy9UT0RPIEJVRyBmb3IgcGFyZW50cyBpbmVyYWN0aXZlIG9iamVjdCAoYm9yZGVyIG9yZGVyIGlzc3VlKVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlbW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQoZGlzcGxheU9iamVjdCwgaGl0KTtcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgaXMgbW92ZWQgb3V0IG9mIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJlaW5nIG1vdmVkIG91dFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlT3V0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgLy8gVE9ETyBvcHRpbWl6ZSBieSBub3QgY2hlY2sgRVZFUlkgVElNRSEgbWF5YmUgaGFsZiBhcyBvZnRlbj8gLy9cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkgKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIGZhbHNlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBvdmVyL291dCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VPdmVyT3V0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGlmKCFkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3ZlcicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlzcGxheU9iamVjdC5idXR0b25Nb2RlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnNvciA9IGRpc3BsYXlPYmplY3QuZGVmYXVsdEN1cnNvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZihkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIHRoaXMuZXZlbnREYXRhKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIHN0YXJ0ZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggc3RhcnRpbmcgb24gdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaFN0YXJ0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuICAgICAgICAvL1RPRE8gUE9PTFxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0LCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hTdGFydCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaHN0YXJ0JywgdGhpcy5ldmVudERhdGEgKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBlbmRzIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIGVuZGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICAvL1RPRE8gdGhpcyBzaG91bGQgYmUgcGFzc2VkIGFsb25nLi4gbm8gc2V0XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoRW5kLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIGVuZCBvZiBhIHRvdWNoIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaEVuZCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZCcsIHRoaXMuZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndGFwJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZG91dHNpZGUnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIG1vdmVkIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBtb3ZpbmcgYWNyb3NzIHRoZSByZW5kZXJlciB2aWV3XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIGEgdG91Y2ggbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGhpdCA9IGhpdDtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaG1vdmUnLCB0aGlzLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hFdmVudCB7RXZlbnREYXRhfSBUaGUgdG91Y2ggZXZlbnQgd2UgbmVlZCB0byBwYWlyIHdpdGggYW4gaW50ZXJhY3Rpb25EYXRhIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZ2V0VG91Y2hEYXRhID0gZnVuY3Rpb24gKHRvdWNoRXZlbnQpXG57XG4gICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wb3AoKTtcblxuICAgIGlmKCF0b3VjaERhdGEpXG4gICAge1xuICAgICAgICB0b3VjaERhdGEgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG4gICAgfVxuXG4gICAgdG91Y2hEYXRhLmlkZW50aWZpZXIgPSB0b3VjaEV2ZW50LmlkZW50aWZpZXI7XG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRvdWNoRGF0YS5nbG9iYWwsIHRvdWNoRXZlbnQuY2xpZW50WCwgdG91Y2hFdmVudC5jbGllbnRZICk7XG5cbiAgICBpZihuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YS5nbG9iYWwueCA9IHRvdWNoRGF0YS5nbG9iYWwueCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC55ID0gdG91Y2hEYXRhLmdsb2JhbC55IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIH1cblxuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWCA9IHRvdWNoRGF0YS5nbG9iYWwueDtcbiAgICB0b3VjaEV2ZW50Lmdsb2JhbFkgPSB0b3VjaERhdGEuZ2xvYmFsLnk7XG5cbiAgICByZXR1cm4gdG91Y2hEYXRhO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IHRvIHRoZSBpbnRlcm5hbCBwb29sXG4gKlxuICogQHBhcmFtIHRvdWNoRGF0YSB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9IFRoZSB0b3VjaCBkYXRhIG9iamVjdCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmV0dXJuVG91Y2hEYXRhID0gZnVuY3Rpb24gKCB0b3VjaERhdGEgKVxue1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wdXNoKCB0b3VjaERhdGEgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGludGVyYWN0aW9uIG1hbmFnZXJcbiAqXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLm1vdXNlID0gbnVsbDtcblxuICAgIHRoaXMuZXZlbnREYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IG51bGw7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VVcCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Nb3VzZURvd24gPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUgPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlT3V0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBudWxsO1xuXG5cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IG51bGw7XG5cbiAgICB0aGlzLm9uVG91Y2hFbmQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaE1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZW1wUG9pbnQgPSBudWxsO1xufTtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBpbnRlcmFjdGlvbnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEludGVyYWN0aW9uRGF0YTogICAgcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKSxcbiAgICBJbnRlcmFjdGlvbk1hbmFnZXI6IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25NYW5hZ2VyJyksXG4gICAgaW50ZXJhY3RpdmVUYXJnZXQ6ICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbn07XG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGludGVyYWN0aXZlIG9iamVjdHNcbiAqIHVzZWQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5pbnRlcmFjdGlvbi5pbnRlcmFjdGl2ZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgaW50ZXJhY3RpdmVUYXJnZXQgPSB7XG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBidXR0b25Nb2RlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlQ2hpbGRyZW46IHRydWUsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBkZWZhdWx0Q3Vyc29yOiAncG9pbnRlcicsXG5cbiAgICAvLyBzb21lIGludGVybmFsIGNoZWNrcy4uXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX292ZXI6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdG91Y2hEb3duOiBmYWxzZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnRlcmFjdGl2ZVRhcmdldDtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi4vZXh0cmFzJyksXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxuXG5mdW5jdGlvbiBwYXJzZShyZXNvdXJjZSwgdGV4dHVyZSkge1xuICAgIHZhciBkYXRhID0ge307XG4gICAgdmFyIGluZm8gPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF07XG4gICAgdmFyIGNvbW1vbiA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NvbW1vbicpWzBdO1xuXG4gICAgZGF0YS5mb250ID0gaW5mby5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKTtcbiAgICBkYXRhLnNpemUgPSBwYXJzZUludChpbmZvLmdldEF0dHJpYnV0ZSgnc2l6ZScpLCAxMCk7XG4gICAgZGF0YS5saW5lSGVpZ2h0ID0gcGFyc2VJbnQoY29tbW9uLmdldEF0dHJpYnV0ZSgnbGluZUhlaWdodCcpLCAxMCk7XG4gICAgZGF0YS5jaGFycyA9IHt9O1xuXG4gICAgLy9wYXJzZSBsZXR0ZXJzXG4gICAgdmFyIGxldHRlcnMgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjaGFyJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxldHRlcnMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaWQnKSwgMTApO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlUmVjdCA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4JyksIDEwKSArIHRleHR1cmUuZnJhbWUueCxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd5JyksIDEwKSArIHRleHR1cmUuZnJhbWUueSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd3aWR0aCcpLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaGVpZ2h0JyksIDEwKVxuICAgICAgICApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbY2hhckNvZGVdID0ge1xuICAgICAgICAgICAgeE9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeU9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3lvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeEFkdmFuY2U6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4YWR2YW5jZScpLCAxMCksXG4gICAgICAgICAgICBrZXJuaW5nOiB7fSxcbiAgICAgICAgICAgIHRleHR1cmU6IG5ldyBjb3JlLlRleHR1cmUodGV4dHVyZS5iYXNlVGV4dHVyZSwgdGV4dHVyZVJlY3QpXG5cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvL3BhcnNlIGtlcm5pbmdzXG4gICAgdmFyIGtlcm5pbmdzID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgna2VybmluZycpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBrZXJuaW5ncy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBmaXJzdCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnZmlyc3QnKSwgMTApO1xuICAgICAgICB2YXIgc2Vjb25kID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdzZWNvbmQnKSwgMTApO1xuICAgICAgICB2YXIgYW1vdW50ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdhbW91bnQnKSwgMTApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbc2Vjb25kXS5rZXJuaW5nW2ZpcnN0XSA9IGFtb3VudDtcbiAgICB9XG5cbiAgICByZXNvdXJjZS5iaXRtYXBGb250ID0gZGF0YTtcblxuICAgIC8vIEknbSBsZWF2aW5nIHRoaXMgYXMgYSB0ZW1wb3JhcnkgZml4IHNvIHdlIGNhbiB0ZXN0IHRoZSBiaXRtYXAgZm9udHMgaW4gdjNcbiAgICAvLyBidXQgaXQncyB2ZXJ5IGxpa2VseSB0byBjaGFuZ2VcbiAgICBleHRyYXMuQml0bWFwVGV4dC5mb250c1tkYXRhLmZvbnRdID0gZGF0YTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSBvciBub3QgeG1sIGRhdGFcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhIHx8ICFyZXNvdXJjZS5pc1htbClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNraXAgaWYgbm90IGJpdG1hcCBmb250IGRhdGEsIHVzaW5nIHNvbWUgc2lsbHkgZHVjay10eXBpbmdcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGFnZScpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdLmdldEF0dHJpYnV0ZSgnZmFjZScpID09PSBudWxsXG4gICAgICAgICAgICApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeG1sVXJsID0gcGF0aC5kaXJuYW1lKHJlc291cmNlLnVybCk7XG5cbiAgICAgICAgaWYgKHhtbFVybCA9PT0gJy4nKSB7XG4gICAgICAgICAgICB4bWxVcmwgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJhc2VVcmwgJiYgeG1sVXJsKSB7XG4gICAgICAgICAgICAvLyBpZiBiYXNldXJsIGhhcyBhIHRyYWlsaW5nIHNsYXNoIHRoZW4gYWRkIG9uZSB0byB4bWxVcmwgc28gdGhlIHJlcGxhY2Ugd29ya3MgYmVsb3dcbiAgICAgICAgICAgIGlmICh0aGlzLmJhc2VVcmwuY2hhckF0KHRoaXMuYmFzZVVybC5sZW5ndGggLSAxKSA9PT0gJy8nKSB7XG4gICAgICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcmVtb3ZlIGJhc2VVcmwgZnJvbSB4bWxVcmxcbiAgICAgICAgICAgIHhtbFVybCA9IHhtbFVybC5yZXBsYWNlKHRoaXMuYmFzZVVybCwgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4geG1sVXJsIG5vdywgaXQgbmVlZHMgYSB0cmFpbGluZyBzbGFzaC4gRW5zdXJlIHRoYXQgaXQgZG9lcyBpZiB0aGUgc3RyaW5nIGlzbid0IGVtcHR5LlxuICAgICAgICBpZiAoeG1sVXJsICYmIHhtbFVybC5jaGFyQXQoeG1sVXJsLmxlbmd0aCAtIDEpICE9PSAnLycpIHtcbiAgICAgICAgICAgIHhtbFVybCArPSAnLyc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRleHR1cmVVcmwgPSB4bWxVcmwgKyByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJylbMF0uZ2V0QXR0cmlidXRlKCdmaWxlJyk7XG4gICAgICAgIGlmIChjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSkge1xuICAgICAgICAgICAgLy9yZXVzZSBleGlzdGluZyB0ZXh0dXJlXG4gICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbdGV4dHVyZVVybF0pO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGxvYWRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiByZXNvdXJjZS5tZXRhZGF0YS5pbWFnZU1ldGFkYXRhXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gbG9hZCB0aGUgdGV4dHVyZSBmb3IgdGhlIGZvbnRcbiAgICAgICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgdGV4dHVyZVVybCwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgcmVzLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBsb2FkZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5sb2FkZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIExvYWRlcjogICAgICAgICAgICAgcmVxdWlyZSgnLi9sb2FkZXInKSxcblxuICAgIC8vIHBhcnNlcnNcbiAgICBiaXRtYXBGb250UGFyc2VyOiAgIHJlcXVpcmUoJy4vYml0bWFwRm9udFBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyOiAgcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIHRleHR1cmVQYXJzZXI6ICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlUGFyc2VyJyksXG4gICAgUmVzb3VyY2U6ICAgICAgICAgICByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZVxufTtcbiIsInZhciBSZXNvdXJjZUxvYWRlciA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLFxuICAgIHRleHR1cmVQYXJzZXIgPSByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBzcHJpdGVzaGVldFBhcnNlciA9IHJlcXVpcmUoJy4vc3ByaXRlc2hlZXRQYXJzZXInKSxcbiAgICBiaXRtYXBGb250UGFyc2VyID0gcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyk7XG5cbi8qKlxuICpcbiAqIFRoZSBuZXcgbG9hZGVyLCBleHRlbmRzIFJlc291cmNlIExvYWRlciBieSBDaGFkIEVuZ2xlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9lbmdsZXJjai9yZXNvdXJjZS1sb2FkZXJcbiAqXG4gKiBgYGBqc1xuICogdmFyIGxvYWRlciA9IFBJWEkubG9hZGVyOyAvLyBwaXhpIGV4cG9zZXMgYSBwcmVtYWRlIGluc3RhbmNlIGZvciB5b3UgdG8gdXNlLlxuICogLy9vclxuICogdmFyIGxvYWRlciA9IG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyKCk7IC8vIHlvdSBjYW4gYWxzbyBjcmVhdGUgeW91ciBvd24gaWYgeW91IHdhbnRcbiAqXG4gKiBsb2FkZXIuYWRkKCdidW5ueScsXCJkYXRhL2J1bm55LnBuZ1wiKTtcbiAqXG4gKiBsb2FkZXIub25jZSgnY29tcGxldGUnLG9uQXNzZXRzTG9hZGVkKTtcbiAqXG4gKiBsb2FkZXIubG9hZCgpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlJlc291cmNlTG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5sb2FkZXJzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KVxue1xuICAgIFJlc291cmNlTG9hZGVyLmNhbGwodGhpcywgYmFzZVVybCwgY29uY3VycmVuY3kpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMudXNlKExvYWRlci5fcGl4aU1pZGRsZXdhcmVbaV0oKSk7XG4gICAgfVxufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZXNvdXJjZUxvYWRlci5wcm90b3R5cGUpO1xuTG9hZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbkxvYWRlci5fcGl4aU1pZGRsZXdhcmUgPSBbXG4gICAgLy8gcGFyc2UgYW55IGJsb2IgaW50byBtb3JlIHVzYWJsZSBvYmplY3RzIChlLmcuIEltYWdlKVxuICAgIFJlc291cmNlTG9hZGVyLm1pZGRsZXdhcmUucGFyc2luZy5ibG9iLFxuICAgIC8vIHBhcnNlIGFueSBJbWFnZSBvYmplY3RzIGludG8gdGV4dHVyZXNcbiAgICB0ZXh0dXJlUGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBzcHJpdGVzaGVldFBhcnNlcixcbiAgICAvLyBwYXJzZSBhbnkgc3ByaXRlc2hlZXQgZGF0YSBpbnRvIG11bHRpcGxlIHRleHR1cmVzXG4gICAgYml0bWFwRm9udFBhcnNlclxuXTtcblxuTG9hZGVyLmFkZFBpeGlNaWRkbGV3YXJlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgTG9hZGVyLl9waXhpTWlkZGxld2FyZS5wdXNoKGZuKTtcbn07XG5cbi8vIEFkZCBjdXN0b20gZXh0ZW50aW9uc1xudmFyIFJlc291cmNlID0gUmVzb3VyY2VMb2FkZXIuUmVzb3VyY2U7XG5cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUoJ2ZudCcsIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIHBhdGggPSByZXF1aXJlKCdwYXRoJyksXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBza2lwIGlmIG5vIGRhdGEsIGl0cyBub3QganNvbiwgb3IgaXQgaXNuJ3Qgc3ByaXRlc2hlZXQgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzSnNvbiB8fCAhcmVzb3VyY2UuZGF0YS5mcmFtZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzb3VyY2UuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcm91dGUgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJykpO1xuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwoIHJlc291cmNlLnVybCApO1xuXG4gICAgICAgIC8vIGxvYWQgdGhlIGltYWdlIGZvciB0aGlzIHNoZWV0XG4gICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgcm91dGUgKyAnLycgKyByZXNvdXJjZS5kYXRhLm1ldGEuaW1hZ2UsIGxvYWRPcHRpb25zLCBmdW5jdGlvbiAocmVzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlcyA9IHt9O1xuXG4gICAgICAgICAgICB2YXIgZnJhbWVzID0gcmVzb3VyY2UuZGF0YS5mcmFtZXM7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gZnJhbWVzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gZnJhbWVzW2ldLmZyYW1lO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlY3QpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0cmltID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QuaCwgcmVjdC53KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QudywgcmVjdC5oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vICBDaGVjayB0byBzZWUgaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0udHJpbW1lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpbSA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS54IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS55IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS53IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS5oIC8gcmVzb2x1dGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBmbGlwIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IVxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gc2l6ZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggPSBzaXplLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0ID0gdGVtcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNpemUueCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLnkgLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLmhlaWdodCAvPSByZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzW2ldID0gbmV3IGNvcmUuVGV4dHVyZShyZXMudGV4dHVyZS5iYXNlVGV4dHVyZSwgc2l6ZSwgc2l6ZS5jbG9uZSgpLCB0cmltLCBmcmFtZXNbaV0ucm90YXRlZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0cyBhbHNvIGFkZCB0aGUgZnJhbWUgdG8gcGl4aSdzIGdsb2JhbCBjYWNoZSBmb3IgZnJvbUZyYW1lIGFuZCBmcm9tSW1hZ2UgZnVuY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW2ldID0gcmVzb3VyY2UudGV4dHVyZXNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH0pO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gY3JlYXRlIGEgbmV3IHRleHR1cmUgaWYgdGhlIGRhdGEgaXMgYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgIGlmIChyZXNvdXJjZS5kYXRhICYmIHJlc291cmNlLmlzSW1hZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBiYXNlVGV4dHVyZSA9IG5ldyBjb3JlLkJhc2VUZXh0dXJlKHJlc291cmNlLmRhdGEsIG51bGwsIGNvcmUudXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKHJlc291cmNlLnVybCkpO1xuICAgICAgICAgICAgYmFzZVRleHR1cmUuaW1hZ2VVcmwgPSByZXNvdXJjZS51cmw7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlID0gbmV3IGNvcmUuVGV4dHVyZShiYXNlVGV4dHVyZSk7XG4gICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdWNudGlvbnNcbiAgICAgICAgICAgIGNvcmUudXRpbHMuQmFzZVRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gYmFzZVRleHR1cmU7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gcmVzb3VyY2UudGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgdGVtcFBvbHlnb24gPSBuZXcgY29yZS5Qb2x5Z29uKCk7XG5cbi8qKlxuICogQmFzZSBtZXNoIGNsYXNzXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0byB1c2VcbiAqIEBwYXJhbSBbdmVydGljZXNdIHtGbG9hdDMyQXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHZlcnRpY2VzXG4gKiBAcGFyYW0gW3V2c10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdXZzXG4gKiBAcGFyYW0gW2luZGljZXNdIHtVaW50MTZBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgaW5kaWNlc1xuICogQHBhcmFtIFtkcmF3TW9kZV0ge251bWJlcn0gdGhlIGRyYXdNb2RlLCBjYW4gYmUgYW55IG9mIHRoZSBNZXNoLkRSQVdfTU9ERVMgY29uc3RzXG4gKi9cbmZ1bmN0aW9uIE1lc2godGV4dHVyZSwgdmVydGljZXMsIHV2cywgaW5kaWNlcywgZHJhd01vZGUpXG57XG4gICAgY29yZS5Db250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIG9mIHRoZSBNZXNoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBVdnMgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IHV2cyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxLCAwLFxuICAgICAgICAxLCAxLFxuICAgICAgICAwLCAxXSk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB2ZXJ0aWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSB2ZXJ0aWNlcyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxMDAsIDAsXG4gICAgICAgIDEwMCwgMTAwLFxuICAgICAgICAwLCAxMDBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgLy8gIFRPRE8gYXV0byBnZW5lcmF0ZSB0aGlzIGJhc2VkIG9uIGRyYXcgbW9kZSFcbiAgICB0aGlzLmluZGljZXMgPSBpbmRpY2VzIHx8IG5ldyBVaW50MTZBcnJheShbMCwgMSwgMywgMl0pO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgTWVzaCBpcyBkaXJ0eSBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzcHJpdGUuIFNldCB0byBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlbW92ZSBhbnkgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUcmlhbmdsZXMgaW4gY2FudmFzIG1vZGUgYXJlIGF1dG9tYXRpY2FsbHkgYW50aWFsaWFzZWQsIHVzZSB0aGlzIHZhbHVlIHRvIGZvcmNlIHRyaWFuZ2xlcyB0byBvdmVybGFwIGEgYml0IHdpdGggZWFjaCBvdGhlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdheSB0aGUgTWVzaCBzaG91bGQgYmUgZHJhd24sIGNhbiBiZSBhbnkgb2YgdGhlIHtAbGluayBQSVhJLm1lc2guTWVzaC5EUkFXX01PREVTfSBjb25zdHNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAc2VlIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmRyYXdNb2RlID0gZHJhd01vZGUgfHwgTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0g7XG5cbiAgICAvLyBydW4gdGV4dHVyZSBzZXR0ZXI7XG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcblxuICAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgbWVzaCBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1lc2gucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuTWVzaC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNZXNoLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLm1lc2guTWVzaCNcbiAgICAgKi9cbiAgICB0ZXh0dXJlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl90ZXh0dXJlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBXZWJHTCByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMubWVzaCk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5tZXNoLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEsIHRyYW5zZm9ybS5iLCB0cmFuc2Zvcm0uYywgdHJhbnNmb3JtLmQsIHRyYW5zZm9ybS50eCB8IDAsIHRyYW5zZm9ybS50eSB8IDApO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4LCB0cmFuc2Zvcm0udHkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc1RyaWFuZ2xlTWVzaChjb250ZXh0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzKGNvbnRleHQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiBUcmlhbmdsZSBNZXNoIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aCAvIDI7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGggLSAyOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4LCAoaW5kZXggKyAyKSwgKGluZGV4ICsgNCkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiB0cmlhbmdsZSBtb2RlIHVzaW5nIGNhbnZhc1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc1RyaWFuZ2xlcyA9IGZ1bmN0aW9uIChjb250ZXh0KVxue1xuICAgIC8vIGRyYXcgdHJpYW5nbGVzISFcbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcblxuICAgIHZhciBsZW5ndGggPSBpbmRpY2VzLmxlbmd0aDtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAzKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4MCA9IGluZGljZXNbaV0gKiAyLCBpbmRleDEgPSBpbmRpY2VzW2kgKyAxXSAqIDIsIGluZGV4MiA9IGluZGljZXNbaSArIDJdICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3Mgb25lIG9mIHRoZSB0cmlhbmdsZXMgdGhhdCBmb3JtIHRoaXMgTWVzaFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHBhcmFtIHZlcnRpY2VzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgTWVzaFxuICogQHBhcmFtIHV2cyB7RmxvYXQzMkFycmF5fSBhIHJlZmVyZW5jZSB0byB0aGUgdXZzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gaW5kZXgwIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgxIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgc2Vjb25kIHZlcnRleFxuICogQHBhcmFtIGluZGV4MiB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIHRoaXJkIHZlcnRleFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZSA9IGZ1bmN0aW9uIChjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleDAsIGluZGV4MSwgaW5kZXgyKVxue1xuICAgIHZhciB0ZXh0dXJlU291cmNlID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2U7XG4gICAgdmFyIHRleHR1cmVXaWR0aCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdmFyIHRleHR1cmVIZWlnaHQgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHZhciB4MCA9IHZlcnRpY2VzW2luZGV4MF0sIHgxID0gdmVydGljZXNbaW5kZXgxXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleDJdO1xuICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4MCArIDFdLCB5MSA9IHZlcnRpY2VzW2luZGV4MSArIDFdLCB5MiA9IHZlcnRpY2VzW2luZGV4MiArIDFdO1xuXG4gICAgdmFyIHUwID0gdXZzW2luZGV4MF0gKiB0ZXh0dXJlV2lkdGgsIHUxID0gdXZzW2luZGV4MV0gKiB0ZXh0dXJlV2lkdGgsIHUyID0gdXZzW2luZGV4Ml0gKiB0ZXh0dXJlV2lkdGg7XG4gICAgdmFyIHYwID0gdXZzW2luZGV4MCArIDFdICogdGV4dHVyZUhlaWdodCwgdjEgPSB1dnNbaW5kZXgxICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MiA9IHV2c1tpbmRleDIgKyAxXSAqIHRleHR1cmVIZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5jYW52YXNQYWRkaW5nID4gMClcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nWCA9IHRoaXMuY2FudmFzUGFkZGluZyAvIHRoaXMud29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIHBhZGRpbmdZID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgY2VudGVyWCA9ICh4MCArIHgxICsgeDIpIC8gMztcbiAgICAgICAgdmFyIGNlbnRlclkgPSAoeTAgKyB5MSArIHkyKSAvIDM7XG5cbiAgICAgICAgdmFyIG5vcm1YID0geDAgLSBjZW50ZXJYO1xuICAgICAgICB2YXIgbm9ybVkgPSB5MCAtIGNlbnRlclk7XG5cbiAgICAgICAgdmFyIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MCA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MCA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIC8vXG5cbiAgICAgICAgbm9ybVggPSB4MSAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTEgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MSA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MSA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIG5vcm1YID0geDIgLSBjZW50ZXJYO1xuICAgICAgICBub3JtWSA9IHkyIC0gY2VudGVyWTtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDIgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTIgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LnNhdmUoKTtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG5cbiAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcblxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICBjb250ZXh0LmNsaXAoKTtcblxuICAgIC8vIENvbXB1dGUgbWF0cml4IHRyYW5zZm9ybVxuICAgIHZhciBkZWx0YSA9ICAodTAgKiB2MSkgICAgICArICh2MCAqIHUyKSAgICAgICsgKHUxICogdjIpICAgICAgLSAodjEgKiB1MikgICAgICAtICh2MCAqIHUxKSAgICAgIC0gKHUwICogdjIpO1xuICAgIHZhciBkZWx0YUEgPSAoeDAgKiB2MSkgICAgICArICh2MCAqIHgyKSAgICAgICsgKHgxICogdjIpICAgICAgLSAodjEgKiB4MikgICAgICAtICh2MCAqIHgxKSAgICAgIC0gKHgwICogdjIpO1xuICAgIHZhciBkZWx0YUIgPSAodTAgKiB4MSkgICAgICArICh4MCAqIHUyKSAgICAgICsgKHUxICogeDIpICAgICAgLSAoeDEgKiB1MikgICAgICAtICh4MCAqIHUxKSAgICAgIC0gKHUwICogeDIpO1xuICAgIHZhciBkZWx0YUMgPSAodTAgKiB2MSAqIHgyKSArICh2MCAqIHgxICogdTIpICsgKHgwICogdTEgKiB2MikgLSAoeDAgKiB2MSAqIHUyKSAtICh2MCAqIHUxICogeDIpIC0gKHUwICogeDEgKiB2Mik7XG4gICAgdmFyIGRlbHRhRCA9ICh5MCAqIHYxKSAgICAgICsgKHYwICogeTIpICAgICAgKyAoeTEgKiB2MikgICAgICAtICh2MSAqIHkyKSAgICAgIC0gKHYwICogeTEpICAgICAgLSAoeTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhRSA9ICh1MCAqIHkxKSAgICAgICsgKHkwICogdTIpICAgICAgKyAodTEgKiB5MikgICAgICAtICh5MSAqIHUyKSAgICAgIC0gKHkwICogdTEpICAgICAgLSAodTAgKiB5Mik7XG4gICAgdmFyIGRlbHRhRiA9ICh1MCAqIHYxICogeTIpICsgKHYwICogeTEgKiB1MikgKyAoeTAgKiB1MSAqIHYyKSAtICh5MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB5MikgLSAodTAgKiB5MSAqIHYyKTtcblxuICAgIGNvbnRleHQudHJhbnNmb3JtKGRlbHRhQSAvIGRlbHRhLCBkZWx0YUQgLyBkZWx0YSxcbiAgICAgICAgZGVsdGFCIC8gZGVsdGEsIGRlbHRhRSAvIGRlbHRhLFxuICAgICAgICBkZWx0YUMgLyBkZWx0YSwgZGVsdGFGIC8gZGVsdGEpO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UodGV4dHVyZVNvdXJjZSwgMCwgMCk7XG4gICAgY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5cblxuLyoqXG4gKiBSZW5kZXJzIGEgZmxhdCBNZXNoXG4gKlxuICogQHBhcmFtIE1lc2gge1BJWEkubWVzaC5NZXNofSBUaGUgTWVzaCB0byByZW5kZXJcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLnJlbmRlck1lc2hGbGF0ID0gZnVuY3Rpb24gKE1lc2gpXG57XG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgdmFyIHZlcnRpY2VzID0gTWVzaC52ZXJ0aWNlcztcblxuICAgIHZhciBsZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGgvMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgIGZvciAodmFyIGk9MTsgaSA8IGxlbmd0aC0yOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpKjI7XG5cbiAgICAgICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXhdLCAgIHgxID0gdmVydGljZXNbaW5kZXgrMl0sIHgyID0gdmVydGljZXNbaW5kZXgrNF07XG4gICAgICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4KzFdLCB5MSA9IHZlcnRpY2VzW2luZGV4KzNdLCB5MiA9IHZlcnRpY2VzW2luZGV4KzVdO1xuXG4gICAgICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgyLCB5Mik7XG4gICAgfVxuXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnI0ZGMDAwMCc7XG4gICAgY29udGV4dC5maWxsKCk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbn07XG5cbi8qKlxuICogV2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLCB0aGlzIGV2ZW50IHdpbGwgZmlyZSB0byB1cGRhdGUgdGhlIHNjYWxlIGFuZCBmcmFtZVxuICpcbiAqIEBwYXJhbSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51cGRhdGVGcmFtZSA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgbWVzaCBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAoIXRoaXMuX2N1cnJlbnRCb3VuZHMpIHtcbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gbWF0cml4IHx8IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICAgICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSB2ZXJ0aWNlcy5sZW5ndGg7IGkgPCBuOyBpICs9IDIpIHtcbiAgICAgICAgICAgIHZhciByYXdYID0gdmVydGljZXNbaV0sIHJhd1kgPSB2ZXJ0aWNlc1tpICsgMV07XG4gICAgICAgICAgICB2YXIgeCA9IChhICogcmF3WCkgKyAoYyAqIHJhd1kpICsgdHg7XG4gICAgICAgICAgICB2YXIgeSA9IChkICogcmF3WSkgKyAoYiAqIHJhd1gpICsgdHk7XG5cbiAgICAgICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG5cbiAgICAgICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuICAgICAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWluWCA9PT0gLUluZmluaXR5IHx8IG1heFkgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBtZXNoLiBXb3JrcyBvbmx5IGZvciBUUklBTkdMRV9NRVNIXG4gKlxuICogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuICovXG5NZXNoLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50ICkge1xuICAgIGlmICghdGhpcy5nZXRCb3VuZHMoKS5jb250YWlucyhwb2ludC54LCBwb2ludC55KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHBvaW50cyA9IHRlbXBQb2x5Z29uLnBvaW50cztcbiAgICB2YXIgaSwgbGVuO1xuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVMpIHtcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgICAgIGxlbiA9IHRoaXMuaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgIC8vVE9ETzogaW5saW5lIHRoaXMuXG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTMpIHtcbiAgICAgICAgICAgIHZhciBpbmQwID0gaW5kaWNlc1tpXSoyLCBpbmQxID0gaW5kaWNlc1tpKzFdKjIsIGluZDIgPSBpbmRpY2VzW2krMl0qMjtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2luZDBdO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaW5kMCsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2luZDFdO1xuICAgICAgICAgICAgcG9pbnRzWzNdID0gdmVydGljZXNbaW5kMSsxXTtcbiAgICAgICAgICAgIHBvaW50c1s0XSA9IHZlcnRpY2VzW2luZDJdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaW5kMisxXTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBsZW4gPSB2ZXJ0aWNlcy5sZW5ndGg7XG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTYpIHtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2ldO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaSsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2krMl07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpKzNdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaSs0XTtcbiAgICAgICAgICAgIHBvaW50c1s1XSA9IHZlcnRpY2VzW2krNV07XG4gICAgICAgICAgICBpZiAodGVtcFBvbHlnb24uY29udGFpbnModGVtcFBvaW50LngsIHRlbXBQb2ludC55KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGlmZmVyZW50IGRyYXdpbmcgYnVmZmVyIG1vZGVzIHN1cHBvcnRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX01FU0hcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFU1xuICovXG5NZXNoLkRSQVdfTU9ERVMgPSB7XG4gICAgVFJJQU5HTEVfTUVTSDogMCxcbiAgICBUUklBTkdMRVM6IDFcbn07XG4iLCJ2YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xuXG4vKipcbiAqIFRoZSBQbGFuZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciBQbGFuZSA9IG5ldyBQSVhJLlBsYW5lKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIFBsYW5lLlxuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWCAtIFRoZSBudW1iZXIgb3ggeCBzZWdtZW50c1xuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWSAtIFRoZSBudW1iZXIgb2YgeSBzZWdtZW50c1xuICpcbiAqL1xuZnVuY3Rpb24gUGxhbmUodGV4dHVyZSwgc2VnbWVudHNYLCBzZWdtZW50c1kpXG57XG4gICAgTWVzaC5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tlciBmb3IgaWYgdGhlIFBsYW5lIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuc2VnbWVudHNYID0gIHNlZ21lbnRzWCB8fCAxMDtcbiAgICB0aGlzLnNlZ21lbnRzWSA9IHNlZ21lbnRzWSB8fCAxMDtcblxuICAgIHRoaXMuZHJhd01vZGUgPSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVTO1xuICAgIHRoaXMucmVmcmVzaCgpO1xuXG59XG5cblxuLy8gY29uc3RydWN0b3JcblBsYW5lLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIE1lc2gucHJvdG90eXBlICk7XG5QbGFuZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQbGFuZTtcbm1vZHVsZS5leHBvcnRzID0gUGxhbmU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5QbGFuZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgdG90YWwgPSB0aGlzLnNlZ21lbnRzWCAqIHRoaXMuc2VnbWVudHNZO1xuICAgIHZhciB2ZXJ0cyA9IFtdO1xuICAgIHZhciBjb2xvcnMgPSBbXTtcbiAgICB2YXIgdXZzID0gW107XG4gICAgdmFyIGluZGljZXMgPSBbXTtcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMudGV4dHVyZTtcblxuICAvLyAgdGV4dHVyZS53aWR0aCA9IDgwMCB0ZXh0dXJlLndpZHRoIHx8IDgwMDtcbiAvLyAgIHRleHR1cmUuaGVpZ2h0ID0gODAwLy90ZXh0dXJlLmhlaWdodCB8fCA4MDA7XG5cbiAgICB2YXIgc2VnbWVudHNYU3ViID0gdGhpcy5zZWdtZW50c1ggLSAxO1xuICAgIHZhciBzZWdtZW50c1lTdWIgPSB0aGlzLnNlZ21lbnRzWSAtIDE7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgdmFyIHNpemVYID0gdGV4dHVyZS53aWR0aCAvIHNlZ21lbnRzWFN1YjtcbiAgICB2YXIgc2l6ZVkgPSB0ZXh0dXJlLmhlaWdodCAvIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbDsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHggPSAoaSAlIHRoaXMuc2VnbWVudHNYKTtcbiAgICAgICAgdmFyIHkgPSAoIChpIC8gdGhpcy5zZWdtZW50c1ggKSB8IDAgKTtcblxuXG4gICAgICAgIHZlcnRzLnB1c2goKHggKiBzaXplWCksXG4gICAgICAgICAgICAgICAgICAgKHkgKiBzaXplWSkpO1xuXG4gICAgICAgIC8vIHRoaXMgd29ya3MgZm9yIHJlY3Rhbmd1bGFyIHRleHR1cmVzLiBcbiAgICAgICAgdXZzLnB1c2godGV4dHVyZS5fdXZzLngwICsgKHRleHR1cmUuX3V2cy54MSAtIHRleHR1cmUuX3V2cy54MCkgKiAoeCAvICh0aGlzLnNlZ21lbnRzWC0xKSksIHRleHR1cmUuX3V2cy55MCArICh0ZXh0dXJlLl91dnMueTMtdGV4dHVyZS5fdXZzLnkwKSAqICh5LyAodGhpcy5zZWdtZW50c1ktMSkpKTtcbiAgICAgIH1cblxuICAgIC8vICBjb25zXG5cbiAgICB2YXIgdG90YWxTdWIgPSBzZWdtZW50c1hTdWIgKiBzZWdtZW50c1lTdWI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTdWI7IGkrKykge1xuXG4gICAgICAgIHZhciB4cG9zID0gaSAlIHNlZ21lbnRzWFN1YjtcbiAgICAgICAgdmFyIHlwb3MgPSAoaSAvIHNlZ21lbnRzWFN1YiApIHwgMDtcblxuXG4gICAgICAgIHZhciAgdmFsdWUgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWUyID0gKHlwb3MgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zICsgMTtcbiAgICAgICAgdmFyICB2YWx1ZTMgPSAoKHlwb3MrMSkgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zO1xuICAgICAgICB2YXIgIHZhbHVlNCA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuXG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZSwgdmFsdWUyLCB2YWx1ZTMpO1xuICAgICAgICBpbmRpY2VzLnB1c2godmFsdWUyLCB2YWx1ZTQsIHZhbHVlMyk7XG4gICAgfVxuXG5cbiAgICAvL2NvbnNvbGUubG9nKGluZGljZXMpXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkodmVydHMpO1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheSh1dnMpO1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShjb2xvcnMpO1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShpbmRpY2VzKTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGV4dHVyZSBVVnMgd2hlbiBuZXcgdGV4dHVyZSBpcyBzZXRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QbGFuZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFBsYW5lIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBUaGUgcm9wZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciByb3BlID0gbmV3IFBJWEkuUm9wZShQSVhJLlRleHR1cmUuZnJvbUltYWdlKFwic25ha2UucG5nXCIpLCBwb2ludHMpO1xuICogIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5tZXNoLk1lc2hcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB7UElYSS5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIHRleHR1cmUgdG8gdXNlIG9uIHRoZSByb3BlLlxuICogQHBhcmFtIHtQSVhJLlBvaW50W119IHBvaW50cyAtIEFuIGFycmF5IG9mIHtAbGluayBQSVhJLlBvaW50fSBvYmplY3RzIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gKlxuICovXG5mdW5jdGlvbiBSb3BlKHRleHR1cmUsIHBvaW50cylcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnRbXX0gQW4gYXJyYXkgb2YgcG9pbnRzIHRoYXQgZGV0ZXJtaW5lIHRoZSByb3BlXG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgb2YgdmVydGljZXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhpcyByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBUaGUgV2ViR0wgVXZzIG9mIHRoZSByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogNCk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgY29sb3IgY29tcG9uZW50c1xuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgcm9wZSBpcyByZWFkeSB0byBiZSBkcmF3bi4gTmVlZGVkIGJlY2F1c2UgTWVzaCBjdG9yIGNhblxuICAgICAqIGNhbGwgX29uVGV4dHVyZVVwZGF0ZWQgd2hpY2ggY291bGQgY2FsbCByZWZyZXNoIHRvbyBlYXJseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgIHRoaXMucmVmcmVzaCgpO1xufVxuXG5cbi8vIGNvbnN0cnVjdG9yXG5Sb3BlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTWVzaC5wcm90b3R5cGUpO1xuUm9wZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3BlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3BlO1xuXG4vKipcbiAqIFJlZnJlc2hlc1xuICpcbiAqL1xuUm9wZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgLy8gaWYgdG9vIGxpdHRsZSBwb2ludHMsIG9yIHRleHR1cmUgaGFzbid0IGdvdCBVVnMgc2V0IHlldCBqdXN0IG1vdmUgb24uXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxIHx8ICF0aGlzLl90ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuXG4gICAgdmFyIHRleHR1cmVVdnMgPSB0aGlzLl90ZXh0dXJlLl91dnM7XG4gICAgdmFyIG9mZnNldCA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDAsIHRleHR1cmVVdnMueTApO1xuICAgIHZhciBmYWN0b3IgPSBuZXcgY29yZS5Qb2ludCh0ZXh0dXJlVXZzLngyIC0gdGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MiAtIHRleHR1cmVVdnMueTApO1xuXG4gICAgdXZzWzBdID0gMCArIG9mZnNldC54O1xuICAgIHV2c1sxXSA9IDAgKyBvZmZzZXQueTtcbiAgICB1dnNbMl0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICBjb2xvcnNbMF0gPSAxO1xuICAgIGNvbG9yc1sxXSA9IDE7XG5cbiAgICBpbmRpY2VzWzBdID0gMDtcbiAgICBpbmRpY2VzWzFdID0gMTtcblxuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgYW1vdW50O1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG4gICAgICAgIC8vIHRpbWUgdG8gZG8gc29tZSBzbWFydCBkcmF3aW5nIVxuICAgICAgICBhbW91bnQgPSBpIC8gKHRvdGFsLTEpO1xuXG4gICAgICAgIHV2c1tpbmRleF0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrMV0gPSAwICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgdXZzW2luZGV4KzJdID0gYW1vdW50ICogZmFjdG9yLnggKyBvZmZzZXQueDtcbiAgICAgICAgdXZzW2luZGV4KzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgY29sb3JzW2luZGV4XSA9IDE7XG4gICAgICAgIGNvbG9yc1tpbmRleCsxXSA9IDE7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgaW5kaWNlc1tpbmRleF0gPSBpbmRleDtcbiAgICAgICAgaW5kaWNlc1tpbmRleCArIDFdID0gaW5kZXggKyAxO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIE1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUuY2FsbCh0aGlzKTtcblxuICAgIC8vIHdhaXQgZm9yIHRoZSBSb3BlIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Sb3BlLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbGFzdFBvaW50ID0gcG9pbnRzWzBdO1xuICAgIHZhciBuZXh0UG9pbnQ7XG4gICAgdmFyIHBlcnBYID0gMDtcbiAgICB2YXIgcGVycFkgPSAwO1xuXG4gICAgLy8gdGhpcy5jb3VudCAtPSAwLjI7XG5cbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgcmF0aW8sIHBlcnBMZW5ndGgsIG51bTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWw7IGkrKylcbiAgICB7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBpbmRleCA9IGkgKiA0O1xuXG4gICAgICAgIGlmIChpIDwgcG9pbnRzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0UG9pbnQgPSBwb2ludHNbaSsxXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcGVycFkgPSAtKG5leHRQb2ludC54IC0gbGFzdFBvaW50LngpO1xuICAgICAgICBwZXJwWCA9IG5leHRQb2ludC55IC0gbGFzdFBvaW50Lnk7XG5cbiAgICAgICAgcmF0aW8gPSAoMSAtIChpIC8gKHRvdGFsLTEpKSkgKiAxMDtcblxuICAgICAgICBpZiAocmF0aW8gPiAxKVxuICAgICAgICB7XG4gICAgICAgICAgICByYXRpbyA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwTGVuZ3RoID0gTWF0aC5zcXJ0KHBlcnBYICogcGVycFggKyBwZXJwWSAqIHBlcnBZKTtcbiAgICAgICAgbnVtID0gdGhpcy5fdGV4dHVyZS5oZWlnaHQgLyAyOyAvLygyMCArIE1hdGguYWJzKE1hdGguc2luKChpICsgdGhpcy5jb3VudCkgKiAwLjMpICogNTApICkqIHJhdGlvO1xuICAgICAgICBwZXJwWCAvPSBwZXJwTGVuZ3RoO1xuICAgICAgICBwZXJwWSAvPSBwZXJwTGVuZ3RoO1xuXG4gICAgICAgIHBlcnBYICo9IG51bTtcbiAgICAgICAgcGVycFkgKj0gbnVtO1xuXG4gICAgICAgIHZlcnRpY2VzW2luZGV4XSA9IHBvaW50LnggKyBwZXJwWDtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMV0gPSBwb2ludC55ICsgcGVycFk7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzJdID0gcG9pbnQueCAtIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCszXSA9IHBvaW50LnkgLSBwZXJwWTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBwb2ludDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkubWVzaFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNZXNoOiAgICAgICAgICAgcmVxdWlyZSgnLi9NZXNoJyksXG4gICAgUGxhbmU6ICAgICAgICAgICByZXF1aXJlKCcuL1BsYW5lJyksXG4gICAgUm9wZTogICAgICAgICAgIHJlcXVpcmUoJy4vUm9wZScpLFxuICAgIE1lc2hSZW5kZXJlcjogICByZXF1aXJlKCcuL3dlYmdsL01lc2hSZW5kZXJlcicpLFxuICAgIE1lc2hTaGFkZXI6ICAgICByZXF1aXJlKCcuL3dlYmdsL01lc2hTaGFkZXInKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIE1lc2ggPSByZXF1aXJlKCcuLi9NZXNoJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgTWVzaFJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9NZXNoUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgY29yZS5PYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIFxuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSgxNTAwMCk7XG5cbiAgICAvL1RPRE8gdGhpcyBjb3VsZCBiZSBhIHNpbmdsZSBidWZmZXIgc2hhcmVkIGFtb25nc3QgYWxsIHJlbmRlcmVycyBhcyB3ZSByZXVzZSB0aGlzIHNldCB1cCBpbiBtb3N0IHJlbmRlcmVyc1xuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgMTUwMDA7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufVxuXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoUmVuZGVyZXI7XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignbWVzaCcsIE1lc2hSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIG1lc2gge1BJWEkubWVzaC5NZXNofSB0aGUgbWVzaCB0byByZW5kZXJcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICBpZighbWVzaC5fdmVydGV4QnVmZmVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5faW5pdFdlYkdMKG1lc2gpO1xuICAgIH1cblxuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXIsXG4gICAgICAgIGdsID0gcmVuZGVyZXIuZ2wsXG4gICAgICAgIHRleHR1cmUgPSBtZXNoLl90ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBzaGFkZXIgPSBtZXNoLnNoYWRlcjsvLyB8fCByZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnBsdWdpbnMubWVzaFNoYWRlcjtcblxuICAgIHZhciBkcmF3TW9kZSA9IG1lc2guZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIID8gZ2wuVFJJQU5HTEVfU1RSSVAgOiBnbC5UUklBTkdMRVM7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShtZXNoLmJsZW5kTW9kZSk7XG5cbiAgICAvL1RPRE8gY2FjaGUgY3VzdG9tIHN0YXRlLi5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzaGFkZXIgPSBzaGFkZXIuc2hhZGVyc1tnbC5pZF0gfHwgc2hhZGVyLmdldFNoYWRlcihyZW5kZXJlcik7Ly8gOiBzaGFkZXI7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4LnZhbHVlID0gbWVzaC53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gbWVzaC53b3JsZEFscGhhO1xuXG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuXG4gICAgaWYgKCFtZXNoLmRpcnR5KVxuICAgIHtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIG1lc2gudmVydGljZXMpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIHV2c1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cblxuICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCAwLCBtZXNoLmluZGljZXMpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIG1lc2guZGlydHkgPSBmYWxzZTtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZG9udCBuZWVkIHRvIHVwbG9hZCFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIH1cblxuICAgIGdsLmRyYXdFbGVtZW50cyhkcmF3TW9kZSwgbWVzaC5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuXG59O1xuXG4vKipcbiAqIFByZXBhcmVzIGFsbCB0aGUgYnVmZmVycyB0byByZW5kZXIgdGhpcyBtZXNoXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLl9pbml0V2ViR0wgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICAvLyBidWlsZCB0aGUgc3RyaXAhXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIG1lc2guX3ZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIG1lc2guX2luZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5fdXZCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC52ZXJ0aWNlcywgZ2wuRFlOQU1JQ19EUkFXKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgaWYobWVzaC5jb2xvcnMpe1xuICAgICAgICBtZXNoLl9jb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fY29sb3JCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5jb2xvcnMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG59O1xuXG5cbi8qKlxuICogRW1wdGllcyB0aGUgY3VycmVudCBiYXRjaC5cbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBtZXNoIHJlbmRlcmVyLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgXG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgTWVzaCByZW5kZXJlclxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIFdlYkdMIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gTWVzaFNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIGNvcmUuU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIGFscGhhIDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYVRleHR1cmVDb29yZDowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5NZXNoU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TaGFkZXIucHJvdG90eXBlKTtcbk1lc2hTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gTWVzaFNoYWRlcjtcblxuY29yZS5TaGFkZXJNYW5hZ2VyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoU2hhZGVyJywgTWVzaFNoYWRlcik7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9zaWduXG5cbmlmICghTWF0aC5zaWduKVxue1xuICAgIE1hdGguc2lnbiA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHggPSAreDtcbiAgICAgICAgaWYgKHggPT09IDAgfHwgaXNOYU4oeCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4ID4gMCA/IDEgOiAtMTtcbiAgICB9O1xufVxuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvb2JqZWN0LWFzc2lnblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnblxuXG5pZiAoIU9iamVjdC5hc3NpZ24pXG57XG4gICAgT2JqZWN0LmFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcbn1cbiIsInJlcXVpcmUoJy4vT2JqZWN0LmFzc2lnbicpO1xucmVxdWlyZSgnLi9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUnKTtcbnJlcXVpcmUoJy4vTWF0aC5zaWduJyk7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cDovL3BhdWxpcmlzaC5jb20vMjAxMS9yZXF1ZXN0YW5pbWF0aW9uZnJhbWUtZm9yLXNtYXJ0LWFuaW1hdGluZy9cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzE1Nzk2NzFcbi8vIGh0dHA6Ly91cGRhdGVzLmh0bWw1cm9ja3MuY29tLzIwMTIvMDUvcmVxdWVzdEFuaW1hdGlvbkZyYW1lLUFQSS1ub3ctd2l0aC1zdWItbWlsbGlzZWNvbmQtcHJlY2lzaW9uXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90aW1oYWxsLzQwNzg2MTRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9GaW5hbmNpYWwtVGltZXMvcG9seWZpbGwtc2VydmljZS90cmVlL21hc3Rlci9wb2x5ZmlsbHMvcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG5cbi8vIEV4cGVjdGVkIHRvIGJlIHVzZWQgd2l0aCBCcm93c2VyZml5XG4vLyBCcm93c2VyaWZ5IGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB0aGUgdXNlIG9mIGBnbG9iYWxgIGFuZCBwYXNzZXMgdGhlXG4vLyBjb3JyZWN0IHJlZmVyZW5jZSBvZiBgZ2xvYmFsYCwgYHNlbGZgLCBhbmQgZmluYWxseSBgd2luZG93YFxuXG4vLyBEYXRlLm5vd1xuaWYgKCEoRGF0ZS5ub3cgJiYgRGF0ZS5wcm90b3R5cGUuZ2V0VGltZSkpIHtcbiAgICBEYXRlLm5vdyA9IGZ1bmN0aW9uIG5vdygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIH07XG59XG5cbi8vIHBlcmZvcm1hbmNlLm5vd1xuaWYgKCEoZ2xvYmFsLnBlcmZvcm1hbmNlICYmIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cpKSB7XG4gICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgaWYgKCFnbG9iYWwucGVyZm9ybWFuY2UpIHtcbiAgICAgICAgZ2xvYmFsLnBlcmZvcm1hbmNlID0ge307XG4gICAgfVxuICAgIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIH07XG59XG5cbi8vIHJlcXVlc3RBbmltYXRpb25GcmFtZVxudmFyIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbnZhciB2ZW5kb3JzID0gWydtcycsICdtb3onLCAnd2Via2l0JywgJ28nXTtcblxuZm9yKHZhciB4ID0gMDsgeCA8IHZlbmRvcnMubGVuZ3RoICYmICFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lOyArK3gpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnQ2FuY2VsQW5pbWF0aW9uRnJhbWUnXSB8fFxuICAgICAgICBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbn1cblxuaWYgKCFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZGVsYXkgPSAxNiArIGxhc3RUaW1lIC0gY3VycmVudFRpbWU7XG5cbiAgICAgICAgaWYgKGRlbGF5IDwgMCkge1xuICAgICAgICAgICAgZGVsYXkgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFRpbWUgPSBjdXJyZW50VGltZTtcblxuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsYXN0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBjYWxsYmFjayhwZXJmb3JtYW5jZS5ub3coKSk7XG4gICAgICAgIH0sIGRlbGF5KTtcbiAgICB9O1xufVxuXG5pZiAoIWdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSkge1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgfTtcbn1cbiJdfQ== +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L09ic2VydmFibGVQb2ludC5qcyIsInNyYy9jb3JlL2Rpc3BsYXkvVHJhbnNmb3JtU3RhdGljLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3MuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9HcmFwaGljc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvV2ViR0xHcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ2lyY2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRDb21wbGV4UG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkTGluZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL01hdHJpeC5qcyIsInNyYy9jb3JlL21hdGgvUG9pbnQuanMiLCJzcmMvY29yZS9tYXRoL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvQ2lyY2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvRWxsaXBzZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1BvbHlnb24uanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9SZWN0YW5nbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlQnVmZmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvU3lzdGVtUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNNYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1RleHR1cmVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9NYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUXVhZC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvU3RlbmNpbE1hc2tTdGFjay5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9zcHJpdGVzL1Nwcml0ZS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvdGV4dC9UZXh0LmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9CYXNlVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1JlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9UZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZVV2cy5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90aWNrZXIvVGlja2VyLmpzIiwic3JjL2NvcmUvdGlja2VyL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzLmpzIiwic3JjL2NvcmUvdXRpbHMvaW5kZXguanMiLCJzcmMvY29yZS91dGlscy9wbHVnaW5UYXJnZXQuanMiLCJzcmMvZGVwcmVjYXRpb24uanMiLCJzcmMvZXh0cmFzL0JpdG1hcFRleHQuanMiLCJzcmMvZXh0cmFzL01vdmllQ2xpcC5qcyIsInNyYy9leHRyYXMvVGlsaW5nU3ByaXRlLmpzIiwic3JjL2V4dHJhcy9jYWNoZUFzQml0bWFwLmpzIiwic3JjL2V4dHJhcy9nZXRDaGlsZEJ5TmFtZS5qcyIsInNyYy9leHRyYXMvZ2V0R2xvYmFsUG9zaXRpb24uanMiLCJzcmMvZXh0cmFzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvYXNjaWkvQXNjaWlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibG9vbS9CbG9vbUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckRpckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1clhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9TbWFydEJsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvck1hdHJpeEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbG9yL0NvbG9yU3RlcEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2RvdC9Eb3RTY3JlZW5GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0JsdXJZVGludEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2dyYXkvR3JheUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvaW52ZXJ0L0ludmVydEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL25vaXNlL05vaXNlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9yZ2IvUkdCU3BsaXRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zZXBpYS9TZXBpYUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0QXhpc0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdHdpc3QvVHdpc3RGaWx0ZXIuanMiLCJzcmMvc3JjL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL0ludGVyYWN0aW9uRGF0YS5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbk1hbmFnZXIuanMiLCJzcmMvaW50ZXJhY3Rpb24vaW5kZXguanMiLCJzcmMvaW50ZXJhY3Rpb24vaW50ZXJhY3RpdmVUYXJnZXQuanMiLCJzcmMvbG9hZGVycy9iaXRtYXBGb250UGFyc2VyLmpzIiwic3JjL2xvYWRlcnMvaW5kZXguanMiLCJzcmMvbG9hZGVycy9sb2FkZXIuanMiLCJzcmMvbG9hZGVycy9zcHJpdGVzaGVldFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL3RleHR1cmVQYXJzZXIuanMiLCJzcmMvbWVzaC9NZXNoLmpzIiwic3JjL21lc2gvUGxhbmUuanMiLCJzcmMvbWVzaC9Sb3BlLmpzIiwic3JjL21lc2gvaW5kZXguanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoUmVuZGVyZXIuanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoU2hhZGVyLmpzIiwic3JjL3BvbHlmaWxsL01hdGguc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9PYmplY3QuYXNzaWduLmpzIiwic3JjL3BvbHlmaWxsL2luZGV4LmpzIiwic3JjL3BvbHlmaWxsL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzV1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNyaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbm1DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Y0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2h5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNWxCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM21CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25iQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICBjcmVhdGVDb250ZXh0OiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9jcmVhdGVDb250ZXh0JyksXG4gICAgc2V0VmVydGV4QXR0cmliQXJyYXlzOiBcdHJlcXVpcmUoJy4vbGliL3NldFZlcnRleEF0dHJpYkFycmF5cycpLFxuICAgIFxuICAgIEdMQnVmZmVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMQnVmZmVyJyksXG4gICAgR0xGcmFtZWJ1ZmZlcjogXHRcdFx0cmVxdWlyZSgnLi9saWIvR0xGcmFtZWJ1ZmZlcicpLFxuICAgIEdMU2hhZGVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMU2hhZGVyJyksXG4gICAgR0xUZXh0dXJlOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMVGV4dHVyZScpLFxuICAgIFxuICAgIFZlcnRleEFycmF5T2JqZWN0OiBcdFx0cmVxdWlyZSgnLi9saWIvVmVydGV4QXJyYXlPYmplY3QnKVxuXG59OyIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEVNUFRZX0FSUkFZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcblxudmFyIEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuQVJSQVlfQlVGRkVSO1xuXHR0aGlzLmRyYXdUeXBlID0gZHJhd1R5cGUgfHwgZ2wuU1RBVElDX0RSQVc7XG5cdHRoaXMuZGF0YSA9IEVNUFRZX0FSUkFZX0JVRkZFUjtcblxuXHRpZihkYXRhKVxuXHR7XG5cdFx0dGhpcy51cGxvYWQoZGF0YSk7XG5cdH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihkYXRhLCBvZmZzZXQsIGRvbnRCaW5kKVxue1xuXHQvLyB0b2RvIC0gbmVlZGVkP1xuXHQvL2lmKCFkb250QmluZClcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblx0XG5cdGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcblx0b2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cblx0aWYodGhpcy5kYXRhLmJ5dGVMZW5ndGggPj0gZGF0YS5ieXRlTGVuZ3RoKVxuXHR7XHRcblx0XHRnbC5idWZmZXJTdWJEYXRhKHRoaXMudHlwZSwgb2Zmc2V0LCBkYXRhKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC5idWZmZXJEYXRhKHRoaXMudHlwZSwgZGF0YSwgdGhpcy5kcmF3VHlwZSk7XG5cdH1cblxuXHR0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRCdWZmZXIodGhpcy50eXBlLCB0aGlzLmJ1ZmZlcik7XG59XG5cbkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24oZ2wsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZSA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIHR5cGUsIGRyYXdUeXBlKTtcbn1cblxuLy9UT0RPIERlc3Ryb3kuLlxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcjtcblxuIiwiXG52YXIgVGV4dHVyZSA9IHJlcXVpcmUoJy4vR0xUZXh0dXJlJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIEZyYW1lYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEZyYW1lYnVmZmVyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblx0XG5cdHRoaXMuc3RlbmNpbCA9IG51bGw7XG5cdHRoaXMudGV4dHVyZSA9IG51bGw7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlVGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBuZXcgVGV4dHVyZShnbCk7XG5cblx0dGhpcy50ZXh0dXJlLmJpbmQoKTtcblxuXHQvL2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZS50ZXh0dXJlLCAwKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmVuYWJsZVN0ZW5jaWwgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuc3RlbmNpbClyZXR1cm47XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnN0ZW5jaWwgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcbiAgICBcbiAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBcbiAgICAvLyBUT0RPLi4gdGhpcyBpcyBkZXB0aCBBTkQgc3RlbmNpbD9cbiAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsICB0aGlzLndpZHRoICAsIHRoaXMuaGVpZ2h0ICk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCByLCBnLCBiLCBhIClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICBnbC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpO1xuICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLmZyYW1lYnVmZmVyICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuXHRpZiAoIHRoaXMudGV4dHVyZSApXG4gICAge1xuICAgIFx0dGhpcy50ZXh0dXJlLnVwbG9hZERhdGEobnVsbCwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRpZiAoIHRoaXMuc3RlbmNpbCApXG4gICAge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0ZW5jaWwgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0dmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21EYXRhKGdsLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0dGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgZmJvLnVuYmluZCgpO1xuICAgIFxuICAgIHJldHVybiBmYm87XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZUZsb2F0MzIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0Ly8gY3JlYXRlIGEgbmV3IHRleHR1cmUuLlxuICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUuZnJvbURhdGEoZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuICAgIHRleHR1cmUuZW5hYmxlTmVhcmVzdFNjYWxpbmcoKTtcbiAgICB0ZXh0dXJlLmVuYWJsZVdyYXBDbGFtcCgpO1xuXG4gICAgLy9ub3cgY3JlYXRlIHRoZSBmcmFtZWJ1ZmZlciBvYmplY3QgYW5kIGF0dGFjaCB0aGUgdGV4dHVyZSB0byBpdC5cbiAgICB2YXIgZmJvID0gbmV3IEZyYW1lYnVmZmVyKGdsLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICBmYm8uZW5hYmxlVGV4dHVyZSh0ZXh0dXJlKVxuXG4gICAgZmJvLnVuYmluZCgpO1xuXG4gICAgcmV0dXJuIGZibztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGcmFtZWJ1ZmZlcjtcblxuIiwiXG52YXIgY29tcGlsZVByb2dyYW0gPSByZXF1aXJlKCcuL3NoYWRlci9jb21waWxlUHJvZ3JhbScpLFxuXHRleHRyYWN0QXR0cmlidXRlcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RBdHRyaWJ1dGVzJyksXG5cdGV4dHJhY3RVbmlmb3JtcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RVbmlmb3JtcycpLFxuXHRnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QgPSByZXF1aXJlKCcuL3NoYWRlci9nZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgU2hhZGVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cbnZhciBTaGFkZXIgPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIEZpcnN0IGNvbXBpbGUgdGhlIHByb2dyYW0uLlxuXHR0aGlzLnByb2dyYW0gPSBjb21waWxlUHJvZ3JhbShnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7XG5cblx0Ly8gbmV4dCBleHRyYWN0IHRoZSBhdHRyaWJ1dGVzXG5cdHRoaXMuYXR0cmlidXRlcyA9IGV4dHJhY3RBdHRyaWJ1dGVzKGdsLCB0aGlzLnByb2dyYW0pOyBcblxuICAgIHZhciB1bmlmb3JtRGF0YSA9IGV4dHJhY3RVbmlmb3JtcyhnbCwgdGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMudW5pZm9ybXMgPSBnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QoIGdsLCB1bmlmb3JtRGF0YSApO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4iLCJcbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gYSBXZWJHTCBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGZvcm1hdCB7bnVtYmVyfSB0aGUgcGl4ZWwgZm9ybWF0IG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5SR0JBXG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSB0aGUgZ2wgdHlwZSBvZiB0aGUgdGV4dHVyZS4gZGVmYXVsdHMgdG8gZ2wuVU5TSUdORURfQllURVxuICovXG52YXIgVGV4dHVyZSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLnRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cblx0Ly8gc29tZSBzZXR0aW5ncy4uXG5cdHRoaXMubWlwbWFwID0gZmFsc2U7XG5cblx0dGhpcy5wcmVtdWx0aXBseUFscGhhID0gZmFsc2U7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cblx0dGhpcy5mb3JtYXQgPSBmb3JtYXQgfHwgZ2wuUkdCQTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5VTlNJR05FRF9CWVRFO1xuXG5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge1BJWEkuZ2xDb3JlLlRleHR1cmV9IFt2YXJuYW1lXSBbZGVzY3JpcHRpb25dXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKHNvdXJjZSlcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gc291cmNlLndpZHRoO1xuXHR0aGlzLmhlaWdodCA9IHNvdXJjZS5oZWlnaHQ7XG5cblx0Z2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xuICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMuZm9ybWF0LCB0aGlzLnR5cGUsIHNvdXJjZSk7XG59XG5cbnZhciBGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSBmYWxzZTtcblxuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkRGF0YSA9IGZ1bmN0aW9uKGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuYmluZCgpO1xuXHRcblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IHRoaXMud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IHRoaXMuaGVpZ2h0O1xuXG5cdGlmKGRhdGEgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpXG5cdHtcblx0XHRpZighRkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFKVxuXHRcdHtcblx0XHRcdHZhciBleHQgPSBnbC5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9mbG9hdFwiKTtcblx0XHRcdFxuXHRcdFx0aWYoZXh0KVxuXHRcdFx0e1xuXHRcdFx0XHRGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2Zsb2F0aW5nIHBvaW50IHRleHR1cmVzIG5vdCBhdmFpbGFibGUnKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnR5cGUgPSBnbC5GTE9BVDtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHQvLyBUT0RPIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzXG5cdFx0dGhpcy50eXBlID0gZ2wuVU5TSUdORURfQllURTtcblx0fVxuXG5cdC8vIHdoYXQgdHlwZSBvZiBkYXRhP1xuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG5cdGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsICB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgZGF0YSB8fCBudWxsKTtcblxufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24obG9jYXRpb24pXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0aWYobG9jYXRpb24gIT09IHVuZGVmaW5lZClcblx0e1xuXHRcdGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbik7XG5cdH1cblxuXHRnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0aGlzLnRleHR1cmUpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIG51bGwpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5taW5GaWx0ZXIgPSBmdW5jdGlvbiggbGluZWFyIClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRpZih0aGlzLm1pcG1hcClcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVJfTUlQTUFQX0xJTkVBUiA6IGdsLk5FQVJFU1RfTUlQTUFQX05FQVJFU1QpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcblx0fVx0XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1hZ0ZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTWlwbWFwID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR0aGlzLm1pcG1hcCA9IHRydWU7XG5cdGdsLmdlbmVyYXRlTWlwbWFwKGdsLlRFWFRVUkVfMkQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVMaW5lYXJTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcih0cnVlKTtcblx0dGhpcy5tYWdGaWx0ZXIodHJ1ZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZU5lYXJlc3RTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcihmYWxzZSk7XG5cdHRoaXMubWFnRmlsdGVyKGZhbHNlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlV3JhcENsYW1wID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwUmVwZWF0ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXHRcblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuUkVQRUFUKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5SRVBFQVQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlVGV4dHVyZSh0aGlzLnRleHR1cmUpO1xufVxuXG4vL1RleHR1cmUuXG5UZXh0dXJlLmZyb21Tb3VyY2UgPSBmdW5jdGlvbihnbCwgc291cmNlLCBwcmVtdWx0aXBseUFscGhhKVxue1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS5wcmVtdWx0aXBseUFscGhhID0gcHJlbXVsdGlwbHlBbHBoYSB8fCBmYWxzZTtcblx0dGV4dHVyZS51cGxvYWQoc291cmNlKTtcblxuXHRyZXR1cm4gdGV4dHVyZTtcbn1cblxuVGV4dHVyZS5mcm9tRGF0YSA9IGZ1bmN0aW9uKGdsLCBkYXRhLCB3aWR0aCwgaGVpZ2h0KVxue1xuXHQvL2NvbnNvbGUubG9nKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS51cGxvYWREYXRhKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZTtcblxuIiwiXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbi8vIHN0YXRlIG9iamVjdC8vXG5cblxuZnVuY3Rpb24gVmVydGV4QXJyYXlPYmplY3QoZ2wpXG57XG5cdFxuXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IChcbiAgICAgIGdsLmdldEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKVxuICAgICk7XG5cbi8vXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IG51bGw7XG5cblx0aWYodGhpcy5uYXRpdmVWYW9FeHRlbnNpb24pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhbyA9IHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7ICBcblx0fVxuXG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcblxuXHR0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuXHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cblx0XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZlcnRleEFycmF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBWZXJ0ZXhBcnJheU9iamVjdDtcblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKHRoaXMubmF0aXZlVmFvKTsgIFxuXG5cdFx0aWYodGhpcy5kaXJ0eSlcblx0XHR7XG5cdFx0XHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cdFx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdFx0fVxuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLm5hdGl2ZVZhbylcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIFxuXHR7XG5cdFx0dmFyIGF0dHJpYiA9IHRoaXMuYXR0cmlidXRlc1tpXTtcblx0XHRhdHRyaWIuYnVmZmVyLmJpbmQoKTtcdFxuXG5cdFx0YXR0cmliLmF0dHJpYnV0ZS5wb2ludGVyKGF0dHJpYi50eXBlLCBhdHRyaWIubm9ybWFsaXplZCwgYXR0cmliLnN0cmlkZSwgYXR0cmliLnN0YXJ0KTsgXG5cdFx0XG5cdFx0Z2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYXR0cmliLmF0dHJpYnV0ZS5sb2NhdGlvbik7XG5cdH07XG5cblx0dGhpcy5pbmRleEJ1ZmZlci5iaW5kKCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRBdHRyaWJ1dGUgPSBmdW5jdGlvbihidWZmZXIsIGF0dHJpYnV0ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydClcbntcbiAgICB0aGlzLmF0dHJpYnV0ZXMucHVzaCh7XG4gICAgXHRidWZmZXI6IFx0YnVmZmVyLFxuICAgIFx0YXR0cmlidXRlOiBcdGF0dHJpYnV0ZSxcblxuICAgIFx0bG9jYXRpb246IFx0YXR0cmlidXRlLmxvY2F0aW9uLFxuXHQgXHR0eXBlOiBcdFx0dHlwZSB8fCB0aGlzLmdsLkZMT0FULFxuXHQgXHRub3JtYWxpemVkOiBub3JtYWxpemVkIHx8IGZhbHNlLFxuXHQgXHRzdHJpZGU6IFx0c3RyaWRlIHx8IDAsXG5cdCBcdHN0YXJ0OiBcdFx0c3RhcnQgfHwgMFxuXHR9KVxuXG5cdHRoaXMuZGlydHkgPSB0cnVlO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRJbmRleCA9IGZ1bmN0aW9uKGJ1ZmZlciwgb3B0aW9ucylcbntcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gYnVmZmVyO1xuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBzdGFydClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuZHJhd0VsZW1lbnRzKHR5cGUsIHNpemUsIGdsLlVOU0lHTkVEX1NIT1JULCBzdGFydCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgQ29udGV4dFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG5cbnZhciBDT05URVhUX1VJRCA9IDA7XG5cbnZhciBjcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24oY2FudmFzLCBvcHRpb25zKVxue1xuICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgb3B0aW9ucykgfHwgXG4gICAgXHQgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFnbClcbiAgICB7XG4gICAgICAgIC8vIGZhaWwsIG5vdCBhYmxlIHRvIGdldCBhIGNvbnRleHRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB3ZWJHTC4gVHJ5IHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXInKTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCB3YW50IHRvIHBoYXNlIHRoaXMgb3V0P1xuICAgIGdsLmlkID0gQ09OVEVYVF9VSUQrKztcblxuICAgIHJldHVybiBnbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb250ZXh0O1xuXG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgc2V0VmVydGV4QXR0cmliQXJyYXlzID0gZnVuY3Rpb24gKGdsLCBhdHRyaWJzKVxue1x0XG4gICAvLyBjb25zb2xlLmxvZyhnbC5pZClcbiAgICB2YXIgZGF0YSA9IEdMX01BUFtnbC5pZF07XG5cbiAgICBpZighZGF0YSlcbiAgICB7XG5cdCAgIHZhciBtYXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cdFx0ZGF0YSA9IEdMX01BUFtnbC5pZF0gPSB7dGVtcEF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKVxuXHRcdFx0XHQgXHQgXHRcdCAgICxhdHRyaWJTdGF0ZTpuZXcgQXJyYXkobWF4QXR0cmlicyl9O1xuXHR9XG5cdFxuICAgIHZhciBpLFxuICAgIFx0dGVtcEF0dHJpYlN0YXRlID0gZGF0YS50ZW1wQXR0cmliU3RhdGUsXG4gICAgXHRhdHRyaWJTdGF0ZSA9IGRhdGEuYXR0cmliU3RhdGU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAoaSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbaV0ubG9jYXRpb25dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAoYXR0cmliU3RhdGVbaV0gIT09IHRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmliU3RhdGVbaV0gPSB0ZW1wQXR0cmliU3RhdGVbaV07XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmF0dHJpYlN0YXRlW2ldKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VmVydGV4QXR0cmliQXJyYXlzOyIsIlxuXG5cblxuY29tcGlsZVByb2dyYW0gPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcbiAgICB2YXIgZ2xWZXJ0U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuVkVSVEVYX1NIQURFUiwgdmVydGV4U3JjKTtcbiAgICB2YXIgZ2xGcmFnU2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNyYyk7XG5cbiAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbEZyYWdTaGFkZXIpO1xuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgLy8gaWYgbGlua2luZyBmYWlscywgdGhlbiBsb2cgYW5kIGNsZWFudXBcbiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUGl4aS5qcyBFcnJvcjogQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVyLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5WQUxJREFURV9TVEFUVVMnLCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLlZBTElEQVRFX1NUQVRVUykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5nZXRFcnJvcigpJywgZ2wuZ2V0RXJyb3IoKSk7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBwcm9ncmFtIGluZm8gbG9nLCBsb2cgaXRcbiAgICAgICAgaWYgKGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pICE9PSAnJylcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaXhpLmpzIFdhcm5pbmc6IGdsLmdldFByb2dyYW1JbmZvTG9nKCknLCBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICBwcm9ncmFtID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBzb21lIHNoYWRlcnNcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xGcmFnU2hhZGVyKTtcblxuICAgIHJldHVybiBwcm9ncmFtO1xufVxuXG52YXIgY29tcGlsZVNoYWRlciA9IGZ1bmN0aW9uIChnbCwgdHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzcmMpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZVByb2dyYW07XG5cbiIsIlxuXG52YXIgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkgXG57XG4gICAgc3dpdGNoICh0eXBlKVxuICAgIHtcbiAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAndmVjMic6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzQnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSg0ICogc2l6ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgY2FzZSAnc2FtcGxlcjJEJzpcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWMyJzogICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnaXZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDMgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjNCc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDQgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdib29sJzogICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMyJzpcblxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSggMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMzJzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWM0JzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ21hdDInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Myc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMV0pO1xuXG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDAsIDAsIDFdKTtcbiAgICB9XG59XG5cbnZhciBib29sZWFuQXJyYXkgPSBmdW5jdGlvbihzaXplKVxue1xuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgYXJyYXlbaV0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRWYWx1ZTtcbiIsIlxudmFyIG1hcFR5cGUgPSByZXF1aXJlKCcuL21hcFR5cGUnKTtcbnZhciBtYXBTaXplID0gcmVxdWlyZSgnLi9tYXBTaXplJyk7XG5cbnZhciBleHRyYWN0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICB2YXIgdG90YWxBdHRyaWJ1dGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxBdHRyaWJ1dGVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGF0dHJpYkRhdGEgPSBnbC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaSk7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgYXR0cmliRGF0YS50eXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYkRhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOnR5cGUsXG4gICAgICAgICAgICBzaXplOm1hcFNpemUodHlwZSksXG4gICAgICAgICAgICBsb2NhdGlvbjpnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBhdHRyaWJEYXRhLm5hbWUpLFxuICAgICAgICAgICAgLy9UT0RPIC0gbWFrZSBhbiBhdHRyaWJ1dGUgb2JqZWN0XG4gICAgICAgICAgICBwb2ludGVyOmZ1bmN0aW9uKHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpe1xuXG4gICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5sb2NhdGlvbix0aGlzLnNpemUsIHR5cGUgfHwgZ2wuRkxPQVQsIG5vcm1hbGl6ZWQgfHwgZmFsc2UsIHN0cmlkZSB8fCAwLCBzdGFydCB8fCAwKTsgXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYXR0cmlidXRlczsgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RBdHRyaWJ1dGVzO1xuXG4iLCJ2YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIGRlZmF1bHRWYWx1ZSA9IHJlcXVpcmUoJy4vZGVmYXVsdFZhbHVlJyk7XG5cblxudmFyIGV4dHJhY3RVbmlmb3JtcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuXHR2YXIgdW5pZm9ybXMgPSB7fTtcblx0XG4gICAgdmFyIHRvdGFsVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxVbmlmb3JtczsgaSsrKSBcbiAgICB7XG4gICAgXHR2YXIgdW5pZm9ybURhdGEgPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpO1xuICAgIFx0dmFyIG5hbWUgPSB1bmlmb3JtRGF0YS5uYW1lLnJlcGxhY2UoL1xcWy4qP1xcXS8sIFwiXCIpO1xuICAgICAgICB2YXIgdHlwZSA9IG1hcFR5cGUoZ2wsIHVuaWZvcm1EYXRhLnR5cGUgKTtcblxuICAgIFx0dW5pZm9ybXNbbmFtZV0gPSB7XG4gICAgXHRcdHR5cGU6dHlwZSxcbiAgICBcdFx0c2l6ZTp1bmlmb3JtRGF0YS5zaXplLFxuICAgIFx0XHRsb2NhdGlvbjpnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksXG4gICAgXHRcdHZhbHVlOmRlZmF1bHRWYWx1ZSh0eXBlLCB1bmlmb3JtRGF0YS5zaXplKVxuICAgIFx0fVxuICAgIH07XG5cdFxuXHRyZXR1cm4gdW5pZm9ybXM7XHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHRyYWN0VW5pZm9ybXM7XG5cbiIsIlxudmFyIGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IGZ1bmN0aW9uKGdsLCB1bmlmb3JtRGF0YSlcbntcbiAgICAvLyB0aGlzIGlzIHRoZSBvYmplY3Qgd2Ugd2lsbCBiZSBzZW5kaW5nIGJhY2suXG4gICAgLy8gYW4gb2JqZWN0IGhpZXJhY2h5IHdpbGwgYmUgY3JlYXRlZCBmb3Igc3RydWN0c1xuICAgIHZhciB1bmlmb3JtcyA9IHtkYXRhOnt9fTtcblxuICAgIHVuaWZvcm1zLmdsID0gZ2w7XG4gICAgXG4gICAgdmFyIHVuaWZvcm1LZXlzPSBPYmplY3Qua2V5cyh1bmlmb3JtRGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1LZXlzLmxlbmd0aDsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBmdWxsTmFtZSA9IHVuaWZvcm1LZXlzW2ldXG5cbiAgICAgICAgdmFyIG5hbWVUb2tlbnMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAxXTtcblxuICAgICAgICB2YXIgdW5pZm9ybUdyb3VwID0gZ2V0VW5pZm9ybUdyb3VwKG5hbWVUb2tlbnMsIHVuaWZvcm1zKTtcblxuICAgICAgICB2YXIgdW5pZm9ybSA9ICB1bmlmb3JtRGF0YVtmdWxsTmFtZV07XG4gICAgICAgIHVuaWZvcm1Hcm91cC5kYXRhW25hbWVdID0gdW5pZm9ybTtcblxuICAgICAgICB1bmlmb3JtR3JvdXAuZ2wgPSBnbDtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5pZm9ybUdyb3VwLCBuYW1lLCB7XG4gICAgICAgICAgICBnZXQ6IGdlbmVyYXRlR2V0dGVyKG5hbWUpLFxuICAgICAgICAgICAgc2V0OiBnZW5lcmF0ZVNldHRlcihuYW1lLCB1bmlmb3JtKVxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdW5pZm9ybXM7XG59XG5cbnZhciBnZW5lcmF0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpXG57XG5cdHZhciB0ZW1wbGF0ZSA9IGdldHRlclRlbXBsYXRlLnJlcGxhY2UoJyUlJywgbmFtZSk7XG5cdHJldHVybiBuZXcgRnVuY3Rpb24odGVtcGxhdGUpO1xufVxuXG52YXIgZ2VuZXJhdGVTZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCB1bmlmb3JtKVxue1xuICAgIHZhciB0ZW1wbGF0ZSA9IHNldHRlclRlbXBsYXRlLnJlcGxhY2UoLyUlL2csIG5hbWUpO1xuICAgIHZhciBzZXRUZW1wbGF0ZVxuICAgIFxuICAgIGlmKHVuaWZvcm0uc2l6ZSA9PT0gMSlcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19TSU5HTEVfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzZXRUZW1wbGF0ZSA9IEdMU0xfVE9fQVJSQVlfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cblxuICAgIGlmKHNldFRlbXBsYXRlKVxuICAgIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gXCJcXG50aGlzLmdsLlwiICsgc2V0VGVtcGxhdGUgKyBcIjtcIjtcbiAgICB9XG5cbiAgXHRyZXR1cm4gbmV3IEZ1bmN0aW9uKCd2YWx1ZScsIHRlbXBsYXRlKTtcbn1cblxudmFyIGdldFVuaWZvcm1Hcm91cCA9IGZ1bmN0aW9uKG5hbWVUb2tlbnMsIHVuaWZvcm0pXG57XG4gICAgdmFyIGN1ciA9IHVuaWZvcm07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVUb2tlbnMubGVuZ3RoIC0gMTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBvID0gY3VyW25hbWVUb2tlbnNbaV1dIHx8IHtkYXRhOnt9fTtcbiAgICAgICAgY3VyW25hbWVUb2tlbnNbaV1dID0gbztcbiAgICAgICAgY3VyID0gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGN1clxufVxuXG52YXIgZ2V0dGVyVGVtcGxhdGUgPSBbXG4gICAgJ3JldHVybiB0aGlzLmRhdGEuJSUudmFsdWU7Jyxcbl0uam9pbignXFxuJyk7XG5cbnZhciBzZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAndGhpcy5kYXRhLiUlLnZhbHVlID0gdmFsdWU7JyxcbiAgICAndmFyIGxvY2F0aW9uID0gdGhpcy5kYXRhLiUlLmxvY2F0aW9uOydcbl0uam9pbignXFxuJyk7XG5cblxudmFyIEdMU0xfVE9fU0lOR0xFX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ3ZlYzInOiAgICAgJ3VuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ3ZlYzMnOiAgICAgJ3VuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG4gICAgXHRcbiAgICAnaW50JzogICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnaXZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcblxuICAgICdtYXQyJzogICAgICd1bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0Myc6ICAgICAndW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG4gICAgJ21hdDQnOiAgICAgJ3VuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuXG4gICAgJ3NhbXBsZXIyRCc6J3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG52YXIgR0xTTF9UT19BUlJBWV9TRVRURVJTID0ge1xuXG4gICAgJ2Zsb2F0JzogICAgJ3VuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjNCc6ICAgICAndW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG4gICBcbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdDtcblxuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24odHlwZSkgXG57IFxuICAgIHJldHVybiBHTFNMX1RPX1NJWkVbdHlwZV07XG59XG5cblxudmFyIEdMU0xfVE9fU0laRSA9IHtcbiAgICAnZmxvYXQnOiAgICAxLFxuICAgICd2ZWMyJzogICAgIDIsXG4gICAgJ3ZlYzMnOiAgICAgMyxcbiAgICAndmVjNCc6ICAgICA0LFxuXG4gICAgJ2ludCc6ICAgICAgMSxcbiAgICAnaXZlYzInOiAgICAyLFxuICAgICdpdmVjMyc6ICAgIDMsXG4gICAgJ2l2ZWM0JzogICAgNCxcblxuICAgICdib29sJzogICAgIDEsXG4gICAgJ2J2ZWMyJzogICAgMixcbiAgICAnYnZlYzMnOiAgICAzLFxuICAgICdidmVjNCc6ICAgIDQsXG5cbiAgICAnbWF0Mic6ICAgICA0LFxuICAgICdtYXQzJzogICAgIDksXG4gICAgJ21hdDQnOiAgICAgMTYsXG5cbiAgICAnc2FtcGxlcjJEJzogIDFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24oZ2wsIHR5cGUpIFxue1xuICAgIGlmKCFHTF9UQUJMRSkgXG4gICAge1xuICAgICAgICB2YXIgdHlwZU5hbWVzID0gT2JqZWN0LmtleXMoR0xfVE9fR0xTTF9UWVBFUyk7XG5cbiAgICAgICAgR0xfVEFCTEUgPSB7fTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdHlwZU5hbWVzLmxlbmd0aDsgKytpKSBcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHRuID0gdHlwZU5hbWVzW2ldO1xuICAgICAgICAgICAgR0xfVEFCTEVbIGdsW3RuXSBdID0gR0xfVE9fR0xTTF9UWVBFU1t0bl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIEdMX1RBQkxFW3R5cGVdO1xufVxuXG52YXIgR0xfVEFCTEUgPSBudWxsO1xuXG52YXIgR0xfVE9fR0xTTF9UWVBFUyA9IHtcbiAgJ0ZMT0FUJzogICAgICAgJ2Zsb2F0JyxcbiAgJ0ZMT0FUX1ZFQzInOiAgJ3ZlYzInLFxuICAnRkxPQVRfVkVDMyc6ICAndmVjMycsXG4gICdGTE9BVF9WRUM0JzogICd2ZWM0JyxcblxuICAnSU5UJzogICAgICAgICAnaW50JyxcbiAgJ0lOVF9WRUMyJzogICAgJ2l2ZWMyJyxcbiAgJ0lOVF9WRUMzJzogICAgJ2l2ZWMzJyxcbiAgJ0lOVF9WRUM0JzogICAgJ2l2ZWM0JyxcbiAgXG4gICdCT09MJzogICAgICAgICdib29sJyxcbiAgJ0JPT0xfVkVDMic6ICAgJ2J2ZWMyJyxcbiAgJ0JPT0xfVkVDMyc6ICAgJ2J2ZWMzJyxcbiAgJ0JPT0xfVkVDNCc6ICAgJ2J2ZWM0JyxcbiAgXG4gICdGTE9BVF9NQVQyJzogICdtYXQyJyxcbiAgJ0ZMT0FUX01BVDMnOiAgJ21hdDMnLFxuICAnRkxPQVRfTUFUNCc6ICAnbWF0NCcsXG4gIFxuICAnU0FNUExFUl8yRCc6ICAnc2FtcGxlcjJEJyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwU2l6ZTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvQm9vbCh2KSB7XG4gICAgICAgIHJldHVybiAhIXY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vdElkKHYpIHtcbiAgICAgICAgcmV0dXJuICF2O1xuICAgIH1cblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcHJldmlvdXNfYXN5bmM7XG5cbiAgICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gICAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZiB8fFxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgdGhpcztcblxuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgICAgcHJldmlvdXNfYXN5bmMgPSByb290LmFzeW5jO1xuICAgIH1cblxuICAgIGFzeW5jLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBwcmV2aW91c19hc3luYztcbiAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbmx5X29uY2UoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIC8vIFBvcnRlZCBmcm9tIHVuZGVyc2NvcmUuanMgaXNPYmplY3RcbiAgICB2YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9pc0FycmF5TGlrZShhcnIpIHtcbiAgICAgICAgcmV0dXJuIF9pc0FycmF5KGFycikgfHwgKFxuICAgICAgICAgICAgLy8gaGFzIGEgcG9zaXRpdmUgaW50ZWdlciBsZW5ndGggcHJvcGVydHlcbiAgICAgICAgICAgIHR5cGVvZiBhcnIubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICBhcnIubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggJSAxID09PSAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2FycmF5RWFjaChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfbWFwKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdG9yKGFycltpbmRleF0sIGluZGV4LCBhcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JhbmdlKGNvdW50KSB7XG4gICAgICAgIHJldHVybiBfbWFwKEFycmF5KGNvdW50KSwgZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGk7IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9yZWR1Y2UoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBfYXJyYXlFYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9mb3JFYWNoT2Yob2JqZWN0LCBpdGVyYXRvcikge1xuICAgICAgICBfYXJyYXlFYWNoKF9rZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnIsIGl0ZW0pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfa2V5SXRlcmF0b3IoY29sbCkge1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB2YXIgbGVuO1xuICAgICAgICB2YXIga2V5cztcbiAgICAgICAgaWYgKF9pc0FycmF5TGlrZShjb2xsKSkge1xuICAgICAgICAgICAgbGVuID0gY29sbC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBsZW4gPyBpIDogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXlzID0gX2tleXMoY29sbCk7XG4gICAgICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGtleXNbaV0gOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpbWlsYXIgdG8gRVM2J3MgcmVzdCBwYXJhbSAoaHR0cDovL2FyaXlhLm9maWxhYnMuY29tLzIwMTMvMDMvZXM2LWFuZC1yZXN0LXBhcmFtZXRlci5odG1sKVxuICAgIC8vIFRoaXMgYWNjdW11bGF0ZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byBhbiBhcnJheSwgYWZ0ZXIgYSBnaXZlbiBpbmRleC5cbiAgICAvLyBGcm9tIHVuZGVyc2NvcmUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzIxNDApLlxuICAgIGZ1bmN0aW9uIF9yZXN0UGFyYW0oZnVuYywgc3RhcnRJbmRleCkge1xuICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCk7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSB1bnVzZWQgYnV0IGhhbmRsZSBjYXNlcyBvdXRzaWRlIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50OlxuICAgICAgICAgICAgLy8gdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICAgICAgICAvLyBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAvLyAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICAgICAgICAvLyByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBleHBvcnRlZCBhc3luYyBtb2R1bGUgZnVuY3Rpb25zIC8vLy9cblxuICAgIC8vLy8gbmV4dFRpY2sgaW1wbGVtZW50YXRpb24gd2l0aCBicm93c2VyLWNvbXBhdGlibGUgZmFsbGJhY2sgLy8vL1xuXG4gICAgLy8gY2FwdHVyZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZSB0byBndWFyZCBhZ2FpbnN0IGZha2VUaW1lciBtb2Nrc1xuICAgIHZhciBfc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzZXRJbW1lZGlhdGU7XG5cbiAgICB2YXIgX2RlbGF5ID0gX3NldEltbWVkaWF0ZSA/IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgIF9zZXRJbW1lZGlhdGUoZm4pO1xuICAgIH0gOiBmdW5jdGlvbihmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBfZGVsYXk7XG4gICAgfVxuICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IF9zZXRJbW1lZGlhdGUgPyBfZGVsYXkgOiBhc3luYy5uZXh0VGljaztcblxuXG4gICAgYXN5bmMuZm9yRWFjaCA9XG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9XG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mU2VyaWVzKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG5cbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPVxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9lYWNoT2ZMaW1pdChsaW1pdCkoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoT2YgPVxuICAgIGFzeW5jLmVhY2hPZiA9IGZ1bmN0aW9uIChvYmplY3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBvYmplY3QgPSBvYmplY3QgfHwgW107XG5cbiAgICAgICAgdmFyIGl0ZXIgPSBfa2V5SXRlcmF0b3Iob2JqZWN0KTtcbiAgICAgICAgdmFyIGtleSwgY29tcGxldGVkID0gMDtcblxuICAgICAgICB3aGlsZSAoKGtleSA9IGl0ZXIoKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpdGVyYXRvcihvYmplY3Rba2V5XSwga2V5LCBvbmx5X29uY2UoZG9uZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gMCkgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZC0tO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBrZXkgaXMgbnVsbCBpbiBjYXNlIGl0ZXJhdG9yIGlzbid0IGV4aGF1c3RlZFxuICAgICAgICAgICAgLy8gYW5kIGRvbmUgcmVzb2x2ZWQgc3luY2hyb25vdXNseS5cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gbnVsbCAmJiBjb21wbGV0ZWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZlNlcmllcyA9XG4gICAgYXN5bmMuZWFjaE9mU2VyaWVzID0gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iaiA9IG9iaiB8fCBbXTtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgdmFyIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRvcihvYmpba2V5XSwga2V5LCBvbmx5X29uY2UoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoaXRlcmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5mb3JFYWNoT2ZMaW1pdCA9XG4gICAgYXN5bmMuZWFjaE9mTGltaXQgPSBmdW5jdGlvbiAob2JqLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9lYWNoT2ZMaW1pdChsaW1pdCkob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZWFjaE9mTGltaXQobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBydW5uaW5nID0gMDtcbiAgICAgICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChkb25lICYmIHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWwoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZiwgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb1BhcmFsbGVsTGltaXQoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihfZWFjaE9mTGltaXQobGltaXQpLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvU2VyaWVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihhc3luYy5lYWNoT2ZTZXJpZXMsIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gX2lzQXJyYXlMaWtlKGFycikgPyBbXSA6IHt9O1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfYXN5bmNNYXApO1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLmluamVjdCA9XG4gICAgYXN5bmMuZm9sZGwgPVxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgaSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5mb2xkciA9XG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGlkZW50aXR5KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudHJhbnNmb3JtID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGl0ZXJhdG9yO1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBtZW1vO1xuICAgICAgICAgICAgbWVtbyA9IF9pc0FycmF5KGFycikgPyBbXSA6IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuZWFjaE9mKGFyciwgZnVuY3Rpb24odiwgaywgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHYsIGssIGNiKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleDogaW5kZXgsIHZhbHVlOiB4fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soX21hcChyZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICB9KSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMuc2VsZWN0ID1cbiAgICBhc3luYy5maWx0ZXIgPSBkb1BhcmFsbGVsKF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0TGltaXQgPVxuICAgIGFzeW5jLmZpbHRlckxpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID1cbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcblxuICAgIGZ1bmN0aW9uIF9yZWplY3QoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBfZmlsdGVyKGVhY2hmbiwgYXJyLCBmdW5jdGlvbih2YWx1ZSwgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgY2IoIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoZWFjaGZuLCBjaGVjaywgZ2V0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2IpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSBjYihnZXRSZXN1bHQoZmFsc2UsIHZvaWQgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWUoeCwgXywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNiKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2IgJiYgY2hlY2sodikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGdldFJlc3VsdCh0cnVlLCB4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGl0ZXJhdG9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGxpbWl0LCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBsaW1pdDtcbiAgICAgICAgICAgICAgICBlYWNoZm4oYXJyLCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMuYW55ID1cbiAgICBhc3luYy5zb21lID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIHRvQm9vbCwgaWRlbnRpdHkpO1xuXG4gICAgYXN5bmMuc29tZUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5hbGwgPVxuICAgIGFzeW5jLmV2ZXJ5ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIG5vdElkLCBub3RJZCk7XG5cbiAgICBhc3luYy5ldmVyeUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgbm90SWQsIG5vdElkKTtcblxuICAgIGZ1bmN0aW9uIF9maW5kR2V0UmVzdWx0KHYsIHgpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIGFzeW5jLmRldGVjdCA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mU2VyaWVzLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdExpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgaWRlbnRpdHksIF9maW5kR2V0UmVzdWx0KTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoY29tcGFyYXRvciksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgb3B0aW9uYWwsIHNoaWZ0IHRoZSBhcmdzLlxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHJlbWFpbmluZ1Rhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoZm4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gX2luZGV4T2YobGlzdGVuZXJzLCBmbik7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgX2FycmF5RWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2FycmF5RWFjaChrZXlzLCBmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSBfaXNBcnJheSh0YXNrc1trXSkgPyB0YXNrc1trXTogW3Rhc2tzW2tdXTtcbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBfZm9yRWFjaE9mKHJlc3VsdHMsIGZ1bmN0aW9uKHZhbCwgcmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCB0YXNrLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWFkLWxvY2tzXG4gICAgICAgICAgICB2YXIgbGVuID0gcmVxdWlyZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGRlcDtcbiAgICAgICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgICAgICAgIGlmICghKGRlcCA9IHRhc2tzW3JlcXVpcmVzW2xlbl1dKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhcyBpbmV4aXN0YW50IGRlcGVuZGVuY3knKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc0FycmF5KGRlcCkgJiYgX2luZGV4T2YoZGVwLCBrKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGN5Y2xpYyBkZXBlbmRlbmNpZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kgJiYgX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcblxuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHRpbWVzOiBERUZBVUxUX1RJTUVTLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IERFRkFVTFRfSU5URVJWQUxcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgdCA9PT0gJ251bWJlcicpe1xuICAgICAgICAgICAgICAgIGFjYy50aW1lcyA9IHBhcnNlSW50KHQsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiB0ID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodC50aW1lcywgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICAgICAgYWNjLmludGVydmFsID0gcGFyc2VJbnQodC5pbnRlcnZhbCwgMTApIHx8IERFRkFVTFRfSU5URVJWQUw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYXJndW1lbnQgdHlwZSBmb3IgXFwndGltZXNcXCc6ICcgKyB0eXBlb2YgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDEgfHwgbGVuZ3RoID4gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyAtIG11c3QgYmUgZWl0aGVyICh0YXNrKSwgKHRhc2ssIGNhbGxiYWNrKSwgKHRpbWVzLCB0YXNrKSBvciAodGltZXMsIHRhc2ssIGNhbGxiYWNrKScpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA8PSAyICYmIHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGltZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0cywgdGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgb3B0cy50YXNrID0gdGFzaztcblxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVkVGFzayh3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQodGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5SW50ZXJ2YWwoaW50ZXJ2YWwpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKG9wdHMudGltZXMpIHtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5hbEF0dGVtcHQgPSAhKG9wdHMudGltZXMtPTEpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KG9wdHMudGFzaywgZmluYWxBdHRlbXB0KSk7XG4gICAgICAgICAgICAgICAgaWYoIWZpbmFsQXR0ZW1wdCAmJiBvcHRzLmludGVydmFsID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlJbnRlcnZhbChvcHRzLmludGVydmFsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBvcHRzLmNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNhbGxiYWNrIGlzIHBhc3NlZCwgcnVuIHRoaXMgYXMgYSBjb250cm9sbCBmbG93XG4gICAgICAgIHJldHVybiBvcHRzLmNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrO1xuICAgIH07XG5cbiAgICBhc3luYy53YXRlcmZhbGwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGlmICghX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3cmFwSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCh3cmFwSXRlcmF0b3IobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbnN1cmVBc3luYyhpdGVyYXRvcikuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3BhcmFsbGVsKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgbm9vcDtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsIGZ1bmN0aW9uICh0YXNrLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0YXNrKF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLnBhcmFsbGVsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoYXN5bmMuZWFjaE9mLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24odGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoX2VhY2hPZkxpbWl0KGxpbWl0KSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2ZTZXJpZXMsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VDYWxsYmFjayhpbmRleCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYWtlQ2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIGFzeW5jLmFwcGx5ID0gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGNhbGxBcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoY2FsbEFyZ3MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb25jYXQoZWFjaGZuLCBhcnIsIGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIGZuKHgsIGZ1bmN0aW9uIChlcnIsIHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICB2YXIgbmV4dCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdC5hcHBseSh0aGlzLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihuZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gKytjYWxscyA8PSAxIHx8IHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9VbnRpbCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmR1cmluZyA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hlY2spO1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cnV0aCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0KGNoZWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9EdXJpbmcgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIGFzeW5jLmR1cmluZyhmdW5jdGlvbihuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY2FsbHMrKyA8IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBtdXN0IG5vdCBiZSB6ZXJvJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sgfHwgbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBxLnRhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfbmV4dChxLCB0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgd29ya2VycyAtPSAxO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHdvcmtlcnNMaXN0LCBmdW5jdGlvbiAod29ya2VyLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtlciA9PT0gdGFzayAmJiAhcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgdGFza3M6IFtdLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IGNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbm9vcCxcbiAgICAgICAgICAgIGVtcHR5OiBub29wLFxuICAgICAgICAgICAgZHJhaW46IG5vb3AsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHEuZHJhaW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHRydWUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFxLnBhdXNlZCAmJiB3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSh3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBxLnBheWxvYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEucGF5bG9hZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEudGFza3MubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfbWFwKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaCh0YXNrc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UoX25leHQocSwgdGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdW1lQ291bnQgPSBNYXRoLm1pbihxLmNvbmN1cnJlbmN5LCBxLnRhc2tzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSByZXN1bWVDb3VudDsgdysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgcSA9IF9xdWV1ZShmdW5jdGlvbiAoaXRlbXMsIGNiKSB7XG4gICAgICAgICAgICB3b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICAgIGVuZCA9IHNlcXVlbmNlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGJlZyArICgoZW5kIC0gYmVnICsgMSkgPj4+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3BcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoX2JpbmFyeVNlYXJjaChxLnRhc2tzLCBpdGVtLCBfY29tcGFyZVRhc2tzKSArIDEsIDAsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBxLnVuc2hpZnQ7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLmNhcmdvID0gZnVuY3Rpb24gKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gX3F1ZXVlKHdvcmtlciwgMSwgcGF5bG9hZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9jb25zb2xlX2ZuKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGlkZW50aXR5O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIG1lbW9pemVkKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGtleSBpbiBtZW1vKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF90aW1lcyhtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBtYXBwZXIoX3JhbmdlKGNvdW50KSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy50aW1lcyA9IF90aW1lcyhhc3luYy5tYXApO1xuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gX3RpbWVzKGFzeW5jLm1hcFNlcmllcyk7XG4gICAgYXN5bmMudGltZXNMaW1pdCA9IGZ1bmN0aW9uIChjb3VudCwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMubWFwTGltaXQoX3JhbmdlKGNvdW50KSwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBub29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW19yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgbmV4dGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfSldKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoYXQsIFtlcnJdLmNvbmNhdChyZXN1bHRzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5zZXEuYXBwbHkobnVsbCwgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBfYXBwbHlFYWNoKGVhY2hmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbihmbnMsIGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBnbyA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlYWNoZm4oZm5zLCBmdW5jdGlvbiAoZm4sIF8sIGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5hcHBseUVhY2ggPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZik7XG4gICAgYXN5bmMuYXBwbHlFYWNoU2VyaWVzID0gX2FwcGx5RWFjaChhc3luYy5lYWNoT2ZTZXJpZXMpO1xuXG5cbiAgICBhc3luYy5mb3JldmVyID0gZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZG9uZSA9IG9ubHlfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgdmFyIHRhc2sgPSBlbnN1cmVBc3luYyhmbik7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVBc3luYyhmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuXG4gICAgYXN5bmMuY29uc3RhbnQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICB2YXIgYXJncyA9IFtudWxsXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXN5bmMud3JhcFN5bmMgPVxuICAgIGFzeW5jLmFzeW5jaWZ5ID0gZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAoX2lzT2JqZWN0KHJlc3VsdCkgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLm1lc3NhZ2UgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBOb2RlLmpzXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG4gICAgfVxuICAgIC8vIEFNRCAvIFJlcXVpcmVKU1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG5cdCAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXG5cdCAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cblx0ICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSlcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cblx0ICogQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuXHQgKiBVbmljb2RlIHN0cmluZy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gJ3huLS0nICsgZW5jb2RlKHN0cmluZylcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG5cdHB1bnljb2RlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHQndmVyc2lvbic6ICcxLjMuMicsXG5cdFx0LyoqXG5cdFx0ICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHRcdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMpIHtcblx0XHRcdC8vIGluIE5vZGUuanMsIGlvLmpzLCBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IHB1bnljb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5wdW55Y29kZSA9IHB1bnljb2RlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUpIHJldHVybiB0cmlhbmdsZXM7XG5cbiAgICB2YXIgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgc2l6ZTtcblxuICAgIGlmIChoYXNIb2xlcykgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKTtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG4gICAgICAgIG1pblggPSBtYXhYID0gZGF0YVswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xuICAgICAgICAgICAgeSA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIHNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIHNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgICAgICBpLCBqLCBsYXN0O1xuXG4gICAgLy8gY2FsY3VsYXRlIG9yaWdpbmFsIHdpbmRpbmcgb3JkZXIgb2YgYSBwb2x5Z29uIHJpbmdcbiAgICBmb3IgKGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cblxuICAgIC8vIGxpbmsgcG9pbnRzIGludG8gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuICAgIGlmIChjbG9ja3dpc2UgPT09IChzdW0gPiAwKSkge1xuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgc2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChzaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0aWNlIGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZWFyLCB0cmlhbmdsZXMsIGRpbSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDIpO1xuXG4gICAgICAgICAgICAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgd2hpbGUgKHAgIT09IGVhci5wcmV2KSB7XG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG4gICAgdmFyIG1pblRYID0gYS54IDwgYi54ID8gKGEueCA8IGMueCA/IGEueCA6IGMueCkgOiAoYi54IDwgYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoYS55IDwgYy55ID8gYS55IDogYy55KSA6IChiLnkgPCBjLnkgPyBiLnkgOiBjLnkpLFxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1heFRZID0gYS55ID4gYi55ID8gKGEueSA+IGMueSA/IGEueSA6IGMueSkgOiAoYi55ID4gYy55ID8gYi55IDogYy55KTtcblxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgdmFyIG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBzaXplKSxcbiAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgdmFyIHAgPSBlYXIubmV4dFo7XG5cbiAgICB3aGlsZSAocCAmJiBwLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgcCA9IGVhci5wcmV2WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIC8vIGEgc2VsZi1pbnRlcnNlY3Rpb24gd2hlcmUgZWRnZSAodltpLTFdLHZbaV0pIGludGVyc2VjdHMgKHZbaSsxXSx2W2krMl0pXG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcblxuICAgICAgICAgICAgcCA9IHN0YXJ0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBwO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBzdG9wID0gbSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtLm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBtLnggJiZcbiAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoaHkgPCBtLnkgPyBoeCA6IHF4LCBoeSwgbS54LCBtLnksIGh5IDwgbS55ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxU2l6ZSA9PT0gMCB8fCAhcSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwLnogPD0gcS56KSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBzaXplIG9mIHRoZSBkYXRhIGJvdW5kaW5nIGJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlXG4gICAgeCA9IDMyNzY3ICogKHggLSBtaW5YKSAvIHNpemU7XG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAvIHNpemU7XG5cbiAgICB4ID0gKHggfCAoeCA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB4ID0gKHggfCAoeCA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnggPCBsZWZ0bW9zdC54KSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGVxdWFscyhhLCBiKSB8fCBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmXG4gICAgICAgICAgIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYik7XG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgcmV0dXJuIGFyZWEocDEsIHExLCBwMikgPiAwICE9PSBhcmVhKHAxLCBxMSwgcTIpID4gMCAmJlxuICAgICAgICAgICBhcmVhKHAyLCBxMiwgcDEpID4gMCAhPT0gYXJlYShwMiwgcTIsIHExKSA+IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGljZSBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0aWNlIG5vZGVzIGluIGEgcG9seWdvbiByaW5nXG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZVxuICAgIHRoaXMueiA9IG51bGw7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG5cbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuICAgIHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1xuLy8gV2Ugc3RvcmUgb3VyIEVFIG9iamVjdHMgaW4gYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gYH5gIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IG92ZXJyaWRkZW4gb3Jcbi8vIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vIFdlIGFsc28gYXNzdW1lIHRoYXQgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBldmVudCBuYW1lXG4vLyBpcyBhbiBFUzYgU3ltYm9sLlxuLy9cbnZhciBwcmVmaXggPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJyA/ICd+JyA6IGZhbHNlO1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIEV2ZW50RW1pdHRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgQ29udGV4dCBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgZW1pdCBvbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIE1pbmltYWwgRXZlbnRFbWl0dGVyIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkgeyAvKiBOb3RoaW5nIHRvIHNldCAqLyB9XG5cbi8qKlxuICogSG9sZHMgdGhlIGFzc2lnbmVkIEV2ZW50RW1pdHRlcnMgYnkgbmFtZS5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiBhIGxpc3Qgb2YgYXNzaWduZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZXhpc3RzIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7QXJyYXl8Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50LCBleGlzdHMpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGF2YWlsYWJsZSA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoZXhpc3RzKSByZXR1cm4gISFhdmFpbGFibGU7XG4gIGlmICghYXZhaWxhYmxlKSByZXR1cm4gW107XG4gIGlmIChhdmFpbGFibGUuZm4pIHJldHVybiBbYXZhaWxhYmxlLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGF2YWlsYWJsZS5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBhdmFpbGFibGVbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIEVtaXQgYW4gZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSW5kaWNhdGlvbiBpZiB3ZSd2ZSBlbWl0dGVkIGFuIGV2ZW50LlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyBFdmVudExpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdG9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgdGhpcylcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgdGhpcy5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lcjtcbiAgZWxzZSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XS5mbikgdGhpcy5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gICAgZWxzZSB0aGlzLl9ldmVudHNbZXZ0XSA9IFtcbiAgICAgIHRoaXMuX2V2ZW50c1tldnRdLCBsaXN0ZW5lclxuICAgIF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGFuIEV2ZW50TGlzdGVuZXIgdGhhdCdzIG9ubHkgY2FsbGVkIG9uY2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzLCB0cnVlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2Ugd2FudCB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgdGhhdCB3ZSBuZWVkIHRvIGZpbmQuXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IE9ubHkgcmVtb3ZlIGxpc3RlbmVycyBtYXRjaGluZyB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25jZSBsaXN0ZW5lcnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBldmVudHMgPSBbXTtcblxuICBpZiAoZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgIGxpc3RlbmVycy5mbiAhPT0gZm5cbiAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVycy5vbmNlKVxuICAgICAgICB8fCAoY29udGV4dCAmJiBsaXN0ZW5lcnMuY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuXG4gICAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKVxuICAgICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAvL1xuICBpZiAoZXZlbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW2V2dF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgb3Igb25seSB0aGUgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmVycyBmb3IuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKGV2ZW50KSBkZWxldGUgdGhpcy5fZXZlbnRzW3ByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRdO1xuICBlbHNlIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFwcGx5IGFueW1vcmUuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4ndXNlIHN0cmljdCc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiFcbiAqIGFzeW5jXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jXG4gKlxuICogQ29weXJpZ2h0IDIwMTAtMjAxNCBDYW9sYW4gTWNNYWhvblxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbi8qanNoaW50IG9uZXZhcjogZmFsc2UsIGluZGVudDo0ICovXG4vKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cbihmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXN5bmMgPSB7fTtcblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcm9vdCwgcHJldmlvdXNfYXN5bmM7XG5cbiAgICByb290ID0gdGhpcztcbiAgICBpZiAocm9vdCAhPSBudWxsKSB7XG4gICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWQpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkocm9vdCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8gY3Jvc3MtYnJvd3NlciBjb21wYXRpYmxpdHkgZnVuY3Rpb25zIC8vLy9cblxuICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgdmFyIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG5cbiAgICB2YXIgX2VhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBfbWFwID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgaWYgKGFyci5tYXApIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIubWFwKGl0ZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IoeCwgaSwgYSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHZhciBfcmVkdWNlID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIG1lbW8pIHtcbiAgICAgICAgaWYgKGFyci5yZWR1Y2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGl0ZXJhdG9yLCBtZW1vKTtcbiAgICAgICAgfVxuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICBtZW1vID0gaXRlcmF0b3IobWVtbywgeCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuXG4gICAgdmFyIF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgX2VhY2goYXJyLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgb25seV9vbmNlKGRvbmUpICk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2ggPSBhc3luYy5lYWNoO1xuXG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICB2YXIgaXRlcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGFycltjb21wbGV0ZWRdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID0gYXN5bmMuZWFjaFNlcmllcztcblxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZuID0gX2VhY2hMaW1pdChsaW1pdCk7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIFthcnIsIGl0ZXJhdG9yLCBjYWxsYmFja10pO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaExpbWl0ID0gYXN5bmMuZWFjaExpbWl0O1xuXG4gICAgdmFyIF9lYWNoTGltaXQgPSBmdW5jdGlvbiAobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgaWYgKCFhcnIubGVuZ3RoIHx8IGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVwbGVuaXNoICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiBzdGFydGVkIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoYXJyW3N0YXJ0ZWQgLSAxXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB2YXIgZG9QYXJhbGxlbCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvUGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKGxpbWl0LCBmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFtfZWFjaExpbWl0KGxpbWl0KV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBkb1NlcmllcyA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoU2VyaWVzXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBfYXN5bmNNYXAgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1t4LmluZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9tYXBMaW1pdChsaW1pdCkoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB2YXIgX21hcExpbWl0ID0gZnVuY3Rpb24obGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGRvUGFyYWxsZWxMaW1pdChsaW1pdCwgX2FzeW5jTWFwKTtcbiAgICB9O1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihtZW1vLCB4LCBmdW5jdGlvbiAoZXJyLCB2KSB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGluamVjdCBhbGlhc1xuICAgIGFzeW5jLmluamVjdCA9IGFzeW5jLnJlZHVjZTtcbiAgICAvLyBmb2xkbCBhbGlhc1xuICAgIGFzeW5jLmZvbGRsID0gYXN5bmMucmVkdWNlO1xuXG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSkucmV2ZXJzZSgpO1xuICAgICAgICBhc3luYy5yZWR1Y2UocmV2ZXJzZWQsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICAvLyBmb2xkciBhbGlhc1xuICAgIGFzeW5jLmZvbGRyID0gYXN5bmMucmVkdWNlUmlnaHQ7XG5cbiAgICB2YXIgX2ZpbHRlciA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LnZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG4gICAgYXN5bmMuZmlsdGVyU2VyaWVzID0gZG9TZXJpZXMoX2ZpbHRlcik7XG4gICAgLy8gc2VsZWN0IGFsaWFzXG4gICAgYXN5bmMuc2VsZWN0ID0gYXN5bmMuZmlsdGVyO1xuICAgIGFzeW5jLnNlbGVjdFNlcmllcyA9IGFzeW5jLmZpbHRlclNlcmllcztcblxuICAgIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLnJlamVjdCA9IGRvUGFyYWxsZWwoX3JlamVjdCk7XG4gICAgYXN5bmMucmVqZWN0U2VyaWVzID0gZG9TZXJpZXMoX3JlamVjdCk7XG5cbiAgICB2YXIgX2RldGVjdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIG1haW5fY2FsbGJhY2spIHtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKHgpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZGV0ZWN0ID0gZG9QYXJhbGxlbChfZGV0ZWN0KTtcbiAgICBhc3luYy5kZXRlY3RTZXJpZXMgPSBkb1NlcmllcyhfZGV0ZWN0KTtcblxuICAgIGFzeW5jLnNvbWUgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbnkgYWxpYXNcbiAgICBhc3luYy5hbnkgPSBhc3luYy5zb21lO1xuXG4gICAgYXN5bmMuZXZlcnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghdikge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gYWxsIGFsaWFzXG4gICAgYXN5bmMuYWxsID0gYXN5bmMuZXZlcnk7XG5cbiAgICBhc3luYy5zb3J0QnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgYXN5bmMubWFwKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAoZXJyLCBjcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHt2YWx1ZTogeCwgY3JpdGVyaWE6IGNyaXRlcmlhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoZm4pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGhcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldID09PSBmbikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdGFza0NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtYWluaW5nVGFza3MtLVxuICAgICAgICAgICAgX2VhY2gobGlzdGVuZXJzLnNsaWNlKDApLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIHZhciB0aGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZmluYWwgY2FsbGJhY2sgZnJvbSBjYWxsaW5nIGl0c2VsZiBpZiBpdCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdGhlQ2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9lYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKF9rZXlzKHJlc3VsdHMpLCBmdW5jdGlvbihya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIHN1YnNlcXVlbnQgZXJyb3JzIGhpdHRpbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUodGFza0NvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCBNYXRoLmFicyh0YXNrLmxlbmd0aCAtIDEpKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucmV0cnkgPSBmdW5jdGlvbih0aW1lcywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIERFRkFVTFRfVElNRVMgPSA1O1xuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcbiAgICAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHRpbWVzIG5vdCBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICAgICAgdGltZXMgPSBERUZBVUxUX1RJTUVTO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lcyBpcyBhIG51bWJlclxuICAgICAgICB0aW1lcyA9IHBhcnNlSW50KHRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgdmFyIHdyYXBwZWRUYXNrID0gZnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkUmVzdWx0cykge1xuICAgICAgICAgICAgdmFyIHJldHJ5QXR0ZW1wdCA9IGZ1bmN0aW9uKHRhc2ssIGZpbmFsQXR0ZW1wdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKGZ1bmN0aW9uKGVyciwgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKCFlcnIgfHwgZmluYWxBdHRlbXB0LCB7ZXJyOiBlcnIsIHJlc3VsdDogcmVzdWx0fSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXBwZWRSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcykge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KHRhc2ssICEodGltZXMtPTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBjYWxsYmFjaykoZGF0YS5lcnIsIGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrXG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJdGVyYXRvciA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGZ1bmN0aW9uKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGVhY2hmbi5tYXAodGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGVhY2hmbi5lYWNoKF9rZXlzKHRhc2tzKSwgZnVuY3Rpb24gKGssIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGFza3Nba10oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogYXN5bmMubWFwLCBlYWNoOiBhc3luYy5lYWNoIH0sIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogX21hcExpbWl0KGxpbWl0KSwgZWFjaDogX2VhY2hMaW1pdChsaW1pdCkgfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICBhc3luYy5tYXBTZXJpZXModGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5pdGVyYXRvciA9IGZ1bmN0aW9uICh0YXNrcykge1xuICAgICAgICB2YXIgbWFrZUNhbGxiYWNrID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmbi5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCB0YXNrcy5sZW5ndGggLSAxKSA/IG1ha2VDYWxsYmFjayhpbmRleCArIDEpOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KFxuICAgICAgICAgICAgICAgIG51bGwsIGFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgX2NvbmNhdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHIgPSByLmNvbmNhdCh5IHx8IFtdKTtcbiAgICAgICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRlc3QoKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLndoaWxzdCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvV2hpbHN0ID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAodGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMudW50aWwodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAoIXRlc3QuYXBwbHkobnVsbCwgYXJncykpIHtcbiAgICAgICAgICAgICAgICBhc3luYy5kb1VudGlsKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcG9zLCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxLnNhdHVyYXRlZCAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHEuZHJhaW4gPSBudWxsO1xuICAgICAgICAgICAgICBxLnRhc2tzID0gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gcS50YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocS5lbXB0eSAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLmRyYWluICYmIHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UobmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcih0YXNrLmRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSB0cnVlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSBxLmNvbmN1cnJlbmN5OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMucHJpb3JpdHlRdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG5cbiAgICAgICAgZnVuY3Rpb24gX2NvbXBhcmVUYXNrcyhhLCBiKXtcbiAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgIHZhciBiZWcgPSAtMSxcbiAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBzZXF1ZW5jZVttaWRdKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGJlZyA9IG1pZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiZWc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG5vcm1hbCBxdWV1ZVxuICAgICAgICB2YXIgcSA9IGFzeW5jLnF1ZXVlKHdvcmtlciwgY29uY3VycmVuY3kpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciB3b3JraW5nICAgICA9IGZhbHNlLFxuICAgICAgICAgICAgdGFza3MgICAgICAgPSBbXTtcblxuICAgICAgICB2YXIgY2FyZ28gPSB7XG4gICAgICAgICAgICB0YXNrczogdGFza3MsXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBudWxsLFxuICAgICAgICAgICAgZW1wdHk6IG51bGwsXG4gICAgICAgICAgICBkcmFpbjogbnVsbCxcbiAgICAgICAgICAgIGRyYWluZWQ6IHRydWUsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZ28uc2F0dXJhdGVkICYmIHRhc2tzLmxlbmd0aCA9PT0gcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ28uc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoY2FyZ28ucHJvY2Vzcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcygpIHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2luZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2FyZ28uZHJhaW4gJiYgIWNhcmdvLmRyYWluZWQpIGNhcmdvLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvLmRyYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRzID0gdHlwZW9mIHBheWxvYWQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0YXNrcy5zcGxpY2UoMCwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tzLnNwbGljZSgwLCB0YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRzID0gX21hcCh0cywgZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmKGNhcmdvLmVtcHR5KSBjYXJnby5lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHdvcmtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtlcihkcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JraW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKHRzLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjYXJnbztcbiAgICB9O1xuXG4gICAgdmFyIF9jb25zb2xlX2ZuID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZWFjaChhcmdzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbmFtZV0oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIG1lbW9ba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICBxW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfTtcblxuICAgIGFzeW5jLnVubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb3VudGVyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jLm1hcFNlcmllcyhjb3VudGVyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXEgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXN5bmMucmVkdWNlKGZucywgYXJncywgZnVuY3Rpb24gKG5ld2FyZ3MsIGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KFtmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1dKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy5jb21wb3NlID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICB2YXIgX2FwcGx5RWFjaCA9IGZ1bmN0aW9uIChlYWNoZm4sIGZucyAvKmFyZ3MuLi4qLykge1xuICAgICAgICB2YXIgZ28gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzLmNvbmNhdChbY2JdKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgICAgIHJldHVybiBnby5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuYXBwbHlFYWNoID0gZG9QYXJhbGxlbChfYXBwbHlFYWNoKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBkb1NlcmllcyhfYXBwbHlFYWNoKTtcblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbihuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsInZhciBhc3luYyAgICAgICA9IHJlcXVpcmUoJ2FzeW5jJyksXG4gICAgdXJsUGFyc2VyICAgPSByZXF1aXJlKCd1cmwnKSxcbiAgICBSZXNvdXJjZSAgICA9IHJlcXVpcmUoJy4vUmVzb3VyY2UnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgbXVsdGlwbGUgcmVzb3VyY2VzIHRvIGxvYWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KSB7XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICBjb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByb2dyZXNzIHBlcmNlbnQgb2YgdGhlIGxvYWRlciBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRpbmcgc3RhdGUgb2YgdGhlIGxvYWRlciwgdHJ1ZSBpZiBpdCBpcyBjdXJyZW50bHkgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdG90YWwgcHJvZ3Jlc3MgdGhhdCBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGJlZm9yZSBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaWRkbGV3YXJlIHRvIHJ1biBhZnRlciBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfbG9hZFJlc291cmNlYCBmdW5jdGlvbiBib3VuZCB3aXRoIHRoaXMgb2JqZWN0IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kTG9hZFJlc291cmNlID0gdGhpcy5fbG9hZFJlc291cmNlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkxvYWRgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkxvYWQgPSB0aGlzLl9vbkxvYWQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvdXJjZSBidWZmZXIgdGhhdCBmaWxscyB1bnRpbCBgbG9hZGAgaXMgY2FsbGVkIHRvIHN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB0cmFjayBsb2FkIGNvbXBsZXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9udW1Ub0xvYWQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlcyB3YWl0aW5nIHRvIGJlIGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2VbXX1cbiAgICAgKi9cbiAgICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX2JvdW5kTG9hZFJlc291cmNlLCBjb25jdXJyZW5jeSk7XG5cbiAgICAvKipcbiAgICAgKiBBbGwgdGhlIHJlc291cmNlcyBmb3IgdGhpcyBsb2FkZXIga2V5ZWQgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIFJlc291cmNlPn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgb3IgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwcm9ncmVzc1xuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGVycm9yZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGxvYWRlciBiZWdpbnMgdG8gcHJvY2VzcyB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBxdWV1ZWQgcmVzb3VyY2VzIGFsbCBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbi8qKlxuICogQWRkcyBhIHJlc291cmNlIChvciBtdWx0aXBsZSByZXNvdXJjZXMpIHRvIHRoZSBsb2FkZXIgcXVldWUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gdGFrZSBhIHdpZGUgdmFyaWV0eSBvZiBkaWZmZXJlbnQgcGFyYW1ldGVycy4gVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBhbHdheXNcbiAqIHJlcXVpcmVkIHRoZSB1cmwgdG8gbG9hZC4gQWxsIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOlxuICpcbiAqIGBgYGpzXG4gKiBsb2FkZXJcbiAqICAgICAvLyBub3JtYWwgcGFyYW0gc3ludGF4XG4gKiAgICAgLmFkZCgna2V5JywgJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJywgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCgnaHR0cDovLy4uLicpXG4gKlxuICogICAgIC8vIG9iamVjdCBzeW50YXhcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgbmFtZTogJ2tleTInLFxuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MycsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9XG4gKiAgICAgfSlcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgdXJsOiAnaHR0cHM6Ly8uLi4nLFxuICogICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7fSxcbiAqICAgICAgICAgY3Jvc3NPcmlnaW46IHRydWVcbiAqICAgICB9KVxuICpcbiAqICAgICAvLyB5b3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBvYmplY3RzIG9yIHVybHMgb3IgYm90aFxuICogICAgIC5hZGQoW1xuICogICAgICAgICB7IG5hbWU6ICdrZXk0JywgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgIHsgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgICdodHRwOi8vLi4uJ1xuICogICAgIF0pO1xuICogYGBgXG4gKlxuICogQGFsaWFzIGVucXVldWVcbiAqIEBwYXJhbSBbbmFtZV0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQsIGlmIG5vdCBwYXNzZWQgdGhlIHVybCBpcyB1c2VkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCByZWxhdGl2ZSB0byB0aGUgYmFzZVVybCBvZiB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7Ym9vbGVhbn0gSXMgdGhpcyByZXF1ZXN0IGNyb3NzLW9yaWdpbj8gRGVmYXVsdCBpcyB0byBkZXRlcm1pbmUgYXV0b21hdGljYWxseS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5sb2FkVHlwZT1SZXNvdXJjZS5MT0FEX1RZUEUuWEhSXSB7UmVzb3VyY2UuWEhSX0xPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGlzIHNwZWNpZmljIHJlc291cmNlIGNvbXBsZXRlcyBsb2FkaW5nLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFkZCA9IExvYWRlci5wcm90b3R5cGUuZW5xdWV1ZSA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIGNiKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIG9mIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hZGQobmFtZVtpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBpZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluc3RlYWQgb2YgcGFyYW1zXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYiA9IHVybCB8fCBuYW1lLmNhbGxiYWNrIHx8IG5hbWUub25Db21wbGV0ZTtcbiAgICAgICAgb3B0aW9ucyA9IG5hbWU7XG4gICAgICAgIHVybCA9IG5hbWUudXJsO1xuICAgICAgICBuYW1lID0gbmFtZS5uYW1lIHx8IG5hbWUua2V5IHx8IG5hbWUudXJsO1xuICAgIH1cblxuICAgIC8vIGNhc2Ugd2hlcmUgbm8gbmFtZSBpcyBwYXNzZWQgc2hpZnQgYWxsIGFyZ3Mgb3ZlciBieSBvbmUuXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHVybDtcbiAgICAgICAgdXJsID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBzaGlmdGVkIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIHVybC5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB1cmwgcGFzc2VkIHRvIGFkZCByZXNvdXJjZSB0byBsb2FkZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gb3B0aW9ucyBhcmUgb3B0aW9uYWwgc28gcGVvcGxlIG1pZ2h0IHBhc3MgYSBmdW5jdGlvbiBhbmQgbm8gb3B0aW9uc1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHJlc291cmNlIGFscmVhZHkgZXhpc3RzLlxuICAgIGlmICh0aGlzLnJlc291cmNlc1tuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc291cmNlIHdpdGggbmFtZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgIH1cblxuICAgIC8vIGFkZCBiYXNlIHVybCBpZiB0aGlzIGlzbid0IGFuIGFic29sdXRlIHVybFxuICAgIHVybCA9IHRoaXMuX2hhbmRsZUJhc2VVcmwodXJsKTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgc3RvcmUgdGhlIHJlc291cmNlXG4gICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0gPSBuZXcgUmVzb3VyY2UobmFtZSwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0ub25jZSgnYWZ0ZXJNaWRkbGV3YXJlJywgY2IpO1xuICAgIH1cblxuICAgIHRoaXMuX251bVRvTG9hZCsrO1xuXG4gICAgLy8gaWYgYWxyZWFkeSBsb2FkaW5nIGFkZCBpdCB0byB0aGUgd29ya2VyIHF1ZXVlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAoMTAwIC0gdGhpcy5wcm9ncmVzcykgLyAodGhpcy5fcXVldWUubGVuZ3RoKCkgKyB0aGlzLl9xdWV1ZS5ydW5uaW5nKCkpO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgYnVmZmVyIGl0IHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSBsYXRlclxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9idWZmZXIucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAxMDAgLyB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuTG9hZGVyLnByb3RvdHlwZS5faGFuZGxlQmFzZVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFyc2VkVXJsID0gdXJsUGFyc2VyLnBhcnNlKHVybCk7XG5cbiAgICAvLyBhYnNvbHV0ZSB1cmwsIGp1c3QgdXNlIGl0IGFzIGlzLlxuICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgfHwgcGFyc2VkVXJsLnBhdGhuYW1lLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBpZiBiYXNlVXJsIGRvZXNuJ3QgZW5kIGluIHNsYXNoIGFuZCB1cmwgZG9lc24ndCBzdGFydCB3aXRoIHNsYXNoLCB0aGVuIGFkZCBhIHNsYXNoIGluYmV0d2VlblxuICAgIGlmIChcbiAgICAgICAgdGhpcy5iYXNlVXJsLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmJhc2VVcmwubGFzdEluZGV4T2YoJy8nKSAhPT0gdGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgdXJsLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyAnLycgKyB1cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsICsgdXJsO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBTZXRzIHVwIGEgbWlkZGxld2FyZSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuICpiZWZvcmUqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyBwcmVcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYmVmb3JlID0gTG9hZGVyLnByb3RvdHlwZS5wcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLnB1c2goZm4pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmFmdGVyKiB0aGVcbiAqIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqXG4gKiBAYWxpYXMgdXNlXG4gKiBAcGFyYW0gbWlkZGxld2FyZSB7ZnVuY3Rpb259IFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFmdGVyID0gTG9hZGVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9hZnRlck1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoZSBxdWV1ZSBvZiB0aGUgbG9hZGVyIHRvIHByZXBhcmUgZm9yIGEgbmV3IGxvYWQuXG4gKlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvLyB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG4gICAgLy8gdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gICAgdGhpcy5fcXVldWUuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGxvYWRpbmcgdGhlIHF1ZXVlZCByZXNvdXJjZXMuXG4gKlxuICogQGZpcmVzIHN0YXJ0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgYGNvbXBsZXRlYCBldmVudC5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgLy8gcmVnaXN0ZXIgY29tcGxldGUgY2FsbGJhY2sgaWYgdGhleSBwYXNzIG9uZVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcXVldWUgaGFzIGFscmVhZHkgc3RhcnRlZCB3ZSBhcmUgZG9uZSBoZXJlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm90aWZ5IG9mIHN0YXJ0XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gc3RhcnQgdGhlIGludGVybmFsIHF1ZXVlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLl9idWZmZXJbaV0pO1xuICAgIH1cblxuICAgIC8vIGVtcHR5IHRoZSBidWZmZXJcbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBMb2FkcyBhIHNpbmdsZSByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX2xvYWRSZXNvdXJjZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZGVxdWV1ZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHJlc291cmNlLl9kZXF1ZXVlID0gZGVxdWV1ZTtcblxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gcmVzb3VyY2Uub24oJ3Byb2dyZXNzJywgc2VsZi5lbWl0LmJpbmQoc2VsZiwgJ3Byb2dyZXNzJykpO1xuXG4gICAgICAgIHJlc291cmNlLmxvYWQoc2VsZi5fYm91bmRPbkxvYWQpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgb25jZSBlYWNoIHJlc291cmNlIGhhcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzLCB0aGlzLnJlc291cmNlcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBlYWNoIHRpbWUgYSByZXNvdXJjZXMgaXMgbG9hZGVkLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQGZpcmVzIGVycm9yXG4gKiBAZmlyZXMgbG9hZFxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgdGhpcy5wcm9ncmVzcyArPSB0aGlzLl9wcm9ncmVzc0NodW5rO1xuXG4gICAgdGhpcy5lbWl0KCdwcm9ncmVzcycsIHRoaXMsIHJlc291cmNlKTtcblxuICAgIC8vIHJ1biBtaWRkbGV3YXJlLCB0aGlzICptdXN0KiBoYXBwZW4gYmVmb3JlIGRlcXVldWUgc28gc3ViLWFzc2V0cyBnZXQgYWRkZWQgcHJvcGVybHlcbiAgICB0aGlzLl9ydW5NaWRkbGV3YXJlKHJlc291cmNlLCB0aGlzLl9hZnRlck1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzb3VyY2UuZW1pdCgnYWZ0ZXJNaWRkbGV3YXJlJywgcmVzb3VyY2UpO1xuXG4gICAgICAgIHRoaXMuX251bVRvTG9hZC0tO1xuXG4gICAgICAgIC8vIGRvIGNvbXBsZXRpb24gY2hlY2tcbiAgICAgICAgaWYgKHRoaXMuX251bVRvTG9hZCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgIHRoaXMuX29uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc291cmNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgcmVzb3VyY2UuZXJyb3IsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZCcsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuXG5cbiAgICAvLyByZW1vdmUgdGhpcyByZXNvdXJjZSBmcm9tIHRoZSBhc3luYyBxdWV1ZVxuICAgIHJlc291cmNlLl9kZXF1ZXVlKCk7XG59O1xuXG4vKipcbiAqIFJ1biBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvbiBhIHJlc291cmNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX3J1bk1pZGRsZXdhcmUgPSBmdW5jdGlvbiAocmVzb3VyY2UsIGZucywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzKGZucywgZnVuY3Rpb24gKGZuLCBuZXh0KSB7XG4gICAgICAgIGZuLmNhbGwoc2VsZiwgcmVzb3VyY2UsIG5leHQpO1xuICAgIH0sIGNiLmJpbmQodGhpcywgcmVzb3VyY2UpKTtcbn07XG5cbkxvYWRlci5MT0FEX1RZUEUgPSBSZXNvdXJjZS5MT0FEX1RZUEU7XG5Mb2FkZXIuWEhSX1JFQURZX1NUQVRFID0gUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFO1xuTG9hZGVyLlhIUl9SRVNQT05TRV9UWVBFID0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEU7XG4iLCJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIF91cmwgPSByZXF1aXJlKCd1cmwnKSxcbiAgICAvLyB0ZXN0cyBpcyBDT1JTIGlzIHN1cHBvcnRlZCBpbiBYSFIsIGlmIG5vdCB3ZSBuZWVkIHRvIHVzZSBYRFJcbiAgICB1c2VYZHIgPSAhISh3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiAobmV3IFhNTEh0dHBSZXF1ZXN0KCkpKSksXG4gICAgdGVtcEFuY2hvciA9IG51bGw7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgYSBzaW5nbGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnlcbiAqIGEgc2luZ2xlIFVSTC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBuYW1lIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCBmb3IgYXVkaW8vdmlkZW8gbG9hZHMgeW91IGNhbiBwYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMuXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5jcm9zc09yaWdpbl0ge3N0cmluZ3xib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5MT0FEX1RZUEV9IEhvdyBzaG91bGQgdGhpcyByZXNvdXJjZSBiZSBsb2FkZWQ/XG4gKiBAcGFyYW0gW29wdGlvbnMueGhyVHlwZT1SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ERUZBVUxUXSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IEhvdyBzaG91bGQgdGhlIGRhdGEgYmVpbmdcbiAqICAgICAgbG9hZGVkIGJlIGludGVycHJldGVkIHdoZW4gdXNpbmcgWEhSP1xuICogQHBhcmFtIFtvcHRpb25zLm1ldGFkYXRhXSB7b2JqZWN0fSBFeHRyYSBpbmZvIGZvciBtaWRkbGV3YXJlLlxuICovXG5mdW5jdGlvbiBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggbmFtZSBhbmQgdXJsIGFyZSByZXF1aXJlZCBmb3IgY29uc3RydWN0aW5nIGEgcmVzb3VyY2UuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVybCB1c2VkIHRvIGxvYWQgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHVybCBpcyBhIGRhdGEgdXJsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzRGF0YVVybCA9IHRoaXMudXJsLmluZGV4T2YoJ2RhdGE6JykgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSB0aGF0IHdhcyBsb2FkZWQgYnkgdGhlIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55fVxuICAgICAqL1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBvcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJ2Fub255bW91cycgOiBvcHRpb25zLmNyb3NzT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCBvZiBsb2FkaW5nIHRvIHVzZSBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlLkxPQURfVFlQRX1cbiAgICAgKi9cbiAgICB0aGlzLmxvYWRUeXBlID0gb3B0aW9ucy5sb2FkVHlwZSB8fCB0aGlzLl9kZXRlcm1pbmVMb2FkVHlwZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgdXNlZCB0byBsb2FkIHRoZSByZXNvdXJjZSB2aWEgWEhSLiBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMueGhyVHlwZSA9IG9wdGlvbnMueGhyVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgKGlmIGFueSkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFcnJvcn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBYSFIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLiBUaGlzIGlzIG9ubHkgc2V0XG4gICAgICogd2hlbiBgbG9hZFR5cGVgIGlzIGBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1hNTEh0dHBSZXF1ZXN0fVxuICAgICAqL1xuICAgIHRoaXMueGhyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMganNvbi4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNKc29uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIHhtbC4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNYbWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gaW1hZ2UgdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0ltYWdlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGFuIGF1ZGlvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNBdWRpbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhIHZpZGVvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNWaWRlbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBkZXF1ZXVlYCBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgYSBzdG9yYWdlIHBsYWNlIGZvciB0aGUgYXN5bmMgcXVldWUgZGVxdWV1ZSBtZXRob2RcbiAgICAgKiB1c2VkIHByaXZhdGVseSBieSB0aGUgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kZXF1ZXVlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tcGxldGVgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZENvbXBsZXRlID0gdGhpcy5jb21wbGV0ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25FcnJvcmAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25FcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uUHJvZ3Jlc3NgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MgPSB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyk7XG5cbiAgICAvLyB4aHIgY2FsbGJhY2tzXG4gICAgdGhpcy5fYm91bmRYaHJPbkVycm9yID0gdGhpcy5feGhyT25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25BYm9ydCA9IHRoaXMuX3hock9uQWJvcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9ib3VuZFhock9uTG9hZCA9IHRoaXMuX3hock9uTG9hZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0ID0gdGhpcy5feGRyT25UaW1lb3V0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJlc291cmNlIGJlaW5ncyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBlYWNoIHRpbWUgcHJvZ3Jlc3Mgb2YgdGhpcyByZXNvdXJjZSBsb2FkIHVwZGF0ZXMuXG4gICAgICogTm90IGFsbCByZXNvdXJjZXMgdHlwZXMgYW5kIGxvYWRlciBzeXN0ZW1zIGNhbiBzdXBwb3J0IHRoaXMgZXZlbnRcbiAgICAgKiBzbyBzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIElmIHRoZSByZXNvdXJjZVxuICAgICAqIGlzIGJlaW5nIGxvYWRlZCBvbiBhIG1vZGVybiBicm93c2VyLCB1c2luZyBYSFIsIGFuZCB0aGUgcmVtb3RlIHNlcnZlclxuICAgICAqIHByb3Blcmx5IHNldHMgQ29udGVudC1MZW5ndGggaGVhZGVycywgdGhlbiB0aGlzIHdpbGwgYmUgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHRoaXMgcmVzb3VyY2UgaGFzIGxvYWRlZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGl0IHdpbGxcbiAgICAgKiBiZSBpbiB0aGUgYGVycm9yYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb21wbGV0ZVxuICAgICAqIEBtZW1iZXJvZiBSZXNvdXJjZSNcbiAgICAgKi9cbn1cblxuUmVzb3VyY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblJlc291cmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlc291cmNlO1xubW9kdWxlLmV4cG9ydHMgPSBSZXNvdXJjZTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgcmVzb3VyY2UgYXMgY29tcGxldGUuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIGluIGEgd3JhcHBlciBvciBzb21ldGhpbmcuLi5ncm9zcy4uLi5cbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvcik7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgICBpZiAodGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGhyLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub250aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMueGhyLm9ucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25sb2FkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogS2lja3Mgb2ZmIGxvYWRpbmcgb2YgdGhpcyByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gaWYgYSBjYWxsYmFjayBpcyBzZXQsIGxpc3RlbiBmb3IgY29tcGxldGUgZXZlbnRcbiAgICBpZiAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luID09PSBmYWxzZSB8fCB0eXBlb2YgdGhpcy5jcm9zc09yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHRoaXMuX2RldGVybWluZUNyb3NzT3JpZ2luKHRoaXMudXJsKTtcbiAgICB9XG5cbiAgICBzd2l0Y2godGhpcy5sb2FkVHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRTpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRJbWFnZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuQVVESU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlZJREVPOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5YSFI6XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodXNlWGRyICYmIHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGRyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGhyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEltYWdlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLnNyYyA9IHRoaXMudXJsO1xuXG4gICAgdGhpcy5pc0ltYWdlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBIVE1MQXVkaW9FbGVtZW50IG9yIEhUTUxWaWRlb0VsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdhdWRpbycgJiYgdHlwZW9mIEF1ZGlvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQXVkaW8oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBlbGVtZW50ICcgKyB0eXBlKTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBmb3IgQ29jb29uSlMgQ2FudmFzKyBydW50aW1lLCBsYWNrcyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKVxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUykge1xuICAgICAgICB0aGlzLmRhdGEuc3JjID0gQXJyYXkuaXNBcnJheSh0aGlzLnVybCkgPyB0aGlzLnVybFswXSA6IHRoaXMudXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51cmwpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXJsLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybFtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1snaXMnICsgdHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSldID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUsIGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YS5sb2FkKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhNTEh0dHBSZXF1ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBzZXQgdGhlIHJlcXVlc3QgdHlwZSBhbmQgdXJsXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsLCB0cnVlKTtcblxuICAgIC8vIGxvYWQganNvbiBhcyB0ZXh0IGFuZCBwYXJzZSBpdCBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgLy8gKmNvdWdoKiBzYWZhcmkgKmNvdWdoKiBjYW4ndCBkZWFsIHdpdGggaXQuXG4gICAgaWYgKHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTiB8fCB0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHRoaXMueGhyVHlwZTtcbiAgICB9XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkLCBmYWxzZSk7XG5cbiAgICB4aHIuc2VuZCgpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBYRG9tYWluUmVxdWVzdC4gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdXBwb3J0IElFOSAoZ3Jvc3MpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhkciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhkciA9IHRoaXMueGhyID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7XG5cbiAgICAvLyBYRG9tYWluUmVxdWVzdCBoYXMgYSBmZXcgcXVpcmtzLiBPY2Nhc2lvbmFsbHkgaXQgd2lsbCBhYm9ydCByZXF1ZXN0c1xuICAgIC8vIEEgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbWFrZSBzdXJlIEFMTCBjYWxsYmFja3MgYXJlIHNldCBldmVuIGlmIG5vdCB1c2VkXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU3ODY5NjYveGRvbWFpbnJlcXVlc3QtYWJvcnRzLXBvc3Qtb24taWUtOVxuICAgIHhkci50aW1lb3V0ID0gNTAwMDtcblxuICAgIHhkci5vbmVycm9yID0gdGhpcy5fYm91bmRYaHJPbkVycm9yO1xuICAgIHhkci5vbnRpbWVvdXQgPSB0aGlzLl9ib3VuZFhkck9uVGltZW91dDtcbiAgICB4ZHIub25wcm9ncmVzcyA9IHRoaXMuX2JvdW5kT25Qcm9ncmVzcztcbiAgICB4ZHIub25sb2FkID0gdGhpcy5fYm91bmRYaHJPbkxvYWQ7XG5cbiAgICB4ZHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gIE5vdGU6IFRoZSB4ZHIuc2VuZCgpIGNhbGwgaXMgd3JhcHBlZCBpbiBhIHRpbWVvdXQgdG8gcHJldmVudCBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmZhY2Ugd2hlcmUgc29tZSByZXF1ZXN0cyBhcmUgbG9zdFxuICAgIC8vICBpZiBtdWx0aXBsZSBYRG9tYWluUmVxdWVzdHMgYXJlIGJlaW5nIHNlbnQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAvLyBTb21lIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9pc3N1ZXMvMTI0OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB4ZHIuc2VuZCgpO1xuICAgIH0sIDApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc291cmNlIHVzZWQgaW4gbG9hZGluZyB2aWEgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSBUaGUgZWxlbWVudCB0eXBlICh2aWRlbyBvciBhdWRpbykuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSBzb3VyY2UgVVJMIHRvIGxvYWQgZnJvbS5cbiAqIEBwYXJhbSBbbWltZV0ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSBvZiB0aGUgdmlkZW9cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fY3JlYXRlU291cmNlID0gZnVuY3Rpb24gKHR5cGUsIHVybCwgbWltZSkge1xuICAgIGlmICghbWltZSkge1xuICAgICAgICBtaW1lID0gdHlwZSArICcvJyArIHVybC5zdWJzdHIodXJsLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gdXJsO1xuICAgIHNvdXJjZS50eXBlID0gbWltZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgZXJyb3JzIG91dC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgZXJyb3IgZXZlbnQgZnJvbSB0aGUgZWxlbWVudCB0aGF0IGVtaXRzIGl0LlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgZWxlbWVudCB1c2luZyAnICsgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgcHJvZ3Jlc3MgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fb25Qcm9ncmVzcyA9ICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGVycm9yIGV2ZW50IGZpcmVzIGZvciB4aHIveGRyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RFcnJvckV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIHJlcVR5cGUodGhpcy54aHIpICsgJyBSZXF1ZXN0IGZhaWxlZC4gJyArXG4gICAgICAgICdTdGF0dXM6ICcgKyB0aGlzLnhoci5zdGF0dXMgKyAnLCB0ZXh0OiBcIicgKyB0aGlzLnhoci5zdGF0dXNUZXh0ICsgJ1wiJ1xuICAgICk7XG5cbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhbiBhYm9ydCBldmVudCBmaXJlcyBmb3IgeGhyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RBYm9ydEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3Qgd2FzIGFib3J0ZWQgYnkgdGhlIHVzZXIuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYSB0aW1lb3V0IGV2ZW50IGZpcmVzIGZvciB4ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGRyT25UaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgdGltZWQgb3V0LicpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gZGF0YSBzdWNjZXNzZnVsbHkgbG9hZHMgZnJvbSBhbiB4aHIveGRyIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdExvYWRFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGhyT25Mb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB4aHIgPSB0aGlzLnhocixcbiAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1cyAhPT0gdW5kZWZpbmVkID8geGhyLnN0YXR1cyA6IDIwMDsgLy9YRFIgaGFzIG5vIGAuc3RhdHVzYCwgYXNzdW1lIDIwMC5cblxuICAgIC8vIHN0YXR1cyBjYW4gYmUgMCB3aGVuIHVzaW5nIHRoZSBmaWxlOi8vIHByb3RvY29sLCBhbHNvIGNoZWNrIGlmIGEgcmVzcG9uc2Ugd2FzIGZvdW5kXG4gICAgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA0IHx8IChzdGF0dXMgPT09IDAgJiYgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkge1xuICAgICAgICAvLyBpZiB0ZXh0LCBqdXN0IHJldHVybiBpdFxuICAgICAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGpzb24sIHBhcnNlIGludG8ganNvbiBvYmplY3RcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0pzb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGxvYWRlZCBqc29uOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHhtbCwgcGFyc2UgaW50byBhbiB4bWwgZG9jdW1lbnQgb3IgZGl2IGVsZW1lbnRcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LkRPTVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhoci5yZXNwb25zZVRleHQsICd0ZXh0L3htbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZGl2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzWG1sID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIHhtbDonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlciB0eXBlcyBqdXN0IHJldHVybiB0aGUgcmVzcG9uc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2UgfHwgeGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignWycgKyB4aHIuc3RhdHVzICsgJ10nICsgeGhyLnN0YXR1c1RleHQgKyAnOicgKyB4aHIucmVzcG9uc2VVUkwpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbmZ1bmN0aW9uIHJlcVR5cGUoeGhyKSB7XG4gICAgcmV0dXJuIHhoci50b1N0cmluZygpLnJlcGxhY2UoJ29iamVjdCAnLCAnJyk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYGNyb3NzT3JpZ2luYCBwcm9wZXJ0eSBmb3IgdGhpcyByZXNvdXJjZSBiYXNlZCBvbiBpZiB0aGUgdXJsXG4gKiBmb3IgdGhpcyByZXNvdXJjZSBpcyBjcm9zcy1vcmlnaW4uIElmIGNyb3NzT3JpZ2luIHdhcyBtYW51YWxseSBzZXQsIHRoaXNcbiAqIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIHRvIHRlc3QuXG4gKiBAcGFyYW0gW2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbl0ge29iamVjdH0gVGhlIGxvY2F0aW9uIG9iamVjdCB0byB0ZXN0IGFnYWluc3QuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjcm9zc09yaWdpbiB2YWx1ZSB0byB1c2UgKG9yIGVtcHR5IHN0cmluZyBmb3Igbm9uZSkuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbiAodXJsLCBsb2MpIHtcbiAgICAvLyBkYXRhOiBhbmQgamF2YXNjcmlwdDogdXJscyBhcmUgY29uc2lkZXJlZCBzYW1lLW9yaWdpblxuICAgIGlmICh1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBpcyB3aW5kb3cubG9jYXRpb25cbiAgICBsb2MgPSBsb2MgfHwgd2luZG93LmxvY2F0aW9uO1xuXG4gICAgaWYgKCF0ZW1wQW5jaG9yKSB7XG4gICAgICAgIHRlbXBBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgfVxuXG4gICAgLy8gbGV0IHRoZSBicm93c2VyIGRldGVybWluZSB0aGUgZnVsbCBocmVmIGZvciB0aGUgdXJsIG9mIHRoaXMgcmVzb3VyY2UgYW5kIHRoZW5cbiAgICAvLyBwYXJzZSB3aXRoIHRoZSBub2RlIHVybCBsaWIsIHdlIGNhbid0IHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgICAvLyBiZWNhdXNlIHRoZXkgZG9uJ3Qgd29yayBpbiBJRTkgOihcbiAgICB0ZW1wQW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgdXJsID0gX3VybC5wYXJzZSh0ZW1wQW5jaG9yLmhyZWYpO1xuXG4gICAgdmFyIHNhbWVQb3J0ID0gKCF1cmwucG9ydCAmJiBsb2MucG9ydCA9PT0gJycpIHx8ICh1cmwucG9ydCA9PT0gbG9jLnBvcnQpO1xuXG4gICAgLy8gaWYgY3Jvc3Mgb3JpZ2luXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gbG9jLmhvc3RuYW1lIHx8ICFzYW1lUG9ydCB8fCB1cmwucHJvdG9jb2wgIT09IGxvYy5wcm90b2NvbCkge1xuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZXNwb25zZVR5cGUgb2YgYW4gWEhSIHJlcXVlc3QgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGVcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSByZXNwb25zZVR5cGUgdG8gdXNlLlxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZVhoclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlc291cmNlLl94aHJUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVMb2FkVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX2xvYWRUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXMudXJsLFxuICAgICAgICBleHQ7XG5cbiAgICBpZiAodGhpcy5pc0RhdGFVcmwpIHtcbiAgICAgICAgdmFyIHNsYXNoSW5kZXggPSB1cmwuaW5kZXhPZignLycpO1xuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHNsYXNoSW5kZXggKyAxLCB1cmwuaW5kZXhPZignOycsIHNsYXNoSW5kZXgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBxdWVyeVN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXh0ID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQ7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG1pbWUgdHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgcmVzcG9uc2VUeXBlIG9mXG4gKiByZXNvdXJjZSBiZWluZyBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZ2V0TWltZUZyb21YaHJUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5JztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0I6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2Jsb2InO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQ6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCc7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQ6XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVDpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG5cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsb2FkaW5nIGEgcmVzb3VyY2UgY2FuIHVzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBMT0FEX1RZUEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuWEhSIC0gVXNlcyBYTUxIdHRwUmVxdWVzdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuSU1BR0UgLSBVc2VzIGFuIGBJbWFnZWAgb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5BVURJTyAtIFVzZXMgYW4gYEF1ZGlvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLlZJREVPIC0gVXNlcyBhIGBWaWRlb2Agb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICovXG5SZXNvdXJjZS5MT0FEX1RZUEUgPSB7XG4gICAgWEhSOiAgICAxLFxuICAgIElNQUdFOiAgMixcbiAgICBBVURJTzogIDMsXG4gICAgVklERU86ICA0XG59O1xuXG4vKipcbiAqIFRoZSBYSFIgcmVhZHkgc3RhdGVzLCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gWEhSX1JFQURZX1NUQVRFXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLlVOU0VOVCAtIG9wZW4oKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5PUEVORUQgLSBzZW5kKCloYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuSEVBREVSU19SRUNFSVZFRCAtIHNlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuTE9BRElORyAtIERvd25sb2FkaW5nOyByZXNwb25zZVRleHQgaG9sZHMgcGFydGlhbCBkYXRhLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5ET05FIC0gVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFID0ge1xuICAgIFVOU0VOVDogMCxcbiAgICBPUEVORUQ6IDEsXG4gICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICBMT0FESU5HOiAzLFxuICAgIERPTkU6IDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVTUE9OU0VfVFlQRVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQgLSBkZWZhdWx0cyB0byB0ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSIC0gQXJyYXlCdWZmZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CTE9CIC0gQmxvYlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UIC0gRG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5KU09OIC0gT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCAtIFN0cmluZ1xuICovXG5SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRSA9IHtcbiAgICBERUZBVUxUOiAgICAndGV4dCcsXG4gICAgQlVGRkVSOiAgICAgJ2FycmF5YnVmZmVyJyxcbiAgICBCTE9COiAgICAgICAnYmxvYicsXG4gICAgRE9DVU1FTlQ6ICAgJ2RvY3VtZW50JyxcbiAgICBKU09OOiAgICAgICAnanNvbicsXG4gICAgVEVYVDogICAgICAgJ3RleHQnXG59O1xuXG5SZXNvdXJjZS5fbG9hZFR5cGVNYXAgPSB7XG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnYm1wJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGdhJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0Vcbn07XG5cblJlc291cmNlLl94aHJUeXBlTWFwID0ge1xuICAgIC8vIHhtbFxuICAgICd4aHRtbCc6ICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG1sJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG0nOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd4bWwnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0bXgnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0c3gnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdzdmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuXG4gICAgLy8gaW1hZ2VzXG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAncG5nJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBlZyc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnd2VicCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG5cbiAgICAvLyBqc29uXG4gICAgJ2pzb24nOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTixcblxuICAgIC8vIHRleHRcbiAgICAndGV4dCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhULFxuICAgICd0eHQnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFRcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSBsb2FkVHlwZSB7UmVzb3VyY2UuTE9BRF9UWVBFfSBUaGUgbG9hZCB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uTG9hZFR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgbG9hZFR5cGUpIHtcbiAgICBzZXRFeHRNYXAoUmVzb3VyY2UuX2xvYWRUeXBlTWFwLCBleHRuYW1lLCBsb2FkVHlwZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGxvYWQgdHlwZSB0byBiZSB1c2VkIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZXh0bmFtZSB7c3RyaW5nfSBUaGUgZXh0ZW5zaW9uIHRvIHNldCB0aGUgdHlwZSBmb3IsIGUuZy4gXCJwbmdcIiBvciBcImZudFwiXG4gKiBAcGFyYW0geGhyVHlwZSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSB4aHIgdHlwZSB0byBzZXQgaXQgdG8uXG4gKi9cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgeGhyVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5feGhyVHlwZU1hcCwgZXh0bmFtZSwgeGhyVHlwZSk7XG59O1xuXG5mdW5jdGlvbiBzZXRFeHRNYXAobWFwLCBleHRuYW1lLCB2YWwpIHtcbiAgICBpZiAoZXh0bmFtZSAmJiBleHRuYW1lLmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICBleHRuYW1lID0gZXh0bmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRuYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYXBbZXh0bmFtZV0gPSB2YWw7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIHByaXZhdGUgcHJvcGVydHlcbiAgICBfa2V5U3RyOiBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIsXG5cbiAgICBlbmNvZGVCaW5hcnk6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICAgICAgdmFyIGJ5dGVidWZmZXI7XG4gICAgICAgIHZhciBlbmNvZGVkQ2hhckluZGV4ZXMgPSBuZXcgQXJyYXkoNCk7XG4gICAgICAgIHZhciBpbnggPSAwO1xuICAgICAgICB2YXIgam54ID0gMDtcbiAgICAgICAgdmFyIHBhZGRpbmdCeXRlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmlsbCBieXRlIGJ1ZmZlciBhcnJheVxuICAgICAgICAgICAgYnl0ZWJ1ZmZlciA9IG5ldyBBcnJheSgzKTtcbiAgICAgICAgICAgIGZvciAoam54ID0gMDsgam54IDwgYnl0ZWJ1ZmZlci5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhd2F5IGhpZ2gtb3JkZXIgYnl0ZSwgYXMgZG9jdW1lbnRlZCBhdDpcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1MSHR0cFJlcXVlc3QjSGFuZGxpbmdfYmluYXJ5X2RhdGFcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gaW5wdXQuY2hhckNvZGVBdChpbngrKykgJiAweGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCBlYWNoIGVuY29kZWQgY2hhcmFjdGVyLCA2IGJpdHMgYXQgYSB0aW1lXG4gICAgICAgICAgICAvLyBpbmRleCAxOiBmaXJzdCA2IGJpdHNcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1swXSA9IGJ5dGVidWZmZXJbMF0gPj4gMjtcbiAgICAgICAgICAgIC8vIGluZGV4IDI6IHNlY29uZCA2IGJpdHMgKDIgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMSArIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAyKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzFdID0gKChieXRlYnVmZmVyWzBdICYgMHgzKSA8PCA0KSB8IChieXRlYnVmZmVyWzFdID4+IDQpO1xuICAgICAgICAgICAgLy8gaW5kZXggMzogdGhpcmQgNiBiaXRzICg0IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBpbnB1dCBieXRlIDIgKyAyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1syXSA9ICgoYnl0ZWJ1ZmZlclsxXSAmIDB4MGYpIDw8IDIpIHwgKGJ5dGVidWZmZXJbMl0gPj4gNik7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiBmb3J0aCA2IGJpdHMgKDYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IGJ5dGVidWZmZXJbMl0gJiAweDNmO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBwYWRkaW5nIGhhcHBlbmVkLCBhbmQgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBwYWRkaW5nQnl0ZXMgPSBpbnggLSAoaW5wdXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhZGRpbmdCeXRlcykge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxhc3QgMiBjaGFyYWN0ZXJzIHRvIHBhZGRpbmcgY2hhclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbM10gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCBjaGFyYWN0ZXIgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBObyBwYWRkaW5nIC0gcHJvY2VlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb3cgd2Ugd2lsbCBncmFiIGVhY2ggYXBwcm9wcmlhdGUgY2hhcmFjdGVyIG91dCBvZiBvdXIga2V5c3RyaW5nXG4gICAgICAgICAgICAvLyBiYXNlZCBvbiBvdXIgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCBpdCB0byB0aGUgb3V0cHV0IHN0cmluZ1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBlbmNvZGVkQ2hhckluZGV4ZXMubGVuZ3RoOyBqbngrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSB0aGlzLl9rZXlTdHIuY2hhckF0KGVuY29kZWRDaGFySW5kZXhlc1tqbnhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vTG9hZGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJlc291cmNlID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5taWRkbGV3YXJlID0ge1xuICAgIGNhY2hpbmc6IHtcbiAgICAgICAgbWVtb3J5OiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL2NhY2hpbmcvbWVtb3J5JylcbiAgICB9LFxuICAgIHBhcnNpbmc6IHtcbiAgICAgICAgYmxvYjogcmVxdWlyZSgnLi9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2InKVxuICAgIH1cbn07XG4iLCIvLyBhIHNpbXBsZSBpbi1tZW1vcnkgY2FjaGUgZm9yIHJlc291cmNlc1xudmFyIGNhY2hlID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgLy8gaWYgY2FjaGVkLCB0aGVuIHNldCBkYXRhIGFuZCBjb21wbGV0ZSB0aGUgcmVzb3VyY2VcbiAgICAgICAgaWYgKGNhY2hlW3Jlc291cmNlLnVybF0pIHtcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBjYWNoZVtyZXNvdXJjZS51cmxdO1xuICAgICAgICAgICAgcmVzb3VyY2UuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBub3QgY2FjaGVkLCB3YWl0IGZvciBjb21wbGV0ZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlLm9uY2UoJ2NvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgY2FjaGVbdGhpcy51cmxdID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJy4uLy4uL1Jlc291cmNlJyksXG4gICAgYjY0ID0gcmVxdWlyZSgnLi4vLi4vYjY0Jyk7XG5cbndpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cbi8vIGEgbWlkZGxld2FyZSBmb3IgdHJhbnNmb3JtaW5nIFhIUiBsb2FkZWQgQmxvYnMgaW50byBtb3JlIHVzZWZ1bCBvYmplY3RzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgYW4gWEhSIGxvYWQgb2YgYSBibG9iXG4gICAgICAgIGlmIChyZXNvdXJjZS54aHIgJiYgcmVzb3VyY2UueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQikge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYmxvYiBzdXBwb3J0IHdlIHByb2JhYmx5IGdvdCBhIGJpbmFyeSBzdHJpbmcgYmFja1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuQmxvYiB8fCB0eXBlb2YgcmVzb3VyY2UuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlc291cmNlLnhoci5nZXRSZXNwb25zZUhlYWRlcignY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGltYWdlLCBjb252ZXJ0IHRoZSBiaW5hcnkgc3RyaW5nIGludG8gYSBkYXRhIHVybFxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIHR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gJ2RhdGE6JyArIHR5cGUgKyAnO2Jhc2U2NCwnICsgYjY0LmVuY29kZUJpbmFyeShyZXNvdXJjZS54aHIucmVzcG9uc2VUZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5pc0ltYWdlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IHVudGlsIHRoZSBpbWFnZSBsb2FkcyBhbmQgdGhlbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnQgdHlwZSBzYXlzIHRoaXMgaXMgYW4gaW1hZ2UsIHRoZW4gd2Ugc2hvdWxkIHRyYW5zZm9ybSB0aGUgYmxvYiBpbnRvIGFuIEltYWdlIG9iamVjdFxuICAgICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UuZGF0YS50eXBlLmluZGV4T2YoJ2ltYWdlJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXNvdXJjZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmJsb2IgPSByZXNvdXJjZS5kYXRhO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLnNyYyA9IHNyYztcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCB0aGUgbm8gbG9uZ2VyIHVzZWQgYmxvYiBhZnRlciB0aGUgaW1hZ2UgbG9hZHNcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChzcmMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwicGl4aS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIzLjAuMTAtZGV2XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJQaXhpLmpzIGlzIGEgZmFzdCBsaWdodHdlaWdodCAyRCBsaWJyYXJ5IHRoYXQgd29ya3MgYWNyb3NzIGFsbCBkZXZpY2VzLlwiLFxuICBcImF1dGhvclwiOiBcIk1hdCBHcm92ZXNcIixcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIFwiQ2hhZCBFbmdsZXIgPGNoYWRAcGFudGhlcmRldi5jb20+XCIsXG4gICAgXCJSaWNoYXJkIERhdmV5IDxyZGF2ZXlAZ21haWwuY29tPlwiXG4gIF0sXG4gIFwibWFpblwiOiBcIi4vc3JjL2luZGV4LmpzXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ29vZGJveWRpZ2l0YWwuY29tL1wiLFxuICBcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzXCIsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJzdGFydFwiOiBcImd1bHAgJiYgZ3VscCB3YXRjaFwiLFxuICAgIFwidGVzdFwiOiBcImd1bHAgJiYgdGVzdGVtIGNpXCIsXG4gICAgXCJidWlsZFwiOiBcImd1bHBcIixcbiAgICBcImRvY3NcIjogXCJqc2RvYyAtYyAuL2d1bHAvdXRpbC9qc2RvYy5jb25mLmpzb24gLVIgUkVBRE1FLm1kXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW4vXCIsXG4gICAgXCJzcmMvXCIsXG4gICAgXCJDT05UUklCVVRJTkcubWRcIixcbiAgICBcIkxJQ0VOU0VcIixcbiAgICBcInBhY2thZ2UuanNvblwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYXN5bmNcIjogXCJeMS41LjBcIixcbiAgICBcImJyZnNcIjogXCJeMS40LjFcIixcbiAgICBcImVhcmN1dFwiOiBcIl4yLjAuN1wiLFxuICAgIFwiZXZlbnRlbWl0dGVyM1wiOiBcIl4xLjEuMVwiLFxuICAgIFwiZ2wtbWF0cml4XCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS90b2ppL2dsLW1hdHJpeC5naXRcIixcbiAgICBcIm9iamVjdC1hc3NpZ25cIjogXCJeNC4wLjFcIixcbiAgICBcInBpeGktZ2wtY29yZVwiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vR29vZEJveURpZ2l0YWwvcGl4aS1nbC1jb3JlLmdpdFwiLFxuICAgIFwicmVzb3VyY2UtbG9hZGVyXCI6IFwiXjEuNi40XCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYnJvd3NlcmlmeVwiOiBcIl4xMS4xLjBcIixcbiAgICBcImNoYWlcIjogXCJeMy4yLjBcIixcbiAgICBcImRlbFwiOiBcIl4yLjAuMlwiLFxuICAgIFwiZ3VscFwiOiBcIl4zLjkuMFwiLFxuICAgIFwiZ3VscC1jYWNoZWRcIjogXCJeMS4xLjBcIixcbiAgICBcImd1bHAtY29uY2F0XCI6IFwiXjIuNi4wXCIsXG4gICAgXCJndWxwLWRlYnVnXCI6IFwiXjIuMS4wXCIsXG4gICAgXCJndWxwLWhlYWRlclwiOiBcIl4xLjcuMVwiLFxuICAgIFwiZ3VscC1qc2hpbnRcIjogXCJeMS4xMS4yXCIsXG4gICAgXCJndWxwLW1pcnJvclwiOiBcIl4wLjQuMFwiLFxuICAgIFwiZ3VscC1wbHVtYmVyXCI6IFwiXjEuMC4xXCIsXG4gICAgXCJndWxwLXJlbmFtZVwiOiBcIl4xLjIuMlwiLFxuICAgIFwiZ3VscC1zb3VyY2VtYXBzXCI6IFwiXjEuNS4yXCIsXG4gICAgXCJndWxwLXVnbGlmeVwiOiBcIl4xLjQuMVwiLFxuICAgIFwiZ3VscC11dGlsXCI6IFwiXjMuMC42XCIsXG4gICAgXCJqYWd1YXJqcy1qc2RvY1wiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vZGF2aWRzaGltanMvamFndWFyanMtanNkb2MuZ2l0XCIsXG4gICAgXCJqc2RvY1wiOiBcIl4zLjMuMlwiLFxuICAgIFwianNoaW50LXN1bW1hcnlcIjogXCJeMC40LjBcIixcbiAgICBcIm1pbmltaXN0XCI6IFwiXjEuMi4wXCIsXG4gICAgXCJtb2NoYVwiOiBcIl4yLjMuMlwiLFxuICAgIFwicmVxdWlyZS1kaXJcIjogXCJeMC4zLjBcIixcbiAgICBcInJ1bi1zZXF1ZW5jZVwiOiBcIl4xLjEuMlwiLFxuICAgIFwidGVzdGVtXCI6IFwiXjAuOS40XCIsXG4gICAgXCJ2aW55bC1idWZmZXJcIjogXCJeMS4wLjBcIixcbiAgICBcInZpbnlsLXNvdXJjZS1zdHJlYW1cIjogXCJeMS4xLjBcIixcbiAgICBcIndhdGNoaWZ5XCI6IFwiXjMuNC4wXCJcbiAgfSxcbiAgXCJicm93c2VyaWZ5XCI6IHtcbiAgICBcInRyYW5zZm9ybVwiOiBbXG4gICAgICBcImJyZnNcIlxuICAgIF1cbiAgfVxufVxuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8vIGFkZCBzb21lIGV4dHJhIHZhcmlhYmxlcyB0byB0aGUgY29udGFpbmVyLi5cbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKVxuKTtcblxuXG4vKipcbiAqIFRoZSBBY2Nlc3NpYmlsaXR5IG1hbmFnZXIgcmVhY3JlYXRlcyB0aGUgYWJpbGl0eSB0byB0YWIgYW5kIGFuZCBoYXZlIGNvbnRlbnQgcmVhZCBieSBzY3JlZW4gcmVhZGVycy4gVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCBhcyBpdCBjYW4gcG9zc2libHkgaGVscCBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMgYWNjZXNzIHBpeGkgY29udGVudC5cbiAqIE11Y2ggbGlrZSBpbnRlcmFjdGlvbiBhbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgbWFkZSBhY2Nlc3NpYmxlLiBUaGlzIG1hbmFnZXIgd2lsbCBtYXAgdGhlIGV2ZW50cyBhcyBpZiB0aGUgbW91c2Ugd2FzIGJlaW5nIHVzZWQsIG1pbmltaXppbmcgdGhlIGVmZmVyb3QgcmVxdWlyZWQgdG8gaW1wbGVtZW50LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyXG4gKi9cbmZ1bmN0aW9uIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKHJlbmRlcmVyKVxue1xuXHQvLyBmaXJzdCB3ZSBjcmVhdGUgYSBkaXYgdGhhdCB3aWxsIHNpdCBvdmVyIHRoZSBwaXhpIGVsZW1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGRpdiBvdmVybGF5cyB3aWxsIGdvLlxuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBcbiAgICBkaXYuc3R5bGUud2lkdGggPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgZGl2LnN0eWxlLnRvcCA9IDA7XG4gICAgZGl2LnN0eWxlLmxlZnQgPSAwO1xuICAgLy9cbiAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcbiAgIFx0XG4gICBcdC8qKlxuICAgXHQgKiBUaGlzIGlzIHRoZSBkb20gZWxlbWVudCB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuICAgXHR0aGlzLmRpdiA9IGRpdjtcblxuICAgXHQvKipcbiAgIFx0ICogQSBzaW1wbGUgcG9vbCBmb3Igc3RvcmluZyBkaXZzLlxuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0FycmF5fVxuICAgXHQgKiBAcHJpdmF0ZVxuICAgXHQgKi9cbiBcdHRoaXMucG9vbCA9IFtdO1xuXG4gXHQvKipcbiBcdCAqIFRoaXMgaXMgYSB0aWNrIHVzZWQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIG5vIGxvbmdlciBiZWluZyByZW5kZXJlZC5cbiBcdCAqIFxuIFx0ICogQHR5cGUge051bWJlcn1cbiBcdCAqIEBwcml2YXRlXG4gXHQgKi9cbiAgIFx0dGhpcy5yZW5kZXJJZCA9IDA7XG5cbiAgIFx0LyoqXG4gICBcdCAqIFNldHRpbmcgdGhpcyB0byB0cnVlIHdpbGwgdmlzdWFsbHkgc2hvdyB0aGUgZGl2c1xuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0Jvb2xlYW59XG4gICBcdCAqL1xuICAgXHR0aGlzLmRlYnVnID0gZmFsc2U7XG5cbiAgXHQvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBhY2Nlc3NpYmlsaXR5IG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgIFx0dGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICBcdC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjdXJyZW50bHkgYWN0aXZlIGFjY2Vzc2libGUgaXRlbXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgXHR0aGlzLmNoaWxkcmVuID0gW107XG4gICBcdFxuICAgXHQvKipcbiAgICAgKiBwcmUgYmluZCB0aGUgZnVuY3Rpb25zLi5cbiAgICAgKi9cbiAgIFx0dGhpcy5fb25LZXlEb3duID0gdGhpcy5fb25LZXlEb3duLmJpbmQodGhpcyk7XG4gICBcdHRoaXMuX29uTW91c2VNb3ZlID0gdGhpcy5fb25Nb3VzZU1vdmUuYmluZCh0aGlzKTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHN0b3JlcyB0aGUgc3RhdGUgb2YgdGhlIG1hbmFnZXIuIElmIHRoZXJlIGFyZSBubyBhY2Nlc3NpYmxlIG9iamVjdHMgb3IgdGhlIG1vdXNlIGlzIG1vdmluZyB0aGUgd2lsbCBiZSBmYWxzZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcblxuXG4gICBcdC8vIGxldCBsaXN0ZW4gZm9yIHRhYi4uIG9uY2UgcHJlc3NlZCB3ZSBjYW4gZmlyZSB1cCBhbmQgc2hvdyB0aGUgYWNjZXNzaWJpbGl0eSBsYXllclxuICAgXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xufVxuXG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBBY2Nlc3NpYmlsaXR5TWFuYWdlcjtcblxuLyoqXG4gKiBBY3RpdmF0aW5nIHdpbGwgY2F1c2UgdGhlIEFjY2Vzc2liaWxpdHkgbGF5ZXIgdG8gYmUgc2hvd24uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIHByZXNlcyB0aGUgdGFiIGtleVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IHRydWU7XG5cblx0d2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCB0cnVlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9uKCdwb3N0cmVuZGVyJywgdGhpcy51cGRhdGUsIHRoaXMpO1xuXG5cdHRoaXMucmVuZGVyZXIudmlldy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuZGl2KTtcdFxufTtcblxuLyoqXG4gKiBEZWFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBoaWRkZW4uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIG1vdmVzIHRoZSBtb3VzZVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmRlYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKCF0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG5cblx0dGhpcy5yZW5kZXJlci5vZmYoJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSk7XG5cblx0dGhpcy5kaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmRpdik7XG5cbn07XG5cbi8qKlxuICogVGhpcyByZWN1cnNpdmUgZnVuY3Rpb24gd2lsbCBydW4gdGhyb3VnaHQgaGUgc2NlbmUgZ3JhcGggYW5kIGFkZCBhbnkgbmV3IGFjY2Vzc2libGUgb2JqZWN0cyB0byB0aGUgRE9NIGxheWVyLlxuICogQHBhcmFtIGVsZW1lbnQge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIERpc3BsYXlPYmplY3QgdG8gY2hlY2suXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlQWNjZXNzaWJsZU9iamVjdHMgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuXHRpZighZGlzcGxheU9iamVjdC52aXNpYmxlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYoZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlICYmIGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG5cdHtcblx0XHRpZighZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZUFjdGl2ZSlcblx0XHR7XG5cdFx0XHR0aGlzLmFkZENoaWxkKGRpc3BsYXlPYmplY3QpO1xuXHRcdH1cblx0ICAgXHRcblx0ICAgXHRkaXNwbGF5T2JqZWN0LnJlbmRlcklkID0gdGhpcy5yZW5kZXJJZDtcblx0fVxuXG5cdHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG5cblx0Zm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XG5cdFx0dGhpcy51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyhjaGlsZHJlbltpXSk7XG5cdH1cbn07XG5cblxuLyoqXG4gKiBCZWZvcmUgZWFjaCByZW5kZXIgdGhpcyBmdW5jdGlvbiB3aWxsIGVuc3VyZSB0aGF0IGFsbCBkaXZzIGFyZSBtYXBwZWQgY29ycmVjdGx5IHRvIHRoZWlyIERpc3BsYXlPYmplY3RzXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oKVxue1xuXG5cdC8vIHVwZGF0ZSBjaGlsZHJlbi4uLlxuXHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCk7XG5cblx0dmFyIHJlY3QgPSB0aGlzLnJlbmRlcmVyLnZpZXcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdHZhciBzeCA9IHJlY3Qud2lkdGggIC8gdGhpcy5yZW5kZXJlci53aWR0aDtcblx0dmFyIHN5ID0gcmVjdC5oZWlnaHQgLyB0aGlzLnJlbmRlcmVyLmhlaWdodDtcblxuXHR2YXIgZGl2ID0gdGhpcy5kaXY7XG5cblx0ZGl2LnN0eWxlLmxlZnQgPSByZWN0LmxlZnQgKyAncHgnO1xuXHRkaXYuc3R5bGUudG9wID0gcmVjdC50b3AgKyAncHgnO1xuXHRkaXYuc3R5bGUud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoICsgJ3B4Jztcblx0ZGl2LnN0eWxlLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0ICsgJ3B4JztcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblxuXHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cblx0XHRpZihjaGlsZC5yZW5kZXJJZCAhPT0gdGhpcy5yZW5kZXJJZClcblx0XHR7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGksIDEpO1xuXHRcdFx0dGhpcy5kaXYucmVtb3ZlQ2hpbGQoIGNoaWxkLl9hY2Nlc3NpYmxlRGl2ICk7XG5cdFx0XHR0aGlzLnBvb2wucHVzaChjaGlsZC5fYWNjZXNzaWJsZURpdik7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZURpdiA9IG51bGw7XG5cblx0XHRcdGktLTtcblxuXHRcdFx0aWYodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0Ly8gbWFwIGRpdiB0byBkaXNwbGF5Li5cblx0XHRcdGRpdiA9IGNoaWxkLl9hY2Nlc3NpYmxlRGl2O1xuXHRcdFx0dmFyIGhpdEFyZWEgPSBjaGlsZC5oaXRBcmVhO1xuXHRcdFx0dmFyIHd0ID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cblx0XHRcdGlmKGNoaWxkLmhpdEFyZWEpXG5cdFx0XHR7XG5cdFx0XHRcdGRpdi5zdHlsZS5sZWZ0ID0gKCh3dC50eCArIChoaXRBcmVhLnggKiB3dC5hKSkgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gICgod3QudHkgKyAoaGl0QXJlYS55ICogd3QuZCkpICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiB3dC5hICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLmhlaWdodCA9IChoaXRBcmVhLmhlaWdodCAqIHd0LmQgKiBzeSkgKyAncHgnO1xuXHRcdFx0XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdGhpdEFyZWEgPSBjaGlsZC5nZXRCb3VuZHMoKTtcblxuXHRcdFx0XHR0aGlzLmNhcEhpdEFyZWEoaGl0QXJlYSk7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoaGl0QXJlYS54ICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLnRvcCA9ICAoaGl0QXJlYS55ICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogc3kpICsgJ3B4Jztcblx0XHRcdH1cdFx0XG5cdFx0fVxuXHR9XG5cblx0Ly8gaW5jcmVtZW50IHRoZSByZW5kZXIgaWQuLlxuXHR0aGlzLnJlbmRlcklkKys7XG59O1xuXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuY2FwSGl0QXJlYSA9IGZ1bmN0aW9uIChoaXRBcmVhKVxue1xuICAgIGlmIChoaXRBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS53aWR0aCArPSBoaXRBcmVhLng7XG4gICAgICAgIGhpdEFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGhpdEFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCArPSBoaXRBcmVhLnk7XG4gICAgICAgIGhpdEFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBoaXRBcmVhLnggKyBoaXRBcmVhLndpZHRoID4gdGhpcy5yZW5kZXJlci53aWR0aCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoID0gdGhpcy5yZW5kZXJlci53aWR0aCAtIGhpdEFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueSArIGhpdEFyZWEuaGVpZ2h0ID4gdGhpcy5yZW5kZXJlci5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmhlaWdodCAtIGhpdEFyZWEueTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogQWRkcyBhIERpc3BsYXlPYmplY3QgdG8gdGhlIGFjY2Vzc2liaWxpdHkgbWFuYWdlclxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24oZGlzcGxheU9iamVjdClcbntcbi8vXHR0aGlzLmFjdGl2YXRlKCk7XG5cdFxuXHR2YXIgZGl2ID0gdGhpcy5wb29sLnBvcCgpO1xuXG5cdGlmKCFkaXYpXG5cdHtcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgXG5cblx0ICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG5cdCAgICBkaXYuc3R5bGUuaGVpZ2h0ID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmRlYnVnID8gJ3JnYmEoMjU1LDAsMCwwLjUpJyA6ICd0cmFuc3BhcmVudCc7XG5cdCAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXHQgICAgZGl2LnN0eWxlLnpJbmRleCA9IDI7XG5cdCAgICBkaXYuc3R5bGUuYm9yZGVyU3R5bGUgPSAnbm9uZSc7XG5cblx0ICAgIFxuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGljay5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKSk7XG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCB0aGlzLl9vbkZvY3VzT3V0LmJpbmQodGhpcykpO1xuXHR9XG5cdCAgIFx0XG5cblxuXG5cdGRpdi50aXRsZSA9IGRpc3BsYXlPYmplY3QuYWNjZXNzaWJsZVRpdGxlIHx8ICdkaXNwbGF5T2JqZWN0ICcgKyB0aGlzLnRhYkluZGV4O1xuXG5cdC8vXG5cdFxuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlID0gdHJ1ZTtcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiA9IGRpdjtcblx0ZGl2LmRpc3BsYXlPYmplY3QgPSBkaXNwbGF5T2JqZWN0O1xuXG5cblx0dGhpcy5jaGlsZHJlbi5wdXNoKGRpc3BsYXlPYmplY3QpO1xuXHR0aGlzLmRpdi5hcHBlbmRDaGlsZCggZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiApO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2LnRhYkluZGV4ID0gZGlzcGxheU9iamVjdC50YWJJbmRleDtcbn07XG5cblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgYnV0dG9uIHByZXNzIHRvIHBpeGkncyBJbnRlcmFjdGlvbk1hbmFnZXIgKGNsaWNrKVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkNsaWNrID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ2NsaWNrJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW92ZXIpXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uRm9jdXMgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW91dClcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1c091dCA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIGtleSBpcyBwcmVzc2VkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbktleURvd24gPSBmdW5jdGlvbihlKVxue1xuXHRpZihlLmtleUNvZGUgIT09IDkpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmFjdGl2YXRlKCk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uTW91c2VNb3ZlID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmRlYWN0aXZhdGUoKTtcbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKlxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIFxue1xuXHR0aGlzLmRpdiA9IG51bGw7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHR7XG5cdFx0dGhpcy5jaGlsZHJlbltpXS5kaXYgPSBudWxsO1xuXHR9XG5cblx0XG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duKTtcblx0XHRcblx0dGhpcy5wb29sID0gbnVsbDtcblx0dGhpcy5jaGlsZHJlbiA9IG51bGw7XG5cdHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdhY2Nlc3NpYmlsaXR5JywgQWNjZXNzaWJpbGl0eU1hbmFnZXIpO1xuXG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGFjY2Vzc2libGUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlNYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5hY2Nlc3NpYmlsaXR5LmFjY2Vzc2libGVUYXJnZXRcbiAqICAgICAgKTtcbiAqL1xudmFyIGFjY2Vzc2libGVUYXJnZXQgPSB7XG4gICAgXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlOmZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlVGl0bGU6bnVsbCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgdGFiSW5kZXg6MCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVBY3RpdmU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIF9hY2Nlc3NpYmxlRGl2OmZhbHNlXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYWNjZXNzaWJsZVRhcmdldDtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGFjY2Vzc2liaWxpdHkgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGFjY2Vzc2libGVUYXJnZXQ6ICAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKSxcbiAgICBBY2Nlc3NpYmlsaXR5TWFuYWdlcjogcmVxdWlyZSgnLi9BY2Nlc3NpYmlsaXR5TWFuYWdlcicpXG59O1xuIiwiLyoqXG4gKiBDb25zdGFudCB2YWx1ZXMgdXNlZCBpbiBwaXhpXG4gKlxuICogQGxlbmRzIFBJWElcbiAqL1xudmFyIENPTlNUID0ge1xuICAgIC8qKlxuICAgICAqIFN0cmluZyBvZiB0aGUgY3VycmVudCBQSVhJIHZlcnNpb25cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gVkVSU0lPTlxuICAgICAqL1xuICAgIFZFUlNJT046IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb24sXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUElfMiAtIFR3byBQaVxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBQSV8yOiBNYXRoLlBJICogMixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSQURfVE9fREVHIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgcmFkaWFucyB0byBkZWdyZWVzXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFJBRF9UT19ERUc6IDE4MCAvIE1hdGguUEksXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge051bWJlcn0gREVHX1RPX1JBRCAtIENvbnN0YW50IGNvbnZlcnNpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIGRlZ3JlZXMgdG8gcmFkaWFuc1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBERUdfVE9fUkFEOiBNYXRoLlBJIC8gMTgwLFxuXG4gICAgLyoqXG4gICAgICogVGFyZ2V0IGZyYW1lcyBwZXIgbWlsbGlzZWNvbmQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFRBUkdFVF9GUE1TPTAuMDZcbiAgICAgKi9cbiAgICBUQVJHRVRfRlBNUzogMC4wNixcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IHRvIGlkZW50aWZ5IHRoZSBSZW5kZXJlciBUeXBlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBSRU5ERVJFUl9UWVBFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuVU5LTk9XTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLldFQkdMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuQ0FOVkFTXG4gICAgICovXG4gICAgUkVOREVSRVJfVFlQRToge1xuICAgICAgICBVTktOT1dOOiAgICAwLFxuICAgICAgICBXRUJHTDogICAgICAxLFxuICAgICAgICBDQU5WQVM6ICAgICAyXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFZhcmlvdXMgYmxlbmQgbW9kZXMgc3VwcG9ydGVkIGJ5IFBJWEkuIElNUE9SVEFOVCAtIFRoZSBXZWJHTCByZW5kZXJlciBvbmx5IHN1cHBvcnRzXG4gICAgICogdGhlIE5PUk1BTCwgQURELCBNVUxUSVBMWSBhbmQgU0NSRUVOIGJsZW5kIG1vZGVzLiBBbnl0aGluZyBlbHNlIHdpbGwgc2lsZW50bHkgYWN0IGxpa2VcbiAgICAgKiBOT1JNQUwuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IEJMRU5EX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5BRERcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTVVMVElQTFlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0NSRUVOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk9WRVJMQVlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuREFSS0VOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkxJR0hURU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfQlVSTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IQVJEX0xJR0hUXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNPRlRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuRElGRkVSRU5DRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5FWENMVVNJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuSFVFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNBVFVSQVRJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTFVNSU5PU0lUWVxuICAgICAqL1xuICAgIEJMRU5EX01PREVTOiB7XG4gICAgICAgIE5PUk1BTDogICAgICAgICAwLFxuICAgICAgICBBREQ6ICAgICAgICAgICAgMSxcbiAgICAgICAgTVVMVElQTFk6ICAgICAgIDIsXG4gICAgICAgIFNDUkVFTjogICAgICAgICAzLFxuICAgICAgICBPVkVSTEFZOiAgICAgICAgNCxcbiAgICAgICAgREFSS0VOOiAgICAgICAgIDUsXG4gICAgICAgIExJR0hURU46ICAgICAgICA2LFxuICAgICAgICBDT0xPUl9ET0RHRTogICAgNyxcbiAgICAgICAgQ09MT1JfQlVSTjogICAgIDgsXG4gICAgICAgIEhBUkRfTElHSFQ6ICAgICA5LFxuICAgICAgICBTT0ZUX0xJR0hUOiAgICAgMTAsXG4gICAgICAgIERJRkZFUkVOQ0U6ICAgICAxMSxcbiAgICAgICAgRVhDTFVTSU9OOiAgICAgIDEyLFxuICAgICAgICBIVUU6ICAgICAgICAgICAgMTMsXG4gICAgICAgIFNBVFVSQVRJT046ICAgICAxNCxcbiAgICAgICAgQ09MT1I6ICAgICAgICAgIDE1LFxuICAgICAgICBMVU1JTk9TSVRZOiAgICAgMTZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyB3ZWJnbCBkcmF3IG1vZGVzLiBUaGVzZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIEdMIGRyYXdNb2RlIHRvIHVzZVxuICAgICAqIHVuZGVyIGNlcnRhaW4gc2l0dWF0aW9ucyBhbmQgcmVuZGVyZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBEUkFXX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuUE9JTlRTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX0xPT1BcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX1NUUklQXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9GQU5cbiAgICAgKi9cbiAgICBEUkFXX01PREVTOiB7XG4gICAgICAgIFBPSU5UUzogICAgICAgICAwLFxuICAgICAgICBMSU5FUzogICAgICAgICAgMSxcbiAgICAgICAgTElORV9MT09QOiAgICAgIDIsXG4gICAgICAgIExJTkVfU1RSSVA6ICAgICAzLFxuICAgICAgICBUUklBTkdMRVM6ICAgICAgNCxcbiAgICAgICAgVFJJQU5HTEVfU1RSSVA6IDUsXG4gICAgICAgIFRSSUFOR0xFX0ZBTjogICA2XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgcGl4aS5cbiAgICAgKlxuICAgICAqIFRoZSBERUZBVUxUIHNjYWxlIG1vZGUgYWZmZWN0cyB0aGUgZGVmYXVsdCBzY2FsaW5nIG1vZGUgb2YgZnV0dXJlIG9wZXJhdGlvbnMuXG4gICAgICogSXQgY2FuIGJlIHJlLWFzc2lnbmVkIHRvIGVpdGhlciBMSU5FQVIgb3IgTkVBUkVTVCwgZGVwZW5kaW5nIHVwb24gc3VpdGFiaWxpdHkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNDQUxFX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkRFRkFVTFQ9TElORUFSXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkxJTkVBUiBTbW9vdGggc2NhbGluZ1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5ORUFSRVNUIFBpeGVsYXRpbmcgc2NhbGluZ1xuICAgICAqL1xuICAgIFNDQUxFX01PREVTOiB7XG4gICAgICAgIERFRkFVTFQ6ICAgIDAsXG4gICAgICAgIExJTkVBUjogICAgIDAsXG4gICAgICAgIE5FQVJFU1Q6ICAgIDFcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHByZWZpeCB0aGF0IGRlbm90ZXMgYSBVUkwgaXMgZm9yIGEgcmV0aW5hIGFzc2V0XG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFJFVElOQV9QUkVGSVhcbiAgICAgKi9cbiAgICAvL2V4YW1wbGU6ICdAMngnLFxuICAgIFJFVElOQV9QUkVGSVg6IC9AKC4rKXgvLFxuXG4gICAgUkVTT0xVVElPTjoxLFxuXG4gICAgRklMVEVSX1JFU09MVVRJT046MSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHJlbmRlciBvcHRpb25zIGlmIG5vbmUgYXJlIHN1cHBsaWVkIHRvIHtAbGluayBQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICogb3Ige0BsaW5rIFBJWEkuQ2FudmFzUmVuZGVyZXJ9LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TXG4gICAgICogQHByb3BlcnR5IHtIVE1MQ2FudmFzRWxlbWVudH0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy52aWV3PW51bGxcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMudHJhbnNwYXJlbnQ9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuYW50aWFsaWFzPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmZvcmNlRlhBQT1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5yZXNvbHV0aW9uPTFcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hdXRvUmVzaXplPWZhbHNlXG4gICAgICovXG4gICAgREVGQVVMVF9SRU5ERVJfT1BUSU9OUzoge1xuICAgICAgICB2aWV3OiBudWxsLFxuICAgICAgICByZXNvbHV0aW9uOiAxLFxuICAgICAgICBhbnRpYWxpYXM6IGZhbHNlLFxuICAgICAgICBmb3JjZUZYQUE6IGZhbHNlLFxuICAgICAgICBhdXRvUmVzaXplOiBmYWxzZSxcbiAgICAgICAgdHJhbnNwYXJlbnQ6IGZhbHNlLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IDB4MDAwMDAwLFxuICAgICAgICBjbGVhckJlZm9yZVJlbmRlcjogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBmYWxzZSxcbiAgICAgICAgcm91bmRQaXhlbHM6IGZhbHNlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50cyB0aGF0IGlkZW50aWZ5IHNoYXBlcywgbWFpbmx5IHRvIHByZXZlbnQgYGluc3RhbmNlb2ZgIGNhbGxzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVNcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlBPTFk9MFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUkVDVD0xXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5DSVJDPTJcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkVMSVA9M1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUlJFQz00XG4gICAgICovXG4gICAgU0hBUEVTOiB7XG4gICAgICAgIFBPTFk6IDAsXG4gICAgICAgIFJFQ1Q6IDEsXG4gICAgICAgIENJUkM6IDIsXG4gICAgICAgIEVMSVA6IDMsXG4gICAgICAgIFJSRUM6IDRcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogbWF5YmUgY2hhbmdlIHRvIFNQUklURS5CQVRDSF9TSVpFOiAyMDAwXG4gICAgLy8gVE9ETzogbWF5YmUgYWRkIFBBUlRJQ0xFLkJBVENIX1NJWkU6IDE1MDAwXG4gICAgU1BSSVRFX0JBVENIX1NJWkU6IDIwMDAgLy9uaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgYW5kIGRlc2t0b3AgbWFjaGluZXNcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ09OU1Q7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgRGlzcGxheU9iamVjdCA9IHJlcXVpcmUoJy4vRGlzcGxheU9iamVjdCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIENvbnRhaW5lciByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBkaXNwbGF5IG9iamVjdHMuXG4gKiBJdCBpcyB0aGUgYmFzZSBjbGFzcyBvZiBhbGwgZGlzcGxheSBvYmplY3RzIHRoYXQgYWN0IGFzIGEgY29udGFpbmVyIGZvciBvdGhlciBvYmplY3RzLlxuICpcbiAqYGBganNcbiAqIHZhciBjb250YWluZXIgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogYGBgXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuRGlzcGxheU9iamVjdFxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ29udGFpbmVyKClcbntcbiAgICBEaXNwbGF5T2JqZWN0LmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3RbXX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5Db250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSk7XG5Db250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb250YWluZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnRhaW5lci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG5cbiAgICAgICAgICAgIGlmICh3aWR0aCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IDE7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmIChoZWlnaHQgIT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyBoZWlnaHQgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogT3ZlcnJpZGFibGUgbWV0aG9kIHRoYXQgY2FuIGJlIHVzZWQgYnkgQ29udGFpbmVyIHN1YmNsYXNzZXMgd2hlbmV2ZXIgdGhlIGNoaWxkcmVuIGFycmF5IGlzIG1vZGlmaWVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5vbkNoaWxkcmVuQ2hhbmdlID0gZnVuY3Rpb24gKCkge307XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIuXG4gKiBcbiAqIFlvdSBjYW4gYWxzbyBhZGQgbXVsdHBsZSBpdGVtcyBsaWtlIHNvOiBteUNvbnRhaW5lci5hZGRDaGlsZCh0aGlua09uZSwgdGhpbmdUd28sIHRoaW5nVGhyZWUpXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gYWRkIHRvIHRoZSBjb250YWluZXJcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxueyBcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IHdlIGNhbiBieXBhc3MgbG9vcGluZyB0aHJvdWdoIHRoZSB0aGVtXG4gICAgaWYoYXJndW1lbnRzTGVuZ3RoID4gMSlcbiAgICB7XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgYXJndW1lbnRzIHByb3BlcnR5IGFuZCBhZGQgYWxsIGNoaWxkcmVuXG4gICAgICAgIC8vIHVzZSBpdCB0aGUgcmlnaHQgd2F5ICgubGVuZ3RoIGFuZCBbaV0pIHNvIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc3RpbGwgYmUgb3B0aW1pc2VkIGJ5IEpTIHJ1bnRpbWVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoIGFyZ3VtZW50c1tpXSApO1xuICAgICAgICB9XG4gICAgfSAgICAgXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIGNoaWxkIGhhcyBhIHBhcmVudCB0aGVuIGxldHMgcmVtb3ZlIGl0IGFzIFBpeGkgb2JqZWN0cyBjYW4gb25seSBleGlzdCBpbiBvbmUgcGxhY2VcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKHRoaXMuY2hpbGRyZW4ubGVuZ3RoLTEpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIgYXQgYSBzcGVjaWZpZWQgaW5kZXguIElmIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0byBhZGRcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gcGxhY2UgdGhlIGNoaWxkIGluXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyBhZGRlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5hZGRDaGlsZEF0ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuXG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNoaWxkICsgJ2FkZENoaWxkQXQ6IFRoZSBpbmRleCAnKyBpbmRleCArJyBzdXBwbGllZCBpcyBvdXQgb2YgYm91bmRzICcgKyB0aGlzLmNoaWxkcmVuLmxlbmd0aCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBTd2FwcyB0aGUgcG9zaXRpb24gb2YgMiBEaXNwbGF5IE9iamVjdHMgd2l0aGluIHRoaXMgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGNoaWxkMiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnN3YXBDaGlsZHJlbiA9IGZ1bmN0aW9uIChjaGlsZCwgY2hpbGQyKVxue1xuICAgIGlmIChjaGlsZCA9PT0gY2hpbGQyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbmRleDEgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuICAgIHZhciBpbmRleDIgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQyKTtcblxuICAgIGlmIChpbmRleDEgPCAwIHx8IGluZGV4MiA8IDApXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N3YXBDaGlsZHJlbjogQm90aCB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdHMgbXVzdCBiZSBjaGlsZHJlbiBvZiB0aGUgY2FsbGVyLicpO1xuICAgIH1cblxuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgxXSA9IGNoaWxkMjtcbiAgICB0aGlzLmNoaWxkcmVuW2luZGV4Ml0gPSBjaGlsZDtcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgxIDwgaW5kZXgyID8gaW5kZXgxIDogaW5kZXgyKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW5kZXggcG9zaXRpb24gb2YgYSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIHRvIGlkZW50aWZ5XG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3QgdG8gaWRlbnRpZnlcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBtdXN0IGJlIGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgcG9zaXRpb24gb2YgYW4gZXhpc3RpbmcgY2hpbGQgaW4gdGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgRGlzcGxheU9iamVjdCBpbnN0YW5jZSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBpbmRleCBudW1iZXJcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgcmVzdWx0aW5nIGluZGV4IG51bWJlciBmb3IgdGhlIGNoaWxkIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc2V0Q2hpbGRJbmRleCA9IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN1cHBsaWVkIGluZGV4IGlzIG91dCBvZiBib3VuZHMnKTtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudEluZGV4ID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkKTtcblxuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGN1cnJlbnRJbmRleCwgMSk7IC8vIHJlbW92ZSBmcm9tIG9sZCBwb3NpdGlvblxuICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7IC8vYWRkIGF0IG5ldyBwb3NpdGlvblxuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNoaWxkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhcbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgYXRcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIGF0IHRoZSBnaXZlbiBpbmRleCwgaWYgYW55LlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkQXQgPSBmdW5jdGlvbiAoaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0Q2hpbGRBdDogU3VwcGxpZWQgaW5kZXggJyArIGluZGV4ICsgJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY2hpbGQgbGlzdCwgb3IgdGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3QgaXMgbm90IGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2luZGV4XTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVtb3ZlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyByZW1vdmVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuXG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYSBjaGlsZCBmcm9tIHRoZSBzcGVjaWZpZWQgaW5kZXggcG9zaXRpb24uXG4gKlxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBnZXQgdGhlIGNoaWxkIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICB2YXIgY2hpbGQgPSB0aGlzLmdldENoaWxkQXQoaW5kZXgpO1xuXG4gICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpbmRleCwgMSk7XG5cbiAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICBjaGlsZC5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGNoaWxkcmVuIGZyb20gdGhpcyBjb250YWluZXIgdGhhdCBhcmUgd2l0aGluIHRoZSBiZWdpbiBhbmQgZW5kIGluZGV4ZXMuXG4gKlxuICogQHBhcmFtIGJlZ2luSW5kZXgge251bWJlcn0gVGhlIGJlZ2lubmluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyAwLlxuICogQHBhcmFtIGVuZEluZGV4IHtudW1iZXJ9IFRoZSBlbmRpbmcgcG9zaXRpb24uIERlZmF1bHQgdmFsdWUgaXMgc2l6ZSBvZiB0aGUgY29udGFpbmVyLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkcmVuID0gZnVuY3Rpb24gKGJlZ2luSW5kZXgsIGVuZEluZGV4KVxue1xuICAgIHZhciBiZWdpbiA9IGJlZ2luSW5kZXggfHwgMDtcbiAgICB2YXIgZW5kID0gdHlwZW9mIGVuZEluZGV4ID09PSAnbnVtYmVyJyA/IGVuZEluZGV4IDogdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgdmFyIHJhbmdlID0gZW5kIC0gYmVnaW47XG4gICAgdmFyIHJlbW92ZWQsIGk7XG5cbiAgICBpZiAocmFuZ2UgPiAwICYmIHJhbmdlIDw9IGVuZClcbiAgICB7XG4gICAgICAgIHJlbW92ZWQgPSB0aGlzLmNoaWxkcmVuLnNwbGljZShiZWdpbiwgcmFuZ2UpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW1vdmVkW2ldLnBhcmVudCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoYmVnaW5JbmRleCk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0uZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbW92ZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJhbmdlID09PSAwICYmIHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigncmVtb3ZlQ2hpbGRyZW46IG51bWVyaWMgdmFsdWVzIGFyZSBvdXRzaWRlIHRoZSBhY2NlcHRhYmxlIHJhbmdlLicpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb24gYWxsIGNoaWxkcmVuIG9mIHRoaXMgY29udGFpbmVyIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0gPSBDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgQ29udGFpbmVyIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIGFsbCB2aXNpYmxlIGNoaWxkcmVuIGludG8gY29uc2lkZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE8gdGhlIGJvdW5kcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHRoaXMgcmVuZGVyIHNlc3Npb24gc28gcmV0dXJuIHdoYXQgd2UgaGF2ZVxuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBjaGlsZEJvdW5kcztcbiAgICAgICAgdmFyIGNoaWxkTWF4WDtcbiAgICAgICAgdmFyIGNoaWxkTWF4WTtcblxuICAgICAgICB2YXIgY2hpbGRWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZFZpc2libGUgPSB0cnVlO1xuXG4gICAgICAgICAgICBjaGlsZEJvdW5kcyA9IHRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIG1pblggPSBtaW5YIDwgY2hpbGRCb3VuZHMueCA/IG1pblggOiBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgbWluWSA9IG1pblkgPCBjaGlsZEJvdW5kcy55ID8gbWluWSA6IGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIGNoaWxkTWF4WCA9IGNoaWxkQm91bmRzLndpZHRoICsgY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIGNoaWxkTWF4WSA9IGNoaWxkQm91bmRzLmhlaWdodCArIGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIG1heFggPSBtYXhYID4gY2hpbGRNYXhYID8gbWF4WCA6IGNoaWxkTWF4WDtcbiAgICAgICAgICAgIG1heFkgPSBtYXhZID4gY2hpbGRNYXhZID8gbWF4WSA6IGNoaWxkTWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGRWaXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG5Db250YWluZXIucHJvdG90eXBlLmNvbnRhaW5lckdldEJvdW5kcyA9IENvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbm9uLWdsb2JhbCBsb2NhbCBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS5cbiAqIFRoZSBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXhDYWNoZSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0aC5NYXRyaXguSURFTlRJVFk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0cml4Q2FjaGU7XG5cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyggbWF0aC5NYXRyaXguSURFTlRJVFkgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcblxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGksIGo7XG5cbiAgICAvLyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgbWFzayBvciBhIGZpbHRlci5cbiAgICBpZiAodGhpcy5fbWFzayB8fCB0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgLy8gcHVzaCBmaWx0ZXIgZmlyc3QgYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIGNvcnJlY3QgZm9yIGFueSBtYXNraW5nXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzICYmIHRoaXMuX2ZpbHRlcnMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGhpcywgdGhpcy5fZmlsdGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcblxuICAgICAgICAvLyBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIGJhdGNoLCBvbmx5IHJlbmRlcmVkIGlmIGl0IGhhcyBhIHRleHR1cmUuXG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgbWFrZSBzdXJlIHRoZXkgZ2V0IHJlbmRlcmVkXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJXZWJHTChyZW5kZXJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayh0aGlzLCB0aGlzLl9tYXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBzaW1wbGUgcmVuZGVyIGNoaWxkcmVuIVxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gdGhpcyBpcyB3aGVyZSBjb250ZW50IGl0c2VsZiBnZXRzIHJlbmRlcmVkLi4uXG59O1xuXG4vKipcbiAqIFRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzXG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy5hbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hc2spXG4gICAge1xuICAgICAgICByZW5kZXJlci5tYXNrTWFuYWdlci5wdXNoTWFzayh0aGlzLl9tYXNrLCByZW5kZXJlcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayhyZW5kZXJlcik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUNoaWxkcmVuKVxue1xuICAgIERpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGlmIChkZXN0cm95Q2hpbGRyZW4pXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLmRlc3Ryb3koZGVzdHJveUNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xufTtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBUcmFuc2Zvcm0gPSByZXF1aXJlKCcuL1RyYW5zZm9ybVN0YXRpYycpLFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB3b3JsZEFscGhhOjEsIGNoaWxkcmVuOltdfTtcblxuXG4vKipcbiAqIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCBvbiB0aGUgc2NyZWVuLlxuICogVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIG9uIGl0cyBvd24gcmF0aGVyIGl0IHNob3VsZCBiZSBleHRlbmRlZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIEV2ZW50RW1pdHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gRGlzcGxheU9iamVjdCgpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb29yZGluYXRlIG9mIHRoZSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLnRyYW5zZm9ybS5wb3NpdGlvbjtcbiAgIC8vIHRoaXMuX3Bvc2l0aW9uID0gbmV3IENhY2hlUG9pbnQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHBpdm90IHBvaW50IG9mIHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgaXQgcm90YXRlcyBhcm91bmRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5waXZvdCA9IHRoaXMudHJhbnNmb3JtLnBpdm90XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBza2V3IGZhY3RvciBmb3IgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNrZXcgPSB0aGlzLnRyYW5zZm9ybS5za2V3XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3JvdGF0aW9uID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcGFjaXR5IG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgb2JqZWN0LiBJZiBmYWxzZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGRyYXduLCBhbmRcbiAgICAgKiB0aGUgdXBkYXRlVHJhbnNmb3JtIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENhbiB0aGlzIG9iamVjdCBiZSByZW5kZXJlZCwgaWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biBidXQgdGhlIHVwZGF0ZVRyYW5zZm9ybVxuICAgICAqIG1ldGhvZHMgd2lsbCBzdGlsbCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyIHRoYXQgY29udGFpbnMgdGhpcyBkaXNwbGF5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ29udGFpbmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtdWx0aXBsaWVkIGFscGhhIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgdHJhbnNmb3JtIG9mIHRoZSBvYmplY3QgYmFzZWQgb24gd29ybGQgKHBhcmVudCkgZmFjdG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS5sb2NhbFRyYW5zZm9ybTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcmVhIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0by4gVGhpcyBpcyB1c2VkIGFzIG1vcmUgb2YgYW4gb3B0aW1pc2F0aW9uXG4gICAgICogcmF0aGVyIHRoYW4gZmlndXJpbmcgb3V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGVhY2ggZnJhbWUgeW91IGNhbiBzZXQgdGhpcyByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW9zdCB1cC10by1kYXRlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgbWFzayBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gIC8vICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxheU9iamVjdDtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNjYWxlWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcm90YXRpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uZGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX2NyID0gTWF0aC5jb3ModmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBzcHJpdGUgaXMgZ2xvYmFsbHkgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB3b3JsZFZpc2libGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udmlzaWJsZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICB9IHdoaWxlIChpdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIG1hc2sgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LiBBIG1hc2sgaXMgYW4gb2JqZWN0IHRoYXQgbGltaXRzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIG9iamVjdCB0byB0aGUgc2hhcGUgb2YgdGhlIG1hc2sgYXBwbGllZCB0byBpdC5cbiAgICAgKiBJbiBQSVhJIGEgcmVndWxhciBtYXNrIG11c3QgYmUgYSBQSVhJLkdyYXBoaWNzIG9yIGEgUElYSS5TcHJpdGUgb2JqZWN0LiBUaGlzIGFsbG93cyBmb3IgbXVjaCBmYXN0ZXIgbWFza2luZyBpbiBjYW52YXMgYXMgaXQgdXRpbGlzZXMgc2hhcGUgY2xpcHBpbmcuXG4gICAgICogVG8gcmVtb3ZlIGEgbWFzaywgc2V0IHRoaXMgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3N8UElYSS5TcHJpdGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBtYXNrOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrLnJlbmRlcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXNrID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LlxuICAgICAqICogSU1QT1JUQU5UOiBUaGlzIGlzIGEgd2ViR0wgb25seSBmZWF0dXJlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlci5cbiAgICAgKiBUbyByZW1vdmUgZmlsdGVycyBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ251bGwnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkFic3RyYWN0RmlsdGVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMgJiYgdGhpcy5fZmlsdGVycy5zbGljZSgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlICYmIHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogVE9ETyAtIE9wdGltaXphdGlvbiBwYXNzIVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vaWYodGhpcy50cmFuc2Zvcm0uZGlydHkgfHwgcGFyZW50LnRyYW5zZm9ybS5kaXJ0eSlcbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICAvLyBtdWx0aXBseSB0aGUgYWxwaGFzLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gPSBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICpcbiAqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH1cbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyhtYXRoLk1hdHJpeC5JREVOVElUWSk7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9HbG9iYWwgPSBmdW5jdGlvbiAocG9zaXRpb24pXG57XG4gICAgLy8gdGhpcyBwYXJlbnQgY2hlY2sgaXMgZm9yIGp1c3QgaW4gY2FzZSB0aGUgaXRlbSBpcyBhIHJvb3Qgb2JqZWN0LlxuICAgIC8vIElmIGl0IGlzIHdlIG5lZWQgdG8gZ2l2ZSBpdCBhIHRlbXBvcmFyeSBwYXJlbnQgc28gdGhhdCBkaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtIHdvcmtzIGNvcnJlY3RseVxuICAgIC8vIHRoaXMgaXMgbWFpbmx5IHRvIGF2b2lkIGEgcGFyZW50IGNoZWNrIGluIHRoZSBtYWluIGxvb3AuIEV2ZXJ5IGxpdHRsZSBoZWxwcyBmb3IgcGVyZm9ybWFuY2UgOilcbiAgICBpZighdGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLnBhcmVudCA9IF90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIGxvdFxuICAgIHJldHVybiB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5KHBvc2l0aW9uKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgbG9jYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHJlbGF0aXZlIHRvIGFub3RoZXIgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEBwYXJhbSBbZnJvbV0ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gY2FsY3VsYXRlIHRoZSBnbG9iYWwgcG9zaXRpb24gZnJvbVxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBQb2ludClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9Mb2NhbCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgZnJvbSwgcG9pbnQpXG57XG4gICAgaWYgKGZyb20pXG4gICAge1xuICAgICAgICBwb3NpdGlvbiA9IGZyb20udG9HbG9iYWwocG9zaXRpb24pO1xuICAgIH1cblxuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIHNpbXBseSBhcHBseSB0aGUgbWF0cml4Li5cbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9zaXRpb24sIHBvaW50KTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyBPVkVSV1JJVEU7XG59O1xuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBwYXJlbnQgQ29udGFpbmVyIG9mIHRoaXMgRGlzcGxheU9iamVjdFxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge0NvbnRhaW5lcn0gVGhlIENvbnRhaW5lciB0byBhZGQgdGhpcyBEaXNwbGF5T2JqZWN0IHRvXG4gKiBAcmV0dXJuIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdGhhdCB0aGlzIERpc3BsYXlPYmplY3Qgd2FzIGFkZGVkIHRvXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFBhcmVudCA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWNvbnRhaW5lci5hZGRDaGlsZClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0UGFyZW50OiBBcmd1bWVudCBtdXN0IGJlIGEgQ29udGFpbmVyJyk7XG4gICAgfVxuXG4gICAgY29udGFpbmVyLmFkZENoaWxkKHRoaXMpO1xuICAgIHJldHVybiBjb250YWluZXI7XG59O1xuXG4vKipcbiAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHNldCB0aGUgcG9zdGlvbiwgc2NhbGUsIHNrZXcgYW5kIHBpdm90IGF0IG9uY2UuXG4gKlxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IFRoZSBYIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gVGhlIFkgcG9zaXRpb25cbiAqIEBwYXJhbSBbc2NhbGVYPTFdIHtudW1iZXJ9IFRoZSBYIHNjYWxlIHZhbHVlXG4gKiBAcGFyYW0gW3NjYWxlWT0xXSB7bnVtYmVyfSBUaGUgWSBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtyb3RhdGlvbj0wXSB7bnVtYmVyfSBUaGUgcm90YXRpb25cbiAqIEBwYXJhbSBbc2tld1g9MF0ge251bWJlcn0gVGhlIFggc2tldyB2YWx1ZVxuICogQHBhcmFtIFtza2V3WT0wXSB7bnVtYmVyfSBUaGUgWSBza2V3IHZhbHVlXG4gKiBAcGFyYW0gW3Bpdm90WD0wXSB7bnVtYmVyfSBUaGUgWCBwaXZvdCB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFk9MF0ge251bWJlcn0gVGhlIFkgcGl2b3QgdmFsdWVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24oeCwgeSwgc2NhbGVYLCBzY2FsZVksIHJvdGF0aW9uLCBza2V3WCwgc2tld1ksIHBpdm90WCwgcGl2b3RZKSAvL2pzaGludCBpZ25vcmU6bGluZVxue1xuICAgIHRoaXMucG9zaXRpb24ueCA9IHggfHwgMDtcbiAgICB0aGlzLnBvc2l0aW9uLnkgPSB5IHx8IDA7XG4gICAgdGhpcy5zY2FsZS54ID0gIXNjYWxlWCA/IDEgOiBzY2FsZVg7XG4gICAgdGhpcy5zY2FsZS55ID0gIXNjYWxlWSA/IDEgOiBzY2FsZVk7XG4gICAgdGhpcy5yb3RhdGlvbiA9IHJvdGF0aW9uIHx8IDA7XG4gICAgdGhpcy5za2V3LnggPSBza2V3WCB8fCAwO1xuICAgIHRoaXMuc2tldy55ID0gc2tld1kgfHwgMDtcbiAgICB0aGlzLnBpdm90LnggPSBwaXZvdFggfHwgMDtcbiAgICB0aGlzLnBpdm90LnkgPSBwaXZvdFkgfHwgMDtcbiAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQmFzZSBkZXN0cm95IG1ldGhvZCBmb3IgZ2VuZXJpYyBkaXNwbGF5IG9iamVjdHNcbiAqXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdGhpcy5wb3NpdGlvbiA9IG51bGw7XG4gICAgdGhpcy5zY2FsZSA9IG51bGw7XG4gICAgdGhpcy5waXZvdCA9IG51bGw7XG4gICAgdGhpcy5za2V3ID0gbnVsbDtcblxuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIHRoaXMuX2JvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fbWFzayA9IG51bGw7XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xufTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIE9ic2VydmFibGVQb2ludCh0cmFuc2Zvcm0sIHgsIHkpXG57XG4gICAgdGhpcy5feCA9IHggfHwgMDtcbiAgICB0aGlzLl95ID0geSB8fCAwO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG59XG5cbk9ic2VydmFibGVQb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYnNlcnZhYmxlUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IE9ic2VydmFibGVQb2ludDtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE9ic2VydmFibGVQb2ludC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3Qgb24gdGhlIHggYXhpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIHg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5feDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3ggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3k7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl95ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5PYnNlcnZhYmxlUG9pbnQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuX3ggPSB4IHx8IDA7XG4gICAgdGhpcy5feSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLl94IDogMCApO1xuICAgIFxuICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcbnZhciBPYnNlcnZhYmxlUG9pbnQgPSByZXF1aXJlKCcuL09ic2VydmFibGVQb2ludCcpO1xuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLCAwKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLDEsIDEpO1xuICAgIHRoaXMucGl2b3QgPSBuZXcgT2JzZXJ2YWJsZVBvaW50KHRoaXMsIDAsIDApO1xuICAgIHRoaXMuc2tldyA9IG5ldyBPYnNlcnZhYmxlUG9pbnQodGhpcywgMCwwKTtcbiAgICBcbiAgICB0aGlzLnJvdGF0aW9uID0gMDtcbiAgICB0aGlzLl9zciA9IE1hdGguc2luKDApO1xuICAgIHRoaXMuX2NyID0gTWF0aC5jb3MoMCk7XG4gICAgXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cblxuICAgIHRoaXMudXBkYXRlZCA9IHRydWU7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUcmFuc2Zvcm07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKHBhcmVudFRyYW5zZm9ybSlcbntcbiAgICB2YXIgcHQgPSBwYXJlbnRUcmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgbHQgPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3g7XG4gICAgICAgIGx0LmIgID0gIHRoaXMuX3NyICogdGhpcy5zY2FsZS5feDtcbiAgICAgICAgbHQuYyAgPSAtdGhpcy5fc3IgKiB0aGlzLnNjYWxlLl95O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3k7XG4gICAgICAgIGx0LnR4ID0gIHRoaXMucG9zaXRpb24uX3ggLSAodGhpcy5waXZvdC5feCAqIGx0LmEgKyB0aGlzLnBpdm90Ll95ICogbHQuYyk7XG4gICAgICAgIGx0LnR5ID0gIHRoaXMucG9zaXRpb24uX3kgLSAodGhpcy5waXZvdC5feCAqIGx0LmIgKyB0aGlzLnBpdm90Ll95ICogbHQuZCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVkID0gdGhpcy5kaXJ0eSB8fCBwYXJlbnRUcmFuc2Zvcm0uZGlydHk7XG5cbiAgICBpZih0aGlzLnVwZGF0ZWQpXG4gICAgeyAgICAgIFxuICAgICAgICAvLyBjb25jYXQgdGhlIHBhcmVudCBtYXRyaXggd2l0aCB0aGUgb2JqZWN0cyB0cmFuc2Zvcm0uXG4gICAgICAgIHd0LmEgID0gbHQuYSAgKiBwdC5hICsgbHQuYiAgKiBwdC5jO1xuICAgICAgICB3dC5iICA9IGx0LmEgICogcHQuYiArIGx0LmIgICogcHQuZDtcbiAgICAgICAgd3QuYyAgPSBsdC5jICAqIHB0LmEgKyBsdC5kICAqIHB0LmM7XG4gICAgICAgIHd0LmQgID0gbHQuYyAgKiBwdC5iICsgbHQuZCAgKiBwdC5kO1xuICAgICAgICB3dC50eCA9IGx0LnR4ICogcHQuYSArIGx0LnR5ICogcHQuYyArIHB0LnR4O1xuICAgICAgICB3dC50eSA9IGx0LnR4ICogcHQuYiArIGx0LnR5ICogcHQuZCArIHB0LnR5O1xuICAgIH1cbiAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhbnNmb3JtO1xuXG5cbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBDYW52YXNHcmFwaGljcyA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL0dyYXBoaWNzRGF0YScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIEdyYXBoaWNzIGNsYXNzIGNvbnRhaW5zIG1ldGhvZHMgdXNlZCB0byBkcmF3IHByaW1pdGl2ZSBzaGFwZXMgc3VjaCBhcyBsaW5lcywgY2lyY2xlcyBhbmRcbiAqIHJlY3RhbmdsZXMgdG8gdGhlIGRpc3BsYXksIGFuZCB0byBjb2xvciBhbmQgZmlsbCB0aGVtLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzKClcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSB2YWx1ZSB1c2VkIHdoZW4gZmlsbGluZyB0aGUgR3JhcGhpY3Mgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggKHRoaWNrbmVzcykgb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29sb3Igb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBHcmFwaGljcyBkYXRhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFRoaXMgaXMgYSBoZXggdmFsdWUuIEFwcGx5IGEgdmFsdWUgb2YgMHhGRkZGRkYgdG8gcmVzZXQgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmV2aW91cyB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFVzZWQgdG8gY29tcGFyZSB0byB0aGUgY3VycmVudCB0aW50IGFuZCBjaGVjayBpZiB0aGVyZXMgY2hhbmdlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLl9wcmV2VGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMO1xuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCBwYXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgY29udGFpbmluZyBzb21lIFdlYkdMLXJlbGF0ZWQgcHJvcGVydGllcyB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIG9iamVjdD59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAvLyBUT0RPIC0gX3dlYmdsIHNob3VsZCB1c2UgYSBwcm90b3R5cGUgb2JqZWN0LCBub3QgYSByYW5kb20gdW5kb2N1bWVudGVkIG9iamVjdC4uLlxuICAgIHRoaXMuX3dlYkdMID0ge307XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgc2hhcGUgaXMgYmVpbmcgdXNlZCBhcyBhIG1hc2suXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNNYXNrID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYm91bmRzJyBwYWRkaW5nIHVzZWQgZm9yIGJvdW5kcyBjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJvdW5kc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQSBjYWNoZSBvZiB0aGUgbG9jYWwgYm91bmRzIHRvIHByZXZlbnQgcmVjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwwLDEsMSk7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlIGdyYXBoaWNzXG4gICAgICogb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIFdlYkdMIGdyYXBoaWNzIG9iamVjdCBoYXMgY2hhbmdlZC4gSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZVxuICAgICAqIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlY2FsY3VsYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcblxuICAgIHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIGNhY2hlZCBzcHJpdGUgb2JqZWN0IG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBjYWNoZUFzQml0bWFwIGlzIHNldCB0byB0cnVlIHRoZSBncmFwaGljcyBvYmplY3Qgd2lsbCBiZSByZW5kZXJlZCBhcyBpZiBpdCB3YXMgYSBzcHJpdGUuXG4gICAgICogVGhpcyBpcyB1c2VmdWwgaWYgeW91ciBncmFwaGljcyBlbGVtZW50IGRvZXMgbm90IGNoYW5nZSBvZnRlbiwgYXMgaXQgd2lsbCBzcGVlZCB1cCB0aGUgcmVuZGVyaW5nXG4gICAgICogb2YgdGhlIG9iamVjdCBpbiBleGNoYW5nZSBmb3IgdGFraW5nIHVwIHRleHR1cmUgbWVtb3J5LiBJdCBpcyBhbHNvIHVzZWZ1bCBpZiB5b3UgbmVlZCB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3QgdG8gYmUgYW50aS1hbGlhc2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVuZGVyZWQgdXNpbmcgY2FudmFzLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCBpZlxuICAgICAqIHlvdSBhcmUgY29uc3RhbnRseSByZWRyYXdpbmcgdGhlIGdyYXBoaWNzIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBjYWNoZUFzQml0bWFwXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5HcmFwaGljcyNcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuR3JhcGhpY3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcbkdyYXBoaWNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljcztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEdyYXBoaWNzIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqIE5vdGUgdGhhdCB0aGUgb25seSB0aGUgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IGFyZSBjbG9uZWQsIG5vdCBpdHMgdHJhbnNmb3JtIChwb3NpdGlvbixzY2FsZSxldGMpXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2xvbmUgPSBuZXcgR3JhcGhpY3MoKTtcblxuICAgIGNsb25lLnJlbmRlcmFibGUgICAgPSB0aGlzLnJlbmRlcmFibGU7XG4gICAgY2xvbmUuZmlsbEFscGhhICAgICA9IHRoaXMuZmlsbEFscGhhO1xuICAgIGNsb25lLmxpbmVXaWR0aCAgICAgPSB0aGlzLmxpbmVXaWR0aDtcbiAgICBjbG9uZS5saW5lQ29sb3IgICAgID0gdGhpcy5saW5lQ29sb3I7XG4gICAgY2xvbmUudGludCAgICAgICAgICA9IHRoaXMudGludDtcbiAgICBjbG9uZS5ibGVuZE1vZGUgICAgID0gdGhpcy5ibGVuZE1vZGU7XG4gICAgY2xvbmUuaXNNYXNrICAgICAgICA9IHRoaXMuaXNNYXNrO1xuICAgIGNsb25lLmJvdW5kc1BhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG4gICAgY2xvbmUuZGlydHkgICAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuZ2xEaXJ0eSAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuY2FjaGVkU3ByaXRlRGlydHkgPSB0aGlzLmNhY2hlZFNwcml0ZURpcnR5O1xuXG4gICAgLy8gY29weSBncmFwaGljcyBkYXRhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIGNsb25lLmdyYXBoaWNzRGF0YS5wdXNoKHRoaXMuZ3JhcGhpY3NEYXRhW2ldLmNsb25lKCkpO1xuICAgIH1cblxuICAgIGNsb25lLmN1cnJlbnRQYXRoID0gY2xvbmUuZ3JhcGhpY3NEYXRhW2Nsb25lLmdyYXBoaWNzRGF0YS5sZW5ndGggLSAxXTtcblxuICAgIGNsb25lLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICByZXR1cm4gY2xvbmU7XG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgbGluZSBzdHlsZSB1c2VkIGZvciBzdWJzZXF1ZW50IGNhbGxzIHRvIEdyYXBoaWNzIG1ldGhvZHMgc3VjaCBhcyB0aGUgbGluZVRvKCkgbWV0aG9kIG9yIHRoZSBkcmF3Q2lyY2xlKCkgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUubGluZVN0eWxlID0gZnVuY3Rpb24gKGxpbmVXaWR0aCwgY29sb3IsIGFscGhhKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoIHx8IDA7XG4gICAgdGhpcy5saW5lQ29sb3IgPSBjb2xvciB8fCAwO1xuICAgIHRoaXMubGluZUFscGhhID0gKGFscGhhID09PSB1bmRlZmluZWQpID8gMSA6IGFscGhhO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBoYWxmd2F5IHRocm91Z2ggYSBsaW5lPyBzdGFydCBhIG5ldyBvbmUhXG4gICAgICAgICAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnNsaWNlKC0yKSk7XG4gICAgICAgICAgICBzaGFwZS5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSBpdHMgZW1wdHkgc28gbGV0cyBqdXN0IHNldCB0aGUgbGluZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVXaWR0aCA9IHRoaXMubGluZVdpZHRoO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZUFscGhhID0gdGhpcy5saW5lQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogTW92ZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byB4LCB5LlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IHRoZSBYIGNvb3JkaW5hdGUgdG8gbW92ZSB0b1xuICogQHBhcmFtIHkge251bWJlcn0gdGhlIFkgY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICAqL1xuR3JhcGhpY3MucHJvdG90eXBlLm1vdmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24oW3gseV0pO1xuICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIGxpbmUgdXNpbmcgdGhlIGN1cnJlbnQgbGluZSBzdHlsZSBmcm9tIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8gKHgsIHkpO1xuICogVGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiBpcyB0aGVuIHNldCB0byAoeCwgeSkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBkcmF3IHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lVG8gPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgsIHkpO1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnF1YWRyYXRpY0N1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICBuID0gMjAsXG4gICAgICAgIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLCAwKTtcbiAgICB9XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBuOyArK2kpXG4gICAge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgeGEgPSBmcm9tWCArICggKGNwWCAtIGZyb21YKSAqIGogKTtcbiAgICAgICAgeWEgPSBmcm9tWSArICggKGNwWSAtIGZyb21ZKSAqIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCggeGEgKyAoICgoY3BYICsgKCAodG9YIC0gY3BYKSAqIGogKSkgLSB4YSkgKiBqICksXG4gICAgICAgICAgICAgICAgICAgICB5YSArICggKChjcFkgKyAoICh0b1kgLSBjcFkpICogaiApKSAtIHlhKSAqIGogKSApO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gY3BYMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlemllckN1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIGNwWDIsIGNwWTIsIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgbiA9IDIwLFxuICAgICAgICBkdCxcbiAgICAgICAgZHQyLFxuICAgICAgICBkdDMsXG4gICAgICAgIHQyLFxuICAgICAgICB0MyxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICBkdCA9ICgxIC0gaik7XG4gICAgICAgIGR0MiA9IGR0ICogZHQ7XG4gICAgICAgIGR0MyA9IGR0MiAqIGR0O1xuXG4gICAgICAgIHQyID0gaiAqIGo7XG4gICAgICAgIHQzID0gdDIgKiBqO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCBkdDMgKiBmcm9tWCArIDMgKiBkdDIgKiBqICogY3BYICsgMyAqIGR0ICogdDIgKiBjcFgyICsgdDMgKiB0b1gsXG4gICAgICAgICAgICAgICAgICAgICBkdDMgKiBmcm9tWSArIDMgKiBkdDIgKiBqICogY3BZICsgMyAqIGR0ICogdDIgKiBjcFkyICsgdDMgKiB0b1kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjVG8oKSBtZXRob2QgY3JlYXRlcyBhbiBhcmMvY3VydmUgYmV0d2VlbiB0d28gdGFuZ2VudHMgb24gdGhlIGNhbnZhcy5cbiAqXG4gKiBcImJvcnJvd2VkXCIgZnJvbSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Z4Y2FudmFzLyAtIHRoYW5rcyBnb29nbGUhXG4gKlxuICogQHBhcmFtIHgxIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTEge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB4MiB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGFyY1xuICogQHBhcmFtIHkyIHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGFyY1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmFyY1RvID0gZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyLCByYWRpdXMpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oeDEsIHkxKTtcbiAgICB9XG5cbiAgICB2YXIgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMsXG4gICAgICAgIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0sXG4gICAgICAgIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0sXG4gICAgICAgIGExID0gZnJvbVkgLSB5MSxcbiAgICAgICAgYjEgPSBmcm9tWCAtIHgxLFxuICAgICAgICBhMiA9IHkyICAgLSB5MSxcbiAgICAgICAgYjIgPSB4MiAgIC0geDEsXG4gICAgICAgIG1tID0gTWF0aC5hYnMoYTEgKiBiMiAtIGIxICogYTIpO1xuXG4gICAgaWYgKG1tIDwgMS4wZS04IHx8IHJhZGl1cyA9PT0gMClcbiAgICB7XG4gICAgICAgIGlmIChwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAhPT0geDEgfHwgcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0gIT09IHkxKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHMucHVzaCh4MSwgeTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBkZCA9IGExICogYTEgKyBiMSAqIGIxLFxuICAgICAgICAgICAgY2MgPSBhMiAqIGEyICsgYjIgKiBiMixcbiAgICAgICAgICAgIHR0ID0gYTEgKiBhMiArIGIxICogYjIsXG4gICAgICAgICAgICBrMSA9IHJhZGl1cyAqIE1hdGguc3FydChkZCkgLyBtbSxcbiAgICAgICAgICAgIGsyID0gcmFkaXVzICogTWF0aC5zcXJ0KGNjKSAvIG1tLFxuICAgICAgICAgICAgajEgPSBrMSAqIHR0IC8gZGQsXG4gICAgICAgICAgICBqMiA9IGsyICogdHQgLyBjYyxcbiAgICAgICAgICAgIGN4ID0gazEgKiBiMiArIGsyICogYjEsXG4gICAgICAgICAgICBjeSA9IGsxICogYTIgKyBrMiAqIGExLFxuICAgICAgICAgICAgcHggPSBiMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHB5ID0gYTEgKiAoazIgKyBqMSksXG4gICAgICAgICAgICBxeCA9IGIyICogKGsxICsgajIpLFxuICAgICAgICAgICAgcXkgPSBhMiAqIChrMSArIGoyKSxcbiAgICAgICAgICAgIHN0YXJ0QW5nbGUgPSBNYXRoLmF0YW4yKHB5IC0gY3ksIHB4IC0gY3gpLFxuICAgICAgICAgICAgZW5kQW5nbGUgICA9IE1hdGguYXRhbjIocXkgLSBjeSwgcXggLSBjeCk7XG5cbiAgICAgICAgdGhpcy5hcmMoY3ggKyB4MSwgY3kgKyB5MSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYjEgKiBhMiA+IGIyICogYTEpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSAodXNlZCB0byBjcmVhdGUgY2lyY2xlcywgb3IgcGFydHMgb2YgY2lyY2xlcykuXG4gKlxuICogQHBhcmFtIGN4IHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gY3kge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gc3RhcnRBbmdsZSB7bnVtYmVyfSBUaGUgc3RhcnRpbmcgYW5nbGUsIGluIHJhZGlhbnMgKDAgaXMgYXQgdGhlIDMgbydjbG9jayBwb3NpdGlvbiBvZiB0aGUgYXJjJ3MgY2lyY2xlKVxuICogQHBhcmFtIGVuZEFuZ2xlIHtudW1iZXJ9IFRoZSBlbmRpbmcgYW5nbGUsIGluIHJhZGlhbnNcbiAqIEBwYXJhbSBhbnRpY2xvY2t3aXNlIHtib29sZWFufSBPcHRpb25hbC4gU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGRyYXdpbmcgc2hvdWxkIGJlIGNvdW50ZXJjbG9ja3dpc2Ugb3IgY2xvY2t3aXNlLiBGYWxzZSBpcyBkZWZhdWx0LCBhbmQgaW5kaWNhdGVzIGNsb2Nrd2lzZSwgd2hpbGUgdHJ1ZSBpbmRpY2F0ZXMgY291bnRlci1jbG9ja3dpc2UuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjID0gZnVuY3Rpb24oY3gsIGN5LCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBhbnRpY2xvY2t3aXNlKVxue1xuICAgIGFudGljbG9ja3dpc2UgPSBhbnRpY2xvY2t3aXNlIHx8IGZhbHNlO1xuXG4gICAgaWYgKHN0YXJ0QW5nbGUgPT09IGVuZEFuZ2xlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYoICFhbnRpY2xvY2t3aXNlICYmIGVuZEFuZ2xlIDw9IHN0YXJ0QW5nbGUgKVxuICAgIHtcbiAgICAgICAgZW5kQW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuICAgIGVsc2UgaWYoIGFudGljbG9ja3dpc2UgJiYgc3RhcnRBbmdsZSA8PSBlbmRBbmdsZSApXG4gICAge1xuICAgICAgICBzdGFydEFuZ2xlICs9IE1hdGguUEkgKiAyO1xuICAgIH1cblxuICAgIHZhciBzd2VlcCA9IGFudGljbG9ja3dpc2UgPyAoc3RhcnRBbmdsZSAtIGVuZEFuZ2xlKSAqIC0xIDogKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSk7XG4gICAgdmFyIHNlZ3MgPSAgTWF0aC5jZWlsKE1hdGguYWJzKHN3ZWVwKSAvIChNYXRoLlBJICogMikpICogNDA7XG5cbiAgICBpZihzd2VlcCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBzdGFydFggPSBjeCArIE1hdGguY29zKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuICAgIHZhciBzdGFydFkgPSBjeSArIE1hdGguc2luKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHN0YXJ0WCwgc3RhcnRZKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciB0aGV0YSA9IHN3ZWVwLyhzZWdzKjIpO1xuICAgIHZhciB0aGV0YTIgPSB0aGV0YSoyO1xuXG4gICAgdmFyIGNUaGV0YSA9IE1hdGguY29zKHRoZXRhKTtcbiAgICB2YXIgc1RoZXRhID0gTWF0aC5zaW4odGhldGEpO1xuXG4gICAgdmFyIHNlZ01pbnVzID0gc2VncyAtIDE7XG5cbiAgICB2YXIgcmVtYWluZGVyID0gKCBzZWdNaW51cyAlIDEgKSAvIHNlZ01pbnVzO1xuXG4gICAgZm9yKHZhciBpPTA7IGk8PXNlZ01pbnVzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcmVhbCA9ICBpICsgcmVtYWluZGVyICogaTtcblxuXG4gICAgICAgIHZhciBhbmdsZSA9ICgodGhldGEpICsgc3RhcnRBbmdsZSArICh0aGV0YTIgKiByZWFsKSk7XG5cbiAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgIHZhciBzID0gLU1hdGguc2luKGFuZ2xlKTtcblxuICAgICAgICBwb2ludHMucHVzaCgoIChjVGhldGEgKiAgYykgKyAoc1RoZXRhICogcykgKSAqIHJhZGl1cyArIGN4LFxuICAgICAgICAgICAgICAgICAgICAoIChjVGhldGEgKiAtcykgKyAoc1RoZXRhICogYykgKSAqIHJhZGl1cyArIGN5KTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIGEgc2ltcGxlIG9uZS1jb2xvciBmaWxsIHRoYXQgc3Vic2VxdWVudCBjYWxscyB0byBvdGhlciBHcmFwaGljcyBtZXRob2RzXG4gKiAoc3VjaCBhcyBsaW5lVG8oKSBvciBkcmF3Q2lyY2xlKCkpIHVzZSB3aGVuIGRyYXdpbmcuXG4gKlxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlZ2luRmlsbCA9IGZ1bmN0aW9uIChjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5maWxsaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPD0gMilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsID0gdGhpcy5maWxsaW5nO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQ29sb3IgPSB0aGlzLmZpbGxDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbEFscGhhID0gdGhpcy5maWxsQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBmaWxsIHRvIHRoZSBsaW5lcyBhbmQgc2hhcGVzIHRoYXQgd2VyZSBhZGRlZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHRoZSBiZWdpbkZpbGwoKSBtZXRob2QuXG4gKlxuICogQHJldHVybiB7R3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5lbmRGaWxsID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IG51bGw7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCApXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguUmVjdGFuZ2xlKHgseSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gUmFkaXVzIG9mIHRoZSByZWN0YW5nbGUgY29ybmVyc1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSb3VuZGVkUmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzIClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5Sb3VuZGVkUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgY2lyY2xlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3Q2lyY2xlID0gZnVuY3Rpb24gKHgsIHksIHJhZGl1cylcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5DaXJjbGUoeCx5LCByYWRpdXMpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhbiBlbGxpcHNlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIGhhbGYgd2lkdGggb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd0VsbGlwc2UgPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5FbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIHBvbHlnb24gdXNpbmcgdGhlIGdpdmVuIHBhdGguXG4gKlxuICogQHBhcmFtIHBhdGgge251bWJlcltdfFBJWEkuUG9pbnRbXX0gVGhlIHBhdGggZGF0YSB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgcG9seWdvbi5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UG9seWdvbiA9IGZ1bmN0aW9uIChwYXRoKVxue1xuICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGFzc2lnbm1lbnQgZGVvcHRcbiAgICAvLyBzZWUgc2VjdGlvbiAzLjE6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgIHZhciBwb2ludHMgPSBwYXRoO1xuXG4gICAgdmFyIGNsb3NlZCA9IHRydWU7XG5cbiAgICBpZiAocG9pbnRzIGluc3RhbmNlb2YgbWF0aC5Qb2x5Z29uKVxuICAgIHtcbiAgICAgICAgY2xvc2VkID0gcG9pbnRzLmNsb3NlZDtcbiAgICAgICAgcG9pbnRzID0gcG9pbnRzLnBvaW50cztcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHNbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHBvaW50cyk7XG4gICAgc2hhcGUuY2xvc2VkID0gY2xvc2VkO1xuXG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZ3JhcGhpY3MgdGhhdCB3ZXJlIGRyYXduIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LCBhbmQgcmVzZXRzIGZpbGwgYW5kIGxpbmUgc3R5bGUgc2V0dGluZ3MuXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG4gICAgdGhpcy5maWxsaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmNsZWFyRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gW107XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGdlb21ldHJ5IGlzIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNob3VsZCBiZSBvbmUgb2YgdGhlIHNjYWxlTW9kZSBjb25zdHNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBncmFwaGljcyBvYmplY3RcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVzb2x1dGlvbiwgc2NhbGVNb2RlKVxue1xuXG4gICAgcmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGggKiByZXNvbHV0aW9uLCBib3VuZHMuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXNCdWZmZXIuY29udGV4dC5zY2FsZShyZXNvbHV0aW9uLCByZXNvbHV0aW9uKTtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIGNhbnZhc0J1ZmZlci5jb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcblxuICAgIGlmICh0aGlzLmdsRGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5nbERpcnR5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5yZW5kZXIodGhpcyk7XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5pc01hc2sgPT09IHRydWUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHRpbnQgaGFzIGNoYW5nZWQsIHNldCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRpcnR5LlxuICAgIGlmICh0aGlzLl9wcmV2VGludCAhPT0gdGhpcy50aW50KSB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIHRoaXMgY29kZSBtYXkgc3RpbGwgYmUgbmVlZGVkIHNvIGxlYXZpbmcgZm9yIG5vdy4uXG4gICAgLy9cbiAgICAvKlxuICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuZGlydHkgfHwgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVDYWNoZWRTcHJpdGUoKTtcblxuICAgICAgICAgICAgLy8gd2Ugd2lsbCBhbHNvIG5lZWQgdG8gdXBkYXRlIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUoKTtcblxuICAgICAgICAgICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFscGhhID0gdGhpcy5hbHBoYTtcblxuICAgICAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLl9jYWNoZWRTcHJpdGUsIHJlbmRlcmVyKTtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgICovXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY29udGV4dCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYm91bmRzIG9mIHRoZSBncmFwaGljIHNoYXBlIGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IFRoZSB3b3JsZCB0cmFuc2Zvcm0gbWF0cml4IHRvIHVzZSwgZGVmYXVsdHMgdG8gdGhpc1xuICogIG9iamVjdCdzIHdvcmxkVHJhbnNmb3JtLlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICAvLyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBpdGVtIGlzIGEgbWFzayFcbiAgICAgICAgaWYgKCF0aGlzLnJlbmRlcmFibGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJvdW5kc0RpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICAgICAgICAgIHRoaXMuZ2xEaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYm91bmRzRGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9sb2NhbEJvdW5kcztcblxuICAgICAgICB2YXIgdzAgPSBib3VuZHMueDtcbiAgICAgICAgdmFyIHcxID0gYm91bmRzLndpZHRoICsgYm91bmRzLng7XG5cbiAgICAgICAgdmFyIGgwID0gYm91bmRzLnk7XG4gICAgICAgIHZhciBoMSA9IGJvdW5kcy5oZWlnaHQgKyBib3VuZHMueTtcblxuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAgICAgdmFyIHgyID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgICAgICB2YXIgeTMgPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgICAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgbWF4WCA9IHgxO1xuICAgICAgICB2YXIgbWF4WSA9IHkxO1xuXG4gICAgICAgIHZhciBtaW5YID0geDE7XG4gICAgICAgIHZhciBtaW5ZID0geTE7XG5cbiAgICAgICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICAgICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICAgICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgICAgICB0aGlzLl9ib3VuZHMueCA9IG1pblg7XG4gICAgICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy55ID0gbWluWTtcbiAgICAgICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSB0aGlzLl9ib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBncmFwaGljcyBvYmplY3RcbipcbiogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4qL1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciBncmFwaGljc0RhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKCFkYXRhLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gb25seSBkZWFsIHdpdGggZmlsbHMuLlxuICAgICAgICBpZiAoZGF0YS5zaGFwZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCBkYXRhLnNoYXBlLmNvbnRhaW5zKCB0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkgKSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAqXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcblxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICBpZiAodGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdmFyIHNoYXBlLCBwb2ludHMsIHgsIHksIHcsIGg7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVtpXTtcbiAgICAgICAgICAgIHZhciB0eXBlID0gZGF0YS50eXBlO1xuICAgICAgICAgICAgdmFyIGxpbmVXaWR0aCA9IGRhdGEubGluZVdpZHRoO1xuICAgICAgICAgICAgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QgfHwgdHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLnggLSBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueSAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS53aWR0aCArIGxpbmVXaWR0aDtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLnJhZGl1cyArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLng7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLmhlaWdodCArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFBPTFlcbiAgICAgICAgICAgICAgICBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBvaW50cy5sZW5ndGg7IGogKz0gMilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHggPSBwb2ludHNbal07XG4gICAgICAgICAgICAgICAgICAgIHkgPSBwb2ludHNbaisxXTtcblxuICAgICAgICAgICAgICAgICAgICBtaW5YID0geC1saW5lV2lkdGggPCBtaW5YID8geC1saW5lV2lkdGggOiBtaW5YO1xuICAgICAgICAgICAgICAgICAgICBtYXhYID0geCtsaW5lV2lkdGggPiBtYXhYID8geCtsaW5lV2lkdGggOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblkgPSB5LWxpbmVXaWR0aCA8IG1pblkgPyB5LWxpbmVXaWR0aCA6IG1pblk7XG4gICAgICAgICAgICAgICAgICAgIG1heFkgPSB5K2xpbmVXaWR0aCA+IG1heFkgPyB5K2xpbmVXaWR0aCA6IG1heFk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIG1pblggPSAwO1xuICAgICAgICBtYXhYID0gMDtcbiAgICAgICAgbWluWSA9IDA7XG4gICAgICAgIG1heFkgPSAwO1xuICAgIH1cblxuICAgIHZhciBwYWRkaW5nID0gdGhpcy5ib3VuZHNQYWRkaW5nO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueCA9IG1pblggLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLndpZHRoID0gKG1heFggLSBtaW5YKSArIHBhZGRpbmcgKiAyO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueSA9IG1pblkgLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLmhlaWdodCA9IChtYXhZIC0gbWluWSkgKyBwYWRkaW5nICogMjtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjYWNoZWQgc3ByaXRlIHdoZW4gdGhlIHNwcml0ZSBoYXMgY2FjaGVBc0JpdG1hcCA9IHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIGlmICghdGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgdmFyIGNhbnZhc0J1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcbiAgICAgICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzQnVmZmVyLmNhbnZhcyk7XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlciA9IGNhbnZhc0J1ZmZlcjtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLnJlc2l6ZShib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIC8vIGxldmVyYWdlIHRoZSBhbmNob3IgdG8gYWNjb3VudCBmb3IgdGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudFxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQuc2F2ZSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC50cmFuc2xhdGUoLWJvdW5kcy54LC1ib3VuZHMueSk7XG5cbiAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3MgdG8gMSBmb3IgdGhlIHJlbmRlci4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIG5vdyByZW5kZXIgdGhlIGdyYXBoaWMuLlxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dCk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xufTtcbiovXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVDYWNoZWRTcHJpdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2FjaGVkU3ByaXRlID0gdGhpcy5fY2FjaGVkU3ByaXRlO1xuICAgIHZhciB0ZXh0dXJlID0gY2FjaGVkU3ByaXRlLnRleHR1cmU7XG4gICAgdmFyIGNhbnZhcyA9IGNhY2hlZFNwcml0ZS5idWZmZXIuY2FudmFzO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG4gICAgdGV4dHVyZS5jcm9wLndpZHRoID0gdGV4dHVyZS5mcmFtZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmNyb3AuaGVpZ2h0ID0gdGV4dHVyZS5mcmFtZS5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgY2FjaGVkU3ByaXRlLl93aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICBjYWNoZWRTcHJpdGUuX2hlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIGRpcnR5IGJhc2UgdGV4dHVyZXNcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmRpcnR5KCk7XG59OyovXG5cbi8qKlxuICogRGVzdHJveXMgYSBwcmV2aW91cyBjYWNoZWQgc3ByaXRlLlxuICpcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95Q2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUudGV4dHVyZS5kZXN0cm95KHRydWUpO1xuXG4gICAgLy8gbGV0IHRoZSBnYyBjb2xsZWN0IHRoZSB1bnVzZWQgc3ByaXRlXG4gICAgLy8gVE9ETyBjb3VsZCBiZSBvYmplY3QgcG9vbGVkIVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59OyovXG5cbi8qKlxuICogRHJhd3MgdGhlIGdpdmVuIHNoYXBlIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LiBDYW4gYmUgYW55IG9mIENpcmNsZSwgUmVjdGFuZ2xlLCBFbGxpcHNlLCBMaW5lIG9yIFBvbHlnb24uXG4gKlxuICogQHBhcmFtIHNoYXBlIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc0RhdGF9IFRoZSBnZW5lcmF0ZWQgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdTaGFwZSA9IGZ1bmN0aW9uIChzaGFwZSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIC8vIGNoZWNrIGN1cnJlbnQgcGF0aCFcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YS5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgdmFyIGRhdGEgPSBuZXcgR3JhcGhpY3NEYXRhKHRoaXMubGluZVdpZHRoLCB0aGlzLmxpbmVDb2xvciwgdGhpcy5saW5lQWxwaGEsIHRoaXMuZmlsbENvbG9yLCB0aGlzLmZpbGxBbHBoYSwgdGhpcy5maWxsaW5nLCBzaGFwZSk7XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YS5wdXNoKGRhdGEpO1xuXG4gICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAge1xuICAgICAgICBkYXRhLnNoYXBlLmNsb3NlZCA9IGRhdGEuc2hhcGUuY2xvc2VkIHx8IHRoaXMuZmlsbGluZztcbiAgICAgICAgdGhpcy5jdXJyZW50UGF0aCA9IGRhdGE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGRhdGE7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgLy8gZGVzdHJveSBlYWNoIG9mIHRoZSBHcmFwaGljc0RhdGEgb2JqZWN0c1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8vIGZvciBlYWNoIHdlYmdsIGRhdGEgZW50cnksIGRlc3Ryb3kgdGhlIFdlYkdMR3JhcGhpY3NEYXRhXG4gICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fd2ViZ2wpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl93ZWJnbFtpZF0uZGF0YS5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgdGhpcy5fd2ViZ2xbaWRdLmRhdGFbal0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG4gICAgdGhpcy5fd2ViZ2wgPSBudWxsO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEEgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gbGluZVdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gZmlsbENvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGxBbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBmaWxsICAgICAge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICogQHBhcmFtIHNoYXBlICAgICB7Q2lyY2xlfFJlY3RhbmdsZXxFbGxpcHNlfExpbmV8UG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICovXG5mdW5jdGlvbiBHcmFwaGljc0RhdGEobGluZVdpZHRoLCBsaW5lQ29sb3IsIGxpbmVBbHBoYSwgZmlsbENvbG9yLCBmaWxsQWxwaGEsIGZpbGwsIHNoYXBlKVxue1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQ29sb3IgPSBsaW5lQ29sb3I7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQWxwaGEgPSBsaW5lQWxwaGE7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLl9saW5lVGludCA9IGxpbmVDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxDb2xvciA9IGZpbGxDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IGZpbGxBbHBoYTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBjYWNoZWQgdGludCBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuX2ZpbGxUaW50ID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhcGUgaXMgZmlsbGVkIHdpdGggYSBjb2xvdXJcbiAgICAgKi9cbiAgICB0aGlzLmZpbGwgPSBmaWxsO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICAgICAqL1xuICAgIHRoaXMuc2hhcGUgPSBzaGFwZTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBUaGUgdHlwZSBvZiB0aGUgc2hhcGUsIHNlZSB0aGUgQ29uc3QuU2hhcGVzIGZpbGUgZm9yIGFsbCB0aGUgZXhpc3RpbmcgdHlwZXMsXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gc2hhcGUudHlwZTtcbn1cblxuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3NEYXRhIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBHcmFwaGljc0RhdGEoXG4gICAgICAgIHRoaXMubGluZVdpZHRoLFxuICAgICAgICB0aGlzLmxpbmVDb2xvcixcbiAgICAgICAgdGhpcy5saW5lQWxwaGEsXG4gICAgICAgIHRoaXMuZmlsbENvbG9yLFxuICAgICAgICB0aGlzLmZpbGxBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsLFxuICAgICAgICB0aGlzLnNoYXBlXG4gICAgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIGRhdGEuXG4gKi9cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnNoYXBlID0gbnVsbDtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL1dlYkdMR3JhcGhpY3NEYXRhJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuXG4gICAgLy8gc29tZSBkcmF3aW5nIGZ1bmN0aW9ucy4uXG4gICAgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi91dGlscy9idWlsZExpbmUnKTtcbiAgICBidWlsZFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUG9seScpO1xuICAgIGJ1aWxkQ29tcGxleFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ29tcGxleFBvbHknKTtcbiAgICBidWlsZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSZWN0YW5nbGUnKTtcbiAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkQ2lyY2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZENpcmNsZScpO1xuXG4gICAgZWFyY3V0ID0gcmVxdWlyZSgnZWFyY3V0Jyk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IFtdO1xuXG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgYSBwb2x5IGNhbiBjb250YWluIGJlZm9yZSBpdCBpcyByZW5kZXJlZCBhcyBhIGNvbXBsZXggcG9seWdvbiAodXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyKVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgPSAyMDA7XG59XG5cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc1JlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdncmFwaGljcycsIEdyYXBoaWNzUmVuZGVyZXIpO1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMuZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzLmdsKVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHJlbmRlcmVyLlxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YVBvb2wubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBudWxsO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuICAvLyAgY29uc29sZS5sb2coZ3JhcGhpY3MpXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5IHx8ICFncmFwaGljcy5fd2ViR0xbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljcyhncmFwaGljcyk7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIFRoaXMgIGNvdWxkIGJlIHNwZWVkZWQgdXAgZm9yIHN1cmUhXG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggZ3JhcGhpY3MuYmxlbmRNb2RlICk7XG5cbi8vICAgIHZhciBtYXRyaXggPSAgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0uY2xvbmUoKTtcbi8vICAgIHZhciBtYXRyaXggPSAgcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7XG4vLyAgICBtYXRyaXguYXBwZW5kKGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gd2ViR0wuZGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTC5kYXRhW2ldLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyBmaXggdGhpcyBvbmUhXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEgKiB3ZWJHTERhdGEuYWxwaGEpO1xuXG4gICAgICAgICAgICAvLyByZW5kZXIgcXVhZC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgcmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeCA9IGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLmxvY2F0aW9uKTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHVwZGF0ZVxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgLy8gZ2V0IHRoZSBjb250ZXh0cyBncmFwaGljcyBvYmplY3RcbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd2ViR0wgY29udGV4dCB0aW1lIHRvIGNyZWF0ZSBpdCFcbiAgICBpZiAoIXdlYkdMKVxuICAgIHtcbiAgICAgICAgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdID0ge2xhc3RJbmRleDowLCBkYXRhOltdLCBnbDpnbH07XG4gICAgfVxuXG4gICBcbiAgICAvLyBmbGFnIHRoZSBncmFwaGljcyBhcyBub3QgZGlydHkgYXMgd2UgYXJlIGFib3V0IHRvIHVwZGF0ZSBpdC4uLlxuICAgIGdyYXBoaWNzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB2YXIgaTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGNsZWFyZWQgdGhlIGdyYXBoaWNzIG9iamVjdCB3ZSB3aWxsIG5lZWQgdG8gY2xlYXIgZXZlcnkgb2JqZWN0XG4gICAgaWYgKGdyYXBoaWNzLmNsZWFyRGlydHkpXG4gICAge1xuICAgICAgICBncmFwaGljcy5jbGVhckRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuZCByZXR1cm4gYWxsIHRoZSB3ZWJHTERhdGFzIHRvIHRoZSBvYmplY3QgcG9vbCBzbyB0aGFuIGNhbiBiZSByZXVzZWQgbGF0ZXIgb25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBncmFwaGljc0RhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucHVzaCggZ3JhcGhpY3NEYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgYXJyYXkgYW5kIHJlc2V0IHRoZSBpbmRleC4uXG4gICAgICAgIHdlYkdMLmRhdGEgPSBbXTtcbiAgICAgICAgd2ViR0wubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBncmFwaGljcyBkYXRhcyBhbmQgY29uc3RydWN0IGVhY2ggb25lLi5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGEgY29tcGxleCBmaWxsIHRoZW4gdGhlIG5ldyBzdGVuY2lsIGJ1ZmZlciB0ZWNobmlxdWUgd2lsbCBiZSB1c2VkXG4gICAgLy8gb3RoZXIgd2lzZSBncmFwaGljcyBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIGludG8gYSBiYXRjaC4uXG4gICAgZm9yIChpID0gd2ViR0wubGFzdEluZGV4OyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBwb2ludHMgdGhlIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgICAgICAgICAgZGF0YS5wb2ludHMgPSBkYXRhLnNoYXBlLnBvaW50cy5zbGljZSgpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBwb2x5IGlmIHRoZSB2YWx1ZSBpcyB0cnVlIVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50c1swXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTJdIHx8IGRhdGEucG9pbnRzWzFdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKGRhdGEucG9pbnRzWzBdLCBkYXRhLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNQUtFIFNVUkUgV0UgSEFWRSBUSEUgQ09SUkVDVCBUWVBFLi5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA+PSA2KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA8IHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplICogMilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkRyYXdVc2luZ1NpbXBsZSA9IGJ1aWxkUG9seShkYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkRyYXdVc2luZ1NpbXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoID4gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuICAgICAgICAgICAgICAgIGJ1aWxkTGluZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMgfHwgZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZENpcmNsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCsrO1xuICAgIH1cblxuICAgIC8vIHVwbG9hZCBhbGwgdGhlIGRpcnR5IGRhdGEuLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5kaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhLnVwbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gd2ViR0wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSBUT0RPIEBBbHZpblxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5zd2l0Y2hNb2RlID0gZnVuY3Rpb24gKHdlYkdMLCB0eXBlKVxue1xuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICBpZiAoIXdlYkdMLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbd2ViR0wuZGF0YS5sZW5ndGgtMV07XG5cbiAgICAgICAgaWYgKCh3ZWJHTERhdGEucG9pbnRzLmxlbmd0aCA+IDMyMDAwMCkgfHwgd2ViR0xEYXRhLm1vZGUgIT09IHR5cGUgfHwgdHlwZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdlYkdMRGF0YS5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gd2ViR0xEYXRhO1xufTtcblxuIiwiLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyBXZWJHTCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gV2ViR0xHcmFwaGljc0RhdGEoZ2wpIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vVE9ETyBkb2VzIHRoaXMgbmVlZCB0byBiZSBzcGxpdCBiZWZvcmUgdXBsb2Rpbmc/P1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvbG9yIGNvbXBvbmVudHMgKHIsZyxiKVxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3IgPSBbMCwwLDBdOyAvLyBjb2xvciBzcGxpdCFcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBvaW50cyB0byBkcmF3XG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIHRvZG8gQGFsdmluXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubW9kZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGdyYXBoaWNzIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHZlcnRpY2VzIGFuZCB0aGUgaW5kaWNlc1xuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb2ludHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmluZGljZXMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4vLyAgICB0aGlzLmxhc3RJbmRleCA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5nbFBvaW50cyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5wb2ludHMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuYnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5nbFBvaW50cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5nbEluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuZ2xJbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLnBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBcbiAgICB0aGlzLmdsID0gbnVsbDtcblxuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoZ2wpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgZ2wsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgY2lyY2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byBkcmF3XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ2lyY2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIHZhciBjaXJjbGVEYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gY2lyY2xlRGF0YS54O1xuICAgIHZhciB5ID0gY2lyY2xlRGF0YS55O1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuXG4gICAgLy8gVE9ETyAtIGJpdCBoYWNreT8/XG4gICAgaWYgKGdyYXBoaWNzRGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB0b3RhbFNlZ3MgPSBNYXRoLmZsb29yKDMwICogTWF0aC5zcXJ0KGNpcmNsZURhdGEucmFkaXVzKSkgfHwgTWF0aC5mbG9vcigxNSAqIE1hdGguc3FydChjaXJjbGVEYXRhLndpZHRoICsgY2lyY2xlRGF0YS5oZWlnaHQpKTtcbiAgICB2YXIgc2VnID0gKE1hdGguUEkgKiAyKSAvIHRvdGFsU2VncyA7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcyk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDEgOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCx5LCByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKyssIHZlY1BvcysrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MtMSk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDaXJjbGU7IiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuICAgIFxuXG5cbi8qKlxuICogQnVpbGRzIGEgY29tcGxleCBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDb21wbGV4UG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvL1RPRE8gLSBubyBuZWVkIHRvIGNvcHkgdGhpcyBhcyBpdCBnZXRzIHR1cm5lZCBpbnRvIGEgRkxvYXQzMkFycmF5IGFueXdheXMuLlxuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzLnNsaWNlKCk7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDYpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgd2ViR0xEYXRhLnBvaW50cyA9IHBvaW50cztcbiAgICB3ZWJHTERhdGEuYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHdlYkdMRGF0YS5jb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG5cbiAgICAvLyBjYWxjbGF0ZSB0aGUgYm91bmRzLi5cbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIHZhciB4LHk7XG5cbiAgICAvLyBnZXQgc2l6ZS4uXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKz0yKVxuICAgIHtcbiAgICAgICAgeCA9IHBvaW50c1tpXTtcbiAgICAgICAgeSA9IHBvaW50c1tpKzFdO1xuXG4gICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICBtYXhYID0geCA+IG1heFggPyB4IDogbWF4WDtcblxuICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcbiAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgcXVhZCB0byB0aGUgZW5kIGNvcyB0aGVyZSBpcyBubyBwb2ludCBtYWtpbmcgYW5vdGhlciBidWZmZXIhXG4gICAgcG9pbnRzLnB1c2gobWluWCwgbWluWSxcbiAgICAgICAgICAgICAgICBtYXhYLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1heFksXG4gICAgICAgICAgICAgICAgbWluWCwgbWF4WSk7XG5cbiAgICAvLyBwdXNoIGEgcXVhZCBvbnRvIHRoZSBlbmQuLlxuXG4gICAgLy9UT0RPIC0gdGhpcyBhaW50IG5lZWRlZCFcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKCBpICk7XG4gICAgfVxuXG59O1xuXG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENvbXBsZXhQb2x5OyIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBsaW5lIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRMaW5lID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIFRPRE8gT1BUSU1JU0UhXG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGlmIHRoZSBsaW5lIHdpZHRoIGlzIGFuIG9kZCBudW1iZXIgYWRkIDAuNSB0byBhbGlnbiB0byBhIHdob2xlIHBpeGVsXG4gICAgLy8gY29tbWVudGluZyB0aGlzIG91dCBmaXhlcyAjNzExIGFuZCAjMTYyMFxuICAgIC8vIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoJTIpXG4gICAgLy8ge1xuICAgIC8vICAgICBmb3IgKGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKVxuICAgIC8vICAgICB7XG4gICAgLy8gICAgICAgICBwb2ludHNbaV0gKz0gMC41O1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBmaXJzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgIHZhciBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgIC8vIGlmIHRoZSBmaXJzdCBwb2ludCBpcyB0aGUgbGFzdCBwb2ludCAtIGdvbm5hIGhhdmUgaXNzdWVzIDopXG4gICAgaWYgKGZpcnN0UG9pbnQueCA9PT0gbGFzdFBvaW50LnggJiYgZmlyc3RQb2ludC55ID09PSBsYXN0UG9pbnQueSlcbiAgICB7XG4gICAgICAgIC8vIG5lZWQgdG8gY2xvbmUgYXMgd2UgYXJlIGdvaW5nIHRvIHNsaWdodGx5IG1vZGlmeSB0aGUgc2hhcGUuLlxuICAgICAgICBwb2ludHMgPSBwb2ludHMuc2xpY2UoKTtcblxuICAgICAgICBwb2ludHMucG9wKCk7XG4gICAgICAgIHBvaW50cy5wb3AoKTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgICAgICB2YXIgbWlkUG9pbnRYID0gbGFzdFBvaW50LnggKyAoZmlyc3RQb2ludC54IC0gbGFzdFBvaW50LngpICowLjU7XG4gICAgICAgIHZhciBtaWRQb2ludFkgPSBsYXN0UG9pbnQueSArIChmaXJzdFBvaW50LnkgLSBsYXN0UG9pbnQueSkgKjAuNTtcblxuICAgICAgICBwb2ludHMudW5zaGlmdChtaWRQb2ludFgsIG1pZFBvaW50WSk7XG4gICAgICAgIHBvaW50cy5wdXNoKG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICB9XG5cbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgIHZhciBpbmRleENvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICB2YXIgaW5kZXhTdGFydCA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgLy8gRFJBVyB0aGUgTGluZVxuICAgIHZhciB3aWR0aCA9IGdyYXBoaWNzRGF0YS5saW5lV2lkdGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmxpbmVDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmxpbmVBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciBweCwgcHksIHAxeCwgcDF5LCBwMngsIHAyeSwgcDN4LCBwM3k7XG4gICAgdmFyIHBlcnB4LCBwZXJweSwgcGVycDJ4LCBwZXJwMnksIHBlcnAzeCwgcGVycDN5O1xuICAgIHZhciBhMSwgYjEsIGMxLCBhMiwgYjIsIGMyO1xuICAgIHZhciBkZW5vbSwgcGRpc3QsIGRpc3Q7XG5cbiAgICBwMXggPSBwb2ludHNbMF07XG4gICAgcDF5ID0gcG9pbnRzWzFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWzJdO1xuICAgIHAyeSA9IHBvaW50c1szXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gIHAxeCAtIHAyeDtcblxuICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG5cbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAvLyBzdGFydFxuICAgIHZlcnRzLnB1c2gocDF4IC0gcGVycHggLCBwMXkgLSBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAxeCArIHBlcnB4ICwgcDF5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgZm9yIChpID0gMTsgaSA8IGxlbmd0aC0xOyBpKyspXG4gICAge1xuICAgICAgICBwMXggPSBwb2ludHNbKGktMSkqMl07XG4gICAgICAgIHAxeSA9IHBvaW50c1soaS0xKSoyICsgMV07XG5cbiAgICAgICAgcDJ4ID0gcG9pbnRzWyhpKSoyXTtcbiAgICAgICAgcDJ5ID0gcG9pbnRzWyhpKSoyICsgMV07XG5cbiAgICAgICAgcDN4ID0gcG9pbnRzWyhpKzEpKjJdO1xuICAgICAgICBwM3kgPSBwb2ludHNbKGkrMSkqMiArIDFdO1xuXG4gICAgICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgICAgICBwZXJweSA9IHAxeCAtIHAyeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgICAgICBwZXJweCAvPSBkaXN0O1xuICAgICAgICBwZXJweSAvPSBkaXN0O1xuICAgICAgICBwZXJweCAqPSB3aWR0aDtcbiAgICAgICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAgICAgcGVycDJ4ID0gLShwMnkgLSBwM3kpO1xuICAgICAgICBwZXJwMnkgPSBwMnggLSBwM3g7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwMngqcGVycDJ4ICsgcGVycDJ5KnBlcnAyeSk7XG4gICAgICAgIHBlcnAyeCAvPSBkaXN0O1xuICAgICAgICBwZXJwMnkgLz0gZGlzdDtcbiAgICAgICAgcGVycDJ4ICo9IHdpZHRoO1xuICAgICAgICBwZXJwMnkgKj0gd2lkdGg7XG5cbiAgICAgICAgYTEgPSAoLXBlcnB5ICsgcDF5KSAtICgtcGVycHkgKyBwMnkpO1xuICAgICAgICBiMSA9ICgtcGVycHggKyBwMngpIC0gKC1wZXJweCArIHAxeCk7XG4gICAgICAgIGMxID0gKC1wZXJweCArIHAxeCkgKiAoLXBlcnB5ICsgcDJ5KSAtICgtcGVycHggKyBwMngpICogKC1wZXJweSArIHAxeSk7XG4gICAgICAgIGEyID0gKC1wZXJwMnkgKyBwM3kpIC0gKC1wZXJwMnkgKyBwMnkpO1xuICAgICAgICBiMiA9ICgtcGVycDJ4ICsgcDJ4KSAtICgtcGVycDJ4ICsgcDN4KTtcbiAgICAgICAgYzIgPSAoLXBlcnAyeCArIHAzeCkgKiAoLXBlcnAyeSArIHAyeSkgLSAoLXBlcnAyeCArIHAyeCkgKiAoLXBlcnAyeSArIHAzeSk7XG5cbiAgICAgICAgZGVub20gPSBhMSpiMiAtIGEyKmIxO1xuXG4gICAgICAgIGlmIChNYXRoLmFicyhkZW5vbSkgPCAwLjEgKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIGRlbm9tKz0xMC4xO1xuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJweCAsIHAyeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBweCA9IChiMSpjMiAtIGIyKmMxKS9kZW5vbTtcbiAgICAgICAgcHkgPSAoYTIqYzEgLSBhMSpjMikvZGVub207XG5cblxuICAgICAgICBwZGlzdCA9IChweCAtcDJ4KSAqIChweCAtcDJ4KSArIChweSAtcDJ5KSAqIChweSAtcDJ5KTtcblxuXG4gICAgICAgIGlmIChwZGlzdCA+IDE0MCAqIDE0MClcbiAgICAgICAge1xuICAgICAgICAgICAgcGVycDN4ID0gcGVycHggLSBwZXJwMng7XG4gICAgICAgICAgICBwZXJwM3kgPSBwZXJweSAtIHBlcnAyeTtcblxuICAgICAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwM3gqcGVycDN4ICsgcGVycDN5KnBlcnAzeSk7XG4gICAgICAgICAgICBwZXJwM3ggLz0gZGlzdDtcbiAgICAgICAgICAgIHBlcnAzeSAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN4ICo9IHdpZHRoO1xuICAgICAgICAgICAgcGVycDN5ICo9IHdpZHRoO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycDN4LCBwMnkgK3BlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJwM3gsIHAyeSAtcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRleENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocHggLCBweSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSAocHgtcDJ4KSwgcDJ5IC0gKHB5IC0gcDJ5KSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHAxeCA9IHBvaW50c1sobGVuZ3RoLTIpKjJdO1xuICAgIHAxeSA9IHBvaW50c1sobGVuZ3RoLTIpKjIgKyAxXTtcblxuICAgIHAyeCA9IHBvaW50c1sobGVuZ3RoLTEpKjJdO1xuICAgIHAyeSA9IHBvaW50c1sobGVuZ3RoLTEpKjIgKyAxXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5KTtcbiAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBpbmRleENvdW50OyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydCsrKTtcbiAgICB9XG5cbiAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydC0xKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRMaW5lOyIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcG9seWdvbiB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuV2ViR0xHcmFwaGljc0RhdGF9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocG9pbnRzLCBudWxsLCAyKTtcblxuICAgIGlmICghdHJpYW5nbGVzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgdmVydFBvcyA9IHZlcnRzLmxlbmd0aCAvIDY7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICt2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVydFBvcyk7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmVydHMucHVzaChwb2ludHNbaSAqIDJdLCBwb2ludHNbaSAqIDIgKyAxXSxcbiAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRQb2x5O1xuIiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHJlY3RhbmdsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIC0tLSAvL1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIC8vXG4gICAgdmFyIHJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcmVjdERhdGEueDtcbiAgICB2YXIgeSA9IHJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJlY3REYXRhLmhlaWdodDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgLy8gc3RhcnRcbiAgICAgICAgdmVydHMucHVzaCh4LCB5KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAvLyBpbnNlcnQgMiBkZWFkIHRyaWFuZ2xlcy4uXG4gICAgICAgIGluZGljZXMucHVzaCh2ZXJ0UG9zLCB2ZXJ0UG9zLCB2ZXJ0UG9zKzEsIHZlcnRQb3MrMiwgdmVydFBvcyszLCB2ZXJ0UG9zKzMpO1xuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSBbeCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHkgKyBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICB4LCB5XTtcblxuXG4gICAgICAgIGJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJlY3RhbmdsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG4vKipcbiAqIEJ1aWxkcyBhIHJvdW5kZWQgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG5idWlsZFJvdW5kZWRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIHJyZWN0RGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IHJyZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcnJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcnJlY3REYXRhLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSBycmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgdmFyIHJhZGl1cyA9IHJyZWN0RGF0YS5yYWRpdXM7XG5cbiAgICB2YXIgcmVjUG9pbnRzID0gW107XG4gICAgcmVjUG9pbnRzLnB1c2goeCwgeSArIHJhZGl1cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4LCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCB4LCB5ICsgaGVpZ2h0LCB4ICsgcmFkaXVzLCB5ICsgaGVpZ2h0LCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoIC0gcmFkaXVzLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCAtIHJhZGl1cywgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyB3aWR0aCwgeSArIHJhZGl1cywgeCArIHdpZHRoLCB5LCB4ICsgd2lkdGggLSByYWRpdXMsIHksIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgcmFkaXVzLCB5LCB4LCB5LCB4LCB5ICsgcmFkaXVzICsgMC4wMDAwMDAwMDAxLCByZWNQb2ludHMpO1xuXG4gICAgLy8gdGhpcyB0aW55IG51bWJlciBkZWFscyB3aXRoIHRoZSBpc3N1ZSB0aGF0IG9jY3VycyB3aGVuIHBvaW50cyBvdmVybGFwIGFuZCBlYXJjdXQgZmFpbHMgdG8gdHJpYW5ndWxhdGUgdGhlIGl0ZW0uXG4gICAgLy8gVE9ETyAtIGZpeCB0aGlzIHByb3Blcmx5LCB0aGlzIGlzIG5vdCB2ZXJ5IGVsZWdhbnQuLiBidXQgaXQgd29ya3MgZm9yIG5vdy5cblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICB2YXIgdHJpYW5nbGVzID0gZWFyY3V0KHJlY1BvaW50cywgbnVsbCwgMik7XG5cbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICAgICAge1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVjUG9zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZWNQb2ludHMubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gocmVjUG9pbnRzW2ldLCByZWNQb2ludHNbKytpXSwgciwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHJlY1BvaW50cztcblxuICAgICAgICB0aGlzLmJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlLiAoaGVscGVyIGZ1bmN0aW9uLi4pXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBmcm9tWCB7bnVtYmVyfSBPcmlnaW4gcG9pbnQgeFxuICogQHBhcmFtIGZyb21ZIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcGFyYW0gW291dF0ge251bWJlcltdfSBUaGUgb3V0cHV0IGFycmF5IHRvIGFkZCBwb2ludHMgaW50by4gSWYgbm90IHBhc3NlZCwgYSBuZXcgYXJyYXkgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm4ge251bWJlcltdfSBhbiBhcnJheSBvZiBwb2ludHNcbiAqL1xucXVhZHJhdGljQmV6aWVyQ3VydmUgPSBmdW5jdGlvbiAoZnJvbVgsIGZyb21ZLCBjcFgsIGNwWSwgdG9YLCB0b1ksIG91dClcbntcbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICB4YixcbiAgICAgICAgeWIsXG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gb3V0IHx8IFtdO1xuXG4gICAgZnVuY3Rpb24gZ2V0UHQobjEgLCBuMiwgcGVyYykge1xuICAgICAgICB2YXIgZGlmZiA9IG4yIC0gbjE7XG5cbiAgICAgICAgcmV0dXJuIG4xICsgKCBkaWZmICogcGVyYyApO1xuICAgIH1cblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBuOyBpKysgKSB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICAvLyBUaGUgR3JlZW4gTGluZVxuICAgICAgICB4YSA9IGdldFB0KCBmcm9tWCAsIGNwWCAsIGogKTtcbiAgICAgICAgeWEgPSBnZXRQdCggZnJvbVkgLCBjcFkgLCBqICk7XG4gICAgICAgIHhiID0gZ2V0UHQoIGNwWCAsIHRvWCAsIGogKTtcbiAgICAgICAgeWIgPSBnZXRQdCggY3BZICwgdG9ZICwgaiApO1xuXG4gICAgICAgIC8vIFRoZSBCbGFjayBEb3RcbiAgICAgICAgeCA9IGdldFB0KCB4YSAsIHhiICwgaiApO1xuICAgICAgICB5ID0gZ2V0UHQoIHlhICwgeWIgLCBqICk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goeCwgeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50cztcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJvdW5kZWRSZWN0YW5nbGU7IiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgY29yZSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWElcbiAqL1xuLy8gZXhwb3J0IGNvcmUgYW5kIGNvbnN0LiBXZSBhc3NpZ24gY29yZSB0byBjb25zdCBzbyB0aGF0IHRoZSBub24tcmVmZXJlbmNlIHR5cGVzIGluIGNvbnN0IHJlbWFpbiBpbi10YWN0XG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihyZXF1aXJlKCcuL2NvbnN0JyksIHJlcXVpcmUoJy4vbWF0aCcpLCB7XG4gICAgLy8gdXRpbHNcbiAgICB1dGlsczogcmVxdWlyZSgnLi91dGlscycpLFxuICAgIHRpY2tlcjogcmVxdWlyZSgnLi90aWNrZXInKSxcblxuICAgIC8vIGRpc3BsYXlcbiAgICBEaXNwbGF5T2JqZWN0OiAgICAgICAgICByZXF1aXJlKCcuL2Rpc3BsYXkvRGlzcGxheU9iamVjdCcpLFxuICAgIENvbnRhaW5lcjogICAgICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9Db250YWluZXInKSxcblxuICAgIC8vIHNwcml0ZXNcbiAgICBTcHJpdGU6ICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgUGFydGljbGVDb250YWluZXI6ICAgICAgcmVxdWlyZSgnLi9wYXJ0aWNsZXMvUGFydGljbGVDb250YWluZXInKSxcbiAgICBTcHJpdGVSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXInKSxcbiAgICBQYXJ0aWNsZVJlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyJyksXG5cbiAgICAvLyB0ZXh0XG4gICAgVGV4dDogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0L1RleHQnKSxcblxuICAgIC8vIHByaW1pdGl2ZXNcbiAgICBHcmFwaGljczogICAgICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzJyksXG4gICAgR3JhcGhpY3NEYXRhOiAgICAgICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljc0RhdGEnKSxcbiAgICBHcmFwaGljc1JlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHR1cmVzXG4gICAgVGV4dHVyZTogICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQmFzZVRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlVGV4dHVyZScpLFxuICAgIFJlbmRlclRleHR1cmU6ICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEJhc2VSZW5kZXJUZXh0dXJlOiAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlOiAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzOiAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmVVdnMnKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIGNhbnZhc1xuICAgIENhbnZhc1JlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIENhbnZhc0J1ZmZlcjogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIHdlYmdsXG4gICAgV2ViR0xSZW5kZXJlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyksXG4gICAgU2hhZGVyTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIFNoYWRlcjogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyJyksXG4gICAgT2JqZWN0UmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBSZW5kZXJUYXJnZXQ6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcblxuICAgIC8vIGZpbHRlcnMgLSB3ZWJnbFxuICAgIEFic3RyYWN0RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBGWEFBRmlsdGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBTcHJpdGVNYXNrRmlsdGVyOiAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKSxcblxuICAgIGdsQ29yZTogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncGl4aS1nbC1jb3JlJyksXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoaWNoIHJlbmRlcmVyIHlvdSBzaG91bGQgYmUgdXNpbmcuXG4gICAgICogV2ViR0wgaXMgdGhlIHByZWZlcnJlZCByZW5kZXJlciBhcyBpdCBpcyBhIGxvdCBmYXN0ZXIuIElmIHdlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnlcbiAgICAgKiB0aGUgYnJvd3NlciB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBjYW52YXMgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHBhcmFtIHdpZHRoPTgwMCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIGhlaWdodD02MDAge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWYgeW91XG4gICAgICogICAgICBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0XG4gICAgICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyLCByZXRpbmEgd291bGQgYmUgMlxuICAgICAqIEBwYXJhbSBbbm9XZWJHTD1mYWxzZV0ge2Jvb2xlYW59IHByZXZlbnRzIHNlbGVjdGlvbiBvZiBXZWJHTCByZW5kZXJlciwgZXZlbiBpZiBzdWNoIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyZXJ8Q2FudmFzUmVuZGVyZXJ9IFJldHVybnMgV2ViR0wgcmVuZGVyZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgQ2FudmFzUmVuZGVyZXJcbiAgICAgKi9cbiAgICBhdXRvRGV0ZWN0UmVuZGVyZXI6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCBub1dlYkdMKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB3aWR0aCB8fCA4MDA7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAgICAgaWYgKCFub1dlYkdMICYmIGNvcmUudXRpbHMuaXNXZWJHTFN1cHBvcnRlZCgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGNvcmUuV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgY29yZS5DYW52YXNSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB9XG59KTtcbiIsIi8vIEB0b2RvIC0gaWdub3JlIHRoZSB0b28gbWFueSBwYXJhbWV0ZXJzIHdhcm5pbmcgZm9yIG5vd1xuLy8gc2hvdWxkIGVpdGhlciBmaXggaXQgb3IgY2hhbmdlIHRoZSBqc2hpbnQgY29uZmlnXG4vLyBqc2hpbnQgLVcwNzJcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xuXG4vKipcbiAqIFRoZSBwaXhpIE1hdHJpeCBjbGFzcyBhcyBhbiBvYmplY3QsIHdoaWNoIG1ha2VzIGl0IGEgbG90IGZhc3RlcixcbiAqIGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBpdCA6XG4gKiB8IGEgfCBiIHwgdHh8XG4gKiB8IGMgfCBkIHwgdHl8XG4gKiB8IDAgfCAwIHwgMSB8XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBNYXRyaXgoKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5iID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5jID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHkgPSAwO1xufVxuXG5NYXRyaXgucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWF0cml4O1xubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1hdHJpeCBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5LiBUaGUgRWxlbWVudCB0byBNYXRyaXggbWFwcGluZyBvcmRlciBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIGEgPSBhcnJheVswXVxuICogYiA9IGFycmF5WzFdXG4gKiBjID0gYXJyYXlbM11cbiAqIGQgPSBhcnJheVs0XVxuICogdHggPSBhcnJheVsyXVxuICogdHkgPSBhcnJheVs1XVxuICpcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119IFRoZSBhcnJheSB0aGF0IHRoZSBtYXRyaXggd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbS5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpXG57XG4gICAgdGhpcy5hID0gYXJyYXlbMF07XG4gICAgdGhpcy5iID0gYXJyYXlbMV07XG4gICAgdGhpcy5jID0gYXJyYXlbM107XG4gICAgdGhpcy5kID0gYXJyYXlbNF07XG4gICAgdGhpcy50eCA9IGFycmF5WzJdO1xuICAgIHRoaXMudHkgPSBhcnJheVs1XTtcbn07XG5cblxuLyoqXG4gKiBzZXRzIHRoZSBtYXRyaXggcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkXG4gKiBAcGFyYW0ge251bWJlcn0gdHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXG57XG4gICAgdGhpcy5hID0gYTtcbiAgICB0aGlzLmIgPSBiO1xuICAgIHRoaXMuYyA9IGM7XG4gICAgdGhpcy5kID0gZDtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy50eSA9IHR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmcm9tIHRoZSBjdXJyZW50IE1hdHJpeCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9zZSB7Ym9vbGVhbn0gV2hldGhlciB3ZSBuZWVkIHRvIHRyYW5zcG9zZSB0aGUgbWF0cml4IG9yIG5vdFxuICogQHBhcmFtIFtvdXRdIHtBcnJheX0gSWYgcHJvdmlkZWQgdGhlIGFycmF5IHdpbGwgYmUgYXNzaWduZWQgdG8gb3V0XG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gdGhlIG5ld2x5IGNyZWF0ZWQgYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAodHJhbnNwb3NlLCBvdXQpXG57XG4gICAgaWYgKCF0aGlzLmFycmF5KVxuICAgIHtcbiAgICAgICAgdGhpcy5hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gb3V0IHx8IHRoaXMuYXJyYXk7XG5cbiAgICBpZiAodHJhbnNwb3NlKVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVsyXSA9IDA7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSAwO1xuICAgICAgICBhcnJheVs2XSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzddID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzJdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzZdID0gMDtcbiAgICAgICAgYXJyYXlbN10gPSAwO1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZSB0byB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gcmVuZGVyaW5nKVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5hICogeCArIHRoaXMuYyAqIHkgKyB0aGlzLnR4O1xuICAgIG5ld1Bvcy55ID0gdGhpcy5iICogeCArIHRoaXMuZCAqIHkgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGludmVyc2Ugb2YgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UgdG8gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIGlucHV0KVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHlJbnZlcnNlID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciBpZCA9IDEgLyAodGhpcy5hICogdGhpcy5kICsgdGhpcy5jICogLXRoaXMuYik7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuZCAqIGlkICogeCArIC10aGlzLmMgKiBpZCAqIHkgKyAodGhpcy50eSAqIHRoaXMuYyAtIHRoaXMudHggKiB0aGlzLmQpICogaWQ7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmEgKiBpZCAqIHkgKyAtdGhpcy5iICogaWQgKiB4ICsgKC10aGlzLnR5ICogdGhpcy5hICsgdGhpcy50eCAqIHRoaXMuYikgKiBpZDtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdHJpeCBvbiB0aGUgeCBhbmQgeS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMudHggKz0geDtcbiAgICB0aGlzLnR5ICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIHNjYWxlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIGFtb3VudCB0byBzY2FsZSBob3Jpem9udGFsbHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSBhbW91bnQgdG8gc2NhbGUgdmVydGljYWxseVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2NhbGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmEgKj0geDtcbiAgICB0aGlzLmQgKj0geTtcbiAgICB0aGlzLmMgKj0geDtcbiAgICB0aGlzLmIgKj0geTtcbiAgICB0aGlzLnR4ICo9IHg7XG4gICAgdGhpcy50eSAqPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyBhIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpXG57XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKCBhbmdsZSApO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbiggYW5nbGUgKTtcblxuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICB0aGlzLmEgPSBhMSAqIGNvcy10aGlzLmIgKiBzaW47XG4gICAgdGhpcy5iID0gYTEgKiBzaW4rdGhpcy5iICogY29zO1xuICAgIHRoaXMuYyA9IGMxICogY29zLXRoaXMuZCAqIHNpbjtcbiAgICB0aGlzLmQgPSBjMSAqIHNpbit0aGlzLmQgKiBjb3M7XG4gICAgdGhpcy50eCA9IHR4MSAqIGNvcyAtIHRoaXMudHkgKiBzaW47XG4gICAgdGhpcy50eSA9IHR4MSAqIHNpbiArIHRoaXMudHkgKiBjb3M7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG5cbiAgICB0aGlzLmEgID0gbWF0cml4LmEgKiBhMSArIG1hdHJpeC5iICogYzE7XG4gICAgdGhpcy5iICA9IG1hdHJpeC5hICogYjEgKyBtYXRyaXguYiAqIGQxO1xuICAgIHRoaXMuYyAgPSBtYXRyaXguYyAqIGExICsgbWF0cml4LmQgKiBjMTtcbiAgICB0aGlzLmQgID0gbWF0cml4LmMgKiBiMSArIG1hdHJpeC5kICogZDE7XG5cbiAgICB0aGlzLnR4ID0gbWF0cml4LnR4ICogYTEgKyBtYXRyaXgudHkgKiBjMSArIHRoaXMudHg7XG4gICAgdGhpcy50eSA9IG1hdHJpeC50eCAqIGIxICsgbWF0cml4LnR5ICogZDEgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1hdHJpeCBiYXNlZCBvbiBhbGwgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RYXG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RZXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXG4gKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WFxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdZXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKHgsIHksIHBpdm90WCwgcGl2b3RZLCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSlcbntcbiAgICB2YXIgYSwgYiwgYywgZCwgc3IsIGNyLCBjeSwgc3ksIG5zeCwgY3g7XG5cbiAgICBzciAgPSBNYXRoLnNpbihyb3RhdGlvbik7XG4gICAgY3IgID0gTWF0aC5jb3Mocm90YXRpb24pO1xuICAgIGN5ICA9IE1hdGguY29zKHNrZXdZKTtcbiAgICBzeSAgPSBNYXRoLnNpbihza2V3WSk7XG4gICAgbnN4ID0gLU1hdGguc2luKHNrZXdYKTtcbiAgICBjeCAgPSAgTWF0aC5jb3Moc2tld1gpO1xuXG4gICAgYSAgPSAgY3IgKiBzY2FsZVg7XG4gICAgYiAgPSAgc3IgKiBzY2FsZVg7XG4gICAgYyAgPSAtc3IgKiBzY2FsZVk7XG4gICAgZCAgPSAgY3IgKiBzY2FsZVk7XG5cbiAgICB0aGlzLmEgID0gY3kgKiBhICsgc3kgKiBjO1xuICAgIHRoaXMuYiAgPSBjeSAqIGIgKyBzeSAqIGQ7XG4gICAgdGhpcy5jICA9IG5zeCAqIGEgKyBjeCAqIGM7XG4gICAgdGhpcy5kICA9IG5zeCAqIGIgKyBjeCAqIGQ7XG5cbiAgICB0aGlzLnR4ID0geCArICggcGl2b3RYICogYSArIHBpdm90WSAqIGMgKTtcbiAgICB0aGlzLnR5ID0geSArICggcGl2b3RYICogYiArIHBpdm90WSAqIGQgKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQcmVwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uKG1hdHJpeClcbntcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIGlmIChtYXRyaXguYSAhPT0gMSB8fCBtYXRyaXguYiAhPT0gMCB8fCBtYXRyaXguYyAhPT0gMCB8fCBtYXRyaXguZCAhPT0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICAgICAgdmFyIGMxID0gdGhpcy5jO1xuICAgICAgICB0aGlzLmEgID0gYTEqbWF0cml4LmErdGhpcy5iKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmIgID0gYTEqbWF0cml4LmIrdGhpcy5iKm1hdHJpeC5kO1xuICAgICAgICB0aGlzLmMgID0gYzEqbWF0cml4LmErdGhpcy5kKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmQgID0gYzEqbWF0cml4LmIrdGhpcy5kKm1hdHJpeC5kO1xuICAgIH1cblxuICAgIHRoaXMudHggPSB0eDEqbWF0cml4LmErdGhpcy50eSptYXRyaXguYyttYXRyaXgudHg7XG4gICAgdGhpcy50eSA9IHR4MSptYXRyaXguYit0aGlzLnR5Km1hdHJpeC5kK21hdHJpeC50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0ID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcbiAgICB2YXIgbiA9IGExKmQxLWIxKmMxO1xuXG4gICAgdGhpcy5hID0gZDEvbjtcbiAgICB0aGlzLmIgPSAtYjEvbjtcbiAgICB0aGlzLmMgPSAtYzEvbjtcbiAgICB0aGlzLmQgPSBhMS9uO1xuICAgIHRoaXMudHggPSAoYzEqdGhpcy50eS1kMSp0eDEpL247XG4gICAgdGhpcy50eSA9IC0oYTEqdGhpcy50eS1iMSp0eDEpL247XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBSZXNldHMgdGhpcyBNYXRpeCB0byBhbiBpZGVudGl0eSAoZGVmYXVsdCkgbWF0cml4LlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmlkZW50aXR5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmEgPSAxO1xuICAgIHRoaXMuYiA9IDA7XG4gICAgdGhpcy5jID0gMDtcbiAgICB0aGlzLmQgPSAxO1xuICAgIHRoaXMudHggPSAwO1xuICAgIHRoaXMudHkgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgTWF0cml4IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gQSBjb3B5IG9mIHRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgdmFsdWVzIG9mIHRoZSBnaXZlbiBtYXRyaXggdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZXMgaW4gdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhlIG1hdHJpeCBnaXZlbiBpbiBwYXJhbWV0ZXIgd2l0aCBpdHMgdmFsdWVzIHVwZGF0ZWQuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQSBkZWZhdWx0IChpZGVudGl0eSkgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5JREVOVElUWSA9IG5ldyBNYXRyaXgoKTtcblxuLyoqXG4gKiBBIHRlbXAgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5URU1QX01BVFJJWCA9IG5ldyBNYXRyaXgoKTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcbn1cblxuUG9pbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvaW50XG4gKlxuICogQHJldHVybiB7UElYSS5Qb2ludH0gYSBjb3B5IG9mIHRoZSBwb2ludFxuICovXG5Qb2ludC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBDb3BpZXMgeCBhbmQgeSBmcm9tIHRoZSBnaXZlbiBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICovXG5Qb2ludC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgdGhpcy5zZXQocC54LCBwLnkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGVxdWFsIHRvIHRoaXMgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gKHAueCA9PT0gdGhpcy54KSAmJiAocC55ID09PSB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5Qb2ludC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy54ID0geCB8fCAwO1xuICAgIHRoaXMueSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLnggOiAwICkgO1xufTtcbiIsIi8qKlxuICogTWF0aCBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgbWl4ZWQgaW50byBQSVhJIG5hbWVzcGFjZS5cbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBUaGVzZSB3aWxsIGJlIG1peGVkIHRvIGJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLFxuICAgIC8vIHdoaWxlIHRoaXMgbW9kdWxlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBjb3JlXG4gICAgLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBjdXQgZG93biBvblxuICAgIC8vIGludGVybmFsIG1vZHVsZSByZXF1aXJlcy5cblxuICAgIFBvaW50OiAgICAgIHJlcXVpcmUoJy4vUG9pbnQnKSxcbiAgICBNYXRyaXg6ICAgICByZXF1aXJlKCcuL01hdHJpeCcpLFxuXG4gICAgQ2lyY2xlOiAgICAgcmVxdWlyZSgnLi9zaGFwZXMvQ2lyY2xlJyksXG4gICAgRWxsaXBzZTogICAgcmVxdWlyZSgnLi9zaGFwZXMvRWxsaXBzZScpLFxuICAgIFBvbHlnb246ICAgIHJlcXVpcmUoJy4vc2hhcGVzL1BvbHlnb24nKSxcbiAgICBSZWN0YW5nbGU6ICByZXF1aXJlKCcuL3NoYXBlcy9SZWN0YW5nbGUnKSxcbiAgICBSb3VuZGVkUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlJylcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIENpcmNsZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICovXG5mdW5jdGlvbiBDaXJjbGUoeCwgeSwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkNJUkM7XG59XG5cbkNpcmNsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaXJjbGU7XG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBDaXJjbGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkNpcmNsZX0gYSBjb3B5IG9mIHRoZSBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBDaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBjaXJjbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmFkaXVzIDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGR4ID0gKHRoaXMueCAtIHgpLFxuICAgICAgICBkeSA9ICh0aGlzLnkgLSB5KSxcbiAgICAgICAgcjIgPSB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzO1xuXG4gICAgZHggKj0gZHg7XG4gICAgZHkgKj0gZHk7XG5cbiAgICByZXR1cm4gKGR4ICsgZHkgPD0gcjIpO1xufTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBjaXJjbGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4qIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiovXG5DaXJjbGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy5yYWRpdXMsIHRoaXMueSAtIHRoaXMucmFkaXVzLCB0aGlzLnJhZGl1cyAqIDIsIHRoaXMucmFkaXVzICogMik7XG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBFbGxpcHNlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGlzIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZVxuICovXG5mdW5jdGlvbiBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkVMSVA7XG59XG5cbkVsbGlwc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRWxsaXBzZTtcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBFbGxpcHNlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5FbGxpcHNlfSBhIGNvcHkgb2YgdGhlIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgRWxsaXBzZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRzIGFyZSB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vbm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDBcbiAgICB2YXIgbm9ybXggPSAoKHggLSB0aGlzLngpIC8gdGhpcy53aWR0aCksXG4gICAgICAgIG5vcm15ID0gKCh5IC0gdGhpcy55KSAvIHRoaXMuaGVpZ2h0KTtcblxuICAgIG5vcm14ICo9IG5vcm14O1xuICAgIG5vcm15ICo9IG5vcm15O1xuXG4gICAgcmV0dXJuIChub3JteCArIG5vcm15IDw9IDEpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgZWxsaXBzZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy53aWR0aCwgdGhpcy55IC0gdGhpcy5oZWlnaHQsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG4iLCJ2YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9Qb2ludCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcG9pbnRzIHtQSVhJLlBvaW50W118bnVtYmVyW118Li4uUElYSS5Qb2ludHwuLi5udW1iZXJ9IFRoaXMgY2FuIGJlIGFuIGFycmF5IG9mIFBvaW50cyB0aGF0IGZvcm0gdGhlIHBvbHlnb24sXG4gKiAgICAgIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIHRoYXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBbeCx5LCB4LHksIC4uLl0sIG9yIHRoZSBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZVxuICogICAgICBhbGwgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvbiBlLmcuIGBuZXcgUElYSS5Qb2x5Z29uKG5ldyBQSVhJLlBvaW50KCksIG5ldyBQSVhJLlBvaW50KCksIC4uLilgLCBvciB0aGVcbiAqICAgICAgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmUgZmxhdCB4LHkgdmFsdWVzIGUuZy4gYG5ldyBQb2x5Z29uKHgseSwgeCx5LCB4LHksIC4uLilgIHdoZXJlIGB4YCBhbmQgYHlgIGFyZVxuICogICAgICBOdW1iZXJzLlxuICovXG5mdW5jdGlvbiBQb2x5Z29uKHBvaW50c18pXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBvaW50c187XG5cbiAgICAvL2lmIHBvaW50cyBpc24ndCBhbiBhcnJheSwgdXNlIGFyZ3VtZW50cyBhcyB0aGUgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgcG9pbnRzLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICBwb2ludHNbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IG9mIHBvaW50cywgY29udmVydCBpdCB0byBhIGZsYXQgYXJyYXkgb2YgbnVtYmVyc1xuICAgIGlmIChwb2ludHNbMF0gaW5zdGFuY2VvZiBQb2ludClcbiAgICB7XG4gICAgICAgIHZhciBwID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBwLnB1c2gocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50cyA9IHA7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5QT0xZO1xufVxuXG5Qb2x5Z29uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvbHlnb247XG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9seWdvblxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9seWdvbn0gYSBjb3B5IG9mIHRoZSBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvbHlnb24odGhpcy5wb2ludHMuc2xpY2UoKSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcG9seWdvblxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBpbnNpZGUgPSBmYWxzZTtcblxuICAgIC8vIHVzZSBzb21lIHJheWNhc3RpbmcgdG8gdGVzdCBoaXRzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL3BvaW50LWluLXBvbHlnb24vYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5wb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbGVuZ3RoIC0gMTsgaSA8IGxlbmd0aDsgaiA9IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB4aSA9IHRoaXMucG9pbnRzW2kgKiAyXSwgeWkgPSB0aGlzLnBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgeGogPSB0aGlzLnBvaW50c1tqICogMl0sIHlqID0gdGhpcy5wb2ludHNbaiAqIDIgKyAxXSxcbiAgICAgICAgICAgIGludGVyc2VjdCA9ICgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICh4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aSk7XG5cbiAgICAgICAgaWYgKGludGVyc2VjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiB0aGUgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcmVjdGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SRUNUO1xufVxuXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XG5cbi8qKlxuICogQSBjb25zdGFudCBlbXB0eSByZWN0YW5nbGUuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblJlY3RhbmdsZS5FTVBUWSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDwgdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDwgdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFJvdW5kZWQgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIHRoYXQgaGFzIG5pY2Ugcm91bmRlZCBjb3JuZXJzLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodCBhbmQgaXRzIHJhZGl1cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gQ29udHJvbHMgdGhlIHJhZGl1cyBvZiB0aGUgcm91bmRlZCBjb3JuZXJzXG4gKi9cbmZ1bmN0aW9uIFJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJSRUM7XG59XG5cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm91bmRlZFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUm91bmRlZFJlY3RhbmdsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUm91bmRlZFJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSb3VuZGVkUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8PSB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUGFydGljbGVDb250YWluZXIgY2xhc3MgaXMgYSByZWFsbHkgZmFzdCB2ZXJzaW9uIG9mIHRoZSBDb250YWluZXIgYnVpbHQgc29sZWx5IGZvciBzcGVlZCxcbiAqIHNvIHVzZSB3aGVuIHlvdSBuZWVkIGEgbG90IG9mIHNwcml0ZXMgb3IgcGFydGljbGVzLiBUaGUgdHJhZGVvZmYgb2YgdGhlIFBhcnRpY2xlQ29udGFpbmVyIGlzIHRoYXQgYWR2YW5jZWRcbiAqIGZ1bmN0aW9uYWxpdHkgd2lsbCBub3Qgd29yay4gUGFydGljbGVDb250YWluZXIgaW1wbGVtZW50cyBvbmx5IHRoZSBiYXNpYyBvYmplY3QgdHJhbnNmb3JtIChwb3NpdGlvbiwgc2NhbGUsIHJvdGF0aW9uKS5cbiAqIEFueSBvdGhlciBmdW5jdGlvbmFsaXR5IGxpa2UgdGludGluZywgbWFza2luZywgZXRjIHdpbGwgbm90IHdvcmsgb24gc3ByaXRlcyBpbiB0aGlzIGJhdGNoLlxuICpcbiAqIEl0J3MgZXh0cmVtZWx5IGVhc3kgdG8gdXNlIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQYXJ0aWNsZUNvbnRhaW5lcigpO1xuICpcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpXG4gKiB7XG4gKiAgICAgdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJteUltYWdlLnBuZ1wiKTtcbiAqICAgICBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEFuZCBoZXJlIHlvdSBoYXZlIGEgaHVuZHJlZCBzcHJpdGVzIHRoYXQgd2lsbCBiZSByZW5kZXJlciBhdCB0aGUgc3BlZWQgb2YgbGlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbbWF4U2l6ZT0xNTAwMF0ge251bWJlcn0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGF0IGNhbiBiZSByZW5kZXJlciBieSB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzXSB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyBvZiBjaGlsZHJlbiB0aGF0IHNob3VsZCBiZSB1cGxvYWRlZCB0byB0aGUgZ3B1IGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnNjYWxlPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBzY2FsZSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5wb3NpdGlvbj10cnVlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBwb3NpdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5yb3RhdGlvbj1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcm90YXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMudXZzPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCB1dnMgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuYWxwaGE9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIGFscGhhIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtiYXRjaFNpemU9MTUwMDBdIHtudW1iZXJ9IE51bWJlciBvZiBwYXJ0aWNsZXMgcGVyIGJhdGNoLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUNvbnRhaW5lcihtYXhTaXplLCBwcm9wZXJ0aWVzLCBiYXRjaFNpemUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBiYXRjaFNpemUgPSBiYXRjaFNpemUgfHwgMTUwMDA7IC8vQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG4gICAgbWF4U2l6ZSA9IG1heFNpemUgfHwgMTUwMDA7XG5cbiAgICAvLyBNYWtpbmcgc3VyZSB0aGUgYmF0Y2ggc2l6ZSBpcyB2YWxpZFxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICB2YXIgbWF4QmF0Y2hTaXplID0gMTYzODQ7XG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhCYXRjaFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgcHJvcGVydGllcyB0byBiZSBkeW5hbWljICh0cnVlKSAvIHN0YXRpYyAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFuW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmF0Y2hTaXplID0gYmF0Y2hTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICpcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlQ2hpbGRyZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBjYW52YXMgcmVuZGVyZXJpbmcuIElmIHRydWUgdGhlbiB0aGUgZWxlbWVudHMgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBuZWFyZXN0IHBpeGVsLiBUaGlzIHByb3ZpZGVzIGEgbmljZSBzcGVlZCBib29zdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZTtcbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbn1cblxuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBwcml2YXRlIHByb3BlcnRpZXMgYXJyYXkgdG8gZHluYW1pYyAvIHN0YXRpYyBiYXNlZCBvbiB0aGUgcGFzc2VkIHByb3BlcnRpZXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMge29iamVjdH0gVGhlIHByb3BlcnRpZXMgdG8gYmUgdXBsb2FkZWRcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnNldFByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKVxue1xuICAgIGlmICggcHJvcGVydGllcyApIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1swXSA9ICdzY2FsZScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5zY2FsZSA6IHRoaXMuX3Byb3BlcnRpZXNbMF07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMV0gPSAncG9zaXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucG9zaXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzFdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzJdID0gJ3JvdGF0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnJvdGF0aW9uIDogdGhpcy5fcHJvcGVydGllc1syXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1szXSA9ICd1dnMnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMudXZzIDogdGhpcy5fcHJvcGVydGllc1szXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1s0XSA9ICdhbHBoYScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5hbHBoYSA6IHRoaXMuX3Byb3BlcnRpZXNbNF07XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcblxuICAgIC8vIFRPRE8gZG9uJ3QgbmVlZCB0byFcbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAvLyAgUElYSS5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybS5jYWxsKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRhaW5lciB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHdlYmdsIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIoIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUgKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlLnJlbmRlciggdGhpcyApO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGZsYWcgdGhhdCBzdGF0aWMgZGF0YSBzaG91bGQgYmUgdXBkYXRlZCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoc21hbGxlc3RDaGlsZEluZGV4KVxue1xuICAgIHZhciBidWZmZXJJbmRleCA9IE1hdGguZmxvb3Ioc21hbGxlc3RDaGlsZEluZGV4IC8gdGhpcy5fYmF0Y2hTaXplKTtcbiAgICBpZiAoYnVmZmVySW5kZXggPCB0aGlzLl9idWZmZXJUb1VwZGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IGJ1ZmZlckluZGV4O1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciBpc1JvdGF0ZWQgPSB0cnVlO1xuXG4gICAgdmFyIHBvc2l0aW9uWCA9IDA7XG4gICAgdmFyIHBvc2l0aW9uWSA9IDA7XG5cbiAgICB2YXIgZmluYWxXaWR0aCA9IDA7XG4gICAgdmFyIGZpbmFsSGVpZ2h0ID0gMDtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZSA9IGNoaWxkLnRleHR1cmUuZnJhbWU7XG5cbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYSAqIGNoaWxkLmFscGhhO1xuXG4gICAgICAgIGlmIChjaGlsZC5yb3RhdGlvbiAlIChNYXRoLlBJICogMikgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZhc3Rlc3QgIHdheSB0byBvcHRpbWlzZSEgLSBpZiByb3RhdGlvbiBpcyAwIHRoZW4gd2UgY2FuIGF2b2lkIGFueSBraW5kIG9mIHNldFRyYW5zZm9ybSBjYWxsXG4gICAgICAgICAgICBpZiAoaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLngpICsgY2hpbGQucG9zaXRpb24ueCAgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnkpICsgY2hpbGQucG9zaXRpb24ueSAgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54O1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55O1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZC5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZFRyYW5zZm9ybSA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHkgfCAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoKSArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0KSArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICBjaGlsZC50ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgIGZyYW1lLngsXG4gICAgICAgICAgICBmcmFtZS55LFxuICAgICAgICAgICAgZnJhbWUud2lkdGgsXG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQsXG4gICAgICAgICAgICBwb3NpdGlvblgsXG4gICAgICAgICAgICBwb3NpdGlvblksXG4gICAgICAgICAgICBmaW5hbFdpZHRoLFxuICAgICAgICAgICAgZmluYWxIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIGlmICh0aGlzLl9idWZmZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcbn07XG4iLCJcbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVCdWZmZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlQnVmZmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFRoZSBwYXJ0aWNsZSBidWZmZXIgbWFuYWdlcyB0aGUgc3RhdGljIGFuZCBkeW5hbWljIGJ1ZmZlcnMgZm9yIGEgcGFydGljbGUgY29udGFpbmVyLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQnVmZmVyKGdsLCBwcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgc2l6ZSlcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleCBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhlIGJ1ZmZlciBjYW4gaG9sZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgZHluYW1pYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBzdGF0aWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgaWYoZHluYW1pY1Byb3BlcnR5RmxhZ3NbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRCdWZmZXJzKCk7XG5cbn1cblxuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQnVmZmVyO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5pbml0QnVmZmVycyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcHJvcGVydHk7XG5cbiAgICB2YXIgZHluYW1pY09mZnNldCA9IDA7XG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IGR5bmFtaWNPZmZzZXQ7XG4gICAgICAgIGR5bmFtaWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5keW5hbWljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG5cblxuICAgIC8vIHN0YXRpYyAvL1xuICAgIHZhciBzdGF0aWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBzdGF0aWNPZmZzZXQ7XG4gICAgICAgIHN0YXRpY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLnN0YXRpY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuc3RhdGljU3RyaWRlICogNCk7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZHluYW1pYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZER5bmFtaWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLmR5bmFtaWNEYXRhLCB0aGlzLmR5bmFtaWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuZHluYW1pY0RhdGEpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBzdGF0aWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWRTdGF0aWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5zdGF0aWNEYXRhLCB0aGlzLnN0YXRpY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLnN0YXRpY0RhdGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyB0byB0aGUgR1BVXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaSwgcHJvcGVydHk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnN0YXRpY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlQnVmZmVyLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5zdGF0aWNCdWZmZXIpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlU2hhZGVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZVNoYWRlcicpLFxuICAgIFBhcnRpY2xlQnVmZmVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUJ1ZmZlcicpLFxuICAgIG1hdGggICAgICAgICAgICA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgLy8gYW5kIG1heCBudW1iZXIgb2YgZWxlbWVudCBpbiB0aGUgaW5kZXggYnVmZmVyIGlzIDE2Mzg0ICogNiA9IDk4MzA0XG4gICAgLy8gQ3JlYXRpbmcgYSBmdWxsIGluZGV4IGJ1ZmZlciwgb3ZlcmhlYWQgaXMgOTgzMDQgKiAyID0gMTk2S29cbiAgICB2YXIgbnVtSW5kaWNlcyA9IDk4MzA0O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShudW1JbmRpY2VzKTtcblxuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgbnVtSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IG51bGw7XG5cbiAgICB0aGlzLnRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcbn1cblxuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3BhcnRpY2xlJywgUGFydGljbGVSZW5kZXJlcik7XG5cbi8qKlxuICogV2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IG5ldyBQYXJ0aWNsZVNoYWRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIpO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IGluZGV4LCBzbyA2NTUzNSAvIDYgPSAxMDkyMi5cblxuICAgIC8vdXBsb2FkIHRoZSBpbmRleCBkYXRhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBbXG4gICAgICAgIC8vIHZlcnRpY2VzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFZlcnRpY2VzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcG9zaXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbkNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRQb3NpdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJvdGF0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUm90YXRpb24sXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFJvdGF0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdXZzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRVdnMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBhbHBoYURhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRBbHBoYSxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgcGFydGljbGUgYmF0Y2guXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGJpbmQgdGhlIG1haW4gdGV4dHVyZVxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgLy8gYmluZCB0aGUgYnVmZmVyc1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgcGFydGljbGUgY29udGFpbmVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgY2hpbGRyZW4gPSBjb250YWluZXIuY2hpbGRyZW4sXG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIG1heFNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplO1xuXG4gICAgaWYodG90YWxDaGlsZHJlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZih0b3RhbENoaWxkcmVuID4gbWF4U2l6ZSlcbiAgICB7XG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBtYXhTaXplO1xuICAgIH1cblxuICAgIGlmKCFjb250YWluZXIuX2J1ZmZlcnMpXG4gICAge1xuICAgICAgICBjb250YWluZXIuX2J1ZmZlcnMgPSB0aGlzLmdlbmVyYXRlQnVmZmVycyggY29udGFpbmVyICk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29udGFpbmVyLmJsZW5kTW9kZSk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIG0gPSAgY29udGFpbmVyLndvcmxkVHJhbnNmb3JtLmNvcHkoIHRoaXMudGVtcE1hdHJpeCApO1xuICAgIG0ucHJlcGVuZCggdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXggKTtcbiAgICBnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgbS50b0FycmF5KHRydWUpKTtcbiAgICBnbC51bmlmb3JtMWYodGhpcy5zaGFkZXIudW5pZm9ybXMudUFscGhhLl9sb2NhdGlvbiwgY29udGFpbmVyLndvcmxkQWxwaGEpO1xuXG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHRleHR1cmUgaXMgYm91bmQuLlxuICAgIHZhciBiYXNlVGV4dHVyZSA9IGNoaWxkcmVuWzBdLl90ZXh0dXJlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgdGV4dHVyZSBoYXMgbm90IHVwZGF0ZWQgdGhlbiBsZXRzIG5vdCB1cGxvYWQgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmKCF0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUoYmFzZVRleHR1cmUpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZighY29udGFpbmVyLl9wcm9wZXJ0aWVzWzBdIHx8ICFjb250YWluZXIuX3Byb3BlcnRpZXNbM10pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgfVxuXG4gICAgLy8gbm93IGxldHMgdXBsb2FkIGFuZCByZW5kZXIgdGhlIGJ1ZmZlcnMuLlxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IHRvdGFsQ2hpbGRyZW47IGkgKz0gYmF0Y2hTaXplLCBqICs9IDEpXG4gICAge1xuICAgICAgICB2YXIgYW1vdW50ID0gKCB0b3RhbENoaWxkcmVuIC0gaSk7XG4gICAgICAgIGlmKGFtb3VudCA+IGJhdGNoU2l6ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50ID0gYmF0Y2hTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRhaW5lci5fYnVmZmVyc1tqXTtcblxuICAgICAgICAvLyB3ZSBhbHdheXMgdXBsb2FkIHRoZSBkeW5hbWljXG4gICAgICAgIGJ1ZmZlci51cGxvYWREeW5hbWljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuXG4gICAgICAgIC8vIHdlIG9ubHkgdXBsb2FkIHRoZSBzdGF0aWMgY29udGVudCB3aGVuIHdlIGhhdmUgdG8hXG4gICAgICAgIGlmKGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPT09IGopXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJ1ZmZlci51cGxvYWRTdGF0aWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gaiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5kIHRoZSBidWZmZXJcbiAgICAgICAgYnVmZmVyLmJpbmQoIHRoaXMuc2hhZGVyICk7XG5cbiAgICAgICAgIC8vIG5vdyBkcmF3IHRob3NlIHN1Y2thcyFcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgYW1vdW50ICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBvbmUgcGFydGljbGUgYnVmZmVyIGZvciBlYWNoIGNoaWxkIGluIHRoZSBjb250YWluZXIgd2Ugd2FudCB0byByZW5kZXIgYW5kIHVwZGF0ZXMgaW50ZXJuYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5nZW5lcmF0ZUJ1ZmZlcnMgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIGJ1ZmZlcnMgPSBbXSxcbiAgICAgICAgc2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemUsXG4gICAgICAgIGR5bmFtaWNQcm9wZXJ0eUZsYWdzID0gY29udGFpbmVyLl9wcm9wZXJ0aWVzLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gYmF0Y2hTaXplKVxuICAgIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKG5ldyBQYXJ0aWNsZUJ1ZmZlcihnbCwgdGhpcy5wcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgYmF0Y2hTaXplKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHZlcnRpY2llcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgdmVydGljZXMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFZlcnRpY2VzID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICB2YXIgc3ByaXRlLFxuICAgICAgICB0ZXh0dXJlLFxuICAgICAgICB0cmltLFxuICAgICAgICBzeCxcbiAgICAgICAgc3ksXG4gICAgICAgIHcwLCB3MSwgaDAsIGgxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xuXG4gICAgICAgIHNwcml0ZSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXTtcbiAgICAgICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZTtcbiAgICAgICAgc3ggPSBzcHJpdGUuc2NhbGUueDtcbiAgICAgICAgc3kgPSBzcHJpdGUuc2NhbGUueTtcblxuICAgICAgICBpZiAodGV4dHVyZS50cmltKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgICAgICB0cmltID0gdGV4dHVyZS50cmltO1xuXG4gICAgICAgICAgICB3MSA9IHRyaW0ueCAtIHNwcml0ZS5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBoMSA9IHRyaW0ueSAtIHNwcml0ZS5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtc3ByaXRlLmFuY2hvci54KTtcbiAgICAgICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtc3ByaXRlLmFuY2hvci54O1xuXG4gICAgICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXNwcml0ZS5hbmNob3IueSk7XG4gICAgICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC1zcHJpdGUuYW5jaG9yLnk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBwb3NpdGlvbnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFBvc2l0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUG9zaXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucG9zaXRpb247XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcm90YXRpb24gdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFJvdGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUm90YXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucm90YXRpb247XG5cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVSb3RhdGlvbjtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgVXZzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRVdnMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlVXZzID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLl90ZXh0dXJlLl91dnM7XG5cbiAgICAgICAgaWYgKHRleHR1cmVVdnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSB0ZXh0dXJlVXZzLngwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZXh0dXJlVXZzLnkwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdGV4dHVyZVV2cy54MTtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gdGV4dHVyZVV2cy55MTtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB0ZXh0dXJlVXZzLngyO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gdGV4dHVyZVV2cy55MjtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB0ZXh0dXJlVXZzLngzO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gdGV4dHVyZVV2cy55MztcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8geW91IGtub3cgdGhpcyBjYW4gYmUgZWFzaWVyIVxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBhbHBoYSB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkQWxwaGEgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZUFscGhhID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLmFscGhhO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZUFscGhhO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVSZW5kZXJlci5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuICAgIHRoaXMudGVtcE1hdHJpeCA9IG51bGw7XG59O1xuIiwidmFyIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVTaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBUZXh0dXJlU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFQb3NpdGlvbkNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVNjYWxlOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFSb3RhdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIHZlYzIgdiA9IGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAnICAgdi54ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIGNvcyhhUm90YXRpb24pIC0gKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIHNpbihhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdi55ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIHNpbihhUm90YXRpb24pICsgKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIGNvcyhhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdiA9IHYgKyBhUG9zaXRpb25Db29yZDsnLFxuXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyh2LCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGhlbGxvXG4gICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCB1QWxwaGE7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3IgKiB1QWxwaGE7JyxcbiAgICAgICAgICAgICcgIGlmIChjb2xvci5hID09IDAuMCkgZGlzY2FyZDsnLFxuICAgICAgICAgICAgJyAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdUFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFQb3NpdGlvbkNvb3JkOiAwLFxuICAgICAgICAgICAvLyBhU2NhbGU6ICAgICAgICAgMCxcbiAgICAgICAgICAgIGFSb3RhdGlvbjogICAgICAwXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVEVNUCBIQUNLXG5cbn1cblxuUGFydGljbGVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlU2hhZGVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVNoYWRlcjtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHN5c3RlbSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgc3lzdGVtIHRoaXMgcmVuZGVyZXIgaXMgZm9yLlxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXSB7bnVtYmVyfSBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcmVuZGVyZWQgYXJlYSAoc2hvd24gaWYgbm90IHRyYW5zcGFyZW50KS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5yb3VuZFBpeGVscz1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBTeXN0ZW1SZW5kZXJlcihzeXN0ZW0sIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB1dGlscy5zYXlIZWxsbyhzeXN0ZW0pO1xuXG4gICAgLy8gcHJlcGFyZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpIGluIENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tpXSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgb3B0aW9ucyA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHNlZSBQSVhJLlJFTkRFUkVSX1RZUEVcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgODAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDgwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgNjAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy52aWV3ID0gb3B0aW9ucy52aWV3IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG9wdGlvbnMucmVzb2x1dGlvbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBvcHRpb25zLnRyYW5zcGFyZW50O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgc2hvdWxkIGJlIHJlc2l6ZWQgYXV0b21hdGljYWxseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvcHRpb25zLmF1dG9SZXNpemUgfHwgZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIGJsZW5kIG1vZGVzIHVzZWZ1bCBmb3IgdGhpcyByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG1peGVkPn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgZmxhZyBhZmZlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50cyBvZiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgcmV0YWluZWQgYWZ0ZXIgcmVuZGVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3Igbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyBOT1QgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBhIGNhbnZhcyBzaXplZCBmaWxsUmVjdCBvcGVyYXRpb24gZXZlcnkgZnJhbWUgdG8gc2V0IHRoZSBjYW52YXMgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBjbGVhclJlY3QgdG8gY2xlYXIgdGhlIGNhbnZhcyBldmVyeSBmcmFtZS5cbiAgICAgKiBEaXNhYmxlIHRoaXMgYnkgc2V0dGluZyB0aGlzIHRvIGZhbHNlLiBGb3IgZXhhbXBsZSBpZiB5b3VyIGdhbWUgaGFzIGEgY2FudmFzIGZpbGxpbmcgYmFja2dyb3VuZCBpbWFnZSB5b3Ugb2Z0ZW4gZG9uJ3QgbmVlZCB0aGlzIHNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHRcbiAgICAgKi9cbiAgICB0aGlzLmNsZWFyQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICAgICAqIEhhbmR5IGZvciBjcmlzcCBwaXhlbCBhcnQgYW5kIHNwZWVkIG9uIGxlZ2FjeSBkZXZpY2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gb3B0aW9ucy5yb3VuZFBpeGVscztcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmEgPSBbMCwgMCwgMCwgMF07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9ICcjMDAwMDAwJztcblxuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yOyAvLyBydW4gYmcgY29sb3Igc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgdHJhbnNmb3JtOnt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKX0sIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3Qgcm9vdCBvYmplY3QgdGhhdCB0aGUgcmVuZGVyZXIgdHJpZWQgdG8gcmVuZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3lzdGVtUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFN5c3RlbVJlbmRlcmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciB0byBmaWxsIGlmIG5vdCB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlN5c3RlbVJlbmRlcmVyI1xuICAgICAqL1xuICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSB1dGlscy5oZXgyc3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB1dGlscy5oZXgycmdiKHZhbCwgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBjYW52YXMgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMudmlldy53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGhpcy52aWV3LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgICAgICB0aGlzLnZpZXcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpIHtcbiAgICBpZiAocmVtb3ZlVmlldyAmJiB0aGlzLnZpZXcucGFyZW50Tm9kZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMudmlldyk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgdGhpcy52aWV3ID0gbnVsbDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IDA7XG5cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBmYWxzZTtcblxuICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcblxuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDA7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IG51bGw7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gbnVsbDtcbn07XG4iLCJ2YXIgU3lzdGVtUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9TeXN0ZW1SZW5kZXJlcicpLFxuICAgIENhbnZhc01hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi91dGlscy9DYW52YXNNYXNrTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBTeXN0ZW1SZW5kZXJlci5jYWxsKHRoaXMsICdDYW52YXMnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuQ0FOVkFTO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMudmlldy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIGZsYWcgY29udHJvbGxpbmcgY2FudmFzIHJlZnJlc2guXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVmcmVzaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBhIENhbnZhc01hc2tNYW5hZ2VyLCBoYW5kbGVzIG1hc2tpbmcgd2hlbiB1c2luZyB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNNYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IENhbnZhc01hc2tNYW5hZ2VyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIHByb3BlcnR5IHVzZWQgdG8gc2V0IHRoZSBjYW52YXMgc21vb3RoaW5nIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnaW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcblxuICAgIGlmICghdGhpcy5jb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ3dlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ29JbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB0aGlzLl9tYXBCbGVuZE1vZGVzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHtcbiAgICAgICAgd29ybGRUcmFuc2Zvcm06IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgICAgICB3b3JsZEFscGhhOiAxXG4gICAgfTtcblxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oQ2FudmFzUmVuZGVyZXIpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byB0aGlzIGNhbnZhcyB2aWV3XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSB0aGUgb2JqZWN0IHRvIGJlIHJlbmRlcmVkXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KVxue1xuICAgIHRoaXMuZW1pdCgncHJlcmVuZGVyJyk7XG5cbiAgICB2YXIgY2FjaGVQYXJlbnQgPSBvYmplY3QucGFyZW50O1xuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gb2JqZWN0O1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIG9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIG9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTICYmIHRoaXMudmlldy5zY3JlZW5jYW52YXMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpXG4gICAge1xuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGggLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlckRpc3BsYXlPYmplY3Qob2JqZWN0LCB0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciBhbmQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSBDYW52YXMgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIFtyZW1vdmVWaWV3PWZhbHNlXSB7Ym9vbGVhbn0gUmVtb3ZlcyB0aGUgQ2FudmFzIGVsZW1lbnQgZnJvbSB0aGUgRE9NLlxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIGNhbGwgdGhlIGJhc2UgZGVzdHJveVxuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcywgcmVtb3ZlVmlldyk7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5T2JqZWN0IHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgY29udGV4dClcbntcbiAgICB2YXIgdGVtcENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyQ2FudmFzKHRoaXMpO1xuICAgIHRoaXMuY29udGV4dCA9IHRlbXBDb250ZXh0O1xufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBQSVhJLlN5c3RlbVJlbmRlcmVyI3Jlc2l6ZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKiBAcGFyYW0ge251bWJlcn0gaFxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHcsIGgpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xuXG4gICAgLy9yZXNldCB0aGUgc2NhbGUgbW9kZS4uIG9kZGx5IHRoaXMgc2VlbXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgY2FudmFzIGlzIHJlc2l6ZWQuXG4gICAgLy9zdXJlbHkgYSBicm93c2VyIGJ1Zz8/IExldCBwaXhpIGZpeCB0aGF0IGZvciB5b3UuLlxuICAgIGlmKHRoaXMuc21vb3RoUHJvcGVydHkpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHRbdGhpcy5zbW9vdGhQcm9wZXJ0eV0gPSAoQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVCA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogTWFwcyBQaXhpIGJsZW5kIG1vZGVzIHRvIGNhbnZhcyBibGVuZCBtb2Rlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX21hcEJsZW5kTW9kZXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5ibGVuZE1vZGVzKVxuICAgIHtcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzID0ge307XG5cbiAgICAgICAgaWYgKHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnbXVsdGlwbHknO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NjcmVlbic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSAnb3ZlcmxheSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnZGFya2VuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MSUdIVEVOXSAgICAgICA9ICdsaWdodGVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdjb2xvci1kb2RnZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnY29sb3ItYnVybic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnaGFyZC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSAnc29mdC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnZGlmZmVyZW5jZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnZXhjbHVzaW9uJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdodWUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gJ3NhdHVyYXRlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl0gICAgICAgICA9ICdjb2xvcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSAnbHVtaW5vc2l0eSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29vbCBuZXcgYmxlbmQgbW9kZXMgaW4gY2FudmFzICdjb3VnaCcgaWUgJ2NvdWdoJ1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNpemUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGNhbnZhc1xuICovXG5mdW5jdGlvbiBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgQ2FudmFzIG9iamVjdCB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBDYW52YXNCdWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogQSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHR3by1kaW1lbnNpb25hbCByZW5kZXJpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59XG5cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0J1ZmZlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FudmFzQnVmZmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIGJ1ZmZlciBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ2FudmFzQnVmZmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdmFsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGNhbnZhcyB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZSBDYW52YXNCdWZmZXIgY2xhc3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbnZhc1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgY2FudmFzLlxuICpcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBjYW52YXMgcmVuZGVyZXIgdG8gZHJhdyB0aGUgcHJpbWl0aXZlIGdyYXBoaWNzIGRhdGEuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNHcmFwaGljcyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNHcmFwaGljcztcblxuLypcbiAqIFJlbmRlcnMgYSBHcmFwaGljcyBvYmplY3QgdG8gYSBjYW52YXMuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgYWN0dWFsIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSAyZCBkcmF3aW5nIG1ldGhvZCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciB3b3JsZEFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuICAgIGlmIChncmFwaGljcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3NUaW50KGdyYXBoaWNzKTtcbiAgICAgICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLl9maWxsVGludDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEuX2xpbmVUaW50O1xuXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZSBjbG9zZSB0aGUgcGF0aCAtIG11Y2ggbmVhdGVyIDopXG4gICAgICAgICAgICBpZiAocG9pbnRzWzBdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAmJiBwb2ludHNbMV0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbENvbG9yIHx8IGRhdGEuZmlsbENvbG9yID09PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmZpbGxBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggZmlsbENvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUud2lkdGgsIHNoYXBlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLDAsMipNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVsbGlwc2UgY29kZSB0YWtlbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcblxuICAgICAgICAgICAgdmFyIHcgPSBzaGFwZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB2YXIgaCA9IHNoYXBlLmhlaWdodCAqIDI7XG5cbiAgICAgICAgICAgIHZhciB4ID0gc2hhcGUueCAtIHcvMjtcbiAgICAgICAgICAgIHZhciB5ID0gc2hhcGUueSAtIGgvMjtcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIGthcHBhID0gMC41NTIyODQ4LFxuICAgICAgICAgICAgICAgIG94ID0gKHcgLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgb3kgPSAoaCAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgeGUgPSB4ICsgdywgICAgICAgICAgIC8vIHgtZW5kXG4gICAgICAgICAgICAgICAgeWUgPSB5ICsgaCwgICAgICAgICAgIC8vIHktZW5kXG4gICAgICAgICAgICAgICAgeG0gPSB4ICsgdyAvIDIsICAgICAgIC8vIHgtbWlkZGxlXG4gICAgICAgICAgICAgICAgeW0gPSB5ICsgaCAvIDI7ICAgICAgIC8vIHktbWlkZGxlXG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG1hc2tcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3Mgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgbWFza1xuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGNvbnRleHQgMmQgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciBsZW4gPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gVE9ETyAtIG5lZWQgdG8gYmUgVW5kZWZpbmVkIVxuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgcnggPSBzaGFwZS54O1xuICAgICAgICAgICAgdmFyIHJ5ID0gc2hhcGUueTtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcbiAgICAgICAgICAgIHZhciByYWRpdXMgPSBzaGFwZS5yYWRpdXM7XG5cbiAgICAgICAgICAgIHZhciBtYXhSYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDIgfCAwO1xuICAgICAgICAgICAgcmFkaXVzID0gcmFkaXVzID4gbWF4UmFkaXVzID8gbWF4UmFkaXVzIDogcmFkaXVzO1xuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRpbnQgb2YgYSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3MgdGhhdCB3aWxsIGhhdmUgaXRzIHRpbnQgdXBkYXRlZFxuICpcbiAqL1xuQ2FudmFzR3JhcGhpY3MudXBkYXRlR3JhcGhpY3NUaW50ID0gZnVuY3Rpb24gKGdyYXBoaWNzKVxue1xuICAgIGlmIChncmFwaGljcy50aW50ID09PSAweEZGRkZGRiAmJiBncmFwaGljcy5fcHJldlRpbnQgPT09IGdyYXBoaWNzLnRpbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyYXBoaWNzLl9wcmV2VGludCA9IGdyYXBoaWNzLnRpbnQ7XG5cbiAgICB2YXIgdGludFIgPSAoZ3JhcGhpY3MudGludCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50RyA9IChncmFwaGljcy50aW50ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgdGludEIgPSAoZ3JhcGhpY3MudGludCAmIDB4RkYpLyAyNTU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLmZpbGxDb2xvciB8IDA7XG4gICAgICAgIHZhciBsaW5lQ29sb3IgPSBkYXRhLmxpbmVDb2xvciB8IDA7XG5cbiAgICAgICAgLypcbiAgICAgICAgdmFyIGNvbG9yUiA9IChmaWxsQ29sb3IgPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgdmFyIGNvbG9yRyA9IChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JCID0gKGZpbGxDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgZmlsbENvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG5cbiAgICAgICAgY29sb3JSID0gKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckcgPSAobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgY29sb3JCID0gKGxpbmVDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgbGluZUNvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG4gICAgICAgICovXG5cbiAgICAgICAgLy8gc3VwZXIgaW5saW5lIGNvcyBpbSBhbiBvcHRpbWl6YXRpb24gTkFaSSA6KVxuICAgICAgICBkYXRhLl9maWxsVGludCA9ICgoKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgoZmlsbENvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAoZmlsbENvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuICAgICAgICBkYXRhLl9saW5lVGludCA9ICgoKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAobGluZUNvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuXG4gICAgfVxufTtcblxuIiwidmFyIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi9DYW52YXNHcmFwaGljcycpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBtYXNraW5nLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ2FudmFzTWFza01hbmFnZXIoKVxue31cblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FudmFzTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc01hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgc3RhY2sgb2YgbWFza3MuXG4gKlxuICogQHBhcmFtIG1hc2tEYXRhIHtvYmplY3R9IHRoZSBtYXNrRGF0YSB0aGF0IHdpbGwgYmUgcHVzaGVkXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSwgcmVuZGVyZXIpXG57XG5cbiAgICByZW5kZXJlci5jb250ZXh0LnNhdmUoKTtcblxuICAgIHZhciBjYWNoZUFscGhhID0gbWFza0RhdGEuYWxwaGE7XG4gICAgdmFyIHRyYW5zZm9ybSA9IG1hc2tEYXRhLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgLy9UT0RPIHN1cG9ydCBzcHJpdGUgYWxwaGEgbWFza3M/P1xuICAgIC8vbG90cyBvZiBlZmZvcnQgcmVxdWlyZWQuIElmIGRlbWFuZCBpcyBncmVhdCBlbm91Z2guLlxuICAgIGlmKCFtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrKG1hc2tEYXRhLCByZW5kZXJlci5jb250ZXh0KTtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5jbGlwKCk7XG4gICAgfVxuXG4gICAgbWFza0RhdGEud29ybGRBbHBoYSA9IGNhY2hlQWxwaGE7XG59O1xuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dCB0byB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZSB0aGUgbWFzayB3YXMgYXBwbGllZC5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLmNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7fTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2RzIGZvciBTcHJpdGUvVGV4dHVyZSB0aW50aW5nLlxuICogQHN0YXRpY1xuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG52YXIgQ2FudmFzVGludGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1RpbnRlcjtcblxuLyoqXG4gKiBCYXNpY2FsbHkgdGhpcyBtZXRob2QganVzdCBuZWVkcyBhIHNwcml0ZSBhbmQgYSBjb2xvciBhbmQgdGludHMgdGhlIHNwcml0ZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSB0aW50ZWQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlID0gZnVuY3Rpb24gKHNwcml0ZSwgY29sb3IpXG57XG4gICAgdmFyIHRleHR1cmUgPSBzcHJpdGUudGV4dHVyZTtcblxuICAgIGNvbG9yID0gQ2FudmFzVGludGVyLnJvdW5kQ29sb3IoY29sb3IpO1xuXG4gICAgdmFyIHN0cmluZ0NvbG9yID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgdGV4dHVyZS50aW50Q2FjaGUgPSB0ZXh0dXJlLnRpbnRDYWNoZSB8fCB7fTtcblxuICAgIGlmICh0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0pXG4gICAge1xuICAgICAgICByZXR1cm4gdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdO1xuICAgIH1cblxuICAgICAvLyBjbG9uZSB0ZXh0dXJlLi5cbiAgICB2YXIgY2FudmFzID0gQ2FudmFzVGludGVyLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8vQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWwodGV4dHVyZSwgc3RyaW5nQ29sb3IsIGNhbnZhcyk7XG4gICAgQ2FudmFzVGludGVyLnRpbnRNZXRob2QodGV4dHVyZSwgY29sb3IsIGNhbnZhcyk7XG5cbiAgICBpZiAoQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSlcbiAgICB7XG4gICAgICAgIC8vIGlzIHRoaXMgYmV0dGVyP1xuICAgICAgICB2YXIgdGludEltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHRpbnRJbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKCk7XG5cbiAgICAgICAgdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdID0gdGludEltYWdlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSBjYW52YXM7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBub3QgY29udmVydGluZyB0aGUgdGV4dHVyZSB0byBhbiBpbWFnZSB0aGVuIHdlIG5lZWQgdG8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXNcbiAgICAgICAgQ2FudmFzVGludGVyLmNhbnZhcyA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdtdWx0aXBseScgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcblxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdvdmVybGF5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoT3ZlcmxheSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1hdG9wJztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgLy8gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG59O1xuXG4vKipcbiAqIFRpbnQgYSB0ZXh0dXJlIHBpeGVsIHBlciBwaXhlbC5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcbiAgICB2YXIgciA9IHJnYlZhbHVlc1swXSwgZyA9IHJnYlZhbHVlc1sxXSwgYiA9IHJnYlZhbHVlc1syXTtcblxuICAgIHZhciBwaXhlbERhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICB2YXIgcGl4ZWxzID0gcGl4ZWxEYXRhLmRhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBpeGVscy5sZW5ndGg7IGkgKz0gNClcbiAgICB7XG4gICAgICAgIHBpeGVsc1tpKzBdICo9IHI7XG4gICAgICAgIHBpeGVsc1tpKzFdICo9IGc7XG4gICAgICAgIHBpeGVsc1tpKzJdICo9IGI7XG4gICAgfVxuXG4gICAgY29udGV4dC5wdXRJbWFnZURhdGEocGl4ZWxEYXRhLCAwLCAwKTtcbn07XG5cbi8qKlxuICogUm91bmRzIHRoZSBzcGVjaWZpZWQgY29sb3IgYWNjb3JkaW5nIHRvIHRoZSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbC5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHJvdW5kLCBzaG91bGQgYmUgYSBoZXggY29sb3JcbiAqL1xuQ2FudmFzVGludGVyLnJvdW5kQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IpXG57XG4gICAgdmFyIHN0ZXAgPSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbDtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcblxuICAgIHJnYlZhbHVlc1swXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1swXSAvIHN0ZXApICogc3RlcCk7XG4gICAgcmdiVmFsdWVzWzFdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzFdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMl0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMl0gLyBzdGVwKSAqIHN0ZXApO1xuXG4gICAgcmV0dXJuIHV0aWxzLnJnYjJoZXgocmdiVmFsdWVzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGNhcCB3aGVuIHJvdW5kaW5nIGNvbG9ycy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsID0gODtcblxuLyoqXG4gKiBUaW50IGNhY2hlIGJvb2xlYW4gZmxhZy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jb252ZXJ0VGludFRvSW1hZ2UgPSBmYWxzZTtcblxuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCwgY29uc2VxdWVudGx5IHRoZSBhYmlsaXR5IHRvIHRpbnQgdXNpbmcgdGhlIG11bHRpcGx5IG1ldGhvZC5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA9IHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKTtcblxuLyoqXG4gKiBUaGUgdGludGluZyBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQuXG4gKlxuICovXG5DYW52YXNUaW50ZXIudGludE1ldGhvZCA9IENhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA/IENhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5IDogIENhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsO1xuIiwidmFyIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcblx0dXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIFRleHR1cmVNYW5hZ2VyID0gZnVuY3Rpb24oZ2wpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyB0cmFjayB0ZXh0dXJlcyBpbiB0aGUgcmVuZGVyZXIgc28gd2UgY2FuIG5vIGxvbmdlciBsaXN0ZW4gdG8gdGhlbSBvbiBkZXN0cnVjdGlvbi5cblx0dGhpcy5fbWFuYWdlZFRleHR1cmVzID0gW107XG4gICAgdGhpcy5nbFRleHR1cmVzID0ge307XG5cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5nZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW5kL29yIENyZWF0ZXMgYSBXZWJHTCB0ZXh0dXJlIGZvciB0aGUgcmVuZGVyZXIncyBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdXBkYXRlXG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuXHRpZiAoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGdsVGV4dHVyZSA9IHRoaXMuZ2xUZXh0dXJlc1t0ZXh0dXJlLnVpZF0vL3RleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgaWYgKCFnbFRleHR1cmUpXG4gICAge1xuICAgICAgICBnbFRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcbiAgICAgICAgZ2xUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSB0cnVlXG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgLy8gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXSA9IGdsVGV4dHVyZTtcblxuICAgICAgICB0ZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9uKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICBnbFRleHR1cmUudXBsb2FkKHRleHR1cmUuc291cmNlKTtcbiAgICBcbiAgICAvL1RPRE8gY2hlY2sgaXMgcG93ZXIgb2YgdHdvLi5cbiAgICBnbFRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cblxuICAgIC8vIFRPRE8gY2hlY2sgZm9yIHNjYWxpbmcgdHlwZVxuICAgIGdsVGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKCk7XG5cbiAgICByZXR1cm4gIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTFxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gZGVzdHJveVxuICovXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlLCBfc2tpcFJlbW92ZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0pXG4gICAge1xuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG5cblxuICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcblxuICAgICAgICBpZiAoIV9za2lwUmVtb3ZlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5pbmRleE9mKHRleHR1cmUpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5fbWFuYWdlZFRleHR1cmVzLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKClcbntcblx0Ly8gZW1wdHkgYWxsIHRoZSBvbGQgZ2wgdGV4dHVyZXMgYXMgdGhleSBhcmUgdXNlbGVzcyBub3dcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzW2ldO1xuICAgICAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuICAgIC8vIGRlc3Ryb3kgbWFuYWdlZCB0ZXh0dXJlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIHRoaXMuZGVzdHJveVRleHR1cmUodGV4dHVyZSwgdHJ1ZSk7XG4gICAgICAgIHRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9mZignZGlzcG9zZScsIHRoaXMuZGVzdHJveVRleHR1cmUsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcyA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZU1hbmFnZXI7XG5cbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgU2hhZGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIE1hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9NYXNrTWFuYWdlcicpLFxuICAgIFN0ZW5jaWxNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlcicpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBCbGVuZE1vZGVNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4vdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBGWEFBRmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBUZXh0dXJlTWFuYWdlciA9IHJlcXVpcmUoJy4vVGV4dHVyZU1hbmFnZXInKSxcbiAgICBjcmVhdGVDb250ZXh0ID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuY3JlYXRlQ29udGV4dCxcbiAgICBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aScpLFxuICAgIG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpID0gcmVxdWlyZSgnLi91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFdlYkdMUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIHdlYkdMIGVuYWJsZWQgY2FudmFzLiBUaGlzIHJlbmRlcmVyXG4gKiBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMLiBUaGlzIFJlbmRlciB3b3JrcyBieSBhdXRvbWF0aWNhbGx5IG1hbmFnaW5nIHdlYkdMQmF0Y2hzLlxuICogU28gbm8gbmVlZCBmb3IgU3ByaXRlIEJhdGNoZXMgb3IgU3ByaXRlIENsb3Vkcy5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIHZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9MF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9MF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMuIElmIG5vdCBhdmFpbGFibGUgbmF0aXZlbHkgdGhlbiBGWEFBIGFudGlhbGlhc2luZyBpcyB1c2VkXG4gKiBAcGFyYW0gW29wdGlvbnMuZm9yY2VGWEFBPWZhbHNlXSB7Ym9vbGVhbn0gZm9yY2VzIEZYQUEgYW50aWFsaWFzaW5nIHRvIGJlIHVzZWQgb3ZlciBuYXRpdmUuIEZYQUEgaXMgZmFzdGVyLCBidXQgbWF5IG5vdCBhbHdheXMgbG9vayBhcyBncmVhdFxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy4gSWYgeW91IHdpc2ggdG8gc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSAqbXVzdCogc2V0IHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byBgdHJ1ZWAuXG4gKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmXG4gKiAgICAgIHlvdSBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0LlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ1dlYkdMJywgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIHJlbmRlcmVyIGFzIGEgc3RhbmRhcmRpc2VkIGNvbnN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9Ly9cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0w7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gdGhpcy5oYW5kbGVDb250ZXh0TG9zdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5oYW5kbGVDb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gY3JlYXRlIGEgbmV3IHdlYmdsIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgICAgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQsXG4gICAgICAgIGFudGlhbGlhczogb3B0aW9ucy5hbnRpYWxpYXMsXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnRyYW5zcGFyZW50ICE9PSAnbm90TXVsdGlwbGllZCcsXG4gICAgICAgIHN0ZW5jaWw6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICB9O1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYVszXSA9IHRoaXMudHJhbnNwYXJlbnQgPyAwIDogMTtcblxuICAgIC8qKlxuICAgICAqIERlYWxzIHdpdGggbWFuYWdpbmcgdGhlIHNoYWRlciBwcm9ncmFtcyBhbmQgdGhlaXIgYXR0cmlicy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBuZXcgU2hhZGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1hc2tzIHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWFza01hbmFnZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG5ldyBNYXNrTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyID0gbmV3IFN0ZW5jaWxNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRmlsdGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlck1hbmFnZXIgPSBuZXcgRmlsdGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIGJsZW5kTW9kZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmxlbmRNb2RlTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBuZXcgQmxlbmRNb2RlTWFuYWdlcih0aGlzKTtcblxuICAgIFxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIE9iamVjdFJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5PYmplY3RSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG5ldyBPYmplY3RSZW5kZXJlcih0aGlzKTtcblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIGNvbnRleHQgc28gaXQgaXMgcmVhZHkgZm9yIHRoZSBtYW5hZ2Vycy5cbiAgICB0aGlzLmdsID0gY3JlYXRlQ29udGV4dCh0aGlzLnZpZXcsIHRoaXMuX2NvbnRleHRPcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXRDb250ZXh0KCk7XG5cbiAgICAvLyBtYXAgc29tZSB3ZWJHTCBibGVuZCBhbmQgZHJhd21vZGVzLi5cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wpO1xuICAgIHRoaXMuZHJhd01vZGVzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wpXG5cbiAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXR9XG4gICAgICovXG4gICAgdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUZXh0dXJlTG9jYXRpb24gPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oV2ViR0xSZW5kZXJlcik7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgV2ViR0wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLl9pbml0Q29udGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgbWFuYWdlci4uLlxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hbmFnZXIoZ2wpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBkZWZhdWx0IHBpeGkgc2V0dGluZ3MuLlxuICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG5cblxuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBudWxsLCB0aGlzLnJlc29sdXRpb24sIHRydWUpO1xuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5jbGVhckNvbG9yID0gdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYTtcbiAgICBcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQodGhpcy5yb290UmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMuZW1pdCgnY29udGV4dCcsIGdsKTtcblxuICAgIC8vIHNldHVwIHRoZSB3aWR0aC9oZWlnaHQgcHJvcGVydGllcyBhbmQgZ2wgdmlld3BvcnRcbiAgICB0aGlzLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7ICAgIFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gaXRzIHdlYkdMIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIC8vIG5vIHBvaW50IHJlbmRlcmluZyBpZiBvdXIgY29udGV4dCBoYXMgYmVlbiBibG93biB1cCFcbiAgICBpZiAodGhpcy5nbC5pc0NvbnRleHRMb3N0KCkpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gZGlzcGxheU9iamVjdDtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IGRpc3BsYXlPYmplY3QucGFyZW50O1xuICAgIGRpc3BsYXlPYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIGRpc3BsYXlPYmplY3QudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnJvb3RSZW5kZXJUYXJnZXQsIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpOy8vdGhpcy5wcm9qZWN0aW9uKTtcblxuICAgIHRoaXMuZW1pdCgncG9zdHJlbmRlcicpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgRGlzcGxheSBPYmplY3QuXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0gcmVuZGVyVGFyZ2V0IHtQSVhJLlJlbmRlclRhcmdldH0gVGhlIHJlbmRlciB0YXJnZXQgdG8gdXNlIHRvIHJlbmRlciB0aGlzIGRpc3BsYXkgb2JqZWN0XG4gKlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJEaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHJlbmRlclRhcmdldCwgY2xlYXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgdGhpcy5iaW5kUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG5cbiAgICBpZihjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IHRoZSBmaWx0ZXIgbWFuYWdlclxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5zZXRGaWx0ZXJTdGFjayggcmVuZGVyVGFyZ2V0LmZpbHRlclN0YWNrICk7XG5cbiAgICAvLyByZW5kZXIgdGhlIHNjZW5lIVxuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyV2ViR0wodGhpcyk7XG5cbiAgICAvLyBmaW5pc2ggdGhlIGN1cnJlbnQgcmVuZGVyZXIuLlxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdGhlIG9uZSBnaXZlbiBpbiBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gb2JqZWN0UmVuZGVyZXIge1BJWEkuT2JqZWN0UmVuZGVyZXJ9IFRoZSBvYmplY3QgcmVuZGVyZXIgdG8gdXNlLlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRPYmplY3RSZW5kZXJlciA9IGZ1bmN0aW9uIChvYmplY3RSZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyZXIgPT09IG9iamVjdFJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0b3AoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG9iamVjdFJlbmRlcmVyO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHdlYkdMIHZpZXcgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB3ZWJHTCB2aWV3XG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB3ZWJHTCB2aWV3XG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9PT0gdGhpcy5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSB0aGUgbmV3IHJlbmRlciB0YXJnZXRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgaWYocmVuZGVyVGFyZ2V0ICE9PSB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcblxuICAgICAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLnNldE1hc2tTdGFjayggcmVuZGVyVGFyZ2V0LnN0ZW5jaWxNYXNrU3RhY2sgKTtcbiAgICB9XG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKS8vcHJvamVjdGlvbiwgYnVmZmVyKVxue1xuICAgIC8vVE9ETyBjYWNoZVxuICAgIGlmKHRoaXMuX2FjdGl2ZVNoYWRlciAhPT0gc2hhZGVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlU2hhZGVyID0gc2hhZGVyO1xuICAgICAgICBzaGFkZXIuYmluZCgpO1xuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgfVxufVxuXG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvY2F0aW9uKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvL1RPRE8gdGVzdCBwZXJmIG9mIGNhY2hlP1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gfHwgMDtcblxuICAgIGlmKHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiAhPT0gbG9jYXRpb24pLy9cbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbiApO1xuICAgIH1cblxuICAgIC8vVE9ETyAtIGNhbiB3ZSBjYWNoZSB0aGlzIHRleHR1cmUgdG9vP1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOyAgICAgIFxuICAgIFxuICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBiaW5kIHRoZSB0ZXh0dXJlLi5cbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0uYmluZCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEhhbmRsZXMgYSBsb3N0IHdlYmdsIGNvbnRleHRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5oYW5kbGVDb250ZXh0TG9zdCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGEgcmVzdG9yZWQgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnJlbW92ZUFsbCgpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgKGV2ZW50IGxpc3RlbmVycywgc3ByaXRlYmF0Y2gsIGV0Yy4uLilcbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldylcbntcbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICAvLyByZW1vdmUgbGlzdGVuZXJzXG4gICAgdGhpcy52aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0KTtcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCk7XG5cbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLmRlc3Ryb3lBbGwoKTtcblxuICAgIC8vIGNhbGwgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMudWlkID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIG1hbmFnZXJzXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLm1hc2tNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gbnVsbDtcbiAgICB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLnVzZVByb2dyYW0obnVsbCk7XG4gICAgdGhpcy5nbCA9IG51bGw7XG59O1xuXG4iLCJ2YXIgRGVmYXVsdFNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgUElYSSBmaWx0ZXIuIEN1cnJlbnRseSBvbmx5IFdlYkdMIHN1cHBvcnRzIGZpbHRlcnMuXG4gKiBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIGZpbHRlciB0aGlzIHNob3VsZCBiZSB5b3VyIGJhc2UgY2xhc3MuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHZlcnRleFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdmVydGV4IHNoYWRlciBzb3VyY2UgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBmcmFnbWVudFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIHVuaWZvcm1zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1bmlmb3JtcyBmb3IgdGhpcyBmaWx0ZXIuXG4gKi9cbmZ1bmN0aW9uIEFic3RyYWN0RmlsdGVyKHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zKVxue1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygc2hhZGVyc1xuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlcnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHRyYSBwYWRkaW5nIHRoYXQgdGhlIGZpbHRlciBtaWdodCBuZWVkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIHZlcnRleCBzaGFkZXJcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmdbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmVydGV4U3JjID0gdmVydGV4U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIG9mIHRoZSBmcmFtZW50IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgLy9UT0RPIGEgcmVtaW5kZXIgLSB3b3VsZCBiZSBjb29sIHRvIGhhdmUgbG93ZXIgcmVzIGZpbHRlcnMgYXMgdGhpcyB3b3VsZCBnaXZlIGJldHRlciBwZXJmb3JtYW5jZS5cblxuICAgIC8vdHlwZW9mIGZyYWdtZW50U3JjID09PSAnc3RyaW5nJyA/IGZyYWdtZW50U3JjLnNwbGl0KCcnKSA6IChmcmFnbWVudFNyYyB8fCBbXSk7XG5cbn1cblxuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RmlsdGVyO1xuXG4vKipcbiAqIEdyYWJzIGEgc2hhZGVyIGZyb20gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBzaGFkZXIgZnJvbVxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuZ2V0U2hhZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyc1tnbC5pZF07XG5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IG5ldyBEZWZhdWx0U2hhZGVyKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIsXG4gICAgICAgICAgICB0aGlzLnZlcnRleFNyYyxcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRTcmMsXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaGFkZXJzW2dsLmlkXSA9IHNoYWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbn07XG5cbi8qKlxuICogU3luY3MgYSB1bmlmb3JtIGJldHdlZW4gdGhlIGNsYXNzIG9iamVjdCBhbmQgdGhlIHNoYWRlcnMuXG4gKlxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuc2hhZGVycy5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnNoYWRlcnNbaV0uc3luY1VuaWZvcm0odW5pZm9ybSk7XG4gICAgfVxufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKlxuICogQmFzaWMgRlhBQSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgY29kZSBvbiBnZWVrczNkLmNvbSB3aXRoIHRoZVxuICogbW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXG4gKiB1bnN1cHBvcnRlZCBieSBXZWJHTC5cbiAqXG4gKiAtLVxuICogRnJvbTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICpcbiAqL1xuZnVuY3Rpb24gRlhBQUZpbHRlcigpXG57XG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxuXFxudm9pZCB0ZXhjb29yZHModmVjMiBmcmFnQ29vcmQsIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk5XLCBvdXQgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiU1csIG91dCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzIgaW52ZXJzZVZQID0gMS4wIC8gcmVzb2x1dGlvbi54eTtcXG4gICAgdl9yZ2JOVyA9IChmcmFnQ29vcmQgKyB2ZWMyKC0xLjAsIC0xLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JORSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYlNXID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU0UgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIDEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk0gPSB2ZWMyKGZyYWdDb29yZCAqIGludmVyc2VWUCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbiAgIHZSZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcXG5cXG4gICAvL2NvbXB1dGUgdGhlIHRleHR1cmUgY29vcmRzIGFuZCBzZW5kIHRoZW0gdG8gdmFyeWluZ3NcXG4gICB0ZXhjb29yZHMoYVRleHR1cmVDb29yZCAqIHJlc29sdXRpb24sIHJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG5cXG4vKipcXG5CYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXFxubW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXFxudW5zdXBwb3J0ZWQgYnkgV2ViR0wuXFxuXFxuLS1cXG5cXG5Gcm9tOlxcbmh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XFxuXFxuQ29weXJpZ2h0IChjKSAyMDExIGJ5IEFybWluIFJvbmFjaGVyLlxcblxcblNvbWUgcmlnaHRzIHJlc2VydmVkLlxcblxcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcXG5tZXQ6XFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcXG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxcbiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXFxuICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXFxuICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxcblxcbiAgICAqIFRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yXFxuICAgICAgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljXFxuICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxcblxcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcXG5cXFwiQVMgSVNcXFwiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxcbkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXFxuT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXFxuU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxcblRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxcbiovXFxuXFxuI2lmbmRlZiBGWEFBX1JFRFVDRV9NSU5cXG4gICAgI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gICAoMS4wLyAxMjguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01VTFxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAgICgxLjAgLyA4LjApXFxuI2VuZGlmXFxuI2lmbmRlZiBGWEFBX1NQQU5fTUFYXFxuICAgICNkZWZpbmUgRlhBQV9TUEFOX01BWCAgICAgOC4wXFxuI2VuZGlmXFxuXFxuLy9vcHRpbWl6ZWQgdmVyc2lvbiBmb3IgbW9iaWxlLCB3aGVyZSBkZXBlbmRlbnRcXG4vL3RleHR1cmUgcmVhZHMgY2FuIGJlIGEgYm90dGxlbmVja1xcbnZlYzQgZnhhYShzYW1wbGVyMkQgdGV4LCB2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JOVywgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JTVywgdmVjMiB2X3JnYlNFLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzQgY29sb3I7XFxuICAgIG1lZGl1bXAgdmVjMiBpbnZlcnNlVlAgPSB2ZWMyKDEuMCAvIHJlc29sdXRpb24ueCwgMS4wIC8gcmVzb2x1dGlvbi55KTtcXG4gICAgdmVjMyByZ2JOVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTlcpLnh5ejtcXG4gICAgdmVjMyByZ2JORSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTkUpLnh5ejtcXG4gICAgdmVjMyByZ2JTVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU1cpLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU0UpLnh5ejtcXG4gICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTSk7XFxuICAgIHZlYzMgcmdiTSAgPSB0ZXhDb2xvci54eXo7XFxuICAgIHZlYzMgbHVtYSA9IHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdChyZ2JOVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFORSA9IGRvdChyZ2JORSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTVyA9IGRvdChyZ2JTVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdChyZ2JTRSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNICA9IGRvdChyZ2JNLCAgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNaW4gPSBtaW4obHVtYU0sIG1pbihtaW4obHVtYU5XLCBsdW1hTkUpLCBtaW4obHVtYVNXLCBsdW1hU0UpKSk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgobHVtYU0sIG1heChtYXgobHVtYU5XLCBsdW1hTkUpLCBtYXgobHVtYVNXLCBsdW1hU0UpKSk7XFxuXFxuICAgIG1lZGl1bXAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcblxcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoKGx1bWFOVyArIGx1bWFORSArIGx1bWFTVyArIGx1bWFTRSkgKlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwpLCBGWEFBX1JFRFVDRV9NSU4pO1xcblxcbiAgICBmbG9hdCByY3BEaXJNaW4gPSAxLjAgLyAobWluKGFicyhkaXIueCksIGFicyhkaXIueSkpICsgZGlyUmVkdWNlKTtcXG4gICAgZGlyID0gbWluKHZlYzIoRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBtYXgodmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiBpbnZlcnNlVlA7XFxuXFxuICAgIHZlYzMgcmdiQSA9IDAuNSAqIChcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqICgxLjAgLyAzLjAgLSAwLjUpKS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDIuMCAvIDMuMCAtIDAuNSkpLnh5eik7XFxuICAgIHZlYzMgcmdiQiA9IHJnYkEgKiAwLjUgKyAwLjI1ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogLTAuNSkueHl6ICtcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqIDAuNSkueHl6KTtcXG5cXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QocmdiQiwgbHVtYSk7XFxuICAgIGlmICgobHVtYUIgPCBsdW1hTWluKSB8fCAobHVtYUIgPiBsdW1hTWF4KSlcXG4gICAgICAgIGNvbG9yID0gdmVjNChyZ2JBLCB0ZXhDb2xvci5hKTtcXG4gICAgZWxzZVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkIsIHRleENvbG9yLmEpO1xcbiAgICByZXR1cm4gY29sb3I7XFxufVxcblxcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBmeGFhKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICogdlJlc29sdXRpb24sIHZSZXNvbHV0aW9uLCB2X3JnYk5XLCB2X3JnYk5FLCB2X3JnYlNXLCB2X3JnYlNFLCB2X3JnYk0pO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxufVxuXG5GWEFBRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkZYQUFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRlhBQUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRlhBQUZpbHRlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICovXG5GWEFBRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIoIHJlbmRlcmVyICk7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG4iLCJ2YXIgQWJzdHJhY3RGaWx0ZXIgPSByZXF1aXJlKCcuL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgU3ByaXRlTWFza0ZpbHRlciBjbGFzc1xuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICovXG5mdW5jdGlvbiBTcHJpdGVNYXNrRmlsdGVyKHNwcml0ZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXNrQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICAgdk1hc2tDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIC8vIGNoZWNrIGNsaXAhIHRoaXMgd2lsbCBzdG9wIHRoZSBtYXNrIGJsZWVkaW5nIG91dCBmcm9tIHRoZSBlZGdlc1xcbiAgICB2ZWMyIHRleHQgPSBhYnMoIHZNYXNrQ29vcmQgLSAwLjUgKTtcXG4gICAgdGV4dCA9IHN0ZXAoMC41LCB0ZXh0KTtcXG4gICAgZmxvYXQgY2xpcCA9IDEuMCAtIG1heCh0ZXh0LnksIHRleHQueCk7XFxuICAgIHZlYzQgb3JpZ2luYWwgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgICB2ZWM0IG1hc2t5ID0gdGV4dHVyZTJEKG1hc2ssIHZNYXNrQ29vcmQpO1xcbiAgICBvcmlnaW5hbCAqPSAobWFza3kuciAqIG1hc2t5LmEgKiBhbHBoYSAqIGNsaXApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBvcmlnaW5hbDtcXG59XFxuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hc2s6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLl90ZXh0dXJlIH0sXG4gICAgICAgICAgICBhbHBoYTogICAgICAgICAgeyB0eXBlOiAnZicsIHZhbHVlOiAxfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG59XG5cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVNYXNrRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVNYXNrRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS5fdGV4dHVyZTtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS53b3JsZEFscGhhO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHVzZWQgdG8gbW92ZSB0aGUgZGlzcGxhY2VtZW50IG1hcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlTWFza0ZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHbE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQmxlbmRNb2RlTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59XG5cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmRNb2RlTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxlbmRNb2RlTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzLXVwIHRoZSBnaXZlbiBibGVuZE1vZGUgZnJvbSBXZWJHTCdzIHBvaW50IG9mIHZpZXcuXG4gKlxuICogQHBhcmFtIGJsZW5kTW9kZSB7bnVtYmVyfSB0aGUgYmxlbmRNb2RlLCBzaG91bGQgYmUgYSBQaXhpIGNvbnN0LCBzdWNoIGFzIGBQSVhJLkJMRU5EX01PREVTLkFERGAuIFNlZVxuICogIHtAbGluayBQSVhJLkJMRU5EX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICovXG5CbGVuZE1vZGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRCbGVuZE1vZGUgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPT09IGJsZW5kTW9kZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMucmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmN1cnJlbnRCbGVuZE1vZGVdO1xuICAgIHRoaXMucmVuZGVyZXIuZ2wuYmxlbmRGdW5jKG1vZGVbMF0sIG1vZGVbMV0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpLFxuICAgIFF1YWQgPSByZXF1aXJlKCcuLi91dGlscy9RdWFkJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gRmlsdGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW107XG5cbiAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICByZW5kZXJUYXJnZXQ6cmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldCxcbiAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICBib3VuZHM6bnVsbFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgLy8gbGlzdGVuIGZvciBjb250ZXh0IGFuZCB1cGRhdGUgbmVjZXNzYXJ5IGJ1ZmZlcnNcbiAgICAvL1RPRE8gbWFrZSB0aGlzIGR5bmFtaWMhXG4gICAgLy9UT0RPIHRlc3QgdGhpcyBvdXQgYnkgZm9yY2VzIHBvd2VyIG9mIHR3bz9cbiAgICB0aGlzLnRleHR1cmVTaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZnJhbWVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcbn1cblxuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWx0ZXJNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBGaWx0ZXJNYW5hZ2VyO1xuXG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnF1YWQgPSBuZXcgUXVhZChnbCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHBhcmFtIGJ1ZmZlciB7QXJyYXlCdWZmZXJ9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnNldEZpbHRlclN0YWNrID0gZnVuY3Rpb24gKCBmaWx0ZXJTdGFjayApXG57XG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IGZpbHRlclN0YWNrO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXIgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBmaWx0ZXJzIHtQSVhJLkFic3RyYWN0RmlsZXJbXX0gdGhlIGZpbHRlcnMgdGhhdCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2tcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucHVzaEZpbHRlciA9IGZ1bmN0aW9uICh0YXJnZXQsIGZpbHRlcnMpXG57XG4gICAgLy8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdC4uXG4gICAgLy8gVE9ETyByZXBsYWNlIGNsb25lIHdpdGggYSBjb3B5IHRvIHNhdmUgb2JqZWN0IGNyZWF0aW9uXG4gICAgdmFyIGJvdW5kcyA9IHRhcmdldC5maWx0ZXJBcmVhID8gdGFyZ2V0LmZpbHRlckFyZWEuY2xvbmUoKSA6IHRhcmdldC5nZXRCb3VuZHMoKTtcblxuICAgIC8vYm91bmRzID0gYm91bmRzLmNsb25lKCk7XG5cbiAgICAvLyByb3VuZCBvZmYgdGhlIHJlY3RhbmdsZSB0byBnZXQgYSBuaWNlIHNtb29vb29vb3RoIGZpbHRlciA6KVxuICAgIGJvdW5kcy54ID0gYm91bmRzLnggfCAwO1xuICAgIGJvdW5kcy55ID0gYm91bmRzLnkgfCAwO1xuICAgIGJvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCB8IDA7XG4gICAgYm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgfCAwO1xuXG5cbiAgICAvLyBwYWRkaW5nIVxuICAgIHZhciBwYWRkaW5nID0gZmlsdGVyc1swXS5wYWRkaW5nIHwgMDtcbiAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG5cblxuICAgIGlmKHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvL1RPRE8gdGhpcyB3aWxsIGJyZWFrIGlmIHRoZSByZW5kZXJUZXh0dXJlIHRyYW5zZm9ybSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgdHJhbnNsYXRpb24uXG4gICAgICAgIC8vV2lsbCBuZWVkIHRvIHRha2UgdGhlIGZ1bGwgbWF0cml4IHRyYW5zZm9ybSBpbnRvIGFjb3VudC4uXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQudHJhbnNmb3JtO1xuXG4gICAgICAgIGJvdW5kcy54ICs9IHRyYW5zZm9ybS50eDtcbiAgICAgICAgYm91bmRzLnkgKz0gdHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG5cbiAgICAgICAgYm91bmRzLnggLT0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSAtPSB0cmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgICB0aGlzLmNhcEZpbHRlckFyZWEoIGJvdW5kcyApO1xuICAgIH1cblxuICAgIGlmKGJvdW5kcy53aWR0aCA+IDAgJiYgYm91bmRzLmhlaWdodCA+IDApXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGJvdW5kcztcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGV4dHVyZSk7XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRleHR1cmUuLlxuICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gVE9ETyBnZXQgcmlkIG9mIG9iamVjdCBjcmVhdGlvbiFcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogdGV4dHVyZSxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBwdXNoIHNvbXRoaW5nIG9uIHRvIHRoZSBzdGFjayB0aGF0IGlzIGVtcHR5XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcnNcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnBvcEZpbHRlciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrLnBvcCgpO1xuICAgIHZhciBwcmV2aW91c0ZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrW3RoaXMuZmlsdGVyU3RhY2subGVuZ3RoLTFdO1xuXG4gICAgdmFyIGlucHV0ID0gZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyBpZiB0aGUgcmVuZGVyVGFyZ2V0IGlzIG51bGwgdGhlbiB3ZSBkb24ndCBhcHBseSB0aGUgZmlsdGVyIGFzIGl0cyBvZmZzY3JlZW5cbiAgICBpZighZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IHByZXZpb3VzRmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyB1c2UgcHJvZ3JhbVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaW5wdXQuZnJhbWU7XG5cbiAgICB0aGlzLnF1YWQubWFwKHRoaXMudGV4dHVyZVNpemUsIGlucHV0LmZyYW1lKTtcblxuXG4gICAgLy8gVE9ETy4uIHRoaXMgcHJvYmFibHkgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgZmlsdGVycyA9IGZpbHRlckRhdGEuZmlsdGVyO1xuXG4gICAgLy8gYXNzdW1pbmcgYWxsIGZpbHRlcnMgZm9sbG93IHRoZSBjb3JyZWN0IGZvcm1hdD8/XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAyICogNCAqIDQpO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIG5vcm1hbCBibGVuZG1vZGUhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShDT05TVC5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAxKVxuICAgIHtcbiAgICAgICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoZW4gc2V0dGluZyB0aGlzIGVhY2ggdGltZT9cbiAgICAgICAgaWYgKGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgIGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1swXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgaW5wdXQsIG91dHB1dCApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggaW5wdXQgKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZmxpcFRleHR1cmUgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3BUZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aC0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICAgICAgaWYgKGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBmbG9wVGV4dHVyZSApO1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGZsaXBUZXh0dXJlO1xuICAgICAgICAgICAgZmxpcFRleHR1cmUgPSBmbG9wVGV4dHVyZTtcbiAgICAgICAgICAgIGZsb3BUZXh0dXJlID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlcnNbZmlsdGVycy5sZW5ndGgtMV0uYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBvdXRwdXQgKTtcblxuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxpcFRleHR1cmUgKTtcbiAgICAgICAgdGhpcy5yZXR1cm5SZW5kZXJUYXJnZXQoIGZsb3BUZXh0dXJlICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckRhdGEuZmlsdGVyO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY2xlYXIgdGhlIFJlbmRlclRhcmdldFxuICogQHJldHVybiB7UmVuZGVyVGFyZ2V0fVxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIGNsZWFyIClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy50ZXh0dXJlUG9vbC5wb3AoKSB8fCBuZXcgUmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyZXIuZ2wsIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0LCBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiAqIENPTlNULkZJTFRFUl9SRVNPTFVUSU9OKTtcbiAgICByZW5kZXJUYXJnZXQuZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcih0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyVGFyZ2V0O1xufTtcblxuLypcbiAqIFJldHVybnMgYSBSZW5kZXJUYXJnZXQgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1JlbmRlclRhcmdldH0gVGhlIFJlbmRlclRhcmdldCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5SZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0KVxue1xuICAgIHRoaXMudGV4dHVyZVBvb2wucHVzaCggcmVuZGVyVGFyZ2V0ICk7XG59O1xuXG4vKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2hhZGVyIHtTaGFkZXJ9IFRoZSBzaGFkZXIgdG8gdXBsb2FkXG4gKiBAcGFyYW0gaW5wdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBjbGVhciB0aGUgb3V0cHV0VGFyZ2V0XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHNoYWRlciwgaW5wdXRUYXJnZXQsIG91dHB1dFRhcmdldCwgY2xlYXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG91dHB1dFRhcmdldCk7XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICBvdXRwdXRUYXJnZXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHNoYWRlclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gQ2FuIHRoaXMgYmUgY2FjaGVkIGFuZCBub3QgYHRvQXJyYXlgZWQgZWFjaCBmcmFtZT9cbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG5cbiAgICAvL1RPRE8gY2FuIHRoaXMgYmUgb3B0aW1pc2VkP1xuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcbi8qXG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcbiovXG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBpbnB1dFRhcmdldC50ZXh0dXJlKTtcblxuICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbn07XG5cbi8qXG4gKiBDYWxjdWxhdGVzIHRoZSBtYXBwZWQgbWF0cml4XG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWFcbiAqIEBwYXJhbSBzcHJpdGUge1Nwcml0ZX0gdGhlIHRhcmdldCBzcHJpdGVcbiAqIEBwYXJhbSBvdXRwdXRNYXRyaXgge01hdHJpeH0gQGFsdmluXG4gKi9cbi8vIFRPRE8gcGxheWluZyBhcm91bmQgaGVyZS4uIHRoaXMgaXMgdGVtcG9yYXJ5IC0gKHdpbGwgZW5kIHVwIGluIHRoZSBzaGFkZXIpXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jYWxjdWxhdGVNYXBwZWRNYXRyaXggPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSwgc3ByaXRlLCBvdXRwdXRNYXRyaXgpXG57XG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gc3ByaXRlLndvcmxkVHJhbnNmb3JtLmNvcHkobWF0aC5NYXRyaXguVEVNUF9NQVRSSVgpLFxuICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICB2YXIgbWFwcGVkTWF0cml4ID0gb3V0cHV0TWF0cml4LmlkZW50aXR5KCk7XG5cbiAgICAvLyBzY2FsZS4uXG4gICAgdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCApO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKDEgLCByYXRpbyk7XG5cbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyB0ZXh0dXJlLndpZHRoKTtcbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gdGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0udHggLz0gdGV4dHVyZS53aWR0aCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICB3b3JsZFRyYW5zZm9ybS50eSAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0uaW52ZXJ0KCk7XG5cbiAgICBtYXBwZWRNYXRyaXgucHJlcGVuZCh3b3JsZFRyYW5zZm9ybSk7XG5cbiAgICAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIG1hcHBlZE1hdHJpeC50cmFuc2xhdGUoc3ByaXRlLmFuY2hvci54LCBzcHJpdGUuYW5jaG9yLnkpO1xuXG4gICAgcmV0dXJuIG1hcHBlZE1hdHJpeDtcblxuICAgIC8vIEtlZXBpbmcgdGhlIG9yZ2luYWwgYXMgYSByZW1pbmRlciB0byBtZSBvbiBob3cgdGhpcyB3b3JrcyFcbiAgICAvL1xuICAgIC8vIHZhciBtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvLyAvLyBzY2FsZS4uXG4gICAgLy8gdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgLy8gbS50cmFuc2xhdGUoZmlsdGVyQXJlYS54IC8gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgZmlsdGVyQXJlYS55IC8gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQpO1xuXG5cbiAgICAvLyBtLnNjYWxlKDEgLCByYXRpbyk7XG5cblxuICAgIC8vIHZhciB0cmFuc2Zvcm0gPSB3dC5jbG9uZSgpO1xuXG4gICAgLy8gdmFyIHRyYW5zbGF0ZVNjYWxlWCA9ICh0aGlzLnRleHR1cmVTaXplLndpZHRoIC8gNjIwKTtcbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gMzgwKTtcblxuICAgIC8vIHRyYW5zZm9ybS50eCAvPSA2MjAgKiB0cmFuc2xhdGVTY2FsZVg7XG4gICAgLy8gdHJhbnNmb3JtLnR5IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcblxuICAgIC8vIHRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIC8vIHRyYW5zZm9ybS5hcHBlbmQobSk7XG5cbiAgICAvLyAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgLy8gdHJhbnNmb3JtLnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIC8vIHJldHVybiB0cmFuc2Zvcm07XG59O1xuXG4vKlxuICogQ29uc3RyYWlucyB0aGUgZmlsdGVyIGFyZWEgdG8gdGhlIHRleHR1cmUgc2l6ZVxuICogQHBhcmFtIGZpbHRlckFyZWEge1JlY3RhbmdsZX0gVGhlIGZpbHRlciBhcmVhIHdlIHdhbnQgdG8gY2FwXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhcEZpbHRlckFyZWEgPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSlcbntcbiAgICBpZiAoZmlsdGVyQXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEud2lkdGggKz0gZmlsdGVyQXJlYS54O1xuICAgICAgICBmaWx0ZXJBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgKz0gZmlsdGVyQXJlYS55O1xuICAgICAgICBmaWx0ZXJBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggZmlsdGVyQXJlYS54ICsgZmlsdGVyQXJlYS53aWR0aCA+IHRoaXMudGV4dHVyZVNpemUud2lkdGggKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCA9IHRoaXMudGV4dHVyZVNpemUud2lkdGggLSBmaWx0ZXJBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnkgKyBmaWx0ZXJBcmVhLmhlaWdodCA+IHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLSBmaWx0ZXJBcmVhLnk7XG4gICAgfVxufTtcblxuLypcbiAqIFJlc2l6ZXMgYWxsIHRoZSByZW5kZXIgdGFyZ2V0cyBpbiB0aGUgcG9vbFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLnRleHR1cmVTaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLnJlc2l6ZSggd2lkdGgsIGhlaWdodCApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGZpbHRlciBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBmaWx0ZXIgc3RhY2suXG4gKlxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnF1YWQuZGVzdHJveSgpO1xuICAgIFxuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBudWxsO1xuICAgIHRoaXMub2Zmc2V0WSA9IDA7XG5cbiAgICAvLyBkZXN0cm95IHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHR1cmVQb29sLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlUG9vbCA9IG51bGw7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgQWxwaGFNYXNrRmlsdGVyID0gcmVxdWlyZSgnLi4vZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNYXNrTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICB0aGlzLmFscGhhTWFza1Bvb2wgPSBbXTtcbn1cblxuTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hc2tNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgaWYgKG1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBtYXNrIGZyb20gdGhlIG1hc2sgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucG9wU3ByaXRlTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTcHJpdGVNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdmFyIGFscGhhTWFza0ZpbHRlciA9IHRoaXMuYWxwaGFNYXNrUG9vbC5wb3AoKTtcblxuICAgIGlmICghYWxwaGFNYXNrRmlsdGVyKVxuICAgIHtcbiAgICAgICAgYWxwaGFNYXNrRmlsdGVyID0gW25ldyBBbHBoYU1hc2tGaWx0ZXIobWFza0RhdGEpXTtcbiAgICB9XG5cbiAgICBhbHBoYU1hc2tGaWx0ZXJbMF0ubWFza1Nwcml0ZSA9IG1hc2tEYXRhO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRhcmdldCwgYWxwaGFNYXNrRmlsdGVyKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKi9cbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTcHJpdGVNYXNrID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVycyA9IHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbC5wdXNoKGZpbHRlcnMpO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTdGVuY2lsTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaE1hc2sobWFza0RhdGEpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BNYXNrKG1hc2tEYXRhKTtcbn07XG5cbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1RleHR1cmVTaGFkZXInKSxcbiAgICBDb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhBdHRpYnMgPSAxMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG5cbi8vICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcbn1cblxuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaGFkZXJNYW5hZ2VyO1xudXRpbHMucGx1Z2luVGFyZ2V0Lm1peGluKFNoYWRlck1hbmFnZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlck1hbmFnZXI7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cblNoYWRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlIGNvcnJlY3RseSBhcyB0aGlzIHRlbmRzIHRvIHZhcnlcbiAgICB0aGlzLm1heEF0dGlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xuXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1heEF0dGliczsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRPRE8gLSBXaHkgYXJlIHRoZXNlIG5vdCBwbHVnaW5zPyBXZSBjYW4ndCBkZWNvdXBsZSBwcmltaXRpdmVzIHVubGVzcyB0aGV5IGFyZS4uLi5cbiAgICB0aGlzLmRlZmF1bHRTaGFkZXIgPSBuZXcgVGV4dHVyZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcyk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbmV3IENvbXBsZXhQcmltaXRpdmVTaGFkZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFRha2VzIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHBhcmFtZXRlcnMgYW5kIHVwbG9hZHMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXR0cmlicyB7YW55W119IGF0dHJpYnNcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0QXR0cmlicyA9IGZ1bmN0aW9uIChhdHRyaWJzKVxue1xuICAgIC8vIHJlc2V0IHRlbXAgc3RhdGVcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRlbXBBdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAodmFyIGEgaW4gYXR0cmlicylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbYV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSAhPT0gdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHNoYWRlci5cbiAqXG4gKiBAcGFyYW0gc2hhZGVyIHtQSVhJLlNoYWRlcn0gdGhlIHNoYWRlciB0byB1cGxvYWRcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0U2hhZGVyID0gZnVuY3Rpb24gKHNoYWRlcilcbntcbiAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRJZCA9PT0gc2hhZGVyLnVpZClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50SWQgPSBzaGFkZXIudWlkO1xuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5nbC51c2VQcm9ncmFtKHNoYWRlci5wcm9ncmFtKTtcbiAgICB0aGlzLnNldEF0dHJpYnMoc2hhZGVyLmF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0LlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBXZWJHTE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBudWxsO1xufVxuXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFza01hbmFnZXI7XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgbWFzayBzdGFjayB0aGF0IGlzIHVzZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICpcbiAqIEBwYXJhbSBzdGVuY2lsTWFza1N0YWNrIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9IFRoZSBtYXNrIHN0YWNrXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnNldE1hc2tTdGFjayA9IGZ1bmN0aW9uICggc3RlbmNpbE1hc2tTdGFjayApXG57XG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBpZiAoc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLiBAYWx2aW5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWwgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQuYXR0YWNoU3RlbmNpbEJ1ZmZlcigpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICBpZiAoc21zLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgZ2wuY2xlYXIoZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTtcbiAgICAgICAgc21zLnJldmVyc2UgPSB0cnVlO1xuICAgICAgICBzbXMuY291bnQgPSAwO1xuICAgIH1cblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucHVzaCh3ZWJHTERhdGEpO1xuXG4gICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5WRVJUKTtcblxuICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgIGlmIChzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgIH1cblxuICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSBsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLktFRVApO1xuXG4gICAgc21zLmNvdW50Kys7XG59O1xuXG4vKipcbiAqIFRPRE8gdGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSFcbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuYmluZEdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgLy9pZiAodGhpcy5fY3VycmVudEdyYXBoaWNzID09PSBncmFwaGljcylyZXR1cm47XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBiaW5kIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0zZnYoc2hhZGVyLnVuaWZvcm1zLmNvbG9yLl9sb2NhdGlvbiwgd2ViR0xEYXRhLmNvbG9yKTtcblxuICAgICAgICBnbC51bmlmb3JtMWYoc2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSk7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDQgKiAyLCAwKTtcblxuICAgICAgICAvLyBub3cgZG8gdGhlIHJlc3QuLlxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAqL1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvL3RoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5hY3RpdmF0ZVByaW1pdGl2ZVNoYWRlcigpO1xuLy8gICAgICAgIHNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wcmltaXRpdmVTaGFkZXI7XG4gICAgICAgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG5cbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuLy8gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuXG4gICAgICAvKiAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7Ki9cbiAgICB9XG59O1xuXG4vKipcbiAqIFRPRE8gQGFsdmluXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIHNtcyA9IHRoaXMuc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucG9wKCk7XG5cbiAgICBzbXMuY291bnQtLTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIC8vIHRoZSBzdGFjayBpcyBlbXB0eSFcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgICAgIHRoaXMuYmluZEdyYXBoaWNzKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcblxuICAgICAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRyYXcgYSBxdWFkIHRvIGluY3JlbWVudC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgICAgICAgICAvLyBkcmF3IHRoZSB0cmlhbmdsZSBzdHJpcCFcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCArPSAyO1xuXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKSwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgLy8gIGNvbnNvbGUubG9nKFwiPDw+PlwiKVxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIChsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cblxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIG1hc2sgc3RhY2suXG4gKlxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2sgPSBudWxsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfSBUaGUgbWFzayBkYXRhIHN0cnVjdHVyZSB0byB1c2VcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIFxuICAgIC8vVE9ETyBGSVhcbiAgICBpZiAobWFza0RhdGEuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MudXBkYXRlR3JhcGhpY3MobWFza0RhdGEsIHRoaXMucmVuZGVyZXIuZ2wpO1xuICAgIH1cblxuICAgIGlmICghbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFN0ZW5jaWwobWFza0RhdGEsIG1hc2tEYXRhLl93ZWJHTFt0aGlzLnJlbmRlcmVyLmdsLmlkXS5kYXRhWzBdKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIodGhpcy5yZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcblxuICAgIHRoaXMucG9wU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuIiwiLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLm9uKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xufVxuXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTE1hbmFnZXI7XG5cbi8qKlxuICogR2VuZXJpYyBtZXRob2QgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbldlYkdMTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblx0Ly8gZG8gc29tZSBjb2RlcyBpbml0IVxufTtcblxuLyoqXG4gKiBHZW5lcmljIGRlc3Ryb3kgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlbmRlcmVyLm9mZignY29udGV4dCcsIHRoaXMub25Db250ZXh0Q2hhbmdlLCB0aGlzKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCcuL1NoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBjb21wbGV4IHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQ29tcGxleFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyBjb2xvcjsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoY29sb3IgKiBhbHBoYSAqIHRpbnQsIGFscGhhKTsnLC8vXCIgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIGNvbG9yOiAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsMCwwXSB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB0aW50OiAgIHsgdHlwZTogJzNmJywgdmFsdWU6IFswLCAwLCAwXSB9LFxuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFDb2xvcjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQmFzZSBzaGFkZXIgY2xhc3MgZm9yIFBJWEkgbWFuYWdlZCBzaGFkZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbdW5pZm9ybXNdIHtvYmplY3R9IFVuaWZvcm1zIGZvciB0aGlzIHNoYWRlci5cbiAqIEBwYXJhbSBbYXR0cmlidXRlc10ge29iamVjdH0gQXR0cmlidXRlcyBmb3IgdGhpcyBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIFNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcylcbntcbiAgICBpZiAoIXZlcnRleFNyYyB8fCAhZnJhZ21lbnRTcmMpXG4gICAge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXhpLmpzIEVycm9yLiBTaGFkZXIgcmVxdWlyZXMgdmVydGV4U3JjIGFuZCBmcmFnbWVudFNyYycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5nbCA9IHNoYWRlck1hbmFnZXIucmVuZGVyZXIuZ2w7XG5cbiAgICAvL1RPRE8gbWF5YmUgd2Ugc2hvdWxkIHBhc3MgcmVuZGVyZXIgcmF0aGVyIHRoYW4gc2hhZGVyIG1hbmdlcj8/IGZvb2QgZm9yIHRob3VnaHQuLlxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IHNoYWRlck1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgcHJvZ3JhbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUHJvZ3JhbX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaWZvcm1zIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhdHRyaWJ1dGVzIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50ZXJcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlciBhcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmM7XG5cbiAgICB0aGlzLmluaXQoKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHNoYWRlciBhbmQgdXNlcyBpdFxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbXBpbGUoKTtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy51bmlmb3JtcykpO1xuICAgIHRoaXMuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKSk7XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSB1bmlmb3JtIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgdW5pZm9ybXMgdG8gY2FjaGVcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnVuaWZvcm1zW2tleXNbaV1dLl9sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWNoZXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgYXR0cmlidXRlIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgYXR0cmlidXRlcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlQXR0cmlidXRlTG9jYXRpb25zID0gZnVuY3Rpb24gKGtleXMpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleXNbaV1dID0gdGhpcy5nbC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGtleXNbaV0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgbmVlZGVkIGFueW1vcmUuLi5cblxuICAgIC8vIEJlZ2luIHdvcnN0IGhhY2sgZXZhIC8vXG5cbiAgICAvLyBXSFk/Pz8gT05MWSBvbiBteSBjaHJvbWUgcGl4ZWwgdGhlIGxpbmUgYWJvdmUgcmV0dXJucyAtMSB3aGVuIHVzaW5nIGZpbHRlcnM/XG4gICAgLy8gbWF5YmUgaXRzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnbCBjb250ZXh0LlxuICAgIC8vIEknbSBjb252aW5jZWQgdGhpcyBpcyBhIGJ1ZyBpbiB0aGUgY2hyb21lIGJyb3dzZXIgYXMgdGhlcmUgaXMgTk8gcmVhc29uIHdoeSB0aGlzIHNob3VsZCBiZSByZXR1cm5pbmcgLTEgZXNwZWNpYWxseSBhcyBpdCBvbmx5IG1hbmlmZXN0cyBvbiBteSBjaHJvbWUgcGl4ZWxcbiAgICAvLyBJZiB0aGVyZXMgYW55IHdlYkdMIHBlb3BsZSB0aGF0IGtub3cgd2h5IGNvdWxkIGhhcHBlbiBwbGVhc2UgaGVscCA6KVxuICAgIC8vIGlmICh0aGlzLmF0dHJpYnV0ZXMuYUNvbG9yID09PSAtMSl7XG4gICAgLy8gICAgIHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPSAyO1xuICAgIC8vIH1cblxuICAgIC8vIEVuZCB3b3JzdCBoYWNrIGV2YSAvL1xufTtcblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQgY3JlYXRlcyB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19XG4gKi9cblNoYWRlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHZhciBnbFZlcnRTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuVkVSVEVYX1NIQURFUiwgdGhpcy52ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuRlJBR01FTlRfU0hBREVSLCB0aGlzLmZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuICh0aGlzLnByb2dyYW0gPSBwcm9ncmFtKTtcbn07XG5cbi8qKlxuKiBBZGRzIGEgbmV3IHVuaWZvcm1cbipcbiogQHBhcmFtIHVuaWZvcm0ge29iamVjdH0gdGhlIG5ldyB1bmlmb3JtIHRvIGF0dGFjaFxuKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgbG9jYXRpb24gPSB1bmlmb3JtLl9sb2NhdGlvbixcbiAgICAgICAgdmFsdWUgPSB1bmlmb3JtLnZhbHVlLFxuICAgICAgICBnbCA9IHRoaXMuZ2wsXG4gICAgICAgIGksIGlsO1xuXG4gICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIHNpbmdsZSBpbnQgdmFsdWVcbiAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGZsb2F0IHZhbHVlXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBjYXNlICcxZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSgyKSBvciBKUyBBcnJyYXlcbiAgICAgICAgY2FzZSAnMmYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDMpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICczZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDQpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgMkQgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YyJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDNEIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2Myc6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSA0RCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjQnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMWl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMml2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnNGl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20yJzpcbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgIGNhc2UgJ01hdHJpeDJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB1bmlmb3JtLnRyYW5zcG9zZSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20zJzpcbiAgICAgICAgY2FzZSAnbWF0Myc6XG4gICAgICAgIGNhc2UgJ01hdHJpeDNmdic6XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICBjYXNlICdtYXQ0JzpcbiAgICAgICAgY2FzZSAnTWF0cml4NGZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIENvbG9yIFZhbHVlXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgaW50ZWdlcnMgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdjEnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAyRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yydic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgyICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAyXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDIgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYXJyYXkgb2YgM0QgUG9pbnQgb2JqZWN0c1xuICAgICAgICBjYXNlICd2M3YnOlxuICAgICAgICAgICAgaWYgKCF1bmlmb3JtLl9hcnJheSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMyAqIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlsID0gdmFsdWUubGVuZ3RoOyBpIDwgaWw7ICsraSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogM10gICAgICAgPSB2YWx1ZVtpXS54O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzICsgMV0gICA9IHZhbHVlW2ldLnk7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAyXSAgID0gdmFsdWVbaV0uejtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiA0RCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Y0dic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg0ICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0XSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDJdICAgPSB2YWx1ZVtpXS56O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgM10gICA9IHZhbHVlW2ldLnc7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gUElYSS5UZXh0dXJlXG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuXG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUgfHwgIXVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGlzIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xbJ1RFWFRVUkUnICsgdGhpcy50ZXh0dXJlQ291bnRdKTtcblxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXTtcblxuICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdGV4dHVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9uZS4uXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgICAgICAgICAgLy8gc2V0IHVuaWZvcm0gdG8gdGV4dHVyZSBpbmRleFxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0uX2xvY2F0aW9uLCB0aGlzLnRleHR1cmVDb3VudCk7XG5cbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBuZXh0IHRleHR1cmUgaWRcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgU2hhZGVyIFdhcm5pbmc6IFVua25vd24gdW5pZm9ybSB0eXBlOiAnICsgdW5pZm9ybS50eXBlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNoYWRlciB1bmlmb3JtIHZhbHVlcy5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm1zID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy51bmlmb3JtcylcbiAgICB7XG4gICAgICAgIHRoaXMuc3luY1VuaWZvcm0odGhpcy51bmlmb3Jtc1trZXldKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSW5pdGlhbGlzZXMgYSBTYW1wbGVyMkQgdW5pZm9ybSAod2hpY2ggbWF5IG9ubHkgYmUgYXZhaWxhYmxlIGxhdGVyIG9uIGFmdGVyIGluaXRVbmlmb3JtcyBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBsb2FkZWQpXG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXRTYW1wbGVyMkQgPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbiAgICBpZiAodW5pZm9ybS50ZXh0dXJlRGF0YSlcbiAgICB7XG5cbiAgICAgICAgLy9UT0RPIG1vdmUgdGhpcy4uLlxuICAgICAgICB2YXIgZGF0YSA9IHVuaWZvcm0udGV4dHVyZURhdGE7XG5cbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuXG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBsaWVkQWxwaGEpO1xuICAgICAgICAvLyBHTFRleHR1cmUgPSBtYWcgbGluZWFyLCBtaW4gbGluZWFyX21pcG1hcF9saW5lYXIsIHdyYXAgcmVwZWF0ICsgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIC8vIEdMVGV4dHVyZUxpbmVhciA9IG1hZy9taW4gbGluZWFyLCB3cmFwIGNsYW1wXG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3RSZXBlYXQgPSBtYWcvbWluIE5FQVJFU1QsIHdyYXAgcmVwZWF0XG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3QgPSBtYWcvbWluIG5lYXJlc3QsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gQXVkaW9UZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCA1MTIsIGhlaWdodCAyLCBib3JkZXIgMFxuICAgICAgICAvLyBLZXlUZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCAyNTYsIGhlaWdodCAyLCBib3JkZXIgMFxuXG4gICAgICAgIC8vICBtYWdGaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcbiAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxuXG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZGF0YS5sdW1pbmFuY2UgPyBnbC5MVU1JTkFOQ0UgOiBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLnNvdXJjZSk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGRhdGEubWFnRmlsdGVyID8gZGF0YS5tYWdGaWx0ZXIgOiBnbC5MSU5FQVIgKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSApO1xuXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGRhdGEud3JhcFQgPyBkYXRhLndyYXBUIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyTWFuYWdlci5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHNoYWRlci5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5nbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmdsID0gbnVsbDtcbiAgICB0aGlzLnVuaWZvcm1zID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSBudWxsO1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBudWxsO1xufTtcblxuU2hhZGVyLnByb3RvdHlwZS5fZ2xDb21waWxlID0gZnVuY3Rpb24gKHR5cGUsIHNyYylcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICB0aGlzLmdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgdGhpcy5nbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cbiAgICBpZiAoIXRoaXMuZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgdGhpcy5nbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCBjdXN0b21Vbmlmb3JtcywgY3VzdG9tQXR0cmlidXRlcylcbntcbiAgICB2YXIgdW5pZm9ybXMgPSB7XG5cbiAgICAgICAgdVNhbXBsZXI6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogMCB9LFxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxXSkgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVW5pZm9ybXMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciB1IGluIGN1c3RvbVVuaWZvcm1zKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bmlmb3Jtc1t1XSA9IGN1c3RvbVVuaWZvcm1zW3VdO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgYVZlcnRleFBvc2l0aW9uOiAgICAwLFxuICAgICAgICBhVGV4dHVyZUNvb3JkOiAgICAgIDAsXG4gICAgICAgIGFDb2xvcjogICAgICAgICAgICAgMFxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tQXR0cmlidXRlcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGEgaW4gY3VzdG9tQXR0cmlidXRlcylcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlc1thXSA9IGN1c3RvbUF0dHJpYnV0ZXNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYWdtZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IFRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgU2hhZGVyLmNhbGwodGhpcywgc2hhZGVyTWFuYWdlciwgdmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihnbClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7Ly8sIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKTtcblxufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi4vbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQmFzZSBmb3IgYSBjb21tb24gb2JqZWN0IHJlbmRlcmVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzeXN0ZW0gcmVuZGVyZXIgcGx1Z2luLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gT2JqZWN0UmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufVxuXG5cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYmplY3RSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0UmVuZGVyZXI7XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZW5kZXJlciBhbmQgc2V0cyB0aGUgc2hhZGVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIHNldCB0aGUgc2hhZGVyLi5cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHJlbmRlcmVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xufTtcblxuLyoqXG4gKiBmbHVzaGVzXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIGZsdXNoIVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gcmVuZGVyIHRoZSBvYmplY3Rcbn07XG4iLCIvKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSBxdWFkXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFRoZSBnbCBjb250ZXh0IGZvciB0aGlzIHF1YWQgdG8gdXNlLlxuICovXG5mdW5jdGlvbiBRdWFkKGdsKVxue1xuICAgIC8qXG4gICAgICogdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4vLyAgICB0aGlzLnRleHR1cmVzID0gbmV3IFRleHR1cmVVdnMoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAwLDAsXG4gICAgICAgIDIwMCwwLFxuICAgICAgICAyMDAsMjAwLFxuICAgICAgICAwLDIwMFxuICAgIF0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgcXVhZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMSwwLFxuICAgICAgICAxLDEsXG4gICAgICAgIDAsMVxuICAgIF0pO1xuXG4vLyAgICB2YXIgd2hpdGUgPSAoMHhGRkZGRkYgPj4gMTYpICsgKDB4RkZGRkZGICYgMHhmZjAwKSArICgoMHhGRkZGRkYgJiAweGZmKSA8PCAxNikgKyAoMSAqIDI1NSA8PCAyNCk7XG4gICAgLy9UT0RPIGNvbnZlcnQgdGhpcyB0byBhIDMyIHVuc2lnbmVkIGludCBhcnJheVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBjb21wb25lbnRzIG9mIHRoZSB0cmlhbmdsZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxXG4gICAgXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbXG4gICAgICAgIDAsIDEsIDIsIDAsIDMsIDJcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSB2ZXJ0ZXggYnVmZmVyXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSBpbmRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDggKyAxNikgKiA0LCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnVwbG9hZCgpO1xufVxuXG5RdWFkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFF1YWQ7XG5cbi8qKlxuICogTWFwcyB0d28gUmVjdGFuZ2xlIHRvIHRoZSBxdWFkXG4gKiBAcGFyYW0gcmVjdCB7UElYSS5SZWN0YW5nbGV9IHRoZSBmaXJzdCByZWN0YW5nbGVcbiAqIEBwYXJhbSByZWN0MiB7UElYSS5SZWN0YW5nbGV9IHRoZSBzZWNvbmQgcmVjdGFuZ2xlXG4gKi9cblF1YWQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKHJlY3QsIHJlY3QyKVxue1xuICAgIHZhciB4ID0gMDsgLy9yZWN0Mi54IC8gcmVjdC53aWR0aDtcbiAgICB2YXIgeSA9IDA7IC8vcmVjdDIueSAvIHJlY3QuaGVpZ2h0O1xuXG4gICAgdGhpcy51dnNbMF0gPSB4O1xuICAgIHRoaXMudXZzWzFdID0geTtcblxuICAgIHRoaXMudXZzWzJdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1szXSA9IHk7XG5cbiAgICB0aGlzLnV2c1s0XSA9IHggKyByZWN0Mi53aWR0aCAvIHJlY3Qud2lkdGg7XG4gICAgdGhpcy51dnNbNV0gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1s2XSA9IHg7XG4gICAgdGhpcy51dnNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICAvLy8gLS0tLS1cbiAgICB4ID0gcmVjdDIueDtcbiAgICB5ID0gcmVjdDIueTtcblxuICAgIHRoaXMudmVydGljZXNbMF0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbMV0gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1syXSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzNdID0geTtcblxuICAgIHRoaXMudmVydGljZXNbNF0gPSB4ICsgcmVjdDIud2lkdGg7XG4gICAgdGhpcy52ZXJ0aWNlc1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQ7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzZdID0geDtcbiAgICB0aGlzLnZlcnRpY2VzWzddID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXIgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuUXVhZC5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvLyBUT0RPIGNvdWxkIHByb2JhYmx5IGJlIHB1c2hlZCBpbnRvIG9uZSB1cGxvYWQhXG4gICAgZ2wuYmluZEJ1ZmZlciggZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlciApO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMudmVydGljZXMpO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDggKiA0LCB0aGlzLnV2cyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgKDggKyA4KSAqIDQsIHRoaXMuY29sb3JzKTtcbn07XG5cblF1YWQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xuXG5cbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgICAgIFxuICAgIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcbiAgICBHTEZyYW1lYnVmZmVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xGcmFtZWJ1ZmZlcixcbiAgICBcbiAgICBTdGVuY2lsTWFza1N0YWNrID0gcmVxdWlyZSgnLi9TdGVuY2lsTWFza1N0YWNrJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIGhvcml6b250YWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgdmVydGljYWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAqIEBwYXJhbSByb290IHtib29sZWFufSBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gKi9cbnZhciBSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uLCByb290KVxue1xuICAgIC8vVE9ETyBSZXNvbHV0aW9uIGNvdWxkIGdvIGhlcmUgKCBlZyBsb3cgcmVzIGJsdXJzIClcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvLyBuZXh0IHRpbWUgdG8gY3JlYXRlIGEgZnJhbWUgYnVmZmVyIGFuZCB0ZXh0dXJlXG5cbiAgICAvKipcbiAgICAgKiBBIGZyYW1lIGJ1ZmZlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xGcmFtZUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJDb2xvciA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBvYmplY3QgYXMgYSByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9iamVjdCdzIHRyYW5zZm9ybVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5mcmFtZSA9IG51bGw7XG4gICAgXG4gICAgdGhpcy5kZWZhdWx0RnJhbWUgPSBuZXcgUElYSS5SZWN0YW5nbGUoKTtcbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBudWxsO1xuICAgIHRoaXMuc291cmNlRnJhbWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHN0ZW5jaWwgYnVmZmVyIHN0b3JlcyBtYXNraW5nIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlckJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgc3RlbmNpbCBtYXNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFza1N0YWNrfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG5ldyBTdGVuY2lsTWFza1N0YWNrKCk7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZXMgZmlsdGVyIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6dGhpcyxcbiAgICAgICAgICAgIGZpbHRlcjpbXSxcbiAgICAgICAgICAgIGJvdW5kczp0aGlzLnNpemVcbiAgICAgICAgfVxuICAgIF07XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVFxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gR0xGcmFtZWJ1ZmZlci5jcmVhdGVSR0JBKGdsLCAxMDAsIDEwMCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBBIGZyYW1lIGJ1ZmZlciBuZWVkcyBhIHRhcmdldCB0byByZW5kZXIgdG8uLlxuICAgICAgICAgICAgY3JlYXRlIGEgdGV4dHVyZSBhbmQgYmluZCBpdCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgICovXG4gICAgICAgIFxuXG4gICAgICAgLy8gVE9ETyBjaGFuZ2UhXG4gICAgICAgIC8vIHRoaXMgaXMgdXNlZCBieSB0aGUgYmFzZSB0ZXh0dXJlXG4gICAgICAgIHRoaXMudGV4dHVyZSA9IHRoaXMuZnJhbWVCdWZmZXIudGV4dHVyZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbWFrZSBpdCBhIG51bGwgZnJhbWVidWZmZXIuLlxuICAgICAgICB0aGlzLmZyYW1lQnVmZmVyLmZyYW1lYnVmZmVyID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn07XG5cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZW5kZXJUYXJnZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRhcmdldDtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpbHRlciB0ZXh0dXJlLlxuICpcbiAqIEBwYXJhbSBbYmluZD1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCB3ZSBiaW5kIG91ciBmcmFtZWJ1ZmZlciBiZWZvcmUgY2xlYXJpbmc/XG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbihjbGVhckNvbG9yKVxue1xuICAgIHZhciBjYyA9IGNsZWFyQ29sb3IgfHwgdGhpcy5jbGVhckNvbG9yXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5jbGVhcihjY1swXSxjY1sxXSxjY1syXSxjY1szXSkvL3IsZyxiLGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmF0dGFjaFN0ZW5jaWxCdWZmZXIgPSBmdW5jdGlvbigpXG57XG4gICAgLy9UT0RPIGNoZWNrIGlmIHN0ZW5jaWwgaXMgZG9uZT9cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgaXMgdXNlZCBmb3IgbWFza2luZyBpbiBwaXhpXG4gICAgICogbGV0cyBjcmVhdGUgb25lIGFuZCB0aGVuIGFkZCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgKi9cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZW5hYmxlU3RlbmNpbCgpO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXdwb3J0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIC8vVE9PRCByZWZhY3RvciB1c2FnZSBvZiBmcmFtZS4uXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIuYmluZCgpO1xuXG4gICAgdGhpcy5kZXN0aW5hdGlvbkZyYW1lID0gZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgfHwgdGhpcy5kZWZhdWx0RnJhbWU7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IHRoaXMuc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggdGhpcy5kZXN0aW5hdGlvbkZyYW1lLCB0aGlzLnNvdXJjZUZyYW1lICk7XG5cbiAgICBpZih0aGlzLnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5hcHBlbmQodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIGlmKHRoaXMuZGVzdGluYXRpb25GcmFtZSAhPT0gdGhpcy5zb3VyY2VGcmFtZSlcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgICAgICBnbC5zY2lzc29yKHRoaXMuZGVzdGluYXRpb25GcmFtZS54LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmRpc2FibGUoZ2wuU0NJU1NPUl9URVNUKTtcbiAgICB9XG5cblxuICAgIC8vIFRPRE8gLSBkb2VzIG5vdCBuZWVkIHRvIGJlIHVwZGF0ZWQgYWxsIHRoZSB0aW1lPz9cbiAgICBnbC52aWV3cG9ydCh0aGlzLmRlc3RpbmF0aW9uRnJhbWUueCx0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uKTtcblxuXG59O1xuXG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmFzZWQgb24gYSBwcm9qZWN0aW9uIGZyYW1lICh3aGljaCBpcyBhIHJlY3RhbmdsZSlcbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2FsY3VsYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbkZyYW1lLCBzb3VyY2VGcmFtZSlcbntcbiAgICB2YXIgcG0gPSB0aGlzLnByb2plY3Rpb25NYXRyaXg7XG5cbiAgICBzb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IGRlc3RpbmF0aW9uRnJhbWU7XG5cbiAgICBwbS5pZGVudGl0eSgpO1xuXG4gICAgLy8gVE9ETzogbWFrZSBkZXN0IHNjYWxlIHNvdXJjZVxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAxIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gLTEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAtMSAvIGRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0KjI7XG5cbiAgICAgICAgcG0udHggPSAtMSAtIHNvdXJjZUZyYW1lLnggKiBwbS5hO1xuICAgICAgICBwbS50eSA9IDEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVzaXplcyB0aGUgdGV4dHVyZSB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge051bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGhlaWdodCB7TnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgdGV4dHVyZVxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHdpZHRoID0gd2lkdGggfCAwO1xuICAgIGhlaWdodCA9IGhlaWdodCB8IDA7XG5cbiAgICBpZiAodGhpcy5zaXplLndpZHRoID09PSB3aWR0aCAmJiB0aGlzLnNpemUuaGVpZ2h0ID09PSBoZWlnaHQpIFxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2l6ZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuc2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICB0aGlzLmRlZmF1bHRGcmFtZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuZGVmYXVsdEZyYW1lLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIucmVzaXplKHdpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBoZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuICAgIFxuICAgIHZhciBwcm9qZWN0aW9uRnJhbWUgPSB0aGlzLmZyYW1lIHx8IHRoaXMuc2l6ZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSByZW5kZXIgdGFyZ2V0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIHRoaXMuZnJhbWVCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBTdGVuY2lsTWFza1N0YWNrKClcbntcblx0LyoqXG4gICAgICogVGhlIGFjdHVhbCBzdGFja1xuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsU3RhY2sgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQGFsdmluXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb3VudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY291bnQgPSAwO1xufVxuXG5TdGVuY2lsTWFza1N0YWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0ZW5jaWxNYXNrU3RhY2s7XG5tb2R1bGUuZXhwb3J0cyA9IFN0ZW5jaWxNYXNrU3RhY2s7XG4iLCJDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogTWFwcyBnbCBibGVuZCBjb21iaW5hdGlvbnMgdG8gV2ViR0xcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpKGdsLCBvYmplY3QpXG57XG4gICAgb2JqZWN0ID0gb2JqZWN0IHx8IHt9O1xuXG4gICAgLy9UT0RPIC0gcHJlbXVsdGlwbHkgYWxwaGEgd291bGQgYmUgZGlmZmVyZW50LlxuICAgIC8vYWRkIGEgYm9vbGVhbiBmb3IgdGhhdCFcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQUREXSAgICAgICAgICAgPSBbZ2wuU1JDX0FMUEhBLCBnbC5EU1RfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9IFtnbC5EU1RfQ09MT1IsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5TQ1JFRU5dICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLk9ORV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRBUktFTl0gICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0JVUk5dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRJRkZFUkVOQ0VdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aTtcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcblx0b2JqZWN0PSBvYmplY3QgfHwge307XG5cbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5QT0lOVFNdICAgICAgICAgPSBnbC5QT0lOVFM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORVNdICAgICAgICAgID0gZ2wuTElORVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9MT09QXSAgICAgID0gZ2wuTElORV9MT09QO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLkxJTkVfU1RSSVBdICAgICA9IGdsLkxJTkVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVTXSAgICAgID0gZ2wuVFJJQU5HTEVTO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXSA9IGdsLlRSSUFOR0xFX1NUUklQO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX0ZBTl0gICA9IGdsLlRSSUFOR0xFX0ZBTjtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBTcHJpdGUgb2JqZWN0IGlzIHRoZSBiYXNlIGZvciBhbGwgdGV4dHVyZWQgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCB0byB0aGUgc2NyZWVuXG4gKlxuICogQSBzcHJpdGUgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhbiBpbWFnZSBsaWtlIHRoaXM6XG4gKlxuICogYGBganNcbiAqIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgZm9yIHRoaXMgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZSh0ZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFuY2hvciBzZXRzIHRoZSBvcmlnaW4gcG9pbnQgb2YgdGhlIHRleHR1cmUuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgMCwwIHRoaXMgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0XG4gICAgICogU2V0dGluZyB0aGUgYW5jaG9yIHRvIDAuNSwwLjUgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgY2VudGVyZWRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMSwxIHdvdWxkIG1lYW4gdGhlIHRleHR1cmUncyBvcmlnaW4gcG9pbnQgd2lsbCBiZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmFuY2hvciA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUgKHRoaXMgaXMgaW5pdGlhbGx5IHNldCBieSB0aGUgdGV4dHVyZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQSB2YWx1ZSBvZiAweEZGRkZGRiB3aWxsIHJlbW92ZSBhbnkgdGludCBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2hhZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgc3ByaXRlLiBTZXQgdG8gbnVsbCB0byByZW1vdmUgYSBjdXJyZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJ8UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgY2FjaGVkIHZhbHVlIG9mIHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvLyBjYWxsIHRleHR1cmUgc2V0dGVyXG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBUZXh0dXJlLkVNUFRZO1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZVxuICAgIHRoaXMudmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblNwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLngpICogdGhpcy50ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzaWduID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLngpIHx8IDE7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBzaWduICogdmFsdWUgLyB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgTWF0aC5hYnModGhpcy5zY2FsZS55KSAqIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHByaXZhdGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBzbyBpZiBfd2lkdGggaXMgMCB0aGVuIHdpZHRoIHdhcyBub3Qgc2V0Li5cbiAgICBpZiAodGhpcy5fd2lkdGgpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnggPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgKiB0aGlzLl93aWR0aCAvIHRoaXMudGV4dHVyZS5mcmFtZS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zY2FsZS55ID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLnkpICogdGhpcy5faGVpZ2h0IC8gdGhpcy50ZXh0dXJlLmZyYW1lLmhlaWdodDtcbiAgICB9XG59O1xuXG5TcHJpdGUucHJvdG90eXBlLmNhY2x1bGF0ZVZlcnRpY2VzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgIHd0ID0gdGhpcy50cmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIGEgPSB3dC5hLCBiID0gd3QuYiwgYyA9IHd0LmMsIGQgPSB3dC5kLCB0eCA9IHd0LnR4LCB0eSA9IHd0LnR5LFxuICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhLFxuICAgICAgICB3MCwgdzEsIGgwLCBoMSxcbiAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcbiAgICAgICAgXG4gICAgaWYgKHRyaW0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgYW5kIGlzIG5vdCBhIHRpbGluZ3Nwcml0ZSB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgdzEgPSB0cmltLnggLSB0aGlzLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICBoMSA9IHRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcbiAgICB9XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMF0gPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzFdID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMl0gPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzNdID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzRdID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs1XSA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzZdID0gYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs3XSA9IGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG5cbn1cblxuLyoqXG4qXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy50cmFuc2Zvcm0udXBkYXRlZCB8fCB0aGlzLnRleHR1cmVEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZURpcnR5ID0gZmFsc2U7XG4gICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuICAgIH1cbiAgICBcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFNwcml0ZSBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcbiAgICAgICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5YLFxuICAgICAgICAgICAgbWF4WCxcbiAgICAgICAgICAgIG1pblksXG4gICAgICAgICAgICBtYXhZLFxuICAgICAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YTtcblxuICAgICAgICB2YXIgeDEgPSB2ZXJ0ZXhEYXRhWzBdXG4gICAgICAgIHZhciB5MSA9IHZlcnRleERhdGFbMV1cblxuICAgICAgICB2YXIgeDIgPSB2ZXJ0ZXhEYXRhWzJdXG4gICAgICAgIHZhciB5MiA9IHZlcnRleERhdGFbM11cblxuICAgICAgICB2YXIgeDMgPSB2ZXJ0ZXhEYXRhWzRdXG4gICAgICAgIHZhciB5MyA9IHZlcnRleERhdGFbNV1cblxuICAgICAgICB2YXIgeDQgPSB2ZXJ0ZXhEYXRhWzZdXG4gICAgICAgIHZhciB5NCA9IHZlcnRleERhdGFbN11cblxuICAgICAgICBtaW5YID0geDE7XG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkxO1xuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MTtcbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTE7XG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoaWxkcmVuXG4gICAgICAgIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGRCb3VuZHMgPSB0aGlzLmNvbnRhaW5lckdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICB3MCA9IGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICB3MSA9IGNoaWxkQm91bmRzLnggKyBjaGlsZEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGgwID0gY2hpbGRCb3VuZHMueTtcbiAgICAgICAgICAgIGgxID0gY2hpbGRCb3VuZHMueSArIGNoaWxkQm91bmRzLmhlaWdodDtcblxuICAgICAgICAgICAgbWluWCA9IChtaW5YIDwgdzApID8gbWluWCA6IHcwO1xuICAgICAgICAgICAgbWluWSA9IChtaW5ZIDwgaDApID8gbWluWSA6IGgwO1xuXG4gICAgICAgICAgICBtYXhYID0gKG1heFggPiB3MSkgPyBtYXhYIDogdzE7XG4gICAgICAgICAgICBtYXhZID0gKG1heFkgPiBoMSkgPyBtYXhZIDogaDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fYm91bmRzLnggPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHRoaXMuX2JvdW5kcy55ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG4gICAgdGhpcy5fYm91bmRzLndpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICByZXR1cm4gdGhpcy5fYm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgc3ByaXRlXG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cblNwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLnRleHR1cmUuY3JvcC53aWR0aCA8PSAwIHx8IHRoaXMudGV4dHVyZS5jcm9wLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vICBJZ25vcmUgbnVsbCBzb3VyY2VzXG4gICAgaWYgKHRoaXMudGV4dHVyZS52YWxpZClcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgICAgIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgIGR4LFxuICAgICAgICAgICAgZHksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDtcblxuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgICAgIC8vIElmIHNtb290aGluZ0VuYWJsZWQgaXMgc3VwcG9ydGVkIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgc21vb3RoaW5nIHByb3BlcnR5IGZvciB0aGlzIHRleHR1cmVcbiAgICAgICAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSO1xuICAgICAgICBpZiAocmVuZGVyZXIuc21vb3RoUHJvcGVydHkgJiYgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gIT09IHNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldID0gc21vb3RoaW5nRW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHRyaW1tZWQgd2Ugb2Zmc2V0IGJ5IHRoZSB0cmltIHgveSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgZnJhbWUgZGltZW5zaW9uc1xuXG4gICAgICAgIGlmKHRleHR1cmUucm90YXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICBcbiAgICAgICAgICAgIGR4ICs9IHdpZHRoO1xuXG4gICAgICAgICAgICB3dC50eCA9IGR5ICogd3QuYSArIGR4ICogd3QuYyArIHd0LnR4O1xuICAgICAgICAgICAgd3QudHkgPSBkeSAqIHd0LmIgKyBkeCAqIHd0LmQgKyB3dC50eTtcblxuICAgICAgICAgICAgdmFyIHRlbXAgPSB3dC5hO1xuICAgICAgICAgICAgd3QuYSAgPSAtd3QuYztcbiAgICAgICAgICAgIHd0LmMgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIHRlbXAgPSB3dC5iO1xuICAgICAgICAgICAgd3QuYiAgPSAtd3QuZDtcbiAgICAgICAgICAgIHd0LmQgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIC8vIHRoZSBhbmNob3IgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFib3ZlLCBzbyBsZXRzIHNldCBpdCB0byB6ZXJvXG4gICAgICAgICAgICBkeCA9IDA7XG4gICAgICAgICAgICBkeSA9IDA7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIC8vIEFsbG93IGZvciBwaXhlbCByb3VuZGluZ1xuICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgKHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwLFxuICAgICAgICAgICAgICAgICh3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHggPSBkeCB8IDA7XG4gICAgICAgICAgICBkeSA9IGR5IHwgMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICB3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjbGVhbiB1cCBjYWNoaW5nIC0gaG93IHRvIGNsZWFuIHVwIHRoZSBjYWNoZXM/XG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC55ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgc3ByaXRlIGFuZCBvcHRpb25hbGx5IGl0cyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95VGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95VGV4dHVyZSwgZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5hbmNob3IgPSBudWxsO1xuXG4gICAgaWYgKGRlc3Ryb3lUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcblxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zLi5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICovXG5TcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgU3ByaXRlKFRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXInKSxcbiAgICBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9jcmVhdGVJbmRpY2VzRm9yUXVhZHMnKSxcbiAgICBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4vZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgZ2xDb3JlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgU3ByaXRlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1Nwcml0ZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFJlbmRlcmVyIGRlZGljYXRlZCB0byBkcmF3aW5nIGFuZCBiYXRjaGluZyBzcHJpdGVzLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU3ByaXRlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgdmFsdWVzIHNlbnQgaW4gdGhlIHZlcnRleCBidWZmZXIuXG4gICAgICogcG9zaXRpb25YLCBwb3NpdGlvblksIGNvbG9yUiwgY29sb3JHLCBjb2xvckIgPSA1XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdmVydGV4IGluZm9ybWF0aW9uIGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgU3ByaXRlQmF0Y2ggYmVmb3JlIGl0IGZsdXNoZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIG91ciBiYXRjaFxuICAgIHZhciBudW1WZXJ0cyA9ICh0aGlzLnNpemUgKiA0KSAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBiYXRjaCwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgIHZhciBudW1JbmRpY2VzID0gdGhpcy5zaXplICogNjtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSB2ZXJ0ZXggZGF0YSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5QnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgQXJyYXlCdWZmZXIobnVtVmVydHMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBGbG9hdDMyQXJyYXkgZm9yIHBvc2l0aW9uc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciB1dnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIGNvbG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlcyBvZiB0aGUgZ2VvbWV0cnkgKHF1YWRzKSB0byBkcmF3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHModGhpcy5zaXplKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIFxuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICBcbiAgICAvL1RPRE8gLSAzMDAgaXMgYSBiaXQgbWFnaWMsIGZpZ3VyZSBvdXQgYSBuaWNlciBhbW91bnQhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykgXG4gICAge1xuICAgICAgICB0aGlzLmdyb3Vwc1tpXSA9IHt0ZXh0dXJlczpbXSwgdGV4dHVyZUNvdW50OjAsIGlkczpbXSwgc2l6ZTowLCBzdGFydDowLCBibGVuZDowfTsgXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcblxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsOyAgICBcbn1cblxuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3Nwcml0ZScsIFNwcml0ZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5NQVhfVEVYVFVFUyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cbiAgICB0aGlzLl9zaGFkZXIgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgdGhpcy5NQVhfVEVYVFVFUykvL25ldyBUZXh0dXJlU2hhZGVyKGdsKTtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlcjtcblxuICAgIC8vIGNyZWF0ZSBhIGNvdXBsZSBvZiBidWZmZXJzXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKGdsLCBudWxsLCBnbC5EWU5BTUlDX0RSQVcpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoZ2wsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgLy8gYnVpbGQgdGhlIHZhbyBvYmplY3QgdGhhdCB3aWxsIHJlbmRlci4uXG4gICAgdGhpcy52YW8gPSBuZXcgZ2xDb3JlLlZlcnRleEFycmF5T2JqZWN0KGdsKTtcblxuICAgIHRoaXMudmFvLmFkZEluZGV4KHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCAwKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIGdsLlVOU0lHTkVEX1NIT1JULCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMiAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMyAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVJZCwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgNCAqIDQpO1xuXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdG8gcmVuZGVyIHdoZW4gdXNpbmcgdGhpcyBzcHJpdGViYXRjaFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHNwcml0ZSlcbntcbiAgICAvL1RPRE8gc2V0IGJsZW5kIG1vZGVzLi5cbiAgICAvLyBjaGVjayB0ZXh0dXJlLi5cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPj0gdGhpcy5zaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICBcbiAgICAvLyBnZXQgdGhlIHV2cyBmb3IgdGhlIHRleHR1cmVcbiAgIFxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIGlmICghc3ByaXRlLnRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgLy8gcHVzaCBhIHRleHR1cmUuXG4gICAgLy8gaW5jcmVtZW50IHRoZSBiYXRjaHNpemVcbiAgICB2YXIgbmV4dFRleHR1cmUgPSAgc3ByaXRlLnRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgdmFyIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwO1xuICAgIHZhciBpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50VGV4dHVyZSAhPT0gbmV4dFRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbmV4dFRleHR1cmU7XG4gICAgICAgIFxuICAgICAgICBpZighbmV4dFRleHR1cmUuX2VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9pZCA9IHRoaXMudGV4dHVyZUNvdW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLnRleHR1cmVDb3VudCA9PT0gdGhpcy5NQVhfVEVYVFVFUylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgICAgICAgICAgICAgeyAgICAgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnN0YXJ0ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50KytdID0gbmV4dFRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHR1cmVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdHJpbT8/XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG5cbiAgICAvLyB1cGxvYWQgdGhlIHNwcml0ZSBlbGVtZXRucy4uLlxuICAgIC8vIHRoZXkgaGF2ZSBhbGwgcmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIHdlIGp1c3QgbmVlZCB0byBwdXNoIHRoZW0gaW50byB0aGUgYnVmZmVyLlxuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7XG4gICAgdmFyIHZlcnRleERhdGEgPSBzcHJpdGUudmVydGV4RGF0YVxuICAgIHZhciB0aW50ID0gKHNwcml0ZS50aW50ID4+IDE2KSArIChzcHJpdGUudGludCAmIDB4ZmYwMCkgKyAoKHNwcml0ZS50aW50ICYgMHhmZikgPDwgMTYpICsgKHNwcml0ZS53b3JsZEFscGhhICogMjU1IDw8IDI0KTtcbiAgICB2YXIgdXZzID0gc3ByaXRlLnRleHR1cmUuX3V2cy51dnNfdWludDMyO1xuICAgIC8veHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzBdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMF07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7IFxuICAgIFxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsyXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzNdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzFdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs0XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzVdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzJdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzZdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbN107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbM107XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgYW5kIGVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA9PT0gMClyZXR1cm47XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG5cbiAgICB0aGlzLmN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSB0aGlzLmN1cnJlbnRHcm91cC5zdGFydDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICB7ICAgICBcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgXG4gICAgLy8gZG8gc29tZSBzbWFydCBhcnJheSBzdHVmZi4uXG4gICAgLy8gZG91YmxlIHNpemUgc28gd2UgZG9udCBhbHdheSBzdWJhcnJheSB0aGUgZWxlbWVudHMuLlxuICAgIC8vIHVwbG9hZCB0aGUgdmVydHMgdG8gdGhlIGJ1ZmZlclxuICAgIGlmICh0aGlzLmN1cnJlbnRCYXRjaFNpemUgPiAoIHRoaXMuc2l6ZSAqIDAuNSApIClcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh0aGlzLnZlcnRpY2VzLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbyBrIC4uIHN1YiBhcnJheSBpcyBTTE9XPj9cbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnBvc2l0aW9ucy5zdWJhcnJheSgwLCB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplKTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHZpZXcsIDAsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgc2hhZGVyLi5cbiAgICB0aGlzLnJlbmRlcmVyLmJpbmRTaGFkZXIodGhpcy5fc2hhZGVyKTtcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCAwICk7XG5cbiAgICAvLy8gcmVuZGVyIHRoZSBncm91cHMuLlxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdyb3VwQ291bnQ7IGkrKykge1xuICAgICAgICBcbiAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5ncm91cHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC50ZXh0dXJlQ291bnQ7IGorKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kVGV4dHVyZShncm91cC50ZXh0dXJlc1tqXSwgaik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgZ3JvdXAuc2l6ZSAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCBncm91cC5zdGFydCAqIDYgKiAyKTtcbiAgICB9O1xuXG4gICAgLy8gcmVzZXQgZWxlbWVudHMgZm9yIHRoZSBuZXh0IGZsdXNoXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBzcHJpdGUgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFvLmJpbmQoKTtcbn07XG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgdGhpcy52YW8udW5iaW5kKCk7XG59O1xuLyoqXG4gKiBEZXN0cm95cyB0aGUgU3ByaXRlQmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuY29sb3JzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zcHJpdGVzID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCBtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgdmVydGV4U3JjID0gXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGFUZXh0dXJlSWQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZUZXh0dXJlSWQgPSBhVGV4dHVyZUlkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVwiO1xuICAgIHZhciBmcmFnbWVudFNyYyA9ICdwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG4nICsgZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpICsgXCJcXG5cXG5cIiArIGZyYWdUZW1wbGF0ZVxuXG4gICAgZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYy5yZXBsYWNlKC9cXCVcXCUvZ2ksICcxNicpO1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cbiAgICB2YXIgc2FtcGxlVmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSB7XG4gICAgICAgIHNhbXBsZVZhbHVlc1tpXSA9IGk7XG4gICAgfTtcblxuICAgIHNoYWRlci5iaW5kKCk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnVTYW1wbGVycyA9IHNhbXBsZVZhbHVlcztcblxuICAgIHJldHVybiBzaGFkZXI7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKVxue1xuICAgIHZhciBzcmMgPSAndmVjNCBnZXRTYW1wbGVGcm9tQXJyYXkoc2FtcGxlcjJEIHRleHR1cmVzWyUlXSwgaW50IG5keCwgdmVjMiB1dikge1xcblxcbnZlYzQgY29sb3I7J1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgaWYoaSA+IDApc3JjICs9ICdcXG5lbHNlICc7XG4gICAgICAgIGlmKGkgPCBtYXhUZXh0dXJlcy0xKXNyYyArPSAnaWYobmR4ID09ICcgKyBpICsgJyknO1xuICAgICAgICBzcmMgKz0gJ1xcbnsnO1xuICAgICAgICBzcmMgKz0gJ1xcblxcdGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmVzWycraSsnXSwgdXYpOyc7XG4gICAgICAgIHNyYyArPSAnXFxufSc7XG4gICAgfTtcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdyZXR1cm4gY29sb3I7JztcbiAgICBzcmMgKz0gJ1xcbn0nO1xuXG4gICAgcmV0dXJuIHNyYztcbn1cblxudmFyIGZyYWdUZW1wbGF0ZSA9IFtcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG4gICAgJ3ZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsnLFxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcnNbJSVdOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICdnbF9GcmFnQ29sb3IgPSBnZXRTYW1wbGVGcm9tQXJyYXkodVNhbXBsZXJzLCBpbnQodlRleHR1cmVJZCksIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yOycsXG4gICAgJ30nXG5dLmpvaW4oJ1xcbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyO1xuIiwidmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBUZXh0IE9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nIGluIHlvdXIgdGV4dCBzdHJpbmcsXG4gKiBvciBhZGQgYSB3b3JkV3JhcCBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSBhbmQgYW5kIHdvcmRXcmFwV2lkdGggcHJvcGVydHkgd2l0aCBhIHZhbHVlIGluIHRoZSBzdHlsZSBvYmplY3QuXG4gKlxuICogQSBUZXh0IGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBzdHJpbmcgYW5kIGEgc3R5bGUgb2JqZWN0XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0ID0gbmV3IFBJWEkuVGV4dCgnVGhpcyBpcyBhIHBpeGkgdGV4dCcse2ZvbnQgOiAnMjRweCBBcmlhbCcsIGZpbGwgOiAweGZmMTAxMCwgYWxpZ24gOiAnY2VudGVyJ30pO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbc3R5bGUuZm9udF0ge3N0cmluZ30gZGVmYXVsdCAnYm9sZCAyMHB4IEFyaWFsJyBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlLmcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcCwgaXQgbmVlZHMgd29yZFdyYXAgdG8gYmUgc2V0IHRvIHRydWVcbiAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzRdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gKi9cbmZ1bmN0aW9uIFRleHQodGV4dCwgc3R5bGUsIHJlc29sdXRpb24pXG57XG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgMmQgY29udGV4dCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gd2l0aFxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY2FudmFzLlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyh0aGlzLmNhbnZhcyk7XG4gICAgdGV4dHVyZS50cmltID0gbmV3IG1hdGguUmVjdGFuZ2xlKCk7XG4gICAgU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbn1cblxuLy8gY29uc3RydWN0b3JcblRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTcHJpdGUucHJvdG90eXBlKTtcblRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gVGV4dDtcblxuVGV4dC5mb250UHJvcGVydGllc0NhY2hlID0ge307XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZm9udD0nYm9sZCAyMHB0IEFyaWFsJ10ge3N0cmluZ30gVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gICAgICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZWcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGVnICdibHVlJywgJyNGQ0ZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXBcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd8bnVtYmVyfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNl0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gICAgICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAgICAgKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAgICAgKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHN0eWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdHlsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5maWxsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpbGwgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmZpbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLnN0cm9rZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zdHJva2UgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLnN0cm9rZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZHJvcFNoYWRvd0NvbG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZHJvcFNoYWRvd0NvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGUuZm9udCA9IHN0eWxlLmZvbnQgfHwgJ2JvbGQgMjBwdCBBcmlhbCc7XG4gICAgICAgICAgICBzdHlsZS5maWxsID0gc3R5bGUuZmlsbCB8fCAnYmxhY2snO1xuICAgICAgICAgICAgc3R5bGUuYWxpZ24gPSBzdHlsZS5hbGlnbiB8fCAnbGVmdCc7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2UgPSBzdHlsZS5zdHJva2UgfHwgJ2JsYWNrJzsgLy9wcm92aWRlIGEgZGVmYXVsdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzLzEzNlxuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIHx8IDA7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcCA9IHN0eWxlLndvcmRXcmFwIHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXBXaWR0aCA9IHN0eWxlLndvcmRXcmFwV2lkdGggfHwgMTAwO1xuXG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93ID0gc3R5bGUuZHJvcFNoYWRvdyB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvciB8fCAnIzAwMDAwMCc7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93QW5nbGUgPSBzdHlsZS5kcm9wU2hhZG93QW5nbGUgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA6IE1hdGguUEkgLyA2O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlID0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgOiA1O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0JsdXIgOiAwOyAvL3NoYWRvd0JsdXIgaXMgJzAnIGJ5IGRlZmF1bHQgYWNjb3JkaW5nIHRvIEhUTUxcblxuICAgICAgICAgICAgc3R5bGUucGFkZGluZyA9IHN0eWxlLnBhZGRpbmcgfHwgMDtcblxuICAgICAgICAgICAgc3R5bGUudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lIHx8ICdhbHBoYWJldGljJztcblxuICAgICAgICAgICAgc3R5bGUubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbiB8fCAnbWl0ZXInO1xuICAgICAgICAgICAgc3R5bGUubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQgfHwgMTA7XG5cbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gc3R5bGU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNvcHkgZm9yIHRoZSB0ZXh0IG9iamVjdC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCl7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgc3R5bGUgPSB0aGlzLl9zdHlsZTtcbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG5cbiAgICAvLyB3b3JkIHdyYXBcbiAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbCB0ZXh0XG4gICAgdmFyIG91dHB1dFRleHQgPSBzdHlsZS53b3JkV3JhcCA/IHRoaXMud29yZFdyYXAodGhpcy5fdGV4dCkgOiB0aGlzLl90ZXh0O1xuXG4gICAgLy8gc3BsaXQgdGV4dCBpbnRvIGxpbmVzXG4gICAgdmFyIGxpbmVzID0gb3V0cHV0VGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCB3aWR0aFxuICAgIHZhciBsaW5lV2lkdGhzID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aCk7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGZvbnRQcm9wZXJ0aWVzID0gdGhpcy5kZXRlcm1pbmVGb250UHJvcGVydGllcyhzdHlsZS5mb250KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBsaW5lV2lkdGg7XG4gICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICB2YXIgd2lkdGggPSBtYXhMaW5lV2lkdGggKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICB3aWR0aCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSAoIHdpZHRoICsgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgaGVpZ2h0XG4gICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLnN0eWxlLmxpbmVIZWlnaHQgfHwgZm9udFByb3BlcnRpZXMuZm9udFNpemUgKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG5cbiAgICB2YXIgaGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aDtcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGhlaWdodCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gKCBoZWlnaHQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nICogMiApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5jb250ZXh0LnNjYWxlKCB0aGlzLnJlc29sdXRpb24sIHRoaXMucmVzb2x1dGlvbik7XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgfVxuXG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFN0eWxlPVwiI0ZGMDAwMFwiO1xuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuICAgIHRoaXMuY29udGV4dC5zdHJva2VTdHlsZSA9IHN0eWxlLnN0cm9rZTtcbiAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIHRoaXMuY29udGV4dC50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmU7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVKb2luID0gc3R5bGUubGluZUpvaW47XG4gICAgdGhpcy5jb250ZXh0Lm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0O1xuXG4gICAgdmFyIGxpbmVQb3NpdGlvblg7XG4gICAgdmFyIGxpbmVQb3NpdGlvblk7XG5cbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGlmIChzdHlsZS5kcm9wU2hhZG93Qmx1ciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhTaGFkb3dPZmZzZXQgPSBNYXRoLmNvcyhzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgICAgICB2YXIgeVNoYWRvd09mZnNldCA9IE1hdGguc2luKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCArIHhTaGFkb3dPZmZzZXQsIGxpbmVQb3NpdGlvblkgKyB5U2hhZG93T2Zmc2V0ICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL3NldCBjYW52YXMgdGV4dCBzdHlsZXNcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZmlsbDtcblxuICAgIC8vZHJhdyBsaW5lcyBsaW5lIGJ5IGxpbmVcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0cm9rZSAmJiBzdHlsZS5zdHJva2VUaGlja25lc3MpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJva2VUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUudHJpbS54ID0gMDtcbiAgICB0ZXh0dXJlLnRyaW0ueSA9IC10aGlzLl9zdHlsZS5wYWRkaW5nO1xuXG4gICAgdGV4dHVyZS50cmltLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGV4dHVyZS50cmltLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAtIHRoaXMuX3N0eWxlLnBhZGRpbmcqMjtcblxuICAgIHRoaXMuX3dpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5lbWl0KCd1cGRhdGUnLCAgdGV4dHVyZS5iYXNlVGV4dHVyZSk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqL1xuVGV4dC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICAvL3RoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5yZW5kZXJXZWJHTC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgLy8gICB0aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYXNjZW50LCBkZXNjZW50IGFuZCBmb250U2l6ZSBvZiBhIGdpdmVuIGZvbnRTdHlsZVxuICpcbiAqIEBwYXJhbSBmb250U3R5bGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGZvbnRTdHlsZSlcbntcbiAgICB2YXIgcHJvcGVydGllcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdO1xuXG4gICAgaWYgKCFwcm9wZXJ0aWVzKVxuICAgIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzO1xuICAgICAgICB2YXIgY29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnfE3DiXEnKS53aWR0aCk7XG4gICAgICAgIHZhciBiYXNlbGluZSA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCdNJykud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xuXG4gICAgICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiAxLjQgfCAwO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNmMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQoJ3xNw4lxJywgMCwgYmFzZWxpbmUpO1xuXG4gICAgICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgICB2YXIgcGl4ZWxzID0gaW1hZ2VkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmUgPSB3aWR0aCAqIDQ7XG5cbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgIHZhciBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZWxpbmU7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCArPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnQgPSBiYXNlbGluZSAtIGk7XG5cbiAgICAgICAgaWR4ID0gcGl4ZWxzIC0gbGluZTtcbiAgICAgICAgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGRlc2NlbnQuIHNjYW4gZnJvbSBib3R0b20gdG8gdG9wIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggLT0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IGkgLSBiYXNlbGluZTtcbiAgICAgICAgcHJvcGVydGllcy5mb250U2l6ZSA9IHByb3BlcnRpZXMuYXNjZW50ICsgcHJvcGVydGllcy5kZXNjZW50O1xuXG4gICAgICAgIFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBuZXdsaW5lcyB0byBhIHN0cmluZyB0byBoYXZlIGl0IG9wdGltYWxseSBmaXQgaW50byB0aGUgaG9yaXpvbnRhbFxuICogYm91bmRzIHNldCBieSB0aGUgVGV4dCBvYmplY3QncyB3b3JkV3JhcFdpZHRoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS53b3JkV3JhcCA9IGZ1bmN0aW9uICh0ZXh0KVxue1xuICAgIC8vIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyXG4gICAgLy8gdGhhbiBpdHMgaG9yaXpvbnRhbCBib3VuZHMuXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICAgIHZhciB3b3JkV3JhcFdpZHRoID0gdGhpcy5fc3R5bGUud29yZFdyYXBXaWR0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XG4gICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQod29yZHNbal0pLndpZHRoO1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aFdpdGhTcGFjZSA9IHdvcmRXaWR0aCArIHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xuICAgICAgICAgICAgaWYgKGogPT09IDAgfHwgd29yZFdpZHRoV2l0aFNwYWNlID4gc3BhY2VMZWZ0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcHJpbnRpbmcgdGhlIG5ld2xpbmUgaWYgaXQncyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZSB0aGF0IGlzXG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSB3b3JkIHdyYXAgd2lkdGguXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal07XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB3b3Jkc1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgbGluZXMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFRleHQgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgVGV4dFxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UZXh0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzLmNhbGwodGhpcywgbWF0cml4KTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT10cnVlXSB7Ym9vbGVhbn0gd2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICAvLyBtYWtlIHN1cmUgdG8gcmVzZXQgdGhlIHRoZSBjb250ZXh0IGFuZCBjYW52YXMuLiBkb250IHdhbnQgdGhpcyBoYW5naW5nIGFyb3VuZCBpbiBtZW1vcnkhXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG5cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGVzdHJveUJhc2VUZXh0dXJlKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIFJlbmRlclRhcmdldCA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBGaWx0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKSxcbiAgICB0ZW1wUmVjdCA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuXG4vKipcbiAqIEEgQmFzZVJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIEJhc2VSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIHRha2VzIGEgc25hcHNob3Qgb2YgYW55IERpc3BsYXkgT2JqZWN0IGdpdmVuIHRvIGl0cyByZW5kZXIgbWV0aG9kLiBUaGUgcG9zaXRpb25cbiAqIGFuZCByb3RhdGlvbiBvZiB0aGUgZ2l2ZW4gRGlzcGxheSBPYmplY3RzIGlzIGlnbm9yZWQuIEZvciBleGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcigxMDI0LCAxMDI0LCB7IHZpZXc6IGNhbnZhcywgcmF0aW86IDEgfSk7XG4gKiB2YXIgQmFzZXJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5CYXNlUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihzcHJpdGUpO1xuICogYGBgXG4gKlxuICogVGhlIFNwcml0ZSBpbiB0aGlzIGNhc2Ugd2lsbCBiZSByZW5kZXJlZCB0byBhIHBvc2l0aW9uIG9mIDAsMC4gVG8gcmVuZGVyIHRoaXMgc3ByaXRlIGF0IGl0cyBhY3R1YWxcbiAqIHBvc2l0aW9uIGEgQ29udGFpbmVyIHNob3VsZCBiZSB1c2VkOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZG9jID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKlxuICogZG9jLmFkZENoaWxkKHNwcml0ZSk7XG4gKlxuICogQmFzZXJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiBCYXNlcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZVxuICogQHBhcmFtIFt3aWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbaGVpZ2h0PTEwMF0ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIEJhc2VSZW5kZXJUZXh0dXJlLCB5b3UgbXVzdCBwYXNzIGEgcmVuZGVyZXIgaW50byB0aGUgY29uc3RydWN0b3IuJyk7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUuY2FsbCh0aGlzLCBudWxsLCBzY2FsZU1vZGUpO1xuICAgXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047O1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRHJhdy9yZW5kZXIgdGhlIGdpdmVuIERpc3BsYXlPYmplY3Qgb250byB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBkZXNjZW5kZW50cyBhcmUgdHJhbnNmb3JtZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIElmIGB1cGRhdGVUcmFuc2Zvcm1gIGlzIHRydWUgdGhlbiB0aGUgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQgYmVmb3JlIHRoZVxuICAgICAqIG1ldGhvZCByZXR1cm5zLiBPdGhlcndpc2UgaXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcgY29kZSB0byBjb3JyZWN0bHkgdXNlIG9yIHJlc2V0XG4gICAgICogdGhlIHRyYW5zZm9ybWVkIGRpc3BsYXkgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5IG9iamVjdCBpcyBhbHdheXMgcmVuZGVyZWQgd2l0aCBhIHdvcmxkQWxwaGEgdmFsdWUgb2YgMS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICAgICAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gICAgICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAgICAgKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB1c2VzLiBBIEJhc2VSZW5kZXJUZXh0dXJlIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgcmVuZGVyZXIgYXQgdGhlIG1vbWVudCBpZiBpdHMgd2ViR0wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnNjYWxlTW9kZSwgdGhpcy5yZXNvbHV0aW9uKTsvLywgdGhpcy50aGlzLnNjYWxlTW9kZSk7XG4gICAgICAgIHRoaXMuX2dsVGV4dHVyZXNbZ2wuaWRdID0gIHRoaXMudGV4dHVyZUJ1ZmZlci50ZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgLy9UT0RPIHJlZmFjdG9yIGZpbHRlciBtYW5hZ2VyLi4gYXMgcmVhbGx5IGl0cyBubyBsb25nZXIgYSBtYW5hZ2VyIGlmIHdlIHVzZSBpdCBoZXJlLi5cbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbmV3IEZpbHRlck1hbmFnZXIodGhpcy5yZW5kZXJlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlcldlYkdMO1xuXG4gICAgICAgIC8vIHRoZSBjcmVhdGlvbiBvZiBhIGZpbHRlciBtYW5hZ2VyIHVuYmluZHMgdGhlIGJ1ZmZlcnMuLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgICAgICBpZih0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQpdGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlckNhbnZhcztcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcih0aGlzLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuaGVpZ2h0KiB0aGlzLnJlc29sdXRpb24pO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcblxufVxuXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIHVwZGF0ZUJhc2Uge2Jvb2xlYW59IFNob3VsZCB0aGUgYmFzZVRleHR1cmUud2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYmUgcmVzaXplZCBhcyB3ZWxsP1xuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgaWYgKHdpZHRoID09PSB0aGlzLndpZHRoICYmIGhlaWdodCA9PT0gdGhpcy5oZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZCA9ICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7XG5cbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoZGVzdGluYXRpb25GcmFtZSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuYmluZEZyYW1lYnVmZmVyKHRoaXMucmVuZGVyZXIuZ2wuRlJBTUVCVUZGRVIsIHRoaXMudGV4dHVyZUJ1ZmZlci5mcmFtZUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKGZhbHNlLCBkZXN0aW5hdGlvbkZyYW1lKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAoZnJhbWUsIGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAodXBkYXRlVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpID8gdXBkYXRlVHJhbnNmb3JtIDogdHJ1ZTsvLyF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIudHJhbnNmb3JtID0gbWF0cml4O1xuXG4gICAgLy9UT0RPIG5vdCBhIGZhbiB0aGF0IHRoaXMgaXMgaGVyZS4uLiBpdCB3aWxsIG1vdmUhXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKCk7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICBpZiAodXBkYXRlVHJhbnNmb3JtKVxuICAgIHtcblxuICAgICAgICAvLyByZXNldCB0aGUgbWF0cml4IG9mIHRoZSBkaXNwbGF0eU9iamVjdC4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uaWRlbnRpdHkoKTtcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmN1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGVtcFJlY3Qud2lkdGggPSBmcmFtZS5oZWlnaHQ7XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gZnJhbWUud2lkdGg7XG4gICBcbiAgICAvL1RPRE8gcmVuYW1lIHRleHR1cmVCdWZmZXIgdG8gcmVuZGVyVGFyZ2V0Li5cbiAgICB2YXIgdGVtcCA9ICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0aGlzLmZpbHRlck1hbmFnZXI7XG4gICAgXG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIuYWN0aXZhdGUoZnJhbWUsIHRlbXBSZWN0KTtcbiAgICBjb25zb2xlLmxvZyhkaXNwbGF5T2JqZWN0KVxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnRleHR1cmVCdWZmZXIsIGNsZWFyKTtcblxuICAgLy8gY29uc29sZS5sb2coXCJSRU5ERVJJTkcgXCIpO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRlbXA7XG59O1xuXG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcl0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVwZGF0ZVRyYW5zZm9ybSA9ICEhdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdmFyIHd0ID0gdGVtcE1hdHJpeDtcblxuICAgIHd0LmlkZW50aXR5KCk7XG5cbiAgICBpZiAobWF0cml4KVxuICAgIHtcbiAgICAgICAgd3QuYXBwZW5kKG1hdHJpeCk7XG4gICAgfVxuXG5cbiAgICB3dC50eCArPSBmcmFtZS54O1xuICAgIHd0LnR5ICs9IGZyYW1lLnk7XG5cbiAgICB2YXIgY2FjaGVkV3QgPSBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtO1xuICAgIFxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSB3dDtcblxuICAgIC8vIHNldFdvcmxkIEFscGhhIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgcmVuZGVyZXIgYXQgZnVsbCBvcGFjaXR5XG4gICAgZGlzcGxheU9iamVjdC53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICB2YXIgaSwgajtcblxuICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBcbi8vICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5cbiAgICB2YXIgY29udGV4dCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlYWxSZXNvbHV0aW9uID0gdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIGNvbnRleHQpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gcmVhbFJlc29sdXRpb247XG5cbiAgICBpZihkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID09PSB3dClcbiAgICB7XG4gICAgICAgIC8vIGZpeGVzIGNhY2hlQXNCaXRtYXAgSGFwcGVuaW5nIGR1cmluZyB0aGUgYWJvdmUuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gY2FjaGVkV3Q7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBkZXN0cm95QmFzZSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIGZpbHRlcm1hbmFnZXIuLlxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoZnJhbWUpXG57XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uuc3JjID0gdGhpcy5nZXRCYXNlNjQoZnJhbWUpO1xuICAgIHJldHVybiBpbWFnZTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGlzIHRleHR1cmUuIEl0IHdvcmtzIGJ5IGNhbGxpbmcgQmFzZVJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgIHJldHVybiB0aGlzLmdldENhbnZhcyhmcmFtZSkudG9EYXRhVVJMKCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIEJhc2VSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldENhbnZhcyA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2lkdGggPSBmcmFtZS53aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBjYW52YXNEYXRhID0gdGVtcENhbnZhcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2FudmFzRGF0YS5kYXRhLnNldCh3ZWJHTFBpeGVscyk7XG5cbiAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICByZXR1cm4gdGVtcENhbnZhcy5jYW52YXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy53aWR0aDtcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoZnJhbWUud2lkdGggPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGggJiYgXG4gICAgICAgICAgIGZyYW1lLmhlaWdodCA9PT0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5oZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IENhbnZhc0J1ZmZlcihmcmFtZS53aWR0aCAqIHJlc29sdXRpb24sIGZyYW1lLmhlaWdodCAqIHJlc29sdXRpb24pO1xuICAgICAgICAgICAgdmFyIGNhbnZhc0RhdGEgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dC5nZXRJbWFnZURhdGEoZnJhbWUueCAgKiByZXNvbHV0aW9uLCBmcmFtZS55ICogcmVzb2x1dGlvbiwgZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIHRoZSBlbnRpcmUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICBpZighZnJhbWUpXG4gICAge1xuICAgICAgICBmcmFtZSA9IHRlbXBSZWN0O1xuICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICByZXR1cm4gd2ViR0xQaXhlbHM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIGEgcGl4ZWwgd2l0aGluIHRoZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uIChmcmFtZSwgeCwgeSlcbntcbiAgICB0ZW1wUmVjdC54ID0geDtcbiAgICB0ZW1wUmVjdC55ID0geTtcbiAgICB0ZW1wUmVjdC53aWR0aCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gMSAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmKGZyYW1lKVxuICAgIHtcbiAgICAgICAgdGVtcFJlY3QueCArPSBmcmFtZS54O1xuICAgICAgICB0ZW1wUmVjdC55ICs9IGZyYW1lLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UGl4ZWxzKHRlbXBSZWN0KTtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlLiBBbGwgdGV4dHVyZXMgaGF2ZSBhIGJhc2UgdGV4dHVyZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50IHBpeGVsIHJhdGlvc1xuICovXG5mdW5jdGlvbiBCYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDEwMDtcblxuICAgIC8vIFRPRE8gZG9jc1xuICAgIC8vIHVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2VcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxXaWR0aCA9IDEwMDtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgaGVpZ2h0IG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUgdG8gYXBwbHkgd2hlbiBzY2FsaW5nIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuTElORUFSXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIG9uY2UgdGhlIGJhc2UgdGV4dHVyZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbmV2ZXIgdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmFpbHMgdG8gbG9hZCBvciBoYXMgbm8gdGV4dHVyZSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgaWYgdGhlIHNvdXJjZSBpcyBjdXJyZW50bHkgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIElmIGFuIEltYWdlIHNvdXJjZSBpcyBsb2FkaW5nIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmVcbiAgICAgKiBkaXNwYXRjaGVkIHdoZW4gdGhlIG9wZXJhdGlvbiBlbmRzLiBBbiB1bmRlcnlsaW5nIHNvdXJjZSB0aGF0IGlzXG4gICAgICogaW1tZWRpYXRlbHktYXZhaWxhYmxlIGJ5cGFzc2VzIGxvYWRpbmcgZW50aXJlbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW1hZ2Ugc291cmNlIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUT0RPOiBNYWtlIHRoaXMgYSBzZXR0ZXIgdGhhdCBjYWxscyBsb2FkU291cmNlKCk7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtJbWFnZXxDYW52YXN9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsOyAvLyBzZXQgaW4gbG9hZFNvdXJjZSwgaWYgYXQgYWxsXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiBSR0IgY2hhbm5lbHMgc2hvdWxkIGJlIHByZS1tdWx0aXBsaWVkIGJ5IEFscGhhICAoV2ViR0wgb25seSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBvciBub3QgdGhlIHRleHR1cmUgaXMgYSBwb3dlciBvZiB0d28sIHRyeSB0byB1c2UgcG93ZXIgb2YgdHdvIHRleHR1cmVzIGFzIG11Y2ggYXMgeW91IGNhblxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IGZhbHNlO1xuXG4gICAgLy8gdXNlZCBmb3Igd2ViR0xcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiBhIG1pcG1hcCBvZiB0aGlzIHRleHR1cmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLiBUaGlzIHZhbHVlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIHRleHR1cmUgaXMgdXNlZFxuICAgICAqIEFsc28gdGhlIHRleHR1cmUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBzaXplIHRvIHdvcmtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5taXBtYXAgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHJlbmRlcmVyIElEcyB0byB3ZWJnbCB0ZXh0dXJlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgV2ViR0xUZXh0dXJlPn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9pZCA9IDA7XG4gICAgXG4gICAgLy8gaWYgbm8gc291cmNlIHBhc3NlZCBkb24ndCB0cnkgdG8gbG9hZFxuICAgIGlmIChzb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmluaXNoZXMgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkZWRcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmFpbHMgdG8gbG9hZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBCYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0ZXh0dXJlIG9uIGFsbCB0aGUgd2ViZ2wgcmVuZGVyZXJzLCB0aGlzIGFsc28gYXNzdW1lcyB0aGUgc3JjIGhhcyBjaGFuZ2VkLlxuICpcbiAqIEBmaXJlcyB1cGRhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5yZWFsV2lkdGggPSB0aGlzLnNvdXJjZS5uYXR1cmFsV2lkdGggfHwgdGhpcy5zb3VyY2Uud2lkdGg7XG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gdGhpcy5zb3VyY2UubmF0dXJhbEhlaWdodCB8fCB0aGlzLnNvdXJjZS5oZWlnaHQ7XG5cbiAgICB0aGlzLndpZHRoID0gdGhpcy5yZWFsV2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlYWxIZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IHV0aWxzLmlzUG93ZXJPZlR3byh0aGlzLnJlYWxXaWR0aCwgdGhpcy5yZWFsSGVpZ2h0KTtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIExvYWQgYSBzb3VyY2UuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBpcyBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlLCBzdWNoIGFzIGFuIGltYWdlIHRoYXQgbmVlZHMgdG8gYmVcbiAqIGRvd25sb2FkZWQsIHRoZW4gdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIGluIHRoZSBmdXR1cmVcbiAqIGFuZCBgaGFzTG9hZGVkYCB3aWxsIHJlbWFpbiBmYWxzZSBhZnRlciB0aGlzIGNhbGwuXG4gKlxuICogVGhlIGxvZ2ljIHN0YXRlIGFmdGVyIGNhbGxpbmcgYGxvYWRTb3VyY2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGVnLiBgZnJvbUltYWdlYCwgYG5ldyBCYXNlVGV4dHVyZWApIGlzOlxuICpcbiAqICAgICBpZiAodGV4dHVyZS5oYXNMb2FkZWQpXG4ge1xuICogICAgICAgIC8vIHRleHR1cmUgcmVhZHkgZm9yIHVzZVxuICogICAgIH0gZWxzZSBpZiAodGV4dHVyZS5pc0xvYWRpbmcpXG4ge1xuICogICAgICAgIC8vIGxpc3RlbiB0byAnbG9hZGVkJyBhbmQvb3IgJ2Vycm9yJyBldmVudHMgb24gdGV4dHVyZVxuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAgLy8gbm90IGxvYWRpbmcsIG5vdCBnb2luZyB0byBsb2FkIFVOTEVTUyB0aGUgc291cmNlIGlzIHJlbG9hZGVkXG4gKiAgICAgICAgLy8gKGl0IG1heSBzdGlsbCBtYWtlIHNlbnNlIHRvIGxpc3RlbiB0byB0aGUgZXZlbnRzKVxuICogICAgIH1cbiAqXG4gKiBAcHJvdGVjdGVkXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUubG9hZFNvdXJjZSA9IGZ1bmN0aW9uIChzb3VyY2UpXG57XG4gICAgdmFyIHdhc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZztcbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAod2FzTG9hZGluZyAmJiB0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc291cmNlLm9uZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgLy8gQXBwbHkgc291cmNlIGlmIGxvYWRlZC4gT3RoZXJ3aXNlIHNldHVwIGFwcHJvcHJpYXRlIGxvYWRpbmcgbW9uaXRvcnMuXG4gICAgaWYgKCh0aGlzLnNvdXJjZS5jb21wbGV0ZSB8fCB0aGlzLnNvdXJjZS5nZXRDb250ZXh0KSAmJiB0aGlzLnNvdXJjZS53aWR0aCAmJiB0aGlzLnNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNvdXJjZS5nZXRDb250ZXh0KVxuICAgIHtcblxuICAgICAgICAvLyBJbWFnZSBmYWlsIC8gbm90IHJlYWR5XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuXG4gICAgICAgIHNvdXJjZS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgc2NvcGUuZW1pdCgnbG9hZGVkJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvdXJjZS5vbmVycm9yID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5lbWl0KCdlcnJvcicsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQZXIgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjdGhlLWltZy1lbGVtZW50XG4gICAgICAgIC8vICAgXCJUaGUgdmFsdWUgb2YgYGNvbXBsZXRlYCBjYW4gdGh1cyBjaGFuZ2Ugd2hpbGUgYSBzY3JpcHQgaXMgZXhlY3V0aW5nLlwiXG4gICAgICAgIC8vIFNvIGNvbXBsZXRlIG5lZWRzIHRvIGJlIHJlLWNoZWNrZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gYWRkZWQuLlxuICAgICAgICAvLyBOT1RFOiBjb21wbGV0ZSB3aWxsIGJlIHRydWUgaWYgdGhlIGltYWdlIGhhcyBubyBzcmMgc28gYmVzdCB0byBjaGVjayBpZiB0aGUgc3JjIGlzIHNldC5cbiAgICAgICAgaWYgKHNvdXJjZS5jb21wbGV0ZSAmJiBzb3VyY2Uuc3JjKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyAuLmFuZCBpZiB3ZSdyZSBjb21wbGV0ZSBub3csIG5vIG5lZWQgZm9yIGNhbGxiYWNrc1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgc29tZSBvdGhlciB0cmFja2luZyB2YXJzIG9uY2VcbiAqIGEgc291cmNlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5fc291cmNlTG9hZGVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBiYXNlIHRleHR1cmVcbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5pbWFnZVVybClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuICAgICAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlLnNyYyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLnNvdXJjZS5fcGl4aUlkXTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG5cbiAgICB0aGlzLmRpc3Bvc2UoKTtcbn07XG5cbi8qKlxuICogRnJlZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTCBtZW1vcnkgd2l0aG91dCBkZXN0cm95aW5nIHRoaXMgdGV4dHVyZSBvYmplY3QuXG4gKiBUaGlzIG1lYW5zIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSB0ZXh0dXJlIGxhdGVyIHdoaWNoIHdpbGwgdXBsb2FkIGl0IHRvIEdQVVxuICogbWVtb3J5IGFnYWluLlxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIHRoaXMpO1xuXG4gICAgLy8gdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lZWRlZCwgdGhlIHJlbmRlcmVycyBzaG91bGQgY2xlYW51cCBhbGwgdGhlIGdsIHRleHR1cmVzLlxuICAgIC8vIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgc291cmNlIGltYWdlIG9mIHRoZSB0ZXh0dXJlLlxuICogVGhlIG9yaWdpbmFsIHNvdXJjZSBtdXN0IGJlIGFuIEltYWdlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5ld1NyYyB7c3RyaW5nfSB0aGUgcGF0aCBvZiB0aGUgaW1hZ2VcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNvdXJjZUltYWdlID0gZnVuY3Rpb24gKG5ld1NyYylcbntcbiAgICB0aGlzLnNvdXJjZS5zcmMgPSBuZXdTcmM7XG5cbiAgICB0aGlzLmxvYWRTb3VyY2UodGhpcy5zb3VyY2UpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIGJhc2UgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBTaG91bGQgdXNlIGFub255bW91cyBDT1JTPyBEZWZhdWx0cyB0byB0cnVlIGlmIHRoZSBVUkwgaXMgbm90IGEgZGF0YS1VUkkuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmIChjcm9zc29yaWdpbiA9PT0gdW5kZWZpbmVkICYmIGltYWdlVXJsLmluZGV4T2YoJ2RhdGE6JykgIT09IDApXG4gICAge1xuICAgICAgICBjcm9zc29yaWdpbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIC8vIG5ldyBJbWFnZSgpIGJyZWFrcyB0ZXggbG9hZGluZyBpbiBzb21lIHZlcnNpb25zIG9mIENocm9tZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMzgwNzFcbiAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgaWYgKGNyb3Nzb3JpZ2luKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoaW1hZ2UsIHNjYWxlTW9kZSk7XG4gICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgaW1hZ2Uuc3JjID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSBiYXNlVGV4dHVyZTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBAMnggYXQgdGhlIGVuZCBvZiB0aGUgdXJsIHdlIGFyZSBnb2luZyB0byBhc3N1bWUgaXRzIGEgaGlnaHJlcyBpbWFnZVxuICAgICAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKGltYWdlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFjYW52YXMuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGNhbnZhcy5fcGl4aUlkID0gJ2NhbnZhc18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG4iLCJ2YXIgQmFzZVJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VSZW5kZXJUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIFJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIFJlbmRlclRleHR1cmUgc2hvdWxkIGJlIHByZWxvYWRlZFxuICogb3RoZXJ3aXNlIGJsYWNrIHJlY3RhbmdsZXMgd2lsbCBiZSBkcmF3biBpbnN0ZWFkLlxuICpcbiAqIEEgUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCA4MDAsIDYwMCk7XG4gKiB2YXIgc3ByaXRlID0gUElYSS5TcHJpdGUuZnJvbUltYWdlKFwic3Bpbk9ial8wMS5wbmdcIik7XG4gKlxuICogc3ByaXRlLnBvc2l0aW9uLnggPSA4MDAvMjtcbiAqIHNwcml0ZS5wb3NpdGlvbi55ID0gNjAwLzI7XG4gKiBzcHJpdGUuYW5jaG9yLnggPSAwLjU7XG4gKiBzcHJpdGUuYW5jaG9yLnkgPSAwLjU7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiByZW5kZXJUZXh0dXJlXG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIGZvciB0aGlzIFJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIFJlbmRlclRleHR1cmUoYmFzZVJlbmRlclRleHR1cmUsIGZyYW1lKVxue1xuICAgIGlmICghcmVuZGVyZXIpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgb2JqZWN0IHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Jhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIFRleHR1cmUuY2FsbCh0aGlzLFxuICAgICAgICBiYXNlUmVuZGVyVGV4dHVyZSxcbiAgICAgICAgZnJhbWUgXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn1cblxuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmUucHJvdG90eXBlKTtcblJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGV4dHVyZTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIHVwZGF0ZUJhc2UpXG57XG4gICBcbiAgICAvL1RPRE8gLSBjb3VsZCBiZSBub3QgcmVxdWlyZWQuLlxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSB0aGlzLmNyb3Aud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNyb3AuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKHVwZGF0ZUJhc2UpXG4gICAge1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYmFzZVRleHR1cmUuY2xlYXIodGhpcy5mcmFtZSlcbiAgICBcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLnJlbmRlcih0aGlzLmZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRJbWFnZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuYmFzZVRleHR1cmUuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIFJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0QmFzZTY0ID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNlNjQuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIFJlbmRlclRleHR1cmUgdG8gaXQgYW5kIHRoZW4gcmV0dXJucyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gQSBDYW52YXMgZWxlbWVudCB3aXRoIHRoZSB0ZXh0dXJlIHJlbmRlcmVkIG9uLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldENhbnZhcyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVscyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVsKHRoaXMuZnJhbWUsIHgsIHkpO1xufTtcblxuUmVuZGVyVGV4dHVyZS5jcmVhdGUgPSBmdW5jdGlvbihyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHJldHVybiBuZXcgUmVuZGVyVGV4dHVyZShuZXcgQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbikpO1xufVxuXG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnMgPSByZXF1aXJlKCcuL1RleHR1cmVVdnMnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlIG9yIHBhcnQgb2YgYW4gaW1hZ2UuIEl0IGNhbm5vdCBiZSBhZGRlZFxuICogdG8gdGhlIGRpc3BsYXkgbGlzdCBkaXJlY3RseS4gSW5zdGVhZCB1c2UgaXQgYXMgdGhlIHRleHR1cmUgZm9yIGEgU3ByaXRlLiBJZiBubyBmcmFtZSBpcyBwcm92aWRlZCB0aGVuIHRoZSB3aG9sZSBpbWFnZSBpcyB1c2VkLlxuICpcbiAqIFlvdSBjYW4gZGlyZWN0bHkgY3JlYXRlIGEgdGV4dHVyZSBmcm9tIGFuIGltYWdlIGFuZCB0aGVuIHJldXNlIGl0IG11bHRpcGxlIHRpbWVzIGxpa2UgdGhpcyA6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZSgnYXNzZXRzL2ltYWdlLnBuZycpO1xuICogdmFyIHNwcml0ZTEgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiB2YXIgc3ByaXRlMiA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBiYXNlVGV4dHVyZSB7UElYSS5CYXNlVGV4dHVyZX0gVGhlIGJhc2UgdGV4dHVyZSBzb3VyY2UgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlIGZyb21cbiAqIEBwYXJhbSBbZnJhbWVdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3RhbmdsZSBmcmFtZSBvZiB0aGUgdGV4dHVyZSB0byBzaG93XG4gKiBAcGFyYW0gW2Nyb3BdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIGFyZWEgb2Ygb3JpZ2luYWwgdGV4dHVyZVxuICogQHBhcmFtIFt0cmltXSB7UElYSS5SZWN0YW5nbGV9IFRyaW1tZWQgdGV4dHVyZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBbcm90YXRlXSB7Ym9vbGVhbn0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlcyAoIHVzZWQgYnkgdGV4dHVyZSBwYWNrZXIgKVxuICovXG5mdW5jdGlvbiBUZXh0dXJlKGJhc2VUZXh0dXJlLCBmcmFtZSwgY3JvcCwgdHJpbSwgcm90YXRlKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogRG9lcyB0aGlzIFRleHR1cmUgaGF2ZSBhbnkgZnJhbWUgZGF0YSBhc3NpZ25lZCB0byBpdD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5ub0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VUZXh0dXJlIGluc3RhbmNlb2YgVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0cmltIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLnRyaW0gPSB0cmltO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCB0aGUgcmVuZGVyZXIga25vdyBpZiB0aGUgdGV4dHVyZSBpcyB2YWxpZC4gSWYgaXQncyBub3QgdGhlbiBpdCBjYW5ub3QgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgYSByZW5kZXJlciBrbm93IHRoYXQgYSB0ZXh0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgKHVzZWQgbWFpbmx5IGZvciB3ZWJHTCB1diB1cGRhdGVzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVpcmVzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgVVYgZGF0YSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgYXJlYSBvZiB0aGUgQmFzZVRleHR1cmUgaW1hZ2UgdG8gYWN0dWFsbHkgY29weSB0byB0aGUgQ2FudmFzIC8gV2ViR0wgd2hlbiByZW5kZXJpbmcsXG4gICAgICogaXJyZXNwZWN0aXZlIG9mIHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBvciBwbGFjZW1lbnQgKHdoaWNoIGNhbiBiZSBpbmZsdWVuY2VkIGJ5IHRyaW1tZWQgdGV4dHVyZSBhdGxhc2VzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jcm9wID0gY3JvcCB8fCBmcmFtZTsvL25ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdGF0ZSA9ICEhcm90YXRlO1xuXG4gICAgaWYgKGJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBmcmFtZSB3ZSBzaG91bGQgbW9uaXRvciBmb3IgYW55IGJhc2UgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlLm9uY2UoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZyYW1lIG9yIHRoZSBiYXNlVGV4dHVyZSBpcyB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICovXG4gICAgZnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgICAgICAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50cmltICYmICF0aGlzLnJvdGF0ZSAmJiAoZnJhbWUueCArIGZyYW1lLndpZHRoID4gdGhpcy5iYXNlVGV4dHVyZS53aWR0aCB8fCBmcmFtZS55ICsgZnJhbWUuaGVpZ2h0ID4gdGhpcy5iYXNlVGV4dHVyZS5oZWlnaHQpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dHVyZSBFcnJvcjogZnJhbWUgZG9lcyBub3QgZml0IGluc2lkZSB0aGUgYmFzZSBUZXh0dXJlIGRpbWVuc2lvbnMgJyArIHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5zb3VyY2UgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50cmltKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wID0gZnJhbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlcyB0aGlzIHRleHR1cmUgb24gdGhlIGdwdS5cbiAqXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5iYXNlVGV4dHVyZS51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyBsb2FkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlTG9hZGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIC8vIFRPRE8gdGhpcyBjb2RlIGxvb2tzIGNvbmZ1c2luZy4uIGJvbyB0byBhYnVzaW5nIGdldHRlcnMgYW5kIHNldHRlcnNzIVxuICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy5fZnJhbWU7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyB1cGRhdGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZVVwZGF0ZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSBiYXNlVGV4dHVyZS53aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSBiYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlPWZhbHNlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlKVxue1xuICAgIGlmICh0aGlzLmJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGRlc3Ryb3lCYXNlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG4gICAgdGhpcy50cmltID0gbnVsbDtcbiAgICB0aGlzLmNyb3AgPSBudWxsO1xuXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UsIHRoaXMpO1xuICAgIHRoaXMub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGV4dHVyZSBvYmplY3QgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLmZyYW1lLCB0aGlzLmNyb3AsIHRoaXMudHJpbSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5fdXBkYXRlVXZzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuX3V2cylcbiAgICB7XG4gICAgICAgIHRoaXMuX3V2cyA9IG5ldyBUZXh0dXJlVXZzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXZzLnNldCh0aGlzLmNyb3AsIHRoaXMuYmFzZVRleHR1cmUsIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFRleHR1cmUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSAgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gY3Jvc3NvcmlnaW4ge2Jvb2xlYW59IFdoZXRoZXIgcmVxdWVzdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY3Jvc3NvcmlnaW5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21JbWFnZShpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xuICAgICAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gdGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICh0eXBlb2YgdmlkZW8gPT09ICdzdHJpbmcnKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFRleHR1cmUuZnJvbVZpZGVvVXJsKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSB2aWRlbyB1cmwuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvVXJsIHtzdHJpbmd9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW9VcmwgPSBmdW5jdGlvbiAodmlkZW9VcmwsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHZpZGVvVXJsLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIHRleHR1cmUgdG8gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuIFRoaXMgY2FjaGUgaXMgc2hhcmVkIGFjcm9zcyB0aGUgd2hvbGUgUElYSSBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIFRleHR1cmUgdG8gYWRkIHRvIHRoZSBjYWNoZS5cbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIGJlIHN0b3JlZCBhZ2FpbnN0LlxuICovXG5UZXh0dXJlLmFkZFRleHR1cmVUb0NhY2hlID0gZnVuY3Rpb24gKHRleHR1cmUsIGlkKVxue1xuICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpZF0gPSB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB0ZXh0dXJlIGZyb20gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCBvZiB0aGUgdGV4dHVyZSB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRoYXQgd2FzIHJlbW92ZWRcbiAqL1xuVGV4dHVyZS5yZW1vdmVUZXh0dXJlRnJvbUNhY2hlID0gZnVuY3Rpb24gKGlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBBbiBlbXB0eSB0ZXh0dXJlLCB1c2VkIG9mdGVuIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBtdWx0aXBsZSBlbXB0eSB0ZXh0dXJlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZS5FTVBUWSA9IG5ldyBUZXh0dXJlKG5ldyBCYXNlVGV4dHVyZSgpKTtcbiIsIlxuLyoqXG4gKiBBIHN0YW5kYXJkIG9iamVjdCB0byBzdG9yZSB0aGUgVXZzIG9mIGEgdGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmVVdnMoKVxue1xuICAgIHRoaXMueDAgPSAwO1xuICAgIHRoaXMueTAgPSAwO1xuXG4gICAgdGhpcy54MSA9IDE7XG4gICAgdGhpcy55MSA9IDA7XG5cbiAgICB0aGlzLngyID0gMTtcbiAgICB0aGlzLnkyID0gMTtcblxuICAgIHRoaXMueDMgPSAwO1xuICAgIHRoaXMueTMgPSAxO1xuXG4gICAgdGhpcy54eTBfdWludDMyID0gMDtcbiAgICB0aGlzLnh5MV91aW50MzIgPSAwO1xuICAgIHRoaXMueHkyX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTNfdWludDMyID0gMDtcblxuICAgIHRoaXMudXZzX3VpbnQzMiA9IG5ldyBVaW50MzJBcnJheSg0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVVdnM7XG5cbi8qKlxuICogU2V0cyB0aGUgdGV4dHVyZSBVdnMgYmFzZWQgb24gdGhlIGdpdmVuIGZyYW1lIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gZnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIGJhc2VGcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gcm90YXRlIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgcm90YXRlZFxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZVV2cy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZyYW1lLCBiYXNlRnJhbWUsIHJvdGF0ZSlcbntcbiAgICB2YXIgdHcgPSBiYXNlRnJhbWUud2lkdGg7XG4gICAgdmFyIHRoID0gYmFzZUZyYW1lLmhlaWdodDtcblxuICAgIGlmKHJvdGF0ZSlcbiAgICB7XG4gICAgICAgIHRoaXMueDAgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSBmcmFtZS55IC8gdGg7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy54MCA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcbiAgICB9XG5cbiAgICB0aGlzLnV2c191aW50MzJbMF0gPSAoKCh0aGlzLnkwICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDAgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsxXSA9ICgoKHRoaXMueTEgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MSAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzJdID0gKCgodGhpcy55MiAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngyICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbM10gPSAoKCh0aGlzLnkzICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDMgKiA2NTUzNSkgJiAweEZGRkYpO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIG9mIGEgW3BsYXlpbmddIFZpZGVvLlxuICpcbiAqIFZpZGVvIGJhc2UgdGV4dHVyZXMgbWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QgaW4gdGhlaXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNldmVyYWwgd2F5cywgc3VjaCBhczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCgnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHsgc3JjOiAnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9KTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbJy92aWRlby53ZWJtJywgJy92aWRlby5tcDQnXSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoW1xuICogICAgIHsgc3JjOiAnL3ZpZGVvLndlYm0nLCBtaW1lOiAndmlkZW8vd2VibScgfSxcbiAqICAgICB7IHNyYzogJy92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9XG4gKiBdKTtcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgW1wiZGV1c1wiIGRlbW9dKGh0dHA6Ly93d3cuZ29vZGJveWRpZ2l0YWwuY29tL3BpeGlqcy9leGFtcGxlcy9kZXVzLykuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkJhc2VUZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gVmlkZW9CYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmlkZW8gc291cmNlIGVsZW1lbnQgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIC8vIGhvb2sgaW4gaGVyZSB0byBjaGVjayBpZiB2aWRlbyBpcyBhbHJlYWR5IGF2YWlsYWJsZS5cbiAgICAvLyBCYXNlVGV4dHVyZSBsb29rcyBmb3IgYSBzb3VyY2UuY29tcGxldGUgYm9vbGVhbiwgcGx1cyB3aWR0aCAmIGhlaWdodC5cblxuICAgIGlmICgoc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0VOT1VHSF9EQVRBIHx8IHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9GVVRVUkVfREFUQSkgJiYgc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICBzb3VyY2UuY29tcGxldGUgPSB0cnVlO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgc291cmNlLCBzY2FsZU1vZGUpO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBiYXNlIHRleHR1cmUgYXV0b21hdGljYWxseSB1cGRhdGUgaXRzZWxmLCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX29uVXBkYXRlID0gdGhpcy5fb25VcGRhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkNhblBsYXkgPSB0aGlzLl9vbkNhblBsYXkuYmluZCh0aGlzKTtcblxuICAgIGlmICghc291cmNlLmNvbXBsZXRlKVxuICAgIHtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIC8vIHN0YXJ0ZWQgcGxheWluZy4uXG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fb25QbGF5U3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX29uUGxheVN0b3AuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fX2xvYWRlZCA9IGZhbHNlO1xufVxuXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZVRleHR1cmUucHJvdG90eXBlKTtcblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmlkZW9CYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9CYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3Agb2YgdGhlIHZpZGVvIGJhc2UgdGV4dHVyZSwgb25seSBydW5zIHdoZW4gYXV0b1VwZGF0ZSBpcyBzZXQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUnVucyB0aGUgdXBkYXRlIGxvb3Agd2hlbiB0aGUgdmlkZW8gaXMgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBwYXVzZSBldmVudCBpcyB0cmlnZ2VyZWQsIHN0b3BzIHRoZSB1cGRhdGUgbG9vcFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgdmlkZW8gaXMgbG9hZGVkIGFuZCByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uQ2FuUGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2UudmlkZW9XaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnNvdXJjZS52aWRlb0hlaWdodDtcblxuICAgICAgICB0aGlzLnNvdXJjZS5wbGF5KCk7XG5cbiAgICAgICAgLy8gcHJldmVudCBtdWx0aXBsZSBsb2FkZWQgZGlzcGF0Y2hlcy4uXG4gICAgICAgIGlmICghdGhpcy5fX2xvYWRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHRoaXMuc291cmNlLl9waXhpSWQgXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlLl9waXhpSWQ7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogTWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXZpZGVvLl9waXhpSWQpXG4gICAge1xuICAgICAgICB2aWRlby5fcGl4aUlkID0gJ3ZpZGVvXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3ZpZGVvLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IFZpZGVvQmFzZVRleHR1cmUodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHZpZGVvLl9waXhpSWQgXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBCYXNlVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqIFRoaXMgQmFzZVRleHR1cmUgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYSB0ZXh0dXJlXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvU3JjIHtzdHJpbmd8b2JqZWN0fHN0cmluZ1tdfG9iamVjdFtdfSBUaGUgVVJMKHMpIGZvciB0aGUgdmlkZW8uXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLnNyY10ge3N0cmluZ30gT25lIG9mIHRoZSBzb3VyY2UgdXJscyBmb3IgdGhlIHZpZGVvXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLm1pbWVdIHtzdHJpbmd9IFRoZSBtaW1ldHlwZSBvZiB0aGUgdmlkZW8gKGUuZy4gJ3ZpZGVvL21wNCcpLiBJZiBub3Qgc3BlY2lmaWVkXG4gKiAgdGhlIHVybCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBtaW1lIHR5cGUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwgPSBmdW5jdGlvbiAodmlkZW9TcmMsIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXG4gICAgLy8gYXJyYXkgb2Ygb2JqZWN0cyBvciBzdHJpbmdzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW9TcmMpKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWRlb1NyYy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjW2ldLnNyYyB8fCB2aWRlb1NyY1tpXSwgdmlkZW9TcmNbaV0ubWltZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNpbmdsZSBvYmplY3Qgb3Igc3RyaW5nXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjLnNyYyB8fCB2aWRlb1NyYywgdmlkZW9TcmMubWltZSkpO1xuICAgIH1cblxuICAgIHZpZGVvLmxvYWQoKTtcbiAgICB2aWRlby5wbGF5KCk7XG5cbiAgICByZXR1cm4gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSk7XG59O1xuXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzID0gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsO1xuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2UocGF0aCwgdHlwZSlcbntcbiAgICBpZiAoIXR5cGUpXG4gICAge1xuICAgICAgICB0eXBlID0gJ3ZpZGVvLycgKyBwYXRoLnN1YnN0cihwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gcGF0aDtcbiAgICBzb3VyY2UudHlwZSA9IHR5cGU7XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgLy8gSW50ZXJuYWwgZXZlbnQgdXNlZCBieSBjb21wb3NlZCBlbWl0dGVyXG4gICAgVElDSyA9ICd0aWNrJztcblxuLyoqXG4gKiBBIFRpY2tlciBjbGFzcyB0aGF0IHJ1bnMgYW4gdXBkYXRlIGxvb3AgdGhhdCBvdGhlciBvYmplY3RzIGxpc3RlbiB0by5cbiAqIFRoaXMgY2xhc3MgaXMgY29tcG9zZWQgYXJvdW5kIGFuIEV2ZW50RW1pdHRlciBvYmplY3QgdG8gYWRkIGxpc3RlbmVyc1xuICogbWVhbnQgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lLlxuICogQW5pbWF0aW9uIGZyYW1lcyBhcmUgcmVxdWVzdGVkIG9ubHkgd2hlbiBuZWNlc3NhcnksXG4gKiBlLmcuIFdoZW4gdGhlIHRpY2tlciBpcyBzdGFydGVkIGFuZCB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbmZ1bmN0aW9uIFRpY2tlcigpXG57XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRpY2sgbWV0aG9kIGJvdW5kIHRvIHRpY2tlciBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaW4gZWFybHkgMjAxNSwgRnVuY3Rpb24uYmluZFxuICAgICAqIGlzIHN0aWxsIDYwJSBzbG93ZXIgaW4gaGlnaCBwZXJmb3JtYW5jZSBzY2VuYXJpb3MuXG4gICAgICogQWxzbyBzZXBhcmF0aW5nIGZyYW1lIHJlcXVlc3RzIGZyb20gdXBkYXRlIG1ldGhvZFxuICAgICAqIHNvIGxpc3RlbmVycyBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGFuZCB3aXRoXG4gICAgICogYW55IGFuaW1hdGlvbiBBUEksIGp1c3QgaW52b2tlIHRpY2tlci51cGRhdGUodGltZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RpY2sgPSBmdW5jdGlvbiBfdGljayh0aW1lKSB7XG5cbiAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgbm93XG4gICAgICAgICAgICBfdGhpcy51cGRhdGUodGltZSk7XG4gICAgICAgICAgICAvLyBMaXN0ZW5lciBzaWRlIGVmZmVjdHMgbWF5IGhhdmUgbW9kaWZpZWQgdGlja2VyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQgJiYgX3RoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiBfdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fdGljayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZW1pdHRlciB1c2VkIHRvIGZpcmUgJ3RpY2snIGV2ZW50XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9lbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY3VycmVudCBmcmFtZSByZXF1ZXN0IElEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdmFsdWUgbWFuYWdlZCBieSBtaW5GUFMgcHJvcGVydHkgc2V0dGVyIGFuZCBnZXR0ZXIuXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHVwZGF0ZXMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBzaG91bGQgaW52b2tlIHRoZSBtZXRob2RcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBhdXRvbWF0aWNhbGx5XG4gICAgICogd2hlbiBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1N0YXJ0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTY2FsYXIgdGltZSB2YWx1ZSBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbWluRlBTfVxuICAgICAqIGFuZCBpcyBzY2FsZWQgd2l0aCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfS5cbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhcCBtYXkgYmUgZXhjZWVkZWQgYnkgc2NhbGluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kZWx0YVRpbWUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGltZSBlbGFwc2VkIGluIG1pbGxpc2Vjb25kcyBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBPcHBvc2VkIHRvIHdoYXQgdGhlIHNjYWxhciB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX1cbiAgICAgKiBpcyBiYXNlZCwgdGhpcyB2YWx1ZSBpcyBuZWl0aGVyIGNhcHBlZCBub3Igc2NhbGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMSAvIFRBUkdFVF9GUE1TXG4gICAgICovXG4gICAgdGhpcy5lbGFwc2VkTVMgPSAxIC8gQ09OU1QuVEFSR0VUX0ZQTVM7IC8vIGRlZmF1bHQgdG8gdGFyZ2V0IGZyYW1lIHRpbWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBsYXN0IHRpbWUge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9IHdhcyBpbnZva2VkLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgYWxzbyByZXNldCBpbnRlcm5hbGx5IG91dHNpZGUgb2YgaW52b2tpbmdcbiAgICAgKiB1cGRhdGUsIGJ1dCBvbmx5IHdoZW4gYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxhc3RUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEZhY3RvciBvZiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNjYWxlcyB0aWNrZXIuZGVsdGFUaW1lIHRvIHdoYXQgd291bGQgYmVcbiAgICAgKiAvLyB0aGUgZXF1aXZhbGVudCBvZiBhcHByb3hpbWF0ZWx5IDEyMCBGUFNcbiAgICAgKiB0aWNrZXIuc3BlZWQgPSAyO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICogYHRydWVgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBgZmFsc2VgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RvcH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIFdoaWxlIGBmYWxzZWAsIHRoaXMgdmFsdWUgbWF5IGNoYW5nZSB0byBgdHJ1ZWAgaW4gdGhlXG4gICAgICogZXZlbnQgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGJlaW5nIGB0cnVlYFxuICAgICAqIGFuZCBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWNrZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lcyBwZXIgc2Vjb25kIGF0IHdoaWNoIHRoaXMgdGlja2VyIGlzIHJ1bm5pbmcuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgYXBwcm94aW1hdGVseSA2MCBpbiBtb3N0IG1vZGVybiBicm93c2Vycy5cbiAgICAgKiAqKk5vdGU6KiogVGhpcyBkb2VzIG5vdCBmYWN0b3IgaW4gdGhlIHZhbHVlIG9mXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0sIHdoaWNoIGlzIHNwZWNpZmljXG4gICAgICogdG8gc2NhbGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBGUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5lbGFwc2VkTVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGFsbG93ZWQgdG9cbiAgICAgKiBlbGFwc2UgYmV0d2VlbiBpbnZva2luZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0uXG4gICAgICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNhcCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gICAgICogYnV0IGRvZXMgbm90IGVmZmVjdCB0aGUgbWVhc3VyZWQgdmFsdWUgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNGUFN9LlxuICAgICAqIFdoZW4gc2V0dGluZyB0aGlzIHByb3BlcnR5IGl0IGlzIGNsYW1wZWQgdG8gYSB2YWx1ZSBiZXR3ZWVuXG4gICAgICogYDBgIGFuZCBgUElYSS5UQVJHRVRfRlBNUyAqIDEwMDBgLlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICBtaW5GUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZwcylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gQ2xhbXA6IDAgdG8gVEFSR0VUX0ZQTVNcbiAgICAgICAgICAgIHZhciBtaW5GUE1TID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZnBzKSAvIDEwMDAsIENPTlNULlRBUkdFVF9GUE1TKTtcbiAgICAgICAgICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEgLyBtaW5GUE1TO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbFxuICogZW1pdHRlciBoYXMgbGlzdGVuZXJzLCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fcmVxdWVzdElmTmVlZGVkID0gZnVuY3Rpb24gX3JlcXVlc3RJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiB0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIC8vIGVuc3VyZSBjYWxsYmFja3MgZ2V0IGNvcnJlY3QgZGVsdGFcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fdGljayk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IGNhbmNlbHMgYSBwZW5kaW5nIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9jYW5jZWxJZk5lZWRlZCA9IGZ1bmN0aW9uIF9jYW5jZWxJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIHRoZSB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZCBpdCBjaGVja3MgaWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHlcbiAqIGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy4gSWYgdGhlc2VcbiAqIGNvbmRpdGlvbnMgYXJlIG1ldCwgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgdGlja2VyIGhhcyBub3RcbiAqIGJlZW4gc3RhcnRlZCwgYnV0IGF1dG9TdGFydCBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHRpY2tlciBzdGFydHMgbm93LFxuICogYW5kIGNvbnRpbnVlcyB3aXRoIHRoZSBwcmV2aW91cyBjb25kaXRpb25zIHRvIHJlcXVlc3QgYSBuZXcgZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fc3RhcnRJZlBvc3NpYmxlID0gZnVuY3Rpb24gX3N0YXJ0SWZQb3NzaWJsZSgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmF1dG9TdGFydClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb259IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIHVwZGF0ZXNcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb25jZX0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3Igb25lIHVwZGF0ZVxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIGFkZE9uY2UoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbmNlKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb2ZmfSBpbnRlcm5hbGx5IGZvciAndGljaycgZXZlbnQuXG4gKiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyBmb3IgJ3RpY2snIGV2ZW50LlxuICogSWYgaXQgZG9lcywgdGhlbiBpdCBjYW5jZWxzIHRoZSBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHBhcmFtIFtmbl0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZFxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0IHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vZmYoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgaWYgKCF0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyBsaXN0ZW5lcnNcbiAqIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIHN0YXJ0KClcbntcbiAgICBpZiAoIXRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgcmVxdWVzdGVkXG4gKiBhbiBhbmltYXRpb24gZnJhbWUgaXQgaXMgY2FuY2VsZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcCgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVHJpZ2dlcnMgYW4gdXBkYXRlLiBBbiB1cGRhdGUgZW50YWlscyBzZXR0aW5nIHRoZVxuICogY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2VsYXBzZWRNU30sXG4gKiB0aGUgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gKiBpbnZva2luZyBhbGwgbGlzdGVuZXJzIHdpdGggY3VycmVudCBkZWx0YVRpbWUsXG4gKiBhbmQgdGhlbiBmaW5hbGx5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNsYXN0VGltZX1cbiAqIHdpdGggdGhlIHZhbHVlIG9mIGN1cnJlbnRUaW1lIHRoYXQgd2FzIHByb3ZpZGVkLlxuICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBieSBhbmltYXRpb25cbiAqIGZyYW1lIGNhbGxiYWNrcyBpZiB0aGUgdGlja2VyIGluc3RhbmNlIGhhcyBiZWVuIHN0YXJ0ZWRcbiAqIGFuZCBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSBbY3VycmVudFRpbWU9cGVyZm9ybWFuY2Uubm93KCldIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn0gdGhlIGN1cnJlbnQgdGltZSBvZiBleGVjdXRpb25cbiAqL1xuVGlja2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoY3VycmVudFRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWRNUztcblxuICAgIC8vIEFsbG93IGNhbGxpbmcgdXBkYXRlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBjdXJyZW50VGltZS5cbiAgICBjdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIHx8IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIC8vIFNhdmUgdW5jYXBwZWQgZWxhcHNlZE1TIGZvciBtZWFzdXJlbWVudFxuICAgIGVsYXBzZWRNUyA9IHRoaXMuZWxhcHNlZE1TID0gY3VycmVudFRpbWUgLSB0aGlzLmxhc3RUaW1lO1xuXG4gICAgLy8gY2FwIHRoZSBtaWxsaXNlY29uZHMgZWxhcHNlZCB1c2VkIGZvciBkZWx0YVRpbWVcbiAgICBpZiAoZWxhcHNlZE1TID4gdGhpcy5fbWF4RWxhcHNlZE1TKVxuICAgIHtcbiAgICAgICAgZWxhcHNlZE1TID0gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgIH1cblxuICAgIHRoaXMuZGVsdGFUaW1lID0gZWxhcHNlZE1TICogQ09OU1QuVEFSR0VUX0ZQTVMgKiB0aGlzLnNwZWVkO1xuXG4gICAgLy8gSW52b2tlIGxpc3RlbmVycyBhZGRlZCB0byBpbnRlcm5hbCBlbWl0dGVyXG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KFRJQ0ssIHRoaXMuZGVsdGFUaW1lKTtcblxuICAgIHRoaXMubGFzdFRpbWUgPSBjdXJyZW50VGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGlja2VyO1xuIiwidmFyIFRpY2tlciA9IHJlcXVpcmUoJy4vVGlja2VyJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZCB0aWNrZXIgaW5zdGFuY2UgdXNlZCBieSB7QGxpbmsgUElYSS5leHRyYXMuTW92aWVDbGlwfS5cbiAqIGFuZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICogVGhlIHByb3BlcnR5IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBpcyBzZXQgdG8gYHRydWVgXG4gKiBmb3IgdGhpcyBpbnN0YW5jZS4gUGxlYXNlIGZvbGxvdyB0aGUgZXhhbXBsZXMgZm9yIHVzYWdlLCBpbmNsdWRpbmdcbiAqIGhvdyB0byBvcHQtb3V0IG9mIGF1dG8tc3RhcnRpbmcgdGhlIHNoYXJlZCB0aWNrZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciB0aWNrZXIgPSBQSVhJLnRpY2tlci5zaGFyZWQ7XG4gKiAvLyBTZXQgdGhpcyB0byBwcmV2ZW50IHN0YXJ0aW5nIHRoaXMgdGlja2VyIHdoZW4gbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqIC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyB0cnVlIG9ubHkgZm9yIHRoZSBQSVhJLnRpY2tlci5zaGFyZWQgaW5zdGFuY2UuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiAvLyBGWUksIGNhbGwgdGhpcyB0byBlbnN1cmUgdGhlIHRpY2tlciBpcyBzdG9wcGVkLiBJdCBzaG91bGQgYmUgc3RvcHBlZFxuICogLy8gaWYgeW91IGhhdmUgbm90IGF0dGVtcHRlZCB0byByZW5kZXIgYW55dGhpbmcgeWV0LlxuICogdGlja2VyLnN0b3AoKTtcbiAqIC8vIENhbGwgdGhpcyB3aGVuIHlvdSBhcmUgcmVhZHkgZm9yIGEgcnVubmluZyBzaGFyZWQgdGlja2VyLlxuICogdGlja2VyLnN0YXJ0KCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFlvdSBtYXkgdXNlIHRoZSBzaGFyZWQgdGlja2VyIHRvIHJlbmRlci4uLlxuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoODAwLCA2MDApO1xuICogdmFyIHN0YWdlID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiB2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIpO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZW5kZXJlci52aWV3KTtcbiAqIHRpY2tlci5hZGQoZnVuY3Rpb24gKHRpbWUpIHtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE9yIHlvdSBjYW4ganVzdCB1cGRhdGUgaXQgbWFudWFsbHkuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiB0aWNrZXIuc3RvcCgpO1xuICogZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XG4gKiAgICAgdGlja2VyLnVwZGF0ZSh0aW1lKTtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAqIH1cbiAqIGFuaW1hdGUocGVyZm9ybWFuY2Uubm93KCkpO1xuICpcbiAqIEB0eXBlIHtQSVhJLnRpY2tlci5UaWNrZXJ9XG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xudmFyIHNoYXJlZCA9IG5ldyBUaWNrZXIoKTtcbnNoYXJlZC5hdXRvU3RhcnQgPSB0cnVlO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS50aWNrZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc2hhcmVkOiBzaGFyZWQsXG4gICAgVGlja2VyOiBUaWNrZXJcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gZnVuY3Rpb24gKHNpemUpXG57XG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBhcnJheSwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgXG4gICAgdmFyIHRvdGFsSW5kaWNlcyA9IHNpemUgKiA2O1xuXG4gICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodG90YWxJbmRpY2VzKTtcblxuXHQvLyBmaWxsIHRoZSBpbmRpY2VzIHdpdGggdGhlIHF1YWRzIHRvIGRyYXdcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IHRvdGFsSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICBpbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICBpbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHM7IiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudXRpbHNcbiAqL1xudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgX3VpZDogMCxcbiAgICBfc2FpZEhlbGxvOiBmYWxzZSxcblxuICAgIEV2ZW50RW1pdHRlcjogICByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgcGx1Z2luVGFyZ2V0OiAgIHJlcXVpcmUoJy4vcGx1Z2luVGFyZ2V0JyksXG4gICAgYXN5bmM6ICAgICAgICAgIHJlcXVpcmUoJ2FzeW5jJyksXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZS5cbiAgICAgKi9cbiAgICB1aWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICByZXR1cm4gKyt1dGlscy5fdWlkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYW4gW1IsIEcsIEJdIGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHBhcmFtICB7bnVtYmVyW119IFtvdXQ9W11dXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgW1IsIEcsIEJdIG9mIHRoZSBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgycmdiOiBmdW5jdGlvbiAoaGV4LCBvdXQpXG4gICAge1xuICAgICAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICAgICAgb3V0WzBdID0gKGhleCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMV0gPSAoaGV4ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzJdID0gKGhleCAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnN0cmluZzogZnVuY3Rpb24gKGhleClcbiAgICB7XG4gICAgICAgIGhleCA9IGhleC50b1N0cmluZygxNik7XG4gICAgICAgIGhleCA9ICcwMDAwMDAnLnN1YnN0cigwLCA2IC0gaGV4Lmxlbmd0aCkgKyBoZXg7XG5cbiAgICAgICAgcmV0dXJuICcjJyArIGhleDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkgdG8gYSBoZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmdiIHtudW1iZXJbXX1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb2xvciBudW1iZXJcbiAgICAgKi9cbiAgICByZ2IyaGV4OiBmdW5jdGlvbiAocmdiKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgocmdiWzBdKjI1NSA8PCAxNikgKyAocmdiWzFdKjI1NSA8PCA4KSArIHJnYlsyXSoyNTUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZFxuICAgICAqL1xuICAgIGNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXM6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBuZ0hlYWQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFCQVFNQUFBREQ4cDJPQUFBQUExQk1WRVgvJztcbiAgICAgICAgdmFyIHBuZ0VuZCA9ICdBQUFBQ2tsRVFWUUkxMk5nQUFBQUFnQUI0aUc4TXdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG4gICAgICAgIHZhciBtYWdlbnRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSA2O1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcblxuICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1hZ2VudGEsIDAsIDApO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh5ZWxsb3csIDIsIDApO1xuXG4gICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwwLDEsMSkuZGF0YTtcblxuICAgICAgICByZXR1cm4gKGRhdGFbMF0gPT09IDI1NSAmJiBkYXRhWzFdID09PSAwICYmIGRhdGFbMl0gPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIG51bWJlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICogdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIFN0YXJsaW5nIEZyYW1ld29yayBhcyBpdHMgcHJldHR5IG5lYXQgOylcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICovXG4gICAgZ2V0TmV4dFBvd2VyT2ZUd286IGZ1bmN0aW9uIChudW1iZXIpXG4gICAge1xuICAgICAgICAvLyBzZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG93ZXJfb2ZfdHdvI0Zhc3RfYWxnb3JpdGhtX3RvX2NoZWNrX2lmX2FfcG9zaXRpdmVfbnVtYmVyX2lzX2FfcG93ZXJfb2ZfdHdvXG4gICAgICAgIGlmIChudW1iZXIgPiAwICYmIChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDE7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPCBudW1iZXIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzdWx0IDw8PSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBtYWtlIGEgcG93ZXIgb2YgdHdvIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9XG4gICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybiAod2lkdGggPiAwICYmICh3aWR0aCAmICh3aWR0aCAtIDEpKSA9PT0gMCAmJiBoZWlnaHQgPiAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIGFuIGFzc2V0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwcmVmaXhcbiAgICAgKiB1c2VkIGJ5IHNwcml0ZXNoZWV0cyBhbmQgaW1hZ2UgdXJsc1xuICAgICAqXG4gICAgICogQHBhcmFtIHVybCB7c3RyaW5nfSB0aGUgaW1hZ2UgcGF0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRSZXNvbHV0aW9uT2ZVcmw6IGZ1bmN0aW9uICh1cmwpXG4gICAge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IENPTlNULlJFVElOQV9QUkVGSVguZXhlYyh1cmwpO1xuXG4gICAgICAgIGlmIChyZXNvbHV0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlc29sdXRpb25bMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvZ3Mgb3V0IHRoZSB2ZXJzaW9uIGFuZCByZW5kZXJlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBydW5uaW5nIGluc3RhbmNlIG9mIFBJWEkuXG4gICAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoaXMgbWVzc2FnZSB5b3UgY2FuIHNldCBgUElYSS51dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtgXG4gICAgICogc28gdGhlIGxpYnJhcnkgdGhpbmtzIGl0IGFscmVhZHkgc2FpZCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgZG9pbmcgdGhhdCB3aWxsIGZvcmV2ZXJcbiAgICAgKiBtYWtlcyB5b3UgYSBqZXJrIGZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBzdHJpbmcgcmVuZGVyZXIgdHlwZSB0byBsb2cuXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIHNheUhlbGxvOiBmdW5jdGlvbiAodHlwZSlcbiAgICB7XG4gICAgICAgIGlmICh1dGlscy5fc2FpZEhlbGxvKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZScpID4gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW1xuICAgICAgICAgICAgICAgICdcXG4gJWMgJWMgJWMgUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSDinLAgJyArIHR5cGUgKyAnIOKcsCAgJWMgJyArICcgJWMgJyArICcgaHR0cDovL3d3dy5waXhpanMuY29tLyAgJWMgJWMg4pmlJWPimaUlY+KZpSBcXG5cXG4nLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjY2YTU7IGJhY2tncm91bmQ6ICMwMzAzMDc7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmZjM2RjOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7J1xuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3MpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1BpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0gJyArIHR5cGUgKyAnIC0gaHR0cDovL3d3dy5waXhpanMuY29tLycpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmb3IgY2hlY2tpbmcgZm9yIHdlYmdsIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNXZWJHTFN1cHBvcnRlZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHZhciBjb250ZXh0T3B0aW9ucyA9IHsgc3RlbmNpbDogdHJ1ZSB9O1xuICAgICAgICB0cnlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgY29udGV4dE9wdGlvbnMpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBjb250ZXh0T3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIShnbCAmJiBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnN0ZW5jaWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzaWduIG9mIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIG4ge251bWJlcn1cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIG4gaXMgMCwgLTEgaWYgbiBpcyBuZWdhdGl2ZSwgMSBpZiBuIGkgcG9zaXRpdmVcbiAgICAgKi9cbiAgICBzaWduOiBmdW5jdGlvbiAobilcbiAgICB7XG4gICAgICAgIHJldHVybiBuID8gKG4gPCAwID8gLTEgOiAxKSA6IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZUl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydElkeCBUaGUgaW5kZXggdG8gYmVnaW4gcmVtb3ZpbmcgZnJvbSAoaW5jbHVzaXZlKVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVJdGVtczogZnVuY3Rpb24gKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KVxuICAgIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN0YXJ0SWR4ID49IGxlbmd0aCB8fCByZW1vdmVDb3VudCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVtb3ZlQ291bnQgPSAoc3RhcnRJZHgrcmVtb3ZlQ291bnQgPiBsZW5ndGggPyBsZW5ndGgtc3RhcnRJZHggOiByZW1vdmVDb3VudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydElkeCwgbGVuID0gbGVuZ3RoLXJlbW92ZUNvdW50OyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyLmxlbmd0aCA9IGxlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge30sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge31cbn07XG4iLCIvKipcbiAqIE1peGlucyBmdW5jdGlvbmFsaXR5IHRvIG1ha2UgYW4gb2JqZWN0IGhhdmUgXCJwbHVnaW5zXCIuXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS51dGlsc1xuICogQHBhcmFtIG9iaiB7b2JqZWN0fSBUaGUgb2JqZWN0IHRvIG1peCBpbnRvLlxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgcGx1Z2luVGFyZ2V0Lm1peGluKE15T2JqZWN0KTtcbiAqL1xuZnVuY3Rpb24gcGx1Z2luVGFyZ2V0KG9iailcbntcbiAgICBvYmouX19wbHVnaW5zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcGx1Z2luIHRvIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHBsdWdpbk5hbWUge3N0cmluZ30gVGhlIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQuXG4gICAgICogQHBhcmFtIGN0b3Ige0Z1bmN0aW9ufSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBwbHVnaW4uXG4gICAgICovXG4gICAgb2JqLnJlZ2lzdGVyUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGN0b3IpXG4gICAge1xuICAgICAgICBvYmouX19wbHVnaW5zW3BsdWdpbk5hbWVdID0gY3RvcjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5pbml0UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLnBsdWdpbnMgfHwge307XG5cbiAgICAgICAgZm9yICh2YXIgbyBpbiBvYmouX19wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBuZXcgKG9iai5fX3BsdWdpbnNbb10pKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmRlc3Ryb3lQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGZvciAodmFyIG8gaW4gdGhpcy5wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG51bGw7XG4gICAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvKipcbiAgICAgKiBNaXhlcyBpbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGx1Z2luVGFyZ2V0IGludG8gYW5vdGhlciBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3Qge29iamVjdH0gVGhlIG9iaiB0byBtaXggaW50b1xuICAgICAqL1xuICAgIG1peGluOiBmdW5jdGlvbiBtaXhpbihvYmopXG4gICAge1xuICAgICAgICBwbHVnaW5UYXJnZXQob2JqKTtcbiAgICB9XG59O1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKSxcbiAgICBtZXNoID0gcmVxdWlyZSgnLi9tZXNoJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi9leHRyYXMnKSxcbiAgICBmaWx0ZXJzID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgU3ByaXRlQmF0Y2hcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkuUGFydGljbGVDb250YWluZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlQmF0Y2ggPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuJyk7XG59O1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIEFzc2V0TG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLmxvYWRlcnMuTG9hZGVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuQXNzZXRMb2FkZXIgPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy4nKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvcmUsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RhZ2VcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RhZ2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignWW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIFBJWEkgU3RhZ2UgYW55IG1vcmUsIHlvdSBjYW4gc2ltcGx5IHJlbmRlciBhbnkgY29udGFpbmVyLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgRGlzcGxheU9iamVjdENvbnRhaW5lclxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBEaXNwbGF5T2JqZWN0Q29udGFpbmVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Rpc3BsYXlPYmplY3RDb250YWluZXIgaGFzIGJlZW4gc2hvcnRlbmVkIHRvIENvbnRhaW5lciwgcGxlYXNlIHVzZSBDb250YWluZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdHJpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdHJpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgU3RyaXAgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBNZXNoIGFuZCBtb3ZlZCB0byBtZXNoLk1lc2gsIHBsZWFzZSB1c2UgbWVzaC5NZXNoIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guTWVzaDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFJvcGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLlJvcGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgUm9wZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgUm9wZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBtZXNoLlJvcGUsIHBsZWFzZSB1c2UgbWVzaC5Sb3BlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guUm9wZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIE1vdmllQ2xpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXBcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgTW92aWVDbGlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBNb3ZpZUNsaXAgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLk1vdmllQ2xpcCwgcGxlYXNlIHVzZSBleHRyYXMuTW92aWVDbGlwIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5Nb3ZpZUNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUaWxpbmdTcHJpdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRpbGluZ1Nwcml0ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGlsaW5nU3ByaXRlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5UaWxpbmdTcHJpdGUsIHBsZWFzZSB1c2UgZXh0cmFzLlRpbGluZ1Nwcml0ZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuVGlsaW5nU3ByaXRlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQml0bWFwVGV4dFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJpdG1hcFRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJpdG1hcFRleHQgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLkJpdG1hcFRleHQsIHBsZWFzZSB1c2UgZXh0cmFzLkJpdG1hcFRleHQgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLkJpdG1hcFRleHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBibGVuZE1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgYmxlbmRNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYmxlbmRNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBCTEVORF9NT0RFUywgcGxlYXNlIHVzZSBCTEVORF9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkJMRU5EX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2NhbGVNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIHNjYWxlTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHNjYWxlTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gU0NBTEVfTU9ERVMsIHBsZWFzZSB1c2UgU0NBTEVfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TQ0FMRV9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5CYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCYXNlVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuQmFzZVRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5UZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLlRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5UZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5UZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgbWF0aFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIG1hdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBtYXRoIG5hbWVzcGFjZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgYWNjZXNzIG1lbWJlcnMgYWxyZWFkeSBhY2Nlc3NpYmxlIG9uIFBJWEkuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBQSVhJLlNwcml0ZSNzZXRUZXh0dXJlXG4gKiBAc2VlIFBJWEkuU3ByaXRlI3RleHR1cmVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0dXJlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0dXJlIHByb3BlcnR5LCBlLmcgOiBzcHJpdGUudGV4dHVyZSA9IHRleHR1cmU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuZXh0cmFzLkJpdG1hcFRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteUJpdG1hcFRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15VGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFN0eWxlXG4gKiBAc2VlIFBJWEkuVGV4dCNzdHlsZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpXG57XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgIGNvbnNvbGUud2Fybignc2V0U3R5bGUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5LCBlLmcgOiBteVRleHQuc3R5bGUgPSBzdHlsZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAc2VlIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHR1cmUucHJvdG90eXBlLnNldEZyYW1lID0gZnVuY3Rpb24oZnJhbWUpXG57XG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIGNvbnNvbGUud2Fybignc2V0RnJhbWUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIGZyYW1lIHByb3BlcnR5LCBlLmcgOiBteVRleHR1cmUuZnJhbWUgPSBmcmFtZTsnKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpbHRlcnMsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkFic3RyYWN0RmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkFic3RyYWN0RmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEFic3RyYWN0RmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuQWJzdHJhY3RGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEFic3RyYWN0RmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQWJzdHJhY3RGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuRlhBQUZpbHRlclxuICAgICAqIEBzZWUgUElYSS5GWEFBRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEZYQUFGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5GWEFBRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBGWEFBRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuRlhBQUZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgU3ByaXRlTWFza0ZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIFNwcml0ZU1hc2tGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TcHJpdGVNYXNrRmlsdGVyO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS51dGlscy51dWlkXG4gKiBAc2VlIFBJWEkudXRpbHMudWlkXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gKi9cbmNvcmUudXRpbHMudXVpZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29uc29sZS53YXJuKCd1dGlscy51dWlkKCkgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB1dGlscy51aWQoKSBmcm9tIG5vdyBvbi4nKTtcbiAgICByZXR1cm4gY29yZS51dGlscy51aWQoKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIEJpdG1hcFRleHQgb2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0IHVzaW5nIGJpdG1hcCBmb250LiBUb1xuICogc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLCAnXFxyJyBvciAnXFxyXFxuJyBpbiB5b3VyIHN0cmluZy4gWW91IGNhbiBnZW5lcmF0ZSB0aGUgZm50IGZpbGVzIHVzaW5nOlxuICpcbiAqIEEgQml0bWFwVGV4dCBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGZvbnQgaXMgbG9hZGVkXG4gKlxuICogYGBganNcbiAqIC8vIGluIHRoaXMgY2FzZSB0aGUgZm9udCBpcyBpbiBhIGZpbGUgY2FsbGVkICdkZXN5cmVsLmZudCdcbiAqIHZhciBiaXRtYXBUZXh0ID0gbmV3IFBJWEkuZXh0cmFzLkJpdG1hcFRleHQoXCJ0ZXh0IHVzaW5nIGEgZmFuY3kgZm9udCFcIiwge2ZvbnQ6IFwiMzVweCBEZXN5cmVsXCIsIGFsaWduOiBcInJpZ2h0XCJ9KTtcbiAqIGBgYFxuICpcbiAqXG4gKiBodHRwOi8vd3d3LmFuZ2VsY29kZS5jb20vcHJvZHVjdHMvYm1mb250LyBmb3Igd2luZG93cyBvclxuICogaHR0cDovL3d3dy5ibWdseXBoLmNvbS8gZm9yIG1hYy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIHN0eWxlIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gc3R5bGUuZm9udCB7c3RyaW5nfG9iamVjdH0gVGhlIGZvbnQgZGVzY3JpcHRvciBmb3IgdGhlIG9iamVjdCwgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZyBvZiBmb3JtXG4gKiAgICAgIFwiMjRweCBGb250TmFtZVwiIG9yIFwiRm9udE5hbWVcIiBvciBhcyBhbiBvYmplY3Qgd2l0aCBleHBsaWNpdCBuYW1lL3NpemUgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5uYW1lXSB7c3RyaW5nfSBUaGUgYml0bWFwIGZvbnQgaWRcbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5zaXplXSB7bnVtYmVyfSBUaGUgc2l6ZSBvZiB0aGUgZm9udCBpbiBwaXhlbHMsIGUuZy4gMjRcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3RcbiAqICAgICAgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS50aW50PTB4RkZGRkZGXSB7bnVtYmVyfSBUaGUgdGludCBjb2xvclxuICovXG5mdW5jdGlvbiBCaXRtYXBUZXh0KHRleHQsIHN0eWxlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGxldHRlciBzcHJpdGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbHlwaHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mb250ID0ge1xuICAgICAgICB0aW50OiBzdHlsZS50aW50ICE9PSB1bmRlZmluZWQgPyBzdHlsZS50aW50IDogMHhGRkZGRkYsXG4gICAgICAgIGFsaWduOiBzdHlsZS5hbGlnbiB8fCAnbGVmdCcsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIHNpemU6IDBcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBmb250LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mb250ID0gc3R5bGUuZm9udDsgLy8gcnVuIGZvbnQgc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggd2lkdGggb2YgdGhpcyBiaXRtYXAgdGV4dCBpbiBwaXhlbHMuIElmIHRoZSB0ZXh0IHByb3ZpZGVkIGlzIGxvbmdlciB0aGFuIHRoZSB2YWx1ZSBwcm92aWRlZCwgbGluZSBicmVha3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoZSBsYXN0IHdoaXRlc3BhY2UuXG4gICAgICogRGlzYWJsZSBieSBzZXR0aW5nIHZhbHVlIHRvIDBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggbGluZSBoZWlnaHQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBUZXh0LCBpZTogd2hlbiB0cnlpbmcgdG8gdmVydGljYWxseSBhbGlnbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpcnR5IHN0YXRlIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkJpdG1hcFRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuQml0bWFwVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCaXRtYXBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCaXRtYXBUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRpbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC50aW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC50aW50ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCkgPyB2YWx1ZSA6IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdsZWZ0J1xuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGFsaWduOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQuYWxpZ247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LmFsaWduID0gdmFsdWUgfHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9udCBkZXNjcmlwdG9yIG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Rm9udH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBmb250OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWUuc2xpY2UoMSkuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gcGFyc2VJbnQodmFsdWVbMF0sIDEwKSA6IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicgPyB2YWx1ZS5zaXplIDogcGFyc2VJbnQodmFsdWUuc2l6ZSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGRhdGEgPSBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV07XG4gICAgdmFyIHBvcyA9IG5ldyBjb3JlLlBvaW50KCk7XG4gICAgdmFyIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgdmFyIGNoYXJzID0gW107XG4gICAgdmFyIGxhc3RMaW5lV2lkdGggPSAwO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBsaW5lV2lkdGhzID0gW107XG4gICAgdmFyIGxpbmUgPSAwO1xuICAgIHZhciBzY2FsZSA9IHRoaXMuX2ZvbnQuc2l6ZSAvIGRhdGEuc2l6ZTtcbiAgICB2YXIgbGFzdFNwYWNlID0gLTE7XG4gICAgdmFyIG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHQubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSB0aGlzLnRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgbGFzdFNwYWNlID0gLyhcXHMpLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpID8gaSA6IGxhc3RTcGFjZTtcblxuICAgICAgICBpZiAoLyg/OlxcclxcbnxcXHJ8XFxuKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RTcGFjZSAhPT0gLTEgJiYgdGhpcy5tYXhXaWR0aCA+IDAgJiYgcG9zLnggKiBzY2FsZSA+IHRoaXMubWF4V2lkdGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXMoY2hhcnMsIGxhc3RTcGFjZSwgaSAtIGxhc3RTcGFjZSk7XG4gICAgICAgICAgICBpID0gbGFzdFNwYWNlO1xuICAgICAgICAgICAgbGFzdFNwYWNlID0gLTE7XG5cbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFyRGF0YSA9IGRhdGEuY2hhcnNbY2hhckNvZGVdO1xuXG4gICAgICAgIGlmICghY2hhckRhdGEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZDaGFyQ29kZSAmJiBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJzLnB1c2goe3RleHR1cmU6Y2hhckRhdGEudGV4dHVyZSwgbGluZTogbGluZSwgY2hhckNvZGU6IGNoYXJDb2RlLCBwb3NpdGlvbjogbmV3IGNvcmUuUG9pbnQocG9zLnggKyBjaGFyRGF0YS54T2Zmc2V0LCBwb3MueSArIGNoYXJEYXRhLnlPZmZzZXQpfSk7XG4gICAgICAgIGxhc3RMaW5lV2lkdGggPSBwb3MueCArIChjaGFyRGF0YS50ZXh0dXJlLndpZHRoICsgY2hhckRhdGEueE9mZnNldCk7XG4gICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLnhBZHZhbmNlO1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgKGNoYXJEYXRhLnlPZmZzZXQgKyBjaGFyRGF0YS50ZXh0dXJlLmhlaWdodCkpO1xuICAgICAgICBwcmV2Q2hhckNvZGUgPSBjaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcblxuICAgIHZhciBsaW5lQWxpZ25PZmZzZXRzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IGxpbmU7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBhbGlnbk9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9mb250LmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZUFsaWduT2Zmc2V0cy5wdXNoKGFsaWduT2Zmc2V0KTtcbiAgICB9XG5cbiAgICB2YXIgbGVuQ2hhcnMgPSBjaGFycy5sZW5ndGg7XG4gICAgdmFyIHRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuQ2hhcnM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjID0gdGhpcy5fZ2x5cGhzW2ldOyAvLyBnZXQgdGhlIG5leHQgZ2x5cGggc3ByaXRlXG5cbiAgICAgICAgaWYgKGMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMudGV4dHVyZSA9IGNoYXJzW2ldLnRleHR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjID0gbmV3IGNvcmUuU3ByaXRlKGNoYXJzW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZ2x5cGhzLnB1c2goYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjLnBvc2l0aW9uLnggPSAoY2hhcnNbaV0ucG9zaXRpb24ueCArIGxpbmVBbGlnbk9mZnNldHNbY2hhcnNbaV0ubGluZV0pICogc2NhbGU7XG4gICAgICAgIGMucG9zaXRpb24ueSA9IGNoYXJzW2ldLnBvc2l0aW9uLnkgKiBzY2FsZTtcbiAgICAgICAgYy5zY2FsZS54ID0gYy5zY2FsZS55ID0gc2NhbGU7XG4gICAgICAgIGMudGludCA9IHRpbnQ7XG5cbiAgICAgICAgaWYgKCFjLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBjaGlsZHJlbi5cbiAgICBmb3IgKGkgPSBsZW5DaGFyczsgaSA8IHRoaXMuX2dseXBocy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5fZ2x5cGhzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHRXaWR0aCA9IG1heExpbmVXaWR0aCAqIHNjYWxlO1xuICAgIHRoaXMudGV4dEhlaWdodCA9IChwb3MueSArIGRhdGEubGluZUhlaWdodCkgKiBzY2FsZTtcbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSBtYXhMaW5lSGVpZ2h0ICogc2NhbGU7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvZiB0aGlzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0ZXh0IGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGdldExvY2FsQm91bmRzXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cblxuQml0bWFwVGV4dC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHJldHVybiBjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn07XG5cbkJpdG1hcFRleHQuZm9udHMgPSB7fTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgTW92aWVDbGlwIGlzIGEgc2ltcGxlIHdheSB0byBkaXNwbGF5IGFuIGFuaW1hdGlvbiBkZXBpY3RlZCBieSBhIGxpc3Qgb2YgdGV4dHVyZXMuXG4gKlxuICogYGBganNcbiAqIHZhciBhbGllbkltYWdlcyA9IFtcImltYWdlX3NlcXVlbmNlXzAxLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDIucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMy5wbmdcIixcImltYWdlX3NlcXVlbmNlXzA0LnBuZ1wiXTtcbiAqIHZhciB0ZXh0dXJlQXJyYXkgPSBbXTtcbiAqXG4gKiBmb3IgKHZhciBpPTA7IGkgPCA0OyBpKyspXG4gKiB7XG4gKiAgICAgIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZShhbGllbkltYWdlc1tpXSk7XG4gKiAgICAgIHRleHR1cmVBcnJheS5wdXNoKHRleHR1cmUpO1xuICogfTtcbiAqXG4gKiB2YXIgbWMgPSBuZXcgUElYSS5Nb3ZpZUNsaXAodGV4dHVyZUFycmF5KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmVzIHtQSVhJLlRleHR1cmVbXXxPYmplY3RbXX0gYW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuVGV4dHVyZX0gb3IgZnJhbWUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIGFuaW1hdGlvblxuICogQHBhcmFtIHRleHR1cmVzW10udGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUge0BsaW5rIFBJWEkuVGV4dHVyZX0gb2YgdGhlIGZyYW1lXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50aW1lIHtudW1iZXJ9IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWUgaW4gbXNcbiAqL1xuZnVuY3Rpb24gTW92aWVDbGlwKHRleHR1cmVzKVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZXNbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUgPyB0ZXh0dXJlc1swXSA6IHRleHR1cmVzWzBdLnRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVzID0gdGV4dHVyZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3BlZWQgdGhhdCB0aGUgTW92aWVDbGlwIHdpbGwgcGxheSBhdC4gSGlnaGVyIGlzIGZhc3RlciwgbG93ZXIgaXMgc2xvd2VyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIG1vdmllIGNsaXAgcmVwZWF0cyBhZnRlciBwbGF5aW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5sb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIE1vdmllQ2xpcCBmaW5pc2hlcyBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKi9cbiAgICB0aGlzLm9uQ29tcGxldGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRWxhcHNlZCB0aW1lIHNpbmNlIGFuaW1hdGlvbiBoYXMgYmVlbiBzdGFydGVkLCB1c2VkIGludGVybmFsbHkgdG8gZGlzcGxheSBjdXJyZW50IHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgTW92aWVDbGlwIGlzIGN1cnJlbnRseSBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTW92aWVDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcbk1vdmllQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNb3ZpZUNsaXA7XG5tb2R1bGUuZXhwb3J0cyA9IE1vdmllQ2xpcDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTW92aWVDbGlwLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIHRvdGFsRnJhbWVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBNb3ZpZUNsaXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbnVtYmVyIG9mIHRleHR1cmVzXG4gICAgICogYXNzaWduZWQgdG8gdGhlIE1vdmllQ2xpcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0b3RhbEZyYW1lczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgdGV4dHVyZXMgdXNlZCBmb3IgdGhpcyBNb3ZpZUNsaXBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVtdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICpcbiAgICAgKi9cbiAgICB0ZXh0dXJlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzLnB1c2godmFsdWVbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucy5wdXNoKHZhbHVlW2ldLnRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAqIFRoZSBNb3ZpZUNsaXBzIGN1cnJlbnQgZnJhbWUgaW5kZXhcbiAgICAqXG4gICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICogQHJlYWRvbmx5XG4gICAgKi9cbiAgICBjdXJyZW50RnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSkgJSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lIDwgMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUgKz0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGcmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBQbGF5cyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKHRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBnb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RvcCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRTdG9wID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG59O1xuXG4vKipcbiAqIEdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZSBhbmQgYmVnaW5zIHBsYXlpbmcgdGhlIE1vdmllQ2xpcFxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdGFydCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRQbGF5ID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLnBsYXkoKTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqIEBwcml2YXRlXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB2YXIgZWxhcHNlZCA9IHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZHVyYXRpb25zICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGxhZyA9IHRoaXMuX2N1cnJlbnRUaW1lICUgMSAqIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG5cbiAgICAgICAgbGFnICs9IGVsYXBzZWQgLyA2MCAqIDEwMDA7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA8IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lLS07XG4gICAgICAgICAgICBsYWcgKz0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWduID0gTWF0aC5zaWduKHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPj0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGFnIC09IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0gKiBzaWduO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gc2lnbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGxhZyAvIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGVsYXBzZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lIDwgMCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCgwKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VGltZSA+PSB0aGlzLl90ZXh0dXJlcy5sZW5ndGggJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AodGhpcy5fdGV4dHVyZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG5cbn07XG5cbi8qXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBkZXN0cm95cyBpdFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCApXG57XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGZyYW1lIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgZnJhbWVzIGlkcyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUZyYW1lcyA9IGZ1bmN0aW9uIChmcmFtZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tRnJhbWUoZnJhbWVzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBpbWFnZSB1cmxzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tSW1hZ2VzID0gZnVuY3Rpb24gKGltYWdlcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59OyIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIC8vIGEgc3ByaXRlIHVzZSBkZm9yIHJlbmRlcmluZyB0ZXh0dXJlcy4uXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICBDYW52YXNUaW50ZXIgPSByZXF1aXJlKCcuLi9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyk7XG5cbi8qKlxuICogQSB0aWxpbmcgc3ByaXRlIGlzIGEgZmFzdCB3YXkgb2YgcmVuZGVyaW5nIGEgdGlsaW5nIGltYWdlXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZSB7VGV4dHVyZX0gdGhlIHRleHR1cmUgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gVGlsaW5nU3ByaXRlKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsaW5nIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVNjYWxlID0gbmV3IGNvcmUuUG9pbnQoMSwxKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIG9mZnNldCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG5ldyBjb3JlLlBvaW50KDAsMCk7XG5cbiAgICAvLy8vLyBwcml2YXRlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2l0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBuZXcgY29yZS5UZXh0dXJlVXZzKCk7XG5cbiAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gbnVsbDtcblxuICAgIC8vVE9ETyBtb3ZlLi5cbiAgICB0aGlzLnNoYWRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKFxuXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVUcmFuc2Zvcm07JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnICAgY29vcmQgLT0gdVRyYW5zZm9ybS54eTsnLFxuICAgICAgICAnICAgY29vcmQgLz0gdVRyYW5zZm9ybS56dzsnLFxuICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGNvb3JkOycsXG5cbiAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjMiB1UGl4ZWxTaXplOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gbW9kKHZUZXh0dXJlQ29vcmQsIHVGcmFtZS56dyk7JyxcbiAgICAgICAgJyAgIGNvb3JkID0gY2xhbXAoY29vcmQsIHVQaXhlbFNpemUsIHVGcmFtZS56dyAtIHVQaXhlbFNpemUpOycsXG4gICAgICAgICcgICBjb29yZCArPSB1RnJhbWUueHk7JyxcblxuICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gIHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQpICogdkNvbG9yIDsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1RnJhbWU6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1VHJhbnNmb3JtOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVBpeGVsU2l6ZSA6IHsgdHlwZSA6ICcyZnYnLCB2YWx1ZTogWzEsIDFdfVxuICAgICAgICAgICAgfVxuICAgICAgKTtcbn1cblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWxpbmdTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbGluZ1Nwcml0ZTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWxpbmdTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGlsaW5nU3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIHR3ZWFrIG91ciB0ZXh0dXJlIHRlbXBvcmFyaWx5Li5cbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZSB8fCAhdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZW1wVXZzID0gdGV4dHVyZS5fdXZzLFxuICAgICAgICB0ZW1wV2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgdGVtcEhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCxcbiAgICAgICAgdHcgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoLFxuICAgICAgICB0aCA9IHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGhpcy5fdXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMF0gPSAxLjAvdHc7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVsxXSA9IDEuMC90aDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVswXSA9IHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzFdID0gdGVtcFV2cy55MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMl0gPSB0ZW1wVXZzLngxIC0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbM10gPSB0ZW1wVXZzLnkyIC0gdGVtcFV2cy55MDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMF0gPSAodGhpcy50aWxlUG9zaXRpb24ueCAlICh0ZW1wV2lkdGggKiB0aGlzLnRpbGVTY2FsZS54KSkgLyB0aGlzLl93aWR0aDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzFdID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgJSAodGVtcEhlaWdodCAqIHRoaXMudGlsZVNjYWxlLnkpKSAvIHRoaXMuX2hlaWdodDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzJdID0gKCB0dyAvIHRoaXMuX3dpZHRoICkgKiB0aGlzLnRpbGVTY2FsZS54O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbM10gPSAoIHRoIC8gdGhpcy5faGVpZ2h0ICkgKiB0aGlzLnRpbGVTY2FsZS55O1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRlbXBVdnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0ZW1wV2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGVtcEhlaWdodDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZiAoIXRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQsXG4gICAgICAgIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICBiYXNlVGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIG1vZFggPSAodGhpcy50aWxlUG9zaXRpb24ueCAvIHRoaXMudGlsZVNjYWxlLngpICUgdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIG1vZFkgPSAodGhpcy50aWxlUG9zaXRpb24ueSAvIHRoaXMudGlsZVNjYWxlLnkpICUgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuXG4gICAgLy8gY3JlYXRlIGEgbmljZSBzaGlueSBwYXR0ZXJuIVxuICAgIC8vIFRPRE8gdGhpcyBuZWVkcyB0byBiZSByZWZyZXNoZWQgaWYgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICBpZighdGhpcy5fY2FudmFzUGF0dGVybilcbiAgICB7XG4gICAgICAgIC8vIGN1dCBhbiBvYmplY3QgZnJvbSBhIHNwcml0ZXNoZWV0Li5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgY29yZS5DYW52YXNCdWZmZXIodGV4dHVyZS5fZnJhbWUud2lkdGgsIHRleHR1cmUuX2ZyYW1lLmhlaWdodCk7XG5cbiAgICAgICAgLy8gVGludCB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMudGludGVkVGV4dHVyZSwgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKGJhc2VUZXh0dXJlLnNvdXJjZSwgLXRleHR1cmUuX2ZyYW1lLngsIC10ZXh0dXJlLl9mcmFtZS55KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gdGVtcENhbnZhcy5jb250ZXh0LmNyZWF0ZVBhdHRlcm4oIHRlbXBDYW52YXMuY2FudmFzLCAncmVwZWF0JyApO1xuICAgIH1cblxuICAgIC8vIHNldCBjb250ZXh0IHN0YXRlLi5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvbik7XG5cbiAgICAvLyBUT0RPIC0gdGhpcyBzaG91bGQgYmUgcm9sbGVkIGludG8gdGhlIHNldFRyYW5zZm9ybSBhYm92ZS4uXG4gICAgY29udGV4dC5zY2FsZSh0aGlzLnRpbGVTY2FsZS54LHRoaXMudGlsZVNjYWxlLnkpO1xuXG4gICAgY29udGV4dC50cmFuc2xhdGUobW9kWCArICh0aGlzLmFuY2hvci54ICogLXRoaXMuX3dpZHRoICksXG4gICAgICAgICAgICAgICAgICAgICAgbW9kWSArICh0aGlzLmFuY2hvci55ICogLXRoaXMuX2hlaWdodCkpO1xuXG4gICAgLy8gY2hlY2sgYmxlbmQgbW9kZVxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vIGZpbGwgdGhlIHBhdHRlcm4hXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9jYW52YXNQYXR0ZXJuO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoLW1vZFgsXG4gICAgICAgICAgICAgICAgICAgICAtbW9kWSxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoIC8gdGhpcy50aWxlU2NhbGUueCxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCAvIHRoaXMudGlsZVNjYWxlLnkpO1xuXG5cbiAgICAvL1RPRE8gLSBwcmV0dHkgc3VyZSB0aGlzIGNhbiBiZSBkZWxldGVkLi4uXG4gICAgLy9jb250ZXh0LnRyYW5zbGF0ZSgtdGhpcy50aWxlUG9zaXRpb24ueCArICh0aGlzLmFuY2hvci54ICogdGhpcy5fd2lkdGgpLCAtdGhpcy50aWxlUG9zaXRpb24ueSArICh0aGlzLmFuY2hvci55ICogdGhpcy5faGVpZ2h0KSk7XG4gICAgLy9jb250ZXh0LnNjYWxlKDEgLyB0aGlzLnRpbGVTY2FsZS54LCAxIC8gdGhpcy50aWxlU2NhbGUueSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIHNwcml0ZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG5cbiAgICB2YXIgdzAgPSB3aWR0aCAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgIHZhciB3MSA9IHdpZHRoICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICB2YXIgaDAgPSBoZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICB2YXIgaDEgPSBoZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcblxuICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIG1pblgsXG4gICAgICAgIG1heFgsXG4gICAgICAgIG1pblksXG4gICAgICAgIG1heFk7XG5cbiAgICBtaW5YID0geDE7XG4gICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICBtaW5ZID0geTE7XG4gICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICBtYXhYID0geDE7XG4gICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICBtYXhZID0geTE7XG4gICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgYm91bmRzLnggPSBtaW5YO1xuICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcblxuICAgIHJldHVybiBib3VuZHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIGNoZWNrXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRpbGluZyBzcHJpdGVcbiAqXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWxlU2NhbGUgPSBudWxsO1xuICAgIHRoaXMuX3RpbGVTY2FsZU9mZnNldCA9IG51bGw7XG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHRpbGluZyBzcHJpdGUgdGhhdCB3aWxsIHVzZSBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZCx3aWR0aCxoZWlnaHQpXG57XG4gICAgdmFyIHRleHR1cmUgPSBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSAnICsgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUodGV4dHVyZSx3aWR0aCxoZWlnaHQpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCB3aWR0aCwgaGVpZ2h0LCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSksd2lkdGgsaGVpZ2h0KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gY29yZS5EaXNwbGF5T2JqZWN0LFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwID0gZmFsc2U7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSBudWxsO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsSGl0VGVzdCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxEZXN0cm95ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGlzIGRpc3BsYXkgb2JqZWN0IHRvIGJlIGNhY2hlZCBhcyBhIGJpdG1hcC5cbiAgICAgKiBUaGlzIGJhc2ljYWxseSB0YWtlcyBhIHNuYXAgc2hvdCBvZiB0aGUgZGlzcGxheSBvYmplY3QgYXMgaXQgaXMgYXQgdGhhdCBtb21lbnQuIEl0IGNhbiBwcm92aWRlIGEgcGVyZm9ybWFuY2UgYmVuZWZpdCBmb3IgY29tcGxleCBzdGF0aWMgZGlzcGxheU9iamVjdHMuXG4gICAgICogVG8gcmVtb3ZlIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnZmFsc2UnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgY2FjaGVBc0JpdG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZUFzQml0bWFwO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXAgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVBc0JpdG1hcCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IHRoaXMucmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSB0aGlzLnJlbmRlckNhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gdGhpcy51cGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHMgPSB0aGlzLmdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSA9IHRoaXMuZGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludCA9IHRoaXMuY29udGFpbnNQb2ludDtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX2NhY2hlQXNCaXRtYXBEZXN0cm95O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJvdW5kcyA9IHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fb3JpZ2luYWxEZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIFdlYkdMXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlciggdGhpcy5fY2FjaGVkU3ByaXRlICk7XG59O1xuXG4vKipcbiogUHJlcGFyZXMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZmlyc3Qgd2UgZmx1c2ggYW55dGhpbmcgbGVmdCBpbiB0aGUgcmVuZGVyZXIgKG90aGVyd2lzZSBpdCB3b3VsZCBnZXQgcmVuZGVyZWQgdG8gdGhlIGNhY2hlZCB0ZXh0dXJlKVxuICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuICAgIC8vdGhpcy5maWx0ZXJzPSBbXTtcbiAgICAvLyBuZXh0IHdlIGZpbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHVudHJhbnNmb3JtZWQgb2JqZWN0XG4gICAgLy8gdGhpcyBmdW5jdGlvbiBhbHNvIGNhbGxzIHVwZGF0ZXRyYW5zZm9ybSBvbiBhbGwgaXRzIGNoaWxkcmVuIGFzIHBhcnQgb2YgdGhlIG1lYXN1cmluZy4gVGhpcyBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgdHJhbnNmb3JtIGFnYWluIGluIHRoaXMgZnVuY3Rpb25cbiAgICAvLyBUT0RPIHBhc3MgYW4gb2JqZWN0IHRvIGNsb25lIHRvbz8gc2F2ZXMgaGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBvbmUgZWFjaCB0aW1lIVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuY2xvbmUoKTtcblxuICAgIC8vIGFkZCBzb21lIHBhZGRpbmchXG4gICAgaWYodGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5fZmlsdGVyc1swXS5wYWRkaW5nO1xuICAgICAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgICAgICBib3VuZHMueSAtPSBwYWRkaW5nO1xuXG4gICAgICAgIGJvdW5kcy53aWR0aCArPSBwYWRkaW5nICogMjtcbiAgICAgICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcbiAgICB9XG5cbiAgICAvLyBmb3Igbm93IHdlIGNhY2hlIHRoZSBjdXJyZW50IHJlbmRlclRhcmdldCB0aGF0IHRoZSB3ZWJHTCByZW5kZXJlciBpcyBjdXJyZW50bHkgdXNpbmcuXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBtb3JlIGVsZWdlbnQuLlxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0O1xuICAgIC8vIFdlIGFsc28gc3RvcmUgdGhlIGZpbHRlciBzdGFjayAtIEkgd2lsbCBkZWZpbml0ZWx5IGxvb2sgdG8gY2hhbmdlIGhvdyB0aGlzIHdvcmtzIGEgbGl0dGxlIGxhdGVyIGRvd24gdGhlIGxpbmUuXG4gICAgdmFyIHN0YWNrID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjaztcblxuICAgIC8vIHRoaXMgcmVuZGVyVGV4dHVyZSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlZCBEaXNwbGF5T2JqZWN0XG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cblxuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjYWNoZWRSZW5kZXJUYXJnZXQpO1xuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2sgPSBzdGFjaztcblxuICAgIHRoaXMucmVuZGVyV2ViR0wgICAgID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgICAgICAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyByZXN0b3JlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIGNhY2hlZCBzcHJpdGUgdG8gYXZvaWQgdGhlIG5hc3R5IGZsaWNrZXIuLlxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAvLyBtYXAgdGhlIGhpdCB0ZXN0Li5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBjYW52YXNcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzKCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbn07XG5cbi8vVE9ETyB0aGlzIGNhbiBiZSB0aGUgc2FtZSBhcyB0aGUgd2ViR0wgdmVyaXNvbi4uIHdpbGwgbmVlZCB0byBkbyBhIGxpdHRsZSB0d2Vha2luZyBmaXJzdCB0aG91Z2guLlxuLyoqXG4qIFByZXBhcmVzIHRoZSBDYW52YXMgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vZ2V0IGJvdW5kcyBhY3R1YWxseSB0cmFuc2Zvcm1zIHRoZSBvYmplY3QgZm9yIHVzIGFscmVhZHkhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5jb250ZXh0ID0gY2FjaGVkUmVuZGVyVGFyZ2V0O1xuXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBDYWxjdWxhdGVzIHRoZSBib3VuZHMgb2YgdGhlIGNhY2hlZCBzcHJpdGVcbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZ2V0Q2FjaGVkQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNwcml0ZS5nZXRCb3VuZHMoKTtcbn07XG5cbi8qKlxuKiBEZXN0cm95cyB0aGUgY2FjaGVkIHNwcml0ZS5cbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fdGV4dHVyZS5kZXN0cm95KCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwRGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jYWNoZUFzQml0bWFwID0gZmFsc2U7XG4gICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95KCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIG9iamVjdC5cbiAqXG4gKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICogQG1lbWJlciB7c3RyaW5nfVxuICovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZGlzcGxheSBvYmplY3QgaW4gdGhlIGNvbnRhaW5lclxuKlxuKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4qIEBwYXJhbSBuYW1lIHtzdHJpbmd9IGluc3RhbmNlIG5hbWVcbiogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuKi9cbmNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4qXG4qIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4qIEBwYXJhbSBwb2ludCB7UG9pbnR9IHRoZSBwb2ludCB0byB3cml0ZSB0aGUgZ2xvYmFsIHZhbHVlIHRvLiBJZiBudWxsIGEgbmV3IHBvaW50IHdpbGwgYmUgcmV0dXJuZWRcbiogQHJldHVybiB7UG9pbnR9XG4qL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRHbG9iYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb2ludClcbntcbiAgICBwb2ludCA9IHBvaW50IHx8IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICBpZih0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHBvaW50LnggPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICBwb2ludC55ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG9pbnQueCA9IHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMucG9zaXRpb24ueTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG5yZXF1aXJlKCcuL2NhY2hlQXNCaXRtYXAnKTtcbnJlcXVpcmUoJy4vZ2V0Q2hpbGRCeU5hbWUnKTtcbnJlcXVpcmUoJy4vZ2V0R2xvYmFsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZXh0cmFzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1vdmllQ2xpcDogICAgICByZXF1aXJlKCcuL01vdmllQ2xpcCcpLFxuICAgIFRpbGluZ1Nwcml0ZTogICByZXF1aXJlKCcuL1RpbGluZ1Nwcml0ZScpLFxuICAgIEJpdG1hcFRleHQ6ICAgICByZXF1aXJlKCcuL0JpdG1hcFRleHQnKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vLyBUT0RPIChjZW5nbGVyKSAtIFRoZSBZIGlzIGZsaXBwZWQgaW4gdGhpcyBzaGFkZXIgZm9yIHNvbWUgcmVhc29uLlxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBzaGFkZXIgOiBodHRwczovL3d3dy5zaGFkZXJ0b3kuY29tL3ZpZXcvbHNzR0RqIGJ5IEBtb3ZBWDEzaFxuICovXG5cbi8qKlxuICogQW4gQVNDSUkgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBBc2NpaUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgY2hhcmFjdGVyKGZsb2F0IG4sIHZlYzIgcClcXG57XFxuICAgIHAgPSBmbG9vcihwKnZlYzIoNC4wLCAtNC4wKSArIDIuNSk7XFxuICAgIGlmIChjbGFtcChwLngsIDAuMCwgNC4wKSA9PSBwLnggJiYgY2xhbXAocC55LCAwLjAsIDQuMCkgPT0gcC55KVxcbiAgICB7XFxuICAgICAgICBpZiAoaW50KG1vZChuL2V4cDIocC54ICsgNS4wKnAueSksIDIuMCkpID09IDEpIHJldHVybiAxLjA7XFxuICAgIH1cXG4gICAgcmV0dXJuIDAuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHk7XFxuXFxuICAgIHZlYzMgY29sID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBmbG9vciggdXYgLyBwaXhlbFNpemUgKSAqIHBpeGVsU2l6ZSAvIGRpbWVuc2lvbnMueHkpLnJnYjtcXG5cXG4gICAgZmxvYXQgZ3JheSA9IChjb2wuciArIGNvbC5nICsgY29sLmIpIC8gMy4wO1xcblxcbiAgICBmbG9hdCBuID0gIDY1NTM2LjA7ICAgICAgICAgICAgIC8vIC5cXG4gICAgaWYgKGdyYXkgPiAwLjIpIG4gPSA2NTYwMC4wOyAgICAvLyA6XFxuICAgIGlmIChncmF5ID4gMC4zKSBuID0gMzMyNzcyLjA7ICAgLy8gKlxcbiAgICBpZiAoZ3JheSA+IDAuNCkgbiA9IDE1MjU1MDg2LjA7IC8vIG9cXG4gICAgaWYgKGdyYXkgPiAwLjUpIG4gPSAyMzM4NTE2NC4wOyAvLyAmXFxuICAgIGlmIChncmF5ID4gMC42KSBuID0gMTUyNTIwMTQuMDsgLy8gOFxcbiAgICBpZiAoZ3JheSA+IDAuNykgbiA9IDEzMTk5NDUyLjA7IC8vIEBcXG4gICAgaWYgKGdyYXkgPiAwLjgpIG4gPSAxMTUxMjgxMC4wOyAvLyAjXFxuXFxuICAgIHZlYzIgcCA9IG1vZCggdXYgLyAoIHBpeGVsU2l6ZSAqIDAuNSApLCAyLjApIC0gdmVjMigxLjApO1xcbiAgICBjb2wgPSBjb2wgKiBjaGFyYWN0ZXIobiwgcCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sLCAxLjApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDggfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQXNjaWlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Bc2NpaUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc2NpaUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQXNjaWlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFzY2lpRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBzaXplIHVzZWQgYnkgdGhlIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkFzY2lpRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmxvb21GaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmxvb21GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xufVxuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsb29tRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb29tRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbG9vbUZpbHRlcjtcblxuQmxvb21GaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLlNDUkVFTik7XG5cbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvb21GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuXG4vKipcbiAqIFRoZSBCbHVyRGlyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvd2FyZCBhIGRpcmVjdGlvbiB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWFxuICogQHBhcmFtIHtudW1iZXJ9IGRpcllcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckRpckZpbHRlcihkaXJYLCBkaXJZKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBmbG9hdCBkaXJYO1xcbnVuaWZvcm0gZmxvYXQgZGlyWTtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1swXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDEyICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDEyICogc3RyZW5ndGgpICogZGlyWSApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkgKiAwLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkgKiAwLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkgKiAwLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pICogMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBkaXJYOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJYIHx8IDAgfSxcbiAgICAgICAgICAgIGRpclk6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclkgfHwgMCB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclggPSBkaXJYIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclkgPSBkaXJZIHx8IDA7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckRpckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckRpckZpbHRlcjtcblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKSB7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmICh0aGlzLnBhc3NlcyA9PT0gMSkge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0yOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gKHRoaXMucGFzc2VzKyhpKjIpKSAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckRpckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJYO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJYLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsdXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcbn1cblxuQmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckZpbHRlcjtcblxuQmx1ckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcGFzc2VzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzID0gdGhpcy5ibHVyWUZpbHRlci5wYXNzZXMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWEZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1clhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1clhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1clhGaWx0ZXI7XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1clhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSAgTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllGaWx0ZXI7XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSBNYXRoLmFicyh0aGlzLnN0cmVuZ3RoKSAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgU21hcnQgQmx1ciBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNtYXJ0Qmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAqIHBlcmNlbnQpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICBkZWx0YTogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjEsIHk6IDAuMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTbWFydEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNtYXJ0Qmx1ckZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDV4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogYGBganNcbiAqICB2YXIgY29sb3JNYXRyaXggPSBuZXcgUElYSS5Db2xvck1hdHJpeEZpbHRlcigpO1xuICogIGNvbnRhaW5lci5maWx0ZXJzID0gW2NvbG9yTWF0cml4XTtcbiAqICBjb2xvck1hdHJpeC5jb250cmFzdCgyKTtcbiAqIGBgYFxuICogQGF1dGhvciBDbMOpbWVudCBDaGVuZWJhdWx0IDxjbGVtZW50QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvck1hdHJpeEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBtWzI1XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuXFxuICAgIHZlYzQgYyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yID0gKG1bMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gbVs0XTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLmcgPSAobVs1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSBtWzldO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmIgPSAobVsxMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gbVsxNF07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYSA9IChtWzE1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSBtWzE5XTtcXG5cXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJzFmdicsIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yTWF0cml4RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvck1hdHJpeEZpbHRlcjtcblxuXG4vKipcbiAqIFRyYW5zZm9ybXMgY3VycmVudCBtYXRyaXggYW5kIHNldCB0aGUgbmV3IG9uZVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gaWYgdHJ1ZSwgY3VycmVudCBtYXRyaXggYW5kIG1hdHJpeCBhcmUgbXVsdGlwbGllZC4gSWYgZmFsc2UsIGp1c3Qgc2V0IHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIEBwYXJhbSBtYXRyaXhcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9sb2FkTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgbXVsdGlwbHkpXG57XG4gICAgbXVsdGlwbHkgPSAhIW11bHRpcGx5O1xuXG4gICAgdmFyIG5ld01hdHJpeCA9IG1hdHJpeDtcblxuICAgIGlmIChtdWx0aXBseSkge1xuICAgICAgICB0aGlzLl9tdWx0aXBseShuZXdNYXRyaXgsIHRoaXMudW5pZm9ybXMubS52YWx1ZSwgbWF0cml4KTtcbiAgICAgICAgbmV3TWF0cml4ID0gdGhpcy5fY29sb3JNYXRyaXgobmV3TWF0cml4KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBtYXRyaXhcbiAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSBuZXdNYXRyaXg7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDUnc1xuICpcbiAqIEBwYXJhbSBvdXQge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSBhIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0gYiB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIG91dCB7bnVtYmVyW119IChtYXQgNXg0KVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYilcbntcblxuICAgIC8vIFJlZCBDaGFubmVsXG4gICAgb3V0WzBdID0gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYls1XSkgKyAoYVsyXSAqIGJbMTBdKSArIChhWzNdICogYlsxNV0pO1xuICAgIG91dFsxXSA9IChhWzBdICogYlsxXSkgKyAoYVsxXSAqIGJbNl0pICsgKGFbMl0gKiBiWzExXSkgKyAoYVszXSAqIGJbMTZdKTtcbiAgICBvdXRbMl0gPSAoYVswXSAqIGJbMl0pICsgKGFbMV0gKiBiWzddKSArIChhWzJdICogYlsxMl0pICsgKGFbM10gKiBiWzE3XSk7XG4gICAgb3V0WzNdID0gKGFbMF0gKiBiWzNdKSArIChhWzFdICogYls4XSkgKyAoYVsyXSAqIGJbMTNdKSArIChhWzNdICogYlsxOF0pO1xuICAgIG91dFs0XSA9IChhWzBdICogYls0XSkgKyAoYVsxXSAqIGJbOV0pICsgKGFbMl0gKiBiWzE0XSkgKyAoYVszXSAqIGJbMTldKTtcblxuICAgIC8vIEdyZWVuIENoYW5uZWxcbiAgICBvdXRbNV0gPSAoYVs1XSAqIGJbMF0pICsgKGFbNl0gKiBiWzVdKSArIChhWzddICogYlsxMF0pICsgKGFbOF0gKiBiWzE1XSk7XG4gICAgb3V0WzZdID0gKGFbNV0gKiBiWzFdKSArIChhWzZdICogYls2XSkgKyAoYVs3XSAqIGJbMTFdKSArIChhWzhdICogYlsxNl0pO1xuICAgIG91dFs3XSA9IChhWzVdICogYlsyXSkgKyAoYVs2XSAqIGJbN10pICsgKGFbN10gKiBiWzEyXSkgKyAoYVs4XSAqIGJbMTddKTtcbiAgICBvdXRbOF0gPSAoYVs1XSAqIGJbM10pICsgKGFbNl0gKiBiWzhdKSArIChhWzddICogYlsxM10pICsgKGFbOF0gKiBiWzE4XSk7XG4gICAgb3V0WzldID0gKGFbNV0gKiBiWzRdKSArIChhWzZdICogYls5XSkgKyAoYVs3XSAqIGJbMTRdKSArIChhWzhdICogYlsxOV0pO1xuXG4gICAgLy8gQmx1ZSBDaGFubmVsXG4gICAgb3V0WzEwXSA9IChhWzEwXSAqIGJbMF0pICsgKGFbMTFdICogYls1XSkgKyAoYVsxMl0gKiBiWzEwXSkgKyAoYVsxM10gKiBiWzE1XSk7XG4gICAgb3V0WzExXSA9IChhWzEwXSAqIGJbMV0pICsgKGFbMTFdICogYls2XSkgKyAoYVsxMl0gKiBiWzExXSkgKyAoYVsxM10gKiBiWzE2XSk7XG4gICAgb3V0WzEyXSA9IChhWzEwXSAqIGJbMl0pICsgKGFbMTFdICogYls3XSkgKyAoYVsxMl0gKiBiWzEyXSkgKyAoYVsxM10gKiBiWzE3XSk7XG4gICAgb3V0WzEzXSA9IChhWzEwXSAqIGJbM10pICsgKGFbMTFdICogYls4XSkgKyAoYVsxMl0gKiBiWzEzXSkgKyAoYVsxM10gKiBiWzE4XSk7XG4gICAgb3V0WzE0XSA9IChhWzEwXSAqIGJbNF0pICsgKGFbMTFdICogYls5XSkgKyAoYVsxMl0gKiBiWzE0XSkgKyAoYVsxM10gKiBiWzE5XSk7XG5cbiAgICAvLyBBbHBoYSBDaGFubmVsXG4gICAgb3V0WzE1XSA9IChhWzE1XSAqIGJbMF0pICsgKGFbMTZdICogYls1XSkgKyAoYVsxN10gKiBiWzEwXSkgKyAoYVsxOF0gKiBiWzE1XSk7XG4gICAgb3V0WzE2XSA9IChhWzE1XSAqIGJbMV0pICsgKGFbMTZdICogYls2XSkgKyAoYVsxN10gKiBiWzExXSkgKyAoYVsxOF0gKiBiWzE2XSk7XG4gICAgb3V0WzE3XSA9IChhWzE1XSAqIGJbMl0pICsgKGFbMTZdICogYls3XSkgKyAoYVsxN10gKiBiWzEyXSkgKyAoYVsxOF0gKiBiWzE3XSk7XG4gICAgb3V0WzE4XSA9IChhWzE1XSAqIGJbM10pICsgKGFbMTZdICogYls4XSkgKyAoYVsxN10gKiBiWzEzXSkgKyAoYVsxOF0gKiBiWzE4XSk7XG4gICAgb3V0WzE5XSA9IChhWzE1XSAqIGJbNF0pICsgKGFbMTZdICogYls5XSkgKyAoYVsxN10gKiBiWzE0XSkgKyAoYVsxOF0gKiBiWzE5XSk7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHJldHVybiBtIHtudW1iZXJbXX0gKG1hdCA1eDQpIHdpdGggYWxsIHZhbHVlcyBiZXR3ZWVuIDAtMVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2NvbG9yTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICAvLyBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gICAgdmFyIG0gPSBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCk7XG4gICAgbVs0XSAvPSAyNTU7XG4gICAgbVs5XSAvPSAyNTU7XG4gICAgbVsxNF0gLz0gMjU1O1xuICAgIG1bMTldIC89IDI1NTtcblxuICAgIHJldHVybiBtO1xufTtcblxuLyoqXG4gKiBBZGp1c3RzIGJyaWdodG5lc3NcbiAqXG4gKiBAcGFyYW0gYiB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgYnJpZ3RobmVzcyAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icmlnaHRuZXNzID0gZnVuY3Rpb24gKGIsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGIsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIGIsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIGIsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXRyaWNlcyBpbiBncmV5IHNjYWxlc1xuICpcbiAqIEBwYXJhbSBzY2FsZSB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgZ3JleSAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG4vL0FtZXJpY2FuaXplZCBhbGlhc1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyYXlzY2FsZSA9IENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGU7XG5cbi8qKlxuICogU2V0IHRoZSBibGFjayBhbmQgd2hpdGUgbWF0cmljZVxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJsYWNrQW5kV2hpdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGh1ZSBwcm9wZXJ0eSBvZiB0aGUgY29sb3JcbiAqXG4gKiBAcGFyYW0gcm90YXRpb24ge251bWJlcn0gaW4gZGVncmVlc1xuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmh1ZSA9IGZ1bmN0aW9uIChyb3RhdGlvbiwgbXVsdGlwbHkpXG57XG4gICAgcm90YXRpb24gPSAocm90YXRpb24gfHwgMCkgLyAxODAgKiBNYXRoLlBJO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyhyb3RhdGlvbiksXG4gICAgICAgIHNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcblxuICAgIC8vIGx1bWluYW5jZVJlZCwgbHVtaW5hbmNlR3JlZW4sIGx1bWluYW5jZUJsdWVcbiAgICB2YXIgbHVtUiA9IDAuMjEzLCAvLyBvciAwLjMwODZcbiAgICAgICAgbHVtRyA9IDAuNzE1LCAvLyBvciAwLjYwOTRcbiAgICAgICAgbHVtQiA9IDAuMDcyOyAvLyBvciAwLjA4MjBcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoMSAtIGx1bVIpICsgc2luICogKC1sdW1SKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAoLWx1bUcpLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgxIC0gbHVtQiksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKDAuMTQzKSwgbHVtRyArIGNvcyAqICgxIC0gbHVtRykgKyBzaW4gKiAoMC4xNDApLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgtMC4yODMpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgtKDEgLSBsdW1SKSksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKGx1bUcpLCBsdW1CICsgY29zICogKDEgLSBsdW1CKSArIHNpbiAqIChsdW1CKSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKipcbiAqIFNldCB0aGUgY29udHJhc3QgbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGRhcmsgYW5kIGJyaWdodFxuICogSW5jcmVhc2UgY29udHJhc3QgOiBzaGFkb3dzIGRhcmtlciBhbmQgaGlnaGxpZ2h0cyBicmlnaHRlclxuICogRGVjcmVhc2UgY29udHJhc3QgOiBicmluZyB0aGUgc2hhZG93cyB1cCBhbmQgdGhlIGhpZ2hsaWdodHMgZG93blxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdmFsdWUgb2YgdGhlIGNvbnRyYXN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29udHJhc3QgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgdiA9IChhbW91bnQgfHwgMCkgKyAxO1xuICAgIHZhciBvID0gLTEyOCAqICh2IC0gMSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB2LCAwLCAwLCAwLCBvLFxuICAgICAgICAwLCB2LCAwLCAwLCBvLFxuICAgICAgICAwLCAwLCB2LCAwLCBvLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc2F0dXJhdGlvbiBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gY29sb3JzXG4gKiBJbmNyZWFzZSBzYXR1cmF0aW9uIDogaW5jcmVhc2UgY29udHJhc3QsIGJyaWdodG5lc3MsIGFuZCBzaGFycG5lc3NcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgeCA9IChhbW91bnQgfHwgMCkgKiAyIC8gMyArIDE7XG4gICAgdmFyIHkgPSAoKHggLSAxKSAqIC0wLjUpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgeCwgeSwgeSwgMCwgMCxcbiAgICAgICAgeSwgeCwgeSwgMCwgMCxcbiAgICAgICAgeSwgeSwgeCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBEZXNhdHVyYXRlIGltYWdlIChyZW1vdmUgY29sb3IpXG4gKlxuICogQ2FsbCB0aGUgc2F0dXJhdGUgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHRoaXMuc2F0dXJhdGUoLTEpO1xufTtcblxuLyoqXG4gKiBOZWdhdGl2ZSBpbWFnZSAoaW52ZXJzZSBvZiBjbGFzc2ljIHJnYiBtYXRyaXgpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5lZ2F0aXZlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDEsIDEsIDAsIDAsXG4gICAgICAgIDEsIDAsIDEsIDAsIDAsXG4gICAgICAgIDEsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2VwaWEgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2VwaWEgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zOTMsIDAuNzY4OTk5OSwgMC4xODg5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4zNDksIDAuNjg1OTk5OSwgMC4xNjc5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4yNzIsIDAuNTMzOTk5OSwgMC4xMzA5OTk5OSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciBtb3Rpb24gcGljdHVyZSBwcm9jZXNzIGludmVudGVkIGluIDE5MTYgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRlY2huaWNvbG9yID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuOTEyNTI3Nzg5MTQ1NjA4MywgLTAuODU0NTM0NDk3Njk1MTY0NSwgLTAuMDkxNTU1MDg0ODI3NTU1ODUsIDAsIDExLjc5MzYwMzQzNDM3NzMzNyxcbiAgICAgICAgLTAuMzA4NzgzMzM4NTkyODA5NywgMS43NjU4OTA4NTU1NDU4NDI4LCAtMC4xMDYwMTc0MzA3NDcyMjI0NSwgMCwgLTcwLjM1MjA1MTYxNDYxMzk4LFxuICAgICAgICAtMC4yMzExMDMzNzc1NDg2MTYsIC0wLjc1MDE4OTkxOTc0NDAyMTIsIDEuODQ3NTk3ODE2MTA4MTg5LCAwLCAzMC45NTA5NDA4Njk0OTExMzgsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogUG9sYXJvaWQgZmlsdGVyXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnBvbGFyb2lkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuNDM4LCAtMC4wNjIsIC0wLjA2MiwgMCwgMCxcbiAgICAgICAgLTAuMTIyLCAxLjM3OCwgLTAuMTIyLCAwLCAwLFxuICAgICAgICAtMC4wMTYsIC0wLjAxNiwgMS40ODMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRmlsdGVyIHdobyB0cmFuc2Zvcm1zIDogUmVkIC0+IEJsdWUgYW5kIEJsdWUgLT4gUmVkXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRvQkdSID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgcmV2ZXJzYWwgZmlsbSBpbnRyb2R1Y2VkIGJ5IEVhc3RtYW4gS29kYWsgaW4gMTkzNS4gKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmtvZGFjaHJvbWUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS4xMjg1NTgyMzk2NTkzNTI1LCAtMC4zOTY3MzgyMjgzNjAxMzQ4LCAtMC4wMzk5MjU1OTE3MjkyMTc5MywgMCwgNjMuNzI5NTg3NjIxOTY1MDIsXG4gICAgICAgIC0wLjE2NDA0MzM5OTYyMjQ0NjE2LCAxLjA4MzUyNTE1NjYyOTEzMDQsIC0wLjA1NDk4ODA1MTE1NjMzMTMyLCAwLCAyNC43MzI0MDc4OTY3MDYyMDMsXG4gICAgICAgIC0wLjE2Nzg2MDEwNzA2MTU1NzYzLCAtMC41NjAzNDE2Mjc3Njk1MjQ4LCAxLjYwMTQ4NTA3NjE5NjQ5NDMsIDAsIDM1LjYyOTgyODA3NDYwOTQ2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEJyb3duIGRlbGljaW91cyBicm93bmkgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icm93bmkgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC41OTk3MDIzNDk4MTU5NzE1LCAwLjM0NTUzMjQzMDQ4MzkxMjYzLCAtMC4yNzA4Mjk4Njc0NTM4MDQyLCAwLCA0Ny40MzE5Mjg1NTYwMDg3MyxcbiAgICAgICAgLTAuMDM3NzAzMjQ5ODM3NzgzMTU3LCAwLjg2MDk1Nzc1ODc5OTI2NDEsIDAuMTUwNTk1NTIzODg0NTk5MTMsIDAsIC0zNi45Njg0MTQ5ODMxOTEyNyxcbiAgICAgICAgMC4yNDExMzYzNTEyODE1MzMzNSwgLTAuMDc0NDEwMzc5MDg0MjI0OTIsIDAuNDQ5NzIxODIwNjQ4NzcxNTMsIDAsIC03LjU2MjA3NTI3NzU5MTI4MyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFZpbnRhZ2UgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS52aW50YWdlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNjI3OTM0NTYzNTYwNTk5NCwgMC4zMjAyMTgzNDIwODE5MzY3LCAtMC4wMzk2NTQwODIxMTMxMjQ1MywgMCwgOS42NTEyODU4MzUyOTQxMjMsXG4gICAgICAgIDAuMDI1NzgzOTc3MDQ4MDg4NjgsIDAuNjQ0MTE4ODY0NDM3NDc3MSwgMC4wMzI1OTEyNzYxNjE0OTI5NCwgMCwgNy40NjI4MjkxNzY0NzA1OTEsXG4gICAgICAgIDAuMDQ2NjA1NTU1Njc4MjcxOSwgLTAuMDg1MTIzMjk4NzI0Nzg5MSwgMC41MjQxNjQ4MDE4NzAwNDY1LCAwLCA1LjE1OTE5MDU4ODIzNTI5NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGtpbmQgb2YgZ3JhZGllbnQgbWFwLCBidXQgZnVubnkgdG8gcGxheSB3aXRoIVxuICpcbiAqIEBwYXJhbSBkZXNhdHVyYXRpb24ge251bWJlcn1cbiAqIEBwYXJhbSB0b25lZCB7bnVtYmVyfVxuICogQHBhcmFtIGxpZ2h0Q29sb3Ige3N0cmluZ30gKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKiBAcGFyYW0gZGFya0NvbG9yIHtzdHJpbmd9ICAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29sb3JUb25lID0gZnVuY3Rpb24gKGRlc2F0dXJhdGlvbiwgdG9uZWQsIGxpZ2h0Q29sb3IsIGRhcmtDb2xvciwgbXVsdGlwbHkpXG57XG4gICAgZGVzYXR1cmF0aW9uID0gZGVzYXR1cmF0aW9uIHx8IDAuMjtcbiAgICB0b25lZCA9IHRvbmVkIHx8IDAuMTU7XG4gICAgbGlnaHRDb2xvciA9IGxpZ2h0Q29sb3IgfHwgMHhGRkU1ODA7XG4gICAgZGFya0NvbG9yID0gZGFya0NvbG9yIHx8IDB4MzM4MDAwO1xuXG4gICAgdmFyIGxSID0gKChsaWdodENvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsRyA9ICgobGlnaHRDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsQiA9IChsaWdodENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgZFIgPSAoKGRhcmtDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEcgPSAoKGRhcmtDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkQiA9IChkYXJrQ29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC41OSwgMC4xMSwgMCwgMCxcbiAgICAgICAgbFIsIGxHLCBsQiwgZGVzYXR1cmF0aW9uLCAwLFxuICAgICAgICBkUiwgZEcsIGRCLCB0b25lZCwgMCxcbiAgICAgICAgbFIgLSBkUiwgbEcgLSBkRywgbEIgLSBkQiwgMCwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIE5pZ2h0IGVmZmVjdFxuICpcbiAqIEBwYXJhbSBpbnRlbnNpdHkge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uaWdodCA9IGZ1bmN0aW9uIChpbnRlbnNpdHksIG11bHRpcGx5KVxue1xuICAgIGludGVuc2l0eSA9IGludGVuc2l0eSB8fCAwLjE7XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgaW50ZW5zaXR5ICogKCAtMi4wKSwgLWludGVuc2l0eSwgMCwgMCwgMCxcbiAgICAgICAgLWludGVuc2l0eSwgMCwgaW50ZW5zaXR5LCAwLCAwLFxuICAgICAgICAwLCBpbnRlbnNpdHksIGludGVuc2l0eSAqIDIuMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKlxuICogUHJlZGF0b3IgZWZmZWN0XG4gKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgYSBuZXcgaW5kZXBlbnQgb25lXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBob3cgbXVjaCB0aGUgcHJlZGF0b3IgZmVlbHMgaGlzIGZ1dHVyZSB2aWN0aW1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wcmVkYXRvciA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDExLjIyNDEzMDYzMDQ5MzE2NCAqIGFtb3VudCwgLTQuNzk0NDg2OTk5NTExNzE5ICogYW1vdW50LCAtMi44NzQ2MTE4NTQ1NTMyMjI3ICogYW1vdW50LCAwICogYW1vdW50LCAwLjQwMzQyNDM4MjIwOTc3NzgzICogYW1vdW50LFxuICAgICAgICAtMy42MzMwNjk3NTM2NDY4NTA2ICogYW1vdW50LCA5LjE5MzE1NzE5NjA0NDkyMiAqIGFtb3VudCwgLTIuOTUxODEwODM2NzkxOTkyICogYW1vdW50LCAwICogYW1vdW50LCAtMS4zMTYxMzUwNDg4NjYyNzIgKiBhbW91bnQsXG4gICAgICAgIC0zLjIxODQxOTc5MDI2Nzk0NDMgKiBhbW91bnQsIC00LjIzNzUwMzA1MTc1NzgxMjUgKiBhbW91bnQsIDcuNDc2NDQ4MDU5MDgyMDMxICogYW1vdW50LCAwICogYW1vdW50LCAwLjgwNDQ0NTkyMjM3NDcyNTMgKiBhbW91bnQsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBMU0QgZWZmZWN0XG4gKlxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBIb3cgY3JhenkgaXMgeW91ciBlZmZlY3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5sc2QgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMiwgLTAuNCwgMC41LCAwLCAwLFxuICAgICAgICAtMC41LCAyLCAtMC40LCAwLCAwLFxuICAgICAgICAtMC40LCAtMC41LCAzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgb25lXG4gKlxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIGZhbHNlKTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF0cml4IG9mIHRoZSBjb2xvciBtYXRyaXggZmlsdGVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yTWF0cml4RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IFsxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwXVxuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm0udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBsb3dlcnMgdGhlIGNvbG9yIGRlcHRoIG9mIHlvdXIgaW1hZ2UgYnkgdGhlIGdpdmVuIGFtb3VudCwgcHJvZHVjaW5nIGFuIGltYWdlIHdpdGggYSBzbWFsbGVyIHBhbGV0dGUuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yU3RlcEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzdGVwO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGNvbG9yID0gZmxvb3IoY29sb3IgKiBzdGVwKSAvIHN0ZXA7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXA6IHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yU3RlcEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JTdGVwRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBzdGVwcyB0byByZWR1Y2UgdGhlIHBhbGV0dGUgYnkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvclN0ZXBGaWx0ZXIjXG4gICAgICovXG4gICAgc3RlcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbnZvbHV0aW9uRmlsdGVyIGNsYXNzIGFwcGxpZXMgYSBtYXRyaXggY29udm9sdXRpb24gZmlsdGVyIGVmZmVjdC5cbiAqIEEgY29udm9sdXRpb24gY29tYmluZXMgcGl4ZWxzIGluIHRoZSBpbnB1dCBpbWFnZSB3aXRoIG5laWdoYm9yaW5nIHBpeGVscyB0byBwcm9kdWNlIGEgbmV3IGltYWdlLlxuICogQSB3aWRlIHZhcmlldHkgb2YgaW1hZ2UgZWZmZWN0cyBjYW4gYmUgYWNoaWV2ZWQgdGhyb3VnaCBjb252b2x1dGlvbnMsIGluY2x1ZGluZyBibHVycmluZywgZWRnZVxuICogZGV0ZWN0aW9uLCBzaGFycGVuaW5nLCBlbWJvc3NpbmcsIGFuZCBiZXZlbGluZy4gVGhlIG1hdHJpeCBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIFNlZSBodHRwOi8vZG9jcy5naW1wLm9yZy9lbi9wbHVnLWluLWNvbnZtYXRyaXguaHRtbCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICovXG5mdW5jdGlvbiBDb252b2x1dGlvbkZpbHRlcihtYXRyaXgsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyBtZWRpdW1wIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xcbnVuaWZvcm0gZmxvYXQgbWF0cml4WzldO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IGMxMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAtIHRleGVsU2l6ZSk7IC8vIHRvcCBsZWZ0XFxuICAgdmVjNCBjMTIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgY2VudGVyXFxuICAgdmVjNCBjMTMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCByaWdodFxcblxcbiAgIHZlYzQgYzIxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIGxlZnRcXG4gICB2ZWM0IGMyMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7IC8vIG1pZCBjZW50ZXJcXG4gICB2ZWM0IGMyMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCByaWdodFxcblxcbiAgIHZlYzQgYzMxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gbGVmdFxcbiAgIHZlYzQgYzMyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGNlbnRlclxcbiAgIHZlYzQgYzMzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgdGV4ZWxTaXplKTsgLy8gYm90dG9tIHJpZ2h0XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID1cXG4gICAgICAgYzExICogbWF0cml4WzBdICsgYzEyICogbWF0cml4WzFdICsgYzEzICogbWF0cml4WzJdICtcXG4gICAgICAgYzIxICogbWF0cml4WzNdICsgYzIyICogbWF0cml4WzRdICsgYzIzICogbWF0cml4WzVdICtcXG4gICAgICAgYzMxICogbWF0cml4WzZdICsgYzMyICogbWF0cml4WzddICsgYzMzICogbWF0cml4WzhdO1xcblxcbiAgIGdsX0ZyYWdDb2xvci5hID0gYzIyLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWF0cml4OiAgICAgeyB0eXBlOiAnMWZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KSB9LFxuICAgICAgICAgICAgdGV4ZWxTaXplOiAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxIC8gd2lkdGgsIHk6IDEgLyBoZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnZvbHV0aW9uRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb252b2x1dGlvbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnkgPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIENyb3NzIEhhdGNoIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENyb3NzSGF0Y2hGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZmxvYXQgbHVtID0gbGVuZ3RoKHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZC54eSkucmdiKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDEuMCwgMS4wLCAxLjApO1xcblxcbiAgICBpZiAobHVtIDwgMS4wMClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjc1KVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNTApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC4zKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXCJcbiAgICApO1xufVxuXG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDcm9zc0hhdGNoRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDcm9zc0hhdGNoRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIERpc3BsYWNlbWVudEZpbHRlciBjbGFzcyB1c2VzIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHRleHR1cmUgKGNhbGxlZCB0aGUgZGlzcGxhY2VtZW50IG1hcCkgdG8gcGVyZm9ybSBhIGRpc3BsYWNlbWVudCBvZiBhbiBvYmplY3QuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGZpbHRlciB0byBhcHBseSBhbGwgbWFub3Igb2YgY3Jhenkgd2FycGluZyBlZmZlY3RzXG4gKiBDdXJyZW50bHkgdGhlIHIgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHggYW5kIHRoZSBnIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIChtYWtlIHN1cmUgaXRzIGFkZGVkIHRvIHRoZSBzY2VuZSEpXG4gKi9cbmZ1bmN0aW9uIERpc3BsYWNlbWVudEZpbHRlcihzcHJpdGUsIHNjYWxlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG4gICAgc3ByaXRlLnJlbmRlcmFibGUgPSBmYWxzZTtcblxuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZNYXBDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcFNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgbWFwID0gIHRleHR1cmUyRChtYXBTYW1wbGVyLCB2TWFwQ29vcmQpO1xcblxcbiAgIG1hcCAtPSAwLjU7XFxuICAgbWFwLnh5ICo9IHNjYWxlO1xcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyBtYXAueCwgdlRleHR1cmVDb29yZC55ICsgbWFwLnkpKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcFNhbXBsZXI6ICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLnRleHR1cmUgfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9LFxuICAgICAgICAgICAgc2NhbGU6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSwgeTogMSB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcblxuICAgIGlmIChzY2FsZSA9PT0gbnVsbCB8fCBzY2FsZSA9PT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgICAgc2NhbGUgPSAyMDtcbiAgICB9XG5cbiAgICB0aGlzLnNjYWxlID0gbmV3IGNvcmUuUG9pbnQoc2NhbGUsIHNjYWxlKTtcbn1cblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYWNlbWVudEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxhY2VtZW50RmlsdGVyO1xuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS54ID0gdGhpcy5zY2FsZS54ICogKDEvaW5wdXQuZnJhbWUud2lkdGgpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueSA9IHRoaXMuc2NhbGUueSAqICgxL2lucHV0LmZyYW1lLmhlaWdodCk7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gTXVzdCBiZSBwb3dlciBvZiAyIHNpemVkIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5EaXNwbGFjZW1lbnRGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3ZlcyBodHRwOi8vbWF0Z3JvdmVzLmNvbS8gQERvb3JtYXQyM1xuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9mdW4vZG90c2NyZWVuLmpzXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgZG90c2NyZWVuIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0byBiZSBtYWRlIG91dCBvZlxuICogYmxhY2sgYW5kIHdoaXRlIGhhbGZ0b25lIGRvdHMgbGlrZSBhbiBvbGQgcHJpbnRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRG90U2NyZWVuRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG5cXG5mbG9hdCBwYXR0ZXJuKClcXG57XFxuICAgZmxvYXQgcyA9IHNpbihhbmdsZSksIGMgPSBjb3MoYW5nbGUpO1xcbiAgIHZlYzIgdGV4ID0gdlRleHR1cmVDb29yZCAqIGRpbWVuc2lvbnMueHk7XFxuICAgdmVjMiBwb2ludCA9IHZlYzIoXFxuICAgICAgIGMgKiB0ZXgueCAtIHMgKiB0ZXgueSxcXG4gICAgICAgcyAqIHRleC54ICsgYyAqIHRleC55XFxuICAgKSAqIHNjYWxlO1xcbiAgIHJldHVybiAoc2luKHBvaW50LngpICogc2luKHBvaW50LnkpKSAqIDQuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhhdmVyYWdlICogMTAuMCAtIDUuMCArIHBhdHRlcm4oKSksIGNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNjYWxlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvdFNjcmVlbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRG90U2NyZWVuRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIHNjYWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHJhZGl1cyBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWVRpbnRGaWx0ZXIgYXBwbGllcyBhIHZlcnRpY2FsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWVRpbnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbitvZmZzZXQpLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IHN1bSA9IHZlYzQoMC4wKTtcXG5cXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLnJnYiAqIHN1bS5hICogYWxwaGEsIHN1bS5hICogYWxwaGEgKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSAvIDUxMiB9LFxuICAgICAgICAgICAgY29sb3I6IHsgdHlwZTogJ2MnLCB2YWx1ZTogWzAsMCwwXX0sXG4gICAgICAgICAgICBhbHBoYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC43IH0sXG4gICAgICAgICAgICBvZmZzZXQ6IHsgdHlwZTogJzJmJywgdmFsdWU6WzUsIDVdfSxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOjF9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllUaW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWVRpbnRGaWx0ZXI7XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIGNsZWFyKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWVRpbnRGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllUaW50RmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWVRpbnRGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgRHJvcFNoYWRvd0ZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEcm9wU2hhZG93RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIgPSBuZXcgQmx1cllUaW50RmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgdGhpcy5wYWRkaW5nID0gMzA7XG5cbiAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9hbmdsZSA9IDQ1ICogTWF0aC5QSSAvIDE4MDtcbiAgICB0aGlzLl9kaXN0YW5jZSA9IDEwO1xuICAgIHRoaXMuYWxwaGEgPSAwLjc1O1xuICAgIHRoaXMuaGlkZU9iamVjdCA9IGZhbHNlO1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5NVUxUSVBMWTtcbn1cblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRHJvcFNoYWRvd0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRHJvcFNoYWRvd0ZpbHRlcjtcblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIGlmKHRoaXMuX2RpcnR5UG9zaXRpb24pXG4gICAge1xuICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzBdID0gTWF0aC5zaW4odGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVsxXSA9IE1hdGguY29zKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUodGhpcy5ibGVuZE1vZGUpO1xuXG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIGlmKCF0aGlzLmhpZGVPYmplY3QpXG4gICAge1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG4gICAgfVxuXG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBjb2xvcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgY29yZS51dGlscy5yZ2IyaGV4KCB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgPSBjb3JlLnV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYWxwaGE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXN0YW5jZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGRpc3RhbmNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9hbmdsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fYW5nbGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBncmV5c2NhbGVzIHRoZSBwYWxldHRlIG9mIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBHcmF5RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JheTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIHZlYzMoMC4yMTI2KmdsX0ZyYWdDb2xvci5yICsgMC43MTUyKmdsX0ZyYWdDb2xvci5nICsgMC4wNzIyKmdsX0ZyYWdDb2xvci5iKSwgZ3JheSk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXk6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuR3JheUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkdyYXlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JheUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JheUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR3JheUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXkuIDEgd2lsbCBtYWtlIHRoZSBvYmplY3QgYmxhY2sgYW5kIHdoaXRlLCAwIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5HcmF5RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYXk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGZpbHRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmZpbHRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXNjaWlGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2FzY2lpL0FzY2lpRmlsdGVyJyksXG4gICAgQmxvb21GaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2Jsb29tL0Jsb29tRmlsdGVyJyksXG4gICAgQmx1ckZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckZpbHRlcicpLFxuICAgIEJsdXJYRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1cllGaWx0ZXInKSxcbiAgICBCbHVyRGlyRmlsdGVyOiAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRGlyRmlsdGVyJyksXG4gICAgQ29sb3JNYXRyaXhGaWx0ZXI6ICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yTWF0cml4RmlsdGVyJyksXG4gICAgQ29sb3JTdGVwRmlsdGVyOiAgICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yU3RlcEZpbHRlcicpLFxuICAgIENvbnZvbHV0aW9uRmlsdGVyOiAgcmVxdWlyZSgnLi9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlcicpLFxuICAgIENyb3NzSGF0Y2hGaWx0ZXI6ICAgcmVxdWlyZSgnLi9jcm9zc2hhdGNoL0Nyb3NzSGF0Y2hGaWx0ZXInKSxcbiAgICBEaXNwbGFjZW1lbnRGaWx0ZXI6IHJlcXVpcmUoJy4vZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlcicpLFxuICAgIERvdFNjcmVlbkZpbHRlcjogICAgcmVxdWlyZSgnLi9kb3QvRG90U2NyZWVuRmlsdGVyJyksXG4gICAgR3JheUZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2dyYXkvR3JheUZpbHRlcicpLFxuICAgIERyb3BTaGFkb3dGaWx0ZXI6ICAgcmVxdWlyZSgnLi9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXInKSxcbiAgICBJbnZlcnRGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vaW52ZXJ0L0ludmVydEZpbHRlcicpLFxuICAgIE5vaXNlRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ub2lzZS9Ob2lzZUZpbHRlcicpLFxuICAgIFBpeGVsYXRlRmlsdGVyOiAgICAgcmVxdWlyZSgnLi9waXhlbGF0ZS9QaXhlbGF0ZUZpbHRlcicpLFxuICAgIFJHQlNwbGl0RmlsdGVyOiAgICAgcmVxdWlyZSgnLi9yZ2IvUkdCU3BsaXRGaWx0ZXInKSxcbiAgICBTaG9ja3dhdmVGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vc2hvY2t3YXZlL1Nob2Nrd2F2ZUZpbHRlcicpLFxuICAgIFNlcGlhRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9zZXBpYS9TZXBpYUZpbHRlcicpLFxuICAgIFNtYXJ0Qmx1ckZpbHRlcjogICAgcmVxdWlyZSgnLi9ibHVyL1NtYXJ0Qmx1ckZpbHRlcicpLFxuICAgIFRpbHRTaGlmdEZpbHRlcjogICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyJyksXG4gICAgVHdpc3RGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3R3aXN0L1R3aXN0RmlsdGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGludmVydHMgeW91ciBEaXNwbGF5IE9iamVjdHMgY29sb3JzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBJbnZlcnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gZmxvYXQgaW52ZXJ0O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggKHZlYzMoMSktZ2xfRnJhZ0NvbG9yLnJnYikgKiBnbF9GcmFnQ29sb3IuYSwgZ2xfRnJhZ0NvbG9yLnJnYiwgMS4wIC0gaW52ZXJ0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBpbnZlcnQ6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludmVydEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gSW52ZXJ0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhJbnZlcnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBpbnZlcnQuIGAxYCB3aWxsIGZ1bGx5IGludmVydCB0aGUgY29sb3JzLCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkludmVydEZpbHRlciNcbiAgICAgKi9cbiAgICBpbnZlcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9hZGp1c3Qvbm9pc2UuanNcbiAqL1xuXG4vKipcbiAqIEEgTm9pc2UgZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gTm9pc2VGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgbm9pc2U7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgcmFuZCh2ZWMyIGNvKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoY28ueHksIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZmxvYXQgZGlmZiA9IChyYW5kKHZUZXh0dXJlQ29vcmQpIC0gMC41KSAqIG5vaXNlO1xcblxcbiAgICBjb2xvci5yICs9IGRpZmY7XFxuICAgIGNvbG9yLmcgKz0gZGlmZjtcXG4gICAgY29sb3IuYiArPSBkaWZmO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBub2lzZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbk5vaXNlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuTm9pc2VGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTm9pc2VGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE5vaXNlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2lzZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIG5vaXNlIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuTm9pc2VGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMC41XG4gICAgICovXG4gICAgbm9pc2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHBpeGVsYXRlIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciAnYmxvY2t5Jy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUGl4ZWxhdGVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZDtcXG5cXG4gICAgdmVjMiBzaXplID0gZGltZW5zaW9ucy54eSAvIHBpeGVsU2l6ZTtcXG5cXG4gICAgdmVjMiBjb2xvciA9IGZsb29yKCAoIHZUZXh0dXJlQ29vcmQgKiBzaXplICkgKSAvIHNpemUgKyBwaXhlbFNpemUvZGltZW5zaW9ucy54eSAqIDAuNTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb2xvcik7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgICB2YWx1ZTogeyB4OiAxMCwgeTogMTAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBpeGVsYXRlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBQaXhlbGF0ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBhIHBvaW50IHRoYXQgZGVzY3JpYmVzIHRoZSBzaXplIG9mIHRoZSBibG9ja3MuXG4gICAgICogeCBpcyB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGFuZCB5IGlzIHRoZSBoZWlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUGl4ZWxhdGVGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEFuIFJHQiBTcGxpdCBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFJHQlNwbGl0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcmVkO1xcbnVuaWZvcm0gdmVjMiBncmVlbjtcXG51bmlmb3JtIHZlYzIgYmx1ZTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yLnIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyByZWQvZGltZW5zaW9ucy54eSkucjtcXG4gICBnbF9GcmFnQ29sb3IuZyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGdyZWVuL2RpbWVuc2lvbnMueHkpLmc7XFxuICAgZ2xfRnJhZ0NvbG9yLmIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBibHVlL2RpbWVuc2lvbnMueHkpLmI7XFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgZ3JlZW46ICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAtMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGJsdWU6ICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IC0yMCB9IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUkdCU3BsaXRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFJHQlNwbGl0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSR0JTcGxpdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBSZWQgY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgcmVkOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yZWQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmVlbiBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmVlbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEJsdWUgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgYXBwbGllcyBhIHNlcGlhIGVmZmVjdCB0byB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2VwaWFGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc2VwaWE7XFxuXFxuY29uc3QgbWF0MyBzZXBpYU1hdHJpeCA9IG1hdDMoMC4zNTg4LCAwLjcwNDQsIDAuMTM2OCwgMC4yOTkwLCAwLjU4NzAsIDAuMTE0MCwgMC4yMzkyLCAwLjQ2OTYsIDAuMDkxMik7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZ2xfRnJhZ0NvbG9yLnJnYiAqIHNlcGlhTWF0cml4LCBzZXBpYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2VwaWE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2VwaWFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TZXBpYUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXBpYUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2VwaWFGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNlcGlhRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgc2VwaWEuIGAxYCB3aWxsIGFwcGx5IHRoZSBmdWxsIHNlcGlhIGVmZmVjdCwgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TZXBpYUZpbHRlciNcbiAgICAgKi9cbiAgICBzZXBpYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA0eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTaG9ja3dhdmVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XFxudW5pZm9ybSB2ZWMzIHBhcmFtczsgLy8gMTAuMCwgMC44LCAwLjFcXG51bmlmb3JtIGZsb2F0IHRpbWU7XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSB2VGV4dHVyZUNvb3JkO1xcbiAgICB2ZWMyIHRleENvb3JkID0gdXY7XFxuXFxuICAgIGZsb2F0IGRpc3QgPSBkaXN0YW5jZSh1diwgY2VudGVyKTtcXG5cXG4gICAgaWYgKCAoZGlzdCA8PSAodGltZSArIHBhcmFtcy56KSkgJiYgKGRpc3QgPj0gKHRpbWUgLSBwYXJhbXMueikpIClcXG4gICAge1xcbiAgICAgICAgZmxvYXQgZGlmZiA9IChkaXN0IC0gdGltZSk7XFxuICAgICAgICBmbG9hdCBwb3dEaWZmID0gMS4wIC0gcG93KGFicyhkaWZmKnBhcmFtcy54KSwgcGFyYW1zLnkpO1xcblxcbiAgICAgICAgZmxvYXQgZGlmZlRpbWUgPSBkaWZmICAqIHBvd0RpZmY7XFxuICAgICAgICB2ZWMyIGRpZmZVViA9IG5vcm1hbGl6ZSh1diAtIGNlbnRlcik7XFxuICAgICAgICB0ZXhDb29yZCA9IHV2ICsgKGRpZmZVViAqIGRpZmZUaW1lKTtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHRleENvb3JkKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBjZW50ZXI6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9LFxuICAgICAgICAgICAgcGFyYW1zOiB7IHR5cGU6ICd2MycsIHZhbHVlOiB7IHg6IDEwLCB5OiAwLjgsIHo6IDAuMSB9IH0sXG4gICAgICAgICAgICB0aW1lOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaG9ja3dhdmVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNob2Nrd2F2ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNlbnRlciBvZiB0aGUgc2hvY2t3YXZlIGluIG5vcm1hbGl6ZWQgc2NyZWVuIGNvb3Jkcy4gVGhhdCBpc1xuICAgICAqICgwLDApIGlzIHRoZSB0b3AtbGVmdCBhbmQgKDEsMSkgaXMgdGhlIGJvdHRvbSByaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgY2VudGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGFyYW1zIG9mIHRoZSBzaG9ja3dhdmUuIFRoZXNlIG1vZGlmeSB0aGUgbG9vayBhbmQgYmVoYXZpb3Igb2ZcbiAgICAgKiB0aGUgc2hvY2t3YXZlIGFzIGl0IHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIHNob2Nrd2F2ZS4gVGhpcyBjb250cm9scyB0aGUgc3BlZWQgYXQgd2hpY2hcbiAgICAgKiB0aGUgc2hvY2t3YXZlIHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHRpbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRBeGlzRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRBeGlzRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGJsdXI7XFxudW5pZm9ybSBmbG9hdCBncmFkaWVudEJsdXI7XFxudW5pZm9ybSB2ZWMyIHN0YXJ0O1xcbnVuaWZvcm0gdmVjMiBlbmQ7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcbnVuaWZvcm0gdmVjMiB0ZXhTaXplO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcbiAgICB2ZWMyIG5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMyKHN0YXJ0LnkgLSBlbmQueSwgZW5kLnggLSBzdGFydC54KSk7XFxuICAgIGZsb2F0IHJhZGl1cyA9IHNtb290aHN0ZXAoMC4wLCAxLjAsIGFicyhkb3QodlRleHR1cmVDb29yZCAqIHRleFNpemUgLSBzdGFydCwgbm9ybWFsKSkgLyBncmFkaWVudEJsdXIpICogYmx1cjtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgLyB0ZXhTaXplICogcGVyY2VudCAqIHJhZGl1cyk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6ICAgICAgICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxMDAgfSxcbiAgICAgICAgICAgIGdyYWRpZW50Qmx1cjogICB7IHR5cGU6ICcxZicsIHZhbHVlOiA2MDAgfSxcbiAgICAgICAgICAgIHN0YXJ0OiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAsICAgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZW5kOiAgICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogNjAwLCAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBkZWx0YTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAzMCwgICB5OiAzMCB9IH0sXG4gICAgICAgICAgICB0ZXhTaXplOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiB3aW5kb3cuaW5uZXJXaWR0aCwgeTogd2luZG93LmlubmVySGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbn1cblxuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICogVGhpcyBpcyBvdmVycmlkZGVuIGluIHRoZSBYIGFuZCBZIGZpbHRlcnMsIGRvZXMgbm90aGluZyBmb3IgdGhpcyBjbGFzcy5cbiAqXG4gKi9cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAwO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IDA7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WUZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnQgRmlsdGVyLiBNYW5hZ2VzIHRoZSBwYXNzIG9mIGJvdGggYSBUaWx0U2hpZnRYRmlsdGVyIGFuZCBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlciA9IG5ldyBUaWx0U2hpZnRYRmlsdGVyKCk7XG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyID0gbmV3IFRpbHRTaGlmdFlGaWx0ZXIoKTtcbn1cblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0RmlsdGVyO1xuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ncmFkaWVudEJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5zdGFydCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5lbmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRYRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gZHggLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR5IC8gZDtcbn07XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFlGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WUZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAtZHkgLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR4IC8gZDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgdHdpc3QgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHR3aXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVHdpc3RGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgLSBvZmZzZXQ7XFxuICAgZmxvYXQgZGlzdCA9IGxlbmd0aChjb29yZCk7XFxuXFxuICAgaWYgKGRpc3QgPCByYWRpdXMpXFxuICAge1xcbiAgICAgICBmbG9hdCByYXRpbyA9IChyYWRpdXMgLSBkaXN0KSAvIHJhZGl1cztcXG4gICAgICAgZmxvYXQgYW5nbGVNb2QgPSByYXRpbyAqIHJhdGlvICogYW5nbGU7XFxuICAgICAgIGZsb2F0IHMgPSBzaW4oYW5nbGVNb2QpO1xcbiAgICAgICBmbG9hdCBjID0gY29zKGFuZ2xlTW9kKTtcXG4gICAgICAgY29vcmQgPSB2ZWMyKGNvb3JkLnggKiBjIC0gY29vcmQueSAqIHMsIGNvb3JkLnggKiBzICsgY29vcmQueSAqIGMpO1xcbiAgIH1cXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkK29mZnNldCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBvZmZzZXQ6ICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuVHdpc3RGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ud2lzdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUd2lzdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVHdpc3RGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFR3aXN0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgZGVzY3JpYmVzIHRoZSB0aGUgb2Zmc2V0IG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcmFkaXVzIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIHJhZGl1czoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBhbmdsZSBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvLyBydW4gdGhlIHBvbHlmaWxsc1xucmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbi8vIGFkZCBjb3JlIHBsdWdpbnMuXG5jb3JlLmV4dHJhcyAgICAgICAgID0gcmVxdWlyZSgnLi9leHRyYXMnKTtcbmNvcmUuZmlsdGVycyAgICAgICAgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcbmNvcmUuaW50ZXJhY3Rpb24gICAgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9uJyk7XG5jb3JlLmxvYWRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9sb2FkZXJzJyk7XG5jb3JlLm1lc2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9tZXNoJyk7XG5jb3JlLmFjY2Vzc2liaWxpdHkgID0gcmVxdWlyZSgnLi9hY2Nlc3NpYmlsaXR5Jyk7XG5cbi8vIGV4cG9ydCBhIHByZW1hZGUgbG9hZGVyIGluc3RhbmNlXG4vKipcbiAqIEEgcHJlbWFkZSBpbnN0YW5jZSBvZiB0aGUgbG9hZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZGVyIHJlc291cmNlcy5cbiAqXG4gKiBAbmFtZSBsb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcHJvcGVydHkge1BJWEkubG9hZGVycy5Mb2FkZXJ9XG4gKi9cbmNvcmUubG9hZGVyID0gbmV3IGNvcmUubG9hZGVycy5Mb2FkZXIoKTtcblxuLy8gbWl4aW4gdGhlIGRlcHJlY2F0aW9uIGZlYXR1cmVzLlxuT2JqZWN0LmFzc2lnbihjb3JlLCByZXF1aXJlKCcuL2RlcHJlY2F0aW9uJykpO1xuXG4vLyBBbHdheXMgZXhwb3J0IHBpeGkgZ2xvYmFsbHkuXG5nbG9iYWwuUElYSSA9IGNvcmU7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBIb2xkcyBhbGwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhbiBJbnRlcmFjdGlvbiBldmVudFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25EYXRhKClcbntcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IHN0b3JlcyB0aGUgZ2xvYmFsIGNvb3JkcyBvZiB3aGVyZSB0aGUgdG91Y2gvbW91c2UgZXZlbnQgaGFwcGVuZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5nbG9iYWwgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBTcHJpdGUgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBhc3NlZCB0byBhbiBldmVudCBoYW5kbGVyLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbmFsIERPTSBFdmVudCB0aGF0IHdhcyBjYXB0dXJlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gbnVsbDtcbn1cblxuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25EYXRhO1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBzcGVjaWZpZWQgZGlzcGxheU9iamVjdCBmb3IgdGhpcyBJbnRlcmFjdGlvbkRhdGFcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSBsb2NhbCBjb29yZHMgb2ZmXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IHBvaW50KVxuICogQHBhcmFtIFtnbG9iYWxQb3NdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHlvdXIgY3VzdG9tIGdsb2JhbCBjb29yZHMsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCB1c2UgdGhlIGN1cnJlbnQgZ2xvYmFsIGNvb3JkcylcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEludGVyYWN0aW9uRGF0YSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgRGlzcGxheU9iamVjdFxuICovXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmdldExvY2FsUG9zaXRpb24gPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcG9pbnQsIGdsb2JhbFBvcylcbntcbiAgICByZXR1cm4gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UoZ2xvYmFsUG9zIHx8IHRoaXMuZ2xvYmFsLCBwb2ludCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgSW50ZXJhY3Rpb25EYXRhID0gcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKTtcblxuLy8gTWl4IGludGVyYWN0aXZlVGFyZ2V0IGludG8gY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZVxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxuKTtcblxuLyoqXG4gKiBUaGUgaW50ZXJhY3Rpb24gbWFuYWdlciBkZWFscyB3aXRoIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuIEFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBpbnRlcmFjdGl2ZVxuICogaWYgaXRzIGludGVyYWN0aXZlIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZVxuICogVGhpcyBtYW5hZ2VyIGFsc28gc3VwcG9ydHMgbXVsdGl0b3VjaC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdD10cnVlXSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBtYW5hZ2VyIGF1dG9tYXRpY2FsbHkgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeT0xMF0ge251bWJlcn0gRnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyLCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgaW50ZXJhY3Rpb24gbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGJlIHByZXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0ID0gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0IDogdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFzIHRoaXMgZnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZCBtb3JlIG9mdGVuLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSA9IG9wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW91c2UgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9XG4gICAgICovXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IGRhdGEgb2JqZWN0IHRvIGhhbmRsZSBhbGwgdGhlIGV2ZW50IHRyYWNraW5nL2Rpc3BhdGNoaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5ldmVudERhdGEgPSB7XG4gICAgICAgIHN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgIGRhdGE6IHRoaXMubW91c2UsXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGxpdHRsZSBpbnRlcmFjdGl2ZURhdGEgcG9vbCAhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YVtdfVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBlbGVtZW50IHRvIGJpbmQgdG8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhhdmUgZXZlbnRzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGRvbSBlbGVtZW50P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcblxuICAgIC8vdGhpcyB3aWxsIG1ha2UgaXQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGJpbmQgYWxsIHRoZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VVcCA9IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IHRoaXMucHJvY2Vzc01vdXNlVXAuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IHRoaXMucHJvY2Vzc01vdXNlRG93bi5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gdGhpcy5wcm9jZXNzTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU91dCA9IHRoaXMub25Nb3VzZU91dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gdGhpcy5vblRvdWNoU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gdGhpcy5wcm9jZXNzVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoRW5kID0gdGhpcy5vblRvdWNoRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSB0aGlzLnByb2Nlc3NUb3VjaEVuZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IHRoaXMub25Ub3VjaE1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSB0aGlzLnByb2Nlc3NUb3VjaE1vdmUuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxhc3QgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNzcyBzdHlsZSBvZiB0aGUgY3Vyc29yIHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9ICdpbmhlcml0JztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNhY2hlZCB2YXJcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcblxuICAgIHRoaXMuc2V0VGFyZ2V0RWxlbWVudCh0aGlzLnJlbmRlcmVyLnZpZXcsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbik7XG59XG5cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UvdG91Y2ggZXZlbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZVxuICogb3RoZXIgRE9NIGVsZW1lbnRzIG9uIHRvcCBvZiB0aGUgcmVuZGVyZXJzIENhbnZhcyBlbGVtZW50LiBXaXRoIHRoaXMgeW91J2xsIGJlIGJhbGUgdG8gZGVsZXRlZ2F0ZVxuICogYW5vdGhlciBET00gZWxlbWVudCB0byByZWNlaXZlIHRob3NlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9IHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUSGUgcmVzb2x1dGlvbiBvZiB0aGUgbmV3IGVsZW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBjYW52YXMpLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXRUYXJnZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJlc29sdXRpb24pXG57XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgdGhlIERPTSBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAgICB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgICB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICAgICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICAgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgICAgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgICAgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgdGhlIERPTSBldmVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICcnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzLlxuICogSW52b2tlZCBieSBhIHRocm90dGxlZCB0aWNrZXIgdXBkYXRlIGZyb21cbiAqIHtAbGluayBQSVhJLnRpY2tlci5zaGFyZWR9LlxuICpcbiAqIEBwYXJhbSBkZWx0YVRpbWUge251bWJlcn1cbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHRoaXMuX2RlbHRhVGltZSArPSBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZGVsdGFUaW1lIDwgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWx0YVRpbWUgPSAwO1xuXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBtb3ZlIHRoZSBtb3VzZSB0aGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gZGZvbmUgdXNpbmcgdGhlIG1vdXNlIG1vdmUhXG4gICAgaWYodGhpcy5kaWRNb3ZlKVxuICAgIHtcbiAgICAgICAgdGhpcy5kaWRNb3ZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ET1xufTtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgZGlzcGxheSBvYmplY3QgaW4gcXVlc3Rpb25cbiAqIEBwYXJhbSBldmVudFN0cmluZyB7c3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGUuZywgbW91c2Vkb3duKVxuICogQHBhcmFtIGV2ZW50RGF0YSB7b2JqZWN0fSB0aGUgZXZlbnQgZGF0YSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApXG57XG4gICAgaWYoIWV2ZW50RGF0YS5zdG9wcGVkKVxuICAgIHtcbiAgICAgICAgZXZlbnREYXRhLnRhcmdldCA9IGRpc3BsYXlPYmplY3Q7XG4gICAgICAgIGV2ZW50RGF0YS50eXBlID0gZXZlbnRTdHJpbmc7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5lbWl0KCBldmVudFN0cmluZywgZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10oIGV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXBzIHggYW5kIHkgY29vcmRzIGZyb20gYSBET00gb2JqZWN0IGFuZCBtYXBzIHRoZW0gY29ycmVjdGx5IHRvIHRoZSBwaXhpIHZpZXcuIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBwb2ludC5cbiAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgdGhlIERPTSBlbGVtZW50IGNvdWxkIGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCBhbnl3aGVyZSBvbiB0aGUgc2NyZWVuLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW5cbiAqIEBwYXJhbSAge251bWJlcn0geCAgICAgdGhlIHggY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICogQHBhcmFtICB7bnVtYmVyfSB5ICAgICB0aGUgeSBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUubWFwUG9zaXRpb25Ub1BvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgeCwgeSApXG57XG4gICAgdmFyIHJlY3QgPSB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBwb2ludC54ID0gKCAoIHggLSByZWN0LmxlZnQgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC53aWR0aCAgLyByZWN0LndpZHRoICApICkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgcG9pbnQueSA9ICggKCB5IC0gcmVjdC50b3AgICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuaGVpZ2h0IC8gcmVjdC5oZWlnaHQgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVzIGEgbmVhdCB3YXkgb2YgY3Jhd2xpbmcgdGhyb3VnaCB0aGUgc2NlbmUgZ3JhcGggYW5kIHJ1bm5pbmcgYSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gYWxsIGludGVyYWN0aXZlIG9iamVjdHMgaXQgZmluZHMuXG4gKiBJdCB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIGhpdCB0ZXN0aW5nIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlIGhpdCBhY3Jvc3MgaW4gdGhlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IGlzIHRlc3RlZCBmb3IgY29sbGlzaW9uXG4gKiBAcGFyYW0gIHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IGRpc3BsYXlPYmplY3QgdGhlIGRpc3BsYXlPYmplY3QgdGhhdCB3aWxsIGJlIGhpdCB0ZXN0IChyZWN1cmNzaXZseSBjcmF3bHMgaXRzIGNoaWxkcmVuKVxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBpbnRlcmFjdGl2ZSBvYmplY3QuIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBoaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtib29sZWFufSBoaXRUZXN0IHRoaXMgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3RzIGluc2lkZSBzaG91bGQgYmUgaGl0IHRlc3QgYWdhaW5zdCB0aGUgcG9pbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiB0aGUgZGlzcGxheU9iamVjdCBoaXQgdGhlIHBvaW50XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0ludGVyYWN0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBkaXNwbGF5T2JqZWN0LCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZSlcbntcbiAgICBpZighZGlzcGxheU9iamVjdCB8fCAhZGlzcGxheU9iamVjdC52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRvb2sgYSBsaXR0bGUgd2hpbGUgdG8gcmV3b3JrIHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5ISBCdXQgbm93IGl0IGlzIGRvbmUgYW5kIG5pY2UgYW5kIG9wdGltaXNlZC4gXl9eXG4gICAgLy8gXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdyBsb29wIHRocm91Z2ggYWxsIG9iamVjdHMgYW5kIHRoZW4gb25seSBoaXQgdGVzdCB0aGUgb2JqZWN0cyBpdCBIQVMgdG8sIG5vdCBhbGwgb2YgdGhlbS4gTVVDSCBmYXN0ZXIuLlxuICAgIC8vIEFuIG9iamVjdCB3aWxsIGJlIGhpdCB0ZXN0IGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICAvLyBcbiAgICAvLyAxOiBJdCBpcyBpbnRlcmFjdGl2ZS5cbiAgICAvLyAyOiBJdCBiZWxvbmdzIHRvIGEgcGFyZW50IHRoYXQgaXMgaW50ZXJhY3RpdmUgQU5EIG9uZSBvZiB0aGUgcGFyZW50cyBjaGlsZHJlbiBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIC8vIFxuICAgIC8vIEFzIGFub3RoZXIgbGl0dGxlIG9wdGltaXNhdGlvbiBvbmNlIGFuIGludGVyYWN0aXZlIG9iamVjdCBoYXMgYmVlbiBoaXQgd2UgY2FuIGNhcnJ5IG9uIHRocm91Z2ggdGhlIHNjZW5lZ3JhcGgsIGJ1dCB3ZSBrbm93IHRoYXQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGhpdHMhIFNvIHdlIGNhbiBhdm9pZCBleHRyYSBoaXQgdGVzdHNcbiAgICAvLyBBIGZpbmFsIG9wdGltaXNhdGlvbiBpcyB0aGF0IGFuIG9iamVjdCBpcyBub3QgaGl0IHRlc3QgZGlyZWN0bHkgaWYgYSBjaGlsZCBoYXMgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICBcbiAgICB2YXIgaGl0ID0gZmFsc2UsXG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gaW50ZXJhY3RpdmUgPSBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlIHx8IGludGVyYWN0aXZlO1xuXG4gICAgLy8gaWYgdGhlIGRpc3BsYXlvYmplY3QgaGFzIGEgaGl0QXJlYSwgdGhlbiBpdCBkb2VzIG5vdCBuZWVkIHRvIGhpdFRlc3QgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAqKiBGUkVFIFRJUCAqKiEgSWYgYW4gb2JqZWN0IGlzIG5vdCBpbnRlcmFjdHRpdmUgb3IgaGFzIG5vIGJ1dHRvbnMgaW4gaXQgKHN1Y2ggYXMgYSBnYW1lIHNjZW5lISkgc2V0IGludGVyYWN0aXZlQ2hpbGRyZW4gdG8gZmFsc2UgZm9yIHRoYXQgZGlzcGxheU9iamVjdC5cbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgcGl4aSB0byBjb21wbGV0bHkgaWdub3JlIGFuZCBieXBhc3MgY2hlY2tpbmcgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmVDaGlsZHJlbilcbiAgICB7ICAgICAgIFxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aC0xOyBpID49IDA7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGltZSB0byBnZXQgcmVjdXJzaXZlLi4gaWYgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpZiBzb210aGluZyBpcyBoaXQuLlxuICAgICAgICAgICAgaWYoIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHBvaW50LCBjaGlsZHJlbltpXSwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmVQYXJlbnQpIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55IG1vcmUgb2JqZWN0cyBpbiB0aGlzIGNvbnRhaW5lciBhcyB3ZSB3ZSBub3cga25vdyB0aGUgcGFyZW50IGhhcyBiZWVuIGhpdFxuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGludGVyYWN0aXZlICwgdGhhdCBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGl0IHdhcyBhY3R1YWxseSBpbnRlcmFjdGl2ZSBhbmQgbm90IGp1c3QgdGhlIGNoaWxkIG9mIGFuIGludGVyYWN0aXZlIG9iamVjdC4gXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnl0aGluZyBlbHNlLiBXZSBzdGlsbCBuZWVkIHRvIHJ1biB0aHJvdWdoIGFsbCBvYmplY3RzLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBoaXQgdGVzdHMuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uaW50ZXJhY3RpdmUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoaXRUZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm8gcG9pbnQgcnVubmluZyB0aGlzIGlmIHRoZSBpdGVtIGlzIG5vdCBpbnRlcmFjdGl2ZSBvciBkb2VzIG5vdCBoYXZlIGFuIGludGVyYWN0aXZlIHBhcmVudC5cbiAgICBpZihpbnRlcmFjdGl2ZSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBoaXQgdGVzdGluZyAoYXMgaW4gd2UgaGF2ZSBubyBoaXQgYW55IG9iamVjdHMgeWV0KVxuICAgICAgICAvLyBXZSBhbHNvIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGl0IHRlc3RpbmcgaWYgb25jZSBvZiB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4gaGFzIGFscmVhZHkgYmVlbiBoaXQhXG4gICAgICAgIGlmKGhpdFRlc3QgJiYgIWhpdClcbiAgICAgICAgeyAgXG4gICAgICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0aGlzLl90ZW1wUG9pbnQpO1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuaGl0QXJlYS5jb250YWlucyggdGhpcy5fdGVtcFBvaW50LngsIHRoaXMuX3RlbXBQb2ludC55ICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnVuYyhkaXNwbGF5T2JqZWN0LCBoaXQpOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIFxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyBwcmVzc2VkIGRvd25cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZURvd24sIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIGRvd24gY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VEb3duID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuICAgIFxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3RbIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bicgXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGRvd24nIDogJ21vdXNlZG93bicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcmVsZWFzZWRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VVcCwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgdXAgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlVXAgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG4gICAgdmFyIGlzRG93biA9ICBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXAnIDogJ21vdXNldXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRjbGljaycgOiAnY2xpY2snLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cG91dHNpZGUnIDogJ21vdXNldXBvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiB0aGUgbW91c2UgbW92aW5nXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmRpZE1vdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU1vdmUsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE8gQlVHIGZvciBwYXJlbnRzIGluZXJhY3RpdmUgb2JqZWN0IChib3JkZXIgb3JkZXIgaXNzdWUpXG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2Vtb3ZlJywgdGhpcy5ldmVudERhdGEpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dChkaXNwbGF5T2JqZWN0LCBoaXQpO1xufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYmVpbmcgbW92ZWQgb3V0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICAvLyBUT0RPIG9wdGltaXplIGJ5IG5vdCBjaGVjayBFVkVSWSBUSU1FISBtYXliZSBoYWxmIGFzIG9mdGVuPyAvL1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgZmFsc2UgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG92ZXIvb3V0IGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgaWYoIWRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5T2JqZWN0LmJ1dHRvbk1vZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gZGlzcGxheU9iamVjdC5kZWZhdWx0Q3Vyc29yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgdGhpcy5ldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgc3RhcnRlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBzdGFydGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG4gICAgICAgIC8vVE9ETyBQT09MXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaFN0YXJ0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoc3RhcnQnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGVuZHMgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggZW5kaW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIC8vVE9ETyB0aGlzIHNob3VsZCBiZSBwYXNzZWQgYWxvbmcuLiBubyBzZXRcbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hFbmQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgZW5kIG9mIGEgdG91Y2ggYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoRW5kID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0YXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgbW92ZWQgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIG1vdmluZyBhY3Jvc3MgdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaE1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaGl0ID0gaGl0O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNobW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogR3JhYnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaEV2ZW50IHtFdmVudERhdGF9IFRoZSB0b3VjaCBldmVudCB3ZSBuZWVkIHRvIHBhaXIgd2l0aCBhbiBpbnRlcmFjdGlvbkRhdGEgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRUb3VjaERhdGEgPSBmdW5jdGlvbiAodG91Y2hFdmVudClcbntcbiAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnBvcCgpO1xuXG4gICAgaWYoIXRvdWNoRGF0YSlcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcbiAgICB9XG5cbiAgICB0b3VjaERhdGEuaWRlbnRpZmllciA9IHRvdWNoRXZlbnQuaWRlbnRpZmllcjtcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdG91Y2hEYXRhLmdsb2JhbCwgdG91Y2hFdmVudC5jbGllbnRYLCB0b3VjaEV2ZW50LmNsaWVudFkgKTtcblxuICAgIGlmKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC54ID0gdG91Y2hEYXRhLmdsb2JhbC54IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnkgPSB0b3VjaERhdGEuZ2xvYmFsLnkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgfVxuXG4gICAgdG91Y2hFdmVudC5nbG9iYWxYID0gdG91Y2hEYXRhLmdsb2JhbC54O1xuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWSA9IHRvdWNoRGF0YS5nbG9iYWwueTtcblxuICAgIHJldHVybiB0b3VjaERhdGE7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hEYXRhIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX0gVGhlIHRvdWNoIGRhdGEgb2JqZWN0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5Ub3VjaERhdGEgPSBmdW5jdGlvbiAoIHRvdWNoRGF0YSApXG57XG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnB1c2goIHRvdWNoRGF0YSApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgaW50ZXJhY3Rpb24gbWFuYWdlclxuICpcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMubW91c2UgPSBudWxsO1xuXG4gICAgdGhpcy5ldmVudERhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZVVwID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gbnVsbDtcblxuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaEVuZCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMuX3RlbXBQb2ludCA9IG51bGw7XG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGludGVyYWN0aW9ucyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSW50ZXJhY3Rpb25EYXRhOiAgICByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpLFxuICAgIEludGVyYWN0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9JbnRlcmFjdGlvbk1hbmFnZXInKSxcbiAgICBpbnRlcmFjdGl2ZVRhcmdldDogIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxufTtcbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgaW50ZXJhY3RpdmUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmludGVyYWN0aW9uLmludGVyYWN0aXZlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBpbnRlcmFjdGl2ZVRhcmdldCA9IHtcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGJ1dHRvbk1vZGU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmVDaGlsZHJlbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGRlZmF1bHRDdXJzb3I6ICdwb2ludGVyJyxcblxuICAgIC8vIHNvbWUgaW50ZXJuYWwgY2hlY2tzLi5cblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb3ZlcjogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90b3VjaERvd246IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyYWN0aXZlVGFyZ2V0O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuLi9leHRyYXMnKSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5cbmZ1bmN0aW9uIHBhcnNlKHJlc291cmNlLCB0ZXh0dXJlKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgaW5mbyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXTtcbiAgICB2YXIgY29tbW9uID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XG5cbiAgICBkYXRhLmZvbnQgPSBpbmZvLmdldEF0dHJpYnV0ZSgnZmFjZScpO1xuICAgIGRhdGEuc2l6ZSA9IHBhcnNlSW50KGluZm8uZ2V0QXR0cmlidXRlKCdzaXplJyksIDEwKTtcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBwYXJzZUludChjb21tb24uZ2V0QXR0cmlidXRlKCdsaW5lSGVpZ2h0JyksIDEwKTtcbiAgICBkYXRhLmNoYXJzID0ge307XG5cbiAgICAvL3BhcnNlIGxldHRlcnNcbiAgICB2YXIgbGV0dGVycyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NoYXInKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdpZCcpLCAxMCk7XG5cbiAgICAgICAgdmFyIHRleHR1cmVSZWN0ID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3gnKSwgMTApICsgdGV4dHVyZS5mcmFtZS54LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3knKSwgMTApICsgdGV4dHVyZS5mcmFtZS55LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSwgMTApXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICB4T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneG9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB5T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneW9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB4QWR2YW5jZTogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hhZHZhbmNlJyksIDEwKSxcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9LFxuICAgICAgICAgICAgdGV4dHVyZTogbmV3IGNvcmUuVGV4dHVyZSh0ZXh0dXJlLmJhc2VUZXh0dXJlLCB0ZXh0dXJlUmVjdClcblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vcGFyc2Uga2VybmluZ3NcbiAgICB2YXIga2VybmluZ3MgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXJuaW5nJyk7XG4gICAgZm9yIChpID0gMDsgaSA8IGtlcm5pbmdzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdmaXJzdCcpLCAxMCk7XG4gICAgICAgIHZhciBzZWNvbmQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ3NlY29uZCcpLCAxMCk7XG4gICAgICAgIHZhciBhbW91bnQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2Ftb3VudCcpLCAxMCk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tzZWNvbmRdLmtlcm5pbmdbZmlyc3RdID0gYW1vdW50O1xuICAgIH1cblxuICAgIHJlc291cmNlLmJpdG1hcEZvbnQgPSBkYXRhO1xuXG4gICAgLy8gSSdtIGxlYXZpbmcgdGhpcyBhcyBhIHRlbXBvcmFyeSBmaXggc28gd2UgY2FuIHRlc3QgdGhlIGJpdG1hcCBmb250cyBpbiB2M1xuICAgIC8vIGJ1dCBpdCdzIHZlcnkgbGlrZWx5IHRvIGNoYW5nZVxuICAgIGV4dHJhcy5CaXRtYXBUZXh0LmZvbnRzW2RhdGEuZm9udF0gPSBkYXRhO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhIG9yIG5vdCB4bWwgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzWG1sKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBpZiBub3QgYml0bWFwIGZvbnQgZGF0YSwgdXNpbmcgc29tZSBzaWxseSBkdWNrLXR5cGluZ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF0uZ2V0QXR0cmlidXRlKCdmYWNlJykgPT09IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4bWxVcmwgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsKTtcblxuICAgICAgICBpZiAoeG1sVXJsID09PSAnLicpIHtcbiAgICAgICAgICAgIHhtbFVybCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmFzZVVybCAmJiB4bWxVcmwpIHtcbiAgICAgICAgICAgIC8vIGlmIGJhc2V1cmwgaGFzIGEgdHJhaWxpbmcgc2xhc2ggdGhlbiBhZGQgb25lIHRvIHhtbFVybCBzbyB0aGUgcmVwbGFjZSB3b3JrcyBiZWxvd1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVVybC5jaGFyQXQodGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEpID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYmFzZVVybCBmcm9tIHhtbFVybFxuICAgICAgICAgICAgeG1sVXJsID0geG1sVXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiB4bWxVcmwgbm93LCBpdCBuZWVkcyBhIHRyYWlsaW5nIHNsYXNoLiBFbnN1cmUgdGhhdCBpdCBkb2VzIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZW1wdHkuXG4gICAgICAgIGlmICh4bWxVcmwgJiYgeG1sVXJsLmNoYXJBdCh4bWxVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4dHVyZVVybCA9IHhtbFVybCArIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKVswXS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKTtcbiAgICAgICAgaWYgKGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKSB7XG4gICAgICAgICAgICAvL3JldXNlIGV4aXN0aW5nIHRleHR1cmVcbiAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBsb2FkIHRoZSB0ZXh0dXJlIGZvciB0aGUgZm9udFxuICAgICAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCB0ZXh0dXJlVXJsLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCByZXMudGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGxvYWRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmxvYWRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTG9hZGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlcicpLFxuXG4gICAgLy8gcGFyc2Vyc1xuICAgIGJpdG1hcEZvbnRQYXJzZXI6ICAgcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXI6ICByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgdGV4dHVyZVBhcnNlcjogICAgICByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBSZXNvdXJjZTogICAgICAgICAgIHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlXG59O1xuIiwidmFyIFJlc291cmNlTG9hZGVyID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJyksXG4gICAgdGV4dHVyZVBhcnNlciA9IHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyID0gcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIGJpdG1hcEZvbnRQYXJzZXIgPSByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKTtcblxuLyoqXG4gKlxuICogVGhlIG5ldyBsb2FkZXIsIGV4dGVuZHMgUmVzb3VyY2UgTG9hZGVyIGJ5IENoYWQgRW5nbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2VuZ2xlcmNqL3Jlc291cmNlLWxvYWRlclxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbG9hZGVyID0gUElYSS5sb2FkZXI7IC8vIHBpeGkgZXhwb3NlcyBhIHByZW1hZGUgaW5zdGFuY2UgZm9yIHlvdSB0byB1c2UuXG4gKiAvL29yXG4gKiB2YXIgbG9hZGVyID0gbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIoKTsgLy8geW91IGNhbiBhbHNvIGNyZWF0ZSB5b3VyIG93biBpZiB5b3Ugd2FudFxuICpcbiAqIGxvYWRlci5hZGQoJ2J1bm55JyxcImRhdGEvYnVubnkucG5nXCIpO1xuICpcbiAqIGxvYWRlci5vbmNlKCdjb21wbGV0ZScsb25Bc3NldHNMb2FkZWQpO1xuICpcbiAqIGxvYWRlci5sb2FkKCk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuUmVzb3VyY2VMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmxvYWRlcnNcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpXG57XG4gICAgUmVzb3VyY2VMb2FkZXIuY2FsbCh0aGlzLCBiYXNlVXJsLCBjb25jdXJyZW5jeSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IExvYWRlci5fcGl4aU1pZGRsZXdhcmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy51c2UoTG9hZGVyLl9waXhpTWlkZGxld2FyZVtpXSgpKTtcbiAgICB9XG59XG5cbkxvYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuTG9hZGVyLl9waXhpTWlkZGxld2FyZSA9IFtcbiAgICAvLyBwYXJzZSBhbnkgYmxvYiBpbnRvIG1vcmUgdXNhYmxlIG9iamVjdHMgKGUuZy4gSW1hZ2UpXG4gICAgUmVzb3VyY2VMb2FkZXIubWlkZGxld2FyZS5wYXJzaW5nLmJsb2IsXG4gICAgLy8gcGFyc2UgYW55IEltYWdlIG9iamVjdHMgaW50byB0ZXh0dXJlc1xuICAgIHRleHR1cmVQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIHNwcml0ZXNoZWV0UGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBiaXRtYXBGb250UGFyc2VyXG5dO1xuXG5Mb2FkZXIuYWRkUGl4aU1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLnB1c2goZm4pO1xufTtcblxuLy8gQWRkIGN1c3RvbSBleHRlbnRpb25zXG52YXIgUmVzb3VyY2UgPSBSZXNvdXJjZUxvYWRlci5SZXNvdXJjZTtcblxuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSgnZm50JywgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpO1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSwgaXRzIG5vdCBqc29uLCBvciBpdCBpc24ndCBzcHJpdGVzaGVldCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNKc29uIHx8ICFyZXNvdXJjZS5kYXRhLmZyYW1lcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByb3V0ZSA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKSk7XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybCggcmVzb3VyY2UudXJsICk7XG5cbiAgICAgICAgLy8gbG9hZCB0aGUgaW1hZ2UgZm9yIHRoaXMgc2hlZXRcbiAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCByb3V0ZSArICcvJyArIHJlc291cmNlLmRhdGEubWV0YS5pbWFnZSwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzID0ge307XG5cbiAgICAgICAgICAgIHZhciBmcmFtZXMgPSByZXNvdXJjZS5kYXRhLmZyYW1lcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmcmFtZXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBmcmFtZXNbaV0uZnJhbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVjdClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaW0gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC5oLCByZWN0LncpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC53LCByZWN0LmgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS50cmltbWVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmltID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnggLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnkgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLncgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLmggLyByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsaXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQhXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBzaXplLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUueSAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoIC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0IC89IHJlc29sdXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXNbaV0gPSBuZXcgY29yZS5UZXh0dXJlKHJlcy50ZXh0dXJlLmJhc2VUZXh0dXJlLCBzaXplLCBzaXplLmNsb25lKCksIHRyaW0sIGZyYW1lc1tpXS5yb3RhdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbaV0gPSByZXNvdXJjZS50ZXh0dXJlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZSBpZiB0aGUgZGF0YSBpcyBhbiBJbWFnZSBvYmplY3RcbiAgICAgICAgaWYgKHJlc291cmNlLmRhdGEgJiYgcmVzb3VyY2UuaXNJbWFnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGJhc2VUZXh0dXJlID0gbmV3IGNvcmUuQmFzZVRleHR1cmUocmVzb3VyY2UuZGF0YSwgbnVsbCwgY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwocmVzb3VyY2UudXJsKSk7XG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IHJlc291cmNlLnVybDtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmUgPSBuZXcgY29yZS5UZXh0dXJlKGJhc2VUZXh0dXJlKTtcbiAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1Y250aW9uc1xuICAgICAgICAgICAgY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSBiYXNlVGV4dHVyZTtcbiAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSByZXNvdXJjZS50ZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICB0ZW1wUG9seWdvbiA9IG5ldyBjb3JlLlBvbHlnb24oKTtcblxuLyoqXG4gKiBCYXNlIG1lc2ggY2xhc3NcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRvIHVzZVxuICogQHBhcmFtIFt2ZXJ0aWNlc10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdmVydGljZXNcbiAqIEBwYXJhbSBbdXZzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB1dnNcbiAqIEBwYXJhbSBbaW5kaWNlc10ge1VpbnQxNkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBpbmRpY2VzXG4gKiBAcGFyYW0gW2RyYXdNb2RlXSB7bnVtYmVyfSB0aGUgZHJhd01vZGUsIGNhbiBiZSBhbnkgb2YgdGhlIE1lc2guRFJBV19NT0RFUyBjb25zdHNcbiAqL1xuZnVuY3Rpb24gTWVzaCh0ZXh0dXJlLCB2ZXJ0aWNlcywgdXZzLCBpbmRpY2VzLCBkcmF3TW9kZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gdXZzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEsIDAsXG4gICAgICAgIDEsIDEsXG4gICAgICAgIDAsIDFdKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEwMCwgMCxcbiAgICAgICAgMTAwLCAxMDAsXG4gICAgICAgIDAsIDEwMF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICAvLyAgVE9ETyBhdXRvIGdlbmVyYXRlIHRoaXMgYmFzZWQgb24gZHJhdyBtb2RlIVxuICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXMgfHwgbmV3IFVpbnQxNkFycmF5KFswLCAxLCAzLCAyXSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBNZXNoIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gU2V0IHRvIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVtb3ZlIGFueSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRyaWFuZ2xlcyBpbiBjYW52YXMgbW9kZSBhcmUgYXV0b21hdGljYWxseSBhbnRpYWxpYXNlZCwgdXNlIHRoaXMgdmFsdWUgdG8gZm9yY2UgdHJpYW5nbGVzIHRvIG92ZXJsYXAgYSBiaXQgd2l0aCBlYWNoIG90aGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2F5IHRoZSBNZXNoIHNob3VsZCBiZSBkcmF3biwgY2FuIGJlIGFueSBvZiB0aGUge0BsaW5rIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVN9IGNvbnN0c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuZHJhd01vZGUgPSBkcmF3TW9kZSB8fCBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSDtcblxuICAgIC8vIHJ1biB0ZXh0dXJlIHNldHRlcjtcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBtZXNoIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5NZXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2g7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2g7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc2gucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkubWVzaC5NZXNoI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5tZXNoKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLm1lc2gucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4IHwgMCwgdHJhbnNmb3JtLnR5IHwgMCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHgsIHRyYW5zZm9ybS50eSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoKGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMoY29udGV4dCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIFRyaWFuZ2xlIE1lc2ggbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2ggPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoIC8gMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkgKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgsIChpbmRleCArIDIpLCAoaW5kZXggKyA0KSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIHRyaWFuZ2xlIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDMpXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXgwID0gaW5kaWNlc1tpXSAqIDIsIGluZGV4MSA9IGluZGljZXNbaSArIDFdICogMiwgaW5kZXgyID0gaW5kaWNlc1tpICsgMl0gKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4Mik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyBvbmUgb2YgdGhlIHRyaWFuZ2xlcyB0aGF0IGZvcm0gdGhpcyBNZXNoXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdmVydGljZXMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHZlcnRpY2VzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gdXZzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB1dnMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSBpbmRleDAge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDEge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgyIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlID0gZnVuY3Rpb24gKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpXG57XG4gICAgdmFyIHRleHR1cmVTb3VyY2UgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZTtcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aDtcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXgwXSwgeDEgPSB2ZXJ0aWNlc1tpbmRleDFdLCB4MiA9IHZlcnRpY2VzW2luZGV4Ml07XG4gICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgwICsgMV0sIHkxID0gdmVydGljZXNbaW5kZXgxICsgMV0sIHkyID0gdmVydGljZXNbaW5kZXgyICsgMV07XG5cbiAgICB2YXIgdTAgPSB1dnNbaW5kZXgwXSAqIHRleHR1cmVXaWR0aCwgdTEgPSB1dnNbaW5kZXgxXSAqIHRleHR1cmVXaWR0aCwgdTIgPSB1dnNbaW5kZXgyXSAqIHRleHR1cmVXaWR0aDtcbiAgICB2YXIgdjAgPSB1dnNbaW5kZXgwICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MSA9IHV2c1tpbmRleDEgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYyID0gdXZzW2luZGV4MiArIDFdICogdGV4dHVyZUhlaWdodDtcblxuICAgIGlmICh0aGlzLmNhbnZhc1BhZGRpbmcgPiAwKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmdYID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgcGFkZGluZ1kgPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciBjZW50ZXJYID0gKHgwICsgeDEgKyB4MikgLyAzO1xuICAgICAgICB2YXIgY2VudGVyWSA9ICh5MCArIHkxICsgeTIpIC8gMztcblxuICAgICAgICB2YXIgbm9ybVggPSB4MCAtIGNlbnRlclg7XG4gICAgICAgIHZhciBub3JtWSA9IHkwIC0gY2VudGVyWTtcblxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgwID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkwID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgLy9cblxuICAgICAgICBub3JtWCA9IHgxIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MSAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgxID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkxID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgbm9ybVggPSB4MiAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTIgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MiA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MiA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cblxuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGNvbnRleHQuY2xpcCgpO1xuXG4gICAgLy8gQ29tcHV0ZSBtYXRyaXggdHJhbnNmb3JtXG4gICAgdmFyIGRlbHRhID0gICh1MCAqIHYxKSAgICAgICsgKHYwICogdTIpICAgICAgKyAodTEgKiB2MikgICAgICAtICh2MSAqIHUyKSAgICAgIC0gKHYwICogdTEpICAgICAgLSAodTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQSA9ICh4MCAqIHYxKSAgICAgICsgKHYwICogeDIpICAgICAgKyAoeDEgKiB2MikgICAgICAtICh2MSAqIHgyKSAgICAgIC0gKHYwICogeDEpICAgICAgLSAoeDAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQiA9ICh1MCAqIHgxKSAgICAgICsgKHgwICogdTIpICAgICAgKyAodTEgKiB4MikgICAgICAtICh4MSAqIHUyKSAgICAgIC0gKHgwICogdTEpICAgICAgLSAodTAgKiB4Mik7XG4gICAgdmFyIGRlbHRhQyA9ICh1MCAqIHYxICogeDIpICsgKHYwICogeDEgKiB1MikgKyAoeDAgKiB1MSAqIHYyKSAtICh4MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB4MikgLSAodTAgKiB4MSAqIHYyKTtcbiAgICB2YXIgZGVsdGFEID0gKHkwICogdjEpICAgICAgKyAodjAgKiB5MikgICAgICArICh5MSAqIHYyKSAgICAgIC0gKHYxICogeTIpICAgICAgLSAodjAgKiB5MSkgICAgICAtICh5MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFFID0gKHUwICogeTEpICAgICAgKyAoeTAgKiB1MikgICAgICArICh1MSAqIHkyKSAgICAgIC0gKHkxICogdTIpICAgICAgLSAoeTAgKiB1MSkgICAgICAtICh1MCAqIHkyKTtcbiAgICB2YXIgZGVsdGFGID0gKHUwICogdjEgKiB5MikgKyAodjAgKiB5MSAqIHUyKSArICh5MCAqIHUxICogdjIpIC0gKHkwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHkyKSAtICh1MCAqIHkxICogdjIpO1xuXG4gICAgY29udGV4dC50cmFuc2Zvcm0oZGVsdGFBIC8gZGVsdGEsIGRlbHRhRCAvIGRlbHRhLFxuICAgICAgICBkZWx0YUIgLyBkZWx0YSwgZGVsdGFFIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQyAvIGRlbHRhLCBkZWx0YUYgLyBkZWx0YSk7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlU291cmNlLCAwLCAwKTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBmbGF0IE1lc2hcbiAqXG4gKiBAcGFyYW0gTWVzaCB7UElYSS5tZXNoLk1lc2h9IFRoZSBNZXNoIHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUucmVuZGVyTWVzaEZsYXQgPSBmdW5jdGlvbiAoTWVzaClcbntcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICB2YXIgdmVydGljZXMgPSBNZXNoLnZlcnRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aC8yO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgZm9yICh2YXIgaT0xOyBpIDwgbGVuZ3RoLTI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkqMjtcblxuICAgICAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleF0sICAgeDEgPSB2ZXJ0aWNlc1tpbmRleCsyXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleCs0XTtcbiAgICAgICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgrMV0sIHkxID0gdmVydGljZXNbaW5kZXgrM10sIHkyID0gdmVydGljZXNbaW5kZXgrNV07XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVwZGF0ZUZyYW1lID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBtZXNoIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5NZXNoLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICghdGhpcy5fY3VycmVudEJvdW5kcykge1xuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1pblkgPSBJbmZpbml0eTtcblxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IG47IGkgKz0gMikge1xuICAgICAgICAgICAgdmFyIHJhd1ggPSB2ZXJ0aWNlc1tpXSwgcmF3WSA9IHZlcnRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciB4ID0gKGEgKiByYXdYKSArIChjICogcmF3WSkgKyB0eDtcbiAgICAgICAgICAgIHZhciB5ID0gKGQgKiByYXdZKSArIChiICogcmF3WCkgKyB0eTtcblxuICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcblxuICAgICAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG4gICAgICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5YID09PSAtSW5maW5pdHkgfHwgbWF4WSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIG1lc2guIFdvcmtzIG9ubHkgZm9yIFRSSUFOR0xFX01FU0hcbiAqXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4gKi9cbk1lc2gucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKSB7XG4gICAgaWYgKCF0aGlzLmdldEJvdW5kcygpLmNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgcG9pbnRzID0gdGVtcFBvbHlnb24ucG9pbnRzO1xuICAgIHZhciBpLCBsZW47XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUykge1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICAgICAgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgLy9UT0RPOiBpbmxpbmUgdGhpcy5cbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Mykge1xuICAgICAgICAgICAgdmFyIGluZDAgPSBpbmRpY2VzW2ldKjIsIGluZDEgPSBpbmRpY2VzW2krMV0qMiwgaW5kMiA9IGluZGljZXNbaSsyXSoyO1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaW5kMF07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpbmQwKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaW5kMV07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpbmQxKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaW5kMl07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpbmQyKzFdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Nikge1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaSsyXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2krM107XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpKzRdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaSs1XTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEaWZmZXJlbnQgZHJhd2luZyBidWZmZXIgbW9kZXMgc3VwcG9ydGVkXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSFxuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gKi9cbk1lc2guRFJBV19NT0RFUyA9IHtcbiAgICBUUklBTkdMRV9NRVNIOiAwLFxuICAgIFRSSUFOR0xFUzogMVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG5cbi8qKlxuICogVGhlIFBsYW5lIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIFBsYW5lID0gbmV3IFBJWEkuUGxhbmUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgUGxhbmUuXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNYIC0gVGhlIG51bWJlciBveCB4IHNlZ21lbnRzXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNZIC0gVGhlIG51bWJlciBvZiB5IHNlZ21lbnRzXG4gKlxuICovXG5mdW5jdGlvbiBQbGFuZSh0ZXh0dXJlLCBzZWdtZW50c1gsIHNlZ21lbnRzWSlcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgUGxhbmUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWdtZW50c1ggPSAgc2VnbWVudHNYIHx8IDEwO1xuICAgIHRoaXMuc2VnbWVudHNZID0gc2VnbWVudHNZIHx8IDEwO1xuXG4gICAgdGhpcy5kcmF3TW9kZSA9IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVM7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUGxhbmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKTtcblBsYW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsYW5lO1xubW9kdWxlLmV4cG9ydHMgPSBQbGFuZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblBsYW5lLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciB0b3RhbCA9IHRoaXMuc2VnbWVudHNYICogdGhpcy5zZWdtZW50c1k7XG4gICAgdmFyIHZlcnRzID0gW107XG4gICAgdmFyIGNvbG9ycyA9IFtdO1xuICAgIHZhciB1dnMgPSBbXTtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuXG4gIC8vICB0ZXh0dXJlLndpZHRoID0gODAwIHRleHR1cmUud2lkdGggfHwgODAwO1xuIC8vICAgdGV4dHVyZS5oZWlnaHQgPSA4MDAvL3RleHR1cmUuaGVpZ2h0IHx8IDgwMDtcblxuICAgIHZhciBzZWdtZW50c1hTdWIgPSB0aGlzLnNlZ21lbnRzWCAtIDE7XG4gICAgdmFyIHNlZ21lbnRzWVN1YiA9IHRoaXMuc2VnbWVudHNZIC0gMTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB2YXIgc2l6ZVggPSB0ZXh0dXJlLndpZHRoIC8gc2VnbWVudHNYU3ViO1xuICAgIHZhciBzaXplWSA9IHRleHR1cmUuaGVpZ2h0IC8gc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcblxuICAgICAgICB2YXIgeCA9IChpICUgdGhpcy5zZWdtZW50c1gpO1xuICAgICAgICB2YXIgeSA9ICggKGkgLyB0aGlzLnNlZ21lbnRzWCApIHwgMCApO1xuXG5cbiAgICAgICAgdmVydHMucHVzaCgoeCAqIHNpemVYKSxcbiAgICAgICAgICAgICAgICAgICAoeSAqIHNpemVZKSk7XG5cbiAgICAgICAgLy8gdGhpcyB3b3JrcyBmb3IgcmVjdGFuZ3VsYXIgdGV4dHVyZXMuIFxuICAgICAgICB1dnMucHVzaCh0ZXh0dXJlLl91dnMueDAgKyAodGV4dHVyZS5fdXZzLngxIC0gdGV4dHVyZS5fdXZzLngwKSAqICh4IC8gKHRoaXMuc2VnbWVudHNYLTEpKSwgdGV4dHVyZS5fdXZzLnkwICsgKHRleHR1cmUuX3V2cy55My10ZXh0dXJlLl91dnMueTApICogKHkvICh0aGlzLnNlZ21lbnRzWS0xKSkpO1xuICAgICAgfVxuXG4gICAgLy8gIGNvbnNcblxuICAgIHZhciB0b3RhbFN1YiA9IHNlZ21lbnRzWFN1YiAqIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFN1YjsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHhwb3MgPSBpICUgc2VnbWVudHNYU3ViO1xuICAgICAgICB2YXIgeXBvcyA9IChpIC8gc2VnbWVudHNYU3ViICkgfCAwO1xuXG5cbiAgICAgICAgdmFyICB2YWx1ZSA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTIgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuICAgICAgICB2YXIgIHZhbHVlMyA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWU0ID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMyk7XG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZTIsIHZhbHVlNCwgdmFsdWUzKTtcbiAgICB9XG5cblxuICAgIC8vY29uc29sZS5sb2coaW5kaWNlcylcbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0cyk7XG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHV2cyk7XG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvbG9ycyk7XG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBsYW5lLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUGxhbmUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSByb3BlIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIHJvcGUgPSBuZXcgUElYSS5Sb3BlKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIHJvcGUuXG4gKiBAcGFyYW0ge1BJWEkuUG9pbnRbXX0gcG9pbnRzIC0gQW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuUG9pbnR9IG9iamVjdHMgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAqXG4gKi9cbmZ1bmN0aW9uIFJvcGUodGV4dHVyZSwgcG9pbnRzKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfSBBbiBhcnJheSBvZiBwb2ludHMgdGhhdCBkZXRlcm1pbmUgdGhlIHJvcGVcbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBvZiB2ZXJ0aWNlcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IFRoZSBXZWJHTCBVdnMgb2YgdGhlIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBjb21wb25lbnRzXG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSByb3BlIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICAgdGhpcy5yZWZyZXNoKCk7XG59XG5cblxuLy8gY29uc3RydWN0b3JcblJvcGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNZXNoLnByb3RvdHlwZSk7XG5Sb3BlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvcGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvcGU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5Sb3BlLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICAvLyBpZiB0b28gbGl0dGxlIHBvaW50cywgb3IgdGV4dHVyZSBoYXNuJ3QgZ290IFVWcyBzZXQgeWV0IGp1c3QgbW92ZSBvbi5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEgfHwgIXRoaXMuX3RleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cbiAgICB2YXIgdGV4dHVyZVV2cyA9IHRoaXMuX3RleHR1cmUuX3V2cztcbiAgICB2YXIgb2Zmc2V0ID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MCk7XG4gICAgdmFyIGZhY3RvciA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDIgLSB0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkyIC0gdGV4dHVyZVV2cy55MCk7XG5cbiAgICB1dnNbMF0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzFdID0gMCArIG9mZnNldC55O1xuICAgIHV2c1syXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgIGNvbG9yc1swXSA9IDE7XG4gICAgY29sb3JzWzFdID0gMTtcblxuICAgIGluZGljZXNbMF0gPSAwO1xuICAgIGluZGljZXNbMV0gPSAxO1xuXG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCBhbW91bnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcbiAgICAgICAgLy8gdGltZSB0byBkbyBzb21lIHNtYXJ0IGRyYXdpbmchXG4gICAgICAgIGFtb3VudCA9IGkgLyAodG90YWwtMSk7XG5cbiAgICAgICAgdXZzW2luZGV4XSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCsxXSA9IDAgKyBvZmZzZXQueTtcblxuICAgICAgICB1dnNbaW5kZXgrMl0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBjb2xvcnNbaW5kZXhdID0gMTtcbiAgICAgICAgY29sb3JzW2luZGV4KzFdID0gMTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGluZGV4O1xuICAgICAgICBpbmRpY2VzW2luZGV4ICsgMV0gPSBpbmRleCArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFJvcGUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9pbnQgPSBwb2ludHNbMF07XG4gICAgdmFyIG5leHRQb2ludDtcbiAgICB2YXIgcGVycFggPSAwO1xuICAgIHZhciBwZXJwWSA9IDA7XG5cbiAgICAvLyB0aGlzLmNvdW50IC09IDAuMjtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCByYXRpbywgcGVycExlbmd0aCwgbnVtO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG5cbiAgICAgICAgaWYgKGkgPCBwb2ludHMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50c1tpKzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwWSA9IC0obmV4dFBvaW50LnggLSBsYXN0UG9pbnQueCk7XG4gICAgICAgIHBlcnBYID0gbmV4dFBvaW50LnkgLSBsYXN0UG9pbnQueTtcblxuICAgICAgICByYXRpbyA9ICgxIC0gKGkgLyAodG90YWwtMSkpKSAqIDEwO1xuXG4gICAgICAgIGlmIChyYXRpbyA+IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhdGlvID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBMZW5ndGggPSBNYXRoLnNxcnQocGVycFggKiBwZXJwWCArIHBlcnBZICogcGVycFkpO1xuICAgICAgICBudW0gPSB0aGlzLl90ZXh0dXJlLmhlaWdodCAvIDI7IC8vKDIwICsgTWF0aC5hYnMoTWF0aC5zaW4oKGkgKyB0aGlzLmNvdW50KSAqIDAuMykgKiA1MCkgKSogcmF0aW87XG4gICAgICAgIHBlcnBYIC89IHBlcnBMZW5ndGg7XG4gICAgICAgIHBlcnBZIC89IHBlcnBMZW5ndGg7XG5cbiAgICAgICAgcGVycFggKj0gbnVtO1xuICAgICAgICBwZXJwWSAqPSBudW07XG5cbiAgICAgICAgdmVydGljZXNbaW5kZXhdID0gcG9pbnQueCArIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsxXSA9IHBvaW50LnkgKyBwZXJwWTtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMl0gPSBwb2ludC54IC0gcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzNdID0gcG9pbnQueSAtIHBlcnBZO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IHBvaW50O1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5tZXNoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1lc2g6ICAgICAgICAgICByZXF1aXJlKCcuL01lc2gnKSxcbiAgICBQbGFuZTogICAgICAgICAgIHJlcXVpcmUoJy4vUGxhbmUnKSxcbiAgICBSb3BlOiAgICAgICAgICAgcmVxdWlyZSgnLi9Sb3BlJyksXG4gICAgTWVzaFJlbmRlcmVyOiAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFJlbmRlcmVyJyksXG4gICAgTWVzaFNoYWRlcjogICAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFNoYWRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgTWVzaCA9IHJlcXVpcmUoJy4uL01lc2gnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBNZXNoUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL01lc2hSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDE1MDAwKTtcblxuICAgIC8vVE9ETyB0aGlzIGNvdWxkIGJlIGEgc2luZ2xlIGJ1ZmZlciBzaGFyZWQgYW1vbmdzdCBhbGwgcmVuZGVyZXJzIGFzIHdlIHJldXNlIHRoaXMgc2V0IHVwIGluIG1vc3QgcmVuZGVyZXJzXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCAxNTAwMDsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59XG5cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hSZW5kZXJlcjtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoJywgTWVzaFJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIGlmKCFtZXNoLl92ZXJ0ZXhCdWZmZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9pbml0V2ViR0wobWVzaCk7XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcixcbiAgICAgICAgZ2wgPSByZW5kZXJlci5nbCxcbiAgICAgICAgdGV4dHVyZSA9IG1lc2guX3RleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIHNoYWRlciA9IG1lc2guc2hhZGVyOy8vIHx8IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuXG4gICAgdmFyIGRyYXdNb2RlID0gbWVzaC5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0ggPyBnbC5UUklBTkdMRV9TVFJJUCA6IGdsLlRSSUFOR0xFUztcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKG1lc2guYmxlbmRNb2RlKTtcblxuICAgIC8vVE9ETyBjYWNoZSBjdXN0b20gc3RhdGUuLlxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHNoYWRlci5zaGFkZXJzW2dsLmlkXSB8fCBzaGFkZXIuZ2V0U2hhZGVyKHJlbmRlcmVyKTsvLyA6IHNoYWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXgudmFsdWUgPSBtZXNoLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXgudmFsdWUgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSBtZXNoLndvcmxkQWxwaGE7XG5cbiAgICBzaGFkZXIuc3luY1VuaWZvcm1zKCk7XG5cbiAgICBpZiAoIW1lc2guZGlydHkpXG4gICAge1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgbWVzaC52ZXJ0aWNlcyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG1lc2guaW5kaWNlcyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgbWVzaC5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb250IG5lZWQgdG8gdXBsb2FkIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgfVxuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGRyYXdNb2RlLCBtZXNoLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG5cbn07XG5cbi8qKlxuICogUHJlcGFyZXMgYWxsIHRoZSBidWZmZXJzIHRvIHJlbmRlciB0aGlzIG1lc2hcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuX2luaXRXZWJHTCA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIC8vIGJ1aWxkIHRoZSBzdHJpcCFcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgbWVzaC5fdmVydGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5faW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl91dkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG5cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICBpZihtZXNoLmNvbG9ycyl7XG4gICAgICAgIG1lc2guX2NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl9jb2xvckJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLmNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbn07XG5cblxuLyoqXG4gKiBFbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IG1lc2ggcmVuZGVyZXIuXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBcblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBNZXNoIHJlbmRlcmVyXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgV2ViR0wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgY29yZS5TaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogYWxwaGEgOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVZlcnRleFBvc2l0aW9uOjAsXG4gICAgICAgICAgICBhVGV4dHVyZUNvb3JkOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cbk1lc2hTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNoYWRlci5wcm90b3R5cGUpO1xuTWVzaFNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoU2hhZGVyO1xuXG5jb3JlLlNoYWRlck1hbmFnZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2hTaGFkZXInLCBNZXNoU2hhZGVyKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3NpZ25cblxuaWYgKCFNYXRoLnNpZ24pXG57XG4gICAgTWF0aC5zaWduID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCA9ICt4O1xuICAgICAgICBpZiAoeCA9PT0gMCB8fCBpc05hTih4KSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPiAwID8gMSA6IC0xO1xuICAgIH07XG59XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9vYmplY3QtYXNzaWduXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5cbmlmICghT2JqZWN0LmFzc2lnbilcbntcbiAgICBPYmplY3QuYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xufVxuIiwicmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL3JlcXVlc3RBbmltYXRpb25GcmFtZScpO1xucmVxdWlyZSgnLi9NYXRoLnNpZ24nKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTU3OTY3MVxuLy8gaHR0cDovL3VwZGF0ZXMuaHRtbDVyb2Nrcy5jb20vMjAxMi8wNS9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUtQVBJLW5vdy13aXRoLXN1Yi1taWxsaXNlY29uZC1wcmVjaXNpb25cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RpbWhhbGwvNDA3ODYxNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0ZpbmFuY2lhbC1UaW1lcy9wb2x5ZmlsbC1zZXJ2aWNlL3RyZWUvbWFzdGVyL3BvbHlmaWxscy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcblxuLy8gRXhwZWN0ZWQgdG8gYmUgdXNlZCB3aXRoIEJyb3dzZXJmaXlcbi8vIEJyb3dzZXJpZnkgYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZSB1c2Ugb2YgYGdsb2JhbGAgYW5kIHBhc3NlcyB0aGVcbi8vIGNvcnJlY3QgcmVmZXJlbmNlIG9mIGBnbG9iYWxgLCBgc2VsZmAsIGFuZCBmaW5hbGx5IGB3aW5kb3dgXG5cbi8vIERhdGUubm93XG5pZiAoIShEYXRlLm5vdyAmJiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lKSkge1xuICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcbn1cblxuLy8gcGVyZm9ybWFuY2Uubm93XG5pZiAoIShnbG9iYWwucGVyZm9ybWFuY2UgJiYgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdykpIHtcbiAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIWdsb2JhbC5wZXJmb3JtYW5jZSkge1xuICAgICAgICBnbG9iYWwucGVyZm9ybWFuY2UgPSB7fTtcbiAgICB9XG4gICAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgfTtcbn1cblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xudmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xuXG5mb3IodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8XG4gICAgICAgIGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xufVxuXG5pZiAoIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCksXG4gICAgICAgICAgICBkZWxheSA9IDE2ICsgbGFzdFRpbWUgLSBjdXJyZW50VGltZTtcblxuICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgIH07XG59XG5cbmlmICghZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xufVxuIl19 //# sourceMappingURL=pixi.js.map diff --git a/bin/pixi.js.map b/bin/pixi.js.map index 1d72f43..3256814 100644 --- a/bin/pixi.js.map +++ b/bin/pixi.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi.js","sourceRoot":"./","sourcesContent":[]} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi.js","sourceRoot":"./","sourcesContent":[]} \ No newline at end of file diff --git a/bin/pixi.min.js b/bin/pixi.min.js index db31e4a..ee1b45b 100644 --- a/bin/pixi.min.js +++ b/bin/pixi.min.js @@ -1,11 +1,11 @@ !function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&this.texture.uploadData(null,t,e),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=i.fromData(t,null,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a.unbind(),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a.unbind(),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t||null)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){return this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate(),this},i.prototype.unbind=function(){return this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null),this},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=X(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function P(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function D(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},X=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},Y="function"==typeof setImmediate&&setImmediate,z=Y?function(t){Y(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=Y?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=X(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return P(t,1,e)},N.log=D("log"),N.dir=D("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return P.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return D.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",P=/^xn--/,D=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r); g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v,p=""),d=decodeURIComponent(c),f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,P=M.length;P>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var D=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(D.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=D.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var X=i.indexOf("#");-1!==X&&(this.hash=i.substr(X),i=i.slice(0,X));var Y=i.indexOf("?");if(-1!==Y?(this.search=i.substr(Y),this.query=i.substr(Y+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,Y)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","gl-matrix":"git+https://github.com/toji/gl-matrix.git","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirtyTransform=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":56,"../textures/RenderTexture":100,"../utils":107,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.transform=new a,this.position=this.transform.position,this.scale=this.transform.scale,this.pivot=this.transform.pivot,this.skew=this.transform.skew,this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),t("./Transform")),h=new n.Matrix,u={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i;var l=function(t){this.doc=t,this.x=0,this.y=0};Object.defineProperties(l.prototype,{x:{get:function(){return this.doc.position.x},set:function(t){this.doc.position.x=t,this.doc.dirtyTransform=!0}},y:{get:function(){return this.doc.posiiton.y},set:function(t){this.doc.position.y=t,this.doc.dirtyTransform=!0}}}),Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return h.tx=-i.x,h.ty=-i.y,n.render(this,h),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":56,"../textures/RenderTexture":100,"./Transform":41,eventemitter3:25}],41:[function(t,e,r){function i(){this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.position=new n.Point(0),this.scale=new n.Point(1,1),this.pivot=new n.Point(0),this.skew=new n.Point(0),this.rotation=0,this.dirty=!0}var n=t("../math");i.prototype.constructor=i,i.prototype.updateTransform=function(t){var e=t.worldTransform,r=this.worldTransform,i=this.localTransform;return i.a=this._cr*this.scale.x,i.b=this._sr*this.scale.x,i.c=-this._sr*this.scale.y,i.d=this._cr*this.scale.y,i.tx=this.position.x-(this.pivot.x*i.a+this.pivot.y*i.c),i.ty=this.position.y-(this.pivot.x*i.b+this.pivot.y*i.d),r.a=i.a*e.a+i.b*e.c,r.b=i.a*e.b+i.b*e.d,r.c=i.c*e.a+i.d*e.c,r.d=i.c*e.b+i.d*e.d,r.tx=i.tx*e.a+i.ty*e.c+e.tx,r.ty=i.tx*e.b+i.ty*e.d+e.ty,this.dirty=!1,!0},e.exports=i},{"../math":56}],42:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils":107,"./WebGLGraphicsData":45,"./shaders/PrimitiveShader":46,"./utils/buildCircle":47,"./utils/buildComplexPoly":48,"./utils/buildLine":49,"./utils/buildPoly":50,"./utils/buildRectangle":51,"./utils/buildRoundedRectangle":52,earcut:24}],45:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],46:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],47:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":107,"./buildLine":49}],48:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":107,"./buildLine":49}],49:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":56,"../../../utils":107}],50:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":107}],51:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":107,"./buildLine":49}],52:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":107,"./buildLine":49}],53:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),BaseRenderTexture:t("./textures/BaseRenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":42,"./graphics/GraphicsData":43,"./graphics/webgl/GraphicsRenderer":44,"./math":56,"./particles/ParticleContainer":62,"./particles/webgl/ParticleRenderer":64,"./renderers/canvas/CanvasRenderer":67,"./renderers/canvas/utils/CanvasBuffer":68,"./renderers/canvas/utils/CanvasGraphics":69,"./renderers/webgl/WebGLRenderer":73,"./renderers/webgl/filters/AbstractFilter":74,"./renderers/webgl/filters/FXAAFilter":75,"./renderers/webgl/filters/SpriteMaskFilter":76,"./renderers/webgl/managers/ShaderManager":80,"./renderers/webgl/managers/WebGLManager":82,"./renderers/webgl/shaders/Shader":85,"./renderers/webgl/utils/ObjectRenderer":88,"./renderers/webgl/utils/RenderTarget":90,"./sprites/Sprite":94,"./sprites/webgl/SpriteRenderer":95,"./text/Text":97,"./textures/BaseRenderTexture":98,"./textures/BaseTexture":99,"./textures/RenderTexture":100,"./textures/Texture":101,"./textures/TextureUvs":102,"./textures/VideoBaseTexture":103,"./ticker":105,"./utils":107,"pixi-gl-core":1}],54:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":55}],55:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],56:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":54,"./Point":55,"./shapes/Circle":57,"./shapes/Ellipse":58,"./shapes/Polygon":59,"./shapes/Rectangle":60,"./shapes/RoundedRectangle":61}],57:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":60}],58:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":60}],59:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":55}],60:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],62:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"./ParticleBuffer":63,"./ParticleShader":65}],65:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{ -uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":86}],66:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,transform:{worldTransform:new o.Matrix},worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":56,"../utils":107,eventemitter3:25}],67:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":56,"../../utils":107,"../SystemRenderer":66,"./utils/CanvasMaskManager":70}],68:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],69:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],70:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":69}],71:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":86}],75:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\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\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\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)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":74}],76:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":56,"./AbstractFilter":74}],77:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":82}],78:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":107}],86:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":85}],87:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],88:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":82}],89:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],90:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=(t("pixi-gl-core").GLTexture,t("pixi-gl-core").GLFramebuffer),s=t("./StencilMaskStack"),a=function(t,e,r,a,h,u){this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=h||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.defaultFrame=new PIXI.Rectangle,this.destinationFrame=null,this.sourceFrame=null,this.stencilBuffer=null,this.stencilMaskStack=new s,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=a||n.SCALE_MODES.DEFAULT,this.root=u,this.frameBuffer=o.createRGBA(t,100,100),this.root?this.frameBuffer.framebuffer=null:this.texture=this.frameBuffer.texture,this.resize(e,r)};a.prototype.constructor=a,e.exports=a,a.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},a.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},a.prototype.activate=function(t,e){var r=this.gl;this.frameBuffer.bind(),this.destinationFrame=t||this.destinationFrame||this.defaultFrame,this.sourceFrame=e||this.sourceFrame||t,this.calculateProjection(this.destinationFrame,this.sourceFrame),this.transform&&this.projectionMatrix.append(this.transform),this.destinationFrame!==this.sourceFrame?(r.enable(r.SCISSOR_TEST),r.scissor(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)):r.disable(r.SCISSOR_TEST),r.viewport(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)},a.prototype.calculateProjection=function(t,e){var r=this.projectionMatrix;e=e||t,r.identity(),this.root?(r.a=1/t.width*2,r.d=-1/t.height*2,r.tx=-1-e.x*r.a,r.ty=1-e.y*r.d):(r.a=1/t.width*2,r.d=1/t.height*2,r.tx=-1-e.x*r.a,r.ty=-1-e.y*r.d)},a.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.defaultFrame.width=t,this.defaultFrame.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},a.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":56,"../../../utils":107,"./StencilMaskStack":91,"pixi-gl-core":1}],91:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],92:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],93:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],94:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.transform.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0); -}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],97:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=t,this.height=e,this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(t){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear(!1,t))},i.prototype.renderWebGL=function(t,e,r,i,n){if(this.valid){if(n=void 0!==n?n:!0,this.textureBuffer.transform=r,this.textureBuffer.activate(),e.worldAlpha=1,n){e.worldTransform.identity(),e.currentBounds=null;var o,s,a=e.children;for(o=0,s=a.length;s>o;++o)a[o].updateTransform()}p.width=t.height,p.height=t.width;var h=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.textureBuffer.activate(t,p),console.log(e),this.renderer.renderDisplayObject(e,this.textureBuffer,i),this.renderer.filterManager=h}},i.prototype.renderCanvas=function(t,e,r,i,n){if(this.valid){n=!!n;var o=c;o.identity(),r&&o.append(r),o.tx+=t.x,o.ty+=t.y;var s=e.worldTransform;e.worldTransform=o,e.worldAlpha=1;var a,h,u=e.children;for(a=0,h=u.length;h>a;++a)u[a].updateTransform();i&&this.textureBuffer.clear();var l=this.textureBuffer.context,p=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(e,l),this.renderer.resolution=p,e.worldTransform===o&&(e.worldTransform=s)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(t){var e=new Image;return e.src=this.getBase64(t),e},i.prototype.getBase64=function(t){return this.getCanvas(t).toDataURL()},i.prototype.getCanvas=function(t){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution,i=this.renderer.gl,n=new Uint8Array(4*e*r);i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null);var o=new h(e,r),s=o.context.getImageData(0,0,e,r);return s.data.set(n),o.context.putImageData(s,0,0),o.canvas}if(t||(t=p,t.width=this.textureBuffer.canvas.width,t.height=this.textureBuffer.canvas.height),t.width===this.textureBuffer.canvas.width&&t.height===this.textureBuffer.canvas.height)return this.textureBuffer.canvas;var a=this.resolution,o=new h(t.width*a,t.height*a),s=this.textureBuffer.context.getImageData(t.x*a,t.y*a,t.width*a,t.height*a);return o.context.putImageData(s,0,0),o.canvas},i.prototype.getPixels=function(t){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var i=this.renderer.gl,n=new Uint8Array(4*e*r);return i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null),n}return this.textureBuffer.canvas.getContext("2d").getImageData(t.x*this.resolution,t.y*this.resolution,e,r).data},i.prototype.getPixel=function(t,e,r){return p.x=e,p.y=r,p.width=1/this.resolution,p.height=1/this.resolution,t&&(p.x+=t.x,p.y+=t.y),this.getPixels(p)}},{"../const":38,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/webgl/managers/FilterManager":78,"../renderers/webgl/utils/RenderTarget":90,"./BaseTexture":99,"./Texture":101}],99:[function(t,e,r){function i(t,e,r){s.call(this),this.uid=n.uid(),this.resolution=r||1,this.width=100,this.height=100,this.realWidth=100,this.realHeight=100,this.scaleMode=e||o.SCALE_MODES.DEFAULT,this.hasLoaded=!1,this.isLoading=!1,this.source=null,this.premultipliedAlpha=!0,this.imageUrl=null,this.isPowerOfTwo=!1,this.mipmap=!1,this._glTextures={},this._active=!1,this._id=0,t&&this.loadSource(t)}var n=t("../utils"),o=t("../const"),s=t("eventemitter3");i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.update=function(){this.realWidth=this.source.naturalWidth||this.source.width,this.realHeight=this.source.naturalHeight||this.source.height,this.width=this.realWidth/this.resolution,this.height=this.realHeight/this.resolution,this.isPowerOfTwo=n.isPowerOfTwo(this.realWidth,this.realHeight),this.emit("update",this)},i.prototype.loadSource=function(t){var e=this.isLoading;if(this.hasLoaded=!1,this.isLoading=!1,e&&this.source&&(this.source.onload=null,this.source.onerror=null),this.source=t,(this.source.complete||this.source.getContext)&&this.source.width&&this.source.height)this._sourceLoaded();else if(!t.getContext){this.isLoading=!0;var r=this;t.onload=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r._sourceLoaded(),r.emit("loaded",r))},t.onerror=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r.emit("error",r))},t.complete&&t.src&&(this.isLoading=!1,t.onload=null,t.onerror=null,t.width&&t.height?(this._sourceLoaded(),e&&this.emit("loaded",this)):e&&this.emit("error",this))}},i.prototype._sourceLoaded=function(){this.hasLoaded=!0,this.update()},i.prototype.destroy=function(){this.imageUrl?(delete n.BaseTextureCache[this.imageUrl],delete n.TextureCache[this.imageUrl],this.imageUrl=null,navigator.isCocoonJS||(this.source.src="")):this.source&&this.source._pixiId&&delete n.BaseTextureCache[this.source._pixiId],this.source=null,this.dispose()},i.prototype.dispose=function(){this.emit("dispose",this)},i.prototype.updateSourceImage=function(t){this.source.src=t,this.loadSource(this.source)},i.fromImage=function(t,e,r){var o=n.BaseTextureCache[t];if(void 0===e&&0!==t.indexOf("data:")&&(e=!0),!o){var s=new Image;e&&(s.crossOrigin=""),o=new i(s,r),o.imageUrl=t,s.src=t,n.BaseTextureCache[t]=o,o.resolution=n.getResolutionOfUrl(t)}return o},i.fromCanvas=function(t,e){t._pixiId||(t._pixiId="canvas_"+n.uid());var r=n.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),n.BaseTextureCache[t._pixiId]=r),r}},{"../const":38,"../utils":107,eventemitter3:25}],100:[function(t,e,r){function i(t,e){if(!renderer)throw new Error("Unable to create RenderTexture, you must pass a renderer into the constructor.");o.call(this,t,e),this.valid=!0,this._updateUvs()}var n=t("./BaseRenderTexture"),o=t("./Texture"),s=t("../math");t("../const"),new s.Matrix;i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.resize=function(t,e,r){this.valid=t>0&&e>0,this._frame.width=this.crop.width=t,this._frame.height=this.crop.height=e,r&&this.baseTexture.resize(t,e),this._updateUvs()},i.prototype.clear=function(){this.valid&&this.baseTexture.clear(this.frame)},i.prototype.render=function(t,e,r,i){this.valid&&this.baseTexture.render(this.frame,t,e,r,i)},i.prototype.getImage=function(){return this.baseTexture.getImage(this.frame)},i.prototype.getBase64=function(){return this.getBase64.getImage(this.frame)},i.prototype.getCanvas=function(){return this.baseTexture.getCanvas(this.frame)},i.prototype.getPixels=function(){return this.baseTexture.getPixels(this.frame)},i.prototype.getPixel=function(t,e){return this.baseTexture.getPixel(this.frame,t,e)},i.create=function(t,e,r,o,s){return new i(new n(t,e,r,o,s))}},{"../const":38,"../math":56,"./BaseRenderTexture":98,"./Texture":101}],101:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":56,"../utils":107,"./BaseTexture":99,"./TextureUvs":102,"./VideoBaseTexture":103,eventemitter3:25}],102:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],103:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],105:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":104}],106:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],107:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":108,async:16,eventemitter3:25}],108:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],109:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":53, -"./extras":116,"./filters":133,"./mesh":158}],110:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":53}],118:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":53,"../blur/BlurXFilter":121,"../blur/BlurYFilter":122}],119:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){ -t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":53}],125:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":53}],126:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":53}],127:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":53}],128:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":53}],129:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":53}],130:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":53}],140:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":53}],141:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":53,"./TiltShiftXFilter":142,"./TiltShiftYFilter":143}],142:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":140}],143:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":140}],144:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":53}],145:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":53,"./deprecation":109,"./extras":116,"./filters":133,"./interaction":148,"./loaders":151,"./mesh":158,"./polyfill":163}],146:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":53}],147:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){ -var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":53,"./InteractionData":146,"./interactiveTarget":149}],148:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":146,"./InteractionManager":147,"./interactiveTarget":149}],149:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],150:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":53}],156:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":155}],157:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":53,"./Mesh":155}],158:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":155,"./Plane":156,"./Rope":157,"./webgl/MeshRenderer":159,"./webgl/MeshShader":160}],159:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":53,"../Mesh":155}],160:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":53}],161:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],162:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],163:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":161,"./Object.assign":162,"./requestAnimationFrame":164}],164:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[145])(145)}); +i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.complete=function(){this.data&&this.data.removeEventListener&&(this.data.removeEventListener("error",this._boundOnError),this.data.removeEventListener("load",this._boundComplete),this.data.removeEventListener("progress",this._boundOnProgress),this.data.removeEventListener("canplaythrough",this._boundComplete)),this.xhr&&(this.xhr.removeEventListener?(this.xhr.removeEventListener("error",this._boundXhrOnError),this.xhr.removeEventListener("abort",this._boundXhrOnAbort),this.xhr.removeEventListener("progress",this._boundOnProgress),this.xhr.removeEventListener("load",this._boundXhrOnLoad)):(this.xhr.onerror=null,this.xhr.ontimeout=null,this.xhr.onprogress=null,this.xhr.onload=null)),this.emit("complete",this)},i.prototype.load=function(t){switch(this.emit("start",this),t&&this.once("complete",t),(this.crossOrigin===!1||"string"!=typeof this.crossOrigin)&&(this.crossOrigin=this._determineCrossOrigin(this.url)),this.loadType){case i.LOAD_TYPE.IMAGE:this._loadImage();break;case i.LOAD_TYPE.AUDIO:this._loadElement("audio");break;case i.LOAD_TYPE.VIDEO:this._loadElement("video");break;case i.LOAD_TYPE.XHR:default:h&&this.crossOrigin?this._loadXdr():this._loadXhr()}},i.prototype._loadImage=function(){this.data=new Image,this.crossOrigin&&(this.data.crossOrigin=this.crossOrigin),this.data.src=this.url,this.isImage=!0,this.data.addEventListener("error",this._boundOnError,!1),this.data.addEventListener("load",this._boundComplete,!1),this.data.addEventListener("progress",this._boundOnProgress,!1)},i.prototype._loadElement=function(t){if("audio"===t&&"undefined"!=typeof Audio?this.data=new Audio:this.data=document.createElement(t),null===this.data)return this.error=new Error("Unsupported element "+t),void this.complete();if(navigator.isCocoonJS)this.data.src=Array.isArray(this.url)?this.url[0]:this.url;else if(Array.isArray(this.url))for(var e=0;e0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","gl-matrix":"git+https://github.com/toji/gl-matrix.git","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.transform.dirty=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":57,"../textures/RenderTexture":101,"../utils":108,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.transform=new a,this.position=this.transform.position,this.scale=this.transform.scale,this.pivot=this.transform.pivot,this.skew=this.transform.skew,this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=this.transform.worldTransform,this.localTransform=this.transform.localTransform,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),t("./TransformStatic")),h=new n.Matrix,u={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return h.tx=-i.x,h.ty=-i.y,n.render(this,h),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":57,"../textures/RenderTexture":101,"./TransformStatic":42,eventemitter3:25}],41:[function(t,e,r){function i(t,e,r){this._x=e||0,this._y=r||0,this.transform=t}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this._x},set:function(t){this._x=t,this.transform.dirty=!0}},y:{get:function(){return this._y},set:function(t){this._y=t,this.transform.dirty=!0}}}),i.prototype.set=function(t,e){this._x=t||0,this._y=e||(0!==e?this._x:0),this.transform.dirty=!0}},{}],42:[function(t,e,r){function i(){this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.position=new o(this,0),this.scale=new o(this,1,1),this.pivot=new o(this,0,0),this.skew=new o(this,0,0),this.rotation=0,this._sr=Math.sin(0),this._cr=Math.cos(0),this.dirty=!0}var n=t("../math"),o=t("./ObservablePoint");i.prototype.constructor=i,i.prototype.updateTransform=function(t){var e=t.worldTransform,r=this.worldTransform,i=this.localTransform;console.log("DIRTY"),this.dirty&&(i.a=this._cr*this.scale._x,i.b=this._sr*this.scale._x,i.c=-this._sr*this.scale._y,i.d=this._cr*this.scale._y,i.tx=this.position._x-(this.pivot._x*i.a+this.pivot._y*i.c),i.ty=this.position._y-(this.pivot._x*i.b+this.pivot._y*i.d)),(this.dirty||parent.dirty)&&(r.a=i.a*e.a+i.b*e.c,r.b=i.a*e.b+i.b*e.d,r.c=i.c*e.a+i.d*e.c,r.d=i.c*e.b+i.d*e.d,r.tx=i.tx*e.a+i.ty*e.c+e.tx,r.ty=i.tx*e.b+i.ty*e.d+e.ty)},e.exports=i},{"../math":57,"./ObservablePoint":41}],43:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils":108,"./WebGLGraphicsData":46,"./shaders/PrimitiveShader":47,"./utils/buildCircle":48,"./utils/buildComplexPoly":49,"./utils/buildLine":50,"./utils/buildPoly":51,"./utils/buildRectangle":52,"./utils/buildRoundedRectangle":53,earcut:24}],46:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],47:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],48:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":108,"./buildLine":50}],49:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":108,"./buildLine":50}],50:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":57,"../../../utils":108}],51:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":108}],52:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":108,"./buildLine":50}],53:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":108,"./buildLine":50}],54:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),BaseRenderTexture:t("./textures/BaseRenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":43,"./graphics/GraphicsData":44,"./graphics/webgl/GraphicsRenderer":45,"./math":57,"./particles/ParticleContainer":63,"./particles/webgl/ParticleRenderer":65,"./renderers/canvas/CanvasRenderer":68,"./renderers/canvas/utils/CanvasBuffer":69,"./renderers/canvas/utils/CanvasGraphics":70,"./renderers/webgl/WebGLRenderer":74,"./renderers/webgl/filters/AbstractFilter":75,"./renderers/webgl/filters/FXAAFilter":76,"./renderers/webgl/filters/SpriteMaskFilter":77,"./renderers/webgl/managers/ShaderManager":81,"./renderers/webgl/managers/WebGLManager":83,"./renderers/webgl/shaders/Shader":86,"./renderers/webgl/utils/ObjectRenderer":89,"./renderers/webgl/utils/RenderTarget":91,"./sprites/Sprite":95,"./sprites/webgl/SpriteRenderer":96,"./text/Text":98,"./textures/BaseRenderTexture":99,"./textures/BaseTexture":100,"./textures/RenderTexture":101,"./textures/Texture":102,"./textures/TextureUvs":103,"./textures/VideoBaseTexture":104,"./ticker":106,"./utils":108,"pixi-gl-core":1}],55:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":56}],56:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],57:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":55,"./Point":56,"./shapes/Circle":58,"./shapes/Ellipse":59,"./shapes/Polygon":60,"./shapes/Rectangle":61,"./shapes/RoundedRectangle":62}],58:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":61}],59:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":61}],60:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":56}],61:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],63:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"./ParticleBuffer":64,"./ParticleShader":66}],66:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{ +uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":87}],67:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,transform:{worldTransform:new o.Matrix},worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":57,"../utils":108,eventemitter3:25}],68:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":57,"../../utils":108,"../SystemRenderer":67,"./utils/CanvasMaskManager":71}],69:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],70:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],71:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":70}],72:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":87}],76:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\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\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\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)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":75}],77:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":57,"./AbstractFilter":75}],78:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":83}],79:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":108}],87:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":86}],88:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],89:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":83}],90:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],91:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=(t("pixi-gl-core").GLTexture,t("pixi-gl-core").GLFramebuffer),s=t("./StencilMaskStack"),a=function(t,e,r,a,h,u){this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=h||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.defaultFrame=new PIXI.Rectangle,this.destinationFrame=null,this.sourceFrame=null,this.stencilBuffer=null,this.stencilMaskStack=new s,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=a||n.SCALE_MODES.DEFAULT,this.root=u,this.frameBuffer=o.createRGBA(t,100,100),this.root?this.frameBuffer.framebuffer=null:this.texture=this.frameBuffer.texture,this.resize(e,r)};a.prototype.constructor=a,e.exports=a,a.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},a.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},a.prototype.activate=function(t,e){var r=this.gl;this.frameBuffer.bind(),this.destinationFrame=t||this.destinationFrame||this.defaultFrame,this.sourceFrame=e||this.sourceFrame||t,this.calculateProjection(this.destinationFrame,this.sourceFrame),this.transform&&this.projectionMatrix.append(this.transform),this.destinationFrame!==this.sourceFrame?(r.enable(r.SCISSOR_TEST),r.scissor(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)):r.disable(r.SCISSOR_TEST),r.viewport(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)},a.prototype.calculateProjection=function(t,e){var r=this.projectionMatrix;e=e||t,r.identity(),this.root?(r.a=1/t.width*2,r.d=-1/t.height*2,r.tx=-1-e.x*r.a,r.ty=1-e.y*r.d):(r.a=1/t.width*2,r.d=1/t.height*2,r.tx=-1-e.x*r.a,r.ty=-1-e.y*r.d)},a.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.defaultFrame.width=t,this.defaultFrame.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},a.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":57,"../../../utils":108,"./StencilMaskStack":92,"pixi-gl-core":1}],92:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],93:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],94:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],95:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.transform.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0); +}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],98:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=t,this.height=e,this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(t){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear(!1,t))},i.prototype.renderWebGL=function(t,e,r,i,n){if(this.valid){if(n=void 0!==n?n:!0,this.textureBuffer.transform=r,this.textureBuffer.activate(),e.worldAlpha=1,n){e.worldTransform.identity(),e.currentBounds=null;var o,s,a=e.children;for(o=0,s=a.length;s>o;++o)a[o].updateTransform()}p.width=t.height,p.height=t.width;var h=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.textureBuffer.activate(t,p),console.log(e),this.renderer.renderDisplayObject(e,this.textureBuffer,i),this.renderer.filterManager=h}},i.prototype.renderCanvas=function(t,e,r,i,n){if(this.valid){n=!!n;var o=c;o.identity(),r&&o.append(r),o.tx+=t.x,o.ty+=t.y;var s=e.worldTransform;e.worldTransform=o,e.worldAlpha=1;var a,h,u=e.children;for(a=0,h=u.length;h>a;++a)u[a].updateTransform();i&&this.textureBuffer.clear();var l=this.textureBuffer.context,p=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(e,l),this.renderer.resolution=p,e.worldTransform===o&&(e.worldTransform=s)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(t){var e=new Image;return e.src=this.getBase64(t),e},i.prototype.getBase64=function(t){return this.getCanvas(t).toDataURL()},i.prototype.getCanvas=function(t){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution,i=this.renderer.gl,n=new Uint8Array(4*e*r);i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null);var o=new h(e,r),s=o.context.getImageData(0,0,e,r);return s.data.set(n),o.context.putImageData(s,0,0),o.canvas}if(t||(t=p,t.width=this.textureBuffer.canvas.width,t.height=this.textureBuffer.canvas.height),t.width===this.textureBuffer.canvas.width&&t.height===this.textureBuffer.canvas.height)return this.textureBuffer.canvas;var a=this.resolution,o=new h(t.width*a,t.height*a),s=this.textureBuffer.context.getImageData(t.x*a,t.y*a,t.width*a,t.height*a);return o.context.putImageData(s,0,0),o.canvas},i.prototype.getPixels=function(t){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var i=this.renderer.gl,n=new Uint8Array(4*e*r);return i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null),n}return this.textureBuffer.canvas.getContext("2d").getImageData(t.x*this.resolution,t.y*this.resolution,e,r).data},i.prototype.getPixel=function(t,e,r){return p.x=e,p.y=r,p.width=1/this.resolution,p.height=1/this.resolution,t&&(p.x+=t.x,p.y+=t.y),this.getPixels(p)}},{"../const":38,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/webgl/managers/FilterManager":79,"../renderers/webgl/utils/RenderTarget":91,"./BaseTexture":100,"./Texture":102}],100:[function(t,e,r){function i(t,e,r){s.call(this),this.uid=n.uid(),this.resolution=r||1,this.width=100,this.height=100,this.realWidth=100,this.realHeight=100,this.scaleMode=e||o.SCALE_MODES.DEFAULT,this.hasLoaded=!1,this.isLoading=!1,this.source=null,this.premultipliedAlpha=!0,this.imageUrl=null,this.isPowerOfTwo=!1,this.mipmap=!1,this._glTextures={},this._active=!1,this._id=0,t&&this.loadSource(t)}var n=t("../utils"),o=t("../const"),s=t("eventemitter3");i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.update=function(){this.realWidth=this.source.naturalWidth||this.source.width,this.realHeight=this.source.naturalHeight||this.source.height,this.width=this.realWidth/this.resolution,this.height=this.realHeight/this.resolution,this.isPowerOfTwo=n.isPowerOfTwo(this.realWidth,this.realHeight),this.emit("update",this)},i.prototype.loadSource=function(t){var e=this.isLoading;if(this.hasLoaded=!1,this.isLoading=!1,e&&this.source&&(this.source.onload=null,this.source.onerror=null),this.source=t,(this.source.complete||this.source.getContext)&&this.source.width&&this.source.height)this._sourceLoaded();else if(!t.getContext){this.isLoading=!0;var r=this;t.onload=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r._sourceLoaded(),r.emit("loaded",r))},t.onerror=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r.emit("error",r))},t.complete&&t.src&&(this.isLoading=!1,t.onload=null,t.onerror=null,t.width&&t.height?(this._sourceLoaded(),e&&this.emit("loaded",this)):e&&this.emit("error",this))}},i.prototype._sourceLoaded=function(){this.hasLoaded=!0,this.update()},i.prototype.destroy=function(){this.imageUrl?(delete n.BaseTextureCache[this.imageUrl],delete n.TextureCache[this.imageUrl],this.imageUrl=null,navigator.isCocoonJS||(this.source.src="")):this.source&&this.source._pixiId&&delete n.BaseTextureCache[this.source._pixiId],this.source=null,this.dispose()},i.prototype.dispose=function(){this.emit("dispose",this)},i.prototype.updateSourceImage=function(t){this.source.src=t,this.loadSource(this.source)},i.fromImage=function(t,e,r){var o=n.BaseTextureCache[t];if(void 0===e&&0!==t.indexOf("data:")&&(e=!0),!o){var s=new Image;e&&(s.crossOrigin=""),o=new i(s,r),o.imageUrl=t,s.src=t,n.BaseTextureCache[t]=o,o.resolution=n.getResolutionOfUrl(t)}return o},i.fromCanvas=function(t,e){t._pixiId||(t._pixiId="canvas_"+n.uid());var r=n.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),n.BaseTextureCache[t._pixiId]=r),r}},{"../const":38,"../utils":108,eventemitter3:25}],101:[function(t,e,r){function i(t,e){if(!renderer)throw new Error("Unable to create RenderTexture, you must pass a renderer into the constructor.");o.call(this,t,e),this.valid=!0,this._updateUvs()}var n=t("./BaseRenderTexture"),o=t("./Texture"),s=t("../math");t("../const"),new s.Matrix;i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.resize=function(t,e,r){this.valid=t>0&&e>0,this._frame.width=this.crop.width=t,this._frame.height=this.crop.height=e,r&&this.baseTexture.resize(t,e),this._updateUvs()},i.prototype.clear=function(){this.valid&&this.baseTexture.clear(this.frame)},i.prototype.render=function(t,e,r,i){this.valid&&this.baseTexture.render(this.frame,t,e,r,i)},i.prototype.getImage=function(){return this.baseTexture.getImage(this.frame)},i.prototype.getBase64=function(){return this.getBase64.getImage(this.frame)},i.prototype.getCanvas=function(){return this.baseTexture.getCanvas(this.frame)},i.prototype.getPixels=function(){return this.baseTexture.getPixels(this.frame)},i.prototype.getPixel=function(t,e){return this.baseTexture.getPixel(this.frame,t,e)},i.create=function(t,e,r,o,s){return new i(new n(t,e,r,o,s))}},{"../const":38,"../math":57,"./BaseRenderTexture":99,"./Texture":102}],102:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":57,"../utils":108,"./BaseTexture":100,"./TextureUvs":103,"./VideoBaseTexture":104,eventemitter3:25}],103:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],104:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],106:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":105}],107:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],108:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":109,async:16,eventemitter3:25}],109:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],110:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":54, +"./extras":117,"./filters":134,"./mesh":159}],111:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":54}],119:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":54,"../blur/BlurXFilter":122,"../blur/BlurYFilter":123}],120:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){ +t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":54}],126:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":54}],127:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":54}],128:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":54}],129:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":54}],130:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":54}],131:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":54}],141:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":54}],142:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":54,"./TiltShiftXFilter":143,"./TiltShiftYFilter":144}],143:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":141}],144:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":141}],145:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":54}],146:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":54,"./deprecation":110,"./extras":117,"./filters":134,"./interaction":149,"./loaders":152,"./mesh":159,"./polyfill":164}],147:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":54}],148:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){ +var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":54,"./InteractionData":147,"./interactiveTarget":150}],149:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":147,"./InteractionManager":148,"./interactiveTarget":150}],150:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],151:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":54}],157:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":156}],158:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":54,"./Mesh":156}],159:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":156,"./Plane":157,"./Rope":158,"./webgl/MeshRenderer":160,"./webgl/MeshShader":161}],160:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":54,"../Mesh":156}],161:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":54}],162:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],163:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],164:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":162,"./Object.assign":163,"./requestAnimationFrame":165}],165:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[146])(146)}); //# sourceMappingURL=pixi.min.js.map diff --git a/bin/pixi.min.js.map b/bin/pixi.min.js.map index 102b3e1..c95a532 100644 --- a/bin/pixi.min.js.map +++ b/bin/pixi.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","gl-matrix","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","dirtyTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Transform","pivot","_rotation","filterArea","_sr","_cr","_tempDisplayObjectParent","CachePoint","doc","posiiton","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const","./Transform",41,"localTransform","Point","parentTransform","pt","lt",42,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",43,"_lineTint","_fillTint",44,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",45,"glPoints","glIndices","Uint16Array","deleteBuffer",46,47,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",48,49,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",50,"vertPos",51,"rectData",52,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",53,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","BaseRenderTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseRenderTexture","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",54,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",55,56,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",57,"dx","dy","r2","./Rectangle",58,"normx","normy",59,"points_","il","xi","yi","xj","yj","intersect","../Point",60,61,62,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",63,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",64,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",65,"TextureShader","../../renderers/webgl/shaders/TextureShader",66,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",67,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",68,69,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",70,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",71,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",72,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",73,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",74,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",75,"./AbstractFilter",76,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",77,"currentBlendMode","blendFunc","./WebGLManager",78,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",79,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",80,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",81,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",82,83,"./Shader",84,85,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",86,"customUniforms","customAttributes","uSampler",87,88,"../managers/WebGLManager",89,"colors","rect2",90,"StencilMaskStack","frameBuffer","defaultFrame","destinationFrame","sourceFrame","stencilBuffer","calculateProjection","SCISSOR_TEST","scissor","viewport","pm","projectionFrame","./StencilMaskStack",91,92,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",93,94,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",95,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",96,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",97,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",98,"textureBuffer","tempRect","currentBounds","cachedWt","realResolution","getImage","image","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",99,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","getResolutionOfUrl",100,"baseRenderTexture","_updateUvs","updateBase","./BaseRenderTexture",101,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",102,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",103,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",104,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",105,"shared","./Ticker",106,"totalIndices",107,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",108,"__plugins","pluginName","ctor",109,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",110,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",111,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",112,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",113,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",114,"getChildByName",115,"getGlobalPosition",116,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",117,"AsciiFilter","pixelSize","../../core",118,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",119,"BlurDirFilter","dirX","dirY","strength","passes",120,"BlurFilter","./BlurXFilter","./BlurYFilter",121,"flip","flop",122,123,"SmartBlurFilter",124,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",125,"ColorStepFilter",126,"ConvolutionFilter","texelSize",127,"CrossHatchFilter",128,"DisplacementFilter","mapSampler",129,"DotScreenFilter",130,"BlurYTintFilter",131,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",132,"GrayFilter","gray",133,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",134,135,"noise",136,137,"red","green","blue",138,139,"center","params",140,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",141,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",142,"./TiltShiftAxisFilter",143,144,145,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",146,"InteractionData","originalEvent","getLocalPosition","globalPos",147,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",148,"interactiveTarget","./InteractionManager",149,150,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",151,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",152,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",153,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",154,155,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",156,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",157,"factor","nextPoint","perpLength","num","perpX","perpY",158,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",159,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",160,161,"isNaN",162,163,"./Math.sign","./Object.assign","./requestAnimationFrame",164,"Date","getTime","startTime","vendors","delay"],"mappings":"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AA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAw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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","gl-matrix","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","worldAlpha","alpha","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Transform","pivot","_rotation","localTransform","filterArea","_sr","_cr","dirtyTransform","_tempDisplayObjectParent","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","displayObjectUpdateTransform","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const","./TransformStatic",41,"ObservablePoint","_x","_y",42,"parentTransform","pt","lt","./ObservablePoint",43,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","Point","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",44,"_lineTint","_fillTint",45,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",46,"glPoints","glIndices","Uint16Array","deleteBuffer",47,48,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",49,50,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",51,"vertPos",52,"rectData",53,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",54,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","BaseRenderTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseRenderTexture","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",55,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",56,57,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",58,"dx","dy","r2","./Rectangle",59,"normx","normy",60,"points_","il","xi","yi","xj","yj","intersect","../Point",61,62,63,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",64,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",65,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",66,"TextureShader","../../renderers/webgl/shaders/TextureShader",67,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",68,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",69,70,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",71,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",72,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",73,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",74,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",75,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",76,"./AbstractFilter",77,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",78,"currentBlendMode","blendFunc","./WebGLManager",79,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",80,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",81,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",82,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",83,84,"./Shader",85,86,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",87,"customUniforms","customAttributes","uSampler",88,89,"../managers/WebGLManager",90,"colors","rect2",91,"StencilMaskStack","frameBuffer","defaultFrame","destinationFrame","sourceFrame","stencilBuffer","calculateProjection","SCISSOR_TEST","scissor","viewport","pm","projectionFrame","./StencilMaskStack",92,93,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",94,95,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",96,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",97,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",98,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",99,"textureBuffer","tempRect","currentBounds","cachedWt","realResolution","getImage","image","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",100,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","getResolutionOfUrl",101,"baseRenderTexture","_updateUvs","updateBase","./BaseRenderTexture",102,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",103,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",104,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",105,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",106,"shared","./Ticker",107,"totalIndices",108,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",109,"__plugins","pluginName","ctor",110,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",111,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",112,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",113,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",114,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",115,"getChildByName",116,"getGlobalPosition",117,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",118,"AsciiFilter","pixelSize","../../core",119,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",120,"BlurDirFilter","dirX","dirY","strength","passes",121,"BlurFilter","./BlurXFilter","./BlurYFilter",122,"flip","flop",123,124,"SmartBlurFilter",125,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",126,"ColorStepFilter",127,"ConvolutionFilter","texelSize",128,"CrossHatchFilter",129,"DisplacementFilter","mapSampler",130,"DotScreenFilter",131,"BlurYTintFilter",132,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",133,"GrayFilter","gray",134,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",135,136,"noise",137,138,"red","green","blue",139,140,"center","params",141,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",142,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",143,"./TiltShiftAxisFilter",144,145,146,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",147,"InteractionData","originalEvent","getLocalPosition","globalPos",148,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",149,"interactiveTarget","./InteractionManager",150,151,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",152,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",153,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",154,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",155,156,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",157,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",158,"factor","nextPoint","perpLength","num","perpX","perpY",159,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",160,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",161,162,"isNaN",163,164,"./Math.sign","./Object.assign","./requestAnimationFrame",165,"Date","getTime","startTime","vendors","delay"],"mappings":"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AA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file diff --git a/bin/pixi.js b/bin/pixi.js index df52170..915f5c1 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -1,7 +1,7 @@ /** * @license * pixi.js - v3.0.10-dev - * Compiled 2016-01-18T21:33:26.540Z + * Compiled 2016-01-18T22:34:48.843Z * * pixi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -8072,7 +8072,7 @@ core.CanvasRenderer.registerPlugin('accessibility', AccessibilityManager); -},{"../core":53,"./accessibleTarget":36}],36:[function(require,module,exports){ +},{"../core":54,"./accessibleTarget":36}],36:[function(require,module,exports){ /** * Default property values of accessible objects * used by {@link PIXI.accessibility.AccessibilityManager}. @@ -8759,7 +8759,7 @@ this.children[i].updateTransform(); } - this.dirtyTransform = false; + this.transform.dirty = false; }; // performance increase to avoid using call.. (10x faster) @@ -9005,12 +9005,12 @@ this.children = null; }; -},{"../math":56,"../textures/RenderTexture":100,"../utils":107,"./DisplayObject":40}],40:[function(require,module,exports){ +},{"../math":57,"../textures/RenderTexture":101,"../utils":108,"./DisplayObject":40}],40:[function(require,module,exports){ var math = require('../math'), RenderTexture = require('../textures/RenderTexture'), EventEmitter = require('eventemitter3'), CONST = require('../const'), - Transform = require('./Transform'), + Transform = require('./TransformStatic'), _tempMatrix = new math.Matrix(), _tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1, children:[]}; @@ -9122,22 +9122,6 @@ */ this.filterArea = null; - /**xww - * cached sin rotation - * - * @member {number} - * @private - */ - this._sr = 0; - - /** - * cached cos rotation - * - * @member {number} - * @private - */ - this._cr = 1; - /** * The original, cached bounds of the object * @@ -9162,7 +9146,7 @@ */ this._mask = null; - this.dirtyTransform = true; + // this.dirtyTransform = true; } // constructor @@ -9246,9 +9230,9 @@ set: function (value) { this._rotation = value; - this.dirtyTransform = true; - this._sr = Math.sin(value); - this._cr = Math.cos(value); + this.transform.dirty = true; + this.transform._sr = Math.sin(value); + this.transform._cr = Math.cos(value); } }, @@ -9352,6 +9336,7 @@ */ DisplayObject.prototype.updateTransform = function () { + //if(this.transform.dirty || parent.transform.dirty) this.transform.updateTransform(this.parent.transform); // multiply the alphas.. this.worldAlpha = this.alpha * this.parent.worldAlpha; @@ -9554,9 +9539,79 @@ this.filterArea = null; }; -},{"../const":38,"../math":56,"../textures/RenderTexture":100,"./Transform":41,"eventemitter3":25}],41:[function(require,module,exports){ -var math = require('../math'); +},{"../const":38,"../math":57,"../textures/RenderTexture":101,"./TransformStatic":42,"eventemitter3":25}],41:[function(require,module,exports){ +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents + * the horizontal axis and y represents the vertical axis. + * + * @class + * @memberof PIXI + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +function ObservablePoint(transform, x, y) +{ + this._x = x || 0; + this._y = y || 0; + this.transform = transform; +} + +ObservablePoint.prototype.constructor = ObservablePoint; +module.exports = ObservablePoint; + + + +Object.defineProperties(ObservablePoint.prototype, { + /** + * The position of the displayObject on the x axis relative to the local coordinates of the parent. + * + * @member {number} + * @memberof PIXI.DisplayObject# + */ + x: { + get: function () + { + return this._x; + }, + set: function (value) + { + this._x = value; + this.transform.dirty = true; + } + }, + + y: { + get: function () + { + return this._y; + }, + set: function (value) + { + this._y = value; + this.transform.dirty = true; + } + } +}); + +/** + * Sets the point to a new x and y position. + * If y is omitted, both x and y will be set to x. + * + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +ObservablePoint.prototype.set = function (x, y) +{ + this._x = x || 0; + this._y = y || ( (y !== 0) ? this._x : 0 ); + + this.transform.dirty = true; +}; + +},{}],42:[function(require,module,exports){ +var math = require('../math'); +var ObservablePoint = require('./ObservablePoint'); /** * The Point object represents a location in a two-dimensional coordinate system, where x represents @@ -9572,17 +9627,19 @@ this.worldTransform = new math.Matrix(); this.localTransform = new math.Matrix(); - this.position = new math.Point(0.0); - this.scale = new math.Point(1,1); - this.pivot = new math.Point(0.0); - this.skew = new math.Point(0.0); + this.position = new ObservablePoint(this, 0); + this.scale = new ObservablePoint(this,1, 1); + this.pivot = new ObservablePoint(this, 0, 0); + this.skew = new ObservablePoint(this, 0,0); this.rotation = 0; this._sr = Math.sin(0); this._cr = Math.cos(0); - this.dirty = true; + + + this.updated = true; } Transform.prototype.constructor = Transform; @@ -9593,19 +9650,20 @@ var wt = this.worldTransform; var lt = this.localTransform; - if(this.dirty) { // get the matrix values of the displayobject based on its transform properties.. - lt.a = this._cr * this.scale.x; - lt.b = this._sr * this.scale.x; - lt.c = -this._sr * this.scale.y; - lt.d = this._cr * this.scale.y; - lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c); - lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d); + lt.a = this._cr * this.scale._x; + lt.b = this._sr * this.scale._x; + lt.c = -this._sr * this.scale._y; + lt.d = this._cr * this.scale._y; + lt.tx = this.position._x - (this.pivot._x * lt.a + this.pivot._y * lt.c); + lt.ty = this.position._y - (this.pivot._x * lt.b + this.pivot._y * lt.d); } - if(this.dirty || parent.dirty) + this.updated = this.dirty || parentTransform.dirty; + + if(this.updated) { // concat the parent matrix with the objects transform. wt.a = lt.a * pt.a + lt.b * pt.c; @@ -9613,21 +9671,16 @@ wt.c = lt.c * pt.a + lt.d * pt.c; wt.d = lt.c * pt.b + lt.d * pt.d; wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; - wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; - - // this.dirty = false; - // return true; + wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; } - -// this.dirty = false; - // return false; + } module.exports = Transform; -},{"../math":56}],42:[function(require,module,exports){ +},{"../math":57,"./ObservablePoint":41}],43:[function(require,module,exports){ var Container = require('../display/Container'), Texture = require('../textures/Texture'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), @@ -10787,7 +10840,7 @@ this._localBounds = null; }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/canvas/utils/CanvasGraphics":69,"../textures/Texture":101,"./GraphicsData":43}],43:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/canvas/utils/CanvasGraphics":70,"../textures/Texture":102,"./GraphicsData":44}],44:[function(require,module,exports){ /** * A GraphicsData object. * @@ -10880,7 +10933,7 @@ this.shape = null; }; -},{}],44:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ var utils = require('../../utils'), math = require('../../math'), CONST = require('../../const'), @@ -11200,7 +11253,7 @@ }; -},{"../../const":38,"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils":107,"./WebGLGraphicsData":45,"./shaders/PrimitiveShader":46,"./utils/buildCircle":47,"./utils/buildComplexPoly":48,"./utils/buildLine":49,"./utils/buildPoly":50,"./utils/buildRectangle":51,"./utils/buildRoundedRectangle":52,"earcut":24}],45:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils":108,"./WebGLGraphicsData":46,"./shaders/PrimitiveShader":47,"./utils/buildCircle":48,"./utils/buildComplexPoly":49,"./utils/buildLine":50,"./utils/buildPoly":51,"./utils/buildRectangle":52,"./utils/buildRoundedRectangle":53,"earcut":24}],46:[function(require,module,exports){ /** * An object containing WebGL specific properties to be used by the WebGL renderer * @@ -11318,7 +11371,7 @@ this.glIndices = null; }; -},{}],46:[function(require,module,exports){ +},{}],47:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -11370,7 +11423,7 @@ module.exports = PrimitiveShader; -},{"pixi-gl-core":1}],47:[function(require,module,exports){ +},{"pixi-gl-core":1}],48:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11457,7 +11510,7 @@ module.exports = buildCircle; -},{"../../../utils":107,"./buildLine":49}],48:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],49:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11528,7 +11581,7 @@ module.exports = buildComplexPoly; -},{"../../../utils":107,"./buildLine":49}],49:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],50:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'); @@ -11748,7 +11801,7 @@ }; module.exports = buildLine; -},{"../../../math":56,"../../../utils":107}],50:[function(require,module,exports){ +},{"../../../math":57,"../../../utils":108}],51:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -11811,7 +11864,7 @@ module.exports = buildPoly; -},{"../../../utils":107}],51:[function(require,module,exports){ +},{"../../../utils":108}],52:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11882,7 +11935,7 @@ }; module.exports = buildRectangle; -},{"../../../utils":107,"./buildLine":49}],52:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],53:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -12010,7 +12063,7 @@ module.exports = buildRoundedRectangle; -},{"../../../utils":107,"./buildLine":49}],53:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],54:[function(require,module,exports){ /** * @file Main export of the PIXI core library * @author Mat Groves @@ -12106,7 +12159,7 @@ } }); -},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":42,"./graphics/GraphicsData":43,"./graphics/webgl/GraphicsRenderer":44,"./math":56,"./particles/ParticleContainer":62,"./particles/webgl/ParticleRenderer":64,"./renderers/canvas/CanvasRenderer":67,"./renderers/canvas/utils/CanvasBuffer":68,"./renderers/canvas/utils/CanvasGraphics":69,"./renderers/webgl/WebGLRenderer":73,"./renderers/webgl/filters/AbstractFilter":74,"./renderers/webgl/filters/FXAAFilter":75,"./renderers/webgl/filters/SpriteMaskFilter":76,"./renderers/webgl/managers/ShaderManager":80,"./renderers/webgl/managers/WebGLManager":82,"./renderers/webgl/shaders/Shader":85,"./renderers/webgl/utils/ObjectRenderer":88,"./renderers/webgl/utils/RenderTarget":90,"./sprites/Sprite":94,"./sprites/webgl/SpriteRenderer":95,"./text/Text":97,"./textures/BaseRenderTexture":98,"./textures/BaseTexture":99,"./textures/RenderTexture":100,"./textures/Texture":101,"./textures/TextureUvs":102,"./textures/VideoBaseTexture":103,"./ticker":105,"./utils":107,"pixi-gl-core":1}],54:[function(require,module,exports){ +},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":43,"./graphics/GraphicsData":44,"./graphics/webgl/GraphicsRenderer":45,"./math":57,"./particles/ParticleContainer":63,"./particles/webgl/ParticleRenderer":65,"./renderers/canvas/CanvasRenderer":68,"./renderers/canvas/utils/CanvasBuffer":69,"./renderers/canvas/utils/CanvasGraphics":70,"./renderers/webgl/WebGLRenderer":74,"./renderers/webgl/filters/AbstractFilter":75,"./renderers/webgl/filters/FXAAFilter":76,"./renderers/webgl/filters/SpriteMaskFilter":77,"./renderers/webgl/managers/ShaderManager":81,"./renderers/webgl/managers/WebGLManager":83,"./renderers/webgl/shaders/Shader":86,"./renderers/webgl/utils/ObjectRenderer":89,"./renderers/webgl/utils/RenderTarget":91,"./sprites/Sprite":95,"./sprites/webgl/SpriteRenderer":96,"./text/Text":98,"./textures/BaseRenderTexture":99,"./textures/BaseTexture":100,"./textures/RenderTexture":101,"./textures/Texture":102,"./textures/TextureUvs":103,"./textures/VideoBaseTexture":104,"./ticker":106,"./utils":108,"pixi-gl-core":1}],55:[function(require,module,exports){ // @todo - ignore the too many parameters warning for now // should either fix it or change the jshint config // jshint -W072 @@ -12546,7 +12599,7 @@ */ Matrix.TEMP_MATRIX = new Matrix(); -},{"./Point":55}],55:[function(require,module,exports){ +},{"./Point":56}],56:[function(require,module,exports){ /** * The Point object represents a location in a two-dimensional coordinate system, where x represents * the horizontal axis and y represents the vertical axis. @@ -12616,7 +12669,7 @@ this.y = y || ( (y !== 0) ? this.x : 0 ) ; }; -},{}],56:[function(require,module,exports){ +},{}],57:[function(require,module,exports){ /** * Math classes and utilities mixed into PIXI namespace. * @@ -12638,7 +12691,7 @@ RoundedRectangle: require('./shapes/RoundedRectangle') }; -},{"./Matrix":54,"./Point":55,"./shapes/Circle":57,"./shapes/Ellipse":58,"./shapes/Polygon":59,"./shapes/Rectangle":60,"./shapes/RoundedRectangle":61}],57:[function(require,module,exports){ +},{"./Matrix":55,"./Point":56,"./shapes/Circle":58,"./shapes/Ellipse":59,"./shapes/Polygon":60,"./shapes/Rectangle":61,"./shapes/RoundedRectangle":62}],58:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12726,7 +12779,7 @@ return new Rectangle(this.x - this.radius, this.y - this.radius, this.radius * 2, this.radius * 2); }; -},{"../../const":38,"./Rectangle":60}],58:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],59:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12821,7 +12874,7 @@ return new Rectangle(this.x - this.width, this.y - this.height, this.width, this.height); }; -},{"../../const":38,"./Rectangle":60}],59:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],60:[function(require,module,exports){ var Point = require('../Point'), CONST = require('../../const'); @@ -12924,7 +12977,7 @@ return inside; }; -},{"../../const":38,"../Point":55}],60:[function(require,module,exports){ +},{"../../const":38,"../Point":56}],61:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13018,7 +13071,7 @@ return false; }; -},{"../../const":38}],61:[function(require,module,exports){ +},{"../../const":38}],62:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13110,7 +13163,7 @@ return false; }; -},{"../../const":38}],62:[function(require,module,exports){ +},{"../../const":38}],63:[function(require,module,exports){ var Container = require('../display/Container'), CONST = require('../const'); @@ -13429,7 +13482,7 @@ this._buffers = null; }; -},{"../const":38,"../display/Container":39}],63:[function(require,module,exports){ +},{"../const":38,"../display/Container":39}],64:[function(require,module,exports){ /** * @author Mat Groves @@ -13649,7 +13702,7 @@ this.gl.deleteBuffer(this.staticBuffer); }; -},{}],64:[function(require,module,exports){ +},{}],65:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), ParticleShader = require('./ParticleShader'), @@ -14125,7 +14178,7 @@ this.tempMatrix = null; }; -},{"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"./ParticleBuffer":63,"./ParticleShader":65}],65:[function(require,module,exports){ +},{"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"./ParticleBuffer":64,"./ParticleShader":66}],66:[function(require,module,exports){ var TextureShader = require('../../renderers/webgl/shaders/TextureShader'); /** @@ -14203,7 +14256,7 @@ module.exports = ParticleShader; -},{"../../renderers/webgl/shaders/TextureShader":86}],66:[function(require,module,exports){ +},{"../../renderers/webgl/shaders/TextureShader":87}],67:[function(require,module,exports){ var utils = require('../utils'), math = require('../math'), CONST = require('../const'), @@ -14464,7 +14517,7 @@ this._backgroundColorString = null; }; -},{"../const":38,"../math":56,"../utils":107,"eventemitter3":25}],67:[function(require,module,exports){ +},{"../const":38,"../math":57,"../utils":108,"eventemitter3":25}],68:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), CanvasMaskManager = require('./utils/CanvasMaskManager'), utils = require('../../utils'), @@ -14732,7 +14785,7 @@ } }; -},{"../../const":38,"../../math":56,"../../utils":107,"../SystemRenderer":66,"./utils/CanvasMaskManager":70}],68:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../utils":108,"../SystemRenderer":67,"./utils/CanvasMaskManager":71}],69:[function(require,module,exports){ /** * Creates a Canvas element of the given size. * @@ -14832,7 +14885,7 @@ this.canvas = null; }; -},{}],69:[function(require,module,exports){ +},{}],70:[function(require,module,exports){ var CONST = require('../../../const'); /** @@ -15186,7 +15239,7 @@ }; -},{"../../../const":38}],70:[function(require,module,exports){ +},{"../../../const":38}],71:[function(require,module,exports){ var CanvasGraphics = require('./CanvasGraphics'); /** @@ -15248,7 +15301,7 @@ CanvasMaskManager.prototype.destroy = function () {}; -},{"./CanvasGraphics":69}],71:[function(require,module,exports){ +},{"./CanvasGraphics":70}],72:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -15500,7 +15553,7 @@ */ CanvasTinter.tintMethod = CanvasTinter.canUseMultiply ? CanvasTinter.tintWithMultiply : CanvasTinter.tintWithPerPixel; -},{"../../../utils":107}],72:[function(require,module,exports){ +},{"../../../utils":108}],73:[function(require,module,exports){ var GLTexture = require('pixi-gl-core').GLTexture, utils = require('../../utils'); @@ -15640,7 +15693,7 @@ module.exports = TextureManager; -},{"../../utils":107,"pixi-gl-core":1}],73:[function(require,module,exports){ +},{"../../utils":108,"pixi-gl-core":1}],74:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), ShaderManager = require('./managers/ShaderManager'), MaskManager = require('./managers/MaskManager'), @@ -16037,7 +16090,7 @@ }; -},{"../../const":38,"../../utils":107,"../SystemRenderer":66,"./TextureManager":72,"./filters/FXAAFilter":75,"./managers/BlendModeManager":77,"./managers/FilterManager":78,"./managers/MaskManager":79,"./managers/ShaderManager":80,"./managers/StencilManager":81,"./utils/ObjectRenderer":88,"./utils/RenderTarget":90,"./utils/mapWebGLBlendModesToPixi":92,"./utils/mapWebGLDrawModesToPixi":93,"pixi-gl-core":1}],74:[function(require,module,exports){ +},{"../../const":38,"../../utils":108,"../SystemRenderer":67,"./TextureManager":73,"./filters/FXAAFilter":76,"./managers/BlendModeManager":78,"./managers/FilterManager":79,"./managers/MaskManager":80,"./managers/ShaderManager":81,"./managers/StencilManager":82,"./utils/ObjectRenderer":89,"./utils/RenderTarget":91,"./utils/mapWebGLBlendModesToPixi":93,"./utils/mapWebGLDrawModesToPixi":94,"pixi-gl-core":1}],75:[function(require,module,exports){ var DefaultShader = require('../shaders/TextureShader'); /** @@ -16149,7 +16202,7 @@ } }; -},{"../shaders/TextureShader":86}],75:[function(require,module,exports){ +},{"../shaders/TextureShader":87}],76:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'); // @see https://github.com/substack/brfs/issues/25 @@ -16204,7 +16257,7 @@ filterManager.applyFilter(shader, input, output); }; -},{"./AbstractFilter":74}],76:[function(require,module,exports){ +},{"./AbstractFilter":75}],77:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'), math = require('../../../math'); @@ -16301,7 +16354,7 @@ } }); -},{"../../../math":56,"./AbstractFilter":74}],77:[function(require,module,exports){ +},{"../../../math":57,"./AbstractFilter":75}],78:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'); /** @@ -16345,7 +16398,7 @@ return true; }; -},{"./WebGLManager":82}],78:[function(require,module,exports){ +},{"./WebGLManager":83}],79:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), RenderTarget = require('../utils/RenderTarget'), CONST = require('../../../const'), @@ -16797,7 +16850,7 @@ this.texturePool = null; }; -},{"../../../const":38,"../../../math":56,"../utils/Quad":89,"../utils/RenderTarget":90,"./WebGLManager":82}],79:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../utils/Quad":90,"../utils/RenderTarget":91,"./WebGLManager":83}],80:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), AlphaMaskFilter = require('../filters/SpriteMaskFilter'); @@ -16912,7 +16965,7 @@ }; -},{"../filters/SpriteMaskFilter":76,"./WebGLManager":82}],80:[function(require,module,exports){ +},{"../filters/SpriteMaskFilter":77,"./WebGLManager":83}],81:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), TextureShader = require('../shaders/TextureShader'), ComplexPrimitiveShader = require('../shaders/ComplexPrimitiveShader'), @@ -17082,7 +17135,7 @@ this.tempAttribState = null; }; -},{"../../../utils":107,"../shaders/ComplexPrimitiveShader":83,"../shaders/PrimitiveShader":84,"../shaders/TextureShader":86,"./WebGLManager":82}],81:[function(require,module,exports){ +},{"../../../utils":108,"../shaders/ComplexPrimitiveShader":84,"../shaders/PrimitiveShader":85,"../shaders/TextureShader":87,"./WebGLManager":83}],82:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), utils = require('../../../utils'); @@ -17449,7 +17502,7 @@ }; -},{"../../../utils":107,"./WebGLManager":82}],82:[function(require,module,exports){ +},{"../../../utils":108,"./WebGLManager":83}],83:[function(require,module,exports){ /** * @class * @memberof PIXI @@ -17490,7 +17543,7 @@ this.renderer = null; }; -},{}],83:[function(require,module,exports){ +},{}],84:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17552,7 +17605,7 @@ ComplexPrimitiveShader.prototype.constructor = ComplexPrimitiveShader; module.exports = ComplexPrimitiveShader; -},{"./Shader":85}],84:[function(require,module,exports){ +},{"./Shader":86}],85:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17615,7 +17668,7 @@ PrimitiveShader.prototype.constructor = PrimitiveShader; module.exports = PrimitiveShader; -},{"./Shader":85}],85:[function(require,module,exports){ +},{"./Shader":86}],86:[function(require,module,exports){ /*global console */ var utils = require('../../../utils'); @@ -18143,7 +18196,7 @@ return shader; }; -},{"../../../utils":107}],86:[function(require,module,exports){ +},{"../../../utils":108}],87:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -18254,7 +18307,7 @@ '}' ].join('\n'); -},{"./Shader":85}],87:[function(require,module,exports){ +},{"./Shader":86}],88:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -18335,7 +18388,7 @@ '}' ].join('\n'); -},{"pixi-gl-core":1}],88:[function(require,module,exports){ +},{"pixi-gl-core":1}],89:[function(require,module,exports){ var WebGLManager = require('../managers/WebGLManager'); /** @@ -18393,7 +18446,7 @@ // render the object }; -},{"../managers/WebGLManager":82}],89:[function(require,module,exports){ +},{"../managers/WebGLManager":83}],90:[function(require,module,exports){ /** * Helper class to create a quad * @@ -18548,7 +18601,7 @@ -},{}],90:[function(require,module,exports){ +},{}],91:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'), CONST = require('../../../const'), @@ -18853,7 +18906,7 @@ this.texture = null; }; -},{"../../../const":38,"../../../math":56,"../../../utils":107,"./StencilMaskStack":91,"pixi-gl-core":1}],91:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../../../utils":108,"./StencilMaskStack":92,"pixi-gl-core":1}],92:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -18886,7 +18939,7 @@ StencilMaskStack.prototype.constructor = StencilMaskStack; module.exports = StencilMaskStack; -},{}],92:[function(require,module,exports){ +},{}],93:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18923,7 +18976,7 @@ module.exports = mapWebGLBlendModesToPixi; -},{"../../../const":38}],93:[function(require,module,exports){ +},{"../../../const":38}],94:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18947,7 +19000,7 @@ module.exports = mapWebGLDrawModesToPixi; -},{"../../../const":38}],94:[function(require,module,exports){ +},{"../../../const":38}],95:[function(require,module,exports){ var math = require('../math'), Texture = require('../textures/Texture'), Container = require('../display/Container'), @@ -19043,7 +19096,6 @@ // call texture setter this.texture = texture || Texture.EMPTY; this.textureDirty = true - this.vertexDirty = true; this.vertexData = new Float32Array(8); } @@ -19153,7 +19205,6 @@ Sprite.prototype.caclulateVertices = function () { - var texture = this._texture, wt = this.transform.worldTransform, a = wt.a, b = wt.b, c = wt.c, d = wt.d, tx = wt.tx, ty = wt.ty, @@ -19208,22 +19259,11 @@ */ Sprite.prototype._renderWebGL = function (renderer) { - if(this.textureDirty) + if(this.transform.updated || this.textureDirty) { this.textureDirty = false; - - this._onTextureUpdate(); - - this.vertexDirty = true; - } - - if(this.vertexDirty) - { - this.vertexDirty = false; - // set the vertex data this.caclulateVertices(); - } renderer.setObjectRenderer(renderer.plugins.sprite); @@ -19566,7 +19606,7 @@ return new Sprite(Texture.fromImage(imageId, crossorigin, scaleMode)); }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasTinter":71,"../textures/Texture":101,"../utils":107}],95:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasTinter":72,"../textures/Texture":102,"../utils":108}],96:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), TextureShader = require('../../renderers/webgl/shaders/_TextureShader'), @@ -19927,7 +19967,7 @@ this.shader = null; }; -},{"../../const":38,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/shaders/_TextureShader":87,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils/createIndicesForQuads":106,"./generateMultiTextureShader":96,"pixi-gl-core":1}],96:[function(require,module,exports){ +},{"../../const":38,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/shaders/_TextureShader":88,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils/createIndicesForQuads":107,"./generateMultiTextureShader":97,"pixi-gl-core":1}],97:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; @@ -19990,7 +20030,7 @@ module.exports = generateMultiTextureShader; -},{"pixi-gl-core":1}],97:[function(require,module,exports){ +},{"pixi-gl-core":1}],98:[function(require,module,exports){ var Sprite = require('../sprites/Sprite'), Texture = require('../textures/Texture'), math = require('../math'), @@ -20611,7 +20651,7 @@ this._texture.destroy(destroyBaseTexture === undefined ? true : destroyBaseTexture); }; -},{"../const":38,"../math":56,"../sprites/Sprite":94,"../textures/Texture":101,"../utils":107}],98:[function(require,module,exports){ +},{"../const":38,"../math":57,"../sprites/Sprite":95,"../textures/Texture":102,"../utils":108}],99:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), Texture = require('./Texture'), RenderTarget = require('../renderers/webgl/utils/RenderTarget'), @@ -21095,7 +21135,7 @@ return this.getPixels(tempRect); }; -},{"../const":38,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/webgl/managers/FilterManager":78,"../renderers/webgl/utils/RenderTarget":90,"./BaseTexture":99,"./Texture":101}],99:[function(require,module,exports){ +},{"../const":38,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/webgl/managers/FilterManager":79,"../renderers/webgl/utils/RenderTarget":91,"./BaseTexture":100,"./Texture":102}],100:[function(require,module,exports){ var utils = require('../utils'), CONST = require('../const'), EventEmitter = require('eventemitter3'); @@ -21532,7 +21572,7 @@ return baseTexture; }; -},{"../const":38,"../utils":107,"eventemitter3":25}],100:[function(require,module,exports){ +},{"../const":38,"../utils":108,"eventemitter3":25}],101:[function(require,module,exports){ var BaseRenderTexture = require('./BaseRenderTexture'), Texture = require('./Texture'), math = require('../math'), @@ -21727,7 +21767,7 @@ } -},{"../const":38,"../math":56,"./BaseRenderTexture":98,"./Texture":101}],101:[function(require,module,exports){ +},{"../const":38,"../math":57,"./BaseRenderTexture":99,"./Texture":102}],102:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), VideoBaseTexture = require('./VideoBaseTexture'), TextureUvs = require('./TextureUvs'), @@ -22153,7 +22193,7 @@ */ Texture.EMPTY = new Texture(new BaseTexture()); -},{"../math":56,"../utils":107,"./BaseTexture":99,"./TextureUvs":102,"./VideoBaseTexture":103,"eventemitter3":25}],102:[function(require,module,exports){ +},{"../math":57,"../utils":108,"./BaseTexture":100,"./TextureUvs":103,"./VideoBaseTexture":104,"eventemitter3":25}],103:[function(require,module,exports){ /** * A standard object to store the Uvs of a texture @@ -22234,7 +22274,7 @@ this.uvs_uint32[3] = (((this.y3 * 65535) & 0xFFFF) << 16) | ((this.x3 * 65535) & 0xFFFF); }; -},{}],103:[function(require,module,exports){ +},{}],104:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), utils = require('../utils'); @@ -22471,7 +22511,7 @@ return source; } -},{"../utils":107,"./BaseTexture":99}],104:[function(require,module,exports){ +},{"../utils":108,"./BaseTexture":100}],105:[function(require,module,exports){ var CONST = require('../const'), EventEmitter = require('eventemitter3'), // Internal event used by composed emitter @@ -22826,7 +22866,7 @@ module.exports = Ticker; -},{"../const":38,"eventemitter3":25}],105:[function(require,module,exports){ +},{"../const":38,"eventemitter3":25}],106:[function(require,module,exports){ var Ticker = require('./Ticker'); /** @@ -22882,7 +22922,7 @@ Ticker: Ticker }; -},{"./Ticker":104}],106:[function(require,module,exports){ +},{"./Ticker":105}],107:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -22915,7 +22955,7 @@ }; module.exports = createIndicesForQuads; -},{}],107:[function(require,module,exports){ +},{}],108:[function(require,module,exports){ var CONST = require('../const'); /** @@ -23192,7 +23232,7 @@ BaseTextureCache: {} }; -},{"../const":38,"./pluginTarget":108,"async":16,"eventemitter3":25}],108:[function(require,module,exports){ +},{"../const":38,"./pluginTarget":109,"async":16,"eventemitter3":25}],109:[function(require,module,exports){ /** * Mixins functionality to make an object have "plugins". * @@ -23262,7 +23302,7 @@ } }; -},{}],109:[function(require,module,exports){ +},{}],110:[function(require,module,exports){ /*global console */ var core = require('./core'), mesh = require('./mesh'), @@ -23613,7 +23653,7 @@ return core.utils.uid(); }; -},{"./core":53,"./extras":116,"./filters":133,"./mesh":158}],110:[function(require,module,exports){ +},{"./core":54,"./extras":117,"./filters":134,"./mesh":159}],111:[function(require,module,exports){ var core = require('../core'); /** @@ -24001,7 +24041,7 @@ BitmapText.fonts = {}; -},{"../core":53}],111:[function(require,module,exports){ +},{"../core":54}],112:[function(require,module,exports){ var core = require('../core'); /** @@ -24321,7 +24361,7 @@ return new MovieClip(textures); }; -},{"../core":53}],112:[function(require,module,exports){ +},{"../core":54}],113:[function(require,module,exports){ var core = require('../core'), // a sprite use dfor rendering textures.. tempPoint = new core.Point(), @@ -24773,7 +24813,7 @@ return new TilingSprite(core.Texture.fromImage(imageId, crossorigin, scaleMode),width,height); }; -},{"../core":53,"../core/renderers/canvas/utils/CanvasTinter":71}],113:[function(require,module,exports){ +},{"../core":54,"../core/renderers/canvas/utils/CanvasTinter":72}],114:[function(require,module,exports){ var core = require('../core'), DisplayObject = core.DisplayObject, _tempMatrix = new core.Matrix(); @@ -25045,7 +25085,7 @@ this._originalDestroy(); }; -},{"../core":53}],114:[function(require,module,exports){ +},{"../core":54}],115:[function(require,module,exports){ var core = require('../core'); /** @@ -25075,7 +25115,7 @@ return null; }; -},{"../core":53}],115:[function(require,module,exports){ +},{"../core":54}],116:[function(require,module,exports){ var core = require('../core'); /** @@ -25105,7 +25145,7 @@ return point; }; -},{"../core":53}],116:[function(require,module,exports){ +},{"../core":54}],117:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -25126,7 +25166,7 @@ BitmapText: require('./BitmapText') }; -},{"./BitmapText":110,"./MovieClip":111,"./TilingSprite":112,"./cacheAsBitmap":113,"./getChildByName":114,"./getGlobalPosition":115}],117:[function(require,module,exports){ +},{"./BitmapText":111,"./MovieClip":112,"./TilingSprite":113,"./cacheAsBitmap":114,"./getChildByName":115,"./getGlobalPosition":116}],118:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25183,7 +25223,7 @@ } }); -},{"../../core":53}],118:[function(require,module,exports){ +},{"../../core":54}],119:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYFilter = require('../blur/BlurYFilter'); @@ -25284,7 +25324,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"../blur/BlurYFilter":122}],119:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"../blur/BlurYFilter":123}],120:[function(require,module,exports){ var core = require('../../core'); @@ -25426,7 +25466,7 @@ } }); -},{"../../core":53}],120:[function(require,module,exports){ +},{"../../core":54}],121:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('./BlurXFilter'), BlurYFilter = require('./BlurYFilter'); @@ -25536,7 +25576,7 @@ } }); -},{"../../core":53,"./BlurXFilter":121,"./BlurYFilter":122}],121:[function(require,module,exports){ +},{"../../core":54,"./BlurXFilter":122,"./BlurYFilter":123}],122:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25629,7 +25669,7 @@ } }); -},{"../../core":53}],122:[function(require,module,exports){ +},{"../../core":54}],123:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25715,7 +25755,7 @@ } }); -},{"../../core":53}],123:[function(require,module,exports){ +},{"../../core":54}],124:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25745,7 +25785,7 @@ SmartBlurFilter.prototype.constructor = SmartBlurFilter; module.exports = SmartBlurFilter; -},{"../../core":53}],124:[function(require,module,exports){ +},{"../../core":54}],125:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26281,7 +26321,7 @@ } }); -},{"../../core":53}],125:[function(require,module,exports){ +},{"../../core":54}],126:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26330,7 +26370,7 @@ } }); -},{"../../core":53}],126:[function(require,module,exports){ +},{"../../core":54}],127:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26421,7 +26461,7 @@ } }); -},{"../../core":53}],127:[function(require,module,exports){ +},{"../../core":54}],128:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26447,7 +26487,7 @@ CrossHatchFilter.prototype.constructor = CrossHatchFilter; module.exports = CrossHatchFilter; -},{"../../core":53}],128:[function(require,module,exports){ +},{"../../core":54}],129:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26531,7 +26571,7 @@ } }); -},{"../../core":53}],129:[function(require,module,exports){ +},{"../../core":54}],130:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26603,7 +26643,7 @@ } }); -},{"../../core":53}],130:[function(require,module,exports){ +},{"../../core":54}],131:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26694,7 +26734,7 @@ } }); -},{"../../core":53}],131:[function(require,module,exports){ +},{"../../core":54}],132:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYTintFilter = require('./BlurYTintFilter'); @@ -26887,7 +26927,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"./BlurYTintFilter":130}],132:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"./BlurYTintFilter":131}],133:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26936,7 +26976,7 @@ } }); -},{"../../core":53}],133:[function(require,module,exports){ +},{"../../core":54}],134:[function(require,module,exports){ /** * @file Main export of the PIXI filters library * @author Mat Groves @@ -26975,7 +27015,7 @@ TwistFilter: require('./twist/TwistFilter') }; -},{"./ascii/AsciiFilter":117,"./bloom/BloomFilter":118,"./blur/BlurDirFilter":119,"./blur/BlurFilter":120,"./blur/BlurXFilter":121,"./blur/BlurYFilter":122,"./blur/SmartBlurFilter":123,"./color/ColorMatrixFilter":124,"./color/ColorStepFilter":125,"./convolution/ConvolutionFilter":126,"./crosshatch/CrossHatchFilter":127,"./displacement/DisplacementFilter":128,"./dot/DotScreenFilter":129,"./dropshadow/DropShadowFilter":131,"./gray/GrayFilter":132,"./invert/InvertFilter":134,"./noise/NoiseFilter":135,"./pixelate/PixelateFilter":136,"./rgb/RGBSplitFilter":137,"./sepia/SepiaFilter":138,"./shockwave/ShockwaveFilter":139,"./tiltshift/TiltShiftFilter":141,"./tiltshift/TiltShiftXFilter":142,"./tiltshift/TiltShiftYFilter":143,"./twist/TwistFilter":144}],134:[function(require,module,exports){ +},{"./ascii/AsciiFilter":118,"./bloom/BloomFilter":119,"./blur/BlurDirFilter":120,"./blur/BlurFilter":121,"./blur/BlurXFilter":122,"./blur/BlurYFilter":123,"./blur/SmartBlurFilter":124,"./color/ColorMatrixFilter":125,"./color/ColorStepFilter":126,"./convolution/ConvolutionFilter":127,"./crosshatch/CrossHatchFilter":128,"./displacement/DisplacementFilter":129,"./dot/DotScreenFilter":130,"./dropshadow/DropShadowFilter":132,"./gray/GrayFilter":133,"./invert/InvertFilter":135,"./noise/NoiseFilter":136,"./pixelate/PixelateFilter":137,"./rgb/RGBSplitFilter":138,"./sepia/SepiaFilter":139,"./shockwave/ShockwaveFilter":140,"./tiltshift/TiltShiftFilter":142,"./tiltshift/TiltShiftXFilter":143,"./tiltshift/TiltShiftYFilter":144,"./twist/TwistFilter":145}],135:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27025,7 +27065,7 @@ } }); -},{"../../core":53}],135:[function(require,module,exports){ +},{"../../core":54}],136:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27080,7 +27120,7 @@ } }); -},{"../../core":53}],136:[function(require,module,exports){ +},{"../../core":54}],137:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27131,7 +27171,7 @@ } }); -},{"../../core":53}],137:[function(require,module,exports){ +},{"../../core":54}],138:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27217,7 +27257,7 @@ } }); -},{"../../core":53}],138:[function(require,module,exports){ +},{"../../core":54}],139:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27267,7 +27307,7 @@ } }); -},{"../../core":53}],139:[function(require,module,exports){ +},{"../../core":54}],140:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27355,7 +27395,7 @@ } }); -},{"../../core":53}],140:[function(require,module,exports){ +},{"../../core":54}],141:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27480,7 +27520,7 @@ } }); -},{"../../core":53}],141:[function(require,module,exports){ +},{"../../core":54}],142:[function(require,module,exports){ var core = require('../../core'), TiltShiftXFilter = require('./TiltShiftXFilter'), TiltShiftYFilter = require('./TiltShiftYFilter'); @@ -27590,7 +27630,7 @@ } }); -},{"../../core":53,"./TiltShiftXFilter":142,"./TiltShiftYFilter":143}],142:[function(require,module,exports){ +},{"../../core":54,"./TiltShiftXFilter":143,"./TiltShiftYFilter":144}],143:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27628,7 +27668,7 @@ this.uniforms.delta.value.y = dy / d; }; -},{"./TiltShiftAxisFilter":140}],143:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],144:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27666,7 +27706,7 @@ this.uniforms.delta.value.y = dx / d; }; -},{"./TiltShiftAxisFilter":140}],144:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],145:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27751,7 +27791,7 @@ } }); -},{"../../core":53}],145:[function(require,module,exports){ +},{"../../core":54}],146:[function(require,module,exports){ (function (global){ // run the polyfills require('./polyfill'); @@ -27784,7 +27824,7 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./accessibility":37,"./core":53,"./deprecation":109,"./extras":116,"./filters":133,"./interaction":148,"./loaders":151,"./mesh":158,"./polyfill":163}],146:[function(require,module,exports){ +},{"./accessibility":37,"./core":54,"./deprecation":110,"./extras":117,"./filters":134,"./interaction":149,"./loaders":152,"./mesh":159,"./polyfill":164}],147:[function(require,module,exports){ var core = require('../core'); /** @@ -27833,7 +27873,7 @@ return displayObject.worldTransform.applyInverse(globalPos || this.global, point); }; -},{"../core":53}],147:[function(require,module,exports){ +},{"../core":54}],148:[function(require,module,exports){ var core = require('../core'), InteractionData = require('./InteractionData'); @@ -28709,7 +28749,7 @@ core.WebGLRenderer.registerPlugin('interaction', InteractionManager); core.CanvasRenderer.registerPlugin('interaction', InteractionManager); -},{"../core":53,"./InteractionData":146,"./interactiveTarget":149}],148:[function(require,module,exports){ +},{"../core":54,"./InteractionData":147,"./interactiveTarget":150}],149:[function(require,module,exports){ /** * @file Main export of the PIXI interactions library * @author Mat Groves @@ -28726,7 +28766,7 @@ interactiveTarget: require('./interactiveTarget') }; -},{"./InteractionData":146,"./InteractionManager":147,"./interactiveTarget":149}],149:[function(require,module,exports){ +},{"./InteractionData":147,"./InteractionManager":148,"./interactiveTarget":150}],150:[function(require,module,exports){ /** * Default property values of interactive objects * used by {@link PIXI.interaction.InteractionManager}. @@ -28775,7 +28815,7 @@ module.exports = interactiveTarget; -},{}],150:[function(require,module,exports){ +},{}],151:[function(require,module,exports){ var Resource = require('resource-loader').Resource, core = require('../core'), extras = require('../extras'), @@ -28896,7 +28936,7 @@ }; }; -},{"../core":53,"../extras":116,"path":17,"resource-loader":31}],151:[function(require,module,exports){ +},{"../core":54,"../extras":117,"path":17,"resource-loader":31}],152:[function(require,module,exports){ /** * @file Main export of the PIXI loaders library * @author Mat Groves @@ -28917,7 +28957,7 @@ Resource: require('resource-loader').Resource }; -},{"./bitmapFontParser":150,"./loader":152,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],152:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./loader":153,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],153:[function(require,module,exports){ var ResourceLoader = require('resource-loader'), textureParser = require('./textureParser'), spritesheetParser = require('./spritesheetParser'), @@ -28979,7 +29019,7 @@ Resource.setExtensionXhrType('fnt', Resource.XHR_RESPONSE_TYPE.DOCUMENT); -},{"./bitmapFontParser":150,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],153:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],154:[function(require,module,exports){ var Resource = require('resource-loader').Resource, path = require('path'), core = require('../core'); @@ -29063,7 +29103,7 @@ }; }; -},{"../core":53,"path":17,"resource-loader":31}],154:[function(require,module,exports){ +},{"../core":54,"path":17,"resource-loader":31}],155:[function(require,module,exports){ var core = require('../core'); module.exports = function () @@ -29085,7 +29125,7 @@ }; }; -},{"../core":53}],155:[function(require,module,exports){ +},{"../core":54}],156:[function(require,module,exports){ var core = require('../core'), tempPoint = new core.Point(), tempPolygon = new core.Polygon(); @@ -29561,7 +29601,7 @@ TRIANGLES: 1 }; -},{"../core":53}],156:[function(require,module,exports){ +},{"../core":54}],157:[function(require,module,exports){ var Mesh = require('./Mesh'); /** @@ -29687,7 +29727,7 @@ } }; -},{"./Mesh":155}],157:[function(require,module,exports){ +},{"./Mesh":156}],158:[function(require,module,exports){ var Mesh = require('./Mesh'); var core = require('../core'); @@ -29900,7 +29940,7 @@ this.containerUpdateTransform(); }; -},{"../core":53,"./Mesh":155}],158:[function(require,module,exports){ +},{"../core":54,"./Mesh":156}],159:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -29919,7 +29959,7 @@ MeshShader: require('./webgl/MeshShader') }; -},{"./Mesh":155,"./Plane":156,"./Rope":157,"./webgl/MeshRenderer":159,"./webgl/MeshShader":160}],159:[function(require,module,exports){ +},{"./Mesh":156,"./Plane":157,"./Rope":158,"./webgl/MeshRenderer":160,"./webgl/MeshShader":161}],160:[function(require,module,exports){ var core = require('../../core'), Mesh = require('../Mesh'); @@ -30148,7 +30188,7 @@ core.ObjectRenderer.prototype.destroy.call(this); }; -},{"../../core":53,"../Mesh":155}],160:[function(require,module,exports){ +},{"../../core":54,"../Mesh":156}],161:[function(require,module,exports){ var core = require('../../core'); /** @@ -30209,7 +30249,7 @@ core.ShaderManager.registerPlugin('meshShader', MeshShader); -},{"../../core":53}],161:[function(require,module,exports){ +},{"../../core":54}],162:[function(require,module,exports){ // References: // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign @@ -30225,7 +30265,7 @@ }; } -},{}],162:[function(require,module,exports){ +},{}],163:[function(require,module,exports){ // References: // https://github.com/sindresorhus/object-assign // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign @@ -30235,12 +30275,12 @@ Object.assign = require('object-assign'); } -},{"object-assign":26}],163:[function(require,module,exports){ +},{"object-assign":26}],164:[function(require,module,exports){ require('./Object.assign'); require('./requestAnimationFrame'); require('./Math.sign'); -},{"./Math.sign":161,"./Object.assign":162,"./requestAnimationFrame":164}],164:[function(require,module,exports){ +},{"./Math.sign":162,"./Object.assign":163,"./requestAnimationFrame":165}],165:[function(require,module,exports){ (function (global){ // References: // http://paulirish.com/2011/requestanimationframe-for-smart-animating/ @@ -30311,8 +30351,8 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[145])(145) +},{}]},{},[146])(146) }); -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L1RyYW5zZm9ybS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL1dlYkdMR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZENpcmNsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ29tcGxleFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZExpbmUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9NYXRyaXguanMiLCJzcmMvY29yZS9tYXRoL1BvaW50LmpzIiwic3JjL2NvcmUvbWF0aC9pbmRleC5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0NpcmNsZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0VsbGlwc2UuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Qb2x5Z29uLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZUJ1ZmZlci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL1N5c3RlbVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcy5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9UZXh0dXJlTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9GWEFBRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1F1YWQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0LmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1N0ZW5jaWxNYXNrU3RhY2suanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvc3ByaXRlcy9TcHJpdGUuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL1Nwcml0ZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvc3ByaXRlcy93ZWJnbC9nZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3RleHQvVGV4dC5qcyIsInNyYy9jb3JlL3RleHR1cmVzL0Jhc2VSZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1RleHR1cmVVdnMuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGlja2VyL1RpY2tlci5qcyIsInNyYy9jb3JlL3RpY2tlci9pbmRleC5qcyIsInNyYy9jb3JlL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcy5qcyIsInNyYy9jb3JlL3V0aWxzL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvcGx1Z2luVGFyZ2V0LmpzIiwic3JjL2RlcHJlY2F0aW9uLmpzIiwic3JjL2V4dHJhcy9CaXRtYXBUZXh0LmpzIiwic3JjL2V4dHJhcy9Nb3ZpZUNsaXAuanMiLCJzcmMvZXh0cmFzL1RpbGluZ1Nwcml0ZS5qcyIsInNyYy9leHRyYXMvY2FjaGVBc0JpdG1hcC5qcyIsInNyYy9leHRyYXMvZ2V0Q2hpbGRCeU5hbWUuanMiLCJzcmMvZXh0cmFzL2dldEdsb2JhbFBvc2l0aW9uLmpzIiwic3JjL2V4dHJhcy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2FzY2lpL0FzY2lpRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmxvb20vQmxvb21GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJEaXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJYRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9CbHVyWUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvU21hcnRCbHVyRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvclN0ZXBGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kb3QvRG90U2NyZWVuRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZHJvcHNoYWRvdy9CbHVyWVRpbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ncmF5L0dyYXlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2ludmVydC9JbnZlcnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ub2lzZS9Ob2lzZUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcmdiL1JHQlNwbGl0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvc2VwaWEvU2VwaWFGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdEF4aXNGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3R3aXN0L1R3aXN0RmlsdGVyLmpzIiwic3JjL3NyYy9pbmRleC5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbkRhdGEuanMiLCJzcmMvaW50ZXJhY3Rpb24vSW50ZXJhY3Rpb25NYW5hZ2VyLmpzIiwic3JjL2ludGVyYWN0aW9uL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL2ludGVyYWN0aXZlVGFyZ2V0LmpzIiwic3JjL2xvYWRlcnMvYml0bWFwRm9udFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL2luZGV4LmpzIiwic3JjL2xvYWRlcnMvbG9hZGVyLmpzIiwic3JjL2xvYWRlcnMvc3ByaXRlc2hlZXRQYXJzZXIuanMiLCJzcmMvbG9hZGVycy90ZXh0dXJlUGFyc2VyLmpzIiwic3JjL21lc2gvTWVzaC5qcyIsInNyYy9tZXNoL1BsYW5lLmpzIiwic3JjL21lc2gvUm9wZS5qcyIsInNyYy9tZXNoL2luZGV4LmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFJlbmRlcmVyLmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFNoYWRlci5qcyIsInNyYy9wb2x5ZmlsbC9NYXRoLnNpZ24uanMiLCJzcmMvcG9seWZpbGwvT2JqZWN0LmFzc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9pbmRleC5qcyIsInNyYy9wb2x5ZmlsbC9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM1dUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbnNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25tQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0b0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6bUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIGNyZWF0ZUNvbnRleHQ6IFx0XHRcdHJlcXVpcmUoJy4vbGliL2NyZWF0ZUNvbnRleHQnKSxcbiAgICBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM6IFx0cmVxdWlyZSgnLi9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzJyksXG4gICAgXG4gICAgR0xCdWZmZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xCdWZmZXInKSxcbiAgICBHTEZyYW1lYnVmZmVyOiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9HTEZyYW1lYnVmZmVyJyksXG4gICAgR0xTaGFkZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xTaGFkZXInKSxcbiAgICBHTFRleHR1cmU6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xUZXh0dXJlJyksXG4gICAgXG4gICAgVmVydGV4QXJyYXlPYmplY3Q6IFx0XHRyZXF1aXJlKCcuL2xpYi9WZXJ0ZXhBcnJheU9iamVjdCcpXG5cbn07IiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRU1QVFlfQVJSQVlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xuXG52YXIgQnVmZmVyID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5BUlJBWV9CVUZGRVI7XG5cdHRoaXMuZHJhd1R5cGUgPSBkcmF3VHlwZSB8fCBnbC5TVEFUSUNfRFJBVztcblx0dGhpcy5kYXRhID0gRU1QVFlfQVJSQVlfQlVGRkVSO1xuXG5cdGlmKGRhdGEpXG5cdHtcblx0XHR0aGlzLnVwbG9hZChkYXRhKTtcblx0fVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKGRhdGEsIG9mZnNldCwgZG9udEJpbmQpXG57XG5cdC8vIHRvZG8gLSBuZWVkZWQ/XG5cdC8vaWYoIWRvbnRCaW5kKVxuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRcblx0ZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuXHRvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuXHRpZih0aGlzLmRhdGEuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpXG5cdHtcdFxuXHRcdGdsLmJ1ZmZlclN1YkRhdGEodGhpcy50eXBlLCBvZmZzZXQsIGRhdGEpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLCBkYXRhLCB0aGlzLmRyYXdUeXBlKTtcblx0fVxuXG5cdHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKTtcbn1cblxuQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIGdsLkFSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgdHlwZSwgZHJhd1R5cGUpO1xufVxuXG4vL1RPRE8gRGVzdHJveS4uXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyO1xuXG4iLCJcbnZhciBUZXh0dXJlID0gcmVxdWlyZSgnLi9HTFRleHR1cmUnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgRnJhbWVidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRnJhbWVidWZmZXIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcblx0dGhpcy5zdGVuY2lsID0gbnVsbDtcblx0dGhpcy50ZXh0dXJlID0gbnVsbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMTAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5lbmFibGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IG5ldyBUZXh0dXJlKGdsKTtcblxuXHR0aGlzLnRleHR1cmUuYmluZCgpO1xuXG5cdC8vZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlLnRleHR1cmUsIDApO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlU3RlbmNpbCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5zdGVuY2lsKXJldHVybjtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuc3RlbmNpbCA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgIFxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCB0aGlzLnN0ZW5jaWwpO1xuICAgIFxuICAgIC8vIFRPRE8uLiB0aGlzIGlzIGRlcHRoIEFORCBzdGVuY2lsP1xuICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTCwgIHRoaXMud2lkdGggICwgdGhpcy5oZWlnaHQgKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oIHIsIGcsIGIsIGEgKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIGdsLmNsZWFyQ29sb3IociwgZywgYiwgYSk7XG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZnJhbWVidWZmZXIgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdGlmICggdGhpcy50ZXh0dXJlIClcbiAgICB7XG4gICAgXHR0aGlzLnRleHR1cmUudXBsb2FkRGF0YShudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdGlmICggdGhpcy5zdGVuY2lsIClcbiAgICB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgc3RlbmNpbCBidWZmZXIgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlUkdCQSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHR2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbURhdGEoZ2wsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xuXHR0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSk7XG5cbiAgICBmYm8udW5iaW5kKCk7XG4gICAgXG4gICAgcmV0dXJuIGZibztcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlRmxvYXQzMiA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHQvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZS4uXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZS5mcm9tRGF0YShnbCwgZGF0YSwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpXG5cbiAgICBmYm8udW5iaW5kKCk7XG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lYnVmZmVyO1xuXG4iLCJcbnZhciBjb21waWxlUHJvZ3JhbSA9IHJlcXVpcmUoJy4vc2hhZGVyL2NvbXBpbGVQcm9ncmFtJyksXG5cdGV4dHJhY3RBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdEF0dHJpYnV0ZXMnKSxcblx0ZXh0cmFjdFVuaWZvcm1zID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdFVuaWZvcm1zJyksXG5cdGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IHJlcXVpcmUoJy4vc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCcpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBTaGFkZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xudmFyIFNoYWRlciA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0Ly8gRmlyc3QgY29tcGlsZSB0aGUgcHJvZ3JhbS4uXG5cdHRoaXMucHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXHQvLyBuZXh0IGV4dHJhY3QgdGhlIGF0dHJpYnV0ZXNcblx0dGhpcy5hdHRyaWJ1dGVzID0gZXh0cmFjdEF0dHJpYnV0ZXMoZ2wsIHRoaXMucHJvZ3JhbSk7IFxuXG4gICAgdmFyIHVuaWZvcm1EYXRhID0gZXh0cmFjdFVuaWZvcm1zKGdsLCB0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy51bmlmb3JtcyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCggZ2wsIHVuaWZvcm1EYXRhICk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgVGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBhIFdlYkdMIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gZm9ybWF0IHtudW1iZXJ9IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlJHQkFcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IHRoZSBnbCB0eXBlIG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5VTlNJR05FRF9CWVRFXG4gKi9cbnZhciBUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHQvLyBzb21lIHNldHRpbmdzLi5cblx0dGhpcy5taXBtYXAgPSBmYWxzZTtcblxuXHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdCB8fCBnbC5SR0JBO1xuXHR0aGlzLnR5cGUgPSB0eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7XG5cblxufVxuXG4vKipcbiAqIEBwYXJhbSB7UElYSS5nbENvcmUuVGV4dHVyZX0gW3Zhcm5hbWVdIFtkZXNjcmlwdGlvbl1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oc291cmNlKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblxuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgc291cmNlKTtcbn1cblxudmFyIEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IGZhbHNlO1xuXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWREYXRhID0gZnVuY3Rpb24oZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5iaW5kKCk7XG5cdFxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgdGhpcy53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG5cblx0aWYoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcblx0e1xuXHRcdGlmKCFGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUpXG5cdFx0e1xuXHRcdFx0dmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO1xuXHRcdFx0XG5cdFx0XHRpZihleHQpXG5cdFx0XHR7XG5cdFx0XHRcdEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHlwZSA9IGdsLkZMT0FUO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdC8vIFRPRE8gc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXNcblx0XHR0aGlzLnR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuXHR9XG5cblx0Ly8gd2hhdCB0eXBlIG9mIGRhdGE/XG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcblx0Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBkYXRhIHx8IG51bGwpO1xuXG59XG5cblRleHR1cmUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihsb2NhdGlvbilcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRpZihsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKVxuXHR7XG5cdFx0Z2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uKTtcblx0fVxuXG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1pbkZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGlmKHRoaXMubWlwbWFwKVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCk7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xuXHR9XHRcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWFnRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVNaXBtYXAgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHRoaXMubWlwbWFwID0gdHJ1ZTtcblx0Z2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZUxpbmVhclNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKHRydWUpO1xuXHR0aGlzLm1hZ0ZpbHRlcih0cnVlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTmVhcmVzdFNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKGZhbHNlKTtcblx0dGhpcy5tYWdGaWx0ZXIoZmFsc2UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwQ2xhbXAgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBSZXBlYXQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cdFxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5SRVBFQVQpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG59XG5cbi8vVGV4dHVyZS5cblRleHR1cmUuZnJvbVNvdXJjZSA9IGZ1bmN0aW9uKGdsLCBzb3VyY2UsIHByZW11bHRpcGx5QWxwaGEpXG57XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhIHx8IGZhbHNlO1xuXHR0ZXh0dXJlLnVwbG9hZChzb3VyY2UpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5UZXh0dXJlLmZyb21EYXRhID0gZnVuY3Rpb24oZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdC8vY29uc29sZS5sb2coZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnVwbG9hZERhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG4iLCJcbi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxuLy8gc3RhdGUgb2JqZWN0Ly9cblxuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChnbClcbntcblx0XG5cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gKFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpXG4gICAgKTtcblxuLy9cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gbnVsbDtcblxuXHRpZih0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbilcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvID0gdGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsgIFxuXHR9XG5cblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG5cdHRoaXMuZGlydHkgPSBmYWxzZTtcblxuXHRcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVydGV4QXJyYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFZlcnRleEFycmF5T2JqZWN0O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5uYXRpdmVWYW8pOyAgXG5cblx0XHRpZih0aGlzLmRpcnR5KVxuXHRcdHtcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0XHR9XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgXG5cdHtcblx0XHR2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW2ldO1xuXHRcdGF0dHJpYi5idWZmZXIuYmluZCgpO1x0XG5cblx0XHRhdHRyaWIuYXR0cmlidXRlLnBvaW50ZXIoYXR0cmliLnR5cGUsIGF0dHJpYi5ub3JtYWxpemVkLCBhdHRyaWIuc3RyaWRlLCBhdHRyaWIuc3RhcnQpOyBcblx0XHRcblx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWIuYXR0cmlidXRlLmxvY2F0aW9uKTtcblx0fTtcblxuXHR0aGlzLmluZGV4QnVmZmVyLmJpbmQoKTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgYXR0cmlidXRlLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXJ0KVxue1xuICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHtcbiAgICBcdGJ1ZmZlcjogXHRidWZmZXIsXG4gICAgXHRhdHRyaWJ1dGU6IFx0YXR0cmlidXRlLFxuXG4gICAgXHRsb2NhdGlvbjogXHRhdHRyaWJ1dGUubG9jYXRpb24sXG5cdCBcdHR5cGU6IFx0XHR0eXBlIHx8IHRoaXMuZ2wuRkxPQVQsXG5cdCBcdG5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWQgfHwgZmFsc2UsXG5cdCBcdHN0cmlkZTogXHRzdHJpZGUgfHwgMCxcblx0IFx0c3RhcnQ6IFx0XHRzdGFydCB8fCAwXG5cdH0pXG5cblx0dGhpcy5kaXJ0eSA9IHRydWU7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRpb25zKVxue1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBidWZmZXI7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHR5cGUsIHNpemUsIHN0YXJ0KVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5kcmF3RWxlbWVudHModHlwZSwgc2l6ZSwgZ2wuVU5TSUdORURfU0hPUlQsIHN0YXJ0KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBDb250ZXh0XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIENPTlRFWFRfVUlEID0gMDtcblxudmFyIGNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbihjYW52YXMsIG9wdGlvbnMpXG57XG4gICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRpb25zKSB8fCBcbiAgICBcdCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdsKVxuICAgIHtcbiAgICAgICAgLy8gZmFpbCwgbm90IGFibGUgdG8gZ2V0IGEgY29udGV4dFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHdlYkdMLiBUcnkgdXNpbmcgdGhlIGNhbnZhcyByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIC8vIG1pZ2h0IHdhbnQgdG8gcGhhc2UgdGhpcyBvdXQ/XG4gICAgZ2wuaWQgPSBDT05URVhUX1VJRCsrO1xuXG4gICAgcmV0dXJuIGdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbnRleHQ7XG5cbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBzZXRWZXJ0ZXhBdHRyaWJBcnJheXMgPSBmdW5jdGlvbiAoZ2wsIGF0dHJpYnMpXG57XHRcbiAgIC8vIGNvbnNvbGUubG9nKGdsLmlkKVxuICAgIHZhciBkYXRhID0gR0xfTUFQW2dsLmlkXTtcblxuICAgIGlmKCFkYXRhKVxuICAgIHtcblx0ICAgdmFyIG1heEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0XHRkYXRhID0gR0xfTUFQW2dsLmlkXSA9IHt0ZW1wQXR0cmliU3RhdGU6bmV3IEFycmF5KG1heEF0dHJpYnMpXG5cdFx0XHRcdCBcdCBcdFx0ICAgLGF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKX07XG5cdH1cblx0XG4gICAgdmFyIGksXG4gICAgXHR0ZW1wQXR0cmliU3RhdGUgPSBkYXRhLnRlbXBBdHRyaWJTdGF0ZSxcbiAgICBcdGF0dHJpYlN0YXRlID0gZGF0YS5hdHRyaWJTdGF0ZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wQXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yIChpIGluIGF0dHJpYnMpXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbYXR0cmlic1tpXS5sb2NhdGlvbl0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDE7IGkgPCBhdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChhdHRyaWJTdGF0ZVtpXSAhPT0gdGVtcEF0dHJpYlN0YXRlW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJTdGF0ZVtpXSA9IHRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM7IiwiXG5cblxuXG5jb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuICAgIHZhciBnbFZlcnRTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbnZhciBjb21waWxlU2hhZGVyID0gZnVuY3Rpb24gKGdsLCB0eXBlLCBzcmMpXG57XG4gICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuXG4gICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlUHJvZ3JhbTtcblxuIiwiXG5cbnZhciBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBzaXplKSBcbntcbiAgICBzd2l0Y2ggKHR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICBjYXNlICd2ZWMyJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjNCc6ICAgICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KDQgKiBzaXplKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnaXZlYzInOiAgIFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDIgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWM0JzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2wnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY2FzZSAnYnZlYzInOlxuXG4gICAgICAgICAgICByZXR1cm4gYm9vbGVhbkFycmF5KCAyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzQnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSg0ICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDFdKTtcblxuICAgICAgICBjYXNlICdtYXQzJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0NCc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMCwgMV0pO1xuICAgIH1cbn1cblxudmFyIGJvb2xlYW5BcnJheSA9IGZ1bmN0aW9uKHNpemUpXG57XG4gICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgXG4gICAge1xuICAgICAgICBhcnJheVtpXSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdFZhbHVlO1xuIiwiXG52YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIG1hcFNpemUgPSByZXF1aXJlKCcuL21hcFNpemUnKTtcblxudmFyIGV4dHJhY3RBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcblxuICAgIHZhciB0b3RhbEF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9BVFRSSUJVVEVTKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEF0dHJpYnV0ZXM7IGkrKykgXG4gICAge1xuICAgICAgICB2YXIgYXR0cmliRGF0YSA9IGdsLmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpKTtcbiAgICAgICAgdmFyIHR5cGUgPSBtYXBUeXBlKGdsLCBhdHRyaWJEYXRhLnR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNbYXR0cmliRGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgIHR5cGU6dHlwZSxcbiAgICAgICAgICAgIHNpemU6bWFwU2l6ZSh0eXBlKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOmdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGF0dHJpYkRhdGEubmFtZSksXG4gICAgICAgICAgICAvL1RPRE8gLSBtYWtlIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAgICAgICAgICAgIHBvaW50ZXI6ZnVuY3Rpb24odHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydCl7XG5cbiAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmxvY2F0aW9uLHRoaXMuc2l6ZSwgdHlwZSB8fCBnbC5GTE9BVCwgbm9ybWFsaXplZCB8fCBmYWxzZSwgc3RyaWRlIHx8IDAsIHN0YXJ0IHx8IDApOyBcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzOyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0cmFjdEF0dHJpYnV0ZXM7XG5cbiIsInZhciBtYXBUeXBlID0gcmVxdWlyZSgnLi9tYXBUeXBlJyk7XG52YXIgZGVmYXVsdFZhbHVlID0gcmVxdWlyZSgnLi9kZWZhdWx0VmFsdWUnKTtcblxuXG52YXIgZXh0cmFjdFVuaWZvcm1zID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG5cdHZhciB1bmlmb3JtcyA9IHt9O1xuXHRcbiAgICB2YXIgdG90YWxVbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbFVuaWZvcm1zOyBpKyspIFxuICAgIHtcbiAgICBcdHZhciB1bmlmb3JtRGF0YSA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSk7XG4gICAgXHR2YXIgbmFtZSA9IHVuaWZvcm1EYXRhLm5hbWUucmVwbGFjZSgvXFxbLio/XFxdLywgXCJcIik7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgdW5pZm9ybURhdGEudHlwZSApO1xuXG4gICAgXHR1bmlmb3Jtc1tuYW1lXSA9IHtcbiAgICBcdFx0dHlwZTp0eXBlLFxuICAgIFx0XHRzaXplOnVuaWZvcm1EYXRhLnNpemUsXG4gICAgXHRcdGxvY2F0aW9uOmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSxcbiAgICBcdFx0dmFsdWU6ZGVmYXVsdFZhbHVlKHR5cGUsIHVuaWZvcm1EYXRhLnNpemUpXG4gICAgXHR9XG4gICAgfTtcblx0XG5cdHJldHVybiB1bmlmb3JtcztcdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RVbmlmb3JtcztcblxuIiwiXG52YXIgZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gZnVuY3Rpb24oZ2wsIHVuaWZvcm1EYXRhKVxue1xuICAgIC8vIHRoaXMgaXMgdGhlIG9iamVjdCB3ZSB3aWxsIGJlIHNlbmRpbmcgYmFjay5cbiAgICAvLyBhbiBvYmplY3QgaGllcmFjaHkgd2lsbCBiZSBjcmVhdGVkIGZvciBzdHJ1Y3RzXG4gICAgdmFyIHVuaWZvcm1zID0ge2RhdGE6e319O1xuXG4gICAgdW5pZm9ybXMuZ2wgPSBnbDtcbiAgICBcbiAgICB2YXIgdW5pZm9ybUtleXM9IE9iamVjdC5rZXlzKHVuaWZvcm1EYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybUtleXMubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGZ1bGxOYW1lID0gdW5pZm9ybUtleXNbaV1cblxuICAgICAgICB2YXIgbmFtZVRva2VucyA9IGZ1bGxOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHZhciB1bmlmb3JtR3JvdXAgPSBnZXRVbmlmb3JtR3JvdXAobmFtZVRva2VucywgdW5pZm9ybXMpO1xuXG4gICAgICAgIHZhciB1bmlmb3JtID0gIHVuaWZvcm1EYXRhW2Z1bGxOYW1lXTtcbiAgICAgICAgdW5pZm9ybUdyb3VwLmRhdGFbbmFtZV0gPSB1bmlmb3JtO1xuXG4gICAgICAgIHVuaWZvcm1Hcm91cC5nbCA9IGdsO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bmlmb3JtR3JvdXAsIG5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2VuZXJhdGVHZXR0ZXIobmFtZSksXG4gICAgICAgICAgICBzZXQ6IGdlbmVyYXRlU2V0dGVyKG5hbWUsIHVuaWZvcm0pXG4gICAgICAgIH0pXG4gICAgfTtcblxuICAgIHJldHVybiB1bmlmb3Jtcztcbn1cblxudmFyIGdlbmVyYXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSlcbntcblx0dmFyIHRlbXBsYXRlID0gZ2V0dGVyVGVtcGxhdGUucmVwbGFjZSgnJSUnLCBuYW1lKTtcblx0cmV0dXJuIG5ldyBGdW5jdGlvbih0ZW1wbGF0ZSk7XG59XG5cbnZhciBnZW5lcmF0ZVNldHRlciA9IGZ1bmN0aW9uKG5hbWUsIHVuaWZvcm0pXG57XG4gICAgdmFyIHRlbXBsYXRlID0gc2V0dGVyVGVtcGxhdGUucmVwbGFjZSgvJSUvZywgbmFtZSk7XG4gICAgdmFyIHNldFRlbXBsYXRlXG4gICAgXG4gICAgaWYodW5pZm9ybS5zaXplID09PSAxKVxuICAgIHtcbiAgICAgICAgc2V0VGVtcGxhdGUgPSBHTFNMX1RPX1NJTkdMRV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19BUlJBWV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuXG4gICAgaWYoc2V0VGVtcGxhdGUpXG4gICAge1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIlxcbnRoaXMuZ2wuXCIgKyBzZXRUZW1wbGF0ZSArIFwiO1wiO1xuICAgIH1cblxuICBcdHJldHVybiBuZXcgRnVuY3Rpb24oJ3ZhbHVlJywgdGVtcGxhdGUpO1xufVxuXG52YXIgZ2V0VW5pZm9ybUdyb3VwID0gZnVuY3Rpb24obmFtZVRva2VucywgdW5pZm9ybSlcbntcbiAgICB2YXIgY3VyID0gdW5pZm9ybTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZVRva2Vucy5sZW5ndGggLSAxOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIG8gPSBjdXJbbmFtZVRva2Vuc1tpXV0gfHwge2RhdGE6e319O1xuICAgICAgICBjdXJbbmFtZVRva2Vuc1tpXV0gPSBvO1xuICAgICAgICBjdXIgPSBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gY3VyXG59XG5cbnZhciBnZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAncmV0dXJuIHRoaXMuZGF0YS4lJS52YWx1ZTsnLFxuXS5qb2luKCdcXG4nKTtcblxudmFyIHNldHRlclRlbXBsYXRlID0gW1xuICAgICd0aGlzLmRhdGEuJSUudmFsdWUgPSB2YWx1ZTsnLFxuICAgICd2YXIgbG9jYXRpb24gPSB0aGlzLmRhdGEuJSUubG9jYXRpb247J1xuXS5qb2luKCdcXG4nKTtcblxuXG52YXIgR0xTTF9UT19TSU5HTEVfU0VUVEVSUyA9IHtcblxuICAgICdmbG9hdCc6ICAgICd1bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ3ZlYzQnOiAgICAgJ3VuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdidmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdidmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ21hdDInOiAgICAgJ3VuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuICAgICdtYXQzJzogICAgICd1bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0NCc6ICAgICAndW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG5cbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbnZhciBHTFNMX1RPX0FSUkFZX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpJyxcblxuICAgICd2ZWMyJzogICAgICd1bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWMzJzogICAgICd1bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgIFx0XG4gICAgJ2ludCc6ICAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgIFxuICAgICdzYW1wbGVyMkQnOid1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0O1xuXG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbih0eXBlKSBcbnsgXG4gICAgcmV0dXJuIEdMU0xfVE9fU0laRVt0eXBlXTtcbn1cblxuXG52YXIgR0xTTF9UT19TSVpFID0ge1xuICAgICdmbG9hdCc6ICAgIDEsXG4gICAgJ3ZlYzInOiAgICAgMixcbiAgICAndmVjMyc6ICAgICAzLFxuICAgICd2ZWM0JzogICAgIDQsXG5cbiAgICAnaW50JzogICAgICAxLFxuICAgICdpdmVjMic6ICAgIDIsXG4gICAgJ2l2ZWMzJzogICAgMyxcbiAgICAnaXZlYzQnOiAgICA0LFxuXG4gICAgJ2Jvb2wnOiAgICAgMSxcbiAgICAnYnZlYzInOiAgICAyLFxuICAgICdidmVjMyc6ICAgIDMsXG4gICAgJ2J2ZWM0JzogICAgNCxcblxuICAgICdtYXQyJzogICAgIDQsXG4gICAgJ21hdDMnOiAgICAgOSxcbiAgICAnbWF0NCc6ICAgICAxNixcblxuICAgICdzYW1wbGVyMkQnOiAgMVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFNpemU7XG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbihnbCwgdHlwZSkgXG57XG4gICAgaWYoIUdMX1RBQkxFKSBcbiAgICB7XG4gICAgICAgIHZhciB0eXBlTmFtZXMgPSBPYmplY3Qua2V5cyhHTF9UT19HTFNMX1RZUEVTKTtcblxuICAgICAgICBHTF9UQUJMRSA9IHt9O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlTmFtZXMubGVuZ3RoOyArK2kpIFxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdG4gPSB0eXBlTmFtZXNbaV07XG4gICAgICAgICAgICBHTF9UQUJMRVsgZ2xbdG5dIF0gPSBHTF9UT19HTFNMX1RZUEVTW3RuXTtcbiAgICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gR0xfVEFCTEVbdHlwZV07XG59XG5cbnZhciBHTF9UQUJMRSA9IG51bGw7XG5cbnZhciBHTF9UT19HTFNMX1RZUEVTID0ge1xuICAnRkxPQVQnOiAgICAgICAnZmxvYXQnLFxuICAnRkxPQVRfVkVDMic6ICAndmVjMicsXG4gICdGTE9BVF9WRUMzJzogICd2ZWMzJyxcbiAgJ0ZMT0FUX1ZFQzQnOiAgJ3ZlYzQnLFxuXG4gICdJTlQnOiAgICAgICAgICdpbnQnLFxuICAnSU5UX1ZFQzInOiAgICAnaXZlYzInLFxuICAnSU5UX1ZFQzMnOiAgICAnaXZlYzMnLFxuICAnSU5UX1ZFQzQnOiAgICAnaXZlYzQnLFxuICBcbiAgJ0JPT0wnOiAgICAgICAgJ2Jvb2wnLFxuICAnQk9PTF9WRUMyJzogICAnYnZlYzInLFxuICAnQk9PTF9WRUMzJzogICAnYnZlYzMnLFxuICAnQk9PTF9WRUM0JzogICAnYnZlYzQnLFxuICBcbiAgJ0ZMT0FUX01BVDInOiAgJ21hdDInLFxuICAnRkxPQVRfTUFUMyc6ICAnbWF0MycsXG4gICdGTE9BVF9NQVQ0JzogICdtYXQ0JyxcbiAgXG4gICdTQU1QTEVSXzJEJzogICdzYW1wbGVyMkQnICBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiLyohXG4gKiBhc3luY1xuICogaHR0cHM6Ly9naXRodWIuY29tL2Nhb2xhbi9hc3luY1xuICpcbiAqIENvcHlyaWdodCAyMDEwLTIwMTQgQ2FvbGFuIE1jTWFob25cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9Cb29sKHYpIHtcbiAgICAgICAgcmV0dXJuICEhdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90SWQodikge1xuICAgICAgICByZXR1cm4gIXY7XG4gICAgfVxuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBwcmV2aW91c19hc3luYztcblxuICAgIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAgIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICAgIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsIHx8XG4gICAgICAgICAgICB0aGlzO1xuXG4gICAgaWYgKHJvb3QgIT0gbnVsbCkge1xuICAgICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsaXR5IGZ1bmN0aW9ucyAvLy8vXG5cbiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIHZhciBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xuXG4gICAgLy8gUG9ydGVkIGZyb20gdW5kZXJzY29yZS5qcyBpc09iamVjdFxuICAgIHZhciBfaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2lzQXJyYXlMaWtlKGFycikge1xuICAgICAgICByZXR1cm4gX2lzQXJyYXkoYXJyKSB8fCAoXG4gICAgICAgICAgICAvLyBoYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAgICAgICAgdHlwZW9mIGFyci5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgICAgYXJyLmxlbmd0aCAlIDEgPT09IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXJyYXlFYWNoKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaW5kZXhdLCBpbmRleCwgYXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IGFyci5sZW5ndGgsXG4gICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcmFuZ2UoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9tYXAoQXJyYXkoY291bnQpLCBmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gaTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZHVjZShhcnIsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgIF9hcnJheUVhY2goYXJyLCBmdW5jdGlvbiAoeCwgaSwgYSkge1xuICAgICAgICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHgsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZvckVhY2hPZihvYmplY3QsIGl0ZXJhdG9yKSB7XG4gICAgICAgIF9hcnJheUVhY2goX2tleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaXRlcmF0b3Iob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbmRleE9mKGFyciwgaXRlbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9rZXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW47XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBpZiAoX2lzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGkgOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBfa2V5cyhjb2xsKTtcbiAgICAgICAgICAgIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ga2V5c1tpXSA6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2ltaWxhciB0byBFUzYncyByZXN0IHBhcmFtIChodHRwOi8vYXJpeWEub2ZpbGFicy5jb20vMjAxMy8wMy9lczYtYW5kLXJlc3QtcGFyYW1ldGVyLmh0bWwpXG4gICAgLy8gVGhpcyBhY2N1bXVsYXRlcyB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGFuIGFycmF5LCBhZnRlciBhIGdpdmVuIGluZGV4LlxuICAgIC8vIEZyb20gdW5kZXJzY29yZS5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMjE0MCkuXG4gICAgZnVuY3Rpb24gX3Jlc3RQYXJhbShmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IHVudXNlZCBidXQgaGFuZGxlIGNhc2VzIG91dHNpZGUgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQ6XG4gICAgICAgICAgICAvLyB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgIC8vIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIC8vICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgICAgICAgIC8vIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IodmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG5cbiAgICAvLyBjYXB0dXJlIHRoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIGd1YXJkIGFnYWluc3QgZmFrZVRpbWVyIG1vY2tzXG4gICAgdmFyIF9zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcblxuICAgIHZhciBfZGVsYXkgPSBfc2V0SW1tZWRpYXRlID8gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgX3NldEltbWVkaWF0ZShmbik7XG4gICAgfSA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IF9kZWxheTtcbiAgICB9XG4gICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gX3NldEltbWVkaWF0ZSA/IF9kZWxheSA6IGFzeW5jLm5leHRUaWNrO1xuXG5cbiAgICBhc3luYy5mb3JFYWNoID1cbiAgICBhc3luYy5lYWNoID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2YoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID1cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cblxuICAgIGFzeW5jLmZvckVhY2hMaW1pdCA9XG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2VhY2hPZkxpbWl0KGxpbWl0KShhcnIsIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZiA9XG4gICAgYXN5bmMuZWFjaE9mID0gZnVuY3Rpb24gKG9iamVjdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdCB8fCBbXTtcblxuICAgICAgICB2YXIgaXRlciA9IF9rZXlJdGVyYXRvcihvYmplY3QpO1xuICAgICAgICB2YXIga2V5LCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgICAgIHdoaWxlICgoa2V5ID0gaXRlcigpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXksIG9ubHlfb25jZShkb25lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkID09PSAwKSBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgICAgY29tcGxldGVkLS07XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGtleSBpcyBudWxsIGluIGNhc2UgaXRlcmF0b3IgaXNuJ3QgZXhoYXVzdGVkXG4gICAgICAgICAgICAvLyBhbmQgZG9uZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBudWxsICYmIGNvbXBsZXRlZCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaE9mU2VyaWVzID1cbiAgICBhc3luYy5lYWNoT2ZTZXJpZXMgPSBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShpdGVyYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLmZvckVhY2hPZkxpbWl0ID1cbiAgICBhc3luYy5lYWNoT2ZMaW1pdCA9IGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgX2VhY2hPZkxpbWl0KGxpbWl0KShvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9lYWNoT2ZMaW1pdChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgICAgICBvYmogPSBvYmogfHwgW107XG4gICAgICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUgJiYgcnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmICFlcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBuZXh0S2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iob2JqW2tleV0sIGtleSwgb25seV9vbmNlKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZG9QYXJhbGxlbChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oYXN5bmMuZWFjaE9mLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWxMaW1pdChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKF9lYWNoT2ZMaW1pdChsaW1pdCksIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9TZXJpZXMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZlNlcmllcywgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UoYXJyKSA/IFtdIDoge307XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih2YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9hc3luY01hcCk7XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMuaW5qZWN0ID1cbiAgICBhc3luYy5mb2xkbCA9XG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hPZlNlcmllcyhhcnIsIGZ1bmN0aW9uICh4LCBpLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgeCwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBtZW1vKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvbGRyID1cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgaWRlbnRpdHkpLnJldmVyc2UoKTtcbiAgICAgICAgYXN5bmMucmVkdWNlKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0b3I7XG4gICAgICAgICAgICBpdGVyYXRvciA9IG1lbW87XG4gICAgICAgICAgICBtZW1vID0gX2lzQXJyYXkoYXJyKSA/IFtdIDoge307XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoT2YoYXJyLCBmdW5jdGlvbih2LCBrLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgdiwgaywgY2IpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4OiBpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5zZWxlY3QgPVxuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RMaW1pdCA9XG4gICAgYXN5bmMuZmlsdGVyTGltaXQgPSBkb1BhcmFsbGVsTGltaXQoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RTZXJpZXMgPVxuICAgIGFzeW5jLmZpbHRlclNlcmllcyA9IGRvU2VyaWVzKF9maWx0ZXIpO1xuXG4gICAgZnVuY3Rpb24gX3JlamVjdChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9maWx0ZXIoZWFjaGZuLCBhcnIsIGZ1bmN0aW9uKHZhbHVlLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBjYighdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBhc3luYy5yZWplY3QgPSBkb1BhcmFsbGVsKF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdFNlcmllcyA9IGRvU2VyaWVzKF9yZWplY3QpO1xuXG4gICAgZnVuY3Rpb24gX2NyZWF0ZVRlc3RlcihlYWNoZm4sIGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYikge1xuICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIGNiKGdldFJlc3VsdChmYWxzZSwgdm9pZCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZSh4LCBfLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYiAmJiBjaGVjayh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoZ2V0UmVzdWx0KHRydWUsIHgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgZWFjaGZuKGFyciwgbGltaXQsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2IgPSBpdGVyYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGxpbWl0O1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy5hbnkgPVxuICAgIGFzeW5jLnNvbWUgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5zb21lTGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCB0b0Jvb2wsIGlkZW50aXR5KTtcblxuICAgIGFzeW5jLmFsbCA9XG4gICAgYXN5bmMuZXZlcnkgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgbm90SWQsIG5vdElkKTtcblxuICAgIGFzeW5jLmV2ZXJ5TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBub3RJZCwgbm90SWQpO1xuXG4gICAgZnVuY3Rpb24gX2ZpbmRHZXRSZXN1bHQodiwgeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgYXN5bmMuZGV0ZWN0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0U2VyaWVzID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZTZXJpZXMsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuXG4gICAgYXN5bmMuc29ydEJ5ID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLm1hcChhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKGVyciwgY3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7dmFsdWU6IHgsIGNyaXRlcmlhOiBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChjb21wYXJhdG9yKSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNvbmN1cnJlbmN5LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gcmVtYWluaW5nVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBfaW5kZXhPZihsaXN0ZW5lcnMsIGZuKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRhc2tDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLS07XG4gICAgICAgICAgICBfYXJyYXlFYWNoKGxpc3RlbmVycy5zbGljZSgwKSwgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBfYXJyYXlFYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9mb3JFYWNoT2YocmVzdWx0cywgZnVuY3Rpb24odmFsLCBya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHRhc2tDb21wbGV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRlYWQtbG9ja3NcbiAgICAgICAgICAgIHZhciBsZW4gPSByZXF1aXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZGVwO1xuICAgICAgICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZGVwID0gdGFza3NbcmVxdWlyZXNbbGVuXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGluZXhpc3RhbnQgZGVwZW5kZW5jeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzQXJyYXkoZGVwKSAmJiBfaW5kZXhPZihkZXAsIGspID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXMgY3ljbGljIGRlcGVuZGVuY2llcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5uaW5nVGFza3MgPCBjb25jdXJyZW5jeSAmJiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzKys7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLnJldHJ5ID0gZnVuY3Rpb24odGltZXMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBERUZBVUxUX1RJTUVTID0gNTtcbiAgICAgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuXG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbDogREVGQVVMVF9JTlRFUlZBTFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KXtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0ID09PSAnbnVtYmVyJyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodCwgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYodHlwZW9mIHQgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBhY2MudGltZXMgPSBwYXJzZUludCh0LnRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgICAgICAgICBhY2MuaW50ZXJ2YWwgPSBwYXJzZUludCh0LmludGVydmFsLCAxMCkgfHwgREVGQVVMVF9JTlRFUlZBTDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGZvciBcXCd0aW1lc1xcJzogJyArIHR5cGVvZiB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgMSB8fCBsZW5ndGggPiAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIC0gbXVzdCBiZSBlaXRoZXIgKHRhc2spLCAodGFzaywgY2FsbGJhY2spLCAodGltZXMsIHRhc2spIG9yICh0aW1lcywgdGFzaywgY2FsbGJhY2spJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoIDw9IDIgJiYgdHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRzLCB0aW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBvcHRzLnRhc2sgPSB0YXNrO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRUYXNrKHdyYXBwZWRDYWxsYmFjaywgd3JhcHBlZFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCh0YXNrLCBmaW5hbEF0dGVtcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VyaWVzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayhmdW5jdGlvbihlcnIsIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXNDYWxsYmFjayghZXJyIHx8IGZpbmFsQXR0ZW1wdCwge2VycjogZXJyLCByZXN1bHQ6IHJlc3VsdH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVkUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmV0cnlJbnRlcnZhbChpbnRlcnZhbCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAob3B0cy50aW1lcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsQXR0ZW1wdCA9ICEob3B0cy50aW1lcy09MSk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQob3B0cy50YXNrLCBmaW5hbEF0dGVtcHQpKTtcbiAgICAgICAgICAgICAgICBpZighZmluYWxBdHRlbXB0ICYmIG9wdHMuaW50ZXJ2YWwgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUludGVydmFsKG9wdHMuaW50ZXJ2YWwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IG9wdHMuY2FsbGJhY2spKGRhdGEuZXJyLCBkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIG9wdHMuY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2s7XG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBJdGVyYXRvcihpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgW2Vycl0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuc3VyZUFzeW5jKGl0ZXJhdG9yKS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfcGFyYWxsZWwoZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IF9pc0FycmF5TGlrZSh0YXNrcykgPyBbXSA6IHt9O1xuXG4gICAgICAgIGVhY2hmbih0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGtleSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRhc2soX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2YsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChfZWFjaE9mTGltaXQobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKGFzeW5jLmVhY2hPZlNlcmllcywgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuaXRlcmF0b3IgPSBmdW5jdGlvbiAodGFza3MpIHtcbiAgICAgICAgZnVuY3Rpb24gbWFrZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm4ubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgdGFza3MubGVuZ3RoIC0gMSkgPyBtYWtlQ2FsbGJhY2soaW5kZXggKyAxKTogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIChmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoY2FsbEFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLCBhcmdzLmNvbmNhdChjYWxsQXJncylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gX2NvbmNhdChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoeSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG4gICAgICAgIGlmICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0LmFwcGx5KHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1doaWxzdCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiArK2NhbGxzIDw9IDEgfHwgdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZHVyaW5nID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG5cbiAgICAgICAgdmFyIG5leHQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjaGVjayk7XG4gICAgICAgICAgICAgICAgdGVzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24oZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRydXRoKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QoY2hlY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb0R1cmluZyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgYXN5bmMuZHVyaW5nKGZ1bmN0aW9uKG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjYWxscysrIDwgMSkge1xuICAgICAgICAgICAgICAgIG5leHQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3F1ZXVlKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHBvcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayB8fCBub29wXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9uZXh0KHEsIHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIF9hcnJheUVhY2godGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2god29ya2Vyc0xpc3QsIGZ1bmN0aW9uICh3b3JrZXIsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya2VyID09PSB0YXNrICYmICFyZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBub29wLFxuICAgICAgICAgICAgZW1wdHk6IG5vb3AsXG4gICAgICAgICAgICBkcmFpbjogbm9vcCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5kcmFpbiA9IG5vb3A7XG4gICAgICAgICAgICAgICAgcS50YXNrcyA9IFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnQ6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrcyA9IHEucGF5bG9hZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS5wYXlsb2FkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS50YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9tYXAodGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5wdXNoKHRhc2tzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShfbmV4dChxLCB0YXNrcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyKGRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtlcnNMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSBmYWxzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bWVDb3VudCA9IE1hdGgubWluKHEuY29uY3VycmVuY3ksIHEudGFza3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHJlc3VtZUNvdW50OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBxID0gX3F1ZXVlKGZ1bmN0aW9uIChpdGVtcywgY2IpIHtcbiAgICAgICAgICAgIHdvcmtlcihpdGVtc1swXSwgY2IpO1xuICAgICAgICB9LCBjb25jdXJyZW5jeSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLnByaW9yaXR5UXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuXG4gICAgICAgIGZ1bmN0aW9uIF9jb21wYXJlVGFza3MoYSwgYil7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgICB2YXIgYmVnID0gLTEsXG4gICAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgc2VxdWVuY2VbbWlkXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWcgPSBtaWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmVnO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBfcXVldWUod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2NvbnNvbGVfZm4obmFtZSkge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2goYXJncywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlW25hbWVdKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgaWRlbnRpdHk7XG4gICAgICAgIHZhciBtZW1vaXplZCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24gbWVtb2l6ZWQoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBtZW1vW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0gPSBbY2FsbGJhY2tdO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW9ba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH07XG5cbiAgICBhc3luYy51bm1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3RpbWVzKG1hcHBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG1hcHBlcihfcmFuZ2UoY291bnQpLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jLnRpbWVzID0gX3RpbWVzKGFzeW5jLm1hcCk7XG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBfdGltZXMoYXN5bmMubWFwU2VyaWVzKTtcbiAgICBhc3luYy50aW1lc0xpbWl0ID0gZnVuY3Rpb24gKGNvdW50LCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5tYXBMaW1pdChfcmFuZ2UoY291bnQpLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VxID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5vb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnJlZHVjZShmbnMsIGFyZ3MsIGZ1bmN0aW9uIChuZXdhcmdzLCBmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBuZXdhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBuZXh0YXJncykge1xuICAgICAgICAgICAgICAgICAgICBjYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY29tcG9zZSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIF9hcHBseUVhY2goZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uKGZucywgYXJncykge1xuICAgICAgICAgICAgdmFyIGdvID0gX3Jlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgXywgY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncy5jb25jYXQoW2NiXSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ28uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ287XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmFwcGx5RWFjaCA9IF9hcHBseUVhY2goYXN5bmMuZWFjaE9mKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZlNlcmllcyk7XG5cblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seV9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIgdGFzayA9IGVuc3VyZUFzeW5jKGZuKTtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmVuc3VyZUFzeW5jID0gZW5zdXJlQXN5bmM7XG5cbiAgICBhc3luYy5jb25zdGFudCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICAgIHZhciBhcmdzID0gW251bGxdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhc3luYy53cmFwU3luYyA9XG4gICAgYXN5bmMuYXN5bmNpZnkgPSBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChfaXNPYmplY3QocmVzdWx0KSAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIubWVzc2FnZSA/IGVyciA6IG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcblxuICAgIGRpbSA9IGRpbSB8fCAyO1xuXG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLFxuICAgICAgICBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcbiAgICAgICAgdHJpYW5nbGVzID0gW107XG5cbiAgICBpZiAoIW91dGVyTm9kZSkgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBzaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgc2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIHN1bSA9IDAsXG4gICAgICAgIGksIGosIGxhc3Q7XG5cbiAgICAvLyBjYWxjdWxhdGUgb3JpZ2luYWwgd2luZGluZyBvcmRlciBvZiBhIHBvbHlnb24gcmluZ1xuICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuXG4gICAgLy8gbGluayBwb2ludHMgaW50byBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHN1bSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG4gICAgaWYgKCFzdGFydCkgcmV0dXJuIHN0YXJ0O1xuICAgIGlmICghZW5kKSBlbmQgPSBzdGFydDtcblxuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcCA9IGVuZCA9IHAucHJldjtcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuICAgIHJldHVybiBlbmQ7XG59XG5cbi8vIG1haW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBhcyBhIGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIHBhc3MpIHtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuICAgIGlmICghcGFzcyAmJiBzaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICB2YXIgc3RvcCA9IGVhcixcbiAgICAgICAgcHJldiwgbmV4dDtcblxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuICAgIHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcbiAgICAgICAgcHJldiA9IGVhci5wcmV2O1xuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XG5cbiAgICAgICAgaWYgKHNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIHNpemUpIDogaXNFYXIoZWFyKSkge1xuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXG4gICAgICAgICAgICByZW1vdmVOb2RlKGVhcik7XG5cbiAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRpY2UgbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhlYXIsIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIHNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICAvLyBmaXJzdCBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBpbmNyZWFzaW5nIHotb3JkZXJcbiAgICB2YXIgcCA9IGVhci5uZXh0WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyB0aGVuIGxvb2sgZm9yIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICBwID0gZWFyLnByZXZaO1xuXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgLy8gYSBzZWxmLWludGVyc2VjdGlvbiB3aGVyZSBlZGdlICh2W2ktMV0sdltpXSkgaW50ZXJzZWN0cyAodltpKzFdLHZbaSsyXSlcbiAgICAgICAgaWYgKGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHA7XG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBsb29rIGZvciBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgICAgICAgICBhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiA9IGIubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBhID0gYS5uZXh0O1xuICAgIH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG4gICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuICAgICAgICBpZiAobGlzdCA9PT0gbGlzdC5uZXh0KSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuICAgICAgICBxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcbiAgICB9XG5cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0ZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlWChhLCBiKSB7XG4gICAgcmV0dXJuIGEueCAtIGIueDtcbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkge1xuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xuICAgICAgICBmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcbiAgICB9XG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBwID0gb3V0ZXJOb2RlLFxuICAgICAgICBoeCA9IGhvbGUueCxcbiAgICAgICAgaHkgPSBob2xlLnksXG4gICAgICAgIHF4ID0gLUluZmluaXR5LFxuICAgICAgICBtO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgdGFuO1xuXG4gICAgcCA9IG0ubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBzdG9wKSB7XG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG0ueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG0ueSA/IGh4IDogcXgsIGh5LCBtLngsIG0ueSwgaHkgPCBtLnkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuICAgICAgICAgICAgaWYgKCh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIHAueCA+IG0ueCkpICYmIGxvY2FsbHlJbnNpZGUocCwgaG9sZSkpIHtcbiAgICAgICAgICAgICAgICBtID0gcDtcbiAgICAgICAgICAgICAgICB0YW5NaW4gPSB0YW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBtO1xufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgIHAucHJldlogPSBwLnByZXY7XG4gICAgICAgIHAubmV4dFogPSBwLm5leHQ7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgcC5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKHApO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIGRvIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHFTaXplID09PSAwIHx8ICFxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAueiA8PSBxLnopIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuICAgICAgICBpblNpemUgKj0gMjtcblxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIHNpemUgb2YgdGhlIGRhdGEgYm91bmRpbmcgYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpIC8gc2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpIC8gc2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LngpIGxlZnRtb3N0ID0gcDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gbGVmdG1vc3Q7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcbiAgICByZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXF1YWxzKGEsIGIpIHx8IGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcbiAgICAgICAgICAgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKTtcbn1cblxuLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xufVxuXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXG4gICAgICAgICAgIGFyZWEocDIsIHEyLCBwMSkgPiAwICE9PSBhcmVhKHAyLCBxMiwgcTEpID4gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG4vLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG4gICAgICAgIGFuID0gYS5uZXh0LFxuICAgICAgICBicCA9IGIucHJldjtcblxuICAgIGEubmV4dCA9IGI7XG4gICAgYi5wcmV2ID0gYTtcblxuICAgIGEyLm5leHQgPSBhbjtcbiAgICBhbi5wcmV2ID0gYTI7XG5cbiAgICBiMi5uZXh0ID0gYTI7XG4gICAgYTIucHJldiA9IGIyO1xuXG4gICAgYnAubmV4dCA9IGIyO1xuICAgIGIyLnByZXYgPSBicDtcblxuICAgIHJldHVybiBiMjtcbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgcC5wcmV2ID0gcDtcbiAgICAgICAgcC5uZXh0ID0gcDtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHAubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgcC5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xuICAgICAgICBsYXN0Lm5leHQgPSBwO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XG4gICAgcC5uZXh0LnByZXYgPSBwLnByZXY7XG4gICAgcC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cbiAgICBpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG4gICAgaWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcbiAgICAvLyB2ZXJ0aWNlIGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRpY2Ugbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vXG4vLyBXZSBzdG9yZSBvdXIgRUUgb2JqZWN0cyBpbiBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBgfmAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Qgb3ZlcnJpZGRlbiBvclxuLy8gdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy8gV2UgYWxzbyBhc3N1bWUgdGhhdCBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV2ZW50IG5hbWVcbi8vIGlzIGFuIEVTNiBTeW1ib2wuXG4vL1xudmFyIHByZWZpeCA9IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nID8gJ34nIDogZmFsc2U7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgRXZlbnRFbWl0dGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBDb250ZXh0IGZvciBmdW5jdGlvbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSBlbWl0IG9uY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTWluaW1hbCBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIEV2ZW50RW1pdHRlciBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7IC8qIE5vdGhpbmcgdG8gc2V0ICovIH1cblxuLyoqXG4gKiBIb2xkcyB0aGUgYXNzaWduZWQgRXZlbnRFbWl0dGVycyBieSBuYW1lLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBhc3NpZ25lZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBleGlzdHMgV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtBcnJheXxCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQsIGV4aXN0cykge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgYXZhaWxhYmxlID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChleGlzdHMpIHJldHVybiAhIWF2YWlsYWJsZTtcbiAgaWYgKCFhdmFpbGFibGUpIHJldHVybiBbXTtcbiAgaWYgKGF2YWlsYWJsZS5mbikgcmV0dXJuIFthdmFpbGFibGUuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXZhaWxhYmxlLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGF2YWlsYWJsZVtpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB0byBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJbmRpY2F0aW9uIGlmIHdlJ3ZlIGVtaXR0ZWQgYW4gZXZlbnQuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IEV2ZW50TGlzdGVuZXIgZm9yIHRoZSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0b259IGZuIENhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGQgYW4gRXZlbnRMaXN0ZW5lciB0aGF0J3Mgb25seSBjYWxsZWQgb25jZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IHRoaXMsIHRydWUpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKSB0aGlzLl9ldmVudHMgPSBwcmVmaXggPyB7fSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHRoaXMuX2V2ZW50c1tldnRdID0gbGlzdGVuZXI7XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5fZXZlbnRzW2V2dF0uZm4pIHRoaXMuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIGVsc2UgdGhpcy5fZXZlbnRzW2V2dF0gPSBbXG4gICAgICB0aGlzLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3ZSB3YW50IHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciB0aGF0IHdlIG5lZWQgdG8gZmluZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgT25seSByZW1vdmUgbGlzdGVuZXJzIG1hdGNoaW5nIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmNlIGxpc3RlbmVycy5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGV2ZW50cyA9IFtdO1xuXG4gIGlmIChmbikge1xuICAgIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgICAgbGlzdGVuZXJzLmZuICE9PSBmblxuICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzLm9uY2UpXG4gICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVycy5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm5cbiAgICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpXG4gICAgICAgICAgfHwgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gIC8vXG4gIGlmIChldmVudHMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbZXZ0XTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycyBvciBvbmx5IHRoZSBsaXN0ZW5lcnMgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvci5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcztcblxuICBpZiAoZXZlbnQpIGRlbGV0ZSB0aGlzLl9ldmVudHNbcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudF07XG4gIGVsc2UgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYXBwbHkgYW55bW9yZS5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLypqc2hpbnQgb25ldmFyOiBmYWxzZSwgaW5kZW50OjQgKi9cbi8qZ2xvYmFsIHNldEltbWVkaWF0ZTogZmFsc2UsIHNldFRpbWVvdXQ6IGZhbHNlLCBjb25zb2xlOiBmYWxzZSAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciByb290LCBwcmV2aW91c19hc3luYztcblxuICAgIHJvb3QgPSB0aGlzO1xuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgIHByZXZpb3VzX2FzeW5jID0gcm9vdC5hc3luYztcbiAgICB9XG5cbiAgICBhc3luYy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmFzeW5jID0gcHJldmlvdXNfYXN5bmM7XG4gICAgICAgIHJldHVybiBhc3luYztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb25seV9vbmNlKGZuKSB7XG4gICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGNhbGxlZCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseShyb290LCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIHZhciBfZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaV0sIGksIGFycik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIF9tYXAgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBpZiAoYXJyLm1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5tYXAoaXRlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih4LCBpLCBhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgdmFyIF9yZWR1Y2UgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBpZiAoYXJyLnJlZHVjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8pO1xuICAgICAgICB9XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICB2YXIgX2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIC8vLy8gZXhwb3J0ZWQgYXN5bmMgbW9kdWxlIGZ1bmN0aW9ucyAvLy8vXG5cbiAgICAvLy8vIG5leHRUaWNrIGltcGxlbWVudGF0aW9uIHdpdGggYnJvd3Nlci1jb21wYXRpYmxlIGZhbGxiYWNrIC8vLy9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICEocHJvY2Vzcy5uZXh0VGljaykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgICBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAvLyBub3QgYSBkaXJlY3QgYWxpYXMgZm9yIElFMTAgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBvbmx5X29uY2UoZG9uZSkgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaCA9IGFzeW5jLmVhY2g7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmICghYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgIHZhciBpdGVyYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA+PSBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2hTZXJpZXMgPSBhc3luYy5lYWNoU2VyaWVzO1xuXG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZm4gPSBfZWFjaExpbWl0KGxpbWl0KTtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgW2FyciwgaXRlcmF0b3IsIGNhbGxiYWNrXSk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPSBhc3luYy5lYWNoTGltaXQ7XG5cbiAgICB2YXIgX2VhY2hMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBpZiAoIWFyci5sZW5ndGggfHwgbGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmIHN0YXJ0ZWQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihhcnJbc3RhcnRlZCAtIDFdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBkb1BhcmFsbGVsID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZG9QYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24obGltaXQsIGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW19lYWNoTGltaXQobGltaXQpXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvU2VyaWVzID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hTZXJpZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuXG4gICAgdmFyIF9hc3luY01hcCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW3guaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX21hcExpbWl0KGxpbWl0KShhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHZhciBfbWFwTGltaXQgPSBmdW5jdGlvbihsaW1pdCkge1xuICAgICAgICByZXR1cm4gZG9QYXJhbGxlbExpbWl0KGxpbWl0LCBfYXN5bmNNYXApO1xuICAgIH07XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gaW5qZWN0IGFsaWFzXG4gICAgYXN5bmMuaW5qZWN0ID0gYXN5bmMucmVkdWNlO1xuICAgIC8vIGZvbGRsIGFsaWFzXG4gICAgYXN5bmMuZm9sZGwgPSBhc3luYy5yZWR1Y2U7XG5cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIC8vIGZvbGRyIGFsaWFzXG4gICAgYXN5bmMuZm9sZHIgPSBhc3luYy5yZWR1Y2VSaWdodDtcblxuICAgIHZhciBfZmlsdGVyID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZmlsdGVyID0gZG9QYXJhbGxlbChfZmlsdGVyKTtcbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcbiAgICAvLyBzZWxlY3QgYWxpYXNcbiAgICBhc3luYy5zZWxlY3QgPSBhc3luYy5maWx0ZXI7XG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID0gYXN5bmMuZmlsdGVyU2VyaWVzO1xuXG4gICAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIHZhciBfZGV0ZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5kZXRlY3QgPSBkb1BhcmFsbGVsKF9kZXRlY3QpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IGRvU2VyaWVzKF9kZXRlY3QpO1xuXG4gICAgYXN5bmMuc29tZSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGFueSBhbGlhc1xuICAgIGFzeW5jLmFueSA9IGFzeW5jLnNvbWU7XG5cbiAgICBhc3luYy5ldmVyeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbGwgYWxpYXNcbiAgICBhc3luYy5hbGwgPSBhc3luYy5ldmVyeTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChmbiksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aFxuICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB2YXIgYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGZuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0YXNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tXG4gICAgICAgICAgICBfZWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudCBmaW5hbCBjYWxsYmFjayBmcm9tIGNhbGxpbmcgaXRzZWxmIGlmIGl0IGVycm9yc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICB0aGVDYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2VhY2goa2V5cywgZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gX2lzQXJyYXkodGFza3Nba10pID8gdGFza3Nba106IFt0YXNrc1trXV07XG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2FmZVJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgX2VhY2goX2tleXMocmVzdWx0cyksIGZ1bmN0aW9uKHJrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW3JrZXldID0gcmVzdWx0c1tya2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3Agc3Vic2VxdWVudCBlcnJvcnMgaGl0dGluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIE1hdGguYWJzKHRhc2subGVuZ3RoIC0gMSkpIHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuICAgICAgICAvLyBVc2UgZGVmYXVsdHMgaWYgdGltZXMgbm90IHBhc3NlZFxuICAgICAgICBpZiAodHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgICAgICB0aW1lcyA9IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRpbWVzIGlzIGEgbnVtYmVyXG4gICAgICAgIHRpbWVzID0gcGFyc2VJbnQodGltZXMsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICB2YXIgd3JhcHBlZFRhc2sgPSBmdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICB2YXIgcmV0cnlBdHRlbXB0ID0gZnVuY3Rpb24odGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2hpbGUgKHRpbWVzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQodGFzaywgISh0aW1lcy09MSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IGNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQsIHJ1biB0aGlzIGFzIGEgY29udHJvbGwgZmxvd1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2tcbiAgICB9O1xuXG4gICAgYXN5bmMud2F0ZXJmYWxsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIV9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd3JhcEl0ZXJhdG9yID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2god3JhcEl0ZXJhdG9yKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gZnVuY3Rpb24oZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKF9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgZWFjaGZuLm1hcCh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgZWFjaGZuLmVhY2goX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBhc3luYy5tYXAsIGVhY2g6IGFzeW5jLmVhY2ggfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKHRhc2tzLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBfbWFwTGltaXQobGltaXQpLCBlYWNoOiBfZWFjaExpbWl0KGxpbWl0KSB9LCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGFzeW5jLm1hcFNlcmllcyh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhfa2V5cyh0YXNrcyksIGZ1bmN0aW9uIChrLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRhc2tzW2tdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIHZhciBtYWtlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbWFrZUNhbGxiYWNrKDApO1xuICAgIH07XG5cbiAgICBhc3luYy5hcHBseSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBfY29uY2F0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNiKSB7XG4gICAgICAgICAgICBmbih4LCBmdW5jdGlvbiAoZXJyLCB5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMud2hpbHN0KHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICh0ZXN0LmFwcGx5KG51bGwsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0ZXN0KCkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3luYy51bnRpbCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvVW50aWwgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICghdGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvVW50aWwoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICBxLnRhc2tzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbnVsbCxcbiAgICAgICAgICAgIGVtcHR5OiBudWxsLFxuICAgICAgICAgICAgZHJhaW46IG51bGwsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcS5kcmFpbiA9IG51bGw7XG4gICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghcS5wYXVzZWQgJiYgd29ya2VycyA8IHEuY29uY3VycmVuY3kgJiYgcS50YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBxLnRhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLmVtcHR5ICYmIHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4gJiYgcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyKHRhc2suZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHEuY29uY3VycmVuY3k7IHcrKykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICBlbmQgPSBzZXF1ZW5jZS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciBtaWQgPSBiZWcgKyAoKGVuZCAtIGJlZyArIDEpID4+PiAxKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKF9iaW5hcnlTZWFyY2gocS50YXNrcywgaXRlbSwgX2NvbXBhcmVUYXNrcykgKyAxLCAwLCBpdGVtKTtcblxuICAgICAgICAgICAgICBpZiAocS5zYXR1cmF0ZWQgJiYgcS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvblxuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5jYXJnbyA9IGZ1bmN0aW9uICh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHdvcmtpbmcgICAgID0gZmFsc2UsXG4gICAgICAgICAgICB0YXNrcyAgICAgICA9IFtdO1xuXG4gICAgICAgIHZhciBjYXJnbyA9IHtcbiAgICAgICAgICAgIHRhc2tzOiB0YXNrcyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgZHJhaW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX2VhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXJnby5kcmFpbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXJnby5zYXR1cmF0ZWQgJiYgdGFza3MubGVuZ3RoID09PSBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnby5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShjYXJnby5wcm9jZXNzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICAgICAgICAgIGlmICh3b3JraW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZihjYXJnby5kcmFpbiAmJiAhY2FyZ28uZHJhaW5lZCkgY2FyZ28uZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdHMgPSB0eXBlb2YgcGF5bG9hZCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRhc2tzLnNwbGljZSgwLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza3Muc3BsaWNlKDAsIHRhc2tzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZHMgPSBfbWFwKHRzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFzay5kYXRhO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoY2FyZ28uZW1wdHkpIGNhcmdvLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgd29ya2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2VyKGRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgX2VhY2godHMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNhcmdvO1xuICAgIH07XG5cbiAgICB2YXIgX2NvbnNvbGVfZm4gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy50aW1lcyA9IGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb3VudGVyID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY291bnRlci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luYy5tYXAoY291bnRlciwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwU2VyaWVzKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGF0LCBbZXJyXS5jb25jYXQocmVzdWx0cykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICByZXR1cm4gYXN5bmMuc2VxLmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIHZhciBfYXBwbHlFYWNoID0gZnVuY3Rpb24gKGVhY2hmbiwgZm5zIC8qYXJncy4uLiovKSB7XG4gICAgICAgIHZhciBnbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgZnVuY3Rpb24gKGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5hcHBseUVhY2ggPSBkb1BhcmFsbGVsKF9hcHBseUVhY2gpO1xuICAgIGFzeW5jLmFwcGx5RWFjaFNlcmllcyA9IGRvU2VyaWVzKF9hcHBseUVhY2gpO1xuXG4gICAgYXN5bmMuZm9yZXZlciA9IGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xuXG4gICAgLy8gTm9kZS5qc1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwidmFyIGFzeW5jICAgICAgID0gcmVxdWlyZSgnYXN5bmMnKSxcbiAgICB1cmxQYXJzZXIgICA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIFJlc291cmNlICAgID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBtdWx0aXBsZSByZXNvdXJjZXMgdG8gbG9hZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIGNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvZ3Jlc3MgcGVyY2VudCBvZiB0aGUgbG9hZGVyIGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogTG9hZGluZyBzdGF0ZSBvZiB0aGUgbG9hZGVyLCB0cnVlIGlmIGl0IGlzIGN1cnJlbnRseSBsb2FkaW5nIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0b3RhbCBwcm9ncmVzcyB0aGF0IGEgc2luZ2xlIHJlc291cmNlIHJlcHJlc2VudHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWlkZGxld2FyZSB0byBydW4gYmVmb3JlIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGFmdGVyIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9sb2FkUmVzb3VyY2VgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRMb2FkUmVzb3VyY2UgPSB0aGlzLl9sb2FkUmVzb3VyY2UuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uTG9hZGAgZnVuY3Rpb24gYm91bmQgd2l0aCB0aGlzIG9iamVjdCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uTG9hZCA9IHRoaXMuX29uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlIGJ1ZmZlciB0aGF0IGZpbGxzIHVudGlsIGBsb2FkYCBpcyBjYWxsZWQgdG8gc3RhcnQgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlW119XG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyID0gW107XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHRyYWNrIGxvYWQgY29tcGxldGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb3VyY2VzIHdhaXRpbmcgdG8gYmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX3F1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fYm91bmRMb2FkUmVzb3VyY2UsIGNvbmN1cnJlbmN5KTtcblxuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGlzIGxvYWRlciBrZXllZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgUmVzb3VyY2U+fVxuICAgICAqL1xuICAgIHRoaXMucmVzb3VyY2VzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCBvciBlcnJvcmVkIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgb25jZSBwZXIgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbG9hZGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdGFydFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHF1ZXVlZCByZXNvdXJjZXMgYWxsIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY29tcGxldGVcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuLyoqXG4gKiBBZGRzIGEgcmVzb3VyY2UgKG9yIG11bHRpcGxlIHJlc291cmNlcykgdG8gdGhlIGxvYWRlciBxdWV1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGEgd2lkZSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwYXJhbWV0ZXJzLiBUaGUgb25seSB0aGluZyB0aGF0IGlzIGFsd2F5c1xuICogcmVxdWlyZWQgdGhlIHVybCB0byBsb2FkLiBBbGwgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6XG4gKlxuICogYGBganNcbiAqIGxvYWRlclxuICogICAgIC8vIG5vcm1hbCBwYXJhbSBzeW50YXhcbiAqICAgICAuYWRkKCdrZXknLCAnaHR0cDovLy4uLicsIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJylcbiAqXG4gKiAgICAgLy8gb2JqZWN0IHN5bnRheFxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MicsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIG5hbWU6ICdrZXkzJyxcbiAqICAgICAgICAgdXJsOiAnaHR0cDovLy4uLidcbiAqICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge31cbiAqICAgICB9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwczovLy4uLicsXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9LFxuICogICAgICAgICBjcm9zc09yaWdpbjogdHJ1ZVxuICogICAgIH0pXG4gKlxuICogICAgIC8vIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJscyBvciBib3RoXG4gKiAgICAgLmFkZChbXG4gKiAgICAgICAgIHsgbmFtZTogJ2tleTQnLCB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgeyB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgJ2h0dHA6Ly8uLi4nXG4gKiAgICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAYWxpYXMgZW5xdWV1ZVxuICogQHBhcmFtIFtuYW1lXSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZCwgaWYgbm90IHBhc3NlZCB0aGUgdXJsIGlzIHVzZWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIHJlbGF0aXZlIHRvIHRoZSBiYXNlVXJsIG9mIHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcGFyYW0gW29wdGlvbnMuY3Jvc3NPcmlnaW5dIHtib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5YSFJfTE9BRF9UWVBFfSBIb3cgc2hvdWxkIHRoaXMgcmVzb3VyY2UgYmUgbG9hZGVkP1xuICogQHBhcmFtIFtvcHRpb25zLnhoclR5cGU9UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVF0ge1Jlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFfSBIb3cgc2hvdWxkIHRoZSBkYXRhIGJlaW5nXG4gKiAgICAgIGxvYWRlZCBiZSBpbnRlcnByZXRlZCB3aGVuIHVzaW5nIFhIUj9cbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMgc3BlY2lmaWMgcmVzb3VyY2UgY29tcGxldGVzIGxvYWRpbmcuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWRkID0gTG9hZGVyLnByb3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgb3B0aW9ucywgY2IpIHtcbiAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciB1cmxzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChuYW1lW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGlmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW5zdGVhZCBvZiBwYXJhbXNcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNiID0gdXJsIHx8IG5hbWUuY2FsbGJhY2sgfHwgbmFtZS5vbkNvbXBsZXRlO1xuICAgICAgICBvcHRpb25zID0gbmFtZTtcbiAgICAgICAgdXJsID0gbmFtZS51cmw7XG4gICAgICAgIG5hbWUgPSBuYW1lLm5hbWUgfHwgbmFtZS5rZXkgfHwgbmFtZS51cmw7XG4gICAgfVxuXG4gICAgLy8gY2FzZSB3aGVyZSBubyBuYW1lIGlzIHBhc3NlZCBzaGlmdCBhbGwgYXJncyBvdmVyIGJ5IG9uZS5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdXJsO1xuICAgICAgICB1cmwgPSBuYW1lO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IHdlIHNoaWZ0ZWQgbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9wZXIgdXJsLlxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVybCBwYXNzZWQgdG8gYWRkIHJlc291cmNlIHRvIGxvYWRlci4nKTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zIGFyZSBvcHRpb25hbCBzbyBwZW9wbGUgbWlnaHQgcGFzcyBhIGZ1bmN0aW9uIGFuZCBubyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW25hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzb3VyY2Ugd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBleGlzdHMuJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJhc2UgdXJsIGlmIHRoaXMgaXNuJ3QgYW4gYWJzb2x1dGUgdXJsXG4gICAgdXJsID0gdGhpcy5faGFuZGxlQmFzZVVybCh1cmwpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBzdG9yZSB0aGUgcmVzb3VyY2VcbiAgICB0aGlzLnJlc291cmNlc1tuYW1lXSA9IG5ldyBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlc291cmNlc1tuYW1lXS5vbmNlKCdhZnRlck1pZGRsZXdhcmUnLCBjYik7XG4gICAgfVxuXG4gICAgdGhpcy5fbnVtVG9Mb2FkKys7XG5cbiAgICAvLyBpZiBhbHJlYWR5IGxvYWRpbmcgYWRkIGl0IHRvIHRoZSB3b3JrZXIgcXVldWVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9ICgxMDAgLSB0aGlzLnByb2dyZXNzKSAvICh0aGlzLl9xdWV1ZS5sZW5ndGgoKSArIHRoaXMuX3F1ZXVlLnJ1bm5pbmcoKSk7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBidWZmZXIgaXQgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlIGxhdGVyXG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDEwMCAvIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5Mb2FkZXIucHJvdG90eXBlLl9oYW5kbGVCYXNlVXJsID0gZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBwYXJzZWRVcmwgPSB1cmxQYXJzZXIucGFyc2UodXJsKTtcblxuICAgIC8vIGFic29sdXRlIHVybCwganVzdCB1c2UgaXQgYXMgaXMuXG4gICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCB8fCBwYXJzZWRVcmwucGF0aG5hbWUuaW5kZXhPZignLy8nKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIC8vIGlmIGJhc2VVcmwgZG9lc24ndCBlbmQgaW4gc2xhc2ggYW5kIHVybCBkb2Vzbid0IHN0YXJ0IHdpdGggc2xhc2gsIHRoZW4gYWRkIGEgc2xhc2ggaW5iZXR3ZWVuXG4gICAgaWYgKFxuICAgICAgICB0aGlzLmJhc2VVcmwubGVuZ3RoICYmXG4gICAgICAgIHRoaXMuYmFzZVVybC5sYXN0SW5kZXhPZignLycpICE9PSB0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSAmJlxuICAgICAgICB1cmwuY2hhckF0KDApICE9PSAnLydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybCArICcvJyArIHVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmJlZm9yZSogdGhlXG4gKiByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKlxuICogQGFsaWFzIHByZVxuICogQHBhcmFtIG1pZGRsZXdhcmUge2Z1bmN0aW9ufSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5iZWZvcmUgPSBMb2FkZXIucHJvdG90eXBlLnByZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB1cCBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gdGhhdCB3aWxsIHJ1biAqYWZ0ZXIqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyB1c2VcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWZ0ZXIgPSBMb2FkZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZS5wdXNoKGZuKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHF1ZXVlIG9mIHRoZSBsb2FkZXIgdG8gcHJlcGFyZSBmb3IgYSBuZXcgbG9hZC5cbiAqXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gdGhpcy5iYXNlVXJsID0gYmFzZVVybCB8fCAnJztcblxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9ncmVzc0NodW5rID0gMDtcblxuICAgIC8vIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUubGVuZ3RoID0gMDtcbiAgICAvLyB0aGlzLl9hZnRlck1pZGRsZXdhcmUubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fbnVtVG9Mb2FkID0gMDtcblxuICAgIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgICB0aGlzLl9xdWV1ZS5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBTdGFydHMgbG9hZGluZyB0aGUgcXVldWVkIHJlc291cmNlcy5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgY29tcGxldGVgIGV2ZW50LlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAvLyByZWdpc3RlciBjb21wbGV0ZSBjYWxsYmFjayBpZiB0aGV5IHBhc3Mgb25lXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBxdWV1ZSBoYXMgYWxyZWFkeSBzdGFydGVkIHdlIGFyZSBkb25lIGhlcmVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBub3RpZnkgb2Ygc3RhcnRcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBzdGFydCB0aGUgaW50ZXJuYWwgcXVldWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMuX2J1ZmZlcltpXSk7XG4gICAgfVxuXG4gICAgLy8gZW1wdHkgdGhlIGJ1ZmZlclxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIExvYWRzIGEgc2luZ2xlIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc291cmNlID0gZnVuY3Rpb24gKHJlc291cmNlLCBkZXF1ZXVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmVzb3VyY2UuX2RlcXVldWUgPSBkZXF1ZXVlO1xuXG4gICAgdGhpcy5fcnVuTWlkZGxld2FyZShyZXNvdXJjZSwgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXNvdXJjZS5vbigncHJvZ3Jlc3MnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAncHJvZ3Jlc3MnKSk7XG5cbiAgICAgICAgcmVzb3VyY2UubG9hZChzZWxmLl9ib3VuZE9uTG9hZCk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbmNlIGVhY2ggcmVzb3VyY2UgaGFzIGxvYWRlZC5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX29uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMsIHRoaXMucmVzb3VyY2VzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGVhY2ggdGltZSBhIHJlc291cmNlcyBpcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAZmlyZXMgZXJyb3JcbiAqIEBmaXJlcyBsb2FkXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICB0aGlzLnByb2dyZXNzICs9IHRoaXMuX3Byb2dyZXNzQ2h1bms7XG5cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgcmVzb3VyY2UpO1xuXG4gICAgLy8gcnVuIG1pZGRsZXdhcmUsIHRoaXMgKm11c3QqIGhhcHBlbiBiZWZvcmUgZGVxdWV1ZSBzbyBzdWItYXNzZXRzIGdldCBhZGRlZCBwcm9wZXJseVxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2FmdGVyTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvdXJjZS5lbWl0KCdhZnRlck1pZGRsZXdhcmUnLCByZXNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5fbnVtVG9Mb2FkLS07XG5cbiAgICAgICAgLy8gZG8gY29tcGxldGlvbiBjaGVja1xuICAgICAgICBpZiAodGhpcy5fbnVtVG9Mb2FkID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgdGhpcy5fb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzb3VyY2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCByZXNvdXJjZS5lcnJvciwgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkJywgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG5cblxuICAgIC8vIHJlbW92ZSB0aGlzIHJlc291cmNlIGZyb20gdGhlIGFzeW5jIHF1ZXVlXG4gICAgcmVzb3VyY2UuX2RlcXVldWUoKTtcbn07XG5cbi8qKlxuICogUnVuIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9uIGEgcmVzb3VyY2UuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fcnVuTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZm5zLCBjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGFzeW5jLmVhY2hTZXJpZXMoZm5zLCBmdW5jdGlvbiAoZm4sIG5leHQpIHtcbiAgICAgICAgZm4uY2FsbChzZWxmLCByZXNvdXJjZSwgbmV4dCk7XG4gICAgfSwgY2IuYmluZCh0aGlzLCByZXNvdXJjZSkpO1xufTtcblxuTG9hZGVyLkxPQURfVFlQRSA9IFJlc291cmNlLkxPQURfVFlQRTtcbkxvYWRlci5YSFJfUkVBRFlfU1RBVEUgPSBSZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEU7XG5Mb2FkZXIuWEhSX1JFU1BPTlNFX1RZUEUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRTtcbiIsInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgX3VybCA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIC8vIHRlc3RzIGlzIENPUlMgaXMgc3VwcG9ydGVkIGluIFhIUiwgaWYgbm90IHdlIG5lZWQgdG8gdXNlIFhEUlxuICAgIHVzZVhkciA9ICEhKHdpbmRvdy5YRG9tYWluUmVxdWVzdCAmJiAhKCd3aXRoQ3JlZGVudGlhbHMnIGluIChuZXcgWE1MSHR0cFJlcXVlc3QoKSkpKSxcbiAgICB0ZW1wQW5jaG9yID0gbnVsbDtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRlZCBieVxuICogYSBzaW5nbGUgVVJMLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIG5hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd8c3RyaW5nW119IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIGZvciBhdWRpby92aWRlbyBsb2FkcyB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7c3RyaW5nfGJvb2xlYW59IElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IERlZmF1bHQgaXMgdG8gZGV0ZXJtaW5lIGF1dG9tYXRpY2FsbHkuXG4gKiBAcGFyYW0gW29wdGlvbnMubG9hZFR5cGU9UmVzb3VyY2UuTE9BRF9UWVBFLlhIUl0ge1Jlc291cmNlLkxPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW29wdGlvbnMubWV0YWRhdGFdIHtvYmplY3R9IEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmUuXG4gKi9cbmZ1bmN0aW9uIFJlc291cmNlKG5hbWUsIHVybCwgb3B0aW9ucykge1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBuYW1lIGFuZCB1cmwgYXJlIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgYSByZXNvdXJjZS4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdXJsIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgdXJsIGlzIGEgZGF0YSB1cmwuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNEYXRhVXJsID0gdGhpcy51cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnl9XG4gICAgICovXG4gICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jcm9zc09yaWdpbiA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnYW5vbnltb3VzJyA6IG9wdGlvbnMuY3Jvc3NPcmlnaW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIG9mIGxvYWRpbmcgdG8gdXNlIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2UuTE9BRF9UWVBFfVxuICAgICAqL1xuICAgIHRoaXMubG9hZFR5cGUgPSBvcHRpb25zLmxvYWRUeXBlIHx8IHRoaXMuX2RldGVybWluZUxvYWRUeXBlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSB1c2VkIHRvIGxvYWQgdGhlIHJlc291cmNlIHZpYSBYSFIuIElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy54aHJUeXBlID0gb3B0aW9ucy54aHJUeXBlO1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgaW5mbyBmb3IgbWlkZGxld2FyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgd2hpbGUgbG9hZGluZyAoaWYgYW55KS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Vycm9yfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFhIUiBvYmplY3QgdGhhdCB3YXMgdXNlZCB0byBsb2FkIHRoaXMgcmVzb3VyY2UuIFRoaXMgaXMgb25seSBzZXRcbiAgICAgKiB3aGVuIGBsb2FkVHlwZWAgaXMgYFJlc291cmNlLkxPQURfVFlQRS5YSFJgLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7WE1MSHR0cFJlcXVlc3R9XG4gICAgICovXG4gICAgdGhpcy54aHIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBqc29uLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0pzb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgeG1sLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1htbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhbiBpbWFnZSB0YWcuIE9ubHkgdmFsaWQgYWZ0ZXIgdGhlIHJlc291cmNlXG4gICAgICogaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gYXVkaW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0F1ZGlvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGEgdmlkZW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1ZpZGVvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGRlcXVldWVgIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBhIHN0b3JhZ2UgcGxhY2UgZm9yIHRoZSBhc3luYyBxdWV1ZSBkZXF1ZXVlIG1ldGhvZFxuICAgICAqIHVzZWQgcHJpdmF0ZWx5IGJ5IHRoZSBsb2FkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2RlcXVldWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBjb21wbGV0ZWAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kQ29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkVycm9yYCBmdW5jdGlvbiBib3VuZCB0byB0aGlzIHJlc291cmNlJ3MgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25Qcm9ncmVzc2AgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyA9IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcblxuICAgIC8vIHhociBjYWxsYmFja3NcbiAgICB0aGlzLl9ib3VuZFhock9uRXJyb3IgPSB0aGlzLl94aHJPbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYaHJPbkFib3J0ID0gdGhpcy5feGhyT25BYm9ydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25Mb2FkID0gdGhpcy5feGhyT25Mb2FkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYZHJPblRpbWVvdXQgPSB0aGlzLl94ZHJPblRpbWVvdXQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcmVzb3VyY2UgYmVpbmdzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGVhY2ggdGltZSBwcm9ncmVzcyBvZiB0aGlzIHJlc291cmNlIGxvYWQgdXBkYXRlcy5cbiAgICAgKiBOb3QgYWxsIHJlc291cmNlcyB0eXBlcyBhbmQgbG9hZGVyIHN5c3RlbXMgY2FuIHN1cHBvcnQgdGhpcyBldmVudFxuICAgICAqIHNvIHNvbWV0aW1lcyBpdCBtYXkgbm90IGJlIGF2YWlsYWJsZS4gSWYgdGhlIHJlc291cmNlXG4gICAgICogaXMgYmVpbmcgbG9hZGVkIG9uIGEgbW9kZXJuIGJyb3dzZXIsIHVzaW5nIFhIUiwgYW5kIHRoZSByZW1vdGUgc2VydmVyXG4gICAgICogcHJvcGVybHkgc2V0cyBDb250ZW50LUxlbmd0aCBoZWFkZXJzLCB0aGVuIHRoaXMgd2lsbCBiZSBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcHJvZ3Jlc3NcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgdGhpcyByZXNvdXJjZSBoYXMgbG9hZGVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaXQgd2lsbFxuICAgICAqIGJlIGluIHRoZSBgZXJyb3JgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xufVxuXG5SZXNvdXJjZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVzb3VyY2U7XG5tb2R1bGUuZXhwb3J0cyA9IFJlc291cmNlO1xuXG4vKipcbiAqIE1hcmtzIHRoZSByZXNvdXJjZSBhcyBjb21wbGV0ZS5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgaW4gYSB3cmFwcGVyIG9yIHNvbWV0aGluZy4uLmdyb3NzLi4uLlxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICAgIGlmICh0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvcik7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIub25lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25wcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbmxvYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBLaWNrcyBvZmYgbG9hZGluZyBvZiB0aGlzIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBzdGFydFxuICogQHBhcmFtIFtjYWxsYmFja10ge2Z1bmN0aW9ufSBPcHRpb25hbCBjYWxsYmFjayB0byBjYWxsIG9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBpZiBhIGNhbGxiYWNrIGlzIHNldCwgbGlzdGVuIGZvciBjb21wbGV0ZSBldmVudFxuICAgIGlmIChjYikge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4gPT09IGZhbHNlIHx8IHR5cGVvZiB0aGlzLmNyb3NzT3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdGhpcy5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4odGhpcy51cmwpO1xuICAgIH1cblxuICAgIHN3aXRjaCh0aGlzLmxvYWRUeXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEltYWdlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5BVURJTzpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuVklERU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlhIUjpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh1c2VYZHIgJiYgdGhpcy5jcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYZHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYaHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gSW1hZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuc3JjID0gdGhpcy51cmw7XG5cbiAgICB0aGlzLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEhUTUxBdWRpb0VsZW1lbnQgb3IgSFRNTFZpZGVvRWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJyAmJiB0eXBlb2YgQXVkaW8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBBdWRpbygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgJyArIHR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBDb2Nvb25KUyBDYW52YXMrIHJ1bnRpbWUsIGxhY2tzIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zcmMgPSBBcnJheS5pc0FycmF5KHRoaXMudXJsKSA/IHRoaXMudXJsWzBdIDogdGhpcy51cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51cmwubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWydpcycgKyB0eXBlWzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKV0gPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuXG4gICAgdGhpcy5kYXRhLmxvYWQoKTtcbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gWE1MSHR0cFJlcXVlc3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGhyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIHNldCB0aGUgcmVxdWVzdCB0eXBlIGFuZCB1cmxcbiAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gbG9hZCBqc29uIGFzIHRleHQgYW5kIHBhcnNlIGl0IG91cnNlbHZlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHNvbWUgYnJvd3NlcnNcbiAgICAvLyAqY291Z2gqIHNhZmFyaSAqY291Z2gqIGNhbid0IGRlYWwgd2l0aCBpdC5cbiAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OIHx8IHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gdGhpcy54aHJUeXBlO1xuICAgIH1cblxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvciwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQsIGZhbHNlKTtcblxuICAgIHhoci5zZW5kKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhEb21haW5SZXF1ZXN0LiBUaGlzIGlzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHN1cHBvcnQgSUU5IChncm9zcykuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGRyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGRyID0gdGhpcy54aHIgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcblxuICAgIC8vIFhEb21haW5SZXF1ZXN0IGhhcyBhIGZldyBxdWlya3MuIE9jY2FzaW9uYWxseSBpdCB3aWxsIGFib3J0IHJlcXVlc3RzXG4gICAgLy8gQSB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBtYWtlIHN1cmUgQUxMIGNhbGxiYWNrcyBhcmUgc2V0IGV2ZW4gaWYgbm90IHVzZWRcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTc4Njk2Ni94ZG9tYWlucmVxdWVzdC1hYm9ydHMtcG9zdC1vbi1pZS05XG4gICAgeGRyLnRpbWVvdXQgPSA1MDAwO1xuXG4gICAgeGRyLm9uZXJyb3IgPSB0aGlzLl9ib3VuZFhock9uRXJyb3I7XG4gICAgeGRyLm9udGltZW91dCA9IHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0O1xuICAgIHhkci5vbnByb2dyZXNzID0gdGhpcy5fYm91bmRPblByb2dyZXNzO1xuICAgIHhkci5vbmxvYWQgPSB0aGlzLl9ib3VuZFhock9uTG9hZDtcblxuICAgIHhkci5vcGVuKCdHRVQnLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyAgTm90ZTogVGhlIHhkci5zZW5kKCkgY2FsbCBpcyB3cmFwcGVkIGluIGEgdGltZW91dCB0byBwcmV2ZW50IGFuIGlzc3VlIHdpdGggdGhlIGludGVyZmFjZSB3aGVyZSBzb21lIHJlcXVlc3RzIGFyZSBsb3N0XG4gICAgLy8gIGlmIG11bHRpcGxlIFhEb21haW5SZXF1ZXN0cyBhcmUgYmVpbmcgc2VudCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIC8vIFNvbWUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2lzc3Vlcy8xMjQ4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHhkci5zZW5kKCk7XG4gICAgfSwgMCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzb3VyY2UgdXNlZCBpbiBsb2FkaW5nIHZpYSBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB0eXBlIHtzdHJpbmd9IFRoZSBlbGVtZW50IHR5cGUgKHZpZGVvIG9yIGF1ZGlvKS5cbiAqIEBwYXJhbSB1cmwge3N0cmluZ30gVGhlIHNvdXJjZSBVUkwgdG8gbG9hZCBmcm9tLlxuICogQHBhcmFtIFttaW1lXSB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIG9mIHRoZSB2aWRlb1xuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9jcmVhdGVTb3VyY2UgPSBmdW5jdGlvbiAodHlwZSwgdXJsLCBtaW1lKSB7XG4gICAgaWYgKCFtaW1lKSB7XG4gICAgICAgIG1pbWUgPSB0eXBlICsgJy8nICsgdXJsLnN1YnN0cih1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSB1cmw7XG4gICAgc291cmNlLnR5cGUgPSBtaW1lO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBlcnJvcnMgb3V0LlxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBlcnJvciBldmVudCBmcm9tIHRoZSBlbGVtZW50IHRoYXQgZW1pdHMgaXQuXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX29uRXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBlbGVtZW50IHVzaW5nICcgKyBldmVudC50YXJnZXQubm9kZU5hbWUpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBwcm9ncmVzcyBldmVudCBmaXJlcyBmb3IgeGhyL3hkci5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vblByb2dyZXNzID0gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB0aGlzLCBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYW4gZXJyb3IgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEVycm9yRXZlbnR8RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgcmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgZmFpbGVkLiAnICtcbiAgICAgICAgJ1N0YXR1czogJyArIHRoaXMueGhyLnN0YXR1cyArICcsIHRleHQ6IFwiJyArIHRoaXMueGhyLnN0YXR1c1RleHQgKyAnXCInXG4gICAgKTtcblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGFib3J0IGV2ZW50IGZpcmVzIGZvciB4aHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEFib3J0RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB3YXMgYWJvcnRlZCBieSB0aGUgdXNlci4nKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIHRpbWVvdXQgZXZlbnQgZmlyZXMgZm9yIHhkci5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94ZHJPblRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB0aW1lZCBvdXQuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBkYXRhIHN1Y2Nlc3NmdWxseSBsb2FkcyBmcm9tIGFuIHhoci94ZHIgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0TG9hZEV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHhociA9IHRoaXMueGhyLFxuICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzICE9PSB1bmRlZmluZWQgPyB4aHIuc3RhdHVzIDogMjAwOyAvL1hEUiBoYXMgbm8gYC5zdGF0dXNgLCBhc3N1bWUgMjAwLlxuXG4gICAgLy8gc3RhdHVzIGNhbiBiZSAwIHdoZW4gdXNpbmcgdGhlIGZpbGU6Ly8gcHJvdG9jb2wsIGFsc28gY2hlY2sgaWYgYSByZXNwb25zZSB3YXMgZm91bmRcbiAgICBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDQgfHwgKHN0YXR1cyA9PT0gMCAmJiB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIC8vIGlmIHRleHQsIGp1c3QgcmV0dXJuIGl0XG4gICAgICAgIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYganNvbiwgcGFyc2UgaW50byBqc29uIG9iamVjdFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT04pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSnNvbiA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIGpzb246JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgeG1sLCBwYXJzZSBpbnRvIGFuIHhtbCBkb2N1bWVudCBvciBkaXYgZWxlbWVudFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkaXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNYbWwgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSBsb2FkZWQgeG1sOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyIHR5cGVzIGp1c3QgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdbJyArIHhoci5zdGF0dXMgKyAnXScgKyB4aHIuc3RhdHVzVGV4dCArICc6JyArIHhoci5yZXNwb25zZVVSTCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gcmVxVHlwZSh4aHIpIHtcbiAgICByZXR1cm4geGhyLnRvU3RyaW5nKCkucmVwbGFjZSgnb2JqZWN0ICcsICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGZvciB0aGlzIHJlc291cmNlIGJhc2VkIG9uIGlmIHRoZSB1cmxcbiAqIGZvciB0aGlzIHJlc291cmNlIGlzIGNyb3NzLW9yaWdpbi4gSWYgY3Jvc3NPcmlnaW4gd2FzIG1hbnVhbGx5IHNldCwgdGhpc1xuICogZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgdG8gdGVzdC5cbiAqIEBwYXJhbSBbbG9jYXRpb249d2luZG93LmxvY2F0aW9uXSB7b2JqZWN0fSBUaGUgbG9jYXRpb24gb2JqZWN0IHRvIHRlc3QgYWdhaW5zdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNyb3NzT3JpZ2luIHZhbHVlIHRvIHVzZSAob3IgZW1wdHkgc3RyaW5nIGZvciBub25lKS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVDcm9zc09yaWdpbiA9IGZ1bmN0aW9uICh1cmwsIGxvYykge1xuICAgIC8vIGRhdGE6IGFuZCBqYXZhc2NyaXB0OiB1cmxzIGFyZSBjb25zaWRlcmVkIHNhbWUtb3JpZ2luXG4gICAgaWYgKHVybC5pbmRleE9mKCdkYXRhOicpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGlzIHdpbmRvdy5sb2NhdGlvblxuICAgIGxvYyA9IGxvYyB8fCB3aW5kb3cubG9jYXRpb247XG5cbiAgICBpZiAoIXRlbXBBbmNob3IpIHtcbiAgICAgICAgdGVtcEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG5cbiAgICAvLyBsZXQgdGhlIGJyb3dzZXIgZGV0ZXJtaW5lIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSB1cmwgb2YgdGhpcyByZXNvdXJjZSBhbmQgdGhlblxuICAgIC8vIHBhcnNlIHdpdGggdGhlIG5vZGUgdXJsIGxpYiwgd2UgY2FuJ3QgdXNlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICAgIC8vIGJlY2F1c2UgdGhleSBkb24ndCB3b3JrIGluIElFOSA6KFxuICAgIHRlbXBBbmNob3IuaHJlZiA9IHVybDtcbiAgICB1cmwgPSBfdXJsLnBhcnNlKHRlbXBBbmNob3IuaHJlZik7XG5cbiAgICB2YXIgc2FtZVBvcnQgPSAoIXVybC5wb3J0ICYmIGxvYy5wb3J0ID09PSAnJykgfHwgKHVybC5wb3J0ID09PSBsb2MucG9ydCk7XG5cbiAgICAvLyBpZiBjcm9zcyBvcmlnaW5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9PSBsb2MuaG9zdG5hbWUgfHwgIXNhbWVQb3J0IHx8IHVybC5wcm90b2NvbCAhPT0gbG9jLnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiAnYW5vbnltb3VzJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlc3BvbnNlVHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZVxuICogcmVzb3VyY2UgYmVpbmcgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHJlc3BvbnNlVHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lWGhyVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX3hoclR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZUxvYWRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZXNvdXJjZS5fbG9hZFR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLkxPQURfVFlQRS5YSFI7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2dldEV4dGVuc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcy51cmwsXG4gICAgICAgIGV4dDtcblxuICAgIGlmICh0aGlzLmlzRGF0YVVybCkge1xuICAgICAgICB2YXIgc2xhc2hJbmRleCA9IHVybC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGV4dCA9IHVybC5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEsIHVybC5pbmRleE9mKCc7Jywgc2xhc2hJbmRleCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXJ5U3RhcnQgPSB1cmwuaW5kZXhPZignPycpO1xuICAgICAgICBpZiAocXVlcnlTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dDtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWltZSB0eXBlIG9mIGFuIFhIUiByZXF1ZXN0IGJhc2VkIG9uIHRoZSByZXNwb25zZVR5cGUgb2ZcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIHRvIHVzZS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRNaW1lRnJvbVhoclR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1iaW5hcnknO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vYmxvYic7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veG1sJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT046XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVDpcbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUOlxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcblxuICAgIH1cbn07XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxvYWRpbmcgYSByZXNvdXJjZSBjYW4gdXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IExPQURfVFlQRVxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5YSFIgLSBVc2VzIFhNTEh0dHBSZXF1ZXN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5JTUFHRSAtIFVzZXMgYW4gYEltYWdlYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLkFVRElPIC0gVXNlcyBhbiBgQXVkaW9gIG9iamVjdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuVklERU8gLSBVc2VzIGEgYFZpZGVvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlLkxPQURfVFlQRSA9IHtcbiAgICBYSFI6ICAgIDEsXG4gICAgSU1BR0U6ICAyLFxuICAgIEFVRElPOiAgMyxcbiAgICBWSURFTzogIDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVBRFlfU1RBVEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuVU5TRU5UIC0gb3BlbigpaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLk9QRU5FRCAtIHNlbmQoKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5IRUFERVJTX1JFQ0VJVkVEIC0gc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIGhlYWRlcnMgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5MT0FESU5HIC0gRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLkRPTkUgLSBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5SZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEUgPSB7XG4gICAgVU5TRU5UOiAwLFxuICAgIE9QRU5FRDogMSxcbiAgICBIRUFERVJTX1JFQ0VJVkVEOiAyLFxuICAgIExPQURJTkc6IDMsXG4gICAgRE9ORTogNFxufTtcblxuLyoqXG4gKiBUaGUgWEhSIHJlYWR5IHN0YXRlcywgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IFhIUl9SRVNQT05TRV9UWVBFXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVCAtIGRlZmF1bHRzIHRvIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVIgLSBBcnJheUJ1ZmZlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkJMT0IgLSBCbG9iXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQgLSBEb2N1bWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkpTT04gLSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5URVhUIC0gU3RyaW5nXG4gKi9cblJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFID0ge1xuICAgIERFRkFVTFQ6ICAgICd0ZXh0JyxcbiAgICBCVUZGRVI6ICAgICAnYXJyYXlidWZmZXInLFxuICAgIEJMT0I6ICAgICAgICdibG9iJyxcbiAgICBET0NVTUVOVDogICAnZG9jdW1lbnQnLFxuICAgIEpTT046ICAgICAgICdqc29uJyxcbiAgICBURVhUOiAgICAgICAndGV4dCdcbn07XG5cblJlc291cmNlLl9sb2FkVHlwZU1hcCA9IHtcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3BuZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZWcnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3dlYnAnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRVxufTtcblxuUmVzb3VyY2UuX3hoclR5cGVNYXAgPSB7XG4gICAgLy8geG1sXG4gICAgJ3hodG1sJzogICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bWwnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3htbCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RteCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RzeCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3N2Zyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG5cbiAgICAvLyBpbWFnZXNcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2JtcCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RnYSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcblxuICAgIC8vIGpzb25cbiAgICAnanNvbic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OLFxuXG4gICAgLy8gdGV4dFxuICAgICd0ZXh0JzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQsXG4gICAgJ3R4dCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsb2FkIHR5cGUgdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGV4dG5hbWUge3N0cmluZ30gVGhlIGV4dGVuc2lvbiB0byBzZXQgdGhlIHR5cGUgZm9yLCBlLmcuIFwicG5nXCIgb3IgXCJmbnRcIlxuICogQHBhcmFtIGxvYWRUeXBlIHtSZXNvdXJjZS5MT0FEX1RZUEV9IFRoZSBsb2FkIHR5cGUgdG8gc2V0IGl0IHRvLlxuICovXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25Mb2FkVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCBsb2FkVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5fbG9hZFR5cGVNYXAsIGV4dG5hbWUsIGxvYWRUeXBlKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSB4aHJUeXBlIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHhociB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCB4aHJUeXBlKSB7XG4gICAgc2V0RXh0TWFwKFJlc291cmNlLl94aHJUeXBlTWFwLCBleHRuYW1lLCB4aHJUeXBlKTtcbn07XG5cbmZ1bmN0aW9uIHNldEV4dE1hcChtYXAsIGV4dG5hbWUsIHZhbCkge1xuICAgIGlmIChleHRuYW1lICYmIGV4dG5hbWUuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgIGV4dG5hbWUgPSBleHRuYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dG5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hcFtleHRuYW1lXSA9IHZhbDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICAgIF9rZXlTdHI6IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIixcblxuICAgIGVuY29kZUJpbmFyeTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBcIlwiO1xuICAgICAgICB2YXIgYnl0ZWJ1ZmZlcjtcbiAgICAgICAgdmFyIGVuY29kZWRDaGFySW5kZXhlcyA9IG5ldyBBcnJheSg0KTtcbiAgICAgICAgdmFyIGlueCA9IDA7XG4gICAgICAgIHZhciBqbnggPSAwO1xuICAgICAgICB2YXIgcGFkZGluZ0J5dGVzID0gMDtcblxuICAgICAgICB3aGlsZSAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBGaWxsIGJ5dGUgYnVmZmVyIGFycmF5XG4gICAgICAgICAgICBieXRlYnVmZmVyID0gbmV3IEFycmF5KDMpO1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBieXRlYnVmZmVyLmxlbmd0aDsgam54KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGF3YXkgaGlnaC1vcmRlciBieXRlLCBhcyBkb2N1bWVudGVkIGF0OlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdCNIYW5kbGluZ19iaW5hcnlfZGF0YVxuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSBpbnB1dC5jaGFyQ29kZUF0KGlueCsrKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGVhY2ggZW5jb2RlZCBjaGFyYWN0ZXIsIDYgYml0cyBhdCBhIHRpbWVcbiAgICAgICAgICAgIC8vIGluZGV4IDE6IGZpcnN0IDYgYml0c1xuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzBdID0gYnl0ZWJ1ZmZlclswXSA+PiAyO1xuICAgICAgICAgICAgLy8gaW5kZXggMjogc2Vjb25kIDYgYml0cyAoMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAxICsgNCBtb3N0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBieXRlIDIpXG4gICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMV0gPSAoKGJ5dGVidWZmZXJbMF0gJiAweDMpIDw8IDQpIHwgKGJ5dGVidWZmZXJbMV0gPj4gNCk7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiB0aGlyZCA2IGJpdHMgKDQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMiArIDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gKChieXRlYnVmZmVyWzFdICYgMHgwZikgPDwgMikgfCAoYnl0ZWJ1ZmZlclsyXSA+PiA2KTtcbiAgICAgICAgICAgIC8vIGluZGV4IDM6IGZvcnRoIDYgYml0cyAoNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gYnl0ZWJ1ZmZlclsyXSAmIDB4M2Y7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHBhZGRpbmcgaGFwcGVuZWQsIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgIHBhZGRpbmdCeXRlcyA9IGlueCAtIChpbnB1dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFkZGluZ0J5dGVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCAyIGNoYXJhY3RlcnMgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMl0gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBsYXN0IGNoYXJhY3RlciB0byBwYWRkaW5nIGNoYXJcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vIHBhZGRpbmcgLSBwcm9jZWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vdyB3ZSB3aWxsIGdyYWIgZWFjaCBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgb3V0IG9mIG91ciBrZXlzdHJpbmdcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIG91ciBpbmRleCBhcnJheSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQgc3RyaW5nXG4gICAgICAgICAgICBmb3IgKGpueCA9IDA7IGpueCA8IGVuY29kZWRDaGFySW5kZXhlcy5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHRoaXMuX2tleVN0ci5jaGFyQXQoZW5jb2RlZENoYXJJbmRleGVzW2pueF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9Mb2FkZXInKTtcblxubW9kdWxlLmV4cG9ydHMuUmVzb3VyY2UgPSByZXF1aXJlKCcuL1Jlc291cmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzLm1pZGRsZXdhcmUgPSB7XG4gICAgY2FjaGluZzoge1xuICAgICAgICBtZW1vcnk6IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnknKVxuICAgIH0sXG4gICAgcGFyc2luZzoge1xuICAgICAgICBibG9iOiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL3BhcnNpbmcvYmxvYicpXG4gICAgfVxufTtcbiIsIi8vIGEgc2ltcGxlIGluLW1lbW9yeSBjYWNoZSBmb3IgcmVzb3VyY2VzXG52YXIgY2FjaGUgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICAvLyBpZiBjYWNoZWQsIHRoZW4gc2V0IGRhdGEgYW5kIGNvbXBsZXRlIHRoZSByZXNvdXJjZVxuICAgICAgICBpZiAoY2FjaGVbcmVzb3VyY2UudXJsXSkge1xuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IGNhY2hlW3Jlc291cmNlLnVybF07XG4gICAgICAgICAgICByZXNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIG5vdCBjYWNoZWQsIHdhaXQgZm9yIGNvbXBsZXRlIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb3VyY2Uub25jZSgnY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICBjYWNoZVt0aGlzLnVybF0gPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgnLi4vLi4vUmVzb3VyY2UnKSxcbiAgICBiNjQgPSByZXF1aXJlKCcuLi8uLi9iNjQnKTtcblxud2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblxuLy8gYSBtaWRkbGV3YXJlIGZvciB0cmFuc2Zvcm1pbmcgWEhSIGxvYWRlZCBCbG9icyBpbnRvIG1vcmUgdXNlZnVsIG9iamVjdHNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIHdhcyBhbiBYSFIgbG9hZCBvZiBhIGJsb2JcbiAgICAgICAgaWYgKHJlc291cmNlLnhociAmJiByZXNvdXJjZS54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBibG9iIHN1cHBvcnQgd2UgcHJvYmFibHkgZ290IGEgYmluYXJ5IHN0cmluZyBiYWNrXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5CbG9iIHx8IHR5cGVvZiByZXNvdXJjZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVzb3VyY2UueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaW1hZ2UsIGNvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgaW50byBhIGRhdGEgdXJsXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgdHlwZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5zcmMgPSAnZGF0YTonICsgdHlwZSArICc7YmFzZTY0LCcgKyBiNjQuZW5jb2RlQmluYXJ5KHJlc291cmNlLnhoci5yZXNwb25zZVRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGltYWdlIGxvYWRzIGFuZCB0aGVuIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5vbmxvYWQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY29udGVudCB0eXBlIHNheXMgdGhpcyBpcyBhbiBpbWFnZSwgdGhlbiB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBibG9iIGludG8gYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvdXJjZS5kYXRhLnR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlc291cmNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuYmxvYiA9IHJlc291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gc3JjO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuaXNJbWFnZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBubyBsb25nZXIgdXNlZCBibG9iIGFmdGVyIHRoZSBpbWFnZSBsb2Fkc1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJwaXhpLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMC4xMC1kZXZcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlBpeGkuanMgaXMgYSBmYXN0IGxpZ2h0d2VpZ2h0IDJEIGxpYnJhcnkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGRldmljZXMuXCIsXG4gIFwiYXV0aG9yXCI6IFwiTWF0IEdyb3Zlc1wiLFxuICBcImNvbnRyaWJ1dG9yc1wiOiBbXG4gICAgXCJDaGFkIEVuZ2xlciA8Y2hhZEBwYW50aGVyZGV2LmNvbT5cIixcbiAgICBcIlJpY2hhcmQgRGF2ZXkgPHJkYXZleUBnbWFpbC5jb20+XCJcbiAgXSxcbiAgXCJtYWluXCI6IFwiLi9zcmMvaW5kZXguanNcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHA6Ly9nb29kYm95ZGlnaXRhbC5jb20vXCIsXG4gIFwiYnVnc1wiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXNcIixcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiZ3VscCAmJiBndWxwIHdhdGNoXCIsXG4gICAgXCJ0ZXN0XCI6IFwiZ3VscCAmJiB0ZXN0ZW0gY2lcIixcbiAgICBcImJ1aWxkXCI6IFwiZ3VscFwiLFxuICAgIFwiZG9jc1wiOiBcImpzZG9jIC1jIC4vZ3VscC91dGlsL2pzZG9jLmNvbmYuanNvbiAtUiBSRUFETUUubWRcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpbi9cIixcbiAgICBcInNyYy9cIixcbiAgICBcIkNPTlRSSUJVVElORy5tZFwiLFxuICAgIFwiTElDRU5TRVwiLFxuICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgXCJSRUFETUUubWRcIlxuICBdLFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhc3luY1wiOiBcIl4xLjUuMFwiLFxuICAgIFwiYnJmc1wiOiBcIl4xLjQuMVwiLFxuICAgIFwiZWFyY3V0XCI6IFwiXjIuMC43XCIsXG4gICAgXCJldmVudGVtaXR0ZXIzXCI6IFwiXjEuMS4xXCIsXG4gICAgXCJnbC1tYXRyaXhcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL3RvamkvZ2wtbWF0cml4LmdpdFwiLFxuICAgIFwib2JqZWN0LWFzc2lnblwiOiBcIl40LjAuMVwiLFxuICAgIFwicGl4aS1nbC1jb3JlXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9Hb29kQm95RGlnaXRhbC9waXhpLWdsLWNvcmUuZ2l0XCIsXG4gICAgXCJyZXNvdXJjZS1sb2FkZXJcIjogXCJeMS42LjRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjExLjEuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4zLjIuMFwiLFxuICAgIFwiZGVsXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOS4wXCIsXG4gICAgXCJndWxwLWNhY2hlZFwiOiBcIl4xLjEuMFwiLFxuICAgIFwiZ3VscC1jb25jYXRcIjogXCJeMi42LjBcIixcbiAgICBcImd1bHAtZGVidWdcIjogXCJeMi4xLjBcIixcbiAgICBcImd1bHAtaGVhZGVyXCI6IFwiXjEuNy4xXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjExLjJcIixcbiAgICBcImd1bHAtbWlycm9yXCI6IFwiXjAuNC4wXCIsXG4gICAgXCJndWxwLXBsdW1iZXJcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtcmVuYW1lXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJndWxwLXNvdXJjZW1hcHNcIjogXCJeMS41LjJcIixcbiAgICBcImd1bHAtdWdsaWZ5XCI6IFwiXjEuNC4xXCIsXG4gICAgXCJndWxwLXV0aWxcIjogXCJeMy4wLjZcIixcbiAgICBcImphZ3VhcmpzLWpzZG9jXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZHNoaW1qcy9qYWd1YXJqcy1qc2RvYy5naXRcIixcbiAgICBcImpzZG9jXCI6IFwiXjMuMy4yXCIsXG4gICAgXCJqc2hpbnQtc3VtbWFyeVwiOiBcIl4wLjQuMFwiLFxuICAgIFwibWluaW1pc3RcIjogXCJeMS4yLjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMy4yXCIsXG4gICAgXCJyZXF1aXJlLWRpclwiOiBcIl4wLjMuMFwiLFxuICAgIFwicnVuLXNlcXVlbmNlXCI6IFwiXjEuMS4yXCIsXG4gICAgXCJ0ZXN0ZW1cIjogXCJeMC45LjRcIixcbiAgICBcInZpbnlsLWJ1ZmZlclwiOiBcIl4xLjAuMFwiLFxuICAgIFwidmlueWwtc291cmNlLXN0cmVhbVwiOiBcIl4xLjEuMFwiLFxuICAgIFwid2F0Y2hpZnlcIjogXCJeMy40LjBcIlxuICB9LFxuICBcImJyb3dzZXJpZnlcIjoge1xuICAgIFwidHJhbnNmb3JtXCI6IFtcbiAgICAgIFwiYnJmc1wiXG4gICAgXVxuICB9XG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLy8gYWRkIHNvbWUgZXh0cmEgdmFyaWFibGVzIHRvIHRoZSBjb250YWluZXIuLlxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpXG4pO1xuXG5cbi8qKlxuICogVGhlIEFjY2Vzc2liaWxpdHkgbWFuYWdlciByZWFjcmVhdGVzIHRoZSBhYmlsaXR5IHRvIHRhYiBhbmQgYW5kIGhhdmUgY29udGVudCByZWFkIGJ5IHNjcmVlbiByZWFkZXJzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGFzIGl0IGNhbiBwb3NzaWJseSBoZWxwIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyBhY2Nlc3MgcGl4aSBjb250ZW50LlxuICogTXVjaCBsaWtlIGludGVyYWN0aW9uIGFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBtYWRlIGFjY2Vzc2libGUuIFRoaXMgbWFuYWdlciB3aWxsIG1hcCB0aGUgZXZlbnRzIGFzIGlmIHRoZSBtb3VzZSB3YXMgYmVpbmcgdXNlZCwgbWluaW1pemluZyB0aGUgZWZmZXJvdCByZXF1aXJlZCB0byBpbXBsZW1lbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqL1xuZnVuY3Rpb24gQWNjZXNzaWJpbGl0eU1hbmFnZXIocmVuZGVyZXIpXG57XG5cdC8vIGZpcnN0IHdlIGNyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFxuICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUubGVmdCA9IDA7XG4gICAvL1xuICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuICAgXHRcbiAgIFx0LyoqXG4gICBcdCAqIFRoaXMgaXMgdGhlIGRvbSBlbGVtZW50IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gICBcdHRoaXMuZGl2ID0gZGl2O1xuXG4gICBcdC8qKlxuICAgXHQgKiBBIHNpbXBsZSBwb29sIGZvciBzdG9yaW5nIGRpdnMuXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7QXJyYXl9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuIFx0dGhpcy5wb29sID0gW107XG5cbiBcdC8qKlxuIFx0ICogVGhpcyBpcyBhIHRpY2sgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHJlbmRlcmVkLlxuIFx0ICogXG4gXHQgKiBAdHlwZSB7TnVtYmVyfVxuIFx0ICogQHByaXZhdGVcbiBcdCAqL1xuICAgXHR0aGlzLnJlbmRlcklkID0gMDtcblxuICAgXHQvKipcbiAgIFx0ICogU2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB2aXN1YWxseSBzaG93IHRoZSBkaXZzXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgIFx0ICovXG4gICBcdHRoaXMuZGVidWcgPSBmYWxzZTtcblxuICBcdC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGFjY2Vzc2liaWxpdHkgbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgIFx0LyoqXG4gICAgICogVGhlIGFycmF5IG9mIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzaWJsZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHByZSBiaW5kIHRoZSBmdW5jdGlvbnMuLlxuICAgICAqL1xuICAgXHR0aGlzLl9vbktleURvd24gPSB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKTtcbiAgIFx0dGhpcy5fb25Nb3VzZU1vdmUgPSB0aGlzLl9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogc3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFuYWdlci4gSWYgdGhlcmUgYXJlIG5vIGFjY2Vzc2libGUgb2JqZWN0cyBvciB0aGUgbW91c2UgaXMgbW92aW5nIHRoZSB3aWxsIGJlIGZhbHNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cbiAgIFx0Ly8gbGV0IGxpc3RlbiBmb3IgdGFiLi4gb25jZSBwcmVzc2VkIHdlIGNhbiBmaXJlIHVwIGFuZCBzaG93IHRoZSBhY2Nlc3NpYmlsaXR5IGxheWVyXG4gICBcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG59XG5cblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xuXG4vKipcbiAqIEFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBzaG93bi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgcHJlc2VzIHRoZSB0YWIga2V5XG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHRydWUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub24oJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cblx0dGhpcy5yZW5kZXJlci52aWV3LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5kaXYpO1x0XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIGhpZGRlbi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgbW92ZXMgdGhlIG1vdXNlXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYoIXRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9mZigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlKTtcblxuXHR0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcblxufTtcblxuLyoqXG4gKiBUaGlzIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aWxsIHJ1biB0aHJvdWdodCBoZSBzY2VuZSBncmFwaCBhbmQgYWRkIGFueSBuZXcgYWNjZXNzaWJsZSBvYmplY3RzIHRvIHRoZSBET00gbGF5ZXIuXG4gKiBAcGFyYW0gZWxlbWVudCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgRGlzcGxheU9iamVjdCB0byBjaGVjay5cbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG5cdGlmKCFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZihkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGUgJiYgZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcblx0e1xuXHRcdGlmKCFkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlKVxuXHRcdHtcblx0XHRcdHRoaXMuYWRkQ2hpbGQoZGlzcGxheU9iamVjdCk7XG5cdFx0fVxuXHQgICBcdFxuXHQgICBcdGRpc3BsYXlPYmplY3QucmVuZGVySWQgPSB0aGlzLnJlbmRlcklkO1xuXHR9XG5cblx0dmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcblxuXHRmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcblx0XHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKGNoaWxkcmVuW2ldKTtcblx0fVxufTtcblxuXG4vKipcbiAqIEJlZm9yZSBlYWNoIHJlbmRlciB0aGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGRpdnMgYXJlIG1hcHBlZCBjb3JyZWN0bHkgdG8gdGhlaXIgRGlzcGxheU9iamVjdHNcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpXG57XG5cblx0Ly8gdXBkYXRlIGNoaWxkcmVuLi4uXG5cdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHModGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkKTtcblxuXHR2YXIgcmVjdCA9IHRoaXMucmVuZGVyZXIudmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0dmFyIHN4ID0gcmVjdC53aWR0aCAgLyB0aGlzLnJlbmRlcmVyLndpZHRoO1xuXHR2YXIgc3kgPSByZWN0LmhlaWdodCAvIHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuXG5cdHZhciBkaXYgPSB0aGlzLmRpdjtcblxuXHRkaXYuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICdweCc7XG5cdGRpdi5zdHlsZS50b3AgPSByZWN0LnRvcCArICdweCc7XG5cdGRpdi5zdHlsZS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggKyAncHgnO1xuXHRkaXYuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgKyAncHgnO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuXHRcdGlmKGNoaWxkLnJlbmRlcklkICE9PSB0aGlzLnJlbmRlcklkKVxuXHRcdHtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaSwgMSk7XG5cdFx0XHR0aGlzLmRpdi5yZW1vdmVDaGlsZCggY2hpbGQuX2FjY2Vzc2libGVEaXYgKTtcblx0XHRcdHRoaXMucG9vbC5wdXNoKGNoaWxkLl9hY2Nlc3NpYmxlRGl2KTtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlRGl2ID0gbnVsbDtcblxuXHRcdFx0aS0tO1xuXG5cdFx0XHRpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBtYXAgZGl2IHRvIGRpc3BsYXkuLlxuXHRcdFx0ZGl2ID0gY2hpbGQuX2FjY2Vzc2libGVEaXY7XG5cdFx0XHR2YXIgaGl0QXJlYSA9IGNoaWxkLmhpdEFyZWE7XG5cdFx0XHR2YXIgd3QgPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuXHRcdFx0aWYoY2hpbGQuaGl0QXJlYSlcblx0XHRcdHtcblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoKHd0LnR4ICsgKGhpdEFyZWEueCAqIHd0LmEpKSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKCh3dC50eSArIChoaXRBcmVhLnkgKiB3dC5kKSkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHd0LmEgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogd3QuZCAqIHN5KSArICdweCc7XG5cdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0aGl0QXJlYSA9IGNoaWxkLmdldEJvdW5kcygpO1xuXG5cdFx0XHRcdHRoaXMuY2FwSGl0QXJlYShoaXRBcmVhKTtcblxuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9IChoaXRBcmVhLnggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gIChoaXRBcmVhLnkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiBzeSkgKyAncHgnO1xuXHRcdFx0fVx0XHRcblx0XHR9XG5cdH1cblxuXHQvLyBpbmNyZW1lbnQgdGhlIHJlbmRlciBpZC4uXG5cdHRoaXMucmVuZGVySWQrKztcbn07XG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYXBIaXRBcmVhID0gZnVuY3Rpb24gKGhpdEFyZWEpXG57XG4gICAgaWYgKGhpdEFyZWEueCA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoICs9IGhpdEFyZWEueDtcbiAgICAgICAgaGl0QXJlYS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaGl0QXJlYS55IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ICs9IGhpdEFyZWEueTtcbiAgICAgICAgaGl0QXJlYS55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueCArIGhpdEFyZWEud2lkdGggPiB0aGlzLnJlbmRlcmVyLndpZHRoIClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoIC0gaGl0QXJlYS54O1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS55ICsgaGl0QXJlYS5oZWlnaHQgPiB0aGlzLnJlbmRlcmVyLmhlaWdodCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0IC0gaGl0QXJlYS55O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBBZGRzIGEgRGlzcGxheU9iamVjdCB0byB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuLy9cdHRoaXMuYWN0aXZhdGUoKTtcblx0XG5cdHZhciBkaXYgPSB0aGlzLnBvb2wucG9wKCk7XG5cblx0aWYoIWRpdilcblx0e1xuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBcblxuXHQgICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGVidWcgPyAncmdiYSgyNTUsMCwwLDAuNSknIDogJ3RyYW5zcGFyZW50Jztcblx0ICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdCAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcblx0ICAgIGRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdub25lJztcblxuXHQgICAgXG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX29uRm9jdXNPdXQuYmluZCh0aGlzKSk7XG5cdH1cblx0ICAgXHRcblxuXG5cblx0ZGl2LnRpdGxlID0gZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlVGl0bGUgfHwgJ2Rpc3BsYXlPYmplY3QgJyArIHRoaXMudGFiSW5kZXg7XG5cblx0Ly9cblx0XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUgPSB0cnVlO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ID0gZGl2O1xuXHRkaXYuZGlzcGxheU9iamVjdCA9IGRpc3BsYXlPYmplY3Q7XG5cblxuXHR0aGlzLmNoaWxkcmVuLnB1c2goZGlzcGxheU9iamVjdCk7XG5cdHRoaXMuZGl2LmFwcGVuZENoaWxkKCBkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ICk7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYudGFiSW5kZXggPSBkaXNwbGF5T2JqZWN0LnRhYkluZGV4O1xufTtcblxuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBidXR0b24gcHJlc3MgdG8gcGl4aSdzIEludGVyYWN0aW9uTWFuYWdlciAoY2xpY2spXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnY2xpY2snLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3ZlcilcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1cyA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3V0KVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzT3V0ID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uS2V5RG93biA9IGZ1bmN0aW9uKGUpXG57XG5cdGlmKGUua2V5Q29kZSAhPT0gOSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuYWN0aXZhdGUoKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmUgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZGVhY3RpdmF0ZSgpO1xufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgXG57XG5cdHRoaXMuZGl2ID0gbnVsbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblx0XHR0aGlzLmNoaWxkcmVuW2ldLmRpdiA9IG51bGw7XG5cdH1cblxuXHRcblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuXHRcdFxuXHR0aGlzLnBvb2wgPSBudWxsO1xuXHR0aGlzLmNoaWxkcmVuID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5cbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYWNjZXNzaWJsZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmFjY2Vzc2liaWxpdHkuYWNjZXNzaWJsZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgYWNjZXNzaWJsZVRhcmdldCA9IHtcbiAgICBcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGVUaXRsZTpudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICB0YWJJbmRleDowLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZUFjdGl2ZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVEaXY6ZmFsc2VcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBhY2Nlc3NpYmxlVGFyZ2V0O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgYWNjZXNzaWJpbGl0eSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYWNjZXNzaWJsZVRhcmdldDogICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpLFxuICAgIEFjY2Vzc2liaWxpdHlNYW5hZ2VyOiByZXF1aXJlKCcuL0FjY2Vzc2liaWxpdHlNYW5hZ2VyJylcbn07XG4iLCIvKipcbiAqIENvbnN0YW50IHZhbHVlcyB1c2VkIGluIHBpeGlcbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG52YXIgQ09OU1QgPSB7XG4gICAgLyoqXG4gICAgICogU3RyaW5nIG9mIHRoZSBjdXJyZW50IFBJWEkgdmVyc2lvblxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBWRVJTSU9OXG4gICAgICovXG4gICAgVkVSU0lPTjogcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQSV8yIC0gVHdvIFBpXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFBJXzI6IE1hdGguUEkgKiAyLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJBRF9UT19ERUcgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyByYWRpYW5zIHRvIGRlZ3JlZXNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUkFEX1RPX0RFRzogMTgwIC8gTWF0aC5QSSxcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBERUdfVE9fUkFEIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgZGVncmVlcyB0byByYWRpYW5zXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIERFR19UT19SQUQ6IE1hdGguUEkgLyAxODAsXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgZnJhbWVzIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gVEFSR0VUX0ZQTVM9MC4wNlxuICAgICAqL1xuICAgIFRBUkdFVF9GUE1TOiAwLjA2LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgdG8gaWRlbnRpZnkgdGhlIFJlbmRlcmVyIFR5cGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFJFTkRFUkVSX1RZUEVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuV0VCR0xcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5DQU5WQVNcbiAgICAgKi9cbiAgICBSRU5ERVJFUl9UWVBFOiB7XG4gICAgICAgIFVOS05PV046ICAgIDAsXG4gICAgICAgIFdFQkdMOiAgICAgIDEsXG4gICAgICAgIENBTlZBUzogICAgIDJcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyBibGVuZCBtb2RlcyBzdXBwb3J0ZWQgYnkgUElYSS4gSU1QT1JUQU5UIC0gVGhlIFdlYkdMIHJlbmRlcmVyIG9ubHkgc3VwcG9ydHNcbiAgICAgKiB0aGUgTk9STUFMLCBBREQsIE1VTFRJUExZIGFuZCBTQ1JFRU4gYmxlbmQgbW9kZXMuIEFueXRoaW5nIGVsc2Ugd2lsbCBzaWxlbnRseSBhY3QgbGlrZVxuICAgICAqIE5PUk1BTC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gQkxFTkRfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkFERFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5NVUxUSVBMWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQ1JFRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuT1ZFUkxBWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5EQVJLRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTElHSFRFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9ET0RHRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9CVVJOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhBUkRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU09GVF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5ESUZGRVJFTkNFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkVYQ0xVU0lPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IVUVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0FUVVJBVElPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MVU1JTk9TSVRZXG4gICAgICovXG4gICAgQkxFTkRfTU9ERVM6IHtcbiAgICAgICAgTk9STUFMOiAgICAgICAgIDAsXG4gICAgICAgIEFERDogICAgICAgICAgICAxLFxuICAgICAgICBNVUxUSVBMWTogICAgICAgMixcbiAgICAgICAgU0NSRUVOOiAgICAgICAgIDMsXG4gICAgICAgIE9WRVJMQVk6ICAgICAgICA0LFxuICAgICAgICBEQVJLRU46ICAgICAgICAgNSxcbiAgICAgICAgTElHSFRFTjogICAgICAgIDYsXG4gICAgICAgIENPTE9SX0RPREdFOiAgICA3LFxuICAgICAgICBDT0xPUl9CVVJOOiAgICAgOCxcbiAgICAgICAgSEFSRF9MSUdIVDogICAgIDksXG4gICAgICAgIFNPRlRfTElHSFQ6ICAgICAxMCxcbiAgICAgICAgRElGRkVSRU5DRTogICAgIDExLFxuICAgICAgICBFWENMVVNJT046ICAgICAgMTIsXG4gICAgICAgIEhVRTogICAgICAgICAgICAxMyxcbiAgICAgICAgU0FUVVJBVElPTjogICAgIDE0LFxuICAgICAgICBDT0xPUjogICAgICAgICAgMTUsXG4gICAgICAgIExVTUlOT1NJVFk6ICAgICAxNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIHdlYmdsIGRyYXcgbW9kZXMuIFRoZXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggR0wgZHJhd01vZGUgdG8gdXNlXG4gICAgICogdW5kZXIgY2VydGFpbiBzaXR1YXRpb25zIGFuZCByZW5kZXJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5QT0lOVFNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfTE9PUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX0ZBTlxuICAgICAqL1xuICAgIERSQVdfTU9ERVM6IHtcbiAgICAgICAgUE9JTlRTOiAgICAgICAgIDAsXG4gICAgICAgIExJTkVTOiAgICAgICAgICAxLFxuICAgICAgICBMSU5FX0xPT1A6ICAgICAgMixcbiAgICAgICAgTElORV9TVFJJUDogICAgIDMsXG4gICAgICAgIFRSSUFOR0xFUzogICAgICA0LFxuICAgICAgICBUUklBTkdMRV9TVFJJUDogNSxcbiAgICAgICAgVFJJQU5HTEVfRkFOOiAgIDZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBwaXhpLlxuICAgICAqXG4gICAgICogVGhlIERFRkFVTFQgc2NhbGUgbW9kZSBhZmZlY3RzIHRoZSBkZWZhdWx0IHNjYWxpbmcgbW9kZSBvZiBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAgKiBJdCBjYW4gYmUgcmUtYXNzaWduZWQgdG8gZWl0aGVyIExJTkVBUiBvciBORUFSRVNULCBkZXBlbmRpbmcgdXBvbiBzdWl0YWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0NBTEVfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuREVGQVVMVD1MSU5FQVJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTElORUFSIFNtb290aCBzY2FsaW5nXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLk5FQVJFU1QgUGl4ZWxhdGluZyBzY2FsaW5nXG4gICAgICovXG4gICAgU0NBTEVfTU9ERVM6IHtcbiAgICAgICAgREVGQVVMVDogICAgMCxcbiAgICAgICAgTElORUFSOiAgICAgMCxcbiAgICAgICAgTkVBUkVTVDogICAgMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZml4IHRoYXQgZGVub3RlcyBhIFVSTCBpcyBmb3IgYSByZXRpbmEgYXNzZXRcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gUkVUSU5BX1BSRUZJWFxuICAgICAqL1xuICAgIC8vZXhhbXBsZTogJ0AyeCcsXG4gICAgUkVUSU5BX1BSRUZJWDogL0AoLispeC8sXG5cbiAgICBSRVNPTFVUSU9OOjEsXG5cbiAgICBGSUxURVJfUkVTT0xVVElPTjoxLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgcmVuZGVyIG9wdGlvbnMgaWYgbm9uZSBhcmUgc3VwcGxpZWQgdG8ge0BsaW5rIFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKiBvciB7QGxpbmsgUElYSS5DYW52YXNSZW5kZXJlcn0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERFRkFVTFRfUkVOREVSX09QVElPTlNcbiAgICAgKiBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnZpZXc9bnVsbFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy50cmFuc3BhcmVudD1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hbnRpYWxpYXM9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuZm9yY2VGWEFBPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnJlc29sdXRpb249MVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmF1dG9SZXNpemU9ZmFsc2VcbiAgICAgKi9cbiAgICBERUZBVUxUX1JFTkRFUl9PUFRJT05TOiB7XG4gICAgICAgIHZpZXc6IG51bGwsXG4gICAgICAgIHJlc29sdXRpb246IDEsXG4gICAgICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgICAgIGZvcmNlRlhBQTogZmFsc2UsXG4gICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgIGNsZWFyQmVmb3JlUmVuZGVyOiB0cnVlLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgICAgICByb3VuZFBpeGVsczogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnRzIHRoYXQgaWRlbnRpZnkgc2hhcGVzLCBtYWlubHkgdG8gcHJldmVudCBgaW5zdGFuY2VvZmAgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFU1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUE9MWT0wXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SRUNUPTFcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkNJUkM9MlxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuRUxJUD0zXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SUkVDPTRcbiAgICAgKi9cbiAgICBTSEFQRVM6IHtcbiAgICAgICAgUE9MWTogMCxcbiAgICAgICAgUkVDVDogMSxcbiAgICAgICAgQ0lSQzogMixcbiAgICAgICAgRUxJUDogMyxcbiAgICAgICAgUlJFQzogNFxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBtYXliZSBjaGFuZ2UgdG8gU1BSSVRFLkJBVENIX1NJWkU6IDIwMDBcbiAgICAvLyBUT0RPOiBtYXliZSBhZGQgUEFSVElDTEUuQkFUQ0hfU0laRTogMTUwMDBcbiAgICBTUFJJVEVfQkFUQ0hfU0laRTogMjAwMCAvL25pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSBhbmQgZGVza3RvcCBtYWNoaW5lc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDT05TVDtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gcmVxdWlyZSgnLi9EaXNwbGF5T2JqZWN0JyksXG4gICAgUmVuZGVyVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgQ29udGFpbmVyIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0cy5cbiAqIEl0IGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBkaXNwbGF5IG9iamVjdHMgdGhhdCBhY3QgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIG9iamVjdHMuXG4gKlxuICpgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiBgYGBcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5EaXNwbGF5T2JqZWN0XG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDb250YWluZXIoKVxue1xuICAgIERpc3BsYXlPYmplY3QuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdFtdfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERpc3BsYXlPYmplY3QucHJvdG90eXBlKTtcbkNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5lcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udGFpbmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gMTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIGhlaWdodCA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBPdmVycmlkYWJsZSBtZXRob2QgdGhhdCBjYW4gYmUgdXNlZCBieSBDb250YWluZXIgc3ViY2xhc3NlcyB3aGVuZXZlciB0aGUgY2hpbGRyZW4gYXJyYXkgaXMgbW9kaWZpZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7fTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lci5cbiAqIFxuICogWW91IGNhbiBhbHNvIGFkZCBtdWx0cGxlIGl0ZW1zIGxpa2Ugc286IG15Q29udGFpbmVyLmFkZENoaWxkKHRoaW5rT25lLCB0aGluZ1R3bywgdGhpbmdUaHJlZSlcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBhZGQgdG8gdGhlIGNvbnRhaW5lclxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57IFxuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaGFzIGEgcGFyZW50IHRoZW4gbGV0cyByZW1vdmUgaXQgYXMgUGl4aSBvYmplY3RzIGNhbiBvbmx5IGV4aXN0IGluIG9uZSBwbGFjZVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UodGhpcy5jaGlsZHJlbi5sZW5ndGgtMSk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lciBhdCBhIHNwZWNpZmllZCBpbmRleC4gSWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd25cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRvIGFkZFxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBwbGFjZSB0aGUgY2hpbGQgaW5cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkQXQgPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hpbGQgKyAnYWRkQ2hpbGRBdDogVGhlIGluZGV4ICcrIGluZGV4ICsnIHN1cHBsaWVkIGlzIG91dCBvZiBib3VuZHMgJyArIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiAyIERpc3BsYXkgT2JqZWN0cyB3aXRoaW4gdGhpcyBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKiBAcGFyYW0gY2hpbGQyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc3dhcENoaWxkcmVuID0gZnVuY3Rpb24gKGNoaWxkLCBjaGlsZDIpXG57XG4gICAgaWYgKGNoaWxkID09PSBjaGlsZDIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluZGV4MSA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG4gICAgdmFyIGluZGV4MiA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZDIpO1xuXG4gICAgaWYgKGluZGV4MSA8IDAgfHwgaW5kZXgyIDwgMClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3dhcENoaWxkcmVuOiBCb3RoIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0cyBtdXN0IGJlIGNoaWxkcmVuIG9mIHRoZSBjYWxsZXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDFdID0gY2hpbGQyO1xuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgyXSA9IGNoaWxkO1xuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleDEgPCBpbmRleDIgPyBpbmRleDEgOiBpbmRleDIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBwb3NpdGlvbiBvZiBhIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgdG8gaWRlbnRpZnlcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdCB0byBpZGVudGlmeVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiBhbiBleGlzdGluZyBjaGlsZCBpbiB0aGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIGZvciB3aGljaCB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGluZGV4IG51bWJlclxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSByZXN1bHRpbmcgaW5kZXggbnVtYmVyIGZvciB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuXG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgY3VycmVudEluZGV4LCAxKTsgLy8gcmVtb3ZlIGZyb20gb2xkIHBvc2l0aW9uXG4gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsgLy9hZGQgYXQgbmV3IHBvc2l0aW9uXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBhdFxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgYXQgdGhlIGdpdmVuIGluZGV4LCBpZiBhbnkuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDaGlsZEF0OiBTdXBwbGllZCBpbmRleCAnICsgaW5kZXggKyAnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjaGlsZCBsaXN0LCBvciB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baW5kZXhdO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW1vdmVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIHNwZWNpZmllZCBpbmRleCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgZnJvbVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIHZhciBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRBdChpbmRleCk7XG5cbiAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIGNvbnRhaW5lciB0aGF0IGFyZSB3aXRoaW4gdGhlIGJlZ2luIGFuZCBlbmQgaW5kZXhlcy5cbiAqXG4gKiBAcGFyYW0gYmVnaW5JbmRleCB7bnVtYmVyfSBUaGUgYmVnaW5uaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gKiBAcGFyYW0gZW5kSW5kZXgge251bWJlcn0gVGhlIGVuZGluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzaXplIG9mIHRoZSBjb250YWluZXIuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbiAoYmVnaW5JbmRleCwgZW5kSW5kZXgpXG57XG4gICAgdmFyIGJlZ2luID0gYmVnaW5JbmRleCB8fCAwO1xuICAgIHZhciBlbmQgPSB0eXBlb2YgZW5kSW5kZXggPT09ICdudW1iZXInID8gZW5kSW5kZXggOiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgcmFuZ2UgPSBlbmQgLSBiZWdpbjtcbiAgICB2YXIgcmVtb3ZlZCwgaTtcblxuICAgIGlmIChyYW5nZSA+IDAgJiYgcmFuZ2UgPD0gZW5kKVxuICAgIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGJlZ2luLCByYW5nZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0ucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShiZWdpbkluZGV4KTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZ2UgPT09IDAgJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyZW1vdmVDaGlsZHJlbjogbnVtZXJpYyB2YWx1ZXMgYXJlIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UuJyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIgZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSBmYWxzZTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkNvbnRhaW5lci5wcm90b3R5cGUuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtID0gQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIHRoZSBib3VuZHMgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCB0aGlzIHJlbmRlciBzZXNzaW9uIHNvIHJldHVybiB3aGF0IHdlIGhhdmVcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgY2hpbGRCb3VuZHM7XG4gICAgICAgIHZhciBjaGlsZE1heFg7XG4gICAgICAgIHZhciBjaGlsZE1heFk7XG5cbiAgICAgICAgdmFyIGNoaWxkVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgY2hpbGRCb3VuZHMgPSB0aGlzLmNoaWxkcmVuW2ldLmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBtaW5YID0gbWluWCA8IGNoaWxkQm91bmRzLnggPyBtaW5YIDogY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIG1pblkgPSBtaW5ZIDwgY2hpbGRCb3VuZHMueSA/IG1pblkgOiBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBjaGlsZE1heFggPSBjaGlsZEJvdW5kcy53aWR0aCArIGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICBjaGlsZE1heFkgPSBjaGlsZEJvdW5kcy5oZWlnaHQgKyBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBtYXhYID0gbWF4WCA+IGNoaWxkTWF4WCA/IG1heFggOiBjaGlsZE1heFg7XG4gICAgICAgICAgICBtYXhZID0gbWF4WSA+IGNoaWxkTWF4WSA/IG1heFkgOiBjaGlsZE1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkVmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJHZXRCb3VuZHMgPSBDb250YWluZXIucHJvdG90eXBlLmdldEJvdW5kcztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5vbi1nbG9iYWwgbG9jYWwgYm91bmRzIG9mIHRoZSBDb250YWluZXIgYXMgYSByZWN0YW5nbGUuXG4gKiBUaGUgY2FsY3VsYXRpb24gdGFrZXMgYWxsIHZpc2libGUgY2hpbGRyZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4Q2FjaGUgPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdGguTWF0cml4LklERU5USVRZO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdHJpeENhY2hlO1xuXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMoIG1hdGguTWF0cml4LklERU5USVRZICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICBcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpLCBqO1xuXG4gICAgLy8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyBlbGVtZW50IGhhcyBhIG1hc2sgb3IgYSBmaWx0ZXIuXG4gICAgaWYgKHRoaXMuX21hc2sgfHwgdGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuXG4gICAgICAgIC8vIHB1c2ggZmlsdGVyIGZpcnN0IGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyBjb3JyZWN0IGZvciBhbnkgbWFza2luZ1xuICAgICAgICBpZiAodGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRoaXMsIHRoaXMuX2ZpbHRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnB1c2hNYXNrKHRoaXMsIHRoaXMuX21hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgLy8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBiYXRjaCwgb25seSByZW5kZXJlZCBpZiBpdCBoYXMgYSB0ZXh0dXJlLlxuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIG1ha2Ugc3VyZSB0aGV5IGdldCByZW5kZXJlZFxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmlsdGVycylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gc2ltcGxlIHJlbmRlciBjaGlsZHJlbiFcbiAgICAgICAgZm9yIChpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnJlbmRlcldlYkdMKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3ViY2xhc3NcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyB0aGlzIGlzIHdoZXJlIGNvbnRlbnQgaXRzZWxmIGdldHMgcmVuZGVyZWQuLi5cbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpc1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMuYWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcy5fbWFzaywgcmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlckNhbnZhcyhyZW5kZXJlcik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFzaylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2socmVuZGVyZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcbntcbiAgICBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBpZiAoZGVzdHJveUNoaWxkcmVuKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KGRlc3Ryb3lDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9UcmFuc2Zvcm0nKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgIF90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgdGhhdCBhcmUgcmVuZGVyZWQgb24gdGhlIHNjcmVlbi5cbiAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvbiBpdHMgb3duIHJhdGhlciBpdCBzaG91bGQgYmUgZXh0ZW5kZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIERpc3BsYXlPYmplY3QoKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29vcmRpbmF0ZSBvZiB0aGUgb2JqZWN0IHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy50cmFuc2Zvcm0ucG9zaXRpb247XG4gICAvLyB0aGlzLl9wb3NpdGlvbiA9IG5ldyBDYWNoZVBvaW50KHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIGZhY3RvciBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlID0gdGhpcy50cmFuc2Zvcm0uc2NhbGVcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXZvdCBwb2ludCBvZiB0aGUgZGlzcGxheU9iamVjdCB0aGF0IGl0IHJvdGF0ZXMgYXJvdW5kXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucGl2b3QgPSB0aGlzLnRyYW5zZm9ybS5waXZvdFxuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2tldyBmYWN0b3IgZm9yIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5za2V3ID0gdGhpcy50cmFuc2Zvcm0uc2tld1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9yb3RhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BhY2l0eSBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpc2liaWxpdHkgb2YgdGhlIG9iamVjdC4gSWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biwgYW5kXG4gICAgICogdGhlIHVwZGF0ZVRyYW5zZm9ybSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDYW4gdGhpcyBvYmplY3QgYmUgcmVuZGVyZWQsIGlmIGZhbHNlIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgZHJhd24gYnV0IHRoZSB1cGRhdGVUcmFuc2Zvcm1cbiAgICAgKiBtZXRob2RzIHdpbGwgc3RpbGwgYmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmFibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIHRoaXMgZGlzcGxheSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNvbnRhaW5lcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbXVsdGlwbGllZCBhbHBoYSBvZiB0aGUgZGlzcGxheU9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRyYW5zZm9ybSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIHdvcmxkIChwYXJlbnQpIGZhY3RvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gdGhpcy50cmFuc2Zvcm0ubG9jYWxUcmFuc2Zvcm07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJlYSB0aGUgZmlsdGVyIGlzIGFwcGxpZWQgdG8uIFRoaXMgaXMgdXNlZCBhcyBtb3JlIG9mIGFuIG9wdGltaXNhdGlvblxuICAgICAqIHJhdGhlciB0aGFuIGZpZ3VyaW5nIG91dCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgZGlzcGxheU9iamVjdCBlYWNoIGZyYW1lIHlvdSBjYW4gc2V0IHRoaXMgcmVjdGFuZ2xlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xuXG4gICAgLyoqeHd3XG4gICAgICogY2FjaGVkIHNpbiByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3IgPSAwO1xuXG4gICAgLyoqXG4gICAgICogY2FjaGVkIGNvcyByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3IgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRzID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vc3QgdXAtdG8tZGF0ZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcmlnaW5hbCwgY2FjaGVkIG1hc2sgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXNrID0gbnVsbDtcblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGF5T2JqZWN0O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB4IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NhbGVYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByb3RhdGlvbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY3IgPSBNYXRoLmNvcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHNwcml0ZSBpcyBnbG9iYWxseSB2aXNpYmxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHdvcmxkVmlzaWJsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcztcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbWFzayBmb3IgdGhlIGRpc3BsYXlPYmplY3QuIEEgbWFzayBpcyBhbiBvYmplY3QgdGhhdCBsaW1pdHMgdGhlIHZpc2liaWxpdHkgb2YgYW4gb2JqZWN0IHRvIHRoZSBzaGFwZSBvZiB0aGUgbWFzayBhcHBsaWVkIHRvIGl0LlxuICAgICAqIEluIFBJWEkgYSByZWd1bGFyIG1hc2sgbXVzdCBiZSBhIFBJWEkuR3JhcGhpY3Mgb3IgYSBQSVhJLlNwcml0ZSBvYmplY3QuIFRoaXMgYWxsb3dzIGZvciBtdWNoIGZhc3RlciBtYXNraW5nIGluIGNhbnZhcyBhcyBpdCB1dGlsaXNlcyBzaGFwZSBjbGlwcGluZy5cbiAgICAgKiBUbyByZW1vdmUgYSBtYXNrLCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc3xQSVhJLlNwcml0ZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIG1hc2s6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFzaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX21hc2sgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFzay5yZW5kZXJhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVycyBmb3IgdGhlIGRpc3BsYXlPYmplY3QuXG4gICAgICogKiBJTVBPUlRBTlQ6IFRoaXMgaXMgYSB3ZWJHTCBvbmx5IGZlYXR1cmUgYW5kIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqIFRvIHJlbW92ZSBmaWx0ZXJzIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnbnVsbCdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGZpbHRlcnM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLnNsaWNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gdmFsdWUgJiYgdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBUT0RPIC0gT3B0aW1pemF0aW9uIHBhc3MhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgLy8gbXVsdGlwbHkgdGhlIGFscGhhcy4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG59O1xuXG4vLyBwZXJmb3JtYW5jZSBpbmNyZWFzZSB0byBhdm9pZCB1c2luZyBjYWxsLi4gKDEweCBmYXN0ZXIpXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtID0gRGlzcGxheU9iamVjdC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtO1xuXG4vKipcbiAqXG4gKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeCkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMobWF0aC5NYXRyaXguSURFTlRJVFkpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvR2xvYmFsID0gZnVuY3Rpb24gKHBvc2l0aW9uKVxue1xuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb3RcbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseShwb3NpdGlvbik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdCByZWxhdGl2ZSB0byBhbm90aGVyIHBvaW50XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcGFyYW0gW2Zyb21dIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgZ2xvYmFsIHBvc2l0aW9uIGZyb21cbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgUG9pbnQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvTG9jYWwgPSBmdW5jdGlvbiAocG9zaXRpb24sIGZyb20sIHBvaW50KVxue1xuICAgIGlmIChmcm9tKVxuICAgIHtcbiAgICAgICAgcG9zaXRpb24gPSBmcm9tLnRvR2xvYmFsKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBzaW1wbHkgYXBwbHkgdGhlIG1hdHJpeC4uXG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvc2l0aW9uLCBwb2ludCk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFyZW50IENvbnRhaW5lciBvZiB0aGlzIERpc3BsYXlPYmplY3RcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdG8gYWRkIHRoaXMgRGlzcGxheU9iamVjdCB0b1xuICogQHJldHVybiB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRoYXQgdGhpcyBEaXNwbGF5T2JqZWN0IHdhcyBhZGRlZCB0b1xuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXIuYWRkQ2hpbGQpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFBhcmVudDogQXJndW1lbnQgbXVzdCBiZSBhIENvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRDaGlsZCh0aGlzKTtcbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzZXQgdGhlIHBvc3Rpb24sIHNjYWxlLCBza2V3IGFuZCBwaXZvdCBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBUaGUgWCBwb3NpdGlvblxuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IFRoZSBZIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3NjYWxlWD0xXSB7bnVtYmVyfSBUaGUgWCBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtzY2FsZVk9MV0ge251bWJlcn0gVGhlIFkgc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbcm90YXRpb249MF0ge251bWJlcn0gVGhlIHJvdGF0aW9uXG4gKiBAcGFyYW0gW3NrZXdYPTBdIHtudW1iZXJ9IFRoZSBYIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbc2tld1k9MF0ge251bWJlcn0gVGhlIFkgc2tldyB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFg9MF0ge251bWJlcn0gVGhlIFggcGl2b3QgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RZPTBdIHtudW1iZXJ9IFRoZSBZIHBpdm90IHZhbHVlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKHgsIHksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZLCBwaXZvdFgsIHBpdm90WSkgLy9qc2hpbnQgaWdub3JlOmxpbmVcbntcbiAgICB0aGlzLnBvc2l0aW9uLnggPSB4IHx8IDA7XG4gICAgdGhpcy5wb3NpdGlvbi55ID0geSB8fCAwO1xuICAgIHRoaXMuc2NhbGUueCA9ICFzY2FsZVggPyAxIDogc2NhbGVYO1xuICAgIHRoaXMuc2NhbGUueSA9ICFzY2FsZVkgPyAxIDogc2NhbGVZO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgIHRoaXMuc2tldy54ID0gc2tld1ggfHwgMDtcbiAgICB0aGlzLnNrZXcueSA9IHNrZXdZIHx8IDA7XG4gICAgdGhpcy5waXZvdC54ID0gcGl2b3RYIHx8IDA7XG4gICAgdGhpcy5waXZvdC55ID0gcGl2b3RZIHx8IDA7XG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEJhc2UgZGVzdHJveSBtZXRob2QgZm9yIGdlbmVyaWMgZGlzcGxheSBvYmplY3RzXG4gKlxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcblxuICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2NhbGUgPSBudWxsO1xuICAgIHRoaXMucGl2b3QgPSBudWxsO1xuICAgIHRoaXMuc2tldyA9IG51bGw7XG5cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcblxuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IG1hdGguUG9pbnQoMSwxKTtcbiAgICB0aGlzLnBpdm90ID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNrZXcgPSBuZXcgbWF0aC5Qb2ludCgwLjApO1xuICAgIFxuICAgIHRoaXMucm90YXRpb24gPSAwO1xuICAgIHRoaXMuX3NyID0gTWF0aC5zaW4oMCk7XG4gICAgdGhpcy5fY3IgPSBNYXRoLmNvcygwKTtcbiAgICBcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufVxuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHJhbnNmb3JtO1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uIChwYXJlbnRUcmFuc2Zvcm0pXG57XG4gICAgdmFyIHB0ID0gcGFyZW50VHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGx0ID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcblxuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueDtcbiAgICAgICAgbHQuYiAgPSAgdGhpcy5fc3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmMgID0gLXRoaXMuX3NyICogdGhpcy5zY2FsZS55O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQudHggPSAgdGhpcy5wb3NpdGlvbi54IC0gKHRoaXMucGl2b3QueCAqIGx0LmEgKyB0aGlzLnBpdm90LnkgKiBsdC5jKTtcbiAgICAgICAgbHQudHkgPSAgdGhpcy5wb3NpdGlvbi55IC0gKHRoaXMucGl2b3QueCAqIGx0LmIgKyB0aGlzLnBpdm90LnkgKiBsdC5kKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmRpcnR5IHx8IHBhcmVudC5kaXJ0eSlcbiAgICB7ICAgICAgXG4gICAgICAgIC8vIGNvbmNhdCB0aGUgcGFyZW50IG1hdHJpeCB3aXRoIHRoZSBvYmplY3RzIHRyYW5zZm9ybS5cbiAgICAgICAgd3QuYSAgPSBsdC5hICAqIHB0LmEgKyBsdC5iICAqIHB0LmM7XG4gICAgICAgIHd0LmIgID0gbHQuYSAgKiBwdC5iICsgbHQuYiAgKiBwdC5kO1xuICAgICAgICB3dC5jICA9IGx0LmMgICogcHQuYSArIGx0LmQgICogcHQuYztcbiAgICAgICAgd3QuZCAgPSBsdC5jICAqIHB0LmIgKyBsdC5kICAqIHB0LmQ7XG4gICAgICAgIHd0LnR4ID0gbHQudHggKiBwdC5hICsgbHQudHkgKiBwdC5jICsgcHQudHg7XG4gICAgICAgIHd0LnR5ID0gbHQudHggKiBwdC5iICsgbHQudHkgKiBwdC5kICsgcHQudHk7ICAgICAgIFxuICAgIFxuICAgLy8gICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgLy8gICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbi8vICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgLy8gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm07XG5cblxuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vR3JhcGhpY3NEYXRhJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcFBvaW50ID0gbmV3IG1hdGguUG9pbnQoKTtcblxuLyoqXG4gKiBUaGUgR3JhcGhpY3MgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB1c2VkIHRvIGRyYXcgcHJpbWl0aXZlIHNoYXBlcyBzdWNoIGFzIGxpbmVzLCBjaXJjbGVzIGFuZFxuICogcmVjdGFuZ2xlcyB0byB0aGUgZGlzcGxheSwgYW5kIHRvIGNvbG9yIGFuZCBmaWxsIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3MoKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCAodGhpY2tuZXNzKSBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gMDtcblxuICAgIC8qKlxuICAgICAqIEdyYXBoaWNzIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQXBwbHkgYSB2YWx1ZSBvZiAweEZGRkZGRiB0byByZXNldCB0aGUgdGludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByZXZpb3VzIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVXNlZCB0byBjb21wYXJlIHRvIHRoZSBjdXJyZW50IHRpbnQgYW5kIGNoZWNrIGlmIHRoZXJlcyBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMuX3ByZXZUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUw7XG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHBhdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBjb250YWluaW5nIHNvbWUgV2ViR0wtcmVsYXRlZCBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgb2JqZWN0Pn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIFRPRE8gLSBfd2ViZ2wgc2hvdWxkIHVzZSBhIHByb3RvdHlwZSBvYmplY3QsIG5vdCBhIHJhbmRvbSB1bmRvY3VtZW50ZWQgb2JqZWN0Li4uXG4gICAgdGhpcy5fd2ViR0wgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBzaGFwZSBpcyBiZWluZyB1c2VkIGFzIGEgbWFzay5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc01hc2sgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBib3VuZHMnIHBhZGRpbmcgdXNlZCBmb3IgYm91bmRzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYm91bmRzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBsb2NhbCBib3VuZHMgdG8gcHJldmVudCByZWNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLDAsMSwxKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgV2ViR0wgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlXG4gICAgICogZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgY2FjaGVkIHNwcml0ZSBvYmplY3QgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGNhY2hlQXNCaXRtYXAgaXMgc2V0IHRvIHRydWUgdGhlIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIGFzIGlmIGl0IHdhcyBhIHNwcml0ZS5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGdyYXBoaWNzIGVsZW1lbnQgZG9lcyBub3QgY2hhbmdlIG9mdGVuLCBhcyBpdCB3aWxsIHNwZWVkIHVwIHRoZSByZW5kZXJpbmdcbiAgICAgKiBvZiB0aGUgb2JqZWN0IGluIGV4Y2hhbmdlIGZvciB0YWtpbmcgdXAgdGV4dHVyZSBtZW1vcnkuIEl0IGlzIGFsc28gdXNlZnVsIGlmIHlvdSBuZWVkIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB0byBiZSBhbnRpLWFsaWFzZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyBjYW52YXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGlmXG4gICAgICogeW91IGFyZSBjb25zdGFudGx5IHJlZHJhd2luZyB0aGUgZ3JhcGhpY3MgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhY2hlQXNCaXRtYXBcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkdyYXBoaWNzI1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5HcmFwaGljcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3M7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICogTm90ZSB0aGF0IHRoZSBvbmx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIGNsb25lZCwgbm90IGl0cyB0cmFuc2Zvcm0gKHBvc2l0aW9uLHNjYWxlLGV0YylcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjbG9uZSA9IG5ldyBHcmFwaGljcygpO1xuXG4gICAgY2xvbmUucmVuZGVyYWJsZSAgICA9IHRoaXMucmVuZGVyYWJsZTtcbiAgICBjbG9uZS5maWxsQWxwaGEgICAgID0gdGhpcy5maWxsQWxwaGE7XG4gICAgY2xvbmUubGluZVdpZHRoICAgICA9IHRoaXMubGluZVdpZHRoO1xuICAgIGNsb25lLmxpbmVDb2xvciAgICAgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICBjbG9uZS50aW50ICAgICAgICAgID0gdGhpcy50aW50O1xuICAgIGNsb25lLmJsZW5kTW9kZSAgICAgPSB0aGlzLmJsZW5kTW9kZTtcbiAgICBjbG9uZS5pc01hc2sgICAgICAgID0gdGhpcy5pc01hc2s7XG4gICAgY2xvbmUuYm91bmRzUGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcbiAgICBjbG9uZS5kaXJ0eSAgICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5nbERpcnR5ICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRoaXMuY2FjaGVkU3ByaXRlRGlydHk7XG5cbiAgICAvLyBjb3B5IGdyYXBoaWNzIGRhdGFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgY2xvbmUuZ3JhcGhpY3NEYXRhLnB1c2godGhpcy5ncmFwaGljc0RhdGFbaV0uY2xvbmUoKSk7XG4gICAgfVxuXG4gICAgY2xvbmUuY3VycmVudFBhdGggPSBjbG9uZS5ncmFwaGljc0RhdGFbY2xvbmUuZ3JhcGhpY3NEYXRhLmxlbmd0aCAtIDFdO1xuXG4gICAgY2xvbmUudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgIHJldHVybiBjbG9uZTtcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsaW5lIHN0eWxlIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gR3JhcGhpY3MgbWV0aG9kcyBzdWNoIGFzIHRoZSBsaW5lVG8oKSBtZXRob2Qgb3IgdGhlIGRyYXdDaXJjbGUoKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lU3R5bGUgPSBmdW5jdGlvbiAobGluZVdpZHRoLCBjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGggfHwgMDtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5saW5lQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGhhbGZ3YXkgdGhyb3VnaCBhIGxpbmU/IHN0YXJ0IGEgbmV3IG9uZSFcbiAgICAgICAgICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24odGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMuc2xpY2UoLTIpKTtcbiAgICAgICAgICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0cyBlbXB0eSBzbyBsZXRzIGp1c3Qgc2V0IHRoZSBsaW5lIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQWxwaGEgPSB0aGlzLmxpbmVBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBNb3ZlcyB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvIHgsIHkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gICovXG5HcmFwaGljcy5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihbeCx5XSk7XG4gICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgbGluZSB1c2luZyB0aGUgY3VycmVudCBsaW5lIHN0eWxlIGZyb20gdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byAoeCwgeSk7XG4gKiBUaGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIGlzIHRoZW4gc2V0IHRvICh4LCB5KS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeCwgeSk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsIDApO1xuICAgIH1cblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICB4YSA9IGZyb21YICsgKCAoY3BYIC0gZnJvbVgpICogaiApO1xuICAgICAgICB5YSA9IGZyb21ZICsgKCAoY3BZIC0gZnJvbVkpICogaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCB4YSArICggKChjcFggKyAoICh0b1ggLSBjcFgpICogaiApKSAtIHhhKSAqIGogKSxcbiAgICAgICAgICAgICAgICAgICAgIHlhICsgKCAoKGNwWSArICggKHRvWSAtIGNwWSkgKiBqICkpIC0geWEpICogaiApICk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSBjcFgyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgY3BYMiwgY3BZMiwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciBuID0gMjAsXG4gICAgICAgIGR0LFxuICAgICAgICBkdDIsXG4gICAgICAgIGR0MyxcbiAgICAgICAgdDIsXG4gICAgICAgIHQzLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIGR0ID0gKDEgLSBqKTtcbiAgICAgICAgZHQyID0gZHQgKiBkdDtcbiAgICAgICAgZHQzID0gZHQyICogZHQ7XG5cbiAgICAgICAgdDIgPSBqICogajtcbiAgICAgICAgdDMgPSB0MiAqIGo7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIGR0MyAqIGZyb21YICsgMyAqIGR0MiAqIGogKiBjcFggKyAzICogZHQgKiB0MiAqIGNwWDIgKyB0MyAqIHRvWCxcbiAgICAgICAgICAgICAgICAgICAgIGR0MyAqIGZyb21ZICsgMyAqIGR0MiAqIGogKiBjcFkgKyAzICogZHQgKiB0MiAqIGNwWTIgKyB0MyAqIHRvWSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmNUbygpIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSBiZXR3ZWVuIHR3byB0YW5nZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFwiYm9ycm93ZWRcIiBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZnhjYW52YXMvIC0gdGhhbmtzIGdvb2dsZSFcbiAqXG4gKiBAcGFyYW0geDEge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHgyIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTIge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjVG8gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIHJhZGl1cylcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyh4MSwgeTEpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyxcbiAgICAgICAgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSxcbiAgICAgICAgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSxcbiAgICAgICAgYTEgPSBmcm9tWSAtIHkxLFxuICAgICAgICBiMSA9IGZyb21YIC0geDEsXG4gICAgICAgIGEyID0geTIgICAtIHkxLFxuICAgICAgICBiMiA9IHgyICAgLSB4MSxcbiAgICAgICAgbW0gPSBNYXRoLmFicyhhMSAqIGIyIC0gYjEgKiBhMik7XG5cbiAgICBpZiAobW0gPCAxLjBlLTggfHwgcmFkaXVzID09PSAwKVxuICAgIHtcbiAgICAgICAgaWYgKHBvaW50c1twb2ludHMubGVuZ3RoLTJdICE9PSB4MSB8fCBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSAhPT0geTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIGRkID0gYTEgKiBhMSArIGIxICogYjEsXG4gICAgICAgICAgICBjYyA9IGEyICogYTIgKyBiMiAqIGIyLFxuICAgICAgICAgICAgdHQgPSBhMSAqIGEyICsgYjEgKiBiMixcbiAgICAgICAgICAgIGsxID0gcmFkaXVzICogTWF0aC5zcXJ0KGRkKSAvIG1tLFxuICAgICAgICAgICAgazIgPSByYWRpdXMgKiBNYXRoLnNxcnQoY2MpIC8gbW0sXG4gICAgICAgICAgICBqMSA9IGsxICogdHQgLyBkZCxcbiAgICAgICAgICAgIGoyID0gazIgKiB0dCAvIGNjLFxuICAgICAgICAgICAgY3ggPSBrMSAqIGIyICsgazIgKiBiMSxcbiAgICAgICAgICAgIGN5ID0gazEgKiBhMiArIGsyICogYTEsXG4gICAgICAgICAgICBweCA9IGIxICogKGsyICsgajEpLFxuICAgICAgICAgICAgcHkgPSBhMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHF4ID0gYjIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBxeSA9IGEyICogKGsxICsgajIpLFxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IE1hdGguYXRhbjIocHkgLSBjeSwgcHggLSBjeCksXG4gICAgICAgICAgICBlbmRBbmdsZSAgID0gTWF0aC5hdGFuMihxeSAtIGN5LCBxeCAtIGN4KTtcblxuICAgICAgICB0aGlzLmFyYyhjeCArIHgxLCBjeSArIHkxLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBiMSAqIGEyID4gYjIgKiBhMSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmMgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlICh1c2VkIHRvIGNyZWF0ZSBjaXJjbGVzLCBvciBwYXJ0cyBvZiBjaXJjbGVzKS5cbiAqXG4gKiBAcGFyYW0gY3gge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBjeSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBzdGFydEFuZ2xlIHtudW1iZXJ9IFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucyAoMCBpcyBhdCB0aGUgMyBvJ2Nsb2NrIHBvc2l0aW9uIG9mIHRoZSBhcmMncyBjaXJjbGUpXG4gKiBAcGFyYW0gZW5kQW5nbGUge251bWJlcn0gVGhlIGVuZGluZyBhbmdsZSwgaW4gcmFkaWFuc1xuICogQHBhcmFtIGFudGljbG9ja3dpc2Uge2Jvb2xlYW59IE9wdGlvbmFsLiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgY291bnRlcmNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuIEZhbHNlIGlzIGRlZmF1bHQsIGFuZCBpbmRpY2F0ZXMgY2xvY2t3aXNlLCB3aGlsZSB0cnVlIGluZGljYXRlcyBjb3VudGVyLWNsb2Nrd2lzZS5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmMgPSBmdW5jdGlvbihjeCwgY3ksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UpXG57XG4gICAgYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gZW5kQW5nbGUpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiggIWFudGljbG9ja3dpc2UgJiYgZW5kQW5nbGUgPD0gc3RhcnRBbmdsZSApXG4gICAge1xuICAgICAgICBlbmRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG4gICAgZWxzZSBpZiggYW50aWNsb2Nrd2lzZSAmJiBzdGFydEFuZ2xlIDw9IGVuZEFuZ2xlIClcbiAgICB7XG4gICAgICAgIHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuXG4gICAgdmFyIHN3ZWVwID0gYW50aWNsb2Nrd2lzZSA/IChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpICogLTEgOiAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKTtcbiAgICB2YXIgc2VncyA9ICBNYXRoLmNlaWwoTWF0aC5hYnMoc3dlZXApIC8gKE1hdGguUEkgKiAyKSkgKiA0MDtcblxuICAgIGlmKHN3ZWVwID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0WCA9IGN4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXM7XG4gICAgdmFyIHN0YXJ0WSA9IGN5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXM7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyhzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIHRoZXRhID0gc3dlZXAvKHNlZ3MqMik7XG4gICAgdmFyIHRoZXRhMiA9IHRoZXRhKjI7XG5cbiAgICB2YXIgY1RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgICB2YXIgc2VnTWludXMgPSBzZWdzIC0gMTtcblxuICAgIHZhciByZW1haW5kZXIgPSAoIHNlZ01pbnVzICUgMSApIC8gc2VnTWludXM7XG5cbiAgICBmb3IodmFyIGk9MDsgaTw9c2VnTWludXM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciByZWFsID0gIGkgKyByZW1haW5kZXIgKiBpO1xuXG5cbiAgICAgICAgdmFyIGFuZ2xlID0gKCh0aGV0YSkgKyBzdGFydEFuZ2xlICsgKHRoZXRhMiAqIHJlYWwpKTtcblxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgdmFyIHMgPSAtTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCggKGNUaGV0YSAqICBjKSArIChzVGhldGEgKiBzKSApICogcmFkaXVzICsgY3gsXG4gICAgICAgICAgICAgICAgICAgICggKGNUaGV0YSAqIC1zKSArIChzVGhldGEgKiBjKSApICogcmFkaXVzICsgY3kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSBzaW1wbGUgb25lLWNvbG9yIGZpbGwgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIG90aGVyIEdyYXBoaWNzIG1ldGhvZHNcbiAqIChzdWNoIGFzIGxpbmVUbygpIG9yIGRyYXdDaXJjbGUoKSkgdXNlIHdoZW4gZHJhd2luZy5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmVnaW5GaWxsID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmZpbGxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGwgPSB0aGlzLmZpbGxpbmc7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxDb2xvciA9IHRoaXMuZmlsbENvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQWxwaGEgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbGwgdG8gdGhlIGxpbmVzIGFuZCBzaGFwZXMgdGhhdCB3ZXJlIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhlIGJlZ2luRmlsbCgpIG1ldGhvZC5cbiAqXG4gKiBAcmV0dXJuIHtHcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmVuZEZpbGwgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gbnVsbDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5SZWN0YW5nbGUoeCx5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBSYWRpdXMgb2YgdGhlIHJlY3RhbmdsZSBjb3JuZXJzXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JvdW5kZWRSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdDaXJjbGUgPSBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkNpcmNsZSh4LHksIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhlIGVsbGlwc2VcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3RWxsaXBzZSA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgcG9seWdvbiB1c2luZyB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCB7bnVtYmVyW118UElYSS5Qb2ludFtdfSBUaGUgcGF0aCBkYXRhIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwb2x5Z29uLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24gKHBhdGgpXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBhdGg7XG5cbiAgICB2YXIgY2xvc2VkID0gdHJ1ZTtcblxuICAgIGlmIChwb2ludHMgaW5zdGFuY2VvZiBtYXRoLlBvbHlnb24pXG4gICAge1xuICAgICAgICBjbG9zZWQgPSBwb2ludHMuY2xvc2VkO1xuICAgICAgICBwb2ludHMgPSBwb2ludHMucG9pbnRzO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50c1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24ocG9pbnRzKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBjbG9zZWQ7XG5cbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBncmFwaGljcyB0aGF0IHdlcmUgZHJhd24gdG8gdGhpcyBHcmFwaGljcyBvYmplY3QsIGFuZCByZXNldHMgZmlsbCBhbmQgbGluZSBzdHlsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuY2xlYXJEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZ2VvbWV0cnkgaXMgY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2hvdWxkIGJlIG9uZSBvZiB0aGUgc2NhbGVNb2RlIGNvbnN0c1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdFxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG5cbiAgICByZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCAqIHJlc29sdXRpb24sIGJvdW5kcy5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY2FudmFzQnVmZmVyLmNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgdGhlIHNwcml0ZSBpcyBub3QgdmlzaWJsZSBvciB0aGUgYWxwaGEgaXMgMCB0aGVuIG5vIG5lZWQgdG8gcmVuZGVyIHRoaXMgZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuZ2xEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzLnJlbmRlcih0aGlzKTtcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmlzTWFzayA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdGludCBoYXMgY2hhbmdlZCwgc2V0IHRoZSBncmFwaGljcyBvYmplY3QgdG8gZGlydHkuXG4gICAgaWYgKHRoaXMuX3ByZXZUaW50ICE9PSB0aGlzLnRpbnQpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjb2RlIG1heSBzdGlsbCBiZSBuZWVkZWQgc28gbGVhdmluZyBmb3Igbm93Li5cbiAgICAvL1xuICAgIC8qXG4gICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXApXG4gICAge1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSB8fCB0aGlzLmNhY2hlZFNwcml0ZURpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSgpO1xuXG4gICAgICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xuXG4gICAgICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMuX2NhY2hlZFNwcml0ZSwgcmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb247XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjb250ZXh0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGdyYXBoaWMgc2hhcGUgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gVGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlLCBkZWZhdWx0cyB0byB0aGlzXG4gKiAgb2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuXG4gICAgICAgIC8vIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGl0ZW0gaXMgYSBtYXNrIVxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyYWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgICAgICAgICAgdGhpcy5nbERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2xvY2FsQm91bmRzO1xuXG4gICAgICAgIHZhciB3MCA9IGJvdW5kcy54O1xuICAgICAgICB2YXIgdzEgPSBib3VuZHMud2lkdGggKyBib3VuZHMueDtcblxuICAgICAgICB2YXIgaDAgPSBib3VuZHMueTtcbiAgICAgICAgdmFyIGgxID0gYm91bmRzLmhlaWdodCArIGJvdW5kcy55O1xuXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciBtYXhYID0geDE7XG4gICAgICAgIHZhciBtYXhZID0geTE7XG5cbiAgICAgICAgdmFyIG1pblggPSB4MTtcbiAgICAgICAgdmFyIG1pblkgPSB5MTtcblxuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy54ID0gbWluWDtcbiAgICAgICAgdGhpcy5fYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IHRoaXMuX2JvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIGdyYXBoaWNzIG9iamVjdFxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5HcmFwaGljcy5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIGdyYXBoaWNzRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoIWRhdGEuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGRlYWwgd2l0aCBmaWxscy4uXG4gICAgICAgIGlmIChkYXRhLnNoYXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIGRhdGEuc2hhcGUuY29udGFpbnMoIHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSApIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICpcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUxvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGlmICh0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB2YXIgc2hhcGUsIHBvaW50cywgeCwgeSwgdywgaDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG4gICAgICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVCB8fCB0eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueCAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gUE9MWVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSAyKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvaW50c1tqKzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblggPSB4LWxpbmVXaWR0aCA8IG1pblggPyB4LWxpbmVXaWR0aCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSB4K2xpbmVXaWR0aCA+IG1heFggPyB4K2xpbmVXaWR0aCA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IHktbGluZVdpZHRoIDwgbWluWSA/IHktbGluZVdpZHRoIDogbWluWTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IHkrbGluZVdpZHRoID4gbWF4WSA/IHkrbGluZVdpZHRoIDogbWF4WTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgbWluWCA9IDA7XG4gICAgICAgIG1heFggPSAwO1xuICAgICAgICBtaW5ZID0gMDtcbiAgICAgICAgbWF4WSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy54ID0gbWluWCAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMud2lkdGggPSAobWF4WCAtIG1pblgpICsgcGFkZGluZyAqIDI7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy55ID0gbWluWSAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMuaGVpZ2h0ID0gKG1heFkgLSBtaW5ZKSArIHBhZGRpbmcgKiAyO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNhY2hlZCBzcHJpdGUgd2hlbiB0aGUgc3ByaXRlIGhhcyBjYWNoZUFzQml0bWFwID0gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgaWYgKCF0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzKTtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgU3ByaXRlKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyID0gY2FudmFzQnVmZmVyO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIucmVzaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gbGV2ZXJhZ2UgdGhlIGFuY2hvciB0byBhY2NvdW50IGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC5zYXZlKCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGFscGhhIG9mIHRoZSBncmFwaGljcyB0byAxIGZvciB0aGUgcmVuZGVyLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gbm93IHJlbmRlciB0aGUgZ3JhcGhpYy4uXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0KTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG59O1xuKi9cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjYWNoZWRTcHJpdGUgPSB0aGlzLl9jYWNoZWRTcHJpdGU7XG4gICAgdmFyIHRleHR1cmUgPSBjYWNoZWRTcHJpdGUudGV4dHVyZTtcbiAgICB2YXIgY2FudmFzID0gY2FjaGVkU3ByaXRlLmJ1ZmZlci5jYW52YXM7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLmZyYW1lLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLmZyYW1lLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICBjYWNoZWRTcHJpdGUuX3dpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIGNhY2hlZFNwcml0ZS5faGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgZGlydHkgYmFzZSB0ZXh0dXJlc1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZGlydHkoKTtcbn07Ki9cblxuLyoqXG4gKiBEZXN0cm95cyBhIHByZXZpb3VzIGNhY2hlZCBzcHJpdGUuXG4gKlxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3lDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS50ZXh0dXJlLmRlc3Ryb3kodHJ1ZSk7XG5cbiAgICAvLyBsZXQgdGhlIGdjIGNvbGxlY3QgdGhlIHVudXNlZCBzcHJpdGVcbiAgICAvLyBUT0RPIGNvdWxkIGJlIG9iamVjdCBwb29sZWQhXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07Ki9cblxuLyoqXG4gKiBEcmF3cyB0aGUgZ2l2ZW4gc2hhcGUgdG8gdGhpcyBHcmFwaGljcyBvYmplY3QuIENhbiBiZSBhbnkgb2YgQ2lyY2xlLCBSZWN0YW5nbGUsIEVsbGlwc2UsIExpbmUgb3IgUG9seWdvbi5cbiAqXG4gKiBAcGFyYW0gc2hhcGUge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX0gVGhlIGdlbmVyYXRlZCBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24gKHNoYXBlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgLy8gY2hlY2sgY3VycmVudCBwYXRoIVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IG5ldyBHcmFwaGljc0RhdGEodGhpcy5saW5lV2lkdGgsIHRoaXMubGluZUNvbG9yLCB0aGlzLmxpbmVBbHBoYSwgdGhpcy5maWxsQ29sb3IsIHRoaXMuZmlsbEFscGhhLCB0aGlzLmZpbGxpbmcsIHNoYXBlKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnB1c2goZGF0YSk7XG5cbiAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICB7XG4gICAgICAgIGRhdGEuc2hhcGUuY2xvc2VkID0gZGF0YS5zaGFwZS5jbG9zZWQgfHwgdGhpcy5maWxsaW5nO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBkZXN0cm95IGVhY2ggb2YgdGhlIEdyYXBoaWNzRGF0YSBvYmplY3RzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggd2ViZ2wgZGF0YSBlbnRyeSwgZGVzdHJveSB0aGUgV2ViR0xHcmFwaGljc0RhdGFcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl93ZWJnbCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3dlYmdsW2lkXS5kYXRhLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJnbFtpZF0uZGF0YVtqXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl93ZWJnbCA9IG51bGw7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBudWxsO1xufTtcbiIsIi8qKlxuICogQSBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBmaWxsQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbEFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGwgICAgICB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gKiBAcGFyYW0gc2hhcGUgICAgIHtDaXJjbGV8UmVjdGFuZ2xlfEVsbGlwc2V8TGluZXxQb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzRGF0YShsaW5lV2lkdGgsIGxpbmVDb2xvciwgbGluZUFscGhhLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgZmlsbCwgc2hhcGUpXG57XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IGxpbmVDb2xvcjtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVBbHBoYSA9IGxpbmVBbHBoYTtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMuX2xpbmVUaW50ID0gbGluZUNvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5fZmlsbFRpbnQgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICAgICAqL1xuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gICAgICovXG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFRoZSB0eXBlIG9mIHRoZSBzaGFwZSwgc2VlIHRoZSBDb25zdC5TaGFwZXMgZmlsZSBmb3IgYWxsIHRoZSBleGlzdGluZyB0eXBlcyxcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBzaGFwZS50eXBlO1xufVxuXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljc0RhdGEgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfVxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEdyYXBoaWNzRGF0YShcbiAgICAgICAgdGhpcy5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMubGluZUNvbG9yLFxuICAgICAgICB0aGlzLmxpbmVBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuZmlsbEFscGhhLFxuICAgICAgICB0aGlzLmZpbGwsXG4gICAgICAgIHRoaXMuc2hhcGVcbiAgICApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3MgZGF0YS5cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2hhcGUgPSBudWxsO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vV2ViR0xHcmFwaGljc0RhdGEnKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyJyksXG5cbiAgICAvLyBzb21lIGRyYXdpbmcgZnVuY3Rpb25zLi5cbiAgICBidWlsZExpbmUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkTGluZScpO1xuICAgIGJ1aWxkUG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRQb2x5Jyk7XG4gICAgYnVpbGRDb21wbGV4UG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRDb21wbGV4UG9seScpO1xuICAgIGJ1aWxkUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlJyk7XG4gICAgYnVpbGRDaXJjbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ2lyY2xlJyk7XG5cbiAgICBlYXJjdXQgPSByZXF1aXJlKCdlYXJjdXQnKTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBHcmFwaGljc1JlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgdGhpcy5ncmFwaGljc0RhdGFQb29sID0gW107XG5cbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBvaW50cyBhIHBvbHkgY2FuIGNvbnRhaW4gYmVmb3JlIGl0IGlzIHJlbmRlcmVkIGFzIGEgY29tcGxleCBwb2x5Z29uICh1c2luZyB0aGUgc3RlbmNpbCBidWZmZXIpXG4gICAgICogQHR5cGUge051bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heGltdW1TaW1wbGVQb2x5U2l6ZSA9IDIwMDtcbn1cblxuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2dyYXBoaWNzJywgR3JhcGhpY3NSZW5kZXJlcik7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZVxuICpcbiAqIEBwcml2YXRlXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy5nbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBuZXcgUHJpbWl0aXZlU2hhZGVyKHRoaXMuZ2wpXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgcmVuZGVyZXIuXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2xbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcbiAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIHZhciB3ZWJHTERhdGE7XG4gIC8vICBjb25zb2xlLmxvZyhncmFwaGljcylcbiAgICBpZiAoZ3JhcGhpY3MuZGlydHkgfHwgIWdyYXBoaWNzLl93ZWJHTFtnbC5pZF0pXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZUdyYXBoaWNzKGdyYXBoaWNzKTtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gVGhpcyAgY291bGQgYmUgc3BlZWRlZCB1cCBmb3Igc3VyZSFcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCBncmFwaGljcy5ibGVuZE1vZGUgKTtcblxuLy8gICAgdmFyIG1hdHJpeCA9ICBncmFwaGljcy53b3JsZFRyYW5zZm9ybS5jbG9uZSgpO1xuLy8gICAgdmFyIG1hdHJpeCA9ICByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXguY2xvbmUoKTtcbi8vICAgIG1hdHJpeC5hcHBlbmQoZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0pO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB3ZWJHTC5kYXRhLmxlbmd0aDsgaSA8IG47IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMLmRhdGFbaV0ubW9kZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy9UT0RPIGZpeCB0aGlzIG9uZSFcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnB1c2hTdGVuY2lsKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICBnbC51bmlmb3JtMWYocmVuZGVyZXIuc2hhZGVyTWFuYWdlci5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSAqIHdlYkdMRGF0YS5hbHBoYSk7XG5cbiAgICAgICAgICAgIC8vIHJlbmRlciBxdWFkLi5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgcmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucG9wU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICovXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHNoYWRlciA9IHRoaXMucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgICAgICAgICByZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50aW50ID0gdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5kcmF3Q291bnQrKztcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gdXBkYXRlXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnVwZGF0ZUdyYXBoaWNzID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBnZXQgdGhlIGNvbnRleHRzIGdyYXBoaWNzIG9iamVjdFxuICAgIHZhciB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF07XG5cbiAgICAvLyBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGRvZXMgbm90IGV4aXN0IGluIHRoZSB3ZWJHTCBjb250ZXh0IHRpbWUgdG8gY3JlYXRlIGl0IVxuICAgIGlmICghd2ViR0wpXG4gICAge1xuICAgICAgICB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF0gPSB7bGFzdEluZGV4OjAsIGRhdGE6W10sIGdsOmdsfTtcbiAgICB9XG5cbiAgIFxuICAgIC8vIGZsYWcgdGhlIGdyYXBoaWNzIGFzIG5vdCBkaXJ0eSBhcyB3ZSBhcmUgYWJvdXQgdG8gdXBkYXRlIGl0Li4uXG4gICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcblxuICAgIHZhciBpO1xuXG4gICAgLy8gaWYgdGhlIHVzZXIgY2xlYXJlZCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHdlIHdpbGwgbmVlZCB0byBjbGVhciBldmVyeSBvYmplY3RcbiAgICBpZiAoZ3JhcGhpY3MuY2xlYXJEaXJ0eSlcbiAgICB7XG4gICAgICAgIGdyYXBoaWNzLmNsZWFyRGlydHkgPSBmYWxzZTtcblxuICAgICAgICAvLyBsb29wIHRocm91Z2ggYW5kIHJldHVybiBhbGwgdGhlIHdlYkdMRGF0YXMgdG8gdGhlIG9iamVjdCBwb29sIHNvIHRoYW4gY2FuIGJlIHJldXNlZCBsYXRlciBvblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGdyYXBoaWNzRGF0YSA9IHdlYkdMLmRhdGFbaV07XG4gICAgICAgICAgICBncmFwaGljc0RhdGEucmVzZXQoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wdXNoKCBncmFwaGljc0RhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIHRoZSBhcnJheSBhbmQgcmVzZXQgdGhlIGluZGV4Li5cbiAgICAgICAgd2ViR0wuZGF0YSA9IFtdO1xuICAgICAgICB3ZWJHTC5sYXN0SW5kZXggPSAwO1xuICAgIH1cblxuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICAvLyBsb29wIHRocm91Z2ggdGhlIGdyYXBoaWNzIGRhdGFzIGFuZCBjb25zdHJ1Y3QgZWFjaCBvbmUuLlxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgYSBjb21wbGV4IGZpbGwgdGhlbiB0aGUgbmV3IHN0ZW5jaWwgYnVmZmVyIHRlY2huaXF1ZSB3aWxsIGJlIHVzZWRcbiAgICAvLyBvdGhlciB3aXNlIGdyYXBoaWNzIG9iamVjdHMgd2lsbCBiZSBwdXNoZWQgaW50byBhIGJhdGNoLi5cbiAgICBmb3IgKGkgPSB3ZWJHTC5sYXN0SW5kZXg7IGkgPCBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gbmVlZCB0byBhZGQgdGhlIHBvaW50cyB0aGUgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgICAgICAgICBkYXRhLnBvaW50cyA9IGRhdGEuc2hhcGUucG9pbnRzLnNsaWNlKCk7XG4gICAgICAgICAgICBpZiAoZGF0YS5zaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gY2xvc2UgdGhlIHBvbHkgaWYgdGhlIHZhbHVlIGlzIHRydWUhXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzWzBdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMl0gfHwgZGF0YS5wb2ludHNbMV0gIT09IGRhdGEucG9pbnRzW2RhdGEucG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucG9pbnRzLnB1c2goZGF0YS5wb2ludHNbMF0sIGRhdGEucG9pbnRzWzFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1BS0UgU1VSRSBXRSBIQVZFIFRIRSBDT1JSRUNUIFRZUEUuLlxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoID49IDYpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoIDwgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgKiAyKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FuRHJhd1VzaW5nU2ltcGxlID0gYnVpbGRQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuRHJhd1VzaW5nU2ltcGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGggPiAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG4gICAgICAgICAgICAgICAgYnVpbGRMaW5lKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQyB8fCBkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5FTElQKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkQ2lyY2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2ViR0wubGFzdEluZGV4Kys7XG4gICAgfVxuXG4gICAgLy8gdXBsb2FkIGFsbCB0aGUgZGlydHkgZGF0YS4uLlxuICAgIGZvciAoaSA9IDA7IGkgPCB3ZWJHTC5kYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVtpXTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLmRpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEudXBsb2FkKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB3ZWJHTCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IFRPRE8gQEFsdmluXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnN3aXRjaE1vZGUgPSBmdW5jdGlvbiAod2ViR0wsIHR5cGUpXG57XG4gICAgdmFyIHdlYkdMRGF0YTtcblxuICAgIGlmICghd2ViR0wuZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgd2ViR0xEYXRhLm1vZGUgPSB0eXBlO1xuICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVt3ZWJHTC5kYXRhLmxlbmd0aC0xXTtcblxuICAgICAgICBpZiAoKHdlYkdMRGF0YS5wb2ludHMubGVuZ3RoID4gMzIwMDAwKSB8fCB3ZWJHTERhdGEubW9kZSAhPT0gdHlwZSB8fCB0eXBlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgICAgIHdlYkdMLmRhdGEucHVzaCh3ZWJHTERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd2ViR0xEYXRhLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB3ZWJHTERhdGE7XG59O1xuXG4iLCIvKipcbiAqIEFuIG9iamVjdCBjb250YWluaW5nIFdlYkdMIHNwZWNpZmljIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBXZWJHTEdyYXBoaWNzRGF0YShnbCkge1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLy9UT0RPIGRvZXMgdGhpcyBuZWVkIHRvIGJlIHNwbGl0IGJlZm9yZSB1cGxvZGluZz8/XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgY29sb3IgY29tcG9uZW50cyAocixnLGIpXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5jb2xvciA9IFswLDAsMF07IC8vIGNvbG9yIHNwbGl0IVxuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgcG9pbnRzIHRvIGRyYXdcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50W119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IFtdO1xuICAgIC8qKlxuICAgICAqIFRoZSBtYWluIGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggYnVmZmVyXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogdG9kbyBAYWx2aW5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tb2RlID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgZ3JhcGhpY3MgaXMgZGlydHkgb3Igbm90XG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn1cblxuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xHcmFwaGljc0RhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIFJlc2V0cyB0aGUgdmVydGljZXMgYW5kIHRoZSBpbmRpY2VzXG4gKi9cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnBvaW50cy5sZW5ndGggPSAwO1xuICAgIHRoaXMuaW5kaWNlcy5sZW5ndGggPSAwO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbi8vICAgIHRoaXMubGFzdEluZGV4ID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDtcbiAgICB0aGlzLmdsUG9pbnRzID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnBvaW50cyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5idWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmdsUG9pbnRzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmdsSW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmluZGljZXMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5nbEluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuY29sb3IgPSBudWxsO1xuICAgIHRoaXMucG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIFxuICAgIHRoaXMuZ2wgPSBudWxsO1xuXG4gICAgdGhpcy5idWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5nbFBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5nbEluZGljZXMgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihnbClcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBnbCxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgZmxpcFk7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIHZlYzMgdGludDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvciAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpXG4gICAgKTtcbn1cblxuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHJpbWl0aXZlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBjaXJjbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRyYXdcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDaXJjbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgdmFyIGNpcmNsZURhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSBjaXJjbGVEYXRhLng7XG4gICAgdmFyIHkgPSBjaXJjbGVEYXRhLnk7XG4gICAgdmFyIHdpZHRoO1xuICAgIHZhciBoZWlnaHQ7XG5cbiAgICAvLyBUT0RPIC0gYml0IGhhY2t5Pz9cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSBjaXJjbGVEYXRhLnJhZGl1cztcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS53aWR0aDtcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHRvdGFsU2VncyA9IE1hdGguZmxvb3IoMzAgKiBNYXRoLnNxcnQoY2lyY2xlRGF0YS5yYWRpdXMpKSB8fCBNYXRoLmZsb29yKDE1ICogTWF0aC5zcXJ0KGNpcmNsZURhdGEud2lkdGggKyBjaXJjbGVEYXRhLmhlaWdodCkpO1xuICAgIHZhciBzZWcgPSAoTWF0aC5QSSAqIDIpIC8gdG90YWxTZWdzIDtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTZWdzICsgMSA7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaCh4LHksIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgeSArIE1hdGguY29zKHNlZyAqIGkpICogaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MrKywgdmVjUG9zKyspO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcy0xKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cy5wdXNoKHggKyBNYXRoLnNpbihzZWcgKiBpKSAqIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBidWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENpcmNsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21wbGV4IHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENvbXBsZXhQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vVE9ETyAtIG5vIG5lZWQgdG8gY29weSB0aGlzIGFzIGl0IGdldHMgdHVybmVkIGludG8gYSBGTG9hdDMyQXJyYXkgYW55d2F5cy4uXG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHMuc2xpY2UoKTtcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB3ZWJHTERhdGEucG9pbnRzID0gcG9pbnRzO1xuICAgIHdlYkdMRGF0YS5hbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgd2ViR0xEYXRhLmNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcblxuICAgIC8vIGNhbGNsYXRlIHRoZSBib3VuZHMuLlxuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgdmFyIHgseTtcblxuICAgIC8vIGdldCBzaXplLi5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrPTIpXG4gICAge1xuICAgICAgICB4ID0gcG9pbnRzW2ldO1xuICAgICAgICB5ID0gcG9pbnRzW2krMV07XG5cbiAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBxdWFkIHRvIHRoZSBlbmQgY29zIHRoZXJlIGlzIG5vIHBvaW50IG1ha2luZyBhbm90aGVyIGJ1ZmZlciFcbiAgICBwb2ludHMucHVzaChtaW5YLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWF4WSxcbiAgICAgICAgICAgICAgICBtaW5YLCBtYXhZKTtcblxuICAgIC8vIHB1c2ggYSBxdWFkIG9udG8gdGhlIGVuZC4uXG5cbiAgICAvL1RPRE8gLSB0aGlzIGFpbnQgbmVlZGVkIVxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goIGkgKTtcbiAgICB9XG5cbn07XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29tcGxleFBvbHk7IiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZExpbmUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gVE9ETyBPUFRJTUlTRSFcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGxpbmUgd2lkdGggaXMgYW4gb2RkIG51bWJlciBhZGQgMC41IHRvIGFsaWduIHRvIGEgd2hvbGUgcGl4ZWxcbiAgICAvLyBjb21tZW50aW5nIHRoaXMgb3V0IGZpeGVzICM3MTEgYW5kICMxNjIwXG4gICAgLy8gaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGglMilcbiAgICAvLyB7XG4gICAgLy8gICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAgIHBvaW50c1tpXSArPSAwLjU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGZpcnN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgdmFyIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IHBvaW50IGlzIHRoZSBsYXN0IHBvaW50IC0gZ29ubmEgaGF2ZSBpc3N1ZXMgOilcbiAgICBpZiAoZmlyc3RQb2ludC54ID09PSBsYXN0UG9pbnQueCAmJiBmaXJzdFBvaW50LnkgPT09IGxhc3RQb2ludC55KVxuICAgIHtcbiAgICAgICAgLy8gbmVlZCB0byBjbG9uZSBhcyB3ZSBhcmUgZ29pbmcgdG8gc2xpZ2h0bHkgbW9kaWZ5IHRoZSBzaGFwZS4uXG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5zbGljZSgpO1xuXG4gICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHZhciBtaWRQb2ludFggPSBsYXN0UG9pbnQueCArIChmaXJzdFBvaW50LnggLSBsYXN0UG9pbnQueCkgKjAuNTtcbiAgICAgICAgdmFyIG1pZFBvaW50WSA9IGxhc3RQb2ludC55ICsgKGZpcnN0UG9pbnQueSAtIGxhc3RQb2ludC55KSAqMC41O1xuXG4gICAgICAgIHBvaW50cy51bnNoaWZ0KG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICAgICAgcG9pbnRzLnB1c2gobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgdmFyIGluZGV4Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIHZhciBpbmRleFN0YXJ0ID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAvLyBEUkFXIHRoZSBMaW5lXG4gICAgdmFyIHdpZHRoID0gZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEubGluZUNvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEubGluZUFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHB4LCBweSwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeTtcbiAgICB2YXIgcGVycHgsIHBlcnB5LCBwZXJwMngsIHBlcnAyeSwgcGVycDN4LCBwZXJwM3k7XG4gICAgdmFyIGExLCBiMSwgYzEsIGEyLCBiMiwgYzI7XG4gICAgdmFyIGRlbm9tLCBwZGlzdCwgZGlzdDtcblxuICAgIHAxeCA9IHBvaW50c1swXTtcbiAgICBwMXkgPSBwb2ludHNbMV07XG5cbiAgICBwMnggPSBwb2ludHNbMl07XG4gICAgcDJ5ID0gcG9pbnRzWzNdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSAgcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcblxuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIC8vIHN0YXJ0XG4gICAgdmVydHMucHVzaChwMXggLSBwZXJweCAsIHAxeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDF4ICsgcGVycHggLCBwMXkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoLTE7IGkrKylcbiAgICB7XG4gICAgICAgIHAxeCA9IHBvaW50c1soaS0xKSoyXTtcbiAgICAgICAgcDF5ID0gcG9pbnRzWyhpLTEpKjIgKyAxXTtcblxuICAgICAgICBwMnggPSBwb2ludHNbKGkpKjJdO1xuICAgICAgICBwMnkgPSBwb2ludHNbKGkpKjIgKyAxXTtcblxuICAgICAgICBwM3ggPSBwb2ludHNbKGkrMSkqMl07XG4gICAgICAgIHAzeSA9IHBvaW50c1soaSsxKSoyICsgMV07XG5cbiAgICAgICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgICAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgICAgICBwZXJwMnggPSAtKHAyeSAtIHAzeSk7XG4gICAgICAgIHBlcnAyeSA9IHAyeCAtIHAzeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAyeCpwZXJwMnggKyBwZXJwMnkqcGVycDJ5KTtcbiAgICAgICAgcGVycDJ4IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeSAvPSBkaXN0O1xuICAgICAgICBwZXJwMnggKj0gd2lkdGg7XG4gICAgICAgIHBlcnAyeSAqPSB3aWR0aDtcblxuICAgICAgICBhMSA9ICgtcGVycHkgKyBwMXkpIC0gKC1wZXJweSArIHAyeSk7XG4gICAgICAgIGIxID0gKC1wZXJweCArIHAyeCkgLSAoLXBlcnB4ICsgcDF4KTtcbiAgICAgICAgYzEgPSAoLXBlcnB4ICsgcDF4KSAqICgtcGVycHkgKyBwMnkpIC0gKC1wZXJweCArIHAyeCkgKiAoLXBlcnB5ICsgcDF5KTtcbiAgICAgICAgYTIgPSAoLXBlcnAyeSArIHAzeSkgLSAoLXBlcnAyeSArIHAyeSk7XG4gICAgICAgIGIyID0gKC1wZXJwMnggKyBwMngpIC0gKC1wZXJwMnggKyBwM3gpO1xuICAgICAgICBjMiA9ICgtcGVycDJ4ICsgcDN4KSAqICgtcGVycDJ5ICsgcDJ5KSAtICgtcGVycDJ4ICsgcDJ4KSAqICgtcGVycDJ5ICsgcDN5KTtcblxuICAgICAgICBkZW5vbSA9IGExKmIyIC0gYTIqYjE7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8IDAuMSApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgZGVub20rPTEwLjE7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4ID0gKGIxKmMyIC0gYjIqYzEpL2Rlbm9tO1xuICAgICAgICBweSA9IChhMipjMSAtIGExKmMyKS9kZW5vbTtcblxuXG4gICAgICAgIHBkaXN0ID0gKHB4IC1wMngpICogKHB4IC1wMngpICsgKHB5IC1wMnkpICogKHB5IC1wMnkpO1xuXG5cbiAgICAgICAgaWYgKHBkaXN0ID4gMTQwICogMTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICBwZXJwM3ggPSBwZXJweCAtIHBlcnAyeDtcbiAgICAgICAgICAgIHBlcnAzeSA9IHBlcnB5IC0gcGVycDJ5O1xuXG4gICAgICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAzeCpwZXJwM3ggKyBwZXJwM3kqcGVycDN5KTtcbiAgICAgICAgICAgIHBlcnAzeCAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN5IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3ggKj0gd2lkdGg7XG4gICAgICAgICAgICBwZXJwM3kgKj0gd2lkdGg7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJwM3gsIHAyeSArcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGV4Q291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmVydHMucHVzaChweCAsIHB5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIChweC1wMngpLCBwMnkgLSAocHkgLSBwMnkpKTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcDF4ID0gcG9pbnRzWyhsZW5ndGgtMikqMl07XG4gICAgcDF5ID0gcG9pbnRzWyhsZW5ndGgtMikqMiArIDFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWyhsZW5ndGgtMSkqMl07XG4gICAgcDJ5ID0gcG9pbnRzWyhsZW5ndGgtMSkqMiArIDFdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KyspO1xuICAgIH1cblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0LTEpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZExpbmU7IiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5XZWJHTEdyYXBoaWNzRGF0YX0gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChwb2ludHMsIG51bGwsIDIpO1xuXG4gICAgaWYgKCF0cmlhbmdsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoIC8gNjtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gK3ZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZXJ0UG9zKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2ZXJ0cy5wdXNoKHBvaW50c1tpICogMl0sIHBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFBvbHk7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gLS0tIC8vXG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgLy9cbiAgICB2YXIgcmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSByZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSByZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICAvLyBzdGFydFxuICAgICAgICB2ZXJ0cy5wdXNoKHgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCAsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIC8vIGluc2VydCAyIGRlYWQgdHJpYW5nbGVzLi5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRQb3MsIHZlcnRQb3MsIHZlcnRQb3MrMSwgdmVydFBvcysyLCB2ZXJ0UG9zKzMsIHZlcnRQb3MrMyk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFt4LCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHldO1xuXG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUmVjdGFuZ2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcbiAgICBcbi8qKlxuICogQnVpbGRzIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbmJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcnJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcnJlY3REYXRhLng7XG4gICAgdmFyIHkgPSBycmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSBycmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJyZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICB2YXIgcmFkaXVzID0gcnJlY3REYXRhLnJhZGl1cztcblxuICAgIHZhciByZWNQb2ludHMgPSBbXTtcbiAgICByZWNQb2ludHMucHVzaCh4LCB5ICsgcmFkaXVzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHgsIHkgKyBoZWlnaHQsIHggKyByYWRpdXMsIHkgKyBoZWlnaHQsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoLCB5ICsgcmFkaXVzLCB4ICsgd2lkdGgsIHksIHggKyB3aWR0aCAtIHJhZGl1cywgeSwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyByYWRpdXMsIHksIHgsIHksIHgsIHkgKyByYWRpdXMgKyAwLjAwMDAwMDAwMDEsIHJlY1BvaW50cyk7XG5cbiAgICAvLyB0aGlzIHRpbnkgbnVtYmVyIGRlYWxzIHdpdGggdGhlIGlzc3VlIHRoYXQgb2NjdXJzIHdoZW4gcG9pbnRzIG92ZXJsYXAgYW5kIGVhcmN1dCBmYWlscyB0byB0cmlhbmd1bGF0ZSB0aGUgaXRlbS5cbiAgICAvLyBUT0RPIC0gZml4IHRoaXMgcHJvcGVybHksIHRoaXMgaXMgbm90IHZlcnkgZWxlZ2FudC4uIGJ1dCBpdCB3b3JrcyBmb3Igbm93LlxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocmVjUG9pbnRzLCBudWxsLCAyKTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlY1BvaW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaChyZWNQb2ludHNbaV0sIHJlY1BvaW50c1srK2ldLCByLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gcmVjUG9pbnRzO1xuXG4gICAgICAgIHRoaXMuYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUuIChoZWxwZXIgZnVuY3Rpb24uLilcbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZyb21YIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gZnJvbVkge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEBwYXJhbSBbb3V0XSB7bnVtYmVyW119IFRoZSBvdXRwdXQgYXJyYXkgdG8gYWRkIHBvaW50cyBpbnRvLiBJZiBub3QgcGFzc2VkLCBhIG5ldyBhcnJheSBpcyBjcmVhdGVkLlxuICogQHJldHVybiB7bnVtYmVyW119IGFuIGFycmF5IG9mIHBvaW50c1xuICovXG5xdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IGZ1bmN0aW9uIChmcm9tWCwgZnJvbVksIGNwWCwgY3BZLCB0b1gsIHRvWSwgb3V0KVxue1xuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIHhiLFxuICAgICAgICB5YixcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSBvdXQgfHwgW107XG5cbiAgICBmdW5jdGlvbiBnZXRQdChuMSAsIG4yLCBwZXJjKSB7XG4gICAgICAgIHZhciBkaWZmID0gbjIgLSBuMTtcblxuICAgICAgICByZXR1cm4gbjEgKyAoIGRpZmYgKiBwZXJjICk7XG4gICAgfVxuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKyApIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIC8vIFRoZSBHcmVlbiBMaW5lXG4gICAgICAgIHhhID0gZ2V0UHQoIGZyb21YICwgY3BYICwgaiApO1xuICAgICAgICB5YSA9IGdldFB0KCBmcm9tWSAsIGNwWSAsIGogKTtcbiAgICAgICAgeGIgPSBnZXRQdCggY3BYICwgdG9YICwgaiApO1xuICAgICAgICB5YiA9IGdldFB0KCBjcFkgLCB0b1kgLCBqICk7XG5cbiAgICAgICAgLy8gVGhlIEJsYWNrIERvdFxuICAgICAgICB4ID0gZ2V0UHQoIHhhICwgeGIgLCBqICk7XG4gICAgICAgIHkgPSBnZXRQdCggeWEgLCB5YiAsIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUm91bmRlZFJlY3RhbmdsZTsiLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBjb3JlIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSVxuICovXG4vLyBleHBvcnQgY29yZSBhbmQgY29uc3QuIFdlIGFzc2lnbiBjb3JlIHRvIGNvbnN0IHNvIHRoYXQgdGhlIG5vbi1yZWZlcmVuY2UgdHlwZXMgaW4gY29uc3QgcmVtYWluIGluLXRhY3RcbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduKHJlcXVpcmUoJy4vY29uc3QnKSwgcmVxdWlyZSgnLi9tYXRoJyksIHtcbiAgICAvLyB1dGlsc1xuICAgIHV0aWxzOiByZXF1aXJlKCcuL3V0aWxzJyksXG4gICAgdGlja2VyOiByZXF1aXJlKCcuL3RpY2tlcicpLFxuXG4gICAgLy8gZGlzcGxheVxuICAgIERpc3BsYXlPYmplY3Q6ICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9EaXNwbGF5T2JqZWN0JyksXG4gICAgQ29udGFpbmVyOiAgICAgICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuXG4gICAgLy8gc3ByaXRlc1xuICAgIFNwcml0ZTogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBQYXJ0aWNsZUNvbnRhaW5lcjogICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lcicpLFxuICAgIFNwcml0ZVJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHRcbiAgICBUZXh0OiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHQvVGV4dCcpLFxuXG4gICAgLy8gcHJpbWl0aXZlc1xuICAgIEdyYXBoaWNzOiAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGE6ICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRGF0YScpLFxuICAgIEdyYXBoaWNzUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dHVyZXNcbiAgICBUZXh0dXJlOiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBCYXNlVGV4dHVyZTogICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL0Jhc2VUZXh0dXJlJyksXG4gICAgUmVuZGVyVGV4dHVyZTogICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgQmFzZVJlbmRlclRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmU6ICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnM6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVGV4dHVyZVV2cycpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gY2FudmFzXG4gICAgQ2FudmFzUmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyJyksXG4gICAgQ2FudmFzR3JhcGhpY3M6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzJyksXG4gICAgQ2FudmFzQnVmZmVyOiAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gd2ViZ2xcbiAgICBXZWJHTFJlbmRlcmVyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgU2hhZGVyOiAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXInKSxcbiAgICBPYmplY3RSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFJlbmRlclRhcmdldDogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuXG4gICAgLy8gZmlsdGVycyAtIHdlYmdsXG4gICAgQWJzdHJhY3RGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlcicpLFxuICAgIEZYQUFGaWx0ZXI6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFNwcml0ZU1hc2tGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlcicpLFxuXG4gICAgZ2xDb3JlOiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3Qgd2hpY2ggcmVuZGVyZXIgeW91IHNob3VsZCBiZSB1c2luZy5cbiAgICAgKiBXZWJHTCBpcyB0aGUgcHJlZmVycmVkIHJlbmRlcmVyIGFzIGl0IGlzIGEgbG90IGZhc3Rlci4gSWYgd2ViR0wgaXMgbm90IHN1cHBvcnRlZCBieVxuICAgICAqIHRoZSBicm93c2VyIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhIGNhbnZhcyByZW5kZXJlclxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAcGFyYW0gd2lkdGg9ODAwIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gaGVpZ2h0PTYwMCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSByZW5kZXJlcnMgdmlld1xuICAgICAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gICAgICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZV0ge2Jvb2xlYW59IGVuYWJsZXMgZHJhd2luZyBidWZmZXIgcHJlc2VydmF0aW9uLCBlbmFibGUgdGhpcyBpZiB5b3VcbiAgICAgKiAgICAgIG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIsIHJldGluYSB3b3VsZCBiZSAyXG4gICAgICogQHBhcmFtIFtub1dlYkdMPWZhbHNlXSB7Ym9vbGVhbn0gcHJldmVudHMgc2VsZWN0aW9uIG9mIFdlYkdMIHJlbmRlcmVyLCBldmVuIGlmIHN1Y2ggaXMgcHJlc2VudFxuICAgICAqXG4gICAgICogQHJldHVybiB7V2ViR0xSZW5kZXJlcnxDYW52YXNSZW5kZXJlcn0gUmV0dXJucyBXZWJHTCByZW5kZXJlciBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBDYW52YXNSZW5kZXJlclxuICAgICAqL1xuICAgIGF1dG9EZXRlY3RSZW5kZXJlcjogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMsIG5vV2ViR0wpXG4gICAge1xuICAgICAgICB3aWR0aCA9IHdpZHRoIHx8IDgwMDtcbiAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0IHx8IDYwMDtcblxuICAgICAgICBpZiAoIW5vV2ViR0wgJiYgY29yZS51dGlscy5pc1dlYkdMU3VwcG9ydGVkKCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgY29yZS5XZWJHTFJlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBjb3JlLkNhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgIH1cbn0pO1xuIiwiLy8gQHRvZG8gLSBpZ25vcmUgdGhlIHRvbyBtYW55IHBhcmFtZXRlcnMgd2FybmluZyBmb3Igbm93XG4vLyBzaG91bGQgZWl0aGVyIGZpeCBpdCBvciBjaGFuZ2UgdGhlIGpzaGludCBjb25maWdcbi8vIGpzaGludCAtVzA3MlxuXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuL1BvaW50Jyk7XG5cbi8qKlxuICogVGhlIHBpeGkgTWF0cml4IGNsYXNzIGFzIGFuIG9iamVjdCwgd2hpY2ggbWFrZXMgaXQgYSBsb3QgZmFzdGVyLFxuICogaGVyZSBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIGl0IDpcbiAqIHwgYSB8IGIgfCB0eHxcbiAqIHwgYyB8IGQgfCB0eXxcbiAqIHwgMCB8IDAgfCAxIHxcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIE1hdHJpeCgpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmIgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmMgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnR4ID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eSA9IDA7XG59XG5cbk1hdHJpeC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNYXRyaXg7XG5tb2R1bGUuZXhwb3J0cyA9IE1hdHJpeDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgTWF0cml4IG9iamVjdCBiYXNlZCBvbiB0aGUgZ2l2ZW4gYXJyYXkuIFRoZSBFbGVtZW50IHRvIE1hdHJpeCBtYXBwaW5nIG9yZGVyIGlzIGFzIGZvbGxvd3M6XG4gKlxuICogYSA9IGFycmF5WzBdXG4gKiBiID0gYXJyYXlbMV1cbiAqIGMgPSBhcnJheVszXVxuICogZCA9IGFycmF5WzRdXG4gKiB0eCA9IGFycmF5WzJdXG4gKiB0eSA9IGFycmF5WzVdXG4gKlxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX0gVGhlIGFycmF5IHRoYXQgdGhlIG1hdHJpeCB3aWxsIGJlIHBvcHVsYXRlZCBmcm9tLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJheSlcbntcbiAgICB0aGlzLmEgPSBhcnJheVswXTtcbiAgICB0aGlzLmIgPSBhcnJheVsxXTtcbiAgICB0aGlzLmMgPSBhcnJheVszXTtcbiAgICB0aGlzLmQgPSBhcnJheVs0XTtcbiAgICB0aGlzLnR4ID0gYXJyYXlbMl07XG4gICAgdGhpcy50eSA9IGFycmF5WzVdO1xufTtcblxuXG4vKipcbiAqIHNldHMgdGhlIG1hdHJpeCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gKiBAcGFyYW0ge251bWJlcn0gY1xuICogQHBhcmFtIHtudW1iZXJ9IGRcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eFxuICogQHBhcmFtIHtudW1iZXJ9IHR5XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHR4LCB0eSlcbntcbiAgICB0aGlzLmEgPSBhO1xuICAgIHRoaXMuYiA9IGI7XG4gICAgdGhpcy5jID0gYztcbiAgICB0aGlzLmQgPSBkO1xuICAgIHRoaXMudHggPSB0eDtcbiAgICB0aGlzLnR5ID0gdHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGZyb20gdGhlIGN1cnJlbnQgTWF0cml4IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3NlIHtib29sZWFufSBXaGV0aGVyIHdlIG5lZWQgdG8gdHJhbnNwb3NlIHRoZSBtYXRyaXggb3Igbm90XG4gKiBAcGFyYW0gW291dF0ge0FycmF5fSBJZiBwcm92aWRlZCB0aGUgYXJyYXkgd2lsbCBiZSBhc3NpZ25lZCB0byBvdXRcbiAqIEByZXR1cm4ge251bWJlcltdfSB0aGUgbmV3bHkgY3JlYXRlZCBhcnJheSB3aGljaCBjb250YWlucyB0aGUgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICh0cmFuc3Bvc2UsIG91dClcbntcbiAgICBpZiAoIXRoaXMuYXJyYXkpXG4gICAge1xuICAgICAgICB0aGlzLmFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg5KTtcbiAgICB9XG5cbiAgICB2YXIgYXJyYXkgPSBvdXQgfHwgdGhpcy5hcnJheTtcblxuICAgIGlmICh0cmFuc3Bvc2UpXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzJdID0gMDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IDA7XG4gICAgICAgIGFycmF5WzZdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbN10gPSB0aGlzLnR5O1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGFycmF5WzBdID0gdGhpcy5hO1xuICAgICAgICBhcnJheVsxXSA9IHRoaXMuYztcbiAgICAgICAgYXJyYXlbMl0gPSB0aGlzLnR4O1xuICAgICAgICBhcnJheVszXSA9IHRoaXMuYjtcbiAgICAgICAgYXJyYXlbNF0gPSB0aGlzLmQ7XG4gICAgICAgIGFycmF5WzVdID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbNl0gPSAwO1xuICAgICAgICBhcnJheVs3XSA9IDA7XG4gICAgICAgIGFycmF5WzhdID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59O1xuXG4vKipcbiAqIEdldCBhIG5ldyBwb3NpdGlvbiB3aXRoIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXG4gKiBDYW4gYmUgdXNlZCB0byBnbyBmcm9tIGEgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlIHRvIHRoZSB3b3JsZCBjb29yZGluYXRlIHNwYWNlLiAoZS5nLiByZW5kZXJpbmcpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCB0cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIHggPSBwb3MueDtcbiAgICB2YXIgeSA9IHBvcy55O1xuXG4gICAgbmV3UG9zLnggPSB0aGlzLmEgKiB4ICsgdGhpcy5jICogeSArIHRoaXMudHg7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmIgKiB4ICsgdGhpcy5kICogeSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gbmV3UG9zO1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgaW52ZXJzZSBvZiB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZSB0byBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gaW5wdXQpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCBpbnZlcnNlLXRyYW5zZm9ybWVkIHRocm91Z2ggdGhpcyBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBseUludmVyc2UgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIGlkID0gMSAvICh0aGlzLmEgKiB0aGlzLmQgKyB0aGlzLmMgKiAtdGhpcy5iKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5kICogaWQgKiB4ICsgLXRoaXMuYyAqIGlkICogeSArICh0aGlzLnR5ICogdGhpcy5jIC0gdGhpcy50eCAqIHRoaXMuZCkgKiBpZDtcbiAgICBuZXdQb3MueSA9IHRoaXMuYSAqIGlkICogeSArIC10aGlzLmIgKiBpZCAqIHggKyAoLXRoaXMudHkgKiB0aGlzLmEgKyB0aGlzLnR4ICogdGhpcy5iKSAqIGlkO1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogVHJhbnNsYXRlcyB0aGUgbWF0cml4IG9uIHRoZSB4IGFuZCB5LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudHJhbnNsYXRlID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy50eCArPSB4O1xuICAgIHRoaXMudHkgKz0geTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgc2NhbGUgdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geCBUaGUgYW1vdW50IHRvIHNjYWxlIGhvcml6b250YWxseVxuICogQHBhcmFtIHtudW1iZXJ9IHkgVGhlIGFtb3VudCB0byBzY2FsZSB2ZXJ0aWNhbGx5XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zY2FsZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuYSAqPSB4O1xuICAgIHRoaXMuZCAqPSB5O1xuICAgIHRoaXMuYyAqPSB4O1xuICAgIHRoaXMuYiAqPSB5O1xuICAgIHRoaXMudHggKj0geDtcbiAgICB0aGlzLnR5ICo9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBBcHBsaWVzIGEgcm90YXRpb24gdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgaW4gcmFkaWFucy5cbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZSA9IGZ1bmN0aW9uIChhbmdsZSlcbntcbiAgICB2YXIgY29zID0gTWF0aC5jb3MoIGFuZ2xlICk7XG4gICAgdmFyIHNpbiA9IE1hdGguc2luKCBhbmdsZSApO1xuXG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIHRoaXMuYSA9IGExICogY29zLXRoaXMuYiAqIHNpbjtcbiAgICB0aGlzLmIgPSBhMSAqIHNpbit0aGlzLmIgKiBjb3M7XG4gICAgdGhpcy5jID0gYzEgKiBjb3MtdGhpcy5kICogc2luO1xuICAgIHRoaXMuZCA9IGMxICogc2luK3RoaXMuZCAqIGNvcztcbiAgICB0aGlzLnR4ID0gdHgxICogY29zIC0gdGhpcy50eSAqIHNpbjtcbiAgICB0aGlzLnR5ID0gdHgxICogc2luICsgdGhpcy50eSAqIGNvcztcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcblxuICAgIHRoaXMuYSAgPSBtYXRyaXguYSAqIGExICsgbWF0cml4LmIgKiBjMTtcbiAgICB0aGlzLmIgID0gbWF0cml4LmEgKiBiMSArIG1hdHJpeC5iICogZDE7XG4gICAgdGhpcy5jICA9IG1hdHJpeC5jICogYTEgKyBtYXRyaXguZCAqIGMxO1xuICAgIHRoaXMuZCAgPSBtYXRyaXguYyAqIGIxICsgbWF0cml4LmQgKiBkMTtcblxuICAgIHRoaXMudHggPSBtYXRyaXgudHggKiBhMSArIG1hdHJpeC50eSAqIGMxICsgdGhpcy50eDtcbiAgICB0aGlzLnR5ID0gbWF0cml4LnR4ICogYjEgKyBtYXRyaXgudHkgKiBkMSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbWF0cml4IGJhc2VkIG9uIGFsbCB0aGUgYXZhaWxhYmxlIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFhcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFlcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVlcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3RhdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdYXG4gKiBAcGFyYW0ge251bWJlcn0gc2tld1lcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoeCwgeSwgcGl2b3RYLCBwaXZvdFksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZKVxue1xuICAgIHZhciBhLCBiLCBjLCBkLCBzciwgY3IsIGN5LCBzeSwgbnN4LCBjeDtcblxuICAgIHNyICA9IE1hdGguc2luKHJvdGF0aW9uKTtcbiAgICBjciAgPSBNYXRoLmNvcyhyb3RhdGlvbik7XG4gICAgY3kgID0gTWF0aC5jb3Moc2tld1kpO1xuICAgIHN5ICA9IE1hdGguc2luKHNrZXdZKTtcbiAgICBuc3ggPSAtTWF0aC5zaW4oc2tld1gpO1xuICAgIGN4ICA9ICBNYXRoLmNvcyhza2V3WCk7XG5cbiAgICBhICA9ICBjciAqIHNjYWxlWDtcbiAgICBiICA9ICBzciAqIHNjYWxlWDtcbiAgICBjICA9IC1zciAqIHNjYWxlWTtcbiAgICBkICA9ICBjciAqIHNjYWxlWTtcblxuICAgIHRoaXMuYSAgPSBjeSAqIGEgKyBzeSAqIGM7XG4gICAgdGhpcy5iICA9IGN5ICogYiArIHN5ICogZDtcbiAgICB0aGlzLmMgID0gbnN4ICogYSArIGN4ICogYztcbiAgICB0aGlzLmQgID0gbnN4ICogYiArIGN4ICogZDtcblxuICAgIHRoaXMudHggPSB4ICsgKCBwaXZvdFggKiBhICsgcGl2b3RZICogYyApO1xuICAgIHRoaXMudHkgPSB5ICsgKCBwaXZvdFggKiBiICsgcGl2b3RZICogZCApO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFByZXBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24obWF0cml4KVxue1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuXG4gICAgaWYgKG1hdHJpeC5hICE9PSAxIHx8IG1hdHJpeC5iICE9PSAwIHx8IG1hdHJpeC5jICE9PSAwIHx8IG1hdHJpeC5kICE9PSAxKVxuICAgIHtcbiAgICAgICAgdmFyIGExID0gdGhpcy5hO1xuICAgICAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgICAgIHRoaXMuYSAgPSBhMSptYXRyaXguYSt0aGlzLmIqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuYiAgPSBhMSptYXRyaXguYit0aGlzLmIqbWF0cml4LmQ7XG4gICAgICAgIHRoaXMuYyAgPSBjMSptYXRyaXguYSt0aGlzLmQqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuZCAgPSBjMSptYXRyaXguYit0aGlzLmQqbWF0cml4LmQ7XG4gICAgfVxuXG4gICAgdGhpcy50eCA9IHR4MSptYXRyaXguYSt0aGlzLnR5Km1hdHJpeC5jK21hdHJpeC50eDtcbiAgICB0aGlzLnR5ID0gdHgxKm1hdHJpeC5iK3RoaXMudHkqbWF0cml4LmQrbWF0cml4LnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEludmVydHMgdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5pbnZlcnQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBiMSA9IHRoaXMuYjtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIGQxID0gdGhpcy5kO1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuICAgIHZhciBuID0gYTEqZDEtYjEqYzE7XG5cbiAgICB0aGlzLmEgPSBkMS9uO1xuICAgIHRoaXMuYiA9IC1iMS9uO1xuICAgIHRoaXMuYyA9IC1jMS9uO1xuICAgIHRoaXMuZCA9IGExL247XG4gICAgdGhpcy50eCA9IChjMSp0aGlzLnR5LWQxKnR4MSkvbjtcbiAgICB0aGlzLnR5ID0gLShhMSp0aGlzLnR5LWIxKnR4MSkvbjtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIFJlc2V0cyB0aGlzIE1hdGl4IHRvIGFuIGlkZW50aXR5IChkZWZhdWx0KSBtYXRyaXguXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaWRlbnRpdHkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYSA9IDE7XG4gICAgdGhpcy5iID0gMDtcbiAgICB0aGlzLmMgPSAwO1xuICAgIHRoaXMuZCA9IDE7XG4gICAgdGhpcy50eCA9IDA7XG4gICAgdGhpcy50eSA9IDA7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBNYXRyaXggb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBBIGNvcHkgb2YgdGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1hdHJpeCA9IG5ldyBNYXRyaXgoKTtcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSB2YWx1ZXMgb2YgdGhlIGdpdmVuIG1hdHJpeCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgb25lcyBpbiB0aGlzIG1hdHJpeFxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGUgbWF0cml4IGdpdmVuIGluIHBhcmFtZXRlciB3aXRoIGl0cyB2YWx1ZXMgdXBkYXRlZC5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBBIGRlZmF1bHQgKGlkZW50aXR5KSBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LklERU5USVRZID0gbmV3IE1hdHJpeCgpO1xuXG4vKipcbiAqIEEgdGVtcCBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LlRFTVBfTUFUUklYID0gbmV3IE1hdHJpeCgpO1xuIiwiLyoqXG4gKiBUaGUgUG9pbnQgb2JqZWN0IHJlcHJlc2VudHMgYSBsb2NhdGlvbiBpbiBhIHR3by1kaW1lbnNpb25hbCBjb29yZGluYXRlIHN5c3RlbSwgd2hlcmUgeCByZXByZXNlbnRzXG4gKiB0aGUgaG9yaXpvbnRhbCBheGlzIGFuZCB5IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIGF4aXMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXNcbiAqL1xuZnVuY3Rpb24gUG9pbnQoeCwgeSlcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xufVxuXG5Qb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2ludDtcbm1vZHVsZS5leHBvcnRzID0gUG9pbnQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9pbnRcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBhIGNvcHkgb2YgdGhlIHBvaW50XG4gKi9cblBvaW50LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLngsIHRoaXMueSk7XG59O1xuXG4vKipcbiAqIENvcGllcyB4IGFuZCB5IGZyb20gdGhlIGdpdmVuIHBvaW50XG4gKlxuICogQHBhcmFtIHAge1BJWEkuUG9pbnR9XG4gKi9cblBvaW50LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKHApIHtcbiAgICB0aGlzLnNldChwLngsIHAueSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcG9pbnQgaXMgZXF1YWwgdG8gdGhpcyBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cblBvaW50LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiAocC54ID09PSB0aGlzLngpICYmIChwLnkgPT09IHRoaXMueSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIHBvaW50IHRvIGEgbmV3IHggYW5kIHkgcG9zaXRpb24uXG4gKiBJZiB5IGlzIG9taXR0ZWQsIGJvdGggeCBhbmQgeSB3aWxsIGJlIHNldCB0byB4LlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cblBvaW50LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLnggPSB4IHx8IDA7XG4gICAgdGhpcy55ID0geSB8fCAoICh5ICE9PSAwKSA/IHRoaXMueCA6IDAgKSA7XG59O1xuIiwiLyoqXG4gKiBNYXRoIGNsYXNzZXMgYW5kIHV0aWxpdGllcyBtaXhlZCBpbnRvIFBJWEkgbmFtZXNwYWNlLlxuICpcbiAqIEBsZW5kcyBQSVhJXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8vIFRoZXNlIHdpbGwgYmUgbWl4ZWQgdG8gYmUgbWFkZSBwdWJsaWNseSBhdmFpbGFibGUsXG4gICAgLy8gd2hpbGUgdGhpcyBtb2R1bGUgaXMgdXNlZCBpbnRlcm5hbGx5IGluIGNvcmVcbiAgICAvLyB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYW5kIGN1dCBkb3duIG9uXG4gICAgLy8gaW50ZXJuYWwgbW9kdWxlIHJlcXVpcmVzLlxuXG4gICAgUG9pbnQ6ICAgICAgcmVxdWlyZSgnLi9Qb2ludCcpLFxuICAgIE1hdHJpeDogICAgIHJlcXVpcmUoJy4vTWF0cml4JyksXG5cbiAgICBDaXJjbGU6ICAgICByZXF1aXJlKCcuL3NoYXBlcy9DaXJjbGUnKSxcbiAgICBFbGxpcHNlOiAgICByZXF1aXJlKCcuL3NoYXBlcy9FbGxpcHNlJyksXG4gICAgUG9seWdvbjogICAgcmVxdWlyZSgnLi9zaGFwZXMvUG9seWdvbicpLFxuICAgIFJlY3RhbmdsZTogIHJlcXVpcmUoJy4vc2hhcGVzL1JlY3RhbmdsZScpLFxuICAgIFJvdW5kZWRSZWN0YW5nbGU6IHJlcXVpcmUoJy4vc2hhcGVzL1JvdW5kZWRSZWN0YW5nbGUnKVxufTtcbiIsInZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2lyY2xlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKi9cbmZ1bmN0aW9uIENpcmNsZSh4LCB5LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuQ0lSQztcbn1cblxuQ2lyY2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENpcmNsZTtcbm1vZHVsZS5leHBvcnRzID0gQ2lyY2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIENpcmNsZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuQ2lyY2xlfSBhIGNvcHkgb2YgdGhlIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IENpcmNsZSh0aGlzLngsIHRoaXMueSwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGNpcmNsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgQ2lyY2xlXG4gKi9cbkNpcmNsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy5yYWRpdXMgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgZHggPSAodGhpcy54IC0geCksXG4gICAgICAgIGR5ID0gKHRoaXMueSAtIHkpLFxuICAgICAgICByMiA9IHRoaXMucmFkaXVzICogdGhpcy5yYWRpdXM7XG5cbiAgICBkeCAqPSBkeDtcbiAgICBkeSAqPSBkeTtcblxuICAgIHJldHVybiAoZHggKyBkeSA8PSByMik7XG59O1xuXG4vKipcbiogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIGNpcmNsZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuKi9cbkNpcmNsZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLnJhZGl1cywgdGhpcy55IC0gdGhpcy5yYWRpdXMsIHRoaXMucmFkaXVzICogMiwgdGhpcy5yYWRpdXMgKiAyKTtcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIEVsbGlwc2Ugb2JqZWN0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBoaXQgYXJlYSBmb3IgZGlzcGxheU9iamVjdHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBoYWxmIHdpZHRoIG9mIHRoaXMgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhpcyBlbGxpcHNlXG4gKi9cbmZ1bmN0aW9uIEVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuRUxJUDtcbn1cblxuRWxsaXBzZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFbGxpcHNlO1xubW9kdWxlLmV4cG9ydHMgPSBFbGxpcHNlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIEVsbGlwc2UgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkVsbGlwc2V9IGEgY29weSBvZiB0aGUgZWxsaXBzZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBFbGxpcHNlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgZWxsaXBzZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZHMgYXJlIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy9ub3JtYWxpemUgdGhlIGNvb3JkcyB0byBhbiBlbGxpcHNlIHdpdGggY2VudGVyIDAsMFxuICAgIHZhciBub3JteCA9ICgoeCAtIHRoaXMueCkgLyB0aGlzLndpZHRoKSxcbiAgICAgICAgbm9ybXkgPSAoKHkgLSB0aGlzLnkpIC8gdGhpcy5oZWlnaHQpO1xuXG4gICAgbm9ybXggKj0gbm9ybXg7XG4gICAgbm9ybXkgKj0gbm9ybXk7XG5cbiAgICByZXR1cm4gKG5vcm14ICsgbm9ybXkgPD0gMSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBlbGxpcHNlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLndpZHRoLCB0aGlzLnkgLSB0aGlzLmhlaWdodCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcbiIsInZhciBQb2ludCA9IHJlcXVpcmUoJy4uL1BvaW50JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBwb2ludHMge1BJWEkuUG9pbnRbXXxudW1iZXJbXXwuLi5QSVhJLlBvaW50fC4uLm51bWJlcn0gVGhpcyBjYW4gYmUgYW4gYXJyYXkgb2YgUG9pbnRzIHRoYXQgZm9ybSB0aGUgcG9seWdvbixcbiAqICAgICAgYSBmbGF0IGFycmF5IG9mIG51bWJlcnMgdGhhdCB3aWxsIGJlIGludGVycHJldGVkIGFzIFt4LHksIHgseSwgLi4uXSwgb3IgdGhlIGFyZ3VtZW50cyBwYXNzZWQgY2FuIGJlXG4gKiAgICAgIGFsbCB0aGUgcG9pbnRzIG9mIHRoZSBwb2x5Z29uIGUuZy4gYG5ldyBQSVhJLlBvbHlnb24obmV3IFBJWEkuUG9pbnQoKSwgbmV3IFBJWEkuUG9pbnQoKSwgLi4uKWAsIG9yIHRoZVxuICogICAgICBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZSBmbGF0IHgseSB2YWx1ZXMgZS5nLiBgbmV3IFBvbHlnb24oeCx5LCB4LHksIHgseSwgLi4uKWAgd2hlcmUgYHhgIGFuZCBgeWAgYXJlXG4gKiAgICAgIE51bWJlcnMuXG4gKi9cbmZ1bmN0aW9uIFBvbHlnb24ocG9pbnRzXylcbntcbiAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBhc3NpZ25tZW50IGRlb3B0XG4gICAgLy8gc2VlIHNlY3Rpb24gMy4xOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICB2YXIgcG9pbnRzID0gcG9pbnRzXztcblxuICAgIC8vaWYgcG9pbnRzIGlzbid0IGFuIGFycmF5LCB1c2UgYXJndW1lbnRzIGFzIHRoZSBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBwb2ludHMubGVuZ3RoOyArK2EpIHtcbiAgICAgICAgICAgIHBvaW50c1thXSA9IGFyZ3VtZW50c1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHRoaXMgaXMgYW4gYXJyYXkgb2YgcG9pbnRzLCBjb252ZXJ0IGl0IHRvIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzXG4gICAgaWYgKHBvaW50c1swXSBpbnN0YW5jZW9mIFBvaW50KVxuICAgIHtcbiAgICAgICAgdmFyIHAgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHAucHVzaChwb2ludHNbaV0ueCwgcG9pbnRzW2ldLnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9pbnRzID0gcDtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB0aGUgcG9pbnRzIG9mIHRoaXMgcG9seWdvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlBPTFk7XG59XG5cblBvbHlnb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9seWdvbjtcbm1vZHVsZS5leHBvcnRzID0gUG9seWdvbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBwb2x5Z29uXG4gKlxuICogQHJldHVybiB7UElYSS5Qb2x5Z29ufSBhIGNvcHkgb2YgdGhlIHBvbHlnb25cbiAqL1xuUG9seWdvbi5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9seWdvbih0aGlzLnBvaW50cy5zbGljZSgpKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIGluc2lkZSA9IGZhbHNlO1xuXG4gICAgLy8gdXNlIHNvbWUgcmF5Y2FzdGluZyB0byB0ZXN0IGhpdHNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svcG9pbnQtaW4tcG9seWdvbi9ibG9iL21hc3Rlci9pbmRleC5qc1xuICAgIHZhciBsZW5ndGggPSB0aGlzLnBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBsZW5ndGggLSAxOyBpIDwgbGVuZ3RoOyBqID0gaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHhpID0gdGhpcy5wb2ludHNbaSAqIDJdLCB5aSA9IHRoaXMucG9pbnRzW2kgKiAyICsgMV0sXG4gICAgICAgICAgICB4aiA9IHRoaXMucG9pbnRzW2ogKiAyXSwgeWogPSB0aGlzLnBvaW50c1tqICogMiArIDFdLFxuICAgICAgICAgICAgaW50ZXJzZWN0ID0gKCh5aSA+IHkpICE9PSAoeWogPiB5KSkgJiYgKHggPCAoeGogLSB4aSkgKiAoeSAtIHlpKSAvICh5aiAtIHlpKSArIHhpKTtcblxuICAgICAgICBpZiAoaW50ZXJzZWN0KVxuICAgICAgICB7XG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc2lkZTtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIHRoZSBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgZGVmaW5lZCBieSBpdHMgcG9zaXRpb24sIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCB3aWR0aCBvZiB0aGlzIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByZWN0YW5nbGVcbiAqL1xuZnVuY3Rpb24gUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJFQ1Q7XG59XG5cblJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZWN0YW5nbGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlY3RhbmdsZTtcblxuLyoqXG4gKiBBIGNvbnN0YW50IGVtcHR5IHJlY3RhbmdsZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuUmVjdGFuZ2xlLkVNUFRZID0gbmV3IFJlY3RhbmdsZSgwLCAwLCAwLCAwKTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgUmVjdGFuZ2xlXG4gKi9cblJlY3RhbmdsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHggPj0gdGhpcy54ICYmIHggPCB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPCB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUm91bmRlZCBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgdGhhdCBoYXMgbmljZSByb3VuZGVkIGNvcm5lcnMsIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0IGFuZCBpdHMgcmFkaXVzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBDb250cm9scyB0aGUgcmFkaXVzIG9mIHRoZSByb3VuZGVkIGNvcm5lcnNcbiAqL1xuZnVuY3Rpb24gUm91bmRlZFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMjBcbiAgICAgKi9cbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCAyMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUlJFQztcbn1cblxuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3VuZGVkUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3VuZGVkUmVjdGFuZ2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHJldHVybiB7UElYSS5Sb3VuZGVkUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJvdW5kZWRSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnJhZGl1cyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDw9IHRoaXMueCArIHRoaXMud2lkdGgpXG4gICAge1xuICAgICAgICBpZiAoeSA+PSB0aGlzLnkgJiYgeSA8PSB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBQYXJ0aWNsZUNvbnRhaW5lciBjbGFzcyBpcyBhIHJlYWxseSBmYXN0IHZlcnNpb24gb2YgdGhlIENvbnRhaW5lciBidWlsdCBzb2xlbHkgZm9yIHNwZWVkLFxuICogc28gdXNlIHdoZW4geW91IG5lZWQgYSBsb3Qgb2Ygc3ByaXRlcyBvciBwYXJ0aWNsZXMuIFRoZSB0cmFkZW9mZiBvZiB0aGUgUGFydGljbGVDb250YWluZXIgaXMgdGhhdCBhZHZhbmNlZFxuICogZnVuY3Rpb25hbGl0eSB3aWxsIG5vdCB3b3JrLiBQYXJ0aWNsZUNvbnRhaW5lciBpbXBsZW1lbnRzIG9ubHkgdGhlIGJhc2ljIG9iamVjdCB0cmFuc2Zvcm0gKHBvc2l0aW9uLCBzY2FsZSwgcm90YXRpb24pLlxuICogQW55IG90aGVyIGZ1bmN0aW9uYWxpdHkgbGlrZSB0aW50aW5nLCBtYXNraW5nLCBldGMgd2lsbCBub3Qgd29yayBvbiBzcHJpdGVzIGluIHRoaXMgYmF0Y2guXG4gKlxuICogSXQncyBleHRyZW1lbHkgZWFzeSB0byB1c2UgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgY29udGFpbmVyID0gbmV3IFBhcnRpY2xlQ29udGFpbmVyKCk7XG4gKlxuICogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSlcbiAqIHtcbiAqICAgICB2YXIgc3ByaXRlID0gbmV3IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcIm15SW1hZ2UucG5nXCIpO1xuICogICAgIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogfVxuICogYGBgXG4gKlxuICogQW5kIGhlcmUgeW91IGhhdmUgYSBodW5kcmVkIHNwcml0ZXMgdGhhdCB3aWxsIGJlIHJlbmRlcmVyIGF0IHRoZSBzcGVlZCBvZiBsaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFttYXhTaXplPTE1MDAwXSB7bnVtYmVyfSBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFydGljbGVzIHRoYXQgY2FuIGJlIHJlbmRlcmVyIGJ5IHRoZSBjb250YWluZXIuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXNdIHtvYmplY3R9IFRoZSBwcm9wZXJ0aWVzIG9mIGNoaWxkcmVuIHRoYXQgc2hvdWxkIGJlIHVwbG9hZGVkIHRvIHRoZSBncHUgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuc2NhbGU9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHNjYWxlIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnBvc2l0aW9uPXRydWVdIHtib29sZWFufSBXaGVuIHRydWUsIHBvc2l0aW9uIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnJvdGF0aW9uPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCByb3RhdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy51dnM9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHV2cyBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5hbHBoYT1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgYWxwaGEgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW2JhdGNoU2l6ZT0xNTAwMF0ge251bWJlcn0gTnVtYmVyIG9mIHBhcnRpY2xlcyBwZXIgYmF0Y2guXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQ29udGFpbmVyKG1heFNpemUsIHByb3BlcnRpZXMsIGJhdGNoU2l6ZSlcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIGJhdGNoU2l6ZSA9IGJhdGNoU2l6ZSB8fCAxNTAwMDsgLy9DT05TVC5TUFJJVEVfQkFUQ0hfU0laRTsgLy8gMjAwMCBpcyBhIG5pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSAvIGRlc2t0b3BcbiAgICBtYXhTaXplID0gbWF4U2l6ZSB8fCAxNTAwMDtcblxuICAgIC8vIE1ha2luZyBzdXJlIHRoZSBiYXRjaCBzaXplIGlzIHZhbGlkXG4gICAgLy8gNjU1MzUgaXMgbWF4IHZlcnRleCBpbmRleCBpbiB0aGUgaW5kZXggYnVmZmVyIChzZWUgUGFydGljbGVSZW5kZXJlcilcbiAgICAvLyBzbyBtYXggbnVtYmVyIG9mIHBhcnRpY2xlcyBpcyA2NTUzNiAvIDQgPSAxNjM4NFxuICAgIHZhciBtYXhCYXRjaFNpemUgPSAxNjM4NDtcbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4QmF0Y2hTaXplKSB7XG4gICAgICAgIGJhdGNoU2l6ZSA9IG1heEJhdGNoU2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4U2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhTaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBwcm9wZXJ0aWVzIHRvIGJlIGR5bmFtaWMgKHRydWUpIC8gc3RhdGljIChmYWxzZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW5bXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4U2l6ZSA9IG1heFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYXRjaFNpemUgPSBiYXRjaFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVDaGlsZHJlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGNhbnZhcyByZW5kZXJlcmluZy4gSWYgdHJ1ZSB0aGVuIHRoZSBlbGVtZW50cyB3aWxsIGJlIHBvc2l0aW9uZWQgYXQgdGhlIG5lYXJlc3QgcGl4ZWwuIFRoaXMgcHJvdmlkZXMgYSBuaWNlIHNwZWVkIGJvb3N0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlO1xuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSB0cnVlO1xuXG4gICAgdGhpcy5zZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xufVxuXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQ29udGFpbmVyO1xuXG4vKipcbiAqIFNldHMgdGhlIHByaXZhdGUgcHJvcGVydGllcyBhcnJheSB0byBkeW5hbWljIC8gc3RhdGljIGJhc2VkIG9uIHRoZSBwYXNzZWQgcHJvcGVydGllcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcHJvcGVydGllcyB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyB0byBiZSB1cGxvYWRlZFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuc2V0UHJvcGVydGllcyA9IGZ1bmN0aW9uKHByb3BlcnRpZXMpXG57XG4gICAgaWYgKCBwcm9wZXJ0aWVzICkge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzBdID0gJ3NjYWxlJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnNjYWxlIDogdGhpcy5fcHJvcGVydGllc1swXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1sxXSA9ICdwb3NpdGlvbicgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5wb3NpdGlvbiA6IHRoaXMuX3Byb3BlcnRpZXNbMV07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMl0gPSAncm90YXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucm90YXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzJdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzNdID0gJ3V2cycgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy51dnMgOiB0aGlzLl9wcm9wZXJ0aWVzWzNdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzRdID0gJ2FscGhhJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLmFscGhhIDogdGhpcy5fcHJvcGVydGllc1s0XTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgLy8gVE9ETyBkb24ndCBuZWVkIHRvIVxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIC8vICBQSVhJLkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtLmNhbGwoIHRoaXMgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGFpbmVyIHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgd2ViZ2wgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlciggcmVuZGVyZXIucGx1Z2lucy5wYXJ0aWNsZSApO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUucmVuZGVyKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgZmxhZyB0aGF0IHN0YXRpYyBkYXRhIHNob3VsZCBiZSB1cGRhdGVkIHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUub25DaGlsZHJlbkNoYW5nZSA9IGZ1bmN0aW9uIChzbWFsbGVzdENoaWxkSW5kZXgpXG57XG4gICAgdmFyIGJ1ZmZlckluZGV4ID0gTWF0aC5mbG9vcihzbWFsbGVzdENoaWxkSW5kZXggLyB0aGlzLl9iYXRjaFNpemUpO1xuICAgIGlmIChidWZmZXJJbmRleCA8IHRoaXMuX2J1ZmZlclRvVXBkYXRlKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gYnVmZmVySW5kZXg7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIGNhbnZhcyByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGlzUm90YXRlZCA9IHRydWU7XG5cbiAgICB2YXIgcG9zaXRpb25YID0gMDtcbiAgICB2YXIgcG9zaXRpb25ZID0gMDtcblxuICAgIHZhciBmaW5hbFdpZHRoID0gMDtcbiAgICB2YXIgZmluYWxIZWlnaHQgPSAwO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICBpZiAoIWNoaWxkLnZpc2libGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZyYW1lID0gY2hpbGQudGV4dHVyZS5mcmFtZTtcblxuICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhICogY2hpbGQuYWxwaGE7XG5cbiAgICAgICAgaWYgKGNoaWxkLnJvdGF0aW9uICUgKE1hdGguUEkgKiAyKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgZmFzdGVzdCAgd2F5IHRvIG9wdGltaXNlISAtIGlmIHJvdGF0aW9uIGlzIDAgdGhlbiB3ZSBjYW4gYXZvaWQgYW55IGtpbmQgb2Ygc2V0VHJhbnNmb3JtIGNhbGxcbiAgICAgICAgICAgIGlmIChpc1JvdGF0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoICogY2hpbGQuc2NhbGUueCkgKyBjaGlsZC5wb3NpdGlvbi54ICArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0ICogY2hpbGQuc2NhbGUueSkgKyBjaGlsZC5wb3NpdGlvbi55ICArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLng7XG4gICAgICAgICAgICBmaW5hbEhlaWdodCA9IGZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnk7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzUm90YXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoaWxkLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICAgICAgdmFyIGNoaWxkVHJhbnNmb3JtID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHggfCAwLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eSB8IDBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvblggPSAoKGNoaWxkLmFuY2hvci54KSAqICgtZnJhbWUud2lkdGgpICsgMC41KTtcbiAgICAgICAgICAgIHBvc2l0aW9uWSA9ICgoY2hpbGQuYW5jaG9yLnkpICogKC1mcmFtZS5oZWlnaHQpICsgMC41KTtcblxuICAgICAgICAgICAgZmluYWxXaWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgIGNoaWxkLnRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgZnJhbWUueCxcbiAgICAgICAgICAgIGZyYW1lLnksXG4gICAgICAgICAgICBmcmFtZS53aWR0aCxcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCxcbiAgICAgICAgICAgIHBvc2l0aW9uWCxcbiAgICAgICAgICAgIHBvc2l0aW9uWSxcbiAgICAgICAgICAgIGZpbmFsV2lkdGgsXG4gICAgICAgICAgICBmaW5hbEhlaWdodFxuICAgICAgICApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUNoaWxkcmVuPWZhbHNlXSB7Ym9vbGVhbn0gaWYgc2V0IHRvIHRydWUsIGFsbCB0aGUgY2hpbGRyZW4gd2lsbCBoYXZlIHRoZWlyIGRlc3Ryb3kgbWV0aG9kIGNhbGxlZCBhcyB3ZWxsXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgaWYgKHRoaXMuX2J1ZmZlcnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLl9idWZmZXJzW2ldLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xufTtcbiIsIlxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZUJ1ZmZlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvUGFydGljbGVCdWZmZXIuamF2YVxuICovXG5cbi8qKlxuICogVGhlIHBhcnRpY2xlIGJ1ZmZlciBtYW5hZ2VzIHRoZSBzdGF0aWMgYW5kIGR5bmFtaWMgYnVmZmVycyBmb3IgYSBwYXJ0aWNsZSBjb250YWluZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gUGFydGljbGVCdWZmZXIoZ2wsIHByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBzaXplKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRTaXplID0gMjtcblxuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYSBzaW5nbGUgdmVydGV4IGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGUgYnVmZmVyIGNhbiBob2xkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gc2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBkeW5hbWljLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIHN0YXRpYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcblxuICAgICAgICBpZihkeW5hbWljUHJvcGVydHlGbGFnc1tpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5keW5hbWljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuZHluYW1pY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW5pdEJ1ZmZlcnMoKTtcblxufVxuXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZUJ1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVCdWZmZXI7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmluaXRCdWZmZXJzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpO1xuICAgIHZhciBwcm9wZXJ0eTtcblxuICAgIHZhciBkeW5hbWljT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG5cbiAgICAgICAgcHJvcGVydHkub2Zmc2V0ID0gZHluYW1pY09mZnNldDtcbiAgICAgICAgZHluYW1pY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLmR5bmFtaWNTdHJpZGUgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5keW5hbWljU3RyaWRlICogNCk7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcblxuXG4gICAgLy8gc3RhdGljIC8vXG4gICAgdmFyIHN0YXRpY09mZnNldCA9IDA7XG4gICAgdGhpcy5zdGF0aWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IHN0YXRpY09mZnNldDtcbiAgICAgICAgc3RhdGljT2Zmc2V0ICs9IHByb3BlcnR5LnNpemU7XG4gICAgICAgIHRoaXMuc3RhdGljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5zdGF0aWNTdHJpZGUgKiA0KTtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNEYXRhLCBnbC5EWU5BTUlDX0RSQVcpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBkeW5hbWljIHByb3BlcnRpZXMuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUudXBsb2FkRHluYW1pYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIHByb3BlcnR5LnVwbG9hZEZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIHRoaXMuZHluYW1pY0RhdGEsIHRoaXMuZHluYW1pY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy5keW5hbWljRGF0YSk7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHN0YXRpYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZFN0YXRpYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLnN0YXRpY0RhdGEsIHRoaXMuc3RhdGljU3RyaWRlLCBwcm9wZXJ0eS5vZmZzZXQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuc3RhdGljRGF0YSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIHRvIHRoZSBHUFVcbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpLCBwcm9wZXJ0eTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuc3RhdGljU3RyaWRlICogNCwgcHJvcGVydHkub2Zmc2V0ICogNCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVCdWZmZXIuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLnN0YXRpY0J1ZmZlcik7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgUGFydGljbGVTaGFkZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlU2hhZGVyJyksXG4gICAgUGFydGljbGVCdWZmZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlQnVmZmVyJyksXG4gICAgbWF0aCAgICAgICAgICAgID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFBhcnRpY2xlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICAvLyBhbmQgbWF4IG51bWJlciBvZiBlbGVtZW50IGluIHRoZSBpbmRleCBidWZmZXIgaXMgMTYzODQgKiA2ID0gOTgzMDRcbiAgICAvLyBDcmVhdGluZyBhIGZ1bGwgaW5kZXggYnVmZmVyLCBvdmVyaGVhZCBpcyA5ODMwNCAqIDIgPSAxOTZLb1xuICAgIHZhciBudW1JbmRpY2VzID0gOTgzMDQ7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KG51bUluZGljZXMpO1xuXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCBudW1JbmRpY2VzOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gbnVsbDtcblxuICAgIHRoaXMudGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xufVxuXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbigncGFydGljbGUnLCBQYXJ0aWNsZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBXaGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gbmV3IFBhcnRpY2xlU2hhZGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlcik7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggaW5kZXgsIHNvIDY1NTM1IC8gNiA9IDEwOTIyLlxuXG4gICAgLy91cGxvYWQgdGhlIGluZGV4IGRhdGFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IFtcbiAgICAgICAgLy8gdmVydGljZXNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbixcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkVmVydGljZXMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBwb3NpdGlvbkRhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFBvc2l0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcm90YXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFSb3RhdGlvbixcbiAgICAgICAgICAgIHNpemU6MSxcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkUm90YXRpb24sXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyB1dnNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFV2cyxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIGFscGhhRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZEFscGhhLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfVxuICAgIF07XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBwYXJ0aWNsZSBiYXRjaC5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gYmluZCB0aGUgbWFpbiB0ZXh0dXJlXG4gICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAvLyBiaW5kIHRoZSBidWZmZXJzXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnNoYWRlcjtcblxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBwYXJ0aWNsZSBjb250YWluZXIgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBjaGlsZHJlbiA9IGNvbnRhaW5lci5jaGlsZHJlbixcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aCxcbiAgICAgICAgbWF4U2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemU7XG5cbiAgICBpZih0b3RhbENoaWxkcmVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIGlmKHRvdGFsQ2hpbGRyZW4gPiBtYXhTaXplKVxuICAgIHtcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IG1heFNpemU7XG4gICAgfVxuXG4gICAgaWYoIWNvbnRhaW5lci5fYnVmZmVycylcbiAgICB7XG4gICAgICAgIGNvbnRhaW5lci5fYnVmZmVycyA9IHRoaXMuZ2VuZXJhdGVCdWZmZXJzKCBjb250YWluZXIgKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXZzIGhhdmUgbm90IHVwZGF0ZWQgdGhlbiBubyBwb2ludCByZW5kZXJpbmcganVzdCB5ZXQhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb250YWluZXIuYmxlbmRNb2RlKTtcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgbSA9ICBjb250YWluZXIud29ybGRUcmFuc2Zvcm0uY29weSggdGhpcy50ZW1wTWF0cml4ICk7XG4gICAgbS5wcmVwZW5kKCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeCApO1xuICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5zaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCBtLnRvQXJyYXkodHJ1ZSkpO1xuICAgIGdsLnVuaWZvcm0xZih0aGlzLnNoYWRlci51bmlmb3Jtcy51QWxwaGEuX2xvY2F0aW9uLCBjb250YWluZXIud29ybGRBbHBoYSk7XG5cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgdGV4dHVyZSBpcyBib3VuZC4uXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gY2hpbGRyZW5bMF0uX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSB0ZXh0dXJlIGhhcyBub3QgdXBkYXRlZCB0aGVuIGxldHMgbm90IHVwbG9hZCBhbnkgc3RhdGljIHByb3BlcnRpZXNcbiAgICAgICAgaWYoIXRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZShiYXNlVGV4dHVyZSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFjb250YWluZXIuX3Byb3BlcnRpZXNbMF0gfHwgIWNvbnRhaW5lci5fcHJvcGVydGllc1szXSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICB9XG5cbiAgICAvLyBub3cgbGV0cyB1cGxvYWQgYW5kIHJlbmRlciB0aGUgYnVmZmVycy4uXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgdG90YWxDaGlsZHJlbjsgaSArPSBiYXRjaFNpemUsIGogKz0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhbW91bnQgPSAoIHRvdGFsQ2hpbGRyZW4gLSBpKTtcbiAgICAgICAgaWYoYW1vdW50ID4gYmF0Y2hTaXplKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbW91bnQgPSBiYXRjaFNpemU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYnVmZmVyID0gY29udGFpbmVyLl9idWZmZXJzW2pdO1xuXG4gICAgICAgIC8vIHdlIGFsd2F5cyB1cGxvYWQgdGhlIGR5bmFtaWNcbiAgICAgICAgYnVmZmVyLnVwbG9hZER5bmFtaWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG5cbiAgICAgICAgLy8gd2Ugb25seSB1cGxvYWQgdGhlIHN0YXRpYyBjb250ZW50IHdoZW4gd2UgaGF2ZSB0byFcbiAgICAgICAgaWYoY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9PT0gailcbiAgICAgICAge1xuICAgICAgICAgICAgYnVmZmVyLnVwbG9hZFN0YXRpYyhjaGlsZHJlbiwgaSwgYW1vdW50KTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSBqICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJpbmQgdGhlIGJ1ZmZlclxuICAgICAgICBidWZmZXIuYmluZCggdGhpcy5zaGFkZXIgKTtcblxuICAgICAgICAgLy8gbm93IGRyYXcgdGhvc2Ugc3Vja2FzIVxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBhbW91bnQgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIG9uZSBwYXJ0aWNsZSBidWZmZXIgZm9yIGVhY2ggY2hpbGQgaW4gdGhlIGNvbnRhaW5lciB3ZSB3YW50IHRvIHJlbmRlciBhbmQgdXBkYXRlcyBpbnRlcm5hbCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7UElYSS5QYXJ0aWNsZUNvbnRhaW5lcn0gVGhlIGNvbnRhaW5lciB0byByZW5kZXIgdXNpbmcgdGhpcyBQYXJ0aWNsZVJlbmRlcmVyXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmdlbmVyYXRlQnVmZmVycyA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgYnVmZmVycyA9IFtdLFxuICAgICAgICBzaXplID0gY29udGFpbmVyLl9tYXhTaXplLFxuICAgICAgICBiYXRjaFNpemUgPSBjb250YWluZXIuX2JhdGNoU2l6ZSxcbiAgICAgICAgZHluYW1pY1Byb3BlcnR5RmxhZ3MgPSBjb250YWluZXIuX3Byb3BlcnRpZXMsXG4gICAgICAgIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBiYXRjaFNpemUpXG4gICAge1xuICAgICAgICBidWZmZXJzLnB1c2gobmV3IFBhcnRpY2xlQnVmZmVyKGdsLCB0aGlzLnByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBiYXRjaFNpemUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVycztcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgdmVydGljaWVzLlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciB2ZXJ0aWNlcyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkVmVydGljZXMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIHZhciBzcHJpdGUsXG4gICAgICAgIHRleHR1cmUsXG4gICAgICAgIHRyaW0sXG4gICAgICAgIHN4LFxuICAgICAgICBzeSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKSB7XG5cbiAgICAgICAgc3ByaXRlID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldO1xuICAgICAgICB0ZXh0dXJlID0gc3ByaXRlLl90ZXh0dXJlO1xuICAgICAgICBzeCA9IHNwcml0ZS5zY2FsZS54O1xuICAgICAgICBzeSA9IHNwcml0ZS5zY2FsZS55O1xuXG4gICAgICAgIGlmICh0ZXh0dXJlLnRyaW0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZCB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG5cbiAgICAgICAgICAgIHcxID0gdHJpbS54IC0gc3ByaXRlLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGgxID0gdHJpbS55IC0gc3ByaXRlLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICBoMCA9IGgxICsgdGV4dHVyZS5jcm9wLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS1zcHJpdGUuYW5jaG9yLngpO1xuICAgICAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC1zcHJpdGUuYW5jaG9yLng7XG5cbiAgICAgICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtc3ByaXRlLmFuY2hvci55KTtcbiAgICAgICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXNwcml0ZS5hbmNob3IueTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gaDEgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IGgwICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHBvc2l0aW9ucyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUG9zaXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVQb3NpdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5wb3NpdGlvbjtcblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciByb3RhdGlvbiB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUm90YXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVSb3RhdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5yb3RhdGlvbjtcblxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVJvdGF0aW9uO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBVdnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFV2cyA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmVVdnMgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uX3RleHR1cmUuX3V2cztcblxuICAgICAgICBpZiAodGV4dHVyZVV2cylcbiAgICAgICAge1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHRleHR1cmVVdnMueDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IHRleHR1cmVVdnMueTA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB0ZXh0dXJlVXZzLngxO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSB0ZXh0dXJlVXZzLnkxO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHRleHR1cmVVdnMueDI7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSB0ZXh0dXJlVXZzLnkyO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHRleHR1cmVVdnMueDM7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSB0ZXh0dXJlVXZzLnkzO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyB5b3Uga25vdyB0aGlzIGNhbiBiZSBlYXNpZXIhXG4gICAgICAgICAgICBhcnJheVtvZmZzZXRdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIGFscGhhIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRBbHBoYSA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICAge1xuICAgICAgICB2YXIgc3ByaXRlQWxwaGEgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uYWxwaGE7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlQWxwaGE7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBQYXJ0aWNsZVJlbmRlcmVyLlxuICpcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIuZ2wpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5nbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgfVxuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG4gICAgdGhpcy50ZW1wTWF0cml4ID0gbnVsbDtcbn07XG4iLCJ2YXIgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1RleHR1cmVTaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVNoYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFRleHR1cmVTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVBvc2l0aW9uQ29vcmQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhU2NhbGU7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgZmxvYXQgYVJvdGF0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgdmVjMiB2ID0gYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICcgICB2LnggPSAoYVZlcnRleFBvc2l0aW9uLngpICogY29zKGFSb3RhdGlvbikgLSAoYVZlcnRleFBvc2l0aW9uLnkpICogc2luKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2LnkgPSAoYVZlcnRleFBvc2l0aW9uLngpICogc2luKGFSb3RhdGlvbikgKyAoYVZlcnRleFBvc2l0aW9uLnkpICogY29zKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2ID0gdiArIGFQb3NpdGlvbkNvb3JkOycsXG5cbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKHYsIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gaGVsbG9cbiAgICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IHVBbHBoYTsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciAqIHVBbHBoYTsnLFxuICAgICAgICAgICAgJyAgaWYgKGNvbG9yLmEgPT0gMC4wKSBkaXNjYXJkOycsXG4gICAgICAgICAgICAnICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB1QWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVBvc2l0aW9uQ29vcmQ6IDAsXG4gICAgICAgICAgIC8vIGFTY2FsZTogICAgICAgICAwLFxuICAgICAgICAgICAgYVJvdGF0aW9uOiAgICAgIDBcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBURU1QIEhBQ0tcblxufVxuXG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmVTaGFkZXIucHJvdG90eXBlKTtcblBhcnRpY2xlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlU2hhZGVyO1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogVGhlIENhbnZhc1JlbmRlcmVyIGRyYXdzIHRoZSBzY2VuZSBhbmQgYWxsIGl0cyBjb250ZW50IG9udG8gYSAyZCBjYW52YXMuIFRoaXMgcmVuZGVyZXIgc2hvdWxkIGJlIHVzZWQgZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgd2ViR0wuXG4gKiBEb24ndCBmb3JnZXQgdG8gYWRkIHRoZSBDYW52YXNSZW5kZXJlci52aWV3IHRvIHlvdXIgRE9NIG9yIHlvdSB3aWxsIG5vdCBzZWUgYW55dGhpbmcgOilcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc3lzdGVtIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSBzeXN0ZW0gdGhpcyByZW5kZXJlciBpcyBmb3IuXG4gKiBAcGFyYW0gW3dpZHRoPTgwMF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9NjAwXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBdIHtudW1iZXJ9IFRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSByZW5kZXJlZCBhcmVhIChzaG93biBpZiBub3QgdHJhbnNwYXJlbnQpLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFN5c3RlbVJlbmRlcmVyKHN5c3RlbSwgd2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHV0aWxzLnNheUhlbGxvKHN5c3RlbSk7XG5cbiAgICAvLyBwcmVwYXJlIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zW2ldID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zW2ldID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OU1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBvcHRpb25zID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5SRU5ERVJFUl9UWVBFLlVOS05PV05cbiAgICAgKiBAc2VlIFBJWEkuUkVOREVSRVJfVFlQRVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuVU5LTk9XTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA4MDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgODAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA2MDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHRvXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLnZpZXcgPSBvcHRpb25zLnZpZXcgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gb3B0aW9ucy5yZXNvbHV0aW9uO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy50cmFuc3BhcmVudCA9IG9wdGlvbnMudHJhbnNwYXJlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByZW5kZXIgdmlldyBzaG91bGQgYmUgcmVzaXplZCBhdXRvbWF0aWNhbGx5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IG9wdGlvbnMuYXV0b1Jlc2l6ZSB8fCBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrcyB0aGUgYmxlbmQgbW9kZXMgdXNlZnVsIGZvciB0aGlzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbWl4ZWQ+fVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIHByZXNlcnZlRHJhd2luZ0J1ZmZlciBmbGFnIGFmZmVjdHMgd2hldGhlciBvciBub3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyByZXRhaW5lZCBhZnRlciByZW5kZXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvciBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gICAgICogSWYgdGhlIHNjZW5lIGlzIE5PVCB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGEgY2FudmFzIHNpemVkIGZpbGxSZWN0IG9wZXJhdGlvbiBldmVyeSBmcmFtZSB0byBzZXQgdGhlIGNhbnZhcyBiYWNrZ3JvdW5kIGNvbG9yLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGNsZWFyUmVjdCB0byBjbGVhciB0aGUgY2FudmFzIGV2ZXJ5IGZyYW1lLlxuICAgICAqIERpc2FibGUgdGhpcyBieSBzZXR0aW5nIHRoaXMgdG8gZmFsc2UuIEZvciBleGFtcGxlIGlmIHlvdXIgZ2FtZSBoYXMgYSBjYW52YXMgZmlsbGluZyBiYWNrZ3JvdW5kIGltYWdlIHlvdSBvZnRlbiBkb24ndCBuZWVkIHRoaXMgc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdFxuICAgICAqL1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyO1xuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gICAgICogSGFuZHkgZm9yIGNyaXNwIHBpeGVsIGFydCBhbmQgc3BlZWQgb24gbGVnYWN5IGRldmljZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSBvcHRpb25zLnJvdW5kUGl4ZWxzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSAweDAwMDAwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGFuIFtSLCBHLCBCXSBhcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gJyMwMDAwMDAnO1xuXG4gICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBvcHRpb25zLmJhY2tncm91bmRDb2xvciB8fCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3I7IC8vIHJ1biBiZyBjb2xvciBzZXR0ZXJcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB0cmFuc2Zvcm06e3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpfSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCByb290IG9iamVjdCB0aGF0IHRoZSByZW5kZXJlciB0cmllZCB0byByZW5kZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbn1cblxuLy8gY29uc3RydWN0b3JcblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeXN0ZW1SZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3lzdGVtUmVuZGVyZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZpbGwgaWYgbm90IHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3lzdGVtUmVuZGVyZXIjXG4gICAgICovXG4gICAgYmFja2dyb3VuZENvbG9yOlxuICAgIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9IHV0aWxzLmhleDJzdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHV0aWxzLmhleDJyZ2IodmFsLCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB2aWV3IHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy52aWV3LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0aGlzLnZpZXcuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5hdXRvUmVzaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgYW5kIG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgQ2FudmFzIERPTSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldykge1xuICAgIGlmIChyZW1vdmVWaWV3ICYmIHRoaXMudmlldy5wYXJlbnROb2RlKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy52aWV3KTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICB0aGlzLnZpZXcgPSBudWxsO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMDtcblxuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gbnVsbDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSBudWxsO1xufTtcbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgQ2FudmFzTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ0NhbnZhcycsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5DQU5WQVM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy52aWV3LmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogdGhpcy50cmFuc3BhcmVudCB9KTtcblxuICAgIC8qKlxuICAgICAqIEJvb2xlYW4gZmxhZyBjb250cm9sbGluZyBjYW52YXMgcmVmcmVzaC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIGEgQ2FudmFzTWFza01hbmFnZXIsIGhhbmRsZXMgbWFza2luZyB3aGVuIHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc01hc2tNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBuZXcgQ2FudmFzTWFza01hbmFnZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgcHJvcGVydHkgdXNlZCB0byBzZXQgdGhlIGNhbnZhcyBzbW9vdGhpbmcgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdpbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnd2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21vekltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnb0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21zSW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIHRoaXMuX21hcEJsZW5kTW9kZXMoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge1xuICAgICAgICB3b3JsZFRyYW5zZm9ybTogbmV3IG1hdGguTWF0cml4KCksXG4gICAgICAgIHdvcmxkQWxwaGE6IDFcbiAgICB9O1xuXG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihDYW52YXNSZW5kZXJlcik7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIHRoaXMgY2FudmFzIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IG9iamVjdC5wYXJlbnQ7XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBvYmplY3Q7XG5cbiAgICBvYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgb2JqZWN0LnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIHRoaXMuY29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF07XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMgJiYgdGhpcy52aWV3LnNjcmVlbmNhbnZhcylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGVhckJlZm9yZVJlbmRlcilcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy53aWR0aCAsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChvYmplY3QsIHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGlzLmVtaXQoJ3Bvc3RyZW5kZXInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpXG57XG4gICAgdGhpcy5kZXN0cm95UGx1Z2lucygpO1xuXG4gICAgLy8gY2FsbCB0aGUgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLnJlZnJlc2ggPSB0cnVlO1xuXG4gICAgdGhpcy5tYXNrTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG5cbiAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KVxue1xuICAgIHZhciB0ZW1wQ29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJDYW52YXModGhpcyk7XG4gICAgdGhpcy5jb250ZXh0ID0gdGVtcENvbnRleHQ7XG59O1xuXG4vKipcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXIjcmVzaXplXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAodywgaClcbntcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcywgdywgaCk7XG5cbiAgICAvL3Jlc2V0IHRoZSBzY2FsZSBtb2RlLi4gb2RkbHkgdGhpcyBzZWVtcyB0byBiZSByZXNldCB3aGVuIHRoZSBjYW52YXMgaXMgcmVzaXplZC5cbiAgICAvL3N1cmVseSBhIGJyb3dzZXIgYnVnPz8gTGV0IHBpeGkgZml4IHRoYXQgZm9yIHlvdS4uXG4gICAgaWYodGhpcy5zbW9vdGhQcm9wZXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dFt0aGlzLnNtb290aFByb3BlcnR5XSA9IChDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBNYXBzIFBpeGkgYmxlbmQgbW9kZXMgdG8gY2FudmFzIGJsZW5kIG1vZGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fbWFwQmxlbmRNb2RlcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmJsZW5kTW9kZXMpXG4gICAge1xuICAgICAgICB0aGlzLmJsZW5kTW9kZXMgPSB7fTtcblxuICAgICAgICBpZiAodXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdtdWx0aXBseSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc2NyZWVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdvdmVybGF5JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdkYXJrZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ2xpZ2h0ZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ2NvbG9yLWRvZGdlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdjb2xvci1idXJuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IQVJEX0xJR0hUXSAgICA9ICdoYXJkLWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb2Z0LWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdkaWZmZXJlbmNlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5FWENMVVNJT05dICAgICA9ICdleGNsdXNpb24nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ2h1ZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc2F0dXJhdGUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ2NvbG9yJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdsdW1pbm9zaXR5JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb29sIG5ldyBibGVuZCBtb2RlcyBpbiBjYW52YXMgJ2NvdWdoJyBpZSAnY291Z2gnXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TQVRVUkFUSU9OXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBjYW52YXNcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKi9cbmZ1bmN0aW9uIENhbnZhc0J1ZmZlcih3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBDYW52YXMgb2JqZWN0IHRoYXQgYmVsb25ncyB0byB0aGlzIENhbnZhc0J1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBBIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHdvLWRpbWVuc2lvbmFsIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn1cblxuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc0J1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzQnVmZmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYW52YXNCdWZmZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB2YWw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyBidWZmZXIgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNhbnZhc0J1ZmZlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENsZWFycyB0aGUgY2FudmFzIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIENhbnZhc0J1ZmZlciBjbGFzcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgY2FudmFzIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBjYW52YXMuXG4gKlxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlciB0byBkcmF3IHRoZSBwcmltaXRpdmUgZ3JhcGhpY3MgZGF0YS5cbiAqIEBzdGF0aWNcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xudmFyIENhbnZhc0dyYXBoaWNzID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0dyYXBoaWNzO1xuXG4vKlxuICogUmVuZGVycyBhIEdyYXBoaWNzIG9iamVjdCB0byBhIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBhY3R1YWwgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIDJkIGRyYXdpbmcgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIHdvcmxkQWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljc1RpbnQoZ3JhcGhpY3MpO1xuICAgICAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuX2ZpbGxUaW50O1xuICAgICAgICB2YXIgbGluZUNvbG9yID0gZGF0YS5fbGluZVRpbnQ7XG5cbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRPRE8gLSBuZWVkIHRvIGJlIFVuZGVmaW5lZCFcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsMCwyKk1hdGguUEkpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcblxuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJ4ID0gc2hhcGUueDtcbiAgICAgICAgICAgIHZhciByeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBzaGFwZS53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgcmFkaXVzID0gc2hhcGUucmFkaXVzO1xuXG4gICAgICAgICAgICB2YXIgbWF4UmFkaXVzID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyIHwgMDtcbiAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1cyA+IG1heFJhZGl1cyA/IG1heFJhZGl1cyA6IHJhZGl1cztcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGxDb2xvciB8fCBkYXRhLmZpbGxDb2xvciA9PT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3MgbWFza1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBtYXNrXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY29udGV4dCAyZCBtZXRob2Qgb2YgdGhlIGNhbnZhc1xuICovXG5DYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIGxlbiA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG5cbiAgICBpZiAobGVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludCBhcmUgdGhlIHNhbWUgY2xvc2UgdGhlIHBhdGggLSBtdWNoIG5lYXRlciA6KVxuICAgICAgICAgICAgaWYgKHBvaW50c1swXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gJiYgcG9pbnRzWzFdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5yZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuXG4gICAgICAgICAgICAvLyBlbGxpcHNlIGNvZGUgdGFrZW4gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG5cbiAgICAgICAgICAgIHZhciB3ID0gc2hhcGUud2lkdGggKiAyO1xuICAgICAgICAgICAgdmFyIGggPSBzaGFwZS5oZWlnaHQgKiAyO1xuXG4gICAgICAgICAgICB2YXIgeCA9IHNoYXBlLnggLSB3LzI7XG4gICAgICAgICAgICB2YXIgeSA9IHNoYXBlLnkgLSBoLzI7XG5cbiAgICAgICAgICAgIHZhciBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICAgICAgICAgICAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgIHhlID0geCArIHcsICAgICAgICAgICAvLyB4LWVuZFxuICAgICAgICAgICAgICAgIHllID0geSArIGgsICAgICAgICAgICAvLyB5LWVuZFxuICAgICAgICAgICAgICAgIHhtID0geCArIHcgLyAyLCAgICAgICAvLyB4LW1pZGRsZVxuICAgICAgICAgICAgICAgIHltID0geSArIGggLyAyOyAgICAgICAvLyB5LW1pZGRsZVxuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhlLCB5bSArIG95LCB4bSArIG94LCB5ZSwgeG0sIHllKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdGludCBvZiBhIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB0aGF0IHdpbGwgaGF2ZSBpdHMgdGludCB1cGRhdGVkXG4gKlxuICovXG5DYW52YXNHcmFwaGljcy51cGRhdGVHcmFwaGljc1RpbnQgPSBmdW5jdGlvbiAoZ3JhcGhpY3MpXG57XG4gICAgaWYgKGdyYXBoaWNzLnRpbnQgPT09IDB4RkZGRkZGICYmIGdyYXBoaWNzLl9wcmV2VGludCA9PT0gZ3JhcGhpY3MudGludClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGhpY3MuX3ByZXZUaW50ID0gZ3JhcGhpY3MudGludDtcblxuICAgIHZhciB0aW50UiA9IChncmFwaGljcy50aW50ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIHRpbnRHID0gKGdyYXBoaWNzLnRpbnQgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50QiA9IChncmFwaGljcy50aW50ICYgMHhGRikvIDI1NTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuZmlsbENvbG9yIHwgMDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEubGluZUNvbG9yIHwgMDtcblxuICAgICAgICAvKlxuICAgICAgICB2YXIgY29sb3JSID0gKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JHID0gKGZpbGxDb2xvciA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIHZhciBjb2xvckIgPSAoZmlsbENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBmaWxsQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcblxuICAgICAgICBjb2xvclIgPSAobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIGNvbG9yRyA9IChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckIgPSAobGluZUNvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBsaW5lQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcbiAgICAgICAgKi9cblxuICAgICAgICAvLyBzdXBlciBpbmxpbmUgY29zIGltIGFuIG9wdGltaXphdGlvbiBOQVpJIDopXG4gICAgICAgIGRhdGEuX2ZpbGxUaW50ID0gKCgoZmlsbENvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChmaWxsQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG4gICAgICAgIGRhdGEuX2xpbmVUaW50ID0gKCgobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChsaW5lQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG5cbiAgICB9XG59O1xuXG4iLCJ2YXIgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuL0NhbnZhc0dyYXBoaWNzJyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgdG8gaGFuZGxlIG1hc2tpbmcuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDYW52YXNNYXNrTWFuYWdlcigpXG57fVxuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzTWFza01hbmFnZXI7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgYWRkcyBpdCB0byB0aGUgY3VycmVudCBzdGFjayBvZiBtYXNrcy5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge29iamVjdH0gdGhlIG1hc2tEYXRhIHRoYXQgd2lsbCBiZSBwdXNoZWRcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhLCByZW5kZXJlcilcbntcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2F2ZSgpO1xuXG4gICAgdmFyIGNhY2hlQWxwaGEgPSBtYXNrRGF0YS5hbHBoYTtcbiAgICB2YXIgdHJhbnNmb3JtID0gbWFza0RhdGEud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICAvL1RPRE8gc3Vwb3J0IHNwcml0ZSBhbHBoYSBtYXNrcz8/XG4gICAgLy9sb3RzIG9mIGVmZm9ydCByZXF1aXJlZC4gSWYgZGVtYW5kIGlzIGdyZWF0IGVub3VnaC4uXG4gICAgaWYoIW1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sobWFza0RhdGEsIHJlbmRlcmVyLmNvbnRleHQpO1xuICAgICAgICByZW5kZXJlci5jb250ZXh0LmNsaXAoKTtcbiAgICB9XG5cbiAgICBtYXNrRGF0YS53b3JsZEFscGhhID0gY2FjaGVBbHBoYTtcbn07XG5cbi8qKlxuICogUmVzdG9yZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlIHRoZSBtYXNrIHdhcyBhcHBsaWVkLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIFNwcml0ZS9UZXh0dXJlIHRpbnRpbmcuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNUaW50ZXIgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzVGludGVyO1xuXG4vKipcbiAqIEJhc2ljYWxseSB0aGlzIG1ldGhvZCBqdXN0IG5lZWRzIGEgc3ByaXRlIGFuZCBhIGNvbG9yIGFuZCB0aW50cyB0aGUgc3ByaXRlIHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIHRpbnRlZCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUgPSBmdW5jdGlvbiAoc3ByaXRlLCBjb2xvcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHNwcml0ZS50ZXh0dXJlO1xuXG4gICAgY29sb3IgPSBDYW52YXNUaW50ZXIucm91bmRDb2xvcihjb2xvcik7XG5cbiAgICB2YXIgc3RyaW5nQ29sb3IgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG5cbiAgICB0ZXh0dXJlLnRpbnRDYWNoZSA9IHRleHR1cmUudGludENhY2hlIHx8IHt9O1xuXG4gICAgaWYgKHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl07XG4gICAgfVxuXG4gICAgIC8vIGNsb25lIHRleHR1cmUuLlxuICAgIHZhciBjYW52YXMgPSBDYW52YXNUaW50ZXIuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLy9DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCh0ZXh0dXJlLCBzdHJpbmdDb2xvciwgY2FudmFzKTtcbiAgICBDYW52YXNUaW50ZXIudGludE1ldGhvZCh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKTtcblxuICAgIGlmIChDYW52YXNUaW50ZXIuY29udmVydFRpbnRUb0ltYWdlKVxuICAgIHtcbiAgICAgICAgLy8gaXMgdGhpcyBiZXR0ZXI/XG4gICAgICAgIHZhciB0aW50SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgdGludEltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcblxuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSB0aW50SW1hZ2U7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSA9IGNhbnZhcztcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCBjb252ZXJ0aW5nIHRoZSB0ZXh0dXJlIHRvIGFuIGltYWdlIHRoZW4gd2UgbmVlZCB0byBsb3NlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhc1xuICAgICAgICBDYW52YXNUaW50ZXIuY2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ211bHRpcGx5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgPSBmdW5jdGlvbiAodGV4dHVyZSwgY29sb3IsIGNhbnZhcylcbntcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgIHZhciBjcm9wID0gdGV4dHVyZS5jcm9wLmNsb25lKCk7XG4gICAgY3JvcC54ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC55ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC53aWR0aCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AuaGVpZ2h0ICo9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXMud2lkdGggPSBjcm9wLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wLmhlaWdodDtcblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tYXRvcCc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ292ZXJsYXknIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhPdmVybGF5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgY3JvcC54LFxuICAgICAgICBjcm9wLnksXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodFxuICAgICk7XG5cbiAgICAvLyBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5Jztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgcGl4ZWwgcGVyIHBpeGVsLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuICAgIHZhciByID0gcmdiVmFsdWVzWzBdLCBnID0gcmdiVmFsdWVzWzFdLCBiID0gcmdiVmFsdWVzWzJdO1xuXG4gICAgdmFyIHBpeGVsRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIHZhciBwaXhlbHMgPSBwaXhlbERhdGEuZGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGl4ZWxzLmxlbmd0aDsgaSArPSA0KVxuICAgIHtcbiAgICAgICAgcGl4ZWxzW2krMF0gKj0gcjtcbiAgICAgICAgcGl4ZWxzW2krMV0gKj0gZztcbiAgICAgICAgcGl4ZWxzW2krMl0gKj0gYjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnB1dEltYWdlRGF0YShwaXhlbERhdGEsIDAsIDApO1xufTtcblxuLyoqXG4gKiBSb3VuZHMgdGhlIHNwZWNpZmllZCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gcm91bmQsIHNob3VsZCBiZSBhIGhleCBjb2xvclxuICovXG5DYW52YXNUaW50ZXIucm91bmRDb2xvciA9IGZ1bmN0aW9uIChjb2xvcilcbntcbiAgICB2YXIgc3RlcCA9IENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuXG4gICAgcmdiVmFsdWVzWzBdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzBdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMV0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMV0gLyBzdGVwKSAqIHN0ZXApO1xuICAgIHJnYlZhbHVlc1syXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1syXSAvIHN0ZXApICogc3RlcCk7XG5cbiAgICByZXR1cm4gdXRpbHMucmdiMmhleChyZ2JWYWx1ZXMpO1xufTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygc3RlcHMgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgY2FwIHdoZW4gcm91bmRpbmcgY29sb3JzLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhY2hlU3RlcHNQZXJDb2xvckNoYW5uZWwgPSA4O1xuXG4vKipcbiAqIFRpbnQgY2FjaGUgYm9vbGVhbiBmbGFnLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSA9IGZhbHNlO1xuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkLCBjb25zZXF1ZW50bHkgdGhlIGFiaWxpdHkgdG8gdGludCB1c2luZyB0aGUgbXVsdGlwbHkgbWV0aG9kLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID0gdXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpO1xuXG4vKipcbiAqIFRoZSB0aW50aW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKi9cbkNhbnZhc1RpbnRlci50aW50TWV0aG9kID0gQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID8gQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgOiAgQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWw7XG4iLCJ2YXIgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuXHR1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgVGV4dHVyZU1hbmFnZXIgPSBmdW5jdGlvbihnbClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIHRyYWNrIHRleHR1cmVzIGluIHRoZSByZW5kZXJlciBzbyB3ZSBjYW4gbm8gbG9uZ2VyIGxpc3RlbiB0byB0aGVtIG9uIGRlc3RydWN0aW9uLlxuXHR0aGlzLl9tYW5hZ2VkVGV4dHVyZXMgPSBbXTtcbiAgICB0aGlzLmdsVGV4dHVyZXMgPSB7fTtcblxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmdldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cbi8qKlxuICogVXBkYXRlcyBhbmQvb3IgQ3JlYXRlcyBhIFdlYkdMIHRleHR1cmUgZm9yIHRoZSByZW5kZXJlcidzIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB1cGRhdGVcbiAqL1xuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG5cdGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXS8vdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG5cbiAgICBpZiAoIWdsVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGdsVGV4dHVyZSA9IG5ldyBHTFRleHR1cmUoZ2wpO1xuICAgICAgICBnbFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHRydWVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbFRleHR1cmU7XG5cbiAgICAgICAvLyB0aGlzLmdsVGV4dHVyZXNbdGV4dHVyZS51aWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgIHRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub24oJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xuICAgIH1cblxuICAgIGdsVGV4dHVyZS51cGxvYWQodGV4dHVyZS5zb3VyY2UpO1xuICAgIFxuICAgIC8vVE9ETyBjaGVjayBpcyBwb3dlciBvZiB0d28uLlxuICAgIGdsVGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuXG4gICAgLy8gVE9ETyBjaGVjayBmb3Igc2NhbGluZyB0eXBlXG4gICAgZ2xUZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKTtcblxuICAgIHJldHVybiAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG59XG5cbi8qKlxuICogRGVsZXRlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byBkZXN0cm95XG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUsIF9za2lwUmVtb3ZlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0uZGVzdHJveSgpO1xuICAgICAgICB0ZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGVUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcblxuXG4gICAgICAgIGRlbGV0ZSB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdO1xuXG4gICAgICAgIGlmICghX3NraXBSZW1vdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzLmluZGV4T2YodGV4dHVyZSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLl9tYW5hZ2VkVGV4dHVyZXMsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24oKVxue1xuXHQvLyBlbXB0eSBhbGwgdGhlIG9sZCBnbCB0ZXh0dXJlcyBhcyB0aGV5IGFyZSB1c2VsZXNzIG5vd1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIGlmICh0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgLy8gZGVzdHJveSBtYW5hZ2VkIHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgdGhpcy5kZXN0cm95VGV4dHVyZSh0ZXh0dXJlLCB0cnVlKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFuYWdlZFRleHR1cmVzID0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlTWFuYWdlcjtcblxuIiwidmFyIFN5c3RlbVJlbmRlcmVyID0gcmVxdWlyZSgnLi4vU3lzdGVtUmVuZGVyZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL01hc2tNYW5hZ2VyJyksXG4gICAgU3RlbmNpbE1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyJyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIEJsZW5kTW9kZU1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIEZYQUFGaWx0ZXIgPSByZXF1aXJlKCcuL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi9UZXh0dXJlTWFuYWdlcicpLFxuICAgIGNyZWF0ZUNvbnRleHQgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5jcmVhdGVDb250ZXh0LFxuICAgIG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aSA9IHJlcXVpcmUoJy4vdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpJyksXG4gICAgbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgV2ViR0xSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgd2ViR0wgZW5hYmxlZCBjYW52YXMuIFRoaXMgcmVuZGVyZXJcbiAqIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wuIFRoaXMgUmVuZGVyIHdvcmtzIGJ5IGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgd2ViR0xCYXRjaHMuXG4gKiBTbyBubyBuZWVkIGZvciBTcHJpdGUgQmF0Y2hlcyBvciBTcHJpdGUgQ2xvdWRzLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgdmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD0wXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD0wXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcy4gSWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseSB0aGVuIEZYQUEgYW50aWFsaWFzaW5nIGlzIHVzZWRcbiAqIEBwYXJhbSBbb3B0aW9ucy5mb3JjZUZYQUE9ZmFsc2VdIHtib29sZWFufSBmb3JjZXMgRlhBQSBhbnRpYWxpYXNpbmcgdG8gYmUgdXNlZCBvdmVyIG5hdGl2ZS4gRlhBQSBpcyBmYXN0ZXIsIGJ1dCBtYXkgbm90IGFsd2F5cyBsb29rIGFzIGdyZWF0XG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLiBJZiB5b3Ugd2lzaCB0byBzZXQgdGhpcyB0byBmYWxzZSwgeW91ICptdXN0KiBzZXQgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHRvIGB0cnVlYC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWZcbiAqICAgICAgeW91IG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHQuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgU3lzdGVtUmVuZGVyZXIuY2FsbCh0aGlzLCAnV2ViR0wnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgcmVuZGVyZXIgYXMgYSBzdGFuZGFyZGlzZWQgY29uc3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0vL1xuICAgICAqXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQgPSB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHBhc3NlZCBpbiB0byBjcmVhdGUgYSBuZXcgd2ViZ2wgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0ge1xuICAgICAgICBhbHBoYTogdGhpcy50cmFuc3BhcmVudCxcbiAgICAgICAgYW50aWFsaWFzOiBvcHRpb25zLmFudGlhbGlhcyxcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnRyYW5zcGFyZW50ICYmIHRoaXMudHJhbnNwYXJlbnQgIT09ICdub3RNdWx0aXBsaWVkJyxcbiAgICAgICAgc3RlbmNpbDogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgIH07XG5cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhWzNdID0gdGhpcy50cmFuc3BhcmVudCA/IDAgOiAxO1xuXG4gICAgLyoqXG4gICAgICogRGVhbHMgd2l0aCBtYW5hZ2luZyB0aGUgc2hhZGVyIHByb2dyYW1zIGFuZCB0aGVpciBhdHRyaWJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG5ldyBTaGFkZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWFza3MgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IE1hc2tNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIgPSBuZXcgU3RlbmNpbE1hbmFnZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5GaWx0ZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgYmxlbmRNb2Rlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CbGVuZE1vZGVNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlciA9IG5ldyBCbGVuZE1vZGVNYW5hZ2VyKHRoaXMpO1xuXG4gICAgXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgT2JqZWN0UmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk9iamVjdFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbmV3IE9iamVjdFJlbmRlcmVyKHRoaXMpO1xuXG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBzbyBpdCBpcyByZWFkeSBmb3IgdGhlIG1hbmFnZXJzLlxuICAgIHRoaXMuZ2wgPSBjcmVhdGVDb250ZXh0KHRoaXMudmlldywgdGhpcy5fY29udGV4dE9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcblxuICAgIC8vIG1hcCBzb21lIHdlYkdMIGJsZW5kIGFuZCBkcmF3bW9kZXMuLlxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aShnbCk7XG4gICAgdGhpcy5kcmF3TW9kZXMgPSBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbClcblxuICAgIHRoaXMuX2FjdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldH1cbiAgICAgKi9cbiAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihXZWJHTFJlbmRlcmVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBXZWJHTCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuX2luaXRDb250ZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgLy8gY3JlYXRlIGEgdGV4dHVyZSBtYW5hZ2VyLi4uXG4gICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG5ldyBUZXh0dXJlTWFuYWdlcihnbCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIGRlZmF1bHQgcGl4aSBzZXR0aW5ncy4uXG4gICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcblxuXG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG51bGwsIHRoaXMucmVzb2x1dGlvbiwgdHJ1ZSk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LmNsZWFyQ29sb3IgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhO1xuICAgIFxuICAgIHRoaXMuYmluZFJlbmRlclRhcmdldCh0aGlzLnJvb3RSZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy5lbWl0KCdjb250ZXh0JywgZ2wpO1xuXG4gICAgLy8gc2V0dXAgdGhlIHdpZHRoL2hlaWdodCBwcm9wZXJ0aWVzIGFuZCBnbCB2aWV3cG9ydFxuICAgIHRoaXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsgICAgXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBpdHMgd2ViR0wgdmlld1xuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gdGhlIG9iamVjdCB0byBiZSByZW5kZXJlZFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdClcbntcbiAgICB0aGlzLmVtaXQoJ3ByZXJlbmRlcicpO1xuXG4gICAgLy8gbm8gcG9pbnQgcmVuZGVyaW5nIGlmIG91ciBjb250ZXh0IGhhcyBiZWVuIGJsb3duIHVwIVxuICAgIGlmICh0aGlzLmdsLmlzQ29udGV4dExvc3QoKSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBkaXNwbGF5T2JqZWN0O1xuXG4gICAgdmFyIGNhY2hlUGFyZW50ID0gZGlzcGxheU9iamVjdC5wYXJlbnQ7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgZGlzcGxheU9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICBkaXNwbGF5T2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIHRoaXMucm9vdFJlbmRlclRhcmdldCwgdGhpcy5jbGVhckJlZm9yZVJlbmRlcik7Ly90aGlzLnByb2plY3Rpb24pO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBEaXNwbGF5IE9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSBUaGUgcmVuZGVyIHRhcmdldCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgZGlzcGxheSBvYmplY3RcbiAqXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcmVuZGVyVGFyZ2V0LCBjbGVhcikvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblxuICAgIGlmKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIGZpbHRlciBtYW5hZ2VyXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnNldEZpbHRlclN0YWNrKCByZW5kZXJUYXJnZXQuZmlsdGVyU3RhY2sgKTtcblxuICAgIC8vIHJlbmRlciB0aGUgc2NlbmUhXG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJXZWJHTCh0aGlzKTtcblxuICAgIC8vIGZpbmlzaCB0aGUgY3VycmVudCByZW5kZXJlci4uXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXJlciB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSBvYmplY3RSZW5kZXJlciB7UElYSS5PYmplY3RSZW5kZXJlcn0gVGhlIG9iamVjdCByZW5kZXJlciB0byB1c2UuXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldE9iamVjdFJlbmRlcmVyID0gZnVuY3Rpb24gKG9iamVjdFJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRSZW5kZXJlciA9PT0gb2JqZWN0UmVuZGVyZXIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RvcCgpO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gb2JqZWN0UmVuZGVyZXI7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgd2ViR0wgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHdlYkdMIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHdlYkdMIHZpZXdcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSB0aGlzLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRvIHRoZSBvbmUgZ2l2ZW4gaW4gcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9IHRoZSBuZXcgcmVuZGVyIHRhcmdldFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5iaW5kUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICBpZihyZW5kZXJUYXJnZXQgIT09IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBpZih0aGlzLl9hY3RpdmVTaGFkZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gcmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuc2V0TWFza1N0YWNrKCByZW5kZXJUYXJnZXQuc3RlbmNpbE1hc2tTdGFjayApO1xuICAgIH1cbn1cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFNoYWRlciA9IGZ1bmN0aW9uIChzaGFkZXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgLy9UT0RPIGNhY2hlXG4gICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyICE9PSBzaGFkZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBzaGFkZXI7XG4gICAgICAgIHNoYWRlci5iaW5kKCk7XG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB9XG59XG5cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgbG9jYXRpb24pXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vVE9ETyB0ZXN0IHBlcmYgb2YgY2FjaGU/XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCAwO1xuXG4gICAgaWYodGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uICE9PSBsb2NhdGlvbikvL1xuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uID0gbG9jYXRpb25cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uICk7XG4gICAgfVxuXG4gICAgLy9UT0RPIC0gY2FuIHdlIGNhY2hlIHRoaXMgdGV4dHVyZSB0b28/XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7ICAgICAgXG4gICAgXG4gICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIGJpbmQgdGhlIHRleHR1cmUuLlxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXS5iaW5kKCk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogSGFuZGxlcyBhIGxvc3Qgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRMb3N0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgYSByZXN0b3JlZCB3ZWJnbCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9pbml0Q29udGV4dCgpO1xuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIucmVtb3ZlQWxsKCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciAoZXZlbnQgbGlzdGVuZXJzLCBzcHJpdGViYXRjaCwgZXRjLi4uKVxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIHJlbW92ZSBsaXN0ZW5lcnNcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuaGFuZGxlQ29udGV4dExvc3QpO1xuICAgIHRoaXMudmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkKTtcblxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIuZGVzdHJveUFsbCgpO1xuXG4gICAgLy8gY2FsbCBiYXNlIGRlc3Ryb3lcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHJlbW92ZVZpZXcpO1xuXG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgLy8gZGVzdHJveSB0aGUgbWFuYWdlcnNcbiAgICB0aGlzLnNoYWRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSBudWxsO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0gbnVsbDtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICB0aGlzLmdsID0gbnVsbDtcbn07XG5cbiIsInZhciBEZWZhdWx0U2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBQSVhJIGZpbHRlci4gQ3VycmVudGx5IG9ubHkgV2ViR0wgc3VwcG9ydHMgZmlsdGVycy5cbiAqIElmIHlvdSB3YW50IHRvIG1ha2UgYSBjdXN0b20gZmlsdGVyIHRoaXMgc2hvdWxkIGJlIHlvdXIgYmFzZSBjbGFzcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdmVydGV4U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIGZyYWdtZW50U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlIGFzIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gdW5pZm9ybXMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuaWZvcm1zIGZvciB0aGlzIGZpbHRlci5cbiAqL1xuZnVuY3Rpb24gQWJzdHJhY3RGaWx0ZXIodmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMpXG57XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBzaGFkZXJzXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVycyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4dHJhIHBhZGRpbmcgdGhhdCB0aGUgZmlsdGVyIG1pZ2h0IG5lZWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmlmb3JtcyBhcyBhbiBvYmplY3RcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29kZSBvZiB0aGUgdmVydGV4IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIGZyYW1lbnQgc2hhZGVyXG4gICAgICogQG1lbWJlciB7c3RyaW5nW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICAvL1RPRE8gYSByZW1pbmRlciAtIHdvdWxkIGJlIGNvb2wgdG8gaGF2ZSBsb3dlciByZXMgZmlsdGVycyBhcyB0aGlzIHdvdWxkIGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlLlxuXG4gICAgLy90eXBlb2YgZnJhZ21lbnRTcmMgPT09ICdzdHJpbmcnID8gZnJhZ21lbnRTcmMuc3BsaXQoJycpIDogKGZyYWdtZW50U3JjIHx8IFtdKTtcblxufVxuXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RGaWx0ZXI7XG5cbi8qKlxuICogR3JhYnMgYSBzaGFkZXIgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIHNoYWRlciBmcm9tXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5nZXRTaGFkZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXJzW2dsLmlkXTtcblxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gbmV3IERlZmF1bHRTaGFkZXIocmVuZGVyZXIuc2hhZGVyTWFuYWdlcixcbiAgICAgICAgICAgIHRoaXMudmVydGV4U3JjLFxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudFNyYyxcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNoYWRlcnNbZ2wuaWRdID0gc2hhZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8gY2xlYXIgdGhlIG91dHB1dFRhcmdldFxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xufTtcblxuLyoqXG4gKiBTeW5jcyBhIHVuaWZvcm0gYmV0d2VlbiB0aGUgY2xhc3Mgb2JqZWN0IGFuZCB0aGUgc2hhZGVycy5cbiAqXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5zaGFkZXJzLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyc1tpXS5zeW5jVW5pZm9ybSh1bmlmb3JtKTtcbiAgICB9XG59O1xuIiwidmFyIEFic3RyYWN0RmlsdGVyID0gcmVxdWlyZSgnLi9BYnN0cmFjdEZpbHRlcicpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqXG4gKiBCYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXG4gKiBtb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcbiAqIHVuc3VwcG9ydGVkIGJ5IFdlYkdMLlxuICpcbiAqIC0tXG4gKiBGcm9tOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKlxuICovXG5mdW5jdGlvbiBGWEFBRmlsdGVyKClcbntcbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG5cXG52b2lkIHRleGNvb3Jkcyh2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTlcsIG91dCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JTVywgb3V0IHZlYzIgdl9yZ2JTRSxcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjMiBpbnZlcnNlVlAgPSAxLjAgLyByZXNvbHV0aW9uLnh5O1xcbiAgICB2X3JnYk5XID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk5FID0gKGZyYWdDb29yZCArIHZlYzIoMS4wLCAtMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU1cgPSAoZnJhZ0Nvb3JkICsgdmVjMigtMS4wLCAxLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JTRSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiTSA9IHZlYzIoZnJhZ0Nvb3JkICogaW52ZXJzZVZQKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxuICAgdlJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xcblxcbiAgIC8vY29tcHV0ZSB0aGUgdGV4dHVyZSBjb29yZHMgYW5kIHNlbmQgdGhlbSB0byB2YXJ5aW5nc1xcbiAgIHRleGNvb3JkcyhhVGV4dHVyZUNvb3JkICogcmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgdl9yZ2JOVywgdl9yZ2JORSwgdl9yZ2JTVywgdl9yZ2JTRSwgdl9yZ2JNKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcblxcbi8qKlxcbkJhc2ljIEZYQUEgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGNvZGUgb24gZ2Vla3MzZC5jb20gd2l0aCB0aGVcXG5tb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcXG51bnN1cHBvcnRlZCBieSBXZWJHTC5cXG5cXG4tLVxcblxcbkZyb206XFxuaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcXG5cXG5Db3B5cmlnaHQgKGMpIDIwMTEgYnkgQXJtaW4gUm9uYWNoZXIuXFxuXFxuU29tZSByaWdodHMgcmVzZXJ2ZWQuXFxuXFxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxcbm1ldDpcXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXFxuICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcXG4gICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcXG4gICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXFxuXFxuICAgICogVGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3JcXG4gICAgICBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWNcXG4gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXFxuXFxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xcblxcXCJBUyBJU1xcXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXFxuQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcXG5PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcXG5TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXFxuVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXFxuKi9cXG5cXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01JTlxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvIDEyOC4wKVxcbiNlbmRpZlxcbiNpZm5kZWYgRlhBQV9SRURVQ0VfTVVMXFxuICAgICNkZWZpbmUgRlhBQV9SRURVQ0VfTVVMICAgKDEuMCAvIDguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfU1BBTl9NQVhcXG4gICAgI2RlZmluZSBGWEFBX1NQQU5fTUFYICAgICA4LjBcXG4jZW5kaWZcXG5cXG4vL29wdGltaXplZCB2ZXJzaW9uIGZvciBtb2JpbGUsIHdoZXJlIGRlcGVuZGVudFxcbi8vdGV4dHVyZSByZWFkcyBjYW4gYmUgYSBib3R0bGVuZWNrXFxudmVjNCBmeGFhKHNhbXBsZXIyRCB0ZXgsIHZlYzIgZnJhZ0Nvb3JkLCB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk5XLCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYlNXLCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjNCBjb2xvcjtcXG4gICAgbWVkaXVtcCB2ZWMyIGludmVyc2VWUCA9IHZlYzIoMS4wIC8gcmVzb2x1dGlvbi54LCAxLjAgLyByZXNvbHV0aW9uLnkpO1xcbiAgICB2ZWMzIHJnYk5XID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JOVykueHl6O1xcbiAgICB2ZWMzIHJnYk5FID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JORSkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTVykueHl6O1xcbiAgICB2ZWMzIHJnYlNFID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTRSkueHl6O1xcbiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JNKTtcXG4gICAgdmVjMyByZ2JNICA9IHRleENvbG9yLnh5ejtcXG4gICAgdmVjMyBsdW1hID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTtcXG4gICAgZmxvYXQgbHVtYU5XID0gZG90KHJnYk5XLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KHJnYk5FLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gZG90KHJnYlNXLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNFID0gZG90KHJnYlNFLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KHJnYk0sICBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU1pbiA9IG1pbihsdW1hTSwgbWluKG1pbihsdW1hTlcsIGx1bWFORSksIG1pbihsdW1hU1csIGx1bWFTRSkpKTtcXG4gICAgZmxvYXQgbHVtYU1heCA9IG1heChsdW1hTSwgbWF4KG1heChsdW1hTlcsIGx1bWFORSksIG1heChsdW1hU1csIGx1bWFTRSkpKTtcXG5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpcjtcXG4gICAgZGlyLnggPSAtKChsdW1hTlcgKyBsdW1hTkUpIC0gKGx1bWFTVyArIGx1bWFTRSkpO1xcbiAgICBkaXIueSA9ICAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuXFxuICAgIGZsb2F0IGRpclJlZHVjZSA9IG1heCgobHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFKSAqXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNSAqIEZYQUFfUkVEVUNFX01VTCksIEZYQUFfUkVEVUNFX01JTik7XFxuXFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvIChtaW4oYWJzKGRpci54KSwgYWJzKGRpci55KSkgKyBkaXJSZWR1Y2UpO1xcbiAgICBkaXIgPSBtaW4odmVjMihGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgIG1heCh2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBkaXIgKiByY3BEaXJNaW4pKSAqIGludmVyc2VWUDtcXG5cXG4gICAgdmVjMyByZ2JBID0gMC41ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDEuMCAvIDMuMCAtIDAuNSkpLnh5eiArXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMi4wIC8gMy4wIC0gMC41KSkueHl6KTtcXG4gICAgdmVjMyByZ2JCID0gcmdiQSAqIDAuNSArIDAuMjUgKiAoXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAtMC41KS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogMC41KS54eXopO1xcblxcbiAgICBmbG9hdCBsdW1hQiA9IGRvdChyZ2JCLCBsdW1hKTtcXG4gICAgaWYgKChsdW1hQiA8IGx1bWFNaW4pIHx8IChsdW1hQiA+IGx1bWFNYXgpKVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkEsIHRleENvbG9yLmEpO1xcbiAgICBlbHNlXFxuICAgICAgICBjb2xvciA9IHZlYzQocmdiQiwgdGV4Q29sb3IuYSk7XFxuICAgIHJldHVybiBjb2xvcjtcXG59XFxuXFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGZ4YWEodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKiB2UmVzb2x1dGlvbiwgdlJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxuXFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG59XG5cbkZYQUFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRlhBQUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGWEFBRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBGWEFBRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cbkZYQUFGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlciggcmVuZGVyZXIgKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBTcHJpdGVNYXNrRmlsdGVyIGNsYXNzXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSB0YXJnZXQgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZU1hc2tGaWx0ZXIoc3ByaXRlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgICB2TWFza0Nvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFza0Nvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgLy8gY2hlY2sgY2xpcCEgdGhpcyB3aWxsIHN0b3AgdGhlIG1hc2sgYmxlZWRpbmcgb3V0IGZyb20gdGhlIGVkZ2VzXFxuICAgIHZlYzIgdGV4dCA9IGFicyggdk1hc2tDb29yZCAtIDAuNSApO1xcbiAgICB0ZXh0ID0gc3RlcCgwLjUsIHRleHQpO1xcbiAgICBmbG9hdCBjbGlwID0gMS4wIC0gbWF4KHRleHQueSwgdGV4dC54KTtcXG4gICAgdmVjNCBvcmlnaW5hbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgIHZlYzQgbWFza3kgPSB0ZXh0dXJlMkQobWFzaywgdk1hc2tDb29yZCk7XFxuICAgIG9yaWdpbmFsICo9IChtYXNreS5yICogbWFza3kuYSAqIGFscGhhICogY2xpcCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG9yaWdpbmFsO1xcbn1cXG5cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbWFzazogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUuX3RleHR1cmUgfSxcbiAgICAgICAgICAgIGFscGhhOiAgICAgICAgICB7IHR5cGU6ICdmJywgdmFsdWU6IDF9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcbn1cblxuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0byByZXRyaWV2ZSB0aGUgZmlsdGVyIGZyb21cbiAqIEBwYXJhbSBpbnB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gb3V0cHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqL1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5tYXNrLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLl90ZXh0dXJlO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLndvcmxkQWxwaGE7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZU1hc2tGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgdXNlZCB0byBtb3ZlIHRoZSBkaXNwbGFjZW1lbnQgbWFwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdsTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBCbGVuZE1vZGVNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn1cblxuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZE1vZGVNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGVNYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMtdXAgdGhlIGdpdmVuIGJsZW5kTW9kZSBmcm9tIFdlYkdMJ3MgcG9pbnQgb2Ygdmlldy5cbiAqXG4gKiBAcGFyYW0gYmxlbmRNb2RlIHtudW1iZXJ9IHRoZSBibGVuZE1vZGUsIHNob3VsZCBiZSBhIFBpeGkgY29uc3QsIHN1Y2ggYXMgYFBJWEkuQkxFTkRfTU9ERVMuQUREYC4gU2VlXG4gKiAge0BsaW5rIFBJWEkuQkxFTkRfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLnNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChibGVuZE1vZGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblxuICAgIHZhciBtb2RlID0gdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuY3VycmVudEJsZW5kTW9kZV07XG4gICAgdGhpcy5yZW5kZXJlci5nbC5ibGVuZEZ1bmMobW9kZVswXSwgbW9kZVsxXSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgUXVhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL1F1YWQnKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXTtcblxuICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgIHJlbmRlclRhcmdldDpyZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LFxuICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgIGJvdW5kczpudWxsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldFtdfVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICAvLyBsaXN0ZW4gZm9yIGNvbnRleHQgYW5kIHVwZGF0ZSBuZWNlc3NhcnkgYnVmZmVyc1xuICAgIC8vVE9ETyBtYWtlIHRoaXMgZHluYW1pYyFcbiAgICAvL1RPRE8gdGVzdCB0aGlzIG91dCBieSBmb3JjZXMgcG93ZXIgb2YgdHdvP1xuICAgIHRoaXMudGV4dHVyZVNpemUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgcmVuZGVyZXIud2lkdGgsIHJlbmRlcmVyLmhlaWdodCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmcmFtZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBudWxsO1xufVxuXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbHRlck1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlck1hbmFnZXI7XG5cblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVQb29sLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucXVhZCA9IG5ldyBRdWFkKGdsKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcGFyYW0gYnVmZmVyIHtBcnJheUJ1ZmZlcn1cbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuc2V0RmlsdGVyU3RhY2sgPSBmdW5jdGlvbiAoIGZpbHRlclN0YWNrIClcbntcbiAgICB0aGlzLmZpbHRlclN0YWNrID0gZmlsdGVyU3RhY2s7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlciBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGZpbHRlcnMge1BJWEkuQWJzdHJhY3RGaWxlcltdfSB0aGUgZmlsdGVycyB0aGF0IHdpbGwgYmUgcHVzaGVkIHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFja1xuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5wdXNoRmlsdGVyID0gZnVuY3Rpb24gKHRhcmdldCwgZmlsdGVycylcbntcbiAgICAvLyBnZXQgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0Li5cbiAgICAvLyBUT0RPIHJlcGxhY2UgY2xvbmUgd2l0aCBhIGNvcHkgdG8gc2F2ZSBvYmplY3QgY3JlYXRpb25cbiAgICB2YXIgYm91bmRzID0gdGFyZ2V0LmZpbHRlckFyZWEgPyB0YXJnZXQuZmlsdGVyQXJlYS5jbG9uZSgpIDogdGFyZ2V0LmdldEJvdW5kcygpO1xuXG4gICAgLy9ib3VuZHMgPSBib3VuZHMuY2xvbmUoKTtcblxuICAgIC8vIHJvdW5kIG9mZiB0aGUgcmVjdGFuZ2xlIHRvIGdldCBhIG5pY2Ugc21vb29vb29vdGggZmlsdGVyIDopXG4gICAgYm91bmRzLnggPSBib3VuZHMueCB8IDA7XG4gICAgYm91bmRzLnkgPSBib3VuZHMueSB8IDA7XG4gICAgYm91bmRzLndpZHRoID0gYm91bmRzLndpZHRoIHwgMDtcbiAgICBib3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCB8IDA7XG5cblxuICAgIC8vIHBhZGRpbmchXG4gICAgdmFyIHBhZGRpbmcgPSBmaWx0ZXJzWzBdLnBhZGRpbmcgfCAwO1xuICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLnkgLT0gcGFkZGluZztcbiAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcblxuXG4gICAgaWYodGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vVE9ETyB0aGlzIHdpbGwgYnJlYWsgaWYgdGhlIHJlbmRlclRleHR1cmUgdHJhbnNmb3JtIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYSB0cmFuc2xhdGlvbi5cbiAgICAgICAgLy9XaWxsIG5lZWQgdG8gdGFrZSB0aGUgZnVsbCBtYXRyaXggdHJhbnNmb3JtIGludG8gYWNvdW50Li5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm07XG5cbiAgICAgICAgYm91bmRzLnggKz0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSArPSB0cmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdGhpcy5jYXBGaWx0ZXJBcmVhKCBib3VuZHMgKTtcblxuICAgICAgICBib3VuZHMueCAtPSB0cmFuc2Zvcm0udHg7XG4gICAgICAgIGJvdW5kcy55IC09IHRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG4gICAgfVxuXG4gICAgaWYoYm91bmRzLndpZHRoID4gMCAmJiBib3VuZHMuaGVpZ2h0ID4gMClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gYm91bmRzO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBjbGVhciB0aGUgdGV4dHVyZS4uXG4gICAgICAgIHRleHR1cmUuY2xlYXIoKTtcblxuICAgICAgICAvLyBUT0RPIGdldCByaWQgb2Ygb2JqZWN0IGNyZWF0aW9uIVxuICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OiB0ZXh0dXJlLFxuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJzXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIHB1c2ggc29tdGhpbmcgb24gdG8gdGhlIHN0YWNrIHRoYXQgaXMgZW1wdHlcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucG9wRmlsdGVyID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2sucG9wKCk7XG4gICAgdmFyIHByZXZpb3VzRmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2tbdGhpcy5maWx0ZXJTdGFjay5sZW5ndGgtMV07XG5cbiAgICB2YXIgaW5wdXQgPSBmaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIGlmIHRoZSByZW5kZXJUYXJnZXQgaXMgbnVsbCB0aGVuIHdlIGRvbid0IGFwcGx5IHRoZSBmaWx0ZXIgYXMgaXRzIG9mZnNjcmVlblxuICAgIGlmKCFmaWx0ZXJEYXRhLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gcHJldmlvdXNGaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIHVzZSBwcm9ncmFtXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpbnB1dC5mcmFtZTtcblxuICAgIHRoaXMucXVhZC5tYXAodGhpcy50ZXh0dXJlU2l6ZSwgaW5wdXQuZnJhbWUpO1xuXG5cbiAgICAvLyBUT0RPLi4gdGhpcyBwcm9iYWJseSBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBmaWx0ZXJzID0gZmlsdGVyRGF0YS5maWx0ZXI7XG5cbiAgICAvLyBhc3N1bWluZyBhbGwgZmlsdGVycyBmb2xsb3cgdGhlIGNvcnJlY3QgZm9ybWF0Pz9cbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgbm9ybWFsIGJsZW5kbW9kZSFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKENPTlNULkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDEpXG4gICAge1xuICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICBpZiAoZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJzWzBdLmFwcGx5RmlsdGVyKCB0aGlzLnJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0ICk7XG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBpbnB1dCApO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBmbGlwVGV4dHVyZSA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcFRleHR1cmUgPSB0aGlzLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGZpbHRlcnNbaV07XG5cbiAgICAgICAgICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSB0aGVuIHNldHRpbmcgdGhpcyBlYWNoIHRpbWU/XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlci5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIGZsb3BUZXh0dXJlICk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gZmxpcFRleHR1cmU7XG4gICAgICAgICAgICBmbGlwVGV4dHVyZSA9IGZsb3BUZXh0dXJlO1xuICAgICAgICAgICAgZmxvcFRleHR1cmUgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aC0xXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIG91dHB1dCApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBmbGlwVGV4dHVyZSApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxvcFRleHR1cmUgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyRGF0YS5maWx0ZXI7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgUmVuZGVyVGFyZ2V0XG4gKiBAcmV0dXJuIHtSZW5kZXJUYXJnZXR9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICggY2xlYXIgKVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSB0aGlzLnRleHR1cmVQb29sLnBvcCgpIHx8IG5ldyBSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJlci5nbCwgdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQsIENPTlNULlNDQUxFX01PREVTLkxJTkVBUiwgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uICogQ09OU1QuRklMVEVSX1JFU09MVVRJT04pO1xuICAgIHJlbmRlclRhcmdldC5mcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJUYXJnZXQ7XG59O1xuXG4vKlxuICogUmV0dXJucyBhIFJlbmRlclRhcmdldCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UmVuZGVyVGFyZ2V0fSBUaGUgUmVuZGVyVGFyZ2V0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnJldHVyblJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5wdXNoKCByZW5kZXJUYXJnZXQgKTtcbn07XG5cbi8qXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBzaGFkZXIge1NoYWRlcn0gVGhlIHNoYWRlciB0byB1cGxvYWRcbiAqIEBwYXJhbSBpbnB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAoc2hhZGVyLCBpbnB1dFRhcmdldCwgb3V0cHV0VGFyZ2V0LCBjbGVhcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQob3V0cHV0VGFyZ2V0KTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIG91dHB1dFRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2hhZGVyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBDYW4gdGhpcyBiZSBjYWNoZWQgYW5kIG5vdCBgdG9BcnJheWBlZCBlYWNoIGZyYW1lP1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcblxuICAgIC8vVE9ETyBjYW4gdGhpcyBiZSBvcHRpbWlzZWQ/XG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuLypcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMiAqIDQgKiA0KTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuKi9cblxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGlucHV0VGFyZ2V0LnRleHR1cmUpO1xuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIG1hcHBlZCBtYXRyaXhcbiAqIEBwYXJhbSBmaWx0ZXJBcmVhIHtSZWN0YW5nbGV9IFRoZSBmaWx0ZXIgYXJlYVxuICogQHBhcmFtIHNwcml0ZSB7U3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICogQHBhcmFtIG91dHB1dE1hdHJpeCB7TWF0cml4fSBAYWx2aW5cbiAqL1xuLy8gVE9ETyBwbGF5aW5nIGFyb3VuZCBoZXJlLi4gdGhpcyBpcyB0ZW1wb3JhcnkgLSAod2lsbCBlbmQgdXAgaW4gdGhlIHNoYWRlcilcbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeCA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhLCBzcHJpdGUsIG91dHB1dE1hdHJpeClcbntcbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBzcHJpdGUud29ybGRUcmFuc2Zvcm0uY29weShtYXRoLk1hdHJpeC5URU1QX01BVFJJWCksXG4gICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIHZhciBtYXBwZWRNYXRyaXggPSBvdXRwdXRNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIC8vIHNjYWxlLi5cbiAgICB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICBtYXBwZWRNYXRyaXgudHJhbnNsYXRlKGZpbHRlckFyZWEueCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIGZpbHRlckFyZWEueSAvIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0ICk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIHJhdGlvKTtcblxuICAgIHZhciB0cmFuc2xhdGVTY2FsZVggPSAodGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAvIHRleHR1cmUud2lkdGgpO1xuICAgIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0ZXh0dXJlLmhlaWdodCk7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS50eCAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuICAgIHdvcmxkVHJhbnNmb3JtLnR5IC89IHRleHR1cmUud2lkdGggKiB0cmFuc2xhdGVTY2FsZVg7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIG1hcHBlZE1hdHJpeC5wcmVwZW5kKHdvcmxkVHJhbnNmb3JtKTtcblxuICAgIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIG1hcHBlZE1hdHJpeC5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShzcHJpdGUuYW5jaG9yLngsIHNwcml0ZS5hbmNob3IueSk7XG5cbiAgICByZXR1cm4gbWFwcGVkTWF0cml4O1xuXG4gICAgLy8gS2VlcGluZyB0aGUgb3JnaW5hbCBhcyBhIHJlbWluZGVyIHRvIG1lIG9uIGhvdyB0aGlzIHdvcmtzIVxuICAgIC8vXG4gICAgLy8gdmFyIG0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuICAgIC8vIC8vIHNjYWxlLi5cbiAgICAvLyB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICAvLyBtLnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCk7XG5cblxuICAgIC8vIG0uc2NhbGUoMSAsIHJhdGlvKTtcblxuXG4gICAgLy8gdmFyIHRyYW5zZm9ybSA9IHd0LmNsb25lKCk7XG5cbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyA2MjApO1xuICAgIC8vIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyAzODApO1xuXG4gICAgLy8gdHJhbnNmb3JtLnR4IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICAvLyB0cmFuc2Zvcm0udHkgLz0gNjIwICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgLy8gdHJhbnNmb3JtLmludmVydCgpO1xuXG4gICAgLy8gdHJhbnNmb3JtLmFwcGVuZChtKTtcblxuICAgIC8vIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIC8vIHRyYW5zZm9ybS5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgLy8gcmV0dXJuIHRyYW5zZm9ybTtcbn07XG5cbi8qXG4gKiBDb25zdHJhaW5zIHRoZSBmaWx0ZXIgYXJlYSB0byB0aGUgdGV4dHVyZSBzaXplXG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWEgd2Ugd2FudCB0byBjYXBcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY2FwRmlsdGVyQXJlYSA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhKVxue1xuICAgIGlmIChmaWx0ZXJBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCArPSBmaWx0ZXJBcmVhLng7XG4gICAgICAgIGZpbHRlckFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlckFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLmhlaWdodCArPSBmaWx0ZXJBcmVhLnk7XG4gICAgICAgIGZpbHRlckFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnggKyBmaWx0ZXJBcmVhLndpZHRoID4gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLndpZHRoID0gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAtIGZpbHRlckFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGZpbHRlckFyZWEueSArIGZpbHRlckFyZWEuaGVpZ2h0ID4gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAtIGZpbHRlckFyZWEueTtcbiAgICB9XG59O1xuXG4vKlxuICogUmVzaXplcyBhbGwgdGhlIHJlbmRlciB0YXJnZXRzIGluIHRoZSBwb29sXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMudGV4dHVyZVNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZVBvb2xbaV0ucmVzaXplKCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgZmlsdGVyIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGZpbHRlciBzdGFjay5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucXVhZC5kZXN0cm95KCk7XG4gICAgXG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG4gICAgXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IG51bGw7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGV4dHVyZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVQb29sID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBBbHBoYU1hc2tGaWx0ZXIgPSByZXF1aXJlKCcuLi9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuc3RlbmNpbFN0YWNrID0gW107XG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ID0gMDtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbCA9IFtdO1xufVxuXG5NYXNrTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFNwcml0ZU1hc2sodGFyZ2V0LCBtYXNrRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IG1hc2sgZnJvbSB0aGUgbWFzayBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIGlmIChtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnBvcFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB2YXIgYWxwaGFNYXNrRmlsdGVyID0gdGhpcy5hbHBoYU1hc2tQb29sLnBvcCgpO1xuXG4gICAgaWYgKCFhbHBoYU1hc2tGaWx0ZXIpXG4gICAge1xuICAgICAgICBhbHBoYU1hc2tGaWx0ZXIgPSBbbmV3IEFscGhhTWFza0ZpbHRlcihtYXNrRGF0YSldO1xuICAgIH1cblxuICAgIGFscGhhTWFza0ZpbHRlclswXS5tYXNrU3ByaXRlID0gbWFza0RhdGE7XG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGFyZ2V0LCBhbHBoYU1hc2tGaWx0ZXIpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBmaWx0ZXJzID0gdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgdGhpcy5hbHBoYU1hc2tQb29sLnB1c2goZmlsdGVycyk7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoTWFzayhtYXNrRGF0YSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcE1hc2sobWFza0RhdGEpO1xufTtcblxuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpLFxuICAgIENvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXInKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTaGFkZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heEF0dGlicyA9IDEwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXhBdHRpYnM7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YWNrID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcblxuLy8gICAgdGhpcy5pbml0UGx1Z2lucygpO1xufVxuXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hbmFnZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oU2hhZGVyTWFuYWdlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyTWFuYWdlcjtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRyaWJ1dGUgY29ycmVjdGx5IGFzIHRoaXMgdGVuZHMgdG8gdmFyeVxuICAgIHRoaXMubWF4QXR0aWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVE9ETyAtIFdoeSBhcmUgdGhlc2Ugbm90IHBsdWdpbnM/IFdlIGNhbid0IGRlY291cGxlIHByaW1pdGl2ZXMgdW5sZXNzIHRoZXkgYXJlLi4uLlxuICAgIHRoaXMuZGVmYXVsdFNoYWRlciA9IG5ldyBUZXh0dXJlU2hhZGVyKHRoaXMpO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBuZXcgQ29tcGxleFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogVGFrZXMgdGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gaW4gcGFyYW1ldGVycyBhbmQgdXBsb2FkcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJzIHthbnlbXX0gYXR0cmlic1xuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRBdHRyaWJzID0gZnVuY3Rpb24gKGF0dHJpYnMpXG57XG4gICAgLy8gcmVzZXQgdGVtcCBzdGF0ZVxuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMudGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yICh2YXIgYSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbYXR0cmlic1thXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYlN0YXRlW2ldICE9PSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgc2hhZGVyLlxuICpcbiAqIEBwYXJhbSBzaGFkZXIge1BJWEkuU2hhZGVyfSB0aGUgc2hhZGVyIHRvIHVwbG9hZFxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKVxue1xuICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5fY3VycmVudElkID09PSBzaGFkZXIudWlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IHNoYWRlci51aWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBzaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmdsLnVzZVByb2dyYW0oc2hhZGVyLnByb2dyYW0pO1xuICAgIHRoaXMuc2V0QXR0cmlicyhzaGFkZXIuYXR0cmlidXRlcyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBvYmplY3QuXG4gKlxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLmRlc3Ryb3koKTtcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBudWxsO1xufTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFza01hbmFnZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG51bGw7XG59XG5cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBtYXNrIHN0YWNrIHRoYXQgaXMgdXNlZCBieSB0aGlzIG1hbmFnZXIuXG4gKlxuICogQHBhcmFtIHN0ZW5jaWxNYXNrU3RhY2sge1BJWEkuU3RlbmNpbE1hc2tTdGFja30gVGhlIG1hc2sgc3RhY2tcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuc2V0TWFza1N0YWNrID0gZnVuY3Rpb24gKCBzdGVuY2lsTWFza1N0YWNrIClcbntcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBzdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIGlmIChzdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suIEBhbHZpblxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hdHRhY2hTdGVuY2lsQnVmZmVyKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBzbXMgPSB0aGlzLnN0ZW5jaWxNYXNrU3RhY2s7XG5cbiAgICB0aGlzLmJpbmRHcmFwaGljcyhncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xuICAgICAgICBzbXMucmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIHNtcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wdXNoKHdlYkdMRGF0YSk7XG5cbiAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgLy8gZHJhdyB0aGUgdHJpYW5nbGUgc3RyaXAhXG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IGEgcXVhZCB0byBpbmNyZW1lbnQuLlxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cbiAgICBzbXMuY291bnQrKztcbn07XG5cbi8qKlxuICogVE9ETyB0aGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIVxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5iaW5kR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICAvL2lmICh0aGlzLl9jdXJyZW50R3JhcGhpY3MgPT09IGdyYXBoaWNzKXJldHVybjtcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGJpbmQgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgdmFyIHNoYWRlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICAvKlxuICAgICAgICBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMuY29sb3IuX2xvY2F0aW9uLCB3ZWJHTERhdGEuY29sb3IpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDIsIDApO1xuXG4gICAgICAgIC8vIG5vdyBkbyB0aGUgcmVzdC4uXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICovXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmFjdGl2YXRlUHJpbWl0aXZlU2hhZGVyKCk7XG4vLyAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnByaW1pdGl2ZVNoYWRlcjtcbiAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cblxuICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4vLyAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG5cbiAgICAgIC8qICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTFmKHNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEpO1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCA0LCBnbC5GTE9BVCwgZmFsc2UsNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTsqL1xuICAgIH1cbn07XG5cbi8qKlxuICogVE9ETyBAYWx2aW5cbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTdGVuY2lsID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wb3AoKTtcblxuICAgIHNtcy5jb3VudC0tO1xuXG4gICAgaWYgKHNtcy5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgLy8gdGhlIHN0YWNrIGlzIGVtcHR5IVxuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICAgICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuXG4gICAgICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSAobGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOVkVSVCk7XG5cbiAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50ICs9IDI7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAvLyAgY29uc29sZS5sb2coXCI8PD4+XCIpXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcblxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCksIDB4RkYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5LRUVQKTtcblxuXG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgbWFzayBzdGFjay5cbiAqXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjayA9IG51bGw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119IFRoZSBtYXNrIGRhdGEgc3RydWN0dXJlIHRvIHVzZVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgXG4gICAgLy9UT0RPIEZJWFxuICAgIGlmIChtYXNrRGF0YS5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy51cGRhdGVHcmFwaGljcyhtYXNrRGF0YSwgdGhpcy5yZW5kZXJlci5nbCk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119XG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuXG4gICAgdGhpcy5wb3BTdGVuY2lsKG1hc2tEYXRhLCBtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YVswXSk7XG59O1xuXG4iLCIvKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gV2ViR0xNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMucmVuZGVyZXIub24oJ2NvbnRleHQnLCB0aGlzLm9uQ29udGV4dENoYW5nZSwgdGhpcyk7XG59XG5cbldlYkdMTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFuYWdlcjtcblxuLyoqXG4gKiBHZW5lcmljIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXHQvLyBkbyBzb21lIGNvZGVzIGluaXQhXG59O1xuXG4vKipcbiAqIEdlbmVyaWMgZGVzdHJveSBtZXRob2RzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICovXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVuZGVyZXIub2ZmKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IGNvbXBsZXggcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBDb21wbGV4UHJpbWl0aXZlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gdmVjNChjb2xvciAqIGFscGhhICogdGludCwgYWxwaGEpOycsLy9cIiAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdGludDogICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwgMCwgMF0gfSxcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgY29sb3I6ICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwwLDBdIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYUNvbG9yOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCYXNlIHNoYWRlciBjbGFzcyBmb3IgUElYSSBtYW5hZ2VkIHNoYWRlcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFt1bmlmb3Jtc10ge29iamVjdH0gVW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxuICogQHBhcmFtIFthdHRyaWJ1dGVzXSB7b2JqZWN0fSBBdHRyaWJ1dGVzIGZvciB0aGlzIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKVxue1xuICAgIGlmICghdmVydGV4U3JjIHx8ICFmcmFnbWVudFNyYylcbiAgICB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpeGkuanMgRXJyb3IuIFNoYWRlciByZXF1aXJlcyB2ZXJ0ZXhTcmMgYW5kIGZyYWdtZW50U3JjJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmdsID0gc2hhZGVyTWFuYWdlci5yZW5kZXJlci5nbDtcblxuICAgIC8vVE9ETyBtYXliZSB3ZSBzaG91bGQgcGFzcyByZW5kZXJlciByYXRoZXIgdGhhbiBzaGFkZXIgbWFuZ2VyPz8gZm9vZCBmb3IgdGhvdWdodC4uXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyID0gc2hhZGVyTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBwcm9ncmFtLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xQcm9ncmFtfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF0dHJpYnV0ZXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRleHR1cmUgY291bnRlclxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYztcblxuICAgIHRoaXMuaW5pdCgpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc2hhZGVyIGFuZCB1c2VzIGl0XG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29tcGlsZSgpO1xuXG4gICAgdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLnVuaWZvcm1zKSk7XG4gICAgdGhpcy5jYWNoZUF0dHJpYnV0ZUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpKTtcbn07XG5cbi8qKlxuICogQ2FjaGVzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHVuaWZvcm0gZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSB1bmlmb3JtcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyA9IGZ1bmN0aW9uIChrZXlzKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMudW5pZm9ybXNba2V5c1tpXV0uX2xvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBrZXlzW2ldKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSBhdHRyaWJ1dGVzIHRvIGNhY2hlXG4gKi9cblNoYWRlci5wcm90b3R5cGUuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNba2V5c1tpXV0gPSB0aGlzLmdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4uLlxuXG4gICAgLy8gQmVnaW4gd29yc3QgaGFjayBldmEgLy9cblxuICAgIC8vIFdIWT8/PyBPTkxZIG9uIG15IGNocm9tZSBwaXhlbCB0aGUgbGluZSBhYm92ZSByZXR1cm5zIC0xIHdoZW4gdXNpbmcgZmlsdGVycz9cbiAgICAvLyBtYXliZSBpdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdsIGNvbnRleHQuXG4gICAgLy8gSSdtIGNvbnZpbmNlZCB0aGlzIGlzIGEgYnVnIGluIHRoZSBjaHJvbWUgYnJvd3NlciBhcyB0aGVyZSBpcyBOTyByZWFzb24gd2h5IHRoaXMgc2hvdWxkIGJlIHJldHVybmluZyAtMSBlc3BlY2lhbGx5IGFzIGl0IG9ubHkgbWFuaWZlc3RzIG9uIG15IGNocm9tZSBwaXhlbFxuICAgIC8vIElmIHRoZXJlcyBhbnkgd2ViR0wgcGVvcGxlIHRoYXQga25vdyB3aHkgY291bGQgaGFwcGVuIHBsZWFzZSBoZWxwIDopXG4gICAgLy8gaWYgKHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPT09IC0xKXtcbiAgICAvLyAgICAgdGhpcy5hdHRyaWJ1dGVzLmFDb2xvciA9IDI7XG4gICAgLy8gfVxuXG4gICAgLy8gRW5kIHdvcnN0IGhhY2sgZXZhIC8vXG59O1xuXG4vKipcbiAqIEF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZCBjcmVhdGVzIHRoZSBwcm9ncmFtLlxuICpcbiAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX1cbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIGdsVmVydFNoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5WRVJURVhfU0hBREVSLCB0aGlzLnZlcnRleFNyYyk7XG4gICAgdmFyIGdsRnJhZ1NoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuZnJhZ21lbnRTcmMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xGcmFnU2hhZGVyKTtcbiAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcblxuICAgIC8vIGlmIGxpbmtpbmcgZmFpbHMsIHRoZW4gbG9nIGFuZCBjbGVhbnVwXG4gICAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BpeGkuanMgRXJyb3I6IENvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlci4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuVkFMSURBVEVfU1RBVFVTJywgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuZ2V0RXJyb3IoKScsIGdsLmdldEVycm9yKCkpO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcHJvZ3JhbSBpbmZvIGxvZywgbG9nIGl0XG4gICAgICAgIGlmIChnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSAhPT0gJycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBXYXJuaW5nOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpJywgZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgcHJvZ3JhbSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgc29tZSBzaGFkZXJzXG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsVmVydFNoYWRlcik7XG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsRnJhZ1NoYWRlcik7XG5cbiAgICByZXR1cm4gKHRoaXMucHJvZ3JhbSA9IHByb2dyYW0pO1xufTtcblxuLyoqXG4qIEFkZHMgYSBuZXcgdW5pZm9ybVxuKlxuKiBAcGFyYW0gdW5pZm9ybSB7b2JqZWN0fSB0aGUgbmV3IHVuaWZvcm0gdG8gYXR0YWNoXG4qL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBsb2NhdGlvbiA9IHVuaWZvcm0uX2xvY2F0aW9uLFxuICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWUsXG4gICAgICAgIGdsID0gdGhpcy5nbCxcbiAgICAgICAgaSwgaWw7XG5cbiAgICBzd2l0Y2ggKHVuaWZvcm0udHlwZSlcbiAgICB7XG4gICAgICAgIGNhc2UgJ2InOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlID8gMSA6IDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGludCB2YWx1ZVxuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBzaW5nbGUgZmxvYXQgdmFsdWVcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDIpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoMykgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoNCkgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzRmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSAyRCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjInOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgM0QgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YzJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDREIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2NCc6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzFmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzRmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTInOlxuICAgICAgICBjYXNlICdtYXQyJzpcbiAgICAgICAgY2FzZSAnTWF0cml4MmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICBjYXNlICdtYXQzJzpcbiAgICAgICAgY2FzZSAnTWF0cml4M2Z2JzpcblxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICdtNCc6XG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICBjYXNlICdNYXRyaXg0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgQ29sb3IgVmFsdWVcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGludGVnZXJzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIChKUyBvciB0eXBlZCBhcnJheSlcbiAgICAgICAgY2FzZSAnZnYxJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDJEIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjJ2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDIgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDJdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMiArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAzRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yzdic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgzICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMyArIDJdICAgPSB2YWx1ZVtpXS56O1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHVuaWZvcm0uX2FycmF5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDREIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjR2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDRdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgMl0gICA9IHZhbHVlW2ldLno7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAzXSAgID0gdmFsdWVbaV0udztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBQSVhJLlRleHR1cmVcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgIGNhc2UgJ3NhbXBsZXIyRCc6XG5cbiAgICAgICAgICAgIGlmICghdW5pZm9ybS52YWx1ZSB8fCAhdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFjdGl2YXRlIHRoaXMgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0aGlzLnRleHR1cmVDb3VudF0pO1xuXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgICAgICAgICBpZiAoIXRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2FtcGxlcjJEKHVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSB0ZXh0dXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb25lLi5cbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gICAgICAgICAgICAvLyBzZXQgdW5pZm9ybSB0byB0ZXh0dXJlIGluZGV4XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkodW5pZm9ybS5fbG9jYXRpb24sIHRoaXMudGV4dHVyZUNvdW50KTtcblxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IG5leHQgdGV4dHVyZSBpZFxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBTaGFkZXIgV2FybmluZzogVW5rbm93biB1bmlmb3JtIHR5cGU6ICcgKyB1bmlmb3JtLnR5cGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnVuaWZvcm1zKVxuICAgIHtcbiAgICAgICAgdGhpcy5zeW5jVW5pZm9ybSh0aGlzLnVuaWZvcm1zW2tleV0pO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJbml0aWFsaXNlcyBhIFNhbXBsZXIyRCB1bmlmb3JtICh3aGljaCBtYXkgb25seSBiZSBhdmFpbGFibGUgbGF0ZXIgb24gYWZ0ZXIgaW5pdFVuaWZvcm1zIG9uY2UgdGhlIHRleHR1cmUgaGFzIGxvYWRlZClcbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuaW5pdFNhbXBsZXIyRCA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGlmICh1bmlmb3JtLnRleHR1cmVEYXRhKVxuICAgIHtcblxuICAgICAgICAvL1RPRE8gbW92ZSB0aGlzLi4uXG4gICAgICAgIHZhciBkYXRhID0gdW5pZm9ybS50ZXh0dXJlRGF0YTtcblxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG5cbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGxpZWRBbHBoYSk7XG4gICAgICAgIC8vIEdMVGV4dHVyZSA9IG1hZyBsaW5lYXIsIG1pbiBsaW5lYXJfbWlwbWFwX2xpbmVhciwgd3JhcCByZXBlYXQgKyBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgLy8gR0xUZXh0dXJlTGluZWFyID0gbWFnL21pbiBsaW5lYXIsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdFJlcGVhdCA9IG1hZy9taW4gTkVBUkVTVCwgd3JhcCByZXBlYXRcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdCA9IG1hZy9taW4gbmVhcmVzdCwgd3JhcCBjbGFtcFxuICAgICAgICAvLyBBdWRpb1RleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDUxMiwgaGVpZ2h0IDIsIGJvcmRlciAwXG4gICAgICAgIC8vIEtleVRleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDI1NiwgaGVpZ2h0IDIsIGJvcmRlciAwXG5cbiAgICAgICAgLy8gIG1hZ0ZpbHRlciBjYW4gYmU6IGdsLkxJTkVBUiwgZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgb3IgZ2wuTkVBUkVTVFxuICAgICAgICAvLyAgd3JhcFMvVCBjYW4gYmU6IGdsLkNMQU1QX1RPX0VER0Ugb3IgZ2wuUkVQRUFUXG5cbiAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBkYXRhLmx1bWluYW5jZSA/IGdsLkxVTUlOQU5DRSA6IGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRleHR1cmUuc291cmNlKTtcblxuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZGF0YS5tYWdGaWx0ZXIgPyBkYXRhLm1hZ0ZpbHRlciA6IGdsLkxJTkVBUiApO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFICk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZGF0YS53cmFwVCA/IGRhdGEud3JhcFQgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5zaGFkZXJNYW5hZ2VyLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgc2hhZGVyLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmdsLmRlbGV0ZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgIHRoaXMudW5pZm9ybXMgPSBudWxsO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleFNyYyA9IG51bGw7XG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IG51bGw7XG59O1xuXG5TaGFkZXIucHJvdG90eXBlLl9nbENvbXBpbGUgPSBmdW5jdGlvbiAodHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIHRoaXMuZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc3JjKTtcbiAgICB0aGlzLmdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghdGhpcy5nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCB0aGlzLmdsLkNPTVBJTEVfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIGN1c3RvbVVuaWZvcm1zLCBjdXN0b21BdHRyaWJ1dGVzKVxue1xuICAgIHZhciB1bmlmb3JtcyA9IHtcblxuICAgICAgICB1U2FtcGxlcjogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiAwIH0sXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6ICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDFdKSB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21Vbmlmb3JtcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIHUgaW4gY3VzdG9tVW5pZm9ybXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVuaWZvcm1zW3VdID0gY3VzdG9tVW5pZm9ybXNbdV07XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBhVmVydGV4UG9zaXRpb246ICAgIDAsXG4gICAgICAgIGFUZXh0dXJlQ29vcmQ6ICAgICAgMCxcbiAgICAgICAgYUNvbG9yOiAgICAgICAgICAgICAwXG4gICAgfTtcblxuICAgIGlmIChjdXN0b21BdHRyaWJ1dGVzKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgYSBpbiBjdXN0b21BdHRyaWJ1dGVzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2FdID0gY3VzdG9tQXR0cmlidXRlc1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IHZlcnRleFNyYyB8fCBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcyk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKGdsKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IFRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgZnJhZ21lbnRTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYztcblxuICAgIFNoYWRlci5jYWxsKHRoaXMsIGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTsvLywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xuXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuLi9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBCYXNlIGZvciBhIGNvbW1vbiBvYmplY3QgcmVuZGVyZXIgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHN5c3RlbSByZW5kZXJlciBwbHVnaW4uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBPYmplY3RSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59XG5cblxuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9iamVjdFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RSZW5kZXJlcjtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHJlbmRlcmVyIGFuZCBzZXRzIHRoZSBzaGFkZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gc2V0IHRoZSBzaGFkZXIuLlxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgcmVuZGVyZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIGZsdXNoZXNcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gZmx1c2ghXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyByZW5kZXIgdGhlIG9iamVjdFxufTtcbiIsIi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHF1YWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gVGhlIGdsIGNvbnRleHQgZm9yIHRoaXMgcXVhZCB0byB1c2UuXG4gKi9cbmZ1bmN0aW9uIFF1YWQoZ2wpXG57XG4gICAgLypcbiAgICAgKiB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbi8vICAgIHRoaXMudGV4dHVyZXMgPSBuZXcgVGV4dHVyZVV2cygpO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMjAwLDAsXG4gICAgICAgIDIwMCwyMDAsXG4gICAgICAgIDAsMjAwXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBxdWFkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KFtcbiAgICAgICAgMCwwLFxuICAgICAgICAxLDAsXG4gICAgICAgIDEsMSxcbiAgICAgICAgMCwxXG4gICAgXSk7XG5cbi8vICAgIHZhciB3aGl0ZSA9ICgweEZGRkZGRiA+PiAxNikgKyAoMHhGRkZGRkYgJiAweGZmMDApICsgKCgweEZGRkZGRiAmIDB4ZmYpIDw8IDE2KSArICgxICogMjU1IDw8IDI0KTtcbiAgICAvL1RPRE8gY29udmVydCB0aGlzIHRvIGEgMzIgdW5zaWduZWQgaW50IGFycmF5XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIGNvbXBvbmVudHMgb2YgdGhlIHRyaWFuZ2xlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDFcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KFtcbiAgICAgICAgMCwgMSwgMiwgMCwgMywgMlxuICAgIF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIHZlcnRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICg4ICsgOCArIDE2KSAqIDQsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59XG5cblF1YWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUXVhZDtcblxuLyoqXG4gKiBNYXBzIHR3byBSZWN0YW5nbGUgdG8gdGhlIHF1YWRcbiAqIEBwYXJhbSByZWN0IHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZpcnN0IHJlY3RhbmdsZVxuICogQHBhcmFtIHJlY3QyIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHNlY29uZCByZWN0YW5nbGVcbiAqL1xuUXVhZC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24ocmVjdCwgcmVjdDIpXG57XG4gICAgdmFyIHggPSAwOyAvL3JlY3QyLnggLyByZWN0LndpZHRoO1xuICAgIHZhciB5ID0gMDsgLy9yZWN0Mi55IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1swXSA9IHg7XG4gICAgdGhpcy51dnNbMV0gPSB5O1xuXG4gICAgdGhpcy51dnNbMl0gPSB4ICsgcmVjdDIud2lkdGggLyByZWN0LndpZHRoO1xuICAgIHRoaXMudXZzWzNdID0geTtcblxuICAgIHRoaXMudXZzWzRdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIHRoaXMudXZzWzZdID0geDtcbiAgICB0aGlzLnV2c1s3XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIC8vLyAtLS0tLVxuICAgIHggPSByZWN0Mi54O1xuICAgIHkgPSByZWN0Mi55O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1swXSA9IHg7XG4gICAgdGhpcy52ZXJ0aWNlc1sxXSA9IHk7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzJdID0geCArIHJlY3QyLndpZHRoO1xuICAgIHRoaXMudmVydGljZXNbM10gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1s0XSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzVdID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudmVydGljZXNbNl0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0O1xuXG4gICAgdGhpcy51cGxvYWQoKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlciBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5RdWFkLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIFRPRE8gY291bGQgcHJvYmFibHkgYmUgcHVzaGVkIGludG8gb25lIHVwbG9hZCFcbiAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHRoaXMudmVydGV4QnVmZmVyICk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy52ZXJ0aWNlcyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgOCAqIDQsIHRoaXMudXZzKTtcblxuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDgpICogNCwgdGhpcy5jb2xvcnMpO1xufTtcblxuUXVhZC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWQ7XG5cblxuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKSxcbiAgICAgICAgXG4gICAgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuICAgIEdMRnJhbWVidWZmZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTEZyYW1lYnVmZmVyLFxuICAgIFxuICAgIFN0ZW5jaWxNYXNrU3RhY2sgPSByZXF1aXJlKCcuL1N0ZW5jaWxNYXNrU3RhY2snKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqL1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgaG9yaXpvbnRhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSB2ZXJ0aWNhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICogQHBhcmFtIHJvb3Qge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAqL1xudmFyIFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24sIHJvb3QpXG57XG4gICAgLy9UT0RPIFJlc29sdXRpb24gY291bGQgZ28gaGVyZSAoIGVnIGxvdyByZXMgYmx1cnMgKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vIG5leHQgdGltZSB0byBjcmVhdGUgYSBmcmFtZSBidWZmZXIgYW5kIHRleHR1cmVcblxuICAgIC8qKlxuICAgICAqIEEgZnJhbWUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEZyYW1lQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuXG4gICAgdGhpcy5jbGVhckNvbG9yID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIG9iamVjdCBhcyBhIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2JqZWN0J3MgdHJhbnNmb3JtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk1hdHJpeH1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lID0gbnVsbDtcbiAgICBcbiAgICB0aGlzLmRlZmF1bHRGcmFtZSA9IG5ldyBQSVhJLlJlY3RhbmdsZSgpO1xuICAgIHRoaXMuZGVzdGluYXRpb25GcmFtZSA9IG51bGw7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgc3RvcmVzIG1hc2tpbmcgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbEJ1ZmZlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzdGVuY2lsIG1hc2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gbmV3IFN0ZW5jaWxNYXNrU3RhY2soKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyBmaWx0ZXIgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDp0aGlzLFxuICAgICAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICAgICAgYm91bmRzOnRoaXMuc2l6ZVxuICAgICAgICB9XG4gICAgXTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEEgZnJhbWUgYnVmZmVyIG5lZWRzIGEgdGFyZ2V0IHRvIHJlbmRlciB0by4uXG4gICAgICAgICAgICBjcmVhdGUgYSB0ZXh0dXJlIGFuZCBiaW5kIGl0IGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAgICAgKi9cbiAgICAgICAgXG5cbiAgICAgICAvLyBUT0RPIGNoYW5nZSFcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGJ5IHRoZSBiYXNlIHRleHR1cmVcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGhpcy5mcmFtZUJ1ZmZlci50ZXh0dXJlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBtYWtlIGl0IGEgbnVsbCBmcmFtZWJ1ZmZlci4uXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZnJhbWVidWZmZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xufTtcblxuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRhcmdldDtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGFyZ2V0O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZmlsdGVyIHRleHR1cmUuXG4gKlxuICogQHBhcmFtIFtiaW5kPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIHdlIGJpbmQgb3VyIGZyYW1lYnVmZmVyIGJlZm9yZSBjbGVhcmluZz9cbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGNsZWFyQ29sb3IpXG57XG4gICAgdmFyIGNjID0gY2xlYXJDb2xvciB8fCB0aGlzLmNsZWFyQ29sb3JcbiAgICB0aGlzLmZyYW1lQnVmZmVyLmNsZWFyKGNjWzBdLGNjWzFdLGNjWzJdLGNjWzNdKS8vcixnLGIsYSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuYXR0YWNoU3RlbmNpbEJ1ZmZlciA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPRE8gY2hlY2sgaWYgc3RlbmNpbCBpcyBkb25lP1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBpcyB1c2VkIGZvciBtYXNraW5nIGluIHBpeGlcbiAgICAgKiBsZXRzIGNyZWF0ZSBvbmUgYW5kIHRoZW4gYWRkIGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVTdGVuY2lsKCk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCBpbml0aWFsaXNlcyB0aGUgdmlld3BvcnQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oZGVzdGluYXRpb25GcmFtZSwgc291cmNlRnJhbWUpXG57XG4gICAgLy9UT09EIHJlZmFjdG9yIHVzYWdlIG9mIGZyYW1lLi5cbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5iaW5kKCk7XG5cbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBkZXN0aW5hdGlvbkZyYW1lIHx8IHRoaXMuZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlZmF1bHRGcmFtZTtcbiAgICB0aGlzLnNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgdGhpcy5zb3VyY2VGcmFtZSB8fCBkZXN0aW5hdGlvbkZyYW1lO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUsIHRoaXMuc291cmNlRnJhbWUgKTtcblxuICAgIGlmKHRoaXMudHJhbnNmb3JtKVxuICAgIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFwcGVuZCh0aGlzLnRyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5kZXN0aW5hdGlvbkZyYW1lICE9PSB0aGlzLnNvdXJjZUZyYW1lKVxuICAgIHtcbiAgICAgICAgZ2wuZW5hYmxlKGdsLlNDSVNTT1JfVEVTVCk7XG4gICAgICAgIGdsLnNjaXNzb3IodGhpcy5kZXN0aW5hdGlvbkZyYW1lLngsIHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGgqIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgIH1cblxuXG4gICAgLy8gVE9ETyAtIGRvZXMgbm90IG5lZWQgdG8gYmUgdXBkYXRlZCBhbGwgdGhlIHRpbWU/P1xuICAgIGdsLnZpZXdwb3J0KHRoaXMuZGVzdGluYXRpb25GcmFtZS54LHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuXG5cbn07XG5cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBwcm9qZWN0aW9uIG1hdHJpeCBiYXNlZCBvbiBhIHByb2plY3Rpb24gZnJhbWUgKHdoaWNoIGlzIGEgcmVjdGFuZ2xlKVxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jYWxjdWxhdGVQcm9qZWN0aW9uID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcblxuICAgIHNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHBtLmlkZW50aXR5KCk7XG5cbiAgICAvLyBUT0RPOiBtYWtlIGRlc3Qgc2NhbGUgc291cmNlXG4gICAgaWYgKCF0aGlzLnJvb3QpXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBzb3VyY2VGcmFtZS54ICogcG0uYTtcbiAgICAgICAgcG0udHkgPSAtMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IC0xIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBSZXNpemVzIHRoZSB0ZXh0dXJlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7TnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gaGVpZ2h0IHtOdW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgd2lkdGggPSB3aWR0aCB8IDA7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDtcblxuICAgIGlmICh0aGlzLnNpemUud2lkdGggPT09IHdpZHRoICYmIHRoaXMuc2l6ZS5oZWlnaHQgPT09IGhlaWdodCkgXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZGVmYXVsdEZyYW1lLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5kZWZhdWx0RnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5yZXNpemUod2lkdGggKiB0aGlzLnJlc29sdXRpb24sIGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCBwcm9qZWN0aW9uRnJhbWUgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHJlbmRlciB0YXJnZXQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFN0ZW5jaWxNYXNrU3RhY2soKVxue1xuXHQvKipcbiAgICAgKiBUaGUgYWN0dWFsIHN0YWNrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVE9ETyBAYWx2aW5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvdW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb3VudCA9IDA7XG59XG5cblN0ZW5jaWxNYXNrU3RhY2sucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RlbmNpbE1hc2tTdGFjaztcbm1vZHVsZS5leHBvcnRzID0gU3RlbmNpbE1hc2tTdGFjaztcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBNYXBzIGdsIGJsZW5kIGNvbWJpbmF0aW9ucyB0byBXZWJHTFxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcbiAgICBvYmplY3QgPSBvYmplY3QgfHwge307XG5cbiAgICAvL1RPRE8gLSBwcmVtdWx0aXBseSBhbHBoYSB3b3VsZCBiZSBkaWZmZXJlbnQuXG4gICAgLy9hZGQgYSBib29sZWFuIGZvciB0aGF0IVxuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdICAgICAgICA9IFtnbC5PTkUsICAgICAgIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLkRTVF9BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk1VTFRJUExZXSAgICAgID0gW2dsLkRTVF9DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gW2dsLlNSQ19BTFBIQSwgZ2wuT05FXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VdICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSFVFXSAgICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcblxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpO1xuIiwiQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbCwgb2JqZWN0KVxue1xuXHRvYmplY3Q9IG9iamVjdCB8fCB7fTtcblxuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlBPSU5UU10gICAgICAgICA9IGdsLlBPSU5UUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FU10gICAgICAgICAgPSBnbC5MSU5FUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FX0xPT1BdICAgICAgPSBnbC5MSU5FX0xPT1A7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9TVFJJUF0gICAgID0gZ2wuTElORV9TVFJJUDtcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5UUklBTkdMRVNdICAgICAgPSBnbC5UUklBTkdMRVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBdID0gZ2wuVFJJQU5HTEVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXSAgID0gZ2wuVFJJQU5HTEVfRkFOO1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGk7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIFNwcml0ZSBvYmplY3QgaXMgdGhlIGJhc2UgZm9yIGFsbCB0ZXh0dXJlZCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIHRvIHRoZSBzY3JlZW5cbiAqXG4gKiBBIHNwcml0ZSBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGFuIGltYWdlIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSBmb3IgdGhpcyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gU3ByaXRlKHRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW5jaG9yIHNldHMgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLDAgdGhpcyBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMC41LDAuNSBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyBjZW50ZXJlZFxuICAgICAqIFNldHRpbmcgdGhlIGFuY2hvciB0byAxLDEgd291bGQgbWVhbiB0aGUgdGV4dHVyZSdzIG9yaWdpbiBwb2ludCB3aWxsIGJlIHRoZSBib3R0b20gcmlnaHQgY29ybmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuYW5jaG9yID0gbmV3IG1hdGguUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgc3ByaXRlICh0aGlzIGlzIGluaXRpYWxseSBzZXQgYnkgdGhlIHRleHR1cmUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBIHZhbHVlIG9mIDB4RkZGRkZGIHdpbGwgcmVtb3ZlIGFueSB0aW50IGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaGFkZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBzcHJpdGUuIFNldCB0byBudWxsIHRvIHJlbW92ZSBhIGN1cnJlbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5BYnN0cmFjdEZpbHRlcnxQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBjYWNoZWQgdmFsdWUgb2YgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8vIGNhbGwgdGV4dHVyZSBzZXR0ZXJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG4gICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlXG4gICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy52ZXJ0ZXhEYXRhID0gbmV3IEZsb2F0MzJBcnJheSg4KTtcbn1cblxuLy8gY29uc3RydWN0b3JcblNwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuc2NhbGUueCkgKiB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBNYXRoLmFicyh0aGlzLnNjYWxlLnkpICogdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc2lnbiA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS55KSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gc2lnbiAqIHZhbHVlIC8gdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5TcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIHNvIGlmIF93aWR0aCBpcyAwIHRoZW4gd2lkdGggd2FzIG5vdCBzZXQuLlxuICAgIGlmICh0aGlzLl93aWR0aClcbiAgICB7XG4gICAgICAgIHRoaXMuc2NhbGUueCA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS54KSAqIHRoaXMuX3dpZHRoIC8gdGhpcy50ZXh0dXJlLmZyYW1lLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnkgPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgKiB0aGlzLl9oZWlnaHQgLyB0aGlzLnRleHR1cmUuZnJhbWUuaGVpZ2h0O1xuICAgIH1cbn07XG5cblNwcml0ZS5wcm90b3R5cGUuY2FjbHVsYXRlVmVydGljZXMgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICB3dCA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICBhID0gd3QuYSwgYiA9IHd0LmIsIGMgPSB3dC5jLCBkID0gd3QuZCwgdHggPSB3dC50eCwgdHkgPSB3dC50eSxcbiAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDEsXG4gICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG4gICAgICAgIFxuICAgIGlmICh0cmltKVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkIGFuZCBpcyBub3QgYSB0aWxpbmdzcHJpdGUgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgIHcxID0gdHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgaDEgPSB0cmltLnkgLSB0aGlzLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgIGgwID0gaDEgKyB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG4gICAgfVxuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzBdID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVsxXSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzJdID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVszXSA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs0XSA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbNV0gPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs2XSA9IGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbN10gPSBkICogaDAgKyBiICogdzEgKyB0eTtcblxuXG59XG5cbi8qKlxuKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMudGV4dHVyZURpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMudmVydGV4RGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICB9XG4gICAgXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBTcHJpdGUgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgc3ByaXRlXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG4gICAgICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudmVydGV4RGlydHkgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWluWCxcbiAgICAgICAgICAgIG1heFgsXG4gICAgICAgICAgICBtaW5ZLFxuICAgICAgICAgICAgbWF4WSxcbiAgICAgICAgICAgIHZlcnRleERhdGEgPSB0aGlzLnZlcnRleERhdGE7XG5cbiAgICAgICAgdmFyIHgxID0gdmVydGV4RGF0YVswXVxuICAgICAgICB2YXIgeTEgPSB2ZXJ0ZXhEYXRhWzFdXG5cbiAgICAgICAgdmFyIHgyID0gdmVydGV4RGF0YVsyXVxuICAgICAgICB2YXIgeTIgPSB2ZXJ0ZXhEYXRhWzNdXG5cbiAgICAgICAgdmFyIHgzID0gdmVydGV4RGF0YVs0XVxuICAgICAgICB2YXIgeTMgPSB2ZXJ0ZXhEYXRhWzVdXG5cbiAgICAgICAgdmFyIHg0ID0gdmVydGV4RGF0YVs2XVxuICAgICAgICB2YXIgeTQgPSB2ZXJ0ZXhEYXRhWzddXG5cbiAgICAgICAgbWluWCA9IHgxO1xuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MTtcbiAgICAgICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICAgICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICAgICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgICAgICBtYXhYID0geDE7XG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkxO1xuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIC8vIGNoZWNrIGZvciBjaGlsZHJlblxuICAgICAgICBpZih0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkQm91bmRzID0gdGhpcy5jb250YWluZXJHZXRCb3VuZHMoKTtcblxuICAgICAgICAgICAgdzAgPSBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgdzEgPSBjaGlsZEJvdW5kcy54ICsgY2hpbGRCb3VuZHMud2lkdGg7XG4gICAgICAgICAgICBoMCA9IGNoaWxkQm91bmRzLnk7XG4gICAgICAgICAgICBoMSA9IGNoaWxkQm91bmRzLnkgKyBjaGlsZEJvdW5kcy5oZWlnaHQ7XG5cbiAgICAgICAgICAgIG1pblggPSAobWluWCA8IHcwKSA/IG1pblggOiB3MDtcbiAgICAgICAgICAgIG1pblkgPSAobWluWSA8IGgwKSA/IG1pblkgOiBoMDtcblxuICAgICAgICAgICAgbWF4WCA9IChtYXhYID4gdzEpID8gbWF4WCA6IHcxO1xuICAgICAgICAgICAgbWF4WSA9IChtYXhZID4gaDEpID8gbWF4WSA6IGgxO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2JvdW5kcy54ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB0aGlzLl9ib3VuZHMueSA9IC10aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRoaXMuX2JvdW5kcy5oZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgcmV0dXJuIHRoaXMuX2JvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHNwcml0ZVxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5TcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy50ZXh0dXJlLmNyb3Aud2lkdGggPD0gMCB8fCB0aGlzLnRleHR1cmUuY3JvcC5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyAgSWdub3JlIG51bGwgc291cmNlc1xuICAgIGlmICh0aGlzLnRleHR1cmUudmFsaWQpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgICAgICB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgICAgICBkeCxcbiAgICAgICAgICAgIGR5LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ7XG5cbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgICAgICAvLyBJZiBzbW9vdGhpbmdFbmFibGVkIGlzIHN1cHBvcnRlZCBhbmQgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIHNtb290aGluZyBwcm9wZXJ0eSBmb3IgdGhpcyB0ZXh0dXJlXG4gICAgICAgIHZhciBzbW9vdGhpbmdFbmFibGVkID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5zY2FsZU1vZGUgPT09IENPTlNULlNDQUxFX01PREVTLkxJTkVBUjtcbiAgICAgICAgaWYgKHJlbmRlcmVyLnNtb290aFByb3BlcnR5ICYmIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldICE9PSBzbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0W3JlbmRlcmVyLnNtb290aFByb3BlcnR5XSA9IHNtb290aGluZ0VuYWJsZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgdGV4dHVyZSBpcyB0cmltbWVkIHdlIG9mZnNldCBieSB0aGUgdHJpbSB4L3ksIG90aGVyd2lzZSB3ZSB1c2UgdGhlIGZyYW1lIGRpbWVuc2lvbnNcblxuICAgICAgICBpZih0ZXh0dXJlLnJvdGF0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2lkdGggPSB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBkeCA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgXG4gICAgICAgICAgICBkeCArPSB3aWR0aDtcblxuICAgICAgICAgICAgd3QudHggPSBkeSAqIHd0LmEgKyBkeCAqIHd0LmMgKyB3dC50eDtcbiAgICAgICAgICAgIHd0LnR5ID0gZHkgKiB3dC5iICsgZHggKiB3dC5kICsgd3QudHk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gd3QuYTtcbiAgICAgICAgICAgIHd0LmEgID0gLXd0LmM7XG4gICAgICAgICAgICB3dC5jICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICB0ZW1wID0gd3QuYjtcbiAgICAgICAgICAgIHd0LmIgID0gLXd0LmQ7XG4gICAgICAgICAgICB3dC5kICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICAvLyB0aGUgYW5jaG9yIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCBhYm92ZSwgc28gbGV0cyBzZXQgaXQgdG8gemVyb1xuICAgICAgICAgICAgZHggPSAwO1xuICAgICAgICAgICAgZHkgPSAwO1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC53aWR0aDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0ZXh0dXJlLnRyaW0ud2lkdGggOiB0aGlzLmFuY2hvci54ICogLXRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRleHR1cmUudHJpbS5oZWlnaHQgOiB0aGlzLmFuY2hvci55ICogLXRleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfVxuXG5cblxuICAgICAgICAvLyBBbGxvdyBmb3IgcGl4ZWwgcm91bmRpbmdcbiAgICAgICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB3dC5hLFxuICAgICAgICAgICAgICAgIHd0LmIsXG4gICAgICAgICAgICAgICAgd3QuYyxcbiAgICAgICAgICAgICAgICB3dC5kLFxuICAgICAgICAgICAgICAgICh3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMCxcbiAgICAgICAgICAgICAgICAod3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uKSB8IDBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGR4ID0gZHggfCAwO1xuICAgICAgICAgICAgZHkgPSBkeSB8IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgd3QudHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHd0LnR5ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcblxuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIC8vIFRPRE8gY2xlYW4gdXAgY2FjaGluZyAtIGhvdyB0byBjbGVhbiB1cCB0aGUgY2FjaGVzP1xuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC54ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmNyb3AueSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeSAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHNwcml0ZSBhbmQgb3B0aW9uYWxseSBpdHMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBbZGVzdHJveVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgY3VycmVudCB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICovXG5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveVRleHR1cmUsIGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYW5jaG9yID0gbnVsbDtcblxuICAgIGlmIChkZXN0cm95VGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUuZGVzdHJveShkZXN0cm95QmFzZVRleHR1cmUpO1xuICAgIH1cblxuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn07XG5cbi8vIHNvbWUgaGVscGVyIGZ1bmN0aW9ucy4uXG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgY3Jvc3Mtb3JpZ2luIHBhcmFtZXRlclxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBzY2FsZSBtb2RlLCBzZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGZyYW1lSWRcbiAqL1xuU3ByaXRlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTcHJpdGUodGV4dHVyZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGJhc2VkIG9uIGFuIGltYWdlIHVybFxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZUlkIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblNwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFNwcml0ZShUZXh0dXJlLmZyb21JbWFnZShpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSk7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyJyksXG4gICAgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzJyksXG4gICAgZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIGdsQ29yZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFNwcml0ZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9TcHJpdGVSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKiBSZW5kZXJlciBkZWRpY2F0ZWQgdG8gZHJhd2luZyBhbmQgYmF0Y2hpbmcgc3ByaXRlcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZVJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIHZhbHVlcyBzZW50IGluIHRoZSB2ZXJ0ZXggYnVmZmVyLlxuICAgICAqIHBvc2l0aW9uWCwgcG9zaXRpb25ZLCBjb2xvclIsIGNvbG9yRywgY29sb3JCID0gNVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydFNpemUgPSA1O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIHZlcnRleCBpbmZvcm1hdGlvbiBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBpbWFnZXMgaW4gdGhlIFNwcml0ZUJhdGNoIGJlZm9yZSBpdCBmbHVzaGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IENPTlNULlNQUklURV9CQVRDSF9TSVpFOyAvLyAyMDAwIGlzIGEgbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIC8gZGVza3RvcFxuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBpbiBvdXIgYmF0Y2hcbiAgICB2YXIgbnVtVmVydHMgPSAodGhpcy5zaXplICogNCkgKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYmF0Y2gsIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgICB2YXIgbnVtSW5kaWNlcyA9IHRoaXMuc2l6ZSAqIDY7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgdmVydGV4IGRhdGEgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdGhlIHZlcnRleCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEFycmF5QnVmZmVyKG51bVZlcnRzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgRmxvYXQzMkFycmF5IGZvciBwb3NpdGlvbnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG4gICAgXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBVaW50MzJBcnJheSBmb3IgdXZzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciBjb2xvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXMgb2YgdGhlIGdlb21ldHJ5IChxdWFkcykgdG8gZHJhd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzKHRoaXMuc2l6ZSlcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICBcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIHRoaXMuZ3JvdXBzID0gW107XG4gICAgXG4gICAgLy9UT0RPIC0gMzAwIGlzIGEgYml0IG1hZ2ljLCBmaWd1cmUgb3V0IGEgbmljZXIgYW1vdW50IVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zaXplOyBpKyspIFxuICAgIHtcbiAgICAgICAgdGhpcy5ncm91cHNbaV0gPSB7dGV4dHVyZXM6W10sIHRleHR1cmVDb3VudDowLCBpZHM6W10sIHNpemU6MCwgc3RhcnQ6MCwgYmxlbmQ6MH07IFxuICAgIH07XG4gICAgXG4gICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG5cbiAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbnVsbDsgICAgXG59XG5cblxuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ByaXRlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZVJlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdzcHJpdGUnLCBTcHJpdGVSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMuTUFYX1RFWFRVRVMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpO1xuXG4gICAgdGhpcy5fc2hhZGVyID0gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIoZ2wsIHRoaXMuTUFYX1RFWFRVRVMpLy9uZXcgVGV4dHVyZVNoYWRlcihnbCk7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXI7XG5cbiAgICAvLyBjcmVhdGUgYSBjb3VwbGUgb2YgYnVmZmVyc1xuICAgIHRoaXMudmVydGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlcihnbCwgbnVsbCwgZ2wuRFlOQU1JQ19EUkFXKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyKGdsLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIC8vIGJ1aWxkIHRoZSB2YW8gb2JqZWN0IHRoYXQgd2lsbCByZW5kZXIuLlxuICAgIHRoaXMudmFvID0gbmV3IGdsQ29yZS5WZXJ0ZXhBcnJheU9iamVjdChnbCk7XG5cbiAgICB0aGlzLnZhby5hZGRJbmRleCh0aGlzLmluZGV4QnVmZmVyKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCBnbC5VTlNJR05FRF9TSE9SVCwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDIgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgZ2wuVU5TSUdORURfQllURSwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDMgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlSWQsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDQgKiA0KTtcblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IDk5OTk5O1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHJlbmRlciB3aGVuIHVzaW5nIHRoaXMgc3ByaXRlYmF0Y2hcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChzcHJpdGUpXG57XG4gICAgLy9UT0RPIHNldCBibGVuZCBtb2Rlcy4uXG4gICAgLy8gY2hlY2sgdGV4dHVyZS4uXG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID49IHRoaXMuc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICB9XG5cbiAgXG4gICAgLy8gZ2V0IHRoZSB1dnMgZm9yIHRoZSB0ZXh0dXJlXG4gICBcblxuICAgIC8vIGlmIHRoZSB1dnMgaGF2ZSBub3QgdXBkYXRlZCB0aGVuIG5vIHBvaW50IHJlbmRlcmluZyBqdXN0IHlldCFcbiAgICBpZiAoIXNwcml0ZS50ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgIC8vIHB1c2ggYSB0ZXh0dXJlLlxuICAgIC8vIGluY3JlbWVudCB0aGUgYmF0Y2hzaXplXG4gICAgdmFyIG5leHRUZXh0dXJlID0gIHNwcml0ZS50ZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIHZhciBjdXJyZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRHcm91cDtcbiAgICB2YXIgaTtcblxuICAgIGlmKHRoaXMuY3VycmVudFRleHR1cmUgIT09IG5leHRUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG5leHRUZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgaWYoIW5leHRUZXh0dXJlLl9lbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5fZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5faWQgPSB0aGlzLnRleHR1cmVDb3VudDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy50ZXh0dXJlQ291bnQgPT09IHRoaXMuTUFYX1RFWFRVRVMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50OyBpKyspIFxuICAgICAgICAgICAgICAgIHsgICAgIFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnNpemUgPSB0aGlzLmN1cnJlbnRJbmRleCAtIGN1cnJlbnRHcm91cC5zdGFydDtcbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC5zdGFydCA9IHRoaXMuY3VycmVudEluZGV4O1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCsrXSA9IG5leHRUZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcbiAgICB9XG5cbiAgICAvLyBUT0RPIHRyaW0/P1xuICAgIHZhciBpbmRleCA9IHRoaXMuY3VycmVudEluZGV4ICogdGhpcy52ZXJ0Qnl0ZVNpemU7XG5cbiAgICB0aGlzLmN1cnJlbnRJbmRleCsrO1xuXG4gICAgLy8gdXBsb2FkIHRoZSBzcHJpdGUgZWxlbWV0bnMuLi5cbiAgICAvLyB0aGV5IGhhdmUgYWxsIHJlYWR5IGJlZW4gY2FsY3VsYXRlZCBzbyB3ZSBqdXN0IG5lZWQgdG8gcHVzaCB0aGVtIGludG8gdGhlIGJ1ZmZlci5cbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG4gICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMucG9zaXRpb25zO1xuICAgIHZhciB2ZXJ0ZXhEYXRhID0gc3ByaXRlLnZlcnRleERhdGFcbiAgICB2YXIgdGludCA9IChzcHJpdGUudGludCA+PiAxNikgKyAoc3ByaXRlLnRpbnQgJiAweGZmMDApICsgKChzcHJpdGUudGludCAmIDB4ZmYpIDw8IDE2KSArIChzcHJpdGUud29ybGRBbHBoYSAqIDI1NSA8PCAyNCk7XG4gICAgdmFyIHV2cyA9IHNwcml0ZS50ZXh0dXJlLl91dnMudXZzX3VpbnQzMjtcbiAgICAvL3h5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVswXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzFdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzBdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkOyBcbiAgICBcbiAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMl07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVszXTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1sxXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNF07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs1XTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1syXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs2XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzddO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzNdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb250ZW50IGFuZCBlbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPT09IDApcmV0dXJuO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gdGhpcy5jdXJyZW50R3JvdXAuc3RhcnQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgeyAgICAgXG4gICAgICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVzW2ldLl9lbmFibGVkID0gZmFsc2U7XG4gICAgfTtcbiAgIFxuICAgIC8vIGRvIHNvbWUgc21hcnQgYXJyYXkgc3R1ZmYuLlxuICAgIC8vIGRvdWJsZSBzaXplIHNvIHdlIGRvbnQgYWx3YXkgc3ViYXJyYXkgdGhlIGVsZW1lbnRzLi5cbiAgICAvLyB1cGxvYWQgdGhlIHZlcnRzIHRvIHRoZSBidWZmZXJcbiAgICBpZiAodGhpcy5jdXJyZW50QmF0Y2hTaXplID4gKCB0aGlzLnNpemUgKiAwLjUgKSApXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlci51cGxvYWQodGhpcy52ZXJ0aWNlcywgMCwgdHJ1ZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIG8gayAuLiBzdWIgYXJyYXkgaXMgU0xPVz4/XG4gICAgICAgIHZhciB2aWV3ID0gdGhpcy5wb3NpdGlvbnMuc3ViYXJyYXkoMCwgdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZSk7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh2aWV3LCAwLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBiaW5kIHNoYWRlci4uXG4gICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHRoaXMuX3NoYWRlcik7XG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggMCApO1xuXG4gICAgLy8vIHJlbmRlciB0aGUgZ3JvdXBzLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5ncm91cENvdW50OyBpKyspIHtcbiAgICAgICAgXG4gICAgICAgIHZhciBncm91cCA9IHRoaXMuZ3JvdXBzW2ldO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ3JvdXAudGV4dHVyZUNvdW50OyBqKyspIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFRleHR1cmUoZ3JvdXAudGV4dHVyZXNbal0sIGopO1xuICAgICAgICB9O1xuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGdyb3VwLnNpemUgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgZ3JvdXAuc3RhcnQgKiA2ICogMik7XG4gICAgfTtcblxuICAgIC8vIHJlc2V0IGVsZW1lbnRzIGZvciB0aGUgbmV4dCBmbHVzaFxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cENvdW50ID0gMDtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcbiAgICB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgc3ByaXRlIGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZhby5iaW5kKCk7XG59O1xuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xuICAgIHRoaXMudmFvLnVuYmluZCgpO1xufTtcbi8qKlxuICogRGVzdHJveXMgdGhlIFNwcml0ZUJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMudmVydGljZXMgPSBudWxsO1xuICAgIHRoaXMucG9zaXRpb25zID0gbnVsbDtcbiAgICB0aGlzLmNvbG9ycyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMudmVydGV4QnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuc3ByaXRlcyA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuXG5mdW5jdGlvbiBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgbWF4VGV4dHVyZXMpXG57XG4gICAgdmFyIHZlcnRleFNyYyA9IFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcbmF0dHJpYnV0ZSBmbG9hdCBhVGV4dHVyZUlkO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyBmbG9hdCB2VGV4dHVyZUlkO1xcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2VGV4dHVyZUlkID0gYVRleHR1cmVJZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cIjtcbiAgICB2YXIgZnJhZ21lbnRTcmMgPSAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxuJyArIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKSArIFwiXFxuXFxuXCIgKyBmcmFnVGVtcGxhdGVcblxuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMucmVwbGFjZSgvXFwlXFwlL2dpLCAnMTYnKTtcblxuICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXG4gICAgdmFyIHNhbXBsZVZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkrKykge1xuICAgICAgICBzYW1wbGVWYWx1ZXNbaV0gPSBpO1xuICAgIH07XG5cbiAgICBzaGFkZXIuYmluZCgpO1xuICAgIHNoYWRlci51bmlmb3Jtcy51U2FtcGxlcnMgPSBzYW1wbGVWYWx1ZXM7XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVNhbXBsZVNyYyhtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgc3JjID0gJ3ZlYzQgZ2V0U2FtcGxlRnJvbUFycmF5KHNhbXBsZXIyRCB0ZXh0dXJlc1slJV0sIGludCBuZHgsIHZlYzIgdXYpIHtcXG5cXG52ZWM0IGNvbG9yOydcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSBcbiAgICB7XG4gICAgICAgIGlmKGkgPiAwKXNyYyArPSAnXFxuZWxzZSAnO1xuICAgICAgICBpZihpIDwgbWF4VGV4dHVyZXMtMSlzcmMgKz0gJ2lmKG5keCA9PSAnICsgaSArICcpJztcbiAgICAgICAgc3JjICs9ICdcXG57JztcbiAgICAgICAgc3JjICs9ICdcXG5cXHRjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlc1snK2krJ10sIHV2KTsnO1xuICAgICAgICBzcmMgKz0gJ1xcbn0nO1xuICAgIH07XG5cbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAncmV0dXJuIGNvbG9yOyc7XG4gICAgc3JjICs9ICdcXG59JztcblxuICAgIHJldHVybiBzcmM7XG59XG5cbnZhciBmcmFnVGVtcGxhdGUgPSBbXG5cbiAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuICAgICd2YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7JyxcbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJzWyUlXTsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnZ2xfRnJhZ0NvbG9yID0gZ2V0U2FtcGxlRnJvbUFycmF5KHVTYW1wbGVycywgaW50KHZUZXh0dXJlSWQpLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvcjsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcjtcbiIsInZhciBTcHJpdGUgPSByZXF1aXJlKCcuLi9zcHJpdGVzL1Nwcml0ZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgVGV4dCBPYmplY3Qgd2lsbCBjcmVhdGUgYSBsaW5lIG9yIG11bHRpcGxlIGxpbmVzIG9mIHRleHQuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJyBpbiB5b3VyIHRleHQgc3RyaW5nLFxuICogb3IgYWRkIGEgd29yZFdyYXAgcHJvcGVydHkgc2V0IHRvIHRydWUgYW5kIGFuZCB3b3JkV3JhcFdpZHRoIHByb3BlcnR5IHdpdGggYSB2YWx1ZSBpbiB0aGUgc3R5bGUgb2JqZWN0LlxuICpcbiAqIEEgVGV4dCBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGEgc3RyaW5nIGFuZCBhIHN0eWxlIG9iamVjdFxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dCA9IG5ldyBQSVhJLlRleHQoJ1RoaXMgaXMgYSBwaXhpIHRleHQnLHtmb250IDogJzI0cHggQXJpYWwnLCBmaWxsIDogMHhmZjEwMTAsIGFsaWduIDogJ2NlbnRlcid9KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBbc3R5bGVdIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnRdIHtzdHJpbmd9IGRlZmF1bHQgJ2JvbGQgMjBweCBBcmlhbCcgVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gKiBAcGFyYW0gW3N0eWxlLmZpbGw9J2JsYWNrJ10ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdCBzaW5nbGUgbGluZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZV0ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBzdHJva2UgZS5nICdibHVlJywgJyNGQ0ZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZVRoaWNrbmVzcz0wXSB7bnVtYmVyfSBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgc3Ryb2tlLiBEZWZhdWx0IGlzIDAgKG5vIHN0cm9rZSlcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXAsIGl0IG5lZWRzIHdvcmRXcmFwIHRvIGJlIHNldCB0byB0cnVlXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvdz1mYWxzZV0ge2Jvb2xlYW59IFNldCBhIGRyb3Agc2hhZG93IGZvciB0aGUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93QW5nbGU9TWF0aC5QSS80XSB7bnVtYmVyfSBTZXQgYSBhbmdsZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAqIEBwYXJhbSBbc3R5bGUucGFkZGluZz0wXSB7bnVtYmVyfSBPY2Nhc2lvbmFsbHkgc29tZSBmb250cyBhcmUgY3JvcHBlZCBvbiB0b3Agb3IgYm90dG9tLiBBZGRpbmcgc29tZSBwYWRkaW5nIHdpbGxcbiAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVKb2luPSdtaXRlciddIHtzdHJpbmd9IFRoZSBsaW5lSm9pbiBwcm9wZXJ0eSBzZXRzIHRoZSB0eXBlIG9mIGNvcm5lciBjcmVhdGVkLCBpdCBjYW4gcmVzb2x2ZVxuICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAqICAgICAgb3IgaW5jcmVhc2UgdGhlIHNwaWtpbmVzcyBvZiByZW5kZXJlZCB0ZXh0LlxuICovXG5mdW5jdGlvbiBUZXh0KHRleHQsIHN0eWxlLCByZXNvbHV0aW9uKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgZWxlbWVudCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gdG9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGhcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIGNhbnZhcy5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXModGhpcy5jYW52YXMpO1xuICAgIHRleHR1cmUudHJpbSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuICAgIFNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3ByaXRlLnByb3RvdHlwZSk7XG5UZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHQ7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHQ7XG5cblRleHQuZm9udFByb3BlcnRpZXNDYWNoZSA9IHt9O1xuVGV4dC5mb250UHJvcGVydGllc0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuVGV4dC5mb250UHJvcGVydGllc0NvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHQucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueCAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dCwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc2NhbGUueSAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlIC8gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBzdHlsZSBvZiB0aGUgdGV4dFxuICAgICAqXG4gICAgICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmZvbnQ9J2JvbGQgMjBwdCBBcmlhbCddIHtzdHJpbmd9IFRoZSBzdHlsZSBhbmQgc2l6ZSBvZiB0aGUgZm9udFxuICAgICAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGVnICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnN0cm9rZT0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlZyAnYmx1ZScsICcjRkNGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICAgICAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcFdpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIGF0IHdoaWNoIHRleHQgd2lsbCB3cmFwXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSGVpZ2h0XSB7bnVtYmVyfSBUaGUgbGluZSBoZWlnaHQsIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgc3BhY2UgdGhhdCBhIGxldHRlciB1c2VzXG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfG51bWJlcn0gQSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgb24gdGhlIGRyb3BzaGFkb3cgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzZdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0JsdXI9MF0ge251bWJlcn0gU2V0IGEgc2hhZG93IGJsdXIgcmFkaXVzXG4gICAgICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICAgICAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLnRleHRCYXNlbGluZT0nYWxwaGFiZXRpYyddIHtzdHJpbmd9IFRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dCB0aGF0IGlzIHJlbmRlcmVkLlxuICAgICAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gICAgICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gICAgICogQHBhcmFtIFtzdHlsZS5taXRlckxpbWl0PTEwXSB7bnVtYmVyfSBUaGUgbWl0ZXIgbGltaXQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdtaXRlcicgbGluZUpvaW4gbW9kZS4gVGhpcyBjYW4gcmVkdWNlXG4gICAgICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICBzdHlsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdHlsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3R5bGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZmlsbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5maWxsID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5maWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5zdHJva2UgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5zdHJva2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmRyb3BTaGFkb3dDb2xvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlLmZvbnQgPSBzdHlsZS5mb250IHx8ICdib2xkIDIwcHQgQXJpYWwnO1xuICAgICAgICAgICAgc3R5bGUuZmlsbCA9IHN0eWxlLmZpbGwgfHwgJ2JsYWNrJztcbiAgICAgICAgICAgIHN0eWxlLmFsaWduID0gc3R5bGUuYWxpZ24gfHwgJ2xlZnQnO1xuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gc3R5bGUuc3Ryb2tlIHx8ICdibGFjayc7IC8vcHJvdmlkZSBhIGRlZmF1bHQsIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2lzc3Vlcy8xMzZcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZVRoaWNrbmVzcyA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyB8fCAwO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXAgPSBzdHlsZS53b3JkV3JhcCB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLndvcmRXcmFwV2lkdGggPSBzdHlsZS53b3JkV3JhcFdpZHRoIHx8IDEwMDtcblxuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvdyA9IHN0eWxlLmRyb3BTaGFkb3cgfHwgZmFsc2U7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3IgfHwgJyMwMDAwMDAnO1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0FuZ2xlID0gc3R5bGUuZHJvcFNoYWRvd0FuZ2xlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93QW5nbGUgOiBNYXRoLlBJIC8gNjtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSA9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlIDogNTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXIgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dCbHVyIDogMDsgLy9zaGFkb3dCbHVyIGlzICcwJyBieSBkZWZhdWx0IGFjY29yZGluZyB0byBIVE1MXG5cbiAgICAgICAgICAgIHN0eWxlLnBhZGRpbmcgPSBzdHlsZS5wYWRkaW5nIHx8IDA7XG5cbiAgICAgICAgICAgIHN0eWxlLnRleHRCYXNlbGluZSA9IHN0eWxlLnRleHRCYXNlbGluZSB8fCAnYWxwaGFiZXRpYyc7XG5cbiAgICAgICAgICAgIHN0eWxlLmxpbmVKb2luID0gc3R5bGUubGluZUpvaW4gfHwgJ21pdGVyJztcbiAgICAgICAgICAgIHN0eWxlLm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0IHx8IDEwO1xuXG4gICAgICAgICAgICB0aGlzLl9zdHlsZSA9IHN0eWxlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjb3B5IGZvciB0aGUgdGV4dCBvYmplY3QuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHRleHQpe1xuICAgICAgICAgICAgdGV4dCA9IHRleHQudG9TdHJpbmcoKSB8fCAnICc7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dCA9PT0gdGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdGV4dDtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHN0eWxlID0gdGhpcy5fc3R5bGU7XG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuXG4gICAgLy8gd29yZCB3cmFwXG4gICAgLy8gcHJlc2VydmUgb3JpZ2luYWwgdGV4dFxuICAgIHZhciBvdXRwdXRUZXh0ID0gc3R5bGUud29yZFdyYXAgPyB0aGlzLndvcmRXcmFwKHRoaXMuX3RleHQpIDogdGhpcy5fdGV4dDtcblxuICAgIC8vIHNwbGl0IHRleHQgaW50byBsaW5lc1xuICAgIHZhciBsaW5lcyA9IG91dHB1dFRleHQuc3BsaXQoLyg/OlxcclxcbnxcXHJ8XFxuKS8pO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgd2lkdGhcbiAgICB2YXIgbGluZVdpZHRocyA9IG5ldyBBcnJheShsaW5lcy5sZW5ndGgpO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBmb250UHJvcGVydGllcyA9IHRoaXMuZGV0ZXJtaW5lRm9udFByb3BlcnRpZXMoc3R5bGUuZm9udCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBsaW5lV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQobGluZXNbaV0pLndpZHRoO1xuICAgICAgICBsaW5lV2lkdGhzW2ldID0gbGluZVdpZHRoO1xuICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxpbmVXaWR0aCk7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gbWF4TGluZVdpZHRoICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgd2lkdGggKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gKCB3aWR0aCArIHRoaXMuY29udGV4dC5saW5lV2lkdGggKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIC8vIGNhbGN1bGF0ZSB0ZXh0IGhlaWdodFxuICAgIHZhciBsaW5lSGVpZ2h0ID0gdGhpcy5zdHlsZS5saW5lSGVpZ2h0IHx8IGZvbnRQcm9wZXJ0aWVzLmZvbnRTaXplICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuXG4gICAgdmFyIGhlaWdodCA9IGxpbmVIZWlnaHQgKiBsaW5lcy5sZW5ndGg7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBoZWlnaHQgKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9ICggaGVpZ2h0ICsgdGhpcy5fc3R5bGUucGFkZGluZyAqIDIgKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMuY29udGV4dC5zY2FsZSggdGhpcy5yZXNvbHV0aW9uLCB0aGlzLnJlc29sdXRpb24pO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIH1cblxuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxTdHlsZT1cIiNGRjAwMDBcIjtcbiAgICAvL3RoaXMuY29udGV4dC5maWxsUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIHRoaXMuY29udGV4dC5mb250ID0gc3R5bGUuZm9udDtcbiAgICB0aGlzLmNvbnRleHQuc3Ryb2tlU3R5bGUgPSBzdHlsZS5zdHJva2U7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcbiAgICB0aGlzLmNvbnRleHQudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lO1xuICAgIHRoaXMuY29udGV4dC5saW5lSm9pbiA9IHN0eWxlLmxpbmVKb2luO1xuICAgIHRoaXMuY29udGV4dC5taXRlckxpbWl0ID0gc3R5bGUubWl0ZXJMaW1pdDtcblxuICAgIHZhciBsaW5lUG9zaXRpb25YO1xuICAgIHZhciBsaW5lUG9zaXRpb25ZO1xuXG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBpZiAoc3R5bGUuZHJvcFNoYWRvd0JsdXIgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3I7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Qmx1ciA9IHN0eWxlLmRyb3BTaGFkb3dCbHVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4U2hhZG93T2Zmc2V0ID0gTWF0aC5jb3Moc3R5bGUuZHJvcFNoYWRvd0FuZ2xlKSAqIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICAgICAgdmFyIHlTaGFkb3dPZmZzZXQgPSBNYXRoLnNpbihzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogbGluZUhlaWdodCkgKyBmb250UHJvcGVydGllcy5hc2NlbnQ7XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblggKyB4U2hhZG93T2Zmc2V0LCBsaW5lUG9zaXRpb25ZICsgeVNoYWRvd09mZnNldCArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9zZXQgY2FudmFzIHRleHQgc3R5bGVzXG4gICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmZpbGw7XG5cbiAgICAvL2RyYXcgbGluZXMgbGluZSBieSBsaW5lXG4gICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICBpZiAoc3R5bGUuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHlsZS5zdHJva2UgJiYgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVUZXh0dXJlKCk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLnRyaW0ueCA9IDA7XG4gICAgdGV4dHVyZS50cmltLnkgPSAtdGhpcy5fc3R5bGUucGFkZGluZztcblxuICAgIHRleHR1cmUudHJpbS53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRleHR1cmUudHJpbS5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgLSB0aGlzLl9zdHlsZS5wYWRkaW5nKjI7XG5cbiAgICB0aGlzLl93aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuX2hlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZW1pdCgndXBkYXRlJywgIHRleHR1cmUuYmFzZVRleHR1cmUpO1xuXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKi9cblRleHQucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgLy90aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUucmVuZGVyV2ViR0wuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgIC8vICAgdGhpcy5yZXNvbHV0aW9uID0gMS8vcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGFzY2VudCwgZGVzY2VudCBhbmQgZm9udFNpemUgb2YgYSBnaXZlbiBmb250U3R5bGVcbiAqXG4gKiBAcGFyYW0gZm9udFN0eWxlIHtvYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5kZXRlcm1pbmVGb250UHJvcGVydGllcyA9IGZ1bmN0aW9uIChmb250U3R5bGUpXG57XG4gICAgdmFyIHByb3BlcnRpZXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXTtcblxuICAgIGlmICghcHJvcGVydGllcylcbiAgICB7XG4gICAgICAgIHByb3BlcnRpZXMgPSB7fTtcblxuICAgICAgICB2YXIgY2FudmFzID0gVGV4dC5mb250UHJvcGVydGllc0NhbnZhcztcbiAgICAgICAgdmFyIGNvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dDtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgdmFyIHdpZHRoID0gTWF0aC5jZWlsKGNvbnRleHQubWVhc3VyZVRleHQoJ3xNw4lxJykud2lkdGgpO1xuICAgICAgICB2YXIgYmFzZWxpbmUgPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnTScpLndpZHRoKTtcbiAgICAgICAgdmFyIGhlaWdodCA9IDIgKiBiYXNlbGluZTtcblxuICAgICAgICBiYXNlbGluZSA9IGJhc2VsaW5lICogMS40IHwgMDtcblxuICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjZjAwJztcbiAgICAgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgY29udGV4dC50ZXh0QmFzZWxpbmUgPSAnYWxwaGFiZXRpYyc7XG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMwMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxUZXh0KCd8TcOJcScsIDAsIGJhc2VsaW5lKTtcblxuICAgICAgICB2YXIgaW1hZ2VkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCkuZGF0YTtcbiAgICAgICAgdmFyIHBpeGVscyA9IGltYWdlZGF0YS5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lID0gd2lkdGggKiA0O1xuXG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIHZhciBpZHggPSAwO1xuICAgICAgICB2YXIgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGFzY2VudC4gc2NhbiBmcm9tIHRvcCB0byBib3R0b20gdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGJhc2VsaW5lOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggKz0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuYXNjZW50ID0gYmFzZWxpbmUgLSBpO1xuXG4gICAgICAgIGlkeCA9IHBpeGVscyAtIGxpbmU7XG4gICAgICAgIHN0b3AgPSBmYWxzZTtcblxuICAgICAgICAvLyBkZXNjZW50LiBzY2FuIGZyb20gYm90dG9tIHRvIHRvcCB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSBoZWlnaHQ7IGkgPiBiYXNlbGluZTsgaS0tKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGluZTsgaiArPSA0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0b3ApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWR4IC09IGxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLmRlc2NlbnQgPSBpIC0gYmFzZWxpbmU7XG4gICAgICAgIHByb3BlcnRpZXMuZm9udFNpemUgPSBwcm9wZXJ0aWVzLmFzY2VudCArIHByb3BlcnRpZXMuZGVzY2VudDtcblxuICAgICAgICBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXSA9IHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgbmV3bGluZXMgdG8gYSBzdHJpbmcgdG8gaGF2ZSBpdCBvcHRpbWFsbHkgZml0IGludG8gdGhlIGhvcml6b250YWxcbiAqIGJvdW5kcyBzZXQgYnkgdGhlIFRleHQgb2JqZWN0J3Mgd29yZFdyYXBXaWR0aCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUud29yZFdyYXAgPSBmdW5jdGlvbiAodGV4dClcbntcbiAgICAvLyBHcmVlZHkgd3JhcHBpbmcgYWxnb3JpdGhtIHRoYXQgd2lsbCB3cmFwIHdvcmRzIGFzIHRoZSBsaW5lIGdyb3dzIGxvbmdlclxuICAgIC8vIHRoYW4gaXRzIGhvcml6b250YWwgYm91bmRzLlxuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgICB2YXIgd29yZFdyYXBXaWR0aCA9IHRoaXMuX3N0eWxlLndvcmRXcmFwV2lkdGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcGFjZUxlZnQgPSB3b3JkV3JhcFdpZHRoO1xuICAgICAgICB2YXIgd29yZHMgPSBsaW5lc1tpXS5zcGxpdCgnICcpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdvcmRzLmxlbmd0aDsgaisrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgd29yZFdpZHRoID0gdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KHdvcmRzW2pdKS53aWR0aDtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGhXaXRoU3BhY2UgPSB3b3JkV2lkdGggKyB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQoJyAnKS53aWR0aDtcbiAgICAgICAgICAgIGlmIChqID09PSAwIHx8IHdvcmRXaWR0aFdpdGhTcGFjZSA+IHNwYWNlTGVmdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHByaW50aW5nIHRoZSBuZXdsaW5lIGlmIGl0J3MgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxpbmUgdGhhdCBpc1xuICAgICAgICAgICAgICAgIC8vIGdyZWF0ZXIgdGhhbiB0aGUgd29yZCB3cmFwIHdpZHRoLlxuICAgICAgICAgICAgICAgIGlmIChqID4gMClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdvcmRzW2pdO1xuICAgICAgICAgICAgICAgIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGggLSB3b3JkV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0IC09IHdvcmRXaWR0aFdpdGhTcGFjZTtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyAnICsgd29yZHNbal07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaSA8IGxpbmVzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBUZXh0IGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIFRleHRcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIHJldHVybiBTcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcy5jYWxsKHRoaXMsIG1hdHJpeCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dCBvYmplY3QuXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9dHJ1ZV0ge2Jvb2xlYW59IHdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZVRleHR1cmUpXG57XG4gICAgLy8gbWFrZSBzdXJlIHRvIHJlc2V0IHRoZSB0aGUgY29udGV4dCBhbmQgY2FudmFzLi4gZG9udCB3YW50IHRoaXMgaGFuZ2luZyBhcm91bmQgaW4gbWVtb3J5IVxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xuXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG59O1xuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9GaWx0ZXJNYW5hZ2VyJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgdGVtcFJlY3QgPSBuZXcgbWF0aC5SZWN0YW5nbGUoKTtcblxuLyoqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBCYXNlUmVuZGVyVGV4dHVyZSBzaG91bGQgYmUgcHJlbG9hZGVkXG4gKiBvdGhlcndpc2UgYmxhY2sgcmVjdGFuZ2xlcyB3aWxsIGJlIGRyYXduIGluc3RlYWQuXG4gKlxuICogQSBCYXNlUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIEJhc2VyZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIDgwMCwgNjAwKTtcbiAqIHZhciBzcHJpdGUgPSBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJzcGluT2JqXzAxLnBuZ1wiKTtcbiAqXG4gKiBzcHJpdGUucG9zaXRpb24ueCA9IDgwMC8yO1xuICogc3ByaXRlLnBvc2l0aW9uLnkgPSA2MDAvMjtcbiAqIHNwcml0ZS5hbmNob3IueCA9IDAuNTtcbiAqIHNwcml0ZS5hbmNob3IueSA9IDAuNTtcbiAqXG4gKiBCYXNlcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgQmFzZXJlbmRlclRleHR1cmVcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgZm9yIHRoaXMgQmFzZVJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgaWYgKCFyZW5kZXJlcilcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNyZWF0ZSBCYXNlUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgbnVsbCwgc2NhbGVNb2RlKTtcbiAgIFxuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAxMDA7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OOztcbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIERyYXcvcmVuZGVyIHRoZSBnaXZlbiBEaXNwbGF5T2JqZWN0IG9udG8gdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheU9iamVjdCBhbmQgZGVzY2VuZGVudHMgYXJlIHRyYW5zZm9ybWVkIGR1cmluZyB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBJZiBgdXBkYXRlVHJhbnNmb3JtYCBpcyB0cnVlIHRoZW4gdGhlIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkIGJlZm9yZSB0aGVcbiAgICAgKiBtZXRob2QgcmV0dXJucy4gT3RoZXJ3aXNlIGl0IGlzIHVwIHRvIHRoZSBjYWxsaW5nIGNvZGUgdG8gY29ycmVjdGx5IHVzZSBvciByZXNldFxuICAgICAqIHRoZSB0cmFuc2Zvcm1lZCBkaXNwbGF5IG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgaXMgYWx3YXlzIHJlbmRlcmVkIHdpdGggYSB3b3JsZEFscGhhIHZhbHVlIG9mIDEuXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAgICAgKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBPcHRpb25hbCBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIGRpc3BsYXkgb2JqZWN0IGJlZm9yZSByZW5kZXJpbmcuXG4gICAgICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICAgICAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gICAgICogIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkLiBOb3QgcmVzdG9yaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBhIGxpdHRsZSBmYXN0ZXIuXG4gICAgICovXG4gICAgdGhpcy5yZW5kZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgQmFzZVJlbmRlclRleHR1cmUgdXNlcy4gQSBCYXNlUmVuZGVyVGV4dHVyZSBjYW4gb25seSBiZWxvbmcgdG8gb25lIHJlbmRlcmVyIGF0IHRoZSBtb21lbnQgaWYgaXRzIHdlYkdMLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgUmVuZGVyVGFyZ2V0KGdsLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5zY2FsZU1vZGUsIHRoaXMucmVzb2x1dGlvbik7Ly8sIHRoaXMudGhpcy5zY2FsZU1vZGUpO1xuICAgICAgICB0aGlzLl9nbFRleHR1cmVzW2dsLmlkXSA9ICB0aGlzLnRleHR1cmVCdWZmZXIudGV4dHVyZTtcbiAgICAgICAgXG4gICAgICAgIC8vVE9ETyByZWZhY3RvciBmaWx0ZXIgbWFuYWdlci4uIGFzIHJlYWxseSBpdHMgbm8gbG9uZ2VyIGEgbWFuYWdlciBpZiB3ZSB1c2UgaXQgaGVyZS4uXG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJXZWJHTDtcblxuICAgICAgICAvLyB0aGUgY3JlYXRpb24gb2YgYSBmaWx0ZXIgbWFuYWdlciB1bmJpbmRzIHRoZSBidWZmZXJzLi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbiAgICAgICAgaWYodGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0KXRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJDYW52YXM7XG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIodGhpcy53aWR0aCogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbn1cblxuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlVGV4dHVyZS5wcm90b3R5cGUpO1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzZVJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VSZW5kZXJUZXh0dXJlO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGlmICh3aWR0aCA9PT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT09IHRoaXMuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5maWx0ZXJNYW5hZ2VyKVxuICAgIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLnJlbmRlcmVyLmdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcihmYWxzZSwgZGVzdGluYXRpb25GcmFtZSk7XG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gKHVwZGF0ZVRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSA/IHVwZGF0ZVRyYW5zZm9ybSA6IHRydWU7Ly8hdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnRyYW5zZm9ybSA9IG1hdHJpeDtcblxuICAgIC8vVE9ETyBub3QgYSBmYW4gdGhhdCB0aGlzIGlzIGhlcmUuLi4gaXQgd2lsbCBtb3ZlIVxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5hY3RpdmF0ZSgpO1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgaWYgKHVwZGF0ZVRyYW5zZm9ybSlcbiAgICB7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIG1hdHJpeCBvZiB0aGUgZGlzcGxhdHlPYmplY3QuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmlkZW50aXR5KCk7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgICAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRlbXBSZWN0LndpZHRoID0gZnJhbWUuaGVpZ2h0O1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IGZyYW1lLndpZHRoO1xuICAgXG4gICAgLy9UT0RPIHJlbmFtZSB0ZXh0dXJlQnVmZmVyIHRvIHJlbmRlclRhcmdldC4uXG4gICAgdmFyIHRlbXAgPSAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyID0gdGhpcy5maWx0ZXJNYW5hZ2VyO1xuICAgIFxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKGZyYW1lLCB0ZW1wUmVjdCk7XG4gICAgY29uc29sZS5sb2coZGlzcGxheU9iamVjdClcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgdGhpcy50ZXh0dXJlQnVmZmVyLCBjbGVhcik7XG5cbiAgIC8vIGNvbnNvbGUubG9nKFwiUkVOREVSSU5HIFwiKTtcbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0ZW1wO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXJdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChmcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAhIXVwZGF0ZVRyYW5zZm9ybTtcblxuICAgIHZhciB3dCA9IHRlbXBNYXRyaXg7XG5cbiAgICB3dC5pZGVudGl0eSgpO1xuXG4gICAgaWYgKG1hdHJpeClcbiAgICB7XG4gICAgICAgIHd0LmFwcGVuZChtYXRyaXgpO1xuICAgIH1cblxuXG4gICAgd3QudHggKz0gZnJhbWUueDtcbiAgICB3dC50eSArPSBmcmFtZS55O1xuXG4gICAgdmFyIGNhY2hlZFd0ID0gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybTtcbiAgICBcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gd3Q7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgdmFyIGksIGo7XG5cbiAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgXG4vLyAgICB0aGlzLnRleHR1cmVCdWZmZXIuXG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dDtcblxuICAgIHZhciByZWFsUmVzb2x1dGlvbiA9IHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHJlYWxSZXNvbHV0aW9uO1xuXG4gICAgaWYoZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9PT0gd3QpXG4gICAge1xuICAgICAgICAvLyBmaXhlcyBjYWNoZUFzQml0bWFwIEhhcHBlbmluZyBkdXJpbmcgdGhlIGFib3ZlLi5cbiAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IGNhY2hlZFd0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gZGVzdHJveUJhc2Uge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCB0cnVlKTtcblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICAvLyBkZXN0cm95IHRoZSBmaWx0ZXJtYW5hZ2VyLi5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEltYWdlID0gZnVuY3Rpb24gKGZyYW1lKVxue1xuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLnNyYyA9IHRoaXMuZ2V0QmFzZTY0KGZyYW1lKTtcbiAgICByZXR1cm4gaW1hZ2U7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIEJhc2VSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRCYXNlNjQgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRDYW52YXMoZnJhbWUpLnRvRGF0YVVSTCgpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB0byBpdCBhbmQgdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBBIENhbnZhcyBlbGVtZW50IHdpdGggdGhlIHRleHR1cmUgcmVuZGVyZWQgb24uXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgIFxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgQ2FudmFzQnVmZmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHRlbXBDYW52YXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0RhdGEuZGF0YS5zZXQod2ViR0xQaXhlbHMpO1xuXG4gICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGZyYW1lLndpZHRoID09PSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLndpZHRoICYmIFxuICAgICAgICAgICBmcmFtZS5oZWlnaHQgPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIoZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcbiAgICAgICAgICAgIHZhciBjYW52YXNEYXRhID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNvbnRleHQuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggICogcmVzb2x1dGlvbiwgZnJhbWUueSAqIHJlc29sdXRpb24sIGZyYW1lLndpZHRoICogcmVzb2x1dGlvbiwgZnJhbWUuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0ZW1wQ2FudmFzLmNhbnZhcztcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKCBmcmFtZSApXG57XG4gICAgaWYoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgZnJhbWUud2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS53aWR0aDtcbiAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IGZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YShmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoZnJhbWUsIHgsIHkpXG57XG4gICAgdGVtcFJlY3QueCA9IHg7XG4gICAgdGVtcFJlY3QueSA9IHk7XG4gICAgdGVtcFJlY3Qud2lkdGggPSAxIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZihmcmFtZSlcbiAgICB7XG4gICAgICAgIHRlbXBSZWN0LnggKz0gZnJhbWUueDtcbiAgICAgICAgdGVtcFJlY3QueSArPSBmcmFtZS55O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFBpeGVscyh0ZW1wUmVjdCk7XG59O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZS4gQWxsIHRleHR1cmVzIGhhdmUgYSBiYXNlIHRleHR1cmUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBmb3IgZGV2aWNlcyB3aXRoIGRpZmZlcmVudCBwaXhlbCByYXRpb3NcbiAqL1xuZnVuY3Rpb24gQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnVpZCA9IHV0aWxzLnVpZCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgYmFzZSB0ZXh0dXJlIHNldCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAxMDA7XG5cbiAgICAvLyBUT0RPIGRvY3NcbiAgICAvLyB1c2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgZGltZW5zaW9ucyBvZiB0aGUgc291cmNlXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIHdpZHRoIG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsV2lkdGggPSAxMDA7XG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIGhlaWdodCBvZiB0aGUgc291cmNlIG9mIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucmVhbEhlaWdodCA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlIHRvIGFwcGx5IHdoZW4gc2NhbGluZyB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlNDQUxFX01PREVTLkxJTkVBUlxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSBvbmNlIHRoZSBiYXNlIHRleHR1cmUgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG5ldmVyIHRydWUgaWYgdGhlIHVuZGVybHlpbmcgc291cmNlIGZhaWxzIHRvIGxvYWQgb3IgaGFzIG5vIHRleHR1cmUgZGF0YS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIGlmIHRoZSBzb3VyY2UgaXMgY3VycmVudGx5IGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBJZiBhbiBJbWFnZSBzb3VyY2UgaXMgbG9hZGluZyB0aGUgJ2xvYWRlZCcgb3IgJ2Vycm9yJyBldmVudCB3aWxsIGJlXG4gICAgICogZGlzcGF0Y2hlZCB3aGVuIHRoZSBvcGVyYXRpb24gZW5kcy4gQW4gdW5kZXJ5bGluZyBzb3VyY2UgdGhhdCBpc1xuICAgICAqIGltbWVkaWF0ZWx5LWF2YWlsYWJsZSBieXBhc3NlcyBsb2FkaW5nIGVudGlyZWx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGltYWdlIHNvdXJjZSB0aGF0IGlzIHVzZWQgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogVE9ETzogTWFrZSB0aGlzIGEgc2V0dGVyIHRoYXQgY2FsbHMgbG9hZFNvdXJjZSgpO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SW1hZ2V8Q2FudmFzfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuc291cmNlID0gbnVsbDsgLy8gc2V0IGluIGxvYWRTb3VyY2UsIGlmIGF0IGFsbFxuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgaWYgUkdCIGNoYW5uZWxzIHNob3VsZCBiZSBwcmUtbXVsdGlwbGllZCBieSBBbHBoYSAgKFdlYkdMIG9ubHkpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgb3Igbm90IHRoZSB0ZXh0dXJlIGlzIGEgcG93ZXIgb2YgdHdvLCB0cnkgdG8gdXNlIHBvd2VyIG9mIHR3byB0ZXh0dXJlcyBhcyBtdWNoIGFzIHlvdSBjYW5cbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSBmYWxzZTtcblxuICAgIC8vIHVzZWQgZm9yIHdlYkdMXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgYSBtaXBtYXAgb2YgdGhpcyB0ZXh0dXJlIG5lZWRzIHRvIGJlIGdlbmVyYXRlZC4gVGhpcyB2YWx1ZSBuZWVkcyB0byBiZSBzZXQgYmVmb3JlIHRoZSB0ZXh0dXJlIGlzIHVzZWRcbiAgICAgKiBBbHNvIHRoZSB0ZXh0dXJlIG11c3QgYmUgYSBwb3dlciBvZiB0d28gc2l6ZSB0byB3b3JrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubWlwbWFwID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBBIG1hcCBvZiByZW5kZXJlciBJRHMgdG8gd2ViZ2wgdGV4dHVyZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIFdlYkdMVGV4dHVyZT59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbFRleHR1cmVzID0ge307XG4gICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5faWQgPSAwO1xuICAgIFxuICAgIC8vIGlmIG5vIHNvdXJjZSBwYXNzZWQgZG9uJ3QgdHJ5IHRvIGxvYWRcbiAgICBpZiAoc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5sb2FkU291cmNlKHNvdXJjZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZpbmlzaGVzIGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZGVkXG4gICAgICogQG1lbWJlcm9mIFBJWEkuQmFzZVRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZhaWxzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG59XG5cbkJhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdGV4dHVyZSBvbiBhbGwgdGhlIHdlYmdsIHJlbmRlcmVycywgdGhpcyBhbHNvIGFzc3VtZXMgdGhlIHNyYyBoYXMgY2hhbmdlZC5cbiAqXG4gKiBAZmlyZXMgdXBkYXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVhbFdpZHRoID0gdGhpcy5zb3VyY2UubmF0dXJhbFdpZHRoIHx8IHRoaXMuc291cmNlLndpZHRoO1xuICAgIHRoaXMucmVhbEhlaWdodCA9IHRoaXMuc291cmNlLm5hdHVyYWxIZWlnaHQgfHwgdGhpcy5zb3VyY2UuaGVpZ2h0O1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMucmVhbFdpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5yZWFsSGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSB1dGlscy5pc1Bvd2VyT2ZUd28odGhpcy5yZWFsV2lkdGgsIHRoaXMucmVhbEhlaWdodCk7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBMb2FkIGEgc291cmNlLlxuICpcbiAqIElmIHRoZSBzb3VyY2UgaXMgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSwgc3VjaCBhcyBhbiBpbWFnZSB0aGF0IG5lZWRzIHRvIGJlXG4gKiBkb3dubG9hZGVkLCB0aGVuIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmUgZGlzcGF0Y2hlZCBpbiB0aGUgZnV0dXJlXG4gKiBhbmQgYGhhc0xvYWRlZGAgd2lsbCByZW1haW4gZmFsc2UgYWZ0ZXIgdGhpcyBjYWxsLlxuICpcbiAqIFRoZSBsb2dpYyBzdGF0ZSBhZnRlciBjYWxsaW5nIGBsb2FkU291cmNlYCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IChlZy4gYGZyb21JbWFnZWAsIGBuZXcgQmFzZVRleHR1cmVgKSBpczpcbiAqXG4gKiAgICAgaWYgKHRleHR1cmUuaGFzTG9hZGVkKVxuIHtcbiAqICAgICAgICAvLyB0ZXh0dXJlIHJlYWR5IGZvciB1c2VcbiAqICAgICB9IGVsc2UgaWYgKHRleHR1cmUuaXNMb2FkaW5nKVxuIHtcbiAqICAgICAgICAvLyBsaXN0ZW4gdG8gJ2xvYWRlZCcgYW5kL29yICdlcnJvcicgZXZlbnRzIG9uIHRleHR1cmVcbiAqICAgICB9IGVsc2Uge1xuICogICAgICAgIC8vIG5vdCBsb2FkaW5nLCBub3QgZ29pbmcgdG8gbG9hZCBVTkxFU1MgdGhlIHNvdXJjZSBpcyByZWxvYWRlZFxuICogICAgICAgIC8vIChpdCBtYXkgc3RpbGwgbWFrZSBzZW5zZSB0byBsaXN0ZW4gdG8gdGhlIGV2ZW50cylcbiAqICAgICB9XG4gKlxuICogQHByb3RlY3RlZFxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmxvYWRTb3VyY2UgPSBmdW5jdGlvbiAoc291cmNlKVxue1xuICAgIHZhciB3YXNMb2FkaW5nID0gdGhpcy5pc0xvYWRpbmc7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKHdhc0xvYWRpbmcgJiYgdGhpcy5zb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmVycm9yID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcblxuICAgIC8vIEFwcGx5IHNvdXJjZSBpZiBsb2FkZWQuIE90aGVyd2lzZSBzZXR1cCBhcHByb3ByaWF0ZSBsb2FkaW5nIG1vbml0b3JzLlxuICAgIGlmICgodGhpcy5zb3VyY2UuY29tcGxldGUgfHwgdGhpcy5zb3VyY2UuZ2V0Q29udGV4dCkgJiYgdGhpcy5zb3VyY2Uud2lkdGggJiYgdGhpcy5zb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFzb3VyY2UuZ2V0Q29udGV4dClcbiAgICB7XG5cbiAgICAgICAgLy8gSW1hZ2UgZmFpbCAvIG5vdCByZWFkeVxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgdmFyIHNjb3BlID0gdGhpcztcblxuICAgICAgICBzb3VyY2Uub25sb2FkID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgIHNjb3BlLmVtaXQoJ2xvYWRlZCcsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzb3VyY2Uub25lcnJvciA9IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXNjb3BlLmlzTG9hZGluZylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuZW1pdCgnZXJyb3InLCBzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUGVyIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI3RoZS1pbWctZWxlbWVudFxuICAgICAgICAvLyAgIFwiVGhlIHZhbHVlIG9mIGBjb21wbGV0ZWAgY2FuIHRodXMgY2hhbmdlIHdoaWxlIGEgc2NyaXB0IGlzIGV4ZWN1dGluZy5cIlxuICAgICAgICAvLyBTbyBjb21wbGV0ZSBuZWVkcyB0byBiZSByZS1jaGVja2VkIGFmdGVyIHRoZSBjYWxsYmFja3MgaGF2ZSBiZWVuIGFkZGVkLi5cbiAgICAgICAgLy8gTk9URTogY29tcGxldGUgd2lsbCBiZSB0cnVlIGlmIHRoZSBpbWFnZSBoYXMgbm8gc3JjIHNvIGJlc3QgdG8gY2hlY2sgaWYgdGhlIHNyYyBpcyBzZXQuXG4gICAgICAgIGlmIChzb3VyY2UuY29tcGxldGUgJiYgc291cmNlLnNyYylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gLi5hbmQgaWYgd2UncmUgY29tcGxldGUgbm93LCBubyBuZWVkIGZvciBjYWxsYmFja3NcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiBhbnkgcHJldmlvdXMgc3Vic2NyaWJlcnMgcG9zc2libGVcbiAgICAgICAgICAgICAgICBpZiAod2FzTG9hZGluZylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZCBpbnRlcm5hbGx5IHRvIHVwZGF0ZSB0aGUgd2lkdGgsIGhlaWdodCwgYW5kIHNvbWUgb3RoZXIgdHJhY2tpbmcgdmFycyBvbmNlXG4gKiBhIHNvdXJjZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuX3NvdXJjZUxvYWRlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgYmFzZSB0ZXh0dXJlXG4gKlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuaW1hZ2VVcmwpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcbiAgICAgICAgZGVsZXRlIHV0aWxzLlRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcblxuICAgICAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgICAgICBpZiAoIW5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZS5zcmMgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdGhpcy5zb3VyY2UuX3BpeGlJZF07XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsO1xuXG4gICAgdGhpcy5kaXNwb3NlKCk7XG59O1xuXG4vKipcbiAqIEZyZWVzIHRoZSB0ZXh0dXJlIGZyb20gV2ViR0wgbWVtb3J5IHdpdGhvdXQgZGVzdHJveWluZyB0aGlzIHRleHR1cmUgb2JqZWN0LlxuICogVGhpcyBtZWFucyB5b3UgY2FuIHN0aWxsIHVzZSB0aGUgdGV4dHVyZSBsYXRlciB3aGljaCB3aWxsIHVwbG9hZCBpdCB0byBHUFVcbiAqIG1lbW9yeSBhZ2Fpbi5cbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmVtaXQoJ2Rpc3Bvc2UnLCB0aGlzKTtcblxuICAgIC8vIHRoaXMgc2hvdWxkIG5vIGxvbmdlciBiZSBuZWVkZWQsIHRoZSByZW5kZXJlcnMgc2hvdWxkIGNsZWFudXAgYWxsIHRoZSBnbCB0ZXh0dXJlcy5cbiAgICAvLyB0aGlzLl9nbFRleHR1cmVzID0ge307XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHNvdXJjZSBpbWFnZSBvZiB0aGUgdGV4dHVyZS5cbiAqIFRoZSBvcmlnaW5hbCBzb3VyY2UgbXVzdCBiZSBhbiBJbWFnZSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBuZXdTcmMge3N0cmluZ30gdGhlIHBhdGggb2YgdGhlIGltYWdlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGVTb3VyY2VJbWFnZSA9IGZ1bmN0aW9uIChuZXdTcmMpXG57XG4gICAgdGhpcy5zb3VyY2Uuc3JjID0gbmV3U3JjO1xuXG4gICAgdGhpcy5sb2FkU291cmNlKHRoaXMuc291cmNlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGJhc2UgdGV4dHVyZSBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSBiYXNlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBjcmVhdGVkIGFuZCBsb2FkZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlVXJsIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gU2hvdWxkIHVzZSBhbm9ueW1vdXMgQ09SUz8gRGVmYXVsdHMgdG8gdHJ1ZSBpZiB0aGUgVVJMIGlzIG5vdCBhIGRhdGEtVVJJLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF07XG5cbiAgICBpZiAoY3Jvc3NvcmlnaW4gPT09IHVuZGVmaW5lZCAmJiBpbWFnZVVybC5pbmRleE9mKCdkYXRhOicpICE9PSAwKVxuICAgIHtcbiAgICAgICAgY3Jvc3NvcmlnaW4gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICAvLyBuZXcgSW1hZ2UoKSBicmVha3MgdGV4IGxvYWRpbmcgaW4gc29tZSB2ZXJzaW9ucyBvZiBDaHJvbWUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjM4MDcxXG4gICAgICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpOy8vZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgICAgIGlmIChjcm9zc29yaWdpbilcbiAgICAgICAge1xuICAgICAgICAgICAgaW1hZ2UuY3Jvc3NPcmlnaW4gPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGltYWdlLCBzY2FsZU1vZGUpO1xuICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IGltYWdlVXJsO1xuXG4gICAgICAgIGltYWdlLnNyYyA9IGltYWdlVXJsO1xuXG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gYmFzZVRleHR1cmU7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4gQDJ4IGF0IHRoZSBlbmQgb2YgdGhlIHVybCB3ZSBhcmUgZ29pbmcgdG8gYXNzdW1lIGl0cyBhIGhpZ2hyZXMgaW1hZ2VcbiAgICAgICAgYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHV0aWxzLmdldFJlc29sdXRpb25PZlVybChpbWFnZVVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIGlmICghY2FudmFzLl9waXhpSWQpXG4gICAge1xuICAgICAgICBjYW52YXMuX3BpeGlJZCA9ICdjYW52YXNfJyArIHV0aWxzLnVpZCgpO1xuICAgIH1cblxuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbY2FudmFzLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGNhbnZhcywgc2NhbGVNb2RlKTtcbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuIiwidmFyIEJhc2VSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbi8qKlxuICogQSBSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIFJlbmRlclRleHR1cmUgdGFrZXMgYSBzbmFwc2hvdCBvZiBhbnkgRGlzcGxheSBPYmplY3QgZ2l2ZW4gdG8gaXRzIHJlbmRlciBtZXRob2QuIFRoZSBwb3NpdGlvblxuICogYW5kIHJvdGF0aW9uIG9mIHRoZSBnaXZlbiBEaXNwbGF5IE9iamVjdHMgaXMgaWdub3JlZC4gRm9yIGV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDEwMjQsIDEwMjQsIHsgdmlldzogY2FudmFzLCByYXRpbzogMSB9KTtcbiAqIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKHNwcml0ZSk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgU3ByaXRlIGluIHRoaXMgY2FzZSB3aWxsIGJlIHJlbmRlcmVkIHRvIGEgcG9zaXRpb24gb2YgMCwwLiBUbyByZW5kZXIgdGhpcyBzcHJpdGUgYXQgaXRzIGFjdHVhbFxuICogcG9zaXRpb24gYSBDb250YWluZXIgc2hvdWxkIGJlIHVzZWQ6XG4gKlxuICogYGBganNcbiAqIHZhciBkb2MgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqXG4gKiBkb2MuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqXG4gKiByZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBSZW5kZXJUZXh0dXJlXG4gKiBAcGFyYW0gW3dpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtoZWlnaHQ9MTAwXSB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtzY2FsZU1vZGVdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIFtyZXNvbHV0aW9uPTFdIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICovXG5mdW5jdGlvbiBSZW5kZXJUZXh0dXJlKGJhc2VSZW5kZXJUZXh0dXJlLCBmcmFtZSlcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIFJlbmRlclRleHR1cmUsIHlvdSBtdXN0IHBhc3MgYSByZW5kZXJlciBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIG9iamVjdCB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtCYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICBUZXh0dXJlLmNhbGwodGhpcyxcbiAgICAgICAgYmFzZVJlbmRlclRleHR1cmUsXG4gICAgICAgIGZyYW1lIFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fdXBkYXRlVXZzKCk7XG59XG5cblJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlLnByb3RvdHlwZSk7XG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgUmVuZGVyVGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gdXBkYXRlQmFzZSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBiYXNlVGV4dHVyZS53aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBiZSByZXNpemVkIGFzIHdlbGw/XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB1cGRhdGVCYXNlKVxue1xuICAgXG4gICAgLy9UT0RPIC0gY291bGQgYmUgbm90IHJlcXVpcmVkLi5cbiAgICB0aGlzLnZhbGlkID0gKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTtcblxuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy5jcm9wLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jcm9wLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh1cGRhdGVCYXNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5yZXNpemUod2lkdGgsIGhlaWdodClcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLmNsZWFyKHRoaXMuZnJhbWUpXG4gICAgXG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5iYXNlVGV4dHVyZS5yZW5kZXIodGhpcy5mcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIHRoaXMgdGV4dHVyZS4gSXQgd29ya3MgYnkgY2FsbGluZyBSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0QmFzZTY0LmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0Q2FudmFzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRDYW52YXModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgdGhlIGVudGlyZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbHModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgYSBwaXhlbCB3aXRoaW4gdGhlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbCh0aGlzLmZyYW1lLCB4LCB5KTtcbn07XG5cblJlbmRlclRleHR1cmUuY3JlYXRlID0gZnVuY3Rpb24ocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICByZXR1cm4gbmV3IFJlbmRlclRleHR1cmUobmV3IEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pKTtcbn1cblxuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzID0gcmVxdWlyZSgnLi9UZXh0dXJlVXZzJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZSBvciBwYXJ0IG9mIGFuIGltYWdlLiBJdCBjYW5ub3QgYmUgYWRkZWRcbiAqIHRvIHRoZSBkaXNwbGF5IGxpc3QgZGlyZWN0bHkuIEluc3RlYWQgdXNlIGl0IGFzIHRoZSB0ZXh0dXJlIGZvciBhIFNwcml0ZS4gSWYgbm8gZnJhbWUgaXMgcHJvdmlkZWQgdGhlbiB0aGUgd2hvbGUgaW1hZ2UgaXMgdXNlZC5cbiAqXG4gKiBZb3UgY2FuIGRpcmVjdGx5IGNyZWF0ZSBhIHRleHR1cmUgZnJvbSBhbiBpbWFnZSBhbmQgdGhlbiByZXVzZSBpdCBtdWx0aXBsZSB0aW1lcyBsaWtlIHRoaXMgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIHZhciBzcHJpdGUxID0gbmV3IFBJWEkuU3ByaXRlKHRleHR1cmUpO1xuICogdmFyIHNwcml0ZTIgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gYmFzZVRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV9IFRoZSBiYXNlIHRleHR1cmUgc291cmNlIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZSBmcm9tXG4gKiBAcGFyYW0gW2ZyYW1lXSB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5nbGUgZnJhbWUgb2YgdGhlIHRleHR1cmUgdG8gc2hvd1xuICogQHBhcmFtIFtjcm9wXSB7UElYSS5SZWN0YW5nbGV9IFRoZSBhcmVhIG9mIG9yaWdpbmFsIHRleHR1cmVcbiAqIEBwYXJhbSBbdHJpbV0ge1BJWEkuUmVjdGFuZ2xlfSBUcmltbWVkIHRleHR1cmUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gW3JvdGF0ZV0ge2Jvb2xlYW59IGluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXMgKCB1c2VkIGJ5IHRleHR1cmUgcGFja2VyIClcbiAqL1xuZnVuY3Rpb24gVGV4dHVyZShiYXNlVGV4dHVyZSwgZnJhbWUsIGNyb3AsIHRyaW0sIHJvdGF0ZSlcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIERvZXMgdGhpcyBUZXh0dXJlIGhhdmUgYW55IGZyYW1lIGRhdGEgYXNzaWduZWQgdG8gaXQ/XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubm9GcmFtZSA9IGZhbHNlO1xuXG4gICAgaWYgKCFmcmFtZSlcbiAgICB7XG4gICAgICAgIHRoaXMubm9GcmFtZSA9IHRydWU7XG4gICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuICAgIH1cblxuICAgIGlmIChiYXNlVGV4dHVyZSBpbnN0YW5jZW9mIFRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmFzZVRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy5iYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdHJpbSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy50cmltID0gdHJpbTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgdGhlIHJlbmRlcmVyIGtub3cgaWYgdGhlIHRleHR1cmUgaXMgdmFsaWQuIElmIGl0J3Mgbm90IHRoZW4gaXQgY2Fubm90IGJlIHJlbmRlcmVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHdpbGwgbGV0IGEgcmVuZGVyZXIga25vdyB0aGF0IGEgdGV4dHVyZSBoYXMgYmVlbiB1cGRhdGVkICh1c2VkIG1haW5seSBmb3Igd2ViR0wgdXYgdXBkYXRlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXF1aXJlc1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFdlYkdMIFVWIGRhdGEgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0dXJlIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIGFyZWEgb2YgdGhlIEJhc2VUZXh0dXJlIGltYWdlIHRvIGFjdHVhbGx5IGNvcHkgdG8gdGhlIENhbnZhcyAvIFdlYkdMIHdoZW4gcmVuZGVyaW5nLFxuICAgICAqIGlycmVzcGVjdGl2ZSBvZiB0aGUgYWN0dWFsIGZyYW1lIHNpemUgb3IgcGxhY2VtZW50ICh3aGljaCBjYW4gYmUgaW5mbHVlbmNlZCBieSB0cmltbWVkIHRleHR1cmUgYXRsYXNlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3JvcCA9IGNyb3AgfHwgZnJhbWU7Ly9uZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgcm90YXRlZCBieSA5MCBkZWdyZWVzXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb3RhdGUgPSAhIXJvdGF0ZTtcblxuICAgIGlmIChiYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICBmcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gZnJhbWUgd2Ugc2hvdWxkIG1vbml0b3IgZm9yIGFueSBiYXNlIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5vbigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZS5vbmNlKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZC4gVGhpcyBoYXBwZW5zIGlmIHRoZSBmcmFtZSBvciB0aGUgYmFzZVRleHR1cmUgaXMgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBldmVudCB1cGRhdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0dXJlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqL1xuICAgIGZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBmcmFtZTtcblxuICAgICAgICAgICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHRoaXMud2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMudHJpbSAmJiAhdGhpcy5yb3RhdGUgJiYgKGZyYW1lLnggKyBmcmFtZS53aWR0aCA+IHRoaXMuYmFzZVRleHR1cmUud2lkdGggfHwgZnJhbWUueSArIGZyYW1lLmhlaWdodCA+IHRoaXMuYmFzZVRleHR1cmUuaGVpZ2h0KSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHR1cmUgRXJyb3I6IGZyYW1lIGRvZXMgbm90IGZpdCBpbnNpZGUgdGhlIGJhc2UgVGV4dHVyZSBkaW1lbnNpb25zICcgKyB0aGlzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy90aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuc291cmNlICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuICAgICAgICAgICAgdGhpcy52YWxpZCA9IGZyYW1lICYmIGZyYW1lLndpZHRoICYmIGZyYW1lLmhlaWdodCAmJiB0aGlzLmJhc2VUZXh0dXJlLmhhc0xvYWRlZDtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJpbSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy50cmltLmhlaWdodDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS53aWR0aCA9IHRoaXMudHJpbS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JvcCA9IGZyYW1lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy52YWxpZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVVdnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhpcyB0ZXh0dXJlIG9uIHRoZSBncHUuXG4gKlxuICovXG5UZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYmFzZVRleHR1cmUudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgbG9hZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZUxvYWRlZCA9IGZ1bmN0aW9uIChiYXNlVGV4dHVyZSlcbntcbiAgICAvLyBUT0RPIHRoaXMgY29kZSBsb29rcyBjb25mdXNpbmcuLiBib28gdG8gYWJ1c2luZyBnZXR0ZXJzIGFuZCBzZXR0ZXJzcyFcbiAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMuX2ZyYW1lO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgdXBkYXRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLm9uQmFzZVRleHR1cmVVcGRhdGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZT1mYWxzZV0ge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZSlcbntcbiAgICBpZiAodGhpcy5iYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGlmIChkZXN0cm95QmFzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2ZyYW1lID0gbnVsbDtcbiAgICB0aGlzLl91dnMgPSBudWxsO1xuICAgIHRoaXMudHJpbSA9IG51bGw7XG4gICAgdGhpcy5jcm9wID0gbnVsbDtcblxuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIHRoaXMub2ZmKCdkaXNwb3NlJywgdGhpcy5kaXNwb3NlLCB0aGlzKTtcbiAgICB0aGlzLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRleHR1cmUgb2JqZWN0IHRoYXQgYWN0cyB0aGUgc2FtZSBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9XG4gKi9cblRleHR1cmUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUodGhpcy5iYXNlVGV4dHVyZSwgdGhpcy5mcmFtZSwgdGhpcy5jcm9wLCB0aGlzLnRyaW0sIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuX3VwZGF0ZVV2cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLl91dnMpXG4gICAge1xuICAgICAgICB0aGlzLl91dnMgPSBuZXcgVGV4dHVyZVV2cygpO1xuICAgIH1cblxuICAgIHRoaXMuX3V2cy5zZXQodGhpcy5jcm9wLCB0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLnJvdGF0ZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBUZXh0dXJlIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGNyb3Nzb3JpZ2luIHtib29sZWFufSBXaGV0aGVyIHJlcXVlc3RzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGNyb3Nzb3JpZ2luXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbiAgICAgICAgdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXSA9IHRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZScpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhcywgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW8ge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAodHlwZW9mIHZpZGVvID09PSAnc3RyaW5nJylcbiAgICB7XG4gICAgICAgIHJldHVybiBUZXh0dXJlLmZyb21WaWRlb1VybCh2aWRlbywgc2NhbGVNb2RlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgdmlkZW8gdXJsLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1VybCB7c3RyaW5nfVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gQSBUZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbVZpZGVvVXJsID0gZnVuY3Rpb24gKHZpZGVvVXJsLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh2aWRlb1VybCwgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEFkZHMgYSB0ZXh0dXJlIHRvIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLiBUaGlzIGNhY2hlIGlzIHNoYXJlZCBhY3Jvc3MgdGhlIHdob2xlIFBJWEkgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSBUZXh0dXJlIHRvIGFkZCB0byB0aGUgY2FjaGUuXG4gKiBAcGFyYW0gaWQge3N0cmluZ30gVGhlIGlkIHRoYXQgdGhlIHRleHR1cmUgd2lsbCBiZSBzdG9yZWQgYWdhaW5zdC5cbiAqL1xuVGV4dHVyZS5hZGRUZXh0dXJlVG9DYWNoZSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBpZClcbntcbiAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdID0gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgdGV4dHVyZSBmcm9tIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgb2YgdGhlIHRleHR1cmUgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0aGF0IHdhcyByZW1vdmVkXG4gKi9cblRleHR1cmUucmVtb3ZlVGV4dHVyZUZyb21DYWNoZSA9IGZ1bmN0aW9uIChpZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtpZF07XG5cbiAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcbiAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpZF07XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogQW4gZW1wdHkgdGV4dHVyZSwgdXNlZCBvZnRlbiB0byBub3QgaGF2ZSB0byBjcmVhdGUgbXVsdGlwbGUgZW1wdHkgdGV4dHVyZXMuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmUuRU1QVFkgPSBuZXcgVGV4dHVyZShuZXcgQmFzZVRleHR1cmUoKSk7XG4iLCJcbi8qKlxuICogQSBzdGFuZGFyZCBvYmplY3QgdG8gc3RvcmUgdGhlIFV2cyBvZiBhIHRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBUZXh0dXJlVXZzKClcbntcbiAgICB0aGlzLngwID0gMDtcbiAgICB0aGlzLnkwID0gMDtcblxuICAgIHRoaXMueDEgPSAxO1xuICAgIHRoaXMueTEgPSAwO1xuXG4gICAgdGhpcy54MiA9IDE7XG4gICAgdGhpcy55MiA9IDE7XG5cbiAgICB0aGlzLngzID0gMDtcbiAgICB0aGlzLnkzID0gMTtcblxuICAgIHRoaXMueHkwX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTFfdWludDMyID0gMDtcbiAgICB0aGlzLnh5Ml91aW50MzIgPSAwO1xuICAgIHRoaXMueHkzX3VpbnQzMiA9IDA7XG5cbiAgICB0aGlzLnV2c191aW50MzIgPSBuZXcgVWludDMyQXJyYXkoNClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlVXZzO1xuXG4vKipcbiAqIFNldHMgdGhlIHRleHR1cmUgVXZzIGJhc2VkIG9uIHRoZSBnaXZlbiBmcmFtZSBpbmZvcm1hdGlvblxuICogQHBhcmFtIGZyYW1lIHtQSVhJLlJlY3RhbmdsZX1cbiAqIEBwYXJhbSBiYXNlRnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIHJvdGF0ZSB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIGZyYW1lIGlzIHJvdGF0ZWRcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmVVdnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChmcmFtZSwgYmFzZUZyYW1lLCByb3RhdGUpXG57XG4gICAgdmFyIHR3ID0gYmFzZUZyYW1lLndpZHRoO1xuICAgIHZhciB0aCA9IGJhc2VGcmFtZS5oZWlnaHQ7XG5cbiAgICBpZihyb3RhdGUpXG4gICAge1xuICAgICAgICB0aGlzLngwID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUuaGVpZ2h0KSAvIHR3O1xuICAgICAgICB0aGlzLnkxID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkyID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gZnJhbWUueSAvIHRoO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMueDAgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MiA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gKGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQpIC8gdGg7XG4gICAgfVxuXG4gICAgdGhpcy51dnNfdWludDMyWzBdID0gKCgodGhpcy55MCAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngwICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbMV0gPSAoKCh0aGlzLnkxICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDEgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsyXSA9ICgoKHRoaXMueTIgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MiAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzNdID0gKCgodGhpcy55MyAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngzICogNjU1MzUpICYgMHhGRkZGKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBvZiBhIFtwbGF5aW5nXSBWaWRlby5cbiAqXG4gKiBWaWRlbyBiYXNlIHRleHR1cmVzIG1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kIGluIHRoZWlyIGNyZWF0aW9uIHByb2Nlc3MuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZCBpbiBzZXZlcmFsIHdheXMsIHN1Y2ggYXM6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwoJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0Jyk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh7IHNyYzogJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoWycvdmlkZW8ud2VibScsICcvdmlkZW8ubXA0J10pO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzKFtcbiAqICAgICB7IHNyYzogJy92aWRlby53ZWJtJywgbWltZTogJ3ZpZGVvL3dlYm0nIH0sXG4gKiAgICAgeyBzcmM6ICcvdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfVxuICogXSk7XG4gKiBgYGBcbiAqXG4gKiBTZWUgdGhlIFtcImRldXNcIiBkZW1vXShodHRwOi8vd3d3Lmdvb2Rib3lkaWdpdGFsLmNvbS9waXhpanMvZXhhbXBsZXMvZGV1cy8pLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5CYXNlVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzb3VyY2Uge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIFZpZGVvQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFzb3VyY2UpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHZpZGVvIHNvdXJjZSBlbGVtZW50IHNwZWNpZmllZC4nKTtcbiAgICB9XG5cbiAgICAvLyBob29rIGluIGhlcmUgdG8gY2hlY2sgaWYgdmlkZW8gaXMgYWxyZWFkeSBhdmFpbGFibGUuXG4gICAgLy8gQmFzZVRleHR1cmUgbG9va3MgZm9yIGEgc291cmNlLmNvbXBsZXRlIGJvb2xlYW4sIHBsdXMgd2lkdGggJiBoZWlnaHQuXG5cbiAgICBpZiAoKHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9FTk9VR0hfREFUQSB8fCBzb3VyY2UucmVhZHlTdGF0ZSA9PT0gc291cmNlLkhBVkVfRlVUVVJFX0RBVEEpICYmIHNvdXJjZS53aWR0aCAmJiBzb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgc291cmNlLmNvbXBsZXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBCYXNlVGV4dHVyZS5jYWxsKHRoaXMsIHNvdXJjZSwgc2NhbGVNb2RlKTtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCB0aGUgYmFzZSB0ZXh0dXJlIGF1dG9tYXRpY2FsbHkgdXBkYXRlIGl0c2VsZiwgc2V0IHRvIHRydWUgYnkgZGVmYXVsdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG5cbiAgICB0aGlzLl9vblVwZGF0ZSA9IHRoaXMuX29uVXBkYXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fb25DYW5QbGF5ID0gdGhpcy5fb25DYW5QbGF5LmJpbmQodGhpcyk7XG5cbiAgICBpZiAoIXNvdXJjZS5jb21wbGV0ZSlcbiAgICB7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgdGhpcy5fb25DYW5QbGF5KTtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICAvLyBzdGFydGVkIHBsYXlpbmcuLlxuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX29uUGxheVN0YXJ0LmJpbmQodGhpcykpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9vblBsYXlTdG9wLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHRoaXMuX19sb2FkZWQgPSBmYWxzZTtcbn1cblxuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZpZGVvQmFzZVRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFZpZGVvQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVGhlIGludGVybmFsIHVwZGF0ZSBsb29wIG9mIHRoZSB2aWRlbyBiYXNlIHRleHR1cmUsIG9ubHkgcnVucyB3aGVuIGF1dG9VcGRhdGUgaXMgc2V0IHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25VcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJ1bnMgdGhlIHVwZGF0ZSBsb29wIHdoZW4gdGhlIHZpZGVvIGlzIHJlYWR5IHRvIHBsYXlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5hdXRvVXBkYXRlKVxuICAgIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9vblVwZGF0ZSk7XG4gICAgICAgIHRoaXMuYXV0b1VwZGF0ZSA9IHRydWU7XG4gICAgfVxufTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIGEgcGF1c2UgZXZlbnQgaXMgdHJpZ2dlcmVkLCBzdG9wcyB0aGUgdXBkYXRlIGxvb3BcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gdGhlIHZpZGVvIGlzIGxvYWRlZCBhbmQgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vbkNhblBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX29uQ2FuUGxheSk7XG5cbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuc291cmNlLnZpZGVvV2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5zb3VyY2UudmlkZW9IZWlnaHQ7XG5cbiAgICAgICAgdGhpcy5zb3VyY2UucGxheSgpO1xuXG4gICAgICAgIC8vIHByZXZlbnQgbXVsdGlwbGUgbG9hZGVkIGRpc3BhdGNoZXMuLlxuICAgICAgICBpZiAoIXRoaXMuX19sb2FkZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX19sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5zb3VyY2UuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB0aGlzLnNvdXJjZS5fcGl4aUlkIF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNvdXJjZS5fcGl4aUlkO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIE1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlZpZGVvQmFzZVRleHR1cmV9XG4gKi9cblZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvID0gZnVuY3Rpb24gKHZpZGVvLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCF2aWRlby5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgdmlkZW8uX3BpeGlJZCA9ICd2aWRlb18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt2aWRlby5fcGl4aUlkXTtcblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBWaWRlb0Jhc2VUZXh0dXJlKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB2aWRlby5fcGl4aUlkIF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgQmFzZVRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIHZpZGVvIGVsZW1lbnQuXG4gKiBUaGlzIEJhc2VUZXh0dXJlIGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIGEgdGV4dHVyZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1NyYyB7c3RyaW5nfG9iamVjdHxzdHJpbmdbXXxvYmplY3RbXX0gVGhlIFVSTChzKSBmb3IgdGhlIHZpZGVvLlxuICogQHBhcmFtIFt2aWRlb1NyYy5zcmNdIHtzdHJpbmd9IE9uZSBvZiB0aGUgc291cmNlIHVybHMgZm9yIHRoZSB2aWRlb1xuICogQHBhcmFtIFt2aWRlb1NyYy5taW1lXSB7c3RyaW5nfSBUaGUgbWltZXR5cGUgb2YgdGhlIHZpZGVvIChlLmcuICd2aWRlby9tcDQnKS4gSWYgbm90IHNwZWNpZmllZFxuICogIHRoZSB1cmwncyBleHRlbnNpb24gd2lsbCBiZSB1c2VkIGFzIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgbWltZSB0eXBlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsID0gZnVuY3Rpb24gKHZpZGVvU3JjLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcblxuICAgIC8vIGFycmF5IG9mIG9iamVjdHMgb3Igc3RyaW5nc1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZpZGVvU3JjKSlcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlkZW9TcmMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyY1tpXS5zcmMgfHwgdmlkZW9TcmNbaV0sIHZpZGVvU3JjW2ldLm1pbWUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzaW5nbGUgb2JqZWN0IG9yIHN0cmluZ1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyYy5zcmMgfHwgdmlkZW9TcmMsIHZpZGVvU3JjLm1pbWUpKTtcbiAgICB9XG5cbiAgICB2aWRlby5sb2FkKCk7XG4gICAgdmlkZW8ucGxheSgpO1xuXG4gICAgcmV0dXJuIFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpO1xufTtcblxuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyA9IFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybDtcblxuZnVuY3Rpb24gY3JlYXRlU291cmNlKHBhdGgsIHR5cGUpXG57XG4gICAgaWYgKCF0eXBlKVxuICAgIHtcbiAgICAgICAgdHlwZSA9ICd2aWRlby8nICsgcGF0aC5zdWJzdHIocGF0aC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpO1xuXG4gICAgc291cmNlLnNyYyA9IHBhdGg7XG4gICAgc291cmNlLnR5cGUgPSB0eXBlO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn1cbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIC8vIEludGVybmFsIGV2ZW50IHVzZWQgYnkgY29tcG9zZWQgZW1pdHRlclxuICAgIFRJQ0sgPSAndGljayc7XG5cbi8qKlxuICogQSBUaWNrZXIgY2xhc3MgdGhhdCBydW5zIGFuIHVwZGF0ZSBsb29wIHRoYXQgb3RoZXIgb2JqZWN0cyBsaXN0ZW4gdG8uXG4gKiBUaGlzIGNsYXNzIGlzIGNvbXBvc2VkIGFyb3VuZCBhbiBFdmVudEVtaXR0ZXIgb2JqZWN0IHRvIGFkZCBsaXN0ZW5lcnNcbiAqIG1lYW50IGZvciBleGVjdXRpb24gb24gdGhlIG5leHQgcmVxdWVzdGVkIGFuaW1hdGlvbiBmcmFtZS5cbiAqIEFuaW1hdGlvbiBmcmFtZXMgYXJlIHJlcXVlc3RlZCBvbmx5IHdoZW4gbmVjZXNzYXJ5LFxuICogZS5nLiBXaGVuIHRoZSB0aWNrZXIgaXMgc3RhcnRlZCBhbmQgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlclxuICovXG5mdW5jdGlvbiBUaWNrZXIoKVxue1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0aWNrIG1ldGhvZCBib3VuZCB0byB0aWNrZXIgaW5zdGFuY2UuXG4gICAgICogVGhpcyBpcyBiZWNhdXNlIGluIGVhcmx5IDIwMTUsIEZ1bmN0aW9uLmJpbmRcbiAgICAgKiBpcyBzdGlsbCA2MCUgc2xvd2VyIGluIGhpZ2ggcGVyZm9ybWFuY2Ugc2NlbmFyaW9zLlxuICAgICAqIEFsc28gc2VwYXJhdGluZyBmcmFtZSByZXF1ZXN0cyBmcm9tIHVwZGF0ZSBtZXRob2RcbiAgICAgKiBzbyBsaXN0ZW5lcnMgbWF5IGJlIGNhbGxlZCBhdCBhbnkgdGltZSBhbmQgd2l0aFxuICAgICAqIGFueSBhbmltYXRpb24gQVBJLCBqdXN0IGludm9rZSB0aWNrZXIudXBkYXRlKHRpbWUpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90aWNrID0gZnVuY3Rpb24gX3RpY2sodGltZSkge1xuXG4gICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgICAgIGlmIChfdGhpcy5zdGFydGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBJbnZva2UgbGlzdGVuZXJzIG5vd1xuICAgICAgICAgICAgX3RoaXMudXBkYXRlKHRpbWUpO1xuICAgICAgICAgICAgLy8gTGlzdGVuZXIgc2lkZSBlZmZlY3RzIG1heSBoYXZlIG1vZGlmaWVkIHRpY2tlciBzdGF0ZS5cbiAgICAgICAgICAgIGlmIChfdGhpcy5zdGFydGVkICYmIF90aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgX3RoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMuX3RpY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGVtaXR0ZXIgdXNlZCB0byBmaXJlICd0aWNrJyBldmVudFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGN1cnJlbnQgZnJhbWUgcmVxdWVzdCBJRFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHZhbHVlIG1hbmFnZWQgYnkgbWluRlBTIHByb3BlcnR5IHNldHRlciBhbmQgZ2V0dGVyLlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gYWxsb3dlZCBtaWxsaXNlY29uZHMgYmV0d2VlbiB1cGRhdGVzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4RWxhcHNlZE1TID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhpcyB0aWNrZXIgc2hvdWxkIGludm9rZSB0aGUgbWV0aG9kXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdGFydH0gYXV0b21hdGljYWxseVxuICAgICAqIHdoZW4gYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9TdGFydCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2NhbGFyIHRpbWUgdmFsdWUgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgc2V0dGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI21pbkZQU31cbiAgICAgKiBhbmQgaXMgc2NhbGVkIHdpdGgge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0uXG4gICAgICogKipOb3RlOioqIFRoZSBjYXAgbWF5IGJlIGV4Y2VlZGVkIGJ5IHNjYWxpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZGVsdGFUaW1lID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRpbWUgZWxhcHNlZCBpbiBtaWxsaXNlY29uZHMgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogT3Bwb3NlZCB0byB3aGF0IHRoZSBzY2FsYXIge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9XG4gICAgICogaXMgYmFzZWQsIHRoaXMgdmFsdWUgaXMgbmVpdGhlciBjYXBwZWQgbm9yIHNjYWxlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEgLyBUQVJHRVRfRlBNU1xuICAgICAqL1xuICAgIHRoaXMuZWxhcHNlZE1TID0gMSAvIENPTlNULlRBUkdFVF9GUE1TOyAvLyBkZWZhdWx0IHRvIHRhcmdldCBmcmFtZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCB0aW1lIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjdXBkYXRlfSB3YXMgaW52b2tlZC5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGFsc28gcmVzZXQgaW50ZXJuYWxseSBvdXRzaWRlIG9mIGludm9raW5nXG4gICAgICogdXBkYXRlLCBidXQgb25seSB3aGVuIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gICAgICogSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERPTUhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgICogdGhpcyB2YWx1ZSB3aWxsIGhhdmUgYSBwcmVjaXNpb24gb2YgMSDCtXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5sYXN0VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBGYWN0b3Igb2YgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBTY2FsZXMgdGlja2VyLmRlbHRhVGltZSB0byB3aGF0IHdvdWxkIGJlXG4gICAgICogLy8gdGhlIGVxdWl2YWxlbnQgb2YgYXBwcm94aW1hdGVseSAxMjAgRlBTXG4gICAgICogdGlja2VyLnNwZWVkID0gMjtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5zcGVlZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBoYXMgYmVlbiBzdGFydGVkLlxuICAgICAqIGB0cnVlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogYGZhbHNlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0b3B9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBXaGlsZSBgZmFsc2VgLCB0aGlzIHZhbHVlIG1heSBjaGFuZ2UgdG8gYHRydWVgIGluIHRoZVxuICAgICAqIGV2ZW50IG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBiZWluZyBgdHJ1ZWBcbiAgICAgKiBhbmQgYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlja2VyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZXMgcGVyIHNlY29uZCBhdCB3aGljaCB0aGlzIHRpY2tlciBpcyBydW5uaW5nLlxuICAgICAqIFRoZSBkZWZhdWx0IGlzIGFwcHJveGltYXRlbHkgNjAgaW4gbW9zdCBtb2Rlcm4gYnJvd3NlcnMuXG4gICAgICogKipOb3RlOioqIFRoaXMgZG9lcyBub3QgZmFjdG9yIGluIHRoZSB2YWx1ZSBvZlxuICAgICAqIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3BlZWR9LCB3aGljaCBpcyBzcGVjaWZpY1xuICAgICAqIHRvIHNjYWxpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuZWxhcHNlZE1TO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIG1pbGxpc2Vjb25kcyBhbGxvd2VkIHRvXG4gICAgICogZWxhcHNlIGJldHdlZW4gaW52b2tpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9LlxuICAgICAqIFRoaXMgdmFsdWUgaXMgdXNlZCB0byBjYXAge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICAgICAqIGJ1dCBkb2VzIG5vdCBlZmZlY3QgdGhlIG1lYXN1cmVkIHZhbHVlIG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjRlBTfS5cbiAgICAgKiBXaGVuIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSBpdCBpcyBjbGFtcGVkIHRvIGEgdmFsdWUgYmV0d2VlblxuICAgICAqIGAwYCBhbmQgYFBJWEkuVEFSR0VUX0ZQTVMgKiAxMDAwYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSS50aWNrZXIuVGlja2VyI1xuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgbWluRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuX21heEVsYXBzZWRNUztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbihmcHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIENsYW1wOiAwIHRvIFRBUkdFVF9GUE1TXG4gICAgICAgICAgICB2YXIgbWluRlBNUyA9IE1hdGgubWluKE1hdGgubWF4KDAsIGZwcykgLyAxMDAwLCBDT05TVC5UQVJHRVRfRlBNUyk7XG4gICAgICAgICAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxIC8gbWluRlBNUztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lLlxuICogSWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHkgYmVlbiByZXF1ZXN0ZWQsIGFuZCBpZiB0aGUgaW50ZXJuYWxcbiAqIGVtaXR0ZXIgaGFzIGxpc3RlbmVycywgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3JlcXVlc3RJZk5lZWRlZCA9IGZ1bmN0aW9uIF9yZXF1ZXN0SWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICAvLyBlbnN1cmUgY2FsbGJhY2tzIGdldCBjb3JyZWN0IGRlbHRhXG4gICAgICAgIHRoaXMubGFzdFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX3RpY2spO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSBjYW5jZWxzIGEgcGVuZGluZyBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fY2FuY2VsSWZOZWVkZWQgPSBmdW5jdGlvbiBfY2FuY2VsSWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgIT09IG51bGwpXG4gICAge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZXF1ZXN0SWQpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiB0aGUgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQgaXQgY2hlY2tzIGlmIGEgZnJhbWUgaGFzIG5vdCBhbHJlYWR5XG4gKiBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbCBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMuIElmIHRoZXNlXG4gKiBjb25kaXRpb25zIGFyZSBtZXQsIGEgbmV3IGZyYW1lIGlzIHJlcXVlc3RlZC4gSWYgdGhlIHRpY2tlciBoYXMgbm90XG4gKiBiZWVuIHN0YXJ0ZWQsIGJ1dCBhdXRvU3RhcnQgaXMgYHRydWVgLCB0aGVuIHRoZSB0aWNrZXIgc3RhcnRzIG5vdyxcbiAqIGFuZCBjb250aW51ZXMgd2l0aCB0aGUgcHJldmlvdXMgY29uZGl0aW9ucyB0byByZXF1ZXN0IGEgbmV3IGZyYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3N0YXJ0SWZQb3NzaWJsZSA9IGZ1bmN0aW9uIF9zdGFydElmUG9zc2libGUoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5hdXRvU3RhcnQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29ufSBpbnRlcm5hbGx5IGZvciB0aGVcbiAqIGludGVybmFsICd0aWNrJyBldmVudC4gSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsXG4gKiBhbmQgaWYgc28gaXQgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGF0IHRoaXMgcG9pbnQuXG4gKlxuICogQHBhcmFtIGZuIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGFkZGVkIGZvciB1cGRhdGVzXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbihUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29uY2V9IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIG9uZSB1cGRhdGVcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZE9uY2UgPSBmdW5jdGlvbiBhZGRPbmNlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub25jZShUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29mZn0gaW50ZXJuYWxseSBmb3IgJ3RpY2snIGV2ZW50LlxuICogSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMgZm9yICd0aWNrJyBldmVudC5cbiAqIElmIGl0IGRvZXMsIHRoZW4gaXQgY2FuY2VscyB0aGUgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwYXJhbSBbZm5dIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIHJlbW92ZWRcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dCB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub2ZmKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIGlmICghdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgbGlzdGVuZXJzXG4gKiBhIG5ldyBhbmltYXRpb24gZnJhbWUgaXMgcmVxdWVzdGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiBzdGFydCgpXG57XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSB0aWNrZXIuIElmIHRoZSB0aWNrZXIgaGFzIHJlcXVlc3RlZFxuICogYW4gYW5pbWF0aW9uIGZyYW1lIGl0IGlzIGNhbmNlbGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uIHN0b3AoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2FuY2VsSWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRyaWdnZXJzIGFuIHVwZGF0ZS4gQW4gdXBkYXRlIGVudGFpbHMgc2V0dGluZyB0aGVcbiAqIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNlbGFwc2VkTVN9LFxuICogdGhlIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICogaW52b2tpbmcgYWxsIGxpc3RlbmVycyB3aXRoIGN1cnJlbnQgZGVsdGFUaW1lLFxuICogYW5kIHRoZW4gZmluYWxseSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbGFzdFRpbWV9XG4gKiB3aXRoIHRoZSB2YWx1ZSBvZiBjdXJyZW50VGltZSB0aGF0IHdhcyBwcm92aWRlZC5cbiAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgYW5pbWF0aW9uXG4gKiBmcmFtZSBjYWxsYmFja3MgaWYgdGhlIHRpY2tlciBpbnN0YW5jZSBoYXMgYmVlbiBzdGFydGVkXG4gKiBhbmQgbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqXG4gKiBAcGFyYW0gW2N1cnJlbnRUaW1lPXBlcmZvcm1hbmNlLm5vdygpXSB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9IHRoZSBjdXJyZW50IHRpbWUgb2YgZXhlY3V0aW9uXG4gKi9cblRpY2tlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKGN1cnJlbnRUaW1lKVxue1xuICAgIHZhciBlbGFwc2VkTVM7XG5cbiAgICAvLyBBbGxvdyBjYWxsaW5nIHVwZGF0ZSBkaXJlY3RseSB3aXRoIGRlZmF1bHQgY3VycmVudFRpbWUuXG4gICAgY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSB8fCBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAvLyBTYXZlIHVuY2FwcGVkIGVsYXBzZWRNUyBmb3IgbWVhc3VyZW1lbnRcbiAgICBlbGFwc2VkTVMgPSB0aGlzLmVsYXBzZWRNUyA9IGN1cnJlbnRUaW1lIC0gdGhpcy5sYXN0VGltZTtcblxuICAgIC8vIGNhcCB0aGUgbWlsbGlzZWNvbmRzIGVsYXBzZWQgdXNlZCBmb3IgZGVsdGFUaW1lXG4gICAgaWYgKGVsYXBzZWRNUyA+IHRoaXMuX21heEVsYXBzZWRNUylcbiAgICB7XG4gICAgICAgIGVsYXBzZWRNUyA9IHRoaXMuX21heEVsYXBzZWRNUztcbiAgICB9XG5cbiAgICB0aGlzLmRlbHRhVGltZSA9IGVsYXBzZWRNUyAqIENPTlNULlRBUkdFVF9GUE1TICogdGhpcy5zcGVlZDtcblxuICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgYWRkZWQgdG8gaW50ZXJuYWwgZW1pdHRlclxuICAgIHRoaXMuX2VtaXR0ZXIuZW1pdChUSUNLLCB0aGlzLmRlbHRhVGltZSk7XG5cbiAgICB0aGlzLmxhc3RUaW1lID0gY3VycmVudFRpbWU7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRpY2tlcjtcbiIsInZhciBUaWNrZXIgPSByZXF1aXJlKCcuL1RpY2tlcicpO1xuXG4vKipcbiAqIFRoZSBzaGFyZWQgdGlja2VyIGluc3RhbmNlIHVzZWQgYnkge0BsaW5rIFBJWEkuZXh0cmFzLk1vdmllQ2xpcH0uXG4gKiBhbmQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqIFRoZSBwcm9wZXJ0eSB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2F1dG9TdGFydH0gaXMgc2V0IHRvIGB0cnVlYFxuICogZm9yIHRoaXMgaW5zdGFuY2UuIFBsZWFzZSBmb2xsb3cgdGhlIGV4YW1wbGVzIGZvciB1c2FnZSwgaW5jbHVkaW5nXG4gKiBob3cgdG8gb3B0LW91dCBvZiBhdXRvLXN0YXJ0aW5nIHRoZSBzaGFyZWQgdGlja2VyLlxuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgdGlja2VyID0gUElYSS50aWNrZXIuc2hhcmVkO1xuICogLy8gU2V0IHRoaXMgdG8gcHJldmVudCBzdGFydGluZyB0aGlzIHRpY2tlciB3aGVuIGxpc3RlbmVycyBhcmUgYWRkZWQuXG4gKiAvLyBCeSBkZWZhdWx0IHRoaXMgaXMgdHJ1ZSBvbmx5IGZvciB0aGUgUElYSS50aWNrZXIuc2hhcmVkIGluc3RhbmNlLlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogLy8gRllJLCBjYWxsIHRoaXMgdG8gZW5zdXJlIHRoZSB0aWNrZXIgaXMgc3RvcHBlZC4gSXQgc2hvdWxkIGJlIHN0b3BwZWRcbiAqIC8vIGlmIHlvdSBoYXZlIG5vdCBhdHRlbXB0ZWQgdG8gcmVuZGVyIGFueXRoaW5nIHlldC5cbiAqIHRpY2tlci5zdG9wKCk7XG4gKiAvLyBDYWxsIHRoaXMgd2hlbiB5b3UgYXJlIHJlYWR5IGZvciBhIHJ1bm5pbmcgc2hhcmVkIHRpY2tlci5cbiAqIHRpY2tlci5zdGFydCgpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBZb3UgbWF5IHVzZSB0aGUgc2hhcmVkIHRpY2tlciB0byByZW5kZXIuLi5cbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDgwMCwgNjAwKTtcbiAqIHZhciBzdGFnZSA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogdmFyIGludGVyYWN0aW9uTWFuYWdlciA9IFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyKTtcbiAqIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocmVuZGVyZXIudmlldyk7XG4gKiB0aWNrZXIuYWRkKGZ1bmN0aW9uICh0aW1lKSB7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBPciB5b3UgY2FuIGp1c3QgdXBkYXRlIGl0IG1hbnVhbGx5LlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogdGlja2VyLnN0b3AoKTtcbiAqIGZ1bmN0aW9uIGFuaW1hdGUodGltZSkge1xuICogICAgIHRpY2tlci51cGRhdGUodGltZSk7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XG4gKiB9XG4gKiBhbmltYXRlKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAqXG4gKiBAdHlwZSB7UElYSS50aWNrZXIuVGlja2VyfVxuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbnZhciBzaGFyZWQgPSBuZXcgVGlja2VyKCk7XG5zaGFyZWQuYXV0b1N0YXJ0ID0gdHJ1ZTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudGlja2VyXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIHNoYXJlZDogc2hhcmVkLFxuICAgIFRpY2tlcjogVGlja2VyXG59O1xuIiwiLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuXG52YXIgR0xfTUFQID0ge307XG5cblxudmFyIGNyZWF0ZUluZGljZXNGb3JRdWFkcyA9IGZ1bmN0aW9uIChzaXplKVxue1xuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYXJyYXksIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgIFxuICAgIHZhciB0b3RhbEluZGljZXMgPSBzaXplICogNjtcblxuICAgIHZhciBpbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHRvdGFsSW5kaWNlcyk7XG5cblx0Ly8gZmlsbCB0aGUgaW5kaWNlcyB3aXRoIHRoZSBxdWFkcyB0byBkcmF3XG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCB0b3RhbEluZGljZXM7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kaWNlcztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzOyIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLnV0aWxzXG4gKi9cbnZhciB1dGlscyA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIF91aWQ6IDAsXG4gICAgX3NhaWRIZWxsbzogZmFsc2UsXG5cbiAgICBFdmVudEVtaXR0ZXI6ICAgcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIHBsdWdpblRhcmdldDogICByZXF1aXJlKCcuL3BsdWdpblRhcmdldCcpLFxuICAgIGFzeW5jOiAgICAgICAgICByZXF1aXJlKCdhc3luYycpLFxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllclxuICAgICAqXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllciB0byB1c2UuXG4gICAgICovXG4gICAgdWlkOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICsrdXRpbHMuX3VpZDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBoZXggY29sb3IgbnVtYmVyIHRvIGFuIFtSLCBHLCBCXSBhcnJheVxuICAgICAqXG4gICAgICogQHBhcmFtIGhleCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSAge251bWJlcltdfSBbb3V0PVtdXVxuICAgICAqIEByZXR1cm4ge251bWJlcltdfSBBbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIFtSLCBHLCBCXSBvZiB0aGUgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnJnYjogZnVuY3Rpb24gKGhleCwgb3V0KVxuICAgIHtcbiAgICAgICAgb3V0ID0gb3V0IHx8IFtdO1xuXG4gICAgICAgIG91dFswXSA9IChoZXggPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzFdID0gKGhleCA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIG91dFsyXSA9IChoZXggJiAweEZGKSAvIDI1NTtcblxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5nIGNvbG9yLlxuICAgICAqL1xuICAgIGhleDJzdHJpbmc6IGZ1bmN0aW9uIChoZXgpXG4gICAge1xuICAgICAgICBoZXggPSBoZXgudG9TdHJpbmcoMTYpO1xuICAgICAgICBoZXggPSAnMDAwMDAwJy5zdWJzdHIoMCwgNiAtIGhleC5sZW5ndGgpICsgaGV4O1xuXG4gICAgICAgIHJldHVybiAnIycgKyBoZXg7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgY29sb3IgYXMgYW4gW1IsIEcsIEJdIGFycmF5IHRvIGEgaGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIHJnYiB7bnVtYmVyW119XG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgY29sb3IgbnVtYmVyXG4gICAgICovXG4gICAgcmdiMmhleDogZnVuY3Rpb24gKHJnYilcbiAgICB7XG4gICAgICAgIHJldHVybiAoKHJnYlswXSoyNTUgPDwgMTYpICsgKHJnYlsxXSoyNTUgPDwgOCkgKyByZ2JbMl0qMjU1KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIENhbnZhcyBCbGVuZE1vZGVzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnJvd3NlclxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciB0aGV5IGFyZSBzdXBwb3J0ZWRcbiAgICAgKi9cbiAgICBjYW5Vc2VOZXdDYW52YXNCbGVuZE1vZGVzOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwbmdIZWFkID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVFBQUFBQkFRTUFBQUREOHAyT0FBQUFBMUJNVkVYLyc7XG4gICAgICAgIHZhciBwbmdFbmQgPSAnQUFBQUNrbEVRVlFJMTJOZ0FBQUFBZ0FCNGlHOE13QUFBQUJKUlU1RXJrSmdnZz09JztcblxuICAgICAgICB2YXIgbWFnZW50YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBtYWdlbnRhLnNyYyA9IHBuZ0hlYWQgKyAnQVA4MDRPYTYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciB5ZWxsb3cgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgeWVsbG93LnNyYyA9IHBuZ0hlYWQgKyAnL3dDS3h2UkYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY2FudmFzLndpZHRoID0gNjtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IDE7XG5cbiAgICAgICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShtYWdlbnRhLCAwLCAwKTtcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoeWVsbG93LCAyLCAwKTtcblxuICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDIsMCwxLDEpLmRhdGE7XG5cbiAgICAgICAgcmV0dXJuIChkYXRhWzBdID09PSAyNTUgJiYgZGF0YVsxXSA9PT0gMCAmJiBkYXRhWzJdID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBudW1iZXIsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgdGFrZW4gZnJvbSBTdGFybGluZyBGcmFtZXdvcmsgYXMgaXRzIHByZXR0eSBuZWF0IDspXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbnVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7bnVtYmVyfSB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqL1xuICAgIGdldE5leHRQb3dlck9mVHdvOiBmdW5jdGlvbiAobnVtYmVyKVxuICAgIHtcbiAgICAgICAgLy8gc2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Bvd2VyX29mX3R3byNGYXN0X2FsZ29yaXRobV90b19jaGVja19pZl9hX3Bvc2l0aXZlX251bWJlcl9pc19hX3Bvd2VyX29mX3R3b1xuICAgICAgICBpZiAobnVtYmVyID4gMCAmJiAobnVtYmVyICYgKG51bWJlciAtIDEpKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSAxO1xuXG4gICAgICAgICAgICB3aGlsZSAocmVzdWx0IDwgbnVtYmVyKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA8PD0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBjaGVja3MgaWYgdGhlIGdpdmVuIHdpZHRoIGFuZCBoZWlnaHQgbWFrZSBhIHBvd2VyIG9mIHR3byByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSBoZWlnaHQge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzUG93ZXJPZlR3bzogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm4gKHdpZHRoID4gMCAmJiAod2lkdGggJiAod2lkdGggLSAxKSkgPT09IDAgJiYgaGVpZ2h0ID4gMCAmJiAoaGVpZ2h0ICYgKGhlaWdodCAtIDEpKSA9PT0gMCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGdldCB0aGUgcmVzb2x1dGlvbiBvZiBhbiBhc3NldCBieSBsb29raW5nIGZvciB0aGUgcHJlZml4XG4gICAgICogdXNlZCBieSBzcHJpdGVzaGVldHMgYW5kIGltYWdlIHVybHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwge3N0cmluZ30gdGhlIGltYWdlIHBhdGhcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0UmVzb2x1dGlvbk9mVXJsOiBmdW5jdGlvbiAodXJsKVxuICAgIHtcbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBDT05TVC5SRVRJTkFfUFJFRklYLmV4ZWModXJsKTtcblxuICAgICAgICBpZiAocmVzb2x1dGlvbilcbiAgICAgICAge1xuICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChyZXNvbHV0aW9uWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAxO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBMb2dzIG91dCB0aGUgdmVyc2lvbiBhbmQgcmVuZGVyZXIgaW5mb3JtYXRpb24gZm9yIHRoaXMgcnVubmluZyBpbnN0YW5jZSBvZiBQSVhJLlxuICAgICAqIElmIHlvdSBkb24ndCB3YW50IHRvIHNlZSB0aGlzIG1lc3NhZ2UgeW91IGNhbiBzZXQgYFBJWEkudXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7YFxuICAgICAqIHNvIHRoZSBsaWJyYXJ5IHRoaW5rcyBpdCBhbHJlYWR5IHNhaWQgaXQuIEtlZXAgaW4gbWluZCB0aGF0IGRvaW5nIHRoYXQgd2lsbCBmb3JldmVyXG4gICAgICogbWFrZXMgeW91IGEgamVyayBmYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBUaGUgc3RyaW5nIHJlbmRlcmVyIHR5cGUgdG8gbG9nLlxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBzYXlIZWxsbzogZnVuY3Rpb24gKHR5cGUpXG4gICAge1xuICAgICAgICBpZiAodXRpbHMuX3NhaWRIZWxsbylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjaHJvbWUnKSA+IC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtcbiAgICAgICAgICAgICAgICAnXFxuICVjICVjICVjIFBpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0g4pywICcgKyB0eXBlICsgJyDinLAgICVjICcgKyAnICVjICcgKyAnIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8gICVjICVjIOKZpSVj4pmlJWPimaUgXFxuXFxuJyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmY2NmE1OyBiYWNrZ3JvdW5kOiAjMDMwMzA3OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmYzNkYzsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOydcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBhcmdzKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3aW5kb3cuY29uc29sZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nKCdQaXhpLmpzICcgKyBDT05TVC5WRVJTSU9OICsgJyAtICcgKyB0eXBlICsgJyAtIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8nKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuXG4gICAgICAgIHV0aWxzLl9zYWlkSGVsbG8gPSB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgZm9yIGNoZWNraW5nIGZvciB3ZWJnbCBzdXBwb3J0XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzV2ViR0xTdXBwb3J0ZWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB2YXIgY29udGV4dE9wdGlvbnMgPSB7IHN0ZW5jaWw6IHRydWUgfTtcbiAgICAgICAgdHJ5XG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghd2luZG93LldlYkdMUmVuZGVyaW5nQ29udGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSxcbiAgICAgICAgICAgICAgICBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIGNvbnRleHRPcHRpb25zKSB8fCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgY29udGV4dE9wdGlvbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gISEoZ2wgJiYgZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5zdGVuY2lsKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgc2lnbiBvZiBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBuIHtudW1iZXJ9XG4gICAgICogQHJldHVybnMge251bWJlcn0gMCBpZiBuIGlzIDAsIC0xIGlmIG4gaXMgbmVnYXRpdmUsIDEgaWYgbiBpIHBvc2l0aXZlXG4gICAgICovXG4gICAgc2lnbjogZnVuY3Rpb24gKG4pXG4gICAge1xuICAgICAgICByZXR1cm4gbiA/IChuIDwgMCA/IC0xIDogMSkgOiAwO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZW1vdmVJdGVtc1xuICAgICAqXG4gICAgICogQHBhcmFtIHthcnJheX0gYXJyIFRoZSB0YXJnZXQgYXJyYXlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRJZHggVGhlIGluZGV4IHRvIGJlZ2luIHJlbW92aW5nIGZyb20gKGluY2x1c2l2ZSlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmVtb3ZlQ291bnQgSG93IG1hbnkgaXRlbXMgdG8gcmVtb3ZlXG4gICAgICovXG4gICAgcmVtb3ZlSXRlbXM6IGZ1bmN0aW9uIChhcnIsIHN0YXJ0SWR4LCByZW1vdmVDb3VudClcbiAgICB7XG4gICAgICAgIHZhciBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIGlmIChzdGFydElkeCA+PSBsZW5ndGggfHwgcmVtb3ZlQ291bnQgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbW92ZUNvdW50ID0gKHN0YXJ0SWR4K3JlbW92ZUNvdW50ID4gbGVuZ3RoID8gbGVuZ3RoLXN0YXJ0SWR4IDogcmVtb3ZlQ291bnQpO1xuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJZHgsIGxlbiA9IGxlbmd0aC1yZW1vdmVDb3VudDsgaSA8IGxlbjsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBhcnJbaV0gPSBhcnJbaSArIHJlbW92ZUNvdW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyci5sZW5ndGggPSBsZW47XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIERlc2NyaWJlIHByb3BlcnR5IHVzYWdlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBUZXh0dXJlQ2FjaGU6IHt9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHt9XG59O1xuIiwiLyoqXG4gKiBNaXhpbnMgZnVuY3Rpb25hbGl0eSB0byBtYWtlIGFuIG9iamVjdCBoYXZlIFwicGx1Z2luc1wiLlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkudXRpbHNcbiAqIEBwYXJhbSBvYmoge29iamVjdH0gVGhlIG9iamVjdCB0byBtaXggaW50by5cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIHBsdWdpblRhcmdldC5taXhpbihNeU9iamVjdCk7XG4gKi9cbmZ1bmN0aW9uIHBsdWdpblRhcmdldChvYmopXG57XG4gICAgb2JqLl9fcGx1Z2lucyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHBsdWdpbiB0byBhbiBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwbHVnaW5OYW1lIHtzdHJpbmd9IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICAgICAqIEBwYXJhbSBjdG9yIHtGdW5jdGlvbn0gVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciB0aGUgcGx1Z2luLlxuICAgICAqL1xuICAgIG9iai5yZWdpc3RlclBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW5OYW1lLCBjdG9yKVxuICAgIHtcbiAgICAgICAgb2JqLl9fcGx1Z2luc1twbHVnaW5OYW1lXSA9IGN0b3I7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlcyBhbGwgdGhlIHBsdWdpbnMgb2YgdGhpcyBvYmplY3RcbiAgICAgKlxuICAgICAqL1xuICAgIG9iai5wcm90b3R5cGUuaW5pdFBsdWdpbnMgPSBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zID0gdGhpcy5wbHVnaW5zIHx8IHt9O1xuXG4gICAgICAgIGZvciAodmFyIG8gaW4gb2JqLl9fcGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbmV3IChvYmouX19wbHVnaW5zW29dKSh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5kZXN0cm95UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBvIGluIHRoaXMucGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBsdWdpbnMgPSBudWxsO1xuICAgIH07XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLyoqXG4gICAgICogTWl4ZXMgaW4gdGhlIHByb3BlcnRpZXMgb2YgdGhlIHBsdWdpblRhcmdldCBpbnRvIGFub3RoZXIgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0IHtvYmplY3R9IFRoZSBvYmogdG8gbWl4IGludG9cbiAgICAgKi9cbiAgICBtaXhpbjogZnVuY3Rpb24gbWl4aW4ob2JqKVxuICAgIHtcbiAgICAgICAgcGx1Z2luVGFyZ2V0KG9iaik7XG4gICAgfVxufTtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciBjb3JlID0gcmVxdWlyZSgnLi9jb3JlJyksXG4gICAgbWVzaCA9IHJlcXVpcmUoJy4vbWVzaCcpLFxuICAgIGV4dHJhcyA9IHJlcXVpcmUoJy4vZXh0cmFzJyksXG4gICAgZmlsdGVycyA9IHJlcXVpcmUoJy4vZmlsdGVycycpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIFNwcml0ZUJhdGNoXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLlBhcnRpY2xlQ29udGFpbmVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlNwcml0ZUJhdGNoID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLicpO1xufTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBBc3NldExvYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBzZWUgUElYSS5sb2FkZXJzLkxvYWRlclxuICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IFRoZSBsb2FkZXIgc3lzdGVtIHdhcyBvdmVyaGF1bGVkIGluIHBpeGkgdjMsIHBsZWFzZSBzZWUgdGhlIG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyIGNsYXNzLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLkFzc2V0TG9hZGVyID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuJyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb3JlLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFN0YWdlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQ29udGFpbmVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFN0YWdlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1lvdSBkbyBub3QgbmVlZCB0byB1c2UgYSBQSVhJIFN0YWdlIGFueSBtb3JlLCB5b3UgY2FuIHNpbXBseSByZW5kZXIgYW55IGNvbnRhaW5lci4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIERpc3BsYXlPYmplY3RDb250YWluZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgRGlzcGxheU9iamVjdENvbnRhaW5lcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEaXNwbGF5T2JqZWN0Q29udGFpbmVyIGhhcyBiZWVuIHNob3J0ZW5lZCB0byBDb250YWluZXIsIHBsZWFzZSB1c2UgQ29udGFpbmVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RyaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2hcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RyaXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFN0cmlwIGNsYXNzIGhhcyBiZWVuIHJlbmFtZWQgdG8gTWVzaCBhbmQgbW92ZWQgdG8gbWVzaC5NZXNoLCBwbGVhc2UgdXNlIG1lc2guTWVzaCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLk1lc2g7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBSb3BlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkubWVzaC5Sb3BlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFJvcGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFJvcGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gbWVzaC5Sb3BlLCBwbGVhc2UgdXNlIG1lc2guUm9wZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLlJvcGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBNb3ZpZUNsaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuTW92aWVDbGlwXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIE1vdmllQ2xpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgTW92aWVDbGlwIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5Nb3ZpZUNsaXAsIHBsZWFzZSB1c2UgZXh0cmFzLk1vdmllQ2xpcCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuTW92aWVDbGlwO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGlsaW5nU3ByaXRlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBUaWxpbmdTcHJpdGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRpbGluZ1Nwcml0ZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuVGlsaW5nU3ByaXRlLCBwbGVhc2UgdXNlIGV4dHJhcy5UaWxpbmdTcHJpdGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLlRpbGluZ1Nwcml0ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJpdG1hcFRleHRcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCaXRtYXBUZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCaXRtYXBUZXh0IGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5CaXRtYXBUZXh0LCBwbGVhc2UgdXNlIGV4dHJhcy5CaXRtYXBUZXh0IGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5CaXRtYXBUZXh0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgYmxlbmRNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIGJsZW5kTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGJsZW5kTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gQkxFTkRfTU9ERVMsIHBsZWFzZSB1c2UgQkxFTkRfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5CTEVORF9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNjYWxlTW9kZXNcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBzY2FsZU1vZGVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBzY2FsZU1vZGVzIGhhcyBiZWVuIG1vdmVkIHRvIFNDQUxFX01PREVTLCBwbGVhc2UgdXNlIFNDQUxFX01PREVTIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU0NBTEVfTU9ERVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBCYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuQmFzZVRleHR1cmVDYWNoZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCYXNlVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgQmFzZVRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5CYXNlVGV4dHVyZUNhY2hlLCBwbGVhc2UgdXNlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5UZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuVGV4dHVyZUNhY2hlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIG1hdGhcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBtYXRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgbWF0aCBuYW1lc3BhY2UgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIGFjY2VzcyBtZW1iZXJzIGFscmVhZHkgYWNjZXNzaWJsZSBvbiBQSVhJLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgUElYSS5TcHJpdGUjc2V0VGV4dHVyZVxuICogQHNlZSBQSVhJLlNwcml0ZSN0ZXh0dXJlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlLnByb3RvdHlwZS5zZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dHVyZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dHVyZSBwcm9wZXJ0eSwgZS5nIDogc3ByaXRlLnRleHR1cmUgPSB0ZXh0dXJlOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3NldFRleHRcbiAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmV4dHJhcy5CaXRtYXBUZXh0LnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dClcbntcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dCBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dCBwcm9wZXJ0eSwgZS5nIDogbXlCaXRtYXBUZXh0LnRleHQgPSBcXCdteSB0ZXh0XFwnOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLlRleHQjdGV4dFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteVRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRTdHlsZVxuICogQHNlZSBQSVhJLlRleHQjc3R5bGVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0LnByb3RvdHlwZS5zZXRTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlKVxue1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldFN0eWxlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBzdHlsZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0LnN0eWxlID0gc3R5bGU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQHNlZSBQSVhJLlRleHR1cmUjc2V0RnJhbWVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0dXJlLnByb3RvdHlwZS5zZXRGcmFtZSA9IGZ1bmN0aW9uKGZyYW1lKVxue1xuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldEZyYW1lIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBmcmFtZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0dXJlLmZyYW1lID0gZnJhbWU7Jyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhmaWx0ZXJzLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBzZWUgUElYSS5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBBYnN0cmFjdEZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLkFic3RyYWN0RmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBBYnN0cmFjdEZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkFic3RyYWN0RmlsdGVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkZYQUFGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuRlhBQUZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBGWEFBRmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuRlhBQUZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgRlhBQUZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkZYQUFGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuU3ByaXRlTWFza0ZpbHRlclxuICAgICAqIEBzZWUgUElYSS5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIFNwcml0ZU1hc2tGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBTcHJpdGVNYXNrRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU3ByaXRlTWFza0ZpbHRlcjtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkudXRpbHMudXVpZFxuICogQHNlZSBQSVhJLnV0aWxzLnVpZFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICovXG5jb3JlLnV0aWxzLnV1aWQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvbnNvbGUud2FybigndXRpbHMudXVpZCgpIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdXRpbHMudWlkKCkgZnJvbSBub3cgb24uJyk7XG4gICAgcmV0dXJuIGNvcmUudXRpbHMudWlkKCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogQSBCaXRtYXBUZXh0IG9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dCB1c2luZyBiaXRtYXAgZm9udC4gVG9cbiAqIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJywgJ1xccicgb3IgJ1xcclxcbicgaW4geW91ciBzdHJpbmcuIFlvdSBjYW4gZ2VuZXJhdGUgdGhlIGZudCBmaWxlcyB1c2luZzpcbiAqXG4gKiBBIEJpdG1hcFRleHQgY2FuIG9ubHkgYmUgY3JlYXRlZCB3aGVuIHRoZSBmb250IGlzIGxvYWRlZFxuICpcbiAqIGBgYGpzXG4gKiAvLyBpbiB0aGlzIGNhc2UgdGhlIGZvbnQgaXMgaW4gYSBmaWxlIGNhbGxlZCAnZGVzeXJlbC5mbnQnXG4gKiB2YXIgYml0bWFwVGV4dCA9IG5ldyBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0KFwidGV4dCB1c2luZyBhIGZhbmN5IGZvbnQhXCIsIHtmb250OiBcIjM1cHggRGVzeXJlbFwiLCBhbGlnbjogXCJyaWdodFwifSk7XG4gKiBgYGBcbiAqXG4gKlxuICogaHR0cDovL3d3dy5hbmdlbGNvZGUuY29tL3Byb2R1Y3RzL2JtZm9udC8gZm9yIHdpbmRvd3Mgb3JcbiAqIGh0dHA6Ly93d3cuYm1nbHlwaC5jb20vIGZvciBtYWMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBzdHlsZSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIHN0eWxlLmZvbnQge3N0cmluZ3xvYmplY3R9IFRoZSBmb250IGRlc2NyaXB0b3IgZm9yIHRoZSBvYmplY3QsIGNhbiBiZSBwYXNzZWQgYXMgYSBzdHJpbmcgb2YgZm9ybVxuICogICAgICBcIjI0cHggRm9udE5hbWVcIiBvciBcIkZvbnROYW1lXCIgb3IgYXMgYW4gb2JqZWN0IHdpdGggZXhwbGljaXQgbmFtZS9zaXplIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQubmFtZV0ge3N0cmluZ30gVGhlIGJpdG1hcCBmb250IGlkXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQuc2l6ZV0ge251bWJlcn0gVGhlIHNpemUgb2YgdGhlIGZvbnQgaW4gcGl4ZWxzLCBlLmcuIDI0XG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0XG4gKiAgICAgIHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUudGludD0weEZGRkZGRl0ge251bWJlcn0gVGhlIHRpbnQgY29sb3JcbiAqL1xuZnVuY3Rpb24gQml0bWFwVGV4dCh0ZXh0LCBzdHlsZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgb3ZlcmFsbCB0ZXh0LCBkaWZmZXJlbnQgZnJvbSBmb250U2l6ZSxcbiAgICAgKiB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBzdHlsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRleHRXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dEhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBsZXR0ZXIgc3ByaXRlIHBvb2wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZ2x5cGhzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZm9udCA9IHtcbiAgICAgICAgdGludDogc3R5bGUudGludCAhPT0gdW5kZWZpbmVkID8gc3R5bGUudGludCA6IDB4RkZGRkZGLFxuICAgICAgICBhbGlnbjogc3R5bGUuYWxpZ24gfHwgJ2xlZnQnLFxuICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICBzaXplOiAwXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgZm9udC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZm9udCA9IHN0eWxlLmZvbnQ7IC8vIHJ1biBmb250IHNldHRlclxuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IHRleHQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IHdpZHRoIG9mIHRoaXMgYml0bWFwIHRleHQgaW4gcGl4ZWxzLiBJZiB0aGUgdGV4dCBwcm92aWRlZCBpcyBsb25nZXIgdGhhbiB0aGUgdmFsdWUgcHJvdmlkZWQsIGxpbmUgYnJlYWtzIHdpbGwgYmUgYXV0b21hdGljYWxseSBpbnNlcnRlZCBpbiB0aGUgbGFzdCB3aGl0ZXNwYWNlLlxuICAgICAqIERpc2FibGUgYnkgc2V0dGluZyB2YWx1ZSB0byAwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IGxpbmUgaGVpZ2h0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRyeWluZyB0byB1c2UgdGhlIHRvdGFsIGhlaWdodCBvZiB0aGUgVGV4dCwgaWU6IHdoZW4gdHJ5aW5nIHRvIHZlcnRpY2FsbHkgYWxpZ24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkaXJ0eSBzdGF0ZSBvZiB0aGlzIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy51cGRhdGVUZXh0KCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5CaXRtYXBUZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5Db250YWluZXIucHJvdG90eXBlKTtcbkJpdG1hcFRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQml0bWFwVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gQml0bWFwVGV4dDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQml0bWFwVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGludCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0aW50OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQudGludDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQudGludCA9ICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlID49IDApID8gdmFsdWUgOiAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFsaWdubWVudCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbGVmdCdcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBhbGlnbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250LmFsaWduO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC5hbGlnbiA9IHZhbHVlIHx8ICdsZWZ0JztcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZvbnQgZGVzY3JpcHRvciBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0ZvbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgZm9udDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcgJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9mb250Lm5hbWUgPSB2YWx1ZS5sZW5ndGggPT09IDEgPyB2YWx1ZVswXSA6IHZhbHVlLnNsaWNlKDEpLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB2YWx1ZS5sZW5ndGggPj0gMiA/IHBhcnNlSW50KHZhbHVlWzBdLCAxMCkgOiBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV0uc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5zaXplID0gdHlwZW9mIHZhbHVlLnNpemUgPT09ICdudW1iZXInID8gdmFsdWUuc2l6ZSA6IHBhcnNlSW50KHZhbHVlLnNpemUsIDEwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGV4dCBhbmQgdXBkYXRlcyBpdCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkYXRhID0gQml0bWFwVGV4dC5mb250c1t0aGlzLl9mb250Lm5hbWVdO1xuICAgIHZhciBwb3MgPSBuZXcgY29yZS5Qb2ludCgpO1xuICAgIHZhciBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgIHZhciBjaGFycyA9IFtdO1xuICAgIHZhciBsYXN0TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbGluZVdpZHRocyA9IFtdO1xuICAgIHZhciBsaW5lID0gMDtcbiAgICB2YXIgc2NhbGUgPSB0aGlzLl9mb250LnNpemUgLyBkYXRhLnNpemU7XG4gICAgdmFyIGxhc3RTcGFjZSA9IC0xO1xuICAgIHZhciBtYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0Lmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gdGhpcy50ZXh0LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGxhc3RTcGFjZSA9IC8oXFxzKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSA/IGkgOiBsYXN0U3BhY2U7XG5cbiAgICAgICAgaWYgKC8oPzpcXHJcXG58XFxyfFxcbikvLnRlc3QodGhpcy50ZXh0LmNoYXJBdChpKSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXN0U3BhY2UgIT09IC0xICYmIHRoaXMubWF4V2lkdGggPiAwICYmIHBvcy54ICogc2NhbGUgPiB0aGlzLm1heFdpZHRoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKGNoYXJzLCBsYXN0U3BhY2UsIGkgLSBsYXN0U3BhY2UpO1xuICAgICAgICAgICAgaSA9IGxhc3RTcGFjZTtcbiAgICAgICAgICAgIGxhc3RTcGFjZSA9IC0xO1xuXG4gICAgICAgICAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbGluZSsrO1xuXG4gICAgICAgICAgICBwb3MueCA9IDA7XG4gICAgICAgICAgICBwb3MueSArPSBkYXRhLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hhckRhdGEgPSBkYXRhLmNoYXJzW2NoYXJDb2RlXTtcblxuICAgICAgICBpZiAoIWNoYXJEYXRhKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmV2Q2hhckNvZGUgJiYgY2hhckRhdGEua2VybmluZ1twcmV2Q2hhckNvZGVdKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb3MueCArPSBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV07XG4gICAgICAgIH1cblxuICAgICAgICBjaGFycy5wdXNoKHt0ZXh0dXJlOmNoYXJEYXRhLnRleHR1cmUsIGxpbmU6IGxpbmUsIGNoYXJDb2RlOiBjaGFyQ29kZSwgcG9zaXRpb246IG5ldyBjb3JlLlBvaW50KHBvcy54ICsgY2hhckRhdGEueE9mZnNldCwgcG9zLnkgKyBjaGFyRGF0YS55T2Zmc2V0KX0pO1xuICAgICAgICBsYXN0TGluZVdpZHRoID0gcG9zLnggKyAoY2hhckRhdGEudGV4dHVyZS53aWR0aCArIGNoYXJEYXRhLnhPZmZzZXQpO1xuICAgICAgICBwb3MueCArPSBjaGFyRGF0YS54QWR2YW5jZTtcbiAgICAgICAgbWF4TGluZUhlaWdodCA9IE1hdGgubWF4KG1heExpbmVIZWlnaHQsIChjaGFyRGF0YS55T2Zmc2V0ICsgY2hhckRhdGEudGV4dHVyZS5oZWlnaHQpKTtcbiAgICAgICAgcHJldkNoYXJDb2RlID0gY2hhckNvZGU7XG4gICAgfVxuXG4gICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG5cbiAgICB2YXIgbGluZUFsaWduT2Zmc2V0cyA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8PSBsaW5lOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYWxpZ25PZmZzZXQgPSAwO1xuXG4gICAgICAgIGlmICh0aGlzLl9mb250LmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbGlnbk9mZnNldCA9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5fZm9udC5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpbmVBbGlnbk9mZnNldHMucHVzaChhbGlnbk9mZnNldCk7XG4gICAgfVxuXG4gICAgdmFyIGxlbkNoYXJzID0gY2hhcnMubGVuZ3RoO1xuICAgIHZhciB0aW50ID0gdGhpcy50aW50O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbkNoYXJzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYyA9IHRoaXMuX2dseXBoc1tpXTsgLy8gZ2V0IHRoZSBuZXh0IGdseXBoIHNwcml0ZVxuXG4gICAgICAgIGlmIChjKVxuICAgICAgICB7XG4gICAgICAgICAgICBjLnRleHR1cmUgPSBjaGFyc1tpXS50ZXh0dXJlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgYyA9IG5ldyBjb3JlLlNwcml0ZShjaGFyc1tpXS50ZXh0dXJlKTtcbiAgICAgICAgICAgIHRoaXMuX2dseXBocy5wdXNoKGMpO1xuICAgICAgICB9XG5cbiAgICAgICAgYy5wb3NpdGlvbi54ID0gKGNoYXJzW2ldLnBvc2l0aW9uLnggKyBsaW5lQWxpZ25PZmZzZXRzW2NoYXJzW2ldLmxpbmVdKSAqIHNjYWxlO1xuICAgICAgICBjLnBvc2l0aW9uLnkgPSBjaGFyc1tpXS5wb3NpdGlvbi55ICogc2NhbGU7XG4gICAgICAgIGMuc2NhbGUueCA9IGMuc2NhbGUueSA9IHNjYWxlO1xuICAgICAgICBjLnRpbnQgPSB0aW50O1xuXG4gICAgICAgIGlmICghYy5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoYyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZW1vdmUgdW5uZWNlc3NhcnkgY2hpbGRyZW4uXG4gICAgZm9yIChpID0gbGVuQ2hhcnM7IGkgPCB0aGlzLl9nbHlwaHMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKHRoaXMuX2dseXBoc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0V2lkdGggPSBtYXhMaW5lV2lkdGggKiBzY2FsZTtcbiAgICB0aGlzLnRleHRIZWlnaHQgPSAocG9zLnkgKyBkYXRhLmxpbmVIZWlnaHQpICogc2NhbGU7XG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gbWF4TGluZUhlaWdodCAqIHNjYWxlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb2YgdGhpcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGV4dCBiZWZvcmUgY2FsbGluZyBwYXJlbnQncyBnZXRMb2NhbEJvdW5kc1xuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5cbkJpdG1hcFRleHQucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICByZXR1cm4gY29yZS5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzLmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59O1xuXG5CaXRtYXBUZXh0LmZvbnRzID0ge307XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIE1vdmllQ2xpcCBpcyBhIHNpbXBsZSB3YXkgdG8gZGlzcGxheSBhbiBhbmltYXRpb24gZGVwaWN0ZWQgYnkgYSBsaXN0IG9mIHRleHR1cmVzLlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgYWxpZW5JbWFnZXMgPSBbXCJpbWFnZV9zZXF1ZW5jZV8wMS5wbmdcIixcImltYWdlX3NlcXVlbmNlXzAyLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDMucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wNC5wbmdcIl07XG4gKiB2YXIgdGV4dHVyZUFycmF5ID0gW107XG4gKlxuICogZm9yICh2YXIgaT0wOyBpIDwgNDsgaSsrKVxuICoge1xuICogICAgICB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoYWxpZW5JbWFnZXNbaV0pO1xuICogICAgICB0ZXh0dXJlQXJyYXkucHVzaCh0ZXh0dXJlKTtcbiAqIH07XG4gKlxuICogdmFyIG1jID0gbmV3IFBJWEkuTW92aWVDbGlwKHRleHR1cmVBcnJheSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0dXJlcyB7UElYSS5UZXh0dXJlW118T2JqZWN0W119IGFuIGFycmF5IG9mIHtAbGluayBQSVhJLlRleHR1cmV9IG9yIGZyYW1lIG9iamVjdHMgdGhhdCBtYWtlIHVwIHRoZSBhbmltYXRpb25cbiAqIEBwYXJhbSB0ZXh0dXJlc1tdLnRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHtAbGluayBQSVhJLlRleHR1cmV9IG9mIHRoZSBmcmFtZVxuICogQHBhcmFtIHRleHR1cmVzW10udGltZSB7bnVtYmVyfSB0aGUgZHVyYXRpb24gb2YgdGhlIGZyYW1lIGluIG1zXG4gKi9cbmZ1bmN0aW9uIE1vdmllQ2xpcCh0ZXh0dXJlcylcbntcbiAgICBjb3JlLlNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmVzWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlID8gdGV4dHVyZXNbMF0gOiB0ZXh0dXJlc1swXS50ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kdXJhdGlvbnMgPSBudWxsO1xuXG4gICAgdGhpcy50ZXh0dXJlcyA9IHRleHR1cmVzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNwZWVkIHRoYXQgdGhlIE1vdmllQ2xpcCB3aWxsIHBsYXkgYXQuIEhpZ2hlciBpcyBmYXN0ZXIsIGxvd2VyIGlzIHNsb3dlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmFuaW1hdGlvblNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBtb3ZpZSBjbGlwIHJlcGVhdHMgYWZ0ZXIgcGxheWluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMubG9vcCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gYSBNb3ZpZUNsaXAgZmluaXNoZXMgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICovXG4gICAgdGhpcy5vbkNvbXBsZXRlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEVsYXBzZWQgdGltZSBzaW5jZSBhbmltYXRpb24gaGFzIGJlZW4gc3RhcnRlZCwgdXNlZCBpbnRlcm5hbGx5IHRvIGRpc3BsYXkgY3VycmVudCB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIE1vdmllQ2xpcCBpcyBjdXJyZW50bHkgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1vdmllQ2xpcC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5Nb3ZpZUNsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTW92aWVDbGlwO1xubW9kdWxlLmV4cG9ydHMgPSBNb3ZpZUNsaXA7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1vdmllQ2xpcC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiB0b3RhbEZyYW1lcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIGZyYW1lcyBpbiB0aGUgTW92aWVDbGlwLiBUaGlzIGlzIHRoZSBzYW1lIGFzIG51bWJlciBvZiB0ZXh0dXJlc1xuICAgICAqIGFzc2lnbmVkIHRvIHRoZSBNb3ZpZUNsaXAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdG90YWxGcmFtZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIHRleHR1cmVzIHVzZWQgZm9yIHRoaXMgTW92aWVDbGlwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqXG4gICAgICovXG4gICAgdGV4dHVyZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZih2YWx1ZVswXSBpbnN0YW5jZW9mIGNvcmUuVGV4dHVyZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcy5wdXNoKHZhbHVlW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMucHVzaCh2YWx1ZVtpXS50aW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgKiBUaGUgTW92aWVDbGlwcyBjdXJyZW50IGZyYW1lIGluZGV4XG4gICAgKlxuICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAqIEByZWFkb25seVxuICAgICovXG4gICAgY3VycmVudEZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRGcmFtZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpICUgdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRGcmFtZSA8IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY3VycmVudEZyYW1lICs9IHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RnJhbWU7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKipcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYoIXRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogUGxheXMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZih0aGlzLnBsYXlpbmcpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5aW5nID0gdHJ1ZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZ29lcyB0byBhIHNwZWNpZmljIGZyYW1lXG4gKlxuICogQHBhcmFtIGZyYW1lTnVtYmVyIHtudW1iZXJ9IGZyYW1lIGluZGV4IHRvIHN0b3AgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kU3RvcCA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLnN0b3AoKTtcblxuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbdGhpcy5jdXJyZW50RnJhbWVdO1xufTtcblxuLyoqXG4gKiBHb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWUgYW5kIGJlZ2lucyBwbGF5aW5nIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RhcnQgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kUGxheSA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IGZyYW1lTnVtYmVyO1xuXG4gICAgdGhpcy5wbGF5KCk7XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKiBAcHJpdmF0ZVxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWQgPSB0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2R1cmF0aW9ucyAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIHZhciBsYWcgPSB0aGlzLl9jdXJyZW50VGltZSAlIDEgKiB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuXG4gICAgICAgIGxhZyArPSBlbGFwc2VkIC8gNjAgKiAxMDAwO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPCAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZS0tO1xuICAgICAgICAgICAgbGFnICs9IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2lnbiA9IE1hdGguc2lnbih0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lKTtcbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgPSBNYXRoLmZsb29yKHRoaXMuX2N1cnJlbnRUaW1lKTtcblxuICAgICAgICB3aGlsZSAobGFnID49IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhZyAtPSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdICogc2lnbjtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IHNpZ247XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBsYWcgLyB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBlbGFwc2VkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jdXJyZW50VGltZSA8IDAgJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AoMCk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5fY3VycmVudFRpbWUgPj0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoICYmICF0aGlzLmxvb3ApXG4gICAge1xuICAgICAgICB0aGlzLmdvdG9BbmRTdG9wKHRoaXMuX3RleHR1cmVzLmxlbmd0aCAtIDEpO1xuXG4gICAgICAgIGlmICh0aGlzLm9uQ29tcGxldGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuXG59O1xuXG4vKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZGVzdHJveXMgaXRcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICggKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuICAgIGNvcmUuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIEEgc2hvcnQgaGFuZCB3YXkgb2YgY3JlYXRpbmcgYSBtb3ZpZWNsaXAgZnJvbSBhbiBhcnJheSBvZiBmcmFtZSBpZHNcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVzIHtzdHJpbmdbXX0gdGhlIGFycmF5IG9mIGZyYW1lcyBpZHMgdGhlIG1vdmllY2xpcCB3aWxsIHVzZSBhcyBpdHMgdGV4dHVyZSBmcmFtZXNcbiAqL1xuTW92aWVDbGlwLmZyb21GcmFtZXMgPSBmdW5jdGlvbiAoZnJhbWVzKVxue1xuICAgIHZhciB0ZXh0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0ZXh0dXJlcy5wdXNoKG5ldyBjb3JlLlRleHR1cmUuZnJvbUZyYW1lKGZyYW1lc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW92aWVDbGlwKHRleHR1cmVzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGltYWdlIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgaW1hZ2UgdXJscyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUltYWdlcyA9IGZ1bmN0aW9uIChpbWFnZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTsiLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICAvLyBhIHNwcml0ZSB1c2UgZGZvciByZW5kZXJpbmcgdGV4dHVyZXMuLlxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlcicpO1xuXG4vKipcbiAqIEEgdGlsaW5nIHNwcml0ZSBpcyBhIGZhc3Qgd2F5IG9mIHJlbmRlcmluZyBhIHRpbGluZyBpbWFnZVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmUge1RleHR1cmV9IHRoZSB0ZXh0dXJlIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFRpbGluZ1Nwcml0ZSh0ZXh0dXJlLCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGluZyBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVTY2FsZSA9IG5ldyBjb3JlLlBvaW50KDEsMSk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgcG9zaXRpb24gb2YgdGhlIGltYWdlIHRoYXQgaXMgYmVpbmcgdGlsZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBuZXcgY29yZS5Qb2ludCgwLDApO1xuXG4gICAgLy8vLy8gcHJpdmF0ZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHdpdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gd2lkdGggfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0IHx8IDEwMDtcblxuICAgIC8qKlxuICAgICAqIEFuIGludGVybmFsIFdlYkdMIFVWIGNhY2hlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlVXZzfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdXZzID0gbmV3IGNvcmUuVGV4dHVyZVV2cygpO1xuXG4gICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IG51bGw7XG5cbiAgICAvL1RPRE8gbW92ZS4uXG4gICAgdGhpcy5zaGFkZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcihcblxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1VHJhbnNmb3JtOycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJyAgIGNvb3JkIC09IHVUcmFuc2Zvcm0ueHk7JyxcbiAgICAgICAgJyAgIGNvb3JkIC89IHVUcmFuc2Zvcm0uenc7JyxcbiAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBjb29yZDsnLFxuXG4gICAgICAgICcgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpOycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgIFtcbiAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdUZyYW1lOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzIgdVBpeGVsU2l6ZTsnLFxuXG4gICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IG1vZCh2VGV4dHVyZUNvb3JkLCB1RnJhbWUuencpOycsXG4gICAgICAgICcgICBjb29yZCA9IGNsYW1wKGNvb3JkLCB1UGl4ZWxTaXplLCB1RnJhbWUuencgLSB1UGl4ZWxTaXplKTsnLFxuICAgICAgICAnICAgY29vcmQgKz0gdUZyYW1lLnh5OycsXG5cbiAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9ICB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdUZyYW1lOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVRyYW5zZm9ybTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLDAsMSwxXSB9LFxuICAgICAgICAgICAgICAgIHVQaXhlbFNpemUgOiB7IHR5cGUgOiAnMmZ2JywgdmFsdWU6IFsxLCAxXX1cbiAgICAgICAgICAgIH1cbiAgICAgICk7XG59XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsaW5nU3ByaXRlO1xubW9kdWxlLmV4cG9ydHMgPSBUaWxpbmdTcHJpdGU7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsaW5nU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRpbGluZ1Nwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybjtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICAvLyB0d2VhayBvdXIgdGV4dHVyZSB0ZW1wb3JhcmlseS4uXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUgfHwgIXRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGVtcFV2cyA9IHRleHR1cmUuX3V2cyxcbiAgICAgICAgdGVtcFdpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIHRlbXBIZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQsXG4gICAgICAgIHR3ID0gdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCxcbiAgICAgICAgdGggPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRoaXMuX3V2cztcbiAgICB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51UGl4ZWxTaXplLnZhbHVlWzBdID0gMS4wL3R3O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMV0gPSAxLjAvdGg7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMF0gPSB0ZW1wVXZzLngwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVsxXSA9IHRlbXBVdnMueTA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzJdID0gdGVtcFV2cy54MSAtIHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzNdID0gdGVtcFV2cy55MiAtIHRlbXBVdnMueTA7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzBdID0gKHRoaXMudGlsZVBvc2l0aW9uLnggJSAodGVtcFdpZHRoICogdGhpcy50aWxlU2NhbGUueCkpIC8gdGhpcy5fd2lkdGg7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsxXSA9ICh0aGlzLnRpbGVQb3NpdGlvbi55ICUgKHRlbXBIZWlnaHQgKiB0aGlzLnRpbGVTY2FsZS55KSkgLyB0aGlzLl9oZWlnaHQ7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsyXSA9ICggdHcgLyB0aGlzLl93aWR0aCApICogdGhpcy50aWxlU2NhbGUueDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzNdID0gKCB0aCAvIHRoaXMuX2hlaWdodCApICogdGhpcy50aWxlU2NhbGUueTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIodGhpcyk7XG5cbiAgICB0ZXh0dXJlLl91dnMgPSB0ZW1wVXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGVtcFdpZHRoO1xuICAgIHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRlbXBIZWlnaHQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBhIHJlZmVyZW5jZSB0byB0aGUgY2FudmFzIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0LFxuICAgICAgICB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgYmFzZVRleHR1cmUgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBtb2RYID0gKHRoaXMudGlsZVBvc2l0aW9uLnggLyB0aGlzLnRpbGVTY2FsZS54KSAlIHRleHR1cmUuX2ZyYW1lLndpZHRoLFxuICAgICAgICBtb2RZID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgLyB0aGlzLnRpbGVTY2FsZS55KSAlIHRleHR1cmUuX2ZyYW1lLmhlaWdodDtcblxuICAgIC8vIGNyZWF0ZSBhIG5pY2Ugc2hpbnkgcGF0dGVybiFcbiAgICAvLyBUT0RPIHRoaXMgbmVlZHMgdG8gYmUgcmVmcmVzaGVkIGlmIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgaWYoIXRoaXMuX2NhbnZhc1BhdHRlcm4pXG4gICAge1xuICAgICAgICAvLyBjdXQgYW4gb2JqZWN0IGZyb20gYSBzcHJpdGVzaGVldC4uXG4gICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IGNvcmUuQ2FudmFzQnVmZmVyKHRleHR1cmUuX2ZyYW1lLndpZHRoLCB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQpO1xuXG4gICAgICAgIC8vIFRpbnQgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgICAgaWYgKHRoaXMudGludCAhPT0gMHhGRkZGRkYpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlZFRpbnQgIT09IHRoaXMudGludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUgPSBDYW52YXNUaW50ZXIuZ2V0VGludGVkVGV4dHVyZSh0aGlzLCB0aGlzLnRpbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZSh0aGlzLnRpbnRlZFRleHR1cmUsIDAsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZShiYXNlVGV4dHVyZS5zb3VyY2UsIC10ZXh0dXJlLl9mcmFtZS54LCAtdGV4dHVyZS5fZnJhbWUueSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IHRlbXBDYW52YXMuY29udGV4dC5jcmVhdGVQYXR0ZXJuKCB0ZW1wQ2FudmFzLmNhbnZhcywgJ3JlcGVhdCcgKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgY29udGV4dCBzdGF0ZS4uXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb24pO1xuXG4gICAgLy8gVE9ETyAtIHRoaXMgc2hvdWxkIGJlIHJvbGxlZCBpbnRvIHRoZSBzZXRUcmFuc2Zvcm0gYWJvdmUuLlxuICAgIGNvbnRleHQuc2NhbGUodGhpcy50aWxlU2NhbGUueCx0aGlzLnRpbGVTY2FsZS55KTtcblxuICAgIGNvbnRleHQudHJhbnNsYXRlKG1vZFggKyAodGhpcy5hbmNob3IueCAqIC10aGlzLl93aWR0aCApLFxuICAgICAgICAgICAgICAgICAgICAgIG1vZFkgKyAodGhpcy5hbmNob3IueSAqIC10aGlzLl9oZWlnaHQpKTtcblxuICAgIC8vIGNoZWNrIGJsZW5kIG1vZGVcbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyBmaWxsIHRoZSBwYXR0ZXJuIVxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fY2FudmFzUGF0dGVybjtcbiAgICBjb250ZXh0LmZpbGxSZWN0KC1tb2RYLFxuICAgICAgICAgICAgICAgICAgICAgLW1vZFksXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl93aWR0aCAvIHRoaXMudGlsZVNjYWxlLngsXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWlnaHQgLyB0aGlzLnRpbGVTY2FsZS55KTtcblxuXG4gICAgLy9UT0RPIC0gcHJldHR5IHN1cmUgdGhpcyBjYW4gYmUgZGVsZXRlZC4uLlxuICAgIC8vY29udGV4dC50cmFuc2xhdGUoLXRoaXMudGlsZVBvc2l0aW9uLnggKyAodGhpcy5hbmNob3IueCAqIHRoaXMuX3dpZHRoKSwgLXRoaXMudGlsZVBvc2l0aW9uLnkgKyAodGhpcy5hbmNob3IueSAqIHRoaXMuX2hlaWdodCkpO1xuICAgIC8vY29udGV4dC5zY2FsZSgxIC8gdGhpcy50aWxlU2NhbGUueCwgMSAvIHRoaXMudGlsZVNjYWxlLnkpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBzcHJpdGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xuXG4gICAgdmFyIHcwID0gd2lkdGggKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICB2YXIgdzEgPSB3aWR0aCAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgdmFyIGgwID0gaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgdmFyIGgxID0gaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG5cbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgdmFyIHgxID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTIgPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHg0ID0gIGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciBtaW5YLFxuICAgICAgICBtYXhYLFxuICAgICAgICBtaW5ZLFxuICAgICAgICBtYXhZO1xuXG4gICAgbWluWCA9IHgxO1xuICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgbWluWSA9IHkxO1xuICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgbWF4WCA9IHgxO1xuICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgbWF4WSA9IHkxO1xuICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG5cbiAgICByZXR1cm4gYm91bmRzO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byBjaGVja1xuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKlxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsZVNjYWxlID0gbnVsbDtcbiAgICB0aGlzLl90aWxlU2NhbGVPZmZzZXQgPSBudWxsO1xuICAgIHRoaXMudGlsZVBvc2l0aW9uID0gbnVsbDtcblxuICAgIHRoaXMuX3V2cyA9IG51bGw7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSB0aWxpbmcgc3ByaXRlIHRoYXQgd2lsbCB1c2UgYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICovXG5UaWxpbmdTcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQsd2lkdGgsaGVpZ2h0KVxue1xuICAgIHZhciB0ZXh0dXJlID0gY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgJyArIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKHRleHR1cmUsd2lkdGgsaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBBIG5ldyBUaWxpbmdTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgd2lkdGgsIGhlaWdodCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRpbGluZ1Nwcml0ZShjb3JlLlRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpLHdpZHRoLGhlaWdodCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgRGlzcGxheU9iamVjdCA9IGNvcmUuRGlzcGxheU9iamVjdCxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gbnVsbDtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbEhpdFRlc3QgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsRGVzdHJveSA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVkU3ByaXRlID0gbnVsbDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGlzcGxheU9iamVjdC5wcm90b3R5cGUsIHtcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgeW91IHdhbnQgdGhpcyBkaXNwbGF5IG9iamVjdCB0byBiZSBjYWNoZWQgYXMgYSBiaXRtYXAuXG4gICAgICogVGhpcyBiYXNpY2FsbHkgdGFrZXMgYSBzbmFwIHNob3Qgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IGFzIGl0IGlzIGF0IHRoYXQgbW9tZW50LiBJdCBjYW4gcHJvdmlkZSBhIHBlcmZvcm1hbmNlIGJlbmVmaXQgZm9yIGNvbXBsZXggc3RhdGljIGRpc3BsYXlPYmplY3RzLlxuICAgICAqIFRvIHJlbW92ZSBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ2ZhbHNlJ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGNhY2hlQXNCaXRtYXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVBc0JpdG1hcDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NhY2hlQXNCaXRtYXAgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSB0aGlzLnJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gdGhpcy5yZW5kZXJDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMudXBkYXRlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzID0gdGhpcy5nZXRCb3VuZHM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbERlc3Ryb3kgPSB0aGlzLmRlc3Ryb3k7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQgPSB0aGlzLmNvbnRhaW5zUG9pbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSB0aGlzLl9jYWNoZUFzQml0bWFwRGVzdHJveTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXN0cm95Q2FjaGVkRGlzcGxheU9iamVjdCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXM7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRCb3VuZHMgPSB0aGlzLl9vcmlnaW5hbEdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX29yaWdpbmFsRGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fb3JpZ2luYWxDb250YWluc1BvaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBXZWJHTFxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gdGhlIFdlYkdMIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZFdlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENhY2hlZERpc3BsYXlPYmplY3QoIHJlbmRlcmVyICk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIoIHRoaXMuX2NhY2hlZFNwcml0ZSApO1xufTtcblxuLyoqXG4qIFByZXBhcmVzIHRoZSBXZWJHTCByZW5kZXJlciB0byBjYWNoZSB0aGUgc3ByaXRlXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGZpcnN0IHdlIGZsdXNoIGFueXRoaW5nIGxlZnQgaW4gdGhlIHJlbmRlcmVyIChvdGhlcndpc2UgaXQgd291bGQgZ2V0IHJlbmRlcmVkIHRvIHRoZSBjYWNoZWQgdGV4dHVyZSlcbiAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbiAgICAvL3RoaXMuZmlsdGVycz0gW107XG4gICAgLy8gbmV4dCB3ZSBmaW5kIHRoZSBkaW1lbnNpb25zIG9mIHRoZSB1bnRyYW5zZm9ybWVkIG9iamVjdFxuICAgIC8vIHRoaXMgZnVuY3Rpb24gYWxzbyBjYWxscyB1cGRhdGV0cmFuc2Zvcm0gb24gYWxsIGl0cyBjaGlsZHJlbiBhcyBwYXJ0IG9mIHRoZSBtZWFzdXJpbmcuIFRoaXMgbWVhbnMgd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIHRyYW5zZm9ybSBhZ2FpbiBpbiB0aGlzIGZ1bmN0aW9uXG4gICAgLy8gVE9ETyBwYXNzIGFuIG9iamVjdCB0byBjbG9uZSB0b28/IHNhdmVzIGhhdmluZyB0byBjcmVhdGUgYSBuZXcgb25lIGVhY2ggdGltZSFcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmNsb25lKCk7XG5cbiAgICAvLyBhZGQgc29tZSBwYWRkaW5nIVxuICAgIGlmKHRoaXMuX2ZpbHRlcnMpXG4gICAge1xuICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuX2ZpbHRlcnNbMF0ucGFkZGluZztcbiAgICAgICAgYm91bmRzLnggLT0gcGFkZGluZztcbiAgICAgICAgYm91bmRzLnkgLT0gcGFkZGluZztcblxuICAgICAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG4gICAgfVxuXG4gICAgLy8gZm9yIG5vdyB3ZSBjYWNoZSB0aGUgY3VycmVudCByZW5kZXJUYXJnZXQgdGhhdCB0aGUgd2ViR0wgcmVuZGVyZXIgaXMgY3VycmVudGx5IHVzaW5nLlxuICAgIC8vIHRoaXMgY291bGQgYmUgbW9yZSBlbGVnZW50Li5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldDtcbiAgICAvLyBXZSBhbHNvIHN0b3JlIHRoZSBmaWx0ZXIgc3RhY2sgLSBJIHdpbGwgZGVmaW5pdGVseSBsb29rIHRvIGNoYW5nZSBob3cgdGhpcyB3b3JrcyBhIGxpdHRsZSBsYXRlciBkb3duIHRoZSBsaW5lLlxuICAgIHZhciBzdGFjayA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2s7XG5cbiAgICAvLyB0aGlzIHJlbmRlclRleHR1cmUgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBjYWNoZWQgRGlzcGxheU9iamVjdFxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG5cblxuICAgIC8vIHNldCBhbGwgcHJvcGVydGllcyB0byB0aGVyZSBvcmlnaW5hbCBzbyB3ZSBjYW4gcmVuZGVyIHRvIGEgdGV4dHVyZVxuICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoY2FjaGVkUmVuZGVyVGFyZ2V0KTtcbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmZpbHRlclN0YWNrID0gc3RhY2s7XG5cbiAgICB0aGlzLnJlbmRlcldlYkdMICAgICA9IHRoaXMuX3JlbmRlckNhY2hlZFdlYkdMO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICAgICAgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgdHJhbnNmb3JtIG9mIHRoZSBjYWNoZWQgc3ByaXRlIHRvIGF2b2lkIHRoZSBuYXN0eSBmbGlja2VyLi5cbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgLy8gbWFwIHRoZSBoaXQgdGVzdC4uXG4gICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fY2FjaGVkU3ByaXRlLmNvbnRhaW5zUG9pbnQuYmluZCh0aGlzLl9jYWNoZWRTcHJpdGUpO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgc3ByaXRlIHdpdGggY2FudmFzXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gdGhlIENhbnZhcyByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9yZW5kZXJDYWNoZWRDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdENhbnZhcyggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLnJlbmRlckNhbnZhcyhyZW5kZXJlcik7XG59O1xuXG4vL1RPRE8gdGhpcyBjYW4gYmUgdGhlIHNhbWUgYXMgdGhlIHdlYkdMIHZlcmlzb24uLiB3aWxsIG5lZWQgdG8gZG8gYSBsaXR0bGUgdHdlYWtpbmcgZmlyc3QgdGhvdWdoLi5cbi8qKlxuKiBQcmVwYXJlcyB0aGUgQ2FudmFzIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvL2dldCBib3VuZHMgYWN0dWFsbHkgdHJhbnNmb3JtcyB0aGUgb2JqZWN0IGZvciB1cyBhbHJlYWR5IVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIG0sIHRydWUpO1xuXG4gICAgLy8gbm93IHJlc3RvcmUgdGhlIHN0YXRlIGJlIHNldHRpbmcgdGhlIG5ldyBwcm9wZXJ0aWVzXG4gICAgcmVuZGVyZXIuY29udGV4dCA9IGNhY2hlZFJlbmRlclRhcmdldDtcblxuICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fcmVuZGVyQ2FjaGVkQ2FudmFzO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICA9IHRoaXMuX2dldENhY2hlZEJvdW5kcztcblxuXG4gICAgLy8gY3JlYXRlIG91ciBjYWNoZWQgc3ByaXRlXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IGNvcmUuU3ByaXRlKHJlbmRlclRleHR1cmUpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogQ2FsY3VsYXRlcyB0aGUgYm91bmRzIG9mIHRoZSBjYWNoZWQgc3ByaXRlXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2dldENhY2hlZEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLl9jYWNoZWRTcHJpdGUuZ2V0Qm91bmRzKCk7XG59O1xuXG4vKipcbiogRGVzdHJveXMgdGhlIGNhY2hlZCBzcHJpdGUuXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX3RleHR1cmUuZGVzdHJveSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59O1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcERlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSgpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSBpbnN0YW5jZSBuYW1lIG9mIHRoZSBvYmplY3QuXG4gKlxuICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAqIEBtZW1iZXIge3N0cmluZ31cbiAqL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5uYW1lID0gbnVsbDtcblxuLyoqXG4qIFJldHVybnMgdGhlIGRpc3BsYXkgb2JqZWN0IGluIHRoZSBjb250YWluZXJcbipcbiogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuKiBAcGFyYW0gbmFtZSB7c3RyaW5nfSBpbnN0YW5jZSBuYW1lXG4qIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiovXG5jb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWUgPSBmdW5jdGlvbiAobmFtZSlcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbltpXS5uYW1lID09PSBuYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdFxuKlxuKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuKiBAcGFyYW0gcG9pbnQge1BvaW50fSB0aGUgcG9pbnQgdG8gd3JpdGUgdGhlIGdsb2JhbCB2YWx1ZSB0by4gSWYgbnVsbCBhIG5ldyBwb2ludCB3aWxsIGJlIHJldHVybmVkXG4qIEByZXR1cm4ge1BvaW50fVxuKi9cbmNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0R2xvYmFsUG9zaXRpb24gPSBmdW5jdGlvbiAocG9pbnQpXG57XG4gICAgcG9pbnQgPSBwb2ludCB8fCBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgaWYodGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICBwb2ludC54ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMud29ybGRUcmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHBvaW50LnggPSB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIHBvaW50LnkgPSB0aGlzLnBvc2l0aW9uLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxucmVxdWlyZSgnLi9jYWNoZUFzQml0bWFwJyk7XG5yZXF1aXJlKCcuL2dldENoaWxkQnlOYW1lJyk7XG5yZXF1aXJlKCcuL2dldEdsb2JhbFBvc2l0aW9uJyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmV4dHJhc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNb3ZpZUNsaXA6ICAgICAgcmVxdWlyZSgnLi9Nb3ZpZUNsaXAnKSxcbiAgICBUaWxpbmdTcHJpdGU6ICAgcmVxdWlyZSgnLi9UaWxpbmdTcHJpdGUnKSxcbiAgICBCaXRtYXBUZXh0OiAgICAgcmVxdWlyZSgnLi9CaXRtYXBUZXh0Jylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGUgWSBpcyBmbGlwcGVkIGluIHRoaXMgc2hhZGVyIGZvciBzb21lIHJlYXNvbi5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgc2hhZGVyIDogaHR0cHM6Ly93d3cuc2hhZGVydG95LmNvbS92aWV3L2xzc0dEaiBieSBAbW92QVgxM2hcbiAqL1xuXG4vKipcbiAqIEFuIEFTQ0lJIGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQXNjaWlGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gZmxvYXQgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IGNoYXJhY3RlcihmbG9hdCBuLCB2ZWMyIHApXFxue1xcbiAgICBwID0gZmxvb3IocCp2ZWMyKDQuMCwgLTQuMCkgKyAyLjUpO1xcbiAgICBpZiAoY2xhbXAocC54LCAwLjAsIDQuMCkgPT0gcC54ICYmIGNsYW1wKHAueSwgMC4wLCA0LjApID09IHAueSlcXG4gICAge1xcbiAgICAgICAgaWYgKGludChtb2Qobi9leHAyKHAueCArIDUuMCpwLnkpLCAyLjApKSA9PSAxKSByZXR1cm4gMS4wO1xcbiAgICB9XFxuICAgIHJldHVybiAwLjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5O1xcblxcbiAgICB2ZWMzIGNvbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgZmxvb3IoIHV2IC8gcGl4ZWxTaXplICkgKiBwaXhlbFNpemUgLyBkaW1lbnNpb25zLnh5KS5yZ2I7XFxuXFxuICAgIGZsb2F0IGdyYXkgPSAoY29sLnIgKyBjb2wuZyArIGNvbC5iKSAvIDMuMDtcXG5cXG4gICAgZmxvYXQgbiA9ICA2NTUzNi4wOyAgICAgICAgICAgICAvLyAuXFxuICAgIGlmIChncmF5ID4gMC4yKSBuID0gNjU2MDAuMDsgICAgLy8gOlxcbiAgICBpZiAoZ3JheSA+IDAuMykgbiA9IDMzMjc3Mi4wOyAgIC8vICpcXG4gICAgaWYgKGdyYXkgPiAwLjQpIG4gPSAxNTI1NTA4Ni4wOyAvLyBvXFxuICAgIGlmIChncmF5ID4gMC41KSBuID0gMjMzODUxNjQuMDsgLy8gJlxcbiAgICBpZiAoZ3JheSA+IDAuNikgbiA9IDE1MjUyMDE0LjA7IC8vIDhcXG4gICAgaWYgKGdyYXkgPiAwLjcpIG4gPSAxMzE5OTQ1Mi4wOyAvLyBAXFxuICAgIGlmIChncmF5ID4gMC44KSBuID0gMTE1MTI4MTAuMDsgLy8gI1xcblxcbiAgICB2ZWMyIHAgPSBtb2QoIHV2IC8gKCBwaXhlbFNpemUgKiAwLjUgKSwgMi4wKSAtIHZlYzIoMS4wKTtcXG4gICAgY29sID0gY29sICogY2hhcmFjdGVyKG4sIHApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbCwgMS4wKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiA4IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkFzY2lpRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQXNjaWlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXNjaWlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFzY2lpRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBc2NpaUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGl4ZWwgc2l6ZSB1c2VkIGJ5IHRoZSBmaWx0ZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Bc2NpaUZpbHRlciNcbiAgICAgKi9cbiAgICBzaXplOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsb29tRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsb29tRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlciA9IG5ldyBCbHVyWUZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcbn1cblxuQmxvb21GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbG9vbUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbG9vbUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxvb21GaWx0ZXI7XG5cbkJsb29tRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAvL1RPRE8gLSBjb3B5VGV4U3ViSW1hZ2UyRCBjb3VsZCBiZSB1c2VkIGhlcmU/XG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5TQ1JFRU4pO1xuXG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsb29tRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cblxuLyoqXG4gKiBUaGUgQmx1ckRpckZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0b3dhcmQgYSBkaXJlY3Rpb24gdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpclhcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJZXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJEaXJGaWx0ZXIoZGlyWCwgZGlyWSlcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gZmxvYXQgZGlyWDtcXG51bmlmb3JtIGZsb2F0IGRpclk7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbM107XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWSApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApICogMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pICogMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pICogMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSAqIDAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgZGlyWDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogZGlyWCB8fCAwIH0sXG4gICAgICAgICAgICBkaXJZOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJZIHx8IDAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWCBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJYID0gZGlyWCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWSBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJZID0gZGlyWSB8fCAwO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJEaXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJEaXJGaWx0ZXI7XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcikge1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZiAodGhpcy5wYXNzZXMgPT09IDEpIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCByZW5kZXJUYXJnZXQsIGNsZWFyKTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMjsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL3RoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvICh0aGlzLnBhc3NlcysoaSoyKSkgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCByZW5kZXJUYXJnZXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IHZhbHVlICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBkaXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyWDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZGlyWC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJZO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJZLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWUZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBCbHVyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG59XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJGaWx0ZXI7XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHBhc3Nlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5ibHVyWEZpbHRlci5wYXNzZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcyA9IHRoaXMuYmx1cllGaWx0ZXIucGFzc2VzID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1clhGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJYRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAxMiAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwNCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuXFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1clhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1clhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJYRmlsdGVyO1xuXG5CbHVyWEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1clhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJYRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gIE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJZRmlsdGVyIGFwcGxpZXMgYSBob3Jpem9udGFsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAxMiAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDEyICogc3RyZW5ndGgpO1xcblxcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJZRmlsdGVyO1xuXG5CbHVyWUZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gTWF0aC5hYnModGhpcy5zdHJlbmd0aCkgLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIFNtYXJ0IEJsdXIgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTbWFydEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgKiBwZXJjZW50KTtcXG4gICAgICAgIHNhbXBsZS5yZ2IgKj0gc2FtcGxlLmE7XFxuICAgICAgICBjb2xvciArPSBzYW1wbGUgKiB3ZWlnaHQ7XFxuICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgLyB0b3RhbDtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAvPSBnbF9GcmFnQ29sb3IuYSArIDAuMDAwMDE7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgZGVsdGE6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC4xLCB5OiAwLjAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU21hcnRCbHVyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTbWFydEJsdXJGaWx0ZXI7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA1eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIGBgYGpzXG4gKiAgdmFyIGNvbG9yTWF0cml4ID0gbmV3IFBJWEkuQ29sb3JNYXRyaXhGaWx0ZXIoKTtcbiAqICBjb250YWluZXIuZmlsdGVycyA9IFtjb2xvck1hdHJpeF07XG4gKiAgY29sb3JNYXRyaXguY29udHJhc3QoMik7XG4gKiBgYGBcbiAqIEBhdXRob3IgQ2zDqW1lbnQgQ2hlbmViYXVsdCA8Y2xlbWVudEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ29sb3JNYXRyaXhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgbVsyNV07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcblxcbiAgICB2ZWM0IGMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IuciA9IChtWzBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzJdICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IG1bNF07XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5nID0gKG1bNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bN10gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gbVs5XTtcXG5cXG4gICAgIGdsX0ZyYWdDb2xvci5iID0gKG1bMTBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzExXSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IG1bMTRdO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmEgPSAobVsxNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTZdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gbVsxOV07XFxuXFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICcxZnYnLCB2YWx1ZTogW1xuICAgICAgICAgICAgICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvck1hdHJpeEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JNYXRyaXhGaWx0ZXI7XG5cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGN1cnJlbnQgbWF0cml4IGFuZCBzZXQgdGhlIG5ldyBvbmVcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IGlmIHRydWUsIGN1cnJlbnQgbWF0cml4IGFuZCBtYXRyaXggYXJlIG11bHRpcGxpZWQuIElmIGZhbHNlLCBqdXN0IHNldCB0aGUgY3VycmVudCBtYXRyaXggd2l0aCBAcGFyYW0gbWF0cml4XG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fbG9hZE1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgsIG11bHRpcGx5KVxue1xuICAgIG11bHRpcGx5ID0gISFtdWx0aXBseTtcblxuICAgIHZhciBuZXdNYXRyaXggPSBtYXRyaXg7XG5cbiAgICBpZiAobXVsdGlwbHkpIHtcbiAgICAgICAgdGhpcy5fbXVsdGlwbHkobmV3TWF0cml4LCB0aGlzLnVuaWZvcm1zLm0udmFsdWUsIG1hdHJpeCk7XG4gICAgICAgIG5ld01hdHJpeCA9IHRoaXMuX2NvbG9yTWF0cml4KG5ld01hdHJpeCk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgbWF0cml4XG4gICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gbmV3TWF0cml4O1xufTtcblxuLyoqXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQ1J3NcbiAqXG4gKiBAcGFyYW0gb3V0IHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0gYSB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIGIge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyBvdXQge251bWJlcltdfSAobWF0IDV4NClcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpXG57XG5cbiAgICAvLyBSZWQgQ2hhbm5lbFxuICAgIG91dFswXSA9IChhWzBdICogYlswXSkgKyAoYVsxXSAqIGJbNV0pICsgKGFbMl0gKiBiWzEwXSkgKyAoYVszXSAqIGJbMTVdKTtcbiAgICBvdXRbMV0gPSAoYVswXSAqIGJbMV0pICsgKGFbMV0gKiBiWzZdKSArIChhWzJdICogYlsxMV0pICsgKGFbM10gKiBiWzE2XSk7XG4gICAgb3V0WzJdID0gKGFbMF0gKiBiWzJdKSArIChhWzFdICogYls3XSkgKyAoYVsyXSAqIGJbMTJdKSArIChhWzNdICogYlsxN10pO1xuICAgIG91dFszXSA9IChhWzBdICogYlszXSkgKyAoYVsxXSAqIGJbOF0pICsgKGFbMl0gKiBiWzEzXSkgKyAoYVszXSAqIGJbMThdKTtcbiAgICBvdXRbNF0gPSAoYVswXSAqIGJbNF0pICsgKGFbMV0gKiBiWzldKSArIChhWzJdICogYlsxNF0pICsgKGFbM10gKiBiWzE5XSk7XG5cbiAgICAvLyBHcmVlbiBDaGFubmVsXG4gICAgb3V0WzVdID0gKGFbNV0gKiBiWzBdKSArIChhWzZdICogYls1XSkgKyAoYVs3XSAqIGJbMTBdKSArIChhWzhdICogYlsxNV0pO1xuICAgIG91dFs2XSA9IChhWzVdICogYlsxXSkgKyAoYVs2XSAqIGJbNl0pICsgKGFbN10gKiBiWzExXSkgKyAoYVs4XSAqIGJbMTZdKTtcbiAgICBvdXRbN10gPSAoYVs1XSAqIGJbMl0pICsgKGFbNl0gKiBiWzddKSArIChhWzddICogYlsxMl0pICsgKGFbOF0gKiBiWzE3XSk7XG4gICAgb3V0WzhdID0gKGFbNV0gKiBiWzNdKSArIChhWzZdICogYls4XSkgKyAoYVs3XSAqIGJbMTNdKSArIChhWzhdICogYlsxOF0pO1xuICAgIG91dFs5XSA9IChhWzVdICogYls0XSkgKyAoYVs2XSAqIGJbOV0pICsgKGFbN10gKiBiWzE0XSkgKyAoYVs4XSAqIGJbMTldKTtcblxuICAgIC8vIEJsdWUgQ2hhbm5lbFxuICAgIG91dFsxMF0gPSAoYVsxMF0gKiBiWzBdKSArIChhWzExXSAqIGJbNV0pICsgKGFbMTJdICogYlsxMF0pICsgKGFbMTNdICogYlsxNV0pO1xuICAgIG91dFsxMV0gPSAoYVsxMF0gKiBiWzFdKSArIChhWzExXSAqIGJbNl0pICsgKGFbMTJdICogYlsxMV0pICsgKGFbMTNdICogYlsxNl0pO1xuICAgIG91dFsxMl0gPSAoYVsxMF0gKiBiWzJdKSArIChhWzExXSAqIGJbN10pICsgKGFbMTJdICogYlsxMl0pICsgKGFbMTNdICogYlsxN10pO1xuICAgIG91dFsxM10gPSAoYVsxMF0gKiBiWzNdKSArIChhWzExXSAqIGJbOF0pICsgKGFbMTJdICogYlsxM10pICsgKGFbMTNdICogYlsxOF0pO1xuICAgIG91dFsxNF0gPSAoYVsxMF0gKiBiWzRdKSArIChhWzExXSAqIGJbOV0pICsgKGFbMTJdICogYlsxNF0pICsgKGFbMTNdICogYlsxOV0pO1xuXG4gICAgLy8gQWxwaGEgQ2hhbm5lbFxuICAgIG91dFsxNV0gPSAoYVsxNV0gKiBiWzBdKSArIChhWzE2XSAqIGJbNV0pICsgKGFbMTddICogYlsxMF0pICsgKGFbMThdICogYlsxNV0pO1xuICAgIG91dFsxNl0gPSAoYVsxNV0gKiBiWzFdKSArIChhWzE2XSAqIGJbNl0pICsgKGFbMTddICogYlsxMV0pICsgKGFbMThdICogYlsxNl0pO1xuICAgIG91dFsxN10gPSAoYVsxNV0gKiBiWzJdKSArIChhWzE2XSAqIGJbN10pICsgKGFbMTddICogYlsxMl0pICsgKGFbMThdICogYlsxN10pO1xuICAgIG91dFsxOF0gPSAoYVsxNV0gKiBiWzNdKSArIChhWzE2XSAqIGJbOF0pICsgKGFbMTddICogYlsxM10pICsgKGFbMThdICogYlsxOF0pO1xuICAgIG91dFsxOV0gPSAoYVsxNV0gKiBiWzRdKSArIChhWzE2XSAqIGJbOV0pICsgKGFbMTddICogYlsxNF0pICsgKGFbMThdICogYlsxOV0pO1xuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEByZXR1cm4gbSB7bnVtYmVyW119IChtYXQgNXg0KSB3aXRoIGFsbCB2YWx1ZXMgYmV0d2VlbiAwLTFcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9jb2xvck1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgLy8gQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICAgIHZhciBtID0gbmV3IEZsb2F0MzJBcnJheShtYXRyaXgpO1xuICAgIG1bNF0gLz0gMjU1O1xuICAgIG1bOV0gLz0gMjU1O1xuICAgIG1bMTRdIC89IDI1NTtcbiAgICBtWzE5XSAvPSAyNTU7XG5cbiAgICByZXR1cm4gbTtcbn07XG5cbi8qKlxuICogQWRqdXN0cyBicmlnaHRuZXNzXG4gKlxuICogQHBhcmFtIGIge251bWJlcn0gdmFsdWUgb2YgdGhlIGJyaWd0aG5lc3MgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJpZ2h0bmVzcyA9IGZ1bmN0aW9uIChiLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBiLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCBiLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCBiLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgbWF0cmljZXMgaW4gZ3JleSBzY2FsZXNcbiAqXG4gKiBAcGFyYW0gc2NhbGUge251bWJlcn0gdmFsdWUgb2YgdGhlIGdyZXkgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlID0gZnVuY3Rpb24gKHNjYWxlLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuLy9BbWVyaWNhbml6ZWQgYWxpYXNcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmF5c2NhbGUgPSBDb2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlO1xuXG4vKipcbiAqIFNldCB0aGUgYmxhY2sgYW5kIHdoaXRlIG1hdHJpY2VcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ibGFja0FuZFdoaXRlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBodWUgcHJvcGVydHkgb2YgdGhlIGNvbG9yXG4gKlxuICogQHBhcmFtIHJvdGF0aW9uIHtudW1iZXJ9IGluIGRlZ3JlZXNcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5odWUgPSBmdW5jdGlvbiAocm90YXRpb24sIG11bHRpcGx5KVxue1xuICAgIHJvdGF0aW9uID0gKHJvdGF0aW9uIHx8IDApIC8gMTgwICogTWF0aC5QSTtcbiAgICB2YXIgY29zID0gTWF0aC5jb3Mocm90YXRpb24pLFxuICAgICAgICBzaW4gPSBNYXRoLnNpbihyb3RhdGlvbik7XG5cbiAgICAvLyBsdW1pbmFuY2VSZWQsIGx1bWluYW5jZUdyZWVuLCBsdW1pbmFuY2VCbHVlXG4gICAgdmFyIGx1bVIgPSAwLjIxMywgLy8gb3IgMC4zMDg2XG4gICAgICAgIGx1bUcgPSAwLjcxNSwgLy8gb3IgMC42MDk0XG4gICAgICAgIGx1bUIgPSAwLjA3MjsgLy8gb3IgMC4wODIwXG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBsdW1SICsgY29zICogKDEgLSBsdW1SKSArIHNpbiAqICgtbHVtUiksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKC1sdW1HKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoMSAtIGx1bUIpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgwLjE0MyksIGx1bUcgKyBjb3MgKiAoMSAtIGx1bUcpICsgc2luICogKDAuMTQwKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoLTAuMjgzKSwgMCwgMCxcbiAgICAgICAgbHVtUiArIGNvcyAqICgtbHVtUikgKyBzaW4gKiAoLSgxIC0gbHVtUikpLCBsdW1HICsgY29zICogKC1sdW1HKSArIHNpbiAqIChsdW1HKSwgbHVtQiArIGNvcyAqICgxIC0gbHVtQikgKyBzaW4gKiAobHVtQiksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLyoqXG4gKiBTZXQgdGhlIGNvbnRyYXN0IG1hdHJpeCwgaW5jcmVhc2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBkYXJrIGFuZCBicmlnaHRcbiAqIEluY3JlYXNlIGNvbnRyYXN0IDogc2hhZG93cyBkYXJrZXIgYW5kIGhpZ2hsaWdodHMgYnJpZ2h0ZXJcbiAqIERlY3JlYXNlIGNvbnRyYXN0IDogYnJpbmcgdGhlIHNoYWRvd3MgdXAgYW5kIHRoZSBoaWdobGlnaHRzIGRvd25cbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBjb250cmFzdFxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbnRyYXN0ID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHYgPSAoYW1vdW50IHx8IDApICsgMTtcbiAgICB2YXIgbyA9IC0xMjggKiAodiAtIDEpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgdiwgMCwgMCwgMCwgbyxcbiAgICAgICAgMCwgdiwgMCwgMCwgbyxcbiAgICAgICAgMCwgMCwgdiwgMCwgbyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHNhdHVyYXRpb24gbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGNvbG9yc1xuICogSW5jcmVhc2Ugc2F0dXJhdGlvbiA6IGluY3JlYXNlIGNvbnRyYXN0LCBicmlnaHRuZXNzLCBhbmQgc2hhcnBuZXNzXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNhdHVyYXRlID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHggPSAoYW1vdW50IHx8IDApICogMiAvIDMgKyAxO1xuICAgIHZhciB5ID0gKCh4IC0gMSkgKiAtMC41KTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHgsIHksIHksIDAsIDAsXG4gICAgICAgIHksIHgsIHksIDAsIDAsXG4gICAgICAgIHksIHksIHgsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRGVzYXR1cmF0ZSBpbWFnZSAocmVtb3ZlIGNvbG9yKVxuICpcbiAqIENhbGwgdGhlIHNhdHVyYXRlIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmRlc2F0dXJhdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICB0aGlzLnNhdHVyYXRlKC0xKTtcbn07XG5cbi8qKlxuICogTmVnYXRpdmUgaW1hZ2UgKGludmVyc2Ugb2YgY2xhc3NpYyByZ2IgbWF0cml4KVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uZWdhdGl2ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAxLCAxLCAwLCAwLFxuICAgICAgICAxLCAwLCAxLCAwLCAwLFxuICAgICAgICAxLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNlcGlhIGltYWdlXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNlcGlhID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMzkzLCAwLjc2ODk5OTksIDAuMTg4OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMzQ5LCAwLjY4NTk5OTksIDAuMTY3OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMjcyLCAwLjUzMzk5OTksIDAuMTMwOTk5OTksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgbW90aW9uIHBpY3R1cmUgcHJvY2VzcyBpbnZlbnRlZCBpbiAxOTE2ICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50ZWNobmljb2xvciA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjkxMjUyNzc4OTE0NTYwODMsIC0wLjg1NDUzNDQ5NzY5NTE2NDUsIC0wLjA5MTU1NTA4NDgyNzU1NTg1LCAwLCAxMS43OTM2MDM0MzQzNzczMzcsXG4gICAgICAgIC0wLjMwODc4MzMzODU5MjgwOTcsIDEuNzY1ODkwODU1NTQ1ODQyOCwgLTAuMTA2MDE3NDMwNzQ3MjIyNDUsIDAsIC03MC4zNTIwNTE2MTQ2MTM5OCxcbiAgICAgICAgLTAuMjMxMTAzMzc3NTQ4NjE2LCAtMC43NTAxODk5MTk3NDQwMjEyLCAxLjg0NzU5NzgxNjEwODE4OSwgMCwgMzAuOTUwOTQwODY5NDkxMTM4LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFBvbGFyb2lkIGZpbHRlclxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wb2xhcm9pZCA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjQzOCwgLTAuMDYyLCAtMC4wNjIsIDAsIDAsXG4gICAgICAgIC0wLjEyMiwgMS4zNzgsIC0wLjEyMiwgMCwgMCxcbiAgICAgICAgLTAuMDE2LCAtMC4wMTYsIDEuNDgzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEZpbHRlciB3aG8gdHJhbnNmb3JtcyA6IFJlZCAtPiBCbHVlIGFuZCBCbHVlIC0+IFJlZFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50b0JHUiA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIENvbG9yIHJldmVyc2FsIGZpbG0gaW50cm9kdWNlZCBieSBFYXN0bWFuIEtvZGFrIGluIDE5MzUuICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5rb2RhY2hyb21lID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuMTI4NTU4MjM5NjU5MzUyNSwgLTAuMzk2NzM4MjI4MzYwMTM0OCwgLTAuMDM5OTI1NTkxNzI5MjE3OTMsIDAsIDYzLjcyOTU4NzYyMTk2NTAyLFxuICAgICAgICAtMC4xNjQwNDMzOTk2MjI0NDYxNiwgMS4wODM1MjUxNTY2MjkxMzA0LCAtMC4wNTQ5ODgwNTExNTYzMzEzMiwgMCwgMjQuNzMyNDA3ODk2NzA2MjAzLFxuICAgICAgICAtMC4xNjc4NjAxMDcwNjE1NTc2MywgLTAuNTYwMzQxNjI3NzY5NTI0OCwgMS42MDE0ODUwNzYxOTY0OTQzLCAwLCAzNS42Mjk4MjgwNzQ2MDk0NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBCcm93biBkZWxpY2lvdXMgYnJvd25pIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJvd25pID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNTk5NzAyMzQ5ODE1OTcxNSwgMC4zNDU1MzI0MzA0ODM5MTI2MywgLTAuMjcwODI5ODY3NDUzODA0MiwgMCwgNDcuNDMxOTI4NTU2MDA4NzMsXG4gICAgICAgIC0wLjAzNzcwMzI0OTgzNzc4MzE1NywgMC44NjA5NTc3NTg3OTkyNjQxLCAwLjE1MDU5NTUyMzg4NDU5OTEzLCAwLCAtMzYuOTY4NDE0OTgzMTkxMjcsXG4gICAgICAgIDAuMjQxMTM2MzUxMjgxNTMzMzUsIC0wLjA3NDQxMDM3OTA4NDIyNDkyLCAwLjQ0OTcyMTgyMDY0ODc3MTUzLCAwLCAtNy41NjIwNzUyNzc1OTEyODMsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBWaW50YWdlIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudmludGFnZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjYyNzkzNDU2MzU2MDU5OTQsIDAuMzIwMjE4MzQyMDgxOTM2NywgLTAuMDM5NjU0MDgyMTEzMTI0NTMsIDAsIDkuNjUxMjg1ODM1Mjk0MTIzLFxuICAgICAgICAwLjAyNTc4Mzk3NzA0ODA4ODY4LCAwLjY0NDExODg2NDQzNzQ3NzEsIDAuMDMyNTkxMjc2MTYxNDkyOTQsIDAsIDcuNDYyODI5MTc2NDcwNTkxLFxuICAgICAgICAwLjA0NjYwNTU1NTY3ODI3MTksIC0wLjA4NTEyMzI5ODcyNDc4OTEsIDAuNTI0MTY0ODAxODcwMDQ2NSwgMCwgNS4xNTkxOTA1ODgyMzUyOTYsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBXZSBkb24ndCBrbm93IGV4YWN0bHkgd2hhdCBpdCBkb2VzLCBraW5kIG9mIGdyYWRpZW50IG1hcCwgYnV0IGZ1bm55IHRvIHBsYXkgd2l0aCFcbiAqXG4gKiBAcGFyYW0gZGVzYXR1cmF0aW9uIHtudW1iZXJ9XG4gKiBAcGFyYW0gdG9uZWQge251bWJlcn1cbiAqIEBwYXJhbSBsaWdodENvbG9yIHtzdHJpbmd9IChleGFtcGxlIDogXCIweEZGRTU4MFwiKVxuICogQHBhcmFtIGRhcmtDb2xvciB7c3RyaW5nfSAgKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbG9yVG9uZSA9IGZ1bmN0aW9uIChkZXNhdHVyYXRpb24sIHRvbmVkLCBsaWdodENvbG9yLCBkYXJrQ29sb3IsIG11bHRpcGx5KVxue1xuICAgIGRlc2F0dXJhdGlvbiA9IGRlc2F0dXJhdGlvbiB8fCAwLjI7XG4gICAgdG9uZWQgPSB0b25lZCB8fCAwLjE1O1xuICAgIGxpZ2h0Q29sb3IgPSBsaWdodENvbG9yIHx8IDB4RkZFNTgwO1xuICAgIGRhcmtDb2xvciA9IGRhcmtDb2xvciB8fCAweDMzODAwMDtcblxuICAgIHZhciBsUiA9ICgobGlnaHRDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEcgPSAoKGxpZ2h0Q29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEIgPSAobGlnaHRDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgdmFyIGRSID0gKChkYXJrQ29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGRHID0gKChkYXJrQ29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEIgPSAoZGFya0NvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjMsIDAuNTksIDAuMTEsIDAsIDAsXG4gICAgICAgIGxSLCBsRywgbEIsIGRlc2F0dXJhdGlvbiwgMCxcbiAgICAgICAgZFIsIGRHLCBkQiwgdG9uZWQsIDAsXG4gICAgICAgIGxSIC0gZFIsIGxHIC0gZEcsIGxCIC0gZEIsIDAsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBOaWdodCBlZmZlY3RcbiAqXG4gKiBAcGFyYW0gaW50ZW5zaXR5IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubmlnaHQgPSBmdW5jdGlvbiAoaW50ZW5zaXR5LCBtdWx0aXBseSlcbntcbiAgICBpbnRlbnNpdHkgPSBpbnRlbnNpdHkgfHwgMC4xO1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGludGVuc2l0eSAqICggLTIuMCksIC1pbnRlbnNpdHksIDAsIDAsIDAsXG4gICAgICAgIC1pbnRlbnNpdHksIDAsIGludGVuc2l0eSwgMCwgMCxcbiAgICAgICAgMCwgaW50ZW5zaXR5LCBpbnRlbnNpdHkgKiAyLjAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLypcbiAqIFByZWRhdG9yIGVmZmVjdFxuICpcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIGEgbmV3IGluZGVwZW50IG9uZVxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gaG93IG11Y2ggdGhlIHByZWRhdG9yIGZlZWxzIGhpcyBmdXR1cmUgdmljdGltXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucHJlZGF0b3IgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxMS4yMjQxMzA2MzA0OTMxNjQgKiBhbW91bnQsIC00Ljc5NDQ4Njk5OTUxMTcxOSAqIGFtb3VudCwgLTIuODc0NjExODU0NTUzMjIyNyAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC40MDM0MjQzODIyMDk3Nzc4MyAqIGFtb3VudCxcbiAgICAgICAgLTMuNjMzMDY5NzUzNjQ2ODUwNiAqIGFtb3VudCwgOS4xOTMxNTcxOTYwNDQ5MjIgKiBhbW91bnQsIC0yLjk1MTgxMDgzNjc5MTk5MiAqIGFtb3VudCwgMCAqIGFtb3VudCwgLTEuMzE2MTM1MDQ4ODY2MjcyICogYW1vdW50LFxuICAgICAgICAtMy4yMTg0MTk3OTAyNjc5NDQzICogYW1vdW50LCAtNC4yMzc1MDMwNTE3NTc4MTI1ICogYW1vdW50LCA3LjQ3NjQ0ODA1OTA4MjAzMSAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC44MDQ0NDU5MjIzNzQ3MjUzICogYW1vdW50LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogTFNEIGVmZmVjdFxuICpcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gSG93IGNyYXp5IGlzIHlvdXIgZWZmZWN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubHNkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDIsIC0wLjQsIDAuNSwgMCwgMCxcbiAgICAgICAgLTAuNSwgMiwgLTAuNCwgMCwgMCxcbiAgICAgICAgLTAuNCwgLTAuNSwgMywgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIHRoZSBkZWZhdWx0IG9uZVxuICpcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBmYWxzZSk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hdHJpeCBvZiB0aGUgY29sb3IgbWF0cml4IGZpbHRlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvck1hdHJpeEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCBbMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMF1cbiAgICAgKi9cbiAgICBtYXRyaXg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgbG93ZXJzIHRoZSBjb2xvciBkZXB0aCBvZiB5b3VyIGltYWdlIGJ5IHRoZSBnaXZlbiBhbW91bnQsIHByb2R1Y2luZyBhbiBpbWFnZSB3aXRoIGEgc21hbGxlciBwYWxldHRlLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvclN0ZXBGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc3RlcDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBjb2xvciA9IGZsb29yKGNvbG9yICogc3RlcCkgLyBzdGVwO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdGVwOiB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvclN0ZXBGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yU3RlcEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2Ygc3RlcHMgdG8gcmVkdWNlIHRoZSBwYWxldHRlIGJ5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29sb3JTdGVwRmlsdGVyI1xuICAgICAqL1xuICAgIHN0ZXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb252b2x1dGlvbkZpbHRlciBjbGFzcyBhcHBsaWVzIGEgbWF0cml4IGNvbnZvbHV0aW9uIGZpbHRlciBlZmZlY3QuXG4gKiBBIGNvbnZvbHV0aW9uIGNvbWJpbmVzIHBpeGVscyBpbiB0aGUgaW5wdXQgaW1hZ2Ugd2l0aCBuZWlnaGJvcmluZyBwaXhlbHMgdG8gcHJvZHVjZSBhIG5ldyBpbWFnZS5cbiAqIEEgd2lkZSB2YXJpZXR5IG9mIGltYWdlIGVmZmVjdHMgY2FuIGJlIGFjaGlldmVkIHRocm91Z2ggY29udm9sdXRpb25zLCBpbmNsdWRpbmcgYmx1cnJpbmcsIGVkZ2VcbiAqIGRldGVjdGlvbiwgc2hhcnBlbmluZywgZW1ib3NzaW5nLCBhbmQgYmV2ZWxpbmcuIFRoZSBtYXRyaXggc2hvdWxkIGJlIHNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBTZWUgaHR0cDovL2RvY3MuZ2ltcC5vcmcvZW4vcGx1Zy1pbi1jb252bWF0cml4Lmh0bWwgZm9yIG1vcmUgaW5mby5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSBBbiBhcnJheSBvZiB2YWx1ZXMgdXNlZCBmb3IgbWF0cml4IHRyYW5zZm9ybWF0aW9uLiBTcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFdpZHRoIG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqL1xuZnVuY3Rpb24gQ29udm9sdXRpb25GaWx0ZXIobWF0cml4LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgbWVkaXVtcCB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTtcXG51bmlmb3JtIGZsb2F0IG1hdHJpeFs5XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjNCBjMTEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgLSB0ZXhlbFNpemUpOyAvLyB0b3AgbGVmdFxcbiAgIHZlYzQgYzEyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55IC0gdGV4ZWxTaXplLnkpKTsgLy8gdG9wIGNlbnRlclxcbiAgIHZlYzQgYzEzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgcmlnaHRcXG5cXG4gICB2ZWM0IGMyMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCBsZWZ0XFxuICAgdmVjNCBjMjIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpOyAvLyBtaWQgY2VudGVyXFxuICAgdmVjNCBjMjMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSkpOyAvLyBtaWQgcmlnaHRcXG5cXG4gICB2ZWM0IGMzMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGxlZnRcXG4gICB2ZWM0IGMzMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLngsIHZUZXh0dXJlQ29vcmQueSArIHRleGVsU2l6ZS55KSk7IC8vIGJvdHRvbSBjZW50ZXJcXG4gICB2ZWM0IGMzMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIHRleGVsU2l6ZSk7IC8vIGJvdHRvbSByaWdodFxcblxcbiAgIGdsX0ZyYWdDb2xvciA9XFxuICAgICAgIGMxMSAqIG1hdHJpeFswXSArIGMxMiAqIG1hdHJpeFsxXSArIGMxMyAqIG1hdHJpeFsyXSArXFxuICAgICAgIGMyMSAqIG1hdHJpeFszXSArIGMyMiAqIG1hdHJpeFs0XSArIGMyMyAqIG1hdHJpeFs1XSArXFxuICAgICAgIGMzMSAqIG1hdHJpeFs2XSArIGMzMiAqIG1hdHJpeFs3XSArIGMzMyAqIG1hdHJpeFs4XTtcXG5cXG4gICBnbF9GcmFnQ29sb3IuYSA9IGMyMi5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hdHJpeDogICAgIHsgdHlwZTogJzFmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCkgfSxcbiAgICAgICAgICAgIHRleGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSAvIHdpZHRoLCB5OiAxIC8gaGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb252b2x1dGlvbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29udm9sdXRpb25GaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hdHJpeC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMS90aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueCA9IDEvdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS55ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQSBDcm9zcyBIYXRjaCBlZmZlY3QgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDcm9zc0hhdGNoRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGZsb2F0IGx1bSA9IGxlbmd0aCh0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQueHkpLnJnYik7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wLCAxLjAsIDEuMCwgMS4wKTtcXG5cXG4gICAgaWYgKGx1bSA8IDEuMDApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC43NSlcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjUwKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54ICsgZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuMylcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55IC0gNS4wLCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblwiXG4gICAgKTtcbn1cblxuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNyb3NzSGF0Y2hGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBEaXNwbGFjZW1lbnRGaWx0ZXIgY2xhc3MgdXNlcyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20gdGhlIHNwZWNpZmllZCB0ZXh0dXJlIChjYWxsZWQgdGhlIGRpc3BsYWNlbWVudCBtYXApIHRvIHBlcmZvcm0gYSBkaXNwbGFjZW1lbnQgb2YgYW4gb2JqZWN0LlxuICogWW91IGNhbiB1c2UgdGhpcyBmaWx0ZXIgdG8gYXBwbHkgYWxsIG1hbm9yIG9mIGNyYXp5IHdhcnBpbmcgZWZmZWN0c1xuICogQ3VycmVudGx5IHRoZSByIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB4IGFuZCB0aGUgZyBwcm9wZXJ0eSBvZiB0aGUgdGV4dHVyZSBpcyB1c2VkIHRvIG9mZnNldCB0aGUgeS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiAobWFrZSBzdXJlIGl0cyBhZGRlZCB0byB0aGUgc2NlbmUhKVxuICovXG5mdW5jdGlvbiBEaXNwbGFjZW1lbnRGaWx0ZXIoc3ByaXRlLCBzY2FsZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuICAgIHNwcml0ZS5yZW5kZXJhYmxlID0gZmFsc2U7XG5cbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2TWFwQ29vcmQgPSAoIG90aGVyTWF0cml4ICogdmVjMyggYVRleHR1cmVDb29yZCwgMS4wKSAgKS54eTtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMiBzY2FsZTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXBTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IG1hcCA9ICB0ZXh0dXJlMkQobWFwU2FtcGxlciwgdk1hcENvb3JkKTtcXG5cXG4gICBtYXAgLT0gMC41O1xcbiAgIG1hcC54eSAqPSBzY2FsZTtcXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgbWFwLngsIHZUZXh0dXJlQ29vcmQueSArIG1hcC55KSk7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtYXBTYW1wbGVyOiAgICAgeyB0eXBlOiAnc2FtcGxlcjJEJywgdmFsdWU6IHNwcml0ZS50ZXh0dXJlIH0sXG4gICAgICAgICAgICBvdGhlck1hdHJpeDogICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBtYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSkgfSxcbiAgICAgICAgICAgIHNjYWxlOiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG5cbiAgICBpZiAoc2NhbGUgPT09IG51bGwgfHwgc2NhbGUgPT09IHVuZGVmaW5lZClcbiAgICB7XG4gICAgICAgIHNjYWxlID0gMjA7XG4gICAgfVxuXG4gICAgdGhpcy5zY2FsZSA9IG5ldyBjb3JlLlBvaW50KHNjYWxlLCBzY2FsZSk7XG59XG5cbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGFjZW1lbnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERpc3BsYWNlbWVudEZpbHRlcjtcblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICBmaWx0ZXJNYW5hZ2VyLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeChpbnB1dC5mcmFtZSwgdGhpcy5tYXNrU3ByaXRlLCB0aGlzLm1hc2tNYXRyaXgpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5vdGhlck1hdHJpeC52YWx1ZSA9IHRoaXMubWFza01hdHJpeC50b0FycmF5KHRydWUpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueCA9IHRoaXMuc2NhbGUueCAqICgxL2lucHV0LmZyYW1lLndpZHRoKTtcbiAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlLnkgPSB0aGlzLnNjYWxlLnkgKiAoMS9pbnB1dC5mcmFtZS5oZWlnaHQpO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRGlzcGxhY2VtZW50RmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvZnVuL2RvdHNjcmVlbi5qc1xuICovXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIGRvdHNjcmVlbiBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgdG8gYmUgbWFkZSBvdXQgb2ZcbiAqIGJsYWNrIGFuZCB3aGl0ZSBoYWxmdG9uZSBkb3RzIGxpa2UgYW4gb2xkIHByaW50ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIERvdFNjcmVlbkZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XFxuXFxuZmxvYXQgcGF0dGVybigpXFxue1xcbiAgIGZsb2F0IHMgPSBzaW4oYW5nbGUpLCBjID0gY29zKGFuZ2xlKTtcXG4gICB2ZWMyIHRleCA9IHZUZXh0dXJlQ29vcmQgKiBkaW1lbnNpb25zLnh5O1xcbiAgIHZlYzIgcG9pbnQgPSB2ZWMyKFxcbiAgICAgICBjICogdGV4LnggLSBzICogdGV4LnksXFxuICAgICAgIHMgKiB0ZXgueCArIGMgKiB0ZXgueVxcbiAgICkgKiBzY2FsZTtcXG4gICByZXR1cm4gKHNpbihwb2ludC54KSAqIHNpbihwb2ludC55KSkgKiA0LjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGZsb2F0IGF2ZXJhZ2UgPSAoY29sb3IuciArIGNvbG9yLmcgKyBjb2xvci5iKSAvIDMuMDtcXG4gICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzMoYXZlcmFnZSAqIDEwLjAgLSA1LjAgKyBwYXR0ZXJuKCkpLCBjb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzY2FsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEb3RTY3JlZW5GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERvdFNjcmVlbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBzY2FsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSByYWRpdXMgb2YgdGhlIGVmZmVjdC5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Eb3RTY3JlZW5GaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllUaW50RmlsdGVyIGFwcGxpZXMgYSB2ZXJ0aWNhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1cllUaW50RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24rb2Zmc2V0KSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMyBjb2xvcjtcXG51bmlmb3JtIGZsb2F0IGFscGhhO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBzdW0gPSB2ZWM0KDAuMCk7XFxuXFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KCBjb2xvci5yZ2IgKiBzdW0uYSAqIGFscGhhLCBzdW0uYSAqIGFscGhhICk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgLyA1MTIgfSxcbiAgICAgICAgICAgIGNvbG9yOiB7IHR5cGU6ICdjJywgdmFsdWU6IFswLDAsMF19LFxuICAgICAgICAgICAgYWxwaGE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNyB9LFxuICAgICAgICAgICAgb2Zmc2V0OiB7IHR5cGU6ICcyZicsIHZhbHVlOls1LCA1XX0sXG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZToxfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJZVGludEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllUaW50RmlsdGVyO1xuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCBjbGVhcik7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJZVGludEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllUaW50RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZVGludEZpbHRlciA9IHJlcXVpcmUoJy4vQmx1cllUaW50RmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIERyb3BTaGFkb3dGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRHJvcFNoYWRvd0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyID0gbmV3IEJsdXJZVGludEZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIHRoaXMucGFkZGluZyA9IDMwO1xuXG4gICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgdGhpcy5fYW5nbGUgPSA0NSAqIE1hdGguUEkgLyAxODA7XG4gICAgdGhpcy5fZGlzdGFuY2UgPSAxMDtcbiAgICB0aGlzLmFscGhhID0gMC43NTtcbiAgICB0aGlzLmhpZGVPYmplY3QgPSBmYWxzZTtcbiAgICB0aGlzLmJsZW5kTW9kZSA9IGNvcmUuQkxFTkRfTU9ERVMuTVVMVElQTFk7XG59XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERyb3BTaGFkb3dGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERyb3BTaGFkb3dGaWx0ZXI7XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICBpZih0aGlzLl9kaXJ0eVBvc2l0aW9uKVxuICAgIHtcbiAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVswXSA9IE1hdGguc2luKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5vZmZzZXQudmFsdWVbMV0gPSBNYXRoLmNvcyh0aGlzLl9hbmdsZSkgKiB0aGlzLl9kaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKHRoaXMuYmxlbmRNb2RlKTtcblxuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZighdGhpcy5oaWRlT2JqZWN0KVxuICAgIHtcblxuICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuICAgIH1cblxuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNvbG9yIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgY29sb3I6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIGNvcmUudXRpbHMucmdiMmhleCggdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmNvbG9yLnZhbHVlID0gY29yZS51dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbHBoYSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFscGhhOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzdGFuY2Ugb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBkaXN0YW5jZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3RhbmNlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYW5nbGUgb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fYW5nbGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2FuZ2xlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZ3JleXNjYWxlcyB0aGUgcGFsZXR0ZSBvZiB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gR3JheUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGdyYXk7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peChnbF9GcmFnQ29sb3IucmdiLCB2ZWMzKDAuMjEyNipnbF9GcmFnQ29sb3IuciArIDAuNzE1MipnbF9GcmFnQ29sb3IuZyArIDAuMDcyMipnbF9GcmFnQ29sb3IuYiksIGdyYXkpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBncmF5OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkdyYXlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5HcmF5RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEdyYXlGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmF5LiAxIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGJsYWNrIGFuZCB3aGl0ZSwgMCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuR3JheUZpbHRlciNcbiAgICAgKi9cbiAgICBncmF5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBmaWx0ZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5maWx0ZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEFzY2lpRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9hc2NpaS9Bc2NpaUZpbHRlcicpLFxuICAgIEJsb29tRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibG9vbS9CbG9vbUZpbHRlcicpLFxuICAgIEJsdXJGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJGaWx0ZXInKSxcbiAgICBCbHVyWEZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJZRmlsdGVyJyksXG4gICAgQmx1ckRpckZpbHRlcjogICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckRpckZpbHRlcicpLFxuICAgIENvbG9yTWF0cml4RmlsdGVyOiAgcmVxdWlyZSgnLi9jb2xvci9Db2xvck1hdHJpeEZpbHRlcicpLFxuICAgIENvbG9yU3RlcEZpbHRlcjogICAgcmVxdWlyZSgnLi9jb2xvci9Db2xvclN0ZXBGaWx0ZXInKSxcbiAgICBDb252b2x1dGlvbkZpbHRlcjogIHJlcXVpcmUoJy4vY29udm9sdXRpb24vQ29udm9sdXRpb25GaWx0ZXInKSxcbiAgICBDcm9zc0hhdGNoRmlsdGVyOiAgIHJlcXVpcmUoJy4vY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyJyksXG4gICAgRGlzcGxhY2VtZW50RmlsdGVyOiByZXF1aXJlKCcuL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXInKSxcbiAgICBEb3RTY3JlZW5GaWx0ZXI6ICAgIHJlcXVpcmUoJy4vZG90L0RvdFNjcmVlbkZpbHRlcicpLFxuICAgIEdyYXlGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ncmF5L0dyYXlGaWx0ZXInKSxcbiAgICBEcm9wU2hhZG93RmlsdGVyOiAgIHJlcXVpcmUoJy4vZHJvcHNoYWRvdy9Ecm9wU2hhZG93RmlsdGVyJyksXG4gICAgSW52ZXJ0RmlsdGVyOiAgICAgICByZXF1aXJlKCcuL2ludmVydC9JbnZlcnRGaWx0ZXInKSxcbiAgICBOb2lzZUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vbm9pc2UvTm9pc2VGaWx0ZXInKSxcbiAgICBQaXhlbGF0ZUZpbHRlcjogICAgIHJlcXVpcmUoJy4vcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXInKSxcbiAgICBSR0JTcGxpdEZpbHRlcjogICAgIHJlcXVpcmUoJy4vcmdiL1JHQlNwbGl0RmlsdGVyJyksXG4gICAgU2hvY2t3YXZlRmlsdGVyOiAgICByZXF1aXJlKCcuL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXInKSxcbiAgICBTZXBpYUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vc2VwaWEvU2VwaWFGaWx0ZXInKSxcbiAgICBTbWFydEJsdXJGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vYmx1ci9TbWFydEJsdXJGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFhGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlcicpLFxuICAgIFR3aXN0RmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi90d2lzdC9Ud2lzdEZpbHRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBpbnZlcnRzIHlvdXIgRGlzcGxheSBPYmplY3RzIGNvbG9ycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gSW52ZXJ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIGZsb2F0IGludmVydDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoICh2ZWMzKDEpLWdsX0ZyYWdDb2xvci5yZ2IpICogZ2xfRnJhZ0NvbG9yLmEsIGdsX0ZyYWdDb2xvci5yZ2IsIDEuMCAtIGludmVydCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgaW52ZXJ0OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkludmVydEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkludmVydEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnZlcnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludmVydEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgaW52ZXJ0LiBgMWAgd2lsbCBmdWxseSBpbnZlcnQgdGhlIGNvbG9ycywgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5JbnZlcnRGaWx0ZXIjXG4gICAgICovXG4gICAgaW52ZXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuaW52ZXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYWRqdXN0L25vaXNlLmpzXG4gKi9cblxuLyoqXG4gKiBBIE5vaXNlIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIE5vaXNlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IG5vaXNlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IHJhbmQodmVjMiBjbylcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGNvLnh5LCB2ZWMyKDEyLjk4OTgsIDc4LjIzMykpKSAqIDQzNzU4LjU0NTMpO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGZsb2F0IGRpZmYgPSAocmFuZCh2VGV4dHVyZUNvb3JkKSAtIDAuNSkgKiBub2lzZTtcXG5cXG4gICAgY29sb3IuciArPSBkaWZmO1xcbiAgICBjb2xvci5nICs9IGRpZmY7XFxuICAgIGNvbG9yLmIgKz0gZGlmZjtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbm9pc2U6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Ob2lzZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbk5vaXNlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE5vaXNlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBOb2lzZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTm9pc2VGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGFtb3VudCBvZiBub2lzZSB0byBhcHBseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLk5vaXNlRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDAuNVxuICAgICAqL1xuICAgIG5vaXNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm5vaXNlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSBwaXhlbGF0ZSBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgJ2Jsb2NreScuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFBpeGVsYXRlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZlYzIgc2l6ZSA9IGRpbWVuc2lvbnMueHkgLyBwaXhlbFNpemU7XFxuXFxuICAgIHZlYzIgY29sb3IgPSBmbG9vciggKCB2VGV4dHVyZUNvb3JkICogc2l6ZSApICkgLyBzaXplICsgcGl4ZWxTaXplL2RpbWVuc2lvbnMueHkgKiAwLjU7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgY29sb3IpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsICB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICd2MicsICAgdmFsdWU6IHsgeDogMTAsIHk6IDEwIH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQaXhlbGF0ZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gUGl4ZWxhdGVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgYSBwb2ludCB0aGF0IGRlc2NyaWJlcyB0aGUgc2l6ZSBvZiB0aGUgYmxvY2tzLlxuICAgICAqIHggaXMgdGhlIHdpZHRoIG9mIHRoZSBibG9jayBhbmQgeSBpcyB0aGUgaGVpZ2h0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlBpeGVsYXRlRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBbiBSR0IgU3BsaXQgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBSR0JTcGxpdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSB2ZWMyIHJlZDtcXG51bmlmb3JtIHZlYzIgZ3JlZW47XFxudW5pZm9ybSB2ZWMyIGJsdWU7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvci5yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgcmVkL2RpbWVuc2lvbnMueHkpLnI7XFxuICAgZ2xfRnJhZ0NvbG9yLmcgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBncmVlbi9kaW1lbnNpb25zLnh5KS5nO1xcbiAgIGdsX0ZyYWdDb2xvci5iID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgYmx1ZS9kaW1lbnNpb25zLnh5KS5iO1xcbiAgIGdsX0ZyYWdDb2xvci5hID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKS5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZDogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGdyZWVuOiAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogLTIwLCB5OiAyMCB9IH0sXG4gICAgICAgICAgICBibHVlOiAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDIwLCB5OiAtMjAgfSB9LFxuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLCAwLCAwLCAwXSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5SR0JTcGxpdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJHQlNwbGl0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBSR0JTcGxpdEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogUmVkIGNoYW5uZWwgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIHJlZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJlZC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR3JlZW4gY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JlZW46IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JlZW4udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBCbHVlIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGFwcGxpZXMgYSBzZXBpYSBlZmZlY3QgdG8geW91ciBEaXNwbGF5IE9iamVjdHMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNlcGlhRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHNlcGlhO1xcblxcbmNvbnN0IG1hdDMgc2VwaWFNYXRyaXggPSBtYXQzKDAuMzU4OCwgMC43MDQ0LCAwLjEzNjgsIDAuMjk5MCwgMC41ODcwLCAwLjExNDAsIDAuMjM5MiwgMC40Njk2LCAwLjA5MTIpO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGdsX0ZyYWdDb2xvci5yZ2IgKiBzZXBpYU1hdHJpeCwgc2VwaWEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNlcGlhOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNlcGlhRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU2VwaWFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2VwaWFGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNlcGlhRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTZXBpYUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIHNlcGlhLiBgMWAgd2lsbCBhcHBseSB0aGUgZnVsbCBzZXBpYSBlZmZlY3QsIGFuZFxuICAgICAqIGAwYCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2VwaWFGaWx0ZXIjXG4gICAgICovXG4gICAgc2VwaWE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc2VwaWEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbG9yTWF0cml4RmlsdGVyIGNsYXNzIGxldHMgeW91IGFwcGx5IGEgNHg0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgUkdCQVxuICogY29sb3IgYW5kIGFscGhhIHZhbHVlcyBvZiBldmVyeSBwaXhlbCBvbiB5b3VyIGRpc3BsYXlPYmplY3QgdG8gcHJvZHVjZSBhIHJlc3VsdFxuICogd2l0aCBhIG5ldyBzZXQgb2YgUkdCQSBjb2xvciBhbmQgYWxwaGEgdmFsdWVzLiBJdCdzIHByZXR0eSBwb3dlcmZ1bCFcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2hvY2t3YXZlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIHZlYzIgY2VudGVyO1xcbnVuaWZvcm0gdmVjMyBwYXJhbXM7IC8vIDEwLjAsIDAuOCwgMC4xXFxudW5pZm9ybSBmbG9hdCB0aW1lO1xcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gdlRleHR1cmVDb29yZDtcXG4gICAgdmVjMiB0ZXhDb29yZCA9IHV2O1xcblxcbiAgICBmbG9hdCBkaXN0ID0gZGlzdGFuY2UodXYsIGNlbnRlcik7XFxuXFxuICAgIGlmICggKGRpc3QgPD0gKHRpbWUgKyBwYXJhbXMueikpICYmIChkaXN0ID49ICh0aW1lIC0gcGFyYW1zLnopKSApXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IGRpZmYgPSAoZGlzdCAtIHRpbWUpO1xcbiAgICAgICAgZmxvYXQgcG93RGlmZiA9IDEuMCAtIHBvdyhhYnMoZGlmZipwYXJhbXMueCksIHBhcmFtcy55KTtcXG5cXG4gICAgICAgIGZsb2F0IGRpZmZUaW1lID0gZGlmZiAgKiBwb3dEaWZmO1xcbiAgICAgICAgdmVjMiBkaWZmVVYgPSBub3JtYWxpemUodXYgLSBjZW50ZXIpO1xcbiAgICAgICAgdGV4Q29vcmQgPSB1diArIChkaWZmVVYgKiBkaWZmVGltZSk7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB0ZXhDb29yZCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgY2VudGVyOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfSxcbiAgICAgICAgICAgIHBhcmFtczogeyB0eXBlOiAndjMnLCB2YWx1ZTogeyB4OiAxMCwgeTogMC44LCB6OiAwLjEgfSB9LFxuICAgICAgICAgICAgdGltZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hvY2t3YXZlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaG9ja3dhdmVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjZW50ZXIgb2YgdGhlIHNob2Nrd2F2ZSBpbiBub3JtYWxpemVkIHNjcmVlbiBjb29yZHMuIFRoYXQgaXNcbiAgICAgKiAoMCwwKSBpcyB0aGUgdG9wLWxlZnQgYW5kICgxLDEpIGlzIHRoZSBib3R0b20gcmlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBudW1iZXI+fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIGNlbnRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmNlbnRlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBhcmFtcyBvZiB0aGUgc2hvY2t3YXZlLiBUaGVzZSBtb2RpZnkgdGhlIGxvb2sgYW5kIGJlaGF2aW9yIG9mXG4gICAgICogdGhlIHNob2Nrd2F2ZSBhcyBpdCByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgcGFyYW1zOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGFyYW1zLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZWxhcHNlZCB0aW1lIG9mIHRoZSBzaG9ja3dhdmUuIFRoaXMgY29udHJvbHMgdGhlIHNwZWVkIGF0IHdoaWNoXG4gICAgICogdGhlIHNob2Nrd2F2ZSByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICB0aW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0QXhpc0ZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0QXhpc0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBibHVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JhZGllbnRCbHVyO1xcbnVuaWZvcm0gdmVjMiBzdGFydDtcXG51bmlmb3JtIHZlYzIgZW5kO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG51bmlmb3JtIHZlYzIgdGV4U2l6ZTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG4gICAgdmVjMiBub3JtYWwgPSBub3JtYWxpemUodmVjMihzdGFydC55IC0gZW5kLnksIGVuZC54IC0gc3RhcnQueCkpO1xcbiAgICBmbG9hdCByYWRpdXMgPSBzbW9vdGhzdGVwKDAuMCwgMS4wLCBhYnMoZG90KHZUZXh0dXJlQ29vcmQgKiB0ZXhTaXplIC0gc3RhcnQsIG5vcm1hbCkpIC8gZ3JhZGllbnRCbHVyKSAqIGJsdXI7XFxuXFxuICAgIGZvciAoZmxvYXQgdCA9IC0zMC4wOyB0IDw9IDMwLjA7IHQrKylcXG4gICAge1xcbiAgICAgICAgZmxvYXQgcGVyY2VudCA9ICh0ICsgb2Zmc2V0IC0gMC41KSAvIDMwLjA7XFxuICAgICAgICBmbG9hdCB3ZWlnaHQgPSAxLjAgLSBhYnMocGVyY2VudCk7XFxuICAgICAgICB2ZWM0IHNhbXBsZSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGRlbHRhIC8gdGV4U2l6ZSAqIHBlcmNlbnQgKiByYWRpdXMpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBibHVyOiAgICAgICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMTAwIH0sXG4gICAgICAgICAgICBncmFkaWVudEJsdXI6ICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNjAwIH0sXG4gICAgICAgICAgICBzdGFydDogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLCAgICB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIH0gfSxcbiAgICAgICAgICAgIGVuZDogICAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDYwMCwgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZGVsdGE6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMzAsICAgeTogMzAgfSB9LFxuICAgICAgICAgICAgdGV4U2l6ZTogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogd2luZG93LmlubmVyV2lkdGgsIHk6IHdpbmRvdy5pbm5lckhlaWdodCB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG59XG5cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiB0aGUgWCBhbmQgWSBmaWx0ZXJzLCBkb2VzIG5vdGhpbmcgZm9yIHRoaXMgY2xhc3MuXG4gKlxuICovXG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gMDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSAwO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmFkaWVudEJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIHN0YXJ0IHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgZW5kOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdFlGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0IEZpbHRlci4gTWFuYWdlcyB0aGUgcGFzcyBvZiBib3RoIGEgVGlsdFNoaWZ0WEZpbHRlciBhbmQgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIgPSBuZXcgVGlsdFNoaWZ0WEZpbHRlcigpO1xuICAgIHRoaXMudGlsdFNoaWZ0WUZpbHRlciA9IG5ldyBUaWx0U2hpZnRZRmlsdGVyKCk7XG59XG5cblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEZpbHRlcjtcblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JhZGllbnQgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ncmFkaWVudEJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZ3JhZGllbnRCbHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFkgdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuc3RhcnQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBlbmQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5lbmQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZW5kID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBUaWx0U2hpZnRBeGlzRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRBeGlzRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdFhGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRpbHRTaGlmdEF4aXNGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0WEZpbHRlcigpXG57XG4gICAgVGlsdFNoaWZ0QXhpc0ZpbHRlci5jYWxsKHRoaXMpO1xufVxuXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRYRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRYRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKlxuICovXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGR4ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueCAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueDtcbiAgICB2YXIgZHkgPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS55IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS55O1xuICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IGR4IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeSAvIGQ7XG59O1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRZRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gLWR5IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeCAvIGQ7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHR3aXN0IGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0d2lzdGVkIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFR3aXN0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHJhZGl1cztcXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzIgY29vcmQgPSB2VGV4dHVyZUNvb3JkIC0gb2Zmc2V0O1xcbiAgIGZsb2F0IGRpc3QgPSBsZW5ndGgoY29vcmQpO1xcblxcbiAgIGlmIChkaXN0IDwgcmFkaXVzKVxcbiAgIHtcXG4gICAgICAgZmxvYXQgcmF0aW8gPSAocmFkaXVzIC0gZGlzdCkgLyByYWRpdXM7XFxuICAgICAgIGZsb2F0IGFuZ2xlTW9kID0gcmF0aW8gKiByYXRpbyAqIGFuZ2xlO1xcbiAgICAgICBmbG9hdCBzID0gc2luKGFuZ2xlTW9kKTtcXG4gICAgICAgZmxvYXQgYyA9IGNvcyhhbmdsZU1vZCk7XFxuICAgICAgIGNvb3JkID0gdmVjMihjb29yZC54ICogYyAtIGNvb3JkLnkgKiBzLCBjb29yZC54ICogcyArIGNvb3JkLnkgKiBjKTtcXG4gICB9XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCtvZmZzZXQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhZGl1czogICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9LFxuICAgICAgICAgICAgYW5nbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9LFxuICAgICAgICAgICAgb2Zmc2V0OiAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjUsIHk6IDAuNSB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblR3aXN0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVHdpc3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHdpc3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFR3aXN0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUd2lzdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IGRlc2NyaWJlcyB0aGUgdGhlIG9mZnNldCBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgb2Zmc2V0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHJhZGl1cyBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICByYWRpdXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5yYWRpdXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgYW5nbGUgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiLy8gcnVuIHRoZSBwb2x5ZmlsbHNcbnJlcXVpcmUoJy4vcG9seWZpbGwnKTtcblxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29yZScpO1xuXG4vLyBhZGQgY29yZSBwbHVnaW5zLlxuY29yZS5leHRyYXMgICAgICAgICA9IHJlcXVpcmUoJy4vZXh0cmFzJyk7XG5jb3JlLmZpbHRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5jb3JlLmludGVyYWN0aW9uICAgID0gcmVxdWlyZSgnLi9pbnRlcmFjdGlvbicpO1xuY29yZS5sb2FkZXJzICAgICAgICA9IHJlcXVpcmUoJy4vbG9hZGVycycpO1xuY29yZS5tZXNoICAgICAgICAgICA9IHJlcXVpcmUoJy4vbWVzaCcpO1xuY29yZS5hY2Nlc3NpYmlsaXR5ICA9IHJlcXVpcmUoJy4vYWNjZXNzaWJpbGl0eScpO1xuXG4vLyBleHBvcnQgYSBwcmVtYWRlIGxvYWRlciBpbnN0YW5jZVxuLyoqXG4gKiBBIHByZW1hZGUgaW5zdGFuY2Ugb2YgdGhlIGxvYWRlciB0aGF0IGNhbiBiZSB1c2VkIHRvIGxvYWRlciByZXNvdXJjZXMuXG4gKlxuICogQG5hbWUgbG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHByb3BlcnR5IHtQSVhJLmxvYWRlcnMuTG9hZGVyfVxuICovXG5jb3JlLmxvYWRlciA9IG5ldyBjb3JlLmxvYWRlcnMuTG9hZGVyKCk7XG5cbi8vIG1peGluIHRoZSBkZXByZWNhdGlvbiBmZWF0dXJlcy5cbk9iamVjdC5hc3NpZ24oY29yZSwgcmVxdWlyZSgnLi9kZXByZWNhdGlvbicpKTtcblxuLy8gQWx3YXlzIGV4cG9ydCBwaXhpIGdsb2JhbGx5LlxuZ2xvYmFsLlBJWEkgPSBjb3JlO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogSG9sZHMgYWxsIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gYW4gSW50ZXJhY3Rpb24gZXZlbnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uRGF0YSgpXG57XG4gICAgLyoqXG4gICAgICogVGhpcyBwb2ludCBzdG9yZXMgdGhlIGdsb2JhbCBjb29yZHMgb2Ygd2hlcmUgdGhlIHRvdWNoL21vdXNlIGV2ZW50IGhhcHBlbmVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuZ2xvYmFsID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgU3ByaXRlIHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TcHJpdGV9XG4gICAgICovXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBwYXNzZWQgdG8gYW4gZXZlbnQgaGFuZGxlciwgdGhpcyB3aWxsIGJlIHRoZSBvcmlnaW5hbCBET00gRXZlbnQgdGhhdCB3YXMgY2FwdHVyZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0V2ZW50fVxuICAgICAqL1xuICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IG51bGw7XG59XG5cbkludGVyYWN0aW9uRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbkRhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uRGF0YTtcblxuLyoqXG4gKiBUaGlzIHdpbGwgcmV0dXJuIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgc3BlY2lmaWVkIGRpc3BsYXlPYmplY3QgZm9yIHRoaXMgSW50ZXJhY3Rpb25EYXRhXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgbG9jYWwgY29vcmRzIG9mZlxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBwb2ludClcbiAqIEBwYXJhbSBbZ2xvYmFsUG9zXSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgY29udGFpbmluZyB5b3VyIGN1c3RvbSBnbG9iYWwgY29vcmRzLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgdXNlIHRoZSBjdXJyZW50IGdsb2JhbCBjb29yZHMpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBJbnRlcmFjdGlvbkRhdGEgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIERpc3BsYXlPYmplY3RcbiAqL1xuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5nZXRMb2NhbFBvc2l0aW9uID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHBvaW50LCBnbG9iYWxQb3MpXG57XG4gICAgcmV0dXJuIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKGdsb2JhbFBvcyB8fCB0aGlzLmdsb2JhbCwgcG9pbnQpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIEludGVyYWN0aW9uRGF0YSA9IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25EYXRhJyk7XG5cbi8vIE1peCBpbnRlcmFjdGl2ZVRhcmdldCBpbnRvIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGVcbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbik7XG5cbi8qKlxuICogVGhlIGludGVyYWN0aW9uIG1hbmFnZXIgZGVhbHMgd2l0aCBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzLiBBbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgaW50ZXJhY3RpdmVcbiAqIGlmIGl0cyBpbnRlcmFjdGl2ZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIHRydWVcbiAqIFRoaXMgbWFuYWdlciBhbHNvIHN1cHBvcnRzIG11bHRpdG91Y2guXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH1cbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQ9dHJ1ZV0ge2Jvb2xlYW59IFNob3VsZCB0aGUgbWFuYWdlciBhdXRvbWF0aWNhbGx5IHByZXZlbnQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMuXG4gKiBAcGFyYW0gW29wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3k9MTBdIHtudW1iZXJ9IEZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQuXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uTWFuYWdlcihyZW5kZXJlciwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGludGVyYWN0aW9uIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMgYXV0b21hdGljYWxseSBiZSBwcmV2ZW50ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdCA9IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdCA6IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBcyB0aGlzIGZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQgbW9yZSBvZnRlbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgPSBvcHRpb25zLmludGVyYWN0aW9uRnJlcXVlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vdXNlIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhfVxuICAgICAqL1xuICAgIHRoaXMubW91c2UgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCBkYXRhIG9iamVjdCB0byBoYW5kbGUgYWxsIHRoZSBldmVudCB0cmFja2luZy9kaXNwYXRjaGluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnREYXRhID0ge1xuICAgICAgICBzdG9wcGVkOiBmYWxzZSxcbiAgICAgICAgdGFyZ2V0OiBudWxsLFxuICAgICAgICB0eXBlOiBudWxsLFxuICAgICAgICBkYXRhOiB0aGlzLm1vdXNlLFxuICAgICAgICBzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGlueSBsaXR0bGUgaW50ZXJhY3RpdmVEYXRhIHBvb2wgIVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGFbXX1cbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBET00gZWxlbWVudCB0byBiaW5kIHRvLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTEVsZW1lbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIYXZlIGV2ZW50cyBiZWVuIGF0dGFjaGVkIHRvIHRoZSBkb20gZWxlbWVudD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gZmFsc2U7XG5cbiAgICAvL3RoaXMgd2lsbCBtYWtlIGl0IHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gY2FsbCBiaW5kIGFsbCB0aGUgdGltZVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlVXAgPSB0aGlzLm9uTW91c2VVcC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlVXAgPSB0aGlzLnByb2Nlc3NNb3VzZVVwLmJpbmQoIHRoaXMgKTtcblxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IHRoaXMub25Nb3VzZURvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZURvd24gPSB0aGlzLnByb2Nlc3NNb3VzZURvd24uYmluZCggdGhpcyApO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IHRoaXMub25Nb3VzZU1vdmUuYmluZCggdGhpcyApO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IHRoaXMucHJvY2Vzc01vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VPdXQgPSB0aGlzLm9uTW91c2VPdXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IHRoaXMub25Ub3VjaFN0YXJ0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaEVuZCA9IHRoaXMub25Ub3VjaEVuZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gdGhpcy5wcm9jZXNzVG91Y2hFbmQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaE1vdmUgPSB0aGlzLm9uVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sYXN0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjc3Mgc3R5bGUgb2YgdGhlIGN1cnNvciB0aGF0IGlzIGJlaW5nIHVzZWRcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSAnaW5oZXJpdCc7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjYWNoZWQgdmFyXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCByZXNvbHV0aW9uXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IDE7XG5cbiAgICB0aGlzLnNldFRhcmdldEVsZW1lbnQodGhpcy5yZW5kZXJlci52aWV3LCB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24pO1xufVxuXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJhY3Rpb25NYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5cbi8qKlxuICogU2V0cyB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlL3RvdWNoIGV2ZW50cy4gVGhpcyBpcyB1c2VmdWwgZm9yIHdoZW4geW91IGhhdmVcbiAqIG90aGVyIERPTSBlbGVtZW50cyBvbiB0b3Agb2YgdGhlIHJlbmRlcmVycyBDYW52YXMgZWxlbWVudC4gV2l0aCB0aGlzIHlvdSdsbCBiZSBiYWxlIHRvIGRlbGV0ZWdhdGVcbiAqIGFub3RoZXIgRE9NIGVsZW1lbnQgdG8gcmVjZWl2ZSB0aG9zZSBldmVudHMuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQge0hUTUxFbGVtZW50fSB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVEhlIHJlc29sdXRpb24gb2YgdGhlIG5ldyBlbGVtZW50IChyZWxhdGl2ZSB0byB0aGUgY2FudmFzKS5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuc2V0VGFyZ2V0RWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCByZXNvbHV0aW9uKVxue1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICB0aGlzLmFkZEV2ZW50cygpO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYWxsIHRoZSBET00gZXZlbnRzXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5hZGRFdmVudHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29yZS50aWNrZXIuc2hhcmVkLmFkZCh0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy1jb250ZW50LXpvb21pbmcnXSA9ICdub25lJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICdub25lJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgICAgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgICAgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgICAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCAgIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICAgICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsICAgIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIHRoZSBET00gZXZlbnRzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHJlZ2lzdGVyZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJyc7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAgdGhpcy5vblRvdWNoRW5kLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlLCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgIHRoaXMub25Nb3VzZVVwLCB0cnVlKTtcblxuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc3RhdGUgb2YgaW50ZXJhY3RpdmUgb2JqZWN0cy5cbiAqIEludm9rZWQgYnkgYSB0aHJvdHRsZWQgdGlja2VyIHVwZGF0ZSBmcm9tXG4gKiB7QGxpbmsgUElYSS50aWNrZXIuc2hhcmVkfS5cbiAqXG4gKiBAcGFyYW0gZGVsdGFUaW1lIHtudW1iZXJ9XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB0aGlzLl9kZWx0YVRpbWUgKz0gZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2RlbHRhVGltZSA8IHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGVsdGFUaW1lID0gMDtcblxuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHVzZXIgbW92ZSB0aGUgbW91c2UgdGhpcyBjaGVjayBoYXMgYWxyZWFkeSBiZWVuIGRmb25lIHVzaW5nIHRoZSBtb3VzZSBtb3ZlIVxuICAgIGlmKHRoaXMuZGlkTW92ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlkTW92ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE9cbn07XG5cbi8qKlxuICogRGlzcGF0Y2hlcyBhbiBldmVudCBvbiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIGRpc3BsYXkgb2JqZWN0IGluIHF1ZXN0aW9uXG4gKiBAcGFyYW0gZXZlbnRTdHJpbmcge3N0cmluZ30gdGhlIG5hbWUgb2YgdGhlIGV2ZW50IChlLmcsIG1vdXNlZG93bilcbiAqIEBwYXJhbSBldmVudERhdGEge29iamVjdH0gdGhlIGV2ZW50IGRhdGEgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGV2ZW50U3RyaW5nLCBldmVudERhdGEgKVxue1xuICAgIGlmKCFldmVudERhdGEuc3RvcHBlZClcbiAgICB7XG4gICAgICAgIGV2ZW50RGF0YS50YXJnZXQgPSBkaXNwbGF5T2JqZWN0O1xuICAgICAgICBldmVudERhdGEudHlwZSA9IGV2ZW50U3RyaW5nO1xuXG4gICAgICAgIGRpc3BsYXlPYmplY3QuZW1pdCggZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0W2V2ZW50U3RyaW5nXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddKCBldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogTWFwcyB4IGFuZCB5IGNvb3JkcyBmcm9tIGEgRE9NIG9iamVjdCBhbmQgbWFwcyB0aGVtIGNvcnJlY3RseSB0byB0aGUgcGl4aSB2aWV3LiBUaGUgcmVzdWx0aW5nIHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUgcG9pbnQuXG4gKiBUaGlzIHRha2VzIGludG8gYWNjb3VudCB0aGUgZmFjdCB0aGF0IHRoZSBET00gZWxlbWVudCBjb3VsZCBiZSBzY2FsZWQgYW5kIHBvc2l0aW9uZWQgYW55d2hlcmUgb24gdGhlIHNjcmVlbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCB0aGUgcmVzdWx0IHdpbGwgYmUgc3RvcmVkIGluXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHggICAgIHRoZSB4IGNvb3JkIG9mIHRoZSBwb3NpdGlvbiB0byBtYXBcbiAqIEBwYXJhbSAge251bWJlcn0geSAgICAgdGhlIHkgY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm1hcFBvc2l0aW9uVG9Qb2ludCA9IGZ1bmN0aW9uICggcG9pbnQsIHgsIHkgKVxue1xuICAgIHZhciByZWN0ID0gdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcG9pbnQueCA9ICggKCB4IC0gcmVjdC5sZWZ0ICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQud2lkdGggIC8gcmVjdC53aWR0aCAgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHBvaW50LnkgPSAoICggeSAtIHJlY3QudG9wICApICogKHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmhlaWdodCAvIHJlY3QuaGVpZ2h0ICkgKSAvIHRoaXMucmVzb2x1dGlvbjtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlcyBhIG5lYXQgd2F5IG9mIGNyYXdsaW5nIHRocm91Z2ggdGhlIHNjZW5lIGdyYXBoIGFuZCBydW5uaW5nIGEgc3BlY2lmaWVkIGZ1bmN0aW9uIG9uIGFsbCBpbnRlcmFjdGl2ZSBvYmplY3RzIGl0IGZpbmRzLlxuICogSXQgd2lsbCBhbHNvIHRha2UgY2FyZSBvZiBoaXQgdGVzdGluZyB0aGUgaW50ZXJhY3RpdmUgb2JqZWN0cyBhbmQgcGFzc2VzIHRoZSBoaXQgYWNyb3NzIGluIHRoZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCBpcyB0ZXN0ZWQgZm9yIGNvbGxpc2lvblxuICogQHBhcmFtICB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBkaXNwbGF5T2JqZWN0IHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgd2lsbCBiZSBoaXQgdGVzdCAocmVjdXJjc2l2bHkgY3Jhd2xzIGl0cyBjaGlsZHJlbilcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmdW5jIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggaW50ZXJhY3RpdmUgb2JqZWN0LiBUaGUgZGlzcGxheU9iamVjdCBhbmQgaGl0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvblxuICogQHBhcmFtICB7Ym9vbGVhbn0gaGl0VGVzdCB0aGlzIGluZGljYXRlcyBpZiB0aGUgb2JqZWN0cyBpbnNpZGUgc2hvdWxkIGJlIGhpdCB0ZXN0IGFnYWluc3QgdGhlIHBvaW50XG4gKiBAcmV0dXJuIHtib29sZWFufSByZXR1cm5zIHRydWUgaWYgdGhlIGRpc3BsYXlPYmplY3QgaGl0IHRoZSBwb2ludFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NJbnRlcmFjdGl2ZSA9IGZ1bmN0aW9uIChwb2ludCwgZGlzcGxheU9iamVjdCwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmUpXG57XG4gICAgaWYoIWRpc3BsYXlPYmplY3QgfHwgIWRpc3BsYXlPYmplY3QudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUb29rIGEgbGl0dGxlIHdoaWxlIHRvIHJld29yayB0aGlzIGZ1bmN0aW9uIGNvcnJlY3RseSEgQnV0IG5vdyBpdCBpcyBkb25lIGFuZCBuaWNlIGFuZCBvcHRpbWlzZWQuIF5fXlxuICAgIC8vIFxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBub3cgbG9vcCB0aHJvdWdoIGFsbCBvYmplY3RzIGFuZCB0aGVuIG9ubHkgaGl0IHRlc3QgdGhlIG9iamVjdHMgaXQgSEFTIHRvLCBub3QgYWxsIG9mIHRoZW0uIE1VQ0ggZmFzdGVyLi5cbiAgICAvLyBBbiBvYmplY3Qgd2lsbCBiZSBoaXQgdGVzdCBpZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gICAgLy8gXG4gICAgLy8gMTogSXQgaXMgaW50ZXJhY3RpdmUuXG4gICAgLy8gMjogSXQgYmVsb25ncyB0byBhIHBhcmVudCB0aGF0IGlzIGludGVyYWN0aXZlIEFORCBvbmUgb2YgdGhlIHBhcmVudHMgY2hpbGRyZW4gaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICAvLyBcbiAgICAvLyBBcyBhbm90aGVyIGxpdHRsZSBvcHRpbWlzYXRpb24gb25jZSBhbiBpbnRlcmFjdGl2ZSBvYmplY3QgaGFzIGJlZW4gaGl0IHdlIGNhbiBjYXJyeSBvbiB0aHJvdWdoIHRoZSBzY2VuZWdyYXBoLCBidXQgd2Uga25vdyB0aGF0IHRoZXJlIHdpbGwgYmUgbm8gbW9yZSBoaXRzISBTbyB3ZSBjYW4gYXZvaWQgZXh0cmEgaGl0IHRlc3RzXG4gICAgLy8gQSBmaW5hbCBvcHRpbWlzYXRpb24gaXMgdGhhdCBhbiBvYmplY3QgaXMgbm90IGhpdCB0ZXN0IGRpcmVjdGx5IGlmIGEgY2hpbGQgaGFzIGFscmVhZHkgYmVlbiBoaXQuXG4gICAgXG4gICAgdmFyIGhpdCA9IGZhbHNlLFxuICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGludGVyYWN0aXZlID0gZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSB8fCBpbnRlcmFjdGl2ZTtcblxuICAgIC8vIGlmIHRoZSBkaXNwbGF5b2JqZWN0IGhhcyBhIGhpdEFyZWEsIHRoZW4gaXQgZG9lcyBub3QgbmVlZCB0byBoaXRUZXN0IGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaGl0QXJlYSlcbiAgICB7XG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gKiogRlJFRSBUSVAgKiohIElmIGFuIG9iamVjdCBpcyBub3QgaW50ZXJhY3R0aXZlIG9yIGhhcyBubyBidXR0b25zIGluIGl0IChzdWNoIGFzIGEgZ2FtZSBzY2VuZSEpIHNldCBpbnRlcmFjdGl2ZUNoaWxkcmVuIHRvIGZhbHNlIGZvciB0aGF0IGRpc3BsYXlPYmplY3QuXG4gICAgLy8gVGhpcyB3aWxsIGFsbG93IHBpeGkgdG8gY29tcGxldGx5IGlnbm9yZSBhbmQgYnlwYXNzIGNoZWNraW5nIHRoZSBkaXNwbGF5T2JqZWN0cyBjaGlsZHJlbi5cbiAgICBpZihkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlQ2hpbGRyZW4pXG4gICAgeyAgICAgICBcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICAgICAgXG4gICAgICAgIGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRpbWUgdG8gZ2V0IHJlY3Vyc2l2ZS4uIGlmIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gaWYgc29tdGhpbmcgaXMgaGl0Li5cbiAgICAgICAgICAgIGlmKCB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZShwb2ludCwgY2hpbGRyZW5baV0sIGZ1bmMsIGhpdFRlc3QsIGludGVyYWN0aXZlUGFyZW50KSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIHdlIG5vIGxvbmdlciBuZWVkIHRvIGhpdCB0ZXN0IGFueSBtb3JlIG9iamVjdHMgaW4gdGhpcyBjb250YWluZXIgYXMgd2Ugd2Ugbm93IGtub3cgdGhlIHBhcmVudCBoYXMgYmVlbiBoaXRcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBpcyBpbnRlcmFjdGl2ZSAsIHRoYXQgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhpdCB3YXMgYWN0dWFsbHkgaW50ZXJhY3RpdmUgYW5kIG5vdCBqdXN0IHRoZSBjaGlsZCBvZiBhbiBpbnRlcmFjdGl2ZSBvYmplY3QuIFxuICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55dGhpbmcgZWxzZS4gV2Ugc3RpbGwgbmVlZCB0byBydW4gdGhyb3VnaCBhbGwgb2JqZWN0cywgYnV0IHdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhbnkgaGl0IHRlc3RzLlxuICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuW2ldLmludGVyYWN0aXZlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGl0VGVzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIG5vIHBvaW50IHJ1bm5pbmcgdGhpcyBpZiB0aGUgaXRlbSBpcyBub3QgaW50ZXJhY3RpdmUgb3IgZG9lcyBub3QgaGF2ZSBhbiBpbnRlcmFjdGl2ZSBwYXJlbnQuXG4gICAgaWYoaW50ZXJhY3RpdmUpXG4gICAge1xuICAgICAgICAvLyBpZiB3ZSBhcmUgaGl0IHRlc3RpbmcgKGFzIGluIHdlIGhhdmUgbm8gaGl0IGFueSBvYmplY3RzIHlldClcbiAgICAgICAgLy8gV2UgYWxzbyBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGhpdCB0ZXN0aW5nIGlmIG9uY2Ugb2YgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuIGhhcyBhbHJlYWR5IGJlZW4gaGl0IVxuICAgICAgICBpZihoaXRUZXN0ICYmICFoaXQpXG4gICAgICAgIHsgIFxuICAgICAgICAgICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGhpcy5fdGVtcFBvaW50KTtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmhpdEFyZWEuY29udGFpbnMoIHRoaXMuX3RlbXBQb2ludC54LCB0aGlzLl90ZW1wUG9pbnQueSApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZihkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gZGlzcGxheU9iamVjdC5jb250YWluc1BvaW50KHBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmMoZGlzcGxheU9iamVjdCwgaGl0KTsgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGl0O1xuICBcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgZG93biBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcHJlc3NlZCBkb3duXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VEb3duLCB0cnVlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBkb3duIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlRG93biA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB2YXIgZSA9IHRoaXMubW91c2Uub3JpZ2luYWxFdmVudDtcbiAgICBcbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG5cbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nIF0gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRkb3duJyA6ICdtb3VzZWRvd24nLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcmVsZWFzZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYnV0dG9uIGJlaW5nIHJlbGVhc2VkXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VVcCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlVXAsIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIHVwIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZVVwID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuXG4gICAgdmFyIGlzUmlnaHRCdXR0b24gPSBlLmJ1dHRvbiA9PT0gMiB8fCBlLndoaWNoID09PSAzO1xuICAgIHZhciBpc0Rvd24gPSAgaXNSaWdodEJ1dHRvbiA/ICdfaXNSaWdodERvd24nIDogJ19pc0xlZnREb3duJztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodHVwJyA6ICdtb3VzZXVwJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0Y2xpY2snIDogJ2NsaWNrJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXBvdXRzaWRlJyA6ICdtb3VzZXVwb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgdGhlIG1vdXNlIG1vdmluZ1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5kaWRNb3ZlID0gdHJ1ZTtcblxuICAgIHRoaXMuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VNb3ZlLCB0cnVlICk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgIT09IHRoaXMuY3Vyc29yKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gdGhpcy5jdXJzb3I7XG4gICAgfVxuXG4gICAgLy9UT0RPIEJVRyBmb3IgcGFyZW50cyBpbmVyYWN0aXZlIG9iamVjdCAoYm9yZGVyIG9yZGVyIGlzc3VlKVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlbW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQoZGlzcGxheU9iamVjdCwgaGl0KTtcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgaXMgbW92ZWQgb3V0IG9mIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJlaW5nIG1vdmVkIG91dFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlT3V0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgLy8gVE9ETyBvcHRpbWl6ZSBieSBub3QgY2hlY2sgRVZFUlkgVElNRSEgbWF5YmUgaGFsZiBhcyBvZnRlbj8gLy9cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkgKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIGZhbHNlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBvdmVyL291dCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VPdmVyT3V0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGlmKCFkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3ZlcicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlzcGxheU9iamVjdC5idXR0b25Nb2RlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnNvciA9IGRpc3BsYXlPYmplY3QuZGVmYXVsdEN1cnNvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZihkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIHRoaXMuZXZlbnREYXRhKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIHN0YXJ0ZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggc3RhcnRpbmcgb24gdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaFN0YXJ0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuICAgICAgICAvL1RPRE8gUE9PTFxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0LCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hTdGFydCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaHN0YXJ0JywgdGhpcy5ldmVudERhdGEgKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBlbmRzIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIGVuZGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICAvL1RPRE8gdGhpcyBzaG91bGQgYmUgcGFzc2VkIGFsb25nLi4gbm8gc2V0XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoRW5kLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIGVuZCBvZiBhIHRvdWNoIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaEVuZCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZCcsIHRoaXMuZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndGFwJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZG91dHNpZGUnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIG1vdmVkIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBtb3ZpbmcgYWNyb3NzIHRoZSByZW5kZXJlciB2aWV3XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIGEgdG91Y2ggbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGhpdCA9IGhpdDtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaG1vdmUnLCB0aGlzLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hFdmVudCB7RXZlbnREYXRhfSBUaGUgdG91Y2ggZXZlbnQgd2UgbmVlZCB0byBwYWlyIHdpdGggYW4gaW50ZXJhY3Rpb25EYXRhIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZ2V0VG91Y2hEYXRhID0gZnVuY3Rpb24gKHRvdWNoRXZlbnQpXG57XG4gICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wb3AoKTtcblxuICAgIGlmKCF0b3VjaERhdGEpXG4gICAge1xuICAgICAgICB0b3VjaERhdGEgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG4gICAgfVxuXG4gICAgdG91Y2hEYXRhLmlkZW50aWZpZXIgPSB0b3VjaEV2ZW50LmlkZW50aWZpZXI7XG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRvdWNoRGF0YS5nbG9iYWwsIHRvdWNoRXZlbnQuY2xpZW50WCwgdG91Y2hFdmVudC5jbGllbnRZICk7XG5cbiAgICBpZihuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YS5nbG9iYWwueCA9IHRvdWNoRGF0YS5nbG9iYWwueCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC55ID0gdG91Y2hEYXRhLmdsb2JhbC55IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIH1cblxuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWCA9IHRvdWNoRGF0YS5nbG9iYWwueDtcbiAgICB0b3VjaEV2ZW50Lmdsb2JhbFkgPSB0b3VjaERhdGEuZ2xvYmFsLnk7XG5cbiAgICByZXR1cm4gdG91Y2hEYXRhO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IHRvIHRoZSBpbnRlcm5hbCBwb29sXG4gKlxuICogQHBhcmFtIHRvdWNoRGF0YSB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9IFRoZSB0b3VjaCBkYXRhIG9iamVjdCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmV0dXJuVG91Y2hEYXRhID0gZnVuY3Rpb24gKCB0b3VjaERhdGEgKVxue1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wdXNoKCB0b3VjaERhdGEgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGludGVyYWN0aW9uIG1hbmFnZXJcbiAqXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLm1vdXNlID0gbnVsbDtcblxuICAgIHRoaXMuZXZlbnREYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IG51bGw7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VVcCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Nb3VzZURvd24gPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUgPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlT3V0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBudWxsO1xuXG5cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IG51bGw7XG5cbiAgICB0aGlzLm9uVG91Y2hFbmQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaE1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZW1wUG9pbnQgPSBudWxsO1xufTtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBpbnRlcmFjdGlvbnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEludGVyYWN0aW9uRGF0YTogICAgcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKSxcbiAgICBJbnRlcmFjdGlvbk1hbmFnZXI6IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25NYW5hZ2VyJyksXG4gICAgaW50ZXJhY3RpdmVUYXJnZXQ6ICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbn07XG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGludGVyYWN0aXZlIG9iamVjdHNcbiAqIHVzZWQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5pbnRlcmFjdGlvbi5pbnRlcmFjdGl2ZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgaW50ZXJhY3RpdmVUYXJnZXQgPSB7XG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBidXR0b25Nb2RlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlQ2hpbGRyZW46IHRydWUsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBkZWZhdWx0Q3Vyc29yOiAncG9pbnRlcicsXG5cbiAgICAvLyBzb21lIGludGVybmFsIGNoZWNrcy4uXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX292ZXI6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdG91Y2hEb3duOiBmYWxzZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnRlcmFjdGl2ZVRhcmdldDtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi4vZXh0cmFzJyksXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxuXG5mdW5jdGlvbiBwYXJzZShyZXNvdXJjZSwgdGV4dHVyZSkge1xuICAgIHZhciBkYXRhID0ge307XG4gICAgdmFyIGluZm8gPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF07XG4gICAgdmFyIGNvbW1vbiA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NvbW1vbicpWzBdO1xuXG4gICAgZGF0YS5mb250ID0gaW5mby5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKTtcbiAgICBkYXRhLnNpemUgPSBwYXJzZUludChpbmZvLmdldEF0dHJpYnV0ZSgnc2l6ZScpLCAxMCk7XG4gICAgZGF0YS5saW5lSGVpZ2h0ID0gcGFyc2VJbnQoY29tbW9uLmdldEF0dHJpYnV0ZSgnbGluZUhlaWdodCcpLCAxMCk7XG4gICAgZGF0YS5jaGFycyA9IHt9O1xuXG4gICAgLy9wYXJzZSBsZXR0ZXJzXG4gICAgdmFyIGxldHRlcnMgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjaGFyJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxldHRlcnMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaWQnKSwgMTApO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlUmVjdCA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4JyksIDEwKSArIHRleHR1cmUuZnJhbWUueCxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd5JyksIDEwKSArIHRleHR1cmUuZnJhbWUueSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd3aWR0aCcpLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaGVpZ2h0JyksIDEwKVxuICAgICAgICApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbY2hhckNvZGVdID0ge1xuICAgICAgICAgICAgeE9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeU9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3lvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeEFkdmFuY2U6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4YWR2YW5jZScpLCAxMCksXG4gICAgICAgICAgICBrZXJuaW5nOiB7fSxcbiAgICAgICAgICAgIHRleHR1cmU6IG5ldyBjb3JlLlRleHR1cmUodGV4dHVyZS5iYXNlVGV4dHVyZSwgdGV4dHVyZVJlY3QpXG5cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvL3BhcnNlIGtlcm5pbmdzXG4gICAgdmFyIGtlcm5pbmdzID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgna2VybmluZycpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBrZXJuaW5ncy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBmaXJzdCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnZmlyc3QnKSwgMTApO1xuICAgICAgICB2YXIgc2Vjb25kID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdzZWNvbmQnKSwgMTApO1xuICAgICAgICB2YXIgYW1vdW50ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdhbW91bnQnKSwgMTApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbc2Vjb25kXS5rZXJuaW5nW2ZpcnN0XSA9IGFtb3VudDtcbiAgICB9XG5cbiAgICByZXNvdXJjZS5iaXRtYXBGb250ID0gZGF0YTtcblxuICAgIC8vIEknbSBsZWF2aW5nIHRoaXMgYXMgYSB0ZW1wb3JhcnkgZml4IHNvIHdlIGNhbiB0ZXN0IHRoZSBiaXRtYXAgZm9udHMgaW4gdjNcbiAgICAvLyBidXQgaXQncyB2ZXJ5IGxpa2VseSB0byBjaGFuZ2VcbiAgICBleHRyYXMuQml0bWFwVGV4dC5mb250c1tkYXRhLmZvbnRdID0gZGF0YTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSBvciBub3QgeG1sIGRhdGFcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhIHx8ICFyZXNvdXJjZS5pc1htbClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNraXAgaWYgbm90IGJpdG1hcCBmb250IGRhdGEsIHVzaW5nIHNvbWUgc2lsbHkgZHVjay10eXBpbmdcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGFnZScpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdLmdldEF0dHJpYnV0ZSgnZmFjZScpID09PSBudWxsXG4gICAgICAgICAgICApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeG1sVXJsID0gcGF0aC5kaXJuYW1lKHJlc291cmNlLnVybCk7XG5cbiAgICAgICAgaWYgKHhtbFVybCA9PT0gJy4nKSB7XG4gICAgICAgICAgICB4bWxVcmwgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJhc2VVcmwgJiYgeG1sVXJsKSB7XG4gICAgICAgICAgICAvLyBpZiBiYXNldXJsIGhhcyBhIHRyYWlsaW5nIHNsYXNoIHRoZW4gYWRkIG9uZSB0byB4bWxVcmwgc28gdGhlIHJlcGxhY2Ugd29ya3MgYmVsb3dcbiAgICAgICAgICAgIGlmICh0aGlzLmJhc2VVcmwuY2hhckF0KHRoaXMuYmFzZVVybC5sZW5ndGggLSAxKSA9PT0gJy8nKSB7XG4gICAgICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcmVtb3ZlIGJhc2VVcmwgZnJvbSB4bWxVcmxcbiAgICAgICAgICAgIHhtbFVybCA9IHhtbFVybC5yZXBsYWNlKHRoaXMuYmFzZVVybCwgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4geG1sVXJsIG5vdywgaXQgbmVlZHMgYSB0cmFpbGluZyBzbGFzaC4gRW5zdXJlIHRoYXQgaXQgZG9lcyBpZiB0aGUgc3RyaW5nIGlzbid0IGVtcHR5LlxuICAgICAgICBpZiAoeG1sVXJsICYmIHhtbFVybC5jaGFyQXQoeG1sVXJsLmxlbmd0aCAtIDEpICE9PSAnLycpIHtcbiAgICAgICAgICAgIHhtbFVybCArPSAnLyc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRleHR1cmVVcmwgPSB4bWxVcmwgKyByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJylbMF0uZ2V0QXR0cmlidXRlKCdmaWxlJyk7XG4gICAgICAgIGlmIChjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSkge1xuICAgICAgICAgICAgLy9yZXVzZSBleGlzdGluZyB0ZXh0dXJlXG4gICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbdGV4dHVyZVVybF0pO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGxvYWRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiByZXNvdXJjZS5tZXRhZGF0YS5pbWFnZU1ldGFkYXRhXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gbG9hZCB0aGUgdGV4dHVyZSBmb3IgdGhlIGZvbnRcbiAgICAgICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgdGV4dHVyZVVybCwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgcmVzLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBsb2FkZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5sb2FkZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIExvYWRlcjogICAgICAgICAgICAgcmVxdWlyZSgnLi9sb2FkZXInKSxcblxuICAgIC8vIHBhcnNlcnNcbiAgICBiaXRtYXBGb250UGFyc2VyOiAgIHJlcXVpcmUoJy4vYml0bWFwRm9udFBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyOiAgcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIHRleHR1cmVQYXJzZXI6ICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlUGFyc2VyJyksXG4gICAgUmVzb3VyY2U6ICAgICAgICAgICByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZVxufTtcbiIsInZhciBSZXNvdXJjZUxvYWRlciA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLFxuICAgIHRleHR1cmVQYXJzZXIgPSByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBzcHJpdGVzaGVldFBhcnNlciA9IHJlcXVpcmUoJy4vc3ByaXRlc2hlZXRQYXJzZXInKSxcbiAgICBiaXRtYXBGb250UGFyc2VyID0gcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyk7XG5cbi8qKlxuICpcbiAqIFRoZSBuZXcgbG9hZGVyLCBleHRlbmRzIFJlc291cmNlIExvYWRlciBieSBDaGFkIEVuZ2xlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9lbmdsZXJjai9yZXNvdXJjZS1sb2FkZXJcbiAqXG4gKiBgYGBqc1xuICogdmFyIGxvYWRlciA9IFBJWEkubG9hZGVyOyAvLyBwaXhpIGV4cG9zZXMgYSBwcmVtYWRlIGluc3RhbmNlIGZvciB5b3UgdG8gdXNlLlxuICogLy9vclxuICogdmFyIGxvYWRlciA9IG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyKCk7IC8vIHlvdSBjYW4gYWxzbyBjcmVhdGUgeW91ciBvd24gaWYgeW91IHdhbnRcbiAqXG4gKiBsb2FkZXIuYWRkKCdidW5ueScsXCJkYXRhL2J1bm55LnBuZ1wiKTtcbiAqXG4gKiBsb2FkZXIub25jZSgnY29tcGxldGUnLG9uQXNzZXRzTG9hZGVkKTtcbiAqXG4gKiBsb2FkZXIubG9hZCgpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlJlc291cmNlTG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5sb2FkZXJzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KVxue1xuICAgIFJlc291cmNlTG9hZGVyLmNhbGwodGhpcywgYmFzZVVybCwgY29uY3VycmVuY3kpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMudXNlKExvYWRlci5fcGl4aU1pZGRsZXdhcmVbaV0oKSk7XG4gICAgfVxufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZXNvdXJjZUxvYWRlci5wcm90b3R5cGUpO1xuTG9hZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbkxvYWRlci5fcGl4aU1pZGRsZXdhcmUgPSBbXG4gICAgLy8gcGFyc2UgYW55IGJsb2IgaW50byBtb3JlIHVzYWJsZSBvYmplY3RzIChlLmcuIEltYWdlKVxuICAgIFJlc291cmNlTG9hZGVyLm1pZGRsZXdhcmUucGFyc2luZy5ibG9iLFxuICAgIC8vIHBhcnNlIGFueSBJbWFnZSBvYmplY3RzIGludG8gdGV4dHVyZXNcbiAgICB0ZXh0dXJlUGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBzcHJpdGVzaGVldFBhcnNlcixcbiAgICAvLyBwYXJzZSBhbnkgc3ByaXRlc2hlZXQgZGF0YSBpbnRvIG11bHRpcGxlIHRleHR1cmVzXG4gICAgYml0bWFwRm9udFBhcnNlclxuXTtcblxuTG9hZGVyLmFkZFBpeGlNaWRkbGV3YXJlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgTG9hZGVyLl9waXhpTWlkZGxld2FyZS5wdXNoKGZuKTtcbn07XG5cbi8vIEFkZCBjdXN0b20gZXh0ZW50aW9uc1xudmFyIFJlc291cmNlID0gUmVzb3VyY2VMb2FkZXIuUmVzb3VyY2U7XG5cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUoJ2ZudCcsIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIHBhdGggPSByZXF1aXJlKCdwYXRoJyksXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBza2lwIGlmIG5vIGRhdGEsIGl0cyBub3QganNvbiwgb3IgaXQgaXNuJ3Qgc3ByaXRlc2hlZXQgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzSnNvbiB8fCAhcmVzb3VyY2UuZGF0YS5mcmFtZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzb3VyY2UuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcm91dGUgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJykpO1xuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwoIHJlc291cmNlLnVybCApO1xuXG4gICAgICAgIC8vIGxvYWQgdGhlIGltYWdlIGZvciB0aGlzIHNoZWV0XG4gICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgcm91dGUgKyAnLycgKyByZXNvdXJjZS5kYXRhLm1ldGEuaW1hZ2UsIGxvYWRPcHRpb25zLCBmdW5jdGlvbiAocmVzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlcyA9IHt9O1xuXG4gICAgICAgICAgICB2YXIgZnJhbWVzID0gcmVzb3VyY2UuZGF0YS5mcmFtZXM7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gZnJhbWVzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gZnJhbWVzW2ldLmZyYW1lO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlY3QpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0cmltID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QuaCwgcmVjdC53KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QudywgcmVjdC5oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vICBDaGVjayB0byBzZWUgaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0udHJpbW1lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpbSA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS54IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS55IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS53IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS5oIC8gcmVzb2x1dGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBmbGlwIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IVxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gc2l6ZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggPSBzaXplLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0ID0gdGVtcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNpemUueCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLnkgLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLmhlaWdodCAvPSByZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzW2ldID0gbmV3IGNvcmUuVGV4dHVyZShyZXMudGV4dHVyZS5iYXNlVGV4dHVyZSwgc2l6ZSwgc2l6ZS5jbG9uZSgpLCB0cmltLCBmcmFtZXNbaV0ucm90YXRlZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0cyBhbHNvIGFkZCB0aGUgZnJhbWUgdG8gcGl4aSdzIGdsb2JhbCBjYWNoZSBmb3IgZnJvbUZyYW1lIGFuZCBmcm9tSW1hZ2UgZnVuY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW2ldID0gcmVzb3VyY2UudGV4dHVyZXNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH0pO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gY3JlYXRlIGEgbmV3IHRleHR1cmUgaWYgdGhlIGRhdGEgaXMgYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgIGlmIChyZXNvdXJjZS5kYXRhICYmIHJlc291cmNlLmlzSW1hZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBiYXNlVGV4dHVyZSA9IG5ldyBjb3JlLkJhc2VUZXh0dXJlKHJlc291cmNlLmRhdGEsIG51bGwsIGNvcmUudXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKHJlc291cmNlLnVybCkpO1xuICAgICAgICAgICAgYmFzZVRleHR1cmUuaW1hZ2VVcmwgPSByZXNvdXJjZS51cmw7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlID0gbmV3IGNvcmUuVGV4dHVyZShiYXNlVGV4dHVyZSk7XG4gICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdWNudGlvbnNcbiAgICAgICAgICAgIGNvcmUudXRpbHMuQmFzZVRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gYmFzZVRleHR1cmU7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gcmVzb3VyY2UudGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgdGVtcFBvbHlnb24gPSBuZXcgY29yZS5Qb2x5Z29uKCk7XG5cbi8qKlxuICogQmFzZSBtZXNoIGNsYXNzXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0byB1c2VcbiAqIEBwYXJhbSBbdmVydGljZXNdIHtGbG9hdDMyQXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHZlcnRpY2VzXG4gKiBAcGFyYW0gW3V2c10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdXZzXG4gKiBAcGFyYW0gW2luZGljZXNdIHtVaW50MTZBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgaW5kaWNlc1xuICogQHBhcmFtIFtkcmF3TW9kZV0ge251bWJlcn0gdGhlIGRyYXdNb2RlLCBjYW4gYmUgYW55IG9mIHRoZSBNZXNoLkRSQVdfTU9ERVMgY29uc3RzXG4gKi9cbmZ1bmN0aW9uIE1lc2godGV4dHVyZSwgdmVydGljZXMsIHV2cywgaW5kaWNlcywgZHJhd01vZGUpXG57XG4gICAgY29yZS5Db250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIG9mIHRoZSBNZXNoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBVdnMgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IHV2cyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxLCAwLFxuICAgICAgICAxLCAxLFxuICAgICAgICAwLCAxXSk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB2ZXJ0aWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSB2ZXJ0aWNlcyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxMDAsIDAsXG4gICAgICAgIDEwMCwgMTAwLFxuICAgICAgICAwLCAxMDBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgLy8gIFRPRE8gYXV0byBnZW5lcmF0ZSB0aGlzIGJhc2VkIG9uIGRyYXcgbW9kZSFcbiAgICB0aGlzLmluZGljZXMgPSBpbmRpY2VzIHx8IG5ldyBVaW50MTZBcnJheShbMCwgMSwgMywgMl0pO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgTWVzaCBpcyBkaXJ0eSBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzcHJpdGUuIFNldCB0byBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlbW92ZSBhbnkgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUcmlhbmdsZXMgaW4gY2FudmFzIG1vZGUgYXJlIGF1dG9tYXRpY2FsbHkgYW50aWFsaWFzZWQsIHVzZSB0aGlzIHZhbHVlIHRvIGZvcmNlIHRyaWFuZ2xlcyB0byBvdmVybGFwIGEgYml0IHdpdGggZWFjaCBvdGhlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdheSB0aGUgTWVzaCBzaG91bGQgYmUgZHJhd24sIGNhbiBiZSBhbnkgb2YgdGhlIHtAbGluayBQSVhJLm1lc2guTWVzaC5EUkFXX01PREVTfSBjb25zdHNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAc2VlIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmRyYXdNb2RlID0gZHJhd01vZGUgfHwgTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0g7XG5cbiAgICAvLyBydW4gdGV4dHVyZSBzZXR0ZXI7XG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcblxuICAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgbWVzaCBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1lc2gucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuTWVzaC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNZXNoLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLm1lc2guTWVzaCNcbiAgICAgKi9cbiAgICB0ZXh0dXJlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl90ZXh0dXJlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBXZWJHTCByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMubWVzaCk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5tZXNoLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEsIHRyYW5zZm9ybS5iLCB0cmFuc2Zvcm0uYywgdHJhbnNmb3JtLmQsIHRyYW5zZm9ybS50eCB8IDAsIHRyYW5zZm9ybS50eSB8IDApO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4LCB0cmFuc2Zvcm0udHkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc1RyaWFuZ2xlTWVzaChjb250ZXh0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzKGNvbnRleHQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiBUcmlhbmdsZSBNZXNoIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aCAvIDI7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGggLSAyOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4LCAoaW5kZXggKyAyKSwgKGluZGV4ICsgNCkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiB0cmlhbmdsZSBtb2RlIHVzaW5nIGNhbnZhc1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc1RyaWFuZ2xlcyA9IGZ1bmN0aW9uIChjb250ZXh0KVxue1xuICAgIC8vIGRyYXcgdHJpYW5nbGVzISFcbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcblxuICAgIHZhciBsZW5ndGggPSBpbmRpY2VzLmxlbmd0aDtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAzKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4MCA9IGluZGljZXNbaV0gKiAyLCBpbmRleDEgPSBpbmRpY2VzW2kgKyAxXSAqIDIsIGluZGV4MiA9IGluZGljZXNbaSArIDJdICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3Mgb25lIG9mIHRoZSB0cmlhbmdsZXMgdGhhdCBmb3JtIHRoaXMgTWVzaFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHBhcmFtIHZlcnRpY2VzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgTWVzaFxuICogQHBhcmFtIHV2cyB7RmxvYXQzMkFycmF5fSBhIHJlZmVyZW5jZSB0byB0aGUgdXZzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gaW5kZXgwIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgxIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgc2Vjb25kIHZlcnRleFxuICogQHBhcmFtIGluZGV4MiB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIHRoaXJkIHZlcnRleFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZSA9IGZ1bmN0aW9uIChjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleDAsIGluZGV4MSwgaW5kZXgyKVxue1xuICAgIHZhciB0ZXh0dXJlU291cmNlID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2U7XG4gICAgdmFyIHRleHR1cmVXaWR0aCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdmFyIHRleHR1cmVIZWlnaHQgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHZhciB4MCA9IHZlcnRpY2VzW2luZGV4MF0sIHgxID0gdmVydGljZXNbaW5kZXgxXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleDJdO1xuICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4MCArIDFdLCB5MSA9IHZlcnRpY2VzW2luZGV4MSArIDFdLCB5MiA9IHZlcnRpY2VzW2luZGV4MiArIDFdO1xuXG4gICAgdmFyIHUwID0gdXZzW2luZGV4MF0gKiB0ZXh0dXJlV2lkdGgsIHUxID0gdXZzW2luZGV4MV0gKiB0ZXh0dXJlV2lkdGgsIHUyID0gdXZzW2luZGV4Ml0gKiB0ZXh0dXJlV2lkdGg7XG4gICAgdmFyIHYwID0gdXZzW2luZGV4MCArIDFdICogdGV4dHVyZUhlaWdodCwgdjEgPSB1dnNbaW5kZXgxICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MiA9IHV2c1tpbmRleDIgKyAxXSAqIHRleHR1cmVIZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5jYW52YXNQYWRkaW5nID4gMClcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nWCA9IHRoaXMuY2FudmFzUGFkZGluZyAvIHRoaXMud29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIHBhZGRpbmdZID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgY2VudGVyWCA9ICh4MCArIHgxICsgeDIpIC8gMztcbiAgICAgICAgdmFyIGNlbnRlclkgPSAoeTAgKyB5MSArIHkyKSAvIDM7XG5cbiAgICAgICAgdmFyIG5vcm1YID0geDAgLSBjZW50ZXJYO1xuICAgICAgICB2YXIgbm9ybVkgPSB5MCAtIGNlbnRlclk7XG5cbiAgICAgICAgdmFyIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MCA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MCA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIC8vXG5cbiAgICAgICAgbm9ybVggPSB4MSAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTEgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MSA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MSA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIG5vcm1YID0geDIgLSBjZW50ZXJYO1xuICAgICAgICBub3JtWSA9IHkyIC0gY2VudGVyWTtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDIgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTIgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LnNhdmUoKTtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG5cbiAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcblxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICBjb250ZXh0LmNsaXAoKTtcblxuICAgIC8vIENvbXB1dGUgbWF0cml4IHRyYW5zZm9ybVxuICAgIHZhciBkZWx0YSA9ICAodTAgKiB2MSkgICAgICArICh2MCAqIHUyKSAgICAgICsgKHUxICogdjIpICAgICAgLSAodjEgKiB1MikgICAgICAtICh2MCAqIHUxKSAgICAgIC0gKHUwICogdjIpO1xuICAgIHZhciBkZWx0YUEgPSAoeDAgKiB2MSkgICAgICArICh2MCAqIHgyKSAgICAgICsgKHgxICogdjIpICAgICAgLSAodjEgKiB4MikgICAgICAtICh2MCAqIHgxKSAgICAgIC0gKHgwICogdjIpO1xuICAgIHZhciBkZWx0YUIgPSAodTAgKiB4MSkgICAgICArICh4MCAqIHUyKSAgICAgICsgKHUxICogeDIpICAgICAgLSAoeDEgKiB1MikgICAgICAtICh4MCAqIHUxKSAgICAgIC0gKHUwICogeDIpO1xuICAgIHZhciBkZWx0YUMgPSAodTAgKiB2MSAqIHgyKSArICh2MCAqIHgxICogdTIpICsgKHgwICogdTEgKiB2MikgLSAoeDAgKiB2MSAqIHUyKSAtICh2MCAqIHUxICogeDIpIC0gKHUwICogeDEgKiB2Mik7XG4gICAgdmFyIGRlbHRhRCA9ICh5MCAqIHYxKSAgICAgICsgKHYwICogeTIpICAgICAgKyAoeTEgKiB2MikgICAgICAtICh2MSAqIHkyKSAgICAgIC0gKHYwICogeTEpICAgICAgLSAoeTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhRSA9ICh1MCAqIHkxKSAgICAgICsgKHkwICogdTIpICAgICAgKyAodTEgKiB5MikgICAgICAtICh5MSAqIHUyKSAgICAgIC0gKHkwICogdTEpICAgICAgLSAodTAgKiB5Mik7XG4gICAgdmFyIGRlbHRhRiA9ICh1MCAqIHYxICogeTIpICsgKHYwICogeTEgKiB1MikgKyAoeTAgKiB1MSAqIHYyKSAtICh5MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB5MikgLSAodTAgKiB5MSAqIHYyKTtcblxuICAgIGNvbnRleHQudHJhbnNmb3JtKGRlbHRhQSAvIGRlbHRhLCBkZWx0YUQgLyBkZWx0YSxcbiAgICAgICAgZGVsdGFCIC8gZGVsdGEsIGRlbHRhRSAvIGRlbHRhLFxuICAgICAgICBkZWx0YUMgLyBkZWx0YSwgZGVsdGFGIC8gZGVsdGEpO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UodGV4dHVyZVNvdXJjZSwgMCwgMCk7XG4gICAgY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5cblxuLyoqXG4gKiBSZW5kZXJzIGEgZmxhdCBNZXNoXG4gKlxuICogQHBhcmFtIE1lc2gge1BJWEkubWVzaC5NZXNofSBUaGUgTWVzaCB0byByZW5kZXJcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLnJlbmRlck1lc2hGbGF0ID0gZnVuY3Rpb24gKE1lc2gpXG57XG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgdmFyIHZlcnRpY2VzID0gTWVzaC52ZXJ0aWNlcztcblxuICAgIHZhciBsZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGgvMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgIGZvciAodmFyIGk9MTsgaSA8IGxlbmd0aC0yOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpKjI7XG5cbiAgICAgICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXhdLCAgIHgxID0gdmVydGljZXNbaW5kZXgrMl0sIHgyID0gdmVydGljZXNbaW5kZXgrNF07XG4gICAgICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4KzFdLCB5MSA9IHZlcnRpY2VzW2luZGV4KzNdLCB5MiA9IHZlcnRpY2VzW2luZGV4KzVdO1xuXG4gICAgICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgyLCB5Mik7XG4gICAgfVxuXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnI0ZGMDAwMCc7XG4gICAgY29udGV4dC5maWxsKCk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbn07XG5cbi8qKlxuICogV2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLCB0aGlzIGV2ZW50IHdpbGwgZmlyZSB0byB1cGRhdGUgdGhlIHNjYWxlIGFuZCBmcmFtZVxuICpcbiAqIEBwYXJhbSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51cGRhdGVGcmFtZSA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgbWVzaCBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAoIXRoaXMuX2N1cnJlbnRCb3VuZHMpIHtcbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gbWF0cml4IHx8IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICAgICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSB2ZXJ0aWNlcy5sZW5ndGg7IGkgPCBuOyBpICs9IDIpIHtcbiAgICAgICAgICAgIHZhciByYXdYID0gdmVydGljZXNbaV0sIHJhd1kgPSB2ZXJ0aWNlc1tpICsgMV07XG4gICAgICAgICAgICB2YXIgeCA9IChhICogcmF3WCkgKyAoYyAqIHJhd1kpICsgdHg7XG4gICAgICAgICAgICB2YXIgeSA9IChkICogcmF3WSkgKyAoYiAqIHJhd1gpICsgdHk7XG5cbiAgICAgICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG5cbiAgICAgICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuICAgICAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWluWCA9PT0gLUluZmluaXR5IHx8IG1heFkgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBtZXNoLiBXb3JrcyBvbmx5IGZvciBUUklBTkdMRV9NRVNIXG4gKlxuICogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuICovXG5NZXNoLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50ICkge1xuICAgIGlmICghdGhpcy5nZXRCb3VuZHMoKS5jb250YWlucyhwb2ludC54LCBwb2ludC55KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHBvaW50cyA9IHRlbXBQb2x5Z29uLnBvaW50cztcbiAgICB2YXIgaSwgbGVuO1xuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVMpIHtcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgICAgIGxlbiA9IHRoaXMuaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgIC8vVE9ETzogaW5saW5lIHRoaXMuXG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTMpIHtcbiAgICAgICAgICAgIHZhciBpbmQwID0gaW5kaWNlc1tpXSoyLCBpbmQxID0gaW5kaWNlc1tpKzFdKjIsIGluZDIgPSBpbmRpY2VzW2krMl0qMjtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2luZDBdO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaW5kMCsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2luZDFdO1xuICAgICAgICAgICAgcG9pbnRzWzNdID0gdmVydGljZXNbaW5kMSsxXTtcbiAgICAgICAgICAgIHBvaW50c1s0XSA9IHZlcnRpY2VzW2luZDJdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaW5kMisxXTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBsZW4gPSB2ZXJ0aWNlcy5sZW5ndGg7XG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTYpIHtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2ldO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaSsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2krMl07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpKzNdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaSs0XTtcbiAgICAgICAgICAgIHBvaW50c1s1XSA9IHZlcnRpY2VzW2krNV07XG4gICAgICAgICAgICBpZiAodGVtcFBvbHlnb24uY29udGFpbnModGVtcFBvaW50LngsIHRlbXBQb2ludC55KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGlmZmVyZW50IGRyYXdpbmcgYnVmZmVyIG1vZGVzIHN1cHBvcnRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX01FU0hcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFU1xuICovXG5NZXNoLkRSQVdfTU9ERVMgPSB7XG4gICAgVFJJQU5HTEVfTUVTSDogMCxcbiAgICBUUklBTkdMRVM6IDFcbn07XG4iLCJ2YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xuXG4vKipcbiAqIFRoZSBQbGFuZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciBQbGFuZSA9IG5ldyBQSVhJLlBsYW5lKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIFBsYW5lLlxuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWCAtIFRoZSBudW1iZXIgb3ggeCBzZWdtZW50c1xuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWSAtIFRoZSBudW1iZXIgb2YgeSBzZWdtZW50c1xuICpcbiAqL1xuZnVuY3Rpb24gUGxhbmUodGV4dHVyZSwgc2VnbWVudHNYLCBzZWdtZW50c1kpXG57XG4gICAgTWVzaC5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tlciBmb3IgaWYgdGhlIFBsYW5lIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuc2VnbWVudHNYID0gIHNlZ21lbnRzWCB8fCAxMDtcbiAgICB0aGlzLnNlZ21lbnRzWSA9IHNlZ21lbnRzWSB8fCAxMDtcblxuICAgIHRoaXMuZHJhd01vZGUgPSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVTO1xuICAgIHRoaXMucmVmcmVzaCgpO1xuXG59XG5cblxuLy8gY29uc3RydWN0b3JcblBsYW5lLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIE1lc2gucHJvdG90eXBlICk7XG5QbGFuZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQbGFuZTtcbm1vZHVsZS5leHBvcnRzID0gUGxhbmU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5QbGFuZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgdG90YWwgPSB0aGlzLnNlZ21lbnRzWCAqIHRoaXMuc2VnbWVudHNZO1xuICAgIHZhciB2ZXJ0cyA9IFtdO1xuICAgIHZhciBjb2xvcnMgPSBbXTtcbiAgICB2YXIgdXZzID0gW107XG4gICAgdmFyIGluZGljZXMgPSBbXTtcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMudGV4dHVyZTtcblxuICAvLyAgdGV4dHVyZS53aWR0aCA9IDgwMCB0ZXh0dXJlLndpZHRoIHx8IDgwMDtcbiAvLyAgIHRleHR1cmUuaGVpZ2h0ID0gODAwLy90ZXh0dXJlLmhlaWdodCB8fCA4MDA7XG5cbiAgICB2YXIgc2VnbWVudHNYU3ViID0gdGhpcy5zZWdtZW50c1ggLSAxO1xuICAgIHZhciBzZWdtZW50c1lTdWIgPSB0aGlzLnNlZ21lbnRzWSAtIDE7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgdmFyIHNpemVYID0gdGV4dHVyZS53aWR0aCAvIHNlZ21lbnRzWFN1YjtcbiAgICB2YXIgc2l6ZVkgPSB0ZXh0dXJlLmhlaWdodCAvIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbDsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHggPSAoaSAlIHRoaXMuc2VnbWVudHNYKTtcbiAgICAgICAgdmFyIHkgPSAoIChpIC8gdGhpcy5zZWdtZW50c1ggKSB8IDAgKTtcblxuXG4gICAgICAgIHZlcnRzLnB1c2goKHggKiBzaXplWCksXG4gICAgICAgICAgICAgICAgICAgKHkgKiBzaXplWSkpO1xuXG4gICAgICAgIC8vIHRoaXMgd29ya3MgZm9yIHJlY3Rhbmd1bGFyIHRleHR1cmVzLiBcbiAgICAgICAgdXZzLnB1c2godGV4dHVyZS5fdXZzLngwICsgKHRleHR1cmUuX3V2cy54MSAtIHRleHR1cmUuX3V2cy54MCkgKiAoeCAvICh0aGlzLnNlZ21lbnRzWC0xKSksIHRleHR1cmUuX3V2cy55MCArICh0ZXh0dXJlLl91dnMueTMtdGV4dHVyZS5fdXZzLnkwKSAqICh5LyAodGhpcy5zZWdtZW50c1ktMSkpKTtcbiAgICAgIH1cblxuICAgIC8vICBjb25zXG5cbiAgICB2YXIgdG90YWxTdWIgPSBzZWdtZW50c1hTdWIgKiBzZWdtZW50c1lTdWI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTdWI7IGkrKykge1xuXG4gICAgICAgIHZhciB4cG9zID0gaSAlIHNlZ21lbnRzWFN1YjtcbiAgICAgICAgdmFyIHlwb3MgPSAoaSAvIHNlZ21lbnRzWFN1YiApIHwgMDtcblxuXG4gICAgICAgIHZhciAgdmFsdWUgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWUyID0gKHlwb3MgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zICsgMTtcbiAgICAgICAgdmFyICB2YWx1ZTMgPSAoKHlwb3MrMSkgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zO1xuICAgICAgICB2YXIgIHZhbHVlNCA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuXG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZSwgdmFsdWUyLCB2YWx1ZTMpO1xuICAgICAgICBpbmRpY2VzLnB1c2godmFsdWUyLCB2YWx1ZTQsIHZhbHVlMyk7XG4gICAgfVxuXG5cbiAgICAvL2NvbnNvbGUubG9nKGluZGljZXMpXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkodmVydHMpO1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheSh1dnMpO1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShjb2xvcnMpO1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShpbmRpY2VzKTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGV4dHVyZSBVVnMgd2hlbiBuZXcgdGV4dHVyZSBpcyBzZXRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QbGFuZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFBsYW5lIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBUaGUgcm9wZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciByb3BlID0gbmV3IFBJWEkuUm9wZShQSVhJLlRleHR1cmUuZnJvbUltYWdlKFwic25ha2UucG5nXCIpLCBwb2ludHMpO1xuICogIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5tZXNoLk1lc2hcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB7UElYSS5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIHRleHR1cmUgdG8gdXNlIG9uIHRoZSByb3BlLlxuICogQHBhcmFtIHtQSVhJLlBvaW50W119IHBvaW50cyAtIEFuIGFycmF5IG9mIHtAbGluayBQSVhJLlBvaW50fSBvYmplY3RzIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gKlxuICovXG5mdW5jdGlvbiBSb3BlKHRleHR1cmUsIHBvaW50cylcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnRbXX0gQW4gYXJyYXkgb2YgcG9pbnRzIHRoYXQgZGV0ZXJtaW5lIHRoZSByb3BlXG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgb2YgdmVydGljZXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhpcyByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBUaGUgV2ViR0wgVXZzIG9mIHRoZSByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogNCk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgY29sb3IgY29tcG9uZW50c1xuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgcm9wZSBpcyByZWFkeSB0byBiZSBkcmF3bi4gTmVlZGVkIGJlY2F1c2UgTWVzaCBjdG9yIGNhblxuICAgICAqIGNhbGwgX29uVGV4dHVyZVVwZGF0ZWQgd2hpY2ggY291bGQgY2FsbCByZWZyZXNoIHRvbyBlYXJseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgIHRoaXMucmVmcmVzaCgpO1xufVxuXG5cbi8vIGNvbnN0cnVjdG9yXG5Sb3BlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTWVzaC5wcm90b3R5cGUpO1xuUm9wZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3BlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3BlO1xuXG4vKipcbiAqIFJlZnJlc2hlc1xuICpcbiAqL1xuUm9wZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgLy8gaWYgdG9vIGxpdHRsZSBwb2ludHMsIG9yIHRleHR1cmUgaGFzbid0IGdvdCBVVnMgc2V0IHlldCBqdXN0IG1vdmUgb24uXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxIHx8ICF0aGlzLl90ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuXG4gICAgdmFyIHRleHR1cmVVdnMgPSB0aGlzLl90ZXh0dXJlLl91dnM7XG4gICAgdmFyIG9mZnNldCA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDAsIHRleHR1cmVVdnMueTApO1xuICAgIHZhciBmYWN0b3IgPSBuZXcgY29yZS5Qb2ludCh0ZXh0dXJlVXZzLngyIC0gdGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MiAtIHRleHR1cmVVdnMueTApO1xuXG4gICAgdXZzWzBdID0gMCArIG9mZnNldC54O1xuICAgIHV2c1sxXSA9IDAgKyBvZmZzZXQueTtcbiAgICB1dnNbMl0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICBjb2xvcnNbMF0gPSAxO1xuICAgIGNvbG9yc1sxXSA9IDE7XG5cbiAgICBpbmRpY2VzWzBdID0gMDtcbiAgICBpbmRpY2VzWzFdID0gMTtcblxuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgYW1vdW50O1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG4gICAgICAgIC8vIHRpbWUgdG8gZG8gc29tZSBzbWFydCBkcmF3aW5nIVxuICAgICAgICBhbW91bnQgPSBpIC8gKHRvdGFsLTEpO1xuXG4gICAgICAgIHV2c1tpbmRleF0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrMV0gPSAwICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgdXZzW2luZGV4KzJdID0gYW1vdW50ICogZmFjdG9yLnggKyBvZmZzZXQueDtcbiAgICAgICAgdXZzW2luZGV4KzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgY29sb3JzW2luZGV4XSA9IDE7XG4gICAgICAgIGNvbG9yc1tpbmRleCsxXSA9IDE7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgaW5kaWNlc1tpbmRleF0gPSBpbmRleDtcbiAgICAgICAgaW5kaWNlc1tpbmRleCArIDFdID0gaW5kZXggKyAxO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIE1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUuY2FsbCh0aGlzKTtcblxuICAgIC8vIHdhaXQgZm9yIHRoZSBSb3BlIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Sb3BlLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbGFzdFBvaW50ID0gcG9pbnRzWzBdO1xuICAgIHZhciBuZXh0UG9pbnQ7XG4gICAgdmFyIHBlcnBYID0gMDtcbiAgICB2YXIgcGVycFkgPSAwO1xuXG4gICAgLy8gdGhpcy5jb3VudCAtPSAwLjI7XG5cbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgcmF0aW8sIHBlcnBMZW5ndGgsIG51bTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWw7IGkrKylcbiAgICB7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBpbmRleCA9IGkgKiA0O1xuXG4gICAgICAgIGlmIChpIDwgcG9pbnRzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0UG9pbnQgPSBwb2ludHNbaSsxXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcGVycFkgPSAtKG5leHRQb2ludC54IC0gbGFzdFBvaW50LngpO1xuICAgICAgICBwZXJwWCA9IG5leHRQb2ludC55IC0gbGFzdFBvaW50Lnk7XG5cbiAgICAgICAgcmF0aW8gPSAoMSAtIChpIC8gKHRvdGFsLTEpKSkgKiAxMDtcblxuICAgICAgICBpZiAocmF0aW8gPiAxKVxuICAgICAgICB7XG4gICAgICAgICAgICByYXRpbyA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwTGVuZ3RoID0gTWF0aC5zcXJ0KHBlcnBYICogcGVycFggKyBwZXJwWSAqIHBlcnBZKTtcbiAgICAgICAgbnVtID0gdGhpcy5fdGV4dHVyZS5oZWlnaHQgLyAyOyAvLygyMCArIE1hdGguYWJzKE1hdGguc2luKChpICsgdGhpcy5jb3VudCkgKiAwLjMpICogNTApICkqIHJhdGlvO1xuICAgICAgICBwZXJwWCAvPSBwZXJwTGVuZ3RoO1xuICAgICAgICBwZXJwWSAvPSBwZXJwTGVuZ3RoO1xuXG4gICAgICAgIHBlcnBYICo9IG51bTtcbiAgICAgICAgcGVycFkgKj0gbnVtO1xuXG4gICAgICAgIHZlcnRpY2VzW2luZGV4XSA9IHBvaW50LnggKyBwZXJwWDtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMV0gPSBwb2ludC55ICsgcGVycFk7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzJdID0gcG9pbnQueCAtIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCszXSA9IHBvaW50LnkgLSBwZXJwWTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBwb2ludDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkubWVzaFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNZXNoOiAgICAgICAgICAgcmVxdWlyZSgnLi9NZXNoJyksXG4gICAgUGxhbmU6ICAgICAgICAgICByZXF1aXJlKCcuL1BsYW5lJyksXG4gICAgUm9wZTogICAgICAgICAgIHJlcXVpcmUoJy4vUm9wZScpLFxuICAgIE1lc2hSZW5kZXJlcjogICByZXF1aXJlKCcuL3dlYmdsL01lc2hSZW5kZXJlcicpLFxuICAgIE1lc2hTaGFkZXI6ICAgICByZXF1aXJlKCcuL3dlYmdsL01lc2hTaGFkZXInKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIE1lc2ggPSByZXF1aXJlKCcuLi9NZXNoJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgTWVzaFJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9NZXNoUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgY29yZS5PYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIFxuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSgxNTAwMCk7XG5cbiAgICAvL1RPRE8gdGhpcyBjb3VsZCBiZSBhIHNpbmdsZSBidWZmZXIgc2hhcmVkIGFtb25nc3QgYWxsIHJlbmRlcmVycyBhcyB3ZSByZXVzZSB0aGlzIHNldCB1cCBpbiBtb3N0IHJlbmRlcmVyc1xuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgMTUwMDA7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufVxuXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoUmVuZGVyZXI7XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignbWVzaCcsIE1lc2hSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIG1lc2gge1BJWEkubWVzaC5NZXNofSB0aGUgbWVzaCB0byByZW5kZXJcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICBpZighbWVzaC5fdmVydGV4QnVmZmVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5faW5pdFdlYkdMKG1lc2gpO1xuICAgIH1cblxuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXIsXG4gICAgICAgIGdsID0gcmVuZGVyZXIuZ2wsXG4gICAgICAgIHRleHR1cmUgPSBtZXNoLl90ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBzaGFkZXIgPSBtZXNoLnNoYWRlcjsvLyB8fCByZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnBsdWdpbnMubWVzaFNoYWRlcjtcblxuICAgIHZhciBkcmF3TW9kZSA9IG1lc2guZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIID8gZ2wuVFJJQU5HTEVfU1RSSVAgOiBnbC5UUklBTkdMRVM7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShtZXNoLmJsZW5kTW9kZSk7XG5cbiAgICAvL1RPRE8gY2FjaGUgY3VzdG9tIHN0YXRlLi5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzaGFkZXIgPSBzaGFkZXIuc2hhZGVyc1tnbC5pZF0gfHwgc2hhZGVyLmdldFNoYWRlcihyZW5kZXJlcik7Ly8gOiBzaGFkZXI7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4LnZhbHVlID0gbWVzaC53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gbWVzaC53b3JsZEFscGhhO1xuXG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuXG4gICAgaWYgKCFtZXNoLmRpcnR5KVxuICAgIHtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIG1lc2gudmVydGljZXMpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIHV2c1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cblxuICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCAwLCBtZXNoLmluZGljZXMpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIG1lc2guZGlydHkgPSBmYWxzZTtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZG9udCBuZWVkIHRvIHVwbG9hZCFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIH1cblxuICAgIGdsLmRyYXdFbGVtZW50cyhkcmF3TW9kZSwgbWVzaC5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuXG59O1xuXG4vKipcbiAqIFByZXBhcmVzIGFsbCB0aGUgYnVmZmVycyB0byByZW5kZXIgdGhpcyBtZXNoXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLl9pbml0V2ViR0wgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICAvLyBidWlsZCB0aGUgc3RyaXAhXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIG1lc2guX3ZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIG1lc2guX2luZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5fdXZCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC52ZXJ0aWNlcywgZ2wuRFlOQU1JQ19EUkFXKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgaWYobWVzaC5jb2xvcnMpe1xuICAgICAgICBtZXNoLl9jb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fY29sb3JCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5jb2xvcnMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG59O1xuXG5cbi8qKlxuICogRW1wdGllcyB0aGUgY3VycmVudCBiYXRjaC5cbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBtZXNoIHJlbmRlcmVyLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgXG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgTWVzaCByZW5kZXJlclxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIFdlYkdMIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gTWVzaFNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIGNvcmUuU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIGFscGhhIDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYVRleHR1cmVDb29yZDowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5NZXNoU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TaGFkZXIucHJvdG90eXBlKTtcbk1lc2hTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gTWVzaFNoYWRlcjtcblxuY29yZS5TaGFkZXJNYW5hZ2VyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoU2hhZGVyJywgTWVzaFNoYWRlcik7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9zaWduXG5cbmlmICghTWF0aC5zaWduKVxue1xuICAgIE1hdGguc2lnbiA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHggPSAreDtcbiAgICAgICAgaWYgKHggPT09IDAgfHwgaXNOYU4oeCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4ID4gMCA/IDEgOiAtMTtcbiAgICB9O1xufVxuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvb2JqZWN0LWFzc2lnblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnblxuXG5pZiAoIU9iamVjdC5hc3NpZ24pXG57XG4gICAgT2JqZWN0LmFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcbn1cbiIsInJlcXVpcmUoJy4vT2JqZWN0LmFzc2lnbicpO1xucmVxdWlyZSgnLi9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUnKTtcbnJlcXVpcmUoJy4vTWF0aC5zaWduJyk7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cDovL3BhdWxpcmlzaC5jb20vMjAxMS9yZXF1ZXN0YW5pbWF0aW9uZnJhbWUtZm9yLXNtYXJ0LWFuaW1hdGluZy9cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzE1Nzk2NzFcbi8vIGh0dHA6Ly91cGRhdGVzLmh0bWw1cm9ja3MuY29tLzIwMTIvMDUvcmVxdWVzdEFuaW1hdGlvbkZyYW1lLUFQSS1ub3ctd2l0aC1zdWItbWlsbGlzZWNvbmQtcHJlY2lzaW9uXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90aW1oYWxsLzQwNzg2MTRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9GaW5hbmNpYWwtVGltZXMvcG9seWZpbGwtc2VydmljZS90cmVlL21hc3Rlci9wb2x5ZmlsbHMvcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG5cbi8vIEV4cGVjdGVkIHRvIGJlIHVzZWQgd2l0aCBCcm93c2VyZml5XG4vLyBCcm93c2VyaWZ5IGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB0aGUgdXNlIG9mIGBnbG9iYWxgIGFuZCBwYXNzZXMgdGhlXG4vLyBjb3JyZWN0IHJlZmVyZW5jZSBvZiBgZ2xvYmFsYCwgYHNlbGZgLCBhbmQgZmluYWxseSBgd2luZG93YFxuXG4vLyBEYXRlLm5vd1xuaWYgKCEoRGF0ZS5ub3cgJiYgRGF0ZS5wcm90b3R5cGUuZ2V0VGltZSkpIHtcbiAgICBEYXRlLm5vdyA9IGZ1bmN0aW9uIG5vdygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIH07XG59XG5cbi8vIHBlcmZvcm1hbmNlLm5vd1xuaWYgKCEoZ2xvYmFsLnBlcmZvcm1hbmNlICYmIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cpKSB7XG4gICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgaWYgKCFnbG9iYWwucGVyZm9ybWFuY2UpIHtcbiAgICAgICAgZ2xvYmFsLnBlcmZvcm1hbmNlID0ge307XG4gICAgfVxuICAgIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIH07XG59XG5cbi8vIHJlcXVlc3RBbmltYXRpb25GcmFtZVxudmFyIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbnZhciB2ZW5kb3JzID0gWydtcycsICdtb3onLCAnd2Via2l0JywgJ28nXTtcblxuZm9yKHZhciB4ID0gMDsgeCA8IHZlbmRvcnMubGVuZ3RoICYmICFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lOyArK3gpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnQ2FuY2VsQW5pbWF0aW9uRnJhbWUnXSB8fFxuICAgICAgICBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbn1cblxuaWYgKCFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZGVsYXkgPSAxNiArIGxhc3RUaW1lIC0gY3VycmVudFRpbWU7XG5cbiAgICAgICAgaWYgKGRlbGF5IDwgMCkge1xuICAgICAgICAgICAgZGVsYXkgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFRpbWUgPSBjdXJyZW50VGltZTtcblxuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsYXN0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBjYWxsYmFjayhwZXJmb3JtYW5jZS5ub3coKSk7XG4gICAgICAgIH0sIGRlbGF5KTtcbiAgICB9O1xufVxuXG5pZiAoIWdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSkge1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgfTtcbn1cbiJdfQ== +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L09ic2VydmFibGVQb2ludC5qcyIsInNyYy9jb3JlL2Rpc3BsYXkvVHJhbnNmb3JtU3RhdGljLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3MuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9HcmFwaGljc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvV2ViR0xHcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ2lyY2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRDb21wbGV4UG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkTGluZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL01hdHJpeC5qcyIsInNyYy9jb3JlL21hdGgvUG9pbnQuanMiLCJzcmMvY29yZS9tYXRoL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvQ2lyY2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvRWxsaXBzZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1BvbHlnb24uanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9SZWN0YW5nbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlQnVmZmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvU3lzdGVtUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNNYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1RleHR1cmVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9NYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUXVhZC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvU3RlbmNpbE1hc2tTdGFjay5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9zcHJpdGVzL1Nwcml0ZS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvdGV4dC9UZXh0LmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9CYXNlVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1JlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9UZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZVV2cy5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90aWNrZXIvVGlja2VyLmpzIiwic3JjL2NvcmUvdGlja2VyL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzLmpzIiwic3JjL2NvcmUvdXRpbHMvaW5kZXguanMiLCJzcmMvY29yZS91dGlscy9wbHVnaW5UYXJnZXQuanMiLCJzcmMvZGVwcmVjYXRpb24uanMiLCJzcmMvZXh0cmFzL0JpdG1hcFRleHQuanMiLCJzcmMvZXh0cmFzL01vdmllQ2xpcC5qcyIsInNyYy9leHRyYXMvVGlsaW5nU3ByaXRlLmpzIiwic3JjL2V4dHJhcy9jYWNoZUFzQml0bWFwLmpzIiwic3JjL2V4dHJhcy9nZXRDaGlsZEJ5TmFtZS5qcyIsInNyYy9leHRyYXMvZ2V0R2xvYmFsUG9zaXRpb24uanMiLCJzcmMvZXh0cmFzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvYXNjaWkvQXNjaWlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibG9vbS9CbG9vbUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckRpckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1clhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9TbWFydEJsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvck1hdHJpeEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbG9yL0NvbG9yU3RlcEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2RvdC9Eb3RTY3JlZW5GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0JsdXJZVGludEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2dyYXkvR3JheUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvaW52ZXJ0L0ludmVydEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL25vaXNlL05vaXNlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9yZ2IvUkdCU3BsaXRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zZXBpYS9TZXBpYUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0QXhpc0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdHdpc3QvVHdpc3RGaWx0ZXIuanMiLCJzcmMvc3JjL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL0ludGVyYWN0aW9uRGF0YS5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbk1hbmFnZXIuanMiLCJzcmMvaW50ZXJhY3Rpb24vaW5kZXguanMiLCJzcmMvaW50ZXJhY3Rpb24vaW50ZXJhY3RpdmVUYXJnZXQuanMiLCJzcmMvbG9hZGVycy9iaXRtYXBGb250UGFyc2VyLmpzIiwic3JjL2xvYWRlcnMvaW5kZXguanMiLCJzcmMvbG9hZGVycy9sb2FkZXIuanMiLCJzcmMvbG9hZGVycy9zcHJpdGVzaGVldFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL3RleHR1cmVQYXJzZXIuanMiLCJzcmMvbWVzaC9NZXNoLmpzIiwic3JjL21lc2gvUGxhbmUuanMiLCJzcmMvbWVzaC9Sb3BlLmpzIiwic3JjL21lc2gvaW5kZXguanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoUmVuZGVyZXIuanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoU2hhZGVyLmpzIiwic3JjL3BvbHlmaWxsL01hdGguc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9PYmplY3QuYXNzaWduLmpzIiwic3JjL3BvbHlmaWxsL2luZGV4LmpzIiwic3JjL3BvbHlmaWxsL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzV1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNyaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbm1DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Y0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2h5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNWxCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM21CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25iQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICBjcmVhdGVDb250ZXh0OiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9jcmVhdGVDb250ZXh0JyksXG4gICAgc2V0VmVydGV4QXR0cmliQXJyYXlzOiBcdHJlcXVpcmUoJy4vbGliL3NldFZlcnRleEF0dHJpYkFycmF5cycpLFxuICAgIFxuICAgIEdMQnVmZmVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMQnVmZmVyJyksXG4gICAgR0xGcmFtZWJ1ZmZlcjogXHRcdFx0cmVxdWlyZSgnLi9saWIvR0xGcmFtZWJ1ZmZlcicpLFxuICAgIEdMU2hhZGVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMU2hhZGVyJyksXG4gICAgR0xUZXh0dXJlOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMVGV4dHVyZScpLFxuICAgIFxuICAgIFZlcnRleEFycmF5T2JqZWN0OiBcdFx0cmVxdWlyZSgnLi9saWIvVmVydGV4QXJyYXlPYmplY3QnKVxuXG59OyIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEVNUFRZX0FSUkFZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcblxudmFyIEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuQVJSQVlfQlVGRkVSO1xuXHR0aGlzLmRyYXdUeXBlID0gZHJhd1R5cGUgfHwgZ2wuU1RBVElDX0RSQVc7XG5cdHRoaXMuZGF0YSA9IEVNUFRZX0FSUkFZX0JVRkZFUjtcblxuXHRpZihkYXRhKVxuXHR7XG5cdFx0dGhpcy51cGxvYWQoZGF0YSk7XG5cdH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihkYXRhLCBvZmZzZXQsIGRvbnRCaW5kKVxue1xuXHQvLyB0b2RvIC0gbmVlZGVkP1xuXHQvL2lmKCFkb250QmluZClcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblx0XG5cdGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcblx0b2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cblx0aWYodGhpcy5kYXRhLmJ5dGVMZW5ndGggPj0gZGF0YS5ieXRlTGVuZ3RoKVxuXHR7XHRcblx0XHRnbC5idWZmZXJTdWJEYXRhKHRoaXMudHlwZSwgb2Zmc2V0LCBkYXRhKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC5idWZmZXJEYXRhKHRoaXMudHlwZSwgZGF0YSwgdGhpcy5kcmF3VHlwZSk7XG5cdH1cblxuXHR0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRCdWZmZXIodGhpcy50eXBlLCB0aGlzLmJ1ZmZlcik7XG59XG5cbkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24oZ2wsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZSA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIHR5cGUsIGRyYXdUeXBlKTtcbn1cblxuLy9UT0RPIERlc3Ryb3kuLlxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcjtcblxuIiwiXG52YXIgVGV4dHVyZSA9IHJlcXVpcmUoJy4vR0xUZXh0dXJlJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIEZyYW1lYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEZyYW1lYnVmZmVyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblx0XG5cdHRoaXMuc3RlbmNpbCA9IG51bGw7XG5cdHRoaXMudGV4dHVyZSA9IG51bGw7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlVGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBuZXcgVGV4dHVyZShnbCk7XG5cblx0dGhpcy50ZXh0dXJlLmJpbmQoKTtcblxuXHQvL2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZS50ZXh0dXJlLCAwKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmVuYWJsZVN0ZW5jaWwgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuc3RlbmNpbClyZXR1cm47XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnN0ZW5jaWwgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcbiAgICBcbiAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBcbiAgICAvLyBUT0RPLi4gdGhpcyBpcyBkZXB0aCBBTkQgc3RlbmNpbD9cbiAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsICB0aGlzLndpZHRoICAsIHRoaXMuaGVpZ2h0ICk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCByLCBnLCBiLCBhIClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICBnbC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpO1xuICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLmZyYW1lYnVmZmVyICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuXHRpZiAoIHRoaXMudGV4dHVyZSApXG4gICAge1xuICAgIFx0dGhpcy50ZXh0dXJlLnVwbG9hZERhdGEobnVsbCwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRpZiAoIHRoaXMuc3RlbmNpbCApXG4gICAge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0ZW5jaWwgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0dmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21EYXRhKGdsLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0dGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgZmJvLnVuYmluZCgpO1xuICAgIFxuICAgIHJldHVybiBmYm87XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZUZsb2F0MzIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0Ly8gY3JlYXRlIGEgbmV3IHRleHR1cmUuLlxuICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUuZnJvbURhdGEoZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuICAgIHRleHR1cmUuZW5hYmxlTmVhcmVzdFNjYWxpbmcoKTtcbiAgICB0ZXh0dXJlLmVuYWJsZVdyYXBDbGFtcCgpO1xuXG4gICAgLy9ub3cgY3JlYXRlIHRoZSBmcmFtZWJ1ZmZlciBvYmplY3QgYW5kIGF0dGFjaCB0aGUgdGV4dHVyZSB0byBpdC5cbiAgICB2YXIgZmJvID0gbmV3IEZyYW1lYnVmZmVyKGdsLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICBmYm8uZW5hYmxlVGV4dHVyZSh0ZXh0dXJlKVxuXG4gICAgZmJvLnVuYmluZCgpO1xuXG4gICAgcmV0dXJuIGZibztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGcmFtZWJ1ZmZlcjtcblxuIiwiXG52YXIgY29tcGlsZVByb2dyYW0gPSByZXF1aXJlKCcuL3NoYWRlci9jb21waWxlUHJvZ3JhbScpLFxuXHRleHRyYWN0QXR0cmlidXRlcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RBdHRyaWJ1dGVzJyksXG5cdGV4dHJhY3RVbmlmb3JtcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RVbmlmb3JtcycpLFxuXHRnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QgPSByZXF1aXJlKCcuL3NoYWRlci9nZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgU2hhZGVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cbnZhciBTaGFkZXIgPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIEZpcnN0IGNvbXBpbGUgdGhlIHByb2dyYW0uLlxuXHR0aGlzLnByb2dyYW0gPSBjb21waWxlUHJvZ3JhbShnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7XG5cblx0Ly8gbmV4dCBleHRyYWN0IHRoZSBhdHRyaWJ1dGVzXG5cdHRoaXMuYXR0cmlidXRlcyA9IGV4dHJhY3RBdHRyaWJ1dGVzKGdsLCB0aGlzLnByb2dyYW0pOyBcblxuICAgIHZhciB1bmlmb3JtRGF0YSA9IGV4dHJhY3RVbmlmb3JtcyhnbCwgdGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMudW5pZm9ybXMgPSBnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QoIGdsLCB1bmlmb3JtRGF0YSApO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4iLCJcbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gYSBXZWJHTCBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGZvcm1hdCB7bnVtYmVyfSB0aGUgcGl4ZWwgZm9ybWF0IG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5SR0JBXG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSB0aGUgZ2wgdHlwZSBvZiB0aGUgdGV4dHVyZS4gZGVmYXVsdHMgdG8gZ2wuVU5TSUdORURfQllURVxuICovXG52YXIgVGV4dHVyZSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLnRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cblx0Ly8gc29tZSBzZXR0aW5ncy4uXG5cdHRoaXMubWlwbWFwID0gZmFsc2U7XG5cblx0dGhpcy5wcmVtdWx0aXBseUFscGhhID0gZmFsc2U7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cblx0dGhpcy5mb3JtYXQgPSBmb3JtYXQgfHwgZ2wuUkdCQTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5VTlNJR05FRF9CWVRFO1xuXG5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge1BJWEkuZ2xDb3JlLlRleHR1cmV9IFt2YXJuYW1lXSBbZGVzY3JpcHRpb25dXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKHNvdXJjZSlcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gc291cmNlLndpZHRoO1xuXHR0aGlzLmhlaWdodCA9IHNvdXJjZS5oZWlnaHQ7XG5cblx0Z2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xuICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMuZm9ybWF0LCB0aGlzLnR5cGUsIHNvdXJjZSk7XG59XG5cbnZhciBGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSBmYWxzZTtcblxuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkRGF0YSA9IGZ1bmN0aW9uKGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuYmluZCgpO1xuXHRcblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IHRoaXMud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IHRoaXMuaGVpZ2h0O1xuXG5cdGlmKGRhdGEgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpXG5cdHtcblx0XHRpZighRkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFKVxuXHRcdHtcblx0XHRcdHZhciBleHQgPSBnbC5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9mbG9hdFwiKTtcblx0XHRcdFxuXHRcdFx0aWYoZXh0KVxuXHRcdFx0e1xuXHRcdFx0XHRGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2Zsb2F0aW5nIHBvaW50IHRleHR1cmVzIG5vdCBhdmFpbGFibGUnKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnR5cGUgPSBnbC5GTE9BVDtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHQvLyBUT0RPIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzXG5cdFx0dGhpcy50eXBlID0gZ2wuVU5TSUdORURfQllURTtcblx0fVxuXG5cdC8vIHdoYXQgdHlwZSBvZiBkYXRhP1xuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG5cdGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsICB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgZGF0YSB8fCBudWxsKTtcblxufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24obG9jYXRpb24pXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0aWYobG9jYXRpb24gIT09IHVuZGVmaW5lZClcblx0e1xuXHRcdGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbik7XG5cdH1cblxuXHRnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0aGlzLnRleHR1cmUpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIG51bGwpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5taW5GaWx0ZXIgPSBmdW5jdGlvbiggbGluZWFyIClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRpZih0aGlzLm1pcG1hcClcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVJfTUlQTUFQX0xJTkVBUiA6IGdsLk5FQVJFU1RfTUlQTUFQX05FQVJFU1QpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcblx0fVx0XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1hZ0ZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTWlwbWFwID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR0aGlzLm1pcG1hcCA9IHRydWU7XG5cdGdsLmdlbmVyYXRlTWlwbWFwKGdsLlRFWFRVUkVfMkQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVMaW5lYXJTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcih0cnVlKTtcblx0dGhpcy5tYWdGaWx0ZXIodHJ1ZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZU5lYXJlc3RTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcihmYWxzZSk7XG5cdHRoaXMubWFnRmlsdGVyKGZhbHNlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlV3JhcENsYW1wID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwUmVwZWF0ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXHRcblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuUkVQRUFUKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5SRVBFQVQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlVGV4dHVyZSh0aGlzLnRleHR1cmUpO1xufVxuXG4vL1RleHR1cmUuXG5UZXh0dXJlLmZyb21Tb3VyY2UgPSBmdW5jdGlvbihnbCwgc291cmNlLCBwcmVtdWx0aXBseUFscGhhKVxue1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS5wcmVtdWx0aXBseUFscGhhID0gcHJlbXVsdGlwbHlBbHBoYSB8fCBmYWxzZTtcblx0dGV4dHVyZS51cGxvYWQoc291cmNlKTtcblxuXHRyZXR1cm4gdGV4dHVyZTtcbn1cblxuVGV4dHVyZS5mcm9tRGF0YSA9IGZ1bmN0aW9uKGdsLCBkYXRhLCB3aWR0aCwgaGVpZ2h0KVxue1xuXHQvL2NvbnNvbGUubG9nKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS51cGxvYWREYXRhKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZTtcblxuIiwiXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbi8vIHN0YXRlIG9iamVjdC8vXG5cblxuZnVuY3Rpb24gVmVydGV4QXJyYXlPYmplY3QoZ2wpXG57XG5cdFxuXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IChcbiAgICAgIGdsLmdldEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKVxuICAgICk7XG5cbi8vXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IG51bGw7XG5cblx0aWYodGhpcy5uYXRpdmVWYW9FeHRlbnNpb24pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhbyA9IHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7ICBcblx0fVxuXG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcblxuXHR0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuXHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cblx0XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZlcnRleEFycmF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBWZXJ0ZXhBcnJheU9iamVjdDtcblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKHRoaXMubmF0aXZlVmFvKTsgIFxuXG5cdFx0aWYodGhpcy5kaXJ0eSlcblx0XHR7XG5cdFx0XHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cdFx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdFx0fVxuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLm5hdGl2ZVZhbylcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIFxuXHR7XG5cdFx0dmFyIGF0dHJpYiA9IHRoaXMuYXR0cmlidXRlc1tpXTtcblx0XHRhdHRyaWIuYnVmZmVyLmJpbmQoKTtcdFxuXG5cdFx0YXR0cmliLmF0dHJpYnV0ZS5wb2ludGVyKGF0dHJpYi50eXBlLCBhdHRyaWIubm9ybWFsaXplZCwgYXR0cmliLnN0cmlkZSwgYXR0cmliLnN0YXJ0KTsgXG5cdFx0XG5cdFx0Z2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYXR0cmliLmF0dHJpYnV0ZS5sb2NhdGlvbik7XG5cdH07XG5cblx0dGhpcy5pbmRleEJ1ZmZlci5iaW5kKCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRBdHRyaWJ1dGUgPSBmdW5jdGlvbihidWZmZXIsIGF0dHJpYnV0ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydClcbntcbiAgICB0aGlzLmF0dHJpYnV0ZXMucHVzaCh7XG4gICAgXHRidWZmZXI6IFx0YnVmZmVyLFxuICAgIFx0YXR0cmlidXRlOiBcdGF0dHJpYnV0ZSxcblxuICAgIFx0bG9jYXRpb246IFx0YXR0cmlidXRlLmxvY2F0aW9uLFxuXHQgXHR0eXBlOiBcdFx0dHlwZSB8fCB0aGlzLmdsLkZMT0FULFxuXHQgXHRub3JtYWxpemVkOiBub3JtYWxpemVkIHx8IGZhbHNlLFxuXHQgXHRzdHJpZGU6IFx0c3RyaWRlIHx8IDAsXG5cdCBcdHN0YXJ0OiBcdFx0c3RhcnQgfHwgMFxuXHR9KVxuXG5cdHRoaXMuZGlydHkgPSB0cnVlO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRJbmRleCA9IGZ1bmN0aW9uKGJ1ZmZlciwgb3B0aW9ucylcbntcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gYnVmZmVyO1xuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBzdGFydClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuZHJhd0VsZW1lbnRzKHR5cGUsIHNpemUsIGdsLlVOU0lHTkVEX1NIT1JULCBzdGFydCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgQ29udGV4dFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG5cbnZhciBDT05URVhUX1VJRCA9IDA7XG5cbnZhciBjcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24oY2FudmFzLCBvcHRpb25zKVxue1xuICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgb3B0aW9ucykgfHwgXG4gICAgXHQgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFnbClcbiAgICB7XG4gICAgICAgIC8vIGZhaWwsIG5vdCBhYmxlIHRvIGdldCBhIGNvbnRleHRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB3ZWJHTC4gVHJ5IHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXInKTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCB3YW50IHRvIHBoYXNlIHRoaXMgb3V0P1xuICAgIGdsLmlkID0gQ09OVEVYVF9VSUQrKztcblxuICAgIHJldHVybiBnbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb250ZXh0O1xuXG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgc2V0VmVydGV4QXR0cmliQXJyYXlzID0gZnVuY3Rpb24gKGdsLCBhdHRyaWJzKVxue1x0XG4gICAvLyBjb25zb2xlLmxvZyhnbC5pZClcbiAgICB2YXIgZGF0YSA9IEdMX01BUFtnbC5pZF07XG5cbiAgICBpZighZGF0YSlcbiAgICB7XG5cdCAgIHZhciBtYXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cdFx0ZGF0YSA9IEdMX01BUFtnbC5pZF0gPSB7dGVtcEF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKVxuXHRcdFx0XHQgXHQgXHRcdCAgICxhdHRyaWJTdGF0ZTpuZXcgQXJyYXkobWF4QXR0cmlicyl9O1xuXHR9XG5cdFxuICAgIHZhciBpLFxuICAgIFx0dGVtcEF0dHJpYlN0YXRlID0gZGF0YS50ZW1wQXR0cmliU3RhdGUsXG4gICAgXHRhdHRyaWJTdGF0ZSA9IGRhdGEuYXR0cmliU3RhdGU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAoaSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbaV0ubG9jYXRpb25dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAoYXR0cmliU3RhdGVbaV0gIT09IHRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmliU3RhdGVbaV0gPSB0ZW1wQXR0cmliU3RhdGVbaV07XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmF0dHJpYlN0YXRlW2ldKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VmVydGV4QXR0cmliQXJyYXlzOyIsIlxuXG5cblxuY29tcGlsZVByb2dyYW0gPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcbiAgICB2YXIgZ2xWZXJ0U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuVkVSVEVYX1NIQURFUiwgdmVydGV4U3JjKTtcbiAgICB2YXIgZ2xGcmFnU2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNyYyk7XG5cbiAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbEZyYWdTaGFkZXIpO1xuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgLy8gaWYgbGlua2luZyBmYWlscywgdGhlbiBsb2cgYW5kIGNsZWFudXBcbiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUGl4aS5qcyBFcnJvcjogQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVyLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5WQUxJREFURV9TVEFUVVMnLCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLlZBTElEQVRFX1NUQVRVUykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5nZXRFcnJvcigpJywgZ2wuZ2V0RXJyb3IoKSk7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBwcm9ncmFtIGluZm8gbG9nLCBsb2cgaXRcbiAgICAgICAgaWYgKGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pICE9PSAnJylcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaXhpLmpzIFdhcm5pbmc6IGdsLmdldFByb2dyYW1JbmZvTG9nKCknLCBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICBwcm9ncmFtID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBzb21lIHNoYWRlcnNcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xGcmFnU2hhZGVyKTtcblxuICAgIHJldHVybiBwcm9ncmFtO1xufVxuXG52YXIgY29tcGlsZVNoYWRlciA9IGZ1bmN0aW9uIChnbCwgdHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzcmMpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZVByb2dyYW07XG5cbiIsIlxuXG52YXIgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkgXG57XG4gICAgc3dpdGNoICh0eXBlKVxuICAgIHtcbiAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAndmVjMic6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzQnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSg0ICogc2l6ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgY2FzZSAnc2FtcGxlcjJEJzpcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWMyJzogICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnaXZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDMgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjNCc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDQgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdib29sJzogICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMyJzpcblxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSggMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMzJzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWM0JzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ21hdDInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Myc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMV0pO1xuXG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDAsIDAsIDFdKTtcbiAgICB9XG59XG5cbnZhciBib29sZWFuQXJyYXkgPSBmdW5jdGlvbihzaXplKVxue1xuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgYXJyYXlbaV0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRWYWx1ZTtcbiIsIlxudmFyIG1hcFR5cGUgPSByZXF1aXJlKCcuL21hcFR5cGUnKTtcbnZhciBtYXBTaXplID0gcmVxdWlyZSgnLi9tYXBTaXplJyk7XG5cbnZhciBleHRyYWN0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICB2YXIgdG90YWxBdHRyaWJ1dGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxBdHRyaWJ1dGVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGF0dHJpYkRhdGEgPSBnbC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaSk7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgYXR0cmliRGF0YS50eXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYkRhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOnR5cGUsXG4gICAgICAgICAgICBzaXplOm1hcFNpemUodHlwZSksXG4gICAgICAgICAgICBsb2NhdGlvbjpnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBhdHRyaWJEYXRhLm5hbWUpLFxuICAgICAgICAgICAgLy9UT0RPIC0gbWFrZSBhbiBhdHRyaWJ1dGUgb2JqZWN0XG4gICAgICAgICAgICBwb2ludGVyOmZ1bmN0aW9uKHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpe1xuXG4gICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5sb2NhdGlvbix0aGlzLnNpemUsIHR5cGUgfHwgZ2wuRkxPQVQsIG5vcm1hbGl6ZWQgfHwgZmFsc2UsIHN0cmlkZSB8fCAwLCBzdGFydCB8fCAwKTsgXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYXR0cmlidXRlczsgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RBdHRyaWJ1dGVzO1xuXG4iLCJ2YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIGRlZmF1bHRWYWx1ZSA9IHJlcXVpcmUoJy4vZGVmYXVsdFZhbHVlJyk7XG5cblxudmFyIGV4dHJhY3RVbmlmb3JtcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuXHR2YXIgdW5pZm9ybXMgPSB7fTtcblx0XG4gICAgdmFyIHRvdGFsVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxVbmlmb3JtczsgaSsrKSBcbiAgICB7XG4gICAgXHR2YXIgdW5pZm9ybURhdGEgPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpO1xuICAgIFx0dmFyIG5hbWUgPSB1bmlmb3JtRGF0YS5uYW1lLnJlcGxhY2UoL1xcWy4qP1xcXS8sIFwiXCIpO1xuICAgICAgICB2YXIgdHlwZSA9IG1hcFR5cGUoZ2wsIHVuaWZvcm1EYXRhLnR5cGUgKTtcblxuICAgIFx0dW5pZm9ybXNbbmFtZV0gPSB7XG4gICAgXHRcdHR5cGU6dHlwZSxcbiAgICBcdFx0c2l6ZTp1bmlmb3JtRGF0YS5zaXplLFxuICAgIFx0XHRsb2NhdGlvbjpnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksXG4gICAgXHRcdHZhbHVlOmRlZmF1bHRWYWx1ZSh0eXBlLCB1bmlmb3JtRGF0YS5zaXplKVxuICAgIFx0fVxuICAgIH07XG5cdFxuXHRyZXR1cm4gdW5pZm9ybXM7XHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHRyYWN0VW5pZm9ybXM7XG5cbiIsIlxudmFyIGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IGZ1bmN0aW9uKGdsLCB1bmlmb3JtRGF0YSlcbntcbiAgICAvLyB0aGlzIGlzIHRoZSBvYmplY3Qgd2Ugd2lsbCBiZSBzZW5kaW5nIGJhY2suXG4gICAgLy8gYW4gb2JqZWN0IGhpZXJhY2h5IHdpbGwgYmUgY3JlYXRlZCBmb3Igc3RydWN0c1xuICAgIHZhciB1bmlmb3JtcyA9IHtkYXRhOnt9fTtcblxuICAgIHVuaWZvcm1zLmdsID0gZ2w7XG4gICAgXG4gICAgdmFyIHVuaWZvcm1LZXlzPSBPYmplY3Qua2V5cyh1bmlmb3JtRGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1LZXlzLmxlbmd0aDsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBmdWxsTmFtZSA9IHVuaWZvcm1LZXlzW2ldXG5cbiAgICAgICAgdmFyIG5hbWVUb2tlbnMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAxXTtcblxuICAgICAgICB2YXIgdW5pZm9ybUdyb3VwID0gZ2V0VW5pZm9ybUdyb3VwKG5hbWVUb2tlbnMsIHVuaWZvcm1zKTtcblxuICAgICAgICB2YXIgdW5pZm9ybSA9ICB1bmlmb3JtRGF0YVtmdWxsTmFtZV07XG4gICAgICAgIHVuaWZvcm1Hcm91cC5kYXRhW25hbWVdID0gdW5pZm9ybTtcblxuICAgICAgICB1bmlmb3JtR3JvdXAuZ2wgPSBnbDtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5pZm9ybUdyb3VwLCBuYW1lLCB7XG4gICAgICAgICAgICBnZXQ6IGdlbmVyYXRlR2V0dGVyKG5hbWUpLFxuICAgICAgICAgICAgc2V0OiBnZW5lcmF0ZVNldHRlcihuYW1lLCB1bmlmb3JtKVxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdW5pZm9ybXM7XG59XG5cbnZhciBnZW5lcmF0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpXG57XG5cdHZhciB0ZW1wbGF0ZSA9IGdldHRlclRlbXBsYXRlLnJlcGxhY2UoJyUlJywgbmFtZSk7XG5cdHJldHVybiBuZXcgRnVuY3Rpb24odGVtcGxhdGUpO1xufVxuXG52YXIgZ2VuZXJhdGVTZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCB1bmlmb3JtKVxue1xuICAgIHZhciB0ZW1wbGF0ZSA9IHNldHRlclRlbXBsYXRlLnJlcGxhY2UoLyUlL2csIG5hbWUpO1xuICAgIHZhciBzZXRUZW1wbGF0ZVxuICAgIFxuICAgIGlmKHVuaWZvcm0uc2l6ZSA9PT0gMSlcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19TSU5HTEVfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzZXRUZW1wbGF0ZSA9IEdMU0xfVE9fQVJSQVlfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cblxuICAgIGlmKHNldFRlbXBsYXRlKVxuICAgIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gXCJcXG50aGlzLmdsLlwiICsgc2V0VGVtcGxhdGUgKyBcIjtcIjtcbiAgICB9XG5cbiAgXHRyZXR1cm4gbmV3IEZ1bmN0aW9uKCd2YWx1ZScsIHRlbXBsYXRlKTtcbn1cblxudmFyIGdldFVuaWZvcm1Hcm91cCA9IGZ1bmN0aW9uKG5hbWVUb2tlbnMsIHVuaWZvcm0pXG57XG4gICAgdmFyIGN1ciA9IHVuaWZvcm07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVUb2tlbnMubGVuZ3RoIC0gMTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBvID0gY3VyW25hbWVUb2tlbnNbaV1dIHx8IHtkYXRhOnt9fTtcbiAgICAgICAgY3VyW25hbWVUb2tlbnNbaV1dID0gbztcbiAgICAgICAgY3VyID0gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGN1clxufVxuXG52YXIgZ2V0dGVyVGVtcGxhdGUgPSBbXG4gICAgJ3JldHVybiB0aGlzLmRhdGEuJSUudmFsdWU7Jyxcbl0uam9pbignXFxuJyk7XG5cbnZhciBzZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAndGhpcy5kYXRhLiUlLnZhbHVlID0gdmFsdWU7JyxcbiAgICAndmFyIGxvY2F0aW9uID0gdGhpcy5kYXRhLiUlLmxvY2F0aW9uOydcbl0uam9pbignXFxuJyk7XG5cblxudmFyIEdMU0xfVE9fU0lOR0xFX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ3ZlYzInOiAgICAgJ3VuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ3ZlYzMnOiAgICAgJ3VuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG4gICAgXHRcbiAgICAnaW50JzogICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnaXZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcblxuICAgICdtYXQyJzogICAgICd1bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0Myc6ICAgICAndW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG4gICAgJ21hdDQnOiAgICAgJ3VuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuXG4gICAgJ3NhbXBsZXIyRCc6J3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG52YXIgR0xTTF9UT19BUlJBWV9TRVRURVJTID0ge1xuXG4gICAgJ2Zsb2F0JzogICAgJ3VuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjNCc6ICAgICAndW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG4gICBcbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdDtcblxuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24odHlwZSkgXG57IFxuICAgIHJldHVybiBHTFNMX1RPX1NJWkVbdHlwZV07XG59XG5cblxudmFyIEdMU0xfVE9fU0laRSA9IHtcbiAgICAnZmxvYXQnOiAgICAxLFxuICAgICd2ZWMyJzogICAgIDIsXG4gICAgJ3ZlYzMnOiAgICAgMyxcbiAgICAndmVjNCc6ICAgICA0LFxuXG4gICAgJ2ludCc6ICAgICAgMSxcbiAgICAnaXZlYzInOiAgICAyLFxuICAgICdpdmVjMyc6ICAgIDMsXG4gICAgJ2l2ZWM0JzogICAgNCxcblxuICAgICdib29sJzogICAgIDEsXG4gICAgJ2J2ZWMyJzogICAgMixcbiAgICAnYnZlYzMnOiAgICAzLFxuICAgICdidmVjNCc6ICAgIDQsXG5cbiAgICAnbWF0Mic6ICAgICA0LFxuICAgICdtYXQzJzogICAgIDksXG4gICAgJ21hdDQnOiAgICAgMTYsXG5cbiAgICAnc2FtcGxlcjJEJzogIDFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24oZ2wsIHR5cGUpIFxue1xuICAgIGlmKCFHTF9UQUJMRSkgXG4gICAge1xuICAgICAgICB2YXIgdHlwZU5hbWVzID0gT2JqZWN0LmtleXMoR0xfVE9fR0xTTF9UWVBFUyk7XG5cbiAgICAgICAgR0xfVEFCTEUgPSB7fTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdHlwZU5hbWVzLmxlbmd0aDsgKytpKSBcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHRuID0gdHlwZU5hbWVzW2ldO1xuICAgICAgICAgICAgR0xfVEFCTEVbIGdsW3RuXSBdID0gR0xfVE9fR0xTTF9UWVBFU1t0bl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIEdMX1RBQkxFW3R5cGVdO1xufVxuXG52YXIgR0xfVEFCTEUgPSBudWxsO1xuXG52YXIgR0xfVE9fR0xTTF9UWVBFUyA9IHtcbiAgJ0ZMT0FUJzogICAgICAgJ2Zsb2F0JyxcbiAgJ0ZMT0FUX1ZFQzInOiAgJ3ZlYzInLFxuICAnRkxPQVRfVkVDMyc6ICAndmVjMycsXG4gICdGTE9BVF9WRUM0JzogICd2ZWM0JyxcblxuICAnSU5UJzogICAgICAgICAnaW50JyxcbiAgJ0lOVF9WRUMyJzogICAgJ2l2ZWMyJyxcbiAgJ0lOVF9WRUMzJzogICAgJ2l2ZWMzJyxcbiAgJ0lOVF9WRUM0JzogICAgJ2l2ZWM0JyxcbiAgXG4gICdCT09MJzogICAgICAgICdib29sJyxcbiAgJ0JPT0xfVkVDMic6ICAgJ2J2ZWMyJyxcbiAgJ0JPT0xfVkVDMyc6ICAgJ2J2ZWMzJyxcbiAgJ0JPT0xfVkVDNCc6ICAgJ2J2ZWM0JyxcbiAgXG4gICdGTE9BVF9NQVQyJzogICdtYXQyJyxcbiAgJ0ZMT0FUX01BVDMnOiAgJ21hdDMnLFxuICAnRkxPQVRfTUFUNCc6ICAnbWF0NCcsXG4gIFxuICAnU0FNUExFUl8yRCc6ICAnc2FtcGxlcjJEJyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwU2l6ZTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvQm9vbCh2KSB7XG4gICAgICAgIHJldHVybiAhIXY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vdElkKHYpIHtcbiAgICAgICAgcmV0dXJuICF2O1xuICAgIH1cblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcHJldmlvdXNfYXN5bmM7XG5cbiAgICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gICAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZiB8fFxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgdGhpcztcblxuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgICAgcHJldmlvdXNfYXN5bmMgPSByb290LmFzeW5jO1xuICAgIH1cblxuICAgIGFzeW5jLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBwcmV2aW91c19hc3luYztcbiAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbmx5X29uY2UoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIC8vIFBvcnRlZCBmcm9tIHVuZGVyc2NvcmUuanMgaXNPYmplY3RcbiAgICB2YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9pc0FycmF5TGlrZShhcnIpIHtcbiAgICAgICAgcmV0dXJuIF9pc0FycmF5KGFycikgfHwgKFxuICAgICAgICAgICAgLy8gaGFzIGEgcG9zaXRpdmUgaW50ZWdlciBsZW5ndGggcHJvcGVydHlcbiAgICAgICAgICAgIHR5cGVvZiBhcnIubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICBhcnIubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggJSAxID09PSAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2FycmF5RWFjaChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfbWFwKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdG9yKGFycltpbmRleF0sIGluZGV4LCBhcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JhbmdlKGNvdW50KSB7XG4gICAgICAgIHJldHVybiBfbWFwKEFycmF5KGNvdW50KSwgZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGk7IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9yZWR1Y2UoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBfYXJyYXlFYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9mb3JFYWNoT2Yob2JqZWN0LCBpdGVyYXRvcikge1xuICAgICAgICBfYXJyYXlFYWNoKF9rZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnIsIGl0ZW0pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfa2V5SXRlcmF0b3IoY29sbCkge1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB2YXIgbGVuO1xuICAgICAgICB2YXIga2V5cztcbiAgICAgICAgaWYgKF9pc0FycmF5TGlrZShjb2xsKSkge1xuICAgICAgICAgICAgbGVuID0gY29sbC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBsZW4gPyBpIDogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXlzID0gX2tleXMoY29sbCk7XG4gICAgICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGtleXNbaV0gOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpbWlsYXIgdG8gRVM2J3MgcmVzdCBwYXJhbSAoaHR0cDovL2FyaXlhLm9maWxhYnMuY29tLzIwMTMvMDMvZXM2LWFuZC1yZXN0LXBhcmFtZXRlci5odG1sKVxuICAgIC8vIFRoaXMgYWNjdW11bGF0ZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byBhbiBhcnJheSwgYWZ0ZXIgYSBnaXZlbiBpbmRleC5cbiAgICAvLyBGcm9tIHVuZGVyc2NvcmUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzIxNDApLlxuICAgIGZ1bmN0aW9uIF9yZXN0UGFyYW0oZnVuYywgc3RhcnRJbmRleCkge1xuICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCk7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSB1bnVzZWQgYnV0IGhhbmRsZSBjYXNlcyBvdXRzaWRlIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50OlxuICAgICAgICAgICAgLy8gdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICAgICAgICAvLyBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAvLyAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICAgICAgICAvLyByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBleHBvcnRlZCBhc3luYyBtb2R1bGUgZnVuY3Rpb25zIC8vLy9cblxuICAgIC8vLy8gbmV4dFRpY2sgaW1wbGVtZW50YXRpb24gd2l0aCBicm93c2VyLWNvbXBhdGlibGUgZmFsbGJhY2sgLy8vL1xuXG4gICAgLy8gY2FwdHVyZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZSB0byBndWFyZCBhZ2FpbnN0IGZha2VUaW1lciBtb2Nrc1xuICAgIHZhciBfc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzZXRJbW1lZGlhdGU7XG5cbiAgICB2YXIgX2RlbGF5ID0gX3NldEltbWVkaWF0ZSA/IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgIF9zZXRJbW1lZGlhdGUoZm4pO1xuICAgIH0gOiBmdW5jdGlvbihmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBfZGVsYXk7XG4gICAgfVxuICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IF9zZXRJbW1lZGlhdGUgPyBfZGVsYXkgOiBhc3luYy5uZXh0VGljaztcblxuXG4gICAgYXN5bmMuZm9yRWFjaCA9XG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9XG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mU2VyaWVzKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG5cbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPVxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9lYWNoT2ZMaW1pdChsaW1pdCkoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoT2YgPVxuICAgIGFzeW5jLmVhY2hPZiA9IGZ1bmN0aW9uIChvYmplY3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBvYmplY3QgPSBvYmplY3QgfHwgW107XG5cbiAgICAgICAgdmFyIGl0ZXIgPSBfa2V5SXRlcmF0b3Iob2JqZWN0KTtcbiAgICAgICAgdmFyIGtleSwgY29tcGxldGVkID0gMDtcblxuICAgICAgICB3aGlsZSAoKGtleSA9IGl0ZXIoKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpdGVyYXRvcihvYmplY3Rba2V5XSwga2V5LCBvbmx5X29uY2UoZG9uZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gMCkgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZC0tO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBrZXkgaXMgbnVsbCBpbiBjYXNlIGl0ZXJhdG9yIGlzbid0IGV4aGF1c3RlZFxuICAgICAgICAgICAgLy8gYW5kIGRvbmUgcmVzb2x2ZWQgc3luY2hyb25vdXNseS5cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gbnVsbCAmJiBjb21wbGV0ZWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZlNlcmllcyA9XG4gICAgYXN5bmMuZWFjaE9mU2VyaWVzID0gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iaiA9IG9iaiB8fCBbXTtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgdmFyIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRvcihvYmpba2V5XSwga2V5LCBvbmx5X29uY2UoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoaXRlcmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5mb3JFYWNoT2ZMaW1pdCA9XG4gICAgYXN5bmMuZWFjaE9mTGltaXQgPSBmdW5jdGlvbiAob2JqLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9lYWNoT2ZMaW1pdChsaW1pdCkob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZWFjaE9mTGltaXQobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBydW5uaW5nID0gMDtcbiAgICAgICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChkb25lICYmIHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWwoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZiwgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb1BhcmFsbGVsTGltaXQoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihfZWFjaE9mTGltaXQobGltaXQpLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvU2VyaWVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihhc3luYy5lYWNoT2ZTZXJpZXMsIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gX2lzQXJyYXlMaWtlKGFycikgPyBbXSA6IHt9O1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfYXN5bmNNYXApO1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLmluamVjdCA9XG4gICAgYXN5bmMuZm9sZGwgPVxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgaSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5mb2xkciA9XG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGlkZW50aXR5KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudHJhbnNmb3JtID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGl0ZXJhdG9yO1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBtZW1vO1xuICAgICAgICAgICAgbWVtbyA9IF9pc0FycmF5KGFycikgPyBbXSA6IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuZWFjaE9mKGFyciwgZnVuY3Rpb24odiwgaywgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHYsIGssIGNiKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleDogaW5kZXgsIHZhbHVlOiB4fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soX21hcChyZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICB9KSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMuc2VsZWN0ID1cbiAgICBhc3luYy5maWx0ZXIgPSBkb1BhcmFsbGVsKF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0TGltaXQgPVxuICAgIGFzeW5jLmZpbHRlckxpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID1cbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcblxuICAgIGZ1bmN0aW9uIF9yZWplY3QoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBfZmlsdGVyKGVhY2hmbiwgYXJyLCBmdW5jdGlvbih2YWx1ZSwgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgY2IoIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoZWFjaGZuLCBjaGVjaywgZ2V0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2IpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSBjYihnZXRSZXN1bHQoZmFsc2UsIHZvaWQgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWUoeCwgXywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNiKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2IgJiYgY2hlY2sodikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGdldFJlc3VsdCh0cnVlLCB4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGl0ZXJhdG9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGxpbWl0LCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBsaW1pdDtcbiAgICAgICAgICAgICAgICBlYWNoZm4oYXJyLCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMuYW55ID1cbiAgICBhc3luYy5zb21lID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIHRvQm9vbCwgaWRlbnRpdHkpO1xuXG4gICAgYXN5bmMuc29tZUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5hbGwgPVxuICAgIGFzeW5jLmV2ZXJ5ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIG5vdElkLCBub3RJZCk7XG5cbiAgICBhc3luYy5ldmVyeUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgbm90SWQsIG5vdElkKTtcblxuICAgIGZ1bmN0aW9uIF9maW5kR2V0UmVzdWx0KHYsIHgpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIGFzeW5jLmRldGVjdCA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mU2VyaWVzLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdExpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgaWRlbnRpdHksIF9maW5kR2V0UmVzdWx0KTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoY29tcGFyYXRvciksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgb3B0aW9uYWwsIHNoaWZ0IHRoZSBhcmdzLlxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHJlbWFpbmluZ1Rhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoZm4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gX2luZGV4T2YobGlzdGVuZXJzLCBmbik7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgX2FycmF5RWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2FycmF5RWFjaChrZXlzLCBmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSBfaXNBcnJheSh0YXNrc1trXSkgPyB0YXNrc1trXTogW3Rhc2tzW2tdXTtcbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBfZm9yRWFjaE9mKHJlc3VsdHMsIGZ1bmN0aW9uKHZhbCwgcmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCB0YXNrLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWFkLWxvY2tzXG4gICAgICAgICAgICB2YXIgbGVuID0gcmVxdWlyZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGRlcDtcbiAgICAgICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgICAgICAgIGlmICghKGRlcCA9IHRhc2tzW3JlcXVpcmVzW2xlbl1dKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhcyBpbmV4aXN0YW50IGRlcGVuZGVuY3knKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc0FycmF5KGRlcCkgJiYgX2luZGV4T2YoZGVwLCBrKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGN5Y2xpYyBkZXBlbmRlbmNpZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kgJiYgX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcblxuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHRpbWVzOiBERUZBVUxUX1RJTUVTLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IERFRkFVTFRfSU5URVJWQUxcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgdCA9PT0gJ251bWJlcicpe1xuICAgICAgICAgICAgICAgIGFjYy50aW1lcyA9IHBhcnNlSW50KHQsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiB0ID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodC50aW1lcywgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICAgICAgYWNjLmludGVydmFsID0gcGFyc2VJbnQodC5pbnRlcnZhbCwgMTApIHx8IERFRkFVTFRfSU5URVJWQUw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYXJndW1lbnQgdHlwZSBmb3IgXFwndGltZXNcXCc6ICcgKyB0eXBlb2YgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDEgfHwgbGVuZ3RoID4gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyAtIG11c3QgYmUgZWl0aGVyICh0YXNrKSwgKHRhc2ssIGNhbGxiYWNrKSwgKHRpbWVzLCB0YXNrKSBvciAodGltZXMsIHRhc2ssIGNhbGxiYWNrKScpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA8PSAyICYmIHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGltZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0cywgdGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgb3B0cy50YXNrID0gdGFzaztcblxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVkVGFzayh3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQodGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5SW50ZXJ2YWwoaW50ZXJ2YWwpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKG9wdHMudGltZXMpIHtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5hbEF0dGVtcHQgPSAhKG9wdHMudGltZXMtPTEpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KG9wdHMudGFzaywgZmluYWxBdHRlbXB0KSk7XG4gICAgICAgICAgICAgICAgaWYoIWZpbmFsQXR0ZW1wdCAmJiBvcHRzLmludGVydmFsID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlJbnRlcnZhbChvcHRzLmludGVydmFsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBvcHRzLmNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNhbGxiYWNrIGlzIHBhc3NlZCwgcnVuIHRoaXMgYXMgYSBjb250cm9sbCBmbG93XG4gICAgICAgIHJldHVybiBvcHRzLmNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrO1xuICAgIH07XG5cbiAgICBhc3luYy53YXRlcmZhbGwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGlmICghX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3cmFwSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCh3cmFwSXRlcmF0b3IobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbnN1cmVBc3luYyhpdGVyYXRvcikuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3BhcmFsbGVsKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgbm9vcDtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsIGZ1bmN0aW9uICh0YXNrLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0YXNrKF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLnBhcmFsbGVsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoYXN5bmMuZWFjaE9mLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24odGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoX2VhY2hPZkxpbWl0KGxpbWl0KSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2ZTZXJpZXMsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VDYWxsYmFjayhpbmRleCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYWtlQ2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIGFzeW5jLmFwcGx5ID0gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGNhbGxBcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoY2FsbEFyZ3MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb25jYXQoZWFjaGZuLCBhcnIsIGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIGZuKHgsIGZ1bmN0aW9uIChlcnIsIHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICB2YXIgbmV4dCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdC5hcHBseSh0aGlzLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihuZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gKytjYWxscyA8PSAxIHx8IHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9VbnRpbCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmR1cmluZyA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hlY2spO1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cnV0aCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0KGNoZWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9EdXJpbmcgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIGFzeW5jLmR1cmluZyhmdW5jdGlvbihuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY2FsbHMrKyA8IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBtdXN0IG5vdCBiZSB6ZXJvJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sgfHwgbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBxLnRhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfbmV4dChxLCB0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgd29ya2VycyAtPSAxO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHdvcmtlcnNMaXN0LCBmdW5jdGlvbiAod29ya2VyLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtlciA9PT0gdGFzayAmJiAhcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgdGFza3M6IFtdLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IGNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbm9vcCxcbiAgICAgICAgICAgIGVtcHR5OiBub29wLFxuICAgICAgICAgICAgZHJhaW46IG5vb3AsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHEuZHJhaW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHRydWUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFxLnBhdXNlZCAmJiB3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSh3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBxLnBheWxvYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEucGF5bG9hZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEudGFza3MubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfbWFwKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaCh0YXNrc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UoX25leHQocSwgdGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdW1lQ291bnQgPSBNYXRoLm1pbihxLmNvbmN1cnJlbmN5LCBxLnRhc2tzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSByZXN1bWVDb3VudDsgdysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgcSA9IF9xdWV1ZShmdW5jdGlvbiAoaXRlbXMsIGNiKSB7XG4gICAgICAgICAgICB3b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICAgIGVuZCA9IHNlcXVlbmNlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGJlZyArICgoZW5kIC0gYmVnICsgMSkgPj4+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3BcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoX2JpbmFyeVNlYXJjaChxLnRhc2tzLCBpdGVtLCBfY29tcGFyZVRhc2tzKSArIDEsIDAsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBxLnVuc2hpZnQ7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLmNhcmdvID0gZnVuY3Rpb24gKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gX3F1ZXVlKHdvcmtlciwgMSwgcGF5bG9hZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9jb25zb2xlX2ZuKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGlkZW50aXR5O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIG1lbW9pemVkKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGtleSBpbiBtZW1vKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF90aW1lcyhtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBtYXBwZXIoX3JhbmdlKGNvdW50KSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy50aW1lcyA9IF90aW1lcyhhc3luYy5tYXApO1xuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gX3RpbWVzKGFzeW5jLm1hcFNlcmllcyk7XG4gICAgYXN5bmMudGltZXNMaW1pdCA9IGZ1bmN0aW9uIChjb3VudCwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMubWFwTGltaXQoX3JhbmdlKGNvdW50KSwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBub29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW19yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgbmV4dGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfSldKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoYXQsIFtlcnJdLmNvbmNhdChyZXN1bHRzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5zZXEuYXBwbHkobnVsbCwgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBfYXBwbHlFYWNoKGVhY2hmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbihmbnMsIGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBnbyA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlYWNoZm4oZm5zLCBmdW5jdGlvbiAoZm4sIF8sIGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5hcHBseUVhY2ggPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZik7XG4gICAgYXN5bmMuYXBwbHlFYWNoU2VyaWVzID0gX2FwcGx5RWFjaChhc3luYy5lYWNoT2ZTZXJpZXMpO1xuXG5cbiAgICBhc3luYy5mb3JldmVyID0gZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZG9uZSA9IG9ubHlfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgdmFyIHRhc2sgPSBlbnN1cmVBc3luYyhmbik7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVBc3luYyhmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuXG4gICAgYXN5bmMuY29uc3RhbnQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICB2YXIgYXJncyA9IFtudWxsXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXN5bmMud3JhcFN5bmMgPVxuICAgIGFzeW5jLmFzeW5jaWZ5ID0gZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAoX2lzT2JqZWN0KHJlc3VsdCkgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLm1lc3NhZ2UgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBOb2RlLmpzXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG4gICAgfVxuICAgIC8vIEFNRCAvIFJlcXVpcmVKU1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG5cdCAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXG5cdCAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cblx0ICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSlcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cblx0ICogQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuXHQgKiBVbmljb2RlIHN0cmluZy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gJ3huLS0nICsgZW5jb2RlKHN0cmluZylcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG5cdHB1bnljb2RlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHQndmVyc2lvbic6ICcxLjMuMicsXG5cdFx0LyoqXG5cdFx0ICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHRcdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMpIHtcblx0XHRcdC8vIGluIE5vZGUuanMsIGlvLmpzLCBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IHB1bnljb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5wdW55Y29kZSA9IHB1bnljb2RlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUpIHJldHVybiB0cmlhbmdsZXM7XG5cbiAgICB2YXIgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgc2l6ZTtcblxuICAgIGlmIChoYXNIb2xlcykgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKTtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG4gICAgICAgIG1pblggPSBtYXhYID0gZGF0YVswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xuICAgICAgICAgICAgeSA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIHNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIHNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgICAgICBpLCBqLCBsYXN0O1xuXG4gICAgLy8gY2FsY3VsYXRlIG9yaWdpbmFsIHdpbmRpbmcgb3JkZXIgb2YgYSBwb2x5Z29uIHJpbmdcbiAgICBmb3IgKGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cblxuICAgIC8vIGxpbmsgcG9pbnRzIGludG8gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuICAgIGlmIChjbG9ja3dpc2UgPT09IChzdW0gPiAwKSkge1xuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgc2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChzaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0aWNlIGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZWFyLCB0cmlhbmdsZXMsIGRpbSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDIpO1xuXG4gICAgICAgICAgICAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgd2hpbGUgKHAgIT09IGVhci5wcmV2KSB7XG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG4gICAgdmFyIG1pblRYID0gYS54IDwgYi54ID8gKGEueCA8IGMueCA/IGEueCA6IGMueCkgOiAoYi54IDwgYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoYS55IDwgYy55ID8gYS55IDogYy55KSA6IChiLnkgPCBjLnkgPyBiLnkgOiBjLnkpLFxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1heFRZID0gYS55ID4gYi55ID8gKGEueSA+IGMueSA/IGEueSA6IGMueSkgOiAoYi55ID4gYy55ID8gYi55IDogYy55KTtcblxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgdmFyIG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBzaXplKSxcbiAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgdmFyIHAgPSBlYXIubmV4dFo7XG5cbiAgICB3aGlsZSAocCAmJiBwLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgcCA9IGVhci5wcmV2WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIC8vIGEgc2VsZi1pbnRlcnNlY3Rpb24gd2hlcmUgZWRnZSAodltpLTFdLHZbaV0pIGludGVyc2VjdHMgKHZbaSsxXSx2W2krMl0pXG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcblxuICAgICAgICAgICAgcCA9IHN0YXJ0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBwO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBzdG9wID0gbSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtLm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBtLnggJiZcbiAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoaHkgPCBtLnkgPyBoeCA6IHF4LCBoeSwgbS54LCBtLnksIGh5IDwgbS55ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxU2l6ZSA9PT0gMCB8fCAhcSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwLnogPD0gcS56KSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBzaXplIG9mIHRoZSBkYXRhIGJvdW5kaW5nIGJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlXG4gICAgeCA9IDMyNzY3ICogKHggLSBtaW5YKSAvIHNpemU7XG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAvIHNpemU7XG5cbiAgICB4ID0gKHggfCAoeCA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB4ID0gKHggfCAoeCA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnggPCBsZWZ0bW9zdC54KSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGVxdWFscyhhLCBiKSB8fCBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmXG4gICAgICAgICAgIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYik7XG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgcmV0dXJuIGFyZWEocDEsIHExLCBwMikgPiAwICE9PSBhcmVhKHAxLCBxMSwgcTIpID4gMCAmJlxuICAgICAgICAgICBhcmVhKHAyLCBxMiwgcDEpID4gMCAhPT0gYXJlYShwMiwgcTIsIHExKSA+IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGljZSBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0aWNlIG5vZGVzIGluIGEgcG9seWdvbiByaW5nXG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZVxuICAgIHRoaXMueiA9IG51bGw7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG5cbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuICAgIHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1xuLy8gV2Ugc3RvcmUgb3VyIEVFIG9iamVjdHMgaW4gYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gYH5gIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IG92ZXJyaWRkZW4gb3Jcbi8vIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vIFdlIGFsc28gYXNzdW1lIHRoYXQgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBldmVudCBuYW1lXG4vLyBpcyBhbiBFUzYgU3ltYm9sLlxuLy9cbnZhciBwcmVmaXggPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJyA/ICd+JyA6IGZhbHNlO1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIEV2ZW50RW1pdHRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgQ29udGV4dCBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgZW1pdCBvbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIE1pbmltYWwgRXZlbnRFbWl0dGVyIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkgeyAvKiBOb3RoaW5nIHRvIHNldCAqLyB9XG5cbi8qKlxuICogSG9sZHMgdGhlIGFzc2lnbmVkIEV2ZW50RW1pdHRlcnMgYnkgbmFtZS5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiBhIGxpc3Qgb2YgYXNzaWduZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZXhpc3RzIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7QXJyYXl8Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50LCBleGlzdHMpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGF2YWlsYWJsZSA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoZXhpc3RzKSByZXR1cm4gISFhdmFpbGFibGU7XG4gIGlmICghYXZhaWxhYmxlKSByZXR1cm4gW107XG4gIGlmIChhdmFpbGFibGUuZm4pIHJldHVybiBbYXZhaWxhYmxlLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGF2YWlsYWJsZS5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBhdmFpbGFibGVbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIEVtaXQgYW4gZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSW5kaWNhdGlvbiBpZiB3ZSd2ZSBlbWl0dGVkIGFuIGV2ZW50LlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyBFdmVudExpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdG9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgdGhpcylcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgdGhpcy5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lcjtcbiAgZWxzZSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XS5mbikgdGhpcy5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gICAgZWxzZSB0aGlzLl9ldmVudHNbZXZ0XSA9IFtcbiAgICAgIHRoaXMuX2V2ZW50c1tldnRdLCBsaXN0ZW5lclxuICAgIF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGFuIEV2ZW50TGlzdGVuZXIgdGhhdCdzIG9ubHkgY2FsbGVkIG9uY2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzLCB0cnVlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2Ugd2FudCB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgdGhhdCB3ZSBuZWVkIHRvIGZpbmQuXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IE9ubHkgcmVtb3ZlIGxpc3RlbmVycyBtYXRjaGluZyB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25jZSBsaXN0ZW5lcnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBldmVudHMgPSBbXTtcblxuICBpZiAoZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgIGxpc3RlbmVycy5mbiAhPT0gZm5cbiAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVycy5vbmNlKVxuICAgICAgICB8fCAoY29udGV4dCAmJiBsaXN0ZW5lcnMuY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuXG4gICAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKVxuICAgICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAvL1xuICBpZiAoZXZlbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW2V2dF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgb3Igb25seSB0aGUgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmVycyBmb3IuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKGV2ZW50KSBkZWxldGUgdGhpcy5fZXZlbnRzW3ByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRdO1xuICBlbHNlIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFwcGx5IGFueW1vcmUuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4ndXNlIHN0cmljdCc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiFcbiAqIGFzeW5jXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jXG4gKlxuICogQ29weXJpZ2h0IDIwMTAtMjAxNCBDYW9sYW4gTWNNYWhvblxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbi8qanNoaW50IG9uZXZhcjogZmFsc2UsIGluZGVudDo0ICovXG4vKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cbihmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXN5bmMgPSB7fTtcblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcm9vdCwgcHJldmlvdXNfYXN5bmM7XG5cbiAgICByb290ID0gdGhpcztcbiAgICBpZiAocm9vdCAhPSBudWxsKSB7XG4gICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWQpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkocm9vdCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8gY3Jvc3MtYnJvd3NlciBjb21wYXRpYmxpdHkgZnVuY3Rpb25zIC8vLy9cblxuICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgdmFyIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG5cbiAgICB2YXIgX2VhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBfbWFwID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgaWYgKGFyci5tYXApIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIubWFwKGl0ZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IoeCwgaSwgYSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHZhciBfcmVkdWNlID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIG1lbW8pIHtcbiAgICAgICAgaWYgKGFyci5yZWR1Y2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGl0ZXJhdG9yLCBtZW1vKTtcbiAgICAgICAgfVxuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICBtZW1vID0gaXRlcmF0b3IobWVtbywgeCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuXG4gICAgdmFyIF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgX2VhY2goYXJyLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgb25seV9vbmNlKGRvbmUpICk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2ggPSBhc3luYy5lYWNoO1xuXG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICB2YXIgaXRlcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGFycltjb21wbGV0ZWRdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID0gYXN5bmMuZWFjaFNlcmllcztcblxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZuID0gX2VhY2hMaW1pdChsaW1pdCk7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIFthcnIsIGl0ZXJhdG9yLCBjYWxsYmFja10pO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaExpbWl0ID0gYXN5bmMuZWFjaExpbWl0O1xuXG4gICAgdmFyIF9lYWNoTGltaXQgPSBmdW5jdGlvbiAobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgaWYgKCFhcnIubGVuZ3RoIHx8IGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVwbGVuaXNoICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiBzdGFydGVkIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoYXJyW3N0YXJ0ZWQgLSAxXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB2YXIgZG9QYXJhbGxlbCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvUGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKGxpbWl0LCBmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFtfZWFjaExpbWl0KGxpbWl0KV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBkb1NlcmllcyA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoU2VyaWVzXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBfYXN5bmNNYXAgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1t4LmluZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9tYXBMaW1pdChsaW1pdCkoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB2YXIgX21hcExpbWl0ID0gZnVuY3Rpb24obGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGRvUGFyYWxsZWxMaW1pdChsaW1pdCwgX2FzeW5jTWFwKTtcbiAgICB9O1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihtZW1vLCB4LCBmdW5jdGlvbiAoZXJyLCB2KSB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGluamVjdCBhbGlhc1xuICAgIGFzeW5jLmluamVjdCA9IGFzeW5jLnJlZHVjZTtcbiAgICAvLyBmb2xkbCBhbGlhc1xuICAgIGFzeW5jLmZvbGRsID0gYXN5bmMucmVkdWNlO1xuXG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSkucmV2ZXJzZSgpO1xuICAgICAgICBhc3luYy5yZWR1Y2UocmV2ZXJzZWQsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICAvLyBmb2xkciBhbGlhc1xuICAgIGFzeW5jLmZvbGRyID0gYXN5bmMucmVkdWNlUmlnaHQ7XG5cbiAgICB2YXIgX2ZpbHRlciA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LnZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG4gICAgYXN5bmMuZmlsdGVyU2VyaWVzID0gZG9TZXJpZXMoX2ZpbHRlcik7XG4gICAgLy8gc2VsZWN0IGFsaWFzXG4gICAgYXN5bmMuc2VsZWN0ID0gYXN5bmMuZmlsdGVyO1xuICAgIGFzeW5jLnNlbGVjdFNlcmllcyA9IGFzeW5jLmZpbHRlclNlcmllcztcblxuICAgIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLnJlamVjdCA9IGRvUGFyYWxsZWwoX3JlamVjdCk7XG4gICAgYXN5bmMucmVqZWN0U2VyaWVzID0gZG9TZXJpZXMoX3JlamVjdCk7XG5cbiAgICB2YXIgX2RldGVjdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIG1haW5fY2FsbGJhY2spIHtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKHgpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZGV0ZWN0ID0gZG9QYXJhbGxlbChfZGV0ZWN0KTtcbiAgICBhc3luYy5kZXRlY3RTZXJpZXMgPSBkb1NlcmllcyhfZGV0ZWN0KTtcblxuICAgIGFzeW5jLnNvbWUgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbnkgYWxpYXNcbiAgICBhc3luYy5hbnkgPSBhc3luYy5zb21lO1xuXG4gICAgYXN5bmMuZXZlcnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghdikge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gYWxsIGFsaWFzXG4gICAgYXN5bmMuYWxsID0gYXN5bmMuZXZlcnk7XG5cbiAgICBhc3luYy5zb3J0QnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgYXN5bmMubWFwKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAoZXJyLCBjcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHt2YWx1ZTogeCwgY3JpdGVyaWE6IGNyaXRlcmlhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoZm4pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGhcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldID09PSBmbikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdGFza0NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtYWluaW5nVGFza3MtLVxuICAgICAgICAgICAgX2VhY2gobGlzdGVuZXJzLnNsaWNlKDApLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIHZhciB0aGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZmluYWwgY2FsbGJhY2sgZnJvbSBjYWxsaW5nIGl0c2VsZiBpZiBpdCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdGhlQ2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9lYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKF9rZXlzKHJlc3VsdHMpLCBmdW5jdGlvbihya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIHN1YnNlcXVlbnQgZXJyb3JzIGhpdHRpbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUodGFza0NvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCBNYXRoLmFicyh0YXNrLmxlbmd0aCAtIDEpKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucmV0cnkgPSBmdW5jdGlvbih0aW1lcywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIERFRkFVTFRfVElNRVMgPSA1O1xuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcbiAgICAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHRpbWVzIG5vdCBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICAgICAgdGltZXMgPSBERUZBVUxUX1RJTUVTO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lcyBpcyBhIG51bWJlclxuICAgICAgICB0aW1lcyA9IHBhcnNlSW50KHRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgdmFyIHdyYXBwZWRUYXNrID0gZnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkUmVzdWx0cykge1xuICAgICAgICAgICAgdmFyIHJldHJ5QXR0ZW1wdCA9IGZ1bmN0aW9uKHRhc2ssIGZpbmFsQXR0ZW1wdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKGZ1bmN0aW9uKGVyciwgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKCFlcnIgfHwgZmluYWxBdHRlbXB0LCB7ZXJyOiBlcnIsIHJlc3VsdDogcmVzdWx0fSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXBwZWRSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcykge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KHRhc2ssICEodGltZXMtPTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBjYWxsYmFjaykoZGF0YS5lcnIsIGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrXG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJdGVyYXRvciA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGZ1bmN0aW9uKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGVhY2hmbi5tYXAodGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGVhY2hmbi5lYWNoKF9rZXlzKHRhc2tzKSwgZnVuY3Rpb24gKGssIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGFza3Nba10oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogYXN5bmMubWFwLCBlYWNoOiBhc3luYy5lYWNoIH0sIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogX21hcExpbWl0KGxpbWl0KSwgZWFjaDogX2VhY2hMaW1pdChsaW1pdCkgfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICBhc3luYy5tYXBTZXJpZXModGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5pdGVyYXRvciA9IGZ1bmN0aW9uICh0YXNrcykge1xuICAgICAgICB2YXIgbWFrZUNhbGxiYWNrID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmbi5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCB0YXNrcy5sZW5ndGggLSAxKSA/IG1ha2VDYWxsYmFjayhpbmRleCArIDEpOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KFxuICAgICAgICAgICAgICAgIG51bGwsIGFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgX2NvbmNhdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHIgPSByLmNvbmNhdCh5IHx8IFtdKTtcbiAgICAgICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRlc3QoKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLndoaWxzdCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvV2hpbHN0ID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAodGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMudW50aWwodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAoIXRlc3QuYXBwbHkobnVsbCwgYXJncykpIHtcbiAgICAgICAgICAgICAgICBhc3luYy5kb1VudGlsKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcG9zLCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxLnNhdHVyYXRlZCAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHEuZHJhaW4gPSBudWxsO1xuICAgICAgICAgICAgICBxLnRhc2tzID0gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gcS50YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocS5lbXB0eSAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLmRyYWluICYmIHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UobmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcih0YXNrLmRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSB0cnVlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSBxLmNvbmN1cnJlbmN5OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMucHJpb3JpdHlRdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG5cbiAgICAgICAgZnVuY3Rpb24gX2NvbXBhcmVUYXNrcyhhLCBiKXtcbiAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgIHZhciBiZWcgPSAtMSxcbiAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBzZXF1ZW5jZVttaWRdKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGJlZyA9IG1pZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiZWc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG5vcm1hbCBxdWV1ZVxuICAgICAgICB2YXIgcSA9IGFzeW5jLnF1ZXVlKHdvcmtlciwgY29uY3VycmVuY3kpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciB3b3JraW5nICAgICA9IGZhbHNlLFxuICAgICAgICAgICAgdGFza3MgICAgICAgPSBbXTtcblxuICAgICAgICB2YXIgY2FyZ28gPSB7XG4gICAgICAgICAgICB0YXNrczogdGFza3MsXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBudWxsLFxuICAgICAgICAgICAgZW1wdHk6IG51bGwsXG4gICAgICAgICAgICBkcmFpbjogbnVsbCxcbiAgICAgICAgICAgIGRyYWluZWQ6IHRydWUsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZ28uc2F0dXJhdGVkICYmIHRhc2tzLmxlbmd0aCA9PT0gcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ28uc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoY2FyZ28ucHJvY2Vzcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcygpIHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2luZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2FyZ28uZHJhaW4gJiYgIWNhcmdvLmRyYWluZWQpIGNhcmdvLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvLmRyYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRzID0gdHlwZW9mIHBheWxvYWQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0YXNrcy5zcGxpY2UoMCwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tzLnNwbGljZSgwLCB0YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRzID0gX21hcCh0cywgZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmKGNhcmdvLmVtcHR5KSBjYXJnby5lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHdvcmtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtlcihkcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JraW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKHRzLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjYXJnbztcbiAgICB9O1xuXG4gICAgdmFyIF9jb25zb2xlX2ZuID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZWFjaChhcmdzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbmFtZV0oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIG1lbW9ba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICBxW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfTtcblxuICAgIGFzeW5jLnVubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb3VudGVyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jLm1hcFNlcmllcyhjb3VudGVyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXEgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXN5bmMucmVkdWNlKGZucywgYXJncywgZnVuY3Rpb24gKG5ld2FyZ3MsIGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KFtmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1dKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy5jb21wb3NlID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICB2YXIgX2FwcGx5RWFjaCA9IGZ1bmN0aW9uIChlYWNoZm4sIGZucyAvKmFyZ3MuLi4qLykge1xuICAgICAgICB2YXIgZ28gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzLmNvbmNhdChbY2JdKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgICAgIHJldHVybiBnby5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuYXBwbHlFYWNoID0gZG9QYXJhbGxlbChfYXBwbHlFYWNoKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBkb1NlcmllcyhfYXBwbHlFYWNoKTtcblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbihuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsInZhciBhc3luYyAgICAgICA9IHJlcXVpcmUoJ2FzeW5jJyksXG4gICAgdXJsUGFyc2VyICAgPSByZXF1aXJlKCd1cmwnKSxcbiAgICBSZXNvdXJjZSAgICA9IHJlcXVpcmUoJy4vUmVzb3VyY2UnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgbXVsdGlwbGUgcmVzb3VyY2VzIHRvIGxvYWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KSB7XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICBjb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByb2dyZXNzIHBlcmNlbnQgb2YgdGhlIGxvYWRlciBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRpbmcgc3RhdGUgb2YgdGhlIGxvYWRlciwgdHJ1ZSBpZiBpdCBpcyBjdXJyZW50bHkgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdG90YWwgcHJvZ3Jlc3MgdGhhdCBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGJlZm9yZSBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaWRkbGV3YXJlIHRvIHJ1biBhZnRlciBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfbG9hZFJlc291cmNlYCBmdW5jdGlvbiBib3VuZCB3aXRoIHRoaXMgb2JqZWN0IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kTG9hZFJlc291cmNlID0gdGhpcy5fbG9hZFJlc291cmNlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkxvYWRgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkxvYWQgPSB0aGlzLl9vbkxvYWQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvdXJjZSBidWZmZXIgdGhhdCBmaWxscyB1bnRpbCBgbG9hZGAgaXMgY2FsbGVkIHRvIHN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB0cmFjayBsb2FkIGNvbXBsZXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9udW1Ub0xvYWQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlcyB3YWl0aW5nIHRvIGJlIGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2VbXX1cbiAgICAgKi9cbiAgICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX2JvdW5kTG9hZFJlc291cmNlLCBjb25jdXJyZW5jeSk7XG5cbiAgICAvKipcbiAgICAgKiBBbGwgdGhlIHJlc291cmNlcyBmb3IgdGhpcyBsb2FkZXIga2V5ZWQgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIFJlc291cmNlPn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgb3IgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwcm9ncmVzc1xuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGVycm9yZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGxvYWRlciBiZWdpbnMgdG8gcHJvY2VzcyB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBxdWV1ZWQgcmVzb3VyY2VzIGFsbCBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbi8qKlxuICogQWRkcyBhIHJlc291cmNlIChvciBtdWx0aXBsZSByZXNvdXJjZXMpIHRvIHRoZSBsb2FkZXIgcXVldWUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gdGFrZSBhIHdpZGUgdmFyaWV0eSBvZiBkaWZmZXJlbnQgcGFyYW1ldGVycy4gVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBhbHdheXNcbiAqIHJlcXVpcmVkIHRoZSB1cmwgdG8gbG9hZC4gQWxsIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOlxuICpcbiAqIGBgYGpzXG4gKiBsb2FkZXJcbiAqICAgICAvLyBub3JtYWwgcGFyYW0gc3ludGF4XG4gKiAgICAgLmFkZCgna2V5JywgJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJywgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCgnaHR0cDovLy4uLicpXG4gKlxuICogICAgIC8vIG9iamVjdCBzeW50YXhcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgbmFtZTogJ2tleTInLFxuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MycsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9XG4gKiAgICAgfSlcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgdXJsOiAnaHR0cHM6Ly8uLi4nLFxuICogICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7fSxcbiAqICAgICAgICAgY3Jvc3NPcmlnaW46IHRydWVcbiAqICAgICB9KVxuICpcbiAqICAgICAvLyB5b3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBvYmplY3RzIG9yIHVybHMgb3IgYm90aFxuICogICAgIC5hZGQoW1xuICogICAgICAgICB7IG5hbWU6ICdrZXk0JywgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgIHsgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgICdodHRwOi8vLi4uJ1xuICogICAgIF0pO1xuICogYGBgXG4gKlxuICogQGFsaWFzIGVucXVldWVcbiAqIEBwYXJhbSBbbmFtZV0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQsIGlmIG5vdCBwYXNzZWQgdGhlIHVybCBpcyB1c2VkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCByZWxhdGl2ZSB0byB0aGUgYmFzZVVybCBvZiB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7Ym9vbGVhbn0gSXMgdGhpcyByZXF1ZXN0IGNyb3NzLW9yaWdpbj8gRGVmYXVsdCBpcyB0byBkZXRlcm1pbmUgYXV0b21hdGljYWxseS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5sb2FkVHlwZT1SZXNvdXJjZS5MT0FEX1RZUEUuWEhSXSB7UmVzb3VyY2UuWEhSX0xPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGlzIHNwZWNpZmljIHJlc291cmNlIGNvbXBsZXRlcyBsb2FkaW5nLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFkZCA9IExvYWRlci5wcm90b3R5cGUuZW5xdWV1ZSA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIGNiKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIG9mIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hZGQobmFtZVtpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBpZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluc3RlYWQgb2YgcGFyYW1zXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYiA9IHVybCB8fCBuYW1lLmNhbGxiYWNrIHx8IG5hbWUub25Db21wbGV0ZTtcbiAgICAgICAgb3B0aW9ucyA9IG5hbWU7XG4gICAgICAgIHVybCA9IG5hbWUudXJsO1xuICAgICAgICBuYW1lID0gbmFtZS5uYW1lIHx8IG5hbWUua2V5IHx8IG5hbWUudXJsO1xuICAgIH1cblxuICAgIC8vIGNhc2Ugd2hlcmUgbm8gbmFtZSBpcyBwYXNzZWQgc2hpZnQgYWxsIGFyZ3Mgb3ZlciBieSBvbmUuXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHVybDtcbiAgICAgICAgdXJsID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBzaGlmdGVkIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIHVybC5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB1cmwgcGFzc2VkIHRvIGFkZCByZXNvdXJjZSB0byBsb2FkZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gb3B0aW9ucyBhcmUgb3B0aW9uYWwgc28gcGVvcGxlIG1pZ2h0IHBhc3MgYSBmdW5jdGlvbiBhbmQgbm8gb3B0aW9uc1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHJlc291cmNlIGFscmVhZHkgZXhpc3RzLlxuICAgIGlmICh0aGlzLnJlc291cmNlc1tuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc291cmNlIHdpdGggbmFtZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgIH1cblxuICAgIC8vIGFkZCBiYXNlIHVybCBpZiB0aGlzIGlzbid0IGFuIGFic29sdXRlIHVybFxuICAgIHVybCA9IHRoaXMuX2hhbmRsZUJhc2VVcmwodXJsKTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgc3RvcmUgdGhlIHJlc291cmNlXG4gICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0gPSBuZXcgUmVzb3VyY2UobmFtZSwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0ub25jZSgnYWZ0ZXJNaWRkbGV3YXJlJywgY2IpO1xuICAgIH1cblxuICAgIHRoaXMuX251bVRvTG9hZCsrO1xuXG4gICAgLy8gaWYgYWxyZWFkeSBsb2FkaW5nIGFkZCBpdCB0byB0aGUgd29ya2VyIHF1ZXVlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAoMTAwIC0gdGhpcy5wcm9ncmVzcykgLyAodGhpcy5fcXVldWUubGVuZ3RoKCkgKyB0aGlzLl9xdWV1ZS5ydW5uaW5nKCkpO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgYnVmZmVyIGl0IHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSBsYXRlclxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9idWZmZXIucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAxMDAgLyB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuTG9hZGVyLnByb3RvdHlwZS5faGFuZGxlQmFzZVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFyc2VkVXJsID0gdXJsUGFyc2VyLnBhcnNlKHVybCk7XG5cbiAgICAvLyBhYnNvbHV0ZSB1cmwsIGp1c3QgdXNlIGl0IGFzIGlzLlxuICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgfHwgcGFyc2VkVXJsLnBhdGhuYW1lLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBpZiBiYXNlVXJsIGRvZXNuJ3QgZW5kIGluIHNsYXNoIGFuZCB1cmwgZG9lc24ndCBzdGFydCB3aXRoIHNsYXNoLCB0aGVuIGFkZCBhIHNsYXNoIGluYmV0d2VlblxuICAgIGlmIChcbiAgICAgICAgdGhpcy5iYXNlVXJsLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmJhc2VVcmwubGFzdEluZGV4T2YoJy8nKSAhPT0gdGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgdXJsLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyAnLycgKyB1cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsICsgdXJsO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBTZXRzIHVwIGEgbWlkZGxld2FyZSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuICpiZWZvcmUqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyBwcmVcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYmVmb3JlID0gTG9hZGVyLnByb3RvdHlwZS5wcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLnB1c2goZm4pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmFmdGVyKiB0aGVcbiAqIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqXG4gKiBAYWxpYXMgdXNlXG4gKiBAcGFyYW0gbWlkZGxld2FyZSB7ZnVuY3Rpb259IFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFmdGVyID0gTG9hZGVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9hZnRlck1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoZSBxdWV1ZSBvZiB0aGUgbG9hZGVyIHRvIHByZXBhcmUgZm9yIGEgbmV3IGxvYWQuXG4gKlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvLyB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG4gICAgLy8gdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gICAgdGhpcy5fcXVldWUuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGxvYWRpbmcgdGhlIHF1ZXVlZCByZXNvdXJjZXMuXG4gKlxuICogQGZpcmVzIHN0YXJ0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgYGNvbXBsZXRlYCBldmVudC5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgLy8gcmVnaXN0ZXIgY29tcGxldGUgY2FsbGJhY2sgaWYgdGhleSBwYXNzIG9uZVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcXVldWUgaGFzIGFscmVhZHkgc3RhcnRlZCB3ZSBhcmUgZG9uZSBoZXJlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm90aWZ5IG9mIHN0YXJ0XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gc3RhcnQgdGhlIGludGVybmFsIHF1ZXVlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLl9idWZmZXJbaV0pO1xuICAgIH1cblxuICAgIC8vIGVtcHR5IHRoZSBidWZmZXJcbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBMb2FkcyBhIHNpbmdsZSByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX2xvYWRSZXNvdXJjZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZGVxdWV1ZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHJlc291cmNlLl9kZXF1ZXVlID0gZGVxdWV1ZTtcblxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gcmVzb3VyY2Uub24oJ3Byb2dyZXNzJywgc2VsZi5lbWl0LmJpbmQoc2VsZiwgJ3Byb2dyZXNzJykpO1xuXG4gICAgICAgIHJlc291cmNlLmxvYWQoc2VsZi5fYm91bmRPbkxvYWQpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgb25jZSBlYWNoIHJlc291cmNlIGhhcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzLCB0aGlzLnJlc291cmNlcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBlYWNoIHRpbWUgYSByZXNvdXJjZXMgaXMgbG9hZGVkLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQGZpcmVzIGVycm9yXG4gKiBAZmlyZXMgbG9hZFxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgdGhpcy5wcm9ncmVzcyArPSB0aGlzLl9wcm9ncmVzc0NodW5rO1xuXG4gICAgdGhpcy5lbWl0KCdwcm9ncmVzcycsIHRoaXMsIHJlc291cmNlKTtcblxuICAgIC8vIHJ1biBtaWRkbGV3YXJlLCB0aGlzICptdXN0KiBoYXBwZW4gYmVmb3JlIGRlcXVldWUgc28gc3ViLWFzc2V0cyBnZXQgYWRkZWQgcHJvcGVybHlcbiAgICB0aGlzLl9ydW5NaWRkbGV3YXJlKHJlc291cmNlLCB0aGlzLl9hZnRlck1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzb3VyY2UuZW1pdCgnYWZ0ZXJNaWRkbGV3YXJlJywgcmVzb3VyY2UpO1xuXG4gICAgICAgIHRoaXMuX251bVRvTG9hZC0tO1xuXG4gICAgICAgIC8vIGRvIGNvbXBsZXRpb24gY2hlY2tcbiAgICAgICAgaWYgKHRoaXMuX251bVRvTG9hZCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgIHRoaXMuX29uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc291cmNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgcmVzb3VyY2UuZXJyb3IsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZCcsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuXG5cbiAgICAvLyByZW1vdmUgdGhpcyByZXNvdXJjZSBmcm9tIHRoZSBhc3luYyBxdWV1ZVxuICAgIHJlc291cmNlLl9kZXF1ZXVlKCk7XG59O1xuXG4vKipcbiAqIFJ1biBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvbiBhIHJlc291cmNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX3J1bk1pZGRsZXdhcmUgPSBmdW5jdGlvbiAocmVzb3VyY2UsIGZucywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzKGZucywgZnVuY3Rpb24gKGZuLCBuZXh0KSB7XG4gICAgICAgIGZuLmNhbGwoc2VsZiwgcmVzb3VyY2UsIG5leHQpO1xuICAgIH0sIGNiLmJpbmQodGhpcywgcmVzb3VyY2UpKTtcbn07XG5cbkxvYWRlci5MT0FEX1RZUEUgPSBSZXNvdXJjZS5MT0FEX1RZUEU7XG5Mb2FkZXIuWEhSX1JFQURZX1NUQVRFID0gUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFO1xuTG9hZGVyLlhIUl9SRVNQT05TRV9UWVBFID0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEU7XG4iLCJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIF91cmwgPSByZXF1aXJlKCd1cmwnKSxcbiAgICAvLyB0ZXN0cyBpcyBDT1JTIGlzIHN1cHBvcnRlZCBpbiBYSFIsIGlmIG5vdCB3ZSBuZWVkIHRvIHVzZSBYRFJcbiAgICB1c2VYZHIgPSAhISh3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiAobmV3IFhNTEh0dHBSZXF1ZXN0KCkpKSksXG4gICAgdGVtcEFuY2hvciA9IG51bGw7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgYSBzaW5nbGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnlcbiAqIGEgc2luZ2xlIFVSTC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBuYW1lIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCBmb3IgYXVkaW8vdmlkZW8gbG9hZHMgeW91IGNhbiBwYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMuXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5jcm9zc09yaWdpbl0ge3N0cmluZ3xib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5MT0FEX1RZUEV9IEhvdyBzaG91bGQgdGhpcyByZXNvdXJjZSBiZSBsb2FkZWQ/XG4gKiBAcGFyYW0gW29wdGlvbnMueGhyVHlwZT1SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ERUZBVUxUXSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IEhvdyBzaG91bGQgdGhlIGRhdGEgYmVpbmdcbiAqICAgICAgbG9hZGVkIGJlIGludGVycHJldGVkIHdoZW4gdXNpbmcgWEhSP1xuICogQHBhcmFtIFtvcHRpb25zLm1ldGFkYXRhXSB7b2JqZWN0fSBFeHRyYSBpbmZvIGZvciBtaWRkbGV3YXJlLlxuICovXG5mdW5jdGlvbiBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggbmFtZSBhbmQgdXJsIGFyZSByZXF1aXJlZCBmb3IgY29uc3RydWN0aW5nIGEgcmVzb3VyY2UuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVybCB1c2VkIHRvIGxvYWQgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHVybCBpcyBhIGRhdGEgdXJsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzRGF0YVVybCA9IHRoaXMudXJsLmluZGV4T2YoJ2RhdGE6JykgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSB0aGF0IHdhcyBsb2FkZWQgYnkgdGhlIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55fVxuICAgICAqL1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBvcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJ2Fub255bW91cycgOiBvcHRpb25zLmNyb3NzT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCBvZiBsb2FkaW5nIHRvIHVzZSBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlLkxPQURfVFlQRX1cbiAgICAgKi9cbiAgICB0aGlzLmxvYWRUeXBlID0gb3B0aW9ucy5sb2FkVHlwZSB8fCB0aGlzLl9kZXRlcm1pbmVMb2FkVHlwZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgdXNlZCB0byBsb2FkIHRoZSByZXNvdXJjZSB2aWEgWEhSLiBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMueGhyVHlwZSA9IG9wdGlvbnMueGhyVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgKGlmIGFueSkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFcnJvcn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBYSFIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLiBUaGlzIGlzIG9ubHkgc2V0XG4gICAgICogd2hlbiBgbG9hZFR5cGVgIGlzIGBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1hNTEh0dHBSZXF1ZXN0fVxuICAgICAqL1xuICAgIHRoaXMueGhyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMganNvbi4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNKc29uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIHhtbC4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNYbWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gaW1hZ2UgdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0ltYWdlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGFuIGF1ZGlvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNBdWRpbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhIHZpZGVvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNWaWRlbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBkZXF1ZXVlYCBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgYSBzdG9yYWdlIHBsYWNlIGZvciB0aGUgYXN5bmMgcXVldWUgZGVxdWV1ZSBtZXRob2RcbiAgICAgKiB1c2VkIHByaXZhdGVseSBieSB0aGUgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kZXF1ZXVlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tcGxldGVgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZENvbXBsZXRlID0gdGhpcy5jb21wbGV0ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25FcnJvcmAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25FcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uUHJvZ3Jlc3NgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MgPSB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyk7XG5cbiAgICAvLyB4aHIgY2FsbGJhY2tzXG4gICAgdGhpcy5fYm91bmRYaHJPbkVycm9yID0gdGhpcy5feGhyT25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25BYm9ydCA9IHRoaXMuX3hock9uQWJvcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9ib3VuZFhock9uTG9hZCA9IHRoaXMuX3hock9uTG9hZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0ID0gdGhpcy5feGRyT25UaW1lb3V0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJlc291cmNlIGJlaW5ncyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBlYWNoIHRpbWUgcHJvZ3Jlc3Mgb2YgdGhpcyByZXNvdXJjZSBsb2FkIHVwZGF0ZXMuXG4gICAgICogTm90IGFsbCByZXNvdXJjZXMgdHlwZXMgYW5kIGxvYWRlciBzeXN0ZW1zIGNhbiBzdXBwb3J0IHRoaXMgZXZlbnRcbiAgICAgKiBzbyBzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIElmIHRoZSByZXNvdXJjZVxuICAgICAqIGlzIGJlaW5nIGxvYWRlZCBvbiBhIG1vZGVybiBicm93c2VyLCB1c2luZyBYSFIsIGFuZCB0aGUgcmVtb3RlIHNlcnZlclxuICAgICAqIHByb3Blcmx5IHNldHMgQ29udGVudC1MZW5ndGggaGVhZGVycywgdGhlbiB0aGlzIHdpbGwgYmUgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHRoaXMgcmVzb3VyY2UgaGFzIGxvYWRlZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGl0IHdpbGxcbiAgICAgKiBiZSBpbiB0aGUgYGVycm9yYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb21wbGV0ZVxuICAgICAqIEBtZW1iZXJvZiBSZXNvdXJjZSNcbiAgICAgKi9cbn1cblxuUmVzb3VyY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblJlc291cmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlc291cmNlO1xubW9kdWxlLmV4cG9ydHMgPSBSZXNvdXJjZTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgcmVzb3VyY2UgYXMgY29tcGxldGUuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIGluIGEgd3JhcHBlciBvciBzb21ldGhpbmcuLi5ncm9zcy4uLi5cbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvcik7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgICBpZiAodGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGhyLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub250aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMueGhyLm9ucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25sb2FkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogS2lja3Mgb2ZmIGxvYWRpbmcgb2YgdGhpcyByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gaWYgYSBjYWxsYmFjayBpcyBzZXQsIGxpc3RlbiBmb3IgY29tcGxldGUgZXZlbnRcbiAgICBpZiAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luID09PSBmYWxzZSB8fCB0eXBlb2YgdGhpcy5jcm9zc09yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHRoaXMuX2RldGVybWluZUNyb3NzT3JpZ2luKHRoaXMudXJsKTtcbiAgICB9XG5cbiAgICBzd2l0Y2godGhpcy5sb2FkVHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRTpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRJbWFnZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuQVVESU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlZJREVPOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5YSFI6XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodXNlWGRyICYmIHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGRyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGhyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEltYWdlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLnNyYyA9IHRoaXMudXJsO1xuXG4gICAgdGhpcy5pc0ltYWdlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBIVE1MQXVkaW9FbGVtZW50IG9yIEhUTUxWaWRlb0VsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdhdWRpbycgJiYgdHlwZW9mIEF1ZGlvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQXVkaW8oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBlbGVtZW50ICcgKyB0eXBlKTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBmb3IgQ29jb29uSlMgQ2FudmFzKyBydW50aW1lLCBsYWNrcyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKVxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUykge1xuICAgICAgICB0aGlzLmRhdGEuc3JjID0gQXJyYXkuaXNBcnJheSh0aGlzLnVybCkgPyB0aGlzLnVybFswXSA6IHRoaXMudXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51cmwpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXJsLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybFtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1snaXMnICsgdHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSldID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUsIGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YS5sb2FkKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhNTEh0dHBSZXF1ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBzZXQgdGhlIHJlcXVlc3QgdHlwZSBhbmQgdXJsXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsLCB0cnVlKTtcblxuICAgIC8vIGxvYWQganNvbiBhcyB0ZXh0IGFuZCBwYXJzZSBpdCBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgLy8gKmNvdWdoKiBzYWZhcmkgKmNvdWdoKiBjYW4ndCBkZWFsIHdpdGggaXQuXG4gICAgaWYgKHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTiB8fCB0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHRoaXMueGhyVHlwZTtcbiAgICB9XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkLCBmYWxzZSk7XG5cbiAgICB4aHIuc2VuZCgpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBYRG9tYWluUmVxdWVzdC4gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdXBwb3J0IElFOSAoZ3Jvc3MpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhkciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhkciA9IHRoaXMueGhyID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7XG5cbiAgICAvLyBYRG9tYWluUmVxdWVzdCBoYXMgYSBmZXcgcXVpcmtzLiBPY2Nhc2lvbmFsbHkgaXQgd2lsbCBhYm9ydCByZXF1ZXN0c1xuICAgIC8vIEEgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbWFrZSBzdXJlIEFMTCBjYWxsYmFja3MgYXJlIHNldCBldmVuIGlmIG5vdCB1c2VkXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU3ODY5NjYveGRvbWFpbnJlcXVlc3QtYWJvcnRzLXBvc3Qtb24taWUtOVxuICAgIHhkci50aW1lb3V0ID0gNTAwMDtcblxuICAgIHhkci5vbmVycm9yID0gdGhpcy5fYm91bmRYaHJPbkVycm9yO1xuICAgIHhkci5vbnRpbWVvdXQgPSB0aGlzLl9ib3VuZFhkck9uVGltZW91dDtcbiAgICB4ZHIub25wcm9ncmVzcyA9IHRoaXMuX2JvdW5kT25Qcm9ncmVzcztcbiAgICB4ZHIub25sb2FkID0gdGhpcy5fYm91bmRYaHJPbkxvYWQ7XG5cbiAgICB4ZHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gIE5vdGU6IFRoZSB4ZHIuc2VuZCgpIGNhbGwgaXMgd3JhcHBlZCBpbiBhIHRpbWVvdXQgdG8gcHJldmVudCBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmZhY2Ugd2hlcmUgc29tZSByZXF1ZXN0cyBhcmUgbG9zdFxuICAgIC8vICBpZiBtdWx0aXBsZSBYRG9tYWluUmVxdWVzdHMgYXJlIGJlaW5nIHNlbnQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAvLyBTb21lIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9pc3N1ZXMvMTI0OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB4ZHIuc2VuZCgpO1xuICAgIH0sIDApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc291cmNlIHVzZWQgaW4gbG9hZGluZyB2aWEgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSBUaGUgZWxlbWVudCB0eXBlICh2aWRlbyBvciBhdWRpbykuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSBzb3VyY2UgVVJMIHRvIGxvYWQgZnJvbS5cbiAqIEBwYXJhbSBbbWltZV0ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSBvZiB0aGUgdmlkZW9cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fY3JlYXRlU291cmNlID0gZnVuY3Rpb24gKHR5cGUsIHVybCwgbWltZSkge1xuICAgIGlmICghbWltZSkge1xuICAgICAgICBtaW1lID0gdHlwZSArICcvJyArIHVybC5zdWJzdHIodXJsLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gdXJsO1xuICAgIHNvdXJjZS50eXBlID0gbWltZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgZXJyb3JzIG91dC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgZXJyb3IgZXZlbnQgZnJvbSB0aGUgZWxlbWVudCB0aGF0IGVtaXRzIGl0LlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgZWxlbWVudCB1c2luZyAnICsgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgcHJvZ3Jlc3MgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fb25Qcm9ncmVzcyA9ICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGVycm9yIGV2ZW50IGZpcmVzIGZvciB4aHIveGRyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RFcnJvckV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIHJlcVR5cGUodGhpcy54aHIpICsgJyBSZXF1ZXN0IGZhaWxlZC4gJyArXG4gICAgICAgICdTdGF0dXM6ICcgKyB0aGlzLnhoci5zdGF0dXMgKyAnLCB0ZXh0OiBcIicgKyB0aGlzLnhoci5zdGF0dXNUZXh0ICsgJ1wiJ1xuICAgICk7XG5cbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhbiBhYm9ydCBldmVudCBmaXJlcyBmb3IgeGhyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RBYm9ydEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3Qgd2FzIGFib3J0ZWQgYnkgdGhlIHVzZXIuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYSB0aW1lb3V0IGV2ZW50IGZpcmVzIGZvciB4ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGRyT25UaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgdGltZWQgb3V0LicpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gZGF0YSBzdWNjZXNzZnVsbHkgbG9hZHMgZnJvbSBhbiB4aHIveGRyIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdExvYWRFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGhyT25Mb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB4aHIgPSB0aGlzLnhocixcbiAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1cyAhPT0gdW5kZWZpbmVkID8geGhyLnN0YXR1cyA6IDIwMDsgLy9YRFIgaGFzIG5vIGAuc3RhdHVzYCwgYXNzdW1lIDIwMC5cblxuICAgIC8vIHN0YXR1cyBjYW4gYmUgMCB3aGVuIHVzaW5nIHRoZSBmaWxlOi8vIHByb3RvY29sLCBhbHNvIGNoZWNrIGlmIGEgcmVzcG9uc2Ugd2FzIGZvdW5kXG4gICAgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA0IHx8IChzdGF0dXMgPT09IDAgJiYgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkge1xuICAgICAgICAvLyBpZiB0ZXh0LCBqdXN0IHJldHVybiBpdFxuICAgICAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGpzb24sIHBhcnNlIGludG8ganNvbiBvYmplY3RcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0pzb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGxvYWRlZCBqc29uOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHhtbCwgcGFyc2UgaW50byBhbiB4bWwgZG9jdW1lbnQgb3IgZGl2IGVsZW1lbnRcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LkRPTVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhoci5yZXNwb25zZVRleHQsICd0ZXh0L3htbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZGl2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzWG1sID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIHhtbDonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlciB0eXBlcyBqdXN0IHJldHVybiB0aGUgcmVzcG9uc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2UgfHwgeGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignWycgKyB4aHIuc3RhdHVzICsgJ10nICsgeGhyLnN0YXR1c1RleHQgKyAnOicgKyB4aHIucmVzcG9uc2VVUkwpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbmZ1bmN0aW9uIHJlcVR5cGUoeGhyKSB7XG4gICAgcmV0dXJuIHhoci50b1N0cmluZygpLnJlcGxhY2UoJ29iamVjdCAnLCAnJyk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYGNyb3NzT3JpZ2luYCBwcm9wZXJ0eSBmb3IgdGhpcyByZXNvdXJjZSBiYXNlZCBvbiBpZiB0aGUgdXJsXG4gKiBmb3IgdGhpcyByZXNvdXJjZSBpcyBjcm9zcy1vcmlnaW4uIElmIGNyb3NzT3JpZ2luIHdhcyBtYW51YWxseSBzZXQsIHRoaXNcbiAqIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIHRvIHRlc3QuXG4gKiBAcGFyYW0gW2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbl0ge29iamVjdH0gVGhlIGxvY2F0aW9uIG9iamVjdCB0byB0ZXN0IGFnYWluc3QuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjcm9zc09yaWdpbiB2YWx1ZSB0byB1c2UgKG9yIGVtcHR5IHN0cmluZyBmb3Igbm9uZSkuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbiAodXJsLCBsb2MpIHtcbiAgICAvLyBkYXRhOiBhbmQgamF2YXNjcmlwdDogdXJscyBhcmUgY29uc2lkZXJlZCBzYW1lLW9yaWdpblxuICAgIGlmICh1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBpcyB3aW5kb3cubG9jYXRpb25cbiAgICBsb2MgPSBsb2MgfHwgd2luZG93LmxvY2F0aW9uO1xuXG4gICAgaWYgKCF0ZW1wQW5jaG9yKSB7XG4gICAgICAgIHRlbXBBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgfVxuXG4gICAgLy8gbGV0IHRoZSBicm93c2VyIGRldGVybWluZSB0aGUgZnVsbCBocmVmIGZvciB0aGUgdXJsIG9mIHRoaXMgcmVzb3VyY2UgYW5kIHRoZW5cbiAgICAvLyBwYXJzZSB3aXRoIHRoZSBub2RlIHVybCBsaWIsIHdlIGNhbid0IHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgICAvLyBiZWNhdXNlIHRoZXkgZG9uJ3Qgd29yayBpbiBJRTkgOihcbiAgICB0ZW1wQW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgdXJsID0gX3VybC5wYXJzZSh0ZW1wQW5jaG9yLmhyZWYpO1xuXG4gICAgdmFyIHNhbWVQb3J0ID0gKCF1cmwucG9ydCAmJiBsb2MucG9ydCA9PT0gJycpIHx8ICh1cmwucG9ydCA9PT0gbG9jLnBvcnQpO1xuXG4gICAgLy8gaWYgY3Jvc3Mgb3JpZ2luXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gbG9jLmhvc3RuYW1lIHx8ICFzYW1lUG9ydCB8fCB1cmwucHJvdG9jb2wgIT09IGxvYy5wcm90b2NvbCkge1xuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZXNwb25zZVR5cGUgb2YgYW4gWEhSIHJlcXVlc3QgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGVcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSByZXNwb25zZVR5cGUgdG8gdXNlLlxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZVhoclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlc291cmNlLl94aHJUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVMb2FkVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX2xvYWRUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXMudXJsLFxuICAgICAgICBleHQ7XG5cbiAgICBpZiAodGhpcy5pc0RhdGFVcmwpIHtcbiAgICAgICAgdmFyIHNsYXNoSW5kZXggPSB1cmwuaW5kZXhPZignLycpO1xuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHNsYXNoSW5kZXggKyAxLCB1cmwuaW5kZXhPZignOycsIHNsYXNoSW5kZXgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBxdWVyeVN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXh0ID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQ7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG1pbWUgdHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgcmVzcG9uc2VUeXBlIG9mXG4gKiByZXNvdXJjZSBiZWluZyBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZ2V0TWltZUZyb21YaHJUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5JztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0I6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2Jsb2InO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQ6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCc7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQ6XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVDpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG5cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsb2FkaW5nIGEgcmVzb3VyY2UgY2FuIHVzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBMT0FEX1RZUEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuWEhSIC0gVXNlcyBYTUxIdHRwUmVxdWVzdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuSU1BR0UgLSBVc2VzIGFuIGBJbWFnZWAgb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5BVURJTyAtIFVzZXMgYW4gYEF1ZGlvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLlZJREVPIC0gVXNlcyBhIGBWaWRlb2Agb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICovXG5SZXNvdXJjZS5MT0FEX1RZUEUgPSB7XG4gICAgWEhSOiAgICAxLFxuICAgIElNQUdFOiAgMixcbiAgICBBVURJTzogIDMsXG4gICAgVklERU86ICA0XG59O1xuXG4vKipcbiAqIFRoZSBYSFIgcmVhZHkgc3RhdGVzLCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gWEhSX1JFQURZX1NUQVRFXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLlVOU0VOVCAtIG9wZW4oKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5PUEVORUQgLSBzZW5kKCloYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuSEVBREVSU19SRUNFSVZFRCAtIHNlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuTE9BRElORyAtIERvd25sb2FkaW5nOyByZXNwb25zZVRleHQgaG9sZHMgcGFydGlhbCBkYXRhLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5ET05FIC0gVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFID0ge1xuICAgIFVOU0VOVDogMCxcbiAgICBPUEVORUQ6IDEsXG4gICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICBMT0FESU5HOiAzLFxuICAgIERPTkU6IDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVTUE9OU0VfVFlQRVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQgLSBkZWZhdWx0cyB0byB0ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSIC0gQXJyYXlCdWZmZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CTE9CIC0gQmxvYlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UIC0gRG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5KU09OIC0gT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCAtIFN0cmluZ1xuICovXG5SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRSA9IHtcbiAgICBERUZBVUxUOiAgICAndGV4dCcsXG4gICAgQlVGRkVSOiAgICAgJ2FycmF5YnVmZmVyJyxcbiAgICBCTE9COiAgICAgICAnYmxvYicsXG4gICAgRE9DVU1FTlQ6ICAgJ2RvY3VtZW50JyxcbiAgICBKU09OOiAgICAgICAnanNvbicsXG4gICAgVEVYVDogICAgICAgJ3RleHQnXG59O1xuXG5SZXNvdXJjZS5fbG9hZFR5cGVNYXAgPSB7XG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnYm1wJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGdhJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0Vcbn07XG5cblJlc291cmNlLl94aHJUeXBlTWFwID0ge1xuICAgIC8vIHhtbFxuICAgICd4aHRtbCc6ICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG1sJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG0nOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd4bWwnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0bXgnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0c3gnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdzdmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuXG4gICAgLy8gaW1hZ2VzXG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAncG5nJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBlZyc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnd2VicCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG5cbiAgICAvLyBqc29uXG4gICAgJ2pzb24nOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTixcblxuICAgIC8vIHRleHRcbiAgICAndGV4dCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhULFxuICAgICd0eHQnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFRcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSBsb2FkVHlwZSB7UmVzb3VyY2UuTE9BRF9UWVBFfSBUaGUgbG9hZCB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uTG9hZFR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgbG9hZFR5cGUpIHtcbiAgICBzZXRFeHRNYXAoUmVzb3VyY2UuX2xvYWRUeXBlTWFwLCBleHRuYW1lLCBsb2FkVHlwZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGxvYWQgdHlwZSB0byBiZSB1c2VkIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZXh0bmFtZSB7c3RyaW5nfSBUaGUgZXh0ZW5zaW9uIHRvIHNldCB0aGUgdHlwZSBmb3IsIGUuZy4gXCJwbmdcIiBvciBcImZudFwiXG4gKiBAcGFyYW0geGhyVHlwZSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSB4aHIgdHlwZSB0byBzZXQgaXQgdG8uXG4gKi9cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgeGhyVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5feGhyVHlwZU1hcCwgZXh0bmFtZSwgeGhyVHlwZSk7XG59O1xuXG5mdW5jdGlvbiBzZXRFeHRNYXAobWFwLCBleHRuYW1lLCB2YWwpIHtcbiAgICBpZiAoZXh0bmFtZSAmJiBleHRuYW1lLmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICBleHRuYW1lID0gZXh0bmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRuYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYXBbZXh0bmFtZV0gPSB2YWw7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIHByaXZhdGUgcHJvcGVydHlcbiAgICBfa2V5U3RyOiBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIsXG5cbiAgICBlbmNvZGVCaW5hcnk6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICAgICAgdmFyIGJ5dGVidWZmZXI7XG4gICAgICAgIHZhciBlbmNvZGVkQ2hhckluZGV4ZXMgPSBuZXcgQXJyYXkoNCk7XG4gICAgICAgIHZhciBpbnggPSAwO1xuICAgICAgICB2YXIgam54ID0gMDtcbiAgICAgICAgdmFyIHBhZGRpbmdCeXRlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmlsbCBieXRlIGJ1ZmZlciBhcnJheVxuICAgICAgICAgICAgYnl0ZWJ1ZmZlciA9IG5ldyBBcnJheSgzKTtcbiAgICAgICAgICAgIGZvciAoam54ID0gMDsgam54IDwgYnl0ZWJ1ZmZlci5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhd2F5IGhpZ2gtb3JkZXIgYnl0ZSwgYXMgZG9jdW1lbnRlZCBhdDpcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1MSHR0cFJlcXVlc3QjSGFuZGxpbmdfYmluYXJ5X2RhdGFcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gaW5wdXQuY2hhckNvZGVBdChpbngrKykgJiAweGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCBlYWNoIGVuY29kZWQgY2hhcmFjdGVyLCA2IGJpdHMgYXQgYSB0aW1lXG4gICAgICAgICAgICAvLyBpbmRleCAxOiBmaXJzdCA2IGJpdHNcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1swXSA9IGJ5dGVidWZmZXJbMF0gPj4gMjtcbiAgICAgICAgICAgIC8vIGluZGV4IDI6IHNlY29uZCA2IGJpdHMgKDIgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMSArIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAyKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzFdID0gKChieXRlYnVmZmVyWzBdICYgMHgzKSA8PCA0KSB8IChieXRlYnVmZmVyWzFdID4+IDQpO1xuICAgICAgICAgICAgLy8gaW5kZXggMzogdGhpcmQgNiBiaXRzICg0IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBpbnB1dCBieXRlIDIgKyAyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1syXSA9ICgoYnl0ZWJ1ZmZlclsxXSAmIDB4MGYpIDw8IDIpIHwgKGJ5dGVidWZmZXJbMl0gPj4gNik7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiBmb3J0aCA2IGJpdHMgKDYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IGJ5dGVidWZmZXJbMl0gJiAweDNmO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBwYWRkaW5nIGhhcHBlbmVkLCBhbmQgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBwYWRkaW5nQnl0ZXMgPSBpbnggLSAoaW5wdXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhZGRpbmdCeXRlcykge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxhc3QgMiBjaGFyYWN0ZXJzIHRvIHBhZGRpbmcgY2hhclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbM10gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCBjaGFyYWN0ZXIgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBObyBwYWRkaW5nIC0gcHJvY2VlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb3cgd2Ugd2lsbCBncmFiIGVhY2ggYXBwcm9wcmlhdGUgY2hhcmFjdGVyIG91dCBvZiBvdXIga2V5c3RyaW5nXG4gICAgICAgICAgICAvLyBiYXNlZCBvbiBvdXIgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCBpdCB0byB0aGUgb3V0cHV0IHN0cmluZ1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBlbmNvZGVkQ2hhckluZGV4ZXMubGVuZ3RoOyBqbngrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSB0aGlzLl9rZXlTdHIuY2hhckF0KGVuY29kZWRDaGFySW5kZXhlc1tqbnhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vTG9hZGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJlc291cmNlID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5taWRkbGV3YXJlID0ge1xuICAgIGNhY2hpbmc6IHtcbiAgICAgICAgbWVtb3J5OiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL2NhY2hpbmcvbWVtb3J5JylcbiAgICB9LFxuICAgIHBhcnNpbmc6IHtcbiAgICAgICAgYmxvYjogcmVxdWlyZSgnLi9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2InKVxuICAgIH1cbn07XG4iLCIvLyBhIHNpbXBsZSBpbi1tZW1vcnkgY2FjaGUgZm9yIHJlc291cmNlc1xudmFyIGNhY2hlID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgLy8gaWYgY2FjaGVkLCB0aGVuIHNldCBkYXRhIGFuZCBjb21wbGV0ZSB0aGUgcmVzb3VyY2VcbiAgICAgICAgaWYgKGNhY2hlW3Jlc291cmNlLnVybF0pIHtcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBjYWNoZVtyZXNvdXJjZS51cmxdO1xuICAgICAgICAgICAgcmVzb3VyY2UuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBub3QgY2FjaGVkLCB3YWl0IGZvciBjb21wbGV0ZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlLm9uY2UoJ2NvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgY2FjaGVbdGhpcy51cmxdID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJy4uLy4uL1Jlc291cmNlJyksXG4gICAgYjY0ID0gcmVxdWlyZSgnLi4vLi4vYjY0Jyk7XG5cbndpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cbi8vIGEgbWlkZGxld2FyZSBmb3IgdHJhbnNmb3JtaW5nIFhIUiBsb2FkZWQgQmxvYnMgaW50byBtb3JlIHVzZWZ1bCBvYmplY3RzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgYW4gWEhSIGxvYWQgb2YgYSBibG9iXG4gICAgICAgIGlmIChyZXNvdXJjZS54aHIgJiYgcmVzb3VyY2UueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQikge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYmxvYiBzdXBwb3J0IHdlIHByb2JhYmx5IGdvdCBhIGJpbmFyeSBzdHJpbmcgYmFja1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuQmxvYiB8fCB0eXBlb2YgcmVzb3VyY2UuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlc291cmNlLnhoci5nZXRSZXNwb25zZUhlYWRlcignY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGltYWdlLCBjb252ZXJ0IHRoZSBiaW5hcnkgc3RyaW5nIGludG8gYSBkYXRhIHVybFxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIHR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gJ2RhdGE6JyArIHR5cGUgKyAnO2Jhc2U2NCwnICsgYjY0LmVuY29kZUJpbmFyeShyZXNvdXJjZS54aHIucmVzcG9uc2VUZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5pc0ltYWdlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IHVudGlsIHRoZSBpbWFnZSBsb2FkcyBhbmQgdGhlbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnQgdHlwZSBzYXlzIHRoaXMgaXMgYW4gaW1hZ2UsIHRoZW4gd2Ugc2hvdWxkIHRyYW5zZm9ybSB0aGUgYmxvYiBpbnRvIGFuIEltYWdlIG9iamVjdFxuICAgICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UuZGF0YS50eXBlLmluZGV4T2YoJ2ltYWdlJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXNvdXJjZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmJsb2IgPSByZXNvdXJjZS5kYXRhO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLnNyYyA9IHNyYztcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCB0aGUgbm8gbG9uZ2VyIHVzZWQgYmxvYiBhZnRlciB0aGUgaW1hZ2UgbG9hZHNcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChzcmMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwicGl4aS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIzLjAuMTAtZGV2XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJQaXhpLmpzIGlzIGEgZmFzdCBsaWdodHdlaWdodCAyRCBsaWJyYXJ5IHRoYXQgd29ya3MgYWNyb3NzIGFsbCBkZXZpY2VzLlwiLFxuICBcImF1dGhvclwiOiBcIk1hdCBHcm92ZXNcIixcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIFwiQ2hhZCBFbmdsZXIgPGNoYWRAcGFudGhlcmRldi5jb20+XCIsXG4gICAgXCJSaWNoYXJkIERhdmV5IDxyZGF2ZXlAZ21haWwuY29tPlwiXG4gIF0sXG4gIFwibWFpblwiOiBcIi4vc3JjL2luZGV4LmpzXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ29vZGJveWRpZ2l0YWwuY29tL1wiLFxuICBcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzXCIsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJzdGFydFwiOiBcImd1bHAgJiYgZ3VscCB3YXRjaFwiLFxuICAgIFwidGVzdFwiOiBcImd1bHAgJiYgdGVzdGVtIGNpXCIsXG4gICAgXCJidWlsZFwiOiBcImd1bHBcIixcbiAgICBcImRvY3NcIjogXCJqc2RvYyAtYyAuL2d1bHAvdXRpbC9qc2RvYy5jb25mLmpzb24gLVIgUkVBRE1FLm1kXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW4vXCIsXG4gICAgXCJzcmMvXCIsXG4gICAgXCJDT05UUklCVVRJTkcubWRcIixcbiAgICBcIkxJQ0VOU0VcIixcbiAgICBcInBhY2thZ2UuanNvblwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYXN5bmNcIjogXCJeMS41LjBcIixcbiAgICBcImJyZnNcIjogXCJeMS40LjFcIixcbiAgICBcImVhcmN1dFwiOiBcIl4yLjAuN1wiLFxuICAgIFwiZXZlbnRlbWl0dGVyM1wiOiBcIl4xLjEuMVwiLFxuICAgIFwiZ2wtbWF0cml4XCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS90b2ppL2dsLW1hdHJpeC5naXRcIixcbiAgICBcIm9iamVjdC1hc3NpZ25cIjogXCJeNC4wLjFcIixcbiAgICBcInBpeGktZ2wtY29yZVwiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vR29vZEJveURpZ2l0YWwvcGl4aS1nbC1jb3JlLmdpdFwiLFxuICAgIFwicmVzb3VyY2UtbG9hZGVyXCI6IFwiXjEuNi40XCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYnJvd3NlcmlmeVwiOiBcIl4xMS4xLjBcIixcbiAgICBcImNoYWlcIjogXCJeMy4yLjBcIixcbiAgICBcImRlbFwiOiBcIl4yLjAuMlwiLFxuICAgIFwiZ3VscFwiOiBcIl4zLjkuMFwiLFxuICAgIFwiZ3VscC1jYWNoZWRcIjogXCJeMS4xLjBcIixcbiAgICBcImd1bHAtY29uY2F0XCI6IFwiXjIuNi4wXCIsXG4gICAgXCJndWxwLWRlYnVnXCI6IFwiXjIuMS4wXCIsXG4gICAgXCJndWxwLWhlYWRlclwiOiBcIl4xLjcuMVwiLFxuICAgIFwiZ3VscC1qc2hpbnRcIjogXCJeMS4xMS4yXCIsXG4gICAgXCJndWxwLW1pcnJvclwiOiBcIl4wLjQuMFwiLFxuICAgIFwiZ3VscC1wbHVtYmVyXCI6IFwiXjEuMC4xXCIsXG4gICAgXCJndWxwLXJlbmFtZVwiOiBcIl4xLjIuMlwiLFxuICAgIFwiZ3VscC1zb3VyY2VtYXBzXCI6IFwiXjEuNS4yXCIsXG4gICAgXCJndWxwLXVnbGlmeVwiOiBcIl4xLjQuMVwiLFxuICAgIFwiZ3VscC11dGlsXCI6IFwiXjMuMC42XCIsXG4gICAgXCJqYWd1YXJqcy1qc2RvY1wiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vZGF2aWRzaGltanMvamFndWFyanMtanNkb2MuZ2l0XCIsXG4gICAgXCJqc2RvY1wiOiBcIl4zLjMuMlwiLFxuICAgIFwianNoaW50LXN1bW1hcnlcIjogXCJeMC40LjBcIixcbiAgICBcIm1pbmltaXN0XCI6IFwiXjEuMi4wXCIsXG4gICAgXCJtb2NoYVwiOiBcIl4yLjMuMlwiLFxuICAgIFwicmVxdWlyZS1kaXJcIjogXCJeMC4zLjBcIixcbiAgICBcInJ1bi1zZXF1ZW5jZVwiOiBcIl4xLjEuMlwiLFxuICAgIFwidGVzdGVtXCI6IFwiXjAuOS40XCIsXG4gICAgXCJ2aW55bC1idWZmZXJcIjogXCJeMS4wLjBcIixcbiAgICBcInZpbnlsLXNvdXJjZS1zdHJlYW1cIjogXCJeMS4xLjBcIixcbiAgICBcIndhdGNoaWZ5XCI6IFwiXjMuNC4wXCJcbiAgfSxcbiAgXCJicm93c2VyaWZ5XCI6IHtcbiAgICBcInRyYW5zZm9ybVwiOiBbXG4gICAgICBcImJyZnNcIlxuICAgIF1cbiAgfVxufVxuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8vIGFkZCBzb21lIGV4dHJhIHZhcmlhYmxlcyB0byB0aGUgY29udGFpbmVyLi5cbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKVxuKTtcblxuXG4vKipcbiAqIFRoZSBBY2Nlc3NpYmlsaXR5IG1hbmFnZXIgcmVhY3JlYXRlcyB0aGUgYWJpbGl0eSB0byB0YWIgYW5kIGFuZCBoYXZlIGNvbnRlbnQgcmVhZCBieSBzY3JlZW4gcmVhZGVycy4gVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCBhcyBpdCBjYW4gcG9zc2libHkgaGVscCBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMgYWNjZXNzIHBpeGkgY29udGVudC5cbiAqIE11Y2ggbGlrZSBpbnRlcmFjdGlvbiBhbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgbWFkZSBhY2Nlc3NpYmxlLiBUaGlzIG1hbmFnZXIgd2lsbCBtYXAgdGhlIGV2ZW50cyBhcyBpZiB0aGUgbW91c2Ugd2FzIGJlaW5nIHVzZWQsIG1pbmltaXppbmcgdGhlIGVmZmVyb3QgcmVxdWlyZWQgdG8gaW1wbGVtZW50LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyXG4gKi9cbmZ1bmN0aW9uIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKHJlbmRlcmVyKVxue1xuXHQvLyBmaXJzdCB3ZSBjcmVhdGUgYSBkaXYgdGhhdCB3aWxsIHNpdCBvdmVyIHRoZSBwaXhpIGVsZW1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGRpdiBvdmVybGF5cyB3aWxsIGdvLlxuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBcbiAgICBkaXYuc3R5bGUud2lkdGggPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgZGl2LnN0eWxlLnRvcCA9IDA7XG4gICAgZGl2LnN0eWxlLmxlZnQgPSAwO1xuICAgLy9cbiAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcbiAgIFx0XG4gICBcdC8qKlxuICAgXHQgKiBUaGlzIGlzIHRoZSBkb20gZWxlbWVudCB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuICAgXHR0aGlzLmRpdiA9IGRpdjtcblxuICAgXHQvKipcbiAgIFx0ICogQSBzaW1wbGUgcG9vbCBmb3Igc3RvcmluZyBkaXZzLlxuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0FycmF5fVxuICAgXHQgKiBAcHJpdmF0ZVxuICAgXHQgKi9cbiBcdHRoaXMucG9vbCA9IFtdO1xuXG4gXHQvKipcbiBcdCAqIFRoaXMgaXMgYSB0aWNrIHVzZWQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIG5vIGxvbmdlciBiZWluZyByZW5kZXJlZC5cbiBcdCAqIFxuIFx0ICogQHR5cGUge051bWJlcn1cbiBcdCAqIEBwcml2YXRlXG4gXHQgKi9cbiAgIFx0dGhpcy5yZW5kZXJJZCA9IDA7XG5cbiAgIFx0LyoqXG4gICBcdCAqIFNldHRpbmcgdGhpcyB0byB0cnVlIHdpbGwgdmlzdWFsbHkgc2hvdyB0aGUgZGl2c1xuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0Jvb2xlYW59XG4gICBcdCAqL1xuICAgXHR0aGlzLmRlYnVnID0gZmFsc2U7XG5cbiAgXHQvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBhY2Nlc3NpYmlsaXR5IG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgIFx0dGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICBcdC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjdXJyZW50bHkgYWN0aXZlIGFjY2Vzc2libGUgaXRlbXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgXHR0aGlzLmNoaWxkcmVuID0gW107XG4gICBcdFxuICAgXHQvKipcbiAgICAgKiBwcmUgYmluZCB0aGUgZnVuY3Rpb25zLi5cbiAgICAgKi9cbiAgIFx0dGhpcy5fb25LZXlEb3duID0gdGhpcy5fb25LZXlEb3duLmJpbmQodGhpcyk7XG4gICBcdHRoaXMuX29uTW91c2VNb3ZlID0gdGhpcy5fb25Nb3VzZU1vdmUuYmluZCh0aGlzKTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHN0b3JlcyB0aGUgc3RhdGUgb2YgdGhlIG1hbmFnZXIuIElmIHRoZXJlIGFyZSBubyBhY2Nlc3NpYmxlIG9iamVjdHMgb3IgdGhlIG1vdXNlIGlzIG1vdmluZyB0aGUgd2lsbCBiZSBmYWxzZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcblxuXG4gICBcdC8vIGxldCBsaXN0ZW4gZm9yIHRhYi4uIG9uY2UgcHJlc3NlZCB3ZSBjYW4gZmlyZSB1cCBhbmQgc2hvdyB0aGUgYWNjZXNzaWJpbGl0eSBsYXllclxuICAgXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xufVxuXG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBBY2Nlc3NpYmlsaXR5TWFuYWdlcjtcblxuLyoqXG4gKiBBY3RpdmF0aW5nIHdpbGwgY2F1c2UgdGhlIEFjY2Vzc2liaWxpdHkgbGF5ZXIgdG8gYmUgc2hvd24uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIHByZXNlcyB0aGUgdGFiIGtleVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IHRydWU7XG5cblx0d2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCB0cnVlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9uKCdwb3N0cmVuZGVyJywgdGhpcy51cGRhdGUsIHRoaXMpO1xuXG5cdHRoaXMucmVuZGVyZXIudmlldy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuZGl2KTtcdFxufTtcblxuLyoqXG4gKiBEZWFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBoaWRkZW4uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIG1vdmVzIHRoZSBtb3VzZVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmRlYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKCF0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG5cblx0dGhpcy5yZW5kZXJlci5vZmYoJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSk7XG5cblx0dGhpcy5kaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmRpdik7XG5cbn07XG5cbi8qKlxuICogVGhpcyByZWN1cnNpdmUgZnVuY3Rpb24gd2lsbCBydW4gdGhyb3VnaHQgaGUgc2NlbmUgZ3JhcGggYW5kIGFkZCBhbnkgbmV3IGFjY2Vzc2libGUgb2JqZWN0cyB0byB0aGUgRE9NIGxheWVyLlxuICogQHBhcmFtIGVsZW1lbnQge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIERpc3BsYXlPYmplY3QgdG8gY2hlY2suXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlQWNjZXNzaWJsZU9iamVjdHMgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuXHRpZighZGlzcGxheU9iamVjdC52aXNpYmxlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYoZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlICYmIGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG5cdHtcblx0XHRpZighZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZUFjdGl2ZSlcblx0XHR7XG5cdFx0XHR0aGlzLmFkZENoaWxkKGRpc3BsYXlPYmplY3QpO1xuXHRcdH1cblx0ICAgXHRcblx0ICAgXHRkaXNwbGF5T2JqZWN0LnJlbmRlcklkID0gdGhpcy5yZW5kZXJJZDtcblx0fVxuXG5cdHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG5cblx0Zm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XG5cdFx0dGhpcy51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyhjaGlsZHJlbltpXSk7XG5cdH1cbn07XG5cblxuLyoqXG4gKiBCZWZvcmUgZWFjaCByZW5kZXIgdGhpcyBmdW5jdGlvbiB3aWxsIGVuc3VyZSB0aGF0IGFsbCBkaXZzIGFyZSBtYXBwZWQgY29ycmVjdGx5IHRvIHRoZWlyIERpc3BsYXlPYmplY3RzXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oKVxue1xuXG5cdC8vIHVwZGF0ZSBjaGlsZHJlbi4uLlxuXHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCk7XG5cblx0dmFyIHJlY3QgPSB0aGlzLnJlbmRlcmVyLnZpZXcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdHZhciBzeCA9IHJlY3Qud2lkdGggIC8gdGhpcy5yZW5kZXJlci53aWR0aDtcblx0dmFyIHN5ID0gcmVjdC5oZWlnaHQgLyB0aGlzLnJlbmRlcmVyLmhlaWdodDtcblxuXHR2YXIgZGl2ID0gdGhpcy5kaXY7XG5cblx0ZGl2LnN0eWxlLmxlZnQgPSByZWN0LmxlZnQgKyAncHgnO1xuXHRkaXYuc3R5bGUudG9wID0gcmVjdC50b3AgKyAncHgnO1xuXHRkaXYuc3R5bGUud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoICsgJ3B4Jztcblx0ZGl2LnN0eWxlLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0ICsgJ3B4JztcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblxuXHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cblx0XHRpZihjaGlsZC5yZW5kZXJJZCAhPT0gdGhpcy5yZW5kZXJJZClcblx0XHR7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGksIDEpO1xuXHRcdFx0dGhpcy5kaXYucmVtb3ZlQ2hpbGQoIGNoaWxkLl9hY2Nlc3NpYmxlRGl2ICk7XG5cdFx0XHR0aGlzLnBvb2wucHVzaChjaGlsZC5fYWNjZXNzaWJsZURpdik7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZURpdiA9IG51bGw7XG5cblx0XHRcdGktLTtcblxuXHRcdFx0aWYodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0Ly8gbWFwIGRpdiB0byBkaXNwbGF5Li5cblx0XHRcdGRpdiA9IGNoaWxkLl9hY2Nlc3NpYmxlRGl2O1xuXHRcdFx0dmFyIGhpdEFyZWEgPSBjaGlsZC5oaXRBcmVhO1xuXHRcdFx0dmFyIHd0ID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cblx0XHRcdGlmKGNoaWxkLmhpdEFyZWEpXG5cdFx0XHR7XG5cdFx0XHRcdGRpdi5zdHlsZS5sZWZ0ID0gKCh3dC50eCArIChoaXRBcmVhLnggKiB3dC5hKSkgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gICgod3QudHkgKyAoaGl0QXJlYS55ICogd3QuZCkpICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiB3dC5hICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLmhlaWdodCA9IChoaXRBcmVhLmhlaWdodCAqIHd0LmQgKiBzeSkgKyAncHgnO1xuXHRcdFx0XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdGhpdEFyZWEgPSBjaGlsZC5nZXRCb3VuZHMoKTtcblxuXHRcdFx0XHR0aGlzLmNhcEhpdEFyZWEoaGl0QXJlYSk7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoaGl0QXJlYS54ICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLnRvcCA9ICAoaGl0QXJlYS55ICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogc3kpICsgJ3B4Jztcblx0XHRcdH1cdFx0XG5cdFx0fVxuXHR9XG5cblx0Ly8gaW5jcmVtZW50IHRoZSByZW5kZXIgaWQuLlxuXHR0aGlzLnJlbmRlcklkKys7XG59O1xuXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuY2FwSGl0QXJlYSA9IGZ1bmN0aW9uIChoaXRBcmVhKVxue1xuICAgIGlmIChoaXRBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS53aWR0aCArPSBoaXRBcmVhLng7XG4gICAgICAgIGhpdEFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGhpdEFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCArPSBoaXRBcmVhLnk7XG4gICAgICAgIGhpdEFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBoaXRBcmVhLnggKyBoaXRBcmVhLndpZHRoID4gdGhpcy5yZW5kZXJlci53aWR0aCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoID0gdGhpcy5yZW5kZXJlci53aWR0aCAtIGhpdEFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueSArIGhpdEFyZWEuaGVpZ2h0ID4gdGhpcy5yZW5kZXJlci5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmhlaWdodCAtIGhpdEFyZWEueTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogQWRkcyBhIERpc3BsYXlPYmplY3QgdG8gdGhlIGFjY2Vzc2liaWxpdHkgbWFuYWdlclxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24oZGlzcGxheU9iamVjdClcbntcbi8vXHR0aGlzLmFjdGl2YXRlKCk7XG5cdFxuXHR2YXIgZGl2ID0gdGhpcy5wb29sLnBvcCgpO1xuXG5cdGlmKCFkaXYpXG5cdHtcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgXG5cblx0ICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG5cdCAgICBkaXYuc3R5bGUuaGVpZ2h0ID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmRlYnVnID8gJ3JnYmEoMjU1LDAsMCwwLjUpJyA6ICd0cmFuc3BhcmVudCc7XG5cdCAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXHQgICAgZGl2LnN0eWxlLnpJbmRleCA9IDI7XG5cdCAgICBkaXYuc3R5bGUuYm9yZGVyU3R5bGUgPSAnbm9uZSc7XG5cblx0ICAgIFxuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGljay5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKSk7XG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCB0aGlzLl9vbkZvY3VzT3V0LmJpbmQodGhpcykpO1xuXHR9XG5cdCAgIFx0XG5cblxuXG5cdGRpdi50aXRsZSA9IGRpc3BsYXlPYmplY3QuYWNjZXNzaWJsZVRpdGxlIHx8ICdkaXNwbGF5T2JqZWN0ICcgKyB0aGlzLnRhYkluZGV4O1xuXG5cdC8vXG5cdFxuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlID0gdHJ1ZTtcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiA9IGRpdjtcblx0ZGl2LmRpc3BsYXlPYmplY3QgPSBkaXNwbGF5T2JqZWN0O1xuXG5cblx0dGhpcy5jaGlsZHJlbi5wdXNoKGRpc3BsYXlPYmplY3QpO1xuXHR0aGlzLmRpdi5hcHBlbmRDaGlsZCggZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiApO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2LnRhYkluZGV4ID0gZGlzcGxheU9iamVjdC50YWJJbmRleDtcbn07XG5cblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgYnV0dG9uIHByZXNzIHRvIHBpeGkncyBJbnRlcmFjdGlvbk1hbmFnZXIgKGNsaWNrKVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkNsaWNrID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ2NsaWNrJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW92ZXIpXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uRm9jdXMgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW91dClcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1c091dCA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIGtleSBpcyBwcmVzc2VkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbktleURvd24gPSBmdW5jdGlvbihlKVxue1xuXHRpZihlLmtleUNvZGUgIT09IDkpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmFjdGl2YXRlKCk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uTW91c2VNb3ZlID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmRlYWN0aXZhdGUoKTtcbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKlxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIFxue1xuXHR0aGlzLmRpdiA9IG51bGw7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHR7XG5cdFx0dGhpcy5jaGlsZHJlbltpXS5kaXYgPSBudWxsO1xuXHR9XG5cblx0XG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duKTtcblx0XHRcblx0dGhpcy5wb29sID0gbnVsbDtcblx0dGhpcy5jaGlsZHJlbiA9IG51bGw7XG5cdHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdhY2Nlc3NpYmlsaXR5JywgQWNjZXNzaWJpbGl0eU1hbmFnZXIpO1xuXG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGFjY2Vzc2libGUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlNYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5hY2Nlc3NpYmlsaXR5LmFjY2Vzc2libGVUYXJnZXRcbiAqICAgICAgKTtcbiAqL1xudmFyIGFjY2Vzc2libGVUYXJnZXQgPSB7XG4gICAgXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlOmZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlVGl0bGU6bnVsbCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgdGFiSW5kZXg6MCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVBY3RpdmU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIF9hY2Nlc3NpYmxlRGl2OmZhbHNlXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYWNjZXNzaWJsZVRhcmdldDtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGFjY2Vzc2liaWxpdHkgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGFjY2Vzc2libGVUYXJnZXQ6ICAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKSxcbiAgICBBY2Nlc3NpYmlsaXR5TWFuYWdlcjogcmVxdWlyZSgnLi9BY2Nlc3NpYmlsaXR5TWFuYWdlcicpXG59O1xuIiwiLyoqXG4gKiBDb25zdGFudCB2YWx1ZXMgdXNlZCBpbiBwaXhpXG4gKlxuICogQGxlbmRzIFBJWElcbiAqL1xudmFyIENPTlNUID0ge1xuICAgIC8qKlxuICAgICAqIFN0cmluZyBvZiB0aGUgY3VycmVudCBQSVhJIHZlcnNpb25cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gVkVSU0lPTlxuICAgICAqL1xuICAgIFZFUlNJT046IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb24sXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUElfMiAtIFR3byBQaVxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBQSV8yOiBNYXRoLlBJICogMixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSQURfVE9fREVHIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgcmFkaWFucyB0byBkZWdyZWVzXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFJBRF9UT19ERUc6IDE4MCAvIE1hdGguUEksXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge051bWJlcn0gREVHX1RPX1JBRCAtIENvbnN0YW50IGNvbnZlcnNpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIGRlZ3JlZXMgdG8gcmFkaWFuc1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBERUdfVE9fUkFEOiBNYXRoLlBJIC8gMTgwLFxuXG4gICAgLyoqXG4gICAgICogVGFyZ2V0IGZyYW1lcyBwZXIgbWlsbGlzZWNvbmQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFRBUkdFVF9GUE1TPTAuMDZcbiAgICAgKi9cbiAgICBUQVJHRVRfRlBNUzogMC4wNixcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IHRvIGlkZW50aWZ5IHRoZSBSZW5kZXJlciBUeXBlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBSRU5ERVJFUl9UWVBFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuVU5LTk9XTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLldFQkdMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuQ0FOVkFTXG4gICAgICovXG4gICAgUkVOREVSRVJfVFlQRToge1xuICAgICAgICBVTktOT1dOOiAgICAwLFxuICAgICAgICBXRUJHTDogICAgICAxLFxuICAgICAgICBDQU5WQVM6ICAgICAyXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFZhcmlvdXMgYmxlbmQgbW9kZXMgc3VwcG9ydGVkIGJ5IFBJWEkuIElNUE9SVEFOVCAtIFRoZSBXZWJHTCByZW5kZXJlciBvbmx5IHN1cHBvcnRzXG4gICAgICogdGhlIE5PUk1BTCwgQURELCBNVUxUSVBMWSBhbmQgU0NSRUVOIGJsZW5kIG1vZGVzLiBBbnl0aGluZyBlbHNlIHdpbGwgc2lsZW50bHkgYWN0IGxpa2VcbiAgICAgKiBOT1JNQUwuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IEJMRU5EX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5BRERcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTVVMVElQTFlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0NSRUVOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk9WRVJMQVlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuREFSS0VOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkxJR0hURU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfQlVSTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IQVJEX0xJR0hUXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNPRlRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuRElGRkVSRU5DRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5FWENMVVNJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuSFVFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNBVFVSQVRJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTFVNSU5PU0lUWVxuICAgICAqL1xuICAgIEJMRU5EX01PREVTOiB7XG4gICAgICAgIE5PUk1BTDogICAgICAgICAwLFxuICAgICAgICBBREQ6ICAgICAgICAgICAgMSxcbiAgICAgICAgTVVMVElQTFk6ICAgICAgIDIsXG4gICAgICAgIFNDUkVFTjogICAgICAgICAzLFxuICAgICAgICBPVkVSTEFZOiAgICAgICAgNCxcbiAgICAgICAgREFSS0VOOiAgICAgICAgIDUsXG4gICAgICAgIExJR0hURU46ICAgICAgICA2LFxuICAgICAgICBDT0xPUl9ET0RHRTogICAgNyxcbiAgICAgICAgQ09MT1JfQlVSTjogICAgIDgsXG4gICAgICAgIEhBUkRfTElHSFQ6ICAgICA5LFxuICAgICAgICBTT0ZUX0xJR0hUOiAgICAgMTAsXG4gICAgICAgIERJRkZFUkVOQ0U6ICAgICAxMSxcbiAgICAgICAgRVhDTFVTSU9OOiAgICAgIDEyLFxuICAgICAgICBIVUU6ICAgICAgICAgICAgMTMsXG4gICAgICAgIFNBVFVSQVRJT046ICAgICAxNCxcbiAgICAgICAgQ09MT1I6ICAgICAgICAgIDE1LFxuICAgICAgICBMVU1JTk9TSVRZOiAgICAgMTZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyB3ZWJnbCBkcmF3IG1vZGVzLiBUaGVzZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIEdMIGRyYXdNb2RlIHRvIHVzZVxuICAgICAqIHVuZGVyIGNlcnRhaW4gc2l0dWF0aW9ucyBhbmQgcmVuZGVyZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBEUkFXX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuUE9JTlRTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX0xPT1BcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX1NUUklQXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9GQU5cbiAgICAgKi9cbiAgICBEUkFXX01PREVTOiB7XG4gICAgICAgIFBPSU5UUzogICAgICAgICAwLFxuICAgICAgICBMSU5FUzogICAgICAgICAgMSxcbiAgICAgICAgTElORV9MT09QOiAgICAgIDIsXG4gICAgICAgIExJTkVfU1RSSVA6ICAgICAzLFxuICAgICAgICBUUklBTkdMRVM6ICAgICAgNCxcbiAgICAgICAgVFJJQU5HTEVfU1RSSVA6IDUsXG4gICAgICAgIFRSSUFOR0xFX0ZBTjogICA2XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgcGl4aS5cbiAgICAgKlxuICAgICAqIFRoZSBERUZBVUxUIHNjYWxlIG1vZGUgYWZmZWN0cyB0aGUgZGVmYXVsdCBzY2FsaW5nIG1vZGUgb2YgZnV0dXJlIG9wZXJhdGlvbnMuXG4gICAgICogSXQgY2FuIGJlIHJlLWFzc2lnbmVkIHRvIGVpdGhlciBMSU5FQVIgb3IgTkVBUkVTVCwgZGVwZW5kaW5nIHVwb24gc3VpdGFiaWxpdHkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNDQUxFX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkRFRkFVTFQ9TElORUFSXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkxJTkVBUiBTbW9vdGggc2NhbGluZ1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5ORUFSRVNUIFBpeGVsYXRpbmcgc2NhbGluZ1xuICAgICAqL1xuICAgIFNDQUxFX01PREVTOiB7XG4gICAgICAgIERFRkFVTFQ6ICAgIDAsXG4gICAgICAgIExJTkVBUjogICAgIDAsXG4gICAgICAgIE5FQVJFU1Q6ICAgIDFcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHByZWZpeCB0aGF0IGRlbm90ZXMgYSBVUkwgaXMgZm9yIGEgcmV0aW5hIGFzc2V0XG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFJFVElOQV9QUkVGSVhcbiAgICAgKi9cbiAgICAvL2V4YW1wbGU6ICdAMngnLFxuICAgIFJFVElOQV9QUkVGSVg6IC9AKC4rKXgvLFxuXG4gICAgUkVTT0xVVElPTjoxLFxuXG4gICAgRklMVEVSX1JFU09MVVRJT046MSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHJlbmRlciBvcHRpb25zIGlmIG5vbmUgYXJlIHN1cHBsaWVkIHRvIHtAbGluayBQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICogb3Ige0BsaW5rIFBJWEkuQ2FudmFzUmVuZGVyZXJ9LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TXG4gICAgICogQHByb3BlcnR5IHtIVE1MQ2FudmFzRWxlbWVudH0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy52aWV3PW51bGxcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMudHJhbnNwYXJlbnQ9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuYW50aWFsaWFzPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmZvcmNlRlhBQT1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5yZXNvbHV0aW9uPTFcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hdXRvUmVzaXplPWZhbHNlXG4gICAgICovXG4gICAgREVGQVVMVF9SRU5ERVJfT1BUSU9OUzoge1xuICAgICAgICB2aWV3OiBudWxsLFxuICAgICAgICByZXNvbHV0aW9uOiAxLFxuICAgICAgICBhbnRpYWxpYXM6IGZhbHNlLFxuICAgICAgICBmb3JjZUZYQUE6IGZhbHNlLFxuICAgICAgICBhdXRvUmVzaXplOiBmYWxzZSxcbiAgICAgICAgdHJhbnNwYXJlbnQ6IGZhbHNlLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IDB4MDAwMDAwLFxuICAgICAgICBjbGVhckJlZm9yZVJlbmRlcjogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBmYWxzZSxcbiAgICAgICAgcm91bmRQaXhlbHM6IGZhbHNlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50cyB0aGF0IGlkZW50aWZ5IHNoYXBlcywgbWFpbmx5IHRvIHByZXZlbnQgYGluc3RhbmNlb2ZgIGNhbGxzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVNcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlBPTFk9MFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUkVDVD0xXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5DSVJDPTJcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkVMSVA9M1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUlJFQz00XG4gICAgICovXG4gICAgU0hBUEVTOiB7XG4gICAgICAgIFBPTFk6IDAsXG4gICAgICAgIFJFQ1Q6IDEsXG4gICAgICAgIENJUkM6IDIsXG4gICAgICAgIEVMSVA6IDMsXG4gICAgICAgIFJSRUM6IDRcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogbWF5YmUgY2hhbmdlIHRvIFNQUklURS5CQVRDSF9TSVpFOiAyMDAwXG4gICAgLy8gVE9ETzogbWF5YmUgYWRkIFBBUlRJQ0xFLkJBVENIX1NJWkU6IDE1MDAwXG4gICAgU1BSSVRFX0JBVENIX1NJWkU6IDIwMDAgLy9uaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgYW5kIGRlc2t0b3AgbWFjaGluZXNcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ09OU1Q7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgRGlzcGxheU9iamVjdCA9IHJlcXVpcmUoJy4vRGlzcGxheU9iamVjdCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIENvbnRhaW5lciByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBkaXNwbGF5IG9iamVjdHMuXG4gKiBJdCBpcyB0aGUgYmFzZSBjbGFzcyBvZiBhbGwgZGlzcGxheSBvYmplY3RzIHRoYXQgYWN0IGFzIGEgY29udGFpbmVyIGZvciBvdGhlciBvYmplY3RzLlxuICpcbiAqYGBganNcbiAqIHZhciBjb250YWluZXIgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogYGBgXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuRGlzcGxheU9iamVjdFxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ29udGFpbmVyKClcbntcbiAgICBEaXNwbGF5T2JqZWN0LmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3RbXX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5Db250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSk7XG5Db250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb250YWluZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnRhaW5lci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG5cbiAgICAgICAgICAgIGlmICh3aWR0aCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IDE7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmIChoZWlnaHQgIT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyBoZWlnaHQgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogT3ZlcnJpZGFibGUgbWV0aG9kIHRoYXQgY2FuIGJlIHVzZWQgYnkgQ29udGFpbmVyIHN1YmNsYXNzZXMgd2hlbmV2ZXIgdGhlIGNoaWxkcmVuIGFycmF5IGlzIG1vZGlmaWVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5vbkNoaWxkcmVuQ2hhbmdlID0gZnVuY3Rpb24gKCkge307XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIuXG4gKiBcbiAqIFlvdSBjYW4gYWxzbyBhZGQgbXVsdHBsZSBpdGVtcyBsaWtlIHNvOiBteUNvbnRhaW5lci5hZGRDaGlsZCh0aGlua09uZSwgdGhpbmdUd28sIHRoaW5nVGhyZWUpXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gYWRkIHRvIHRoZSBjb250YWluZXJcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxueyBcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IHdlIGNhbiBieXBhc3MgbG9vcGluZyB0aHJvdWdoIHRoZSB0aGVtXG4gICAgaWYoYXJndW1lbnRzTGVuZ3RoID4gMSlcbiAgICB7XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgYXJndW1lbnRzIHByb3BlcnR5IGFuZCBhZGQgYWxsIGNoaWxkcmVuXG4gICAgICAgIC8vIHVzZSBpdCB0aGUgcmlnaHQgd2F5ICgubGVuZ3RoIGFuZCBbaV0pIHNvIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc3RpbGwgYmUgb3B0aW1pc2VkIGJ5IEpTIHJ1bnRpbWVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoIGFyZ3VtZW50c1tpXSApO1xuICAgICAgICB9XG4gICAgfSAgICAgXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIGNoaWxkIGhhcyBhIHBhcmVudCB0aGVuIGxldHMgcmVtb3ZlIGl0IGFzIFBpeGkgb2JqZWN0cyBjYW4gb25seSBleGlzdCBpbiBvbmUgcGxhY2VcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKHRoaXMuY2hpbGRyZW4ubGVuZ3RoLTEpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIgYXQgYSBzcGVjaWZpZWQgaW5kZXguIElmIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0byBhZGRcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gcGxhY2UgdGhlIGNoaWxkIGluXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyBhZGRlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5hZGRDaGlsZEF0ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuXG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNoaWxkICsgJ2FkZENoaWxkQXQ6IFRoZSBpbmRleCAnKyBpbmRleCArJyBzdXBwbGllZCBpcyBvdXQgb2YgYm91bmRzICcgKyB0aGlzLmNoaWxkcmVuLmxlbmd0aCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBTd2FwcyB0aGUgcG9zaXRpb24gb2YgMiBEaXNwbGF5IE9iamVjdHMgd2l0aGluIHRoaXMgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGNoaWxkMiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnN3YXBDaGlsZHJlbiA9IGZ1bmN0aW9uIChjaGlsZCwgY2hpbGQyKVxue1xuICAgIGlmIChjaGlsZCA9PT0gY2hpbGQyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbmRleDEgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuICAgIHZhciBpbmRleDIgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQyKTtcblxuICAgIGlmIChpbmRleDEgPCAwIHx8IGluZGV4MiA8IDApXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N3YXBDaGlsZHJlbjogQm90aCB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdHMgbXVzdCBiZSBjaGlsZHJlbiBvZiB0aGUgY2FsbGVyLicpO1xuICAgIH1cblxuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgxXSA9IGNoaWxkMjtcbiAgICB0aGlzLmNoaWxkcmVuW2luZGV4Ml0gPSBjaGlsZDtcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgxIDwgaW5kZXgyID8gaW5kZXgxIDogaW5kZXgyKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW5kZXggcG9zaXRpb24gb2YgYSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIHRvIGlkZW50aWZ5XG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3QgdG8gaWRlbnRpZnlcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBtdXN0IGJlIGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgcG9zaXRpb24gb2YgYW4gZXhpc3RpbmcgY2hpbGQgaW4gdGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgRGlzcGxheU9iamVjdCBpbnN0YW5jZSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBpbmRleCBudW1iZXJcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgcmVzdWx0aW5nIGluZGV4IG51bWJlciBmb3IgdGhlIGNoaWxkIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc2V0Q2hpbGRJbmRleCA9IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN1cHBsaWVkIGluZGV4IGlzIG91dCBvZiBib3VuZHMnKTtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudEluZGV4ID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkKTtcblxuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGN1cnJlbnRJbmRleCwgMSk7IC8vIHJlbW92ZSBmcm9tIG9sZCBwb3NpdGlvblxuICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7IC8vYWRkIGF0IG5ldyBwb3NpdGlvblxuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNoaWxkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhcbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgYXRcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIGF0IHRoZSBnaXZlbiBpbmRleCwgaWYgYW55LlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkQXQgPSBmdW5jdGlvbiAoaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0Q2hpbGRBdDogU3VwcGxpZWQgaW5kZXggJyArIGluZGV4ICsgJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY2hpbGQgbGlzdCwgb3IgdGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3QgaXMgbm90IGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2luZGV4XTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVtb3ZlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyByZW1vdmVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuXG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYSBjaGlsZCBmcm9tIHRoZSBzcGVjaWZpZWQgaW5kZXggcG9zaXRpb24uXG4gKlxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBnZXQgdGhlIGNoaWxkIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICB2YXIgY2hpbGQgPSB0aGlzLmdldENoaWxkQXQoaW5kZXgpO1xuXG4gICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpbmRleCwgMSk7XG5cbiAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICBjaGlsZC5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGNoaWxkcmVuIGZyb20gdGhpcyBjb250YWluZXIgdGhhdCBhcmUgd2l0aGluIHRoZSBiZWdpbiBhbmQgZW5kIGluZGV4ZXMuXG4gKlxuICogQHBhcmFtIGJlZ2luSW5kZXgge251bWJlcn0gVGhlIGJlZ2lubmluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyAwLlxuICogQHBhcmFtIGVuZEluZGV4IHtudW1iZXJ9IFRoZSBlbmRpbmcgcG9zaXRpb24uIERlZmF1bHQgdmFsdWUgaXMgc2l6ZSBvZiB0aGUgY29udGFpbmVyLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkcmVuID0gZnVuY3Rpb24gKGJlZ2luSW5kZXgsIGVuZEluZGV4KVxue1xuICAgIHZhciBiZWdpbiA9IGJlZ2luSW5kZXggfHwgMDtcbiAgICB2YXIgZW5kID0gdHlwZW9mIGVuZEluZGV4ID09PSAnbnVtYmVyJyA/IGVuZEluZGV4IDogdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgdmFyIHJhbmdlID0gZW5kIC0gYmVnaW47XG4gICAgdmFyIHJlbW92ZWQsIGk7XG5cbiAgICBpZiAocmFuZ2UgPiAwICYmIHJhbmdlIDw9IGVuZClcbiAgICB7XG4gICAgICAgIHJlbW92ZWQgPSB0aGlzLmNoaWxkcmVuLnNwbGljZShiZWdpbiwgcmFuZ2UpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW1vdmVkW2ldLnBhcmVudCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoYmVnaW5JbmRleCk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0uZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbW92ZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJhbmdlID09PSAwICYmIHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigncmVtb3ZlQ2hpbGRyZW46IG51bWVyaWMgdmFsdWVzIGFyZSBvdXRzaWRlIHRoZSBhY2NlcHRhYmxlIHJhbmdlLicpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb24gYWxsIGNoaWxkcmVuIG9mIHRoaXMgY29udGFpbmVyIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0gPSBDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgQ29udGFpbmVyIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIGFsbCB2aXNpYmxlIGNoaWxkcmVuIGludG8gY29uc2lkZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE8gdGhlIGJvdW5kcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHRoaXMgcmVuZGVyIHNlc3Npb24gc28gcmV0dXJuIHdoYXQgd2UgaGF2ZVxuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBjaGlsZEJvdW5kcztcbiAgICAgICAgdmFyIGNoaWxkTWF4WDtcbiAgICAgICAgdmFyIGNoaWxkTWF4WTtcblxuICAgICAgICB2YXIgY2hpbGRWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZFZpc2libGUgPSB0cnVlO1xuXG4gICAgICAgICAgICBjaGlsZEJvdW5kcyA9IHRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIG1pblggPSBtaW5YIDwgY2hpbGRCb3VuZHMueCA/IG1pblggOiBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgbWluWSA9IG1pblkgPCBjaGlsZEJvdW5kcy55ID8gbWluWSA6IGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIGNoaWxkTWF4WCA9IGNoaWxkQm91bmRzLndpZHRoICsgY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIGNoaWxkTWF4WSA9IGNoaWxkQm91bmRzLmhlaWdodCArIGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIG1heFggPSBtYXhYID4gY2hpbGRNYXhYID8gbWF4WCA6IGNoaWxkTWF4WDtcbiAgICAgICAgICAgIG1heFkgPSBtYXhZID4gY2hpbGRNYXhZID8gbWF4WSA6IGNoaWxkTWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGRWaXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG5Db250YWluZXIucHJvdG90eXBlLmNvbnRhaW5lckdldEJvdW5kcyA9IENvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbm9uLWdsb2JhbCBsb2NhbCBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS5cbiAqIFRoZSBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXhDYWNoZSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0aC5NYXRyaXguSURFTlRJVFk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0cml4Q2FjaGU7XG5cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyggbWF0aC5NYXRyaXguSURFTlRJVFkgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcblxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGksIGo7XG5cbiAgICAvLyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgbWFzayBvciBhIGZpbHRlci5cbiAgICBpZiAodGhpcy5fbWFzayB8fCB0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgLy8gcHVzaCBmaWx0ZXIgZmlyc3QgYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIGNvcnJlY3QgZm9yIGFueSBtYXNraW5nXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzICYmIHRoaXMuX2ZpbHRlcnMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGhpcywgdGhpcy5fZmlsdGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcblxuICAgICAgICAvLyBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIGJhdGNoLCBvbmx5IHJlbmRlcmVkIGlmIGl0IGhhcyBhIHRleHR1cmUuXG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgbWFrZSBzdXJlIHRoZXkgZ2V0IHJlbmRlcmVkXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJXZWJHTChyZW5kZXJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayh0aGlzLCB0aGlzLl9tYXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBzaW1wbGUgcmVuZGVyIGNoaWxkcmVuIVxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gdGhpcyBpcyB3aGVyZSBjb250ZW50IGl0c2VsZiBnZXRzIHJlbmRlcmVkLi4uXG59O1xuXG4vKipcbiAqIFRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzXG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy5hbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hc2spXG4gICAge1xuICAgICAgICByZW5kZXJlci5tYXNrTWFuYWdlci5wdXNoTWFzayh0aGlzLl9tYXNrLCByZW5kZXJlcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayhyZW5kZXJlcik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUNoaWxkcmVuKVxue1xuICAgIERpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGlmIChkZXN0cm95Q2hpbGRyZW4pXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLmRlc3Ryb3koZGVzdHJveUNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xufTtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBUcmFuc2Zvcm0gPSByZXF1aXJlKCcuL1RyYW5zZm9ybVN0YXRpYycpLFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB3b3JsZEFscGhhOjEsIGNoaWxkcmVuOltdfTtcblxuXG4vKipcbiAqIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCBvbiB0aGUgc2NyZWVuLlxuICogVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIG9uIGl0cyBvd24gcmF0aGVyIGl0IHNob3VsZCBiZSBleHRlbmRlZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIEV2ZW50RW1pdHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gRGlzcGxheU9iamVjdCgpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb29yZGluYXRlIG9mIHRoZSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLnRyYW5zZm9ybS5wb3NpdGlvbjtcbiAgIC8vIHRoaXMuX3Bvc2l0aW9uID0gbmV3IENhY2hlUG9pbnQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHBpdm90IHBvaW50IG9mIHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgaXQgcm90YXRlcyBhcm91bmRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5waXZvdCA9IHRoaXMudHJhbnNmb3JtLnBpdm90XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBza2V3IGZhY3RvciBmb3IgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNrZXcgPSB0aGlzLnRyYW5zZm9ybS5za2V3XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3JvdGF0aW9uID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcGFjaXR5IG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgb2JqZWN0LiBJZiBmYWxzZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGRyYXduLCBhbmRcbiAgICAgKiB0aGUgdXBkYXRlVHJhbnNmb3JtIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENhbiB0aGlzIG9iamVjdCBiZSByZW5kZXJlZCwgaWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biBidXQgdGhlIHVwZGF0ZVRyYW5zZm9ybVxuICAgICAqIG1ldGhvZHMgd2lsbCBzdGlsbCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyIHRoYXQgY29udGFpbnMgdGhpcyBkaXNwbGF5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ29udGFpbmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtdWx0aXBsaWVkIGFscGhhIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgdHJhbnNmb3JtIG9mIHRoZSBvYmplY3QgYmFzZWQgb24gd29ybGQgKHBhcmVudCkgZmFjdG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS5sb2NhbFRyYW5zZm9ybTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcmVhIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0by4gVGhpcyBpcyB1c2VkIGFzIG1vcmUgb2YgYW4gb3B0aW1pc2F0aW9uXG4gICAgICogcmF0aGVyIHRoYW4gZmlndXJpbmcgb3V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGVhY2ggZnJhbWUgeW91IGNhbiBzZXQgdGhpcyByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW9zdCB1cC10by1kYXRlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgbWFzayBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gIC8vICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxheU9iamVjdDtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNjYWxlWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcm90YXRpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uZGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX2NyID0gTWF0aC5jb3ModmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBzcHJpdGUgaXMgZ2xvYmFsbHkgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB3b3JsZFZpc2libGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udmlzaWJsZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICB9IHdoaWxlIChpdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIG1hc2sgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LiBBIG1hc2sgaXMgYW4gb2JqZWN0IHRoYXQgbGltaXRzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIG9iamVjdCB0byB0aGUgc2hhcGUgb2YgdGhlIG1hc2sgYXBwbGllZCB0byBpdC5cbiAgICAgKiBJbiBQSVhJIGEgcmVndWxhciBtYXNrIG11c3QgYmUgYSBQSVhJLkdyYXBoaWNzIG9yIGEgUElYSS5TcHJpdGUgb2JqZWN0LiBUaGlzIGFsbG93cyBmb3IgbXVjaCBmYXN0ZXIgbWFza2luZyBpbiBjYW52YXMgYXMgaXQgdXRpbGlzZXMgc2hhcGUgY2xpcHBpbmcuXG4gICAgICogVG8gcmVtb3ZlIGEgbWFzaywgc2V0IHRoaXMgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3N8UElYSS5TcHJpdGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBtYXNrOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrLnJlbmRlcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXNrID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LlxuICAgICAqICogSU1QT1JUQU5UOiBUaGlzIGlzIGEgd2ViR0wgb25seSBmZWF0dXJlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlci5cbiAgICAgKiBUbyByZW1vdmUgZmlsdGVycyBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ251bGwnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkFic3RyYWN0RmlsdGVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMgJiYgdGhpcy5fZmlsdGVycy5zbGljZSgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlICYmIHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogVE9ETyAtIE9wdGltaXphdGlvbiBwYXNzIVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vaWYodGhpcy50cmFuc2Zvcm0uZGlydHkgfHwgcGFyZW50LnRyYW5zZm9ybS5kaXJ0eSlcbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICAvLyBtdWx0aXBseSB0aGUgYWxwaGFzLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gPSBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICpcbiAqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH1cbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyhtYXRoLk1hdHJpeC5JREVOVElUWSk7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9HbG9iYWwgPSBmdW5jdGlvbiAocG9zaXRpb24pXG57XG4gICAgLy8gdGhpcyBwYXJlbnQgY2hlY2sgaXMgZm9yIGp1c3QgaW4gY2FzZSB0aGUgaXRlbSBpcyBhIHJvb3Qgb2JqZWN0LlxuICAgIC8vIElmIGl0IGlzIHdlIG5lZWQgdG8gZ2l2ZSBpdCBhIHRlbXBvcmFyeSBwYXJlbnQgc28gdGhhdCBkaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtIHdvcmtzIGNvcnJlY3RseVxuICAgIC8vIHRoaXMgaXMgbWFpbmx5IHRvIGF2b2lkIGEgcGFyZW50IGNoZWNrIGluIHRoZSBtYWluIGxvb3AuIEV2ZXJ5IGxpdHRsZSBoZWxwcyBmb3IgcGVyZm9ybWFuY2UgOilcbiAgICBpZighdGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLnBhcmVudCA9IF90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIGxvdFxuICAgIHJldHVybiB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5KHBvc2l0aW9uKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgbG9jYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHJlbGF0aXZlIHRvIGFub3RoZXIgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEBwYXJhbSBbZnJvbV0ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gY2FsY3VsYXRlIHRoZSBnbG9iYWwgcG9zaXRpb24gZnJvbVxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBQb2ludClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9Mb2NhbCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgZnJvbSwgcG9pbnQpXG57XG4gICAgaWYgKGZyb20pXG4gICAge1xuICAgICAgICBwb3NpdGlvbiA9IGZyb20udG9HbG9iYWwocG9zaXRpb24pO1xuICAgIH1cblxuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIHNpbXBseSBhcHBseSB0aGUgbWF0cml4Li5cbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9zaXRpb24sIHBvaW50KTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyBPVkVSV1JJVEU7XG59O1xuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBwYXJlbnQgQ29udGFpbmVyIG9mIHRoaXMgRGlzcGxheU9iamVjdFxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge0NvbnRhaW5lcn0gVGhlIENvbnRhaW5lciB0byBhZGQgdGhpcyBEaXNwbGF5T2JqZWN0IHRvXG4gKiBAcmV0dXJuIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdGhhdCB0aGlzIERpc3BsYXlPYmplY3Qgd2FzIGFkZGVkIHRvXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFBhcmVudCA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWNvbnRhaW5lci5hZGRDaGlsZClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0UGFyZW50OiBBcmd1bWVudCBtdXN0IGJlIGEgQ29udGFpbmVyJyk7XG4gICAgfVxuXG4gICAgY29udGFpbmVyLmFkZENoaWxkKHRoaXMpO1xuICAgIHJldHVybiBjb250YWluZXI7XG59O1xuXG4vKipcbiAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHNldCB0aGUgcG9zdGlvbiwgc2NhbGUsIHNrZXcgYW5kIHBpdm90IGF0IG9uY2UuXG4gKlxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IFRoZSBYIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gVGhlIFkgcG9zaXRpb25cbiAqIEBwYXJhbSBbc2NhbGVYPTFdIHtudW1iZXJ9IFRoZSBYIHNjYWxlIHZhbHVlXG4gKiBAcGFyYW0gW3NjYWxlWT0xXSB7bnVtYmVyfSBUaGUgWSBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtyb3RhdGlvbj0wXSB7bnVtYmVyfSBUaGUgcm90YXRpb25cbiAqIEBwYXJhbSBbc2tld1g9MF0ge251bWJlcn0gVGhlIFggc2tldyB2YWx1ZVxuICogQHBhcmFtIFtza2V3WT0wXSB7bnVtYmVyfSBUaGUgWSBza2V3IHZhbHVlXG4gKiBAcGFyYW0gW3Bpdm90WD0wXSB7bnVtYmVyfSBUaGUgWCBwaXZvdCB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFk9MF0ge251bWJlcn0gVGhlIFkgcGl2b3QgdmFsdWVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24oeCwgeSwgc2NhbGVYLCBzY2FsZVksIHJvdGF0aW9uLCBza2V3WCwgc2tld1ksIHBpdm90WCwgcGl2b3RZKSAvL2pzaGludCBpZ25vcmU6bGluZVxue1xuICAgIHRoaXMucG9zaXRpb24ueCA9IHggfHwgMDtcbiAgICB0aGlzLnBvc2l0aW9uLnkgPSB5IHx8IDA7XG4gICAgdGhpcy5zY2FsZS54ID0gIXNjYWxlWCA/IDEgOiBzY2FsZVg7XG4gICAgdGhpcy5zY2FsZS55ID0gIXNjYWxlWSA/IDEgOiBzY2FsZVk7XG4gICAgdGhpcy5yb3RhdGlvbiA9IHJvdGF0aW9uIHx8IDA7XG4gICAgdGhpcy5za2V3LnggPSBza2V3WCB8fCAwO1xuICAgIHRoaXMuc2tldy55ID0gc2tld1kgfHwgMDtcbiAgICB0aGlzLnBpdm90LnggPSBwaXZvdFggfHwgMDtcbiAgICB0aGlzLnBpdm90LnkgPSBwaXZvdFkgfHwgMDtcbiAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQmFzZSBkZXN0cm95IG1ldGhvZCBmb3IgZ2VuZXJpYyBkaXNwbGF5IG9iamVjdHNcbiAqXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdGhpcy5wb3NpdGlvbiA9IG51bGw7XG4gICAgdGhpcy5zY2FsZSA9IG51bGw7XG4gICAgdGhpcy5waXZvdCA9IG51bGw7XG4gICAgdGhpcy5za2V3ID0gbnVsbDtcblxuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIHRoaXMuX2JvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fbWFzayA9IG51bGw7XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xufTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIE9ic2VydmFibGVQb2ludCh0cmFuc2Zvcm0sIHgsIHkpXG57XG4gICAgdGhpcy5feCA9IHggfHwgMDtcbiAgICB0aGlzLl95ID0geSB8fCAwO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG59XG5cbk9ic2VydmFibGVQb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYnNlcnZhYmxlUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IE9ic2VydmFibGVQb2ludDtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE9ic2VydmFibGVQb2ludC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3Qgb24gdGhlIHggYXhpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIHg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5feDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3ggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3k7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl95ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5PYnNlcnZhYmxlUG9pbnQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuX3ggPSB4IHx8IDA7XG4gICAgdGhpcy5feSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLl94IDogMCApO1xuICAgIFxuICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcbnZhciBPYnNlcnZhYmxlUG9pbnQgPSByZXF1aXJlKCcuL09ic2VydmFibGVQb2ludCcpO1xuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLCAwKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLDEsIDEpO1xuICAgIHRoaXMucGl2b3QgPSBuZXcgT2JzZXJ2YWJsZVBvaW50KHRoaXMsIDAsIDApO1xuICAgIHRoaXMuc2tldyA9IG5ldyBPYnNlcnZhYmxlUG9pbnQodGhpcywgMCwwKTtcbiAgICBcbiAgICB0aGlzLnJvdGF0aW9uID0gMDtcbiAgICB0aGlzLl9zciA9IE1hdGguc2luKDApO1xuICAgIHRoaXMuX2NyID0gTWF0aC5jb3MoMCk7XG4gICAgXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cblxuICAgIHRoaXMudXBkYXRlZCA9IHRydWU7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUcmFuc2Zvcm07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKHBhcmVudFRyYW5zZm9ybSlcbntcbiAgICB2YXIgcHQgPSBwYXJlbnRUcmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgbHQgPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3g7XG4gICAgICAgIGx0LmIgID0gIHRoaXMuX3NyICogdGhpcy5zY2FsZS5feDtcbiAgICAgICAgbHQuYyAgPSAtdGhpcy5fc3IgKiB0aGlzLnNjYWxlLl95O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3k7XG4gICAgICAgIGx0LnR4ID0gIHRoaXMucG9zaXRpb24uX3ggLSAodGhpcy5waXZvdC5feCAqIGx0LmEgKyB0aGlzLnBpdm90Ll95ICogbHQuYyk7XG4gICAgICAgIGx0LnR5ID0gIHRoaXMucG9zaXRpb24uX3kgLSAodGhpcy5waXZvdC5feCAqIGx0LmIgKyB0aGlzLnBpdm90Ll95ICogbHQuZCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVkID0gdGhpcy5kaXJ0eSB8fCBwYXJlbnRUcmFuc2Zvcm0uZGlydHk7XG5cbiAgICBpZih0aGlzLnVwZGF0ZWQpXG4gICAgeyAgICAgIFxuICAgICAgICAvLyBjb25jYXQgdGhlIHBhcmVudCBtYXRyaXggd2l0aCB0aGUgb2JqZWN0cyB0cmFuc2Zvcm0uXG4gICAgICAgIHd0LmEgID0gbHQuYSAgKiBwdC5hICsgbHQuYiAgKiBwdC5jO1xuICAgICAgICB3dC5iICA9IGx0LmEgICogcHQuYiArIGx0LmIgICogcHQuZDtcbiAgICAgICAgd3QuYyAgPSBsdC5jICAqIHB0LmEgKyBsdC5kICAqIHB0LmM7XG4gICAgICAgIHd0LmQgID0gbHQuYyAgKiBwdC5iICsgbHQuZCAgKiBwdC5kO1xuICAgICAgICB3dC50eCA9IGx0LnR4ICogcHQuYSArIGx0LnR5ICogcHQuYyArIHB0LnR4O1xuICAgICAgICB3dC50eSA9IGx0LnR4ICogcHQuYiArIGx0LnR5ICogcHQuZCArIHB0LnR5O1xuICAgIH1cbiAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhbnNmb3JtO1xuXG5cbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBDYW52YXNHcmFwaGljcyA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL0dyYXBoaWNzRGF0YScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIEdyYXBoaWNzIGNsYXNzIGNvbnRhaW5zIG1ldGhvZHMgdXNlZCB0byBkcmF3IHByaW1pdGl2ZSBzaGFwZXMgc3VjaCBhcyBsaW5lcywgY2lyY2xlcyBhbmRcbiAqIHJlY3RhbmdsZXMgdG8gdGhlIGRpc3BsYXksIGFuZCB0byBjb2xvciBhbmQgZmlsbCB0aGVtLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzKClcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSB2YWx1ZSB1c2VkIHdoZW4gZmlsbGluZyB0aGUgR3JhcGhpY3Mgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggKHRoaWNrbmVzcykgb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29sb3Igb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBHcmFwaGljcyBkYXRhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFRoaXMgaXMgYSBoZXggdmFsdWUuIEFwcGx5IGEgdmFsdWUgb2YgMHhGRkZGRkYgdG8gcmVzZXQgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmV2aW91cyB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFVzZWQgdG8gY29tcGFyZSB0byB0aGUgY3VycmVudCB0aW50IGFuZCBjaGVjayBpZiB0aGVyZXMgY2hhbmdlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLl9wcmV2VGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMO1xuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCBwYXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgY29udGFpbmluZyBzb21lIFdlYkdMLXJlbGF0ZWQgcHJvcGVydGllcyB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIG9iamVjdD59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAvLyBUT0RPIC0gX3dlYmdsIHNob3VsZCB1c2UgYSBwcm90b3R5cGUgb2JqZWN0LCBub3QgYSByYW5kb20gdW5kb2N1bWVudGVkIG9iamVjdC4uLlxuICAgIHRoaXMuX3dlYkdMID0ge307XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgc2hhcGUgaXMgYmVpbmcgdXNlZCBhcyBhIG1hc2suXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNNYXNrID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYm91bmRzJyBwYWRkaW5nIHVzZWQgZm9yIGJvdW5kcyBjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJvdW5kc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQSBjYWNoZSBvZiB0aGUgbG9jYWwgYm91bmRzIHRvIHByZXZlbnQgcmVjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwwLDEsMSk7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlIGdyYXBoaWNzXG4gICAgICogb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIFdlYkdMIGdyYXBoaWNzIG9iamVjdCBoYXMgY2hhbmdlZC4gSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZVxuICAgICAqIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlY2FsY3VsYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcblxuICAgIHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIGNhY2hlZCBzcHJpdGUgb2JqZWN0IG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBjYWNoZUFzQml0bWFwIGlzIHNldCB0byB0cnVlIHRoZSBncmFwaGljcyBvYmplY3Qgd2lsbCBiZSByZW5kZXJlZCBhcyBpZiBpdCB3YXMgYSBzcHJpdGUuXG4gICAgICogVGhpcyBpcyB1c2VmdWwgaWYgeW91ciBncmFwaGljcyBlbGVtZW50IGRvZXMgbm90IGNoYW5nZSBvZnRlbiwgYXMgaXQgd2lsbCBzcGVlZCB1cCB0aGUgcmVuZGVyaW5nXG4gICAgICogb2YgdGhlIG9iamVjdCBpbiBleGNoYW5nZSBmb3IgdGFraW5nIHVwIHRleHR1cmUgbWVtb3J5LiBJdCBpcyBhbHNvIHVzZWZ1bCBpZiB5b3UgbmVlZCB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3QgdG8gYmUgYW50aS1hbGlhc2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVuZGVyZWQgdXNpbmcgY2FudmFzLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCBpZlxuICAgICAqIHlvdSBhcmUgY29uc3RhbnRseSByZWRyYXdpbmcgdGhlIGdyYXBoaWNzIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBjYWNoZUFzQml0bWFwXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5HcmFwaGljcyNcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuR3JhcGhpY3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcbkdyYXBoaWNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljcztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEdyYXBoaWNzIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqIE5vdGUgdGhhdCB0aGUgb25seSB0aGUgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IGFyZSBjbG9uZWQsIG5vdCBpdHMgdHJhbnNmb3JtIChwb3NpdGlvbixzY2FsZSxldGMpXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2xvbmUgPSBuZXcgR3JhcGhpY3MoKTtcblxuICAgIGNsb25lLnJlbmRlcmFibGUgICAgPSB0aGlzLnJlbmRlcmFibGU7XG4gICAgY2xvbmUuZmlsbEFscGhhICAgICA9IHRoaXMuZmlsbEFscGhhO1xuICAgIGNsb25lLmxpbmVXaWR0aCAgICAgPSB0aGlzLmxpbmVXaWR0aDtcbiAgICBjbG9uZS5saW5lQ29sb3IgICAgID0gdGhpcy5saW5lQ29sb3I7XG4gICAgY2xvbmUudGludCAgICAgICAgICA9IHRoaXMudGludDtcbiAgICBjbG9uZS5ibGVuZE1vZGUgICAgID0gdGhpcy5ibGVuZE1vZGU7XG4gICAgY2xvbmUuaXNNYXNrICAgICAgICA9IHRoaXMuaXNNYXNrO1xuICAgIGNsb25lLmJvdW5kc1BhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG4gICAgY2xvbmUuZGlydHkgICAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuZ2xEaXJ0eSAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuY2FjaGVkU3ByaXRlRGlydHkgPSB0aGlzLmNhY2hlZFNwcml0ZURpcnR5O1xuXG4gICAgLy8gY29weSBncmFwaGljcyBkYXRhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIGNsb25lLmdyYXBoaWNzRGF0YS5wdXNoKHRoaXMuZ3JhcGhpY3NEYXRhW2ldLmNsb25lKCkpO1xuICAgIH1cblxuICAgIGNsb25lLmN1cnJlbnRQYXRoID0gY2xvbmUuZ3JhcGhpY3NEYXRhW2Nsb25lLmdyYXBoaWNzRGF0YS5sZW5ndGggLSAxXTtcblxuICAgIGNsb25lLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICByZXR1cm4gY2xvbmU7XG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgbGluZSBzdHlsZSB1c2VkIGZvciBzdWJzZXF1ZW50IGNhbGxzIHRvIEdyYXBoaWNzIG1ldGhvZHMgc3VjaCBhcyB0aGUgbGluZVRvKCkgbWV0aG9kIG9yIHRoZSBkcmF3Q2lyY2xlKCkgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUubGluZVN0eWxlID0gZnVuY3Rpb24gKGxpbmVXaWR0aCwgY29sb3IsIGFscGhhKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoIHx8IDA7XG4gICAgdGhpcy5saW5lQ29sb3IgPSBjb2xvciB8fCAwO1xuICAgIHRoaXMubGluZUFscGhhID0gKGFscGhhID09PSB1bmRlZmluZWQpID8gMSA6IGFscGhhO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBoYWxmd2F5IHRocm91Z2ggYSBsaW5lPyBzdGFydCBhIG5ldyBvbmUhXG4gICAgICAgICAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnNsaWNlKC0yKSk7XG4gICAgICAgICAgICBzaGFwZS5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSBpdHMgZW1wdHkgc28gbGV0cyBqdXN0IHNldCB0aGUgbGluZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVXaWR0aCA9IHRoaXMubGluZVdpZHRoO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZUFscGhhID0gdGhpcy5saW5lQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogTW92ZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byB4LCB5LlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IHRoZSBYIGNvb3JkaW5hdGUgdG8gbW92ZSB0b1xuICogQHBhcmFtIHkge251bWJlcn0gdGhlIFkgY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICAqL1xuR3JhcGhpY3MucHJvdG90eXBlLm1vdmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24oW3gseV0pO1xuICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIGxpbmUgdXNpbmcgdGhlIGN1cnJlbnQgbGluZSBzdHlsZSBmcm9tIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8gKHgsIHkpO1xuICogVGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiBpcyB0aGVuIHNldCB0byAoeCwgeSkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBkcmF3IHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lVG8gPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgsIHkpO1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnF1YWRyYXRpY0N1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICBuID0gMjAsXG4gICAgICAgIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLCAwKTtcbiAgICB9XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBuOyArK2kpXG4gICAge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgeGEgPSBmcm9tWCArICggKGNwWCAtIGZyb21YKSAqIGogKTtcbiAgICAgICAgeWEgPSBmcm9tWSArICggKGNwWSAtIGZyb21ZKSAqIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCggeGEgKyAoICgoY3BYICsgKCAodG9YIC0gY3BYKSAqIGogKSkgLSB4YSkgKiBqICksXG4gICAgICAgICAgICAgICAgICAgICB5YSArICggKChjcFkgKyAoICh0b1kgLSBjcFkpICogaiApKSAtIHlhKSAqIGogKSApO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gY3BYMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlemllckN1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIGNwWDIsIGNwWTIsIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgbiA9IDIwLFxuICAgICAgICBkdCxcbiAgICAgICAgZHQyLFxuICAgICAgICBkdDMsXG4gICAgICAgIHQyLFxuICAgICAgICB0MyxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICBkdCA9ICgxIC0gaik7XG4gICAgICAgIGR0MiA9IGR0ICogZHQ7XG4gICAgICAgIGR0MyA9IGR0MiAqIGR0O1xuXG4gICAgICAgIHQyID0gaiAqIGo7XG4gICAgICAgIHQzID0gdDIgKiBqO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCBkdDMgKiBmcm9tWCArIDMgKiBkdDIgKiBqICogY3BYICsgMyAqIGR0ICogdDIgKiBjcFgyICsgdDMgKiB0b1gsXG4gICAgICAgICAgICAgICAgICAgICBkdDMgKiBmcm9tWSArIDMgKiBkdDIgKiBqICogY3BZICsgMyAqIGR0ICogdDIgKiBjcFkyICsgdDMgKiB0b1kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjVG8oKSBtZXRob2QgY3JlYXRlcyBhbiBhcmMvY3VydmUgYmV0d2VlbiB0d28gdGFuZ2VudHMgb24gdGhlIGNhbnZhcy5cbiAqXG4gKiBcImJvcnJvd2VkXCIgZnJvbSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Z4Y2FudmFzLyAtIHRoYW5rcyBnb29nbGUhXG4gKlxuICogQHBhcmFtIHgxIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTEge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB4MiB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGFyY1xuICogQHBhcmFtIHkyIHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGFyY1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmFyY1RvID0gZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyLCByYWRpdXMpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oeDEsIHkxKTtcbiAgICB9XG5cbiAgICB2YXIgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMsXG4gICAgICAgIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0sXG4gICAgICAgIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0sXG4gICAgICAgIGExID0gZnJvbVkgLSB5MSxcbiAgICAgICAgYjEgPSBmcm9tWCAtIHgxLFxuICAgICAgICBhMiA9IHkyICAgLSB5MSxcbiAgICAgICAgYjIgPSB4MiAgIC0geDEsXG4gICAgICAgIG1tID0gTWF0aC5hYnMoYTEgKiBiMiAtIGIxICogYTIpO1xuXG4gICAgaWYgKG1tIDwgMS4wZS04IHx8IHJhZGl1cyA9PT0gMClcbiAgICB7XG4gICAgICAgIGlmIChwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAhPT0geDEgfHwgcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0gIT09IHkxKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHMucHVzaCh4MSwgeTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBkZCA9IGExICogYTEgKyBiMSAqIGIxLFxuICAgICAgICAgICAgY2MgPSBhMiAqIGEyICsgYjIgKiBiMixcbiAgICAgICAgICAgIHR0ID0gYTEgKiBhMiArIGIxICogYjIsXG4gICAgICAgICAgICBrMSA9IHJhZGl1cyAqIE1hdGguc3FydChkZCkgLyBtbSxcbiAgICAgICAgICAgIGsyID0gcmFkaXVzICogTWF0aC5zcXJ0KGNjKSAvIG1tLFxuICAgICAgICAgICAgajEgPSBrMSAqIHR0IC8gZGQsXG4gICAgICAgICAgICBqMiA9IGsyICogdHQgLyBjYyxcbiAgICAgICAgICAgIGN4ID0gazEgKiBiMiArIGsyICogYjEsXG4gICAgICAgICAgICBjeSA9IGsxICogYTIgKyBrMiAqIGExLFxuICAgICAgICAgICAgcHggPSBiMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHB5ID0gYTEgKiAoazIgKyBqMSksXG4gICAgICAgICAgICBxeCA9IGIyICogKGsxICsgajIpLFxuICAgICAgICAgICAgcXkgPSBhMiAqIChrMSArIGoyKSxcbiAgICAgICAgICAgIHN0YXJ0QW5nbGUgPSBNYXRoLmF0YW4yKHB5IC0gY3ksIHB4IC0gY3gpLFxuICAgICAgICAgICAgZW5kQW5nbGUgICA9IE1hdGguYXRhbjIocXkgLSBjeSwgcXggLSBjeCk7XG5cbiAgICAgICAgdGhpcy5hcmMoY3ggKyB4MSwgY3kgKyB5MSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYjEgKiBhMiA+IGIyICogYTEpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSAodXNlZCB0byBjcmVhdGUgY2lyY2xlcywgb3IgcGFydHMgb2YgY2lyY2xlcykuXG4gKlxuICogQHBhcmFtIGN4IHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gY3kge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gc3RhcnRBbmdsZSB7bnVtYmVyfSBUaGUgc3RhcnRpbmcgYW5nbGUsIGluIHJhZGlhbnMgKDAgaXMgYXQgdGhlIDMgbydjbG9jayBwb3NpdGlvbiBvZiB0aGUgYXJjJ3MgY2lyY2xlKVxuICogQHBhcmFtIGVuZEFuZ2xlIHtudW1iZXJ9IFRoZSBlbmRpbmcgYW5nbGUsIGluIHJhZGlhbnNcbiAqIEBwYXJhbSBhbnRpY2xvY2t3aXNlIHtib29sZWFufSBPcHRpb25hbC4gU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGRyYXdpbmcgc2hvdWxkIGJlIGNvdW50ZXJjbG9ja3dpc2Ugb3IgY2xvY2t3aXNlLiBGYWxzZSBpcyBkZWZhdWx0LCBhbmQgaW5kaWNhdGVzIGNsb2Nrd2lzZSwgd2hpbGUgdHJ1ZSBpbmRpY2F0ZXMgY291bnRlci1jbG9ja3dpc2UuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjID0gZnVuY3Rpb24oY3gsIGN5LCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBhbnRpY2xvY2t3aXNlKVxue1xuICAgIGFudGljbG9ja3dpc2UgPSBhbnRpY2xvY2t3aXNlIHx8IGZhbHNlO1xuXG4gICAgaWYgKHN0YXJ0QW5nbGUgPT09IGVuZEFuZ2xlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYoICFhbnRpY2xvY2t3aXNlICYmIGVuZEFuZ2xlIDw9IHN0YXJ0QW5nbGUgKVxuICAgIHtcbiAgICAgICAgZW5kQW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuICAgIGVsc2UgaWYoIGFudGljbG9ja3dpc2UgJiYgc3RhcnRBbmdsZSA8PSBlbmRBbmdsZSApXG4gICAge1xuICAgICAgICBzdGFydEFuZ2xlICs9IE1hdGguUEkgKiAyO1xuICAgIH1cblxuICAgIHZhciBzd2VlcCA9IGFudGljbG9ja3dpc2UgPyAoc3RhcnRBbmdsZSAtIGVuZEFuZ2xlKSAqIC0xIDogKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSk7XG4gICAgdmFyIHNlZ3MgPSAgTWF0aC5jZWlsKE1hdGguYWJzKHN3ZWVwKSAvIChNYXRoLlBJICogMikpICogNDA7XG5cbiAgICBpZihzd2VlcCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBzdGFydFggPSBjeCArIE1hdGguY29zKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuICAgIHZhciBzdGFydFkgPSBjeSArIE1hdGguc2luKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHN0YXJ0WCwgc3RhcnRZKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciB0aGV0YSA9IHN3ZWVwLyhzZWdzKjIpO1xuICAgIHZhciB0aGV0YTIgPSB0aGV0YSoyO1xuXG4gICAgdmFyIGNUaGV0YSA9IE1hdGguY29zKHRoZXRhKTtcbiAgICB2YXIgc1RoZXRhID0gTWF0aC5zaW4odGhldGEpO1xuXG4gICAgdmFyIHNlZ01pbnVzID0gc2VncyAtIDE7XG5cbiAgICB2YXIgcmVtYWluZGVyID0gKCBzZWdNaW51cyAlIDEgKSAvIHNlZ01pbnVzO1xuXG4gICAgZm9yKHZhciBpPTA7IGk8PXNlZ01pbnVzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcmVhbCA9ICBpICsgcmVtYWluZGVyICogaTtcblxuXG4gICAgICAgIHZhciBhbmdsZSA9ICgodGhldGEpICsgc3RhcnRBbmdsZSArICh0aGV0YTIgKiByZWFsKSk7XG5cbiAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgIHZhciBzID0gLU1hdGguc2luKGFuZ2xlKTtcblxuICAgICAgICBwb2ludHMucHVzaCgoIChjVGhldGEgKiAgYykgKyAoc1RoZXRhICogcykgKSAqIHJhZGl1cyArIGN4LFxuICAgICAgICAgICAgICAgICAgICAoIChjVGhldGEgKiAtcykgKyAoc1RoZXRhICogYykgKSAqIHJhZGl1cyArIGN5KTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIGEgc2ltcGxlIG9uZS1jb2xvciBmaWxsIHRoYXQgc3Vic2VxdWVudCBjYWxscyB0byBvdGhlciBHcmFwaGljcyBtZXRob2RzXG4gKiAoc3VjaCBhcyBsaW5lVG8oKSBvciBkcmF3Q2lyY2xlKCkpIHVzZSB3aGVuIGRyYXdpbmcuXG4gKlxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlZ2luRmlsbCA9IGZ1bmN0aW9uIChjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5maWxsaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPD0gMilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsID0gdGhpcy5maWxsaW5nO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQ29sb3IgPSB0aGlzLmZpbGxDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbEFscGhhID0gdGhpcy5maWxsQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBmaWxsIHRvIHRoZSBsaW5lcyBhbmQgc2hhcGVzIHRoYXQgd2VyZSBhZGRlZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHRoZSBiZWdpbkZpbGwoKSBtZXRob2QuXG4gKlxuICogQHJldHVybiB7R3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5lbmRGaWxsID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IG51bGw7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCApXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguUmVjdGFuZ2xlKHgseSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gUmFkaXVzIG9mIHRoZSByZWN0YW5nbGUgY29ybmVyc1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSb3VuZGVkUmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzIClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5Sb3VuZGVkUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgY2lyY2xlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3Q2lyY2xlID0gZnVuY3Rpb24gKHgsIHksIHJhZGl1cylcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5DaXJjbGUoeCx5LCByYWRpdXMpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhbiBlbGxpcHNlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIGhhbGYgd2lkdGggb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd0VsbGlwc2UgPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5FbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIHBvbHlnb24gdXNpbmcgdGhlIGdpdmVuIHBhdGguXG4gKlxuICogQHBhcmFtIHBhdGgge251bWJlcltdfFBJWEkuUG9pbnRbXX0gVGhlIHBhdGggZGF0YSB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgcG9seWdvbi5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UG9seWdvbiA9IGZ1bmN0aW9uIChwYXRoKVxue1xuICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGFzc2lnbm1lbnQgZGVvcHRcbiAgICAvLyBzZWUgc2VjdGlvbiAzLjE6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgIHZhciBwb2ludHMgPSBwYXRoO1xuXG4gICAgdmFyIGNsb3NlZCA9IHRydWU7XG5cbiAgICBpZiAocG9pbnRzIGluc3RhbmNlb2YgbWF0aC5Qb2x5Z29uKVxuICAgIHtcbiAgICAgICAgY2xvc2VkID0gcG9pbnRzLmNsb3NlZDtcbiAgICAgICAgcG9pbnRzID0gcG9pbnRzLnBvaW50cztcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHNbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHBvaW50cyk7XG4gICAgc2hhcGUuY2xvc2VkID0gY2xvc2VkO1xuXG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZ3JhcGhpY3MgdGhhdCB3ZXJlIGRyYXduIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LCBhbmQgcmVzZXRzIGZpbGwgYW5kIGxpbmUgc3R5bGUgc2V0dGluZ3MuXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG4gICAgdGhpcy5maWxsaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmNsZWFyRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gW107XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGdlb21ldHJ5IGlzIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNob3VsZCBiZSBvbmUgb2YgdGhlIHNjYWxlTW9kZSBjb25zdHNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBncmFwaGljcyBvYmplY3RcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVzb2x1dGlvbiwgc2NhbGVNb2RlKVxue1xuXG4gICAgcmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGggKiByZXNvbHV0aW9uLCBib3VuZHMuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXNCdWZmZXIuY29udGV4dC5zY2FsZShyZXNvbHV0aW9uLCByZXNvbHV0aW9uKTtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIGNhbnZhc0J1ZmZlci5jb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcblxuICAgIGlmICh0aGlzLmdsRGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5nbERpcnR5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5yZW5kZXIodGhpcyk7XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5pc01hc2sgPT09IHRydWUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHRpbnQgaGFzIGNoYW5nZWQsIHNldCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRpcnR5LlxuICAgIGlmICh0aGlzLl9wcmV2VGludCAhPT0gdGhpcy50aW50KSB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIHRoaXMgY29kZSBtYXkgc3RpbGwgYmUgbmVlZGVkIHNvIGxlYXZpbmcgZm9yIG5vdy4uXG4gICAgLy9cbiAgICAvKlxuICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuZGlydHkgfHwgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVDYWNoZWRTcHJpdGUoKTtcblxuICAgICAgICAgICAgLy8gd2Ugd2lsbCBhbHNvIG5lZWQgdG8gdXBkYXRlIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUoKTtcblxuICAgICAgICAgICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFscGhhID0gdGhpcy5hbHBoYTtcblxuICAgICAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLl9jYWNoZWRTcHJpdGUsIHJlbmRlcmVyKTtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgICovXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY29udGV4dCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYm91bmRzIG9mIHRoZSBncmFwaGljIHNoYXBlIGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IFRoZSB3b3JsZCB0cmFuc2Zvcm0gbWF0cml4IHRvIHVzZSwgZGVmYXVsdHMgdG8gdGhpc1xuICogIG9iamVjdCdzIHdvcmxkVHJhbnNmb3JtLlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICAvLyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBpdGVtIGlzIGEgbWFzayFcbiAgICAgICAgaWYgKCF0aGlzLnJlbmRlcmFibGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJvdW5kc0RpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICAgICAgICAgIHRoaXMuZ2xEaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYm91bmRzRGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9sb2NhbEJvdW5kcztcblxuICAgICAgICB2YXIgdzAgPSBib3VuZHMueDtcbiAgICAgICAgdmFyIHcxID0gYm91bmRzLndpZHRoICsgYm91bmRzLng7XG5cbiAgICAgICAgdmFyIGgwID0gYm91bmRzLnk7XG4gICAgICAgIHZhciBoMSA9IGJvdW5kcy5oZWlnaHQgKyBib3VuZHMueTtcblxuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAgICAgdmFyIHgyID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgICAgICB2YXIgeTMgPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgICAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgbWF4WCA9IHgxO1xuICAgICAgICB2YXIgbWF4WSA9IHkxO1xuXG4gICAgICAgIHZhciBtaW5YID0geDE7XG4gICAgICAgIHZhciBtaW5ZID0geTE7XG5cbiAgICAgICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICAgICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICAgICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgICAgICB0aGlzLl9ib3VuZHMueCA9IG1pblg7XG4gICAgICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy55ID0gbWluWTtcbiAgICAgICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSB0aGlzLl9ib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBncmFwaGljcyBvYmplY3RcbipcbiogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4qL1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciBncmFwaGljc0RhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKCFkYXRhLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gb25seSBkZWFsIHdpdGggZmlsbHMuLlxuICAgICAgICBpZiAoZGF0YS5zaGFwZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCBkYXRhLnNoYXBlLmNvbnRhaW5zKCB0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkgKSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAqXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcblxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICBpZiAodGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdmFyIHNoYXBlLCBwb2ludHMsIHgsIHksIHcsIGg7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVtpXTtcbiAgICAgICAgICAgIHZhciB0eXBlID0gZGF0YS50eXBlO1xuICAgICAgICAgICAgdmFyIGxpbmVXaWR0aCA9IGRhdGEubGluZVdpZHRoO1xuICAgICAgICAgICAgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QgfHwgdHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLnggLSBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueSAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS53aWR0aCArIGxpbmVXaWR0aDtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLnJhZGl1cyArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLng7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLmhlaWdodCArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFBPTFlcbiAgICAgICAgICAgICAgICBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBvaW50cy5sZW5ndGg7IGogKz0gMilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHggPSBwb2ludHNbal07XG4gICAgICAgICAgICAgICAgICAgIHkgPSBwb2ludHNbaisxXTtcblxuICAgICAgICAgICAgICAgICAgICBtaW5YID0geC1saW5lV2lkdGggPCBtaW5YID8geC1saW5lV2lkdGggOiBtaW5YO1xuICAgICAgICAgICAgICAgICAgICBtYXhYID0geCtsaW5lV2lkdGggPiBtYXhYID8geCtsaW5lV2lkdGggOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblkgPSB5LWxpbmVXaWR0aCA8IG1pblkgPyB5LWxpbmVXaWR0aCA6IG1pblk7XG4gICAgICAgICAgICAgICAgICAgIG1heFkgPSB5K2xpbmVXaWR0aCA+IG1heFkgPyB5K2xpbmVXaWR0aCA6IG1heFk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIG1pblggPSAwO1xuICAgICAgICBtYXhYID0gMDtcbiAgICAgICAgbWluWSA9IDA7XG4gICAgICAgIG1heFkgPSAwO1xuICAgIH1cblxuICAgIHZhciBwYWRkaW5nID0gdGhpcy5ib3VuZHNQYWRkaW5nO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueCA9IG1pblggLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLndpZHRoID0gKG1heFggLSBtaW5YKSArIHBhZGRpbmcgKiAyO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueSA9IG1pblkgLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLmhlaWdodCA9IChtYXhZIC0gbWluWSkgKyBwYWRkaW5nICogMjtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjYWNoZWQgc3ByaXRlIHdoZW4gdGhlIHNwcml0ZSBoYXMgY2FjaGVBc0JpdG1hcCA9IHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIGlmICghdGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgdmFyIGNhbnZhc0J1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcbiAgICAgICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzQnVmZmVyLmNhbnZhcyk7XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlciA9IGNhbnZhc0J1ZmZlcjtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLnJlc2l6ZShib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIC8vIGxldmVyYWdlIHRoZSBhbmNob3IgdG8gYWNjb3VudCBmb3IgdGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudFxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQuc2F2ZSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC50cmFuc2xhdGUoLWJvdW5kcy54LC1ib3VuZHMueSk7XG5cbiAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3MgdG8gMSBmb3IgdGhlIHJlbmRlci4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIG5vdyByZW5kZXIgdGhlIGdyYXBoaWMuLlxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dCk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xufTtcbiovXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVDYWNoZWRTcHJpdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2FjaGVkU3ByaXRlID0gdGhpcy5fY2FjaGVkU3ByaXRlO1xuICAgIHZhciB0ZXh0dXJlID0gY2FjaGVkU3ByaXRlLnRleHR1cmU7XG4gICAgdmFyIGNhbnZhcyA9IGNhY2hlZFNwcml0ZS5idWZmZXIuY2FudmFzO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG4gICAgdGV4dHVyZS5jcm9wLndpZHRoID0gdGV4dHVyZS5mcmFtZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmNyb3AuaGVpZ2h0ID0gdGV4dHVyZS5mcmFtZS5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgY2FjaGVkU3ByaXRlLl93aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICBjYWNoZWRTcHJpdGUuX2hlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIGRpcnR5IGJhc2UgdGV4dHVyZXNcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmRpcnR5KCk7XG59OyovXG5cbi8qKlxuICogRGVzdHJveXMgYSBwcmV2aW91cyBjYWNoZWQgc3ByaXRlLlxuICpcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95Q2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUudGV4dHVyZS5kZXN0cm95KHRydWUpO1xuXG4gICAgLy8gbGV0IHRoZSBnYyBjb2xsZWN0IHRoZSB1bnVzZWQgc3ByaXRlXG4gICAgLy8gVE9ETyBjb3VsZCBiZSBvYmplY3QgcG9vbGVkIVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59OyovXG5cbi8qKlxuICogRHJhd3MgdGhlIGdpdmVuIHNoYXBlIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LiBDYW4gYmUgYW55IG9mIENpcmNsZSwgUmVjdGFuZ2xlLCBFbGxpcHNlLCBMaW5lIG9yIFBvbHlnb24uXG4gKlxuICogQHBhcmFtIHNoYXBlIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc0RhdGF9IFRoZSBnZW5lcmF0ZWQgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdTaGFwZSA9IGZ1bmN0aW9uIChzaGFwZSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIC8vIGNoZWNrIGN1cnJlbnQgcGF0aCFcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YS5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgdmFyIGRhdGEgPSBuZXcgR3JhcGhpY3NEYXRhKHRoaXMubGluZVdpZHRoLCB0aGlzLmxpbmVDb2xvciwgdGhpcy5saW5lQWxwaGEsIHRoaXMuZmlsbENvbG9yLCB0aGlzLmZpbGxBbHBoYSwgdGhpcy5maWxsaW5nLCBzaGFwZSk7XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YS5wdXNoKGRhdGEpO1xuXG4gICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAge1xuICAgICAgICBkYXRhLnNoYXBlLmNsb3NlZCA9IGRhdGEuc2hhcGUuY2xvc2VkIHx8IHRoaXMuZmlsbGluZztcbiAgICAgICAgdGhpcy5jdXJyZW50UGF0aCA9IGRhdGE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGRhdGE7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgLy8gZGVzdHJveSBlYWNoIG9mIHRoZSBHcmFwaGljc0RhdGEgb2JqZWN0c1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8vIGZvciBlYWNoIHdlYmdsIGRhdGEgZW50cnksIGRlc3Ryb3kgdGhlIFdlYkdMR3JhcGhpY3NEYXRhXG4gICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fd2ViZ2wpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl93ZWJnbFtpZF0uZGF0YS5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgdGhpcy5fd2ViZ2xbaWRdLmRhdGFbal0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG4gICAgdGhpcy5fd2ViZ2wgPSBudWxsO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEEgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gbGluZVdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gZmlsbENvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGxBbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBmaWxsICAgICAge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICogQHBhcmFtIHNoYXBlICAgICB7Q2lyY2xlfFJlY3RhbmdsZXxFbGxpcHNlfExpbmV8UG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICovXG5mdW5jdGlvbiBHcmFwaGljc0RhdGEobGluZVdpZHRoLCBsaW5lQ29sb3IsIGxpbmVBbHBoYSwgZmlsbENvbG9yLCBmaWxsQWxwaGEsIGZpbGwsIHNoYXBlKVxue1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQ29sb3IgPSBsaW5lQ29sb3I7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQWxwaGEgPSBsaW5lQWxwaGE7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLl9saW5lVGludCA9IGxpbmVDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxDb2xvciA9IGZpbGxDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IGZpbGxBbHBoYTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBjYWNoZWQgdGludCBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuX2ZpbGxUaW50ID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhcGUgaXMgZmlsbGVkIHdpdGggYSBjb2xvdXJcbiAgICAgKi9cbiAgICB0aGlzLmZpbGwgPSBmaWxsO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICAgICAqL1xuICAgIHRoaXMuc2hhcGUgPSBzaGFwZTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBUaGUgdHlwZSBvZiB0aGUgc2hhcGUsIHNlZSB0aGUgQ29uc3QuU2hhcGVzIGZpbGUgZm9yIGFsbCB0aGUgZXhpc3RpbmcgdHlwZXMsXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gc2hhcGUudHlwZTtcbn1cblxuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3NEYXRhIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBHcmFwaGljc0RhdGEoXG4gICAgICAgIHRoaXMubGluZVdpZHRoLFxuICAgICAgICB0aGlzLmxpbmVDb2xvcixcbiAgICAgICAgdGhpcy5saW5lQWxwaGEsXG4gICAgICAgIHRoaXMuZmlsbENvbG9yLFxuICAgICAgICB0aGlzLmZpbGxBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsLFxuICAgICAgICB0aGlzLnNoYXBlXG4gICAgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIGRhdGEuXG4gKi9cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnNoYXBlID0gbnVsbDtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL1dlYkdMR3JhcGhpY3NEYXRhJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuXG4gICAgLy8gc29tZSBkcmF3aW5nIGZ1bmN0aW9ucy4uXG4gICAgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi91dGlscy9idWlsZExpbmUnKTtcbiAgICBidWlsZFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUG9seScpO1xuICAgIGJ1aWxkQ29tcGxleFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ29tcGxleFBvbHknKTtcbiAgICBidWlsZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSZWN0YW5nbGUnKTtcbiAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkQ2lyY2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZENpcmNsZScpO1xuXG4gICAgZWFyY3V0ID0gcmVxdWlyZSgnZWFyY3V0Jyk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IFtdO1xuXG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgYSBwb2x5IGNhbiBjb250YWluIGJlZm9yZSBpdCBpcyByZW5kZXJlZCBhcyBhIGNvbXBsZXggcG9seWdvbiAodXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyKVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgPSAyMDA7XG59XG5cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc1JlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdncmFwaGljcycsIEdyYXBoaWNzUmVuZGVyZXIpO1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMuZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzLmdsKVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHJlbmRlcmVyLlxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YVBvb2wubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBudWxsO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuICAvLyAgY29uc29sZS5sb2coZ3JhcGhpY3MpXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5IHx8ICFncmFwaGljcy5fd2ViR0xbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljcyhncmFwaGljcyk7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIFRoaXMgIGNvdWxkIGJlIHNwZWVkZWQgdXAgZm9yIHN1cmUhXG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggZ3JhcGhpY3MuYmxlbmRNb2RlICk7XG5cbi8vICAgIHZhciBtYXRyaXggPSAgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0uY2xvbmUoKTtcbi8vICAgIHZhciBtYXRyaXggPSAgcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7XG4vLyAgICBtYXRyaXguYXBwZW5kKGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gd2ViR0wuZGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTC5kYXRhW2ldLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyBmaXggdGhpcyBvbmUhXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEgKiB3ZWJHTERhdGEuYWxwaGEpO1xuXG4gICAgICAgICAgICAvLyByZW5kZXIgcXVhZC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgcmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeCA9IGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLmxvY2F0aW9uKTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHVwZGF0ZVxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgLy8gZ2V0IHRoZSBjb250ZXh0cyBncmFwaGljcyBvYmplY3RcbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd2ViR0wgY29udGV4dCB0aW1lIHRvIGNyZWF0ZSBpdCFcbiAgICBpZiAoIXdlYkdMKVxuICAgIHtcbiAgICAgICAgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdID0ge2xhc3RJbmRleDowLCBkYXRhOltdLCBnbDpnbH07XG4gICAgfVxuXG4gICBcbiAgICAvLyBmbGFnIHRoZSBncmFwaGljcyBhcyBub3QgZGlydHkgYXMgd2UgYXJlIGFib3V0IHRvIHVwZGF0ZSBpdC4uLlxuICAgIGdyYXBoaWNzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB2YXIgaTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGNsZWFyZWQgdGhlIGdyYXBoaWNzIG9iamVjdCB3ZSB3aWxsIG5lZWQgdG8gY2xlYXIgZXZlcnkgb2JqZWN0XG4gICAgaWYgKGdyYXBoaWNzLmNsZWFyRGlydHkpXG4gICAge1xuICAgICAgICBncmFwaGljcy5jbGVhckRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuZCByZXR1cm4gYWxsIHRoZSB3ZWJHTERhdGFzIHRvIHRoZSBvYmplY3QgcG9vbCBzbyB0aGFuIGNhbiBiZSByZXVzZWQgbGF0ZXIgb25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBncmFwaGljc0RhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucHVzaCggZ3JhcGhpY3NEYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgYXJyYXkgYW5kIHJlc2V0IHRoZSBpbmRleC4uXG4gICAgICAgIHdlYkdMLmRhdGEgPSBbXTtcbiAgICAgICAgd2ViR0wubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBncmFwaGljcyBkYXRhcyBhbmQgY29uc3RydWN0IGVhY2ggb25lLi5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGEgY29tcGxleCBmaWxsIHRoZW4gdGhlIG5ldyBzdGVuY2lsIGJ1ZmZlciB0ZWNobmlxdWUgd2lsbCBiZSB1c2VkXG4gICAgLy8gb3RoZXIgd2lzZSBncmFwaGljcyBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIGludG8gYSBiYXRjaC4uXG4gICAgZm9yIChpID0gd2ViR0wubGFzdEluZGV4OyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBwb2ludHMgdGhlIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgICAgICAgICAgZGF0YS5wb2ludHMgPSBkYXRhLnNoYXBlLnBvaW50cy5zbGljZSgpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBwb2x5IGlmIHRoZSB2YWx1ZSBpcyB0cnVlIVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50c1swXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTJdIHx8IGRhdGEucG9pbnRzWzFdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKGRhdGEucG9pbnRzWzBdLCBkYXRhLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNQUtFIFNVUkUgV0UgSEFWRSBUSEUgQ09SUkVDVCBUWVBFLi5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA+PSA2KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA8IHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplICogMilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkRyYXdVc2luZ1NpbXBsZSA9IGJ1aWxkUG9seShkYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkRyYXdVc2luZ1NpbXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoID4gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuICAgICAgICAgICAgICAgIGJ1aWxkTGluZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMgfHwgZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZENpcmNsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCsrO1xuICAgIH1cblxuICAgIC8vIHVwbG9hZCBhbGwgdGhlIGRpcnR5IGRhdGEuLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5kaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhLnVwbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gd2ViR0wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSBUT0RPIEBBbHZpblxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5zd2l0Y2hNb2RlID0gZnVuY3Rpb24gKHdlYkdMLCB0eXBlKVxue1xuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICBpZiAoIXdlYkdMLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbd2ViR0wuZGF0YS5sZW5ndGgtMV07XG5cbiAgICAgICAgaWYgKCh3ZWJHTERhdGEucG9pbnRzLmxlbmd0aCA+IDMyMDAwMCkgfHwgd2ViR0xEYXRhLm1vZGUgIT09IHR5cGUgfHwgdHlwZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdlYkdMRGF0YS5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gd2ViR0xEYXRhO1xufTtcblxuIiwiLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyBXZWJHTCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gV2ViR0xHcmFwaGljc0RhdGEoZ2wpIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vVE9ETyBkb2VzIHRoaXMgbmVlZCB0byBiZSBzcGxpdCBiZWZvcmUgdXBsb2Rpbmc/P1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvbG9yIGNvbXBvbmVudHMgKHIsZyxiKVxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3IgPSBbMCwwLDBdOyAvLyBjb2xvciBzcGxpdCFcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBvaW50cyB0byBkcmF3XG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIHRvZG8gQGFsdmluXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubW9kZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGdyYXBoaWNzIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHZlcnRpY2VzIGFuZCB0aGUgaW5kaWNlc1xuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb2ludHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmluZGljZXMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4vLyAgICB0aGlzLmxhc3RJbmRleCA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5nbFBvaW50cyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5wb2ludHMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuYnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5nbFBvaW50cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5nbEluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuZ2xJbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLnBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBcbiAgICB0aGlzLmdsID0gbnVsbDtcblxuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoZ2wpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgZ2wsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgY2lyY2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byBkcmF3XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ2lyY2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIHZhciBjaXJjbGVEYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gY2lyY2xlRGF0YS54O1xuICAgIHZhciB5ID0gY2lyY2xlRGF0YS55O1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuXG4gICAgLy8gVE9ETyAtIGJpdCBoYWNreT8/XG4gICAgaWYgKGdyYXBoaWNzRGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB0b3RhbFNlZ3MgPSBNYXRoLmZsb29yKDMwICogTWF0aC5zcXJ0KGNpcmNsZURhdGEucmFkaXVzKSkgfHwgTWF0aC5mbG9vcigxNSAqIE1hdGguc3FydChjaXJjbGVEYXRhLndpZHRoICsgY2lyY2xlRGF0YS5oZWlnaHQpKTtcbiAgICB2YXIgc2VnID0gKE1hdGguUEkgKiAyKSAvIHRvdGFsU2VncyA7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcyk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDEgOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCx5LCByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKyssIHZlY1BvcysrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MtMSk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDaXJjbGU7IiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuICAgIFxuXG5cbi8qKlxuICogQnVpbGRzIGEgY29tcGxleCBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDb21wbGV4UG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvL1RPRE8gLSBubyBuZWVkIHRvIGNvcHkgdGhpcyBhcyBpdCBnZXRzIHR1cm5lZCBpbnRvIGEgRkxvYXQzMkFycmF5IGFueXdheXMuLlxuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzLnNsaWNlKCk7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDYpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgd2ViR0xEYXRhLnBvaW50cyA9IHBvaW50cztcbiAgICB3ZWJHTERhdGEuYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHdlYkdMRGF0YS5jb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG5cbiAgICAvLyBjYWxjbGF0ZSB0aGUgYm91bmRzLi5cbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIHZhciB4LHk7XG5cbiAgICAvLyBnZXQgc2l6ZS4uXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKz0yKVxuICAgIHtcbiAgICAgICAgeCA9IHBvaW50c1tpXTtcbiAgICAgICAgeSA9IHBvaW50c1tpKzFdO1xuXG4gICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICBtYXhYID0geCA+IG1heFggPyB4IDogbWF4WDtcblxuICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcbiAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgcXVhZCB0byB0aGUgZW5kIGNvcyB0aGVyZSBpcyBubyBwb2ludCBtYWtpbmcgYW5vdGhlciBidWZmZXIhXG4gICAgcG9pbnRzLnB1c2gobWluWCwgbWluWSxcbiAgICAgICAgICAgICAgICBtYXhYLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1heFksXG4gICAgICAgICAgICAgICAgbWluWCwgbWF4WSk7XG5cbiAgICAvLyBwdXNoIGEgcXVhZCBvbnRvIHRoZSBlbmQuLlxuXG4gICAgLy9UT0RPIC0gdGhpcyBhaW50IG5lZWRlZCFcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKCBpICk7XG4gICAgfVxuXG59O1xuXG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENvbXBsZXhQb2x5OyIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBsaW5lIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRMaW5lID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIFRPRE8gT1BUSU1JU0UhXG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGlmIHRoZSBsaW5lIHdpZHRoIGlzIGFuIG9kZCBudW1iZXIgYWRkIDAuNSB0byBhbGlnbiB0byBhIHdob2xlIHBpeGVsXG4gICAgLy8gY29tbWVudGluZyB0aGlzIG91dCBmaXhlcyAjNzExIGFuZCAjMTYyMFxuICAgIC8vIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoJTIpXG4gICAgLy8ge1xuICAgIC8vICAgICBmb3IgKGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKVxuICAgIC8vICAgICB7XG4gICAgLy8gICAgICAgICBwb2ludHNbaV0gKz0gMC41O1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBmaXJzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgIHZhciBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgIC8vIGlmIHRoZSBmaXJzdCBwb2ludCBpcyB0aGUgbGFzdCBwb2ludCAtIGdvbm5hIGhhdmUgaXNzdWVzIDopXG4gICAgaWYgKGZpcnN0UG9pbnQueCA9PT0gbGFzdFBvaW50LnggJiYgZmlyc3RQb2ludC55ID09PSBsYXN0UG9pbnQueSlcbiAgICB7XG4gICAgICAgIC8vIG5lZWQgdG8gY2xvbmUgYXMgd2UgYXJlIGdvaW5nIHRvIHNsaWdodGx5IG1vZGlmeSB0aGUgc2hhcGUuLlxuICAgICAgICBwb2ludHMgPSBwb2ludHMuc2xpY2UoKTtcblxuICAgICAgICBwb2ludHMucG9wKCk7XG4gICAgICAgIHBvaW50cy5wb3AoKTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgICAgICB2YXIgbWlkUG9pbnRYID0gbGFzdFBvaW50LnggKyAoZmlyc3RQb2ludC54IC0gbGFzdFBvaW50LngpICowLjU7XG4gICAgICAgIHZhciBtaWRQb2ludFkgPSBsYXN0UG9pbnQueSArIChmaXJzdFBvaW50LnkgLSBsYXN0UG9pbnQueSkgKjAuNTtcblxuICAgICAgICBwb2ludHMudW5zaGlmdChtaWRQb2ludFgsIG1pZFBvaW50WSk7XG4gICAgICAgIHBvaW50cy5wdXNoKG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICB9XG5cbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgIHZhciBpbmRleENvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICB2YXIgaW5kZXhTdGFydCA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgLy8gRFJBVyB0aGUgTGluZVxuICAgIHZhciB3aWR0aCA9IGdyYXBoaWNzRGF0YS5saW5lV2lkdGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmxpbmVDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmxpbmVBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciBweCwgcHksIHAxeCwgcDF5LCBwMngsIHAyeSwgcDN4LCBwM3k7XG4gICAgdmFyIHBlcnB4LCBwZXJweSwgcGVycDJ4LCBwZXJwMnksIHBlcnAzeCwgcGVycDN5O1xuICAgIHZhciBhMSwgYjEsIGMxLCBhMiwgYjIsIGMyO1xuICAgIHZhciBkZW5vbSwgcGRpc3QsIGRpc3Q7XG5cbiAgICBwMXggPSBwb2ludHNbMF07XG4gICAgcDF5ID0gcG9pbnRzWzFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWzJdO1xuICAgIHAyeSA9IHBvaW50c1szXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gIHAxeCAtIHAyeDtcblxuICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG5cbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAvLyBzdGFydFxuICAgIHZlcnRzLnB1c2gocDF4IC0gcGVycHggLCBwMXkgLSBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAxeCArIHBlcnB4ICwgcDF5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgZm9yIChpID0gMTsgaSA8IGxlbmd0aC0xOyBpKyspXG4gICAge1xuICAgICAgICBwMXggPSBwb2ludHNbKGktMSkqMl07XG4gICAgICAgIHAxeSA9IHBvaW50c1soaS0xKSoyICsgMV07XG5cbiAgICAgICAgcDJ4ID0gcG9pbnRzWyhpKSoyXTtcbiAgICAgICAgcDJ5ID0gcG9pbnRzWyhpKSoyICsgMV07XG5cbiAgICAgICAgcDN4ID0gcG9pbnRzWyhpKzEpKjJdO1xuICAgICAgICBwM3kgPSBwb2ludHNbKGkrMSkqMiArIDFdO1xuXG4gICAgICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgICAgICBwZXJweSA9IHAxeCAtIHAyeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgICAgICBwZXJweCAvPSBkaXN0O1xuICAgICAgICBwZXJweSAvPSBkaXN0O1xuICAgICAgICBwZXJweCAqPSB3aWR0aDtcbiAgICAgICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAgICAgcGVycDJ4ID0gLShwMnkgLSBwM3kpO1xuICAgICAgICBwZXJwMnkgPSBwMnggLSBwM3g7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwMngqcGVycDJ4ICsgcGVycDJ5KnBlcnAyeSk7XG4gICAgICAgIHBlcnAyeCAvPSBkaXN0O1xuICAgICAgICBwZXJwMnkgLz0gZGlzdDtcbiAgICAgICAgcGVycDJ4ICo9IHdpZHRoO1xuICAgICAgICBwZXJwMnkgKj0gd2lkdGg7XG5cbiAgICAgICAgYTEgPSAoLXBlcnB5ICsgcDF5KSAtICgtcGVycHkgKyBwMnkpO1xuICAgICAgICBiMSA9ICgtcGVycHggKyBwMngpIC0gKC1wZXJweCArIHAxeCk7XG4gICAgICAgIGMxID0gKC1wZXJweCArIHAxeCkgKiAoLXBlcnB5ICsgcDJ5KSAtICgtcGVycHggKyBwMngpICogKC1wZXJweSArIHAxeSk7XG4gICAgICAgIGEyID0gKC1wZXJwMnkgKyBwM3kpIC0gKC1wZXJwMnkgKyBwMnkpO1xuICAgICAgICBiMiA9ICgtcGVycDJ4ICsgcDJ4KSAtICgtcGVycDJ4ICsgcDN4KTtcbiAgICAgICAgYzIgPSAoLXBlcnAyeCArIHAzeCkgKiAoLXBlcnAyeSArIHAyeSkgLSAoLXBlcnAyeCArIHAyeCkgKiAoLXBlcnAyeSArIHAzeSk7XG5cbiAgICAgICAgZGVub20gPSBhMSpiMiAtIGEyKmIxO1xuXG4gICAgICAgIGlmIChNYXRoLmFicyhkZW5vbSkgPCAwLjEgKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIGRlbm9tKz0xMC4xO1xuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJweCAsIHAyeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBweCA9IChiMSpjMiAtIGIyKmMxKS9kZW5vbTtcbiAgICAgICAgcHkgPSAoYTIqYzEgLSBhMSpjMikvZGVub207XG5cblxuICAgICAgICBwZGlzdCA9IChweCAtcDJ4KSAqIChweCAtcDJ4KSArIChweSAtcDJ5KSAqIChweSAtcDJ5KTtcblxuXG4gICAgICAgIGlmIChwZGlzdCA+IDE0MCAqIDE0MClcbiAgICAgICAge1xuICAgICAgICAgICAgcGVycDN4ID0gcGVycHggLSBwZXJwMng7XG4gICAgICAgICAgICBwZXJwM3kgPSBwZXJweSAtIHBlcnAyeTtcblxuICAgICAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwM3gqcGVycDN4ICsgcGVycDN5KnBlcnAzeSk7XG4gICAgICAgICAgICBwZXJwM3ggLz0gZGlzdDtcbiAgICAgICAgICAgIHBlcnAzeSAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN4ICo9IHdpZHRoO1xuICAgICAgICAgICAgcGVycDN5ICo9IHdpZHRoO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycDN4LCBwMnkgK3BlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJwM3gsIHAyeSAtcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRleENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocHggLCBweSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSAocHgtcDJ4KSwgcDJ5IC0gKHB5IC0gcDJ5KSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHAxeCA9IHBvaW50c1sobGVuZ3RoLTIpKjJdO1xuICAgIHAxeSA9IHBvaW50c1sobGVuZ3RoLTIpKjIgKyAxXTtcblxuICAgIHAyeCA9IHBvaW50c1sobGVuZ3RoLTEpKjJdO1xuICAgIHAyeSA9IHBvaW50c1sobGVuZ3RoLTEpKjIgKyAxXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5KTtcbiAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBpbmRleENvdW50OyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydCsrKTtcbiAgICB9XG5cbiAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydC0xKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRMaW5lOyIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcG9seWdvbiB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuV2ViR0xHcmFwaGljc0RhdGF9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocG9pbnRzLCBudWxsLCAyKTtcblxuICAgIGlmICghdHJpYW5nbGVzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgdmVydFBvcyA9IHZlcnRzLmxlbmd0aCAvIDY7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICt2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVydFBvcyk7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmVydHMucHVzaChwb2ludHNbaSAqIDJdLCBwb2ludHNbaSAqIDIgKyAxXSxcbiAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRQb2x5O1xuIiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHJlY3RhbmdsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIC0tLSAvL1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIC8vXG4gICAgdmFyIHJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcmVjdERhdGEueDtcbiAgICB2YXIgeSA9IHJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJlY3REYXRhLmhlaWdodDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgLy8gc3RhcnRcbiAgICAgICAgdmVydHMucHVzaCh4LCB5KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAvLyBpbnNlcnQgMiBkZWFkIHRyaWFuZ2xlcy4uXG4gICAgICAgIGluZGljZXMucHVzaCh2ZXJ0UG9zLCB2ZXJ0UG9zLCB2ZXJ0UG9zKzEsIHZlcnRQb3MrMiwgdmVydFBvcyszLCB2ZXJ0UG9zKzMpO1xuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSBbeCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHkgKyBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICB4LCB5XTtcblxuXG4gICAgICAgIGJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJlY3RhbmdsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG4vKipcbiAqIEJ1aWxkcyBhIHJvdW5kZWQgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG5idWlsZFJvdW5kZWRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIHJyZWN0RGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IHJyZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcnJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcnJlY3REYXRhLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSBycmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgdmFyIHJhZGl1cyA9IHJyZWN0RGF0YS5yYWRpdXM7XG5cbiAgICB2YXIgcmVjUG9pbnRzID0gW107XG4gICAgcmVjUG9pbnRzLnB1c2goeCwgeSArIHJhZGl1cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4LCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCB4LCB5ICsgaGVpZ2h0LCB4ICsgcmFkaXVzLCB5ICsgaGVpZ2h0LCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoIC0gcmFkaXVzLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCAtIHJhZGl1cywgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyB3aWR0aCwgeSArIHJhZGl1cywgeCArIHdpZHRoLCB5LCB4ICsgd2lkdGggLSByYWRpdXMsIHksIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgcmFkaXVzLCB5LCB4LCB5LCB4LCB5ICsgcmFkaXVzICsgMC4wMDAwMDAwMDAxLCByZWNQb2ludHMpO1xuXG4gICAgLy8gdGhpcyB0aW55IG51bWJlciBkZWFscyB3aXRoIHRoZSBpc3N1ZSB0aGF0IG9jY3VycyB3aGVuIHBvaW50cyBvdmVybGFwIGFuZCBlYXJjdXQgZmFpbHMgdG8gdHJpYW5ndWxhdGUgdGhlIGl0ZW0uXG4gICAgLy8gVE9ETyAtIGZpeCB0aGlzIHByb3Blcmx5LCB0aGlzIGlzIG5vdCB2ZXJ5IGVsZWdhbnQuLiBidXQgaXQgd29ya3MgZm9yIG5vdy5cblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICB2YXIgdHJpYW5nbGVzID0gZWFyY3V0KHJlY1BvaW50cywgbnVsbCwgMik7XG5cbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICAgICAge1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVjUG9zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZWNQb2ludHMubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gocmVjUG9pbnRzW2ldLCByZWNQb2ludHNbKytpXSwgciwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHJlY1BvaW50cztcblxuICAgICAgICB0aGlzLmJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlLiAoaGVscGVyIGZ1bmN0aW9uLi4pXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBmcm9tWCB7bnVtYmVyfSBPcmlnaW4gcG9pbnQgeFxuICogQHBhcmFtIGZyb21ZIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcGFyYW0gW291dF0ge251bWJlcltdfSBUaGUgb3V0cHV0IGFycmF5IHRvIGFkZCBwb2ludHMgaW50by4gSWYgbm90IHBhc3NlZCwgYSBuZXcgYXJyYXkgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm4ge251bWJlcltdfSBhbiBhcnJheSBvZiBwb2ludHNcbiAqL1xucXVhZHJhdGljQmV6aWVyQ3VydmUgPSBmdW5jdGlvbiAoZnJvbVgsIGZyb21ZLCBjcFgsIGNwWSwgdG9YLCB0b1ksIG91dClcbntcbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICB4YixcbiAgICAgICAgeWIsXG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gb3V0IHx8IFtdO1xuXG4gICAgZnVuY3Rpb24gZ2V0UHQobjEgLCBuMiwgcGVyYykge1xuICAgICAgICB2YXIgZGlmZiA9IG4yIC0gbjE7XG5cbiAgICAgICAgcmV0dXJuIG4xICsgKCBkaWZmICogcGVyYyApO1xuICAgIH1cblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBuOyBpKysgKSB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICAvLyBUaGUgR3JlZW4gTGluZVxuICAgICAgICB4YSA9IGdldFB0KCBmcm9tWCAsIGNwWCAsIGogKTtcbiAgICAgICAgeWEgPSBnZXRQdCggZnJvbVkgLCBjcFkgLCBqICk7XG4gICAgICAgIHhiID0gZ2V0UHQoIGNwWCAsIHRvWCAsIGogKTtcbiAgICAgICAgeWIgPSBnZXRQdCggY3BZICwgdG9ZICwgaiApO1xuXG4gICAgICAgIC8vIFRoZSBCbGFjayBEb3RcbiAgICAgICAgeCA9IGdldFB0KCB4YSAsIHhiICwgaiApO1xuICAgICAgICB5ID0gZ2V0UHQoIHlhICwgeWIgLCBqICk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goeCwgeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50cztcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJvdW5kZWRSZWN0YW5nbGU7IiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgY29yZSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWElcbiAqL1xuLy8gZXhwb3J0IGNvcmUgYW5kIGNvbnN0LiBXZSBhc3NpZ24gY29yZSB0byBjb25zdCBzbyB0aGF0IHRoZSBub24tcmVmZXJlbmNlIHR5cGVzIGluIGNvbnN0IHJlbWFpbiBpbi10YWN0XG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihyZXF1aXJlKCcuL2NvbnN0JyksIHJlcXVpcmUoJy4vbWF0aCcpLCB7XG4gICAgLy8gdXRpbHNcbiAgICB1dGlsczogcmVxdWlyZSgnLi91dGlscycpLFxuICAgIHRpY2tlcjogcmVxdWlyZSgnLi90aWNrZXInKSxcblxuICAgIC8vIGRpc3BsYXlcbiAgICBEaXNwbGF5T2JqZWN0OiAgICAgICAgICByZXF1aXJlKCcuL2Rpc3BsYXkvRGlzcGxheU9iamVjdCcpLFxuICAgIENvbnRhaW5lcjogICAgICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9Db250YWluZXInKSxcblxuICAgIC8vIHNwcml0ZXNcbiAgICBTcHJpdGU6ICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgUGFydGljbGVDb250YWluZXI6ICAgICAgcmVxdWlyZSgnLi9wYXJ0aWNsZXMvUGFydGljbGVDb250YWluZXInKSxcbiAgICBTcHJpdGVSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXInKSxcbiAgICBQYXJ0aWNsZVJlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyJyksXG5cbiAgICAvLyB0ZXh0XG4gICAgVGV4dDogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0L1RleHQnKSxcblxuICAgIC8vIHByaW1pdGl2ZXNcbiAgICBHcmFwaGljczogICAgICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzJyksXG4gICAgR3JhcGhpY3NEYXRhOiAgICAgICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljc0RhdGEnKSxcbiAgICBHcmFwaGljc1JlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHR1cmVzXG4gICAgVGV4dHVyZTogICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQmFzZVRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlVGV4dHVyZScpLFxuICAgIFJlbmRlclRleHR1cmU6ICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEJhc2VSZW5kZXJUZXh0dXJlOiAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlOiAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzOiAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmVVdnMnKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIGNhbnZhc1xuICAgIENhbnZhc1JlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIENhbnZhc0J1ZmZlcjogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIHdlYmdsXG4gICAgV2ViR0xSZW5kZXJlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyksXG4gICAgU2hhZGVyTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIFNoYWRlcjogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyJyksXG4gICAgT2JqZWN0UmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBSZW5kZXJUYXJnZXQ6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcblxuICAgIC8vIGZpbHRlcnMgLSB3ZWJnbFxuICAgIEFic3RyYWN0RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBGWEFBRmlsdGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBTcHJpdGVNYXNrRmlsdGVyOiAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKSxcblxuICAgIGdsQ29yZTogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncGl4aS1nbC1jb3JlJyksXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoaWNoIHJlbmRlcmVyIHlvdSBzaG91bGQgYmUgdXNpbmcuXG4gICAgICogV2ViR0wgaXMgdGhlIHByZWZlcnJlZCByZW5kZXJlciBhcyBpdCBpcyBhIGxvdCBmYXN0ZXIuIElmIHdlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnlcbiAgICAgKiB0aGUgYnJvd3NlciB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBjYW52YXMgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHBhcmFtIHdpZHRoPTgwMCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIGhlaWdodD02MDAge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWYgeW91XG4gICAgICogICAgICBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0XG4gICAgICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyLCByZXRpbmEgd291bGQgYmUgMlxuICAgICAqIEBwYXJhbSBbbm9XZWJHTD1mYWxzZV0ge2Jvb2xlYW59IHByZXZlbnRzIHNlbGVjdGlvbiBvZiBXZWJHTCByZW5kZXJlciwgZXZlbiBpZiBzdWNoIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyZXJ8Q2FudmFzUmVuZGVyZXJ9IFJldHVybnMgV2ViR0wgcmVuZGVyZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgQ2FudmFzUmVuZGVyZXJcbiAgICAgKi9cbiAgICBhdXRvRGV0ZWN0UmVuZGVyZXI6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCBub1dlYkdMKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB3aWR0aCB8fCA4MDA7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAgICAgaWYgKCFub1dlYkdMICYmIGNvcmUudXRpbHMuaXNXZWJHTFN1cHBvcnRlZCgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGNvcmUuV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgY29yZS5DYW52YXNSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB9XG59KTtcbiIsIi8vIEB0b2RvIC0gaWdub3JlIHRoZSB0b28gbWFueSBwYXJhbWV0ZXJzIHdhcm5pbmcgZm9yIG5vd1xuLy8gc2hvdWxkIGVpdGhlciBmaXggaXQgb3IgY2hhbmdlIHRoZSBqc2hpbnQgY29uZmlnXG4vLyBqc2hpbnQgLVcwNzJcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xuXG4vKipcbiAqIFRoZSBwaXhpIE1hdHJpeCBjbGFzcyBhcyBhbiBvYmplY3QsIHdoaWNoIG1ha2VzIGl0IGEgbG90IGZhc3RlcixcbiAqIGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBpdCA6XG4gKiB8IGEgfCBiIHwgdHh8XG4gKiB8IGMgfCBkIHwgdHl8XG4gKiB8IDAgfCAwIHwgMSB8XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBNYXRyaXgoKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5iID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5jID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHkgPSAwO1xufVxuXG5NYXRyaXgucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWF0cml4O1xubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1hdHJpeCBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5LiBUaGUgRWxlbWVudCB0byBNYXRyaXggbWFwcGluZyBvcmRlciBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIGEgPSBhcnJheVswXVxuICogYiA9IGFycmF5WzFdXG4gKiBjID0gYXJyYXlbM11cbiAqIGQgPSBhcnJheVs0XVxuICogdHggPSBhcnJheVsyXVxuICogdHkgPSBhcnJheVs1XVxuICpcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119IFRoZSBhcnJheSB0aGF0IHRoZSBtYXRyaXggd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbS5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpXG57XG4gICAgdGhpcy5hID0gYXJyYXlbMF07XG4gICAgdGhpcy5iID0gYXJyYXlbMV07XG4gICAgdGhpcy5jID0gYXJyYXlbM107XG4gICAgdGhpcy5kID0gYXJyYXlbNF07XG4gICAgdGhpcy50eCA9IGFycmF5WzJdO1xuICAgIHRoaXMudHkgPSBhcnJheVs1XTtcbn07XG5cblxuLyoqXG4gKiBzZXRzIHRoZSBtYXRyaXggcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkXG4gKiBAcGFyYW0ge251bWJlcn0gdHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXG57XG4gICAgdGhpcy5hID0gYTtcbiAgICB0aGlzLmIgPSBiO1xuICAgIHRoaXMuYyA9IGM7XG4gICAgdGhpcy5kID0gZDtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy50eSA9IHR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmcm9tIHRoZSBjdXJyZW50IE1hdHJpeCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9zZSB7Ym9vbGVhbn0gV2hldGhlciB3ZSBuZWVkIHRvIHRyYW5zcG9zZSB0aGUgbWF0cml4IG9yIG5vdFxuICogQHBhcmFtIFtvdXRdIHtBcnJheX0gSWYgcHJvdmlkZWQgdGhlIGFycmF5IHdpbGwgYmUgYXNzaWduZWQgdG8gb3V0XG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gdGhlIG5ld2x5IGNyZWF0ZWQgYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAodHJhbnNwb3NlLCBvdXQpXG57XG4gICAgaWYgKCF0aGlzLmFycmF5KVxuICAgIHtcbiAgICAgICAgdGhpcy5hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gb3V0IHx8IHRoaXMuYXJyYXk7XG5cbiAgICBpZiAodHJhbnNwb3NlKVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVsyXSA9IDA7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSAwO1xuICAgICAgICBhcnJheVs2XSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzddID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzJdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzZdID0gMDtcbiAgICAgICAgYXJyYXlbN10gPSAwO1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZSB0byB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gcmVuZGVyaW5nKVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5hICogeCArIHRoaXMuYyAqIHkgKyB0aGlzLnR4O1xuICAgIG5ld1Bvcy55ID0gdGhpcy5iICogeCArIHRoaXMuZCAqIHkgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGludmVyc2Ugb2YgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UgdG8gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIGlucHV0KVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHlJbnZlcnNlID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciBpZCA9IDEgLyAodGhpcy5hICogdGhpcy5kICsgdGhpcy5jICogLXRoaXMuYik7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuZCAqIGlkICogeCArIC10aGlzLmMgKiBpZCAqIHkgKyAodGhpcy50eSAqIHRoaXMuYyAtIHRoaXMudHggKiB0aGlzLmQpICogaWQ7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmEgKiBpZCAqIHkgKyAtdGhpcy5iICogaWQgKiB4ICsgKC10aGlzLnR5ICogdGhpcy5hICsgdGhpcy50eCAqIHRoaXMuYikgKiBpZDtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdHJpeCBvbiB0aGUgeCBhbmQgeS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMudHggKz0geDtcbiAgICB0aGlzLnR5ICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIHNjYWxlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIGFtb3VudCB0byBzY2FsZSBob3Jpem9udGFsbHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSBhbW91bnQgdG8gc2NhbGUgdmVydGljYWxseVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2NhbGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmEgKj0geDtcbiAgICB0aGlzLmQgKj0geTtcbiAgICB0aGlzLmMgKj0geDtcbiAgICB0aGlzLmIgKj0geTtcbiAgICB0aGlzLnR4ICo9IHg7XG4gICAgdGhpcy50eSAqPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyBhIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpXG57XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKCBhbmdsZSApO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbiggYW5nbGUgKTtcblxuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICB0aGlzLmEgPSBhMSAqIGNvcy10aGlzLmIgKiBzaW47XG4gICAgdGhpcy5iID0gYTEgKiBzaW4rdGhpcy5iICogY29zO1xuICAgIHRoaXMuYyA9IGMxICogY29zLXRoaXMuZCAqIHNpbjtcbiAgICB0aGlzLmQgPSBjMSAqIHNpbit0aGlzLmQgKiBjb3M7XG4gICAgdGhpcy50eCA9IHR4MSAqIGNvcyAtIHRoaXMudHkgKiBzaW47XG4gICAgdGhpcy50eSA9IHR4MSAqIHNpbiArIHRoaXMudHkgKiBjb3M7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG5cbiAgICB0aGlzLmEgID0gbWF0cml4LmEgKiBhMSArIG1hdHJpeC5iICogYzE7XG4gICAgdGhpcy5iICA9IG1hdHJpeC5hICogYjEgKyBtYXRyaXguYiAqIGQxO1xuICAgIHRoaXMuYyAgPSBtYXRyaXguYyAqIGExICsgbWF0cml4LmQgKiBjMTtcbiAgICB0aGlzLmQgID0gbWF0cml4LmMgKiBiMSArIG1hdHJpeC5kICogZDE7XG5cbiAgICB0aGlzLnR4ID0gbWF0cml4LnR4ICogYTEgKyBtYXRyaXgudHkgKiBjMSArIHRoaXMudHg7XG4gICAgdGhpcy50eSA9IG1hdHJpeC50eCAqIGIxICsgbWF0cml4LnR5ICogZDEgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1hdHJpeCBiYXNlZCBvbiBhbGwgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RYXG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RZXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXG4gKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WFxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdZXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKHgsIHksIHBpdm90WCwgcGl2b3RZLCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSlcbntcbiAgICB2YXIgYSwgYiwgYywgZCwgc3IsIGNyLCBjeSwgc3ksIG5zeCwgY3g7XG5cbiAgICBzciAgPSBNYXRoLnNpbihyb3RhdGlvbik7XG4gICAgY3IgID0gTWF0aC5jb3Mocm90YXRpb24pO1xuICAgIGN5ICA9IE1hdGguY29zKHNrZXdZKTtcbiAgICBzeSAgPSBNYXRoLnNpbihza2V3WSk7XG4gICAgbnN4ID0gLU1hdGguc2luKHNrZXdYKTtcbiAgICBjeCAgPSAgTWF0aC5jb3Moc2tld1gpO1xuXG4gICAgYSAgPSAgY3IgKiBzY2FsZVg7XG4gICAgYiAgPSAgc3IgKiBzY2FsZVg7XG4gICAgYyAgPSAtc3IgKiBzY2FsZVk7XG4gICAgZCAgPSAgY3IgKiBzY2FsZVk7XG5cbiAgICB0aGlzLmEgID0gY3kgKiBhICsgc3kgKiBjO1xuICAgIHRoaXMuYiAgPSBjeSAqIGIgKyBzeSAqIGQ7XG4gICAgdGhpcy5jICA9IG5zeCAqIGEgKyBjeCAqIGM7XG4gICAgdGhpcy5kICA9IG5zeCAqIGIgKyBjeCAqIGQ7XG5cbiAgICB0aGlzLnR4ID0geCArICggcGl2b3RYICogYSArIHBpdm90WSAqIGMgKTtcbiAgICB0aGlzLnR5ID0geSArICggcGl2b3RYICogYiArIHBpdm90WSAqIGQgKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQcmVwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uKG1hdHJpeClcbntcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIGlmIChtYXRyaXguYSAhPT0gMSB8fCBtYXRyaXguYiAhPT0gMCB8fCBtYXRyaXguYyAhPT0gMCB8fCBtYXRyaXguZCAhPT0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICAgICAgdmFyIGMxID0gdGhpcy5jO1xuICAgICAgICB0aGlzLmEgID0gYTEqbWF0cml4LmErdGhpcy5iKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmIgID0gYTEqbWF0cml4LmIrdGhpcy5iKm1hdHJpeC5kO1xuICAgICAgICB0aGlzLmMgID0gYzEqbWF0cml4LmErdGhpcy5kKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmQgID0gYzEqbWF0cml4LmIrdGhpcy5kKm1hdHJpeC5kO1xuICAgIH1cblxuICAgIHRoaXMudHggPSB0eDEqbWF0cml4LmErdGhpcy50eSptYXRyaXguYyttYXRyaXgudHg7XG4gICAgdGhpcy50eSA9IHR4MSptYXRyaXguYit0aGlzLnR5Km1hdHJpeC5kK21hdHJpeC50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0ID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcbiAgICB2YXIgbiA9IGExKmQxLWIxKmMxO1xuXG4gICAgdGhpcy5hID0gZDEvbjtcbiAgICB0aGlzLmIgPSAtYjEvbjtcbiAgICB0aGlzLmMgPSAtYzEvbjtcbiAgICB0aGlzLmQgPSBhMS9uO1xuICAgIHRoaXMudHggPSAoYzEqdGhpcy50eS1kMSp0eDEpL247XG4gICAgdGhpcy50eSA9IC0oYTEqdGhpcy50eS1iMSp0eDEpL247XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBSZXNldHMgdGhpcyBNYXRpeCB0byBhbiBpZGVudGl0eSAoZGVmYXVsdCkgbWF0cml4LlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmlkZW50aXR5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmEgPSAxO1xuICAgIHRoaXMuYiA9IDA7XG4gICAgdGhpcy5jID0gMDtcbiAgICB0aGlzLmQgPSAxO1xuICAgIHRoaXMudHggPSAwO1xuICAgIHRoaXMudHkgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgTWF0cml4IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gQSBjb3B5IG9mIHRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgdmFsdWVzIG9mIHRoZSBnaXZlbiBtYXRyaXggdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZXMgaW4gdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhlIG1hdHJpeCBnaXZlbiBpbiBwYXJhbWV0ZXIgd2l0aCBpdHMgdmFsdWVzIHVwZGF0ZWQuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQSBkZWZhdWx0IChpZGVudGl0eSkgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5JREVOVElUWSA9IG5ldyBNYXRyaXgoKTtcblxuLyoqXG4gKiBBIHRlbXAgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5URU1QX01BVFJJWCA9IG5ldyBNYXRyaXgoKTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcbn1cblxuUG9pbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvaW50XG4gKlxuICogQHJldHVybiB7UElYSS5Qb2ludH0gYSBjb3B5IG9mIHRoZSBwb2ludFxuICovXG5Qb2ludC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBDb3BpZXMgeCBhbmQgeSBmcm9tIHRoZSBnaXZlbiBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICovXG5Qb2ludC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgdGhpcy5zZXQocC54LCBwLnkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGVxdWFsIHRvIHRoaXMgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gKHAueCA9PT0gdGhpcy54KSAmJiAocC55ID09PSB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5Qb2ludC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy54ID0geCB8fCAwO1xuICAgIHRoaXMueSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLnggOiAwICkgO1xufTtcbiIsIi8qKlxuICogTWF0aCBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgbWl4ZWQgaW50byBQSVhJIG5hbWVzcGFjZS5cbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBUaGVzZSB3aWxsIGJlIG1peGVkIHRvIGJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLFxuICAgIC8vIHdoaWxlIHRoaXMgbW9kdWxlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBjb3JlXG4gICAgLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBjdXQgZG93biBvblxuICAgIC8vIGludGVybmFsIG1vZHVsZSByZXF1aXJlcy5cblxuICAgIFBvaW50OiAgICAgIHJlcXVpcmUoJy4vUG9pbnQnKSxcbiAgICBNYXRyaXg6ICAgICByZXF1aXJlKCcuL01hdHJpeCcpLFxuXG4gICAgQ2lyY2xlOiAgICAgcmVxdWlyZSgnLi9zaGFwZXMvQ2lyY2xlJyksXG4gICAgRWxsaXBzZTogICAgcmVxdWlyZSgnLi9zaGFwZXMvRWxsaXBzZScpLFxuICAgIFBvbHlnb246ICAgIHJlcXVpcmUoJy4vc2hhcGVzL1BvbHlnb24nKSxcbiAgICBSZWN0YW5nbGU6ICByZXF1aXJlKCcuL3NoYXBlcy9SZWN0YW5nbGUnKSxcbiAgICBSb3VuZGVkUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlJylcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIENpcmNsZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICovXG5mdW5jdGlvbiBDaXJjbGUoeCwgeSwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkNJUkM7XG59XG5cbkNpcmNsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaXJjbGU7XG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBDaXJjbGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkNpcmNsZX0gYSBjb3B5IG9mIHRoZSBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBDaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBjaXJjbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmFkaXVzIDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGR4ID0gKHRoaXMueCAtIHgpLFxuICAgICAgICBkeSA9ICh0aGlzLnkgLSB5KSxcbiAgICAgICAgcjIgPSB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzO1xuXG4gICAgZHggKj0gZHg7XG4gICAgZHkgKj0gZHk7XG5cbiAgICByZXR1cm4gKGR4ICsgZHkgPD0gcjIpO1xufTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBjaXJjbGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4qIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiovXG5DaXJjbGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy5yYWRpdXMsIHRoaXMueSAtIHRoaXMucmFkaXVzLCB0aGlzLnJhZGl1cyAqIDIsIHRoaXMucmFkaXVzICogMik7XG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBFbGxpcHNlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGlzIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZVxuICovXG5mdW5jdGlvbiBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkVMSVA7XG59XG5cbkVsbGlwc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRWxsaXBzZTtcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBFbGxpcHNlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5FbGxpcHNlfSBhIGNvcHkgb2YgdGhlIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgRWxsaXBzZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRzIGFyZSB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vbm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDBcbiAgICB2YXIgbm9ybXggPSAoKHggLSB0aGlzLngpIC8gdGhpcy53aWR0aCksXG4gICAgICAgIG5vcm15ID0gKCh5IC0gdGhpcy55KSAvIHRoaXMuaGVpZ2h0KTtcblxuICAgIG5vcm14ICo9IG5vcm14O1xuICAgIG5vcm15ICo9IG5vcm15O1xuXG4gICAgcmV0dXJuIChub3JteCArIG5vcm15IDw9IDEpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgZWxsaXBzZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy53aWR0aCwgdGhpcy55IC0gdGhpcy5oZWlnaHQsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG4iLCJ2YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9Qb2ludCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcG9pbnRzIHtQSVhJLlBvaW50W118bnVtYmVyW118Li4uUElYSS5Qb2ludHwuLi5udW1iZXJ9IFRoaXMgY2FuIGJlIGFuIGFycmF5IG9mIFBvaW50cyB0aGF0IGZvcm0gdGhlIHBvbHlnb24sXG4gKiAgICAgIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIHRoYXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBbeCx5LCB4LHksIC4uLl0sIG9yIHRoZSBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZVxuICogICAgICBhbGwgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvbiBlLmcuIGBuZXcgUElYSS5Qb2x5Z29uKG5ldyBQSVhJLlBvaW50KCksIG5ldyBQSVhJLlBvaW50KCksIC4uLilgLCBvciB0aGVcbiAqICAgICAgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmUgZmxhdCB4LHkgdmFsdWVzIGUuZy4gYG5ldyBQb2x5Z29uKHgseSwgeCx5LCB4LHksIC4uLilgIHdoZXJlIGB4YCBhbmQgYHlgIGFyZVxuICogICAgICBOdW1iZXJzLlxuICovXG5mdW5jdGlvbiBQb2x5Z29uKHBvaW50c18pXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBvaW50c187XG5cbiAgICAvL2lmIHBvaW50cyBpc24ndCBhbiBhcnJheSwgdXNlIGFyZ3VtZW50cyBhcyB0aGUgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgcG9pbnRzLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICBwb2ludHNbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IG9mIHBvaW50cywgY29udmVydCBpdCB0byBhIGZsYXQgYXJyYXkgb2YgbnVtYmVyc1xuICAgIGlmIChwb2ludHNbMF0gaW5zdGFuY2VvZiBQb2ludClcbiAgICB7XG4gICAgICAgIHZhciBwID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBwLnB1c2gocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50cyA9IHA7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5QT0xZO1xufVxuXG5Qb2x5Z29uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvbHlnb247XG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9seWdvblxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9seWdvbn0gYSBjb3B5IG9mIHRoZSBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvbHlnb24odGhpcy5wb2ludHMuc2xpY2UoKSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcG9seWdvblxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBpbnNpZGUgPSBmYWxzZTtcblxuICAgIC8vIHVzZSBzb21lIHJheWNhc3RpbmcgdG8gdGVzdCBoaXRzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL3BvaW50LWluLXBvbHlnb24vYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5wb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbGVuZ3RoIC0gMTsgaSA8IGxlbmd0aDsgaiA9IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB4aSA9IHRoaXMucG9pbnRzW2kgKiAyXSwgeWkgPSB0aGlzLnBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgeGogPSB0aGlzLnBvaW50c1tqICogMl0sIHlqID0gdGhpcy5wb2ludHNbaiAqIDIgKyAxXSxcbiAgICAgICAgICAgIGludGVyc2VjdCA9ICgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICh4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aSk7XG5cbiAgICAgICAgaWYgKGludGVyc2VjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiB0aGUgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcmVjdGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SRUNUO1xufVxuXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XG5cbi8qKlxuICogQSBjb25zdGFudCBlbXB0eSByZWN0YW5nbGUuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblJlY3RhbmdsZS5FTVBUWSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDwgdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDwgdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFJvdW5kZWQgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIHRoYXQgaGFzIG5pY2Ugcm91bmRlZCBjb3JuZXJzLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodCBhbmQgaXRzIHJhZGl1cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gQ29udHJvbHMgdGhlIHJhZGl1cyBvZiB0aGUgcm91bmRlZCBjb3JuZXJzXG4gKi9cbmZ1bmN0aW9uIFJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJSRUM7XG59XG5cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm91bmRlZFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUm91bmRlZFJlY3RhbmdsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUm91bmRlZFJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSb3VuZGVkUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8PSB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUGFydGljbGVDb250YWluZXIgY2xhc3MgaXMgYSByZWFsbHkgZmFzdCB2ZXJzaW9uIG9mIHRoZSBDb250YWluZXIgYnVpbHQgc29sZWx5IGZvciBzcGVlZCxcbiAqIHNvIHVzZSB3aGVuIHlvdSBuZWVkIGEgbG90IG9mIHNwcml0ZXMgb3IgcGFydGljbGVzLiBUaGUgdHJhZGVvZmYgb2YgdGhlIFBhcnRpY2xlQ29udGFpbmVyIGlzIHRoYXQgYWR2YW5jZWRcbiAqIGZ1bmN0aW9uYWxpdHkgd2lsbCBub3Qgd29yay4gUGFydGljbGVDb250YWluZXIgaW1wbGVtZW50cyBvbmx5IHRoZSBiYXNpYyBvYmplY3QgdHJhbnNmb3JtIChwb3NpdGlvbiwgc2NhbGUsIHJvdGF0aW9uKS5cbiAqIEFueSBvdGhlciBmdW5jdGlvbmFsaXR5IGxpa2UgdGludGluZywgbWFza2luZywgZXRjIHdpbGwgbm90IHdvcmsgb24gc3ByaXRlcyBpbiB0aGlzIGJhdGNoLlxuICpcbiAqIEl0J3MgZXh0cmVtZWx5IGVhc3kgdG8gdXNlIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQYXJ0aWNsZUNvbnRhaW5lcigpO1xuICpcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpXG4gKiB7XG4gKiAgICAgdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJteUltYWdlLnBuZ1wiKTtcbiAqICAgICBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEFuZCBoZXJlIHlvdSBoYXZlIGEgaHVuZHJlZCBzcHJpdGVzIHRoYXQgd2lsbCBiZSByZW5kZXJlciBhdCB0aGUgc3BlZWQgb2YgbGlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbbWF4U2l6ZT0xNTAwMF0ge251bWJlcn0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGF0IGNhbiBiZSByZW5kZXJlciBieSB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzXSB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyBvZiBjaGlsZHJlbiB0aGF0IHNob3VsZCBiZSB1cGxvYWRlZCB0byB0aGUgZ3B1IGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnNjYWxlPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBzY2FsZSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5wb3NpdGlvbj10cnVlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBwb3NpdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5yb3RhdGlvbj1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcm90YXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMudXZzPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCB1dnMgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuYWxwaGE9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIGFscGhhIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtiYXRjaFNpemU9MTUwMDBdIHtudW1iZXJ9IE51bWJlciBvZiBwYXJ0aWNsZXMgcGVyIGJhdGNoLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUNvbnRhaW5lcihtYXhTaXplLCBwcm9wZXJ0aWVzLCBiYXRjaFNpemUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBiYXRjaFNpemUgPSBiYXRjaFNpemUgfHwgMTUwMDA7IC8vQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG4gICAgbWF4U2l6ZSA9IG1heFNpemUgfHwgMTUwMDA7XG5cbiAgICAvLyBNYWtpbmcgc3VyZSB0aGUgYmF0Y2ggc2l6ZSBpcyB2YWxpZFxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICB2YXIgbWF4QmF0Y2hTaXplID0gMTYzODQ7XG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhCYXRjaFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgcHJvcGVydGllcyB0byBiZSBkeW5hbWljICh0cnVlKSAvIHN0YXRpYyAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFuW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmF0Y2hTaXplID0gYmF0Y2hTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICpcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlQ2hpbGRyZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBjYW52YXMgcmVuZGVyZXJpbmcuIElmIHRydWUgdGhlbiB0aGUgZWxlbWVudHMgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBuZWFyZXN0IHBpeGVsLiBUaGlzIHByb3ZpZGVzIGEgbmljZSBzcGVlZCBib29zdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZTtcbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbn1cblxuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBwcml2YXRlIHByb3BlcnRpZXMgYXJyYXkgdG8gZHluYW1pYyAvIHN0YXRpYyBiYXNlZCBvbiB0aGUgcGFzc2VkIHByb3BlcnRpZXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMge29iamVjdH0gVGhlIHByb3BlcnRpZXMgdG8gYmUgdXBsb2FkZWRcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnNldFByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKVxue1xuICAgIGlmICggcHJvcGVydGllcyApIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1swXSA9ICdzY2FsZScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5zY2FsZSA6IHRoaXMuX3Byb3BlcnRpZXNbMF07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMV0gPSAncG9zaXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucG9zaXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzFdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzJdID0gJ3JvdGF0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnJvdGF0aW9uIDogdGhpcy5fcHJvcGVydGllc1syXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1szXSA9ICd1dnMnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMudXZzIDogdGhpcy5fcHJvcGVydGllc1szXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1s0XSA9ICdhbHBoYScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5hbHBoYSA6IHRoaXMuX3Byb3BlcnRpZXNbNF07XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcblxuICAgIC8vIFRPRE8gZG9uJ3QgbmVlZCB0byFcbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAvLyAgUElYSS5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybS5jYWxsKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRhaW5lciB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHdlYmdsIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIoIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUgKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlLnJlbmRlciggdGhpcyApO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGZsYWcgdGhhdCBzdGF0aWMgZGF0YSBzaG91bGQgYmUgdXBkYXRlZCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoc21hbGxlc3RDaGlsZEluZGV4KVxue1xuICAgIHZhciBidWZmZXJJbmRleCA9IE1hdGguZmxvb3Ioc21hbGxlc3RDaGlsZEluZGV4IC8gdGhpcy5fYmF0Y2hTaXplKTtcbiAgICBpZiAoYnVmZmVySW5kZXggPCB0aGlzLl9idWZmZXJUb1VwZGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IGJ1ZmZlckluZGV4O1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciBpc1JvdGF0ZWQgPSB0cnVlO1xuXG4gICAgdmFyIHBvc2l0aW9uWCA9IDA7XG4gICAgdmFyIHBvc2l0aW9uWSA9IDA7XG5cbiAgICB2YXIgZmluYWxXaWR0aCA9IDA7XG4gICAgdmFyIGZpbmFsSGVpZ2h0ID0gMDtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZSA9IGNoaWxkLnRleHR1cmUuZnJhbWU7XG5cbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYSAqIGNoaWxkLmFscGhhO1xuXG4gICAgICAgIGlmIChjaGlsZC5yb3RhdGlvbiAlIChNYXRoLlBJICogMikgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZhc3Rlc3QgIHdheSB0byBvcHRpbWlzZSEgLSBpZiByb3RhdGlvbiBpcyAwIHRoZW4gd2UgY2FuIGF2b2lkIGFueSBraW5kIG9mIHNldFRyYW5zZm9ybSBjYWxsXG4gICAgICAgICAgICBpZiAoaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLngpICsgY2hpbGQucG9zaXRpb24ueCAgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnkpICsgY2hpbGQucG9zaXRpb24ueSAgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54O1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55O1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZC5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZFRyYW5zZm9ybSA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHkgfCAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoKSArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0KSArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICBjaGlsZC50ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgIGZyYW1lLngsXG4gICAgICAgICAgICBmcmFtZS55LFxuICAgICAgICAgICAgZnJhbWUud2lkdGgsXG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQsXG4gICAgICAgICAgICBwb3NpdGlvblgsXG4gICAgICAgICAgICBwb3NpdGlvblksXG4gICAgICAgICAgICBmaW5hbFdpZHRoLFxuICAgICAgICAgICAgZmluYWxIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIGlmICh0aGlzLl9idWZmZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcbn07XG4iLCJcbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVCdWZmZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlQnVmZmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFRoZSBwYXJ0aWNsZSBidWZmZXIgbWFuYWdlcyB0aGUgc3RhdGljIGFuZCBkeW5hbWljIGJ1ZmZlcnMgZm9yIGEgcGFydGljbGUgY29udGFpbmVyLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQnVmZmVyKGdsLCBwcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgc2l6ZSlcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleCBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhlIGJ1ZmZlciBjYW4gaG9sZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgZHluYW1pYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBzdGF0aWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgaWYoZHluYW1pY1Byb3BlcnR5RmxhZ3NbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRCdWZmZXJzKCk7XG5cbn1cblxuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQnVmZmVyO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5pbml0QnVmZmVycyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcHJvcGVydHk7XG5cbiAgICB2YXIgZHluYW1pY09mZnNldCA9IDA7XG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IGR5bmFtaWNPZmZzZXQ7XG4gICAgICAgIGR5bmFtaWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5keW5hbWljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG5cblxuICAgIC8vIHN0YXRpYyAvL1xuICAgIHZhciBzdGF0aWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBzdGF0aWNPZmZzZXQ7XG4gICAgICAgIHN0YXRpY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLnN0YXRpY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuc3RhdGljU3RyaWRlICogNCk7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZHluYW1pYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZER5bmFtaWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLmR5bmFtaWNEYXRhLCB0aGlzLmR5bmFtaWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuZHluYW1pY0RhdGEpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBzdGF0aWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWRTdGF0aWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5zdGF0aWNEYXRhLCB0aGlzLnN0YXRpY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLnN0YXRpY0RhdGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyB0byB0aGUgR1BVXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaSwgcHJvcGVydHk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnN0YXRpY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlQnVmZmVyLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5zdGF0aWNCdWZmZXIpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlU2hhZGVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZVNoYWRlcicpLFxuICAgIFBhcnRpY2xlQnVmZmVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUJ1ZmZlcicpLFxuICAgIG1hdGggICAgICAgICAgICA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgLy8gYW5kIG1heCBudW1iZXIgb2YgZWxlbWVudCBpbiB0aGUgaW5kZXggYnVmZmVyIGlzIDE2Mzg0ICogNiA9IDk4MzA0XG4gICAgLy8gQ3JlYXRpbmcgYSBmdWxsIGluZGV4IGJ1ZmZlciwgb3ZlcmhlYWQgaXMgOTgzMDQgKiAyID0gMTk2S29cbiAgICB2YXIgbnVtSW5kaWNlcyA9IDk4MzA0O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShudW1JbmRpY2VzKTtcblxuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgbnVtSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IG51bGw7XG5cbiAgICB0aGlzLnRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcbn1cblxuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3BhcnRpY2xlJywgUGFydGljbGVSZW5kZXJlcik7XG5cbi8qKlxuICogV2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IG5ldyBQYXJ0aWNsZVNoYWRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIpO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IGluZGV4LCBzbyA2NTUzNSAvIDYgPSAxMDkyMi5cblxuICAgIC8vdXBsb2FkIHRoZSBpbmRleCBkYXRhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBbXG4gICAgICAgIC8vIHZlcnRpY2VzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFZlcnRpY2VzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcG9zaXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbkNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRQb3NpdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJvdGF0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUm90YXRpb24sXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFJvdGF0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdXZzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRVdnMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBhbHBoYURhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRBbHBoYSxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgcGFydGljbGUgYmF0Y2guXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGJpbmQgdGhlIG1haW4gdGV4dHVyZVxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgLy8gYmluZCB0aGUgYnVmZmVyc1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgcGFydGljbGUgY29udGFpbmVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgY2hpbGRyZW4gPSBjb250YWluZXIuY2hpbGRyZW4sXG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIG1heFNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplO1xuXG4gICAgaWYodG90YWxDaGlsZHJlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZih0b3RhbENoaWxkcmVuID4gbWF4U2l6ZSlcbiAgICB7XG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBtYXhTaXplO1xuICAgIH1cblxuICAgIGlmKCFjb250YWluZXIuX2J1ZmZlcnMpXG4gICAge1xuICAgICAgICBjb250YWluZXIuX2J1ZmZlcnMgPSB0aGlzLmdlbmVyYXRlQnVmZmVycyggY29udGFpbmVyICk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29udGFpbmVyLmJsZW5kTW9kZSk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIG0gPSAgY29udGFpbmVyLndvcmxkVHJhbnNmb3JtLmNvcHkoIHRoaXMudGVtcE1hdHJpeCApO1xuICAgIG0ucHJlcGVuZCggdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXggKTtcbiAgICBnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgbS50b0FycmF5KHRydWUpKTtcbiAgICBnbC51bmlmb3JtMWYodGhpcy5zaGFkZXIudW5pZm9ybXMudUFscGhhLl9sb2NhdGlvbiwgY29udGFpbmVyLndvcmxkQWxwaGEpO1xuXG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHRleHR1cmUgaXMgYm91bmQuLlxuICAgIHZhciBiYXNlVGV4dHVyZSA9IGNoaWxkcmVuWzBdLl90ZXh0dXJlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgdGV4dHVyZSBoYXMgbm90IHVwZGF0ZWQgdGhlbiBsZXRzIG5vdCB1cGxvYWQgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmKCF0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUoYmFzZVRleHR1cmUpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZighY29udGFpbmVyLl9wcm9wZXJ0aWVzWzBdIHx8ICFjb250YWluZXIuX3Byb3BlcnRpZXNbM10pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgfVxuXG4gICAgLy8gbm93IGxldHMgdXBsb2FkIGFuZCByZW5kZXIgdGhlIGJ1ZmZlcnMuLlxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IHRvdGFsQ2hpbGRyZW47IGkgKz0gYmF0Y2hTaXplLCBqICs9IDEpXG4gICAge1xuICAgICAgICB2YXIgYW1vdW50ID0gKCB0b3RhbENoaWxkcmVuIC0gaSk7XG4gICAgICAgIGlmKGFtb3VudCA+IGJhdGNoU2l6ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50ID0gYmF0Y2hTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRhaW5lci5fYnVmZmVyc1tqXTtcblxuICAgICAgICAvLyB3ZSBhbHdheXMgdXBsb2FkIHRoZSBkeW5hbWljXG4gICAgICAgIGJ1ZmZlci51cGxvYWREeW5hbWljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuXG4gICAgICAgIC8vIHdlIG9ubHkgdXBsb2FkIHRoZSBzdGF0aWMgY29udGVudCB3aGVuIHdlIGhhdmUgdG8hXG4gICAgICAgIGlmKGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPT09IGopXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJ1ZmZlci51cGxvYWRTdGF0aWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gaiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5kIHRoZSBidWZmZXJcbiAgICAgICAgYnVmZmVyLmJpbmQoIHRoaXMuc2hhZGVyICk7XG5cbiAgICAgICAgIC8vIG5vdyBkcmF3IHRob3NlIHN1Y2thcyFcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgYW1vdW50ICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBvbmUgcGFydGljbGUgYnVmZmVyIGZvciBlYWNoIGNoaWxkIGluIHRoZSBjb250YWluZXIgd2Ugd2FudCB0byByZW5kZXIgYW5kIHVwZGF0ZXMgaW50ZXJuYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5nZW5lcmF0ZUJ1ZmZlcnMgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIGJ1ZmZlcnMgPSBbXSxcbiAgICAgICAgc2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemUsXG4gICAgICAgIGR5bmFtaWNQcm9wZXJ0eUZsYWdzID0gY29udGFpbmVyLl9wcm9wZXJ0aWVzLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gYmF0Y2hTaXplKVxuICAgIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKG5ldyBQYXJ0aWNsZUJ1ZmZlcihnbCwgdGhpcy5wcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgYmF0Y2hTaXplKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHZlcnRpY2llcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgdmVydGljZXMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFZlcnRpY2VzID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICB2YXIgc3ByaXRlLFxuICAgICAgICB0ZXh0dXJlLFxuICAgICAgICB0cmltLFxuICAgICAgICBzeCxcbiAgICAgICAgc3ksXG4gICAgICAgIHcwLCB3MSwgaDAsIGgxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xuXG4gICAgICAgIHNwcml0ZSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXTtcbiAgICAgICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZTtcbiAgICAgICAgc3ggPSBzcHJpdGUuc2NhbGUueDtcbiAgICAgICAgc3kgPSBzcHJpdGUuc2NhbGUueTtcblxuICAgICAgICBpZiAodGV4dHVyZS50cmltKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgICAgICB0cmltID0gdGV4dHVyZS50cmltO1xuXG4gICAgICAgICAgICB3MSA9IHRyaW0ueCAtIHNwcml0ZS5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBoMSA9IHRyaW0ueSAtIHNwcml0ZS5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtc3ByaXRlLmFuY2hvci54KTtcbiAgICAgICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtc3ByaXRlLmFuY2hvci54O1xuXG4gICAgICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXNwcml0ZS5hbmNob3IueSk7XG4gICAgICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC1zcHJpdGUuYW5jaG9yLnk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBwb3NpdGlvbnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFBvc2l0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUG9zaXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucG9zaXRpb247XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcm90YXRpb24gdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFJvdGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUm90YXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucm90YXRpb247XG5cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVSb3RhdGlvbjtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgVXZzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRVdnMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlVXZzID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLl90ZXh0dXJlLl91dnM7XG5cbiAgICAgICAgaWYgKHRleHR1cmVVdnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSB0ZXh0dXJlVXZzLngwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZXh0dXJlVXZzLnkwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdGV4dHVyZVV2cy54MTtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gdGV4dHVyZVV2cy55MTtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB0ZXh0dXJlVXZzLngyO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gdGV4dHVyZVV2cy55MjtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB0ZXh0dXJlVXZzLngzO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gdGV4dHVyZVV2cy55MztcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8geW91IGtub3cgdGhpcyBjYW4gYmUgZWFzaWVyIVxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBhbHBoYSB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkQWxwaGEgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZUFscGhhID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLmFscGhhO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZUFscGhhO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVSZW5kZXJlci5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuICAgIHRoaXMudGVtcE1hdHJpeCA9IG51bGw7XG59O1xuIiwidmFyIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVTaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBUZXh0dXJlU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFQb3NpdGlvbkNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVNjYWxlOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFSb3RhdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIHZlYzIgdiA9IGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAnICAgdi54ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIGNvcyhhUm90YXRpb24pIC0gKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIHNpbihhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdi55ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIHNpbihhUm90YXRpb24pICsgKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIGNvcyhhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdiA9IHYgKyBhUG9zaXRpb25Db29yZDsnLFxuXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyh2LCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGhlbGxvXG4gICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCB1QWxwaGE7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3IgKiB1QWxwaGE7JyxcbiAgICAgICAgICAgICcgIGlmIChjb2xvci5hID09IDAuMCkgZGlzY2FyZDsnLFxuICAgICAgICAgICAgJyAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdUFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFQb3NpdGlvbkNvb3JkOiAwLFxuICAgICAgICAgICAvLyBhU2NhbGU6ICAgICAgICAgMCxcbiAgICAgICAgICAgIGFSb3RhdGlvbjogICAgICAwXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVEVNUCBIQUNLXG5cbn1cblxuUGFydGljbGVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlU2hhZGVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVNoYWRlcjtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHN5c3RlbSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgc3lzdGVtIHRoaXMgcmVuZGVyZXIgaXMgZm9yLlxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXSB7bnVtYmVyfSBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcmVuZGVyZWQgYXJlYSAoc2hvd24gaWYgbm90IHRyYW5zcGFyZW50KS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5yb3VuZFBpeGVscz1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBTeXN0ZW1SZW5kZXJlcihzeXN0ZW0sIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB1dGlscy5zYXlIZWxsbyhzeXN0ZW0pO1xuXG4gICAgLy8gcHJlcGFyZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpIGluIENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tpXSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgb3B0aW9ucyA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHNlZSBQSVhJLlJFTkRFUkVSX1RZUEVcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgODAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDgwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgNjAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy52aWV3ID0gb3B0aW9ucy52aWV3IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG9wdGlvbnMucmVzb2x1dGlvbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBvcHRpb25zLnRyYW5zcGFyZW50O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgc2hvdWxkIGJlIHJlc2l6ZWQgYXV0b21hdGljYWxseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvcHRpb25zLmF1dG9SZXNpemUgfHwgZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIGJsZW5kIG1vZGVzIHVzZWZ1bCBmb3IgdGhpcyByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG1peGVkPn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgZmxhZyBhZmZlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50cyBvZiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgcmV0YWluZWQgYWZ0ZXIgcmVuZGVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3Igbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyBOT1QgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBhIGNhbnZhcyBzaXplZCBmaWxsUmVjdCBvcGVyYXRpb24gZXZlcnkgZnJhbWUgdG8gc2V0IHRoZSBjYW52YXMgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBjbGVhclJlY3QgdG8gY2xlYXIgdGhlIGNhbnZhcyBldmVyeSBmcmFtZS5cbiAgICAgKiBEaXNhYmxlIHRoaXMgYnkgc2V0dGluZyB0aGlzIHRvIGZhbHNlLiBGb3IgZXhhbXBsZSBpZiB5b3VyIGdhbWUgaGFzIGEgY2FudmFzIGZpbGxpbmcgYmFja2dyb3VuZCBpbWFnZSB5b3Ugb2Z0ZW4gZG9uJ3QgbmVlZCB0aGlzIHNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHRcbiAgICAgKi9cbiAgICB0aGlzLmNsZWFyQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICAgICAqIEhhbmR5IGZvciBjcmlzcCBwaXhlbCBhcnQgYW5kIHNwZWVkIG9uIGxlZ2FjeSBkZXZpY2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gb3B0aW9ucy5yb3VuZFBpeGVscztcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmEgPSBbMCwgMCwgMCwgMF07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9ICcjMDAwMDAwJztcblxuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yOyAvLyBydW4gYmcgY29sb3Igc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgdHJhbnNmb3JtOnt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKX0sIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3Qgcm9vdCBvYmplY3QgdGhhdCB0aGUgcmVuZGVyZXIgdHJpZWQgdG8gcmVuZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3lzdGVtUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFN5c3RlbVJlbmRlcmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciB0byBmaWxsIGlmIG5vdCB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlN5c3RlbVJlbmRlcmVyI1xuICAgICAqL1xuICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSB1dGlscy5oZXgyc3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB1dGlscy5oZXgycmdiKHZhbCwgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBjYW52YXMgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMudmlldy53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGhpcy52aWV3LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgICAgICB0aGlzLnZpZXcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpIHtcbiAgICBpZiAocmVtb3ZlVmlldyAmJiB0aGlzLnZpZXcucGFyZW50Tm9kZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMudmlldyk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgdGhpcy52aWV3ID0gbnVsbDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IDA7XG5cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBmYWxzZTtcblxuICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcblxuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDA7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IG51bGw7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gbnVsbDtcbn07XG4iLCJ2YXIgU3lzdGVtUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9TeXN0ZW1SZW5kZXJlcicpLFxuICAgIENhbnZhc01hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi91dGlscy9DYW52YXNNYXNrTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBTeXN0ZW1SZW5kZXJlci5jYWxsKHRoaXMsICdDYW52YXMnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuQ0FOVkFTO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMudmlldy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIGZsYWcgY29udHJvbGxpbmcgY2FudmFzIHJlZnJlc2guXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVmcmVzaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBhIENhbnZhc01hc2tNYW5hZ2VyLCBoYW5kbGVzIG1hc2tpbmcgd2hlbiB1c2luZyB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNNYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IENhbnZhc01hc2tNYW5hZ2VyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIHByb3BlcnR5IHVzZWQgdG8gc2V0IHRoZSBjYW52YXMgc21vb3RoaW5nIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnaW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcblxuICAgIGlmICghdGhpcy5jb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ3dlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ29JbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB0aGlzLl9tYXBCbGVuZE1vZGVzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHtcbiAgICAgICAgd29ybGRUcmFuc2Zvcm06IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgICAgICB3b3JsZEFscGhhOiAxXG4gICAgfTtcblxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oQ2FudmFzUmVuZGVyZXIpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byB0aGlzIGNhbnZhcyB2aWV3XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSB0aGUgb2JqZWN0IHRvIGJlIHJlbmRlcmVkXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KVxue1xuICAgIHRoaXMuZW1pdCgncHJlcmVuZGVyJyk7XG5cbiAgICB2YXIgY2FjaGVQYXJlbnQgPSBvYmplY3QucGFyZW50O1xuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gb2JqZWN0O1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIG9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIG9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTICYmIHRoaXMudmlldy5zY3JlZW5jYW52YXMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpXG4gICAge1xuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGggLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlckRpc3BsYXlPYmplY3Qob2JqZWN0LCB0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciBhbmQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSBDYW52YXMgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIFtyZW1vdmVWaWV3PWZhbHNlXSB7Ym9vbGVhbn0gUmVtb3ZlcyB0aGUgQ2FudmFzIGVsZW1lbnQgZnJvbSB0aGUgRE9NLlxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIGNhbGwgdGhlIGJhc2UgZGVzdHJveVxuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcywgcmVtb3ZlVmlldyk7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5T2JqZWN0IHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgY29udGV4dClcbntcbiAgICB2YXIgdGVtcENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyQ2FudmFzKHRoaXMpO1xuICAgIHRoaXMuY29udGV4dCA9IHRlbXBDb250ZXh0O1xufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBQSVhJLlN5c3RlbVJlbmRlcmVyI3Jlc2l6ZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKiBAcGFyYW0ge251bWJlcn0gaFxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHcsIGgpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xuXG4gICAgLy9yZXNldCB0aGUgc2NhbGUgbW9kZS4uIG9kZGx5IHRoaXMgc2VlbXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgY2FudmFzIGlzIHJlc2l6ZWQuXG4gICAgLy9zdXJlbHkgYSBicm93c2VyIGJ1Zz8/IExldCBwaXhpIGZpeCB0aGF0IGZvciB5b3UuLlxuICAgIGlmKHRoaXMuc21vb3RoUHJvcGVydHkpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHRbdGhpcy5zbW9vdGhQcm9wZXJ0eV0gPSAoQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVCA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogTWFwcyBQaXhpIGJsZW5kIG1vZGVzIHRvIGNhbnZhcyBibGVuZCBtb2Rlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX21hcEJsZW5kTW9kZXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5ibGVuZE1vZGVzKVxuICAgIHtcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzID0ge307XG5cbiAgICAgICAgaWYgKHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnbXVsdGlwbHknO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NjcmVlbic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSAnb3ZlcmxheSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnZGFya2VuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MSUdIVEVOXSAgICAgICA9ICdsaWdodGVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdjb2xvci1kb2RnZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnY29sb3ItYnVybic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnaGFyZC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSAnc29mdC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnZGlmZmVyZW5jZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnZXhjbHVzaW9uJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdodWUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gJ3NhdHVyYXRlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl0gICAgICAgICA9ICdjb2xvcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSAnbHVtaW5vc2l0eSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29vbCBuZXcgYmxlbmQgbW9kZXMgaW4gY2FudmFzICdjb3VnaCcgaWUgJ2NvdWdoJ1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNpemUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGNhbnZhc1xuICovXG5mdW5jdGlvbiBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgQ2FudmFzIG9iamVjdCB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBDYW52YXNCdWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogQSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHR3by1kaW1lbnNpb25hbCByZW5kZXJpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59XG5cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0J1ZmZlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FudmFzQnVmZmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIGJ1ZmZlciBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ2FudmFzQnVmZmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdmFsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGNhbnZhcyB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZSBDYW52YXNCdWZmZXIgY2xhc3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbnZhc1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgY2FudmFzLlxuICpcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBjYW52YXMgcmVuZGVyZXIgdG8gZHJhdyB0aGUgcHJpbWl0aXZlIGdyYXBoaWNzIGRhdGEuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNHcmFwaGljcyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNHcmFwaGljcztcblxuLypcbiAqIFJlbmRlcnMgYSBHcmFwaGljcyBvYmplY3QgdG8gYSBjYW52YXMuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgYWN0dWFsIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSAyZCBkcmF3aW5nIG1ldGhvZCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciB3b3JsZEFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuICAgIGlmIChncmFwaGljcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3NUaW50KGdyYXBoaWNzKTtcbiAgICAgICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLl9maWxsVGludDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEuX2xpbmVUaW50O1xuXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZSBjbG9zZSB0aGUgcGF0aCAtIG11Y2ggbmVhdGVyIDopXG4gICAgICAgICAgICBpZiAocG9pbnRzWzBdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAmJiBwb2ludHNbMV0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbENvbG9yIHx8IGRhdGEuZmlsbENvbG9yID09PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmZpbGxBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggZmlsbENvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUud2lkdGgsIHNoYXBlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLDAsMipNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVsbGlwc2UgY29kZSB0YWtlbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcblxuICAgICAgICAgICAgdmFyIHcgPSBzaGFwZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB2YXIgaCA9IHNoYXBlLmhlaWdodCAqIDI7XG5cbiAgICAgICAgICAgIHZhciB4ID0gc2hhcGUueCAtIHcvMjtcbiAgICAgICAgICAgIHZhciB5ID0gc2hhcGUueSAtIGgvMjtcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIGthcHBhID0gMC41NTIyODQ4LFxuICAgICAgICAgICAgICAgIG94ID0gKHcgLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgb3kgPSAoaCAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgeGUgPSB4ICsgdywgICAgICAgICAgIC8vIHgtZW5kXG4gICAgICAgICAgICAgICAgeWUgPSB5ICsgaCwgICAgICAgICAgIC8vIHktZW5kXG4gICAgICAgICAgICAgICAgeG0gPSB4ICsgdyAvIDIsICAgICAgIC8vIHgtbWlkZGxlXG4gICAgICAgICAgICAgICAgeW0gPSB5ICsgaCAvIDI7ICAgICAgIC8vIHktbWlkZGxlXG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG1hc2tcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3Mgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgbWFza1xuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGNvbnRleHQgMmQgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciBsZW4gPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gVE9ETyAtIG5lZWQgdG8gYmUgVW5kZWZpbmVkIVxuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgcnggPSBzaGFwZS54O1xuICAgICAgICAgICAgdmFyIHJ5ID0gc2hhcGUueTtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcbiAgICAgICAgICAgIHZhciByYWRpdXMgPSBzaGFwZS5yYWRpdXM7XG5cbiAgICAgICAgICAgIHZhciBtYXhSYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDIgfCAwO1xuICAgICAgICAgICAgcmFkaXVzID0gcmFkaXVzID4gbWF4UmFkaXVzID8gbWF4UmFkaXVzIDogcmFkaXVzO1xuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRpbnQgb2YgYSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3MgdGhhdCB3aWxsIGhhdmUgaXRzIHRpbnQgdXBkYXRlZFxuICpcbiAqL1xuQ2FudmFzR3JhcGhpY3MudXBkYXRlR3JhcGhpY3NUaW50ID0gZnVuY3Rpb24gKGdyYXBoaWNzKVxue1xuICAgIGlmIChncmFwaGljcy50aW50ID09PSAweEZGRkZGRiAmJiBncmFwaGljcy5fcHJldlRpbnQgPT09IGdyYXBoaWNzLnRpbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyYXBoaWNzLl9wcmV2VGludCA9IGdyYXBoaWNzLnRpbnQ7XG5cbiAgICB2YXIgdGludFIgPSAoZ3JhcGhpY3MudGludCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50RyA9IChncmFwaGljcy50aW50ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgdGludEIgPSAoZ3JhcGhpY3MudGludCAmIDB4RkYpLyAyNTU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLmZpbGxDb2xvciB8IDA7XG4gICAgICAgIHZhciBsaW5lQ29sb3IgPSBkYXRhLmxpbmVDb2xvciB8IDA7XG5cbiAgICAgICAgLypcbiAgICAgICAgdmFyIGNvbG9yUiA9IChmaWxsQ29sb3IgPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgdmFyIGNvbG9yRyA9IChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JCID0gKGZpbGxDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgZmlsbENvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG5cbiAgICAgICAgY29sb3JSID0gKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckcgPSAobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgY29sb3JCID0gKGxpbmVDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgbGluZUNvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG4gICAgICAgICovXG5cbiAgICAgICAgLy8gc3VwZXIgaW5saW5lIGNvcyBpbSBhbiBvcHRpbWl6YXRpb24gTkFaSSA6KVxuICAgICAgICBkYXRhLl9maWxsVGludCA9ICgoKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgoZmlsbENvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAoZmlsbENvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuICAgICAgICBkYXRhLl9saW5lVGludCA9ICgoKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAobGluZUNvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuXG4gICAgfVxufTtcblxuIiwidmFyIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi9DYW52YXNHcmFwaGljcycpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBtYXNraW5nLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ2FudmFzTWFza01hbmFnZXIoKVxue31cblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FudmFzTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc01hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgc3RhY2sgb2YgbWFza3MuXG4gKlxuICogQHBhcmFtIG1hc2tEYXRhIHtvYmplY3R9IHRoZSBtYXNrRGF0YSB0aGF0IHdpbGwgYmUgcHVzaGVkXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSwgcmVuZGVyZXIpXG57XG5cbiAgICByZW5kZXJlci5jb250ZXh0LnNhdmUoKTtcblxuICAgIHZhciBjYWNoZUFscGhhID0gbWFza0RhdGEuYWxwaGE7XG4gICAgdmFyIHRyYW5zZm9ybSA9IG1hc2tEYXRhLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgLy9UT0RPIHN1cG9ydCBzcHJpdGUgYWxwaGEgbWFza3M/P1xuICAgIC8vbG90cyBvZiBlZmZvcnQgcmVxdWlyZWQuIElmIGRlbWFuZCBpcyBncmVhdCBlbm91Z2guLlxuICAgIGlmKCFtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrKG1hc2tEYXRhLCByZW5kZXJlci5jb250ZXh0KTtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5jbGlwKCk7XG4gICAgfVxuXG4gICAgbWFza0RhdGEud29ybGRBbHBoYSA9IGNhY2hlQWxwaGE7XG59O1xuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dCB0byB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZSB0aGUgbWFzayB3YXMgYXBwbGllZC5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLmNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7fTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2RzIGZvciBTcHJpdGUvVGV4dHVyZSB0aW50aW5nLlxuICogQHN0YXRpY1xuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG52YXIgQ2FudmFzVGludGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1RpbnRlcjtcblxuLyoqXG4gKiBCYXNpY2FsbHkgdGhpcyBtZXRob2QganVzdCBuZWVkcyBhIHNwcml0ZSBhbmQgYSBjb2xvciBhbmQgdGludHMgdGhlIHNwcml0ZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSB0aW50ZWQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlID0gZnVuY3Rpb24gKHNwcml0ZSwgY29sb3IpXG57XG4gICAgdmFyIHRleHR1cmUgPSBzcHJpdGUudGV4dHVyZTtcblxuICAgIGNvbG9yID0gQ2FudmFzVGludGVyLnJvdW5kQ29sb3IoY29sb3IpO1xuXG4gICAgdmFyIHN0cmluZ0NvbG9yID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgdGV4dHVyZS50aW50Q2FjaGUgPSB0ZXh0dXJlLnRpbnRDYWNoZSB8fCB7fTtcblxuICAgIGlmICh0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0pXG4gICAge1xuICAgICAgICByZXR1cm4gdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdO1xuICAgIH1cblxuICAgICAvLyBjbG9uZSB0ZXh0dXJlLi5cbiAgICB2YXIgY2FudmFzID0gQ2FudmFzVGludGVyLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8vQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWwodGV4dHVyZSwgc3RyaW5nQ29sb3IsIGNhbnZhcyk7XG4gICAgQ2FudmFzVGludGVyLnRpbnRNZXRob2QodGV4dHVyZSwgY29sb3IsIGNhbnZhcyk7XG5cbiAgICBpZiAoQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSlcbiAgICB7XG4gICAgICAgIC8vIGlzIHRoaXMgYmV0dGVyP1xuICAgICAgICB2YXIgdGludEltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHRpbnRJbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKCk7XG5cbiAgICAgICAgdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdID0gdGludEltYWdlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSBjYW52YXM7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBub3QgY29udmVydGluZyB0aGUgdGV4dHVyZSB0byBhbiBpbWFnZSB0aGVuIHdlIG5lZWQgdG8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXNcbiAgICAgICAgQ2FudmFzVGludGVyLmNhbnZhcyA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdtdWx0aXBseScgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcblxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdvdmVybGF5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoT3ZlcmxheSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1hdG9wJztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgLy8gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG59O1xuXG4vKipcbiAqIFRpbnQgYSB0ZXh0dXJlIHBpeGVsIHBlciBwaXhlbC5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcbiAgICB2YXIgciA9IHJnYlZhbHVlc1swXSwgZyA9IHJnYlZhbHVlc1sxXSwgYiA9IHJnYlZhbHVlc1syXTtcblxuICAgIHZhciBwaXhlbERhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICB2YXIgcGl4ZWxzID0gcGl4ZWxEYXRhLmRhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBpeGVscy5sZW5ndGg7IGkgKz0gNClcbiAgICB7XG4gICAgICAgIHBpeGVsc1tpKzBdICo9IHI7XG4gICAgICAgIHBpeGVsc1tpKzFdICo9IGc7XG4gICAgICAgIHBpeGVsc1tpKzJdICo9IGI7XG4gICAgfVxuXG4gICAgY29udGV4dC5wdXRJbWFnZURhdGEocGl4ZWxEYXRhLCAwLCAwKTtcbn07XG5cbi8qKlxuICogUm91bmRzIHRoZSBzcGVjaWZpZWQgY29sb3IgYWNjb3JkaW5nIHRvIHRoZSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbC5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHJvdW5kLCBzaG91bGQgYmUgYSBoZXggY29sb3JcbiAqL1xuQ2FudmFzVGludGVyLnJvdW5kQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IpXG57XG4gICAgdmFyIHN0ZXAgPSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbDtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcblxuICAgIHJnYlZhbHVlc1swXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1swXSAvIHN0ZXApICogc3RlcCk7XG4gICAgcmdiVmFsdWVzWzFdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzFdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMl0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMl0gLyBzdGVwKSAqIHN0ZXApO1xuXG4gICAgcmV0dXJuIHV0aWxzLnJnYjJoZXgocmdiVmFsdWVzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGNhcCB3aGVuIHJvdW5kaW5nIGNvbG9ycy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsID0gODtcblxuLyoqXG4gKiBUaW50IGNhY2hlIGJvb2xlYW4gZmxhZy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jb252ZXJ0VGludFRvSW1hZ2UgPSBmYWxzZTtcblxuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCwgY29uc2VxdWVudGx5IHRoZSBhYmlsaXR5IHRvIHRpbnQgdXNpbmcgdGhlIG11bHRpcGx5IG1ldGhvZC5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA9IHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKTtcblxuLyoqXG4gKiBUaGUgdGludGluZyBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQuXG4gKlxuICovXG5DYW52YXNUaW50ZXIudGludE1ldGhvZCA9IENhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA/IENhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5IDogIENhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsO1xuIiwidmFyIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcblx0dXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIFRleHR1cmVNYW5hZ2VyID0gZnVuY3Rpb24oZ2wpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyB0cmFjayB0ZXh0dXJlcyBpbiB0aGUgcmVuZGVyZXIgc28gd2UgY2FuIG5vIGxvbmdlciBsaXN0ZW4gdG8gdGhlbSBvbiBkZXN0cnVjdGlvbi5cblx0dGhpcy5fbWFuYWdlZFRleHR1cmVzID0gW107XG4gICAgdGhpcy5nbFRleHR1cmVzID0ge307XG5cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5nZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW5kL29yIENyZWF0ZXMgYSBXZWJHTCB0ZXh0dXJlIGZvciB0aGUgcmVuZGVyZXIncyBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdXBkYXRlXG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuXHRpZiAoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGdsVGV4dHVyZSA9IHRoaXMuZ2xUZXh0dXJlc1t0ZXh0dXJlLnVpZF0vL3RleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgaWYgKCFnbFRleHR1cmUpXG4gICAge1xuICAgICAgICBnbFRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcbiAgICAgICAgZ2xUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSB0cnVlXG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgLy8gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXSA9IGdsVGV4dHVyZTtcblxuICAgICAgICB0ZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9uKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICBnbFRleHR1cmUudXBsb2FkKHRleHR1cmUuc291cmNlKTtcbiAgICBcbiAgICAvL1RPRE8gY2hlY2sgaXMgcG93ZXIgb2YgdHdvLi5cbiAgICBnbFRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cblxuICAgIC8vIFRPRE8gY2hlY2sgZm9yIHNjYWxpbmcgdHlwZVxuICAgIGdsVGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKCk7XG5cbiAgICByZXR1cm4gIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTFxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gZGVzdHJveVxuICovXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlLCBfc2tpcFJlbW92ZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0pXG4gICAge1xuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG5cblxuICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcblxuICAgICAgICBpZiAoIV9za2lwUmVtb3ZlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5pbmRleE9mKHRleHR1cmUpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5fbWFuYWdlZFRleHR1cmVzLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKClcbntcblx0Ly8gZW1wdHkgYWxsIHRoZSBvbGQgZ2wgdGV4dHVyZXMgYXMgdGhleSBhcmUgdXNlbGVzcyBub3dcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzW2ldO1xuICAgICAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuICAgIC8vIGRlc3Ryb3kgbWFuYWdlZCB0ZXh0dXJlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIHRoaXMuZGVzdHJveVRleHR1cmUodGV4dHVyZSwgdHJ1ZSk7XG4gICAgICAgIHRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9mZignZGlzcG9zZScsIHRoaXMuZGVzdHJveVRleHR1cmUsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcyA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZU1hbmFnZXI7XG5cbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgU2hhZGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIE1hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9NYXNrTWFuYWdlcicpLFxuICAgIFN0ZW5jaWxNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlcicpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBCbGVuZE1vZGVNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4vdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBGWEFBRmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBUZXh0dXJlTWFuYWdlciA9IHJlcXVpcmUoJy4vVGV4dHVyZU1hbmFnZXInKSxcbiAgICBjcmVhdGVDb250ZXh0ID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuY3JlYXRlQ29udGV4dCxcbiAgICBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aScpLFxuICAgIG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpID0gcmVxdWlyZSgnLi91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFdlYkdMUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIHdlYkdMIGVuYWJsZWQgY2FudmFzLiBUaGlzIHJlbmRlcmVyXG4gKiBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMLiBUaGlzIFJlbmRlciB3b3JrcyBieSBhdXRvbWF0aWNhbGx5IG1hbmFnaW5nIHdlYkdMQmF0Y2hzLlxuICogU28gbm8gbmVlZCBmb3IgU3ByaXRlIEJhdGNoZXMgb3IgU3ByaXRlIENsb3Vkcy5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIHZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9MF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9MF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMuIElmIG5vdCBhdmFpbGFibGUgbmF0aXZlbHkgdGhlbiBGWEFBIGFudGlhbGlhc2luZyBpcyB1c2VkXG4gKiBAcGFyYW0gW29wdGlvbnMuZm9yY2VGWEFBPWZhbHNlXSB7Ym9vbGVhbn0gZm9yY2VzIEZYQUEgYW50aWFsaWFzaW5nIHRvIGJlIHVzZWQgb3ZlciBuYXRpdmUuIEZYQUEgaXMgZmFzdGVyLCBidXQgbWF5IG5vdCBhbHdheXMgbG9vayBhcyBncmVhdFxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy4gSWYgeW91IHdpc2ggdG8gc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSAqbXVzdCogc2V0IHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byBgdHJ1ZWAuXG4gKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmXG4gKiAgICAgIHlvdSBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0LlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ1dlYkdMJywgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIHJlbmRlcmVyIGFzIGEgc3RhbmRhcmRpc2VkIGNvbnN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9Ly9cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0w7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gdGhpcy5oYW5kbGVDb250ZXh0TG9zdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5oYW5kbGVDb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gY3JlYXRlIGEgbmV3IHdlYmdsIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgICAgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQsXG4gICAgICAgIGFudGlhbGlhczogb3B0aW9ucy5hbnRpYWxpYXMsXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnRyYW5zcGFyZW50ICE9PSAnbm90TXVsdGlwbGllZCcsXG4gICAgICAgIHN0ZW5jaWw6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICB9O1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYVszXSA9IHRoaXMudHJhbnNwYXJlbnQgPyAwIDogMTtcblxuICAgIC8qKlxuICAgICAqIERlYWxzIHdpdGggbWFuYWdpbmcgdGhlIHNoYWRlciBwcm9ncmFtcyBhbmQgdGhlaXIgYXR0cmlicy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBuZXcgU2hhZGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1hc2tzIHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWFza01hbmFnZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG5ldyBNYXNrTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyID0gbmV3IFN0ZW5jaWxNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRmlsdGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlck1hbmFnZXIgPSBuZXcgRmlsdGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIGJsZW5kTW9kZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmxlbmRNb2RlTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBuZXcgQmxlbmRNb2RlTWFuYWdlcih0aGlzKTtcblxuICAgIFxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIE9iamVjdFJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5PYmplY3RSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG5ldyBPYmplY3RSZW5kZXJlcih0aGlzKTtcblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIGNvbnRleHQgc28gaXQgaXMgcmVhZHkgZm9yIHRoZSBtYW5hZ2Vycy5cbiAgICB0aGlzLmdsID0gY3JlYXRlQ29udGV4dCh0aGlzLnZpZXcsIHRoaXMuX2NvbnRleHRPcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXRDb250ZXh0KCk7XG5cbiAgICAvLyBtYXAgc29tZSB3ZWJHTCBibGVuZCBhbmQgZHJhd21vZGVzLi5cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wpO1xuICAgIHRoaXMuZHJhd01vZGVzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wpXG5cbiAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXR9XG4gICAgICovXG4gICAgdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUZXh0dXJlTG9jYXRpb24gPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oV2ViR0xSZW5kZXJlcik7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgV2ViR0wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLl9pbml0Q29udGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgbWFuYWdlci4uLlxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hbmFnZXIoZ2wpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBkZWZhdWx0IHBpeGkgc2V0dGluZ3MuLlxuICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG5cblxuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBudWxsLCB0aGlzLnJlc29sdXRpb24sIHRydWUpO1xuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5jbGVhckNvbG9yID0gdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYTtcbiAgICBcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQodGhpcy5yb290UmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMuZW1pdCgnY29udGV4dCcsIGdsKTtcblxuICAgIC8vIHNldHVwIHRoZSB3aWR0aC9oZWlnaHQgcHJvcGVydGllcyBhbmQgZ2wgdmlld3BvcnRcbiAgICB0aGlzLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7ICAgIFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gaXRzIHdlYkdMIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIC8vIG5vIHBvaW50IHJlbmRlcmluZyBpZiBvdXIgY29udGV4dCBoYXMgYmVlbiBibG93biB1cCFcbiAgICBpZiAodGhpcy5nbC5pc0NvbnRleHRMb3N0KCkpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gZGlzcGxheU9iamVjdDtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IGRpc3BsYXlPYmplY3QucGFyZW50O1xuICAgIGRpc3BsYXlPYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIGRpc3BsYXlPYmplY3QudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnJvb3RSZW5kZXJUYXJnZXQsIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpOy8vdGhpcy5wcm9qZWN0aW9uKTtcblxuICAgIHRoaXMuZW1pdCgncG9zdHJlbmRlcicpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgRGlzcGxheSBPYmplY3QuXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0gcmVuZGVyVGFyZ2V0IHtQSVhJLlJlbmRlclRhcmdldH0gVGhlIHJlbmRlciB0YXJnZXQgdG8gdXNlIHRvIHJlbmRlciB0aGlzIGRpc3BsYXkgb2JqZWN0XG4gKlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJEaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHJlbmRlclRhcmdldCwgY2xlYXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgdGhpcy5iaW5kUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG5cbiAgICBpZihjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IHRoZSBmaWx0ZXIgbWFuYWdlclxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5zZXRGaWx0ZXJTdGFjayggcmVuZGVyVGFyZ2V0LmZpbHRlclN0YWNrICk7XG5cbiAgICAvLyByZW5kZXIgdGhlIHNjZW5lIVxuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyV2ViR0wodGhpcyk7XG5cbiAgICAvLyBmaW5pc2ggdGhlIGN1cnJlbnQgcmVuZGVyZXIuLlxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdGhlIG9uZSBnaXZlbiBpbiBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gb2JqZWN0UmVuZGVyZXIge1BJWEkuT2JqZWN0UmVuZGVyZXJ9IFRoZSBvYmplY3QgcmVuZGVyZXIgdG8gdXNlLlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRPYmplY3RSZW5kZXJlciA9IGZ1bmN0aW9uIChvYmplY3RSZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyZXIgPT09IG9iamVjdFJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0b3AoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG9iamVjdFJlbmRlcmVyO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHdlYkdMIHZpZXcgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB3ZWJHTCB2aWV3XG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB3ZWJHTCB2aWV3XG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9PT0gdGhpcy5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSB0aGUgbmV3IHJlbmRlciB0YXJnZXRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgaWYocmVuZGVyVGFyZ2V0ICE9PSB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcblxuICAgICAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLnNldE1hc2tTdGFjayggcmVuZGVyVGFyZ2V0LnN0ZW5jaWxNYXNrU3RhY2sgKTtcbiAgICB9XG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKS8vcHJvamVjdGlvbiwgYnVmZmVyKVxue1xuICAgIC8vVE9ETyBjYWNoZVxuICAgIGlmKHRoaXMuX2FjdGl2ZVNoYWRlciAhPT0gc2hhZGVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlU2hhZGVyID0gc2hhZGVyO1xuICAgICAgICBzaGFkZXIuYmluZCgpO1xuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgfVxufVxuXG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvY2F0aW9uKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvL1RPRE8gdGVzdCBwZXJmIG9mIGNhY2hlP1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gfHwgMDtcblxuICAgIGlmKHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiAhPT0gbG9jYXRpb24pLy9cbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbiApO1xuICAgIH1cblxuICAgIC8vVE9ETyAtIGNhbiB3ZSBjYWNoZSB0aGlzIHRleHR1cmUgdG9vP1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOyAgICAgIFxuICAgIFxuICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBiaW5kIHRoZSB0ZXh0dXJlLi5cbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0uYmluZCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEhhbmRsZXMgYSBsb3N0IHdlYmdsIGNvbnRleHRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5oYW5kbGVDb250ZXh0TG9zdCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGEgcmVzdG9yZWQgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnJlbW92ZUFsbCgpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgKGV2ZW50IGxpc3RlbmVycywgc3ByaXRlYmF0Y2gsIGV0Yy4uLilcbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldylcbntcbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICAvLyByZW1vdmUgbGlzdGVuZXJzXG4gICAgdGhpcy52aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0KTtcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCk7XG5cbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLmRlc3Ryb3lBbGwoKTtcblxuICAgIC8vIGNhbGwgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMudWlkID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIG1hbmFnZXJzXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLm1hc2tNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gbnVsbDtcbiAgICB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLnVzZVByb2dyYW0obnVsbCk7XG4gICAgdGhpcy5nbCA9IG51bGw7XG59O1xuXG4iLCJ2YXIgRGVmYXVsdFNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgUElYSSBmaWx0ZXIuIEN1cnJlbnRseSBvbmx5IFdlYkdMIHN1cHBvcnRzIGZpbHRlcnMuXG4gKiBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIGZpbHRlciB0aGlzIHNob3VsZCBiZSB5b3VyIGJhc2UgY2xhc3MuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHZlcnRleFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdmVydGV4IHNoYWRlciBzb3VyY2UgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBmcmFnbWVudFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIHVuaWZvcm1zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1bmlmb3JtcyBmb3IgdGhpcyBmaWx0ZXIuXG4gKi9cbmZ1bmN0aW9uIEFic3RyYWN0RmlsdGVyKHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zKVxue1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygc2hhZGVyc1xuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlcnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHRyYSBwYWRkaW5nIHRoYXQgdGhlIGZpbHRlciBtaWdodCBuZWVkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIHZlcnRleCBzaGFkZXJcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmdbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmVydGV4U3JjID0gdmVydGV4U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIG9mIHRoZSBmcmFtZW50IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgLy9UT0RPIGEgcmVtaW5kZXIgLSB3b3VsZCBiZSBjb29sIHRvIGhhdmUgbG93ZXIgcmVzIGZpbHRlcnMgYXMgdGhpcyB3b3VsZCBnaXZlIGJldHRlciBwZXJmb3JtYW5jZS5cblxuICAgIC8vdHlwZW9mIGZyYWdtZW50U3JjID09PSAnc3RyaW5nJyA/IGZyYWdtZW50U3JjLnNwbGl0KCcnKSA6IChmcmFnbWVudFNyYyB8fCBbXSk7XG5cbn1cblxuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RmlsdGVyO1xuXG4vKipcbiAqIEdyYWJzIGEgc2hhZGVyIGZyb20gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBzaGFkZXIgZnJvbVxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuZ2V0U2hhZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyc1tnbC5pZF07XG5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IG5ldyBEZWZhdWx0U2hhZGVyKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIsXG4gICAgICAgICAgICB0aGlzLnZlcnRleFNyYyxcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRTcmMsXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaGFkZXJzW2dsLmlkXSA9IHNoYWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbn07XG5cbi8qKlxuICogU3luY3MgYSB1bmlmb3JtIGJldHdlZW4gdGhlIGNsYXNzIG9iamVjdCBhbmQgdGhlIHNoYWRlcnMuXG4gKlxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuc2hhZGVycy5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnNoYWRlcnNbaV0uc3luY1VuaWZvcm0odW5pZm9ybSk7XG4gICAgfVxufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKlxuICogQmFzaWMgRlhBQSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgY29kZSBvbiBnZWVrczNkLmNvbSB3aXRoIHRoZVxuICogbW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXG4gKiB1bnN1cHBvcnRlZCBieSBXZWJHTC5cbiAqXG4gKiAtLVxuICogRnJvbTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICpcbiAqL1xuZnVuY3Rpb24gRlhBQUZpbHRlcigpXG57XG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxuXFxudm9pZCB0ZXhjb29yZHModmVjMiBmcmFnQ29vcmQsIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk5XLCBvdXQgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiU1csIG91dCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzIgaW52ZXJzZVZQID0gMS4wIC8gcmVzb2x1dGlvbi54eTtcXG4gICAgdl9yZ2JOVyA9IChmcmFnQ29vcmQgKyB2ZWMyKC0xLjAsIC0xLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JORSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYlNXID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU0UgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIDEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk0gPSB2ZWMyKGZyYWdDb29yZCAqIGludmVyc2VWUCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbiAgIHZSZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcXG5cXG4gICAvL2NvbXB1dGUgdGhlIHRleHR1cmUgY29vcmRzIGFuZCBzZW5kIHRoZW0gdG8gdmFyeWluZ3NcXG4gICB0ZXhjb29yZHMoYVRleHR1cmVDb29yZCAqIHJlc29sdXRpb24sIHJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG5cXG4vKipcXG5CYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXFxubW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXFxudW5zdXBwb3J0ZWQgYnkgV2ViR0wuXFxuXFxuLS1cXG5cXG5Gcm9tOlxcbmh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XFxuXFxuQ29weXJpZ2h0IChjKSAyMDExIGJ5IEFybWluIFJvbmFjaGVyLlxcblxcblNvbWUgcmlnaHRzIHJlc2VydmVkLlxcblxcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcXG5tZXQ6XFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcXG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxcbiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXFxuICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXFxuICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxcblxcbiAgICAqIFRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yXFxuICAgICAgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljXFxuICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxcblxcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcXG5cXFwiQVMgSVNcXFwiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxcbkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXFxuT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXFxuU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxcblRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxcbiovXFxuXFxuI2lmbmRlZiBGWEFBX1JFRFVDRV9NSU5cXG4gICAgI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gICAoMS4wLyAxMjguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01VTFxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAgICgxLjAgLyA4LjApXFxuI2VuZGlmXFxuI2lmbmRlZiBGWEFBX1NQQU5fTUFYXFxuICAgICNkZWZpbmUgRlhBQV9TUEFOX01BWCAgICAgOC4wXFxuI2VuZGlmXFxuXFxuLy9vcHRpbWl6ZWQgdmVyc2lvbiBmb3IgbW9iaWxlLCB3aGVyZSBkZXBlbmRlbnRcXG4vL3RleHR1cmUgcmVhZHMgY2FuIGJlIGEgYm90dGxlbmVja1xcbnZlYzQgZnhhYShzYW1wbGVyMkQgdGV4LCB2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JOVywgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JTVywgdmVjMiB2X3JnYlNFLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzQgY29sb3I7XFxuICAgIG1lZGl1bXAgdmVjMiBpbnZlcnNlVlAgPSB2ZWMyKDEuMCAvIHJlc29sdXRpb24ueCwgMS4wIC8gcmVzb2x1dGlvbi55KTtcXG4gICAgdmVjMyByZ2JOVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTlcpLnh5ejtcXG4gICAgdmVjMyByZ2JORSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTkUpLnh5ejtcXG4gICAgdmVjMyByZ2JTVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU1cpLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU0UpLnh5ejtcXG4gICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTSk7XFxuICAgIHZlYzMgcmdiTSAgPSB0ZXhDb2xvci54eXo7XFxuICAgIHZlYzMgbHVtYSA9IHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdChyZ2JOVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFORSA9IGRvdChyZ2JORSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTVyA9IGRvdChyZ2JTVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdChyZ2JTRSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNICA9IGRvdChyZ2JNLCAgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNaW4gPSBtaW4obHVtYU0sIG1pbihtaW4obHVtYU5XLCBsdW1hTkUpLCBtaW4obHVtYVNXLCBsdW1hU0UpKSk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgobHVtYU0sIG1heChtYXgobHVtYU5XLCBsdW1hTkUpLCBtYXgobHVtYVNXLCBsdW1hU0UpKSk7XFxuXFxuICAgIG1lZGl1bXAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcblxcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoKGx1bWFOVyArIGx1bWFORSArIGx1bWFTVyArIGx1bWFTRSkgKlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwpLCBGWEFBX1JFRFVDRV9NSU4pO1xcblxcbiAgICBmbG9hdCByY3BEaXJNaW4gPSAxLjAgLyAobWluKGFicyhkaXIueCksIGFicyhkaXIueSkpICsgZGlyUmVkdWNlKTtcXG4gICAgZGlyID0gbWluKHZlYzIoRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBtYXgodmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiBpbnZlcnNlVlA7XFxuXFxuICAgIHZlYzMgcmdiQSA9IDAuNSAqIChcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqICgxLjAgLyAzLjAgLSAwLjUpKS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDIuMCAvIDMuMCAtIDAuNSkpLnh5eik7XFxuICAgIHZlYzMgcmdiQiA9IHJnYkEgKiAwLjUgKyAwLjI1ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogLTAuNSkueHl6ICtcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqIDAuNSkueHl6KTtcXG5cXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QocmdiQiwgbHVtYSk7XFxuICAgIGlmICgobHVtYUIgPCBsdW1hTWluKSB8fCAobHVtYUIgPiBsdW1hTWF4KSlcXG4gICAgICAgIGNvbG9yID0gdmVjNChyZ2JBLCB0ZXhDb2xvci5hKTtcXG4gICAgZWxzZVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkIsIHRleENvbG9yLmEpO1xcbiAgICByZXR1cm4gY29sb3I7XFxufVxcblxcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBmeGFhKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICogdlJlc29sdXRpb24sIHZSZXNvbHV0aW9uLCB2X3JnYk5XLCB2X3JnYk5FLCB2X3JnYlNXLCB2X3JnYlNFLCB2X3JnYk0pO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxufVxuXG5GWEFBRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkZYQUFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRlhBQUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRlhBQUZpbHRlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICovXG5GWEFBRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIoIHJlbmRlcmVyICk7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG4iLCJ2YXIgQWJzdHJhY3RGaWx0ZXIgPSByZXF1aXJlKCcuL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgU3ByaXRlTWFza0ZpbHRlciBjbGFzc1xuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICovXG5mdW5jdGlvbiBTcHJpdGVNYXNrRmlsdGVyKHNwcml0ZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXNrQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICAgdk1hc2tDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIC8vIGNoZWNrIGNsaXAhIHRoaXMgd2lsbCBzdG9wIHRoZSBtYXNrIGJsZWVkaW5nIG91dCBmcm9tIHRoZSBlZGdlc1xcbiAgICB2ZWMyIHRleHQgPSBhYnMoIHZNYXNrQ29vcmQgLSAwLjUgKTtcXG4gICAgdGV4dCA9IHN0ZXAoMC41LCB0ZXh0KTtcXG4gICAgZmxvYXQgY2xpcCA9IDEuMCAtIG1heCh0ZXh0LnksIHRleHQueCk7XFxuICAgIHZlYzQgb3JpZ2luYWwgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgICB2ZWM0IG1hc2t5ID0gdGV4dHVyZTJEKG1hc2ssIHZNYXNrQ29vcmQpO1xcbiAgICBvcmlnaW5hbCAqPSAobWFza3kuciAqIG1hc2t5LmEgKiBhbHBoYSAqIGNsaXApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBvcmlnaW5hbDtcXG59XFxuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hc2s6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLl90ZXh0dXJlIH0sXG4gICAgICAgICAgICBhbHBoYTogICAgICAgICAgeyB0eXBlOiAnZicsIHZhbHVlOiAxfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG59XG5cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVNYXNrRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVNYXNrRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS5fdGV4dHVyZTtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS53b3JsZEFscGhhO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHVzZWQgdG8gbW92ZSB0aGUgZGlzcGxhY2VtZW50IG1hcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlTWFza0ZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHbE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQmxlbmRNb2RlTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59XG5cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmRNb2RlTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxlbmRNb2RlTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzLXVwIHRoZSBnaXZlbiBibGVuZE1vZGUgZnJvbSBXZWJHTCdzIHBvaW50IG9mIHZpZXcuXG4gKlxuICogQHBhcmFtIGJsZW5kTW9kZSB7bnVtYmVyfSB0aGUgYmxlbmRNb2RlLCBzaG91bGQgYmUgYSBQaXhpIGNvbnN0LCBzdWNoIGFzIGBQSVhJLkJMRU5EX01PREVTLkFERGAuIFNlZVxuICogIHtAbGluayBQSVhJLkJMRU5EX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICovXG5CbGVuZE1vZGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRCbGVuZE1vZGUgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPT09IGJsZW5kTW9kZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMucmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmN1cnJlbnRCbGVuZE1vZGVdO1xuICAgIHRoaXMucmVuZGVyZXIuZ2wuYmxlbmRGdW5jKG1vZGVbMF0sIG1vZGVbMV0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpLFxuICAgIFF1YWQgPSByZXF1aXJlKCcuLi91dGlscy9RdWFkJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gRmlsdGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW107XG5cbiAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICByZW5kZXJUYXJnZXQ6cmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldCxcbiAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICBib3VuZHM6bnVsbFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgLy8gbGlzdGVuIGZvciBjb250ZXh0IGFuZCB1cGRhdGUgbmVjZXNzYXJ5IGJ1ZmZlcnNcbiAgICAvL1RPRE8gbWFrZSB0aGlzIGR5bmFtaWMhXG4gICAgLy9UT0RPIHRlc3QgdGhpcyBvdXQgYnkgZm9yY2VzIHBvd2VyIG9mIHR3bz9cbiAgICB0aGlzLnRleHR1cmVTaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZnJhbWVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcbn1cblxuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWx0ZXJNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBGaWx0ZXJNYW5hZ2VyO1xuXG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnF1YWQgPSBuZXcgUXVhZChnbCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHBhcmFtIGJ1ZmZlciB7QXJyYXlCdWZmZXJ9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnNldEZpbHRlclN0YWNrID0gZnVuY3Rpb24gKCBmaWx0ZXJTdGFjayApXG57XG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IGZpbHRlclN0YWNrO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXIgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBmaWx0ZXJzIHtQSVhJLkFic3RyYWN0RmlsZXJbXX0gdGhlIGZpbHRlcnMgdGhhdCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2tcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucHVzaEZpbHRlciA9IGZ1bmN0aW9uICh0YXJnZXQsIGZpbHRlcnMpXG57XG4gICAgLy8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdC4uXG4gICAgLy8gVE9ETyByZXBsYWNlIGNsb25lIHdpdGggYSBjb3B5IHRvIHNhdmUgb2JqZWN0IGNyZWF0aW9uXG4gICAgdmFyIGJvdW5kcyA9IHRhcmdldC5maWx0ZXJBcmVhID8gdGFyZ2V0LmZpbHRlckFyZWEuY2xvbmUoKSA6IHRhcmdldC5nZXRCb3VuZHMoKTtcblxuICAgIC8vYm91bmRzID0gYm91bmRzLmNsb25lKCk7XG5cbiAgICAvLyByb3VuZCBvZmYgdGhlIHJlY3RhbmdsZSB0byBnZXQgYSBuaWNlIHNtb29vb29vb3RoIGZpbHRlciA6KVxuICAgIGJvdW5kcy54ID0gYm91bmRzLnggfCAwO1xuICAgIGJvdW5kcy55ID0gYm91bmRzLnkgfCAwO1xuICAgIGJvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCB8IDA7XG4gICAgYm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgfCAwO1xuXG5cbiAgICAvLyBwYWRkaW5nIVxuICAgIHZhciBwYWRkaW5nID0gZmlsdGVyc1swXS5wYWRkaW5nIHwgMDtcbiAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG5cblxuICAgIGlmKHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvL1RPRE8gdGhpcyB3aWxsIGJyZWFrIGlmIHRoZSByZW5kZXJUZXh0dXJlIHRyYW5zZm9ybSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgdHJhbnNsYXRpb24uXG4gICAgICAgIC8vV2lsbCBuZWVkIHRvIHRha2UgdGhlIGZ1bGwgbWF0cml4IHRyYW5zZm9ybSBpbnRvIGFjb3VudC4uXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQudHJhbnNmb3JtO1xuXG4gICAgICAgIGJvdW5kcy54ICs9IHRyYW5zZm9ybS50eDtcbiAgICAgICAgYm91bmRzLnkgKz0gdHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG5cbiAgICAgICAgYm91bmRzLnggLT0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSAtPSB0cmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgICB0aGlzLmNhcEZpbHRlckFyZWEoIGJvdW5kcyApO1xuICAgIH1cblxuICAgIGlmKGJvdW5kcy53aWR0aCA+IDAgJiYgYm91bmRzLmhlaWdodCA+IDApXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGJvdW5kcztcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGV4dHVyZSk7XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRleHR1cmUuLlxuICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gVE9ETyBnZXQgcmlkIG9mIG9iamVjdCBjcmVhdGlvbiFcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogdGV4dHVyZSxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBwdXNoIHNvbXRoaW5nIG9uIHRvIHRoZSBzdGFjayB0aGF0IGlzIGVtcHR5XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcnNcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnBvcEZpbHRlciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrLnBvcCgpO1xuICAgIHZhciBwcmV2aW91c0ZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrW3RoaXMuZmlsdGVyU3RhY2subGVuZ3RoLTFdO1xuXG4gICAgdmFyIGlucHV0ID0gZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyBpZiB0aGUgcmVuZGVyVGFyZ2V0IGlzIG51bGwgdGhlbiB3ZSBkb24ndCBhcHBseSB0aGUgZmlsdGVyIGFzIGl0cyBvZmZzY3JlZW5cbiAgICBpZighZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IHByZXZpb3VzRmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyB1c2UgcHJvZ3JhbVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaW5wdXQuZnJhbWU7XG5cbiAgICB0aGlzLnF1YWQubWFwKHRoaXMudGV4dHVyZVNpemUsIGlucHV0LmZyYW1lKTtcblxuXG4gICAgLy8gVE9ETy4uIHRoaXMgcHJvYmFibHkgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgZmlsdGVycyA9IGZpbHRlckRhdGEuZmlsdGVyO1xuXG4gICAgLy8gYXNzdW1pbmcgYWxsIGZpbHRlcnMgZm9sbG93IHRoZSBjb3JyZWN0IGZvcm1hdD8/XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAyICogNCAqIDQpO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIG5vcm1hbCBibGVuZG1vZGUhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShDT05TVC5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAxKVxuICAgIHtcbiAgICAgICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoZW4gc2V0dGluZyB0aGlzIGVhY2ggdGltZT9cbiAgICAgICAgaWYgKGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgIGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1swXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgaW5wdXQsIG91dHB1dCApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggaW5wdXQgKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZmxpcFRleHR1cmUgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3BUZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aC0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICAgICAgaWYgKGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBmbG9wVGV4dHVyZSApO1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGZsaXBUZXh0dXJlO1xuICAgICAgICAgICAgZmxpcFRleHR1cmUgPSBmbG9wVGV4dHVyZTtcbiAgICAgICAgICAgIGZsb3BUZXh0dXJlID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlcnNbZmlsdGVycy5sZW5ndGgtMV0uYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBvdXRwdXQgKTtcblxuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxpcFRleHR1cmUgKTtcbiAgICAgICAgdGhpcy5yZXR1cm5SZW5kZXJUYXJnZXQoIGZsb3BUZXh0dXJlICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckRhdGEuZmlsdGVyO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY2xlYXIgdGhlIFJlbmRlclRhcmdldFxuICogQHJldHVybiB7UmVuZGVyVGFyZ2V0fVxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIGNsZWFyIClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy50ZXh0dXJlUG9vbC5wb3AoKSB8fCBuZXcgUmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyZXIuZ2wsIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0LCBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiAqIENPTlNULkZJTFRFUl9SRVNPTFVUSU9OKTtcbiAgICByZW5kZXJUYXJnZXQuZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcih0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyVGFyZ2V0O1xufTtcblxuLypcbiAqIFJldHVybnMgYSBSZW5kZXJUYXJnZXQgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1JlbmRlclRhcmdldH0gVGhlIFJlbmRlclRhcmdldCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5SZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0KVxue1xuICAgIHRoaXMudGV4dHVyZVBvb2wucHVzaCggcmVuZGVyVGFyZ2V0ICk7XG59O1xuXG4vKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2hhZGVyIHtTaGFkZXJ9IFRoZSBzaGFkZXIgdG8gdXBsb2FkXG4gKiBAcGFyYW0gaW5wdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBjbGVhciB0aGUgb3V0cHV0VGFyZ2V0XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHNoYWRlciwgaW5wdXRUYXJnZXQsIG91dHB1dFRhcmdldCwgY2xlYXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG91dHB1dFRhcmdldCk7XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICBvdXRwdXRUYXJnZXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHNoYWRlclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gQ2FuIHRoaXMgYmUgY2FjaGVkIGFuZCBub3QgYHRvQXJyYXlgZWQgZWFjaCBmcmFtZT9cbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG5cbiAgICAvL1RPRE8gY2FuIHRoaXMgYmUgb3B0aW1pc2VkP1xuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcbi8qXG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcbiovXG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBpbnB1dFRhcmdldC50ZXh0dXJlKTtcblxuICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbn07XG5cbi8qXG4gKiBDYWxjdWxhdGVzIHRoZSBtYXBwZWQgbWF0cml4XG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWFcbiAqIEBwYXJhbSBzcHJpdGUge1Nwcml0ZX0gdGhlIHRhcmdldCBzcHJpdGVcbiAqIEBwYXJhbSBvdXRwdXRNYXRyaXgge01hdHJpeH0gQGFsdmluXG4gKi9cbi8vIFRPRE8gcGxheWluZyBhcm91bmQgaGVyZS4uIHRoaXMgaXMgdGVtcG9yYXJ5IC0gKHdpbGwgZW5kIHVwIGluIHRoZSBzaGFkZXIpXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jYWxjdWxhdGVNYXBwZWRNYXRyaXggPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSwgc3ByaXRlLCBvdXRwdXRNYXRyaXgpXG57XG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gc3ByaXRlLndvcmxkVHJhbnNmb3JtLmNvcHkobWF0aC5NYXRyaXguVEVNUF9NQVRSSVgpLFxuICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICB2YXIgbWFwcGVkTWF0cml4ID0gb3V0cHV0TWF0cml4LmlkZW50aXR5KCk7XG5cbiAgICAvLyBzY2FsZS4uXG4gICAgdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCApO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKDEgLCByYXRpbyk7XG5cbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyB0ZXh0dXJlLndpZHRoKTtcbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gdGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0udHggLz0gdGV4dHVyZS53aWR0aCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICB3b3JsZFRyYW5zZm9ybS50eSAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0uaW52ZXJ0KCk7XG5cbiAgICBtYXBwZWRNYXRyaXgucHJlcGVuZCh3b3JsZFRyYW5zZm9ybSk7XG5cbiAgICAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIG1hcHBlZE1hdHJpeC50cmFuc2xhdGUoc3ByaXRlLmFuY2hvci54LCBzcHJpdGUuYW5jaG9yLnkpO1xuXG4gICAgcmV0dXJuIG1hcHBlZE1hdHJpeDtcblxuICAgIC8vIEtlZXBpbmcgdGhlIG9yZ2luYWwgYXMgYSByZW1pbmRlciB0byBtZSBvbiBob3cgdGhpcyB3b3JrcyFcbiAgICAvL1xuICAgIC8vIHZhciBtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvLyAvLyBzY2FsZS4uXG4gICAgLy8gdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgLy8gbS50cmFuc2xhdGUoZmlsdGVyQXJlYS54IC8gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgZmlsdGVyQXJlYS55IC8gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQpO1xuXG5cbiAgICAvLyBtLnNjYWxlKDEgLCByYXRpbyk7XG5cblxuICAgIC8vIHZhciB0cmFuc2Zvcm0gPSB3dC5jbG9uZSgpO1xuXG4gICAgLy8gdmFyIHRyYW5zbGF0ZVNjYWxlWCA9ICh0aGlzLnRleHR1cmVTaXplLndpZHRoIC8gNjIwKTtcbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gMzgwKTtcblxuICAgIC8vIHRyYW5zZm9ybS50eCAvPSA2MjAgKiB0cmFuc2xhdGVTY2FsZVg7XG4gICAgLy8gdHJhbnNmb3JtLnR5IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcblxuICAgIC8vIHRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIC8vIHRyYW5zZm9ybS5hcHBlbmQobSk7XG5cbiAgICAvLyAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgLy8gdHJhbnNmb3JtLnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIC8vIHJldHVybiB0cmFuc2Zvcm07XG59O1xuXG4vKlxuICogQ29uc3RyYWlucyB0aGUgZmlsdGVyIGFyZWEgdG8gdGhlIHRleHR1cmUgc2l6ZVxuICogQHBhcmFtIGZpbHRlckFyZWEge1JlY3RhbmdsZX0gVGhlIGZpbHRlciBhcmVhIHdlIHdhbnQgdG8gY2FwXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhcEZpbHRlckFyZWEgPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSlcbntcbiAgICBpZiAoZmlsdGVyQXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEud2lkdGggKz0gZmlsdGVyQXJlYS54O1xuICAgICAgICBmaWx0ZXJBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgKz0gZmlsdGVyQXJlYS55O1xuICAgICAgICBmaWx0ZXJBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggZmlsdGVyQXJlYS54ICsgZmlsdGVyQXJlYS53aWR0aCA+IHRoaXMudGV4dHVyZVNpemUud2lkdGggKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCA9IHRoaXMudGV4dHVyZVNpemUud2lkdGggLSBmaWx0ZXJBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnkgKyBmaWx0ZXJBcmVhLmhlaWdodCA+IHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLSBmaWx0ZXJBcmVhLnk7XG4gICAgfVxufTtcblxuLypcbiAqIFJlc2l6ZXMgYWxsIHRoZSByZW5kZXIgdGFyZ2V0cyBpbiB0aGUgcG9vbFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLnRleHR1cmVTaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLnJlc2l6ZSggd2lkdGgsIGhlaWdodCApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGZpbHRlciBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBmaWx0ZXIgc3RhY2suXG4gKlxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnF1YWQuZGVzdHJveSgpO1xuICAgIFxuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBudWxsO1xuICAgIHRoaXMub2Zmc2V0WSA9IDA7XG5cbiAgICAvLyBkZXN0cm95IHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHR1cmVQb29sLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlUG9vbCA9IG51bGw7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgQWxwaGFNYXNrRmlsdGVyID0gcmVxdWlyZSgnLi4vZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNYXNrTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICB0aGlzLmFscGhhTWFza1Bvb2wgPSBbXTtcbn1cblxuTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hc2tNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgaWYgKG1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBtYXNrIGZyb20gdGhlIG1hc2sgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucG9wU3ByaXRlTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTcHJpdGVNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdmFyIGFscGhhTWFza0ZpbHRlciA9IHRoaXMuYWxwaGFNYXNrUG9vbC5wb3AoKTtcblxuICAgIGlmICghYWxwaGFNYXNrRmlsdGVyKVxuICAgIHtcbiAgICAgICAgYWxwaGFNYXNrRmlsdGVyID0gW25ldyBBbHBoYU1hc2tGaWx0ZXIobWFza0RhdGEpXTtcbiAgICB9XG5cbiAgICBhbHBoYU1hc2tGaWx0ZXJbMF0ubWFza1Nwcml0ZSA9IG1hc2tEYXRhO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRhcmdldCwgYWxwaGFNYXNrRmlsdGVyKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKi9cbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTcHJpdGVNYXNrID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVycyA9IHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbC5wdXNoKGZpbHRlcnMpO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTdGVuY2lsTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaE1hc2sobWFza0RhdGEpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BNYXNrKG1hc2tEYXRhKTtcbn07XG5cbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1RleHR1cmVTaGFkZXInKSxcbiAgICBDb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhBdHRpYnMgPSAxMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG5cbi8vICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcbn1cblxuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaGFkZXJNYW5hZ2VyO1xudXRpbHMucGx1Z2luVGFyZ2V0Lm1peGluKFNoYWRlck1hbmFnZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlck1hbmFnZXI7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cblNoYWRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlIGNvcnJlY3RseSBhcyB0aGlzIHRlbmRzIHRvIHZhcnlcbiAgICB0aGlzLm1heEF0dGlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xuXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1heEF0dGliczsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRPRE8gLSBXaHkgYXJlIHRoZXNlIG5vdCBwbHVnaW5zPyBXZSBjYW4ndCBkZWNvdXBsZSBwcmltaXRpdmVzIHVubGVzcyB0aGV5IGFyZS4uLi5cbiAgICB0aGlzLmRlZmF1bHRTaGFkZXIgPSBuZXcgVGV4dHVyZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcyk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbmV3IENvbXBsZXhQcmltaXRpdmVTaGFkZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFRha2VzIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHBhcmFtZXRlcnMgYW5kIHVwbG9hZHMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXR0cmlicyB7YW55W119IGF0dHJpYnNcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0QXR0cmlicyA9IGZ1bmN0aW9uIChhdHRyaWJzKVxue1xuICAgIC8vIHJlc2V0IHRlbXAgc3RhdGVcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRlbXBBdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAodmFyIGEgaW4gYXR0cmlicylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbYV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSAhPT0gdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHNoYWRlci5cbiAqXG4gKiBAcGFyYW0gc2hhZGVyIHtQSVhJLlNoYWRlcn0gdGhlIHNoYWRlciB0byB1cGxvYWRcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0U2hhZGVyID0gZnVuY3Rpb24gKHNoYWRlcilcbntcbiAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRJZCA9PT0gc2hhZGVyLnVpZClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50SWQgPSBzaGFkZXIudWlkO1xuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5nbC51c2VQcm9ncmFtKHNoYWRlci5wcm9ncmFtKTtcbiAgICB0aGlzLnNldEF0dHJpYnMoc2hhZGVyLmF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0LlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBXZWJHTE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBudWxsO1xufVxuXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFza01hbmFnZXI7XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgbWFzayBzdGFjayB0aGF0IGlzIHVzZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICpcbiAqIEBwYXJhbSBzdGVuY2lsTWFza1N0YWNrIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9IFRoZSBtYXNrIHN0YWNrXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnNldE1hc2tTdGFjayA9IGZ1bmN0aW9uICggc3RlbmNpbE1hc2tTdGFjayApXG57XG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBpZiAoc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLiBAYWx2aW5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWwgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQuYXR0YWNoU3RlbmNpbEJ1ZmZlcigpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICBpZiAoc21zLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgZ2wuY2xlYXIoZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTtcbiAgICAgICAgc21zLnJldmVyc2UgPSB0cnVlO1xuICAgICAgICBzbXMuY291bnQgPSAwO1xuICAgIH1cblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucHVzaCh3ZWJHTERhdGEpO1xuXG4gICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5WRVJUKTtcblxuICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgIGlmIChzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgIH1cblxuICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSBsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLktFRVApO1xuXG4gICAgc21zLmNvdW50Kys7XG59O1xuXG4vKipcbiAqIFRPRE8gdGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSFcbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuYmluZEdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgLy9pZiAodGhpcy5fY3VycmVudEdyYXBoaWNzID09PSBncmFwaGljcylyZXR1cm47XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBiaW5kIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0zZnYoc2hhZGVyLnVuaWZvcm1zLmNvbG9yLl9sb2NhdGlvbiwgd2ViR0xEYXRhLmNvbG9yKTtcblxuICAgICAgICBnbC51bmlmb3JtMWYoc2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSk7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDQgKiAyLCAwKTtcblxuICAgICAgICAvLyBub3cgZG8gdGhlIHJlc3QuLlxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAqL1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvL3RoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5hY3RpdmF0ZVByaW1pdGl2ZVNoYWRlcigpO1xuLy8gICAgICAgIHNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wcmltaXRpdmVTaGFkZXI7XG4gICAgICAgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG5cbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuLy8gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuXG4gICAgICAvKiAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7Ki9cbiAgICB9XG59O1xuXG4vKipcbiAqIFRPRE8gQGFsdmluXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIHNtcyA9IHRoaXMuc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucG9wKCk7XG5cbiAgICBzbXMuY291bnQtLTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIC8vIHRoZSBzdGFjayBpcyBlbXB0eSFcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgICAgIHRoaXMuYmluZEdyYXBoaWNzKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcblxuICAgICAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRyYXcgYSBxdWFkIHRvIGluY3JlbWVudC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgICAgICAgICAvLyBkcmF3IHRoZSB0cmlhbmdsZSBzdHJpcCFcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCArPSAyO1xuXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKSwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgLy8gIGNvbnNvbGUubG9nKFwiPDw+PlwiKVxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIChsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cblxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIG1hc2sgc3RhY2suXG4gKlxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2sgPSBudWxsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfSBUaGUgbWFzayBkYXRhIHN0cnVjdHVyZSB0byB1c2VcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIFxuICAgIC8vVE9ETyBGSVhcbiAgICBpZiAobWFza0RhdGEuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MudXBkYXRlR3JhcGhpY3MobWFza0RhdGEsIHRoaXMucmVuZGVyZXIuZ2wpO1xuICAgIH1cblxuICAgIGlmICghbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFN0ZW5jaWwobWFza0RhdGEsIG1hc2tEYXRhLl93ZWJHTFt0aGlzLnJlbmRlcmVyLmdsLmlkXS5kYXRhWzBdKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIodGhpcy5yZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcblxuICAgIHRoaXMucG9wU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuIiwiLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLm9uKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xufVxuXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTE1hbmFnZXI7XG5cbi8qKlxuICogR2VuZXJpYyBtZXRob2QgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbldlYkdMTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblx0Ly8gZG8gc29tZSBjb2RlcyBpbml0IVxufTtcblxuLyoqXG4gKiBHZW5lcmljIGRlc3Ryb3kgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlbmRlcmVyLm9mZignY29udGV4dCcsIHRoaXMub25Db250ZXh0Q2hhbmdlLCB0aGlzKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCcuL1NoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBjb21wbGV4IHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQ29tcGxleFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyBjb2xvcjsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoY29sb3IgKiBhbHBoYSAqIHRpbnQsIGFscGhhKTsnLC8vXCIgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIGNvbG9yOiAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsMCwwXSB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB0aW50OiAgIHsgdHlwZTogJzNmJywgdmFsdWU6IFswLCAwLCAwXSB9LFxuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFDb2xvcjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQmFzZSBzaGFkZXIgY2xhc3MgZm9yIFBJWEkgbWFuYWdlZCBzaGFkZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbdW5pZm9ybXNdIHtvYmplY3R9IFVuaWZvcm1zIGZvciB0aGlzIHNoYWRlci5cbiAqIEBwYXJhbSBbYXR0cmlidXRlc10ge29iamVjdH0gQXR0cmlidXRlcyBmb3IgdGhpcyBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIFNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcylcbntcbiAgICBpZiAoIXZlcnRleFNyYyB8fCAhZnJhZ21lbnRTcmMpXG4gICAge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXhpLmpzIEVycm9yLiBTaGFkZXIgcmVxdWlyZXMgdmVydGV4U3JjIGFuZCBmcmFnbWVudFNyYycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5nbCA9IHNoYWRlck1hbmFnZXIucmVuZGVyZXIuZ2w7XG5cbiAgICAvL1RPRE8gbWF5YmUgd2Ugc2hvdWxkIHBhc3MgcmVuZGVyZXIgcmF0aGVyIHRoYW4gc2hhZGVyIG1hbmdlcj8/IGZvb2QgZm9yIHRob3VnaHQuLlxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IHNoYWRlck1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgcHJvZ3JhbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUHJvZ3JhbX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaWZvcm1zIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhdHRyaWJ1dGVzIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50ZXJcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlciBhcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmM7XG5cbiAgICB0aGlzLmluaXQoKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHNoYWRlciBhbmQgdXNlcyBpdFxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbXBpbGUoKTtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy51bmlmb3JtcykpO1xuICAgIHRoaXMuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKSk7XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSB1bmlmb3JtIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgdW5pZm9ybXMgdG8gY2FjaGVcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnVuaWZvcm1zW2tleXNbaV1dLl9sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWNoZXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgYXR0cmlidXRlIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgYXR0cmlidXRlcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlQXR0cmlidXRlTG9jYXRpb25zID0gZnVuY3Rpb24gKGtleXMpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleXNbaV1dID0gdGhpcy5nbC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGtleXNbaV0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgbmVlZGVkIGFueW1vcmUuLi5cblxuICAgIC8vIEJlZ2luIHdvcnN0IGhhY2sgZXZhIC8vXG5cbiAgICAvLyBXSFk/Pz8gT05MWSBvbiBteSBjaHJvbWUgcGl4ZWwgdGhlIGxpbmUgYWJvdmUgcmV0dXJucyAtMSB3aGVuIHVzaW5nIGZpbHRlcnM/XG4gICAgLy8gbWF5YmUgaXRzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnbCBjb250ZXh0LlxuICAgIC8vIEknbSBjb252aW5jZWQgdGhpcyBpcyBhIGJ1ZyBpbiB0aGUgY2hyb21lIGJyb3dzZXIgYXMgdGhlcmUgaXMgTk8gcmVhc29uIHdoeSB0aGlzIHNob3VsZCBiZSByZXR1cm5pbmcgLTEgZXNwZWNpYWxseSBhcyBpdCBvbmx5IG1hbmlmZXN0cyBvbiBteSBjaHJvbWUgcGl4ZWxcbiAgICAvLyBJZiB0aGVyZXMgYW55IHdlYkdMIHBlb3BsZSB0aGF0IGtub3cgd2h5IGNvdWxkIGhhcHBlbiBwbGVhc2UgaGVscCA6KVxuICAgIC8vIGlmICh0aGlzLmF0dHJpYnV0ZXMuYUNvbG9yID09PSAtMSl7XG4gICAgLy8gICAgIHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPSAyO1xuICAgIC8vIH1cblxuICAgIC8vIEVuZCB3b3JzdCBoYWNrIGV2YSAvL1xufTtcblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQgY3JlYXRlcyB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19XG4gKi9cblNoYWRlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHZhciBnbFZlcnRTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuVkVSVEVYX1NIQURFUiwgdGhpcy52ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuRlJBR01FTlRfU0hBREVSLCB0aGlzLmZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuICh0aGlzLnByb2dyYW0gPSBwcm9ncmFtKTtcbn07XG5cbi8qKlxuKiBBZGRzIGEgbmV3IHVuaWZvcm1cbipcbiogQHBhcmFtIHVuaWZvcm0ge29iamVjdH0gdGhlIG5ldyB1bmlmb3JtIHRvIGF0dGFjaFxuKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgbG9jYXRpb24gPSB1bmlmb3JtLl9sb2NhdGlvbixcbiAgICAgICAgdmFsdWUgPSB1bmlmb3JtLnZhbHVlLFxuICAgICAgICBnbCA9IHRoaXMuZ2wsXG4gICAgICAgIGksIGlsO1xuXG4gICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIHNpbmdsZSBpbnQgdmFsdWVcbiAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGZsb2F0IHZhbHVlXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBjYXNlICcxZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSgyKSBvciBKUyBBcnJyYXlcbiAgICAgICAgY2FzZSAnMmYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDMpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICczZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDQpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgMkQgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YyJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDNEIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2Myc6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSA0RCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjQnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMWl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMml2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnNGl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20yJzpcbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgIGNhc2UgJ01hdHJpeDJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB1bmlmb3JtLnRyYW5zcG9zZSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20zJzpcbiAgICAgICAgY2FzZSAnbWF0Myc6XG4gICAgICAgIGNhc2UgJ01hdHJpeDNmdic6XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICBjYXNlICdtYXQ0JzpcbiAgICAgICAgY2FzZSAnTWF0cml4NGZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIENvbG9yIFZhbHVlXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgaW50ZWdlcnMgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdjEnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAyRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yydic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgyICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAyXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDIgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYXJyYXkgb2YgM0QgUG9pbnQgb2JqZWN0c1xuICAgICAgICBjYXNlICd2M3YnOlxuICAgICAgICAgICAgaWYgKCF1bmlmb3JtLl9hcnJheSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMyAqIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlsID0gdmFsdWUubGVuZ3RoOyBpIDwgaWw7ICsraSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogM10gICAgICAgPSB2YWx1ZVtpXS54O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzICsgMV0gICA9IHZhbHVlW2ldLnk7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAyXSAgID0gdmFsdWVbaV0uejtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiA0RCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Y0dic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg0ICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0XSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDJdICAgPSB2YWx1ZVtpXS56O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgM10gICA9IHZhbHVlW2ldLnc7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gUElYSS5UZXh0dXJlXG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuXG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUgfHwgIXVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGlzIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xbJ1RFWFRVUkUnICsgdGhpcy50ZXh0dXJlQ291bnRdKTtcblxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXTtcblxuICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdGV4dHVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9uZS4uXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgICAgICAgICAgLy8gc2V0IHVuaWZvcm0gdG8gdGV4dHVyZSBpbmRleFxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0uX2xvY2F0aW9uLCB0aGlzLnRleHR1cmVDb3VudCk7XG5cbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBuZXh0IHRleHR1cmUgaWRcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgU2hhZGVyIFdhcm5pbmc6IFVua25vd24gdW5pZm9ybSB0eXBlOiAnICsgdW5pZm9ybS50eXBlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNoYWRlciB1bmlmb3JtIHZhbHVlcy5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm1zID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy51bmlmb3JtcylcbiAgICB7XG4gICAgICAgIHRoaXMuc3luY1VuaWZvcm0odGhpcy51bmlmb3Jtc1trZXldKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSW5pdGlhbGlzZXMgYSBTYW1wbGVyMkQgdW5pZm9ybSAod2hpY2ggbWF5IG9ubHkgYmUgYXZhaWxhYmxlIGxhdGVyIG9uIGFmdGVyIGluaXRVbmlmb3JtcyBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBsb2FkZWQpXG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXRTYW1wbGVyMkQgPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbiAgICBpZiAodW5pZm9ybS50ZXh0dXJlRGF0YSlcbiAgICB7XG5cbiAgICAgICAgLy9UT0RPIG1vdmUgdGhpcy4uLlxuICAgICAgICB2YXIgZGF0YSA9IHVuaWZvcm0udGV4dHVyZURhdGE7XG5cbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuXG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBsaWVkQWxwaGEpO1xuICAgICAgICAvLyBHTFRleHR1cmUgPSBtYWcgbGluZWFyLCBtaW4gbGluZWFyX21pcG1hcF9saW5lYXIsIHdyYXAgcmVwZWF0ICsgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIC8vIEdMVGV4dHVyZUxpbmVhciA9IG1hZy9taW4gbGluZWFyLCB3cmFwIGNsYW1wXG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3RSZXBlYXQgPSBtYWcvbWluIE5FQVJFU1QsIHdyYXAgcmVwZWF0XG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3QgPSBtYWcvbWluIG5lYXJlc3QsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gQXVkaW9UZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCA1MTIsIGhlaWdodCAyLCBib3JkZXIgMFxuICAgICAgICAvLyBLZXlUZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCAyNTYsIGhlaWdodCAyLCBib3JkZXIgMFxuXG4gICAgICAgIC8vICBtYWdGaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcbiAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxuXG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZGF0YS5sdW1pbmFuY2UgPyBnbC5MVU1JTkFOQ0UgOiBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLnNvdXJjZSk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGRhdGEubWFnRmlsdGVyID8gZGF0YS5tYWdGaWx0ZXIgOiBnbC5MSU5FQVIgKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSApO1xuXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGRhdGEud3JhcFQgPyBkYXRhLndyYXBUIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyTWFuYWdlci5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHNoYWRlci5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5nbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmdsID0gbnVsbDtcbiAgICB0aGlzLnVuaWZvcm1zID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSBudWxsO1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBudWxsO1xufTtcblxuU2hhZGVyLnByb3RvdHlwZS5fZ2xDb21waWxlID0gZnVuY3Rpb24gKHR5cGUsIHNyYylcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICB0aGlzLmdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgdGhpcy5nbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cbiAgICBpZiAoIXRoaXMuZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgdGhpcy5nbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCBjdXN0b21Vbmlmb3JtcywgY3VzdG9tQXR0cmlidXRlcylcbntcbiAgICB2YXIgdW5pZm9ybXMgPSB7XG5cbiAgICAgICAgdVNhbXBsZXI6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogMCB9LFxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxXSkgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVW5pZm9ybXMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciB1IGluIGN1c3RvbVVuaWZvcm1zKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bmlmb3Jtc1t1XSA9IGN1c3RvbVVuaWZvcm1zW3VdO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgYVZlcnRleFBvc2l0aW9uOiAgICAwLFxuICAgICAgICBhVGV4dHVyZUNvb3JkOiAgICAgIDAsXG4gICAgICAgIGFDb2xvcjogICAgICAgICAgICAgMFxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tQXR0cmlidXRlcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGEgaW4gY3VzdG9tQXR0cmlidXRlcylcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlc1thXSA9IGN1c3RvbUF0dHJpYnV0ZXNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYWdtZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IFRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgU2hhZGVyLmNhbGwodGhpcywgc2hhZGVyTWFuYWdlciwgdmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihnbClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7Ly8sIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKTtcblxufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi4vbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQmFzZSBmb3IgYSBjb21tb24gb2JqZWN0IHJlbmRlcmVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzeXN0ZW0gcmVuZGVyZXIgcGx1Z2luLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gT2JqZWN0UmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufVxuXG5cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYmplY3RSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0UmVuZGVyZXI7XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZW5kZXJlciBhbmQgc2V0cyB0aGUgc2hhZGVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIHNldCB0aGUgc2hhZGVyLi5cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHJlbmRlcmVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xufTtcblxuLyoqXG4gKiBmbHVzaGVzXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIGZsdXNoIVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gcmVuZGVyIHRoZSBvYmplY3Rcbn07XG4iLCIvKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSBxdWFkXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFRoZSBnbCBjb250ZXh0IGZvciB0aGlzIHF1YWQgdG8gdXNlLlxuICovXG5mdW5jdGlvbiBRdWFkKGdsKVxue1xuICAgIC8qXG4gICAgICogdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4vLyAgICB0aGlzLnRleHR1cmVzID0gbmV3IFRleHR1cmVVdnMoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAwLDAsXG4gICAgICAgIDIwMCwwLFxuICAgICAgICAyMDAsMjAwLFxuICAgICAgICAwLDIwMFxuICAgIF0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgcXVhZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMSwwLFxuICAgICAgICAxLDEsXG4gICAgICAgIDAsMVxuICAgIF0pO1xuXG4vLyAgICB2YXIgd2hpdGUgPSAoMHhGRkZGRkYgPj4gMTYpICsgKDB4RkZGRkZGICYgMHhmZjAwKSArICgoMHhGRkZGRkYgJiAweGZmKSA8PCAxNikgKyAoMSAqIDI1NSA8PCAyNCk7XG4gICAgLy9UT0RPIGNvbnZlcnQgdGhpcyB0byBhIDMyIHVuc2lnbmVkIGludCBhcnJheVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBjb21wb25lbnRzIG9mIHRoZSB0cmlhbmdsZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxXG4gICAgXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbXG4gICAgICAgIDAsIDEsIDIsIDAsIDMsIDJcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSB2ZXJ0ZXggYnVmZmVyXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSBpbmRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDggKyAxNikgKiA0LCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnVwbG9hZCgpO1xufVxuXG5RdWFkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFF1YWQ7XG5cbi8qKlxuICogTWFwcyB0d28gUmVjdGFuZ2xlIHRvIHRoZSBxdWFkXG4gKiBAcGFyYW0gcmVjdCB7UElYSS5SZWN0YW5nbGV9IHRoZSBmaXJzdCByZWN0YW5nbGVcbiAqIEBwYXJhbSByZWN0MiB7UElYSS5SZWN0YW5nbGV9IHRoZSBzZWNvbmQgcmVjdGFuZ2xlXG4gKi9cblF1YWQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKHJlY3QsIHJlY3QyKVxue1xuICAgIHZhciB4ID0gMDsgLy9yZWN0Mi54IC8gcmVjdC53aWR0aDtcbiAgICB2YXIgeSA9IDA7IC8vcmVjdDIueSAvIHJlY3QuaGVpZ2h0O1xuXG4gICAgdGhpcy51dnNbMF0gPSB4O1xuICAgIHRoaXMudXZzWzFdID0geTtcblxuICAgIHRoaXMudXZzWzJdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1szXSA9IHk7XG5cbiAgICB0aGlzLnV2c1s0XSA9IHggKyByZWN0Mi53aWR0aCAvIHJlY3Qud2lkdGg7XG4gICAgdGhpcy51dnNbNV0gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1s2XSA9IHg7XG4gICAgdGhpcy51dnNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICAvLy8gLS0tLS1cbiAgICB4ID0gcmVjdDIueDtcbiAgICB5ID0gcmVjdDIueTtcblxuICAgIHRoaXMudmVydGljZXNbMF0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbMV0gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1syXSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzNdID0geTtcblxuICAgIHRoaXMudmVydGljZXNbNF0gPSB4ICsgcmVjdDIud2lkdGg7XG4gICAgdGhpcy52ZXJ0aWNlc1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQ7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzZdID0geDtcbiAgICB0aGlzLnZlcnRpY2VzWzddID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXIgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuUXVhZC5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvLyBUT0RPIGNvdWxkIHByb2JhYmx5IGJlIHB1c2hlZCBpbnRvIG9uZSB1cGxvYWQhXG4gICAgZ2wuYmluZEJ1ZmZlciggZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlciApO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMudmVydGljZXMpO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDggKiA0LCB0aGlzLnV2cyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgKDggKyA4KSAqIDQsIHRoaXMuY29sb3JzKTtcbn07XG5cblF1YWQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xuXG5cbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgICAgIFxuICAgIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcbiAgICBHTEZyYW1lYnVmZmVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xGcmFtZWJ1ZmZlcixcbiAgICBcbiAgICBTdGVuY2lsTWFza1N0YWNrID0gcmVxdWlyZSgnLi9TdGVuY2lsTWFza1N0YWNrJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIGhvcml6b250YWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgdmVydGljYWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAqIEBwYXJhbSByb290IHtib29sZWFufSBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gKi9cbnZhciBSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uLCByb290KVxue1xuICAgIC8vVE9ETyBSZXNvbHV0aW9uIGNvdWxkIGdvIGhlcmUgKCBlZyBsb3cgcmVzIGJsdXJzIClcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvLyBuZXh0IHRpbWUgdG8gY3JlYXRlIGEgZnJhbWUgYnVmZmVyIGFuZCB0ZXh0dXJlXG5cbiAgICAvKipcbiAgICAgKiBBIGZyYW1lIGJ1ZmZlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xGcmFtZUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJDb2xvciA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBvYmplY3QgYXMgYSByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9iamVjdCdzIHRyYW5zZm9ybVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5mcmFtZSA9IG51bGw7XG4gICAgXG4gICAgdGhpcy5kZWZhdWx0RnJhbWUgPSBuZXcgUElYSS5SZWN0YW5nbGUoKTtcbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBudWxsO1xuICAgIHRoaXMuc291cmNlRnJhbWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHN0ZW5jaWwgYnVmZmVyIHN0b3JlcyBtYXNraW5nIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlckJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgc3RlbmNpbCBtYXNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFza1N0YWNrfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG5ldyBTdGVuY2lsTWFza1N0YWNrKCk7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZXMgZmlsdGVyIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6dGhpcyxcbiAgICAgICAgICAgIGZpbHRlcjpbXSxcbiAgICAgICAgICAgIGJvdW5kczp0aGlzLnNpemVcbiAgICAgICAgfVxuICAgIF07XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVFxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gR0xGcmFtZWJ1ZmZlci5jcmVhdGVSR0JBKGdsLCAxMDAsIDEwMCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBBIGZyYW1lIGJ1ZmZlciBuZWVkcyBhIHRhcmdldCB0byByZW5kZXIgdG8uLlxuICAgICAgICAgICAgY3JlYXRlIGEgdGV4dHVyZSBhbmQgYmluZCBpdCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgICovXG4gICAgICAgIFxuXG4gICAgICAgLy8gVE9ETyBjaGFuZ2UhXG4gICAgICAgIC8vIHRoaXMgaXMgdXNlZCBieSB0aGUgYmFzZSB0ZXh0dXJlXG4gICAgICAgIHRoaXMudGV4dHVyZSA9IHRoaXMuZnJhbWVCdWZmZXIudGV4dHVyZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbWFrZSBpdCBhIG51bGwgZnJhbWVidWZmZXIuLlxuICAgICAgICB0aGlzLmZyYW1lQnVmZmVyLmZyYW1lYnVmZmVyID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn07XG5cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZW5kZXJUYXJnZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRhcmdldDtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpbHRlciB0ZXh0dXJlLlxuICpcbiAqIEBwYXJhbSBbYmluZD1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCB3ZSBiaW5kIG91ciBmcmFtZWJ1ZmZlciBiZWZvcmUgY2xlYXJpbmc/XG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbihjbGVhckNvbG9yKVxue1xuICAgIHZhciBjYyA9IGNsZWFyQ29sb3IgfHwgdGhpcy5jbGVhckNvbG9yXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5jbGVhcihjY1swXSxjY1sxXSxjY1syXSxjY1szXSkvL3IsZyxiLGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmF0dGFjaFN0ZW5jaWxCdWZmZXIgPSBmdW5jdGlvbigpXG57XG4gICAgLy9UT0RPIGNoZWNrIGlmIHN0ZW5jaWwgaXMgZG9uZT9cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgaXMgdXNlZCBmb3IgbWFza2luZyBpbiBwaXhpXG4gICAgICogbGV0cyBjcmVhdGUgb25lIGFuZCB0aGVuIGFkZCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgKi9cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZW5hYmxlU3RlbmNpbCgpO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXdwb3J0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIC8vVE9PRCByZWZhY3RvciB1c2FnZSBvZiBmcmFtZS4uXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIuYmluZCgpO1xuXG4gICAgdGhpcy5kZXN0aW5hdGlvbkZyYW1lID0gZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgfHwgdGhpcy5kZWZhdWx0RnJhbWU7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IHRoaXMuc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggdGhpcy5kZXN0aW5hdGlvbkZyYW1lLCB0aGlzLnNvdXJjZUZyYW1lICk7XG5cbiAgICBpZih0aGlzLnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5hcHBlbmQodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIGlmKHRoaXMuZGVzdGluYXRpb25GcmFtZSAhPT0gdGhpcy5zb3VyY2VGcmFtZSlcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgICAgICBnbC5zY2lzc29yKHRoaXMuZGVzdGluYXRpb25GcmFtZS54LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmRpc2FibGUoZ2wuU0NJU1NPUl9URVNUKTtcbiAgICB9XG5cblxuICAgIC8vIFRPRE8gLSBkb2VzIG5vdCBuZWVkIHRvIGJlIHVwZGF0ZWQgYWxsIHRoZSB0aW1lPz9cbiAgICBnbC52aWV3cG9ydCh0aGlzLmRlc3RpbmF0aW9uRnJhbWUueCx0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uKTtcblxuXG59O1xuXG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmFzZWQgb24gYSBwcm9qZWN0aW9uIGZyYW1lICh3aGljaCBpcyBhIHJlY3RhbmdsZSlcbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2FsY3VsYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbkZyYW1lLCBzb3VyY2VGcmFtZSlcbntcbiAgICB2YXIgcG0gPSB0aGlzLnByb2plY3Rpb25NYXRyaXg7XG5cbiAgICBzb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IGRlc3RpbmF0aW9uRnJhbWU7XG5cbiAgICBwbS5pZGVudGl0eSgpO1xuXG4gICAgLy8gVE9ETzogbWFrZSBkZXN0IHNjYWxlIHNvdXJjZVxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAxIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gLTEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAtMSAvIGRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0KjI7XG5cbiAgICAgICAgcG0udHggPSAtMSAtIHNvdXJjZUZyYW1lLnggKiBwbS5hO1xuICAgICAgICBwbS50eSA9IDEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVzaXplcyB0aGUgdGV4dHVyZSB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge051bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGhlaWdodCB7TnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgdGV4dHVyZVxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHdpZHRoID0gd2lkdGggfCAwO1xuICAgIGhlaWdodCA9IGhlaWdodCB8IDA7XG5cbiAgICBpZiAodGhpcy5zaXplLndpZHRoID09PSB3aWR0aCAmJiB0aGlzLnNpemUuaGVpZ2h0ID09PSBoZWlnaHQpIFxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2l6ZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuc2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICB0aGlzLmRlZmF1bHRGcmFtZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuZGVmYXVsdEZyYW1lLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIucmVzaXplKHdpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBoZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuICAgIFxuICAgIHZhciBwcm9qZWN0aW9uRnJhbWUgPSB0aGlzLmZyYW1lIHx8IHRoaXMuc2l6ZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSByZW5kZXIgdGFyZ2V0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIHRoaXMuZnJhbWVCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBTdGVuY2lsTWFza1N0YWNrKClcbntcblx0LyoqXG4gICAgICogVGhlIGFjdHVhbCBzdGFja1xuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsU3RhY2sgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQGFsdmluXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb3VudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY291bnQgPSAwO1xufVxuXG5TdGVuY2lsTWFza1N0YWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0ZW5jaWxNYXNrU3RhY2s7XG5tb2R1bGUuZXhwb3J0cyA9IFN0ZW5jaWxNYXNrU3RhY2s7XG4iLCJDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogTWFwcyBnbCBibGVuZCBjb21iaW5hdGlvbnMgdG8gV2ViR0xcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpKGdsLCBvYmplY3QpXG57XG4gICAgb2JqZWN0ID0gb2JqZWN0IHx8IHt9O1xuXG4gICAgLy9UT0RPIC0gcHJlbXVsdGlwbHkgYWxwaGEgd291bGQgYmUgZGlmZmVyZW50LlxuICAgIC8vYWRkIGEgYm9vbGVhbiBmb3IgdGhhdCFcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQUREXSAgICAgICAgICAgPSBbZ2wuU1JDX0FMUEhBLCBnbC5EU1RfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9IFtnbC5EU1RfQ09MT1IsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5TQ1JFRU5dICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLk9ORV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRBUktFTl0gICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0JVUk5dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRJRkZFUkVOQ0VdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aTtcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcblx0b2JqZWN0PSBvYmplY3QgfHwge307XG5cbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5QT0lOVFNdICAgICAgICAgPSBnbC5QT0lOVFM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORVNdICAgICAgICAgID0gZ2wuTElORVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9MT09QXSAgICAgID0gZ2wuTElORV9MT09QO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLkxJTkVfU1RSSVBdICAgICA9IGdsLkxJTkVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVTXSAgICAgID0gZ2wuVFJJQU5HTEVTO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXSA9IGdsLlRSSUFOR0xFX1NUUklQO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX0ZBTl0gICA9IGdsLlRSSUFOR0xFX0ZBTjtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBTcHJpdGUgb2JqZWN0IGlzIHRoZSBiYXNlIGZvciBhbGwgdGV4dHVyZWQgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCB0byB0aGUgc2NyZWVuXG4gKlxuICogQSBzcHJpdGUgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhbiBpbWFnZSBsaWtlIHRoaXM6XG4gKlxuICogYGBganNcbiAqIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgZm9yIHRoaXMgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZSh0ZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFuY2hvciBzZXRzIHRoZSBvcmlnaW4gcG9pbnQgb2YgdGhlIHRleHR1cmUuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgMCwwIHRoaXMgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0XG4gICAgICogU2V0dGluZyB0aGUgYW5jaG9yIHRvIDAuNSwwLjUgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgY2VudGVyZWRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMSwxIHdvdWxkIG1lYW4gdGhlIHRleHR1cmUncyBvcmlnaW4gcG9pbnQgd2lsbCBiZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmFuY2hvciA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUgKHRoaXMgaXMgaW5pdGlhbGx5IHNldCBieSB0aGUgdGV4dHVyZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQSB2YWx1ZSBvZiAweEZGRkZGRiB3aWxsIHJlbW92ZSBhbnkgdGludCBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2hhZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgc3ByaXRlLiBTZXQgdG8gbnVsbCB0byByZW1vdmUgYSBjdXJyZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJ8UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgY2FjaGVkIHZhbHVlIG9mIHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvLyBjYWxsIHRleHR1cmUgc2V0dGVyXG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBUZXh0dXJlLkVNUFRZO1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZVxuICAgIHRoaXMudmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblNwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLngpICogdGhpcy50ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzaWduID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLngpIHx8IDE7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBzaWduICogdmFsdWUgLyB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgTWF0aC5hYnModGhpcy5zY2FsZS55KSAqIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHByaXZhdGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBzbyBpZiBfd2lkdGggaXMgMCB0aGVuIHdpZHRoIHdhcyBub3Qgc2V0Li5cbiAgICBpZiAodGhpcy5fd2lkdGgpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnggPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgKiB0aGlzLl93aWR0aCAvIHRoaXMudGV4dHVyZS5mcmFtZS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zY2FsZS55ID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLnkpICogdGhpcy5faGVpZ2h0IC8gdGhpcy50ZXh0dXJlLmZyYW1lLmhlaWdodDtcbiAgICB9XG59O1xuXG5TcHJpdGUucHJvdG90eXBlLmNhY2x1bGF0ZVZlcnRpY2VzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgIHd0ID0gdGhpcy50cmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIGEgPSB3dC5hLCBiID0gd3QuYiwgYyA9IHd0LmMsIGQgPSB3dC5kLCB0eCA9IHd0LnR4LCB0eSA9IHd0LnR5LFxuICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhLFxuICAgICAgICB3MCwgdzEsIGgwLCBoMSxcbiAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcbiAgICAgICAgXG4gICAgaWYgKHRyaW0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgYW5kIGlzIG5vdCBhIHRpbGluZ3Nwcml0ZSB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgdzEgPSB0cmltLnggLSB0aGlzLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICBoMSA9IHRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcbiAgICB9XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMF0gPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzFdID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMl0gPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzNdID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzRdID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs1XSA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzZdID0gYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs3XSA9IGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG5cbn1cblxuLyoqXG4qXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy50cmFuc2Zvcm0udXBkYXRlZCB8fCB0aGlzLnRleHR1cmVEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZURpcnR5ID0gZmFsc2U7XG4gICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuICAgIH1cbiAgICBcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFNwcml0ZSBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcbiAgICAgICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5YLFxuICAgICAgICAgICAgbWF4WCxcbiAgICAgICAgICAgIG1pblksXG4gICAgICAgICAgICBtYXhZLFxuICAgICAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YTtcblxuICAgICAgICB2YXIgeDEgPSB2ZXJ0ZXhEYXRhWzBdXG4gICAgICAgIHZhciB5MSA9IHZlcnRleERhdGFbMV1cblxuICAgICAgICB2YXIgeDIgPSB2ZXJ0ZXhEYXRhWzJdXG4gICAgICAgIHZhciB5MiA9IHZlcnRleERhdGFbM11cblxuICAgICAgICB2YXIgeDMgPSB2ZXJ0ZXhEYXRhWzRdXG4gICAgICAgIHZhciB5MyA9IHZlcnRleERhdGFbNV1cblxuICAgICAgICB2YXIgeDQgPSB2ZXJ0ZXhEYXRhWzZdXG4gICAgICAgIHZhciB5NCA9IHZlcnRleERhdGFbN11cblxuICAgICAgICBtaW5YID0geDE7XG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkxO1xuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MTtcbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTE7XG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoaWxkcmVuXG4gICAgICAgIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGRCb3VuZHMgPSB0aGlzLmNvbnRhaW5lckdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICB3MCA9IGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICB3MSA9IGNoaWxkQm91bmRzLnggKyBjaGlsZEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGgwID0gY2hpbGRCb3VuZHMueTtcbiAgICAgICAgICAgIGgxID0gY2hpbGRCb3VuZHMueSArIGNoaWxkQm91bmRzLmhlaWdodDtcblxuICAgICAgICAgICAgbWluWCA9IChtaW5YIDwgdzApID8gbWluWCA6IHcwO1xuICAgICAgICAgICAgbWluWSA9IChtaW5ZIDwgaDApID8gbWluWSA6IGgwO1xuXG4gICAgICAgICAgICBtYXhYID0gKG1heFggPiB3MSkgPyBtYXhYIDogdzE7XG4gICAgICAgICAgICBtYXhZID0gKG1heFkgPiBoMSkgPyBtYXhZIDogaDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fYm91bmRzLnggPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHRoaXMuX2JvdW5kcy55ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG4gICAgdGhpcy5fYm91bmRzLndpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICByZXR1cm4gdGhpcy5fYm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgc3ByaXRlXG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cblNwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLnRleHR1cmUuY3JvcC53aWR0aCA8PSAwIHx8IHRoaXMudGV4dHVyZS5jcm9wLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vICBJZ25vcmUgbnVsbCBzb3VyY2VzXG4gICAgaWYgKHRoaXMudGV4dHVyZS52YWxpZClcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgICAgIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgIGR4LFxuICAgICAgICAgICAgZHksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDtcblxuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgICAgIC8vIElmIHNtb290aGluZ0VuYWJsZWQgaXMgc3VwcG9ydGVkIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgc21vb3RoaW5nIHByb3BlcnR5IGZvciB0aGlzIHRleHR1cmVcbiAgICAgICAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSO1xuICAgICAgICBpZiAocmVuZGVyZXIuc21vb3RoUHJvcGVydHkgJiYgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gIT09IHNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldID0gc21vb3RoaW5nRW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHRyaW1tZWQgd2Ugb2Zmc2V0IGJ5IHRoZSB0cmltIHgveSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgZnJhbWUgZGltZW5zaW9uc1xuXG4gICAgICAgIGlmKHRleHR1cmUucm90YXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICBcbiAgICAgICAgICAgIGR4ICs9IHdpZHRoO1xuXG4gICAgICAgICAgICB3dC50eCA9IGR5ICogd3QuYSArIGR4ICogd3QuYyArIHd0LnR4O1xuICAgICAgICAgICAgd3QudHkgPSBkeSAqIHd0LmIgKyBkeCAqIHd0LmQgKyB3dC50eTtcblxuICAgICAgICAgICAgdmFyIHRlbXAgPSB3dC5hO1xuICAgICAgICAgICAgd3QuYSAgPSAtd3QuYztcbiAgICAgICAgICAgIHd0LmMgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIHRlbXAgPSB3dC5iO1xuICAgICAgICAgICAgd3QuYiAgPSAtd3QuZDtcbiAgICAgICAgICAgIHd0LmQgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIC8vIHRoZSBhbmNob3IgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFib3ZlLCBzbyBsZXRzIHNldCBpdCB0byB6ZXJvXG4gICAgICAgICAgICBkeCA9IDA7XG4gICAgICAgICAgICBkeSA9IDA7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIC8vIEFsbG93IGZvciBwaXhlbCByb3VuZGluZ1xuICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgKHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwLFxuICAgICAgICAgICAgICAgICh3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHggPSBkeCB8IDA7XG4gICAgICAgICAgICBkeSA9IGR5IHwgMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICB3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjbGVhbiB1cCBjYWNoaW5nIC0gaG93IHRvIGNsZWFuIHVwIHRoZSBjYWNoZXM/XG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC55ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgc3ByaXRlIGFuZCBvcHRpb25hbGx5IGl0cyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95VGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95VGV4dHVyZSwgZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5hbmNob3IgPSBudWxsO1xuXG4gICAgaWYgKGRlc3Ryb3lUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcblxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zLi5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICovXG5TcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgU3ByaXRlKFRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXInKSxcbiAgICBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9jcmVhdGVJbmRpY2VzRm9yUXVhZHMnKSxcbiAgICBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4vZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgZ2xDb3JlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgU3ByaXRlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1Nwcml0ZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFJlbmRlcmVyIGRlZGljYXRlZCB0byBkcmF3aW5nIGFuZCBiYXRjaGluZyBzcHJpdGVzLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU3ByaXRlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgdmFsdWVzIHNlbnQgaW4gdGhlIHZlcnRleCBidWZmZXIuXG4gICAgICogcG9zaXRpb25YLCBwb3NpdGlvblksIGNvbG9yUiwgY29sb3JHLCBjb2xvckIgPSA1XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdmVydGV4IGluZm9ybWF0aW9uIGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgU3ByaXRlQmF0Y2ggYmVmb3JlIGl0IGZsdXNoZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIG91ciBiYXRjaFxuICAgIHZhciBudW1WZXJ0cyA9ICh0aGlzLnNpemUgKiA0KSAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBiYXRjaCwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgIHZhciBudW1JbmRpY2VzID0gdGhpcy5zaXplICogNjtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSB2ZXJ0ZXggZGF0YSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5QnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgQXJyYXlCdWZmZXIobnVtVmVydHMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBGbG9hdDMyQXJyYXkgZm9yIHBvc2l0aW9uc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciB1dnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIGNvbG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlcyBvZiB0aGUgZ2VvbWV0cnkgKHF1YWRzKSB0byBkcmF3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHModGhpcy5zaXplKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIFxuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICBcbiAgICAvL1RPRE8gLSAzMDAgaXMgYSBiaXQgbWFnaWMsIGZpZ3VyZSBvdXQgYSBuaWNlciBhbW91bnQhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykgXG4gICAge1xuICAgICAgICB0aGlzLmdyb3Vwc1tpXSA9IHt0ZXh0dXJlczpbXSwgdGV4dHVyZUNvdW50OjAsIGlkczpbXSwgc2l6ZTowLCBzdGFydDowLCBibGVuZDowfTsgXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcblxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsOyAgICBcbn1cblxuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3Nwcml0ZScsIFNwcml0ZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5NQVhfVEVYVFVFUyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cbiAgICB0aGlzLl9zaGFkZXIgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgdGhpcy5NQVhfVEVYVFVFUykvL25ldyBUZXh0dXJlU2hhZGVyKGdsKTtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlcjtcblxuICAgIC8vIGNyZWF0ZSBhIGNvdXBsZSBvZiBidWZmZXJzXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKGdsLCBudWxsLCBnbC5EWU5BTUlDX0RSQVcpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoZ2wsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgLy8gYnVpbGQgdGhlIHZhbyBvYmplY3QgdGhhdCB3aWxsIHJlbmRlci4uXG4gICAgdGhpcy52YW8gPSBuZXcgZ2xDb3JlLlZlcnRleEFycmF5T2JqZWN0KGdsKTtcblxuICAgIHRoaXMudmFvLmFkZEluZGV4KHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCAwKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIGdsLlVOU0lHTkVEX1NIT1JULCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMiAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMyAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVJZCwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgNCAqIDQpO1xuXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdG8gcmVuZGVyIHdoZW4gdXNpbmcgdGhpcyBzcHJpdGViYXRjaFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHNwcml0ZSlcbntcbiAgICAvL1RPRE8gc2V0IGJsZW5kIG1vZGVzLi5cbiAgICAvLyBjaGVjayB0ZXh0dXJlLi5cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPj0gdGhpcy5zaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICBcbiAgICAvLyBnZXQgdGhlIHV2cyBmb3IgdGhlIHRleHR1cmVcbiAgIFxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIGlmICghc3ByaXRlLnRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgLy8gcHVzaCBhIHRleHR1cmUuXG4gICAgLy8gaW5jcmVtZW50IHRoZSBiYXRjaHNpemVcbiAgICB2YXIgbmV4dFRleHR1cmUgPSAgc3ByaXRlLnRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgdmFyIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwO1xuICAgIHZhciBpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50VGV4dHVyZSAhPT0gbmV4dFRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbmV4dFRleHR1cmU7XG4gICAgICAgIFxuICAgICAgICBpZighbmV4dFRleHR1cmUuX2VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9pZCA9IHRoaXMudGV4dHVyZUNvdW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLnRleHR1cmVDb3VudCA9PT0gdGhpcy5NQVhfVEVYVFVFUylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgICAgICAgICAgICAgeyAgICAgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnN0YXJ0ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50KytdID0gbmV4dFRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHR1cmVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdHJpbT8/XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG5cbiAgICAvLyB1cGxvYWQgdGhlIHNwcml0ZSBlbGVtZXRucy4uLlxuICAgIC8vIHRoZXkgaGF2ZSBhbGwgcmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIHdlIGp1c3QgbmVlZCB0byBwdXNoIHRoZW0gaW50byB0aGUgYnVmZmVyLlxuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7XG4gICAgdmFyIHZlcnRleERhdGEgPSBzcHJpdGUudmVydGV4RGF0YVxuICAgIHZhciB0aW50ID0gKHNwcml0ZS50aW50ID4+IDE2KSArIChzcHJpdGUudGludCAmIDB4ZmYwMCkgKyAoKHNwcml0ZS50aW50ICYgMHhmZikgPDwgMTYpICsgKHNwcml0ZS53b3JsZEFscGhhICogMjU1IDw8IDI0KTtcbiAgICB2YXIgdXZzID0gc3ByaXRlLnRleHR1cmUuX3V2cy51dnNfdWludDMyO1xuICAgIC8veHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzBdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMF07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7IFxuICAgIFxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsyXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzNdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzFdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs0XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzVdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzJdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzZdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbN107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbM107XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgYW5kIGVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA9PT0gMClyZXR1cm47XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG5cbiAgICB0aGlzLmN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSB0aGlzLmN1cnJlbnRHcm91cC5zdGFydDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICB7ICAgICBcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgXG4gICAgLy8gZG8gc29tZSBzbWFydCBhcnJheSBzdHVmZi4uXG4gICAgLy8gZG91YmxlIHNpemUgc28gd2UgZG9udCBhbHdheSBzdWJhcnJheSB0aGUgZWxlbWVudHMuLlxuICAgIC8vIHVwbG9hZCB0aGUgdmVydHMgdG8gdGhlIGJ1ZmZlclxuICAgIGlmICh0aGlzLmN1cnJlbnRCYXRjaFNpemUgPiAoIHRoaXMuc2l6ZSAqIDAuNSApIClcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh0aGlzLnZlcnRpY2VzLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbyBrIC4uIHN1YiBhcnJheSBpcyBTTE9XPj9cbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnBvc2l0aW9ucy5zdWJhcnJheSgwLCB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplKTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHZpZXcsIDAsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgc2hhZGVyLi5cbiAgICB0aGlzLnJlbmRlcmVyLmJpbmRTaGFkZXIodGhpcy5fc2hhZGVyKTtcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCAwICk7XG5cbiAgICAvLy8gcmVuZGVyIHRoZSBncm91cHMuLlxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdyb3VwQ291bnQ7IGkrKykge1xuICAgICAgICBcbiAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5ncm91cHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC50ZXh0dXJlQ291bnQ7IGorKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kVGV4dHVyZShncm91cC50ZXh0dXJlc1tqXSwgaik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgZ3JvdXAuc2l6ZSAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCBncm91cC5zdGFydCAqIDYgKiAyKTtcbiAgICB9O1xuXG4gICAgLy8gcmVzZXQgZWxlbWVudHMgZm9yIHRoZSBuZXh0IGZsdXNoXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBzcHJpdGUgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFvLmJpbmQoKTtcbn07XG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgdGhpcy52YW8udW5iaW5kKCk7XG59O1xuLyoqXG4gKiBEZXN0cm95cyB0aGUgU3ByaXRlQmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuY29sb3JzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zcHJpdGVzID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCBtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgdmVydGV4U3JjID0gXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGFUZXh0dXJlSWQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZUZXh0dXJlSWQgPSBhVGV4dHVyZUlkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVwiO1xuICAgIHZhciBmcmFnbWVudFNyYyA9ICdwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG4nICsgZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpICsgXCJcXG5cXG5cIiArIGZyYWdUZW1wbGF0ZVxuXG4gICAgZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYy5yZXBsYWNlKC9cXCVcXCUvZ2ksICcxNicpO1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cbiAgICB2YXIgc2FtcGxlVmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSB7XG4gICAgICAgIHNhbXBsZVZhbHVlc1tpXSA9IGk7XG4gICAgfTtcblxuICAgIHNoYWRlci5iaW5kKCk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnVTYW1wbGVycyA9IHNhbXBsZVZhbHVlcztcblxuICAgIHJldHVybiBzaGFkZXI7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKVxue1xuICAgIHZhciBzcmMgPSAndmVjNCBnZXRTYW1wbGVGcm9tQXJyYXkoc2FtcGxlcjJEIHRleHR1cmVzWyUlXSwgaW50IG5keCwgdmVjMiB1dikge1xcblxcbnZlYzQgY29sb3I7J1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgaWYoaSA+IDApc3JjICs9ICdcXG5lbHNlICc7XG4gICAgICAgIGlmKGkgPCBtYXhUZXh0dXJlcy0xKXNyYyArPSAnaWYobmR4ID09ICcgKyBpICsgJyknO1xuICAgICAgICBzcmMgKz0gJ1xcbnsnO1xuICAgICAgICBzcmMgKz0gJ1xcblxcdGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmVzWycraSsnXSwgdXYpOyc7XG4gICAgICAgIHNyYyArPSAnXFxufSc7XG4gICAgfTtcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdyZXR1cm4gY29sb3I7JztcbiAgICBzcmMgKz0gJ1xcbn0nO1xuXG4gICAgcmV0dXJuIHNyYztcbn1cblxudmFyIGZyYWdUZW1wbGF0ZSA9IFtcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG4gICAgJ3ZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsnLFxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcnNbJSVdOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICdnbF9GcmFnQ29sb3IgPSBnZXRTYW1wbGVGcm9tQXJyYXkodVNhbXBsZXJzLCBpbnQodlRleHR1cmVJZCksIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yOycsXG4gICAgJ30nXG5dLmpvaW4oJ1xcbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyO1xuIiwidmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBUZXh0IE9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nIGluIHlvdXIgdGV4dCBzdHJpbmcsXG4gKiBvciBhZGQgYSB3b3JkV3JhcCBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSBhbmQgYW5kIHdvcmRXcmFwV2lkdGggcHJvcGVydHkgd2l0aCBhIHZhbHVlIGluIHRoZSBzdHlsZSBvYmplY3QuXG4gKlxuICogQSBUZXh0IGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBzdHJpbmcgYW5kIGEgc3R5bGUgb2JqZWN0XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0ID0gbmV3IFBJWEkuVGV4dCgnVGhpcyBpcyBhIHBpeGkgdGV4dCcse2ZvbnQgOiAnMjRweCBBcmlhbCcsIGZpbGwgOiAweGZmMTAxMCwgYWxpZ24gOiAnY2VudGVyJ30pO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbc3R5bGUuZm9udF0ge3N0cmluZ30gZGVmYXVsdCAnYm9sZCAyMHB4IEFyaWFsJyBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlLmcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcCwgaXQgbmVlZHMgd29yZFdyYXAgdG8gYmUgc2V0IHRvIHRydWVcbiAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzRdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gKi9cbmZ1bmN0aW9uIFRleHQodGV4dCwgc3R5bGUsIHJlc29sdXRpb24pXG57XG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgMmQgY29udGV4dCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gd2l0aFxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY2FudmFzLlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyh0aGlzLmNhbnZhcyk7XG4gICAgdGV4dHVyZS50cmltID0gbmV3IG1hdGguUmVjdGFuZ2xlKCk7XG4gICAgU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbn1cblxuLy8gY29uc3RydWN0b3JcblRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTcHJpdGUucHJvdG90eXBlKTtcblRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gVGV4dDtcblxuVGV4dC5mb250UHJvcGVydGllc0NhY2hlID0ge307XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZm9udD0nYm9sZCAyMHB0IEFyaWFsJ10ge3N0cmluZ30gVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gICAgICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZWcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGVnICdibHVlJywgJyNGQ0ZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXBcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd8bnVtYmVyfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNl0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gICAgICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAgICAgKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAgICAgKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHN0eWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdHlsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5maWxsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpbGwgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmZpbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLnN0cm9rZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zdHJva2UgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLnN0cm9rZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZHJvcFNoYWRvd0NvbG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZHJvcFNoYWRvd0NvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGUuZm9udCA9IHN0eWxlLmZvbnQgfHwgJ2JvbGQgMjBwdCBBcmlhbCc7XG4gICAgICAgICAgICBzdHlsZS5maWxsID0gc3R5bGUuZmlsbCB8fCAnYmxhY2snO1xuICAgICAgICAgICAgc3R5bGUuYWxpZ24gPSBzdHlsZS5hbGlnbiB8fCAnbGVmdCc7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2UgPSBzdHlsZS5zdHJva2UgfHwgJ2JsYWNrJzsgLy9wcm92aWRlIGEgZGVmYXVsdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzLzEzNlxuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIHx8IDA7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcCA9IHN0eWxlLndvcmRXcmFwIHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXBXaWR0aCA9IHN0eWxlLndvcmRXcmFwV2lkdGggfHwgMTAwO1xuXG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93ID0gc3R5bGUuZHJvcFNoYWRvdyB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvciB8fCAnIzAwMDAwMCc7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93QW5nbGUgPSBzdHlsZS5kcm9wU2hhZG93QW5nbGUgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA6IE1hdGguUEkgLyA2O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlID0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgOiA1O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0JsdXIgOiAwOyAvL3NoYWRvd0JsdXIgaXMgJzAnIGJ5IGRlZmF1bHQgYWNjb3JkaW5nIHRvIEhUTUxcblxuICAgICAgICAgICAgc3R5bGUucGFkZGluZyA9IHN0eWxlLnBhZGRpbmcgfHwgMDtcblxuICAgICAgICAgICAgc3R5bGUudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lIHx8ICdhbHBoYWJldGljJztcblxuICAgICAgICAgICAgc3R5bGUubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbiB8fCAnbWl0ZXInO1xuICAgICAgICAgICAgc3R5bGUubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQgfHwgMTA7XG5cbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gc3R5bGU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNvcHkgZm9yIHRoZSB0ZXh0IG9iamVjdC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCl7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgc3R5bGUgPSB0aGlzLl9zdHlsZTtcbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG5cbiAgICAvLyB3b3JkIHdyYXBcbiAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbCB0ZXh0XG4gICAgdmFyIG91dHB1dFRleHQgPSBzdHlsZS53b3JkV3JhcCA/IHRoaXMud29yZFdyYXAodGhpcy5fdGV4dCkgOiB0aGlzLl90ZXh0O1xuXG4gICAgLy8gc3BsaXQgdGV4dCBpbnRvIGxpbmVzXG4gICAgdmFyIGxpbmVzID0gb3V0cHV0VGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCB3aWR0aFxuICAgIHZhciBsaW5lV2lkdGhzID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aCk7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGZvbnRQcm9wZXJ0aWVzID0gdGhpcy5kZXRlcm1pbmVGb250UHJvcGVydGllcyhzdHlsZS5mb250KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBsaW5lV2lkdGg7XG4gICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICB2YXIgd2lkdGggPSBtYXhMaW5lV2lkdGggKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICB3aWR0aCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSAoIHdpZHRoICsgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgaGVpZ2h0XG4gICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLnN0eWxlLmxpbmVIZWlnaHQgfHwgZm9udFByb3BlcnRpZXMuZm9udFNpemUgKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG5cbiAgICB2YXIgaGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aDtcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGhlaWdodCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gKCBoZWlnaHQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nICogMiApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5jb250ZXh0LnNjYWxlKCB0aGlzLnJlc29sdXRpb24sIHRoaXMucmVzb2x1dGlvbik7XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgfVxuXG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFN0eWxlPVwiI0ZGMDAwMFwiO1xuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuICAgIHRoaXMuY29udGV4dC5zdHJva2VTdHlsZSA9IHN0eWxlLnN0cm9rZTtcbiAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIHRoaXMuY29udGV4dC50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmU7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVKb2luID0gc3R5bGUubGluZUpvaW47XG4gICAgdGhpcy5jb250ZXh0Lm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0O1xuXG4gICAgdmFyIGxpbmVQb3NpdGlvblg7XG4gICAgdmFyIGxpbmVQb3NpdGlvblk7XG5cbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGlmIChzdHlsZS5kcm9wU2hhZG93Qmx1ciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhTaGFkb3dPZmZzZXQgPSBNYXRoLmNvcyhzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgICAgICB2YXIgeVNoYWRvd09mZnNldCA9IE1hdGguc2luKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCArIHhTaGFkb3dPZmZzZXQsIGxpbmVQb3NpdGlvblkgKyB5U2hhZG93T2Zmc2V0ICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL3NldCBjYW52YXMgdGV4dCBzdHlsZXNcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZmlsbDtcblxuICAgIC8vZHJhdyBsaW5lcyBsaW5lIGJ5IGxpbmVcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0cm9rZSAmJiBzdHlsZS5zdHJva2VUaGlja25lc3MpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJva2VUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUudHJpbS54ID0gMDtcbiAgICB0ZXh0dXJlLnRyaW0ueSA9IC10aGlzLl9zdHlsZS5wYWRkaW5nO1xuXG4gICAgdGV4dHVyZS50cmltLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGV4dHVyZS50cmltLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAtIHRoaXMuX3N0eWxlLnBhZGRpbmcqMjtcblxuICAgIHRoaXMuX3dpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5lbWl0KCd1cGRhdGUnLCAgdGV4dHVyZS5iYXNlVGV4dHVyZSk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqL1xuVGV4dC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICAvL3RoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5yZW5kZXJXZWJHTC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgLy8gICB0aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYXNjZW50LCBkZXNjZW50IGFuZCBmb250U2l6ZSBvZiBhIGdpdmVuIGZvbnRTdHlsZVxuICpcbiAqIEBwYXJhbSBmb250U3R5bGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGZvbnRTdHlsZSlcbntcbiAgICB2YXIgcHJvcGVydGllcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdO1xuXG4gICAgaWYgKCFwcm9wZXJ0aWVzKVxuICAgIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzO1xuICAgICAgICB2YXIgY29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnfE3DiXEnKS53aWR0aCk7XG4gICAgICAgIHZhciBiYXNlbGluZSA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCdNJykud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xuXG4gICAgICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiAxLjQgfCAwO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNmMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQoJ3xNw4lxJywgMCwgYmFzZWxpbmUpO1xuXG4gICAgICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgICB2YXIgcGl4ZWxzID0gaW1hZ2VkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmUgPSB3aWR0aCAqIDQ7XG5cbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgIHZhciBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZWxpbmU7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCArPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnQgPSBiYXNlbGluZSAtIGk7XG5cbiAgICAgICAgaWR4ID0gcGl4ZWxzIC0gbGluZTtcbiAgICAgICAgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGRlc2NlbnQuIHNjYW4gZnJvbSBib3R0b20gdG8gdG9wIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggLT0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IGkgLSBiYXNlbGluZTtcbiAgICAgICAgcHJvcGVydGllcy5mb250U2l6ZSA9IHByb3BlcnRpZXMuYXNjZW50ICsgcHJvcGVydGllcy5kZXNjZW50O1xuXG4gICAgICAgIFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBuZXdsaW5lcyB0byBhIHN0cmluZyB0byBoYXZlIGl0IG9wdGltYWxseSBmaXQgaW50byB0aGUgaG9yaXpvbnRhbFxuICogYm91bmRzIHNldCBieSB0aGUgVGV4dCBvYmplY3QncyB3b3JkV3JhcFdpZHRoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS53b3JkV3JhcCA9IGZ1bmN0aW9uICh0ZXh0KVxue1xuICAgIC8vIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyXG4gICAgLy8gdGhhbiBpdHMgaG9yaXpvbnRhbCBib3VuZHMuXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICAgIHZhciB3b3JkV3JhcFdpZHRoID0gdGhpcy5fc3R5bGUud29yZFdyYXBXaWR0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XG4gICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQod29yZHNbal0pLndpZHRoO1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aFdpdGhTcGFjZSA9IHdvcmRXaWR0aCArIHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xuICAgICAgICAgICAgaWYgKGogPT09IDAgfHwgd29yZFdpZHRoV2l0aFNwYWNlID4gc3BhY2VMZWZ0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcHJpbnRpbmcgdGhlIG5ld2xpbmUgaWYgaXQncyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZSB0aGF0IGlzXG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSB3b3JkIHdyYXAgd2lkdGguXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal07XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB3b3Jkc1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgbGluZXMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFRleHQgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgVGV4dFxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UZXh0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzLmNhbGwodGhpcywgbWF0cml4KTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT10cnVlXSB7Ym9vbGVhbn0gd2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICAvLyBtYWtlIHN1cmUgdG8gcmVzZXQgdGhlIHRoZSBjb250ZXh0IGFuZCBjYW52YXMuLiBkb250IHdhbnQgdGhpcyBoYW5naW5nIGFyb3VuZCBpbiBtZW1vcnkhXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG5cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGVzdHJveUJhc2VUZXh0dXJlKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIFJlbmRlclRhcmdldCA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBGaWx0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKSxcbiAgICB0ZW1wUmVjdCA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuXG4vKipcbiAqIEEgQmFzZVJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIEJhc2VSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIHRha2VzIGEgc25hcHNob3Qgb2YgYW55IERpc3BsYXkgT2JqZWN0IGdpdmVuIHRvIGl0cyByZW5kZXIgbWV0aG9kLiBUaGUgcG9zaXRpb25cbiAqIGFuZCByb3RhdGlvbiBvZiB0aGUgZ2l2ZW4gRGlzcGxheSBPYmplY3RzIGlzIGlnbm9yZWQuIEZvciBleGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcigxMDI0LCAxMDI0LCB7IHZpZXc6IGNhbnZhcywgcmF0aW86IDEgfSk7XG4gKiB2YXIgQmFzZXJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5CYXNlUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihzcHJpdGUpO1xuICogYGBgXG4gKlxuICogVGhlIFNwcml0ZSBpbiB0aGlzIGNhc2Ugd2lsbCBiZSByZW5kZXJlZCB0byBhIHBvc2l0aW9uIG9mIDAsMC4gVG8gcmVuZGVyIHRoaXMgc3ByaXRlIGF0IGl0cyBhY3R1YWxcbiAqIHBvc2l0aW9uIGEgQ29udGFpbmVyIHNob3VsZCBiZSB1c2VkOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZG9jID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKlxuICogZG9jLmFkZENoaWxkKHNwcml0ZSk7XG4gKlxuICogQmFzZXJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiBCYXNlcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZVxuICogQHBhcmFtIFt3aWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbaGVpZ2h0PTEwMF0ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIEJhc2VSZW5kZXJUZXh0dXJlLCB5b3UgbXVzdCBwYXNzIGEgcmVuZGVyZXIgaW50byB0aGUgY29uc3RydWN0b3IuJyk7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUuY2FsbCh0aGlzLCBudWxsLCBzY2FsZU1vZGUpO1xuICAgXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047O1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRHJhdy9yZW5kZXIgdGhlIGdpdmVuIERpc3BsYXlPYmplY3Qgb250byB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBkZXNjZW5kZW50cyBhcmUgdHJhbnNmb3JtZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIElmIGB1cGRhdGVUcmFuc2Zvcm1gIGlzIHRydWUgdGhlbiB0aGUgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQgYmVmb3JlIHRoZVxuICAgICAqIG1ldGhvZCByZXR1cm5zLiBPdGhlcndpc2UgaXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcgY29kZSB0byBjb3JyZWN0bHkgdXNlIG9yIHJlc2V0XG4gICAgICogdGhlIHRyYW5zZm9ybWVkIGRpc3BsYXkgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5IG9iamVjdCBpcyBhbHdheXMgcmVuZGVyZWQgd2l0aCBhIHdvcmxkQWxwaGEgdmFsdWUgb2YgMS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICAgICAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gICAgICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAgICAgKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB1c2VzLiBBIEJhc2VSZW5kZXJUZXh0dXJlIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgcmVuZGVyZXIgYXQgdGhlIG1vbWVudCBpZiBpdHMgd2ViR0wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnNjYWxlTW9kZSwgdGhpcy5yZXNvbHV0aW9uKTsvLywgdGhpcy50aGlzLnNjYWxlTW9kZSk7XG4gICAgICAgIHRoaXMuX2dsVGV4dHVyZXNbZ2wuaWRdID0gIHRoaXMudGV4dHVyZUJ1ZmZlci50ZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgLy9UT0RPIHJlZmFjdG9yIGZpbHRlciBtYW5hZ2VyLi4gYXMgcmVhbGx5IGl0cyBubyBsb25nZXIgYSBtYW5hZ2VyIGlmIHdlIHVzZSBpdCBoZXJlLi5cbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbmV3IEZpbHRlck1hbmFnZXIodGhpcy5yZW5kZXJlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlcldlYkdMO1xuXG4gICAgICAgIC8vIHRoZSBjcmVhdGlvbiBvZiBhIGZpbHRlciBtYW5hZ2VyIHVuYmluZHMgdGhlIGJ1ZmZlcnMuLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgICAgICBpZih0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQpdGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlckNhbnZhcztcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcih0aGlzLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuaGVpZ2h0KiB0aGlzLnJlc29sdXRpb24pO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcblxufVxuXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIHVwZGF0ZUJhc2Uge2Jvb2xlYW59IFNob3VsZCB0aGUgYmFzZVRleHR1cmUud2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYmUgcmVzaXplZCBhcyB3ZWxsP1xuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgaWYgKHdpZHRoID09PSB0aGlzLndpZHRoICYmIGhlaWdodCA9PT0gdGhpcy5oZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZCA9ICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7XG5cbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoZGVzdGluYXRpb25GcmFtZSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuYmluZEZyYW1lYnVmZmVyKHRoaXMucmVuZGVyZXIuZ2wuRlJBTUVCVUZGRVIsIHRoaXMudGV4dHVyZUJ1ZmZlci5mcmFtZUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKGZhbHNlLCBkZXN0aW5hdGlvbkZyYW1lKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAoZnJhbWUsIGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAodXBkYXRlVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpID8gdXBkYXRlVHJhbnNmb3JtIDogdHJ1ZTsvLyF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIudHJhbnNmb3JtID0gbWF0cml4O1xuXG4gICAgLy9UT0RPIG5vdCBhIGZhbiB0aGF0IHRoaXMgaXMgaGVyZS4uLiBpdCB3aWxsIG1vdmUhXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKCk7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICBpZiAodXBkYXRlVHJhbnNmb3JtKVxuICAgIHtcblxuICAgICAgICAvLyByZXNldCB0aGUgbWF0cml4IG9mIHRoZSBkaXNwbGF0eU9iamVjdC4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uaWRlbnRpdHkoKTtcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmN1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGVtcFJlY3Qud2lkdGggPSBmcmFtZS5oZWlnaHQ7XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gZnJhbWUud2lkdGg7XG4gICBcbiAgICAvL1RPRE8gcmVuYW1lIHRleHR1cmVCdWZmZXIgdG8gcmVuZGVyVGFyZ2V0Li5cbiAgICB2YXIgdGVtcCA9ICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0aGlzLmZpbHRlck1hbmFnZXI7XG4gICAgXG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIuYWN0aXZhdGUoZnJhbWUsIHRlbXBSZWN0KTtcbiAgICBjb25zb2xlLmxvZyhkaXNwbGF5T2JqZWN0KVxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnRleHR1cmVCdWZmZXIsIGNsZWFyKTtcblxuICAgLy8gY29uc29sZS5sb2coXCJSRU5ERVJJTkcgXCIpO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRlbXA7XG59O1xuXG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcl0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVwZGF0ZVRyYW5zZm9ybSA9ICEhdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdmFyIHd0ID0gdGVtcE1hdHJpeDtcblxuICAgIHd0LmlkZW50aXR5KCk7XG5cbiAgICBpZiAobWF0cml4KVxuICAgIHtcbiAgICAgICAgd3QuYXBwZW5kKG1hdHJpeCk7XG4gICAgfVxuXG5cbiAgICB3dC50eCArPSBmcmFtZS54O1xuICAgIHd0LnR5ICs9IGZyYW1lLnk7XG5cbiAgICB2YXIgY2FjaGVkV3QgPSBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtO1xuICAgIFxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSB3dDtcblxuICAgIC8vIHNldFdvcmxkIEFscGhhIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgcmVuZGVyZXIgYXQgZnVsbCBvcGFjaXR5XG4gICAgZGlzcGxheU9iamVjdC53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICB2YXIgaSwgajtcblxuICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBcbi8vICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5cbiAgICB2YXIgY29udGV4dCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlYWxSZXNvbHV0aW9uID0gdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIGNvbnRleHQpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gcmVhbFJlc29sdXRpb247XG5cbiAgICBpZihkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID09PSB3dClcbiAgICB7XG4gICAgICAgIC8vIGZpeGVzIGNhY2hlQXNCaXRtYXAgSGFwcGVuaW5nIGR1cmluZyB0aGUgYWJvdmUuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gY2FjaGVkV3Q7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBkZXN0cm95QmFzZSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIGZpbHRlcm1hbmFnZXIuLlxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoZnJhbWUpXG57XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uuc3JjID0gdGhpcy5nZXRCYXNlNjQoZnJhbWUpO1xuICAgIHJldHVybiBpbWFnZTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGlzIHRleHR1cmUuIEl0IHdvcmtzIGJ5IGNhbGxpbmcgQmFzZVJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgIHJldHVybiB0aGlzLmdldENhbnZhcyhmcmFtZSkudG9EYXRhVVJMKCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIEJhc2VSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldENhbnZhcyA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2lkdGggPSBmcmFtZS53aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBjYW52YXNEYXRhID0gdGVtcENhbnZhcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2FudmFzRGF0YS5kYXRhLnNldCh3ZWJHTFBpeGVscyk7XG5cbiAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICByZXR1cm4gdGVtcENhbnZhcy5jYW52YXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy53aWR0aDtcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoZnJhbWUud2lkdGggPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGggJiYgXG4gICAgICAgICAgIGZyYW1lLmhlaWdodCA9PT0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5oZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IENhbnZhc0J1ZmZlcihmcmFtZS53aWR0aCAqIHJlc29sdXRpb24sIGZyYW1lLmhlaWdodCAqIHJlc29sdXRpb24pO1xuICAgICAgICAgICAgdmFyIGNhbnZhc0RhdGEgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dC5nZXRJbWFnZURhdGEoZnJhbWUueCAgKiByZXNvbHV0aW9uLCBmcmFtZS55ICogcmVzb2x1dGlvbiwgZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIHRoZSBlbnRpcmUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICBpZighZnJhbWUpXG4gICAge1xuICAgICAgICBmcmFtZSA9IHRlbXBSZWN0O1xuICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICByZXR1cm4gd2ViR0xQaXhlbHM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIGEgcGl4ZWwgd2l0aGluIHRoZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uIChmcmFtZSwgeCwgeSlcbntcbiAgICB0ZW1wUmVjdC54ID0geDtcbiAgICB0ZW1wUmVjdC55ID0geTtcbiAgICB0ZW1wUmVjdC53aWR0aCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gMSAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmKGZyYW1lKVxuICAgIHtcbiAgICAgICAgdGVtcFJlY3QueCArPSBmcmFtZS54O1xuICAgICAgICB0ZW1wUmVjdC55ICs9IGZyYW1lLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UGl4ZWxzKHRlbXBSZWN0KTtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlLiBBbGwgdGV4dHVyZXMgaGF2ZSBhIGJhc2UgdGV4dHVyZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50IHBpeGVsIHJhdGlvc1xuICovXG5mdW5jdGlvbiBCYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDEwMDtcblxuICAgIC8vIFRPRE8gZG9jc1xuICAgIC8vIHVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2VcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxXaWR0aCA9IDEwMDtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgaGVpZ2h0IG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUgdG8gYXBwbHkgd2hlbiBzY2FsaW5nIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuTElORUFSXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIG9uY2UgdGhlIGJhc2UgdGV4dHVyZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbmV2ZXIgdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmFpbHMgdG8gbG9hZCBvciBoYXMgbm8gdGV4dHVyZSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgaWYgdGhlIHNvdXJjZSBpcyBjdXJyZW50bHkgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIElmIGFuIEltYWdlIHNvdXJjZSBpcyBsb2FkaW5nIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmVcbiAgICAgKiBkaXNwYXRjaGVkIHdoZW4gdGhlIG9wZXJhdGlvbiBlbmRzLiBBbiB1bmRlcnlsaW5nIHNvdXJjZSB0aGF0IGlzXG4gICAgICogaW1tZWRpYXRlbHktYXZhaWxhYmxlIGJ5cGFzc2VzIGxvYWRpbmcgZW50aXJlbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW1hZ2Ugc291cmNlIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUT0RPOiBNYWtlIHRoaXMgYSBzZXR0ZXIgdGhhdCBjYWxscyBsb2FkU291cmNlKCk7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtJbWFnZXxDYW52YXN9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsOyAvLyBzZXQgaW4gbG9hZFNvdXJjZSwgaWYgYXQgYWxsXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiBSR0IgY2hhbm5lbHMgc2hvdWxkIGJlIHByZS1tdWx0aXBsaWVkIGJ5IEFscGhhICAoV2ViR0wgb25seSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBvciBub3QgdGhlIHRleHR1cmUgaXMgYSBwb3dlciBvZiB0d28sIHRyeSB0byB1c2UgcG93ZXIgb2YgdHdvIHRleHR1cmVzIGFzIG11Y2ggYXMgeW91IGNhblxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IGZhbHNlO1xuXG4gICAgLy8gdXNlZCBmb3Igd2ViR0xcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiBhIG1pcG1hcCBvZiB0aGlzIHRleHR1cmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLiBUaGlzIHZhbHVlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIHRleHR1cmUgaXMgdXNlZFxuICAgICAqIEFsc28gdGhlIHRleHR1cmUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBzaXplIHRvIHdvcmtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5taXBtYXAgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHJlbmRlcmVyIElEcyB0byB3ZWJnbCB0ZXh0dXJlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgV2ViR0xUZXh0dXJlPn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9pZCA9IDA7XG4gICAgXG4gICAgLy8gaWYgbm8gc291cmNlIHBhc3NlZCBkb24ndCB0cnkgdG8gbG9hZFxuICAgIGlmIChzb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmluaXNoZXMgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkZWRcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmFpbHMgdG8gbG9hZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBCYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0ZXh0dXJlIG9uIGFsbCB0aGUgd2ViZ2wgcmVuZGVyZXJzLCB0aGlzIGFsc28gYXNzdW1lcyB0aGUgc3JjIGhhcyBjaGFuZ2VkLlxuICpcbiAqIEBmaXJlcyB1cGRhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5yZWFsV2lkdGggPSB0aGlzLnNvdXJjZS5uYXR1cmFsV2lkdGggfHwgdGhpcy5zb3VyY2Uud2lkdGg7XG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gdGhpcy5zb3VyY2UubmF0dXJhbEhlaWdodCB8fCB0aGlzLnNvdXJjZS5oZWlnaHQ7XG5cbiAgICB0aGlzLndpZHRoID0gdGhpcy5yZWFsV2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlYWxIZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IHV0aWxzLmlzUG93ZXJPZlR3byh0aGlzLnJlYWxXaWR0aCwgdGhpcy5yZWFsSGVpZ2h0KTtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIExvYWQgYSBzb3VyY2UuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBpcyBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlLCBzdWNoIGFzIGFuIGltYWdlIHRoYXQgbmVlZHMgdG8gYmVcbiAqIGRvd25sb2FkZWQsIHRoZW4gdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIGluIHRoZSBmdXR1cmVcbiAqIGFuZCBgaGFzTG9hZGVkYCB3aWxsIHJlbWFpbiBmYWxzZSBhZnRlciB0aGlzIGNhbGwuXG4gKlxuICogVGhlIGxvZ2ljIHN0YXRlIGFmdGVyIGNhbGxpbmcgYGxvYWRTb3VyY2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGVnLiBgZnJvbUltYWdlYCwgYG5ldyBCYXNlVGV4dHVyZWApIGlzOlxuICpcbiAqICAgICBpZiAodGV4dHVyZS5oYXNMb2FkZWQpXG4ge1xuICogICAgICAgIC8vIHRleHR1cmUgcmVhZHkgZm9yIHVzZVxuICogICAgIH0gZWxzZSBpZiAodGV4dHVyZS5pc0xvYWRpbmcpXG4ge1xuICogICAgICAgIC8vIGxpc3RlbiB0byAnbG9hZGVkJyBhbmQvb3IgJ2Vycm9yJyBldmVudHMgb24gdGV4dHVyZVxuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAgLy8gbm90IGxvYWRpbmcsIG5vdCBnb2luZyB0byBsb2FkIFVOTEVTUyB0aGUgc291cmNlIGlzIHJlbG9hZGVkXG4gKiAgICAgICAgLy8gKGl0IG1heSBzdGlsbCBtYWtlIHNlbnNlIHRvIGxpc3RlbiB0byB0aGUgZXZlbnRzKVxuICogICAgIH1cbiAqXG4gKiBAcHJvdGVjdGVkXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUubG9hZFNvdXJjZSA9IGZ1bmN0aW9uIChzb3VyY2UpXG57XG4gICAgdmFyIHdhc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZztcbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAod2FzTG9hZGluZyAmJiB0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc291cmNlLm9uZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgLy8gQXBwbHkgc291cmNlIGlmIGxvYWRlZC4gT3RoZXJ3aXNlIHNldHVwIGFwcHJvcHJpYXRlIGxvYWRpbmcgbW9uaXRvcnMuXG4gICAgaWYgKCh0aGlzLnNvdXJjZS5jb21wbGV0ZSB8fCB0aGlzLnNvdXJjZS5nZXRDb250ZXh0KSAmJiB0aGlzLnNvdXJjZS53aWR0aCAmJiB0aGlzLnNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNvdXJjZS5nZXRDb250ZXh0KVxuICAgIHtcblxuICAgICAgICAvLyBJbWFnZSBmYWlsIC8gbm90IHJlYWR5XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuXG4gICAgICAgIHNvdXJjZS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgc2NvcGUuZW1pdCgnbG9hZGVkJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvdXJjZS5vbmVycm9yID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5lbWl0KCdlcnJvcicsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQZXIgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjdGhlLWltZy1lbGVtZW50XG4gICAgICAgIC8vICAgXCJUaGUgdmFsdWUgb2YgYGNvbXBsZXRlYCBjYW4gdGh1cyBjaGFuZ2Ugd2hpbGUgYSBzY3JpcHQgaXMgZXhlY3V0aW5nLlwiXG4gICAgICAgIC8vIFNvIGNvbXBsZXRlIG5lZWRzIHRvIGJlIHJlLWNoZWNrZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gYWRkZWQuLlxuICAgICAgICAvLyBOT1RFOiBjb21wbGV0ZSB3aWxsIGJlIHRydWUgaWYgdGhlIGltYWdlIGhhcyBubyBzcmMgc28gYmVzdCB0byBjaGVjayBpZiB0aGUgc3JjIGlzIHNldC5cbiAgICAgICAgaWYgKHNvdXJjZS5jb21wbGV0ZSAmJiBzb3VyY2Uuc3JjKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyAuLmFuZCBpZiB3ZSdyZSBjb21wbGV0ZSBub3csIG5vIG5lZWQgZm9yIGNhbGxiYWNrc1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgc29tZSBvdGhlciB0cmFja2luZyB2YXJzIG9uY2VcbiAqIGEgc291cmNlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5fc291cmNlTG9hZGVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBiYXNlIHRleHR1cmVcbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5pbWFnZVVybClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuICAgICAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlLnNyYyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLnNvdXJjZS5fcGl4aUlkXTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG5cbiAgICB0aGlzLmRpc3Bvc2UoKTtcbn07XG5cbi8qKlxuICogRnJlZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTCBtZW1vcnkgd2l0aG91dCBkZXN0cm95aW5nIHRoaXMgdGV4dHVyZSBvYmplY3QuXG4gKiBUaGlzIG1lYW5zIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSB0ZXh0dXJlIGxhdGVyIHdoaWNoIHdpbGwgdXBsb2FkIGl0IHRvIEdQVVxuICogbWVtb3J5IGFnYWluLlxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIHRoaXMpO1xuXG4gICAgLy8gdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lZWRlZCwgdGhlIHJlbmRlcmVycyBzaG91bGQgY2xlYW51cCBhbGwgdGhlIGdsIHRleHR1cmVzLlxuICAgIC8vIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgc291cmNlIGltYWdlIG9mIHRoZSB0ZXh0dXJlLlxuICogVGhlIG9yaWdpbmFsIHNvdXJjZSBtdXN0IGJlIGFuIEltYWdlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5ld1NyYyB7c3RyaW5nfSB0aGUgcGF0aCBvZiB0aGUgaW1hZ2VcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNvdXJjZUltYWdlID0gZnVuY3Rpb24gKG5ld1NyYylcbntcbiAgICB0aGlzLnNvdXJjZS5zcmMgPSBuZXdTcmM7XG5cbiAgICB0aGlzLmxvYWRTb3VyY2UodGhpcy5zb3VyY2UpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIGJhc2UgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBTaG91bGQgdXNlIGFub255bW91cyBDT1JTPyBEZWZhdWx0cyB0byB0cnVlIGlmIHRoZSBVUkwgaXMgbm90IGEgZGF0YS1VUkkuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmIChjcm9zc29yaWdpbiA9PT0gdW5kZWZpbmVkICYmIGltYWdlVXJsLmluZGV4T2YoJ2RhdGE6JykgIT09IDApXG4gICAge1xuICAgICAgICBjcm9zc29yaWdpbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIC8vIG5ldyBJbWFnZSgpIGJyZWFrcyB0ZXggbG9hZGluZyBpbiBzb21lIHZlcnNpb25zIG9mIENocm9tZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMzgwNzFcbiAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgaWYgKGNyb3Nzb3JpZ2luKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoaW1hZ2UsIHNjYWxlTW9kZSk7XG4gICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgaW1hZ2Uuc3JjID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSBiYXNlVGV4dHVyZTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBAMnggYXQgdGhlIGVuZCBvZiB0aGUgdXJsIHdlIGFyZSBnb2luZyB0byBhc3N1bWUgaXRzIGEgaGlnaHJlcyBpbWFnZVxuICAgICAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKGltYWdlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFjYW52YXMuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGNhbnZhcy5fcGl4aUlkID0gJ2NhbnZhc18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG4iLCJ2YXIgQmFzZVJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VSZW5kZXJUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIFJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIFJlbmRlclRleHR1cmUgc2hvdWxkIGJlIHByZWxvYWRlZFxuICogb3RoZXJ3aXNlIGJsYWNrIHJlY3RhbmdsZXMgd2lsbCBiZSBkcmF3biBpbnN0ZWFkLlxuICpcbiAqIEEgUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCA4MDAsIDYwMCk7XG4gKiB2YXIgc3ByaXRlID0gUElYSS5TcHJpdGUuZnJvbUltYWdlKFwic3Bpbk9ial8wMS5wbmdcIik7XG4gKlxuICogc3ByaXRlLnBvc2l0aW9uLnggPSA4MDAvMjtcbiAqIHNwcml0ZS5wb3NpdGlvbi55ID0gNjAwLzI7XG4gKiBzcHJpdGUuYW5jaG9yLnggPSAwLjU7XG4gKiBzcHJpdGUuYW5jaG9yLnkgPSAwLjU7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiByZW5kZXJUZXh0dXJlXG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIGZvciB0aGlzIFJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIFJlbmRlclRleHR1cmUoYmFzZVJlbmRlclRleHR1cmUsIGZyYW1lKVxue1xuICAgIGlmICghcmVuZGVyZXIpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgb2JqZWN0IHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Jhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIFRleHR1cmUuY2FsbCh0aGlzLFxuICAgICAgICBiYXNlUmVuZGVyVGV4dHVyZSxcbiAgICAgICAgZnJhbWUgXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn1cblxuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmUucHJvdG90eXBlKTtcblJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGV4dHVyZTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIHVwZGF0ZUJhc2UpXG57XG4gICBcbiAgICAvL1RPRE8gLSBjb3VsZCBiZSBub3QgcmVxdWlyZWQuLlxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSB0aGlzLmNyb3Aud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNyb3AuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKHVwZGF0ZUJhc2UpXG4gICAge1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYmFzZVRleHR1cmUuY2xlYXIodGhpcy5mcmFtZSlcbiAgICBcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLnJlbmRlcih0aGlzLmZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRJbWFnZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuYmFzZVRleHR1cmUuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIFJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0QmFzZTY0ID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNlNjQuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIFJlbmRlclRleHR1cmUgdG8gaXQgYW5kIHRoZW4gcmV0dXJucyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gQSBDYW52YXMgZWxlbWVudCB3aXRoIHRoZSB0ZXh0dXJlIHJlbmRlcmVkIG9uLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldENhbnZhcyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVscyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVsKHRoaXMuZnJhbWUsIHgsIHkpO1xufTtcblxuUmVuZGVyVGV4dHVyZS5jcmVhdGUgPSBmdW5jdGlvbihyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHJldHVybiBuZXcgUmVuZGVyVGV4dHVyZShuZXcgQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbikpO1xufVxuXG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnMgPSByZXF1aXJlKCcuL1RleHR1cmVVdnMnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlIG9yIHBhcnQgb2YgYW4gaW1hZ2UuIEl0IGNhbm5vdCBiZSBhZGRlZFxuICogdG8gdGhlIGRpc3BsYXkgbGlzdCBkaXJlY3RseS4gSW5zdGVhZCB1c2UgaXQgYXMgdGhlIHRleHR1cmUgZm9yIGEgU3ByaXRlLiBJZiBubyBmcmFtZSBpcyBwcm92aWRlZCB0aGVuIHRoZSB3aG9sZSBpbWFnZSBpcyB1c2VkLlxuICpcbiAqIFlvdSBjYW4gZGlyZWN0bHkgY3JlYXRlIGEgdGV4dHVyZSBmcm9tIGFuIGltYWdlIGFuZCB0aGVuIHJldXNlIGl0IG11bHRpcGxlIHRpbWVzIGxpa2UgdGhpcyA6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZSgnYXNzZXRzL2ltYWdlLnBuZycpO1xuICogdmFyIHNwcml0ZTEgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiB2YXIgc3ByaXRlMiA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBiYXNlVGV4dHVyZSB7UElYSS5CYXNlVGV4dHVyZX0gVGhlIGJhc2UgdGV4dHVyZSBzb3VyY2UgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlIGZyb21cbiAqIEBwYXJhbSBbZnJhbWVdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3RhbmdsZSBmcmFtZSBvZiB0aGUgdGV4dHVyZSB0byBzaG93XG4gKiBAcGFyYW0gW2Nyb3BdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIGFyZWEgb2Ygb3JpZ2luYWwgdGV4dHVyZVxuICogQHBhcmFtIFt0cmltXSB7UElYSS5SZWN0YW5nbGV9IFRyaW1tZWQgdGV4dHVyZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBbcm90YXRlXSB7Ym9vbGVhbn0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlcyAoIHVzZWQgYnkgdGV4dHVyZSBwYWNrZXIgKVxuICovXG5mdW5jdGlvbiBUZXh0dXJlKGJhc2VUZXh0dXJlLCBmcmFtZSwgY3JvcCwgdHJpbSwgcm90YXRlKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogRG9lcyB0aGlzIFRleHR1cmUgaGF2ZSBhbnkgZnJhbWUgZGF0YSBhc3NpZ25lZCB0byBpdD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5ub0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VUZXh0dXJlIGluc3RhbmNlb2YgVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0cmltIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLnRyaW0gPSB0cmltO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCB0aGUgcmVuZGVyZXIga25vdyBpZiB0aGUgdGV4dHVyZSBpcyB2YWxpZC4gSWYgaXQncyBub3QgdGhlbiBpdCBjYW5ub3QgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgYSByZW5kZXJlciBrbm93IHRoYXQgYSB0ZXh0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgKHVzZWQgbWFpbmx5IGZvciB3ZWJHTCB1diB1cGRhdGVzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVpcmVzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgVVYgZGF0YSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgYXJlYSBvZiB0aGUgQmFzZVRleHR1cmUgaW1hZ2UgdG8gYWN0dWFsbHkgY29weSB0byB0aGUgQ2FudmFzIC8gV2ViR0wgd2hlbiByZW5kZXJpbmcsXG4gICAgICogaXJyZXNwZWN0aXZlIG9mIHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBvciBwbGFjZW1lbnQgKHdoaWNoIGNhbiBiZSBpbmZsdWVuY2VkIGJ5IHRyaW1tZWQgdGV4dHVyZSBhdGxhc2VzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jcm9wID0gY3JvcCB8fCBmcmFtZTsvL25ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdGF0ZSA9ICEhcm90YXRlO1xuXG4gICAgaWYgKGJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBmcmFtZSB3ZSBzaG91bGQgbW9uaXRvciBmb3IgYW55IGJhc2UgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlLm9uY2UoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZyYW1lIG9yIHRoZSBiYXNlVGV4dHVyZSBpcyB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICovXG4gICAgZnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgICAgICAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50cmltICYmICF0aGlzLnJvdGF0ZSAmJiAoZnJhbWUueCArIGZyYW1lLndpZHRoID4gdGhpcy5iYXNlVGV4dHVyZS53aWR0aCB8fCBmcmFtZS55ICsgZnJhbWUuaGVpZ2h0ID4gdGhpcy5iYXNlVGV4dHVyZS5oZWlnaHQpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dHVyZSBFcnJvcjogZnJhbWUgZG9lcyBub3QgZml0IGluc2lkZSB0aGUgYmFzZSBUZXh0dXJlIGRpbWVuc2lvbnMgJyArIHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5zb3VyY2UgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50cmltKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wID0gZnJhbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlcyB0aGlzIHRleHR1cmUgb24gdGhlIGdwdS5cbiAqXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5iYXNlVGV4dHVyZS51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyBsb2FkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlTG9hZGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIC8vIFRPRE8gdGhpcyBjb2RlIGxvb2tzIGNvbmZ1c2luZy4uIGJvbyB0byBhYnVzaW5nIGdldHRlcnMgYW5kIHNldHRlcnNzIVxuICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy5fZnJhbWU7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyB1cGRhdGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZVVwZGF0ZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSBiYXNlVGV4dHVyZS53aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSBiYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlPWZhbHNlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlKVxue1xuICAgIGlmICh0aGlzLmJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGRlc3Ryb3lCYXNlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG4gICAgdGhpcy50cmltID0gbnVsbDtcbiAgICB0aGlzLmNyb3AgPSBudWxsO1xuXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UsIHRoaXMpO1xuICAgIHRoaXMub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGV4dHVyZSBvYmplY3QgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLmZyYW1lLCB0aGlzLmNyb3AsIHRoaXMudHJpbSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5fdXBkYXRlVXZzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuX3V2cylcbiAgICB7XG4gICAgICAgIHRoaXMuX3V2cyA9IG5ldyBUZXh0dXJlVXZzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXZzLnNldCh0aGlzLmNyb3AsIHRoaXMuYmFzZVRleHR1cmUsIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFRleHR1cmUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSAgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gY3Jvc3NvcmlnaW4ge2Jvb2xlYW59IFdoZXRoZXIgcmVxdWVzdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY3Jvc3NvcmlnaW5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21JbWFnZShpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xuICAgICAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gdGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICh0eXBlb2YgdmlkZW8gPT09ICdzdHJpbmcnKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFRleHR1cmUuZnJvbVZpZGVvVXJsKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSB2aWRlbyB1cmwuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvVXJsIHtzdHJpbmd9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW9VcmwgPSBmdW5jdGlvbiAodmlkZW9VcmwsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHZpZGVvVXJsLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIHRleHR1cmUgdG8gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuIFRoaXMgY2FjaGUgaXMgc2hhcmVkIGFjcm9zcyB0aGUgd2hvbGUgUElYSSBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIFRleHR1cmUgdG8gYWRkIHRvIHRoZSBjYWNoZS5cbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIGJlIHN0b3JlZCBhZ2FpbnN0LlxuICovXG5UZXh0dXJlLmFkZFRleHR1cmVUb0NhY2hlID0gZnVuY3Rpb24gKHRleHR1cmUsIGlkKVxue1xuICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpZF0gPSB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB0ZXh0dXJlIGZyb20gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCBvZiB0aGUgdGV4dHVyZSB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRoYXQgd2FzIHJlbW92ZWRcbiAqL1xuVGV4dHVyZS5yZW1vdmVUZXh0dXJlRnJvbUNhY2hlID0gZnVuY3Rpb24gKGlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBBbiBlbXB0eSB0ZXh0dXJlLCB1c2VkIG9mdGVuIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBtdWx0aXBsZSBlbXB0eSB0ZXh0dXJlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZS5FTVBUWSA9IG5ldyBUZXh0dXJlKG5ldyBCYXNlVGV4dHVyZSgpKTtcbiIsIlxuLyoqXG4gKiBBIHN0YW5kYXJkIG9iamVjdCB0byBzdG9yZSB0aGUgVXZzIG9mIGEgdGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmVVdnMoKVxue1xuICAgIHRoaXMueDAgPSAwO1xuICAgIHRoaXMueTAgPSAwO1xuXG4gICAgdGhpcy54MSA9IDE7XG4gICAgdGhpcy55MSA9IDA7XG5cbiAgICB0aGlzLngyID0gMTtcbiAgICB0aGlzLnkyID0gMTtcblxuICAgIHRoaXMueDMgPSAwO1xuICAgIHRoaXMueTMgPSAxO1xuXG4gICAgdGhpcy54eTBfdWludDMyID0gMDtcbiAgICB0aGlzLnh5MV91aW50MzIgPSAwO1xuICAgIHRoaXMueHkyX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTNfdWludDMyID0gMDtcblxuICAgIHRoaXMudXZzX3VpbnQzMiA9IG5ldyBVaW50MzJBcnJheSg0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVVdnM7XG5cbi8qKlxuICogU2V0cyB0aGUgdGV4dHVyZSBVdnMgYmFzZWQgb24gdGhlIGdpdmVuIGZyYW1lIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gZnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIGJhc2VGcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gcm90YXRlIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgcm90YXRlZFxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZVV2cy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZyYW1lLCBiYXNlRnJhbWUsIHJvdGF0ZSlcbntcbiAgICB2YXIgdHcgPSBiYXNlRnJhbWUud2lkdGg7XG4gICAgdmFyIHRoID0gYmFzZUZyYW1lLmhlaWdodDtcblxuICAgIGlmKHJvdGF0ZSlcbiAgICB7XG4gICAgICAgIHRoaXMueDAgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSBmcmFtZS55IC8gdGg7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy54MCA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcbiAgICB9XG5cbiAgICB0aGlzLnV2c191aW50MzJbMF0gPSAoKCh0aGlzLnkwICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDAgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsxXSA9ICgoKHRoaXMueTEgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MSAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzJdID0gKCgodGhpcy55MiAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngyICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbM10gPSAoKCh0aGlzLnkzICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDMgKiA2NTUzNSkgJiAweEZGRkYpO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIG9mIGEgW3BsYXlpbmddIFZpZGVvLlxuICpcbiAqIFZpZGVvIGJhc2UgdGV4dHVyZXMgbWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QgaW4gdGhlaXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNldmVyYWwgd2F5cywgc3VjaCBhczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCgnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHsgc3JjOiAnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9KTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbJy92aWRlby53ZWJtJywgJy92aWRlby5tcDQnXSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoW1xuICogICAgIHsgc3JjOiAnL3ZpZGVvLndlYm0nLCBtaW1lOiAndmlkZW8vd2VibScgfSxcbiAqICAgICB7IHNyYzogJy92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9XG4gKiBdKTtcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgW1wiZGV1c1wiIGRlbW9dKGh0dHA6Ly93d3cuZ29vZGJveWRpZ2l0YWwuY29tL3BpeGlqcy9leGFtcGxlcy9kZXVzLykuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkJhc2VUZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gVmlkZW9CYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmlkZW8gc291cmNlIGVsZW1lbnQgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIC8vIGhvb2sgaW4gaGVyZSB0byBjaGVjayBpZiB2aWRlbyBpcyBhbHJlYWR5IGF2YWlsYWJsZS5cbiAgICAvLyBCYXNlVGV4dHVyZSBsb29rcyBmb3IgYSBzb3VyY2UuY29tcGxldGUgYm9vbGVhbiwgcGx1cyB3aWR0aCAmIGhlaWdodC5cblxuICAgIGlmICgoc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0VOT1VHSF9EQVRBIHx8IHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9GVVRVUkVfREFUQSkgJiYgc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICBzb3VyY2UuY29tcGxldGUgPSB0cnVlO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgc291cmNlLCBzY2FsZU1vZGUpO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBiYXNlIHRleHR1cmUgYXV0b21hdGljYWxseSB1cGRhdGUgaXRzZWxmLCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX29uVXBkYXRlID0gdGhpcy5fb25VcGRhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkNhblBsYXkgPSB0aGlzLl9vbkNhblBsYXkuYmluZCh0aGlzKTtcblxuICAgIGlmICghc291cmNlLmNvbXBsZXRlKVxuICAgIHtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIC8vIHN0YXJ0ZWQgcGxheWluZy4uXG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fb25QbGF5U3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX29uUGxheVN0b3AuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fX2xvYWRlZCA9IGZhbHNlO1xufVxuXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZVRleHR1cmUucHJvdG90eXBlKTtcblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmlkZW9CYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9CYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3Agb2YgdGhlIHZpZGVvIGJhc2UgdGV4dHVyZSwgb25seSBydW5zIHdoZW4gYXV0b1VwZGF0ZSBpcyBzZXQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUnVucyB0aGUgdXBkYXRlIGxvb3Agd2hlbiB0aGUgdmlkZW8gaXMgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBwYXVzZSBldmVudCBpcyB0cmlnZ2VyZWQsIHN0b3BzIHRoZSB1cGRhdGUgbG9vcFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgdmlkZW8gaXMgbG9hZGVkIGFuZCByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uQ2FuUGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2UudmlkZW9XaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnNvdXJjZS52aWRlb0hlaWdodDtcblxuICAgICAgICB0aGlzLnNvdXJjZS5wbGF5KCk7XG5cbiAgICAgICAgLy8gcHJldmVudCBtdWx0aXBsZSBsb2FkZWQgZGlzcGF0Y2hlcy4uXG4gICAgICAgIGlmICghdGhpcy5fX2xvYWRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHRoaXMuc291cmNlLl9waXhpSWQgXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlLl9waXhpSWQ7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogTWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXZpZGVvLl9waXhpSWQpXG4gICAge1xuICAgICAgICB2aWRlby5fcGl4aUlkID0gJ3ZpZGVvXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3ZpZGVvLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IFZpZGVvQmFzZVRleHR1cmUodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHZpZGVvLl9waXhpSWQgXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBCYXNlVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqIFRoaXMgQmFzZVRleHR1cmUgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYSB0ZXh0dXJlXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvU3JjIHtzdHJpbmd8b2JqZWN0fHN0cmluZ1tdfG9iamVjdFtdfSBUaGUgVVJMKHMpIGZvciB0aGUgdmlkZW8uXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLnNyY10ge3N0cmluZ30gT25lIG9mIHRoZSBzb3VyY2UgdXJscyBmb3IgdGhlIHZpZGVvXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLm1pbWVdIHtzdHJpbmd9IFRoZSBtaW1ldHlwZSBvZiB0aGUgdmlkZW8gKGUuZy4gJ3ZpZGVvL21wNCcpLiBJZiBub3Qgc3BlY2lmaWVkXG4gKiAgdGhlIHVybCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBtaW1lIHR5cGUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwgPSBmdW5jdGlvbiAodmlkZW9TcmMsIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXG4gICAgLy8gYXJyYXkgb2Ygb2JqZWN0cyBvciBzdHJpbmdzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW9TcmMpKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWRlb1NyYy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjW2ldLnNyYyB8fCB2aWRlb1NyY1tpXSwgdmlkZW9TcmNbaV0ubWltZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNpbmdsZSBvYmplY3Qgb3Igc3RyaW5nXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjLnNyYyB8fCB2aWRlb1NyYywgdmlkZW9TcmMubWltZSkpO1xuICAgIH1cblxuICAgIHZpZGVvLmxvYWQoKTtcbiAgICB2aWRlby5wbGF5KCk7XG5cbiAgICByZXR1cm4gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSk7XG59O1xuXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzID0gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsO1xuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2UocGF0aCwgdHlwZSlcbntcbiAgICBpZiAoIXR5cGUpXG4gICAge1xuICAgICAgICB0eXBlID0gJ3ZpZGVvLycgKyBwYXRoLnN1YnN0cihwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gcGF0aDtcbiAgICBzb3VyY2UudHlwZSA9IHR5cGU7XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgLy8gSW50ZXJuYWwgZXZlbnQgdXNlZCBieSBjb21wb3NlZCBlbWl0dGVyXG4gICAgVElDSyA9ICd0aWNrJztcblxuLyoqXG4gKiBBIFRpY2tlciBjbGFzcyB0aGF0IHJ1bnMgYW4gdXBkYXRlIGxvb3AgdGhhdCBvdGhlciBvYmplY3RzIGxpc3RlbiB0by5cbiAqIFRoaXMgY2xhc3MgaXMgY29tcG9zZWQgYXJvdW5kIGFuIEV2ZW50RW1pdHRlciBvYmplY3QgdG8gYWRkIGxpc3RlbmVyc1xuICogbWVhbnQgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lLlxuICogQW5pbWF0aW9uIGZyYW1lcyBhcmUgcmVxdWVzdGVkIG9ubHkgd2hlbiBuZWNlc3NhcnksXG4gKiBlLmcuIFdoZW4gdGhlIHRpY2tlciBpcyBzdGFydGVkIGFuZCB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbmZ1bmN0aW9uIFRpY2tlcigpXG57XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRpY2sgbWV0aG9kIGJvdW5kIHRvIHRpY2tlciBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaW4gZWFybHkgMjAxNSwgRnVuY3Rpb24uYmluZFxuICAgICAqIGlzIHN0aWxsIDYwJSBzbG93ZXIgaW4gaGlnaCBwZXJmb3JtYW5jZSBzY2VuYXJpb3MuXG4gICAgICogQWxzbyBzZXBhcmF0aW5nIGZyYW1lIHJlcXVlc3RzIGZyb20gdXBkYXRlIG1ldGhvZFxuICAgICAqIHNvIGxpc3RlbmVycyBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGFuZCB3aXRoXG4gICAgICogYW55IGFuaW1hdGlvbiBBUEksIGp1c3QgaW52b2tlIHRpY2tlci51cGRhdGUodGltZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RpY2sgPSBmdW5jdGlvbiBfdGljayh0aW1lKSB7XG5cbiAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgbm93XG4gICAgICAgICAgICBfdGhpcy51cGRhdGUodGltZSk7XG4gICAgICAgICAgICAvLyBMaXN0ZW5lciBzaWRlIGVmZmVjdHMgbWF5IGhhdmUgbW9kaWZpZWQgdGlja2VyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQgJiYgX3RoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiBfdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fdGljayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZW1pdHRlciB1c2VkIHRvIGZpcmUgJ3RpY2snIGV2ZW50XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9lbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY3VycmVudCBmcmFtZSByZXF1ZXN0IElEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdmFsdWUgbWFuYWdlZCBieSBtaW5GUFMgcHJvcGVydHkgc2V0dGVyIGFuZCBnZXR0ZXIuXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHVwZGF0ZXMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBzaG91bGQgaW52b2tlIHRoZSBtZXRob2RcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBhdXRvbWF0aWNhbGx5XG4gICAgICogd2hlbiBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1N0YXJ0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTY2FsYXIgdGltZSB2YWx1ZSBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbWluRlBTfVxuICAgICAqIGFuZCBpcyBzY2FsZWQgd2l0aCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfS5cbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhcCBtYXkgYmUgZXhjZWVkZWQgYnkgc2NhbGluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kZWx0YVRpbWUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGltZSBlbGFwc2VkIGluIG1pbGxpc2Vjb25kcyBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBPcHBvc2VkIHRvIHdoYXQgdGhlIHNjYWxhciB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX1cbiAgICAgKiBpcyBiYXNlZCwgdGhpcyB2YWx1ZSBpcyBuZWl0aGVyIGNhcHBlZCBub3Igc2NhbGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMSAvIFRBUkdFVF9GUE1TXG4gICAgICovXG4gICAgdGhpcy5lbGFwc2VkTVMgPSAxIC8gQ09OU1QuVEFSR0VUX0ZQTVM7IC8vIGRlZmF1bHQgdG8gdGFyZ2V0IGZyYW1lIHRpbWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBsYXN0IHRpbWUge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9IHdhcyBpbnZva2VkLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgYWxzbyByZXNldCBpbnRlcm5hbGx5IG91dHNpZGUgb2YgaW52b2tpbmdcbiAgICAgKiB1cGRhdGUsIGJ1dCBvbmx5IHdoZW4gYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxhc3RUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEZhY3RvciBvZiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNjYWxlcyB0aWNrZXIuZGVsdGFUaW1lIHRvIHdoYXQgd291bGQgYmVcbiAgICAgKiAvLyB0aGUgZXF1aXZhbGVudCBvZiBhcHByb3hpbWF0ZWx5IDEyMCBGUFNcbiAgICAgKiB0aWNrZXIuc3BlZWQgPSAyO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICogYHRydWVgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBgZmFsc2VgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RvcH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIFdoaWxlIGBmYWxzZWAsIHRoaXMgdmFsdWUgbWF5IGNoYW5nZSB0byBgdHJ1ZWAgaW4gdGhlXG4gICAgICogZXZlbnQgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGJlaW5nIGB0cnVlYFxuICAgICAqIGFuZCBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWNrZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lcyBwZXIgc2Vjb25kIGF0IHdoaWNoIHRoaXMgdGlja2VyIGlzIHJ1bm5pbmcuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgYXBwcm94aW1hdGVseSA2MCBpbiBtb3N0IG1vZGVybiBicm93c2Vycy5cbiAgICAgKiAqKk5vdGU6KiogVGhpcyBkb2VzIG5vdCBmYWN0b3IgaW4gdGhlIHZhbHVlIG9mXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0sIHdoaWNoIGlzIHNwZWNpZmljXG4gICAgICogdG8gc2NhbGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBGUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5lbGFwc2VkTVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGFsbG93ZWQgdG9cbiAgICAgKiBlbGFwc2UgYmV0d2VlbiBpbnZva2luZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0uXG4gICAgICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNhcCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gICAgICogYnV0IGRvZXMgbm90IGVmZmVjdCB0aGUgbWVhc3VyZWQgdmFsdWUgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNGUFN9LlxuICAgICAqIFdoZW4gc2V0dGluZyB0aGlzIHByb3BlcnR5IGl0IGlzIGNsYW1wZWQgdG8gYSB2YWx1ZSBiZXR3ZWVuXG4gICAgICogYDBgIGFuZCBgUElYSS5UQVJHRVRfRlBNUyAqIDEwMDBgLlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICBtaW5GUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZwcylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gQ2xhbXA6IDAgdG8gVEFSR0VUX0ZQTVNcbiAgICAgICAgICAgIHZhciBtaW5GUE1TID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZnBzKSAvIDEwMDAsIENPTlNULlRBUkdFVF9GUE1TKTtcbiAgICAgICAgICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEgLyBtaW5GUE1TO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbFxuICogZW1pdHRlciBoYXMgbGlzdGVuZXJzLCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fcmVxdWVzdElmTmVlZGVkID0gZnVuY3Rpb24gX3JlcXVlc3RJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiB0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIC8vIGVuc3VyZSBjYWxsYmFja3MgZ2V0IGNvcnJlY3QgZGVsdGFcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fdGljayk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IGNhbmNlbHMgYSBwZW5kaW5nIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9jYW5jZWxJZk5lZWRlZCA9IGZ1bmN0aW9uIF9jYW5jZWxJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIHRoZSB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZCBpdCBjaGVja3MgaWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHlcbiAqIGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy4gSWYgdGhlc2VcbiAqIGNvbmRpdGlvbnMgYXJlIG1ldCwgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgdGlja2VyIGhhcyBub3RcbiAqIGJlZW4gc3RhcnRlZCwgYnV0IGF1dG9TdGFydCBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHRpY2tlciBzdGFydHMgbm93LFxuICogYW5kIGNvbnRpbnVlcyB3aXRoIHRoZSBwcmV2aW91cyBjb25kaXRpb25zIHRvIHJlcXVlc3QgYSBuZXcgZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fc3RhcnRJZlBvc3NpYmxlID0gZnVuY3Rpb24gX3N0YXJ0SWZQb3NzaWJsZSgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmF1dG9TdGFydClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb259IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIHVwZGF0ZXNcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb25jZX0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3Igb25lIHVwZGF0ZVxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIGFkZE9uY2UoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbmNlKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb2ZmfSBpbnRlcm5hbGx5IGZvciAndGljaycgZXZlbnQuXG4gKiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyBmb3IgJ3RpY2snIGV2ZW50LlxuICogSWYgaXQgZG9lcywgdGhlbiBpdCBjYW5jZWxzIHRoZSBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHBhcmFtIFtmbl0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZFxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0IHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vZmYoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgaWYgKCF0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyBsaXN0ZW5lcnNcbiAqIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIHN0YXJ0KClcbntcbiAgICBpZiAoIXRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgcmVxdWVzdGVkXG4gKiBhbiBhbmltYXRpb24gZnJhbWUgaXQgaXMgY2FuY2VsZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcCgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVHJpZ2dlcnMgYW4gdXBkYXRlLiBBbiB1cGRhdGUgZW50YWlscyBzZXR0aW5nIHRoZVxuICogY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2VsYXBzZWRNU30sXG4gKiB0aGUgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gKiBpbnZva2luZyBhbGwgbGlzdGVuZXJzIHdpdGggY3VycmVudCBkZWx0YVRpbWUsXG4gKiBhbmQgdGhlbiBmaW5hbGx5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNsYXN0VGltZX1cbiAqIHdpdGggdGhlIHZhbHVlIG9mIGN1cnJlbnRUaW1lIHRoYXQgd2FzIHByb3ZpZGVkLlxuICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBieSBhbmltYXRpb25cbiAqIGZyYW1lIGNhbGxiYWNrcyBpZiB0aGUgdGlja2VyIGluc3RhbmNlIGhhcyBiZWVuIHN0YXJ0ZWRcbiAqIGFuZCBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSBbY3VycmVudFRpbWU9cGVyZm9ybWFuY2Uubm93KCldIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn0gdGhlIGN1cnJlbnQgdGltZSBvZiBleGVjdXRpb25cbiAqL1xuVGlja2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoY3VycmVudFRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWRNUztcblxuICAgIC8vIEFsbG93IGNhbGxpbmcgdXBkYXRlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBjdXJyZW50VGltZS5cbiAgICBjdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIHx8IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIC8vIFNhdmUgdW5jYXBwZWQgZWxhcHNlZE1TIGZvciBtZWFzdXJlbWVudFxuICAgIGVsYXBzZWRNUyA9IHRoaXMuZWxhcHNlZE1TID0gY3VycmVudFRpbWUgLSB0aGlzLmxhc3RUaW1lO1xuXG4gICAgLy8gY2FwIHRoZSBtaWxsaXNlY29uZHMgZWxhcHNlZCB1c2VkIGZvciBkZWx0YVRpbWVcbiAgICBpZiAoZWxhcHNlZE1TID4gdGhpcy5fbWF4RWxhcHNlZE1TKVxuICAgIHtcbiAgICAgICAgZWxhcHNlZE1TID0gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgIH1cblxuICAgIHRoaXMuZGVsdGFUaW1lID0gZWxhcHNlZE1TICogQ09OU1QuVEFSR0VUX0ZQTVMgKiB0aGlzLnNwZWVkO1xuXG4gICAgLy8gSW52b2tlIGxpc3RlbmVycyBhZGRlZCB0byBpbnRlcm5hbCBlbWl0dGVyXG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KFRJQ0ssIHRoaXMuZGVsdGFUaW1lKTtcblxuICAgIHRoaXMubGFzdFRpbWUgPSBjdXJyZW50VGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGlja2VyO1xuIiwidmFyIFRpY2tlciA9IHJlcXVpcmUoJy4vVGlja2VyJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZCB0aWNrZXIgaW5zdGFuY2UgdXNlZCBieSB7QGxpbmsgUElYSS5leHRyYXMuTW92aWVDbGlwfS5cbiAqIGFuZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICogVGhlIHByb3BlcnR5IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBpcyBzZXQgdG8gYHRydWVgXG4gKiBmb3IgdGhpcyBpbnN0YW5jZS4gUGxlYXNlIGZvbGxvdyB0aGUgZXhhbXBsZXMgZm9yIHVzYWdlLCBpbmNsdWRpbmdcbiAqIGhvdyB0byBvcHQtb3V0IG9mIGF1dG8tc3RhcnRpbmcgdGhlIHNoYXJlZCB0aWNrZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciB0aWNrZXIgPSBQSVhJLnRpY2tlci5zaGFyZWQ7XG4gKiAvLyBTZXQgdGhpcyB0byBwcmV2ZW50IHN0YXJ0aW5nIHRoaXMgdGlja2VyIHdoZW4gbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqIC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyB0cnVlIG9ubHkgZm9yIHRoZSBQSVhJLnRpY2tlci5zaGFyZWQgaW5zdGFuY2UuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiAvLyBGWUksIGNhbGwgdGhpcyB0byBlbnN1cmUgdGhlIHRpY2tlciBpcyBzdG9wcGVkLiBJdCBzaG91bGQgYmUgc3RvcHBlZFxuICogLy8gaWYgeW91IGhhdmUgbm90IGF0dGVtcHRlZCB0byByZW5kZXIgYW55dGhpbmcgeWV0LlxuICogdGlja2VyLnN0b3AoKTtcbiAqIC8vIENhbGwgdGhpcyB3aGVuIHlvdSBhcmUgcmVhZHkgZm9yIGEgcnVubmluZyBzaGFyZWQgdGlja2VyLlxuICogdGlja2VyLnN0YXJ0KCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFlvdSBtYXkgdXNlIHRoZSBzaGFyZWQgdGlja2VyIHRvIHJlbmRlci4uLlxuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoODAwLCA2MDApO1xuICogdmFyIHN0YWdlID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiB2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIpO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZW5kZXJlci52aWV3KTtcbiAqIHRpY2tlci5hZGQoZnVuY3Rpb24gKHRpbWUpIHtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE9yIHlvdSBjYW4ganVzdCB1cGRhdGUgaXQgbWFudWFsbHkuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiB0aWNrZXIuc3RvcCgpO1xuICogZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XG4gKiAgICAgdGlja2VyLnVwZGF0ZSh0aW1lKTtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAqIH1cbiAqIGFuaW1hdGUocGVyZm9ybWFuY2Uubm93KCkpO1xuICpcbiAqIEB0eXBlIHtQSVhJLnRpY2tlci5UaWNrZXJ9XG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xudmFyIHNoYXJlZCA9IG5ldyBUaWNrZXIoKTtcbnNoYXJlZC5hdXRvU3RhcnQgPSB0cnVlO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS50aWNrZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc2hhcmVkOiBzaGFyZWQsXG4gICAgVGlja2VyOiBUaWNrZXJcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gZnVuY3Rpb24gKHNpemUpXG57XG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBhcnJheSwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgXG4gICAgdmFyIHRvdGFsSW5kaWNlcyA9IHNpemUgKiA2O1xuXG4gICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodG90YWxJbmRpY2VzKTtcblxuXHQvLyBmaWxsIHRoZSBpbmRpY2VzIHdpdGggdGhlIHF1YWRzIHRvIGRyYXdcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IHRvdGFsSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICBpbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICBpbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHM7IiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudXRpbHNcbiAqL1xudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgX3VpZDogMCxcbiAgICBfc2FpZEhlbGxvOiBmYWxzZSxcblxuICAgIEV2ZW50RW1pdHRlcjogICByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgcGx1Z2luVGFyZ2V0OiAgIHJlcXVpcmUoJy4vcGx1Z2luVGFyZ2V0JyksXG4gICAgYXN5bmM6ICAgICAgICAgIHJlcXVpcmUoJ2FzeW5jJyksXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZS5cbiAgICAgKi9cbiAgICB1aWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICByZXR1cm4gKyt1dGlscy5fdWlkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYW4gW1IsIEcsIEJdIGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHBhcmFtICB7bnVtYmVyW119IFtvdXQ9W11dXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgW1IsIEcsIEJdIG9mIHRoZSBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgycmdiOiBmdW5jdGlvbiAoaGV4LCBvdXQpXG4gICAge1xuICAgICAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICAgICAgb3V0WzBdID0gKGhleCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMV0gPSAoaGV4ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzJdID0gKGhleCAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnN0cmluZzogZnVuY3Rpb24gKGhleClcbiAgICB7XG4gICAgICAgIGhleCA9IGhleC50b1N0cmluZygxNik7XG4gICAgICAgIGhleCA9ICcwMDAwMDAnLnN1YnN0cigwLCA2IC0gaGV4Lmxlbmd0aCkgKyBoZXg7XG5cbiAgICAgICAgcmV0dXJuICcjJyArIGhleDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkgdG8gYSBoZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmdiIHtudW1iZXJbXX1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb2xvciBudW1iZXJcbiAgICAgKi9cbiAgICByZ2IyaGV4OiBmdW5jdGlvbiAocmdiKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgocmdiWzBdKjI1NSA8PCAxNikgKyAocmdiWzFdKjI1NSA8PCA4KSArIHJnYlsyXSoyNTUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZFxuICAgICAqL1xuICAgIGNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXM6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBuZ0hlYWQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFCQVFNQUFBREQ4cDJPQUFBQUExQk1WRVgvJztcbiAgICAgICAgdmFyIHBuZ0VuZCA9ICdBQUFBQ2tsRVFWUUkxMk5nQUFBQUFnQUI0aUc4TXdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG4gICAgICAgIHZhciBtYWdlbnRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSA2O1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcblxuICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1hZ2VudGEsIDAsIDApO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh5ZWxsb3csIDIsIDApO1xuXG4gICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwwLDEsMSkuZGF0YTtcblxuICAgICAgICByZXR1cm4gKGRhdGFbMF0gPT09IDI1NSAmJiBkYXRhWzFdID09PSAwICYmIGRhdGFbMl0gPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIG51bWJlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICogdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIFN0YXJsaW5nIEZyYW1ld29yayBhcyBpdHMgcHJldHR5IG5lYXQgOylcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICovXG4gICAgZ2V0TmV4dFBvd2VyT2ZUd286IGZ1bmN0aW9uIChudW1iZXIpXG4gICAge1xuICAgICAgICAvLyBzZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG93ZXJfb2ZfdHdvI0Zhc3RfYWxnb3JpdGhtX3RvX2NoZWNrX2lmX2FfcG9zaXRpdmVfbnVtYmVyX2lzX2FfcG93ZXJfb2ZfdHdvXG4gICAgICAgIGlmIChudW1iZXIgPiAwICYmIChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDE7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPCBudW1iZXIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzdWx0IDw8PSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBtYWtlIGEgcG93ZXIgb2YgdHdvIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9XG4gICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybiAod2lkdGggPiAwICYmICh3aWR0aCAmICh3aWR0aCAtIDEpKSA9PT0gMCAmJiBoZWlnaHQgPiAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIGFuIGFzc2V0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwcmVmaXhcbiAgICAgKiB1c2VkIGJ5IHNwcml0ZXNoZWV0cyBhbmQgaW1hZ2UgdXJsc1xuICAgICAqXG4gICAgICogQHBhcmFtIHVybCB7c3RyaW5nfSB0aGUgaW1hZ2UgcGF0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRSZXNvbHV0aW9uT2ZVcmw6IGZ1bmN0aW9uICh1cmwpXG4gICAge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IENPTlNULlJFVElOQV9QUkVGSVguZXhlYyh1cmwpO1xuXG4gICAgICAgIGlmIChyZXNvbHV0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlc29sdXRpb25bMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvZ3Mgb3V0IHRoZSB2ZXJzaW9uIGFuZCByZW5kZXJlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBydW5uaW5nIGluc3RhbmNlIG9mIFBJWEkuXG4gICAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoaXMgbWVzc2FnZSB5b3UgY2FuIHNldCBgUElYSS51dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtgXG4gICAgICogc28gdGhlIGxpYnJhcnkgdGhpbmtzIGl0IGFscmVhZHkgc2FpZCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgZG9pbmcgdGhhdCB3aWxsIGZvcmV2ZXJcbiAgICAgKiBtYWtlcyB5b3UgYSBqZXJrIGZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBzdHJpbmcgcmVuZGVyZXIgdHlwZSB0byBsb2cuXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIHNheUhlbGxvOiBmdW5jdGlvbiAodHlwZSlcbiAgICB7XG4gICAgICAgIGlmICh1dGlscy5fc2FpZEhlbGxvKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZScpID4gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW1xuICAgICAgICAgICAgICAgICdcXG4gJWMgJWMgJWMgUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSDinLAgJyArIHR5cGUgKyAnIOKcsCAgJWMgJyArICcgJWMgJyArICcgaHR0cDovL3d3dy5waXhpanMuY29tLyAgJWMgJWMg4pmlJWPimaUlY+KZpSBcXG5cXG4nLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjY2YTU7IGJhY2tncm91bmQ6ICMwMzAzMDc7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmZjM2RjOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7J1xuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3MpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1BpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0gJyArIHR5cGUgKyAnIC0gaHR0cDovL3d3dy5waXhpanMuY29tLycpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmb3IgY2hlY2tpbmcgZm9yIHdlYmdsIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNXZWJHTFN1cHBvcnRlZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHZhciBjb250ZXh0T3B0aW9ucyA9IHsgc3RlbmNpbDogdHJ1ZSB9O1xuICAgICAgICB0cnlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgY29udGV4dE9wdGlvbnMpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBjb250ZXh0T3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIShnbCAmJiBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnN0ZW5jaWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzaWduIG9mIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIG4ge251bWJlcn1cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIG4gaXMgMCwgLTEgaWYgbiBpcyBuZWdhdGl2ZSwgMSBpZiBuIGkgcG9zaXRpdmVcbiAgICAgKi9cbiAgICBzaWduOiBmdW5jdGlvbiAobilcbiAgICB7XG4gICAgICAgIHJldHVybiBuID8gKG4gPCAwID8gLTEgOiAxKSA6IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZUl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydElkeCBUaGUgaW5kZXggdG8gYmVnaW4gcmVtb3ZpbmcgZnJvbSAoaW5jbHVzaXZlKVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVJdGVtczogZnVuY3Rpb24gKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KVxuICAgIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN0YXJ0SWR4ID49IGxlbmd0aCB8fCByZW1vdmVDb3VudCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVtb3ZlQ291bnQgPSAoc3RhcnRJZHgrcmVtb3ZlQ291bnQgPiBsZW5ndGggPyBsZW5ndGgtc3RhcnRJZHggOiByZW1vdmVDb3VudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydElkeCwgbGVuID0gbGVuZ3RoLXJlbW92ZUNvdW50OyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyLmxlbmd0aCA9IGxlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge30sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge31cbn07XG4iLCIvKipcbiAqIE1peGlucyBmdW5jdGlvbmFsaXR5IHRvIG1ha2UgYW4gb2JqZWN0IGhhdmUgXCJwbHVnaW5zXCIuXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS51dGlsc1xuICogQHBhcmFtIG9iaiB7b2JqZWN0fSBUaGUgb2JqZWN0IHRvIG1peCBpbnRvLlxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgcGx1Z2luVGFyZ2V0Lm1peGluKE15T2JqZWN0KTtcbiAqL1xuZnVuY3Rpb24gcGx1Z2luVGFyZ2V0KG9iailcbntcbiAgICBvYmouX19wbHVnaW5zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcGx1Z2luIHRvIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHBsdWdpbk5hbWUge3N0cmluZ30gVGhlIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQuXG4gICAgICogQHBhcmFtIGN0b3Ige0Z1bmN0aW9ufSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBwbHVnaW4uXG4gICAgICovXG4gICAgb2JqLnJlZ2lzdGVyUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGN0b3IpXG4gICAge1xuICAgICAgICBvYmouX19wbHVnaW5zW3BsdWdpbk5hbWVdID0gY3RvcjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5pbml0UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLnBsdWdpbnMgfHwge307XG5cbiAgICAgICAgZm9yICh2YXIgbyBpbiBvYmouX19wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBuZXcgKG9iai5fX3BsdWdpbnNbb10pKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmRlc3Ryb3lQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGZvciAodmFyIG8gaW4gdGhpcy5wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG51bGw7XG4gICAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvKipcbiAgICAgKiBNaXhlcyBpbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGx1Z2luVGFyZ2V0IGludG8gYW5vdGhlciBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3Qge29iamVjdH0gVGhlIG9iaiB0byBtaXggaW50b1xuICAgICAqL1xuICAgIG1peGluOiBmdW5jdGlvbiBtaXhpbihvYmopXG4gICAge1xuICAgICAgICBwbHVnaW5UYXJnZXQob2JqKTtcbiAgICB9XG59O1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKSxcbiAgICBtZXNoID0gcmVxdWlyZSgnLi9tZXNoJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi9leHRyYXMnKSxcbiAgICBmaWx0ZXJzID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgU3ByaXRlQmF0Y2hcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkuUGFydGljbGVDb250YWluZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlQmF0Y2ggPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuJyk7XG59O1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIEFzc2V0TG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLmxvYWRlcnMuTG9hZGVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuQXNzZXRMb2FkZXIgPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy4nKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvcmUsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RhZ2VcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RhZ2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignWW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIFBJWEkgU3RhZ2UgYW55IG1vcmUsIHlvdSBjYW4gc2ltcGx5IHJlbmRlciBhbnkgY29udGFpbmVyLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgRGlzcGxheU9iamVjdENvbnRhaW5lclxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBEaXNwbGF5T2JqZWN0Q29udGFpbmVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Rpc3BsYXlPYmplY3RDb250YWluZXIgaGFzIGJlZW4gc2hvcnRlbmVkIHRvIENvbnRhaW5lciwgcGxlYXNlIHVzZSBDb250YWluZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdHJpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdHJpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgU3RyaXAgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBNZXNoIGFuZCBtb3ZlZCB0byBtZXNoLk1lc2gsIHBsZWFzZSB1c2UgbWVzaC5NZXNoIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guTWVzaDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFJvcGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLlJvcGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgUm9wZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgUm9wZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBtZXNoLlJvcGUsIHBsZWFzZSB1c2UgbWVzaC5Sb3BlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guUm9wZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIE1vdmllQ2xpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXBcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgTW92aWVDbGlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBNb3ZpZUNsaXAgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLk1vdmllQ2xpcCwgcGxlYXNlIHVzZSBleHRyYXMuTW92aWVDbGlwIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5Nb3ZpZUNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUaWxpbmdTcHJpdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRpbGluZ1Nwcml0ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGlsaW5nU3ByaXRlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5UaWxpbmdTcHJpdGUsIHBsZWFzZSB1c2UgZXh0cmFzLlRpbGluZ1Nwcml0ZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuVGlsaW5nU3ByaXRlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQml0bWFwVGV4dFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJpdG1hcFRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJpdG1hcFRleHQgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLkJpdG1hcFRleHQsIHBsZWFzZSB1c2UgZXh0cmFzLkJpdG1hcFRleHQgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLkJpdG1hcFRleHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBibGVuZE1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgYmxlbmRNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYmxlbmRNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBCTEVORF9NT0RFUywgcGxlYXNlIHVzZSBCTEVORF9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkJMRU5EX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2NhbGVNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIHNjYWxlTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHNjYWxlTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gU0NBTEVfTU9ERVMsIHBsZWFzZSB1c2UgU0NBTEVfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TQ0FMRV9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5CYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCYXNlVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuQmFzZVRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5UZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLlRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5UZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5UZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgbWF0aFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIG1hdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBtYXRoIG5hbWVzcGFjZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgYWNjZXNzIG1lbWJlcnMgYWxyZWFkeSBhY2Nlc3NpYmxlIG9uIFBJWEkuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBQSVhJLlNwcml0ZSNzZXRUZXh0dXJlXG4gKiBAc2VlIFBJWEkuU3ByaXRlI3RleHR1cmVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0dXJlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0dXJlIHByb3BlcnR5LCBlLmcgOiBzcHJpdGUudGV4dHVyZSA9IHRleHR1cmU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuZXh0cmFzLkJpdG1hcFRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteUJpdG1hcFRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15VGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFN0eWxlXG4gKiBAc2VlIFBJWEkuVGV4dCNzdHlsZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpXG57XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgIGNvbnNvbGUud2Fybignc2V0U3R5bGUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5LCBlLmcgOiBteVRleHQuc3R5bGUgPSBzdHlsZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAc2VlIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHR1cmUucHJvdG90eXBlLnNldEZyYW1lID0gZnVuY3Rpb24oZnJhbWUpXG57XG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIGNvbnNvbGUud2Fybignc2V0RnJhbWUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIGZyYW1lIHByb3BlcnR5LCBlLmcgOiBteVRleHR1cmUuZnJhbWUgPSBmcmFtZTsnKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpbHRlcnMsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkFic3RyYWN0RmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkFic3RyYWN0RmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEFic3RyYWN0RmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuQWJzdHJhY3RGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEFic3RyYWN0RmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQWJzdHJhY3RGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuRlhBQUZpbHRlclxuICAgICAqIEBzZWUgUElYSS5GWEFBRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEZYQUFGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5GWEFBRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBGWEFBRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuRlhBQUZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgU3ByaXRlTWFza0ZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIFNwcml0ZU1hc2tGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TcHJpdGVNYXNrRmlsdGVyO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS51dGlscy51dWlkXG4gKiBAc2VlIFBJWEkudXRpbHMudWlkXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gKi9cbmNvcmUudXRpbHMudXVpZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29uc29sZS53YXJuKCd1dGlscy51dWlkKCkgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB1dGlscy51aWQoKSBmcm9tIG5vdyBvbi4nKTtcbiAgICByZXR1cm4gY29yZS51dGlscy51aWQoKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIEJpdG1hcFRleHQgb2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0IHVzaW5nIGJpdG1hcCBmb250LiBUb1xuICogc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLCAnXFxyJyBvciAnXFxyXFxuJyBpbiB5b3VyIHN0cmluZy4gWW91IGNhbiBnZW5lcmF0ZSB0aGUgZm50IGZpbGVzIHVzaW5nOlxuICpcbiAqIEEgQml0bWFwVGV4dCBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGZvbnQgaXMgbG9hZGVkXG4gKlxuICogYGBganNcbiAqIC8vIGluIHRoaXMgY2FzZSB0aGUgZm9udCBpcyBpbiBhIGZpbGUgY2FsbGVkICdkZXN5cmVsLmZudCdcbiAqIHZhciBiaXRtYXBUZXh0ID0gbmV3IFBJWEkuZXh0cmFzLkJpdG1hcFRleHQoXCJ0ZXh0IHVzaW5nIGEgZmFuY3kgZm9udCFcIiwge2ZvbnQ6IFwiMzVweCBEZXN5cmVsXCIsIGFsaWduOiBcInJpZ2h0XCJ9KTtcbiAqIGBgYFxuICpcbiAqXG4gKiBodHRwOi8vd3d3LmFuZ2VsY29kZS5jb20vcHJvZHVjdHMvYm1mb250LyBmb3Igd2luZG93cyBvclxuICogaHR0cDovL3d3dy5ibWdseXBoLmNvbS8gZm9yIG1hYy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIHN0eWxlIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gc3R5bGUuZm9udCB7c3RyaW5nfG9iamVjdH0gVGhlIGZvbnQgZGVzY3JpcHRvciBmb3IgdGhlIG9iamVjdCwgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZyBvZiBmb3JtXG4gKiAgICAgIFwiMjRweCBGb250TmFtZVwiIG9yIFwiRm9udE5hbWVcIiBvciBhcyBhbiBvYmplY3Qgd2l0aCBleHBsaWNpdCBuYW1lL3NpemUgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5uYW1lXSB7c3RyaW5nfSBUaGUgYml0bWFwIGZvbnQgaWRcbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5zaXplXSB7bnVtYmVyfSBUaGUgc2l6ZSBvZiB0aGUgZm9udCBpbiBwaXhlbHMsIGUuZy4gMjRcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3RcbiAqICAgICAgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS50aW50PTB4RkZGRkZGXSB7bnVtYmVyfSBUaGUgdGludCBjb2xvclxuICovXG5mdW5jdGlvbiBCaXRtYXBUZXh0KHRleHQsIHN0eWxlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGxldHRlciBzcHJpdGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbHlwaHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mb250ID0ge1xuICAgICAgICB0aW50OiBzdHlsZS50aW50ICE9PSB1bmRlZmluZWQgPyBzdHlsZS50aW50IDogMHhGRkZGRkYsXG4gICAgICAgIGFsaWduOiBzdHlsZS5hbGlnbiB8fCAnbGVmdCcsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIHNpemU6IDBcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBmb250LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mb250ID0gc3R5bGUuZm9udDsgLy8gcnVuIGZvbnQgc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggd2lkdGggb2YgdGhpcyBiaXRtYXAgdGV4dCBpbiBwaXhlbHMuIElmIHRoZSB0ZXh0IHByb3ZpZGVkIGlzIGxvbmdlciB0aGFuIHRoZSB2YWx1ZSBwcm92aWRlZCwgbGluZSBicmVha3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoZSBsYXN0IHdoaXRlc3BhY2UuXG4gICAgICogRGlzYWJsZSBieSBzZXR0aW5nIHZhbHVlIHRvIDBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggbGluZSBoZWlnaHQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBUZXh0LCBpZTogd2hlbiB0cnlpbmcgdG8gdmVydGljYWxseSBhbGlnbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpcnR5IHN0YXRlIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkJpdG1hcFRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuQml0bWFwVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCaXRtYXBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCaXRtYXBUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRpbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC50aW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC50aW50ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCkgPyB2YWx1ZSA6IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdsZWZ0J1xuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGFsaWduOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQuYWxpZ247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LmFsaWduID0gdmFsdWUgfHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9udCBkZXNjcmlwdG9yIG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Rm9udH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBmb250OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWUuc2xpY2UoMSkuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gcGFyc2VJbnQodmFsdWVbMF0sIDEwKSA6IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicgPyB2YWx1ZS5zaXplIDogcGFyc2VJbnQodmFsdWUuc2l6ZSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGRhdGEgPSBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV07XG4gICAgdmFyIHBvcyA9IG5ldyBjb3JlLlBvaW50KCk7XG4gICAgdmFyIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgdmFyIGNoYXJzID0gW107XG4gICAgdmFyIGxhc3RMaW5lV2lkdGggPSAwO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBsaW5lV2lkdGhzID0gW107XG4gICAgdmFyIGxpbmUgPSAwO1xuICAgIHZhciBzY2FsZSA9IHRoaXMuX2ZvbnQuc2l6ZSAvIGRhdGEuc2l6ZTtcbiAgICB2YXIgbGFzdFNwYWNlID0gLTE7XG4gICAgdmFyIG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHQubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSB0aGlzLnRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgbGFzdFNwYWNlID0gLyhcXHMpLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpID8gaSA6IGxhc3RTcGFjZTtcblxuICAgICAgICBpZiAoLyg/OlxcclxcbnxcXHJ8XFxuKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RTcGFjZSAhPT0gLTEgJiYgdGhpcy5tYXhXaWR0aCA+IDAgJiYgcG9zLnggKiBzY2FsZSA+IHRoaXMubWF4V2lkdGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXMoY2hhcnMsIGxhc3RTcGFjZSwgaSAtIGxhc3RTcGFjZSk7XG4gICAgICAgICAgICBpID0gbGFzdFNwYWNlO1xuICAgICAgICAgICAgbGFzdFNwYWNlID0gLTE7XG5cbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFyRGF0YSA9IGRhdGEuY2hhcnNbY2hhckNvZGVdO1xuXG4gICAgICAgIGlmICghY2hhckRhdGEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZDaGFyQ29kZSAmJiBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJzLnB1c2goe3RleHR1cmU6Y2hhckRhdGEudGV4dHVyZSwgbGluZTogbGluZSwgY2hhckNvZGU6IGNoYXJDb2RlLCBwb3NpdGlvbjogbmV3IGNvcmUuUG9pbnQocG9zLnggKyBjaGFyRGF0YS54T2Zmc2V0LCBwb3MueSArIGNoYXJEYXRhLnlPZmZzZXQpfSk7XG4gICAgICAgIGxhc3RMaW5lV2lkdGggPSBwb3MueCArIChjaGFyRGF0YS50ZXh0dXJlLndpZHRoICsgY2hhckRhdGEueE9mZnNldCk7XG4gICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLnhBZHZhbmNlO1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgKGNoYXJEYXRhLnlPZmZzZXQgKyBjaGFyRGF0YS50ZXh0dXJlLmhlaWdodCkpO1xuICAgICAgICBwcmV2Q2hhckNvZGUgPSBjaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcblxuICAgIHZhciBsaW5lQWxpZ25PZmZzZXRzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IGxpbmU7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBhbGlnbk9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9mb250LmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZUFsaWduT2Zmc2V0cy5wdXNoKGFsaWduT2Zmc2V0KTtcbiAgICB9XG5cbiAgICB2YXIgbGVuQ2hhcnMgPSBjaGFycy5sZW5ndGg7XG4gICAgdmFyIHRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuQ2hhcnM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjID0gdGhpcy5fZ2x5cGhzW2ldOyAvLyBnZXQgdGhlIG5leHQgZ2x5cGggc3ByaXRlXG5cbiAgICAgICAgaWYgKGMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMudGV4dHVyZSA9IGNoYXJzW2ldLnRleHR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjID0gbmV3IGNvcmUuU3ByaXRlKGNoYXJzW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZ2x5cGhzLnB1c2goYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjLnBvc2l0aW9uLnggPSAoY2hhcnNbaV0ucG9zaXRpb24ueCArIGxpbmVBbGlnbk9mZnNldHNbY2hhcnNbaV0ubGluZV0pICogc2NhbGU7XG4gICAgICAgIGMucG9zaXRpb24ueSA9IGNoYXJzW2ldLnBvc2l0aW9uLnkgKiBzY2FsZTtcbiAgICAgICAgYy5zY2FsZS54ID0gYy5zY2FsZS55ID0gc2NhbGU7XG4gICAgICAgIGMudGludCA9IHRpbnQ7XG5cbiAgICAgICAgaWYgKCFjLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBjaGlsZHJlbi5cbiAgICBmb3IgKGkgPSBsZW5DaGFyczsgaSA8IHRoaXMuX2dseXBocy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5fZ2x5cGhzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHRXaWR0aCA9IG1heExpbmVXaWR0aCAqIHNjYWxlO1xuICAgIHRoaXMudGV4dEhlaWdodCA9IChwb3MueSArIGRhdGEubGluZUhlaWdodCkgKiBzY2FsZTtcbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSBtYXhMaW5lSGVpZ2h0ICogc2NhbGU7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvZiB0aGlzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0ZXh0IGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGdldExvY2FsQm91bmRzXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cblxuQml0bWFwVGV4dC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHJldHVybiBjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn07XG5cbkJpdG1hcFRleHQuZm9udHMgPSB7fTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgTW92aWVDbGlwIGlzIGEgc2ltcGxlIHdheSB0byBkaXNwbGF5IGFuIGFuaW1hdGlvbiBkZXBpY3RlZCBieSBhIGxpc3Qgb2YgdGV4dHVyZXMuXG4gKlxuICogYGBganNcbiAqIHZhciBhbGllbkltYWdlcyA9IFtcImltYWdlX3NlcXVlbmNlXzAxLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDIucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMy5wbmdcIixcImltYWdlX3NlcXVlbmNlXzA0LnBuZ1wiXTtcbiAqIHZhciB0ZXh0dXJlQXJyYXkgPSBbXTtcbiAqXG4gKiBmb3IgKHZhciBpPTA7IGkgPCA0OyBpKyspXG4gKiB7XG4gKiAgICAgIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZShhbGllbkltYWdlc1tpXSk7XG4gKiAgICAgIHRleHR1cmVBcnJheS5wdXNoKHRleHR1cmUpO1xuICogfTtcbiAqXG4gKiB2YXIgbWMgPSBuZXcgUElYSS5Nb3ZpZUNsaXAodGV4dHVyZUFycmF5KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmVzIHtQSVhJLlRleHR1cmVbXXxPYmplY3RbXX0gYW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuVGV4dHVyZX0gb3IgZnJhbWUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIGFuaW1hdGlvblxuICogQHBhcmFtIHRleHR1cmVzW10udGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUge0BsaW5rIFBJWEkuVGV4dHVyZX0gb2YgdGhlIGZyYW1lXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50aW1lIHtudW1iZXJ9IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWUgaW4gbXNcbiAqL1xuZnVuY3Rpb24gTW92aWVDbGlwKHRleHR1cmVzKVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZXNbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUgPyB0ZXh0dXJlc1swXSA6IHRleHR1cmVzWzBdLnRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVzID0gdGV4dHVyZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3BlZWQgdGhhdCB0aGUgTW92aWVDbGlwIHdpbGwgcGxheSBhdC4gSGlnaGVyIGlzIGZhc3RlciwgbG93ZXIgaXMgc2xvd2VyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIG1vdmllIGNsaXAgcmVwZWF0cyBhZnRlciBwbGF5aW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5sb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIE1vdmllQ2xpcCBmaW5pc2hlcyBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKi9cbiAgICB0aGlzLm9uQ29tcGxldGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRWxhcHNlZCB0aW1lIHNpbmNlIGFuaW1hdGlvbiBoYXMgYmVlbiBzdGFydGVkLCB1c2VkIGludGVybmFsbHkgdG8gZGlzcGxheSBjdXJyZW50IHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgTW92aWVDbGlwIGlzIGN1cnJlbnRseSBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTW92aWVDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcbk1vdmllQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNb3ZpZUNsaXA7XG5tb2R1bGUuZXhwb3J0cyA9IE1vdmllQ2xpcDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTW92aWVDbGlwLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIHRvdGFsRnJhbWVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBNb3ZpZUNsaXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbnVtYmVyIG9mIHRleHR1cmVzXG4gICAgICogYXNzaWduZWQgdG8gdGhlIE1vdmllQ2xpcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0b3RhbEZyYW1lczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgdGV4dHVyZXMgdXNlZCBmb3IgdGhpcyBNb3ZpZUNsaXBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVtdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICpcbiAgICAgKi9cbiAgICB0ZXh0dXJlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzLnB1c2godmFsdWVbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucy5wdXNoKHZhbHVlW2ldLnRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAqIFRoZSBNb3ZpZUNsaXBzIGN1cnJlbnQgZnJhbWUgaW5kZXhcbiAgICAqXG4gICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICogQHJlYWRvbmx5XG4gICAgKi9cbiAgICBjdXJyZW50RnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSkgJSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lIDwgMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUgKz0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGcmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBQbGF5cyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKHRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBnb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RvcCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRTdG9wID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG59O1xuXG4vKipcbiAqIEdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZSBhbmQgYmVnaW5zIHBsYXlpbmcgdGhlIE1vdmllQ2xpcFxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdGFydCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRQbGF5ID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLnBsYXkoKTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqIEBwcml2YXRlXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB2YXIgZWxhcHNlZCA9IHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZHVyYXRpb25zICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGxhZyA9IHRoaXMuX2N1cnJlbnRUaW1lICUgMSAqIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG5cbiAgICAgICAgbGFnICs9IGVsYXBzZWQgLyA2MCAqIDEwMDA7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA8IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lLS07XG4gICAgICAgICAgICBsYWcgKz0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWduID0gTWF0aC5zaWduKHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPj0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGFnIC09IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0gKiBzaWduO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gc2lnbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGxhZyAvIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGVsYXBzZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lIDwgMCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCgwKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VGltZSA+PSB0aGlzLl90ZXh0dXJlcy5sZW5ndGggJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AodGhpcy5fdGV4dHVyZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG5cbn07XG5cbi8qXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBkZXN0cm95cyBpdFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCApXG57XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGZyYW1lIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgZnJhbWVzIGlkcyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUZyYW1lcyA9IGZ1bmN0aW9uIChmcmFtZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tRnJhbWUoZnJhbWVzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBpbWFnZSB1cmxzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tSW1hZ2VzID0gZnVuY3Rpb24gKGltYWdlcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59OyIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIC8vIGEgc3ByaXRlIHVzZSBkZm9yIHJlbmRlcmluZyB0ZXh0dXJlcy4uXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICBDYW52YXNUaW50ZXIgPSByZXF1aXJlKCcuLi9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyk7XG5cbi8qKlxuICogQSB0aWxpbmcgc3ByaXRlIGlzIGEgZmFzdCB3YXkgb2YgcmVuZGVyaW5nIGEgdGlsaW5nIGltYWdlXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZSB7VGV4dHVyZX0gdGhlIHRleHR1cmUgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gVGlsaW5nU3ByaXRlKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsaW5nIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVNjYWxlID0gbmV3IGNvcmUuUG9pbnQoMSwxKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIG9mZnNldCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG5ldyBjb3JlLlBvaW50KDAsMCk7XG5cbiAgICAvLy8vLyBwcml2YXRlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2l0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBuZXcgY29yZS5UZXh0dXJlVXZzKCk7XG5cbiAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gbnVsbDtcblxuICAgIC8vVE9ETyBtb3ZlLi5cbiAgICB0aGlzLnNoYWRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKFxuXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVUcmFuc2Zvcm07JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnICAgY29vcmQgLT0gdVRyYW5zZm9ybS54eTsnLFxuICAgICAgICAnICAgY29vcmQgLz0gdVRyYW5zZm9ybS56dzsnLFxuICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGNvb3JkOycsXG5cbiAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjMiB1UGl4ZWxTaXplOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gbW9kKHZUZXh0dXJlQ29vcmQsIHVGcmFtZS56dyk7JyxcbiAgICAgICAgJyAgIGNvb3JkID0gY2xhbXAoY29vcmQsIHVQaXhlbFNpemUsIHVGcmFtZS56dyAtIHVQaXhlbFNpemUpOycsXG4gICAgICAgICcgICBjb29yZCArPSB1RnJhbWUueHk7JyxcblxuICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gIHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQpICogdkNvbG9yIDsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1RnJhbWU6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1VHJhbnNmb3JtOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVBpeGVsU2l6ZSA6IHsgdHlwZSA6ICcyZnYnLCB2YWx1ZTogWzEsIDFdfVxuICAgICAgICAgICAgfVxuICAgICAgKTtcbn1cblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWxpbmdTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbGluZ1Nwcml0ZTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWxpbmdTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGlsaW5nU3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIHR3ZWFrIG91ciB0ZXh0dXJlIHRlbXBvcmFyaWx5Li5cbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZSB8fCAhdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZW1wVXZzID0gdGV4dHVyZS5fdXZzLFxuICAgICAgICB0ZW1wV2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgdGVtcEhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCxcbiAgICAgICAgdHcgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoLFxuICAgICAgICB0aCA9IHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGhpcy5fdXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMF0gPSAxLjAvdHc7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVsxXSA9IDEuMC90aDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVswXSA9IHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzFdID0gdGVtcFV2cy55MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMl0gPSB0ZW1wVXZzLngxIC0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbM10gPSB0ZW1wVXZzLnkyIC0gdGVtcFV2cy55MDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMF0gPSAodGhpcy50aWxlUG9zaXRpb24ueCAlICh0ZW1wV2lkdGggKiB0aGlzLnRpbGVTY2FsZS54KSkgLyB0aGlzLl93aWR0aDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzFdID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgJSAodGVtcEhlaWdodCAqIHRoaXMudGlsZVNjYWxlLnkpKSAvIHRoaXMuX2hlaWdodDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzJdID0gKCB0dyAvIHRoaXMuX3dpZHRoICkgKiB0aGlzLnRpbGVTY2FsZS54O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbM10gPSAoIHRoIC8gdGhpcy5faGVpZ2h0ICkgKiB0aGlzLnRpbGVTY2FsZS55O1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRlbXBVdnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0ZW1wV2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGVtcEhlaWdodDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZiAoIXRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQsXG4gICAgICAgIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICBiYXNlVGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIG1vZFggPSAodGhpcy50aWxlUG9zaXRpb24ueCAvIHRoaXMudGlsZVNjYWxlLngpICUgdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIG1vZFkgPSAodGhpcy50aWxlUG9zaXRpb24ueSAvIHRoaXMudGlsZVNjYWxlLnkpICUgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuXG4gICAgLy8gY3JlYXRlIGEgbmljZSBzaGlueSBwYXR0ZXJuIVxuICAgIC8vIFRPRE8gdGhpcyBuZWVkcyB0byBiZSByZWZyZXNoZWQgaWYgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICBpZighdGhpcy5fY2FudmFzUGF0dGVybilcbiAgICB7XG4gICAgICAgIC8vIGN1dCBhbiBvYmplY3QgZnJvbSBhIHNwcml0ZXNoZWV0Li5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgY29yZS5DYW52YXNCdWZmZXIodGV4dHVyZS5fZnJhbWUud2lkdGgsIHRleHR1cmUuX2ZyYW1lLmhlaWdodCk7XG5cbiAgICAgICAgLy8gVGludCB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMudGludGVkVGV4dHVyZSwgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKGJhc2VUZXh0dXJlLnNvdXJjZSwgLXRleHR1cmUuX2ZyYW1lLngsIC10ZXh0dXJlLl9mcmFtZS55KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gdGVtcENhbnZhcy5jb250ZXh0LmNyZWF0ZVBhdHRlcm4oIHRlbXBDYW52YXMuY2FudmFzLCAncmVwZWF0JyApO1xuICAgIH1cblxuICAgIC8vIHNldCBjb250ZXh0IHN0YXRlLi5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvbik7XG5cbiAgICAvLyBUT0RPIC0gdGhpcyBzaG91bGQgYmUgcm9sbGVkIGludG8gdGhlIHNldFRyYW5zZm9ybSBhYm92ZS4uXG4gICAgY29udGV4dC5zY2FsZSh0aGlzLnRpbGVTY2FsZS54LHRoaXMudGlsZVNjYWxlLnkpO1xuXG4gICAgY29udGV4dC50cmFuc2xhdGUobW9kWCArICh0aGlzLmFuY2hvci54ICogLXRoaXMuX3dpZHRoICksXG4gICAgICAgICAgICAgICAgICAgICAgbW9kWSArICh0aGlzLmFuY2hvci55ICogLXRoaXMuX2hlaWdodCkpO1xuXG4gICAgLy8gY2hlY2sgYmxlbmQgbW9kZVxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vIGZpbGwgdGhlIHBhdHRlcm4hXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9jYW52YXNQYXR0ZXJuO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoLW1vZFgsXG4gICAgICAgICAgICAgICAgICAgICAtbW9kWSxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoIC8gdGhpcy50aWxlU2NhbGUueCxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCAvIHRoaXMudGlsZVNjYWxlLnkpO1xuXG5cbiAgICAvL1RPRE8gLSBwcmV0dHkgc3VyZSB0aGlzIGNhbiBiZSBkZWxldGVkLi4uXG4gICAgLy9jb250ZXh0LnRyYW5zbGF0ZSgtdGhpcy50aWxlUG9zaXRpb24ueCArICh0aGlzLmFuY2hvci54ICogdGhpcy5fd2lkdGgpLCAtdGhpcy50aWxlUG9zaXRpb24ueSArICh0aGlzLmFuY2hvci55ICogdGhpcy5faGVpZ2h0KSk7XG4gICAgLy9jb250ZXh0LnNjYWxlKDEgLyB0aGlzLnRpbGVTY2FsZS54LCAxIC8gdGhpcy50aWxlU2NhbGUueSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIHNwcml0ZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG5cbiAgICB2YXIgdzAgPSB3aWR0aCAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgIHZhciB3MSA9IHdpZHRoICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICB2YXIgaDAgPSBoZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICB2YXIgaDEgPSBoZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcblxuICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIG1pblgsXG4gICAgICAgIG1heFgsXG4gICAgICAgIG1pblksXG4gICAgICAgIG1heFk7XG5cbiAgICBtaW5YID0geDE7XG4gICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICBtaW5ZID0geTE7XG4gICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICBtYXhYID0geDE7XG4gICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICBtYXhZID0geTE7XG4gICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgYm91bmRzLnggPSBtaW5YO1xuICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcblxuICAgIHJldHVybiBib3VuZHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIGNoZWNrXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRpbGluZyBzcHJpdGVcbiAqXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWxlU2NhbGUgPSBudWxsO1xuICAgIHRoaXMuX3RpbGVTY2FsZU9mZnNldCA9IG51bGw7XG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHRpbGluZyBzcHJpdGUgdGhhdCB3aWxsIHVzZSBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZCx3aWR0aCxoZWlnaHQpXG57XG4gICAgdmFyIHRleHR1cmUgPSBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSAnICsgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUodGV4dHVyZSx3aWR0aCxoZWlnaHQpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCB3aWR0aCwgaGVpZ2h0LCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSksd2lkdGgsaGVpZ2h0KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gY29yZS5EaXNwbGF5T2JqZWN0LFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwID0gZmFsc2U7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSBudWxsO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsSGl0VGVzdCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxEZXN0cm95ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGlzIGRpc3BsYXkgb2JqZWN0IHRvIGJlIGNhY2hlZCBhcyBhIGJpdG1hcC5cbiAgICAgKiBUaGlzIGJhc2ljYWxseSB0YWtlcyBhIHNuYXAgc2hvdCBvZiB0aGUgZGlzcGxheSBvYmplY3QgYXMgaXQgaXMgYXQgdGhhdCBtb21lbnQuIEl0IGNhbiBwcm92aWRlIGEgcGVyZm9ybWFuY2UgYmVuZWZpdCBmb3IgY29tcGxleCBzdGF0aWMgZGlzcGxheU9iamVjdHMuXG4gICAgICogVG8gcmVtb3ZlIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnZmFsc2UnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgY2FjaGVBc0JpdG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZUFzQml0bWFwO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXAgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVBc0JpdG1hcCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IHRoaXMucmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSB0aGlzLnJlbmRlckNhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gdGhpcy51cGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHMgPSB0aGlzLmdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSA9IHRoaXMuZGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludCA9IHRoaXMuY29udGFpbnNQb2ludDtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX2NhY2hlQXNCaXRtYXBEZXN0cm95O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJvdW5kcyA9IHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fb3JpZ2luYWxEZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIFdlYkdMXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlciggdGhpcy5fY2FjaGVkU3ByaXRlICk7XG59O1xuXG4vKipcbiogUHJlcGFyZXMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZmlyc3Qgd2UgZmx1c2ggYW55dGhpbmcgbGVmdCBpbiB0aGUgcmVuZGVyZXIgKG90aGVyd2lzZSBpdCB3b3VsZCBnZXQgcmVuZGVyZWQgdG8gdGhlIGNhY2hlZCB0ZXh0dXJlKVxuICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuICAgIC8vdGhpcy5maWx0ZXJzPSBbXTtcbiAgICAvLyBuZXh0IHdlIGZpbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHVudHJhbnNmb3JtZWQgb2JqZWN0XG4gICAgLy8gdGhpcyBmdW5jdGlvbiBhbHNvIGNhbGxzIHVwZGF0ZXRyYW5zZm9ybSBvbiBhbGwgaXRzIGNoaWxkcmVuIGFzIHBhcnQgb2YgdGhlIG1lYXN1cmluZy4gVGhpcyBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgdHJhbnNmb3JtIGFnYWluIGluIHRoaXMgZnVuY3Rpb25cbiAgICAvLyBUT0RPIHBhc3MgYW4gb2JqZWN0IHRvIGNsb25lIHRvbz8gc2F2ZXMgaGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBvbmUgZWFjaCB0aW1lIVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuY2xvbmUoKTtcblxuICAgIC8vIGFkZCBzb21lIHBhZGRpbmchXG4gICAgaWYodGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5fZmlsdGVyc1swXS5wYWRkaW5nO1xuICAgICAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgICAgICBib3VuZHMueSAtPSBwYWRkaW5nO1xuXG4gICAgICAgIGJvdW5kcy53aWR0aCArPSBwYWRkaW5nICogMjtcbiAgICAgICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcbiAgICB9XG5cbiAgICAvLyBmb3Igbm93IHdlIGNhY2hlIHRoZSBjdXJyZW50IHJlbmRlclRhcmdldCB0aGF0IHRoZSB3ZWJHTCByZW5kZXJlciBpcyBjdXJyZW50bHkgdXNpbmcuXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBtb3JlIGVsZWdlbnQuLlxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0O1xuICAgIC8vIFdlIGFsc28gc3RvcmUgdGhlIGZpbHRlciBzdGFjayAtIEkgd2lsbCBkZWZpbml0ZWx5IGxvb2sgdG8gY2hhbmdlIGhvdyB0aGlzIHdvcmtzIGEgbGl0dGxlIGxhdGVyIGRvd24gdGhlIGxpbmUuXG4gICAgdmFyIHN0YWNrID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjaztcblxuICAgIC8vIHRoaXMgcmVuZGVyVGV4dHVyZSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlZCBEaXNwbGF5T2JqZWN0XG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cblxuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjYWNoZWRSZW5kZXJUYXJnZXQpO1xuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2sgPSBzdGFjaztcblxuICAgIHRoaXMucmVuZGVyV2ViR0wgICAgID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgICAgICAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyByZXN0b3JlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIGNhY2hlZCBzcHJpdGUgdG8gYXZvaWQgdGhlIG5hc3R5IGZsaWNrZXIuLlxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAvLyBtYXAgdGhlIGhpdCB0ZXN0Li5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBjYW52YXNcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzKCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbn07XG5cbi8vVE9ETyB0aGlzIGNhbiBiZSB0aGUgc2FtZSBhcyB0aGUgd2ViR0wgdmVyaXNvbi4uIHdpbGwgbmVlZCB0byBkbyBhIGxpdHRsZSB0d2Vha2luZyBmaXJzdCB0aG91Z2guLlxuLyoqXG4qIFByZXBhcmVzIHRoZSBDYW52YXMgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vZ2V0IGJvdW5kcyBhY3R1YWxseSB0cmFuc2Zvcm1zIHRoZSBvYmplY3QgZm9yIHVzIGFscmVhZHkhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5jb250ZXh0ID0gY2FjaGVkUmVuZGVyVGFyZ2V0O1xuXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBDYWxjdWxhdGVzIHRoZSBib3VuZHMgb2YgdGhlIGNhY2hlZCBzcHJpdGVcbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZ2V0Q2FjaGVkQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNwcml0ZS5nZXRCb3VuZHMoKTtcbn07XG5cbi8qKlxuKiBEZXN0cm95cyB0aGUgY2FjaGVkIHNwcml0ZS5cbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fdGV4dHVyZS5kZXN0cm95KCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwRGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jYWNoZUFzQml0bWFwID0gZmFsc2U7XG4gICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95KCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIG9iamVjdC5cbiAqXG4gKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICogQG1lbWJlciB7c3RyaW5nfVxuICovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZGlzcGxheSBvYmplY3QgaW4gdGhlIGNvbnRhaW5lclxuKlxuKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4qIEBwYXJhbSBuYW1lIHtzdHJpbmd9IGluc3RhbmNlIG5hbWVcbiogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuKi9cbmNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4qXG4qIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4qIEBwYXJhbSBwb2ludCB7UG9pbnR9IHRoZSBwb2ludCB0byB3cml0ZSB0aGUgZ2xvYmFsIHZhbHVlIHRvLiBJZiBudWxsIGEgbmV3IHBvaW50IHdpbGwgYmUgcmV0dXJuZWRcbiogQHJldHVybiB7UG9pbnR9XG4qL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRHbG9iYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb2ludClcbntcbiAgICBwb2ludCA9IHBvaW50IHx8IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICBpZih0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHBvaW50LnggPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICBwb2ludC55ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG9pbnQueCA9IHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMucG9zaXRpb24ueTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG5yZXF1aXJlKCcuL2NhY2hlQXNCaXRtYXAnKTtcbnJlcXVpcmUoJy4vZ2V0Q2hpbGRCeU5hbWUnKTtcbnJlcXVpcmUoJy4vZ2V0R2xvYmFsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZXh0cmFzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1vdmllQ2xpcDogICAgICByZXF1aXJlKCcuL01vdmllQ2xpcCcpLFxuICAgIFRpbGluZ1Nwcml0ZTogICByZXF1aXJlKCcuL1RpbGluZ1Nwcml0ZScpLFxuICAgIEJpdG1hcFRleHQ6ICAgICByZXF1aXJlKCcuL0JpdG1hcFRleHQnKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vLyBUT0RPIChjZW5nbGVyKSAtIFRoZSBZIGlzIGZsaXBwZWQgaW4gdGhpcyBzaGFkZXIgZm9yIHNvbWUgcmVhc29uLlxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBzaGFkZXIgOiBodHRwczovL3d3dy5zaGFkZXJ0b3kuY29tL3ZpZXcvbHNzR0RqIGJ5IEBtb3ZBWDEzaFxuICovXG5cbi8qKlxuICogQW4gQVNDSUkgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBBc2NpaUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgY2hhcmFjdGVyKGZsb2F0IG4sIHZlYzIgcClcXG57XFxuICAgIHAgPSBmbG9vcihwKnZlYzIoNC4wLCAtNC4wKSArIDIuNSk7XFxuICAgIGlmIChjbGFtcChwLngsIDAuMCwgNC4wKSA9PSBwLnggJiYgY2xhbXAocC55LCAwLjAsIDQuMCkgPT0gcC55KVxcbiAgICB7XFxuICAgICAgICBpZiAoaW50KG1vZChuL2V4cDIocC54ICsgNS4wKnAueSksIDIuMCkpID09IDEpIHJldHVybiAxLjA7XFxuICAgIH1cXG4gICAgcmV0dXJuIDAuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHk7XFxuXFxuICAgIHZlYzMgY29sID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBmbG9vciggdXYgLyBwaXhlbFNpemUgKSAqIHBpeGVsU2l6ZSAvIGRpbWVuc2lvbnMueHkpLnJnYjtcXG5cXG4gICAgZmxvYXQgZ3JheSA9IChjb2wuciArIGNvbC5nICsgY29sLmIpIC8gMy4wO1xcblxcbiAgICBmbG9hdCBuID0gIDY1NTM2LjA7ICAgICAgICAgICAgIC8vIC5cXG4gICAgaWYgKGdyYXkgPiAwLjIpIG4gPSA2NTYwMC4wOyAgICAvLyA6XFxuICAgIGlmIChncmF5ID4gMC4zKSBuID0gMzMyNzcyLjA7ICAgLy8gKlxcbiAgICBpZiAoZ3JheSA+IDAuNCkgbiA9IDE1MjU1MDg2LjA7IC8vIG9cXG4gICAgaWYgKGdyYXkgPiAwLjUpIG4gPSAyMzM4NTE2NC4wOyAvLyAmXFxuICAgIGlmIChncmF5ID4gMC42KSBuID0gMTUyNTIwMTQuMDsgLy8gOFxcbiAgICBpZiAoZ3JheSA+IDAuNykgbiA9IDEzMTk5NDUyLjA7IC8vIEBcXG4gICAgaWYgKGdyYXkgPiAwLjgpIG4gPSAxMTUxMjgxMC4wOyAvLyAjXFxuXFxuICAgIHZlYzIgcCA9IG1vZCggdXYgLyAoIHBpeGVsU2l6ZSAqIDAuNSApLCAyLjApIC0gdmVjMigxLjApO1xcbiAgICBjb2wgPSBjb2wgKiBjaGFyYWN0ZXIobiwgcCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sLCAxLjApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDggfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQXNjaWlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Bc2NpaUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc2NpaUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQXNjaWlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFzY2lpRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBzaXplIHVzZWQgYnkgdGhlIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkFzY2lpRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmxvb21GaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmxvb21GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xufVxuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsb29tRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb29tRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbG9vbUZpbHRlcjtcblxuQmxvb21GaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLlNDUkVFTik7XG5cbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvb21GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuXG4vKipcbiAqIFRoZSBCbHVyRGlyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvd2FyZCBhIGRpcmVjdGlvbiB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWFxuICogQHBhcmFtIHtudW1iZXJ9IGRpcllcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckRpckZpbHRlcihkaXJYLCBkaXJZKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBmbG9hdCBkaXJYO1xcbnVuaWZvcm0gZmxvYXQgZGlyWTtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1swXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDEyICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDEyICogc3RyZW5ndGgpICogZGlyWSApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkgKiAwLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkgKiAwLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkgKiAwLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pICogMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBkaXJYOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJYIHx8IDAgfSxcbiAgICAgICAgICAgIGRpclk6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclkgfHwgMCB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclggPSBkaXJYIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclkgPSBkaXJZIHx8IDA7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckRpckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckRpckZpbHRlcjtcblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKSB7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmICh0aGlzLnBhc3NlcyA9PT0gMSkge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0yOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gKHRoaXMucGFzc2VzKyhpKjIpKSAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckRpckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJYO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJYLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsdXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcbn1cblxuQmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckZpbHRlcjtcblxuQmx1ckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcGFzc2VzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzID0gdGhpcy5ibHVyWUZpbHRlci5wYXNzZXMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWEZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1clhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1clhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1clhGaWx0ZXI7XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1clhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSAgTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllGaWx0ZXI7XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSBNYXRoLmFicyh0aGlzLnN0cmVuZ3RoKSAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgU21hcnQgQmx1ciBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNtYXJ0Qmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAqIHBlcmNlbnQpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICBkZWx0YTogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjEsIHk6IDAuMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTbWFydEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNtYXJ0Qmx1ckZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDV4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogYGBganNcbiAqICB2YXIgY29sb3JNYXRyaXggPSBuZXcgUElYSS5Db2xvck1hdHJpeEZpbHRlcigpO1xuICogIGNvbnRhaW5lci5maWx0ZXJzID0gW2NvbG9yTWF0cml4XTtcbiAqICBjb2xvck1hdHJpeC5jb250cmFzdCgyKTtcbiAqIGBgYFxuICogQGF1dGhvciBDbMOpbWVudCBDaGVuZWJhdWx0IDxjbGVtZW50QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvck1hdHJpeEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBtWzI1XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuXFxuICAgIHZlYzQgYyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yID0gKG1bMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gbVs0XTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLmcgPSAobVs1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSBtWzldO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmIgPSAobVsxMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gbVsxNF07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYSA9IChtWzE1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSBtWzE5XTtcXG5cXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJzFmdicsIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yTWF0cml4RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvck1hdHJpeEZpbHRlcjtcblxuXG4vKipcbiAqIFRyYW5zZm9ybXMgY3VycmVudCBtYXRyaXggYW5kIHNldCB0aGUgbmV3IG9uZVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gaWYgdHJ1ZSwgY3VycmVudCBtYXRyaXggYW5kIG1hdHJpeCBhcmUgbXVsdGlwbGllZC4gSWYgZmFsc2UsIGp1c3Qgc2V0IHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIEBwYXJhbSBtYXRyaXhcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9sb2FkTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgbXVsdGlwbHkpXG57XG4gICAgbXVsdGlwbHkgPSAhIW11bHRpcGx5O1xuXG4gICAgdmFyIG5ld01hdHJpeCA9IG1hdHJpeDtcblxuICAgIGlmIChtdWx0aXBseSkge1xuICAgICAgICB0aGlzLl9tdWx0aXBseShuZXdNYXRyaXgsIHRoaXMudW5pZm9ybXMubS52YWx1ZSwgbWF0cml4KTtcbiAgICAgICAgbmV3TWF0cml4ID0gdGhpcy5fY29sb3JNYXRyaXgobmV3TWF0cml4KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBtYXRyaXhcbiAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSBuZXdNYXRyaXg7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDUnc1xuICpcbiAqIEBwYXJhbSBvdXQge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSBhIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0gYiB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIG91dCB7bnVtYmVyW119IChtYXQgNXg0KVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYilcbntcblxuICAgIC8vIFJlZCBDaGFubmVsXG4gICAgb3V0WzBdID0gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYls1XSkgKyAoYVsyXSAqIGJbMTBdKSArIChhWzNdICogYlsxNV0pO1xuICAgIG91dFsxXSA9IChhWzBdICogYlsxXSkgKyAoYVsxXSAqIGJbNl0pICsgKGFbMl0gKiBiWzExXSkgKyAoYVszXSAqIGJbMTZdKTtcbiAgICBvdXRbMl0gPSAoYVswXSAqIGJbMl0pICsgKGFbMV0gKiBiWzddKSArIChhWzJdICogYlsxMl0pICsgKGFbM10gKiBiWzE3XSk7XG4gICAgb3V0WzNdID0gKGFbMF0gKiBiWzNdKSArIChhWzFdICogYls4XSkgKyAoYVsyXSAqIGJbMTNdKSArIChhWzNdICogYlsxOF0pO1xuICAgIG91dFs0XSA9IChhWzBdICogYls0XSkgKyAoYVsxXSAqIGJbOV0pICsgKGFbMl0gKiBiWzE0XSkgKyAoYVszXSAqIGJbMTldKTtcblxuICAgIC8vIEdyZWVuIENoYW5uZWxcbiAgICBvdXRbNV0gPSAoYVs1XSAqIGJbMF0pICsgKGFbNl0gKiBiWzVdKSArIChhWzddICogYlsxMF0pICsgKGFbOF0gKiBiWzE1XSk7XG4gICAgb3V0WzZdID0gKGFbNV0gKiBiWzFdKSArIChhWzZdICogYls2XSkgKyAoYVs3XSAqIGJbMTFdKSArIChhWzhdICogYlsxNl0pO1xuICAgIG91dFs3XSA9IChhWzVdICogYlsyXSkgKyAoYVs2XSAqIGJbN10pICsgKGFbN10gKiBiWzEyXSkgKyAoYVs4XSAqIGJbMTddKTtcbiAgICBvdXRbOF0gPSAoYVs1XSAqIGJbM10pICsgKGFbNl0gKiBiWzhdKSArIChhWzddICogYlsxM10pICsgKGFbOF0gKiBiWzE4XSk7XG4gICAgb3V0WzldID0gKGFbNV0gKiBiWzRdKSArIChhWzZdICogYls5XSkgKyAoYVs3XSAqIGJbMTRdKSArIChhWzhdICogYlsxOV0pO1xuXG4gICAgLy8gQmx1ZSBDaGFubmVsXG4gICAgb3V0WzEwXSA9IChhWzEwXSAqIGJbMF0pICsgKGFbMTFdICogYls1XSkgKyAoYVsxMl0gKiBiWzEwXSkgKyAoYVsxM10gKiBiWzE1XSk7XG4gICAgb3V0WzExXSA9IChhWzEwXSAqIGJbMV0pICsgKGFbMTFdICogYls2XSkgKyAoYVsxMl0gKiBiWzExXSkgKyAoYVsxM10gKiBiWzE2XSk7XG4gICAgb3V0WzEyXSA9IChhWzEwXSAqIGJbMl0pICsgKGFbMTFdICogYls3XSkgKyAoYVsxMl0gKiBiWzEyXSkgKyAoYVsxM10gKiBiWzE3XSk7XG4gICAgb3V0WzEzXSA9IChhWzEwXSAqIGJbM10pICsgKGFbMTFdICogYls4XSkgKyAoYVsxMl0gKiBiWzEzXSkgKyAoYVsxM10gKiBiWzE4XSk7XG4gICAgb3V0WzE0XSA9IChhWzEwXSAqIGJbNF0pICsgKGFbMTFdICogYls5XSkgKyAoYVsxMl0gKiBiWzE0XSkgKyAoYVsxM10gKiBiWzE5XSk7XG5cbiAgICAvLyBBbHBoYSBDaGFubmVsXG4gICAgb3V0WzE1XSA9IChhWzE1XSAqIGJbMF0pICsgKGFbMTZdICogYls1XSkgKyAoYVsxN10gKiBiWzEwXSkgKyAoYVsxOF0gKiBiWzE1XSk7XG4gICAgb3V0WzE2XSA9IChhWzE1XSAqIGJbMV0pICsgKGFbMTZdICogYls2XSkgKyAoYVsxN10gKiBiWzExXSkgKyAoYVsxOF0gKiBiWzE2XSk7XG4gICAgb3V0WzE3XSA9IChhWzE1XSAqIGJbMl0pICsgKGFbMTZdICogYls3XSkgKyAoYVsxN10gKiBiWzEyXSkgKyAoYVsxOF0gKiBiWzE3XSk7XG4gICAgb3V0WzE4XSA9IChhWzE1XSAqIGJbM10pICsgKGFbMTZdICogYls4XSkgKyAoYVsxN10gKiBiWzEzXSkgKyAoYVsxOF0gKiBiWzE4XSk7XG4gICAgb3V0WzE5XSA9IChhWzE1XSAqIGJbNF0pICsgKGFbMTZdICogYls5XSkgKyAoYVsxN10gKiBiWzE0XSkgKyAoYVsxOF0gKiBiWzE5XSk7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHJldHVybiBtIHtudW1iZXJbXX0gKG1hdCA1eDQpIHdpdGggYWxsIHZhbHVlcyBiZXR3ZWVuIDAtMVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2NvbG9yTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICAvLyBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gICAgdmFyIG0gPSBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCk7XG4gICAgbVs0XSAvPSAyNTU7XG4gICAgbVs5XSAvPSAyNTU7XG4gICAgbVsxNF0gLz0gMjU1O1xuICAgIG1bMTldIC89IDI1NTtcblxuICAgIHJldHVybiBtO1xufTtcblxuLyoqXG4gKiBBZGp1c3RzIGJyaWdodG5lc3NcbiAqXG4gKiBAcGFyYW0gYiB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgYnJpZ3RobmVzcyAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icmlnaHRuZXNzID0gZnVuY3Rpb24gKGIsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGIsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIGIsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIGIsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXRyaWNlcyBpbiBncmV5IHNjYWxlc1xuICpcbiAqIEBwYXJhbSBzY2FsZSB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgZ3JleSAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG4vL0FtZXJpY2FuaXplZCBhbGlhc1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyYXlzY2FsZSA9IENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGU7XG5cbi8qKlxuICogU2V0IHRoZSBibGFjayBhbmQgd2hpdGUgbWF0cmljZVxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJsYWNrQW5kV2hpdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGh1ZSBwcm9wZXJ0eSBvZiB0aGUgY29sb3JcbiAqXG4gKiBAcGFyYW0gcm90YXRpb24ge251bWJlcn0gaW4gZGVncmVlc1xuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmh1ZSA9IGZ1bmN0aW9uIChyb3RhdGlvbiwgbXVsdGlwbHkpXG57XG4gICAgcm90YXRpb24gPSAocm90YXRpb24gfHwgMCkgLyAxODAgKiBNYXRoLlBJO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyhyb3RhdGlvbiksXG4gICAgICAgIHNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcblxuICAgIC8vIGx1bWluYW5jZVJlZCwgbHVtaW5hbmNlR3JlZW4sIGx1bWluYW5jZUJsdWVcbiAgICB2YXIgbHVtUiA9IDAuMjEzLCAvLyBvciAwLjMwODZcbiAgICAgICAgbHVtRyA9IDAuNzE1LCAvLyBvciAwLjYwOTRcbiAgICAgICAgbHVtQiA9IDAuMDcyOyAvLyBvciAwLjA4MjBcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoMSAtIGx1bVIpICsgc2luICogKC1sdW1SKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAoLWx1bUcpLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgxIC0gbHVtQiksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKDAuMTQzKSwgbHVtRyArIGNvcyAqICgxIC0gbHVtRykgKyBzaW4gKiAoMC4xNDApLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgtMC4yODMpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgtKDEgLSBsdW1SKSksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKGx1bUcpLCBsdW1CICsgY29zICogKDEgLSBsdW1CKSArIHNpbiAqIChsdW1CKSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKipcbiAqIFNldCB0aGUgY29udHJhc3QgbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGRhcmsgYW5kIGJyaWdodFxuICogSW5jcmVhc2UgY29udHJhc3QgOiBzaGFkb3dzIGRhcmtlciBhbmQgaGlnaGxpZ2h0cyBicmlnaHRlclxuICogRGVjcmVhc2UgY29udHJhc3QgOiBicmluZyB0aGUgc2hhZG93cyB1cCBhbmQgdGhlIGhpZ2hsaWdodHMgZG93blxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdmFsdWUgb2YgdGhlIGNvbnRyYXN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29udHJhc3QgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgdiA9IChhbW91bnQgfHwgMCkgKyAxO1xuICAgIHZhciBvID0gLTEyOCAqICh2IC0gMSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB2LCAwLCAwLCAwLCBvLFxuICAgICAgICAwLCB2LCAwLCAwLCBvLFxuICAgICAgICAwLCAwLCB2LCAwLCBvLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc2F0dXJhdGlvbiBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gY29sb3JzXG4gKiBJbmNyZWFzZSBzYXR1cmF0aW9uIDogaW5jcmVhc2UgY29udHJhc3QsIGJyaWdodG5lc3MsIGFuZCBzaGFycG5lc3NcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgeCA9IChhbW91bnQgfHwgMCkgKiAyIC8gMyArIDE7XG4gICAgdmFyIHkgPSAoKHggLSAxKSAqIC0wLjUpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgeCwgeSwgeSwgMCwgMCxcbiAgICAgICAgeSwgeCwgeSwgMCwgMCxcbiAgICAgICAgeSwgeSwgeCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBEZXNhdHVyYXRlIGltYWdlIChyZW1vdmUgY29sb3IpXG4gKlxuICogQ2FsbCB0aGUgc2F0dXJhdGUgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHRoaXMuc2F0dXJhdGUoLTEpO1xufTtcblxuLyoqXG4gKiBOZWdhdGl2ZSBpbWFnZSAoaW52ZXJzZSBvZiBjbGFzc2ljIHJnYiBtYXRyaXgpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5lZ2F0aXZlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDEsIDEsIDAsIDAsXG4gICAgICAgIDEsIDAsIDEsIDAsIDAsXG4gICAgICAgIDEsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2VwaWEgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2VwaWEgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zOTMsIDAuNzY4OTk5OSwgMC4xODg5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4zNDksIDAuNjg1OTk5OSwgMC4xNjc5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4yNzIsIDAuNTMzOTk5OSwgMC4xMzA5OTk5OSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciBtb3Rpb24gcGljdHVyZSBwcm9jZXNzIGludmVudGVkIGluIDE5MTYgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRlY2huaWNvbG9yID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuOTEyNTI3Nzg5MTQ1NjA4MywgLTAuODU0NTM0NDk3Njk1MTY0NSwgLTAuMDkxNTU1MDg0ODI3NTU1ODUsIDAsIDExLjc5MzYwMzQzNDM3NzMzNyxcbiAgICAgICAgLTAuMzA4NzgzMzM4NTkyODA5NywgMS43NjU4OTA4NTU1NDU4NDI4LCAtMC4xMDYwMTc0MzA3NDcyMjI0NSwgMCwgLTcwLjM1MjA1MTYxNDYxMzk4LFxuICAgICAgICAtMC4yMzExMDMzNzc1NDg2MTYsIC0wLjc1MDE4OTkxOTc0NDAyMTIsIDEuODQ3NTk3ODE2MTA4MTg5LCAwLCAzMC45NTA5NDA4Njk0OTExMzgsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogUG9sYXJvaWQgZmlsdGVyXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnBvbGFyb2lkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuNDM4LCAtMC4wNjIsIC0wLjA2MiwgMCwgMCxcbiAgICAgICAgLTAuMTIyLCAxLjM3OCwgLTAuMTIyLCAwLCAwLFxuICAgICAgICAtMC4wMTYsIC0wLjAxNiwgMS40ODMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRmlsdGVyIHdobyB0cmFuc2Zvcm1zIDogUmVkIC0+IEJsdWUgYW5kIEJsdWUgLT4gUmVkXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRvQkdSID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgcmV2ZXJzYWwgZmlsbSBpbnRyb2R1Y2VkIGJ5IEVhc3RtYW4gS29kYWsgaW4gMTkzNS4gKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmtvZGFjaHJvbWUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS4xMjg1NTgyMzk2NTkzNTI1LCAtMC4zOTY3MzgyMjgzNjAxMzQ4LCAtMC4wMzk5MjU1OTE3MjkyMTc5MywgMCwgNjMuNzI5NTg3NjIxOTY1MDIsXG4gICAgICAgIC0wLjE2NDA0MzM5OTYyMjQ0NjE2LCAxLjA4MzUyNTE1NjYyOTEzMDQsIC0wLjA1NDk4ODA1MTE1NjMzMTMyLCAwLCAyNC43MzI0MDc4OTY3MDYyMDMsXG4gICAgICAgIC0wLjE2Nzg2MDEwNzA2MTU1NzYzLCAtMC41NjAzNDE2Mjc3Njk1MjQ4LCAxLjYwMTQ4NTA3NjE5NjQ5NDMsIDAsIDM1LjYyOTgyODA3NDYwOTQ2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEJyb3duIGRlbGljaW91cyBicm93bmkgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icm93bmkgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC41OTk3MDIzNDk4MTU5NzE1LCAwLjM0NTUzMjQzMDQ4MzkxMjYzLCAtMC4yNzA4Mjk4Njc0NTM4MDQyLCAwLCA0Ny40MzE5Mjg1NTYwMDg3MyxcbiAgICAgICAgLTAuMDM3NzAzMjQ5ODM3NzgzMTU3LCAwLjg2MDk1Nzc1ODc5OTI2NDEsIDAuMTUwNTk1NTIzODg0NTk5MTMsIDAsIC0zNi45Njg0MTQ5ODMxOTEyNyxcbiAgICAgICAgMC4yNDExMzYzNTEyODE1MzMzNSwgLTAuMDc0NDEwMzc5MDg0MjI0OTIsIDAuNDQ5NzIxODIwNjQ4NzcxNTMsIDAsIC03LjU2MjA3NTI3NzU5MTI4MyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFZpbnRhZ2UgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS52aW50YWdlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNjI3OTM0NTYzNTYwNTk5NCwgMC4zMjAyMTgzNDIwODE5MzY3LCAtMC4wMzk2NTQwODIxMTMxMjQ1MywgMCwgOS42NTEyODU4MzUyOTQxMjMsXG4gICAgICAgIDAuMDI1NzgzOTc3MDQ4MDg4NjgsIDAuNjQ0MTE4ODY0NDM3NDc3MSwgMC4wMzI1OTEyNzYxNjE0OTI5NCwgMCwgNy40NjI4MjkxNzY0NzA1OTEsXG4gICAgICAgIDAuMDQ2NjA1NTU1Njc4MjcxOSwgLTAuMDg1MTIzMjk4NzI0Nzg5MSwgMC41MjQxNjQ4MDE4NzAwNDY1LCAwLCA1LjE1OTE5MDU4ODIzNTI5NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGtpbmQgb2YgZ3JhZGllbnQgbWFwLCBidXQgZnVubnkgdG8gcGxheSB3aXRoIVxuICpcbiAqIEBwYXJhbSBkZXNhdHVyYXRpb24ge251bWJlcn1cbiAqIEBwYXJhbSB0b25lZCB7bnVtYmVyfVxuICogQHBhcmFtIGxpZ2h0Q29sb3Ige3N0cmluZ30gKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKiBAcGFyYW0gZGFya0NvbG9yIHtzdHJpbmd9ICAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29sb3JUb25lID0gZnVuY3Rpb24gKGRlc2F0dXJhdGlvbiwgdG9uZWQsIGxpZ2h0Q29sb3IsIGRhcmtDb2xvciwgbXVsdGlwbHkpXG57XG4gICAgZGVzYXR1cmF0aW9uID0gZGVzYXR1cmF0aW9uIHx8IDAuMjtcbiAgICB0b25lZCA9IHRvbmVkIHx8IDAuMTU7XG4gICAgbGlnaHRDb2xvciA9IGxpZ2h0Q29sb3IgfHwgMHhGRkU1ODA7XG4gICAgZGFya0NvbG9yID0gZGFya0NvbG9yIHx8IDB4MzM4MDAwO1xuXG4gICAgdmFyIGxSID0gKChsaWdodENvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsRyA9ICgobGlnaHRDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsQiA9IChsaWdodENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgZFIgPSAoKGRhcmtDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEcgPSAoKGRhcmtDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkQiA9IChkYXJrQ29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC41OSwgMC4xMSwgMCwgMCxcbiAgICAgICAgbFIsIGxHLCBsQiwgZGVzYXR1cmF0aW9uLCAwLFxuICAgICAgICBkUiwgZEcsIGRCLCB0b25lZCwgMCxcbiAgICAgICAgbFIgLSBkUiwgbEcgLSBkRywgbEIgLSBkQiwgMCwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIE5pZ2h0IGVmZmVjdFxuICpcbiAqIEBwYXJhbSBpbnRlbnNpdHkge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uaWdodCA9IGZ1bmN0aW9uIChpbnRlbnNpdHksIG11bHRpcGx5KVxue1xuICAgIGludGVuc2l0eSA9IGludGVuc2l0eSB8fCAwLjE7XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgaW50ZW5zaXR5ICogKCAtMi4wKSwgLWludGVuc2l0eSwgMCwgMCwgMCxcbiAgICAgICAgLWludGVuc2l0eSwgMCwgaW50ZW5zaXR5LCAwLCAwLFxuICAgICAgICAwLCBpbnRlbnNpdHksIGludGVuc2l0eSAqIDIuMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKlxuICogUHJlZGF0b3IgZWZmZWN0XG4gKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgYSBuZXcgaW5kZXBlbnQgb25lXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBob3cgbXVjaCB0aGUgcHJlZGF0b3IgZmVlbHMgaGlzIGZ1dHVyZSB2aWN0aW1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wcmVkYXRvciA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDExLjIyNDEzMDYzMDQ5MzE2NCAqIGFtb3VudCwgLTQuNzk0NDg2OTk5NTExNzE5ICogYW1vdW50LCAtMi44NzQ2MTE4NTQ1NTMyMjI3ICogYW1vdW50LCAwICogYW1vdW50LCAwLjQwMzQyNDM4MjIwOTc3NzgzICogYW1vdW50LFxuICAgICAgICAtMy42MzMwNjk3NTM2NDY4NTA2ICogYW1vdW50LCA5LjE5MzE1NzE5NjA0NDkyMiAqIGFtb3VudCwgLTIuOTUxODEwODM2NzkxOTkyICogYW1vdW50LCAwICogYW1vdW50LCAtMS4zMTYxMzUwNDg4NjYyNzIgKiBhbW91bnQsXG4gICAgICAgIC0zLjIxODQxOTc5MDI2Nzk0NDMgKiBhbW91bnQsIC00LjIzNzUwMzA1MTc1NzgxMjUgKiBhbW91bnQsIDcuNDc2NDQ4MDU5MDgyMDMxICogYW1vdW50LCAwICogYW1vdW50LCAwLjgwNDQ0NTkyMjM3NDcyNTMgKiBhbW91bnQsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBMU0QgZWZmZWN0XG4gKlxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBIb3cgY3JhenkgaXMgeW91ciBlZmZlY3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5sc2QgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMiwgLTAuNCwgMC41LCAwLCAwLFxuICAgICAgICAtMC41LCAyLCAtMC40LCAwLCAwLFxuICAgICAgICAtMC40LCAtMC41LCAzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgb25lXG4gKlxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIGZhbHNlKTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF0cml4IG9mIHRoZSBjb2xvciBtYXRyaXggZmlsdGVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yTWF0cml4RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IFsxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwXVxuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm0udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBsb3dlcnMgdGhlIGNvbG9yIGRlcHRoIG9mIHlvdXIgaW1hZ2UgYnkgdGhlIGdpdmVuIGFtb3VudCwgcHJvZHVjaW5nIGFuIGltYWdlIHdpdGggYSBzbWFsbGVyIHBhbGV0dGUuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yU3RlcEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzdGVwO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGNvbG9yID0gZmxvb3IoY29sb3IgKiBzdGVwKSAvIHN0ZXA7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXA6IHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yU3RlcEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JTdGVwRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBzdGVwcyB0byByZWR1Y2UgdGhlIHBhbGV0dGUgYnkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvclN0ZXBGaWx0ZXIjXG4gICAgICovXG4gICAgc3RlcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbnZvbHV0aW9uRmlsdGVyIGNsYXNzIGFwcGxpZXMgYSBtYXRyaXggY29udm9sdXRpb24gZmlsdGVyIGVmZmVjdC5cbiAqIEEgY29udm9sdXRpb24gY29tYmluZXMgcGl4ZWxzIGluIHRoZSBpbnB1dCBpbWFnZSB3aXRoIG5laWdoYm9yaW5nIHBpeGVscyB0byBwcm9kdWNlIGEgbmV3IGltYWdlLlxuICogQSB3aWRlIHZhcmlldHkgb2YgaW1hZ2UgZWZmZWN0cyBjYW4gYmUgYWNoaWV2ZWQgdGhyb3VnaCBjb252b2x1dGlvbnMsIGluY2x1ZGluZyBibHVycmluZywgZWRnZVxuICogZGV0ZWN0aW9uLCBzaGFycGVuaW5nLCBlbWJvc3NpbmcsIGFuZCBiZXZlbGluZy4gVGhlIG1hdHJpeCBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIFNlZSBodHRwOi8vZG9jcy5naW1wLm9yZy9lbi9wbHVnLWluLWNvbnZtYXRyaXguaHRtbCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICovXG5mdW5jdGlvbiBDb252b2x1dGlvbkZpbHRlcihtYXRyaXgsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyBtZWRpdW1wIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xcbnVuaWZvcm0gZmxvYXQgbWF0cml4WzldO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IGMxMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAtIHRleGVsU2l6ZSk7IC8vIHRvcCBsZWZ0XFxuICAgdmVjNCBjMTIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgY2VudGVyXFxuICAgdmVjNCBjMTMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCByaWdodFxcblxcbiAgIHZlYzQgYzIxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIGxlZnRcXG4gICB2ZWM0IGMyMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7IC8vIG1pZCBjZW50ZXJcXG4gICB2ZWM0IGMyMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCByaWdodFxcblxcbiAgIHZlYzQgYzMxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gbGVmdFxcbiAgIHZlYzQgYzMyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGNlbnRlclxcbiAgIHZlYzQgYzMzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgdGV4ZWxTaXplKTsgLy8gYm90dG9tIHJpZ2h0XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID1cXG4gICAgICAgYzExICogbWF0cml4WzBdICsgYzEyICogbWF0cml4WzFdICsgYzEzICogbWF0cml4WzJdICtcXG4gICAgICAgYzIxICogbWF0cml4WzNdICsgYzIyICogbWF0cml4WzRdICsgYzIzICogbWF0cml4WzVdICtcXG4gICAgICAgYzMxICogbWF0cml4WzZdICsgYzMyICogbWF0cml4WzddICsgYzMzICogbWF0cml4WzhdO1xcblxcbiAgIGdsX0ZyYWdDb2xvci5hID0gYzIyLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWF0cml4OiAgICAgeyB0eXBlOiAnMWZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KSB9LFxuICAgICAgICAgICAgdGV4ZWxTaXplOiAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxIC8gd2lkdGgsIHk6IDEgLyBoZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnZvbHV0aW9uRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb252b2x1dGlvbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnkgPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIENyb3NzIEhhdGNoIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENyb3NzSGF0Y2hGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZmxvYXQgbHVtID0gbGVuZ3RoKHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZC54eSkucmdiKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDEuMCwgMS4wLCAxLjApO1xcblxcbiAgICBpZiAobHVtIDwgMS4wMClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjc1KVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNTApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC4zKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXCJcbiAgICApO1xufVxuXG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDcm9zc0hhdGNoRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDcm9zc0hhdGNoRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIERpc3BsYWNlbWVudEZpbHRlciBjbGFzcyB1c2VzIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHRleHR1cmUgKGNhbGxlZCB0aGUgZGlzcGxhY2VtZW50IG1hcCkgdG8gcGVyZm9ybSBhIGRpc3BsYWNlbWVudCBvZiBhbiBvYmplY3QuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGZpbHRlciB0byBhcHBseSBhbGwgbWFub3Igb2YgY3Jhenkgd2FycGluZyBlZmZlY3RzXG4gKiBDdXJyZW50bHkgdGhlIHIgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHggYW5kIHRoZSBnIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIChtYWtlIHN1cmUgaXRzIGFkZGVkIHRvIHRoZSBzY2VuZSEpXG4gKi9cbmZ1bmN0aW9uIERpc3BsYWNlbWVudEZpbHRlcihzcHJpdGUsIHNjYWxlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG4gICAgc3ByaXRlLnJlbmRlcmFibGUgPSBmYWxzZTtcblxuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZNYXBDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcFNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgbWFwID0gIHRleHR1cmUyRChtYXBTYW1wbGVyLCB2TWFwQ29vcmQpO1xcblxcbiAgIG1hcCAtPSAwLjU7XFxuICAgbWFwLnh5ICo9IHNjYWxlO1xcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyBtYXAueCwgdlRleHR1cmVDb29yZC55ICsgbWFwLnkpKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcFNhbXBsZXI6ICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLnRleHR1cmUgfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9LFxuICAgICAgICAgICAgc2NhbGU6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSwgeTogMSB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcblxuICAgIGlmIChzY2FsZSA9PT0gbnVsbCB8fCBzY2FsZSA9PT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgICAgc2NhbGUgPSAyMDtcbiAgICB9XG5cbiAgICB0aGlzLnNjYWxlID0gbmV3IGNvcmUuUG9pbnQoc2NhbGUsIHNjYWxlKTtcbn1cblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYWNlbWVudEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxhY2VtZW50RmlsdGVyO1xuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS54ID0gdGhpcy5zY2FsZS54ICogKDEvaW5wdXQuZnJhbWUud2lkdGgpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueSA9IHRoaXMuc2NhbGUueSAqICgxL2lucHV0LmZyYW1lLmhlaWdodCk7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gTXVzdCBiZSBwb3dlciBvZiAyIHNpemVkIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5EaXNwbGFjZW1lbnRGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3ZlcyBodHRwOi8vbWF0Z3JvdmVzLmNvbS8gQERvb3JtYXQyM1xuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9mdW4vZG90c2NyZWVuLmpzXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgZG90c2NyZWVuIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0byBiZSBtYWRlIG91dCBvZlxuICogYmxhY2sgYW5kIHdoaXRlIGhhbGZ0b25lIGRvdHMgbGlrZSBhbiBvbGQgcHJpbnRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRG90U2NyZWVuRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG5cXG5mbG9hdCBwYXR0ZXJuKClcXG57XFxuICAgZmxvYXQgcyA9IHNpbihhbmdsZSksIGMgPSBjb3MoYW5nbGUpO1xcbiAgIHZlYzIgdGV4ID0gdlRleHR1cmVDb29yZCAqIGRpbWVuc2lvbnMueHk7XFxuICAgdmVjMiBwb2ludCA9IHZlYzIoXFxuICAgICAgIGMgKiB0ZXgueCAtIHMgKiB0ZXgueSxcXG4gICAgICAgcyAqIHRleC54ICsgYyAqIHRleC55XFxuICAgKSAqIHNjYWxlO1xcbiAgIHJldHVybiAoc2luKHBvaW50LngpICogc2luKHBvaW50LnkpKSAqIDQuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhhdmVyYWdlICogMTAuMCAtIDUuMCArIHBhdHRlcm4oKSksIGNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNjYWxlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvdFNjcmVlbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRG90U2NyZWVuRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIHNjYWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHJhZGl1cyBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWVRpbnRGaWx0ZXIgYXBwbGllcyBhIHZlcnRpY2FsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWVRpbnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbitvZmZzZXQpLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IHN1bSA9IHZlYzQoMC4wKTtcXG5cXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLnJnYiAqIHN1bS5hICogYWxwaGEsIHN1bS5hICogYWxwaGEgKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSAvIDUxMiB9LFxuICAgICAgICAgICAgY29sb3I6IHsgdHlwZTogJ2MnLCB2YWx1ZTogWzAsMCwwXX0sXG4gICAgICAgICAgICBhbHBoYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC43IH0sXG4gICAgICAgICAgICBvZmZzZXQ6IHsgdHlwZTogJzJmJywgdmFsdWU6WzUsIDVdfSxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOjF9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllUaW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWVRpbnRGaWx0ZXI7XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIGNsZWFyKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWVRpbnRGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllUaW50RmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWVRpbnRGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgRHJvcFNoYWRvd0ZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEcm9wU2hhZG93RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIgPSBuZXcgQmx1cllUaW50RmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgdGhpcy5wYWRkaW5nID0gMzA7XG5cbiAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9hbmdsZSA9IDQ1ICogTWF0aC5QSSAvIDE4MDtcbiAgICB0aGlzLl9kaXN0YW5jZSA9IDEwO1xuICAgIHRoaXMuYWxwaGEgPSAwLjc1O1xuICAgIHRoaXMuaGlkZU9iamVjdCA9IGZhbHNlO1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5NVUxUSVBMWTtcbn1cblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRHJvcFNoYWRvd0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRHJvcFNoYWRvd0ZpbHRlcjtcblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIGlmKHRoaXMuX2RpcnR5UG9zaXRpb24pXG4gICAge1xuICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzBdID0gTWF0aC5zaW4odGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVsxXSA9IE1hdGguY29zKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUodGhpcy5ibGVuZE1vZGUpO1xuXG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIGlmKCF0aGlzLmhpZGVPYmplY3QpXG4gICAge1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG4gICAgfVxuXG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBjb2xvcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgY29yZS51dGlscy5yZ2IyaGV4KCB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgPSBjb3JlLnV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYWxwaGE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXN0YW5jZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGRpc3RhbmNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9hbmdsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fYW5nbGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBncmV5c2NhbGVzIHRoZSBwYWxldHRlIG9mIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBHcmF5RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JheTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIHZlYzMoMC4yMTI2KmdsX0ZyYWdDb2xvci5yICsgMC43MTUyKmdsX0ZyYWdDb2xvci5nICsgMC4wNzIyKmdsX0ZyYWdDb2xvci5iKSwgZ3JheSk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXk6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuR3JheUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkdyYXlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JheUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JheUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR3JheUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXkuIDEgd2lsbCBtYWtlIHRoZSBvYmplY3QgYmxhY2sgYW5kIHdoaXRlLCAwIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5HcmF5RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYXk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGZpbHRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmZpbHRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXNjaWlGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2FzY2lpL0FzY2lpRmlsdGVyJyksXG4gICAgQmxvb21GaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2Jsb29tL0Jsb29tRmlsdGVyJyksXG4gICAgQmx1ckZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckZpbHRlcicpLFxuICAgIEJsdXJYRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1cllGaWx0ZXInKSxcbiAgICBCbHVyRGlyRmlsdGVyOiAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRGlyRmlsdGVyJyksXG4gICAgQ29sb3JNYXRyaXhGaWx0ZXI6ICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yTWF0cml4RmlsdGVyJyksXG4gICAgQ29sb3JTdGVwRmlsdGVyOiAgICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yU3RlcEZpbHRlcicpLFxuICAgIENvbnZvbHV0aW9uRmlsdGVyOiAgcmVxdWlyZSgnLi9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlcicpLFxuICAgIENyb3NzSGF0Y2hGaWx0ZXI6ICAgcmVxdWlyZSgnLi9jcm9zc2hhdGNoL0Nyb3NzSGF0Y2hGaWx0ZXInKSxcbiAgICBEaXNwbGFjZW1lbnRGaWx0ZXI6IHJlcXVpcmUoJy4vZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlcicpLFxuICAgIERvdFNjcmVlbkZpbHRlcjogICAgcmVxdWlyZSgnLi9kb3QvRG90U2NyZWVuRmlsdGVyJyksXG4gICAgR3JheUZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2dyYXkvR3JheUZpbHRlcicpLFxuICAgIERyb3BTaGFkb3dGaWx0ZXI6ICAgcmVxdWlyZSgnLi9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXInKSxcbiAgICBJbnZlcnRGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vaW52ZXJ0L0ludmVydEZpbHRlcicpLFxuICAgIE5vaXNlRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ub2lzZS9Ob2lzZUZpbHRlcicpLFxuICAgIFBpeGVsYXRlRmlsdGVyOiAgICAgcmVxdWlyZSgnLi9waXhlbGF0ZS9QaXhlbGF0ZUZpbHRlcicpLFxuICAgIFJHQlNwbGl0RmlsdGVyOiAgICAgcmVxdWlyZSgnLi9yZ2IvUkdCU3BsaXRGaWx0ZXInKSxcbiAgICBTaG9ja3dhdmVGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vc2hvY2t3YXZlL1Nob2Nrd2F2ZUZpbHRlcicpLFxuICAgIFNlcGlhRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9zZXBpYS9TZXBpYUZpbHRlcicpLFxuICAgIFNtYXJ0Qmx1ckZpbHRlcjogICAgcmVxdWlyZSgnLi9ibHVyL1NtYXJ0Qmx1ckZpbHRlcicpLFxuICAgIFRpbHRTaGlmdEZpbHRlcjogICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyJyksXG4gICAgVHdpc3RGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3R3aXN0L1R3aXN0RmlsdGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGludmVydHMgeW91ciBEaXNwbGF5IE9iamVjdHMgY29sb3JzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBJbnZlcnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gZmxvYXQgaW52ZXJ0O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggKHZlYzMoMSktZ2xfRnJhZ0NvbG9yLnJnYikgKiBnbF9GcmFnQ29sb3IuYSwgZ2xfRnJhZ0NvbG9yLnJnYiwgMS4wIC0gaW52ZXJ0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBpbnZlcnQ6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludmVydEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gSW52ZXJ0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhJbnZlcnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBpbnZlcnQuIGAxYCB3aWxsIGZ1bGx5IGludmVydCB0aGUgY29sb3JzLCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkludmVydEZpbHRlciNcbiAgICAgKi9cbiAgICBpbnZlcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9hZGp1c3Qvbm9pc2UuanNcbiAqL1xuXG4vKipcbiAqIEEgTm9pc2UgZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gTm9pc2VGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgbm9pc2U7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgcmFuZCh2ZWMyIGNvKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoY28ueHksIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZmxvYXQgZGlmZiA9IChyYW5kKHZUZXh0dXJlQ29vcmQpIC0gMC41KSAqIG5vaXNlO1xcblxcbiAgICBjb2xvci5yICs9IGRpZmY7XFxuICAgIGNvbG9yLmcgKz0gZGlmZjtcXG4gICAgY29sb3IuYiArPSBkaWZmO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBub2lzZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbk5vaXNlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuTm9pc2VGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTm9pc2VGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE5vaXNlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2lzZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIG5vaXNlIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuTm9pc2VGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMC41XG4gICAgICovXG4gICAgbm9pc2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHBpeGVsYXRlIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciAnYmxvY2t5Jy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUGl4ZWxhdGVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZDtcXG5cXG4gICAgdmVjMiBzaXplID0gZGltZW5zaW9ucy54eSAvIHBpeGVsU2l6ZTtcXG5cXG4gICAgdmVjMiBjb2xvciA9IGZsb29yKCAoIHZUZXh0dXJlQ29vcmQgKiBzaXplICkgKSAvIHNpemUgKyBwaXhlbFNpemUvZGltZW5zaW9ucy54eSAqIDAuNTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb2xvcik7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgICB2YWx1ZTogeyB4OiAxMCwgeTogMTAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBpeGVsYXRlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBQaXhlbGF0ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBhIHBvaW50IHRoYXQgZGVzY3JpYmVzIHRoZSBzaXplIG9mIHRoZSBibG9ja3MuXG4gICAgICogeCBpcyB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGFuZCB5IGlzIHRoZSBoZWlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUGl4ZWxhdGVGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEFuIFJHQiBTcGxpdCBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFJHQlNwbGl0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcmVkO1xcbnVuaWZvcm0gdmVjMiBncmVlbjtcXG51bmlmb3JtIHZlYzIgYmx1ZTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yLnIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyByZWQvZGltZW5zaW9ucy54eSkucjtcXG4gICBnbF9GcmFnQ29sb3IuZyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGdyZWVuL2RpbWVuc2lvbnMueHkpLmc7XFxuICAgZ2xfRnJhZ0NvbG9yLmIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBibHVlL2RpbWVuc2lvbnMueHkpLmI7XFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgZ3JlZW46ICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAtMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGJsdWU6ICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IC0yMCB9IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUkdCU3BsaXRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFJHQlNwbGl0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSR0JTcGxpdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBSZWQgY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgcmVkOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yZWQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmVlbiBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmVlbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEJsdWUgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgYXBwbGllcyBhIHNlcGlhIGVmZmVjdCB0byB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2VwaWFGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc2VwaWE7XFxuXFxuY29uc3QgbWF0MyBzZXBpYU1hdHJpeCA9IG1hdDMoMC4zNTg4LCAwLjcwNDQsIDAuMTM2OCwgMC4yOTkwLCAwLjU4NzAsIDAuMTE0MCwgMC4yMzkyLCAwLjQ2OTYsIDAuMDkxMik7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZ2xfRnJhZ0NvbG9yLnJnYiAqIHNlcGlhTWF0cml4LCBzZXBpYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2VwaWE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2VwaWFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TZXBpYUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXBpYUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2VwaWFGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNlcGlhRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgc2VwaWEuIGAxYCB3aWxsIGFwcGx5IHRoZSBmdWxsIHNlcGlhIGVmZmVjdCwgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TZXBpYUZpbHRlciNcbiAgICAgKi9cbiAgICBzZXBpYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA0eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTaG9ja3dhdmVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XFxudW5pZm9ybSB2ZWMzIHBhcmFtczsgLy8gMTAuMCwgMC44LCAwLjFcXG51bmlmb3JtIGZsb2F0IHRpbWU7XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSB2VGV4dHVyZUNvb3JkO1xcbiAgICB2ZWMyIHRleENvb3JkID0gdXY7XFxuXFxuICAgIGZsb2F0IGRpc3QgPSBkaXN0YW5jZSh1diwgY2VudGVyKTtcXG5cXG4gICAgaWYgKCAoZGlzdCA8PSAodGltZSArIHBhcmFtcy56KSkgJiYgKGRpc3QgPj0gKHRpbWUgLSBwYXJhbXMueikpIClcXG4gICAge1xcbiAgICAgICAgZmxvYXQgZGlmZiA9IChkaXN0IC0gdGltZSk7XFxuICAgICAgICBmbG9hdCBwb3dEaWZmID0gMS4wIC0gcG93KGFicyhkaWZmKnBhcmFtcy54KSwgcGFyYW1zLnkpO1xcblxcbiAgICAgICAgZmxvYXQgZGlmZlRpbWUgPSBkaWZmICAqIHBvd0RpZmY7XFxuICAgICAgICB2ZWMyIGRpZmZVViA9IG5vcm1hbGl6ZSh1diAtIGNlbnRlcik7XFxuICAgICAgICB0ZXhDb29yZCA9IHV2ICsgKGRpZmZVViAqIGRpZmZUaW1lKTtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHRleENvb3JkKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBjZW50ZXI6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9LFxuICAgICAgICAgICAgcGFyYW1zOiB7IHR5cGU6ICd2MycsIHZhbHVlOiB7IHg6IDEwLCB5OiAwLjgsIHo6IDAuMSB9IH0sXG4gICAgICAgICAgICB0aW1lOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaG9ja3dhdmVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNob2Nrd2F2ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNlbnRlciBvZiB0aGUgc2hvY2t3YXZlIGluIG5vcm1hbGl6ZWQgc2NyZWVuIGNvb3Jkcy4gVGhhdCBpc1xuICAgICAqICgwLDApIGlzIHRoZSB0b3AtbGVmdCBhbmQgKDEsMSkgaXMgdGhlIGJvdHRvbSByaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgY2VudGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGFyYW1zIG9mIHRoZSBzaG9ja3dhdmUuIFRoZXNlIG1vZGlmeSB0aGUgbG9vayBhbmQgYmVoYXZpb3Igb2ZcbiAgICAgKiB0aGUgc2hvY2t3YXZlIGFzIGl0IHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIHNob2Nrd2F2ZS4gVGhpcyBjb250cm9scyB0aGUgc3BlZWQgYXQgd2hpY2hcbiAgICAgKiB0aGUgc2hvY2t3YXZlIHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHRpbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRBeGlzRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRBeGlzRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGJsdXI7XFxudW5pZm9ybSBmbG9hdCBncmFkaWVudEJsdXI7XFxudW5pZm9ybSB2ZWMyIHN0YXJ0O1xcbnVuaWZvcm0gdmVjMiBlbmQ7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcbnVuaWZvcm0gdmVjMiB0ZXhTaXplO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcbiAgICB2ZWMyIG5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMyKHN0YXJ0LnkgLSBlbmQueSwgZW5kLnggLSBzdGFydC54KSk7XFxuICAgIGZsb2F0IHJhZGl1cyA9IHNtb290aHN0ZXAoMC4wLCAxLjAsIGFicyhkb3QodlRleHR1cmVDb29yZCAqIHRleFNpemUgLSBzdGFydCwgbm9ybWFsKSkgLyBncmFkaWVudEJsdXIpICogYmx1cjtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgLyB0ZXhTaXplICogcGVyY2VudCAqIHJhZGl1cyk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6ICAgICAgICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxMDAgfSxcbiAgICAgICAgICAgIGdyYWRpZW50Qmx1cjogICB7IHR5cGU6ICcxZicsIHZhbHVlOiA2MDAgfSxcbiAgICAgICAgICAgIHN0YXJ0OiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAsICAgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZW5kOiAgICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogNjAwLCAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBkZWx0YTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAzMCwgICB5OiAzMCB9IH0sXG4gICAgICAgICAgICB0ZXhTaXplOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiB3aW5kb3cuaW5uZXJXaWR0aCwgeTogd2luZG93LmlubmVySGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbn1cblxuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICogVGhpcyBpcyBvdmVycmlkZGVuIGluIHRoZSBYIGFuZCBZIGZpbHRlcnMsIGRvZXMgbm90aGluZyBmb3IgdGhpcyBjbGFzcy5cbiAqXG4gKi9cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAwO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IDA7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WUZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnQgRmlsdGVyLiBNYW5hZ2VzIHRoZSBwYXNzIG9mIGJvdGggYSBUaWx0U2hpZnRYRmlsdGVyIGFuZCBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlciA9IG5ldyBUaWx0U2hpZnRYRmlsdGVyKCk7XG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyID0gbmV3IFRpbHRTaGlmdFlGaWx0ZXIoKTtcbn1cblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0RmlsdGVyO1xuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ncmFkaWVudEJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5zdGFydCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5lbmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRYRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gZHggLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR5IC8gZDtcbn07XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFlGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WUZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAtZHkgLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR4IC8gZDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgdHdpc3QgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHR3aXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVHdpc3RGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgLSBvZmZzZXQ7XFxuICAgZmxvYXQgZGlzdCA9IGxlbmd0aChjb29yZCk7XFxuXFxuICAgaWYgKGRpc3QgPCByYWRpdXMpXFxuICAge1xcbiAgICAgICBmbG9hdCByYXRpbyA9IChyYWRpdXMgLSBkaXN0KSAvIHJhZGl1cztcXG4gICAgICAgZmxvYXQgYW5nbGVNb2QgPSByYXRpbyAqIHJhdGlvICogYW5nbGU7XFxuICAgICAgIGZsb2F0IHMgPSBzaW4oYW5nbGVNb2QpO1xcbiAgICAgICBmbG9hdCBjID0gY29zKGFuZ2xlTW9kKTtcXG4gICAgICAgY29vcmQgPSB2ZWMyKGNvb3JkLnggKiBjIC0gY29vcmQueSAqIHMsIGNvb3JkLnggKiBzICsgY29vcmQueSAqIGMpO1xcbiAgIH1cXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkK29mZnNldCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBvZmZzZXQ6ICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuVHdpc3RGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ud2lzdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUd2lzdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVHdpc3RGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFR3aXN0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgZGVzY3JpYmVzIHRoZSB0aGUgb2Zmc2V0IG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcmFkaXVzIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIHJhZGl1czoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBhbmdsZSBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvLyBydW4gdGhlIHBvbHlmaWxsc1xucmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbi8vIGFkZCBjb3JlIHBsdWdpbnMuXG5jb3JlLmV4dHJhcyAgICAgICAgID0gcmVxdWlyZSgnLi9leHRyYXMnKTtcbmNvcmUuZmlsdGVycyAgICAgICAgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcbmNvcmUuaW50ZXJhY3Rpb24gICAgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9uJyk7XG5jb3JlLmxvYWRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9sb2FkZXJzJyk7XG5jb3JlLm1lc2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9tZXNoJyk7XG5jb3JlLmFjY2Vzc2liaWxpdHkgID0gcmVxdWlyZSgnLi9hY2Nlc3NpYmlsaXR5Jyk7XG5cbi8vIGV4cG9ydCBhIHByZW1hZGUgbG9hZGVyIGluc3RhbmNlXG4vKipcbiAqIEEgcHJlbWFkZSBpbnN0YW5jZSBvZiB0aGUgbG9hZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZGVyIHJlc291cmNlcy5cbiAqXG4gKiBAbmFtZSBsb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcHJvcGVydHkge1BJWEkubG9hZGVycy5Mb2FkZXJ9XG4gKi9cbmNvcmUubG9hZGVyID0gbmV3IGNvcmUubG9hZGVycy5Mb2FkZXIoKTtcblxuLy8gbWl4aW4gdGhlIGRlcHJlY2F0aW9uIGZlYXR1cmVzLlxuT2JqZWN0LmFzc2lnbihjb3JlLCByZXF1aXJlKCcuL2RlcHJlY2F0aW9uJykpO1xuXG4vLyBBbHdheXMgZXhwb3J0IHBpeGkgZ2xvYmFsbHkuXG5nbG9iYWwuUElYSSA9IGNvcmU7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBIb2xkcyBhbGwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhbiBJbnRlcmFjdGlvbiBldmVudFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25EYXRhKClcbntcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IHN0b3JlcyB0aGUgZ2xvYmFsIGNvb3JkcyBvZiB3aGVyZSB0aGUgdG91Y2gvbW91c2UgZXZlbnQgaGFwcGVuZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5nbG9iYWwgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBTcHJpdGUgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBhc3NlZCB0byBhbiBldmVudCBoYW5kbGVyLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbmFsIERPTSBFdmVudCB0aGF0IHdhcyBjYXB0dXJlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gbnVsbDtcbn1cblxuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25EYXRhO1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBzcGVjaWZpZWQgZGlzcGxheU9iamVjdCBmb3IgdGhpcyBJbnRlcmFjdGlvbkRhdGFcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSBsb2NhbCBjb29yZHMgb2ZmXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IHBvaW50KVxuICogQHBhcmFtIFtnbG9iYWxQb3NdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHlvdXIgY3VzdG9tIGdsb2JhbCBjb29yZHMsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCB1c2UgdGhlIGN1cnJlbnQgZ2xvYmFsIGNvb3JkcylcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEludGVyYWN0aW9uRGF0YSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgRGlzcGxheU9iamVjdFxuICovXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmdldExvY2FsUG9zaXRpb24gPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcG9pbnQsIGdsb2JhbFBvcylcbntcbiAgICByZXR1cm4gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UoZ2xvYmFsUG9zIHx8IHRoaXMuZ2xvYmFsLCBwb2ludCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgSW50ZXJhY3Rpb25EYXRhID0gcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKTtcblxuLy8gTWl4IGludGVyYWN0aXZlVGFyZ2V0IGludG8gY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZVxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxuKTtcblxuLyoqXG4gKiBUaGUgaW50ZXJhY3Rpb24gbWFuYWdlciBkZWFscyB3aXRoIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuIEFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBpbnRlcmFjdGl2ZVxuICogaWYgaXRzIGludGVyYWN0aXZlIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZVxuICogVGhpcyBtYW5hZ2VyIGFsc28gc3VwcG9ydHMgbXVsdGl0b3VjaC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdD10cnVlXSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBtYW5hZ2VyIGF1dG9tYXRpY2FsbHkgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeT0xMF0ge251bWJlcn0gRnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyLCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgaW50ZXJhY3Rpb24gbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGJlIHByZXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0ID0gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0IDogdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFzIHRoaXMgZnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZCBtb3JlIG9mdGVuLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSA9IG9wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW91c2UgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9XG4gICAgICovXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IGRhdGEgb2JqZWN0IHRvIGhhbmRsZSBhbGwgdGhlIGV2ZW50IHRyYWNraW5nL2Rpc3BhdGNoaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5ldmVudERhdGEgPSB7XG4gICAgICAgIHN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgIGRhdGE6IHRoaXMubW91c2UsXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGxpdHRsZSBpbnRlcmFjdGl2ZURhdGEgcG9vbCAhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YVtdfVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBlbGVtZW50IHRvIGJpbmQgdG8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhhdmUgZXZlbnRzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGRvbSBlbGVtZW50P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcblxuICAgIC8vdGhpcyB3aWxsIG1ha2UgaXQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGJpbmQgYWxsIHRoZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VVcCA9IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IHRoaXMucHJvY2Vzc01vdXNlVXAuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IHRoaXMucHJvY2Vzc01vdXNlRG93bi5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gdGhpcy5wcm9jZXNzTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU91dCA9IHRoaXMub25Nb3VzZU91dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gdGhpcy5vblRvdWNoU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gdGhpcy5wcm9jZXNzVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoRW5kID0gdGhpcy5vblRvdWNoRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSB0aGlzLnByb2Nlc3NUb3VjaEVuZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IHRoaXMub25Ub3VjaE1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSB0aGlzLnByb2Nlc3NUb3VjaE1vdmUuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxhc3QgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNzcyBzdHlsZSBvZiB0aGUgY3Vyc29yIHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9ICdpbmhlcml0JztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNhY2hlZCB2YXJcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcblxuICAgIHRoaXMuc2V0VGFyZ2V0RWxlbWVudCh0aGlzLnJlbmRlcmVyLnZpZXcsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbik7XG59XG5cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UvdG91Y2ggZXZlbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZVxuICogb3RoZXIgRE9NIGVsZW1lbnRzIG9uIHRvcCBvZiB0aGUgcmVuZGVyZXJzIENhbnZhcyBlbGVtZW50LiBXaXRoIHRoaXMgeW91J2xsIGJlIGJhbGUgdG8gZGVsZXRlZ2F0ZVxuICogYW5vdGhlciBET00gZWxlbWVudCB0byByZWNlaXZlIHRob3NlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9IHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUSGUgcmVzb2x1dGlvbiBvZiB0aGUgbmV3IGVsZW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBjYW52YXMpLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXRUYXJnZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJlc29sdXRpb24pXG57XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgdGhlIERPTSBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAgICB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgICB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICAgICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICAgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgICAgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgICAgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgdGhlIERPTSBldmVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICcnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzLlxuICogSW52b2tlZCBieSBhIHRocm90dGxlZCB0aWNrZXIgdXBkYXRlIGZyb21cbiAqIHtAbGluayBQSVhJLnRpY2tlci5zaGFyZWR9LlxuICpcbiAqIEBwYXJhbSBkZWx0YVRpbWUge251bWJlcn1cbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHRoaXMuX2RlbHRhVGltZSArPSBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZGVsdGFUaW1lIDwgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWx0YVRpbWUgPSAwO1xuXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBtb3ZlIHRoZSBtb3VzZSB0aGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gZGZvbmUgdXNpbmcgdGhlIG1vdXNlIG1vdmUhXG4gICAgaWYodGhpcy5kaWRNb3ZlKVxuICAgIHtcbiAgICAgICAgdGhpcy5kaWRNb3ZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ET1xufTtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgZGlzcGxheSBvYmplY3QgaW4gcXVlc3Rpb25cbiAqIEBwYXJhbSBldmVudFN0cmluZyB7c3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGUuZywgbW91c2Vkb3duKVxuICogQHBhcmFtIGV2ZW50RGF0YSB7b2JqZWN0fSB0aGUgZXZlbnQgZGF0YSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApXG57XG4gICAgaWYoIWV2ZW50RGF0YS5zdG9wcGVkKVxuICAgIHtcbiAgICAgICAgZXZlbnREYXRhLnRhcmdldCA9IGRpc3BsYXlPYmplY3Q7XG4gICAgICAgIGV2ZW50RGF0YS50eXBlID0gZXZlbnRTdHJpbmc7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5lbWl0KCBldmVudFN0cmluZywgZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10oIGV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXBzIHggYW5kIHkgY29vcmRzIGZyb20gYSBET00gb2JqZWN0IGFuZCBtYXBzIHRoZW0gY29ycmVjdGx5IHRvIHRoZSBwaXhpIHZpZXcuIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBwb2ludC5cbiAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgdGhlIERPTSBlbGVtZW50IGNvdWxkIGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCBhbnl3aGVyZSBvbiB0aGUgc2NyZWVuLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW5cbiAqIEBwYXJhbSAge251bWJlcn0geCAgICAgdGhlIHggY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICogQHBhcmFtICB7bnVtYmVyfSB5ICAgICB0aGUgeSBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUubWFwUG9zaXRpb25Ub1BvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgeCwgeSApXG57XG4gICAgdmFyIHJlY3QgPSB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBwb2ludC54ID0gKCAoIHggLSByZWN0LmxlZnQgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC53aWR0aCAgLyByZWN0LndpZHRoICApICkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgcG9pbnQueSA9ICggKCB5IC0gcmVjdC50b3AgICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuaGVpZ2h0IC8gcmVjdC5oZWlnaHQgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVzIGEgbmVhdCB3YXkgb2YgY3Jhd2xpbmcgdGhyb3VnaCB0aGUgc2NlbmUgZ3JhcGggYW5kIHJ1bm5pbmcgYSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gYWxsIGludGVyYWN0aXZlIG9iamVjdHMgaXQgZmluZHMuXG4gKiBJdCB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIGhpdCB0ZXN0aW5nIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlIGhpdCBhY3Jvc3MgaW4gdGhlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IGlzIHRlc3RlZCBmb3IgY29sbGlzaW9uXG4gKiBAcGFyYW0gIHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IGRpc3BsYXlPYmplY3QgdGhlIGRpc3BsYXlPYmplY3QgdGhhdCB3aWxsIGJlIGhpdCB0ZXN0IChyZWN1cmNzaXZseSBjcmF3bHMgaXRzIGNoaWxkcmVuKVxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBpbnRlcmFjdGl2ZSBvYmplY3QuIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBoaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtib29sZWFufSBoaXRUZXN0IHRoaXMgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3RzIGluc2lkZSBzaG91bGQgYmUgaGl0IHRlc3QgYWdhaW5zdCB0aGUgcG9pbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiB0aGUgZGlzcGxheU9iamVjdCBoaXQgdGhlIHBvaW50XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0ludGVyYWN0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBkaXNwbGF5T2JqZWN0LCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZSlcbntcbiAgICBpZighZGlzcGxheU9iamVjdCB8fCAhZGlzcGxheU9iamVjdC52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRvb2sgYSBsaXR0bGUgd2hpbGUgdG8gcmV3b3JrIHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5ISBCdXQgbm93IGl0IGlzIGRvbmUgYW5kIG5pY2UgYW5kIG9wdGltaXNlZC4gXl9eXG4gICAgLy8gXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdyBsb29wIHRocm91Z2ggYWxsIG9iamVjdHMgYW5kIHRoZW4gb25seSBoaXQgdGVzdCB0aGUgb2JqZWN0cyBpdCBIQVMgdG8sIG5vdCBhbGwgb2YgdGhlbS4gTVVDSCBmYXN0ZXIuLlxuICAgIC8vIEFuIG9iamVjdCB3aWxsIGJlIGhpdCB0ZXN0IGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICAvLyBcbiAgICAvLyAxOiBJdCBpcyBpbnRlcmFjdGl2ZS5cbiAgICAvLyAyOiBJdCBiZWxvbmdzIHRvIGEgcGFyZW50IHRoYXQgaXMgaW50ZXJhY3RpdmUgQU5EIG9uZSBvZiB0aGUgcGFyZW50cyBjaGlsZHJlbiBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIC8vIFxuICAgIC8vIEFzIGFub3RoZXIgbGl0dGxlIG9wdGltaXNhdGlvbiBvbmNlIGFuIGludGVyYWN0aXZlIG9iamVjdCBoYXMgYmVlbiBoaXQgd2UgY2FuIGNhcnJ5IG9uIHRocm91Z2ggdGhlIHNjZW5lZ3JhcGgsIGJ1dCB3ZSBrbm93IHRoYXQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGhpdHMhIFNvIHdlIGNhbiBhdm9pZCBleHRyYSBoaXQgdGVzdHNcbiAgICAvLyBBIGZpbmFsIG9wdGltaXNhdGlvbiBpcyB0aGF0IGFuIG9iamVjdCBpcyBub3QgaGl0IHRlc3QgZGlyZWN0bHkgaWYgYSBjaGlsZCBoYXMgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICBcbiAgICB2YXIgaGl0ID0gZmFsc2UsXG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gaW50ZXJhY3RpdmUgPSBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlIHx8IGludGVyYWN0aXZlO1xuXG4gICAgLy8gaWYgdGhlIGRpc3BsYXlvYmplY3QgaGFzIGEgaGl0QXJlYSwgdGhlbiBpdCBkb2VzIG5vdCBuZWVkIHRvIGhpdFRlc3QgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAqKiBGUkVFIFRJUCAqKiEgSWYgYW4gb2JqZWN0IGlzIG5vdCBpbnRlcmFjdHRpdmUgb3IgaGFzIG5vIGJ1dHRvbnMgaW4gaXQgKHN1Y2ggYXMgYSBnYW1lIHNjZW5lISkgc2V0IGludGVyYWN0aXZlQ2hpbGRyZW4gdG8gZmFsc2UgZm9yIHRoYXQgZGlzcGxheU9iamVjdC5cbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgcGl4aSB0byBjb21wbGV0bHkgaWdub3JlIGFuZCBieXBhc3MgY2hlY2tpbmcgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmVDaGlsZHJlbilcbiAgICB7ICAgICAgIFxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aC0xOyBpID49IDA7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGltZSB0byBnZXQgcmVjdXJzaXZlLi4gaWYgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpZiBzb210aGluZyBpcyBoaXQuLlxuICAgICAgICAgICAgaWYoIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHBvaW50LCBjaGlsZHJlbltpXSwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmVQYXJlbnQpIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55IG1vcmUgb2JqZWN0cyBpbiB0aGlzIGNvbnRhaW5lciBhcyB3ZSB3ZSBub3cga25vdyB0aGUgcGFyZW50IGhhcyBiZWVuIGhpdFxuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGludGVyYWN0aXZlICwgdGhhdCBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGl0IHdhcyBhY3R1YWxseSBpbnRlcmFjdGl2ZSBhbmQgbm90IGp1c3QgdGhlIGNoaWxkIG9mIGFuIGludGVyYWN0aXZlIG9iamVjdC4gXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnl0aGluZyBlbHNlLiBXZSBzdGlsbCBuZWVkIHRvIHJ1biB0aHJvdWdoIGFsbCBvYmplY3RzLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBoaXQgdGVzdHMuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uaW50ZXJhY3RpdmUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoaXRUZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm8gcG9pbnQgcnVubmluZyB0aGlzIGlmIHRoZSBpdGVtIGlzIG5vdCBpbnRlcmFjdGl2ZSBvciBkb2VzIG5vdCBoYXZlIGFuIGludGVyYWN0aXZlIHBhcmVudC5cbiAgICBpZihpbnRlcmFjdGl2ZSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBoaXQgdGVzdGluZyAoYXMgaW4gd2UgaGF2ZSBubyBoaXQgYW55IG9iamVjdHMgeWV0KVxuICAgICAgICAvLyBXZSBhbHNvIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGl0IHRlc3RpbmcgaWYgb25jZSBvZiB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4gaGFzIGFscmVhZHkgYmVlbiBoaXQhXG4gICAgICAgIGlmKGhpdFRlc3QgJiYgIWhpdClcbiAgICAgICAgeyAgXG4gICAgICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0aGlzLl90ZW1wUG9pbnQpO1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuaGl0QXJlYS5jb250YWlucyggdGhpcy5fdGVtcFBvaW50LngsIHRoaXMuX3RlbXBQb2ludC55ICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnVuYyhkaXNwbGF5T2JqZWN0LCBoaXQpOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIFxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyBwcmVzc2VkIGRvd25cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZURvd24sIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIGRvd24gY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VEb3duID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuICAgIFxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3RbIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bicgXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGRvd24nIDogJ21vdXNlZG93bicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcmVsZWFzZWRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VVcCwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgdXAgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlVXAgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG4gICAgdmFyIGlzRG93biA9ICBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXAnIDogJ21vdXNldXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRjbGljaycgOiAnY2xpY2snLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cG91dHNpZGUnIDogJ21vdXNldXBvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiB0aGUgbW91c2UgbW92aW5nXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmRpZE1vdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU1vdmUsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE8gQlVHIGZvciBwYXJlbnRzIGluZXJhY3RpdmUgb2JqZWN0IChib3JkZXIgb3JkZXIgaXNzdWUpXG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2Vtb3ZlJywgdGhpcy5ldmVudERhdGEpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dChkaXNwbGF5T2JqZWN0LCBoaXQpO1xufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYmVpbmcgbW92ZWQgb3V0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICAvLyBUT0RPIG9wdGltaXplIGJ5IG5vdCBjaGVjayBFVkVSWSBUSU1FISBtYXliZSBoYWxmIGFzIG9mdGVuPyAvL1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgZmFsc2UgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG92ZXIvb3V0IGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgaWYoIWRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5T2JqZWN0LmJ1dHRvbk1vZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gZGlzcGxheU9iamVjdC5kZWZhdWx0Q3Vyc29yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgdGhpcy5ldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgc3RhcnRlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBzdGFydGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG4gICAgICAgIC8vVE9ETyBQT09MXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaFN0YXJ0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoc3RhcnQnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGVuZHMgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggZW5kaW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIC8vVE9ETyB0aGlzIHNob3VsZCBiZSBwYXNzZWQgYWxvbmcuLiBubyBzZXRcbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hFbmQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgZW5kIG9mIGEgdG91Y2ggYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoRW5kID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0YXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgbW92ZWQgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIG1vdmluZyBhY3Jvc3MgdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaE1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaGl0ID0gaGl0O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNobW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogR3JhYnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaEV2ZW50IHtFdmVudERhdGF9IFRoZSB0b3VjaCBldmVudCB3ZSBuZWVkIHRvIHBhaXIgd2l0aCBhbiBpbnRlcmFjdGlvbkRhdGEgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRUb3VjaERhdGEgPSBmdW5jdGlvbiAodG91Y2hFdmVudClcbntcbiAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnBvcCgpO1xuXG4gICAgaWYoIXRvdWNoRGF0YSlcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcbiAgICB9XG5cbiAgICB0b3VjaERhdGEuaWRlbnRpZmllciA9IHRvdWNoRXZlbnQuaWRlbnRpZmllcjtcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdG91Y2hEYXRhLmdsb2JhbCwgdG91Y2hFdmVudC5jbGllbnRYLCB0b3VjaEV2ZW50LmNsaWVudFkgKTtcblxuICAgIGlmKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC54ID0gdG91Y2hEYXRhLmdsb2JhbC54IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnkgPSB0b3VjaERhdGEuZ2xvYmFsLnkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgfVxuXG4gICAgdG91Y2hFdmVudC5nbG9iYWxYID0gdG91Y2hEYXRhLmdsb2JhbC54O1xuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWSA9IHRvdWNoRGF0YS5nbG9iYWwueTtcblxuICAgIHJldHVybiB0b3VjaERhdGE7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hEYXRhIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX0gVGhlIHRvdWNoIGRhdGEgb2JqZWN0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5Ub3VjaERhdGEgPSBmdW5jdGlvbiAoIHRvdWNoRGF0YSApXG57XG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnB1c2goIHRvdWNoRGF0YSApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgaW50ZXJhY3Rpb24gbWFuYWdlclxuICpcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMubW91c2UgPSBudWxsO1xuXG4gICAgdGhpcy5ldmVudERhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZVVwID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gbnVsbDtcblxuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaEVuZCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMuX3RlbXBQb2ludCA9IG51bGw7XG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGludGVyYWN0aW9ucyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSW50ZXJhY3Rpb25EYXRhOiAgICByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpLFxuICAgIEludGVyYWN0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9JbnRlcmFjdGlvbk1hbmFnZXInKSxcbiAgICBpbnRlcmFjdGl2ZVRhcmdldDogIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxufTtcbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgaW50ZXJhY3RpdmUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmludGVyYWN0aW9uLmludGVyYWN0aXZlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBpbnRlcmFjdGl2ZVRhcmdldCA9IHtcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGJ1dHRvbk1vZGU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmVDaGlsZHJlbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGRlZmF1bHRDdXJzb3I6ICdwb2ludGVyJyxcblxuICAgIC8vIHNvbWUgaW50ZXJuYWwgY2hlY2tzLi5cblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb3ZlcjogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90b3VjaERvd246IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyYWN0aXZlVGFyZ2V0O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuLi9leHRyYXMnKSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5cbmZ1bmN0aW9uIHBhcnNlKHJlc291cmNlLCB0ZXh0dXJlKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgaW5mbyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXTtcbiAgICB2YXIgY29tbW9uID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XG5cbiAgICBkYXRhLmZvbnQgPSBpbmZvLmdldEF0dHJpYnV0ZSgnZmFjZScpO1xuICAgIGRhdGEuc2l6ZSA9IHBhcnNlSW50KGluZm8uZ2V0QXR0cmlidXRlKCdzaXplJyksIDEwKTtcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBwYXJzZUludChjb21tb24uZ2V0QXR0cmlidXRlKCdsaW5lSGVpZ2h0JyksIDEwKTtcbiAgICBkYXRhLmNoYXJzID0ge307XG5cbiAgICAvL3BhcnNlIGxldHRlcnNcbiAgICB2YXIgbGV0dGVycyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NoYXInKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdpZCcpLCAxMCk7XG5cbiAgICAgICAgdmFyIHRleHR1cmVSZWN0ID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3gnKSwgMTApICsgdGV4dHVyZS5mcmFtZS54LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3knKSwgMTApICsgdGV4dHVyZS5mcmFtZS55LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSwgMTApXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICB4T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneG9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB5T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneW9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB4QWR2YW5jZTogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hhZHZhbmNlJyksIDEwKSxcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9LFxuICAgICAgICAgICAgdGV4dHVyZTogbmV3IGNvcmUuVGV4dHVyZSh0ZXh0dXJlLmJhc2VUZXh0dXJlLCB0ZXh0dXJlUmVjdClcblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vcGFyc2Uga2VybmluZ3NcbiAgICB2YXIga2VybmluZ3MgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXJuaW5nJyk7XG4gICAgZm9yIChpID0gMDsgaSA8IGtlcm5pbmdzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdmaXJzdCcpLCAxMCk7XG4gICAgICAgIHZhciBzZWNvbmQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ3NlY29uZCcpLCAxMCk7XG4gICAgICAgIHZhciBhbW91bnQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2Ftb3VudCcpLCAxMCk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tzZWNvbmRdLmtlcm5pbmdbZmlyc3RdID0gYW1vdW50O1xuICAgIH1cblxuICAgIHJlc291cmNlLmJpdG1hcEZvbnQgPSBkYXRhO1xuXG4gICAgLy8gSSdtIGxlYXZpbmcgdGhpcyBhcyBhIHRlbXBvcmFyeSBmaXggc28gd2UgY2FuIHRlc3QgdGhlIGJpdG1hcCBmb250cyBpbiB2M1xuICAgIC8vIGJ1dCBpdCdzIHZlcnkgbGlrZWx5IHRvIGNoYW5nZVxuICAgIGV4dHJhcy5CaXRtYXBUZXh0LmZvbnRzW2RhdGEuZm9udF0gPSBkYXRhO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhIG9yIG5vdCB4bWwgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzWG1sKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBpZiBub3QgYml0bWFwIGZvbnQgZGF0YSwgdXNpbmcgc29tZSBzaWxseSBkdWNrLXR5cGluZ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF0uZ2V0QXR0cmlidXRlKCdmYWNlJykgPT09IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4bWxVcmwgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsKTtcblxuICAgICAgICBpZiAoeG1sVXJsID09PSAnLicpIHtcbiAgICAgICAgICAgIHhtbFVybCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmFzZVVybCAmJiB4bWxVcmwpIHtcbiAgICAgICAgICAgIC8vIGlmIGJhc2V1cmwgaGFzIGEgdHJhaWxpbmcgc2xhc2ggdGhlbiBhZGQgb25lIHRvIHhtbFVybCBzbyB0aGUgcmVwbGFjZSB3b3JrcyBiZWxvd1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVVybC5jaGFyQXQodGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEpID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYmFzZVVybCBmcm9tIHhtbFVybFxuICAgICAgICAgICAgeG1sVXJsID0geG1sVXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiB4bWxVcmwgbm93LCBpdCBuZWVkcyBhIHRyYWlsaW5nIHNsYXNoLiBFbnN1cmUgdGhhdCBpdCBkb2VzIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZW1wdHkuXG4gICAgICAgIGlmICh4bWxVcmwgJiYgeG1sVXJsLmNoYXJBdCh4bWxVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4dHVyZVVybCA9IHhtbFVybCArIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKVswXS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKTtcbiAgICAgICAgaWYgKGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKSB7XG4gICAgICAgICAgICAvL3JldXNlIGV4aXN0aW5nIHRleHR1cmVcbiAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBsb2FkIHRoZSB0ZXh0dXJlIGZvciB0aGUgZm9udFxuICAgICAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCB0ZXh0dXJlVXJsLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCByZXMudGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGxvYWRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmxvYWRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTG9hZGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlcicpLFxuXG4gICAgLy8gcGFyc2Vyc1xuICAgIGJpdG1hcEZvbnRQYXJzZXI6ICAgcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXI6ICByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgdGV4dHVyZVBhcnNlcjogICAgICByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBSZXNvdXJjZTogICAgICAgICAgIHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlXG59O1xuIiwidmFyIFJlc291cmNlTG9hZGVyID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJyksXG4gICAgdGV4dHVyZVBhcnNlciA9IHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyID0gcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIGJpdG1hcEZvbnRQYXJzZXIgPSByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKTtcblxuLyoqXG4gKlxuICogVGhlIG5ldyBsb2FkZXIsIGV4dGVuZHMgUmVzb3VyY2UgTG9hZGVyIGJ5IENoYWQgRW5nbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2VuZ2xlcmNqL3Jlc291cmNlLWxvYWRlclxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbG9hZGVyID0gUElYSS5sb2FkZXI7IC8vIHBpeGkgZXhwb3NlcyBhIHByZW1hZGUgaW5zdGFuY2UgZm9yIHlvdSB0byB1c2UuXG4gKiAvL29yXG4gKiB2YXIgbG9hZGVyID0gbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIoKTsgLy8geW91IGNhbiBhbHNvIGNyZWF0ZSB5b3VyIG93biBpZiB5b3Ugd2FudFxuICpcbiAqIGxvYWRlci5hZGQoJ2J1bm55JyxcImRhdGEvYnVubnkucG5nXCIpO1xuICpcbiAqIGxvYWRlci5vbmNlKCdjb21wbGV0ZScsb25Bc3NldHNMb2FkZWQpO1xuICpcbiAqIGxvYWRlci5sb2FkKCk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuUmVzb3VyY2VMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmxvYWRlcnNcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpXG57XG4gICAgUmVzb3VyY2VMb2FkZXIuY2FsbCh0aGlzLCBiYXNlVXJsLCBjb25jdXJyZW5jeSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IExvYWRlci5fcGl4aU1pZGRsZXdhcmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy51c2UoTG9hZGVyLl9waXhpTWlkZGxld2FyZVtpXSgpKTtcbiAgICB9XG59XG5cbkxvYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuTG9hZGVyLl9waXhpTWlkZGxld2FyZSA9IFtcbiAgICAvLyBwYXJzZSBhbnkgYmxvYiBpbnRvIG1vcmUgdXNhYmxlIG9iamVjdHMgKGUuZy4gSW1hZ2UpXG4gICAgUmVzb3VyY2VMb2FkZXIubWlkZGxld2FyZS5wYXJzaW5nLmJsb2IsXG4gICAgLy8gcGFyc2UgYW55IEltYWdlIG9iamVjdHMgaW50byB0ZXh0dXJlc1xuICAgIHRleHR1cmVQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIHNwcml0ZXNoZWV0UGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBiaXRtYXBGb250UGFyc2VyXG5dO1xuXG5Mb2FkZXIuYWRkUGl4aU1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLnB1c2goZm4pO1xufTtcblxuLy8gQWRkIGN1c3RvbSBleHRlbnRpb25zXG52YXIgUmVzb3VyY2UgPSBSZXNvdXJjZUxvYWRlci5SZXNvdXJjZTtcblxuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSgnZm50JywgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpO1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSwgaXRzIG5vdCBqc29uLCBvciBpdCBpc24ndCBzcHJpdGVzaGVldCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNKc29uIHx8ICFyZXNvdXJjZS5kYXRhLmZyYW1lcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByb3V0ZSA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKSk7XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybCggcmVzb3VyY2UudXJsICk7XG5cbiAgICAgICAgLy8gbG9hZCB0aGUgaW1hZ2UgZm9yIHRoaXMgc2hlZXRcbiAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCByb3V0ZSArICcvJyArIHJlc291cmNlLmRhdGEubWV0YS5pbWFnZSwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzID0ge307XG5cbiAgICAgICAgICAgIHZhciBmcmFtZXMgPSByZXNvdXJjZS5kYXRhLmZyYW1lcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmcmFtZXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBmcmFtZXNbaV0uZnJhbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVjdClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaW0gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC5oLCByZWN0LncpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC53LCByZWN0LmgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS50cmltbWVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmltID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnggLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnkgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLncgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLmggLyByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsaXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQhXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBzaXplLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUueSAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoIC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0IC89IHJlc29sdXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXNbaV0gPSBuZXcgY29yZS5UZXh0dXJlKHJlcy50ZXh0dXJlLmJhc2VUZXh0dXJlLCBzaXplLCBzaXplLmNsb25lKCksIHRyaW0sIGZyYW1lc1tpXS5yb3RhdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbaV0gPSByZXNvdXJjZS50ZXh0dXJlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZSBpZiB0aGUgZGF0YSBpcyBhbiBJbWFnZSBvYmplY3RcbiAgICAgICAgaWYgKHJlc291cmNlLmRhdGEgJiYgcmVzb3VyY2UuaXNJbWFnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGJhc2VUZXh0dXJlID0gbmV3IGNvcmUuQmFzZVRleHR1cmUocmVzb3VyY2UuZGF0YSwgbnVsbCwgY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwocmVzb3VyY2UudXJsKSk7XG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IHJlc291cmNlLnVybDtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmUgPSBuZXcgY29yZS5UZXh0dXJlKGJhc2VUZXh0dXJlKTtcbiAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1Y250aW9uc1xuICAgICAgICAgICAgY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSBiYXNlVGV4dHVyZTtcbiAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSByZXNvdXJjZS50ZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICB0ZW1wUG9seWdvbiA9IG5ldyBjb3JlLlBvbHlnb24oKTtcblxuLyoqXG4gKiBCYXNlIG1lc2ggY2xhc3NcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRvIHVzZVxuICogQHBhcmFtIFt2ZXJ0aWNlc10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdmVydGljZXNcbiAqIEBwYXJhbSBbdXZzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB1dnNcbiAqIEBwYXJhbSBbaW5kaWNlc10ge1VpbnQxNkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBpbmRpY2VzXG4gKiBAcGFyYW0gW2RyYXdNb2RlXSB7bnVtYmVyfSB0aGUgZHJhd01vZGUsIGNhbiBiZSBhbnkgb2YgdGhlIE1lc2guRFJBV19NT0RFUyBjb25zdHNcbiAqL1xuZnVuY3Rpb24gTWVzaCh0ZXh0dXJlLCB2ZXJ0aWNlcywgdXZzLCBpbmRpY2VzLCBkcmF3TW9kZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gdXZzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEsIDAsXG4gICAgICAgIDEsIDEsXG4gICAgICAgIDAsIDFdKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEwMCwgMCxcbiAgICAgICAgMTAwLCAxMDAsXG4gICAgICAgIDAsIDEwMF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICAvLyAgVE9ETyBhdXRvIGdlbmVyYXRlIHRoaXMgYmFzZWQgb24gZHJhdyBtb2RlIVxuICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXMgfHwgbmV3IFVpbnQxNkFycmF5KFswLCAxLCAzLCAyXSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBNZXNoIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gU2V0IHRvIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVtb3ZlIGFueSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRyaWFuZ2xlcyBpbiBjYW52YXMgbW9kZSBhcmUgYXV0b21hdGljYWxseSBhbnRpYWxpYXNlZCwgdXNlIHRoaXMgdmFsdWUgdG8gZm9yY2UgdHJpYW5nbGVzIHRvIG92ZXJsYXAgYSBiaXQgd2l0aCBlYWNoIG90aGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2F5IHRoZSBNZXNoIHNob3VsZCBiZSBkcmF3biwgY2FuIGJlIGFueSBvZiB0aGUge0BsaW5rIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVN9IGNvbnN0c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuZHJhd01vZGUgPSBkcmF3TW9kZSB8fCBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSDtcblxuICAgIC8vIHJ1biB0ZXh0dXJlIHNldHRlcjtcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBtZXNoIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5NZXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2g7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2g7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc2gucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkubWVzaC5NZXNoI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5tZXNoKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLm1lc2gucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4IHwgMCwgdHJhbnNmb3JtLnR5IHwgMCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHgsIHRyYW5zZm9ybS50eSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoKGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMoY29udGV4dCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIFRyaWFuZ2xlIE1lc2ggbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2ggPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoIC8gMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkgKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgsIChpbmRleCArIDIpLCAoaW5kZXggKyA0KSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIHRyaWFuZ2xlIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDMpXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXgwID0gaW5kaWNlc1tpXSAqIDIsIGluZGV4MSA9IGluZGljZXNbaSArIDFdICogMiwgaW5kZXgyID0gaW5kaWNlc1tpICsgMl0gKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4Mik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyBvbmUgb2YgdGhlIHRyaWFuZ2xlcyB0aGF0IGZvcm0gdGhpcyBNZXNoXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdmVydGljZXMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHZlcnRpY2VzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gdXZzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB1dnMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSBpbmRleDAge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDEge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgyIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlID0gZnVuY3Rpb24gKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpXG57XG4gICAgdmFyIHRleHR1cmVTb3VyY2UgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZTtcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aDtcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXgwXSwgeDEgPSB2ZXJ0aWNlc1tpbmRleDFdLCB4MiA9IHZlcnRpY2VzW2luZGV4Ml07XG4gICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgwICsgMV0sIHkxID0gdmVydGljZXNbaW5kZXgxICsgMV0sIHkyID0gdmVydGljZXNbaW5kZXgyICsgMV07XG5cbiAgICB2YXIgdTAgPSB1dnNbaW5kZXgwXSAqIHRleHR1cmVXaWR0aCwgdTEgPSB1dnNbaW5kZXgxXSAqIHRleHR1cmVXaWR0aCwgdTIgPSB1dnNbaW5kZXgyXSAqIHRleHR1cmVXaWR0aDtcbiAgICB2YXIgdjAgPSB1dnNbaW5kZXgwICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MSA9IHV2c1tpbmRleDEgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYyID0gdXZzW2luZGV4MiArIDFdICogdGV4dHVyZUhlaWdodDtcblxuICAgIGlmICh0aGlzLmNhbnZhc1BhZGRpbmcgPiAwKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmdYID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgcGFkZGluZ1kgPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciBjZW50ZXJYID0gKHgwICsgeDEgKyB4MikgLyAzO1xuICAgICAgICB2YXIgY2VudGVyWSA9ICh5MCArIHkxICsgeTIpIC8gMztcblxuICAgICAgICB2YXIgbm9ybVggPSB4MCAtIGNlbnRlclg7XG4gICAgICAgIHZhciBub3JtWSA9IHkwIC0gY2VudGVyWTtcblxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgwID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkwID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgLy9cblxuICAgICAgICBub3JtWCA9IHgxIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MSAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgxID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkxID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgbm9ybVggPSB4MiAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTIgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MiA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MiA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cblxuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGNvbnRleHQuY2xpcCgpO1xuXG4gICAgLy8gQ29tcHV0ZSBtYXRyaXggdHJhbnNmb3JtXG4gICAgdmFyIGRlbHRhID0gICh1MCAqIHYxKSAgICAgICsgKHYwICogdTIpICAgICAgKyAodTEgKiB2MikgICAgICAtICh2MSAqIHUyKSAgICAgIC0gKHYwICogdTEpICAgICAgLSAodTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQSA9ICh4MCAqIHYxKSAgICAgICsgKHYwICogeDIpICAgICAgKyAoeDEgKiB2MikgICAgICAtICh2MSAqIHgyKSAgICAgIC0gKHYwICogeDEpICAgICAgLSAoeDAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQiA9ICh1MCAqIHgxKSAgICAgICsgKHgwICogdTIpICAgICAgKyAodTEgKiB4MikgICAgICAtICh4MSAqIHUyKSAgICAgIC0gKHgwICogdTEpICAgICAgLSAodTAgKiB4Mik7XG4gICAgdmFyIGRlbHRhQyA9ICh1MCAqIHYxICogeDIpICsgKHYwICogeDEgKiB1MikgKyAoeDAgKiB1MSAqIHYyKSAtICh4MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB4MikgLSAodTAgKiB4MSAqIHYyKTtcbiAgICB2YXIgZGVsdGFEID0gKHkwICogdjEpICAgICAgKyAodjAgKiB5MikgICAgICArICh5MSAqIHYyKSAgICAgIC0gKHYxICogeTIpICAgICAgLSAodjAgKiB5MSkgICAgICAtICh5MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFFID0gKHUwICogeTEpICAgICAgKyAoeTAgKiB1MikgICAgICArICh1MSAqIHkyKSAgICAgIC0gKHkxICogdTIpICAgICAgLSAoeTAgKiB1MSkgICAgICAtICh1MCAqIHkyKTtcbiAgICB2YXIgZGVsdGFGID0gKHUwICogdjEgKiB5MikgKyAodjAgKiB5MSAqIHUyKSArICh5MCAqIHUxICogdjIpIC0gKHkwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHkyKSAtICh1MCAqIHkxICogdjIpO1xuXG4gICAgY29udGV4dC50cmFuc2Zvcm0oZGVsdGFBIC8gZGVsdGEsIGRlbHRhRCAvIGRlbHRhLFxuICAgICAgICBkZWx0YUIgLyBkZWx0YSwgZGVsdGFFIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQyAvIGRlbHRhLCBkZWx0YUYgLyBkZWx0YSk7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlU291cmNlLCAwLCAwKTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBmbGF0IE1lc2hcbiAqXG4gKiBAcGFyYW0gTWVzaCB7UElYSS5tZXNoLk1lc2h9IFRoZSBNZXNoIHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUucmVuZGVyTWVzaEZsYXQgPSBmdW5jdGlvbiAoTWVzaClcbntcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICB2YXIgdmVydGljZXMgPSBNZXNoLnZlcnRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aC8yO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgZm9yICh2YXIgaT0xOyBpIDwgbGVuZ3RoLTI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkqMjtcblxuICAgICAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleF0sICAgeDEgPSB2ZXJ0aWNlc1tpbmRleCsyXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleCs0XTtcbiAgICAgICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgrMV0sIHkxID0gdmVydGljZXNbaW5kZXgrM10sIHkyID0gdmVydGljZXNbaW5kZXgrNV07XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVwZGF0ZUZyYW1lID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBtZXNoIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5NZXNoLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICghdGhpcy5fY3VycmVudEJvdW5kcykge1xuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1pblkgPSBJbmZpbml0eTtcblxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IG47IGkgKz0gMikge1xuICAgICAgICAgICAgdmFyIHJhd1ggPSB2ZXJ0aWNlc1tpXSwgcmF3WSA9IHZlcnRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciB4ID0gKGEgKiByYXdYKSArIChjICogcmF3WSkgKyB0eDtcbiAgICAgICAgICAgIHZhciB5ID0gKGQgKiByYXdZKSArIChiICogcmF3WCkgKyB0eTtcblxuICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcblxuICAgICAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG4gICAgICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5YID09PSAtSW5maW5pdHkgfHwgbWF4WSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIG1lc2guIFdvcmtzIG9ubHkgZm9yIFRSSUFOR0xFX01FU0hcbiAqXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4gKi9cbk1lc2gucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKSB7XG4gICAgaWYgKCF0aGlzLmdldEJvdW5kcygpLmNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgcG9pbnRzID0gdGVtcFBvbHlnb24ucG9pbnRzO1xuICAgIHZhciBpLCBsZW47XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUykge1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICAgICAgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgLy9UT0RPOiBpbmxpbmUgdGhpcy5cbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Mykge1xuICAgICAgICAgICAgdmFyIGluZDAgPSBpbmRpY2VzW2ldKjIsIGluZDEgPSBpbmRpY2VzW2krMV0qMiwgaW5kMiA9IGluZGljZXNbaSsyXSoyO1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaW5kMF07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpbmQwKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaW5kMV07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpbmQxKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaW5kMl07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpbmQyKzFdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Nikge1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaSsyXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2krM107XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpKzRdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaSs1XTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEaWZmZXJlbnQgZHJhd2luZyBidWZmZXIgbW9kZXMgc3VwcG9ydGVkXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSFxuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gKi9cbk1lc2guRFJBV19NT0RFUyA9IHtcbiAgICBUUklBTkdMRV9NRVNIOiAwLFxuICAgIFRSSUFOR0xFUzogMVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG5cbi8qKlxuICogVGhlIFBsYW5lIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIFBsYW5lID0gbmV3IFBJWEkuUGxhbmUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgUGxhbmUuXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNYIC0gVGhlIG51bWJlciBveCB4IHNlZ21lbnRzXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNZIC0gVGhlIG51bWJlciBvZiB5IHNlZ21lbnRzXG4gKlxuICovXG5mdW5jdGlvbiBQbGFuZSh0ZXh0dXJlLCBzZWdtZW50c1gsIHNlZ21lbnRzWSlcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgUGxhbmUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWdtZW50c1ggPSAgc2VnbWVudHNYIHx8IDEwO1xuICAgIHRoaXMuc2VnbWVudHNZID0gc2VnbWVudHNZIHx8IDEwO1xuXG4gICAgdGhpcy5kcmF3TW9kZSA9IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVM7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUGxhbmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKTtcblBsYW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsYW5lO1xubW9kdWxlLmV4cG9ydHMgPSBQbGFuZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblBsYW5lLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciB0b3RhbCA9IHRoaXMuc2VnbWVudHNYICogdGhpcy5zZWdtZW50c1k7XG4gICAgdmFyIHZlcnRzID0gW107XG4gICAgdmFyIGNvbG9ycyA9IFtdO1xuICAgIHZhciB1dnMgPSBbXTtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuXG4gIC8vICB0ZXh0dXJlLndpZHRoID0gODAwIHRleHR1cmUud2lkdGggfHwgODAwO1xuIC8vICAgdGV4dHVyZS5oZWlnaHQgPSA4MDAvL3RleHR1cmUuaGVpZ2h0IHx8IDgwMDtcblxuICAgIHZhciBzZWdtZW50c1hTdWIgPSB0aGlzLnNlZ21lbnRzWCAtIDE7XG4gICAgdmFyIHNlZ21lbnRzWVN1YiA9IHRoaXMuc2VnbWVudHNZIC0gMTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB2YXIgc2l6ZVggPSB0ZXh0dXJlLndpZHRoIC8gc2VnbWVudHNYU3ViO1xuICAgIHZhciBzaXplWSA9IHRleHR1cmUuaGVpZ2h0IC8gc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcblxuICAgICAgICB2YXIgeCA9IChpICUgdGhpcy5zZWdtZW50c1gpO1xuICAgICAgICB2YXIgeSA9ICggKGkgLyB0aGlzLnNlZ21lbnRzWCApIHwgMCApO1xuXG5cbiAgICAgICAgdmVydHMucHVzaCgoeCAqIHNpemVYKSxcbiAgICAgICAgICAgICAgICAgICAoeSAqIHNpemVZKSk7XG5cbiAgICAgICAgLy8gdGhpcyB3b3JrcyBmb3IgcmVjdGFuZ3VsYXIgdGV4dHVyZXMuIFxuICAgICAgICB1dnMucHVzaCh0ZXh0dXJlLl91dnMueDAgKyAodGV4dHVyZS5fdXZzLngxIC0gdGV4dHVyZS5fdXZzLngwKSAqICh4IC8gKHRoaXMuc2VnbWVudHNYLTEpKSwgdGV4dHVyZS5fdXZzLnkwICsgKHRleHR1cmUuX3V2cy55My10ZXh0dXJlLl91dnMueTApICogKHkvICh0aGlzLnNlZ21lbnRzWS0xKSkpO1xuICAgICAgfVxuXG4gICAgLy8gIGNvbnNcblxuICAgIHZhciB0b3RhbFN1YiA9IHNlZ21lbnRzWFN1YiAqIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFN1YjsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHhwb3MgPSBpICUgc2VnbWVudHNYU3ViO1xuICAgICAgICB2YXIgeXBvcyA9IChpIC8gc2VnbWVudHNYU3ViICkgfCAwO1xuXG5cbiAgICAgICAgdmFyICB2YWx1ZSA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTIgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuICAgICAgICB2YXIgIHZhbHVlMyA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWU0ID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMyk7XG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZTIsIHZhbHVlNCwgdmFsdWUzKTtcbiAgICB9XG5cblxuICAgIC8vY29uc29sZS5sb2coaW5kaWNlcylcbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0cyk7XG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHV2cyk7XG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvbG9ycyk7XG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBsYW5lLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUGxhbmUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSByb3BlIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIHJvcGUgPSBuZXcgUElYSS5Sb3BlKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIHJvcGUuXG4gKiBAcGFyYW0ge1BJWEkuUG9pbnRbXX0gcG9pbnRzIC0gQW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuUG9pbnR9IG9iamVjdHMgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAqXG4gKi9cbmZ1bmN0aW9uIFJvcGUodGV4dHVyZSwgcG9pbnRzKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfSBBbiBhcnJheSBvZiBwb2ludHMgdGhhdCBkZXRlcm1pbmUgdGhlIHJvcGVcbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBvZiB2ZXJ0aWNlcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IFRoZSBXZWJHTCBVdnMgb2YgdGhlIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBjb21wb25lbnRzXG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSByb3BlIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICAgdGhpcy5yZWZyZXNoKCk7XG59XG5cblxuLy8gY29uc3RydWN0b3JcblJvcGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNZXNoLnByb3RvdHlwZSk7XG5Sb3BlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvcGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvcGU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5Sb3BlLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICAvLyBpZiB0b28gbGl0dGxlIHBvaW50cywgb3IgdGV4dHVyZSBoYXNuJ3QgZ290IFVWcyBzZXQgeWV0IGp1c3QgbW92ZSBvbi5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEgfHwgIXRoaXMuX3RleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cbiAgICB2YXIgdGV4dHVyZVV2cyA9IHRoaXMuX3RleHR1cmUuX3V2cztcbiAgICB2YXIgb2Zmc2V0ID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MCk7XG4gICAgdmFyIGZhY3RvciA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDIgLSB0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkyIC0gdGV4dHVyZVV2cy55MCk7XG5cbiAgICB1dnNbMF0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzFdID0gMCArIG9mZnNldC55O1xuICAgIHV2c1syXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgIGNvbG9yc1swXSA9IDE7XG4gICAgY29sb3JzWzFdID0gMTtcblxuICAgIGluZGljZXNbMF0gPSAwO1xuICAgIGluZGljZXNbMV0gPSAxO1xuXG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCBhbW91bnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcbiAgICAgICAgLy8gdGltZSB0byBkbyBzb21lIHNtYXJ0IGRyYXdpbmchXG4gICAgICAgIGFtb3VudCA9IGkgLyAodG90YWwtMSk7XG5cbiAgICAgICAgdXZzW2luZGV4XSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCsxXSA9IDAgKyBvZmZzZXQueTtcblxuICAgICAgICB1dnNbaW5kZXgrMl0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBjb2xvcnNbaW5kZXhdID0gMTtcbiAgICAgICAgY29sb3JzW2luZGV4KzFdID0gMTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGluZGV4O1xuICAgICAgICBpbmRpY2VzW2luZGV4ICsgMV0gPSBpbmRleCArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFJvcGUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9pbnQgPSBwb2ludHNbMF07XG4gICAgdmFyIG5leHRQb2ludDtcbiAgICB2YXIgcGVycFggPSAwO1xuICAgIHZhciBwZXJwWSA9IDA7XG5cbiAgICAvLyB0aGlzLmNvdW50IC09IDAuMjtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCByYXRpbywgcGVycExlbmd0aCwgbnVtO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG5cbiAgICAgICAgaWYgKGkgPCBwb2ludHMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50c1tpKzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwWSA9IC0obmV4dFBvaW50LnggLSBsYXN0UG9pbnQueCk7XG4gICAgICAgIHBlcnBYID0gbmV4dFBvaW50LnkgLSBsYXN0UG9pbnQueTtcblxuICAgICAgICByYXRpbyA9ICgxIC0gKGkgLyAodG90YWwtMSkpKSAqIDEwO1xuXG4gICAgICAgIGlmIChyYXRpbyA+IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhdGlvID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBMZW5ndGggPSBNYXRoLnNxcnQocGVycFggKiBwZXJwWCArIHBlcnBZICogcGVycFkpO1xuICAgICAgICBudW0gPSB0aGlzLl90ZXh0dXJlLmhlaWdodCAvIDI7IC8vKDIwICsgTWF0aC5hYnMoTWF0aC5zaW4oKGkgKyB0aGlzLmNvdW50KSAqIDAuMykgKiA1MCkgKSogcmF0aW87XG4gICAgICAgIHBlcnBYIC89IHBlcnBMZW5ndGg7XG4gICAgICAgIHBlcnBZIC89IHBlcnBMZW5ndGg7XG5cbiAgICAgICAgcGVycFggKj0gbnVtO1xuICAgICAgICBwZXJwWSAqPSBudW07XG5cbiAgICAgICAgdmVydGljZXNbaW5kZXhdID0gcG9pbnQueCArIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsxXSA9IHBvaW50LnkgKyBwZXJwWTtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMl0gPSBwb2ludC54IC0gcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzNdID0gcG9pbnQueSAtIHBlcnBZO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IHBvaW50O1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5tZXNoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1lc2g6ICAgICAgICAgICByZXF1aXJlKCcuL01lc2gnKSxcbiAgICBQbGFuZTogICAgICAgICAgIHJlcXVpcmUoJy4vUGxhbmUnKSxcbiAgICBSb3BlOiAgICAgICAgICAgcmVxdWlyZSgnLi9Sb3BlJyksXG4gICAgTWVzaFJlbmRlcmVyOiAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFJlbmRlcmVyJyksXG4gICAgTWVzaFNoYWRlcjogICAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFNoYWRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgTWVzaCA9IHJlcXVpcmUoJy4uL01lc2gnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBNZXNoUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL01lc2hSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDE1MDAwKTtcblxuICAgIC8vVE9ETyB0aGlzIGNvdWxkIGJlIGEgc2luZ2xlIGJ1ZmZlciBzaGFyZWQgYW1vbmdzdCBhbGwgcmVuZGVyZXJzIGFzIHdlIHJldXNlIHRoaXMgc2V0IHVwIGluIG1vc3QgcmVuZGVyZXJzXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCAxNTAwMDsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59XG5cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hSZW5kZXJlcjtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoJywgTWVzaFJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIGlmKCFtZXNoLl92ZXJ0ZXhCdWZmZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9pbml0V2ViR0wobWVzaCk7XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcixcbiAgICAgICAgZ2wgPSByZW5kZXJlci5nbCxcbiAgICAgICAgdGV4dHVyZSA9IG1lc2guX3RleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIHNoYWRlciA9IG1lc2guc2hhZGVyOy8vIHx8IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuXG4gICAgdmFyIGRyYXdNb2RlID0gbWVzaC5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0ggPyBnbC5UUklBTkdMRV9TVFJJUCA6IGdsLlRSSUFOR0xFUztcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKG1lc2guYmxlbmRNb2RlKTtcblxuICAgIC8vVE9ETyBjYWNoZSBjdXN0b20gc3RhdGUuLlxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHNoYWRlci5zaGFkZXJzW2dsLmlkXSB8fCBzaGFkZXIuZ2V0U2hhZGVyKHJlbmRlcmVyKTsvLyA6IHNoYWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXgudmFsdWUgPSBtZXNoLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXgudmFsdWUgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSBtZXNoLndvcmxkQWxwaGE7XG5cbiAgICBzaGFkZXIuc3luY1VuaWZvcm1zKCk7XG5cbiAgICBpZiAoIW1lc2guZGlydHkpXG4gICAge1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgbWVzaC52ZXJ0aWNlcyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG1lc2guaW5kaWNlcyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgbWVzaC5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb250IG5lZWQgdG8gdXBsb2FkIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgfVxuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGRyYXdNb2RlLCBtZXNoLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG5cbn07XG5cbi8qKlxuICogUHJlcGFyZXMgYWxsIHRoZSBidWZmZXJzIHRvIHJlbmRlciB0aGlzIG1lc2hcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuX2luaXRXZWJHTCA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIC8vIGJ1aWxkIHRoZSBzdHJpcCFcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgbWVzaC5fdmVydGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5faW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl91dkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG5cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICBpZihtZXNoLmNvbG9ycyl7XG4gICAgICAgIG1lc2guX2NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl9jb2xvckJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLmNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbn07XG5cblxuLyoqXG4gKiBFbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IG1lc2ggcmVuZGVyZXIuXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBcblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBNZXNoIHJlbmRlcmVyXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgV2ViR0wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgY29yZS5TaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogYWxwaGEgOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVZlcnRleFBvc2l0aW9uOjAsXG4gICAgICAgICAgICBhVGV4dHVyZUNvb3JkOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cbk1lc2hTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNoYWRlci5wcm90b3R5cGUpO1xuTWVzaFNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoU2hhZGVyO1xuXG5jb3JlLlNoYWRlck1hbmFnZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2hTaGFkZXInLCBNZXNoU2hhZGVyKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3NpZ25cblxuaWYgKCFNYXRoLnNpZ24pXG57XG4gICAgTWF0aC5zaWduID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCA9ICt4O1xuICAgICAgICBpZiAoeCA9PT0gMCB8fCBpc05hTih4KSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPiAwID8gMSA6IC0xO1xuICAgIH07XG59XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9vYmplY3QtYXNzaWduXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5cbmlmICghT2JqZWN0LmFzc2lnbilcbntcbiAgICBPYmplY3QuYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xufVxuIiwicmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL3JlcXVlc3RBbmltYXRpb25GcmFtZScpO1xucmVxdWlyZSgnLi9NYXRoLnNpZ24nKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTU3OTY3MVxuLy8gaHR0cDovL3VwZGF0ZXMuaHRtbDVyb2Nrcy5jb20vMjAxMi8wNS9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUtQVBJLW5vdy13aXRoLXN1Yi1taWxsaXNlY29uZC1wcmVjaXNpb25cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RpbWhhbGwvNDA3ODYxNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0ZpbmFuY2lhbC1UaW1lcy9wb2x5ZmlsbC1zZXJ2aWNlL3RyZWUvbWFzdGVyL3BvbHlmaWxscy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcblxuLy8gRXhwZWN0ZWQgdG8gYmUgdXNlZCB3aXRoIEJyb3dzZXJmaXlcbi8vIEJyb3dzZXJpZnkgYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZSB1c2Ugb2YgYGdsb2JhbGAgYW5kIHBhc3NlcyB0aGVcbi8vIGNvcnJlY3QgcmVmZXJlbmNlIG9mIGBnbG9iYWxgLCBgc2VsZmAsIGFuZCBmaW5hbGx5IGB3aW5kb3dgXG5cbi8vIERhdGUubm93XG5pZiAoIShEYXRlLm5vdyAmJiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lKSkge1xuICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcbn1cblxuLy8gcGVyZm9ybWFuY2Uubm93XG5pZiAoIShnbG9iYWwucGVyZm9ybWFuY2UgJiYgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdykpIHtcbiAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIWdsb2JhbC5wZXJmb3JtYW5jZSkge1xuICAgICAgICBnbG9iYWwucGVyZm9ybWFuY2UgPSB7fTtcbiAgICB9XG4gICAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgfTtcbn1cblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xudmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xuXG5mb3IodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8XG4gICAgICAgIGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xufVxuXG5pZiAoIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCksXG4gICAgICAgICAgICBkZWxheSA9IDE2ICsgbGFzdFRpbWUgLSBjdXJyZW50VGltZTtcblxuICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgIH07XG59XG5cbmlmICghZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xufVxuIl19 //# sourceMappingURL=pixi.js.map diff --git a/bin/pixi.js.map b/bin/pixi.js.map index 1d72f43..3256814 100644 --- a/bin/pixi.js.map +++ b/bin/pixi.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi.js","sourceRoot":"./","sourcesContent":[]} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi.js","sourceRoot":"./","sourcesContent":[]} \ No newline at end of file diff --git a/bin/pixi.min.js b/bin/pixi.min.js index db31e4a..ee1b45b 100644 --- a/bin/pixi.min.js +++ b/bin/pixi.min.js @@ -1,11 +1,11 @@ !function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&this.texture.uploadData(null,t,e),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=i.fromData(t,null,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a.unbind(),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a.unbind(),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t||null)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){return this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate(),this},i.prototype.unbind=function(){return this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null),this},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=X(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function P(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function D(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},X=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},Y="function"==typeof setImmediate&&setImmediate,z=Y?function(t){Y(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=Y?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=X(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return P(t,1,e)},N.log=D("log"),N.dir=D("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return P.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return D.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",P=/^xn--/,D=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r); g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v,p=""),d=decodeURIComponent(c),f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,P=M.length;P>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var D=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(D.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=D.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var X=i.indexOf("#");-1!==X&&(this.hash=i.substr(X),i=i.slice(0,X));var Y=i.indexOf("?");if(-1!==Y?(this.search=i.substr(Y),this.query=i.substr(Y+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,Y)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","gl-matrix":"git+https://github.com/toji/gl-matrix.git","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirtyTransform=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":56,"../textures/RenderTexture":100,"../utils":107,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.transform=new a,this.position=this.transform.position,this.scale=this.transform.scale,this.pivot=this.transform.pivot,this.skew=this.transform.skew,this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),t("./Transform")),h=new n.Matrix,u={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i;var l=function(t){this.doc=t,this.x=0,this.y=0};Object.defineProperties(l.prototype,{x:{get:function(){return this.doc.position.x},set:function(t){this.doc.position.x=t,this.doc.dirtyTransform=!0}},y:{get:function(){return this.doc.posiiton.y},set:function(t){this.doc.position.y=t,this.doc.dirtyTransform=!0}}}),Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return h.tx=-i.x,h.ty=-i.y,n.render(this,h),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":56,"../textures/RenderTexture":100,"./Transform":41,eventemitter3:25}],41:[function(t,e,r){function i(){this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.position=new n.Point(0),this.scale=new n.Point(1,1),this.pivot=new n.Point(0),this.skew=new n.Point(0),this.rotation=0,this.dirty=!0}var n=t("../math");i.prototype.constructor=i,i.prototype.updateTransform=function(t){var e=t.worldTransform,r=this.worldTransform,i=this.localTransform;return i.a=this._cr*this.scale.x,i.b=this._sr*this.scale.x,i.c=-this._sr*this.scale.y,i.d=this._cr*this.scale.y,i.tx=this.position.x-(this.pivot.x*i.a+this.pivot.y*i.c),i.ty=this.position.y-(this.pivot.x*i.b+this.pivot.y*i.d),r.a=i.a*e.a+i.b*e.c,r.b=i.a*e.b+i.b*e.d,r.c=i.c*e.a+i.d*e.c,r.d=i.c*e.b+i.d*e.d,r.tx=i.tx*e.a+i.ty*e.c+e.tx,r.ty=i.tx*e.b+i.ty*e.d+e.ty,this.dirty=!1,!0},e.exports=i},{"../math":56}],42:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils":107,"./WebGLGraphicsData":45,"./shaders/PrimitiveShader":46,"./utils/buildCircle":47,"./utils/buildComplexPoly":48,"./utils/buildLine":49,"./utils/buildPoly":50,"./utils/buildRectangle":51,"./utils/buildRoundedRectangle":52,earcut:24}],45:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],46:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],47:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":107,"./buildLine":49}],48:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":107,"./buildLine":49}],49:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":56,"../../../utils":107}],50:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":107}],51:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":107,"./buildLine":49}],52:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":107,"./buildLine":49}],53:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),BaseRenderTexture:t("./textures/BaseRenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":42,"./graphics/GraphicsData":43,"./graphics/webgl/GraphicsRenderer":44,"./math":56,"./particles/ParticleContainer":62,"./particles/webgl/ParticleRenderer":64,"./renderers/canvas/CanvasRenderer":67,"./renderers/canvas/utils/CanvasBuffer":68,"./renderers/canvas/utils/CanvasGraphics":69,"./renderers/webgl/WebGLRenderer":73,"./renderers/webgl/filters/AbstractFilter":74,"./renderers/webgl/filters/FXAAFilter":75,"./renderers/webgl/filters/SpriteMaskFilter":76,"./renderers/webgl/managers/ShaderManager":80,"./renderers/webgl/managers/WebGLManager":82,"./renderers/webgl/shaders/Shader":85,"./renderers/webgl/utils/ObjectRenderer":88,"./renderers/webgl/utils/RenderTarget":90,"./sprites/Sprite":94,"./sprites/webgl/SpriteRenderer":95,"./text/Text":97,"./textures/BaseRenderTexture":98,"./textures/BaseTexture":99,"./textures/RenderTexture":100,"./textures/Texture":101,"./textures/TextureUvs":102,"./textures/VideoBaseTexture":103,"./ticker":105,"./utils":107,"pixi-gl-core":1}],54:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":55}],55:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],56:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":54,"./Point":55,"./shapes/Circle":57,"./shapes/Ellipse":58,"./shapes/Polygon":59,"./shapes/Rectangle":60,"./shapes/RoundedRectangle":61}],57:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":60}],58:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":60}],59:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":55}],60:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],62:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"./ParticleBuffer":63,"./ParticleShader":65}],65:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{ -uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":86}],66:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,transform:{worldTransform:new o.Matrix},worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":56,"../utils":107,eventemitter3:25}],67:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":56,"../../utils":107,"../SystemRenderer":66,"./utils/CanvasMaskManager":70}],68:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],69:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],70:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":69}],71:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":86}],75:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\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\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\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)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":74}],76:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":56,"./AbstractFilter":74}],77:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":82}],78:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":107}],86:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":85}],87:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],88:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":82}],89:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],90:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=(t("pixi-gl-core").GLTexture,t("pixi-gl-core").GLFramebuffer),s=t("./StencilMaskStack"),a=function(t,e,r,a,h,u){this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=h||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.defaultFrame=new PIXI.Rectangle,this.destinationFrame=null,this.sourceFrame=null,this.stencilBuffer=null,this.stencilMaskStack=new s,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=a||n.SCALE_MODES.DEFAULT,this.root=u,this.frameBuffer=o.createRGBA(t,100,100),this.root?this.frameBuffer.framebuffer=null:this.texture=this.frameBuffer.texture,this.resize(e,r)};a.prototype.constructor=a,e.exports=a,a.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},a.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},a.prototype.activate=function(t,e){var r=this.gl;this.frameBuffer.bind(),this.destinationFrame=t||this.destinationFrame||this.defaultFrame,this.sourceFrame=e||this.sourceFrame||t,this.calculateProjection(this.destinationFrame,this.sourceFrame),this.transform&&this.projectionMatrix.append(this.transform),this.destinationFrame!==this.sourceFrame?(r.enable(r.SCISSOR_TEST),r.scissor(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)):r.disable(r.SCISSOR_TEST),r.viewport(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)},a.prototype.calculateProjection=function(t,e){var r=this.projectionMatrix;e=e||t,r.identity(),this.root?(r.a=1/t.width*2,r.d=-1/t.height*2,r.tx=-1-e.x*r.a,r.ty=1-e.y*r.d):(r.a=1/t.width*2,r.d=1/t.height*2,r.tx=-1-e.x*r.a,r.ty=-1-e.y*r.d)},a.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.defaultFrame.width=t,this.defaultFrame.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},a.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":56,"../../../utils":107,"./StencilMaskStack":91,"pixi-gl-core":1}],91:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],92:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],93:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],94:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.transform.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0); -}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],97:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=t,this.height=e,this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(t){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear(!1,t))},i.prototype.renderWebGL=function(t,e,r,i,n){if(this.valid){if(n=void 0!==n?n:!0,this.textureBuffer.transform=r,this.textureBuffer.activate(),e.worldAlpha=1,n){e.worldTransform.identity(),e.currentBounds=null;var o,s,a=e.children;for(o=0,s=a.length;s>o;++o)a[o].updateTransform()}p.width=t.height,p.height=t.width;var h=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.textureBuffer.activate(t,p),console.log(e),this.renderer.renderDisplayObject(e,this.textureBuffer,i),this.renderer.filterManager=h}},i.prototype.renderCanvas=function(t,e,r,i,n){if(this.valid){n=!!n;var o=c;o.identity(),r&&o.append(r),o.tx+=t.x,o.ty+=t.y;var s=e.worldTransform;e.worldTransform=o,e.worldAlpha=1;var a,h,u=e.children;for(a=0,h=u.length;h>a;++a)u[a].updateTransform();i&&this.textureBuffer.clear();var l=this.textureBuffer.context,p=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(e,l),this.renderer.resolution=p,e.worldTransform===o&&(e.worldTransform=s)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(t){var e=new Image;return e.src=this.getBase64(t),e},i.prototype.getBase64=function(t){return this.getCanvas(t).toDataURL()},i.prototype.getCanvas=function(t){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution,i=this.renderer.gl,n=new Uint8Array(4*e*r);i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null);var o=new h(e,r),s=o.context.getImageData(0,0,e,r);return s.data.set(n),o.context.putImageData(s,0,0),o.canvas}if(t||(t=p,t.width=this.textureBuffer.canvas.width,t.height=this.textureBuffer.canvas.height),t.width===this.textureBuffer.canvas.width&&t.height===this.textureBuffer.canvas.height)return this.textureBuffer.canvas;var a=this.resolution,o=new h(t.width*a,t.height*a),s=this.textureBuffer.context.getImageData(t.x*a,t.y*a,t.width*a,t.height*a);return o.context.putImageData(s,0,0),o.canvas},i.prototype.getPixels=function(t){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var i=this.renderer.gl,n=new Uint8Array(4*e*r);return i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null),n}return this.textureBuffer.canvas.getContext("2d").getImageData(t.x*this.resolution,t.y*this.resolution,e,r).data},i.prototype.getPixel=function(t,e,r){return p.x=e,p.y=r,p.width=1/this.resolution,p.height=1/this.resolution,t&&(p.x+=t.x,p.y+=t.y),this.getPixels(p)}},{"../const":38,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/webgl/managers/FilterManager":78,"../renderers/webgl/utils/RenderTarget":90,"./BaseTexture":99,"./Texture":101}],99:[function(t,e,r){function i(t,e,r){s.call(this),this.uid=n.uid(),this.resolution=r||1,this.width=100,this.height=100,this.realWidth=100,this.realHeight=100,this.scaleMode=e||o.SCALE_MODES.DEFAULT,this.hasLoaded=!1,this.isLoading=!1,this.source=null,this.premultipliedAlpha=!0,this.imageUrl=null,this.isPowerOfTwo=!1,this.mipmap=!1,this._glTextures={},this._active=!1,this._id=0,t&&this.loadSource(t)}var n=t("../utils"),o=t("../const"),s=t("eventemitter3");i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.update=function(){this.realWidth=this.source.naturalWidth||this.source.width,this.realHeight=this.source.naturalHeight||this.source.height,this.width=this.realWidth/this.resolution,this.height=this.realHeight/this.resolution,this.isPowerOfTwo=n.isPowerOfTwo(this.realWidth,this.realHeight),this.emit("update",this)},i.prototype.loadSource=function(t){var e=this.isLoading;if(this.hasLoaded=!1,this.isLoading=!1,e&&this.source&&(this.source.onload=null,this.source.onerror=null),this.source=t,(this.source.complete||this.source.getContext)&&this.source.width&&this.source.height)this._sourceLoaded();else if(!t.getContext){this.isLoading=!0;var r=this;t.onload=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r._sourceLoaded(),r.emit("loaded",r))},t.onerror=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r.emit("error",r))},t.complete&&t.src&&(this.isLoading=!1,t.onload=null,t.onerror=null,t.width&&t.height?(this._sourceLoaded(),e&&this.emit("loaded",this)):e&&this.emit("error",this))}},i.prototype._sourceLoaded=function(){this.hasLoaded=!0,this.update()},i.prototype.destroy=function(){this.imageUrl?(delete n.BaseTextureCache[this.imageUrl],delete n.TextureCache[this.imageUrl],this.imageUrl=null,navigator.isCocoonJS||(this.source.src="")):this.source&&this.source._pixiId&&delete n.BaseTextureCache[this.source._pixiId],this.source=null,this.dispose()},i.prototype.dispose=function(){this.emit("dispose",this)},i.prototype.updateSourceImage=function(t){this.source.src=t,this.loadSource(this.source)},i.fromImage=function(t,e,r){var o=n.BaseTextureCache[t];if(void 0===e&&0!==t.indexOf("data:")&&(e=!0),!o){var s=new Image;e&&(s.crossOrigin=""),o=new i(s,r),o.imageUrl=t,s.src=t,n.BaseTextureCache[t]=o,o.resolution=n.getResolutionOfUrl(t)}return o},i.fromCanvas=function(t,e){t._pixiId||(t._pixiId="canvas_"+n.uid());var r=n.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),n.BaseTextureCache[t._pixiId]=r),r}},{"../const":38,"../utils":107,eventemitter3:25}],100:[function(t,e,r){function i(t,e){if(!renderer)throw new Error("Unable to create RenderTexture, you must pass a renderer into the constructor.");o.call(this,t,e),this.valid=!0,this._updateUvs()}var n=t("./BaseRenderTexture"),o=t("./Texture"),s=t("../math");t("../const"),new s.Matrix;i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.resize=function(t,e,r){this.valid=t>0&&e>0,this._frame.width=this.crop.width=t,this._frame.height=this.crop.height=e,r&&this.baseTexture.resize(t,e),this._updateUvs()},i.prototype.clear=function(){this.valid&&this.baseTexture.clear(this.frame)},i.prototype.render=function(t,e,r,i){this.valid&&this.baseTexture.render(this.frame,t,e,r,i)},i.prototype.getImage=function(){return this.baseTexture.getImage(this.frame)},i.prototype.getBase64=function(){return this.getBase64.getImage(this.frame)},i.prototype.getCanvas=function(){return this.baseTexture.getCanvas(this.frame)},i.prototype.getPixels=function(){return this.baseTexture.getPixels(this.frame)},i.prototype.getPixel=function(t,e){return this.baseTexture.getPixel(this.frame,t,e)},i.create=function(t,e,r,o,s){return new i(new n(t,e,r,o,s))}},{"../const":38,"../math":56,"./BaseRenderTexture":98,"./Texture":101}],101:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":56,"../utils":107,"./BaseTexture":99,"./TextureUvs":102,"./VideoBaseTexture":103,eventemitter3:25}],102:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],103:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],105:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":104}],106:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],107:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":108,async:16,eventemitter3:25}],108:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],109:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":53, -"./extras":116,"./filters":133,"./mesh":158}],110:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":53}],118:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":53,"../blur/BlurXFilter":121,"../blur/BlurYFilter":122}],119:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){ -t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":53}],125:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":53}],126:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":53}],127:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":53}],128:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":53}],129:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":53}],130:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":53}],140:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":53}],141:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":53,"./TiltShiftXFilter":142,"./TiltShiftYFilter":143}],142:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":140}],143:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":140}],144:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":53}],145:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":53,"./deprecation":109,"./extras":116,"./filters":133,"./interaction":148,"./loaders":151,"./mesh":158,"./polyfill":163}],146:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":53}],147:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){ -var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":53,"./InteractionData":146,"./interactiveTarget":149}],148:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":146,"./InteractionManager":147,"./interactiveTarget":149}],149:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],150:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":53}],156:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":155}],157:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":53,"./Mesh":155}],158:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":155,"./Plane":156,"./Rope":157,"./webgl/MeshRenderer":159,"./webgl/MeshShader":160}],159:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":53,"../Mesh":155}],160:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":53}],161:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],162:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],163:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":161,"./Object.assign":162,"./requestAnimationFrame":164}],164:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[145])(145)}); +i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.complete=function(){this.data&&this.data.removeEventListener&&(this.data.removeEventListener("error",this._boundOnError),this.data.removeEventListener("load",this._boundComplete),this.data.removeEventListener("progress",this._boundOnProgress),this.data.removeEventListener("canplaythrough",this._boundComplete)),this.xhr&&(this.xhr.removeEventListener?(this.xhr.removeEventListener("error",this._boundXhrOnError),this.xhr.removeEventListener("abort",this._boundXhrOnAbort),this.xhr.removeEventListener("progress",this._boundOnProgress),this.xhr.removeEventListener("load",this._boundXhrOnLoad)):(this.xhr.onerror=null,this.xhr.ontimeout=null,this.xhr.onprogress=null,this.xhr.onload=null)),this.emit("complete",this)},i.prototype.load=function(t){switch(this.emit("start",this),t&&this.once("complete",t),(this.crossOrigin===!1||"string"!=typeof this.crossOrigin)&&(this.crossOrigin=this._determineCrossOrigin(this.url)),this.loadType){case i.LOAD_TYPE.IMAGE:this._loadImage();break;case i.LOAD_TYPE.AUDIO:this._loadElement("audio");break;case i.LOAD_TYPE.VIDEO:this._loadElement("video");break;case i.LOAD_TYPE.XHR:default:h&&this.crossOrigin?this._loadXdr():this._loadXhr()}},i.prototype._loadImage=function(){this.data=new Image,this.crossOrigin&&(this.data.crossOrigin=this.crossOrigin),this.data.src=this.url,this.isImage=!0,this.data.addEventListener("error",this._boundOnError,!1),this.data.addEventListener("load",this._boundComplete,!1),this.data.addEventListener("progress",this._boundOnProgress,!1)},i.prototype._loadElement=function(t){if("audio"===t&&"undefined"!=typeof Audio?this.data=new Audio:this.data=document.createElement(t),null===this.data)return this.error=new Error("Unsupported element "+t),void this.complete();if(navigator.isCocoonJS)this.data.src=Array.isArray(this.url)?this.url[0]:this.url;else if(Array.isArray(this.url))for(var e=0;e0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","gl-matrix":"git+https://github.com/toji/gl-matrix.git","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.transform.dirty=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":57,"../textures/RenderTexture":101,"../utils":108,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.transform=new a,this.position=this.transform.position,this.scale=this.transform.scale,this.pivot=this.transform.pivot,this.skew=this.transform.skew,this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=this.transform.worldTransform,this.localTransform=this.transform.localTransform,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),t("./TransformStatic")),h=new n.Matrix,u={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return h.tx=-i.x,h.ty=-i.y,n.render(this,h),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":57,"../textures/RenderTexture":101,"./TransformStatic":42,eventemitter3:25}],41:[function(t,e,r){function i(t,e,r){this._x=e||0,this._y=r||0,this.transform=t}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this._x},set:function(t){this._x=t,this.transform.dirty=!0}},y:{get:function(){return this._y},set:function(t){this._y=t,this.transform.dirty=!0}}}),i.prototype.set=function(t,e){this._x=t||0,this._y=e||(0!==e?this._x:0),this.transform.dirty=!0}},{}],42:[function(t,e,r){function i(){this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.position=new o(this,0),this.scale=new o(this,1,1),this.pivot=new o(this,0,0),this.skew=new o(this,0,0),this.rotation=0,this._sr=Math.sin(0),this._cr=Math.cos(0),this.dirty=!0}var n=t("../math"),o=t("./ObservablePoint");i.prototype.constructor=i,i.prototype.updateTransform=function(t){var e=t.worldTransform,r=this.worldTransform,i=this.localTransform;console.log("DIRTY"),this.dirty&&(i.a=this._cr*this.scale._x,i.b=this._sr*this.scale._x,i.c=-this._sr*this.scale._y,i.d=this._cr*this.scale._y,i.tx=this.position._x-(this.pivot._x*i.a+this.pivot._y*i.c),i.ty=this.position._y-(this.pivot._x*i.b+this.pivot._y*i.d)),(this.dirty||parent.dirty)&&(r.a=i.a*e.a+i.b*e.c,r.b=i.a*e.b+i.b*e.d,r.c=i.c*e.a+i.d*e.c,r.d=i.c*e.b+i.d*e.d,r.tx=i.tx*e.a+i.ty*e.c+e.tx,r.ty=i.tx*e.b+i.ty*e.d+e.ty)},e.exports=i},{"../math":57,"./ObservablePoint":41}],43:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils":108,"./WebGLGraphicsData":46,"./shaders/PrimitiveShader":47,"./utils/buildCircle":48,"./utils/buildComplexPoly":49,"./utils/buildLine":50,"./utils/buildPoly":51,"./utils/buildRectangle":52,"./utils/buildRoundedRectangle":53,earcut:24}],46:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],47:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],48:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":108,"./buildLine":50}],49:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":108,"./buildLine":50}],50:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":57,"../../../utils":108}],51:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":108}],52:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":108,"./buildLine":50}],53:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":108,"./buildLine":50}],54:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),BaseRenderTexture:t("./textures/BaseRenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":43,"./graphics/GraphicsData":44,"./graphics/webgl/GraphicsRenderer":45,"./math":57,"./particles/ParticleContainer":63,"./particles/webgl/ParticleRenderer":65,"./renderers/canvas/CanvasRenderer":68,"./renderers/canvas/utils/CanvasBuffer":69,"./renderers/canvas/utils/CanvasGraphics":70,"./renderers/webgl/WebGLRenderer":74,"./renderers/webgl/filters/AbstractFilter":75,"./renderers/webgl/filters/FXAAFilter":76,"./renderers/webgl/filters/SpriteMaskFilter":77,"./renderers/webgl/managers/ShaderManager":81,"./renderers/webgl/managers/WebGLManager":83,"./renderers/webgl/shaders/Shader":86,"./renderers/webgl/utils/ObjectRenderer":89,"./renderers/webgl/utils/RenderTarget":91,"./sprites/Sprite":95,"./sprites/webgl/SpriteRenderer":96,"./text/Text":98,"./textures/BaseRenderTexture":99,"./textures/BaseTexture":100,"./textures/RenderTexture":101,"./textures/Texture":102,"./textures/TextureUvs":103,"./textures/VideoBaseTexture":104,"./ticker":106,"./utils":108,"pixi-gl-core":1}],55:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":56}],56:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],57:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":55,"./Point":56,"./shapes/Circle":58,"./shapes/Ellipse":59,"./shapes/Polygon":60,"./shapes/Rectangle":61,"./shapes/RoundedRectangle":62}],58:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":61}],59:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":61}],60:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":56}],61:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],63:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"./ParticleBuffer":64,"./ParticleShader":66}],66:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{ +uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":87}],67:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,transform:{worldTransform:new o.Matrix},worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":57,"../utils":108,eventemitter3:25}],68:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":57,"../../utils":108,"../SystemRenderer":67,"./utils/CanvasMaskManager":71}],69:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],70:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],71:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":70}],72:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":87}],76:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\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\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\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)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":75}],77:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":57,"./AbstractFilter":75}],78:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":83}],79:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":108}],87:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":86}],88:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],89:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":83}],90:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],91:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=(t("pixi-gl-core").GLTexture,t("pixi-gl-core").GLFramebuffer),s=t("./StencilMaskStack"),a=function(t,e,r,a,h,u){this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=h||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.defaultFrame=new PIXI.Rectangle,this.destinationFrame=null,this.sourceFrame=null,this.stencilBuffer=null,this.stencilMaskStack=new s,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=a||n.SCALE_MODES.DEFAULT,this.root=u,this.frameBuffer=o.createRGBA(t,100,100),this.root?this.frameBuffer.framebuffer=null:this.texture=this.frameBuffer.texture,this.resize(e,r)};a.prototype.constructor=a,e.exports=a,a.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},a.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},a.prototype.activate=function(t,e){var r=this.gl;this.frameBuffer.bind(),this.destinationFrame=t||this.destinationFrame||this.defaultFrame,this.sourceFrame=e||this.sourceFrame||t,this.calculateProjection(this.destinationFrame,this.sourceFrame),this.transform&&this.projectionMatrix.append(this.transform),this.destinationFrame!==this.sourceFrame?(r.enable(r.SCISSOR_TEST),r.scissor(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)):r.disable(r.SCISSOR_TEST),r.viewport(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)},a.prototype.calculateProjection=function(t,e){var r=this.projectionMatrix;e=e||t,r.identity(),this.root?(r.a=1/t.width*2,r.d=-1/t.height*2,r.tx=-1-e.x*r.a,r.ty=1-e.y*r.d):(r.a=1/t.width*2,r.d=1/t.height*2,r.tx=-1-e.x*r.a,r.ty=-1-e.y*r.d)},a.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.defaultFrame.width=t,this.defaultFrame.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},a.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":57,"../../../utils":108,"./StencilMaskStack":92,"pixi-gl-core":1}],92:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],93:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],94:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],95:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.transform.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0); +}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],98:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=t,this.height=e,this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(t){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear(!1,t))},i.prototype.renderWebGL=function(t,e,r,i,n){if(this.valid){if(n=void 0!==n?n:!0,this.textureBuffer.transform=r,this.textureBuffer.activate(),e.worldAlpha=1,n){e.worldTransform.identity(),e.currentBounds=null;var o,s,a=e.children;for(o=0,s=a.length;s>o;++o)a[o].updateTransform()}p.width=t.height,p.height=t.width;var h=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.textureBuffer.activate(t,p),console.log(e),this.renderer.renderDisplayObject(e,this.textureBuffer,i),this.renderer.filterManager=h}},i.prototype.renderCanvas=function(t,e,r,i,n){if(this.valid){n=!!n;var o=c;o.identity(),r&&o.append(r),o.tx+=t.x,o.ty+=t.y;var s=e.worldTransform;e.worldTransform=o,e.worldAlpha=1;var a,h,u=e.children;for(a=0,h=u.length;h>a;++a)u[a].updateTransform();i&&this.textureBuffer.clear();var l=this.textureBuffer.context,p=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(e,l),this.renderer.resolution=p,e.worldTransform===o&&(e.worldTransform=s)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(t){var e=new Image;return e.src=this.getBase64(t),e},i.prototype.getBase64=function(t){return this.getCanvas(t).toDataURL()},i.prototype.getCanvas=function(t){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution,i=this.renderer.gl,n=new Uint8Array(4*e*r);i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null);var o=new h(e,r),s=o.context.getImageData(0,0,e,r);return s.data.set(n),o.context.putImageData(s,0,0),o.canvas}if(t||(t=p,t.width=this.textureBuffer.canvas.width,t.height=this.textureBuffer.canvas.height),t.width===this.textureBuffer.canvas.width&&t.height===this.textureBuffer.canvas.height)return this.textureBuffer.canvas;var a=this.resolution,o=new h(t.width*a,t.height*a),s=this.textureBuffer.context.getImageData(t.x*a,t.y*a,t.width*a,t.height*a);return o.context.putImageData(s,0,0),o.canvas},i.prototype.getPixels=function(t){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var i=this.renderer.gl,n=new Uint8Array(4*e*r);return i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null),n}return this.textureBuffer.canvas.getContext("2d").getImageData(t.x*this.resolution,t.y*this.resolution,e,r).data},i.prototype.getPixel=function(t,e,r){return p.x=e,p.y=r,p.width=1/this.resolution,p.height=1/this.resolution,t&&(p.x+=t.x,p.y+=t.y),this.getPixels(p)}},{"../const":38,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/webgl/managers/FilterManager":79,"../renderers/webgl/utils/RenderTarget":91,"./BaseTexture":100,"./Texture":102}],100:[function(t,e,r){function i(t,e,r){s.call(this),this.uid=n.uid(),this.resolution=r||1,this.width=100,this.height=100,this.realWidth=100,this.realHeight=100,this.scaleMode=e||o.SCALE_MODES.DEFAULT,this.hasLoaded=!1,this.isLoading=!1,this.source=null,this.premultipliedAlpha=!0,this.imageUrl=null,this.isPowerOfTwo=!1,this.mipmap=!1,this._glTextures={},this._active=!1,this._id=0,t&&this.loadSource(t)}var n=t("../utils"),o=t("../const"),s=t("eventemitter3");i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.update=function(){this.realWidth=this.source.naturalWidth||this.source.width,this.realHeight=this.source.naturalHeight||this.source.height,this.width=this.realWidth/this.resolution,this.height=this.realHeight/this.resolution,this.isPowerOfTwo=n.isPowerOfTwo(this.realWidth,this.realHeight),this.emit("update",this)},i.prototype.loadSource=function(t){var e=this.isLoading;if(this.hasLoaded=!1,this.isLoading=!1,e&&this.source&&(this.source.onload=null,this.source.onerror=null),this.source=t,(this.source.complete||this.source.getContext)&&this.source.width&&this.source.height)this._sourceLoaded();else if(!t.getContext){this.isLoading=!0;var r=this;t.onload=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r._sourceLoaded(),r.emit("loaded",r))},t.onerror=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r.emit("error",r))},t.complete&&t.src&&(this.isLoading=!1,t.onload=null,t.onerror=null,t.width&&t.height?(this._sourceLoaded(),e&&this.emit("loaded",this)):e&&this.emit("error",this))}},i.prototype._sourceLoaded=function(){this.hasLoaded=!0,this.update()},i.prototype.destroy=function(){this.imageUrl?(delete n.BaseTextureCache[this.imageUrl],delete n.TextureCache[this.imageUrl],this.imageUrl=null,navigator.isCocoonJS||(this.source.src="")):this.source&&this.source._pixiId&&delete n.BaseTextureCache[this.source._pixiId],this.source=null,this.dispose()},i.prototype.dispose=function(){this.emit("dispose",this)},i.prototype.updateSourceImage=function(t){this.source.src=t,this.loadSource(this.source)},i.fromImage=function(t,e,r){var o=n.BaseTextureCache[t];if(void 0===e&&0!==t.indexOf("data:")&&(e=!0),!o){var s=new Image;e&&(s.crossOrigin=""),o=new i(s,r),o.imageUrl=t,s.src=t,n.BaseTextureCache[t]=o,o.resolution=n.getResolutionOfUrl(t)}return o},i.fromCanvas=function(t,e){t._pixiId||(t._pixiId="canvas_"+n.uid());var r=n.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),n.BaseTextureCache[t._pixiId]=r),r}},{"../const":38,"../utils":108,eventemitter3:25}],101:[function(t,e,r){function i(t,e){if(!renderer)throw new Error("Unable to create RenderTexture, you must pass a renderer into the constructor.");o.call(this,t,e),this.valid=!0,this._updateUvs()}var n=t("./BaseRenderTexture"),o=t("./Texture"),s=t("../math");t("../const"),new s.Matrix;i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.resize=function(t,e,r){this.valid=t>0&&e>0,this._frame.width=this.crop.width=t,this._frame.height=this.crop.height=e,r&&this.baseTexture.resize(t,e),this._updateUvs()},i.prototype.clear=function(){this.valid&&this.baseTexture.clear(this.frame)},i.prototype.render=function(t,e,r,i){this.valid&&this.baseTexture.render(this.frame,t,e,r,i)},i.prototype.getImage=function(){return this.baseTexture.getImage(this.frame)},i.prototype.getBase64=function(){return this.getBase64.getImage(this.frame)},i.prototype.getCanvas=function(){return this.baseTexture.getCanvas(this.frame)},i.prototype.getPixels=function(){return this.baseTexture.getPixels(this.frame)},i.prototype.getPixel=function(t,e){return this.baseTexture.getPixel(this.frame,t,e)},i.create=function(t,e,r,o,s){return new i(new n(t,e,r,o,s))}},{"../const":38,"../math":57,"./BaseRenderTexture":99,"./Texture":102}],102:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":57,"../utils":108,"./BaseTexture":100,"./TextureUvs":103,"./VideoBaseTexture":104,eventemitter3:25}],103:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],104:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],106:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":105}],107:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],108:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":109,async:16,eventemitter3:25}],109:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],110:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":54, +"./extras":117,"./filters":134,"./mesh":159}],111:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":54}],119:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":54,"../blur/BlurXFilter":122,"../blur/BlurYFilter":123}],120:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){ +t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":54}],126:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":54}],127:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":54}],128:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":54}],129:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":54}],130:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":54}],131:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":54}],141:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":54}],142:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":54,"./TiltShiftXFilter":143,"./TiltShiftYFilter":144}],143:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":141}],144:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":141}],145:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":54}],146:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":54,"./deprecation":110,"./extras":117,"./filters":134,"./interaction":149,"./loaders":152,"./mesh":159,"./polyfill":164}],147:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":54}],148:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){ +var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":54,"./InteractionData":147,"./interactiveTarget":150}],149:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":147,"./InteractionManager":148,"./interactiveTarget":150}],150:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],151:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":54}],157:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":156}],158:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":54,"./Mesh":156}],159:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":156,"./Plane":157,"./Rope":158,"./webgl/MeshRenderer":160,"./webgl/MeshShader":161}],160:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":54,"../Mesh":156}],161:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":54}],162:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],163:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],164:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":162,"./Object.assign":163,"./requestAnimationFrame":165}],165:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[146])(146)}); //# sourceMappingURL=pixi.min.js.map diff --git a/bin/pixi.min.js.map b/bin/pixi.min.js.map index 102b3e1..c95a532 100644 --- a/bin/pixi.min.js.map +++ b/bin/pixi.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","gl-matrix","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","dirtyTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Transform","pivot","_rotation","filterArea","_sr","_cr","_tempDisplayObjectParent","CachePoint","doc","posiiton","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const","./Transform",41,"localTransform","Point","parentTransform","pt","lt",42,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",43,"_lineTint","_fillTint",44,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",45,"glPoints","glIndices","Uint16Array","deleteBuffer",46,47,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",48,49,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",50,"vertPos",51,"rectData",52,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",53,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","BaseRenderTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseRenderTexture","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",54,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",55,56,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",57,"dx","dy","r2","./Rectangle",58,"normx","normy",59,"points_","il","xi","yi","xj","yj","intersect","../Point",60,61,62,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",63,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",64,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",65,"TextureShader","../../renderers/webgl/shaders/TextureShader",66,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",67,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",68,69,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",70,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",71,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",72,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",73,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",74,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",75,"./AbstractFilter",76,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",77,"currentBlendMode","blendFunc","./WebGLManager",78,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",79,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",80,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",81,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",82,83,"./Shader",84,85,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",86,"customUniforms","customAttributes","uSampler",87,88,"../managers/WebGLManager",89,"colors","rect2",90,"StencilMaskStack","frameBuffer","defaultFrame","destinationFrame","sourceFrame","stencilBuffer","calculateProjection","SCISSOR_TEST","scissor","viewport","pm","projectionFrame","./StencilMaskStack",91,92,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",93,94,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",95,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",96,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",97,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",98,"textureBuffer","tempRect","currentBounds","cachedWt","realResolution","getImage","image","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",99,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","getResolutionOfUrl",100,"baseRenderTexture","_updateUvs","updateBase","./BaseRenderTexture",101,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",102,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",103,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",104,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",105,"shared","./Ticker",106,"totalIndices",107,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",108,"__plugins","pluginName","ctor",109,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",110,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",111,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",112,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",113,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",114,"getChildByName",115,"getGlobalPosition",116,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",117,"AsciiFilter","pixelSize","../../core",118,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",119,"BlurDirFilter","dirX","dirY","strength","passes",120,"BlurFilter","./BlurXFilter","./BlurYFilter",121,"flip","flop",122,123,"SmartBlurFilter",124,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",125,"ColorStepFilter",126,"ConvolutionFilter","texelSize",127,"CrossHatchFilter",128,"DisplacementFilter","mapSampler",129,"DotScreenFilter",130,"BlurYTintFilter",131,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",132,"GrayFilter","gray",133,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",134,135,"noise",136,137,"red","green","blue",138,139,"center","params",140,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",141,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",142,"./TiltShiftAxisFilter",143,144,145,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",146,"InteractionData","originalEvent","getLocalPosition","globalPos",147,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",148,"interactiveTarget","./InteractionManager",149,150,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",151,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",152,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",153,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",154,155,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",156,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",157,"factor","nextPoint","perpLength","num","perpX","perpY",158,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",159,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",160,161,"isNaN",162,163,"./Math.sign","./Object.assign","./requestAnimationFrame",164,"Date","getTime","startTime","vendors","delay"],"mappings":"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AA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAw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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","gl-matrix","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","worldAlpha","alpha","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Transform","pivot","_rotation","localTransform","filterArea","_sr","_cr","dirtyTransform","_tempDisplayObjectParent","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","displayObjectUpdateTransform","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const","./TransformStatic",41,"ObservablePoint","_x","_y",42,"parentTransform","pt","lt","./ObservablePoint",43,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","Point","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",44,"_lineTint","_fillTint",45,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",46,"glPoints","glIndices","Uint16Array","deleteBuffer",47,48,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",49,50,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",51,"vertPos",52,"rectData",53,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",54,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","BaseRenderTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseRenderTexture","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",55,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",56,57,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",58,"dx","dy","r2","./Rectangle",59,"normx","normy",60,"points_","il","xi","yi","xj","yj","intersect","../Point",61,62,63,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",64,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",65,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",66,"TextureShader","../../renderers/webgl/shaders/TextureShader",67,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",68,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",69,70,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",71,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",72,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",73,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",74,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",75,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",76,"./AbstractFilter",77,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",78,"currentBlendMode","blendFunc","./WebGLManager",79,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",80,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",81,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",82,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",83,84,"./Shader",85,86,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",87,"customUniforms","customAttributes","uSampler",88,89,"../managers/WebGLManager",90,"colors","rect2",91,"StencilMaskStack","frameBuffer","defaultFrame","destinationFrame","sourceFrame","stencilBuffer","calculateProjection","SCISSOR_TEST","scissor","viewport","pm","projectionFrame","./StencilMaskStack",92,93,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",94,95,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",96,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",97,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",98,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",99,"textureBuffer","tempRect","currentBounds","cachedWt","realResolution","getImage","image","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",100,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","getResolutionOfUrl",101,"baseRenderTexture","_updateUvs","updateBase","./BaseRenderTexture",102,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",103,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",104,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",105,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",106,"shared","./Ticker",107,"totalIndices",108,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",109,"__plugins","pluginName","ctor",110,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",111,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",112,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",113,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",114,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",115,"getChildByName",116,"getGlobalPosition",117,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",118,"AsciiFilter","pixelSize","../../core",119,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",120,"BlurDirFilter","dirX","dirY","strength","passes",121,"BlurFilter","./BlurXFilter","./BlurYFilter",122,"flip","flop",123,124,"SmartBlurFilter",125,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",126,"ColorStepFilter",127,"ConvolutionFilter","texelSize",128,"CrossHatchFilter",129,"DisplacementFilter","mapSampler",130,"DotScreenFilter",131,"BlurYTintFilter",132,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",133,"GrayFilter","gray",134,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",135,136,"noise",137,138,"red","green","blue",139,140,"center","params",141,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",142,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",143,"./TiltShiftAxisFilter",144,145,146,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",147,"InteractionData","originalEvent","getLocalPosition","globalPos",148,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",149,"interactiveTarget","./InteractionManager",150,151,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",152,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",153,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",154,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",155,156,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",157,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",158,"factor","nextPoint","perpLength","num","perpX","perpY",159,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",160,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",161,162,"isNaN",163,164,"./Math.sign","./Object.assign","./requestAnimationFrame",165,"Date","getTime","startTime","vendors","delay"],"mappings":"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AA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 64e912a..9199f9d 100644 --- a/src/core/display/Container.js +++ b/src/core/display/Container.js @@ -399,7 +399,7 @@ this.children[i].updateTransform(); } - this.dirtyTransform = false; + this.transform.dirty = false; }; // performance increase to avoid using call.. (10x faster) diff --git a/bin/pixi.js b/bin/pixi.js index df52170..915f5c1 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -1,7 +1,7 @@ /** * @license * pixi.js - v3.0.10-dev - * Compiled 2016-01-18T21:33:26.540Z + * Compiled 2016-01-18T22:34:48.843Z * * pixi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -8072,7 +8072,7 @@ core.CanvasRenderer.registerPlugin('accessibility', AccessibilityManager); -},{"../core":53,"./accessibleTarget":36}],36:[function(require,module,exports){ +},{"../core":54,"./accessibleTarget":36}],36:[function(require,module,exports){ /** * Default property values of accessible objects * used by {@link PIXI.accessibility.AccessibilityManager}. @@ -8759,7 +8759,7 @@ this.children[i].updateTransform(); } - this.dirtyTransform = false; + this.transform.dirty = false; }; // performance increase to avoid using call.. (10x faster) @@ -9005,12 +9005,12 @@ this.children = null; }; -},{"../math":56,"../textures/RenderTexture":100,"../utils":107,"./DisplayObject":40}],40:[function(require,module,exports){ +},{"../math":57,"../textures/RenderTexture":101,"../utils":108,"./DisplayObject":40}],40:[function(require,module,exports){ var math = require('../math'), RenderTexture = require('../textures/RenderTexture'), EventEmitter = require('eventemitter3'), CONST = require('../const'), - Transform = require('./Transform'), + Transform = require('./TransformStatic'), _tempMatrix = new math.Matrix(), _tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1, children:[]}; @@ -9122,22 +9122,6 @@ */ this.filterArea = null; - /**xww - * cached sin rotation - * - * @member {number} - * @private - */ - this._sr = 0; - - /** - * cached cos rotation - * - * @member {number} - * @private - */ - this._cr = 1; - /** * The original, cached bounds of the object * @@ -9162,7 +9146,7 @@ */ this._mask = null; - this.dirtyTransform = true; + // this.dirtyTransform = true; } // constructor @@ -9246,9 +9230,9 @@ set: function (value) { this._rotation = value; - this.dirtyTransform = true; - this._sr = Math.sin(value); - this._cr = Math.cos(value); + this.transform.dirty = true; + this.transform._sr = Math.sin(value); + this.transform._cr = Math.cos(value); } }, @@ -9352,6 +9336,7 @@ */ DisplayObject.prototype.updateTransform = function () { + //if(this.transform.dirty || parent.transform.dirty) this.transform.updateTransform(this.parent.transform); // multiply the alphas.. this.worldAlpha = this.alpha * this.parent.worldAlpha; @@ -9554,9 +9539,79 @@ this.filterArea = null; }; -},{"../const":38,"../math":56,"../textures/RenderTexture":100,"./Transform":41,"eventemitter3":25}],41:[function(require,module,exports){ -var math = require('../math'); +},{"../const":38,"../math":57,"../textures/RenderTexture":101,"./TransformStatic":42,"eventemitter3":25}],41:[function(require,module,exports){ +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents + * the horizontal axis and y represents the vertical axis. + * + * @class + * @memberof PIXI + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +function ObservablePoint(transform, x, y) +{ + this._x = x || 0; + this._y = y || 0; + this.transform = transform; +} + +ObservablePoint.prototype.constructor = ObservablePoint; +module.exports = ObservablePoint; + + + +Object.defineProperties(ObservablePoint.prototype, { + /** + * The position of the displayObject on the x axis relative to the local coordinates of the parent. + * + * @member {number} + * @memberof PIXI.DisplayObject# + */ + x: { + get: function () + { + return this._x; + }, + set: function (value) + { + this._x = value; + this.transform.dirty = true; + } + }, + + y: { + get: function () + { + return this._y; + }, + set: function (value) + { + this._y = value; + this.transform.dirty = true; + } + } +}); + +/** + * Sets the point to a new x and y position. + * If y is omitted, both x and y will be set to x. + * + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +ObservablePoint.prototype.set = function (x, y) +{ + this._x = x || 0; + this._y = y || ( (y !== 0) ? this._x : 0 ); + + this.transform.dirty = true; +}; + +},{}],42:[function(require,module,exports){ +var math = require('../math'); +var ObservablePoint = require('./ObservablePoint'); /** * The Point object represents a location in a two-dimensional coordinate system, where x represents @@ -9572,17 +9627,19 @@ this.worldTransform = new math.Matrix(); this.localTransform = new math.Matrix(); - this.position = new math.Point(0.0); - this.scale = new math.Point(1,1); - this.pivot = new math.Point(0.0); - this.skew = new math.Point(0.0); + this.position = new ObservablePoint(this, 0); + this.scale = new ObservablePoint(this,1, 1); + this.pivot = new ObservablePoint(this, 0, 0); + this.skew = new ObservablePoint(this, 0,0); this.rotation = 0; this._sr = Math.sin(0); this._cr = Math.cos(0); - this.dirty = true; + + + this.updated = true; } Transform.prototype.constructor = Transform; @@ -9593,19 +9650,20 @@ var wt = this.worldTransform; var lt = this.localTransform; - if(this.dirty) { // get the matrix values of the displayobject based on its transform properties.. - lt.a = this._cr * this.scale.x; - lt.b = this._sr * this.scale.x; - lt.c = -this._sr * this.scale.y; - lt.d = this._cr * this.scale.y; - lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c); - lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d); + lt.a = this._cr * this.scale._x; + lt.b = this._sr * this.scale._x; + lt.c = -this._sr * this.scale._y; + lt.d = this._cr * this.scale._y; + lt.tx = this.position._x - (this.pivot._x * lt.a + this.pivot._y * lt.c); + lt.ty = this.position._y - (this.pivot._x * lt.b + this.pivot._y * lt.d); } - if(this.dirty || parent.dirty) + this.updated = this.dirty || parentTransform.dirty; + + if(this.updated) { // concat the parent matrix with the objects transform. wt.a = lt.a * pt.a + lt.b * pt.c; @@ -9613,21 +9671,16 @@ wt.c = lt.c * pt.a + lt.d * pt.c; wt.d = lt.c * pt.b + lt.d * pt.d; wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; - wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; - - // this.dirty = false; - // return true; + wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; } - -// this.dirty = false; - // return false; + } module.exports = Transform; -},{"../math":56}],42:[function(require,module,exports){ +},{"../math":57,"./ObservablePoint":41}],43:[function(require,module,exports){ var Container = require('../display/Container'), Texture = require('../textures/Texture'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), @@ -10787,7 +10840,7 @@ this._localBounds = null; }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/canvas/utils/CanvasGraphics":69,"../textures/Texture":101,"./GraphicsData":43}],43:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/canvas/utils/CanvasGraphics":70,"../textures/Texture":102,"./GraphicsData":44}],44:[function(require,module,exports){ /** * A GraphicsData object. * @@ -10880,7 +10933,7 @@ this.shape = null; }; -},{}],44:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ var utils = require('../../utils'), math = require('../../math'), CONST = require('../../const'), @@ -11200,7 +11253,7 @@ }; -},{"../../const":38,"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils":107,"./WebGLGraphicsData":45,"./shaders/PrimitiveShader":46,"./utils/buildCircle":47,"./utils/buildComplexPoly":48,"./utils/buildLine":49,"./utils/buildPoly":50,"./utils/buildRectangle":51,"./utils/buildRoundedRectangle":52,"earcut":24}],45:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils":108,"./WebGLGraphicsData":46,"./shaders/PrimitiveShader":47,"./utils/buildCircle":48,"./utils/buildComplexPoly":49,"./utils/buildLine":50,"./utils/buildPoly":51,"./utils/buildRectangle":52,"./utils/buildRoundedRectangle":53,"earcut":24}],46:[function(require,module,exports){ /** * An object containing WebGL specific properties to be used by the WebGL renderer * @@ -11318,7 +11371,7 @@ this.glIndices = null; }; -},{}],46:[function(require,module,exports){ +},{}],47:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -11370,7 +11423,7 @@ module.exports = PrimitiveShader; -},{"pixi-gl-core":1}],47:[function(require,module,exports){ +},{"pixi-gl-core":1}],48:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11457,7 +11510,7 @@ module.exports = buildCircle; -},{"../../../utils":107,"./buildLine":49}],48:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],49:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11528,7 +11581,7 @@ module.exports = buildComplexPoly; -},{"../../../utils":107,"./buildLine":49}],49:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],50:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'); @@ -11748,7 +11801,7 @@ }; module.exports = buildLine; -},{"../../../math":56,"../../../utils":107}],50:[function(require,module,exports){ +},{"../../../math":57,"../../../utils":108}],51:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -11811,7 +11864,7 @@ module.exports = buildPoly; -},{"../../../utils":107}],51:[function(require,module,exports){ +},{"../../../utils":108}],52:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11882,7 +11935,7 @@ }; module.exports = buildRectangle; -},{"../../../utils":107,"./buildLine":49}],52:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],53:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -12010,7 +12063,7 @@ module.exports = buildRoundedRectangle; -},{"../../../utils":107,"./buildLine":49}],53:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],54:[function(require,module,exports){ /** * @file Main export of the PIXI core library * @author Mat Groves @@ -12106,7 +12159,7 @@ } }); -},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":42,"./graphics/GraphicsData":43,"./graphics/webgl/GraphicsRenderer":44,"./math":56,"./particles/ParticleContainer":62,"./particles/webgl/ParticleRenderer":64,"./renderers/canvas/CanvasRenderer":67,"./renderers/canvas/utils/CanvasBuffer":68,"./renderers/canvas/utils/CanvasGraphics":69,"./renderers/webgl/WebGLRenderer":73,"./renderers/webgl/filters/AbstractFilter":74,"./renderers/webgl/filters/FXAAFilter":75,"./renderers/webgl/filters/SpriteMaskFilter":76,"./renderers/webgl/managers/ShaderManager":80,"./renderers/webgl/managers/WebGLManager":82,"./renderers/webgl/shaders/Shader":85,"./renderers/webgl/utils/ObjectRenderer":88,"./renderers/webgl/utils/RenderTarget":90,"./sprites/Sprite":94,"./sprites/webgl/SpriteRenderer":95,"./text/Text":97,"./textures/BaseRenderTexture":98,"./textures/BaseTexture":99,"./textures/RenderTexture":100,"./textures/Texture":101,"./textures/TextureUvs":102,"./textures/VideoBaseTexture":103,"./ticker":105,"./utils":107,"pixi-gl-core":1}],54:[function(require,module,exports){ +},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":43,"./graphics/GraphicsData":44,"./graphics/webgl/GraphicsRenderer":45,"./math":57,"./particles/ParticleContainer":63,"./particles/webgl/ParticleRenderer":65,"./renderers/canvas/CanvasRenderer":68,"./renderers/canvas/utils/CanvasBuffer":69,"./renderers/canvas/utils/CanvasGraphics":70,"./renderers/webgl/WebGLRenderer":74,"./renderers/webgl/filters/AbstractFilter":75,"./renderers/webgl/filters/FXAAFilter":76,"./renderers/webgl/filters/SpriteMaskFilter":77,"./renderers/webgl/managers/ShaderManager":81,"./renderers/webgl/managers/WebGLManager":83,"./renderers/webgl/shaders/Shader":86,"./renderers/webgl/utils/ObjectRenderer":89,"./renderers/webgl/utils/RenderTarget":91,"./sprites/Sprite":95,"./sprites/webgl/SpriteRenderer":96,"./text/Text":98,"./textures/BaseRenderTexture":99,"./textures/BaseTexture":100,"./textures/RenderTexture":101,"./textures/Texture":102,"./textures/TextureUvs":103,"./textures/VideoBaseTexture":104,"./ticker":106,"./utils":108,"pixi-gl-core":1}],55:[function(require,module,exports){ // @todo - ignore the too many parameters warning for now // should either fix it or change the jshint config // jshint -W072 @@ -12546,7 +12599,7 @@ */ Matrix.TEMP_MATRIX = new Matrix(); -},{"./Point":55}],55:[function(require,module,exports){ +},{"./Point":56}],56:[function(require,module,exports){ /** * The Point object represents a location in a two-dimensional coordinate system, where x represents * the horizontal axis and y represents the vertical axis. @@ -12616,7 +12669,7 @@ this.y = y || ( (y !== 0) ? this.x : 0 ) ; }; -},{}],56:[function(require,module,exports){ +},{}],57:[function(require,module,exports){ /** * Math classes and utilities mixed into PIXI namespace. * @@ -12638,7 +12691,7 @@ RoundedRectangle: require('./shapes/RoundedRectangle') }; -},{"./Matrix":54,"./Point":55,"./shapes/Circle":57,"./shapes/Ellipse":58,"./shapes/Polygon":59,"./shapes/Rectangle":60,"./shapes/RoundedRectangle":61}],57:[function(require,module,exports){ +},{"./Matrix":55,"./Point":56,"./shapes/Circle":58,"./shapes/Ellipse":59,"./shapes/Polygon":60,"./shapes/Rectangle":61,"./shapes/RoundedRectangle":62}],58:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12726,7 +12779,7 @@ return new Rectangle(this.x - this.radius, this.y - this.radius, this.radius * 2, this.radius * 2); }; -},{"../../const":38,"./Rectangle":60}],58:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],59:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12821,7 +12874,7 @@ return new Rectangle(this.x - this.width, this.y - this.height, this.width, this.height); }; -},{"../../const":38,"./Rectangle":60}],59:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],60:[function(require,module,exports){ var Point = require('../Point'), CONST = require('../../const'); @@ -12924,7 +12977,7 @@ return inside; }; -},{"../../const":38,"../Point":55}],60:[function(require,module,exports){ +},{"../../const":38,"../Point":56}],61:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13018,7 +13071,7 @@ return false; }; -},{"../../const":38}],61:[function(require,module,exports){ +},{"../../const":38}],62:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13110,7 +13163,7 @@ return false; }; -},{"../../const":38}],62:[function(require,module,exports){ +},{"../../const":38}],63:[function(require,module,exports){ var Container = require('../display/Container'), CONST = require('../const'); @@ -13429,7 +13482,7 @@ this._buffers = null; }; -},{"../const":38,"../display/Container":39}],63:[function(require,module,exports){ +},{"../const":38,"../display/Container":39}],64:[function(require,module,exports){ /** * @author Mat Groves @@ -13649,7 +13702,7 @@ this.gl.deleteBuffer(this.staticBuffer); }; -},{}],64:[function(require,module,exports){ +},{}],65:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), ParticleShader = require('./ParticleShader'), @@ -14125,7 +14178,7 @@ this.tempMatrix = null; }; -},{"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"./ParticleBuffer":63,"./ParticleShader":65}],65:[function(require,module,exports){ +},{"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"./ParticleBuffer":64,"./ParticleShader":66}],66:[function(require,module,exports){ var TextureShader = require('../../renderers/webgl/shaders/TextureShader'); /** @@ -14203,7 +14256,7 @@ module.exports = ParticleShader; -},{"../../renderers/webgl/shaders/TextureShader":86}],66:[function(require,module,exports){ +},{"../../renderers/webgl/shaders/TextureShader":87}],67:[function(require,module,exports){ var utils = require('../utils'), math = require('../math'), CONST = require('../const'), @@ -14464,7 +14517,7 @@ this._backgroundColorString = null; }; -},{"../const":38,"../math":56,"../utils":107,"eventemitter3":25}],67:[function(require,module,exports){ +},{"../const":38,"../math":57,"../utils":108,"eventemitter3":25}],68:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), CanvasMaskManager = require('./utils/CanvasMaskManager'), utils = require('../../utils'), @@ -14732,7 +14785,7 @@ } }; -},{"../../const":38,"../../math":56,"../../utils":107,"../SystemRenderer":66,"./utils/CanvasMaskManager":70}],68:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../utils":108,"../SystemRenderer":67,"./utils/CanvasMaskManager":71}],69:[function(require,module,exports){ /** * Creates a Canvas element of the given size. * @@ -14832,7 +14885,7 @@ this.canvas = null; }; -},{}],69:[function(require,module,exports){ +},{}],70:[function(require,module,exports){ var CONST = require('../../../const'); /** @@ -15186,7 +15239,7 @@ }; -},{"../../../const":38}],70:[function(require,module,exports){ +},{"../../../const":38}],71:[function(require,module,exports){ var CanvasGraphics = require('./CanvasGraphics'); /** @@ -15248,7 +15301,7 @@ CanvasMaskManager.prototype.destroy = function () {}; -},{"./CanvasGraphics":69}],71:[function(require,module,exports){ +},{"./CanvasGraphics":70}],72:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -15500,7 +15553,7 @@ */ CanvasTinter.tintMethod = CanvasTinter.canUseMultiply ? CanvasTinter.tintWithMultiply : CanvasTinter.tintWithPerPixel; -},{"../../../utils":107}],72:[function(require,module,exports){ +},{"../../../utils":108}],73:[function(require,module,exports){ var GLTexture = require('pixi-gl-core').GLTexture, utils = require('../../utils'); @@ -15640,7 +15693,7 @@ module.exports = TextureManager; -},{"../../utils":107,"pixi-gl-core":1}],73:[function(require,module,exports){ +},{"../../utils":108,"pixi-gl-core":1}],74:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), ShaderManager = require('./managers/ShaderManager'), MaskManager = require('./managers/MaskManager'), @@ -16037,7 +16090,7 @@ }; -},{"../../const":38,"../../utils":107,"../SystemRenderer":66,"./TextureManager":72,"./filters/FXAAFilter":75,"./managers/BlendModeManager":77,"./managers/FilterManager":78,"./managers/MaskManager":79,"./managers/ShaderManager":80,"./managers/StencilManager":81,"./utils/ObjectRenderer":88,"./utils/RenderTarget":90,"./utils/mapWebGLBlendModesToPixi":92,"./utils/mapWebGLDrawModesToPixi":93,"pixi-gl-core":1}],74:[function(require,module,exports){ +},{"../../const":38,"../../utils":108,"../SystemRenderer":67,"./TextureManager":73,"./filters/FXAAFilter":76,"./managers/BlendModeManager":78,"./managers/FilterManager":79,"./managers/MaskManager":80,"./managers/ShaderManager":81,"./managers/StencilManager":82,"./utils/ObjectRenderer":89,"./utils/RenderTarget":91,"./utils/mapWebGLBlendModesToPixi":93,"./utils/mapWebGLDrawModesToPixi":94,"pixi-gl-core":1}],75:[function(require,module,exports){ var DefaultShader = require('../shaders/TextureShader'); /** @@ -16149,7 +16202,7 @@ } }; -},{"../shaders/TextureShader":86}],75:[function(require,module,exports){ +},{"../shaders/TextureShader":87}],76:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'); // @see https://github.com/substack/brfs/issues/25 @@ -16204,7 +16257,7 @@ filterManager.applyFilter(shader, input, output); }; -},{"./AbstractFilter":74}],76:[function(require,module,exports){ +},{"./AbstractFilter":75}],77:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'), math = require('../../../math'); @@ -16301,7 +16354,7 @@ } }); -},{"../../../math":56,"./AbstractFilter":74}],77:[function(require,module,exports){ +},{"../../../math":57,"./AbstractFilter":75}],78:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'); /** @@ -16345,7 +16398,7 @@ return true; }; -},{"./WebGLManager":82}],78:[function(require,module,exports){ +},{"./WebGLManager":83}],79:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), RenderTarget = require('../utils/RenderTarget'), CONST = require('../../../const'), @@ -16797,7 +16850,7 @@ this.texturePool = null; }; -},{"../../../const":38,"../../../math":56,"../utils/Quad":89,"../utils/RenderTarget":90,"./WebGLManager":82}],79:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../utils/Quad":90,"../utils/RenderTarget":91,"./WebGLManager":83}],80:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), AlphaMaskFilter = require('../filters/SpriteMaskFilter'); @@ -16912,7 +16965,7 @@ }; -},{"../filters/SpriteMaskFilter":76,"./WebGLManager":82}],80:[function(require,module,exports){ +},{"../filters/SpriteMaskFilter":77,"./WebGLManager":83}],81:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), TextureShader = require('../shaders/TextureShader'), ComplexPrimitiveShader = require('../shaders/ComplexPrimitiveShader'), @@ -17082,7 +17135,7 @@ this.tempAttribState = null; }; -},{"../../../utils":107,"../shaders/ComplexPrimitiveShader":83,"../shaders/PrimitiveShader":84,"../shaders/TextureShader":86,"./WebGLManager":82}],81:[function(require,module,exports){ +},{"../../../utils":108,"../shaders/ComplexPrimitiveShader":84,"../shaders/PrimitiveShader":85,"../shaders/TextureShader":87,"./WebGLManager":83}],82:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), utils = require('../../../utils'); @@ -17449,7 +17502,7 @@ }; -},{"../../../utils":107,"./WebGLManager":82}],82:[function(require,module,exports){ +},{"../../../utils":108,"./WebGLManager":83}],83:[function(require,module,exports){ /** * @class * @memberof PIXI @@ -17490,7 +17543,7 @@ this.renderer = null; }; -},{}],83:[function(require,module,exports){ +},{}],84:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17552,7 +17605,7 @@ ComplexPrimitiveShader.prototype.constructor = ComplexPrimitiveShader; module.exports = ComplexPrimitiveShader; -},{"./Shader":85}],84:[function(require,module,exports){ +},{"./Shader":86}],85:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17615,7 +17668,7 @@ PrimitiveShader.prototype.constructor = PrimitiveShader; module.exports = PrimitiveShader; -},{"./Shader":85}],85:[function(require,module,exports){ +},{"./Shader":86}],86:[function(require,module,exports){ /*global console */ var utils = require('../../../utils'); @@ -18143,7 +18196,7 @@ return shader; }; -},{"../../../utils":107}],86:[function(require,module,exports){ +},{"../../../utils":108}],87:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -18254,7 +18307,7 @@ '}' ].join('\n'); -},{"./Shader":85}],87:[function(require,module,exports){ +},{"./Shader":86}],88:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -18335,7 +18388,7 @@ '}' ].join('\n'); -},{"pixi-gl-core":1}],88:[function(require,module,exports){ +},{"pixi-gl-core":1}],89:[function(require,module,exports){ var WebGLManager = require('../managers/WebGLManager'); /** @@ -18393,7 +18446,7 @@ // render the object }; -},{"../managers/WebGLManager":82}],89:[function(require,module,exports){ +},{"../managers/WebGLManager":83}],90:[function(require,module,exports){ /** * Helper class to create a quad * @@ -18548,7 +18601,7 @@ -},{}],90:[function(require,module,exports){ +},{}],91:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'), CONST = require('../../../const'), @@ -18853,7 +18906,7 @@ this.texture = null; }; -},{"../../../const":38,"../../../math":56,"../../../utils":107,"./StencilMaskStack":91,"pixi-gl-core":1}],91:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../../../utils":108,"./StencilMaskStack":92,"pixi-gl-core":1}],92:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -18886,7 +18939,7 @@ StencilMaskStack.prototype.constructor = StencilMaskStack; module.exports = StencilMaskStack; -},{}],92:[function(require,module,exports){ +},{}],93:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18923,7 +18976,7 @@ module.exports = mapWebGLBlendModesToPixi; -},{"../../../const":38}],93:[function(require,module,exports){ +},{"../../../const":38}],94:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18947,7 +19000,7 @@ module.exports = mapWebGLDrawModesToPixi; -},{"../../../const":38}],94:[function(require,module,exports){ +},{"../../../const":38}],95:[function(require,module,exports){ var math = require('../math'), Texture = require('../textures/Texture'), Container = require('../display/Container'), @@ -19043,7 +19096,6 @@ // call texture setter this.texture = texture || Texture.EMPTY; this.textureDirty = true - this.vertexDirty = true; this.vertexData = new Float32Array(8); } @@ -19153,7 +19205,6 @@ Sprite.prototype.caclulateVertices = function () { - var texture = this._texture, wt = this.transform.worldTransform, a = wt.a, b = wt.b, c = wt.c, d = wt.d, tx = wt.tx, ty = wt.ty, @@ -19208,22 +19259,11 @@ */ Sprite.prototype._renderWebGL = function (renderer) { - if(this.textureDirty) + if(this.transform.updated || this.textureDirty) { this.textureDirty = false; - - this._onTextureUpdate(); - - this.vertexDirty = true; - } - - if(this.vertexDirty) - { - this.vertexDirty = false; - // set the vertex data this.caclulateVertices(); - } renderer.setObjectRenderer(renderer.plugins.sprite); @@ -19566,7 +19606,7 @@ return new Sprite(Texture.fromImage(imageId, crossorigin, scaleMode)); }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasTinter":71,"../textures/Texture":101,"../utils":107}],95:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasTinter":72,"../textures/Texture":102,"../utils":108}],96:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), TextureShader = require('../../renderers/webgl/shaders/_TextureShader'), @@ -19927,7 +19967,7 @@ this.shader = null; }; -},{"../../const":38,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/shaders/_TextureShader":87,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils/createIndicesForQuads":106,"./generateMultiTextureShader":96,"pixi-gl-core":1}],96:[function(require,module,exports){ +},{"../../const":38,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/shaders/_TextureShader":88,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils/createIndicesForQuads":107,"./generateMultiTextureShader":97,"pixi-gl-core":1}],97:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; @@ -19990,7 +20030,7 @@ module.exports = generateMultiTextureShader; -},{"pixi-gl-core":1}],97:[function(require,module,exports){ +},{"pixi-gl-core":1}],98:[function(require,module,exports){ var Sprite = require('../sprites/Sprite'), Texture = require('../textures/Texture'), math = require('../math'), @@ -20611,7 +20651,7 @@ this._texture.destroy(destroyBaseTexture === undefined ? true : destroyBaseTexture); }; -},{"../const":38,"../math":56,"../sprites/Sprite":94,"../textures/Texture":101,"../utils":107}],98:[function(require,module,exports){ +},{"../const":38,"../math":57,"../sprites/Sprite":95,"../textures/Texture":102,"../utils":108}],99:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), Texture = require('./Texture'), RenderTarget = require('../renderers/webgl/utils/RenderTarget'), @@ -21095,7 +21135,7 @@ return this.getPixels(tempRect); }; -},{"../const":38,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/webgl/managers/FilterManager":78,"../renderers/webgl/utils/RenderTarget":90,"./BaseTexture":99,"./Texture":101}],99:[function(require,module,exports){ +},{"../const":38,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/webgl/managers/FilterManager":79,"../renderers/webgl/utils/RenderTarget":91,"./BaseTexture":100,"./Texture":102}],100:[function(require,module,exports){ var utils = require('../utils'), CONST = require('../const'), EventEmitter = require('eventemitter3'); @@ -21532,7 +21572,7 @@ return baseTexture; }; -},{"../const":38,"../utils":107,"eventemitter3":25}],100:[function(require,module,exports){ +},{"../const":38,"../utils":108,"eventemitter3":25}],101:[function(require,module,exports){ var BaseRenderTexture = require('./BaseRenderTexture'), Texture = require('./Texture'), math = require('../math'), @@ -21727,7 +21767,7 @@ } -},{"../const":38,"../math":56,"./BaseRenderTexture":98,"./Texture":101}],101:[function(require,module,exports){ +},{"../const":38,"../math":57,"./BaseRenderTexture":99,"./Texture":102}],102:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), VideoBaseTexture = require('./VideoBaseTexture'), TextureUvs = require('./TextureUvs'), @@ -22153,7 +22193,7 @@ */ Texture.EMPTY = new Texture(new BaseTexture()); -},{"../math":56,"../utils":107,"./BaseTexture":99,"./TextureUvs":102,"./VideoBaseTexture":103,"eventemitter3":25}],102:[function(require,module,exports){ +},{"../math":57,"../utils":108,"./BaseTexture":100,"./TextureUvs":103,"./VideoBaseTexture":104,"eventemitter3":25}],103:[function(require,module,exports){ /** * A standard object to store the Uvs of a texture @@ -22234,7 +22274,7 @@ this.uvs_uint32[3] = (((this.y3 * 65535) & 0xFFFF) << 16) | ((this.x3 * 65535) & 0xFFFF); }; -},{}],103:[function(require,module,exports){ +},{}],104:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), utils = require('../utils'); @@ -22471,7 +22511,7 @@ return source; } -},{"../utils":107,"./BaseTexture":99}],104:[function(require,module,exports){ +},{"../utils":108,"./BaseTexture":100}],105:[function(require,module,exports){ var CONST = require('../const'), EventEmitter = require('eventemitter3'), // Internal event used by composed emitter @@ -22826,7 +22866,7 @@ module.exports = Ticker; -},{"../const":38,"eventemitter3":25}],105:[function(require,module,exports){ +},{"../const":38,"eventemitter3":25}],106:[function(require,module,exports){ var Ticker = require('./Ticker'); /** @@ -22882,7 +22922,7 @@ Ticker: Ticker }; -},{"./Ticker":104}],106:[function(require,module,exports){ +},{"./Ticker":105}],107:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -22915,7 +22955,7 @@ }; module.exports = createIndicesForQuads; -},{}],107:[function(require,module,exports){ +},{}],108:[function(require,module,exports){ var CONST = require('../const'); /** @@ -23192,7 +23232,7 @@ BaseTextureCache: {} }; -},{"../const":38,"./pluginTarget":108,"async":16,"eventemitter3":25}],108:[function(require,module,exports){ +},{"../const":38,"./pluginTarget":109,"async":16,"eventemitter3":25}],109:[function(require,module,exports){ /** * Mixins functionality to make an object have "plugins". * @@ -23262,7 +23302,7 @@ } }; -},{}],109:[function(require,module,exports){ +},{}],110:[function(require,module,exports){ /*global console */ var core = require('./core'), mesh = require('./mesh'), @@ -23613,7 +23653,7 @@ return core.utils.uid(); }; -},{"./core":53,"./extras":116,"./filters":133,"./mesh":158}],110:[function(require,module,exports){ +},{"./core":54,"./extras":117,"./filters":134,"./mesh":159}],111:[function(require,module,exports){ var core = require('../core'); /** @@ -24001,7 +24041,7 @@ BitmapText.fonts = {}; -},{"../core":53}],111:[function(require,module,exports){ +},{"../core":54}],112:[function(require,module,exports){ var core = require('../core'); /** @@ -24321,7 +24361,7 @@ return new MovieClip(textures); }; -},{"../core":53}],112:[function(require,module,exports){ +},{"../core":54}],113:[function(require,module,exports){ var core = require('../core'), // a sprite use dfor rendering textures.. tempPoint = new core.Point(), @@ -24773,7 +24813,7 @@ return new TilingSprite(core.Texture.fromImage(imageId, crossorigin, scaleMode),width,height); }; -},{"../core":53,"../core/renderers/canvas/utils/CanvasTinter":71}],113:[function(require,module,exports){ +},{"../core":54,"../core/renderers/canvas/utils/CanvasTinter":72}],114:[function(require,module,exports){ var core = require('../core'), DisplayObject = core.DisplayObject, _tempMatrix = new core.Matrix(); @@ -25045,7 +25085,7 @@ this._originalDestroy(); }; -},{"../core":53}],114:[function(require,module,exports){ +},{"../core":54}],115:[function(require,module,exports){ var core = require('../core'); /** @@ -25075,7 +25115,7 @@ return null; }; -},{"../core":53}],115:[function(require,module,exports){ +},{"../core":54}],116:[function(require,module,exports){ var core = require('../core'); /** @@ -25105,7 +25145,7 @@ return point; }; -},{"../core":53}],116:[function(require,module,exports){ +},{"../core":54}],117:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -25126,7 +25166,7 @@ BitmapText: require('./BitmapText') }; -},{"./BitmapText":110,"./MovieClip":111,"./TilingSprite":112,"./cacheAsBitmap":113,"./getChildByName":114,"./getGlobalPosition":115}],117:[function(require,module,exports){ +},{"./BitmapText":111,"./MovieClip":112,"./TilingSprite":113,"./cacheAsBitmap":114,"./getChildByName":115,"./getGlobalPosition":116}],118:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25183,7 +25223,7 @@ } }); -},{"../../core":53}],118:[function(require,module,exports){ +},{"../../core":54}],119:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYFilter = require('../blur/BlurYFilter'); @@ -25284,7 +25324,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"../blur/BlurYFilter":122}],119:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"../blur/BlurYFilter":123}],120:[function(require,module,exports){ var core = require('../../core'); @@ -25426,7 +25466,7 @@ } }); -},{"../../core":53}],120:[function(require,module,exports){ +},{"../../core":54}],121:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('./BlurXFilter'), BlurYFilter = require('./BlurYFilter'); @@ -25536,7 +25576,7 @@ } }); -},{"../../core":53,"./BlurXFilter":121,"./BlurYFilter":122}],121:[function(require,module,exports){ +},{"../../core":54,"./BlurXFilter":122,"./BlurYFilter":123}],122:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25629,7 +25669,7 @@ } }); -},{"../../core":53}],122:[function(require,module,exports){ +},{"../../core":54}],123:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25715,7 +25755,7 @@ } }); -},{"../../core":53}],123:[function(require,module,exports){ +},{"../../core":54}],124:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25745,7 +25785,7 @@ SmartBlurFilter.prototype.constructor = SmartBlurFilter; module.exports = SmartBlurFilter; -},{"../../core":53}],124:[function(require,module,exports){ +},{"../../core":54}],125:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26281,7 +26321,7 @@ } }); -},{"../../core":53}],125:[function(require,module,exports){ +},{"../../core":54}],126:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26330,7 +26370,7 @@ } }); -},{"../../core":53}],126:[function(require,module,exports){ +},{"../../core":54}],127:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26421,7 +26461,7 @@ } }); -},{"../../core":53}],127:[function(require,module,exports){ +},{"../../core":54}],128:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26447,7 +26487,7 @@ CrossHatchFilter.prototype.constructor = CrossHatchFilter; module.exports = CrossHatchFilter; -},{"../../core":53}],128:[function(require,module,exports){ +},{"../../core":54}],129:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26531,7 +26571,7 @@ } }); -},{"../../core":53}],129:[function(require,module,exports){ +},{"../../core":54}],130:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26603,7 +26643,7 @@ } }); -},{"../../core":53}],130:[function(require,module,exports){ +},{"../../core":54}],131:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26694,7 +26734,7 @@ } }); -},{"../../core":53}],131:[function(require,module,exports){ +},{"../../core":54}],132:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYTintFilter = require('./BlurYTintFilter'); @@ -26887,7 +26927,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"./BlurYTintFilter":130}],132:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"./BlurYTintFilter":131}],133:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26936,7 +26976,7 @@ } }); -},{"../../core":53}],133:[function(require,module,exports){ +},{"../../core":54}],134:[function(require,module,exports){ /** * @file Main export of the PIXI filters library * @author Mat Groves @@ -26975,7 +27015,7 @@ TwistFilter: require('./twist/TwistFilter') }; -},{"./ascii/AsciiFilter":117,"./bloom/BloomFilter":118,"./blur/BlurDirFilter":119,"./blur/BlurFilter":120,"./blur/BlurXFilter":121,"./blur/BlurYFilter":122,"./blur/SmartBlurFilter":123,"./color/ColorMatrixFilter":124,"./color/ColorStepFilter":125,"./convolution/ConvolutionFilter":126,"./crosshatch/CrossHatchFilter":127,"./displacement/DisplacementFilter":128,"./dot/DotScreenFilter":129,"./dropshadow/DropShadowFilter":131,"./gray/GrayFilter":132,"./invert/InvertFilter":134,"./noise/NoiseFilter":135,"./pixelate/PixelateFilter":136,"./rgb/RGBSplitFilter":137,"./sepia/SepiaFilter":138,"./shockwave/ShockwaveFilter":139,"./tiltshift/TiltShiftFilter":141,"./tiltshift/TiltShiftXFilter":142,"./tiltshift/TiltShiftYFilter":143,"./twist/TwistFilter":144}],134:[function(require,module,exports){ +},{"./ascii/AsciiFilter":118,"./bloom/BloomFilter":119,"./blur/BlurDirFilter":120,"./blur/BlurFilter":121,"./blur/BlurXFilter":122,"./blur/BlurYFilter":123,"./blur/SmartBlurFilter":124,"./color/ColorMatrixFilter":125,"./color/ColorStepFilter":126,"./convolution/ConvolutionFilter":127,"./crosshatch/CrossHatchFilter":128,"./displacement/DisplacementFilter":129,"./dot/DotScreenFilter":130,"./dropshadow/DropShadowFilter":132,"./gray/GrayFilter":133,"./invert/InvertFilter":135,"./noise/NoiseFilter":136,"./pixelate/PixelateFilter":137,"./rgb/RGBSplitFilter":138,"./sepia/SepiaFilter":139,"./shockwave/ShockwaveFilter":140,"./tiltshift/TiltShiftFilter":142,"./tiltshift/TiltShiftXFilter":143,"./tiltshift/TiltShiftYFilter":144,"./twist/TwistFilter":145}],135:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27025,7 +27065,7 @@ } }); -},{"../../core":53}],135:[function(require,module,exports){ +},{"../../core":54}],136:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27080,7 +27120,7 @@ } }); -},{"../../core":53}],136:[function(require,module,exports){ +},{"../../core":54}],137:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27131,7 +27171,7 @@ } }); -},{"../../core":53}],137:[function(require,module,exports){ +},{"../../core":54}],138:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27217,7 +27257,7 @@ } }); -},{"../../core":53}],138:[function(require,module,exports){ +},{"../../core":54}],139:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27267,7 +27307,7 @@ } }); -},{"../../core":53}],139:[function(require,module,exports){ +},{"../../core":54}],140:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27355,7 +27395,7 @@ } }); -},{"../../core":53}],140:[function(require,module,exports){ +},{"../../core":54}],141:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27480,7 +27520,7 @@ } }); -},{"../../core":53}],141:[function(require,module,exports){ +},{"../../core":54}],142:[function(require,module,exports){ var core = require('../../core'), TiltShiftXFilter = require('./TiltShiftXFilter'), TiltShiftYFilter = require('./TiltShiftYFilter'); @@ -27590,7 +27630,7 @@ } }); -},{"../../core":53,"./TiltShiftXFilter":142,"./TiltShiftYFilter":143}],142:[function(require,module,exports){ +},{"../../core":54,"./TiltShiftXFilter":143,"./TiltShiftYFilter":144}],143:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27628,7 +27668,7 @@ this.uniforms.delta.value.y = dy / d; }; -},{"./TiltShiftAxisFilter":140}],143:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],144:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27666,7 +27706,7 @@ this.uniforms.delta.value.y = dx / d; }; -},{"./TiltShiftAxisFilter":140}],144:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],145:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27751,7 +27791,7 @@ } }); -},{"../../core":53}],145:[function(require,module,exports){ +},{"../../core":54}],146:[function(require,module,exports){ (function (global){ // run the polyfills require('./polyfill'); @@ -27784,7 +27824,7 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./accessibility":37,"./core":53,"./deprecation":109,"./extras":116,"./filters":133,"./interaction":148,"./loaders":151,"./mesh":158,"./polyfill":163}],146:[function(require,module,exports){ +},{"./accessibility":37,"./core":54,"./deprecation":110,"./extras":117,"./filters":134,"./interaction":149,"./loaders":152,"./mesh":159,"./polyfill":164}],147:[function(require,module,exports){ var core = require('../core'); /** @@ -27833,7 +27873,7 @@ return displayObject.worldTransform.applyInverse(globalPos || this.global, point); }; -},{"../core":53}],147:[function(require,module,exports){ +},{"../core":54}],148:[function(require,module,exports){ var core = require('../core'), InteractionData = require('./InteractionData'); @@ -28709,7 +28749,7 @@ core.WebGLRenderer.registerPlugin('interaction', InteractionManager); core.CanvasRenderer.registerPlugin('interaction', InteractionManager); -},{"../core":53,"./InteractionData":146,"./interactiveTarget":149}],148:[function(require,module,exports){ +},{"../core":54,"./InteractionData":147,"./interactiveTarget":150}],149:[function(require,module,exports){ /** * @file Main export of the PIXI interactions library * @author Mat Groves @@ -28726,7 +28766,7 @@ interactiveTarget: require('./interactiveTarget') }; -},{"./InteractionData":146,"./InteractionManager":147,"./interactiveTarget":149}],149:[function(require,module,exports){ +},{"./InteractionData":147,"./InteractionManager":148,"./interactiveTarget":150}],150:[function(require,module,exports){ /** * Default property values of interactive objects * used by {@link PIXI.interaction.InteractionManager}. @@ -28775,7 +28815,7 @@ module.exports = interactiveTarget; -},{}],150:[function(require,module,exports){ +},{}],151:[function(require,module,exports){ var Resource = require('resource-loader').Resource, core = require('../core'), extras = require('../extras'), @@ -28896,7 +28936,7 @@ }; }; -},{"../core":53,"../extras":116,"path":17,"resource-loader":31}],151:[function(require,module,exports){ +},{"../core":54,"../extras":117,"path":17,"resource-loader":31}],152:[function(require,module,exports){ /** * @file Main export of the PIXI loaders library * @author Mat Groves @@ -28917,7 +28957,7 @@ Resource: require('resource-loader').Resource }; -},{"./bitmapFontParser":150,"./loader":152,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],152:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./loader":153,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],153:[function(require,module,exports){ var ResourceLoader = require('resource-loader'), textureParser = require('./textureParser'), spritesheetParser = require('./spritesheetParser'), @@ -28979,7 +29019,7 @@ Resource.setExtensionXhrType('fnt', Resource.XHR_RESPONSE_TYPE.DOCUMENT); -},{"./bitmapFontParser":150,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],153:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],154:[function(require,module,exports){ var Resource = require('resource-loader').Resource, path = require('path'), core = require('../core'); @@ -29063,7 +29103,7 @@ }; }; -},{"../core":53,"path":17,"resource-loader":31}],154:[function(require,module,exports){ +},{"../core":54,"path":17,"resource-loader":31}],155:[function(require,module,exports){ var core = require('../core'); module.exports = function () @@ -29085,7 +29125,7 @@ }; }; -},{"../core":53}],155:[function(require,module,exports){ +},{"../core":54}],156:[function(require,module,exports){ var core = require('../core'), tempPoint = new core.Point(), tempPolygon = new core.Polygon(); @@ -29561,7 +29601,7 @@ TRIANGLES: 1 }; -},{"../core":53}],156:[function(require,module,exports){ +},{"../core":54}],157:[function(require,module,exports){ var Mesh = require('./Mesh'); /** @@ -29687,7 +29727,7 @@ } }; -},{"./Mesh":155}],157:[function(require,module,exports){ +},{"./Mesh":156}],158:[function(require,module,exports){ var Mesh = require('./Mesh'); var core = require('../core'); @@ -29900,7 +29940,7 @@ this.containerUpdateTransform(); }; -},{"../core":53,"./Mesh":155}],158:[function(require,module,exports){ +},{"../core":54,"./Mesh":156}],159:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -29919,7 +29959,7 @@ MeshShader: require('./webgl/MeshShader') }; -},{"./Mesh":155,"./Plane":156,"./Rope":157,"./webgl/MeshRenderer":159,"./webgl/MeshShader":160}],159:[function(require,module,exports){ +},{"./Mesh":156,"./Plane":157,"./Rope":158,"./webgl/MeshRenderer":160,"./webgl/MeshShader":161}],160:[function(require,module,exports){ var core = require('../../core'), Mesh = require('../Mesh'); @@ -30148,7 +30188,7 @@ core.ObjectRenderer.prototype.destroy.call(this); }; -},{"../../core":53,"../Mesh":155}],160:[function(require,module,exports){ +},{"../../core":54,"../Mesh":156}],161:[function(require,module,exports){ var core = require('../../core'); /** @@ -30209,7 +30249,7 @@ core.ShaderManager.registerPlugin('meshShader', MeshShader); -},{"../../core":53}],161:[function(require,module,exports){ +},{"../../core":54}],162:[function(require,module,exports){ // References: // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign @@ -30225,7 +30265,7 @@ }; } -},{}],162:[function(require,module,exports){ +},{}],163:[function(require,module,exports){ // References: // https://github.com/sindresorhus/object-assign // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign @@ -30235,12 +30275,12 @@ Object.assign = require('object-assign'); } -},{"object-assign":26}],163:[function(require,module,exports){ +},{"object-assign":26}],164:[function(require,module,exports){ require('./Object.assign'); require('./requestAnimationFrame'); require('./Math.sign'); -},{"./Math.sign":161,"./Object.assign":162,"./requestAnimationFrame":164}],164:[function(require,module,exports){ +},{"./Math.sign":162,"./Object.assign":163,"./requestAnimationFrame":165}],165:[function(require,module,exports){ (function (global){ // References: // http://paulirish.com/2011/requestanimationframe-for-smart-animating/ @@ -30311,8 +30351,8 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[145])(145) +},{}]},{},[146])(146) }); -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L1RyYW5zZm9ybS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL1dlYkdMR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZENpcmNsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ29tcGxleFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZExpbmUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9NYXRyaXguanMiLCJzcmMvY29yZS9tYXRoL1BvaW50LmpzIiwic3JjL2NvcmUvbWF0aC9pbmRleC5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0NpcmNsZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0VsbGlwc2UuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Qb2x5Z29uLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZUJ1ZmZlci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL1N5c3RlbVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcy5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9UZXh0dXJlTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9GWEFBRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1F1YWQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0LmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1N0ZW5jaWxNYXNrU3RhY2suanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvc3ByaXRlcy9TcHJpdGUuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL1Nwcml0ZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvc3ByaXRlcy93ZWJnbC9nZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3RleHQvVGV4dC5qcyIsInNyYy9jb3JlL3RleHR1cmVzL0Jhc2VSZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1RleHR1cmVVdnMuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGlja2VyL1RpY2tlci5qcyIsInNyYy9jb3JlL3RpY2tlci9pbmRleC5qcyIsInNyYy9jb3JlL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcy5qcyIsInNyYy9jb3JlL3V0aWxzL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvcGx1Z2luVGFyZ2V0LmpzIiwic3JjL2RlcHJlY2F0aW9uLmpzIiwic3JjL2V4dHJhcy9CaXRtYXBUZXh0LmpzIiwic3JjL2V4dHJhcy9Nb3ZpZUNsaXAuanMiLCJzcmMvZXh0cmFzL1RpbGluZ1Nwcml0ZS5qcyIsInNyYy9leHRyYXMvY2FjaGVBc0JpdG1hcC5qcyIsInNyYy9leHRyYXMvZ2V0Q2hpbGRCeU5hbWUuanMiLCJzcmMvZXh0cmFzL2dldEdsb2JhbFBvc2l0aW9uLmpzIiwic3JjL2V4dHJhcy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2FzY2lpL0FzY2lpRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmxvb20vQmxvb21GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJEaXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJYRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9CbHVyWUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvU21hcnRCbHVyRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvclN0ZXBGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kb3QvRG90U2NyZWVuRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZHJvcHNoYWRvdy9CbHVyWVRpbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ncmF5L0dyYXlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2ludmVydC9JbnZlcnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ub2lzZS9Ob2lzZUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcmdiL1JHQlNwbGl0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvc2VwaWEvU2VwaWFGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdEF4aXNGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3R3aXN0L1R3aXN0RmlsdGVyLmpzIiwic3JjL3NyYy9pbmRleC5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbkRhdGEuanMiLCJzcmMvaW50ZXJhY3Rpb24vSW50ZXJhY3Rpb25NYW5hZ2VyLmpzIiwic3JjL2ludGVyYWN0aW9uL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL2ludGVyYWN0aXZlVGFyZ2V0LmpzIiwic3JjL2xvYWRlcnMvYml0bWFwRm9udFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL2luZGV4LmpzIiwic3JjL2xvYWRlcnMvbG9hZGVyLmpzIiwic3JjL2xvYWRlcnMvc3ByaXRlc2hlZXRQYXJzZXIuanMiLCJzcmMvbG9hZGVycy90ZXh0dXJlUGFyc2VyLmpzIiwic3JjL21lc2gvTWVzaC5qcyIsInNyYy9tZXNoL1BsYW5lLmpzIiwic3JjL21lc2gvUm9wZS5qcyIsInNyYy9tZXNoL2luZGV4LmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFJlbmRlcmVyLmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFNoYWRlci5qcyIsInNyYy9wb2x5ZmlsbC9NYXRoLnNpZ24uanMiLCJzcmMvcG9seWZpbGwvT2JqZWN0LmFzc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9pbmRleC5qcyIsInNyYy9wb2x5ZmlsbC9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM1dUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbnNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25tQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0b0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6bUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIGNyZWF0ZUNvbnRleHQ6IFx0XHRcdHJlcXVpcmUoJy4vbGliL2NyZWF0ZUNvbnRleHQnKSxcbiAgICBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM6IFx0cmVxdWlyZSgnLi9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzJyksXG4gICAgXG4gICAgR0xCdWZmZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xCdWZmZXInKSxcbiAgICBHTEZyYW1lYnVmZmVyOiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9HTEZyYW1lYnVmZmVyJyksXG4gICAgR0xTaGFkZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xTaGFkZXInKSxcbiAgICBHTFRleHR1cmU6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xUZXh0dXJlJyksXG4gICAgXG4gICAgVmVydGV4QXJyYXlPYmplY3Q6IFx0XHRyZXF1aXJlKCcuL2xpYi9WZXJ0ZXhBcnJheU9iamVjdCcpXG5cbn07IiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRU1QVFlfQVJSQVlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xuXG52YXIgQnVmZmVyID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5BUlJBWV9CVUZGRVI7XG5cdHRoaXMuZHJhd1R5cGUgPSBkcmF3VHlwZSB8fCBnbC5TVEFUSUNfRFJBVztcblx0dGhpcy5kYXRhID0gRU1QVFlfQVJSQVlfQlVGRkVSO1xuXG5cdGlmKGRhdGEpXG5cdHtcblx0XHR0aGlzLnVwbG9hZChkYXRhKTtcblx0fVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKGRhdGEsIG9mZnNldCwgZG9udEJpbmQpXG57XG5cdC8vIHRvZG8gLSBuZWVkZWQ/XG5cdC8vaWYoIWRvbnRCaW5kKVxuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRcblx0ZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuXHRvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuXHRpZih0aGlzLmRhdGEuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpXG5cdHtcdFxuXHRcdGdsLmJ1ZmZlclN1YkRhdGEodGhpcy50eXBlLCBvZmZzZXQsIGRhdGEpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLCBkYXRhLCB0aGlzLmRyYXdUeXBlKTtcblx0fVxuXG5cdHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKTtcbn1cblxuQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIGdsLkFSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgdHlwZSwgZHJhd1R5cGUpO1xufVxuXG4vL1RPRE8gRGVzdHJveS4uXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyO1xuXG4iLCJcbnZhciBUZXh0dXJlID0gcmVxdWlyZSgnLi9HTFRleHR1cmUnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgRnJhbWVidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRnJhbWVidWZmZXIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcblx0dGhpcy5zdGVuY2lsID0gbnVsbDtcblx0dGhpcy50ZXh0dXJlID0gbnVsbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMTAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5lbmFibGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IG5ldyBUZXh0dXJlKGdsKTtcblxuXHR0aGlzLnRleHR1cmUuYmluZCgpO1xuXG5cdC8vZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlLnRleHR1cmUsIDApO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlU3RlbmNpbCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5zdGVuY2lsKXJldHVybjtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuc3RlbmNpbCA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgIFxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCB0aGlzLnN0ZW5jaWwpO1xuICAgIFxuICAgIC8vIFRPRE8uLiB0aGlzIGlzIGRlcHRoIEFORCBzdGVuY2lsP1xuICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTCwgIHRoaXMud2lkdGggICwgdGhpcy5oZWlnaHQgKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oIHIsIGcsIGIsIGEgKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIGdsLmNsZWFyQ29sb3IociwgZywgYiwgYSk7XG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZnJhbWVidWZmZXIgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdGlmICggdGhpcy50ZXh0dXJlIClcbiAgICB7XG4gICAgXHR0aGlzLnRleHR1cmUudXBsb2FkRGF0YShudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdGlmICggdGhpcy5zdGVuY2lsIClcbiAgICB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgc3RlbmNpbCBidWZmZXIgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlUkdCQSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHR2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbURhdGEoZ2wsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xuXHR0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSk7XG5cbiAgICBmYm8udW5iaW5kKCk7XG4gICAgXG4gICAgcmV0dXJuIGZibztcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlRmxvYXQzMiA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHQvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZS4uXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZS5mcm9tRGF0YShnbCwgZGF0YSwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpXG5cbiAgICBmYm8udW5iaW5kKCk7XG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lYnVmZmVyO1xuXG4iLCJcbnZhciBjb21waWxlUHJvZ3JhbSA9IHJlcXVpcmUoJy4vc2hhZGVyL2NvbXBpbGVQcm9ncmFtJyksXG5cdGV4dHJhY3RBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdEF0dHJpYnV0ZXMnKSxcblx0ZXh0cmFjdFVuaWZvcm1zID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdFVuaWZvcm1zJyksXG5cdGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IHJlcXVpcmUoJy4vc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCcpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBTaGFkZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xudmFyIFNoYWRlciA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0Ly8gRmlyc3QgY29tcGlsZSB0aGUgcHJvZ3JhbS4uXG5cdHRoaXMucHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXHQvLyBuZXh0IGV4dHJhY3QgdGhlIGF0dHJpYnV0ZXNcblx0dGhpcy5hdHRyaWJ1dGVzID0gZXh0cmFjdEF0dHJpYnV0ZXMoZ2wsIHRoaXMucHJvZ3JhbSk7IFxuXG4gICAgdmFyIHVuaWZvcm1EYXRhID0gZXh0cmFjdFVuaWZvcm1zKGdsLCB0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy51bmlmb3JtcyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCggZ2wsIHVuaWZvcm1EYXRhICk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgVGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBhIFdlYkdMIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gZm9ybWF0IHtudW1iZXJ9IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlJHQkFcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IHRoZSBnbCB0eXBlIG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5VTlNJR05FRF9CWVRFXG4gKi9cbnZhciBUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHQvLyBzb21lIHNldHRpbmdzLi5cblx0dGhpcy5taXBtYXAgPSBmYWxzZTtcblxuXHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdCB8fCBnbC5SR0JBO1xuXHR0aGlzLnR5cGUgPSB0eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7XG5cblxufVxuXG4vKipcbiAqIEBwYXJhbSB7UElYSS5nbENvcmUuVGV4dHVyZX0gW3Zhcm5hbWVdIFtkZXNjcmlwdGlvbl1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oc291cmNlKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblxuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgc291cmNlKTtcbn1cblxudmFyIEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IGZhbHNlO1xuXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWREYXRhID0gZnVuY3Rpb24oZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5iaW5kKCk7XG5cdFxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgdGhpcy53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG5cblx0aWYoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcblx0e1xuXHRcdGlmKCFGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUpXG5cdFx0e1xuXHRcdFx0dmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO1xuXHRcdFx0XG5cdFx0XHRpZihleHQpXG5cdFx0XHR7XG5cdFx0XHRcdEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHlwZSA9IGdsLkZMT0FUO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdC8vIFRPRE8gc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXNcblx0XHR0aGlzLnR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuXHR9XG5cblx0Ly8gd2hhdCB0eXBlIG9mIGRhdGE/XG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcblx0Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBkYXRhIHx8IG51bGwpO1xuXG59XG5cblRleHR1cmUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihsb2NhdGlvbilcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRpZihsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKVxuXHR7XG5cdFx0Z2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uKTtcblx0fVxuXG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1pbkZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGlmKHRoaXMubWlwbWFwKVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCk7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xuXHR9XHRcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWFnRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVNaXBtYXAgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHRoaXMubWlwbWFwID0gdHJ1ZTtcblx0Z2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZUxpbmVhclNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKHRydWUpO1xuXHR0aGlzLm1hZ0ZpbHRlcih0cnVlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTmVhcmVzdFNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKGZhbHNlKTtcblx0dGhpcy5tYWdGaWx0ZXIoZmFsc2UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwQ2xhbXAgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBSZXBlYXQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cdFxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5SRVBFQVQpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG59XG5cbi8vVGV4dHVyZS5cblRleHR1cmUuZnJvbVNvdXJjZSA9IGZ1bmN0aW9uKGdsLCBzb3VyY2UsIHByZW11bHRpcGx5QWxwaGEpXG57XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhIHx8IGZhbHNlO1xuXHR0ZXh0dXJlLnVwbG9hZChzb3VyY2UpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5UZXh0dXJlLmZyb21EYXRhID0gZnVuY3Rpb24oZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdC8vY29uc29sZS5sb2coZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnVwbG9hZERhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG4iLCJcbi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxuLy8gc3RhdGUgb2JqZWN0Ly9cblxuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChnbClcbntcblx0XG5cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gKFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpXG4gICAgKTtcblxuLy9cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gbnVsbDtcblxuXHRpZih0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbilcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvID0gdGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsgIFxuXHR9XG5cblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG5cdHRoaXMuZGlydHkgPSBmYWxzZTtcblxuXHRcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVydGV4QXJyYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFZlcnRleEFycmF5T2JqZWN0O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5uYXRpdmVWYW8pOyAgXG5cblx0XHRpZih0aGlzLmRpcnR5KVxuXHRcdHtcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0XHR9XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgXG5cdHtcblx0XHR2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW2ldO1xuXHRcdGF0dHJpYi5idWZmZXIuYmluZCgpO1x0XG5cblx0XHRhdHRyaWIuYXR0cmlidXRlLnBvaW50ZXIoYXR0cmliLnR5cGUsIGF0dHJpYi5ub3JtYWxpemVkLCBhdHRyaWIuc3RyaWRlLCBhdHRyaWIuc3RhcnQpOyBcblx0XHRcblx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWIuYXR0cmlidXRlLmxvY2F0aW9uKTtcblx0fTtcblxuXHR0aGlzLmluZGV4QnVmZmVyLmJpbmQoKTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgYXR0cmlidXRlLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXJ0KVxue1xuICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHtcbiAgICBcdGJ1ZmZlcjogXHRidWZmZXIsXG4gICAgXHRhdHRyaWJ1dGU6IFx0YXR0cmlidXRlLFxuXG4gICAgXHRsb2NhdGlvbjogXHRhdHRyaWJ1dGUubG9jYXRpb24sXG5cdCBcdHR5cGU6IFx0XHR0eXBlIHx8IHRoaXMuZ2wuRkxPQVQsXG5cdCBcdG5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWQgfHwgZmFsc2UsXG5cdCBcdHN0cmlkZTogXHRzdHJpZGUgfHwgMCxcblx0IFx0c3RhcnQ6IFx0XHRzdGFydCB8fCAwXG5cdH0pXG5cblx0dGhpcy5kaXJ0eSA9IHRydWU7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRpb25zKVxue1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBidWZmZXI7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHR5cGUsIHNpemUsIHN0YXJ0KVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5kcmF3RWxlbWVudHModHlwZSwgc2l6ZSwgZ2wuVU5TSUdORURfU0hPUlQsIHN0YXJ0KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBDb250ZXh0XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIENPTlRFWFRfVUlEID0gMDtcblxudmFyIGNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbihjYW52YXMsIG9wdGlvbnMpXG57XG4gICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRpb25zKSB8fCBcbiAgICBcdCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdsKVxuICAgIHtcbiAgICAgICAgLy8gZmFpbCwgbm90IGFibGUgdG8gZ2V0IGEgY29udGV4dFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHdlYkdMLiBUcnkgdXNpbmcgdGhlIGNhbnZhcyByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIC8vIG1pZ2h0IHdhbnQgdG8gcGhhc2UgdGhpcyBvdXQ/XG4gICAgZ2wuaWQgPSBDT05URVhUX1VJRCsrO1xuXG4gICAgcmV0dXJuIGdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbnRleHQ7XG5cbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBzZXRWZXJ0ZXhBdHRyaWJBcnJheXMgPSBmdW5jdGlvbiAoZ2wsIGF0dHJpYnMpXG57XHRcbiAgIC8vIGNvbnNvbGUubG9nKGdsLmlkKVxuICAgIHZhciBkYXRhID0gR0xfTUFQW2dsLmlkXTtcblxuICAgIGlmKCFkYXRhKVxuICAgIHtcblx0ICAgdmFyIG1heEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0XHRkYXRhID0gR0xfTUFQW2dsLmlkXSA9IHt0ZW1wQXR0cmliU3RhdGU6bmV3IEFycmF5KG1heEF0dHJpYnMpXG5cdFx0XHRcdCBcdCBcdFx0ICAgLGF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKX07XG5cdH1cblx0XG4gICAgdmFyIGksXG4gICAgXHR0ZW1wQXR0cmliU3RhdGUgPSBkYXRhLnRlbXBBdHRyaWJTdGF0ZSxcbiAgICBcdGF0dHJpYlN0YXRlID0gZGF0YS5hdHRyaWJTdGF0ZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wQXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yIChpIGluIGF0dHJpYnMpXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbYXR0cmlic1tpXS5sb2NhdGlvbl0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDE7IGkgPCBhdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChhdHRyaWJTdGF0ZVtpXSAhPT0gdGVtcEF0dHJpYlN0YXRlW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJTdGF0ZVtpXSA9IHRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM7IiwiXG5cblxuXG5jb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuICAgIHZhciBnbFZlcnRTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbnZhciBjb21waWxlU2hhZGVyID0gZnVuY3Rpb24gKGdsLCB0eXBlLCBzcmMpXG57XG4gICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuXG4gICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlUHJvZ3JhbTtcblxuIiwiXG5cbnZhciBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBzaXplKSBcbntcbiAgICBzd2l0Y2ggKHR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICBjYXNlICd2ZWMyJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjNCc6ICAgICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KDQgKiBzaXplKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnaXZlYzInOiAgIFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDIgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWM0JzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2wnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY2FzZSAnYnZlYzInOlxuXG4gICAgICAgICAgICByZXR1cm4gYm9vbGVhbkFycmF5KCAyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzQnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSg0ICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDFdKTtcblxuICAgICAgICBjYXNlICdtYXQzJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0NCc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMCwgMV0pO1xuICAgIH1cbn1cblxudmFyIGJvb2xlYW5BcnJheSA9IGZ1bmN0aW9uKHNpemUpXG57XG4gICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgXG4gICAge1xuICAgICAgICBhcnJheVtpXSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdFZhbHVlO1xuIiwiXG52YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIG1hcFNpemUgPSByZXF1aXJlKCcuL21hcFNpemUnKTtcblxudmFyIGV4dHJhY3RBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcblxuICAgIHZhciB0b3RhbEF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9BVFRSSUJVVEVTKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEF0dHJpYnV0ZXM7IGkrKykgXG4gICAge1xuICAgICAgICB2YXIgYXR0cmliRGF0YSA9IGdsLmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpKTtcbiAgICAgICAgdmFyIHR5cGUgPSBtYXBUeXBlKGdsLCBhdHRyaWJEYXRhLnR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNbYXR0cmliRGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgIHR5cGU6dHlwZSxcbiAgICAgICAgICAgIHNpemU6bWFwU2l6ZSh0eXBlKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOmdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGF0dHJpYkRhdGEubmFtZSksXG4gICAgICAgICAgICAvL1RPRE8gLSBtYWtlIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAgICAgICAgICAgIHBvaW50ZXI6ZnVuY3Rpb24odHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydCl7XG5cbiAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmxvY2F0aW9uLHRoaXMuc2l6ZSwgdHlwZSB8fCBnbC5GTE9BVCwgbm9ybWFsaXplZCB8fCBmYWxzZSwgc3RyaWRlIHx8IDAsIHN0YXJ0IHx8IDApOyBcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzOyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0cmFjdEF0dHJpYnV0ZXM7XG5cbiIsInZhciBtYXBUeXBlID0gcmVxdWlyZSgnLi9tYXBUeXBlJyk7XG52YXIgZGVmYXVsdFZhbHVlID0gcmVxdWlyZSgnLi9kZWZhdWx0VmFsdWUnKTtcblxuXG52YXIgZXh0cmFjdFVuaWZvcm1zID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG5cdHZhciB1bmlmb3JtcyA9IHt9O1xuXHRcbiAgICB2YXIgdG90YWxVbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbFVuaWZvcm1zOyBpKyspIFxuICAgIHtcbiAgICBcdHZhciB1bmlmb3JtRGF0YSA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSk7XG4gICAgXHR2YXIgbmFtZSA9IHVuaWZvcm1EYXRhLm5hbWUucmVwbGFjZSgvXFxbLio/XFxdLywgXCJcIik7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgdW5pZm9ybURhdGEudHlwZSApO1xuXG4gICAgXHR1bmlmb3Jtc1tuYW1lXSA9IHtcbiAgICBcdFx0dHlwZTp0eXBlLFxuICAgIFx0XHRzaXplOnVuaWZvcm1EYXRhLnNpemUsXG4gICAgXHRcdGxvY2F0aW9uOmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSxcbiAgICBcdFx0dmFsdWU6ZGVmYXVsdFZhbHVlKHR5cGUsIHVuaWZvcm1EYXRhLnNpemUpXG4gICAgXHR9XG4gICAgfTtcblx0XG5cdHJldHVybiB1bmlmb3JtcztcdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RVbmlmb3JtcztcblxuIiwiXG52YXIgZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gZnVuY3Rpb24oZ2wsIHVuaWZvcm1EYXRhKVxue1xuICAgIC8vIHRoaXMgaXMgdGhlIG9iamVjdCB3ZSB3aWxsIGJlIHNlbmRpbmcgYmFjay5cbiAgICAvLyBhbiBvYmplY3QgaGllcmFjaHkgd2lsbCBiZSBjcmVhdGVkIGZvciBzdHJ1Y3RzXG4gICAgdmFyIHVuaWZvcm1zID0ge2RhdGE6e319O1xuXG4gICAgdW5pZm9ybXMuZ2wgPSBnbDtcbiAgICBcbiAgICB2YXIgdW5pZm9ybUtleXM9IE9iamVjdC5rZXlzKHVuaWZvcm1EYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybUtleXMubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGZ1bGxOYW1lID0gdW5pZm9ybUtleXNbaV1cblxuICAgICAgICB2YXIgbmFtZVRva2VucyA9IGZ1bGxOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHZhciB1bmlmb3JtR3JvdXAgPSBnZXRVbmlmb3JtR3JvdXAobmFtZVRva2VucywgdW5pZm9ybXMpO1xuXG4gICAgICAgIHZhciB1bmlmb3JtID0gIHVuaWZvcm1EYXRhW2Z1bGxOYW1lXTtcbiAgICAgICAgdW5pZm9ybUdyb3VwLmRhdGFbbmFtZV0gPSB1bmlmb3JtO1xuXG4gICAgICAgIHVuaWZvcm1Hcm91cC5nbCA9IGdsO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bmlmb3JtR3JvdXAsIG5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2VuZXJhdGVHZXR0ZXIobmFtZSksXG4gICAgICAgICAgICBzZXQ6IGdlbmVyYXRlU2V0dGVyKG5hbWUsIHVuaWZvcm0pXG4gICAgICAgIH0pXG4gICAgfTtcblxuICAgIHJldHVybiB1bmlmb3Jtcztcbn1cblxudmFyIGdlbmVyYXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSlcbntcblx0dmFyIHRlbXBsYXRlID0gZ2V0dGVyVGVtcGxhdGUucmVwbGFjZSgnJSUnLCBuYW1lKTtcblx0cmV0dXJuIG5ldyBGdW5jdGlvbih0ZW1wbGF0ZSk7XG59XG5cbnZhciBnZW5lcmF0ZVNldHRlciA9IGZ1bmN0aW9uKG5hbWUsIHVuaWZvcm0pXG57XG4gICAgdmFyIHRlbXBsYXRlID0gc2V0dGVyVGVtcGxhdGUucmVwbGFjZSgvJSUvZywgbmFtZSk7XG4gICAgdmFyIHNldFRlbXBsYXRlXG4gICAgXG4gICAgaWYodW5pZm9ybS5zaXplID09PSAxKVxuICAgIHtcbiAgICAgICAgc2V0VGVtcGxhdGUgPSBHTFNMX1RPX1NJTkdMRV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19BUlJBWV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuXG4gICAgaWYoc2V0VGVtcGxhdGUpXG4gICAge1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIlxcbnRoaXMuZ2wuXCIgKyBzZXRUZW1wbGF0ZSArIFwiO1wiO1xuICAgIH1cblxuICBcdHJldHVybiBuZXcgRnVuY3Rpb24oJ3ZhbHVlJywgdGVtcGxhdGUpO1xufVxuXG52YXIgZ2V0VW5pZm9ybUdyb3VwID0gZnVuY3Rpb24obmFtZVRva2VucywgdW5pZm9ybSlcbntcbiAgICB2YXIgY3VyID0gdW5pZm9ybTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZVRva2Vucy5sZW5ndGggLSAxOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIG8gPSBjdXJbbmFtZVRva2Vuc1tpXV0gfHwge2RhdGE6e319O1xuICAgICAgICBjdXJbbmFtZVRva2Vuc1tpXV0gPSBvO1xuICAgICAgICBjdXIgPSBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gY3VyXG59XG5cbnZhciBnZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAncmV0dXJuIHRoaXMuZGF0YS4lJS52YWx1ZTsnLFxuXS5qb2luKCdcXG4nKTtcblxudmFyIHNldHRlclRlbXBsYXRlID0gW1xuICAgICd0aGlzLmRhdGEuJSUudmFsdWUgPSB2YWx1ZTsnLFxuICAgICd2YXIgbG9jYXRpb24gPSB0aGlzLmRhdGEuJSUubG9jYXRpb247J1xuXS5qb2luKCdcXG4nKTtcblxuXG52YXIgR0xTTF9UT19TSU5HTEVfU0VUVEVSUyA9IHtcblxuICAgICdmbG9hdCc6ICAgICd1bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ3ZlYzQnOiAgICAgJ3VuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdidmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdidmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ21hdDInOiAgICAgJ3VuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuICAgICdtYXQzJzogICAgICd1bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0NCc6ICAgICAndW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG5cbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbnZhciBHTFNMX1RPX0FSUkFZX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpJyxcblxuICAgICd2ZWMyJzogICAgICd1bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWMzJzogICAgICd1bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgIFx0XG4gICAgJ2ludCc6ICAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgIFxuICAgICdzYW1wbGVyMkQnOid1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0O1xuXG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbih0eXBlKSBcbnsgXG4gICAgcmV0dXJuIEdMU0xfVE9fU0laRVt0eXBlXTtcbn1cblxuXG52YXIgR0xTTF9UT19TSVpFID0ge1xuICAgICdmbG9hdCc6ICAgIDEsXG4gICAgJ3ZlYzInOiAgICAgMixcbiAgICAndmVjMyc6ICAgICAzLFxuICAgICd2ZWM0JzogICAgIDQsXG5cbiAgICAnaW50JzogICAgICAxLFxuICAgICdpdmVjMic6ICAgIDIsXG4gICAgJ2l2ZWMzJzogICAgMyxcbiAgICAnaXZlYzQnOiAgICA0LFxuXG4gICAgJ2Jvb2wnOiAgICAgMSxcbiAgICAnYnZlYzInOiAgICAyLFxuICAgICdidmVjMyc6ICAgIDMsXG4gICAgJ2J2ZWM0JzogICAgNCxcblxuICAgICdtYXQyJzogICAgIDQsXG4gICAgJ21hdDMnOiAgICAgOSxcbiAgICAnbWF0NCc6ICAgICAxNixcblxuICAgICdzYW1wbGVyMkQnOiAgMVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFNpemU7XG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbihnbCwgdHlwZSkgXG57XG4gICAgaWYoIUdMX1RBQkxFKSBcbiAgICB7XG4gICAgICAgIHZhciB0eXBlTmFtZXMgPSBPYmplY3Qua2V5cyhHTF9UT19HTFNMX1RZUEVTKTtcblxuICAgICAgICBHTF9UQUJMRSA9IHt9O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlTmFtZXMubGVuZ3RoOyArK2kpIFxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdG4gPSB0eXBlTmFtZXNbaV07XG4gICAgICAgICAgICBHTF9UQUJMRVsgZ2xbdG5dIF0gPSBHTF9UT19HTFNMX1RZUEVTW3RuXTtcbiAgICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gR0xfVEFCTEVbdHlwZV07XG59XG5cbnZhciBHTF9UQUJMRSA9IG51bGw7XG5cbnZhciBHTF9UT19HTFNMX1RZUEVTID0ge1xuICAnRkxPQVQnOiAgICAgICAnZmxvYXQnLFxuICAnRkxPQVRfVkVDMic6ICAndmVjMicsXG4gICdGTE9BVF9WRUMzJzogICd2ZWMzJyxcbiAgJ0ZMT0FUX1ZFQzQnOiAgJ3ZlYzQnLFxuXG4gICdJTlQnOiAgICAgICAgICdpbnQnLFxuICAnSU5UX1ZFQzInOiAgICAnaXZlYzInLFxuICAnSU5UX1ZFQzMnOiAgICAnaXZlYzMnLFxuICAnSU5UX1ZFQzQnOiAgICAnaXZlYzQnLFxuICBcbiAgJ0JPT0wnOiAgICAgICAgJ2Jvb2wnLFxuICAnQk9PTF9WRUMyJzogICAnYnZlYzInLFxuICAnQk9PTF9WRUMzJzogICAnYnZlYzMnLFxuICAnQk9PTF9WRUM0JzogICAnYnZlYzQnLFxuICBcbiAgJ0ZMT0FUX01BVDInOiAgJ21hdDInLFxuICAnRkxPQVRfTUFUMyc6ICAnbWF0MycsXG4gICdGTE9BVF9NQVQ0JzogICdtYXQ0JyxcbiAgXG4gICdTQU1QTEVSXzJEJzogICdzYW1wbGVyMkQnICBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiLyohXG4gKiBhc3luY1xuICogaHR0cHM6Ly9naXRodWIuY29tL2Nhb2xhbi9hc3luY1xuICpcbiAqIENvcHlyaWdodCAyMDEwLTIwMTQgQ2FvbGFuIE1jTWFob25cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9Cb29sKHYpIHtcbiAgICAgICAgcmV0dXJuICEhdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90SWQodikge1xuICAgICAgICByZXR1cm4gIXY7XG4gICAgfVxuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBwcmV2aW91c19hc3luYztcblxuICAgIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAgIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICAgIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsIHx8XG4gICAgICAgICAgICB0aGlzO1xuXG4gICAgaWYgKHJvb3QgIT0gbnVsbCkge1xuICAgICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsaXR5IGZ1bmN0aW9ucyAvLy8vXG5cbiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIHZhciBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xuXG4gICAgLy8gUG9ydGVkIGZyb20gdW5kZXJzY29yZS5qcyBpc09iamVjdFxuICAgIHZhciBfaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2lzQXJyYXlMaWtlKGFycikge1xuICAgICAgICByZXR1cm4gX2lzQXJyYXkoYXJyKSB8fCAoXG4gICAgICAgICAgICAvLyBoYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAgICAgICAgdHlwZW9mIGFyci5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgICAgYXJyLmxlbmd0aCAlIDEgPT09IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXJyYXlFYWNoKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaW5kZXhdLCBpbmRleCwgYXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IGFyci5sZW5ndGgsXG4gICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcmFuZ2UoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9tYXAoQXJyYXkoY291bnQpLCBmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gaTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZHVjZShhcnIsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgIF9hcnJheUVhY2goYXJyLCBmdW5jdGlvbiAoeCwgaSwgYSkge1xuICAgICAgICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHgsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZvckVhY2hPZihvYmplY3QsIGl0ZXJhdG9yKSB7XG4gICAgICAgIF9hcnJheUVhY2goX2tleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaXRlcmF0b3Iob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbmRleE9mKGFyciwgaXRlbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9rZXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW47XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBpZiAoX2lzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGkgOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBfa2V5cyhjb2xsKTtcbiAgICAgICAgICAgIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ga2V5c1tpXSA6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2ltaWxhciB0byBFUzYncyByZXN0IHBhcmFtIChodHRwOi8vYXJpeWEub2ZpbGFicy5jb20vMjAxMy8wMy9lczYtYW5kLXJlc3QtcGFyYW1ldGVyLmh0bWwpXG4gICAgLy8gVGhpcyBhY2N1bXVsYXRlcyB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGFuIGFycmF5LCBhZnRlciBhIGdpdmVuIGluZGV4LlxuICAgIC8vIEZyb20gdW5kZXJzY29yZS5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMjE0MCkuXG4gICAgZnVuY3Rpb24gX3Jlc3RQYXJhbShmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IHVudXNlZCBidXQgaGFuZGxlIGNhc2VzIG91dHNpZGUgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQ6XG4gICAgICAgICAgICAvLyB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgIC8vIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIC8vICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgICAgICAgIC8vIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IodmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG5cbiAgICAvLyBjYXB0dXJlIHRoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIGd1YXJkIGFnYWluc3QgZmFrZVRpbWVyIG1vY2tzXG4gICAgdmFyIF9zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcblxuICAgIHZhciBfZGVsYXkgPSBfc2V0SW1tZWRpYXRlID8gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgX3NldEltbWVkaWF0ZShmbik7XG4gICAgfSA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IF9kZWxheTtcbiAgICB9XG4gICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gX3NldEltbWVkaWF0ZSA/IF9kZWxheSA6IGFzeW5jLm5leHRUaWNrO1xuXG5cbiAgICBhc3luYy5mb3JFYWNoID1cbiAgICBhc3luYy5lYWNoID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2YoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID1cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cblxuICAgIGFzeW5jLmZvckVhY2hMaW1pdCA9XG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2VhY2hPZkxpbWl0KGxpbWl0KShhcnIsIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZiA9XG4gICAgYXN5bmMuZWFjaE9mID0gZnVuY3Rpb24gKG9iamVjdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdCB8fCBbXTtcblxuICAgICAgICB2YXIgaXRlciA9IF9rZXlJdGVyYXRvcihvYmplY3QpO1xuICAgICAgICB2YXIga2V5LCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgICAgIHdoaWxlICgoa2V5ID0gaXRlcigpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXksIG9ubHlfb25jZShkb25lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkID09PSAwKSBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgICAgY29tcGxldGVkLS07XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGtleSBpcyBudWxsIGluIGNhc2UgaXRlcmF0b3IgaXNuJ3QgZXhoYXVzdGVkXG4gICAgICAgICAgICAvLyBhbmQgZG9uZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBudWxsICYmIGNvbXBsZXRlZCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaE9mU2VyaWVzID1cbiAgICBhc3luYy5lYWNoT2ZTZXJpZXMgPSBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShpdGVyYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLmZvckVhY2hPZkxpbWl0ID1cbiAgICBhc3luYy5lYWNoT2ZMaW1pdCA9IGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgX2VhY2hPZkxpbWl0KGxpbWl0KShvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9lYWNoT2ZMaW1pdChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgICAgICBvYmogPSBvYmogfHwgW107XG4gICAgICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUgJiYgcnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmICFlcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBuZXh0S2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iob2JqW2tleV0sIGtleSwgb25seV9vbmNlKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZG9QYXJhbGxlbChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oYXN5bmMuZWFjaE9mLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWxMaW1pdChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKF9lYWNoT2ZMaW1pdChsaW1pdCksIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9TZXJpZXMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZlNlcmllcywgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UoYXJyKSA/IFtdIDoge307XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih2YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9hc3luY01hcCk7XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMuaW5qZWN0ID1cbiAgICBhc3luYy5mb2xkbCA9XG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hPZlNlcmllcyhhcnIsIGZ1bmN0aW9uICh4LCBpLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgeCwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBtZW1vKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvbGRyID1cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgaWRlbnRpdHkpLnJldmVyc2UoKTtcbiAgICAgICAgYXN5bmMucmVkdWNlKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0b3I7XG4gICAgICAgICAgICBpdGVyYXRvciA9IG1lbW87XG4gICAgICAgICAgICBtZW1vID0gX2lzQXJyYXkoYXJyKSA/IFtdIDoge307XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoT2YoYXJyLCBmdW5jdGlvbih2LCBrLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgdiwgaywgY2IpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4OiBpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5zZWxlY3QgPVxuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RMaW1pdCA9XG4gICAgYXN5bmMuZmlsdGVyTGltaXQgPSBkb1BhcmFsbGVsTGltaXQoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RTZXJpZXMgPVxuICAgIGFzeW5jLmZpbHRlclNlcmllcyA9IGRvU2VyaWVzKF9maWx0ZXIpO1xuXG4gICAgZnVuY3Rpb24gX3JlamVjdChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9maWx0ZXIoZWFjaGZuLCBhcnIsIGZ1bmN0aW9uKHZhbHVlLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBjYighdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBhc3luYy5yZWplY3QgPSBkb1BhcmFsbGVsKF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdFNlcmllcyA9IGRvU2VyaWVzKF9yZWplY3QpO1xuXG4gICAgZnVuY3Rpb24gX2NyZWF0ZVRlc3RlcihlYWNoZm4sIGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYikge1xuICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIGNiKGdldFJlc3VsdChmYWxzZSwgdm9pZCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZSh4LCBfLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYiAmJiBjaGVjayh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoZ2V0UmVzdWx0KHRydWUsIHgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgZWFjaGZuKGFyciwgbGltaXQsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2IgPSBpdGVyYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGxpbWl0O1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy5hbnkgPVxuICAgIGFzeW5jLnNvbWUgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5zb21lTGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCB0b0Jvb2wsIGlkZW50aXR5KTtcblxuICAgIGFzeW5jLmFsbCA9XG4gICAgYXN5bmMuZXZlcnkgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgbm90SWQsIG5vdElkKTtcblxuICAgIGFzeW5jLmV2ZXJ5TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBub3RJZCwgbm90SWQpO1xuXG4gICAgZnVuY3Rpb24gX2ZpbmRHZXRSZXN1bHQodiwgeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgYXN5bmMuZGV0ZWN0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0U2VyaWVzID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZTZXJpZXMsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuXG4gICAgYXN5bmMuc29ydEJ5ID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLm1hcChhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKGVyciwgY3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7dmFsdWU6IHgsIGNyaXRlcmlhOiBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChjb21wYXJhdG9yKSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNvbmN1cnJlbmN5LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gcmVtYWluaW5nVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBfaW5kZXhPZihsaXN0ZW5lcnMsIGZuKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRhc2tDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLS07XG4gICAgICAgICAgICBfYXJyYXlFYWNoKGxpc3RlbmVycy5zbGljZSgwKSwgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBfYXJyYXlFYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9mb3JFYWNoT2YocmVzdWx0cywgZnVuY3Rpb24odmFsLCBya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHRhc2tDb21wbGV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRlYWQtbG9ja3NcbiAgICAgICAgICAgIHZhciBsZW4gPSByZXF1aXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZGVwO1xuICAgICAgICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZGVwID0gdGFza3NbcmVxdWlyZXNbbGVuXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGluZXhpc3RhbnQgZGVwZW5kZW5jeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzQXJyYXkoZGVwKSAmJiBfaW5kZXhPZihkZXAsIGspID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXMgY3ljbGljIGRlcGVuZGVuY2llcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5uaW5nVGFza3MgPCBjb25jdXJyZW5jeSAmJiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzKys7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLnJldHJ5ID0gZnVuY3Rpb24odGltZXMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBERUZBVUxUX1RJTUVTID0gNTtcbiAgICAgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuXG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbDogREVGQVVMVF9JTlRFUlZBTFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KXtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0ID09PSAnbnVtYmVyJyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodCwgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYodHlwZW9mIHQgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBhY2MudGltZXMgPSBwYXJzZUludCh0LnRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgICAgICAgICBhY2MuaW50ZXJ2YWwgPSBwYXJzZUludCh0LmludGVydmFsLCAxMCkgfHwgREVGQVVMVF9JTlRFUlZBTDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGZvciBcXCd0aW1lc1xcJzogJyArIHR5cGVvZiB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgMSB8fCBsZW5ndGggPiAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIC0gbXVzdCBiZSBlaXRoZXIgKHRhc2spLCAodGFzaywgY2FsbGJhY2spLCAodGltZXMsIHRhc2spIG9yICh0aW1lcywgdGFzaywgY2FsbGJhY2spJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoIDw9IDIgJiYgdHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRzLCB0aW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBvcHRzLnRhc2sgPSB0YXNrO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRUYXNrKHdyYXBwZWRDYWxsYmFjaywgd3JhcHBlZFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCh0YXNrLCBmaW5hbEF0dGVtcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VyaWVzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayhmdW5jdGlvbihlcnIsIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXNDYWxsYmFjayghZXJyIHx8IGZpbmFsQXR0ZW1wdCwge2VycjogZXJyLCByZXN1bHQ6IHJlc3VsdH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVkUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmV0cnlJbnRlcnZhbChpbnRlcnZhbCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAob3B0cy50aW1lcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsQXR0ZW1wdCA9ICEob3B0cy50aW1lcy09MSk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQob3B0cy50YXNrLCBmaW5hbEF0dGVtcHQpKTtcbiAgICAgICAgICAgICAgICBpZighZmluYWxBdHRlbXB0ICYmIG9wdHMuaW50ZXJ2YWwgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUludGVydmFsKG9wdHMuaW50ZXJ2YWwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IG9wdHMuY2FsbGJhY2spKGRhdGEuZXJyLCBkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIG9wdHMuY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2s7XG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBJdGVyYXRvcihpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgW2Vycl0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuc3VyZUFzeW5jKGl0ZXJhdG9yKS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfcGFyYWxsZWwoZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IF9pc0FycmF5TGlrZSh0YXNrcykgPyBbXSA6IHt9O1xuXG4gICAgICAgIGVhY2hmbih0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGtleSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRhc2soX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2YsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChfZWFjaE9mTGltaXQobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKGFzeW5jLmVhY2hPZlNlcmllcywgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuaXRlcmF0b3IgPSBmdW5jdGlvbiAodGFza3MpIHtcbiAgICAgICAgZnVuY3Rpb24gbWFrZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm4ubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgdGFza3MubGVuZ3RoIC0gMSkgPyBtYWtlQ2FsbGJhY2soaW5kZXggKyAxKTogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIChmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoY2FsbEFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLCBhcmdzLmNvbmNhdChjYWxsQXJncylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gX2NvbmNhdChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoeSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG4gICAgICAgIGlmICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0LmFwcGx5KHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1doaWxzdCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiArK2NhbGxzIDw9IDEgfHwgdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZHVyaW5nID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG5cbiAgICAgICAgdmFyIG5leHQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjaGVjayk7XG4gICAgICAgICAgICAgICAgdGVzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24oZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRydXRoKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QoY2hlY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb0R1cmluZyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgYXN5bmMuZHVyaW5nKGZ1bmN0aW9uKG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjYWxscysrIDwgMSkge1xuICAgICAgICAgICAgICAgIG5leHQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3F1ZXVlKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHBvcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayB8fCBub29wXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9uZXh0KHEsIHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIF9hcnJheUVhY2godGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2god29ya2Vyc0xpc3QsIGZ1bmN0aW9uICh3b3JrZXIsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya2VyID09PSB0YXNrICYmICFyZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBub29wLFxuICAgICAgICAgICAgZW1wdHk6IG5vb3AsXG4gICAgICAgICAgICBkcmFpbjogbm9vcCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5kcmFpbiA9IG5vb3A7XG4gICAgICAgICAgICAgICAgcS50YXNrcyA9IFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnQ6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrcyA9IHEucGF5bG9hZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS5wYXlsb2FkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS50YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9tYXAodGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5wdXNoKHRhc2tzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShfbmV4dChxLCB0YXNrcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyKGRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtlcnNMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSBmYWxzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bWVDb3VudCA9IE1hdGgubWluKHEuY29uY3VycmVuY3ksIHEudGFza3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHJlc3VtZUNvdW50OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBxID0gX3F1ZXVlKGZ1bmN0aW9uIChpdGVtcywgY2IpIHtcbiAgICAgICAgICAgIHdvcmtlcihpdGVtc1swXSwgY2IpO1xuICAgICAgICB9LCBjb25jdXJyZW5jeSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLnByaW9yaXR5UXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuXG4gICAgICAgIGZ1bmN0aW9uIF9jb21wYXJlVGFza3MoYSwgYil7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgICB2YXIgYmVnID0gLTEsXG4gICAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgc2VxdWVuY2VbbWlkXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWcgPSBtaWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmVnO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBfcXVldWUod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2NvbnNvbGVfZm4obmFtZSkge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2goYXJncywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlW25hbWVdKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgaWRlbnRpdHk7XG4gICAgICAgIHZhciBtZW1vaXplZCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24gbWVtb2l6ZWQoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBtZW1vW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0gPSBbY2FsbGJhY2tdO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW9ba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH07XG5cbiAgICBhc3luYy51bm1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3RpbWVzKG1hcHBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG1hcHBlcihfcmFuZ2UoY291bnQpLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jLnRpbWVzID0gX3RpbWVzKGFzeW5jLm1hcCk7XG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBfdGltZXMoYXN5bmMubWFwU2VyaWVzKTtcbiAgICBhc3luYy50aW1lc0xpbWl0ID0gZnVuY3Rpb24gKGNvdW50LCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5tYXBMaW1pdChfcmFuZ2UoY291bnQpLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VxID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5vb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnJlZHVjZShmbnMsIGFyZ3MsIGZ1bmN0aW9uIChuZXdhcmdzLCBmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBuZXdhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBuZXh0YXJncykge1xuICAgICAgICAgICAgICAgICAgICBjYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY29tcG9zZSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIF9hcHBseUVhY2goZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uKGZucywgYXJncykge1xuICAgICAgICAgICAgdmFyIGdvID0gX3Jlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgXywgY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncy5jb25jYXQoW2NiXSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ28uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ287XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmFwcGx5RWFjaCA9IF9hcHBseUVhY2goYXN5bmMuZWFjaE9mKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZlNlcmllcyk7XG5cblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seV9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIgdGFzayA9IGVuc3VyZUFzeW5jKGZuKTtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmVuc3VyZUFzeW5jID0gZW5zdXJlQXN5bmM7XG5cbiAgICBhc3luYy5jb25zdGFudCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICAgIHZhciBhcmdzID0gW251bGxdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhc3luYy53cmFwU3luYyA9XG4gICAgYXN5bmMuYXN5bmNpZnkgPSBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChfaXNPYmplY3QocmVzdWx0KSAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIubWVzc2FnZSA/IGVyciA6IG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcblxuICAgIGRpbSA9IGRpbSB8fCAyO1xuXG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLFxuICAgICAgICBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcbiAgICAgICAgdHJpYW5nbGVzID0gW107XG5cbiAgICBpZiAoIW91dGVyTm9kZSkgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBzaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgc2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIHN1bSA9IDAsXG4gICAgICAgIGksIGosIGxhc3Q7XG5cbiAgICAvLyBjYWxjdWxhdGUgb3JpZ2luYWwgd2luZGluZyBvcmRlciBvZiBhIHBvbHlnb24gcmluZ1xuICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuXG4gICAgLy8gbGluayBwb2ludHMgaW50byBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHN1bSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG4gICAgaWYgKCFzdGFydCkgcmV0dXJuIHN0YXJ0O1xuICAgIGlmICghZW5kKSBlbmQgPSBzdGFydDtcblxuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcCA9IGVuZCA9IHAucHJldjtcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuICAgIHJldHVybiBlbmQ7XG59XG5cbi8vIG1haW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBhcyBhIGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIHBhc3MpIHtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuICAgIGlmICghcGFzcyAmJiBzaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICB2YXIgc3RvcCA9IGVhcixcbiAgICAgICAgcHJldiwgbmV4dDtcblxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuICAgIHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcbiAgICAgICAgcHJldiA9IGVhci5wcmV2O1xuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XG5cbiAgICAgICAgaWYgKHNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIHNpemUpIDogaXNFYXIoZWFyKSkge1xuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXG4gICAgICAgICAgICByZW1vdmVOb2RlKGVhcik7XG5cbiAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRpY2UgbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhlYXIsIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIHNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICAvLyBmaXJzdCBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBpbmNyZWFzaW5nIHotb3JkZXJcbiAgICB2YXIgcCA9IGVhci5uZXh0WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyB0aGVuIGxvb2sgZm9yIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICBwID0gZWFyLnByZXZaO1xuXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgLy8gYSBzZWxmLWludGVyc2VjdGlvbiB3aGVyZSBlZGdlICh2W2ktMV0sdltpXSkgaW50ZXJzZWN0cyAodltpKzFdLHZbaSsyXSlcbiAgICAgICAgaWYgKGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHA7XG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBsb29rIGZvciBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgICAgICAgICBhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiA9IGIubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBhID0gYS5uZXh0O1xuICAgIH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG4gICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuICAgICAgICBpZiAobGlzdCA9PT0gbGlzdC5uZXh0KSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuICAgICAgICBxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcbiAgICB9XG5cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0ZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlWChhLCBiKSB7XG4gICAgcmV0dXJuIGEueCAtIGIueDtcbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkge1xuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xuICAgICAgICBmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcbiAgICB9XG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBwID0gb3V0ZXJOb2RlLFxuICAgICAgICBoeCA9IGhvbGUueCxcbiAgICAgICAgaHkgPSBob2xlLnksXG4gICAgICAgIHF4ID0gLUluZmluaXR5LFxuICAgICAgICBtO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgdGFuO1xuXG4gICAgcCA9IG0ubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBzdG9wKSB7XG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG0ueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG0ueSA/IGh4IDogcXgsIGh5LCBtLngsIG0ueSwgaHkgPCBtLnkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuICAgICAgICAgICAgaWYgKCh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIHAueCA+IG0ueCkpICYmIGxvY2FsbHlJbnNpZGUocCwgaG9sZSkpIHtcbiAgICAgICAgICAgICAgICBtID0gcDtcbiAgICAgICAgICAgICAgICB0YW5NaW4gPSB0YW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBtO1xufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgIHAucHJldlogPSBwLnByZXY7XG4gICAgICAgIHAubmV4dFogPSBwLm5leHQ7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgcC5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKHApO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIGRvIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHFTaXplID09PSAwIHx8ICFxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAueiA8PSBxLnopIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuICAgICAgICBpblNpemUgKj0gMjtcblxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIHNpemUgb2YgdGhlIGRhdGEgYm91bmRpbmcgYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpIC8gc2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpIC8gc2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LngpIGxlZnRtb3N0ID0gcDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gbGVmdG1vc3Q7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcbiAgICByZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXF1YWxzKGEsIGIpIHx8IGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcbiAgICAgICAgICAgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKTtcbn1cblxuLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xufVxuXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXG4gICAgICAgICAgIGFyZWEocDIsIHEyLCBwMSkgPiAwICE9PSBhcmVhKHAyLCBxMiwgcTEpID4gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG4vLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG4gICAgICAgIGFuID0gYS5uZXh0LFxuICAgICAgICBicCA9IGIucHJldjtcblxuICAgIGEubmV4dCA9IGI7XG4gICAgYi5wcmV2ID0gYTtcblxuICAgIGEyLm5leHQgPSBhbjtcbiAgICBhbi5wcmV2ID0gYTI7XG5cbiAgICBiMi5uZXh0ID0gYTI7XG4gICAgYTIucHJldiA9IGIyO1xuXG4gICAgYnAubmV4dCA9IGIyO1xuICAgIGIyLnByZXYgPSBicDtcblxuICAgIHJldHVybiBiMjtcbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgcC5wcmV2ID0gcDtcbiAgICAgICAgcC5uZXh0ID0gcDtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHAubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgcC5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xuICAgICAgICBsYXN0Lm5leHQgPSBwO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XG4gICAgcC5uZXh0LnByZXYgPSBwLnByZXY7XG4gICAgcC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cbiAgICBpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG4gICAgaWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcbiAgICAvLyB2ZXJ0aWNlIGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRpY2Ugbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vXG4vLyBXZSBzdG9yZSBvdXIgRUUgb2JqZWN0cyBpbiBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBgfmAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Qgb3ZlcnJpZGRlbiBvclxuLy8gdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy8gV2UgYWxzbyBhc3N1bWUgdGhhdCBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV2ZW50IG5hbWVcbi8vIGlzIGFuIEVTNiBTeW1ib2wuXG4vL1xudmFyIHByZWZpeCA9IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nID8gJ34nIDogZmFsc2U7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgRXZlbnRFbWl0dGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBDb250ZXh0IGZvciBmdW5jdGlvbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSBlbWl0IG9uY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTWluaW1hbCBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIEV2ZW50RW1pdHRlciBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7IC8qIE5vdGhpbmcgdG8gc2V0ICovIH1cblxuLyoqXG4gKiBIb2xkcyB0aGUgYXNzaWduZWQgRXZlbnRFbWl0dGVycyBieSBuYW1lLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBhc3NpZ25lZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBleGlzdHMgV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtBcnJheXxCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQsIGV4aXN0cykge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgYXZhaWxhYmxlID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChleGlzdHMpIHJldHVybiAhIWF2YWlsYWJsZTtcbiAgaWYgKCFhdmFpbGFibGUpIHJldHVybiBbXTtcbiAgaWYgKGF2YWlsYWJsZS5mbikgcmV0dXJuIFthdmFpbGFibGUuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXZhaWxhYmxlLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGF2YWlsYWJsZVtpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB0byBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJbmRpY2F0aW9uIGlmIHdlJ3ZlIGVtaXR0ZWQgYW4gZXZlbnQuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IEV2ZW50TGlzdGVuZXIgZm9yIHRoZSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0b259IGZuIENhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGQgYW4gRXZlbnRMaXN0ZW5lciB0aGF0J3Mgb25seSBjYWxsZWQgb25jZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IHRoaXMsIHRydWUpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKSB0aGlzLl9ldmVudHMgPSBwcmVmaXggPyB7fSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHRoaXMuX2V2ZW50c1tldnRdID0gbGlzdGVuZXI7XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5fZXZlbnRzW2V2dF0uZm4pIHRoaXMuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIGVsc2UgdGhpcy5fZXZlbnRzW2V2dF0gPSBbXG4gICAgICB0aGlzLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3ZSB3YW50IHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciB0aGF0IHdlIG5lZWQgdG8gZmluZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgT25seSByZW1vdmUgbGlzdGVuZXJzIG1hdGNoaW5nIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmNlIGxpc3RlbmVycy5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGV2ZW50cyA9IFtdO1xuXG4gIGlmIChmbikge1xuICAgIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgICAgbGlzdGVuZXJzLmZuICE9PSBmblxuICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzLm9uY2UpXG4gICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVycy5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm5cbiAgICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpXG4gICAgICAgICAgfHwgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gIC8vXG4gIGlmIChldmVudHMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbZXZ0XTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycyBvciBvbmx5IHRoZSBsaXN0ZW5lcnMgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvci5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcztcblxuICBpZiAoZXZlbnQpIGRlbGV0ZSB0aGlzLl9ldmVudHNbcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudF07XG4gIGVsc2UgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYXBwbHkgYW55bW9yZS5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLypqc2hpbnQgb25ldmFyOiBmYWxzZSwgaW5kZW50OjQgKi9cbi8qZ2xvYmFsIHNldEltbWVkaWF0ZTogZmFsc2UsIHNldFRpbWVvdXQ6IGZhbHNlLCBjb25zb2xlOiBmYWxzZSAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciByb290LCBwcmV2aW91c19hc3luYztcblxuICAgIHJvb3QgPSB0aGlzO1xuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgIHByZXZpb3VzX2FzeW5jID0gcm9vdC5hc3luYztcbiAgICB9XG5cbiAgICBhc3luYy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmFzeW5jID0gcHJldmlvdXNfYXN5bmM7XG4gICAgICAgIHJldHVybiBhc3luYztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb25seV9vbmNlKGZuKSB7XG4gICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGNhbGxlZCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseShyb290LCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIHZhciBfZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaV0sIGksIGFycik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIF9tYXAgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBpZiAoYXJyLm1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5tYXAoaXRlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih4LCBpLCBhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgdmFyIF9yZWR1Y2UgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBpZiAoYXJyLnJlZHVjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8pO1xuICAgICAgICB9XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICB2YXIgX2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIC8vLy8gZXhwb3J0ZWQgYXN5bmMgbW9kdWxlIGZ1bmN0aW9ucyAvLy8vXG5cbiAgICAvLy8vIG5leHRUaWNrIGltcGxlbWVudGF0aW9uIHdpdGggYnJvd3Nlci1jb21wYXRpYmxlIGZhbGxiYWNrIC8vLy9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICEocHJvY2Vzcy5uZXh0VGljaykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgICBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAvLyBub3QgYSBkaXJlY3QgYWxpYXMgZm9yIElFMTAgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBvbmx5X29uY2UoZG9uZSkgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaCA9IGFzeW5jLmVhY2g7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmICghYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgIHZhciBpdGVyYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA+PSBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2hTZXJpZXMgPSBhc3luYy5lYWNoU2VyaWVzO1xuXG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZm4gPSBfZWFjaExpbWl0KGxpbWl0KTtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgW2FyciwgaXRlcmF0b3IsIGNhbGxiYWNrXSk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPSBhc3luYy5lYWNoTGltaXQ7XG5cbiAgICB2YXIgX2VhY2hMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBpZiAoIWFyci5sZW5ndGggfHwgbGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmIHN0YXJ0ZWQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihhcnJbc3RhcnRlZCAtIDFdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBkb1BhcmFsbGVsID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZG9QYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24obGltaXQsIGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW19lYWNoTGltaXQobGltaXQpXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvU2VyaWVzID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hTZXJpZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuXG4gICAgdmFyIF9hc3luY01hcCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW3guaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX21hcExpbWl0KGxpbWl0KShhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHZhciBfbWFwTGltaXQgPSBmdW5jdGlvbihsaW1pdCkge1xuICAgICAgICByZXR1cm4gZG9QYXJhbGxlbExpbWl0KGxpbWl0LCBfYXN5bmNNYXApO1xuICAgIH07XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gaW5qZWN0IGFsaWFzXG4gICAgYXN5bmMuaW5qZWN0ID0gYXN5bmMucmVkdWNlO1xuICAgIC8vIGZvbGRsIGFsaWFzXG4gICAgYXN5bmMuZm9sZGwgPSBhc3luYy5yZWR1Y2U7XG5cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIC8vIGZvbGRyIGFsaWFzXG4gICAgYXN5bmMuZm9sZHIgPSBhc3luYy5yZWR1Y2VSaWdodDtcblxuICAgIHZhciBfZmlsdGVyID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZmlsdGVyID0gZG9QYXJhbGxlbChfZmlsdGVyKTtcbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcbiAgICAvLyBzZWxlY3QgYWxpYXNcbiAgICBhc3luYy5zZWxlY3QgPSBhc3luYy5maWx0ZXI7XG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID0gYXN5bmMuZmlsdGVyU2VyaWVzO1xuXG4gICAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIHZhciBfZGV0ZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5kZXRlY3QgPSBkb1BhcmFsbGVsKF9kZXRlY3QpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IGRvU2VyaWVzKF9kZXRlY3QpO1xuXG4gICAgYXN5bmMuc29tZSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGFueSBhbGlhc1xuICAgIGFzeW5jLmFueSA9IGFzeW5jLnNvbWU7XG5cbiAgICBhc3luYy5ldmVyeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbGwgYWxpYXNcbiAgICBhc3luYy5hbGwgPSBhc3luYy5ldmVyeTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChmbiksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aFxuICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB2YXIgYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGZuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0YXNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tXG4gICAgICAgICAgICBfZWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudCBmaW5hbCBjYWxsYmFjayBmcm9tIGNhbGxpbmcgaXRzZWxmIGlmIGl0IGVycm9yc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICB0aGVDYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2VhY2goa2V5cywgZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gX2lzQXJyYXkodGFza3Nba10pID8gdGFza3Nba106IFt0YXNrc1trXV07XG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2FmZVJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgX2VhY2goX2tleXMocmVzdWx0cyksIGZ1bmN0aW9uKHJrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW3JrZXldID0gcmVzdWx0c1tya2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3Agc3Vic2VxdWVudCBlcnJvcnMgaGl0dGluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIE1hdGguYWJzKHRhc2subGVuZ3RoIC0gMSkpIHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuICAgICAgICAvLyBVc2UgZGVmYXVsdHMgaWYgdGltZXMgbm90IHBhc3NlZFxuICAgICAgICBpZiAodHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgICAgICB0aW1lcyA9IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRpbWVzIGlzIGEgbnVtYmVyXG4gICAgICAgIHRpbWVzID0gcGFyc2VJbnQodGltZXMsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICB2YXIgd3JhcHBlZFRhc2sgPSBmdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICB2YXIgcmV0cnlBdHRlbXB0ID0gZnVuY3Rpb24odGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2hpbGUgKHRpbWVzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQodGFzaywgISh0aW1lcy09MSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IGNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQsIHJ1biB0aGlzIGFzIGEgY29udHJvbGwgZmxvd1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2tcbiAgICB9O1xuXG4gICAgYXN5bmMud2F0ZXJmYWxsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIV9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd3JhcEl0ZXJhdG9yID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2god3JhcEl0ZXJhdG9yKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gZnVuY3Rpb24oZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKF9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgZWFjaGZuLm1hcCh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgZWFjaGZuLmVhY2goX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBhc3luYy5tYXAsIGVhY2g6IGFzeW5jLmVhY2ggfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKHRhc2tzLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBfbWFwTGltaXQobGltaXQpLCBlYWNoOiBfZWFjaExpbWl0KGxpbWl0KSB9LCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGFzeW5jLm1hcFNlcmllcyh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhfa2V5cyh0YXNrcyksIGZ1bmN0aW9uIChrLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRhc2tzW2tdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIHZhciBtYWtlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbWFrZUNhbGxiYWNrKDApO1xuICAgIH07XG5cbiAgICBhc3luYy5hcHBseSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBfY29uY2F0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNiKSB7XG4gICAgICAgICAgICBmbih4LCBmdW5jdGlvbiAoZXJyLCB5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMud2hpbHN0KHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICh0ZXN0LmFwcGx5KG51bGwsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0ZXN0KCkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3luYy51bnRpbCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvVW50aWwgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICghdGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvVW50aWwoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICBxLnRhc2tzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbnVsbCxcbiAgICAgICAgICAgIGVtcHR5OiBudWxsLFxuICAgICAgICAgICAgZHJhaW46IG51bGwsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcS5kcmFpbiA9IG51bGw7XG4gICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghcS5wYXVzZWQgJiYgd29ya2VycyA8IHEuY29uY3VycmVuY3kgJiYgcS50YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBxLnRhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLmVtcHR5ICYmIHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4gJiYgcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyKHRhc2suZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHEuY29uY3VycmVuY3k7IHcrKykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICBlbmQgPSBzZXF1ZW5jZS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciBtaWQgPSBiZWcgKyAoKGVuZCAtIGJlZyArIDEpID4+PiAxKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKF9iaW5hcnlTZWFyY2gocS50YXNrcywgaXRlbSwgX2NvbXBhcmVUYXNrcykgKyAxLCAwLCBpdGVtKTtcblxuICAgICAgICAgICAgICBpZiAocS5zYXR1cmF0ZWQgJiYgcS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvblxuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5jYXJnbyA9IGZ1bmN0aW9uICh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHdvcmtpbmcgICAgID0gZmFsc2UsXG4gICAgICAgICAgICB0YXNrcyAgICAgICA9IFtdO1xuXG4gICAgICAgIHZhciBjYXJnbyA9IHtcbiAgICAgICAgICAgIHRhc2tzOiB0YXNrcyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgZHJhaW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX2VhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXJnby5kcmFpbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXJnby5zYXR1cmF0ZWQgJiYgdGFza3MubGVuZ3RoID09PSBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnby5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShjYXJnby5wcm9jZXNzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICAgICAgICAgIGlmICh3b3JraW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZihjYXJnby5kcmFpbiAmJiAhY2FyZ28uZHJhaW5lZCkgY2FyZ28uZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdHMgPSB0eXBlb2YgcGF5bG9hZCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRhc2tzLnNwbGljZSgwLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza3Muc3BsaWNlKDAsIHRhc2tzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZHMgPSBfbWFwKHRzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFzay5kYXRhO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoY2FyZ28uZW1wdHkpIGNhcmdvLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgd29ya2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2VyKGRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgX2VhY2godHMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNhcmdvO1xuICAgIH07XG5cbiAgICB2YXIgX2NvbnNvbGVfZm4gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy50aW1lcyA9IGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb3VudGVyID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY291bnRlci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luYy5tYXAoY291bnRlciwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwU2VyaWVzKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGF0LCBbZXJyXS5jb25jYXQocmVzdWx0cykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICByZXR1cm4gYXN5bmMuc2VxLmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIHZhciBfYXBwbHlFYWNoID0gZnVuY3Rpb24gKGVhY2hmbiwgZm5zIC8qYXJncy4uLiovKSB7XG4gICAgICAgIHZhciBnbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgZnVuY3Rpb24gKGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5hcHBseUVhY2ggPSBkb1BhcmFsbGVsKF9hcHBseUVhY2gpO1xuICAgIGFzeW5jLmFwcGx5RWFjaFNlcmllcyA9IGRvU2VyaWVzKF9hcHBseUVhY2gpO1xuXG4gICAgYXN5bmMuZm9yZXZlciA9IGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xuXG4gICAgLy8gTm9kZS5qc1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwidmFyIGFzeW5jICAgICAgID0gcmVxdWlyZSgnYXN5bmMnKSxcbiAgICB1cmxQYXJzZXIgICA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIFJlc291cmNlICAgID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBtdWx0aXBsZSByZXNvdXJjZXMgdG8gbG9hZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIGNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvZ3Jlc3MgcGVyY2VudCBvZiB0aGUgbG9hZGVyIGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogTG9hZGluZyBzdGF0ZSBvZiB0aGUgbG9hZGVyLCB0cnVlIGlmIGl0IGlzIGN1cnJlbnRseSBsb2FkaW5nIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0b3RhbCBwcm9ncmVzcyB0aGF0IGEgc2luZ2xlIHJlc291cmNlIHJlcHJlc2VudHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWlkZGxld2FyZSB0byBydW4gYmVmb3JlIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGFmdGVyIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9sb2FkUmVzb3VyY2VgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRMb2FkUmVzb3VyY2UgPSB0aGlzLl9sb2FkUmVzb3VyY2UuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uTG9hZGAgZnVuY3Rpb24gYm91bmQgd2l0aCB0aGlzIG9iamVjdCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uTG9hZCA9IHRoaXMuX29uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlIGJ1ZmZlciB0aGF0IGZpbGxzIHVudGlsIGBsb2FkYCBpcyBjYWxsZWQgdG8gc3RhcnQgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlW119XG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyID0gW107XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHRyYWNrIGxvYWQgY29tcGxldGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb3VyY2VzIHdhaXRpbmcgdG8gYmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX3F1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fYm91bmRMb2FkUmVzb3VyY2UsIGNvbmN1cnJlbmN5KTtcblxuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGlzIGxvYWRlciBrZXllZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgUmVzb3VyY2U+fVxuICAgICAqL1xuICAgIHRoaXMucmVzb3VyY2VzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCBvciBlcnJvcmVkIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgb25jZSBwZXIgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbG9hZGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdGFydFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHF1ZXVlZCByZXNvdXJjZXMgYWxsIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY29tcGxldGVcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuLyoqXG4gKiBBZGRzIGEgcmVzb3VyY2UgKG9yIG11bHRpcGxlIHJlc291cmNlcykgdG8gdGhlIGxvYWRlciBxdWV1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGEgd2lkZSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwYXJhbWV0ZXJzLiBUaGUgb25seSB0aGluZyB0aGF0IGlzIGFsd2F5c1xuICogcmVxdWlyZWQgdGhlIHVybCB0byBsb2FkLiBBbGwgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6XG4gKlxuICogYGBganNcbiAqIGxvYWRlclxuICogICAgIC8vIG5vcm1hbCBwYXJhbSBzeW50YXhcbiAqICAgICAuYWRkKCdrZXknLCAnaHR0cDovLy4uLicsIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJylcbiAqXG4gKiAgICAgLy8gb2JqZWN0IHN5bnRheFxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MicsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIG5hbWU6ICdrZXkzJyxcbiAqICAgICAgICAgdXJsOiAnaHR0cDovLy4uLidcbiAqICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge31cbiAqICAgICB9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwczovLy4uLicsXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9LFxuICogICAgICAgICBjcm9zc09yaWdpbjogdHJ1ZVxuICogICAgIH0pXG4gKlxuICogICAgIC8vIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJscyBvciBib3RoXG4gKiAgICAgLmFkZChbXG4gKiAgICAgICAgIHsgbmFtZTogJ2tleTQnLCB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgeyB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgJ2h0dHA6Ly8uLi4nXG4gKiAgICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAYWxpYXMgZW5xdWV1ZVxuICogQHBhcmFtIFtuYW1lXSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZCwgaWYgbm90IHBhc3NlZCB0aGUgdXJsIGlzIHVzZWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIHJlbGF0aXZlIHRvIHRoZSBiYXNlVXJsIG9mIHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcGFyYW0gW29wdGlvbnMuY3Jvc3NPcmlnaW5dIHtib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5YSFJfTE9BRF9UWVBFfSBIb3cgc2hvdWxkIHRoaXMgcmVzb3VyY2UgYmUgbG9hZGVkP1xuICogQHBhcmFtIFtvcHRpb25zLnhoclR5cGU9UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVF0ge1Jlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFfSBIb3cgc2hvdWxkIHRoZSBkYXRhIGJlaW5nXG4gKiAgICAgIGxvYWRlZCBiZSBpbnRlcnByZXRlZCB3aGVuIHVzaW5nIFhIUj9cbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMgc3BlY2lmaWMgcmVzb3VyY2UgY29tcGxldGVzIGxvYWRpbmcuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWRkID0gTG9hZGVyLnByb3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgb3B0aW9ucywgY2IpIHtcbiAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciB1cmxzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChuYW1lW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGlmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW5zdGVhZCBvZiBwYXJhbXNcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNiID0gdXJsIHx8IG5hbWUuY2FsbGJhY2sgfHwgbmFtZS5vbkNvbXBsZXRlO1xuICAgICAgICBvcHRpb25zID0gbmFtZTtcbiAgICAgICAgdXJsID0gbmFtZS51cmw7XG4gICAgICAgIG5hbWUgPSBuYW1lLm5hbWUgfHwgbmFtZS5rZXkgfHwgbmFtZS51cmw7XG4gICAgfVxuXG4gICAgLy8gY2FzZSB3aGVyZSBubyBuYW1lIGlzIHBhc3NlZCBzaGlmdCBhbGwgYXJncyBvdmVyIGJ5IG9uZS5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdXJsO1xuICAgICAgICB1cmwgPSBuYW1lO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IHdlIHNoaWZ0ZWQgbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9wZXIgdXJsLlxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVybCBwYXNzZWQgdG8gYWRkIHJlc291cmNlIHRvIGxvYWRlci4nKTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zIGFyZSBvcHRpb25hbCBzbyBwZW9wbGUgbWlnaHQgcGFzcyBhIGZ1bmN0aW9uIGFuZCBubyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW25hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzb3VyY2Ugd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBleGlzdHMuJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJhc2UgdXJsIGlmIHRoaXMgaXNuJ3QgYW4gYWJzb2x1dGUgdXJsXG4gICAgdXJsID0gdGhpcy5faGFuZGxlQmFzZVVybCh1cmwpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBzdG9yZSB0aGUgcmVzb3VyY2VcbiAgICB0aGlzLnJlc291cmNlc1tuYW1lXSA9IG5ldyBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlc291cmNlc1tuYW1lXS5vbmNlKCdhZnRlck1pZGRsZXdhcmUnLCBjYik7XG4gICAgfVxuXG4gICAgdGhpcy5fbnVtVG9Mb2FkKys7XG5cbiAgICAvLyBpZiBhbHJlYWR5IGxvYWRpbmcgYWRkIGl0IHRvIHRoZSB3b3JrZXIgcXVldWVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9ICgxMDAgLSB0aGlzLnByb2dyZXNzKSAvICh0aGlzLl9xdWV1ZS5sZW5ndGgoKSArIHRoaXMuX3F1ZXVlLnJ1bm5pbmcoKSk7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBidWZmZXIgaXQgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlIGxhdGVyXG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDEwMCAvIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5Mb2FkZXIucHJvdG90eXBlLl9oYW5kbGVCYXNlVXJsID0gZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBwYXJzZWRVcmwgPSB1cmxQYXJzZXIucGFyc2UodXJsKTtcblxuICAgIC8vIGFic29sdXRlIHVybCwganVzdCB1c2UgaXQgYXMgaXMuXG4gICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCB8fCBwYXJzZWRVcmwucGF0aG5hbWUuaW5kZXhPZignLy8nKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIC8vIGlmIGJhc2VVcmwgZG9lc24ndCBlbmQgaW4gc2xhc2ggYW5kIHVybCBkb2Vzbid0IHN0YXJ0IHdpdGggc2xhc2gsIHRoZW4gYWRkIGEgc2xhc2ggaW5iZXR3ZWVuXG4gICAgaWYgKFxuICAgICAgICB0aGlzLmJhc2VVcmwubGVuZ3RoICYmXG4gICAgICAgIHRoaXMuYmFzZVVybC5sYXN0SW5kZXhPZignLycpICE9PSB0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSAmJlxuICAgICAgICB1cmwuY2hhckF0KDApICE9PSAnLydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybCArICcvJyArIHVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmJlZm9yZSogdGhlXG4gKiByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKlxuICogQGFsaWFzIHByZVxuICogQHBhcmFtIG1pZGRsZXdhcmUge2Z1bmN0aW9ufSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5iZWZvcmUgPSBMb2FkZXIucHJvdG90eXBlLnByZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB1cCBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gdGhhdCB3aWxsIHJ1biAqYWZ0ZXIqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyB1c2VcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWZ0ZXIgPSBMb2FkZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZS5wdXNoKGZuKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHF1ZXVlIG9mIHRoZSBsb2FkZXIgdG8gcHJlcGFyZSBmb3IgYSBuZXcgbG9hZC5cbiAqXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gdGhpcy5iYXNlVXJsID0gYmFzZVVybCB8fCAnJztcblxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9ncmVzc0NodW5rID0gMDtcblxuICAgIC8vIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUubGVuZ3RoID0gMDtcbiAgICAvLyB0aGlzLl9hZnRlck1pZGRsZXdhcmUubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fbnVtVG9Mb2FkID0gMDtcblxuICAgIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgICB0aGlzLl9xdWV1ZS5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBTdGFydHMgbG9hZGluZyB0aGUgcXVldWVkIHJlc291cmNlcy5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgY29tcGxldGVgIGV2ZW50LlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAvLyByZWdpc3RlciBjb21wbGV0ZSBjYWxsYmFjayBpZiB0aGV5IHBhc3Mgb25lXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBxdWV1ZSBoYXMgYWxyZWFkeSBzdGFydGVkIHdlIGFyZSBkb25lIGhlcmVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBub3RpZnkgb2Ygc3RhcnRcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBzdGFydCB0aGUgaW50ZXJuYWwgcXVldWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMuX2J1ZmZlcltpXSk7XG4gICAgfVxuXG4gICAgLy8gZW1wdHkgdGhlIGJ1ZmZlclxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIExvYWRzIGEgc2luZ2xlIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc291cmNlID0gZnVuY3Rpb24gKHJlc291cmNlLCBkZXF1ZXVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmVzb3VyY2UuX2RlcXVldWUgPSBkZXF1ZXVlO1xuXG4gICAgdGhpcy5fcnVuTWlkZGxld2FyZShyZXNvdXJjZSwgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXNvdXJjZS5vbigncHJvZ3Jlc3MnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAncHJvZ3Jlc3MnKSk7XG5cbiAgICAgICAgcmVzb3VyY2UubG9hZChzZWxmLl9ib3VuZE9uTG9hZCk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbmNlIGVhY2ggcmVzb3VyY2UgaGFzIGxvYWRlZC5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX29uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMsIHRoaXMucmVzb3VyY2VzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGVhY2ggdGltZSBhIHJlc291cmNlcyBpcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAZmlyZXMgZXJyb3JcbiAqIEBmaXJlcyBsb2FkXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICB0aGlzLnByb2dyZXNzICs9IHRoaXMuX3Byb2dyZXNzQ2h1bms7XG5cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgcmVzb3VyY2UpO1xuXG4gICAgLy8gcnVuIG1pZGRsZXdhcmUsIHRoaXMgKm11c3QqIGhhcHBlbiBiZWZvcmUgZGVxdWV1ZSBzbyBzdWItYXNzZXRzIGdldCBhZGRlZCBwcm9wZXJseVxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2FmdGVyTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvdXJjZS5lbWl0KCdhZnRlck1pZGRsZXdhcmUnLCByZXNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5fbnVtVG9Mb2FkLS07XG5cbiAgICAgICAgLy8gZG8gY29tcGxldGlvbiBjaGVja1xuICAgICAgICBpZiAodGhpcy5fbnVtVG9Mb2FkID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgdGhpcy5fb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzb3VyY2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCByZXNvdXJjZS5lcnJvciwgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkJywgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG5cblxuICAgIC8vIHJlbW92ZSB0aGlzIHJlc291cmNlIGZyb20gdGhlIGFzeW5jIHF1ZXVlXG4gICAgcmVzb3VyY2UuX2RlcXVldWUoKTtcbn07XG5cbi8qKlxuICogUnVuIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9uIGEgcmVzb3VyY2UuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fcnVuTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZm5zLCBjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGFzeW5jLmVhY2hTZXJpZXMoZm5zLCBmdW5jdGlvbiAoZm4sIG5leHQpIHtcbiAgICAgICAgZm4uY2FsbChzZWxmLCByZXNvdXJjZSwgbmV4dCk7XG4gICAgfSwgY2IuYmluZCh0aGlzLCByZXNvdXJjZSkpO1xufTtcblxuTG9hZGVyLkxPQURfVFlQRSA9IFJlc291cmNlLkxPQURfVFlQRTtcbkxvYWRlci5YSFJfUkVBRFlfU1RBVEUgPSBSZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEU7XG5Mb2FkZXIuWEhSX1JFU1BPTlNFX1RZUEUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRTtcbiIsInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgX3VybCA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIC8vIHRlc3RzIGlzIENPUlMgaXMgc3VwcG9ydGVkIGluIFhIUiwgaWYgbm90IHdlIG5lZWQgdG8gdXNlIFhEUlxuICAgIHVzZVhkciA9ICEhKHdpbmRvdy5YRG9tYWluUmVxdWVzdCAmJiAhKCd3aXRoQ3JlZGVudGlhbHMnIGluIChuZXcgWE1MSHR0cFJlcXVlc3QoKSkpKSxcbiAgICB0ZW1wQW5jaG9yID0gbnVsbDtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRlZCBieVxuICogYSBzaW5nbGUgVVJMLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIG5hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd8c3RyaW5nW119IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIGZvciBhdWRpby92aWRlbyBsb2FkcyB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7c3RyaW5nfGJvb2xlYW59IElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IERlZmF1bHQgaXMgdG8gZGV0ZXJtaW5lIGF1dG9tYXRpY2FsbHkuXG4gKiBAcGFyYW0gW29wdGlvbnMubG9hZFR5cGU9UmVzb3VyY2UuTE9BRF9UWVBFLlhIUl0ge1Jlc291cmNlLkxPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW29wdGlvbnMubWV0YWRhdGFdIHtvYmplY3R9IEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmUuXG4gKi9cbmZ1bmN0aW9uIFJlc291cmNlKG5hbWUsIHVybCwgb3B0aW9ucykge1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBuYW1lIGFuZCB1cmwgYXJlIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgYSByZXNvdXJjZS4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdXJsIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgdXJsIGlzIGEgZGF0YSB1cmwuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNEYXRhVXJsID0gdGhpcy51cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnl9XG4gICAgICovXG4gICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jcm9zc09yaWdpbiA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnYW5vbnltb3VzJyA6IG9wdGlvbnMuY3Jvc3NPcmlnaW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIG9mIGxvYWRpbmcgdG8gdXNlIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2UuTE9BRF9UWVBFfVxuICAgICAqL1xuICAgIHRoaXMubG9hZFR5cGUgPSBvcHRpb25zLmxvYWRUeXBlIHx8IHRoaXMuX2RldGVybWluZUxvYWRUeXBlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSB1c2VkIHRvIGxvYWQgdGhlIHJlc291cmNlIHZpYSBYSFIuIElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy54aHJUeXBlID0gb3B0aW9ucy54aHJUeXBlO1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgaW5mbyBmb3IgbWlkZGxld2FyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgd2hpbGUgbG9hZGluZyAoaWYgYW55KS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Vycm9yfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFhIUiBvYmplY3QgdGhhdCB3YXMgdXNlZCB0byBsb2FkIHRoaXMgcmVzb3VyY2UuIFRoaXMgaXMgb25seSBzZXRcbiAgICAgKiB3aGVuIGBsb2FkVHlwZWAgaXMgYFJlc291cmNlLkxPQURfVFlQRS5YSFJgLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7WE1MSHR0cFJlcXVlc3R9XG4gICAgICovXG4gICAgdGhpcy54aHIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBqc29uLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0pzb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgeG1sLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1htbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhbiBpbWFnZSB0YWcuIE9ubHkgdmFsaWQgYWZ0ZXIgdGhlIHJlc291cmNlXG4gICAgICogaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gYXVkaW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0F1ZGlvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGEgdmlkZW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1ZpZGVvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGRlcXVldWVgIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBhIHN0b3JhZ2UgcGxhY2UgZm9yIHRoZSBhc3luYyBxdWV1ZSBkZXF1ZXVlIG1ldGhvZFxuICAgICAqIHVzZWQgcHJpdmF0ZWx5IGJ5IHRoZSBsb2FkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2RlcXVldWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBjb21wbGV0ZWAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kQ29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkVycm9yYCBmdW5jdGlvbiBib3VuZCB0byB0aGlzIHJlc291cmNlJ3MgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25Qcm9ncmVzc2AgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyA9IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcblxuICAgIC8vIHhociBjYWxsYmFja3NcbiAgICB0aGlzLl9ib3VuZFhock9uRXJyb3IgPSB0aGlzLl94aHJPbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYaHJPbkFib3J0ID0gdGhpcy5feGhyT25BYm9ydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25Mb2FkID0gdGhpcy5feGhyT25Mb2FkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYZHJPblRpbWVvdXQgPSB0aGlzLl94ZHJPblRpbWVvdXQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcmVzb3VyY2UgYmVpbmdzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGVhY2ggdGltZSBwcm9ncmVzcyBvZiB0aGlzIHJlc291cmNlIGxvYWQgdXBkYXRlcy5cbiAgICAgKiBOb3QgYWxsIHJlc291cmNlcyB0eXBlcyBhbmQgbG9hZGVyIHN5c3RlbXMgY2FuIHN1cHBvcnQgdGhpcyBldmVudFxuICAgICAqIHNvIHNvbWV0aW1lcyBpdCBtYXkgbm90IGJlIGF2YWlsYWJsZS4gSWYgdGhlIHJlc291cmNlXG4gICAgICogaXMgYmVpbmcgbG9hZGVkIG9uIGEgbW9kZXJuIGJyb3dzZXIsIHVzaW5nIFhIUiwgYW5kIHRoZSByZW1vdGUgc2VydmVyXG4gICAgICogcHJvcGVybHkgc2V0cyBDb250ZW50LUxlbmd0aCBoZWFkZXJzLCB0aGVuIHRoaXMgd2lsbCBiZSBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcHJvZ3Jlc3NcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgdGhpcyByZXNvdXJjZSBoYXMgbG9hZGVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaXQgd2lsbFxuICAgICAqIGJlIGluIHRoZSBgZXJyb3JgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xufVxuXG5SZXNvdXJjZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVzb3VyY2U7XG5tb2R1bGUuZXhwb3J0cyA9IFJlc291cmNlO1xuXG4vKipcbiAqIE1hcmtzIHRoZSByZXNvdXJjZSBhcyBjb21wbGV0ZS5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgaW4gYSB3cmFwcGVyIG9yIHNvbWV0aGluZy4uLmdyb3NzLi4uLlxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICAgIGlmICh0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvcik7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIub25lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25wcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbmxvYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBLaWNrcyBvZmYgbG9hZGluZyBvZiB0aGlzIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBzdGFydFxuICogQHBhcmFtIFtjYWxsYmFja10ge2Z1bmN0aW9ufSBPcHRpb25hbCBjYWxsYmFjayB0byBjYWxsIG9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBpZiBhIGNhbGxiYWNrIGlzIHNldCwgbGlzdGVuIGZvciBjb21wbGV0ZSBldmVudFxuICAgIGlmIChjYikge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4gPT09IGZhbHNlIHx8IHR5cGVvZiB0aGlzLmNyb3NzT3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdGhpcy5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4odGhpcy51cmwpO1xuICAgIH1cblxuICAgIHN3aXRjaCh0aGlzLmxvYWRUeXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEltYWdlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5BVURJTzpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuVklERU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlhIUjpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh1c2VYZHIgJiYgdGhpcy5jcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYZHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYaHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gSW1hZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuc3JjID0gdGhpcy51cmw7XG5cbiAgICB0aGlzLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEhUTUxBdWRpb0VsZW1lbnQgb3IgSFRNTFZpZGVvRWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJyAmJiB0eXBlb2YgQXVkaW8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBBdWRpbygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgJyArIHR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBDb2Nvb25KUyBDYW52YXMrIHJ1bnRpbWUsIGxhY2tzIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zcmMgPSBBcnJheS5pc0FycmF5KHRoaXMudXJsKSA/IHRoaXMudXJsWzBdIDogdGhpcy51cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51cmwubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWydpcycgKyB0eXBlWzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKV0gPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuXG4gICAgdGhpcy5kYXRhLmxvYWQoKTtcbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gWE1MSHR0cFJlcXVlc3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGhyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIHNldCB0aGUgcmVxdWVzdCB0eXBlIGFuZCB1cmxcbiAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gbG9hZCBqc29uIGFzIHRleHQgYW5kIHBhcnNlIGl0IG91cnNlbHZlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHNvbWUgYnJvd3NlcnNcbiAgICAvLyAqY291Z2gqIHNhZmFyaSAqY291Z2gqIGNhbid0IGRlYWwgd2l0aCBpdC5cbiAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OIHx8IHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gdGhpcy54aHJUeXBlO1xuICAgIH1cblxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvciwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQsIGZhbHNlKTtcblxuICAgIHhoci5zZW5kKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhEb21haW5SZXF1ZXN0LiBUaGlzIGlzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHN1cHBvcnQgSUU5IChncm9zcykuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGRyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGRyID0gdGhpcy54aHIgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcblxuICAgIC8vIFhEb21haW5SZXF1ZXN0IGhhcyBhIGZldyBxdWlya3MuIE9jY2FzaW9uYWxseSBpdCB3aWxsIGFib3J0IHJlcXVlc3RzXG4gICAgLy8gQSB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBtYWtlIHN1cmUgQUxMIGNhbGxiYWNrcyBhcmUgc2V0IGV2ZW4gaWYgbm90IHVzZWRcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTc4Njk2Ni94ZG9tYWlucmVxdWVzdC1hYm9ydHMtcG9zdC1vbi1pZS05XG4gICAgeGRyLnRpbWVvdXQgPSA1MDAwO1xuXG4gICAgeGRyLm9uZXJyb3IgPSB0aGlzLl9ib3VuZFhock9uRXJyb3I7XG4gICAgeGRyLm9udGltZW91dCA9IHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0O1xuICAgIHhkci5vbnByb2dyZXNzID0gdGhpcy5fYm91bmRPblByb2dyZXNzO1xuICAgIHhkci5vbmxvYWQgPSB0aGlzLl9ib3VuZFhock9uTG9hZDtcblxuICAgIHhkci5vcGVuKCdHRVQnLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyAgTm90ZTogVGhlIHhkci5zZW5kKCkgY2FsbCBpcyB3cmFwcGVkIGluIGEgdGltZW91dCB0byBwcmV2ZW50IGFuIGlzc3VlIHdpdGggdGhlIGludGVyZmFjZSB3aGVyZSBzb21lIHJlcXVlc3RzIGFyZSBsb3N0XG4gICAgLy8gIGlmIG11bHRpcGxlIFhEb21haW5SZXF1ZXN0cyBhcmUgYmVpbmcgc2VudCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIC8vIFNvbWUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2lzc3Vlcy8xMjQ4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHhkci5zZW5kKCk7XG4gICAgfSwgMCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzb3VyY2UgdXNlZCBpbiBsb2FkaW5nIHZpYSBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB0eXBlIHtzdHJpbmd9IFRoZSBlbGVtZW50IHR5cGUgKHZpZGVvIG9yIGF1ZGlvKS5cbiAqIEBwYXJhbSB1cmwge3N0cmluZ30gVGhlIHNvdXJjZSBVUkwgdG8gbG9hZCBmcm9tLlxuICogQHBhcmFtIFttaW1lXSB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIG9mIHRoZSB2aWRlb1xuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9jcmVhdGVTb3VyY2UgPSBmdW5jdGlvbiAodHlwZSwgdXJsLCBtaW1lKSB7XG4gICAgaWYgKCFtaW1lKSB7XG4gICAgICAgIG1pbWUgPSB0eXBlICsgJy8nICsgdXJsLnN1YnN0cih1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSB1cmw7XG4gICAgc291cmNlLnR5cGUgPSBtaW1lO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBlcnJvcnMgb3V0LlxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBlcnJvciBldmVudCBmcm9tIHRoZSBlbGVtZW50IHRoYXQgZW1pdHMgaXQuXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX29uRXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBlbGVtZW50IHVzaW5nICcgKyBldmVudC50YXJnZXQubm9kZU5hbWUpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBwcm9ncmVzcyBldmVudCBmaXJlcyBmb3IgeGhyL3hkci5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vblByb2dyZXNzID0gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB0aGlzLCBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYW4gZXJyb3IgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEVycm9yRXZlbnR8RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgcmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgZmFpbGVkLiAnICtcbiAgICAgICAgJ1N0YXR1czogJyArIHRoaXMueGhyLnN0YXR1cyArICcsIHRleHQ6IFwiJyArIHRoaXMueGhyLnN0YXR1c1RleHQgKyAnXCInXG4gICAgKTtcblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGFib3J0IGV2ZW50IGZpcmVzIGZvciB4aHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEFib3J0RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB3YXMgYWJvcnRlZCBieSB0aGUgdXNlci4nKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIHRpbWVvdXQgZXZlbnQgZmlyZXMgZm9yIHhkci5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94ZHJPblRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB0aW1lZCBvdXQuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBkYXRhIHN1Y2Nlc3NmdWxseSBsb2FkcyBmcm9tIGFuIHhoci94ZHIgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0TG9hZEV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHhociA9IHRoaXMueGhyLFxuICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzICE9PSB1bmRlZmluZWQgPyB4aHIuc3RhdHVzIDogMjAwOyAvL1hEUiBoYXMgbm8gYC5zdGF0dXNgLCBhc3N1bWUgMjAwLlxuXG4gICAgLy8gc3RhdHVzIGNhbiBiZSAwIHdoZW4gdXNpbmcgdGhlIGZpbGU6Ly8gcHJvdG9jb2wsIGFsc28gY2hlY2sgaWYgYSByZXNwb25zZSB3YXMgZm91bmRcbiAgICBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDQgfHwgKHN0YXR1cyA9PT0gMCAmJiB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIC8vIGlmIHRleHQsIGp1c3QgcmV0dXJuIGl0XG4gICAgICAgIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYganNvbiwgcGFyc2UgaW50byBqc29uIG9iamVjdFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT04pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSnNvbiA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIGpzb246JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgeG1sLCBwYXJzZSBpbnRvIGFuIHhtbCBkb2N1bWVudCBvciBkaXYgZWxlbWVudFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkaXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNYbWwgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSBsb2FkZWQgeG1sOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyIHR5cGVzIGp1c3QgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdbJyArIHhoci5zdGF0dXMgKyAnXScgKyB4aHIuc3RhdHVzVGV4dCArICc6JyArIHhoci5yZXNwb25zZVVSTCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gcmVxVHlwZSh4aHIpIHtcbiAgICByZXR1cm4geGhyLnRvU3RyaW5nKCkucmVwbGFjZSgnb2JqZWN0ICcsICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGZvciB0aGlzIHJlc291cmNlIGJhc2VkIG9uIGlmIHRoZSB1cmxcbiAqIGZvciB0aGlzIHJlc291cmNlIGlzIGNyb3NzLW9yaWdpbi4gSWYgY3Jvc3NPcmlnaW4gd2FzIG1hbnVhbGx5IHNldCwgdGhpc1xuICogZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgdG8gdGVzdC5cbiAqIEBwYXJhbSBbbG9jYXRpb249d2luZG93LmxvY2F0aW9uXSB7b2JqZWN0fSBUaGUgbG9jYXRpb24gb2JqZWN0IHRvIHRlc3QgYWdhaW5zdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNyb3NzT3JpZ2luIHZhbHVlIHRvIHVzZSAob3IgZW1wdHkgc3RyaW5nIGZvciBub25lKS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVDcm9zc09yaWdpbiA9IGZ1bmN0aW9uICh1cmwsIGxvYykge1xuICAgIC8vIGRhdGE6IGFuZCBqYXZhc2NyaXB0OiB1cmxzIGFyZSBjb25zaWRlcmVkIHNhbWUtb3JpZ2luXG4gICAgaWYgKHVybC5pbmRleE9mKCdkYXRhOicpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGlzIHdpbmRvdy5sb2NhdGlvblxuICAgIGxvYyA9IGxvYyB8fCB3aW5kb3cubG9jYXRpb247XG5cbiAgICBpZiAoIXRlbXBBbmNob3IpIHtcbiAgICAgICAgdGVtcEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG5cbiAgICAvLyBsZXQgdGhlIGJyb3dzZXIgZGV0ZXJtaW5lIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSB1cmwgb2YgdGhpcyByZXNvdXJjZSBhbmQgdGhlblxuICAgIC8vIHBhcnNlIHdpdGggdGhlIG5vZGUgdXJsIGxpYiwgd2UgY2FuJ3QgdXNlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICAgIC8vIGJlY2F1c2UgdGhleSBkb24ndCB3b3JrIGluIElFOSA6KFxuICAgIHRlbXBBbmNob3IuaHJlZiA9IHVybDtcbiAgICB1cmwgPSBfdXJsLnBhcnNlKHRlbXBBbmNob3IuaHJlZik7XG5cbiAgICB2YXIgc2FtZVBvcnQgPSAoIXVybC5wb3J0ICYmIGxvYy5wb3J0ID09PSAnJykgfHwgKHVybC5wb3J0ID09PSBsb2MucG9ydCk7XG5cbiAgICAvLyBpZiBjcm9zcyBvcmlnaW5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9PSBsb2MuaG9zdG5hbWUgfHwgIXNhbWVQb3J0IHx8IHVybC5wcm90b2NvbCAhPT0gbG9jLnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiAnYW5vbnltb3VzJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlc3BvbnNlVHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZVxuICogcmVzb3VyY2UgYmVpbmcgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHJlc3BvbnNlVHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lWGhyVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX3hoclR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZUxvYWRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZXNvdXJjZS5fbG9hZFR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLkxPQURfVFlQRS5YSFI7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2dldEV4dGVuc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcy51cmwsXG4gICAgICAgIGV4dDtcblxuICAgIGlmICh0aGlzLmlzRGF0YVVybCkge1xuICAgICAgICB2YXIgc2xhc2hJbmRleCA9IHVybC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGV4dCA9IHVybC5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEsIHVybC5pbmRleE9mKCc7Jywgc2xhc2hJbmRleCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXJ5U3RhcnQgPSB1cmwuaW5kZXhPZignPycpO1xuICAgICAgICBpZiAocXVlcnlTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dDtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWltZSB0eXBlIG9mIGFuIFhIUiByZXF1ZXN0IGJhc2VkIG9uIHRoZSByZXNwb25zZVR5cGUgb2ZcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIHRvIHVzZS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRNaW1lRnJvbVhoclR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1iaW5hcnknO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vYmxvYic7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veG1sJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT046XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVDpcbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUOlxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcblxuICAgIH1cbn07XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxvYWRpbmcgYSByZXNvdXJjZSBjYW4gdXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IExPQURfVFlQRVxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5YSFIgLSBVc2VzIFhNTEh0dHBSZXF1ZXN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5JTUFHRSAtIFVzZXMgYW4gYEltYWdlYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLkFVRElPIC0gVXNlcyBhbiBgQXVkaW9gIG9iamVjdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuVklERU8gLSBVc2VzIGEgYFZpZGVvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlLkxPQURfVFlQRSA9IHtcbiAgICBYSFI6ICAgIDEsXG4gICAgSU1BR0U6ICAyLFxuICAgIEFVRElPOiAgMyxcbiAgICBWSURFTzogIDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVBRFlfU1RBVEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuVU5TRU5UIC0gb3BlbigpaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLk9QRU5FRCAtIHNlbmQoKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5IRUFERVJTX1JFQ0VJVkVEIC0gc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIGhlYWRlcnMgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5MT0FESU5HIC0gRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLkRPTkUgLSBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5SZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEUgPSB7XG4gICAgVU5TRU5UOiAwLFxuICAgIE9QRU5FRDogMSxcbiAgICBIRUFERVJTX1JFQ0VJVkVEOiAyLFxuICAgIExPQURJTkc6IDMsXG4gICAgRE9ORTogNFxufTtcblxuLyoqXG4gKiBUaGUgWEhSIHJlYWR5IHN0YXRlcywgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IFhIUl9SRVNQT05TRV9UWVBFXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVCAtIGRlZmF1bHRzIHRvIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVIgLSBBcnJheUJ1ZmZlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkJMT0IgLSBCbG9iXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQgLSBEb2N1bWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkpTT04gLSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5URVhUIC0gU3RyaW5nXG4gKi9cblJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFID0ge1xuICAgIERFRkFVTFQ6ICAgICd0ZXh0JyxcbiAgICBCVUZGRVI6ICAgICAnYXJyYXlidWZmZXInLFxuICAgIEJMT0I6ICAgICAgICdibG9iJyxcbiAgICBET0NVTUVOVDogICAnZG9jdW1lbnQnLFxuICAgIEpTT046ICAgICAgICdqc29uJyxcbiAgICBURVhUOiAgICAgICAndGV4dCdcbn07XG5cblJlc291cmNlLl9sb2FkVHlwZU1hcCA9IHtcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3BuZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZWcnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3dlYnAnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRVxufTtcblxuUmVzb3VyY2UuX3hoclR5cGVNYXAgPSB7XG4gICAgLy8geG1sXG4gICAgJ3hodG1sJzogICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bWwnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3htbCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RteCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RzeCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3N2Zyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG5cbiAgICAvLyBpbWFnZXNcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2JtcCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RnYSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcblxuICAgIC8vIGpzb25cbiAgICAnanNvbic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OLFxuXG4gICAgLy8gdGV4dFxuICAgICd0ZXh0JzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQsXG4gICAgJ3R4dCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsb2FkIHR5cGUgdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGV4dG5hbWUge3N0cmluZ30gVGhlIGV4dGVuc2lvbiB0byBzZXQgdGhlIHR5cGUgZm9yLCBlLmcuIFwicG5nXCIgb3IgXCJmbnRcIlxuICogQHBhcmFtIGxvYWRUeXBlIHtSZXNvdXJjZS5MT0FEX1RZUEV9IFRoZSBsb2FkIHR5cGUgdG8gc2V0IGl0IHRvLlxuICovXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25Mb2FkVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCBsb2FkVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5fbG9hZFR5cGVNYXAsIGV4dG5hbWUsIGxvYWRUeXBlKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSB4aHJUeXBlIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHhociB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCB4aHJUeXBlKSB7XG4gICAgc2V0RXh0TWFwKFJlc291cmNlLl94aHJUeXBlTWFwLCBleHRuYW1lLCB4aHJUeXBlKTtcbn07XG5cbmZ1bmN0aW9uIHNldEV4dE1hcChtYXAsIGV4dG5hbWUsIHZhbCkge1xuICAgIGlmIChleHRuYW1lICYmIGV4dG5hbWUuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgIGV4dG5hbWUgPSBleHRuYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dG5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hcFtleHRuYW1lXSA9IHZhbDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICAgIF9rZXlTdHI6IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIixcblxuICAgIGVuY29kZUJpbmFyeTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBcIlwiO1xuICAgICAgICB2YXIgYnl0ZWJ1ZmZlcjtcbiAgICAgICAgdmFyIGVuY29kZWRDaGFySW5kZXhlcyA9IG5ldyBBcnJheSg0KTtcbiAgICAgICAgdmFyIGlueCA9IDA7XG4gICAgICAgIHZhciBqbnggPSAwO1xuICAgICAgICB2YXIgcGFkZGluZ0J5dGVzID0gMDtcblxuICAgICAgICB3aGlsZSAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBGaWxsIGJ5dGUgYnVmZmVyIGFycmF5XG4gICAgICAgICAgICBieXRlYnVmZmVyID0gbmV3IEFycmF5KDMpO1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBieXRlYnVmZmVyLmxlbmd0aDsgam54KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGF3YXkgaGlnaC1vcmRlciBieXRlLCBhcyBkb2N1bWVudGVkIGF0OlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdCNIYW5kbGluZ19iaW5hcnlfZGF0YVxuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSBpbnB1dC5jaGFyQ29kZUF0KGlueCsrKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGVhY2ggZW5jb2RlZCBjaGFyYWN0ZXIsIDYgYml0cyBhdCBhIHRpbWVcbiAgICAgICAgICAgIC8vIGluZGV4IDE6IGZpcnN0IDYgYml0c1xuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzBdID0gYnl0ZWJ1ZmZlclswXSA+PiAyO1xuICAgICAgICAgICAgLy8gaW5kZXggMjogc2Vjb25kIDYgYml0cyAoMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAxICsgNCBtb3N0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBieXRlIDIpXG4gICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMV0gPSAoKGJ5dGVidWZmZXJbMF0gJiAweDMpIDw8IDQpIHwgKGJ5dGVidWZmZXJbMV0gPj4gNCk7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiB0aGlyZCA2IGJpdHMgKDQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMiArIDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gKChieXRlYnVmZmVyWzFdICYgMHgwZikgPDwgMikgfCAoYnl0ZWJ1ZmZlclsyXSA+PiA2KTtcbiAgICAgICAgICAgIC8vIGluZGV4IDM6IGZvcnRoIDYgYml0cyAoNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gYnl0ZWJ1ZmZlclsyXSAmIDB4M2Y7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHBhZGRpbmcgaGFwcGVuZWQsIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgIHBhZGRpbmdCeXRlcyA9IGlueCAtIChpbnB1dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFkZGluZ0J5dGVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCAyIGNoYXJhY3RlcnMgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMl0gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBsYXN0IGNoYXJhY3RlciB0byBwYWRkaW5nIGNoYXJcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vIHBhZGRpbmcgLSBwcm9jZWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vdyB3ZSB3aWxsIGdyYWIgZWFjaCBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgb3V0IG9mIG91ciBrZXlzdHJpbmdcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIG91ciBpbmRleCBhcnJheSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQgc3RyaW5nXG4gICAgICAgICAgICBmb3IgKGpueCA9IDA7IGpueCA8IGVuY29kZWRDaGFySW5kZXhlcy5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHRoaXMuX2tleVN0ci5jaGFyQXQoZW5jb2RlZENoYXJJbmRleGVzW2pueF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9Mb2FkZXInKTtcblxubW9kdWxlLmV4cG9ydHMuUmVzb3VyY2UgPSByZXF1aXJlKCcuL1Jlc291cmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzLm1pZGRsZXdhcmUgPSB7XG4gICAgY2FjaGluZzoge1xuICAgICAgICBtZW1vcnk6IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnknKVxuICAgIH0sXG4gICAgcGFyc2luZzoge1xuICAgICAgICBibG9iOiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL3BhcnNpbmcvYmxvYicpXG4gICAgfVxufTtcbiIsIi8vIGEgc2ltcGxlIGluLW1lbW9yeSBjYWNoZSBmb3IgcmVzb3VyY2VzXG52YXIgY2FjaGUgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICAvLyBpZiBjYWNoZWQsIHRoZW4gc2V0IGRhdGEgYW5kIGNvbXBsZXRlIHRoZSByZXNvdXJjZVxuICAgICAgICBpZiAoY2FjaGVbcmVzb3VyY2UudXJsXSkge1xuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IGNhY2hlW3Jlc291cmNlLnVybF07XG4gICAgICAgICAgICByZXNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIG5vdCBjYWNoZWQsIHdhaXQgZm9yIGNvbXBsZXRlIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb3VyY2Uub25jZSgnY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICBjYWNoZVt0aGlzLnVybF0gPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgnLi4vLi4vUmVzb3VyY2UnKSxcbiAgICBiNjQgPSByZXF1aXJlKCcuLi8uLi9iNjQnKTtcblxud2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblxuLy8gYSBtaWRkbGV3YXJlIGZvciB0cmFuc2Zvcm1pbmcgWEhSIGxvYWRlZCBCbG9icyBpbnRvIG1vcmUgdXNlZnVsIG9iamVjdHNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIHdhcyBhbiBYSFIgbG9hZCBvZiBhIGJsb2JcbiAgICAgICAgaWYgKHJlc291cmNlLnhociAmJiByZXNvdXJjZS54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBibG9iIHN1cHBvcnQgd2UgcHJvYmFibHkgZ290IGEgYmluYXJ5IHN0cmluZyBiYWNrXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5CbG9iIHx8IHR5cGVvZiByZXNvdXJjZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVzb3VyY2UueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaW1hZ2UsIGNvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgaW50byBhIGRhdGEgdXJsXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgdHlwZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5zcmMgPSAnZGF0YTonICsgdHlwZSArICc7YmFzZTY0LCcgKyBiNjQuZW5jb2RlQmluYXJ5KHJlc291cmNlLnhoci5yZXNwb25zZVRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGltYWdlIGxvYWRzIGFuZCB0aGVuIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5vbmxvYWQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY29udGVudCB0eXBlIHNheXMgdGhpcyBpcyBhbiBpbWFnZSwgdGhlbiB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBibG9iIGludG8gYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvdXJjZS5kYXRhLnR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlc291cmNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuYmxvYiA9IHJlc291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gc3JjO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuaXNJbWFnZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBubyBsb25nZXIgdXNlZCBibG9iIGFmdGVyIHRoZSBpbWFnZSBsb2Fkc1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJwaXhpLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMC4xMC1kZXZcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlBpeGkuanMgaXMgYSBmYXN0IGxpZ2h0d2VpZ2h0IDJEIGxpYnJhcnkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGRldmljZXMuXCIsXG4gIFwiYXV0aG9yXCI6IFwiTWF0IEdyb3Zlc1wiLFxuICBcImNvbnRyaWJ1dG9yc1wiOiBbXG4gICAgXCJDaGFkIEVuZ2xlciA8Y2hhZEBwYW50aGVyZGV2LmNvbT5cIixcbiAgICBcIlJpY2hhcmQgRGF2ZXkgPHJkYXZleUBnbWFpbC5jb20+XCJcbiAgXSxcbiAgXCJtYWluXCI6IFwiLi9zcmMvaW5kZXguanNcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHA6Ly9nb29kYm95ZGlnaXRhbC5jb20vXCIsXG4gIFwiYnVnc1wiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXNcIixcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiZ3VscCAmJiBndWxwIHdhdGNoXCIsXG4gICAgXCJ0ZXN0XCI6IFwiZ3VscCAmJiB0ZXN0ZW0gY2lcIixcbiAgICBcImJ1aWxkXCI6IFwiZ3VscFwiLFxuICAgIFwiZG9jc1wiOiBcImpzZG9jIC1jIC4vZ3VscC91dGlsL2pzZG9jLmNvbmYuanNvbiAtUiBSRUFETUUubWRcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpbi9cIixcbiAgICBcInNyYy9cIixcbiAgICBcIkNPTlRSSUJVVElORy5tZFwiLFxuICAgIFwiTElDRU5TRVwiLFxuICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgXCJSRUFETUUubWRcIlxuICBdLFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhc3luY1wiOiBcIl4xLjUuMFwiLFxuICAgIFwiYnJmc1wiOiBcIl4xLjQuMVwiLFxuICAgIFwiZWFyY3V0XCI6IFwiXjIuMC43XCIsXG4gICAgXCJldmVudGVtaXR0ZXIzXCI6IFwiXjEuMS4xXCIsXG4gICAgXCJnbC1tYXRyaXhcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL3RvamkvZ2wtbWF0cml4LmdpdFwiLFxuICAgIFwib2JqZWN0LWFzc2lnblwiOiBcIl40LjAuMVwiLFxuICAgIFwicGl4aS1nbC1jb3JlXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9Hb29kQm95RGlnaXRhbC9waXhpLWdsLWNvcmUuZ2l0XCIsXG4gICAgXCJyZXNvdXJjZS1sb2FkZXJcIjogXCJeMS42LjRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjExLjEuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4zLjIuMFwiLFxuICAgIFwiZGVsXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOS4wXCIsXG4gICAgXCJndWxwLWNhY2hlZFwiOiBcIl4xLjEuMFwiLFxuICAgIFwiZ3VscC1jb25jYXRcIjogXCJeMi42LjBcIixcbiAgICBcImd1bHAtZGVidWdcIjogXCJeMi4xLjBcIixcbiAgICBcImd1bHAtaGVhZGVyXCI6IFwiXjEuNy4xXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjExLjJcIixcbiAgICBcImd1bHAtbWlycm9yXCI6IFwiXjAuNC4wXCIsXG4gICAgXCJndWxwLXBsdW1iZXJcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtcmVuYW1lXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJndWxwLXNvdXJjZW1hcHNcIjogXCJeMS41LjJcIixcbiAgICBcImd1bHAtdWdsaWZ5XCI6IFwiXjEuNC4xXCIsXG4gICAgXCJndWxwLXV0aWxcIjogXCJeMy4wLjZcIixcbiAgICBcImphZ3VhcmpzLWpzZG9jXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZHNoaW1qcy9qYWd1YXJqcy1qc2RvYy5naXRcIixcbiAgICBcImpzZG9jXCI6IFwiXjMuMy4yXCIsXG4gICAgXCJqc2hpbnQtc3VtbWFyeVwiOiBcIl4wLjQuMFwiLFxuICAgIFwibWluaW1pc3RcIjogXCJeMS4yLjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMy4yXCIsXG4gICAgXCJyZXF1aXJlLWRpclwiOiBcIl4wLjMuMFwiLFxuICAgIFwicnVuLXNlcXVlbmNlXCI6IFwiXjEuMS4yXCIsXG4gICAgXCJ0ZXN0ZW1cIjogXCJeMC45LjRcIixcbiAgICBcInZpbnlsLWJ1ZmZlclwiOiBcIl4xLjAuMFwiLFxuICAgIFwidmlueWwtc291cmNlLXN0cmVhbVwiOiBcIl4xLjEuMFwiLFxuICAgIFwid2F0Y2hpZnlcIjogXCJeMy40LjBcIlxuICB9LFxuICBcImJyb3dzZXJpZnlcIjoge1xuICAgIFwidHJhbnNmb3JtXCI6IFtcbiAgICAgIFwiYnJmc1wiXG4gICAgXVxuICB9XG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLy8gYWRkIHNvbWUgZXh0cmEgdmFyaWFibGVzIHRvIHRoZSBjb250YWluZXIuLlxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpXG4pO1xuXG5cbi8qKlxuICogVGhlIEFjY2Vzc2liaWxpdHkgbWFuYWdlciByZWFjcmVhdGVzIHRoZSBhYmlsaXR5IHRvIHRhYiBhbmQgYW5kIGhhdmUgY29udGVudCByZWFkIGJ5IHNjcmVlbiByZWFkZXJzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGFzIGl0IGNhbiBwb3NzaWJseSBoZWxwIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyBhY2Nlc3MgcGl4aSBjb250ZW50LlxuICogTXVjaCBsaWtlIGludGVyYWN0aW9uIGFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBtYWRlIGFjY2Vzc2libGUuIFRoaXMgbWFuYWdlciB3aWxsIG1hcCB0aGUgZXZlbnRzIGFzIGlmIHRoZSBtb3VzZSB3YXMgYmVpbmcgdXNlZCwgbWluaW1pemluZyB0aGUgZWZmZXJvdCByZXF1aXJlZCB0byBpbXBsZW1lbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqL1xuZnVuY3Rpb24gQWNjZXNzaWJpbGl0eU1hbmFnZXIocmVuZGVyZXIpXG57XG5cdC8vIGZpcnN0IHdlIGNyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFxuICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUubGVmdCA9IDA7XG4gICAvL1xuICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuICAgXHRcbiAgIFx0LyoqXG4gICBcdCAqIFRoaXMgaXMgdGhlIGRvbSBlbGVtZW50IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gICBcdHRoaXMuZGl2ID0gZGl2O1xuXG4gICBcdC8qKlxuICAgXHQgKiBBIHNpbXBsZSBwb29sIGZvciBzdG9yaW5nIGRpdnMuXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7QXJyYXl9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuIFx0dGhpcy5wb29sID0gW107XG5cbiBcdC8qKlxuIFx0ICogVGhpcyBpcyBhIHRpY2sgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHJlbmRlcmVkLlxuIFx0ICogXG4gXHQgKiBAdHlwZSB7TnVtYmVyfVxuIFx0ICogQHByaXZhdGVcbiBcdCAqL1xuICAgXHR0aGlzLnJlbmRlcklkID0gMDtcblxuICAgXHQvKipcbiAgIFx0ICogU2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB2aXN1YWxseSBzaG93IHRoZSBkaXZzXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgIFx0ICovXG4gICBcdHRoaXMuZGVidWcgPSBmYWxzZTtcblxuICBcdC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGFjY2Vzc2liaWxpdHkgbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgIFx0LyoqXG4gICAgICogVGhlIGFycmF5IG9mIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzaWJsZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHByZSBiaW5kIHRoZSBmdW5jdGlvbnMuLlxuICAgICAqL1xuICAgXHR0aGlzLl9vbktleURvd24gPSB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKTtcbiAgIFx0dGhpcy5fb25Nb3VzZU1vdmUgPSB0aGlzLl9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogc3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFuYWdlci4gSWYgdGhlcmUgYXJlIG5vIGFjY2Vzc2libGUgb2JqZWN0cyBvciB0aGUgbW91c2UgaXMgbW92aW5nIHRoZSB3aWxsIGJlIGZhbHNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cbiAgIFx0Ly8gbGV0IGxpc3RlbiBmb3IgdGFiLi4gb25jZSBwcmVzc2VkIHdlIGNhbiBmaXJlIHVwIGFuZCBzaG93IHRoZSBhY2Nlc3NpYmlsaXR5IGxheWVyXG4gICBcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG59XG5cblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xuXG4vKipcbiAqIEFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBzaG93bi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgcHJlc2VzIHRoZSB0YWIga2V5XG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHRydWUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub24oJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cblx0dGhpcy5yZW5kZXJlci52aWV3LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5kaXYpO1x0XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIGhpZGRlbi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgbW92ZXMgdGhlIG1vdXNlXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYoIXRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9mZigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlKTtcblxuXHR0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcblxufTtcblxuLyoqXG4gKiBUaGlzIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aWxsIHJ1biB0aHJvdWdodCBoZSBzY2VuZSBncmFwaCBhbmQgYWRkIGFueSBuZXcgYWNjZXNzaWJsZSBvYmplY3RzIHRvIHRoZSBET00gbGF5ZXIuXG4gKiBAcGFyYW0gZWxlbWVudCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgRGlzcGxheU9iamVjdCB0byBjaGVjay5cbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG5cdGlmKCFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZihkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGUgJiYgZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcblx0e1xuXHRcdGlmKCFkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlKVxuXHRcdHtcblx0XHRcdHRoaXMuYWRkQ2hpbGQoZGlzcGxheU9iamVjdCk7XG5cdFx0fVxuXHQgICBcdFxuXHQgICBcdGRpc3BsYXlPYmplY3QucmVuZGVySWQgPSB0aGlzLnJlbmRlcklkO1xuXHR9XG5cblx0dmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcblxuXHRmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcblx0XHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKGNoaWxkcmVuW2ldKTtcblx0fVxufTtcblxuXG4vKipcbiAqIEJlZm9yZSBlYWNoIHJlbmRlciB0aGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGRpdnMgYXJlIG1hcHBlZCBjb3JyZWN0bHkgdG8gdGhlaXIgRGlzcGxheU9iamVjdHNcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpXG57XG5cblx0Ly8gdXBkYXRlIGNoaWxkcmVuLi4uXG5cdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHModGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkKTtcblxuXHR2YXIgcmVjdCA9IHRoaXMucmVuZGVyZXIudmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0dmFyIHN4ID0gcmVjdC53aWR0aCAgLyB0aGlzLnJlbmRlcmVyLndpZHRoO1xuXHR2YXIgc3kgPSByZWN0LmhlaWdodCAvIHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuXG5cdHZhciBkaXYgPSB0aGlzLmRpdjtcblxuXHRkaXYuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICdweCc7XG5cdGRpdi5zdHlsZS50b3AgPSByZWN0LnRvcCArICdweCc7XG5cdGRpdi5zdHlsZS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggKyAncHgnO1xuXHRkaXYuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgKyAncHgnO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuXHRcdGlmKGNoaWxkLnJlbmRlcklkICE9PSB0aGlzLnJlbmRlcklkKVxuXHRcdHtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaSwgMSk7XG5cdFx0XHR0aGlzLmRpdi5yZW1vdmVDaGlsZCggY2hpbGQuX2FjY2Vzc2libGVEaXYgKTtcblx0XHRcdHRoaXMucG9vbC5wdXNoKGNoaWxkLl9hY2Nlc3NpYmxlRGl2KTtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlRGl2ID0gbnVsbDtcblxuXHRcdFx0aS0tO1xuXG5cdFx0XHRpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBtYXAgZGl2IHRvIGRpc3BsYXkuLlxuXHRcdFx0ZGl2ID0gY2hpbGQuX2FjY2Vzc2libGVEaXY7XG5cdFx0XHR2YXIgaGl0QXJlYSA9IGNoaWxkLmhpdEFyZWE7XG5cdFx0XHR2YXIgd3QgPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuXHRcdFx0aWYoY2hpbGQuaGl0QXJlYSlcblx0XHRcdHtcblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoKHd0LnR4ICsgKGhpdEFyZWEueCAqIHd0LmEpKSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKCh3dC50eSArIChoaXRBcmVhLnkgKiB3dC5kKSkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHd0LmEgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogd3QuZCAqIHN5KSArICdweCc7XG5cdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0aGl0QXJlYSA9IGNoaWxkLmdldEJvdW5kcygpO1xuXG5cdFx0XHRcdHRoaXMuY2FwSGl0QXJlYShoaXRBcmVhKTtcblxuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9IChoaXRBcmVhLnggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gIChoaXRBcmVhLnkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiBzeSkgKyAncHgnO1xuXHRcdFx0fVx0XHRcblx0XHR9XG5cdH1cblxuXHQvLyBpbmNyZW1lbnQgdGhlIHJlbmRlciBpZC4uXG5cdHRoaXMucmVuZGVySWQrKztcbn07XG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYXBIaXRBcmVhID0gZnVuY3Rpb24gKGhpdEFyZWEpXG57XG4gICAgaWYgKGhpdEFyZWEueCA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoICs9IGhpdEFyZWEueDtcbiAgICAgICAgaGl0QXJlYS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaGl0QXJlYS55IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ICs9IGhpdEFyZWEueTtcbiAgICAgICAgaGl0QXJlYS55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueCArIGhpdEFyZWEud2lkdGggPiB0aGlzLnJlbmRlcmVyLndpZHRoIClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoIC0gaGl0QXJlYS54O1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS55ICsgaGl0QXJlYS5oZWlnaHQgPiB0aGlzLnJlbmRlcmVyLmhlaWdodCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0IC0gaGl0QXJlYS55O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBBZGRzIGEgRGlzcGxheU9iamVjdCB0byB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuLy9cdHRoaXMuYWN0aXZhdGUoKTtcblx0XG5cdHZhciBkaXYgPSB0aGlzLnBvb2wucG9wKCk7XG5cblx0aWYoIWRpdilcblx0e1xuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBcblxuXHQgICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGVidWcgPyAncmdiYSgyNTUsMCwwLDAuNSknIDogJ3RyYW5zcGFyZW50Jztcblx0ICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdCAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcblx0ICAgIGRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdub25lJztcblxuXHQgICAgXG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX29uRm9jdXNPdXQuYmluZCh0aGlzKSk7XG5cdH1cblx0ICAgXHRcblxuXG5cblx0ZGl2LnRpdGxlID0gZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlVGl0bGUgfHwgJ2Rpc3BsYXlPYmplY3QgJyArIHRoaXMudGFiSW5kZXg7XG5cblx0Ly9cblx0XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUgPSB0cnVlO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ID0gZGl2O1xuXHRkaXYuZGlzcGxheU9iamVjdCA9IGRpc3BsYXlPYmplY3Q7XG5cblxuXHR0aGlzLmNoaWxkcmVuLnB1c2goZGlzcGxheU9iamVjdCk7XG5cdHRoaXMuZGl2LmFwcGVuZENoaWxkKCBkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ICk7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYudGFiSW5kZXggPSBkaXNwbGF5T2JqZWN0LnRhYkluZGV4O1xufTtcblxuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBidXR0b24gcHJlc3MgdG8gcGl4aSdzIEludGVyYWN0aW9uTWFuYWdlciAoY2xpY2spXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnY2xpY2snLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3ZlcilcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1cyA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3V0KVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzT3V0ID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uS2V5RG93biA9IGZ1bmN0aW9uKGUpXG57XG5cdGlmKGUua2V5Q29kZSAhPT0gOSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuYWN0aXZhdGUoKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmUgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZGVhY3RpdmF0ZSgpO1xufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgXG57XG5cdHRoaXMuZGl2ID0gbnVsbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblx0XHR0aGlzLmNoaWxkcmVuW2ldLmRpdiA9IG51bGw7XG5cdH1cblxuXHRcblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuXHRcdFxuXHR0aGlzLnBvb2wgPSBudWxsO1xuXHR0aGlzLmNoaWxkcmVuID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5cbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYWNjZXNzaWJsZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmFjY2Vzc2liaWxpdHkuYWNjZXNzaWJsZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgYWNjZXNzaWJsZVRhcmdldCA9IHtcbiAgICBcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGVUaXRsZTpudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICB0YWJJbmRleDowLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZUFjdGl2ZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVEaXY6ZmFsc2VcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBhY2Nlc3NpYmxlVGFyZ2V0O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgYWNjZXNzaWJpbGl0eSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYWNjZXNzaWJsZVRhcmdldDogICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpLFxuICAgIEFjY2Vzc2liaWxpdHlNYW5hZ2VyOiByZXF1aXJlKCcuL0FjY2Vzc2liaWxpdHlNYW5hZ2VyJylcbn07XG4iLCIvKipcbiAqIENvbnN0YW50IHZhbHVlcyB1c2VkIGluIHBpeGlcbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG52YXIgQ09OU1QgPSB7XG4gICAgLyoqXG4gICAgICogU3RyaW5nIG9mIHRoZSBjdXJyZW50IFBJWEkgdmVyc2lvblxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBWRVJTSU9OXG4gICAgICovXG4gICAgVkVSU0lPTjogcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQSV8yIC0gVHdvIFBpXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFBJXzI6IE1hdGguUEkgKiAyLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJBRF9UT19ERUcgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyByYWRpYW5zIHRvIGRlZ3JlZXNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUkFEX1RPX0RFRzogMTgwIC8gTWF0aC5QSSxcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBERUdfVE9fUkFEIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgZGVncmVlcyB0byByYWRpYW5zXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIERFR19UT19SQUQ6IE1hdGguUEkgLyAxODAsXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgZnJhbWVzIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gVEFSR0VUX0ZQTVM9MC4wNlxuICAgICAqL1xuICAgIFRBUkdFVF9GUE1TOiAwLjA2LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgdG8gaWRlbnRpZnkgdGhlIFJlbmRlcmVyIFR5cGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFJFTkRFUkVSX1RZUEVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuV0VCR0xcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5DQU5WQVNcbiAgICAgKi9cbiAgICBSRU5ERVJFUl9UWVBFOiB7XG4gICAgICAgIFVOS05PV046ICAgIDAsXG4gICAgICAgIFdFQkdMOiAgICAgIDEsXG4gICAgICAgIENBTlZBUzogICAgIDJcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyBibGVuZCBtb2RlcyBzdXBwb3J0ZWQgYnkgUElYSS4gSU1QT1JUQU5UIC0gVGhlIFdlYkdMIHJlbmRlcmVyIG9ubHkgc3VwcG9ydHNcbiAgICAgKiB0aGUgTk9STUFMLCBBREQsIE1VTFRJUExZIGFuZCBTQ1JFRU4gYmxlbmQgbW9kZXMuIEFueXRoaW5nIGVsc2Ugd2lsbCBzaWxlbnRseSBhY3QgbGlrZVxuICAgICAqIE5PUk1BTC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gQkxFTkRfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkFERFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5NVUxUSVBMWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQ1JFRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuT1ZFUkxBWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5EQVJLRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTElHSFRFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9ET0RHRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9CVVJOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhBUkRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU09GVF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5ESUZGRVJFTkNFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkVYQ0xVU0lPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IVUVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0FUVVJBVElPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MVU1JTk9TSVRZXG4gICAgICovXG4gICAgQkxFTkRfTU9ERVM6IHtcbiAgICAgICAgTk9STUFMOiAgICAgICAgIDAsXG4gICAgICAgIEFERDogICAgICAgICAgICAxLFxuICAgICAgICBNVUxUSVBMWTogICAgICAgMixcbiAgICAgICAgU0NSRUVOOiAgICAgICAgIDMsXG4gICAgICAgIE9WRVJMQVk6ICAgICAgICA0LFxuICAgICAgICBEQVJLRU46ICAgICAgICAgNSxcbiAgICAgICAgTElHSFRFTjogICAgICAgIDYsXG4gICAgICAgIENPTE9SX0RPREdFOiAgICA3LFxuICAgICAgICBDT0xPUl9CVVJOOiAgICAgOCxcbiAgICAgICAgSEFSRF9MSUdIVDogICAgIDksXG4gICAgICAgIFNPRlRfTElHSFQ6ICAgICAxMCxcbiAgICAgICAgRElGRkVSRU5DRTogICAgIDExLFxuICAgICAgICBFWENMVVNJT046ICAgICAgMTIsXG4gICAgICAgIEhVRTogICAgICAgICAgICAxMyxcbiAgICAgICAgU0FUVVJBVElPTjogICAgIDE0LFxuICAgICAgICBDT0xPUjogICAgICAgICAgMTUsXG4gICAgICAgIExVTUlOT1NJVFk6ICAgICAxNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIHdlYmdsIGRyYXcgbW9kZXMuIFRoZXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggR0wgZHJhd01vZGUgdG8gdXNlXG4gICAgICogdW5kZXIgY2VydGFpbiBzaXR1YXRpb25zIGFuZCByZW5kZXJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5QT0lOVFNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfTE9PUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX0ZBTlxuICAgICAqL1xuICAgIERSQVdfTU9ERVM6IHtcbiAgICAgICAgUE9JTlRTOiAgICAgICAgIDAsXG4gICAgICAgIExJTkVTOiAgICAgICAgICAxLFxuICAgICAgICBMSU5FX0xPT1A6ICAgICAgMixcbiAgICAgICAgTElORV9TVFJJUDogICAgIDMsXG4gICAgICAgIFRSSUFOR0xFUzogICAgICA0LFxuICAgICAgICBUUklBTkdMRV9TVFJJUDogNSxcbiAgICAgICAgVFJJQU5HTEVfRkFOOiAgIDZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBwaXhpLlxuICAgICAqXG4gICAgICogVGhlIERFRkFVTFQgc2NhbGUgbW9kZSBhZmZlY3RzIHRoZSBkZWZhdWx0IHNjYWxpbmcgbW9kZSBvZiBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAgKiBJdCBjYW4gYmUgcmUtYXNzaWduZWQgdG8gZWl0aGVyIExJTkVBUiBvciBORUFSRVNULCBkZXBlbmRpbmcgdXBvbiBzdWl0YWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0NBTEVfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuREVGQVVMVD1MSU5FQVJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTElORUFSIFNtb290aCBzY2FsaW5nXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLk5FQVJFU1QgUGl4ZWxhdGluZyBzY2FsaW5nXG4gICAgICovXG4gICAgU0NBTEVfTU9ERVM6IHtcbiAgICAgICAgREVGQVVMVDogICAgMCxcbiAgICAgICAgTElORUFSOiAgICAgMCxcbiAgICAgICAgTkVBUkVTVDogICAgMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZml4IHRoYXQgZGVub3RlcyBhIFVSTCBpcyBmb3IgYSByZXRpbmEgYXNzZXRcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gUkVUSU5BX1BSRUZJWFxuICAgICAqL1xuICAgIC8vZXhhbXBsZTogJ0AyeCcsXG4gICAgUkVUSU5BX1BSRUZJWDogL0AoLispeC8sXG5cbiAgICBSRVNPTFVUSU9OOjEsXG5cbiAgICBGSUxURVJfUkVTT0xVVElPTjoxLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgcmVuZGVyIG9wdGlvbnMgaWYgbm9uZSBhcmUgc3VwcGxpZWQgdG8ge0BsaW5rIFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKiBvciB7QGxpbmsgUElYSS5DYW52YXNSZW5kZXJlcn0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERFRkFVTFRfUkVOREVSX09QVElPTlNcbiAgICAgKiBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnZpZXc9bnVsbFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy50cmFuc3BhcmVudD1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hbnRpYWxpYXM9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuZm9yY2VGWEFBPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnJlc29sdXRpb249MVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmF1dG9SZXNpemU9ZmFsc2VcbiAgICAgKi9cbiAgICBERUZBVUxUX1JFTkRFUl9PUFRJT05TOiB7XG4gICAgICAgIHZpZXc6IG51bGwsXG4gICAgICAgIHJlc29sdXRpb246IDEsXG4gICAgICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgICAgIGZvcmNlRlhBQTogZmFsc2UsXG4gICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgIGNsZWFyQmVmb3JlUmVuZGVyOiB0cnVlLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgICAgICByb3VuZFBpeGVsczogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnRzIHRoYXQgaWRlbnRpZnkgc2hhcGVzLCBtYWlubHkgdG8gcHJldmVudCBgaW5zdGFuY2VvZmAgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFU1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUE9MWT0wXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SRUNUPTFcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkNJUkM9MlxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuRUxJUD0zXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SUkVDPTRcbiAgICAgKi9cbiAgICBTSEFQRVM6IHtcbiAgICAgICAgUE9MWTogMCxcbiAgICAgICAgUkVDVDogMSxcbiAgICAgICAgQ0lSQzogMixcbiAgICAgICAgRUxJUDogMyxcbiAgICAgICAgUlJFQzogNFxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBtYXliZSBjaGFuZ2UgdG8gU1BSSVRFLkJBVENIX1NJWkU6IDIwMDBcbiAgICAvLyBUT0RPOiBtYXliZSBhZGQgUEFSVElDTEUuQkFUQ0hfU0laRTogMTUwMDBcbiAgICBTUFJJVEVfQkFUQ0hfU0laRTogMjAwMCAvL25pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSBhbmQgZGVza3RvcCBtYWNoaW5lc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDT05TVDtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gcmVxdWlyZSgnLi9EaXNwbGF5T2JqZWN0JyksXG4gICAgUmVuZGVyVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgQ29udGFpbmVyIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0cy5cbiAqIEl0IGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBkaXNwbGF5IG9iamVjdHMgdGhhdCBhY3QgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIG9iamVjdHMuXG4gKlxuICpgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiBgYGBcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5EaXNwbGF5T2JqZWN0XG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDb250YWluZXIoKVxue1xuICAgIERpc3BsYXlPYmplY3QuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdFtdfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERpc3BsYXlPYmplY3QucHJvdG90eXBlKTtcbkNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5lcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udGFpbmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gMTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIGhlaWdodCA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBPdmVycmlkYWJsZSBtZXRob2QgdGhhdCBjYW4gYmUgdXNlZCBieSBDb250YWluZXIgc3ViY2xhc3NlcyB3aGVuZXZlciB0aGUgY2hpbGRyZW4gYXJyYXkgaXMgbW9kaWZpZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7fTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lci5cbiAqIFxuICogWW91IGNhbiBhbHNvIGFkZCBtdWx0cGxlIGl0ZW1zIGxpa2Ugc286IG15Q29udGFpbmVyLmFkZENoaWxkKHRoaW5rT25lLCB0aGluZ1R3bywgdGhpbmdUaHJlZSlcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBhZGQgdG8gdGhlIGNvbnRhaW5lclxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57IFxuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaGFzIGEgcGFyZW50IHRoZW4gbGV0cyByZW1vdmUgaXQgYXMgUGl4aSBvYmplY3RzIGNhbiBvbmx5IGV4aXN0IGluIG9uZSBwbGFjZVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UodGhpcy5jaGlsZHJlbi5sZW5ndGgtMSk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lciBhdCBhIHNwZWNpZmllZCBpbmRleC4gSWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd25cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRvIGFkZFxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBwbGFjZSB0aGUgY2hpbGQgaW5cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkQXQgPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hpbGQgKyAnYWRkQ2hpbGRBdDogVGhlIGluZGV4ICcrIGluZGV4ICsnIHN1cHBsaWVkIGlzIG91dCBvZiBib3VuZHMgJyArIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiAyIERpc3BsYXkgT2JqZWN0cyB3aXRoaW4gdGhpcyBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKiBAcGFyYW0gY2hpbGQyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc3dhcENoaWxkcmVuID0gZnVuY3Rpb24gKGNoaWxkLCBjaGlsZDIpXG57XG4gICAgaWYgKGNoaWxkID09PSBjaGlsZDIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluZGV4MSA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG4gICAgdmFyIGluZGV4MiA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZDIpO1xuXG4gICAgaWYgKGluZGV4MSA8IDAgfHwgaW5kZXgyIDwgMClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3dhcENoaWxkcmVuOiBCb3RoIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0cyBtdXN0IGJlIGNoaWxkcmVuIG9mIHRoZSBjYWxsZXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDFdID0gY2hpbGQyO1xuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgyXSA9IGNoaWxkO1xuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleDEgPCBpbmRleDIgPyBpbmRleDEgOiBpbmRleDIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBwb3NpdGlvbiBvZiBhIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgdG8gaWRlbnRpZnlcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdCB0byBpZGVudGlmeVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiBhbiBleGlzdGluZyBjaGlsZCBpbiB0aGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIGZvciB3aGljaCB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGluZGV4IG51bWJlclxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSByZXN1bHRpbmcgaW5kZXggbnVtYmVyIGZvciB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuXG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgY3VycmVudEluZGV4LCAxKTsgLy8gcmVtb3ZlIGZyb20gb2xkIHBvc2l0aW9uXG4gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsgLy9hZGQgYXQgbmV3IHBvc2l0aW9uXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBhdFxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgYXQgdGhlIGdpdmVuIGluZGV4LCBpZiBhbnkuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDaGlsZEF0OiBTdXBwbGllZCBpbmRleCAnICsgaW5kZXggKyAnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjaGlsZCBsaXN0LCBvciB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baW5kZXhdO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW1vdmVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIHNwZWNpZmllZCBpbmRleCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgZnJvbVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIHZhciBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRBdChpbmRleCk7XG5cbiAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIGNvbnRhaW5lciB0aGF0IGFyZSB3aXRoaW4gdGhlIGJlZ2luIGFuZCBlbmQgaW5kZXhlcy5cbiAqXG4gKiBAcGFyYW0gYmVnaW5JbmRleCB7bnVtYmVyfSBUaGUgYmVnaW5uaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gKiBAcGFyYW0gZW5kSW5kZXgge251bWJlcn0gVGhlIGVuZGluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzaXplIG9mIHRoZSBjb250YWluZXIuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbiAoYmVnaW5JbmRleCwgZW5kSW5kZXgpXG57XG4gICAgdmFyIGJlZ2luID0gYmVnaW5JbmRleCB8fCAwO1xuICAgIHZhciBlbmQgPSB0eXBlb2YgZW5kSW5kZXggPT09ICdudW1iZXInID8gZW5kSW5kZXggOiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgcmFuZ2UgPSBlbmQgLSBiZWdpbjtcbiAgICB2YXIgcmVtb3ZlZCwgaTtcblxuICAgIGlmIChyYW5nZSA+IDAgJiYgcmFuZ2UgPD0gZW5kKVxuICAgIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGJlZ2luLCByYW5nZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0ucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShiZWdpbkluZGV4KTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZ2UgPT09IDAgJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyZW1vdmVDaGlsZHJlbjogbnVtZXJpYyB2YWx1ZXMgYXJlIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UuJyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIgZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSBmYWxzZTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkNvbnRhaW5lci5wcm90b3R5cGUuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtID0gQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIHRoZSBib3VuZHMgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCB0aGlzIHJlbmRlciBzZXNzaW9uIHNvIHJldHVybiB3aGF0IHdlIGhhdmVcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgY2hpbGRCb3VuZHM7XG4gICAgICAgIHZhciBjaGlsZE1heFg7XG4gICAgICAgIHZhciBjaGlsZE1heFk7XG5cbiAgICAgICAgdmFyIGNoaWxkVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgY2hpbGRCb3VuZHMgPSB0aGlzLmNoaWxkcmVuW2ldLmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBtaW5YID0gbWluWCA8IGNoaWxkQm91bmRzLnggPyBtaW5YIDogY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIG1pblkgPSBtaW5ZIDwgY2hpbGRCb3VuZHMueSA/IG1pblkgOiBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBjaGlsZE1heFggPSBjaGlsZEJvdW5kcy53aWR0aCArIGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICBjaGlsZE1heFkgPSBjaGlsZEJvdW5kcy5oZWlnaHQgKyBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBtYXhYID0gbWF4WCA+IGNoaWxkTWF4WCA/IG1heFggOiBjaGlsZE1heFg7XG4gICAgICAgICAgICBtYXhZID0gbWF4WSA+IGNoaWxkTWF4WSA/IG1heFkgOiBjaGlsZE1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkVmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJHZXRCb3VuZHMgPSBDb250YWluZXIucHJvdG90eXBlLmdldEJvdW5kcztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5vbi1nbG9iYWwgbG9jYWwgYm91bmRzIG9mIHRoZSBDb250YWluZXIgYXMgYSByZWN0YW5nbGUuXG4gKiBUaGUgY2FsY3VsYXRpb24gdGFrZXMgYWxsIHZpc2libGUgY2hpbGRyZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4Q2FjaGUgPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdGguTWF0cml4LklERU5USVRZO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdHJpeENhY2hlO1xuXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMoIG1hdGguTWF0cml4LklERU5USVRZICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICBcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpLCBqO1xuXG4gICAgLy8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyBlbGVtZW50IGhhcyBhIG1hc2sgb3IgYSBmaWx0ZXIuXG4gICAgaWYgKHRoaXMuX21hc2sgfHwgdGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuXG4gICAgICAgIC8vIHB1c2ggZmlsdGVyIGZpcnN0IGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyBjb3JyZWN0IGZvciBhbnkgbWFza2luZ1xuICAgICAgICBpZiAodGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRoaXMsIHRoaXMuX2ZpbHRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnB1c2hNYXNrKHRoaXMsIHRoaXMuX21hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgLy8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBiYXRjaCwgb25seSByZW5kZXJlZCBpZiBpdCBoYXMgYSB0ZXh0dXJlLlxuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIG1ha2Ugc3VyZSB0aGV5IGdldCByZW5kZXJlZFxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmlsdGVycylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gc2ltcGxlIHJlbmRlciBjaGlsZHJlbiFcbiAgICAgICAgZm9yIChpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnJlbmRlcldlYkdMKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3ViY2xhc3NcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyB0aGlzIGlzIHdoZXJlIGNvbnRlbnQgaXRzZWxmIGdldHMgcmVuZGVyZWQuLi5cbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpc1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMuYWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcy5fbWFzaywgcmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlckNhbnZhcyhyZW5kZXJlcik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFzaylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2socmVuZGVyZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcbntcbiAgICBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBpZiAoZGVzdHJveUNoaWxkcmVuKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KGRlc3Ryb3lDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9UcmFuc2Zvcm0nKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgIF90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgdGhhdCBhcmUgcmVuZGVyZWQgb24gdGhlIHNjcmVlbi5cbiAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvbiBpdHMgb3duIHJhdGhlciBpdCBzaG91bGQgYmUgZXh0ZW5kZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIERpc3BsYXlPYmplY3QoKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29vcmRpbmF0ZSBvZiB0aGUgb2JqZWN0IHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy50cmFuc2Zvcm0ucG9zaXRpb247XG4gICAvLyB0aGlzLl9wb3NpdGlvbiA9IG5ldyBDYWNoZVBvaW50KHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIGZhY3RvciBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlID0gdGhpcy50cmFuc2Zvcm0uc2NhbGVcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXZvdCBwb2ludCBvZiB0aGUgZGlzcGxheU9iamVjdCB0aGF0IGl0IHJvdGF0ZXMgYXJvdW5kXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucGl2b3QgPSB0aGlzLnRyYW5zZm9ybS5waXZvdFxuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2tldyBmYWN0b3IgZm9yIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5za2V3ID0gdGhpcy50cmFuc2Zvcm0uc2tld1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9yb3RhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BhY2l0eSBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpc2liaWxpdHkgb2YgdGhlIG9iamVjdC4gSWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biwgYW5kXG4gICAgICogdGhlIHVwZGF0ZVRyYW5zZm9ybSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDYW4gdGhpcyBvYmplY3QgYmUgcmVuZGVyZWQsIGlmIGZhbHNlIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgZHJhd24gYnV0IHRoZSB1cGRhdGVUcmFuc2Zvcm1cbiAgICAgKiBtZXRob2RzIHdpbGwgc3RpbGwgYmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmFibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIHRoaXMgZGlzcGxheSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNvbnRhaW5lcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbXVsdGlwbGllZCBhbHBoYSBvZiB0aGUgZGlzcGxheU9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRyYW5zZm9ybSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIHdvcmxkIChwYXJlbnQpIGZhY3RvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gdGhpcy50cmFuc2Zvcm0ubG9jYWxUcmFuc2Zvcm07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJlYSB0aGUgZmlsdGVyIGlzIGFwcGxpZWQgdG8uIFRoaXMgaXMgdXNlZCBhcyBtb3JlIG9mIGFuIG9wdGltaXNhdGlvblxuICAgICAqIHJhdGhlciB0aGFuIGZpZ3VyaW5nIG91dCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgZGlzcGxheU9iamVjdCBlYWNoIGZyYW1lIHlvdSBjYW4gc2V0IHRoaXMgcmVjdGFuZ2xlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xuXG4gICAgLyoqeHd3XG4gICAgICogY2FjaGVkIHNpbiByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3IgPSAwO1xuXG4gICAgLyoqXG4gICAgICogY2FjaGVkIGNvcyByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3IgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRzID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vc3QgdXAtdG8tZGF0ZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcmlnaW5hbCwgY2FjaGVkIG1hc2sgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXNrID0gbnVsbDtcblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGF5T2JqZWN0O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB4IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NhbGVYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByb3RhdGlvbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY3IgPSBNYXRoLmNvcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHNwcml0ZSBpcyBnbG9iYWxseSB2aXNpYmxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHdvcmxkVmlzaWJsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcztcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbWFzayBmb3IgdGhlIGRpc3BsYXlPYmplY3QuIEEgbWFzayBpcyBhbiBvYmplY3QgdGhhdCBsaW1pdHMgdGhlIHZpc2liaWxpdHkgb2YgYW4gb2JqZWN0IHRvIHRoZSBzaGFwZSBvZiB0aGUgbWFzayBhcHBsaWVkIHRvIGl0LlxuICAgICAqIEluIFBJWEkgYSByZWd1bGFyIG1hc2sgbXVzdCBiZSBhIFBJWEkuR3JhcGhpY3Mgb3IgYSBQSVhJLlNwcml0ZSBvYmplY3QuIFRoaXMgYWxsb3dzIGZvciBtdWNoIGZhc3RlciBtYXNraW5nIGluIGNhbnZhcyBhcyBpdCB1dGlsaXNlcyBzaGFwZSBjbGlwcGluZy5cbiAgICAgKiBUbyByZW1vdmUgYSBtYXNrLCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc3xQSVhJLlNwcml0ZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIG1hc2s6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFzaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX21hc2sgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFzay5yZW5kZXJhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVycyBmb3IgdGhlIGRpc3BsYXlPYmplY3QuXG4gICAgICogKiBJTVBPUlRBTlQ6IFRoaXMgaXMgYSB3ZWJHTCBvbmx5IGZlYXR1cmUgYW5kIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqIFRvIHJlbW92ZSBmaWx0ZXJzIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnbnVsbCdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGZpbHRlcnM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLnNsaWNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gdmFsdWUgJiYgdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBUT0RPIC0gT3B0aW1pemF0aW9uIHBhc3MhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgLy8gbXVsdGlwbHkgdGhlIGFscGhhcy4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG59O1xuXG4vLyBwZXJmb3JtYW5jZSBpbmNyZWFzZSB0byBhdm9pZCB1c2luZyBjYWxsLi4gKDEweCBmYXN0ZXIpXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtID0gRGlzcGxheU9iamVjdC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtO1xuXG4vKipcbiAqXG4gKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeCkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMobWF0aC5NYXRyaXguSURFTlRJVFkpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvR2xvYmFsID0gZnVuY3Rpb24gKHBvc2l0aW9uKVxue1xuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb3RcbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseShwb3NpdGlvbik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdCByZWxhdGl2ZSB0byBhbm90aGVyIHBvaW50XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcGFyYW0gW2Zyb21dIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgZ2xvYmFsIHBvc2l0aW9uIGZyb21cbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgUG9pbnQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvTG9jYWwgPSBmdW5jdGlvbiAocG9zaXRpb24sIGZyb20sIHBvaW50KVxue1xuICAgIGlmIChmcm9tKVxuICAgIHtcbiAgICAgICAgcG9zaXRpb24gPSBmcm9tLnRvR2xvYmFsKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBzaW1wbHkgYXBwbHkgdGhlIG1hdHJpeC4uXG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvc2l0aW9uLCBwb2ludCk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFyZW50IENvbnRhaW5lciBvZiB0aGlzIERpc3BsYXlPYmplY3RcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdG8gYWRkIHRoaXMgRGlzcGxheU9iamVjdCB0b1xuICogQHJldHVybiB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRoYXQgdGhpcyBEaXNwbGF5T2JqZWN0IHdhcyBhZGRlZCB0b1xuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXIuYWRkQ2hpbGQpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFBhcmVudDogQXJndW1lbnQgbXVzdCBiZSBhIENvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRDaGlsZCh0aGlzKTtcbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzZXQgdGhlIHBvc3Rpb24sIHNjYWxlLCBza2V3IGFuZCBwaXZvdCBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBUaGUgWCBwb3NpdGlvblxuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IFRoZSBZIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3NjYWxlWD0xXSB7bnVtYmVyfSBUaGUgWCBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtzY2FsZVk9MV0ge251bWJlcn0gVGhlIFkgc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbcm90YXRpb249MF0ge251bWJlcn0gVGhlIHJvdGF0aW9uXG4gKiBAcGFyYW0gW3NrZXdYPTBdIHtudW1iZXJ9IFRoZSBYIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbc2tld1k9MF0ge251bWJlcn0gVGhlIFkgc2tldyB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFg9MF0ge251bWJlcn0gVGhlIFggcGl2b3QgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RZPTBdIHtudW1iZXJ9IFRoZSBZIHBpdm90IHZhbHVlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKHgsIHksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZLCBwaXZvdFgsIHBpdm90WSkgLy9qc2hpbnQgaWdub3JlOmxpbmVcbntcbiAgICB0aGlzLnBvc2l0aW9uLnggPSB4IHx8IDA7XG4gICAgdGhpcy5wb3NpdGlvbi55ID0geSB8fCAwO1xuICAgIHRoaXMuc2NhbGUueCA9ICFzY2FsZVggPyAxIDogc2NhbGVYO1xuICAgIHRoaXMuc2NhbGUueSA9ICFzY2FsZVkgPyAxIDogc2NhbGVZO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgIHRoaXMuc2tldy54ID0gc2tld1ggfHwgMDtcbiAgICB0aGlzLnNrZXcueSA9IHNrZXdZIHx8IDA7XG4gICAgdGhpcy5waXZvdC54ID0gcGl2b3RYIHx8IDA7XG4gICAgdGhpcy5waXZvdC55ID0gcGl2b3RZIHx8IDA7XG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEJhc2UgZGVzdHJveSBtZXRob2QgZm9yIGdlbmVyaWMgZGlzcGxheSBvYmplY3RzXG4gKlxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcblxuICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2NhbGUgPSBudWxsO1xuICAgIHRoaXMucGl2b3QgPSBudWxsO1xuICAgIHRoaXMuc2tldyA9IG51bGw7XG5cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcblxuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IG1hdGguUG9pbnQoMSwxKTtcbiAgICB0aGlzLnBpdm90ID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNrZXcgPSBuZXcgbWF0aC5Qb2ludCgwLjApO1xuICAgIFxuICAgIHRoaXMucm90YXRpb24gPSAwO1xuICAgIHRoaXMuX3NyID0gTWF0aC5zaW4oMCk7XG4gICAgdGhpcy5fY3IgPSBNYXRoLmNvcygwKTtcbiAgICBcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufVxuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHJhbnNmb3JtO1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uIChwYXJlbnRUcmFuc2Zvcm0pXG57XG4gICAgdmFyIHB0ID0gcGFyZW50VHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGx0ID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcblxuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueDtcbiAgICAgICAgbHQuYiAgPSAgdGhpcy5fc3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmMgID0gLXRoaXMuX3NyICogdGhpcy5zY2FsZS55O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQudHggPSAgdGhpcy5wb3NpdGlvbi54IC0gKHRoaXMucGl2b3QueCAqIGx0LmEgKyB0aGlzLnBpdm90LnkgKiBsdC5jKTtcbiAgICAgICAgbHQudHkgPSAgdGhpcy5wb3NpdGlvbi55IC0gKHRoaXMucGl2b3QueCAqIGx0LmIgKyB0aGlzLnBpdm90LnkgKiBsdC5kKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmRpcnR5IHx8IHBhcmVudC5kaXJ0eSlcbiAgICB7ICAgICAgXG4gICAgICAgIC8vIGNvbmNhdCB0aGUgcGFyZW50IG1hdHJpeCB3aXRoIHRoZSBvYmplY3RzIHRyYW5zZm9ybS5cbiAgICAgICAgd3QuYSAgPSBsdC5hICAqIHB0LmEgKyBsdC5iICAqIHB0LmM7XG4gICAgICAgIHd0LmIgID0gbHQuYSAgKiBwdC5iICsgbHQuYiAgKiBwdC5kO1xuICAgICAgICB3dC5jICA9IGx0LmMgICogcHQuYSArIGx0LmQgICogcHQuYztcbiAgICAgICAgd3QuZCAgPSBsdC5jICAqIHB0LmIgKyBsdC5kICAqIHB0LmQ7XG4gICAgICAgIHd0LnR4ID0gbHQudHggKiBwdC5hICsgbHQudHkgKiBwdC5jICsgcHQudHg7XG4gICAgICAgIHd0LnR5ID0gbHQudHggKiBwdC5iICsgbHQudHkgKiBwdC5kICsgcHQudHk7ICAgICAgIFxuICAgIFxuICAgLy8gICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgLy8gICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbi8vICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgLy8gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm07XG5cblxuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vR3JhcGhpY3NEYXRhJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcFBvaW50ID0gbmV3IG1hdGguUG9pbnQoKTtcblxuLyoqXG4gKiBUaGUgR3JhcGhpY3MgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB1c2VkIHRvIGRyYXcgcHJpbWl0aXZlIHNoYXBlcyBzdWNoIGFzIGxpbmVzLCBjaXJjbGVzIGFuZFxuICogcmVjdGFuZ2xlcyB0byB0aGUgZGlzcGxheSwgYW5kIHRvIGNvbG9yIGFuZCBmaWxsIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3MoKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCAodGhpY2tuZXNzKSBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gMDtcblxuICAgIC8qKlxuICAgICAqIEdyYXBoaWNzIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQXBwbHkgYSB2YWx1ZSBvZiAweEZGRkZGRiB0byByZXNldCB0aGUgdGludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByZXZpb3VzIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVXNlZCB0byBjb21wYXJlIHRvIHRoZSBjdXJyZW50IHRpbnQgYW5kIGNoZWNrIGlmIHRoZXJlcyBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMuX3ByZXZUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUw7XG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHBhdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBjb250YWluaW5nIHNvbWUgV2ViR0wtcmVsYXRlZCBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgb2JqZWN0Pn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIFRPRE8gLSBfd2ViZ2wgc2hvdWxkIHVzZSBhIHByb3RvdHlwZSBvYmplY3QsIG5vdCBhIHJhbmRvbSB1bmRvY3VtZW50ZWQgb2JqZWN0Li4uXG4gICAgdGhpcy5fd2ViR0wgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBzaGFwZSBpcyBiZWluZyB1c2VkIGFzIGEgbWFzay5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc01hc2sgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBib3VuZHMnIHBhZGRpbmcgdXNlZCBmb3IgYm91bmRzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYm91bmRzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBsb2NhbCBib3VuZHMgdG8gcHJldmVudCByZWNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLDAsMSwxKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgV2ViR0wgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlXG4gICAgICogZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgY2FjaGVkIHNwcml0ZSBvYmplY3QgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGNhY2hlQXNCaXRtYXAgaXMgc2V0IHRvIHRydWUgdGhlIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIGFzIGlmIGl0IHdhcyBhIHNwcml0ZS5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGdyYXBoaWNzIGVsZW1lbnQgZG9lcyBub3QgY2hhbmdlIG9mdGVuLCBhcyBpdCB3aWxsIHNwZWVkIHVwIHRoZSByZW5kZXJpbmdcbiAgICAgKiBvZiB0aGUgb2JqZWN0IGluIGV4Y2hhbmdlIGZvciB0YWtpbmcgdXAgdGV4dHVyZSBtZW1vcnkuIEl0IGlzIGFsc28gdXNlZnVsIGlmIHlvdSBuZWVkIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB0byBiZSBhbnRpLWFsaWFzZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyBjYW52YXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGlmXG4gICAgICogeW91IGFyZSBjb25zdGFudGx5IHJlZHJhd2luZyB0aGUgZ3JhcGhpY3MgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhY2hlQXNCaXRtYXBcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkdyYXBoaWNzI1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5HcmFwaGljcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3M7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICogTm90ZSB0aGF0IHRoZSBvbmx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIGNsb25lZCwgbm90IGl0cyB0cmFuc2Zvcm0gKHBvc2l0aW9uLHNjYWxlLGV0YylcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjbG9uZSA9IG5ldyBHcmFwaGljcygpO1xuXG4gICAgY2xvbmUucmVuZGVyYWJsZSAgICA9IHRoaXMucmVuZGVyYWJsZTtcbiAgICBjbG9uZS5maWxsQWxwaGEgICAgID0gdGhpcy5maWxsQWxwaGE7XG4gICAgY2xvbmUubGluZVdpZHRoICAgICA9IHRoaXMubGluZVdpZHRoO1xuICAgIGNsb25lLmxpbmVDb2xvciAgICAgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICBjbG9uZS50aW50ICAgICAgICAgID0gdGhpcy50aW50O1xuICAgIGNsb25lLmJsZW5kTW9kZSAgICAgPSB0aGlzLmJsZW5kTW9kZTtcbiAgICBjbG9uZS5pc01hc2sgICAgICAgID0gdGhpcy5pc01hc2s7XG4gICAgY2xvbmUuYm91bmRzUGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcbiAgICBjbG9uZS5kaXJ0eSAgICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5nbERpcnR5ICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRoaXMuY2FjaGVkU3ByaXRlRGlydHk7XG5cbiAgICAvLyBjb3B5IGdyYXBoaWNzIGRhdGFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgY2xvbmUuZ3JhcGhpY3NEYXRhLnB1c2godGhpcy5ncmFwaGljc0RhdGFbaV0uY2xvbmUoKSk7XG4gICAgfVxuXG4gICAgY2xvbmUuY3VycmVudFBhdGggPSBjbG9uZS5ncmFwaGljc0RhdGFbY2xvbmUuZ3JhcGhpY3NEYXRhLmxlbmd0aCAtIDFdO1xuXG4gICAgY2xvbmUudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgIHJldHVybiBjbG9uZTtcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsaW5lIHN0eWxlIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gR3JhcGhpY3MgbWV0aG9kcyBzdWNoIGFzIHRoZSBsaW5lVG8oKSBtZXRob2Qgb3IgdGhlIGRyYXdDaXJjbGUoKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lU3R5bGUgPSBmdW5jdGlvbiAobGluZVdpZHRoLCBjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGggfHwgMDtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5saW5lQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGhhbGZ3YXkgdGhyb3VnaCBhIGxpbmU/IHN0YXJ0IGEgbmV3IG9uZSFcbiAgICAgICAgICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24odGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMuc2xpY2UoLTIpKTtcbiAgICAgICAgICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0cyBlbXB0eSBzbyBsZXRzIGp1c3Qgc2V0IHRoZSBsaW5lIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQWxwaGEgPSB0aGlzLmxpbmVBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBNb3ZlcyB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvIHgsIHkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gICovXG5HcmFwaGljcy5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihbeCx5XSk7XG4gICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgbGluZSB1c2luZyB0aGUgY3VycmVudCBsaW5lIHN0eWxlIGZyb20gdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byAoeCwgeSk7XG4gKiBUaGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIGlzIHRoZW4gc2V0IHRvICh4LCB5KS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeCwgeSk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsIDApO1xuICAgIH1cblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICB4YSA9IGZyb21YICsgKCAoY3BYIC0gZnJvbVgpICogaiApO1xuICAgICAgICB5YSA9IGZyb21ZICsgKCAoY3BZIC0gZnJvbVkpICogaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCB4YSArICggKChjcFggKyAoICh0b1ggLSBjcFgpICogaiApKSAtIHhhKSAqIGogKSxcbiAgICAgICAgICAgICAgICAgICAgIHlhICsgKCAoKGNwWSArICggKHRvWSAtIGNwWSkgKiBqICkpIC0geWEpICogaiApICk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSBjcFgyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgY3BYMiwgY3BZMiwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciBuID0gMjAsXG4gICAgICAgIGR0LFxuICAgICAgICBkdDIsXG4gICAgICAgIGR0MyxcbiAgICAgICAgdDIsXG4gICAgICAgIHQzLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIGR0ID0gKDEgLSBqKTtcbiAgICAgICAgZHQyID0gZHQgKiBkdDtcbiAgICAgICAgZHQzID0gZHQyICogZHQ7XG5cbiAgICAgICAgdDIgPSBqICogajtcbiAgICAgICAgdDMgPSB0MiAqIGo7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIGR0MyAqIGZyb21YICsgMyAqIGR0MiAqIGogKiBjcFggKyAzICogZHQgKiB0MiAqIGNwWDIgKyB0MyAqIHRvWCxcbiAgICAgICAgICAgICAgICAgICAgIGR0MyAqIGZyb21ZICsgMyAqIGR0MiAqIGogKiBjcFkgKyAzICogZHQgKiB0MiAqIGNwWTIgKyB0MyAqIHRvWSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmNUbygpIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSBiZXR3ZWVuIHR3byB0YW5nZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFwiYm9ycm93ZWRcIiBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZnhjYW52YXMvIC0gdGhhbmtzIGdvb2dsZSFcbiAqXG4gKiBAcGFyYW0geDEge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHgyIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTIge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjVG8gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIHJhZGl1cylcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyh4MSwgeTEpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyxcbiAgICAgICAgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSxcbiAgICAgICAgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSxcbiAgICAgICAgYTEgPSBmcm9tWSAtIHkxLFxuICAgICAgICBiMSA9IGZyb21YIC0geDEsXG4gICAgICAgIGEyID0geTIgICAtIHkxLFxuICAgICAgICBiMiA9IHgyICAgLSB4MSxcbiAgICAgICAgbW0gPSBNYXRoLmFicyhhMSAqIGIyIC0gYjEgKiBhMik7XG5cbiAgICBpZiAobW0gPCAxLjBlLTggfHwgcmFkaXVzID09PSAwKVxuICAgIHtcbiAgICAgICAgaWYgKHBvaW50c1twb2ludHMubGVuZ3RoLTJdICE9PSB4MSB8fCBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSAhPT0geTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIGRkID0gYTEgKiBhMSArIGIxICogYjEsXG4gICAgICAgICAgICBjYyA9IGEyICogYTIgKyBiMiAqIGIyLFxuICAgICAgICAgICAgdHQgPSBhMSAqIGEyICsgYjEgKiBiMixcbiAgICAgICAgICAgIGsxID0gcmFkaXVzICogTWF0aC5zcXJ0KGRkKSAvIG1tLFxuICAgICAgICAgICAgazIgPSByYWRpdXMgKiBNYXRoLnNxcnQoY2MpIC8gbW0sXG4gICAgICAgICAgICBqMSA9IGsxICogdHQgLyBkZCxcbiAgICAgICAgICAgIGoyID0gazIgKiB0dCAvIGNjLFxuICAgICAgICAgICAgY3ggPSBrMSAqIGIyICsgazIgKiBiMSxcbiAgICAgICAgICAgIGN5ID0gazEgKiBhMiArIGsyICogYTEsXG4gICAgICAgICAgICBweCA9IGIxICogKGsyICsgajEpLFxuICAgICAgICAgICAgcHkgPSBhMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHF4ID0gYjIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBxeSA9IGEyICogKGsxICsgajIpLFxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IE1hdGguYXRhbjIocHkgLSBjeSwgcHggLSBjeCksXG4gICAgICAgICAgICBlbmRBbmdsZSAgID0gTWF0aC5hdGFuMihxeSAtIGN5LCBxeCAtIGN4KTtcblxuICAgICAgICB0aGlzLmFyYyhjeCArIHgxLCBjeSArIHkxLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBiMSAqIGEyID4gYjIgKiBhMSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmMgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlICh1c2VkIHRvIGNyZWF0ZSBjaXJjbGVzLCBvciBwYXJ0cyBvZiBjaXJjbGVzKS5cbiAqXG4gKiBAcGFyYW0gY3gge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBjeSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBzdGFydEFuZ2xlIHtudW1iZXJ9IFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucyAoMCBpcyBhdCB0aGUgMyBvJ2Nsb2NrIHBvc2l0aW9uIG9mIHRoZSBhcmMncyBjaXJjbGUpXG4gKiBAcGFyYW0gZW5kQW5nbGUge251bWJlcn0gVGhlIGVuZGluZyBhbmdsZSwgaW4gcmFkaWFuc1xuICogQHBhcmFtIGFudGljbG9ja3dpc2Uge2Jvb2xlYW59IE9wdGlvbmFsLiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgY291bnRlcmNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuIEZhbHNlIGlzIGRlZmF1bHQsIGFuZCBpbmRpY2F0ZXMgY2xvY2t3aXNlLCB3aGlsZSB0cnVlIGluZGljYXRlcyBjb3VudGVyLWNsb2Nrd2lzZS5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmMgPSBmdW5jdGlvbihjeCwgY3ksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UpXG57XG4gICAgYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gZW5kQW5nbGUpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiggIWFudGljbG9ja3dpc2UgJiYgZW5kQW5nbGUgPD0gc3RhcnRBbmdsZSApXG4gICAge1xuICAgICAgICBlbmRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG4gICAgZWxzZSBpZiggYW50aWNsb2Nrd2lzZSAmJiBzdGFydEFuZ2xlIDw9IGVuZEFuZ2xlIClcbiAgICB7XG4gICAgICAgIHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuXG4gICAgdmFyIHN3ZWVwID0gYW50aWNsb2Nrd2lzZSA/IChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpICogLTEgOiAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKTtcbiAgICB2YXIgc2VncyA9ICBNYXRoLmNlaWwoTWF0aC5hYnMoc3dlZXApIC8gKE1hdGguUEkgKiAyKSkgKiA0MDtcblxuICAgIGlmKHN3ZWVwID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0WCA9IGN4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXM7XG4gICAgdmFyIHN0YXJ0WSA9IGN5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXM7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyhzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIHRoZXRhID0gc3dlZXAvKHNlZ3MqMik7XG4gICAgdmFyIHRoZXRhMiA9IHRoZXRhKjI7XG5cbiAgICB2YXIgY1RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgICB2YXIgc2VnTWludXMgPSBzZWdzIC0gMTtcblxuICAgIHZhciByZW1haW5kZXIgPSAoIHNlZ01pbnVzICUgMSApIC8gc2VnTWludXM7XG5cbiAgICBmb3IodmFyIGk9MDsgaTw9c2VnTWludXM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciByZWFsID0gIGkgKyByZW1haW5kZXIgKiBpO1xuXG5cbiAgICAgICAgdmFyIGFuZ2xlID0gKCh0aGV0YSkgKyBzdGFydEFuZ2xlICsgKHRoZXRhMiAqIHJlYWwpKTtcblxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgdmFyIHMgPSAtTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCggKGNUaGV0YSAqICBjKSArIChzVGhldGEgKiBzKSApICogcmFkaXVzICsgY3gsXG4gICAgICAgICAgICAgICAgICAgICggKGNUaGV0YSAqIC1zKSArIChzVGhldGEgKiBjKSApICogcmFkaXVzICsgY3kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSBzaW1wbGUgb25lLWNvbG9yIGZpbGwgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIG90aGVyIEdyYXBoaWNzIG1ldGhvZHNcbiAqIChzdWNoIGFzIGxpbmVUbygpIG9yIGRyYXdDaXJjbGUoKSkgdXNlIHdoZW4gZHJhd2luZy5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmVnaW5GaWxsID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmZpbGxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGwgPSB0aGlzLmZpbGxpbmc7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxDb2xvciA9IHRoaXMuZmlsbENvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQWxwaGEgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbGwgdG8gdGhlIGxpbmVzIGFuZCBzaGFwZXMgdGhhdCB3ZXJlIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhlIGJlZ2luRmlsbCgpIG1ldGhvZC5cbiAqXG4gKiBAcmV0dXJuIHtHcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmVuZEZpbGwgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gbnVsbDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5SZWN0YW5nbGUoeCx5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBSYWRpdXMgb2YgdGhlIHJlY3RhbmdsZSBjb3JuZXJzXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JvdW5kZWRSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdDaXJjbGUgPSBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkNpcmNsZSh4LHksIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhlIGVsbGlwc2VcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3RWxsaXBzZSA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgcG9seWdvbiB1c2luZyB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCB7bnVtYmVyW118UElYSS5Qb2ludFtdfSBUaGUgcGF0aCBkYXRhIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwb2x5Z29uLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24gKHBhdGgpXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBhdGg7XG5cbiAgICB2YXIgY2xvc2VkID0gdHJ1ZTtcblxuICAgIGlmIChwb2ludHMgaW5zdGFuY2VvZiBtYXRoLlBvbHlnb24pXG4gICAge1xuICAgICAgICBjbG9zZWQgPSBwb2ludHMuY2xvc2VkO1xuICAgICAgICBwb2ludHMgPSBwb2ludHMucG9pbnRzO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50c1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24ocG9pbnRzKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBjbG9zZWQ7XG5cbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBncmFwaGljcyB0aGF0IHdlcmUgZHJhd24gdG8gdGhpcyBHcmFwaGljcyBvYmplY3QsIGFuZCByZXNldHMgZmlsbCBhbmQgbGluZSBzdHlsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuY2xlYXJEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZ2VvbWV0cnkgaXMgY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2hvdWxkIGJlIG9uZSBvZiB0aGUgc2NhbGVNb2RlIGNvbnN0c1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdFxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG5cbiAgICByZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCAqIHJlc29sdXRpb24sIGJvdW5kcy5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY2FudmFzQnVmZmVyLmNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgdGhlIHNwcml0ZSBpcyBub3QgdmlzaWJsZSBvciB0aGUgYWxwaGEgaXMgMCB0aGVuIG5vIG5lZWQgdG8gcmVuZGVyIHRoaXMgZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuZ2xEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzLnJlbmRlcih0aGlzKTtcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmlzTWFzayA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdGludCBoYXMgY2hhbmdlZCwgc2V0IHRoZSBncmFwaGljcyBvYmplY3QgdG8gZGlydHkuXG4gICAgaWYgKHRoaXMuX3ByZXZUaW50ICE9PSB0aGlzLnRpbnQpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjb2RlIG1heSBzdGlsbCBiZSBuZWVkZWQgc28gbGVhdmluZyBmb3Igbm93Li5cbiAgICAvL1xuICAgIC8qXG4gICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXApXG4gICAge1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSB8fCB0aGlzLmNhY2hlZFNwcml0ZURpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSgpO1xuXG4gICAgICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xuXG4gICAgICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMuX2NhY2hlZFNwcml0ZSwgcmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb247XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjb250ZXh0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGdyYXBoaWMgc2hhcGUgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gVGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlLCBkZWZhdWx0cyB0byB0aGlzXG4gKiAgb2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuXG4gICAgICAgIC8vIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGl0ZW0gaXMgYSBtYXNrIVxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyYWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgICAgICAgICAgdGhpcy5nbERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2xvY2FsQm91bmRzO1xuXG4gICAgICAgIHZhciB3MCA9IGJvdW5kcy54O1xuICAgICAgICB2YXIgdzEgPSBib3VuZHMud2lkdGggKyBib3VuZHMueDtcblxuICAgICAgICB2YXIgaDAgPSBib3VuZHMueTtcbiAgICAgICAgdmFyIGgxID0gYm91bmRzLmhlaWdodCArIGJvdW5kcy55O1xuXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciBtYXhYID0geDE7XG4gICAgICAgIHZhciBtYXhZID0geTE7XG5cbiAgICAgICAgdmFyIG1pblggPSB4MTtcbiAgICAgICAgdmFyIG1pblkgPSB5MTtcblxuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy54ID0gbWluWDtcbiAgICAgICAgdGhpcy5fYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IHRoaXMuX2JvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIGdyYXBoaWNzIG9iamVjdFxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5HcmFwaGljcy5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIGdyYXBoaWNzRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoIWRhdGEuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGRlYWwgd2l0aCBmaWxscy4uXG4gICAgICAgIGlmIChkYXRhLnNoYXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIGRhdGEuc2hhcGUuY29udGFpbnMoIHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSApIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICpcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUxvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGlmICh0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB2YXIgc2hhcGUsIHBvaW50cywgeCwgeSwgdywgaDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG4gICAgICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVCB8fCB0eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueCAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gUE9MWVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSAyKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvaW50c1tqKzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblggPSB4LWxpbmVXaWR0aCA8IG1pblggPyB4LWxpbmVXaWR0aCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSB4K2xpbmVXaWR0aCA+IG1heFggPyB4K2xpbmVXaWR0aCA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IHktbGluZVdpZHRoIDwgbWluWSA/IHktbGluZVdpZHRoIDogbWluWTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IHkrbGluZVdpZHRoID4gbWF4WSA/IHkrbGluZVdpZHRoIDogbWF4WTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgbWluWCA9IDA7XG4gICAgICAgIG1heFggPSAwO1xuICAgICAgICBtaW5ZID0gMDtcbiAgICAgICAgbWF4WSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy54ID0gbWluWCAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMud2lkdGggPSAobWF4WCAtIG1pblgpICsgcGFkZGluZyAqIDI7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy55ID0gbWluWSAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMuaGVpZ2h0ID0gKG1heFkgLSBtaW5ZKSArIHBhZGRpbmcgKiAyO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNhY2hlZCBzcHJpdGUgd2hlbiB0aGUgc3ByaXRlIGhhcyBjYWNoZUFzQml0bWFwID0gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgaWYgKCF0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzKTtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgU3ByaXRlKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyID0gY2FudmFzQnVmZmVyO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIucmVzaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gbGV2ZXJhZ2UgdGhlIGFuY2hvciB0byBhY2NvdW50IGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC5zYXZlKCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGFscGhhIG9mIHRoZSBncmFwaGljcyB0byAxIGZvciB0aGUgcmVuZGVyLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gbm93IHJlbmRlciB0aGUgZ3JhcGhpYy4uXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0KTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG59O1xuKi9cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjYWNoZWRTcHJpdGUgPSB0aGlzLl9jYWNoZWRTcHJpdGU7XG4gICAgdmFyIHRleHR1cmUgPSBjYWNoZWRTcHJpdGUudGV4dHVyZTtcbiAgICB2YXIgY2FudmFzID0gY2FjaGVkU3ByaXRlLmJ1ZmZlci5jYW52YXM7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLmZyYW1lLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLmZyYW1lLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICBjYWNoZWRTcHJpdGUuX3dpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIGNhY2hlZFNwcml0ZS5faGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgZGlydHkgYmFzZSB0ZXh0dXJlc1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZGlydHkoKTtcbn07Ki9cblxuLyoqXG4gKiBEZXN0cm95cyBhIHByZXZpb3VzIGNhY2hlZCBzcHJpdGUuXG4gKlxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3lDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS50ZXh0dXJlLmRlc3Ryb3kodHJ1ZSk7XG5cbiAgICAvLyBsZXQgdGhlIGdjIGNvbGxlY3QgdGhlIHVudXNlZCBzcHJpdGVcbiAgICAvLyBUT0RPIGNvdWxkIGJlIG9iamVjdCBwb29sZWQhXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07Ki9cblxuLyoqXG4gKiBEcmF3cyB0aGUgZ2l2ZW4gc2hhcGUgdG8gdGhpcyBHcmFwaGljcyBvYmplY3QuIENhbiBiZSBhbnkgb2YgQ2lyY2xlLCBSZWN0YW5nbGUsIEVsbGlwc2UsIExpbmUgb3IgUG9seWdvbi5cbiAqXG4gKiBAcGFyYW0gc2hhcGUge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX0gVGhlIGdlbmVyYXRlZCBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24gKHNoYXBlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgLy8gY2hlY2sgY3VycmVudCBwYXRoIVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IG5ldyBHcmFwaGljc0RhdGEodGhpcy5saW5lV2lkdGgsIHRoaXMubGluZUNvbG9yLCB0aGlzLmxpbmVBbHBoYSwgdGhpcy5maWxsQ29sb3IsIHRoaXMuZmlsbEFscGhhLCB0aGlzLmZpbGxpbmcsIHNoYXBlKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnB1c2goZGF0YSk7XG5cbiAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICB7XG4gICAgICAgIGRhdGEuc2hhcGUuY2xvc2VkID0gZGF0YS5zaGFwZS5jbG9zZWQgfHwgdGhpcy5maWxsaW5nO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBkZXN0cm95IGVhY2ggb2YgdGhlIEdyYXBoaWNzRGF0YSBvYmplY3RzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggd2ViZ2wgZGF0YSBlbnRyeSwgZGVzdHJveSB0aGUgV2ViR0xHcmFwaGljc0RhdGFcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl93ZWJnbCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3dlYmdsW2lkXS5kYXRhLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJnbFtpZF0uZGF0YVtqXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl93ZWJnbCA9IG51bGw7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBudWxsO1xufTtcbiIsIi8qKlxuICogQSBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBmaWxsQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbEFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGwgICAgICB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gKiBAcGFyYW0gc2hhcGUgICAgIHtDaXJjbGV8UmVjdGFuZ2xlfEVsbGlwc2V8TGluZXxQb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzRGF0YShsaW5lV2lkdGgsIGxpbmVDb2xvciwgbGluZUFscGhhLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgZmlsbCwgc2hhcGUpXG57XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IGxpbmVDb2xvcjtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVBbHBoYSA9IGxpbmVBbHBoYTtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMuX2xpbmVUaW50ID0gbGluZUNvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5fZmlsbFRpbnQgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICAgICAqL1xuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gICAgICovXG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFRoZSB0eXBlIG9mIHRoZSBzaGFwZSwgc2VlIHRoZSBDb25zdC5TaGFwZXMgZmlsZSBmb3IgYWxsIHRoZSBleGlzdGluZyB0eXBlcyxcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBzaGFwZS50eXBlO1xufVxuXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljc0RhdGEgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfVxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEdyYXBoaWNzRGF0YShcbiAgICAgICAgdGhpcy5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMubGluZUNvbG9yLFxuICAgICAgICB0aGlzLmxpbmVBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuZmlsbEFscGhhLFxuICAgICAgICB0aGlzLmZpbGwsXG4gICAgICAgIHRoaXMuc2hhcGVcbiAgICApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3MgZGF0YS5cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2hhcGUgPSBudWxsO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vV2ViR0xHcmFwaGljc0RhdGEnKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyJyksXG5cbiAgICAvLyBzb21lIGRyYXdpbmcgZnVuY3Rpb25zLi5cbiAgICBidWlsZExpbmUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkTGluZScpO1xuICAgIGJ1aWxkUG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRQb2x5Jyk7XG4gICAgYnVpbGRDb21wbGV4UG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRDb21wbGV4UG9seScpO1xuICAgIGJ1aWxkUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlJyk7XG4gICAgYnVpbGRDaXJjbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ2lyY2xlJyk7XG5cbiAgICBlYXJjdXQgPSByZXF1aXJlKCdlYXJjdXQnKTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBHcmFwaGljc1JlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgdGhpcy5ncmFwaGljc0RhdGFQb29sID0gW107XG5cbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBvaW50cyBhIHBvbHkgY2FuIGNvbnRhaW4gYmVmb3JlIGl0IGlzIHJlbmRlcmVkIGFzIGEgY29tcGxleCBwb2x5Z29uICh1c2luZyB0aGUgc3RlbmNpbCBidWZmZXIpXG4gICAgICogQHR5cGUge051bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heGltdW1TaW1wbGVQb2x5U2l6ZSA9IDIwMDtcbn1cblxuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2dyYXBoaWNzJywgR3JhcGhpY3NSZW5kZXJlcik7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZVxuICpcbiAqIEBwcml2YXRlXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy5nbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBuZXcgUHJpbWl0aXZlU2hhZGVyKHRoaXMuZ2wpXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgcmVuZGVyZXIuXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2xbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcbiAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIHZhciB3ZWJHTERhdGE7XG4gIC8vICBjb25zb2xlLmxvZyhncmFwaGljcylcbiAgICBpZiAoZ3JhcGhpY3MuZGlydHkgfHwgIWdyYXBoaWNzLl93ZWJHTFtnbC5pZF0pXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZUdyYXBoaWNzKGdyYXBoaWNzKTtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gVGhpcyAgY291bGQgYmUgc3BlZWRlZCB1cCBmb3Igc3VyZSFcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCBncmFwaGljcy5ibGVuZE1vZGUgKTtcblxuLy8gICAgdmFyIG1hdHJpeCA9ICBncmFwaGljcy53b3JsZFRyYW5zZm9ybS5jbG9uZSgpO1xuLy8gICAgdmFyIG1hdHJpeCA9ICByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXguY2xvbmUoKTtcbi8vICAgIG1hdHJpeC5hcHBlbmQoZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0pO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB3ZWJHTC5kYXRhLmxlbmd0aDsgaSA8IG47IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMLmRhdGFbaV0ubW9kZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy9UT0RPIGZpeCB0aGlzIG9uZSFcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnB1c2hTdGVuY2lsKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICBnbC51bmlmb3JtMWYocmVuZGVyZXIuc2hhZGVyTWFuYWdlci5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSAqIHdlYkdMRGF0YS5hbHBoYSk7XG5cbiAgICAgICAgICAgIC8vIHJlbmRlciBxdWFkLi5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgcmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucG9wU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICovXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHNoYWRlciA9IHRoaXMucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgICAgICAgICByZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50aW50ID0gdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5kcmF3Q291bnQrKztcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gdXBkYXRlXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnVwZGF0ZUdyYXBoaWNzID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBnZXQgdGhlIGNvbnRleHRzIGdyYXBoaWNzIG9iamVjdFxuICAgIHZhciB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF07XG5cbiAgICAvLyBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGRvZXMgbm90IGV4aXN0IGluIHRoZSB3ZWJHTCBjb250ZXh0IHRpbWUgdG8gY3JlYXRlIGl0IVxuICAgIGlmICghd2ViR0wpXG4gICAge1xuICAgICAgICB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF0gPSB7bGFzdEluZGV4OjAsIGRhdGE6W10sIGdsOmdsfTtcbiAgICB9XG5cbiAgIFxuICAgIC8vIGZsYWcgdGhlIGdyYXBoaWNzIGFzIG5vdCBkaXJ0eSBhcyB3ZSBhcmUgYWJvdXQgdG8gdXBkYXRlIGl0Li4uXG4gICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcblxuICAgIHZhciBpO1xuXG4gICAgLy8gaWYgdGhlIHVzZXIgY2xlYXJlZCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHdlIHdpbGwgbmVlZCB0byBjbGVhciBldmVyeSBvYmplY3RcbiAgICBpZiAoZ3JhcGhpY3MuY2xlYXJEaXJ0eSlcbiAgICB7XG4gICAgICAgIGdyYXBoaWNzLmNsZWFyRGlydHkgPSBmYWxzZTtcblxuICAgICAgICAvLyBsb29wIHRocm91Z2ggYW5kIHJldHVybiBhbGwgdGhlIHdlYkdMRGF0YXMgdG8gdGhlIG9iamVjdCBwb29sIHNvIHRoYW4gY2FuIGJlIHJldXNlZCBsYXRlciBvblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGdyYXBoaWNzRGF0YSA9IHdlYkdMLmRhdGFbaV07XG4gICAgICAgICAgICBncmFwaGljc0RhdGEucmVzZXQoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wdXNoKCBncmFwaGljc0RhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIHRoZSBhcnJheSBhbmQgcmVzZXQgdGhlIGluZGV4Li5cbiAgICAgICAgd2ViR0wuZGF0YSA9IFtdO1xuICAgICAgICB3ZWJHTC5sYXN0SW5kZXggPSAwO1xuICAgIH1cblxuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICAvLyBsb29wIHRocm91Z2ggdGhlIGdyYXBoaWNzIGRhdGFzIGFuZCBjb25zdHJ1Y3QgZWFjaCBvbmUuLlxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgYSBjb21wbGV4IGZpbGwgdGhlbiB0aGUgbmV3IHN0ZW5jaWwgYnVmZmVyIHRlY2huaXF1ZSB3aWxsIGJlIHVzZWRcbiAgICAvLyBvdGhlciB3aXNlIGdyYXBoaWNzIG9iamVjdHMgd2lsbCBiZSBwdXNoZWQgaW50byBhIGJhdGNoLi5cbiAgICBmb3IgKGkgPSB3ZWJHTC5sYXN0SW5kZXg7IGkgPCBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gbmVlZCB0byBhZGQgdGhlIHBvaW50cyB0aGUgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgICAgICAgICBkYXRhLnBvaW50cyA9IGRhdGEuc2hhcGUucG9pbnRzLnNsaWNlKCk7XG4gICAgICAgICAgICBpZiAoZGF0YS5zaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gY2xvc2UgdGhlIHBvbHkgaWYgdGhlIHZhbHVlIGlzIHRydWUhXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzWzBdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMl0gfHwgZGF0YS5wb2ludHNbMV0gIT09IGRhdGEucG9pbnRzW2RhdGEucG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucG9pbnRzLnB1c2goZGF0YS5wb2ludHNbMF0sIGRhdGEucG9pbnRzWzFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1BS0UgU1VSRSBXRSBIQVZFIFRIRSBDT1JSRUNUIFRZUEUuLlxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoID49IDYpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoIDwgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgKiAyKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FuRHJhd1VzaW5nU2ltcGxlID0gYnVpbGRQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuRHJhd1VzaW5nU2ltcGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGggPiAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG4gICAgICAgICAgICAgICAgYnVpbGRMaW5lKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQyB8fCBkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5FTElQKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkQ2lyY2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2ViR0wubGFzdEluZGV4Kys7XG4gICAgfVxuXG4gICAgLy8gdXBsb2FkIGFsbCB0aGUgZGlydHkgZGF0YS4uLlxuICAgIGZvciAoaSA9IDA7IGkgPCB3ZWJHTC5kYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVtpXTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLmRpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEudXBsb2FkKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB3ZWJHTCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IFRPRE8gQEFsdmluXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnN3aXRjaE1vZGUgPSBmdW5jdGlvbiAod2ViR0wsIHR5cGUpXG57XG4gICAgdmFyIHdlYkdMRGF0YTtcblxuICAgIGlmICghd2ViR0wuZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgd2ViR0xEYXRhLm1vZGUgPSB0eXBlO1xuICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVt3ZWJHTC5kYXRhLmxlbmd0aC0xXTtcblxuICAgICAgICBpZiAoKHdlYkdMRGF0YS5wb2ludHMubGVuZ3RoID4gMzIwMDAwKSB8fCB3ZWJHTERhdGEubW9kZSAhPT0gdHlwZSB8fCB0eXBlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgICAgIHdlYkdMLmRhdGEucHVzaCh3ZWJHTERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd2ViR0xEYXRhLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB3ZWJHTERhdGE7XG59O1xuXG4iLCIvKipcbiAqIEFuIG9iamVjdCBjb250YWluaW5nIFdlYkdMIHNwZWNpZmljIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBXZWJHTEdyYXBoaWNzRGF0YShnbCkge1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLy9UT0RPIGRvZXMgdGhpcyBuZWVkIHRvIGJlIHNwbGl0IGJlZm9yZSB1cGxvZGluZz8/XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgY29sb3IgY29tcG9uZW50cyAocixnLGIpXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5jb2xvciA9IFswLDAsMF07IC8vIGNvbG9yIHNwbGl0IVxuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgcG9pbnRzIHRvIGRyYXdcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50W119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IFtdO1xuICAgIC8qKlxuICAgICAqIFRoZSBtYWluIGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggYnVmZmVyXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogdG9kbyBAYWx2aW5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tb2RlID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgZ3JhcGhpY3MgaXMgZGlydHkgb3Igbm90XG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn1cblxuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xHcmFwaGljc0RhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIFJlc2V0cyB0aGUgdmVydGljZXMgYW5kIHRoZSBpbmRpY2VzXG4gKi9cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnBvaW50cy5sZW5ndGggPSAwO1xuICAgIHRoaXMuaW5kaWNlcy5sZW5ndGggPSAwO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbi8vICAgIHRoaXMubGFzdEluZGV4ID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDtcbiAgICB0aGlzLmdsUG9pbnRzID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnBvaW50cyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5idWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmdsUG9pbnRzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmdsSW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmluZGljZXMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5nbEluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuY29sb3IgPSBudWxsO1xuICAgIHRoaXMucG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIFxuICAgIHRoaXMuZ2wgPSBudWxsO1xuXG4gICAgdGhpcy5idWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5nbFBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5nbEluZGljZXMgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihnbClcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBnbCxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgZmxpcFk7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIHZlYzMgdGludDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvciAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpXG4gICAgKTtcbn1cblxuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHJpbWl0aXZlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBjaXJjbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRyYXdcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDaXJjbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgdmFyIGNpcmNsZURhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSBjaXJjbGVEYXRhLng7XG4gICAgdmFyIHkgPSBjaXJjbGVEYXRhLnk7XG4gICAgdmFyIHdpZHRoO1xuICAgIHZhciBoZWlnaHQ7XG5cbiAgICAvLyBUT0RPIC0gYml0IGhhY2t5Pz9cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSBjaXJjbGVEYXRhLnJhZGl1cztcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS53aWR0aDtcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHRvdGFsU2VncyA9IE1hdGguZmxvb3IoMzAgKiBNYXRoLnNxcnQoY2lyY2xlRGF0YS5yYWRpdXMpKSB8fCBNYXRoLmZsb29yKDE1ICogTWF0aC5zcXJ0KGNpcmNsZURhdGEud2lkdGggKyBjaXJjbGVEYXRhLmhlaWdodCkpO1xuICAgIHZhciBzZWcgPSAoTWF0aC5QSSAqIDIpIC8gdG90YWxTZWdzIDtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTZWdzICsgMSA7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaCh4LHksIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgeSArIE1hdGguY29zKHNlZyAqIGkpICogaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MrKywgdmVjUG9zKyspO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcy0xKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cy5wdXNoKHggKyBNYXRoLnNpbihzZWcgKiBpKSAqIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBidWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENpcmNsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21wbGV4IHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENvbXBsZXhQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vVE9ETyAtIG5vIG5lZWQgdG8gY29weSB0aGlzIGFzIGl0IGdldHMgdHVybmVkIGludG8gYSBGTG9hdDMyQXJyYXkgYW55d2F5cy4uXG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHMuc2xpY2UoKTtcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB3ZWJHTERhdGEucG9pbnRzID0gcG9pbnRzO1xuICAgIHdlYkdMRGF0YS5hbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgd2ViR0xEYXRhLmNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcblxuICAgIC8vIGNhbGNsYXRlIHRoZSBib3VuZHMuLlxuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgdmFyIHgseTtcblxuICAgIC8vIGdldCBzaXplLi5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrPTIpXG4gICAge1xuICAgICAgICB4ID0gcG9pbnRzW2ldO1xuICAgICAgICB5ID0gcG9pbnRzW2krMV07XG5cbiAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBxdWFkIHRvIHRoZSBlbmQgY29zIHRoZXJlIGlzIG5vIHBvaW50IG1ha2luZyBhbm90aGVyIGJ1ZmZlciFcbiAgICBwb2ludHMucHVzaChtaW5YLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWF4WSxcbiAgICAgICAgICAgICAgICBtaW5YLCBtYXhZKTtcblxuICAgIC8vIHB1c2ggYSBxdWFkIG9udG8gdGhlIGVuZC4uXG5cbiAgICAvL1RPRE8gLSB0aGlzIGFpbnQgbmVlZGVkIVxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goIGkgKTtcbiAgICB9XG5cbn07XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29tcGxleFBvbHk7IiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZExpbmUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gVE9ETyBPUFRJTUlTRSFcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGxpbmUgd2lkdGggaXMgYW4gb2RkIG51bWJlciBhZGQgMC41IHRvIGFsaWduIHRvIGEgd2hvbGUgcGl4ZWxcbiAgICAvLyBjb21tZW50aW5nIHRoaXMgb3V0IGZpeGVzICM3MTEgYW5kICMxNjIwXG4gICAgLy8gaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGglMilcbiAgICAvLyB7XG4gICAgLy8gICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAgIHBvaW50c1tpXSArPSAwLjU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGZpcnN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgdmFyIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IHBvaW50IGlzIHRoZSBsYXN0IHBvaW50IC0gZ29ubmEgaGF2ZSBpc3N1ZXMgOilcbiAgICBpZiAoZmlyc3RQb2ludC54ID09PSBsYXN0UG9pbnQueCAmJiBmaXJzdFBvaW50LnkgPT09IGxhc3RQb2ludC55KVxuICAgIHtcbiAgICAgICAgLy8gbmVlZCB0byBjbG9uZSBhcyB3ZSBhcmUgZ29pbmcgdG8gc2xpZ2h0bHkgbW9kaWZ5IHRoZSBzaGFwZS4uXG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5zbGljZSgpO1xuXG4gICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHZhciBtaWRQb2ludFggPSBsYXN0UG9pbnQueCArIChmaXJzdFBvaW50LnggLSBsYXN0UG9pbnQueCkgKjAuNTtcbiAgICAgICAgdmFyIG1pZFBvaW50WSA9IGxhc3RQb2ludC55ICsgKGZpcnN0UG9pbnQueSAtIGxhc3RQb2ludC55KSAqMC41O1xuXG4gICAgICAgIHBvaW50cy51bnNoaWZ0KG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICAgICAgcG9pbnRzLnB1c2gobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgdmFyIGluZGV4Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIHZhciBpbmRleFN0YXJ0ID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAvLyBEUkFXIHRoZSBMaW5lXG4gICAgdmFyIHdpZHRoID0gZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEubGluZUNvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEubGluZUFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHB4LCBweSwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeTtcbiAgICB2YXIgcGVycHgsIHBlcnB5LCBwZXJwMngsIHBlcnAyeSwgcGVycDN4LCBwZXJwM3k7XG4gICAgdmFyIGExLCBiMSwgYzEsIGEyLCBiMiwgYzI7XG4gICAgdmFyIGRlbm9tLCBwZGlzdCwgZGlzdDtcblxuICAgIHAxeCA9IHBvaW50c1swXTtcbiAgICBwMXkgPSBwb2ludHNbMV07XG5cbiAgICBwMnggPSBwb2ludHNbMl07XG4gICAgcDJ5ID0gcG9pbnRzWzNdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSAgcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcblxuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIC8vIHN0YXJ0XG4gICAgdmVydHMucHVzaChwMXggLSBwZXJweCAsIHAxeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDF4ICsgcGVycHggLCBwMXkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoLTE7IGkrKylcbiAgICB7XG4gICAgICAgIHAxeCA9IHBvaW50c1soaS0xKSoyXTtcbiAgICAgICAgcDF5ID0gcG9pbnRzWyhpLTEpKjIgKyAxXTtcblxuICAgICAgICBwMnggPSBwb2ludHNbKGkpKjJdO1xuICAgICAgICBwMnkgPSBwb2ludHNbKGkpKjIgKyAxXTtcblxuICAgICAgICBwM3ggPSBwb2ludHNbKGkrMSkqMl07XG4gICAgICAgIHAzeSA9IHBvaW50c1soaSsxKSoyICsgMV07XG5cbiAgICAgICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgICAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgICAgICBwZXJwMnggPSAtKHAyeSAtIHAzeSk7XG4gICAgICAgIHBlcnAyeSA9IHAyeCAtIHAzeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAyeCpwZXJwMnggKyBwZXJwMnkqcGVycDJ5KTtcbiAgICAgICAgcGVycDJ4IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeSAvPSBkaXN0O1xuICAgICAgICBwZXJwMnggKj0gd2lkdGg7XG4gICAgICAgIHBlcnAyeSAqPSB3aWR0aDtcblxuICAgICAgICBhMSA9ICgtcGVycHkgKyBwMXkpIC0gKC1wZXJweSArIHAyeSk7XG4gICAgICAgIGIxID0gKC1wZXJweCArIHAyeCkgLSAoLXBlcnB4ICsgcDF4KTtcbiAgICAgICAgYzEgPSAoLXBlcnB4ICsgcDF4KSAqICgtcGVycHkgKyBwMnkpIC0gKC1wZXJweCArIHAyeCkgKiAoLXBlcnB5ICsgcDF5KTtcbiAgICAgICAgYTIgPSAoLXBlcnAyeSArIHAzeSkgLSAoLXBlcnAyeSArIHAyeSk7XG4gICAgICAgIGIyID0gKC1wZXJwMnggKyBwMngpIC0gKC1wZXJwMnggKyBwM3gpO1xuICAgICAgICBjMiA9ICgtcGVycDJ4ICsgcDN4KSAqICgtcGVycDJ5ICsgcDJ5KSAtICgtcGVycDJ4ICsgcDJ4KSAqICgtcGVycDJ5ICsgcDN5KTtcblxuICAgICAgICBkZW5vbSA9IGExKmIyIC0gYTIqYjE7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8IDAuMSApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgZGVub20rPTEwLjE7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4ID0gKGIxKmMyIC0gYjIqYzEpL2Rlbm9tO1xuICAgICAgICBweSA9IChhMipjMSAtIGExKmMyKS9kZW5vbTtcblxuXG4gICAgICAgIHBkaXN0ID0gKHB4IC1wMngpICogKHB4IC1wMngpICsgKHB5IC1wMnkpICogKHB5IC1wMnkpO1xuXG5cbiAgICAgICAgaWYgKHBkaXN0ID4gMTQwICogMTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICBwZXJwM3ggPSBwZXJweCAtIHBlcnAyeDtcbiAgICAgICAgICAgIHBlcnAzeSA9IHBlcnB5IC0gcGVycDJ5O1xuXG4gICAgICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAzeCpwZXJwM3ggKyBwZXJwM3kqcGVycDN5KTtcbiAgICAgICAgICAgIHBlcnAzeCAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN5IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3ggKj0gd2lkdGg7XG4gICAgICAgICAgICBwZXJwM3kgKj0gd2lkdGg7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJwM3gsIHAyeSArcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGV4Q291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmVydHMucHVzaChweCAsIHB5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIChweC1wMngpLCBwMnkgLSAocHkgLSBwMnkpKTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcDF4ID0gcG9pbnRzWyhsZW5ndGgtMikqMl07XG4gICAgcDF5ID0gcG9pbnRzWyhsZW5ndGgtMikqMiArIDFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWyhsZW5ndGgtMSkqMl07XG4gICAgcDJ5ID0gcG9pbnRzWyhsZW5ndGgtMSkqMiArIDFdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KyspO1xuICAgIH1cblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0LTEpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZExpbmU7IiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5XZWJHTEdyYXBoaWNzRGF0YX0gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChwb2ludHMsIG51bGwsIDIpO1xuXG4gICAgaWYgKCF0cmlhbmdsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoIC8gNjtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gK3ZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZXJ0UG9zKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2ZXJ0cy5wdXNoKHBvaW50c1tpICogMl0sIHBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFBvbHk7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gLS0tIC8vXG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgLy9cbiAgICB2YXIgcmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSByZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSByZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICAvLyBzdGFydFxuICAgICAgICB2ZXJ0cy5wdXNoKHgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCAsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIC8vIGluc2VydCAyIGRlYWQgdHJpYW5nbGVzLi5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRQb3MsIHZlcnRQb3MsIHZlcnRQb3MrMSwgdmVydFBvcysyLCB2ZXJ0UG9zKzMsIHZlcnRQb3MrMyk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFt4LCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHldO1xuXG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUmVjdGFuZ2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcbiAgICBcbi8qKlxuICogQnVpbGRzIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbmJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcnJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcnJlY3REYXRhLng7XG4gICAgdmFyIHkgPSBycmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSBycmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJyZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICB2YXIgcmFkaXVzID0gcnJlY3REYXRhLnJhZGl1cztcblxuICAgIHZhciByZWNQb2ludHMgPSBbXTtcbiAgICByZWNQb2ludHMucHVzaCh4LCB5ICsgcmFkaXVzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHgsIHkgKyBoZWlnaHQsIHggKyByYWRpdXMsIHkgKyBoZWlnaHQsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoLCB5ICsgcmFkaXVzLCB4ICsgd2lkdGgsIHksIHggKyB3aWR0aCAtIHJhZGl1cywgeSwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyByYWRpdXMsIHksIHgsIHksIHgsIHkgKyByYWRpdXMgKyAwLjAwMDAwMDAwMDEsIHJlY1BvaW50cyk7XG5cbiAgICAvLyB0aGlzIHRpbnkgbnVtYmVyIGRlYWxzIHdpdGggdGhlIGlzc3VlIHRoYXQgb2NjdXJzIHdoZW4gcG9pbnRzIG92ZXJsYXAgYW5kIGVhcmN1dCBmYWlscyB0byB0cmlhbmd1bGF0ZSB0aGUgaXRlbS5cbiAgICAvLyBUT0RPIC0gZml4IHRoaXMgcHJvcGVybHksIHRoaXMgaXMgbm90IHZlcnkgZWxlZ2FudC4uIGJ1dCBpdCB3b3JrcyBmb3Igbm93LlxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocmVjUG9pbnRzLCBudWxsLCAyKTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlY1BvaW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaChyZWNQb2ludHNbaV0sIHJlY1BvaW50c1srK2ldLCByLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gcmVjUG9pbnRzO1xuXG4gICAgICAgIHRoaXMuYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUuIChoZWxwZXIgZnVuY3Rpb24uLilcbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZyb21YIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gZnJvbVkge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEBwYXJhbSBbb3V0XSB7bnVtYmVyW119IFRoZSBvdXRwdXQgYXJyYXkgdG8gYWRkIHBvaW50cyBpbnRvLiBJZiBub3QgcGFzc2VkLCBhIG5ldyBhcnJheSBpcyBjcmVhdGVkLlxuICogQHJldHVybiB7bnVtYmVyW119IGFuIGFycmF5IG9mIHBvaW50c1xuICovXG5xdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IGZ1bmN0aW9uIChmcm9tWCwgZnJvbVksIGNwWCwgY3BZLCB0b1gsIHRvWSwgb3V0KVxue1xuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIHhiLFxuICAgICAgICB5YixcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSBvdXQgfHwgW107XG5cbiAgICBmdW5jdGlvbiBnZXRQdChuMSAsIG4yLCBwZXJjKSB7XG4gICAgICAgIHZhciBkaWZmID0gbjIgLSBuMTtcblxuICAgICAgICByZXR1cm4gbjEgKyAoIGRpZmYgKiBwZXJjICk7XG4gICAgfVxuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKyApIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIC8vIFRoZSBHcmVlbiBMaW5lXG4gICAgICAgIHhhID0gZ2V0UHQoIGZyb21YICwgY3BYICwgaiApO1xuICAgICAgICB5YSA9IGdldFB0KCBmcm9tWSAsIGNwWSAsIGogKTtcbiAgICAgICAgeGIgPSBnZXRQdCggY3BYICwgdG9YICwgaiApO1xuICAgICAgICB5YiA9IGdldFB0KCBjcFkgLCB0b1kgLCBqICk7XG5cbiAgICAgICAgLy8gVGhlIEJsYWNrIERvdFxuICAgICAgICB4ID0gZ2V0UHQoIHhhICwgeGIgLCBqICk7XG4gICAgICAgIHkgPSBnZXRQdCggeWEgLCB5YiAsIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUm91bmRlZFJlY3RhbmdsZTsiLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBjb3JlIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSVxuICovXG4vLyBleHBvcnQgY29yZSBhbmQgY29uc3QuIFdlIGFzc2lnbiBjb3JlIHRvIGNvbnN0IHNvIHRoYXQgdGhlIG5vbi1yZWZlcmVuY2UgdHlwZXMgaW4gY29uc3QgcmVtYWluIGluLXRhY3RcbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduKHJlcXVpcmUoJy4vY29uc3QnKSwgcmVxdWlyZSgnLi9tYXRoJyksIHtcbiAgICAvLyB1dGlsc1xuICAgIHV0aWxzOiByZXF1aXJlKCcuL3V0aWxzJyksXG4gICAgdGlja2VyOiByZXF1aXJlKCcuL3RpY2tlcicpLFxuXG4gICAgLy8gZGlzcGxheVxuICAgIERpc3BsYXlPYmplY3Q6ICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9EaXNwbGF5T2JqZWN0JyksXG4gICAgQ29udGFpbmVyOiAgICAgICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuXG4gICAgLy8gc3ByaXRlc1xuICAgIFNwcml0ZTogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBQYXJ0aWNsZUNvbnRhaW5lcjogICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lcicpLFxuICAgIFNwcml0ZVJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHRcbiAgICBUZXh0OiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHQvVGV4dCcpLFxuXG4gICAgLy8gcHJpbWl0aXZlc1xuICAgIEdyYXBoaWNzOiAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGE6ICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRGF0YScpLFxuICAgIEdyYXBoaWNzUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dHVyZXNcbiAgICBUZXh0dXJlOiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBCYXNlVGV4dHVyZTogICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL0Jhc2VUZXh0dXJlJyksXG4gICAgUmVuZGVyVGV4dHVyZTogICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgQmFzZVJlbmRlclRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmU6ICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnM6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVGV4dHVyZVV2cycpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gY2FudmFzXG4gICAgQ2FudmFzUmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyJyksXG4gICAgQ2FudmFzR3JhcGhpY3M6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzJyksXG4gICAgQ2FudmFzQnVmZmVyOiAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gd2ViZ2xcbiAgICBXZWJHTFJlbmRlcmVyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgU2hhZGVyOiAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXInKSxcbiAgICBPYmplY3RSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFJlbmRlclRhcmdldDogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuXG4gICAgLy8gZmlsdGVycyAtIHdlYmdsXG4gICAgQWJzdHJhY3RGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlcicpLFxuICAgIEZYQUFGaWx0ZXI6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFNwcml0ZU1hc2tGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlcicpLFxuXG4gICAgZ2xDb3JlOiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3Qgd2hpY2ggcmVuZGVyZXIgeW91IHNob3VsZCBiZSB1c2luZy5cbiAgICAgKiBXZWJHTCBpcyB0aGUgcHJlZmVycmVkIHJlbmRlcmVyIGFzIGl0IGlzIGEgbG90IGZhc3Rlci4gSWYgd2ViR0wgaXMgbm90IHN1cHBvcnRlZCBieVxuICAgICAqIHRoZSBicm93c2VyIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhIGNhbnZhcyByZW5kZXJlclxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAcGFyYW0gd2lkdGg9ODAwIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gaGVpZ2h0PTYwMCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSByZW5kZXJlcnMgdmlld1xuICAgICAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gICAgICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZV0ge2Jvb2xlYW59IGVuYWJsZXMgZHJhd2luZyBidWZmZXIgcHJlc2VydmF0aW9uLCBlbmFibGUgdGhpcyBpZiB5b3VcbiAgICAgKiAgICAgIG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIsIHJldGluYSB3b3VsZCBiZSAyXG4gICAgICogQHBhcmFtIFtub1dlYkdMPWZhbHNlXSB7Ym9vbGVhbn0gcHJldmVudHMgc2VsZWN0aW9uIG9mIFdlYkdMIHJlbmRlcmVyLCBldmVuIGlmIHN1Y2ggaXMgcHJlc2VudFxuICAgICAqXG4gICAgICogQHJldHVybiB7V2ViR0xSZW5kZXJlcnxDYW52YXNSZW5kZXJlcn0gUmV0dXJucyBXZWJHTCByZW5kZXJlciBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBDYW52YXNSZW5kZXJlclxuICAgICAqL1xuICAgIGF1dG9EZXRlY3RSZW5kZXJlcjogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMsIG5vV2ViR0wpXG4gICAge1xuICAgICAgICB3aWR0aCA9IHdpZHRoIHx8IDgwMDtcbiAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0IHx8IDYwMDtcblxuICAgICAgICBpZiAoIW5vV2ViR0wgJiYgY29yZS51dGlscy5pc1dlYkdMU3VwcG9ydGVkKCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgY29yZS5XZWJHTFJlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBjb3JlLkNhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgIH1cbn0pO1xuIiwiLy8gQHRvZG8gLSBpZ25vcmUgdGhlIHRvbyBtYW55IHBhcmFtZXRlcnMgd2FybmluZyBmb3Igbm93XG4vLyBzaG91bGQgZWl0aGVyIGZpeCBpdCBvciBjaGFuZ2UgdGhlIGpzaGludCBjb25maWdcbi8vIGpzaGludCAtVzA3MlxuXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuL1BvaW50Jyk7XG5cbi8qKlxuICogVGhlIHBpeGkgTWF0cml4IGNsYXNzIGFzIGFuIG9iamVjdCwgd2hpY2ggbWFrZXMgaXQgYSBsb3QgZmFzdGVyLFxuICogaGVyZSBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIGl0IDpcbiAqIHwgYSB8IGIgfCB0eHxcbiAqIHwgYyB8IGQgfCB0eXxcbiAqIHwgMCB8IDAgfCAxIHxcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIE1hdHJpeCgpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmIgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmMgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnR4ID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eSA9IDA7XG59XG5cbk1hdHJpeC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNYXRyaXg7XG5tb2R1bGUuZXhwb3J0cyA9IE1hdHJpeDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgTWF0cml4IG9iamVjdCBiYXNlZCBvbiB0aGUgZ2l2ZW4gYXJyYXkuIFRoZSBFbGVtZW50IHRvIE1hdHJpeCBtYXBwaW5nIG9yZGVyIGlzIGFzIGZvbGxvd3M6XG4gKlxuICogYSA9IGFycmF5WzBdXG4gKiBiID0gYXJyYXlbMV1cbiAqIGMgPSBhcnJheVszXVxuICogZCA9IGFycmF5WzRdXG4gKiB0eCA9IGFycmF5WzJdXG4gKiB0eSA9IGFycmF5WzVdXG4gKlxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX0gVGhlIGFycmF5IHRoYXQgdGhlIG1hdHJpeCB3aWxsIGJlIHBvcHVsYXRlZCBmcm9tLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJheSlcbntcbiAgICB0aGlzLmEgPSBhcnJheVswXTtcbiAgICB0aGlzLmIgPSBhcnJheVsxXTtcbiAgICB0aGlzLmMgPSBhcnJheVszXTtcbiAgICB0aGlzLmQgPSBhcnJheVs0XTtcbiAgICB0aGlzLnR4ID0gYXJyYXlbMl07XG4gICAgdGhpcy50eSA9IGFycmF5WzVdO1xufTtcblxuXG4vKipcbiAqIHNldHMgdGhlIG1hdHJpeCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gKiBAcGFyYW0ge251bWJlcn0gY1xuICogQHBhcmFtIHtudW1iZXJ9IGRcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eFxuICogQHBhcmFtIHtudW1iZXJ9IHR5XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHR4LCB0eSlcbntcbiAgICB0aGlzLmEgPSBhO1xuICAgIHRoaXMuYiA9IGI7XG4gICAgdGhpcy5jID0gYztcbiAgICB0aGlzLmQgPSBkO1xuICAgIHRoaXMudHggPSB0eDtcbiAgICB0aGlzLnR5ID0gdHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGZyb20gdGhlIGN1cnJlbnQgTWF0cml4IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3NlIHtib29sZWFufSBXaGV0aGVyIHdlIG5lZWQgdG8gdHJhbnNwb3NlIHRoZSBtYXRyaXggb3Igbm90XG4gKiBAcGFyYW0gW291dF0ge0FycmF5fSBJZiBwcm92aWRlZCB0aGUgYXJyYXkgd2lsbCBiZSBhc3NpZ25lZCB0byBvdXRcbiAqIEByZXR1cm4ge251bWJlcltdfSB0aGUgbmV3bHkgY3JlYXRlZCBhcnJheSB3aGljaCBjb250YWlucyB0aGUgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICh0cmFuc3Bvc2UsIG91dClcbntcbiAgICBpZiAoIXRoaXMuYXJyYXkpXG4gICAge1xuICAgICAgICB0aGlzLmFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg5KTtcbiAgICB9XG5cbiAgICB2YXIgYXJyYXkgPSBvdXQgfHwgdGhpcy5hcnJheTtcblxuICAgIGlmICh0cmFuc3Bvc2UpXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzJdID0gMDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IDA7XG4gICAgICAgIGFycmF5WzZdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbN10gPSB0aGlzLnR5O1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGFycmF5WzBdID0gdGhpcy5hO1xuICAgICAgICBhcnJheVsxXSA9IHRoaXMuYztcbiAgICAgICAgYXJyYXlbMl0gPSB0aGlzLnR4O1xuICAgICAgICBhcnJheVszXSA9IHRoaXMuYjtcbiAgICAgICAgYXJyYXlbNF0gPSB0aGlzLmQ7XG4gICAgICAgIGFycmF5WzVdID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbNl0gPSAwO1xuICAgICAgICBhcnJheVs3XSA9IDA7XG4gICAgICAgIGFycmF5WzhdID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59O1xuXG4vKipcbiAqIEdldCBhIG5ldyBwb3NpdGlvbiB3aXRoIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXG4gKiBDYW4gYmUgdXNlZCB0byBnbyBmcm9tIGEgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlIHRvIHRoZSB3b3JsZCBjb29yZGluYXRlIHNwYWNlLiAoZS5nLiByZW5kZXJpbmcpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCB0cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIHggPSBwb3MueDtcbiAgICB2YXIgeSA9IHBvcy55O1xuXG4gICAgbmV3UG9zLnggPSB0aGlzLmEgKiB4ICsgdGhpcy5jICogeSArIHRoaXMudHg7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmIgKiB4ICsgdGhpcy5kICogeSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gbmV3UG9zO1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgaW52ZXJzZSBvZiB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZSB0byBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gaW5wdXQpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCBpbnZlcnNlLXRyYW5zZm9ybWVkIHRocm91Z2ggdGhpcyBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBseUludmVyc2UgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIGlkID0gMSAvICh0aGlzLmEgKiB0aGlzLmQgKyB0aGlzLmMgKiAtdGhpcy5iKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5kICogaWQgKiB4ICsgLXRoaXMuYyAqIGlkICogeSArICh0aGlzLnR5ICogdGhpcy5jIC0gdGhpcy50eCAqIHRoaXMuZCkgKiBpZDtcbiAgICBuZXdQb3MueSA9IHRoaXMuYSAqIGlkICogeSArIC10aGlzLmIgKiBpZCAqIHggKyAoLXRoaXMudHkgKiB0aGlzLmEgKyB0aGlzLnR4ICogdGhpcy5iKSAqIGlkO1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogVHJhbnNsYXRlcyB0aGUgbWF0cml4IG9uIHRoZSB4IGFuZCB5LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudHJhbnNsYXRlID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy50eCArPSB4O1xuICAgIHRoaXMudHkgKz0geTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgc2NhbGUgdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geCBUaGUgYW1vdW50IHRvIHNjYWxlIGhvcml6b250YWxseVxuICogQHBhcmFtIHtudW1iZXJ9IHkgVGhlIGFtb3VudCB0byBzY2FsZSB2ZXJ0aWNhbGx5XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zY2FsZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuYSAqPSB4O1xuICAgIHRoaXMuZCAqPSB5O1xuICAgIHRoaXMuYyAqPSB4O1xuICAgIHRoaXMuYiAqPSB5O1xuICAgIHRoaXMudHggKj0geDtcbiAgICB0aGlzLnR5ICo9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBBcHBsaWVzIGEgcm90YXRpb24gdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgaW4gcmFkaWFucy5cbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZSA9IGZ1bmN0aW9uIChhbmdsZSlcbntcbiAgICB2YXIgY29zID0gTWF0aC5jb3MoIGFuZ2xlICk7XG4gICAgdmFyIHNpbiA9IE1hdGguc2luKCBhbmdsZSApO1xuXG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIHRoaXMuYSA9IGExICogY29zLXRoaXMuYiAqIHNpbjtcbiAgICB0aGlzLmIgPSBhMSAqIHNpbit0aGlzLmIgKiBjb3M7XG4gICAgdGhpcy5jID0gYzEgKiBjb3MtdGhpcy5kICogc2luO1xuICAgIHRoaXMuZCA9IGMxICogc2luK3RoaXMuZCAqIGNvcztcbiAgICB0aGlzLnR4ID0gdHgxICogY29zIC0gdGhpcy50eSAqIHNpbjtcbiAgICB0aGlzLnR5ID0gdHgxICogc2luICsgdGhpcy50eSAqIGNvcztcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcblxuICAgIHRoaXMuYSAgPSBtYXRyaXguYSAqIGExICsgbWF0cml4LmIgKiBjMTtcbiAgICB0aGlzLmIgID0gbWF0cml4LmEgKiBiMSArIG1hdHJpeC5iICogZDE7XG4gICAgdGhpcy5jICA9IG1hdHJpeC5jICogYTEgKyBtYXRyaXguZCAqIGMxO1xuICAgIHRoaXMuZCAgPSBtYXRyaXguYyAqIGIxICsgbWF0cml4LmQgKiBkMTtcblxuICAgIHRoaXMudHggPSBtYXRyaXgudHggKiBhMSArIG1hdHJpeC50eSAqIGMxICsgdGhpcy50eDtcbiAgICB0aGlzLnR5ID0gbWF0cml4LnR4ICogYjEgKyBtYXRyaXgudHkgKiBkMSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbWF0cml4IGJhc2VkIG9uIGFsbCB0aGUgYXZhaWxhYmxlIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFhcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFlcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVlcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3RhdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdYXG4gKiBAcGFyYW0ge251bWJlcn0gc2tld1lcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoeCwgeSwgcGl2b3RYLCBwaXZvdFksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZKVxue1xuICAgIHZhciBhLCBiLCBjLCBkLCBzciwgY3IsIGN5LCBzeSwgbnN4LCBjeDtcblxuICAgIHNyICA9IE1hdGguc2luKHJvdGF0aW9uKTtcbiAgICBjciAgPSBNYXRoLmNvcyhyb3RhdGlvbik7XG4gICAgY3kgID0gTWF0aC5jb3Moc2tld1kpO1xuICAgIHN5ICA9IE1hdGguc2luKHNrZXdZKTtcbiAgICBuc3ggPSAtTWF0aC5zaW4oc2tld1gpO1xuICAgIGN4ICA9ICBNYXRoLmNvcyhza2V3WCk7XG5cbiAgICBhICA9ICBjciAqIHNjYWxlWDtcbiAgICBiICA9ICBzciAqIHNjYWxlWDtcbiAgICBjICA9IC1zciAqIHNjYWxlWTtcbiAgICBkICA9ICBjciAqIHNjYWxlWTtcblxuICAgIHRoaXMuYSAgPSBjeSAqIGEgKyBzeSAqIGM7XG4gICAgdGhpcy5iICA9IGN5ICogYiArIHN5ICogZDtcbiAgICB0aGlzLmMgID0gbnN4ICogYSArIGN4ICogYztcbiAgICB0aGlzLmQgID0gbnN4ICogYiArIGN4ICogZDtcblxuICAgIHRoaXMudHggPSB4ICsgKCBwaXZvdFggKiBhICsgcGl2b3RZICogYyApO1xuICAgIHRoaXMudHkgPSB5ICsgKCBwaXZvdFggKiBiICsgcGl2b3RZICogZCApO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFByZXBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24obWF0cml4KVxue1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuXG4gICAgaWYgKG1hdHJpeC5hICE9PSAxIHx8IG1hdHJpeC5iICE9PSAwIHx8IG1hdHJpeC5jICE9PSAwIHx8IG1hdHJpeC5kICE9PSAxKVxuICAgIHtcbiAgICAgICAgdmFyIGExID0gdGhpcy5hO1xuICAgICAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgICAgIHRoaXMuYSAgPSBhMSptYXRyaXguYSt0aGlzLmIqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuYiAgPSBhMSptYXRyaXguYit0aGlzLmIqbWF0cml4LmQ7XG4gICAgICAgIHRoaXMuYyAgPSBjMSptYXRyaXguYSt0aGlzLmQqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuZCAgPSBjMSptYXRyaXguYit0aGlzLmQqbWF0cml4LmQ7XG4gICAgfVxuXG4gICAgdGhpcy50eCA9IHR4MSptYXRyaXguYSt0aGlzLnR5Km1hdHJpeC5jK21hdHJpeC50eDtcbiAgICB0aGlzLnR5ID0gdHgxKm1hdHJpeC5iK3RoaXMudHkqbWF0cml4LmQrbWF0cml4LnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEludmVydHMgdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5pbnZlcnQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBiMSA9IHRoaXMuYjtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIGQxID0gdGhpcy5kO1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuICAgIHZhciBuID0gYTEqZDEtYjEqYzE7XG5cbiAgICB0aGlzLmEgPSBkMS9uO1xuICAgIHRoaXMuYiA9IC1iMS9uO1xuICAgIHRoaXMuYyA9IC1jMS9uO1xuICAgIHRoaXMuZCA9IGExL247XG4gICAgdGhpcy50eCA9IChjMSp0aGlzLnR5LWQxKnR4MSkvbjtcbiAgICB0aGlzLnR5ID0gLShhMSp0aGlzLnR5LWIxKnR4MSkvbjtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIFJlc2V0cyB0aGlzIE1hdGl4IHRvIGFuIGlkZW50aXR5IChkZWZhdWx0KSBtYXRyaXguXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaWRlbnRpdHkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYSA9IDE7XG4gICAgdGhpcy5iID0gMDtcbiAgICB0aGlzLmMgPSAwO1xuICAgIHRoaXMuZCA9IDE7XG4gICAgdGhpcy50eCA9IDA7XG4gICAgdGhpcy50eSA9IDA7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBNYXRyaXggb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBBIGNvcHkgb2YgdGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1hdHJpeCA9IG5ldyBNYXRyaXgoKTtcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSB2YWx1ZXMgb2YgdGhlIGdpdmVuIG1hdHJpeCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgb25lcyBpbiB0aGlzIG1hdHJpeFxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGUgbWF0cml4IGdpdmVuIGluIHBhcmFtZXRlciB3aXRoIGl0cyB2YWx1ZXMgdXBkYXRlZC5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBBIGRlZmF1bHQgKGlkZW50aXR5KSBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LklERU5USVRZID0gbmV3IE1hdHJpeCgpO1xuXG4vKipcbiAqIEEgdGVtcCBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LlRFTVBfTUFUUklYID0gbmV3IE1hdHJpeCgpO1xuIiwiLyoqXG4gKiBUaGUgUG9pbnQgb2JqZWN0IHJlcHJlc2VudHMgYSBsb2NhdGlvbiBpbiBhIHR3by1kaW1lbnNpb25hbCBjb29yZGluYXRlIHN5c3RlbSwgd2hlcmUgeCByZXByZXNlbnRzXG4gKiB0aGUgaG9yaXpvbnRhbCBheGlzIGFuZCB5IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIGF4aXMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXNcbiAqL1xuZnVuY3Rpb24gUG9pbnQoeCwgeSlcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xufVxuXG5Qb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2ludDtcbm1vZHVsZS5leHBvcnRzID0gUG9pbnQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9pbnRcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBhIGNvcHkgb2YgdGhlIHBvaW50XG4gKi9cblBvaW50LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLngsIHRoaXMueSk7XG59O1xuXG4vKipcbiAqIENvcGllcyB4IGFuZCB5IGZyb20gdGhlIGdpdmVuIHBvaW50XG4gKlxuICogQHBhcmFtIHAge1BJWEkuUG9pbnR9XG4gKi9cblBvaW50LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKHApIHtcbiAgICB0aGlzLnNldChwLngsIHAueSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcG9pbnQgaXMgZXF1YWwgdG8gdGhpcyBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cblBvaW50LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiAocC54ID09PSB0aGlzLngpICYmIChwLnkgPT09IHRoaXMueSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIHBvaW50IHRvIGEgbmV3IHggYW5kIHkgcG9zaXRpb24uXG4gKiBJZiB5IGlzIG9taXR0ZWQsIGJvdGggeCBhbmQgeSB3aWxsIGJlIHNldCB0byB4LlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cblBvaW50LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLnggPSB4IHx8IDA7XG4gICAgdGhpcy55ID0geSB8fCAoICh5ICE9PSAwKSA/IHRoaXMueCA6IDAgKSA7XG59O1xuIiwiLyoqXG4gKiBNYXRoIGNsYXNzZXMgYW5kIHV0aWxpdGllcyBtaXhlZCBpbnRvIFBJWEkgbmFtZXNwYWNlLlxuICpcbiAqIEBsZW5kcyBQSVhJXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8vIFRoZXNlIHdpbGwgYmUgbWl4ZWQgdG8gYmUgbWFkZSBwdWJsaWNseSBhdmFpbGFibGUsXG4gICAgLy8gd2hpbGUgdGhpcyBtb2R1bGUgaXMgdXNlZCBpbnRlcm5hbGx5IGluIGNvcmVcbiAgICAvLyB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYW5kIGN1dCBkb3duIG9uXG4gICAgLy8gaW50ZXJuYWwgbW9kdWxlIHJlcXVpcmVzLlxuXG4gICAgUG9pbnQ6ICAgICAgcmVxdWlyZSgnLi9Qb2ludCcpLFxuICAgIE1hdHJpeDogICAgIHJlcXVpcmUoJy4vTWF0cml4JyksXG5cbiAgICBDaXJjbGU6ICAgICByZXF1aXJlKCcuL3NoYXBlcy9DaXJjbGUnKSxcbiAgICBFbGxpcHNlOiAgICByZXF1aXJlKCcuL3NoYXBlcy9FbGxpcHNlJyksXG4gICAgUG9seWdvbjogICAgcmVxdWlyZSgnLi9zaGFwZXMvUG9seWdvbicpLFxuICAgIFJlY3RhbmdsZTogIHJlcXVpcmUoJy4vc2hhcGVzL1JlY3RhbmdsZScpLFxuICAgIFJvdW5kZWRSZWN0YW5nbGU6IHJlcXVpcmUoJy4vc2hhcGVzL1JvdW5kZWRSZWN0YW5nbGUnKVxufTtcbiIsInZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2lyY2xlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKi9cbmZ1bmN0aW9uIENpcmNsZSh4LCB5LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuQ0lSQztcbn1cblxuQ2lyY2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENpcmNsZTtcbm1vZHVsZS5leHBvcnRzID0gQ2lyY2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIENpcmNsZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuQ2lyY2xlfSBhIGNvcHkgb2YgdGhlIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IENpcmNsZSh0aGlzLngsIHRoaXMueSwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGNpcmNsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgQ2lyY2xlXG4gKi9cbkNpcmNsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy5yYWRpdXMgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgZHggPSAodGhpcy54IC0geCksXG4gICAgICAgIGR5ID0gKHRoaXMueSAtIHkpLFxuICAgICAgICByMiA9IHRoaXMucmFkaXVzICogdGhpcy5yYWRpdXM7XG5cbiAgICBkeCAqPSBkeDtcbiAgICBkeSAqPSBkeTtcblxuICAgIHJldHVybiAoZHggKyBkeSA8PSByMik7XG59O1xuXG4vKipcbiogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIGNpcmNsZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuKi9cbkNpcmNsZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLnJhZGl1cywgdGhpcy55IC0gdGhpcy5yYWRpdXMsIHRoaXMucmFkaXVzICogMiwgdGhpcy5yYWRpdXMgKiAyKTtcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIEVsbGlwc2Ugb2JqZWN0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBoaXQgYXJlYSBmb3IgZGlzcGxheU9iamVjdHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBoYWxmIHdpZHRoIG9mIHRoaXMgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhpcyBlbGxpcHNlXG4gKi9cbmZ1bmN0aW9uIEVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuRUxJUDtcbn1cblxuRWxsaXBzZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFbGxpcHNlO1xubW9kdWxlLmV4cG9ydHMgPSBFbGxpcHNlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIEVsbGlwc2UgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkVsbGlwc2V9IGEgY29weSBvZiB0aGUgZWxsaXBzZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBFbGxpcHNlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgZWxsaXBzZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZHMgYXJlIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy9ub3JtYWxpemUgdGhlIGNvb3JkcyB0byBhbiBlbGxpcHNlIHdpdGggY2VudGVyIDAsMFxuICAgIHZhciBub3JteCA9ICgoeCAtIHRoaXMueCkgLyB0aGlzLndpZHRoKSxcbiAgICAgICAgbm9ybXkgPSAoKHkgLSB0aGlzLnkpIC8gdGhpcy5oZWlnaHQpO1xuXG4gICAgbm9ybXggKj0gbm9ybXg7XG4gICAgbm9ybXkgKj0gbm9ybXk7XG5cbiAgICByZXR1cm4gKG5vcm14ICsgbm9ybXkgPD0gMSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBlbGxpcHNlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLndpZHRoLCB0aGlzLnkgLSB0aGlzLmhlaWdodCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcbiIsInZhciBQb2ludCA9IHJlcXVpcmUoJy4uL1BvaW50JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBwb2ludHMge1BJWEkuUG9pbnRbXXxudW1iZXJbXXwuLi5QSVhJLlBvaW50fC4uLm51bWJlcn0gVGhpcyBjYW4gYmUgYW4gYXJyYXkgb2YgUG9pbnRzIHRoYXQgZm9ybSB0aGUgcG9seWdvbixcbiAqICAgICAgYSBmbGF0IGFycmF5IG9mIG51bWJlcnMgdGhhdCB3aWxsIGJlIGludGVycHJldGVkIGFzIFt4LHksIHgseSwgLi4uXSwgb3IgdGhlIGFyZ3VtZW50cyBwYXNzZWQgY2FuIGJlXG4gKiAgICAgIGFsbCB0aGUgcG9pbnRzIG9mIHRoZSBwb2x5Z29uIGUuZy4gYG5ldyBQSVhJLlBvbHlnb24obmV3IFBJWEkuUG9pbnQoKSwgbmV3IFBJWEkuUG9pbnQoKSwgLi4uKWAsIG9yIHRoZVxuICogICAgICBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZSBmbGF0IHgseSB2YWx1ZXMgZS5nLiBgbmV3IFBvbHlnb24oeCx5LCB4LHksIHgseSwgLi4uKWAgd2hlcmUgYHhgIGFuZCBgeWAgYXJlXG4gKiAgICAgIE51bWJlcnMuXG4gKi9cbmZ1bmN0aW9uIFBvbHlnb24ocG9pbnRzXylcbntcbiAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBhc3NpZ25tZW50IGRlb3B0XG4gICAgLy8gc2VlIHNlY3Rpb24gMy4xOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICB2YXIgcG9pbnRzID0gcG9pbnRzXztcblxuICAgIC8vaWYgcG9pbnRzIGlzbid0IGFuIGFycmF5LCB1c2UgYXJndW1lbnRzIGFzIHRoZSBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBwb2ludHMubGVuZ3RoOyArK2EpIHtcbiAgICAgICAgICAgIHBvaW50c1thXSA9IGFyZ3VtZW50c1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHRoaXMgaXMgYW4gYXJyYXkgb2YgcG9pbnRzLCBjb252ZXJ0IGl0IHRvIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzXG4gICAgaWYgKHBvaW50c1swXSBpbnN0YW5jZW9mIFBvaW50KVxuICAgIHtcbiAgICAgICAgdmFyIHAgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHAucHVzaChwb2ludHNbaV0ueCwgcG9pbnRzW2ldLnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9pbnRzID0gcDtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB0aGUgcG9pbnRzIG9mIHRoaXMgcG9seWdvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlBPTFk7XG59XG5cblBvbHlnb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9seWdvbjtcbm1vZHVsZS5leHBvcnRzID0gUG9seWdvbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBwb2x5Z29uXG4gKlxuICogQHJldHVybiB7UElYSS5Qb2x5Z29ufSBhIGNvcHkgb2YgdGhlIHBvbHlnb25cbiAqL1xuUG9seWdvbi5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9seWdvbih0aGlzLnBvaW50cy5zbGljZSgpKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIGluc2lkZSA9IGZhbHNlO1xuXG4gICAgLy8gdXNlIHNvbWUgcmF5Y2FzdGluZyB0byB0ZXN0IGhpdHNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svcG9pbnQtaW4tcG9seWdvbi9ibG9iL21hc3Rlci9pbmRleC5qc1xuICAgIHZhciBsZW5ndGggPSB0aGlzLnBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBsZW5ndGggLSAxOyBpIDwgbGVuZ3RoOyBqID0gaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHhpID0gdGhpcy5wb2ludHNbaSAqIDJdLCB5aSA9IHRoaXMucG9pbnRzW2kgKiAyICsgMV0sXG4gICAgICAgICAgICB4aiA9IHRoaXMucG9pbnRzW2ogKiAyXSwgeWogPSB0aGlzLnBvaW50c1tqICogMiArIDFdLFxuICAgICAgICAgICAgaW50ZXJzZWN0ID0gKCh5aSA+IHkpICE9PSAoeWogPiB5KSkgJiYgKHggPCAoeGogLSB4aSkgKiAoeSAtIHlpKSAvICh5aiAtIHlpKSArIHhpKTtcblxuICAgICAgICBpZiAoaW50ZXJzZWN0KVxuICAgICAgICB7XG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc2lkZTtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIHRoZSBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgZGVmaW5lZCBieSBpdHMgcG9zaXRpb24sIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCB3aWR0aCBvZiB0aGlzIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByZWN0YW5nbGVcbiAqL1xuZnVuY3Rpb24gUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJFQ1Q7XG59XG5cblJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZWN0YW5nbGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlY3RhbmdsZTtcblxuLyoqXG4gKiBBIGNvbnN0YW50IGVtcHR5IHJlY3RhbmdsZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuUmVjdGFuZ2xlLkVNUFRZID0gbmV3IFJlY3RhbmdsZSgwLCAwLCAwLCAwKTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgUmVjdGFuZ2xlXG4gKi9cblJlY3RhbmdsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHggPj0gdGhpcy54ICYmIHggPCB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPCB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUm91bmRlZCBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgdGhhdCBoYXMgbmljZSByb3VuZGVkIGNvcm5lcnMsIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0IGFuZCBpdHMgcmFkaXVzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBDb250cm9scyB0aGUgcmFkaXVzIG9mIHRoZSByb3VuZGVkIGNvcm5lcnNcbiAqL1xuZnVuY3Rpb24gUm91bmRlZFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMjBcbiAgICAgKi9cbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCAyMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUlJFQztcbn1cblxuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3VuZGVkUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3VuZGVkUmVjdGFuZ2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHJldHVybiB7UElYSS5Sb3VuZGVkUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJvdW5kZWRSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnJhZGl1cyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDw9IHRoaXMueCArIHRoaXMud2lkdGgpXG4gICAge1xuICAgICAgICBpZiAoeSA+PSB0aGlzLnkgJiYgeSA8PSB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBQYXJ0aWNsZUNvbnRhaW5lciBjbGFzcyBpcyBhIHJlYWxseSBmYXN0IHZlcnNpb24gb2YgdGhlIENvbnRhaW5lciBidWlsdCBzb2xlbHkgZm9yIHNwZWVkLFxuICogc28gdXNlIHdoZW4geW91IG5lZWQgYSBsb3Qgb2Ygc3ByaXRlcyBvciBwYXJ0aWNsZXMuIFRoZSB0cmFkZW9mZiBvZiB0aGUgUGFydGljbGVDb250YWluZXIgaXMgdGhhdCBhZHZhbmNlZFxuICogZnVuY3Rpb25hbGl0eSB3aWxsIG5vdCB3b3JrLiBQYXJ0aWNsZUNvbnRhaW5lciBpbXBsZW1lbnRzIG9ubHkgdGhlIGJhc2ljIG9iamVjdCB0cmFuc2Zvcm0gKHBvc2l0aW9uLCBzY2FsZSwgcm90YXRpb24pLlxuICogQW55IG90aGVyIGZ1bmN0aW9uYWxpdHkgbGlrZSB0aW50aW5nLCBtYXNraW5nLCBldGMgd2lsbCBub3Qgd29yayBvbiBzcHJpdGVzIGluIHRoaXMgYmF0Y2guXG4gKlxuICogSXQncyBleHRyZW1lbHkgZWFzeSB0byB1c2UgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgY29udGFpbmVyID0gbmV3IFBhcnRpY2xlQ29udGFpbmVyKCk7XG4gKlxuICogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSlcbiAqIHtcbiAqICAgICB2YXIgc3ByaXRlID0gbmV3IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcIm15SW1hZ2UucG5nXCIpO1xuICogICAgIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogfVxuICogYGBgXG4gKlxuICogQW5kIGhlcmUgeW91IGhhdmUgYSBodW5kcmVkIHNwcml0ZXMgdGhhdCB3aWxsIGJlIHJlbmRlcmVyIGF0IHRoZSBzcGVlZCBvZiBsaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFttYXhTaXplPTE1MDAwXSB7bnVtYmVyfSBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFydGljbGVzIHRoYXQgY2FuIGJlIHJlbmRlcmVyIGJ5IHRoZSBjb250YWluZXIuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXNdIHtvYmplY3R9IFRoZSBwcm9wZXJ0aWVzIG9mIGNoaWxkcmVuIHRoYXQgc2hvdWxkIGJlIHVwbG9hZGVkIHRvIHRoZSBncHUgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuc2NhbGU9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHNjYWxlIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnBvc2l0aW9uPXRydWVdIHtib29sZWFufSBXaGVuIHRydWUsIHBvc2l0aW9uIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnJvdGF0aW9uPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCByb3RhdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy51dnM9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHV2cyBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5hbHBoYT1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgYWxwaGEgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW2JhdGNoU2l6ZT0xNTAwMF0ge251bWJlcn0gTnVtYmVyIG9mIHBhcnRpY2xlcyBwZXIgYmF0Y2guXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQ29udGFpbmVyKG1heFNpemUsIHByb3BlcnRpZXMsIGJhdGNoU2l6ZSlcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIGJhdGNoU2l6ZSA9IGJhdGNoU2l6ZSB8fCAxNTAwMDsgLy9DT05TVC5TUFJJVEVfQkFUQ0hfU0laRTsgLy8gMjAwMCBpcyBhIG5pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSAvIGRlc2t0b3BcbiAgICBtYXhTaXplID0gbWF4U2l6ZSB8fCAxNTAwMDtcblxuICAgIC8vIE1ha2luZyBzdXJlIHRoZSBiYXRjaCBzaXplIGlzIHZhbGlkXG4gICAgLy8gNjU1MzUgaXMgbWF4IHZlcnRleCBpbmRleCBpbiB0aGUgaW5kZXggYnVmZmVyIChzZWUgUGFydGljbGVSZW5kZXJlcilcbiAgICAvLyBzbyBtYXggbnVtYmVyIG9mIHBhcnRpY2xlcyBpcyA2NTUzNiAvIDQgPSAxNjM4NFxuICAgIHZhciBtYXhCYXRjaFNpemUgPSAxNjM4NDtcbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4QmF0Y2hTaXplKSB7XG4gICAgICAgIGJhdGNoU2l6ZSA9IG1heEJhdGNoU2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4U2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhTaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBwcm9wZXJ0aWVzIHRvIGJlIGR5bmFtaWMgKHRydWUpIC8gc3RhdGljIChmYWxzZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW5bXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4U2l6ZSA9IG1heFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYXRjaFNpemUgPSBiYXRjaFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVDaGlsZHJlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGNhbnZhcyByZW5kZXJlcmluZy4gSWYgdHJ1ZSB0aGVuIHRoZSBlbGVtZW50cyB3aWxsIGJlIHBvc2l0aW9uZWQgYXQgdGhlIG5lYXJlc3QgcGl4ZWwuIFRoaXMgcHJvdmlkZXMgYSBuaWNlIHNwZWVkIGJvb3N0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlO1xuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSB0cnVlO1xuXG4gICAgdGhpcy5zZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xufVxuXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQ29udGFpbmVyO1xuXG4vKipcbiAqIFNldHMgdGhlIHByaXZhdGUgcHJvcGVydGllcyBhcnJheSB0byBkeW5hbWljIC8gc3RhdGljIGJhc2VkIG9uIHRoZSBwYXNzZWQgcHJvcGVydGllcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcHJvcGVydGllcyB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyB0byBiZSB1cGxvYWRlZFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuc2V0UHJvcGVydGllcyA9IGZ1bmN0aW9uKHByb3BlcnRpZXMpXG57XG4gICAgaWYgKCBwcm9wZXJ0aWVzICkge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzBdID0gJ3NjYWxlJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnNjYWxlIDogdGhpcy5fcHJvcGVydGllc1swXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1sxXSA9ICdwb3NpdGlvbicgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5wb3NpdGlvbiA6IHRoaXMuX3Byb3BlcnRpZXNbMV07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMl0gPSAncm90YXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucm90YXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzJdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzNdID0gJ3V2cycgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy51dnMgOiB0aGlzLl9wcm9wZXJ0aWVzWzNdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzRdID0gJ2FscGhhJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLmFscGhhIDogdGhpcy5fcHJvcGVydGllc1s0XTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgLy8gVE9ETyBkb24ndCBuZWVkIHRvIVxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIC8vICBQSVhJLkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtLmNhbGwoIHRoaXMgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGFpbmVyIHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgd2ViZ2wgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlciggcmVuZGVyZXIucGx1Z2lucy5wYXJ0aWNsZSApO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUucmVuZGVyKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgZmxhZyB0aGF0IHN0YXRpYyBkYXRhIHNob3VsZCBiZSB1cGRhdGVkIHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUub25DaGlsZHJlbkNoYW5nZSA9IGZ1bmN0aW9uIChzbWFsbGVzdENoaWxkSW5kZXgpXG57XG4gICAgdmFyIGJ1ZmZlckluZGV4ID0gTWF0aC5mbG9vcihzbWFsbGVzdENoaWxkSW5kZXggLyB0aGlzLl9iYXRjaFNpemUpO1xuICAgIGlmIChidWZmZXJJbmRleCA8IHRoaXMuX2J1ZmZlclRvVXBkYXRlKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gYnVmZmVySW5kZXg7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIGNhbnZhcyByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGlzUm90YXRlZCA9IHRydWU7XG5cbiAgICB2YXIgcG9zaXRpb25YID0gMDtcbiAgICB2YXIgcG9zaXRpb25ZID0gMDtcblxuICAgIHZhciBmaW5hbFdpZHRoID0gMDtcbiAgICB2YXIgZmluYWxIZWlnaHQgPSAwO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICBpZiAoIWNoaWxkLnZpc2libGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZyYW1lID0gY2hpbGQudGV4dHVyZS5mcmFtZTtcblxuICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhICogY2hpbGQuYWxwaGE7XG5cbiAgICAgICAgaWYgKGNoaWxkLnJvdGF0aW9uICUgKE1hdGguUEkgKiAyKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgZmFzdGVzdCAgd2F5IHRvIG9wdGltaXNlISAtIGlmIHJvdGF0aW9uIGlzIDAgdGhlbiB3ZSBjYW4gYXZvaWQgYW55IGtpbmQgb2Ygc2V0VHJhbnNmb3JtIGNhbGxcbiAgICAgICAgICAgIGlmIChpc1JvdGF0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoICogY2hpbGQuc2NhbGUueCkgKyBjaGlsZC5wb3NpdGlvbi54ICArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0ICogY2hpbGQuc2NhbGUueSkgKyBjaGlsZC5wb3NpdGlvbi55ICArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLng7XG4gICAgICAgICAgICBmaW5hbEhlaWdodCA9IGZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnk7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzUm90YXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoaWxkLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICAgICAgdmFyIGNoaWxkVHJhbnNmb3JtID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHggfCAwLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eSB8IDBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvblggPSAoKGNoaWxkLmFuY2hvci54KSAqICgtZnJhbWUud2lkdGgpICsgMC41KTtcbiAgICAgICAgICAgIHBvc2l0aW9uWSA9ICgoY2hpbGQuYW5jaG9yLnkpICogKC1mcmFtZS5oZWlnaHQpICsgMC41KTtcblxuICAgICAgICAgICAgZmluYWxXaWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgIGNoaWxkLnRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgZnJhbWUueCxcbiAgICAgICAgICAgIGZyYW1lLnksXG4gICAgICAgICAgICBmcmFtZS53aWR0aCxcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCxcbiAgICAgICAgICAgIHBvc2l0aW9uWCxcbiAgICAgICAgICAgIHBvc2l0aW9uWSxcbiAgICAgICAgICAgIGZpbmFsV2lkdGgsXG4gICAgICAgICAgICBmaW5hbEhlaWdodFxuICAgICAgICApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUNoaWxkcmVuPWZhbHNlXSB7Ym9vbGVhbn0gaWYgc2V0IHRvIHRydWUsIGFsbCB0aGUgY2hpbGRyZW4gd2lsbCBoYXZlIHRoZWlyIGRlc3Ryb3kgbWV0aG9kIGNhbGxlZCBhcyB3ZWxsXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgaWYgKHRoaXMuX2J1ZmZlcnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLl9idWZmZXJzW2ldLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xufTtcbiIsIlxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZUJ1ZmZlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvUGFydGljbGVCdWZmZXIuamF2YVxuICovXG5cbi8qKlxuICogVGhlIHBhcnRpY2xlIGJ1ZmZlciBtYW5hZ2VzIHRoZSBzdGF0aWMgYW5kIGR5bmFtaWMgYnVmZmVycyBmb3IgYSBwYXJ0aWNsZSBjb250YWluZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gUGFydGljbGVCdWZmZXIoZ2wsIHByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBzaXplKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRTaXplID0gMjtcblxuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYSBzaW5nbGUgdmVydGV4IGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGUgYnVmZmVyIGNhbiBob2xkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gc2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBkeW5hbWljLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIHN0YXRpYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcblxuICAgICAgICBpZihkeW5hbWljUHJvcGVydHlGbGFnc1tpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5keW5hbWljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuZHluYW1pY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW5pdEJ1ZmZlcnMoKTtcblxufVxuXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZUJ1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVCdWZmZXI7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmluaXRCdWZmZXJzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpO1xuICAgIHZhciBwcm9wZXJ0eTtcblxuICAgIHZhciBkeW5hbWljT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG5cbiAgICAgICAgcHJvcGVydHkub2Zmc2V0ID0gZHluYW1pY09mZnNldDtcbiAgICAgICAgZHluYW1pY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLmR5bmFtaWNTdHJpZGUgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5keW5hbWljU3RyaWRlICogNCk7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcblxuXG4gICAgLy8gc3RhdGljIC8vXG4gICAgdmFyIHN0YXRpY09mZnNldCA9IDA7XG4gICAgdGhpcy5zdGF0aWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IHN0YXRpY09mZnNldDtcbiAgICAgICAgc3RhdGljT2Zmc2V0ICs9IHByb3BlcnR5LnNpemU7XG4gICAgICAgIHRoaXMuc3RhdGljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5zdGF0aWNTdHJpZGUgKiA0KTtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNEYXRhLCBnbC5EWU5BTUlDX0RSQVcpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBkeW5hbWljIHByb3BlcnRpZXMuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUudXBsb2FkRHluYW1pYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIHByb3BlcnR5LnVwbG9hZEZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIHRoaXMuZHluYW1pY0RhdGEsIHRoaXMuZHluYW1pY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy5keW5hbWljRGF0YSk7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHN0YXRpYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZFN0YXRpYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLnN0YXRpY0RhdGEsIHRoaXMuc3RhdGljU3RyaWRlLCBwcm9wZXJ0eS5vZmZzZXQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuc3RhdGljRGF0YSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIHRvIHRoZSBHUFVcbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpLCBwcm9wZXJ0eTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuc3RhdGljU3RyaWRlICogNCwgcHJvcGVydHkub2Zmc2V0ICogNCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVCdWZmZXIuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLnN0YXRpY0J1ZmZlcik7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgUGFydGljbGVTaGFkZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlU2hhZGVyJyksXG4gICAgUGFydGljbGVCdWZmZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlQnVmZmVyJyksXG4gICAgbWF0aCAgICAgICAgICAgID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFBhcnRpY2xlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICAvLyBhbmQgbWF4IG51bWJlciBvZiBlbGVtZW50IGluIHRoZSBpbmRleCBidWZmZXIgaXMgMTYzODQgKiA2ID0gOTgzMDRcbiAgICAvLyBDcmVhdGluZyBhIGZ1bGwgaW5kZXggYnVmZmVyLCBvdmVyaGVhZCBpcyA5ODMwNCAqIDIgPSAxOTZLb1xuICAgIHZhciBudW1JbmRpY2VzID0gOTgzMDQ7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KG51bUluZGljZXMpO1xuXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCBudW1JbmRpY2VzOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gbnVsbDtcblxuICAgIHRoaXMudGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xufVxuXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbigncGFydGljbGUnLCBQYXJ0aWNsZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBXaGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gbmV3IFBhcnRpY2xlU2hhZGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlcik7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggaW5kZXgsIHNvIDY1NTM1IC8gNiA9IDEwOTIyLlxuXG4gICAgLy91cGxvYWQgdGhlIGluZGV4IGRhdGFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IFtcbiAgICAgICAgLy8gdmVydGljZXNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbixcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkVmVydGljZXMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBwb3NpdGlvbkRhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFBvc2l0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcm90YXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFSb3RhdGlvbixcbiAgICAgICAgICAgIHNpemU6MSxcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkUm90YXRpb24sXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyB1dnNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFV2cyxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIGFscGhhRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZEFscGhhLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfVxuICAgIF07XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBwYXJ0aWNsZSBiYXRjaC5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gYmluZCB0aGUgbWFpbiB0ZXh0dXJlXG4gICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAvLyBiaW5kIHRoZSBidWZmZXJzXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnNoYWRlcjtcblxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBwYXJ0aWNsZSBjb250YWluZXIgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBjaGlsZHJlbiA9IGNvbnRhaW5lci5jaGlsZHJlbixcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aCxcbiAgICAgICAgbWF4U2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemU7XG5cbiAgICBpZih0b3RhbENoaWxkcmVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIGlmKHRvdGFsQ2hpbGRyZW4gPiBtYXhTaXplKVxuICAgIHtcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IG1heFNpemU7XG4gICAgfVxuXG4gICAgaWYoIWNvbnRhaW5lci5fYnVmZmVycylcbiAgICB7XG4gICAgICAgIGNvbnRhaW5lci5fYnVmZmVycyA9IHRoaXMuZ2VuZXJhdGVCdWZmZXJzKCBjb250YWluZXIgKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXZzIGhhdmUgbm90IHVwZGF0ZWQgdGhlbiBubyBwb2ludCByZW5kZXJpbmcganVzdCB5ZXQhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb250YWluZXIuYmxlbmRNb2RlKTtcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgbSA9ICBjb250YWluZXIud29ybGRUcmFuc2Zvcm0uY29weSggdGhpcy50ZW1wTWF0cml4ICk7XG4gICAgbS5wcmVwZW5kKCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeCApO1xuICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5zaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCBtLnRvQXJyYXkodHJ1ZSkpO1xuICAgIGdsLnVuaWZvcm0xZih0aGlzLnNoYWRlci51bmlmb3Jtcy51QWxwaGEuX2xvY2F0aW9uLCBjb250YWluZXIud29ybGRBbHBoYSk7XG5cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgdGV4dHVyZSBpcyBib3VuZC4uXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gY2hpbGRyZW5bMF0uX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSB0ZXh0dXJlIGhhcyBub3QgdXBkYXRlZCB0aGVuIGxldHMgbm90IHVwbG9hZCBhbnkgc3RhdGljIHByb3BlcnRpZXNcbiAgICAgICAgaWYoIXRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZShiYXNlVGV4dHVyZSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFjb250YWluZXIuX3Byb3BlcnRpZXNbMF0gfHwgIWNvbnRhaW5lci5fcHJvcGVydGllc1szXSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICB9XG5cbiAgICAvLyBub3cgbGV0cyB1cGxvYWQgYW5kIHJlbmRlciB0aGUgYnVmZmVycy4uXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgdG90YWxDaGlsZHJlbjsgaSArPSBiYXRjaFNpemUsIGogKz0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhbW91bnQgPSAoIHRvdGFsQ2hpbGRyZW4gLSBpKTtcbiAgICAgICAgaWYoYW1vdW50ID4gYmF0Y2hTaXplKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbW91bnQgPSBiYXRjaFNpemU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYnVmZmVyID0gY29udGFpbmVyLl9idWZmZXJzW2pdO1xuXG4gICAgICAgIC8vIHdlIGFsd2F5cyB1cGxvYWQgdGhlIGR5bmFtaWNcbiAgICAgICAgYnVmZmVyLnVwbG9hZER5bmFtaWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG5cbiAgICAgICAgLy8gd2Ugb25seSB1cGxvYWQgdGhlIHN0YXRpYyBjb250ZW50IHdoZW4gd2UgaGF2ZSB0byFcbiAgICAgICAgaWYoY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9PT0gailcbiAgICAgICAge1xuICAgICAgICAgICAgYnVmZmVyLnVwbG9hZFN0YXRpYyhjaGlsZHJlbiwgaSwgYW1vdW50KTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSBqICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJpbmQgdGhlIGJ1ZmZlclxuICAgICAgICBidWZmZXIuYmluZCggdGhpcy5zaGFkZXIgKTtcblxuICAgICAgICAgLy8gbm93IGRyYXcgdGhvc2Ugc3Vja2FzIVxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBhbW91bnQgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIG9uZSBwYXJ0aWNsZSBidWZmZXIgZm9yIGVhY2ggY2hpbGQgaW4gdGhlIGNvbnRhaW5lciB3ZSB3YW50IHRvIHJlbmRlciBhbmQgdXBkYXRlcyBpbnRlcm5hbCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7UElYSS5QYXJ0aWNsZUNvbnRhaW5lcn0gVGhlIGNvbnRhaW5lciB0byByZW5kZXIgdXNpbmcgdGhpcyBQYXJ0aWNsZVJlbmRlcmVyXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmdlbmVyYXRlQnVmZmVycyA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgYnVmZmVycyA9IFtdLFxuICAgICAgICBzaXplID0gY29udGFpbmVyLl9tYXhTaXplLFxuICAgICAgICBiYXRjaFNpemUgPSBjb250YWluZXIuX2JhdGNoU2l6ZSxcbiAgICAgICAgZHluYW1pY1Byb3BlcnR5RmxhZ3MgPSBjb250YWluZXIuX3Byb3BlcnRpZXMsXG4gICAgICAgIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBiYXRjaFNpemUpXG4gICAge1xuICAgICAgICBidWZmZXJzLnB1c2gobmV3IFBhcnRpY2xlQnVmZmVyKGdsLCB0aGlzLnByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBiYXRjaFNpemUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVycztcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgdmVydGljaWVzLlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciB2ZXJ0aWNlcyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkVmVydGljZXMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIHZhciBzcHJpdGUsXG4gICAgICAgIHRleHR1cmUsXG4gICAgICAgIHRyaW0sXG4gICAgICAgIHN4LFxuICAgICAgICBzeSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKSB7XG5cbiAgICAgICAgc3ByaXRlID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldO1xuICAgICAgICB0ZXh0dXJlID0gc3ByaXRlLl90ZXh0dXJlO1xuICAgICAgICBzeCA9IHNwcml0ZS5zY2FsZS54O1xuICAgICAgICBzeSA9IHNwcml0ZS5zY2FsZS55O1xuXG4gICAgICAgIGlmICh0ZXh0dXJlLnRyaW0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZCB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG5cbiAgICAgICAgICAgIHcxID0gdHJpbS54IC0gc3ByaXRlLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGgxID0gdHJpbS55IC0gc3ByaXRlLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICBoMCA9IGgxICsgdGV4dHVyZS5jcm9wLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS1zcHJpdGUuYW5jaG9yLngpO1xuICAgICAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC1zcHJpdGUuYW5jaG9yLng7XG5cbiAgICAgICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtc3ByaXRlLmFuY2hvci55KTtcbiAgICAgICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXNwcml0ZS5hbmNob3IueTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gaDEgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IGgwICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHBvc2l0aW9ucyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUG9zaXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVQb3NpdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5wb3NpdGlvbjtcblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciByb3RhdGlvbiB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUm90YXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVSb3RhdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5yb3RhdGlvbjtcblxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVJvdGF0aW9uO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBVdnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFV2cyA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmVVdnMgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uX3RleHR1cmUuX3V2cztcblxuICAgICAgICBpZiAodGV4dHVyZVV2cylcbiAgICAgICAge1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHRleHR1cmVVdnMueDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IHRleHR1cmVVdnMueTA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB0ZXh0dXJlVXZzLngxO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSB0ZXh0dXJlVXZzLnkxO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHRleHR1cmVVdnMueDI7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSB0ZXh0dXJlVXZzLnkyO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHRleHR1cmVVdnMueDM7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSB0ZXh0dXJlVXZzLnkzO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyB5b3Uga25vdyB0aGlzIGNhbiBiZSBlYXNpZXIhXG4gICAgICAgICAgICBhcnJheVtvZmZzZXRdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIGFscGhhIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRBbHBoYSA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICAge1xuICAgICAgICB2YXIgc3ByaXRlQWxwaGEgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uYWxwaGE7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlQWxwaGE7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBQYXJ0aWNsZVJlbmRlcmVyLlxuICpcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIuZ2wpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5nbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgfVxuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG4gICAgdGhpcy50ZW1wTWF0cml4ID0gbnVsbDtcbn07XG4iLCJ2YXIgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1RleHR1cmVTaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVNoYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFRleHR1cmVTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVBvc2l0aW9uQ29vcmQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhU2NhbGU7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgZmxvYXQgYVJvdGF0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgdmVjMiB2ID0gYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICcgICB2LnggPSAoYVZlcnRleFBvc2l0aW9uLngpICogY29zKGFSb3RhdGlvbikgLSAoYVZlcnRleFBvc2l0aW9uLnkpICogc2luKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2LnkgPSAoYVZlcnRleFBvc2l0aW9uLngpICogc2luKGFSb3RhdGlvbikgKyAoYVZlcnRleFBvc2l0aW9uLnkpICogY29zKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2ID0gdiArIGFQb3NpdGlvbkNvb3JkOycsXG5cbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKHYsIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gaGVsbG9cbiAgICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IHVBbHBoYTsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciAqIHVBbHBoYTsnLFxuICAgICAgICAgICAgJyAgaWYgKGNvbG9yLmEgPT0gMC4wKSBkaXNjYXJkOycsXG4gICAgICAgICAgICAnICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB1QWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVBvc2l0aW9uQ29vcmQ6IDAsXG4gICAgICAgICAgIC8vIGFTY2FsZTogICAgICAgICAwLFxuICAgICAgICAgICAgYVJvdGF0aW9uOiAgICAgIDBcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBURU1QIEhBQ0tcblxufVxuXG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmVTaGFkZXIucHJvdG90eXBlKTtcblBhcnRpY2xlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlU2hhZGVyO1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogVGhlIENhbnZhc1JlbmRlcmVyIGRyYXdzIHRoZSBzY2VuZSBhbmQgYWxsIGl0cyBjb250ZW50IG9udG8gYSAyZCBjYW52YXMuIFRoaXMgcmVuZGVyZXIgc2hvdWxkIGJlIHVzZWQgZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgd2ViR0wuXG4gKiBEb24ndCBmb3JnZXQgdG8gYWRkIHRoZSBDYW52YXNSZW5kZXJlci52aWV3IHRvIHlvdXIgRE9NIG9yIHlvdSB3aWxsIG5vdCBzZWUgYW55dGhpbmcgOilcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc3lzdGVtIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSBzeXN0ZW0gdGhpcyByZW5kZXJlciBpcyBmb3IuXG4gKiBAcGFyYW0gW3dpZHRoPTgwMF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9NjAwXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBdIHtudW1iZXJ9IFRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSByZW5kZXJlZCBhcmVhIChzaG93biBpZiBub3QgdHJhbnNwYXJlbnQpLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFN5c3RlbVJlbmRlcmVyKHN5c3RlbSwgd2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHV0aWxzLnNheUhlbGxvKHN5c3RlbSk7XG5cbiAgICAvLyBwcmVwYXJlIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zW2ldID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zW2ldID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OU1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBvcHRpb25zID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5SRU5ERVJFUl9UWVBFLlVOS05PV05cbiAgICAgKiBAc2VlIFBJWEkuUkVOREVSRVJfVFlQRVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuVU5LTk9XTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA4MDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgODAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA2MDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHRvXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLnZpZXcgPSBvcHRpb25zLnZpZXcgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gb3B0aW9ucy5yZXNvbHV0aW9uO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy50cmFuc3BhcmVudCA9IG9wdGlvbnMudHJhbnNwYXJlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByZW5kZXIgdmlldyBzaG91bGQgYmUgcmVzaXplZCBhdXRvbWF0aWNhbGx5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IG9wdGlvbnMuYXV0b1Jlc2l6ZSB8fCBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrcyB0aGUgYmxlbmQgbW9kZXMgdXNlZnVsIGZvciB0aGlzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbWl4ZWQ+fVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIHByZXNlcnZlRHJhd2luZ0J1ZmZlciBmbGFnIGFmZmVjdHMgd2hldGhlciBvciBub3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyByZXRhaW5lZCBhZnRlciByZW5kZXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvciBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gICAgICogSWYgdGhlIHNjZW5lIGlzIE5PVCB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGEgY2FudmFzIHNpemVkIGZpbGxSZWN0IG9wZXJhdGlvbiBldmVyeSBmcmFtZSB0byBzZXQgdGhlIGNhbnZhcyBiYWNrZ3JvdW5kIGNvbG9yLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGNsZWFyUmVjdCB0byBjbGVhciB0aGUgY2FudmFzIGV2ZXJ5IGZyYW1lLlxuICAgICAqIERpc2FibGUgdGhpcyBieSBzZXR0aW5nIHRoaXMgdG8gZmFsc2UuIEZvciBleGFtcGxlIGlmIHlvdXIgZ2FtZSBoYXMgYSBjYW52YXMgZmlsbGluZyBiYWNrZ3JvdW5kIGltYWdlIHlvdSBvZnRlbiBkb24ndCBuZWVkIHRoaXMgc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdFxuICAgICAqL1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyO1xuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gICAgICogSGFuZHkgZm9yIGNyaXNwIHBpeGVsIGFydCBhbmQgc3BlZWQgb24gbGVnYWN5IGRldmljZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSBvcHRpb25zLnJvdW5kUGl4ZWxzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSAweDAwMDAwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGFuIFtSLCBHLCBCXSBhcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gJyMwMDAwMDAnO1xuXG4gICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBvcHRpb25zLmJhY2tncm91bmRDb2xvciB8fCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3I7IC8vIHJ1biBiZyBjb2xvciBzZXR0ZXJcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB0cmFuc2Zvcm06e3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpfSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCByb290IG9iamVjdCB0aGF0IHRoZSByZW5kZXJlciB0cmllZCB0byByZW5kZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbn1cblxuLy8gY29uc3RydWN0b3JcblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeXN0ZW1SZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3lzdGVtUmVuZGVyZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZpbGwgaWYgbm90IHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3lzdGVtUmVuZGVyZXIjXG4gICAgICovXG4gICAgYmFja2dyb3VuZENvbG9yOlxuICAgIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9IHV0aWxzLmhleDJzdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHV0aWxzLmhleDJyZ2IodmFsLCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB2aWV3IHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy52aWV3LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0aGlzLnZpZXcuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5hdXRvUmVzaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgYW5kIG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgQ2FudmFzIERPTSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldykge1xuICAgIGlmIChyZW1vdmVWaWV3ICYmIHRoaXMudmlldy5wYXJlbnROb2RlKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy52aWV3KTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICB0aGlzLnZpZXcgPSBudWxsO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMDtcblxuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gbnVsbDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSBudWxsO1xufTtcbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgQ2FudmFzTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ0NhbnZhcycsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5DQU5WQVM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy52aWV3LmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogdGhpcy50cmFuc3BhcmVudCB9KTtcblxuICAgIC8qKlxuICAgICAqIEJvb2xlYW4gZmxhZyBjb250cm9sbGluZyBjYW52YXMgcmVmcmVzaC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIGEgQ2FudmFzTWFza01hbmFnZXIsIGhhbmRsZXMgbWFza2luZyB3aGVuIHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc01hc2tNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBuZXcgQ2FudmFzTWFza01hbmFnZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgcHJvcGVydHkgdXNlZCB0byBzZXQgdGhlIGNhbnZhcyBzbW9vdGhpbmcgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdpbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnd2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21vekltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnb0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21zSW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIHRoaXMuX21hcEJsZW5kTW9kZXMoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge1xuICAgICAgICB3b3JsZFRyYW5zZm9ybTogbmV3IG1hdGguTWF0cml4KCksXG4gICAgICAgIHdvcmxkQWxwaGE6IDFcbiAgICB9O1xuXG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihDYW52YXNSZW5kZXJlcik7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIHRoaXMgY2FudmFzIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IG9iamVjdC5wYXJlbnQ7XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBvYmplY3Q7XG5cbiAgICBvYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgb2JqZWN0LnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIHRoaXMuY29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF07XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMgJiYgdGhpcy52aWV3LnNjcmVlbmNhbnZhcylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGVhckJlZm9yZVJlbmRlcilcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy53aWR0aCAsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChvYmplY3QsIHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGlzLmVtaXQoJ3Bvc3RyZW5kZXInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpXG57XG4gICAgdGhpcy5kZXN0cm95UGx1Z2lucygpO1xuXG4gICAgLy8gY2FsbCB0aGUgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLnJlZnJlc2ggPSB0cnVlO1xuXG4gICAgdGhpcy5tYXNrTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG5cbiAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KVxue1xuICAgIHZhciB0ZW1wQ29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJDYW52YXModGhpcyk7XG4gICAgdGhpcy5jb250ZXh0ID0gdGVtcENvbnRleHQ7XG59O1xuXG4vKipcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXIjcmVzaXplXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAodywgaClcbntcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcywgdywgaCk7XG5cbiAgICAvL3Jlc2V0IHRoZSBzY2FsZSBtb2RlLi4gb2RkbHkgdGhpcyBzZWVtcyB0byBiZSByZXNldCB3aGVuIHRoZSBjYW52YXMgaXMgcmVzaXplZC5cbiAgICAvL3N1cmVseSBhIGJyb3dzZXIgYnVnPz8gTGV0IHBpeGkgZml4IHRoYXQgZm9yIHlvdS4uXG4gICAgaWYodGhpcy5zbW9vdGhQcm9wZXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dFt0aGlzLnNtb290aFByb3BlcnR5XSA9IChDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBNYXBzIFBpeGkgYmxlbmQgbW9kZXMgdG8gY2FudmFzIGJsZW5kIG1vZGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fbWFwQmxlbmRNb2RlcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmJsZW5kTW9kZXMpXG4gICAge1xuICAgICAgICB0aGlzLmJsZW5kTW9kZXMgPSB7fTtcblxuICAgICAgICBpZiAodXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdtdWx0aXBseSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc2NyZWVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdvdmVybGF5JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdkYXJrZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ2xpZ2h0ZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ2NvbG9yLWRvZGdlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdjb2xvci1idXJuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IQVJEX0xJR0hUXSAgICA9ICdoYXJkLWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb2Z0LWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdkaWZmZXJlbmNlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5FWENMVVNJT05dICAgICA9ICdleGNsdXNpb24nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ2h1ZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc2F0dXJhdGUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ2NvbG9yJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdsdW1pbm9zaXR5JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb29sIG5ldyBibGVuZCBtb2RlcyBpbiBjYW52YXMgJ2NvdWdoJyBpZSAnY291Z2gnXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TQVRVUkFUSU9OXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBjYW52YXNcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKi9cbmZ1bmN0aW9uIENhbnZhc0J1ZmZlcih3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBDYW52YXMgb2JqZWN0IHRoYXQgYmVsb25ncyB0byB0aGlzIENhbnZhc0J1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBBIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHdvLWRpbWVuc2lvbmFsIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn1cblxuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc0J1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzQnVmZmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYW52YXNCdWZmZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB2YWw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyBidWZmZXIgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNhbnZhc0J1ZmZlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENsZWFycyB0aGUgY2FudmFzIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIENhbnZhc0J1ZmZlciBjbGFzcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgY2FudmFzIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBjYW52YXMuXG4gKlxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlciB0byBkcmF3IHRoZSBwcmltaXRpdmUgZ3JhcGhpY3MgZGF0YS5cbiAqIEBzdGF0aWNcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xudmFyIENhbnZhc0dyYXBoaWNzID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0dyYXBoaWNzO1xuXG4vKlxuICogUmVuZGVycyBhIEdyYXBoaWNzIG9iamVjdCB0byBhIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBhY3R1YWwgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIDJkIGRyYXdpbmcgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIHdvcmxkQWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljc1RpbnQoZ3JhcGhpY3MpO1xuICAgICAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuX2ZpbGxUaW50O1xuICAgICAgICB2YXIgbGluZUNvbG9yID0gZGF0YS5fbGluZVRpbnQ7XG5cbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRPRE8gLSBuZWVkIHRvIGJlIFVuZGVmaW5lZCFcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsMCwyKk1hdGguUEkpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcblxuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJ4ID0gc2hhcGUueDtcbiAgICAgICAgICAgIHZhciByeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBzaGFwZS53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgcmFkaXVzID0gc2hhcGUucmFkaXVzO1xuXG4gICAgICAgICAgICB2YXIgbWF4UmFkaXVzID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyIHwgMDtcbiAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1cyA+IG1heFJhZGl1cyA/IG1heFJhZGl1cyA6IHJhZGl1cztcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGxDb2xvciB8fCBkYXRhLmZpbGxDb2xvciA9PT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3MgbWFza1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBtYXNrXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY29udGV4dCAyZCBtZXRob2Qgb2YgdGhlIGNhbnZhc1xuICovXG5DYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIGxlbiA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG5cbiAgICBpZiAobGVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludCBhcmUgdGhlIHNhbWUgY2xvc2UgdGhlIHBhdGggLSBtdWNoIG5lYXRlciA6KVxuICAgICAgICAgICAgaWYgKHBvaW50c1swXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gJiYgcG9pbnRzWzFdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5yZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuXG4gICAgICAgICAgICAvLyBlbGxpcHNlIGNvZGUgdGFrZW4gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG5cbiAgICAgICAgICAgIHZhciB3ID0gc2hhcGUud2lkdGggKiAyO1xuICAgICAgICAgICAgdmFyIGggPSBzaGFwZS5oZWlnaHQgKiAyO1xuXG4gICAgICAgICAgICB2YXIgeCA9IHNoYXBlLnggLSB3LzI7XG4gICAgICAgICAgICB2YXIgeSA9IHNoYXBlLnkgLSBoLzI7XG5cbiAgICAgICAgICAgIHZhciBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICAgICAgICAgICAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgIHhlID0geCArIHcsICAgICAgICAgICAvLyB4LWVuZFxuICAgICAgICAgICAgICAgIHllID0geSArIGgsICAgICAgICAgICAvLyB5LWVuZFxuICAgICAgICAgICAgICAgIHhtID0geCArIHcgLyAyLCAgICAgICAvLyB4LW1pZGRsZVxuICAgICAgICAgICAgICAgIHltID0geSArIGggLyAyOyAgICAgICAvLyB5LW1pZGRsZVxuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhlLCB5bSArIG95LCB4bSArIG94LCB5ZSwgeG0sIHllKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdGludCBvZiBhIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB0aGF0IHdpbGwgaGF2ZSBpdHMgdGludCB1cGRhdGVkXG4gKlxuICovXG5DYW52YXNHcmFwaGljcy51cGRhdGVHcmFwaGljc1RpbnQgPSBmdW5jdGlvbiAoZ3JhcGhpY3MpXG57XG4gICAgaWYgKGdyYXBoaWNzLnRpbnQgPT09IDB4RkZGRkZGICYmIGdyYXBoaWNzLl9wcmV2VGludCA9PT0gZ3JhcGhpY3MudGludClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGhpY3MuX3ByZXZUaW50ID0gZ3JhcGhpY3MudGludDtcblxuICAgIHZhciB0aW50UiA9IChncmFwaGljcy50aW50ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIHRpbnRHID0gKGdyYXBoaWNzLnRpbnQgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50QiA9IChncmFwaGljcy50aW50ICYgMHhGRikvIDI1NTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuZmlsbENvbG9yIHwgMDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEubGluZUNvbG9yIHwgMDtcblxuICAgICAgICAvKlxuICAgICAgICB2YXIgY29sb3JSID0gKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JHID0gKGZpbGxDb2xvciA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIHZhciBjb2xvckIgPSAoZmlsbENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBmaWxsQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcblxuICAgICAgICBjb2xvclIgPSAobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIGNvbG9yRyA9IChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckIgPSAobGluZUNvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBsaW5lQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcbiAgICAgICAgKi9cblxuICAgICAgICAvLyBzdXBlciBpbmxpbmUgY29zIGltIGFuIG9wdGltaXphdGlvbiBOQVpJIDopXG4gICAgICAgIGRhdGEuX2ZpbGxUaW50ID0gKCgoZmlsbENvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChmaWxsQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG4gICAgICAgIGRhdGEuX2xpbmVUaW50ID0gKCgobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChsaW5lQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG5cbiAgICB9XG59O1xuXG4iLCJ2YXIgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuL0NhbnZhc0dyYXBoaWNzJyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgdG8gaGFuZGxlIG1hc2tpbmcuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDYW52YXNNYXNrTWFuYWdlcigpXG57fVxuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzTWFza01hbmFnZXI7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgYWRkcyBpdCB0byB0aGUgY3VycmVudCBzdGFjayBvZiBtYXNrcy5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge29iamVjdH0gdGhlIG1hc2tEYXRhIHRoYXQgd2lsbCBiZSBwdXNoZWRcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhLCByZW5kZXJlcilcbntcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2F2ZSgpO1xuXG4gICAgdmFyIGNhY2hlQWxwaGEgPSBtYXNrRGF0YS5hbHBoYTtcbiAgICB2YXIgdHJhbnNmb3JtID0gbWFza0RhdGEud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICAvL1RPRE8gc3Vwb3J0IHNwcml0ZSBhbHBoYSBtYXNrcz8/XG4gICAgLy9sb3RzIG9mIGVmZm9ydCByZXF1aXJlZC4gSWYgZGVtYW5kIGlzIGdyZWF0IGVub3VnaC4uXG4gICAgaWYoIW1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sobWFza0RhdGEsIHJlbmRlcmVyLmNvbnRleHQpO1xuICAgICAgICByZW5kZXJlci5jb250ZXh0LmNsaXAoKTtcbiAgICB9XG5cbiAgICBtYXNrRGF0YS53b3JsZEFscGhhID0gY2FjaGVBbHBoYTtcbn07XG5cbi8qKlxuICogUmVzdG9yZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlIHRoZSBtYXNrIHdhcyBhcHBsaWVkLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIFNwcml0ZS9UZXh0dXJlIHRpbnRpbmcuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNUaW50ZXIgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzVGludGVyO1xuXG4vKipcbiAqIEJhc2ljYWxseSB0aGlzIG1ldGhvZCBqdXN0IG5lZWRzIGEgc3ByaXRlIGFuZCBhIGNvbG9yIGFuZCB0aW50cyB0aGUgc3ByaXRlIHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIHRpbnRlZCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUgPSBmdW5jdGlvbiAoc3ByaXRlLCBjb2xvcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHNwcml0ZS50ZXh0dXJlO1xuXG4gICAgY29sb3IgPSBDYW52YXNUaW50ZXIucm91bmRDb2xvcihjb2xvcik7XG5cbiAgICB2YXIgc3RyaW5nQ29sb3IgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG5cbiAgICB0ZXh0dXJlLnRpbnRDYWNoZSA9IHRleHR1cmUudGludENhY2hlIHx8IHt9O1xuXG4gICAgaWYgKHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl07XG4gICAgfVxuXG4gICAgIC8vIGNsb25lIHRleHR1cmUuLlxuICAgIHZhciBjYW52YXMgPSBDYW52YXNUaW50ZXIuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLy9DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCh0ZXh0dXJlLCBzdHJpbmdDb2xvciwgY2FudmFzKTtcbiAgICBDYW52YXNUaW50ZXIudGludE1ldGhvZCh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKTtcblxuICAgIGlmIChDYW52YXNUaW50ZXIuY29udmVydFRpbnRUb0ltYWdlKVxuICAgIHtcbiAgICAgICAgLy8gaXMgdGhpcyBiZXR0ZXI/XG4gICAgICAgIHZhciB0aW50SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgdGludEltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcblxuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSB0aW50SW1hZ2U7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSA9IGNhbnZhcztcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCBjb252ZXJ0aW5nIHRoZSB0ZXh0dXJlIHRvIGFuIGltYWdlIHRoZW4gd2UgbmVlZCB0byBsb3NlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhc1xuICAgICAgICBDYW52YXNUaW50ZXIuY2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ211bHRpcGx5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgPSBmdW5jdGlvbiAodGV4dHVyZSwgY29sb3IsIGNhbnZhcylcbntcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgIHZhciBjcm9wID0gdGV4dHVyZS5jcm9wLmNsb25lKCk7XG4gICAgY3JvcC54ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC55ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC53aWR0aCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AuaGVpZ2h0ICo9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXMud2lkdGggPSBjcm9wLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wLmhlaWdodDtcblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tYXRvcCc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ292ZXJsYXknIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhPdmVybGF5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgY3JvcC54LFxuICAgICAgICBjcm9wLnksXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodFxuICAgICk7XG5cbiAgICAvLyBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5Jztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgcGl4ZWwgcGVyIHBpeGVsLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuICAgIHZhciByID0gcmdiVmFsdWVzWzBdLCBnID0gcmdiVmFsdWVzWzFdLCBiID0gcmdiVmFsdWVzWzJdO1xuXG4gICAgdmFyIHBpeGVsRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIHZhciBwaXhlbHMgPSBwaXhlbERhdGEuZGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGl4ZWxzLmxlbmd0aDsgaSArPSA0KVxuICAgIHtcbiAgICAgICAgcGl4ZWxzW2krMF0gKj0gcjtcbiAgICAgICAgcGl4ZWxzW2krMV0gKj0gZztcbiAgICAgICAgcGl4ZWxzW2krMl0gKj0gYjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnB1dEltYWdlRGF0YShwaXhlbERhdGEsIDAsIDApO1xufTtcblxuLyoqXG4gKiBSb3VuZHMgdGhlIHNwZWNpZmllZCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gcm91bmQsIHNob3VsZCBiZSBhIGhleCBjb2xvclxuICovXG5DYW52YXNUaW50ZXIucm91bmRDb2xvciA9IGZ1bmN0aW9uIChjb2xvcilcbntcbiAgICB2YXIgc3RlcCA9IENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuXG4gICAgcmdiVmFsdWVzWzBdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzBdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMV0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMV0gLyBzdGVwKSAqIHN0ZXApO1xuICAgIHJnYlZhbHVlc1syXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1syXSAvIHN0ZXApICogc3RlcCk7XG5cbiAgICByZXR1cm4gdXRpbHMucmdiMmhleChyZ2JWYWx1ZXMpO1xufTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygc3RlcHMgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgY2FwIHdoZW4gcm91bmRpbmcgY29sb3JzLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhY2hlU3RlcHNQZXJDb2xvckNoYW5uZWwgPSA4O1xuXG4vKipcbiAqIFRpbnQgY2FjaGUgYm9vbGVhbiBmbGFnLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSA9IGZhbHNlO1xuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkLCBjb25zZXF1ZW50bHkgdGhlIGFiaWxpdHkgdG8gdGludCB1c2luZyB0aGUgbXVsdGlwbHkgbWV0aG9kLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID0gdXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpO1xuXG4vKipcbiAqIFRoZSB0aW50aW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKi9cbkNhbnZhc1RpbnRlci50aW50TWV0aG9kID0gQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID8gQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgOiAgQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWw7XG4iLCJ2YXIgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuXHR1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgVGV4dHVyZU1hbmFnZXIgPSBmdW5jdGlvbihnbClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIHRyYWNrIHRleHR1cmVzIGluIHRoZSByZW5kZXJlciBzbyB3ZSBjYW4gbm8gbG9uZ2VyIGxpc3RlbiB0byB0aGVtIG9uIGRlc3RydWN0aW9uLlxuXHR0aGlzLl9tYW5hZ2VkVGV4dHVyZXMgPSBbXTtcbiAgICB0aGlzLmdsVGV4dHVyZXMgPSB7fTtcblxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmdldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cbi8qKlxuICogVXBkYXRlcyBhbmQvb3IgQ3JlYXRlcyBhIFdlYkdMIHRleHR1cmUgZm9yIHRoZSByZW5kZXJlcidzIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB1cGRhdGVcbiAqL1xuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG5cdGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXS8vdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG5cbiAgICBpZiAoIWdsVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGdsVGV4dHVyZSA9IG5ldyBHTFRleHR1cmUoZ2wpO1xuICAgICAgICBnbFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHRydWVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbFRleHR1cmU7XG5cbiAgICAgICAvLyB0aGlzLmdsVGV4dHVyZXNbdGV4dHVyZS51aWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgIHRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub24oJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xuICAgIH1cblxuICAgIGdsVGV4dHVyZS51cGxvYWQodGV4dHVyZS5zb3VyY2UpO1xuICAgIFxuICAgIC8vVE9ETyBjaGVjayBpcyBwb3dlciBvZiB0d28uLlxuICAgIGdsVGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuXG4gICAgLy8gVE9ETyBjaGVjayBmb3Igc2NhbGluZyB0eXBlXG4gICAgZ2xUZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKTtcblxuICAgIHJldHVybiAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG59XG5cbi8qKlxuICogRGVsZXRlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byBkZXN0cm95XG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUsIF9za2lwUmVtb3ZlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0uZGVzdHJveSgpO1xuICAgICAgICB0ZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGVUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcblxuXG4gICAgICAgIGRlbGV0ZSB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdO1xuXG4gICAgICAgIGlmICghX3NraXBSZW1vdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzLmluZGV4T2YodGV4dHVyZSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLl9tYW5hZ2VkVGV4dHVyZXMsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24oKVxue1xuXHQvLyBlbXB0eSBhbGwgdGhlIG9sZCBnbCB0ZXh0dXJlcyBhcyB0aGV5IGFyZSB1c2VsZXNzIG5vd1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIGlmICh0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgLy8gZGVzdHJveSBtYW5hZ2VkIHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgdGhpcy5kZXN0cm95VGV4dHVyZSh0ZXh0dXJlLCB0cnVlKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFuYWdlZFRleHR1cmVzID0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlTWFuYWdlcjtcblxuIiwidmFyIFN5c3RlbVJlbmRlcmVyID0gcmVxdWlyZSgnLi4vU3lzdGVtUmVuZGVyZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL01hc2tNYW5hZ2VyJyksXG4gICAgU3RlbmNpbE1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyJyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIEJsZW5kTW9kZU1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIEZYQUFGaWx0ZXIgPSByZXF1aXJlKCcuL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi9UZXh0dXJlTWFuYWdlcicpLFxuICAgIGNyZWF0ZUNvbnRleHQgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5jcmVhdGVDb250ZXh0LFxuICAgIG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aSA9IHJlcXVpcmUoJy4vdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpJyksXG4gICAgbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgV2ViR0xSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgd2ViR0wgZW5hYmxlZCBjYW52YXMuIFRoaXMgcmVuZGVyZXJcbiAqIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wuIFRoaXMgUmVuZGVyIHdvcmtzIGJ5IGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgd2ViR0xCYXRjaHMuXG4gKiBTbyBubyBuZWVkIGZvciBTcHJpdGUgQmF0Y2hlcyBvciBTcHJpdGUgQ2xvdWRzLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgdmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD0wXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD0wXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcy4gSWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseSB0aGVuIEZYQUEgYW50aWFsaWFzaW5nIGlzIHVzZWRcbiAqIEBwYXJhbSBbb3B0aW9ucy5mb3JjZUZYQUE9ZmFsc2VdIHtib29sZWFufSBmb3JjZXMgRlhBQSBhbnRpYWxpYXNpbmcgdG8gYmUgdXNlZCBvdmVyIG5hdGl2ZS4gRlhBQSBpcyBmYXN0ZXIsIGJ1dCBtYXkgbm90IGFsd2F5cyBsb29rIGFzIGdyZWF0XG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLiBJZiB5b3Ugd2lzaCB0byBzZXQgdGhpcyB0byBmYWxzZSwgeW91ICptdXN0KiBzZXQgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHRvIGB0cnVlYC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWZcbiAqICAgICAgeW91IG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHQuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgU3lzdGVtUmVuZGVyZXIuY2FsbCh0aGlzLCAnV2ViR0wnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgcmVuZGVyZXIgYXMgYSBzdGFuZGFyZGlzZWQgY29uc3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0vL1xuICAgICAqXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQgPSB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHBhc3NlZCBpbiB0byBjcmVhdGUgYSBuZXcgd2ViZ2wgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0ge1xuICAgICAgICBhbHBoYTogdGhpcy50cmFuc3BhcmVudCxcbiAgICAgICAgYW50aWFsaWFzOiBvcHRpb25zLmFudGlhbGlhcyxcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnRyYW5zcGFyZW50ICYmIHRoaXMudHJhbnNwYXJlbnQgIT09ICdub3RNdWx0aXBsaWVkJyxcbiAgICAgICAgc3RlbmNpbDogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgIH07XG5cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhWzNdID0gdGhpcy50cmFuc3BhcmVudCA/IDAgOiAxO1xuXG4gICAgLyoqXG4gICAgICogRGVhbHMgd2l0aCBtYW5hZ2luZyB0aGUgc2hhZGVyIHByb2dyYW1zIGFuZCB0aGVpciBhdHRyaWJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG5ldyBTaGFkZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWFza3MgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IE1hc2tNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIgPSBuZXcgU3RlbmNpbE1hbmFnZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5GaWx0ZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgYmxlbmRNb2Rlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CbGVuZE1vZGVNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlciA9IG5ldyBCbGVuZE1vZGVNYW5hZ2VyKHRoaXMpO1xuXG4gICAgXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgT2JqZWN0UmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk9iamVjdFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbmV3IE9iamVjdFJlbmRlcmVyKHRoaXMpO1xuXG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBzbyBpdCBpcyByZWFkeSBmb3IgdGhlIG1hbmFnZXJzLlxuICAgIHRoaXMuZ2wgPSBjcmVhdGVDb250ZXh0KHRoaXMudmlldywgdGhpcy5fY29udGV4dE9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcblxuICAgIC8vIG1hcCBzb21lIHdlYkdMIGJsZW5kIGFuZCBkcmF3bW9kZXMuLlxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aShnbCk7XG4gICAgdGhpcy5kcmF3TW9kZXMgPSBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbClcblxuICAgIHRoaXMuX2FjdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldH1cbiAgICAgKi9cbiAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihXZWJHTFJlbmRlcmVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBXZWJHTCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuX2luaXRDb250ZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgLy8gY3JlYXRlIGEgdGV4dHVyZSBtYW5hZ2VyLi4uXG4gICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG5ldyBUZXh0dXJlTWFuYWdlcihnbCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIGRlZmF1bHQgcGl4aSBzZXR0aW5ncy4uXG4gICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcblxuXG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG51bGwsIHRoaXMucmVzb2x1dGlvbiwgdHJ1ZSk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LmNsZWFyQ29sb3IgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhO1xuICAgIFxuICAgIHRoaXMuYmluZFJlbmRlclRhcmdldCh0aGlzLnJvb3RSZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy5lbWl0KCdjb250ZXh0JywgZ2wpO1xuXG4gICAgLy8gc2V0dXAgdGhlIHdpZHRoL2hlaWdodCBwcm9wZXJ0aWVzIGFuZCBnbCB2aWV3cG9ydFxuICAgIHRoaXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsgICAgXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBpdHMgd2ViR0wgdmlld1xuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gdGhlIG9iamVjdCB0byBiZSByZW5kZXJlZFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdClcbntcbiAgICB0aGlzLmVtaXQoJ3ByZXJlbmRlcicpO1xuXG4gICAgLy8gbm8gcG9pbnQgcmVuZGVyaW5nIGlmIG91ciBjb250ZXh0IGhhcyBiZWVuIGJsb3duIHVwIVxuICAgIGlmICh0aGlzLmdsLmlzQ29udGV4dExvc3QoKSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBkaXNwbGF5T2JqZWN0O1xuXG4gICAgdmFyIGNhY2hlUGFyZW50ID0gZGlzcGxheU9iamVjdC5wYXJlbnQ7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgZGlzcGxheU9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICBkaXNwbGF5T2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIHRoaXMucm9vdFJlbmRlclRhcmdldCwgdGhpcy5jbGVhckJlZm9yZVJlbmRlcik7Ly90aGlzLnByb2plY3Rpb24pO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBEaXNwbGF5IE9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSBUaGUgcmVuZGVyIHRhcmdldCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgZGlzcGxheSBvYmplY3RcbiAqXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcmVuZGVyVGFyZ2V0LCBjbGVhcikvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblxuICAgIGlmKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIGZpbHRlciBtYW5hZ2VyXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnNldEZpbHRlclN0YWNrKCByZW5kZXJUYXJnZXQuZmlsdGVyU3RhY2sgKTtcblxuICAgIC8vIHJlbmRlciB0aGUgc2NlbmUhXG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJXZWJHTCh0aGlzKTtcblxuICAgIC8vIGZpbmlzaCB0aGUgY3VycmVudCByZW5kZXJlci4uXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXJlciB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSBvYmplY3RSZW5kZXJlciB7UElYSS5PYmplY3RSZW5kZXJlcn0gVGhlIG9iamVjdCByZW5kZXJlciB0byB1c2UuXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldE9iamVjdFJlbmRlcmVyID0gZnVuY3Rpb24gKG9iamVjdFJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRSZW5kZXJlciA9PT0gb2JqZWN0UmVuZGVyZXIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RvcCgpO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gb2JqZWN0UmVuZGVyZXI7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgd2ViR0wgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHdlYkdMIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHdlYkdMIHZpZXdcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSB0aGlzLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRvIHRoZSBvbmUgZ2l2ZW4gaW4gcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9IHRoZSBuZXcgcmVuZGVyIHRhcmdldFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5iaW5kUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICBpZihyZW5kZXJUYXJnZXQgIT09IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBpZih0aGlzLl9hY3RpdmVTaGFkZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gcmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuc2V0TWFza1N0YWNrKCByZW5kZXJUYXJnZXQuc3RlbmNpbE1hc2tTdGFjayApO1xuICAgIH1cbn1cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFNoYWRlciA9IGZ1bmN0aW9uIChzaGFkZXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgLy9UT0RPIGNhY2hlXG4gICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyICE9PSBzaGFkZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBzaGFkZXI7XG4gICAgICAgIHNoYWRlci5iaW5kKCk7XG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB9XG59XG5cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgbG9jYXRpb24pXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vVE9ETyB0ZXN0IHBlcmYgb2YgY2FjaGU/XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCAwO1xuXG4gICAgaWYodGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uICE9PSBsb2NhdGlvbikvL1xuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uID0gbG9jYXRpb25cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uICk7XG4gICAgfVxuXG4gICAgLy9UT0RPIC0gY2FuIHdlIGNhY2hlIHRoaXMgdGV4dHVyZSB0b28/XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7ICAgICAgXG4gICAgXG4gICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIGJpbmQgdGhlIHRleHR1cmUuLlxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXS5iaW5kKCk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogSGFuZGxlcyBhIGxvc3Qgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRMb3N0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgYSByZXN0b3JlZCB3ZWJnbCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9pbml0Q29udGV4dCgpO1xuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIucmVtb3ZlQWxsKCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciAoZXZlbnQgbGlzdGVuZXJzLCBzcHJpdGViYXRjaCwgZXRjLi4uKVxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIHJlbW92ZSBsaXN0ZW5lcnNcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuaGFuZGxlQ29udGV4dExvc3QpO1xuICAgIHRoaXMudmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkKTtcblxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIuZGVzdHJveUFsbCgpO1xuXG4gICAgLy8gY2FsbCBiYXNlIGRlc3Ryb3lcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHJlbW92ZVZpZXcpO1xuXG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgLy8gZGVzdHJveSB0aGUgbWFuYWdlcnNcbiAgICB0aGlzLnNoYWRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSBudWxsO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0gbnVsbDtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICB0aGlzLmdsID0gbnVsbDtcbn07XG5cbiIsInZhciBEZWZhdWx0U2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBQSVhJIGZpbHRlci4gQ3VycmVudGx5IG9ubHkgV2ViR0wgc3VwcG9ydHMgZmlsdGVycy5cbiAqIElmIHlvdSB3YW50IHRvIG1ha2UgYSBjdXN0b20gZmlsdGVyIHRoaXMgc2hvdWxkIGJlIHlvdXIgYmFzZSBjbGFzcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdmVydGV4U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIGZyYWdtZW50U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlIGFzIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gdW5pZm9ybXMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuaWZvcm1zIGZvciB0aGlzIGZpbHRlci5cbiAqL1xuZnVuY3Rpb24gQWJzdHJhY3RGaWx0ZXIodmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMpXG57XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBzaGFkZXJzXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVycyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4dHJhIHBhZGRpbmcgdGhhdCB0aGUgZmlsdGVyIG1pZ2h0IG5lZWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmlmb3JtcyBhcyBhbiBvYmplY3RcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29kZSBvZiB0aGUgdmVydGV4IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIGZyYW1lbnQgc2hhZGVyXG4gICAgICogQG1lbWJlciB7c3RyaW5nW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICAvL1RPRE8gYSByZW1pbmRlciAtIHdvdWxkIGJlIGNvb2wgdG8gaGF2ZSBsb3dlciByZXMgZmlsdGVycyBhcyB0aGlzIHdvdWxkIGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlLlxuXG4gICAgLy90eXBlb2YgZnJhZ21lbnRTcmMgPT09ICdzdHJpbmcnID8gZnJhZ21lbnRTcmMuc3BsaXQoJycpIDogKGZyYWdtZW50U3JjIHx8IFtdKTtcblxufVxuXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RGaWx0ZXI7XG5cbi8qKlxuICogR3JhYnMgYSBzaGFkZXIgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIHNoYWRlciBmcm9tXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5nZXRTaGFkZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXJzW2dsLmlkXTtcblxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gbmV3IERlZmF1bHRTaGFkZXIocmVuZGVyZXIuc2hhZGVyTWFuYWdlcixcbiAgICAgICAgICAgIHRoaXMudmVydGV4U3JjLFxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudFNyYyxcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNoYWRlcnNbZ2wuaWRdID0gc2hhZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8gY2xlYXIgdGhlIG91dHB1dFRhcmdldFxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xufTtcblxuLyoqXG4gKiBTeW5jcyBhIHVuaWZvcm0gYmV0d2VlbiB0aGUgY2xhc3Mgb2JqZWN0IGFuZCB0aGUgc2hhZGVycy5cbiAqXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5zaGFkZXJzLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyc1tpXS5zeW5jVW5pZm9ybSh1bmlmb3JtKTtcbiAgICB9XG59O1xuIiwidmFyIEFic3RyYWN0RmlsdGVyID0gcmVxdWlyZSgnLi9BYnN0cmFjdEZpbHRlcicpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqXG4gKiBCYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXG4gKiBtb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcbiAqIHVuc3VwcG9ydGVkIGJ5IFdlYkdMLlxuICpcbiAqIC0tXG4gKiBGcm9tOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKlxuICovXG5mdW5jdGlvbiBGWEFBRmlsdGVyKClcbntcbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG5cXG52b2lkIHRleGNvb3Jkcyh2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTlcsIG91dCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JTVywgb3V0IHZlYzIgdl9yZ2JTRSxcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjMiBpbnZlcnNlVlAgPSAxLjAgLyByZXNvbHV0aW9uLnh5O1xcbiAgICB2X3JnYk5XID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk5FID0gKGZyYWdDb29yZCArIHZlYzIoMS4wLCAtMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU1cgPSAoZnJhZ0Nvb3JkICsgdmVjMigtMS4wLCAxLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JTRSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiTSA9IHZlYzIoZnJhZ0Nvb3JkICogaW52ZXJzZVZQKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxuICAgdlJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xcblxcbiAgIC8vY29tcHV0ZSB0aGUgdGV4dHVyZSBjb29yZHMgYW5kIHNlbmQgdGhlbSB0byB2YXJ5aW5nc1xcbiAgIHRleGNvb3JkcyhhVGV4dHVyZUNvb3JkICogcmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgdl9yZ2JOVywgdl9yZ2JORSwgdl9yZ2JTVywgdl9yZ2JTRSwgdl9yZ2JNKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcblxcbi8qKlxcbkJhc2ljIEZYQUEgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGNvZGUgb24gZ2Vla3MzZC5jb20gd2l0aCB0aGVcXG5tb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcXG51bnN1cHBvcnRlZCBieSBXZWJHTC5cXG5cXG4tLVxcblxcbkZyb206XFxuaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcXG5cXG5Db3B5cmlnaHQgKGMpIDIwMTEgYnkgQXJtaW4gUm9uYWNoZXIuXFxuXFxuU29tZSByaWdodHMgcmVzZXJ2ZWQuXFxuXFxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxcbm1ldDpcXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXFxuICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcXG4gICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcXG4gICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXFxuXFxuICAgICogVGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3JcXG4gICAgICBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWNcXG4gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXFxuXFxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xcblxcXCJBUyBJU1xcXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXFxuQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcXG5PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcXG5TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXFxuVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXFxuKi9cXG5cXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01JTlxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvIDEyOC4wKVxcbiNlbmRpZlxcbiNpZm5kZWYgRlhBQV9SRURVQ0VfTVVMXFxuICAgICNkZWZpbmUgRlhBQV9SRURVQ0VfTVVMICAgKDEuMCAvIDguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfU1BBTl9NQVhcXG4gICAgI2RlZmluZSBGWEFBX1NQQU5fTUFYICAgICA4LjBcXG4jZW5kaWZcXG5cXG4vL29wdGltaXplZCB2ZXJzaW9uIGZvciBtb2JpbGUsIHdoZXJlIGRlcGVuZGVudFxcbi8vdGV4dHVyZSByZWFkcyBjYW4gYmUgYSBib3R0bGVuZWNrXFxudmVjNCBmeGFhKHNhbXBsZXIyRCB0ZXgsIHZlYzIgZnJhZ0Nvb3JkLCB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk5XLCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYlNXLCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjNCBjb2xvcjtcXG4gICAgbWVkaXVtcCB2ZWMyIGludmVyc2VWUCA9IHZlYzIoMS4wIC8gcmVzb2x1dGlvbi54LCAxLjAgLyByZXNvbHV0aW9uLnkpO1xcbiAgICB2ZWMzIHJnYk5XID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JOVykueHl6O1xcbiAgICB2ZWMzIHJnYk5FID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JORSkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTVykueHl6O1xcbiAgICB2ZWMzIHJnYlNFID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTRSkueHl6O1xcbiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JNKTtcXG4gICAgdmVjMyByZ2JNICA9IHRleENvbG9yLnh5ejtcXG4gICAgdmVjMyBsdW1hID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTtcXG4gICAgZmxvYXQgbHVtYU5XID0gZG90KHJnYk5XLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KHJnYk5FLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gZG90KHJnYlNXLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNFID0gZG90KHJnYlNFLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KHJnYk0sICBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU1pbiA9IG1pbihsdW1hTSwgbWluKG1pbihsdW1hTlcsIGx1bWFORSksIG1pbihsdW1hU1csIGx1bWFTRSkpKTtcXG4gICAgZmxvYXQgbHVtYU1heCA9IG1heChsdW1hTSwgbWF4KG1heChsdW1hTlcsIGx1bWFORSksIG1heChsdW1hU1csIGx1bWFTRSkpKTtcXG5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpcjtcXG4gICAgZGlyLnggPSAtKChsdW1hTlcgKyBsdW1hTkUpIC0gKGx1bWFTVyArIGx1bWFTRSkpO1xcbiAgICBkaXIueSA9ICAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuXFxuICAgIGZsb2F0IGRpclJlZHVjZSA9IG1heCgobHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFKSAqXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNSAqIEZYQUFfUkVEVUNFX01VTCksIEZYQUFfUkVEVUNFX01JTik7XFxuXFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvIChtaW4oYWJzKGRpci54KSwgYWJzKGRpci55KSkgKyBkaXJSZWR1Y2UpO1xcbiAgICBkaXIgPSBtaW4odmVjMihGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgIG1heCh2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBkaXIgKiByY3BEaXJNaW4pKSAqIGludmVyc2VWUDtcXG5cXG4gICAgdmVjMyByZ2JBID0gMC41ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDEuMCAvIDMuMCAtIDAuNSkpLnh5eiArXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMi4wIC8gMy4wIC0gMC41KSkueHl6KTtcXG4gICAgdmVjMyByZ2JCID0gcmdiQSAqIDAuNSArIDAuMjUgKiAoXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAtMC41KS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogMC41KS54eXopO1xcblxcbiAgICBmbG9hdCBsdW1hQiA9IGRvdChyZ2JCLCBsdW1hKTtcXG4gICAgaWYgKChsdW1hQiA8IGx1bWFNaW4pIHx8IChsdW1hQiA+IGx1bWFNYXgpKVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkEsIHRleENvbG9yLmEpO1xcbiAgICBlbHNlXFxuICAgICAgICBjb2xvciA9IHZlYzQocmdiQiwgdGV4Q29sb3IuYSk7XFxuICAgIHJldHVybiBjb2xvcjtcXG59XFxuXFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGZ4YWEodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKiB2UmVzb2x1dGlvbiwgdlJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxuXFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG59XG5cbkZYQUFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRlhBQUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGWEFBRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBGWEFBRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cbkZYQUFGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlciggcmVuZGVyZXIgKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBTcHJpdGVNYXNrRmlsdGVyIGNsYXNzXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSB0YXJnZXQgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZU1hc2tGaWx0ZXIoc3ByaXRlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgICB2TWFza0Nvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFza0Nvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgLy8gY2hlY2sgY2xpcCEgdGhpcyB3aWxsIHN0b3AgdGhlIG1hc2sgYmxlZWRpbmcgb3V0IGZyb20gdGhlIGVkZ2VzXFxuICAgIHZlYzIgdGV4dCA9IGFicyggdk1hc2tDb29yZCAtIDAuNSApO1xcbiAgICB0ZXh0ID0gc3RlcCgwLjUsIHRleHQpO1xcbiAgICBmbG9hdCBjbGlwID0gMS4wIC0gbWF4KHRleHQueSwgdGV4dC54KTtcXG4gICAgdmVjNCBvcmlnaW5hbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgIHZlYzQgbWFza3kgPSB0ZXh0dXJlMkQobWFzaywgdk1hc2tDb29yZCk7XFxuICAgIG9yaWdpbmFsICo9IChtYXNreS5yICogbWFza3kuYSAqIGFscGhhICogY2xpcCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG9yaWdpbmFsO1xcbn1cXG5cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbWFzazogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUuX3RleHR1cmUgfSxcbiAgICAgICAgICAgIGFscGhhOiAgICAgICAgICB7IHR5cGU6ICdmJywgdmFsdWU6IDF9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcbn1cblxuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0byByZXRyaWV2ZSB0aGUgZmlsdGVyIGZyb21cbiAqIEBwYXJhbSBpbnB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gb3V0cHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqL1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5tYXNrLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLl90ZXh0dXJlO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLndvcmxkQWxwaGE7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZU1hc2tGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgdXNlZCB0byBtb3ZlIHRoZSBkaXNwbGFjZW1lbnQgbWFwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdsTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBCbGVuZE1vZGVNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn1cblxuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZE1vZGVNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGVNYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMtdXAgdGhlIGdpdmVuIGJsZW5kTW9kZSBmcm9tIFdlYkdMJ3MgcG9pbnQgb2Ygdmlldy5cbiAqXG4gKiBAcGFyYW0gYmxlbmRNb2RlIHtudW1iZXJ9IHRoZSBibGVuZE1vZGUsIHNob3VsZCBiZSBhIFBpeGkgY29uc3QsIHN1Y2ggYXMgYFBJWEkuQkxFTkRfTU9ERVMuQUREYC4gU2VlXG4gKiAge0BsaW5rIFBJWEkuQkxFTkRfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLnNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChibGVuZE1vZGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblxuICAgIHZhciBtb2RlID0gdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuY3VycmVudEJsZW5kTW9kZV07XG4gICAgdGhpcy5yZW5kZXJlci5nbC5ibGVuZEZ1bmMobW9kZVswXSwgbW9kZVsxXSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgUXVhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL1F1YWQnKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXTtcblxuICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgIHJlbmRlclRhcmdldDpyZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LFxuICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgIGJvdW5kczpudWxsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldFtdfVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICAvLyBsaXN0ZW4gZm9yIGNvbnRleHQgYW5kIHVwZGF0ZSBuZWNlc3NhcnkgYnVmZmVyc1xuICAgIC8vVE9ETyBtYWtlIHRoaXMgZHluYW1pYyFcbiAgICAvL1RPRE8gdGVzdCB0aGlzIG91dCBieSBmb3JjZXMgcG93ZXIgb2YgdHdvP1xuICAgIHRoaXMudGV4dHVyZVNpemUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgcmVuZGVyZXIud2lkdGgsIHJlbmRlcmVyLmhlaWdodCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmcmFtZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBudWxsO1xufVxuXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbHRlck1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlck1hbmFnZXI7XG5cblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVQb29sLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucXVhZCA9IG5ldyBRdWFkKGdsKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcGFyYW0gYnVmZmVyIHtBcnJheUJ1ZmZlcn1cbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuc2V0RmlsdGVyU3RhY2sgPSBmdW5jdGlvbiAoIGZpbHRlclN0YWNrIClcbntcbiAgICB0aGlzLmZpbHRlclN0YWNrID0gZmlsdGVyU3RhY2s7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlciBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGZpbHRlcnMge1BJWEkuQWJzdHJhY3RGaWxlcltdfSB0aGUgZmlsdGVycyB0aGF0IHdpbGwgYmUgcHVzaGVkIHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFja1xuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5wdXNoRmlsdGVyID0gZnVuY3Rpb24gKHRhcmdldCwgZmlsdGVycylcbntcbiAgICAvLyBnZXQgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0Li5cbiAgICAvLyBUT0RPIHJlcGxhY2UgY2xvbmUgd2l0aCBhIGNvcHkgdG8gc2F2ZSBvYmplY3QgY3JlYXRpb25cbiAgICB2YXIgYm91bmRzID0gdGFyZ2V0LmZpbHRlckFyZWEgPyB0YXJnZXQuZmlsdGVyQXJlYS5jbG9uZSgpIDogdGFyZ2V0LmdldEJvdW5kcygpO1xuXG4gICAgLy9ib3VuZHMgPSBib3VuZHMuY2xvbmUoKTtcblxuICAgIC8vIHJvdW5kIG9mZiB0aGUgcmVjdGFuZ2xlIHRvIGdldCBhIG5pY2Ugc21vb29vb29vdGggZmlsdGVyIDopXG4gICAgYm91bmRzLnggPSBib3VuZHMueCB8IDA7XG4gICAgYm91bmRzLnkgPSBib3VuZHMueSB8IDA7XG4gICAgYm91bmRzLndpZHRoID0gYm91bmRzLndpZHRoIHwgMDtcbiAgICBib3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCB8IDA7XG5cblxuICAgIC8vIHBhZGRpbmchXG4gICAgdmFyIHBhZGRpbmcgPSBmaWx0ZXJzWzBdLnBhZGRpbmcgfCAwO1xuICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLnkgLT0gcGFkZGluZztcbiAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcblxuXG4gICAgaWYodGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vVE9ETyB0aGlzIHdpbGwgYnJlYWsgaWYgdGhlIHJlbmRlclRleHR1cmUgdHJhbnNmb3JtIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYSB0cmFuc2xhdGlvbi5cbiAgICAgICAgLy9XaWxsIG5lZWQgdG8gdGFrZSB0aGUgZnVsbCBtYXRyaXggdHJhbnNmb3JtIGludG8gYWNvdW50Li5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm07XG5cbiAgICAgICAgYm91bmRzLnggKz0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSArPSB0cmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdGhpcy5jYXBGaWx0ZXJBcmVhKCBib3VuZHMgKTtcblxuICAgICAgICBib3VuZHMueCAtPSB0cmFuc2Zvcm0udHg7XG4gICAgICAgIGJvdW5kcy55IC09IHRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG4gICAgfVxuXG4gICAgaWYoYm91bmRzLndpZHRoID4gMCAmJiBib3VuZHMuaGVpZ2h0ID4gMClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gYm91bmRzO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBjbGVhciB0aGUgdGV4dHVyZS4uXG4gICAgICAgIHRleHR1cmUuY2xlYXIoKTtcblxuICAgICAgICAvLyBUT0RPIGdldCByaWQgb2Ygb2JqZWN0IGNyZWF0aW9uIVxuICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OiB0ZXh0dXJlLFxuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJzXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIHB1c2ggc29tdGhpbmcgb24gdG8gdGhlIHN0YWNrIHRoYXQgaXMgZW1wdHlcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucG9wRmlsdGVyID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2sucG9wKCk7XG4gICAgdmFyIHByZXZpb3VzRmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2tbdGhpcy5maWx0ZXJTdGFjay5sZW5ndGgtMV07XG5cbiAgICB2YXIgaW5wdXQgPSBmaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIGlmIHRoZSByZW5kZXJUYXJnZXQgaXMgbnVsbCB0aGVuIHdlIGRvbid0IGFwcGx5IHRoZSBmaWx0ZXIgYXMgaXRzIG9mZnNjcmVlblxuICAgIGlmKCFmaWx0ZXJEYXRhLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gcHJldmlvdXNGaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIHVzZSBwcm9ncmFtXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpbnB1dC5mcmFtZTtcblxuICAgIHRoaXMucXVhZC5tYXAodGhpcy50ZXh0dXJlU2l6ZSwgaW5wdXQuZnJhbWUpO1xuXG5cbiAgICAvLyBUT0RPLi4gdGhpcyBwcm9iYWJseSBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBmaWx0ZXJzID0gZmlsdGVyRGF0YS5maWx0ZXI7XG5cbiAgICAvLyBhc3N1bWluZyBhbGwgZmlsdGVycyBmb2xsb3cgdGhlIGNvcnJlY3QgZm9ybWF0Pz9cbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgbm9ybWFsIGJsZW5kbW9kZSFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKENPTlNULkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDEpXG4gICAge1xuICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICBpZiAoZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJzWzBdLmFwcGx5RmlsdGVyKCB0aGlzLnJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0ICk7XG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBpbnB1dCApO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBmbGlwVGV4dHVyZSA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcFRleHR1cmUgPSB0aGlzLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGZpbHRlcnNbaV07XG5cbiAgICAgICAgICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSB0aGVuIHNldHRpbmcgdGhpcyBlYWNoIHRpbWU/XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlci5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIGZsb3BUZXh0dXJlICk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gZmxpcFRleHR1cmU7XG4gICAgICAgICAgICBmbGlwVGV4dHVyZSA9IGZsb3BUZXh0dXJlO1xuICAgICAgICAgICAgZmxvcFRleHR1cmUgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aC0xXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIG91dHB1dCApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBmbGlwVGV4dHVyZSApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxvcFRleHR1cmUgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyRGF0YS5maWx0ZXI7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgUmVuZGVyVGFyZ2V0XG4gKiBAcmV0dXJuIHtSZW5kZXJUYXJnZXR9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICggY2xlYXIgKVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSB0aGlzLnRleHR1cmVQb29sLnBvcCgpIHx8IG5ldyBSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJlci5nbCwgdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQsIENPTlNULlNDQUxFX01PREVTLkxJTkVBUiwgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uICogQ09OU1QuRklMVEVSX1JFU09MVVRJT04pO1xuICAgIHJlbmRlclRhcmdldC5mcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJUYXJnZXQ7XG59O1xuXG4vKlxuICogUmV0dXJucyBhIFJlbmRlclRhcmdldCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UmVuZGVyVGFyZ2V0fSBUaGUgUmVuZGVyVGFyZ2V0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnJldHVyblJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5wdXNoKCByZW5kZXJUYXJnZXQgKTtcbn07XG5cbi8qXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBzaGFkZXIge1NoYWRlcn0gVGhlIHNoYWRlciB0byB1cGxvYWRcbiAqIEBwYXJhbSBpbnB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAoc2hhZGVyLCBpbnB1dFRhcmdldCwgb3V0cHV0VGFyZ2V0LCBjbGVhcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQob3V0cHV0VGFyZ2V0KTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIG91dHB1dFRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2hhZGVyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBDYW4gdGhpcyBiZSBjYWNoZWQgYW5kIG5vdCBgdG9BcnJheWBlZCBlYWNoIGZyYW1lP1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcblxuICAgIC8vVE9ETyBjYW4gdGhpcyBiZSBvcHRpbWlzZWQ/XG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuLypcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMiAqIDQgKiA0KTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuKi9cblxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGlucHV0VGFyZ2V0LnRleHR1cmUpO1xuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIG1hcHBlZCBtYXRyaXhcbiAqIEBwYXJhbSBmaWx0ZXJBcmVhIHtSZWN0YW5nbGV9IFRoZSBmaWx0ZXIgYXJlYVxuICogQHBhcmFtIHNwcml0ZSB7U3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICogQHBhcmFtIG91dHB1dE1hdHJpeCB7TWF0cml4fSBAYWx2aW5cbiAqL1xuLy8gVE9ETyBwbGF5aW5nIGFyb3VuZCBoZXJlLi4gdGhpcyBpcyB0ZW1wb3JhcnkgLSAod2lsbCBlbmQgdXAgaW4gdGhlIHNoYWRlcilcbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeCA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhLCBzcHJpdGUsIG91dHB1dE1hdHJpeClcbntcbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBzcHJpdGUud29ybGRUcmFuc2Zvcm0uY29weShtYXRoLk1hdHJpeC5URU1QX01BVFJJWCksXG4gICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIHZhciBtYXBwZWRNYXRyaXggPSBvdXRwdXRNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIC8vIHNjYWxlLi5cbiAgICB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICBtYXBwZWRNYXRyaXgudHJhbnNsYXRlKGZpbHRlckFyZWEueCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIGZpbHRlckFyZWEueSAvIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0ICk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIHJhdGlvKTtcblxuICAgIHZhciB0cmFuc2xhdGVTY2FsZVggPSAodGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAvIHRleHR1cmUud2lkdGgpO1xuICAgIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0ZXh0dXJlLmhlaWdodCk7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS50eCAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuICAgIHdvcmxkVHJhbnNmb3JtLnR5IC89IHRleHR1cmUud2lkdGggKiB0cmFuc2xhdGVTY2FsZVg7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIG1hcHBlZE1hdHJpeC5wcmVwZW5kKHdvcmxkVHJhbnNmb3JtKTtcblxuICAgIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIG1hcHBlZE1hdHJpeC5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShzcHJpdGUuYW5jaG9yLngsIHNwcml0ZS5hbmNob3IueSk7XG5cbiAgICByZXR1cm4gbWFwcGVkTWF0cml4O1xuXG4gICAgLy8gS2VlcGluZyB0aGUgb3JnaW5hbCBhcyBhIHJlbWluZGVyIHRvIG1lIG9uIGhvdyB0aGlzIHdvcmtzIVxuICAgIC8vXG4gICAgLy8gdmFyIG0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuICAgIC8vIC8vIHNjYWxlLi5cbiAgICAvLyB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICAvLyBtLnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCk7XG5cblxuICAgIC8vIG0uc2NhbGUoMSAsIHJhdGlvKTtcblxuXG4gICAgLy8gdmFyIHRyYW5zZm9ybSA9IHd0LmNsb25lKCk7XG5cbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyA2MjApO1xuICAgIC8vIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyAzODApO1xuXG4gICAgLy8gdHJhbnNmb3JtLnR4IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICAvLyB0cmFuc2Zvcm0udHkgLz0gNjIwICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgLy8gdHJhbnNmb3JtLmludmVydCgpO1xuXG4gICAgLy8gdHJhbnNmb3JtLmFwcGVuZChtKTtcblxuICAgIC8vIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIC8vIHRyYW5zZm9ybS5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgLy8gcmV0dXJuIHRyYW5zZm9ybTtcbn07XG5cbi8qXG4gKiBDb25zdHJhaW5zIHRoZSBmaWx0ZXIgYXJlYSB0byB0aGUgdGV4dHVyZSBzaXplXG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWEgd2Ugd2FudCB0byBjYXBcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY2FwRmlsdGVyQXJlYSA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhKVxue1xuICAgIGlmIChmaWx0ZXJBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCArPSBmaWx0ZXJBcmVhLng7XG4gICAgICAgIGZpbHRlckFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlckFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLmhlaWdodCArPSBmaWx0ZXJBcmVhLnk7XG4gICAgICAgIGZpbHRlckFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnggKyBmaWx0ZXJBcmVhLndpZHRoID4gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLndpZHRoID0gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAtIGZpbHRlckFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGZpbHRlckFyZWEueSArIGZpbHRlckFyZWEuaGVpZ2h0ID4gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAtIGZpbHRlckFyZWEueTtcbiAgICB9XG59O1xuXG4vKlxuICogUmVzaXplcyBhbGwgdGhlIHJlbmRlciB0YXJnZXRzIGluIHRoZSBwb29sXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMudGV4dHVyZVNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZVBvb2xbaV0ucmVzaXplKCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgZmlsdGVyIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGZpbHRlciBzdGFjay5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucXVhZC5kZXN0cm95KCk7XG4gICAgXG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG4gICAgXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IG51bGw7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGV4dHVyZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVQb29sID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBBbHBoYU1hc2tGaWx0ZXIgPSByZXF1aXJlKCcuLi9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuc3RlbmNpbFN0YWNrID0gW107XG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ID0gMDtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbCA9IFtdO1xufVxuXG5NYXNrTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFNwcml0ZU1hc2sodGFyZ2V0LCBtYXNrRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IG1hc2sgZnJvbSB0aGUgbWFzayBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIGlmIChtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnBvcFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB2YXIgYWxwaGFNYXNrRmlsdGVyID0gdGhpcy5hbHBoYU1hc2tQb29sLnBvcCgpO1xuXG4gICAgaWYgKCFhbHBoYU1hc2tGaWx0ZXIpXG4gICAge1xuICAgICAgICBhbHBoYU1hc2tGaWx0ZXIgPSBbbmV3IEFscGhhTWFza0ZpbHRlcihtYXNrRGF0YSldO1xuICAgIH1cblxuICAgIGFscGhhTWFza0ZpbHRlclswXS5tYXNrU3ByaXRlID0gbWFza0RhdGE7XG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGFyZ2V0LCBhbHBoYU1hc2tGaWx0ZXIpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBmaWx0ZXJzID0gdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgdGhpcy5hbHBoYU1hc2tQb29sLnB1c2goZmlsdGVycyk7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoTWFzayhtYXNrRGF0YSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcE1hc2sobWFza0RhdGEpO1xufTtcblxuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpLFxuICAgIENvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXInKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTaGFkZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heEF0dGlicyA9IDEwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXhBdHRpYnM7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YWNrID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcblxuLy8gICAgdGhpcy5pbml0UGx1Z2lucygpO1xufVxuXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hbmFnZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oU2hhZGVyTWFuYWdlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyTWFuYWdlcjtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRyaWJ1dGUgY29ycmVjdGx5IGFzIHRoaXMgdGVuZHMgdG8gdmFyeVxuICAgIHRoaXMubWF4QXR0aWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVE9ETyAtIFdoeSBhcmUgdGhlc2Ugbm90IHBsdWdpbnM/IFdlIGNhbid0IGRlY291cGxlIHByaW1pdGl2ZXMgdW5sZXNzIHRoZXkgYXJlLi4uLlxuICAgIHRoaXMuZGVmYXVsdFNoYWRlciA9IG5ldyBUZXh0dXJlU2hhZGVyKHRoaXMpO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBuZXcgQ29tcGxleFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogVGFrZXMgdGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gaW4gcGFyYW1ldGVycyBhbmQgdXBsb2FkcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJzIHthbnlbXX0gYXR0cmlic1xuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRBdHRyaWJzID0gZnVuY3Rpb24gKGF0dHJpYnMpXG57XG4gICAgLy8gcmVzZXQgdGVtcCBzdGF0ZVxuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMudGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yICh2YXIgYSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbYXR0cmlic1thXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYlN0YXRlW2ldICE9PSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgc2hhZGVyLlxuICpcbiAqIEBwYXJhbSBzaGFkZXIge1BJWEkuU2hhZGVyfSB0aGUgc2hhZGVyIHRvIHVwbG9hZFxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKVxue1xuICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5fY3VycmVudElkID09PSBzaGFkZXIudWlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IHNoYWRlci51aWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBzaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmdsLnVzZVByb2dyYW0oc2hhZGVyLnByb2dyYW0pO1xuICAgIHRoaXMuc2V0QXR0cmlicyhzaGFkZXIuYXR0cmlidXRlcyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBvYmplY3QuXG4gKlxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLmRlc3Ryb3koKTtcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBudWxsO1xufTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFza01hbmFnZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG51bGw7XG59XG5cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBtYXNrIHN0YWNrIHRoYXQgaXMgdXNlZCBieSB0aGlzIG1hbmFnZXIuXG4gKlxuICogQHBhcmFtIHN0ZW5jaWxNYXNrU3RhY2sge1BJWEkuU3RlbmNpbE1hc2tTdGFja30gVGhlIG1hc2sgc3RhY2tcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuc2V0TWFza1N0YWNrID0gZnVuY3Rpb24gKCBzdGVuY2lsTWFza1N0YWNrIClcbntcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBzdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIGlmIChzdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suIEBhbHZpblxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hdHRhY2hTdGVuY2lsQnVmZmVyKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBzbXMgPSB0aGlzLnN0ZW5jaWxNYXNrU3RhY2s7XG5cbiAgICB0aGlzLmJpbmRHcmFwaGljcyhncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xuICAgICAgICBzbXMucmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIHNtcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wdXNoKHdlYkdMRGF0YSk7XG5cbiAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgLy8gZHJhdyB0aGUgdHJpYW5nbGUgc3RyaXAhXG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IGEgcXVhZCB0byBpbmNyZW1lbnQuLlxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cbiAgICBzbXMuY291bnQrKztcbn07XG5cbi8qKlxuICogVE9ETyB0aGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIVxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5iaW5kR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICAvL2lmICh0aGlzLl9jdXJyZW50R3JhcGhpY3MgPT09IGdyYXBoaWNzKXJldHVybjtcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGJpbmQgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgdmFyIHNoYWRlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICAvKlxuICAgICAgICBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMuY29sb3IuX2xvY2F0aW9uLCB3ZWJHTERhdGEuY29sb3IpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDIsIDApO1xuXG4gICAgICAgIC8vIG5vdyBkbyB0aGUgcmVzdC4uXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICovXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmFjdGl2YXRlUHJpbWl0aXZlU2hhZGVyKCk7XG4vLyAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnByaW1pdGl2ZVNoYWRlcjtcbiAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cblxuICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4vLyAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG5cbiAgICAgIC8qICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTFmKHNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEpO1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCA0LCBnbC5GTE9BVCwgZmFsc2UsNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTsqL1xuICAgIH1cbn07XG5cbi8qKlxuICogVE9ETyBAYWx2aW5cbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTdGVuY2lsID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wb3AoKTtcblxuICAgIHNtcy5jb3VudC0tO1xuXG4gICAgaWYgKHNtcy5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgLy8gdGhlIHN0YWNrIGlzIGVtcHR5IVxuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICAgICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuXG4gICAgICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSAobGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOVkVSVCk7XG5cbiAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50ICs9IDI7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAvLyAgY29uc29sZS5sb2coXCI8PD4+XCIpXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcblxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCksIDB4RkYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5LRUVQKTtcblxuXG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgbWFzayBzdGFjay5cbiAqXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjayA9IG51bGw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119IFRoZSBtYXNrIGRhdGEgc3RydWN0dXJlIHRvIHVzZVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgXG4gICAgLy9UT0RPIEZJWFxuICAgIGlmIChtYXNrRGF0YS5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy51cGRhdGVHcmFwaGljcyhtYXNrRGF0YSwgdGhpcy5yZW5kZXJlci5nbCk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119XG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuXG4gICAgdGhpcy5wb3BTdGVuY2lsKG1hc2tEYXRhLCBtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YVswXSk7XG59O1xuXG4iLCIvKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gV2ViR0xNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMucmVuZGVyZXIub24oJ2NvbnRleHQnLCB0aGlzLm9uQ29udGV4dENoYW5nZSwgdGhpcyk7XG59XG5cbldlYkdMTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFuYWdlcjtcblxuLyoqXG4gKiBHZW5lcmljIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXHQvLyBkbyBzb21lIGNvZGVzIGluaXQhXG59O1xuXG4vKipcbiAqIEdlbmVyaWMgZGVzdHJveSBtZXRob2RzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICovXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVuZGVyZXIub2ZmKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IGNvbXBsZXggcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBDb21wbGV4UHJpbWl0aXZlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gdmVjNChjb2xvciAqIGFscGhhICogdGludCwgYWxwaGEpOycsLy9cIiAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdGludDogICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwgMCwgMF0gfSxcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgY29sb3I6ICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwwLDBdIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYUNvbG9yOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCYXNlIHNoYWRlciBjbGFzcyBmb3IgUElYSSBtYW5hZ2VkIHNoYWRlcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFt1bmlmb3Jtc10ge29iamVjdH0gVW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxuICogQHBhcmFtIFthdHRyaWJ1dGVzXSB7b2JqZWN0fSBBdHRyaWJ1dGVzIGZvciB0aGlzIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKVxue1xuICAgIGlmICghdmVydGV4U3JjIHx8ICFmcmFnbWVudFNyYylcbiAgICB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpeGkuanMgRXJyb3IuIFNoYWRlciByZXF1aXJlcyB2ZXJ0ZXhTcmMgYW5kIGZyYWdtZW50U3JjJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmdsID0gc2hhZGVyTWFuYWdlci5yZW5kZXJlci5nbDtcblxuICAgIC8vVE9ETyBtYXliZSB3ZSBzaG91bGQgcGFzcyByZW5kZXJlciByYXRoZXIgdGhhbiBzaGFkZXIgbWFuZ2VyPz8gZm9vZCBmb3IgdGhvdWdodC4uXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyID0gc2hhZGVyTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBwcm9ncmFtLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xQcm9ncmFtfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF0dHJpYnV0ZXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRleHR1cmUgY291bnRlclxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYztcblxuICAgIHRoaXMuaW5pdCgpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc2hhZGVyIGFuZCB1c2VzIGl0XG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29tcGlsZSgpO1xuXG4gICAgdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLnVuaWZvcm1zKSk7XG4gICAgdGhpcy5jYWNoZUF0dHJpYnV0ZUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpKTtcbn07XG5cbi8qKlxuICogQ2FjaGVzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHVuaWZvcm0gZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSB1bmlmb3JtcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyA9IGZ1bmN0aW9uIChrZXlzKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMudW5pZm9ybXNba2V5c1tpXV0uX2xvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBrZXlzW2ldKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSBhdHRyaWJ1dGVzIHRvIGNhY2hlXG4gKi9cblNoYWRlci5wcm90b3R5cGUuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNba2V5c1tpXV0gPSB0aGlzLmdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4uLlxuXG4gICAgLy8gQmVnaW4gd29yc3QgaGFjayBldmEgLy9cblxuICAgIC8vIFdIWT8/PyBPTkxZIG9uIG15IGNocm9tZSBwaXhlbCB0aGUgbGluZSBhYm92ZSByZXR1cm5zIC0xIHdoZW4gdXNpbmcgZmlsdGVycz9cbiAgICAvLyBtYXliZSBpdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdsIGNvbnRleHQuXG4gICAgLy8gSSdtIGNvbnZpbmNlZCB0aGlzIGlzIGEgYnVnIGluIHRoZSBjaHJvbWUgYnJvd3NlciBhcyB0aGVyZSBpcyBOTyByZWFzb24gd2h5IHRoaXMgc2hvdWxkIGJlIHJldHVybmluZyAtMSBlc3BlY2lhbGx5IGFzIGl0IG9ubHkgbWFuaWZlc3RzIG9uIG15IGNocm9tZSBwaXhlbFxuICAgIC8vIElmIHRoZXJlcyBhbnkgd2ViR0wgcGVvcGxlIHRoYXQga25vdyB3aHkgY291bGQgaGFwcGVuIHBsZWFzZSBoZWxwIDopXG4gICAgLy8gaWYgKHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPT09IC0xKXtcbiAgICAvLyAgICAgdGhpcy5hdHRyaWJ1dGVzLmFDb2xvciA9IDI7XG4gICAgLy8gfVxuXG4gICAgLy8gRW5kIHdvcnN0IGhhY2sgZXZhIC8vXG59O1xuXG4vKipcbiAqIEF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZCBjcmVhdGVzIHRoZSBwcm9ncmFtLlxuICpcbiAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX1cbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIGdsVmVydFNoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5WRVJURVhfU0hBREVSLCB0aGlzLnZlcnRleFNyYyk7XG4gICAgdmFyIGdsRnJhZ1NoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuZnJhZ21lbnRTcmMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xGcmFnU2hhZGVyKTtcbiAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcblxuICAgIC8vIGlmIGxpbmtpbmcgZmFpbHMsIHRoZW4gbG9nIGFuZCBjbGVhbnVwXG4gICAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BpeGkuanMgRXJyb3I6IENvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlci4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuVkFMSURBVEVfU1RBVFVTJywgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuZ2V0RXJyb3IoKScsIGdsLmdldEVycm9yKCkpO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcHJvZ3JhbSBpbmZvIGxvZywgbG9nIGl0XG4gICAgICAgIGlmIChnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSAhPT0gJycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBXYXJuaW5nOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpJywgZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgcHJvZ3JhbSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgc29tZSBzaGFkZXJzXG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsVmVydFNoYWRlcik7XG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsRnJhZ1NoYWRlcik7XG5cbiAgICByZXR1cm4gKHRoaXMucHJvZ3JhbSA9IHByb2dyYW0pO1xufTtcblxuLyoqXG4qIEFkZHMgYSBuZXcgdW5pZm9ybVxuKlxuKiBAcGFyYW0gdW5pZm9ybSB7b2JqZWN0fSB0aGUgbmV3IHVuaWZvcm0gdG8gYXR0YWNoXG4qL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBsb2NhdGlvbiA9IHVuaWZvcm0uX2xvY2F0aW9uLFxuICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWUsXG4gICAgICAgIGdsID0gdGhpcy5nbCxcbiAgICAgICAgaSwgaWw7XG5cbiAgICBzd2l0Y2ggKHVuaWZvcm0udHlwZSlcbiAgICB7XG4gICAgICAgIGNhc2UgJ2InOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlID8gMSA6IDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGludCB2YWx1ZVxuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBzaW5nbGUgZmxvYXQgdmFsdWVcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDIpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoMykgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoNCkgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzRmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSAyRCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjInOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgM0QgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YzJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDREIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2NCc6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzFmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzRmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTInOlxuICAgICAgICBjYXNlICdtYXQyJzpcbiAgICAgICAgY2FzZSAnTWF0cml4MmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICBjYXNlICdtYXQzJzpcbiAgICAgICAgY2FzZSAnTWF0cml4M2Z2JzpcblxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICdtNCc6XG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICBjYXNlICdNYXRyaXg0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgQ29sb3IgVmFsdWVcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGludGVnZXJzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIChKUyBvciB0eXBlZCBhcnJheSlcbiAgICAgICAgY2FzZSAnZnYxJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDJEIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjJ2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDIgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDJdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMiArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAzRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yzdic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgzICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMyArIDJdICAgPSB2YWx1ZVtpXS56O1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHVuaWZvcm0uX2FycmF5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDREIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjR2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDRdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgMl0gICA9IHZhbHVlW2ldLno7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAzXSAgID0gdmFsdWVbaV0udztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBQSVhJLlRleHR1cmVcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgIGNhc2UgJ3NhbXBsZXIyRCc6XG5cbiAgICAgICAgICAgIGlmICghdW5pZm9ybS52YWx1ZSB8fCAhdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFjdGl2YXRlIHRoaXMgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0aGlzLnRleHR1cmVDb3VudF0pO1xuXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgICAgICAgICBpZiAoIXRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2FtcGxlcjJEKHVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSB0ZXh0dXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb25lLi5cbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gICAgICAgICAgICAvLyBzZXQgdW5pZm9ybSB0byB0ZXh0dXJlIGluZGV4XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkodW5pZm9ybS5fbG9jYXRpb24sIHRoaXMudGV4dHVyZUNvdW50KTtcblxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IG5leHQgdGV4dHVyZSBpZFxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBTaGFkZXIgV2FybmluZzogVW5rbm93biB1bmlmb3JtIHR5cGU6ICcgKyB1bmlmb3JtLnR5cGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnVuaWZvcm1zKVxuICAgIHtcbiAgICAgICAgdGhpcy5zeW5jVW5pZm9ybSh0aGlzLnVuaWZvcm1zW2tleV0pO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJbml0aWFsaXNlcyBhIFNhbXBsZXIyRCB1bmlmb3JtICh3aGljaCBtYXkgb25seSBiZSBhdmFpbGFibGUgbGF0ZXIgb24gYWZ0ZXIgaW5pdFVuaWZvcm1zIG9uY2UgdGhlIHRleHR1cmUgaGFzIGxvYWRlZClcbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuaW5pdFNhbXBsZXIyRCA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGlmICh1bmlmb3JtLnRleHR1cmVEYXRhKVxuICAgIHtcblxuICAgICAgICAvL1RPRE8gbW92ZSB0aGlzLi4uXG4gICAgICAgIHZhciBkYXRhID0gdW5pZm9ybS50ZXh0dXJlRGF0YTtcblxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG5cbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGxpZWRBbHBoYSk7XG4gICAgICAgIC8vIEdMVGV4dHVyZSA9IG1hZyBsaW5lYXIsIG1pbiBsaW5lYXJfbWlwbWFwX2xpbmVhciwgd3JhcCByZXBlYXQgKyBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgLy8gR0xUZXh0dXJlTGluZWFyID0gbWFnL21pbiBsaW5lYXIsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdFJlcGVhdCA9IG1hZy9taW4gTkVBUkVTVCwgd3JhcCByZXBlYXRcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdCA9IG1hZy9taW4gbmVhcmVzdCwgd3JhcCBjbGFtcFxuICAgICAgICAvLyBBdWRpb1RleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDUxMiwgaGVpZ2h0IDIsIGJvcmRlciAwXG4gICAgICAgIC8vIEtleVRleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDI1NiwgaGVpZ2h0IDIsIGJvcmRlciAwXG5cbiAgICAgICAgLy8gIG1hZ0ZpbHRlciBjYW4gYmU6IGdsLkxJTkVBUiwgZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgb3IgZ2wuTkVBUkVTVFxuICAgICAgICAvLyAgd3JhcFMvVCBjYW4gYmU6IGdsLkNMQU1QX1RPX0VER0Ugb3IgZ2wuUkVQRUFUXG5cbiAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBkYXRhLmx1bWluYW5jZSA/IGdsLkxVTUlOQU5DRSA6IGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRleHR1cmUuc291cmNlKTtcblxuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZGF0YS5tYWdGaWx0ZXIgPyBkYXRhLm1hZ0ZpbHRlciA6IGdsLkxJTkVBUiApO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFICk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZGF0YS53cmFwVCA/IGRhdGEud3JhcFQgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5zaGFkZXJNYW5hZ2VyLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgc2hhZGVyLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmdsLmRlbGV0ZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgIHRoaXMudW5pZm9ybXMgPSBudWxsO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleFNyYyA9IG51bGw7XG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IG51bGw7XG59O1xuXG5TaGFkZXIucHJvdG90eXBlLl9nbENvbXBpbGUgPSBmdW5jdGlvbiAodHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIHRoaXMuZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc3JjKTtcbiAgICB0aGlzLmdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghdGhpcy5nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCB0aGlzLmdsLkNPTVBJTEVfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIGN1c3RvbVVuaWZvcm1zLCBjdXN0b21BdHRyaWJ1dGVzKVxue1xuICAgIHZhciB1bmlmb3JtcyA9IHtcblxuICAgICAgICB1U2FtcGxlcjogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiAwIH0sXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6ICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDFdKSB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21Vbmlmb3JtcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIHUgaW4gY3VzdG9tVW5pZm9ybXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVuaWZvcm1zW3VdID0gY3VzdG9tVW5pZm9ybXNbdV07XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBhVmVydGV4UG9zaXRpb246ICAgIDAsXG4gICAgICAgIGFUZXh0dXJlQ29vcmQ6ICAgICAgMCxcbiAgICAgICAgYUNvbG9yOiAgICAgICAgICAgICAwXG4gICAgfTtcblxuICAgIGlmIChjdXN0b21BdHRyaWJ1dGVzKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgYSBpbiBjdXN0b21BdHRyaWJ1dGVzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2FdID0gY3VzdG9tQXR0cmlidXRlc1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IHZlcnRleFNyYyB8fCBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcyk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKGdsKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IFRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgZnJhZ21lbnRTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYztcblxuICAgIFNoYWRlci5jYWxsKHRoaXMsIGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTsvLywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xuXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuLi9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBCYXNlIGZvciBhIGNvbW1vbiBvYmplY3QgcmVuZGVyZXIgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHN5c3RlbSByZW5kZXJlciBwbHVnaW4uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBPYmplY3RSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59XG5cblxuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9iamVjdFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RSZW5kZXJlcjtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHJlbmRlcmVyIGFuZCBzZXRzIHRoZSBzaGFkZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gc2V0IHRoZSBzaGFkZXIuLlxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgcmVuZGVyZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIGZsdXNoZXNcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gZmx1c2ghXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyByZW5kZXIgdGhlIG9iamVjdFxufTtcbiIsIi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHF1YWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gVGhlIGdsIGNvbnRleHQgZm9yIHRoaXMgcXVhZCB0byB1c2UuXG4gKi9cbmZ1bmN0aW9uIFF1YWQoZ2wpXG57XG4gICAgLypcbiAgICAgKiB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbi8vICAgIHRoaXMudGV4dHVyZXMgPSBuZXcgVGV4dHVyZVV2cygpO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMjAwLDAsXG4gICAgICAgIDIwMCwyMDAsXG4gICAgICAgIDAsMjAwXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBxdWFkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KFtcbiAgICAgICAgMCwwLFxuICAgICAgICAxLDAsXG4gICAgICAgIDEsMSxcbiAgICAgICAgMCwxXG4gICAgXSk7XG5cbi8vICAgIHZhciB3aGl0ZSA9ICgweEZGRkZGRiA+PiAxNikgKyAoMHhGRkZGRkYgJiAweGZmMDApICsgKCgweEZGRkZGRiAmIDB4ZmYpIDw8IDE2KSArICgxICogMjU1IDw8IDI0KTtcbiAgICAvL1RPRE8gY29udmVydCB0aGlzIHRvIGEgMzIgdW5zaWduZWQgaW50IGFycmF5XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIGNvbXBvbmVudHMgb2YgdGhlIHRyaWFuZ2xlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDFcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KFtcbiAgICAgICAgMCwgMSwgMiwgMCwgMywgMlxuICAgIF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIHZlcnRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICg4ICsgOCArIDE2KSAqIDQsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59XG5cblF1YWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUXVhZDtcblxuLyoqXG4gKiBNYXBzIHR3byBSZWN0YW5nbGUgdG8gdGhlIHF1YWRcbiAqIEBwYXJhbSByZWN0IHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZpcnN0IHJlY3RhbmdsZVxuICogQHBhcmFtIHJlY3QyIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHNlY29uZCByZWN0YW5nbGVcbiAqL1xuUXVhZC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24ocmVjdCwgcmVjdDIpXG57XG4gICAgdmFyIHggPSAwOyAvL3JlY3QyLnggLyByZWN0LndpZHRoO1xuICAgIHZhciB5ID0gMDsgLy9yZWN0Mi55IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1swXSA9IHg7XG4gICAgdGhpcy51dnNbMV0gPSB5O1xuXG4gICAgdGhpcy51dnNbMl0gPSB4ICsgcmVjdDIud2lkdGggLyByZWN0LndpZHRoO1xuICAgIHRoaXMudXZzWzNdID0geTtcblxuICAgIHRoaXMudXZzWzRdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIHRoaXMudXZzWzZdID0geDtcbiAgICB0aGlzLnV2c1s3XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIC8vLyAtLS0tLVxuICAgIHggPSByZWN0Mi54O1xuICAgIHkgPSByZWN0Mi55O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1swXSA9IHg7XG4gICAgdGhpcy52ZXJ0aWNlc1sxXSA9IHk7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzJdID0geCArIHJlY3QyLndpZHRoO1xuICAgIHRoaXMudmVydGljZXNbM10gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1s0XSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzVdID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudmVydGljZXNbNl0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0O1xuXG4gICAgdGhpcy51cGxvYWQoKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlciBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5RdWFkLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIFRPRE8gY291bGQgcHJvYmFibHkgYmUgcHVzaGVkIGludG8gb25lIHVwbG9hZCFcbiAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHRoaXMudmVydGV4QnVmZmVyICk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy52ZXJ0aWNlcyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgOCAqIDQsIHRoaXMudXZzKTtcblxuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDgpICogNCwgdGhpcy5jb2xvcnMpO1xufTtcblxuUXVhZC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWQ7XG5cblxuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKSxcbiAgICAgICAgXG4gICAgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuICAgIEdMRnJhbWVidWZmZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTEZyYW1lYnVmZmVyLFxuICAgIFxuICAgIFN0ZW5jaWxNYXNrU3RhY2sgPSByZXF1aXJlKCcuL1N0ZW5jaWxNYXNrU3RhY2snKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqL1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgaG9yaXpvbnRhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSB2ZXJ0aWNhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICogQHBhcmFtIHJvb3Qge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAqL1xudmFyIFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24sIHJvb3QpXG57XG4gICAgLy9UT0RPIFJlc29sdXRpb24gY291bGQgZ28gaGVyZSAoIGVnIGxvdyByZXMgYmx1cnMgKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vIG5leHQgdGltZSB0byBjcmVhdGUgYSBmcmFtZSBidWZmZXIgYW5kIHRleHR1cmVcblxuICAgIC8qKlxuICAgICAqIEEgZnJhbWUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEZyYW1lQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuXG4gICAgdGhpcy5jbGVhckNvbG9yID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIG9iamVjdCBhcyBhIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2JqZWN0J3MgdHJhbnNmb3JtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk1hdHJpeH1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lID0gbnVsbDtcbiAgICBcbiAgICB0aGlzLmRlZmF1bHRGcmFtZSA9IG5ldyBQSVhJLlJlY3RhbmdsZSgpO1xuICAgIHRoaXMuZGVzdGluYXRpb25GcmFtZSA9IG51bGw7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgc3RvcmVzIG1hc2tpbmcgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbEJ1ZmZlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzdGVuY2lsIG1hc2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gbmV3IFN0ZW5jaWxNYXNrU3RhY2soKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyBmaWx0ZXIgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDp0aGlzLFxuICAgICAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICAgICAgYm91bmRzOnRoaXMuc2l6ZVxuICAgICAgICB9XG4gICAgXTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEEgZnJhbWUgYnVmZmVyIG5lZWRzIGEgdGFyZ2V0IHRvIHJlbmRlciB0by4uXG4gICAgICAgICAgICBjcmVhdGUgYSB0ZXh0dXJlIGFuZCBiaW5kIGl0IGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAgICAgKi9cbiAgICAgICAgXG5cbiAgICAgICAvLyBUT0RPIGNoYW5nZSFcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGJ5IHRoZSBiYXNlIHRleHR1cmVcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGhpcy5mcmFtZUJ1ZmZlci50ZXh0dXJlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBtYWtlIGl0IGEgbnVsbCBmcmFtZWJ1ZmZlci4uXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZnJhbWVidWZmZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xufTtcblxuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRhcmdldDtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGFyZ2V0O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZmlsdGVyIHRleHR1cmUuXG4gKlxuICogQHBhcmFtIFtiaW5kPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIHdlIGJpbmQgb3VyIGZyYW1lYnVmZmVyIGJlZm9yZSBjbGVhcmluZz9cbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGNsZWFyQ29sb3IpXG57XG4gICAgdmFyIGNjID0gY2xlYXJDb2xvciB8fCB0aGlzLmNsZWFyQ29sb3JcbiAgICB0aGlzLmZyYW1lQnVmZmVyLmNsZWFyKGNjWzBdLGNjWzFdLGNjWzJdLGNjWzNdKS8vcixnLGIsYSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuYXR0YWNoU3RlbmNpbEJ1ZmZlciA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPRE8gY2hlY2sgaWYgc3RlbmNpbCBpcyBkb25lP1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBpcyB1c2VkIGZvciBtYXNraW5nIGluIHBpeGlcbiAgICAgKiBsZXRzIGNyZWF0ZSBvbmUgYW5kIHRoZW4gYWRkIGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVTdGVuY2lsKCk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCBpbml0aWFsaXNlcyB0aGUgdmlld3BvcnQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oZGVzdGluYXRpb25GcmFtZSwgc291cmNlRnJhbWUpXG57XG4gICAgLy9UT09EIHJlZmFjdG9yIHVzYWdlIG9mIGZyYW1lLi5cbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5iaW5kKCk7XG5cbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBkZXN0aW5hdGlvbkZyYW1lIHx8IHRoaXMuZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlZmF1bHRGcmFtZTtcbiAgICB0aGlzLnNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgdGhpcy5zb3VyY2VGcmFtZSB8fCBkZXN0aW5hdGlvbkZyYW1lO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUsIHRoaXMuc291cmNlRnJhbWUgKTtcblxuICAgIGlmKHRoaXMudHJhbnNmb3JtKVxuICAgIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFwcGVuZCh0aGlzLnRyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5kZXN0aW5hdGlvbkZyYW1lICE9PSB0aGlzLnNvdXJjZUZyYW1lKVxuICAgIHtcbiAgICAgICAgZ2wuZW5hYmxlKGdsLlNDSVNTT1JfVEVTVCk7XG4gICAgICAgIGdsLnNjaXNzb3IodGhpcy5kZXN0aW5hdGlvbkZyYW1lLngsIHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGgqIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgIH1cblxuXG4gICAgLy8gVE9ETyAtIGRvZXMgbm90IG5lZWQgdG8gYmUgdXBkYXRlZCBhbGwgdGhlIHRpbWU/P1xuICAgIGdsLnZpZXdwb3J0KHRoaXMuZGVzdGluYXRpb25GcmFtZS54LHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuXG5cbn07XG5cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBwcm9qZWN0aW9uIG1hdHJpeCBiYXNlZCBvbiBhIHByb2plY3Rpb24gZnJhbWUgKHdoaWNoIGlzIGEgcmVjdGFuZ2xlKVxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jYWxjdWxhdGVQcm9qZWN0aW9uID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcblxuICAgIHNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHBtLmlkZW50aXR5KCk7XG5cbiAgICAvLyBUT0RPOiBtYWtlIGRlc3Qgc2NhbGUgc291cmNlXG4gICAgaWYgKCF0aGlzLnJvb3QpXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBzb3VyY2VGcmFtZS54ICogcG0uYTtcbiAgICAgICAgcG0udHkgPSAtMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IC0xIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBSZXNpemVzIHRoZSB0ZXh0dXJlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7TnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gaGVpZ2h0IHtOdW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgd2lkdGggPSB3aWR0aCB8IDA7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDtcblxuICAgIGlmICh0aGlzLnNpemUud2lkdGggPT09IHdpZHRoICYmIHRoaXMuc2l6ZS5oZWlnaHQgPT09IGhlaWdodCkgXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZGVmYXVsdEZyYW1lLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5kZWZhdWx0RnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5yZXNpemUod2lkdGggKiB0aGlzLnJlc29sdXRpb24sIGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCBwcm9qZWN0aW9uRnJhbWUgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHJlbmRlciB0YXJnZXQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFN0ZW5jaWxNYXNrU3RhY2soKVxue1xuXHQvKipcbiAgICAgKiBUaGUgYWN0dWFsIHN0YWNrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVE9ETyBAYWx2aW5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvdW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb3VudCA9IDA7XG59XG5cblN0ZW5jaWxNYXNrU3RhY2sucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RlbmNpbE1hc2tTdGFjaztcbm1vZHVsZS5leHBvcnRzID0gU3RlbmNpbE1hc2tTdGFjaztcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBNYXBzIGdsIGJsZW5kIGNvbWJpbmF0aW9ucyB0byBXZWJHTFxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcbiAgICBvYmplY3QgPSBvYmplY3QgfHwge307XG5cbiAgICAvL1RPRE8gLSBwcmVtdWx0aXBseSBhbHBoYSB3b3VsZCBiZSBkaWZmZXJlbnQuXG4gICAgLy9hZGQgYSBib29sZWFuIGZvciB0aGF0IVxuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdICAgICAgICA9IFtnbC5PTkUsICAgICAgIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLkRTVF9BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk1VTFRJUExZXSAgICAgID0gW2dsLkRTVF9DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gW2dsLlNSQ19BTFBIQSwgZ2wuT05FXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VdICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSFVFXSAgICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcblxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpO1xuIiwiQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbCwgb2JqZWN0KVxue1xuXHRvYmplY3Q9IG9iamVjdCB8fCB7fTtcblxuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlBPSU5UU10gICAgICAgICA9IGdsLlBPSU5UUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FU10gICAgICAgICAgPSBnbC5MSU5FUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FX0xPT1BdICAgICAgPSBnbC5MSU5FX0xPT1A7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9TVFJJUF0gICAgID0gZ2wuTElORV9TVFJJUDtcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5UUklBTkdMRVNdICAgICAgPSBnbC5UUklBTkdMRVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBdID0gZ2wuVFJJQU5HTEVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXSAgID0gZ2wuVFJJQU5HTEVfRkFOO1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGk7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIFNwcml0ZSBvYmplY3QgaXMgdGhlIGJhc2UgZm9yIGFsbCB0ZXh0dXJlZCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIHRvIHRoZSBzY3JlZW5cbiAqXG4gKiBBIHNwcml0ZSBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGFuIGltYWdlIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSBmb3IgdGhpcyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gU3ByaXRlKHRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW5jaG9yIHNldHMgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLDAgdGhpcyBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMC41LDAuNSBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyBjZW50ZXJlZFxuICAgICAqIFNldHRpbmcgdGhlIGFuY2hvciB0byAxLDEgd291bGQgbWVhbiB0aGUgdGV4dHVyZSdzIG9yaWdpbiBwb2ludCB3aWxsIGJlIHRoZSBib3R0b20gcmlnaHQgY29ybmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuYW5jaG9yID0gbmV3IG1hdGguUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgc3ByaXRlICh0aGlzIGlzIGluaXRpYWxseSBzZXQgYnkgdGhlIHRleHR1cmUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBIHZhbHVlIG9mIDB4RkZGRkZGIHdpbGwgcmVtb3ZlIGFueSB0aW50IGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaGFkZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBzcHJpdGUuIFNldCB0byBudWxsIHRvIHJlbW92ZSBhIGN1cnJlbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5BYnN0cmFjdEZpbHRlcnxQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBjYWNoZWQgdmFsdWUgb2YgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8vIGNhbGwgdGV4dHVyZSBzZXR0ZXJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG4gICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlXG4gICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy52ZXJ0ZXhEYXRhID0gbmV3IEZsb2F0MzJBcnJheSg4KTtcbn1cblxuLy8gY29uc3RydWN0b3JcblNwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuc2NhbGUueCkgKiB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBNYXRoLmFicyh0aGlzLnNjYWxlLnkpICogdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc2lnbiA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS55KSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gc2lnbiAqIHZhbHVlIC8gdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5TcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIHNvIGlmIF93aWR0aCBpcyAwIHRoZW4gd2lkdGggd2FzIG5vdCBzZXQuLlxuICAgIGlmICh0aGlzLl93aWR0aClcbiAgICB7XG4gICAgICAgIHRoaXMuc2NhbGUueCA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS54KSAqIHRoaXMuX3dpZHRoIC8gdGhpcy50ZXh0dXJlLmZyYW1lLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnkgPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgKiB0aGlzLl9oZWlnaHQgLyB0aGlzLnRleHR1cmUuZnJhbWUuaGVpZ2h0O1xuICAgIH1cbn07XG5cblNwcml0ZS5wcm90b3R5cGUuY2FjbHVsYXRlVmVydGljZXMgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICB3dCA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICBhID0gd3QuYSwgYiA9IHd0LmIsIGMgPSB3dC5jLCBkID0gd3QuZCwgdHggPSB3dC50eCwgdHkgPSB3dC50eSxcbiAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDEsXG4gICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG4gICAgICAgIFxuICAgIGlmICh0cmltKVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkIGFuZCBpcyBub3QgYSB0aWxpbmdzcHJpdGUgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgIHcxID0gdHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgaDEgPSB0cmltLnkgLSB0aGlzLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgIGgwID0gaDEgKyB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG4gICAgfVxuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzBdID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVsxXSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzJdID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVszXSA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs0XSA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbNV0gPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs2XSA9IGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbN10gPSBkICogaDAgKyBiICogdzEgKyB0eTtcblxuXG59XG5cbi8qKlxuKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMudGV4dHVyZURpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMudmVydGV4RGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICB9XG4gICAgXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBTcHJpdGUgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgc3ByaXRlXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG4gICAgICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudmVydGV4RGlydHkgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWluWCxcbiAgICAgICAgICAgIG1heFgsXG4gICAgICAgICAgICBtaW5ZLFxuICAgICAgICAgICAgbWF4WSxcbiAgICAgICAgICAgIHZlcnRleERhdGEgPSB0aGlzLnZlcnRleERhdGE7XG5cbiAgICAgICAgdmFyIHgxID0gdmVydGV4RGF0YVswXVxuICAgICAgICB2YXIgeTEgPSB2ZXJ0ZXhEYXRhWzFdXG5cbiAgICAgICAgdmFyIHgyID0gdmVydGV4RGF0YVsyXVxuICAgICAgICB2YXIgeTIgPSB2ZXJ0ZXhEYXRhWzNdXG5cbiAgICAgICAgdmFyIHgzID0gdmVydGV4RGF0YVs0XVxuICAgICAgICB2YXIgeTMgPSB2ZXJ0ZXhEYXRhWzVdXG5cbiAgICAgICAgdmFyIHg0ID0gdmVydGV4RGF0YVs2XVxuICAgICAgICB2YXIgeTQgPSB2ZXJ0ZXhEYXRhWzddXG5cbiAgICAgICAgbWluWCA9IHgxO1xuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MTtcbiAgICAgICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICAgICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICAgICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgICAgICBtYXhYID0geDE7XG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkxO1xuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIC8vIGNoZWNrIGZvciBjaGlsZHJlblxuICAgICAgICBpZih0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkQm91bmRzID0gdGhpcy5jb250YWluZXJHZXRCb3VuZHMoKTtcblxuICAgICAgICAgICAgdzAgPSBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgdzEgPSBjaGlsZEJvdW5kcy54ICsgY2hpbGRCb3VuZHMud2lkdGg7XG4gICAgICAgICAgICBoMCA9IGNoaWxkQm91bmRzLnk7XG4gICAgICAgICAgICBoMSA9IGNoaWxkQm91bmRzLnkgKyBjaGlsZEJvdW5kcy5oZWlnaHQ7XG5cbiAgICAgICAgICAgIG1pblggPSAobWluWCA8IHcwKSA/IG1pblggOiB3MDtcbiAgICAgICAgICAgIG1pblkgPSAobWluWSA8IGgwKSA/IG1pblkgOiBoMDtcblxuICAgICAgICAgICAgbWF4WCA9IChtYXhYID4gdzEpID8gbWF4WCA6IHcxO1xuICAgICAgICAgICAgbWF4WSA9IChtYXhZID4gaDEpID8gbWF4WSA6IGgxO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2JvdW5kcy54ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB0aGlzLl9ib3VuZHMueSA9IC10aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRoaXMuX2JvdW5kcy5oZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgcmV0dXJuIHRoaXMuX2JvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHNwcml0ZVxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5TcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy50ZXh0dXJlLmNyb3Aud2lkdGggPD0gMCB8fCB0aGlzLnRleHR1cmUuY3JvcC5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyAgSWdub3JlIG51bGwgc291cmNlc1xuICAgIGlmICh0aGlzLnRleHR1cmUudmFsaWQpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgICAgICB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgICAgICBkeCxcbiAgICAgICAgICAgIGR5LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ7XG5cbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgICAgICAvLyBJZiBzbW9vdGhpbmdFbmFibGVkIGlzIHN1cHBvcnRlZCBhbmQgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIHNtb290aGluZyBwcm9wZXJ0eSBmb3IgdGhpcyB0ZXh0dXJlXG4gICAgICAgIHZhciBzbW9vdGhpbmdFbmFibGVkID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5zY2FsZU1vZGUgPT09IENPTlNULlNDQUxFX01PREVTLkxJTkVBUjtcbiAgICAgICAgaWYgKHJlbmRlcmVyLnNtb290aFByb3BlcnR5ICYmIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldICE9PSBzbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0W3JlbmRlcmVyLnNtb290aFByb3BlcnR5XSA9IHNtb290aGluZ0VuYWJsZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgdGV4dHVyZSBpcyB0cmltbWVkIHdlIG9mZnNldCBieSB0aGUgdHJpbSB4L3ksIG90aGVyd2lzZSB3ZSB1c2UgdGhlIGZyYW1lIGRpbWVuc2lvbnNcblxuICAgICAgICBpZih0ZXh0dXJlLnJvdGF0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2lkdGggPSB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBkeCA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgXG4gICAgICAgICAgICBkeCArPSB3aWR0aDtcblxuICAgICAgICAgICAgd3QudHggPSBkeSAqIHd0LmEgKyBkeCAqIHd0LmMgKyB3dC50eDtcbiAgICAgICAgICAgIHd0LnR5ID0gZHkgKiB3dC5iICsgZHggKiB3dC5kICsgd3QudHk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gd3QuYTtcbiAgICAgICAgICAgIHd0LmEgID0gLXd0LmM7XG4gICAgICAgICAgICB3dC5jICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICB0ZW1wID0gd3QuYjtcbiAgICAgICAgICAgIHd0LmIgID0gLXd0LmQ7XG4gICAgICAgICAgICB3dC5kICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICAvLyB0aGUgYW5jaG9yIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCBhYm92ZSwgc28gbGV0cyBzZXQgaXQgdG8gemVyb1xuICAgICAgICAgICAgZHggPSAwO1xuICAgICAgICAgICAgZHkgPSAwO1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC53aWR0aDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0ZXh0dXJlLnRyaW0ud2lkdGggOiB0aGlzLmFuY2hvci54ICogLXRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRleHR1cmUudHJpbS5oZWlnaHQgOiB0aGlzLmFuY2hvci55ICogLXRleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfVxuXG5cblxuICAgICAgICAvLyBBbGxvdyBmb3IgcGl4ZWwgcm91bmRpbmdcbiAgICAgICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB3dC5hLFxuICAgICAgICAgICAgICAgIHd0LmIsXG4gICAgICAgICAgICAgICAgd3QuYyxcbiAgICAgICAgICAgICAgICB3dC5kLFxuICAgICAgICAgICAgICAgICh3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMCxcbiAgICAgICAgICAgICAgICAod3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uKSB8IDBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGR4ID0gZHggfCAwO1xuICAgICAgICAgICAgZHkgPSBkeSB8IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgd3QudHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHd0LnR5ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcblxuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIC8vIFRPRE8gY2xlYW4gdXAgY2FjaGluZyAtIGhvdyB0byBjbGVhbiB1cCB0aGUgY2FjaGVzP1xuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC54ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmNyb3AueSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeSAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHNwcml0ZSBhbmQgb3B0aW9uYWxseSBpdHMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBbZGVzdHJveVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgY3VycmVudCB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICovXG5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveVRleHR1cmUsIGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYW5jaG9yID0gbnVsbDtcblxuICAgIGlmIChkZXN0cm95VGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUuZGVzdHJveShkZXN0cm95QmFzZVRleHR1cmUpO1xuICAgIH1cblxuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn07XG5cbi8vIHNvbWUgaGVscGVyIGZ1bmN0aW9ucy4uXG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgY3Jvc3Mtb3JpZ2luIHBhcmFtZXRlclxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBzY2FsZSBtb2RlLCBzZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGZyYW1lSWRcbiAqL1xuU3ByaXRlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTcHJpdGUodGV4dHVyZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGJhc2VkIG9uIGFuIGltYWdlIHVybFxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZUlkIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblNwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFNwcml0ZShUZXh0dXJlLmZyb21JbWFnZShpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSk7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyJyksXG4gICAgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzJyksXG4gICAgZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIGdsQ29yZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFNwcml0ZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9TcHJpdGVSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKiBSZW5kZXJlciBkZWRpY2F0ZWQgdG8gZHJhd2luZyBhbmQgYmF0Y2hpbmcgc3ByaXRlcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZVJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIHZhbHVlcyBzZW50IGluIHRoZSB2ZXJ0ZXggYnVmZmVyLlxuICAgICAqIHBvc2l0aW9uWCwgcG9zaXRpb25ZLCBjb2xvclIsIGNvbG9yRywgY29sb3JCID0gNVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydFNpemUgPSA1O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIHZlcnRleCBpbmZvcm1hdGlvbiBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBpbWFnZXMgaW4gdGhlIFNwcml0ZUJhdGNoIGJlZm9yZSBpdCBmbHVzaGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IENPTlNULlNQUklURV9CQVRDSF9TSVpFOyAvLyAyMDAwIGlzIGEgbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIC8gZGVza3RvcFxuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBpbiBvdXIgYmF0Y2hcbiAgICB2YXIgbnVtVmVydHMgPSAodGhpcy5zaXplICogNCkgKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYmF0Y2gsIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgICB2YXIgbnVtSW5kaWNlcyA9IHRoaXMuc2l6ZSAqIDY7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgdmVydGV4IGRhdGEgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdGhlIHZlcnRleCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEFycmF5QnVmZmVyKG51bVZlcnRzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgRmxvYXQzMkFycmF5IGZvciBwb3NpdGlvbnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG4gICAgXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBVaW50MzJBcnJheSBmb3IgdXZzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciBjb2xvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXMgb2YgdGhlIGdlb21ldHJ5IChxdWFkcykgdG8gZHJhd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzKHRoaXMuc2l6ZSlcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICBcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIHRoaXMuZ3JvdXBzID0gW107XG4gICAgXG4gICAgLy9UT0RPIC0gMzAwIGlzIGEgYml0IG1hZ2ljLCBmaWd1cmUgb3V0IGEgbmljZXIgYW1vdW50IVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zaXplOyBpKyspIFxuICAgIHtcbiAgICAgICAgdGhpcy5ncm91cHNbaV0gPSB7dGV4dHVyZXM6W10sIHRleHR1cmVDb3VudDowLCBpZHM6W10sIHNpemU6MCwgc3RhcnQ6MCwgYmxlbmQ6MH07IFxuICAgIH07XG4gICAgXG4gICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG5cbiAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbnVsbDsgICAgXG59XG5cblxuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ByaXRlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZVJlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdzcHJpdGUnLCBTcHJpdGVSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMuTUFYX1RFWFRVRVMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpO1xuXG4gICAgdGhpcy5fc2hhZGVyID0gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIoZ2wsIHRoaXMuTUFYX1RFWFRVRVMpLy9uZXcgVGV4dHVyZVNoYWRlcihnbCk7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXI7XG5cbiAgICAvLyBjcmVhdGUgYSBjb3VwbGUgb2YgYnVmZmVyc1xuICAgIHRoaXMudmVydGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlcihnbCwgbnVsbCwgZ2wuRFlOQU1JQ19EUkFXKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyKGdsLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIC8vIGJ1aWxkIHRoZSB2YW8gb2JqZWN0IHRoYXQgd2lsbCByZW5kZXIuLlxuICAgIHRoaXMudmFvID0gbmV3IGdsQ29yZS5WZXJ0ZXhBcnJheU9iamVjdChnbCk7XG5cbiAgICB0aGlzLnZhby5hZGRJbmRleCh0aGlzLmluZGV4QnVmZmVyKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCBnbC5VTlNJR05FRF9TSE9SVCwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDIgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgZ2wuVU5TSUdORURfQllURSwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDMgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlSWQsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDQgKiA0KTtcblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IDk5OTk5O1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHJlbmRlciB3aGVuIHVzaW5nIHRoaXMgc3ByaXRlYmF0Y2hcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChzcHJpdGUpXG57XG4gICAgLy9UT0RPIHNldCBibGVuZCBtb2Rlcy4uXG4gICAgLy8gY2hlY2sgdGV4dHVyZS4uXG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID49IHRoaXMuc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICB9XG5cbiAgXG4gICAgLy8gZ2V0IHRoZSB1dnMgZm9yIHRoZSB0ZXh0dXJlXG4gICBcblxuICAgIC8vIGlmIHRoZSB1dnMgaGF2ZSBub3QgdXBkYXRlZCB0aGVuIG5vIHBvaW50IHJlbmRlcmluZyBqdXN0IHlldCFcbiAgICBpZiAoIXNwcml0ZS50ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgIC8vIHB1c2ggYSB0ZXh0dXJlLlxuICAgIC8vIGluY3JlbWVudCB0aGUgYmF0Y2hzaXplXG4gICAgdmFyIG5leHRUZXh0dXJlID0gIHNwcml0ZS50ZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIHZhciBjdXJyZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRHcm91cDtcbiAgICB2YXIgaTtcblxuICAgIGlmKHRoaXMuY3VycmVudFRleHR1cmUgIT09IG5leHRUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG5leHRUZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgaWYoIW5leHRUZXh0dXJlLl9lbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5fZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5faWQgPSB0aGlzLnRleHR1cmVDb3VudDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy50ZXh0dXJlQ291bnQgPT09IHRoaXMuTUFYX1RFWFRVRVMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50OyBpKyspIFxuICAgICAgICAgICAgICAgIHsgICAgIFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnNpemUgPSB0aGlzLmN1cnJlbnRJbmRleCAtIGN1cnJlbnRHcm91cC5zdGFydDtcbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC5zdGFydCA9IHRoaXMuY3VycmVudEluZGV4O1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCsrXSA9IG5leHRUZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcbiAgICB9XG5cbiAgICAvLyBUT0RPIHRyaW0/P1xuICAgIHZhciBpbmRleCA9IHRoaXMuY3VycmVudEluZGV4ICogdGhpcy52ZXJ0Qnl0ZVNpemU7XG5cbiAgICB0aGlzLmN1cnJlbnRJbmRleCsrO1xuXG4gICAgLy8gdXBsb2FkIHRoZSBzcHJpdGUgZWxlbWV0bnMuLi5cbiAgICAvLyB0aGV5IGhhdmUgYWxsIHJlYWR5IGJlZW4gY2FsY3VsYXRlZCBzbyB3ZSBqdXN0IG5lZWQgdG8gcHVzaCB0aGVtIGludG8gdGhlIGJ1ZmZlci5cbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG4gICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMucG9zaXRpb25zO1xuICAgIHZhciB2ZXJ0ZXhEYXRhID0gc3ByaXRlLnZlcnRleERhdGFcbiAgICB2YXIgdGludCA9IChzcHJpdGUudGludCA+PiAxNikgKyAoc3ByaXRlLnRpbnQgJiAweGZmMDApICsgKChzcHJpdGUudGludCAmIDB4ZmYpIDw8IDE2KSArIChzcHJpdGUud29ybGRBbHBoYSAqIDI1NSA8PCAyNCk7XG4gICAgdmFyIHV2cyA9IHNwcml0ZS50ZXh0dXJlLl91dnMudXZzX3VpbnQzMjtcbiAgICAvL3h5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVswXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzFdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzBdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkOyBcbiAgICBcbiAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMl07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVszXTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1sxXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNF07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs1XTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1syXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs2XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzddO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzNdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb250ZW50IGFuZCBlbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPT09IDApcmV0dXJuO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gdGhpcy5jdXJyZW50R3JvdXAuc3RhcnQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgeyAgICAgXG4gICAgICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVzW2ldLl9lbmFibGVkID0gZmFsc2U7XG4gICAgfTtcbiAgIFxuICAgIC8vIGRvIHNvbWUgc21hcnQgYXJyYXkgc3R1ZmYuLlxuICAgIC8vIGRvdWJsZSBzaXplIHNvIHdlIGRvbnQgYWx3YXkgc3ViYXJyYXkgdGhlIGVsZW1lbnRzLi5cbiAgICAvLyB1cGxvYWQgdGhlIHZlcnRzIHRvIHRoZSBidWZmZXJcbiAgICBpZiAodGhpcy5jdXJyZW50QmF0Y2hTaXplID4gKCB0aGlzLnNpemUgKiAwLjUgKSApXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlci51cGxvYWQodGhpcy52ZXJ0aWNlcywgMCwgdHJ1ZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIG8gayAuLiBzdWIgYXJyYXkgaXMgU0xPVz4/XG4gICAgICAgIHZhciB2aWV3ID0gdGhpcy5wb3NpdGlvbnMuc3ViYXJyYXkoMCwgdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZSk7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh2aWV3LCAwLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBiaW5kIHNoYWRlci4uXG4gICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHRoaXMuX3NoYWRlcik7XG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggMCApO1xuXG4gICAgLy8vIHJlbmRlciB0aGUgZ3JvdXBzLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5ncm91cENvdW50OyBpKyspIHtcbiAgICAgICAgXG4gICAgICAgIHZhciBncm91cCA9IHRoaXMuZ3JvdXBzW2ldO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ3JvdXAudGV4dHVyZUNvdW50OyBqKyspIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFRleHR1cmUoZ3JvdXAudGV4dHVyZXNbal0sIGopO1xuICAgICAgICB9O1xuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGdyb3VwLnNpemUgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgZ3JvdXAuc3RhcnQgKiA2ICogMik7XG4gICAgfTtcblxuICAgIC8vIHJlc2V0IGVsZW1lbnRzIGZvciB0aGUgbmV4dCBmbHVzaFxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cENvdW50ID0gMDtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcbiAgICB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgc3ByaXRlIGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZhby5iaW5kKCk7XG59O1xuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xuICAgIHRoaXMudmFvLnVuYmluZCgpO1xufTtcbi8qKlxuICogRGVzdHJveXMgdGhlIFNwcml0ZUJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMudmVydGljZXMgPSBudWxsO1xuICAgIHRoaXMucG9zaXRpb25zID0gbnVsbDtcbiAgICB0aGlzLmNvbG9ycyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMudmVydGV4QnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuc3ByaXRlcyA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuXG5mdW5jdGlvbiBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgbWF4VGV4dHVyZXMpXG57XG4gICAgdmFyIHZlcnRleFNyYyA9IFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcbmF0dHJpYnV0ZSBmbG9hdCBhVGV4dHVyZUlkO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyBmbG9hdCB2VGV4dHVyZUlkO1xcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2VGV4dHVyZUlkID0gYVRleHR1cmVJZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cIjtcbiAgICB2YXIgZnJhZ21lbnRTcmMgPSAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxuJyArIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKSArIFwiXFxuXFxuXCIgKyBmcmFnVGVtcGxhdGVcblxuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMucmVwbGFjZSgvXFwlXFwlL2dpLCAnMTYnKTtcblxuICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXG4gICAgdmFyIHNhbXBsZVZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkrKykge1xuICAgICAgICBzYW1wbGVWYWx1ZXNbaV0gPSBpO1xuICAgIH07XG5cbiAgICBzaGFkZXIuYmluZCgpO1xuICAgIHNoYWRlci51bmlmb3Jtcy51U2FtcGxlcnMgPSBzYW1wbGVWYWx1ZXM7XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVNhbXBsZVNyYyhtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgc3JjID0gJ3ZlYzQgZ2V0U2FtcGxlRnJvbUFycmF5KHNhbXBsZXIyRCB0ZXh0dXJlc1slJV0sIGludCBuZHgsIHZlYzIgdXYpIHtcXG5cXG52ZWM0IGNvbG9yOydcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSBcbiAgICB7XG4gICAgICAgIGlmKGkgPiAwKXNyYyArPSAnXFxuZWxzZSAnO1xuICAgICAgICBpZihpIDwgbWF4VGV4dHVyZXMtMSlzcmMgKz0gJ2lmKG5keCA9PSAnICsgaSArICcpJztcbiAgICAgICAgc3JjICs9ICdcXG57JztcbiAgICAgICAgc3JjICs9ICdcXG5cXHRjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlc1snK2krJ10sIHV2KTsnO1xuICAgICAgICBzcmMgKz0gJ1xcbn0nO1xuICAgIH07XG5cbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAncmV0dXJuIGNvbG9yOyc7XG4gICAgc3JjICs9ICdcXG59JztcblxuICAgIHJldHVybiBzcmM7XG59XG5cbnZhciBmcmFnVGVtcGxhdGUgPSBbXG5cbiAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuICAgICd2YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7JyxcbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJzWyUlXTsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnZ2xfRnJhZ0NvbG9yID0gZ2V0U2FtcGxlRnJvbUFycmF5KHVTYW1wbGVycywgaW50KHZUZXh0dXJlSWQpLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvcjsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcjtcbiIsInZhciBTcHJpdGUgPSByZXF1aXJlKCcuLi9zcHJpdGVzL1Nwcml0ZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgVGV4dCBPYmplY3Qgd2lsbCBjcmVhdGUgYSBsaW5lIG9yIG11bHRpcGxlIGxpbmVzIG9mIHRleHQuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJyBpbiB5b3VyIHRleHQgc3RyaW5nLFxuICogb3IgYWRkIGEgd29yZFdyYXAgcHJvcGVydHkgc2V0IHRvIHRydWUgYW5kIGFuZCB3b3JkV3JhcFdpZHRoIHByb3BlcnR5IHdpdGggYSB2YWx1ZSBpbiB0aGUgc3R5bGUgb2JqZWN0LlxuICpcbiAqIEEgVGV4dCBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGEgc3RyaW5nIGFuZCBhIHN0eWxlIG9iamVjdFxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dCA9IG5ldyBQSVhJLlRleHQoJ1RoaXMgaXMgYSBwaXhpIHRleHQnLHtmb250IDogJzI0cHggQXJpYWwnLCBmaWxsIDogMHhmZjEwMTAsIGFsaWduIDogJ2NlbnRlcid9KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBbc3R5bGVdIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnRdIHtzdHJpbmd9IGRlZmF1bHQgJ2JvbGQgMjBweCBBcmlhbCcgVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gKiBAcGFyYW0gW3N0eWxlLmZpbGw9J2JsYWNrJ10ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdCBzaW5nbGUgbGluZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZV0ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBzdHJva2UgZS5nICdibHVlJywgJyNGQ0ZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZVRoaWNrbmVzcz0wXSB7bnVtYmVyfSBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgc3Ryb2tlLiBEZWZhdWx0IGlzIDAgKG5vIHN0cm9rZSlcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXAsIGl0IG5lZWRzIHdvcmRXcmFwIHRvIGJlIHNldCB0byB0cnVlXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvdz1mYWxzZV0ge2Jvb2xlYW59IFNldCBhIGRyb3Agc2hhZG93IGZvciB0aGUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93QW5nbGU9TWF0aC5QSS80XSB7bnVtYmVyfSBTZXQgYSBhbmdsZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAqIEBwYXJhbSBbc3R5bGUucGFkZGluZz0wXSB7bnVtYmVyfSBPY2Nhc2lvbmFsbHkgc29tZSBmb250cyBhcmUgY3JvcHBlZCBvbiB0b3Agb3IgYm90dG9tLiBBZGRpbmcgc29tZSBwYWRkaW5nIHdpbGxcbiAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVKb2luPSdtaXRlciddIHtzdHJpbmd9IFRoZSBsaW5lSm9pbiBwcm9wZXJ0eSBzZXRzIHRoZSB0eXBlIG9mIGNvcm5lciBjcmVhdGVkLCBpdCBjYW4gcmVzb2x2ZVxuICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAqICAgICAgb3IgaW5jcmVhc2UgdGhlIHNwaWtpbmVzcyBvZiByZW5kZXJlZCB0ZXh0LlxuICovXG5mdW5jdGlvbiBUZXh0KHRleHQsIHN0eWxlLCByZXNvbHV0aW9uKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgZWxlbWVudCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gdG9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGhcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIGNhbnZhcy5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXModGhpcy5jYW52YXMpO1xuICAgIHRleHR1cmUudHJpbSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuICAgIFNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3ByaXRlLnByb3RvdHlwZSk7XG5UZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHQ7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHQ7XG5cblRleHQuZm9udFByb3BlcnRpZXNDYWNoZSA9IHt9O1xuVGV4dC5mb250UHJvcGVydGllc0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuVGV4dC5mb250UHJvcGVydGllc0NvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHQucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueCAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dCwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc2NhbGUueSAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlIC8gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBzdHlsZSBvZiB0aGUgdGV4dFxuICAgICAqXG4gICAgICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmZvbnQ9J2JvbGQgMjBwdCBBcmlhbCddIHtzdHJpbmd9IFRoZSBzdHlsZSBhbmQgc2l6ZSBvZiB0aGUgZm9udFxuICAgICAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGVnICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnN0cm9rZT0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlZyAnYmx1ZScsICcjRkNGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICAgICAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcFdpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIGF0IHdoaWNoIHRleHQgd2lsbCB3cmFwXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSGVpZ2h0XSB7bnVtYmVyfSBUaGUgbGluZSBoZWlnaHQsIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgc3BhY2UgdGhhdCBhIGxldHRlciB1c2VzXG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfG51bWJlcn0gQSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgb24gdGhlIGRyb3BzaGFkb3cgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzZdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0JsdXI9MF0ge251bWJlcn0gU2V0IGEgc2hhZG93IGJsdXIgcmFkaXVzXG4gICAgICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICAgICAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLnRleHRCYXNlbGluZT0nYWxwaGFiZXRpYyddIHtzdHJpbmd9IFRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dCB0aGF0IGlzIHJlbmRlcmVkLlxuICAgICAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gICAgICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gICAgICogQHBhcmFtIFtzdHlsZS5taXRlckxpbWl0PTEwXSB7bnVtYmVyfSBUaGUgbWl0ZXIgbGltaXQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdtaXRlcicgbGluZUpvaW4gbW9kZS4gVGhpcyBjYW4gcmVkdWNlXG4gICAgICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICBzdHlsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdHlsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3R5bGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZmlsbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5maWxsID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5maWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5zdHJva2UgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5zdHJva2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmRyb3BTaGFkb3dDb2xvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlLmZvbnQgPSBzdHlsZS5mb250IHx8ICdib2xkIDIwcHQgQXJpYWwnO1xuICAgICAgICAgICAgc3R5bGUuZmlsbCA9IHN0eWxlLmZpbGwgfHwgJ2JsYWNrJztcbiAgICAgICAgICAgIHN0eWxlLmFsaWduID0gc3R5bGUuYWxpZ24gfHwgJ2xlZnQnO1xuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gc3R5bGUuc3Ryb2tlIHx8ICdibGFjayc7IC8vcHJvdmlkZSBhIGRlZmF1bHQsIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2lzc3Vlcy8xMzZcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZVRoaWNrbmVzcyA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyB8fCAwO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXAgPSBzdHlsZS53b3JkV3JhcCB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLndvcmRXcmFwV2lkdGggPSBzdHlsZS53b3JkV3JhcFdpZHRoIHx8IDEwMDtcblxuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvdyA9IHN0eWxlLmRyb3BTaGFkb3cgfHwgZmFsc2U7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3IgfHwgJyMwMDAwMDAnO1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0FuZ2xlID0gc3R5bGUuZHJvcFNoYWRvd0FuZ2xlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93QW5nbGUgOiBNYXRoLlBJIC8gNjtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSA9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlIDogNTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXIgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dCbHVyIDogMDsgLy9zaGFkb3dCbHVyIGlzICcwJyBieSBkZWZhdWx0IGFjY29yZGluZyB0byBIVE1MXG5cbiAgICAgICAgICAgIHN0eWxlLnBhZGRpbmcgPSBzdHlsZS5wYWRkaW5nIHx8IDA7XG5cbiAgICAgICAgICAgIHN0eWxlLnRleHRCYXNlbGluZSA9IHN0eWxlLnRleHRCYXNlbGluZSB8fCAnYWxwaGFiZXRpYyc7XG5cbiAgICAgICAgICAgIHN0eWxlLmxpbmVKb2luID0gc3R5bGUubGluZUpvaW4gfHwgJ21pdGVyJztcbiAgICAgICAgICAgIHN0eWxlLm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0IHx8IDEwO1xuXG4gICAgICAgICAgICB0aGlzLl9zdHlsZSA9IHN0eWxlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjb3B5IGZvciB0aGUgdGV4dCBvYmplY3QuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHRleHQpe1xuICAgICAgICAgICAgdGV4dCA9IHRleHQudG9TdHJpbmcoKSB8fCAnICc7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dCA9PT0gdGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdGV4dDtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHN0eWxlID0gdGhpcy5fc3R5bGU7XG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuXG4gICAgLy8gd29yZCB3cmFwXG4gICAgLy8gcHJlc2VydmUgb3JpZ2luYWwgdGV4dFxuICAgIHZhciBvdXRwdXRUZXh0ID0gc3R5bGUud29yZFdyYXAgPyB0aGlzLndvcmRXcmFwKHRoaXMuX3RleHQpIDogdGhpcy5fdGV4dDtcblxuICAgIC8vIHNwbGl0IHRleHQgaW50byBsaW5lc1xuICAgIHZhciBsaW5lcyA9IG91dHB1dFRleHQuc3BsaXQoLyg/OlxcclxcbnxcXHJ8XFxuKS8pO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgd2lkdGhcbiAgICB2YXIgbGluZVdpZHRocyA9IG5ldyBBcnJheShsaW5lcy5sZW5ndGgpO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBmb250UHJvcGVydGllcyA9IHRoaXMuZGV0ZXJtaW5lRm9udFByb3BlcnRpZXMoc3R5bGUuZm9udCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBsaW5lV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQobGluZXNbaV0pLndpZHRoO1xuICAgICAgICBsaW5lV2lkdGhzW2ldID0gbGluZVdpZHRoO1xuICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxpbmVXaWR0aCk7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gbWF4TGluZVdpZHRoICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgd2lkdGggKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gKCB3aWR0aCArIHRoaXMuY29udGV4dC5saW5lV2lkdGggKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIC8vIGNhbGN1bGF0ZSB0ZXh0IGhlaWdodFxuICAgIHZhciBsaW5lSGVpZ2h0ID0gdGhpcy5zdHlsZS5saW5lSGVpZ2h0IHx8IGZvbnRQcm9wZXJ0aWVzLmZvbnRTaXplICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuXG4gICAgdmFyIGhlaWdodCA9IGxpbmVIZWlnaHQgKiBsaW5lcy5sZW5ndGg7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBoZWlnaHQgKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9ICggaGVpZ2h0ICsgdGhpcy5fc3R5bGUucGFkZGluZyAqIDIgKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMuY29udGV4dC5zY2FsZSggdGhpcy5yZXNvbHV0aW9uLCB0aGlzLnJlc29sdXRpb24pO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIH1cblxuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxTdHlsZT1cIiNGRjAwMDBcIjtcbiAgICAvL3RoaXMuY29udGV4dC5maWxsUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIHRoaXMuY29udGV4dC5mb250ID0gc3R5bGUuZm9udDtcbiAgICB0aGlzLmNvbnRleHQuc3Ryb2tlU3R5bGUgPSBzdHlsZS5zdHJva2U7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcbiAgICB0aGlzLmNvbnRleHQudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lO1xuICAgIHRoaXMuY29udGV4dC5saW5lSm9pbiA9IHN0eWxlLmxpbmVKb2luO1xuICAgIHRoaXMuY29udGV4dC5taXRlckxpbWl0ID0gc3R5bGUubWl0ZXJMaW1pdDtcblxuICAgIHZhciBsaW5lUG9zaXRpb25YO1xuICAgIHZhciBsaW5lUG9zaXRpb25ZO1xuXG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBpZiAoc3R5bGUuZHJvcFNoYWRvd0JsdXIgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3I7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Qmx1ciA9IHN0eWxlLmRyb3BTaGFkb3dCbHVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4U2hhZG93T2Zmc2V0ID0gTWF0aC5jb3Moc3R5bGUuZHJvcFNoYWRvd0FuZ2xlKSAqIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICAgICAgdmFyIHlTaGFkb3dPZmZzZXQgPSBNYXRoLnNpbihzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogbGluZUhlaWdodCkgKyBmb250UHJvcGVydGllcy5hc2NlbnQ7XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblggKyB4U2hhZG93T2Zmc2V0LCBsaW5lUG9zaXRpb25ZICsgeVNoYWRvd09mZnNldCArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9zZXQgY2FudmFzIHRleHQgc3R5bGVzXG4gICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmZpbGw7XG5cbiAgICAvL2RyYXcgbGluZXMgbGluZSBieSBsaW5lXG4gICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICBpZiAoc3R5bGUuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHlsZS5zdHJva2UgJiYgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVUZXh0dXJlKCk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLnRyaW0ueCA9IDA7XG4gICAgdGV4dHVyZS50cmltLnkgPSAtdGhpcy5fc3R5bGUucGFkZGluZztcblxuICAgIHRleHR1cmUudHJpbS53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRleHR1cmUudHJpbS5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgLSB0aGlzLl9zdHlsZS5wYWRkaW5nKjI7XG5cbiAgICB0aGlzLl93aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuX2hlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZW1pdCgndXBkYXRlJywgIHRleHR1cmUuYmFzZVRleHR1cmUpO1xuXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKi9cblRleHQucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgLy90aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUucmVuZGVyV2ViR0wuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgIC8vICAgdGhpcy5yZXNvbHV0aW9uID0gMS8vcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGFzY2VudCwgZGVzY2VudCBhbmQgZm9udFNpemUgb2YgYSBnaXZlbiBmb250U3R5bGVcbiAqXG4gKiBAcGFyYW0gZm9udFN0eWxlIHtvYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5kZXRlcm1pbmVGb250UHJvcGVydGllcyA9IGZ1bmN0aW9uIChmb250U3R5bGUpXG57XG4gICAgdmFyIHByb3BlcnRpZXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXTtcblxuICAgIGlmICghcHJvcGVydGllcylcbiAgICB7XG4gICAgICAgIHByb3BlcnRpZXMgPSB7fTtcblxuICAgICAgICB2YXIgY2FudmFzID0gVGV4dC5mb250UHJvcGVydGllc0NhbnZhcztcbiAgICAgICAgdmFyIGNvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dDtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgdmFyIHdpZHRoID0gTWF0aC5jZWlsKGNvbnRleHQubWVhc3VyZVRleHQoJ3xNw4lxJykud2lkdGgpO1xuICAgICAgICB2YXIgYmFzZWxpbmUgPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnTScpLndpZHRoKTtcbiAgICAgICAgdmFyIGhlaWdodCA9IDIgKiBiYXNlbGluZTtcblxuICAgICAgICBiYXNlbGluZSA9IGJhc2VsaW5lICogMS40IHwgMDtcblxuICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjZjAwJztcbiAgICAgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgY29udGV4dC50ZXh0QmFzZWxpbmUgPSAnYWxwaGFiZXRpYyc7XG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMwMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxUZXh0KCd8TcOJcScsIDAsIGJhc2VsaW5lKTtcblxuICAgICAgICB2YXIgaW1hZ2VkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCkuZGF0YTtcbiAgICAgICAgdmFyIHBpeGVscyA9IGltYWdlZGF0YS5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lID0gd2lkdGggKiA0O1xuXG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIHZhciBpZHggPSAwO1xuICAgICAgICB2YXIgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGFzY2VudC4gc2NhbiBmcm9tIHRvcCB0byBib3R0b20gdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGJhc2VsaW5lOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggKz0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuYXNjZW50ID0gYmFzZWxpbmUgLSBpO1xuXG4gICAgICAgIGlkeCA9IHBpeGVscyAtIGxpbmU7XG4gICAgICAgIHN0b3AgPSBmYWxzZTtcblxuICAgICAgICAvLyBkZXNjZW50LiBzY2FuIGZyb20gYm90dG9tIHRvIHRvcCB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSBoZWlnaHQ7IGkgPiBiYXNlbGluZTsgaS0tKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGluZTsgaiArPSA0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0b3ApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWR4IC09IGxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLmRlc2NlbnQgPSBpIC0gYmFzZWxpbmU7XG4gICAgICAgIHByb3BlcnRpZXMuZm9udFNpemUgPSBwcm9wZXJ0aWVzLmFzY2VudCArIHByb3BlcnRpZXMuZGVzY2VudDtcblxuICAgICAgICBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXSA9IHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgbmV3bGluZXMgdG8gYSBzdHJpbmcgdG8gaGF2ZSBpdCBvcHRpbWFsbHkgZml0IGludG8gdGhlIGhvcml6b250YWxcbiAqIGJvdW5kcyBzZXQgYnkgdGhlIFRleHQgb2JqZWN0J3Mgd29yZFdyYXBXaWR0aCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUud29yZFdyYXAgPSBmdW5jdGlvbiAodGV4dClcbntcbiAgICAvLyBHcmVlZHkgd3JhcHBpbmcgYWxnb3JpdGhtIHRoYXQgd2lsbCB3cmFwIHdvcmRzIGFzIHRoZSBsaW5lIGdyb3dzIGxvbmdlclxuICAgIC8vIHRoYW4gaXRzIGhvcml6b250YWwgYm91bmRzLlxuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgICB2YXIgd29yZFdyYXBXaWR0aCA9IHRoaXMuX3N0eWxlLndvcmRXcmFwV2lkdGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcGFjZUxlZnQgPSB3b3JkV3JhcFdpZHRoO1xuICAgICAgICB2YXIgd29yZHMgPSBsaW5lc1tpXS5zcGxpdCgnICcpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdvcmRzLmxlbmd0aDsgaisrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgd29yZFdpZHRoID0gdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KHdvcmRzW2pdKS53aWR0aDtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGhXaXRoU3BhY2UgPSB3b3JkV2lkdGggKyB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQoJyAnKS53aWR0aDtcbiAgICAgICAgICAgIGlmIChqID09PSAwIHx8IHdvcmRXaWR0aFdpdGhTcGFjZSA+IHNwYWNlTGVmdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHByaW50aW5nIHRoZSBuZXdsaW5lIGlmIGl0J3MgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxpbmUgdGhhdCBpc1xuICAgICAgICAgICAgICAgIC8vIGdyZWF0ZXIgdGhhbiB0aGUgd29yZCB3cmFwIHdpZHRoLlxuICAgICAgICAgICAgICAgIGlmIChqID4gMClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdvcmRzW2pdO1xuICAgICAgICAgICAgICAgIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGggLSB3b3JkV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0IC09IHdvcmRXaWR0aFdpdGhTcGFjZTtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyAnICsgd29yZHNbal07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaSA8IGxpbmVzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBUZXh0IGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIFRleHRcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIHJldHVybiBTcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcy5jYWxsKHRoaXMsIG1hdHJpeCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dCBvYmplY3QuXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9dHJ1ZV0ge2Jvb2xlYW59IHdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZVRleHR1cmUpXG57XG4gICAgLy8gbWFrZSBzdXJlIHRvIHJlc2V0IHRoZSB0aGUgY29udGV4dCBhbmQgY2FudmFzLi4gZG9udCB3YW50IHRoaXMgaGFuZ2luZyBhcm91bmQgaW4gbWVtb3J5IVxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xuXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG59O1xuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9GaWx0ZXJNYW5hZ2VyJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgdGVtcFJlY3QgPSBuZXcgbWF0aC5SZWN0YW5nbGUoKTtcblxuLyoqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBCYXNlUmVuZGVyVGV4dHVyZSBzaG91bGQgYmUgcHJlbG9hZGVkXG4gKiBvdGhlcndpc2UgYmxhY2sgcmVjdGFuZ2xlcyB3aWxsIGJlIGRyYXduIGluc3RlYWQuXG4gKlxuICogQSBCYXNlUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIEJhc2VyZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIDgwMCwgNjAwKTtcbiAqIHZhciBzcHJpdGUgPSBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJzcGluT2JqXzAxLnBuZ1wiKTtcbiAqXG4gKiBzcHJpdGUucG9zaXRpb24ueCA9IDgwMC8yO1xuICogc3ByaXRlLnBvc2l0aW9uLnkgPSA2MDAvMjtcbiAqIHNwcml0ZS5hbmNob3IueCA9IDAuNTtcbiAqIHNwcml0ZS5hbmNob3IueSA9IDAuNTtcbiAqXG4gKiBCYXNlcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgQmFzZXJlbmRlclRleHR1cmVcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgZm9yIHRoaXMgQmFzZVJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgaWYgKCFyZW5kZXJlcilcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNyZWF0ZSBCYXNlUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgbnVsbCwgc2NhbGVNb2RlKTtcbiAgIFxuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAxMDA7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OOztcbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIERyYXcvcmVuZGVyIHRoZSBnaXZlbiBEaXNwbGF5T2JqZWN0IG9udG8gdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheU9iamVjdCBhbmQgZGVzY2VuZGVudHMgYXJlIHRyYW5zZm9ybWVkIGR1cmluZyB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBJZiBgdXBkYXRlVHJhbnNmb3JtYCBpcyB0cnVlIHRoZW4gdGhlIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkIGJlZm9yZSB0aGVcbiAgICAgKiBtZXRob2QgcmV0dXJucy4gT3RoZXJ3aXNlIGl0IGlzIHVwIHRvIHRoZSBjYWxsaW5nIGNvZGUgdG8gY29ycmVjdGx5IHVzZSBvciByZXNldFxuICAgICAqIHRoZSB0cmFuc2Zvcm1lZCBkaXNwbGF5IG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgaXMgYWx3YXlzIHJlbmRlcmVkIHdpdGggYSB3b3JsZEFscGhhIHZhbHVlIG9mIDEuXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAgICAgKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBPcHRpb25hbCBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIGRpc3BsYXkgb2JqZWN0IGJlZm9yZSByZW5kZXJpbmcuXG4gICAgICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICAgICAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gICAgICogIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkLiBOb3QgcmVzdG9yaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBhIGxpdHRsZSBmYXN0ZXIuXG4gICAgICovXG4gICAgdGhpcy5yZW5kZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgQmFzZVJlbmRlclRleHR1cmUgdXNlcy4gQSBCYXNlUmVuZGVyVGV4dHVyZSBjYW4gb25seSBiZWxvbmcgdG8gb25lIHJlbmRlcmVyIGF0IHRoZSBtb21lbnQgaWYgaXRzIHdlYkdMLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgUmVuZGVyVGFyZ2V0KGdsLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5zY2FsZU1vZGUsIHRoaXMucmVzb2x1dGlvbik7Ly8sIHRoaXMudGhpcy5zY2FsZU1vZGUpO1xuICAgICAgICB0aGlzLl9nbFRleHR1cmVzW2dsLmlkXSA9ICB0aGlzLnRleHR1cmVCdWZmZXIudGV4dHVyZTtcbiAgICAgICAgXG4gICAgICAgIC8vVE9ETyByZWZhY3RvciBmaWx0ZXIgbWFuYWdlci4uIGFzIHJlYWxseSBpdHMgbm8gbG9uZ2VyIGEgbWFuYWdlciBpZiB3ZSB1c2UgaXQgaGVyZS4uXG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJXZWJHTDtcblxuICAgICAgICAvLyB0aGUgY3JlYXRpb24gb2YgYSBmaWx0ZXIgbWFuYWdlciB1bmJpbmRzIHRoZSBidWZmZXJzLi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbiAgICAgICAgaWYodGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0KXRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJDYW52YXM7XG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIodGhpcy53aWR0aCogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbn1cblxuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlVGV4dHVyZS5wcm90b3R5cGUpO1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzZVJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VSZW5kZXJUZXh0dXJlO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGlmICh3aWR0aCA9PT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT09IHRoaXMuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5maWx0ZXJNYW5hZ2VyKVxuICAgIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLnJlbmRlcmVyLmdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcihmYWxzZSwgZGVzdGluYXRpb25GcmFtZSk7XG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gKHVwZGF0ZVRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSA/IHVwZGF0ZVRyYW5zZm9ybSA6IHRydWU7Ly8hdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnRyYW5zZm9ybSA9IG1hdHJpeDtcblxuICAgIC8vVE9ETyBub3QgYSBmYW4gdGhhdCB0aGlzIGlzIGhlcmUuLi4gaXQgd2lsbCBtb3ZlIVxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5hY3RpdmF0ZSgpO1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgaWYgKHVwZGF0ZVRyYW5zZm9ybSlcbiAgICB7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIG1hdHJpeCBvZiB0aGUgZGlzcGxhdHlPYmplY3QuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmlkZW50aXR5KCk7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgICAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRlbXBSZWN0LndpZHRoID0gZnJhbWUuaGVpZ2h0O1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IGZyYW1lLndpZHRoO1xuICAgXG4gICAgLy9UT0RPIHJlbmFtZSB0ZXh0dXJlQnVmZmVyIHRvIHJlbmRlclRhcmdldC4uXG4gICAgdmFyIHRlbXAgPSAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyID0gdGhpcy5maWx0ZXJNYW5hZ2VyO1xuICAgIFxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKGZyYW1lLCB0ZW1wUmVjdCk7XG4gICAgY29uc29sZS5sb2coZGlzcGxheU9iamVjdClcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgdGhpcy50ZXh0dXJlQnVmZmVyLCBjbGVhcik7XG5cbiAgIC8vIGNvbnNvbGUubG9nKFwiUkVOREVSSU5HIFwiKTtcbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0ZW1wO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXJdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChmcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAhIXVwZGF0ZVRyYW5zZm9ybTtcblxuICAgIHZhciB3dCA9IHRlbXBNYXRyaXg7XG5cbiAgICB3dC5pZGVudGl0eSgpO1xuXG4gICAgaWYgKG1hdHJpeClcbiAgICB7XG4gICAgICAgIHd0LmFwcGVuZChtYXRyaXgpO1xuICAgIH1cblxuXG4gICAgd3QudHggKz0gZnJhbWUueDtcbiAgICB3dC50eSArPSBmcmFtZS55O1xuXG4gICAgdmFyIGNhY2hlZFd0ID0gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybTtcbiAgICBcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gd3Q7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgdmFyIGksIGo7XG5cbiAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgXG4vLyAgICB0aGlzLnRleHR1cmVCdWZmZXIuXG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dDtcblxuICAgIHZhciByZWFsUmVzb2x1dGlvbiA9IHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHJlYWxSZXNvbHV0aW9uO1xuXG4gICAgaWYoZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9PT0gd3QpXG4gICAge1xuICAgICAgICAvLyBmaXhlcyBjYWNoZUFzQml0bWFwIEhhcHBlbmluZyBkdXJpbmcgdGhlIGFib3ZlLi5cbiAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IGNhY2hlZFd0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gZGVzdHJveUJhc2Uge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCB0cnVlKTtcblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICAvLyBkZXN0cm95IHRoZSBmaWx0ZXJtYW5hZ2VyLi5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEltYWdlID0gZnVuY3Rpb24gKGZyYW1lKVxue1xuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLnNyYyA9IHRoaXMuZ2V0QmFzZTY0KGZyYW1lKTtcbiAgICByZXR1cm4gaW1hZ2U7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIEJhc2VSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRCYXNlNjQgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRDYW52YXMoZnJhbWUpLnRvRGF0YVVSTCgpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB0byBpdCBhbmQgdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBBIENhbnZhcyBlbGVtZW50IHdpdGggdGhlIHRleHR1cmUgcmVuZGVyZWQgb24uXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgIFxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgQ2FudmFzQnVmZmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHRlbXBDYW52YXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0RhdGEuZGF0YS5zZXQod2ViR0xQaXhlbHMpO1xuXG4gICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGZyYW1lLndpZHRoID09PSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLndpZHRoICYmIFxuICAgICAgICAgICBmcmFtZS5oZWlnaHQgPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIoZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcbiAgICAgICAgICAgIHZhciBjYW52YXNEYXRhID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNvbnRleHQuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggICogcmVzb2x1dGlvbiwgZnJhbWUueSAqIHJlc29sdXRpb24sIGZyYW1lLndpZHRoICogcmVzb2x1dGlvbiwgZnJhbWUuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0ZW1wQ2FudmFzLmNhbnZhcztcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKCBmcmFtZSApXG57XG4gICAgaWYoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgZnJhbWUud2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS53aWR0aDtcbiAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IGZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YShmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoZnJhbWUsIHgsIHkpXG57XG4gICAgdGVtcFJlY3QueCA9IHg7XG4gICAgdGVtcFJlY3QueSA9IHk7XG4gICAgdGVtcFJlY3Qud2lkdGggPSAxIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZihmcmFtZSlcbiAgICB7XG4gICAgICAgIHRlbXBSZWN0LnggKz0gZnJhbWUueDtcbiAgICAgICAgdGVtcFJlY3QueSArPSBmcmFtZS55O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFBpeGVscyh0ZW1wUmVjdCk7XG59O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZS4gQWxsIHRleHR1cmVzIGhhdmUgYSBiYXNlIHRleHR1cmUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBmb3IgZGV2aWNlcyB3aXRoIGRpZmZlcmVudCBwaXhlbCByYXRpb3NcbiAqL1xuZnVuY3Rpb24gQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnVpZCA9IHV0aWxzLnVpZCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgYmFzZSB0ZXh0dXJlIHNldCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAxMDA7XG5cbiAgICAvLyBUT0RPIGRvY3NcbiAgICAvLyB1c2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgZGltZW5zaW9ucyBvZiB0aGUgc291cmNlXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIHdpZHRoIG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsV2lkdGggPSAxMDA7XG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIGhlaWdodCBvZiB0aGUgc291cmNlIG9mIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucmVhbEhlaWdodCA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlIHRvIGFwcGx5IHdoZW4gc2NhbGluZyB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlNDQUxFX01PREVTLkxJTkVBUlxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSBvbmNlIHRoZSBiYXNlIHRleHR1cmUgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG5ldmVyIHRydWUgaWYgdGhlIHVuZGVybHlpbmcgc291cmNlIGZhaWxzIHRvIGxvYWQgb3IgaGFzIG5vIHRleHR1cmUgZGF0YS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIGlmIHRoZSBzb3VyY2UgaXMgY3VycmVudGx5IGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBJZiBhbiBJbWFnZSBzb3VyY2UgaXMgbG9hZGluZyB0aGUgJ2xvYWRlZCcgb3IgJ2Vycm9yJyBldmVudCB3aWxsIGJlXG4gICAgICogZGlzcGF0Y2hlZCB3aGVuIHRoZSBvcGVyYXRpb24gZW5kcy4gQW4gdW5kZXJ5bGluZyBzb3VyY2UgdGhhdCBpc1xuICAgICAqIGltbWVkaWF0ZWx5LWF2YWlsYWJsZSBieXBhc3NlcyBsb2FkaW5nIGVudGlyZWx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGltYWdlIHNvdXJjZSB0aGF0IGlzIHVzZWQgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogVE9ETzogTWFrZSB0aGlzIGEgc2V0dGVyIHRoYXQgY2FsbHMgbG9hZFNvdXJjZSgpO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SW1hZ2V8Q2FudmFzfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuc291cmNlID0gbnVsbDsgLy8gc2V0IGluIGxvYWRTb3VyY2UsIGlmIGF0IGFsbFxuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgaWYgUkdCIGNoYW5uZWxzIHNob3VsZCBiZSBwcmUtbXVsdGlwbGllZCBieSBBbHBoYSAgKFdlYkdMIG9ubHkpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgb3Igbm90IHRoZSB0ZXh0dXJlIGlzIGEgcG93ZXIgb2YgdHdvLCB0cnkgdG8gdXNlIHBvd2VyIG9mIHR3byB0ZXh0dXJlcyBhcyBtdWNoIGFzIHlvdSBjYW5cbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSBmYWxzZTtcblxuICAgIC8vIHVzZWQgZm9yIHdlYkdMXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgYSBtaXBtYXAgb2YgdGhpcyB0ZXh0dXJlIG5lZWRzIHRvIGJlIGdlbmVyYXRlZC4gVGhpcyB2YWx1ZSBuZWVkcyB0byBiZSBzZXQgYmVmb3JlIHRoZSB0ZXh0dXJlIGlzIHVzZWRcbiAgICAgKiBBbHNvIHRoZSB0ZXh0dXJlIG11c3QgYmUgYSBwb3dlciBvZiB0d28gc2l6ZSB0byB3b3JrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubWlwbWFwID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBBIG1hcCBvZiByZW5kZXJlciBJRHMgdG8gd2ViZ2wgdGV4dHVyZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIFdlYkdMVGV4dHVyZT59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbFRleHR1cmVzID0ge307XG4gICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5faWQgPSAwO1xuICAgIFxuICAgIC8vIGlmIG5vIHNvdXJjZSBwYXNzZWQgZG9uJ3QgdHJ5IHRvIGxvYWRcbiAgICBpZiAoc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5sb2FkU291cmNlKHNvdXJjZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZpbmlzaGVzIGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZGVkXG4gICAgICogQG1lbWJlcm9mIFBJWEkuQmFzZVRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZhaWxzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG59XG5cbkJhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdGV4dHVyZSBvbiBhbGwgdGhlIHdlYmdsIHJlbmRlcmVycywgdGhpcyBhbHNvIGFzc3VtZXMgdGhlIHNyYyBoYXMgY2hhbmdlZC5cbiAqXG4gKiBAZmlyZXMgdXBkYXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVhbFdpZHRoID0gdGhpcy5zb3VyY2UubmF0dXJhbFdpZHRoIHx8IHRoaXMuc291cmNlLndpZHRoO1xuICAgIHRoaXMucmVhbEhlaWdodCA9IHRoaXMuc291cmNlLm5hdHVyYWxIZWlnaHQgfHwgdGhpcy5zb3VyY2UuaGVpZ2h0O1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMucmVhbFdpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5yZWFsSGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSB1dGlscy5pc1Bvd2VyT2ZUd28odGhpcy5yZWFsV2lkdGgsIHRoaXMucmVhbEhlaWdodCk7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBMb2FkIGEgc291cmNlLlxuICpcbiAqIElmIHRoZSBzb3VyY2UgaXMgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSwgc3VjaCBhcyBhbiBpbWFnZSB0aGF0IG5lZWRzIHRvIGJlXG4gKiBkb3dubG9hZGVkLCB0aGVuIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmUgZGlzcGF0Y2hlZCBpbiB0aGUgZnV0dXJlXG4gKiBhbmQgYGhhc0xvYWRlZGAgd2lsbCByZW1haW4gZmFsc2UgYWZ0ZXIgdGhpcyBjYWxsLlxuICpcbiAqIFRoZSBsb2dpYyBzdGF0ZSBhZnRlciBjYWxsaW5nIGBsb2FkU291cmNlYCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IChlZy4gYGZyb21JbWFnZWAsIGBuZXcgQmFzZVRleHR1cmVgKSBpczpcbiAqXG4gKiAgICAgaWYgKHRleHR1cmUuaGFzTG9hZGVkKVxuIHtcbiAqICAgICAgICAvLyB0ZXh0dXJlIHJlYWR5IGZvciB1c2VcbiAqICAgICB9IGVsc2UgaWYgKHRleHR1cmUuaXNMb2FkaW5nKVxuIHtcbiAqICAgICAgICAvLyBsaXN0ZW4gdG8gJ2xvYWRlZCcgYW5kL29yICdlcnJvcicgZXZlbnRzIG9uIHRleHR1cmVcbiAqICAgICB9IGVsc2Uge1xuICogICAgICAgIC8vIG5vdCBsb2FkaW5nLCBub3QgZ29pbmcgdG8gbG9hZCBVTkxFU1MgdGhlIHNvdXJjZSBpcyByZWxvYWRlZFxuICogICAgICAgIC8vIChpdCBtYXkgc3RpbGwgbWFrZSBzZW5zZSB0byBsaXN0ZW4gdG8gdGhlIGV2ZW50cylcbiAqICAgICB9XG4gKlxuICogQHByb3RlY3RlZFxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmxvYWRTb3VyY2UgPSBmdW5jdGlvbiAoc291cmNlKVxue1xuICAgIHZhciB3YXNMb2FkaW5nID0gdGhpcy5pc0xvYWRpbmc7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKHdhc0xvYWRpbmcgJiYgdGhpcy5zb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmVycm9yID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcblxuICAgIC8vIEFwcGx5IHNvdXJjZSBpZiBsb2FkZWQuIE90aGVyd2lzZSBzZXR1cCBhcHByb3ByaWF0ZSBsb2FkaW5nIG1vbml0b3JzLlxuICAgIGlmICgodGhpcy5zb3VyY2UuY29tcGxldGUgfHwgdGhpcy5zb3VyY2UuZ2V0Q29udGV4dCkgJiYgdGhpcy5zb3VyY2Uud2lkdGggJiYgdGhpcy5zb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFzb3VyY2UuZ2V0Q29udGV4dClcbiAgICB7XG5cbiAgICAgICAgLy8gSW1hZ2UgZmFpbCAvIG5vdCByZWFkeVxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgdmFyIHNjb3BlID0gdGhpcztcblxuICAgICAgICBzb3VyY2Uub25sb2FkID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgIHNjb3BlLmVtaXQoJ2xvYWRlZCcsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzb3VyY2Uub25lcnJvciA9IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXNjb3BlLmlzTG9hZGluZylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuZW1pdCgnZXJyb3InLCBzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUGVyIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI3RoZS1pbWctZWxlbWVudFxuICAgICAgICAvLyAgIFwiVGhlIHZhbHVlIG9mIGBjb21wbGV0ZWAgY2FuIHRodXMgY2hhbmdlIHdoaWxlIGEgc2NyaXB0IGlzIGV4ZWN1dGluZy5cIlxuICAgICAgICAvLyBTbyBjb21wbGV0ZSBuZWVkcyB0byBiZSByZS1jaGVja2VkIGFmdGVyIHRoZSBjYWxsYmFja3MgaGF2ZSBiZWVuIGFkZGVkLi5cbiAgICAgICAgLy8gTk9URTogY29tcGxldGUgd2lsbCBiZSB0cnVlIGlmIHRoZSBpbWFnZSBoYXMgbm8gc3JjIHNvIGJlc3QgdG8gY2hlY2sgaWYgdGhlIHNyYyBpcyBzZXQuXG4gICAgICAgIGlmIChzb3VyY2UuY29tcGxldGUgJiYgc291cmNlLnNyYylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gLi5hbmQgaWYgd2UncmUgY29tcGxldGUgbm93LCBubyBuZWVkIGZvciBjYWxsYmFja3NcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiBhbnkgcHJldmlvdXMgc3Vic2NyaWJlcnMgcG9zc2libGVcbiAgICAgICAgICAgICAgICBpZiAod2FzTG9hZGluZylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZCBpbnRlcm5hbGx5IHRvIHVwZGF0ZSB0aGUgd2lkdGgsIGhlaWdodCwgYW5kIHNvbWUgb3RoZXIgdHJhY2tpbmcgdmFycyBvbmNlXG4gKiBhIHNvdXJjZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuX3NvdXJjZUxvYWRlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgYmFzZSB0ZXh0dXJlXG4gKlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuaW1hZ2VVcmwpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcbiAgICAgICAgZGVsZXRlIHV0aWxzLlRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcblxuICAgICAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgICAgICBpZiAoIW5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZS5zcmMgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdGhpcy5zb3VyY2UuX3BpeGlJZF07XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsO1xuXG4gICAgdGhpcy5kaXNwb3NlKCk7XG59O1xuXG4vKipcbiAqIEZyZWVzIHRoZSB0ZXh0dXJlIGZyb20gV2ViR0wgbWVtb3J5IHdpdGhvdXQgZGVzdHJveWluZyB0aGlzIHRleHR1cmUgb2JqZWN0LlxuICogVGhpcyBtZWFucyB5b3UgY2FuIHN0aWxsIHVzZSB0aGUgdGV4dHVyZSBsYXRlciB3aGljaCB3aWxsIHVwbG9hZCBpdCB0byBHUFVcbiAqIG1lbW9yeSBhZ2Fpbi5cbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmVtaXQoJ2Rpc3Bvc2UnLCB0aGlzKTtcblxuICAgIC8vIHRoaXMgc2hvdWxkIG5vIGxvbmdlciBiZSBuZWVkZWQsIHRoZSByZW5kZXJlcnMgc2hvdWxkIGNsZWFudXAgYWxsIHRoZSBnbCB0ZXh0dXJlcy5cbiAgICAvLyB0aGlzLl9nbFRleHR1cmVzID0ge307XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHNvdXJjZSBpbWFnZSBvZiB0aGUgdGV4dHVyZS5cbiAqIFRoZSBvcmlnaW5hbCBzb3VyY2UgbXVzdCBiZSBhbiBJbWFnZSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBuZXdTcmMge3N0cmluZ30gdGhlIHBhdGggb2YgdGhlIGltYWdlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGVTb3VyY2VJbWFnZSA9IGZ1bmN0aW9uIChuZXdTcmMpXG57XG4gICAgdGhpcy5zb3VyY2Uuc3JjID0gbmV3U3JjO1xuXG4gICAgdGhpcy5sb2FkU291cmNlKHRoaXMuc291cmNlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGJhc2UgdGV4dHVyZSBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSBiYXNlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBjcmVhdGVkIGFuZCBsb2FkZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlVXJsIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gU2hvdWxkIHVzZSBhbm9ueW1vdXMgQ09SUz8gRGVmYXVsdHMgdG8gdHJ1ZSBpZiB0aGUgVVJMIGlzIG5vdCBhIGRhdGEtVVJJLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF07XG5cbiAgICBpZiAoY3Jvc3NvcmlnaW4gPT09IHVuZGVmaW5lZCAmJiBpbWFnZVVybC5pbmRleE9mKCdkYXRhOicpICE9PSAwKVxuICAgIHtcbiAgICAgICAgY3Jvc3NvcmlnaW4gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICAvLyBuZXcgSW1hZ2UoKSBicmVha3MgdGV4IGxvYWRpbmcgaW4gc29tZSB2ZXJzaW9ucyBvZiBDaHJvbWUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjM4MDcxXG4gICAgICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpOy8vZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgICAgIGlmIChjcm9zc29yaWdpbilcbiAgICAgICAge1xuICAgICAgICAgICAgaW1hZ2UuY3Jvc3NPcmlnaW4gPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGltYWdlLCBzY2FsZU1vZGUpO1xuICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IGltYWdlVXJsO1xuXG4gICAgICAgIGltYWdlLnNyYyA9IGltYWdlVXJsO1xuXG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gYmFzZVRleHR1cmU7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4gQDJ4IGF0IHRoZSBlbmQgb2YgdGhlIHVybCB3ZSBhcmUgZ29pbmcgdG8gYXNzdW1lIGl0cyBhIGhpZ2hyZXMgaW1hZ2VcbiAgICAgICAgYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHV0aWxzLmdldFJlc29sdXRpb25PZlVybChpbWFnZVVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIGlmICghY2FudmFzLl9waXhpSWQpXG4gICAge1xuICAgICAgICBjYW52YXMuX3BpeGlJZCA9ICdjYW52YXNfJyArIHV0aWxzLnVpZCgpO1xuICAgIH1cblxuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbY2FudmFzLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGNhbnZhcywgc2NhbGVNb2RlKTtcbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuIiwidmFyIEJhc2VSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbi8qKlxuICogQSBSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIFJlbmRlclRleHR1cmUgdGFrZXMgYSBzbmFwc2hvdCBvZiBhbnkgRGlzcGxheSBPYmplY3QgZ2l2ZW4gdG8gaXRzIHJlbmRlciBtZXRob2QuIFRoZSBwb3NpdGlvblxuICogYW5kIHJvdGF0aW9uIG9mIHRoZSBnaXZlbiBEaXNwbGF5IE9iamVjdHMgaXMgaWdub3JlZC4gRm9yIGV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDEwMjQsIDEwMjQsIHsgdmlldzogY2FudmFzLCByYXRpbzogMSB9KTtcbiAqIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKHNwcml0ZSk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgU3ByaXRlIGluIHRoaXMgY2FzZSB3aWxsIGJlIHJlbmRlcmVkIHRvIGEgcG9zaXRpb24gb2YgMCwwLiBUbyByZW5kZXIgdGhpcyBzcHJpdGUgYXQgaXRzIGFjdHVhbFxuICogcG9zaXRpb24gYSBDb250YWluZXIgc2hvdWxkIGJlIHVzZWQ6XG4gKlxuICogYGBganNcbiAqIHZhciBkb2MgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqXG4gKiBkb2MuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqXG4gKiByZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBSZW5kZXJUZXh0dXJlXG4gKiBAcGFyYW0gW3dpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtoZWlnaHQ9MTAwXSB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtzY2FsZU1vZGVdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIFtyZXNvbHV0aW9uPTFdIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICovXG5mdW5jdGlvbiBSZW5kZXJUZXh0dXJlKGJhc2VSZW5kZXJUZXh0dXJlLCBmcmFtZSlcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIFJlbmRlclRleHR1cmUsIHlvdSBtdXN0IHBhc3MgYSByZW5kZXJlciBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIG9iamVjdCB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtCYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICBUZXh0dXJlLmNhbGwodGhpcyxcbiAgICAgICAgYmFzZVJlbmRlclRleHR1cmUsXG4gICAgICAgIGZyYW1lIFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fdXBkYXRlVXZzKCk7XG59XG5cblJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlLnByb3RvdHlwZSk7XG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgUmVuZGVyVGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gdXBkYXRlQmFzZSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBiYXNlVGV4dHVyZS53aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBiZSByZXNpemVkIGFzIHdlbGw/XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB1cGRhdGVCYXNlKVxue1xuICAgXG4gICAgLy9UT0RPIC0gY291bGQgYmUgbm90IHJlcXVpcmVkLi5cbiAgICB0aGlzLnZhbGlkID0gKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTtcblxuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy5jcm9wLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jcm9wLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh1cGRhdGVCYXNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5yZXNpemUod2lkdGgsIGhlaWdodClcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLmNsZWFyKHRoaXMuZnJhbWUpXG4gICAgXG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5iYXNlVGV4dHVyZS5yZW5kZXIodGhpcy5mcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIHRoaXMgdGV4dHVyZS4gSXQgd29ya3MgYnkgY2FsbGluZyBSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0QmFzZTY0LmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0Q2FudmFzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRDYW52YXModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgdGhlIGVudGlyZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbHModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgYSBwaXhlbCB3aXRoaW4gdGhlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbCh0aGlzLmZyYW1lLCB4LCB5KTtcbn07XG5cblJlbmRlclRleHR1cmUuY3JlYXRlID0gZnVuY3Rpb24ocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICByZXR1cm4gbmV3IFJlbmRlclRleHR1cmUobmV3IEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pKTtcbn1cblxuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzID0gcmVxdWlyZSgnLi9UZXh0dXJlVXZzJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZSBvciBwYXJ0IG9mIGFuIGltYWdlLiBJdCBjYW5ub3QgYmUgYWRkZWRcbiAqIHRvIHRoZSBkaXNwbGF5IGxpc3QgZGlyZWN0bHkuIEluc3RlYWQgdXNlIGl0IGFzIHRoZSB0ZXh0dXJlIGZvciBhIFNwcml0ZS4gSWYgbm8gZnJhbWUgaXMgcHJvdmlkZWQgdGhlbiB0aGUgd2hvbGUgaW1hZ2UgaXMgdXNlZC5cbiAqXG4gKiBZb3UgY2FuIGRpcmVjdGx5IGNyZWF0ZSBhIHRleHR1cmUgZnJvbSBhbiBpbWFnZSBhbmQgdGhlbiByZXVzZSBpdCBtdWx0aXBsZSB0aW1lcyBsaWtlIHRoaXMgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIHZhciBzcHJpdGUxID0gbmV3IFBJWEkuU3ByaXRlKHRleHR1cmUpO1xuICogdmFyIHNwcml0ZTIgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gYmFzZVRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV9IFRoZSBiYXNlIHRleHR1cmUgc291cmNlIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZSBmcm9tXG4gKiBAcGFyYW0gW2ZyYW1lXSB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5nbGUgZnJhbWUgb2YgdGhlIHRleHR1cmUgdG8gc2hvd1xuICogQHBhcmFtIFtjcm9wXSB7UElYSS5SZWN0YW5nbGV9IFRoZSBhcmVhIG9mIG9yaWdpbmFsIHRleHR1cmVcbiAqIEBwYXJhbSBbdHJpbV0ge1BJWEkuUmVjdGFuZ2xlfSBUcmltbWVkIHRleHR1cmUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gW3JvdGF0ZV0ge2Jvb2xlYW59IGluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXMgKCB1c2VkIGJ5IHRleHR1cmUgcGFja2VyIClcbiAqL1xuZnVuY3Rpb24gVGV4dHVyZShiYXNlVGV4dHVyZSwgZnJhbWUsIGNyb3AsIHRyaW0sIHJvdGF0ZSlcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIERvZXMgdGhpcyBUZXh0dXJlIGhhdmUgYW55IGZyYW1lIGRhdGEgYXNzaWduZWQgdG8gaXQ/XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubm9GcmFtZSA9IGZhbHNlO1xuXG4gICAgaWYgKCFmcmFtZSlcbiAgICB7XG4gICAgICAgIHRoaXMubm9GcmFtZSA9IHRydWU7XG4gICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuICAgIH1cblxuICAgIGlmIChiYXNlVGV4dHVyZSBpbnN0YW5jZW9mIFRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmFzZVRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy5iYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdHJpbSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy50cmltID0gdHJpbTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgdGhlIHJlbmRlcmVyIGtub3cgaWYgdGhlIHRleHR1cmUgaXMgdmFsaWQuIElmIGl0J3Mgbm90IHRoZW4gaXQgY2Fubm90IGJlIHJlbmRlcmVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHdpbGwgbGV0IGEgcmVuZGVyZXIga25vdyB0aGF0IGEgdGV4dHVyZSBoYXMgYmVlbiB1cGRhdGVkICh1c2VkIG1haW5seSBmb3Igd2ViR0wgdXYgdXBkYXRlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXF1aXJlc1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFdlYkdMIFVWIGRhdGEgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0dXJlIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIGFyZWEgb2YgdGhlIEJhc2VUZXh0dXJlIGltYWdlIHRvIGFjdHVhbGx5IGNvcHkgdG8gdGhlIENhbnZhcyAvIFdlYkdMIHdoZW4gcmVuZGVyaW5nLFxuICAgICAqIGlycmVzcGVjdGl2ZSBvZiB0aGUgYWN0dWFsIGZyYW1lIHNpemUgb3IgcGxhY2VtZW50ICh3aGljaCBjYW4gYmUgaW5mbHVlbmNlZCBieSB0cmltbWVkIHRleHR1cmUgYXRsYXNlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3JvcCA9IGNyb3AgfHwgZnJhbWU7Ly9uZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgcm90YXRlZCBieSA5MCBkZWdyZWVzXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb3RhdGUgPSAhIXJvdGF0ZTtcblxuICAgIGlmIChiYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICBmcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gZnJhbWUgd2Ugc2hvdWxkIG1vbml0b3IgZm9yIGFueSBiYXNlIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5vbigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZS5vbmNlKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZC4gVGhpcyBoYXBwZW5zIGlmIHRoZSBmcmFtZSBvciB0aGUgYmFzZVRleHR1cmUgaXMgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBldmVudCB1cGRhdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0dXJlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqL1xuICAgIGZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBmcmFtZTtcblxuICAgICAgICAgICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHRoaXMud2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMudHJpbSAmJiAhdGhpcy5yb3RhdGUgJiYgKGZyYW1lLnggKyBmcmFtZS53aWR0aCA+IHRoaXMuYmFzZVRleHR1cmUud2lkdGggfHwgZnJhbWUueSArIGZyYW1lLmhlaWdodCA+IHRoaXMuYmFzZVRleHR1cmUuaGVpZ2h0KSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHR1cmUgRXJyb3I6IGZyYW1lIGRvZXMgbm90IGZpdCBpbnNpZGUgdGhlIGJhc2UgVGV4dHVyZSBkaW1lbnNpb25zICcgKyB0aGlzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy90aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuc291cmNlICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuICAgICAgICAgICAgdGhpcy52YWxpZCA9IGZyYW1lICYmIGZyYW1lLndpZHRoICYmIGZyYW1lLmhlaWdodCAmJiB0aGlzLmJhc2VUZXh0dXJlLmhhc0xvYWRlZDtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJpbSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy50cmltLmhlaWdodDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS53aWR0aCA9IHRoaXMudHJpbS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JvcCA9IGZyYW1lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy52YWxpZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVVdnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhpcyB0ZXh0dXJlIG9uIHRoZSBncHUuXG4gKlxuICovXG5UZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYmFzZVRleHR1cmUudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgbG9hZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZUxvYWRlZCA9IGZ1bmN0aW9uIChiYXNlVGV4dHVyZSlcbntcbiAgICAvLyBUT0RPIHRoaXMgY29kZSBsb29rcyBjb25mdXNpbmcuLiBib28gdG8gYWJ1c2luZyBnZXR0ZXJzIGFuZCBzZXR0ZXJzcyFcbiAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMuX2ZyYW1lO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgdXBkYXRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLm9uQmFzZVRleHR1cmVVcGRhdGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZT1mYWxzZV0ge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZSlcbntcbiAgICBpZiAodGhpcy5iYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGlmIChkZXN0cm95QmFzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2ZyYW1lID0gbnVsbDtcbiAgICB0aGlzLl91dnMgPSBudWxsO1xuICAgIHRoaXMudHJpbSA9IG51bGw7XG4gICAgdGhpcy5jcm9wID0gbnVsbDtcblxuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIHRoaXMub2ZmKCdkaXNwb3NlJywgdGhpcy5kaXNwb3NlLCB0aGlzKTtcbiAgICB0aGlzLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRleHR1cmUgb2JqZWN0IHRoYXQgYWN0cyB0aGUgc2FtZSBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9XG4gKi9cblRleHR1cmUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUodGhpcy5iYXNlVGV4dHVyZSwgdGhpcy5mcmFtZSwgdGhpcy5jcm9wLCB0aGlzLnRyaW0sIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuX3VwZGF0ZVV2cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLl91dnMpXG4gICAge1xuICAgICAgICB0aGlzLl91dnMgPSBuZXcgVGV4dHVyZVV2cygpO1xuICAgIH1cblxuICAgIHRoaXMuX3V2cy5zZXQodGhpcy5jcm9wLCB0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLnJvdGF0ZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBUZXh0dXJlIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGNyb3Nzb3JpZ2luIHtib29sZWFufSBXaGV0aGVyIHJlcXVlc3RzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGNyb3Nzb3JpZ2luXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbiAgICAgICAgdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXSA9IHRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZScpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhcywgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW8ge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAodHlwZW9mIHZpZGVvID09PSAnc3RyaW5nJylcbiAgICB7XG4gICAgICAgIHJldHVybiBUZXh0dXJlLmZyb21WaWRlb1VybCh2aWRlbywgc2NhbGVNb2RlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgdmlkZW8gdXJsLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1VybCB7c3RyaW5nfVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gQSBUZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbVZpZGVvVXJsID0gZnVuY3Rpb24gKHZpZGVvVXJsLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh2aWRlb1VybCwgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEFkZHMgYSB0ZXh0dXJlIHRvIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLiBUaGlzIGNhY2hlIGlzIHNoYXJlZCBhY3Jvc3MgdGhlIHdob2xlIFBJWEkgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSBUZXh0dXJlIHRvIGFkZCB0byB0aGUgY2FjaGUuXG4gKiBAcGFyYW0gaWQge3N0cmluZ30gVGhlIGlkIHRoYXQgdGhlIHRleHR1cmUgd2lsbCBiZSBzdG9yZWQgYWdhaW5zdC5cbiAqL1xuVGV4dHVyZS5hZGRUZXh0dXJlVG9DYWNoZSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBpZClcbntcbiAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdID0gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgdGV4dHVyZSBmcm9tIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgb2YgdGhlIHRleHR1cmUgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0aGF0IHdhcyByZW1vdmVkXG4gKi9cblRleHR1cmUucmVtb3ZlVGV4dHVyZUZyb21DYWNoZSA9IGZ1bmN0aW9uIChpZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtpZF07XG5cbiAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcbiAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpZF07XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogQW4gZW1wdHkgdGV4dHVyZSwgdXNlZCBvZnRlbiB0byBub3QgaGF2ZSB0byBjcmVhdGUgbXVsdGlwbGUgZW1wdHkgdGV4dHVyZXMuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmUuRU1QVFkgPSBuZXcgVGV4dHVyZShuZXcgQmFzZVRleHR1cmUoKSk7XG4iLCJcbi8qKlxuICogQSBzdGFuZGFyZCBvYmplY3QgdG8gc3RvcmUgdGhlIFV2cyBvZiBhIHRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBUZXh0dXJlVXZzKClcbntcbiAgICB0aGlzLngwID0gMDtcbiAgICB0aGlzLnkwID0gMDtcblxuICAgIHRoaXMueDEgPSAxO1xuICAgIHRoaXMueTEgPSAwO1xuXG4gICAgdGhpcy54MiA9IDE7XG4gICAgdGhpcy55MiA9IDE7XG5cbiAgICB0aGlzLngzID0gMDtcbiAgICB0aGlzLnkzID0gMTtcblxuICAgIHRoaXMueHkwX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTFfdWludDMyID0gMDtcbiAgICB0aGlzLnh5Ml91aW50MzIgPSAwO1xuICAgIHRoaXMueHkzX3VpbnQzMiA9IDA7XG5cbiAgICB0aGlzLnV2c191aW50MzIgPSBuZXcgVWludDMyQXJyYXkoNClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlVXZzO1xuXG4vKipcbiAqIFNldHMgdGhlIHRleHR1cmUgVXZzIGJhc2VkIG9uIHRoZSBnaXZlbiBmcmFtZSBpbmZvcm1hdGlvblxuICogQHBhcmFtIGZyYW1lIHtQSVhJLlJlY3RhbmdsZX1cbiAqIEBwYXJhbSBiYXNlRnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIHJvdGF0ZSB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIGZyYW1lIGlzIHJvdGF0ZWRcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmVVdnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChmcmFtZSwgYmFzZUZyYW1lLCByb3RhdGUpXG57XG4gICAgdmFyIHR3ID0gYmFzZUZyYW1lLndpZHRoO1xuICAgIHZhciB0aCA9IGJhc2VGcmFtZS5oZWlnaHQ7XG5cbiAgICBpZihyb3RhdGUpXG4gICAge1xuICAgICAgICB0aGlzLngwID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUuaGVpZ2h0KSAvIHR3O1xuICAgICAgICB0aGlzLnkxID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkyID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gZnJhbWUueSAvIHRoO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMueDAgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MiA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gKGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQpIC8gdGg7XG4gICAgfVxuXG4gICAgdGhpcy51dnNfdWludDMyWzBdID0gKCgodGhpcy55MCAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngwICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbMV0gPSAoKCh0aGlzLnkxICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDEgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsyXSA9ICgoKHRoaXMueTIgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MiAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzNdID0gKCgodGhpcy55MyAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngzICogNjU1MzUpICYgMHhGRkZGKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBvZiBhIFtwbGF5aW5nXSBWaWRlby5cbiAqXG4gKiBWaWRlbyBiYXNlIHRleHR1cmVzIG1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kIGluIHRoZWlyIGNyZWF0aW9uIHByb2Nlc3MuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZCBpbiBzZXZlcmFsIHdheXMsIHN1Y2ggYXM6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwoJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0Jyk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh7IHNyYzogJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoWycvdmlkZW8ud2VibScsICcvdmlkZW8ubXA0J10pO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzKFtcbiAqICAgICB7IHNyYzogJy92aWRlby53ZWJtJywgbWltZTogJ3ZpZGVvL3dlYm0nIH0sXG4gKiAgICAgeyBzcmM6ICcvdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfVxuICogXSk7XG4gKiBgYGBcbiAqXG4gKiBTZWUgdGhlIFtcImRldXNcIiBkZW1vXShodHRwOi8vd3d3Lmdvb2Rib3lkaWdpdGFsLmNvbS9waXhpanMvZXhhbXBsZXMvZGV1cy8pLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5CYXNlVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzb3VyY2Uge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIFZpZGVvQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFzb3VyY2UpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHZpZGVvIHNvdXJjZSBlbGVtZW50IHNwZWNpZmllZC4nKTtcbiAgICB9XG5cbiAgICAvLyBob29rIGluIGhlcmUgdG8gY2hlY2sgaWYgdmlkZW8gaXMgYWxyZWFkeSBhdmFpbGFibGUuXG4gICAgLy8gQmFzZVRleHR1cmUgbG9va3MgZm9yIGEgc291cmNlLmNvbXBsZXRlIGJvb2xlYW4sIHBsdXMgd2lkdGggJiBoZWlnaHQuXG5cbiAgICBpZiAoKHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9FTk9VR0hfREFUQSB8fCBzb3VyY2UucmVhZHlTdGF0ZSA9PT0gc291cmNlLkhBVkVfRlVUVVJFX0RBVEEpICYmIHNvdXJjZS53aWR0aCAmJiBzb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgc291cmNlLmNvbXBsZXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBCYXNlVGV4dHVyZS5jYWxsKHRoaXMsIHNvdXJjZSwgc2NhbGVNb2RlKTtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCB0aGUgYmFzZSB0ZXh0dXJlIGF1dG9tYXRpY2FsbHkgdXBkYXRlIGl0c2VsZiwgc2V0IHRvIHRydWUgYnkgZGVmYXVsdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG5cbiAgICB0aGlzLl9vblVwZGF0ZSA9IHRoaXMuX29uVXBkYXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fb25DYW5QbGF5ID0gdGhpcy5fb25DYW5QbGF5LmJpbmQodGhpcyk7XG5cbiAgICBpZiAoIXNvdXJjZS5jb21wbGV0ZSlcbiAgICB7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgdGhpcy5fb25DYW5QbGF5KTtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICAvLyBzdGFydGVkIHBsYXlpbmcuLlxuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX29uUGxheVN0YXJ0LmJpbmQodGhpcykpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9vblBsYXlTdG9wLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHRoaXMuX19sb2FkZWQgPSBmYWxzZTtcbn1cblxuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZpZGVvQmFzZVRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFZpZGVvQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVGhlIGludGVybmFsIHVwZGF0ZSBsb29wIG9mIHRoZSB2aWRlbyBiYXNlIHRleHR1cmUsIG9ubHkgcnVucyB3aGVuIGF1dG9VcGRhdGUgaXMgc2V0IHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25VcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJ1bnMgdGhlIHVwZGF0ZSBsb29wIHdoZW4gdGhlIHZpZGVvIGlzIHJlYWR5IHRvIHBsYXlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5hdXRvVXBkYXRlKVxuICAgIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9vblVwZGF0ZSk7XG4gICAgICAgIHRoaXMuYXV0b1VwZGF0ZSA9IHRydWU7XG4gICAgfVxufTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIGEgcGF1c2UgZXZlbnQgaXMgdHJpZ2dlcmVkLCBzdG9wcyB0aGUgdXBkYXRlIGxvb3BcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gdGhlIHZpZGVvIGlzIGxvYWRlZCBhbmQgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vbkNhblBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX29uQ2FuUGxheSk7XG5cbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuc291cmNlLnZpZGVvV2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5zb3VyY2UudmlkZW9IZWlnaHQ7XG5cbiAgICAgICAgdGhpcy5zb3VyY2UucGxheSgpO1xuXG4gICAgICAgIC8vIHByZXZlbnQgbXVsdGlwbGUgbG9hZGVkIGRpc3BhdGNoZXMuLlxuICAgICAgICBpZiAoIXRoaXMuX19sb2FkZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX19sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5zb3VyY2UuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB0aGlzLnNvdXJjZS5fcGl4aUlkIF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNvdXJjZS5fcGl4aUlkO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIE1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlZpZGVvQmFzZVRleHR1cmV9XG4gKi9cblZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvID0gZnVuY3Rpb24gKHZpZGVvLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCF2aWRlby5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgdmlkZW8uX3BpeGlJZCA9ICd2aWRlb18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt2aWRlby5fcGl4aUlkXTtcblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBWaWRlb0Jhc2VUZXh0dXJlKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB2aWRlby5fcGl4aUlkIF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgQmFzZVRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIHZpZGVvIGVsZW1lbnQuXG4gKiBUaGlzIEJhc2VUZXh0dXJlIGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIGEgdGV4dHVyZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1NyYyB7c3RyaW5nfG9iamVjdHxzdHJpbmdbXXxvYmplY3RbXX0gVGhlIFVSTChzKSBmb3IgdGhlIHZpZGVvLlxuICogQHBhcmFtIFt2aWRlb1NyYy5zcmNdIHtzdHJpbmd9IE9uZSBvZiB0aGUgc291cmNlIHVybHMgZm9yIHRoZSB2aWRlb1xuICogQHBhcmFtIFt2aWRlb1NyYy5taW1lXSB7c3RyaW5nfSBUaGUgbWltZXR5cGUgb2YgdGhlIHZpZGVvIChlLmcuICd2aWRlby9tcDQnKS4gSWYgbm90IHNwZWNpZmllZFxuICogIHRoZSB1cmwncyBleHRlbnNpb24gd2lsbCBiZSB1c2VkIGFzIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgbWltZSB0eXBlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsID0gZnVuY3Rpb24gKHZpZGVvU3JjLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcblxuICAgIC8vIGFycmF5IG9mIG9iamVjdHMgb3Igc3RyaW5nc1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZpZGVvU3JjKSlcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlkZW9TcmMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyY1tpXS5zcmMgfHwgdmlkZW9TcmNbaV0sIHZpZGVvU3JjW2ldLm1pbWUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzaW5nbGUgb2JqZWN0IG9yIHN0cmluZ1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyYy5zcmMgfHwgdmlkZW9TcmMsIHZpZGVvU3JjLm1pbWUpKTtcbiAgICB9XG5cbiAgICB2aWRlby5sb2FkKCk7XG4gICAgdmlkZW8ucGxheSgpO1xuXG4gICAgcmV0dXJuIFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpO1xufTtcblxuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyA9IFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybDtcblxuZnVuY3Rpb24gY3JlYXRlU291cmNlKHBhdGgsIHR5cGUpXG57XG4gICAgaWYgKCF0eXBlKVxuICAgIHtcbiAgICAgICAgdHlwZSA9ICd2aWRlby8nICsgcGF0aC5zdWJzdHIocGF0aC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpO1xuXG4gICAgc291cmNlLnNyYyA9IHBhdGg7XG4gICAgc291cmNlLnR5cGUgPSB0eXBlO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn1cbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIC8vIEludGVybmFsIGV2ZW50IHVzZWQgYnkgY29tcG9zZWQgZW1pdHRlclxuICAgIFRJQ0sgPSAndGljayc7XG5cbi8qKlxuICogQSBUaWNrZXIgY2xhc3MgdGhhdCBydW5zIGFuIHVwZGF0ZSBsb29wIHRoYXQgb3RoZXIgb2JqZWN0cyBsaXN0ZW4gdG8uXG4gKiBUaGlzIGNsYXNzIGlzIGNvbXBvc2VkIGFyb3VuZCBhbiBFdmVudEVtaXR0ZXIgb2JqZWN0IHRvIGFkZCBsaXN0ZW5lcnNcbiAqIG1lYW50IGZvciBleGVjdXRpb24gb24gdGhlIG5leHQgcmVxdWVzdGVkIGFuaW1hdGlvbiBmcmFtZS5cbiAqIEFuaW1hdGlvbiBmcmFtZXMgYXJlIHJlcXVlc3RlZCBvbmx5IHdoZW4gbmVjZXNzYXJ5LFxuICogZS5nLiBXaGVuIHRoZSB0aWNrZXIgaXMgc3RhcnRlZCBhbmQgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlclxuICovXG5mdW5jdGlvbiBUaWNrZXIoKVxue1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0aWNrIG1ldGhvZCBib3VuZCB0byB0aWNrZXIgaW5zdGFuY2UuXG4gICAgICogVGhpcyBpcyBiZWNhdXNlIGluIGVhcmx5IDIwMTUsIEZ1bmN0aW9uLmJpbmRcbiAgICAgKiBpcyBzdGlsbCA2MCUgc2xvd2VyIGluIGhpZ2ggcGVyZm9ybWFuY2Ugc2NlbmFyaW9zLlxuICAgICAqIEFsc28gc2VwYXJhdGluZyBmcmFtZSByZXF1ZXN0cyBmcm9tIHVwZGF0ZSBtZXRob2RcbiAgICAgKiBzbyBsaXN0ZW5lcnMgbWF5IGJlIGNhbGxlZCBhdCBhbnkgdGltZSBhbmQgd2l0aFxuICAgICAqIGFueSBhbmltYXRpb24gQVBJLCBqdXN0IGludm9rZSB0aWNrZXIudXBkYXRlKHRpbWUpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90aWNrID0gZnVuY3Rpb24gX3RpY2sodGltZSkge1xuXG4gICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgICAgIGlmIChfdGhpcy5zdGFydGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBJbnZva2UgbGlzdGVuZXJzIG5vd1xuICAgICAgICAgICAgX3RoaXMudXBkYXRlKHRpbWUpO1xuICAgICAgICAgICAgLy8gTGlzdGVuZXIgc2lkZSBlZmZlY3RzIG1heSBoYXZlIG1vZGlmaWVkIHRpY2tlciBzdGF0ZS5cbiAgICAgICAgICAgIGlmIChfdGhpcy5zdGFydGVkICYmIF90aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgX3RoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMuX3RpY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGVtaXR0ZXIgdXNlZCB0byBmaXJlICd0aWNrJyBldmVudFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGN1cnJlbnQgZnJhbWUgcmVxdWVzdCBJRFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHZhbHVlIG1hbmFnZWQgYnkgbWluRlBTIHByb3BlcnR5IHNldHRlciBhbmQgZ2V0dGVyLlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gYWxsb3dlZCBtaWxsaXNlY29uZHMgYmV0d2VlbiB1cGRhdGVzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4RWxhcHNlZE1TID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhpcyB0aWNrZXIgc2hvdWxkIGludm9rZSB0aGUgbWV0aG9kXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdGFydH0gYXV0b21hdGljYWxseVxuICAgICAqIHdoZW4gYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9TdGFydCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2NhbGFyIHRpbWUgdmFsdWUgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgc2V0dGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI21pbkZQU31cbiAgICAgKiBhbmQgaXMgc2NhbGVkIHdpdGgge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0uXG4gICAgICogKipOb3RlOioqIFRoZSBjYXAgbWF5IGJlIGV4Y2VlZGVkIGJ5IHNjYWxpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZGVsdGFUaW1lID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRpbWUgZWxhcHNlZCBpbiBtaWxsaXNlY29uZHMgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogT3Bwb3NlZCB0byB3aGF0IHRoZSBzY2FsYXIge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9XG4gICAgICogaXMgYmFzZWQsIHRoaXMgdmFsdWUgaXMgbmVpdGhlciBjYXBwZWQgbm9yIHNjYWxlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEgLyBUQVJHRVRfRlBNU1xuICAgICAqL1xuICAgIHRoaXMuZWxhcHNlZE1TID0gMSAvIENPTlNULlRBUkdFVF9GUE1TOyAvLyBkZWZhdWx0IHRvIHRhcmdldCBmcmFtZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCB0aW1lIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjdXBkYXRlfSB3YXMgaW52b2tlZC5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGFsc28gcmVzZXQgaW50ZXJuYWxseSBvdXRzaWRlIG9mIGludm9raW5nXG4gICAgICogdXBkYXRlLCBidXQgb25seSB3aGVuIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gICAgICogSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERPTUhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgICogdGhpcyB2YWx1ZSB3aWxsIGhhdmUgYSBwcmVjaXNpb24gb2YgMSDCtXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5sYXN0VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBGYWN0b3Igb2YgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBTY2FsZXMgdGlja2VyLmRlbHRhVGltZSB0byB3aGF0IHdvdWxkIGJlXG4gICAgICogLy8gdGhlIGVxdWl2YWxlbnQgb2YgYXBwcm94aW1hdGVseSAxMjAgRlBTXG4gICAgICogdGlja2VyLnNwZWVkID0gMjtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5zcGVlZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBoYXMgYmVlbiBzdGFydGVkLlxuICAgICAqIGB0cnVlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogYGZhbHNlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0b3B9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBXaGlsZSBgZmFsc2VgLCB0aGlzIHZhbHVlIG1heSBjaGFuZ2UgdG8gYHRydWVgIGluIHRoZVxuICAgICAqIGV2ZW50IG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBiZWluZyBgdHJ1ZWBcbiAgICAgKiBhbmQgYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlja2VyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZXMgcGVyIHNlY29uZCBhdCB3aGljaCB0aGlzIHRpY2tlciBpcyBydW5uaW5nLlxuICAgICAqIFRoZSBkZWZhdWx0IGlzIGFwcHJveGltYXRlbHkgNjAgaW4gbW9zdCBtb2Rlcm4gYnJvd3NlcnMuXG4gICAgICogKipOb3RlOioqIFRoaXMgZG9lcyBub3QgZmFjdG9yIGluIHRoZSB2YWx1ZSBvZlxuICAgICAqIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3BlZWR9LCB3aGljaCBpcyBzcGVjaWZpY1xuICAgICAqIHRvIHNjYWxpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuZWxhcHNlZE1TO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIG1pbGxpc2Vjb25kcyBhbGxvd2VkIHRvXG4gICAgICogZWxhcHNlIGJldHdlZW4gaW52b2tpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9LlxuICAgICAqIFRoaXMgdmFsdWUgaXMgdXNlZCB0byBjYXAge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICAgICAqIGJ1dCBkb2VzIG5vdCBlZmZlY3QgdGhlIG1lYXN1cmVkIHZhbHVlIG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjRlBTfS5cbiAgICAgKiBXaGVuIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSBpdCBpcyBjbGFtcGVkIHRvIGEgdmFsdWUgYmV0d2VlblxuICAgICAqIGAwYCBhbmQgYFBJWEkuVEFSR0VUX0ZQTVMgKiAxMDAwYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSS50aWNrZXIuVGlja2VyI1xuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgbWluRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuX21heEVsYXBzZWRNUztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbihmcHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIENsYW1wOiAwIHRvIFRBUkdFVF9GUE1TXG4gICAgICAgICAgICB2YXIgbWluRlBNUyA9IE1hdGgubWluKE1hdGgubWF4KDAsIGZwcykgLyAxMDAwLCBDT05TVC5UQVJHRVRfRlBNUyk7XG4gICAgICAgICAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxIC8gbWluRlBNUztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lLlxuICogSWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHkgYmVlbiByZXF1ZXN0ZWQsIGFuZCBpZiB0aGUgaW50ZXJuYWxcbiAqIGVtaXR0ZXIgaGFzIGxpc3RlbmVycywgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3JlcXVlc3RJZk5lZWRlZCA9IGZ1bmN0aW9uIF9yZXF1ZXN0SWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICAvLyBlbnN1cmUgY2FsbGJhY2tzIGdldCBjb3JyZWN0IGRlbHRhXG4gICAgICAgIHRoaXMubGFzdFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX3RpY2spO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSBjYW5jZWxzIGEgcGVuZGluZyBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fY2FuY2VsSWZOZWVkZWQgPSBmdW5jdGlvbiBfY2FuY2VsSWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgIT09IG51bGwpXG4gICAge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZXF1ZXN0SWQpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiB0aGUgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQgaXQgY2hlY2tzIGlmIGEgZnJhbWUgaGFzIG5vdCBhbHJlYWR5XG4gKiBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbCBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMuIElmIHRoZXNlXG4gKiBjb25kaXRpb25zIGFyZSBtZXQsIGEgbmV3IGZyYW1lIGlzIHJlcXVlc3RlZC4gSWYgdGhlIHRpY2tlciBoYXMgbm90XG4gKiBiZWVuIHN0YXJ0ZWQsIGJ1dCBhdXRvU3RhcnQgaXMgYHRydWVgLCB0aGVuIHRoZSB0aWNrZXIgc3RhcnRzIG5vdyxcbiAqIGFuZCBjb250aW51ZXMgd2l0aCB0aGUgcHJldmlvdXMgY29uZGl0aW9ucyB0byByZXF1ZXN0IGEgbmV3IGZyYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3N0YXJ0SWZQb3NzaWJsZSA9IGZ1bmN0aW9uIF9zdGFydElmUG9zc2libGUoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5hdXRvU3RhcnQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29ufSBpbnRlcm5hbGx5IGZvciB0aGVcbiAqIGludGVybmFsICd0aWNrJyBldmVudC4gSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsXG4gKiBhbmQgaWYgc28gaXQgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGF0IHRoaXMgcG9pbnQuXG4gKlxuICogQHBhcmFtIGZuIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGFkZGVkIGZvciB1cGRhdGVzXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbihUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29uY2V9IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIG9uZSB1cGRhdGVcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZE9uY2UgPSBmdW5jdGlvbiBhZGRPbmNlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub25jZShUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29mZn0gaW50ZXJuYWxseSBmb3IgJ3RpY2snIGV2ZW50LlxuICogSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMgZm9yICd0aWNrJyBldmVudC5cbiAqIElmIGl0IGRvZXMsIHRoZW4gaXQgY2FuY2VscyB0aGUgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwYXJhbSBbZm5dIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIHJlbW92ZWRcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dCB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub2ZmKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIGlmICghdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgbGlzdGVuZXJzXG4gKiBhIG5ldyBhbmltYXRpb24gZnJhbWUgaXMgcmVxdWVzdGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiBzdGFydCgpXG57XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSB0aWNrZXIuIElmIHRoZSB0aWNrZXIgaGFzIHJlcXVlc3RlZFxuICogYW4gYW5pbWF0aW9uIGZyYW1lIGl0IGlzIGNhbmNlbGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uIHN0b3AoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2FuY2VsSWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRyaWdnZXJzIGFuIHVwZGF0ZS4gQW4gdXBkYXRlIGVudGFpbHMgc2V0dGluZyB0aGVcbiAqIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNlbGFwc2VkTVN9LFxuICogdGhlIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICogaW52b2tpbmcgYWxsIGxpc3RlbmVycyB3aXRoIGN1cnJlbnQgZGVsdGFUaW1lLFxuICogYW5kIHRoZW4gZmluYWxseSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbGFzdFRpbWV9XG4gKiB3aXRoIHRoZSB2YWx1ZSBvZiBjdXJyZW50VGltZSB0aGF0IHdhcyBwcm92aWRlZC5cbiAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgYW5pbWF0aW9uXG4gKiBmcmFtZSBjYWxsYmFja3MgaWYgdGhlIHRpY2tlciBpbnN0YW5jZSBoYXMgYmVlbiBzdGFydGVkXG4gKiBhbmQgbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqXG4gKiBAcGFyYW0gW2N1cnJlbnRUaW1lPXBlcmZvcm1hbmNlLm5vdygpXSB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9IHRoZSBjdXJyZW50IHRpbWUgb2YgZXhlY3V0aW9uXG4gKi9cblRpY2tlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKGN1cnJlbnRUaW1lKVxue1xuICAgIHZhciBlbGFwc2VkTVM7XG5cbiAgICAvLyBBbGxvdyBjYWxsaW5nIHVwZGF0ZSBkaXJlY3RseSB3aXRoIGRlZmF1bHQgY3VycmVudFRpbWUuXG4gICAgY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSB8fCBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAvLyBTYXZlIHVuY2FwcGVkIGVsYXBzZWRNUyBmb3IgbWVhc3VyZW1lbnRcbiAgICBlbGFwc2VkTVMgPSB0aGlzLmVsYXBzZWRNUyA9IGN1cnJlbnRUaW1lIC0gdGhpcy5sYXN0VGltZTtcblxuICAgIC8vIGNhcCB0aGUgbWlsbGlzZWNvbmRzIGVsYXBzZWQgdXNlZCBmb3IgZGVsdGFUaW1lXG4gICAgaWYgKGVsYXBzZWRNUyA+IHRoaXMuX21heEVsYXBzZWRNUylcbiAgICB7XG4gICAgICAgIGVsYXBzZWRNUyA9IHRoaXMuX21heEVsYXBzZWRNUztcbiAgICB9XG5cbiAgICB0aGlzLmRlbHRhVGltZSA9IGVsYXBzZWRNUyAqIENPTlNULlRBUkdFVF9GUE1TICogdGhpcy5zcGVlZDtcblxuICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgYWRkZWQgdG8gaW50ZXJuYWwgZW1pdHRlclxuICAgIHRoaXMuX2VtaXR0ZXIuZW1pdChUSUNLLCB0aGlzLmRlbHRhVGltZSk7XG5cbiAgICB0aGlzLmxhc3RUaW1lID0gY3VycmVudFRpbWU7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRpY2tlcjtcbiIsInZhciBUaWNrZXIgPSByZXF1aXJlKCcuL1RpY2tlcicpO1xuXG4vKipcbiAqIFRoZSBzaGFyZWQgdGlja2VyIGluc3RhbmNlIHVzZWQgYnkge0BsaW5rIFBJWEkuZXh0cmFzLk1vdmllQ2xpcH0uXG4gKiBhbmQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqIFRoZSBwcm9wZXJ0eSB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2F1dG9TdGFydH0gaXMgc2V0IHRvIGB0cnVlYFxuICogZm9yIHRoaXMgaW5zdGFuY2UuIFBsZWFzZSBmb2xsb3cgdGhlIGV4YW1wbGVzIGZvciB1c2FnZSwgaW5jbHVkaW5nXG4gKiBob3cgdG8gb3B0LW91dCBvZiBhdXRvLXN0YXJ0aW5nIHRoZSBzaGFyZWQgdGlja2VyLlxuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgdGlja2VyID0gUElYSS50aWNrZXIuc2hhcmVkO1xuICogLy8gU2V0IHRoaXMgdG8gcHJldmVudCBzdGFydGluZyB0aGlzIHRpY2tlciB3aGVuIGxpc3RlbmVycyBhcmUgYWRkZWQuXG4gKiAvLyBCeSBkZWZhdWx0IHRoaXMgaXMgdHJ1ZSBvbmx5IGZvciB0aGUgUElYSS50aWNrZXIuc2hhcmVkIGluc3RhbmNlLlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogLy8gRllJLCBjYWxsIHRoaXMgdG8gZW5zdXJlIHRoZSB0aWNrZXIgaXMgc3RvcHBlZC4gSXQgc2hvdWxkIGJlIHN0b3BwZWRcbiAqIC8vIGlmIHlvdSBoYXZlIG5vdCBhdHRlbXB0ZWQgdG8gcmVuZGVyIGFueXRoaW5nIHlldC5cbiAqIHRpY2tlci5zdG9wKCk7XG4gKiAvLyBDYWxsIHRoaXMgd2hlbiB5b3UgYXJlIHJlYWR5IGZvciBhIHJ1bm5pbmcgc2hhcmVkIHRpY2tlci5cbiAqIHRpY2tlci5zdGFydCgpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBZb3UgbWF5IHVzZSB0aGUgc2hhcmVkIHRpY2tlciB0byByZW5kZXIuLi5cbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDgwMCwgNjAwKTtcbiAqIHZhciBzdGFnZSA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogdmFyIGludGVyYWN0aW9uTWFuYWdlciA9IFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyKTtcbiAqIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocmVuZGVyZXIudmlldyk7XG4gKiB0aWNrZXIuYWRkKGZ1bmN0aW9uICh0aW1lKSB7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBPciB5b3UgY2FuIGp1c3QgdXBkYXRlIGl0IG1hbnVhbGx5LlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogdGlja2VyLnN0b3AoKTtcbiAqIGZ1bmN0aW9uIGFuaW1hdGUodGltZSkge1xuICogICAgIHRpY2tlci51cGRhdGUodGltZSk7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XG4gKiB9XG4gKiBhbmltYXRlKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAqXG4gKiBAdHlwZSB7UElYSS50aWNrZXIuVGlja2VyfVxuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbnZhciBzaGFyZWQgPSBuZXcgVGlja2VyKCk7XG5zaGFyZWQuYXV0b1N0YXJ0ID0gdHJ1ZTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudGlja2VyXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIHNoYXJlZDogc2hhcmVkLFxuICAgIFRpY2tlcjogVGlja2VyXG59O1xuIiwiLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuXG52YXIgR0xfTUFQID0ge307XG5cblxudmFyIGNyZWF0ZUluZGljZXNGb3JRdWFkcyA9IGZ1bmN0aW9uIChzaXplKVxue1xuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYXJyYXksIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgIFxuICAgIHZhciB0b3RhbEluZGljZXMgPSBzaXplICogNjtcblxuICAgIHZhciBpbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHRvdGFsSW5kaWNlcyk7XG5cblx0Ly8gZmlsbCB0aGUgaW5kaWNlcyB3aXRoIHRoZSBxdWFkcyB0byBkcmF3XG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCB0b3RhbEluZGljZXM7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kaWNlcztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzOyIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLnV0aWxzXG4gKi9cbnZhciB1dGlscyA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIF91aWQ6IDAsXG4gICAgX3NhaWRIZWxsbzogZmFsc2UsXG5cbiAgICBFdmVudEVtaXR0ZXI6ICAgcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIHBsdWdpblRhcmdldDogICByZXF1aXJlKCcuL3BsdWdpblRhcmdldCcpLFxuICAgIGFzeW5jOiAgICAgICAgICByZXF1aXJlKCdhc3luYycpLFxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllclxuICAgICAqXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllciB0byB1c2UuXG4gICAgICovXG4gICAgdWlkOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICsrdXRpbHMuX3VpZDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBoZXggY29sb3IgbnVtYmVyIHRvIGFuIFtSLCBHLCBCXSBhcnJheVxuICAgICAqXG4gICAgICogQHBhcmFtIGhleCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSAge251bWJlcltdfSBbb3V0PVtdXVxuICAgICAqIEByZXR1cm4ge251bWJlcltdfSBBbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIFtSLCBHLCBCXSBvZiB0aGUgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnJnYjogZnVuY3Rpb24gKGhleCwgb3V0KVxuICAgIHtcbiAgICAgICAgb3V0ID0gb3V0IHx8IFtdO1xuXG4gICAgICAgIG91dFswXSA9IChoZXggPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzFdID0gKGhleCA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIG91dFsyXSA9IChoZXggJiAweEZGKSAvIDI1NTtcblxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5nIGNvbG9yLlxuICAgICAqL1xuICAgIGhleDJzdHJpbmc6IGZ1bmN0aW9uIChoZXgpXG4gICAge1xuICAgICAgICBoZXggPSBoZXgudG9TdHJpbmcoMTYpO1xuICAgICAgICBoZXggPSAnMDAwMDAwJy5zdWJzdHIoMCwgNiAtIGhleC5sZW5ndGgpICsgaGV4O1xuXG4gICAgICAgIHJldHVybiAnIycgKyBoZXg7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgY29sb3IgYXMgYW4gW1IsIEcsIEJdIGFycmF5IHRvIGEgaGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIHJnYiB7bnVtYmVyW119XG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgY29sb3IgbnVtYmVyXG4gICAgICovXG4gICAgcmdiMmhleDogZnVuY3Rpb24gKHJnYilcbiAgICB7XG4gICAgICAgIHJldHVybiAoKHJnYlswXSoyNTUgPDwgMTYpICsgKHJnYlsxXSoyNTUgPDwgOCkgKyByZ2JbMl0qMjU1KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIENhbnZhcyBCbGVuZE1vZGVzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnJvd3NlclxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciB0aGV5IGFyZSBzdXBwb3J0ZWRcbiAgICAgKi9cbiAgICBjYW5Vc2VOZXdDYW52YXNCbGVuZE1vZGVzOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwbmdIZWFkID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVFBQUFBQkFRTUFBQUREOHAyT0FBQUFBMUJNVkVYLyc7XG4gICAgICAgIHZhciBwbmdFbmQgPSAnQUFBQUNrbEVRVlFJMTJOZ0FBQUFBZ0FCNGlHOE13QUFBQUJKUlU1RXJrSmdnZz09JztcblxuICAgICAgICB2YXIgbWFnZW50YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBtYWdlbnRhLnNyYyA9IHBuZ0hlYWQgKyAnQVA4MDRPYTYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciB5ZWxsb3cgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgeWVsbG93LnNyYyA9IHBuZ0hlYWQgKyAnL3dDS3h2UkYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY2FudmFzLndpZHRoID0gNjtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IDE7XG5cbiAgICAgICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShtYWdlbnRhLCAwLCAwKTtcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoeWVsbG93LCAyLCAwKTtcblxuICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDIsMCwxLDEpLmRhdGE7XG5cbiAgICAgICAgcmV0dXJuIChkYXRhWzBdID09PSAyNTUgJiYgZGF0YVsxXSA9PT0gMCAmJiBkYXRhWzJdID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBudW1iZXIsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgdGFrZW4gZnJvbSBTdGFybGluZyBGcmFtZXdvcmsgYXMgaXRzIHByZXR0eSBuZWF0IDspXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbnVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7bnVtYmVyfSB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqL1xuICAgIGdldE5leHRQb3dlck9mVHdvOiBmdW5jdGlvbiAobnVtYmVyKVxuICAgIHtcbiAgICAgICAgLy8gc2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Bvd2VyX29mX3R3byNGYXN0X2FsZ29yaXRobV90b19jaGVja19pZl9hX3Bvc2l0aXZlX251bWJlcl9pc19hX3Bvd2VyX29mX3R3b1xuICAgICAgICBpZiAobnVtYmVyID4gMCAmJiAobnVtYmVyICYgKG51bWJlciAtIDEpKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSAxO1xuXG4gICAgICAgICAgICB3aGlsZSAocmVzdWx0IDwgbnVtYmVyKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA8PD0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBjaGVja3MgaWYgdGhlIGdpdmVuIHdpZHRoIGFuZCBoZWlnaHQgbWFrZSBhIHBvd2VyIG9mIHR3byByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSBoZWlnaHQge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzUG93ZXJPZlR3bzogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm4gKHdpZHRoID4gMCAmJiAod2lkdGggJiAod2lkdGggLSAxKSkgPT09IDAgJiYgaGVpZ2h0ID4gMCAmJiAoaGVpZ2h0ICYgKGhlaWdodCAtIDEpKSA9PT0gMCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGdldCB0aGUgcmVzb2x1dGlvbiBvZiBhbiBhc3NldCBieSBsb29raW5nIGZvciB0aGUgcHJlZml4XG4gICAgICogdXNlZCBieSBzcHJpdGVzaGVldHMgYW5kIGltYWdlIHVybHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwge3N0cmluZ30gdGhlIGltYWdlIHBhdGhcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0UmVzb2x1dGlvbk9mVXJsOiBmdW5jdGlvbiAodXJsKVxuICAgIHtcbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBDT05TVC5SRVRJTkFfUFJFRklYLmV4ZWModXJsKTtcblxuICAgICAgICBpZiAocmVzb2x1dGlvbilcbiAgICAgICAge1xuICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChyZXNvbHV0aW9uWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAxO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBMb2dzIG91dCB0aGUgdmVyc2lvbiBhbmQgcmVuZGVyZXIgaW5mb3JtYXRpb24gZm9yIHRoaXMgcnVubmluZyBpbnN0YW5jZSBvZiBQSVhJLlxuICAgICAqIElmIHlvdSBkb24ndCB3YW50IHRvIHNlZSB0aGlzIG1lc3NhZ2UgeW91IGNhbiBzZXQgYFBJWEkudXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7YFxuICAgICAqIHNvIHRoZSBsaWJyYXJ5IHRoaW5rcyBpdCBhbHJlYWR5IHNhaWQgaXQuIEtlZXAgaW4gbWluZCB0aGF0IGRvaW5nIHRoYXQgd2lsbCBmb3JldmVyXG4gICAgICogbWFrZXMgeW91IGEgamVyayBmYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBUaGUgc3RyaW5nIHJlbmRlcmVyIHR5cGUgdG8gbG9nLlxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBzYXlIZWxsbzogZnVuY3Rpb24gKHR5cGUpXG4gICAge1xuICAgICAgICBpZiAodXRpbHMuX3NhaWRIZWxsbylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjaHJvbWUnKSA+IC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtcbiAgICAgICAgICAgICAgICAnXFxuICVjICVjICVjIFBpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0g4pywICcgKyB0eXBlICsgJyDinLAgICVjICcgKyAnICVjICcgKyAnIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8gICVjICVjIOKZpSVj4pmlJWPimaUgXFxuXFxuJyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmY2NmE1OyBiYWNrZ3JvdW5kOiAjMDMwMzA3OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmYzNkYzsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOydcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBhcmdzKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3aW5kb3cuY29uc29sZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nKCdQaXhpLmpzICcgKyBDT05TVC5WRVJTSU9OICsgJyAtICcgKyB0eXBlICsgJyAtIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8nKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuXG4gICAgICAgIHV0aWxzLl9zYWlkSGVsbG8gPSB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgZm9yIGNoZWNraW5nIGZvciB3ZWJnbCBzdXBwb3J0XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzV2ViR0xTdXBwb3J0ZWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB2YXIgY29udGV4dE9wdGlvbnMgPSB7IHN0ZW5jaWw6IHRydWUgfTtcbiAgICAgICAgdHJ5XG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghd2luZG93LldlYkdMUmVuZGVyaW5nQ29udGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSxcbiAgICAgICAgICAgICAgICBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIGNvbnRleHRPcHRpb25zKSB8fCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgY29udGV4dE9wdGlvbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gISEoZ2wgJiYgZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5zdGVuY2lsKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgc2lnbiBvZiBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBuIHtudW1iZXJ9XG4gICAgICogQHJldHVybnMge251bWJlcn0gMCBpZiBuIGlzIDAsIC0xIGlmIG4gaXMgbmVnYXRpdmUsIDEgaWYgbiBpIHBvc2l0aXZlXG4gICAgICovXG4gICAgc2lnbjogZnVuY3Rpb24gKG4pXG4gICAge1xuICAgICAgICByZXR1cm4gbiA/IChuIDwgMCA/IC0xIDogMSkgOiAwO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZW1vdmVJdGVtc1xuICAgICAqXG4gICAgICogQHBhcmFtIHthcnJheX0gYXJyIFRoZSB0YXJnZXQgYXJyYXlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRJZHggVGhlIGluZGV4IHRvIGJlZ2luIHJlbW92aW5nIGZyb20gKGluY2x1c2l2ZSlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmVtb3ZlQ291bnQgSG93IG1hbnkgaXRlbXMgdG8gcmVtb3ZlXG4gICAgICovXG4gICAgcmVtb3ZlSXRlbXM6IGZ1bmN0aW9uIChhcnIsIHN0YXJ0SWR4LCByZW1vdmVDb3VudClcbiAgICB7XG4gICAgICAgIHZhciBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIGlmIChzdGFydElkeCA+PSBsZW5ndGggfHwgcmVtb3ZlQ291bnQgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbW92ZUNvdW50ID0gKHN0YXJ0SWR4K3JlbW92ZUNvdW50ID4gbGVuZ3RoID8gbGVuZ3RoLXN0YXJ0SWR4IDogcmVtb3ZlQ291bnQpO1xuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJZHgsIGxlbiA9IGxlbmd0aC1yZW1vdmVDb3VudDsgaSA8IGxlbjsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBhcnJbaV0gPSBhcnJbaSArIHJlbW92ZUNvdW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyci5sZW5ndGggPSBsZW47XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIERlc2NyaWJlIHByb3BlcnR5IHVzYWdlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBUZXh0dXJlQ2FjaGU6IHt9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHt9XG59O1xuIiwiLyoqXG4gKiBNaXhpbnMgZnVuY3Rpb25hbGl0eSB0byBtYWtlIGFuIG9iamVjdCBoYXZlIFwicGx1Z2luc1wiLlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkudXRpbHNcbiAqIEBwYXJhbSBvYmoge29iamVjdH0gVGhlIG9iamVjdCB0byBtaXggaW50by5cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIHBsdWdpblRhcmdldC5taXhpbihNeU9iamVjdCk7XG4gKi9cbmZ1bmN0aW9uIHBsdWdpblRhcmdldChvYmopXG57XG4gICAgb2JqLl9fcGx1Z2lucyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHBsdWdpbiB0byBhbiBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwbHVnaW5OYW1lIHtzdHJpbmd9IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICAgICAqIEBwYXJhbSBjdG9yIHtGdW5jdGlvbn0gVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciB0aGUgcGx1Z2luLlxuICAgICAqL1xuICAgIG9iai5yZWdpc3RlclBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW5OYW1lLCBjdG9yKVxuICAgIHtcbiAgICAgICAgb2JqLl9fcGx1Z2luc1twbHVnaW5OYW1lXSA9IGN0b3I7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlcyBhbGwgdGhlIHBsdWdpbnMgb2YgdGhpcyBvYmplY3RcbiAgICAgKlxuICAgICAqL1xuICAgIG9iai5wcm90b3R5cGUuaW5pdFBsdWdpbnMgPSBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zID0gdGhpcy5wbHVnaW5zIHx8IHt9O1xuXG4gICAgICAgIGZvciAodmFyIG8gaW4gb2JqLl9fcGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbmV3IChvYmouX19wbHVnaW5zW29dKSh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5kZXN0cm95UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBvIGluIHRoaXMucGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBsdWdpbnMgPSBudWxsO1xuICAgIH07XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLyoqXG4gICAgICogTWl4ZXMgaW4gdGhlIHByb3BlcnRpZXMgb2YgdGhlIHBsdWdpblRhcmdldCBpbnRvIGFub3RoZXIgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0IHtvYmplY3R9IFRoZSBvYmogdG8gbWl4IGludG9cbiAgICAgKi9cbiAgICBtaXhpbjogZnVuY3Rpb24gbWl4aW4ob2JqKVxuICAgIHtcbiAgICAgICAgcGx1Z2luVGFyZ2V0KG9iaik7XG4gICAgfVxufTtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciBjb3JlID0gcmVxdWlyZSgnLi9jb3JlJyksXG4gICAgbWVzaCA9IHJlcXVpcmUoJy4vbWVzaCcpLFxuICAgIGV4dHJhcyA9IHJlcXVpcmUoJy4vZXh0cmFzJyksXG4gICAgZmlsdGVycyA9IHJlcXVpcmUoJy4vZmlsdGVycycpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIFNwcml0ZUJhdGNoXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLlBhcnRpY2xlQ29udGFpbmVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlNwcml0ZUJhdGNoID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLicpO1xufTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBBc3NldExvYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBzZWUgUElYSS5sb2FkZXJzLkxvYWRlclxuICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IFRoZSBsb2FkZXIgc3lzdGVtIHdhcyBvdmVyaGF1bGVkIGluIHBpeGkgdjMsIHBsZWFzZSBzZWUgdGhlIG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyIGNsYXNzLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLkFzc2V0TG9hZGVyID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuJyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb3JlLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFN0YWdlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQ29udGFpbmVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFN0YWdlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1lvdSBkbyBub3QgbmVlZCB0byB1c2UgYSBQSVhJIFN0YWdlIGFueSBtb3JlLCB5b3UgY2FuIHNpbXBseSByZW5kZXIgYW55IGNvbnRhaW5lci4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIERpc3BsYXlPYmplY3RDb250YWluZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgRGlzcGxheU9iamVjdENvbnRhaW5lcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEaXNwbGF5T2JqZWN0Q29udGFpbmVyIGhhcyBiZWVuIHNob3J0ZW5lZCB0byBDb250YWluZXIsIHBsZWFzZSB1c2UgQ29udGFpbmVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RyaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2hcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RyaXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFN0cmlwIGNsYXNzIGhhcyBiZWVuIHJlbmFtZWQgdG8gTWVzaCBhbmQgbW92ZWQgdG8gbWVzaC5NZXNoLCBwbGVhc2UgdXNlIG1lc2guTWVzaCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLk1lc2g7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBSb3BlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkubWVzaC5Sb3BlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFJvcGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFJvcGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gbWVzaC5Sb3BlLCBwbGVhc2UgdXNlIG1lc2guUm9wZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLlJvcGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBNb3ZpZUNsaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuTW92aWVDbGlwXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIE1vdmllQ2xpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgTW92aWVDbGlwIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5Nb3ZpZUNsaXAsIHBsZWFzZSB1c2UgZXh0cmFzLk1vdmllQ2xpcCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuTW92aWVDbGlwO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGlsaW5nU3ByaXRlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBUaWxpbmdTcHJpdGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRpbGluZ1Nwcml0ZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuVGlsaW5nU3ByaXRlLCBwbGVhc2UgdXNlIGV4dHJhcy5UaWxpbmdTcHJpdGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLlRpbGluZ1Nwcml0ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJpdG1hcFRleHRcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCaXRtYXBUZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCaXRtYXBUZXh0IGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5CaXRtYXBUZXh0LCBwbGVhc2UgdXNlIGV4dHJhcy5CaXRtYXBUZXh0IGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5CaXRtYXBUZXh0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgYmxlbmRNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIGJsZW5kTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGJsZW5kTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gQkxFTkRfTU9ERVMsIHBsZWFzZSB1c2UgQkxFTkRfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5CTEVORF9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNjYWxlTW9kZXNcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBzY2FsZU1vZGVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBzY2FsZU1vZGVzIGhhcyBiZWVuIG1vdmVkIHRvIFNDQUxFX01PREVTLCBwbGVhc2UgdXNlIFNDQUxFX01PREVTIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU0NBTEVfTU9ERVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBCYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuQmFzZVRleHR1cmVDYWNoZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCYXNlVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgQmFzZVRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5CYXNlVGV4dHVyZUNhY2hlLCBwbGVhc2UgdXNlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5UZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuVGV4dHVyZUNhY2hlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIG1hdGhcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBtYXRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgbWF0aCBuYW1lc3BhY2UgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIGFjY2VzcyBtZW1iZXJzIGFscmVhZHkgYWNjZXNzaWJsZSBvbiBQSVhJLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgUElYSS5TcHJpdGUjc2V0VGV4dHVyZVxuICogQHNlZSBQSVhJLlNwcml0ZSN0ZXh0dXJlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlLnByb3RvdHlwZS5zZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dHVyZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dHVyZSBwcm9wZXJ0eSwgZS5nIDogc3ByaXRlLnRleHR1cmUgPSB0ZXh0dXJlOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3NldFRleHRcbiAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmV4dHJhcy5CaXRtYXBUZXh0LnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dClcbntcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dCBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dCBwcm9wZXJ0eSwgZS5nIDogbXlCaXRtYXBUZXh0LnRleHQgPSBcXCdteSB0ZXh0XFwnOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLlRleHQjdGV4dFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteVRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRTdHlsZVxuICogQHNlZSBQSVhJLlRleHQjc3R5bGVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0LnByb3RvdHlwZS5zZXRTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlKVxue1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldFN0eWxlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBzdHlsZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0LnN0eWxlID0gc3R5bGU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQHNlZSBQSVhJLlRleHR1cmUjc2V0RnJhbWVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0dXJlLnByb3RvdHlwZS5zZXRGcmFtZSA9IGZ1bmN0aW9uKGZyYW1lKVxue1xuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldEZyYW1lIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBmcmFtZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0dXJlLmZyYW1lID0gZnJhbWU7Jyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhmaWx0ZXJzLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBzZWUgUElYSS5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBBYnN0cmFjdEZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLkFic3RyYWN0RmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBBYnN0cmFjdEZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkFic3RyYWN0RmlsdGVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkZYQUFGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuRlhBQUZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBGWEFBRmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuRlhBQUZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgRlhBQUZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkZYQUFGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuU3ByaXRlTWFza0ZpbHRlclxuICAgICAqIEBzZWUgUElYSS5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIFNwcml0ZU1hc2tGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBTcHJpdGVNYXNrRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU3ByaXRlTWFza0ZpbHRlcjtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkudXRpbHMudXVpZFxuICogQHNlZSBQSVhJLnV0aWxzLnVpZFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICovXG5jb3JlLnV0aWxzLnV1aWQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvbnNvbGUud2FybigndXRpbHMudXVpZCgpIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdXRpbHMudWlkKCkgZnJvbSBub3cgb24uJyk7XG4gICAgcmV0dXJuIGNvcmUudXRpbHMudWlkKCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogQSBCaXRtYXBUZXh0IG9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dCB1c2luZyBiaXRtYXAgZm9udC4gVG9cbiAqIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJywgJ1xccicgb3IgJ1xcclxcbicgaW4geW91ciBzdHJpbmcuIFlvdSBjYW4gZ2VuZXJhdGUgdGhlIGZudCBmaWxlcyB1c2luZzpcbiAqXG4gKiBBIEJpdG1hcFRleHQgY2FuIG9ubHkgYmUgY3JlYXRlZCB3aGVuIHRoZSBmb250IGlzIGxvYWRlZFxuICpcbiAqIGBgYGpzXG4gKiAvLyBpbiB0aGlzIGNhc2UgdGhlIGZvbnQgaXMgaW4gYSBmaWxlIGNhbGxlZCAnZGVzeXJlbC5mbnQnXG4gKiB2YXIgYml0bWFwVGV4dCA9IG5ldyBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0KFwidGV4dCB1c2luZyBhIGZhbmN5IGZvbnQhXCIsIHtmb250OiBcIjM1cHggRGVzeXJlbFwiLCBhbGlnbjogXCJyaWdodFwifSk7XG4gKiBgYGBcbiAqXG4gKlxuICogaHR0cDovL3d3dy5hbmdlbGNvZGUuY29tL3Byb2R1Y3RzL2JtZm9udC8gZm9yIHdpbmRvd3Mgb3JcbiAqIGh0dHA6Ly93d3cuYm1nbHlwaC5jb20vIGZvciBtYWMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBzdHlsZSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIHN0eWxlLmZvbnQge3N0cmluZ3xvYmplY3R9IFRoZSBmb250IGRlc2NyaXB0b3IgZm9yIHRoZSBvYmplY3QsIGNhbiBiZSBwYXNzZWQgYXMgYSBzdHJpbmcgb2YgZm9ybVxuICogICAgICBcIjI0cHggRm9udE5hbWVcIiBvciBcIkZvbnROYW1lXCIgb3IgYXMgYW4gb2JqZWN0IHdpdGggZXhwbGljaXQgbmFtZS9zaXplIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQubmFtZV0ge3N0cmluZ30gVGhlIGJpdG1hcCBmb250IGlkXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQuc2l6ZV0ge251bWJlcn0gVGhlIHNpemUgb2YgdGhlIGZvbnQgaW4gcGl4ZWxzLCBlLmcuIDI0XG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0XG4gKiAgICAgIHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUudGludD0weEZGRkZGRl0ge251bWJlcn0gVGhlIHRpbnQgY29sb3JcbiAqL1xuZnVuY3Rpb24gQml0bWFwVGV4dCh0ZXh0LCBzdHlsZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgb3ZlcmFsbCB0ZXh0LCBkaWZmZXJlbnQgZnJvbSBmb250U2l6ZSxcbiAgICAgKiB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBzdHlsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRleHRXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dEhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBsZXR0ZXIgc3ByaXRlIHBvb2wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZ2x5cGhzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZm9udCA9IHtcbiAgICAgICAgdGludDogc3R5bGUudGludCAhPT0gdW5kZWZpbmVkID8gc3R5bGUudGludCA6IDB4RkZGRkZGLFxuICAgICAgICBhbGlnbjogc3R5bGUuYWxpZ24gfHwgJ2xlZnQnLFxuICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICBzaXplOiAwXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgZm9udC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZm9udCA9IHN0eWxlLmZvbnQ7IC8vIHJ1biBmb250IHNldHRlclxuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IHRleHQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IHdpZHRoIG9mIHRoaXMgYml0bWFwIHRleHQgaW4gcGl4ZWxzLiBJZiB0aGUgdGV4dCBwcm92aWRlZCBpcyBsb25nZXIgdGhhbiB0aGUgdmFsdWUgcHJvdmlkZWQsIGxpbmUgYnJlYWtzIHdpbGwgYmUgYXV0b21hdGljYWxseSBpbnNlcnRlZCBpbiB0aGUgbGFzdCB3aGl0ZXNwYWNlLlxuICAgICAqIERpc2FibGUgYnkgc2V0dGluZyB2YWx1ZSB0byAwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IGxpbmUgaGVpZ2h0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRyeWluZyB0byB1c2UgdGhlIHRvdGFsIGhlaWdodCBvZiB0aGUgVGV4dCwgaWU6IHdoZW4gdHJ5aW5nIHRvIHZlcnRpY2FsbHkgYWxpZ24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkaXJ0eSBzdGF0ZSBvZiB0aGlzIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy51cGRhdGVUZXh0KCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5CaXRtYXBUZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5Db250YWluZXIucHJvdG90eXBlKTtcbkJpdG1hcFRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQml0bWFwVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gQml0bWFwVGV4dDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQml0bWFwVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGludCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0aW50OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQudGludDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQudGludCA9ICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlID49IDApID8gdmFsdWUgOiAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFsaWdubWVudCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbGVmdCdcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBhbGlnbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250LmFsaWduO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC5hbGlnbiA9IHZhbHVlIHx8ICdsZWZ0JztcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZvbnQgZGVzY3JpcHRvciBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0ZvbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgZm9udDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcgJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9mb250Lm5hbWUgPSB2YWx1ZS5sZW5ndGggPT09IDEgPyB2YWx1ZVswXSA6IHZhbHVlLnNsaWNlKDEpLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB2YWx1ZS5sZW5ndGggPj0gMiA/IHBhcnNlSW50KHZhbHVlWzBdLCAxMCkgOiBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV0uc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5zaXplID0gdHlwZW9mIHZhbHVlLnNpemUgPT09ICdudW1iZXInID8gdmFsdWUuc2l6ZSA6IHBhcnNlSW50KHZhbHVlLnNpemUsIDEwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGV4dCBhbmQgdXBkYXRlcyBpdCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkYXRhID0gQml0bWFwVGV4dC5mb250c1t0aGlzLl9mb250Lm5hbWVdO1xuICAgIHZhciBwb3MgPSBuZXcgY29yZS5Qb2ludCgpO1xuICAgIHZhciBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgIHZhciBjaGFycyA9IFtdO1xuICAgIHZhciBsYXN0TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbGluZVdpZHRocyA9IFtdO1xuICAgIHZhciBsaW5lID0gMDtcbiAgICB2YXIgc2NhbGUgPSB0aGlzLl9mb250LnNpemUgLyBkYXRhLnNpemU7XG4gICAgdmFyIGxhc3RTcGFjZSA9IC0xO1xuICAgIHZhciBtYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0Lmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gdGhpcy50ZXh0LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGxhc3RTcGFjZSA9IC8oXFxzKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSA/IGkgOiBsYXN0U3BhY2U7XG5cbiAgICAgICAgaWYgKC8oPzpcXHJcXG58XFxyfFxcbikvLnRlc3QodGhpcy50ZXh0LmNoYXJBdChpKSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXN0U3BhY2UgIT09IC0xICYmIHRoaXMubWF4V2lkdGggPiAwICYmIHBvcy54ICogc2NhbGUgPiB0aGlzLm1heFdpZHRoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKGNoYXJzLCBsYXN0U3BhY2UsIGkgLSBsYXN0U3BhY2UpO1xuICAgICAgICAgICAgaSA9IGxhc3RTcGFjZTtcbiAgICAgICAgICAgIGxhc3RTcGFjZSA9IC0xO1xuXG4gICAgICAgICAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbGluZSsrO1xuXG4gICAgICAgICAgICBwb3MueCA9IDA7XG4gICAgICAgICAgICBwb3MueSArPSBkYXRhLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hhckRhdGEgPSBkYXRhLmNoYXJzW2NoYXJDb2RlXTtcblxuICAgICAgICBpZiAoIWNoYXJEYXRhKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmV2Q2hhckNvZGUgJiYgY2hhckRhdGEua2VybmluZ1twcmV2Q2hhckNvZGVdKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb3MueCArPSBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV07XG4gICAgICAgIH1cblxuICAgICAgICBjaGFycy5wdXNoKHt0ZXh0dXJlOmNoYXJEYXRhLnRleHR1cmUsIGxpbmU6IGxpbmUsIGNoYXJDb2RlOiBjaGFyQ29kZSwgcG9zaXRpb246IG5ldyBjb3JlLlBvaW50KHBvcy54ICsgY2hhckRhdGEueE9mZnNldCwgcG9zLnkgKyBjaGFyRGF0YS55T2Zmc2V0KX0pO1xuICAgICAgICBsYXN0TGluZVdpZHRoID0gcG9zLnggKyAoY2hhckRhdGEudGV4dHVyZS53aWR0aCArIGNoYXJEYXRhLnhPZmZzZXQpO1xuICAgICAgICBwb3MueCArPSBjaGFyRGF0YS54QWR2YW5jZTtcbiAgICAgICAgbWF4TGluZUhlaWdodCA9IE1hdGgubWF4KG1heExpbmVIZWlnaHQsIChjaGFyRGF0YS55T2Zmc2V0ICsgY2hhckRhdGEudGV4dHVyZS5oZWlnaHQpKTtcbiAgICAgICAgcHJldkNoYXJDb2RlID0gY2hhckNvZGU7XG4gICAgfVxuXG4gICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG5cbiAgICB2YXIgbGluZUFsaWduT2Zmc2V0cyA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8PSBsaW5lOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYWxpZ25PZmZzZXQgPSAwO1xuXG4gICAgICAgIGlmICh0aGlzLl9mb250LmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbGlnbk9mZnNldCA9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5fZm9udC5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpbmVBbGlnbk9mZnNldHMucHVzaChhbGlnbk9mZnNldCk7XG4gICAgfVxuXG4gICAgdmFyIGxlbkNoYXJzID0gY2hhcnMubGVuZ3RoO1xuICAgIHZhciB0aW50ID0gdGhpcy50aW50O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbkNoYXJzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYyA9IHRoaXMuX2dseXBoc1tpXTsgLy8gZ2V0IHRoZSBuZXh0IGdseXBoIHNwcml0ZVxuXG4gICAgICAgIGlmIChjKVxuICAgICAgICB7XG4gICAgICAgICAgICBjLnRleHR1cmUgPSBjaGFyc1tpXS50ZXh0dXJlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgYyA9IG5ldyBjb3JlLlNwcml0ZShjaGFyc1tpXS50ZXh0dXJlKTtcbiAgICAgICAgICAgIHRoaXMuX2dseXBocy5wdXNoKGMpO1xuICAgICAgICB9XG5cbiAgICAgICAgYy5wb3NpdGlvbi54ID0gKGNoYXJzW2ldLnBvc2l0aW9uLnggKyBsaW5lQWxpZ25PZmZzZXRzW2NoYXJzW2ldLmxpbmVdKSAqIHNjYWxlO1xuICAgICAgICBjLnBvc2l0aW9uLnkgPSBjaGFyc1tpXS5wb3NpdGlvbi55ICogc2NhbGU7XG4gICAgICAgIGMuc2NhbGUueCA9IGMuc2NhbGUueSA9IHNjYWxlO1xuICAgICAgICBjLnRpbnQgPSB0aW50O1xuXG4gICAgICAgIGlmICghYy5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoYyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZW1vdmUgdW5uZWNlc3NhcnkgY2hpbGRyZW4uXG4gICAgZm9yIChpID0gbGVuQ2hhcnM7IGkgPCB0aGlzLl9nbHlwaHMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKHRoaXMuX2dseXBoc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0V2lkdGggPSBtYXhMaW5lV2lkdGggKiBzY2FsZTtcbiAgICB0aGlzLnRleHRIZWlnaHQgPSAocG9zLnkgKyBkYXRhLmxpbmVIZWlnaHQpICogc2NhbGU7XG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gbWF4TGluZUhlaWdodCAqIHNjYWxlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb2YgdGhpcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGV4dCBiZWZvcmUgY2FsbGluZyBwYXJlbnQncyBnZXRMb2NhbEJvdW5kc1xuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5cbkJpdG1hcFRleHQucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICByZXR1cm4gY29yZS5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzLmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59O1xuXG5CaXRtYXBUZXh0LmZvbnRzID0ge307XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIE1vdmllQ2xpcCBpcyBhIHNpbXBsZSB3YXkgdG8gZGlzcGxheSBhbiBhbmltYXRpb24gZGVwaWN0ZWQgYnkgYSBsaXN0IG9mIHRleHR1cmVzLlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgYWxpZW5JbWFnZXMgPSBbXCJpbWFnZV9zZXF1ZW5jZV8wMS5wbmdcIixcImltYWdlX3NlcXVlbmNlXzAyLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDMucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wNC5wbmdcIl07XG4gKiB2YXIgdGV4dHVyZUFycmF5ID0gW107XG4gKlxuICogZm9yICh2YXIgaT0wOyBpIDwgNDsgaSsrKVxuICoge1xuICogICAgICB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoYWxpZW5JbWFnZXNbaV0pO1xuICogICAgICB0ZXh0dXJlQXJyYXkucHVzaCh0ZXh0dXJlKTtcbiAqIH07XG4gKlxuICogdmFyIG1jID0gbmV3IFBJWEkuTW92aWVDbGlwKHRleHR1cmVBcnJheSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0dXJlcyB7UElYSS5UZXh0dXJlW118T2JqZWN0W119IGFuIGFycmF5IG9mIHtAbGluayBQSVhJLlRleHR1cmV9IG9yIGZyYW1lIG9iamVjdHMgdGhhdCBtYWtlIHVwIHRoZSBhbmltYXRpb25cbiAqIEBwYXJhbSB0ZXh0dXJlc1tdLnRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHtAbGluayBQSVhJLlRleHR1cmV9IG9mIHRoZSBmcmFtZVxuICogQHBhcmFtIHRleHR1cmVzW10udGltZSB7bnVtYmVyfSB0aGUgZHVyYXRpb24gb2YgdGhlIGZyYW1lIGluIG1zXG4gKi9cbmZ1bmN0aW9uIE1vdmllQ2xpcCh0ZXh0dXJlcylcbntcbiAgICBjb3JlLlNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmVzWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlID8gdGV4dHVyZXNbMF0gOiB0ZXh0dXJlc1swXS50ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kdXJhdGlvbnMgPSBudWxsO1xuXG4gICAgdGhpcy50ZXh0dXJlcyA9IHRleHR1cmVzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNwZWVkIHRoYXQgdGhlIE1vdmllQ2xpcCB3aWxsIHBsYXkgYXQuIEhpZ2hlciBpcyBmYXN0ZXIsIGxvd2VyIGlzIHNsb3dlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmFuaW1hdGlvblNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBtb3ZpZSBjbGlwIHJlcGVhdHMgYWZ0ZXIgcGxheWluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMubG9vcCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gYSBNb3ZpZUNsaXAgZmluaXNoZXMgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICovXG4gICAgdGhpcy5vbkNvbXBsZXRlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEVsYXBzZWQgdGltZSBzaW5jZSBhbmltYXRpb24gaGFzIGJlZW4gc3RhcnRlZCwgdXNlZCBpbnRlcm5hbGx5IHRvIGRpc3BsYXkgY3VycmVudCB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIE1vdmllQ2xpcCBpcyBjdXJyZW50bHkgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1vdmllQ2xpcC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5Nb3ZpZUNsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTW92aWVDbGlwO1xubW9kdWxlLmV4cG9ydHMgPSBNb3ZpZUNsaXA7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1vdmllQ2xpcC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiB0b3RhbEZyYW1lcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIGZyYW1lcyBpbiB0aGUgTW92aWVDbGlwLiBUaGlzIGlzIHRoZSBzYW1lIGFzIG51bWJlciBvZiB0ZXh0dXJlc1xuICAgICAqIGFzc2lnbmVkIHRvIHRoZSBNb3ZpZUNsaXAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdG90YWxGcmFtZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIHRleHR1cmVzIHVzZWQgZm9yIHRoaXMgTW92aWVDbGlwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqXG4gICAgICovXG4gICAgdGV4dHVyZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZih2YWx1ZVswXSBpbnN0YW5jZW9mIGNvcmUuVGV4dHVyZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcy5wdXNoKHZhbHVlW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMucHVzaCh2YWx1ZVtpXS50aW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgKiBUaGUgTW92aWVDbGlwcyBjdXJyZW50IGZyYW1lIGluZGV4XG4gICAgKlxuICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAqIEByZWFkb25seVxuICAgICovXG4gICAgY3VycmVudEZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRGcmFtZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpICUgdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRGcmFtZSA8IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY3VycmVudEZyYW1lICs9IHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RnJhbWU7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKipcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYoIXRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogUGxheXMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZih0aGlzLnBsYXlpbmcpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5aW5nID0gdHJ1ZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZ29lcyB0byBhIHNwZWNpZmljIGZyYW1lXG4gKlxuICogQHBhcmFtIGZyYW1lTnVtYmVyIHtudW1iZXJ9IGZyYW1lIGluZGV4IHRvIHN0b3AgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kU3RvcCA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLnN0b3AoKTtcblxuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbdGhpcy5jdXJyZW50RnJhbWVdO1xufTtcblxuLyoqXG4gKiBHb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWUgYW5kIGJlZ2lucyBwbGF5aW5nIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RhcnQgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kUGxheSA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IGZyYW1lTnVtYmVyO1xuXG4gICAgdGhpcy5wbGF5KCk7XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKiBAcHJpdmF0ZVxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWQgPSB0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2R1cmF0aW9ucyAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIHZhciBsYWcgPSB0aGlzLl9jdXJyZW50VGltZSAlIDEgKiB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuXG4gICAgICAgIGxhZyArPSBlbGFwc2VkIC8gNjAgKiAxMDAwO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPCAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZS0tO1xuICAgICAgICAgICAgbGFnICs9IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2lnbiA9IE1hdGguc2lnbih0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lKTtcbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgPSBNYXRoLmZsb29yKHRoaXMuX2N1cnJlbnRUaW1lKTtcblxuICAgICAgICB3aGlsZSAobGFnID49IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhZyAtPSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdICogc2lnbjtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IHNpZ247XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBsYWcgLyB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBlbGFwc2VkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jdXJyZW50VGltZSA8IDAgJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AoMCk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5fY3VycmVudFRpbWUgPj0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoICYmICF0aGlzLmxvb3ApXG4gICAge1xuICAgICAgICB0aGlzLmdvdG9BbmRTdG9wKHRoaXMuX3RleHR1cmVzLmxlbmd0aCAtIDEpO1xuXG4gICAgICAgIGlmICh0aGlzLm9uQ29tcGxldGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuXG59O1xuXG4vKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZGVzdHJveXMgaXRcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICggKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuICAgIGNvcmUuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIEEgc2hvcnQgaGFuZCB3YXkgb2YgY3JlYXRpbmcgYSBtb3ZpZWNsaXAgZnJvbSBhbiBhcnJheSBvZiBmcmFtZSBpZHNcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVzIHtzdHJpbmdbXX0gdGhlIGFycmF5IG9mIGZyYW1lcyBpZHMgdGhlIG1vdmllY2xpcCB3aWxsIHVzZSBhcyBpdHMgdGV4dHVyZSBmcmFtZXNcbiAqL1xuTW92aWVDbGlwLmZyb21GcmFtZXMgPSBmdW5jdGlvbiAoZnJhbWVzKVxue1xuICAgIHZhciB0ZXh0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0ZXh0dXJlcy5wdXNoKG5ldyBjb3JlLlRleHR1cmUuZnJvbUZyYW1lKGZyYW1lc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW92aWVDbGlwKHRleHR1cmVzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGltYWdlIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgaW1hZ2UgdXJscyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUltYWdlcyA9IGZ1bmN0aW9uIChpbWFnZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTsiLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICAvLyBhIHNwcml0ZSB1c2UgZGZvciByZW5kZXJpbmcgdGV4dHVyZXMuLlxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlcicpO1xuXG4vKipcbiAqIEEgdGlsaW5nIHNwcml0ZSBpcyBhIGZhc3Qgd2F5IG9mIHJlbmRlcmluZyBhIHRpbGluZyBpbWFnZVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmUge1RleHR1cmV9IHRoZSB0ZXh0dXJlIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFRpbGluZ1Nwcml0ZSh0ZXh0dXJlLCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGluZyBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVTY2FsZSA9IG5ldyBjb3JlLlBvaW50KDEsMSk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgcG9zaXRpb24gb2YgdGhlIGltYWdlIHRoYXQgaXMgYmVpbmcgdGlsZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBuZXcgY29yZS5Qb2ludCgwLDApO1xuXG4gICAgLy8vLy8gcHJpdmF0ZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHdpdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gd2lkdGggfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0IHx8IDEwMDtcblxuICAgIC8qKlxuICAgICAqIEFuIGludGVybmFsIFdlYkdMIFVWIGNhY2hlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlVXZzfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdXZzID0gbmV3IGNvcmUuVGV4dHVyZVV2cygpO1xuXG4gICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IG51bGw7XG5cbiAgICAvL1RPRE8gbW92ZS4uXG4gICAgdGhpcy5zaGFkZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcihcblxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1VHJhbnNmb3JtOycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJyAgIGNvb3JkIC09IHVUcmFuc2Zvcm0ueHk7JyxcbiAgICAgICAgJyAgIGNvb3JkIC89IHVUcmFuc2Zvcm0uenc7JyxcbiAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBjb29yZDsnLFxuXG4gICAgICAgICcgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpOycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgIFtcbiAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdUZyYW1lOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzIgdVBpeGVsU2l6ZTsnLFxuXG4gICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IG1vZCh2VGV4dHVyZUNvb3JkLCB1RnJhbWUuencpOycsXG4gICAgICAgICcgICBjb29yZCA9IGNsYW1wKGNvb3JkLCB1UGl4ZWxTaXplLCB1RnJhbWUuencgLSB1UGl4ZWxTaXplKTsnLFxuICAgICAgICAnICAgY29vcmQgKz0gdUZyYW1lLnh5OycsXG5cbiAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9ICB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdUZyYW1lOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVRyYW5zZm9ybTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLDAsMSwxXSB9LFxuICAgICAgICAgICAgICAgIHVQaXhlbFNpemUgOiB7IHR5cGUgOiAnMmZ2JywgdmFsdWU6IFsxLCAxXX1cbiAgICAgICAgICAgIH1cbiAgICAgICk7XG59XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsaW5nU3ByaXRlO1xubW9kdWxlLmV4cG9ydHMgPSBUaWxpbmdTcHJpdGU7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsaW5nU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRpbGluZ1Nwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybjtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICAvLyB0d2VhayBvdXIgdGV4dHVyZSB0ZW1wb3JhcmlseS4uXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUgfHwgIXRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGVtcFV2cyA9IHRleHR1cmUuX3V2cyxcbiAgICAgICAgdGVtcFdpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIHRlbXBIZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQsXG4gICAgICAgIHR3ID0gdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCxcbiAgICAgICAgdGggPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRoaXMuX3V2cztcbiAgICB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51UGl4ZWxTaXplLnZhbHVlWzBdID0gMS4wL3R3O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMV0gPSAxLjAvdGg7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMF0gPSB0ZW1wVXZzLngwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVsxXSA9IHRlbXBVdnMueTA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzJdID0gdGVtcFV2cy54MSAtIHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzNdID0gdGVtcFV2cy55MiAtIHRlbXBVdnMueTA7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzBdID0gKHRoaXMudGlsZVBvc2l0aW9uLnggJSAodGVtcFdpZHRoICogdGhpcy50aWxlU2NhbGUueCkpIC8gdGhpcy5fd2lkdGg7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsxXSA9ICh0aGlzLnRpbGVQb3NpdGlvbi55ICUgKHRlbXBIZWlnaHQgKiB0aGlzLnRpbGVTY2FsZS55KSkgLyB0aGlzLl9oZWlnaHQ7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsyXSA9ICggdHcgLyB0aGlzLl93aWR0aCApICogdGhpcy50aWxlU2NhbGUueDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzNdID0gKCB0aCAvIHRoaXMuX2hlaWdodCApICogdGhpcy50aWxlU2NhbGUueTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIodGhpcyk7XG5cbiAgICB0ZXh0dXJlLl91dnMgPSB0ZW1wVXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGVtcFdpZHRoO1xuICAgIHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRlbXBIZWlnaHQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBhIHJlZmVyZW5jZSB0byB0aGUgY2FudmFzIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0LFxuICAgICAgICB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgYmFzZVRleHR1cmUgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBtb2RYID0gKHRoaXMudGlsZVBvc2l0aW9uLnggLyB0aGlzLnRpbGVTY2FsZS54KSAlIHRleHR1cmUuX2ZyYW1lLndpZHRoLFxuICAgICAgICBtb2RZID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgLyB0aGlzLnRpbGVTY2FsZS55KSAlIHRleHR1cmUuX2ZyYW1lLmhlaWdodDtcblxuICAgIC8vIGNyZWF0ZSBhIG5pY2Ugc2hpbnkgcGF0dGVybiFcbiAgICAvLyBUT0RPIHRoaXMgbmVlZHMgdG8gYmUgcmVmcmVzaGVkIGlmIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgaWYoIXRoaXMuX2NhbnZhc1BhdHRlcm4pXG4gICAge1xuICAgICAgICAvLyBjdXQgYW4gb2JqZWN0IGZyb20gYSBzcHJpdGVzaGVldC4uXG4gICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IGNvcmUuQ2FudmFzQnVmZmVyKHRleHR1cmUuX2ZyYW1lLndpZHRoLCB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQpO1xuXG4gICAgICAgIC8vIFRpbnQgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgICAgaWYgKHRoaXMudGludCAhPT0gMHhGRkZGRkYpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlZFRpbnQgIT09IHRoaXMudGludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUgPSBDYW52YXNUaW50ZXIuZ2V0VGludGVkVGV4dHVyZSh0aGlzLCB0aGlzLnRpbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZSh0aGlzLnRpbnRlZFRleHR1cmUsIDAsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZShiYXNlVGV4dHVyZS5zb3VyY2UsIC10ZXh0dXJlLl9mcmFtZS54LCAtdGV4dHVyZS5fZnJhbWUueSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IHRlbXBDYW52YXMuY29udGV4dC5jcmVhdGVQYXR0ZXJuKCB0ZW1wQ2FudmFzLmNhbnZhcywgJ3JlcGVhdCcgKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgY29udGV4dCBzdGF0ZS4uXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb24pO1xuXG4gICAgLy8gVE9ETyAtIHRoaXMgc2hvdWxkIGJlIHJvbGxlZCBpbnRvIHRoZSBzZXRUcmFuc2Zvcm0gYWJvdmUuLlxuICAgIGNvbnRleHQuc2NhbGUodGhpcy50aWxlU2NhbGUueCx0aGlzLnRpbGVTY2FsZS55KTtcblxuICAgIGNvbnRleHQudHJhbnNsYXRlKG1vZFggKyAodGhpcy5hbmNob3IueCAqIC10aGlzLl93aWR0aCApLFxuICAgICAgICAgICAgICAgICAgICAgIG1vZFkgKyAodGhpcy5hbmNob3IueSAqIC10aGlzLl9oZWlnaHQpKTtcblxuICAgIC8vIGNoZWNrIGJsZW5kIG1vZGVcbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyBmaWxsIHRoZSBwYXR0ZXJuIVxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fY2FudmFzUGF0dGVybjtcbiAgICBjb250ZXh0LmZpbGxSZWN0KC1tb2RYLFxuICAgICAgICAgICAgICAgICAgICAgLW1vZFksXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl93aWR0aCAvIHRoaXMudGlsZVNjYWxlLngsXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWlnaHQgLyB0aGlzLnRpbGVTY2FsZS55KTtcblxuXG4gICAgLy9UT0RPIC0gcHJldHR5IHN1cmUgdGhpcyBjYW4gYmUgZGVsZXRlZC4uLlxuICAgIC8vY29udGV4dC50cmFuc2xhdGUoLXRoaXMudGlsZVBvc2l0aW9uLnggKyAodGhpcy5hbmNob3IueCAqIHRoaXMuX3dpZHRoKSwgLXRoaXMudGlsZVBvc2l0aW9uLnkgKyAodGhpcy5hbmNob3IueSAqIHRoaXMuX2hlaWdodCkpO1xuICAgIC8vY29udGV4dC5zY2FsZSgxIC8gdGhpcy50aWxlU2NhbGUueCwgMSAvIHRoaXMudGlsZVNjYWxlLnkpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBzcHJpdGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xuXG4gICAgdmFyIHcwID0gd2lkdGggKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICB2YXIgdzEgPSB3aWR0aCAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgdmFyIGgwID0gaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgdmFyIGgxID0gaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG5cbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgdmFyIHgxID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTIgPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHg0ID0gIGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciBtaW5YLFxuICAgICAgICBtYXhYLFxuICAgICAgICBtaW5ZLFxuICAgICAgICBtYXhZO1xuXG4gICAgbWluWCA9IHgxO1xuICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgbWluWSA9IHkxO1xuICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgbWF4WCA9IHgxO1xuICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgbWF4WSA9IHkxO1xuICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG5cbiAgICByZXR1cm4gYm91bmRzO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byBjaGVja1xuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKlxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsZVNjYWxlID0gbnVsbDtcbiAgICB0aGlzLl90aWxlU2NhbGVPZmZzZXQgPSBudWxsO1xuICAgIHRoaXMudGlsZVBvc2l0aW9uID0gbnVsbDtcblxuICAgIHRoaXMuX3V2cyA9IG51bGw7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSB0aWxpbmcgc3ByaXRlIHRoYXQgd2lsbCB1c2UgYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICovXG5UaWxpbmdTcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQsd2lkdGgsaGVpZ2h0KVxue1xuICAgIHZhciB0ZXh0dXJlID0gY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgJyArIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKHRleHR1cmUsd2lkdGgsaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBBIG5ldyBUaWxpbmdTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgd2lkdGgsIGhlaWdodCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRpbGluZ1Nwcml0ZShjb3JlLlRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpLHdpZHRoLGhlaWdodCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgRGlzcGxheU9iamVjdCA9IGNvcmUuRGlzcGxheU9iamVjdCxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gbnVsbDtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbEhpdFRlc3QgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsRGVzdHJveSA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVkU3ByaXRlID0gbnVsbDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGlzcGxheU9iamVjdC5wcm90b3R5cGUsIHtcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgeW91IHdhbnQgdGhpcyBkaXNwbGF5IG9iamVjdCB0byBiZSBjYWNoZWQgYXMgYSBiaXRtYXAuXG4gICAgICogVGhpcyBiYXNpY2FsbHkgdGFrZXMgYSBzbmFwIHNob3Qgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IGFzIGl0IGlzIGF0IHRoYXQgbW9tZW50LiBJdCBjYW4gcHJvdmlkZSBhIHBlcmZvcm1hbmNlIGJlbmVmaXQgZm9yIGNvbXBsZXggc3RhdGljIGRpc3BsYXlPYmplY3RzLlxuICAgICAqIFRvIHJlbW92ZSBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ2ZhbHNlJ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGNhY2hlQXNCaXRtYXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVBc0JpdG1hcDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NhY2hlQXNCaXRtYXAgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSB0aGlzLnJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gdGhpcy5yZW5kZXJDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMudXBkYXRlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzID0gdGhpcy5nZXRCb3VuZHM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbERlc3Ryb3kgPSB0aGlzLmRlc3Ryb3k7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQgPSB0aGlzLmNvbnRhaW5zUG9pbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSB0aGlzLl9jYWNoZUFzQml0bWFwRGVzdHJveTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXN0cm95Q2FjaGVkRGlzcGxheU9iamVjdCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXM7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRCb3VuZHMgPSB0aGlzLl9vcmlnaW5hbEdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX29yaWdpbmFsRGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fb3JpZ2luYWxDb250YWluc1BvaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBXZWJHTFxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gdGhlIFdlYkdMIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZFdlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENhY2hlZERpc3BsYXlPYmplY3QoIHJlbmRlcmVyICk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIoIHRoaXMuX2NhY2hlZFNwcml0ZSApO1xufTtcblxuLyoqXG4qIFByZXBhcmVzIHRoZSBXZWJHTCByZW5kZXJlciB0byBjYWNoZSB0aGUgc3ByaXRlXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGZpcnN0IHdlIGZsdXNoIGFueXRoaW5nIGxlZnQgaW4gdGhlIHJlbmRlcmVyIChvdGhlcndpc2UgaXQgd291bGQgZ2V0IHJlbmRlcmVkIHRvIHRoZSBjYWNoZWQgdGV4dHVyZSlcbiAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbiAgICAvL3RoaXMuZmlsdGVycz0gW107XG4gICAgLy8gbmV4dCB3ZSBmaW5kIHRoZSBkaW1lbnNpb25zIG9mIHRoZSB1bnRyYW5zZm9ybWVkIG9iamVjdFxuICAgIC8vIHRoaXMgZnVuY3Rpb24gYWxzbyBjYWxscyB1cGRhdGV0cmFuc2Zvcm0gb24gYWxsIGl0cyBjaGlsZHJlbiBhcyBwYXJ0IG9mIHRoZSBtZWFzdXJpbmcuIFRoaXMgbWVhbnMgd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIHRyYW5zZm9ybSBhZ2FpbiBpbiB0aGlzIGZ1bmN0aW9uXG4gICAgLy8gVE9ETyBwYXNzIGFuIG9iamVjdCB0byBjbG9uZSB0b28/IHNhdmVzIGhhdmluZyB0byBjcmVhdGUgYSBuZXcgb25lIGVhY2ggdGltZSFcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmNsb25lKCk7XG5cbiAgICAvLyBhZGQgc29tZSBwYWRkaW5nIVxuICAgIGlmKHRoaXMuX2ZpbHRlcnMpXG4gICAge1xuICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuX2ZpbHRlcnNbMF0ucGFkZGluZztcbiAgICAgICAgYm91bmRzLnggLT0gcGFkZGluZztcbiAgICAgICAgYm91bmRzLnkgLT0gcGFkZGluZztcblxuICAgICAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG4gICAgfVxuXG4gICAgLy8gZm9yIG5vdyB3ZSBjYWNoZSB0aGUgY3VycmVudCByZW5kZXJUYXJnZXQgdGhhdCB0aGUgd2ViR0wgcmVuZGVyZXIgaXMgY3VycmVudGx5IHVzaW5nLlxuICAgIC8vIHRoaXMgY291bGQgYmUgbW9yZSBlbGVnZW50Li5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldDtcbiAgICAvLyBXZSBhbHNvIHN0b3JlIHRoZSBmaWx0ZXIgc3RhY2sgLSBJIHdpbGwgZGVmaW5pdGVseSBsb29rIHRvIGNoYW5nZSBob3cgdGhpcyB3b3JrcyBhIGxpdHRsZSBsYXRlciBkb3duIHRoZSBsaW5lLlxuICAgIHZhciBzdGFjayA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2s7XG5cbiAgICAvLyB0aGlzIHJlbmRlclRleHR1cmUgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBjYWNoZWQgRGlzcGxheU9iamVjdFxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG5cblxuICAgIC8vIHNldCBhbGwgcHJvcGVydGllcyB0byB0aGVyZSBvcmlnaW5hbCBzbyB3ZSBjYW4gcmVuZGVyIHRvIGEgdGV4dHVyZVxuICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoY2FjaGVkUmVuZGVyVGFyZ2V0KTtcbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmZpbHRlclN0YWNrID0gc3RhY2s7XG5cbiAgICB0aGlzLnJlbmRlcldlYkdMICAgICA9IHRoaXMuX3JlbmRlckNhY2hlZFdlYkdMO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICAgICAgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgdHJhbnNmb3JtIG9mIHRoZSBjYWNoZWQgc3ByaXRlIHRvIGF2b2lkIHRoZSBuYXN0eSBmbGlja2VyLi5cbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgLy8gbWFwIHRoZSBoaXQgdGVzdC4uXG4gICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fY2FjaGVkU3ByaXRlLmNvbnRhaW5zUG9pbnQuYmluZCh0aGlzLl9jYWNoZWRTcHJpdGUpO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgc3ByaXRlIHdpdGggY2FudmFzXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gdGhlIENhbnZhcyByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9yZW5kZXJDYWNoZWRDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdENhbnZhcyggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLnJlbmRlckNhbnZhcyhyZW5kZXJlcik7XG59O1xuXG4vL1RPRE8gdGhpcyBjYW4gYmUgdGhlIHNhbWUgYXMgdGhlIHdlYkdMIHZlcmlzb24uLiB3aWxsIG5lZWQgdG8gZG8gYSBsaXR0bGUgdHdlYWtpbmcgZmlyc3QgdGhvdWdoLi5cbi8qKlxuKiBQcmVwYXJlcyB0aGUgQ2FudmFzIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvL2dldCBib3VuZHMgYWN0dWFsbHkgdHJhbnNmb3JtcyB0aGUgb2JqZWN0IGZvciB1cyBhbHJlYWR5IVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIG0sIHRydWUpO1xuXG4gICAgLy8gbm93IHJlc3RvcmUgdGhlIHN0YXRlIGJlIHNldHRpbmcgdGhlIG5ldyBwcm9wZXJ0aWVzXG4gICAgcmVuZGVyZXIuY29udGV4dCA9IGNhY2hlZFJlbmRlclRhcmdldDtcblxuICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fcmVuZGVyQ2FjaGVkQ2FudmFzO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICA9IHRoaXMuX2dldENhY2hlZEJvdW5kcztcblxuXG4gICAgLy8gY3JlYXRlIG91ciBjYWNoZWQgc3ByaXRlXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IGNvcmUuU3ByaXRlKHJlbmRlclRleHR1cmUpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogQ2FsY3VsYXRlcyB0aGUgYm91bmRzIG9mIHRoZSBjYWNoZWQgc3ByaXRlXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2dldENhY2hlZEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLl9jYWNoZWRTcHJpdGUuZ2V0Qm91bmRzKCk7XG59O1xuXG4vKipcbiogRGVzdHJveXMgdGhlIGNhY2hlZCBzcHJpdGUuXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX3RleHR1cmUuZGVzdHJveSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59O1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcERlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSgpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSBpbnN0YW5jZSBuYW1lIG9mIHRoZSBvYmplY3QuXG4gKlxuICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAqIEBtZW1iZXIge3N0cmluZ31cbiAqL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5uYW1lID0gbnVsbDtcblxuLyoqXG4qIFJldHVybnMgdGhlIGRpc3BsYXkgb2JqZWN0IGluIHRoZSBjb250YWluZXJcbipcbiogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuKiBAcGFyYW0gbmFtZSB7c3RyaW5nfSBpbnN0YW5jZSBuYW1lXG4qIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiovXG5jb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWUgPSBmdW5jdGlvbiAobmFtZSlcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbltpXS5uYW1lID09PSBuYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdFxuKlxuKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuKiBAcGFyYW0gcG9pbnQge1BvaW50fSB0aGUgcG9pbnQgdG8gd3JpdGUgdGhlIGdsb2JhbCB2YWx1ZSB0by4gSWYgbnVsbCBhIG5ldyBwb2ludCB3aWxsIGJlIHJldHVybmVkXG4qIEByZXR1cm4ge1BvaW50fVxuKi9cbmNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0R2xvYmFsUG9zaXRpb24gPSBmdW5jdGlvbiAocG9pbnQpXG57XG4gICAgcG9pbnQgPSBwb2ludCB8fCBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgaWYodGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICBwb2ludC54ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMud29ybGRUcmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHBvaW50LnggPSB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIHBvaW50LnkgPSB0aGlzLnBvc2l0aW9uLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxucmVxdWlyZSgnLi9jYWNoZUFzQml0bWFwJyk7XG5yZXF1aXJlKCcuL2dldENoaWxkQnlOYW1lJyk7XG5yZXF1aXJlKCcuL2dldEdsb2JhbFBvc2l0aW9uJyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmV4dHJhc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNb3ZpZUNsaXA6ICAgICAgcmVxdWlyZSgnLi9Nb3ZpZUNsaXAnKSxcbiAgICBUaWxpbmdTcHJpdGU6ICAgcmVxdWlyZSgnLi9UaWxpbmdTcHJpdGUnKSxcbiAgICBCaXRtYXBUZXh0OiAgICAgcmVxdWlyZSgnLi9CaXRtYXBUZXh0Jylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGUgWSBpcyBmbGlwcGVkIGluIHRoaXMgc2hhZGVyIGZvciBzb21lIHJlYXNvbi5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgc2hhZGVyIDogaHR0cHM6Ly93d3cuc2hhZGVydG95LmNvbS92aWV3L2xzc0dEaiBieSBAbW92QVgxM2hcbiAqL1xuXG4vKipcbiAqIEFuIEFTQ0lJIGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQXNjaWlGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gZmxvYXQgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IGNoYXJhY3RlcihmbG9hdCBuLCB2ZWMyIHApXFxue1xcbiAgICBwID0gZmxvb3IocCp2ZWMyKDQuMCwgLTQuMCkgKyAyLjUpO1xcbiAgICBpZiAoY2xhbXAocC54LCAwLjAsIDQuMCkgPT0gcC54ICYmIGNsYW1wKHAueSwgMC4wLCA0LjApID09IHAueSlcXG4gICAge1xcbiAgICAgICAgaWYgKGludChtb2Qobi9leHAyKHAueCArIDUuMCpwLnkpLCAyLjApKSA9PSAxKSByZXR1cm4gMS4wO1xcbiAgICB9XFxuICAgIHJldHVybiAwLjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5O1xcblxcbiAgICB2ZWMzIGNvbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgZmxvb3IoIHV2IC8gcGl4ZWxTaXplICkgKiBwaXhlbFNpemUgLyBkaW1lbnNpb25zLnh5KS5yZ2I7XFxuXFxuICAgIGZsb2F0IGdyYXkgPSAoY29sLnIgKyBjb2wuZyArIGNvbC5iKSAvIDMuMDtcXG5cXG4gICAgZmxvYXQgbiA9ICA2NTUzNi4wOyAgICAgICAgICAgICAvLyAuXFxuICAgIGlmIChncmF5ID4gMC4yKSBuID0gNjU2MDAuMDsgICAgLy8gOlxcbiAgICBpZiAoZ3JheSA+IDAuMykgbiA9IDMzMjc3Mi4wOyAgIC8vICpcXG4gICAgaWYgKGdyYXkgPiAwLjQpIG4gPSAxNTI1NTA4Ni4wOyAvLyBvXFxuICAgIGlmIChncmF5ID4gMC41KSBuID0gMjMzODUxNjQuMDsgLy8gJlxcbiAgICBpZiAoZ3JheSA+IDAuNikgbiA9IDE1MjUyMDE0LjA7IC8vIDhcXG4gICAgaWYgKGdyYXkgPiAwLjcpIG4gPSAxMzE5OTQ1Mi4wOyAvLyBAXFxuICAgIGlmIChncmF5ID4gMC44KSBuID0gMTE1MTI4MTAuMDsgLy8gI1xcblxcbiAgICB2ZWMyIHAgPSBtb2QoIHV2IC8gKCBwaXhlbFNpemUgKiAwLjUgKSwgMi4wKSAtIHZlYzIoMS4wKTtcXG4gICAgY29sID0gY29sICogY2hhcmFjdGVyKG4sIHApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbCwgMS4wKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiA4IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkFzY2lpRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQXNjaWlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXNjaWlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFzY2lpRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBc2NpaUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGl4ZWwgc2l6ZSB1c2VkIGJ5IHRoZSBmaWx0ZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Bc2NpaUZpbHRlciNcbiAgICAgKi9cbiAgICBzaXplOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsb29tRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsb29tRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlciA9IG5ldyBCbHVyWUZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcbn1cblxuQmxvb21GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbG9vbUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbG9vbUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxvb21GaWx0ZXI7XG5cbkJsb29tRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAvL1RPRE8gLSBjb3B5VGV4U3ViSW1hZ2UyRCBjb3VsZCBiZSB1c2VkIGhlcmU/XG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5TQ1JFRU4pO1xuXG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsb29tRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cblxuLyoqXG4gKiBUaGUgQmx1ckRpckZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0b3dhcmQgYSBkaXJlY3Rpb24gdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpclhcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJZXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJEaXJGaWx0ZXIoZGlyWCwgZGlyWSlcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gZmxvYXQgZGlyWDtcXG51bmlmb3JtIGZsb2F0IGRpclk7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbM107XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWSApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApICogMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pICogMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pICogMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSAqIDAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgZGlyWDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogZGlyWCB8fCAwIH0sXG4gICAgICAgICAgICBkaXJZOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJZIHx8IDAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWCBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJYID0gZGlyWCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWSBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJZID0gZGlyWSB8fCAwO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJEaXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJEaXJGaWx0ZXI7XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcikge1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZiAodGhpcy5wYXNzZXMgPT09IDEpIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCByZW5kZXJUYXJnZXQsIGNsZWFyKTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMjsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL3RoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvICh0aGlzLnBhc3NlcysoaSoyKSkgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCByZW5kZXJUYXJnZXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IHZhbHVlICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBkaXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyWDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZGlyWC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJZO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJZLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWUZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBCbHVyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG59XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJGaWx0ZXI7XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHBhc3Nlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5ibHVyWEZpbHRlci5wYXNzZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcyA9IHRoaXMuYmx1cllGaWx0ZXIucGFzc2VzID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1clhGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJYRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAxMiAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwNCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuXFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1clhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1clhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJYRmlsdGVyO1xuXG5CbHVyWEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1clhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJYRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gIE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJZRmlsdGVyIGFwcGxpZXMgYSBob3Jpem9udGFsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAxMiAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDEyICogc3RyZW5ndGgpO1xcblxcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJZRmlsdGVyO1xuXG5CbHVyWUZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gTWF0aC5hYnModGhpcy5zdHJlbmd0aCkgLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIFNtYXJ0IEJsdXIgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTbWFydEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgKiBwZXJjZW50KTtcXG4gICAgICAgIHNhbXBsZS5yZ2IgKj0gc2FtcGxlLmE7XFxuICAgICAgICBjb2xvciArPSBzYW1wbGUgKiB3ZWlnaHQ7XFxuICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgLyB0b3RhbDtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAvPSBnbF9GcmFnQ29sb3IuYSArIDAuMDAwMDE7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgZGVsdGE6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC4xLCB5OiAwLjAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU21hcnRCbHVyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTbWFydEJsdXJGaWx0ZXI7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA1eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIGBgYGpzXG4gKiAgdmFyIGNvbG9yTWF0cml4ID0gbmV3IFBJWEkuQ29sb3JNYXRyaXhGaWx0ZXIoKTtcbiAqICBjb250YWluZXIuZmlsdGVycyA9IFtjb2xvck1hdHJpeF07XG4gKiAgY29sb3JNYXRyaXguY29udHJhc3QoMik7XG4gKiBgYGBcbiAqIEBhdXRob3IgQ2zDqW1lbnQgQ2hlbmViYXVsdCA8Y2xlbWVudEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ29sb3JNYXRyaXhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgbVsyNV07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcblxcbiAgICB2ZWM0IGMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IuciA9IChtWzBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzJdICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IG1bNF07XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5nID0gKG1bNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bN10gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gbVs5XTtcXG5cXG4gICAgIGdsX0ZyYWdDb2xvci5iID0gKG1bMTBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzExXSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IG1bMTRdO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmEgPSAobVsxNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTZdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gbVsxOV07XFxuXFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICcxZnYnLCB2YWx1ZTogW1xuICAgICAgICAgICAgICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvck1hdHJpeEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JNYXRyaXhGaWx0ZXI7XG5cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGN1cnJlbnQgbWF0cml4IGFuZCBzZXQgdGhlIG5ldyBvbmVcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IGlmIHRydWUsIGN1cnJlbnQgbWF0cml4IGFuZCBtYXRyaXggYXJlIG11bHRpcGxpZWQuIElmIGZhbHNlLCBqdXN0IHNldCB0aGUgY3VycmVudCBtYXRyaXggd2l0aCBAcGFyYW0gbWF0cml4XG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fbG9hZE1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgsIG11bHRpcGx5KVxue1xuICAgIG11bHRpcGx5ID0gISFtdWx0aXBseTtcblxuICAgIHZhciBuZXdNYXRyaXggPSBtYXRyaXg7XG5cbiAgICBpZiAobXVsdGlwbHkpIHtcbiAgICAgICAgdGhpcy5fbXVsdGlwbHkobmV3TWF0cml4LCB0aGlzLnVuaWZvcm1zLm0udmFsdWUsIG1hdHJpeCk7XG4gICAgICAgIG5ld01hdHJpeCA9IHRoaXMuX2NvbG9yTWF0cml4KG5ld01hdHJpeCk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgbWF0cml4XG4gICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gbmV3TWF0cml4O1xufTtcblxuLyoqXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQ1J3NcbiAqXG4gKiBAcGFyYW0gb3V0IHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0gYSB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIGIge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyBvdXQge251bWJlcltdfSAobWF0IDV4NClcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpXG57XG5cbiAgICAvLyBSZWQgQ2hhbm5lbFxuICAgIG91dFswXSA9IChhWzBdICogYlswXSkgKyAoYVsxXSAqIGJbNV0pICsgKGFbMl0gKiBiWzEwXSkgKyAoYVszXSAqIGJbMTVdKTtcbiAgICBvdXRbMV0gPSAoYVswXSAqIGJbMV0pICsgKGFbMV0gKiBiWzZdKSArIChhWzJdICogYlsxMV0pICsgKGFbM10gKiBiWzE2XSk7XG4gICAgb3V0WzJdID0gKGFbMF0gKiBiWzJdKSArIChhWzFdICogYls3XSkgKyAoYVsyXSAqIGJbMTJdKSArIChhWzNdICogYlsxN10pO1xuICAgIG91dFszXSA9IChhWzBdICogYlszXSkgKyAoYVsxXSAqIGJbOF0pICsgKGFbMl0gKiBiWzEzXSkgKyAoYVszXSAqIGJbMThdKTtcbiAgICBvdXRbNF0gPSAoYVswXSAqIGJbNF0pICsgKGFbMV0gKiBiWzldKSArIChhWzJdICogYlsxNF0pICsgKGFbM10gKiBiWzE5XSk7XG5cbiAgICAvLyBHcmVlbiBDaGFubmVsXG4gICAgb3V0WzVdID0gKGFbNV0gKiBiWzBdKSArIChhWzZdICogYls1XSkgKyAoYVs3XSAqIGJbMTBdKSArIChhWzhdICogYlsxNV0pO1xuICAgIG91dFs2XSA9IChhWzVdICogYlsxXSkgKyAoYVs2XSAqIGJbNl0pICsgKGFbN10gKiBiWzExXSkgKyAoYVs4XSAqIGJbMTZdKTtcbiAgICBvdXRbN10gPSAoYVs1XSAqIGJbMl0pICsgKGFbNl0gKiBiWzddKSArIChhWzddICogYlsxMl0pICsgKGFbOF0gKiBiWzE3XSk7XG4gICAgb3V0WzhdID0gKGFbNV0gKiBiWzNdKSArIChhWzZdICogYls4XSkgKyAoYVs3XSAqIGJbMTNdKSArIChhWzhdICogYlsxOF0pO1xuICAgIG91dFs5XSA9IChhWzVdICogYls0XSkgKyAoYVs2XSAqIGJbOV0pICsgKGFbN10gKiBiWzE0XSkgKyAoYVs4XSAqIGJbMTldKTtcblxuICAgIC8vIEJsdWUgQ2hhbm5lbFxuICAgIG91dFsxMF0gPSAoYVsxMF0gKiBiWzBdKSArIChhWzExXSAqIGJbNV0pICsgKGFbMTJdICogYlsxMF0pICsgKGFbMTNdICogYlsxNV0pO1xuICAgIG91dFsxMV0gPSAoYVsxMF0gKiBiWzFdKSArIChhWzExXSAqIGJbNl0pICsgKGFbMTJdICogYlsxMV0pICsgKGFbMTNdICogYlsxNl0pO1xuICAgIG91dFsxMl0gPSAoYVsxMF0gKiBiWzJdKSArIChhWzExXSAqIGJbN10pICsgKGFbMTJdICogYlsxMl0pICsgKGFbMTNdICogYlsxN10pO1xuICAgIG91dFsxM10gPSAoYVsxMF0gKiBiWzNdKSArIChhWzExXSAqIGJbOF0pICsgKGFbMTJdICogYlsxM10pICsgKGFbMTNdICogYlsxOF0pO1xuICAgIG91dFsxNF0gPSAoYVsxMF0gKiBiWzRdKSArIChhWzExXSAqIGJbOV0pICsgKGFbMTJdICogYlsxNF0pICsgKGFbMTNdICogYlsxOV0pO1xuXG4gICAgLy8gQWxwaGEgQ2hhbm5lbFxuICAgIG91dFsxNV0gPSAoYVsxNV0gKiBiWzBdKSArIChhWzE2XSAqIGJbNV0pICsgKGFbMTddICogYlsxMF0pICsgKGFbMThdICogYlsxNV0pO1xuICAgIG91dFsxNl0gPSAoYVsxNV0gKiBiWzFdKSArIChhWzE2XSAqIGJbNl0pICsgKGFbMTddICogYlsxMV0pICsgKGFbMThdICogYlsxNl0pO1xuICAgIG91dFsxN10gPSAoYVsxNV0gKiBiWzJdKSArIChhWzE2XSAqIGJbN10pICsgKGFbMTddICogYlsxMl0pICsgKGFbMThdICogYlsxN10pO1xuICAgIG91dFsxOF0gPSAoYVsxNV0gKiBiWzNdKSArIChhWzE2XSAqIGJbOF0pICsgKGFbMTddICogYlsxM10pICsgKGFbMThdICogYlsxOF0pO1xuICAgIG91dFsxOV0gPSAoYVsxNV0gKiBiWzRdKSArIChhWzE2XSAqIGJbOV0pICsgKGFbMTddICogYlsxNF0pICsgKGFbMThdICogYlsxOV0pO1xuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEByZXR1cm4gbSB7bnVtYmVyW119IChtYXQgNXg0KSB3aXRoIGFsbCB2YWx1ZXMgYmV0d2VlbiAwLTFcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9jb2xvck1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgLy8gQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICAgIHZhciBtID0gbmV3IEZsb2F0MzJBcnJheShtYXRyaXgpO1xuICAgIG1bNF0gLz0gMjU1O1xuICAgIG1bOV0gLz0gMjU1O1xuICAgIG1bMTRdIC89IDI1NTtcbiAgICBtWzE5XSAvPSAyNTU7XG5cbiAgICByZXR1cm4gbTtcbn07XG5cbi8qKlxuICogQWRqdXN0cyBicmlnaHRuZXNzXG4gKlxuICogQHBhcmFtIGIge251bWJlcn0gdmFsdWUgb2YgdGhlIGJyaWd0aG5lc3MgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJpZ2h0bmVzcyA9IGZ1bmN0aW9uIChiLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBiLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCBiLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCBiLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgbWF0cmljZXMgaW4gZ3JleSBzY2FsZXNcbiAqXG4gKiBAcGFyYW0gc2NhbGUge251bWJlcn0gdmFsdWUgb2YgdGhlIGdyZXkgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlID0gZnVuY3Rpb24gKHNjYWxlLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuLy9BbWVyaWNhbml6ZWQgYWxpYXNcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmF5c2NhbGUgPSBDb2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlO1xuXG4vKipcbiAqIFNldCB0aGUgYmxhY2sgYW5kIHdoaXRlIG1hdHJpY2VcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ibGFja0FuZFdoaXRlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBodWUgcHJvcGVydHkgb2YgdGhlIGNvbG9yXG4gKlxuICogQHBhcmFtIHJvdGF0aW9uIHtudW1iZXJ9IGluIGRlZ3JlZXNcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5odWUgPSBmdW5jdGlvbiAocm90YXRpb24sIG11bHRpcGx5KVxue1xuICAgIHJvdGF0aW9uID0gKHJvdGF0aW9uIHx8IDApIC8gMTgwICogTWF0aC5QSTtcbiAgICB2YXIgY29zID0gTWF0aC5jb3Mocm90YXRpb24pLFxuICAgICAgICBzaW4gPSBNYXRoLnNpbihyb3RhdGlvbik7XG5cbiAgICAvLyBsdW1pbmFuY2VSZWQsIGx1bWluYW5jZUdyZWVuLCBsdW1pbmFuY2VCbHVlXG4gICAgdmFyIGx1bVIgPSAwLjIxMywgLy8gb3IgMC4zMDg2XG4gICAgICAgIGx1bUcgPSAwLjcxNSwgLy8gb3IgMC42MDk0XG4gICAgICAgIGx1bUIgPSAwLjA3MjsgLy8gb3IgMC4wODIwXG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBsdW1SICsgY29zICogKDEgLSBsdW1SKSArIHNpbiAqICgtbHVtUiksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKC1sdW1HKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoMSAtIGx1bUIpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgwLjE0MyksIGx1bUcgKyBjb3MgKiAoMSAtIGx1bUcpICsgc2luICogKDAuMTQwKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoLTAuMjgzKSwgMCwgMCxcbiAgICAgICAgbHVtUiArIGNvcyAqICgtbHVtUikgKyBzaW4gKiAoLSgxIC0gbHVtUikpLCBsdW1HICsgY29zICogKC1sdW1HKSArIHNpbiAqIChsdW1HKSwgbHVtQiArIGNvcyAqICgxIC0gbHVtQikgKyBzaW4gKiAobHVtQiksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLyoqXG4gKiBTZXQgdGhlIGNvbnRyYXN0IG1hdHJpeCwgaW5jcmVhc2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBkYXJrIGFuZCBicmlnaHRcbiAqIEluY3JlYXNlIGNvbnRyYXN0IDogc2hhZG93cyBkYXJrZXIgYW5kIGhpZ2hsaWdodHMgYnJpZ2h0ZXJcbiAqIERlY3JlYXNlIGNvbnRyYXN0IDogYnJpbmcgdGhlIHNoYWRvd3MgdXAgYW5kIHRoZSBoaWdobGlnaHRzIGRvd25cbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBjb250cmFzdFxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbnRyYXN0ID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHYgPSAoYW1vdW50IHx8IDApICsgMTtcbiAgICB2YXIgbyA9IC0xMjggKiAodiAtIDEpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgdiwgMCwgMCwgMCwgbyxcbiAgICAgICAgMCwgdiwgMCwgMCwgbyxcbiAgICAgICAgMCwgMCwgdiwgMCwgbyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHNhdHVyYXRpb24gbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGNvbG9yc1xuICogSW5jcmVhc2Ugc2F0dXJhdGlvbiA6IGluY3JlYXNlIGNvbnRyYXN0LCBicmlnaHRuZXNzLCBhbmQgc2hhcnBuZXNzXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNhdHVyYXRlID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHggPSAoYW1vdW50IHx8IDApICogMiAvIDMgKyAxO1xuICAgIHZhciB5ID0gKCh4IC0gMSkgKiAtMC41KTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHgsIHksIHksIDAsIDAsXG4gICAgICAgIHksIHgsIHksIDAsIDAsXG4gICAgICAgIHksIHksIHgsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRGVzYXR1cmF0ZSBpbWFnZSAocmVtb3ZlIGNvbG9yKVxuICpcbiAqIENhbGwgdGhlIHNhdHVyYXRlIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmRlc2F0dXJhdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICB0aGlzLnNhdHVyYXRlKC0xKTtcbn07XG5cbi8qKlxuICogTmVnYXRpdmUgaW1hZ2UgKGludmVyc2Ugb2YgY2xhc3NpYyByZ2IgbWF0cml4KVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uZWdhdGl2ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAxLCAxLCAwLCAwLFxuICAgICAgICAxLCAwLCAxLCAwLCAwLFxuICAgICAgICAxLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNlcGlhIGltYWdlXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNlcGlhID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMzkzLCAwLjc2ODk5OTksIDAuMTg4OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMzQ5LCAwLjY4NTk5OTksIDAuMTY3OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMjcyLCAwLjUzMzk5OTksIDAuMTMwOTk5OTksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgbW90aW9uIHBpY3R1cmUgcHJvY2VzcyBpbnZlbnRlZCBpbiAxOTE2ICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50ZWNobmljb2xvciA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjkxMjUyNzc4OTE0NTYwODMsIC0wLjg1NDUzNDQ5NzY5NTE2NDUsIC0wLjA5MTU1NTA4NDgyNzU1NTg1LCAwLCAxMS43OTM2MDM0MzQzNzczMzcsXG4gICAgICAgIC0wLjMwODc4MzMzODU5MjgwOTcsIDEuNzY1ODkwODU1NTQ1ODQyOCwgLTAuMTA2MDE3NDMwNzQ3MjIyNDUsIDAsIC03MC4zNTIwNTE2MTQ2MTM5OCxcbiAgICAgICAgLTAuMjMxMTAzMzc3NTQ4NjE2LCAtMC43NTAxODk5MTk3NDQwMjEyLCAxLjg0NzU5NzgxNjEwODE4OSwgMCwgMzAuOTUwOTQwODY5NDkxMTM4LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFBvbGFyb2lkIGZpbHRlclxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wb2xhcm9pZCA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjQzOCwgLTAuMDYyLCAtMC4wNjIsIDAsIDAsXG4gICAgICAgIC0wLjEyMiwgMS4zNzgsIC0wLjEyMiwgMCwgMCxcbiAgICAgICAgLTAuMDE2LCAtMC4wMTYsIDEuNDgzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEZpbHRlciB3aG8gdHJhbnNmb3JtcyA6IFJlZCAtPiBCbHVlIGFuZCBCbHVlIC0+IFJlZFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50b0JHUiA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIENvbG9yIHJldmVyc2FsIGZpbG0gaW50cm9kdWNlZCBieSBFYXN0bWFuIEtvZGFrIGluIDE5MzUuICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5rb2RhY2hyb21lID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuMTI4NTU4MjM5NjU5MzUyNSwgLTAuMzk2NzM4MjI4MzYwMTM0OCwgLTAuMDM5OTI1NTkxNzI5MjE3OTMsIDAsIDYzLjcyOTU4NzYyMTk2NTAyLFxuICAgICAgICAtMC4xNjQwNDMzOTk2MjI0NDYxNiwgMS4wODM1MjUxNTY2MjkxMzA0LCAtMC4wNTQ5ODgwNTExNTYzMzEzMiwgMCwgMjQuNzMyNDA3ODk2NzA2MjAzLFxuICAgICAgICAtMC4xNjc4NjAxMDcwNjE1NTc2MywgLTAuNTYwMzQxNjI3NzY5NTI0OCwgMS42MDE0ODUwNzYxOTY0OTQzLCAwLCAzNS42Mjk4MjgwNzQ2MDk0NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBCcm93biBkZWxpY2lvdXMgYnJvd25pIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJvd25pID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNTk5NzAyMzQ5ODE1OTcxNSwgMC4zNDU1MzI0MzA0ODM5MTI2MywgLTAuMjcwODI5ODY3NDUzODA0MiwgMCwgNDcuNDMxOTI4NTU2MDA4NzMsXG4gICAgICAgIC0wLjAzNzcwMzI0OTgzNzc4MzE1NywgMC44NjA5NTc3NTg3OTkyNjQxLCAwLjE1MDU5NTUyMzg4NDU5OTEzLCAwLCAtMzYuOTY4NDE0OTgzMTkxMjcsXG4gICAgICAgIDAuMjQxMTM2MzUxMjgxNTMzMzUsIC0wLjA3NDQxMDM3OTA4NDIyNDkyLCAwLjQ0OTcyMTgyMDY0ODc3MTUzLCAwLCAtNy41NjIwNzUyNzc1OTEyODMsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBWaW50YWdlIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudmludGFnZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjYyNzkzNDU2MzU2MDU5OTQsIDAuMzIwMjE4MzQyMDgxOTM2NywgLTAuMDM5NjU0MDgyMTEzMTI0NTMsIDAsIDkuNjUxMjg1ODM1Mjk0MTIzLFxuICAgICAgICAwLjAyNTc4Mzk3NzA0ODA4ODY4LCAwLjY0NDExODg2NDQzNzQ3NzEsIDAuMDMyNTkxMjc2MTYxNDkyOTQsIDAsIDcuNDYyODI5MTc2NDcwNTkxLFxuICAgICAgICAwLjA0NjYwNTU1NTY3ODI3MTksIC0wLjA4NTEyMzI5ODcyNDc4OTEsIDAuNTI0MTY0ODAxODcwMDQ2NSwgMCwgNS4xNTkxOTA1ODgyMzUyOTYsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBXZSBkb24ndCBrbm93IGV4YWN0bHkgd2hhdCBpdCBkb2VzLCBraW5kIG9mIGdyYWRpZW50IG1hcCwgYnV0IGZ1bm55IHRvIHBsYXkgd2l0aCFcbiAqXG4gKiBAcGFyYW0gZGVzYXR1cmF0aW9uIHtudW1iZXJ9XG4gKiBAcGFyYW0gdG9uZWQge251bWJlcn1cbiAqIEBwYXJhbSBsaWdodENvbG9yIHtzdHJpbmd9IChleGFtcGxlIDogXCIweEZGRTU4MFwiKVxuICogQHBhcmFtIGRhcmtDb2xvciB7c3RyaW5nfSAgKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbG9yVG9uZSA9IGZ1bmN0aW9uIChkZXNhdHVyYXRpb24sIHRvbmVkLCBsaWdodENvbG9yLCBkYXJrQ29sb3IsIG11bHRpcGx5KVxue1xuICAgIGRlc2F0dXJhdGlvbiA9IGRlc2F0dXJhdGlvbiB8fCAwLjI7XG4gICAgdG9uZWQgPSB0b25lZCB8fCAwLjE1O1xuICAgIGxpZ2h0Q29sb3IgPSBsaWdodENvbG9yIHx8IDB4RkZFNTgwO1xuICAgIGRhcmtDb2xvciA9IGRhcmtDb2xvciB8fCAweDMzODAwMDtcblxuICAgIHZhciBsUiA9ICgobGlnaHRDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEcgPSAoKGxpZ2h0Q29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEIgPSAobGlnaHRDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgdmFyIGRSID0gKChkYXJrQ29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGRHID0gKChkYXJrQ29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEIgPSAoZGFya0NvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjMsIDAuNTksIDAuMTEsIDAsIDAsXG4gICAgICAgIGxSLCBsRywgbEIsIGRlc2F0dXJhdGlvbiwgMCxcbiAgICAgICAgZFIsIGRHLCBkQiwgdG9uZWQsIDAsXG4gICAgICAgIGxSIC0gZFIsIGxHIC0gZEcsIGxCIC0gZEIsIDAsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBOaWdodCBlZmZlY3RcbiAqXG4gKiBAcGFyYW0gaW50ZW5zaXR5IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubmlnaHQgPSBmdW5jdGlvbiAoaW50ZW5zaXR5LCBtdWx0aXBseSlcbntcbiAgICBpbnRlbnNpdHkgPSBpbnRlbnNpdHkgfHwgMC4xO1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGludGVuc2l0eSAqICggLTIuMCksIC1pbnRlbnNpdHksIDAsIDAsIDAsXG4gICAgICAgIC1pbnRlbnNpdHksIDAsIGludGVuc2l0eSwgMCwgMCxcbiAgICAgICAgMCwgaW50ZW5zaXR5LCBpbnRlbnNpdHkgKiAyLjAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLypcbiAqIFByZWRhdG9yIGVmZmVjdFxuICpcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIGEgbmV3IGluZGVwZW50IG9uZVxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gaG93IG11Y2ggdGhlIHByZWRhdG9yIGZlZWxzIGhpcyBmdXR1cmUgdmljdGltXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucHJlZGF0b3IgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxMS4yMjQxMzA2MzA0OTMxNjQgKiBhbW91bnQsIC00Ljc5NDQ4Njk5OTUxMTcxOSAqIGFtb3VudCwgLTIuODc0NjExODU0NTUzMjIyNyAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC40MDM0MjQzODIyMDk3Nzc4MyAqIGFtb3VudCxcbiAgICAgICAgLTMuNjMzMDY5NzUzNjQ2ODUwNiAqIGFtb3VudCwgOS4xOTMxNTcxOTYwNDQ5MjIgKiBhbW91bnQsIC0yLjk1MTgxMDgzNjc5MTk5MiAqIGFtb3VudCwgMCAqIGFtb3VudCwgLTEuMzE2MTM1MDQ4ODY2MjcyICogYW1vdW50LFxuICAgICAgICAtMy4yMTg0MTk3OTAyNjc5NDQzICogYW1vdW50LCAtNC4yMzc1MDMwNTE3NTc4MTI1ICogYW1vdW50LCA3LjQ3NjQ0ODA1OTA4MjAzMSAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC44MDQ0NDU5MjIzNzQ3MjUzICogYW1vdW50LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogTFNEIGVmZmVjdFxuICpcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gSG93IGNyYXp5IGlzIHlvdXIgZWZmZWN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubHNkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDIsIC0wLjQsIDAuNSwgMCwgMCxcbiAgICAgICAgLTAuNSwgMiwgLTAuNCwgMCwgMCxcbiAgICAgICAgLTAuNCwgLTAuNSwgMywgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIHRoZSBkZWZhdWx0IG9uZVxuICpcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBmYWxzZSk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hdHJpeCBvZiB0aGUgY29sb3IgbWF0cml4IGZpbHRlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvck1hdHJpeEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCBbMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMF1cbiAgICAgKi9cbiAgICBtYXRyaXg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgbG93ZXJzIHRoZSBjb2xvciBkZXB0aCBvZiB5b3VyIGltYWdlIGJ5IHRoZSBnaXZlbiBhbW91bnQsIHByb2R1Y2luZyBhbiBpbWFnZSB3aXRoIGEgc21hbGxlciBwYWxldHRlLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvclN0ZXBGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc3RlcDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBjb2xvciA9IGZsb29yKGNvbG9yICogc3RlcCkgLyBzdGVwO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdGVwOiB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvclN0ZXBGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yU3RlcEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2Ygc3RlcHMgdG8gcmVkdWNlIHRoZSBwYWxldHRlIGJ5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29sb3JTdGVwRmlsdGVyI1xuICAgICAqL1xuICAgIHN0ZXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb252b2x1dGlvbkZpbHRlciBjbGFzcyBhcHBsaWVzIGEgbWF0cml4IGNvbnZvbHV0aW9uIGZpbHRlciBlZmZlY3QuXG4gKiBBIGNvbnZvbHV0aW9uIGNvbWJpbmVzIHBpeGVscyBpbiB0aGUgaW5wdXQgaW1hZ2Ugd2l0aCBuZWlnaGJvcmluZyBwaXhlbHMgdG8gcHJvZHVjZSBhIG5ldyBpbWFnZS5cbiAqIEEgd2lkZSB2YXJpZXR5IG9mIGltYWdlIGVmZmVjdHMgY2FuIGJlIGFjaGlldmVkIHRocm91Z2ggY29udm9sdXRpb25zLCBpbmNsdWRpbmcgYmx1cnJpbmcsIGVkZ2VcbiAqIGRldGVjdGlvbiwgc2hhcnBlbmluZywgZW1ib3NzaW5nLCBhbmQgYmV2ZWxpbmcuIFRoZSBtYXRyaXggc2hvdWxkIGJlIHNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBTZWUgaHR0cDovL2RvY3MuZ2ltcC5vcmcvZW4vcGx1Zy1pbi1jb252bWF0cml4Lmh0bWwgZm9yIG1vcmUgaW5mby5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSBBbiBhcnJheSBvZiB2YWx1ZXMgdXNlZCBmb3IgbWF0cml4IHRyYW5zZm9ybWF0aW9uLiBTcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFdpZHRoIG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqL1xuZnVuY3Rpb24gQ29udm9sdXRpb25GaWx0ZXIobWF0cml4LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgbWVkaXVtcCB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTtcXG51bmlmb3JtIGZsb2F0IG1hdHJpeFs5XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjNCBjMTEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgLSB0ZXhlbFNpemUpOyAvLyB0b3AgbGVmdFxcbiAgIHZlYzQgYzEyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55IC0gdGV4ZWxTaXplLnkpKTsgLy8gdG9wIGNlbnRlclxcbiAgIHZlYzQgYzEzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgcmlnaHRcXG5cXG4gICB2ZWM0IGMyMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCBsZWZ0XFxuICAgdmVjNCBjMjIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpOyAvLyBtaWQgY2VudGVyXFxuICAgdmVjNCBjMjMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSkpOyAvLyBtaWQgcmlnaHRcXG5cXG4gICB2ZWM0IGMzMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGxlZnRcXG4gICB2ZWM0IGMzMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLngsIHZUZXh0dXJlQ29vcmQueSArIHRleGVsU2l6ZS55KSk7IC8vIGJvdHRvbSBjZW50ZXJcXG4gICB2ZWM0IGMzMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIHRleGVsU2l6ZSk7IC8vIGJvdHRvbSByaWdodFxcblxcbiAgIGdsX0ZyYWdDb2xvciA9XFxuICAgICAgIGMxMSAqIG1hdHJpeFswXSArIGMxMiAqIG1hdHJpeFsxXSArIGMxMyAqIG1hdHJpeFsyXSArXFxuICAgICAgIGMyMSAqIG1hdHJpeFszXSArIGMyMiAqIG1hdHJpeFs0XSArIGMyMyAqIG1hdHJpeFs1XSArXFxuICAgICAgIGMzMSAqIG1hdHJpeFs2XSArIGMzMiAqIG1hdHJpeFs3XSArIGMzMyAqIG1hdHJpeFs4XTtcXG5cXG4gICBnbF9GcmFnQ29sb3IuYSA9IGMyMi5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hdHJpeDogICAgIHsgdHlwZTogJzFmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCkgfSxcbiAgICAgICAgICAgIHRleGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSAvIHdpZHRoLCB5OiAxIC8gaGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb252b2x1dGlvbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29udm9sdXRpb25GaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hdHJpeC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMS90aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueCA9IDEvdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS55ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQSBDcm9zcyBIYXRjaCBlZmZlY3QgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDcm9zc0hhdGNoRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGZsb2F0IGx1bSA9IGxlbmd0aCh0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQueHkpLnJnYik7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wLCAxLjAsIDEuMCwgMS4wKTtcXG5cXG4gICAgaWYgKGx1bSA8IDEuMDApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC43NSlcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjUwKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54ICsgZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuMylcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55IC0gNS4wLCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblwiXG4gICAgKTtcbn1cblxuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNyb3NzSGF0Y2hGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBEaXNwbGFjZW1lbnRGaWx0ZXIgY2xhc3MgdXNlcyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20gdGhlIHNwZWNpZmllZCB0ZXh0dXJlIChjYWxsZWQgdGhlIGRpc3BsYWNlbWVudCBtYXApIHRvIHBlcmZvcm0gYSBkaXNwbGFjZW1lbnQgb2YgYW4gb2JqZWN0LlxuICogWW91IGNhbiB1c2UgdGhpcyBmaWx0ZXIgdG8gYXBwbHkgYWxsIG1hbm9yIG9mIGNyYXp5IHdhcnBpbmcgZWZmZWN0c1xuICogQ3VycmVudGx5IHRoZSByIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB4IGFuZCB0aGUgZyBwcm9wZXJ0eSBvZiB0aGUgdGV4dHVyZSBpcyB1c2VkIHRvIG9mZnNldCB0aGUgeS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiAobWFrZSBzdXJlIGl0cyBhZGRlZCB0byB0aGUgc2NlbmUhKVxuICovXG5mdW5jdGlvbiBEaXNwbGFjZW1lbnRGaWx0ZXIoc3ByaXRlLCBzY2FsZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuICAgIHNwcml0ZS5yZW5kZXJhYmxlID0gZmFsc2U7XG5cbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2TWFwQ29vcmQgPSAoIG90aGVyTWF0cml4ICogdmVjMyggYVRleHR1cmVDb29yZCwgMS4wKSAgKS54eTtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMiBzY2FsZTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXBTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IG1hcCA9ICB0ZXh0dXJlMkQobWFwU2FtcGxlciwgdk1hcENvb3JkKTtcXG5cXG4gICBtYXAgLT0gMC41O1xcbiAgIG1hcC54eSAqPSBzY2FsZTtcXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgbWFwLngsIHZUZXh0dXJlQ29vcmQueSArIG1hcC55KSk7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtYXBTYW1wbGVyOiAgICAgeyB0eXBlOiAnc2FtcGxlcjJEJywgdmFsdWU6IHNwcml0ZS50ZXh0dXJlIH0sXG4gICAgICAgICAgICBvdGhlck1hdHJpeDogICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBtYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSkgfSxcbiAgICAgICAgICAgIHNjYWxlOiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG5cbiAgICBpZiAoc2NhbGUgPT09IG51bGwgfHwgc2NhbGUgPT09IHVuZGVmaW5lZClcbiAgICB7XG4gICAgICAgIHNjYWxlID0gMjA7XG4gICAgfVxuXG4gICAgdGhpcy5zY2FsZSA9IG5ldyBjb3JlLlBvaW50KHNjYWxlLCBzY2FsZSk7XG59XG5cbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGFjZW1lbnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERpc3BsYWNlbWVudEZpbHRlcjtcblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICBmaWx0ZXJNYW5hZ2VyLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeChpbnB1dC5mcmFtZSwgdGhpcy5tYXNrU3ByaXRlLCB0aGlzLm1hc2tNYXRyaXgpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5vdGhlck1hdHJpeC52YWx1ZSA9IHRoaXMubWFza01hdHJpeC50b0FycmF5KHRydWUpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueCA9IHRoaXMuc2NhbGUueCAqICgxL2lucHV0LmZyYW1lLndpZHRoKTtcbiAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlLnkgPSB0aGlzLnNjYWxlLnkgKiAoMS9pbnB1dC5mcmFtZS5oZWlnaHQpO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRGlzcGxhY2VtZW50RmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvZnVuL2RvdHNjcmVlbi5qc1xuICovXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIGRvdHNjcmVlbiBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgdG8gYmUgbWFkZSBvdXQgb2ZcbiAqIGJsYWNrIGFuZCB3aGl0ZSBoYWxmdG9uZSBkb3RzIGxpa2UgYW4gb2xkIHByaW50ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIERvdFNjcmVlbkZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XFxuXFxuZmxvYXQgcGF0dGVybigpXFxue1xcbiAgIGZsb2F0IHMgPSBzaW4oYW5nbGUpLCBjID0gY29zKGFuZ2xlKTtcXG4gICB2ZWMyIHRleCA9IHZUZXh0dXJlQ29vcmQgKiBkaW1lbnNpb25zLnh5O1xcbiAgIHZlYzIgcG9pbnQgPSB2ZWMyKFxcbiAgICAgICBjICogdGV4LnggLSBzICogdGV4LnksXFxuICAgICAgIHMgKiB0ZXgueCArIGMgKiB0ZXgueVxcbiAgICkgKiBzY2FsZTtcXG4gICByZXR1cm4gKHNpbihwb2ludC54KSAqIHNpbihwb2ludC55KSkgKiA0LjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGZsb2F0IGF2ZXJhZ2UgPSAoY29sb3IuciArIGNvbG9yLmcgKyBjb2xvci5iKSAvIDMuMDtcXG4gICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzMoYXZlcmFnZSAqIDEwLjAgLSA1LjAgKyBwYXR0ZXJuKCkpLCBjb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzY2FsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEb3RTY3JlZW5GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERvdFNjcmVlbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBzY2FsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSByYWRpdXMgb2YgdGhlIGVmZmVjdC5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Eb3RTY3JlZW5GaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllUaW50RmlsdGVyIGFwcGxpZXMgYSB2ZXJ0aWNhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1cllUaW50RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24rb2Zmc2V0KSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMyBjb2xvcjtcXG51bmlmb3JtIGZsb2F0IGFscGhhO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBzdW0gPSB2ZWM0KDAuMCk7XFxuXFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KCBjb2xvci5yZ2IgKiBzdW0uYSAqIGFscGhhLCBzdW0uYSAqIGFscGhhICk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgLyA1MTIgfSxcbiAgICAgICAgICAgIGNvbG9yOiB7IHR5cGU6ICdjJywgdmFsdWU6IFswLDAsMF19LFxuICAgICAgICAgICAgYWxwaGE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNyB9LFxuICAgICAgICAgICAgb2Zmc2V0OiB7IHR5cGU6ICcyZicsIHZhbHVlOls1LCA1XX0sXG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZToxfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJZVGludEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllUaW50RmlsdGVyO1xuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCBjbGVhcik7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJZVGludEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllUaW50RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZVGludEZpbHRlciA9IHJlcXVpcmUoJy4vQmx1cllUaW50RmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIERyb3BTaGFkb3dGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRHJvcFNoYWRvd0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyID0gbmV3IEJsdXJZVGludEZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIHRoaXMucGFkZGluZyA9IDMwO1xuXG4gICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgdGhpcy5fYW5nbGUgPSA0NSAqIE1hdGguUEkgLyAxODA7XG4gICAgdGhpcy5fZGlzdGFuY2UgPSAxMDtcbiAgICB0aGlzLmFscGhhID0gMC43NTtcbiAgICB0aGlzLmhpZGVPYmplY3QgPSBmYWxzZTtcbiAgICB0aGlzLmJsZW5kTW9kZSA9IGNvcmUuQkxFTkRfTU9ERVMuTVVMVElQTFk7XG59XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERyb3BTaGFkb3dGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERyb3BTaGFkb3dGaWx0ZXI7XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICBpZih0aGlzLl9kaXJ0eVBvc2l0aW9uKVxuICAgIHtcbiAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVswXSA9IE1hdGguc2luKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5vZmZzZXQudmFsdWVbMV0gPSBNYXRoLmNvcyh0aGlzLl9hbmdsZSkgKiB0aGlzLl9kaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKHRoaXMuYmxlbmRNb2RlKTtcblxuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZighdGhpcy5oaWRlT2JqZWN0KVxuICAgIHtcblxuICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuICAgIH1cblxuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNvbG9yIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgY29sb3I6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIGNvcmUudXRpbHMucmdiMmhleCggdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmNvbG9yLnZhbHVlID0gY29yZS51dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbHBoYSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFscGhhOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzdGFuY2Ugb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBkaXN0YW5jZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3RhbmNlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYW5nbGUgb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fYW5nbGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2FuZ2xlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZ3JleXNjYWxlcyB0aGUgcGFsZXR0ZSBvZiB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gR3JheUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGdyYXk7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peChnbF9GcmFnQ29sb3IucmdiLCB2ZWMzKDAuMjEyNipnbF9GcmFnQ29sb3IuciArIDAuNzE1MipnbF9GcmFnQ29sb3IuZyArIDAuMDcyMipnbF9GcmFnQ29sb3IuYiksIGdyYXkpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBncmF5OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkdyYXlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5HcmF5RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEdyYXlGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmF5LiAxIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGJsYWNrIGFuZCB3aGl0ZSwgMCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuR3JheUZpbHRlciNcbiAgICAgKi9cbiAgICBncmF5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBmaWx0ZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5maWx0ZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEFzY2lpRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9hc2NpaS9Bc2NpaUZpbHRlcicpLFxuICAgIEJsb29tRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibG9vbS9CbG9vbUZpbHRlcicpLFxuICAgIEJsdXJGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJGaWx0ZXInKSxcbiAgICBCbHVyWEZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJZRmlsdGVyJyksXG4gICAgQmx1ckRpckZpbHRlcjogICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckRpckZpbHRlcicpLFxuICAgIENvbG9yTWF0cml4RmlsdGVyOiAgcmVxdWlyZSgnLi9jb2xvci9Db2xvck1hdHJpeEZpbHRlcicpLFxuICAgIENvbG9yU3RlcEZpbHRlcjogICAgcmVxdWlyZSgnLi9jb2xvci9Db2xvclN0ZXBGaWx0ZXInKSxcbiAgICBDb252b2x1dGlvbkZpbHRlcjogIHJlcXVpcmUoJy4vY29udm9sdXRpb24vQ29udm9sdXRpb25GaWx0ZXInKSxcbiAgICBDcm9zc0hhdGNoRmlsdGVyOiAgIHJlcXVpcmUoJy4vY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyJyksXG4gICAgRGlzcGxhY2VtZW50RmlsdGVyOiByZXF1aXJlKCcuL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXInKSxcbiAgICBEb3RTY3JlZW5GaWx0ZXI6ICAgIHJlcXVpcmUoJy4vZG90L0RvdFNjcmVlbkZpbHRlcicpLFxuICAgIEdyYXlGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ncmF5L0dyYXlGaWx0ZXInKSxcbiAgICBEcm9wU2hhZG93RmlsdGVyOiAgIHJlcXVpcmUoJy4vZHJvcHNoYWRvdy9Ecm9wU2hhZG93RmlsdGVyJyksXG4gICAgSW52ZXJ0RmlsdGVyOiAgICAgICByZXF1aXJlKCcuL2ludmVydC9JbnZlcnRGaWx0ZXInKSxcbiAgICBOb2lzZUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vbm9pc2UvTm9pc2VGaWx0ZXInKSxcbiAgICBQaXhlbGF0ZUZpbHRlcjogICAgIHJlcXVpcmUoJy4vcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXInKSxcbiAgICBSR0JTcGxpdEZpbHRlcjogICAgIHJlcXVpcmUoJy4vcmdiL1JHQlNwbGl0RmlsdGVyJyksXG4gICAgU2hvY2t3YXZlRmlsdGVyOiAgICByZXF1aXJlKCcuL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXInKSxcbiAgICBTZXBpYUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vc2VwaWEvU2VwaWFGaWx0ZXInKSxcbiAgICBTbWFydEJsdXJGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vYmx1ci9TbWFydEJsdXJGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFhGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlcicpLFxuICAgIFR3aXN0RmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi90d2lzdC9Ud2lzdEZpbHRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBpbnZlcnRzIHlvdXIgRGlzcGxheSBPYmplY3RzIGNvbG9ycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gSW52ZXJ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIGZsb2F0IGludmVydDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoICh2ZWMzKDEpLWdsX0ZyYWdDb2xvci5yZ2IpICogZ2xfRnJhZ0NvbG9yLmEsIGdsX0ZyYWdDb2xvci5yZ2IsIDEuMCAtIGludmVydCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgaW52ZXJ0OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkludmVydEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkludmVydEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnZlcnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludmVydEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgaW52ZXJ0LiBgMWAgd2lsbCBmdWxseSBpbnZlcnQgdGhlIGNvbG9ycywgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5JbnZlcnRGaWx0ZXIjXG4gICAgICovXG4gICAgaW52ZXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuaW52ZXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYWRqdXN0L25vaXNlLmpzXG4gKi9cblxuLyoqXG4gKiBBIE5vaXNlIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIE5vaXNlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IG5vaXNlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IHJhbmQodmVjMiBjbylcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGNvLnh5LCB2ZWMyKDEyLjk4OTgsIDc4LjIzMykpKSAqIDQzNzU4LjU0NTMpO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGZsb2F0IGRpZmYgPSAocmFuZCh2VGV4dHVyZUNvb3JkKSAtIDAuNSkgKiBub2lzZTtcXG5cXG4gICAgY29sb3IuciArPSBkaWZmO1xcbiAgICBjb2xvci5nICs9IGRpZmY7XFxuICAgIGNvbG9yLmIgKz0gZGlmZjtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbm9pc2U6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Ob2lzZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbk5vaXNlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE5vaXNlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBOb2lzZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTm9pc2VGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGFtb3VudCBvZiBub2lzZSB0byBhcHBseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLk5vaXNlRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDAuNVxuICAgICAqL1xuICAgIG5vaXNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm5vaXNlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSBwaXhlbGF0ZSBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgJ2Jsb2NreScuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFBpeGVsYXRlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZlYzIgc2l6ZSA9IGRpbWVuc2lvbnMueHkgLyBwaXhlbFNpemU7XFxuXFxuICAgIHZlYzIgY29sb3IgPSBmbG9vciggKCB2VGV4dHVyZUNvb3JkICogc2l6ZSApICkgLyBzaXplICsgcGl4ZWxTaXplL2RpbWVuc2lvbnMueHkgKiAwLjU7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgY29sb3IpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsICB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICd2MicsICAgdmFsdWU6IHsgeDogMTAsIHk6IDEwIH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQaXhlbGF0ZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gUGl4ZWxhdGVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgYSBwb2ludCB0aGF0IGRlc2NyaWJlcyB0aGUgc2l6ZSBvZiB0aGUgYmxvY2tzLlxuICAgICAqIHggaXMgdGhlIHdpZHRoIG9mIHRoZSBibG9jayBhbmQgeSBpcyB0aGUgaGVpZ2h0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlBpeGVsYXRlRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBbiBSR0IgU3BsaXQgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBSR0JTcGxpdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSB2ZWMyIHJlZDtcXG51bmlmb3JtIHZlYzIgZ3JlZW47XFxudW5pZm9ybSB2ZWMyIGJsdWU7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvci5yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgcmVkL2RpbWVuc2lvbnMueHkpLnI7XFxuICAgZ2xfRnJhZ0NvbG9yLmcgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBncmVlbi9kaW1lbnNpb25zLnh5KS5nO1xcbiAgIGdsX0ZyYWdDb2xvci5iID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgYmx1ZS9kaW1lbnNpb25zLnh5KS5iO1xcbiAgIGdsX0ZyYWdDb2xvci5hID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKS5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZDogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGdyZWVuOiAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogLTIwLCB5OiAyMCB9IH0sXG4gICAgICAgICAgICBibHVlOiAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDIwLCB5OiAtMjAgfSB9LFxuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLCAwLCAwLCAwXSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5SR0JTcGxpdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJHQlNwbGl0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBSR0JTcGxpdEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogUmVkIGNoYW5uZWwgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIHJlZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJlZC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR3JlZW4gY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JlZW46IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JlZW4udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBCbHVlIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGFwcGxpZXMgYSBzZXBpYSBlZmZlY3QgdG8geW91ciBEaXNwbGF5IE9iamVjdHMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNlcGlhRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHNlcGlhO1xcblxcbmNvbnN0IG1hdDMgc2VwaWFNYXRyaXggPSBtYXQzKDAuMzU4OCwgMC43MDQ0LCAwLjEzNjgsIDAuMjk5MCwgMC41ODcwLCAwLjExNDAsIDAuMjM5MiwgMC40Njk2LCAwLjA5MTIpO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGdsX0ZyYWdDb2xvci5yZ2IgKiBzZXBpYU1hdHJpeCwgc2VwaWEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNlcGlhOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNlcGlhRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU2VwaWFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2VwaWFGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNlcGlhRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTZXBpYUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIHNlcGlhLiBgMWAgd2lsbCBhcHBseSB0aGUgZnVsbCBzZXBpYSBlZmZlY3QsIGFuZFxuICAgICAqIGAwYCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2VwaWFGaWx0ZXIjXG4gICAgICovXG4gICAgc2VwaWE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc2VwaWEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbG9yTWF0cml4RmlsdGVyIGNsYXNzIGxldHMgeW91IGFwcGx5IGEgNHg0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgUkdCQVxuICogY29sb3IgYW5kIGFscGhhIHZhbHVlcyBvZiBldmVyeSBwaXhlbCBvbiB5b3VyIGRpc3BsYXlPYmplY3QgdG8gcHJvZHVjZSBhIHJlc3VsdFxuICogd2l0aCBhIG5ldyBzZXQgb2YgUkdCQSBjb2xvciBhbmQgYWxwaGEgdmFsdWVzLiBJdCdzIHByZXR0eSBwb3dlcmZ1bCFcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2hvY2t3YXZlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIHZlYzIgY2VudGVyO1xcbnVuaWZvcm0gdmVjMyBwYXJhbXM7IC8vIDEwLjAsIDAuOCwgMC4xXFxudW5pZm9ybSBmbG9hdCB0aW1lO1xcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gdlRleHR1cmVDb29yZDtcXG4gICAgdmVjMiB0ZXhDb29yZCA9IHV2O1xcblxcbiAgICBmbG9hdCBkaXN0ID0gZGlzdGFuY2UodXYsIGNlbnRlcik7XFxuXFxuICAgIGlmICggKGRpc3QgPD0gKHRpbWUgKyBwYXJhbXMueikpICYmIChkaXN0ID49ICh0aW1lIC0gcGFyYW1zLnopKSApXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IGRpZmYgPSAoZGlzdCAtIHRpbWUpO1xcbiAgICAgICAgZmxvYXQgcG93RGlmZiA9IDEuMCAtIHBvdyhhYnMoZGlmZipwYXJhbXMueCksIHBhcmFtcy55KTtcXG5cXG4gICAgICAgIGZsb2F0IGRpZmZUaW1lID0gZGlmZiAgKiBwb3dEaWZmO1xcbiAgICAgICAgdmVjMiBkaWZmVVYgPSBub3JtYWxpemUodXYgLSBjZW50ZXIpO1xcbiAgICAgICAgdGV4Q29vcmQgPSB1diArIChkaWZmVVYgKiBkaWZmVGltZSk7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB0ZXhDb29yZCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgY2VudGVyOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfSxcbiAgICAgICAgICAgIHBhcmFtczogeyB0eXBlOiAndjMnLCB2YWx1ZTogeyB4OiAxMCwgeTogMC44LCB6OiAwLjEgfSB9LFxuICAgICAgICAgICAgdGltZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hvY2t3YXZlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaG9ja3dhdmVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjZW50ZXIgb2YgdGhlIHNob2Nrd2F2ZSBpbiBub3JtYWxpemVkIHNjcmVlbiBjb29yZHMuIFRoYXQgaXNcbiAgICAgKiAoMCwwKSBpcyB0aGUgdG9wLWxlZnQgYW5kICgxLDEpIGlzIHRoZSBib3R0b20gcmlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBudW1iZXI+fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIGNlbnRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmNlbnRlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBhcmFtcyBvZiB0aGUgc2hvY2t3YXZlLiBUaGVzZSBtb2RpZnkgdGhlIGxvb2sgYW5kIGJlaGF2aW9yIG9mXG4gICAgICogdGhlIHNob2Nrd2F2ZSBhcyBpdCByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgcGFyYW1zOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGFyYW1zLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZWxhcHNlZCB0aW1lIG9mIHRoZSBzaG9ja3dhdmUuIFRoaXMgY29udHJvbHMgdGhlIHNwZWVkIGF0IHdoaWNoXG4gICAgICogdGhlIHNob2Nrd2F2ZSByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICB0aW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0QXhpc0ZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0QXhpc0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBibHVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JhZGllbnRCbHVyO1xcbnVuaWZvcm0gdmVjMiBzdGFydDtcXG51bmlmb3JtIHZlYzIgZW5kO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG51bmlmb3JtIHZlYzIgdGV4U2l6ZTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG4gICAgdmVjMiBub3JtYWwgPSBub3JtYWxpemUodmVjMihzdGFydC55IC0gZW5kLnksIGVuZC54IC0gc3RhcnQueCkpO1xcbiAgICBmbG9hdCByYWRpdXMgPSBzbW9vdGhzdGVwKDAuMCwgMS4wLCBhYnMoZG90KHZUZXh0dXJlQ29vcmQgKiB0ZXhTaXplIC0gc3RhcnQsIG5vcm1hbCkpIC8gZ3JhZGllbnRCbHVyKSAqIGJsdXI7XFxuXFxuICAgIGZvciAoZmxvYXQgdCA9IC0zMC4wOyB0IDw9IDMwLjA7IHQrKylcXG4gICAge1xcbiAgICAgICAgZmxvYXQgcGVyY2VudCA9ICh0ICsgb2Zmc2V0IC0gMC41KSAvIDMwLjA7XFxuICAgICAgICBmbG9hdCB3ZWlnaHQgPSAxLjAgLSBhYnMocGVyY2VudCk7XFxuICAgICAgICB2ZWM0IHNhbXBsZSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGRlbHRhIC8gdGV4U2l6ZSAqIHBlcmNlbnQgKiByYWRpdXMpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBibHVyOiAgICAgICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMTAwIH0sXG4gICAgICAgICAgICBncmFkaWVudEJsdXI6ICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNjAwIH0sXG4gICAgICAgICAgICBzdGFydDogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLCAgICB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIH0gfSxcbiAgICAgICAgICAgIGVuZDogICAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDYwMCwgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZGVsdGE6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMzAsICAgeTogMzAgfSB9LFxuICAgICAgICAgICAgdGV4U2l6ZTogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogd2luZG93LmlubmVyV2lkdGgsIHk6IHdpbmRvdy5pbm5lckhlaWdodCB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG59XG5cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiB0aGUgWCBhbmQgWSBmaWx0ZXJzLCBkb2VzIG5vdGhpbmcgZm9yIHRoaXMgY2xhc3MuXG4gKlxuICovXG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gMDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSAwO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmFkaWVudEJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIHN0YXJ0IHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgZW5kOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdFlGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0IEZpbHRlci4gTWFuYWdlcyB0aGUgcGFzcyBvZiBib3RoIGEgVGlsdFNoaWZ0WEZpbHRlciBhbmQgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIgPSBuZXcgVGlsdFNoaWZ0WEZpbHRlcigpO1xuICAgIHRoaXMudGlsdFNoaWZ0WUZpbHRlciA9IG5ldyBUaWx0U2hpZnRZRmlsdGVyKCk7XG59XG5cblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEZpbHRlcjtcblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JhZGllbnQgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ncmFkaWVudEJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZ3JhZGllbnRCbHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFkgdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuc3RhcnQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBlbmQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5lbmQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZW5kID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBUaWx0U2hpZnRBeGlzRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRBeGlzRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdFhGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRpbHRTaGlmdEF4aXNGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0WEZpbHRlcigpXG57XG4gICAgVGlsdFNoaWZ0QXhpc0ZpbHRlci5jYWxsKHRoaXMpO1xufVxuXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRYRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRYRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKlxuICovXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGR4ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueCAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueDtcbiAgICB2YXIgZHkgPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS55IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS55O1xuICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IGR4IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeSAvIGQ7XG59O1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRZRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gLWR5IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeCAvIGQ7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHR3aXN0IGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0d2lzdGVkIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFR3aXN0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHJhZGl1cztcXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzIgY29vcmQgPSB2VGV4dHVyZUNvb3JkIC0gb2Zmc2V0O1xcbiAgIGZsb2F0IGRpc3QgPSBsZW5ndGgoY29vcmQpO1xcblxcbiAgIGlmIChkaXN0IDwgcmFkaXVzKVxcbiAgIHtcXG4gICAgICAgZmxvYXQgcmF0aW8gPSAocmFkaXVzIC0gZGlzdCkgLyByYWRpdXM7XFxuICAgICAgIGZsb2F0IGFuZ2xlTW9kID0gcmF0aW8gKiByYXRpbyAqIGFuZ2xlO1xcbiAgICAgICBmbG9hdCBzID0gc2luKGFuZ2xlTW9kKTtcXG4gICAgICAgZmxvYXQgYyA9IGNvcyhhbmdsZU1vZCk7XFxuICAgICAgIGNvb3JkID0gdmVjMihjb29yZC54ICogYyAtIGNvb3JkLnkgKiBzLCBjb29yZC54ICogcyArIGNvb3JkLnkgKiBjKTtcXG4gICB9XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCtvZmZzZXQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhZGl1czogICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9LFxuICAgICAgICAgICAgYW5nbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9LFxuICAgICAgICAgICAgb2Zmc2V0OiAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjUsIHk6IDAuNSB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblR3aXN0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVHdpc3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHdpc3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFR3aXN0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUd2lzdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IGRlc2NyaWJlcyB0aGUgdGhlIG9mZnNldCBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgb2Zmc2V0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHJhZGl1cyBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICByYWRpdXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5yYWRpdXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgYW5nbGUgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiLy8gcnVuIHRoZSBwb2x5ZmlsbHNcbnJlcXVpcmUoJy4vcG9seWZpbGwnKTtcblxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29yZScpO1xuXG4vLyBhZGQgY29yZSBwbHVnaW5zLlxuY29yZS5leHRyYXMgICAgICAgICA9IHJlcXVpcmUoJy4vZXh0cmFzJyk7XG5jb3JlLmZpbHRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5jb3JlLmludGVyYWN0aW9uICAgID0gcmVxdWlyZSgnLi9pbnRlcmFjdGlvbicpO1xuY29yZS5sb2FkZXJzICAgICAgICA9IHJlcXVpcmUoJy4vbG9hZGVycycpO1xuY29yZS5tZXNoICAgICAgICAgICA9IHJlcXVpcmUoJy4vbWVzaCcpO1xuY29yZS5hY2Nlc3NpYmlsaXR5ICA9IHJlcXVpcmUoJy4vYWNjZXNzaWJpbGl0eScpO1xuXG4vLyBleHBvcnQgYSBwcmVtYWRlIGxvYWRlciBpbnN0YW5jZVxuLyoqXG4gKiBBIHByZW1hZGUgaW5zdGFuY2Ugb2YgdGhlIGxvYWRlciB0aGF0IGNhbiBiZSB1c2VkIHRvIGxvYWRlciByZXNvdXJjZXMuXG4gKlxuICogQG5hbWUgbG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHByb3BlcnR5IHtQSVhJLmxvYWRlcnMuTG9hZGVyfVxuICovXG5jb3JlLmxvYWRlciA9IG5ldyBjb3JlLmxvYWRlcnMuTG9hZGVyKCk7XG5cbi8vIG1peGluIHRoZSBkZXByZWNhdGlvbiBmZWF0dXJlcy5cbk9iamVjdC5hc3NpZ24oY29yZSwgcmVxdWlyZSgnLi9kZXByZWNhdGlvbicpKTtcblxuLy8gQWx3YXlzIGV4cG9ydCBwaXhpIGdsb2JhbGx5LlxuZ2xvYmFsLlBJWEkgPSBjb3JlO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogSG9sZHMgYWxsIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gYW4gSW50ZXJhY3Rpb24gZXZlbnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uRGF0YSgpXG57XG4gICAgLyoqXG4gICAgICogVGhpcyBwb2ludCBzdG9yZXMgdGhlIGdsb2JhbCBjb29yZHMgb2Ygd2hlcmUgdGhlIHRvdWNoL21vdXNlIGV2ZW50IGhhcHBlbmVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuZ2xvYmFsID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgU3ByaXRlIHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TcHJpdGV9XG4gICAgICovXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBwYXNzZWQgdG8gYW4gZXZlbnQgaGFuZGxlciwgdGhpcyB3aWxsIGJlIHRoZSBvcmlnaW5hbCBET00gRXZlbnQgdGhhdCB3YXMgY2FwdHVyZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0V2ZW50fVxuICAgICAqL1xuICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IG51bGw7XG59XG5cbkludGVyYWN0aW9uRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbkRhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uRGF0YTtcblxuLyoqXG4gKiBUaGlzIHdpbGwgcmV0dXJuIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgc3BlY2lmaWVkIGRpc3BsYXlPYmplY3QgZm9yIHRoaXMgSW50ZXJhY3Rpb25EYXRhXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgbG9jYWwgY29vcmRzIG9mZlxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBwb2ludClcbiAqIEBwYXJhbSBbZ2xvYmFsUG9zXSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgY29udGFpbmluZyB5b3VyIGN1c3RvbSBnbG9iYWwgY29vcmRzLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgdXNlIHRoZSBjdXJyZW50IGdsb2JhbCBjb29yZHMpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBJbnRlcmFjdGlvbkRhdGEgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIERpc3BsYXlPYmplY3RcbiAqL1xuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5nZXRMb2NhbFBvc2l0aW9uID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHBvaW50LCBnbG9iYWxQb3MpXG57XG4gICAgcmV0dXJuIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKGdsb2JhbFBvcyB8fCB0aGlzLmdsb2JhbCwgcG9pbnQpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIEludGVyYWN0aW9uRGF0YSA9IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25EYXRhJyk7XG5cbi8vIE1peCBpbnRlcmFjdGl2ZVRhcmdldCBpbnRvIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGVcbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbik7XG5cbi8qKlxuICogVGhlIGludGVyYWN0aW9uIG1hbmFnZXIgZGVhbHMgd2l0aCBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzLiBBbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgaW50ZXJhY3RpdmVcbiAqIGlmIGl0cyBpbnRlcmFjdGl2ZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIHRydWVcbiAqIFRoaXMgbWFuYWdlciBhbHNvIHN1cHBvcnRzIG11bHRpdG91Y2guXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH1cbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQ9dHJ1ZV0ge2Jvb2xlYW59IFNob3VsZCB0aGUgbWFuYWdlciBhdXRvbWF0aWNhbGx5IHByZXZlbnQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMuXG4gKiBAcGFyYW0gW29wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3k9MTBdIHtudW1iZXJ9IEZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQuXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uTWFuYWdlcihyZW5kZXJlciwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGludGVyYWN0aW9uIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMgYXV0b21hdGljYWxseSBiZSBwcmV2ZW50ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdCA9IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdCA6IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBcyB0aGlzIGZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQgbW9yZSBvZnRlbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgPSBvcHRpb25zLmludGVyYWN0aW9uRnJlcXVlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vdXNlIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhfVxuICAgICAqL1xuICAgIHRoaXMubW91c2UgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCBkYXRhIG9iamVjdCB0byBoYW5kbGUgYWxsIHRoZSBldmVudCB0cmFja2luZy9kaXNwYXRjaGluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnREYXRhID0ge1xuICAgICAgICBzdG9wcGVkOiBmYWxzZSxcbiAgICAgICAgdGFyZ2V0OiBudWxsLFxuICAgICAgICB0eXBlOiBudWxsLFxuICAgICAgICBkYXRhOiB0aGlzLm1vdXNlLFxuICAgICAgICBzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGlueSBsaXR0bGUgaW50ZXJhY3RpdmVEYXRhIHBvb2wgIVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGFbXX1cbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBET00gZWxlbWVudCB0byBiaW5kIHRvLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTEVsZW1lbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIYXZlIGV2ZW50cyBiZWVuIGF0dGFjaGVkIHRvIHRoZSBkb20gZWxlbWVudD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gZmFsc2U7XG5cbiAgICAvL3RoaXMgd2lsbCBtYWtlIGl0IHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gY2FsbCBiaW5kIGFsbCB0aGUgdGltZVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlVXAgPSB0aGlzLm9uTW91c2VVcC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlVXAgPSB0aGlzLnByb2Nlc3NNb3VzZVVwLmJpbmQoIHRoaXMgKTtcblxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IHRoaXMub25Nb3VzZURvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZURvd24gPSB0aGlzLnByb2Nlc3NNb3VzZURvd24uYmluZCggdGhpcyApO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IHRoaXMub25Nb3VzZU1vdmUuYmluZCggdGhpcyApO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IHRoaXMucHJvY2Vzc01vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VPdXQgPSB0aGlzLm9uTW91c2VPdXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IHRoaXMub25Ub3VjaFN0YXJ0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaEVuZCA9IHRoaXMub25Ub3VjaEVuZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gdGhpcy5wcm9jZXNzVG91Y2hFbmQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaE1vdmUgPSB0aGlzLm9uVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sYXN0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjc3Mgc3R5bGUgb2YgdGhlIGN1cnNvciB0aGF0IGlzIGJlaW5nIHVzZWRcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSAnaW5oZXJpdCc7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjYWNoZWQgdmFyXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCByZXNvbHV0aW9uXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IDE7XG5cbiAgICB0aGlzLnNldFRhcmdldEVsZW1lbnQodGhpcy5yZW5kZXJlci52aWV3LCB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24pO1xufVxuXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJhY3Rpb25NYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5cbi8qKlxuICogU2V0cyB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlL3RvdWNoIGV2ZW50cy4gVGhpcyBpcyB1c2VmdWwgZm9yIHdoZW4geW91IGhhdmVcbiAqIG90aGVyIERPTSBlbGVtZW50cyBvbiB0b3Agb2YgdGhlIHJlbmRlcmVycyBDYW52YXMgZWxlbWVudC4gV2l0aCB0aGlzIHlvdSdsbCBiZSBiYWxlIHRvIGRlbGV0ZWdhdGVcbiAqIGFub3RoZXIgRE9NIGVsZW1lbnQgdG8gcmVjZWl2ZSB0aG9zZSBldmVudHMuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQge0hUTUxFbGVtZW50fSB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVEhlIHJlc29sdXRpb24gb2YgdGhlIG5ldyBlbGVtZW50IChyZWxhdGl2ZSB0byB0aGUgY2FudmFzKS5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuc2V0VGFyZ2V0RWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCByZXNvbHV0aW9uKVxue1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICB0aGlzLmFkZEV2ZW50cygpO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYWxsIHRoZSBET00gZXZlbnRzXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5hZGRFdmVudHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29yZS50aWNrZXIuc2hhcmVkLmFkZCh0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy1jb250ZW50LXpvb21pbmcnXSA9ICdub25lJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICdub25lJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgICAgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgICAgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgICAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCAgIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICAgICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsICAgIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIHRoZSBET00gZXZlbnRzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHJlZ2lzdGVyZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJyc7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAgdGhpcy5vblRvdWNoRW5kLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlLCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgIHRoaXMub25Nb3VzZVVwLCB0cnVlKTtcblxuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc3RhdGUgb2YgaW50ZXJhY3RpdmUgb2JqZWN0cy5cbiAqIEludm9rZWQgYnkgYSB0aHJvdHRsZWQgdGlja2VyIHVwZGF0ZSBmcm9tXG4gKiB7QGxpbmsgUElYSS50aWNrZXIuc2hhcmVkfS5cbiAqXG4gKiBAcGFyYW0gZGVsdGFUaW1lIHtudW1iZXJ9XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB0aGlzLl9kZWx0YVRpbWUgKz0gZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2RlbHRhVGltZSA8IHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGVsdGFUaW1lID0gMDtcblxuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHVzZXIgbW92ZSB0aGUgbW91c2UgdGhpcyBjaGVjayBoYXMgYWxyZWFkeSBiZWVuIGRmb25lIHVzaW5nIHRoZSBtb3VzZSBtb3ZlIVxuICAgIGlmKHRoaXMuZGlkTW92ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlkTW92ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE9cbn07XG5cbi8qKlxuICogRGlzcGF0Y2hlcyBhbiBldmVudCBvbiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIGRpc3BsYXkgb2JqZWN0IGluIHF1ZXN0aW9uXG4gKiBAcGFyYW0gZXZlbnRTdHJpbmcge3N0cmluZ30gdGhlIG5hbWUgb2YgdGhlIGV2ZW50IChlLmcsIG1vdXNlZG93bilcbiAqIEBwYXJhbSBldmVudERhdGEge29iamVjdH0gdGhlIGV2ZW50IGRhdGEgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGV2ZW50U3RyaW5nLCBldmVudERhdGEgKVxue1xuICAgIGlmKCFldmVudERhdGEuc3RvcHBlZClcbiAgICB7XG4gICAgICAgIGV2ZW50RGF0YS50YXJnZXQgPSBkaXNwbGF5T2JqZWN0O1xuICAgICAgICBldmVudERhdGEudHlwZSA9IGV2ZW50U3RyaW5nO1xuXG4gICAgICAgIGRpc3BsYXlPYmplY3QuZW1pdCggZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0W2V2ZW50U3RyaW5nXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddKCBldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogTWFwcyB4IGFuZCB5IGNvb3JkcyBmcm9tIGEgRE9NIG9iamVjdCBhbmQgbWFwcyB0aGVtIGNvcnJlY3RseSB0byB0aGUgcGl4aSB2aWV3LiBUaGUgcmVzdWx0aW5nIHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUgcG9pbnQuXG4gKiBUaGlzIHRha2VzIGludG8gYWNjb3VudCB0aGUgZmFjdCB0aGF0IHRoZSBET00gZWxlbWVudCBjb3VsZCBiZSBzY2FsZWQgYW5kIHBvc2l0aW9uZWQgYW55d2hlcmUgb24gdGhlIHNjcmVlbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCB0aGUgcmVzdWx0IHdpbGwgYmUgc3RvcmVkIGluXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHggICAgIHRoZSB4IGNvb3JkIG9mIHRoZSBwb3NpdGlvbiB0byBtYXBcbiAqIEBwYXJhbSAge251bWJlcn0geSAgICAgdGhlIHkgY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm1hcFBvc2l0aW9uVG9Qb2ludCA9IGZ1bmN0aW9uICggcG9pbnQsIHgsIHkgKVxue1xuICAgIHZhciByZWN0ID0gdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcG9pbnQueCA9ICggKCB4IC0gcmVjdC5sZWZ0ICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQud2lkdGggIC8gcmVjdC53aWR0aCAgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHBvaW50LnkgPSAoICggeSAtIHJlY3QudG9wICApICogKHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmhlaWdodCAvIHJlY3QuaGVpZ2h0ICkgKSAvIHRoaXMucmVzb2x1dGlvbjtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlcyBhIG5lYXQgd2F5IG9mIGNyYXdsaW5nIHRocm91Z2ggdGhlIHNjZW5lIGdyYXBoIGFuZCBydW5uaW5nIGEgc3BlY2lmaWVkIGZ1bmN0aW9uIG9uIGFsbCBpbnRlcmFjdGl2ZSBvYmplY3RzIGl0IGZpbmRzLlxuICogSXQgd2lsbCBhbHNvIHRha2UgY2FyZSBvZiBoaXQgdGVzdGluZyB0aGUgaW50ZXJhY3RpdmUgb2JqZWN0cyBhbmQgcGFzc2VzIHRoZSBoaXQgYWNyb3NzIGluIHRoZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCBpcyB0ZXN0ZWQgZm9yIGNvbGxpc2lvblxuICogQHBhcmFtICB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBkaXNwbGF5T2JqZWN0IHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgd2lsbCBiZSBoaXQgdGVzdCAocmVjdXJjc2l2bHkgY3Jhd2xzIGl0cyBjaGlsZHJlbilcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmdW5jIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggaW50ZXJhY3RpdmUgb2JqZWN0LiBUaGUgZGlzcGxheU9iamVjdCBhbmQgaGl0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvblxuICogQHBhcmFtICB7Ym9vbGVhbn0gaGl0VGVzdCB0aGlzIGluZGljYXRlcyBpZiB0aGUgb2JqZWN0cyBpbnNpZGUgc2hvdWxkIGJlIGhpdCB0ZXN0IGFnYWluc3QgdGhlIHBvaW50XG4gKiBAcmV0dXJuIHtib29sZWFufSByZXR1cm5zIHRydWUgaWYgdGhlIGRpc3BsYXlPYmplY3QgaGl0IHRoZSBwb2ludFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NJbnRlcmFjdGl2ZSA9IGZ1bmN0aW9uIChwb2ludCwgZGlzcGxheU9iamVjdCwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmUpXG57XG4gICAgaWYoIWRpc3BsYXlPYmplY3QgfHwgIWRpc3BsYXlPYmplY3QudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUb29rIGEgbGl0dGxlIHdoaWxlIHRvIHJld29yayB0aGlzIGZ1bmN0aW9uIGNvcnJlY3RseSEgQnV0IG5vdyBpdCBpcyBkb25lIGFuZCBuaWNlIGFuZCBvcHRpbWlzZWQuIF5fXlxuICAgIC8vIFxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBub3cgbG9vcCB0aHJvdWdoIGFsbCBvYmplY3RzIGFuZCB0aGVuIG9ubHkgaGl0IHRlc3QgdGhlIG9iamVjdHMgaXQgSEFTIHRvLCBub3QgYWxsIG9mIHRoZW0uIE1VQ0ggZmFzdGVyLi5cbiAgICAvLyBBbiBvYmplY3Qgd2lsbCBiZSBoaXQgdGVzdCBpZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gICAgLy8gXG4gICAgLy8gMTogSXQgaXMgaW50ZXJhY3RpdmUuXG4gICAgLy8gMjogSXQgYmVsb25ncyB0byBhIHBhcmVudCB0aGF0IGlzIGludGVyYWN0aXZlIEFORCBvbmUgb2YgdGhlIHBhcmVudHMgY2hpbGRyZW4gaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICAvLyBcbiAgICAvLyBBcyBhbm90aGVyIGxpdHRsZSBvcHRpbWlzYXRpb24gb25jZSBhbiBpbnRlcmFjdGl2ZSBvYmplY3QgaGFzIGJlZW4gaGl0IHdlIGNhbiBjYXJyeSBvbiB0aHJvdWdoIHRoZSBzY2VuZWdyYXBoLCBidXQgd2Uga25vdyB0aGF0IHRoZXJlIHdpbGwgYmUgbm8gbW9yZSBoaXRzISBTbyB3ZSBjYW4gYXZvaWQgZXh0cmEgaGl0IHRlc3RzXG4gICAgLy8gQSBmaW5hbCBvcHRpbWlzYXRpb24gaXMgdGhhdCBhbiBvYmplY3QgaXMgbm90IGhpdCB0ZXN0IGRpcmVjdGx5IGlmIGEgY2hpbGQgaGFzIGFscmVhZHkgYmVlbiBoaXQuXG4gICAgXG4gICAgdmFyIGhpdCA9IGZhbHNlLFxuICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGludGVyYWN0aXZlID0gZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSB8fCBpbnRlcmFjdGl2ZTtcblxuICAgIC8vIGlmIHRoZSBkaXNwbGF5b2JqZWN0IGhhcyBhIGhpdEFyZWEsIHRoZW4gaXQgZG9lcyBub3QgbmVlZCB0byBoaXRUZXN0IGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaGl0QXJlYSlcbiAgICB7XG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gKiogRlJFRSBUSVAgKiohIElmIGFuIG9iamVjdCBpcyBub3QgaW50ZXJhY3R0aXZlIG9yIGhhcyBubyBidXR0b25zIGluIGl0IChzdWNoIGFzIGEgZ2FtZSBzY2VuZSEpIHNldCBpbnRlcmFjdGl2ZUNoaWxkcmVuIHRvIGZhbHNlIGZvciB0aGF0IGRpc3BsYXlPYmplY3QuXG4gICAgLy8gVGhpcyB3aWxsIGFsbG93IHBpeGkgdG8gY29tcGxldGx5IGlnbm9yZSBhbmQgYnlwYXNzIGNoZWNraW5nIHRoZSBkaXNwbGF5T2JqZWN0cyBjaGlsZHJlbi5cbiAgICBpZihkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlQ2hpbGRyZW4pXG4gICAgeyAgICAgICBcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICAgICAgXG4gICAgICAgIGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRpbWUgdG8gZ2V0IHJlY3Vyc2l2ZS4uIGlmIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gaWYgc29tdGhpbmcgaXMgaGl0Li5cbiAgICAgICAgICAgIGlmKCB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZShwb2ludCwgY2hpbGRyZW5baV0sIGZ1bmMsIGhpdFRlc3QsIGludGVyYWN0aXZlUGFyZW50KSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIHdlIG5vIGxvbmdlciBuZWVkIHRvIGhpdCB0ZXN0IGFueSBtb3JlIG9iamVjdHMgaW4gdGhpcyBjb250YWluZXIgYXMgd2Ugd2Ugbm93IGtub3cgdGhlIHBhcmVudCBoYXMgYmVlbiBoaXRcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBpcyBpbnRlcmFjdGl2ZSAsIHRoYXQgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhpdCB3YXMgYWN0dWFsbHkgaW50ZXJhY3RpdmUgYW5kIG5vdCBqdXN0IHRoZSBjaGlsZCBvZiBhbiBpbnRlcmFjdGl2ZSBvYmplY3QuIFxuICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55dGhpbmcgZWxzZS4gV2Ugc3RpbGwgbmVlZCB0byBydW4gdGhyb3VnaCBhbGwgb2JqZWN0cywgYnV0IHdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhbnkgaGl0IHRlc3RzLlxuICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuW2ldLmludGVyYWN0aXZlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGl0VGVzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIG5vIHBvaW50IHJ1bm5pbmcgdGhpcyBpZiB0aGUgaXRlbSBpcyBub3QgaW50ZXJhY3RpdmUgb3IgZG9lcyBub3QgaGF2ZSBhbiBpbnRlcmFjdGl2ZSBwYXJlbnQuXG4gICAgaWYoaW50ZXJhY3RpdmUpXG4gICAge1xuICAgICAgICAvLyBpZiB3ZSBhcmUgaGl0IHRlc3RpbmcgKGFzIGluIHdlIGhhdmUgbm8gaGl0IGFueSBvYmplY3RzIHlldClcbiAgICAgICAgLy8gV2UgYWxzbyBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGhpdCB0ZXN0aW5nIGlmIG9uY2Ugb2YgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuIGhhcyBhbHJlYWR5IGJlZW4gaGl0IVxuICAgICAgICBpZihoaXRUZXN0ICYmICFoaXQpXG4gICAgICAgIHsgIFxuICAgICAgICAgICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGhpcy5fdGVtcFBvaW50KTtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmhpdEFyZWEuY29udGFpbnMoIHRoaXMuX3RlbXBQb2ludC54LCB0aGlzLl90ZW1wUG9pbnQueSApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZihkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gZGlzcGxheU9iamVjdC5jb250YWluc1BvaW50KHBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmMoZGlzcGxheU9iamVjdCwgaGl0KTsgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGl0O1xuICBcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgZG93biBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcHJlc3NlZCBkb3duXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VEb3duLCB0cnVlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBkb3duIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlRG93biA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB2YXIgZSA9IHRoaXMubW91c2Uub3JpZ2luYWxFdmVudDtcbiAgICBcbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG5cbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nIF0gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRkb3duJyA6ICdtb3VzZWRvd24nLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcmVsZWFzZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYnV0dG9uIGJlaW5nIHJlbGVhc2VkXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VVcCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlVXAsIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIHVwIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZVVwID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuXG4gICAgdmFyIGlzUmlnaHRCdXR0b24gPSBlLmJ1dHRvbiA9PT0gMiB8fCBlLndoaWNoID09PSAzO1xuICAgIHZhciBpc0Rvd24gPSAgaXNSaWdodEJ1dHRvbiA/ICdfaXNSaWdodERvd24nIDogJ19pc0xlZnREb3duJztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodHVwJyA6ICdtb3VzZXVwJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0Y2xpY2snIDogJ2NsaWNrJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXBvdXRzaWRlJyA6ICdtb3VzZXVwb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgdGhlIG1vdXNlIG1vdmluZ1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5kaWRNb3ZlID0gdHJ1ZTtcblxuICAgIHRoaXMuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VNb3ZlLCB0cnVlICk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgIT09IHRoaXMuY3Vyc29yKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gdGhpcy5jdXJzb3I7XG4gICAgfVxuXG4gICAgLy9UT0RPIEJVRyBmb3IgcGFyZW50cyBpbmVyYWN0aXZlIG9iamVjdCAoYm9yZGVyIG9yZGVyIGlzc3VlKVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlbW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQoZGlzcGxheU9iamVjdCwgaGl0KTtcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgaXMgbW92ZWQgb3V0IG9mIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJlaW5nIG1vdmVkIG91dFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlT3V0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgLy8gVE9ETyBvcHRpbWl6ZSBieSBub3QgY2hlY2sgRVZFUlkgVElNRSEgbWF5YmUgaGFsZiBhcyBvZnRlbj8gLy9cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkgKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIGZhbHNlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBvdmVyL291dCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VPdmVyT3V0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGlmKCFkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3ZlcicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlzcGxheU9iamVjdC5idXR0b25Nb2RlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnNvciA9IGRpc3BsYXlPYmplY3QuZGVmYXVsdEN1cnNvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZihkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIHRoaXMuZXZlbnREYXRhKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIHN0YXJ0ZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggc3RhcnRpbmcgb24gdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaFN0YXJ0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuICAgICAgICAvL1RPRE8gUE9PTFxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0LCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hTdGFydCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaHN0YXJ0JywgdGhpcy5ldmVudERhdGEgKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBlbmRzIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIGVuZGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICAvL1RPRE8gdGhpcyBzaG91bGQgYmUgcGFzc2VkIGFsb25nLi4gbm8gc2V0XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoRW5kLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIGVuZCBvZiBhIHRvdWNoIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaEVuZCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZCcsIHRoaXMuZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndGFwJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZG91dHNpZGUnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIG1vdmVkIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBtb3ZpbmcgYWNyb3NzIHRoZSByZW5kZXJlciB2aWV3XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIGEgdG91Y2ggbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGhpdCA9IGhpdDtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaG1vdmUnLCB0aGlzLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hFdmVudCB7RXZlbnREYXRhfSBUaGUgdG91Y2ggZXZlbnQgd2UgbmVlZCB0byBwYWlyIHdpdGggYW4gaW50ZXJhY3Rpb25EYXRhIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZ2V0VG91Y2hEYXRhID0gZnVuY3Rpb24gKHRvdWNoRXZlbnQpXG57XG4gICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wb3AoKTtcblxuICAgIGlmKCF0b3VjaERhdGEpXG4gICAge1xuICAgICAgICB0b3VjaERhdGEgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG4gICAgfVxuXG4gICAgdG91Y2hEYXRhLmlkZW50aWZpZXIgPSB0b3VjaEV2ZW50LmlkZW50aWZpZXI7XG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRvdWNoRGF0YS5nbG9iYWwsIHRvdWNoRXZlbnQuY2xpZW50WCwgdG91Y2hFdmVudC5jbGllbnRZICk7XG5cbiAgICBpZihuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YS5nbG9iYWwueCA9IHRvdWNoRGF0YS5nbG9iYWwueCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC55ID0gdG91Y2hEYXRhLmdsb2JhbC55IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIH1cblxuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWCA9IHRvdWNoRGF0YS5nbG9iYWwueDtcbiAgICB0b3VjaEV2ZW50Lmdsb2JhbFkgPSB0b3VjaERhdGEuZ2xvYmFsLnk7XG5cbiAgICByZXR1cm4gdG91Y2hEYXRhO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IHRvIHRoZSBpbnRlcm5hbCBwb29sXG4gKlxuICogQHBhcmFtIHRvdWNoRGF0YSB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9IFRoZSB0b3VjaCBkYXRhIG9iamVjdCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmV0dXJuVG91Y2hEYXRhID0gZnVuY3Rpb24gKCB0b3VjaERhdGEgKVxue1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wdXNoKCB0b3VjaERhdGEgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGludGVyYWN0aW9uIG1hbmFnZXJcbiAqXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLm1vdXNlID0gbnVsbDtcblxuICAgIHRoaXMuZXZlbnREYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IG51bGw7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VVcCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Nb3VzZURvd24gPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUgPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlT3V0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBudWxsO1xuXG5cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IG51bGw7XG5cbiAgICB0aGlzLm9uVG91Y2hFbmQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaE1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZW1wUG9pbnQgPSBudWxsO1xufTtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBpbnRlcmFjdGlvbnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEludGVyYWN0aW9uRGF0YTogICAgcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKSxcbiAgICBJbnRlcmFjdGlvbk1hbmFnZXI6IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25NYW5hZ2VyJyksXG4gICAgaW50ZXJhY3RpdmVUYXJnZXQ6ICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbn07XG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGludGVyYWN0aXZlIG9iamVjdHNcbiAqIHVzZWQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5pbnRlcmFjdGlvbi5pbnRlcmFjdGl2ZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgaW50ZXJhY3RpdmVUYXJnZXQgPSB7XG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBidXR0b25Nb2RlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlQ2hpbGRyZW46IHRydWUsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBkZWZhdWx0Q3Vyc29yOiAncG9pbnRlcicsXG5cbiAgICAvLyBzb21lIGludGVybmFsIGNoZWNrcy4uXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX292ZXI6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdG91Y2hEb3duOiBmYWxzZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnRlcmFjdGl2ZVRhcmdldDtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi4vZXh0cmFzJyksXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxuXG5mdW5jdGlvbiBwYXJzZShyZXNvdXJjZSwgdGV4dHVyZSkge1xuICAgIHZhciBkYXRhID0ge307XG4gICAgdmFyIGluZm8gPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF07XG4gICAgdmFyIGNvbW1vbiA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NvbW1vbicpWzBdO1xuXG4gICAgZGF0YS5mb250ID0gaW5mby5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKTtcbiAgICBkYXRhLnNpemUgPSBwYXJzZUludChpbmZvLmdldEF0dHJpYnV0ZSgnc2l6ZScpLCAxMCk7XG4gICAgZGF0YS5saW5lSGVpZ2h0ID0gcGFyc2VJbnQoY29tbW9uLmdldEF0dHJpYnV0ZSgnbGluZUhlaWdodCcpLCAxMCk7XG4gICAgZGF0YS5jaGFycyA9IHt9O1xuXG4gICAgLy9wYXJzZSBsZXR0ZXJzXG4gICAgdmFyIGxldHRlcnMgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjaGFyJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxldHRlcnMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaWQnKSwgMTApO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlUmVjdCA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4JyksIDEwKSArIHRleHR1cmUuZnJhbWUueCxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd5JyksIDEwKSArIHRleHR1cmUuZnJhbWUueSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd3aWR0aCcpLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaGVpZ2h0JyksIDEwKVxuICAgICAgICApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbY2hhckNvZGVdID0ge1xuICAgICAgICAgICAgeE9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeU9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3lvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeEFkdmFuY2U6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4YWR2YW5jZScpLCAxMCksXG4gICAgICAgICAgICBrZXJuaW5nOiB7fSxcbiAgICAgICAgICAgIHRleHR1cmU6IG5ldyBjb3JlLlRleHR1cmUodGV4dHVyZS5iYXNlVGV4dHVyZSwgdGV4dHVyZVJlY3QpXG5cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvL3BhcnNlIGtlcm5pbmdzXG4gICAgdmFyIGtlcm5pbmdzID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgna2VybmluZycpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBrZXJuaW5ncy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBmaXJzdCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnZmlyc3QnKSwgMTApO1xuICAgICAgICB2YXIgc2Vjb25kID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdzZWNvbmQnKSwgMTApO1xuICAgICAgICB2YXIgYW1vdW50ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdhbW91bnQnKSwgMTApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbc2Vjb25kXS5rZXJuaW5nW2ZpcnN0XSA9IGFtb3VudDtcbiAgICB9XG5cbiAgICByZXNvdXJjZS5iaXRtYXBGb250ID0gZGF0YTtcblxuICAgIC8vIEknbSBsZWF2aW5nIHRoaXMgYXMgYSB0ZW1wb3JhcnkgZml4IHNvIHdlIGNhbiB0ZXN0IHRoZSBiaXRtYXAgZm9udHMgaW4gdjNcbiAgICAvLyBidXQgaXQncyB2ZXJ5IGxpa2VseSB0byBjaGFuZ2VcbiAgICBleHRyYXMuQml0bWFwVGV4dC5mb250c1tkYXRhLmZvbnRdID0gZGF0YTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSBvciBub3QgeG1sIGRhdGFcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhIHx8ICFyZXNvdXJjZS5pc1htbClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNraXAgaWYgbm90IGJpdG1hcCBmb250IGRhdGEsIHVzaW5nIHNvbWUgc2lsbHkgZHVjay10eXBpbmdcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGFnZScpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdLmdldEF0dHJpYnV0ZSgnZmFjZScpID09PSBudWxsXG4gICAgICAgICAgICApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeG1sVXJsID0gcGF0aC5kaXJuYW1lKHJlc291cmNlLnVybCk7XG5cbiAgICAgICAgaWYgKHhtbFVybCA9PT0gJy4nKSB7XG4gICAgICAgICAgICB4bWxVcmwgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJhc2VVcmwgJiYgeG1sVXJsKSB7XG4gICAgICAgICAgICAvLyBpZiBiYXNldXJsIGhhcyBhIHRyYWlsaW5nIHNsYXNoIHRoZW4gYWRkIG9uZSB0byB4bWxVcmwgc28gdGhlIHJlcGxhY2Ugd29ya3MgYmVsb3dcbiAgICAgICAgICAgIGlmICh0aGlzLmJhc2VVcmwuY2hhckF0KHRoaXMuYmFzZVVybC5sZW5ndGggLSAxKSA9PT0gJy8nKSB7XG4gICAgICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcmVtb3ZlIGJhc2VVcmwgZnJvbSB4bWxVcmxcbiAgICAgICAgICAgIHhtbFVybCA9IHhtbFVybC5yZXBsYWNlKHRoaXMuYmFzZVVybCwgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4geG1sVXJsIG5vdywgaXQgbmVlZHMgYSB0cmFpbGluZyBzbGFzaC4gRW5zdXJlIHRoYXQgaXQgZG9lcyBpZiB0aGUgc3RyaW5nIGlzbid0IGVtcHR5LlxuICAgICAgICBpZiAoeG1sVXJsICYmIHhtbFVybC5jaGFyQXQoeG1sVXJsLmxlbmd0aCAtIDEpICE9PSAnLycpIHtcbiAgICAgICAgICAgIHhtbFVybCArPSAnLyc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRleHR1cmVVcmwgPSB4bWxVcmwgKyByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJylbMF0uZ2V0QXR0cmlidXRlKCdmaWxlJyk7XG4gICAgICAgIGlmIChjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSkge1xuICAgICAgICAgICAgLy9yZXVzZSBleGlzdGluZyB0ZXh0dXJlXG4gICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbdGV4dHVyZVVybF0pO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGxvYWRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiByZXNvdXJjZS5tZXRhZGF0YS5pbWFnZU1ldGFkYXRhXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gbG9hZCB0aGUgdGV4dHVyZSBmb3IgdGhlIGZvbnRcbiAgICAgICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgdGV4dHVyZVVybCwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgcmVzLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBsb2FkZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5sb2FkZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIExvYWRlcjogICAgICAgICAgICAgcmVxdWlyZSgnLi9sb2FkZXInKSxcblxuICAgIC8vIHBhcnNlcnNcbiAgICBiaXRtYXBGb250UGFyc2VyOiAgIHJlcXVpcmUoJy4vYml0bWFwRm9udFBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyOiAgcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIHRleHR1cmVQYXJzZXI6ICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlUGFyc2VyJyksXG4gICAgUmVzb3VyY2U6ICAgICAgICAgICByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZVxufTtcbiIsInZhciBSZXNvdXJjZUxvYWRlciA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLFxuICAgIHRleHR1cmVQYXJzZXIgPSByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBzcHJpdGVzaGVldFBhcnNlciA9IHJlcXVpcmUoJy4vc3ByaXRlc2hlZXRQYXJzZXInKSxcbiAgICBiaXRtYXBGb250UGFyc2VyID0gcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyk7XG5cbi8qKlxuICpcbiAqIFRoZSBuZXcgbG9hZGVyLCBleHRlbmRzIFJlc291cmNlIExvYWRlciBieSBDaGFkIEVuZ2xlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9lbmdsZXJjai9yZXNvdXJjZS1sb2FkZXJcbiAqXG4gKiBgYGBqc1xuICogdmFyIGxvYWRlciA9IFBJWEkubG9hZGVyOyAvLyBwaXhpIGV4cG9zZXMgYSBwcmVtYWRlIGluc3RhbmNlIGZvciB5b3UgdG8gdXNlLlxuICogLy9vclxuICogdmFyIGxvYWRlciA9IG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyKCk7IC8vIHlvdSBjYW4gYWxzbyBjcmVhdGUgeW91ciBvd24gaWYgeW91IHdhbnRcbiAqXG4gKiBsb2FkZXIuYWRkKCdidW5ueScsXCJkYXRhL2J1bm55LnBuZ1wiKTtcbiAqXG4gKiBsb2FkZXIub25jZSgnY29tcGxldGUnLG9uQXNzZXRzTG9hZGVkKTtcbiAqXG4gKiBsb2FkZXIubG9hZCgpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlJlc291cmNlTG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5sb2FkZXJzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KVxue1xuICAgIFJlc291cmNlTG9hZGVyLmNhbGwodGhpcywgYmFzZVVybCwgY29uY3VycmVuY3kpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMudXNlKExvYWRlci5fcGl4aU1pZGRsZXdhcmVbaV0oKSk7XG4gICAgfVxufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZXNvdXJjZUxvYWRlci5wcm90b3R5cGUpO1xuTG9hZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbkxvYWRlci5fcGl4aU1pZGRsZXdhcmUgPSBbXG4gICAgLy8gcGFyc2UgYW55IGJsb2IgaW50byBtb3JlIHVzYWJsZSBvYmplY3RzIChlLmcuIEltYWdlKVxuICAgIFJlc291cmNlTG9hZGVyLm1pZGRsZXdhcmUucGFyc2luZy5ibG9iLFxuICAgIC8vIHBhcnNlIGFueSBJbWFnZSBvYmplY3RzIGludG8gdGV4dHVyZXNcbiAgICB0ZXh0dXJlUGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBzcHJpdGVzaGVldFBhcnNlcixcbiAgICAvLyBwYXJzZSBhbnkgc3ByaXRlc2hlZXQgZGF0YSBpbnRvIG11bHRpcGxlIHRleHR1cmVzXG4gICAgYml0bWFwRm9udFBhcnNlclxuXTtcblxuTG9hZGVyLmFkZFBpeGlNaWRkbGV3YXJlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgTG9hZGVyLl9waXhpTWlkZGxld2FyZS5wdXNoKGZuKTtcbn07XG5cbi8vIEFkZCBjdXN0b20gZXh0ZW50aW9uc1xudmFyIFJlc291cmNlID0gUmVzb3VyY2VMb2FkZXIuUmVzb3VyY2U7XG5cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUoJ2ZudCcsIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIHBhdGggPSByZXF1aXJlKCdwYXRoJyksXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBza2lwIGlmIG5vIGRhdGEsIGl0cyBub3QganNvbiwgb3IgaXQgaXNuJ3Qgc3ByaXRlc2hlZXQgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzSnNvbiB8fCAhcmVzb3VyY2UuZGF0YS5mcmFtZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzb3VyY2UuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcm91dGUgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJykpO1xuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwoIHJlc291cmNlLnVybCApO1xuXG4gICAgICAgIC8vIGxvYWQgdGhlIGltYWdlIGZvciB0aGlzIHNoZWV0XG4gICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgcm91dGUgKyAnLycgKyByZXNvdXJjZS5kYXRhLm1ldGEuaW1hZ2UsIGxvYWRPcHRpb25zLCBmdW5jdGlvbiAocmVzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlcyA9IHt9O1xuXG4gICAgICAgICAgICB2YXIgZnJhbWVzID0gcmVzb3VyY2UuZGF0YS5mcmFtZXM7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gZnJhbWVzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gZnJhbWVzW2ldLmZyYW1lO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlY3QpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0cmltID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QuaCwgcmVjdC53KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QudywgcmVjdC5oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vICBDaGVjayB0byBzZWUgaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0udHJpbW1lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpbSA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS54IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS55IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS53IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS5oIC8gcmVzb2x1dGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBmbGlwIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IVxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gc2l6ZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggPSBzaXplLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0ID0gdGVtcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNpemUueCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLnkgLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLmhlaWdodCAvPSByZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzW2ldID0gbmV3IGNvcmUuVGV4dHVyZShyZXMudGV4dHVyZS5iYXNlVGV4dHVyZSwgc2l6ZSwgc2l6ZS5jbG9uZSgpLCB0cmltLCBmcmFtZXNbaV0ucm90YXRlZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0cyBhbHNvIGFkZCB0aGUgZnJhbWUgdG8gcGl4aSdzIGdsb2JhbCBjYWNoZSBmb3IgZnJvbUZyYW1lIGFuZCBmcm9tSW1hZ2UgZnVuY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW2ldID0gcmVzb3VyY2UudGV4dHVyZXNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH0pO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gY3JlYXRlIGEgbmV3IHRleHR1cmUgaWYgdGhlIGRhdGEgaXMgYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgIGlmIChyZXNvdXJjZS5kYXRhICYmIHJlc291cmNlLmlzSW1hZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBiYXNlVGV4dHVyZSA9IG5ldyBjb3JlLkJhc2VUZXh0dXJlKHJlc291cmNlLmRhdGEsIG51bGwsIGNvcmUudXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKHJlc291cmNlLnVybCkpO1xuICAgICAgICAgICAgYmFzZVRleHR1cmUuaW1hZ2VVcmwgPSByZXNvdXJjZS51cmw7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlID0gbmV3IGNvcmUuVGV4dHVyZShiYXNlVGV4dHVyZSk7XG4gICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdWNudGlvbnNcbiAgICAgICAgICAgIGNvcmUudXRpbHMuQmFzZVRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gYmFzZVRleHR1cmU7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gcmVzb3VyY2UudGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgdGVtcFBvbHlnb24gPSBuZXcgY29yZS5Qb2x5Z29uKCk7XG5cbi8qKlxuICogQmFzZSBtZXNoIGNsYXNzXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0byB1c2VcbiAqIEBwYXJhbSBbdmVydGljZXNdIHtGbG9hdDMyQXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHZlcnRpY2VzXG4gKiBAcGFyYW0gW3V2c10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdXZzXG4gKiBAcGFyYW0gW2luZGljZXNdIHtVaW50MTZBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgaW5kaWNlc1xuICogQHBhcmFtIFtkcmF3TW9kZV0ge251bWJlcn0gdGhlIGRyYXdNb2RlLCBjYW4gYmUgYW55IG9mIHRoZSBNZXNoLkRSQVdfTU9ERVMgY29uc3RzXG4gKi9cbmZ1bmN0aW9uIE1lc2godGV4dHVyZSwgdmVydGljZXMsIHV2cywgaW5kaWNlcywgZHJhd01vZGUpXG57XG4gICAgY29yZS5Db250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIG9mIHRoZSBNZXNoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBVdnMgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IHV2cyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxLCAwLFxuICAgICAgICAxLCAxLFxuICAgICAgICAwLCAxXSk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB2ZXJ0aWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSB2ZXJ0aWNlcyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxMDAsIDAsXG4gICAgICAgIDEwMCwgMTAwLFxuICAgICAgICAwLCAxMDBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgLy8gIFRPRE8gYXV0byBnZW5lcmF0ZSB0aGlzIGJhc2VkIG9uIGRyYXcgbW9kZSFcbiAgICB0aGlzLmluZGljZXMgPSBpbmRpY2VzIHx8IG5ldyBVaW50MTZBcnJheShbMCwgMSwgMywgMl0pO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgTWVzaCBpcyBkaXJ0eSBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzcHJpdGUuIFNldCB0byBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlbW92ZSBhbnkgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUcmlhbmdsZXMgaW4gY2FudmFzIG1vZGUgYXJlIGF1dG9tYXRpY2FsbHkgYW50aWFsaWFzZWQsIHVzZSB0aGlzIHZhbHVlIHRvIGZvcmNlIHRyaWFuZ2xlcyB0byBvdmVybGFwIGEgYml0IHdpdGggZWFjaCBvdGhlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdheSB0aGUgTWVzaCBzaG91bGQgYmUgZHJhd24sIGNhbiBiZSBhbnkgb2YgdGhlIHtAbGluayBQSVhJLm1lc2guTWVzaC5EUkFXX01PREVTfSBjb25zdHNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAc2VlIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmRyYXdNb2RlID0gZHJhd01vZGUgfHwgTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0g7XG5cbiAgICAvLyBydW4gdGV4dHVyZSBzZXR0ZXI7XG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcblxuICAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgbWVzaCBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1lc2gucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuTWVzaC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNZXNoLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLm1lc2guTWVzaCNcbiAgICAgKi9cbiAgICB0ZXh0dXJlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl90ZXh0dXJlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBXZWJHTCByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMubWVzaCk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5tZXNoLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEsIHRyYW5zZm9ybS5iLCB0cmFuc2Zvcm0uYywgdHJhbnNmb3JtLmQsIHRyYW5zZm9ybS50eCB8IDAsIHRyYW5zZm9ybS50eSB8IDApO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4LCB0cmFuc2Zvcm0udHkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc1RyaWFuZ2xlTWVzaChjb250ZXh0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzKGNvbnRleHQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiBUcmlhbmdsZSBNZXNoIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aCAvIDI7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGggLSAyOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4LCAoaW5kZXggKyAyKSwgKGluZGV4ICsgNCkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiB0cmlhbmdsZSBtb2RlIHVzaW5nIGNhbnZhc1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc1RyaWFuZ2xlcyA9IGZ1bmN0aW9uIChjb250ZXh0KVxue1xuICAgIC8vIGRyYXcgdHJpYW5nbGVzISFcbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcblxuICAgIHZhciBsZW5ndGggPSBpbmRpY2VzLmxlbmd0aDtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAzKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4MCA9IGluZGljZXNbaV0gKiAyLCBpbmRleDEgPSBpbmRpY2VzW2kgKyAxXSAqIDIsIGluZGV4MiA9IGluZGljZXNbaSArIDJdICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3Mgb25lIG9mIHRoZSB0cmlhbmdsZXMgdGhhdCBmb3JtIHRoaXMgTWVzaFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHBhcmFtIHZlcnRpY2VzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgTWVzaFxuICogQHBhcmFtIHV2cyB7RmxvYXQzMkFycmF5fSBhIHJlZmVyZW5jZSB0byB0aGUgdXZzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gaW5kZXgwIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgxIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgc2Vjb25kIHZlcnRleFxuICogQHBhcmFtIGluZGV4MiB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIHRoaXJkIHZlcnRleFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZSA9IGZ1bmN0aW9uIChjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleDAsIGluZGV4MSwgaW5kZXgyKVxue1xuICAgIHZhciB0ZXh0dXJlU291cmNlID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2U7XG4gICAgdmFyIHRleHR1cmVXaWR0aCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdmFyIHRleHR1cmVIZWlnaHQgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHZhciB4MCA9IHZlcnRpY2VzW2luZGV4MF0sIHgxID0gdmVydGljZXNbaW5kZXgxXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleDJdO1xuICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4MCArIDFdLCB5MSA9IHZlcnRpY2VzW2luZGV4MSArIDFdLCB5MiA9IHZlcnRpY2VzW2luZGV4MiArIDFdO1xuXG4gICAgdmFyIHUwID0gdXZzW2luZGV4MF0gKiB0ZXh0dXJlV2lkdGgsIHUxID0gdXZzW2luZGV4MV0gKiB0ZXh0dXJlV2lkdGgsIHUyID0gdXZzW2luZGV4Ml0gKiB0ZXh0dXJlV2lkdGg7XG4gICAgdmFyIHYwID0gdXZzW2luZGV4MCArIDFdICogdGV4dHVyZUhlaWdodCwgdjEgPSB1dnNbaW5kZXgxICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MiA9IHV2c1tpbmRleDIgKyAxXSAqIHRleHR1cmVIZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5jYW52YXNQYWRkaW5nID4gMClcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nWCA9IHRoaXMuY2FudmFzUGFkZGluZyAvIHRoaXMud29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIHBhZGRpbmdZID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgY2VudGVyWCA9ICh4MCArIHgxICsgeDIpIC8gMztcbiAgICAgICAgdmFyIGNlbnRlclkgPSAoeTAgKyB5MSArIHkyKSAvIDM7XG5cbiAgICAgICAgdmFyIG5vcm1YID0geDAgLSBjZW50ZXJYO1xuICAgICAgICB2YXIgbm9ybVkgPSB5MCAtIGNlbnRlclk7XG5cbiAgICAgICAgdmFyIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MCA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MCA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIC8vXG5cbiAgICAgICAgbm9ybVggPSB4MSAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTEgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MSA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MSA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIG5vcm1YID0geDIgLSBjZW50ZXJYO1xuICAgICAgICBub3JtWSA9IHkyIC0gY2VudGVyWTtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDIgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTIgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LnNhdmUoKTtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG5cbiAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcblxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICBjb250ZXh0LmNsaXAoKTtcblxuICAgIC8vIENvbXB1dGUgbWF0cml4IHRyYW5zZm9ybVxuICAgIHZhciBkZWx0YSA9ICAodTAgKiB2MSkgICAgICArICh2MCAqIHUyKSAgICAgICsgKHUxICogdjIpICAgICAgLSAodjEgKiB1MikgICAgICAtICh2MCAqIHUxKSAgICAgIC0gKHUwICogdjIpO1xuICAgIHZhciBkZWx0YUEgPSAoeDAgKiB2MSkgICAgICArICh2MCAqIHgyKSAgICAgICsgKHgxICogdjIpICAgICAgLSAodjEgKiB4MikgICAgICAtICh2MCAqIHgxKSAgICAgIC0gKHgwICogdjIpO1xuICAgIHZhciBkZWx0YUIgPSAodTAgKiB4MSkgICAgICArICh4MCAqIHUyKSAgICAgICsgKHUxICogeDIpICAgICAgLSAoeDEgKiB1MikgICAgICAtICh4MCAqIHUxKSAgICAgIC0gKHUwICogeDIpO1xuICAgIHZhciBkZWx0YUMgPSAodTAgKiB2MSAqIHgyKSArICh2MCAqIHgxICogdTIpICsgKHgwICogdTEgKiB2MikgLSAoeDAgKiB2MSAqIHUyKSAtICh2MCAqIHUxICogeDIpIC0gKHUwICogeDEgKiB2Mik7XG4gICAgdmFyIGRlbHRhRCA9ICh5MCAqIHYxKSAgICAgICsgKHYwICogeTIpICAgICAgKyAoeTEgKiB2MikgICAgICAtICh2MSAqIHkyKSAgICAgIC0gKHYwICogeTEpICAgICAgLSAoeTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhRSA9ICh1MCAqIHkxKSAgICAgICsgKHkwICogdTIpICAgICAgKyAodTEgKiB5MikgICAgICAtICh5MSAqIHUyKSAgICAgIC0gKHkwICogdTEpICAgICAgLSAodTAgKiB5Mik7XG4gICAgdmFyIGRlbHRhRiA9ICh1MCAqIHYxICogeTIpICsgKHYwICogeTEgKiB1MikgKyAoeTAgKiB1MSAqIHYyKSAtICh5MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB5MikgLSAodTAgKiB5MSAqIHYyKTtcblxuICAgIGNvbnRleHQudHJhbnNmb3JtKGRlbHRhQSAvIGRlbHRhLCBkZWx0YUQgLyBkZWx0YSxcbiAgICAgICAgZGVsdGFCIC8gZGVsdGEsIGRlbHRhRSAvIGRlbHRhLFxuICAgICAgICBkZWx0YUMgLyBkZWx0YSwgZGVsdGFGIC8gZGVsdGEpO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UodGV4dHVyZVNvdXJjZSwgMCwgMCk7XG4gICAgY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5cblxuLyoqXG4gKiBSZW5kZXJzIGEgZmxhdCBNZXNoXG4gKlxuICogQHBhcmFtIE1lc2gge1BJWEkubWVzaC5NZXNofSBUaGUgTWVzaCB0byByZW5kZXJcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLnJlbmRlck1lc2hGbGF0ID0gZnVuY3Rpb24gKE1lc2gpXG57XG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgdmFyIHZlcnRpY2VzID0gTWVzaC52ZXJ0aWNlcztcblxuICAgIHZhciBsZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGgvMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgIGZvciAodmFyIGk9MTsgaSA8IGxlbmd0aC0yOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpKjI7XG5cbiAgICAgICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXhdLCAgIHgxID0gdmVydGljZXNbaW5kZXgrMl0sIHgyID0gdmVydGljZXNbaW5kZXgrNF07XG4gICAgICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4KzFdLCB5MSA9IHZlcnRpY2VzW2luZGV4KzNdLCB5MiA9IHZlcnRpY2VzW2luZGV4KzVdO1xuXG4gICAgICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgyLCB5Mik7XG4gICAgfVxuXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnI0ZGMDAwMCc7XG4gICAgY29udGV4dC5maWxsKCk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbn07XG5cbi8qKlxuICogV2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLCB0aGlzIGV2ZW50IHdpbGwgZmlyZSB0byB1cGRhdGUgdGhlIHNjYWxlIGFuZCBmcmFtZVxuICpcbiAqIEBwYXJhbSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51cGRhdGVGcmFtZSA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgbWVzaCBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAoIXRoaXMuX2N1cnJlbnRCb3VuZHMpIHtcbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gbWF0cml4IHx8IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICAgICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSB2ZXJ0aWNlcy5sZW5ndGg7IGkgPCBuOyBpICs9IDIpIHtcbiAgICAgICAgICAgIHZhciByYXdYID0gdmVydGljZXNbaV0sIHJhd1kgPSB2ZXJ0aWNlc1tpICsgMV07XG4gICAgICAgICAgICB2YXIgeCA9IChhICogcmF3WCkgKyAoYyAqIHJhd1kpICsgdHg7XG4gICAgICAgICAgICB2YXIgeSA9IChkICogcmF3WSkgKyAoYiAqIHJhd1gpICsgdHk7XG5cbiAgICAgICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG5cbiAgICAgICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuICAgICAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWluWCA9PT0gLUluZmluaXR5IHx8IG1heFkgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBtZXNoLiBXb3JrcyBvbmx5IGZvciBUUklBTkdMRV9NRVNIXG4gKlxuICogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuICovXG5NZXNoLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50ICkge1xuICAgIGlmICghdGhpcy5nZXRCb3VuZHMoKS5jb250YWlucyhwb2ludC54LCBwb2ludC55KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHBvaW50cyA9IHRlbXBQb2x5Z29uLnBvaW50cztcbiAgICB2YXIgaSwgbGVuO1xuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVMpIHtcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgICAgIGxlbiA9IHRoaXMuaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgIC8vVE9ETzogaW5saW5lIHRoaXMuXG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTMpIHtcbiAgICAgICAgICAgIHZhciBpbmQwID0gaW5kaWNlc1tpXSoyLCBpbmQxID0gaW5kaWNlc1tpKzFdKjIsIGluZDIgPSBpbmRpY2VzW2krMl0qMjtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2luZDBdO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaW5kMCsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2luZDFdO1xuICAgICAgICAgICAgcG9pbnRzWzNdID0gdmVydGljZXNbaW5kMSsxXTtcbiAgICAgICAgICAgIHBvaW50c1s0XSA9IHZlcnRpY2VzW2luZDJdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaW5kMisxXTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBsZW4gPSB2ZXJ0aWNlcy5sZW5ndGg7XG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTYpIHtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2ldO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaSsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2krMl07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpKzNdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaSs0XTtcbiAgICAgICAgICAgIHBvaW50c1s1XSA9IHZlcnRpY2VzW2krNV07XG4gICAgICAgICAgICBpZiAodGVtcFBvbHlnb24uY29udGFpbnModGVtcFBvaW50LngsIHRlbXBQb2ludC55KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGlmZmVyZW50IGRyYXdpbmcgYnVmZmVyIG1vZGVzIHN1cHBvcnRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX01FU0hcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFU1xuICovXG5NZXNoLkRSQVdfTU9ERVMgPSB7XG4gICAgVFJJQU5HTEVfTUVTSDogMCxcbiAgICBUUklBTkdMRVM6IDFcbn07XG4iLCJ2YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xuXG4vKipcbiAqIFRoZSBQbGFuZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciBQbGFuZSA9IG5ldyBQSVhJLlBsYW5lKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIFBsYW5lLlxuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWCAtIFRoZSBudW1iZXIgb3ggeCBzZWdtZW50c1xuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWSAtIFRoZSBudW1iZXIgb2YgeSBzZWdtZW50c1xuICpcbiAqL1xuZnVuY3Rpb24gUGxhbmUodGV4dHVyZSwgc2VnbWVudHNYLCBzZWdtZW50c1kpXG57XG4gICAgTWVzaC5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tlciBmb3IgaWYgdGhlIFBsYW5lIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuc2VnbWVudHNYID0gIHNlZ21lbnRzWCB8fCAxMDtcbiAgICB0aGlzLnNlZ21lbnRzWSA9IHNlZ21lbnRzWSB8fCAxMDtcblxuICAgIHRoaXMuZHJhd01vZGUgPSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVTO1xuICAgIHRoaXMucmVmcmVzaCgpO1xuXG59XG5cblxuLy8gY29uc3RydWN0b3JcblBsYW5lLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIE1lc2gucHJvdG90eXBlICk7XG5QbGFuZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQbGFuZTtcbm1vZHVsZS5leHBvcnRzID0gUGxhbmU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5QbGFuZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgdG90YWwgPSB0aGlzLnNlZ21lbnRzWCAqIHRoaXMuc2VnbWVudHNZO1xuICAgIHZhciB2ZXJ0cyA9IFtdO1xuICAgIHZhciBjb2xvcnMgPSBbXTtcbiAgICB2YXIgdXZzID0gW107XG4gICAgdmFyIGluZGljZXMgPSBbXTtcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMudGV4dHVyZTtcblxuICAvLyAgdGV4dHVyZS53aWR0aCA9IDgwMCB0ZXh0dXJlLndpZHRoIHx8IDgwMDtcbiAvLyAgIHRleHR1cmUuaGVpZ2h0ID0gODAwLy90ZXh0dXJlLmhlaWdodCB8fCA4MDA7XG5cbiAgICB2YXIgc2VnbWVudHNYU3ViID0gdGhpcy5zZWdtZW50c1ggLSAxO1xuICAgIHZhciBzZWdtZW50c1lTdWIgPSB0aGlzLnNlZ21lbnRzWSAtIDE7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgdmFyIHNpemVYID0gdGV4dHVyZS53aWR0aCAvIHNlZ21lbnRzWFN1YjtcbiAgICB2YXIgc2l6ZVkgPSB0ZXh0dXJlLmhlaWdodCAvIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbDsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHggPSAoaSAlIHRoaXMuc2VnbWVudHNYKTtcbiAgICAgICAgdmFyIHkgPSAoIChpIC8gdGhpcy5zZWdtZW50c1ggKSB8IDAgKTtcblxuXG4gICAgICAgIHZlcnRzLnB1c2goKHggKiBzaXplWCksXG4gICAgICAgICAgICAgICAgICAgKHkgKiBzaXplWSkpO1xuXG4gICAgICAgIC8vIHRoaXMgd29ya3MgZm9yIHJlY3Rhbmd1bGFyIHRleHR1cmVzLiBcbiAgICAgICAgdXZzLnB1c2godGV4dHVyZS5fdXZzLngwICsgKHRleHR1cmUuX3V2cy54MSAtIHRleHR1cmUuX3V2cy54MCkgKiAoeCAvICh0aGlzLnNlZ21lbnRzWC0xKSksIHRleHR1cmUuX3V2cy55MCArICh0ZXh0dXJlLl91dnMueTMtdGV4dHVyZS5fdXZzLnkwKSAqICh5LyAodGhpcy5zZWdtZW50c1ktMSkpKTtcbiAgICAgIH1cblxuICAgIC8vICBjb25zXG5cbiAgICB2YXIgdG90YWxTdWIgPSBzZWdtZW50c1hTdWIgKiBzZWdtZW50c1lTdWI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTdWI7IGkrKykge1xuXG4gICAgICAgIHZhciB4cG9zID0gaSAlIHNlZ21lbnRzWFN1YjtcbiAgICAgICAgdmFyIHlwb3MgPSAoaSAvIHNlZ21lbnRzWFN1YiApIHwgMDtcblxuXG4gICAgICAgIHZhciAgdmFsdWUgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWUyID0gKHlwb3MgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zICsgMTtcbiAgICAgICAgdmFyICB2YWx1ZTMgPSAoKHlwb3MrMSkgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zO1xuICAgICAgICB2YXIgIHZhbHVlNCA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuXG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZSwgdmFsdWUyLCB2YWx1ZTMpO1xuICAgICAgICBpbmRpY2VzLnB1c2godmFsdWUyLCB2YWx1ZTQsIHZhbHVlMyk7XG4gICAgfVxuXG5cbiAgICAvL2NvbnNvbGUubG9nKGluZGljZXMpXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkodmVydHMpO1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheSh1dnMpO1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShjb2xvcnMpO1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShpbmRpY2VzKTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGV4dHVyZSBVVnMgd2hlbiBuZXcgdGV4dHVyZSBpcyBzZXRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QbGFuZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFBsYW5lIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBUaGUgcm9wZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciByb3BlID0gbmV3IFBJWEkuUm9wZShQSVhJLlRleHR1cmUuZnJvbUltYWdlKFwic25ha2UucG5nXCIpLCBwb2ludHMpO1xuICogIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5tZXNoLk1lc2hcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB7UElYSS5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIHRleHR1cmUgdG8gdXNlIG9uIHRoZSByb3BlLlxuICogQHBhcmFtIHtQSVhJLlBvaW50W119IHBvaW50cyAtIEFuIGFycmF5IG9mIHtAbGluayBQSVhJLlBvaW50fSBvYmplY3RzIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gKlxuICovXG5mdW5jdGlvbiBSb3BlKHRleHR1cmUsIHBvaW50cylcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnRbXX0gQW4gYXJyYXkgb2YgcG9pbnRzIHRoYXQgZGV0ZXJtaW5lIHRoZSByb3BlXG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgb2YgdmVydGljZXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhpcyByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBUaGUgV2ViR0wgVXZzIG9mIHRoZSByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogNCk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgY29sb3IgY29tcG9uZW50c1xuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgcm9wZSBpcyByZWFkeSB0byBiZSBkcmF3bi4gTmVlZGVkIGJlY2F1c2UgTWVzaCBjdG9yIGNhblxuICAgICAqIGNhbGwgX29uVGV4dHVyZVVwZGF0ZWQgd2hpY2ggY291bGQgY2FsbCByZWZyZXNoIHRvbyBlYXJseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgIHRoaXMucmVmcmVzaCgpO1xufVxuXG5cbi8vIGNvbnN0cnVjdG9yXG5Sb3BlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTWVzaC5wcm90b3R5cGUpO1xuUm9wZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3BlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3BlO1xuXG4vKipcbiAqIFJlZnJlc2hlc1xuICpcbiAqL1xuUm9wZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgLy8gaWYgdG9vIGxpdHRsZSBwb2ludHMsIG9yIHRleHR1cmUgaGFzbid0IGdvdCBVVnMgc2V0IHlldCBqdXN0IG1vdmUgb24uXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxIHx8ICF0aGlzLl90ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuXG4gICAgdmFyIHRleHR1cmVVdnMgPSB0aGlzLl90ZXh0dXJlLl91dnM7XG4gICAgdmFyIG9mZnNldCA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDAsIHRleHR1cmVVdnMueTApO1xuICAgIHZhciBmYWN0b3IgPSBuZXcgY29yZS5Qb2ludCh0ZXh0dXJlVXZzLngyIC0gdGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MiAtIHRleHR1cmVVdnMueTApO1xuXG4gICAgdXZzWzBdID0gMCArIG9mZnNldC54O1xuICAgIHV2c1sxXSA9IDAgKyBvZmZzZXQueTtcbiAgICB1dnNbMl0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICBjb2xvcnNbMF0gPSAxO1xuICAgIGNvbG9yc1sxXSA9IDE7XG5cbiAgICBpbmRpY2VzWzBdID0gMDtcbiAgICBpbmRpY2VzWzFdID0gMTtcblxuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgYW1vdW50O1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG4gICAgICAgIC8vIHRpbWUgdG8gZG8gc29tZSBzbWFydCBkcmF3aW5nIVxuICAgICAgICBhbW91bnQgPSBpIC8gKHRvdGFsLTEpO1xuXG4gICAgICAgIHV2c1tpbmRleF0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrMV0gPSAwICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgdXZzW2luZGV4KzJdID0gYW1vdW50ICogZmFjdG9yLnggKyBvZmZzZXQueDtcbiAgICAgICAgdXZzW2luZGV4KzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgY29sb3JzW2luZGV4XSA9IDE7XG4gICAgICAgIGNvbG9yc1tpbmRleCsxXSA9IDE7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgaW5kaWNlc1tpbmRleF0gPSBpbmRleDtcbiAgICAgICAgaW5kaWNlc1tpbmRleCArIDFdID0gaW5kZXggKyAxO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIE1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUuY2FsbCh0aGlzKTtcblxuICAgIC8vIHdhaXQgZm9yIHRoZSBSb3BlIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Sb3BlLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbGFzdFBvaW50ID0gcG9pbnRzWzBdO1xuICAgIHZhciBuZXh0UG9pbnQ7XG4gICAgdmFyIHBlcnBYID0gMDtcbiAgICB2YXIgcGVycFkgPSAwO1xuXG4gICAgLy8gdGhpcy5jb3VudCAtPSAwLjI7XG5cbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgcmF0aW8sIHBlcnBMZW5ndGgsIG51bTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWw7IGkrKylcbiAgICB7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBpbmRleCA9IGkgKiA0O1xuXG4gICAgICAgIGlmIChpIDwgcG9pbnRzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0UG9pbnQgPSBwb2ludHNbaSsxXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcGVycFkgPSAtKG5leHRQb2ludC54IC0gbGFzdFBvaW50LngpO1xuICAgICAgICBwZXJwWCA9IG5leHRQb2ludC55IC0gbGFzdFBvaW50Lnk7XG5cbiAgICAgICAgcmF0aW8gPSAoMSAtIChpIC8gKHRvdGFsLTEpKSkgKiAxMDtcblxuICAgICAgICBpZiAocmF0aW8gPiAxKVxuICAgICAgICB7XG4gICAgICAgICAgICByYXRpbyA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwTGVuZ3RoID0gTWF0aC5zcXJ0KHBlcnBYICogcGVycFggKyBwZXJwWSAqIHBlcnBZKTtcbiAgICAgICAgbnVtID0gdGhpcy5fdGV4dHVyZS5oZWlnaHQgLyAyOyAvLygyMCArIE1hdGguYWJzKE1hdGguc2luKChpICsgdGhpcy5jb3VudCkgKiAwLjMpICogNTApICkqIHJhdGlvO1xuICAgICAgICBwZXJwWCAvPSBwZXJwTGVuZ3RoO1xuICAgICAgICBwZXJwWSAvPSBwZXJwTGVuZ3RoO1xuXG4gICAgICAgIHBlcnBYICo9IG51bTtcbiAgICAgICAgcGVycFkgKj0gbnVtO1xuXG4gICAgICAgIHZlcnRpY2VzW2luZGV4XSA9IHBvaW50LnggKyBwZXJwWDtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMV0gPSBwb2ludC55ICsgcGVycFk7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzJdID0gcG9pbnQueCAtIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCszXSA9IHBvaW50LnkgLSBwZXJwWTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBwb2ludDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkubWVzaFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNZXNoOiAgICAgICAgICAgcmVxdWlyZSgnLi9NZXNoJyksXG4gICAgUGxhbmU6ICAgICAgICAgICByZXF1aXJlKCcuL1BsYW5lJyksXG4gICAgUm9wZTogICAgICAgICAgIHJlcXVpcmUoJy4vUm9wZScpLFxuICAgIE1lc2hSZW5kZXJlcjogICByZXF1aXJlKCcuL3dlYmdsL01lc2hSZW5kZXJlcicpLFxuICAgIE1lc2hTaGFkZXI6ICAgICByZXF1aXJlKCcuL3dlYmdsL01lc2hTaGFkZXInKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIE1lc2ggPSByZXF1aXJlKCcuLi9NZXNoJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgTWVzaFJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9NZXNoUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgY29yZS5PYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIFxuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSgxNTAwMCk7XG5cbiAgICAvL1RPRE8gdGhpcyBjb3VsZCBiZSBhIHNpbmdsZSBidWZmZXIgc2hhcmVkIGFtb25nc3QgYWxsIHJlbmRlcmVycyBhcyB3ZSByZXVzZSB0aGlzIHNldCB1cCBpbiBtb3N0IHJlbmRlcmVyc1xuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgMTUwMDA7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufVxuXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoUmVuZGVyZXI7XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignbWVzaCcsIE1lc2hSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIG1lc2gge1BJWEkubWVzaC5NZXNofSB0aGUgbWVzaCB0byByZW5kZXJcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICBpZighbWVzaC5fdmVydGV4QnVmZmVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5faW5pdFdlYkdMKG1lc2gpO1xuICAgIH1cblxuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXIsXG4gICAgICAgIGdsID0gcmVuZGVyZXIuZ2wsXG4gICAgICAgIHRleHR1cmUgPSBtZXNoLl90ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBzaGFkZXIgPSBtZXNoLnNoYWRlcjsvLyB8fCByZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnBsdWdpbnMubWVzaFNoYWRlcjtcblxuICAgIHZhciBkcmF3TW9kZSA9IG1lc2guZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIID8gZ2wuVFJJQU5HTEVfU1RSSVAgOiBnbC5UUklBTkdMRVM7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShtZXNoLmJsZW5kTW9kZSk7XG5cbiAgICAvL1RPRE8gY2FjaGUgY3VzdG9tIHN0YXRlLi5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzaGFkZXIgPSBzaGFkZXIuc2hhZGVyc1tnbC5pZF0gfHwgc2hhZGVyLmdldFNoYWRlcihyZW5kZXJlcik7Ly8gOiBzaGFkZXI7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4LnZhbHVlID0gbWVzaC53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gbWVzaC53b3JsZEFscGhhO1xuXG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuXG4gICAgaWYgKCFtZXNoLmRpcnR5KVxuICAgIHtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIG1lc2gudmVydGljZXMpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIHV2c1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cblxuICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCAwLCBtZXNoLmluZGljZXMpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIG1lc2guZGlydHkgPSBmYWxzZTtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZG9udCBuZWVkIHRvIHVwbG9hZCFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIH1cblxuICAgIGdsLmRyYXdFbGVtZW50cyhkcmF3TW9kZSwgbWVzaC5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuXG59O1xuXG4vKipcbiAqIFByZXBhcmVzIGFsbCB0aGUgYnVmZmVycyB0byByZW5kZXIgdGhpcyBtZXNoXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLl9pbml0V2ViR0wgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICAvLyBidWlsZCB0aGUgc3RyaXAhXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIG1lc2guX3ZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIG1lc2guX2luZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5fdXZCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC52ZXJ0aWNlcywgZ2wuRFlOQU1JQ19EUkFXKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgaWYobWVzaC5jb2xvcnMpe1xuICAgICAgICBtZXNoLl9jb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fY29sb3JCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5jb2xvcnMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG59O1xuXG5cbi8qKlxuICogRW1wdGllcyB0aGUgY3VycmVudCBiYXRjaC5cbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBtZXNoIHJlbmRlcmVyLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgXG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgTWVzaCByZW5kZXJlclxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIFdlYkdMIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gTWVzaFNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIGNvcmUuU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIGFscGhhIDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYVRleHR1cmVDb29yZDowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5NZXNoU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TaGFkZXIucHJvdG90eXBlKTtcbk1lc2hTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gTWVzaFNoYWRlcjtcblxuY29yZS5TaGFkZXJNYW5hZ2VyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoU2hhZGVyJywgTWVzaFNoYWRlcik7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9zaWduXG5cbmlmICghTWF0aC5zaWduKVxue1xuICAgIE1hdGguc2lnbiA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHggPSAreDtcbiAgICAgICAgaWYgKHggPT09IDAgfHwgaXNOYU4oeCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4ID4gMCA/IDEgOiAtMTtcbiAgICB9O1xufVxuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvb2JqZWN0LWFzc2lnblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnblxuXG5pZiAoIU9iamVjdC5hc3NpZ24pXG57XG4gICAgT2JqZWN0LmFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcbn1cbiIsInJlcXVpcmUoJy4vT2JqZWN0LmFzc2lnbicpO1xucmVxdWlyZSgnLi9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUnKTtcbnJlcXVpcmUoJy4vTWF0aC5zaWduJyk7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cDovL3BhdWxpcmlzaC5jb20vMjAxMS9yZXF1ZXN0YW5pbWF0aW9uZnJhbWUtZm9yLXNtYXJ0LWFuaW1hdGluZy9cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzE1Nzk2NzFcbi8vIGh0dHA6Ly91cGRhdGVzLmh0bWw1cm9ja3MuY29tLzIwMTIvMDUvcmVxdWVzdEFuaW1hdGlvbkZyYW1lLUFQSS1ub3ctd2l0aC1zdWItbWlsbGlzZWNvbmQtcHJlY2lzaW9uXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90aW1oYWxsLzQwNzg2MTRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9GaW5hbmNpYWwtVGltZXMvcG9seWZpbGwtc2VydmljZS90cmVlL21hc3Rlci9wb2x5ZmlsbHMvcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG5cbi8vIEV4cGVjdGVkIHRvIGJlIHVzZWQgd2l0aCBCcm93c2VyZml5XG4vLyBCcm93c2VyaWZ5IGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB0aGUgdXNlIG9mIGBnbG9iYWxgIGFuZCBwYXNzZXMgdGhlXG4vLyBjb3JyZWN0IHJlZmVyZW5jZSBvZiBgZ2xvYmFsYCwgYHNlbGZgLCBhbmQgZmluYWxseSBgd2luZG93YFxuXG4vLyBEYXRlLm5vd1xuaWYgKCEoRGF0ZS5ub3cgJiYgRGF0ZS5wcm90b3R5cGUuZ2V0VGltZSkpIHtcbiAgICBEYXRlLm5vdyA9IGZ1bmN0aW9uIG5vdygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIH07XG59XG5cbi8vIHBlcmZvcm1hbmNlLm5vd1xuaWYgKCEoZ2xvYmFsLnBlcmZvcm1hbmNlICYmIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cpKSB7XG4gICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgaWYgKCFnbG9iYWwucGVyZm9ybWFuY2UpIHtcbiAgICAgICAgZ2xvYmFsLnBlcmZvcm1hbmNlID0ge307XG4gICAgfVxuICAgIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIH07XG59XG5cbi8vIHJlcXVlc3RBbmltYXRpb25GcmFtZVxudmFyIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbnZhciB2ZW5kb3JzID0gWydtcycsICdtb3onLCAnd2Via2l0JywgJ28nXTtcblxuZm9yKHZhciB4ID0gMDsgeCA8IHZlbmRvcnMubGVuZ3RoICYmICFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lOyArK3gpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnQ2FuY2VsQW5pbWF0aW9uRnJhbWUnXSB8fFxuICAgICAgICBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbn1cblxuaWYgKCFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZGVsYXkgPSAxNiArIGxhc3RUaW1lIC0gY3VycmVudFRpbWU7XG5cbiAgICAgICAgaWYgKGRlbGF5IDwgMCkge1xuICAgICAgICAgICAgZGVsYXkgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFRpbWUgPSBjdXJyZW50VGltZTtcblxuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsYXN0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBjYWxsYmFjayhwZXJmb3JtYW5jZS5ub3coKSk7XG4gICAgICAgIH0sIGRlbGF5KTtcbiAgICB9O1xufVxuXG5pZiAoIWdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSkge1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgfTtcbn1cbiJdfQ== +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L09ic2VydmFibGVQb2ludC5qcyIsInNyYy9jb3JlL2Rpc3BsYXkvVHJhbnNmb3JtU3RhdGljLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3MuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9HcmFwaGljc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvV2ViR0xHcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ2lyY2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRDb21wbGV4UG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkTGluZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL01hdHJpeC5qcyIsInNyYy9jb3JlL21hdGgvUG9pbnQuanMiLCJzcmMvY29yZS9tYXRoL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvQ2lyY2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvRWxsaXBzZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1BvbHlnb24uanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9SZWN0YW5nbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlQnVmZmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvU3lzdGVtUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNNYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1RleHR1cmVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9NYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUXVhZC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvU3RlbmNpbE1hc2tTdGFjay5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9zcHJpdGVzL1Nwcml0ZS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvdGV4dC9UZXh0LmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9CYXNlVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1JlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9UZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZVV2cy5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90aWNrZXIvVGlja2VyLmpzIiwic3JjL2NvcmUvdGlja2VyL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzLmpzIiwic3JjL2NvcmUvdXRpbHMvaW5kZXguanMiLCJzcmMvY29yZS91dGlscy9wbHVnaW5UYXJnZXQuanMiLCJzcmMvZGVwcmVjYXRpb24uanMiLCJzcmMvZXh0cmFzL0JpdG1hcFRleHQuanMiLCJzcmMvZXh0cmFzL01vdmllQ2xpcC5qcyIsInNyYy9leHRyYXMvVGlsaW5nU3ByaXRlLmpzIiwic3JjL2V4dHJhcy9jYWNoZUFzQml0bWFwLmpzIiwic3JjL2V4dHJhcy9nZXRDaGlsZEJ5TmFtZS5qcyIsInNyYy9leHRyYXMvZ2V0R2xvYmFsUG9zaXRpb24uanMiLCJzcmMvZXh0cmFzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvYXNjaWkvQXNjaWlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibG9vbS9CbG9vbUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckRpckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1clhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9TbWFydEJsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvck1hdHJpeEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbG9yL0NvbG9yU3RlcEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2RvdC9Eb3RTY3JlZW5GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0JsdXJZVGludEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2dyYXkvR3JheUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvaW52ZXJ0L0ludmVydEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL25vaXNlL05vaXNlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9yZ2IvUkdCU3BsaXRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zZXBpYS9TZXBpYUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0QXhpc0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdHdpc3QvVHdpc3RGaWx0ZXIuanMiLCJzcmMvc3JjL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL0ludGVyYWN0aW9uRGF0YS5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbk1hbmFnZXIuanMiLCJzcmMvaW50ZXJhY3Rpb24vaW5kZXguanMiLCJzcmMvaW50ZXJhY3Rpb24vaW50ZXJhY3RpdmVUYXJnZXQuanMiLCJzcmMvbG9hZGVycy9iaXRtYXBGb250UGFyc2VyLmpzIiwic3JjL2xvYWRlcnMvaW5kZXguanMiLCJzcmMvbG9hZGVycy9sb2FkZXIuanMiLCJzcmMvbG9hZGVycy9zcHJpdGVzaGVldFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL3RleHR1cmVQYXJzZXIuanMiLCJzcmMvbWVzaC9NZXNoLmpzIiwic3JjL21lc2gvUGxhbmUuanMiLCJzcmMvbWVzaC9Sb3BlLmpzIiwic3JjL21lc2gvaW5kZXguanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoUmVuZGVyZXIuanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoU2hhZGVyLmpzIiwic3JjL3BvbHlmaWxsL01hdGguc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9PYmplY3QuYXNzaWduLmpzIiwic3JjL3BvbHlmaWxsL2luZGV4LmpzIiwic3JjL3BvbHlmaWxsL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzV1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNyaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbm1DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Y0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2h5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNWxCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM21CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25iQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICBjcmVhdGVDb250ZXh0OiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9jcmVhdGVDb250ZXh0JyksXG4gICAgc2V0VmVydGV4QXR0cmliQXJyYXlzOiBcdHJlcXVpcmUoJy4vbGliL3NldFZlcnRleEF0dHJpYkFycmF5cycpLFxuICAgIFxuICAgIEdMQnVmZmVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMQnVmZmVyJyksXG4gICAgR0xGcmFtZWJ1ZmZlcjogXHRcdFx0cmVxdWlyZSgnLi9saWIvR0xGcmFtZWJ1ZmZlcicpLFxuICAgIEdMU2hhZGVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMU2hhZGVyJyksXG4gICAgR0xUZXh0dXJlOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMVGV4dHVyZScpLFxuICAgIFxuICAgIFZlcnRleEFycmF5T2JqZWN0OiBcdFx0cmVxdWlyZSgnLi9saWIvVmVydGV4QXJyYXlPYmplY3QnKVxuXG59OyIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEVNUFRZX0FSUkFZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcblxudmFyIEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuQVJSQVlfQlVGRkVSO1xuXHR0aGlzLmRyYXdUeXBlID0gZHJhd1R5cGUgfHwgZ2wuU1RBVElDX0RSQVc7XG5cdHRoaXMuZGF0YSA9IEVNUFRZX0FSUkFZX0JVRkZFUjtcblxuXHRpZihkYXRhKVxuXHR7XG5cdFx0dGhpcy51cGxvYWQoZGF0YSk7XG5cdH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihkYXRhLCBvZmZzZXQsIGRvbnRCaW5kKVxue1xuXHQvLyB0b2RvIC0gbmVlZGVkP1xuXHQvL2lmKCFkb250QmluZClcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblx0XG5cdGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcblx0b2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cblx0aWYodGhpcy5kYXRhLmJ5dGVMZW5ndGggPj0gZGF0YS5ieXRlTGVuZ3RoKVxuXHR7XHRcblx0XHRnbC5idWZmZXJTdWJEYXRhKHRoaXMudHlwZSwgb2Zmc2V0LCBkYXRhKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC5idWZmZXJEYXRhKHRoaXMudHlwZSwgZGF0YSwgdGhpcy5kcmF3VHlwZSk7XG5cdH1cblxuXHR0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRCdWZmZXIodGhpcy50eXBlLCB0aGlzLmJ1ZmZlcik7XG59XG5cbkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24oZ2wsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZSA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIHR5cGUsIGRyYXdUeXBlKTtcbn1cblxuLy9UT0RPIERlc3Ryb3kuLlxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcjtcblxuIiwiXG52YXIgVGV4dHVyZSA9IHJlcXVpcmUoJy4vR0xUZXh0dXJlJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIEZyYW1lYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEZyYW1lYnVmZmVyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblx0XG5cdHRoaXMuc3RlbmNpbCA9IG51bGw7XG5cdHRoaXMudGV4dHVyZSA9IG51bGw7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlVGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBuZXcgVGV4dHVyZShnbCk7XG5cblx0dGhpcy50ZXh0dXJlLmJpbmQoKTtcblxuXHQvL2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZS50ZXh0dXJlLCAwKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmVuYWJsZVN0ZW5jaWwgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuc3RlbmNpbClyZXR1cm47XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnN0ZW5jaWwgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcbiAgICBcbiAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBcbiAgICAvLyBUT0RPLi4gdGhpcyBpcyBkZXB0aCBBTkQgc3RlbmNpbD9cbiAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsICB0aGlzLndpZHRoICAsIHRoaXMuaGVpZ2h0ICk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCByLCBnLCBiLCBhIClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICBnbC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpO1xuICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLmZyYW1lYnVmZmVyICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuXHRpZiAoIHRoaXMudGV4dHVyZSApXG4gICAge1xuICAgIFx0dGhpcy50ZXh0dXJlLnVwbG9hZERhdGEobnVsbCwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRpZiAoIHRoaXMuc3RlbmNpbCApXG4gICAge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0ZW5jaWwgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0dmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21EYXRhKGdsLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0dGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgZmJvLnVuYmluZCgpO1xuICAgIFxuICAgIHJldHVybiBmYm87XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZUZsb2F0MzIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0Ly8gY3JlYXRlIGEgbmV3IHRleHR1cmUuLlxuICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUuZnJvbURhdGEoZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuICAgIHRleHR1cmUuZW5hYmxlTmVhcmVzdFNjYWxpbmcoKTtcbiAgICB0ZXh0dXJlLmVuYWJsZVdyYXBDbGFtcCgpO1xuXG4gICAgLy9ub3cgY3JlYXRlIHRoZSBmcmFtZWJ1ZmZlciBvYmplY3QgYW5kIGF0dGFjaCB0aGUgdGV4dHVyZSB0byBpdC5cbiAgICB2YXIgZmJvID0gbmV3IEZyYW1lYnVmZmVyKGdsLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICBmYm8uZW5hYmxlVGV4dHVyZSh0ZXh0dXJlKVxuXG4gICAgZmJvLnVuYmluZCgpO1xuXG4gICAgcmV0dXJuIGZibztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGcmFtZWJ1ZmZlcjtcblxuIiwiXG52YXIgY29tcGlsZVByb2dyYW0gPSByZXF1aXJlKCcuL3NoYWRlci9jb21waWxlUHJvZ3JhbScpLFxuXHRleHRyYWN0QXR0cmlidXRlcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RBdHRyaWJ1dGVzJyksXG5cdGV4dHJhY3RVbmlmb3JtcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RVbmlmb3JtcycpLFxuXHRnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QgPSByZXF1aXJlKCcuL3NoYWRlci9nZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgU2hhZGVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cbnZhciBTaGFkZXIgPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIEZpcnN0IGNvbXBpbGUgdGhlIHByb2dyYW0uLlxuXHR0aGlzLnByb2dyYW0gPSBjb21waWxlUHJvZ3JhbShnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7XG5cblx0Ly8gbmV4dCBleHRyYWN0IHRoZSBhdHRyaWJ1dGVzXG5cdHRoaXMuYXR0cmlidXRlcyA9IGV4dHJhY3RBdHRyaWJ1dGVzKGdsLCB0aGlzLnByb2dyYW0pOyBcblxuICAgIHZhciB1bmlmb3JtRGF0YSA9IGV4dHJhY3RVbmlmb3JtcyhnbCwgdGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMudW5pZm9ybXMgPSBnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QoIGdsLCB1bmlmb3JtRGF0YSApO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4iLCJcbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gYSBXZWJHTCBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGZvcm1hdCB7bnVtYmVyfSB0aGUgcGl4ZWwgZm9ybWF0IG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5SR0JBXG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSB0aGUgZ2wgdHlwZSBvZiB0aGUgdGV4dHVyZS4gZGVmYXVsdHMgdG8gZ2wuVU5TSUdORURfQllURVxuICovXG52YXIgVGV4dHVyZSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLnRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cblx0Ly8gc29tZSBzZXR0aW5ncy4uXG5cdHRoaXMubWlwbWFwID0gZmFsc2U7XG5cblx0dGhpcy5wcmVtdWx0aXBseUFscGhhID0gZmFsc2U7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cblx0dGhpcy5mb3JtYXQgPSBmb3JtYXQgfHwgZ2wuUkdCQTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5VTlNJR05FRF9CWVRFO1xuXG5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge1BJWEkuZ2xDb3JlLlRleHR1cmV9IFt2YXJuYW1lXSBbZGVzY3JpcHRpb25dXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKHNvdXJjZSlcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gc291cmNlLndpZHRoO1xuXHR0aGlzLmhlaWdodCA9IHNvdXJjZS5oZWlnaHQ7XG5cblx0Z2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xuICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMuZm9ybWF0LCB0aGlzLnR5cGUsIHNvdXJjZSk7XG59XG5cbnZhciBGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSBmYWxzZTtcblxuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkRGF0YSA9IGZ1bmN0aW9uKGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuYmluZCgpO1xuXHRcblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IHRoaXMud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IHRoaXMuaGVpZ2h0O1xuXG5cdGlmKGRhdGEgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpXG5cdHtcblx0XHRpZighRkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFKVxuXHRcdHtcblx0XHRcdHZhciBleHQgPSBnbC5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9mbG9hdFwiKTtcblx0XHRcdFxuXHRcdFx0aWYoZXh0KVxuXHRcdFx0e1xuXHRcdFx0XHRGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2Zsb2F0aW5nIHBvaW50IHRleHR1cmVzIG5vdCBhdmFpbGFibGUnKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnR5cGUgPSBnbC5GTE9BVDtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHQvLyBUT0RPIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzXG5cdFx0dGhpcy50eXBlID0gZ2wuVU5TSUdORURfQllURTtcblx0fVxuXG5cdC8vIHdoYXQgdHlwZSBvZiBkYXRhP1xuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG5cdGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsICB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgZGF0YSB8fCBudWxsKTtcblxufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24obG9jYXRpb24pXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0aWYobG9jYXRpb24gIT09IHVuZGVmaW5lZClcblx0e1xuXHRcdGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbik7XG5cdH1cblxuXHRnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0aGlzLnRleHR1cmUpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIG51bGwpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5taW5GaWx0ZXIgPSBmdW5jdGlvbiggbGluZWFyIClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRpZih0aGlzLm1pcG1hcClcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVJfTUlQTUFQX0xJTkVBUiA6IGdsLk5FQVJFU1RfTUlQTUFQX05FQVJFU1QpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcblx0fVx0XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1hZ0ZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTWlwbWFwID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR0aGlzLm1pcG1hcCA9IHRydWU7XG5cdGdsLmdlbmVyYXRlTWlwbWFwKGdsLlRFWFRVUkVfMkQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVMaW5lYXJTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcih0cnVlKTtcblx0dGhpcy5tYWdGaWx0ZXIodHJ1ZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZU5lYXJlc3RTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcihmYWxzZSk7XG5cdHRoaXMubWFnRmlsdGVyKGZhbHNlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlV3JhcENsYW1wID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwUmVwZWF0ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXHRcblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuUkVQRUFUKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5SRVBFQVQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlVGV4dHVyZSh0aGlzLnRleHR1cmUpO1xufVxuXG4vL1RleHR1cmUuXG5UZXh0dXJlLmZyb21Tb3VyY2UgPSBmdW5jdGlvbihnbCwgc291cmNlLCBwcmVtdWx0aXBseUFscGhhKVxue1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS5wcmVtdWx0aXBseUFscGhhID0gcHJlbXVsdGlwbHlBbHBoYSB8fCBmYWxzZTtcblx0dGV4dHVyZS51cGxvYWQoc291cmNlKTtcblxuXHRyZXR1cm4gdGV4dHVyZTtcbn1cblxuVGV4dHVyZS5mcm9tRGF0YSA9IGZ1bmN0aW9uKGdsLCBkYXRhLCB3aWR0aCwgaGVpZ2h0KVxue1xuXHQvL2NvbnNvbGUubG9nKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS51cGxvYWREYXRhKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZTtcblxuIiwiXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbi8vIHN0YXRlIG9iamVjdC8vXG5cblxuZnVuY3Rpb24gVmVydGV4QXJyYXlPYmplY3QoZ2wpXG57XG5cdFxuXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IChcbiAgICAgIGdsLmdldEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKVxuICAgICk7XG5cbi8vXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IG51bGw7XG5cblx0aWYodGhpcy5uYXRpdmVWYW9FeHRlbnNpb24pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhbyA9IHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7ICBcblx0fVxuXG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcblxuXHR0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuXHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cblx0XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZlcnRleEFycmF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBWZXJ0ZXhBcnJheU9iamVjdDtcblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKHRoaXMubmF0aXZlVmFvKTsgIFxuXG5cdFx0aWYodGhpcy5kaXJ0eSlcblx0XHR7XG5cdFx0XHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cdFx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdFx0fVxuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLm5hdGl2ZVZhbylcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIFxuXHR7XG5cdFx0dmFyIGF0dHJpYiA9IHRoaXMuYXR0cmlidXRlc1tpXTtcblx0XHRhdHRyaWIuYnVmZmVyLmJpbmQoKTtcdFxuXG5cdFx0YXR0cmliLmF0dHJpYnV0ZS5wb2ludGVyKGF0dHJpYi50eXBlLCBhdHRyaWIubm9ybWFsaXplZCwgYXR0cmliLnN0cmlkZSwgYXR0cmliLnN0YXJ0KTsgXG5cdFx0XG5cdFx0Z2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYXR0cmliLmF0dHJpYnV0ZS5sb2NhdGlvbik7XG5cdH07XG5cblx0dGhpcy5pbmRleEJ1ZmZlci5iaW5kKCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRBdHRyaWJ1dGUgPSBmdW5jdGlvbihidWZmZXIsIGF0dHJpYnV0ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydClcbntcbiAgICB0aGlzLmF0dHJpYnV0ZXMucHVzaCh7XG4gICAgXHRidWZmZXI6IFx0YnVmZmVyLFxuICAgIFx0YXR0cmlidXRlOiBcdGF0dHJpYnV0ZSxcblxuICAgIFx0bG9jYXRpb246IFx0YXR0cmlidXRlLmxvY2F0aW9uLFxuXHQgXHR0eXBlOiBcdFx0dHlwZSB8fCB0aGlzLmdsLkZMT0FULFxuXHQgXHRub3JtYWxpemVkOiBub3JtYWxpemVkIHx8IGZhbHNlLFxuXHQgXHRzdHJpZGU6IFx0c3RyaWRlIHx8IDAsXG5cdCBcdHN0YXJ0OiBcdFx0c3RhcnQgfHwgMFxuXHR9KVxuXG5cdHRoaXMuZGlydHkgPSB0cnVlO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRJbmRleCA9IGZ1bmN0aW9uKGJ1ZmZlciwgb3B0aW9ucylcbntcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gYnVmZmVyO1xuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBzdGFydClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuZHJhd0VsZW1lbnRzKHR5cGUsIHNpemUsIGdsLlVOU0lHTkVEX1NIT1JULCBzdGFydCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgQ29udGV4dFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG5cbnZhciBDT05URVhUX1VJRCA9IDA7XG5cbnZhciBjcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24oY2FudmFzLCBvcHRpb25zKVxue1xuICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgb3B0aW9ucykgfHwgXG4gICAgXHQgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFnbClcbiAgICB7XG4gICAgICAgIC8vIGZhaWwsIG5vdCBhYmxlIHRvIGdldCBhIGNvbnRleHRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB3ZWJHTC4gVHJ5IHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXInKTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCB3YW50IHRvIHBoYXNlIHRoaXMgb3V0P1xuICAgIGdsLmlkID0gQ09OVEVYVF9VSUQrKztcblxuICAgIHJldHVybiBnbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb250ZXh0O1xuXG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgc2V0VmVydGV4QXR0cmliQXJyYXlzID0gZnVuY3Rpb24gKGdsLCBhdHRyaWJzKVxue1x0XG4gICAvLyBjb25zb2xlLmxvZyhnbC5pZClcbiAgICB2YXIgZGF0YSA9IEdMX01BUFtnbC5pZF07XG5cbiAgICBpZighZGF0YSlcbiAgICB7XG5cdCAgIHZhciBtYXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cdFx0ZGF0YSA9IEdMX01BUFtnbC5pZF0gPSB7dGVtcEF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKVxuXHRcdFx0XHQgXHQgXHRcdCAgICxhdHRyaWJTdGF0ZTpuZXcgQXJyYXkobWF4QXR0cmlicyl9O1xuXHR9XG5cdFxuICAgIHZhciBpLFxuICAgIFx0dGVtcEF0dHJpYlN0YXRlID0gZGF0YS50ZW1wQXR0cmliU3RhdGUsXG4gICAgXHRhdHRyaWJTdGF0ZSA9IGRhdGEuYXR0cmliU3RhdGU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAoaSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbaV0ubG9jYXRpb25dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAoYXR0cmliU3RhdGVbaV0gIT09IHRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmliU3RhdGVbaV0gPSB0ZW1wQXR0cmliU3RhdGVbaV07XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmF0dHJpYlN0YXRlW2ldKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VmVydGV4QXR0cmliQXJyYXlzOyIsIlxuXG5cblxuY29tcGlsZVByb2dyYW0gPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcbiAgICB2YXIgZ2xWZXJ0U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuVkVSVEVYX1NIQURFUiwgdmVydGV4U3JjKTtcbiAgICB2YXIgZ2xGcmFnU2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNyYyk7XG5cbiAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbEZyYWdTaGFkZXIpO1xuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgLy8gaWYgbGlua2luZyBmYWlscywgdGhlbiBsb2cgYW5kIGNsZWFudXBcbiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUGl4aS5qcyBFcnJvcjogQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVyLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5WQUxJREFURV9TVEFUVVMnLCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLlZBTElEQVRFX1NUQVRVUykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5nZXRFcnJvcigpJywgZ2wuZ2V0RXJyb3IoKSk7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBwcm9ncmFtIGluZm8gbG9nLCBsb2cgaXRcbiAgICAgICAgaWYgKGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pICE9PSAnJylcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaXhpLmpzIFdhcm5pbmc6IGdsLmdldFByb2dyYW1JbmZvTG9nKCknLCBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICBwcm9ncmFtID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBzb21lIHNoYWRlcnNcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xGcmFnU2hhZGVyKTtcblxuICAgIHJldHVybiBwcm9ncmFtO1xufVxuXG52YXIgY29tcGlsZVNoYWRlciA9IGZ1bmN0aW9uIChnbCwgdHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzcmMpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZVByb2dyYW07XG5cbiIsIlxuXG52YXIgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkgXG57XG4gICAgc3dpdGNoICh0eXBlKVxuICAgIHtcbiAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAndmVjMic6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzQnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSg0ICogc2l6ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgY2FzZSAnc2FtcGxlcjJEJzpcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWMyJzogICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnaXZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDMgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjNCc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDQgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdib29sJzogICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMyJzpcblxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSggMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMzJzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWM0JzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ21hdDInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Myc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMV0pO1xuXG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDAsIDAsIDFdKTtcbiAgICB9XG59XG5cbnZhciBib29sZWFuQXJyYXkgPSBmdW5jdGlvbihzaXplKVxue1xuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgYXJyYXlbaV0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRWYWx1ZTtcbiIsIlxudmFyIG1hcFR5cGUgPSByZXF1aXJlKCcuL21hcFR5cGUnKTtcbnZhciBtYXBTaXplID0gcmVxdWlyZSgnLi9tYXBTaXplJyk7XG5cbnZhciBleHRyYWN0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICB2YXIgdG90YWxBdHRyaWJ1dGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxBdHRyaWJ1dGVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGF0dHJpYkRhdGEgPSBnbC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaSk7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgYXR0cmliRGF0YS50eXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYkRhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOnR5cGUsXG4gICAgICAgICAgICBzaXplOm1hcFNpemUodHlwZSksXG4gICAgICAgICAgICBsb2NhdGlvbjpnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBhdHRyaWJEYXRhLm5hbWUpLFxuICAgICAgICAgICAgLy9UT0RPIC0gbWFrZSBhbiBhdHRyaWJ1dGUgb2JqZWN0XG4gICAgICAgICAgICBwb2ludGVyOmZ1bmN0aW9uKHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpe1xuXG4gICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5sb2NhdGlvbix0aGlzLnNpemUsIHR5cGUgfHwgZ2wuRkxPQVQsIG5vcm1hbGl6ZWQgfHwgZmFsc2UsIHN0cmlkZSB8fCAwLCBzdGFydCB8fCAwKTsgXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYXR0cmlidXRlczsgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RBdHRyaWJ1dGVzO1xuXG4iLCJ2YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIGRlZmF1bHRWYWx1ZSA9IHJlcXVpcmUoJy4vZGVmYXVsdFZhbHVlJyk7XG5cblxudmFyIGV4dHJhY3RVbmlmb3JtcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuXHR2YXIgdW5pZm9ybXMgPSB7fTtcblx0XG4gICAgdmFyIHRvdGFsVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxVbmlmb3JtczsgaSsrKSBcbiAgICB7XG4gICAgXHR2YXIgdW5pZm9ybURhdGEgPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpO1xuICAgIFx0dmFyIG5hbWUgPSB1bmlmb3JtRGF0YS5uYW1lLnJlcGxhY2UoL1xcWy4qP1xcXS8sIFwiXCIpO1xuICAgICAgICB2YXIgdHlwZSA9IG1hcFR5cGUoZ2wsIHVuaWZvcm1EYXRhLnR5cGUgKTtcblxuICAgIFx0dW5pZm9ybXNbbmFtZV0gPSB7XG4gICAgXHRcdHR5cGU6dHlwZSxcbiAgICBcdFx0c2l6ZTp1bmlmb3JtRGF0YS5zaXplLFxuICAgIFx0XHRsb2NhdGlvbjpnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksXG4gICAgXHRcdHZhbHVlOmRlZmF1bHRWYWx1ZSh0eXBlLCB1bmlmb3JtRGF0YS5zaXplKVxuICAgIFx0fVxuICAgIH07XG5cdFxuXHRyZXR1cm4gdW5pZm9ybXM7XHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHRyYWN0VW5pZm9ybXM7XG5cbiIsIlxudmFyIGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IGZ1bmN0aW9uKGdsLCB1bmlmb3JtRGF0YSlcbntcbiAgICAvLyB0aGlzIGlzIHRoZSBvYmplY3Qgd2Ugd2lsbCBiZSBzZW5kaW5nIGJhY2suXG4gICAgLy8gYW4gb2JqZWN0IGhpZXJhY2h5IHdpbGwgYmUgY3JlYXRlZCBmb3Igc3RydWN0c1xuICAgIHZhciB1bmlmb3JtcyA9IHtkYXRhOnt9fTtcblxuICAgIHVuaWZvcm1zLmdsID0gZ2w7XG4gICAgXG4gICAgdmFyIHVuaWZvcm1LZXlzPSBPYmplY3Qua2V5cyh1bmlmb3JtRGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1LZXlzLmxlbmd0aDsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBmdWxsTmFtZSA9IHVuaWZvcm1LZXlzW2ldXG5cbiAgICAgICAgdmFyIG5hbWVUb2tlbnMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAxXTtcblxuICAgICAgICB2YXIgdW5pZm9ybUdyb3VwID0gZ2V0VW5pZm9ybUdyb3VwKG5hbWVUb2tlbnMsIHVuaWZvcm1zKTtcblxuICAgICAgICB2YXIgdW5pZm9ybSA9ICB1bmlmb3JtRGF0YVtmdWxsTmFtZV07XG4gICAgICAgIHVuaWZvcm1Hcm91cC5kYXRhW25hbWVdID0gdW5pZm9ybTtcblxuICAgICAgICB1bmlmb3JtR3JvdXAuZ2wgPSBnbDtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5pZm9ybUdyb3VwLCBuYW1lLCB7XG4gICAgICAgICAgICBnZXQ6IGdlbmVyYXRlR2V0dGVyKG5hbWUpLFxuICAgICAgICAgICAgc2V0OiBnZW5lcmF0ZVNldHRlcihuYW1lLCB1bmlmb3JtKVxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdW5pZm9ybXM7XG59XG5cbnZhciBnZW5lcmF0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpXG57XG5cdHZhciB0ZW1wbGF0ZSA9IGdldHRlclRlbXBsYXRlLnJlcGxhY2UoJyUlJywgbmFtZSk7XG5cdHJldHVybiBuZXcgRnVuY3Rpb24odGVtcGxhdGUpO1xufVxuXG52YXIgZ2VuZXJhdGVTZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCB1bmlmb3JtKVxue1xuICAgIHZhciB0ZW1wbGF0ZSA9IHNldHRlclRlbXBsYXRlLnJlcGxhY2UoLyUlL2csIG5hbWUpO1xuICAgIHZhciBzZXRUZW1wbGF0ZVxuICAgIFxuICAgIGlmKHVuaWZvcm0uc2l6ZSA9PT0gMSlcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19TSU5HTEVfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzZXRUZW1wbGF0ZSA9IEdMU0xfVE9fQVJSQVlfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cblxuICAgIGlmKHNldFRlbXBsYXRlKVxuICAgIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gXCJcXG50aGlzLmdsLlwiICsgc2V0VGVtcGxhdGUgKyBcIjtcIjtcbiAgICB9XG5cbiAgXHRyZXR1cm4gbmV3IEZ1bmN0aW9uKCd2YWx1ZScsIHRlbXBsYXRlKTtcbn1cblxudmFyIGdldFVuaWZvcm1Hcm91cCA9IGZ1bmN0aW9uKG5hbWVUb2tlbnMsIHVuaWZvcm0pXG57XG4gICAgdmFyIGN1ciA9IHVuaWZvcm07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVUb2tlbnMubGVuZ3RoIC0gMTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBvID0gY3VyW25hbWVUb2tlbnNbaV1dIHx8IHtkYXRhOnt9fTtcbiAgICAgICAgY3VyW25hbWVUb2tlbnNbaV1dID0gbztcbiAgICAgICAgY3VyID0gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGN1clxufVxuXG52YXIgZ2V0dGVyVGVtcGxhdGUgPSBbXG4gICAgJ3JldHVybiB0aGlzLmRhdGEuJSUudmFsdWU7Jyxcbl0uam9pbignXFxuJyk7XG5cbnZhciBzZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAndGhpcy5kYXRhLiUlLnZhbHVlID0gdmFsdWU7JyxcbiAgICAndmFyIGxvY2F0aW9uID0gdGhpcy5kYXRhLiUlLmxvY2F0aW9uOydcbl0uam9pbignXFxuJyk7XG5cblxudmFyIEdMU0xfVE9fU0lOR0xFX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ3ZlYzInOiAgICAgJ3VuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ3ZlYzMnOiAgICAgJ3VuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG4gICAgXHRcbiAgICAnaW50JzogICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnaXZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcblxuICAgICdtYXQyJzogICAgICd1bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0Myc6ICAgICAndW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG4gICAgJ21hdDQnOiAgICAgJ3VuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuXG4gICAgJ3NhbXBsZXIyRCc6J3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG52YXIgR0xTTF9UT19BUlJBWV9TRVRURVJTID0ge1xuXG4gICAgJ2Zsb2F0JzogICAgJ3VuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjNCc6ICAgICAndW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG4gICBcbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdDtcblxuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24odHlwZSkgXG57IFxuICAgIHJldHVybiBHTFNMX1RPX1NJWkVbdHlwZV07XG59XG5cblxudmFyIEdMU0xfVE9fU0laRSA9IHtcbiAgICAnZmxvYXQnOiAgICAxLFxuICAgICd2ZWMyJzogICAgIDIsXG4gICAgJ3ZlYzMnOiAgICAgMyxcbiAgICAndmVjNCc6ICAgICA0LFxuXG4gICAgJ2ludCc6ICAgICAgMSxcbiAgICAnaXZlYzInOiAgICAyLFxuICAgICdpdmVjMyc6ICAgIDMsXG4gICAgJ2l2ZWM0JzogICAgNCxcblxuICAgICdib29sJzogICAgIDEsXG4gICAgJ2J2ZWMyJzogICAgMixcbiAgICAnYnZlYzMnOiAgICAzLFxuICAgICdidmVjNCc6ICAgIDQsXG5cbiAgICAnbWF0Mic6ICAgICA0LFxuICAgICdtYXQzJzogICAgIDksXG4gICAgJ21hdDQnOiAgICAgMTYsXG5cbiAgICAnc2FtcGxlcjJEJzogIDFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24oZ2wsIHR5cGUpIFxue1xuICAgIGlmKCFHTF9UQUJMRSkgXG4gICAge1xuICAgICAgICB2YXIgdHlwZU5hbWVzID0gT2JqZWN0LmtleXMoR0xfVE9fR0xTTF9UWVBFUyk7XG5cbiAgICAgICAgR0xfVEFCTEUgPSB7fTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdHlwZU5hbWVzLmxlbmd0aDsgKytpKSBcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHRuID0gdHlwZU5hbWVzW2ldO1xuICAgICAgICAgICAgR0xfVEFCTEVbIGdsW3RuXSBdID0gR0xfVE9fR0xTTF9UWVBFU1t0bl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIEdMX1RBQkxFW3R5cGVdO1xufVxuXG52YXIgR0xfVEFCTEUgPSBudWxsO1xuXG52YXIgR0xfVE9fR0xTTF9UWVBFUyA9IHtcbiAgJ0ZMT0FUJzogICAgICAgJ2Zsb2F0JyxcbiAgJ0ZMT0FUX1ZFQzInOiAgJ3ZlYzInLFxuICAnRkxPQVRfVkVDMyc6ICAndmVjMycsXG4gICdGTE9BVF9WRUM0JzogICd2ZWM0JyxcblxuICAnSU5UJzogICAgICAgICAnaW50JyxcbiAgJ0lOVF9WRUMyJzogICAgJ2l2ZWMyJyxcbiAgJ0lOVF9WRUMzJzogICAgJ2l2ZWMzJyxcbiAgJ0lOVF9WRUM0JzogICAgJ2l2ZWM0JyxcbiAgXG4gICdCT09MJzogICAgICAgICdib29sJyxcbiAgJ0JPT0xfVkVDMic6ICAgJ2J2ZWMyJyxcbiAgJ0JPT0xfVkVDMyc6ICAgJ2J2ZWMzJyxcbiAgJ0JPT0xfVkVDNCc6ICAgJ2J2ZWM0JyxcbiAgXG4gICdGTE9BVF9NQVQyJzogICdtYXQyJyxcbiAgJ0ZMT0FUX01BVDMnOiAgJ21hdDMnLFxuICAnRkxPQVRfTUFUNCc6ICAnbWF0NCcsXG4gIFxuICAnU0FNUExFUl8yRCc6ICAnc2FtcGxlcjJEJyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwU2l6ZTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvQm9vbCh2KSB7XG4gICAgICAgIHJldHVybiAhIXY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vdElkKHYpIHtcbiAgICAgICAgcmV0dXJuICF2O1xuICAgIH1cblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcHJldmlvdXNfYXN5bmM7XG5cbiAgICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gICAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZiB8fFxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgdGhpcztcblxuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgICAgcHJldmlvdXNfYXN5bmMgPSByb290LmFzeW5jO1xuICAgIH1cblxuICAgIGFzeW5jLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBwcmV2aW91c19hc3luYztcbiAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbmx5X29uY2UoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIC8vIFBvcnRlZCBmcm9tIHVuZGVyc2NvcmUuanMgaXNPYmplY3RcbiAgICB2YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9pc0FycmF5TGlrZShhcnIpIHtcbiAgICAgICAgcmV0dXJuIF9pc0FycmF5KGFycikgfHwgKFxuICAgICAgICAgICAgLy8gaGFzIGEgcG9zaXRpdmUgaW50ZWdlciBsZW5ndGggcHJvcGVydHlcbiAgICAgICAgICAgIHR5cGVvZiBhcnIubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICBhcnIubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggJSAxID09PSAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2FycmF5RWFjaChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfbWFwKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdG9yKGFycltpbmRleF0sIGluZGV4LCBhcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JhbmdlKGNvdW50KSB7XG4gICAgICAgIHJldHVybiBfbWFwKEFycmF5KGNvdW50KSwgZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGk7IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9yZWR1Y2UoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBfYXJyYXlFYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9mb3JFYWNoT2Yob2JqZWN0LCBpdGVyYXRvcikge1xuICAgICAgICBfYXJyYXlFYWNoKF9rZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnIsIGl0ZW0pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfa2V5SXRlcmF0b3IoY29sbCkge1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB2YXIgbGVuO1xuICAgICAgICB2YXIga2V5cztcbiAgICAgICAgaWYgKF9pc0FycmF5TGlrZShjb2xsKSkge1xuICAgICAgICAgICAgbGVuID0gY29sbC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBsZW4gPyBpIDogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXlzID0gX2tleXMoY29sbCk7XG4gICAgICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGtleXNbaV0gOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpbWlsYXIgdG8gRVM2J3MgcmVzdCBwYXJhbSAoaHR0cDovL2FyaXlhLm9maWxhYnMuY29tLzIwMTMvMDMvZXM2LWFuZC1yZXN0LXBhcmFtZXRlci5odG1sKVxuICAgIC8vIFRoaXMgYWNjdW11bGF0ZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byBhbiBhcnJheSwgYWZ0ZXIgYSBnaXZlbiBpbmRleC5cbiAgICAvLyBGcm9tIHVuZGVyc2NvcmUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzIxNDApLlxuICAgIGZ1bmN0aW9uIF9yZXN0UGFyYW0oZnVuYywgc3RhcnRJbmRleCkge1xuICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCk7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSB1bnVzZWQgYnV0IGhhbmRsZSBjYXNlcyBvdXRzaWRlIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50OlxuICAgICAgICAgICAgLy8gdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICAgICAgICAvLyBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAvLyAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICAgICAgICAvLyByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBleHBvcnRlZCBhc3luYyBtb2R1bGUgZnVuY3Rpb25zIC8vLy9cblxuICAgIC8vLy8gbmV4dFRpY2sgaW1wbGVtZW50YXRpb24gd2l0aCBicm93c2VyLWNvbXBhdGlibGUgZmFsbGJhY2sgLy8vL1xuXG4gICAgLy8gY2FwdHVyZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZSB0byBndWFyZCBhZ2FpbnN0IGZha2VUaW1lciBtb2Nrc1xuICAgIHZhciBfc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzZXRJbW1lZGlhdGU7XG5cbiAgICB2YXIgX2RlbGF5ID0gX3NldEltbWVkaWF0ZSA/IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgIF9zZXRJbW1lZGlhdGUoZm4pO1xuICAgIH0gOiBmdW5jdGlvbihmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBfZGVsYXk7XG4gICAgfVxuICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IF9zZXRJbW1lZGlhdGUgPyBfZGVsYXkgOiBhc3luYy5uZXh0VGljaztcblxuXG4gICAgYXN5bmMuZm9yRWFjaCA9XG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9XG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mU2VyaWVzKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG5cbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPVxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9lYWNoT2ZMaW1pdChsaW1pdCkoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoT2YgPVxuICAgIGFzeW5jLmVhY2hPZiA9IGZ1bmN0aW9uIChvYmplY3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBvYmplY3QgPSBvYmplY3QgfHwgW107XG5cbiAgICAgICAgdmFyIGl0ZXIgPSBfa2V5SXRlcmF0b3Iob2JqZWN0KTtcbiAgICAgICAgdmFyIGtleSwgY29tcGxldGVkID0gMDtcblxuICAgICAgICB3aGlsZSAoKGtleSA9IGl0ZXIoKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpdGVyYXRvcihvYmplY3Rba2V5XSwga2V5LCBvbmx5X29uY2UoZG9uZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gMCkgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZC0tO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBrZXkgaXMgbnVsbCBpbiBjYXNlIGl0ZXJhdG9yIGlzbid0IGV4aGF1c3RlZFxuICAgICAgICAgICAgLy8gYW5kIGRvbmUgcmVzb2x2ZWQgc3luY2hyb25vdXNseS5cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gbnVsbCAmJiBjb21wbGV0ZWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZlNlcmllcyA9XG4gICAgYXN5bmMuZWFjaE9mU2VyaWVzID0gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iaiA9IG9iaiB8fCBbXTtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgdmFyIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRvcihvYmpba2V5XSwga2V5LCBvbmx5X29uY2UoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoaXRlcmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5mb3JFYWNoT2ZMaW1pdCA9XG4gICAgYXN5bmMuZWFjaE9mTGltaXQgPSBmdW5jdGlvbiAob2JqLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9lYWNoT2ZMaW1pdChsaW1pdCkob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZWFjaE9mTGltaXQobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBydW5uaW5nID0gMDtcbiAgICAgICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChkb25lICYmIHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWwoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZiwgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb1BhcmFsbGVsTGltaXQoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihfZWFjaE9mTGltaXQobGltaXQpLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvU2VyaWVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihhc3luYy5lYWNoT2ZTZXJpZXMsIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gX2lzQXJyYXlMaWtlKGFycikgPyBbXSA6IHt9O1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfYXN5bmNNYXApO1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLmluamVjdCA9XG4gICAgYXN5bmMuZm9sZGwgPVxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgaSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5mb2xkciA9XG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGlkZW50aXR5KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudHJhbnNmb3JtID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGl0ZXJhdG9yO1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBtZW1vO1xuICAgICAgICAgICAgbWVtbyA9IF9pc0FycmF5KGFycikgPyBbXSA6IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuZWFjaE9mKGFyciwgZnVuY3Rpb24odiwgaywgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHYsIGssIGNiKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleDogaW5kZXgsIHZhbHVlOiB4fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soX21hcChyZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICB9KSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMuc2VsZWN0ID1cbiAgICBhc3luYy5maWx0ZXIgPSBkb1BhcmFsbGVsKF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0TGltaXQgPVxuICAgIGFzeW5jLmZpbHRlckxpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID1cbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcblxuICAgIGZ1bmN0aW9uIF9yZWplY3QoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBfZmlsdGVyKGVhY2hmbiwgYXJyLCBmdW5jdGlvbih2YWx1ZSwgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgY2IoIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoZWFjaGZuLCBjaGVjaywgZ2V0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2IpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSBjYihnZXRSZXN1bHQoZmFsc2UsIHZvaWQgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWUoeCwgXywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNiKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2IgJiYgY2hlY2sodikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGdldFJlc3VsdCh0cnVlLCB4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGl0ZXJhdG9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGxpbWl0LCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBsaW1pdDtcbiAgICAgICAgICAgICAgICBlYWNoZm4oYXJyLCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMuYW55ID1cbiAgICBhc3luYy5zb21lID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIHRvQm9vbCwgaWRlbnRpdHkpO1xuXG4gICAgYXN5bmMuc29tZUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5hbGwgPVxuICAgIGFzeW5jLmV2ZXJ5ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIG5vdElkLCBub3RJZCk7XG5cbiAgICBhc3luYy5ldmVyeUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgbm90SWQsIG5vdElkKTtcblxuICAgIGZ1bmN0aW9uIF9maW5kR2V0UmVzdWx0KHYsIHgpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIGFzeW5jLmRldGVjdCA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mU2VyaWVzLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdExpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgaWRlbnRpdHksIF9maW5kR2V0UmVzdWx0KTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoY29tcGFyYXRvciksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgb3B0aW9uYWwsIHNoaWZ0IHRoZSBhcmdzLlxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHJlbWFpbmluZ1Rhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoZm4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gX2luZGV4T2YobGlzdGVuZXJzLCBmbik7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgX2FycmF5RWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2FycmF5RWFjaChrZXlzLCBmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSBfaXNBcnJheSh0YXNrc1trXSkgPyB0YXNrc1trXTogW3Rhc2tzW2tdXTtcbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBfZm9yRWFjaE9mKHJlc3VsdHMsIGZ1bmN0aW9uKHZhbCwgcmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCB0YXNrLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWFkLWxvY2tzXG4gICAgICAgICAgICB2YXIgbGVuID0gcmVxdWlyZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGRlcDtcbiAgICAgICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgICAgICAgIGlmICghKGRlcCA9IHRhc2tzW3JlcXVpcmVzW2xlbl1dKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhcyBpbmV4aXN0YW50IGRlcGVuZGVuY3knKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc0FycmF5KGRlcCkgJiYgX2luZGV4T2YoZGVwLCBrKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGN5Y2xpYyBkZXBlbmRlbmNpZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kgJiYgX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcblxuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHRpbWVzOiBERUZBVUxUX1RJTUVTLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IERFRkFVTFRfSU5URVJWQUxcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgdCA9PT0gJ251bWJlcicpe1xuICAgICAgICAgICAgICAgIGFjYy50aW1lcyA9IHBhcnNlSW50KHQsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiB0ID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodC50aW1lcywgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICAgICAgYWNjLmludGVydmFsID0gcGFyc2VJbnQodC5pbnRlcnZhbCwgMTApIHx8IERFRkFVTFRfSU5URVJWQUw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYXJndW1lbnQgdHlwZSBmb3IgXFwndGltZXNcXCc6ICcgKyB0eXBlb2YgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDEgfHwgbGVuZ3RoID4gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyAtIG11c3QgYmUgZWl0aGVyICh0YXNrKSwgKHRhc2ssIGNhbGxiYWNrKSwgKHRpbWVzLCB0YXNrKSBvciAodGltZXMsIHRhc2ssIGNhbGxiYWNrKScpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA8PSAyICYmIHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGltZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0cywgdGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgb3B0cy50YXNrID0gdGFzaztcblxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVkVGFzayh3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQodGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5SW50ZXJ2YWwoaW50ZXJ2YWwpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKG9wdHMudGltZXMpIHtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5hbEF0dGVtcHQgPSAhKG9wdHMudGltZXMtPTEpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KG9wdHMudGFzaywgZmluYWxBdHRlbXB0KSk7XG4gICAgICAgICAgICAgICAgaWYoIWZpbmFsQXR0ZW1wdCAmJiBvcHRzLmludGVydmFsID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlJbnRlcnZhbChvcHRzLmludGVydmFsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBvcHRzLmNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNhbGxiYWNrIGlzIHBhc3NlZCwgcnVuIHRoaXMgYXMgYSBjb250cm9sbCBmbG93XG4gICAgICAgIHJldHVybiBvcHRzLmNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrO1xuICAgIH07XG5cbiAgICBhc3luYy53YXRlcmZhbGwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGlmICghX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3cmFwSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCh3cmFwSXRlcmF0b3IobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbnN1cmVBc3luYyhpdGVyYXRvcikuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3BhcmFsbGVsKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgbm9vcDtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsIGZ1bmN0aW9uICh0YXNrLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0YXNrKF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLnBhcmFsbGVsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoYXN5bmMuZWFjaE9mLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24odGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoX2VhY2hPZkxpbWl0KGxpbWl0KSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2ZTZXJpZXMsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VDYWxsYmFjayhpbmRleCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYWtlQ2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIGFzeW5jLmFwcGx5ID0gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGNhbGxBcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoY2FsbEFyZ3MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb25jYXQoZWFjaGZuLCBhcnIsIGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIGZuKHgsIGZ1bmN0aW9uIChlcnIsIHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICB2YXIgbmV4dCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdC5hcHBseSh0aGlzLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihuZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gKytjYWxscyA8PSAxIHx8IHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9VbnRpbCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmR1cmluZyA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hlY2spO1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cnV0aCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0KGNoZWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9EdXJpbmcgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIGFzeW5jLmR1cmluZyhmdW5jdGlvbihuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY2FsbHMrKyA8IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBtdXN0IG5vdCBiZSB6ZXJvJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sgfHwgbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBxLnRhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfbmV4dChxLCB0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgd29ya2VycyAtPSAxO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHdvcmtlcnNMaXN0LCBmdW5jdGlvbiAod29ya2VyLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtlciA9PT0gdGFzayAmJiAhcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgdGFza3M6IFtdLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IGNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbm9vcCxcbiAgICAgICAgICAgIGVtcHR5OiBub29wLFxuICAgICAgICAgICAgZHJhaW46IG5vb3AsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHEuZHJhaW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHRydWUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFxLnBhdXNlZCAmJiB3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSh3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBxLnBheWxvYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEucGF5bG9hZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEudGFza3MubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfbWFwKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaCh0YXNrc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UoX25leHQocSwgdGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdW1lQ291bnQgPSBNYXRoLm1pbihxLmNvbmN1cnJlbmN5LCBxLnRhc2tzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSByZXN1bWVDb3VudDsgdysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgcSA9IF9xdWV1ZShmdW5jdGlvbiAoaXRlbXMsIGNiKSB7XG4gICAgICAgICAgICB3b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICAgIGVuZCA9IHNlcXVlbmNlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGJlZyArICgoZW5kIC0gYmVnICsgMSkgPj4+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3BcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoX2JpbmFyeVNlYXJjaChxLnRhc2tzLCBpdGVtLCBfY29tcGFyZVRhc2tzKSArIDEsIDAsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBxLnVuc2hpZnQ7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLmNhcmdvID0gZnVuY3Rpb24gKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gX3F1ZXVlKHdvcmtlciwgMSwgcGF5bG9hZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9jb25zb2xlX2ZuKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGlkZW50aXR5O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIG1lbW9pemVkKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGtleSBpbiBtZW1vKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF90aW1lcyhtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBtYXBwZXIoX3JhbmdlKGNvdW50KSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy50aW1lcyA9IF90aW1lcyhhc3luYy5tYXApO1xuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gX3RpbWVzKGFzeW5jLm1hcFNlcmllcyk7XG4gICAgYXN5bmMudGltZXNMaW1pdCA9IGZ1bmN0aW9uIChjb3VudCwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMubWFwTGltaXQoX3JhbmdlKGNvdW50KSwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBub29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW19yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgbmV4dGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfSldKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoYXQsIFtlcnJdLmNvbmNhdChyZXN1bHRzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5zZXEuYXBwbHkobnVsbCwgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBfYXBwbHlFYWNoKGVhY2hmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbihmbnMsIGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBnbyA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlYWNoZm4oZm5zLCBmdW5jdGlvbiAoZm4sIF8sIGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5hcHBseUVhY2ggPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZik7XG4gICAgYXN5bmMuYXBwbHlFYWNoU2VyaWVzID0gX2FwcGx5RWFjaChhc3luYy5lYWNoT2ZTZXJpZXMpO1xuXG5cbiAgICBhc3luYy5mb3JldmVyID0gZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZG9uZSA9IG9ubHlfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgdmFyIHRhc2sgPSBlbnN1cmVBc3luYyhmbik7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVBc3luYyhmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuXG4gICAgYXN5bmMuY29uc3RhbnQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICB2YXIgYXJncyA9IFtudWxsXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXN5bmMud3JhcFN5bmMgPVxuICAgIGFzeW5jLmFzeW5jaWZ5ID0gZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAoX2lzT2JqZWN0KHJlc3VsdCkgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLm1lc3NhZ2UgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBOb2RlLmpzXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG4gICAgfVxuICAgIC8vIEFNRCAvIFJlcXVpcmVKU1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG5cdCAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXG5cdCAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cblx0ICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSlcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cblx0ICogQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuXHQgKiBVbmljb2RlIHN0cmluZy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gJ3huLS0nICsgZW5jb2RlKHN0cmluZylcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG5cdHB1bnljb2RlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHQndmVyc2lvbic6ICcxLjMuMicsXG5cdFx0LyoqXG5cdFx0ICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHRcdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMpIHtcblx0XHRcdC8vIGluIE5vZGUuanMsIGlvLmpzLCBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IHB1bnljb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5wdW55Y29kZSA9IHB1bnljb2RlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUpIHJldHVybiB0cmlhbmdsZXM7XG5cbiAgICB2YXIgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgc2l6ZTtcblxuICAgIGlmIChoYXNIb2xlcykgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKTtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG4gICAgICAgIG1pblggPSBtYXhYID0gZGF0YVswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xuICAgICAgICAgICAgeSA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIHNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIHNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgICAgICBpLCBqLCBsYXN0O1xuXG4gICAgLy8gY2FsY3VsYXRlIG9yaWdpbmFsIHdpbmRpbmcgb3JkZXIgb2YgYSBwb2x5Z29uIHJpbmdcbiAgICBmb3IgKGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cblxuICAgIC8vIGxpbmsgcG9pbnRzIGludG8gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuICAgIGlmIChjbG9ja3dpc2UgPT09IChzdW0gPiAwKSkge1xuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgc2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChzaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0aWNlIGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZWFyLCB0cmlhbmdsZXMsIGRpbSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDIpO1xuXG4gICAgICAgICAgICAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgd2hpbGUgKHAgIT09IGVhci5wcmV2KSB7XG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG4gICAgdmFyIG1pblRYID0gYS54IDwgYi54ID8gKGEueCA8IGMueCA/IGEueCA6IGMueCkgOiAoYi54IDwgYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoYS55IDwgYy55ID8gYS55IDogYy55KSA6IChiLnkgPCBjLnkgPyBiLnkgOiBjLnkpLFxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1heFRZID0gYS55ID4gYi55ID8gKGEueSA+IGMueSA/IGEueSA6IGMueSkgOiAoYi55ID4gYy55ID8gYi55IDogYy55KTtcblxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgdmFyIG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBzaXplKSxcbiAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgdmFyIHAgPSBlYXIubmV4dFo7XG5cbiAgICB3aGlsZSAocCAmJiBwLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgcCA9IGVhci5wcmV2WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIC8vIGEgc2VsZi1pbnRlcnNlY3Rpb24gd2hlcmUgZWRnZSAodltpLTFdLHZbaV0pIGludGVyc2VjdHMgKHZbaSsxXSx2W2krMl0pXG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcblxuICAgICAgICAgICAgcCA9IHN0YXJ0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBwO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBzdG9wID0gbSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtLm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBtLnggJiZcbiAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoaHkgPCBtLnkgPyBoeCA6IHF4LCBoeSwgbS54LCBtLnksIGh5IDwgbS55ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxU2l6ZSA9PT0gMCB8fCAhcSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwLnogPD0gcS56KSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBzaXplIG9mIHRoZSBkYXRhIGJvdW5kaW5nIGJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlXG4gICAgeCA9IDMyNzY3ICogKHggLSBtaW5YKSAvIHNpemU7XG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAvIHNpemU7XG5cbiAgICB4ID0gKHggfCAoeCA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB4ID0gKHggfCAoeCA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnggPCBsZWZ0bW9zdC54KSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGVxdWFscyhhLCBiKSB8fCBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmXG4gICAgICAgICAgIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYik7XG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgcmV0dXJuIGFyZWEocDEsIHExLCBwMikgPiAwICE9PSBhcmVhKHAxLCBxMSwgcTIpID4gMCAmJlxuICAgICAgICAgICBhcmVhKHAyLCBxMiwgcDEpID4gMCAhPT0gYXJlYShwMiwgcTIsIHExKSA+IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGljZSBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0aWNlIG5vZGVzIGluIGEgcG9seWdvbiByaW5nXG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZVxuICAgIHRoaXMueiA9IG51bGw7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG5cbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuICAgIHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1xuLy8gV2Ugc3RvcmUgb3VyIEVFIG9iamVjdHMgaW4gYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gYH5gIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IG92ZXJyaWRkZW4gb3Jcbi8vIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vIFdlIGFsc28gYXNzdW1lIHRoYXQgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBldmVudCBuYW1lXG4vLyBpcyBhbiBFUzYgU3ltYm9sLlxuLy9cbnZhciBwcmVmaXggPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJyA/ICd+JyA6IGZhbHNlO1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIEV2ZW50RW1pdHRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgQ29udGV4dCBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgZW1pdCBvbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIE1pbmltYWwgRXZlbnRFbWl0dGVyIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkgeyAvKiBOb3RoaW5nIHRvIHNldCAqLyB9XG5cbi8qKlxuICogSG9sZHMgdGhlIGFzc2lnbmVkIEV2ZW50RW1pdHRlcnMgYnkgbmFtZS5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiBhIGxpc3Qgb2YgYXNzaWduZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZXhpc3RzIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7QXJyYXl8Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50LCBleGlzdHMpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGF2YWlsYWJsZSA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoZXhpc3RzKSByZXR1cm4gISFhdmFpbGFibGU7XG4gIGlmICghYXZhaWxhYmxlKSByZXR1cm4gW107XG4gIGlmIChhdmFpbGFibGUuZm4pIHJldHVybiBbYXZhaWxhYmxlLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGF2YWlsYWJsZS5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBhdmFpbGFibGVbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIEVtaXQgYW4gZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSW5kaWNhdGlvbiBpZiB3ZSd2ZSBlbWl0dGVkIGFuIGV2ZW50LlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyBFdmVudExpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdG9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgdGhpcylcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgdGhpcy5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lcjtcbiAgZWxzZSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XS5mbikgdGhpcy5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gICAgZWxzZSB0aGlzLl9ldmVudHNbZXZ0XSA9IFtcbiAgICAgIHRoaXMuX2V2ZW50c1tldnRdLCBsaXN0ZW5lclxuICAgIF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGFuIEV2ZW50TGlzdGVuZXIgdGhhdCdzIG9ubHkgY2FsbGVkIG9uY2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzLCB0cnVlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2Ugd2FudCB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgdGhhdCB3ZSBuZWVkIHRvIGZpbmQuXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IE9ubHkgcmVtb3ZlIGxpc3RlbmVycyBtYXRjaGluZyB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25jZSBsaXN0ZW5lcnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBldmVudHMgPSBbXTtcblxuICBpZiAoZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgIGxpc3RlbmVycy5mbiAhPT0gZm5cbiAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVycy5vbmNlKVxuICAgICAgICB8fCAoY29udGV4dCAmJiBsaXN0ZW5lcnMuY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuXG4gICAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKVxuICAgICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAvL1xuICBpZiAoZXZlbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW2V2dF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgb3Igb25seSB0aGUgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmVycyBmb3IuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKGV2ZW50KSBkZWxldGUgdGhpcy5fZXZlbnRzW3ByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRdO1xuICBlbHNlIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFwcGx5IGFueW1vcmUuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4ndXNlIHN0cmljdCc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiFcbiAqIGFzeW5jXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jXG4gKlxuICogQ29weXJpZ2h0IDIwMTAtMjAxNCBDYW9sYW4gTWNNYWhvblxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbi8qanNoaW50IG9uZXZhcjogZmFsc2UsIGluZGVudDo0ICovXG4vKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cbihmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXN5bmMgPSB7fTtcblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcm9vdCwgcHJldmlvdXNfYXN5bmM7XG5cbiAgICByb290ID0gdGhpcztcbiAgICBpZiAocm9vdCAhPSBudWxsKSB7XG4gICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWQpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkocm9vdCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8gY3Jvc3MtYnJvd3NlciBjb21wYXRpYmxpdHkgZnVuY3Rpb25zIC8vLy9cblxuICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgdmFyIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG5cbiAgICB2YXIgX2VhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBfbWFwID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgaWYgKGFyci5tYXApIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIubWFwKGl0ZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IoeCwgaSwgYSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHZhciBfcmVkdWNlID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIG1lbW8pIHtcbiAgICAgICAgaWYgKGFyci5yZWR1Y2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGl0ZXJhdG9yLCBtZW1vKTtcbiAgICAgICAgfVxuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICBtZW1vID0gaXRlcmF0b3IobWVtbywgeCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuXG4gICAgdmFyIF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgX2VhY2goYXJyLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgb25seV9vbmNlKGRvbmUpICk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2ggPSBhc3luYy5lYWNoO1xuXG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICB2YXIgaXRlcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGFycltjb21wbGV0ZWRdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID0gYXN5bmMuZWFjaFNlcmllcztcblxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZuID0gX2VhY2hMaW1pdChsaW1pdCk7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIFthcnIsIGl0ZXJhdG9yLCBjYWxsYmFja10pO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaExpbWl0ID0gYXN5bmMuZWFjaExpbWl0O1xuXG4gICAgdmFyIF9lYWNoTGltaXQgPSBmdW5jdGlvbiAobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgaWYgKCFhcnIubGVuZ3RoIHx8IGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVwbGVuaXNoICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiBzdGFydGVkIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoYXJyW3N0YXJ0ZWQgLSAxXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB2YXIgZG9QYXJhbGxlbCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvUGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKGxpbWl0LCBmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFtfZWFjaExpbWl0KGxpbWl0KV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBkb1NlcmllcyA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoU2VyaWVzXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBfYXN5bmNNYXAgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1t4LmluZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9tYXBMaW1pdChsaW1pdCkoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB2YXIgX21hcExpbWl0ID0gZnVuY3Rpb24obGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGRvUGFyYWxsZWxMaW1pdChsaW1pdCwgX2FzeW5jTWFwKTtcbiAgICB9O1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihtZW1vLCB4LCBmdW5jdGlvbiAoZXJyLCB2KSB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGluamVjdCBhbGlhc1xuICAgIGFzeW5jLmluamVjdCA9IGFzeW5jLnJlZHVjZTtcbiAgICAvLyBmb2xkbCBhbGlhc1xuICAgIGFzeW5jLmZvbGRsID0gYXN5bmMucmVkdWNlO1xuXG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSkucmV2ZXJzZSgpO1xuICAgICAgICBhc3luYy5yZWR1Y2UocmV2ZXJzZWQsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICAvLyBmb2xkciBhbGlhc1xuICAgIGFzeW5jLmZvbGRyID0gYXN5bmMucmVkdWNlUmlnaHQ7XG5cbiAgICB2YXIgX2ZpbHRlciA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LnZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG4gICAgYXN5bmMuZmlsdGVyU2VyaWVzID0gZG9TZXJpZXMoX2ZpbHRlcik7XG4gICAgLy8gc2VsZWN0IGFsaWFzXG4gICAgYXN5bmMuc2VsZWN0ID0gYXN5bmMuZmlsdGVyO1xuICAgIGFzeW5jLnNlbGVjdFNlcmllcyA9IGFzeW5jLmZpbHRlclNlcmllcztcblxuICAgIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLnJlamVjdCA9IGRvUGFyYWxsZWwoX3JlamVjdCk7XG4gICAgYXN5bmMucmVqZWN0U2VyaWVzID0gZG9TZXJpZXMoX3JlamVjdCk7XG5cbiAgICB2YXIgX2RldGVjdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIG1haW5fY2FsbGJhY2spIHtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKHgpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZGV0ZWN0ID0gZG9QYXJhbGxlbChfZGV0ZWN0KTtcbiAgICBhc3luYy5kZXRlY3RTZXJpZXMgPSBkb1NlcmllcyhfZGV0ZWN0KTtcblxuICAgIGFzeW5jLnNvbWUgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbnkgYWxpYXNcbiAgICBhc3luYy5hbnkgPSBhc3luYy5zb21lO1xuXG4gICAgYXN5bmMuZXZlcnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghdikge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gYWxsIGFsaWFzXG4gICAgYXN5bmMuYWxsID0gYXN5bmMuZXZlcnk7XG5cbiAgICBhc3luYy5zb3J0QnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgYXN5bmMubWFwKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAoZXJyLCBjcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHt2YWx1ZTogeCwgY3JpdGVyaWE6IGNyaXRlcmlhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoZm4pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGhcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldID09PSBmbikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdGFza0NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtYWluaW5nVGFza3MtLVxuICAgICAgICAgICAgX2VhY2gobGlzdGVuZXJzLnNsaWNlKDApLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIHZhciB0aGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZmluYWwgY2FsbGJhY2sgZnJvbSBjYWxsaW5nIGl0c2VsZiBpZiBpdCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdGhlQ2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9lYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKF9rZXlzKHJlc3VsdHMpLCBmdW5jdGlvbihya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIHN1YnNlcXVlbnQgZXJyb3JzIGhpdHRpbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUodGFza0NvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCBNYXRoLmFicyh0YXNrLmxlbmd0aCAtIDEpKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucmV0cnkgPSBmdW5jdGlvbih0aW1lcywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIERFRkFVTFRfVElNRVMgPSA1O1xuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcbiAgICAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHRpbWVzIG5vdCBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICAgICAgdGltZXMgPSBERUZBVUxUX1RJTUVTO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lcyBpcyBhIG51bWJlclxuICAgICAgICB0aW1lcyA9IHBhcnNlSW50KHRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgdmFyIHdyYXBwZWRUYXNrID0gZnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkUmVzdWx0cykge1xuICAgICAgICAgICAgdmFyIHJldHJ5QXR0ZW1wdCA9IGZ1bmN0aW9uKHRhc2ssIGZpbmFsQXR0ZW1wdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKGZ1bmN0aW9uKGVyciwgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKCFlcnIgfHwgZmluYWxBdHRlbXB0LCB7ZXJyOiBlcnIsIHJlc3VsdDogcmVzdWx0fSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXBwZWRSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcykge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KHRhc2ssICEodGltZXMtPTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBjYWxsYmFjaykoZGF0YS5lcnIsIGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrXG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJdGVyYXRvciA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGZ1bmN0aW9uKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGVhY2hmbi5tYXAodGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGVhY2hmbi5lYWNoKF9rZXlzKHRhc2tzKSwgZnVuY3Rpb24gKGssIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGFza3Nba10oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogYXN5bmMubWFwLCBlYWNoOiBhc3luYy5lYWNoIH0sIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogX21hcExpbWl0KGxpbWl0KSwgZWFjaDogX2VhY2hMaW1pdChsaW1pdCkgfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICBhc3luYy5tYXBTZXJpZXModGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5pdGVyYXRvciA9IGZ1bmN0aW9uICh0YXNrcykge1xuICAgICAgICB2YXIgbWFrZUNhbGxiYWNrID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmbi5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCB0YXNrcy5sZW5ndGggLSAxKSA/IG1ha2VDYWxsYmFjayhpbmRleCArIDEpOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KFxuICAgICAgICAgICAgICAgIG51bGwsIGFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgX2NvbmNhdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHIgPSByLmNvbmNhdCh5IHx8IFtdKTtcbiAgICAgICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRlc3QoKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLndoaWxzdCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvV2hpbHN0ID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAodGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMudW50aWwodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAoIXRlc3QuYXBwbHkobnVsbCwgYXJncykpIHtcbiAgICAgICAgICAgICAgICBhc3luYy5kb1VudGlsKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcG9zLCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxLnNhdHVyYXRlZCAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHEuZHJhaW4gPSBudWxsO1xuICAgICAgICAgICAgICBxLnRhc2tzID0gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gcS50YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocS5lbXB0eSAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLmRyYWluICYmIHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UobmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcih0YXNrLmRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSB0cnVlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSBxLmNvbmN1cnJlbmN5OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMucHJpb3JpdHlRdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG5cbiAgICAgICAgZnVuY3Rpb24gX2NvbXBhcmVUYXNrcyhhLCBiKXtcbiAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgIHZhciBiZWcgPSAtMSxcbiAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBzZXF1ZW5jZVttaWRdKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGJlZyA9IG1pZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiZWc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG5vcm1hbCBxdWV1ZVxuICAgICAgICB2YXIgcSA9IGFzeW5jLnF1ZXVlKHdvcmtlciwgY29uY3VycmVuY3kpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciB3b3JraW5nICAgICA9IGZhbHNlLFxuICAgICAgICAgICAgdGFza3MgICAgICAgPSBbXTtcblxuICAgICAgICB2YXIgY2FyZ28gPSB7XG4gICAgICAgICAgICB0YXNrczogdGFza3MsXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBudWxsLFxuICAgICAgICAgICAgZW1wdHk6IG51bGwsXG4gICAgICAgICAgICBkcmFpbjogbnVsbCxcbiAgICAgICAgICAgIGRyYWluZWQ6IHRydWUsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZ28uc2F0dXJhdGVkICYmIHRhc2tzLmxlbmd0aCA9PT0gcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ28uc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoY2FyZ28ucHJvY2Vzcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcygpIHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2luZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2FyZ28uZHJhaW4gJiYgIWNhcmdvLmRyYWluZWQpIGNhcmdvLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvLmRyYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRzID0gdHlwZW9mIHBheWxvYWQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0YXNrcy5zcGxpY2UoMCwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tzLnNwbGljZSgwLCB0YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRzID0gX21hcCh0cywgZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmKGNhcmdvLmVtcHR5KSBjYXJnby5lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHdvcmtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtlcihkcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JraW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKHRzLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjYXJnbztcbiAgICB9O1xuXG4gICAgdmFyIF9jb25zb2xlX2ZuID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZWFjaChhcmdzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbmFtZV0oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIG1lbW9ba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICBxW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfTtcblxuICAgIGFzeW5jLnVubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb3VudGVyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jLm1hcFNlcmllcyhjb3VudGVyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXEgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXN5bmMucmVkdWNlKGZucywgYXJncywgZnVuY3Rpb24gKG5ld2FyZ3MsIGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KFtmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1dKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy5jb21wb3NlID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICB2YXIgX2FwcGx5RWFjaCA9IGZ1bmN0aW9uIChlYWNoZm4sIGZucyAvKmFyZ3MuLi4qLykge1xuICAgICAgICB2YXIgZ28gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzLmNvbmNhdChbY2JdKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgICAgIHJldHVybiBnby5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuYXBwbHlFYWNoID0gZG9QYXJhbGxlbChfYXBwbHlFYWNoKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBkb1NlcmllcyhfYXBwbHlFYWNoKTtcblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbihuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsInZhciBhc3luYyAgICAgICA9IHJlcXVpcmUoJ2FzeW5jJyksXG4gICAgdXJsUGFyc2VyICAgPSByZXF1aXJlKCd1cmwnKSxcbiAgICBSZXNvdXJjZSAgICA9IHJlcXVpcmUoJy4vUmVzb3VyY2UnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgbXVsdGlwbGUgcmVzb3VyY2VzIHRvIGxvYWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KSB7XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICBjb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByb2dyZXNzIHBlcmNlbnQgb2YgdGhlIGxvYWRlciBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRpbmcgc3RhdGUgb2YgdGhlIGxvYWRlciwgdHJ1ZSBpZiBpdCBpcyBjdXJyZW50bHkgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdG90YWwgcHJvZ3Jlc3MgdGhhdCBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGJlZm9yZSBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaWRkbGV3YXJlIHRvIHJ1biBhZnRlciBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfbG9hZFJlc291cmNlYCBmdW5jdGlvbiBib3VuZCB3aXRoIHRoaXMgb2JqZWN0IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kTG9hZFJlc291cmNlID0gdGhpcy5fbG9hZFJlc291cmNlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkxvYWRgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkxvYWQgPSB0aGlzLl9vbkxvYWQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvdXJjZSBidWZmZXIgdGhhdCBmaWxscyB1bnRpbCBgbG9hZGAgaXMgY2FsbGVkIHRvIHN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB0cmFjayBsb2FkIGNvbXBsZXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9udW1Ub0xvYWQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlcyB3YWl0aW5nIHRvIGJlIGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2VbXX1cbiAgICAgKi9cbiAgICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX2JvdW5kTG9hZFJlc291cmNlLCBjb25jdXJyZW5jeSk7XG5cbiAgICAvKipcbiAgICAgKiBBbGwgdGhlIHJlc291cmNlcyBmb3IgdGhpcyBsb2FkZXIga2V5ZWQgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIFJlc291cmNlPn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgb3IgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwcm9ncmVzc1xuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGVycm9yZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGxvYWRlciBiZWdpbnMgdG8gcHJvY2VzcyB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBxdWV1ZWQgcmVzb3VyY2VzIGFsbCBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbi8qKlxuICogQWRkcyBhIHJlc291cmNlIChvciBtdWx0aXBsZSByZXNvdXJjZXMpIHRvIHRoZSBsb2FkZXIgcXVldWUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gdGFrZSBhIHdpZGUgdmFyaWV0eSBvZiBkaWZmZXJlbnQgcGFyYW1ldGVycy4gVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBhbHdheXNcbiAqIHJlcXVpcmVkIHRoZSB1cmwgdG8gbG9hZC4gQWxsIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOlxuICpcbiAqIGBgYGpzXG4gKiBsb2FkZXJcbiAqICAgICAvLyBub3JtYWwgcGFyYW0gc3ludGF4XG4gKiAgICAgLmFkZCgna2V5JywgJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJywgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCgnaHR0cDovLy4uLicpXG4gKlxuICogICAgIC8vIG9iamVjdCBzeW50YXhcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgbmFtZTogJ2tleTInLFxuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MycsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9XG4gKiAgICAgfSlcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgdXJsOiAnaHR0cHM6Ly8uLi4nLFxuICogICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7fSxcbiAqICAgICAgICAgY3Jvc3NPcmlnaW46IHRydWVcbiAqICAgICB9KVxuICpcbiAqICAgICAvLyB5b3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBvYmplY3RzIG9yIHVybHMgb3IgYm90aFxuICogICAgIC5hZGQoW1xuICogICAgICAgICB7IG5hbWU6ICdrZXk0JywgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgIHsgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgICdodHRwOi8vLi4uJ1xuICogICAgIF0pO1xuICogYGBgXG4gKlxuICogQGFsaWFzIGVucXVldWVcbiAqIEBwYXJhbSBbbmFtZV0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQsIGlmIG5vdCBwYXNzZWQgdGhlIHVybCBpcyB1c2VkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCByZWxhdGl2ZSB0byB0aGUgYmFzZVVybCBvZiB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7Ym9vbGVhbn0gSXMgdGhpcyByZXF1ZXN0IGNyb3NzLW9yaWdpbj8gRGVmYXVsdCBpcyB0byBkZXRlcm1pbmUgYXV0b21hdGljYWxseS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5sb2FkVHlwZT1SZXNvdXJjZS5MT0FEX1RZUEUuWEhSXSB7UmVzb3VyY2UuWEhSX0xPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGlzIHNwZWNpZmljIHJlc291cmNlIGNvbXBsZXRlcyBsb2FkaW5nLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFkZCA9IExvYWRlci5wcm90b3R5cGUuZW5xdWV1ZSA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIGNiKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIG9mIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hZGQobmFtZVtpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBpZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluc3RlYWQgb2YgcGFyYW1zXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYiA9IHVybCB8fCBuYW1lLmNhbGxiYWNrIHx8IG5hbWUub25Db21wbGV0ZTtcbiAgICAgICAgb3B0aW9ucyA9IG5hbWU7XG4gICAgICAgIHVybCA9IG5hbWUudXJsO1xuICAgICAgICBuYW1lID0gbmFtZS5uYW1lIHx8IG5hbWUua2V5IHx8IG5hbWUudXJsO1xuICAgIH1cblxuICAgIC8vIGNhc2Ugd2hlcmUgbm8gbmFtZSBpcyBwYXNzZWQgc2hpZnQgYWxsIGFyZ3Mgb3ZlciBieSBvbmUuXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHVybDtcbiAgICAgICAgdXJsID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBzaGlmdGVkIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIHVybC5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB1cmwgcGFzc2VkIHRvIGFkZCByZXNvdXJjZSB0byBsb2FkZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gb3B0aW9ucyBhcmUgb3B0aW9uYWwgc28gcGVvcGxlIG1pZ2h0IHBhc3MgYSBmdW5jdGlvbiBhbmQgbm8gb3B0aW9uc1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHJlc291cmNlIGFscmVhZHkgZXhpc3RzLlxuICAgIGlmICh0aGlzLnJlc291cmNlc1tuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc291cmNlIHdpdGggbmFtZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgIH1cblxuICAgIC8vIGFkZCBiYXNlIHVybCBpZiB0aGlzIGlzbid0IGFuIGFic29sdXRlIHVybFxuICAgIHVybCA9IHRoaXMuX2hhbmRsZUJhc2VVcmwodXJsKTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgc3RvcmUgdGhlIHJlc291cmNlXG4gICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0gPSBuZXcgUmVzb3VyY2UobmFtZSwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0ub25jZSgnYWZ0ZXJNaWRkbGV3YXJlJywgY2IpO1xuICAgIH1cblxuICAgIHRoaXMuX251bVRvTG9hZCsrO1xuXG4gICAgLy8gaWYgYWxyZWFkeSBsb2FkaW5nIGFkZCBpdCB0byB0aGUgd29ya2VyIHF1ZXVlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAoMTAwIC0gdGhpcy5wcm9ncmVzcykgLyAodGhpcy5fcXVldWUubGVuZ3RoKCkgKyB0aGlzLl9xdWV1ZS5ydW5uaW5nKCkpO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgYnVmZmVyIGl0IHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSBsYXRlclxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9idWZmZXIucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAxMDAgLyB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuTG9hZGVyLnByb3RvdHlwZS5faGFuZGxlQmFzZVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFyc2VkVXJsID0gdXJsUGFyc2VyLnBhcnNlKHVybCk7XG5cbiAgICAvLyBhYnNvbHV0ZSB1cmwsIGp1c3QgdXNlIGl0IGFzIGlzLlxuICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgfHwgcGFyc2VkVXJsLnBhdGhuYW1lLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBpZiBiYXNlVXJsIGRvZXNuJ3QgZW5kIGluIHNsYXNoIGFuZCB1cmwgZG9lc24ndCBzdGFydCB3aXRoIHNsYXNoLCB0aGVuIGFkZCBhIHNsYXNoIGluYmV0d2VlblxuICAgIGlmIChcbiAgICAgICAgdGhpcy5iYXNlVXJsLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmJhc2VVcmwubGFzdEluZGV4T2YoJy8nKSAhPT0gdGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgdXJsLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyAnLycgKyB1cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsICsgdXJsO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBTZXRzIHVwIGEgbWlkZGxld2FyZSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuICpiZWZvcmUqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyBwcmVcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYmVmb3JlID0gTG9hZGVyLnByb3RvdHlwZS5wcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLnB1c2goZm4pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmFmdGVyKiB0aGVcbiAqIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqXG4gKiBAYWxpYXMgdXNlXG4gKiBAcGFyYW0gbWlkZGxld2FyZSB7ZnVuY3Rpb259IFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFmdGVyID0gTG9hZGVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9hZnRlck1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoZSBxdWV1ZSBvZiB0aGUgbG9hZGVyIHRvIHByZXBhcmUgZm9yIGEgbmV3IGxvYWQuXG4gKlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvLyB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG4gICAgLy8gdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gICAgdGhpcy5fcXVldWUuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGxvYWRpbmcgdGhlIHF1ZXVlZCByZXNvdXJjZXMuXG4gKlxuICogQGZpcmVzIHN0YXJ0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgYGNvbXBsZXRlYCBldmVudC5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgLy8gcmVnaXN0ZXIgY29tcGxldGUgY2FsbGJhY2sgaWYgdGhleSBwYXNzIG9uZVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcXVldWUgaGFzIGFscmVhZHkgc3RhcnRlZCB3ZSBhcmUgZG9uZSBoZXJlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm90aWZ5IG9mIHN0YXJ0XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gc3RhcnQgdGhlIGludGVybmFsIHF1ZXVlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLl9idWZmZXJbaV0pO1xuICAgIH1cblxuICAgIC8vIGVtcHR5IHRoZSBidWZmZXJcbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBMb2FkcyBhIHNpbmdsZSByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX2xvYWRSZXNvdXJjZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZGVxdWV1ZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHJlc291cmNlLl9kZXF1ZXVlID0gZGVxdWV1ZTtcblxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gcmVzb3VyY2Uub24oJ3Byb2dyZXNzJywgc2VsZi5lbWl0LmJpbmQoc2VsZiwgJ3Byb2dyZXNzJykpO1xuXG4gICAgICAgIHJlc291cmNlLmxvYWQoc2VsZi5fYm91bmRPbkxvYWQpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgb25jZSBlYWNoIHJlc291cmNlIGhhcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzLCB0aGlzLnJlc291cmNlcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBlYWNoIHRpbWUgYSByZXNvdXJjZXMgaXMgbG9hZGVkLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQGZpcmVzIGVycm9yXG4gKiBAZmlyZXMgbG9hZFxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgdGhpcy5wcm9ncmVzcyArPSB0aGlzLl9wcm9ncmVzc0NodW5rO1xuXG4gICAgdGhpcy5lbWl0KCdwcm9ncmVzcycsIHRoaXMsIHJlc291cmNlKTtcblxuICAgIC8vIHJ1biBtaWRkbGV3YXJlLCB0aGlzICptdXN0KiBoYXBwZW4gYmVmb3JlIGRlcXVldWUgc28gc3ViLWFzc2V0cyBnZXQgYWRkZWQgcHJvcGVybHlcbiAgICB0aGlzLl9ydW5NaWRkbGV3YXJlKHJlc291cmNlLCB0aGlzLl9hZnRlck1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzb3VyY2UuZW1pdCgnYWZ0ZXJNaWRkbGV3YXJlJywgcmVzb3VyY2UpO1xuXG4gICAgICAgIHRoaXMuX251bVRvTG9hZC0tO1xuXG4gICAgICAgIC8vIGRvIGNvbXBsZXRpb24gY2hlY2tcbiAgICAgICAgaWYgKHRoaXMuX251bVRvTG9hZCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgIHRoaXMuX29uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc291cmNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgcmVzb3VyY2UuZXJyb3IsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZCcsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuXG5cbiAgICAvLyByZW1vdmUgdGhpcyByZXNvdXJjZSBmcm9tIHRoZSBhc3luYyBxdWV1ZVxuICAgIHJlc291cmNlLl9kZXF1ZXVlKCk7XG59O1xuXG4vKipcbiAqIFJ1biBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvbiBhIHJlc291cmNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX3J1bk1pZGRsZXdhcmUgPSBmdW5jdGlvbiAocmVzb3VyY2UsIGZucywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzKGZucywgZnVuY3Rpb24gKGZuLCBuZXh0KSB7XG4gICAgICAgIGZuLmNhbGwoc2VsZiwgcmVzb3VyY2UsIG5leHQpO1xuICAgIH0sIGNiLmJpbmQodGhpcywgcmVzb3VyY2UpKTtcbn07XG5cbkxvYWRlci5MT0FEX1RZUEUgPSBSZXNvdXJjZS5MT0FEX1RZUEU7XG5Mb2FkZXIuWEhSX1JFQURZX1NUQVRFID0gUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFO1xuTG9hZGVyLlhIUl9SRVNQT05TRV9UWVBFID0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEU7XG4iLCJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIF91cmwgPSByZXF1aXJlKCd1cmwnKSxcbiAgICAvLyB0ZXN0cyBpcyBDT1JTIGlzIHN1cHBvcnRlZCBpbiBYSFIsIGlmIG5vdCB3ZSBuZWVkIHRvIHVzZSBYRFJcbiAgICB1c2VYZHIgPSAhISh3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiAobmV3IFhNTEh0dHBSZXF1ZXN0KCkpKSksXG4gICAgdGVtcEFuY2hvciA9IG51bGw7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgYSBzaW5nbGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnlcbiAqIGEgc2luZ2xlIFVSTC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBuYW1lIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCBmb3IgYXVkaW8vdmlkZW8gbG9hZHMgeW91IGNhbiBwYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMuXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5jcm9zc09yaWdpbl0ge3N0cmluZ3xib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5MT0FEX1RZUEV9IEhvdyBzaG91bGQgdGhpcyByZXNvdXJjZSBiZSBsb2FkZWQ/XG4gKiBAcGFyYW0gW29wdGlvbnMueGhyVHlwZT1SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ERUZBVUxUXSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IEhvdyBzaG91bGQgdGhlIGRhdGEgYmVpbmdcbiAqICAgICAgbG9hZGVkIGJlIGludGVycHJldGVkIHdoZW4gdXNpbmcgWEhSP1xuICogQHBhcmFtIFtvcHRpb25zLm1ldGFkYXRhXSB7b2JqZWN0fSBFeHRyYSBpbmZvIGZvciBtaWRkbGV3YXJlLlxuICovXG5mdW5jdGlvbiBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggbmFtZSBhbmQgdXJsIGFyZSByZXF1aXJlZCBmb3IgY29uc3RydWN0aW5nIGEgcmVzb3VyY2UuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVybCB1c2VkIHRvIGxvYWQgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHVybCBpcyBhIGRhdGEgdXJsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzRGF0YVVybCA9IHRoaXMudXJsLmluZGV4T2YoJ2RhdGE6JykgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSB0aGF0IHdhcyBsb2FkZWQgYnkgdGhlIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55fVxuICAgICAqL1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBvcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJ2Fub255bW91cycgOiBvcHRpb25zLmNyb3NzT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCBvZiBsb2FkaW5nIHRvIHVzZSBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlLkxPQURfVFlQRX1cbiAgICAgKi9cbiAgICB0aGlzLmxvYWRUeXBlID0gb3B0aW9ucy5sb2FkVHlwZSB8fCB0aGlzLl9kZXRlcm1pbmVMb2FkVHlwZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgdXNlZCB0byBsb2FkIHRoZSByZXNvdXJjZSB2aWEgWEhSLiBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMueGhyVHlwZSA9IG9wdGlvbnMueGhyVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgKGlmIGFueSkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFcnJvcn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBYSFIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLiBUaGlzIGlzIG9ubHkgc2V0XG4gICAgICogd2hlbiBgbG9hZFR5cGVgIGlzIGBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1hNTEh0dHBSZXF1ZXN0fVxuICAgICAqL1xuICAgIHRoaXMueGhyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMganNvbi4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNKc29uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIHhtbC4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNYbWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gaW1hZ2UgdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0ltYWdlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGFuIGF1ZGlvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNBdWRpbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhIHZpZGVvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNWaWRlbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBkZXF1ZXVlYCBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgYSBzdG9yYWdlIHBsYWNlIGZvciB0aGUgYXN5bmMgcXVldWUgZGVxdWV1ZSBtZXRob2RcbiAgICAgKiB1c2VkIHByaXZhdGVseSBieSB0aGUgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kZXF1ZXVlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tcGxldGVgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZENvbXBsZXRlID0gdGhpcy5jb21wbGV0ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25FcnJvcmAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25FcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uUHJvZ3Jlc3NgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MgPSB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyk7XG5cbiAgICAvLyB4aHIgY2FsbGJhY2tzXG4gICAgdGhpcy5fYm91bmRYaHJPbkVycm9yID0gdGhpcy5feGhyT25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25BYm9ydCA9IHRoaXMuX3hock9uQWJvcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9ib3VuZFhock9uTG9hZCA9IHRoaXMuX3hock9uTG9hZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0ID0gdGhpcy5feGRyT25UaW1lb3V0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJlc291cmNlIGJlaW5ncyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBlYWNoIHRpbWUgcHJvZ3Jlc3Mgb2YgdGhpcyByZXNvdXJjZSBsb2FkIHVwZGF0ZXMuXG4gICAgICogTm90IGFsbCByZXNvdXJjZXMgdHlwZXMgYW5kIGxvYWRlciBzeXN0ZW1zIGNhbiBzdXBwb3J0IHRoaXMgZXZlbnRcbiAgICAgKiBzbyBzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIElmIHRoZSByZXNvdXJjZVxuICAgICAqIGlzIGJlaW5nIGxvYWRlZCBvbiBhIG1vZGVybiBicm93c2VyLCB1c2luZyBYSFIsIGFuZCB0aGUgcmVtb3RlIHNlcnZlclxuICAgICAqIHByb3Blcmx5IHNldHMgQ29udGVudC1MZW5ndGggaGVhZGVycywgdGhlbiB0aGlzIHdpbGwgYmUgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHRoaXMgcmVzb3VyY2UgaGFzIGxvYWRlZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGl0IHdpbGxcbiAgICAgKiBiZSBpbiB0aGUgYGVycm9yYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb21wbGV0ZVxuICAgICAqIEBtZW1iZXJvZiBSZXNvdXJjZSNcbiAgICAgKi9cbn1cblxuUmVzb3VyY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblJlc291cmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlc291cmNlO1xubW9kdWxlLmV4cG9ydHMgPSBSZXNvdXJjZTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgcmVzb3VyY2UgYXMgY29tcGxldGUuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIGluIGEgd3JhcHBlciBvciBzb21ldGhpbmcuLi5ncm9zcy4uLi5cbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvcik7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgICBpZiAodGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGhyLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub250aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMueGhyLm9ucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25sb2FkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogS2lja3Mgb2ZmIGxvYWRpbmcgb2YgdGhpcyByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gaWYgYSBjYWxsYmFjayBpcyBzZXQsIGxpc3RlbiBmb3IgY29tcGxldGUgZXZlbnRcbiAgICBpZiAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luID09PSBmYWxzZSB8fCB0eXBlb2YgdGhpcy5jcm9zc09yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHRoaXMuX2RldGVybWluZUNyb3NzT3JpZ2luKHRoaXMudXJsKTtcbiAgICB9XG5cbiAgICBzd2l0Y2godGhpcy5sb2FkVHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRTpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRJbWFnZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuQVVESU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlZJREVPOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5YSFI6XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodXNlWGRyICYmIHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGRyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGhyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEltYWdlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLnNyYyA9IHRoaXMudXJsO1xuXG4gICAgdGhpcy5pc0ltYWdlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBIVE1MQXVkaW9FbGVtZW50IG9yIEhUTUxWaWRlb0VsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdhdWRpbycgJiYgdHlwZW9mIEF1ZGlvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQXVkaW8oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBlbGVtZW50ICcgKyB0eXBlKTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBmb3IgQ29jb29uSlMgQ2FudmFzKyBydW50aW1lLCBsYWNrcyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKVxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUykge1xuICAgICAgICB0aGlzLmRhdGEuc3JjID0gQXJyYXkuaXNBcnJheSh0aGlzLnVybCkgPyB0aGlzLnVybFswXSA6IHRoaXMudXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51cmwpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXJsLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybFtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1snaXMnICsgdHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSldID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUsIGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YS5sb2FkKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhNTEh0dHBSZXF1ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBzZXQgdGhlIHJlcXVlc3QgdHlwZSBhbmQgdXJsXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsLCB0cnVlKTtcblxuICAgIC8vIGxvYWQganNvbiBhcyB0ZXh0IGFuZCBwYXJzZSBpdCBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgLy8gKmNvdWdoKiBzYWZhcmkgKmNvdWdoKiBjYW4ndCBkZWFsIHdpdGggaXQuXG4gICAgaWYgKHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTiB8fCB0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHRoaXMueGhyVHlwZTtcbiAgICB9XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkLCBmYWxzZSk7XG5cbiAgICB4aHIuc2VuZCgpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBYRG9tYWluUmVxdWVzdC4gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdXBwb3J0IElFOSAoZ3Jvc3MpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhkciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhkciA9IHRoaXMueGhyID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7XG5cbiAgICAvLyBYRG9tYWluUmVxdWVzdCBoYXMgYSBmZXcgcXVpcmtzLiBPY2Nhc2lvbmFsbHkgaXQgd2lsbCBhYm9ydCByZXF1ZXN0c1xuICAgIC8vIEEgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbWFrZSBzdXJlIEFMTCBjYWxsYmFja3MgYXJlIHNldCBldmVuIGlmIG5vdCB1c2VkXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU3ODY5NjYveGRvbWFpbnJlcXVlc3QtYWJvcnRzLXBvc3Qtb24taWUtOVxuICAgIHhkci50aW1lb3V0ID0gNTAwMDtcblxuICAgIHhkci5vbmVycm9yID0gdGhpcy5fYm91bmRYaHJPbkVycm9yO1xuICAgIHhkci5vbnRpbWVvdXQgPSB0aGlzLl9ib3VuZFhkck9uVGltZW91dDtcbiAgICB4ZHIub25wcm9ncmVzcyA9IHRoaXMuX2JvdW5kT25Qcm9ncmVzcztcbiAgICB4ZHIub25sb2FkID0gdGhpcy5fYm91bmRYaHJPbkxvYWQ7XG5cbiAgICB4ZHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gIE5vdGU6IFRoZSB4ZHIuc2VuZCgpIGNhbGwgaXMgd3JhcHBlZCBpbiBhIHRpbWVvdXQgdG8gcHJldmVudCBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmZhY2Ugd2hlcmUgc29tZSByZXF1ZXN0cyBhcmUgbG9zdFxuICAgIC8vICBpZiBtdWx0aXBsZSBYRG9tYWluUmVxdWVzdHMgYXJlIGJlaW5nIHNlbnQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAvLyBTb21lIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9pc3N1ZXMvMTI0OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB4ZHIuc2VuZCgpO1xuICAgIH0sIDApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc291cmNlIHVzZWQgaW4gbG9hZGluZyB2aWEgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSBUaGUgZWxlbWVudCB0eXBlICh2aWRlbyBvciBhdWRpbykuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSBzb3VyY2UgVVJMIHRvIGxvYWQgZnJvbS5cbiAqIEBwYXJhbSBbbWltZV0ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSBvZiB0aGUgdmlkZW9cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fY3JlYXRlU291cmNlID0gZnVuY3Rpb24gKHR5cGUsIHVybCwgbWltZSkge1xuICAgIGlmICghbWltZSkge1xuICAgICAgICBtaW1lID0gdHlwZSArICcvJyArIHVybC5zdWJzdHIodXJsLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gdXJsO1xuICAgIHNvdXJjZS50eXBlID0gbWltZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgZXJyb3JzIG91dC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgZXJyb3IgZXZlbnQgZnJvbSB0aGUgZWxlbWVudCB0aGF0IGVtaXRzIGl0LlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgZWxlbWVudCB1c2luZyAnICsgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgcHJvZ3Jlc3MgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fb25Qcm9ncmVzcyA9ICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGVycm9yIGV2ZW50IGZpcmVzIGZvciB4aHIveGRyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RFcnJvckV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIHJlcVR5cGUodGhpcy54aHIpICsgJyBSZXF1ZXN0IGZhaWxlZC4gJyArXG4gICAgICAgICdTdGF0dXM6ICcgKyB0aGlzLnhoci5zdGF0dXMgKyAnLCB0ZXh0OiBcIicgKyB0aGlzLnhoci5zdGF0dXNUZXh0ICsgJ1wiJ1xuICAgICk7XG5cbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhbiBhYm9ydCBldmVudCBmaXJlcyBmb3IgeGhyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RBYm9ydEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3Qgd2FzIGFib3J0ZWQgYnkgdGhlIHVzZXIuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYSB0aW1lb3V0IGV2ZW50IGZpcmVzIGZvciB4ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGRyT25UaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgdGltZWQgb3V0LicpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gZGF0YSBzdWNjZXNzZnVsbHkgbG9hZHMgZnJvbSBhbiB4aHIveGRyIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdExvYWRFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGhyT25Mb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB4aHIgPSB0aGlzLnhocixcbiAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1cyAhPT0gdW5kZWZpbmVkID8geGhyLnN0YXR1cyA6IDIwMDsgLy9YRFIgaGFzIG5vIGAuc3RhdHVzYCwgYXNzdW1lIDIwMC5cblxuICAgIC8vIHN0YXR1cyBjYW4gYmUgMCB3aGVuIHVzaW5nIHRoZSBmaWxlOi8vIHByb3RvY29sLCBhbHNvIGNoZWNrIGlmIGEgcmVzcG9uc2Ugd2FzIGZvdW5kXG4gICAgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA0IHx8IChzdGF0dXMgPT09IDAgJiYgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkge1xuICAgICAgICAvLyBpZiB0ZXh0LCBqdXN0IHJldHVybiBpdFxuICAgICAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGpzb24sIHBhcnNlIGludG8ganNvbiBvYmplY3RcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0pzb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGxvYWRlZCBqc29uOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHhtbCwgcGFyc2UgaW50byBhbiB4bWwgZG9jdW1lbnQgb3IgZGl2IGVsZW1lbnRcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LkRPTVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhoci5yZXNwb25zZVRleHQsICd0ZXh0L3htbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZGl2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzWG1sID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIHhtbDonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlciB0eXBlcyBqdXN0IHJldHVybiB0aGUgcmVzcG9uc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2UgfHwgeGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignWycgKyB4aHIuc3RhdHVzICsgJ10nICsgeGhyLnN0YXR1c1RleHQgKyAnOicgKyB4aHIucmVzcG9uc2VVUkwpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbmZ1bmN0aW9uIHJlcVR5cGUoeGhyKSB7XG4gICAgcmV0dXJuIHhoci50b1N0cmluZygpLnJlcGxhY2UoJ29iamVjdCAnLCAnJyk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYGNyb3NzT3JpZ2luYCBwcm9wZXJ0eSBmb3IgdGhpcyByZXNvdXJjZSBiYXNlZCBvbiBpZiB0aGUgdXJsXG4gKiBmb3IgdGhpcyByZXNvdXJjZSBpcyBjcm9zcy1vcmlnaW4uIElmIGNyb3NzT3JpZ2luIHdhcyBtYW51YWxseSBzZXQsIHRoaXNcbiAqIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIHRvIHRlc3QuXG4gKiBAcGFyYW0gW2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbl0ge29iamVjdH0gVGhlIGxvY2F0aW9uIG9iamVjdCB0byB0ZXN0IGFnYWluc3QuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjcm9zc09yaWdpbiB2YWx1ZSB0byB1c2UgKG9yIGVtcHR5IHN0cmluZyBmb3Igbm9uZSkuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbiAodXJsLCBsb2MpIHtcbiAgICAvLyBkYXRhOiBhbmQgamF2YXNjcmlwdDogdXJscyBhcmUgY29uc2lkZXJlZCBzYW1lLW9yaWdpblxuICAgIGlmICh1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBpcyB3aW5kb3cubG9jYXRpb25cbiAgICBsb2MgPSBsb2MgfHwgd2luZG93LmxvY2F0aW9uO1xuXG4gICAgaWYgKCF0ZW1wQW5jaG9yKSB7XG4gICAgICAgIHRlbXBBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgfVxuXG4gICAgLy8gbGV0IHRoZSBicm93c2VyIGRldGVybWluZSB0aGUgZnVsbCBocmVmIGZvciB0aGUgdXJsIG9mIHRoaXMgcmVzb3VyY2UgYW5kIHRoZW5cbiAgICAvLyBwYXJzZSB3aXRoIHRoZSBub2RlIHVybCBsaWIsIHdlIGNhbid0IHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgICAvLyBiZWNhdXNlIHRoZXkgZG9uJ3Qgd29yayBpbiBJRTkgOihcbiAgICB0ZW1wQW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgdXJsID0gX3VybC5wYXJzZSh0ZW1wQW5jaG9yLmhyZWYpO1xuXG4gICAgdmFyIHNhbWVQb3J0ID0gKCF1cmwucG9ydCAmJiBsb2MucG9ydCA9PT0gJycpIHx8ICh1cmwucG9ydCA9PT0gbG9jLnBvcnQpO1xuXG4gICAgLy8gaWYgY3Jvc3Mgb3JpZ2luXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gbG9jLmhvc3RuYW1lIHx8ICFzYW1lUG9ydCB8fCB1cmwucHJvdG9jb2wgIT09IGxvYy5wcm90b2NvbCkge1xuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZXNwb25zZVR5cGUgb2YgYW4gWEhSIHJlcXVlc3QgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGVcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSByZXNwb25zZVR5cGUgdG8gdXNlLlxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZVhoclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlc291cmNlLl94aHJUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVMb2FkVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX2xvYWRUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXMudXJsLFxuICAgICAgICBleHQ7XG5cbiAgICBpZiAodGhpcy5pc0RhdGFVcmwpIHtcbiAgICAgICAgdmFyIHNsYXNoSW5kZXggPSB1cmwuaW5kZXhPZignLycpO1xuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHNsYXNoSW5kZXggKyAxLCB1cmwuaW5kZXhPZignOycsIHNsYXNoSW5kZXgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBxdWVyeVN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXh0ID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQ7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG1pbWUgdHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgcmVzcG9uc2VUeXBlIG9mXG4gKiByZXNvdXJjZSBiZWluZyBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZ2V0TWltZUZyb21YaHJUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5JztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0I6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2Jsb2InO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQ6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCc7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQ6XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVDpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG5cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsb2FkaW5nIGEgcmVzb3VyY2UgY2FuIHVzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBMT0FEX1RZUEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuWEhSIC0gVXNlcyBYTUxIdHRwUmVxdWVzdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuSU1BR0UgLSBVc2VzIGFuIGBJbWFnZWAgb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5BVURJTyAtIFVzZXMgYW4gYEF1ZGlvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLlZJREVPIC0gVXNlcyBhIGBWaWRlb2Agb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICovXG5SZXNvdXJjZS5MT0FEX1RZUEUgPSB7XG4gICAgWEhSOiAgICAxLFxuICAgIElNQUdFOiAgMixcbiAgICBBVURJTzogIDMsXG4gICAgVklERU86ICA0XG59O1xuXG4vKipcbiAqIFRoZSBYSFIgcmVhZHkgc3RhdGVzLCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gWEhSX1JFQURZX1NUQVRFXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLlVOU0VOVCAtIG9wZW4oKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5PUEVORUQgLSBzZW5kKCloYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuSEVBREVSU19SRUNFSVZFRCAtIHNlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuTE9BRElORyAtIERvd25sb2FkaW5nOyByZXNwb25zZVRleHQgaG9sZHMgcGFydGlhbCBkYXRhLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5ET05FIC0gVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFID0ge1xuICAgIFVOU0VOVDogMCxcbiAgICBPUEVORUQ6IDEsXG4gICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICBMT0FESU5HOiAzLFxuICAgIERPTkU6IDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVTUE9OU0VfVFlQRVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQgLSBkZWZhdWx0cyB0byB0ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSIC0gQXJyYXlCdWZmZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CTE9CIC0gQmxvYlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UIC0gRG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5KU09OIC0gT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCAtIFN0cmluZ1xuICovXG5SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRSA9IHtcbiAgICBERUZBVUxUOiAgICAndGV4dCcsXG4gICAgQlVGRkVSOiAgICAgJ2FycmF5YnVmZmVyJyxcbiAgICBCTE9COiAgICAgICAnYmxvYicsXG4gICAgRE9DVU1FTlQ6ICAgJ2RvY3VtZW50JyxcbiAgICBKU09OOiAgICAgICAnanNvbicsXG4gICAgVEVYVDogICAgICAgJ3RleHQnXG59O1xuXG5SZXNvdXJjZS5fbG9hZFR5cGVNYXAgPSB7XG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnYm1wJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGdhJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0Vcbn07XG5cblJlc291cmNlLl94aHJUeXBlTWFwID0ge1xuICAgIC8vIHhtbFxuICAgICd4aHRtbCc6ICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG1sJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG0nOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd4bWwnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0bXgnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0c3gnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdzdmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuXG4gICAgLy8gaW1hZ2VzXG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAncG5nJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBlZyc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnd2VicCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG5cbiAgICAvLyBqc29uXG4gICAgJ2pzb24nOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTixcblxuICAgIC8vIHRleHRcbiAgICAndGV4dCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhULFxuICAgICd0eHQnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFRcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSBsb2FkVHlwZSB7UmVzb3VyY2UuTE9BRF9UWVBFfSBUaGUgbG9hZCB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uTG9hZFR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgbG9hZFR5cGUpIHtcbiAgICBzZXRFeHRNYXAoUmVzb3VyY2UuX2xvYWRUeXBlTWFwLCBleHRuYW1lLCBsb2FkVHlwZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGxvYWQgdHlwZSB0byBiZSB1c2VkIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZXh0bmFtZSB7c3RyaW5nfSBUaGUgZXh0ZW5zaW9uIHRvIHNldCB0aGUgdHlwZSBmb3IsIGUuZy4gXCJwbmdcIiBvciBcImZudFwiXG4gKiBAcGFyYW0geGhyVHlwZSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSB4aHIgdHlwZSB0byBzZXQgaXQgdG8uXG4gKi9cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgeGhyVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5feGhyVHlwZU1hcCwgZXh0bmFtZSwgeGhyVHlwZSk7XG59O1xuXG5mdW5jdGlvbiBzZXRFeHRNYXAobWFwLCBleHRuYW1lLCB2YWwpIHtcbiAgICBpZiAoZXh0bmFtZSAmJiBleHRuYW1lLmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICBleHRuYW1lID0gZXh0bmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRuYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYXBbZXh0bmFtZV0gPSB2YWw7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIHByaXZhdGUgcHJvcGVydHlcbiAgICBfa2V5U3RyOiBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIsXG5cbiAgICBlbmNvZGVCaW5hcnk6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICAgICAgdmFyIGJ5dGVidWZmZXI7XG4gICAgICAgIHZhciBlbmNvZGVkQ2hhckluZGV4ZXMgPSBuZXcgQXJyYXkoNCk7XG4gICAgICAgIHZhciBpbnggPSAwO1xuICAgICAgICB2YXIgam54ID0gMDtcbiAgICAgICAgdmFyIHBhZGRpbmdCeXRlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmlsbCBieXRlIGJ1ZmZlciBhcnJheVxuICAgICAgICAgICAgYnl0ZWJ1ZmZlciA9IG5ldyBBcnJheSgzKTtcbiAgICAgICAgICAgIGZvciAoam54ID0gMDsgam54IDwgYnl0ZWJ1ZmZlci5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhd2F5IGhpZ2gtb3JkZXIgYnl0ZSwgYXMgZG9jdW1lbnRlZCBhdDpcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1MSHR0cFJlcXVlc3QjSGFuZGxpbmdfYmluYXJ5X2RhdGFcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gaW5wdXQuY2hhckNvZGVBdChpbngrKykgJiAweGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCBlYWNoIGVuY29kZWQgY2hhcmFjdGVyLCA2IGJpdHMgYXQgYSB0aW1lXG4gICAgICAgICAgICAvLyBpbmRleCAxOiBmaXJzdCA2IGJpdHNcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1swXSA9IGJ5dGVidWZmZXJbMF0gPj4gMjtcbiAgICAgICAgICAgIC8vIGluZGV4IDI6IHNlY29uZCA2IGJpdHMgKDIgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMSArIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAyKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzFdID0gKChieXRlYnVmZmVyWzBdICYgMHgzKSA8PCA0KSB8IChieXRlYnVmZmVyWzFdID4+IDQpO1xuICAgICAgICAgICAgLy8gaW5kZXggMzogdGhpcmQgNiBiaXRzICg0IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBpbnB1dCBieXRlIDIgKyAyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1syXSA9ICgoYnl0ZWJ1ZmZlclsxXSAmIDB4MGYpIDw8IDIpIHwgKGJ5dGVidWZmZXJbMl0gPj4gNik7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiBmb3J0aCA2IGJpdHMgKDYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IGJ5dGVidWZmZXJbMl0gJiAweDNmO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBwYWRkaW5nIGhhcHBlbmVkLCBhbmQgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBwYWRkaW5nQnl0ZXMgPSBpbnggLSAoaW5wdXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhZGRpbmdCeXRlcykge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxhc3QgMiBjaGFyYWN0ZXJzIHRvIHBhZGRpbmcgY2hhclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbM10gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCBjaGFyYWN0ZXIgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBObyBwYWRkaW5nIC0gcHJvY2VlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb3cgd2Ugd2lsbCBncmFiIGVhY2ggYXBwcm9wcmlhdGUgY2hhcmFjdGVyIG91dCBvZiBvdXIga2V5c3RyaW5nXG4gICAgICAgICAgICAvLyBiYXNlZCBvbiBvdXIgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCBpdCB0byB0aGUgb3V0cHV0IHN0cmluZ1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBlbmNvZGVkQ2hhckluZGV4ZXMubGVuZ3RoOyBqbngrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSB0aGlzLl9rZXlTdHIuY2hhckF0KGVuY29kZWRDaGFySW5kZXhlc1tqbnhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vTG9hZGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJlc291cmNlID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5taWRkbGV3YXJlID0ge1xuICAgIGNhY2hpbmc6IHtcbiAgICAgICAgbWVtb3J5OiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL2NhY2hpbmcvbWVtb3J5JylcbiAgICB9LFxuICAgIHBhcnNpbmc6IHtcbiAgICAgICAgYmxvYjogcmVxdWlyZSgnLi9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2InKVxuICAgIH1cbn07XG4iLCIvLyBhIHNpbXBsZSBpbi1tZW1vcnkgY2FjaGUgZm9yIHJlc291cmNlc1xudmFyIGNhY2hlID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgLy8gaWYgY2FjaGVkLCB0aGVuIHNldCBkYXRhIGFuZCBjb21wbGV0ZSB0aGUgcmVzb3VyY2VcbiAgICAgICAgaWYgKGNhY2hlW3Jlc291cmNlLnVybF0pIHtcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBjYWNoZVtyZXNvdXJjZS51cmxdO1xuICAgICAgICAgICAgcmVzb3VyY2UuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBub3QgY2FjaGVkLCB3YWl0IGZvciBjb21wbGV0ZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlLm9uY2UoJ2NvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgY2FjaGVbdGhpcy51cmxdID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJy4uLy4uL1Jlc291cmNlJyksXG4gICAgYjY0ID0gcmVxdWlyZSgnLi4vLi4vYjY0Jyk7XG5cbndpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cbi8vIGEgbWlkZGxld2FyZSBmb3IgdHJhbnNmb3JtaW5nIFhIUiBsb2FkZWQgQmxvYnMgaW50byBtb3JlIHVzZWZ1bCBvYmplY3RzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgYW4gWEhSIGxvYWQgb2YgYSBibG9iXG4gICAgICAgIGlmIChyZXNvdXJjZS54aHIgJiYgcmVzb3VyY2UueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQikge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYmxvYiBzdXBwb3J0IHdlIHByb2JhYmx5IGdvdCBhIGJpbmFyeSBzdHJpbmcgYmFja1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuQmxvYiB8fCB0eXBlb2YgcmVzb3VyY2UuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlc291cmNlLnhoci5nZXRSZXNwb25zZUhlYWRlcignY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGltYWdlLCBjb252ZXJ0IHRoZSBiaW5hcnkgc3RyaW5nIGludG8gYSBkYXRhIHVybFxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIHR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gJ2RhdGE6JyArIHR5cGUgKyAnO2Jhc2U2NCwnICsgYjY0LmVuY29kZUJpbmFyeShyZXNvdXJjZS54aHIucmVzcG9uc2VUZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5pc0ltYWdlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IHVudGlsIHRoZSBpbWFnZSBsb2FkcyBhbmQgdGhlbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnQgdHlwZSBzYXlzIHRoaXMgaXMgYW4gaW1hZ2UsIHRoZW4gd2Ugc2hvdWxkIHRyYW5zZm9ybSB0aGUgYmxvYiBpbnRvIGFuIEltYWdlIG9iamVjdFxuICAgICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UuZGF0YS50eXBlLmluZGV4T2YoJ2ltYWdlJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXNvdXJjZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmJsb2IgPSByZXNvdXJjZS5kYXRhO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLnNyYyA9IHNyYztcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCB0aGUgbm8gbG9uZ2VyIHVzZWQgYmxvYiBhZnRlciB0aGUgaW1hZ2UgbG9hZHNcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChzcmMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwicGl4aS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIzLjAuMTAtZGV2XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJQaXhpLmpzIGlzIGEgZmFzdCBsaWdodHdlaWdodCAyRCBsaWJyYXJ5IHRoYXQgd29ya3MgYWNyb3NzIGFsbCBkZXZpY2VzLlwiLFxuICBcImF1dGhvclwiOiBcIk1hdCBHcm92ZXNcIixcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIFwiQ2hhZCBFbmdsZXIgPGNoYWRAcGFudGhlcmRldi5jb20+XCIsXG4gICAgXCJSaWNoYXJkIERhdmV5IDxyZGF2ZXlAZ21haWwuY29tPlwiXG4gIF0sXG4gIFwibWFpblwiOiBcIi4vc3JjL2luZGV4LmpzXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ29vZGJveWRpZ2l0YWwuY29tL1wiLFxuICBcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzXCIsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJzdGFydFwiOiBcImd1bHAgJiYgZ3VscCB3YXRjaFwiLFxuICAgIFwidGVzdFwiOiBcImd1bHAgJiYgdGVzdGVtIGNpXCIsXG4gICAgXCJidWlsZFwiOiBcImd1bHBcIixcbiAgICBcImRvY3NcIjogXCJqc2RvYyAtYyAuL2d1bHAvdXRpbC9qc2RvYy5jb25mLmpzb24gLVIgUkVBRE1FLm1kXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW4vXCIsXG4gICAgXCJzcmMvXCIsXG4gICAgXCJDT05UUklCVVRJTkcubWRcIixcbiAgICBcIkxJQ0VOU0VcIixcbiAgICBcInBhY2thZ2UuanNvblwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYXN5bmNcIjogXCJeMS41LjBcIixcbiAgICBcImJyZnNcIjogXCJeMS40LjFcIixcbiAgICBcImVhcmN1dFwiOiBcIl4yLjAuN1wiLFxuICAgIFwiZXZlbnRlbWl0dGVyM1wiOiBcIl4xLjEuMVwiLFxuICAgIFwiZ2wtbWF0cml4XCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS90b2ppL2dsLW1hdHJpeC5naXRcIixcbiAgICBcIm9iamVjdC1hc3NpZ25cIjogXCJeNC4wLjFcIixcbiAgICBcInBpeGktZ2wtY29yZVwiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vR29vZEJveURpZ2l0YWwvcGl4aS1nbC1jb3JlLmdpdFwiLFxuICAgIFwicmVzb3VyY2UtbG9hZGVyXCI6IFwiXjEuNi40XCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYnJvd3NlcmlmeVwiOiBcIl4xMS4xLjBcIixcbiAgICBcImNoYWlcIjogXCJeMy4yLjBcIixcbiAgICBcImRlbFwiOiBcIl4yLjAuMlwiLFxuICAgIFwiZ3VscFwiOiBcIl4zLjkuMFwiLFxuICAgIFwiZ3VscC1jYWNoZWRcIjogXCJeMS4xLjBcIixcbiAgICBcImd1bHAtY29uY2F0XCI6IFwiXjIuNi4wXCIsXG4gICAgXCJndWxwLWRlYnVnXCI6IFwiXjIuMS4wXCIsXG4gICAgXCJndWxwLWhlYWRlclwiOiBcIl4xLjcuMVwiLFxuICAgIFwiZ3VscC1qc2hpbnRcIjogXCJeMS4xMS4yXCIsXG4gICAgXCJndWxwLW1pcnJvclwiOiBcIl4wLjQuMFwiLFxuICAgIFwiZ3VscC1wbHVtYmVyXCI6IFwiXjEuMC4xXCIsXG4gICAgXCJndWxwLXJlbmFtZVwiOiBcIl4xLjIuMlwiLFxuICAgIFwiZ3VscC1zb3VyY2VtYXBzXCI6IFwiXjEuNS4yXCIsXG4gICAgXCJndWxwLXVnbGlmeVwiOiBcIl4xLjQuMVwiLFxuICAgIFwiZ3VscC11dGlsXCI6IFwiXjMuMC42XCIsXG4gICAgXCJqYWd1YXJqcy1qc2RvY1wiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vZGF2aWRzaGltanMvamFndWFyanMtanNkb2MuZ2l0XCIsXG4gICAgXCJqc2RvY1wiOiBcIl4zLjMuMlwiLFxuICAgIFwianNoaW50LXN1bW1hcnlcIjogXCJeMC40LjBcIixcbiAgICBcIm1pbmltaXN0XCI6IFwiXjEuMi4wXCIsXG4gICAgXCJtb2NoYVwiOiBcIl4yLjMuMlwiLFxuICAgIFwicmVxdWlyZS1kaXJcIjogXCJeMC4zLjBcIixcbiAgICBcInJ1bi1zZXF1ZW5jZVwiOiBcIl4xLjEuMlwiLFxuICAgIFwidGVzdGVtXCI6IFwiXjAuOS40XCIsXG4gICAgXCJ2aW55bC1idWZmZXJcIjogXCJeMS4wLjBcIixcbiAgICBcInZpbnlsLXNvdXJjZS1zdHJlYW1cIjogXCJeMS4xLjBcIixcbiAgICBcIndhdGNoaWZ5XCI6IFwiXjMuNC4wXCJcbiAgfSxcbiAgXCJicm93c2VyaWZ5XCI6IHtcbiAgICBcInRyYW5zZm9ybVwiOiBbXG4gICAgICBcImJyZnNcIlxuICAgIF1cbiAgfVxufVxuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8vIGFkZCBzb21lIGV4dHJhIHZhcmlhYmxlcyB0byB0aGUgY29udGFpbmVyLi5cbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKVxuKTtcblxuXG4vKipcbiAqIFRoZSBBY2Nlc3NpYmlsaXR5IG1hbmFnZXIgcmVhY3JlYXRlcyB0aGUgYWJpbGl0eSB0byB0YWIgYW5kIGFuZCBoYXZlIGNvbnRlbnQgcmVhZCBieSBzY3JlZW4gcmVhZGVycy4gVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCBhcyBpdCBjYW4gcG9zc2libHkgaGVscCBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMgYWNjZXNzIHBpeGkgY29udGVudC5cbiAqIE11Y2ggbGlrZSBpbnRlcmFjdGlvbiBhbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgbWFkZSBhY2Nlc3NpYmxlLiBUaGlzIG1hbmFnZXIgd2lsbCBtYXAgdGhlIGV2ZW50cyBhcyBpZiB0aGUgbW91c2Ugd2FzIGJlaW5nIHVzZWQsIG1pbmltaXppbmcgdGhlIGVmZmVyb3QgcmVxdWlyZWQgdG8gaW1wbGVtZW50LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyXG4gKi9cbmZ1bmN0aW9uIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKHJlbmRlcmVyKVxue1xuXHQvLyBmaXJzdCB3ZSBjcmVhdGUgYSBkaXYgdGhhdCB3aWxsIHNpdCBvdmVyIHRoZSBwaXhpIGVsZW1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGRpdiBvdmVybGF5cyB3aWxsIGdvLlxuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBcbiAgICBkaXYuc3R5bGUud2lkdGggPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgZGl2LnN0eWxlLnRvcCA9IDA7XG4gICAgZGl2LnN0eWxlLmxlZnQgPSAwO1xuICAgLy9cbiAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcbiAgIFx0XG4gICBcdC8qKlxuICAgXHQgKiBUaGlzIGlzIHRoZSBkb20gZWxlbWVudCB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuICAgXHR0aGlzLmRpdiA9IGRpdjtcblxuICAgXHQvKipcbiAgIFx0ICogQSBzaW1wbGUgcG9vbCBmb3Igc3RvcmluZyBkaXZzLlxuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0FycmF5fVxuICAgXHQgKiBAcHJpdmF0ZVxuICAgXHQgKi9cbiBcdHRoaXMucG9vbCA9IFtdO1xuXG4gXHQvKipcbiBcdCAqIFRoaXMgaXMgYSB0aWNrIHVzZWQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIG5vIGxvbmdlciBiZWluZyByZW5kZXJlZC5cbiBcdCAqIFxuIFx0ICogQHR5cGUge051bWJlcn1cbiBcdCAqIEBwcml2YXRlXG4gXHQgKi9cbiAgIFx0dGhpcy5yZW5kZXJJZCA9IDA7XG5cbiAgIFx0LyoqXG4gICBcdCAqIFNldHRpbmcgdGhpcyB0byB0cnVlIHdpbGwgdmlzdWFsbHkgc2hvdyB0aGUgZGl2c1xuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0Jvb2xlYW59XG4gICBcdCAqL1xuICAgXHR0aGlzLmRlYnVnID0gZmFsc2U7XG5cbiAgXHQvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBhY2Nlc3NpYmlsaXR5IG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgIFx0dGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICBcdC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjdXJyZW50bHkgYWN0aXZlIGFjY2Vzc2libGUgaXRlbXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgXHR0aGlzLmNoaWxkcmVuID0gW107XG4gICBcdFxuICAgXHQvKipcbiAgICAgKiBwcmUgYmluZCB0aGUgZnVuY3Rpb25zLi5cbiAgICAgKi9cbiAgIFx0dGhpcy5fb25LZXlEb3duID0gdGhpcy5fb25LZXlEb3duLmJpbmQodGhpcyk7XG4gICBcdHRoaXMuX29uTW91c2VNb3ZlID0gdGhpcy5fb25Nb3VzZU1vdmUuYmluZCh0aGlzKTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHN0b3JlcyB0aGUgc3RhdGUgb2YgdGhlIG1hbmFnZXIuIElmIHRoZXJlIGFyZSBubyBhY2Nlc3NpYmxlIG9iamVjdHMgb3IgdGhlIG1vdXNlIGlzIG1vdmluZyB0aGUgd2lsbCBiZSBmYWxzZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcblxuXG4gICBcdC8vIGxldCBsaXN0ZW4gZm9yIHRhYi4uIG9uY2UgcHJlc3NlZCB3ZSBjYW4gZmlyZSB1cCBhbmQgc2hvdyB0aGUgYWNjZXNzaWJpbGl0eSBsYXllclxuICAgXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xufVxuXG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBBY2Nlc3NpYmlsaXR5TWFuYWdlcjtcblxuLyoqXG4gKiBBY3RpdmF0aW5nIHdpbGwgY2F1c2UgdGhlIEFjY2Vzc2liaWxpdHkgbGF5ZXIgdG8gYmUgc2hvd24uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIHByZXNlcyB0aGUgdGFiIGtleVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IHRydWU7XG5cblx0d2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCB0cnVlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9uKCdwb3N0cmVuZGVyJywgdGhpcy51cGRhdGUsIHRoaXMpO1xuXG5cdHRoaXMucmVuZGVyZXIudmlldy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuZGl2KTtcdFxufTtcblxuLyoqXG4gKiBEZWFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBoaWRkZW4uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIG1vdmVzIHRoZSBtb3VzZVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmRlYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKCF0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG5cblx0dGhpcy5yZW5kZXJlci5vZmYoJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSk7XG5cblx0dGhpcy5kaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmRpdik7XG5cbn07XG5cbi8qKlxuICogVGhpcyByZWN1cnNpdmUgZnVuY3Rpb24gd2lsbCBydW4gdGhyb3VnaHQgaGUgc2NlbmUgZ3JhcGggYW5kIGFkZCBhbnkgbmV3IGFjY2Vzc2libGUgb2JqZWN0cyB0byB0aGUgRE9NIGxheWVyLlxuICogQHBhcmFtIGVsZW1lbnQge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIERpc3BsYXlPYmplY3QgdG8gY2hlY2suXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlQWNjZXNzaWJsZU9iamVjdHMgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuXHRpZighZGlzcGxheU9iamVjdC52aXNpYmxlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYoZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlICYmIGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG5cdHtcblx0XHRpZighZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZUFjdGl2ZSlcblx0XHR7XG5cdFx0XHR0aGlzLmFkZENoaWxkKGRpc3BsYXlPYmplY3QpO1xuXHRcdH1cblx0ICAgXHRcblx0ICAgXHRkaXNwbGF5T2JqZWN0LnJlbmRlcklkID0gdGhpcy5yZW5kZXJJZDtcblx0fVxuXG5cdHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG5cblx0Zm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XG5cdFx0dGhpcy51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyhjaGlsZHJlbltpXSk7XG5cdH1cbn07XG5cblxuLyoqXG4gKiBCZWZvcmUgZWFjaCByZW5kZXIgdGhpcyBmdW5jdGlvbiB3aWxsIGVuc3VyZSB0aGF0IGFsbCBkaXZzIGFyZSBtYXBwZWQgY29ycmVjdGx5IHRvIHRoZWlyIERpc3BsYXlPYmplY3RzXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oKVxue1xuXG5cdC8vIHVwZGF0ZSBjaGlsZHJlbi4uLlxuXHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCk7XG5cblx0dmFyIHJlY3QgPSB0aGlzLnJlbmRlcmVyLnZpZXcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdHZhciBzeCA9IHJlY3Qud2lkdGggIC8gdGhpcy5yZW5kZXJlci53aWR0aDtcblx0dmFyIHN5ID0gcmVjdC5oZWlnaHQgLyB0aGlzLnJlbmRlcmVyLmhlaWdodDtcblxuXHR2YXIgZGl2ID0gdGhpcy5kaXY7XG5cblx0ZGl2LnN0eWxlLmxlZnQgPSByZWN0LmxlZnQgKyAncHgnO1xuXHRkaXYuc3R5bGUudG9wID0gcmVjdC50b3AgKyAncHgnO1xuXHRkaXYuc3R5bGUud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoICsgJ3B4Jztcblx0ZGl2LnN0eWxlLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0ICsgJ3B4JztcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblxuXHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cblx0XHRpZihjaGlsZC5yZW5kZXJJZCAhPT0gdGhpcy5yZW5kZXJJZClcblx0XHR7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGksIDEpO1xuXHRcdFx0dGhpcy5kaXYucmVtb3ZlQ2hpbGQoIGNoaWxkLl9hY2Nlc3NpYmxlRGl2ICk7XG5cdFx0XHR0aGlzLnBvb2wucHVzaChjaGlsZC5fYWNjZXNzaWJsZURpdik7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZURpdiA9IG51bGw7XG5cblx0XHRcdGktLTtcblxuXHRcdFx0aWYodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0Ly8gbWFwIGRpdiB0byBkaXNwbGF5Li5cblx0XHRcdGRpdiA9IGNoaWxkLl9hY2Nlc3NpYmxlRGl2O1xuXHRcdFx0dmFyIGhpdEFyZWEgPSBjaGlsZC5oaXRBcmVhO1xuXHRcdFx0dmFyIHd0ID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cblx0XHRcdGlmKGNoaWxkLmhpdEFyZWEpXG5cdFx0XHR7XG5cdFx0XHRcdGRpdi5zdHlsZS5sZWZ0ID0gKCh3dC50eCArIChoaXRBcmVhLnggKiB3dC5hKSkgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gICgod3QudHkgKyAoaGl0QXJlYS55ICogd3QuZCkpICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiB3dC5hICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLmhlaWdodCA9IChoaXRBcmVhLmhlaWdodCAqIHd0LmQgKiBzeSkgKyAncHgnO1xuXHRcdFx0XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdGhpdEFyZWEgPSBjaGlsZC5nZXRCb3VuZHMoKTtcblxuXHRcdFx0XHR0aGlzLmNhcEhpdEFyZWEoaGl0QXJlYSk7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoaGl0QXJlYS54ICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLnRvcCA9ICAoaGl0QXJlYS55ICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogc3kpICsgJ3B4Jztcblx0XHRcdH1cdFx0XG5cdFx0fVxuXHR9XG5cblx0Ly8gaW5jcmVtZW50IHRoZSByZW5kZXIgaWQuLlxuXHR0aGlzLnJlbmRlcklkKys7XG59O1xuXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuY2FwSGl0QXJlYSA9IGZ1bmN0aW9uIChoaXRBcmVhKVxue1xuICAgIGlmIChoaXRBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS53aWR0aCArPSBoaXRBcmVhLng7XG4gICAgICAgIGhpdEFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGhpdEFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCArPSBoaXRBcmVhLnk7XG4gICAgICAgIGhpdEFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBoaXRBcmVhLnggKyBoaXRBcmVhLndpZHRoID4gdGhpcy5yZW5kZXJlci53aWR0aCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoID0gdGhpcy5yZW5kZXJlci53aWR0aCAtIGhpdEFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueSArIGhpdEFyZWEuaGVpZ2h0ID4gdGhpcy5yZW5kZXJlci5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmhlaWdodCAtIGhpdEFyZWEueTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogQWRkcyBhIERpc3BsYXlPYmplY3QgdG8gdGhlIGFjY2Vzc2liaWxpdHkgbWFuYWdlclxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24oZGlzcGxheU9iamVjdClcbntcbi8vXHR0aGlzLmFjdGl2YXRlKCk7XG5cdFxuXHR2YXIgZGl2ID0gdGhpcy5wb29sLnBvcCgpO1xuXG5cdGlmKCFkaXYpXG5cdHtcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgXG5cblx0ICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG5cdCAgICBkaXYuc3R5bGUuaGVpZ2h0ID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmRlYnVnID8gJ3JnYmEoMjU1LDAsMCwwLjUpJyA6ICd0cmFuc3BhcmVudCc7XG5cdCAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXHQgICAgZGl2LnN0eWxlLnpJbmRleCA9IDI7XG5cdCAgICBkaXYuc3R5bGUuYm9yZGVyU3R5bGUgPSAnbm9uZSc7XG5cblx0ICAgIFxuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGljay5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKSk7XG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCB0aGlzLl9vbkZvY3VzT3V0LmJpbmQodGhpcykpO1xuXHR9XG5cdCAgIFx0XG5cblxuXG5cdGRpdi50aXRsZSA9IGRpc3BsYXlPYmplY3QuYWNjZXNzaWJsZVRpdGxlIHx8ICdkaXNwbGF5T2JqZWN0ICcgKyB0aGlzLnRhYkluZGV4O1xuXG5cdC8vXG5cdFxuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlID0gdHJ1ZTtcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiA9IGRpdjtcblx0ZGl2LmRpc3BsYXlPYmplY3QgPSBkaXNwbGF5T2JqZWN0O1xuXG5cblx0dGhpcy5jaGlsZHJlbi5wdXNoKGRpc3BsYXlPYmplY3QpO1xuXHR0aGlzLmRpdi5hcHBlbmRDaGlsZCggZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiApO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2LnRhYkluZGV4ID0gZGlzcGxheU9iamVjdC50YWJJbmRleDtcbn07XG5cblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgYnV0dG9uIHByZXNzIHRvIHBpeGkncyBJbnRlcmFjdGlvbk1hbmFnZXIgKGNsaWNrKVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkNsaWNrID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ2NsaWNrJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW92ZXIpXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uRm9jdXMgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW91dClcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1c091dCA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIGtleSBpcyBwcmVzc2VkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbktleURvd24gPSBmdW5jdGlvbihlKVxue1xuXHRpZihlLmtleUNvZGUgIT09IDkpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmFjdGl2YXRlKCk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uTW91c2VNb3ZlID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmRlYWN0aXZhdGUoKTtcbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKlxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIFxue1xuXHR0aGlzLmRpdiA9IG51bGw7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHR7XG5cdFx0dGhpcy5jaGlsZHJlbltpXS5kaXYgPSBudWxsO1xuXHR9XG5cblx0XG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duKTtcblx0XHRcblx0dGhpcy5wb29sID0gbnVsbDtcblx0dGhpcy5jaGlsZHJlbiA9IG51bGw7XG5cdHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdhY2Nlc3NpYmlsaXR5JywgQWNjZXNzaWJpbGl0eU1hbmFnZXIpO1xuXG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGFjY2Vzc2libGUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlNYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5hY2Nlc3NpYmlsaXR5LmFjY2Vzc2libGVUYXJnZXRcbiAqICAgICAgKTtcbiAqL1xudmFyIGFjY2Vzc2libGVUYXJnZXQgPSB7XG4gICAgXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlOmZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlVGl0bGU6bnVsbCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgdGFiSW5kZXg6MCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVBY3RpdmU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIF9hY2Nlc3NpYmxlRGl2OmZhbHNlXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYWNjZXNzaWJsZVRhcmdldDtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGFjY2Vzc2liaWxpdHkgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGFjY2Vzc2libGVUYXJnZXQ6ICAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKSxcbiAgICBBY2Nlc3NpYmlsaXR5TWFuYWdlcjogcmVxdWlyZSgnLi9BY2Nlc3NpYmlsaXR5TWFuYWdlcicpXG59O1xuIiwiLyoqXG4gKiBDb25zdGFudCB2YWx1ZXMgdXNlZCBpbiBwaXhpXG4gKlxuICogQGxlbmRzIFBJWElcbiAqL1xudmFyIENPTlNUID0ge1xuICAgIC8qKlxuICAgICAqIFN0cmluZyBvZiB0aGUgY3VycmVudCBQSVhJIHZlcnNpb25cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gVkVSU0lPTlxuICAgICAqL1xuICAgIFZFUlNJT046IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb24sXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUElfMiAtIFR3byBQaVxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBQSV8yOiBNYXRoLlBJICogMixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSQURfVE9fREVHIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgcmFkaWFucyB0byBkZWdyZWVzXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFJBRF9UT19ERUc6IDE4MCAvIE1hdGguUEksXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge051bWJlcn0gREVHX1RPX1JBRCAtIENvbnN0YW50IGNvbnZlcnNpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIGRlZ3JlZXMgdG8gcmFkaWFuc1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBERUdfVE9fUkFEOiBNYXRoLlBJIC8gMTgwLFxuXG4gICAgLyoqXG4gICAgICogVGFyZ2V0IGZyYW1lcyBwZXIgbWlsbGlzZWNvbmQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFRBUkdFVF9GUE1TPTAuMDZcbiAgICAgKi9cbiAgICBUQVJHRVRfRlBNUzogMC4wNixcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IHRvIGlkZW50aWZ5IHRoZSBSZW5kZXJlciBUeXBlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBSRU5ERVJFUl9UWVBFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuVU5LTk9XTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLldFQkdMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuQ0FOVkFTXG4gICAgICovXG4gICAgUkVOREVSRVJfVFlQRToge1xuICAgICAgICBVTktOT1dOOiAgICAwLFxuICAgICAgICBXRUJHTDogICAgICAxLFxuICAgICAgICBDQU5WQVM6ICAgICAyXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFZhcmlvdXMgYmxlbmQgbW9kZXMgc3VwcG9ydGVkIGJ5IFBJWEkuIElNUE9SVEFOVCAtIFRoZSBXZWJHTCByZW5kZXJlciBvbmx5IHN1cHBvcnRzXG4gICAgICogdGhlIE5PUk1BTCwgQURELCBNVUxUSVBMWSBhbmQgU0NSRUVOIGJsZW5kIG1vZGVzLiBBbnl0aGluZyBlbHNlIHdpbGwgc2lsZW50bHkgYWN0IGxpa2VcbiAgICAgKiBOT1JNQUwuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IEJMRU5EX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5BRERcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTVVMVElQTFlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0NSRUVOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk9WRVJMQVlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuREFSS0VOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkxJR0hURU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfQlVSTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IQVJEX0xJR0hUXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNPRlRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuRElGRkVSRU5DRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5FWENMVVNJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuSFVFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNBVFVSQVRJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTFVNSU5PU0lUWVxuICAgICAqL1xuICAgIEJMRU5EX01PREVTOiB7XG4gICAgICAgIE5PUk1BTDogICAgICAgICAwLFxuICAgICAgICBBREQ6ICAgICAgICAgICAgMSxcbiAgICAgICAgTVVMVElQTFk6ICAgICAgIDIsXG4gICAgICAgIFNDUkVFTjogICAgICAgICAzLFxuICAgICAgICBPVkVSTEFZOiAgICAgICAgNCxcbiAgICAgICAgREFSS0VOOiAgICAgICAgIDUsXG4gICAgICAgIExJR0hURU46ICAgICAgICA2LFxuICAgICAgICBDT0xPUl9ET0RHRTogICAgNyxcbiAgICAgICAgQ09MT1JfQlVSTjogICAgIDgsXG4gICAgICAgIEhBUkRfTElHSFQ6ICAgICA5LFxuICAgICAgICBTT0ZUX0xJR0hUOiAgICAgMTAsXG4gICAgICAgIERJRkZFUkVOQ0U6ICAgICAxMSxcbiAgICAgICAgRVhDTFVTSU9OOiAgICAgIDEyLFxuICAgICAgICBIVUU6ICAgICAgICAgICAgMTMsXG4gICAgICAgIFNBVFVSQVRJT046ICAgICAxNCxcbiAgICAgICAgQ09MT1I6ICAgICAgICAgIDE1LFxuICAgICAgICBMVU1JTk9TSVRZOiAgICAgMTZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyB3ZWJnbCBkcmF3IG1vZGVzLiBUaGVzZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIEdMIGRyYXdNb2RlIHRvIHVzZVxuICAgICAqIHVuZGVyIGNlcnRhaW4gc2l0dWF0aW9ucyBhbmQgcmVuZGVyZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBEUkFXX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuUE9JTlRTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX0xPT1BcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX1NUUklQXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9GQU5cbiAgICAgKi9cbiAgICBEUkFXX01PREVTOiB7XG4gICAgICAgIFBPSU5UUzogICAgICAgICAwLFxuICAgICAgICBMSU5FUzogICAgICAgICAgMSxcbiAgICAgICAgTElORV9MT09QOiAgICAgIDIsXG4gICAgICAgIExJTkVfU1RSSVA6ICAgICAzLFxuICAgICAgICBUUklBTkdMRVM6ICAgICAgNCxcbiAgICAgICAgVFJJQU5HTEVfU1RSSVA6IDUsXG4gICAgICAgIFRSSUFOR0xFX0ZBTjogICA2XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgcGl4aS5cbiAgICAgKlxuICAgICAqIFRoZSBERUZBVUxUIHNjYWxlIG1vZGUgYWZmZWN0cyB0aGUgZGVmYXVsdCBzY2FsaW5nIG1vZGUgb2YgZnV0dXJlIG9wZXJhdGlvbnMuXG4gICAgICogSXQgY2FuIGJlIHJlLWFzc2lnbmVkIHRvIGVpdGhlciBMSU5FQVIgb3IgTkVBUkVTVCwgZGVwZW5kaW5nIHVwb24gc3VpdGFiaWxpdHkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNDQUxFX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkRFRkFVTFQ9TElORUFSXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkxJTkVBUiBTbW9vdGggc2NhbGluZ1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5ORUFSRVNUIFBpeGVsYXRpbmcgc2NhbGluZ1xuICAgICAqL1xuICAgIFNDQUxFX01PREVTOiB7XG4gICAgICAgIERFRkFVTFQ6ICAgIDAsXG4gICAgICAgIExJTkVBUjogICAgIDAsXG4gICAgICAgIE5FQVJFU1Q6ICAgIDFcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHByZWZpeCB0aGF0IGRlbm90ZXMgYSBVUkwgaXMgZm9yIGEgcmV0aW5hIGFzc2V0XG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFJFVElOQV9QUkVGSVhcbiAgICAgKi9cbiAgICAvL2V4YW1wbGU6ICdAMngnLFxuICAgIFJFVElOQV9QUkVGSVg6IC9AKC4rKXgvLFxuXG4gICAgUkVTT0xVVElPTjoxLFxuXG4gICAgRklMVEVSX1JFU09MVVRJT046MSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHJlbmRlciBvcHRpb25zIGlmIG5vbmUgYXJlIHN1cHBsaWVkIHRvIHtAbGluayBQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICogb3Ige0BsaW5rIFBJWEkuQ2FudmFzUmVuZGVyZXJ9LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TXG4gICAgICogQHByb3BlcnR5IHtIVE1MQ2FudmFzRWxlbWVudH0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy52aWV3PW51bGxcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMudHJhbnNwYXJlbnQ9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuYW50aWFsaWFzPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmZvcmNlRlhBQT1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5yZXNvbHV0aW9uPTFcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hdXRvUmVzaXplPWZhbHNlXG4gICAgICovXG4gICAgREVGQVVMVF9SRU5ERVJfT1BUSU9OUzoge1xuICAgICAgICB2aWV3OiBudWxsLFxuICAgICAgICByZXNvbHV0aW9uOiAxLFxuICAgICAgICBhbnRpYWxpYXM6IGZhbHNlLFxuICAgICAgICBmb3JjZUZYQUE6IGZhbHNlLFxuICAgICAgICBhdXRvUmVzaXplOiBmYWxzZSxcbiAgICAgICAgdHJhbnNwYXJlbnQ6IGZhbHNlLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IDB4MDAwMDAwLFxuICAgICAgICBjbGVhckJlZm9yZVJlbmRlcjogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBmYWxzZSxcbiAgICAgICAgcm91bmRQaXhlbHM6IGZhbHNlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50cyB0aGF0IGlkZW50aWZ5IHNoYXBlcywgbWFpbmx5IHRvIHByZXZlbnQgYGluc3RhbmNlb2ZgIGNhbGxzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVNcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlBPTFk9MFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUkVDVD0xXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5DSVJDPTJcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkVMSVA9M1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUlJFQz00XG4gICAgICovXG4gICAgU0hBUEVTOiB7XG4gICAgICAgIFBPTFk6IDAsXG4gICAgICAgIFJFQ1Q6IDEsXG4gICAgICAgIENJUkM6IDIsXG4gICAgICAgIEVMSVA6IDMsXG4gICAgICAgIFJSRUM6IDRcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogbWF5YmUgY2hhbmdlIHRvIFNQUklURS5CQVRDSF9TSVpFOiAyMDAwXG4gICAgLy8gVE9ETzogbWF5YmUgYWRkIFBBUlRJQ0xFLkJBVENIX1NJWkU6IDE1MDAwXG4gICAgU1BSSVRFX0JBVENIX1NJWkU6IDIwMDAgLy9uaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgYW5kIGRlc2t0b3AgbWFjaGluZXNcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ09OU1Q7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgRGlzcGxheU9iamVjdCA9IHJlcXVpcmUoJy4vRGlzcGxheU9iamVjdCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIENvbnRhaW5lciByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBkaXNwbGF5IG9iamVjdHMuXG4gKiBJdCBpcyB0aGUgYmFzZSBjbGFzcyBvZiBhbGwgZGlzcGxheSBvYmplY3RzIHRoYXQgYWN0IGFzIGEgY29udGFpbmVyIGZvciBvdGhlciBvYmplY3RzLlxuICpcbiAqYGBganNcbiAqIHZhciBjb250YWluZXIgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogYGBgXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuRGlzcGxheU9iamVjdFxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ29udGFpbmVyKClcbntcbiAgICBEaXNwbGF5T2JqZWN0LmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3RbXX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5Db250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSk7XG5Db250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb250YWluZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnRhaW5lci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG5cbiAgICAgICAgICAgIGlmICh3aWR0aCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IDE7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmIChoZWlnaHQgIT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyBoZWlnaHQgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogT3ZlcnJpZGFibGUgbWV0aG9kIHRoYXQgY2FuIGJlIHVzZWQgYnkgQ29udGFpbmVyIHN1YmNsYXNzZXMgd2hlbmV2ZXIgdGhlIGNoaWxkcmVuIGFycmF5IGlzIG1vZGlmaWVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5vbkNoaWxkcmVuQ2hhbmdlID0gZnVuY3Rpb24gKCkge307XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIuXG4gKiBcbiAqIFlvdSBjYW4gYWxzbyBhZGQgbXVsdHBsZSBpdGVtcyBsaWtlIHNvOiBteUNvbnRhaW5lci5hZGRDaGlsZCh0aGlua09uZSwgdGhpbmdUd28sIHRoaW5nVGhyZWUpXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gYWRkIHRvIHRoZSBjb250YWluZXJcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxueyBcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IHdlIGNhbiBieXBhc3MgbG9vcGluZyB0aHJvdWdoIHRoZSB0aGVtXG4gICAgaWYoYXJndW1lbnRzTGVuZ3RoID4gMSlcbiAgICB7XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgYXJndW1lbnRzIHByb3BlcnR5IGFuZCBhZGQgYWxsIGNoaWxkcmVuXG4gICAgICAgIC8vIHVzZSBpdCB0aGUgcmlnaHQgd2F5ICgubGVuZ3RoIGFuZCBbaV0pIHNvIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc3RpbGwgYmUgb3B0aW1pc2VkIGJ5IEpTIHJ1bnRpbWVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoIGFyZ3VtZW50c1tpXSApO1xuICAgICAgICB9XG4gICAgfSAgICAgXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIGNoaWxkIGhhcyBhIHBhcmVudCB0aGVuIGxldHMgcmVtb3ZlIGl0IGFzIFBpeGkgb2JqZWN0cyBjYW4gb25seSBleGlzdCBpbiBvbmUgcGxhY2VcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKHRoaXMuY2hpbGRyZW4ubGVuZ3RoLTEpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIgYXQgYSBzcGVjaWZpZWQgaW5kZXguIElmIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0byBhZGRcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gcGxhY2UgdGhlIGNoaWxkIGluXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyBhZGRlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5hZGRDaGlsZEF0ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuXG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNoaWxkICsgJ2FkZENoaWxkQXQ6IFRoZSBpbmRleCAnKyBpbmRleCArJyBzdXBwbGllZCBpcyBvdXQgb2YgYm91bmRzICcgKyB0aGlzLmNoaWxkcmVuLmxlbmd0aCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBTd2FwcyB0aGUgcG9zaXRpb24gb2YgMiBEaXNwbGF5IE9iamVjdHMgd2l0aGluIHRoaXMgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGNoaWxkMiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnN3YXBDaGlsZHJlbiA9IGZ1bmN0aW9uIChjaGlsZCwgY2hpbGQyKVxue1xuICAgIGlmIChjaGlsZCA9PT0gY2hpbGQyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbmRleDEgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuICAgIHZhciBpbmRleDIgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQyKTtcblxuICAgIGlmIChpbmRleDEgPCAwIHx8IGluZGV4MiA8IDApXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N3YXBDaGlsZHJlbjogQm90aCB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdHMgbXVzdCBiZSBjaGlsZHJlbiBvZiB0aGUgY2FsbGVyLicpO1xuICAgIH1cblxuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgxXSA9IGNoaWxkMjtcbiAgICB0aGlzLmNoaWxkcmVuW2luZGV4Ml0gPSBjaGlsZDtcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgxIDwgaW5kZXgyID8gaW5kZXgxIDogaW5kZXgyKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW5kZXggcG9zaXRpb24gb2YgYSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIHRvIGlkZW50aWZ5XG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3QgdG8gaWRlbnRpZnlcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBtdXN0IGJlIGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgcG9zaXRpb24gb2YgYW4gZXhpc3RpbmcgY2hpbGQgaW4gdGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgRGlzcGxheU9iamVjdCBpbnN0YW5jZSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBpbmRleCBudW1iZXJcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgcmVzdWx0aW5nIGluZGV4IG51bWJlciBmb3IgdGhlIGNoaWxkIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc2V0Q2hpbGRJbmRleCA9IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN1cHBsaWVkIGluZGV4IGlzIG91dCBvZiBib3VuZHMnKTtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudEluZGV4ID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkKTtcblxuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGN1cnJlbnRJbmRleCwgMSk7IC8vIHJlbW92ZSBmcm9tIG9sZCBwb3NpdGlvblxuICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7IC8vYWRkIGF0IG5ldyBwb3NpdGlvblxuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNoaWxkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhcbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgYXRcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIGF0IHRoZSBnaXZlbiBpbmRleCwgaWYgYW55LlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkQXQgPSBmdW5jdGlvbiAoaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0Q2hpbGRBdDogU3VwcGxpZWQgaW5kZXggJyArIGluZGV4ICsgJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY2hpbGQgbGlzdCwgb3IgdGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3QgaXMgbm90IGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2luZGV4XTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVtb3ZlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyByZW1vdmVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuXG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYSBjaGlsZCBmcm9tIHRoZSBzcGVjaWZpZWQgaW5kZXggcG9zaXRpb24uXG4gKlxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBnZXQgdGhlIGNoaWxkIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICB2YXIgY2hpbGQgPSB0aGlzLmdldENoaWxkQXQoaW5kZXgpO1xuXG4gICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpbmRleCwgMSk7XG5cbiAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICBjaGlsZC5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGNoaWxkcmVuIGZyb20gdGhpcyBjb250YWluZXIgdGhhdCBhcmUgd2l0aGluIHRoZSBiZWdpbiBhbmQgZW5kIGluZGV4ZXMuXG4gKlxuICogQHBhcmFtIGJlZ2luSW5kZXgge251bWJlcn0gVGhlIGJlZ2lubmluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyAwLlxuICogQHBhcmFtIGVuZEluZGV4IHtudW1iZXJ9IFRoZSBlbmRpbmcgcG9zaXRpb24uIERlZmF1bHQgdmFsdWUgaXMgc2l6ZSBvZiB0aGUgY29udGFpbmVyLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkcmVuID0gZnVuY3Rpb24gKGJlZ2luSW5kZXgsIGVuZEluZGV4KVxue1xuICAgIHZhciBiZWdpbiA9IGJlZ2luSW5kZXggfHwgMDtcbiAgICB2YXIgZW5kID0gdHlwZW9mIGVuZEluZGV4ID09PSAnbnVtYmVyJyA/IGVuZEluZGV4IDogdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgdmFyIHJhbmdlID0gZW5kIC0gYmVnaW47XG4gICAgdmFyIHJlbW92ZWQsIGk7XG5cbiAgICBpZiAocmFuZ2UgPiAwICYmIHJhbmdlIDw9IGVuZClcbiAgICB7XG4gICAgICAgIHJlbW92ZWQgPSB0aGlzLmNoaWxkcmVuLnNwbGljZShiZWdpbiwgcmFuZ2UpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW1vdmVkW2ldLnBhcmVudCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoYmVnaW5JbmRleCk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0uZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbW92ZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJhbmdlID09PSAwICYmIHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigncmVtb3ZlQ2hpbGRyZW46IG51bWVyaWMgdmFsdWVzIGFyZSBvdXRzaWRlIHRoZSBhY2NlcHRhYmxlIHJhbmdlLicpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb24gYWxsIGNoaWxkcmVuIG9mIHRoaXMgY29udGFpbmVyIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0gPSBDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgQ29udGFpbmVyIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIGFsbCB2aXNpYmxlIGNoaWxkcmVuIGludG8gY29uc2lkZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE8gdGhlIGJvdW5kcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHRoaXMgcmVuZGVyIHNlc3Npb24gc28gcmV0dXJuIHdoYXQgd2UgaGF2ZVxuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBjaGlsZEJvdW5kcztcbiAgICAgICAgdmFyIGNoaWxkTWF4WDtcbiAgICAgICAgdmFyIGNoaWxkTWF4WTtcblxuICAgICAgICB2YXIgY2hpbGRWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZFZpc2libGUgPSB0cnVlO1xuXG4gICAgICAgICAgICBjaGlsZEJvdW5kcyA9IHRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIG1pblggPSBtaW5YIDwgY2hpbGRCb3VuZHMueCA/IG1pblggOiBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgbWluWSA9IG1pblkgPCBjaGlsZEJvdW5kcy55ID8gbWluWSA6IGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIGNoaWxkTWF4WCA9IGNoaWxkQm91bmRzLndpZHRoICsgY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIGNoaWxkTWF4WSA9IGNoaWxkQm91bmRzLmhlaWdodCArIGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIG1heFggPSBtYXhYID4gY2hpbGRNYXhYID8gbWF4WCA6IGNoaWxkTWF4WDtcbiAgICAgICAgICAgIG1heFkgPSBtYXhZID4gY2hpbGRNYXhZID8gbWF4WSA6IGNoaWxkTWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGRWaXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG5Db250YWluZXIucHJvdG90eXBlLmNvbnRhaW5lckdldEJvdW5kcyA9IENvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbm9uLWdsb2JhbCBsb2NhbCBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS5cbiAqIFRoZSBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXhDYWNoZSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0aC5NYXRyaXguSURFTlRJVFk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0cml4Q2FjaGU7XG5cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyggbWF0aC5NYXRyaXguSURFTlRJVFkgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcblxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGksIGo7XG5cbiAgICAvLyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgbWFzayBvciBhIGZpbHRlci5cbiAgICBpZiAodGhpcy5fbWFzayB8fCB0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgLy8gcHVzaCBmaWx0ZXIgZmlyc3QgYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIGNvcnJlY3QgZm9yIGFueSBtYXNraW5nXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzICYmIHRoaXMuX2ZpbHRlcnMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGhpcywgdGhpcy5fZmlsdGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcblxuICAgICAgICAvLyBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIGJhdGNoLCBvbmx5IHJlbmRlcmVkIGlmIGl0IGhhcyBhIHRleHR1cmUuXG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgbWFrZSBzdXJlIHRoZXkgZ2V0IHJlbmRlcmVkXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJXZWJHTChyZW5kZXJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayh0aGlzLCB0aGlzLl9tYXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBzaW1wbGUgcmVuZGVyIGNoaWxkcmVuIVxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gdGhpcyBpcyB3aGVyZSBjb250ZW50IGl0c2VsZiBnZXRzIHJlbmRlcmVkLi4uXG59O1xuXG4vKipcbiAqIFRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzXG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy5hbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hc2spXG4gICAge1xuICAgICAgICByZW5kZXJlci5tYXNrTWFuYWdlci5wdXNoTWFzayh0aGlzLl9tYXNrLCByZW5kZXJlcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayhyZW5kZXJlcik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUNoaWxkcmVuKVxue1xuICAgIERpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGlmIChkZXN0cm95Q2hpbGRyZW4pXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLmRlc3Ryb3koZGVzdHJveUNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xufTtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBUcmFuc2Zvcm0gPSByZXF1aXJlKCcuL1RyYW5zZm9ybVN0YXRpYycpLFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB3b3JsZEFscGhhOjEsIGNoaWxkcmVuOltdfTtcblxuXG4vKipcbiAqIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCBvbiB0aGUgc2NyZWVuLlxuICogVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIG9uIGl0cyBvd24gcmF0aGVyIGl0IHNob3VsZCBiZSBleHRlbmRlZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIEV2ZW50RW1pdHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gRGlzcGxheU9iamVjdCgpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb29yZGluYXRlIG9mIHRoZSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLnRyYW5zZm9ybS5wb3NpdGlvbjtcbiAgIC8vIHRoaXMuX3Bvc2l0aW9uID0gbmV3IENhY2hlUG9pbnQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHBpdm90IHBvaW50IG9mIHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgaXQgcm90YXRlcyBhcm91bmRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5waXZvdCA9IHRoaXMudHJhbnNmb3JtLnBpdm90XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBza2V3IGZhY3RvciBmb3IgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNrZXcgPSB0aGlzLnRyYW5zZm9ybS5za2V3XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3JvdGF0aW9uID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcGFjaXR5IG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgb2JqZWN0LiBJZiBmYWxzZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGRyYXduLCBhbmRcbiAgICAgKiB0aGUgdXBkYXRlVHJhbnNmb3JtIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENhbiB0aGlzIG9iamVjdCBiZSByZW5kZXJlZCwgaWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biBidXQgdGhlIHVwZGF0ZVRyYW5zZm9ybVxuICAgICAqIG1ldGhvZHMgd2lsbCBzdGlsbCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyIHRoYXQgY29udGFpbnMgdGhpcyBkaXNwbGF5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ29udGFpbmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtdWx0aXBsaWVkIGFscGhhIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgdHJhbnNmb3JtIG9mIHRoZSBvYmplY3QgYmFzZWQgb24gd29ybGQgKHBhcmVudCkgZmFjdG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS5sb2NhbFRyYW5zZm9ybTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcmVhIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0by4gVGhpcyBpcyB1c2VkIGFzIG1vcmUgb2YgYW4gb3B0aW1pc2F0aW9uXG4gICAgICogcmF0aGVyIHRoYW4gZmlndXJpbmcgb3V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGVhY2ggZnJhbWUgeW91IGNhbiBzZXQgdGhpcyByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW9zdCB1cC10by1kYXRlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgbWFzayBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gIC8vICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxheU9iamVjdDtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNjYWxlWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcm90YXRpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uZGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX2NyID0gTWF0aC5jb3ModmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBzcHJpdGUgaXMgZ2xvYmFsbHkgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB3b3JsZFZpc2libGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udmlzaWJsZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICB9IHdoaWxlIChpdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIG1hc2sgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LiBBIG1hc2sgaXMgYW4gb2JqZWN0IHRoYXQgbGltaXRzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIG9iamVjdCB0byB0aGUgc2hhcGUgb2YgdGhlIG1hc2sgYXBwbGllZCB0byBpdC5cbiAgICAgKiBJbiBQSVhJIGEgcmVndWxhciBtYXNrIG11c3QgYmUgYSBQSVhJLkdyYXBoaWNzIG9yIGEgUElYSS5TcHJpdGUgb2JqZWN0LiBUaGlzIGFsbG93cyBmb3IgbXVjaCBmYXN0ZXIgbWFza2luZyBpbiBjYW52YXMgYXMgaXQgdXRpbGlzZXMgc2hhcGUgY2xpcHBpbmcuXG4gICAgICogVG8gcmVtb3ZlIGEgbWFzaywgc2V0IHRoaXMgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3N8UElYSS5TcHJpdGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBtYXNrOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrLnJlbmRlcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXNrID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LlxuICAgICAqICogSU1QT1JUQU5UOiBUaGlzIGlzIGEgd2ViR0wgb25seSBmZWF0dXJlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlci5cbiAgICAgKiBUbyByZW1vdmUgZmlsdGVycyBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ251bGwnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkFic3RyYWN0RmlsdGVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMgJiYgdGhpcy5fZmlsdGVycy5zbGljZSgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlICYmIHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogVE9ETyAtIE9wdGltaXphdGlvbiBwYXNzIVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vaWYodGhpcy50cmFuc2Zvcm0uZGlydHkgfHwgcGFyZW50LnRyYW5zZm9ybS5kaXJ0eSlcbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICAvLyBtdWx0aXBseSB0aGUgYWxwaGFzLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gPSBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICpcbiAqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH1cbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyhtYXRoLk1hdHJpeC5JREVOVElUWSk7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9HbG9iYWwgPSBmdW5jdGlvbiAocG9zaXRpb24pXG57XG4gICAgLy8gdGhpcyBwYXJlbnQgY2hlY2sgaXMgZm9yIGp1c3QgaW4gY2FzZSB0aGUgaXRlbSBpcyBhIHJvb3Qgb2JqZWN0LlxuICAgIC8vIElmIGl0IGlzIHdlIG5lZWQgdG8gZ2l2ZSBpdCBhIHRlbXBvcmFyeSBwYXJlbnQgc28gdGhhdCBkaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtIHdvcmtzIGNvcnJlY3RseVxuICAgIC8vIHRoaXMgaXMgbWFpbmx5IHRvIGF2b2lkIGEgcGFyZW50IGNoZWNrIGluIHRoZSBtYWluIGxvb3AuIEV2ZXJ5IGxpdHRsZSBoZWxwcyBmb3IgcGVyZm9ybWFuY2UgOilcbiAgICBpZighdGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLnBhcmVudCA9IF90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIGxvdFxuICAgIHJldHVybiB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5KHBvc2l0aW9uKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgbG9jYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHJlbGF0aXZlIHRvIGFub3RoZXIgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEBwYXJhbSBbZnJvbV0ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gY2FsY3VsYXRlIHRoZSBnbG9iYWwgcG9zaXRpb24gZnJvbVxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBQb2ludClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9Mb2NhbCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgZnJvbSwgcG9pbnQpXG57XG4gICAgaWYgKGZyb20pXG4gICAge1xuICAgICAgICBwb3NpdGlvbiA9IGZyb20udG9HbG9iYWwocG9zaXRpb24pO1xuICAgIH1cblxuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIHNpbXBseSBhcHBseSB0aGUgbWF0cml4Li5cbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9zaXRpb24sIHBvaW50KTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyBPVkVSV1JJVEU7XG59O1xuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBwYXJlbnQgQ29udGFpbmVyIG9mIHRoaXMgRGlzcGxheU9iamVjdFxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge0NvbnRhaW5lcn0gVGhlIENvbnRhaW5lciB0byBhZGQgdGhpcyBEaXNwbGF5T2JqZWN0IHRvXG4gKiBAcmV0dXJuIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdGhhdCB0aGlzIERpc3BsYXlPYmplY3Qgd2FzIGFkZGVkIHRvXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFBhcmVudCA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWNvbnRhaW5lci5hZGRDaGlsZClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0UGFyZW50OiBBcmd1bWVudCBtdXN0IGJlIGEgQ29udGFpbmVyJyk7XG4gICAgfVxuXG4gICAgY29udGFpbmVyLmFkZENoaWxkKHRoaXMpO1xuICAgIHJldHVybiBjb250YWluZXI7XG59O1xuXG4vKipcbiAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHNldCB0aGUgcG9zdGlvbiwgc2NhbGUsIHNrZXcgYW5kIHBpdm90IGF0IG9uY2UuXG4gKlxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IFRoZSBYIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gVGhlIFkgcG9zaXRpb25cbiAqIEBwYXJhbSBbc2NhbGVYPTFdIHtudW1iZXJ9IFRoZSBYIHNjYWxlIHZhbHVlXG4gKiBAcGFyYW0gW3NjYWxlWT0xXSB7bnVtYmVyfSBUaGUgWSBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtyb3RhdGlvbj0wXSB7bnVtYmVyfSBUaGUgcm90YXRpb25cbiAqIEBwYXJhbSBbc2tld1g9MF0ge251bWJlcn0gVGhlIFggc2tldyB2YWx1ZVxuICogQHBhcmFtIFtza2V3WT0wXSB7bnVtYmVyfSBUaGUgWSBza2V3IHZhbHVlXG4gKiBAcGFyYW0gW3Bpdm90WD0wXSB7bnVtYmVyfSBUaGUgWCBwaXZvdCB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFk9MF0ge251bWJlcn0gVGhlIFkgcGl2b3QgdmFsdWVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24oeCwgeSwgc2NhbGVYLCBzY2FsZVksIHJvdGF0aW9uLCBza2V3WCwgc2tld1ksIHBpdm90WCwgcGl2b3RZKSAvL2pzaGludCBpZ25vcmU6bGluZVxue1xuICAgIHRoaXMucG9zaXRpb24ueCA9IHggfHwgMDtcbiAgICB0aGlzLnBvc2l0aW9uLnkgPSB5IHx8IDA7XG4gICAgdGhpcy5zY2FsZS54ID0gIXNjYWxlWCA/IDEgOiBzY2FsZVg7XG4gICAgdGhpcy5zY2FsZS55ID0gIXNjYWxlWSA/IDEgOiBzY2FsZVk7XG4gICAgdGhpcy5yb3RhdGlvbiA9IHJvdGF0aW9uIHx8IDA7XG4gICAgdGhpcy5za2V3LnggPSBza2V3WCB8fCAwO1xuICAgIHRoaXMuc2tldy55ID0gc2tld1kgfHwgMDtcbiAgICB0aGlzLnBpdm90LnggPSBwaXZvdFggfHwgMDtcbiAgICB0aGlzLnBpdm90LnkgPSBwaXZvdFkgfHwgMDtcbiAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQmFzZSBkZXN0cm95IG1ldGhvZCBmb3IgZ2VuZXJpYyBkaXNwbGF5IG9iamVjdHNcbiAqXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdGhpcy5wb3NpdGlvbiA9IG51bGw7XG4gICAgdGhpcy5zY2FsZSA9IG51bGw7XG4gICAgdGhpcy5waXZvdCA9IG51bGw7XG4gICAgdGhpcy5za2V3ID0gbnVsbDtcblxuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIHRoaXMuX2JvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fbWFzayA9IG51bGw7XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xufTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIE9ic2VydmFibGVQb2ludCh0cmFuc2Zvcm0sIHgsIHkpXG57XG4gICAgdGhpcy5feCA9IHggfHwgMDtcbiAgICB0aGlzLl95ID0geSB8fCAwO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG59XG5cbk9ic2VydmFibGVQb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYnNlcnZhYmxlUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IE9ic2VydmFibGVQb2ludDtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE9ic2VydmFibGVQb2ludC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3Qgb24gdGhlIHggYXhpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIHg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5feDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3ggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3k7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl95ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5PYnNlcnZhYmxlUG9pbnQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuX3ggPSB4IHx8IDA7XG4gICAgdGhpcy5feSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLl94IDogMCApO1xuICAgIFxuICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcbnZhciBPYnNlcnZhYmxlUG9pbnQgPSByZXF1aXJlKCcuL09ic2VydmFibGVQb2ludCcpO1xuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLCAwKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLDEsIDEpO1xuICAgIHRoaXMucGl2b3QgPSBuZXcgT2JzZXJ2YWJsZVBvaW50KHRoaXMsIDAsIDApO1xuICAgIHRoaXMuc2tldyA9IG5ldyBPYnNlcnZhYmxlUG9pbnQodGhpcywgMCwwKTtcbiAgICBcbiAgICB0aGlzLnJvdGF0aW9uID0gMDtcbiAgICB0aGlzLl9zciA9IE1hdGguc2luKDApO1xuICAgIHRoaXMuX2NyID0gTWF0aC5jb3MoMCk7XG4gICAgXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cblxuICAgIHRoaXMudXBkYXRlZCA9IHRydWU7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUcmFuc2Zvcm07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKHBhcmVudFRyYW5zZm9ybSlcbntcbiAgICB2YXIgcHQgPSBwYXJlbnRUcmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgbHQgPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3g7XG4gICAgICAgIGx0LmIgID0gIHRoaXMuX3NyICogdGhpcy5zY2FsZS5feDtcbiAgICAgICAgbHQuYyAgPSAtdGhpcy5fc3IgKiB0aGlzLnNjYWxlLl95O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3k7XG4gICAgICAgIGx0LnR4ID0gIHRoaXMucG9zaXRpb24uX3ggLSAodGhpcy5waXZvdC5feCAqIGx0LmEgKyB0aGlzLnBpdm90Ll95ICogbHQuYyk7XG4gICAgICAgIGx0LnR5ID0gIHRoaXMucG9zaXRpb24uX3kgLSAodGhpcy5waXZvdC5feCAqIGx0LmIgKyB0aGlzLnBpdm90Ll95ICogbHQuZCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVkID0gdGhpcy5kaXJ0eSB8fCBwYXJlbnRUcmFuc2Zvcm0uZGlydHk7XG5cbiAgICBpZih0aGlzLnVwZGF0ZWQpXG4gICAgeyAgICAgIFxuICAgICAgICAvLyBjb25jYXQgdGhlIHBhcmVudCBtYXRyaXggd2l0aCB0aGUgb2JqZWN0cyB0cmFuc2Zvcm0uXG4gICAgICAgIHd0LmEgID0gbHQuYSAgKiBwdC5hICsgbHQuYiAgKiBwdC5jO1xuICAgICAgICB3dC5iICA9IGx0LmEgICogcHQuYiArIGx0LmIgICogcHQuZDtcbiAgICAgICAgd3QuYyAgPSBsdC5jICAqIHB0LmEgKyBsdC5kICAqIHB0LmM7XG4gICAgICAgIHd0LmQgID0gbHQuYyAgKiBwdC5iICsgbHQuZCAgKiBwdC5kO1xuICAgICAgICB3dC50eCA9IGx0LnR4ICogcHQuYSArIGx0LnR5ICogcHQuYyArIHB0LnR4O1xuICAgICAgICB3dC50eSA9IGx0LnR4ICogcHQuYiArIGx0LnR5ICogcHQuZCArIHB0LnR5O1xuICAgIH1cbiAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhbnNmb3JtO1xuXG5cbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBDYW52YXNHcmFwaGljcyA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL0dyYXBoaWNzRGF0YScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIEdyYXBoaWNzIGNsYXNzIGNvbnRhaW5zIG1ldGhvZHMgdXNlZCB0byBkcmF3IHByaW1pdGl2ZSBzaGFwZXMgc3VjaCBhcyBsaW5lcywgY2lyY2xlcyBhbmRcbiAqIHJlY3RhbmdsZXMgdG8gdGhlIGRpc3BsYXksIGFuZCB0byBjb2xvciBhbmQgZmlsbCB0aGVtLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzKClcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSB2YWx1ZSB1c2VkIHdoZW4gZmlsbGluZyB0aGUgR3JhcGhpY3Mgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggKHRoaWNrbmVzcykgb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29sb3Igb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBHcmFwaGljcyBkYXRhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFRoaXMgaXMgYSBoZXggdmFsdWUuIEFwcGx5IGEgdmFsdWUgb2YgMHhGRkZGRkYgdG8gcmVzZXQgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmV2aW91cyB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFVzZWQgdG8gY29tcGFyZSB0byB0aGUgY3VycmVudCB0aW50IGFuZCBjaGVjayBpZiB0aGVyZXMgY2hhbmdlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLl9wcmV2VGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMO1xuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCBwYXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgY29udGFpbmluZyBzb21lIFdlYkdMLXJlbGF0ZWQgcHJvcGVydGllcyB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIG9iamVjdD59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAvLyBUT0RPIC0gX3dlYmdsIHNob3VsZCB1c2UgYSBwcm90b3R5cGUgb2JqZWN0LCBub3QgYSByYW5kb20gdW5kb2N1bWVudGVkIG9iamVjdC4uLlxuICAgIHRoaXMuX3dlYkdMID0ge307XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgc2hhcGUgaXMgYmVpbmcgdXNlZCBhcyBhIG1hc2suXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNNYXNrID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYm91bmRzJyBwYWRkaW5nIHVzZWQgZm9yIGJvdW5kcyBjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJvdW5kc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQSBjYWNoZSBvZiB0aGUgbG9jYWwgYm91bmRzIHRvIHByZXZlbnQgcmVjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwwLDEsMSk7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlIGdyYXBoaWNzXG4gICAgICogb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIFdlYkdMIGdyYXBoaWNzIG9iamVjdCBoYXMgY2hhbmdlZC4gSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZVxuICAgICAqIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlY2FsY3VsYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcblxuICAgIHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIGNhY2hlZCBzcHJpdGUgb2JqZWN0IG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBjYWNoZUFzQml0bWFwIGlzIHNldCB0byB0cnVlIHRoZSBncmFwaGljcyBvYmplY3Qgd2lsbCBiZSByZW5kZXJlZCBhcyBpZiBpdCB3YXMgYSBzcHJpdGUuXG4gICAgICogVGhpcyBpcyB1c2VmdWwgaWYgeW91ciBncmFwaGljcyBlbGVtZW50IGRvZXMgbm90IGNoYW5nZSBvZnRlbiwgYXMgaXQgd2lsbCBzcGVlZCB1cCB0aGUgcmVuZGVyaW5nXG4gICAgICogb2YgdGhlIG9iamVjdCBpbiBleGNoYW5nZSBmb3IgdGFraW5nIHVwIHRleHR1cmUgbWVtb3J5LiBJdCBpcyBhbHNvIHVzZWZ1bCBpZiB5b3UgbmVlZCB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3QgdG8gYmUgYW50aS1hbGlhc2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVuZGVyZWQgdXNpbmcgY2FudmFzLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCBpZlxuICAgICAqIHlvdSBhcmUgY29uc3RhbnRseSByZWRyYXdpbmcgdGhlIGdyYXBoaWNzIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBjYWNoZUFzQml0bWFwXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5HcmFwaGljcyNcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuR3JhcGhpY3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcbkdyYXBoaWNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljcztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEdyYXBoaWNzIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqIE5vdGUgdGhhdCB0aGUgb25seSB0aGUgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IGFyZSBjbG9uZWQsIG5vdCBpdHMgdHJhbnNmb3JtIChwb3NpdGlvbixzY2FsZSxldGMpXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2xvbmUgPSBuZXcgR3JhcGhpY3MoKTtcblxuICAgIGNsb25lLnJlbmRlcmFibGUgICAgPSB0aGlzLnJlbmRlcmFibGU7XG4gICAgY2xvbmUuZmlsbEFscGhhICAgICA9IHRoaXMuZmlsbEFscGhhO1xuICAgIGNsb25lLmxpbmVXaWR0aCAgICAgPSB0aGlzLmxpbmVXaWR0aDtcbiAgICBjbG9uZS5saW5lQ29sb3IgICAgID0gdGhpcy5saW5lQ29sb3I7XG4gICAgY2xvbmUudGludCAgICAgICAgICA9IHRoaXMudGludDtcbiAgICBjbG9uZS5ibGVuZE1vZGUgICAgID0gdGhpcy5ibGVuZE1vZGU7XG4gICAgY2xvbmUuaXNNYXNrICAgICAgICA9IHRoaXMuaXNNYXNrO1xuICAgIGNsb25lLmJvdW5kc1BhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG4gICAgY2xvbmUuZGlydHkgICAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuZ2xEaXJ0eSAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuY2FjaGVkU3ByaXRlRGlydHkgPSB0aGlzLmNhY2hlZFNwcml0ZURpcnR5O1xuXG4gICAgLy8gY29weSBncmFwaGljcyBkYXRhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIGNsb25lLmdyYXBoaWNzRGF0YS5wdXNoKHRoaXMuZ3JhcGhpY3NEYXRhW2ldLmNsb25lKCkpO1xuICAgIH1cblxuICAgIGNsb25lLmN1cnJlbnRQYXRoID0gY2xvbmUuZ3JhcGhpY3NEYXRhW2Nsb25lLmdyYXBoaWNzRGF0YS5sZW5ndGggLSAxXTtcblxuICAgIGNsb25lLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICByZXR1cm4gY2xvbmU7XG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgbGluZSBzdHlsZSB1c2VkIGZvciBzdWJzZXF1ZW50IGNhbGxzIHRvIEdyYXBoaWNzIG1ldGhvZHMgc3VjaCBhcyB0aGUgbGluZVRvKCkgbWV0aG9kIG9yIHRoZSBkcmF3Q2lyY2xlKCkgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUubGluZVN0eWxlID0gZnVuY3Rpb24gKGxpbmVXaWR0aCwgY29sb3IsIGFscGhhKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoIHx8IDA7XG4gICAgdGhpcy5saW5lQ29sb3IgPSBjb2xvciB8fCAwO1xuICAgIHRoaXMubGluZUFscGhhID0gKGFscGhhID09PSB1bmRlZmluZWQpID8gMSA6IGFscGhhO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBoYWxmd2F5IHRocm91Z2ggYSBsaW5lPyBzdGFydCBhIG5ldyBvbmUhXG4gICAgICAgICAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnNsaWNlKC0yKSk7XG4gICAgICAgICAgICBzaGFwZS5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSBpdHMgZW1wdHkgc28gbGV0cyBqdXN0IHNldCB0aGUgbGluZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVXaWR0aCA9IHRoaXMubGluZVdpZHRoO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZUFscGhhID0gdGhpcy5saW5lQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogTW92ZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byB4LCB5LlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IHRoZSBYIGNvb3JkaW5hdGUgdG8gbW92ZSB0b1xuICogQHBhcmFtIHkge251bWJlcn0gdGhlIFkgY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICAqL1xuR3JhcGhpY3MucHJvdG90eXBlLm1vdmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24oW3gseV0pO1xuICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIGxpbmUgdXNpbmcgdGhlIGN1cnJlbnQgbGluZSBzdHlsZSBmcm9tIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8gKHgsIHkpO1xuICogVGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiBpcyB0aGVuIHNldCB0byAoeCwgeSkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBkcmF3IHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lVG8gPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgsIHkpO1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnF1YWRyYXRpY0N1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICBuID0gMjAsXG4gICAgICAgIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLCAwKTtcbiAgICB9XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBuOyArK2kpXG4gICAge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgeGEgPSBmcm9tWCArICggKGNwWCAtIGZyb21YKSAqIGogKTtcbiAgICAgICAgeWEgPSBmcm9tWSArICggKGNwWSAtIGZyb21ZKSAqIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCggeGEgKyAoICgoY3BYICsgKCAodG9YIC0gY3BYKSAqIGogKSkgLSB4YSkgKiBqICksXG4gICAgICAgICAgICAgICAgICAgICB5YSArICggKChjcFkgKyAoICh0b1kgLSBjcFkpICogaiApKSAtIHlhKSAqIGogKSApO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gY3BYMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlemllckN1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIGNwWDIsIGNwWTIsIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgbiA9IDIwLFxuICAgICAgICBkdCxcbiAgICAgICAgZHQyLFxuICAgICAgICBkdDMsXG4gICAgICAgIHQyLFxuICAgICAgICB0MyxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICBkdCA9ICgxIC0gaik7XG4gICAgICAgIGR0MiA9IGR0ICogZHQ7XG4gICAgICAgIGR0MyA9IGR0MiAqIGR0O1xuXG4gICAgICAgIHQyID0gaiAqIGo7XG4gICAgICAgIHQzID0gdDIgKiBqO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCBkdDMgKiBmcm9tWCArIDMgKiBkdDIgKiBqICogY3BYICsgMyAqIGR0ICogdDIgKiBjcFgyICsgdDMgKiB0b1gsXG4gICAgICAgICAgICAgICAgICAgICBkdDMgKiBmcm9tWSArIDMgKiBkdDIgKiBqICogY3BZICsgMyAqIGR0ICogdDIgKiBjcFkyICsgdDMgKiB0b1kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjVG8oKSBtZXRob2QgY3JlYXRlcyBhbiBhcmMvY3VydmUgYmV0d2VlbiB0d28gdGFuZ2VudHMgb24gdGhlIGNhbnZhcy5cbiAqXG4gKiBcImJvcnJvd2VkXCIgZnJvbSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Z4Y2FudmFzLyAtIHRoYW5rcyBnb29nbGUhXG4gKlxuICogQHBhcmFtIHgxIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTEge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB4MiB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGFyY1xuICogQHBhcmFtIHkyIHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGFyY1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmFyY1RvID0gZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyLCByYWRpdXMpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oeDEsIHkxKTtcbiAgICB9XG5cbiAgICB2YXIgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMsXG4gICAgICAgIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0sXG4gICAgICAgIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0sXG4gICAgICAgIGExID0gZnJvbVkgLSB5MSxcbiAgICAgICAgYjEgPSBmcm9tWCAtIHgxLFxuICAgICAgICBhMiA9IHkyICAgLSB5MSxcbiAgICAgICAgYjIgPSB4MiAgIC0geDEsXG4gICAgICAgIG1tID0gTWF0aC5hYnMoYTEgKiBiMiAtIGIxICogYTIpO1xuXG4gICAgaWYgKG1tIDwgMS4wZS04IHx8IHJhZGl1cyA9PT0gMClcbiAgICB7XG4gICAgICAgIGlmIChwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAhPT0geDEgfHwgcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0gIT09IHkxKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHMucHVzaCh4MSwgeTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBkZCA9IGExICogYTEgKyBiMSAqIGIxLFxuICAgICAgICAgICAgY2MgPSBhMiAqIGEyICsgYjIgKiBiMixcbiAgICAgICAgICAgIHR0ID0gYTEgKiBhMiArIGIxICogYjIsXG4gICAgICAgICAgICBrMSA9IHJhZGl1cyAqIE1hdGguc3FydChkZCkgLyBtbSxcbiAgICAgICAgICAgIGsyID0gcmFkaXVzICogTWF0aC5zcXJ0KGNjKSAvIG1tLFxuICAgICAgICAgICAgajEgPSBrMSAqIHR0IC8gZGQsXG4gICAgICAgICAgICBqMiA9IGsyICogdHQgLyBjYyxcbiAgICAgICAgICAgIGN4ID0gazEgKiBiMiArIGsyICogYjEsXG4gICAgICAgICAgICBjeSA9IGsxICogYTIgKyBrMiAqIGExLFxuICAgICAgICAgICAgcHggPSBiMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHB5ID0gYTEgKiAoazIgKyBqMSksXG4gICAgICAgICAgICBxeCA9IGIyICogKGsxICsgajIpLFxuICAgICAgICAgICAgcXkgPSBhMiAqIChrMSArIGoyKSxcbiAgICAgICAgICAgIHN0YXJ0QW5nbGUgPSBNYXRoLmF0YW4yKHB5IC0gY3ksIHB4IC0gY3gpLFxuICAgICAgICAgICAgZW5kQW5nbGUgICA9IE1hdGguYXRhbjIocXkgLSBjeSwgcXggLSBjeCk7XG5cbiAgICAgICAgdGhpcy5hcmMoY3ggKyB4MSwgY3kgKyB5MSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYjEgKiBhMiA+IGIyICogYTEpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSAodXNlZCB0byBjcmVhdGUgY2lyY2xlcywgb3IgcGFydHMgb2YgY2lyY2xlcykuXG4gKlxuICogQHBhcmFtIGN4IHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gY3kge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gc3RhcnRBbmdsZSB7bnVtYmVyfSBUaGUgc3RhcnRpbmcgYW5nbGUsIGluIHJhZGlhbnMgKDAgaXMgYXQgdGhlIDMgbydjbG9jayBwb3NpdGlvbiBvZiB0aGUgYXJjJ3MgY2lyY2xlKVxuICogQHBhcmFtIGVuZEFuZ2xlIHtudW1iZXJ9IFRoZSBlbmRpbmcgYW5nbGUsIGluIHJhZGlhbnNcbiAqIEBwYXJhbSBhbnRpY2xvY2t3aXNlIHtib29sZWFufSBPcHRpb25hbC4gU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGRyYXdpbmcgc2hvdWxkIGJlIGNvdW50ZXJjbG9ja3dpc2Ugb3IgY2xvY2t3aXNlLiBGYWxzZSBpcyBkZWZhdWx0LCBhbmQgaW5kaWNhdGVzIGNsb2Nrd2lzZSwgd2hpbGUgdHJ1ZSBpbmRpY2F0ZXMgY291bnRlci1jbG9ja3dpc2UuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjID0gZnVuY3Rpb24oY3gsIGN5LCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBhbnRpY2xvY2t3aXNlKVxue1xuICAgIGFudGljbG9ja3dpc2UgPSBhbnRpY2xvY2t3aXNlIHx8IGZhbHNlO1xuXG4gICAgaWYgKHN0YXJ0QW5nbGUgPT09IGVuZEFuZ2xlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYoICFhbnRpY2xvY2t3aXNlICYmIGVuZEFuZ2xlIDw9IHN0YXJ0QW5nbGUgKVxuICAgIHtcbiAgICAgICAgZW5kQW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuICAgIGVsc2UgaWYoIGFudGljbG9ja3dpc2UgJiYgc3RhcnRBbmdsZSA8PSBlbmRBbmdsZSApXG4gICAge1xuICAgICAgICBzdGFydEFuZ2xlICs9IE1hdGguUEkgKiAyO1xuICAgIH1cblxuICAgIHZhciBzd2VlcCA9IGFudGljbG9ja3dpc2UgPyAoc3RhcnRBbmdsZSAtIGVuZEFuZ2xlKSAqIC0xIDogKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSk7XG4gICAgdmFyIHNlZ3MgPSAgTWF0aC5jZWlsKE1hdGguYWJzKHN3ZWVwKSAvIChNYXRoLlBJICogMikpICogNDA7XG5cbiAgICBpZihzd2VlcCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBzdGFydFggPSBjeCArIE1hdGguY29zKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuICAgIHZhciBzdGFydFkgPSBjeSArIE1hdGguc2luKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHN0YXJ0WCwgc3RhcnRZKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciB0aGV0YSA9IHN3ZWVwLyhzZWdzKjIpO1xuICAgIHZhciB0aGV0YTIgPSB0aGV0YSoyO1xuXG4gICAgdmFyIGNUaGV0YSA9IE1hdGguY29zKHRoZXRhKTtcbiAgICB2YXIgc1RoZXRhID0gTWF0aC5zaW4odGhldGEpO1xuXG4gICAgdmFyIHNlZ01pbnVzID0gc2VncyAtIDE7XG5cbiAgICB2YXIgcmVtYWluZGVyID0gKCBzZWdNaW51cyAlIDEgKSAvIHNlZ01pbnVzO1xuXG4gICAgZm9yKHZhciBpPTA7IGk8PXNlZ01pbnVzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcmVhbCA9ICBpICsgcmVtYWluZGVyICogaTtcblxuXG4gICAgICAgIHZhciBhbmdsZSA9ICgodGhldGEpICsgc3RhcnRBbmdsZSArICh0aGV0YTIgKiByZWFsKSk7XG5cbiAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgIHZhciBzID0gLU1hdGguc2luKGFuZ2xlKTtcblxuICAgICAgICBwb2ludHMucHVzaCgoIChjVGhldGEgKiAgYykgKyAoc1RoZXRhICogcykgKSAqIHJhZGl1cyArIGN4LFxuICAgICAgICAgICAgICAgICAgICAoIChjVGhldGEgKiAtcykgKyAoc1RoZXRhICogYykgKSAqIHJhZGl1cyArIGN5KTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIGEgc2ltcGxlIG9uZS1jb2xvciBmaWxsIHRoYXQgc3Vic2VxdWVudCBjYWxscyB0byBvdGhlciBHcmFwaGljcyBtZXRob2RzXG4gKiAoc3VjaCBhcyBsaW5lVG8oKSBvciBkcmF3Q2lyY2xlKCkpIHVzZSB3aGVuIGRyYXdpbmcuXG4gKlxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlZ2luRmlsbCA9IGZ1bmN0aW9uIChjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5maWxsaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPD0gMilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsID0gdGhpcy5maWxsaW5nO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQ29sb3IgPSB0aGlzLmZpbGxDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbEFscGhhID0gdGhpcy5maWxsQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBmaWxsIHRvIHRoZSBsaW5lcyBhbmQgc2hhcGVzIHRoYXQgd2VyZSBhZGRlZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHRoZSBiZWdpbkZpbGwoKSBtZXRob2QuXG4gKlxuICogQHJldHVybiB7R3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5lbmRGaWxsID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IG51bGw7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCApXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguUmVjdGFuZ2xlKHgseSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gUmFkaXVzIG9mIHRoZSByZWN0YW5nbGUgY29ybmVyc1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSb3VuZGVkUmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzIClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5Sb3VuZGVkUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgY2lyY2xlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3Q2lyY2xlID0gZnVuY3Rpb24gKHgsIHksIHJhZGl1cylcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5DaXJjbGUoeCx5LCByYWRpdXMpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhbiBlbGxpcHNlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIGhhbGYgd2lkdGggb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd0VsbGlwc2UgPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5FbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIHBvbHlnb24gdXNpbmcgdGhlIGdpdmVuIHBhdGguXG4gKlxuICogQHBhcmFtIHBhdGgge251bWJlcltdfFBJWEkuUG9pbnRbXX0gVGhlIHBhdGggZGF0YSB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgcG9seWdvbi5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UG9seWdvbiA9IGZ1bmN0aW9uIChwYXRoKVxue1xuICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGFzc2lnbm1lbnQgZGVvcHRcbiAgICAvLyBzZWUgc2VjdGlvbiAzLjE6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgIHZhciBwb2ludHMgPSBwYXRoO1xuXG4gICAgdmFyIGNsb3NlZCA9IHRydWU7XG5cbiAgICBpZiAocG9pbnRzIGluc3RhbmNlb2YgbWF0aC5Qb2x5Z29uKVxuICAgIHtcbiAgICAgICAgY2xvc2VkID0gcG9pbnRzLmNsb3NlZDtcbiAgICAgICAgcG9pbnRzID0gcG9pbnRzLnBvaW50cztcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHNbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHBvaW50cyk7XG4gICAgc2hhcGUuY2xvc2VkID0gY2xvc2VkO1xuXG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZ3JhcGhpY3MgdGhhdCB3ZXJlIGRyYXduIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LCBhbmQgcmVzZXRzIGZpbGwgYW5kIGxpbmUgc3R5bGUgc2V0dGluZ3MuXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG4gICAgdGhpcy5maWxsaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmNsZWFyRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gW107XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGdlb21ldHJ5IGlzIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNob3VsZCBiZSBvbmUgb2YgdGhlIHNjYWxlTW9kZSBjb25zdHNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBncmFwaGljcyBvYmplY3RcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVzb2x1dGlvbiwgc2NhbGVNb2RlKVxue1xuXG4gICAgcmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGggKiByZXNvbHV0aW9uLCBib3VuZHMuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXNCdWZmZXIuY29udGV4dC5zY2FsZShyZXNvbHV0aW9uLCByZXNvbHV0aW9uKTtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIGNhbnZhc0J1ZmZlci5jb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcblxuICAgIGlmICh0aGlzLmdsRGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5nbERpcnR5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5yZW5kZXIodGhpcyk7XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5pc01hc2sgPT09IHRydWUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHRpbnQgaGFzIGNoYW5nZWQsIHNldCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRpcnR5LlxuICAgIGlmICh0aGlzLl9wcmV2VGludCAhPT0gdGhpcy50aW50KSB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIHRoaXMgY29kZSBtYXkgc3RpbGwgYmUgbmVlZGVkIHNvIGxlYXZpbmcgZm9yIG5vdy4uXG4gICAgLy9cbiAgICAvKlxuICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuZGlydHkgfHwgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVDYWNoZWRTcHJpdGUoKTtcblxuICAgICAgICAgICAgLy8gd2Ugd2lsbCBhbHNvIG5lZWQgdG8gdXBkYXRlIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUoKTtcblxuICAgICAgICAgICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFscGhhID0gdGhpcy5hbHBoYTtcblxuICAgICAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLl9jYWNoZWRTcHJpdGUsIHJlbmRlcmVyKTtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgICovXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY29udGV4dCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYm91bmRzIG9mIHRoZSBncmFwaGljIHNoYXBlIGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IFRoZSB3b3JsZCB0cmFuc2Zvcm0gbWF0cml4IHRvIHVzZSwgZGVmYXVsdHMgdG8gdGhpc1xuICogIG9iamVjdCdzIHdvcmxkVHJhbnNmb3JtLlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICAvLyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBpdGVtIGlzIGEgbWFzayFcbiAgICAgICAgaWYgKCF0aGlzLnJlbmRlcmFibGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJvdW5kc0RpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICAgICAgICAgIHRoaXMuZ2xEaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYm91bmRzRGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9sb2NhbEJvdW5kcztcblxuICAgICAgICB2YXIgdzAgPSBib3VuZHMueDtcbiAgICAgICAgdmFyIHcxID0gYm91bmRzLndpZHRoICsgYm91bmRzLng7XG5cbiAgICAgICAgdmFyIGgwID0gYm91bmRzLnk7XG4gICAgICAgIHZhciBoMSA9IGJvdW5kcy5oZWlnaHQgKyBib3VuZHMueTtcblxuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAgICAgdmFyIHgyID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgICAgICB2YXIgeTMgPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgICAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgbWF4WCA9IHgxO1xuICAgICAgICB2YXIgbWF4WSA9IHkxO1xuXG4gICAgICAgIHZhciBtaW5YID0geDE7XG4gICAgICAgIHZhciBtaW5ZID0geTE7XG5cbiAgICAgICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICAgICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICAgICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgICAgICB0aGlzLl9ib3VuZHMueCA9IG1pblg7XG4gICAgICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy55ID0gbWluWTtcbiAgICAgICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSB0aGlzLl9ib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBncmFwaGljcyBvYmplY3RcbipcbiogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4qL1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciBncmFwaGljc0RhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKCFkYXRhLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gb25seSBkZWFsIHdpdGggZmlsbHMuLlxuICAgICAgICBpZiAoZGF0YS5zaGFwZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCBkYXRhLnNoYXBlLmNvbnRhaW5zKCB0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkgKSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAqXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcblxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICBpZiAodGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdmFyIHNoYXBlLCBwb2ludHMsIHgsIHksIHcsIGg7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVtpXTtcbiAgICAgICAgICAgIHZhciB0eXBlID0gZGF0YS50eXBlO1xuICAgICAgICAgICAgdmFyIGxpbmVXaWR0aCA9IGRhdGEubGluZVdpZHRoO1xuICAgICAgICAgICAgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QgfHwgdHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLnggLSBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueSAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS53aWR0aCArIGxpbmVXaWR0aDtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLnJhZGl1cyArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLng7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLmhlaWdodCArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFBPTFlcbiAgICAgICAgICAgICAgICBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBvaW50cy5sZW5ndGg7IGogKz0gMilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHggPSBwb2ludHNbal07XG4gICAgICAgICAgICAgICAgICAgIHkgPSBwb2ludHNbaisxXTtcblxuICAgICAgICAgICAgICAgICAgICBtaW5YID0geC1saW5lV2lkdGggPCBtaW5YID8geC1saW5lV2lkdGggOiBtaW5YO1xuICAgICAgICAgICAgICAgICAgICBtYXhYID0geCtsaW5lV2lkdGggPiBtYXhYID8geCtsaW5lV2lkdGggOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblkgPSB5LWxpbmVXaWR0aCA8IG1pblkgPyB5LWxpbmVXaWR0aCA6IG1pblk7XG4gICAgICAgICAgICAgICAgICAgIG1heFkgPSB5K2xpbmVXaWR0aCA+IG1heFkgPyB5K2xpbmVXaWR0aCA6IG1heFk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIG1pblggPSAwO1xuICAgICAgICBtYXhYID0gMDtcbiAgICAgICAgbWluWSA9IDA7XG4gICAgICAgIG1heFkgPSAwO1xuICAgIH1cblxuICAgIHZhciBwYWRkaW5nID0gdGhpcy5ib3VuZHNQYWRkaW5nO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueCA9IG1pblggLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLndpZHRoID0gKG1heFggLSBtaW5YKSArIHBhZGRpbmcgKiAyO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueSA9IG1pblkgLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLmhlaWdodCA9IChtYXhZIC0gbWluWSkgKyBwYWRkaW5nICogMjtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjYWNoZWQgc3ByaXRlIHdoZW4gdGhlIHNwcml0ZSBoYXMgY2FjaGVBc0JpdG1hcCA9IHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIGlmICghdGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgdmFyIGNhbnZhc0J1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcbiAgICAgICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzQnVmZmVyLmNhbnZhcyk7XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlciA9IGNhbnZhc0J1ZmZlcjtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLnJlc2l6ZShib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIC8vIGxldmVyYWdlIHRoZSBhbmNob3IgdG8gYWNjb3VudCBmb3IgdGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudFxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQuc2F2ZSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC50cmFuc2xhdGUoLWJvdW5kcy54LC1ib3VuZHMueSk7XG5cbiAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3MgdG8gMSBmb3IgdGhlIHJlbmRlci4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIG5vdyByZW5kZXIgdGhlIGdyYXBoaWMuLlxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dCk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xufTtcbiovXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVDYWNoZWRTcHJpdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2FjaGVkU3ByaXRlID0gdGhpcy5fY2FjaGVkU3ByaXRlO1xuICAgIHZhciB0ZXh0dXJlID0gY2FjaGVkU3ByaXRlLnRleHR1cmU7XG4gICAgdmFyIGNhbnZhcyA9IGNhY2hlZFNwcml0ZS5idWZmZXIuY2FudmFzO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG4gICAgdGV4dHVyZS5jcm9wLndpZHRoID0gdGV4dHVyZS5mcmFtZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmNyb3AuaGVpZ2h0ID0gdGV4dHVyZS5mcmFtZS5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgY2FjaGVkU3ByaXRlLl93aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICBjYWNoZWRTcHJpdGUuX2hlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIGRpcnR5IGJhc2UgdGV4dHVyZXNcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmRpcnR5KCk7XG59OyovXG5cbi8qKlxuICogRGVzdHJveXMgYSBwcmV2aW91cyBjYWNoZWQgc3ByaXRlLlxuICpcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95Q2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUudGV4dHVyZS5kZXN0cm95KHRydWUpO1xuXG4gICAgLy8gbGV0IHRoZSBnYyBjb2xsZWN0IHRoZSB1bnVzZWQgc3ByaXRlXG4gICAgLy8gVE9ETyBjb3VsZCBiZSBvYmplY3QgcG9vbGVkIVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59OyovXG5cbi8qKlxuICogRHJhd3MgdGhlIGdpdmVuIHNoYXBlIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LiBDYW4gYmUgYW55IG9mIENpcmNsZSwgUmVjdGFuZ2xlLCBFbGxpcHNlLCBMaW5lIG9yIFBvbHlnb24uXG4gKlxuICogQHBhcmFtIHNoYXBlIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc0RhdGF9IFRoZSBnZW5lcmF0ZWQgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdTaGFwZSA9IGZ1bmN0aW9uIChzaGFwZSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIC8vIGNoZWNrIGN1cnJlbnQgcGF0aCFcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YS5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgdmFyIGRhdGEgPSBuZXcgR3JhcGhpY3NEYXRhKHRoaXMubGluZVdpZHRoLCB0aGlzLmxpbmVDb2xvciwgdGhpcy5saW5lQWxwaGEsIHRoaXMuZmlsbENvbG9yLCB0aGlzLmZpbGxBbHBoYSwgdGhpcy5maWxsaW5nLCBzaGFwZSk7XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YS5wdXNoKGRhdGEpO1xuXG4gICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAge1xuICAgICAgICBkYXRhLnNoYXBlLmNsb3NlZCA9IGRhdGEuc2hhcGUuY2xvc2VkIHx8IHRoaXMuZmlsbGluZztcbiAgICAgICAgdGhpcy5jdXJyZW50UGF0aCA9IGRhdGE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGRhdGE7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgLy8gZGVzdHJveSBlYWNoIG9mIHRoZSBHcmFwaGljc0RhdGEgb2JqZWN0c1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8vIGZvciBlYWNoIHdlYmdsIGRhdGEgZW50cnksIGRlc3Ryb3kgdGhlIFdlYkdMR3JhcGhpY3NEYXRhXG4gICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fd2ViZ2wpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl93ZWJnbFtpZF0uZGF0YS5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgdGhpcy5fd2ViZ2xbaWRdLmRhdGFbal0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG4gICAgdGhpcy5fd2ViZ2wgPSBudWxsO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEEgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gbGluZVdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gZmlsbENvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGxBbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBmaWxsICAgICAge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICogQHBhcmFtIHNoYXBlICAgICB7Q2lyY2xlfFJlY3RhbmdsZXxFbGxpcHNlfExpbmV8UG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICovXG5mdW5jdGlvbiBHcmFwaGljc0RhdGEobGluZVdpZHRoLCBsaW5lQ29sb3IsIGxpbmVBbHBoYSwgZmlsbENvbG9yLCBmaWxsQWxwaGEsIGZpbGwsIHNoYXBlKVxue1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQ29sb3IgPSBsaW5lQ29sb3I7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQWxwaGEgPSBsaW5lQWxwaGE7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLl9saW5lVGludCA9IGxpbmVDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxDb2xvciA9IGZpbGxDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IGZpbGxBbHBoYTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBjYWNoZWQgdGludCBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuX2ZpbGxUaW50ID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhcGUgaXMgZmlsbGVkIHdpdGggYSBjb2xvdXJcbiAgICAgKi9cbiAgICB0aGlzLmZpbGwgPSBmaWxsO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICAgICAqL1xuICAgIHRoaXMuc2hhcGUgPSBzaGFwZTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBUaGUgdHlwZSBvZiB0aGUgc2hhcGUsIHNlZSB0aGUgQ29uc3QuU2hhcGVzIGZpbGUgZm9yIGFsbCB0aGUgZXhpc3RpbmcgdHlwZXMsXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gc2hhcGUudHlwZTtcbn1cblxuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3NEYXRhIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBHcmFwaGljc0RhdGEoXG4gICAgICAgIHRoaXMubGluZVdpZHRoLFxuICAgICAgICB0aGlzLmxpbmVDb2xvcixcbiAgICAgICAgdGhpcy5saW5lQWxwaGEsXG4gICAgICAgIHRoaXMuZmlsbENvbG9yLFxuICAgICAgICB0aGlzLmZpbGxBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsLFxuICAgICAgICB0aGlzLnNoYXBlXG4gICAgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIGRhdGEuXG4gKi9cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnNoYXBlID0gbnVsbDtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL1dlYkdMR3JhcGhpY3NEYXRhJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuXG4gICAgLy8gc29tZSBkcmF3aW5nIGZ1bmN0aW9ucy4uXG4gICAgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi91dGlscy9idWlsZExpbmUnKTtcbiAgICBidWlsZFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUG9seScpO1xuICAgIGJ1aWxkQ29tcGxleFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ29tcGxleFBvbHknKTtcbiAgICBidWlsZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSZWN0YW5nbGUnKTtcbiAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkQ2lyY2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZENpcmNsZScpO1xuXG4gICAgZWFyY3V0ID0gcmVxdWlyZSgnZWFyY3V0Jyk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IFtdO1xuXG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgYSBwb2x5IGNhbiBjb250YWluIGJlZm9yZSBpdCBpcyByZW5kZXJlZCBhcyBhIGNvbXBsZXggcG9seWdvbiAodXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyKVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgPSAyMDA7XG59XG5cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc1JlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdncmFwaGljcycsIEdyYXBoaWNzUmVuZGVyZXIpO1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMuZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzLmdsKVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHJlbmRlcmVyLlxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YVBvb2wubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBudWxsO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuICAvLyAgY29uc29sZS5sb2coZ3JhcGhpY3MpXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5IHx8ICFncmFwaGljcy5fd2ViR0xbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljcyhncmFwaGljcyk7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIFRoaXMgIGNvdWxkIGJlIHNwZWVkZWQgdXAgZm9yIHN1cmUhXG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggZ3JhcGhpY3MuYmxlbmRNb2RlICk7XG5cbi8vICAgIHZhciBtYXRyaXggPSAgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0uY2xvbmUoKTtcbi8vICAgIHZhciBtYXRyaXggPSAgcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7XG4vLyAgICBtYXRyaXguYXBwZW5kKGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gd2ViR0wuZGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTC5kYXRhW2ldLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyBmaXggdGhpcyBvbmUhXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEgKiB3ZWJHTERhdGEuYWxwaGEpO1xuXG4gICAgICAgICAgICAvLyByZW5kZXIgcXVhZC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgcmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeCA9IGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLmxvY2F0aW9uKTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHVwZGF0ZVxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgLy8gZ2V0IHRoZSBjb250ZXh0cyBncmFwaGljcyBvYmplY3RcbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd2ViR0wgY29udGV4dCB0aW1lIHRvIGNyZWF0ZSBpdCFcbiAgICBpZiAoIXdlYkdMKVxuICAgIHtcbiAgICAgICAgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdID0ge2xhc3RJbmRleDowLCBkYXRhOltdLCBnbDpnbH07XG4gICAgfVxuXG4gICBcbiAgICAvLyBmbGFnIHRoZSBncmFwaGljcyBhcyBub3QgZGlydHkgYXMgd2UgYXJlIGFib3V0IHRvIHVwZGF0ZSBpdC4uLlxuICAgIGdyYXBoaWNzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB2YXIgaTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGNsZWFyZWQgdGhlIGdyYXBoaWNzIG9iamVjdCB3ZSB3aWxsIG5lZWQgdG8gY2xlYXIgZXZlcnkgb2JqZWN0XG4gICAgaWYgKGdyYXBoaWNzLmNsZWFyRGlydHkpXG4gICAge1xuICAgICAgICBncmFwaGljcy5jbGVhckRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuZCByZXR1cm4gYWxsIHRoZSB3ZWJHTERhdGFzIHRvIHRoZSBvYmplY3QgcG9vbCBzbyB0aGFuIGNhbiBiZSByZXVzZWQgbGF0ZXIgb25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBncmFwaGljc0RhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucHVzaCggZ3JhcGhpY3NEYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgYXJyYXkgYW5kIHJlc2V0IHRoZSBpbmRleC4uXG4gICAgICAgIHdlYkdMLmRhdGEgPSBbXTtcbiAgICAgICAgd2ViR0wubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBncmFwaGljcyBkYXRhcyBhbmQgY29uc3RydWN0IGVhY2ggb25lLi5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGEgY29tcGxleCBmaWxsIHRoZW4gdGhlIG5ldyBzdGVuY2lsIGJ1ZmZlciB0ZWNobmlxdWUgd2lsbCBiZSB1c2VkXG4gICAgLy8gb3RoZXIgd2lzZSBncmFwaGljcyBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIGludG8gYSBiYXRjaC4uXG4gICAgZm9yIChpID0gd2ViR0wubGFzdEluZGV4OyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBwb2ludHMgdGhlIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgICAgICAgICAgZGF0YS5wb2ludHMgPSBkYXRhLnNoYXBlLnBvaW50cy5zbGljZSgpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBwb2x5IGlmIHRoZSB2YWx1ZSBpcyB0cnVlIVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50c1swXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTJdIHx8IGRhdGEucG9pbnRzWzFdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKGRhdGEucG9pbnRzWzBdLCBkYXRhLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNQUtFIFNVUkUgV0UgSEFWRSBUSEUgQ09SUkVDVCBUWVBFLi5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA+PSA2KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA8IHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplICogMilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkRyYXdVc2luZ1NpbXBsZSA9IGJ1aWxkUG9seShkYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkRyYXdVc2luZ1NpbXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoID4gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuICAgICAgICAgICAgICAgIGJ1aWxkTGluZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMgfHwgZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZENpcmNsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCsrO1xuICAgIH1cblxuICAgIC8vIHVwbG9hZCBhbGwgdGhlIGRpcnR5IGRhdGEuLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5kaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhLnVwbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gd2ViR0wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSBUT0RPIEBBbHZpblxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5zd2l0Y2hNb2RlID0gZnVuY3Rpb24gKHdlYkdMLCB0eXBlKVxue1xuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICBpZiAoIXdlYkdMLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbd2ViR0wuZGF0YS5sZW5ndGgtMV07XG5cbiAgICAgICAgaWYgKCh3ZWJHTERhdGEucG9pbnRzLmxlbmd0aCA+IDMyMDAwMCkgfHwgd2ViR0xEYXRhLm1vZGUgIT09IHR5cGUgfHwgdHlwZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdlYkdMRGF0YS5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gd2ViR0xEYXRhO1xufTtcblxuIiwiLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyBXZWJHTCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gV2ViR0xHcmFwaGljc0RhdGEoZ2wpIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vVE9ETyBkb2VzIHRoaXMgbmVlZCB0byBiZSBzcGxpdCBiZWZvcmUgdXBsb2Rpbmc/P1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvbG9yIGNvbXBvbmVudHMgKHIsZyxiKVxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3IgPSBbMCwwLDBdOyAvLyBjb2xvciBzcGxpdCFcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBvaW50cyB0byBkcmF3XG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIHRvZG8gQGFsdmluXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubW9kZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGdyYXBoaWNzIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHZlcnRpY2VzIGFuZCB0aGUgaW5kaWNlc1xuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb2ludHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmluZGljZXMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4vLyAgICB0aGlzLmxhc3RJbmRleCA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5nbFBvaW50cyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5wb2ludHMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuYnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5nbFBvaW50cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5nbEluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuZ2xJbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLnBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBcbiAgICB0aGlzLmdsID0gbnVsbDtcblxuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoZ2wpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgZ2wsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgY2lyY2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byBkcmF3XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ2lyY2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIHZhciBjaXJjbGVEYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gY2lyY2xlRGF0YS54O1xuICAgIHZhciB5ID0gY2lyY2xlRGF0YS55O1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuXG4gICAgLy8gVE9ETyAtIGJpdCBoYWNreT8/XG4gICAgaWYgKGdyYXBoaWNzRGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB0b3RhbFNlZ3MgPSBNYXRoLmZsb29yKDMwICogTWF0aC5zcXJ0KGNpcmNsZURhdGEucmFkaXVzKSkgfHwgTWF0aC5mbG9vcigxNSAqIE1hdGguc3FydChjaXJjbGVEYXRhLndpZHRoICsgY2lyY2xlRGF0YS5oZWlnaHQpKTtcbiAgICB2YXIgc2VnID0gKE1hdGguUEkgKiAyKSAvIHRvdGFsU2VncyA7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcyk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDEgOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCx5LCByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKyssIHZlY1BvcysrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MtMSk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDaXJjbGU7IiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuICAgIFxuXG5cbi8qKlxuICogQnVpbGRzIGEgY29tcGxleCBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDb21wbGV4UG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvL1RPRE8gLSBubyBuZWVkIHRvIGNvcHkgdGhpcyBhcyBpdCBnZXRzIHR1cm5lZCBpbnRvIGEgRkxvYXQzMkFycmF5IGFueXdheXMuLlxuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzLnNsaWNlKCk7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDYpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgd2ViR0xEYXRhLnBvaW50cyA9IHBvaW50cztcbiAgICB3ZWJHTERhdGEuYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHdlYkdMRGF0YS5jb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG5cbiAgICAvLyBjYWxjbGF0ZSB0aGUgYm91bmRzLi5cbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIHZhciB4LHk7XG5cbiAgICAvLyBnZXQgc2l6ZS4uXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKz0yKVxuICAgIHtcbiAgICAgICAgeCA9IHBvaW50c1tpXTtcbiAgICAgICAgeSA9IHBvaW50c1tpKzFdO1xuXG4gICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICBtYXhYID0geCA+IG1heFggPyB4IDogbWF4WDtcblxuICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcbiAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgcXVhZCB0byB0aGUgZW5kIGNvcyB0aGVyZSBpcyBubyBwb2ludCBtYWtpbmcgYW5vdGhlciBidWZmZXIhXG4gICAgcG9pbnRzLnB1c2gobWluWCwgbWluWSxcbiAgICAgICAgICAgICAgICBtYXhYLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1heFksXG4gICAgICAgICAgICAgICAgbWluWCwgbWF4WSk7XG5cbiAgICAvLyBwdXNoIGEgcXVhZCBvbnRvIHRoZSBlbmQuLlxuXG4gICAgLy9UT0RPIC0gdGhpcyBhaW50IG5lZWRlZCFcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKCBpICk7XG4gICAgfVxuXG59O1xuXG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENvbXBsZXhQb2x5OyIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBsaW5lIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRMaW5lID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIFRPRE8gT1BUSU1JU0UhXG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGlmIHRoZSBsaW5lIHdpZHRoIGlzIGFuIG9kZCBudW1iZXIgYWRkIDAuNSB0byBhbGlnbiB0byBhIHdob2xlIHBpeGVsXG4gICAgLy8gY29tbWVudGluZyB0aGlzIG91dCBmaXhlcyAjNzExIGFuZCAjMTYyMFxuICAgIC8vIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoJTIpXG4gICAgLy8ge1xuICAgIC8vICAgICBmb3IgKGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKVxuICAgIC8vICAgICB7XG4gICAgLy8gICAgICAgICBwb2ludHNbaV0gKz0gMC41O1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBmaXJzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgIHZhciBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgIC8vIGlmIHRoZSBmaXJzdCBwb2ludCBpcyB0aGUgbGFzdCBwb2ludCAtIGdvbm5hIGhhdmUgaXNzdWVzIDopXG4gICAgaWYgKGZpcnN0UG9pbnQueCA9PT0gbGFzdFBvaW50LnggJiYgZmlyc3RQb2ludC55ID09PSBsYXN0UG9pbnQueSlcbiAgICB7XG4gICAgICAgIC8vIG5lZWQgdG8gY2xvbmUgYXMgd2UgYXJlIGdvaW5nIHRvIHNsaWdodGx5IG1vZGlmeSB0aGUgc2hhcGUuLlxuICAgICAgICBwb2ludHMgPSBwb2ludHMuc2xpY2UoKTtcblxuICAgICAgICBwb2ludHMucG9wKCk7XG4gICAgICAgIHBvaW50cy5wb3AoKTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgICAgICB2YXIgbWlkUG9pbnRYID0gbGFzdFBvaW50LnggKyAoZmlyc3RQb2ludC54IC0gbGFzdFBvaW50LngpICowLjU7XG4gICAgICAgIHZhciBtaWRQb2ludFkgPSBsYXN0UG9pbnQueSArIChmaXJzdFBvaW50LnkgLSBsYXN0UG9pbnQueSkgKjAuNTtcblxuICAgICAgICBwb2ludHMudW5zaGlmdChtaWRQb2ludFgsIG1pZFBvaW50WSk7XG4gICAgICAgIHBvaW50cy5wdXNoKG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICB9XG5cbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgIHZhciBpbmRleENvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICB2YXIgaW5kZXhTdGFydCA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgLy8gRFJBVyB0aGUgTGluZVxuICAgIHZhciB3aWR0aCA9IGdyYXBoaWNzRGF0YS5saW5lV2lkdGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmxpbmVDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmxpbmVBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciBweCwgcHksIHAxeCwgcDF5LCBwMngsIHAyeSwgcDN4LCBwM3k7XG4gICAgdmFyIHBlcnB4LCBwZXJweSwgcGVycDJ4LCBwZXJwMnksIHBlcnAzeCwgcGVycDN5O1xuICAgIHZhciBhMSwgYjEsIGMxLCBhMiwgYjIsIGMyO1xuICAgIHZhciBkZW5vbSwgcGRpc3QsIGRpc3Q7XG5cbiAgICBwMXggPSBwb2ludHNbMF07XG4gICAgcDF5ID0gcG9pbnRzWzFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWzJdO1xuICAgIHAyeSA9IHBvaW50c1szXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gIHAxeCAtIHAyeDtcblxuICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG5cbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAvLyBzdGFydFxuICAgIHZlcnRzLnB1c2gocDF4IC0gcGVycHggLCBwMXkgLSBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAxeCArIHBlcnB4ICwgcDF5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgZm9yIChpID0gMTsgaSA8IGxlbmd0aC0xOyBpKyspXG4gICAge1xuICAgICAgICBwMXggPSBwb2ludHNbKGktMSkqMl07XG4gICAgICAgIHAxeSA9IHBvaW50c1soaS0xKSoyICsgMV07XG5cbiAgICAgICAgcDJ4ID0gcG9pbnRzWyhpKSoyXTtcbiAgICAgICAgcDJ5ID0gcG9pbnRzWyhpKSoyICsgMV07XG5cbiAgICAgICAgcDN4ID0gcG9pbnRzWyhpKzEpKjJdO1xuICAgICAgICBwM3kgPSBwb2ludHNbKGkrMSkqMiArIDFdO1xuXG4gICAgICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgICAgICBwZXJweSA9IHAxeCAtIHAyeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgICAgICBwZXJweCAvPSBkaXN0O1xuICAgICAgICBwZXJweSAvPSBkaXN0O1xuICAgICAgICBwZXJweCAqPSB3aWR0aDtcbiAgICAgICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAgICAgcGVycDJ4ID0gLShwMnkgLSBwM3kpO1xuICAgICAgICBwZXJwMnkgPSBwMnggLSBwM3g7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwMngqcGVycDJ4ICsgcGVycDJ5KnBlcnAyeSk7XG4gICAgICAgIHBlcnAyeCAvPSBkaXN0O1xuICAgICAgICBwZXJwMnkgLz0gZGlzdDtcbiAgICAgICAgcGVycDJ4ICo9IHdpZHRoO1xuICAgICAgICBwZXJwMnkgKj0gd2lkdGg7XG5cbiAgICAgICAgYTEgPSAoLXBlcnB5ICsgcDF5KSAtICgtcGVycHkgKyBwMnkpO1xuICAgICAgICBiMSA9ICgtcGVycHggKyBwMngpIC0gKC1wZXJweCArIHAxeCk7XG4gICAgICAgIGMxID0gKC1wZXJweCArIHAxeCkgKiAoLXBlcnB5ICsgcDJ5KSAtICgtcGVycHggKyBwMngpICogKC1wZXJweSArIHAxeSk7XG4gICAgICAgIGEyID0gKC1wZXJwMnkgKyBwM3kpIC0gKC1wZXJwMnkgKyBwMnkpO1xuICAgICAgICBiMiA9ICgtcGVycDJ4ICsgcDJ4KSAtICgtcGVycDJ4ICsgcDN4KTtcbiAgICAgICAgYzIgPSAoLXBlcnAyeCArIHAzeCkgKiAoLXBlcnAyeSArIHAyeSkgLSAoLXBlcnAyeCArIHAyeCkgKiAoLXBlcnAyeSArIHAzeSk7XG5cbiAgICAgICAgZGVub20gPSBhMSpiMiAtIGEyKmIxO1xuXG4gICAgICAgIGlmIChNYXRoLmFicyhkZW5vbSkgPCAwLjEgKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIGRlbm9tKz0xMC4xO1xuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJweCAsIHAyeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBweCA9IChiMSpjMiAtIGIyKmMxKS9kZW5vbTtcbiAgICAgICAgcHkgPSAoYTIqYzEgLSBhMSpjMikvZGVub207XG5cblxuICAgICAgICBwZGlzdCA9IChweCAtcDJ4KSAqIChweCAtcDJ4KSArIChweSAtcDJ5KSAqIChweSAtcDJ5KTtcblxuXG4gICAgICAgIGlmIChwZGlzdCA+IDE0MCAqIDE0MClcbiAgICAgICAge1xuICAgICAgICAgICAgcGVycDN4ID0gcGVycHggLSBwZXJwMng7XG4gICAgICAgICAgICBwZXJwM3kgPSBwZXJweSAtIHBlcnAyeTtcblxuICAgICAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwM3gqcGVycDN4ICsgcGVycDN5KnBlcnAzeSk7XG4gICAgICAgICAgICBwZXJwM3ggLz0gZGlzdDtcbiAgICAgICAgICAgIHBlcnAzeSAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN4ICo9IHdpZHRoO1xuICAgICAgICAgICAgcGVycDN5ICo9IHdpZHRoO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycDN4LCBwMnkgK3BlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJwM3gsIHAyeSAtcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRleENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocHggLCBweSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSAocHgtcDJ4KSwgcDJ5IC0gKHB5IC0gcDJ5KSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHAxeCA9IHBvaW50c1sobGVuZ3RoLTIpKjJdO1xuICAgIHAxeSA9IHBvaW50c1sobGVuZ3RoLTIpKjIgKyAxXTtcblxuICAgIHAyeCA9IHBvaW50c1sobGVuZ3RoLTEpKjJdO1xuICAgIHAyeSA9IHBvaW50c1sobGVuZ3RoLTEpKjIgKyAxXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5KTtcbiAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBpbmRleENvdW50OyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydCsrKTtcbiAgICB9XG5cbiAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydC0xKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRMaW5lOyIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcG9seWdvbiB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuV2ViR0xHcmFwaGljc0RhdGF9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocG9pbnRzLCBudWxsLCAyKTtcblxuICAgIGlmICghdHJpYW5nbGVzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgdmVydFBvcyA9IHZlcnRzLmxlbmd0aCAvIDY7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICt2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVydFBvcyk7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmVydHMucHVzaChwb2ludHNbaSAqIDJdLCBwb2ludHNbaSAqIDIgKyAxXSxcbiAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRQb2x5O1xuIiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHJlY3RhbmdsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIC0tLSAvL1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIC8vXG4gICAgdmFyIHJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcmVjdERhdGEueDtcbiAgICB2YXIgeSA9IHJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJlY3REYXRhLmhlaWdodDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgLy8gc3RhcnRcbiAgICAgICAgdmVydHMucHVzaCh4LCB5KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAvLyBpbnNlcnQgMiBkZWFkIHRyaWFuZ2xlcy4uXG4gICAgICAgIGluZGljZXMucHVzaCh2ZXJ0UG9zLCB2ZXJ0UG9zLCB2ZXJ0UG9zKzEsIHZlcnRQb3MrMiwgdmVydFBvcyszLCB2ZXJ0UG9zKzMpO1xuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSBbeCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHkgKyBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICB4LCB5XTtcblxuXG4gICAgICAgIGJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJlY3RhbmdsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG4vKipcbiAqIEJ1aWxkcyBhIHJvdW5kZWQgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG5idWlsZFJvdW5kZWRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIHJyZWN0RGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IHJyZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcnJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcnJlY3REYXRhLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSBycmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgdmFyIHJhZGl1cyA9IHJyZWN0RGF0YS5yYWRpdXM7XG5cbiAgICB2YXIgcmVjUG9pbnRzID0gW107XG4gICAgcmVjUG9pbnRzLnB1c2goeCwgeSArIHJhZGl1cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4LCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCB4LCB5ICsgaGVpZ2h0LCB4ICsgcmFkaXVzLCB5ICsgaGVpZ2h0LCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoIC0gcmFkaXVzLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCAtIHJhZGl1cywgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyB3aWR0aCwgeSArIHJhZGl1cywgeCArIHdpZHRoLCB5LCB4ICsgd2lkdGggLSByYWRpdXMsIHksIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgcmFkaXVzLCB5LCB4LCB5LCB4LCB5ICsgcmFkaXVzICsgMC4wMDAwMDAwMDAxLCByZWNQb2ludHMpO1xuXG4gICAgLy8gdGhpcyB0aW55IG51bWJlciBkZWFscyB3aXRoIHRoZSBpc3N1ZSB0aGF0IG9jY3VycyB3aGVuIHBvaW50cyBvdmVybGFwIGFuZCBlYXJjdXQgZmFpbHMgdG8gdHJpYW5ndWxhdGUgdGhlIGl0ZW0uXG4gICAgLy8gVE9ETyAtIGZpeCB0aGlzIHByb3Blcmx5LCB0aGlzIGlzIG5vdCB2ZXJ5IGVsZWdhbnQuLiBidXQgaXQgd29ya3MgZm9yIG5vdy5cblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICB2YXIgdHJpYW5nbGVzID0gZWFyY3V0KHJlY1BvaW50cywgbnVsbCwgMik7XG5cbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICAgICAge1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVjUG9zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZWNQb2ludHMubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gocmVjUG9pbnRzW2ldLCByZWNQb2ludHNbKytpXSwgciwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHJlY1BvaW50cztcblxuICAgICAgICB0aGlzLmJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlLiAoaGVscGVyIGZ1bmN0aW9uLi4pXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBmcm9tWCB7bnVtYmVyfSBPcmlnaW4gcG9pbnQgeFxuICogQHBhcmFtIGZyb21ZIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcGFyYW0gW291dF0ge251bWJlcltdfSBUaGUgb3V0cHV0IGFycmF5IHRvIGFkZCBwb2ludHMgaW50by4gSWYgbm90IHBhc3NlZCwgYSBuZXcgYXJyYXkgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm4ge251bWJlcltdfSBhbiBhcnJheSBvZiBwb2ludHNcbiAqL1xucXVhZHJhdGljQmV6aWVyQ3VydmUgPSBmdW5jdGlvbiAoZnJvbVgsIGZyb21ZLCBjcFgsIGNwWSwgdG9YLCB0b1ksIG91dClcbntcbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICB4YixcbiAgICAgICAgeWIsXG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gb3V0IHx8IFtdO1xuXG4gICAgZnVuY3Rpb24gZ2V0UHQobjEgLCBuMiwgcGVyYykge1xuICAgICAgICB2YXIgZGlmZiA9IG4yIC0gbjE7XG5cbiAgICAgICAgcmV0dXJuIG4xICsgKCBkaWZmICogcGVyYyApO1xuICAgIH1cblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBuOyBpKysgKSB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICAvLyBUaGUgR3JlZW4gTGluZVxuICAgICAgICB4YSA9IGdldFB0KCBmcm9tWCAsIGNwWCAsIGogKTtcbiAgICAgICAgeWEgPSBnZXRQdCggZnJvbVkgLCBjcFkgLCBqICk7XG4gICAgICAgIHhiID0gZ2V0UHQoIGNwWCAsIHRvWCAsIGogKTtcbiAgICAgICAgeWIgPSBnZXRQdCggY3BZICwgdG9ZICwgaiApO1xuXG4gICAgICAgIC8vIFRoZSBCbGFjayBEb3RcbiAgICAgICAgeCA9IGdldFB0KCB4YSAsIHhiICwgaiApO1xuICAgICAgICB5ID0gZ2V0UHQoIHlhICwgeWIgLCBqICk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goeCwgeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50cztcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJvdW5kZWRSZWN0YW5nbGU7IiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgY29yZSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWElcbiAqL1xuLy8gZXhwb3J0IGNvcmUgYW5kIGNvbnN0LiBXZSBhc3NpZ24gY29yZSB0byBjb25zdCBzbyB0aGF0IHRoZSBub24tcmVmZXJlbmNlIHR5cGVzIGluIGNvbnN0IHJlbWFpbiBpbi10YWN0XG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihyZXF1aXJlKCcuL2NvbnN0JyksIHJlcXVpcmUoJy4vbWF0aCcpLCB7XG4gICAgLy8gdXRpbHNcbiAgICB1dGlsczogcmVxdWlyZSgnLi91dGlscycpLFxuICAgIHRpY2tlcjogcmVxdWlyZSgnLi90aWNrZXInKSxcblxuICAgIC8vIGRpc3BsYXlcbiAgICBEaXNwbGF5T2JqZWN0OiAgICAgICAgICByZXF1aXJlKCcuL2Rpc3BsYXkvRGlzcGxheU9iamVjdCcpLFxuICAgIENvbnRhaW5lcjogICAgICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9Db250YWluZXInKSxcblxuICAgIC8vIHNwcml0ZXNcbiAgICBTcHJpdGU6ICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgUGFydGljbGVDb250YWluZXI6ICAgICAgcmVxdWlyZSgnLi9wYXJ0aWNsZXMvUGFydGljbGVDb250YWluZXInKSxcbiAgICBTcHJpdGVSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXInKSxcbiAgICBQYXJ0aWNsZVJlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyJyksXG5cbiAgICAvLyB0ZXh0XG4gICAgVGV4dDogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0L1RleHQnKSxcblxuICAgIC8vIHByaW1pdGl2ZXNcbiAgICBHcmFwaGljczogICAgICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzJyksXG4gICAgR3JhcGhpY3NEYXRhOiAgICAgICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljc0RhdGEnKSxcbiAgICBHcmFwaGljc1JlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHR1cmVzXG4gICAgVGV4dHVyZTogICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQmFzZVRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlVGV4dHVyZScpLFxuICAgIFJlbmRlclRleHR1cmU6ICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEJhc2VSZW5kZXJUZXh0dXJlOiAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlOiAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzOiAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmVVdnMnKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIGNhbnZhc1xuICAgIENhbnZhc1JlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIENhbnZhc0J1ZmZlcjogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIHdlYmdsXG4gICAgV2ViR0xSZW5kZXJlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyksXG4gICAgU2hhZGVyTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIFNoYWRlcjogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyJyksXG4gICAgT2JqZWN0UmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBSZW5kZXJUYXJnZXQ6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcblxuICAgIC8vIGZpbHRlcnMgLSB3ZWJnbFxuICAgIEFic3RyYWN0RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBGWEFBRmlsdGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBTcHJpdGVNYXNrRmlsdGVyOiAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKSxcblxuICAgIGdsQ29yZTogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncGl4aS1nbC1jb3JlJyksXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoaWNoIHJlbmRlcmVyIHlvdSBzaG91bGQgYmUgdXNpbmcuXG4gICAgICogV2ViR0wgaXMgdGhlIHByZWZlcnJlZCByZW5kZXJlciBhcyBpdCBpcyBhIGxvdCBmYXN0ZXIuIElmIHdlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnlcbiAgICAgKiB0aGUgYnJvd3NlciB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBjYW52YXMgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHBhcmFtIHdpZHRoPTgwMCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIGhlaWdodD02MDAge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWYgeW91XG4gICAgICogICAgICBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0XG4gICAgICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyLCByZXRpbmEgd291bGQgYmUgMlxuICAgICAqIEBwYXJhbSBbbm9XZWJHTD1mYWxzZV0ge2Jvb2xlYW59IHByZXZlbnRzIHNlbGVjdGlvbiBvZiBXZWJHTCByZW5kZXJlciwgZXZlbiBpZiBzdWNoIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyZXJ8Q2FudmFzUmVuZGVyZXJ9IFJldHVybnMgV2ViR0wgcmVuZGVyZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgQ2FudmFzUmVuZGVyZXJcbiAgICAgKi9cbiAgICBhdXRvRGV0ZWN0UmVuZGVyZXI6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCBub1dlYkdMKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB3aWR0aCB8fCA4MDA7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAgICAgaWYgKCFub1dlYkdMICYmIGNvcmUudXRpbHMuaXNXZWJHTFN1cHBvcnRlZCgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGNvcmUuV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgY29yZS5DYW52YXNSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB9XG59KTtcbiIsIi8vIEB0b2RvIC0gaWdub3JlIHRoZSB0b28gbWFueSBwYXJhbWV0ZXJzIHdhcm5pbmcgZm9yIG5vd1xuLy8gc2hvdWxkIGVpdGhlciBmaXggaXQgb3IgY2hhbmdlIHRoZSBqc2hpbnQgY29uZmlnXG4vLyBqc2hpbnQgLVcwNzJcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xuXG4vKipcbiAqIFRoZSBwaXhpIE1hdHJpeCBjbGFzcyBhcyBhbiBvYmplY3QsIHdoaWNoIG1ha2VzIGl0IGEgbG90IGZhc3RlcixcbiAqIGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBpdCA6XG4gKiB8IGEgfCBiIHwgdHh8XG4gKiB8IGMgfCBkIHwgdHl8XG4gKiB8IDAgfCAwIHwgMSB8XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBNYXRyaXgoKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5iID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5jID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHkgPSAwO1xufVxuXG5NYXRyaXgucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWF0cml4O1xubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1hdHJpeCBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5LiBUaGUgRWxlbWVudCB0byBNYXRyaXggbWFwcGluZyBvcmRlciBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIGEgPSBhcnJheVswXVxuICogYiA9IGFycmF5WzFdXG4gKiBjID0gYXJyYXlbM11cbiAqIGQgPSBhcnJheVs0XVxuICogdHggPSBhcnJheVsyXVxuICogdHkgPSBhcnJheVs1XVxuICpcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119IFRoZSBhcnJheSB0aGF0IHRoZSBtYXRyaXggd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbS5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpXG57XG4gICAgdGhpcy5hID0gYXJyYXlbMF07XG4gICAgdGhpcy5iID0gYXJyYXlbMV07XG4gICAgdGhpcy5jID0gYXJyYXlbM107XG4gICAgdGhpcy5kID0gYXJyYXlbNF07XG4gICAgdGhpcy50eCA9IGFycmF5WzJdO1xuICAgIHRoaXMudHkgPSBhcnJheVs1XTtcbn07XG5cblxuLyoqXG4gKiBzZXRzIHRoZSBtYXRyaXggcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkXG4gKiBAcGFyYW0ge251bWJlcn0gdHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXG57XG4gICAgdGhpcy5hID0gYTtcbiAgICB0aGlzLmIgPSBiO1xuICAgIHRoaXMuYyA9IGM7XG4gICAgdGhpcy5kID0gZDtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy50eSA9IHR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmcm9tIHRoZSBjdXJyZW50IE1hdHJpeCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9zZSB7Ym9vbGVhbn0gV2hldGhlciB3ZSBuZWVkIHRvIHRyYW5zcG9zZSB0aGUgbWF0cml4IG9yIG5vdFxuICogQHBhcmFtIFtvdXRdIHtBcnJheX0gSWYgcHJvdmlkZWQgdGhlIGFycmF5IHdpbGwgYmUgYXNzaWduZWQgdG8gb3V0XG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gdGhlIG5ld2x5IGNyZWF0ZWQgYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAodHJhbnNwb3NlLCBvdXQpXG57XG4gICAgaWYgKCF0aGlzLmFycmF5KVxuICAgIHtcbiAgICAgICAgdGhpcy5hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gb3V0IHx8IHRoaXMuYXJyYXk7XG5cbiAgICBpZiAodHJhbnNwb3NlKVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVsyXSA9IDA7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSAwO1xuICAgICAgICBhcnJheVs2XSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzddID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzJdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzZdID0gMDtcbiAgICAgICAgYXJyYXlbN10gPSAwO1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZSB0byB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gcmVuZGVyaW5nKVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5hICogeCArIHRoaXMuYyAqIHkgKyB0aGlzLnR4O1xuICAgIG5ld1Bvcy55ID0gdGhpcy5iICogeCArIHRoaXMuZCAqIHkgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGludmVyc2Ugb2YgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UgdG8gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIGlucHV0KVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHlJbnZlcnNlID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciBpZCA9IDEgLyAodGhpcy5hICogdGhpcy5kICsgdGhpcy5jICogLXRoaXMuYik7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuZCAqIGlkICogeCArIC10aGlzLmMgKiBpZCAqIHkgKyAodGhpcy50eSAqIHRoaXMuYyAtIHRoaXMudHggKiB0aGlzLmQpICogaWQ7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmEgKiBpZCAqIHkgKyAtdGhpcy5iICogaWQgKiB4ICsgKC10aGlzLnR5ICogdGhpcy5hICsgdGhpcy50eCAqIHRoaXMuYikgKiBpZDtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdHJpeCBvbiB0aGUgeCBhbmQgeS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMudHggKz0geDtcbiAgICB0aGlzLnR5ICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIHNjYWxlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIGFtb3VudCB0byBzY2FsZSBob3Jpem9udGFsbHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSBhbW91bnQgdG8gc2NhbGUgdmVydGljYWxseVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2NhbGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmEgKj0geDtcbiAgICB0aGlzLmQgKj0geTtcbiAgICB0aGlzLmMgKj0geDtcbiAgICB0aGlzLmIgKj0geTtcbiAgICB0aGlzLnR4ICo9IHg7XG4gICAgdGhpcy50eSAqPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyBhIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpXG57XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKCBhbmdsZSApO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbiggYW5nbGUgKTtcblxuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICB0aGlzLmEgPSBhMSAqIGNvcy10aGlzLmIgKiBzaW47XG4gICAgdGhpcy5iID0gYTEgKiBzaW4rdGhpcy5iICogY29zO1xuICAgIHRoaXMuYyA9IGMxICogY29zLXRoaXMuZCAqIHNpbjtcbiAgICB0aGlzLmQgPSBjMSAqIHNpbit0aGlzLmQgKiBjb3M7XG4gICAgdGhpcy50eCA9IHR4MSAqIGNvcyAtIHRoaXMudHkgKiBzaW47XG4gICAgdGhpcy50eSA9IHR4MSAqIHNpbiArIHRoaXMudHkgKiBjb3M7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG5cbiAgICB0aGlzLmEgID0gbWF0cml4LmEgKiBhMSArIG1hdHJpeC5iICogYzE7XG4gICAgdGhpcy5iICA9IG1hdHJpeC5hICogYjEgKyBtYXRyaXguYiAqIGQxO1xuICAgIHRoaXMuYyAgPSBtYXRyaXguYyAqIGExICsgbWF0cml4LmQgKiBjMTtcbiAgICB0aGlzLmQgID0gbWF0cml4LmMgKiBiMSArIG1hdHJpeC5kICogZDE7XG5cbiAgICB0aGlzLnR4ID0gbWF0cml4LnR4ICogYTEgKyBtYXRyaXgudHkgKiBjMSArIHRoaXMudHg7XG4gICAgdGhpcy50eSA9IG1hdHJpeC50eCAqIGIxICsgbWF0cml4LnR5ICogZDEgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1hdHJpeCBiYXNlZCBvbiBhbGwgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RYXG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RZXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXG4gKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WFxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdZXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKHgsIHksIHBpdm90WCwgcGl2b3RZLCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSlcbntcbiAgICB2YXIgYSwgYiwgYywgZCwgc3IsIGNyLCBjeSwgc3ksIG5zeCwgY3g7XG5cbiAgICBzciAgPSBNYXRoLnNpbihyb3RhdGlvbik7XG4gICAgY3IgID0gTWF0aC5jb3Mocm90YXRpb24pO1xuICAgIGN5ICA9IE1hdGguY29zKHNrZXdZKTtcbiAgICBzeSAgPSBNYXRoLnNpbihza2V3WSk7XG4gICAgbnN4ID0gLU1hdGguc2luKHNrZXdYKTtcbiAgICBjeCAgPSAgTWF0aC5jb3Moc2tld1gpO1xuXG4gICAgYSAgPSAgY3IgKiBzY2FsZVg7XG4gICAgYiAgPSAgc3IgKiBzY2FsZVg7XG4gICAgYyAgPSAtc3IgKiBzY2FsZVk7XG4gICAgZCAgPSAgY3IgKiBzY2FsZVk7XG5cbiAgICB0aGlzLmEgID0gY3kgKiBhICsgc3kgKiBjO1xuICAgIHRoaXMuYiAgPSBjeSAqIGIgKyBzeSAqIGQ7XG4gICAgdGhpcy5jICA9IG5zeCAqIGEgKyBjeCAqIGM7XG4gICAgdGhpcy5kICA9IG5zeCAqIGIgKyBjeCAqIGQ7XG5cbiAgICB0aGlzLnR4ID0geCArICggcGl2b3RYICogYSArIHBpdm90WSAqIGMgKTtcbiAgICB0aGlzLnR5ID0geSArICggcGl2b3RYICogYiArIHBpdm90WSAqIGQgKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQcmVwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uKG1hdHJpeClcbntcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIGlmIChtYXRyaXguYSAhPT0gMSB8fCBtYXRyaXguYiAhPT0gMCB8fCBtYXRyaXguYyAhPT0gMCB8fCBtYXRyaXguZCAhPT0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICAgICAgdmFyIGMxID0gdGhpcy5jO1xuICAgICAgICB0aGlzLmEgID0gYTEqbWF0cml4LmErdGhpcy5iKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmIgID0gYTEqbWF0cml4LmIrdGhpcy5iKm1hdHJpeC5kO1xuICAgICAgICB0aGlzLmMgID0gYzEqbWF0cml4LmErdGhpcy5kKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmQgID0gYzEqbWF0cml4LmIrdGhpcy5kKm1hdHJpeC5kO1xuICAgIH1cblxuICAgIHRoaXMudHggPSB0eDEqbWF0cml4LmErdGhpcy50eSptYXRyaXguYyttYXRyaXgudHg7XG4gICAgdGhpcy50eSA9IHR4MSptYXRyaXguYit0aGlzLnR5Km1hdHJpeC5kK21hdHJpeC50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0ID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcbiAgICB2YXIgbiA9IGExKmQxLWIxKmMxO1xuXG4gICAgdGhpcy5hID0gZDEvbjtcbiAgICB0aGlzLmIgPSAtYjEvbjtcbiAgICB0aGlzLmMgPSAtYzEvbjtcbiAgICB0aGlzLmQgPSBhMS9uO1xuICAgIHRoaXMudHggPSAoYzEqdGhpcy50eS1kMSp0eDEpL247XG4gICAgdGhpcy50eSA9IC0oYTEqdGhpcy50eS1iMSp0eDEpL247XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBSZXNldHMgdGhpcyBNYXRpeCB0byBhbiBpZGVudGl0eSAoZGVmYXVsdCkgbWF0cml4LlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmlkZW50aXR5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmEgPSAxO1xuICAgIHRoaXMuYiA9IDA7XG4gICAgdGhpcy5jID0gMDtcbiAgICB0aGlzLmQgPSAxO1xuICAgIHRoaXMudHggPSAwO1xuICAgIHRoaXMudHkgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgTWF0cml4IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gQSBjb3B5IG9mIHRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgdmFsdWVzIG9mIHRoZSBnaXZlbiBtYXRyaXggdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZXMgaW4gdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhlIG1hdHJpeCBnaXZlbiBpbiBwYXJhbWV0ZXIgd2l0aCBpdHMgdmFsdWVzIHVwZGF0ZWQuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQSBkZWZhdWx0IChpZGVudGl0eSkgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5JREVOVElUWSA9IG5ldyBNYXRyaXgoKTtcblxuLyoqXG4gKiBBIHRlbXAgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5URU1QX01BVFJJWCA9IG5ldyBNYXRyaXgoKTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcbn1cblxuUG9pbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvaW50XG4gKlxuICogQHJldHVybiB7UElYSS5Qb2ludH0gYSBjb3B5IG9mIHRoZSBwb2ludFxuICovXG5Qb2ludC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBDb3BpZXMgeCBhbmQgeSBmcm9tIHRoZSBnaXZlbiBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICovXG5Qb2ludC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgdGhpcy5zZXQocC54LCBwLnkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGVxdWFsIHRvIHRoaXMgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gKHAueCA9PT0gdGhpcy54KSAmJiAocC55ID09PSB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5Qb2ludC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy54ID0geCB8fCAwO1xuICAgIHRoaXMueSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLnggOiAwICkgO1xufTtcbiIsIi8qKlxuICogTWF0aCBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgbWl4ZWQgaW50byBQSVhJIG5hbWVzcGFjZS5cbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBUaGVzZSB3aWxsIGJlIG1peGVkIHRvIGJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLFxuICAgIC8vIHdoaWxlIHRoaXMgbW9kdWxlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBjb3JlXG4gICAgLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBjdXQgZG93biBvblxuICAgIC8vIGludGVybmFsIG1vZHVsZSByZXF1aXJlcy5cblxuICAgIFBvaW50OiAgICAgIHJlcXVpcmUoJy4vUG9pbnQnKSxcbiAgICBNYXRyaXg6ICAgICByZXF1aXJlKCcuL01hdHJpeCcpLFxuXG4gICAgQ2lyY2xlOiAgICAgcmVxdWlyZSgnLi9zaGFwZXMvQ2lyY2xlJyksXG4gICAgRWxsaXBzZTogICAgcmVxdWlyZSgnLi9zaGFwZXMvRWxsaXBzZScpLFxuICAgIFBvbHlnb246ICAgIHJlcXVpcmUoJy4vc2hhcGVzL1BvbHlnb24nKSxcbiAgICBSZWN0YW5nbGU6ICByZXF1aXJlKCcuL3NoYXBlcy9SZWN0YW5nbGUnKSxcbiAgICBSb3VuZGVkUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlJylcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIENpcmNsZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICovXG5mdW5jdGlvbiBDaXJjbGUoeCwgeSwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkNJUkM7XG59XG5cbkNpcmNsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaXJjbGU7XG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBDaXJjbGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkNpcmNsZX0gYSBjb3B5IG9mIHRoZSBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBDaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBjaXJjbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmFkaXVzIDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGR4ID0gKHRoaXMueCAtIHgpLFxuICAgICAgICBkeSA9ICh0aGlzLnkgLSB5KSxcbiAgICAgICAgcjIgPSB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzO1xuXG4gICAgZHggKj0gZHg7XG4gICAgZHkgKj0gZHk7XG5cbiAgICByZXR1cm4gKGR4ICsgZHkgPD0gcjIpO1xufTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBjaXJjbGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4qIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiovXG5DaXJjbGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy5yYWRpdXMsIHRoaXMueSAtIHRoaXMucmFkaXVzLCB0aGlzLnJhZGl1cyAqIDIsIHRoaXMucmFkaXVzICogMik7XG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBFbGxpcHNlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGlzIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZVxuICovXG5mdW5jdGlvbiBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkVMSVA7XG59XG5cbkVsbGlwc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRWxsaXBzZTtcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBFbGxpcHNlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5FbGxpcHNlfSBhIGNvcHkgb2YgdGhlIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgRWxsaXBzZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRzIGFyZSB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vbm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDBcbiAgICB2YXIgbm9ybXggPSAoKHggLSB0aGlzLngpIC8gdGhpcy53aWR0aCksXG4gICAgICAgIG5vcm15ID0gKCh5IC0gdGhpcy55KSAvIHRoaXMuaGVpZ2h0KTtcblxuICAgIG5vcm14ICo9IG5vcm14O1xuICAgIG5vcm15ICo9IG5vcm15O1xuXG4gICAgcmV0dXJuIChub3JteCArIG5vcm15IDw9IDEpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgZWxsaXBzZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy53aWR0aCwgdGhpcy55IC0gdGhpcy5oZWlnaHQsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG4iLCJ2YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9Qb2ludCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcG9pbnRzIHtQSVhJLlBvaW50W118bnVtYmVyW118Li4uUElYSS5Qb2ludHwuLi5udW1iZXJ9IFRoaXMgY2FuIGJlIGFuIGFycmF5IG9mIFBvaW50cyB0aGF0IGZvcm0gdGhlIHBvbHlnb24sXG4gKiAgICAgIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIHRoYXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBbeCx5LCB4LHksIC4uLl0sIG9yIHRoZSBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZVxuICogICAgICBhbGwgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvbiBlLmcuIGBuZXcgUElYSS5Qb2x5Z29uKG5ldyBQSVhJLlBvaW50KCksIG5ldyBQSVhJLlBvaW50KCksIC4uLilgLCBvciB0aGVcbiAqICAgICAgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmUgZmxhdCB4LHkgdmFsdWVzIGUuZy4gYG5ldyBQb2x5Z29uKHgseSwgeCx5LCB4LHksIC4uLilgIHdoZXJlIGB4YCBhbmQgYHlgIGFyZVxuICogICAgICBOdW1iZXJzLlxuICovXG5mdW5jdGlvbiBQb2x5Z29uKHBvaW50c18pXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBvaW50c187XG5cbiAgICAvL2lmIHBvaW50cyBpc24ndCBhbiBhcnJheSwgdXNlIGFyZ3VtZW50cyBhcyB0aGUgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgcG9pbnRzLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICBwb2ludHNbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IG9mIHBvaW50cywgY29udmVydCBpdCB0byBhIGZsYXQgYXJyYXkgb2YgbnVtYmVyc1xuICAgIGlmIChwb2ludHNbMF0gaW5zdGFuY2VvZiBQb2ludClcbiAgICB7XG4gICAgICAgIHZhciBwID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBwLnB1c2gocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50cyA9IHA7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5QT0xZO1xufVxuXG5Qb2x5Z29uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvbHlnb247XG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9seWdvblxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9seWdvbn0gYSBjb3B5IG9mIHRoZSBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvbHlnb24odGhpcy5wb2ludHMuc2xpY2UoKSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcG9seWdvblxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBpbnNpZGUgPSBmYWxzZTtcblxuICAgIC8vIHVzZSBzb21lIHJheWNhc3RpbmcgdG8gdGVzdCBoaXRzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL3BvaW50LWluLXBvbHlnb24vYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5wb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbGVuZ3RoIC0gMTsgaSA8IGxlbmd0aDsgaiA9IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB4aSA9IHRoaXMucG9pbnRzW2kgKiAyXSwgeWkgPSB0aGlzLnBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgeGogPSB0aGlzLnBvaW50c1tqICogMl0sIHlqID0gdGhpcy5wb2ludHNbaiAqIDIgKyAxXSxcbiAgICAgICAgICAgIGludGVyc2VjdCA9ICgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICh4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aSk7XG5cbiAgICAgICAgaWYgKGludGVyc2VjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiB0aGUgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcmVjdGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SRUNUO1xufVxuXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XG5cbi8qKlxuICogQSBjb25zdGFudCBlbXB0eSByZWN0YW5nbGUuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblJlY3RhbmdsZS5FTVBUWSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDwgdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDwgdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFJvdW5kZWQgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIHRoYXQgaGFzIG5pY2Ugcm91bmRlZCBjb3JuZXJzLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodCBhbmQgaXRzIHJhZGl1cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gQ29udHJvbHMgdGhlIHJhZGl1cyBvZiB0aGUgcm91bmRlZCBjb3JuZXJzXG4gKi9cbmZ1bmN0aW9uIFJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJSRUM7XG59XG5cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm91bmRlZFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUm91bmRlZFJlY3RhbmdsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUm91bmRlZFJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSb3VuZGVkUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8PSB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUGFydGljbGVDb250YWluZXIgY2xhc3MgaXMgYSByZWFsbHkgZmFzdCB2ZXJzaW9uIG9mIHRoZSBDb250YWluZXIgYnVpbHQgc29sZWx5IGZvciBzcGVlZCxcbiAqIHNvIHVzZSB3aGVuIHlvdSBuZWVkIGEgbG90IG9mIHNwcml0ZXMgb3IgcGFydGljbGVzLiBUaGUgdHJhZGVvZmYgb2YgdGhlIFBhcnRpY2xlQ29udGFpbmVyIGlzIHRoYXQgYWR2YW5jZWRcbiAqIGZ1bmN0aW9uYWxpdHkgd2lsbCBub3Qgd29yay4gUGFydGljbGVDb250YWluZXIgaW1wbGVtZW50cyBvbmx5IHRoZSBiYXNpYyBvYmplY3QgdHJhbnNmb3JtIChwb3NpdGlvbiwgc2NhbGUsIHJvdGF0aW9uKS5cbiAqIEFueSBvdGhlciBmdW5jdGlvbmFsaXR5IGxpa2UgdGludGluZywgbWFza2luZywgZXRjIHdpbGwgbm90IHdvcmsgb24gc3ByaXRlcyBpbiB0aGlzIGJhdGNoLlxuICpcbiAqIEl0J3MgZXh0cmVtZWx5IGVhc3kgdG8gdXNlIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQYXJ0aWNsZUNvbnRhaW5lcigpO1xuICpcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpXG4gKiB7XG4gKiAgICAgdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJteUltYWdlLnBuZ1wiKTtcbiAqICAgICBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEFuZCBoZXJlIHlvdSBoYXZlIGEgaHVuZHJlZCBzcHJpdGVzIHRoYXQgd2lsbCBiZSByZW5kZXJlciBhdCB0aGUgc3BlZWQgb2YgbGlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbbWF4U2l6ZT0xNTAwMF0ge251bWJlcn0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGF0IGNhbiBiZSByZW5kZXJlciBieSB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzXSB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyBvZiBjaGlsZHJlbiB0aGF0IHNob3VsZCBiZSB1cGxvYWRlZCB0byB0aGUgZ3B1IGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnNjYWxlPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBzY2FsZSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5wb3NpdGlvbj10cnVlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBwb3NpdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5yb3RhdGlvbj1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcm90YXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMudXZzPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCB1dnMgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuYWxwaGE9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIGFscGhhIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtiYXRjaFNpemU9MTUwMDBdIHtudW1iZXJ9IE51bWJlciBvZiBwYXJ0aWNsZXMgcGVyIGJhdGNoLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUNvbnRhaW5lcihtYXhTaXplLCBwcm9wZXJ0aWVzLCBiYXRjaFNpemUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBiYXRjaFNpemUgPSBiYXRjaFNpemUgfHwgMTUwMDA7IC8vQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG4gICAgbWF4U2l6ZSA9IG1heFNpemUgfHwgMTUwMDA7XG5cbiAgICAvLyBNYWtpbmcgc3VyZSB0aGUgYmF0Y2ggc2l6ZSBpcyB2YWxpZFxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICB2YXIgbWF4QmF0Y2hTaXplID0gMTYzODQ7XG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhCYXRjaFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgcHJvcGVydGllcyB0byBiZSBkeW5hbWljICh0cnVlKSAvIHN0YXRpYyAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFuW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmF0Y2hTaXplID0gYmF0Y2hTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICpcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlQ2hpbGRyZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBjYW52YXMgcmVuZGVyZXJpbmcuIElmIHRydWUgdGhlbiB0aGUgZWxlbWVudHMgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBuZWFyZXN0IHBpeGVsLiBUaGlzIHByb3ZpZGVzIGEgbmljZSBzcGVlZCBib29zdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZTtcbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbn1cblxuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBwcml2YXRlIHByb3BlcnRpZXMgYXJyYXkgdG8gZHluYW1pYyAvIHN0YXRpYyBiYXNlZCBvbiB0aGUgcGFzc2VkIHByb3BlcnRpZXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMge29iamVjdH0gVGhlIHByb3BlcnRpZXMgdG8gYmUgdXBsb2FkZWRcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnNldFByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKVxue1xuICAgIGlmICggcHJvcGVydGllcyApIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1swXSA9ICdzY2FsZScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5zY2FsZSA6IHRoaXMuX3Byb3BlcnRpZXNbMF07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMV0gPSAncG9zaXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucG9zaXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzFdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzJdID0gJ3JvdGF0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnJvdGF0aW9uIDogdGhpcy5fcHJvcGVydGllc1syXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1szXSA9ICd1dnMnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMudXZzIDogdGhpcy5fcHJvcGVydGllc1szXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1s0XSA9ICdhbHBoYScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5hbHBoYSA6IHRoaXMuX3Byb3BlcnRpZXNbNF07XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcblxuICAgIC8vIFRPRE8gZG9uJ3QgbmVlZCB0byFcbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAvLyAgUElYSS5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybS5jYWxsKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRhaW5lciB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHdlYmdsIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIoIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUgKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlLnJlbmRlciggdGhpcyApO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGZsYWcgdGhhdCBzdGF0aWMgZGF0YSBzaG91bGQgYmUgdXBkYXRlZCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoc21hbGxlc3RDaGlsZEluZGV4KVxue1xuICAgIHZhciBidWZmZXJJbmRleCA9IE1hdGguZmxvb3Ioc21hbGxlc3RDaGlsZEluZGV4IC8gdGhpcy5fYmF0Y2hTaXplKTtcbiAgICBpZiAoYnVmZmVySW5kZXggPCB0aGlzLl9idWZmZXJUb1VwZGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IGJ1ZmZlckluZGV4O1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciBpc1JvdGF0ZWQgPSB0cnVlO1xuXG4gICAgdmFyIHBvc2l0aW9uWCA9IDA7XG4gICAgdmFyIHBvc2l0aW9uWSA9IDA7XG5cbiAgICB2YXIgZmluYWxXaWR0aCA9IDA7XG4gICAgdmFyIGZpbmFsSGVpZ2h0ID0gMDtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZSA9IGNoaWxkLnRleHR1cmUuZnJhbWU7XG5cbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYSAqIGNoaWxkLmFscGhhO1xuXG4gICAgICAgIGlmIChjaGlsZC5yb3RhdGlvbiAlIChNYXRoLlBJICogMikgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZhc3Rlc3QgIHdheSB0byBvcHRpbWlzZSEgLSBpZiByb3RhdGlvbiBpcyAwIHRoZW4gd2UgY2FuIGF2b2lkIGFueSBraW5kIG9mIHNldFRyYW5zZm9ybSBjYWxsXG4gICAgICAgICAgICBpZiAoaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLngpICsgY2hpbGQucG9zaXRpb24ueCAgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnkpICsgY2hpbGQucG9zaXRpb24ueSAgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54O1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55O1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZC5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZFRyYW5zZm9ybSA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHkgfCAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoKSArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0KSArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICBjaGlsZC50ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgIGZyYW1lLngsXG4gICAgICAgICAgICBmcmFtZS55LFxuICAgICAgICAgICAgZnJhbWUud2lkdGgsXG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQsXG4gICAgICAgICAgICBwb3NpdGlvblgsXG4gICAgICAgICAgICBwb3NpdGlvblksXG4gICAgICAgICAgICBmaW5hbFdpZHRoLFxuICAgICAgICAgICAgZmluYWxIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIGlmICh0aGlzLl9idWZmZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcbn07XG4iLCJcbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVCdWZmZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlQnVmZmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFRoZSBwYXJ0aWNsZSBidWZmZXIgbWFuYWdlcyB0aGUgc3RhdGljIGFuZCBkeW5hbWljIGJ1ZmZlcnMgZm9yIGEgcGFydGljbGUgY29udGFpbmVyLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQnVmZmVyKGdsLCBwcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgc2l6ZSlcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleCBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhlIGJ1ZmZlciBjYW4gaG9sZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgZHluYW1pYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBzdGF0aWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgaWYoZHluYW1pY1Byb3BlcnR5RmxhZ3NbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRCdWZmZXJzKCk7XG5cbn1cblxuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQnVmZmVyO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5pbml0QnVmZmVycyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcHJvcGVydHk7XG5cbiAgICB2YXIgZHluYW1pY09mZnNldCA9IDA7XG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IGR5bmFtaWNPZmZzZXQ7XG4gICAgICAgIGR5bmFtaWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5keW5hbWljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG5cblxuICAgIC8vIHN0YXRpYyAvL1xuICAgIHZhciBzdGF0aWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBzdGF0aWNPZmZzZXQ7XG4gICAgICAgIHN0YXRpY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLnN0YXRpY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuc3RhdGljU3RyaWRlICogNCk7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZHluYW1pYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZER5bmFtaWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLmR5bmFtaWNEYXRhLCB0aGlzLmR5bmFtaWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuZHluYW1pY0RhdGEpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBzdGF0aWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWRTdGF0aWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5zdGF0aWNEYXRhLCB0aGlzLnN0YXRpY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLnN0YXRpY0RhdGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyB0byB0aGUgR1BVXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaSwgcHJvcGVydHk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnN0YXRpY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlQnVmZmVyLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5zdGF0aWNCdWZmZXIpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlU2hhZGVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZVNoYWRlcicpLFxuICAgIFBhcnRpY2xlQnVmZmVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUJ1ZmZlcicpLFxuICAgIG1hdGggICAgICAgICAgICA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgLy8gYW5kIG1heCBudW1iZXIgb2YgZWxlbWVudCBpbiB0aGUgaW5kZXggYnVmZmVyIGlzIDE2Mzg0ICogNiA9IDk4MzA0XG4gICAgLy8gQ3JlYXRpbmcgYSBmdWxsIGluZGV4IGJ1ZmZlciwgb3ZlcmhlYWQgaXMgOTgzMDQgKiAyID0gMTk2S29cbiAgICB2YXIgbnVtSW5kaWNlcyA9IDk4MzA0O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShudW1JbmRpY2VzKTtcblxuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgbnVtSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IG51bGw7XG5cbiAgICB0aGlzLnRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcbn1cblxuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3BhcnRpY2xlJywgUGFydGljbGVSZW5kZXJlcik7XG5cbi8qKlxuICogV2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IG5ldyBQYXJ0aWNsZVNoYWRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIpO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IGluZGV4LCBzbyA2NTUzNSAvIDYgPSAxMDkyMi5cblxuICAgIC8vdXBsb2FkIHRoZSBpbmRleCBkYXRhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBbXG4gICAgICAgIC8vIHZlcnRpY2VzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFZlcnRpY2VzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcG9zaXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbkNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRQb3NpdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJvdGF0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUm90YXRpb24sXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFJvdGF0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdXZzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRVdnMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBhbHBoYURhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRBbHBoYSxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgcGFydGljbGUgYmF0Y2guXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGJpbmQgdGhlIG1haW4gdGV4dHVyZVxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgLy8gYmluZCB0aGUgYnVmZmVyc1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgcGFydGljbGUgY29udGFpbmVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgY2hpbGRyZW4gPSBjb250YWluZXIuY2hpbGRyZW4sXG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIG1heFNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplO1xuXG4gICAgaWYodG90YWxDaGlsZHJlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZih0b3RhbENoaWxkcmVuID4gbWF4U2l6ZSlcbiAgICB7XG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBtYXhTaXplO1xuICAgIH1cblxuICAgIGlmKCFjb250YWluZXIuX2J1ZmZlcnMpXG4gICAge1xuICAgICAgICBjb250YWluZXIuX2J1ZmZlcnMgPSB0aGlzLmdlbmVyYXRlQnVmZmVycyggY29udGFpbmVyICk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29udGFpbmVyLmJsZW5kTW9kZSk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIG0gPSAgY29udGFpbmVyLndvcmxkVHJhbnNmb3JtLmNvcHkoIHRoaXMudGVtcE1hdHJpeCApO1xuICAgIG0ucHJlcGVuZCggdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXggKTtcbiAgICBnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgbS50b0FycmF5KHRydWUpKTtcbiAgICBnbC51bmlmb3JtMWYodGhpcy5zaGFkZXIudW5pZm9ybXMudUFscGhhLl9sb2NhdGlvbiwgY29udGFpbmVyLndvcmxkQWxwaGEpO1xuXG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHRleHR1cmUgaXMgYm91bmQuLlxuICAgIHZhciBiYXNlVGV4dHVyZSA9IGNoaWxkcmVuWzBdLl90ZXh0dXJlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgdGV4dHVyZSBoYXMgbm90IHVwZGF0ZWQgdGhlbiBsZXRzIG5vdCB1cGxvYWQgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmKCF0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUoYmFzZVRleHR1cmUpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZighY29udGFpbmVyLl9wcm9wZXJ0aWVzWzBdIHx8ICFjb250YWluZXIuX3Byb3BlcnRpZXNbM10pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgfVxuXG4gICAgLy8gbm93IGxldHMgdXBsb2FkIGFuZCByZW5kZXIgdGhlIGJ1ZmZlcnMuLlxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IHRvdGFsQ2hpbGRyZW47IGkgKz0gYmF0Y2hTaXplLCBqICs9IDEpXG4gICAge1xuICAgICAgICB2YXIgYW1vdW50ID0gKCB0b3RhbENoaWxkcmVuIC0gaSk7XG4gICAgICAgIGlmKGFtb3VudCA+IGJhdGNoU2l6ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50ID0gYmF0Y2hTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRhaW5lci5fYnVmZmVyc1tqXTtcblxuICAgICAgICAvLyB3ZSBhbHdheXMgdXBsb2FkIHRoZSBkeW5hbWljXG4gICAgICAgIGJ1ZmZlci51cGxvYWREeW5hbWljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuXG4gICAgICAgIC8vIHdlIG9ubHkgdXBsb2FkIHRoZSBzdGF0aWMgY29udGVudCB3aGVuIHdlIGhhdmUgdG8hXG4gICAgICAgIGlmKGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPT09IGopXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJ1ZmZlci51cGxvYWRTdGF0aWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gaiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5kIHRoZSBidWZmZXJcbiAgICAgICAgYnVmZmVyLmJpbmQoIHRoaXMuc2hhZGVyICk7XG5cbiAgICAgICAgIC8vIG5vdyBkcmF3IHRob3NlIHN1Y2thcyFcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgYW1vdW50ICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBvbmUgcGFydGljbGUgYnVmZmVyIGZvciBlYWNoIGNoaWxkIGluIHRoZSBjb250YWluZXIgd2Ugd2FudCB0byByZW5kZXIgYW5kIHVwZGF0ZXMgaW50ZXJuYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5nZW5lcmF0ZUJ1ZmZlcnMgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIGJ1ZmZlcnMgPSBbXSxcbiAgICAgICAgc2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemUsXG4gICAgICAgIGR5bmFtaWNQcm9wZXJ0eUZsYWdzID0gY29udGFpbmVyLl9wcm9wZXJ0aWVzLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gYmF0Y2hTaXplKVxuICAgIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKG5ldyBQYXJ0aWNsZUJ1ZmZlcihnbCwgdGhpcy5wcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgYmF0Y2hTaXplKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHZlcnRpY2llcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgdmVydGljZXMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFZlcnRpY2VzID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICB2YXIgc3ByaXRlLFxuICAgICAgICB0ZXh0dXJlLFxuICAgICAgICB0cmltLFxuICAgICAgICBzeCxcbiAgICAgICAgc3ksXG4gICAgICAgIHcwLCB3MSwgaDAsIGgxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xuXG4gICAgICAgIHNwcml0ZSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXTtcbiAgICAgICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZTtcbiAgICAgICAgc3ggPSBzcHJpdGUuc2NhbGUueDtcbiAgICAgICAgc3kgPSBzcHJpdGUuc2NhbGUueTtcblxuICAgICAgICBpZiAodGV4dHVyZS50cmltKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgICAgICB0cmltID0gdGV4dHVyZS50cmltO1xuXG4gICAgICAgICAgICB3MSA9IHRyaW0ueCAtIHNwcml0ZS5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBoMSA9IHRyaW0ueSAtIHNwcml0ZS5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtc3ByaXRlLmFuY2hvci54KTtcbiAgICAgICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtc3ByaXRlLmFuY2hvci54O1xuXG4gICAgICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXNwcml0ZS5hbmNob3IueSk7XG4gICAgICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC1zcHJpdGUuYW5jaG9yLnk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBwb3NpdGlvbnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFBvc2l0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUG9zaXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucG9zaXRpb247XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcm90YXRpb24gdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFJvdGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUm90YXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucm90YXRpb247XG5cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVSb3RhdGlvbjtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgVXZzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRVdnMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlVXZzID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLl90ZXh0dXJlLl91dnM7XG5cbiAgICAgICAgaWYgKHRleHR1cmVVdnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSB0ZXh0dXJlVXZzLngwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZXh0dXJlVXZzLnkwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdGV4dHVyZVV2cy54MTtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gdGV4dHVyZVV2cy55MTtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB0ZXh0dXJlVXZzLngyO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gdGV4dHVyZVV2cy55MjtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB0ZXh0dXJlVXZzLngzO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gdGV4dHVyZVV2cy55MztcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8geW91IGtub3cgdGhpcyBjYW4gYmUgZWFzaWVyIVxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBhbHBoYSB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkQWxwaGEgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZUFscGhhID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLmFscGhhO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZUFscGhhO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVSZW5kZXJlci5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuICAgIHRoaXMudGVtcE1hdHJpeCA9IG51bGw7XG59O1xuIiwidmFyIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVTaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBUZXh0dXJlU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFQb3NpdGlvbkNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVNjYWxlOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFSb3RhdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIHZlYzIgdiA9IGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAnICAgdi54ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIGNvcyhhUm90YXRpb24pIC0gKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIHNpbihhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdi55ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIHNpbihhUm90YXRpb24pICsgKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIGNvcyhhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdiA9IHYgKyBhUG9zaXRpb25Db29yZDsnLFxuXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyh2LCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGhlbGxvXG4gICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCB1QWxwaGE7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3IgKiB1QWxwaGE7JyxcbiAgICAgICAgICAgICcgIGlmIChjb2xvci5hID09IDAuMCkgZGlzY2FyZDsnLFxuICAgICAgICAgICAgJyAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdUFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFQb3NpdGlvbkNvb3JkOiAwLFxuICAgICAgICAgICAvLyBhU2NhbGU6ICAgICAgICAgMCxcbiAgICAgICAgICAgIGFSb3RhdGlvbjogICAgICAwXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVEVNUCBIQUNLXG5cbn1cblxuUGFydGljbGVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlU2hhZGVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVNoYWRlcjtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHN5c3RlbSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgc3lzdGVtIHRoaXMgcmVuZGVyZXIgaXMgZm9yLlxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXSB7bnVtYmVyfSBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcmVuZGVyZWQgYXJlYSAoc2hvd24gaWYgbm90IHRyYW5zcGFyZW50KS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5yb3VuZFBpeGVscz1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBTeXN0ZW1SZW5kZXJlcihzeXN0ZW0sIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB1dGlscy5zYXlIZWxsbyhzeXN0ZW0pO1xuXG4gICAgLy8gcHJlcGFyZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpIGluIENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tpXSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgb3B0aW9ucyA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHNlZSBQSVhJLlJFTkRFUkVSX1RZUEVcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgODAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDgwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgNjAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy52aWV3ID0gb3B0aW9ucy52aWV3IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG9wdGlvbnMucmVzb2x1dGlvbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBvcHRpb25zLnRyYW5zcGFyZW50O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgc2hvdWxkIGJlIHJlc2l6ZWQgYXV0b21hdGljYWxseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvcHRpb25zLmF1dG9SZXNpemUgfHwgZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIGJsZW5kIG1vZGVzIHVzZWZ1bCBmb3IgdGhpcyByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG1peGVkPn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgZmxhZyBhZmZlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50cyBvZiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgcmV0YWluZWQgYWZ0ZXIgcmVuZGVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3Igbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyBOT1QgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBhIGNhbnZhcyBzaXplZCBmaWxsUmVjdCBvcGVyYXRpb24gZXZlcnkgZnJhbWUgdG8gc2V0IHRoZSBjYW52YXMgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBjbGVhclJlY3QgdG8gY2xlYXIgdGhlIGNhbnZhcyBldmVyeSBmcmFtZS5cbiAgICAgKiBEaXNhYmxlIHRoaXMgYnkgc2V0dGluZyB0aGlzIHRvIGZhbHNlLiBGb3IgZXhhbXBsZSBpZiB5b3VyIGdhbWUgaGFzIGEgY2FudmFzIGZpbGxpbmcgYmFja2dyb3VuZCBpbWFnZSB5b3Ugb2Z0ZW4gZG9uJ3QgbmVlZCB0aGlzIHNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHRcbiAgICAgKi9cbiAgICB0aGlzLmNsZWFyQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICAgICAqIEhhbmR5IGZvciBjcmlzcCBwaXhlbCBhcnQgYW5kIHNwZWVkIG9uIGxlZ2FjeSBkZXZpY2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gb3B0aW9ucy5yb3VuZFBpeGVscztcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmEgPSBbMCwgMCwgMCwgMF07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9ICcjMDAwMDAwJztcblxuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yOyAvLyBydW4gYmcgY29sb3Igc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgdHJhbnNmb3JtOnt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKX0sIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3Qgcm9vdCBvYmplY3QgdGhhdCB0aGUgcmVuZGVyZXIgdHJpZWQgdG8gcmVuZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3lzdGVtUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFN5c3RlbVJlbmRlcmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciB0byBmaWxsIGlmIG5vdCB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlN5c3RlbVJlbmRlcmVyI1xuICAgICAqL1xuICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSB1dGlscy5oZXgyc3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB1dGlscy5oZXgycmdiKHZhbCwgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBjYW52YXMgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMudmlldy53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGhpcy52aWV3LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgICAgICB0aGlzLnZpZXcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpIHtcbiAgICBpZiAocmVtb3ZlVmlldyAmJiB0aGlzLnZpZXcucGFyZW50Tm9kZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMudmlldyk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgdGhpcy52aWV3ID0gbnVsbDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IDA7XG5cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBmYWxzZTtcblxuICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcblxuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDA7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IG51bGw7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gbnVsbDtcbn07XG4iLCJ2YXIgU3lzdGVtUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9TeXN0ZW1SZW5kZXJlcicpLFxuICAgIENhbnZhc01hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi91dGlscy9DYW52YXNNYXNrTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBTeXN0ZW1SZW5kZXJlci5jYWxsKHRoaXMsICdDYW52YXMnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuQ0FOVkFTO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMudmlldy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIGZsYWcgY29udHJvbGxpbmcgY2FudmFzIHJlZnJlc2guXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVmcmVzaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBhIENhbnZhc01hc2tNYW5hZ2VyLCBoYW5kbGVzIG1hc2tpbmcgd2hlbiB1c2luZyB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNNYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IENhbnZhc01hc2tNYW5hZ2VyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIHByb3BlcnR5IHVzZWQgdG8gc2V0IHRoZSBjYW52YXMgc21vb3RoaW5nIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnaW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcblxuICAgIGlmICghdGhpcy5jb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ3dlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ29JbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB0aGlzLl9tYXBCbGVuZE1vZGVzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHtcbiAgICAgICAgd29ybGRUcmFuc2Zvcm06IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgICAgICB3b3JsZEFscGhhOiAxXG4gICAgfTtcblxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oQ2FudmFzUmVuZGVyZXIpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byB0aGlzIGNhbnZhcyB2aWV3XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSB0aGUgb2JqZWN0IHRvIGJlIHJlbmRlcmVkXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KVxue1xuICAgIHRoaXMuZW1pdCgncHJlcmVuZGVyJyk7XG5cbiAgICB2YXIgY2FjaGVQYXJlbnQgPSBvYmplY3QucGFyZW50O1xuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gb2JqZWN0O1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIG9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIG9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTICYmIHRoaXMudmlldy5zY3JlZW5jYW52YXMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpXG4gICAge1xuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGggLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlckRpc3BsYXlPYmplY3Qob2JqZWN0LCB0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciBhbmQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSBDYW52YXMgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIFtyZW1vdmVWaWV3PWZhbHNlXSB7Ym9vbGVhbn0gUmVtb3ZlcyB0aGUgQ2FudmFzIGVsZW1lbnQgZnJvbSB0aGUgRE9NLlxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIGNhbGwgdGhlIGJhc2UgZGVzdHJveVxuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcywgcmVtb3ZlVmlldyk7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5T2JqZWN0IHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgY29udGV4dClcbntcbiAgICB2YXIgdGVtcENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyQ2FudmFzKHRoaXMpO1xuICAgIHRoaXMuY29udGV4dCA9IHRlbXBDb250ZXh0O1xufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBQSVhJLlN5c3RlbVJlbmRlcmVyI3Jlc2l6ZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKiBAcGFyYW0ge251bWJlcn0gaFxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHcsIGgpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xuXG4gICAgLy9yZXNldCB0aGUgc2NhbGUgbW9kZS4uIG9kZGx5IHRoaXMgc2VlbXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgY2FudmFzIGlzIHJlc2l6ZWQuXG4gICAgLy9zdXJlbHkgYSBicm93c2VyIGJ1Zz8/IExldCBwaXhpIGZpeCB0aGF0IGZvciB5b3UuLlxuICAgIGlmKHRoaXMuc21vb3RoUHJvcGVydHkpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHRbdGhpcy5zbW9vdGhQcm9wZXJ0eV0gPSAoQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVCA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogTWFwcyBQaXhpIGJsZW5kIG1vZGVzIHRvIGNhbnZhcyBibGVuZCBtb2Rlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX21hcEJsZW5kTW9kZXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5ibGVuZE1vZGVzKVxuICAgIHtcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzID0ge307XG5cbiAgICAgICAgaWYgKHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnbXVsdGlwbHknO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NjcmVlbic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSAnb3ZlcmxheSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnZGFya2VuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MSUdIVEVOXSAgICAgICA9ICdsaWdodGVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdjb2xvci1kb2RnZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnY29sb3ItYnVybic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnaGFyZC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSAnc29mdC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnZGlmZmVyZW5jZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnZXhjbHVzaW9uJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdodWUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gJ3NhdHVyYXRlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl0gICAgICAgICA9ICdjb2xvcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSAnbHVtaW5vc2l0eSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29vbCBuZXcgYmxlbmQgbW9kZXMgaW4gY2FudmFzICdjb3VnaCcgaWUgJ2NvdWdoJ1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNpemUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGNhbnZhc1xuICovXG5mdW5jdGlvbiBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgQ2FudmFzIG9iamVjdCB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBDYW52YXNCdWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogQSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHR3by1kaW1lbnNpb25hbCByZW5kZXJpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59XG5cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0J1ZmZlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FudmFzQnVmZmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIGJ1ZmZlciBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ2FudmFzQnVmZmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdmFsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGNhbnZhcyB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZSBDYW52YXNCdWZmZXIgY2xhc3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbnZhc1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgY2FudmFzLlxuICpcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBjYW52YXMgcmVuZGVyZXIgdG8gZHJhdyB0aGUgcHJpbWl0aXZlIGdyYXBoaWNzIGRhdGEuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNHcmFwaGljcyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNHcmFwaGljcztcblxuLypcbiAqIFJlbmRlcnMgYSBHcmFwaGljcyBvYmplY3QgdG8gYSBjYW52YXMuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgYWN0dWFsIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSAyZCBkcmF3aW5nIG1ldGhvZCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciB3b3JsZEFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuICAgIGlmIChncmFwaGljcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3NUaW50KGdyYXBoaWNzKTtcbiAgICAgICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLl9maWxsVGludDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEuX2xpbmVUaW50O1xuXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZSBjbG9zZSB0aGUgcGF0aCAtIG11Y2ggbmVhdGVyIDopXG4gICAgICAgICAgICBpZiAocG9pbnRzWzBdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAmJiBwb2ludHNbMV0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbENvbG9yIHx8IGRhdGEuZmlsbENvbG9yID09PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmZpbGxBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggZmlsbENvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUud2lkdGgsIHNoYXBlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLDAsMipNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVsbGlwc2UgY29kZSB0YWtlbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcblxuICAgICAgICAgICAgdmFyIHcgPSBzaGFwZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB2YXIgaCA9IHNoYXBlLmhlaWdodCAqIDI7XG5cbiAgICAgICAgICAgIHZhciB4ID0gc2hhcGUueCAtIHcvMjtcbiAgICAgICAgICAgIHZhciB5ID0gc2hhcGUueSAtIGgvMjtcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIGthcHBhID0gMC41NTIyODQ4LFxuICAgICAgICAgICAgICAgIG94ID0gKHcgLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgb3kgPSAoaCAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgeGUgPSB4ICsgdywgICAgICAgICAgIC8vIHgtZW5kXG4gICAgICAgICAgICAgICAgeWUgPSB5ICsgaCwgICAgICAgICAgIC8vIHktZW5kXG4gICAgICAgICAgICAgICAgeG0gPSB4ICsgdyAvIDIsICAgICAgIC8vIHgtbWlkZGxlXG4gICAgICAgICAgICAgICAgeW0gPSB5ICsgaCAvIDI7ICAgICAgIC8vIHktbWlkZGxlXG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG1hc2tcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3Mgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgbWFza1xuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGNvbnRleHQgMmQgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciBsZW4gPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gVE9ETyAtIG5lZWQgdG8gYmUgVW5kZWZpbmVkIVxuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgcnggPSBzaGFwZS54O1xuICAgICAgICAgICAgdmFyIHJ5ID0gc2hhcGUueTtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcbiAgICAgICAgICAgIHZhciByYWRpdXMgPSBzaGFwZS5yYWRpdXM7XG5cbiAgICAgICAgICAgIHZhciBtYXhSYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDIgfCAwO1xuICAgICAgICAgICAgcmFkaXVzID0gcmFkaXVzID4gbWF4UmFkaXVzID8gbWF4UmFkaXVzIDogcmFkaXVzO1xuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRpbnQgb2YgYSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3MgdGhhdCB3aWxsIGhhdmUgaXRzIHRpbnQgdXBkYXRlZFxuICpcbiAqL1xuQ2FudmFzR3JhcGhpY3MudXBkYXRlR3JhcGhpY3NUaW50ID0gZnVuY3Rpb24gKGdyYXBoaWNzKVxue1xuICAgIGlmIChncmFwaGljcy50aW50ID09PSAweEZGRkZGRiAmJiBncmFwaGljcy5fcHJldlRpbnQgPT09IGdyYXBoaWNzLnRpbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyYXBoaWNzLl9wcmV2VGludCA9IGdyYXBoaWNzLnRpbnQ7XG5cbiAgICB2YXIgdGludFIgPSAoZ3JhcGhpY3MudGludCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50RyA9IChncmFwaGljcy50aW50ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgdGludEIgPSAoZ3JhcGhpY3MudGludCAmIDB4RkYpLyAyNTU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLmZpbGxDb2xvciB8IDA7XG4gICAgICAgIHZhciBsaW5lQ29sb3IgPSBkYXRhLmxpbmVDb2xvciB8IDA7XG5cbiAgICAgICAgLypcbiAgICAgICAgdmFyIGNvbG9yUiA9IChmaWxsQ29sb3IgPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgdmFyIGNvbG9yRyA9IChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JCID0gKGZpbGxDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgZmlsbENvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG5cbiAgICAgICAgY29sb3JSID0gKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckcgPSAobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgY29sb3JCID0gKGxpbmVDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgbGluZUNvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG4gICAgICAgICovXG5cbiAgICAgICAgLy8gc3VwZXIgaW5saW5lIGNvcyBpbSBhbiBvcHRpbWl6YXRpb24gTkFaSSA6KVxuICAgICAgICBkYXRhLl9maWxsVGludCA9ICgoKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgoZmlsbENvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAoZmlsbENvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuICAgICAgICBkYXRhLl9saW5lVGludCA9ICgoKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAobGluZUNvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuXG4gICAgfVxufTtcblxuIiwidmFyIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi9DYW52YXNHcmFwaGljcycpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBtYXNraW5nLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ2FudmFzTWFza01hbmFnZXIoKVxue31cblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FudmFzTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc01hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgc3RhY2sgb2YgbWFza3MuXG4gKlxuICogQHBhcmFtIG1hc2tEYXRhIHtvYmplY3R9IHRoZSBtYXNrRGF0YSB0aGF0IHdpbGwgYmUgcHVzaGVkXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSwgcmVuZGVyZXIpXG57XG5cbiAgICByZW5kZXJlci5jb250ZXh0LnNhdmUoKTtcblxuICAgIHZhciBjYWNoZUFscGhhID0gbWFza0RhdGEuYWxwaGE7XG4gICAgdmFyIHRyYW5zZm9ybSA9IG1hc2tEYXRhLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgLy9UT0RPIHN1cG9ydCBzcHJpdGUgYWxwaGEgbWFza3M/P1xuICAgIC8vbG90cyBvZiBlZmZvcnQgcmVxdWlyZWQuIElmIGRlbWFuZCBpcyBncmVhdCBlbm91Z2guLlxuICAgIGlmKCFtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrKG1hc2tEYXRhLCByZW5kZXJlci5jb250ZXh0KTtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5jbGlwKCk7XG4gICAgfVxuXG4gICAgbWFza0RhdGEud29ybGRBbHBoYSA9IGNhY2hlQWxwaGE7XG59O1xuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dCB0byB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZSB0aGUgbWFzayB3YXMgYXBwbGllZC5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLmNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7fTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2RzIGZvciBTcHJpdGUvVGV4dHVyZSB0aW50aW5nLlxuICogQHN0YXRpY1xuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG52YXIgQ2FudmFzVGludGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1RpbnRlcjtcblxuLyoqXG4gKiBCYXNpY2FsbHkgdGhpcyBtZXRob2QganVzdCBuZWVkcyBhIHNwcml0ZSBhbmQgYSBjb2xvciBhbmQgdGludHMgdGhlIHNwcml0ZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSB0aW50ZWQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlID0gZnVuY3Rpb24gKHNwcml0ZSwgY29sb3IpXG57XG4gICAgdmFyIHRleHR1cmUgPSBzcHJpdGUudGV4dHVyZTtcblxuICAgIGNvbG9yID0gQ2FudmFzVGludGVyLnJvdW5kQ29sb3IoY29sb3IpO1xuXG4gICAgdmFyIHN0cmluZ0NvbG9yID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgdGV4dHVyZS50aW50Q2FjaGUgPSB0ZXh0dXJlLnRpbnRDYWNoZSB8fCB7fTtcblxuICAgIGlmICh0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0pXG4gICAge1xuICAgICAgICByZXR1cm4gdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdO1xuICAgIH1cblxuICAgICAvLyBjbG9uZSB0ZXh0dXJlLi5cbiAgICB2YXIgY2FudmFzID0gQ2FudmFzVGludGVyLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8vQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWwodGV4dHVyZSwgc3RyaW5nQ29sb3IsIGNhbnZhcyk7XG4gICAgQ2FudmFzVGludGVyLnRpbnRNZXRob2QodGV4dHVyZSwgY29sb3IsIGNhbnZhcyk7XG5cbiAgICBpZiAoQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSlcbiAgICB7XG4gICAgICAgIC8vIGlzIHRoaXMgYmV0dGVyP1xuICAgICAgICB2YXIgdGludEltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHRpbnRJbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKCk7XG5cbiAgICAgICAgdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdID0gdGludEltYWdlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSBjYW52YXM7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBub3QgY29udmVydGluZyB0aGUgdGV4dHVyZSB0byBhbiBpbWFnZSB0aGVuIHdlIG5lZWQgdG8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXNcbiAgICAgICAgQ2FudmFzVGludGVyLmNhbnZhcyA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdtdWx0aXBseScgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcblxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdvdmVybGF5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoT3ZlcmxheSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1hdG9wJztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgLy8gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG59O1xuXG4vKipcbiAqIFRpbnQgYSB0ZXh0dXJlIHBpeGVsIHBlciBwaXhlbC5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcbiAgICB2YXIgciA9IHJnYlZhbHVlc1swXSwgZyA9IHJnYlZhbHVlc1sxXSwgYiA9IHJnYlZhbHVlc1syXTtcblxuICAgIHZhciBwaXhlbERhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICB2YXIgcGl4ZWxzID0gcGl4ZWxEYXRhLmRhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBpeGVscy5sZW5ndGg7IGkgKz0gNClcbiAgICB7XG4gICAgICAgIHBpeGVsc1tpKzBdICo9IHI7XG4gICAgICAgIHBpeGVsc1tpKzFdICo9IGc7XG4gICAgICAgIHBpeGVsc1tpKzJdICo9IGI7XG4gICAgfVxuXG4gICAgY29udGV4dC5wdXRJbWFnZURhdGEocGl4ZWxEYXRhLCAwLCAwKTtcbn07XG5cbi8qKlxuICogUm91bmRzIHRoZSBzcGVjaWZpZWQgY29sb3IgYWNjb3JkaW5nIHRvIHRoZSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbC5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHJvdW5kLCBzaG91bGQgYmUgYSBoZXggY29sb3JcbiAqL1xuQ2FudmFzVGludGVyLnJvdW5kQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IpXG57XG4gICAgdmFyIHN0ZXAgPSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbDtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcblxuICAgIHJnYlZhbHVlc1swXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1swXSAvIHN0ZXApICogc3RlcCk7XG4gICAgcmdiVmFsdWVzWzFdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzFdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMl0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMl0gLyBzdGVwKSAqIHN0ZXApO1xuXG4gICAgcmV0dXJuIHV0aWxzLnJnYjJoZXgocmdiVmFsdWVzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGNhcCB3aGVuIHJvdW5kaW5nIGNvbG9ycy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsID0gODtcblxuLyoqXG4gKiBUaW50IGNhY2hlIGJvb2xlYW4gZmxhZy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jb252ZXJ0VGludFRvSW1hZ2UgPSBmYWxzZTtcblxuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCwgY29uc2VxdWVudGx5IHRoZSBhYmlsaXR5IHRvIHRpbnQgdXNpbmcgdGhlIG11bHRpcGx5IG1ldGhvZC5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA9IHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKTtcblxuLyoqXG4gKiBUaGUgdGludGluZyBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQuXG4gKlxuICovXG5DYW52YXNUaW50ZXIudGludE1ldGhvZCA9IENhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA/IENhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5IDogIENhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsO1xuIiwidmFyIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcblx0dXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIFRleHR1cmVNYW5hZ2VyID0gZnVuY3Rpb24oZ2wpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyB0cmFjayB0ZXh0dXJlcyBpbiB0aGUgcmVuZGVyZXIgc28gd2UgY2FuIG5vIGxvbmdlciBsaXN0ZW4gdG8gdGhlbSBvbiBkZXN0cnVjdGlvbi5cblx0dGhpcy5fbWFuYWdlZFRleHR1cmVzID0gW107XG4gICAgdGhpcy5nbFRleHR1cmVzID0ge307XG5cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5nZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW5kL29yIENyZWF0ZXMgYSBXZWJHTCB0ZXh0dXJlIGZvciB0aGUgcmVuZGVyZXIncyBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdXBkYXRlXG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuXHRpZiAoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGdsVGV4dHVyZSA9IHRoaXMuZ2xUZXh0dXJlc1t0ZXh0dXJlLnVpZF0vL3RleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgaWYgKCFnbFRleHR1cmUpXG4gICAge1xuICAgICAgICBnbFRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcbiAgICAgICAgZ2xUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSB0cnVlXG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgLy8gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXSA9IGdsVGV4dHVyZTtcblxuICAgICAgICB0ZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9uKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICBnbFRleHR1cmUudXBsb2FkKHRleHR1cmUuc291cmNlKTtcbiAgICBcbiAgICAvL1RPRE8gY2hlY2sgaXMgcG93ZXIgb2YgdHdvLi5cbiAgICBnbFRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cblxuICAgIC8vIFRPRE8gY2hlY2sgZm9yIHNjYWxpbmcgdHlwZVxuICAgIGdsVGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKCk7XG5cbiAgICByZXR1cm4gIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTFxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gZGVzdHJveVxuICovXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlLCBfc2tpcFJlbW92ZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0pXG4gICAge1xuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG5cblxuICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcblxuICAgICAgICBpZiAoIV9za2lwUmVtb3ZlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5pbmRleE9mKHRleHR1cmUpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5fbWFuYWdlZFRleHR1cmVzLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKClcbntcblx0Ly8gZW1wdHkgYWxsIHRoZSBvbGQgZ2wgdGV4dHVyZXMgYXMgdGhleSBhcmUgdXNlbGVzcyBub3dcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzW2ldO1xuICAgICAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuICAgIC8vIGRlc3Ryb3kgbWFuYWdlZCB0ZXh0dXJlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIHRoaXMuZGVzdHJveVRleHR1cmUodGV4dHVyZSwgdHJ1ZSk7XG4gICAgICAgIHRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9mZignZGlzcG9zZScsIHRoaXMuZGVzdHJveVRleHR1cmUsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcyA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZU1hbmFnZXI7XG5cbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgU2hhZGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIE1hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9NYXNrTWFuYWdlcicpLFxuICAgIFN0ZW5jaWxNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlcicpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBCbGVuZE1vZGVNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4vdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBGWEFBRmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBUZXh0dXJlTWFuYWdlciA9IHJlcXVpcmUoJy4vVGV4dHVyZU1hbmFnZXInKSxcbiAgICBjcmVhdGVDb250ZXh0ID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuY3JlYXRlQ29udGV4dCxcbiAgICBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aScpLFxuICAgIG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpID0gcmVxdWlyZSgnLi91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFdlYkdMUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIHdlYkdMIGVuYWJsZWQgY2FudmFzLiBUaGlzIHJlbmRlcmVyXG4gKiBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMLiBUaGlzIFJlbmRlciB3b3JrcyBieSBhdXRvbWF0aWNhbGx5IG1hbmFnaW5nIHdlYkdMQmF0Y2hzLlxuICogU28gbm8gbmVlZCBmb3IgU3ByaXRlIEJhdGNoZXMgb3IgU3ByaXRlIENsb3Vkcy5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIHZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9MF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9MF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMuIElmIG5vdCBhdmFpbGFibGUgbmF0aXZlbHkgdGhlbiBGWEFBIGFudGlhbGlhc2luZyBpcyB1c2VkXG4gKiBAcGFyYW0gW29wdGlvbnMuZm9yY2VGWEFBPWZhbHNlXSB7Ym9vbGVhbn0gZm9yY2VzIEZYQUEgYW50aWFsaWFzaW5nIHRvIGJlIHVzZWQgb3ZlciBuYXRpdmUuIEZYQUEgaXMgZmFzdGVyLCBidXQgbWF5IG5vdCBhbHdheXMgbG9vayBhcyBncmVhdFxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy4gSWYgeW91IHdpc2ggdG8gc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSAqbXVzdCogc2V0IHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byBgdHJ1ZWAuXG4gKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmXG4gKiAgICAgIHlvdSBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0LlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ1dlYkdMJywgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIHJlbmRlcmVyIGFzIGEgc3RhbmRhcmRpc2VkIGNvbnN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9Ly9cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0w7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gdGhpcy5oYW5kbGVDb250ZXh0TG9zdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5oYW5kbGVDb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gY3JlYXRlIGEgbmV3IHdlYmdsIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgICAgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQsXG4gICAgICAgIGFudGlhbGlhczogb3B0aW9ucy5hbnRpYWxpYXMsXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnRyYW5zcGFyZW50ICE9PSAnbm90TXVsdGlwbGllZCcsXG4gICAgICAgIHN0ZW5jaWw6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICB9O1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYVszXSA9IHRoaXMudHJhbnNwYXJlbnQgPyAwIDogMTtcblxuICAgIC8qKlxuICAgICAqIERlYWxzIHdpdGggbWFuYWdpbmcgdGhlIHNoYWRlciBwcm9ncmFtcyBhbmQgdGhlaXIgYXR0cmlicy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBuZXcgU2hhZGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1hc2tzIHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWFza01hbmFnZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG5ldyBNYXNrTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyID0gbmV3IFN0ZW5jaWxNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRmlsdGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlck1hbmFnZXIgPSBuZXcgRmlsdGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIGJsZW5kTW9kZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmxlbmRNb2RlTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBuZXcgQmxlbmRNb2RlTWFuYWdlcih0aGlzKTtcblxuICAgIFxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIE9iamVjdFJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5PYmplY3RSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG5ldyBPYmplY3RSZW5kZXJlcih0aGlzKTtcblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIGNvbnRleHQgc28gaXQgaXMgcmVhZHkgZm9yIHRoZSBtYW5hZ2Vycy5cbiAgICB0aGlzLmdsID0gY3JlYXRlQ29udGV4dCh0aGlzLnZpZXcsIHRoaXMuX2NvbnRleHRPcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXRDb250ZXh0KCk7XG5cbiAgICAvLyBtYXAgc29tZSB3ZWJHTCBibGVuZCBhbmQgZHJhd21vZGVzLi5cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wpO1xuICAgIHRoaXMuZHJhd01vZGVzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wpXG5cbiAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXR9XG4gICAgICovXG4gICAgdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUZXh0dXJlTG9jYXRpb24gPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oV2ViR0xSZW5kZXJlcik7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgV2ViR0wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLl9pbml0Q29udGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgbWFuYWdlci4uLlxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hbmFnZXIoZ2wpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBkZWZhdWx0IHBpeGkgc2V0dGluZ3MuLlxuICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG5cblxuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBudWxsLCB0aGlzLnJlc29sdXRpb24sIHRydWUpO1xuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5jbGVhckNvbG9yID0gdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYTtcbiAgICBcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQodGhpcy5yb290UmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMuZW1pdCgnY29udGV4dCcsIGdsKTtcblxuICAgIC8vIHNldHVwIHRoZSB3aWR0aC9oZWlnaHQgcHJvcGVydGllcyBhbmQgZ2wgdmlld3BvcnRcbiAgICB0aGlzLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7ICAgIFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gaXRzIHdlYkdMIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIC8vIG5vIHBvaW50IHJlbmRlcmluZyBpZiBvdXIgY29udGV4dCBoYXMgYmVlbiBibG93biB1cCFcbiAgICBpZiAodGhpcy5nbC5pc0NvbnRleHRMb3N0KCkpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gZGlzcGxheU9iamVjdDtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IGRpc3BsYXlPYmplY3QucGFyZW50O1xuICAgIGRpc3BsYXlPYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIGRpc3BsYXlPYmplY3QudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnJvb3RSZW5kZXJUYXJnZXQsIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpOy8vdGhpcy5wcm9qZWN0aW9uKTtcblxuICAgIHRoaXMuZW1pdCgncG9zdHJlbmRlcicpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgRGlzcGxheSBPYmplY3QuXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0gcmVuZGVyVGFyZ2V0IHtQSVhJLlJlbmRlclRhcmdldH0gVGhlIHJlbmRlciB0YXJnZXQgdG8gdXNlIHRvIHJlbmRlciB0aGlzIGRpc3BsYXkgb2JqZWN0XG4gKlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJEaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHJlbmRlclRhcmdldCwgY2xlYXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgdGhpcy5iaW5kUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG5cbiAgICBpZihjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IHRoZSBmaWx0ZXIgbWFuYWdlclxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5zZXRGaWx0ZXJTdGFjayggcmVuZGVyVGFyZ2V0LmZpbHRlclN0YWNrICk7XG5cbiAgICAvLyByZW5kZXIgdGhlIHNjZW5lIVxuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyV2ViR0wodGhpcyk7XG5cbiAgICAvLyBmaW5pc2ggdGhlIGN1cnJlbnQgcmVuZGVyZXIuLlxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdGhlIG9uZSBnaXZlbiBpbiBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gb2JqZWN0UmVuZGVyZXIge1BJWEkuT2JqZWN0UmVuZGVyZXJ9IFRoZSBvYmplY3QgcmVuZGVyZXIgdG8gdXNlLlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRPYmplY3RSZW5kZXJlciA9IGZ1bmN0aW9uIChvYmplY3RSZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyZXIgPT09IG9iamVjdFJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0b3AoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG9iamVjdFJlbmRlcmVyO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHdlYkdMIHZpZXcgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB3ZWJHTCB2aWV3XG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB3ZWJHTCB2aWV3XG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9PT0gdGhpcy5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSB0aGUgbmV3IHJlbmRlciB0YXJnZXRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgaWYocmVuZGVyVGFyZ2V0ICE9PSB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcblxuICAgICAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLnNldE1hc2tTdGFjayggcmVuZGVyVGFyZ2V0LnN0ZW5jaWxNYXNrU3RhY2sgKTtcbiAgICB9XG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKS8vcHJvamVjdGlvbiwgYnVmZmVyKVxue1xuICAgIC8vVE9ETyBjYWNoZVxuICAgIGlmKHRoaXMuX2FjdGl2ZVNoYWRlciAhPT0gc2hhZGVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlU2hhZGVyID0gc2hhZGVyO1xuICAgICAgICBzaGFkZXIuYmluZCgpO1xuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgfVxufVxuXG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvY2F0aW9uKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvL1RPRE8gdGVzdCBwZXJmIG9mIGNhY2hlP1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gfHwgMDtcblxuICAgIGlmKHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiAhPT0gbG9jYXRpb24pLy9cbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbiApO1xuICAgIH1cblxuICAgIC8vVE9ETyAtIGNhbiB3ZSBjYWNoZSB0aGlzIHRleHR1cmUgdG9vP1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOyAgICAgIFxuICAgIFxuICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBiaW5kIHRoZSB0ZXh0dXJlLi5cbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0uYmluZCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEhhbmRsZXMgYSBsb3N0IHdlYmdsIGNvbnRleHRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5oYW5kbGVDb250ZXh0TG9zdCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGEgcmVzdG9yZWQgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnJlbW92ZUFsbCgpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgKGV2ZW50IGxpc3RlbmVycywgc3ByaXRlYmF0Y2gsIGV0Yy4uLilcbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldylcbntcbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICAvLyByZW1vdmUgbGlzdGVuZXJzXG4gICAgdGhpcy52aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0KTtcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCk7XG5cbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLmRlc3Ryb3lBbGwoKTtcblxuICAgIC8vIGNhbGwgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMudWlkID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIG1hbmFnZXJzXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLm1hc2tNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gbnVsbDtcbiAgICB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLnVzZVByb2dyYW0obnVsbCk7XG4gICAgdGhpcy5nbCA9IG51bGw7XG59O1xuXG4iLCJ2YXIgRGVmYXVsdFNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgUElYSSBmaWx0ZXIuIEN1cnJlbnRseSBvbmx5IFdlYkdMIHN1cHBvcnRzIGZpbHRlcnMuXG4gKiBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIGZpbHRlciB0aGlzIHNob3VsZCBiZSB5b3VyIGJhc2UgY2xhc3MuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHZlcnRleFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdmVydGV4IHNoYWRlciBzb3VyY2UgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBmcmFnbWVudFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIHVuaWZvcm1zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1bmlmb3JtcyBmb3IgdGhpcyBmaWx0ZXIuXG4gKi9cbmZ1bmN0aW9uIEFic3RyYWN0RmlsdGVyKHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zKVxue1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygc2hhZGVyc1xuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlcnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHRyYSBwYWRkaW5nIHRoYXQgdGhlIGZpbHRlciBtaWdodCBuZWVkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIHZlcnRleCBzaGFkZXJcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmdbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmVydGV4U3JjID0gdmVydGV4U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIG9mIHRoZSBmcmFtZW50IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgLy9UT0RPIGEgcmVtaW5kZXIgLSB3b3VsZCBiZSBjb29sIHRvIGhhdmUgbG93ZXIgcmVzIGZpbHRlcnMgYXMgdGhpcyB3b3VsZCBnaXZlIGJldHRlciBwZXJmb3JtYW5jZS5cblxuICAgIC8vdHlwZW9mIGZyYWdtZW50U3JjID09PSAnc3RyaW5nJyA/IGZyYWdtZW50U3JjLnNwbGl0KCcnKSA6IChmcmFnbWVudFNyYyB8fCBbXSk7XG5cbn1cblxuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RmlsdGVyO1xuXG4vKipcbiAqIEdyYWJzIGEgc2hhZGVyIGZyb20gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBzaGFkZXIgZnJvbVxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuZ2V0U2hhZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyc1tnbC5pZF07XG5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IG5ldyBEZWZhdWx0U2hhZGVyKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIsXG4gICAgICAgICAgICB0aGlzLnZlcnRleFNyYyxcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRTcmMsXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaGFkZXJzW2dsLmlkXSA9IHNoYWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbn07XG5cbi8qKlxuICogU3luY3MgYSB1bmlmb3JtIGJldHdlZW4gdGhlIGNsYXNzIG9iamVjdCBhbmQgdGhlIHNoYWRlcnMuXG4gKlxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuc2hhZGVycy5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnNoYWRlcnNbaV0uc3luY1VuaWZvcm0odW5pZm9ybSk7XG4gICAgfVxufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKlxuICogQmFzaWMgRlhBQSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgY29kZSBvbiBnZWVrczNkLmNvbSB3aXRoIHRoZVxuICogbW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXG4gKiB1bnN1cHBvcnRlZCBieSBXZWJHTC5cbiAqXG4gKiAtLVxuICogRnJvbTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICpcbiAqL1xuZnVuY3Rpb24gRlhBQUZpbHRlcigpXG57XG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxuXFxudm9pZCB0ZXhjb29yZHModmVjMiBmcmFnQ29vcmQsIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk5XLCBvdXQgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiU1csIG91dCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzIgaW52ZXJzZVZQID0gMS4wIC8gcmVzb2x1dGlvbi54eTtcXG4gICAgdl9yZ2JOVyA9IChmcmFnQ29vcmQgKyB2ZWMyKC0xLjAsIC0xLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JORSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYlNXID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU0UgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIDEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk0gPSB2ZWMyKGZyYWdDb29yZCAqIGludmVyc2VWUCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbiAgIHZSZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcXG5cXG4gICAvL2NvbXB1dGUgdGhlIHRleHR1cmUgY29vcmRzIGFuZCBzZW5kIHRoZW0gdG8gdmFyeWluZ3NcXG4gICB0ZXhjb29yZHMoYVRleHR1cmVDb29yZCAqIHJlc29sdXRpb24sIHJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG5cXG4vKipcXG5CYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXFxubW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXFxudW5zdXBwb3J0ZWQgYnkgV2ViR0wuXFxuXFxuLS1cXG5cXG5Gcm9tOlxcbmh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XFxuXFxuQ29weXJpZ2h0IChjKSAyMDExIGJ5IEFybWluIFJvbmFjaGVyLlxcblxcblNvbWUgcmlnaHRzIHJlc2VydmVkLlxcblxcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcXG5tZXQ6XFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcXG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxcbiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXFxuICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXFxuICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxcblxcbiAgICAqIFRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yXFxuICAgICAgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljXFxuICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxcblxcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcXG5cXFwiQVMgSVNcXFwiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxcbkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXFxuT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXFxuU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxcblRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxcbiovXFxuXFxuI2lmbmRlZiBGWEFBX1JFRFVDRV9NSU5cXG4gICAgI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gICAoMS4wLyAxMjguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01VTFxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAgICgxLjAgLyA4LjApXFxuI2VuZGlmXFxuI2lmbmRlZiBGWEFBX1NQQU5fTUFYXFxuICAgICNkZWZpbmUgRlhBQV9TUEFOX01BWCAgICAgOC4wXFxuI2VuZGlmXFxuXFxuLy9vcHRpbWl6ZWQgdmVyc2lvbiBmb3IgbW9iaWxlLCB3aGVyZSBkZXBlbmRlbnRcXG4vL3RleHR1cmUgcmVhZHMgY2FuIGJlIGEgYm90dGxlbmVja1xcbnZlYzQgZnhhYShzYW1wbGVyMkQgdGV4LCB2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JOVywgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JTVywgdmVjMiB2X3JnYlNFLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzQgY29sb3I7XFxuICAgIG1lZGl1bXAgdmVjMiBpbnZlcnNlVlAgPSB2ZWMyKDEuMCAvIHJlc29sdXRpb24ueCwgMS4wIC8gcmVzb2x1dGlvbi55KTtcXG4gICAgdmVjMyByZ2JOVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTlcpLnh5ejtcXG4gICAgdmVjMyByZ2JORSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTkUpLnh5ejtcXG4gICAgdmVjMyByZ2JTVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU1cpLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU0UpLnh5ejtcXG4gICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTSk7XFxuICAgIHZlYzMgcmdiTSAgPSB0ZXhDb2xvci54eXo7XFxuICAgIHZlYzMgbHVtYSA9IHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdChyZ2JOVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFORSA9IGRvdChyZ2JORSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTVyA9IGRvdChyZ2JTVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdChyZ2JTRSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNICA9IGRvdChyZ2JNLCAgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNaW4gPSBtaW4obHVtYU0sIG1pbihtaW4obHVtYU5XLCBsdW1hTkUpLCBtaW4obHVtYVNXLCBsdW1hU0UpKSk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgobHVtYU0sIG1heChtYXgobHVtYU5XLCBsdW1hTkUpLCBtYXgobHVtYVNXLCBsdW1hU0UpKSk7XFxuXFxuICAgIG1lZGl1bXAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcblxcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoKGx1bWFOVyArIGx1bWFORSArIGx1bWFTVyArIGx1bWFTRSkgKlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwpLCBGWEFBX1JFRFVDRV9NSU4pO1xcblxcbiAgICBmbG9hdCByY3BEaXJNaW4gPSAxLjAgLyAobWluKGFicyhkaXIueCksIGFicyhkaXIueSkpICsgZGlyUmVkdWNlKTtcXG4gICAgZGlyID0gbWluKHZlYzIoRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBtYXgodmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiBpbnZlcnNlVlA7XFxuXFxuICAgIHZlYzMgcmdiQSA9IDAuNSAqIChcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqICgxLjAgLyAzLjAgLSAwLjUpKS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDIuMCAvIDMuMCAtIDAuNSkpLnh5eik7XFxuICAgIHZlYzMgcmdiQiA9IHJnYkEgKiAwLjUgKyAwLjI1ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogLTAuNSkueHl6ICtcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqIDAuNSkueHl6KTtcXG5cXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QocmdiQiwgbHVtYSk7XFxuICAgIGlmICgobHVtYUIgPCBsdW1hTWluKSB8fCAobHVtYUIgPiBsdW1hTWF4KSlcXG4gICAgICAgIGNvbG9yID0gdmVjNChyZ2JBLCB0ZXhDb2xvci5hKTtcXG4gICAgZWxzZVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkIsIHRleENvbG9yLmEpO1xcbiAgICByZXR1cm4gY29sb3I7XFxufVxcblxcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBmeGFhKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICogdlJlc29sdXRpb24sIHZSZXNvbHV0aW9uLCB2X3JnYk5XLCB2X3JnYk5FLCB2X3JnYlNXLCB2X3JnYlNFLCB2X3JnYk0pO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxufVxuXG5GWEFBRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkZYQUFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRlhBQUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRlhBQUZpbHRlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICovXG5GWEFBRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIoIHJlbmRlcmVyICk7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG4iLCJ2YXIgQWJzdHJhY3RGaWx0ZXIgPSByZXF1aXJlKCcuL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgU3ByaXRlTWFza0ZpbHRlciBjbGFzc1xuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICovXG5mdW5jdGlvbiBTcHJpdGVNYXNrRmlsdGVyKHNwcml0ZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXNrQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICAgdk1hc2tDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIC8vIGNoZWNrIGNsaXAhIHRoaXMgd2lsbCBzdG9wIHRoZSBtYXNrIGJsZWVkaW5nIG91dCBmcm9tIHRoZSBlZGdlc1xcbiAgICB2ZWMyIHRleHQgPSBhYnMoIHZNYXNrQ29vcmQgLSAwLjUgKTtcXG4gICAgdGV4dCA9IHN0ZXAoMC41LCB0ZXh0KTtcXG4gICAgZmxvYXQgY2xpcCA9IDEuMCAtIG1heCh0ZXh0LnksIHRleHQueCk7XFxuICAgIHZlYzQgb3JpZ2luYWwgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgICB2ZWM0IG1hc2t5ID0gdGV4dHVyZTJEKG1hc2ssIHZNYXNrQ29vcmQpO1xcbiAgICBvcmlnaW5hbCAqPSAobWFza3kuciAqIG1hc2t5LmEgKiBhbHBoYSAqIGNsaXApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBvcmlnaW5hbDtcXG59XFxuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hc2s6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLl90ZXh0dXJlIH0sXG4gICAgICAgICAgICBhbHBoYTogICAgICAgICAgeyB0eXBlOiAnZicsIHZhbHVlOiAxfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG59XG5cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVNYXNrRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVNYXNrRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS5fdGV4dHVyZTtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS53b3JsZEFscGhhO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHVzZWQgdG8gbW92ZSB0aGUgZGlzcGxhY2VtZW50IG1hcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlTWFza0ZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHbE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQmxlbmRNb2RlTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59XG5cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmRNb2RlTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxlbmRNb2RlTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzLXVwIHRoZSBnaXZlbiBibGVuZE1vZGUgZnJvbSBXZWJHTCdzIHBvaW50IG9mIHZpZXcuXG4gKlxuICogQHBhcmFtIGJsZW5kTW9kZSB7bnVtYmVyfSB0aGUgYmxlbmRNb2RlLCBzaG91bGQgYmUgYSBQaXhpIGNvbnN0LCBzdWNoIGFzIGBQSVhJLkJMRU5EX01PREVTLkFERGAuIFNlZVxuICogIHtAbGluayBQSVhJLkJMRU5EX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICovXG5CbGVuZE1vZGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRCbGVuZE1vZGUgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPT09IGJsZW5kTW9kZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMucmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmN1cnJlbnRCbGVuZE1vZGVdO1xuICAgIHRoaXMucmVuZGVyZXIuZ2wuYmxlbmRGdW5jKG1vZGVbMF0sIG1vZGVbMV0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpLFxuICAgIFF1YWQgPSByZXF1aXJlKCcuLi91dGlscy9RdWFkJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gRmlsdGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW107XG5cbiAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICByZW5kZXJUYXJnZXQ6cmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldCxcbiAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICBib3VuZHM6bnVsbFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgLy8gbGlzdGVuIGZvciBjb250ZXh0IGFuZCB1cGRhdGUgbmVjZXNzYXJ5IGJ1ZmZlcnNcbiAgICAvL1RPRE8gbWFrZSB0aGlzIGR5bmFtaWMhXG4gICAgLy9UT0RPIHRlc3QgdGhpcyBvdXQgYnkgZm9yY2VzIHBvd2VyIG9mIHR3bz9cbiAgICB0aGlzLnRleHR1cmVTaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZnJhbWVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcbn1cblxuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWx0ZXJNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBGaWx0ZXJNYW5hZ2VyO1xuXG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnF1YWQgPSBuZXcgUXVhZChnbCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHBhcmFtIGJ1ZmZlciB7QXJyYXlCdWZmZXJ9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnNldEZpbHRlclN0YWNrID0gZnVuY3Rpb24gKCBmaWx0ZXJTdGFjayApXG57XG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IGZpbHRlclN0YWNrO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXIgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBmaWx0ZXJzIHtQSVhJLkFic3RyYWN0RmlsZXJbXX0gdGhlIGZpbHRlcnMgdGhhdCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2tcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucHVzaEZpbHRlciA9IGZ1bmN0aW9uICh0YXJnZXQsIGZpbHRlcnMpXG57XG4gICAgLy8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdC4uXG4gICAgLy8gVE9ETyByZXBsYWNlIGNsb25lIHdpdGggYSBjb3B5IHRvIHNhdmUgb2JqZWN0IGNyZWF0aW9uXG4gICAgdmFyIGJvdW5kcyA9IHRhcmdldC5maWx0ZXJBcmVhID8gdGFyZ2V0LmZpbHRlckFyZWEuY2xvbmUoKSA6IHRhcmdldC5nZXRCb3VuZHMoKTtcblxuICAgIC8vYm91bmRzID0gYm91bmRzLmNsb25lKCk7XG5cbiAgICAvLyByb3VuZCBvZmYgdGhlIHJlY3RhbmdsZSB0byBnZXQgYSBuaWNlIHNtb29vb29vb3RoIGZpbHRlciA6KVxuICAgIGJvdW5kcy54ID0gYm91bmRzLnggfCAwO1xuICAgIGJvdW5kcy55ID0gYm91bmRzLnkgfCAwO1xuICAgIGJvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCB8IDA7XG4gICAgYm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgfCAwO1xuXG5cbiAgICAvLyBwYWRkaW5nIVxuICAgIHZhciBwYWRkaW5nID0gZmlsdGVyc1swXS5wYWRkaW5nIHwgMDtcbiAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG5cblxuICAgIGlmKHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvL1RPRE8gdGhpcyB3aWxsIGJyZWFrIGlmIHRoZSByZW5kZXJUZXh0dXJlIHRyYW5zZm9ybSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgdHJhbnNsYXRpb24uXG4gICAgICAgIC8vV2lsbCBuZWVkIHRvIHRha2UgdGhlIGZ1bGwgbWF0cml4IHRyYW5zZm9ybSBpbnRvIGFjb3VudC4uXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQudHJhbnNmb3JtO1xuXG4gICAgICAgIGJvdW5kcy54ICs9IHRyYW5zZm9ybS50eDtcbiAgICAgICAgYm91bmRzLnkgKz0gdHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG5cbiAgICAgICAgYm91bmRzLnggLT0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSAtPSB0cmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgICB0aGlzLmNhcEZpbHRlckFyZWEoIGJvdW5kcyApO1xuICAgIH1cblxuICAgIGlmKGJvdW5kcy53aWR0aCA+IDAgJiYgYm91bmRzLmhlaWdodCA+IDApXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGJvdW5kcztcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGV4dHVyZSk7XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRleHR1cmUuLlxuICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gVE9ETyBnZXQgcmlkIG9mIG9iamVjdCBjcmVhdGlvbiFcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogdGV4dHVyZSxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBwdXNoIHNvbXRoaW5nIG9uIHRvIHRoZSBzdGFjayB0aGF0IGlzIGVtcHR5XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcnNcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnBvcEZpbHRlciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrLnBvcCgpO1xuICAgIHZhciBwcmV2aW91c0ZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrW3RoaXMuZmlsdGVyU3RhY2subGVuZ3RoLTFdO1xuXG4gICAgdmFyIGlucHV0ID0gZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyBpZiB0aGUgcmVuZGVyVGFyZ2V0IGlzIG51bGwgdGhlbiB3ZSBkb24ndCBhcHBseSB0aGUgZmlsdGVyIGFzIGl0cyBvZmZzY3JlZW5cbiAgICBpZighZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IHByZXZpb3VzRmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyB1c2UgcHJvZ3JhbVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaW5wdXQuZnJhbWU7XG5cbiAgICB0aGlzLnF1YWQubWFwKHRoaXMudGV4dHVyZVNpemUsIGlucHV0LmZyYW1lKTtcblxuXG4gICAgLy8gVE9ETy4uIHRoaXMgcHJvYmFibHkgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgZmlsdGVycyA9IGZpbHRlckRhdGEuZmlsdGVyO1xuXG4gICAgLy8gYXNzdW1pbmcgYWxsIGZpbHRlcnMgZm9sbG93IHRoZSBjb3JyZWN0IGZvcm1hdD8/XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAyICogNCAqIDQpO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIG5vcm1hbCBibGVuZG1vZGUhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShDT05TVC5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAxKVxuICAgIHtcbiAgICAgICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoZW4gc2V0dGluZyB0aGlzIGVhY2ggdGltZT9cbiAgICAgICAgaWYgKGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgIGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1swXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgaW5wdXQsIG91dHB1dCApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggaW5wdXQgKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZmxpcFRleHR1cmUgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3BUZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aC0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICAgICAgaWYgKGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBmbG9wVGV4dHVyZSApO1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGZsaXBUZXh0dXJlO1xuICAgICAgICAgICAgZmxpcFRleHR1cmUgPSBmbG9wVGV4dHVyZTtcbiAgICAgICAgICAgIGZsb3BUZXh0dXJlID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlcnNbZmlsdGVycy5sZW5ndGgtMV0uYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBvdXRwdXQgKTtcblxuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxpcFRleHR1cmUgKTtcbiAgICAgICAgdGhpcy5yZXR1cm5SZW5kZXJUYXJnZXQoIGZsb3BUZXh0dXJlICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckRhdGEuZmlsdGVyO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY2xlYXIgdGhlIFJlbmRlclRhcmdldFxuICogQHJldHVybiB7UmVuZGVyVGFyZ2V0fVxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIGNsZWFyIClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy50ZXh0dXJlUG9vbC5wb3AoKSB8fCBuZXcgUmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyZXIuZ2wsIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0LCBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiAqIENPTlNULkZJTFRFUl9SRVNPTFVUSU9OKTtcbiAgICByZW5kZXJUYXJnZXQuZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcih0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyVGFyZ2V0O1xufTtcblxuLypcbiAqIFJldHVybnMgYSBSZW5kZXJUYXJnZXQgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1JlbmRlclRhcmdldH0gVGhlIFJlbmRlclRhcmdldCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5SZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0KVxue1xuICAgIHRoaXMudGV4dHVyZVBvb2wucHVzaCggcmVuZGVyVGFyZ2V0ICk7XG59O1xuXG4vKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2hhZGVyIHtTaGFkZXJ9IFRoZSBzaGFkZXIgdG8gdXBsb2FkXG4gKiBAcGFyYW0gaW5wdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBjbGVhciB0aGUgb3V0cHV0VGFyZ2V0XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHNoYWRlciwgaW5wdXRUYXJnZXQsIG91dHB1dFRhcmdldCwgY2xlYXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG91dHB1dFRhcmdldCk7XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICBvdXRwdXRUYXJnZXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHNoYWRlclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gQ2FuIHRoaXMgYmUgY2FjaGVkIGFuZCBub3QgYHRvQXJyYXlgZWQgZWFjaCBmcmFtZT9cbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG5cbiAgICAvL1RPRE8gY2FuIHRoaXMgYmUgb3B0aW1pc2VkP1xuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcbi8qXG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcbiovXG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBpbnB1dFRhcmdldC50ZXh0dXJlKTtcblxuICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbn07XG5cbi8qXG4gKiBDYWxjdWxhdGVzIHRoZSBtYXBwZWQgbWF0cml4XG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWFcbiAqIEBwYXJhbSBzcHJpdGUge1Nwcml0ZX0gdGhlIHRhcmdldCBzcHJpdGVcbiAqIEBwYXJhbSBvdXRwdXRNYXRyaXgge01hdHJpeH0gQGFsdmluXG4gKi9cbi8vIFRPRE8gcGxheWluZyBhcm91bmQgaGVyZS4uIHRoaXMgaXMgdGVtcG9yYXJ5IC0gKHdpbGwgZW5kIHVwIGluIHRoZSBzaGFkZXIpXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jYWxjdWxhdGVNYXBwZWRNYXRyaXggPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSwgc3ByaXRlLCBvdXRwdXRNYXRyaXgpXG57XG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gc3ByaXRlLndvcmxkVHJhbnNmb3JtLmNvcHkobWF0aC5NYXRyaXguVEVNUF9NQVRSSVgpLFxuICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICB2YXIgbWFwcGVkTWF0cml4ID0gb3V0cHV0TWF0cml4LmlkZW50aXR5KCk7XG5cbiAgICAvLyBzY2FsZS4uXG4gICAgdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCApO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKDEgLCByYXRpbyk7XG5cbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyB0ZXh0dXJlLndpZHRoKTtcbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gdGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0udHggLz0gdGV4dHVyZS53aWR0aCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICB3b3JsZFRyYW5zZm9ybS50eSAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0uaW52ZXJ0KCk7XG5cbiAgICBtYXBwZWRNYXRyaXgucHJlcGVuZCh3b3JsZFRyYW5zZm9ybSk7XG5cbiAgICAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIG1hcHBlZE1hdHJpeC50cmFuc2xhdGUoc3ByaXRlLmFuY2hvci54LCBzcHJpdGUuYW5jaG9yLnkpO1xuXG4gICAgcmV0dXJuIG1hcHBlZE1hdHJpeDtcblxuICAgIC8vIEtlZXBpbmcgdGhlIG9yZ2luYWwgYXMgYSByZW1pbmRlciB0byBtZSBvbiBob3cgdGhpcyB3b3JrcyFcbiAgICAvL1xuICAgIC8vIHZhciBtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvLyAvLyBzY2FsZS4uXG4gICAgLy8gdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgLy8gbS50cmFuc2xhdGUoZmlsdGVyQXJlYS54IC8gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgZmlsdGVyQXJlYS55IC8gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQpO1xuXG5cbiAgICAvLyBtLnNjYWxlKDEgLCByYXRpbyk7XG5cblxuICAgIC8vIHZhciB0cmFuc2Zvcm0gPSB3dC5jbG9uZSgpO1xuXG4gICAgLy8gdmFyIHRyYW5zbGF0ZVNjYWxlWCA9ICh0aGlzLnRleHR1cmVTaXplLndpZHRoIC8gNjIwKTtcbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gMzgwKTtcblxuICAgIC8vIHRyYW5zZm9ybS50eCAvPSA2MjAgKiB0cmFuc2xhdGVTY2FsZVg7XG4gICAgLy8gdHJhbnNmb3JtLnR5IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcblxuICAgIC8vIHRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIC8vIHRyYW5zZm9ybS5hcHBlbmQobSk7XG5cbiAgICAvLyAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgLy8gdHJhbnNmb3JtLnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIC8vIHJldHVybiB0cmFuc2Zvcm07XG59O1xuXG4vKlxuICogQ29uc3RyYWlucyB0aGUgZmlsdGVyIGFyZWEgdG8gdGhlIHRleHR1cmUgc2l6ZVxuICogQHBhcmFtIGZpbHRlckFyZWEge1JlY3RhbmdsZX0gVGhlIGZpbHRlciBhcmVhIHdlIHdhbnQgdG8gY2FwXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhcEZpbHRlckFyZWEgPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSlcbntcbiAgICBpZiAoZmlsdGVyQXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEud2lkdGggKz0gZmlsdGVyQXJlYS54O1xuICAgICAgICBmaWx0ZXJBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgKz0gZmlsdGVyQXJlYS55O1xuICAgICAgICBmaWx0ZXJBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggZmlsdGVyQXJlYS54ICsgZmlsdGVyQXJlYS53aWR0aCA+IHRoaXMudGV4dHVyZVNpemUud2lkdGggKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCA9IHRoaXMudGV4dHVyZVNpemUud2lkdGggLSBmaWx0ZXJBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnkgKyBmaWx0ZXJBcmVhLmhlaWdodCA+IHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLSBmaWx0ZXJBcmVhLnk7XG4gICAgfVxufTtcblxuLypcbiAqIFJlc2l6ZXMgYWxsIHRoZSByZW5kZXIgdGFyZ2V0cyBpbiB0aGUgcG9vbFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLnRleHR1cmVTaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLnJlc2l6ZSggd2lkdGgsIGhlaWdodCApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGZpbHRlciBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBmaWx0ZXIgc3RhY2suXG4gKlxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnF1YWQuZGVzdHJveSgpO1xuICAgIFxuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBudWxsO1xuICAgIHRoaXMub2Zmc2V0WSA9IDA7XG5cbiAgICAvLyBkZXN0cm95IHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHR1cmVQb29sLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlUG9vbCA9IG51bGw7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgQWxwaGFNYXNrRmlsdGVyID0gcmVxdWlyZSgnLi4vZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNYXNrTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICB0aGlzLmFscGhhTWFza1Bvb2wgPSBbXTtcbn1cblxuTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hc2tNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgaWYgKG1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBtYXNrIGZyb20gdGhlIG1hc2sgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucG9wU3ByaXRlTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTcHJpdGVNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdmFyIGFscGhhTWFza0ZpbHRlciA9IHRoaXMuYWxwaGFNYXNrUG9vbC5wb3AoKTtcblxuICAgIGlmICghYWxwaGFNYXNrRmlsdGVyKVxuICAgIHtcbiAgICAgICAgYWxwaGFNYXNrRmlsdGVyID0gW25ldyBBbHBoYU1hc2tGaWx0ZXIobWFza0RhdGEpXTtcbiAgICB9XG5cbiAgICBhbHBoYU1hc2tGaWx0ZXJbMF0ubWFza1Nwcml0ZSA9IG1hc2tEYXRhO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRhcmdldCwgYWxwaGFNYXNrRmlsdGVyKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKi9cbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTcHJpdGVNYXNrID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVycyA9IHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbC5wdXNoKGZpbHRlcnMpO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTdGVuY2lsTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaE1hc2sobWFza0RhdGEpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BNYXNrKG1hc2tEYXRhKTtcbn07XG5cbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1RleHR1cmVTaGFkZXInKSxcbiAgICBDb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhBdHRpYnMgPSAxMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG5cbi8vICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcbn1cblxuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaGFkZXJNYW5hZ2VyO1xudXRpbHMucGx1Z2luVGFyZ2V0Lm1peGluKFNoYWRlck1hbmFnZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlck1hbmFnZXI7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cblNoYWRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlIGNvcnJlY3RseSBhcyB0aGlzIHRlbmRzIHRvIHZhcnlcbiAgICB0aGlzLm1heEF0dGlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xuXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1heEF0dGliczsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRPRE8gLSBXaHkgYXJlIHRoZXNlIG5vdCBwbHVnaW5zPyBXZSBjYW4ndCBkZWNvdXBsZSBwcmltaXRpdmVzIHVubGVzcyB0aGV5IGFyZS4uLi5cbiAgICB0aGlzLmRlZmF1bHRTaGFkZXIgPSBuZXcgVGV4dHVyZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcyk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbmV3IENvbXBsZXhQcmltaXRpdmVTaGFkZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFRha2VzIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHBhcmFtZXRlcnMgYW5kIHVwbG9hZHMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXR0cmlicyB7YW55W119IGF0dHJpYnNcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0QXR0cmlicyA9IGZ1bmN0aW9uIChhdHRyaWJzKVxue1xuICAgIC8vIHJlc2V0IHRlbXAgc3RhdGVcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRlbXBBdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAodmFyIGEgaW4gYXR0cmlicylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbYV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSAhPT0gdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHNoYWRlci5cbiAqXG4gKiBAcGFyYW0gc2hhZGVyIHtQSVhJLlNoYWRlcn0gdGhlIHNoYWRlciB0byB1cGxvYWRcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0U2hhZGVyID0gZnVuY3Rpb24gKHNoYWRlcilcbntcbiAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRJZCA9PT0gc2hhZGVyLnVpZClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50SWQgPSBzaGFkZXIudWlkO1xuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5nbC51c2VQcm9ncmFtKHNoYWRlci5wcm9ncmFtKTtcbiAgICB0aGlzLnNldEF0dHJpYnMoc2hhZGVyLmF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0LlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBXZWJHTE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBudWxsO1xufVxuXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFza01hbmFnZXI7XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgbWFzayBzdGFjayB0aGF0IGlzIHVzZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICpcbiAqIEBwYXJhbSBzdGVuY2lsTWFza1N0YWNrIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9IFRoZSBtYXNrIHN0YWNrXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnNldE1hc2tTdGFjayA9IGZ1bmN0aW9uICggc3RlbmNpbE1hc2tTdGFjayApXG57XG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBpZiAoc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLiBAYWx2aW5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWwgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQuYXR0YWNoU3RlbmNpbEJ1ZmZlcigpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICBpZiAoc21zLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgZ2wuY2xlYXIoZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTtcbiAgICAgICAgc21zLnJldmVyc2UgPSB0cnVlO1xuICAgICAgICBzbXMuY291bnQgPSAwO1xuICAgIH1cblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucHVzaCh3ZWJHTERhdGEpO1xuXG4gICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5WRVJUKTtcblxuICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgIGlmIChzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgIH1cblxuICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSBsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLktFRVApO1xuXG4gICAgc21zLmNvdW50Kys7XG59O1xuXG4vKipcbiAqIFRPRE8gdGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSFcbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuYmluZEdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgLy9pZiAodGhpcy5fY3VycmVudEdyYXBoaWNzID09PSBncmFwaGljcylyZXR1cm47XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBiaW5kIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0zZnYoc2hhZGVyLnVuaWZvcm1zLmNvbG9yLl9sb2NhdGlvbiwgd2ViR0xEYXRhLmNvbG9yKTtcblxuICAgICAgICBnbC51bmlmb3JtMWYoc2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSk7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDQgKiAyLCAwKTtcblxuICAgICAgICAvLyBub3cgZG8gdGhlIHJlc3QuLlxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAqL1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvL3RoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5hY3RpdmF0ZVByaW1pdGl2ZVNoYWRlcigpO1xuLy8gICAgICAgIHNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wcmltaXRpdmVTaGFkZXI7XG4gICAgICAgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG5cbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuLy8gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuXG4gICAgICAvKiAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7Ki9cbiAgICB9XG59O1xuXG4vKipcbiAqIFRPRE8gQGFsdmluXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIHNtcyA9IHRoaXMuc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucG9wKCk7XG5cbiAgICBzbXMuY291bnQtLTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIC8vIHRoZSBzdGFjayBpcyBlbXB0eSFcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgICAgIHRoaXMuYmluZEdyYXBoaWNzKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcblxuICAgICAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRyYXcgYSBxdWFkIHRvIGluY3JlbWVudC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgICAgICAgICAvLyBkcmF3IHRoZSB0cmlhbmdsZSBzdHJpcCFcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCArPSAyO1xuXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKSwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgLy8gIGNvbnNvbGUubG9nKFwiPDw+PlwiKVxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIChsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cblxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIG1hc2sgc3RhY2suXG4gKlxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2sgPSBudWxsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfSBUaGUgbWFzayBkYXRhIHN0cnVjdHVyZSB0byB1c2VcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIFxuICAgIC8vVE9ETyBGSVhcbiAgICBpZiAobWFza0RhdGEuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MudXBkYXRlR3JhcGhpY3MobWFza0RhdGEsIHRoaXMucmVuZGVyZXIuZ2wpO1xuICAgIH1cblxuICAgIGlmICghbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFN0ZW5jaWwobWFza0RhdGEsIG1hc2tEYXRhLl93ZWJHTFt0aGlzLnJlbmRlcmVyLmdsLmlkXS5kYXRhWzBdKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIodGhpcy5yZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcblxuICAgIHRoaXMucG9wU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuIiwiLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLm9uKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xufVxuXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTE1hbmFnZXI7XG5cbi8qKlxuICogR2VuZXJpYyBtZXRob2QgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbldlYkdMTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblx0Ly8gZG8gc29tZSBjb2RlcyBpbml0IVxufTtcblxuLyoqXG4gKiBHZW5lcmljIGRlc3Ryb3kgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlbmRlcmVyLm9mZignY29udGV4dCcsIHRoaXMub25Db250ZXh0Q2hhbmdlLCB0aGlzKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCcuL1NoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBjb21wbGV4IHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQ29tcGxleFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyBjb2xvcjsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoY29sb3IgKiBhbHBoYSAqIHRpbnQsIGFscGhhKTsnLC8vXCIgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIGNvbG9yOiAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsMCwwXSB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB0aW50OiAgIHsgdHlwZTogJzNmJywgdmFsdWU6IFswLCAwLCAwXSB9LFxuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFDb2xvcjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQmFzZSBzaGFkZXIgY2xhc3MgZm9yIFBJWEkgbWFuYWdlZCBzaGFkZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbdW5pZm9ybXNdIHtvYmplY3R9IFVuaWZvcm1zIGZvciB0aGlzIHNoYWRlci5cbiAqIEBwYXJhbSBbYXR0cmlidXRlc10ge29iamVjdH0gQXR0cmlidXRlcyBmb3IgdGhpcyBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIFNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcylcbntcbiAgICBpZiAoIXZlcnRleFNyYyB8fCAhZnJhZ21lbnRTcmMpXG4gICAge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXhpLmpzIEVycm9yLiBTaGFkZXIgcmVxdWlyZXMgdmVydGV4U3JjIGFuZCBmcmFnbWVudFNyYycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5nbCA9IHNoYWRlck1hbmFnZXIucmVuZGVyZXIuZ2w7XG5cbiAgICAvL1RPRE8gbWF5YmUgd2Ugc2hvdWxkIHBhc3MgcmVuZGVyZXIgcmF0aGVyIHRoYW4gc2hhZGVyIG1hbmdlcj8/IGZvb2QgZm9yIHRob3VnaHQuLlxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IHNoYWRlck1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgcHJvZ3JhbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUHJvZ3JhbX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaWZvcm1zIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhdHRyaWJ1dGVzIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50ZXJcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlciBhcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmM7XG5cbiAgICB0aGlzLmluaXQoKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHNoYWRlciBhbmQgdXNlcyBpdFxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbXBpbGUoKTtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy51bmlmb3JtcykpO1xuICAgIHRoaXMuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKSk7XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSB1bmlmb3JtIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgdW5pZm9ybXMgdG8gY2FjaGVcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnVuaWZvcm1zW2tleXNbaV1dLl9sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWNoZXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgYXR0cmlidXRlIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgYXR0cmlidXRlcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlQXR0cmlidXRlTG9jYXRpb25zID0gZnVuY3Rpb24gKGtleXMpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleXNbaV1dID0gdGhpcy5nbC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGtleXNbaV0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgbmVlZGVkIGFueW1vcmUuLi5cblxuICAgIC8vIEJlZ2luIHdvcnN0IGhhY2sgZXZhIC8vXG5cbiAgICAvLyBXSFk/Pz8gT05MWSBvbiBteSBjaHJvbWUgcGl4ZWwgdGhlIGxpbmUgYWJvdmUgcmV0dXJucyAtMSB3aGVuIHVzaW5nIGZpbHRlcnM/XG4gICAgLy8gbWF5YmUgaXRzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnbCBjb250ZXh0LlxuICAgIC8vIEknbSBjb252aW5jZWQgdGhpcyBpcyBhIGJ1ZyBpbiB0aGUgY2hyb21lIGJyb3dzZXIgYXMgdGhlcmUgaXMgTk8gcmVhc29uIHdoeSB0aGlzIHNob3VsZCBiZSByZXR1cm5pbmcgLTEgZXNwZWNpYWxseSBhcyBpdCBvbmx5IG1hbmlmZXN0cyBvbiBteSBjaHJvbWUgcGl4ZWxcbiAgICAvLyBJZiB0aGVyZXMgYW55IHdlYkdMIHBlb3BsZSB0aGF0IGtub3cgd2h5IGNvdWxkIGhhcHBlbiBwbGVhc2UgaGVscCA6KVxuICAgIC8vIGlmICh0aGlzLmF0dHJpYnV0ZXMuYUNvbG9yID09PSAtMSl7XG4gICAgLy8gICAgIHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPSAyO1xuICAgIC8vIH1cblxuICAgIC8vIEVuZCB3b3JzdCBoYWNrIGV2YSAvL1xufTtcblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQgY3JlYXRlcyB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19XG4gKi9cblNoYWRlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHZhciBnbFZlcnRTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuVkVSVEVYX1NIQURFUiwgdGhpcy52ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuRlJBR01FTlRfU0hBREVSLCB0aGlzLmZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuICh0aGlzLnByb2dyYW0gPSBwcm9ncmFtKTtcbn07XG5cbi8qKlxuKiBBZGRzIGEgbmV3IHVuaWZvcm1cbipcbiogQHBhcmFtIHVuaWZvcm0ge29iamVjdH0gdGhlIG5ldyB1bmlmb3JtIHRvIGF0dGFjaFxuKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgbG9jYXRpb24gPSB1bmlmb3JtLl9sb2NhdGlvbixcbiAgICAgICAgdmFsdWUgPSB1bmlmb3JtLnZhbHVlLFxuICAgICAgICBnbCA9IHRoaXMuZ2wsXG4gICAgICAgIGksIGlsO1xuXG4gICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIHNpbmdsZSBpbnQgdmFsdWVcbiAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGZsb2F0IHZhbHVlXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBjYXNlICcxZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSgyKSBvciBKUyBBcnJyYXlcbiAgICAgICAgY2FzZSAnMmYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDMpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICczZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDQpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgMkQgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YyJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDNEIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2Myc6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSA0RCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjQnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMWl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMml2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnNGl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20yJzpcbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgIGNhc2UgJ01hdHJpeDJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB1bmlmb3JtLnRyYW5zcG9zZSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20zJzpcbiAgICAgICAgY2FzZSAnbWF0Myc6XG4gICAgICAgIGNhc2UgJ01hdHJpeDNmdic6XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICBjYXNlICdtYXQ0JzpcbiAgICAgICAgY2FzZSAnTWF0cml4NGZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIENvbG9yIFZhbHVlXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgaW50ZWdlcnMgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdjEnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAyRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yydic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgyICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAyXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDIgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYXJyYXkgb2YgM0QgUG9pbnQgb2JqZWN0c1xuICAgICAgICBjYXNlICd2M3YnOlxuICAgICAgICAgICAgaWYgKCF1bmlmb3JtLl9hcnJheSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMyAqIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlsID0gdmFsdWUubGVuZ3RoOyBpIDwgaWw7ICsraSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogM10gICAgICAgPSB2YWx1ZVtpXS54O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzICsgMV0gICA9IHZhbHVlW2ldLnk7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAyXSAgID0gdmFsdWVbaV0uejtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiA0RCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Y0dic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg0ICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0XSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDJdICAgPSB2YWx1ZVtpXS56O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgM10gICA9IHZhbHVlW2ldLnc7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gUElYSS5UZXh0dXJlXG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuXG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUgfHwgIXVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGlzIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xbJ1RFWFRVUkUnICsgdGhpcy50ZXh0dXJlQ291bnRdKTtcblxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXTtcblxuICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdGV4dHVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9uZS4uXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgICAgICAgICAgLy8gc2V0IHVuaWZvcm0gdG8gdGV4dHVyZSBpbmRleFxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0uX2xvY2F0aW9uLCB0aGlzLnRleHR1cmVDb3VudCk7XG5cbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBuZXh0IHRleHR1cmUgaWRcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgU2hhZGVyIFdhcm5pbmc6IFVua25vd24gdW5pZm9ybSB0eXBlOiAnICsgdW5pZm9ybS50eXBlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNoYWRlciB1bmlmb3JtIHZhbHVlcy5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm1zID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy51bmlmb3JtcylcbiAgICB7XG4gICAgICAgIHRoaXMuc3luY1VuaWZvcm0odGhpcy51bmlmb3Jtc1trZXldKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSW5pdGlhbGlzZXMgYSBTYW1wbGVyMkQgdW5pZm9ybSAod2hpY2ggbWF5IG9ubHkgYmUgYXZhaWxhYmxlIGxhdGVyIG9uIGFmdGVyIGluaXRVbmlmb3JtcyBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBsb2FkZWQpXG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXRTYW1wbGVyMkQgPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbiAgICBpZiAodW5pZm9ybS50ZXh0dXJlRGF0YSlcbiAgICB7XG5cbiAgICAgICAgLy9UT0RPIG1vdmUgdGhpcy4uLlxuICAgICAgICB2YXIgZGF0YSA9IHVuaWZvcm0udGV4dHVyZURhdGE7XG5cbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuXG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBsaWVkQWxwaGEpO1xuICAgICAgICAvLyBHTFRleHR1cmUgPSBtYWcgbGluZWFyLCBtaW4gbGluZWFyX21pcG1hcF9saW5lYXIsIHdyYXAgcmVwZWF0ICsgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIC8vIEdMVGV4dHVyZUxpbmVhciA9IG1hZy9taW4gbGluZWFyLCB3cmFwIGNsYW1wXG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3RSZXBlYXQgPSBtYWcvbWluIE5FQVJFU1QsIHdyYXAgcmVwZWF0XG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3QgPSBtYWcvbWluIG5lYXJlc3QsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gQXVkaW9UZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCA1MTIsIGhlaWdodCAyLCBib3JkZXIgMFxuICAgICAgICAvLyBLZXlUZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCAyNTYsIGhlaWdodCAyLCBib3JkZXIgMFxuXG4gICAgICAgIC8vICBtYWdGaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcbiAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxuXG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZGF0YS5sdW1pbmFuY2UgPyBnbC5MVU1JTkFOQ0UgOiBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLnNvdXJjZSk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGRhdGEubWFnRmlsdGVyID8gZGF0YS5tYWdGaWx0ZXIgOiBnbC5MSU5FQVIgKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSApO1xuXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGRhdGEud3JhcFQgPyBkYXRhLndyYXBUIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyTWFuYWdlci5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHNoYWRlci5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5nbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmdsID0gbnVsbDtcbiAgICB0aGlzLnVuaWZvcm1zID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSBudWxsO1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBudWxsO1xufTtcblxuU2hhZGVyLnByb3RvdHlwZS5fZ2xDb21waWxlID0gZnVuY3Rpb24gKHR5cGUsIHNyYylcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICB0aGlzLmdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgdGhpcy5nbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cbiAgICBpZiAoIXRoaXMuZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgdGhpcy5nbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCBjdXN0b21Vbmlmb3JtcywgY3VzdG9tQXR0cmlidXRlcylcbntcbiAgICB2YXIgdW5pZm9ybXMgPSB7XG5cbiAgICAgICAgdVNhbXBsZXI6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogMCB9LFxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxXSkgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVW5pZm9ybXMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciB1IGluIGN1c3RvbVVuaWZvcm1zKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bmlmb3Jtc1t1XSA9IGN1c3RvbVVuaWZvcm1zW3VdO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgYVZlcnRleFBvc2l0aW9uOiAgICAwLFxuICAgICAgICBhVGV4dHVyZUNvb3JkOiAgICAgIDAsXG4gICAgICAgIGFDb2xvcjogICAgICAgICAgICAgMFxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tQXR0cmlidXRlcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGEgaW4gY3VzdG9tQXR0cmlidXRlcylcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlc1thXSA9IGN1c3RvbUF0dHJpYnV0ZXNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYWdtZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IFRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgU2hhZGVyLmNhbGwodGhpcywgc2hhZGVyTWFuYWdlciwgdmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihnbClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7Ly8sIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKTtcblxufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi4vbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQmFzZSBmb3IgYSBjb21tb24gb2JqZWN0IHJlbmRlcmVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzeXN0ZW0gcmVuZGVyZXIgcGx1Z2luLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gT2JqZWN0UmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufVxuXG5cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYmplY3RSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0UmVuZGVyZXI7XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZW5kZXJlciBhbmQgc2V0cyB0aGUgc2hhZGVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIHNldCB0aGUgc2hhZGVyLi5cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHJlbmRlcmVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xufTtcblxuLyoqXG4gKiBmbHVzaGVzXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIGZsdXNoIVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gcmVuZGVyIHRoZSBvYmplY3Rcbn07XG4iLCIvKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSBxdWFkXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFRoZSBnbCBjb250ZXh0IGZvciB0aGlzIHF1YWQgdG8gdXNlLlxuICovXG5mdW5jdGlvbiBRdWFkKGdsKVxue1xuICAgIC8qXG4gICAgICogdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4vLyAgICB0aGlzLnRleHR1cmVzID0gbmV3IFRleHR1cmVVdnMoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAwLDAsXG4gICAgICAgIDIwMCwwLFxuICAgICAgICAyMDAsMjAwLFxuICAgICAgICAwLDIwMFxuICAgIF0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgcXVhZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMSwwLFxuICAgICAgICAxLDEsXG4gICAgICAgIDAsMVxuICAgIF0pO1xuXG4vLyAgICB2YXIgd2hpdGUgPSAoMHhGRkZGRkYgPj4gMTYpICsgKDB4RkZGRkZGICYgMHhmZjAwKSArICgoMHhGRkZGRkYgJiAweGZmKSA8PCAxNikgKyAoMSAqIDI1NSA8PCAyNCk7XG4gICAgLy9UT0RPIGNvbnZlcnQgdGhpcyB0byBhIDMyIHVuc2lnbmVkIGludCBhcnJheVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBjb21wb25lbnRzIG9mIHRoZSB0cmlhbmdsZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxXG4gICAgXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbXG4gICAgICAgIDAsIDEsIDIsIDAsIDMsIDJcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSB2ZXJ0ZXggYnVmZmVyXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSBpbmRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDggKyAxNikgKiA0LCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnVwbG9hZCgpO1xufVxuXG5RdWFkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFF1YWQ7XG5cbi8qKlxuICogTWFwcyB0d28gUmVjdGFuZ2xlIHRvIHRoZSBxdWFkXG4gKiBAcGFyYW0gcmVjdCB7UElYSS5SZWN0YW5nbGV9IHRoZSBmaXJzdCByZWN0YW5nbGVcbiAqIEBwYXJhbSByZWN0MiB7UElYSS5SZWN0YW5nbGV9IHRoZSBzZWNvbmQgcmVjdGFuZ2xlXG4gKi9cblF1YWQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKHJlY3QsIHJlY3QyKVxue1xuICAgIHZhciB4ID0gMDsgLy9yZWN0Mi54IC8gcmVjdC53aWR0aDtcbiAgICB2YXIgeSA9IDA7IC8vcmVjdDIueSAvIHJlY3QuaGVpZ2h0O1xuXG4gICAgdGhpcy51dnNbMF0gPSB4O1xuICAgIHRoaXMudXZzWzFdID0geTtcblxuICAgIHRoaXMudXZzWzJdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1szXSA9IHk7XG5cbiAgICB0aGlzLnV2c1s0XSA9IHggKyByZWN0Mi53aWR0aCAvIHJlY3Qud2lkdGg7XG4gICAgdGhpcy51dnNbNV0gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1s2XSA9IHg7XG4gICAgdGhpcy51dnNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICAvLy8gLS0tLS1cbiAgICB4ID0gcmVjdDIueDtcbiAgICB5ID0gcmVjdDIueTtcblxuICAgIHRoaXMudmVydGljZXNbMF0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbMV0gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1syXSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzNdID0geTtcblxuICAgIHRoaXMudmVydGljZXNbNF0gPSB4ICsgcmVjdDIud2lkdGg7XG4gICAgdGhpcy52ZXJ0aWNlc1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQ7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzZdID0geDtcbiAgICB0aGlzLnZlcnRpY2VzWzddID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXIgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuUXVhZC5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvLyBUT0RPIGNvdWxkIHByb2JhYmx5IGJlIHB1c2hlZCBpbnRvIG9uZSB1cGxvYWQhXG4gICAgZ2wuYmluZEJ1ZmZlciggZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlciApO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMudmVydGljZXMpO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDggKiA0LCB0aGlzLnV2cyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgKDggKyA4KSAqIDQsIHRoaXMuY29sb3JzKTtcbn07XG5cblF1YWQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xuXG5cbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgICAgIFxuICAgIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcbiAgICBHTEZyYW1lYnVmZmVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xGcmFtZWJ1ZmZlcixcbiAgICBcbiAgICBTdGVuY2lsTWFza1N0YWNrID0gcmVxdWlyZSgnLi9TdGVuY2lsTWFza1N0YWNrJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIGhvcml6b250YWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgdmVydGljYWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAqIEBwYXJhbSByb290IHtib29sZWFufSBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gKi9cbnZhciBSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uLCByb290KVxue1xuICAgIC8vVE9ETyBSZXNvbHV0aW9uIGNvdWxkIGdvIGhlcmUgKCBlZyBsb3cgcmVzIGJsdXJzIClcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvLyBuZXh0IHRpbWUgdG8gY3JlYXRlIGEgZnJhbWUgYnVmZmVyIGFuZCB0ZXh0dXJlXG5cbiAgICAvKipcbiAgICAgKiBBIGZyYW1lIGJ1ZmZlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xGcmFtZUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJDb2xvciA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBvYmplY3QgYXMgYSByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9iamVjdCdzIHRyYW5zZm9ybVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5mcmFtZSA9IG51bGw7XG4gICAgXG4gICAgdGhpcy5kZWZhdWx0RnJhbWUgPSBuZXcgUElYSS5SZWN0YW5nbGUoKTtcbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBudWxsO1xuICAgIHRoaXMuc291cmNlRnJhbWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHN0ZW5jaWwgYnVmZmVyIHN0b3JlcyBtYXNraW5nIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlckJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgc3RlbmNpbCBtYXNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFza1N0YWNrfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG5ldyBTdGVuY2lsTWFza1N0YWNrKCk7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZXMgZmlsdGVyIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6dGhpcyxcbiAgICAgICAgICAgIGZpbHRlcjpbXSxcbiAgICAgICAgICAgIGJvdW5kczp0aGlzLnNpemVcbiAgICAgICAgfVxuICAgIF07XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVFxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gR0xGcmFtZWJ1ZmZlci5jcmVhdGVSR0JBKGdsLCAxMDAsIDEwMCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBBIGZyYW1lIGJ1ZmZlciBuZWVkcyBhIHRhcmdldCB0byByZW5kZXIgdG8uLlxuICAgICAgICAgICAgY3JlYXRlIGEgdGV4dHVyZSBhbmQgYmluZCBpdCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgICovXG4gICAgICAgIFxuXG4gICAgICAgLy8gVE9ETyBjaGFuZ2UhXG4gICAgICAgIC8vIHRoaXMgaXMgdXNlZCBieSB0aGUgYmFzZSB0ZXh0dXJlXG4gICAgICAgIHRoaXMudGV4dHVyZSA9IHRoaXMuZnJhbWVCdWZmZXIudGV4dHVyZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbWFrZSBpdCBhIG51bGwgZnJhbWVidWZmZXIuLlxuICAgICAgICB0aGlzLmZyYW1lQnVmZmVyLmZyYW1lYnVmZmVyID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn07XG5cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZW5kZXJUYXJnZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRhcmdldDtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpbHRlciB0ZXh0dXJlLlxuICpcbiAqIEBwYXJhbSBbYmluZD1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCB3ZSBiaW5kIG91ciBmcmFtZWJ1ZmZlciBiZWZvcmUgY2xlYXJpbmc/XG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbihjbGVhckNvbG9yKVxue1xuICAgIHZhciBjYyA9IGNsZWFyQ29sb3IgfHwgdGhpcy5jbGVhckNvbG9yXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5jbGVhcihjY1swXSxjY1sxXSxjY1syXSxjY1szXSkvL3IsZyxiLGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmF0dGFjaFN0ZW5jaWxCdWZmZXIgPSBmdW5jdGlvbigpXG57XG4gICAgLy9UT0RPIGNoZWNrIGlmIHN0ZW5jaWwgaXMgZG9uZT9cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgaXMgdXNlZCBmb3IgbWFza2luZyBpbiBwaXhpXG4gICAgICogbGV0cyBjcmVhdGUgb25lIGFuZCB0aGVuIGFkZCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgKi9cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZW5hYmxlU3RlbmNpbCgpO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXdwb3J0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIC8vVE9PRCByZWZhY3RvciB1c2FnZSBvZiBmcmFtZS4uXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIuYmluZCgpO1xuXG4gICAgdGhpcy5kZXN0aW5hdGlvbkZyYW1lID0gZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgfHwgdGhpcy5kZWZhdWx0RnJhbWU7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IHRoaXMuc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggdGhpcy5kZXN0aW5hdGlvbkZyYW1lLCB0aGlzLnNvdXJjZUZyYW1lICk7XG5cbiAgICBpZih0aGlzLnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5hcHBlbmQodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIGlmKHRoaXMuZGVzdGluYXRpb25GcmFtZSAhPT0gdGhpcy5zb3VyY2VGcmFtZSlcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgICAgICBnbC5zY2lzc29yKHRoaXMuZGVzdGluYXRpb25GcmFtZS54LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmRpc2FibGUoZ2wuU0NJU1NPUl9URVNUKTtcbiAgICB9XG5cblxuICAgIC8vIFRPRE8gLSBkb2VzIG5vdCBuZWVkIHRvIGJlIHVwZGF0ZWQgYWxsIHRoZSB0aW1lPz9cbiAgICBnbC52aWV3cG9ydCh0aGlzLmRlc3RpbmF0aW9uRnJhbWUueCx0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uKTtcblxuXG59O1xuXG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmFzZWQgb24gYSBwcm9qZWN0aW9uIGZyYW1lICh3aGljaCBpcyBhIHJlY3RhbmdsZSlcbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2FsY3VsYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbkZyYW1lLCBzb3VyY2VGcmFtZSlcbntcbiAgICB2YXIgcG0gPSB0aGlzLnByb2plY3Rpb25NYXRyaXg7XG5cbiAgICBzb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IGRlc3RpbmF0aW9uRnJhbWU7XG5cbiAgICBwbS5pZGVudGl0eSgpO1xuXG4gICAgLy8gVE9ETzogbWFrZSBkZXN0IHNjYWxlIHNvdXJjZVxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAxIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gLTEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAtMSAvIGRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0KjI7XG5cbiAgICAgICAgcG0udHggPSAtMSAtIHNvdXJjZUZyYW1lLnggKiBwbS5hO1xuICAgICAgICBwbS50eSA9IDEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVzaXplcyB0aGUgdGV4dHVyZSB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge051bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGhlaWdodCB7TnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgdGV4dHVyZVxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHdpZHRoID0gd2lkdGggfCAwO1xuICAgIGhlaWdodCA9IGhlaWdodCB8IDA7XG5cbiAgICBpZiAodGhpcy5zaXplLndpZHRoID09PSB3aWR0aCAmJiB0aGlzLnNpemUuaGVpZ2h0ID09PSBoZWlnaHQpIFxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2l6ZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuc2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICB0aGlzLmRlZmF1bHRGcmFtZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuZGVmYXVsdEZyYW1lLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIucmVzaXplKHdpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBoZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuICAgIFxuICAgIHZhciBwcm9qZWN0aW9uRnJhbWUgPSB0aGlzLmZyYW1lIHx8IHRoaXMuc2l6ZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSByZW5kZXIgdGFyZ2V0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIHRoaXMuZnJhbWVCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBTdGVuY2lsTWFza1N0YWNrKClcbntcblx0LyoqXG4gICAgICogVGhlIGFjdHVhbCBzdGFja1xuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsU3RhY2sgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQGFsdmluXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb3VudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY291bnQgPSAwO1xufVxuXG5TdGVuY2lsTWFza1N0YWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0ZW5jaWxNYXNrU3RhY2s7XG5tb2R1bGUuZXhwb3J0cyA9IFN0ZW5jaWxNYXNrU3RhY2s7XG4iLCJDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogTWFwcyBnbCBibGVuZCBjb21iaW5hdGlvbnMgdG8gV2ViR0xcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpKGdsLCBvYmplY3QpXG57XG4gICAgb2JqZWN0ID0gb2JqZWN0IHx8IHt9O1xuXG4gICAgLy9UT0RPIC0gcHJlbXVsdGlwbHkgYWxwaGEgd291bGQgYmUgZGlmZmVyZW50LlxuICAgIC8vYWRkIGEgYm9vbGVhbiBmb3IgdGhhdCFcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQUREXSAgICAgICAgICAgPSBbZ2wuU1JDX0FMUEhBLCBnbC5EU1RfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9IFtnbC5EU1RfQ09MT1IsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5TQ1JFRU5dICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLk9ORV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRBUktFTl0gICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0JVUk5dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRJRkZFUkVOQ0VdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aTtcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcblx0b2JqZWN0PSBvYmplY3QgfHwge307XG5cbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5QT0lOVFNdICAgICAgICAgPSBnbC5QT0lOVFM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORVNdICAgICAgICAgID0gZ2wuTElORVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9MT09QXSAgICAgID0gZ2wuTElORV9MT09QO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLkxJTkVfU1RSSVBdICAgICA9IGdsLkxJTkVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVTXSAgICAgID0gZ2wuVFJJQU5HTEVTO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXSA9IGdsLlRSSUFOR0xFX1NUUklQO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX0ZBTl0gICA9IGdsLlRSSUFOR0xFX0ZBTjtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBTcHJpdGUgb2JqZWN0IGlzIHRoZSBiYXNlIGZvciBhbGwgdGV4dHVyZWQgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCB0byB0aGUgc2NyZWVuXG4gKlxuICogQSBzcHJpdGUgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhbiBpbWFnZSBsaWtlIHRoaXM6XG4gKlxuICogYGBganNcbiAqIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgZm9yIHRoaXMgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZSh0ZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFuY2hvciBzZXRzIHRoZSBvcmlnaW4gcG9pbnQgb2YgdGhlIHRleHR1cmUuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgMCwwIHRoaXMgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0XG4gICAgICogU2V0dGluZyB0aGUgYW5jaG9yIHRvIDAuNSwwLjUgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgY2VudGVyZWRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMSwxIHdvdWxkIG1lYW4gdGhlIHRleHR1cmUncyBvcmlnaW4gcG9pbnQgd2lsbCBiZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmFuY2hvciA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUgKHRoaXMgaXMgaW5pdGlhbGx5IHNldCBieSB0aGUgdGV4dHVyZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQSB2YWx1ZSBvZiAweEZGRkZGRiB3aWxsIHJlbW92ZSBhbnkgdGludCBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2hhZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgc3ByaXRlLiBTZXQgdG8gbnVsbCB0byByZW1vdmUgYSBjdXJyZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJ8UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgY2FjaGVkIHZhbHVlIG9mIHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvLyBjYWxsIHRleHR1cmUgc2V0dGVyXG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBUZXh0dXJlLkVNUFRZO1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZVxuICAgIHRoaXMudmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblNwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLngpICogdGhpcy50ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzaWduID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLngpIHx8IDE7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBzaWduICogdmFsdWUgLyB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgTWF0aC5hYnModGhpcy5zY2FsZS55KSAqIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHByaXZhdGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBzbyBpZiBfd2lkdGggaXMgMCB0aGVuIHdpZHRoIHdhcyBub3Qgc2V0Li5cbiAgICBpZiAodGhpcy5fd2lkdGgpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnggPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgKiB0aGlzLl93aWR0aCAvIHRoaXMudGV4dHVyZS5mcmFtZS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zY2FsZS55ID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLnkpICogdGhpcy5faGVpZ2h0IC8gdGhpcy50ZXh0dXJlLmZyYW1lLmhlaWdodDtcbiAgICB9XG59O1xuXG5TcHJpdGUucHJvdG90eXBlLmNhY2x1bGF0ZVZlcnRpY2VzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgIHd0ID0gdGhpcy50cmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIGEgPSB3dC5hLCBiID0gd3QuYiwgYyA9IHd0LmMsIGQgPSB3dC5kLCB0eCA9IHd0LnR4LCB0eSA9IHd0LnR5LFxuICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhLFxuICAgICAgICB3MCwgdzEsIGgwLCBoMSxcbiAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcbiAgICAgICAgXG4gICAgaWYgKHRyaW0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgYW5kIGlzIG5vdCBhIHRpbGluZ3Nwcml0ZSB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgdzEgPSB0cmltLnggLSB0aGlzLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICBoMSA9IHRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcbiAgICB9XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMF0gPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzFdID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMl0gPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzNdID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzRdID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs1XSA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzZdID0gYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs3XSA9IGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG5cbn1cblxuLyoqXG4qXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy50cmFuc2Zvcm0udXBkYXRlZCB8fCB0aGlzLnRleHR1cmVEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZURpcnR5ID0gZmFsc2U7XG4gICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuICAgIH1cbiAgICBcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFNwcml0ZSBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcbiAgICAgICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5YLFxuICAgICAgICAgICAgbWF4WCxcbiAgICAgICAgICAgIG1pblksXG4gICAgICAgICAgICBtYXhZLFxuICAgICAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YTtcblxuICAgICAgICB2YXIgeDEgPSB2ZXJ0ZXhEYXRhWzBdXG4gICAgICAgIHZhciB5MSA9IHZlcnRleERhdGFbMV1cblxuICAgICAgICB2YXIgeDIgPSB2ZXJ0ZXhEYXRhWzJdXG4gICAgICAgIHZhciB5MiA9IHZlcnRleERhdGFbM11cblxuICAgICAgICB2YXIgeDMgPSB2ZXJ0ZXhEYXRhWzRdXG4gICAgICAgIHZhciB5MyA9IHZlcnRleERhdGFbNV1cblxuICAgICAgICB2YXIgeDQgPSB2ZXJ0ZXhEYXRhWzZdXG4gICAgICAgIHZhciB5NCA9IHZlcnRleERhdGFbN11cblxuICAgICAgICBtaW5YID0geDE7XG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkxO1xuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MTtcbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTE7XG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoaWxkcmVuXG4gICAgICAgIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGRCb3VuZHMgPSB0aGlzLmNvbnRhaW5lckdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICB3MCA9IGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICB3MSA9IGNoaWxkQm91bmRzLnggKyBjaGlsZEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGgwID0gY2hpbGRCb3VuZHMueTtcbiAgICAgICAgICAgIGgxID0gY2hpbGRCb3VuZHMueSArIGNoaWxkQm91bmRzLmhlaWdodDtcblxuICAgICAgICAgICAgbWluWCA9IChtaW5YIDwgdzApID8gbWluWCA6IHcwO1xuICAgICAgICAgICAgbWluWSA9IChtaW5ZIDwgaDApID8gbWluWSA6IGgwO1xuXG4gICAgICAgICAgICBtYXhYID0gKG1heFggPiB3MSkgPyBtYXhYIDogdzE7XG4gICAgICAgICAgICBtYXhZID0gKG1heFkgPiBoMSkgPyBtYXhZIDogaDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fYm91bmRzLnggPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHRoaXMuX2JvdW5kcy55ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG4gICAgdGhpcy5fYm91bmRzLndpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICByZXR1cm4gdGhpcy5fYm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgc3ByaXRlXG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cblNwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLnRleHR1cmUuY3JvcC53aWR0aCA8PSAwIHx8IHRoaXMudGV4dHVyZS5jcm9wLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vICBJZ25vcmUgbnVsbCBzb3VyY2VzXG4gICAgaWYgKHRoaXMudGV4dHVyZS52YWxpZClcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgICAgIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgIGR4LFxuICAgICAgICAgICAgZHksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDtcblxuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgICAgIC8vIElmIHNtb290aGluZ0VuYWJsZWQgaXMgc3VwcG9ydGVkIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgc21vb3RoaW5nIHByb3BlcnR5IGZvciB0aGlzIHRleHR1cmVcbiAgICAgICAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSO1xuICAgICAgICBpZiAocmVuZGVyZXIuc21vb3RoUHJvcGVydHkgJiYgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gIT09IHNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldID0gc21vb3RoaW5nRW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHRyaW1tZWQgd2Ugb2Zmc2V0IGJ5IHRoZSB0cmltIHgveSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgZnJhbWUgZGltZW5zaW9uc1xuXG4gICAgICAgIGlmKHRleHR1cmUucm90YXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICBcbiAgICAgICAgICAgIGR4ICs9IHdpZHRoO1xuXG4gICAgICAgICAgICB3dC50eCA9IGR5ICogd3QuYSArIGR4ICogd3QuYyArIHd0LnR4O1xuICAgICAgICAgICAgd3QudHkgPSBkeSAqIHd0LmIgKyBkeCAqIHd0LmQgKyB3dC50eTtcblxuICAgICAgICAgICAgdmFyIHRlbXAgPSB3dC5hO1xuICAgICAgICAgICAgd3QuYSAgPSAtd3QuYztcbiAgICAgICAgICAgIHd0LmMgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIHRlbXAgPSB3dC5iO1xuICAgICAgICAgICAgd3QuYiAgPSAtd3QuZDtcbiAgICAgICAgICAgIHd0LmQgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIC8vIHRoZSBhbmNob3IgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFib3ZlLCBzbyBsZXRzIHNldCBpdCB0byB6ZXJvXG4gICAgICAgICAgICBkeCA9IDA7XG4gICAgICAgICAgICBkeSA9IDA7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIC8vIEFsbG93IGZvciBwaXhlbCByb3VuZGluZ1xuICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgKHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwLFxuICAgICAgICAgICAgICAgICh3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHggPSBkeCB8IDA7XG4gICAgICAgICAgICBkeSA9IGR5IHwgMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICB3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjbGVhbiB1cCBjYWNoaW5nIC0gaG93IHRvIGNsZWFuIHVwIHRoZSBjYWNoZXM/XG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC55ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgc3ByaXRlIGFuZCBvcHRpb25hbGx5IGl0cyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95VGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95VGV4dHVyZSwgZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5hbmNob3IgPSBudWxsO1xuXG4gICAgaWYgKGRlc3Ryb3lUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcblxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zLi5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICovXG5TcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgU3ByaXRlKFRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXInKSxcbiAgICBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9jcmVhdGVJbmRpY2VzRm9yUXVhZHMnKSxcbiAgICBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4vZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgZ2xDb3JlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgU3ByaXRlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1Nwcml0ZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFJlbmRlcmVyIGRlZGljYXRlZCB0byBkcmF3aW5nIGFuZCBiYXRjaGluZyBzcHJpdGVzLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU3ByaXRlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgdmFsdWVzIHNlbnQgaW4gdGhlIHZlcnRleCBidWZmZXIuXG4gICAgICogcG9zaXRpb25YLCBwb3NpdGlvblksIGNvbG9yUiwgY29sb3JHLCBjb2xvckIgPSA1XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdmVydGV4IGluZm9ybWF0aW9uIGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgU3ByaXRlQmF0Y2ggYmVmb3JlIGl0IGZsdXNoZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIG91ciBiYXRjaFxuICAgIHZhciBudW1WZXJ0cyA9ICh0aGlzLnNpemUgKiA0KSAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBiYXRjaCwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgIHZhciBudW1JbmRpY2VzID0gdGhpcy5zaXplICogNjtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSB2ZXJ0ZXggZGF0YSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5QnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgQXJyYXlCdWZmZXIobnVtVmVydHMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBGbG9hdDMyQXJyYXkgZm9yIHBvc2l0aW9uc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciB1dnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIGNvbG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlcyBvZiB0aGUgZ2VvbWV0cnkgKHF1YWRzKSB0byBkcmF3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHModGhpcy5zaXplKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIFxuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICBcbiAgICAvL1RPRE8gLSAzMDAgaXMgYSBiaXQgbWFnaWMsIGZpZ3VyZSBvdXQgYSBuaWNlciBhbW91bnQhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykgXG4gICAge1xuICAgICAgICB0aGlzLmdyb3Vwc1tpXSA9IHt0ZXh0dXJlczpbXSwgdGV4dHVyZUNvdW50OjAsIGlkczpbXSwgc2l6ZTowLCBzdGFydDowLCBibGVuZDowfTsgXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcblxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsOyAgICBcbn1cblxuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3Nwcml0ZScsIFNwcml0ZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5NQVhfVEVYVFVFUyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cbiAgICB0aGlzLl9zaGFkZXIgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgdGhpcy5NQVhfVEVYVFVFUykvL25ldyBUZXh0dXJlU2hhZGVyKGdsKTtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlcjtcblxuICAgIC8vIGNyZWF0ZSBhIGNvdXBsZSBvZiBidWZmZXJzXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKGdsLCBudWxsLCBnbC5EWU5BTUlDX0RSQVcpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoZ2wsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgLy8gYnVpbGQgdGhlIHZhbyBvYmplY3QgdGhhdCB3aWxsIHJlbmRlci4uXG4gICAgdGhpcy52YW8gPSBuZXcgZ2xDb3JlLlZlcnRleEFycmF5T2JqZWN0KGdsKTtcblxuICAgIHRoaXMudmFvLmFkZEluZGV4KHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCAwKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIGdsLlVOU0lHTkVEX1NIT1JULCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMiAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMyAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVJZCwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgNCAqIDQpO1xuXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdG8gcmVuZGVyIHdoZW4gdXNpbmcgdGhpcyBzcHJpdGViYXRjaFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHNwcml0ZSlcbntcbiAgICAvL1RPRE8gc2V0IGJsZW5kIG1vZGVzLi5cbiAgICAvLyBjaGVjayB0ZXh0dXJlLi5cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPj0gdGhpcy5zaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICBcbiAgICAvLyBnZXQgdGhlIHV2cyBmb3IgdGhlIHRleHR1cmVcbiAgIFxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIGlmICghc3ByaXRlLnRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgLy8gcHVzaCBhIHRleHR1cmUuXG4gICAgLy8gaW5jcmVtZW50IHRoZSBiYXRjaHNpemVcbiAgICB2YXIgbmV4dFRleHR1cmUgPSAgc3ByaXRlLnRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgdmFyIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwO1xuICAgIHZhciBpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50VGV4dHVyZSAhPT0gbmV4dFRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbmV4dFRleHR1cmU7XG4gICAgICAgIFxuICAgICAgICBpZighbmV4dFRleHR1cmUuX2VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9pZCA9IHRoaXMudGV4dHVyZUNvdW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLnRleHR1cmVDb3VudCA9PT0gdGhpcy5NQVhfVEVYVFVFUylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgICAgICAgICAgICAgeyAgICAgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnN0YXJ0ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50KytdID0gbmV4dFRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHR1cmVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdHJpbT8/XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG5cbiAgICAvLyB1cGxvYWQgdGhlIHNwcml0ZSBlbGVtZXRucy4uLlxuICAgIC8vIHRoZXkgaGF2ZSBhbGwgcmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIHdlIGp1c3QgbmVlZCB0byBwdXNoIHRoZW0gaW50byB0aGUgYnVmZmVyLlxuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7XG4gICAgdmFyIHZlcnRleERhdGEgPSBzcHJpdGUudmVydGV4RGF0YVxuICAgIHZhciB0aW50ID0gKHNwcml0ZS50aW50ID4+IDE2KSArIChzcHJpdGUudGludCAmIDB4ZmYwMCkgKyAoKHNwcml0ZS50aW50ICYgMHhmZikgPDwgMTYpICsgKHNwcml0ZS53b3JsZEFscGhhICogMjU1IDw8IDI0KTtcbiAgICB2YXIgdXZzID0gc3ByaXRlLnRleHR1cmUuX3V2cy51dnNfdWludDMyO1xuICAgIC8veHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzBdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMF07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7IFxuICAgIFxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsyXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzNdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzFdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs0XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzVdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzJdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzZdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbN107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbM107XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgYW5kIGVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA9PT0gMClyZXR1cm47XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG5cbiAgICB0aGlzLmN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSB0aGlzLmN1cnJlbnRHcm91cC5zdGFydDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICB7ICAgICBcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgXG4gICAgLy8gZG8gc29tZSBzbWFydCBhcnJheSBzdHVmZi4uXG4gICAgLy8gZG91YmxlIHNpemUgc28gd2UgZG9udCBhbHdheSBzdWJhcnJheSB0aGUgZWxlbWVudHMuLlxuICAgIC8vIHVwbG9hZCB0aGUgdmVydHMgdG8gdGhlIGJ1ZmZlclxuICAgIGlmICh0aGlzLmN1cnJlbnRCYXRjaFNpemUgPiAoIHRoaXMuc2l6ZSAqIDAuNSApIClcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh0aGlzLnZlcnRpY2VzLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbyBrIC4uIHN1YiBhcnJheSBpcyBTTE9XPj9cbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnBvc2l0aW9ucy5zdWJhcnJheSgwLCB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplKTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHZpZXcsIDAsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgc2hhZGVyLi5cbiAgICB0aGlzLnJlbmRlcmVyLmJpbmRTaGFkZXIodGhpcy5fc2hhZGVyKTtcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCAwICk7XG5cbiAgICAvLy8gcmVuZGVyIHRoZSBncm91cHMuLlxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdyb3VwQ291bnQ7IGkrKykge1xuICAgICAgICBcbiAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5ncm91cHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC50ZXh0dXJlQ291bnQ7IGorKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kVGV4dHVyZShncm91cC50ZXh0dXJlc1tqXSwgaik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgZ3JvdXAuc2l6ZSAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCBncm91cC5zdGFydCAqIDYgKiAyKTtcbiAgICB9O1xuXG4gICAgLy8gcmVzZXQgZWxlbWVudHMgZm9yIHRoZSBuZXh0IGZsdXNoXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBzcHJpdGUgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFvLmJpbmQoKTtcbn07XG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgdGhpcy52YW8udW5iaW5kKCk7XG59O1xuLyoqXG4gKiBEZXN0cm95cyB0aGUgU3ByaXRlQmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuY29sb3JzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zcHJpdGVzID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCBtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgdmVydGV4U3JjID0gXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGFUZXh0dXJlSWQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZUZXh0dXJlSWQgPSBhVGV4dHVyZUlkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVwiO1xuICAgIHZhciBmcmFnbWVudFNyYyA9ICdwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG4nICsgZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpICsgXCJcXG5cXG5cIiArIGZyYWdUZW1wbGF0ZVxuXG4gICAgZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYy5yZXBsYWNlKC9cXCVcXCUvZ2ksICcxNicpO1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cbiAgICB2YXIgc2FtcGxlVmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSB7XG4gICAgICAgIHNhbXBsZVZhbHVlc1tpXSA9IGk7XG4gICAgfTtcblxuICAgIHNoYWRlci5iaW5kKCk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnVTYW1wbGVycyA9IHNhbXBsZVZhbHVlcztcblxuICAgIHJldHVybiBzaGFkZXI7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKVxue1xuICAgIHZhciBzcmMgPSAndmVjNCBnZXRTYW1wbGVGcm9tQXJyYXkoc2FtcGxlcjJEIHRleHR1cmVzWyUlXSwgaW50IG5keCwgdmVjMiB1dikge1xcblxcbnZlYzQgY29sb3I7J1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgaWYoaSA+IDApc3JjICs9ICdcXG5lbHNlICc7XG4gICAgICAgIGlmKGkgPCBtYXhUZXh0dXJlcy0xKXNyYyArPSAnaWYobmR4ID09ICcgKyBpICsgJyknO1xuICAgICAgICBzcmMgKz0gJ1xcbnsnO1xuICAgICAgICBzcmMgKz0gJ1xcblxcdGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmVzWycraSsnXSwgdXYpOyc7XG4gICAgICAgIHNyYyArPSAnXFxufSc7XG4gICAgfTtcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdyZXR1cm4gY29sb3I7JztcbiAgICBzcmMgKz0gJ1xcbn0nO1xuXG4gICAgcmV0dXJuIHNyYztcbn1cblxudmFyIGZyYWdUZW1wbGF0ZSA9IFtcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG4gICAgJ3ZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsnLFxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcnNbJSVdOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICdnbF9GcmFnQ29sb3IgPSBnZXRTYW1wbGVGcm9tQXJyYXkodVNhbXBsZXJzLCBpbnQodlRleHR1cmVJZCksIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yOycsXG4gICAgJ30nXG5dLmpvaW4oJ1xcbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyO1xuIiwidmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBUZXh0IE9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nIGluIHlvdXIgdGV4dCBzdHJpbmcsXG4gKiBvciBhZGQgYSB3b3JkV3JhcCBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSBhbmQgYW5kIHdvcmRXcmFwV2lkdGggcHJvcGVydHkgd2l0aCBhIHZhbHVlIGluIHRoZSBzdHlsZSBvYmplY3QuXG4gKlxuICogQSBUZXh0IGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBzdHJpbmcgYW5kIGEgc3R5bGUgb2JqZWN0XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0ID0gbmV3IFBJWEkuVGV4dCgnVGhpcyBpcyBhIHBpeGkgdGV4dCcse2ZvbnQgOiAnMjRweCBBcmlhbCcsIGZpbGwgOiAweGZmMTAxMCwgYWxpZ24gOiAnY2VudGVyJ30pO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbc3R5bGUuZm9udF0ge3N0cmluZ30gZGVmYXVsdCAnYm9sZCAyMHB4IEFyaWFsJyBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlLmcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcCwgaXQgbmVlZHMgd29yZFdyYXAgdG8gYmUgc2V0IHRvIHRydWVcbiAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzRdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gKi9cbmZ1bmN0aW9uIFRleHQodGV4dCwgc3R5bGUsIHJlc29sdXRpb24pXG57XG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgMmQgY29udGV4dCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gd2l0aFxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY2FudmFzLlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyh0aGlzLmNhbnZhcyk7XG4gICAgdGV4dHVyZS50cmltID0gbmV3IG1hdGguUmVjdGFuZ2xlKCk7XG4gICAgU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbn1cblxuLy8gY29uc3RydWN0b3JcblRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTcHJpdGUucHJvdG90eXBlKTtcblRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gVGV4dDtcblxuVGV4dC5mb250UHJvcGVydGllc0NhY2hlID0ge307XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZm9udD0nYm9sZCAyMHB0IEFyaWFsJ10ge3N0cmluZ30gVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gICAgICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZWcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGVnICdibHVlJywgJyNGQ0ZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXBcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd8bnVtYmVyfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNl0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gICAgICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAgICAgKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAgICAgKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHN0eWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdHlsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5maWxsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpbGwgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmZpbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLnN0cm9rZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zdHJva2UgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLnN0cm9rZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZHJvcFNoYWRvd0NvbG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZHJvcFNoYWRvd0NvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGUuZm9udCA9IHN0eWxlLmZvbnQgfHwgJ2JvbGQgMjBwdCBBcmlhbCc7XG4gICAgICAgICAgICBzdHlsZS5maWxsID0gc3R5bGUuZmlsbCB8fCAnYmxhY2snO1xuICAgICAgICAgICAgc3R5bGUuYWxpZ24gPSBzdHlsZS5hbGlnbiB8fCAnbGVmdCc7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2UgPSBzdHlsZS5zdHJva2UgfHwgJ2JsYWNrJzsgLy9wcm92aWRlIGEgZGVmYXVsdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzLzEzNlxuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIHx8IDA7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcCA9IHN0eWxlLndvcmRXcmFwIHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXBXaWR0aCA9IHN0eWxlLndvcmRXcmFwV2lkdGggfHwgMTAwO1xuXG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93ID0gc3R5bGUuZHJvcFNoYWRvdyB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvciB8fCAnIzAwMDAwMCc7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93QW5nbGUgPSBzdHlsZS5kcm9wU2hhZG93QW5nbGUgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA6IE1hdGguUEkgLyA2O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlID0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgOiA1O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0JsdXIgOiAwOyAvL3NoYWRvd0JsdXIgaXMgJzAnIGJ5IGRlZmF1bHQgYWNjb3JkaW5nIHRvIEhUTUxcblxuICAgICAgICAgICAgc3R5bGUucGFkZGluZyA9IHN0eWxlLnBhZGRpbmcgfHwgMDtcblxuICAgICAgICAgICAgc3R5bGUudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lIHx8ICdhbHBoYWJldGljJztcblxuICAgICAgICAgICAgc3R5bGUubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbiB8fCAnbWl0ZXInO1xuICAgICAgICAgICAgc3R5bGUubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQgfHwgMTA7XG5cbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gc3R5bGU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNvcHkgZm9yIHRoZSB0ZXh0IG9iamVjdC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCl7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgc3R5bGUgPSB0aGlzLl9zdHlsZTtcbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG5cbiAgICAvLyB3b3JkIHdyYXBcbiAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbCB0ZXh0XG4gICAgdmFyIG91dHB1dFRleHQgPSBzdHlsZS53b3JkV3JhcCA/IHRoaXMud29yZFdyYXAodGhpcy5fdGV4dCkgOiB0aGlzLl90ZXh0O1xuXG4gICAgLy8gc3BsaXQgdGV4dCBpbnRvIGxpbmVzXG4gICAgdmFyIGxpbmVzID0gb3V0cHV0VGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCB3aWR0aFxuICAgIHZhciBsaW5lV2lkdGhzID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aCk7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGZvbnRQcm9wZXJ0aWVzID0gdGhpcy5kZXRlcm1pbmVGb250UHJvcGVydGllcyhzdHlsZS5mb250KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBsaW5lV2lkdGg7XG4gICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICB2YXIgd2lkdGggPSBtYXhMaW5lV2lkdGggKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICB3aWR0aCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSAoIHdpZHRoICsgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgaGVpZ2h0XG4gICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLnN0eWxlLmxpbmVIZWlnaHQgfHwgZm9udFByb3BlcnRpZXMuZm9udFNpemUgKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG5cbiAgICB2YXIgaGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aDtcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGhlaWdodCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gKCBoZWlnaHQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nICogMiApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5jb250ZXh0LnNjYWxlKCB0aGlzLnJlc29sdXRpb24sIHRoaXMucmVzb2x1dGlvbik7XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgfVxuXG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFN0eWxlPVwiI0ZGMDAwMFwiO1xuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuICAgIHRoaXMuY29udGV4dC5zdHJva2VTdHlsZSA9IHN0eWxlLnN0cm9rZTtcbiAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIHRoaXMuY29udGV4dC50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmU7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVKb2luID0gc3R5bGUubGluZUpvaW47XG4gICAgdGhpcy5jb250ZXh0Lm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0O1xuXG4gICAgdmFyIGxpbmVQb3NpdGlvblg7XG4gICAgdmFyIGxpbmVQb3NpdGlvblk7XG5cbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGlmIChzdHlsZS5kcm9wU2hhZG93Qmx1ciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhTaGFkb3dPZmZzZXQgPSBNYXRoLmNvcyhzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgICAgICB2YXIgeVNoYWRvd09mZnNldCA9IE1hdGguc2luKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCArIHhTaGFkb3dPZmZzZXQsIGxpbmVQb3NpdGlvblkgKyB5U2hhZG93T2Zmc2V0ICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL3NldCBjYW52YXMgdGV4dCBzdHlsZXNcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZmlsbDtcblxuICAgIC8vZHJhdyBsaW5lcyBsaW5lIGJ5IGxpbmVcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0cm9rZSAmJiBzdHlsZS5zdHJva2VUaGlja25lc3MpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJva2VUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUudHJpbS54ID0gMDtcbiAgICB0ZXh0dXJlLnRyaW0ueSA9IC10aGlzLl9zdHlsZS5wYWRkaW5nO1xuXG4gICAgdGV4dHVyZS50cmltLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGV4dHVyZS50cmltLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAtIHRoaXMuX3N0eWxlLnBhZGRpbmcqMjtcblxuICAgIHRoaXMuX3dpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5lbWl0KCd1cGRhdGUnLCAgdGV4dHVyZS5iYXNlVGV4dHVyZSk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqL1xuVGV4dC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICAvL3RoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5yZW5kZXJXZWJHTC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgLy8gICB0aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYXNjZW50LCBkZXNjZW50IGFuZCBmb250U2l6ZSBvZiBhIGdpdmVuIGZvbnRTdHlsZVxuICpcbiAqIEBwYXJhbSBmb250U3R5bGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGZvbnRTdHlsZSlcbntcbiAgICB2YXIgcHJvcGVydGllcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdO1xuXG4gICAgaWYgKCFwcm9wZXJ0aWVzKVxuICAgIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzO1xuICAgICAgICB2YXIgY29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnfE3DiXEnKS53aWR0aCk7XG4gICAgICAgIHZhciBiYXNlbGluZSA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCdNJykud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xuXG4gICAgICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiAxLjQgfCAwO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNmMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQoJ3xNw4lxJywgMCwgYmFzZWxpbmUpO1xuXG4gICAgICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgICB2YXIgcGl4ZWxzID0gaW1hZ2VkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmUgPSB3aWR0aCAqIDQ7XG5cbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgIHZhciBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZWxpbmU7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCArPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnQgPSBiYXNlbGluZSAtIGk7XG5cbiAgICAgICAgaWR4ID0gcGl4ZWxzIC0gbGluZTtcbiAgICAgICAgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGRlc2NlbnQuIHNjYW4gZnJvbSBib3R0b20gdG8gdG9wIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggLT0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IGkgLSBiYXNlbGluZTtcbiAgICAgICAgcHJvcGVydGllcy5mb250U2l6ZSA9IHByb3BlcnRpZXMuYXNjZW50ICsgcHJvcGVydGllcy5kZXNjZW50O1xuXG4gICAgICAgIFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBuZXdsaW5lcyB0byBhIHN0cmluZyB0byBoYXZlIGl0IG9wdGltYWxseSBmaXQgaW50byB0aGUgaG9yaXpvbnRhbFxuICogYm91bmRzIHNldCBieSB0aGUgVGV4dCBvYmplY3QncyB3b3JkV3JhcFdpZHRoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS53b3JkV3JhcCA9IGZ1bmN0aW9uICh0ZXh0KVxue1xuICAgIC8vIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyXG4gICAgLy8gdGhhbiBpdHMgaG9yaXpvbnRhbCBib3VuZHMuXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICAgIHZhciB3b3JkV3JhcFdpZHRoID0gdGhpcy5fc3R5bGUud29yZFdyYXBXaWR0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XG4gICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQod29yZHNbal0pLndpZHRoO1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aFdpdGhTcGFjZSA9IHdvcmRXaWR0aCArIHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xuICAgICAgICAgICAgaWYgKGogPT09IDAgfHwgd29yZFdpZHRoV2l0aFNwYWNlID4gc3BhY2VMZWZ0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcHJpbnRpbmcgdGhlIG5ld2xpbmUgaWYgaXQncyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZSB0aGF0IGlzXG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSB3b3JkIHdyYXAgd2lkdGguXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal07XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB3b3Jkc1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgbGluZXMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFRleHQgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgVGV4dFxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UZXh0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzLmNhbGwodGhpcywgbWF0cml4KTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT10cnVlXSB7Ym9vbGVhbn0gd2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICAvLyBtYWtlIHN1cmUgdG8gcmVzZXQgdGhlIHRoZSBjb250ZXh0IGFuZCBjYW52YXMuLiBkb250IHdhbnQgdGhpcyBoYW5naW5nIGFyb3VuZCBpbiBtZW1vcnkhXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG5cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGVzdHJveUJhc2VUZXh0dXJlKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIFJlbmRlclRhcmdldCA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBGaWx0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKSxcbiAgICB0ZW1wUmVjdCA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuXG4vKipcbiAqIEEgQmFzZVJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIEJhc2VSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIHRha2VzIGEgc25hcHNob3Qgb2YgYW55IERpc3BsYXkgT2JqZWN0IGdpdmVuIHRvIGl0cyByZW5kZXIgbWV0aG9kLiBUaGUgcG9zaXRpb25cbiAqIGFuZCByb3RhdGlvbiBvZiB0aGUgZ2l2ZW4gRGlzcGxheSBPYmplY3RzIGlzIGlnbm9yZWQuIEZvciBleGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcigxMDI0LCAxMDI0LCB7IHZpZXc6IGNhbnZhcywgcmF0aW86IDEgfSk7XG4gKiB2YXIgQmFzZXJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5CYXNlUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihzcHJpdGUpO1xuICogYGBgXG4gKlxuICogVGhlIFNwcml0ZSBpbiB0aGlzIGNhc2Ugd2lsbCBiZSByZW5kZXJlZCB0byBhIHBvc2l0aW9uIG9mIDAsMC4gVG8gcmVuZGVyIHRoaXMgc3ByaXRlIGF0IGl0cyBhY3R1YWxcbiAqIHBvc2l0aW9uIGEgQ29udGFpbmVyIHNob3VsZCBiZSB1c2VkOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZG9jID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKlxuICogZG9jLmFkZENoaWxkKHNwcml0ZSk7XG4gKlxuICogQmFzZXJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiBCYXNlcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZVxuICogQHBhcmFtIFt3aWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbaGVpZ2h0PTEwMF0ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIEJhc2VSZW5kZXJUZXh0dXJlLCB5b3UgbXVzdCBwYXNzIGEgcmVuZGVyZXIgaW50byB0aGUgY29uc3RydWN0b3IuJyk7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUuY2FsbCh0aGlzLCBudWxsLCBzY2FsZU1vZGUpO1xuICAgXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047O1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRHJhdy9yZW5kZXIgdGhlIGdpdmVuIERpc3BsYXlPYmplY3Qgb250byB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBkZXNjZW5kZW50cyBhcmUgdHJhbnNmb3JtZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIElmIGB1cGRhdGVUcmFuc2Zvcm1gIGlzIHRydWUgdGhlbiB0aGUgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQgYmVmb3JlIHRoZVxuICAgICAqIG1ldGhvZCByZXR1cm5zLiBPdGhlcndpc2UgaXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcgY29kZSB0byBjb3JyZWN0bHkgdXNlIG9yIHJlc2V0XG4gICAgICogdGhlIHRyYW5zZm9ybWVkIGRpc3BsYXkgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5IG9iamVjdCBpcyBhbHdheXMgcmVuZGVyZWQgd2l0aCBhIHdvcmxkQWxwaGEgdmFsdWUgb2YgMS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICAgICAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gICAgICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAgICAgKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB1c2VzLiBBIEJhc2VSZW5kZXJUZXh0dXJlIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgcmVuZGVyZXIgYXQgdGhlIG1vbWVudCBpZiBpdHMgd2ViR0wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnNjYWxlTW9kZSwgdGhpcy5yZXNvbHV0aW9uKTsvLywgdGhpcy50aGlzLnNjYWxlTW9kZSk7XG4gICAgICAgIHRoaXMuX2dsVGV4dHVyZXNbZ2wuaWRdID0gIHRoaXMudGV4dHVyZUJ1ZmZlci50ZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgLy9UT0RPIHJlZmFjdG9yIGZpbHRlciBtYW5hZ2VyLi4gYXMgcmVhbGx5IGl0cyBubyBsb25nZXIgYSBtYW5hZ2VyIGlmIHdlIHVzZSBpdCBoZXJlLi5cbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbmV3IEZpbHRlck1hbmFnZXIodGhpcy5yZW5kZXJlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlcldlYkdMO1xuXG4gICAgICAgIC8vIHRoZSBjcmVhdGlvbiBvZiBhIGZpbHRlciBtYW5hZ2VyIHVuYmluZHMgdGhlIGJ1ZmZlcnMuLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgICAgICBpZih0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQpdGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlckNhbnZhcztcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcih0aGlzLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuaGVpZ2h0KiB0aGlzLnJlc29sdXRpb24pO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcblxufVxuXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIHVwZGF0ZUJhc2Uge2Jvb2xlYW59IFNob3VsZCB0aGUgYmFzZVRleHR1cmUud2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYmUgcmVzaXplZCBhcyB3ZWxsP1xuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgaWYgKHdpZHRoID09PSB0aGlzLndpZHRoICYmIGhlaWdodCA9PT0gdGhpcy5oZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZCA9ICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7XG5cbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoZGVzdGluYXRpb25GcmFtZSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuYmluZEZyYW1lYnVmZmVyKHRoaXMucmVuZGVyZXIuZ2wuRlJBTUVCVUZGRVIsIHRoaXMudGV4dHVyZUJ1ZmZlci5mcmFtZUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKGZhbHNlLCBkZXN0aW5hdGlvbkZyYW1lKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAoZnJhbWUsIGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAodXBkYXRlVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpID8gdXBkYXRlVHJhbnNmb3JtIDogdHJ1ZTsvLyF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIudHJhbnNmb3JtID0gbWF0cml4O1xuXG4gICAgLy9UT0RPIG5vdCBhIGZhbiB0aGF0IHRoaXMgaXMgaGVyZS4uLiBpdCB3aWxsIG1vdmUhXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKCk7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICBpZiAodXBkYXRlVHJhbnNmb3JtKVxuICAgIHtcblxuICAgICAgICAvLyByZXNldCB0aGUgbWF0cml4IG9mIHRoZSBkaXNwbGF0eU9iamVjdC4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uaWRlbnRpdHkoKTtcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmN1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGVtcFJlY3Qud2lkdGggPSBmcmFtZS5oZWlnaHQ7XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gZnJhbWUud2lkdGg7XG4gICBcbiAgICAvL1RPRE8gcmVuYW1lIHRleHR1cmVCdWZmZXIgdG8gcmVuZGVyVGFyZ2V0Li5cbiAgICB2YXIgdGVtcCA9ICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0aGlzLmZpbHRlck1hbmFnZXI7XG4gICAgXG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIuYWN0aXZhdGUoZnJhbWUsIHRlbXBSZWN0KTtcbiAgICBjb25zb2xlLmxvZyhkaXNwbGF5T2JqZWN0KVxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnRleHR1cmVCdWZmZXIsIGNsZWFyKTtcblxuICAgLy8gY29uc29sZS5sb2coXCJSRU5ERVJJTkcgXCIpO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRlbXA7XG59O1xuXG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcl0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVwZGF0ZVRyYW5zZm9ybSA9ICEhdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdmFyIHd0ID0gdGVtcE1hdHJpeDtcblxuICAgIHd0LmlkZW50aXR5KCk7XG5cbiAgICBpZiAobWF0cml4KVxuICAgIHtcbiAgICAgICAgd3QuYXBwZW5kKG1hdHJpeCk7XG4gICAgfVxuXG5cbiAgICB3dC50eCArPSBmcmFtZS54O1xuICAgIHd0LnR5ICs9IGZyYW1lLnk7XG5cbiAgICB2YXIgY2FjaGVkV3QgPSBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtO1xuICAgIFxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSB3dDtcblxuICAgIC8vIHNldFdvcmxkIEFscGhhIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgcmVuZGVyZXIgYXQgZnVsbCBvcGFjaXR5XG4gICAgZGlzcGxheU9iamVjdC53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICB2YXIgaSwgajtcblxuICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBcbi8vICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5cbiAgICB2YXIgY29udGV4dCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlYWxSZXNvbHV0aW9uID0gdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIGNvbnRleHQpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gcmVhbFJlc29sdXRpb247XG5cbiAgICBpZihkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID09PSB3dClcbiAgICB7XG4gICAgICAgIC8vIGZpeGVzIGNhY2hlQXNCaXRtYXAgSGFwcGVuaW5nIGR1cmluZyB0aGUgYWJvdmUuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gY2FjaGVkV3Q7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBkZXN0cm95QmFzZSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIGZpbHRlcm1hbmFnZXIuLlxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoZnJhbWUpXG57XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uuc3JjID0gdGhpcy5nZXRCYXNlNjQoZnJhbWUpO1xuICAgIHJldHVybiBpbWFnZTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGlzIHRleHR1cmUuIEl0IHdvcmtzIGJ5IGNhbGxpbmcgQmFzZVJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgIHJldHVybiB0aGlzLmdldENhbnZhcyhmcmFtZSkudG9EYXRhVVJMKCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIEJhc2VSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldENhbnZhcyA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2lkdGggPSBmcmFtZS53aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBjYW52YXNEYXRhID0gdGVtcENhbnZhcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2FudmFzRGF0YS5kYXRhLnNldCh3ZWJHTFBpeGVscyk7XG5cbiAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICByZXR1cm4gdGVtcENhbnZhcy5jYW52YXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy53aWR0aDtcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoZnJhbWUud2lkdGggPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGggJiYgXG4gICAgICAgICAgIGZyYW1lLmhlaWdodCA9PT0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5oZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IENhbnZhc0J1ZmZlcihmcmFtZS53aWR0aCAqIHJlc29sdXRpb24sIGZyYW1lLmhlaWdodCAqIHJlc29sdXRpb24pO1xuICAgICAgICAgICAgdmFyIGNhbnZhc0RhdGEgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dC5nZXRJbWFnZURhdGEoZnJhbWUueCAgKiByZXNvbHV0aW9uLCBmcmFtZS55ICogcmVzb2x1dGlvbiwgZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIHRoZSBlbnRpcmUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICBpZighZnJhbWUpXG4gICAge1xuICAgICAgICBmcmFtZSA9IHRlbXBSZWN0O1xuICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICByZXR1cm4gd2ViR0xQaXhlbHM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIGEgcGl4ZWwgd2l0aGluIHRoZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uIChmcmFtZSwgeCwgeSlcbntcbiAgICB0ZW1wUmVjdC54ID0geDtcbiAgICB0ZW1wUmVjdC55ID0geTtcbiAgICB0ZW1wUmVjdC53aWR0aCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gMSAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmKGZyYW1lKVxuICAgIHtcbiAgICAgICAgdGVtcFJlY3QueCArPSBmcmFtZS54O1xuICAgICAgICB0ZW1wUmVjdC55ICs9IGZyYW1lLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UGl4ZWxzKHRlbXBSZWN0KTtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlLiBBbGwgdGV4dHVyZXMgaGF2ZSBhIGJhc2UgdGV4dHVyZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50IHBpeGVsIHJhdGlvc1xuICovXG5mdW5jdGlvbiBCYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDEwMDtcblxuICAgIC8vIFRPRE8gZG9jc1xuICAgIC8vIHVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2VcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxXaWR0aCA9IDEwMDtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgaGVpZ2h0IG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUgdG8gYXBwbHkgd2hlbiBzY2FsaW5nIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuTElORUFSXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIG9uY2UgdGhlIGJhc2UgdGV4dHVyZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbmV2ZXIgdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmFpbHMgdG8gbG9hZCBvciBoYXMgbm8gdGV4dHVyZSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgaWYgdGhlIHNvdXJjZSBpcyBjdXJyZW50bHkgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIElmIGFuIEltYWdlIHNvdXJjZSBpcyBsb2FkaW5nIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmVcbiAgICAgKiBkaXNwYXRjaGVkIHdoZW4gdGhlIG9wZXJhdGlvbiBlbmRzLiBBbiB1bmRlcnlsaW5nIHNvdXJjZSB0aGF0IGlzXG4gICAgICogaW1tZWRpYXRlbHktYXZhaWxhYmxlIGJ5cGFzc2VzIGxvYWRpbmcgZW50aXJlbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW1hZ2Ugc291cmNlIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUT0RPOiBNYWtlIHRoaXMgYSBzZXR0ZXIgdGhhdCBjYWxscyBsb2FkU291cmNlKCk7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtJbWFnZXxDYW52YXN9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsOyAvLyBzZXQgaW4gbG9hZFNvdXJjZSwgaWYgYXQgYWxsXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiBSR0IgY2hhbm5lbHMgc2hvdWxkIGJlIHByZS1tdWx0aXBsaWVkIGJ5IEFscGhhICAoV2ViR0wgb25seSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBvciBub3QgdGhlIHRleHR1cmUgaXMgYSBwb3dlciBvZiB0d28sIHRyeSB0byB1c2UgcG93ZXIgb2YgdHdvIHRleHR1cmVzIGFzIG11Y2ggYXMgeW91IGNhblxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IGZhbHNlO1xuXG4gICAgLy8gdXNlZCBmb3Igd2ViR0xcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiBhIG1pcG1hcCBvZiB0aGlzIHRleHR1cmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLiBUaGlzIHZhbHVlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIHRleHR1cmUgaXMgdXNlZFxuICAgICAqIEFsc28gdGhlIHRleHR1cmUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBzaXplIHRvIHdvcmtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5taXBtYXAgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHJlbmRlcmVyIElEcyB0byB3ZWJnbCB0ZXh0dXJlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgV2ViR0xUZXh0dXJlPn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9pZCA9IDA7XG4gICAgXG4gICAgLy8gaWYgbm8gc291cmNlIHBhc3NlZCBkb24ndCB0cnkgdG8gbG9hZFxuICAgIGlmIChzb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmluaXNoZXMgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkZWRcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmFpbHMgdG8gbG9hZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBCYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0ZXh0dXJlIG9uIGFsbCB0aGUgd2ViZ2wgcmVuZGVyZXJzLCB0aGlzIGFsc28gYXNzdW1lcyB0aGUgc3JjIGhhcyBjaGFuZ2VkLlxuICpcbiAqIEBmaXJlcyB1cGRhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5yZWFsV2lkdGggPSB0aGlzLnNvdXJjZS5uYXR1cmFsV2lkdGggfHwgdGhpcy5zb3VyY2Uud2lkdGg7XG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gdGhpcy5zb3VyY2UubmF0dXJhbEhlaWdodCB8fCB0aGlzLnNvdXJjZS5oZWlnaHQ7XG5cbiAgICB0aGlzLndpZHRoID0gdGhpcy5yZWFsV2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlYWxIZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IHV0aWxzLmlzUG93ZXJPZlR3byh0aGlzLnJlYWxXaWR0aCwgdGhpcy5yZWFsSGVpZ2h0KTtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIExvYWQgYSBzb3VyY2UuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBpcyBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlLCBzdWNoIGFzIGFuIGltYWdlIHRoYXQgbmVlZHMgdG8gYmVcbiAqIGRvd25sb2FkZWQsIHRoZW4gdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIGluIHRoZSBmdXR1cmVcbiAqIGFuZCBgaGFzTG9hZGVkYCB3aWxsIHJlbWFpbiBmYWxzZSBhZnRlciB0aGlzIGNhbGwuXG4gKlxuICogVGhlIGxvZ2ljIHN0YXRlIGFmdGVyIGNhbGxpbmcgYGxvYWRTb3VyY2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGVnLiBgZnJvbUltYWdlYCwgYG5ldyBCYXNlVGV4dHVyZWApIGlzOlxuICpcbiAqICAgICBpZiAodGV4dHVyZS5oYXNMb2FkZWQpXG4ge1xuICogICAgICAgIC8vIHRleHR1cmUgcmVhZHkgZm9yIHVzZVxuICogICAgIH0gZWxzZSBpZiAodGV4dHVyZS5pc0xvYWRpbmcpXG4ge1xuICogICAgICAgIC8vIGxpc3RlbiB0byAnbG9hZGVkJyBhbmQvb3IgJ2Vycm9yJyBldmVudHMgb24gdGV4dHVyZVxuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAgLy8gbm90IGxvYWRpbmcsIG5vdCBnb2luZyB0byBsb2FkIFVOTEVTUyB0aGUgc291cmNlIGlzIHJlbG9hZGVkXG4gKiAgICAgICAgLy8gKGl0IG1heSBzdGlsbCBtYWtlIHNlbnNlIHRvIGxpc3RlbiB0byB0aGUgZXZlbnRzKVxuICogICAgIH1cbiAqXG4gKiBAcHJvdGVjdGVkXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUubG9hZFNvdXJjZSA9IGZ1bmN0aW9uIChzb3VyY2UpXG57XG4gICAgdmFyIHdhc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZztcbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAod2FzTG9hZGluZyAmJiB0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc291cmNlLm9uZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgLy8gQXBwbHkgc291cmNlIGlmIGxvYWRlZC4gT3RoZXJ3aXNlIHNldHVwIGFwcHJvcHJpYXRlIGxvYWRpbmcgbW9uaXRvcnMuXG4gICAgaWYgKCh0aGlzLnNvdXJjZS5jb21wbGV0ZSB8fCB0aGlzLnNvdXJjZS5nZXRDb250ZXh0KSAmJiB0aGlzLnNvdXJjZS53aWR0aCAmJiB0aGlzLnNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNvdXJjZS5nZXRDb250ZXh0KVxuICAgIHtcblxuICAgICAgICAvLyBJbWFnZSBmYWlsIC8gbm90IHJlYWR5XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuXG4gICAgICAgIHNvdXJjZS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgc2NvcGUuZW1pdCgnbG9hZGVkJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvdXJjZS5vbmVycm9yID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5lbWl0KCdlcnJvcicsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQZXIgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjdGhlLWltZy1lbGVtZW50XG4gICAgICAgIC8vICAgXCJUaGUgdmFsdWUgb2YgYGNvbXBsZXRlYCBjYW4gdGh1cyBjaGFuZ2Ugd2hpbGUgYSBzY3JpcHQgaXMgZXhlY3V0aW5nLlwiXG4gICAgICAgIC8vIFNvIGNvbXBsZXRlIG5lZWRzIHRvIGJlIHJlLWNoZWNrZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gYWRkZWQuLlxuICAgICAgICAvLyBOT1RFOiBjb21wbGV0ZSB3aWxsIGJlIHRydWUgaWYgdGhlIGltYWdlIGhhcyBubyBzcmMgc28gYmVzdCB0byBjaGVjayBpZiB0aGUgc3JjIGlzIHNldC5cbiAgICAgICAgaWYgKHNvdXJjZS5jb21wbGV0ZSAmJiBzb3VyY2Uuc3JjKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyAuLmFuZCBpZiB3ZSdyZSBjb21wbGV0ZSBub3csIG5vIG5lZWQgZm9yIGNhbGxiYWNrc1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgc29tZSBvdGhlciB0cmFja2luZyB2YXJzIG9uY2VcbiAqIGEgc291cmNlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5fc291cmNlTG9hZGVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBiYXNlIHRleHR1cmVcbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5pbWFnZVVybClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuICAgICAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlLnNyYyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLnNvdXJjZS5fcGl4aUlkXTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG5cbiAgICB0aGlzLmRpc3Bvc2UoKTtcbn07XG5cbi8qKlxuICogRnJlZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTCBtZW1vcnkgd2l0aG91dCBkZXN0cm95aW5nIHRoaXMgdGV4dHVyZSBvYmplY3QuXG4gKiBUaGlzIG1lYW5zIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSB0ZXh0dXJlIGxhdGVyIHdoaWNoIHdpbGwgdXBsb2FkIGl0IHRvIEdQVVxuICogbWVtb3J5IGFnYWluLlxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIHRoaXMpO1xuXG4gICAgLy8gdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lZWRlZCwgdGhlIHJlbmRlcmVycyBzaG91bGQgY2xlYW51cCBhbGwgdGhlIGdsIHRleHR1cmVzLlxuICAgIC8vIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgc291cmNlIGltYWdlIG9mIHRoZSB0ZXh0dXJlLlxuICogVGhlIG9yaWdpbmFsIHNvdXJjZSBtdXN0IGJlIGFuIEltYWdlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5ld1NyYyB7c3RyaW5nfSB0aGUgcGF0aCBvZiB0aGUgaW1hZ2VcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNvdXJjZUltYWdlID0gZnVuY3Rpb24gKG5ld1NyYylcbntcbiAgICB0aGlzLnNvdXJjZS5zcmMgPSBuZXdTcmM7XG5cbiAgICB0aGlzLmxvYWRTb3VyY2UodGhpcy5zb3VyY2UpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIGJhc2UgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBTaG91bGQgdXNlIGFub255bW91cyBDT1JTPyBEZWZhdWx0cyB0byB0cnVlIGlmIHRoZSBVUkwgaXMgbm90IGEgZGF0YS1VUkkuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmIChjcm9zc29yaWdpbiA9PT0gdW5kZWZpbmVkICYmIGltYWdlVXJsLmluZGV4T2YoJ2RhdGE6JykgIT09IDApXG4gICAge1xuICAgICAgICBjcm9zc29yaWdpbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIC8vIG5ldyBJbWFnZSgpIGJyZWFrcyB0ZXggbG9hZGluZyBpbiBzb21lIHZlcnNpb25zIG9mIENocm9tZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMzgwNzFcbiAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgaWYgKGNyb3Nzb3JpZ2luKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoaW1hZ2UsIHNjYWxlTW9kZSk7XG4gICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgaW1hZ2Uuc3JjID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSBiYXNlVGV4dHVyZTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBAMnggYXQgdGhlIGVuZCBvZiB0aGUgdXJsIHdlIGFyZSBnb2luZyB0byBhc3N1bWUgaXRzIGEgaGlnaHJlcyBpbWFnZVxuICAgICAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKGltYWdlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFjYW52YXMuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGNhbnZhcy5fcGl4aUlkID0gJ2NhbnZhc18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG4iLCJ2YXIgQmFzZVJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VSZW5kZXJUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIFJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIFJlbmRlclRleHR1cmUgc2hvdWxkIGJlIHByZWxvYWRlZFxuICogb3RoZXJ3aXNlIGJsYWNrIHJlY3RhbmdsZXMgd2lsbCBiZSBkcmF3biBpbnN0ZWFkLlxuICpcbiAqIEEgUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCA4MDAsIDYwMCk7XG4gKiB2YXIgc3ByaXRlID0gUElYSS5TcHJpdGUuZnJvbUltYWdlKFwic3Bpbk9ial8wMS5wbmdcIik7XG4gKlxuICogc3ByaXRlLnBvc2l0aW9uLnggPSA4MDAvMjtcbiAqIHNwcml0ZS5wb3NpdGlvbi55ID0gNjAwLzI7XG4gKiBzcHJpdGUuYW5jaG9yLnggPSAwLjU7XG4gKiBzcHJpdGUuYW5jaG9yLnkgPSAwLjU7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiByZW5kZXJUZXh0dXJlXG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIGZvciB0aGlzIFJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIFJlbmRlclRleHR1cmUoYmFzZVJlbmRlclRleHR1cmUsIGZyYW1lKVxue1xuICAgIGlmICghcmVuZGVyZXIpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgb2JqZWN0IHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Jhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIFRleHR1cmUuY2FsbCh0aGlzLFxuICAgICAgICBiYXNlUmVuZGVyVGV4dHVyZSxcbiAgICAgICAgZnJhbWUgXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn1cblxuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmUucHJvdG90eXBlKTtcblJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGV4dHVyZTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIHVwZGF0ZUJhc2UpXG57XG4gICBcbiAgICAvL1RPRE8gLSBjb3VsZCBiZSBub3QgcmVxdWlyZWQuLlxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSB0aGlzLmNyb3Aud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNyb3AuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKHVwZGF0ZUJhc2UpXG4gICAge1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYmFzZVRleHR1cmUuY2xlYXIodGhpcy5mcmFtZSlcbiAgICBcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLnJlbmRlcih0aGlzLmZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRJbWFnZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuYmFzZVRleHR1cmUuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIFJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0QmFzZTY0ID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNlNjQuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIFJlbmRlclRleHR1cmUgdG8gaXQgYW5kIHRoZW4gcmV0dXJucyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gQSBDYW52YXMgZWxlbWVudCB3aXRoIHRoZSB0ZXh0dXJlIHJlbmRlcmVkIG9uLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldENhbnZhcyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVscyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVsKHRoaXMuZnJhbWUsIHgsIHkpO1xufTtcblxuUmVuZGVyVGV4dHVyZS5jcmVhdGUgPSBmdW5jdGlvbihyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHJldHVybiBuZXcgUmVuZGVyVGV4dHVyZShuZXcgQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbikpO1xufVxuXG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnMgPSByZXF1aXJlKCcuL1RleHR1cmVVdnMnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlIG9yIHBhcnQgb2YgYW4gaW1hZ2UuIEl0IGNhbm5vdCBiZSBhZGRlZFxuICogdG8gdGhlIGRpc3BsYXkgbGlzdCBkaXJlY3RseS4gSW5zdGVhZCB1c2UgaXQgYXMgdGhlIHRleHR1cmUgZm9yIGEgU3ByaXRlLiBJZiBubyBmcmFtZSBpcyBwcm92aWRlZCB0aGVuIHRoZSB3aG9sZSBpbWFnZSBpcyB1c2VkLlxuICpcbiAqIFlvdSBjYW4gZGlyZWN0bHkgY3JlYXRlIGEgdGV4dHVyZSBmcm9tIGFuIGltYWdlIGFuZCB0aGVuIHJldXNlIGl0IG11bHRpcGxlIHRpbWVzIGxpa2UgdGhpcyA6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZSgnYXNzZXRzL2ltYWdlLnBuZycpO1xuICogdmFyIHNwcml0ZTEgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiB2YXIgc3ByaXRlMiA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBiYXNlVGV4dHVyZSB7UElYSS5CYXNlVGV4dHVyZX0gVGhlIGJhc2UgdGV4dHVyZSBzb3VyY2UgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlIGZyb21cbiAqIEBwYXJhbSBbZnJhbWVdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3RhbmdsZSBmcmFtZSBvZiB0aGUgdGV4dHVyZSB0byBzaG93XG4gKiBAcGFyYW0gW2Nyb3BdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIGFyZWEgb2Ygb3JpZ2luYWwgdGV4dHVyZVxuICogQHBhcmFtIFt0cmltXSB7UElYSS5SZWN0YW5nbGV9IFRyaW1tZWQgdGV4dHVyZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBbcm90YXRlXSB7Ym9vbGVhbn0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlcyAoIHVzZWQgYnkgdGV4dHVyZSBwYWNrZXIgKVxuICovXG5mdW5jdGlvbiBUZXh0dXJlKGJhc2VUZXh0dXJlLCBmcmFtZSwgY3JvcCwgdHJpbSwgcm90YXRlKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogRG9lcyB0aGlzIFRleHR1cmUgaGF2ZSBhbnkgZnJhbWUgZGF0YSBhc3NpZ25lZCB0byBpdD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5ub0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VUZXh0dXJlIGluc3RhbmNlb2YgVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0cmltIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLnRyaW0gPSB0cmltO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCB0aGUgcmVuZGVyZXIga25vdyBpZiB0aGUgdGV4dHVyZSBpcyB2YWxpZC4gSWYgaXQncyBub3QgdGhlbiBpdCBjYW5ub3QgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgYSByZW5kZXJlciBrbm93IHRoYXQgYSB0ZXh0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgKHVzZWQgbWFpbmx5IGZvciB3ZWJHTCB1diB1cGRhdGVzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVpcmVzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgVVYgZGF0YSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgYXJlYSBvZiB0aGUgQmFzZVRleHR1cmUgaW1hZ2UgdG8gYWN0dWFsbHkgY29weSB0byB0aGUgQ2FudmFzIC8gV2ViR0wgd2hlbiByZW5kZXJpbmcsXG4gICAgICogaXJyZXNwZWN0aXZlIG9mIHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBvciBwbGFjZW1lbnQgKHdoaWNoIGNhbiBiZSBpbmZsdWVuY2VkIGJ5IHRyaW1tZWQgdGV4dHVyZSBhdGxhc2VzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jcm9wID0gY3JvcCB8fCBmcmFtZTsvL25ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdGF0ZSA9ICEhcm90YXRlO1xuXG4gICAgaWYgKGJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBmcmFtZSB3ZSBzaG91bGQgbW9uaXRvciBmb3IgYW55IGJhc2UgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlLm9uY2UoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZyYW1lIG9yIHRoZSBiYXNlVGV4dHVyZSBpcyB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICovXG4gICAgZnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgICAgICAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50cmltICYmICF0aGlzLnJvdGF0ZSAmJiAoZnJhbWUueCArIGZyYW1lLndpZHRoID4gdGhpcy5iYXNlVGV4dHVyZS53aWR0aCB8fCBmcmFtZS55ICsgZnJhbWUuaGVpZ2h0ID4gdGhpcy5iYXNlVGV4dHVyZS5oZWlnaHQpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dHVyZSBFcnJvcjogZnJhbWUgZG9lcyBub3QgZml0IGluc2lkZSB0aGUgYmFzZSBUZXh0dXJlIGRpbWVuc2lvbnMgJyArIHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5zb3VyY2UgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50cmltKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wID0gZnJhbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlcyB0aGlzIHRleHR1cmUgb24gdGhlIGdwdS5cbiAqXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5iYXNlVGV4dHVyZS51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyBsb2FkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlTG9hZGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIC8vIFRPRE8gdGhpcyBjb2RlIGxvb2tzIGNvbmZ1c2luZy4uIGJvbyB0byBhYnVzaW5nIGdldHRlcnMgYW5kIHNldHRlcnNzIVxuICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy5fZnJhbWU7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyB1cGRhdGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZVVwZGF0ZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSBiYXNlVGV4dHVyZS53aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSBiYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlPWZhbHNlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlKVxue1xuICAgIGlmICh0aGlzLmJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGRlc3Ryb3lCYXNlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG4gICAgdGhpcy50cmltID0gbnVsbDtcbiAgICB0aGlzLmNyb3AgPSBudWxsO1xuXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UsIHRoaXMpO1xuICAgIHRoaXMub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGV4dHVyZSBvYmplY3QgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLmZyYW1lLCB0aGlzLmNyb3AsIHRoaXMudHJpbSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5fdXBkYXRlVXZzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuX3V2cylcbiAgICB7XG4gICAgICAgIHRoaXMuX3V2cyA9IG5ldyBUZXh0dXJlVXZzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXZzLnNldCh0aGlzLmNyb3AsIHRoaXMuYmFzZVRleHR1cmUsIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFRleHR1cmUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSAgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gY3Jvc3NvcmlnaW4ge2Jvb2xlYW59IFdoZXRoZXIgcmVxdWVzdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY3Jvc3NvcmlnaW5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21JbWFnZShpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xuICAgICAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gdGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICh0eXBlb2YgdmlkZW8gPT09ICdzdHJpbmcnKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFRleHR1cmUuZnJvbVZpZGVvVXJsKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSB2aWRlbyB1cmwuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvVXJsIHtzdHJpbmd9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW9VcmwgPSBmdW5jdGlvbiAodmlkZW9VcmwsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHZpZGVvVXJsLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIHRleHR1cmUgdG8gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuIFRoaXMgY2FjaGUgaXMgc2hhcmVkIGFjcm9zcyB0aGUgd2hvbGUgUElYSSBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIFRleHR1cmUgdG8gYWRkIHRvIHRoZSBjYWNoZS5cbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIGJlIHN0b3JlZCBhZ2FpbnN0LlxuICovXG5UZXh0dXJlLmFkZFRleHR1cmVUb0NhY2hlID0gZnVuY3Rpb24gKHRleHR1cmUsIGlkKVxue1xuICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpZF0gPSB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB0ZXh0dXJlIGZyb20gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCBvZiB0aGUgdGV4dHVyZSB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRoYXQgd2FzIHJlbW92ZWRcbiAqL1xuVGV4dHVyZS5yZW1vdmVUZXh0dXJlRnJvbUNhY2hlID0gZnVuY3Rpb24gKGlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBBbiBlbXB0eSB0ZXh0dXJlLCB1c2VkIG9mdGVuIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBtdWx0aXBsZSBlbXB0eSB0ZXh0dXJlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZS5FTVBUWSA9IG5ldyBUZXh0dXJlKG5ldyBCYXNlVGV4dHVyZSgpKTtcbiIsIlxuLyoqXG4gKiBBIHN0YW5kYXJkIG9iamVjdCB0byBzdG9yZSB0aGUgVXZzIG9mIGEgdGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmVVdnMoKVxue1xuICAgIHRoaXMueDAgPSAwO1xuICAgIHRoaXMueTAgPSAwO1xuXG4gICAgdGhpcy54MSA9IDE7XG4gICAgdGhpcy55MSA9IDA7XG5cbiAgICB0aGlzLngyID0gMTtcbiAgICB0aGlzLnkyID0gMTtcblxuICAgIHRoaXMueDMgPSAwO1xuICAgIHRoaXMueTMgPSAxO1xuXG4gICAgdGhpcy54eTBfdWludDMyID0gMDtcbiAgICB0aGlzLnh5MV91aW50MzIgPSAwO1xuICAgIHRoaXMueHkyX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTNfdWludDMyID0gMDtcblxuICAgIHRoaXMudXZzX3VpbnQzMiA9IG5ldyBVaW50MzJBcnJheSg0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVVdnM7XG5cbi8qKlxuICogU2V0cyB0aGUgdGV4dHVyZSBVdnMgYmFzZWQgb24gdGhlIGdpdmVuIGZyYW1lIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gZnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIGJhc2VGcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gcm90YXRlIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgcm90YXRlZFxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZVV2cy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZyYW1lLCBiYXNlRnJhbWUsIHJvdGF0ZSlcbntcbiAgICB2YXIgdHcgPSBiYXNlRnJhbWUud2lkdGg7XG4gICAgdmFyIHRoID0gYmFzZUZyYW1lLmhlaWdodDtcblxuICAgIGlmKHJvdGF0ZSlcbiAgICB7XG4gICAgICAgIHRoaXMueDAgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSBmcmFtZS55IC8gdGg7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy54MCA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcbiAgICB9XG5cbiAgICB0aGlzLnV2c191aW50MzJbMF0gPSAoKCh0aGlzLnkwICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDAgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsxXSA9ICgoKHRoaXMueTEgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MSAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzJdID0gKCgodGhpcy55MiAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngyICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbM10gPSAoKCh0aGlzLnkzICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDMgKiA2NTUzNSkgJiAweEZGRkYpO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIG9mIGEgW3BsYXlpbmddIFZpZGVvLlxuICpcbiAqIFZpZGVvIGJhc2UgdGV4dHVyZXMgbWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QgaW4gdGhlaXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNldmVyYWwgd2F5cywgc3VjaCBhczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCgnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHsgc3JjOiAnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9KTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbJy92aWRlby53ZWJtJywgJy92aWRlby5tcDQnXSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoW1xuICogICAgIHsgc3JjOiAnL3ZpZGVvLndlYm0nLCBtaW1lOiAndmlkZW8vd2VibScgfSxcbiAqICAgICB7IHNyYzogJy92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9XG4gKiBdKTtcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgW1wiZGV1c1wiIGRlbW9dKGh0dHA6Ly93d3cuZ29vZGJveWRpZ2l0YWwuY29tL3BpeGlqcy9leGFtcGxlcy9kZXVzLykuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkJhc2VUZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gVmlkZW9CYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmlkZW8gc291cmNlIGVsZW1lbnQgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIC8vIGhvb2sgaW4gaGVyZSB0byBjaGVjayBpZiB2aWRlbyBpcyBhbHJlYWR5IGF2YWlsYWJsZS5cbiAgICAvLyBCYXNlVGV4dHVyZSBsb29rcyBmb3IgYSBzb3VyY2UuY29tcGxldGUgYm9vbGVhbiwgcGx1cyB3aWR0aCAmIGhlaWdodC5cblxuICAgIGlmICgoc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0VOT1VHSF9EQVRBIHx8IHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9GVVRVUkVfREFUQSkgJiYgc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICBzb3VyY2UuY29tcGxldGUgPSB0cnVlO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgc291cmNlLCBzY2FsZU1vZGUpO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBiYXNlIHRleHR1cmUgYXV0b21hdGljYWxseSB1cGRhdGUgaXRzZWxmLCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX29uVXBkYXRlID0gdGhpcy5fb25VcGRhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkNhblBsYXkgPSB0aGlzLl9vbkNhblBsYXkuYmluZCh0aGlzKTtcblxuICAgIGlmICghc291cmNlLmNvbXBsZXRlKVxuICAgIHtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIC8vIHN0YXJ0ZWQgcGxheWluZy4uXG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fb25QbGF5U3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX29uUGxheVN0b3AuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fX2xvYWRlZCA9IGZhbHNlO1xufVxuXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZVRleHR1cmUucHJvdG90eXBlKTtcblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmlkZW9CYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9CYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3Agb2YgdGhlIHZpZGVvIGJhc2UgdGV4dHVyZSwgb25seSBydW5zIHdoZW4gYXV0b1VwZGF0ZSBpcyBzZXQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUnVucyB0aGUgdXBkYXRlIGxvb3Agd2hlbiB0aGUgdmlkZW8gaXMgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBwYXVzZSBldmVudCBpcyB0cmlnZ2VyZWQsIHN0b3BzIHRoZSB1cGRhdGUgbG9vcFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgdmlkZW8gaXMgbG9hZGVkIGFuZCByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uQ2FuUGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2UudmlkZW9XaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnNvdXJjZS52aWRlb0hlaWdodDtcblxuICAgICAgICB0aGlzLnNvdXJjZS5wbGF5KCk7XG5cbiAgICAgICAgLy8gcHJldmVudCBtdWx0aXBsZSBsb2FkZWQgZGlzcGF0Y2hlcy4uXG4gICAgICAgIGlmICghdGhpcy5fX2xvYWRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHRoaXMuc291cmNlLl9waXhpSWQgXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlLl9waXhpSWQ7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogTWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXZpZGVvLl9waXhpSWQpXG4gICAge1xuICAgICAgICB2aWRlby5fcGl4aUlkID0gJ3ZpZGVvXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3ZpZGVvLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IFZpZGVvQmFzZVRleHR1cmUodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHZpZGVvLl9waXhpSWQgXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBCYXNlVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqIFRoaXMgQmFzZVRleHR1cmUgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYSB0ZXh0dXJlXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvU3JjIHtzdHJpbmd8b2JqZWN0fHN0cmluZ1tdfG9iamVjdFtdfSBUaGUgVVJMKHMpIGZvciB0aGUgdmlkZW8uXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLnNyY10ge3N0cmluZ30gT25lIG9mIHRoZSBzb3VyY2UgdXJscyBmb3IgdGhlIHZpZGVvXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLm1pbWVdIHtzdHJpbmd9IFRoZSBtaW1ldHlwZSBvZiB0aGUgdmlkZW8gKGUuZy4gJ3ZpZGVvL21wNCcpLiBJZiBub3Qgc3BlY2lmaWVkXG4gKiAgdGhlIHVybCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBtaW1lIHR5cGUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwgPSBmdW5jdGlvbiAodmlkZW9TcmMsIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXG4gICAgLy8gYXJyYXkgb2Ygb2JqZWN0cyBvciBzdHJpbmdzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW9TcmMpKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWRlb1NyYy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjW2ldLnNyYyB8fCB2aWRlb1NyY1tpXSwgdmlkZW9TcmNbaV0ubWltZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNpbmdsZSBvYmplY3Qgb3Igc3RyaW5nXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjLnNyYyB8fCB2aWRlb1NyYywgdmlkZW9TcmMubWltZSkpO1xuICAgIH1cblxuICAgIHZpZGVvLmxvYWQoKTtcbiAgICB2aWRlby5wbGF5KCk7XG5cbiAgICByZXR1cm4gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSk7XG59O1xuXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzID0gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsO1xuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2UocGF0aCwgdHlwZSlcbntcbiAgICBpZiAoIXR5cGUpXG4gICAge1xuICAgICAgICB0eXBlID0gJ3ZpZGVvLycgKyBwYXRoLnN1YnN0cihwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gcGF0aDtcbiAgICBzb3VyY2UudHlwZSA9IHR5cGU7XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgLy8gSW50ZXJuYWwgZXZlbnQgdXNlZCBieSBjb21wb3NlZCBlbWl0dGVyXG4gICAgVElDSyA9ICd0aWNrJztcblxuLyoqXG4gKiBBIFRpY2tlciBjbGFzcyB0aGF0IHJ1bnMgYW4gdXBkYXRlIGxvb3AgdGhhdCBvdGhlciBvYmplY3RzIGxpc3RlbiB0by5cbiAqIFRoaXMgY2xhc3MgaXMgY29tcG9zZWQgYXJvdW5kIGFuIEV2ZW50RW1pdHRlciBvYmplY3QgdG8gYWRkIGxpc3RlbmVyc1xuICogbWVhbnQgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lLlxuICogQW5pbWF0aW9uIGZyYW1lcyBhcmUgcmVxdWVzdGVkIG9ubHkgd2hlbiBuZWNlc3NhcnksXG4gKiBlLmcuIFdoZW4gdGhlIHRpY2tlciBpcyBzdGFydGVkIGFuZCB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbmZ1bmN0aW9uIFRpY2tlcigpXG57XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRpY2sgbWV0aG9kIGJvdW5kIHRvIHRpY2tlciBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaW4gZWFybHkgMjAxNSwgRnVuY3Rpb24uYmluZFxuICAgICAqIGlzIHN0aWxsIDYwJSBzbG93ZXIgaW4gaGlnaCBwZXJmb3JtYW5jZSBzY2VuYXJpb3MuXG4gICAgICogQWxzbyBzZXBhcmF0aW5nIGZyYW1lIHJlcXVlc3RzIGZyb20gdXBkYXRlIG1ldGhvZFxuICAgICAqIHNvIGxpc3RlbmVycyBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGFuZCB3aXRoXG4gICAgICogYW55IGFuaW1hdGlvbiBBUEksIGp1c3QgaW52b2tlIHRpY2tlci51cGRhdGUodGltZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RpY2sgPSBmdW5jdGlvbiBfdGljayh0aW1lKSB7XG5cbiAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgbm93XG4gICAgICAgICAgICBfdGhpcy51cGRhdGUodGltZSk7XG4gICAgICAgICAgICAvLyBMaXN0ZW5lciBzaWRlIGVmZmVjdHMgbWF5IGhhdmUgbW9kaWZpZWQgdGlja2VyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQgJiYgX3RoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiBfdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fdGljayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZW1pdHRlciB1c2VkIHRvIGZpcmUgJ3RpY2snIGV2ZW50XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9lbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY3VycmVudCBmcmFtZSByZXF1ZXN0IElEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdmFsdWUgbWFuYWdlZCBieSBtaW5GUFMgcHJvcGVydHkgc2V0dGVyIGFuZCBnZXR0ZXIuXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHVwZGF0ZXMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBzaG91bGQgaW52b2tlIHRoZSBtZXRob2RcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBhdXRvbWF0aWNhbGx5XG4gICAgICogd2hlbiBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1N0YXJ0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTY2FsYXIgdGltZSB2YWx1ZSBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbWluRlBTfVxuICAgICAqIGFuZCBpcyBzY2FsZWQgd2l0aCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfS5cbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhcCBtYXkgYmUgZXhjZWVkZWQgYnkgc2NhbGluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kZWx0YVRpbWUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGltZSBlbGFwc2VkIGluIG1pbGxpc2Vjb25kcyBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBPcHBvc2VkIHRvIHdoYXQgdGhlIHNjYWxhciB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX1cbiAgICAgKiBpcyBiYXNlZCwgdGhpcyB2YWx1ZSBpcyBuZWl0aGVyIGNhcHBlZCBub3Igc2NhbGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMSAvIFRBUkdFVF9GUE1TXG4gICAgICovXG4gICAgdGhpcy5lbGFwc2VkTVMgPSAxIC8gQ09OU1QuVEFSR0VUX0ZQTVM7IC8vIGRlZmF1bHQgdG8gdGFyZ2V0IGZyYW1lIHRpbWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBsYXN0IHRpbWUge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9IHdhcyBpbnZva2VkLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgYWxzbyByZXNldCBpbnRlcm5hbGx5IG91dHNpZGUgb2YgaW52b2tpbmdcbiAgICAgKiB1cGRhdGUsIGJ1dCBvbmx5IHdoZW4gYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxhc3RUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEZhY3RvciBvZiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNjYWxlcyB0aWNrZXIuZGVsdGFUaW1lIHRvIHdoYXQgd291bGQgYmVcbiAgICAgKiAvLyB0aGUgZXF1aXZhbGVudCBvZiBhcHByb3hpbWF0ZWx5IDEyMCBGUFNcbiAgICAgKiB0aWNrZXIuc3BlZWQgPSAyO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICogYHRydWVgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBgZmFsc2VgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RvcH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIFdoaWxlIGBmYWxzZWAsIHRoaXMgdmFsdWUgbWF5IGNoYW5nZSB0byBgdHJ1ZWAgaW4gdGhlXG4gICAgICogZXZlbnQgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGJlaW5nIGB0cnVlYFxuICAgICAqIGFuZCBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWNrZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lcyBwZXIgc2Vjb25kIGF0IHdoaWNoIHRoaXMgdGlja2VyIGlzIHJ1bm5pbmcuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgYXBwcm94aW1hdGVseSA2MCBpbiBtb3N0IG1vZGVybiBicm93c2Vycy5cbiAgICAgKiAqKk5vdGU6KiogVGhpcyBkb2VzIG5vdCBmYWN0b3IgaW4gdGhlIHZhbHVlIG9mXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0sIHdoaWNoIGlzIHNwZWNpZmljXG4gICAgICogdG8gc2NhbGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBGUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5lbGFwc2VkTVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGFsbG93ZWQgdG9cbiAgICAgKiBlbGFwc2UgYmV0d2VlbiBpbnZva2luZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0uXG4gICAgICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNhcCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gICAgICogYnV0IGRvZXMgbm90IGVmZmVjdCB0aGUgbWVhc3VyZWQgdmFsdWUgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNGUFN9LlxuICAgICAqIFdoZW4gc2V0dGluZyB0aGlzIHByb3BlcnR5IGl0IGlzIGNsYW1wZWQgdG8gYSB2YWx1ZSBiZXR3ZWVuXG4gICAgICogYDBgIGFuZCBgUElYSS5UQVJHRVRfRlBNUyAqIDEwMDBgLlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICBtaW5GUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZwcylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gQ2xhbXA6IDAgdG8gVEFSR0VUX0ZQTVNcbiAgICAgICAgICAgIHZhciBtaW5GUE1TID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZnBzKSAvIDEwMDAsIENPTlNULlRBUkdFVF9GUE1TKTtcbiAgICAgICAgICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEgLyBtaW5GUE1TO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbFxuICogZW1pdHRlciBoYXMgbGlzdGVuZXJzLCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fcmVxdWVzdElmTmVlZGVkID0gZnVuY3Rpb24gX3JlcXVlc3RJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiB0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIC8vIGVuc3VyZSBjYWxsYmFja3MgZ2V0IGNvcnJlY3QgZGVsdGFcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fdGljayk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IGNhbmNlbHMgYSBwZW5kaW5nIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9jYW5jZWxJZk5lZWRlZCA9IGZ1bmN0aW9uIF9jYW5jZWxJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIHRoZSB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZCBpdCBjaGVja3MgaWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHlcbiAqIGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy4gSWYgdGhlc2VcbiAqIGNvbmRpdGlvbnMgYXJlIG1ldCwgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgdGlja2VyIGhhcyBub3RcbiAqIGJlZW4gc3RhcnRlZCwgYnV0IGF1dG9TdGFydCBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHRpY2tlciBzdGFydHMgbm93LFxuICogYW5kIGNvbnRpbnVlcyB3aXRoIHRoZSBwcmV2aW91cyBjb25kaXRpb25zIHRvIHJlcXVlc3QgYSBuZXcgZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fc3RhcnRJZlBvc3NpYmxlID0gZnVuY3Rpb24gX3N0YXJ0SWZQb3NzaWJsZSgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmF1dG9TdGFydClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb259IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIHVwZGF0ZXNcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb25jZX0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3Igb25lIHVwZGF0ZVxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIGFkZE9uY2UoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbmNlKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb2ZmfSBpbnRlcm5hbGx5IGZvciAndGljaycgZXZlbnQuXG4gKiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyBmb3IgJ3RpY2snIGV2ZW50LlxuICogSWYgaXQgZG9lcywgdGhlbiBpdCBjYW5jZWxzIHRoZSBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHBhcmFtIFtmbl0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZFxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0IHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vZmYoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgaWYgKCF0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyBsaXN0ZW5lcnNcbiAqIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIHN0YXJ0KClcbntcbiAgICBpZiAoIXRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgcmVxdWVzdGVkXG4gKiBhbiBhbmltYXRpb24gZnJhbWUgaXQgaXMgY2FuY2VsZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcCgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVHJpZ2dlcnMgYW4gdXBkYXRlLiBBbiB1cGRhdGUgZW50YWlscyBzZXR0aW5nIHRoZVxuICogY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2VsYXBzZWRNU30sXG4gKiB0aGUgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gKiBpbnZva2luZyBhbGwgbGlzdGVuZXJzIHdpdGggY3VycmVudCBkZWx0YVRpbWUsXG4gKiBhbmQgdGhlbiBmaW5hbGx5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNsYXN0VGltZX1cbiAqIHdpdGggdGhlIHZhbHVlIG9mIGN1cnJlbnRUaW1lIHRoYXQgd2FzIHByb3ZpZGVkLlxuICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBieSBhbmltYXRpb25cbiAqIGZyYW1lIGNhbGxiYWNrcyBpZiB0aGUgdGlja2VyIGluc3RhbmNlIGhhcyBiZWVuIHN0YXJ0ZWRcbiAqIGFuZCBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSBbY3VycmVudFRpbWU9cGVyZm9ybWFuY2Uubm93KCldIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn0gdGhlIGN1cnJlbnQgdGltZSBvZiBleGVjdXRpb25cbiAqL1xuVGlja2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoY3VycmVudFRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWRNUztcblxuICAgIC8vIEFsbG93IGNhbGxpbmcgdXBkYXRlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBjdXJyZW50VGltZS5cbiAgICBjdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIHx8IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIC8vIFNhdmUgdW5jYXBwZWQgZWxhcHNlZE1TIGZvciBtZWFzdXJlbWVudFxuICAgIGVsYXBzZWRNUyA9IHRoaXMuZWxhcHNlZE1TID0gY3VycmVudFRpbWUgLSB0aGlzLmxhc3RUaW1lO1xuXG4gICAgLy8gY2FwIHRoZSBtaWxsaXNlY29uZHMgZWxhcHNlZCB1c2VkIGZvciBkZWx0YVRpbWVcbiAgICBpZiAoZWxhcHNlZE1TID4gdGhpcy5fbWF4RWxhcHNlZE1TKVxuICAgIHtcbiAgICAgICAgZWxhcHNlZE1TID0gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgIH1cblxuICAgIHRoaXMuZGVsdGFUaW1lID0gZWxhcHNlZE1TICogQ09OU1QuVEFSR0VUX0ZQTVMgKiB0aGlzLnNwZWVkO1xuXG4gICAgLy8gSW52b2tlIGxpc3RlbmVycyBhZGRlZCB0byBpbnRlcm5hbCBlbWl0dGVyXG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KFRJQ0ssIHRoaXMuZGVsdGFUaW1lKTtcblxuICAgIHRoaXMubGFzdFRpbWUgPSBjdXJyZW50VGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGlja2VyO1xuIiwidmFyIFRpY2tlciA9IHJlcXVpcmUoJy4vVGlja2VyJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZCB0aWNrZXIgaW5zdGFuY2UgdXNlZCBieSB7QGxpbmsgUElYSS5leHRyYXMuTW92aWVDbGlwfS5cbiAqIGFuZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICogVGhlIHByb3BlcnR5IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBpcyBzZXQgdG8gYHRydWVgXG4gKiBmb3IgdGhpcyBpbnN0YW5jZS4gUGxlYXNlIGZvbGxvdyB0aGUgZXhhbXBsZXMgZm9yIHVzYWdlLCBpbmNsdWRpbmdcbiAqIGhvdyB0byBvcHQtb3V0IG9mIGF1dG8tc3RhcnRpbmcgdGhlIHNoYXJlZCB0aWNrZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciB0aWNrZXIgPSBQSVhJLnRpY2tlci5zaGFyZWQ7XG4gKiAvLyBTZXQgdGhpcyB0byBwcmV2ZW50IHN0YXJ0aW5nIHRoaXMgdGlja2VyIHdoZW4gbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqIC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyB0cnVlIG9ubHkgZm9yIHRoZSBQSVhJLnRpY2tlci5zaGFyZWQgaW5zdGFuY2UuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiAvLyBGWUksIGNhbGwgdGhpcyB0byBlbnN1cmUgdGhlIHRpY2tlciBpcyBzdG9wcGVkLiBJdCBzaG91bGQgYmUgc3RvcHBlZFxuICogLy8gaWYgeW91IGhhdmUgbm90IGF0dGVtcHRlZCB0byByZW5kZXIgYW55dGhpbmcgeWV0LlxuICogdGlja2VyLnN0b3AoKTtcbiAqIC8vIENhbGwgdGhpcyB3aGVuIHlvdSBhcmUgcmVhZHkgZm9yIGEgcnVubmluZyBzaGFyZWQgdGlja2VyLlxuICogdGlja2VyLnN0YXJ0KCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFlvdSBtYXkgdXNlIHRoZSBzaGFyZWQgdGlja2VyIHRvIHJlbmRlci4uLlxuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoODAwLCA2MDApO1xuICogdmFyIHN0YWdlID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiB2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIpO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZW5kZXJlci52aWV3KTtcbiAqIHRpY2tlci5hZGQoZnVuY3Rpb24gKHRpbWUpIHtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE9yIHlvdSBjYW4ganVzdCB1cGRhdGUgaXQgbWFudWFsbHkuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiB0aWNrZXIuc3RvcCgpO1xuICogZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XG4gKiAgICAgdGlja2VyLnVwZGF0ZSh0aW1lKTtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAqIH1cbiAqIGFuaW1hdGUocGVyZm9ybWFuY2Uubm93KCkpO1xuICpcbiAqIEB0eXBlIHtQSVhJLnRpY2tlci5UaWNrZXJ9XG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xudmFyIHNoYXJlZCA9IG5ldyBUaWNrZXIoKTtcbnNoYXJlZC5hdXRvU3RhcnQgPSB0cnVlO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS50aWNrZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc2hhcmVkOiBzaGFyZWQsXG4gICAgVGlja2VyOiBUaWNrZXJcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gZnVuY3Rpb24gKHNpemUpXG57XG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBhcnJheSwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgXG4gICAgdmFyIHRvdGFsSW5kaWNlcyA9IHNpemUgKiA2O1xuXG4gICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodG90YWxJbmRpY2VzKTtcblxuXHQvLyBmaWxsIHRoZSBpbmRpY2VzIHdpdGggdGhlIHF1YWRzIHRvIGRyYXdcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IHRvdGFsSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICBpbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICBpbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHM7IiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudXRpbHNcbiAqL1xudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgX3VpZDogMCxcbiAgICBfc2FpZEhlbGxvOiBmYWxzZSxcblxuICAgIEV2ZW50RW1pdHRlcjogICByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgcGx1Z2luVGFyZ2V0OiAgIHJlcXVpcmUoJy4vcGx1Z2luVGFyZ2V0JyksXG4gICAgYXN5bmM6ICAgICAgICAgIHJlcXVpcmUoJ2FzeW5jJyksXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZS5cbiAgICAgKi9cbiAgICB1aWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICByZXR1cm4gKyt1dGlscy5fdWlkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYW4gW1IsIEcsIEJdIGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHBhcmFtICB7bnVtYmVyW119IFtvdXQ9W11dXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgW1IsIEcsIEJdIG9mIHRoZSBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgycmdiOiBmdW5jdGlvbiAoaGV4LCBvdXQpXG4gICAge1xuICAgICAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICAgICAgb3V0WzBdID0gKGhleCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMV0gPSAoaGV4ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzJdID0gKGhleCAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnN0cmluZzogZnVuY3Rpb24gKGhleClcbiAgICB7XG4gICAgICAgIGhleCA9IGhleC50b1N0cmluZygxNik7XG4gICAgICAgIGhleCA9ICcwMDAwMDAnLnN1YnN0cigwLCA2IC0gaGV4Lmxlbmd0aCkgKyBoZXg7XG5cbiAgICAgICAgcmV0dXJuICcjJyArIGhleDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkgdG8gYSBoZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmdiIHtudW1iZXJbXX1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb2xvciBudW1iZXJcbiAgICAgKi9cbiAgICByZ2IyaGV4OiBmdW5jdGlvbiAocmdiKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgocmdiWzBdKjI1NSA8PCAxNikgKyAocmdiWzFdKjI1NSA8PCA4KSArIHJnYlsyXSoyNTUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZFxuICAgICAqL1xuICAgIGNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXM6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBuZ0hlYWQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFCQVFNQUFBREQ4cDJPQUFBQUExQk1WRVgvJztcbiAgICAgICAgdmFyIHBuZ0VuZCA9ICdBQUFBQ2tsRVFWUUkxMk5nQUFBQUFnQUI0aUc4TXdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG4gICAgICAgIHZhciBtYWdlbnRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSA2O1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcblxuICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1hZ2VudGEsIDAsIDApO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh5ZWxsb3csIDIsIDApO1xuXG4gICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwwLDEsMSkuZGF0YTtcblxuICAgICAgICByZXR1cm4gKGRhdGFbMF0gPT09IDI1NSAmJiBkYXRhWzFdID09PSAwICYmIGRhdGFbMl0gPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIG51bWJlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICogdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIFN0YXJsaW5nIEZyYW1ld29yayBhcyBpdHMgcHJldHR5IG5lYXQgOylcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICovXG4gICAgZ2V0TmV4dFBvd2VyT2ZUd286IGZ1bmN0aW9uIChudW1iZXIpXG4gICAge1xuICAgICAgICAvLyBzZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG93ZXJfb2ZfdHdvI0Zhc3RfYWxnb3JpdGhtX3RvX2NoZWNrX2lmX2FfcG9zaXRpdmVfbnVtYmVyX2lzX2FfcG93ZXJfb2ZfdHdvXG4gICAgICAgIGlmIChudW1iZXIgPiAwICYmIChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDE7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPCBudW1iZXIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzdWx0IDw8PSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBtYWtlIGEgcG93ZXIgb2YgdHdvIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9XG4gICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybiAod2lkdGggPiAwICYmICh3aWR0aCAmICh3aWR0aCAtIDEpKSA9PT0gMCAmJiBoZWlnaHQgPiAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIGFuIGFzc2V0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwcmVmaXhcbiAgICAgKiB1c2VkIGJ5IHNwcml0ZXNoZWV0cyBhbmQgaW1hZ2UgdXJsc1xuICAgICAqXG4gICAgICogQHBhcmFtIHVybCB7c3RyaW5nfSB0aGUgaW1hZ2UgcGF0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRSZXNvbHV0aW9uT2ZVcmw6IGZ1bmN0aW9uICh1cmwpXG4gICAge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IENPTlNULlJFVElOQV9QUkVGSVguZXhlYyh1cmwpO1xuXG4gICAgICAgIGlmIChyZXNvbHV0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlc29sdXRpb25bMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvZ3Mgb3V0IHRoZSB2ZXJzaW9uIGFuZCByZW5kZXJlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBydW5uaW5nIGluc3RhbmNlIG9mIFBJWEkuXG4gICAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoaXMgbWVzc2FnZSB5b3UgY2FuIHNldCBgUElYSS51dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtgXG4gICAgICogc28gdGhlIGxpYnJhcnkgdGhpbmtzIGl0IGFscmVhZHkgc2FpZCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgZG9pbmcgdGhhdCB3aWxsIGZvcmV2ZXJcbiAgICAgKiBtYWtlcyB5b3UgYSBqZXJrIGZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBzdHJpbmcgcmVuZGVyZXIgdHlwZSB0byBsb2cuXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIHNheUhlbGxvOiBmdW5jdGlvbiAodHlwZSlcbiAgICB7XG4gICAgICAgIGlmICh1dGlscy5fc2FpZEhlbGxvKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZScpID4gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW1xuICAgICAgICAgICAgICAgICdcXG4gJWMgJWMgJWMgUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSDinLAgJyArIHR5cGUgKyAnIOKcsCAgJWMgJyArICcgJWMgJyArICcgaHR0cDovL3d3dy5waXhpanMuY29tLyAgJWMgJWMg4pmlJWPimaUlY+KZpSBcXG5cXG4nLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjY2YTU7IGJhY2tncm91bmQ6ICMwMzAzMDc7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmZjM2RjOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7J1xuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3MpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1BpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0gJyArIHR5cGUgKyAnIC0gaHR0cDovL3d3dy5waXhpanMuY29tLycpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmb3IgY2hlY2tpbmcgZm9yIHdlYmdsIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNXZWJHTFN1cHBvcnRlZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHZhciBjb250ZXh0T3B0aW9ucyA9IHsgc3RlbmNpbDogdHJ1ZSB9O1xuICAgICAgICB0cnlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgY29udGV4dE9wdGlvbnMpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBjb250ZXh0T3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIShnbCAmJiBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnN0ZW5jaWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzaWduIG9mIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIG4ge251bWJlcn1cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIG4gaXMgMCwgLTEgaWYgbiBpcyBuZWdhdGl2ZSwgMSBpZiBuIGkgcG9zaXRpdmVcbiAgICAgKi9cbiAgICBzaWduOiBmdW5jdGlvbiAobilcbiAgICB7XG4gICAgICAgIHJldHVybiBuID8gKG4gPCAwID8gLTEgOiAxKSA6IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZUl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydElkeCBUaGUgaW5kZXggdG8gYmVnaW4gcmVtb3ZpbmcgZnJvbSAoaW5jbHVzaXZlKVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVJdGVtczogZnVuY3Rpb24gKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KVxuICAgIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN0YXJ0SWR4ID49IGxlbmd0aCB8fCByZW1vdmVDb3VudCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVtb3ZlQ291bnQgPSAoc3RhcnRJZHgrcmVtb3ZlQ291bnQgPiBsZW5ndGggPyBsZW5ndGgtc3RhcnRJZHggOiByZW1vdmVDb3VudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydElkeCwgbGVuID0gbGVuZ3RoLXJlbW92ZUNvdW50OyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyLmxlbmd0aCA9IGxlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge30sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge31cbn07XG4iLCIvKipcbiAqIE1peGlucyBmdW5jdGlvbmFsaXR5IHRvIG1ha2UgYW4gb2JqZWN0IGhhdmUgXCJwbHVnaW5zXCIuXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS51dGlsc1xuICogQHBhcmFtIG9iaiB7b2JqZWN0fSBUaGUgb2JqZWN0IHRvIG1peCBpbnRvLlxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgcGx1Z2luVGFyZ2V0Lm1peGluKE15T2JqZWN0KTtcbiAqL1xuZnVuY3Rpb24gcGx1Z2luVGFyZ2V0KG9iailcbntcbiAgICBvYmouX19wbHVnaW5zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcGx1Z2luIHRvIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHBsdWdpbk5hbWUge3N0cmluZ30gVGhlIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQuXG4gICAgICogQHBhcmFtIGN0b3Ige0Z1bmN0aW9ufSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBwbHVnaW4uXG4gICAgICovXG4gICAgb2JqLnJlZ2lzdGVyUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGN0b3IpXG4gICAge1xuICAgICAgICBvYmouX19wbHVnaW5zW3BsdWdpbk5hbWVdID0gY3RvcjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5pbml0UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLnBsdWdpbnMgfHwge307XG5cbiAgICAgICAgZm9yICh2YXIgbyBpbiBvYmouX19wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBuZXcgKG9iai5fX3BsdWdpbnNbb10pKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmRlc3Ryb3lQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGZvciAodmFyIG8gaW4gdGhpcy5wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG51bGw7XG4gICAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvKipcbiAgICAgKiBNaXhlcyBpbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGx1Z2luVGFyZ2V0IGludG8gYW5vdGhlciBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3Qge29iamVjdH0gVGhlIG9iaiB0byBtaXggaW50b1xuICAgICAqL1xuICAgIG1peGluOiBmdW5jdGlvbiBtaXhpbihvYmopXG4gICAge1xuICAgICAgICBwbHVnaW5UYXJnZXQob2JqKTtcbiAgICB9XG59O1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKSxcbiAgICBtZXNoID0gcmVxdWlyZSgnLi9tZXNoJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi9leHRyYXMnKSxcbiAgICBmaWx0ZXJzID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgU3ByaXRlQmF0Y2hcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkuUGFydGljbGVDb250YWluZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlQmF0Y2ggPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuJyk7XG59O1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIEFzc2V0TG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLmxvYWRlcnMuTG9hZGVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuQXNzZXRMb2FkZXIgPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy4nKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvcmUsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RhZ2VcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RhZ2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignWW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIFBJWEkgU3RhZ2UgYW55IG1vcmUsIHlvdSBjYW4gc2ltcGx5IHJlbmRlciBhbnkgY29udGFpbmVyLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgRGlzcGxheU9iamVjdENvbnRhaW5lclxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBEaXNwbGF5T2JqZWN0Q29udGFpbmVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Rpc3BsYXlPYmplY3RDb250YWluZXIgaGFzIGJlZW4gc2hvcnRlbmVkIHRvIENvbnRhaW5lciwgcGxlYXNlIHVzZSBDb250YWluZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdHJpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdHJpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgU3RyaXAgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBNZXNoIGFuZCBtb3ZlZCB0byBtZXNoLk1lc2gsIHBsZWFzZSB1c2UgbWVzaC5NZXNoIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guTWVzaDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFJvcGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLlJvcGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgUm9wZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgUm9wZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBtZXNoLlJvcGUsIHBsZWFzZSB1c2UgbWVzaC5Sb3BlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guUm9wZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIE1vdmllQ2xpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXBcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgTW92aWVDbGlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBNb3ZpZUNsaXAgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLk1vdmllQ2xpcCwgcGxlYXNlIHVzZSBleHRyYXMuTW92aWVDbGlwIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5Nb3ZpZUNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUaWxpbmdTcHJpdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRpbGluZ1Nwcml0ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGlsaW5nU3ByaXRlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5UaWxpbmdTcHJpdGUsIHBsZWFzZSB1c2UgZXh0cmFzLlRpbGluZ1Nwcml0ZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuVGlsaW5nU3ByaXRlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQml0bWFwVGV4dFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJpdG1hcFRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJpdG1hcFRleHQgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLkJpdG1hcFRleHQsIHBsZWFzZSB1c2UgZXh0cmFzLkJpdG1hcFRleHQgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLkJpdG1hcFRleHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBibGVuZE1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgYmxlbmRNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYmxlbmRNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBCTEVORF9NT0RFUywgcGxlYXNlIHVzZSBCTEVORF9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkJMRU5EX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2NhbGVNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIHNjYWxlTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHNjYWxlTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gU0NBTEVfTU9ERVMsIHBsZWFzZSB1c2UgU0NBTEVfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TQ0FMRV9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5CYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCYXNlVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuQmFzZVRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5UZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLlRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5UZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5UZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgbWF0aFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIG1hdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBtYXRoIG5hbWVzcGFjZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgYWNjZXNzIG1lbWJlcnMgYWxyZWFkeSBhY2Nlc3NpYmxlIG9uIFBJWEkuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBQSVhJLlNwcml0ZSNzZXRUZXh0dXJlXG4gKiBAc2VlIFBJWEkuU3ByaXRlI3RleHR1cmVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0dXJlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0dXJlIHByb3BlcnR5LCBlLmcgOiBzcHJpdGUudGV4dHVyZSA9IHRleHR1cmU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuZXh0cmFzLkJpdG1hcFRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteUJpdG1hcFRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15VGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFN0eWxlXG4gKiBAc2VlIFBJWEkuVGV4dCNzdHlsZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpXG57XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgIGNvbnNvbGUud2Fybignc2V0U3R5bGUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5LCBlLmcgOiBteVRleHQuc3R5bGUgPSBzdHlsZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAc2VlIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHR1cmUucHJvdG90eXBlLnNldEZyYW1lID0gZnVuY3Rpb24oZnJhbWUpXG57XG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIGNvbnNvbGUud2Fybignc2V0RnJhbWUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIGZyYW1lIHByb3BlcnR5LCBlLmcgOiBteVRleHR1cmUuZnJhbWUgPSBmcmFtZTsnKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpbHRlcnMsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkFic3RyYWN0RmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkFic3RyYWN0RmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEFic3RyYWN0RmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuQWJzdHJhY3RGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEFic3RyYWN0RmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQWJzdHJhY3RGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuRlhBQUZpbHRlclxuICAgICAqIEBzZWUgUElYSS5GWEFBRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEZYQUFGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5GWEFBRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBGWEFBRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuRlhBQUZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgU3ByaXRlTWFza0ZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIFNwcml0ZU1hc2tGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TcHJpdGVNYXNrRmlsdGVyO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS51dGlscy51dWlkXG4gKiBAc2VlIFBJWEkudXRpbHMudWlkXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gKi9cbmNvcmUudXRpbHMudXVpZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29uc29sZS53YXJuKCd1dGlscy51dWlkKCkgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB1dGlscy51aWQoKSBmcm9tIG5vdyBvbi4nKTtcbiAgICByZXR1cm4gY29yZS51dGlscy51aWQoKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIEJpdG1hcFRleHQgb2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0IHVzaW5nIGJpdG1hcCBmb250LiBUb1xuICogc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLCAnXFxyJyBvciAnXFxyXFxuJyBpbiB5b3VyIHN0cmluZy4gWW91IGNhbiBnZW5lcmF0ZSB0aGUgZm50IGZpbGVzIHVzaW5nOlxuICpcbiAqIEEgQml0bWFwVGV4dCBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGZvbnQgaXMgbG9hZGVkXG4gKlxuICogYGBganNcbiAqIC8vIGluIHRoaXMgY2FzZSB0aGUgZm9udCBpcyBpbiBhIGZpbGUgY2FsbGVkICdkZXN5cmVsLmZudCdcbiAqIHZhciBiaXRtYXBUZXh0ID0gbmV3IFBJWEkuZXh0cmFzLkJpdG1hcFRleHQoXCJ0ZXh0IHVzaW5nIGEgZmFuY3kgZm9udCFcIiwge2ZvbnQ6IFwiMzVweCBEZXN5cmVsXCIsIGFsaWduOiBcInJpZ2h0XCJ9KTtcbiAqIGBgYFxuICpcbiAqXG4gKiBodHRwOi8vd3d3LmFuZ2VsY29kZS5jb20vcHJvZHVjdHMvYm1mb250LyBmb3Igd2luZG93cyBvclxuICogaHR0cDovL3d3dy5ibWdseXBoLmNvbS8gZm9yIG1hYy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIHN0eWxlIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gc3R5bGUuZm9udCB7c3RyaW5nfG9iamVjdH0gVGhlIGZvbnQgZGVzY3JpcHRvciBmb3IgdGhlIG9iamVjdCwgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZyBvZiBmb3JtXG4gKiAgICAgIFwiMjRweCBGb250TmFtZVwiIG9yIFwiRm9udE5hbWVcIiBvciBhcyBhbiBvYmplY3Qgd2l0aCBleHBsaWNpdCBuYW1lL3NpemUgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5uYW1lXSB7c3RyaW5nfSBUaGUgYml0bWFwIGZvbnQgaWRcbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5zaXplXSB7bnVtYmVyfSBUaGUgc2l6ZSBvZiB0aGUgZm9udCBpbiBwaXhlbHMsIGUuZy4gMjRcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3RcbiAqICAgICAgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS50aW50PTB4RkZGRkZGXSB7bnVtYmVyfSBUaGUgdGludCBjb2xvclxuICovXG5mdW5jdGlvbiBCaXRtYXBUZXh0KHRleHQsIHN0eWxlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGxldHRlciBzcHJpdGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbHlwaHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mb250ID0ge1xuICAgICAgICB0aW50OiBzdHlsZS50aW50ICE9PSB1bmRlZmluZWQgPyBzdHlsZS50aW50IDogMHhGRkZGRkYsXG4gICAgICAgIGFsaWduOiBzdHlsZS5hbGlnbiB8fCAnbGVmdCcsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIHNpemU6IDBcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBmb250LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mb250ID0gc3R5bGUuZm9udDsgLy8gcnVuIGZvbnQgc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggd2lkdGggb2YgdGhpcyBiaXRtYXAgdGV4dCBpbiBwaXhlbHMuIElmIHRoZSB0ZXh0IHByb3ZpZGVkIGlzIGxvbmdlciB0aGFuIHRoZSB2YWx1ZSBwcm92aWRlZCwgbGluZSBicmVha3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoZSBsYXN0IHdoaXRlc3BhY2UuXG4gICAgICogRGlzYWJsZSBieSBzZXR0aW5nIHZhbHVlIHRvIDBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggbGluZSBoZWlnaHQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBUZXh0LCBpZTogd2hlbiB0cnlpbmcgdG8gdmVydGljYWxseSBhbGlnbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpcnR5IHN0YXRlIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkJpdG1hcFRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuQml0bWFwVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCaXRtYXBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCaXRtYXBUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRpbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC50aW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC50aW50ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCkgPyB2YWx1ZSA6IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdsZWZ0J1xuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGFsaWduOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQuYWxpZ247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LmFsaWduID0gdmFsdWUgfHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9udCBkZXNjcmlwdG9yIG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Rm9udH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBmb250OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWUuc2xpY2UoMSkuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gcGFyc2VJbnQodmFsdWVbMF0sIDEwKSA6IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicgPyB2YWx1ZS5zaXplIDogcGFyc2VJbnQodmFsdWUuc2l6ZSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGRhdGEgPSBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV07XG4gICAgdmFyIHBvcyA9IG5ldyBjb3JlLlBvaW50KCk7XG4gICAgdmFyIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgdmFyIGNoYXJzID0gW107XG4gICAgdmFyIGxhc3RMaW5lV2lkdGggPSAwO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBsaW5lV2lkdGhzID0gW107XG4gICAgdmFyIGxpbmUgPSAwO1xuICAgIHZhciBzY2FsZSA9IHRoaXMuX2ZvbnQuc2l6ZSAvIGRhdGEuc2l6ZTtcbiAgICB2YXIgbGFzdFNwYWNlID0gLTE7XG4gICAgdmFyIG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHQubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSB0aGlzLnRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgbGFzdFNwYWNlID0gLyhcXHMpLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpID8gaSA6IGxhc3RTcGFjZTtcblxuICAgICAgICBpZiAoLyg/OlxcclxcbnxcXHJ8XFxuKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RTcGFjZSAhPT0gLTEgJiYgdGhpcy5tYXhXaWR0aCA+IDAgJiYgcG9zLnggKiBzY2FsZSA+IHRoaXMubWF4V2lkdGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXMoY2hhcnMsIGxhc3RTcGFjZSwgaSAtIGxhc3RTcGFjZSk7XG4gICAgICAgICAgICBpID0gbGFzdFNwYWNlO1xuICAgICAgICAgICAgbGFzdFNwYWNlID0gLTE7XG5cbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFyRGF0YSA9IGRhdGEuY2hhcnNbY2hhckNvZGVdO1xuXG4gICAgICAgIGlmICghY2hhckRhdGEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZDaGFyQ29kZSAmJiBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJzLnB1c2goe3RleHR1cmU6Y2hhckRhdGEudGV4dHVyZSwgbGluZTogbGluZSwgY2hhckNvZGU6IGNoYXJDb2RlLCBwb3NpdGlvbjogbmV3IGNvcmUuUG9pbnQocG9zLnggKyBjaGFyRGF0YS54T2Zmc2V0LCBwb3MueSArIGNoYXJEYXRhLnlPZmZzZXQpfSk7XG4gICAgICAgIGxhc3RMaW5lV2lkdGggPSBwb3MueCArIChjaGFyRGF0YS50ZXh0dXJlLndpZHRoICsgY2hhckRhdGEueE9mZnNldCk7XG4gICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLnhBZHZhbmNlO1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgKGNoYXJEYXRhLnlPZmZzZXQgKyBjaGFyRGF0YS50ZXh0dXJlLmhlaWdodCkpO1xuICAgICAgICBwcmV2Q2hhckNvZGUgPSBjaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcblxuICAgIHZhciBsaW5lQWxpZ25PZmZzZXRzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IGxpbmU7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBhbGlnbk9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9mb250LmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZUFsaWduT2Zmc2V0cy5wdXNoKGFsaWduT2Zmc2V0KTtcbiAgICB9XG5cbiAgICB2YXIgbGVuQ2hhcnMgPSBjaGFycy5sZW5ndGg7XG4gICAgdmFyIHRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuQ2hhcnM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjID0gdGhpcy5fZ2x5cGhzW2ldOyAvLyBnZXQgdGhlIG5leHQgZ2x5cGggc3ByaXRlXG5cbiAgICAgICAgaWYgKGMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMudGV4dHVyZSA9IGNoYXJzW2ldLnRleHR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjID0gbmV3IGNvcmUuU3ByaXRlKGNoYXJzW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZ2x5cGhzLnB1c2goYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjLnBvc2l0aW9uLnggPSAoY2hhcnNbaV0ucG9zaXRpb24ueCArIGxpbmVBbGlnbk9mZnNldHNbY2hhcnNbaV0ubGluZV0pICogc2NhbGU7XG4gICAgICAgIGMucG9zaXRpb24ueSA9IGNoYXJzW2ldLnBvc2l0aW9uLnkgKiBzY2FsZTtcbiAgICAgICAgYy5zY2FsZS54ID0gYy5zY2FsZS55ID0gc2NhbGU7XG4gICAgICAgIGMudGludCA9IHRpbnQ7XG5cbiAgICAgICAgaWYgKCFjLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBjaGlsZHJlbi5cbiAgICBmb3IgKGkgPSBsZW5DaGFyczsgaSA8IHRoaXMuX2dseXBocy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5fZ2x5cGhzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHRXaWR0aCA9IG1heExpbmVXaWR0aCAqIHNjYWxlO1xuICAgIHRoaXMudGV4dEhlaWdodCA9IChwb3MueSArIGRhdGEubGluZUhlaWdodCkgKiBzY2FsZTtcbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSBtYXhMaW5lSGVpZ2h0ICogc2NhbGU7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvZiB0aGlzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0ZXh0IGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGdldExvY2FsQm91bmRzXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cblxuQml0bWFwVGV4dC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHJldHVybiBjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn07XG5cbkJpdG1hcFRleHQuZm9udHMgPSB7fTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgTW92aWVDbGlwIGlzIGEgc2ltcGxlIHdheSB0byBkaXNwbGF5IGFuIGFuaW1hdGlvbiBkZXBpY3RlZCBieSBhIGxpc3Qgb2YgdGV4dHVyZXMuXG4gKlxuICogYGBganNcbiAqIHZhciBhbGllbkltYWdlcyA9IFtcImltYWdlX3NlcXVlbmNlXzAxLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDIucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMy5wbmdcIixcImltYWdlX3NlcXVlbmNlXzA0LnBuZ1wiXTtcbiAqIHZhciB0ZXh0dXJlQXJyYXkgPSBbXTtcbiAqXG4gKiBmb3IgKHZhciBpPTA7IGkgPCA0OyBpKyspXG4gKiB7XG4gKiAgICAgIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZShhbGllbkltYWdlc1tpXSk7XG4gKiAgICAgIHRleHR1cmVBcnJheS5wdXNoKHRleHR1cmUpO1xuICogfTtcbiAqXG4gKiB2YXIgbWMgPSBuZXcgUElYSS5Nb3ZpZUNsaXAodGV4dHVyZUFycmF5KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmVzIHtQSVhJLlRleHR1cmVbXXxPYmplY3RbXX0gYW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuVGV4dHVyZX0gb3IgZnJhbWUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIGFuaW1hdGlvblxuICogQHBhcmFtIHRleHR1cmVzW10udGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUge0BsaW5rIFBJWEkuVGV4dHVyZX0gb2YgdGhlIGZyYW1lXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50aW1lIHtudW1iZXJ9IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWUgaW4gbXNcbiAqL1xuZnVuY3Rpb24gTW92aWVDbGlwKHRleHR1cmVzKVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZXNbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUgPyB0ZXh0dXJlc1swXSA6IHRleHR1cmVzWzBdLnRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVzID0gdGV4dHVyZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3BlZWQgdGhhdCB0aGUgTW92aWVDbGlwIHdpbGwgcGxheSBhdC4gSGlnaGVyIGlzIGZhc3RlciwgbG93ZXIgaXMgc2xvd2VyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIG1vdmllIGNsaXAgcmVwZWF0cyBhZnRlciBwbGF5aW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5sb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIE1vdmllQ2xpcCBmaW5pc2hlcyBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKi9cbiAgICB0aGlzLm9uQ29tcGxldGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRWxhcHNlZCB0aW1lIHNpbmNlIGFuaW1hdGlvbiBoYXMgYmVlbiBzdGFydGVkLCB1c2VkIGludGVybmFsbHkgdG8gZGlzcGxheSBjdXJyZW50IHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgTW92aWVDbGlwIGlzIGN1cnJlbnRseSBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTW92aWVDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcbk1vdmllQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNb3ZpZUNsaXA7XG5tb2R1bGUuZXhwb3J0cyA9IE1vdmllQ2xpcDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTW92aWVDbGlwLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIHRvdGFsRnJhbWVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBNb3ZpZUNsaXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbnVtYmVyIG9mIHRleHR1cmVzXG4gICAgICogYXNzaWduZWQgdG8gdGhlIE1vdmllQ2xpcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0b3RhbEZyYW1lczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgdGV4dHVyZXMgdXNlZCBmb3IgdGhpcyBNb3ZpZUNsaXBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVtdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICpcbiAgICAgKi9cbiAgICB0ZXh0dXJlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzLnB1c2godmFsdWVbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucy5wdXNoKHZhbHVlW2ldLnRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAqIFRoZSBNb3ZpZUNsaXBzIGN1cnJlbnQgZnJhbWUgaW5kZXhcbiAgICAqXG4gICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICogQHJlYWRvbmx5XG4gICAgKi9cbiAgICBjdXJyZW50RnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSkgJSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lIDwgMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUgKz0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGcmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBQbGF5cyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKHRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBnb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RvcCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRTdG9wID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG59O1xuXG4vKipcbiAqIEdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZSBhbmQgYmVnaW5zIHBsYXlpbmcgdGhlIE1vdmllQ2xpcFxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdGFydCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRQbGF5ID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLnBsYXkoKTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqIEBwcml2YXRlXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB2YXIgZWxhcHNlZCA9IHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZHVyYXRpb25zICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGxhZyA9IHRoaXMuX2N1cnJlbnRUaW1lICUgMSAqIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG5cbiAgICAgICAgbGFnICs9IGVsYXBzZWQgLyA2MCAqIDEwMDA7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA8IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lLS07XG4gICAgICAgICAgICBsYWcgKz0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWduID0gTWF0aC5zaWduKHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPj0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGFnIC09IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0gKiBzaWduO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gc2lnbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGxhZyAvIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGVsYXBzZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lIDwgMCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCgwKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VGltZSA+PSB0aGlzLl90ZXh0dXJlcy5sZW5ndGggJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AodGhpcy5fdGV4dHVyZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG5cbn07XG5cbi8qXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBkZXN0cm95cyBpdFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCApXG57XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGZyYW1lIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgZnJhbWVzIGlkcyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUZyYW1lcyA9IGZ1bmN0aW9uIChmcmFtZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tRnJhbWUoZnJhbWVzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBpbWFnZSB1cmxzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tSW1hZ2VzID0gZnVuY3Rpb24gKGltYWdlcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59OyIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIC8vIGEgc3ByaXRlIHVzZSBkZm9yIHJlbmRlcmluZyB0ZXh0dXJlcy4uXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICBDYW52YXNUaW50ZXIgPSByZXF1aXJlKCcuLi9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyk7XG5cbi8qKlxuICogQSB0aWxpbmcgc3ByaXRlIGlzIGEgZmFzdCB3YXkgb2YgcmVuZGVyaW5nIGEgdGlsaW5nIGltYWdlXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZSB7VGV4dHVyZX0gdGhlIHRleHR1cmUgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gVGlsaW5nU3ByaXRlKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsaW5nIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVNjYWxlID0gbmV3IGNvcmUuUG9pbnQoMSwxKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIG9mZnNldCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG5ldyBjb3JlLlBvaW50KDAsMCk7XG5cbiAgICAvLy8vLyBwcml2YXRlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2l0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBuZXcgY29yZS5UZXh0dXJlVXZzKCk7XG5cbiAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gbnVsbDtcblxuICAgIC8vVE9ETyBtb3ZlLi5cbiAgICB0aGlzLnNoYWRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKFxuXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVUcmFuc2Zvcm07JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnICAgY29vcmQgLT0gdVRyYW5zZm9ybS54eTsnLFxuICAgICAgICAnICAgY29vcmQgLz0gdVRyYW5zZm9ybS56dzsnLFxuICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGNvb3JkOycsXG5cbiAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjMiB1UGl4ZWxTaXplOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gbW9kKHZUZXh0dXJlQ29vcmQsIHVGcmFtZS56dyk7JyxcbiAgICAgICAgJyAgIGNvb3JkID0gY2xhbXAoY29vcmQsIHVQaXhlbFNpemUsIHVGcmFtZS56dyAtIHVQaXhlbFNpemUpOycsXG4gICAgICAgICcgICBjb29yZCArPSB1RnJhbWUueHk7JyxcblxuICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gIHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQpICogdkNvbG9yIDsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1RnJhbWU6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1VHJhbnNmb3JtOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVBpeGVsU2l6ZSA6IHsgdHlwZSA6ICcyZnYnLCB2YWx1ZTogWzEsIDFdfVxuICAgICAgICAgICAgfVxuICAgICAgKTtcbn1cblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWxpbmdTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbGluZ1Nwcml0ZTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWxpbmdTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGlsaW5nU3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIHR3ZWFrIG91ciB0ZXh0dXJlIHRlbXBvcmFyaWx5Li5cbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZSB8fCAhdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZW1wVXZzID0gdGV4dHVyZS5fdXZzLFxuICAgICAgICB0ZW1wV2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgdGVtcEhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCxcbiAgICAgICAgdHcgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoLFxuICAgICAgICB0aCA9IHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGhpcy5fdXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMF0gPSAxLjAvdHc7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVsxXSA9IDEuMC90aDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVswXSA9IHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzFdID0gdGVtcFV2cy55MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMl0gPSB0ZW1wVXZzLngxIC0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbM10gPSB0ZW1wVXZzLnkyIC0gdGVtcFV2cy55MDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMF0gPSAodGhpcy50aWxlUG9zaXRpb24ueCAlICh0ZW1wV2lkdGggKiB0aGlzLnRpbGVTY2FsZS54KSkgLyB0aGlzLl93aWR0aDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzFdID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgJSAodGVtcEhlaWdodCAqIHRoaXMudGlsZVNjYWxlLnkpKSAvIHRoaXMuX2hlaWdodDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzJdID0gKCB0dyAvIHRoaXMuX3dpZHRoICkgKiB0aGlzLnRpbGVTY2FsZS54O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbM10gPSAoIHRoIC8gdGhpcy5faGVpZ2h0ICkgKiB0aGlzLnRpbGVTY2FsZS55O1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRlbXBVdnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0ZW1wV2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGVtcEhlaWdodDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZiAoIXRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQsXG4gICAgICAgIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICBiYXNlVGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIG1vZFggPSAodGhpcy50aWxlUG9zaXRpb24ueCAvIHRoaXMudGlsZVNjYWxlLngpICUgdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIG1vZFkgPSAodGhpcy50aWxlUG9zaXRpb24ueSAvIHRoaXMudGlsZVNjYWxlLnkpICUgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuXG4gICAgLy8gY3JlYXRlIGEgbmljZSBzaGlueSBwYXR0ZXJuIVxuICAgIC8vIFRPRE8gdGhpcyBuZWVkcyB0byBiZSByZWZyZXNoZWQgaWYgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICBpZighdGhpcy5fY2FudmFzUGF0dGVybilcbiAgICB7XG4gICAgICAgIC8vIGN1dCBhbiBvYmplY3QgZnJvbSBhIHNwcml0ZXNoZWV0Li5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgY29yZS5DYW52YXNCdWZmZXIodGV4dHVyZS5fZnJhbWUud2lkdGgsIHRleHR1cmUuX2ZyYW1lLmhlaWdodCk7XG5cbiAgICAgICAgLy8gVGludCB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMudGludGVkVGV4dHVyZSwgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKGJhc2VUZXh0dXJlLnNvdXJjZSwgLXRleHR1cmUuX2ZyYW1lLngsIC10ZXh0dXJlLl9mcmFtZS55KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gdGVtcENhbnZhcy5jb250ZXh0LmNyZWF0ZVBhdHRlcm4oIHRlbXBDYW52YXMuY2FudmFzLCAncmVwZWF0JyApO1xuICAgIH1cblxuICAgIC8vIHNldCBjb250ZXh0IHN0YXRlLi5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvbik7XG5cbiAgICAvLyBUT0RPIC0gdGhpcyBzaG91bGQgYmUgcm9sbGVkIGludG8gdGhlIHNldFRyYW5zZm9ybSBhYm92ZS4uXG4gICAgY29udGV4dC5zY2FsZSh0aGlzLnRpbGVTY2FsZS54LHRoaXMudGlsZVNjYWxlLnkpO1xuXG4gICAgY29udGV4dC50cmFuc2xhdGUobW9kWCArICh0aGlzLmFuY2hvci54ICogLXRoaXMuX3dpZHRoICksXG4gICAgICAgICAgICAgICAgICAgICAgbW9kWSArICh0aGlzLmFuY2hvci55ICogLXRoaXMuX2hlaWdodCkpO1xuXG4gICAgLy8gY2hlY2sgYmxlbmQgbW9kZVxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vIGZpbGwgdGhlIHBhdHRlcm4hXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9jYW52YXNQYXR0ZXJuO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoLW1vZFgsXG4gICAgICAgICAgICAgICAgICAgICAtbW9kWSxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoIC8gdGhpcy50aWxlU2NhbGUueCxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCAvIHRoaXMudGlsZVNjYWxlLnkpO1xuXG5cbiAgICAvL1RPRE8gLSBwcmV0dHkgc3VyZSB0aGlzIGNhbiBiZSBkZWxldGVkLi4uXG4gICAgLy9jb250ZXh0LnRyYW5zbGF0ZSgtdGhpcy50aWxlUG9zaXRpb24ueCArICh0aGlzLmFuY2hvci54ICogdGhpcy5fd2lkdGgpLCAtdGhpcy50aWxlUG9zaXRpb24ueSArICh0aGlzLmFuY2hvci55ICogdGhpcy5faGVpZ2h0KSk7XG4gICAgLy9jb250ZXh0LnNjYWxlKDEgLyB0aGlzLnRpbGVTY2FsZS54LCAxIC8gdGhpcy50aWxlU2NhbGUueSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIHNwcml0ZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG5cbiAgICB2YXIgdzAgPSB3aWR0aCAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgIHZhciB3MSA9IHdpZHRoICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICB2YXIgaDAgPSBoZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICB2YXIgaDEgPSBoZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcblxuICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIG1pblgsXG4gICAgICAgIG1heFgsXG4gICAgICAgIG1pblksXG4gICAgICAgIG1heFk7XG5cbiAgICBtaW5YID0geDE7XG4gICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICBtaW5ZID0geTE7XG4gICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICBtYXhYID0geDE7XG4gICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICBtYXhZID0geTE7XG4gICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgYm91bmRzLnggPSBtaW5YO1xuICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcblxuICAgIHJldHVybiBib3VuZHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIGNoZWNrXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRpbGluZyBzcHJpdGVcbiAqXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWxlU2NhbGUgPSBudWxsO1xuICAgIHRoaXMuX3RpbGVTY2FsZU9mZnNldCA9IG51bGw7XG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHRpbGluZyBzcHJpdGUgdGhhdCB3aWxsIHVzZSBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZCx3aWR0aCxoZWlnaHQpXG57XG4gICAgdmFyIHRleHR1cmUgPSBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSAnICsgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUodGV4dHVyZSx3aWR0aCxoZWlnaHQpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCB3aWR0aCwgaGVpZ2h0LCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSksd2lkdGgsaGVpZ2h0KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gY29yZS5EaXNwbGF5T2JqZWN0LFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwID0gZmFsc2U7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSBudWxsO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsSGl0VGVzdCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxEZXN0cm95ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGlzIGRpc3BsYXkgb2JqZWN0IHRvIGJlIGNhY2hlZCBhcyBhIGJpdG1hcC5cbiAgICAgKiBUaGlzIGJhc2ljYWxseSB0YWtlcyBhIHNuYXAgc2hvdCBvZiB0aGUgZGlzcGxheSBvYmplY3QgYXMgaXQgaXMgYXQgdGhhdCBtb21lbnQuIEl0IGNhbiBwcm92aWRlIGEgcGVyZm9ybWFuY2UgYmVuZWZpdCBmb3IgY29tcGxleCBzdGF0aWMgZGlzcGxheU9iamVjdHMuXG4gICAgICogVG8gcmVtb3ZlIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnZmFsc2UnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgY2FjaGVBc0JpdG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZUFzQml0bWFwO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXAgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVBc0JpdG1hcCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IHRoaXMucmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSB0aGlzLnJlbmRlckNhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gdGhpcy51cGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHMgPSB0aGlzLmdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSA9IHRoaXMuZGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludCA9IHRoaXMuY29udGFpbnNQb2ludDtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX2NhY2hlQXNCaXRtYXBEZXN0cm95O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJvdW5kcyA9IHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fb3JpZ2luYWxEZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIFdlYkdMXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlciggdGhpcy5fY2FjaGVkU3ByaXRlICk7XG59O1xuXG4vKipcbiogUHJlcGFyZXMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZmlyc3Qgd2UgZmx1c2ggYW55dGhpbmcgbGVmdCBpbiB0aGUgcmVuZGVyZXIgKG90aGVyd2lzZSBpdCB3b3VsZCBnZXQgcmVuZGVyZWQgdG8gdGhlIGNhY2hlZCB0ZXh0dXJlKVxuICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuICAgIC8vdGhpcy5maWx0ZXJzPSBbXTtcbiAgICAvLyBuZXh0IHdlIGZpbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHVudHJhbnNmb3JtZWQgb2JqZWN0XG4gICAgLy8gdGhpcyBmdW5jdGlvbiBhbHNvIGNhbGxzIHVwZGF0ZXRyYW5zZm9ybSBvbiBhbGwgaXRzIGNoaWxkcmVuIGFzIHBhcnQgb2YgdGhlIG1lYXN1cmluZy4gVGhpcyBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgdHJhbnNmb3JtIGFnYWluIGluIHRoaXMgZnVuY3Rpb25cbiAgICAvLyBUT0RPIHBhc3MgYW4gb2JqZWN0IHRvIGNsb25lIHRvbz8gc2F2ZXMgaGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBvbmUgZWFjaCB0aW1lIVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuY2xvbmUoKTtcblxuICAgIC8vIGFkZCBzb21lIHBhZGRpbmchXG4gICAgaWYodGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5fZmlsdGVyc1swXS5wYWRkaW5nO1xuICAgICAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgICAgICBib3VuZHMueSAtPSBwYWRkaW5nO1xuXG4gICAgICAgIGJvdW5kcy53aWR0aCArPSBwYWRkaW5nICogMjtcbiAgICAgICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcbiAgICB9XG5cbiAgICAvLyBmb3Igbm93IHdlIGNhY2hlIHRoZSBjdXJyZW50IHJlbmRlclRhcmdldCB0aGF0IHRoZSB3ZWJHTCByZW5kZXJlciBpcyBjdXJyZW50bHkgdXNpbmcuXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBtb3JlIGVsZWdlbnQuLlxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0O1xuICAgIC8vIFdlIGFsc28gc3RvcmUgdGhlIGZpbHRlciBzdGFjayAtIEkgd2lsbCBkZWZpbml0ZWx5IGxvb2sgdG8gY2hhbmdlIGhvdyB0aGlzIHdvcmtzIGEgbGl0dGxlIGxhdGVyIGRvd24gdGhlIGxpbmUuXG4gICAgdmFyIHN0YWNrID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjaztcblxuICAgIC8vIHRoaXMgcmVuZGVyVGV4dHVyZSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlZCBEaXNwbGF5T2JqZWN0XG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cblxuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjYWNoZWRSZW5kZXJUYXJnZXQpO1xuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2sgPSBzdGFjaztcblxuICAgIHRoaXMucmVuZGVyV2ViR0wgICAgID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgICAgICAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyByZXN0b3JlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIGNhY2hlZCBzcHJpdGUgdG8gYXZvaWQgdGhlIG5hc3R5IGZsaWNrZXIuLlxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAvLyBtYXAgdGhlIGhpdCB0ZXN0Li5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBjYW52YXNcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzKCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbn07XG5cbi8vVE9ETyB0aGlzIGNhbiBiZSB0aGUgc2FtZSBhcyB0aGUgd2ViR0wgdmVyaXNvbi4uIHdpbGwgbmVlZCB0byBkbyBhIGxpdHRsZSB0d2Vha2luZyBmaXJzdCB0aG91Z2guLlxuLyoqXG4qIFByZXBhcmVzIHRoZSBDYW52YXMgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vZ2V0IGJvdW5kcyBhY3R1YWxseSB0cmFuc2Zvcm1zIHRoZSBvYmplY3QgZm9yIHVzIGFscmVhZHkhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5jb250ZXh0ID0gY2FjaGVkUmVuZGVyVGFyZ2V0O1xuXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBDYWxjdWxhdGVzIHRoZSBib3VuZHMgb2YgdGhlIGNhY2hlZCBzcHJpdGVcbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZ2V0Q2FjaGVkQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNwcml0ZS5nZXRCb3VuZHMoKTtcbn07XG5cbi8qKlxuKiBEZXN0cm95cyB0aGUgY2FjaGVkIHNwcml0ZS5cbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fdGV4dHVyZS5kZXN0cm95KCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwRGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jYWNoZUFzQml0bWFwID0gZmFsc2U7XG4gICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95KCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIG9iamVjdC5cbiAqXG4gKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICogQG1lbWJlciB7c3RyaW5nfVxuICovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZGlzcGxheSBvYmplY3QgaW4gdGhlIGNvbnRhaW5lclxuKlxuKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4qIEBwYXJhbSBuYW1lIHtzdHJpbmd9IGluc3RhbmNlIG5hbWVcbiogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuKi9cbmNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4qXG4qIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4qIEBwYXJhbSBwb2ludCB7UG9pbnR9IHRoZSBwb2ludCB0byB3cml0ZSB0aGUgZ2xvYmFsIHZhbHVlIHRvLiBJZiBudWxsIGEgbmV3IHBvaW50IHdpbGwgYmUgcmV0dXJuZWRcbiogQHJldHVybiB7UG9pbnR9XG4qL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRHbG9iYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb2ludClcbntcbiAgICBwb2ludCA9IHBvaW50IHx8IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICBpZih0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHBvaW50LnggPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICBwb2ludC55ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG9pbnQueCA9IHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMucG9zaXRpb24ueTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG5yZXF1aXJlKCcuL2NhY2hlQXNCaXRtYXAnKTtcbnJlcXVpcmUoJy4vZ2V0Q2hpbGRCeU5hbWUnKTtcbnJlcXVpcmUoJy4vZ2V0R2xvYmFsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZXh0cmFzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1vdmllQ2xpcDogICAgICByZXF1aXJlKCcuL01vdmllQ2xpcCcpLFxuICAgIFRpbGluZ1Nwcml0ZTogICByZXF1aXJlKCcuL1RpbGluZ1Nwcml0ZScpLFxuICAgIEJpdG1hcFRleHQ6ICAgICByZXF1aXJlKCcuL0JpdG1hcFRleHQnKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vLyBUT0RPIChjZW5nbGVyKSAtIFRoZSBZIGlzIGZsaXBwZWQgaW4gdGhpcyBzaGFkZXIgZm9yIHNvbWUgcmVhc29uLlxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBzaGFkZXIgOiBodHRwczovL3d3dy5zaGFkZXJ0b3kuY29tL3ZpZXcvbHNzR0RqIGJ5IEBtb3ZBWDEzaFxuICovXG5cbi8qKlxuICogQW4gQVNDSUkgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBBc2NpaUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgY2hhcmFjdGVyKGZsb2F0IG4sIHZlYzIgcClcXG57XFxuICAgIHAgPSBmbG9vcihwKnZlYzIoNC4wLCAtNC4wKSArIDIuNSk7XFxuICAgIGlmIChjbGFtcChwLngsIDAuMCwgNC4wKSA9PSBwLnggJiYgY2xhbXAocC55LCAwLjAsIDQuMCkgPT0gcC55KVxcbiAgICB7XFxuICAgICAgICBpZiAoaW50KG1vZChuL2V4cDIocC54ICsgNS4wKnAueSksIDIuMCkpID09IDEpIHJldHVybiAxLjA7XFxuICAgIH1cXG4gICAgcmV0dXJuIDAuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHk7XFxuXFxuICAgIHZlYzMgY29sID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBmbG9vciggdXYgLyBwaXhlbFNpemUgKSAqIHBpeGVsU2l6ZSAvIGRpbWVuc2lvbnMueHkpLnJnYjtcXG5cXG4gICAgZmxvYXQgZ3JheSA9IChjb2wuciArIGNvbC5nICsgY29sLmIpIC8gMy4wO1xcblxcbiAgICBmbG9hdCBuID0gIDY1NTM2LjA7ICAgICAgICAgICAgIC8vIC5cXG4gICAgaWYgKGdyYXkgPiAwLjIpIG4gPSA2NTYwMC4wOyAgICAvLyA6XFxuICAgIGlmIChncmF5ID4gMC4zKSBuID0gMzMyNzcyLjA7ICAgLy8gKlxcbiAgICBpZiAoZ3JheSA+IDAuNCkgbiA9IDE1MjU1MDg2LjA7IC8vIG9cXG4gICAgaWYgKGdyYXkgPiAwLjUpIG4gPSAyMzM4NTE2NC4wOyAvLyAmXFxuICAgIGlmIChncmF5ID4gMC42KSBuID0gMTUyNTIwMTQuMDsgLy8gOFxcbiAgICBpZiAoZ3JheSA+IDAuNykgbiA9IDEzMTk5NDUyLjA7IC8vIEBcXG4gICAgaWYgKGdyYXkgPiAwLjgpIG4gPSAxMTUxMjgxMC4wOyAvLyAjXFxuXFxuICAgIHZlYzIgcCA9IG1vZCggdXYgLyAoIHBpeGVsU2l6ZSAqIDAuNSApLCAyLjApIC0gdmVjMigxLjApO1xcbiAgICBjb2wgPSBjb2wgKiBjaGFyYWN0ZXIobiwgcCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sLCAxLjApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDggfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQXNjaWlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Bc2NpaUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc2NpaUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQXNjaWlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFzY2lpRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBzaXplIHVzZWQgYnkgdGhlIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkFzY2lpRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmxvb21GaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmxvb21GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xufVxuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsb29tRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb29tRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbG9vbUZpbHRlcjtcblxuQmxvb21GaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLlNDUkVFTik7XG5cbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvb21GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuXG4vKipcbiAqIFRoZSBCbHVyRGlyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvd2FyZCBhIGRpcmVjdGlvbiB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWFxuICogQHBhcmFtIHtudW1iZXJ9IGRpcllcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckRpckZpbHRlcihkaXJYLCBkaXJZKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBmbG9hdCBkaXJYO1xcbnVuaWZvcm0gZmxvYXQgZGlyWTtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1swXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDEyICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDEyICogc3RyZW5ndGgpICogZGlyWSApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkgKiAwLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkgKiAwLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkgKiAwLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pICogMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBkaXJYOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJYIHx8IDAgfSxcbiAgICAgICAgICAgIGRpclk6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclkgfHwgMCB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclggPSBkaXJYIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclkgPSBkaXJZIHx8IDA7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckRpckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckRpckZpbHRlcjtcblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKSB7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmICh0aGlzLnBhc3NlcyA9PT0gMSkge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0yOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gKHRoaXMucGFzc2VzKyhpKjIpKSAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckRpckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJYO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJYLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsdXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcbn1cblxuQmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckZpbHRlcjtcblxuQmx1ckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcGFzc2VzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzID0gdGhpcy5ibHVyWUZpbHRlci5wYXNzZXMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWEZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1clhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1clhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1clhGaWx0ZXI7XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1clhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSAgTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllGaWx0ZXI7XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSBNYXRoLmFicyh0aGlzLnN0cmVuZ3RoKSAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgU21hcnQgQmx1ciBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNtYXJ0Qmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAqIHBlcmNlbnQpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICBkZWx0YTogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjEsIHk6IDAuMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTbWFydEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNtYXJ0Qmx1ckZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDV4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogYGBganNcbiAqICB2YXIgY29sb3JNYXRyaXggPSBuZXcgUElYSS5Db2xvck1hdHJpeEZpbHRlcigpO1xuICogIGNvbnRhaW5lci5maWx0ZXJzID0gW2NvbG9yTWF0cml4XTtcbiAqICBjb2xvck1hdHJpeC5jb250cmFzdCgyKTtcbiAqIGBgYFxuICogQGF1dGhvciBDbMOpbWVudCBDaGVuZWJhdWx0IDxjbGVtZW50QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvck1hdHJpeEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBtWzI1XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuXFxuICAgIHZlYzQgYyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yID0gKG1bMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gbVs0XTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLmcgPSAobVs1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSBtWzldO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmIgPSAobVsxMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gbVsxNF07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYSA9IChtWzE1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSBtWzE5XTtcXG5cXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJzFmdicsIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yTWF0cml4RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvck1hdHJpeEZpbHRlcjtcblxuXG4vKipcbiAqIFRyYW5zZm9ybXMgY3VycmVudCBtYXRyaXggYW5kIHNldCB0aGUgbmV3IG9uZVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gaWYgdHJ1ZSwgY3VycmVudCBtYXRyaXggYW5kIG1hdHJpeCBhcmUgbXVsdGlwbGllZC4gSWYgZmFsc2UsIGp1c3Qgc2V0IHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIEBwYXJhbSBtYXRyaXhcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9sb2FkTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgbXVsdGlwbHkpXG57XG4gICAgbXVsdGlwbHkgPSAhIW11bHRpcGx5O1xuXG4gICAgdmFyIG5ld01hdHJpeCA9IG1hdHJpeDtcblxuICAgIGlmIChtdWx0aXBseSkge1xuICAgICAgICB0aGlzLl9tdWx0aXBseShuZXdNYXRyaXgsIHRoaXMudW5pZm9ybXMubS52YWx1ZSwgbWF0cml4KTtcbiAgICAgICAgbmV3TWF0cml4ID0gdGhpcy5fY29sb3JNYXRyaXgobmV3TWF0cml4KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBtYXRyaXhcbiAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSBuZXdNYXRyaXg7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDUnc1xuICpcbiAqIEBwYXJhbSBvdXQge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSBhIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0gYiB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIG91dCB7bnVtYmVyW119IChtYXQgNXg0KVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYilcbntcblxuICAgIC8vIFJlZCBDaGFubmVsXG4gICAgb3V0WzBdID0gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYls1XSkgKyAoYVsyXSAqIGJbMTBdKSArIChhWzNdICogYlsxNV0pO1xuICAgIG91dFsxXSA9IChhWzBdICogYlsxXSkgKyAoYVsxXSAqIGJbNl0pICsgKGFbMl0gKiBiWzExXSkgKyAoYVszXSAqIGJbMTZdKTtcbiAgICBvdXRbMl0gPSAoYVswXSAqIGJbMl0pICsgKGFbMV0gKiBiWzddKSArIChhWzJdICogYlsxMl0pICsgKGFbM10gKiBiWzE3XSk7XG4gICAgb3V0WzNdID0gKGFbMF0gKiBiWzNdKSArIChhWzFdICogYls4XSkgKyAoYVsyXSAqIGJbMTNdKSArIChhWzNdICogYlsxOF0pO1xuICAgIG91dFs0XSA9IChhWzBdICogYls0XSkgKyAoYVsxXSAqIGJbOV0pICsgKGFbMl0gKiBiWzE0XSkgKyAoYVszXSAqIGJbMTldKTtcblxuICAgIC8vIEdyZWVuIENoYW5uZWxcbiAgICBvdXRbNV0gPSAoYVs1XSAqIGJbMF0pICsgKGFbNl0gKiBiWzVdKSArIChhWzddICogYlsxMF0pICsgKGFbOF0gKiBiWzE1XSk7XG4gICAgb3V0WzZdID0gKGFbNV0gKiBiWzFdKSArIChhWzZdICogYls2XSkgKyAoYVs3XSAqIGJbMTFdKSArIChhWzhdICogYlsxNl0pO1xuICAgIG91dFs3XSA9IChhWzVdICogYlsyXSkgKyAoYVs2XSAqIGJbN10pICsgKGFbN10gKiBiWzEyXSkgKyAoYVs4XSAqIGJbMTddKTtcbiAgICBvdXRbOF0gPSAoYVs1XSAqIGJbM10pICsgKGFbNl0gKiBiWzhdKSArIChhWzddICogYlsxM10pICsgKGFbOF0gKiBiWzE4XSk7XG4gICAgb3V0WzldID0gKGFbNV0gKiBiWzRdKSArIChhWzZdICogYls5XSkgKyAoYVs3XSAqIGJbMTRdKSArIChhWzhdICogYlsxOV0pO1xuXG4gICAgLy8gQmx1ZSBDaGFubmVsXG4gICAgb3V0WzEwXSA9IChhWzEwXSAqIGJbMF0pICsgKGFbMTFdICogYls1XSkgKyAoYVsxMl0gKiBiWzEwXSkgKyAoYVsxM10gKiBiWzE1XSk7XG4gICAgb3V0WzExXSA9IChhWzEwXSAqIGJbMV0pICsgKGFbMTFdICogYls2XSkgKyAoYVsxMl0gKiBiWzExXSkgKyAoYVsxM10gKiBiWzE2XSk7XG4gICAgb3V0WzEyXSA9IChhWzEwXSAqIGJbMl0pICsgKGFbMTFdICogYls3XSkgKyAoYVsxMl0gKiBiWzEyXSkgKyAoYVsxM10gKiBiWzE3XSk7XG4gICAgb3V0WzEzXSA9IChhWzEwXSAqIGJbM10pICsgKGFbMTFdICogYls4XSkgKyAoYVsxMl0gKiBiWzEzXSkgKyAoYVsxM10gKiBiWzE4XSk7XG4gICAgb3V0WzE0XSA9IChhWzEwXSAqIGJbNF0pICsgKGFbMTFdICogYls5XSkgKyAoYVsxMl0gKiBiWzE0XSkgKyAoYVsxM10gKiBiWzE5XSk7XG5cbiAgICAvLyBBbHBoYSBDaGFubmVsXG4gICAgb3V0WzE1XSA9IChhWzE1XSAqIGJbMF0pICsgKGFbMTZdICogYls1XSkgKyAoYVsxN10gKiBiWzEwXSkgKyAoYVsxOF0gKiBiWzE1XSk7XG4gICAgb3V0WzE2XSA9IChhWzE1XSAqIGJbMV0pICsgKGFbMTZdICogYls2XSkgKyAoYVsxN10gKiBiWzExXSkgKyAoYVsxOF0gKiBiWzE2XSk7XG4gICAgb3V0WzE3XSA9IChhWzE1XSAqIGJbMl0pICsgKGFbMTZdICogYls3XSkgKyAoYVsxN10gKiBiWzEyXSkgKyAoYVsxOF0gKiBiWzE3XSk7XG4gICAgb3V0WzE4XSA9IChhWzE1XSAqIGJbM10pICsgKGFbMTZdICogYls4XSkgKyAoYVsxN10gKiBiWzEzXSkgKyAoYVsxOF0gKiBiWzE4XSk7XG4gICAgb3V0WzE5XSA9IChhWzE1XSAqIGJbNF0pICsgKGFbMTZdICogYls5XSkgKyAoYVsxN10gKiBiWzE0XSkgKyAoYVsxOF0gKiBiWzE5XSk7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHJldHVybiBtIHtudW1iZXJbXX0gKG1hdCA1eDQpIHdpdGggYWxsIHZhbHVlcyBiZXR3ZWVuIDAtMVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2NvbG9yTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICAvLyBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gICAgdmFyIG0gPSBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCk7XG4gICAgbVs0XSAvPSAyNTU7XG4gICAgbVs5XSAvPSAyNTU7XG4gICAgbVsxNF0gLz0gMjU1O1xuICAgIG1bMTldIC89IDI1NTtcblxuICAgIHJldHVybiBtO1xufTtcblxuLyoqXG4gKiBBZGp1c3RzIGJyaWdodG5lc3NcbiAqXG4gKiBAcGFyYW0gYiB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgYnJpZ3RobmVzcyAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icmlnaHRuZXNzID0gZnVuY3Rpb24gKGIsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGIsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIGIsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIGIsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXRyaWNlcyBpbiBncmV5IHNjYWxlc1xuICpcbiAqIEBwYXJhbSBzY2FsZSB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgZ3JleSAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG4vL0FtZXJpY2FuaXplZCBhbGlhc1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyYXlzY2FsZSA9IENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGU7XG5cbi8qKlxuICogU2V0IHRoZSBibGFjayBhbmQgd2hpdGUgbWF0cmljZVxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJsYWNrQW5kV2hpdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGh1ZSBwcm9wZXJ0eSBvZiB0aGUgY29sb3JcbiAqXG4gKiBAcGFyYW0gcm90YXRpb24ge251bWJlcn0gaW4gZGVncmVlc1xuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmh1ZSA9IGZ1bmN0aW9uIChyb3RhdGlvbiwgbXVsdGlwbHkpXG57XG4gICAgcm90YXRpb24gPSAocm90YXRpb24gfHwgMCkgLyAxODAgKiBNYXRoLlBJO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyhyb3RhdGlvbiksXG4gICAgICAgIHNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcblxuICAgIC8vIGx1bWluYW5jZVJlZCwgbHVtaW5hbmNlR3JlZW4sIGx1bWluYW5jZUJsdWVcbiAgICB2YXIgbHVtUiA9IDAuMjEzLCAvLyBvciAwLjMwODZcbiAgICAgICAgbHVtRyA9IDAuNzE1LCAvLyBvciAwLjYwOTRcbiAgICAgICAgbHVtQiA9IDAuMDcyOyAvLyBvciAwLjA4MjBcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoMSAtIGx1bVIpICsgc2luICogKC1sdW1SKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAoLWx1bUcpLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgxIC0gbHVtQiksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKDAuMTQzKSwgbHVtRyArIGNvcyAqICgxIC0gbHVtRykgKyBzaW4gKiAoMC4xNDApLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgtMC4yODMpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgtKDEgLSBsdW1SKSksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKGx1bUcpLCBsdW1CICsgY29zICogKDEgLSBsdW1CKSArIHNpbiAqIChsdW1CKSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKipcbiAqIFNldCB0aGUgY29udHJhc3QgbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGRhcmsgYW5kIGJyaWdodFxuICogSW5jcmVhc2UgY29udHJhc3QgOiBzaGFkb3dzIGRhcmtlciBhbmQgaGlnaGxpZ2h0cyBicmlnaHRlclxuICogRGVjcmVhc2UgY29udHJhc3QgOiBicmluZyB0aGUgc2hhZG93cyB1cCBhbmQgdGhlIGhpZ2hsaWdodHMgZG93blxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdmFsdWUgb2YgdGhlIGNvbnRyYXN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29udHJhc3QgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgdiA9IChhbW91bnQgfHwgMCkgKyAxO1xuICAgIHZhciBvID0gLTEyOCAqICh2IC0gMSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB2LCAwLCAwLCAwLCBvLFxuICAgICAgICAwLCB2LCAwLCAwLCBvLFxuICAgICAgICAwLCAwLCB2LCAwLCBvLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc2F0dXJhdGlvbiBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gY29sb3JzXG4gKiBJbmNyZWFzZSBzYXR1cmF0aW9uIDogaW5jcmVhc2UgY29udHJhc3QsIGJyaWdodG5lc3MsIGFuZCBzaGFycG5lc3NcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgeCA9IChhbW91bnQgfHwgMCkgKiAyIC8gMyArIDE7XG4gICAgdmFyIHkgPSAoKHggLSAxKSAqIC0wLjUpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgeCwgeSwgeSwgMCwgMCxcbiAgICAgICAgeSwgeCwgeSwgMCwgMCxcbiAgICAgICAgeSwgeSwgeCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBEZXNhdHVyYXRlIGltYWdlIChyZW1vdmUgY29sb3IpXG4gKlxuICogQ2FsbCB0aGUgc2F0dXJhdGUgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHRoaXMuc2F0dXJhdGUoLTEpO1xufTtcblxuLyoqXG4gKiBOZWdhdGl2ZSBpbWFnZSAoaW52ZXJzZSBvZiBjbGFzc2ljIHJnYiBtYXRyaXgpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5lZ2F0aXZlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDEsIDEsIDAsIDAsXG4gICAgICAgIDEsIDAsIDEsIDAsIDAsXG4gICAgICAgIDEsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2VwaWEgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2VwaWEgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zOTMsIDAuNzY4OTk5OSwgMC4xODg5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4zNDksIDAuNjg1OTk5OSwgMC4xNjc5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4yNzIsIDAuNTMzOTk5OSwgMC4xMzA5OTk5OSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciBtb3Rpb24gcGljdHVyZSBwcm9jZXNzIGludmVudGVkIGluIDE5MTYgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRlY2huaWNvbG9yID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuOTEyNTI3Nzg5MTQ1NjA4MywgLTAuODU0NTM0NDk3Njk1MTY0NSwgLTAuMDkxNTU1MDg0ODI3NTU1ODUsIDAsIDExLjc5MzYwMzQzNDM3NzMzNyxcbiAgICAgICAgLTAuMzA4NzgzMzM4NTkyODA5NywgMS43NjU4OTA4NTU1NDU4NDI4LCAtMC4xMDYwMTc0MzA3NDcyMjI0NSwgMCwgLTcwLjM1MjA1MTYxNDYxMzk4LFxuICAgICAgICAtMC4yMzExMDMzNzc1NDg2MTYsIC0wLjc1MDE4OTkxOTc0NDAyMTIsIDEuODQ3NTk3ODE2MTA4MTg5LCAwLCAzMC45NTA5NDA4Njk0OTExMzgsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogUG9sYXJvaWQgZmlsdGVyXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnBvbGFyb2lkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuNDM4LCAtMC4wNjIsIC0wLjA2MiwgMCwgMCxcbiAgICAgICAgLTAuMTIyLCAxLjM3OCwgLTAuMTIyLCAwLCAwLFxuICAgICAgICAtMC4wMTYsIC0wLjAxNiwgMS40ODMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRmlsdGVyIHdobyB0cmFuc2Zvcm1zIDogUmVkIC0+IEJsdWUgYW5kIEJsdWUgLT4gUmVkXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRvQkdSID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgcmV2ZXJzYWwgZmlsbSBpbnRyb2R1Y2VkIGJ5IEVhc3RtYW4gS29kYWsgaW4gMTkzNS4gKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmtvZGFjaHJvbWUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS4xMjg1NTgyMzk2NTkzNTI1LCAtMC4zOTY3MzgyMjgzNjAxMzQ4LCAtMC4wMzk5MjU1OTE3MjkyMTc5MywgMCwgNjMuNzI5NTg3NjIxOTY1MDIsXG4gICAgICAgIC0wLjE2NDA0MzM5OTYyMjQ0NjE2LCAxLjA4MzUyNTE1NjYyOTEzMDQsIC0wLjA1NDk4ODA1MTE1NjMzMTMyLCAwLCAyNC43MzI0MDc4OTY3MDYyMDMsXG4gICAgICAgIC0wLjE2Nzg2MDEwNzA2MTU1NzYzLCAtMC41NjAzNDE2Mjc3Njk1MjQ4LCAxLjYwMTQ4NTA3NjE5NjQ5NDMsIDAsIDM1LjYyOTgyODA3NDYwOTQ2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEJyb3duIGRlbGljaW91cyBicm93bmkgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icm93bmkgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC41OTk3MDIzNDk4MTU5NzE1LCAwLjM0NTUzMjQzMDQ4MzkxMjYzLCAtMC4yNzA4Mjk4Njc0NTM4MDQyLCAwLCA0Ny40MzE5Mjg1NTYwMDg3MyxcbiAgICAgICAgLTAuMDM3NzAzMjQ5ODM3NzgzMTU3LCAwLjg2MDk1Nzc1ODc5OTI2NDEsIDAuMTUwNTk1NTIzODg0NTk5MTMsIDAsIC0zNi45Njg0MTQ5ODMxOTEyNyxcbiAgICAgICAgMC4yNDExMzYzNTEyODE1MzMzNSwgLTAuMDc0NDEwMzc5MDg0MjI0OTIsIDAuNDQ5NzIxODIwNjQ4NzcxNTMsIDAsIC03LjU2MjA3NTI3NzU5MTI4MyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFZpbnRhZ2UgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS52aW50YWdlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNjI3OTM0NTYzNTYwNTk5NCwgMC4zMjAyMTgzNDIwODE5MzY3LCAtMC4wMzk2NTQwODIxMTMxMjQ1MywgMCwgOS42NTEyODU4MzUyOTQxMjMsXG4gICAgICAgIDAuMDI1NzgzOTc3MDQ4MDg4NjgsIDAuNjQ0MTE4ODY0NDM3NDc3MSwgMC4wMzI1OTEyNzYxNjE0OTI5NCwgMCwgNy40NjI4MjkxNzY0NzA1OTEsXG4gICAgICAgIDAuMDQ2NjA1NTU1Njc4MjcxOSwgLTAuMDg1MTIzMjk4NzI0Nzg5MSwgMC41MjQxNjQ4MDE4NzAwNDY1LCAwLCA1LjE1OTE5MDU4ODIzNTI5NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGtpbmQgb2YgZ3JhZGllbnQgbWFwLCBidXQgZnVubnkgdG8gcGxheSB3aXRoIVxuICpcbiAqIEBwYXJhbSBkZXNhdHVyYXRpb24ge251bWJlcn1cbiAqIEBwYXJhbSB0b25lZCB7bnVtYmVyfVxuICogQHBhcmFtIGxpZ2h0Q29sb3Ige3N0cmluZ30gKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKiBAcGFyYW0gZGFya0NvbG9yIHtzdHJpbmd9ICAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29sb3JUb25lID0gZnVuY3Rpb24gKGRlc2F0dXJhdGlvbiwgdG9uZWQsIGxpZ2h0Q29sb3IsIGRhcmtDb2xvciwgbXVsdGlwbHkpXG57XG4gICAgZGVzYXR1cmF0aW9uID0gZGVzYXR1cmF0aW9uIHx8IDAuMjtcbiAgICB0b25lZCA9IHRvbmVkIHx8IDAuMTU7XG4gICAgbGlnaHRDb2xvciA9IGxpZ2h0Q29sb3IgfHwgMHhGRkU1ODA7XG4gICAgZGFya0NvbG9yID0gZGFya0NvbG9yIHx8IDB4MzM4MDAwO1xuXG4gICAgdmFyIGxSID0gKChsaWdodENvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsRyA9ICgobGlnaHRDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsQiA9IChsaWdodENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgZFIgPSAoKGRhcmtDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEcgPSAoKGRhcmtDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkQiA9IChkYXJrQ29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC41OSwgMC4xMSwgMCwgMCxcbiAgICAgICAgbFIsIGxHLCBsQiwgZGVzYXR1cmF0aW9uLCAwLFxuICAgICAgICBkUiwgZEcsIGRCLCB0b25lZCwgMCxcbiAgICAgICAgbFIgLSBkUiwgbEcgLSBkRywgbEIgLSBkQiwgMCwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIE5pZ2h0IGVmZmVjdFxuICpcbiAqIEBwYXJhbSBpbnRlbnNpdHkge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uaWdodCA9IGZ1bmN0aW9uIChpbnRlbnNpdHksIG11bHRpcGx5KVxue1xuICAgIGludGVuc2l0eSA9IGludGVuc2l0eSB8fCAwLjE7XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgaW50ZW5zaXR5ICogKCAtMi4wKSwgLWludGVuc2l0eSwgMCwgMCwgMCxcbiAgICAgICAgLWludGVuc2l0eSwgMCwgaW50ZW5zaXR5LCAwLCAwLFxuICAgICAgICAwLCBpbnRlbnNpdHksIGludGVuc2l0eSAqIDIuMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKlxuICogUHJlZGF0b3IgZWZmZWN0XG4gKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgYSBuZXcgaW5kZXBlbnQgb25lXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBob3cgbXVjaCB0aGUgcHJlZGF0b3IgZmVlbHMgaGlzIGZ1dHVyZSB2aWN0aW1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wcmVkYXRvciA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDExLjIyNDEzMDYzMDQ5MzE2NCAqIGFtb3VudCwgLTQuNzk0NDg2OTk5NTExNzE5ICogYW1vdW50LCAtMi44NzQ2MTE4NTQ1NTMyMjI3ICogYW1vdW50LCAwICogYW1vdW50LCAwLjQwMzQyNDM4MjIwOTc3NzgzICogYW1vdW50LFxuICAgICAgICAtMy42MzMwNjk3NTM2NDY4NTA2ICogYW1vdW50LCA5LjE5MzE1NzE5NjA0NDkyMiAqIGFtb3VudCwgLTIuOTUxODEwODM2NzkxOTkyICogYW1vdW50LCAwICogYW1vdW50LCAtMS4zMTYxMzUwNDg4NjYyNzIgKiBhbW91bnQsXG4gICAgICAgIC0zLjIxODQxOTc5MDI2Nzk0NDMgKiBhbW91bnQsIC00LjIzNzUwMzA1MTc1NzgxMjUgKiBhbW91bnQsIDcuNDc2NDQ4MDU5MDgyMDMxICogYW1vdW50LCAwICogYW1vdW50LCAwLjgwNDQ0NTkyMjM3NDcyNTMgKiBhbW91bnQsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBMU0QgZWZmZWN0XG4gKlxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBIb3cgY3JhenkgaXMgeW91ciBlZmZlY3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5sc2QgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMiwgLTAuNCwgMC41LCAwLCAwLFxuICAgICAgICAtMC41LCAyLCAtMC40LCAwLCAwLFxuICAgICAgICAtMC40LCAtMC41LCAzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgb25lXG4gKlxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIGZhbHNlKTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF0cml4IG9mIHRoZSBjb2xvciBtYXRyaXggZmlsdGVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yTWF0cml4RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IFsxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwXVxuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm0udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBsb3dlcnMgdGhlIGNvbG9yIGRlcHRoIG9mIHlvdXIgaW1hZ2UgYnkgdGhlIGdpdmVuIGFtb3VudCwgcHJvZHVjaW5nIGFuIGltYWdlIHdpdGggYSBzbWFsbGVyIHBhbGV0dGUuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yU3RlcEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzdGVwO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGNvbG9yID0gZmxvb3IoY29sb3IgKiBzdGVwKSAvIHN0ZXA7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXA6IHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yU3RlcEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JTdGVwRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBzdGVwcyB0byByZWR1Y2UgdGhlIHBhbGV0dGUgYnkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvclN0ZXBGaWx0ZXIjXG4gICAgICovXG4gICAgc3RlcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbnZvbHV0aW9uRmlsdGVyIGNsYXNzIGFwcGxpZXMgYSBtYXRyaXggY29udm9sdXRpb24gZmlsdGVyIGVmZmVjdC5cbiAqIEEgY29udm9sdXRpb24gY29tYmluZXMgcGl4ZWxzIGluIHRoZSBpbnB1dCBpbWFnZSB3aXRoIG5laWdoYm9yaW5nIHBpeGVscyB0byBwcm9kdWNlIGEgbmV3IGltYWdlLlxuICogQSB3aWRlIHZhcmlldHkgb2YgaW1hZ2UgZWZmZWN0cyBjYW4gYmUgYWNoaWV2ZWQgdGhyb3VnaCBjb252b2x1dGlvbnMsIGluY2x1ZGluZyBibHVycmluZywgZWRnZVxuICogZGV0ZWN0aW9uLCBzaGFycGVuaW5nLCBlbWJvc3NpbmcsIGFuZCBiZXZlbGluZy4gVGhlIG1hdHJpeCBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIFNlZSBodHRwOi8vZG9jcy5naW1wLm9yZy9lbi9wbHVnLWluLWNvbnZtYXRyaXguaHRtbCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICovXG5mdW5jdGlvbiBDb252b2x1dGlvbkZpbHRlcihtYXRyaXgsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyBtZWRpdW1wIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xcbnVuaWZvcm0gZmxvYXQgbWF0cml4WzldO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IGMxMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAtIHRleGVsU2l6ZSk7IC8vIHRvcCBsZWZ0XFxuICAgdmVjNCBjMTIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgY2VudGVyXFxuICAgdmVjNCBjMTMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCByaWdodFxcblxcbiAgIHZlYzQgYzIxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIGxlZnRcXG4gICB2ZWM0IGMyMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7IC8vIG1pZCBjZW50ZXJcXG4gICB2ZWM0IGMyMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCByaWdodFxcblxcbiAgIHZlYzQgYzMxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gbGVmdFxcbiAgIHZlYzQgYzMyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGNlbnRlclxcbiAgIHZlYzQgYzMzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgdGV4ZWxTaXplKTsgLy8gYm90dG9tIHJpZ2h0XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID1cXG4gICAgICAgYzExICogbWF0cml4WzBdICsgYzEyICogbWF0cml4WzFdICsgYzEzICogbWF0cml4WzJdICtcXG4gICAgICAgYzIxICogbWF0cml4WzNdICsgYzIyICogbWF0cml4WzRdICsgYzIzICogbWF0cml4WzVdICtcXG4gICAgICAgYzMxICogbWF0cml4WzZdICsgYzMyICogbWF0cml4WzddICsgYzMzICogbWF0cml4WzhdO1xcblxcbiAgIGdsX0ZyYWdDb2xvci5hID0gYzIyLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWF0cml4OiAgICAgeyB0eXBlOiAnMWZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KSB9LFxuICAgICAgICAgICAgdGV4ZWxTaXplOiAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxIC8gd2lkdGgsIHk6IDEgLyBoZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnZvbHV0aW9uRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb252b2x1dGlvbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnkgPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIENyb3NzIEhhdGNoIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENyb3NzSGF0Y2hGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZmxvYXQgbHVtID0gbGVuZ3RoKHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZC54eSkucmdiKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDEuMCwgMS4wLCAxLjApO1xcblxcbiAgICBpZiAobHVtIDwgMS4wMClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjc1KVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNTApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC4zKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXCJcbiAgICApO1xufVxuXG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDcm9zc0hhdGNoRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDcm9zc0hhdGNoRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIERpc3BsYWNlbWVudEZpbHRlciBjbGFzcyB1c2VzIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHRleHR1cmUgKGNhbGxlZCB0aGUgZGlzcGxhY2VtZW50IG1hcCkgdG8gcGVyZm9ybSBhIGRpc3BsYWNlbWVudCBvZiBhbiBvYmplY3QuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGZpbHRlciB0byBhcHBseSBhbGwgbWFub3Igb2YgY3Jhenkgd2FycGluZyBlZmZlY3RzXG4gKiBDdXJyZW50bHkgdGhlIHIgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHggYW5kIHRoZSBnIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIChtYWtlIHN1cmUgaXRzIGFkZGVkIHRvIHRoZSBzY2VuZSEpXG4gKi9cbmZ1bmN0aW9uIERpc3BsYWNlbWVudEZpbHRlcihzcHJpdGUsIHNjYWxlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG4gICAgc3ByaXRlLnJlbmRlcmFibGUgPSBmYWxzZTtcblxuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZNYXBDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcFNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgbWFwID0gIHRleHR1cmUyRChtYXBTYW1wbGVyLCB2TWFwQ29vcmQpO1xcblxcbiAgIG1hcCAtPSAwLjU7XFxuICAgbWFwLnh5ICo9IHNjYWxlO1xcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyBtYXAueCwgdlRleHR1cmVDb29yZC55ICsgbWFwLnkpKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcFNhbXBsZXI6ICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLnRleHR1cmUgfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9LFxuICAgICAgICAgICAgc2NhbGU6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSwgeTogMSB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcblxuICAgIGlmIChzY2FsZSA9PT0gbnVsbCB8fCBzY2FsZSA9PT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgICAgc2NhbGUgPSAyMDtcbiAgICB9XG5cbiAgICB0aGlzLnNjYWxlID0gbmV3IGNvcmUuUG9pbnQoc2NhbGUsIHNjYWxlKTtcbn1cblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYWNlbWVudEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxhY2VtZW50RmlsdGVyO1xuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS54ID0gdGhpcy5zY2FsZS54ICogKDEvaW5wdXQuZnJhbWUud2lkdGgpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueSA9IHRoaXMuc2NhbGUueSAqICgxL2lucHV0LmZyYW1lLmhlaWdodCk7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gTXVzdCBiZSBwb3dlciBvZiAyIHNpemVkIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5EaXNwbGFjZW1lbnRGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3ZlcyBodHRwOi8vbWF0Z3JvdmVzLmNvbS8gQERvb3JtYXQyM1xuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9mdW4vZG90c2NyZWVuLmpzXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgZG90c2NyZWVuIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0byBiZSBtYWRlIG91dCBvZlxuICogYmxhY2sgYW5kIHdoaXRlIGhhbGZ0b25lIGRvdHMgbGlrZSBhbiBvbGQgcHJpbnRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRG90U2NyZWVuRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG5cXG5mbG9hdCBwYXR0ZXJuKClcXG57XFxuICAgZmxvYXQgcyA9IHNpbihhbmdsZSksIGMgPSBjb3MoYW5nbGUpO1xcbiAgIHZlYzIgdGV4ID0gdlRleHR1cmVDb29yZCAqIGRpbWVuc2lvbnMueHk7XFxuICAgdmVjMiBwb2ludCA9IHZlYzIoXFxuICAgICAgIGMgKiB0ZXgueCAtIHMgKiB0ZXgueSxcXG4gICAgICAgcyAqIHRleC54ICsgYyAqIHRleC55XFxuICAgKSAqIHNjYWxlO1xcbiAgIHJldHVybiAoc2luKHBvaW50LngpICogc2luKHBvaW50LnkpKSAqIDQuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhhdmVyYWdlICogMTAuMCAtIDUuMCArIHBhdHRlcm4oKSksIGNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNjYWxlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvdFNjcmVlbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRG90U2NyZWVuRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIHNjYWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHJhZGl1cyBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWVRpbnRGaWx0ZXIgYXBwbGllcyBhIHZlcnRpY2FsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWVRpbnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbitvZmZzZXQpLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IHN1bSA9IHZlYzQoMC4wKTtcXG5cXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLnJnYiAqIHN1bS5hICogYWxwaGEsIHN1bS5hICogYWxwaGEgKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSAvIDUxMiB9LFxuICAgICAgICAgICAgY29sb3I6IHsgdHlwZTogJ2MnLCB2YWx1ZTogWzAsMCwwXX0sXG4gICAgICAgICAgICBhbHBoYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC43IH0sXG4gICAgICAgICAgICBvZmZzZXQ6IHsgdHlwZTogJzJmJywgdmFsdWU6WzUsIDVdfSxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOjF9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllUaW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWVRpbnRGaWx0ZXI7XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIGNsZWFyKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWVRpbnRGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllUaW50RmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWVRpbnRGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgRHJvcFNoYWRvd0ZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEcm9wU2hhZG93RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIgPSBuZXcgQmx1cllUaW50RmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgdGhpcy5wYWRkaW5nID0gMzA7XG5cbiAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9hbmdsZSA9IDQ1ICogTWF0aC5QSSAvIDE4MDtcbiAgICB0aGlzLl9kaXN0YW5jZSA9IDEwO1xuICAgIHRoaXMuYWxwaGEgPSAwLjc1O1xuICAgIHRoaXMuaGlkZU9iamVjdCA9IGZhbHNlO1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5NVUxUSVBMWTtcbn1cblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRHJvcFNoYWRvd0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRHJvcFNoYWRvd0ZpbHRlcjtcblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIGlmKHRoaXMuX2RpcnR5UG9zaXRpb24pXG4gICAge1xuICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzBdID0gTWF0aC5zaW4odGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVsxXSA9IE1hdGguY29zKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUodGhpcy5ibGVuZE1vZGUpO1xuXG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIGlmKCF0aGlzLmhpZGVPYmplY3QpXG4gICAge1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG4gICAgfVxuXG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBjb2xvcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgY29yZS51dGlscy5yZ2IyaGV4KCB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgPSBjb3JlLnV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYWxwaGE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXN0YW5jZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGRpc3RhbmNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9hbmdsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fYW5nbGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBncmV5c2NhbGVzIHRoZSBwYWxldHRlIG9mIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBHcmF5RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JheTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIHZlYzMoMC4yMTI2KmdsX0ZyYWdDb2xvci5yICsgMC43MTUyKmdsX0ZyYWdDb2xvci5nICsgMC4wNzIyKmdsX0ZyYWdDb2xvci5iKSwgZ3JheSk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXk6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuR3JheUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkdyYXlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JheUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JheUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR3JheUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXkuIDEgd2lsbCBtYWtlIHRoZSBvYmplY3QgYmxhY2sgYW5kIHdoaXRlLCAwIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5HcmF5RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYXk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGZpbHRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmZpbHRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXNjaWlGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2FzY2lpL0FzY2lpRmlsdGVyJyksXG4gICAgQmxvb21GaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2Jsb29tL0Jsb29tRmlsdGVyJyksXG4gICAgQmx1ckZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckZpbHRlcicpLFxuICAgIEJsdXJYRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1cllGaWx0ZXInKSxcbiAgICBCbHVyRGlyRmlsdGVyOiAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRGlyRmlsdGVyJyksXG4gICAgQ29sb3JNYXRyaXhGaWx0ZXI6ICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yTWF0cml4RmlsdGVyJyksXG4gICAgQ29sb3JTdGVwRmlsdGVyOiAgICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yU3RlcEZpbHRlcicpLFxuICAgIENvbnZvbHV0aW9uRmlsdGVyOiAgcmVxdWlyZSgnLi9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlcicpLFxuICAgIENyb3NzSGF0Y2hGaWx0ZXI6ICAgcmVxdWlyZSgnLi9jcm9zc2hhdGNoL0Nyb3NzSGF0Y2hGaWx0ZXInKSxcbiAgICBEaXNwbGFjZW1lbnRGaWx0ZXI6IHJlcXVpcmUoJy4vZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlcicpLFxuICAgIERvdFNjcmVlbkZpbHRlcjogICAgcmVxdWlyZSgnLi9kb3QvRG90U2NyZWVuRmlsdGVyJyksXG4gICAgR3JheUZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2dyYXkvR3JheUZpbHRlcicpLFxuICAgIERyb3BTaGFkb3dGaWx0ZXI6ICAgcmVxdWlyZSgnLi9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXInKSxcbiAgICBJbnZlcnRGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vaW52ZXJ0L0ludmVydEZpbHRlcicpLFxuICAgIE5vaXNlRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ub2lzZS9Ob2lzZUZpbHRlcicpLFxuICAgIFBpeGVsYXRlRmlsdGVyOiAgICAgcmVxdWlyZSgnLi9waXhlbGF0ZS9QaXhlbGF0ZUZpbHRlcicpLFxuICAgIFJHQlNwbGl0RmlsdGVyOiAgICAgcmVxdWlyZSgnLi9yZ2IvUkdCU3BsaXRGaWx0ZXInKSxcbiAgICBTaG9ja3dhdmVGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vc2hvY2t3YXZlL1Nob2Nrd2F2ZUZpbHRlcicpLFxuICAgIFNlcGlhRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9zZXBpYS9TZXBpYUZpbHRlcicpLFxuICAgIFNtYXJ0Qmx1ckZpbHRlcjogICAgcmVxdWlyZSgnLi9ibHVyL1NtYXJ0Qmx1ckZpbHRlcicpLFxuICAgIFRpbHRTaGlmdEZpbHRlcjogICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyJyksXG4gICAgVHdpc3RGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3R3aXN0L1R3aXN0RmlsdGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGludmVydHMgeW91ciBEaXNwbGF5IE9iamVjdHMgY29sb3JzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBJbnZlcnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gZmxvYXQgaW52ZXJ0O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggKHZlYzMoMSktZ2xfRnJhZ0NvbG9yLnJnYikgKiBnbF9GcmFnQ29sb3IuYSwgZ2xfRnJhZ0NvbG9yLnJnYiwgMS4wIC0gaW52ZXJ0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBpbnZlcnQ6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludmVydEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gSW52ZXJ0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhJbnZlcnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBpbnZlcnQuIGAxYCB3aWxsIGZ1bGx5IGludmVydCB0aGUgY29sb3JzLCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkludmVydEZpbHRlciNcbiAgICAgKi9cbiAgICBpbnZlcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9hZGp1c3Qvbm9pc2UuanNcbiAqL1xuXG4vKipcbiAqIEEgTm9pc2UgZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gTm9pc2VGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgbm9pc2U7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgcmFuZCh2ZWMyIGNvKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoY28ueHksIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZmxvYXQgZGlmZiA9IChyYW5kKHZUZXh0dXJlQ29vcmQpIC0gMC41KSAqIG5vaXNlO1xcblxcbiAgICBjb2xvci5yICs9IGRpZmY7XFxuICAgIGNvbG9yLmcgKz0gZGlmZjtcXG4gICAgY29sb3IuYiArPSBkaWZmO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBub2lzZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbk5vaXNlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuTm9pc2VGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTm9pc2VGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE5vaXNlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2lzZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIG5vaXNlIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuTm9pc2VGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMC41XG4gICAgICovXG4gICAgbm9pc2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHBpeGVsYXRlIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciAnYmxvY2t5Jy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUGl4ZWxhdGVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZDtcXG5cXG4gICAgdmVjMiBzaXplID0gZGltZW5zaW9ucy54eSAvIHBpeGVsU2l6ZTtcXG5cXG4gICAgdmVjMiBjb2xvciA9IGZsb29yKCAoIHZUZXh0dXJlQ29vcmQgKiBzaXplICkgKSAvIHNpemUgKyBwaXhlbFNpemUvZGltZW5zaW9ucy54eSAqIDAuNTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb2xvcik7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgICB2YWx1ZTogeyB4OiAxMCwgeTogMTAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBpeGVsYXRlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBQaXhlbGF0ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBhIHBvaW50IHRoYXQgZGVzY3JpYmVzIHRoZSBzaXplIG9mIHRoZSBibG9ja3MuXG4gICAgICogeCBpcyB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGFuZCB5IGlzIHRoZSBoZWlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUGl4ZWxhdGVGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEFuIFJHQiBTcGxpdCBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFJHQlNwbGl0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcmVkO1xcbnVuaWZvcm0gdmVjMiBncmVlbjtcXG51bmlmb3JtIHZlYzIgYmx1ZTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yLnIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyByZWQvZGltZW5zaW9ucy54eSkucjtcXG4gICBnbF9GcmFnQ29sb3IuZyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGdyZWVuL2RpbWVuc2lvbnMueHkpLmc7XFxuICAgZ2xfRnJhZ0NvbG9yLmIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBibHVlL2RpbWVuc2lvbnMueHkpLmI7XFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgZ3JlZW46ICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAtMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGJsdWU6ICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IC0yMCB9IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUkdCU3BsaXRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFJHQlNwbGl0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSR0JTcGxpdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBSZWQgY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgcmVkOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yZWQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmVlbiBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmVlbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEJsdWUgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgYXBwbGllcyBhIHNlcGlhIGVmZmVjdCB0byB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2VwaWFGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc2VwaWE7XFxuXFxuY29uc3QgbWF0MyBzZXBpYU1hdHJpeCA9IG1hdDMoMC4zNTg4LCAwLjcwNDQsIDAuMTM2OCwgMC4yOTkwLCAwLjU4NzAsIDAuMTE0MCwgMC4yMzkyLCAwLjQ2OTYsIDAuMDkxMik7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZ2xfRnJhZ0NvbG9yLnJnYiAqIHNlcGlhTWF0cml4LCBzZXBpYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2VwaWE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2VwaWFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TZXBpYUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXBpYUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2VwaWFGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNlcGlhRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgc2VwaWEuIGAxYCB3aWxsIGFwcGx5IHRoZSBmdWxsIHNlcGlhIGVmZmVjdCwgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TZXBpYUZpbHRlciNcbiAgICAgKi9cbiAgICBzZXBpYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA0eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTaG9ja3dhdmVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XFxudW5pZm9ybSB2ZWMzIHBhcmFtczsgLy8gMTAuMCwgMC44LCAwLjFcXG51bmlmb3JtIGZsb2F0IHRpbWU7XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSB2VGV4dHVyZUNvb3JkO1xcbiAgICB2ZWMyIHRleENvb3JkID0gdXY7XFxuXFxuICAgIGZsb2F0IGRpc3QgPSBkaXN0YW5jZSh1diwgY2VudGVyKTtcXG5cXG4gICAgaWYgKCAoZGlzdCA8PSAodGltZSArIHBhcmFtcy56KSkgJiYgKGRpc3QgPj0gKHRpbWUgLSBwYXJhbXMueikpIClcXG4gICAge1xcbiAgICAgICAgZmxvYXQgZGlmZiA9IChkaXN0IC0gdGltZSk7XFxuICAgICAgICBmbG9hdCBwb3dEaWZmID0gMS4wIC0gcG93KGFicyhkaWZmKnBhcmFtcy54KSwgcGFyYW1zLnkpO1xcblxcbiAgICAgICAgZmxvYXQgZGlmZlRpbWUgPSBkaWZmICAqIHBvd0RpZmY7XFxuICAgICAgICB2ZWMyIGRpZmZVViA9IG5vcm1hbGl6ZSh1diAtIGNlbnRlcik7XFxuICAgICAgICB0ZXhDb29yZCA9IHV2ICsgKGRpZmZVViAqIGRpZmZUaW1lKTtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHRleENvb3JkKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBjZW50ZXI6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9LFxuICAgICAgICAgICAgcGFyYW1zOiB7IHR5cGU6ICd2MycsIHZhbHVlOiB7IHg6IDEwLCB5OiAwLjgsIHo6IDAuMSB9IH0sXG4gICAgICAgICAgICB0aW1lOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaG9ja3dhdmVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNob2Nrd2F2ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNlbnRlciBvZiB0aGUgc2hvY2t3YXZlIGluIG5vcm1hbGl6ZWQgc2NyZWVuIGNvb3Jkcy4gVGhhdCBpc1xuICAgICAqICgwLDApIGlzIHRoZSB0b3AtbGVmdCBhbmQgKDEsMSkgaXMgdGhlIGJvdHRvbSByaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgY2VudGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGFyYW1zIG9mIHRoZSBzaG9ja3dhdmUuIFRoZXNlIG1vZGlmeSB0aGUgbG9vayBhbmQgYmVoYXZpb3Igb2ZcbiAgICAgKiB0aGUgc2hvY2t3YXZlIGFzIGl0IHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIHNob2Nrd2F2ZS4gVGhpcyBjb250cm9scyB0aGUgc3BlZWQgYXQgd2hpY2hcbiAgICAgKiB0aGUgc2hvY2t3YXZlIHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHRpbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRBeGlzRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRBeGlzRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGJsdXI7XFxudW5pZm9ybSBmbG9hdCBncmFkaWVudEJsdXI7XFxudW5pZm9ybSB2ZWMyIHN0YXJ0O1xcbnVuaWZvcm0gdmVjMiBlbmQ7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcbnVuaWZvcm0gdmVjMiB0ZXhTaXplO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcbiAgICB2ZWMyIG5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMyKHN0YXJ0LnkgLSBlbmQueSwgZW5kLnggLSBzdGFydC54KSk7XFxuICAgIGZsb2F0IHJhZGl1cyA9IHNtb290aHN0ZXAoMC4wLCAxLjAsIGFicyhkb3QodlRleHR1cmVDb29yZCAqIHRleFNpemUgLSBzdGFydCwgbm9ybWFsKSkgLyBncmFkaWVudEJsdXIpICogYmx1cjtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgLyB0ZXhTaXplICogcGVyY2VudCAqIHJhZGl1cyk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6ICAgICAgICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxMDAgfSxcbiAgICAgICAgICAgIGdyYWRpZW50Qmx1cjogICB7IHR5cGU6ICcxZicsIHZhbHVlOiA2MDAgfSxcbiAgICAgICAgICAgIHN0YXJ0OiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAsICAgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZW5kOiAgICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogNjAwLCAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBkZWx0YTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAzMCwgICB5OiAzMCB9IH0sXG4gICAgICAgICAgICB0ZXhTaXplOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiB3aW5kb3cuaW5uZXJXaWR0aCwgeTogd2luZG93LmlubmVySGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbn1cblxuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICogVGhpcyBpcyBvdmVycmlkZGVuIGluIHRoZSBYIGFuZCBZIGZpbHRlcnMsIGRvZXMgbm90aGluZyBmb3IgdGhpcyBjbGFzcy5cbiAqXG4gKi9cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAwO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IDA7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WUZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnQgRmlsdGVyLiBNYW5hZ2VzIHRoZSBwYXNzIG9mIGJvdGggYSBUaWx0U2hpZnRYRmlsdGVyIGFuZCBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlciA9IG5ldyBUaWx0U2hpZnRYRmlsdGVyKCk7XG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyID0gbmV3IFRpbHRTaGlmdFlGaWx0ZXIoKTtcbn1cblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0RmlsdGVyO1xuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ncmFkaWVudEJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5zdGFydCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5lbmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRYRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gZHggLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR5IC8gZDtcbn07XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFlGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WUZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAtZHkgLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR4IC8gZDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgdHdpc3QgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHR3aXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVHdpc3RGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgLSBvZmZzZXQ7XFxuICAgZmxvYXQgZGlzdCA9IGxlbmd0aChjb29yZCk7XFxuXFxuICAgaWYgKGRpc3QgPCByYWRpdXMpXFxuICAge1xcbiAgICAgICBmbG9hdCByYXRpbyA9IChyYWRpdXMgLSBkaXN0KSAvIHJhZGl1cztcXG4gICAgICAgZmxvYXQgYW5nbGVNb2QgPSByYXRpbyAqIHJhdGlvICogYW5nbGU7XFxuICAgICAgIGZsb2F0IHMgPSBzaW4oYW5nbGVNb2QpO1xcbiAgICAgICBmbG9hdCBjID0gY29zKGFuZ2xlTW9kKTtcXG4gICAgICAgY29vcmQgPSB2ZWMyKGNvb3JkLnggKiBjIC0gY29vcmQueSAqIHMsIGNvb3JkLnggKiBzICsgY29vcmQueSAqIGMpO1xcbiAgIH1cXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkK29mZnNldCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBvZmZzZXQ6ICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuVHdpc3RGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ud2lzdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUd2lzdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVHdpc3RGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFR3aXN0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgZGVzY3JpYmVzIHRoZSB0aGUgb2Zmc2V0IG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcmFkaXVzIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIHJhZGl1czoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBhbmdsZSBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvLyBydW4gdGhlIHBvbHlmaWxsc1xucmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbi8vIGFkZCBjb3JlIHBsdWdpbnMuXG5jb3JlLmV4dHJhcyAgICAgICAgID0gcmVxdWlyZSgnLi9leHRyYXMnKTtcbmNvcmUuZmlsdGVycyAgICAgICAgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcbmNvcmUuaW50ZXJhY3Rpb24gICAgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9uJyk7XG5jb3JlLmxvYWRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9sb2FkZXJzJyk7XG5jb3JlLm1lc2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9tZXNoJyk7XG5jb3JlLmFjY2Vzc2liaWxpdHkgID0gcmVxdWlyZSgnLi9hY2Nlc3NpYmlsaXR5Jyk7XG5cbi8vIGV4cG9ydCBhIHByZW1hZGUgbG9hZGVyIGluc3RhbmNlXG4vKipcbiAqIEEgcHJlbWFkZSBpbnN0YW5jZSBvZiB0aGUgbG9hZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZGVyIHJlc291cmNlcy5cbiAqXG4gKiBAbmFtZSBsb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcHJvcGVydHkge1BJWEkubG9hZGVycy5Mb2FkZXJ9XG4gKi9cbmNvcmUubG9hZGVyID0gbmV3IGNvcmUubG9hZGVycy5Mb2FkZXIoKTtcblxuLy8gbWl4aW4gdGhlIGRlcHJlY2F0aW9uIGZlYXR1cmVzLlxuT2JqZWN0LmFzc2lnbihjb3JlLCByZXF1aXJlKCcuL2RlcHJlY2F0aW9uJykpO1xuXG4vLyBBbHdheXMgZXhwb3J0IHBpeGkgZ2xvYmFsbHkuXG5nbG9iYWwuUElYSSA9IGNvcmU7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBIb2xkcyBhbGwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhbiBJbnRlcmFjdGlvbiBldmVudFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25EYXRhKClcbntcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IHN0b3JlcyB0aGUgZ2xvYmFsIGNvb3JkcyBvZiB3aGVyZSB0aGUgdG91Y2gvbW91c2UgZXZlbnQgaGFwcGVuZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5nbG9iYWwgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBTcHJpdGUgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBhc3NlZCB0byBhbiBldmVudCBoYW5kbGVyLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbmFsIERPTSBFdmVudCB0aGF0IHdhcyBjYXB0dXJlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gbnVsbDtcbn1cblxuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25EYXRhO1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBzcGVjaWZpZWQgZGlzcGxheU9iamVjdCBmb3IgdGhpcyBJbnRlcmFjdGlvbkRhdGFcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSBsb2NhbCBjb29yZHMgb2ZmXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IHBvaW50KVxuICogQHBhcmFtIFtnbG9iYWxQb3NdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHlvdXIgY3VzdG9tIGdsb2JhbCBjb29yZHMsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCB1c2UgdGhlIGN1cnJlbnQgZ2xvYmFsIGNvb3JkcylcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEludGVyYWN0aW9uRGF0YSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgRGlzcGxheU9iamVjdFxuICovXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmdldExvY2FsUG9zaXRpb24gPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcG9pbnQsIGdsb2JhbFBvcylcbntcbiAgICByZXR1cm4gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UoZ2xvYmFsUG9zIHx8IHRoaXMuZ2xvYmFsLCBwb2ludCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgSW50ZXJhY3Rpb25EYXRhID0gcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKTtcblxuLy8gTWl4IGludGVyYWN0aXZlVGFyZ2V0IGludG8gY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZVxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxuKTtcblxuLyoqXG4gKiBUaGUgaW50ZXJhY3Rpb24gbWFuYWdlciBkZWFscyB3aXRoIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuIEFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBpbnRlcmFjdGl2ZVxuICogaWYgaXRzIGludGVyYWN0aXZlIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZVxuICogVGhpcyBtYW5hZ2VyIGFsc28gc3VwcG9ydHMgbXVsdGl0b3VjaC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdD10cnVlXSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBtYW5hZ2VyIGF1dG9tYXRpY2FsbHkgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeT0xMF0ge251bWJlcn0gRnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyLCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgaW50ZXJhY3Rpb24gbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGJlIHByZXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0ID0gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0IDogdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFzIHRoaXMgZnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZCBtb3JlIG9mdGVuLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSA9IG9wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW91c2UgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9XG4gICAgICovXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IGRhdGEgb2JqZWN0IHRvIGhhbmRsZSBhbGwgdGhlIGV2ZW50IHRyYWNraW5nL2Rpc3BhdGNoaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5ldmVudERhdGEgPSB7XG4gICAgICAgIHN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgIGRhdGE6IHRoaXMubW91c2UsXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGxpdHRsZSBpbnRlcmFjdGl2ZURhdGEgcG9vbCAhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YVtdfVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBlbGVtZW50IHRvIGJpbmQgdG8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhhdmUgZXZlbnRzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGRvbSBlbGVtZW50P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcblxuICAgIC8vdGhpcyB3aWxsIG1ha2UgaXQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGJpbmQgYWxsIHRoZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VVcCA9IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IHRoaXMucHJvY2Vzc01vdXNlVXAuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IHRoaXMucHJvY2Vzc01vdXNlRG93bi5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gdGhpcy5wcm9jZXNzTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU91dCA9IHRoaXMub25Nb3VzZU91dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gdGhpcy5vblRvdWNoU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gdGhpcy5wcm9jZXNzVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoRW5kID0gdGhpcy5vblRvdWNoRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSB0aGlzLnByb2Nlc3NUb3VjaEVuZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IHRoaXMub25Ub3VjaE1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSB0aGlzLnByb2Nlc3NUb3VjaE1vdmUuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxhc3QgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNzcyBzdHlsZSBvZiB0aGUgY3Vyc29yIHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9ICdpbmhlcml0JztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNhY2hlZCB2YXJcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcblxuICAgIHRoaXMuc2V0VGFyZ2V0RWxlbWVudCh0aGlzLnJlbmRlcmVyLnZpZXcsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbik7XG59XG5cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UvdG91Y2ggZXZlbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZVxuICogb3RoZXIgRE9NIGVsZW1lbnRzIG9uIHRvcCBvZiB0aGUgcmVuZGVyZXJzIENhbnZhcyBlbGVtZW50LiBXaXRoIHRoaXMgeW91J2xsIGJlIGJhbGUgdG8gZGVsZXRlZ2F0ZVxuICogYW5vdGhlciBET00gZWxlbWVudCB0byByZWNlaXZlIHRob3NlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9IHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUSGUgcmVzb2x1dGlvbiBvZiB0aGUgbmV3IGVsZW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBjYW52YXMpLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXRUYXJnZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJlc29sdXRpb24pXG57XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgdGhlIERPTSBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAgICB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgICB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICAgICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICAgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgICAgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgICAgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgdGhlIERPTSBldmVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICcnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzLlxuICogSW52b2tlZCBieSBhIHRocm90dGxlZCB0aWNrZXIgdXBkYXRlIGZyb21cbiAqIHtAbGluayBQSVhJLnRpY2tlci5zaGFyZWR9LlxuICpcbiAqIEBwYXJhbSBkZWx0YVRpbWUge251bWJlcn1cbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHRoaXMuX2RlbHRhVGltZSArPSBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZGVsdGFUaW1lIDwgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWx0YVRpbWUgPSAwO1xuXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBtb3ZlIHRoZSBtb3VzZSB0aGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gZGZvbmUgdXNpbmcgdGhlIG1vdXNlIG1vdmUhXG4gICAgaWYodGhpcy5kaWRNb3ZlKVxuICAgIHtcbiAgICAgICAgdGhpcy5kaWRNb3ZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ET1xufTtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgZGlzcGxheSBvYmplY3QgaW4gcXVlc3Rpb25cbiAqIEBwYXJhbSBldmVudFN0cmluZyB7c3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGUuZywgbW91c2Vkb3duKVxuICogQHBhcmFtIGV2ZW50RGF0YSB7b2JqZWN0fSB0aGUgZXZlbnQgZGF0YSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApXG57XG4gICAgaWYoIWV2ZW50RGF0YS5zdG9wcGVkKVxuICAgIHtcbiAgICAgICAgZXZlbnREYXRhLnRhcmdldCA9IGRpc3BsYXlPYmplY3Q7XG4gICAgICAgIGV2ZW50RGF0YS50eXBlID0gZXZlbnRTdHJpbmc7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5lbWl0KCBldmVudFN0cmluZywgZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10oIGV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXBzIHggYW5kIHkgY29vcmRzIGZyb20gYSBET00gb2JqZWN0IGFuZCBtYXBzIHRoZW0gY29ycmVjdGx5IHRvIHRoZSBwaXhpIHZpZXcuIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBwb2ludC5cbiAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgdGhlIERPTSBlbGVtZW50IGNvdWxkIGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCBhbnl3aGVyZSBvbiB0aGUgc2NyZWVuLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW5cbiAqIEBwYXJhbSAge251bWJlcn0geCAgICAgdGhlIHggY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICogQHBhcmFtICB7bnVtYmVyfSB5ICAgICB0aGUgeSBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUubWFwUG9zaXRpb25Ub1BvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgeCwgeSApXG57XG4gICAgdmFyIHJlY3QgPSB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBwb2ludC54ID0gKCAoIHggLSByZWN0LmxlZnQgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC53aWR0aCAgLyByZWN0LndpZHRoICApICkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgcG9pbnQueSA9ICggKCB5IC0gcmVjdC50b3AgICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuaGVpZ2h0IC8gcmVjdC5oZWlnaHQgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVzIGEgbmVhdCB3YXkgb2YgY3Jhd2xpbmcgdGhyb3VnaCB0aGUgc2NlbmUgZ3JhcGggYW5kIHJ1bm5pbmcgYSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gYWxsIGludGVyYWN0aXZlIG9iamVjdHMgaXQgZmluZHMuXG4gKiBJdCB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIGhpdCB0ZXN0aW5nIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlIGhpdCBhY3Jvc3MgaW4gdGhlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IGlzIHRlc3RlZCBmb3IgY29sbGlzaW9uXG4gKiBAcGFyYW0gIHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IGRpc3BsYXlPYmplY3QgdGhlIGRpc3BsYXlPYmplY3QgdGhhdCB3aWxsIGJlIGhpdCB0ZXN0IChyZWN1cmNzaXZseSBjcmF3bHMgaXRzIGNoaWxkcmVuKVxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBpbnRlcmFjdGl2ZSBvYmplY3QuIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBoaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtib29sZWFufSBoaXRUZXN0IHRoaXMgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3RzIGluc2lkZSBzaG91bGQgYmUgaGl0IHRlc3QgYWdhaW5zdCB0aGUgcG9pbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiB0aGUgZGlzcGxheU9iamVjdCBoaXQgdGhlIHBvaW50XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0ludGVyYWN0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBkaXNwbGF5T2JqZWN0LCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZSlcbntcbiAgICBpZighZGlzcGxheU9iamVjdCB8fCAhZGlzcGxheU9iamVjdC52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRvb2sgYSBsaXR0bGUgd2hpbGUgdG8gcmV3b3JrIHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5ISBCdXQgbm93IGl0IGlzIGRvbmUgYW5kIG5pY2UgYW5kIG9wdGltaXNlZC4gXl9eXG4gICAgLy8gXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdyBsb29wIHRocm91Z2ggYWxsIG9iamVjdHMgYW5kIHRoZW4gb25seSBoaXQgdGVzdCB0aGUgb2JqZWN0cyBpdCBIQVMgdG8sIG5vdCBhbGwgb2YgdGhlbS4gTVVDSCBmYXN0ZXIuLlxuICAgIC8vIEFuIG9iamVjdCB3aWxsIGJlIGhpdCB0ZXN0IGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICAvLyBcbiAgICAvLyAxOiBJdCBpcyBpbnRlcmFjdGl2ZS5cbiAgICAvLyAyOiBJdCBiZWxvbmdzIHRvIGEgcGFyZW50IHRoYXQgaXMgaW50ZXJhY3RpdmUgQU5EIG9uZSBvZiB0aGUgcGFyZW50cyBjaGlsZHJlbiBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIC8vIFxuICAgIC8vIEFzIGFub3RoZXIgbGl0dGxlIG9wdGltaXNhdGlvbiBvbmNlIGFuIGludGVyYWN0aXZlIG9iamVjdCBoYXMgYmVlbiBoaXQgd2UgY2FuIGNhcnJ5IG9uIHRocm91Z2ggdGhlIHNjZW5lZ3JhcGgsIGJ1dCB3ZSBrbm93IHRoYXQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGhpdHMhIFNvIHdlIGNhbiBhdm9pZCBleHRyYSBoaXQgdGVzdHNcbiAgICAvLyBBIGZpbmFsIG9wdGltaXNhdGlvbiBpcyB0aGF0IGFuIG9iamVjdCBpcyBub3QgaGl0IHRlc3QgZGlyZWN0bHkgaWYgYSBjaGlsZCBoYXMgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICBcbiAgICB2YXIgaGl0ID0gZmFsc2UsXG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gaW50ZXJhY3RpdmUgPSBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlIHx8IGludGVyYWN0aXZlO1xuXG4gICAgLy8gaWYgdGhlIGRpc3BsYXlvYmplY3QgaGFzIGEgaGl0QXJlYSwgdGhlbiBpdCBkb2VzIG5vdCBuZWVkIHRvIGhpdFRlc3QgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAqKiBGUkVFIFRJUCAqKiEgSWYgYW4gb2JqZWN0IGlzIG5vdCBpbnRlcmFjdHRpdmUgb3IgaGFzIG5vIGJ1dHRvbnMgaW4gaXQgKHN1Y2ggYXMgYSBnYW1lIHNjZW5lISkgc2V0IGludGVyYWN0aXZlQ2hpbGRyZW4gdG8gZmFsc2UgZm9yIHRoYXQgZGlzcGxheU9iamVjdC5cbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgcGl4aSB0byBjb21wbGV0bHkgaWdub3JlIGFuZCBieXBhc3MgY2hlY2tpbmcgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmVDaGlsZHJlbilcbiAgICB7ICAgICAgIFxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aC0xOyBpID49IDA7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGltZSB0byBnZXQgcmVjdXJzaXZlLi4gaWYgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpZiBzb210aGluZyBpcyBoaXQuLlxuICAgICAgICAgICAgaWYoIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHBvaW50LCBjaGlsZHJlbltpXSwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmVQYXJlbnQpIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55IG1vcmUgb2JqZWN0cyBpbiB0aGlzIGNvbnRhaW5lciBhcyB3ZSB3ZSBub3cga25vdyB0aGUgcGFyZW50IGhhcyBiZWVuIGhpdFxuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGludGVyYWN0aXZlICwgdGhhdCBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGl0IHdhcyBhY3R1YWxseSBpbnRlcmFjdGl2ZSBhbmQgbm90IGp1c3QgdGhlIGNoaWxkIG9mIGFuIGludGVyYWN0aXZlIG9iamVjdC4gXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnl0aGluZyBlbHNlLiBXZSBzdGlsbCBuZWVkIHRvIHJ1biB0aHJvdWdoIGFsbCBvYmplY3RzLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBoaXQgdGVzdHMuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uaW50ZXJhY3RpdmUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoaXRUZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm8gcG9pbnQgcnVubmluZyB0aGlzIGlmIHRoZSBpdGVtIGlzIG5vdCBpbnRlcmFjdGl2ZSBvciBkb2VzIG5vdCBoYXZlIGFuIGludGVyYWN0aXZlIHBhcmVudC5cbiAgICBpZihpbnRlcmFjdGl2ZSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBoaXQgdGVzdGluZyAoYXMgaW4gd2UgaGF2ZSBubyBoaXQgYW55IG9iamVjdHMgeWV0KVxuICAgICAgICAvLyBXZSBhbHNvIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGl0IHRlc3RpbmcgaWYgb25jZSBvZiB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4gaGFzIGFscmVhZHkgYmVlbiBoaXQhXG4gICAgICAgIGlmKGhpdFRlc3QgJiYgIWhpdClcbiAgICAgICAgeyAgXG4gICAgICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0aGlzLl90ZW1wUG9pbnQpO1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuaGl0QXJlYS5jb250YWlucyggdGhpcy5fdGVtcFBvaW50LngsIHRoaXMuX3RlbXBQb2ludC55ICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnVuYyhkaXNwbGF5T2JqZWN0LCBoaXQpOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIFxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyBwcmVzc2VkIGRvd25cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZURvd24sIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIGRvd24gY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VEb3duID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuICAgIFxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3RbIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bicgXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGRvd24nIDogJ21vdXNlZG93bicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcmVsZWFzZWRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VVcCwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgdXAgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlVXAgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG4gICAgdmFyIGlzRG93biA9ICBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXAnIDogJ21vdXNldXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRjbGljaycgOiAnY2xpY2snLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cG91dHNpZGUnIDogJ21vdXNldXBvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiB0aGUgbW91c2UgbW92aW5nXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmRpZE1vdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU1vdmUsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE8gQlVHIGZvciBwYXJlbnRzIGluZXJhY3RpdmUgb2JqZWN0IChib3JkZXIgb3JkZXIgaXNzdWUpXG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2Vtb3ZlJywgdGhpcy5ldmVudERhdGEpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dChkaXNwbGF5T2JqZWN0LCBoaXQpO1xufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYmVpbmcgbW92ZWQgb3V0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICAvLyBUT0RPIG9wdGltaXplIGJ5IG5vdCBjaGVjayBFVkVSWSBUSU1FISBtYXliZSBoYWxmIGFzIG9mdGVuPyAvL1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgZmFsc2UgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG92ZXIvb3V0IGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgaWYoIWRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5T2JqZWN0LmJ1dHRvbk1vZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gZGlzcGxheU9iamVjdC5kZWZhdWx0Q3Vyc29yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgdGhpcy5ldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgc3RhcnRlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBzdGFydGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG4gICAgICAgIC8vVE9ETyBQT09MXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaFN0YXJ0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoc3RhcnQnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGVuZHMgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggZW5kaW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIC8vVE9ETyB0aGlzIHNob3VsZCBiZSBwYXNzZWQgYWxvbmcuLiBubyBzZXRcbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hFbmQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgZW5kIG9mIGEgdG91Y2ggYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoRW5kID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0YXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgbW92ZWQgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIG1vdmluZyBhY3Jvc3MgdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaE1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaGl0ID0gaGl0O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNobW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogR3JhYnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaEV2ZW50IHtFdmVudERhdGF9IFRoZSB0b3VjaCBldmVudCB3ZSBuZWVkIHRvIHBhaXIgd2l0aCBhbiBpbnRlcmFjdGlvbkRhdGEgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRUb3VjaERhdGEgPSBmdW5jdGlvbiAodG91Y2hFdmVudClcbntcbiAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnBvcCgpO1xuXG4gICAgaWYoIXRvdWNoRGF0YSlcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcbiAgICB9XG5cbiAgICB0b3VjaERhdGEuaWRlbnRpZmllciA9IHRvdWNoRXZlbnQuaWRlbnRpZmllcjtcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdG91Y2hEYXRhLmdsb2JhbCwgdG91Y2hFdmVudC5jbGllbnRYLCB0b3VjaEV2ZW50LmNsaWVudFkgKTtcblxuICAgIGlmKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC54ID0gdG91Y2hEYXRhLmdsb2JhbC54IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnkgPSB0b3VjaERhdGEuZ2xvYmFsLnkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgfVxuXG4gICAgdG91Y2hFdmVudC5nbG9iYWxYID0gdG91Y2hEYXRhLmdsb2JhbC54O1xuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWSA9IHRvdWNoRGF0YS5nbG9iYWwueTtcblxuICAgIHJldHVybiB0b3VjaERhdGE7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hEYXRhIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX0gVGhlIHRvdWNoIGRhdGEgb2JqZWN0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5Ub3VjaERhdGEgPSBmdW5jdGlvbiAoIHRvdWNoRGF0YSApXG57XG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnB1c2goIHRvdWNoRGF0YSApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgaW50ZXJhY3Rpb24gbWFuYWdlclxuICpcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMubW91c2UgPSBudWxsO1xuXG4gICAgdGhpcy5ldmVudERhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZVVwID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gbnVsbDtcblxuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaEVuZCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMuX3RlbXBQb2ludCA9IG51bGw7XG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGludGVyYWN0aW9ucyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSW50ZXJhY3Rpb25EYXRhOiAgICByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpLFxuICAgIEludGVyYWN0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9JbnRlcmFjdGlvbk1hbmFnZXInKSxcbiAgICBpbnRlcmFjdGl2ZVRhcmdldDogIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxufTtcbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgaW50ZXJhY3RpdmUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmludGVyYWN0aW9uLmludGVyYWN0aXZlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBpbnRlcmFjdGl2ZVRhcmdldCA9IHtcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGJ1dHRvbk1vZGU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmVDaGlsZHJlbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGRlZmF1bHRDdXJzb3I6ICdwb2ludGVyJyxcblxuICAgIC8vIHNvbWUgaW50ZXJuYWwgY2hlY2tzLi5cblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb3ZlcjogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90b3VjaERvd246IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyYWN0aXZlVGFyZ2V0O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuLi9leHRyYXMnKSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5cbmZ1bmN0aW9uIHBhcnNlKHJlc291cmNlLCB0ZXh0dXJlKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgaW5mbyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXTtcbiAgICB2YXIgY29tbW9uID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XG5cbiAgICBkYXRhLmZvbnQgPSBpbmZvLmdldEF0dHJpYnV0ZSgnZmFjZScpO1xuICAgIGRhdGEuc2l6ZSA9IHBhcnNlSW50KGluZm8uZ2V0QXR0cmlidXRlKCdzaXplJyksIDEwKTtcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBwYXJzZUludChjb21tb24uZ2V0QXR0cmlidXRlKCdsaW5lSGVpZ2h0JyksIDEwKTtcbiAgICBkYXRhLmNoYXJzID0ge307XG5cbiAgICAvL3BhcnNlIGxldHRlcnNcbiAgICB2YXIgbGV0dGVycyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NoYXInKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdpZCcpLCAxMCk7XG5cbiAgICAgICAgdmFyIHRleHR1cmVSZWN0ID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3gnKSwgMTApICsgdGV4dHVyZS5mcmFtZS54LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3knKSwgMTApICsgdGV4dHVyZS5mcmFtZS55LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSwgMTApXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICB4T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneG9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB5T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneW9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB4QWR2YW5jZTogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hhZHZhbmNlJyksIDEwKSxcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9LFxuICAgICAgICAgICAgdGV4dHVyZTogbmV3IGNvcmUuVGV4dHVyZSh0ZXh0dXJlLmJhc2VUZXh0dXJlLCB0ZXh0dXJlUmVjdClcblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vcGFyc2Uga2VybmluZ3NcbiAgICB2YXIga2VybmluZ3MgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXJuaW5nJyk7XG4gICAgZm9yIChpID0gMDsgaSA8IGtlcm5pbmdzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdmaXJzdCcpLCAxMCk7XG4gICAgICAgIHZhciBzZWNvbmQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ3NlY29uZCcpLCAxMCk7XG4gICAgICAgIHZhciBhbW91bnQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2Ftb3VudCcpLCAxMCk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tzZWNvbmRdLmtlcm5pbmdbZmlyc3RdID0gYW1vdW50O1xuICAgIH1cblxuICAgIHJlc291cmNlLmJpdG1hcEZvbnQgPSBkYXRhO1xuXG4gICAgLy8gSSdtIGxlYXZpbmcgdGhpcyBhcyBhIHRlbXBvcmFyeSBmaXggc28gd2UgY2FuIHRlc3QgdGhlIGJpdG1hcCBmb250cyBpbiB2M1xuICAgIC8vIGJ1dCBpdCdzIHZlcnkgbGlrZWx5IHRvIGNoYW5nZVxuICAgIGV4dHJhcy5CaXRtYXBUZXh0LmZvbnRzW2RhdGEuZm9udF0gPSBkYXRhO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhIG9yIG5vdCB4bWwgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzWG1sKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBpZiBub3QgYml0bWFwIGZvbnQgZGF0YSwgdXNpbmcgc29tZSBzaWxseSBkdWNrLXR5cGluZ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF0uZ2V0QXR0cmlidXRlKCdmYWNlJykgPT09IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4bWxVcmwgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsKTtcblxuICAgICAgICBpZiAoeG1sVXJsID09PSAnLicpIHtcbiAgICAgICAgICAgIHhtbFVybCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmFzZVVybCAmJiB4bWxVcmwpIHtcbiAgICAgICAgICAgIC8vIGlmIGJhc2V1cmwgaGFzIGEgdHJhaWxpbmcgc2xhc2ggdGhlbiBhZGQgb25lIHRvIHhtbFVybCBzbyB0aGUgcmVwbGFjZSB3b3JrcyBiZWxvd1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVVybC5jaGFyQXQodGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEpID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYmFzZVVybCBmcm9tIHhtbFVybFxuICAgICAgICAgICAgeG1sVXJsID0geG1sVXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiB4bWxVcmwgbm93LCBpdCBuZWVkcyBhIHRyYWlsaW5nIHNsYXNoLiBFbnN1cmUgdGhhdCBpdCBkb2VzIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZW1wdHkuXG4gICAgICAgIGlmICh4bWxVcmwgJiYgeG1sVXJsLmNoYXJBdCh4bWxVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4dHVyZVVybCA9IHhtbFVybCArIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKVswXS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKTtcbiAgICAgICAgaWYgKGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKSB7XG4gICAgICAgICAgICAvL3JldXNlIGV4aXN0aW5nIHRleHR1cmVcbiAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBsb2FkIHRoZSB0ZXh0dXJlIGZvciB0aGUgZm9udFxuICAgICAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCB0ZXh0dXJlVXJsLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCByZXMudGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGxvYWRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmxvYWRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTG9hZGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlcicpLFxuXG4gICAgLy8gcGFyc2Vyc1xuICAgIGJpdG1hcEZvbnRQYXJzZXI6ICAgcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXI6ICByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgdGV4dHVyZVBhcnNlcjogICAgICByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBSZXNvdXJjZTogICAgICAgICAgIHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlXG59O1xuIiwidmFyIFJlc291cmNlTG9hZGVyID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJyksXG4gICAgdGV4dHVyZVBhcnNlciA9IHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyID0gcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIGJpdG1hcEZvbnRQYXJzZXIgPSByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKTtcblxuLyoqXG4gKlxuICogVGhlIG5ldyBsb2FkZXIsIGV4dGVuZHMgUmVzb3VyY2UgTG9hZGVyIGJ5IENoYWQgRW5nbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2VuZ2xlcmNqL3Jlc291cmNlLWxvYWRlclxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbG9hZGVyID0gUElYSS5sb2FkZXI7IC8vIHBpeGkgZXhwb3NlcyBhIHByZW1hZGUgaW5zdGFuY2UgZm9yIHlvdSB0byB1c2UuXG4gKiAvL29yXG4gKiB2YXIgbG9hZGVyID0gbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIoKTsgLy8geW91IGNhbiBhbHNvIGNyZWF0ZSB5b3VyIG93biBpZiB5b3Ugd2FudFxuICpcbiAqIGxvYWRlci5hZGQoJ2J1bm55JyxcImRhdGEvYnVubnkucG5nXCIpO1xuICpcbiAqIGxvYWRlci5vbmNlKCdjb21wbGV0ZScsb25Bc3NldHNMb2FkZWQpO1xuICpcbiAqIGxvYWRlci5sb2FkKCk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuUmVzb3VyY2VMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmxvYWRlcnNcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpXG57XG4gICAgUmVzb3VyY2VMb2FkZXIuY2FsbCh0aGlzLCBiYXNlVXJsLCBjb25jdXJyZW5jeSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IExvYWRlci5fcGl4aU1pZGRsZXdhcmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy51c2UoTG9hZGVyLl9waXhpTWlkZGxld2FyZVtpXSgpKTtcbiAgICB9XG59XG5cbkxvYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuTG9hZGVyLl9waXhpTWlkZGxld2FyZSA9IFtcbiAgICAvLyBwYXJzZSBhbnkgYmxvYiBpbnRvIG1vcmUgdXNhYmxlIG9iamVjdHMgKGUuZy4gSW1hZ2UpXG4gICAgUmVzb3VyY2VMb2FkZXIubWlkZGxld2FyZS5wYXJzaW5nLmJsb2IsXG4gICAgLy8gcGFyc2UgYW55IEltYWdlIG9iamVjdHMgaW50byB0ZXh0dXJlc1xuICAgIHRleHR1cmVQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIHNwcml0ZXNoZWV0UGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBiaXRtYXBGb250UGFyc2VyXG5dO1xuXG5Mb2FkZXIuYWRkUGl4aU1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLnB1c2goZm4pO1xufTtcblxuLy8gQWRkIGN1c3RvbSBleHRlbnRpb25zXG52YXIgUmVzb3VyY2UgPSBSZXNvdXJjZUxvYWRlci5SZXNvdXJjZTtcblxuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSgnZm50JywgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpO1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSwgaXRzIG5vdCBqc29uLCBvciBpdCBpc24ndCBzcHJpdGVzaGVldCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNKc29uIHx8ICFyZXNvdXJjZS5kYXRhLmZyYW1lcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByb3V0ZSA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKSk7XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybCggcmVzb3VyY2UudXJsICk7XG5cbiAgICAgICAgLy8gbG9hZCB0aGUgaW1hZ2UgZm9yIHRoaXMgc2hlZXRcbiAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCByb3V0ZSArICcvJyArIHJlc291cmNlLmRhdGEubWV0YS5pbWFnZSwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzID0ge307XG5cbiAgICAgICAgICAgIHZhciBmcmFtZXMgPSByZXNvdXJjZS5kYXRhLmZyYW1lcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmcmFtZXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBmcmFtZXNbaV0uZnJhbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVjdClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaW0gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC5oLCByZWN0LncpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC53LCByZWN0LmgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS50cmltbWVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmltID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnggLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnkgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLncgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLmggLyByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsaXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQhXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBzaXplLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUueSAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoIC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0IC89IHJlc29sdXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXNbaV0gPSBuZXcgY29yZS5UZXh0dXJlKHJlcy50ZXh0dXJlLmJhc2VUZXh0dXJlLCBzaXplLCBzaXplLmNsb25lKCksIHRyaW0sIGZyYW1lc1tpXS5yb3RhdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbaV0gPSByZXNvdXJjZS50ZXh0dXJlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZSBpZiB0aGUgZGF0YSBpcyBhbiBJbWFnZSBvYmplY3RcbiAgICAgICAgaWYgKHJlc291cmNlLmRhdGEgJiYgcmVzb3VyY2UuaXNJbWFnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGJhc2VUZXh0dXJlID0gbmV3IGNvcmUuQmFzZVRleHR1cmUocmVzb3VyY2UuZGF0YSwgbnVsbCwgY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwocmVzb3VyY2UudXJsKSk7XG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IHJlc291cmNlLnVybDtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmUgPSBuZXcgY29yZS5UZXh0dXJlKGJhc2VUZXh0dXJlKTtcbiAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1Y250aW9uc1xuICAgICAgICAgICAgY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSBiYXNlVGV4dHVyZTtcbiAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSByZXNvdXJjZS50ZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICB0ZW1wUG9seWdvbiA9IG5ldyBjb3JlLlBvbHlnb24oKTtcblxuLyoqXG4gKiBCYXNlIG1lc2ggY2xhc3NcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRvIHVzZVxuICogQHBhcmFtIFt2ZXJ0aWNlc10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdmVydGljZXNcbiAqIEBwYXJhbSBbdXZzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB1dnNcbiAqIEBwYXJhbSBbaW5kaWNlc10ge1VpbnQxNkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBpbmRpY2VzXG4gKiBAcGFyYW0gW2RyYXdNb2RlXSB7bnVtYmVyfSB0aGUgZHJhd01vZGUsIGNhbiBiZSBhbnkgb2YgdGhlIE1lc2guRFJBV19NT0RFUyBjb25zdHNcbiAqL1xuZnVuY3Rpb24gTWVzaCh0ZXh0dXJlLCB2ZXJ0aWNlcywgdXZzLCBpbmRpY2VzLCBkcmF3TW9kZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gdXZzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEsIDAsXG4gICAgICAgIDEsIDEsXG4gICAgICAgIDAsIDFdKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEwMCwgMCxcbiAgICAgICAgMTAwLCAxMDAsXG4gICAgICAgIDAsIDEwMF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICAvLyAgVE9ETyBhdXRvIGdlbmVyYXRlIHRoaXMgYmFzZWQgb24gZHJhdyBtb2RlIVxuICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXMgfHwgbmV3IFVpbnQxNkFycmF5KFswLCAxLCAzLCAyXSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBNZXNoIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gU2V0IHRvIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVtb3ZlIGFueSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRyaWFuZ2xlcyBpbiBjYW52YXMgbW9kZSBhcmUgYXV0b21hdGljYWxseSBhbnRpYWxpYXNlZCwgdXNlIHRoaXMgdmFsdWUgdG8gZm9yY2UgdHJpYW5nbGVzIHRvIG92ZXJsYXAgYSBiaXQgd2l0aCBlYWNoIG90aGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2F5IHRoZSBNZXNoIHNob3VsZCBiZSBkcmF3biwgY2FuIGJlIGFueSBvZiB0aGUge0BsaW5rIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVN9IGNvbnN0c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuZHJhd01vZGUgPSBkcmF3TW9kZSB8fCBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSDtcblxuICAgIC8vIHJ1biB0ZXh0dXJlIHNldHRlcjtcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBtZXNoIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5NZXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2g7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2g7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc2gucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkubWVzaC5NZXNoI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5tZXNoKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLm1lc2gucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4IHwgMCwgdHJhbnNmb3JtLnR5IHwgMCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHgsIHRyYW5zZm9ybS50eSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoKGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMoY29udGV4dCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIFRyaWFuZ2xlIE1lc2ggbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2ggPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoIC8gMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkgKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgsIChpbmRleCArIDIpLCAoaW5kZXggKyA0KSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIHRyaWFuZ2xlIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDMpXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXgwID0gaW5kaWNlc1tpXSAqIDIsIGluZGV4MSA9IGluZGljZXNbaSArIDFdICogMiwgaW5kZXgyID0gaW5kaWNlc1tpICsgMl0gKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4Mik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyBvbmUgb2YgdGhlIHRyaWFuZ2xlcyB0aGF0IGZvcm0gdGhpcyBNZXNoXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdmVydGljZXMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHZlcnRpY2VzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gdXZzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB1dnMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSBpbmRleDAge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDEge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgyIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlID0gZnVuY3Rpb24gKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpXG57XG4gICAgdmFyIHRleHR1cmVTb3VyY2UgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZTtcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aDtcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXgwXSwgeDEgPSB2ZXJ0aWNlc1tpbmRleDFdLCB4MiA9IHZlcnRpY2VzW2luZGV4Ml07XG4gICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgwICsgMV0sIHkxID0gdmVydGljZXNbaW5kZXgxICsgMV0sIHkyID0gdmVydGljZXNbaW5kZXgyICsgMV07XG5cbiAgICB2YXIgdTAgPSB1dnNbaW5kZXgwXSAqIHRleHR1cmVXaWR0aCwgdTEgPSB1dnNbaW5kZXgxXSAqIHRleHR1cmVXaWR0aCwgdTIgPSB1dnNbaW5kZXgyXSAqIHRleHR1cmVXaWR0aDtcbiAgICB2YXIgdjAgPSB1dnNbaW5kZXgwICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MSA9IHV2c1tpbmRleDEgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYyID0gdXZzW2luZGV4MiArIDFdICogdGV4dHVyZUhlaWdodDtcblxuICAgIGlmICh0aGlzLmNhbnZhc1BhZGRpbmcgPiAwKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmdYID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgcGFkZGluZ1kgPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciBjZW50ZXJYID0gKHgwICsgeDEgKyB4MikgLyAzO1xuICAgICAgICB2YXIgY2VudGVyWSA9ICh5MCArIHkxICsgeTIpIC8gMztcblxuICAgICAgICB2YXIgbm9ybVggPSB4MCAtIGNlbnRlclg7XG4gICAgICAgIHZhciBub3JtWSA9IHkwIC0gY2VudGVyWTtcblxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgwID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkwID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgLy9cblxuICAgICAgICBub3JtWCA9IHgxIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MSAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgxID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkxID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgbm9ybVggPSB4MiAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTIgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MiA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MiA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cblxuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGNvbnRleHQuY2xpcCgpO1xuXG4gICAgLy8gQ29tcHV0ZSBtYXRyaXggdHJhbnNmb3JtXG4gICAgdmFyIGRlbHRhID0gICh1MCAqIHYxKSAgICAgICsgKHYwICogdTIpICAgICAgKyAodTEgKiB2MikgICAgICAtICh2MSAqIHUyKSAgICAgIC0gKHYwICogdTEpICAgICAgLSAodTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQSA9ICh4MCAqIHYxKSAgICAgICsgKHYwICogeDIpICAgICAgKyAoeDEgKiB2MikgICAgICAtICh2MSAqIHgyKSAgICAgIC0gKHYwICogeDEpICAgICAgLSAoeDAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQiA9ICh1MCAqIHgxKSAgICAgICsgKHgwICogdTIpICAgICAgKyAodTEgKiB4MikgICAgICAtICh4MSAqIHUyKSAgICAgIC0gKHgwICogdTEpICAgICAgLSAodTAgKiB4Mik7XG4gICAgdmFyIGRlbHRhQyA9ICh1MCAqIHYxICogeDIpICsgKHYwICogeDEgKiB1MikgKyAoeDAgKiB1MSAqIHYyKSAtICh4MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB4MikgLSAodTAgKiB4MSAqIHYyKTtcbiAgICB2YXIgZGVsdGFEID0gKHkwICogdjEpICAgICAgKyAodjAgKiB5MikgICAgICArICh5MSAqIHYyKSAgICAgIC0gKHYxICogeTIpICAgICAgLSAodjAgKiB5MSkgICAgICAtICh5MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFFID0gKHUwICogeTEpICAgICAgKyAoeTAgKiB1MikgICAgICArICh1MSAqIHkyKSAgICAgIC0gKHkxICogdTIpICAgICAgLSAoeTAgKiB1MSkgICAgICAtICh1MCAqIHkyKTtcbiAgICB2YXIgZGVsdGFGID0gKHUwICogdjEgKiB5MikgKyAodjAgKiB5MSAqIHUyKSArICh5MCAqIHUxICogdjIpIC0gKHkwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHkyKSAtICh1MCAqIHkxICogdjIpO1xuXG4gICAgY29udGV4dC50cmFuc2Zvcm0oZGVsdGFBIC8gZGVsdGEsIGRlbHRhRCAvIGRlbHRhLFxuICAgICAgICBkZWx0YUIgLyBkZWx0YSwgZGVsdGFFIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQyAvIGRlbHRhLCBkZWx0YUYgLyBkZWx0YSk7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlU291cmNlLCAwLCAwKTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBmbGF0IE1lc2hcbiAqXG4gKiBAcGFyYW0gTWVzaCB7UElYSS5tZXNoLk1lc2h9IFRoZSBNZXNoIHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUucmVuZGVyTWVzaEZsYXQgPSBmdW5jdGlvbiAoTWVzaClcbntcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICB2YXIgdmVydGljZXMgPSBNZXNoLnZlcnRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aC8yO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgZm9yICh2YXIgaT0xOyBpIDwgbGVuZ3RoLTI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkqMjtcblxuICAgICAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleF0sICAgeDEgPSB2ZXJ0aWNlc1tpbmRleCsyXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleCs0XTtcbiAgICAgICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgrMV0sIHkxID0gdmVydGljZXNbaW5kZXgrM10sIHkyID0gdmVydGljZXNbaW5kZXgrNV07XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVwZGF0ZUZyYW1lID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBtZXNoIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5NZXNoLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICghdGhpcy5fY3VycmVudEJvdW5kcykge1xuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1pblkgPSBJbmZpbml0eTtcblxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IG47IGkgKz0gMikge1xuICAgICAgICAgICAgdmFyIHJhd1ggPSB2ZXJ0aWNlc1tpXSwgcmF3WSA9IHZlcnRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciB4ID0gKGEgKiByYXdYKSArIChjICogcmF3WSkgKyB0eDtcbiAgICAgICAgICAgIHZhciB5ID0gKGQgKiByYXdZKSArIChiICogcmF3WCkgKyB0eTtcblxuICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcblxuICAgICAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG4gICAgICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5YID09PSAtSW5maW5pdHkgfHwgbWF4WSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIG1lc2guIFdvcmtzIG9ubHkgZm9yIFRSSUFOR0xFX01FU0hcbiAqXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4gKi9cbk1lc2gucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKSB7XG4gICAgaWYgKCF0aGlzLmdldEJvdW5kcygpLmNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgcG9pbnRzID0gdGVtcFBvbHlnb24ucG9pbnRzO1xuICAgIHZhciBpLCBsZW47XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUykge1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICAgICAgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgLy9UT0RPOiBpbmxpbmUgdGhpcy5cbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Mykge1xuICAgICAgICAgICAgdmFyIGluZDAgPSBpbmRpY2VzW2ldKjIsIGluZDEgPSBpbmRpY2VzW2krMV0qMiwgaW5kMiA9IGluZGljZXNbaSsyXSoyO1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaW5kMF07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpbmQwKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaW5kMV07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpbmQxKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaW5kMl07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpbmQyKzFdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Nikge1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaSsyXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2krM107XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpKzRdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaSs1XTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEaWZmZXJlbnQgZHJhd2luZyBidWZmZXIgbW9kZXMgc3VwcG9ydGVkXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSFxuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gKi9cbk1lc2guRFJBV19NT0RFUyA9IHtcbiAgICBUUklBTkdMRV9NRVNIOiAwLFxuICAgIFRSSUFOR0xFUzogMVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG5cbi8qKlxuICogVGhlIFBsYW5lIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIFBsYW5lID0gbmV3IFBJWEkuUGxhbmUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgUGxhbmUuXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNYIC0gVGhlIG51bWJlciBveCB4IHNlZ21lbnRzXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNZIC0gVGhlIG51bWJlciBvZiB5IHNlZ21lbnRzXG4gKlxuICovXG5mdW5jdGlvbiBQbGFuZSh0ZXh0dXJlLCBzZWdtZW50c1gsIHNlZ21lbnRzWSlcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgUGxhbmUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWdtZW50c1ggPSAgc2VnbWVudHNYIHx8IDEwO1xuICAgIHRoaXMuc2VnbWVudHNZID0gc2VnbWVudHNZIHx8IDEwO1xuXG4gICAgdGhpcy5kcmF3TW9kZSA9IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVM7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUGxhbmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKTtcblBsYW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsYW5lO1xubW9kdWxlLmV4cG9ydHMgPSBQbGFuZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblBsYW5lLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciB0b3RhbCA9IHRoaXMuc2VnbWVudHNYICogdGhpcy5zZWdtZW50c1k7XG4gICAgdmFyIHZlcnRzID0gW107XG4gICAgdmFyIGNvbG9ycyA9IFtdO1xuICAgIHZhciB1dnMgPSBbXTtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuXG4gIC8vICB0ZXh0dXJlLndpZHRoID0gODAwIHRleHR1cmUud2lkdGggfHwgODAwO1xuIC8vICAgdGV4dHVyZS5oZWlnaHQgPSA4MDAvL3RleHR1cmUuaGVpZ2h0IHx8IDgwMDtcblxuICAgIHZhciBzZWdtZW50c1hTdWIgPSB0aGlzLnNlZ21lbnRzWCAtIDE7XG4gICAgdmFyIHNlZ21lbnRzWVN1YiA9IHRoaXMuc2VnbWVudHNZIC0gMTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB2YXIgc2l6ZVggPSB0ZXh0dXJlLndpZHRoIC8gc2VnbWVudHNYU3ViO1xuICAgIHZhciBzaXplWSA9IHRleHR1cmUuaGVpZ2h0IC8gc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcblxuICAgICAgICB2YXIgeCA9IChpICUgdGhpcy5zZWdtZW50c1gpO1xuICAgICAgICB2YXIgeSA9ICggKGkgLyB0aGlzLnNlZ21lbnRzWCApIHwgMCApO1xuXG5cbiAgICAgICAgdmVydHMucHVzaCgoeCAqIHNpemVYKSxcbiAgICAgICAgICAgICAgICAgICAoeSAqIHNpemVZKSk7XG5cbiAgICAgICAgLy8gdGhpcyB3b3JrcyBmb3IgcmVjdGFuZ3VsYXIgdGV4dHVyZXMuIFxuICAgICAgICB1dnMucHVzaCh0ZXh0dXJlLl91dnMueDAgKyAodGV4dHVyZS5fdXZzLngxIC0gdGV4dHVyZS5fdXZzLngwKSAqICh4IC8gKHRoaXMuc2VnbWVudHNYLTEpKSwgdGV4dHVyZS5fdXZzLnkwICsgKHRleHR1cmUuX3V2cy55My10ZXh0dXJlLl91dnMueTApICogKHkvICh0aGlzLnNlZ21lbnRzWS0xKSkpO1xuICAgICAgfVxuXG4gICAgLy8gIGNvbnNcblxuICAgIHZhciB0b3RhbFN1YiA9IHNlZ21lbnRzWFN1YiAqIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFN1YjsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHhwb3MgPSBpICUgc2VnbWVudHNYU3ViO1xuICAgICAgICB2YXIgeXBvcyA9IChpIC8gc2VnbWVudHNYU3ViICkgfCAwO1xuXG5cbiAgICAgICAgdmFyICB2YWx1ZSA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTIgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuICAgICAgICB2YXIgIHZhbHVlMyA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWU0ID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMyk7XG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZTIsIHZhbHVlNCwgdmFsdWUzKTtcbiAgICB9XG5cblxuICAgIC8vY29uc29sZS5sb2coaW5kaWNlcylcbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0cyk7XG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHV2cyk7XG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvbG9ycyk7XG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBsYW5lLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUGxhbmUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSByb3BlIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIHJvcGUgPSBuZXcgUElYSS5Sb3BlKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIHJvcGUuXG4gKiBAcGFyYW0ge1BJWEkuUG9pbnRbXX0gcG9pbnRzIC0gQW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuUG9pbnR9IG9iamVjdHMgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAqXG4gKi9cbmZ1bmN0aW9uIFJvcGUodGV4dHVyZSwgcG9pbnRzKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfSBBbiBhcnJheSBvZiBwb2ludHMgdGhhdCBkZXRlcm1pbmUgdGhlIHJvcGVcbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBvZiB2ZXJ0aWNlcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IFRoZSBXZWJHTCBVdnMgb2YgdGhlIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBjb21wb25lbnRzXG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSByb3BlIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICAgdGhpcy5yZWZyZXNoKCk7XG59XG5cblxuLy8gY29uc3RydWN0b3JcblJvcGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNZXNoLnByb3RvdHlwZSk7XG5Sb3BlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvcGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvcGU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5Sb3BlLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICAvLyBpZiB0b28gbGl0dGxlIHBvaW50cywgb3IgdGV4dHVyZSBoYXNuJ3QgZ290IFVWcyBzZXQgeWV0IGp1c3QgbW92ZSBvbi5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEgfHwgIXRoaXMuX3RleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cbiAgICB2YXIgdGV4dHVyZVV2cyA9IHRoaXMuX3RleHR1cmUuX3V2cztcbiAgICB2YXIgb2Zmc2V0ID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MCk7XG4gICAgdmFyIGZhY3RvciA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDIgLSB0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkyIC0gdGV4dHVyZVV2cy55MCk7XG5cbiAgICB1dnNbMF0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzFdID0gMCArIG9mZnNldC55O1xuICAgIHV2c1syXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgIGNvbG9yc1swXSA9IDE7XG4gICAgY29sb3JzWzFdID0gMTtcblxuICAgIGluZGljZXNbMF0gPSAwO1xuICAgIGluZGljZXNbMV0gPSAxO1xuXG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCBhbW91bnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcbiAgICAgICAgLy8gdGltZSB0byBkbyBzb21lIHNtYXJ0IGRyYXdpbmchXG4gICAgICAgIGFtb3VudCA9IGkgLyAodG90YWwtMSk7XG5cbiAgICAgICAgdXZzW2luZGV4XSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCsxXSA9IDAgKyBvZmZzZXQueTtcblxuICAgICAgICB1dnNbaW5kZXgrMl0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBjb2xvcnNbaW5kZXhdID0gMTtcbiAgICAgICAgY29sb3JzW2luZGV4KzFdID0gMTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGluZGV4O1xuICAgICAgICBpbmRpY2VzW2luZGV4ICsgMV0gPSBpbmRleCArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFJvcGUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9pbnQgPSBwb2ludHNbMF07XG4gICAgdmFyIG5leHRQb2ludDtcbiAgICB2YXIgcGVycFggPSAwO1xuICAgIHZhciBwZXJwWSA9IDA7XG5cbiAgICAvLyB0aGlzLmNvdW50IC09IDAuMjtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCByYXRpbywgcGVycExlbmd0aCwgbnVtO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG5cbiAgICAgICAgaWYgKGkgPCBwb2ludHMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50c1tpKzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwWSA9IC0obmV4dFBvaW50LnggLSBsYXN0UG9pbnQueCk7XG4gICAgICAgIHBlcnBYID0gbmV4dFBvaW50LnkgLSBsYXN0UG9pbnQueTtcblxuICAgICAgICByYXRpbyA9ICgxIC0gKGkgLyAodG90YWwtMSkpKSAqIDEwO1xuXG4gICAgICAgIGlmIChyYXRpbyA+IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhdGlvID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBMZW5ndGggPSBNYXRoLnNxcnQocGVycFggKiBwZXJwWCArIHBlcnBZICogcGVycFkpO1xuICAgICAgICBudW0gPSB0aGlzLl90ZXh0dXJlLmhlaWdodCAvIDI7IC8vKDIwICsgTWF0aC5hYnMoTWF0aC5zaW4oKGkgKyB0aGlzLmNvdW50KSAqIDAuMykgKiA1MCkgKSogcmF0aW87XG4gICAgICAgIHBlcnBYIC89IHBlcnBMZW5ndGg7XG4gICAgICAgIHBlcnBZIC89IHBlcnBMZW5ndGg7XG5cbiAgICAgICAgcGVycFggKj0gbnVtO1xuICAgICAgICBwZXJwWSAqPSBudW07XG5cbiAgICAgICAgdmVydGljZXNbaW5kZXhdID0gcG9pbnQueCArIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsxXSA9IHBvaW50LnkgKyBwZXJwWTtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMl0gPSBwb2ludC54IC0gcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzNdID0gcG9pbnQueSAtIHBlcnBZO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IHBvaW50O1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5tZXNoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1lc2g6ICAgICAgICAgICByZXF1aXJlKCcuL01lc2gnKSxcbiAgICBQbGFuZTogICAgICAgICAgIHJlcXVpcmUoJy4vUGxhbmUnKSxcbiAgICBSb3BlOiAgICAgICAgICAgcmVxdWlyZSgnLi9Sb3BlJyksXG4gICAgTWVzaFJlbmRlcmVyOiAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFJlbmRlcmVyJyksXG4gICAgTWVzaFNoYWRlcjogICAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFNoYWRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgTWVzaCA9IHJlcXVpcmUoJy4uL01lc2gnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBNZXNoUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL01lc2hSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDE1MDAwKTtcblxuICAgIC8vVE9ETyB0aGlzIGNvdWxkIGJlIGEgc2luZ2xlIGJ1ZmZlciBzaGFyZWQgYW1vbmdzdCBhbGwgcmVuZGVyZXJzIGFzIHdlIHJldXNlIHRoaXMgc2V0IHVwIGluIG1vc3QgcmVuZGVyZXJzXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCAxNTAwMDsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59XG5cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hSZW5kZXJlcjtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoJywgTWVzaFJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIGlmKCFtZXNoLl92ZXJ0ZXhCdWZmZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9pbml0V2ViR0wobWVzaCk7XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcixcbiAgICAgICAgZ2wgPSByZW5kZXJlci5nbCxcbiAgICAgICAgdGV4dHVyZSA9IG1lc2guX3RleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIHNoYWRlciA9IG1lc2guc2hhZGVyOy8vIHx8IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuXG4gICAgdmFyIGRyYXdNb2RlID0gbWVzaC5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0ggPyBnbC5UUklBTkdMRV9TVFJJUCA6IGdsLlRSSUFOR0xFUztcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKG1lc2guYmxlbmRNb2RlKTtcblxuICAgIC8vVE9ETyBjYWNoZSBjdXN0b20gc3RhdGUuLlxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHNoYWRlci5zaGFkZXJzW2dsLmlkXSB8fCBzaGFkZXIuZ2V0U2hhZGVyKHJlbmRlcmVyKTsvLyA6IHNoYWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXgudmFsdWUgPSBtZXNoLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXgudmFsdWUgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSBtZXNoLndvcmxkQWxwaGE7XG5cbiAgICBzaGFkZXIuc3luY1VuaWZvcm1zKCk7XG5cbiAgICBpZiAoIW1lc2guZGlydHkpXG4gICAge1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgbWVzaC52ZXJ0aWNlcyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG1lc2guaW5kaWNlcyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgbWVzaC5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb250IG5lZWQgdG8gdXBsb2FkIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgfVxuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGRyYXdNb2RlLCBtZXNoLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG5cbn07XG5cbi8qKlxuICogUHJlcGFyZXMgYWxsIHRoZSBidWZmZXJzIHRvIHJlbmRlciB0aGlzIG1lc2hcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuX2luaXRXZWJHTCA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIC8vIGJ1aWxkIHRoZSBzdHJpcCFcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgbWVzaC5fdmVydGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5faW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl91dkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG5cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICBpZihtZXNoLmNvbG9ycyl7XG4gICAgICAgIG1lc2guX2NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl9jb2xvckJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLmNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbn07XG5cblxuLyoqXG4gKiBFbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IG1lc2ggcmVuZGVyZXIuXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBcblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBNZXNoIHJlbmRlcmVyXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgV2ViR0wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgY29yZS5TaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogYWxwaGEgOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVZlcnRleFBvc2l0aW9uOjAsXG4gICAgICAgICAgICBhVGV4dHVyZUNvb3JkOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cbk1lc2hTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNoYWRlci5wcm90b3R5cGUpO1xuTWVzaFNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoU2hhZGVyO1xuXG5jb3JlLlNoYWRlck1hbmFnZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2hTaGFkZXInLCBNZXNoU2hhZGVyKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3NpZ25cblxuaWYgKCFNYXRoLnNpZ24pXG57XG4gICAgTWF0aC5zaWduID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCA9ICt4O1xuICAgICAgICBpZiAoeCA9PT0gMCB8fCBpc05hTih4KSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPiAwID8gMSA6IC0xO1xuICAgIH07XG59XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9vYmplY3QtYXNzaWduXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5cbmlmICghT2JqZWN0LmFzc2lnbilcbntcbiAgICBPYmplY3QuYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xufVxuIiwicmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL3JlcXVlc3RBbmltYXRpb25GcmFtZScpO1xucmVxdWlyZSgnLi9NYXRoLnNpZ24nKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTU3OTY3MVxuLy8gaHR0cDovL3VwZGF0ZXMuaHRtbDVyb2Nrcy5jb20vMjAxMi8wNS9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUtQVBJLW5vdy13aXRoLXN1Yi1taWxsaXNlY29uZC1wcmVjaXNpb25cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RpbWhhbGwvNDA3ODYxNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0ZpbmFuY2lhbC1UaW1lcy9wb2x5ZmlsbC1zZXJ2aWNlL3RyZWUvbWFzdGVyL3BvbHlmaWxscy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcblxuLy8gRXhwZWN0ZWQgdG8gYmUgdXNlZCB3aXRoIEJyb3dzZXJmaXlcbi8vIEJyb3dzZXJpZnkgYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZSB1c2Ugb2YgYGdsb2JhbGAgYW5kIHBhc3NlcyB0aGVcbi8vIGNvcnJlY3QgcmVmZXJlbmNlIG9mIGBnbG9iYWxgLCBgc2VsZmAsIGFuZCBmaW5hbGx5IGB3aW5kb3dgXG5cbi8vIERhdGUubm93XG5pZiAoIShEYXRlLm5vdyAmJiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lKSkge1xuICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcbn1cblxuLy8gcGVyZm9ybWFuY2Uubm93XG5pZiAoIShnbG9iYWwucGVyZm9ybWFuY2UgJiYgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdykpIHtcbiAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIWdsb2JhbC5wZXJmb3JtYW5jZSkge1xuICAgICAgICBnbG9iYWwucGVyZm9ybWFuY2UgPSB7fTtcbiAgICB9XG4gICAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgfTtcbn1cblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xudmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xuXG5mb3IodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8XG4gICAgICAgIGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xufVxuXG5pZiAoIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCksXG4gICAgICAgICAgICBkZWxheSA9IDE2ICsgbGFzdFRpbWUgLSBjdXJyZW50VGltZTtcblxuICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgIH07XG59XG5cbmlmICghZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xufVxuIl19 //# sourceMappingURL=pixi.js.map diff --git a/bin/pixi.js.map b/bin/pixi.js.map index 1d72f43..3256814 100644 --- a/bin/pixi.js.map +++ b/bin/pixi.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi.js","sourceRoot":"./","sourcesContent":[]} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi.js","sourceRoot":"./","sourcesContent":[]} \ No newline at end of file diff --git a/bin/pixi.min.js b/bin/pixi.min.js index db31e4a..ee1b45b 100644 --- a/bin/pixi.min.js +++ b/bin/pixi.min.js @@ -1,11 +1,11 @@ !function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&this.texture.uploadData(null,t,e),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=i.fromData(t,null,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a.unbind(),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a.unbind(),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t||null)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){return this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate(),this},i.prototype.unbind=function(){return this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null),this},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=X(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function P(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function D(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},X=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},Y="function"==typeof setImmediate&&setImmediate,z=Y?function(t){Y(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=Y?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=X(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return P(t,1,e)},N.log=D("log"),N.dir=D("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return P.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return D.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",P=/^xn--/,D=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r); g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v,p=""),d=decodeURIComponent(c),f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,P=M.length;P>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var D=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(D.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=D.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var X=i.indexOf("#");-1!==X&&(this.hash=i.substr(X),i=i.slice(0,X));var Y=i.indexOf("?");if(-1!==Y?(this.search=i.substr(Y),this.query=i.substr(Y+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,Y)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","gl-matrix":"git+https://github.com/toji/gl-matrix.git","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirtyTransform=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":56,"../textures/RenderTexture":100,"../utils":107,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.transform=new a,this.position=this.transform.position,this.scale=this.transform.scale,this.pivot=this.transform.pivot,this.skew=this.transform.skew,this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),t("./Transform")),h=new n.Matrix,u={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i;var l=function(t){this.doc=t,this.x=0,this.y=0};Object.defineProperties(l.prototype,{x:{get:function(){return this.doc.position.x},set:function(t){this.doc.position.x=t,this.doc.dirtyTransform=!0}},y:{get:function(){return this.doc.posiiton.y},set:function(t){this.doc.position.y=t,this.doc.dirtyTransform=!0}}}),Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return h.tx=-i.x,h.ty=-i.y,n.render(this,h),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":56,"../textures/RenderTexture":100,"./Transform":41,eventemitter3:25}],41:[function(t,e,r){function i(){this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.position=new n.Point(0),this.scale=new n.Point(1,1),this.pivot=new n.Point(0),this.skew=new n.Point(0),this.rotation=0,this.dirty=!0}var n=t("../math");i.prototype.constructor=i,i.prototype.updateTransform=function(t){var e=t.worldTransform,r=this.worldTransform,i=this.localTransform;return i.a=this._cr*this.scale.x,i.b=this._sr*this.scale.x,i.c=-this._sr*this.scale.y,i.d=this._cr*this.scale.y,i.tx=this.position.x-(this.pivot.x*i.a+this.pivot.y*i.c),i.ty=this.position.y-(this.pivot.x*i.b+this.pivot.y*i.d),r.a=i.a*e.a+i.b*e.c,r.b=i.a*e.b+i.b*e.d,r.c=i.c*e.a+i.d*e.c,r.d=i.c*e.b+i.d*e.d,r.tx=i.tx*e.a+i.ty*e.c+e.tx,r.ty=i.tx*e.b+i.ty*e.d+e.ty,this.dirty=!1,!0},e.exports=i},{"../math":56}],42:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils":107,"./WebGLGraphicsData":45,"./shaders/PrimitiveShader":46,"./utils/buildCircle":47,"./utils/buildComplexPoly":48,"./utils/buildLine":49,"./utils/buildPoly":50,"./utils/buildRectangle":51,"./utils/buildRoundedRectangle":52,earcut:24}],45:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],46:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],47:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":107,"./buildLine":49}],48:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":107,"./buildLine":49}],49:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":56,"../../../utils":107}],50:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":107}],51:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":107,"./buildLine":49}],52:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":107,"./buildLine":49}],53:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),BaseRenderTexture:t("./textures/BaseRenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":42,"./graphics/GraphicsData":43,"./graphics/webgl/GraphicsRenderer":44,"./math":56,"./particles/ParticleContainer":62,"./particles/webgl/ParticleRenderer":64,"./renderers/canvas/CanvasRenderer":67,"./renderers/canvas/utils/CanvasBuffer":68,"./renderers/canvas/utils/CanvasGraphics":69,"./renderers/webgl/WebGLRenderer":73,"./renderers/webgl/filters/AbstractFilter":74,"./renderers/webgl/filters/FXAAFilter":75,"./renderers/webgl/filters/SpriteMaskFilter":76,"./renderers/webgl/managers/ShaderManager":80,"./renderers/webgl/managers/WebGLManager":82,"./renderers/webgl/shaders/Shader":85,"./renderers/webgl/utils/ObjectRenderer":88,"./renderers/webgl/utils/RenderTarget":90,"./sprites/Sprite":94,"./sprites/webgl/SpriteRenderer":95,"./text/Text":97,"./textures/BaseRenderTexture":98,"./textures/BaseTexture":99,"./textures/RenderTexture":100,"./textures/Texture":101,"./textures/TextureUvs":102,"./textures/VideoBaseTexture":103,"./ticker":105,"./utils":107,"pixi-gl-core":1}],54:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":55}],55:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],56:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":54,"./Point":55,"./shapes/Circle":57,"./shapes/Ellipse":58,"./shapes/Polygon":59,"./shapes/Rectangle":60,"./shapes/RoundedRectangle":61}],57:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":60}],58:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":60}],59:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":55}],60:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],62:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"./ParticleBuffer":63,"./ParticleShader":65}],65:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{ -uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":86}],66:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,transform:{worldTransform:new o.Matrix},worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":56,"../utils":107,eventemitter3:25}],67:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":56,"../../utils":107,"../SystemRenderer":66,"./utils/CanvasMaskManager":70}],68:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],69:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],70:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":69}],71:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":86}],75:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\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\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\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)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":74}],76:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":56,"./AbstractFilter":74}],77:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":82}],78:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":107}],86:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":85}],87:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],88:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":82}],89:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],90:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=(t("pixi-gl-core").GLTexture,t("pixi-gl-core").GLFramebuffer),s=t("./StencilMaskStack"),a=function(t,e,r,a,h,u){this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=h||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.defaultFrame=new PIXI.Rectangle,this.destinationFrame=null,this.sourceFrame=null,this.stencilBuffer=null,this.stencilMaskStack=new s,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=a||n.SCALE_MODES.DEFAULT,this.root=u,this.frameBuffer=o.createRGBA(t,100,100),this.root?this.frameBuffer.framebuffer=null:this.texture=this.frameBuffer.texture,this.resize(e,r)};a.prototype.constructor=a,e.exports=a,a.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},a.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},a.prototype.activate=function(t,e){var r=this.gl;this.frameBuffer.bind(),this.destinationFrame=t||this.destinationFrame||this.defaultFrame,this.sourceFrame=e||this.sourceFrame||t,this.calculateProjection(this.destinationFrame,this.sourceFrame),this.transform&&this.projectionMatrix.append(this.transform),this.destinationFrame!==this.sourceFrame?(r.enable(r.SCISSOR_TEST),r.scissor(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)):r.disable(r.SCISSOR_TEST),r.viewport(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)},a.prototype.calculateProjection=function(t,e){var r=this.projectionMatrix;e=e||t,r.identity(),this.root?(r.a=1/t.width*2,r.d=-1/t.height*2,r.tx=-1-e.x*r.a,r.ty=1-e.y*r.d):(r.a=1/t.width*2,r.d=1/t.height*2,r.tx=-1-e.x*r.a,r.ty=-1-e.y*r.d)},a.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.defaultFrame.width=t,this.defaultFrame.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},a.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":56,"../../../utils":107,"./StencilMaskStack":91,"pixi-gl-core":1}],91:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],92:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],93:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],94:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.transform.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0); -}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],97:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=t,this.height=e,this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(t){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear(!1,t))},i.prototype.renderWebGL=function(t,e,r,i,n){if(this.valid){if(n=void 0!==n?n:!0,this.textureBuffer.transform=r,this.textureBuffer.activate(),e.worldAlpha=1,n){e.worldTransform.identity(),e.currentBounds=null;var o,s,a=e.children;for(o=0,s=a.length;s>o;++o)a[o].updateTransform()}p.width=t.height,p.height=t.width;var h=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.textureBuffer.activate(t,p),console.log(e),this.renderer.renderDisplayObject(e,this.textureBuffer,i),this.renderer.filterManager=h}},i.prototype.renderCanvas=function(t,e,r,i,n){if(this.valid){n=!!n;var o=c;o.identity(),r&&o.append(r),o.tx+=t.x,o.ty+=t.y;var s=e.worldTransform;e.worldTransform=o,e.worldAlpha=1;var a,h,u=e.children;for(a=0,h=u.length;h>a;++a)u[a].updateTransform();i&&this.textureBuffer.clear();var l=this.textureBuffer.context,p=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(e,l),this.renderer.resolution=p,e.worldTransform===o&&(e.worldTransform=s)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(t){var e=new Image;return e.src=this.getBase64(t),e},i.prototype.getBase64=function(t){return this.getCanvas(t).toDataURL()},i.prototype.getCanvas=function(t){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution,i=this.renderer.gl,n=new Uint8Array(4*e*r);i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null);var o=new h(e,r),s=o.context.getImageData(0,0,e,r);return s.data.set(n),o.context.putImageData(s,0,0),o.canvas}if(t||(t=p,t.width=this.textureBuffer.canvas.width,t.height=this.textureBuffer.canvas.height),t.width===this.textureBuffer.canvas.width&&t.height===this.textureBuffer.canvas.height)return this.textureBuffer.canvas;var a=this.resolution,o=new h(t.width*a,t.height*a),s=this.textureBuffer.context.getImageData(t.x*a,t.y*a,t.width*a,t.height*a);return o.context.putImageData(s,0,0),o.canvas},i.prototype.getPixels=function(t){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var i=this.renderer.gl,n=new Uint8Array(4*e*r);return i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null),n}return this.textureBuffer.canvas.getContext("2d").getImageData(t.x*this.resolution,t.y*this.resolution,e,r).data},i.prototype.getPixel=function(t,e,r){return p.x=e,p.y=r,p.width=1/this.resolution,p.height=1/this.resolution,t&&(p.x+=t.x,p.y+=t.y),this.getPixels(p)}},{"../const":38,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/webgl/managers/FilterManager":78,"../renderers/webgl/utils/RenderTarget":90,"./BaseTexture":99,"./Texture":101}],99:[function(t,e,r){function i(t,e,r){s.call(this),this.uid=n.uid(),this.resolution=r||1,this.width=100,this.height=100,this.realWidth=100,this.realHeight=100,this.scaleMode=e||o.SCALE_MODES.DEFAULT,this.hasLoaded=!1,this.isLoading=!1,this.source=null,this.premultipliedAlpha=!0,this.imageUrl=null,this.isPowerOfTwo=!1,this.mipmap=!1,this._glTextures={},this._active=!1,this._id=0,t&&this.loadSource(t)}var n=t("../utils"),o=t("../const"),s=t("eventemitter3");i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.update=function(){this.realWidth=this.source.naturalWidth||this.source.width,this.realHeight=this.source.naturalHeight||this.source.height,this.width=this.realWidth/this.resolution,this.height=this.realHeight/this.resolution,this.isPowerOfTwo=n.isPowerOfTwo(this.realWidth,this.realHeight),this.emit("update",this)},i.prototype.loadSource=function(t){var e=this.isLoading;if(this.hasLoaded=!1,this.isLoading=!1,e&&this.source&&(this.source.onload=null,this.source.onerror=null),this.source=t,(this.source.complete||this.source.getContext)&&this.source.width&&this.source.height)this._sourceLoaded();else if(!t.getContext){this.isLoading=!0;var r=this;t.onload=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r._sourceLoaded(),r.emit("loaded",r))},t.onerror=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r.emit("error",r))},t.complete&&t.src&&(this.isLoading=!1,t.onload=null,t.onerror=null,t.width&&t.height?(this._sourceLoaded(),e&&this.emit("loaded",this)):e&&this.emit("error",this))}},i.prototype._sourceLoaded=function(){this.hasLoaded=!0,this.update()},i.prototype.destroy=function(){this.imageUrl?(delete n.BaseTextureCache[this.imageUrl],delete n.TextureCache[this.imageUrl],this.imageUrl=null,navigator.isCocoonJS||(this.source.src="")):this.source&&this.source._pixiId&&delete n.BaseTextureCache[this.source._pixiId],this.source=null,this.dispose()},i.prototype.dispose=function(){this.emit("dispose",this)},i.prototype.updateSourceImage=function(t){this.source.src=t,this.loadSource(this.source)},i.fromImage=function(t,e,r){var o=n.BaseTextureCache[t];if(void 0===e&&0!==t.indexOf("data:")&&(e=!0),!o){var s=new Image;e&&(s.crossOrigin=""),o=new i(s,r),o.imageUrl=t,s.src=t,n.BaseTextureCache[t]=o,o.resolution=n.getResolutionOfUrl(t)}return o},i.fromCanvas=function(t,e){t._pixiId||(t._pixiId="canvas_"+n.uid());var r=n.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),n.BaseTextureCache[t._pixiId]=r),r}},{"../const":38,"../utils":107,eventemitter3:25}],100:[function(t,e,r){function i(t,e){if(!renderer)throw new Error("Unable to create RenderTexture, you must pass a renderer into the constructor.");o.call(this,t,e),this.valid=!0,this._updateUvs()}var n=t("./BaseRenderTexture"),o=t("./Texture"),s=t("../math");t("../const"),new s.Matrix;i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.resize=function(t,e,r){this.valid=t>0&&e>0,this._frame.width=this.crop.width=t,this._frame.height=this.crop.height=e,r&&this.baseTexture.resize(t,e),this._updateUvs()},i.prototype.clear=function(){this.valid&&this.baseTexture.clear(this.frame)},i.prototype.render=function(t,e,r,i){this.valid&&this.baseTexture.render(this.frame,t,e,r,i)},i.prototype.getImage=function(){return this.baseTexture.getImage(this.frame)},i.prototype.getBase64=function(){return this.getBase64.getImage(this.frame)},i.prototype.getCanvas=function(){return this.baseTexture.getCanvas(this.frame)},i.prototype.getPixels=function(){return this.baseTexture.getPixels(this.frame)},i.prototype.getPixel=function(t,e){return this.baseTexture.getPixel(this.frame,t,e)},i.create=function(t,e,r,o,s){return new i(new n(t,e,r,o,s))}},{"../const":38,"../math":56,"./BaseRenderTexture":98,"./Texture":101}],101:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":56,"../utils":107,"./BaseTexture":99,"./TextureUvs":102,"./VideoBaseTexture":103,eventemitter3:25}],102:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],103:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],105:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":104}],106:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],107:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":108,async:16,eventemitter3:25}],108:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],109:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":53, -"./extras":116,"./filters":133,"./mesh":158}],110:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":53}],118:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":53,"../blur/BlurXFilter":121,"../blur/BlurYFilter":122}],119:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){ -t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":53}],125:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":53}],126:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":53}],127:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":53}],128:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":53}],129:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":53}],130:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":53}],140:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":53}],141:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":53,"./TiltShiftXFilter":142,"./TiltShiftYFilter":143}],142:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":140}],143:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":140}],144:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":53}],145:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":53,"./deprecation":109,"./extras":116,"./filters":133,"./interaction":148,"./loaders":151,"./mesh":158,"./polyfill":163}],146:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":53}],147:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){ -var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":53,"./InteractionData":146,"./interactiveTarget":149}],148:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":146,"./InteractionManager":147,"./interactiveTarget":149}],149:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],150:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":53}],156:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":155}],157:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":53,"./Mesh":155}],158:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":155,"./Plane":156,"./Rope":157,"./webgl/MeshRenderer":159,"./webgl/MeshShader":160}],159:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":53,"../Mesh":155}],160:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":53}],161:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],162:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],163:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":161,"./Object.assign":162,"./requestAnimationFrame":164}],164:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[145])(145)}); +i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.complete=function(){this.data&&this.data.removeEventListener&&(this.data.removeEventListener("error",this._boundOnError),this.data.removeEventListener("load",this._boundComplete),this.data.removeEventListener("progress",this._boundOnProgress),this.data.removeEventListener("canplaythrough",this._boundComplete)),this.xhr&&(this.xhr.removeEventListener?(this.xhr.removeEventListener("error",this._boundXhrOnError),this.xhr.removeEventListener("abort",this._boundXhrOnAbort),this.xhr.removeEventListener("progress",this._boundOnProgress),this.xhr.removeEventListener("load",this._boundXhrOnLoad)):(this.xhr.onerror=null,this.xhr.ontimeout=null,this.xhr.onprogress=null,this.xhr.onload=null)),this.emit("complete",this)},i.prototype.load=function(t){switch(this.emit("start",this),t&&this.once("complete",t),(this.crossOrigin===!1||"string"!=typeof this.crossOrigin)&&(this.crossOrigin=this._determineCrossOrigin(this.url)),this.loadType){case i.LOAD_TYPE.IMAGE:this._loadImage();break;case i.LOAD_TYPE.AUDIO:this._loadElement("audio");break;case i.LOAD_TYPE.VIDEO:this._loadElement("video");break;case i.LOAD_TYPE.XHR:default:h&&this.crossOrigin?this._loadXdr():this._loadXhr()}},i.prototype._loadImage=function(){this.data=new Image,this.crossOrigin&&(this.data.crossOrigin=this.crossOrigin),this.data.src=this.url,this.isImage=!0,this.data.addEventListener("error",this._boundOnError,!1),this.data.addEventListener("load",this._boundComplete,!1),this.data.addEventListener("progress",this._boundOnProgress,!1)},i.prototype._loadElement=function(t){if("audio"===t&&"undefined"!=typeof Audio?this.data=new Audio:this.data=document.createElement(t),null===this.data)return this.error=new Error("Unsupported element "+t),void this.complete();if(navigator.isCocoonJS)this.data.src=Array.isArray(this.url)?this.url[0]:this.url;else if(Array.isArray(this.url))for(var e=0;e0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","gl-matrix":"git+https://github.com/toji/gl-matrix.git","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.transform.dirty=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":57,"../textures/RenderTexture":101,"../utils":108,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.transform=new a,this.position=this.transform.position,this.scale=this.transform.scale,this.pivot=this.transform.pivot,this.skew=this.transform.skew,this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=this.transform.worldTransform,this.localTransform=this.transform.localTransform,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),t("./TransformStatic")),h=new n.Matrix,u={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return h.tx=-i.x,h.ty=-i.y,n.render(this,h),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":57,"../textures/RenderTexture":101,"./TransformStatic":42,eventemitter3:25}],41:[function(t,e,r){function i(t,e,r){this._x=e||0,this._y=r||0,this.transform=t}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this._x},set:function(t){this._x=t,this.transform.dirty=!0}},y:{get:function(){return this._y},set:function(t){this._y=t,this.transform.dirty=!0}}}),i.prototype.set=function(t,e){this._x=t||0,this._y=e||(0!==e?this._x:0),this.transform.dirty=!0}},{}],42:[function(t,e,r){function i(){this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.position=new o(this,0),this.scale=new o(this,1,1),this.pivot=new o(this,0,0),this.skew=new o(this,0,0),this.rotation=0,this._sr=Math.sin(0),this._cr=Math.cos(0),this.dirty=!0}var n=t("../math"),o=t("./ObservablePoint");i.prototype.constructor=i,i.prototype.updateTransform=function(t){var e=t.worldTransform,r=this.worldTransform,i=this.localTransform;console.log("DIRTY"),this.dirty&&(i.a=this._cr*this.scale._x,i.b=this._sr*this.scale._x,i.c=-this._sr*this.scale._y,i.d=this._cr*this.scale._y,i.tx=this.position._x-(this.pivot._x*i.a+this.pivot._y*i.c),i.ty=this.position._y-(this.pivot._x*i.b+this.pivot._y*i.d)),(this.dirty||parent.dirty)&&(r.a=i.a*e.a+i.b*e.c,r.b=i.a*e.b+i.b*e.d,r.c=i.c*e.a+i.d*e.c,r.d=i.c*e.b+i.d*e.d,r.tx=i.tx*e.a+i.ty*e.c+e.tx,r.ty=i.tx*e.b+i.ty*e.d+e.ty)},e.exports=i},{"../math":57,"./ObservablePoint":41}],43:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils":108,"./WebGLGraphicsData":46,"./shaders/PrimitiveShader":47,"./utils/buildCircle":48,"./utils/buildComplexPoly":49,"./utils/buildLine":50,"./utils/buildPoly":51,"./utils/buildRectangle":52,"./utils/buildRoundedRectangle":53,earcut:24}],46:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],47:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],48:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":108,"./buildLine":50}],49:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":108,"./buildLine":50}],50:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":57,"../../../utils":108}],51:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":108}],52:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":108,"./buildLine":50}],53:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":108,"./buildLine":50}],54:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),BaseRenderTexture:t("./textures/BaseRenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":43,"./graphics/GraphicsData":44,"./graphics/webgl/GraphicsRenderer":45,"./math":57,"./particles/ParticleContainer":63,"./particles/webgl/ParticleRenderer":65,"./renderers/canvas/CanvasRenderer":68,"./renderers/canvas/utils/CanvasBuffer":69,"./renderers/canvas/utils/CanvasGraphics":70,"./renderers/webgl/WebGLRenderer":74,"./renderers/webgl/filters/AbstractFilter":75,"./renderers/webgl/filters/FXAAFilter":76,"./renderers/webgl/filters/SpriteMaskFilter":77,"./renderers/webgl/managers/ShaderManager":81,"./renderers/webgl/managers/WebGLManager":83,"./renderers/webgl/shaders/Shader":86,"./renderers/webgl/utils/ObjectRenderer":89,"./renderers/webgl/utils/RenderTarget":91,"./sprites/Sprite":95,"./sprites/webgl/SpriteRenderer":96,"./text/Text":98,"./textures/BaseRenderTexture":99,"./textures/BaseTexture":100,"./textures/RenderTexture":101,"./textures/Texture":102,"./textures/TextureUvs":103,"./textures/VideoBaseTexture":104,"./ticker":106,"./utils":108,"pixi-gl-core":1}],55:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":56}],56:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],57:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":55,"./Point":56,"./shapes/Circle":58,"./shapes/Ellipse":59,"./shapes/Polygon":60,"./shapes/Rectangle":61,"./shapes/RoundedRectangle":62}],58:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":61}],59:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":61}],60:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":56}],61:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],63:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"./ParticleBuffer":64,"./ParticleShader":66}],66:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{ +uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":87}],67:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,transform:{worldTransform:new o.Matrix},worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":57,"../utils":108,eventemitter3:25}],68:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":57,"../../utils":108,"../SystemRenderer":67,"./utils/CanvasMaskManager":71}],69:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],70:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],71:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":70}],72:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":87}],76:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\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\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\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)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":75}],77:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":57,"./AbstractFilter":75}],78:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":83}],79:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":108}],87:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":86}],88:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],89:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":83}],90:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],91:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=(t("pixi-gl-core").GLTexture,t("pixi-gl-core").GLFramebuffer),s=t("./StencilMaskStack"),a=function(t,e,r,a,h,u){this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=h||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.defaultFrame=new PIXI.Rectangle,this.destinationFrame=null,this.sourceFrame=null,this.stencilBuffer=null,this.stencilMaskStack=new s,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=a||n.SCALE_MODES.DEFAULT,this.root=u,this.frameBuffer=o.createRGBA(t,100,100),this.root?this.frameBuffer.framebuffer=null:this.texture=this.frameBuffer.texture,this.resize(e,r)};a.prototype.constructor=a,e.exports=a,a.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},a.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},a.prototype.activate=function(t,e){var r=this.gl;this.frameBuffer.bind(),this.destinationFrame=t||this.destinationFrame||this.defaultFrame,this.sourceFrame=e||this.sourceFrame||t,this.calculateProjection(this.destinationFrame,this.sourceFrame),this.transform&&this.projectionMatrix.append(this.transform),this.destinationFrame!==this.sourceFrame?(r.enable(r.SCISSOR_TEST),r.scissor(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)):r.disable(r.SCISSOR_TEST),r.viewport(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)},a.prototype.calculateProjection=function(t,e){var r=this.projectionMatrix;e=e||t,r.identity(),this.root?(r.a=1/t.width*2,r.d=-1/t.height*2,r.tx=-1-e.x*r.a,r.ty=1-e.y*r.d):(r.a=1/t.width*2,r.d=1/t.height*2,r.tx=-1-e.x*r.a,r.ty=-1-e.y*r.d)},a.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.defaultFrame.width=t,this.defaultFrame.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},a.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":57,"../../../utils":108,"./StencilMaskStack":92,"pixi-gl-core":1}],92:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],93:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],94:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],95:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.transform.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0); +}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],98:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=t,this.height=e,this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(t){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear(!1,t))},i.prototype.renderWebGL=function(t,e,r,i,n){if(this.valid){if(n=void 0!==n?n:!0,this.textureBuffer.transform=r,this.textureBuffer.activate(),e.worldAlpha=1,n){e.worldTransform.identity(),e.currentBounds=null;var o,s,a=e.children;for(o=0,s=a.length;s>o;++o)a[o].updateTransform()}p.width=t.height,p.height=t.width;var h=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.textureBuffer.activate(t,p),console.log(e),this.renderer.renderDisplayObject(e,this.textureBuffer,i),this.renderer.filterManager=h}},i.prototype.renderCanvas=function(t,e,r,i,n){if(this.valid){n=!!n;var o=c;o.identity(),r&&o.append(r),o.tx+=t.x,o.ty+=t.y;var s=e.worldTransform;e.worldTransform=o,e.worldAlpha=1;var a,h,u=e.children;for(a=0,h=u.length;h>a;++a)u[a].updateTransform();i&&this.textureBuffer.clear();var l=this.textureBuffer.context,p=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(e,l),this.renderer.resolution=p,e.worldTransform===o&&(e.worldTransform=s)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(t){var e=new Image;return e.src=this.getBase64(t),e},i.prototype.getBase64=function(t){return this.getCanvas(t).toDataURL()},i.prototype.getCanvas=function(t){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution,i=this.renderer.gl,n=new Uint8Array(4*e*r);i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null);var o=new h(e,r),s=o.context.getImageData(0,0,e,r);return s.data.set(n),o.context.putImageData(s,0,0),o.canvas}if(t||(t=p,t.width=this.textureBuffer.canvas.width,t.height=this.textureBuffer.canvas.height),t.width===this.textureBuffer.canvas.width&&t.height===this.textureBuffer.canvas.height)return this.textureBuffer.canvas;var a=this.resolution,o=new h(t.width*a,t.height*a),s=this.textureBuffer.context.getImageData(t.x*a,t.y*a,t.width*a,t.height*a);return o.context.putImageData(s,0,0),o.canvas},i.prototype.getPixels=function(t){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var i=this.renderer.gl,n=new Uint8Array(4*e*r);return i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null),n}return this.textureBuffer.canvas.getContext("2d").getImageData(t.x*this.resolution,t.y*this.resolution,e,r).data},i.prototype.getPixel=function(t,e,r){return p.x=e,p.y=r,p.width=1/this.resolution,p.height=1/this.resolution,t&&(p.x+=t.x,p.y+=t.y),this.getPixels(p)}},{"../const":38,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/webgl/managers/FilterManager":79,"../renderers/webgl/utils/RenderTarget":91,"./BaseTexture":100,"./Texture":102}],100:[function(t,e,r){function i(t,e,r){s.call(this),this.uid=n.uid(),this.resolution=r||1,this.width=100,this.height=100,this.realWidth=100,this.realHeight=100,this.scaleMode=e||o.SCALE_MODES.DEFAULT,this.hasLoaded=!1,this.isLoading=!1,this.source=null,this.premultipliedAlpha=!0,this.imageUrl=null,this.isPowerOfTwo=!1,this.mipmap=!1,this._glTextures={},this._active=!1,this._id=0,t&&this.loadSource(t)}var n=t("../utils"),o=t("../const"),s=t("eventemitter3");i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.update=function(){this.realWidth=this.source.naturalWidth||this.source.width,this.realHeight=this.source.naturalHeight||this.source.height,this.width=this.realWidth/this.resolution,this.height=this.realHeight/this.resolution,this.isPowerOfTwo=n.isPowerOfTwo(this.realWidth,this.realHeight),this.emit("update",this)},i.prototype.loadSource=function(t){var e=this.isLoading;if(this.hasLoaded=!1,this.isLoading=!1,e&&this.source&&(this.source.onload=null,this.source.onerror=null),this.source=t,(this.source.complete||this.source.getContext)&&this.source.width&&this.source.height)this._sourceLoaded();else if(!t.getContext){this.isLoading=!0;var r=this;t.onload=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r._sourceLoaded(),r.emit("loaded",r))},t.onerror=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r.emit("error",r))},t.complete&&t.src&&(this.isLoading=!1,t.onload=null,t.onerror=null,t.width&&t.height?(this._sourceLoaded(),e&&this.emit("loaded",this)):e&&this.emit("error",this))}},i.prototype._sourceLoaded=function(){this.hasLoaded=!0,this.update()},i.prototype.destroy=function(){this.imageUrl?(delete n.BaseTextureCache[this.imageUrl],delete n.TextureCache[this.imageUrl],this.imageUrl=null,navigator.isCocoonJS||(this.source.src="")):this.source&&this.source._pixiId&&delete n.BaseTextureCache[this.source._pixiId],this.source=null,this.dispose()},i.prototype.dispose=function(){this.emit("dispose",this)},i.prototype.updateSourceImage=function(t){this.source.src=t,this.loadSource(this.source)},i.fromImage=function(t,e,r){var o=n.BaseTextureCache[t];if(void 0===e&&0!==t.indexOf("data:")&&(e=!0),!o){var s=new Image;e&&(s.crossOrigin=""),o=new i(s,r),o.imageUrl=t,s.src=t,n.BaseTextureCache[t]=o,o.resolution=n.getResolutionOfUrl(t)}return o},i.fromCanvas=function(t,e){t._pixiId||(t._pixiId="canvas_"+n.uid());var r=n.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),n.BaseTextureCache[t._pixiId]=r),r}},{"../const":38,"../utils":108,eventemitter3:25}],101:[function(t,e,r){function i(t,e){if(!renderer)throw new Error("Unable to create RenderTexture, you must pass a renderer into the constructor.");o.call(this,t,e),this.valid=!0,this._updateUvs()}var n=t("./BaseRenderTexture"),o=t("./Texture"),s=t("../math");t("../const"),new s.Matrix;i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.resize=function(t,e,r){this.valid=t>0&&e>0,this._frame.width=this.crop.width=t,this._frame.height=this.crop.height=e,r&&this.baseTexture.resize(t,e),this._updateUvs()},i.prototype.clear=function(){this.valid&&this.baseTexture.clear(this.frame)},i.prototype.render=function(t,e,r,i){this.valid&&this.baseTexture.render(this.frame,t,e,r,i)},i.prototype.getImage=function(){return this.baseTexture.getImage(this.frame)},i.prototype.getBase64=function(){return this.getBase64.getImage(this.frame)},i.prototype.getCanvas=function(){return this.baseTexture.getCanvas(this.frame)},i.prototype.getPixels=function(){return this.baseTexture.getPixels(this.frame)},i.prototype.getPixel=function(t,e){return this.baseTexture.getPixel(this.frame,t,e)},i.create=function(t,e,r,o,s){return new i(new n(t,e,r,o,s))}},{"../const":38,"../math":57,"./BaseRenderTexture":99,"./Texture":102}],102:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":57,"../utils":108,"./BaseTexture":100,"./TextureUvs":103,"./VideoBaseTexture":104,eventemitter3:25}],103:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],104:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],106:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":105}],107:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],108:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":109,async:16,eventemitter3:25}],109:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],110:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":54, +"./extras":117,"./filters":134,"./mesh":159}],111:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":54}],119:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":54,"../blur/BlurXFilter":122,"../blur/BlurYFilter":123}],120:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){ +t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":54}],126:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":54}],127:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":54}],128:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":54}],129:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":54}],130:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":54}],131:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":54}],141:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":54}],142:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":54,"./TiltShiftXFilter":143,"./TiltShiftYFilter":144}],143:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":141}],144:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":141}],145:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":54}],146:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":54,"./deprecation":110,"./extras":117,"./filters":134,"./interaction":149,"./loaders":152,"./mesh":159,"./polyfill":164}],147:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":54}],148:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){ +var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":54,"./InteractionData":147,"./interactiveTarget":150}],149:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":147,"./InteractionManager":148,"./interactiveTarget":150}],150:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],151:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":54}],157:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":156}],158:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":54,"./Mesh":156}],159:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":156,"./Plane":157,"./Rope":158,"./webgl/MeshRenderer":160,"./webgl/MeshShader":161}],160:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":54,"../Mesh":156}],161:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":54}],162:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],163:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],164:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":162,"./Object.assign":163,"./requestAnimationFrame":165}],165:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[146])(146)}); //# sourceMappingURL=pixi.min.js.map diff --git a/bin/pixi.min.js.map b/bin/pixi.min.js.map index 102b3e1..c95a532 100644 --- a/bin/pixi.min.js.map +++ b/bin/pixi.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","gl-matrix","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","dirtyTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Transform","pivot","_rotation","filterArea","_sr","_cr","_tempDisplayObjectParent","CachePoint","doc","posiiton","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const","./Transform",41,"localTransform","Point","parentTransform","pt","lt",42,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",43,"_lineTint","_fillTint",44,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",45,"glPoints","glIndices","Uint16Array","deleteBuffer",46,47,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",48,49,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",50,"vertPos",51,"rectData",52,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",53,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","BaseRenderTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseRenderTexture","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",54,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",55,56,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",57,"dx","dy","r2","./Rectangle",58,"normx","normy",59,"points_","il","xi","yi","xj","yj","intersect","../Point",60,61,62,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",63,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",64,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",65,"TextureShader","../../renderers/webgl/shaders/TextureShader",66,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",67,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",68,69,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",70,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",71,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",72,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",73,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",74,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",75,"./AbstractFilter",76,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",77,"currentBlendMode","blendFunc","./WebGLManager",78,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",79,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",80,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",81,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",82,83,"./Shader",84,85,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",86,"customUniforms","customAttributes","uSampler",87,88,"../managers/WebGLManager",89,"colors","rect2",90,"StencilMaskStack","frameBuffer","defaultFrame","destinationFrame","sourceFrame","stencilBuffer","calculateProjection","SCISSOR_TEST","scissor","viewport","pm","projectionFrame","./StencilMaskStack",91,92,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",93,94,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",95,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",96,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",97,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",98,"textureBuffer","tempRect","currentBounds","cachedWt","realResolution","getImage","image","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",99,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","getResolutionOfUrl",100,"baseRenderTexture","_updateUvs","updateBase","./BaseRenderTexture",101,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",102,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",103,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",104,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",105,"shared","./Ticker",106,"totalIndices",107,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",108,"__plugins","pluginName","ctor",109,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",110,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",111,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",112,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",113,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",114,"getChildByName",115,"getGlobalPosition",116,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",117,"AsciiFilter","pixelSize","../../core",118,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",119,"BlurDirFilter","dirX","dirY","strength","passes",120,"BlurFilter","./BlurXFilter","./BlurYFilter",121,"flip","flop",122,123,"SmartBlurFilter",124,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",125,"ColorStepFilter",126,"ConvolutionFilter","texelSize",127,"CrossHatchFilter",128,"DisplacementFilter","mapSampler",129,"DotScreenFilter",130,"BlurYTintFilter",131,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",132,"GrayFilter","gray",133,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",134,135,"noise",136,137,"red","green","blue",138,139,"center","params",140,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",141,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",142,"./TiltShiftAxisFilter",143,144,145,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",146,"InteractionData","originalEvent","getLocalPosition","globalPos",147,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",148,"interactiveTarget","./InteractionManager",149,150,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",151,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",152,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",153,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",154,155,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",156,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",157,"factor","nextPoint","perpLength","num","perpX","perpY",158,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",159,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",160,161,"isNaN",162,163,"./Math.sign","./Object.assign","./requestAnimationFrame",164,"Date","getTime","startTime","vendors","delay"],"mappings":"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AA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAw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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","gl-matrix","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","worldAlpha","alpha","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Transform","pivot","_rotation","localTransform","filterArea","_sr","_cr","dirtyTransform","_tempDisplayObjectParent","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","displayObjectUpdateTransform","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const","./TransformStatic",41,"ObservablePoint","_x","_y",42,"parentTransform","pt","lt","./ObservablePoint",43,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","Point","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",44,"_lineTint","_fillTint",45,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",46,"glPoints","glIndices","Uint16Array","deleteBuffer",47,48,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",49,50,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",51,"vertPos",52,"rectData",53,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",54,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","BaseRenderTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseRenderTexture","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",55,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",56,57,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",58,"dx","dy","r2","./Rectangle",59,"normx","normy",60,"points_","il","xi","yi","xj","yj","intersect","../Point",61,62,63,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",64,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",65,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",66,"TextureShader","../../renderers/webgl/shaders/TextureShader",67,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",68,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",69,70,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",71,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",72,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",73,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",74,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",75,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",76,"./AbstractFilter",77,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",78,"currentBlendMode","blendFunc","./WebGLManager",79,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",80,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",81,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",82,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",83,84,"./Shader",85,86,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",87,"customUniforms","customAttributes","uSampler",88,89,"../managers/WebGLManager",90,"colors","rect2",91,"StencilMaskStack","frameBuffer","defaultFrame","destinationFrame","sourceFrame","stencilBuffer","calculateProjection","SCISSOR_TEST","scissor","viewport","pm","projectionFrame","./StencilMaskStack",92,93,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",94,95,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",96,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",97,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",98,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",99,"textureBuffer","tempRect","currentBounds","cachedWt","realResolution","getImage","image","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",100,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","getResolutionOfUrl",101,"baseRenderTexture","_updateUvs","updateBase","./BaseRenderTexture",102,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",103,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",104,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",105,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",106,"shared","./Ticker",107,"totalIndices",108,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",109,"__plugins","pluginName","ctor",110,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",111,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",112,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",113,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",114,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",115,"getChildByName",116,"getGlobalPosition",117,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",118,"AsciiFilter","pixelSize","../../core",119,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",120,"BlurDirFilter","dirX","dirY","strength","passes",121,"BlurFilter","./BlurXFilter","./BlurYFilter",122,"flip","flop",123,124,"SmartBlurFilter",125,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",126,"ColorStepFilter",127,"ConvolutionFilter","texelSize",128,"CrossHatchFilter",129,"DisplacementFilter","mapSampler",130,"DotScreenFilter",131,"BlurYTintFilter",132,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",133,"GrayFilter","gray",134,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",135,136,"noise",137,138,"red","green","blue",139,140,"center","params",141,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",142,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",143,"./TiltShiftAxisFilter",144,145,146,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",147,"InteractionData","originalEvent","getLocalPosition","globalPos",148,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",149,"interactiveTarget","./InteractionManager",150,151,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",152,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",153,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",154,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",155,156,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",157,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",158,"factor","nextPoint","perpLength","num","perpX","perpY",159,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",160,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",161,162,"isNaN",163,164,"./Math.sign","./Object.assign","./requestAnimationFrame",165,"Date","getTime","startTime","vendors","delay"],"mappings":"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AA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 64e912a..9199f9d 100644 --- a/src/core/display/Container.js +++ b/src/core/display/Container.js @@ -399,7 +399,7 @@ this.children[i].updateTransform(); } - this.dirtyTransform = false; + this.transform.dirty = false; }; // performance increase to avoid using call.. (10x faster) diff --git a/src/core/display/DisplayObject.js b/src/core/display/DisplayObject.js index 06bd523..3cc5c2f 100644 --- a/src/core/display/DisplayObject.js +++ b/src/core/display/DisplayObject.js @@ -2,7 +2,7 @@ RenderTexture = require('../textures/RenderTexture'), EventEmitter = require('eventemitter3'), CONST = require('../const'), - Transform = require('./Transform'), + Transform = require('./TransformStatic'), _tempMatrix = new math.Matrix(), _tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1, children:[]}; @@ -114,22 +114,6 @@ */ this.filterArea = null; - /**xww - * cached sin rotation - * - * @member {number} - * @private - */ - this._sr = 0; - - /** - * cached cos rotation - * - * @member {number} - * @private - */ - this._cr = 1; - /** * The original, cached bounds of the object * @@ -154,7 +138,7 @@ */ this._mask = null; - this.dirtyTransform = true; + // this.dirtyTransform = true; } // constructor @@ -238,9 +222,9 @@ set: function (value) { this._rotation = value; - this.dirtyTransform = true; - this._sr = Math.sin(value); - this._cr = Math.cos(value); + this.transform.dirty = true; + this.transform._sr = Math.sin(value); + this.transform._cr = Math.cos(value); } }, @@ -344,6 +328,7 @@ */ DisplayObject.prototype.updateTransform = function () { + //if(this.transform.dirty || parent.transform.dirty) this.transform.updateTransform(this.parent.transform); // multiply the alphas.. this.worldAlpha = this.alpha * this.parent.worldAlpha; diff --git a/bin/pixi.js b/bin/pixi.js index df52170..915f5c1 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -1,7 +1,7 @@ /** * @license * pixi.js - v3.0.10-dev - * Compiled 2016-01-18T21:33:26.540Z + * Compiled 2016-01-18T22:34:48.843Z * * pixi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -8072,7 +8072,7 @@ core.CanvasRenderer.registerPlugin('accessibility', AccessibilityManager); -},{"../core":53,"./accessibleTarget":36}],36:[function(require,module,exports){ +},{"../core":54,"./accessibleTarget":36}],36:[function(require,module,exports){ /** * Default property values of accessible objects * used by {@link PIXI.accessibility.AccessibilityManager}. @@ -8759,7 +8759,7 @@ this.children[i].updateTransform(); } - this.dirtyTransform = false; + this.transform.dirty = false; }; // performance increase to avoid using call.. (10x faster) @@ -9005,12 +9005,12 @@ this.children = null; }; -},{"../math":56,"../textures/RenderTexture":100,"../utils":107,"./DisplayObject":40}],40:[function(require,module,exports){ +},{"../math":57,"../textures/RenderTexture":101,"../utils":108,"./DisplayObject":40}],40:[function(require,module,exports){ var math = require('../math'), RenderTexture = require('../textures/RenderTexture'), EventEmitter = require('eventemitter3'), CONST = require('../const'), - Transform = require('./Transform'), + Transform = require('./TransformStatic'), _tempMatrix = new math.Matrix(), _tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1, children:[]}; @@ -9122,22 +9122,6 @@ */ this.filterArea = null; - /**xww - * cached sin rotation - * - * @member {number} - * @private - */ - this._sr = 0; - - /** - * cached cos rotation - * - * @member {number} - * @private - */ - this._cr = 1; - /** * The original, cached bounds of the object * @@ -9162,7 +9146,7 @@ */ this._mask = null; - this.dirtyTransform = true; + // this.dirtyTransform = true; } // constructor @@ -9246,9 +9230,9 @@ set: function (value) { this._rotation = value; - this.dirtyTransform = true; - this._sr = Math.sin(value); - this._cr = Math.cos(value); + this.transform.dirty = true; + this.transform._sr = Math.sin(value); + this.transform._cr = Math.cos(value); } }, @@ -9352,6 +9336,7 @@ */ DisplayObject.prototype.updateTransform = function () { + //if(this.transform.dirty || parent.transform.dirty) this.transform.updateTransform(this.parent.transform); // multiply the alphas.. this.worldAlpha = this.alpha * this.parent.worldAlpha; @@ -9554,9 +9539,79 @@ this.filterArea = null; }; -},{"../const":38,"../math":56,"../textures/RenderTexture":100,"./Transform":41,"eventemitter3":25}],41:[function(require,module,exports){ -var math = require('../math'); +},{"../const":38,"../math":57,"../textures/RenderTexture":101,"./TransformStatic":42,"eventemitter3":25}],41:[function(require,module,exports){ +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents + * the horizontal axis and y represents the vertical axis. + * + * @class + * @memberof PIXI + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +function ObservablePoint(transform, x, y) +{ + this._x = x || 0; + this._y = y || 0; + this.transform = transform; +} + +ObservablePoint.prototype.constructor = ObservablePoint; +module.exports = ObservablePoint; + + + +Object.defineProperties(ObservablePoint.prototype, { + /** + * The position of the displayObject on the x axis relative to the local coordinates of the parent. + * + * @member {number} + * @memberof PIXI.DisplayObject# + */ + x: { + get: function () + { + return this._x; + }, + set: function (value) + { + this._x = value; + this.transform.dirty = true; + } + }, + + y: { + get: function () + { + return this._y; + }, + set: function (value) + { + this._y = value; + this.transform.dirty = true; + } + } +}); + +/** + * Sets the point to a new x and y position. + * If y is omitted, both x and y will be set to x. + * + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +ObservablePoint.prototype.set = function (x, y) +{ + this._x = x || 0; + this._y = y || ( (y !== 0) ? this._x : 0 ); + + this.transform.dirty = true; +}; + +},{}],42:[function(require,module,exports){ +var math = require('../math'); +var ObservablePoint = require('./ObservablePoint'); /** * The Point object represents a location in a two-dimensional coordinate system, where x represents @@ -9572,17 +9627,19 @@ this.worldTransform = new math.Matrix(); this.localTransform = new math.Matrix(); - this.position = new math.Point(0.0); - this.scale = new math.Point(1,1); - this.pivot = new math.Point(0.0); - this.skew = new math.Point(0.0); + this.position = new ObservablePoint(this, 0); + this.scale = new ObservablePoint(this,1, 1); + this.pivot = new ObservablePoint(this, 0, 0); + this.skew = new ObservablePoint(this, 0,0); this.rotation = 0; this._sr = Math.sin(0); this._cr = Math.cos(0); - this.dirty = true; + + + this.updated = true; } Transform.prototype.constructor = Transform; @@ -9593,19 +9650,20 @@ var wt = this.worldTransform; var lt = this.localTransform; - if(this.dirty) { // get the matrix values of the displayobject based on its transform properties.. - lt.a = this._cr * this.scale.x; - lt.b = this._sr * this.scale.x; - lt.c = -this._sr * this.scale.y; - lt.d = this._cr * this.scale.y; - lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c); - lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d); + lt.a = this._cr * this.scale._x; + lt.b = this._sr * this.scale._x; + lt.c = -this._sr * this.scale._y; + lt.d = this._cr * this.scale._y; + lt.tx = this.position._x - (this.pivot._x * lt.a + this.pivot._y * lt.c); + lt.ty = this.position._y - (this.pivot._x * lt.b + this.pivot._y * lt.d); } - if(this.dirty || parent.dirty) + this.updated = this.dirty || parentTransform.dirty; + + if(this.updated) { // concat the parent matrix with the objects transform. wt.a = lt.a * pt.a + lt.b * pt.c; @@ -9613,21 +9671,16 @@ wt.c = lt.c * pt.a + lt.d * pt.c; wt.d = lt.c * pt.b + lt.d * pt.d; wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; - wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; - - // this.dirty = false; - // return true; + wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; } - -// this.dirty = false; - // return false; + } module.exports = Transform; -},{"../math":56}],42:[function(require,module,exports){ +},{"../math":57,"./ObservablePoint":41}],43:[function(require,module,exports){ var Container = require('../display/Container'), Texture = require('../textures/Texture'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), @@ -10787,7 +10840,7 @@ this._localBounds = null; }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/canvas/utils/CanvasGraphics":69,"../textures/Texture":101,"./GraphicsData":43}],43:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/canvas/utils/CanvasGraphics":70,"../textures/Texture":102,"./GraphicsData":44}],44:[function(require,module,exports){ /** * A GraphicsData object. * @@ -10880,7 +10933,7 @@ this.shape = null; }; -},{}],44:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ var utils = require('../../utils'), math = require('../../math'), CONST = require('../../const'), @@ -11200,7 +11253,7 @@ }; -},{"../../const":38,"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils":107,"./WebGLGraphicsData":45,"./shaders/PrimitiveShader":46,"./utils/buildCircle":47,"./utils/buildComplexPoly":48,"./utils/buildLine":49,"./utils/buildPoly":50,"./utils/buildRectangle":51,"./utils/buildRoundedRectangle":52,"earcut":24}],45:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils":108,"./WebGLGraphicsData":46,"./shaders/PrimitiveShader":47,"./utils/buildCircle":48,"./utils/buildComplexPoly":49,"./utils/buildLine":50,"./utils/buildPoly":51,"./utils/buildRectangle":52,"./utils/buildRoundedRectangle":53,"earcut":24}],46:[function(require,module,exports){ /** * An object containing WebGL specific properties to be used by the WebGL renderer * @@ -11318,7 +11371,7 @@ this.glIndices = null; }; -},{}],46:[function(require,module,exports){ +},{}],47:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -11370,7 +11423,7 @@ module.exports = PrimitiveShader; -},{"pixi-gl-core":1}],47:[function(require,module,exports){ +},{"pixi-gl-core":1}],48:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11457,7 +11510,7 @@ module.exports = buildCircle; -},{"../../../utils":107,"./buildLine":49}],48:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],49:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11528,7 +11581,7 @@ module.exports = buildComplexPoly; -},{"../../../utils":107,"./buildLine":49}],49:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],50:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'); @@ -11748,7 +11801,7 @@ }; module.exports = buildLine; -},{"../../../math":56,"../../../utils":107}],50:[function(require,module,exports){ +},{"../../../math":57,"../../../utils":108}],51:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -11811,7 +11864,7 @@ module.exports = buildPoly; -},{"../../../utils":107}],51:[function(require,module,exports){ +},{"../../../utils":108}],52:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11882,7 +11935,7 @@ }; module.exports = buildRectangle; -},{"../../../utils":107,"./buildLine":49}],52:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],53:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -12010,7 +12063,7 @@ module.exports = buildRoundedRectangle; -},{"../../../utils":107,"./buildLine":49}],53:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],54:[function(require,module,exports){ /** * @file Main export of the PIXI core library * @author Mat Groves @@ -12106,7 +12159,7 @@ } }); -},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":42,"./graphics/GraphicsData":43,"./graphics/webgl/GraphicsRenderer":44,"./math":56,"./particles/ParticleContainer":62,"./particles/webgl/ParticleRenderer":64,"./renderers/canvas/CanvasRenderer":67,"./renderers/canvas/utils/CanvasBuffer":68,"./renderers/canvas/utils/CanvasGraphics":69,"./renderers/webgl/WebGLRenderer":73,"./renderers/webgl/filters/AbstractFilter":74,"./renderers/webgl/filters/FXAAFilter":75,"./renderers/webgl/filters/SpriteMaskFilter":76,"./renderers/webgl/managers/ShaderManager":80,"./renderers/webgl/managers/WebGLManager":82,"./renderers/webgl/shaders/Shader":85,"./renderers/webgl/utils/ObjectRenderer":88,"./renderers/webgl/utils/RenderTarget":90,"./sprites/Sprite":94,"./sprites/webgl/SpriteRenderer":95,"./text/Text":97,"./textures/BaseRenderTexture":98,"./textures/BaseTexture":99,"./textures/RenderTexture":100,"./textures/Texture":101,"./textures/TextureUvs":102,"./textures/VideoBaseTexture":103,"./ticker":105,"./utils":107,"pixi-gl-core":1}],54:[function(require,module,exports){ +},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":43,"./graphics/GraphicsData":44,"./graphics/webgl/GraphicsRenderer":45,"./math":57,"./particles/ParticleContainer":63,"./particles/webgl/ParticleRenderer":65,"./renderers/canvas/CanvasRenderer":68,"./renderers/canvas/utils/CanvasBuffer":69,"./renderers/canvas/utils/CanvasGraphics":70,"./renderers/webgl/WebGLRenderer":74,"./renderers/webgl/filters/AbstractFilter":75,"./renderers/webgl/filters/FXAAFilter":76,"./renderers/webgl/filters/SpriteMaskFilter":77,"./renderers/webgl/managers/ShaderManager":81,"./renderers/webgl/managers/WebGLManager":83,"./renderers/webgl/shaders/Shader":86,"./renderers/webgl/utils/ObjectRenderer":89,"./renderers/webgl/utils/RenderTarget":91,"./sprites/Sprite":95,"./sprites/webgl/SpriteRenderer":96,"./text/Text":98,"./textures/BaseRenderTexture":99,"./textures/BaseTexture":100,"./textures/RenderTexture":101,"./textures/Texture":102,"./textures/TextureUvs":103,"./textures/VideoBaseTexture":104,"./ticker":106,"./utils":108,"pixi-gl-core":1}],55:[function(require,module,exports){ // @todo - ignore the too many parameters warning for now // should either fix it or change the jshint config // jshint -W072 @@ -12546,7 +12599,7 @@ */ Matrix.TEMP_MATRIX = new Matrix(); -},{"./Point":55}],55:[function(require,module,exports){ +},{"./Point":56}],56:[function(require,module,exports){ /** * The Point object represents a location in a two-dimensional coordinate system, where x represents * the horizontal axis and y represents the vertical axis. @@ -12616,7 +12669,7 @@ this.y = y || ( (y !== 0) ? this.x : 0 ) ; }; -},{}],56:[function(require,module,exports){ +},{}],57:[function(require,module,exports){ /** * Math classes and utilities mixed into PIXI namespace. * @@ -12638,7 +12691,7 @@ RoundedRectangle: require('./shapes/RoundedRectangle') }; -},{"./Matrix":54,"./Point":55,"./shapes/Circle":57,"./shapes/Ellipse":58,"./shapes/Polygon":59,"./shapes/Rectangle":60,"./shapes/RoundedRectangle":61}],57:[function(require,module,exports){ +},{"./Matrix":55,"./Point":56,"./shapes/Circle":58,"./shapes/Ellipse":59,"./shapes/Polygon":60,"./shapes/Rectangle":61,"./shapes/RoundedRectangle":62}],58:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12726,7 +12779,7 @@ return new Rectangle(this.x - this.radius, this.y - this.radius, this.radius * 2, this.radius * 2); }; -},{"../../const":38,"./Rectangle":60}],58:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],59:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12821,7 +12874,7 @@ return new Rectangle(this.x - this.width, this.y - this.height, this.width, this.height); }; -},{"../../const":38,"./Rectangle":60}],59:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],60:[function(require,module,exports){ var Point = require('../Point'), CONST = require('../../const'); @@ -12924,7 +12977,7 @@ return inside; }; -},{"../../const":38,"../Point":55}],60:[function(require,module,exports){ +},{"../../const":38,"../Point":56}],61:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13018,7 +13071,7 @@ return false; }; -},{"../../const":38}],61:[function(require,module,exports){ +},{"../../const":38}],62:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13110,7 +13163,7 @@ return false; }; -},{"../../const":38}],62:[function(require,module,exports){ +},{"../../const":38}],63:[function(require,module,exports){ var Container = require('../display/Container'), CONST = require('../const'); @@ -13429,7 +13482,7 @@ this._buffers = null; }; -},{"../const":38,"../display/Container":39}],63:[function(require,module,exports){ +},{"../const":38,"../display/Container":39}],64:[function(require,module,exports){ /** * @author Mat Groves @@ -13649,7 +13702,7 @@ this.gl.deleteBuffer(this.staticBuffer); }; -},{}],64:[function(require,module,exports){ +},{}],65:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), ParticleShader = require('./ParticleShader'), @@ -14125,7 +14178,7 @@ this.tempMatrix = null; }; -},{"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"./ParticleBuffer":63,"./ParticleShader":65}],65:[function(require,module,exports){ +},{"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"./ParticleBuffer":64,"./ParticleShader":66}],66:[function(require,module,exports){ var TextureShader = require('../../renderers/webgl/shaders/TextureShader'); /** @@ -14203,7 +14256,7 @@ module.exports = ParticleShader; -},{"../../renderers/webgl/shaders/TextureShader":86}],66:[function(require,module,exports){ +},{"../../renderers/webgl/shaders/TextureShader":87}],67:[function(require,module,exports){ var utils = require('../utils'), math = require('../math'), CONST = require('../const'), @@ -14464,7 +14517,7 @@ this._backgroundColorString = null; }; -},{"../const":38,"../math":56,"../utils":107,"eventemitter3":25}],67:[function(require,module,exports){ +},{"../const":38,"../math":57,"../utils":108,"eventemitter3":25}],68:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), CanvasMaskManager = require('./utils/CanvasMaskManager'), utils = require('../../utils'), @@ -14732,7 +14785,7 @@ } }; -},{"../../const":38,"../../math":56,"../../utils":107,"../SystemRenderer":66,"./utils/CanvasMaskManager":70}],68:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../utils":108,"../SystemRenderer":67,"./utils/CanvasMaskManager":71}],69:[function(require,module,exports){ /** * Creates a Canvas element of the given size. * @@ -14832,7 +14885,7 @@ this.canvas = null; }; -},{}],69:[function(require,module,exports){ +},{}],70:[function(require,module,exports){ var CONST = require('../../../const'); /** @@ -15186,7 +15239,7 @@ }; -},{"../../../const":38}],70:[function(require,module,exports){ +},{"../../../const":38}],71:[function(require,module,exports){ var CanvasGraphics = require('./CanvasGraphics'); /** @@ -15248,7 +15301,7 @@ CanvasMaskManager.prototype.destroy = function () {}; -},{"./CanvasGraphics":69}],71:[function(require,module,exports){ +},{"./CanvasGraphics":70}],72:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -15500,7 +15553,7 @@ */ CanvasTinter.tintMethod = CanvasTinter.canUseMultiply ? CanvasTinter.tintWithMultiply : CanvasTinter.tintWithPerPixel; -},{"../../../utils":107}],72:[function(require,module,exports){ +},{"../../../utils":108}],73:[function(require,module,exports){ var GLTexture = require('pixi-gl-core').GLTexture, utils = require('../../utils'); @@ -15640,7 +15693,7 @@ module.exports = TextureManager; -},{"../../utils":107,"pixi-gl-core":1}],73:[function(require,module,exports){ +},{"../../utils":108,"pixi-gl-core":1}],74:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), ShaderManager = require('./managers/ShaderManager'), MaskManager = require('./managers/MaskManager'), @@ -16037,7 +16090,7 @@ }; -},{"../../const":38,"../../utils":107,"../SystemRenderer":66,"./TextureManager":72,"./filters/FXAAFilter":75,"./managers/BlendModeManager":77,"./managers/FilterManager":78,"./managers/MaskManager":79,"./managers/ShaderManager":80,"./managers/StencilManager":81,"./utils/ObjectRenderer":88,"./utils/RenderTarget":90,"./utils/mapWebGLBlendModesToPixi":92,"./utils/mapWebGLDrawModesToPixi":93,"pixi-gl-core":1}],74:[function(require,module,exports){ +},{"../../const":38,"../../utils":108,"../SystemRenderer":67,"./TextureManager":73,"./filters/FXAAFilter":76,"./managers/BlendModeManager":78,"./managers/FilterManager":79,"./managers/MaskManager":80,"./managers/ShaderManager":81,"./managers/StencilManager":82,"./utils/ObjectRenderer":89,"./utils/RenderTarget":91,"./utils/mapWebGLBlendModesToPixi":93,"./utils/mapWebGLDrawModesToPixi":94,"pixi-gl-core":1}],75:[function(require,module,exports){ var DefaultShader = require('../shaders/TextureShader'); /** @@ -16149,7 +16202,7 @@ } }; -},{"../shaders/TextureShader":86}],75:[function(require,module,exports){ +},{"../shaders/TextureShader":87}],76:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'); // @see https://github.com/substack/brfs/issues/25 @@ -16204,7 +16257,7 @@ filterManager.applyFilter(shader, input, output); }; -},{"./AbstractFilter":74}],76:[function(require,module,exports){ +},{"./AbstractFilter":75}],77:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'), math = require('../../../math'); @@ -16301,7 +16354,7 @@ } }); -},{"../../../math":56,"./AbstractFilter":74}],77:[function(require,module,exports){ +},{"../../../math":57,"./AbstractFilter":75}],78:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'); /** @@ -16345,7 +16398,7 @@ return true; }; -},{"./WebGLManager":82}],78:[function(require,module,exports){ +},{"./WebGLManager":83}],79:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), RenderTarget = require('../utils/RenderTarget'), CONST = require('../../../const'), @@ -16797,7 +16850,7 @@ this.texturePool = null; }; -},{"../../../const":38,"../../../math":56,"../utils/Quad":89,"../utils/RenderTarget":90,"./WebGLManager":82}],79:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../utils/Quad":90,"../utils/RenderTarget":91,"./WebGLManager":83}],80:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), AlphaMaskFilter = require('../filters/SpriteMaskFilter'); @@ -16912,7 +16965,7 @@ }; -},{"../filters/SpriteMaskFilter":76,"./WebGLManager":82}],80:[function(require,module,exports){ +},{"../filters/SpriteMaskFilter":77,"./WebGLManager":83}],81:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), TextureShader = require('../shaders/TextureShader'), ComplexPrimitiveShader = require('../shaders/ComplexPrimitiveShader'), @@ -17082,7 +17135,7 @@ this.tempAttribState = null; }; -},{"../../../utils":107,"../shaders/ComplexPrimitiveShader":83,"../shaders/PrimitiveShader":84,"../shaders/TextureShader":86,"./WebGLManager":82}],81:[function(require,module,exports){ +},{"../../../utils":108,"../shaders/ComplexPrimitiveShader":84,"../shaders/PrimitiveShader":85,"../shaders/TextureShader":87,"./WebGLManager":83}],82:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), utils = require('../../../utils'); @@ -17449,7 +17502,7 @@ }; -},{"../../../utils":107,"./WebGLManager":82}],82:[function(require,module,exports){ +},{"../../../utils":108,"./WebGLManager":83}],83:[function(require,module,exports){ /** * @class * @memberof PIXI @@ -17490,7 +17543,7 @@ this.renderer = null; }; -},{}],83:[function(require,module,exports){ +},{}],84:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17552,7 +17605,7 @@ ComplexPrimitiveShader.prototype.constructor = ComplexPrimitiveShader; module.exports = ComplexPrimitiveShader; -},{"./Shader":85}],84:[function(require,module,exports){ +},{"./Shader":86}],85:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17615,7 +17668,7 @@ PrimitiveShader.prototype.constructor = PrimitiveShader; module.exports = PrimitiveShader; -},{"./Shader":85}],85:[function(require,module,exports){ +},{"./Shader":86}],86:[function(require,module,exports){ /*global console */ var utils = require('../../../utils'); @@ -18143,7 +18196,7 @@ return shader; }; -},{"../../../utils":107}],86:[function(require,module,exports){ +},{"../../../utils":108}],87:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -18254,7 +18307,7 @@ '}' ].join('\n'); -},{"./Shader":85}],87:[function(require,module,exports){ +},{"./Shader":86}],88:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -18335,7 +18388,7 @@ '}' ].join('\n'); -},{"pixi-gl-core":1}],88:[function(require,module,exports){ +},{"pixi-gl-core":1}],89:[function(require,module,exports){ var WebGLManager = require('../managers/WebGLManager'); /** @@ -18393,7 +18446,7 @@ // render the object }; -},{"../managers/WebGLManager":82}],89:[function(require,module,exports){ +},{"../managers/WebGLManager":83}],90:[function(require,module,exports){ /** * Helper class to create a quad * @@ -18548,7 +18601,7 @@ -},{}],90:[function(require,module,exports){ +},{}],91:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'), CONST = require('../../../const'), @@ -18853,7 +18906,7 @@ this.texture = null; }; -},{"../../../const":38,"../../../math":56,"../../../utils":107,"./StencilMaskStack":91,"pixi-gl-core":1}],91:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../../../utils":108,"./StencilMaskStack":92,"pixi-gl-core":1}],92:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -18886,7 +18939,7 @@ StencilMaskStack.prototype.constructor = StencilMaskStack; module.exports = StencilMaskStack; -},{}],92:[function(require,module,exports){ +},{}],93:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18923,7 +18976,7 @@ module.exports = mapWebGLBlendModesToPixi; -},{"../../../const":38}],93:[function(require,module,exports){ +},{"../../../const":38}],94:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18947,7 +19000,7 @@ module.exports = mapWebGLDrawModesToPixi; -},{"../../../const":38}],94:[function(require,module,exports){ +},{"../../../const":38}],95:[function(require,module,exports){ var math = require('../math'), Texture = require('../textures/Texture'), Container = require('../display/Container'), @@ -19043,7 +19096,6 @@ // call texture setter this.texture = texture || Texture.EMPTY; this.textureDirty = true - this.vertexDirty = true; this.vertexData = new Float32Array(8); } @@ -19153,7 +19205,6 @@ Sprite.prototype.caclulateVertices = function () { - var texture = this._texture, wt = this.transform.worldTransform, a = wt.a, b = wt.b, c = wt.c, d = wt.d, tx = wt.tx, ty = wt.ty, @@ -19208,22 +19259,11 @@ */ Sprite.prototype._renderWebGL = function (renderer) { - if(this.textureDirty) + if(this.transform.updated || this.textureDirty) { this.textureDirty = false; - - this._onTextureUpdate(); - - this.vertexDirty = true; - } - - if(this.vertexDirty) - { - this.vertexDirty = false; - // set the vertex data this.caclulateVertices(); - } renderer.setObjectRenderer(renderer.plugins.sprite); @@ -19566,7 +19606,7 @@ return new Sprite(Texture.fromImage(imageId, crossorigin, scaleMode)); }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasTinter":71,"../textures/Texture":101,"../utils":107}],95:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasTinter":72,"../textures/Texture":102,"../utils":108}],96:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), TextureShader = require('../../renderers/webgl/shaders/_TextureShader'), @@ -19927,7 +19967,7 @@ this.shader = null; }; -},{"../../const":38,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/shaders/_TextureShader":87,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils/createIndicesForQuads":106,"./generateMultiTextureShader":96,"pixi-gl-core":1}],96:[function(require,module,exports){ +},{"../../const":38,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/shaders/_TextureShader":88,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils/createIndicesForQuads":107,"./generateMultiTextureShader":97,"pixi-gl-core":1}],97:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; @@ -19990,7 +20030,7 @@ module.exports = generateMultiTextureShader; -},{"pixi-gl-core":1}],97:[function(require,module,exports){ +},{"pixi-gl-core":1}],98:[function(require,module,exports){ var Sprite = require('../sprites/Sprite'), Texture = require('../textures/Texture'), math = require('../math'), @@ -20611,7 +20651,7 @@ this._texture.destroy(destroyBaseTexture === undefined ? true : destroyBaseTexture); }; -},{"../const":38,"../math":56,"../sprites/Sprite":94,"../textures/Texture":101,"../utils":107}],98:[function(require,module,exports){ +},{"../const":38,"../math":57,"../sprites/Sprite":95,"../textures/Texture":102,"../utils":108}],99:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), Texture = require('./Texture'), RenderTarget = require('../renderers/webgl/utils/RenderTarget'), @@ -21095,7 +21135,7 @@ return this.getPixels(tempRect); }; -},{"../const":38,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/webgl/managers/FilterManager":78,"../renderers/webgl/utils/RenderTarget":90,"./BaseTexture":99,"./Texture":101}],99:[function(require,module,exports){ +},{"../const":38,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/webgl/managers/FilterManager":79,"../renderers/webgl/utils/RenderTarget":91,"./BaseTexture":100,"./Texture":102}],100:[function(require,module,exports){ var utils = require('../utils'), CONST = require('../const'), EventEmitter = require('eventemitter3'); @@ -21532,7 +21572,7 @@ return baseTexture; }; -},{"../const":38,"../utils":107,"eventemitter3":25}],100:[function(require,module,exports){ +},{"../const":38,"../utils":108,"eventemitter3":25}],101:[function(require,module,exports){ var BaseRenderTexture = require('./BaseRenderTexture'), Texture = require('./Texture'), math = require('../math'), @@ -21727,7 +21767,7 @@ } -},{"../const":38,"../math":56,"./BaseRenderTexture":98,"./Texture":101}],101:[function(require,module,exports){ +},{"../const":38,"../math":57,"./BaseRenderTexture":99,"./Texture":102}],102:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), VideoBaseTexture = require('./VideoBaseTexture'), TextureUvs = require('./TextureUvs'), @@ -22153,7 +22193,7 @@ */ Texture.EMPTY = new Texture(new BaseTexture()); -},{"../math":56,"../utils":107,"./BaseTexture":99,"./TextureUvs":102,"./VideoBaseTexture":103,"eventemitter3":25}],102:[function(require,module,exports){ +},{"../math":57,"../utils":108,"./BaseTexture":100,"./TextureUvs":103,"./VideoBaseTexture":104,"eventemitter3":25}],103:[function(require,module,exports){ /** * A standard object to store the Uvs of a texture @@ -22234,7 +22274,7 @@ this.uvs_uint32[3] = (((this.y3 * 65535) & 0xFFFF) << 16) | ((this.x3 * 65535) & 0xFFFF); }; -},{}],103:[function(require,module,exports){ +},{}],104:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), utils = require('../utils'); @@ -22471,7 +22511,7 @@ return source; } -},{"../utils":107,"./BaseTexture":99}],104:[function(require,module,exports){ +},{"../utils":108,"./BaseTexture":100}],105:[function(require,module,exports){ var CONST = require('../const'), EventEmitter = require('eventemitter3'), // Internal event used by composed emitter @@ -22826,7 +22866,7 @@ module.exports = Ticker; -},{"../const":38,"eventemitter3":25}],105:[function(require,module,exports){ +},{"../const":38,"eventemitter3":25}],106:[function(require,module,exports){ var Ticker = require('./Ticker'); /** @@ -22882,7 +22922,7 @@ Ticker: Ticker }; -},{"./Ticker":104}],106:[function(require,module,exports){ +},{"./Ticker":105}],107:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -22915,7 +22955,7 @@ }; module.exports = createIndicesForQuads; -},{}],107:[function(require,module,exports){ +},{}],108:[function(require,module,exports){ var CONST = require('../const'); /** @@ -23192,7 +23232,7 @@ BaseTextureCache: {} }; -},{"../const":38,"./pluginTarget":108,"async":16,"eventemitter3":25}],108:[function(require,module,exports){ +},{"../const":38,"./pluginTarget":109,"async":16,"eventemitter3":25}],109:[function(require,module,exports){ /** * Mixins functionality to make an object have "plugins". * @@ -23262,7 +23302,7 @@ } }; -},{}],109:[function(require,module,exports){ +},{}],110:[function(require,module,exports){ /*global console */ var core = require('./core'), mesh = require('./mesh'), @@ -23613,7 +23653,7 @@ return core.utils.uid(); }; -},{"./core":53,"./extras":116,"./filters":133,"./mesh":158}],110:[function(require,module,exports){ +},{"./core":54,"./extras":117,"./filters":134,"./mesh":159}],111:[function(require,module,exports){ var core = require('../core'); /** @@ -24001,7 +24041,7 @@ BitmapText.fonts = {}; -},{"../core":53}],111:[function(require,module,exports){ +},{"../core":54}],112:[function(require,module,exports){ var core = require('../core'); /** @@ -24321,7 +24361,7 @@ return new MovieClip(textures); }; -},{"../core":53}],112:[function(require,module,exports){ +},{"../core":54}],113:[function(require,module,exports){ var core = require('../core'), // a sprite use dfor rendering textures.. tempPoint = new core.Point(), @@ -24773,7 +24813,7 @@ return new TilingSprite(core.Texture.fromImage(imageId, crossorigin, scaleMode),width,height); }; -},{"../core":53,"../core/renderers/canvas/utils/CanvasTinter":71}],113:[function(require,module,exports){ +},{"../core":54,"../core/renderers/canvas/utils/CanvasTinter":72}],114:[function(require,module,exports){ var core = require('../core'), DisplayObject = core.DisplayObject, _tempMatrix = new core.Matrix(); @@ -25045,7 +25085,7 @@ this._originalDestroy(); }; -},{"../core":53}],114:[function(require,module,exports){ +},{"../core":54}],115:[function(require,module,exports){ var core = require('../core'); /** @@ -25075,7 +25115,7 @@ return null; }; -},{"../core":53}],115:[function(require,module,exports){ +},{"../core":54}],116:[function(require,module,exports){ var core = require('../core'); /** @@ -25105,7 +25145,7 @@ return point; }; -},{"../core":53}],116:[function(require,module,exports){ +},{"../core":54}],117:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -25126,7 +25166,7 @@ BitmapText: require('./BitmapText') }; -},{"./BitmapText":110,"./MovieClip":111,"./TilingSprite":112,"./cacheAsBitmap":113,"./getChildByName":114,"./getGlobalPosition":115}],117:[function(require,module,exports){ +},{"./BitmapText":111,"./MovieClip":112,"./TilingSprite":113,"./cacheAsBitmap":114,"./getChildByName":115,"./getGlobalPosition":116}],118:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25183,7 +25223,7 @@ } }); -},{"../../core":53}],118:[function(require,module,exports){ +},{"../../core":54}],119:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYFilter = require('../blur/BlurYFilter'); @@ -25284,7 +25324,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"../blur/BlurYFilter":122}],119:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"../blur/BlurYFilter":123}],120:[function(require,module,exports){ var core = require('../../core'); @@ -25426,7 +25466,7 @@ } }); -},{"../../core":53}],120:[function(require,module,exports){ +},{"../../core":54}],121:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('./BlurXFilter'), BlurYFilter = require('./BlurYFilter'); @@ -25536,7 +25576,7 @@ } }); -},{"../../core":53,"./BlurXFilter":121,"./BlurYFilter":122}],121:[function(require,module,exports){ +},{"../../core":54,"./BlurXFilter":122,"./BlurYFilter":123}],122:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25629,7 +25669,7 @@ } }); -},{"../../core":53}],122:[function(require,module,exports){ +},{"../../core":54}],123:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25715,7 +25755,7 @@ } }); -},{"../../core":53}],123:[function(require,module,exports){ +},{"../../core":54}],124:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25745,7 +25785,7 @@ SmartBlurFilter.prototype.constructor = SmartBlurFilter; module.exports = SmartBlurFilter; -},{"../../core":53}],124:[function(require,module,exports){ +},{"../../core":54}],125:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26281,7 +26321,7 @@ } }); -},{"../../core":53}],125:[function(require,module,exports){ +},{"../../core":54}],126:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26330,7 +26370,7 @@ } }); -},{"../../core":53}],126:[function(require,module,exports){ +},{"../../core":54}],127:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26421,7 +26461,7 @@ } }); -},{"../../core":53}],127:[function(require,module,exports){ +},{"../../core":54}],128:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26447,7 +26487,7 @@ CrossHatchFilter.prototype.constructor = CrossHatchFilter; module.exports = CrossHatchFilter; -},{"../../core":53}],128:[function(require,module,exports){ +},{"../../core":54}],129:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26531,7 +26571,7 @@ } }); -},{"../../core":53}],129:[function(require,module,exports){ +},{"../../core":54}],130:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26603,7 +26643,7 @@ } }); -},{"../../core":53}],130:[function(require,module,exports){ +},{"../../core":54}],131:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26694,7 +26734,7 @@ } }); -},{"../../core":53}],131:[function(require,module,exports){ +},{"../../core":54}],132:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYTintFilter = require('./BlurYTintFilter'); @@ -26887,7 +26927,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"./BlurYTintFilter":130}],132:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"./BlurYTintFilter":131}],133:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26936,7 +26976,7 @@ } }); -},{"../../core":53}],133:[function(require,module,exports){ +},{"../../core":54}],134:[function(require,module,exports){ /** * @file Main export of the PIXI filters library * @author Mat Groves @@ -26975,7 +27015,7 @@ TwistFilter: require('./twist/TwistFilter') }; -},{"./ascii/AsciiFilter":117,"./bloom/BloomFilter":118,"./blur/BlurDirFilter":119,"./blur/BlurFilter":120,"./blur/BlurXFilter":121,"./blur/BlurYFilter":122,"./blur/SmartBlurFilter":123,"./color/ColorMatrixFilter":124,"./color/ColorStepFilter":125,"./convolution/ConvolutionFilter":126,"./crosshatch/CrossHatchFilter":127,"./displacement/DisplacementFilter":128,"./dot/DotScreenFilter":129,"./dropshadow/DropShadowFilter":131,"./gray/GrayFilter":132,"./invert/InvertFilter":134,"./noise/NoiseFilter":135,"./pixelate/PixelateFilter":136,"./rgb/RGBSplitFilter":137,"./sepia/SepiaFilter":138,"./shockwave/ShockwaveFilter":139,"./tiltshift/TiltShiftFilter":141,"./tiltshift/TiltShiftXFilter":142,"./tiltshift/TiltShiftYFilter":143,"./twist/TwistFilter":144}],134:[function(require,module,exports){ +},{"./ascii/AsciiFilter":118,"./bloom/BloomFilter":119,"./blur/BlurDirFilter":120,"./blur/BlurFilter":121,"./blur/BlurXFilter":122,"./blur/BlurYFilter":123,"./blur/SmartBlurFilter":124,"./color/ColorMatrixFilter":125,"./color/ColorStepFilter":126,"./convolution/ConvolutionFilter":127,"./crosshatch/CrossHatchFilter":128,"./displacement/DisplacementFilter":129,"./dot/DotScreenFilter":130,"./dropshadow/DropShadowFilter":132,"./gray/GrayFilter":133,"./invert/InvertFilter":135,"./noise/NoiseFilter":136,"./pixelate/PixelateFilter":137,"./rgb/RGBSplitFilter":138,"./sepia/SepiaFilter":139,"./shockwave/ShockwaveFilter":140,"./tiltshift/TiltShiftFilter":142,"./tiltshift/TiltShiftXFilter":143,"./tiltshift/TiltShiftYFilter":144,"./twist/TwistFilter":145}],135:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27025,7 +27065,7 @@ } }); -},{"../../core":53}],135:[function(require,module,exports){ +},{"../../core":54}],136:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27080,7 +27120,7 @@ } }); -},{"../../core":53}],136:[function(require,module,exports){ +},{"../../core":54}],137:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27131,7 +27171,7 @@ } }); -},{"../../core":53}],137:[function(require,module,exports){ +},{"../../core":54}],138:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27217,7 +27257,7 @@ } }); -},{"../../core":53}],138:[function(require,module,exports){ +},{"../../core":54}],139:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27267,7 +27307,7 @@ } }); -},{"../../core":53}],139:[function(require,module,exports){ +},{"../../core":54}],140:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27355,7 +27395,7 @@ } }); -},{"../../core":53}],140:[function(require,module,exports){ +},{"../../core":54}],141:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27480,7 +27520,7 @@ } }); -},{"../../core":53}],141:[function(require,module,exports){ +},{"../../core":54}],142:[function(require,module,exports){ var core = require('../../core'), TiltShiftXFilter = require('./TiltShiftXFilter'), TiltShiftYFilter = require('./TiltShiftYFilter'); @@ -27590,7 +27630,7 @@ } }); -},{"../../core":53,"./TiltShiftXFilter":142,"./TiltShiftYFilter":143}],142:[function(require,module,exports){ +},{"../../core":54,"./TiltShiftXFilter":143,"./TiltShiftYFilter":144}],143:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27628,7 +27668,7 @@ this.uniforms.delta.value.y = dy / d; }; -},{"./TiltShiftAxisFilter":140}],143:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],144:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27666,7 +27706,7 @@ this.uniforms.delta.value.y = dx / d; }; -},{"./TiltShiftAxisFilter":140}],144:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],145:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27751,7 +27791,7 @@ } }); -},{"../../core":53}],145:[function(require,module,exports){ +},{"../../core":54}],146:[function(require,module,exports){ (function (global){ // run the polyfills require('./polyfill'); @@ -27784,7 +27824,7 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./accessibility":37,"./core":53,"./deprecation":109,"./extras":116,"./filters":133,"./interaction":148,"./loaders":151,"./mesh":158,"./polyfill":163}],146:[function(require,module,exports){ +},{"./accessibility":37,"./core":54,"./deprecation":110,"./extras":117,"./filters":134,"./interaction":149,"./loaders":152,"./mesh":159,"./polyfill":164}],147:[function(require,module,exports){ var core = require('../core'); /** @@ -27833,7 +27873,7 @@ return displayObject.worldTransform.applyInverse(globalPos || this.global, point); }; -},{"../core":53}],147:[function(require,module,exports){ +},{"../core":54}],148:[function(require,module,exports){ var core = require('../core'), InteractionData = require('./InteractionData'); @@ -28709,7 +28749,7 @@ core.WebGLRenderer.registerPlugin('interaction', InteractionManager); core.CanvasRenderer.registerPlugin('interaction', InteractionManager); -},{"../core":53,"./InteractionData":146,"./interactiveTarget":149}],148:[function(require,module,exports){ +},{"../core":54,"./InteractionData":147,"./interactiveTarget":150}],149:[function(require,module,exports){ /** * @file Main export of the PIXI interactions library * @author Mat Groves @@ -28726,7 +28766,7 @@ interactiveTarget: require('./interactiveTarget') }; -},{"./InteractionData":146,"./InteractionManager":147,"./interactiveTarget":149}],149:[function(require,module,exports){ +},{"./InteractionData":147,"./InteractionManager":148,"./interactiveTarget":150}],150:[function(require,module,exports){ /** * Default property values of interactive objects * used by {@link PIXI.interaction.InteractionManager}. @@ -28775,7 +28815,7 @@ module.exports = interactiveTarget; -},{}],150:[function(require,module,exports){ +},{}],151:[function(require,module,exports){ var Resource = require('resource-loader').Resource, core = require('../core'), extras = require('../extras'), @@ -28896,7 +28936,7 @@ }; }; -},{"../core":53,"../extras":116,"path":17,"resource-loader":31}],151:[function(require,module,exports){ +},{"../core":54,"../extras":117,"path":17,"resource-loader":31}],152:[function(require,module,exports){ /** * @file Main export of the PIXI loaders library * @author Mat Groves @@ -28917,7 +28957,7 @@ Resource: require('resource-loader').Resource }; -},{"./bitmapFontParser":150,"./loader":152,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],152:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./loader":153,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],153:[function(require,module,exports){ var ResourceLoader = require('resource-loader'), textureParser = require('./textureParser'), spritesheetParser = require('./spritesheetParser'), @@ -28979,7 +29019,7 @@ Resource.setExtensionXhrType('fnt', Resource.XHR_RESPONSE_TYPE.DOCUMENT); -},{"./bitmapFontParser":150,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],153:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],154:[function(require,module,exports){ var Resource = require('resource-loader').Resource, path = require('path'), core = require('../core'); @@ -29063,7 +29103,7 @@ }; }; -},{"../core":53,"path":17,"resource-loader":31}],154:[function(require,module,exports){ +},{"../core":54,"path":17,"resource-loader":31}],155:[function(require,module,exports){ var core = require('../core'); module.exports = function () @@ -29085,7 +29125,7 @@ }; }; -},{"../core":53}],155:[function(require,module,exports){ +},{"../core":54}],156:[function(require,module,exports){ var core = require('../core'), tempPoint = new core.Point(), tempPolygon = new core.Polygon(); @@ -29561,7 +29601,7 @@ TRIANGLES: 1 }; -},{"../core":53}],156:[function(require,module,exports){ +},{"../core":54}],157:[function(require,module,exports){ var Mesh = require('./Mesh'); /** @@ -29687,7 +29727,7 @@ } }; -},{"./Mesh":155}],157:[function(require,module,exports){ +},{"./Mesh":156}],158:[function(require,module,exports){ var Mesh = require('./Mesh'); var core = require('../core'); @@ -29900,7 +29940,7 @@ this.containerUpdateTransform(); }; -},{"../core":53,"./Mesh":155}],158:[function(require,module,exports){ +},{"../core":54,"./Mesh":156}],159:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -29919,7 +29959,7 @@ MeshShader: require('./webgl/MeshShader') }; -},{"./Mesh":155,"./Plane":156,"./Rope":157,"./webgl/MeshRenderer":159,"./webgl/MeshShader":160}],159:[function(require,module,exports){ +},{"./Mesh":156,"./Plane":157,"./Rope":158,"./webgl/MeshRenderer":160,"./webgl/MeshShader":161}],160:[function(require,module,exports){ var core = require('../../core'), Mesh = require('../Mesh'); @@ -30148,7 +30188,7 @@ core.ObjectRenderer.prototype.destroy.call(this); }; -},{"../../core":53,"../Mesh":155}],160:[function(require,module,exports){ +},{"../../core":54,"../Mesh":156}],161:[function(require,module,exports){ var core = require('../../core'); /** @@ -30209,7 +30249,7 @@ core.ShaderManager.registerPlugin('meshShader', MeshShader); -},{"../../core":53}],161:[function(require,module,exports){ +},{"../../core":54}],162:[function(require,module,exports){ // References: // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign @@ -30225,7 +30265,7 @@ }; } -},{}],162:[function(require,module,exports){ +},{}],163:[function(require,module,exports){ // References: // https://github.com/sindresorhus/object-assign // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign @@ -30235,12 +30275,12 @@ Object.assign = require('object-assign'); } -},{"object-assign":26}],163:[function(require,module,exports){ +},{"object-assign":26}],164:[function(require,module,exports){ require('./Object.assign'); require('./requestAnimationFrame'); require('./Math.sign'); -},{"./Math.sign":161,"./Object.assign":162,"./requestAnimationFrame":164}],164:[function(require,module,exports){ +},{"./Math.sign":162,"./Object.assign":163,"./requestAnimationFrame":165}],165:[function(require,module,exports){ (function (global){ // References: // http://paulirish.com/2011/requestanimationframe-for-smart-animating/ @@ -30311,8 +30351,8 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[145])(145) +},{}]},{},[146])(146) }); -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L1RyYW5zZm9ybS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL1dlYkdMR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZENpcmNsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ29tcGxleFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZExpbmUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9NYXRyaXguanMiLCJzcmMvY29yZS9tYXRoL1BvaW50LmpzIiwic3JjL2NvcmUvbWF0aC9pbmRleC5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0NpcmNsZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0VsbGlwc2UuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Qb2x5Z29uLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZUJ1ZmZlci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL1N5c3RlbVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcy5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9UZXh0dXJlTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9GWEFBRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1F1YWQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0LmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1N0ZW5jaWxNYXNrU3RhY2suanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvc3ByaXRlcy9TcHJpdGUuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL1Nwcml0ZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvc3ByaXRlcy93ZWJnbC9nZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3RleHQvVGV4dC5qcyIsInNyYy9jb3JlL3RleHR1cmVzL0Jhc2VSZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1RleHR1cmVVdnMuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGlja2VyL1RpY2tlci5qcyIsInNyYy9jb3JlL3RpY2tlci9pbmRleC5qcyIsInNyYy9jb3JlL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcy5qcyIsInNyYy9jb3JlL3V0aWxzL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvcGx1Z2luVGFyZ2V0LmpzIiwic3JjL2RlcHJlY2F0aW9uLmpzIiwic3JjL2V4dHJhcy9CaXRtYXBUZXh0LmpzIiwic3JjL2V4dHJhcy9Nb3ZpZUNsaXAuanMiLCJzcmMvZXh0cmFzL1RpbGluZ1Nwcml0ZS5qcyIsInNyYy9leHRyYXMvY2FjaGVBc0JpdG1hcC5qcyIsInNyYy9leHRyYXMvZ2V0Q2hpbGRCeU5hbWUuanMiLCJzcmMvZXh0cmFzL2dldEdsb2JhbFBvc2l0aW9uLmpzIiwic3JjL2V4dHJhcy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2FzY2lpL0FzY2lpRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmxvb20vQmxvb21GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJEaXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJYRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9CbHVyWUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvU21hcnRCbHVyRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvclN0ZXBGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kb3QvRG90U2NyZWVuRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZHJvcHNoYWRvdy9CbHVyWVRpbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ncmF5L0dyYXlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2ludmVydC9JbnZlcnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ub2lzZS9Ob2lzZUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcmdiL1JHQlNwbGl0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvc2VwaWEvU2VwaWFGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdEF4aXNGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3R3aXN0L1R3aXN0RmlsdGVyLmpzIiwic3JjL3NyYy9pbmRleC5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbkRhdGEuanMiLCJzcmMvaW50ZXJhY3Rpb24vSW50ZXJhY3Rpb25NYW5hZ2VyLmpzIiwic3JjL2ludGVyYWN0aW9uL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL2ludGVyYWN0aXZlVGFyZ2V0LmpzIiwic3JjL2xvYWRlcnMvYml0bWFwRm9udFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL2luZGV4LmpzIiwic3JjL2xvYWRlcnMvbG9hZGVyLmpzIiwic3JjL2xvYWRlcnMvc3ByaXRlc2hlZXRQYXJzZXIuanMiLCJzcmMvbG9hZGVycy90ZXh0dXJlUGFyc2VyLmpzIiwic3JjL21lc2gvTWVzaC5qcyIsInNyYy9tZXNoL1BsYW5lLmpzIiwic3JjL21lc2gvUm9wZS5qcyIsInNyYy9tZXNoL2luZGV4LmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFJlbmRlcmVyLmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFNoYWRlci5qcyIsInNyYy9wb2x5ZmlsbC9NYXRoLnNpZ24uanMiLCJzcmMvcG9seWZpbGwvT2JqZWN0LmFzc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9pbmRleC5qcyIsInNyYy9wb2x5ZmlsbC9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM1dUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbnNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25tQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0b0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6bUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIGNyZWF0ZUNvbnRleHQ6IFx0XHRcdHJlcXVpcmUoJy4vbGliL2NyZWF0ZUNvbnRleHQnKSxcbiAgICBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM6IFx0cmVxdWlyZSgnLi9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzJyksXG4gICAgXG4gICAgR0xCdWZmZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xCdWZmZXInKSxcbiAgICBHTEZyYW1lYnVmZmVyOiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9HTEZyYW1lYnVmZmVyJyksXG4gICAgR0xTaGFkZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xTaGFkZXInKSxcbiAgICBHTFRleHR1cmU6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xUZXh0dXJlJyksXG4gICAgXG4gICAgVmVydGV4QXJyYXlPYmplY3Q6IFx0XHRyZXF1aXJlKCcuL2xpYi9WZXJ0ZXhBcnJheU9iamVjdCcpXG5cbn07IiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRU1QVFlfQVJSQVlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xuXG52YXIgQnVmZmVyID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5BUlJBWV9CVUZGRVI7XG5cdHRoaXMuZHJhd1R5cGUgPSBkcmF3VHlwZSB8fCBnbC5TVEFUSUNfRFJBVztcblx0dGhpcy5kYXRhID0gRU1QVFlfQVJSQVlfQlVGRkVSO1xuXG5cdGlmKGRhdGEpXG5cdHtcblx0XHR0aGlzLnVwbG9hZChkYXRhKTtcblx0fVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKGRhdGEsIG9mZnNldCwgZG9udEJpbmQpXG57XG5cdC8vIHRvZG8gLSBuZWVkZWQ/XG5cdC8vaWYoIWRvbnRCaW5kKVxuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRcblx0ZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuXHRvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuXHRpZih0aGlzLmRhdGEuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpXG5cdHtcdFxuXHRcdGdsLmJ1ZmZlclN1YkRhdGEodGhpcy50eXBlLCBvZmZzZXQsIGRhdGEpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLCBkYXRhLCB0aGlzLmRyYXdUeXBlKTtcblx0fVxuXG5cdHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKTtcbn1cblxuQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIGdsLkFSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgdHlwZSwgZHJhd1R5cGUpO1xufVxuXG4vL1RPRE8gRGVzdHJveS4uXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyO1xuXG4iLCJcbnZhciBUZXh0dXJlID0gcmVxdWlyZSgnLi9HTFRleHR1cmUnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgRnJhbWVidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRnJhbWVidWZmZXIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcblx0dGhpcy5zdGVuY2lsID0gbnVsbDtcblx0dGhpcy50ZXh0dXJlID0gbnVsbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMTAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5lbmFibGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IG5ldyBUZXh0dXJlKGdsKTtcblxuXHR0aGlzLnRleHR1cmUuYmluZCgpO1xuXG5cdC8vZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlLnRleHR1cmUsIDApO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlU3RlbmNpbCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5zdGVuY2lsKXJldHVybjtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuc3RlbmNpbCA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgIFxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCB0aGlzLnN0ZW5jaWwpO1xuICAgIFxuICAgIC8vIFRPRE8uLiB0aGlzIGlzIGRlcHRoIEFORCBzdGVuY2lsP1xuICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTCwgIHRoaXMud2lkdGggICwgdGhpcy5oZWlnaHQgKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oIHIsIGcsIGIsIGEgKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIGdsLmNsZWFyQ29sb3IociwgZywgYiwgYSk7XG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZnJhbWVidWZmZXIgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdGlmICggdGhpcy50ZXh0dXJlIClcbiAgICB7XG4gICAgXHR0aGlzLnRleHR1cmUudXBsb2FkRGF0YShudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdGlmICggdGhpcy5zdGVuY2lsIClcbiAgICB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgc3RlbmNpbCBidWZmZXIgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlUkdCQSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHR2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbURhdGEoZ2wsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xuXHR0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSk7XG5cbiAgICBmYm8udW5iaW5kKCk7XG4gICAgXG4gICAgcmV0dXJuIGZibztcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlRmxvYXQzMiA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHQvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZS4uXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZS5mcm9tRGF0YShnbCwgZGF0YSwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpXG5cbiAgICBmYm8udW5iaW5kKCk7XG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lYnVmZmVyO1xuXG4iLCJcbnZhciBjb21waWxlUHJvZ3JhbSA9IHJlcXVpcmUoJy4vc2hhZGVyL2NvbXBpbGVQcm9ncmFtJyksXG5cdGV4dHJhY3RBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdEF0dHJpYnV0ZXMnKSxcblx0ZXh0cmFjdFVuaWZvcm1zID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdFVuaWZvcm1zJyksXG5cdGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IHJlcXVpcmUoJy4vc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCcpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBTaGFkZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xudmFyIFNoYWRlciA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0Ly8gRmlyc3QgY29tcGlsZSB0aGUgcHJvZ3JhbS4uXG5cdHRoaXMucHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXHQvLyBuZXh0IGV4dHJhY3QgdGhlIGF0dHJpYnV0ZXNcblx0dGhpcy5hdHRyaWJ1dGVzID0gZXh0cmFjdEF0dHJpYnV0ZXMoZ2wsIHRoaXMucHJvZ3JhbSk7IFxuXG4gICAgdmFyIHVuaWZvcm1EYXRhID0gZXh0cmFjdFVuaWZvcm1zKGdsLCB0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy51bmlmb3JtcyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCggZ2wsIHVuaWZvcm1EYXRhICk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgVGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBhIFdlYkdMIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gZm9ybWF0IHtudW1iZXJ9IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlJHQkFcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IHRoZSBnbCB0eXBlIG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5VTlNJR05FRF9CWVRFXG4gKi9cbnZhciBUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHQvLyBzb21lIHNldHRpbmdzLi5cblx0dGhpcy5taXBtYXAgPSBmYWxzZTtcblxuXHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdCB8fCBnbC5SR0JBO1xuXHR0aGlzLnR5cGUgPSB0eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7XG5cblxufVxuXG4vKipcbiAqIEBwYXJhbSB7UElYSS5nbENvcmUuVGV4dHVyZX0gW3Zhcm5hbWVdIFtkZXNjcmlwdGlvbl1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oc291cmNlKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblxuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgc291cmNlKTtcbn1cblxudmFyIEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IGZhbHNlO1xuXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWREYXRhID0gZnVuY3Rpb24oZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5iaW5kKCk7XG5cdFxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgdGhpcy53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG5cblx0aWYoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcblx0e1xuXHRcdGlmKCFGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUpXG5cdFx0e1xuXHRcdFx0dmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO1xuXHRcdFx0XG5cdFx0XHRpZihleHQpXG5cdFx0XHR7XG5cdFx0XHRcdEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHlwZSA9IGdsLkZMT0FUO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdC8vIFRPRE8gc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXNcblx0XHR0aGlzLnR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuXHR9XG5cblx0Ly8gd2hhdCB0eXBlIG9mIGRhdGE/XG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcblx0Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBkYXRhIHx8IG51bGwpO1xuXG59XG5cblRleHR1cmUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihsb2NhdGlvbilcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRpZihsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKVxuXHR7XG5cdFx0Z2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uKTtcblx0fVxuXG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1pbkZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGlmKHRoaXMubWlwbWFwKVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCk7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xuXHR9XHRcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWFnRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVNaXBtYXAgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHRoaXMubWlwbWFwID0gdHJ1ZTtcblx0Z2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZUxpbmVhclNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKHRydWUpO1xuXHR0aGlzLm1hZ0ZpbHRlcih0cnVlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTmVhcmVzdFNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKGZhbHNlKTtcblx0dGhpcy5tYWdGaWx0ZXIoZmFsc2UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwQ2xhbXAgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBSZXBlYXQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cdFxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5SRVBFQVQpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG59XG5cbi8vVGV4dHVyZS5cblRleHR1cmUuZnJvbVNvdXJjZSA9IGZ1bmN0aW9uKGdsLCBzb3VyY2UsIHByZW11bHRpcGx5QWxwaGEpXG57XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhIHx8IGZhbHNlO1xuXHR0ZXh0dXJlLnVwbG9hZChzb3VyY2UpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5UZXh0dXJlLmZyb21EYXRhID0gZnVuY3Rpb24oZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdC8vY29uc29sZS5sb2coZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnVwbG9hZERhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG4iLCJcbi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxuLy8gc3RhdGUgb2JqZWN0Ly9cblxuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChnbClcbntcblx0XG5cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gKFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpXG4gICAgKTtcblxuLy9cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gbnVsbDtcblxuXHRpZih0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbilcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvID0gdGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsgIFxuXHR9XG5cblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG5cdHRoaXMuZGlydHkgPSBmYWxzZTtcblxuXHRcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVydGV4QXJyYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFZlcnRleEFycmF5T2JqZWN0O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5uYXRpdmVWYW8pOyAgXG5cblx0XHRpZih0aGlzLmRpcnR5KVxuXHRcdHtcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0XHR9XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgXG5cdHtcblx0XHR2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW2ldO1xuXHRcdGF0dHJpYi5idWZmZXIuYmluZCgpO1x0XG5cblx0XHRhdHRyaWIuYXR0cmlidXRlLnBvaW50ZXIoYXR0cmliLnR5cGUsIGF0dHJpYi5ub3JtYWxpemVkLCBhdHRyaWIuc3RyaWRlLCBhdHRyaWIuc3RhcnQpOyBcblx0XHRcblx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWIuYXR0cmlidXRlLmxvY2F0aW9uKTtcblx0fTtcblxuXHR0aGlzLmluZGV4QnVmZmVyLmJpbmQoKTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgYXR0cmlidXRlLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXJ0KVxue1xuICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHtcbiAgICBcdGJ1ZmZlcjogXHRidWZmZXIsXG4gICAgXHRhdHRyaWJ1dGU6IFx0YXR0cmlidXRlLFxuXG4gICAgXHRsb2NhdGlvbjogXHRhdHRyaWJ1dGUubG9jYXRpb24sXG5cdCBcdHR5cGU6IFx0XHR0eXBlIHx8IHRoaXMuZ2wuRkxPQVQsXG5cdCBcdG5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWQgfHwgZmFsc2UsXG5cdCBcdHN0cmlkZTogXHRzdHJpZGUgfHwgMCxcblx0IFx0c3RhcnQ6IFx0XHRzdGFydCB8fCAwXG5cdH0pXG5cblx0dGhpcy5kaXJ0eSA9IHRydWU7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRpb25zKVxue1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBidWZmZXI7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHR5cGUsIHNpemUsIHN0YXJ0KVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5kcmF3RWxlbWVudHModHlwZSwgc2l6ZSwgZ2wuVU5TSUdORURfU0hPUlQsIHN0YXJ0KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBDb250ZXh0XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIENPTlRFWFRfVUlEID0gMDtcblxudmFyIGNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbihjYW52YXMsIG9wdGlvbnMpXG57XG4gICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRpb25zKSB8fCBcbiAgICBcdCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdsKVxuICAgIHtcbiAgICAgICAgLy8gZmFpbCwgbm90IGFibGUgdG8gZ2V0IGEgY29udGV4dFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHdlYkdMLiBUcnkgdXNpbmcgdGhlIGNhbnZhcyByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIC8vIG1pZ2h0IHdhbnQgdG8gcGhhc2UgdGhpcyBvdXQ/XG4gICAgZ2wuaWQgPSBDT05URVhUX1VJRCsrO1xuXG4gICAgcmV0dXJuIGdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbnRleHQ7XG5cbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBzZXRWZXJ0ZXhBdHRyaWJBcnJheXMgPSBmdW5jdGlvbiAoZ2wsIGF0dHJpYnMpXG57XHRcbiAgIC8vIGNvbnNvbGUubG9nKGdsLmlkKVxuICAgIHZhciBkYXRhID0gR0xfTUFQW2dsLmlkXTtcblxuICAgIGlmKCFkYXRhKVxuICAgIHtcblx0ICAgdmFyIG1heEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0XHRkYXRhID0gR0xfTUFQW2dsLmlkXSA9IHt0ZW1wQXR0cmliU3RhdGU6bmV3IEFycmF5KG1heEF0dHJpYnMpXG5cdFx0XHRcdCBcdCBcdFx0ICAgLGF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKX07XG5cdH1cblx0XG4gICAgdmFyIGksXG4gICAgXHR0ZW1wQXR0cmliU3RhdGUgPSBkYXRhLnRlbXBBdHRyaWJTdGF0ZSxcbiAgICBcdGF0dHJpYlN0YXRlID0gZGF0YS5hdHRyaWJTdGF0ZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wQXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yIChpIGluIGF0dHJpYnMpXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbYXR0cmlic1tpXS5sb2NhdGlvbl0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDE7IGkgPCBhdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChhdHRyaWJTdGF0ZVtpXSAhPT0gdGVtcEF0dHJpYlN0YXRlW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJTdGF0ZVtpXSA9IHRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM7IiwiXG5cblxuXG5jb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuICAgIHZhciBnbFZlcnRTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbnZhciBjb21waWxlU2hhZGVyID0gZnVuY3Rpb24gKGdsLCB0eXBlLCBzcmMpXG57XG4gICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuXG4gICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlUHJvZ3JhbTtcblxuIiwiXG5cbnZhciBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBzaXplKSBcbntcbiAgICBzd2l0Y2ggKHR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICBjYXNlICd2ZWMyJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjNCc6ICAgICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KDQgKiBzaXplKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnaXZlYzInOiAgIFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDIgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWM0JzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2wnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY2FzZSAnYnZlYzInOlxuXG4gICAgICAgICAgICByZXR1cm4gYm9vbGVhbkFycmF5KCAyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzQnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSg0ICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDFdKTtcblxuICAgICAgICBjYXNlICdtYXQzJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0NCc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMCwgMV0pO1xuICAgIH1cbn1cblxudmFyIGJvb2xlYW5BcnJheSA9IGZ1bmN0aW9uKHNpemUpXG57XG4gICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgXG4gICAge1xuICAgICAgICBhcnJheVtpXSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdFZhbHVlO1xuIiwiXG52YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIG1hcFNpemUgPSByZXF1aXJlKCcuL21hcFNpemUnKTtcblxudmFyIGV4dHJhY3RBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcblxuICAgIHZhciB0b3RhbEF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9BVFRSSUJVVEVTKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEF0dHJpYnV0ZXM7IGkrKykgXG4gICAge1xuICAgICAgICB2YXIgYXR0cmliRGF0YSA9IGdsLmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpKTtcbiAgICAgICAgdmFyIHR5cGUgPSBtYXBUeXBlKGdsLCBhdHRyaWJEYXRhLnR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNbYXR0cmliRGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgIHR5cGU6dHlwZSxcbiAgICAgICAgICAgIHNpemU6bWFwU2l6ZSh0eXBlKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOmdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGF0dHJpYkRhdGEubmFtZSksXG4gICAgICAgICAgICAvL1RPRE8gLSBtYWtlIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAgICAgICAgICAgIHBvaW50ZXI6ZnVuY3Rpb24odHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydCl7XG5cbiAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmxvY2F0aW9uLHRoaXMuc2l6ZSwgdHlwZSB8fCBnbC5GTE9BVCwgbm9ybWFsaXplZCB8fCBmYWxzZSwgc3RyaWRlIHx8IDAsIHN0YXJ0IHx8IDApOyBcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzOyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0cmFjdEF0dHJpYnV0ZXM7XG5cbiIsInZhciBtYXBUeXBlID0gcmVxdWlyZSgnLi9tYXBUeXBlJyk7XG52YXIgZGVmYXVsdFZhbHVlID0gcmVxdWlyZSgnLi9kZWZhdWx0VmFsdWUnKTtcblxuXG52YXIgZXh0cmFjdFVuaWZvcm1zID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG5cdHZhciB1bmlmb3JtcyA9IHt9O1xuXHRcbiAgICB2YXIgdG90YWxVbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbFVuaWZvcm1zOyBpKyspIFxuICAgIHtcbiAgICBcdHZhciB1bmlmb3JtRGF0YSA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSk7XG4gICAgXHR2YXIgbmFtZSA9IHVuaWZvcm1EYXRhLm5hbWUucmVwbGFjZSgvXFxbLio/XFxdLywgXCJcIik7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgdW5pZm9ybURhdGEudHlwZSApO1xuXG4gICAgXHR1bmlmb3Jtc1tuYW1lXSA9IHtcbiAgICBcdFx0dHlwZTp0eXBlLFxuICAgIFx0XHRzaXplOnVuaWZvcm1EYXRhLnNpemUsXG4gICAgXHRcdGxvY2F0aW9uOmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSxcbiAgICBcdFx0dmFsdWU6ZGVmYXVsdFZhbHVlKHR5cGUsIHVuaWZvcm1EYXRhLnNpemUpXG4gICAgXHR9XG4gICAgfTtcblx0XG5cdHJldHVybiB1bmlmb3JtcztcdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RVbmlmb3JtcztcblxuIiwiXG52YXIgZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gZnVuY3Rpb24oZ2wsIHVuaWZvcm1EYXRhKVxue1xuICAgIC8vIHRoaXMgaXMgdGhlIG9iamVjdCB3ZSB3aWxsIGJlIHNlbmRpbmcgYmFjay5cbiAgICAvLyBhbiBvYmplY3QgaGllcmFjaHkgd2lsbCBiZSBjcmVhdGVkIGZvciBzdHJ1Y3RzXG4gICAgdmFyIHVuaWZvcm1zID0ge2RhdGE6e319O1xuXG4gICAgdW5pZm9ybXMuZ2wgPSBnbDtcbiAgICBcbiAgICB2YXIgdW5pZm9ybUtleXM9IE9iamVjdC5rZXlzKHVuaWZvcm1EYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybUtleXMubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGZ1bGxOYW1lID0gdW5pZm9ybUtleXNbaV1cblxuICAgICAgICB2YXIgbmFtZVRva2VucyA9IGZ1bGxOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHZhciB1bmlmb3JtR3JvdXAgPSBnZXRVbmlmb3JtR3JvdXAobmFtZVRva2VucywgdW5pZm9ybXMpO1xuXG4gICAgICAgIHZhciB1bmlmb3JtID0gIHVuaWZvcm1EYXRhW2Z1bGxOYW1lXTtcbiAgICAgICAgdW5pZm9ybUdyb3VwLmRhdGFbbmFtZV0gPSB1bmlmb3JtO1xuXG4gICAgICAgIHVuaWZvcm1Hcm91cC5nbCA9IGdsO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bmlmb3JtR3JvdXAsIG5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2VuZXJhdGVHZXR0ZXIobmFtZSksXG4gICAgICAgICAgICBzZXQ6IGdlbmVyYXRlU2V0dGVyKG5hbWUsIHVuaWZvcm0pXG4gICAgICAgIH0pXG4gICAgfTtcblxuICAgIHJldHVybiB1bmlmb3Jtcztcbn1cblxudmFyIGdlbmVyYXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSlcbntcblx0dmFyIHRlbXBsYXRlID0gZ2V0dGVyVGVtcGxhdGUucmVwbGFjZSgnJSUnLCBuYW1lKTtcblx0cmV0dXJuIG5ldyBGdW5jdGlvbih0ZW1wbGF0ZSk7XG59XG5cbnZhciBnZW5lcmF0ZVNldHRlciA9IGZ1bmN0aW9uKG5hbWUsIHVuaWZvcm0pXG57XG4gICAgdmFyIHRlbXBsYXRlID0gc2V0dGVyVGVtcGxhdGUucmVwbGFjZSgvJSUvZywgbmFtZSk7XG4gICAgdmFyIHNldFRlbXBsYXRlXG4gICAgXG4gICAgaWYodW5pZm9ybS5zaXplID09PSAxKVxuICAgIHtcbiAgICAgICAgc2V0VGVtcGxhdGUgPSBHTFNMX1RPX1NJTkdMRV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19BUlJBWV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuXG4gICAgaWYoc2V0VGVtcGxhdGUpXG4gICAge1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIlxcbnRoaXMuZ2wuXCIgKyBzZXRUZW1wbGF0ZSArIFwiO1wiO1xuICAgIH1cblxuICBcdHJldHVybiBuZXcgRnVuY3Rpb24oJ3ZhbHVlJywgdGVtcGxhdGUpO1xufVxuXG52YXIgZ2V0VW5pZm9ybUdyb3VwID0gZnVuY3Rpb24obmFtZVRva2VucywgdW5pZm9ybSlcbntcbiAgICB2YXIgY3VyID0gdW5pZm9ybTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZVRva2Vucy5sZW5ndGggLSAxOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIG8gPSBjdXJbbmFtZVRva2Vuc1tpXV0gfHwge2RhdGE6e319O1xuICAgICAgICBjdXJbbmFtZVRva2Vuc1tpXV0gPSBvO1xuICAgICAgICBjdXIgPSBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gY3VyXG59XG5cbnZhciBnZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAncmV0dXJuIHRoaXMuZGF0YS4lJS52YWx1ZTsnLFxuXS5qb2luKCdcXG4nKTtcblxudmFyIHNldHRlclRlbXBsYXRlID0gW1xuICAgICd0aGlzLmRhdGEuJSUudmFsdWUgPSB2YWx1ZTsnLFxuICAgICd2YXIgbG9jYXRpb24gPSB0aGlzLmRhdGEuJSUubG9jYXRpb247J1xuXS5qb2luKCdcXG4nKTtcblxuXG52YXIgR0xTTF9UT19TSU5HTEVfU0VUVEVSUyA9IHtcblxuICAgICdmbG9hdCc6ICAgICd1bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ3ZlYzQnOiAgICAgJ3VuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdidmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdidmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ21hdDInOiAgICAgJ3VuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuICAgICdtYXQzJzogICAgICd1bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0NCc6ICAgICAndW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG5cbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbnZhciBHTFNMX1RPX0FSUkFZX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpJyxcblxuICAgICd2ZWMyJzogICAgICd1bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWMzJzogICAgICd1bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgIFx0XG4gICAgJ2ludCc6ICAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgIFxuICAgICdzYW1wbGVyMkQnOid1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0O1xuXG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbih0eXBlKSBcbnsgXG4gICAgcmV0dXJuIEdMU0xfVE9fU0laRVt0eXBlXTtcbn1cblxuXG52YXIgR0xTTF9UT19TSVpFID0ge1xuICAgICdmbG9hdCc6ICAgIDEsXG4gICAgJ3ZlYzInOiAgICAgMixcbiAgICAndmVjMyc6ICAgICAzLFxuICAgICd2ZWM0JzogICAgIDQsXG5cbiAgICAnaW50JzogICAgICAxLFxuICAgICdpdmVjMic6ICAgIDIsXG4gICAgJ2l2ZWMzJzogICAgMyxcbiAgICAnaXZlYzQnOiAgICA0LFxuXG4gICAgJ2Jvb2wnOiAgICAgMSxcbiAgICAnYnZlYzInOiAgICAyLFxuICAgICdidmVjMyc6ICAgIDMsXG4gICAgJ2J2ZWM0JzogICAgNCxcblxuICAgICdtYXQyJzogICAgIDQsXG4gICAgJ21hdDMnOiAgICAgOSxcbiAgICAnbWF0NCc6ICAgICAxNixcblxuICAgICdzYW1wbGVyMkQnOiAgMVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFNpemU7XG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbihnbCwgdHlwZSkgXG57XG4gICAgaWYoIUdMX1RBQkxFKSBcbiAgICB7XG4gICAgICAgIHZhciB0eXBlTmFtZXMgPSBPYmplY3Qua2V5cyhHTF9UT19HTFNMX1RZUEVTKTtcblxuICAgICAgICBHTF9UQUJMRSA9IHt9O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlTmFtZXMubGVuZ3RoOyArK2kpIFxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdG4gPSB0eXBlTmFtZXNbaV07XG4gICAgICAgICAgICBHTF9UQUJMRVsgZ2xbdG5dIF0gPSBHTF9UT19HTFNMX1RZUEVTW3RuXTtcbiAgICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gR0xfVEFCTEVbdHlwZV07XG59XG5cbnZhciBHTF9UQUJMRSA9IG51bGw7XG5cbnZhciBHTF9UT19HTFNMX1RZUEVTID0ge1xuICAnRkxPQVQnOiAgICAgICAnZmxvYXQnLFxuICAnRkxPQVRfVkVDMic6ICAndmVjMicsXG4gICdGTE9BVF9WRUMzJzogICd2ZWMzJyxcbiAgJ0ZMT0FUX1ZFQzQnOiAgJ3ZlYzQnLFxuXG4gICdJTlQnOiAgICAgICAgICdpbnQnLFxuICAnSU5UX1ZFQzInOiAgICAnaXZlYzInLFxuICAnSU5UX1ZFQzMnOiAgICAnaXZlYzMnLFxuICAnSU5UX1ZFQzQnOiAgICAnaXZlYzQnLFxuICBcbiAgJ0JPT0wnOiAgICAgICAgJ2Jvb2wnLFxuICAnQk9PTF9WRUMyJzogICAnYnZlYzInLFxuICAnQk9PTF9WRUMzJzogICAnYnZlYzMnLFxuICAnQk9PTF9WRUM0JzogICAnYnZlYzQnLFxuICBcbiAgJ0ZMT0FUX01BVDInOiAgJ21hdDInLFxuICAnRkxPQVRfTUFUMyc6ICAnbWF0MycsXG4gICdGTE9BVF9NQVQ0JzogICdtYXQ0JyxcbiAgXG4gICdTQU1QTEVSXzJEJzogICdzYW1wbGVyMkQnICBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiLyohXG4gKiBhc3luY1xuICogaHR0cHM6Ly9naXRodWIuY29tL2Nhb2xhbi9hc3luY1xuICpcbiAqIENvcHlyaWdodCAyMDEwLTIwMTQgQ2FvbGFuIE1jTWFob25cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9Cb29sKHYpIHtcbiAgICAgICAgcmV0dXJuICEhdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90SWQodikge1xuICAgICAgICByZXR1cm4gIXY7XG4gICAgfVxuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBwcmV2aW91c19hc3luYztcblxuICAgIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAgIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICAgIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsIHx8XG4gICAgICAgICAgICB0aGlzO1xuXG4gICAgaWYgKHJvb3QgIT0gbnVsbCkge1xuICAgICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsaXR5IGZ1bmN0aW9ucyAvLy8vXG5cbiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIHZhciBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xuXG4gICAgLy8gUG9ydGVkIGZyb20gdW5kZXJzY29yZS5qcyBpc09iamVjdFxuICAgIHZhciBfaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2lzQXJyYXlMaWtlKGFycikge1xuICAgICAgICByZXR1cm4gX2lzQXJyYXkoYXJyKSB8fCAoXG4gICAgICAgICAgICAvLyBoYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAgICAgICAgdHlwZW9mIGFyci5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgICAgYXJyLmxlbmd0aCAlIDEgPT09IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXJyYXlFYWNoKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaW5kZXhdLCBpbmRleCwgYXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IGFyci5sZW5ndGgsXG4gICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcmFuZ2UoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9tYXAoQXJyYXkoY291bnQpLCBmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gaTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZHVjZShhcnIsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgIF9hcnJheUVhY2goYXJyLCBmdW5jdGlvbiAoeCwgaSwgYSkge1xuICAgICAgICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHgsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZvckVhY2hPZihvYmplY3QsIGl0ZXJhdG9yKSB7XG4gICAgICAgIF9hcnJheUVhY2goX2tleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaXRlcmF0b3Iob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbmRleE9mKGFyciwgaXRlbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9rZXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW47XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBpZiAoX2lzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGkgOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBfa2V5cyhjb2xsKTtcbiAgICAgICAgICAgIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ga2V5c1tpXSA6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2ltaWxhciB0byBFUzYncyByZXN0IHBhcmFtIChodHRwOi8vYXJpeWEub2ZpbGFicy5jb20vMjAxMy8wMy9lczYtYW5kLXJlc3QtcGFyYW1ldGVyLmh0bWwpXG4gICAgLy8gVGhpcyBhY2N1bXVsYXRlcyB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGFuIGFycmF5LCBhZnRlciBhIGdpdmVuIGluZGV4LlxuICAgIC8vIEZyb20gdW5kZXJzY29yZS5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMjE0MCkuXG4gICAgZnVuY3Rpb24gX3Jlc3RQYXJhbShmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IHVudXNlZCBidXQgaGFuZGxlIGNhc2VzIG91dHNpZGUgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQ6XG4gICAgICAgICAgICAvLyB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgIC8vIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIC8vICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgICAgICAgIC8vIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IodmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG5cbiAgICAvLyBjYXB0dXJlIHRoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIGd1YXJkIGFnYWluc3QgZmFrZVRpbWVyIG1vY2tzXG4gICAgdmFyIF9zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcblxuICAgIHZhciBfZGVsYXkgPSBfc2V0SW1tZWRpYXRlID8gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgX3NldEltbWVkaWF0ZShmbik7XG4gICAgfSA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IF9kZWxheTtcbiAgICB9XG4gICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gX3NldEltbWVkaWF0ZSA/IF9kZWxheSA6IGFzeW5jLm5leHRUaWNrO1xuXG5cbiAgICBhc3luYy5mb3JFYWNoID1cbiAgICBhc3luYy5lYWNoID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2YoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID1cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cblxuICAgIGFzeW5jLmZvckVhY2hMaW1pdCA9XG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2VhY2hPZkxpbWl0KGxpbWl0KShhcnIsIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZiA9XG4gICAgYXN5bmMuZWFjaE9mID0gZnVuY3Rpb24gKG9iamVjdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdCB8fCBbXTtcblxuICAgICAgICB2YXIgaXRlciA9IF9rZXlJdGVyYXRvcihvYmplY3QpO1xuICAgICAgICB2YXIga2V5LCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgICAgIHdoaWxlICgoa2V5ID0gaXRlcigpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXksIG9ubHlfb25jZShkb25lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkID09PSAwKSBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgICAgY29tcGxldGVkLS07XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGtleSBpcyBudWxsIGluIGNhc2UgaXRlcmF0b3IgaXNuJ3QgZXhoYXVzdGVkXG4gICAgICAgICAgICAvLyBhbmQgZG9uZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBudWxsICYmIGNvbXBsZXRlZCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaE9mU2VyaWVzID1cbiAgICBhc3luYy5lYWNoT2ZTZXJpZXMgPSBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShpdGVyYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLmZvckVhY2hPZkxpbWl0ID1cbiAgICBhc3luYy5lYWNoT2ZMaW1pdCA9IGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgX2VhY2hPZkxpbWl0KGxpbWl0KShvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9lYWNoT2ZMaW1pdChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgICAgICBvYmogPSBvYmogfHwgW107XG4gICAgICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUgJiYgcnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmICFlcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBuZXh0S2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iob2JqW2tleV0sIGtleSwgb25seV9vbmNlKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZG9QYXJhbGxlbChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oYXN5bmMuZWFjaE9mLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWxMaW1pdChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKF9lYWNoT2ZMaW1pdChsaW1pdCksIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9TZXJpZXMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZlNlcmllcywgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UoYXJyKSA/IFtdIDoge307XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih2YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9hc3luY01hcCk7XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMuaW5qZWN0ID1cbiAgICBhc3luYy5mb2xkbCA9XG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hPZlNlcmllcyhhcnIsIGZ1bmN0aW9uICh4LCBpLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgeCwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBtZW1vKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvbGRyID1cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgaWRlbnRpdHkpLnJldmVyc2UoKTtcbiAgICAgICAgYXN5bmMucmVkdWNlKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0b3I7XG4gICAgICAgICAgICBpdGVyYXRvciA9IG1lbW87XG4gICAgICAgICAgICBtZW1vID0gX2lzQXJyYXkoYXJyKSA/IFtdIDoge307XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoT2YoYXJyLCBmdW5jdGlvbih2LCBrLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgdiwgaywgY2IpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4OiBpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5zZWxlY3QgPVxuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RMaW1pdCA9XG4gICAgYXN5bmMuZmlsdGVyTGltaXQgPSBkb1BhcmFsbGVsTGltaXQoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RTZXJpZXMgPVxuICAgIGFzeW5jLmZpbHRlclNlcmllcyA9IGRvU2VyaWVzKF9maWx0ZXIpO1xuXG4gICAgZnVuY3Rpb24gX3JlamVjdChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9maWx0ZXIoZWFjaGZuLCBhcnIsIGZ1bmN0aW9uKHZhbHVlLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBjYighdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBhc3luYy5yZWplY3QgPSBkb1BhcmFsbGVsKF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdFNlcmllcyA9IGRvU2VyaWVzKF9yZWplY3QpO1xuXG4gICAgZnVuY3Rpb24gX2NyZWF0ZVRlc3RlcihlYWNoZm4sIGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYikge1xuICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIGNiKGdldFJlc3VsdChmYWxzZSwgdm9pZCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZSh4LCBfLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYiAmJiBjaGVjayh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoZ2V0UmVzdWx0KHRydWUsIHgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgZWFjaGZuKGFyciwgbGltaXQsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2IgPSBpdGVyYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGxpbWl0O1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy5hbnkgPVxuICAgIGFzeW5jLnNvbWUgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5zb21lTGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCB0b0Jvb2wsIGlkZW50aXR5KTtcblxuICAgIGFzeW5jLmFsbCA9XG4gICAgYXN5bmMuZXZlcnkgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgbm90SWQsIG5vdElkKTtcblxuICAgIGFzeW5jLmV2ZXJ5TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBub3RJZCwgbm90SWQpO1xuXG4gICAgZnVuY3Rpb24gX2ZpbmRHZXRSZXN1bHQodiwgeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgYXN5bmMuZGV0ZWN0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0U2VyaWVzID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZTZXJpZXMsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuXG4gICAgYXN5bmMuc29ydEJ5ID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLm1hcChhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKGVyciwgY3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7dmFsdWU6IHgsIGNyaXRlcmlhOiBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChjb21wYXJhdG9yKSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNvbmN1cnJlbmN5LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gcmVtYWluaW5nVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBfaW5kZXhPZihsaXN0ZW5lcnMsIGZuKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRhc2tDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLS07XG4gICAgICAgICAgICBfYXJyYXlFYWNoKGxpc3RlbmVycy5zbGljZSgwKSwgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBfYXJyYXlFYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9mb3JFYWNoT2YocmVzdWx0cywgZnVuY3Rpb24odmFsLCBya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHRhc2tDb21wbGV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRlYWQtbG9ja3NcbiAgICAgICAgICAgIHZhciBsZW4gPSByZXF1aXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZGVwO1xuICAgICAgICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZGVwID0gdGFza3NbcmVxdWlyZXNbbGVuXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGluZXhpc3RhbnQgZGVwZW5kZW5jeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzQXJyYXkoZGVwKSAmJiBfaW5kZXhPZihkZXAsIGspID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXMgY3ljbGljIGRlcGVuZGVuY2llcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5uaW5nVGFza3MgPCBjb25jdXJyZW5jeSAmJiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzKys7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLnJldHJ5ID0gZnVuY3Rpb24odGltZXMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBERUZBVUxUX1RJTUVTID0gNTtcbiAgICAgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuXG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbDogREVGQVVMVF9JTlRFUlZBTFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KXtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0ID09PSAnbnVtYmVyJyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodCwgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYodHlwZW9mIHQgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBhY2MudGltZXMgPSBwYXJzZUludCh0LnRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgICAgICAgICBhY2MuaW50ZXJ2YWwgPSBwYXJzZUludCh0LmludGVydmFsLCAxMCkgfHwgREVGQVVMVF9JTlRFUlZBTDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGZvciBcXCd0aW1lc1xcJzogJyArIHR5cGVvZiB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgMSB8fCBsZW5ndGggPiAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIC0gbXVzdCBiZSBlaXRoZXIgKHRhc2spLCAodGFzaywgY2FsbGJhY2spLCAodGltZXMsIHRhc2spIG9yICh0aW1lcywgdGFzaywgY2FsbGJhY2spJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoIDw9IDIgJiYgdHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRzLCB0aW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBvcHRzLnRhc2sgPSB0YXNrO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRUYXNrKHdyYXBwZWRDYWxsYmFjaywgd3JhcHBlZFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCh0YXNrLCBmaW5hbEF0dGVtcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VyaWVzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayhmdW5jdGlvbihlcnIsIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXNDYWxsYmFjayghZXJyIHx8IGZpbmFsQXR0ZW1wdCwge2VycjogZXJyLCByZXN1bHQ6IHJlc3VsdH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVkUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmV0cnlJbnRlcnZhbChpbnRlcnZhbCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAob3B0cy50aW1lcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsQXR0ZW1wdCA9ICEob3B0cy50aW1lcy09MSk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQob3B0cy50YXNrLCBmaW5hbEF0dGVtcHQpKTtcbiAgICAgICAgICAgICAgICBpZighZmluYWxBdHRlbXB0ICYmIG9wdHMuaW50ZXJ2YWwgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUludGVydmFsKG9wdHMuaW50ZXJ2YWwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IG9wdHMuY2FsbGJhY2spKGRhdGEuZXJyLCBkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIG9wdHMuY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2s7XG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBJdGVyYXRvcihpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgW2Vycl0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuc3VyZUFzeW5jKGl0ZXJhdG9yKS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfcGFyYWxsZWwoZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IF9pc0FycmF5TGlrZSh0YXNrcykgPyBbXSA6IHt9O1xuXG4gICAgICAgIGVhY2hmbih0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGtleSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRhc2soX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2YsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChfZWFjaE9mTGltaXQobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKGFzeW5jLmVhY2hPZlNlcmllcywgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuaXRlcmF0b3IgPSBmdW5jdGlvbiAodGFza3MpIHtcbiAgICAgICAgZnVuY3Rpb24gbWFrZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm4ubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgdGFza3MubGVuZ3RoIC0gMSkgPyBtYWtlQ2FsbGJhY2soaW5kZXggKyAxKTogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIChmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoY2FsbEFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLCBhcmdzLmNvbmNhdChjYWxsQXJncylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gX2NvbmNhdChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoeSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG4gICAgICAgIGlmICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0LmFwcGx5KHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1doaWxzdCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiArK2NhbGxzIDw9IDEgfHwgdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZHVyaW5nID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG5cbiAgICAgICAgdmFyIG5leHQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjaGVjayk7XG4gICAgICAgICAgICAgICAgdGVzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24oZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRydXRoKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QoY2hlY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb0R1cmluZyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgYXN5bmMuZHVyaW5nKGZ1bmN0aW9uKG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjYWxscysrIDwgMSkge1xuICAgICAgICAgICAgICAgIG5leHQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3F1ZXVlKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHBvcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayB8fCBub29wXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9uZXh0KHEsIHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIF9hcnJheUVhY2godGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2god29ya2Vyc0xpc3QsIGZ1bmN0aW9uICh3b3JrZXIsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya2VyID09PSB0YXNrICYmICFyZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBub29wLFxuICAgICAgICAgICAgZW1wdHk6IG5vb3AsXG4gICAgICAgICAgICBkcmFpbjogbm9vcCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5kcmFpbiA9IG5vb3A7XG4gICAgICAgICAgICAgICAgcS50YXNrcyA9IFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnQ6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrcyA9IHEucGF5bG9hZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS5wYXlsb2FkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS50YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9tYXAodGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5wdXNoKHRhc2tzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShfbmV4dChxLCB0YXNrcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyKGRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtlcnNMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSBmYWxzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bWVDb3VudCA9IE1hdGgubWluKHEuY29uY3VycmVuY3ksIHEudGFza3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHJlc3VtZUNvdW50OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBxID0gX3F1ZXVlKGZ1bmN0aW9uIChpdGVtcywgY2IpIHtcbiAgICAgICAgICAgIHdvcmtlcihpdGVtc1swXSwgY2IpO1xuICAgICAgICB9LCBjb25jdXJyZW5jeSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLnByaW9yaXR5UXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuXG4gICAgICAgIGZ1bmN0aW9uIF9jb21wYXJlVGFza3MoYSwgYil7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgICB2YXIgYmVnID0gLTEsXG4gICAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgc2VxdWVuY2VbbWlkXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWcgPSBtaWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmVnO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBfcXVldWUod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2NvbnNvbGVfZm4obmFtZSkge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2goYXJncywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlW25hbWVdKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgaWRlbnRpdHk7XG4gICAgICAgIHZhciBtZW1vaXplZCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24gbWVtb2l6ZWQoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBtZW1vW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0gPSBbY2FsbGJhY2tdO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW9ba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH07XG5cbiAgICBhc3luYy51bm1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3RpbWVzKG1hcHBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG1hcHBlcihfcmFuZ2UoY291bnQpLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jLnRpbWVzID0gX3RpbWVzKGFzeW5jLm1hcCk7XG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBfdGltZXMoYXN5bmMubWFwU2VyaWVzKTtcbiAgICBhc3luYy50aW1lc0xpbWl0ID0gZnVuY3Rpb24gKGNvdW50LCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5tYXBMaW1pdChfcmFuZ2UoY291bnQpLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VxID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5vb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnJlZHVjZShmbnMsIGFyZ3MsIGZ1bmN0aW9uIChuZXdhcmdzLCBmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBuZXdhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBuZXh0YXJncykge1xuICAgICAgICAgICAgICAgICAgICBjYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY29tcG9zZSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIF9hcHBseUVhY2goZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uKGZucywgYXJncykge1xuICAgICAgICAgICAgdmFyIGdvID0gX3Jlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgXywgY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncy5jb25jYXQoW2NiXSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ28uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ287XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmFwcGx5RWFjaCA9IF9hcHBseUVhY2goYXN5bmMuZWFjaE9mKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZlNlcmllcyk7XG5cblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seV9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIgdGFzayA9IGVuc3VyZUFzeW5jKGZuKTtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmVuc3VyZUFzeW5jID0gZW5zdXJlQXN5bmM7XG5cbiAgICBhc3luYy5jb25zdGFudCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICAgIHZhciBhcmdzID0gW251bGxdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhc3luYy53cmFwU3luYyA9XG4gICAgYXN5bmMuYXN5bmNpZnkgPSBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChfaXNPYmplY3QocmVzdWx0KSAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIubWVzc2FnZSA/IGVyciA6IG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcblxuICAgIGRpbSA9IGRpbSB8fCAyO1xuXG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLFxuICAgICAgICBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcbiAgICAgICAgdHJpYW5nbGVzID0gW107XG5cbiAgICBpZiAoIW91dGVyTm9kZSkgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBzaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgc2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIHN1bSA9IDAsXG4gICAgICAgIGksIGosIGxhc3Q7XG5cbiAgICAvLyBjYWxjdWxhdGUgb3JpZ2luYWwgd2luZGluZyBvcmRlciBvZiBhIHBvbHlnb24gcmluZ1xuICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuXG4gICAgLy8gbGluayBwb2ludHMgaW50byBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHN1bSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG4gICAgaWYgKCFzdGFydCkgcmV0dXJuIHN0YXJ0O1xuICAgIGlmICghZW5kKSBlbmQgPSBzdGFydDtcblxuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcCA9IGVuZCA9IHAucHJldjtcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuICAgIHJldHVybiBlbmQ7XG59XG5cbi8vIG1haW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBhcyBhIGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIHBhc3MpIHtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuICAgIGlmICghcGFzcyAmJiBzaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICB2YXIgc3RvcCA9IGVhcixcbiAgICAgICAgcHJldiwgbmV4dDtcblxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuICAgIHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcbiAgICAgICAgcHJldiA9IGVhci5wcmV2O1xuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XG5cbiAgICAgICAgaWYgKHNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIHNpemUpIDogaXNFYXIoZWFyKSkge1xuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXG4gICAgICAgICAgICByZW1vdmVOb2RlKGVhcik7XG5cbiAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRpY2UgbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhlYXIsIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIHNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICAvLyBmaXJzdCBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBpbmNyZWFzaW5nIHotb3JkZXJcbiAgICB2YXIgcCA9IGVhci5uZXh0WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyB0aGVuIGxvb2sgZm9yIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICBwID0gZWFyLnByZXZaO1xuXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgLy8gYSBzZWxmLWludGVyc2VjdGlvbiB3aGVyZSBlZGdlICh2W2ktMV0sdltpXSkgaW50ZXJzZWN0cyAodltpKzFdLHZbaSsyXSlcbiAgICAgICAgaWYgKGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHA7XG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBsb29rIGZvciBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgICAgICAgICBhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiA9IGIubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBhID0gYS5uZXh0O1xuICAgIH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG4gICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuICAgICAgICBpZiAobGlzdCA9PT0gbGlzdC5uZXh0KSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuICAgICAgICBxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcbiAgICB9XG5cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0ZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlWChhLCBiKSB7XG4gICAgcmV0dXJuIGEueCAtIGIueDtcbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkge1xuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xuICAgICAgICBmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcbiAgICB9XG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBwID0gb3V0ZXJOb2RlLFxuICAgICAgICBoeCA9IGhvbGUueCxcbiAgICAgICAgaHkgPSBob2xlLnksXG4gICAgICAgIHF4ID0gLUluZmluaXR5LFxuICAgICAgICBtO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgdGFuO1xuXG4gICAgcCA9IG0ubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBzdG9wKSB7XG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG0ueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG0ueSA/IGh4IDogcXgsIGh5LCBtLngsIG0ueSwgaHkgPCBtLnkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuICAgICAgICAgICAgaWYgKCh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIHAueCA+IG0ueCkpICYmIGxvY2FsbHlJbnNpZGUocCwgaG9sZSkpIHtcbiAgICAgICAgICAgICAgICBtID0gcDtcbiAgICAgICAgICAgICAgICB0YW5NaW4gPSB0YW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBtO1xufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgIHAucHJldlogPSBwLnByZXY7XG4gICAgICAgIHAubmV4dFogPSBwLm5leHQ7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgcC5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKHApO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIGRvIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHFTaXplID09PSAwIHx8ICFxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAueiA8PSBxLnopIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuICAgICAgICBpblNpemUgKj0gMjtcblxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIHNpemUgb2YgdGhlIGRhdGEgYm91bmRpbmcgYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpIC8gc2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpIC8gc2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LngpIGxlZnRtb3N0ID0gcDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gbGVmdG1vc3Q7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcbiAgICByZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXF1YWxzKGEsIGIpIHx8IGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcbiAgICAgICAgICAgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKTtcbn1cblxuLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xufVxuXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXG4gICAgICAgICAgIGFyZWEocDIsIHEyLCBwMSkgPiAwICE9PSBhcmVhKHAyLCBxMiwgcTEpID4gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG4vLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG4gICAgICAgIGFuID0gYS5uZXh0LFxuICAgICAgICBicCA9IGIucHJldjtcblxuICAgIGEubmV4dCA9IGI7XG4gICAgYi5wcmV2ID0gYTtcblxuICAgIGEyLm5leHQgPSBhbjtcbiAgICBhbi5wcmV2ID0gYTI7XG5cbiAgICBiMi5uZXh0ID0gYTI7XG4gICAgYTIucHJldiA9IGIyO1xuXG4gICAgYnAubmV4dCA9IGIyO1xuICAgIGIyLnByZXYgPSBicDtcblxuICAgIHJldHVybiBiMjtcbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgcC5wcmV2ID0gcDtcbiAgICAgICAgcC5uZXh0ID0gcDtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHAubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgcC5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xuICAgICAgICBsYXN0Lm5leHQgPSBwO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XG4gICAgcC5uZXh0LnByZXYgPSBwLnByZXY7XG4gICAgcC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cbiAgICBpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG4gICAgaWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcbiAgICAvLyB2ZXJ0aWNlIGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRpY2Ugbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vXG4vLyBXZSBzdG9yZSBvdXIgRUUgb2JqZWN0cyBpbiBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBgfmAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Qgb3ZlcnJpZGRlbiBvclxuLy8gdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy8gV2UgYWxzbyBhc3N1bWUgdGhhdCBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV2ZW50IG5hbWVcbi8vIGlzIGFuIEVTNiBTeW1ib2wuXG4vL1xudmFyIHByZWZpeCA9IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nID8gJ34nIDogZmFsc2U7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgRXZlbnRFbWl0dGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBDb250ZXh0IGZvciBmdW5jdGlvbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSBlbWl0IG9uY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTWluaW1hbCBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIEV2ZW50RW1pdHRlciBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7IC8qIE5vdGhpbmcgdG8gc2V0ICovIH1cblxuLyoqXG4gKiBIb2xkcyB0aGUgYXNzaWduZWQgRXZlbnRFbWl0dGVycyBieSBuYW1lLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBhc3NpZ25lZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBleGlzdHMgV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtBcnJheXxCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQsIGV4aXN0cykge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgYXZhaWxhYmxlID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChleGlzdHMpIHJldHVybiAhIWF2YWlsYWJsZTtcbiAgaWYgKCFhdmFpbGFibGUpIHJldHVybiBbXTtcbiAgaWYgKGF2YWlsYWJsZS5mbikgcmV0dXJuIFthdmFpbGFibGUuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXZhaWxhYmxlLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGF2YWlsYWJsZVtpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB0byBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJbmRpY2F0aW9uIGlmIHdlJ3ZlIGVtaXR0ZWQgYW4gZXZlbnQuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IEV2ZW50TGlzdGVuZXIgZm9yIHRoZSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0b259IGZuIENhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGQgYW4gRXZlbnRMaXN0ZW5lciB0aGF0J3Mgb25seSBjYWxsZWQgb25jZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IHRoaXMsIHRydWUpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKSB0aGlzLl9ldmVudHMgPSBwcmVmaXggPyB7fSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHRoaXMuX2V2ZW50c1tldnRdID0gbGlzdGVuZXI7XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5fZXZlbnRzW2V2dF0uZm4pIHRoaXMuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIGVsc2UgdGhpcy5fZXZlbnRzW2V2dF0gPSBbXG4gICAgICB0aGlzLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3ZSB3YW50IHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciB0aGF0IHdlIG5lZWQgdG8gZmluZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgT25seSByZW1vdmUgbGlzdGVuZXJzIG1hdGNoaW5nIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmNlIGxpc3RlbmVycy5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGV2ZW50cyA9IFtdO1xuXG4gIGlmIChmbikge1xuICAgIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgICAgbGlzdGVuZXJzLmZuICE9PSBmblxuICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzLm9uY2UpXG4gICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVycy5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm5cbiAgICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpXG4gICAgICAgICAgfHwgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gIC8vXG4gIGlmIChldmVudHMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbZXZ0XTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycyBvciBvbmx5IHRoZSBsaXN0ZW5lcnMgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvci5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcztcblxuICBpZiAoZXZlbnQpIGRlbGV0ZSB0aGlzLl9ldmVudHNbcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudF07XG4gIGVsc2UgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYXBwbHkgYW55bW9yZS5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLypqc2hpbnQgb25ldmFyOiBmYWxzZSwgaW5kZW50OjQgKi9cbi8qZ2xvYmFsIHNldEltbWVkaWF0ZTogZmFsc2UsIHNldFRpbWVvdXQ6IGZhbHNlLCBjb25zb2xlOiBmYWxzZSAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciByb290LCBwcmV2aW91c19hc3luYztcblxuICAgIHJvb3QgPSB0aGlzO1xuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgIHByZXZpb3VzX2FzeW5jID0gcm9vdC5hc3luYztcbiAgICB9XG5cbiAgICBhc3luYy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmFzeW5jID0gcHJldmlvdXNfYXN5bmM7XG4gICAgICAgIHJldHVybiBhc3luYztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb25seV9vbmNlKGZuKSB7XG4gICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGNhbGxlZCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseShyb290LCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIHZhciBfZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaV0sIGksIGFycik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIF9tYXAgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBpZiAoYXJyLm1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5tYXAoaXRlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih4LCBpLCBhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgdmFyIF9yZWR1Y2UgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBpZiAoYXJyLnJlZHVjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8pO1xuICAgICAgICB9XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICB2YXIgX2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIC8vLy8gZXhwb3J0ZWQgYXN5bmMgbW9kdWxlIGZ1bmN0aW9ucyAvLy8vXG5cbiAgICAvLy8vIG5leHRUaWNrIGltcGxlbWVudGF0aW9uIHdpdGggYnJvd3Nlci1jb21wYXRpYmxlIGZhbGxiYWNrIC8vLy9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICEocHJvY2Vzcy5uZXh0VGljaykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgICBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAvLyBub3QgYSBkaXJlY3QgYWxpYXMgZm9yIElFMTAgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBvbmx5X29uY2UoZG9uZSkgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaCA9IGFzeW5jLmVhY2g7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmICghYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgIHZhciBpdGVyYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA+PSBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2hTZXJpZXMgPSBhc3luYy5lYWNoU2VyaWVzO1xuXG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZm4gPSBfZWFjaExpbWl0KGxpbWl0KTtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgW2FyciwgaXRlcmF0b3IsIGNhbGxiYWNrXSk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPSBhc3luYy5lYWNoTGltaXQ7XG5cbiAgICB2YXIgX2VhY2hMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBpZiAoIWFyci5sZW5ndGggfHwgbGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmIHN0YXJ0ZWQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihhcnJbc3RhcnRlZCAtIDFdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBkb1BhcmFsbGVsID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZG9QYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24obGltaXQsIGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW19lYWNoTGltaXQobGltaXQpXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvU2VyaWVzID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hTZXJpZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuXG4gICAgdmFyIF9hc3luY01hcCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW3guaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX21hcExpbWl0KGxpbWl0KShhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHZhciBfbWFwTGltaXQgPSBmdW5jdGlvbihsaW1pdCkge1xuICAgICAgICByZXR1cm4gZG9QYXJhbGxlbExpbWl0KGxpbWl0LCBfYXN5bmNNYXApO1xuICAgIH07XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gaW5qZWN0IGFsaWFzXG4gICAgYXN5bmMuaW5qZWN0ID0gYXN5bmMucmVkdWNlO1xuICAgIC8vIGZvbGRsIGFsaWFzXG4gICAgYXN5bmMuZm9sZGwgPSBhc3luYy5yZWR1Y2U7XG5cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIC8vIGZvbGRyIGFsaWFzXG4gICAgYXN5bmMuZm9sZHIgPSBhc3luYy5yZWR1Y2VSaWdodDtcblxuICAgIHZhciBfZmlsdGVyID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZmlsdGVyID0gZG9QYXJhbGxlbChfZmlsdGVyKTtcbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcbiAgICAvLyBzZWxlY3QgYWxpYXNcbiAgICBhc3luYy5zZWxlY3QgPSBhc3luYy5maWx0ZXI7XG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID0gYXN5bmMuZmlsdGVyU2VyaWVzO1xuXG4gICAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIHZhciBfZGV0ZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5kZXRlY3QgPSBkb1BhcmFsbGVsKF9kZXRlY3QpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IGRvU2VyaWVzKF9kZXRlY3QpO1xuXG4gICAgYXN5bmMuc29tZSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGFueSBhbGlhc1xuICAgIGFzeW5jLmFueSA9IGFzeW5jLnNvbWU7XG5cbiAgICBhc3luYy5ldmVyeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbGwgYWxpYXNcbiAgICBhc3luYy5hbGwgPSBhc3luYy5ldmVyeTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChmbiksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aFxuICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB2YXIgYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGZuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0YXNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tXG4gICAgICAgICAgICBfZWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudCBmaW5hbCBjYWxsYmFjayBmcm9tIGNhbGxpbmcgaXRzZWxmIGlmIGl0IGVycm9yc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICB0aGVDYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2VhY2goa2V5cywgZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gX2lzQXJyYXkodGFza3Nba10pID8gdGFza3Nba106IFt0YXNrc1trXV07XG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2FmZVJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgX2VhY2goX2tleXMocmVzdWx0cyksIGZ1bmN0aW9uKHJrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW3JrZXldID0gcmVzdWx0c1tya2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3Agc3Vic2VxdWVudCBlcnJvcnMgaGl0dGluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIE1hdGguYWJzKHRhc2subGVuZ3RoIC0gMSkpIHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuICAgICAgICAvLyBVc2UgZGVmYXVsdHMgaWYgdGltZXMgbm90IHBhc3NlZFxuICAgICAgICBpZiAodHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgICAgICB0aW1lcyA9IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRpbWVzIGlzIGEgbnVtYmVyXG4gICAgICAgIHRpbWVzID0gcGFyc2VJbnQodGltZXMsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICB2YXIgd3JhcHBlZFRhc2sgPSBmdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICB2YXIgcmV0cnlBdHRlbXB0ID0gZnVuY3Rpb24odGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2hpbGUgKHRpbWVzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQodGFzaywgISh0aW1lcy09MSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IGNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQsIHJ1biB0aGlzIGFzIGEgY29udHJvbGwgZmxvd1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2tcbiAgICB9O1xuXG4gICAgYXN5bmMud2F0ZXJmYWxsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIV9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd3JhcEl0ZXJhdG9yID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2god3JhcEl0ZXJhdG9yKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gZnVuY3Rpb24oZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKF9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgZWFjaGZuLm1hcCh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgZWFjaGZuLmVhY2goX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBhc3luYy5tYXAsIGVhY2g6IGFzeW5jLmVhY2ggfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKHRhc2tzLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBfbWFwTGltaXQobGltaXQpLCBlYWNoOiBfZWFjaExpbWl0KGxpbWl0KSB9LCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGFzeW5jLm1hcFNlcmllcyh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhfa2V5cyh0YXNrcyksIGZ1bmN0aW9uIChrLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRhc2tzW2tdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIHZhciBtYWtlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbWFrZUNhbGxiYWNrKDApO1xuICAgIH07XG5cbiAgICBhc3luYy5hcHBseSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBfY29uY2F0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNiKSB7XG4gICAgICAgICAgICBmbih4LCBmdW5jdGlvbiAoZXJyLCB5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMud2hpbHN0KHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICh0ZXN0LmFwcGx5KG51bGwsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0ZXN0KCkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3luYy51bnRpbCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvVW50aWwgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICghdGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvVW50aWwoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICBxLnRhc2tzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbnVsbCxcbiAgICAgICAgICAgIGVtcHR5OiBudWxsLFxuICAgICAgICAgICAgZHJhaW46IG51bGwsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcS5kcmFpbiA9IG51bGw7XG4gICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghcS5wYXVzZWQgJiYgd29ya2VycyA8IHEuY29uY3VycmVuY3kgJiYgcS50YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBxLnRhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLmVtcHR5ICYmIHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4gJiYgcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyKHRhc2suZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHEuY29uY3VycmVuY3k7IHcrKykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICBlbmQgPSBzZXF1ZW5jZS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciBtaWQgPSBiZWcgKyAoKGVuZCAtIGJlZyArIDEpID4+PiAxKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKF9iaW5hcnlTZWFyY2gocS50YXNrcywgaXRlbSwgX2NvbXBhcmVUYXNrcykgKyAxLCAwLCBpdGVtKTtcblxuICAgICAgICAgICAgICBpZiAocS5zYXR1cmF0ZWQgJiYgcS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvblxuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5jYXJnbyA9IGZ1bmN0aW9uICh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHdvcmtpbmcgICAgID0gZmFsc2UsXG4gICAgICAgICAgICB0YXNrcyAgICAgICA9IFtdO1xuXG4gICAgICAgIHZhciBjYXJnbyA9IHtcbiAgICAgICAgICAgIHRhc2tzOiB0YXNrcyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgZHJhaW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX2VhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXJnby5kcmFpbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXJnby5zYXR1cmF0ZWQgJiYgdGFza3MubGVuZ3RoID09PSBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnby5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShjYXJnby5wcm9jZXNzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICAgICAgICAgIGlmICh3b3JraW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZihjYXJnby5kcmFpbiAmJiAhY2FyZ28uZHJhaW5lZCkgY2FyZ28uZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdHMgPSB0eXBlb2YgcGF5bG9hZCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRhc2tzLnNwbGljZSgwLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza3Muc3BsaWNlKDAsIHRhc2tzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZHMgPSBfbWFwKHRzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFzay5kYXRhO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoY2FyZ28uZW1wdHkpIGNhcmdvLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgd29ya2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2VyKGRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgX2VhY2godHMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNhcmdvO1xuICAgIH07XG5cbiAgICB2YXIgX2NvbnNvbGVfZm4gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy50aW1lcyA9IGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb3VudGVyID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY291bnRlci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luYy5tYXAoY291bnRlciwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwU2VyaWVzKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGF0LCBbZXJyXS5jb25jYXQocmVzdWx0cykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICByZXR1cm4gYXN5bmMuc2VxLmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIHZhciBfYXBwbHlFYWNoID0gZnVuY3Rpb24gKGVhY2hmbiwgZm5zIC8qYXJncy4uLiovKSB7XG4gICAgICAgIHZhciBnbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgZnVuY3Rpb24gKGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5hcHBseUVhY2ggPSBkb1BhcmFsbGVsKF9hcHBseUVhY2gpO1xuICAgIGFzeW5jLmFwcGx5RWFjaFNlcmllcyA9IGRvU2VyaWVzKF9hcHBseUVhY2gpO1xuXG4gICAgYXN5bmMuZm9yZXZlciA9IGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xuXG4gICAgLy8gTm9kZS5qc1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwidmFyIGFzeW5jICAgICAgID0gcmVxdWlyZSgnYXN5bmMnKSxcbiAgICB1cmxQYXJzZXIgICA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIFJlc291cmNlICAgID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBtdWx0aXBsZSByZXNvdXJjZXMgdG8gbG9hZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIGNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvZ3Jlc3MgcGVyY2VudCBvZiB0aGUgbG9hZGVyIGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogTG9hZGluZyBzdGF0ZSBvZiB0aGUgbG9hZGVyLCB0cnVlIGlmIGl0IGlzIGN1cnJlbnRseSBsb2FkaW5nIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0b3RhbCBwcm9ncmVzcyB0aGF0IGEgc2luZ2xlIHJlc291cmNlIHJlcHJlc2VudHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWlkZGxld2FyZSB0byBydW4gYmVmb3JlIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGFmdGVyIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9sb2FkUmVzb3VyY2VgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRMb2FkUmVzb3VyY2UgPSB0aGlzLl9sb2FkUmVzb3VyY2UuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uTG9hZGAgZnVuY3Rpb24gYm91bmQgd2l0aCB0aGlzIG9iamVjdCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uTG9hZCA9IHRoaXMuX29uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlIGJ1ZmZlciB0aGF0IGZpbGxzIHVudGlsIGBsb2FkYCBpcyBjYWxsZWQgdG8gc3RhcnQgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlW119XG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyID0gW107XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHRyYWNrIGxvYWQgY29tcGxldGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb3VyY2VzIHdhaXRpbmcgdG8gYmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX3F1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fYm91bmRMb2FkUmVzb3VyY2UsIGNvbmN1cnJlbmN5KTtcblxuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGlzIGxvYWRlciBrZXllZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgUmVzb3VyY2U+fVxuICAgICAqL1xuICAgIHRoaXMucmVzb3VyY2VzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCBvciBlcnJvcmVkIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgb25jZSBwZXIgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbG9hZGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdGFydFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHF1ZXVlZCByZXNvdXJjZXMgYWxsIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY29tcGxldGVcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuLyoqXG4gKiBBZGRzIGEgcmVzb3VyY2UgKG9yIG11bHRpcGxlIHJlc291cmNlcykgdG8gdGhlIGxvYWRlciBxdWV1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGEgd2lkZSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwYXJhbWV0ZXJzLiBUaGUgb25seSB0aGluZyB0aGF0IGlzIGFsd2F5c1xuICogcmVxdWlyZWQgdGhlIHVybCB0byBsb2FkLiBBbGwgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6XG4gKlxuICogYGBganNcbiAqIGxvYWRlclxuICogICAgIC8vIG5vcm1hbCBwYXJhbSBzeW50YXhcbiAqICAgICAuYWRkKCdrZXknLCAnaHR0cDovLy4uLicsIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJylcbiAqXG4gKiAgICAgLy8gb2JqZWN0IHN5bnRheFxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MicsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIG5hbWU6ICdrZXkzJyxcbiAqICAgICAgICAgdXJsOiAnaHR0cDovLy4uLidcbiAqICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge31cbiAqICAgICB9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwczovLy4uLicsXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9LFxuICogICAgICAgICBjcm9zc09yaWdpbjogdHJ1ZVxuICogICAgIH0pXG4gKlxuICogICAgIC8vIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJscyBvciBib3RoXG4gKiAgICAgLmFkZChbXG4gKiAgICAgICAgIHsgbmFtZTogJ2tleTQnLCB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgeyB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgJ2h0dHA6Ly8uLi4nXG4gKiAgICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAYWxpYXMgZW5xdWV1ZVxuICogQHBhcmFtIFtuYW1lXSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZCwgaWYgbm90IHBhc3NlZCB0aGUgdXJsIGlzIHVzZWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIHJlbGF0aXZlIHRvIHRoZSBiYXNlVXJsIG9mIHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcGFyYW0gW29wdGlvbnMuY3Jvc3NPcmlnaW5dIHtib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5YSFJfTE9BRF9UWVBFfSBIb3cgc2hvdWxkIHRoaXMgcmVzb3VyY2UgYmUgbG9hZGVkP1xuICogQHBhcmFtIFtvcHRpb25zLnhoclR5cGU9UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVF0ge1Jlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFfSBIb3cgc2hvdWxkIHRoZSBkYXRhIGJlaW5nXG4gKiAgICAgIGxvYWRlZCBiZSBpbnRlcnByZXRlZCB3aGVuIHVzaW5nIFhIUj9cbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMgc3BlY2lmaWMgcmVzb3VyY2UgY29tcGxldGVzIGxvYWRpbmcuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWRkID0gTG9hZGVyLnByb3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgb3B0aW9ucywgY2IpIHtcbiAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciB1cmxzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChuYW1lW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGlmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW5zdGVhZCBvZiBwYXJhbXNcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNiID0gdXJsIHx8IG5hbWUuY2FsbGJhY2sgfHwgbmFtZS5vbkNvbXBsZXRlO1xuICAgICAgICBvcHRpb25zID0gbmFtZTtcbiAgICAgICAgdXJsID0gbmFtZS51cmw7XG4gICAgICAgIG5hbWUgPSBuYW1lLm5hbWUgfHwgbmFtZS5rZXkgfHwgbmFtZS51cmw7XG4gICAgfVxuXG4gICAgLy8gY2FzZSB3aGVyZSBubyBuYW1lIGlzIHBhc3NlZCBzaGlmdCBhbGwgYXJncyBvdmVyIGJ5IG9uZS5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdXJsO1xuICAgICAgICB1cmwgPSBuYW1lO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IHdlIHNoaWZ0ZWQgbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9wZXIgdXJsLlxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVybCBwYXNzZWQgdG8gYWRkIHJlc291cmNlIHRvIGxvYWRlci4nKTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zIGFyZSBvcHRpb25hbCBzbyBwZW9wbGUgbWlnaHQgcGFzcyBhIGZ1bmN0aW9uIGFuZCBubyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW25hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzb3VyY2Ugd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBleGlzdHMuJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJhc2UgdXJsIGlmIHRoaXMgaXNuJ3QgYW4gYWJzb2x1dGUgdXJsXG4gICAgdXJsID0gdGhpcy5faGFuZGxlQmFzZVVybCh1cmwpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBzdG9yZSB0aGUgcmVzb3VyY2VcbiAgICB0aGlzLnJlc291cmNlc1tuYW1lXSA9IG5ldyBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlc291cmNlc1tuYW1lXS5vbmNlKCdhZnRlck1pZGRsZXdhcmUnLCBjYik7XG4gICAgfVxuXG4gICAgdGhpcy5fbnVtVG9Mb2FkKys7XG5cbiAgICAvLyBpZiBhbHJlYWR5IGxvYWRpbmcgYWRkIGl0IHRvIHRoZSB3b3JrZXIgcXVldWVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9ICgxMDAgLSB0aGlzLnByb2dyZXNzKSAvICh0aGlzLl9xdWV1ZS5sZW5ndGgoKSArIHRoaXMuX3F1ZXVlLnJ1bm5pbmcoKSk7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBidWZmZXIgaXQgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlIGxhdGVyXG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDEwMCAvIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5Mb2FkZXIucHJvdG90eXBlLl9oYW5kbGVCYXNlVXJsID0gZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBwYXJzZWRVcmwgPSB1cmxQYXJzZXIucGFyc2UodXJsKTtcblxuICAgIC8vIGFic29sdXRlIHVybCwganVzdCB1c2UgaXQgYXMgaXMuXG4gICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCB8fCBwYXJzZWRVcmwucGF0aG5hbWUuaW5kZXhPZignLy8nKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIC8vIGlmIGJhc2VVcmwgZG9lc24ndCBlbmQgaW4gc2xhc2ggYW5kIHVybCBkb2Vzbid0IHN0YXJ0IHdpdGggc2xhc2gsIHRoZW4gYWRkIGEgc2xhc2ggaW5iZXR3ZWVuXG4gICAgaWYgKFxuICAgICAgICB0aGlzLmJhc2VVcmwubGVuZ3RoICYmXG4gICAgICAgIHRoaXMuYmFzZVVybC5sYXN0SW5kZXhPZignLycpICE9PSB0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSAmJlxuICAgICAgICB1cmwuY2hhckF0KDApICE9PSAnLydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybCArICcvJyArIHVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmJlZm9yZSogdGhlXG4gKiByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKlxuICogQGFsaWFzIHByZVxuICogQHBhcmFtIG1pZGRsZXdhcmUge2Z1bmN0aW9ufSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5iZWZvcmUgPSBMb2FkZXIucHJvdG90eXBlLnByZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB1cCBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gdGhhdCB3aWxsIHJ1biAqYWZ0ZXIqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyB1c2VcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWZ0ZXIgPSBMb2FkZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZS5wdXNoKGZuKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHF1ZXVlIG9mIHRoZSBsb2FkZXIgdG8gcHJlcGFyZSBmb3IgYSBuZXcgbG9hZC5cbiAqXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gdGhpcy5iYXNlVXJsID0gYmFzZVVybCB8fCAnJztcblxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9ncmVzc0NodW5rID0gMDtcblxuICAgIC8vIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUubGVuZ3RoID0gMDtcbiAgICAvLyB0aGlzLl9hZnRlck1pZGRsZXdhcmUubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fbnVtVG9Mb2FkID0gMDtcblxuICAgIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgICB0aGlzLl9xdWV1ZS5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBTdGFydHMgbG9hZGluZyB0aGUgcXVldWVkIHJlc291cmNlcy5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgY29tcGxldGVgIGV2ZW50LlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAvLyByZWdpc3RlciBjb21wbGV0ZSBjYWxsYmFjayBpZiB0aGV5IHBhc3Mgb25lXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBxdWV1ZSBoYXMgYWxyZWFkeSBzdGFydGVkIHdlIGFyZSBkb25lIGhlcmVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBub3RpZnkgb2Ygc3RhcnRcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBzdGFydCB0aGUgaW50ZXJuYWwgcXVldWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMuX2J1ZmZlcltpXSk7XG4gICAgfVxuXG4gICAgLy8gZW1wdHkgdGhlIGJ1ZmZlclxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIExvYWRzIGEgc2luZ2xlIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc291cmNlID0gZnVuY3Rpb24gKHJlc291cmNlLCBkZXF1ZXVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmVzb3VyY2UuX2RlcXVldWUgPSBkZXF1ZXVlO1xuXG4gICAgdGhpcy5fcnVuTWlkZGxld2FyZShyZXNvdXJjZSwgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXNvdXJjZS5vbigncHJvZ3Jlc3MnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAncHJvZ3Jlc3MnKSk7XG5cbiAgICAgICAgcmVzb3VyY2UubG9hZChzZWxmLl9ib3VuZE9uTG9hZCk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbmNlIGVhY2ggcmVzb3VyY2UgaGFzIGxvYWRlZC5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX29uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMsIHRoaXMucmVzb3VyY2VzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGVhY2ggdGltZSBhIHJlc291cmNlcyBpcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAZmlyZXMgZXJyb3JcbiAqIEBmaXJlcyBsb2FkXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICB0aGlzLnByb2dyZXNzICs9IHRoaXMuX3Byb2dyZXNzQ2h1bms7XG5cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgcmVzb3VyY2UpO1xuXG4gICAgLy8gcnVuIG1pZGRsZXdhcmUsIHRoaXMgKm11c3QqIGhhcHBlbiBiZWZvcmUgZGVxdWV1ZSBzbyBzdWItYXNzZXRzIGdldCBhZGRlZCBwcm9wZXJseVxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2FmdGVyTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvdXJjZS5lbWl0KCdhZnRlck1pZGRsZXdhcmUnLCByZXNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5fbnVtVG9Mb2FkLS07XG5cbiAgICAgICAgLy8gZG8gY29tcGxldGlvbiBjaGVja1xuICAgICAgICBpZiAodGhpcy5fbnVtVG9Mb2FkID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgdGhpcy5fb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzb3VyY2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCByZXNvdXJjZS5lcnJvciwgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkJywgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG5cblxuICAgIC8vIHJlbW92ZSB0aGlzIHJlc291cmNlIGZyb20gdGhlIGFzeW5jIHF1ZXVlXG4gICAgcmVzb3VyY2UuX2RlcXVldWUoKTtcbn07XG5cbi8qKlxuICogUnVuIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9uIGEgcmVzb3VyY2UuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fcnVuTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZm5zLCBjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGFzeW5jLmVhY2hTZXJpZXMoZm5zLCBmdW5jdGlvbiAoZm4sIG5leHQpIHtcbiAgICAgICAgZm4uY2FsbChzZWxmLCByZXNvdXJjZSwgbmV4dCk7XG4gICAgfSwgY2IuYmluZCh0aGlzLCByZXNvdXJjZSkpO1xufTtcblxuTG9hZGVyLkxPQURfVFlQRSA9IFJlc291cmNlLkxPQURfVFlQRTtcbkxvYWRlci5YSFJfUkVBRFlfU1RBVEUgPSBSZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEU7XG5Mb2FkZXIuWEhSX1JFU1BPTlNFX1RZUEUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRTtcbiIsInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgX3VybCA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIC8vIHRlc3RzIGlzIENPUlMgaXMgc3VwcG9ydGVkIGluIFhIUiwgaWYgbm90IHdlIG5lZWQgdG8gdXNlIFhEUlxuICAgIHVzZVhkciA9ICEhKHdpbmRvdy5YRG9tYWluUmVxdWVzdCAmJiAhKCd3aXRoQ3JlZGVudGlhbHMnIGluIChuZXcgWE1MSHR0cFJlcXVlc3QoKSkpKSxcbiAgICB0ZW1wQW5jaG9yID0gbnVsbDtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRlZCBieVxuICogYSBzaW5nbGUgVVJMLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIG5hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd8c3RyaW5nW119IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIGZvciBhdWRpby92aWRlbyBsb2FkcyB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7c3RyaW5nfGJvb2xlYW59IElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IERlZmF1bHQgaXMgdG8gZGV0ZXJtaW5lIGF1dG9tYXRpY2FsbHkuXG4gKiBAcGFyYW0gW29wdGlvbnMubG9hZFR5cGU9UmVzb3VyY2UuTE9BRF9UWVBFLlhIUl0ge1Jlc291cmNlLkxPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW29wdGlvbnMubWV0YWRhdGFdIHtvYmplY3R9IEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmUuXG4gKi9cbmZ1bmN0aW9uIFJlc291cmNlKG5hbWUsIHVybCwgb3B0aW9ucykge1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBuYW1lIGFuZCB1cmwgYXJlIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgYSByZXNvdXJjZS4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdXJsIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgdXJsIGlzIGEgZGF0YSB1cmwuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNEYXRhVXJsID0gdGhpcy51cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnl9XG4gICAgICovXG4gICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jcm9zc09yaWdpbiA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnYW5vbnltb3VzJyA6IG9wdGlvbnMuY3Jvc3NPcmlnaW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIG9mIGxvYWRpbmcgdG8gdXNlIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2UuTE9BRF9UWVBFfVxuICAgICAqL1xuICAgIHRoaXMubG9hZFR5cGUgPSBvcHRpb25zLmxvYWRUeXBlIHx8IHRoaXMuX2RldGVybWluZUxvYWRUeXBlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSB1c2VkIHRvIGxvYWQgdGhlIHJlc291cmNlIHZpYSBYSFIuIElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy54aHJUeXBlID0gb3B0aW9ucy54aHJUeXBlO1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgaW5mbyBmb3IgbWlkZGxld2FyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgd2hpbGUgbG9hZGluZyAoaWYgYW55KS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Vycm9yfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFhIUiBvYmplY3QgdGhhdCB3YXMgdXNlZCB0byBsb2FkIHRoaXMgcmVzb3VyY2UuIFRoaXMgaXMgb25seSBzZXRcbiAgICAgKiB3aGVuIGBsb2FkVHlwZWAgaXMgYFJlc291cmNlLkxPQURfVFlQRS5YSFJgLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7WE1MSHR0cFJlcXVlc3R9XG4gICAgICovXG4gICAgdGhpcy54aHIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBqc29uLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0pzb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgeG1sLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1htbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhbiBpbWFnZSB0YWcuIE9ubHkgdmFsaWQgYWZ0ZXIgdGhlIHJlc291cmNlXG4gICAgICogaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gYXVkaW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0F1ZGlvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGEgdmlkZW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1ZpZGVvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGRlcXVldWVgIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBhIHN0b3JhZ2UgcGxhY2UgZm9yIHRoZSBhc3luYyBxdWV1ZSBkZXF1ZXVlIG1ldGhvZFxuICAgICAqIHVzZWQgcHJpdmF0ZWx5IGJ5IHRoZSBsb2FkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2RlcXVldWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBjb21wbGV0ZWAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kQ29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkVycm9yYCBmdW5jdGlvbiBib3VuZCB0byB0aGlzIHJlc291cmNlJ3MgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25Qcm9ncmVzc2AgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyA9IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcblxuICAgIC8vIHhociBjYWxsYmFja3NcbiAgICB0aGlzLl9ib3VuZFhock9uRXJyb3IgPSB0aGlzLl94aHJPbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYaHJPbkFib3J0ID0gdGhpcy5feGhyT25BYm9ydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25Mb2FkID0gdGhpcy5feGhyT25Mb2FkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYZHJPblRpbWVvdXQgPSB0aGlzLl94ZHJPblRpbWVvdXQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcmVzb3VyY2UgYmVpbmdzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGVhY2ggdGltZSBwcm9ncmVzcyBvZiB0aGlzIHJlc291cmNlIGxvYWQgdXBkYXRlcy5cbiAgICAgKiBOb3QgYWxsIHJlc291cmNlcyB0eXBlcyBhbmQgbG9hZGVyIHN5c3RlbXMgY2FuIHN1cHBvcnQgdGhpcyBldmVudFxuICAgICAqIHNvIHNvbWV0aW1lcyBpdCBtYXkgbm90IGJlIGF2YWlsYWJsZS4gSWYgdGhlIHJlc291cmNlXG4gICAgICogaXMgYmVpbmcgbG9hZGVkIG9uIGEgbW9kZXJuIGJyb3dzZXIsIHVzaW5nIFhIUiwgYW5kIHRoZSByZW1vdGUgc2VydmVyXG4gICAgICogcHJvcGVybHkgc2V0cyBDb250ZW50LUxlbmd0aCBoZWFkZXJzLCB0aGVuIHRoaXMgd2lsbCBiZSBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcHJvZ3Jlc3NcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgdGhpcyByZXNvdXJjZSBoYXMgbG9hZGVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaXQgd2lsbFxuICAgICAqIGJlIGluIHRoZSBgZXJyb3JgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xufVxuXG5SZXNvdXJjZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVzb3VyY2U7XG5tb2R1bGUuZXhwb3J0cyA9IFJlc291cmNlO1xuXG4vKipcbiAqIE1hcmtzIHRoZSByZXNvdXJjZSBhcyBjb21wbGV0ZS5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgaW4gYSB3cmFwcGVyIG9yIHNvbWV0aGluZy4uLmdyb3NzLi4uLlxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICAgIGlmICh0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvcik7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIub25lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25wcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbmxvYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBLaWNrcyBvZmYgbG9hZGluZyBvZiB0aGlzIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBzdGFydFxuICogQHBhcmFtIFtjYWxsYmFja10ge2Z1bmN0aW9ufSBPcHRpb25hbCBjYWxsYmFjayB0byBjYWxsIG9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBpZiBhIGNhbGxiYWNrIGlzIHNldCwgbGlzdGVuIGZvciBjb21wbGV0ZSBldmVudFxuICAgIGlmIChjYikge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4gPT09IGZhbHNlIHx8IHR5cGVvZiB0aGlzLmNyb3NzT3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdGhpcy5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4odGhpcy51cmwpO1xuICAgIH1cblxuICAgIHN3aXRjaCh0aGlzLmxvYWRUeXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEltYWdlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5BVURJTzpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuVklERU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlhIUjpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh1c2VYZHIgJiYgdGhpcy5jcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYZHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYaHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gSW1hZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuc3JjID0gdGhpcy51cmw7XG5cbiAgICB0aGlzLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEhUTUxBdWRpb0VsZW1lbnQgb3IgSFRNTFZpZGVvRWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJyAmJiB0eXBlb2YgQXVkaW8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBBdWRpbygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgJyArIHR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBDb2Nvb25KUyBDYW52YXMrIHJ1bnRpbWUsIGxhY2tzIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zcmMgPSBBcnJheS5pc0FycmF5KHRoaXMudXJsKSA/IHRoaXMudXJsWzBdIDogdGhpcy51cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51cmwubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWydpcycgKyB0eXBlWzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKV0gPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuXG4gICAgdGhpcy5kYXRhLmxvYWQoKTtcbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gWE1MSHR0cFJlcXVlc3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGhyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIHNldCB0aGUgcmVxdWVzdCB0eXBlIGFuZCB1cmxcbiAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gbG9hZCBqc29uIGFzIHRleHQgYW5kIHBhcnNlIGl0IG91cnNlbHZlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHNvbWUgYnJvd3NlcnNcbiAgICAvLyAqY291Z2gqIHNhZmFyaSAqY291Z2gqIGNhbid0IGRlYWwgd2l0aCBpdC5cbiAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OIHx8IHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gdGhpcy54aHJUeXBlO1xuICAgIH1cblxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvciwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQsIGZhbHNlKTtcblxuICAgIHhoci5zZW5kKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhEb21haW5SZXF1ZXN0LiBUaGlzIGlzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHN1cHBvcnQgSUU5IChncm9zcykuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGRyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGRyID0gdGhpcy54aHIgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcblxuICAgIC8vIFhEb21haW5SZXF1ZXN0IGhhcyBhIGZldyBxdWlya3MuIE9jY2FzaW9uYWxseSBpdCB3aWxsIGFib3J0IHJlcXVlc3RzXG4gICAgLy8gQSB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBtYWtlIHN1cmUgQUxMIGNhbGxiYWNrcyBhcmUgc2V0IGV2ZW4gaWYgbm90IHVzZWRcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTc4Njk2Ni94ZG9tYWlucmVxdWVzdC1hYm9ydHMtcG9zdC1vbi1pZS05XG4gICAgeGRyLnRpbWVvdXQgPSA1MDAwO1xuXG4gICAgeGRyLm9uZXJyb3IgPSB0aGlzLl9ib3VuZFhock9uRXJyb3I7XG4gICAgeGRyLm9udGltZW91dCA9IHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0O1xuICAgIHhkci5vbnByb2dyZXNzID0gdGhpcy5fYm91bmRPblByb2dyZXNzO1xuICAgIHhkci5vbmxvYWQgPSB0aGlzLl9ib3VuZFhock9uTG9hZDtcblxuICAgIHhkci5vcGVuKCdHRVQnLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyAgTm90ZTogVGhlIHhkci5zZW5kKCkgY2FsbCBpcyB3cmFwcGVkIGluIGEgdGltZW91dCB0byBwcmV2ZW50IGFuIGlzc3VlIHdpdGggdGhlIGludGVyZmFjZSB3aGVyZSBzb21lIHJlcXVlc3RzIGFyZSBsb3N0XG4gICAgLy8gIGlmIG11bHRpcGxlIFhEb21haW5SZXF1ZXN0cyBhcmUgYmVpbmcgc2VudCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIC8vIFNvbWUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2lzc3Vlcy8xMjQ4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHhkci5zZW5kKCk7XG4gICAgfSwgMCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzb3VyY2UgdXNlZCBpbiBsb2FkaW5nIHZpYSBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB0eXBlIHtzdHJpbmd9IFRoZSBlbGVtZW50IHR5cGUgKHZpZGVvIG9yIGF1ZGlvKS5cbiAqIEBwYXJhbSB1cmwge3N0cmluZ30gVGhlIHNvdXJjZSBVUkwgdG8gbG9hZCBmcm9tLlxuICogQHBhcmFtIFttaW1lXSB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIG9mIHRoZSB2aWRlb1xuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9jcmVhdGVTb3VyY2UgPSBmdW5jdGlvbiAodHlwZSwgdXJsLCBtaW1lKSB7XG4gICAgaWYgKCFtaW1lKSB7XG4gICAgICAgIG1pbWUgPSB0eXBlICsgJy8nICsgdXJsLnN1YnN0cih1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSB1cmw7XG4gICAgc291cmNlLnR5cGUgPSBtaW1lO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBlcnJvcnMgb3V0LlxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBlcnJvciBldmVudCBmcm9tIHRoZSBlbGVtZW50IHRoYXQgZW1pdHMgaXQuXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX29uRXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBlbGVtZW50IHVzaW5nICcgKyBldmVudC50YXJnZXQubm9kZU5hbWUpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBwcm9ncmVzcyBldmVudCBmaXJlcyBmb3IgeGhyL3hkci5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vblByb2dyZXNzID0gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB0aGlzLCBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYW4gZXJyb3IgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEVycm9yRXZlbnR8RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgcmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgZmFpbGVkLiAnICtcbiAgICAgICAgJ1N0YXR1czogJyArIHRoaXMueGhyLnN0YXR1cyArICcsIHRleHQ6IFwiJyArIHRoaXMueGhyLnN0YXR1c1RleHQgKyAnXCInXG4gICAgKTtcblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGFib3J0IGV2ZW50IGZpcmVzIGZvciB4aHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEFib3J0RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB3YXMgYWJvcnRlZCBieSB0aGUgdXNlci4nKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIHRpbWVvdXQgZXZlbnQgZmlyZXMgZm9yIHhkci5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94ZHJPblRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB0aW1lZCBvdXQuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBkYXRhIHN1Y2Nlc3NmdWxseSBsb2FkcyBmcm9tIGFuIHhoci94ZHIgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0TG9hZEV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHhociA9IHRoaXMueGhyLFxuICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzICE9PSB1bmRlZmluZWQgPyB4aHIuc3RhdHVzIDogMjAwOyAvL1hEUiBoYXMgbm8gYC5zdGF0dXNgLCBhc3N1bWUgMjAwLlxuXG4gICAgLy8gc3RhdHVzIGNhbiBiZSAwIHdoZW4gdXNpbmcgdGhlIGZpbGU6Ly8gcHJvdG9jb2wsIGFsc28gY2hlY2sgaWYgYSByZXNwb25zZSB3YXMgZm91bmRcbiAgICBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDQgfHwgKHN0YXR1cyA9PT0gMCAmJiB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIC8vIGlmIHRleHQsIGp1c3QgcmV0dXJuIGl0XG4gICAgICAgIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYganNvbiwgcGFyc2UgaW50byBqc29uIG9iamVjdFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT04pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSnNvbiA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIGpzb246JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgeG1sLCBwYXJzZSBpbnRvIGFuIHhtbCBkb2N1bWVudCBvciBkaXYgZWxlbWVudFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkaXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNYbWwgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSBsb2FkZWQgeG1sOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyIHR5cGVzIGp1c3QgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdbJyArIHhoci5zdGF0dXMgKyAnXScgKyB4aHIuc3RhdHVzVGV4dCArICc6JyArIHhoci5yZXNwb25zZVVSTCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gcmVxVHlwZSh4aHIpIHtcbiAgICByZXR1cm4geGhyLnRvU3RyaW5nKCkucmVwbGFjZSgnb2JqZWN0ICcsICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGZvciB0aGlzIHJlc291cmNlIGJhc2VkIG9uIGlmIHRoZSB1cmxcbiAqIGZvciB0aGlzIHJlc291cmNlIGlzIGNyb3NzLW9yaWdpbi4gSWYgY3Jvc3NPcmlnaW4gd2FzIG1hbnVhbGx5IHNldCwgdGhpc1xuICogZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgdG8gdGVzdC5cbiAqIEBwYXJhbSBbbG9jYXRpb249d2luZG93LmxvY2F0aW9uXSB7b2JqZWN0fSBUaGUgbG9jYXRpb24gb2JqZWN0IHRvIHRlc3QgYWdhaW5zdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNyb3NzT3JpZ2luIHZhbHVlIHRvIHVzZSAob3IgZW1wdHkgc3RyaW5nIGZvciBub25lKS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVDcm9zc09yaWdpbiA9IGZ1bmN0aW9uICh1cmwsIGxvYykge1xuICAgIC8vIGRhdGE6IGFuZCBqYXZhc2NyaXB0OiB1cmxzIGFyZSBjb25zaWRlcmVkIHNhbWUtb3JpZ2luXG4gICAgaWYgKHVybC5pbmRleE9mKCdkYXRhOicpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGlzIHdpbmRvdy5sb2NhdGlvblxuICAgIGxvYyA9IGxvYyB8fCB3aW5kb3cubG9jYXRpb247XG5cbiAgICBpZiAoIXRlbXBBbmNob3IpIHtcbiAgICAgICAgdGVtcEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG5cbiAgICAvLyBsZXQgdGhlIGJyb3dzZXIgZGV0ZXJtaW5lIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSB1cmwgb2YgdGhpcyByZXNvdXJjZSBhbmQgdGhlblxuICAgIC8vIHBhcnNlIHdpdGggdGhlIG5vZGUgdXJsIGxpYiwgd2UgY2FuJ3QgdXNlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICAgIC8vIGJlY2F1c2UgdGhleSBkb24ndCB3b3JrIGluIElFOSA6KFxuICAgIHRlbXBBbmNob3IuaHJlZiA9IHVybDtcbiAgICB1cmwgPSBfdXJsLnBhcnNlKHRlbXBBbmNob3IuaHJlZik7XG5cbiAgICB2YXIgc2FtZVBvcnQgPSAoIXVybC5wb3J0ICYmIGxvYy5wb3J0ID09PSAnJykgfHwgKHVybC5wb3J0ID09PSBsb2MucG9ydCk7XG5cbiAgICAvLyBpZiBjcm9zcyBvcmlnaW5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9PSBsb2MuaG9zdG5hbWUgfHwgIXNhbWVQb3J0IHx8IHVybC5wcm90b2NvbCAhPT0gbG9jLnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiAnYW5vbnltb3VzJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlc3BvbnNlVHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZVxuICogcmVzb3VyY2UgYmVpbmcgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHJlc3BvbnNlVHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lWGhyVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX3hoclR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZUxvYWRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZXNvdXJjZS5fbG9hZFR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLkxPQURfVFlQRS5YSFI7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2dldEV4dGVuc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcy51cmwsXG4gICAgICAgIGV4dDtcblxuICAgIGlmICh0aGlzLmlzRGF0YVVybCkge1xuICAgICAgICB2YXIgc2xhc2hJbmRleCA9IHVybC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGV4dCA9IHVybC5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEsIHVybC5pbmRleE9mKCc7Jywgc2xhc2hJbmRleCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXJ5U3RhcnQgPSB1cmwuaW5kZXhPZignPycpO1xuICAgICAgICBpZiAocXVlcnlTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dDtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWltZSB0eXBlIG9mIGFuIFhIUiByZXF1ZXN0IGJhc2VkIG9uIHRoZSByZXNwb25zZVR5cGUgb2ZcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIHRvIHVzZS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRNaW1lRnJvbVhoclR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1iaW5hcnknO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vYmxvYic7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veG1sJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT046XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVDpcbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUOlxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcblxuICAgIH1cbn07XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxvYWRpbmcgYSByZXNvdXJjZSBjYW4gdXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IExPQURfVFlQRVxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5YSFIgLSBVc2VzIFhNTEh0dHBSZXF1ZXN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5JTUFHRSAtIFVzZXMgYW4gYEltYWdlYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLkFVRElPIC0gVXNlcyBhbiBgQXVkaW9gIG9iamVjdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuVklERU8gLSBVc2VzIGEgYFZpZGVvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlLkxPQURfVFlQRSA9IHtcbiAgICBYSFI6ICAgIDEsXG4gICAgSU1BR0U6ICAyLFxuICAgIEFVRElPOiAgMyxcbiAgICBWSURFTzogIDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVBRFlfU1RBVEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuVU5TRU5UIC0gb3BlbigpaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLk9QRU5FRCAtIHNlbmQoKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5IRUFERVJTX1JFQ0VJVkVEIC0gc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIGhlYWRlcnMgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5MT0FESU5HIC0gRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLkRPTkUgLSBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5SZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEUgPSB7XG4gICAgVU5TRU5UOiAwLFxuICAgIE9QRU5FRDogMSxcbiAgICBIRUFERVJTX1JFQ0VJVkVEOiAyLFxuICAgIExPQURJTkc6IDMsXG4gICAgRE9ORTogNFxufTtcblxuLyoqXG4gKiBUaGUgWEhSIHJlYWR5IHN0YXRlcywgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IFhIUl9SRVNQT05TRV9UWVBFXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVCAtIGRlZmF1bHRzIHRvIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVIgLSBBcnJheUJ1ZmZlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkJMT0IgLSBCbG9iXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQgLSBEb2N1bWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkpTT04gLSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5URVhUIC0gU3RyaW5nXG4gKi9cblJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFID0ge1xuICAgIERFRkFVTFQ6ICAgICd0ZXh0JyxcbiAgICBCVUZGRVI6ICAgICAnYXJyYXlidWZmZXInLFxuICAgIEJMT0I6ICAgICAgICdibG9iJyxcbiAgICBET0NVTUVOVDogICAnZG9jdW1lbnQnLFxuICAgIEpTT046ICAgICAgICdqc29uJyxcbiAgICBURVhUOiAgICAgICAndGV4dCdcbn07XG5cblJlc291cmNlLl9sb2FkVHlwZU1hcCA9IHtcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3BuZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZWcnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3dlYnAnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRVxufTtcblxuUmVzb3VyY2UuX3hoclR5cGVNYXAgPSB7XG4gICAgLy8geG1sXG4gICAgJ3hodG1sJzogICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bWwnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3htbCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RteCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RzeCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3N2Zyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG5cbiAgICAvLyBpbWFnZXNcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2JtcCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RnYSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcblxuICAgIC8vIGpzb25cbiAgICAnanNvbic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OLFxuXG4gICAgLy8gdGV4dFxuICAgICd0ZXh0JzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQsXG4gICAgJ3R4dCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsb2FkIHR5cGUgdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGV4dG5hbWUge3N0cmluZ30gVGhlIGV4dGVuc2lvbiB0byBzZXQgdGhlIHR5cGUgZm9yLCBlLmcuIFwicG5nXCIgb3IgXCJmbnRcIlxuICogQHBhcmFtIGxvYWRUeXBlIHtSZXNvdXJjZS5MT0FEX1RZUEV9IFRoZSBsb2FkIHR5cGUgdG8gc2V0IGl0IHRvLlxuICovXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25Mb2FkVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCBsb2FkVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5fbG9hZFR5cGVNYXAsIGV4dG5hbWUsIGxvYWRUeXBlKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSB4aHJUeXBlIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHhociB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCB4aHJUeXBlKSB7XG4gICAgc2V0RXh0TWFwKFJlc291cmNlLl94aHJUeXBlTWFwLCBleHRuYW1lLCB4aHJUeXBlKTtcbn07XG5cbmZ1bmN0aW9uIHNldEV4dE1hcChtYXAsIGV4dG5hbWUsIHZhbCkge1xuICAgIGlmIChleHRuYW1lICYmIGV4dG5hbWUuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgIGV4dG5hbWUgPSBleHRuYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dG5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hcFtleHRuYW1lXSA9IHZhbDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICAgIF9rZXlTdHI6IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIixcblxuICAgIGVuY29kZUJpbmFyeTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBcIlwiO1xuICAgICAgICB2YXIgYnl0ZWJ1ZmZlcjtcbiAgICAgICAgdmFyIGVuY29kZWRDaGFySW5kZXhlcyA9IG5ldyBBcnJheSg0KTtcbiAgICAgICAgdmFyIGlueCA9IDA7XG4gICAgICAgIHZhciBqbnggPSAwO1xuICAgICAgICB2YXIgcGFkZGluZ0J5dGVzID0gMDtcblxuICAgICAgICB3aGlsZSAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBGaWxsIGJ5dGUgYnVmZmVyIGFycmF5XG4gICAgICAgICAgICBieXRlYnVmZmVyID0gbmV3IEFycmF5KDMpO1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBieXRlYnVmZmVyLmxlbmd0aDsgam54KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGF3YXkgaGlnaC1vcmRlciBieXRlLCBhcyBkb2N1bWVudGVkIGF0OlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdCNIYW5kbGluZ19iaW5hcnlfZGF0YVxuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSBpbnB1dC5jaGFyQ29kZUF0KGlueCsrKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGVhY2ggZW5jb2RlZCBjaGFyYWN0ZXIsIDYgYml0cyBhdCBhIHRpbWVcbiAgICAgICAgICAgIC8vIGluZGV4IDE6IGZpcnN0IDYgYml0c1xuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzBdID0gYnl0ZWJ1ZmZlclswXSA+PiAyO1xuICAgICAgICAgICAgLy8gaW5kZXggMjogc2Vjb25kIDYgYml0cyAoMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAxICsgNCBtb3N0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBieXRlIDIpXG4gICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMV0gPSAoKGJ5dGVidWZmZXJbMF0gJiAweDMpIDw8IDQpIHwgKGJ5dGVidWZmZXJbMV0gPj4gNCk7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiB0aGlyZCA2IGJpdHMgKDQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMiArIDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gKChieXRlYnVmZmVyWzFdICYgMHgwZikgPDwgMikgfCAoYnl0ZWJ1ZmZlclsyXSA+PiA2KTtcbiAgICAgICAgICAgIC8vIGluZGV4IDM6IGZvcnRoIDYgYml0cyAoNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gYnl0ZWJ1ZmZlclsyXSAmIDB4M2Y7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHBhZGRpbmcgaGFwcGVuZWQsIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgIHBhZGRpbmdCeXRlcyA9IGlueCAtIChpbnB1dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFkZGluZ0J5dGVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCAyIGNoYXJhY3RlcnMgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMl0gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBsYXN0IGNoYXJhY3RlciB0byBwYWRkaW5nIGNoYXJcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vIHBhZGRpbmcgLSBwcm9jZWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vdyB3ZSB3aWxsIGdyYWIgZWFjaCBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgb3V0IG9mIG91ciBrZXlzdHJpbmdcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIG91ciBpbmRleCBhcnJheSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQgc3RyaW5nXG4gICAgICAgICAgICBmb3IgKGpueCA9IDA7IGpueCA8IGVuY29kZWRDaGFySW5kZXhlcy5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHRoaXMuX2tleVN0ci5jaGFyQXQoZW5jb2RlZENoYXJJbmRleGVzW2pueF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9Mb2FkZXInKTtcblxubW9kdWxlLmV4cG9ydHMuUmVzb3VyY2UgPSByZXF1aXJlKCcuL1Jlc291cmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzLm1pZGRsZXdhcmUgPSB7XG4gICAgY2FjaGluZzoge1xuICAgICAgICBtZW1vcnk6IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnknKVxuICAgIH0sXG4gICAgcGFyc2luZzoge1xuICAgICAgICBibG9iOiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL3BhcnNpbmcvYmxvYicpXG4gICAgfVxufTtcbiIsIi8vIGEgc2ltcGxlIGluLW1lbW9yeSBjYWNoZSBmb3IgcmVzb3VyY2VzXG52YXIgY2FjaGUgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICAvLyBpZiBjYWNoZWQsIHRoZW4gc2V0IGRhdGEgYW5kIGNvbXBsZXRlIHRoZSByZXNvdXJjZVxuICAgICAgICBpZiAoY2FjaGVbcmVzb3VyY2UudXJsXSkge1xuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IGNhY2hlW3Jlc291cmNlLnVybF07XG4gICAgICAgICAgICByZXNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIG5vdCBjYWNoZWQsIHdhaXQgZm9yIGNvbXBsZXRlIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb3VyY2Uub25jZSgnY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICBjYWNoZVt0aGlzLnVybF0gPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgnLi4vLi4vUmVzb3VyY2UnKSxcbiAgICBiNjQgPSByZXF1aXJlKCcuLi8uLi9iNjQnKTtcblxud2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblxuLy8gYSBtaWRkbGV3YXJlIGZvciB0cmFuc2Zvcm1pbmcgWEhSIGxvYWRlZCBCbG9icyBpbnRvIG1vcmUgdXNlZnVsIG9iamVjdHNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIHdhcyBhbiBYSFIgbG9hZCBvZiBhIGJsb2JcbiAgICAgICAgaWYgKHJlc291cmNlLnhociAmJiByZXNvdXJjZS54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBibG9iIHN1cHBvcnQgd2UgcHJvYmFibHkgZ290IGEgYmluYXJ5IHN0cmluZyBiYWNrXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5CbG9iIHx8IHR5cGVvZiByZXNvdXJjZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVzb3VyY2UueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaW1hZ2UsIGNvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgaW50byBhIGRhdGEgdXJsXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgdHlwZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5zcmMgPSAnZGF0YTonICsgdHlwZSArICc7YmFzZTY0LCcgKyBiNjQuZW5jb2RlQmluYXJ5KHJlc291cmNlLnhoci5yZXNwb25zZVRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGltYWdlIGxvYWRzIGFuZCB0aGVuIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5vbmxvYWQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY29udGVudCB0eXBlIHNheXMgdGhpcyBpcyBhbiBpbWFnZSwgdGhlbiB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBibG9iIGludG8gYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvdXJjZS5kYXRhLnR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlc291cmNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuYmxvYiA9IHJlc291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gc3JjO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuaXNJbWFnZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBubyBsb25nZXIgdXNlZCBibG9iIGFmdGVyIHRoZSBpbWFnZSBsb2Fkc1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJwaXhpLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMC4xMC1kZXZcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlBpeGkuanMgaXMgYSBmYXN0IGxpZ2h0d2VpZ2h0IDJEIGxpYnJhcnkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGRldmljZXMuXCIsXG4gIFwiYXV0aG9yXCI6IFwiTWF0IEdyb3Zlc1wiLFxuICBcImNvbnRyaWJ1dG9yc1wiOiBbXG4gICAgXCJDaGFkIEVuZ2xlciA8Y2hhZEBwYW50aGVyZGV2LmNvbT5cIixcbiAgICBcIlJpY2hhcmQgRGF2ZXkgPHJkYXZleUBnbWFpbC5jb20+XCJcbiAgXSxcbiAgXCJtYWluXCI6IFwiLi9zcmMvaW5kZXguanNcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHA6Ly9nb29kYm95ZGlnaXRhbC5jb20vXCIsXG4gIFwiYnVnc1wiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXNcIixcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiZ3VscCAmJiBndWxwIHdhdGNoXCIsXG4gICAgXCJ0ZXN0XCI6IFwiZ3VscCAmJiB0ZXN0ZW0gY2lcIixcbiAgICBcImJ1aWxkXCI6IFwiZ3VscFwiLFxuICAgIFwiZG9jc1wiOiBcImpzZG9jIC1jIC4vZ3VscC91dGlsL2pzZG9jLmNvbmYuanNvbiAtUiBSRUFETUUubWRcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpbi9cIixcbiAgICBcInNyYy9cIixcbiAgICBcIkNPTlRSSUJVVElORy5tZFwiLFxuICAgIFwiTElDRU5TRVwiLFxuICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgXCJSRUFETUUubWRcIlxuICBdLFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhc3luY1wiOiBcIl4xLjUuMFwiLFxuICAgIFwiYnJmc1wiOiBcIl4xLjQuMVwiLFxuICAgIFwiZWFyY3V0XCI6IFwiXjIuMC43XCIsXG4gICAgXCJldmVudGVtaXR0ZXIzXCI6IFwiXjEuMS4xXCIsXG4gICAgXCJnbC1tYXRyaXhcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL3RvamkvZ2wtbWF0cml4LmdpdFwiLFxuICAgIFwib2JqZWN0LWFzc2lnblwiOiBcIl40LjAuMVwiLFxuICAgIFwicGl4aS1nbC1jb3JlXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9Hb29kQm95RGlnaXRhbC9waXhpLWdsLWNvcmUuZ2l0XCIsXG4gICAgXCJyZXNvdXJjZS1sb2FkZXJcIjogXCJeMS42LjRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjExLjEuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4zLjIuMFwiLFxuICAgIFwiZGVsXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOS4wXCIsXG4gICAgXCJndWxwLWNhY2hlZFwiOiBcIl4xLjEuMFwiLFxuICAgIFwiZ3VscC1jb25jYXRcIjogXCJeMi42LjBcIixcbiAgICBcImd1bHAtZGVidWdcIjogXCJeMi4xLjBcIixcbiAgICBcImd1bHAtaGVhZGVyXCI6IFwiXjEuNy4xXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjExLjJcIixcbiAgICBcImd1bHAtbWlycm9yXCI6IFwiXjAuNC4wXCIsXG4gICAgXCJndWxwLXBsdW1iZXJcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtcmVuYW1lXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJndWxwLXNvdXJjZW1hcHNcIjogXCJeMS41LjJcIixcbiAgICBcImd1bHAtdWdsaWZ5XCI6IFwiXjEuNC4xXCIsXG4gICAgXCJndWxwLXV0aWxcIjogXCJeMy4wLjZcIixcbiAgICBcImphZ3VhcmpzLWpzZG9jXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZHNoaW1qcy9qYWd1YXJqcy1qc2RvYy5naXRcIixcbiAgICBcImpzZG9jXCI6IFwiXjMuMy4yXCIsXG4gICAgXCJqc2hpbnQtc3VtbWFyeVwiOiBcIl4wLjQuMFwiLFxuICAgIFwibWluaW1pc3RcIjogXCJeMS4yLjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMy4yXCIsXG4gICAgXCJyZXF1aXJlLWRpclwiOiBcIl4wLjMuMFwiLFxuICAgIFwicnVuLXNlcXVlbmNlXCI6IFwiXjEuMS4yXCIsXG4gICAgXCJ0ZXN0ZW1cIjogXCJeMC45LjRcIixcbiAgICBcInZpbnlsLWJ1ZmZlclwiOiBcIl4xLjAuMFwiLFxuICAgIFwidmlueWwtc291cmNlLXN0cmVhbVwiOiBcIl4xLjEuMFwiLFxuICAgIFwid2F0Y2hpZnlcIjogXCJeMy40LjBcIlxuICB9LFxuICBcImJyb3dzZXJpZnlcIjoge1xuICAgIFwidHJhbnNmb3JtXCI6IFtcbiAgICAgIFwiYnJmc1wiXG4gICAgXVxuICB9XG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLy8gYWRkIHNvbWUgZXh0cmEgdmFyaWFibGVzIHRvIHRoZSBjb250YWluZXIuLlxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpXG4pO1xuXG5cbi8qKlxuICogVGhlIEFjY2Vzc2liaWxpdHkgbWFuYWdlciByZWFjcmVhdGVzIHRoZSBhYmlsaXR5IHRvIHRhYiBhbmQgYW5kIGhhdmUgY29udGVudCByZWFkIGJ5IHNjcmVlbiByZWFkZXJzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGFzIGl0IGNhbiBwb3NzaWJseSBoZWxwIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyBhY2Nlc3MgcGl4aSBjb250ZW50LlxuICogTXVjaCBsaWtlIGludGVyYWN0aW9uIGFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBtYWRlIGFjY2Vzc2libGUuIFRoaXMgbWFuYWdlciB3aWxsIG1hcCB0aGUgZXZlbnRzIGFzIGlmIHRoZSBtb3VzZSB3YXMgYmVpbmcgdXNlZCwgbWluaW1pemluZyB0aGUgZWZmZXJvdCByZXF1aXJlZCB0byBpbXBsZW1lbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqL1xuZnVuY3Rpb24gQWNjZXNzaWJpbGl0eU1hbmFnZXIocmVuZGVyZXIpXG57XG5cdC8vIGZpcnN0IHdlIGNyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFxuICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUubGVmdCA9IDA7XG4gICAvL1xuICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuICAgXHRcbiAgIFx0LyoqXG4gICBcdCAqIFRoaXMgaXMgdGhlIGRvbSBlbGVtZW50IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gICBcdHRoaXMuZGl2ID0gZGl2O1xuXG4gICBcdC8qKlxuICAgXHQgKiBBIHNpbXBsZSBwb29sIGZvciBzdG9yaW5nIGRpdnMuXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7QXJyYXl9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuIFx0dGhpcy5wb29sID0gW107XG5cbiBcdC8qKlxuIFx0ICogVGhpcyBpcyBhIHRpY2sgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHJlbmRlcmVkLlxuIFx0ICogXG4gXHQgKiBAdHlwZSB7TnVtYmVyfVxuIFx0ICogQHByaXZhdGVcbiBcdCAqL1xuICAgXHR0aGlzLnJlbmRlcklkID0gMDtcblxuICAgXHQvKipcbiAgIFx0ICogU2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB2aXN1YWxseSBzaG93IHRoZSBkaXZzXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgIFx0ICovXG4gICBcdHRoaXMuZGVidWcgPSBmYWxzZTtcblxuICBcdC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGFjY2Vzc2liaWxpdHkgbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgIFx0LyoqXG4gICAgICogVGhlIGFycmF5IG9mIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzaWJsZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHByZSBiaW5kIHRoZSBmdW5jdGlvbnMuLlxuICAgICAqL1xuICAgXHR0aGlzLl9vbktleURvd24gPSB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKTtcbiAgIFx0dGhpcy5fb25Nb3VzZU1vdmUgPSB0aGlzLl9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogc3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFuYWdlci4gSWYgdGhlcmUgYXJlIG5vIGFjY2Vzc2libGUgb2JqZWN0cyBvciB0aGUgbW91c2UgaXMgbW92aW5nIHRoZSB3aWxsIGJlIGZhbHNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cbiAgIFx0Ly8gbGV0IGxpc3RlbiBmb3IgdGFiLi4gb25jZSBwcmVzc2VkIHdlIGNhbiBmaXJlIHVwIGFuZCBzaG93IHRoZSBhY2Nlc3NpYmlsaXR5IGxheWVyXG4gICBcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG59XG5cblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xuXG4vKipcbiAqIEFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBzaG93bi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgcHJlc2VzIHRoZSB0YWIga2V5XG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHRydWUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub24oJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cblx0dGhpcy5yZW5kZXJlci52aWV3LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5kaXYpO1x0XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIGhpZGRlbi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgbW92ZXMgdGhlIG1vdXNlXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYoIXRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9mZigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlKTtcblxuXHR0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcblxufTtcblxuLyoqXG4gKiBUaGlzIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aWxsIHJ1biB0aHJvdWdodCBoZSBzY2VuZSBncmFwaCBhbmQgYWRkIGFueSBuZXcgYWNjZXNzaWJsZSBvYmplY3RzIHRvIHRoZSBET00gbGF5ZXIuXG4gKiBAcGFyYW0gZWxlbWVudCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgRGlzcGxheU9iamVjdCB0byBjaGVjay5cbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG5cdGlmKCFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZihkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGUgJiYgZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcblx0e1xuXHRcdGlmKCFkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlKVxuXHRcdHtcblx0XHRcdHRoaXMuYWRkQ2hpbGQoZGlzcGxheU9iamVjdCk7XG5cdFx0fVxuXHQgICBcdFxuXHQgICBcdGRpc3BsYXlPYmplY3QucmVuZGVySWQgPSB0aGlzLnJlbmRlcklkO1xuXHR9XG5cblx0dmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcblxuXHRmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcblx0XHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKGNoaWxkcmVuW2ldKTtcblx0fVxufTtcblxuXG4vKipcbiAqIEJlZm9yZSBlYWNoIHJlbmRlciB0aGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGRpdnMgYXJlIG1hcHBlZCBjb3JyZWN0bHkgdG8gdGhlaXIgRGlzcGxheU9iamVjdHNcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpXG57XG5cblx0Ly8gdXBkYXRlIGNoaWxkcmVuLi4uXG5cdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHModGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkKTtcblxuXHR2YXIgcmVjdCA9IHRoaXMucmVuZGVyZXIudmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0dmFyIHN4ID0gcmVjdC53aWR0aCAgLyB0aGlzLnJlbmRlcmVyLndpZHRoO1xuXHR2YXIgc3kgPSByZWN0LmhlaWdodCAvIHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuXG5cdHZhciBkaXYgPSB0aGlzLmRpdjtcblxuXHRkaXYuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICdweCc7XG5cdGRpdi5zdHlsZS50b3AgPSByZWN0LnRvcCArICdweCc7XG5cdGRpdi5zdHlsZS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggKyAncHgnO1xuXHRkaXYuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgKyAncHgnO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuXHRcdGlmKGNoaWxkLnJlbmRlcklkICE9PSB0aGlzLnJlbmRlcklkKVxuXHRcdHtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaSwgMSk7XG5cdFx0XHR0aGlzLmRpdi5yZW1vdmVDaGlsZCggY2hpbGQuX2FjY2Vzc2libGVEaXYgKTtcblx0XHRcdHRoaXMucG9vbC5wdXNoKGNoaWxkLl9hY2Nlc3NpYmxlRGl2KTtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlRGl2ID0gbnVsbDtcblxuXHRcdFx0aS0tO1xuXG5cdFx0XHRpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBtYXAgZGl2IHRvIGRpc3BsYXkuLlxuXHRcdFx0ZGl2ID0gY2hpbGQuX2FjY2Vzc2libGVEaXY7XG5cdFx0XHR2YXIgaGl0QXJlYSA9IGNoaWxkLmhpdEFyZWE7XG5cdFx0XHR2YXIgd3QgPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuXHRcdFx0aWYoY2hpbGQuaGl0QXJlYSlcblx0XHRcdHtcblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoKHd0LnR4ICsgKGhpdEFyZWEueCAqIHd0LmEpKSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKCh3dC50eSArIChoaXRBcmVhLnkgKiB3dC5kKSkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHd0LmEgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogd3QuZCAqIHN5KSArICdweCc7XG5cdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0aGl0QXJlYSA9IGNoaWxkLmdldEJvdW5kcygpO1xuXG5cdFx0XHRcdHRoaXMuY2FwSGl0QXJlYShoaXRBcmVhKTtcblxuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9IChoaXRBcmVhLnggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gIChoaXRBcmVhLnkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiBzeSkgKyAncHgnO1xuXHRcdFx0fVx0XHRcblx0XHR9XG5cdH1cblxuXHQvLyBpbmNyZW1lbnQgdGhlIHJlbmRlciBpZC4uXG5cdHRoaXMucmVuZGVySWQrKztcbn07XG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYXBIaXRBcmVhID0gZnVuY3Rpb24gKGhpdEFyZWEpXG57XG4gICAgaWYgKGhpdEFyZWEueCA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoICs9IGhpdEFyZWEueDtcbiAgICAgICAgaGl0QXJlYS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaGl0QXJlYS55IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ICs9IGhpdEFyZWEueTtcbiAgICAgICAgaGl0QXJlYS55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueCArIGhpdEFyZWEud2lkdGggPiB0aGlzLnJlbmRlcmVyLndpZHRoIClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoIC0gaGl0QXJlYS54O1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS55ICsgaGl0QXJlYS5oZWlnaHQgPiB0aGlzLnJlbmRlcmVyLmhlaWdodCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0IC0gaGl0QXJlYS55O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBBZGRzIGEgRGlzcGxheU9iamVjdCB0byB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuLy9cdHRoaXMuYWN0aXZhdGUoKTtcblx0XG5cdHZhciBkaXYgPSB0aGlzLnBvb2wucG9wKCk7XG5cblx0aWYoIWRpdilcblx0e1xuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBcblxuXHQgICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGVidWcgPyAncmdiYSgyNTUsMCwwLDAuNSknIDogJ3RyYW5zcGFyZW50Jztcblx0ICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdCAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcblx0ICAgIGRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdub25lJztcblxuXHQgICAgXG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX29uRm9jdXNPdXQuYmluZCh0aGlzKSk7XG5cdH1cblx0ICAgXHRcblxuXG5cblx0ZGl2LnRpdGxlID0gZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlVGl0bGUgfHwgJ2Rpc3BsYXlPYmplY3QgJyArIHRoaXMudGFiSW5kZXg7XG5cblx0Ly9cblx0XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUgPSB0cnVlO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ID0gZGl2O1xuXHRkaXYuZGlzcGxheU9iamVjdCA9IGRpc3BsYXlPYmplY3Q7XG5cblxuXHR0aGlzLmNoaWxkcmVuLnB1c2goZGlzcGxheU9iamVjdCk7XG5cdHRoaXMuZGl2LmFwcGVuZENoaWxkKCBkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ICk7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYudGFiSW5kZXggPSBkaXNwbGF5T2JqZWN0LnRhYkluZGV4O1xufTtcblxuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBidXR0b24gcHJlc3MgdG8gcGl4aSdzIEludGVyYWN0aW9uTWFuYWdlciAoY2xpY2spXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnY2xpY2snLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3ZlcilcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1cyA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3V0KVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzT3V0ID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uS2V5RG93biA9IGZ1bmN0aW9uKGUpXG57XG5cdGlmKGUua2V5Q29kZSAhPT0gOSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuYWN0aXZhdGUoKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmUgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZGVhY3RpdmF0ZSgpO1xufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgXG57XG5cdHRoaXMuZGl2ID0gbnVsbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblx0XHR0aGlzLmNoaWxkcmVuW2ldLmRpdiA9IG51bGw7XG5cdH1cblxuXHRcblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuXHRcdFxuXHR0aGlzLnBvb2wgPSBudWxsO1xuXHR0aGlzLmNoaWxkcmVuID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5cbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYWNjZXNzaWJsZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmFjY2Vzc2liaWxpdHkuYWNjZXNzaWJsZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgYWNjZXNzaWJsZVRhcmdldCA9IHtcbiAgICBcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGVUaXRsZTpudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICB0YWJJbmRleDowLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZUFjdGl2ZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVEaXY6ZmFsc2VcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBhY2Nlc3NpYmxlVGFyZ2V0O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgYWNjZXNzaWJpbGl0eSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYWNjZXNzaWJsZVRhcmdldDogICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpLFxuICAgIEFjY2Vzc2liaWxpdHlNYW5hZ2VyOiByZXF1aXJlKCcuL0FjY2Vzc2liaWxpdHlNYW5hZ2VyJylcbn07XG4iLCIvKipcbiAqIENvbnN0YW50IHZhbHVlcyB1c2VkIGluIHBpeGlcbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG52YXIgQ09OU1QgPSB7XG4gICAgLyoqXG4gICAgICogU3RyaW5nIG9mIHRoZSBjdXJyZW50IFBJWEkgdmVyc2lvblxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBWRVJTSU9OXG4gICAgICovXG4gICAgVkVSU0lPTjogcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQSV8yIC0gVHdvIFBpXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFBJXzI6IE1hdGguUEkgKiAyLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJBRF9UT19ERUcgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyByYWRpYW5zIHRvIGRlZ3JlZXNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUkFEX1RPX0RFRzogMTgwIC8gTWF0aC5QSSxcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBERUdfVE9fUkFEIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgZGVncmVlcyB0byByYWRpYW5zXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIERFR19UT19SQUQ6IE1hdGguUEkgLyAxODAsXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgZnJhbWVzIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gVEFSR0VUX0ZQTVM9MC4wNlxuICAgICAqL1xuICAgIFRBUkdFVF9GUE1TOiAwLjA2LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgdG8gaWRlbnRpZnkgdGhlIFJlbmRlcmVyIFR5cGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFJFTkRFUkVSX1RZUEVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuV0VCR0xcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5DQU5WQVNcbiAgICAgKi9cbiAgICBSRU5ERVJFUl9UWVBFOiB7XG4gICAgICAgIFVOS05PV046ICAgIDAsXG4gICAgICAgIFdFQkdMOiAgICAgIDEsXG4gICAgICAgIENBTlZBUzogICAgIDJcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyBibGVuZCBtb2RlcyBzdXBwb3J0ZWQgYnkgUElYSS4gSU1QT1JUQU5UIC0gVGhlIFdlYkdMIHJlbmRlcmVyIG9ubHkgc3VwcG9ydHNcbiAgICAgKiB0aGUgTk9STUFMLCBBREQsIE1VTFRJUExZIGFuZCBTQ1JFRU4gYmxlbmQgbW9kZXMuIEFueXRoaW5nIGVsc2Ugd2lsbCBzaWxlbnRseSBhY3QgbGlrZVxuICAgICAqIE5PUk1BTC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gQkxFTkRfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkFERFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5NVUxUSVBMWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQ1JFRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuT1ZFUkxBWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5EQVJLRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTElHSFRFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9ET0RHRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9CVVJOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhBUkRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU09GVF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5ESUZGRVJFTkNFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkVYQ0xVU0lPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IVUVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0FUVVJBVElPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MVU1JTk9TSVRZXG4gICAgICovXG4gICAgQkxFTkRfTU9ERVM6IHtcbiAgICAgICAgTk9STUFMOiAgICAgICAgIDAsXG4gICAgICAgIEFERDogICAgICAgICAgICAxLFxuICAgICAgICBNVUxUSVBMWTogICAgICAgMixcbiAgICAgICAgU0NSRUVOOiAgICAgICAgIDMsXG4gICAgICAgIE9WRVJMQVk6ICAgICAgICA0LFxuICAgICAgICBEQVJLRU46ICAgICAgICAgNSxcbiAgICAgICAgTElHSFRFTjogICAgICAgIDYsXG4gICAgICAgIENPTE9SX0RPREdFOiAgICA3LFxuICAgICAgICBDT0xPUl9CVVJOOiAgICAgOCxcbiAgICAgICAgSEFSRF9MSUdIVDogICAgIDksXG4gICAgICAgIFNPRlRfTElHSFQ6ICAgICAxMCxcbiAgICAgICAgRElGRkVSRU5DRTogICAgIDExLFxuICAgICAgICBFWENMVVNJT046ICAgICAgMTIsXG4gICAgICAgIEhVRTogICAgICAgICAgICAxMyxcbiAgICAgICAgU0FUVVJBVElPTjogICAgIDE0LFxuICAgICAgICBDT0xPUjogICAgICAgICAgMTUsXG4gICAgICAgIExVTUlOT1NJVFk6ICAgICAxNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIHdlYmdsIGRyYXcgbW9kZXMuIFRoZXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggR0wgZHJhd01vZGUgdG8gdXNlXG4gICAgICogdW5kZXIgY2VydGFpbiBzaXR1YXRpb25zIGFuZCByZW5kZXJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5QT0lOVFNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfTE9PUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX0ZBTlxuICAgICAqL1xuICAgIERSQVdfTU9ERVM6IHtcbiAgICAgICAgUE9JTlRTOiAgICAgICAgIDAsXG4gICAgICAgIExJTkVTOiAgICAgICAgICAxLFxuICAgICAgICBMSU5FX0xPT1A6ICAgICAgMixcbiAgICAgICAgTElORV9TVFJJUDogICAgIDMsXG4gICAgICAgIFRSSUFOR0xFUzogICAgICA0LFxuICAgICAgICBUUklBTkdMRV9TVFJJUDogNSxcbiAgICAgICAgVFJJQU5HTEVfRkFOOiAgIDZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBwaXhpLlxuICAgICAqXG4gICAgICogVGhlIERFRkFVTFQgc2NhbGUgbW9kZSBhZmZlY3RzIHRoZSBkZWZhdWx0IHNjYWxpbmcgbW9kZSBvZiBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAgKiBJdCBjYW4gYmUgcmUtYXNzaWduZWQgdG8gZWl0aGVyIExJTkVBUiBvciBORUFSRVNULCBkZXBlbmRpbmcgdXBvbiBzdWl0YWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0NBTEVfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuREVGQVVMVD1MSU5FQVJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTElORUFSIFNtb290aCBzY2FsaW5nXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLk5FQVJFU1QgUGl4ZWxhdGluZyBzY2FsaW5nXG4gICAgICovXG4gICAgU0NBTEVfTU9ERVM6IHtcbiAgICAgICAgREVGQVVMVDogICAgMCxcbiAgICAgICAgTElORUFSOiAgICAgMCxcbiAgICAgICAgTkVBUkVTVDogICAgMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZml4IHRoYXQgZGVub3RlcyBhIFVSTCBpcyBmb3IgYSByZXRpbmEgYXNzZXRcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gUkVUSU5BX1BSRUZJWFxuICAgICAqL1xuICAgIC8vZXhhbXBsZTogJ0AyeCcsXG4gICAgUkVUSU5BX1BSRUZJWDogL0AoLispeC8sXG5cbiAgICBSRVNPTFVUSU9OOjEsXG5cbiAgICBGSUxURVJfUkVTT0xVVElPTjoxLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgcmVuZGVyIG9wdGlvbnMgaWYgbm9uZSBhcmUgc3VwcGxpZWQgdG8ge0BsaW5rIFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKiBvciB7QGxpbmsgUElYSS5DYW52YXNSZW5kZXJlcn0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERFRkFVTFRfUkVOREVSX09QVElPTlNcbiAgICAgKiBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnZpZXc9bnVsbFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy50cmFuc3BhcmVudD1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hbnRpYWxpYXM9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuZm9yY2VGWEFBPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnJlc29sdXRpb249MVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmF1dG9SZXNpemU9ZmFsc2VcbiAgICAgKi9cbiAgICBERUZBVUxUX1JFTkRFUl9PUFRJT05TOiB7XG4gICAgICAgIHZpZXc6IG51bGwsXG4gICAgICAgIHJlc29sdXRpb246IDEsXG4gICAgICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgICAgIGZvcmNlRlhBQTogZmFsc2UsXG4gICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgIGNsZWFyQmVmb3JlUmVuZGVyOiB0cnVlLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgICAgICByb3VuZFBpeGVsczogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnRzIHRoYXQgaWRlbnRpZnkgc2hhcGVzLCBtYWlubHkgdG8gcHJldmVudCBgaW5zdGFuY2VvZmAgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFU1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUE9MWT0wXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SRUNUPTFcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkNJUkM9MlxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuRUxJUD0zXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SUkVDPTRcbiAgICAgKi9cbiAgICBTSEFQRVM6IHtcbiAgICAgICAgUE9MWTogMCxcbiAgICAgICAgUkVDVDogMSxcbiAgICAgICAgQ0lSQzogMixcbiAgICAgICAgRUxJUDogMyxcbiAgICAgICAgUlJFQzogNFxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBtYXliZSBjaGFuZ2UgdG8gU1BSSVRFLkJBVENIX1NJWkU6IDIwMDBcbiAgICAvLyBUT0RPOiBtYXliZSBhZGQgUEFSVElDTEUuQkFUQ0hfU0laRTogMTUwMDBcbiAgICBTUFJJVEVfQkFUQ0hfU0laRTogMjAwMCAvL25pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSBhbmQgZGVza3RvcCBtYWNoaW5lc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDT05TVDtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gcmVxdWlyZSgnLi9EaXNwbGF5T2JqZWN0JyksXG4gICAgUmVuZGVyVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgQ29udGFpbmVyIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0cy5cbiAqIEl0IGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBkaXNwbGF5IG9iamVjdHMgdGhhdCBhY3QgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIG9iamVjdHMuXG4gKlxuICpgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiBgYGBcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5EaXNwbGF5T2JqZWN0XG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDb250YWluZXIoKVxue1xuICAgIERpc3BsYXlPYmplY3QuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdFtdfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERpc3BsYXlPYmplY3QucHJvdG90eXBlKTtcbkNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5lcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udGFpbmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gMTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIGhlaWdodCA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBPdmVycmlkYWJsZSBtZXRob2QgdGhhdCBjYW4gYmUgdXNlZCBieSBDb250YWluZXIgc3ViY2xhc3NlcyB3aGVuZXZlciB0aGUgY2hpbGRyZW4gYXJyYXkgaXMgbW9kaWZpZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7fTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lci5cbiAqIFxuICogWW91IGNhbiBhbHNvIGFkZCBtdWx0cGxlIGl0ZW1zIGxpa2Ugc286IG15Q29udGFpbmVyLmFkZENoaWxkKHRoaW5rT25lLCB0aGluZ1R3bywgdGhpbmdUaHJlZSlcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBhZGQgdG8gdGhlIGNvbnRhaW5lclxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57IFxuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaGFzIGEgcGFyZW50IHRoZW4gbGV0cyByZW1vdmUgaXQgYXMgUGl4aSBvYmplY3RzIGNhbiBvbmx5IGV4aXN0IGluIG9uZSBwbGFjZVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UodGhpcy5jaGlsZHJlbi5sZW5ndGgtMSk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lciBhdCBhIHNwZWNpZmllZCBpbmRleC4gSWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd25cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRvIGFkZFxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBwbGFjZSB0aGUgY2hpbGQgaW5cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkQXQgPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hpbGQgKyAnYWRkQ2hpbGRBdDogVGhlIGluZGV4ICcrIGluZGV4ICsnIHN1cHBsaWVkIGlzIG91dCBvZiBib3VuZHMgJyArIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiAyIERpc3BsYXkgT2JqZWN0cyB3aXRoaW4gdGhpcyBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKiBAcGFyYW0gY2hpbGQyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc3dhcENoaWxkcmVuID0gZnVuY3Rpb24gKGNoaWxkLCBjaGlsZDIpXG57XG4gICAgaWYgKGNoaWxkID09PSBjaGlsZDIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluZGV4MSA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG4gICAgdmFyIGluZGV4MiA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZDIpO1xuXG4gICAgaWYgKGluZGV4MSA8IDAgfHwgaW5kZXgyIDwgMClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3dhcENoaWxkcmVuOiBCb3RoIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0cyBtdXN0IGJlIGNoaWxkcmVuIG9mIHRoZSBjYWxsZXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDFdID0gY2hpbGQyO1xuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgyXSA9IGNoaWxkO1xuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleDEgPCBpbmRleDIgPyBpbmRleDEgOiBpbmRleDIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBwb3NpdGlvbiBvZiBhIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgdG8gaWRlbnRpZnlcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdCB0byBpZGVudGlmeVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiBhbiBleGlzdGluZyBjaGlsZCBpbiB0aGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIGZvciB3aGljaCB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGluZGV4IG51bWJlclxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSByZXN1bHRpbmcgaW5kZXggbnVtYmVyIGZvciB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuXG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgY3VycmVudEluZGV4LCAxKTsgLy8gcmVtb3ZlIGZyb20gb2xkIHBvc2l0aW9uXG4gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsgLy9hZGQgYXQgbmV3IHBvc2l0aW9uXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBhdFxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgYXQgdGhlIGdpdmVuIGluZGV4LCBpZiBhbnkuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDaGlsZEF0OiBTdXBwbGllZCBpbmRleCAnICsgaW5kZXggKyAnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjaGlsZCBsaXN0LCBvciB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baW5kZXhdO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW1vdmVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIHNwZWNpZmllZCBpbmRleCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgZnJvbVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIHZhciBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRBdChpbmRleCk7XG5cbiAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIGNvbnRhaW5lciB0aGF0IGFyZSB3aXRoaW4gdGhlIGJlZ2luIGFuZCBlbmQgaW5kZXhlcy5cbiAqXG4gKiBAcGFyYW0gYmVnaW5JbmRleCB7bnVtYmVyfSBUaGUgYmVnaW5uaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gKiBAcGFyYW0gZW5kSW5kZXgge251bWJlcn0gVGhlIGVuZGluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzaXplIG9mIHRoZSBjb250YWluZXIuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbiAoYmVnaW5JbmRleCwgZW5kSW5kZXgpXG57XG4gICAgdmFyIGJlZ2luID0gYmVnaW5JbmRleCB8fCAwO1xuICAgIHZhciBlbmQgPSB0eXBlb2YgZW5kSW5kZXggPT09ICdudW1iZXInID8gZW5kSW5kZXggOiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgcmFuZ2UgPSBlbmQgLSBiZWdpbjtcbiAgICB2YXIgcmVtb3ZlZCwgaTtcblxuICAgIGlmIChyYW5nZSA+IDAgJiYgcmFuZ2UgPD0gZW5kKVxuICAgIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGJlZ2luLCByYW5nZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0ucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShiZWdpbkluZGV4KTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZ2UgPT09IDAgJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyZW1vdmVDaGlsZHJlbjogbnVtZXJpYyB2YWx1ZXMgYXJlIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UuJyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIgZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSBmYWxzZTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkNvbnRhaW5lci5wcm90b3R5cGUuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtID0gQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIHRoZSBib3VuZHMgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCB0aGlzIHJlbmRlciBzZXNzaW9uIHNvIHJldHVybiB3aGF0IHdlIGhhdmVcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgY2hpbGRCb3VuZHM7XG4gICAgICAgIHZhciBjaGlsZE1heFg7XG4gICAgICAgIHZhciBjaGlsZE1heFk7XG5cbiAgICAgICAgdmFyIGNoaWxkVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgY2hpbGRCb3VuZHMgPSB0aGlzLmNoaWxkcmVuW2ldLmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBtaW5YID0gbWluWCA8IGNoaWxkQm91bmRzLnggPyBtaW5YIDogY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIG1pblkgPSBtaW5ZIDwgY2hpbGRCb3VuZHMueSA/IG1pblkgOiBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBjaGlsZE1heFggPSBjaGlsZEJvdW5kcy53aWR0aCArIGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICBjaGlsZE1heFkgPSBjaGlsZEJvdW5kcy5oZWlnaHQgKyBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBtYXhYID0gbWF4WCA+IGNoaWxkTWF4WCA/IG1heFggOiBjaGlsZE1heFg7XG4gICAgICAgICAgICBtYXhZID0gbWF4WSA+IGNoaWxkTWF4WSA/IG1heFkgOiBjaGlsZE1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkVmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJHZXRCb3VuZHMgPSBDb250YWluZXIucHJvdG90eXBlLmdldEJvdW5kcztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5vbi1nbG9iYWwgbG9jYWwgYm91bmRzIG9mIHRoZSBDb250YWluZXIgYXMgYSByZWN0YW5nbGUuXG4gKiBUaGUgY2FsY3VsYXRpb24gdGFrZXMgYWxsIHZpc2libGUgY2hpbGRyZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4Q2FjaGUgPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdGguTWF0cml4LklERU5USVRZO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdHJpeENhY2hlO1xuXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMoIG1hdGguTWF0cml4LklERU5USVRZICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICBcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpLCBqO1xuXG4gICAgLy8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyBlbGVtZW50IGhhcyBhIG1hc2sgb3IgYSBmaWx0ZXIuXG4gICAgaWYgKHRoaXMuX21hc2sgfHwgdGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuXG4gICAgICAgIC8vIHB1c2ggZmlsdGVyIGZpcnN0IGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyBjb3JyZWN0IGZvciBhbnkgbWFza2luZ1xuICAgICAgICBpZiAodGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRoaXMsIHRoaXMuX2ZpbHRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnB1c2hNYXNrKHRoaXMsIHRoaXMuX21hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgLy8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBiYXRjaCwgb25seSByZW5kZXJlZCBpZiBpdCBoYXMgYSB0ZXh0dXJlLlxuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIG1ha2Ugc3VyZSB0aGV5IGdldCByZW5kZXJlZFxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmlsdGVycylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gc2ltcGxlIHJlbmRlciBjaGlsZHJlbiFcbiAgICAgICAgZm9yIChpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnJlbmRlcldlYkdMKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3ViY2xhc3NcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyB0aGlzIGlzIHdoZXJlIGNvbnRlbnQgaXRzZWxmIGdldHMgcmVuZGVyZWQuLi5cbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpc1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMuYWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcy5fbWFzaywgcmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlckNhbnZhcyhyZW5kZXJlcik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFzaylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2socmVuZGVyZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcbntcbiAgICBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBpZiAoZGVzdHJveUNoaWxkcmVuKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KGRlc3Ryb3lDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9UcmFuc2Zvcm0nKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgIF90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgdGhhdCBhcmUgcmVuZGVyZWQgb24gdGhlIHNjcmVlbi5cbiAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvbiBpdHMgb3duIHJhdGhlciBpdCBzaG91bGQgYmUgZXh0ZW5kZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIERpc3BsYXlPYmplY3QoKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29vcmRpbmF0ZSBvZiB0aGUgb2JqZWN0IHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy50cmFuc2Zvcm0ucG9zaXRpb247XG4gICAvLyB0aGlzLl9wb3NpdGlvbiA9IG5ldyBDYWNoZVBvaW50KHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIGZhY3RvciBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlID0gdGhpcy50cmFuc2Zvcm0uc2NhbGVcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXZvdCBwb2ludCBvZiB0aGUgZGlzcGxheU9iamVjdCB0aGF0IGl0IHJvdGF0ZXMgYXJvdW5kXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucGl2b3QgPSB0aGlzLnRyYW5zZm9ybS5waXZvdFxuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2tldyBmYWN0b3IgZm9yIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5za2V3ID0gdGhpcy50cmFuc2Zvcm0uc2tld1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9yb3RhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BhY2l0eSBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpc2liaWxpdHkgb2YgdGhlIG9iamVjdC4gSWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biwgYW5kXG4gICAgICogdGhlIHVwZGF0ZVRyYW5zZm9ybSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDYW4gdGhpcyBvYmplY3QgYmUgcmVuZGVyZWQsIGlmIGZhbHNlIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgZHJhd24gYnV0IHRoZSB1cGRhdGVUcmFuc2Zvcm1cbiAgICAgKiBtZXRob2RzIHdpbGwgc3RpbGwgYmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmFibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIHRoaXMgZGlzcGxheSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNvbnRhaW5lcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbXVsdGlwbGllZCBhbHBoYSBvZiB0aGUgZGlzcGxheU9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRyYW5zZm9ybSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIHdvcmxkIChwYXJlbnQpIGZhY3RvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gdGhpcy50cmFuc2Zvcm0ubG9jYWxUcmFuc2Zvcm07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJlYSB0aGUgZmlsdGVyIGlzIGFwcGxpZWQgdG8uIFRoaXMgaXMgdXNlZCBhcyBtb3JlIG9mIGFuIG9wdGltaXNhdGlvblxuICAgICAqIHJhdGhlciB0aGFuIGZpZ3VyaW5nIG91dCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgZGlzcGxheU9iamVjdCBlYWNoIGZyYW1lIHlvdSBjYW4gc2V0IHRoaXMgcmVjdGFuZ2xlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xuXG4gICAgLyoqeHd3XG4gICAgICogY2FjaGVkIHNpbiByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3IgPSAwO1xuXG4gICAgLyoqXG4gICAgICogY2FjaGVkIGNvcyByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3IgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRzID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vc3QgdXAtdG8tZGF0ZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcmlnaW5hbCwgY2FjaGVkIG1hc2sgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXNrID0gbnVsbDtcblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGF5T2JqZWN0O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB4IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NhbGVYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByb3RhdGlvbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY3IgPSBNYXRoLmNvcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHNwcml0ZSBpcyBnbG9iYWxseSB2aXNpYmxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHdvcmxkVmlzaWJsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcztcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbWFzayBmb3IgdGhlIGRpc3BsYXlPYmplY3QuIEEgbWFzayBpcyBhbiBvYmplY3QgdGhhdCBsaW1pdHMgdGhlIHZpc2liaWxpdHkgb2YgYW4gb2JqZWN0IHRvIHRoZSBzaGFwZSBvZiB0aGUgbWFzayBhcHBsaWVkIHRvIGl0LlxuICAgICAqIEluIFBJWEkgYSByZWd1bGFyIG1hc2sgbXVzdCBiZSBhIFBJWEkuR3JhcGhpY3Mgb3IgYSBQSVhJLlNwcml0ZSBvYmplY3QuIFRoaXMgYWxsb3dzIGZvciBtdWNoIGZhc3RlciBtYXNraW5nIGluIGNhbnZhcyBhcyBpdCB1dGlsaXNlcyBzaGFwZSBjbGlwcGluZy5cbiAgICAgKiBUbyByZW1vdmUgYSBtYXNrLCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc3xQSVhJLlNwcml0ZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIG1hc2s6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFzaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX21hc2sgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFzay5yZW5kZXJhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVycyBmb3IgdGhlIGRpc3BsYXlPYmplY3QuXG4gICAgICogKiBJTVBPUlRBTlQ6IFRoaXMgaXMgYSB3ZWJHTCBvbmx5IGZlYXR1cmUgYW5kIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqIFRvIHJlbW92ZSBmaWx0ZXJzIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnbnVsbCdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGZpbHRlcnM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLnNsaWNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gdmFsdWUgJiYgdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBUT0RPIC0gT3B0aW1pemF0aW9uIHBhc3MhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgLy8gbXVsdGlwbHkgdGhlIGFscGhhcy4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG59O1xuXG4vLyBwZXJmb3JtYW5jZSBpbmNyZWFzZSB0byBhdm9pZCB1c2luZyBjYWxsLi4gKDEweCBmYXN0ZXIpXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtID0gRGlzcGxheU9iamVjdC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtO1xuXG4vKipcbiAqXG4gKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeCkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMobWF0aC5NYXRyaXguSURFTlRJVFkpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvR2xvYmFsID0gZnVuY3Rpb24gKHBvc2l0aW9uKVxue1xuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb3RcbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseShwb3NpdGlvbik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdCByZWxhdGl2ZSB0byBhbm90aGVyIHBvaW50XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcGFyYW0gW2Zyb21dIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgZ2xvYmFsIHBvc2l0aW9uIGZyb21cbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgUG9pbnQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvTG9jYWwgPSBmdW5jdGlvbiAocG9zaXRpb24sIGZyb20sIHBvaW50KVxue1xuICAgIGlmIChmcm9tKVxuICAgIHtcbiAgICAgICAgcG9zaXRpb24gPSBmcm9tLnRvR2xvYmFsKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBzaW1wbHkgYXBwbHkgdGhlIG1hdHJpeC4uXG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvc2l0aW9uLCBwb2ludCk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFyZW50IENvbnRhaW5lciBvZiB0aGlzIERpc3BsYXlPYmplY3RcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdG8gYWRkIHRoaXMgRGlzcGxheU9iamVjdCB0b1xuICogQHJldHVybiB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRoYXQgdGhpcyBEaXNwbGF5T2JqZWN0IHdhcyBhZGRlZCB0b1xuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXIuYWRkQ2hpbGQpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFBhcmVudDogQXJndW1lbnQgbXVzdCBiZSBhIENvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRDaGlsZCh0aGlzKTtcbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzZXQgdGhlIHBvc3Rpb24sIHNjYWxlLCBza2V3IGFuZCBwaXZvdCBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBUaGUgWCBwb3NpdGlvblxuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IFRoZSBZIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3NjYWxlWD0xXSB7bnVtYmVyfSBUaGUgWCBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtzY2FsZVk9MV0ge251bWJlcn0gVGhlIFkgc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbcm90YXRpb249MF0ge251bWJlcn0gVGhlIHJvdGF0aW9uXG4gKiBAcGFyYW0gW3NrZXdYPTBdIHtudW1iZXJ9IFRoZSBYIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbc2tld1k9MF0ge251bWJlcn0gVGhlIFkgc2tldyB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFg9MF0ge251bWJlcn0gVGhlIFggcGl2b3QgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RZPTBdIHtudW1iZXJ9IFRoZSBZIHBpdm90IHZhbHVlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKHgsIHksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZLCBwaXZvdFgsIHBpdm90WSkgLy9qc2hpbnQgaWdub3JlOmxpbmVcbntcbiAgICB0aGlzLnBvc2l0aW9uLnggPSB4IHx8IDA7XG4gICAgdGhpcy5wb3NpdGlvbi55ID0geSB8fCAwO1xuICAgIHRoaXMuc2NhbGUueCA9ICFzY2FsZVggPyAxIDogc2NhbGVYO1xuICAgIHRoaXMuc2NhbGUueSA9ICFzY2FsZVkgPyAxIDogc2NhbGVZO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgIHRoaXMuc2tldy54ID0gc2tld1ggfHwgMDtcbiAgICB0aGlzLnNrZXcueSA9IHNrZXdZIHx8IDA7XG4gICAgdGhpcy5waXZvdC54ID0gcGl2b3RYIHx8IDA7XG4gICAgdGhpcy5waXZvdC55ID0gcGl2b3RZIHx8IDA7XG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEJhc2UgZGVzdHJveSBtZXRob2QgZm9yIGdlbmVyaWMgZGlzcGxheSBvYmplY3RzXG4gKlxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcblxuICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2NhbGUgPSBudWxsO1xuICAgIHRoaXMucGl2b3QgPSBudWxsO1xuICAgIHRoaXMuc2tldyA9IG51bGw7XG5cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcblxuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IG1hdGguUG9pbnQoMSwxKTtcbiAgICB0aGlzLnBpdm90ID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNrZXcgPSBuZXcgbWF0aC5Qb2ludCgwLjApO1xuICAgIFxuICAgIHRoaXMucm90YXRpb24gPSAwO1xuICAgIHRoaXMuX3NyID0gTWF0aC5zaW4oMCk7XG4gICAgdGhpcy5fY3IgPSBNYXRoLmNvcygwKTtcbiAgICBcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufVxuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHJhbnNmb3JtO1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uIChwYXJlbnRUcmFuc2Zvcm0pXG57XG4gICAgdmFyIHB0ID0gcGFyZW50VHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGx0ID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcblxuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueDtcbiAgICAgICAgbHQuYiAgPSAgdGhpcy5fc3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmMgID0gLXRoaXMuX3NyICogdGhpcy5zY2FsZS55O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQudHggPSAgdGhpcy5wb3NpdGlvbi54IC0gKHRoaXMucGl2b3QueCAqIGx0LmEgKyB0aGlzLnBpdm90LnkgKiBsdC5jKTtcbiAgICAgICAgbHQudHkgPSAgdGhpcy5wb3NpdGlvbi55IC0gKHRoaXMucGl2b3QueCAqIGx0LmIgKyB0aGlzLnBpdm90LnkgKiBsdC5kKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmRpcnR5IHx8IHBhcmVudC5kaXJ0eSlcbiAgICB7ICAgICAgXG4gICAgICAgIC8vIGNvbmNhdCB0aGUgcGFyZW50IG1hdHJpeCB3aXRoIHRoZSBvYmplY3RzIHRyYW5zZm9ybS5cbiAgICAgICAgd3QuYSAgPSBsdC5hICAqIHB0LmEgKyBsdC5iICAqIHB0LmM7XG4gICAgICAgIHd0LmIgID0gbHQuYSAgKiBwdC5iICsgbHQuYiAgKiBwdC5kO1xuICAgICAgICB3dC5jICA9IGx0LmMgICogcHQuYSArIGx0LmQgICogcHQuYztcbiAgICAgICAgd3QuZCAgPSBsdC5jICAqIHB0LmIgKyBsdC5kICAqIHB0LmQ7XG4gICAgICAgIHd0LnR4ID0gbHQudHggKiBwdC5hICsgbHQudHkgKiBwdC5jICsgcHQudHg7XG4gICAgICAgIHd0LnR5ID0gbHQudHggKiBwdC5iICsgbHQudHkgKiBwdC5kICsgcHQudHk7ICAgICAgIFxuICAgIFxuICAgLy8gICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgLy8gICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbi8vICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgLy8gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm07XG5cblxuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vR3JhcGhpY3NEYXRhJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcFBvaW50ID0gbmV3IG1hdGguUG9pbnQoKTtcblxuLyoqXG4gKiBUaGUgR3JhcGhpY3MgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB1c2VkIHRvIGRyYXcgcHJpbWl0aXZlIHNoYXBlcyBzdWNoIGFzIGxpbmVzLCBjaXJjbGVzIGFuZFxuICogcmVjdGFuZ2xlcyB0byB0aGUgZGlzcGxheSwgYW5kIHRvIGNvbG9yIGFuZCBmaWxsIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3MoKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCAodGhpY2tuZXNzKSBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gMDtcblxuICAgIC8qKlxuICAgICAqIEdyYXBoaWNzIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQXBwbHkgYSB2YWx1ZSBvZiAweEZGRkZGRiB0byByZXNldCB0aGUgdGludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByZXZpb3VzIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVXNlZCB0byBjb21wYXJlIHRvIHRoZSBjdXJyZW50IHRpbnQgYW5kIGNoZWNrIGlmIHRoZXJlcyBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMuX3ByZXZUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUw7XG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHBhdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBjb250YWluaW5nIHNvbWUgV2ViR0wtcmVsYXRlZCBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgb2JqZWN0Pn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIFRPRE8gLSBfd2ViZ2wgc2hvdWxkIHVzZSBhIHByb3RvdHlwZSBvYmplY3QsIG5vdCBhIHJhbmRvbSB1bmRvY3VtZW50ZWQgb2JqZWN0Li4uXG4gICAgdGhpcy5fd2ViR0wgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBzaGFwZSBpcyBiZWluZyB1c2VkIGFzIGEgbWFzay5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc01hc2sgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBib3VuZHMnIHBhZGRpbmcgdXNlZCBmb3IgYm91bmRzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYm91bmRzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBsb2NhbCBib3VuZHMgdG8gcHJldmVudCByZWNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLDAsMSwxKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgV2ViR0wgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlXG4gICAgICogZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgY2FjaGVkIHNwcml0ZSBvYmplY3QgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGNhY2hlQXNCaXRtYXAgaXMgc2V0IHRvIHRydWUgdGhlIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIGFzIGlmIGl0IHdhcyBhIHNwcml0ZS5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGdyYXBoaWNzIGVsZW1lbnQgZG9lcyBub3QgY2hhbmdlIG9mdGVuLCBhcyBpdCB3aWxsIHNwZWVkIHVwIHRoZSByZW5kZXJpbmdcbiAgICAgKiBvZiB0aGUgb2JqZWN0IGluIGV4Y2hhbmdlIGZvciB0YWtpbmcgdXAgdGV4dHVyZSBtZW1vcnkuIEl0IGlzIGFsc28gdXNlZnVsIGlmIHlvdSBuZWVkIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB0byBiZSBhbnRpLWFsaWFzZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyBjYW52YXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGlmXG4gICAgICogeW91IGFyZSBjb25zdGFudGx5IHJlZHJhd2luZyB0aGUgZ3JhcGhpY3MgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhY2hlQXNCaXRtYXBcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkdyYXBoaWNzI1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5HcmFwaGljcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3M7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICogTm90ZSB0aGF0IHRoZSBvbmx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIGNsb25lZCwgbm90IGl0cyB0cmFuc2Zvcm0gKHBvc2l0aW9uLHNjYWxlLGV0YylcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjbG9uZSA9IG5ldyBHcmFwaGljcygpO1xuXG4gICAgY2xvbmUucmVuZGVyYWJsZSAgICA9IHRoaXMucmVuZGVyYWJsZTtcbiAgICBjbG9uZS5maWxsQWxwaGEgICAgID0gdGhpcy5maWxsQWxwaGE7XG4gICAgY2xvbmUubGluZVdpZHRoICAgICA9IHRoaXMubGluZVdpZHRoO1xuICAgIGNsb25lLmxpbmVDb2xvciAgICAgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICBjbG9uZS50aW50ICAgICAgICAgID0gdGhpcy50aW50O1xuICAgIGNsb25lLmJsZW5kTW9kZSAgICAgPSB0aGlzLmJsZW5kTW9kZTtcbiAgICBjbG9uZS5pc01hc2sgICAgICAgID0gdGhpcy5pc01hc2s7XG4gICAgY2xvbmUuYm91bmRzUGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcbiAgICBjbG9uZS5kaXJ0eSAgICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5nbERpcnR5ICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRoaXMuY2FjaGVkU3ByaXRlRGlydHk7XG5cbiAgICAvLyBjb3B5IGdyYXBoaWNzIGRhdGFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgY2xvbmUuZ3JhcGhpY3NEYXRhLnB1c2godGhpcy5ncmFwaGljc0RhdGFbaV0uY2xvbmUoKSk7XG4gICAgfVxuXG4gICAgY2xvbmUuY3VycmVudFBhdGggPSBjbG9uZS5ncmFwaGljc0RhdGFbY2xvbmUuZ3JhcGhpY3NEYXRhLmxlbmd0aCAtIDFdO1xuXG4gICAgY2xvbmUudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgIHJldHVybiBjbG9uZTtcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsaW5lIHN0eWxlIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gR3JhcGhpY3MgbWV0aG9kcyBzdWNoIGFzIHRoZSBsaW5lVG8oKSBtZXRob2Qgb3IgdGhlIGRyYXdDaXJjbGUoKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lU3R5bGUgPSBmdW5jdGlvbiAobGluZVdpZHRoLCBjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGggfHwgMDtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5saW5lQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGhhbGZ3YXkgdGhyb3VnaCBhIGxpbmU/IHN0YXJ0IGEgbmV3IG9uZSFcbiAgICAgICAgICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24odGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMuc2xpY2UoLTIpKTtcbiAgICAgICAgICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0cyBlbXB0eSBzbyBsZXRzIGp1c3Qgc2V0IHRoZSBsaW5lIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQWxwaGEgPSB0aGlzLmxpbmVBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBNb3ZlcyB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvIHgsIHkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gICovXG5HcmFwaGljcy5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihbeCx5XSk7XG4gICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgbGluZSB1c2luZyB0aGUgY3VycmVudCBsaW5lIHN0eWxlIGZyb20gdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byAoeCwgeSk7XG4gKiBUaGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIGlzIHRoZW4gc2V0IHRvICh4LCB5KS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeCwgeSk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsIDApO1xuICAgIH1cblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICB4YSA9IGZyb21YICsgKCAoY3BYIC0gZnJvbVgpICogaiApO1xuICAgICAgICB5YSA9IGZyb21ZICsgKCAoY3BZIC0gZnJvbVkpICogaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCB4YSArICggKChjcFggKyAoICh0b1ggLSBjcFgpICogaiApKSAtIHhhKSAqIGogKSxcbiAgICAgICAgICAgICAgICAgICAgIHlhICsgKCAoKGNwWSArICggKHRvWSAtIGNwWSkgKiBqICkpIC0geWEpICogaiApICk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSBjcFgyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgY3BYMiwgY3BZMiwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciBuID0gMjAsXG4gICAgICAgIGR0LFxuICAgICAgICBkdDIsXG4gICAgICAgIGR0MyxcbiAgICAgICAgdDIsXG4gICAgICAgIHQzLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIGR0ID0gKDEgLSBqKTtcbiAgICAgICAgZHQyID0gZHQgKiBkdDtcbiAgICAgICAgZHQzID0gZHQyICogZHQ7XG5cbiAgICAgICAgdDIgPSBqICogajtcbiAgICAgICAgdDMgPSB0MiAqIGo7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIGR0MyAqIGZyb21YICsgMyAqIGR0MiAqIGogKiBjcFggKyAzICogZHQgKiB0MiAqIGNwWDIgKyB0MyAqIHRvWCxcbiAgICAgICAgICAgICAgICAgICAgIGR0MyAqIGZyb21ZICsgMyAqIGR0MiAqIGogKiBjcFkgKyAzICogZHQgKiB0MiAqIGNwWTIgKyB0MyAqIHRvWSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmNUbygpIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSBiZXR3ZWVuIHR3byB0YW5nZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFwiYm9ycm93ZWRcIiBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZnhjYW52YXMvIC0gdGhhbmtzIGdvb2dsZSFcbiAqXG4gKiBAcGFyYW0geDEge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHgyIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTIge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjVG8gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIHJhZGl1cylcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyh4MSwgeTEpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyxcbiAgICAgICAgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSxcbiAgICAgICAgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSxcbiAgICAgICAgYTEgPSBmcm9tWSAtIHkxLFxuICAgICAgICBiMSA9IGZyb21YIC0geDEsXG4gICAgICAgIGEyID0geTIgICAtIHkxLFxuICAgICAgICBiMiA9IHgyICAgLSB4MSxcbiAgICAgICAgbW0gPSBNYXRoLmFicyhhMSAqIGIyIC0gYjEgKiBhMik7XG5cbiAgICBpZiAobW0gPCAxLjBlLTggfHwgcmFkaXVzID09PSAwKVxuICAgIHtcbiAgICAgICAgaWYgKHBvaW50c1twb2ludHMubGVuZ3RoLTJdICE9PSB4MSB8fCBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSAhPT0geTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIGRkID0gYTEgKiBhMSArIGIxICogYjEsXG4gICAgICAgICAgICBjYyA9IGEyICogYTIgKyBiMiAqIGIyLFxuICAgICAgICAgICAgdHQgPSBhMSAqIGEyICsgYjEgKiBiMixcbiAgICAgICAgICAgIGsxID0gcmFkaXVzICogTWF0aC5zcXJ0KGRkKSAvIG1tLFxuICAgICAgICAgICAgazIgPSByYWRpdXMgKiBNYXRoLnNxcnQoY2MpIC8gbW0sXG4gICAgICAgICAgICBqMSA9IGsxICogdHQgLyBkZCxcbiAgICAgICAgICAgIGoyID0gazIgKiB0dCAvIGNjLFxuICAgICAgICAgICAgY3ggPSBrMSAqIGIyICsgazIgKiBiMSxcbiAgICAgICAgICAgIGN5ID0gazEgKiBhMiArIGsyICogYTEsXG4gICAgICAgICAgICBweCA9IGIxICogKGsyICsgajEpLFxuICAgICAgICAgICAgcHkgPSBhMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHF4ID0gYjIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBxeSA9IGEyICogKGsxICsgajIpLFxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IE1hdGguYXRhbjIocHkgLSBjeSwgcHggLSBjeCksXG4gICAgICAgICAgICBlbmRBbmdsZSAgID0gTWF0aC5hdGFuMihxeSAtIGN5LCBxeCAtIGN4KTtcblxuICAgICAgICB0aGlzLmFyYyhjeCArIHgxLCBjeSArIHkxLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBiMSAqIGEyID4gYjIgKiBhMSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmMgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlICh1c2VkIHRvIGNyZWF0ZSBjaXJjbGVzLCBvciBwYXJ0cyBvZiBjaXJjbGVzKS5cbiAqXG4gKiBAcGFyYW0gY3gge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBjeSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBzdGFydEFuZ2xlIHtudW1iZXJ9IFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucyAoMCBpcyBhdCB0aGUgMyBvJ2Nsb2NrIHBvc2l0aW9uIG9mIHRoZSBhcmMncyBjaXJjbGUpXG4gKiBAcGFyYW0gZW5kQW5nbGUge251bWJlcn0gVGhlIGVuZGluZyBhbmdsZSwgaW4gcmFkaWFuc1xuICogQHBhcmFtIGFudGljbG9ja3dpc2Uge2Jvb2xlYW59IE9wdGlvbmFsLiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgY291bnRlcmNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuIEZhbHNlIGlzIGRlZmF1bHQsIGFuZCBpbmRpY2F0ZXMgY2xvY2t3aXNlLCB3aGlsZSB0cnVlIGluZGljYXRlcyBjb3VudGVyLWNsb2Nrd2lzZS5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmMgPSBmdW5jdGlvbihjeCwgY3ksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UpXG57XG4gICAgYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gZW5kQW5nbGUpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiggIWFudGljbG9ja3dpc2UgJiYgZW5kQW5nbGUgPD0gc3RhcnRBbmdsZSApXG4gICAge1xuICAgICAgICBlbmRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG4gICAgZWxzZSBpZiggYW50aWNsb2Nrd2lzZSAmJiBzdGFydEFuZ2xlIDw9IGVuZEFuZ2xlIClcbiAgICB7XG4gICAgICAgIHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuXG4gICAgdmFyIHN3ZWVwID0gYW50aWNsb2Nrd2lzZSA/IChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpICogLTEgOiAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKTtcbiAgICB2YXIgc2VncyA9ICBNYXRoLmNlaWwoTWF0aC5hYnMoc3dlZXApIC8gKE1hdGguUEkgKiAyKSkgKiA0MDtcblxuICAgIGlmKHN3ZWVwID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0WCA9IGN4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXM7XG4gICAgdmFyIHN0YXJ0WSA9IGN5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXM7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyhzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIHRoZXRhID0gc3dlZXAvKHNlZ3MqMik7XG4gICAgdmFyIHRoZXRhMiA9IHRoZXRhKjI7XG5cbiAgICB2YXIgY1RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgICB2YXIgc2VnTWludXMgPSBzZWdzIC0gMTtcblxuICAgIHZhciByZW1haW5kZXIgPSAoIHNlZ01pbnVzICUgMSApIC8gc2VnTWludXM7XG5cbiAgICBmb3IodmFyIGk9MDsgaTw9c2VnTWludXM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciByZWFsID0gIGkgKyByZW1haW5kZXIgKiBpO1xuXG5cbiAgICAgICAgdmFyIGFuZ2xlID0gKCh0aGV0YSkgKyBzdGFydEFuZ2xlICsgKHRoZXRhMiAqIHJlYWwpKTtcblxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgdmFyIHMgPSAtTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCggKGNUaGV0YSAqICBjKSArIChzVGhldGEgKiBzKSApICogcmFkaXVzICsgY3gsXG4gICAgICAgICAgICAgICAgICAgICggKGNUaGV0YSAqIC1zKSArIChzVGhldGEgKiBjKSApICogcmFkaXVzICsgY3kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSBzaW1wbGUgb25lLWNvbG9yIGZpbGwgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIG90aGVyIEdyYXBoaWNzIG1ldGhvZHNcbiAqIChzdWNoIGFzIGxpbmVUbygpIG9yIGRyYXdDaXJjbGUoKSkgdXNlIHdoZW4gZHJhd2luZy5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmVnaW5GaWxsID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmZpbGxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGwgPSB0aGlzLmZpbGxpbmc7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxDb2xvciA9IHRoaXMuZmlsbENvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQWxwaGEgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbGwgdG8gdGhlIGxpbmVzIGFuZCBzaGFwZXMgdGhhdCB3ZXJlIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhlIGJlZ2luRmlsbCgpIG1ldGhvZC5cbiAqXG4gKiBAcmV0dXJuIHtHcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmVuZEZpbGwgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gbnVsbDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5SZWN0YW5nbGUoeCx5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBSYWRpdXMgb2YgdGhlIHJlY3RhbmdsZSBjb3JuZXJzXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JvdW5kZWRSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdDaXJjbGUgPSBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkNpcmNsZSh4LHksIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhlIGVsbGlwc2VcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3RWxsaXBzZSA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgcG9seWdvbiB1c2luZyB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCB7bnVtYmVyW118UElYSS5Qb2ludFtdfSBUaGUgcGF0aCBkYXRhIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwb2x5Z29uLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24gKHBhdGgpXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBhdGg7XG5cbiAgICB2YXIgY2xvc2VkID0gdHJ1ZTtcblxuICAgIGlmIChwb2ludHMgaW5zdGFuY2VvZiBtYXRoLlBvbHlnb24pXG4gICAge1xuICAgICAgICBjbG9zZWQgPSBwb2ludHMuY2xvc2VkO1xuICAgICAgICBwb2ludHMgPSBwb2ludHMucG9pbnRzO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50c1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24ocG9pbnRzKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBjbG9zZWQ7XG5cbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBncmFwaGljcyB0aGF0IHdlcmUgZHJhd24gdG8gdGhpcyBHcmFwaGljcyBvYmplY3QsIGFuZCByZXNldHMgZmlsbCBhbmQgbGluZSBzdHlsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuY2xlYXJEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZ2VvbWV0cnkgaXMgY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2hvdWxkIGJlIG9uZSBvZiB0aGUgc2NhbGVNb2RlIGNvbnN0c1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdFxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG5cbiAgICByZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCAqIHJlc29sdXRpb24sIGJvdW5kcy5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY2FudmFzQnVmZmVyLmNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgdGhlIHNwcml0ZSBpcyBub3QgdmlzaWJsZSBvciB0aGUgYWxwaGEgaXMgMCB0aGVuIG5vIG5lZWQgdG8gcmVuZGVyIHRoaXMgZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuZ2xEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzLnJlbmRlcih0aGlzKTtcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmlzTWFzayA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdGludCBoYXMgY2hhbmdlZCwgc2V0IHRoZSBncmFwaGljcyBvYmplY3QgdG8gZGlydHkuXG4gICAgaWYgKHRoaXMuX3ByZXZUaW50ICE9PSB0aGlzLnRpbnQpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjb2RlIG1heSBzdGlsbCBiZSBuZWVkZWQgc28gbGVhdmluZyBmb3Igbm93Li5cbiAgICAvL1xuICAgIC8qXG4gICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXApXG4gICAge1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSB8fCB0aGlzLmNhY2hlZFNwcml0ZURpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSgpO1xuXG4gICAgICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xuXG4gICAgICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMuX2NhY2hlZFNwcml0ZSwgcmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb247XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjb250ZXh0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGdyYXBoaWMgc2hhcGUgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gVGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlLCBkZWZhdWx0cyB0byB0aGlzXG4gKiAgb2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuXG4gICAgICAgIC8vIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGl0ZW0gaXMgYSBtYXNrIVxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyYWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgICAgICAgICAgdGhpcy5nbERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2xvY2FsQm91bmRzO1xuXG4gICAgICAgIHZhciB3MCA9IGJvdW5kcy54O1xuICAgICAgICB2YXIgdzEgPSBib3VuZHMud2lkdGggKyBib3VuZHMueDtcblxuICAgICAgICB2YXIgaDAgPSBib3VuZHMueTtcbiAgICAgICAgdmFyIGgxID0gYm91bmRzLmhlaWdodCArIGJvdW5kcy55O1xuXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciBtYXhYID0geDE7XG4gICAgICAgIHZhciBtYXhZID0geTE7XG5cbiAgICAgICAgdmFyIG1pblggPSB4MTtcbiAgICAgICAgdmFyIG1pblkgPSB5MTtcblxuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy54ID0gbWluWDtcbiAgICAgICAgdGhpcy5fYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IHRoaXMuX2JvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIGdyYXBoaWNzIG9iamVjdFxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5HcmFwaGljcy5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIGdyYXBoaWNzRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoIWRhdGEuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGRlYWwgd2l0aCBmaWxscy4uXG4gICAgICAgIGlmIChkYXRhLnNoYXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIGRhdGEuc2hhcGUuY29udGFpbnMoIHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSApIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICpcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUxvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGlmICh0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB2YXIgc2hhcGUsIHBvaW50cywgeCwgeSwgdywgaDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG4gICAgICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVCB8fCB0eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueCAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gUE9MWVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSAyKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvaW50c1tqKzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblggPSB4LWxpbmVXaWR0aCA8IG1pblggPyB4LWxpbmVXaWR0aCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSB4K2xpbmVXaWR0aCA+IG1heFggPyB4K2xpbmVXaWR0aCA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IHktbGluZVdpZHRoIDwgbWluWSA/IHktbGluZVdpZHRoIDogbWluWTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IHkrbGluZVdpZHRoID4gbWF4WSA/IHkrbGluZVdpZHRoIDogbWF4WTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgbWluWCA9IDA7XG4gICAgICAgIG1heFggPSAwO1xuICAgICAgICBtaW5ZID0gMDtcbiAgICAgICAgbWF4WSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy54ID0gbWluWCAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMud2lkdGggPSAobWF4WCAtIG1pblgpICsgcGFkZGluZyAqIDI7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy55ID0gbWluWSAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMuaGVpZ2h0ID0gKG1heFkgLSBtaW5ZKSArIHBhZGRpbmcgKiAyO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNhY2hlZCBzcHJpdGUgd2hlbiB0aGUgc3ByaXRlIGhhcyBjYWNoZUFzQml0bWFwID0gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgaWYgKCF0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzKTtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgU3ByaXRlKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyID0gY2FudmFzQnVmZmVyO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIucmVzaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gbGV2ZXJhZ2UgdGhlIGFuY2hvciB0byBhY2NvdW50IGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC5zYXZlKCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGFscGhhIG9mIHRoZSBncmFwaGljcyB0byAxIGZvciB0aGUgcmVuZGVyLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gbm93IHJlbmRlciB0aGUgZ3JhcGhpYy4uXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0KTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG59O1xuKi9cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjYWNoZWRTcHJpdGUgPSB0aGlzLl9jYWNoZWRTcHJpdGU7XG4gICAgdmFyIHRleHR1cmUgPSBjYWNoZWRTcHJpdGUudGV4dHVyZTtcbiAgICB2YXIgY2FudmFzID0gY2FjaGVkU3ByaXRlLmJ1ZmZlci5jYW52YXM7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLmZyYW1lLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLmZyYW1lLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICBjYWNoZWRTcHJpdGUuX3dpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIGNhY2hlZFNwcml0ZS5faGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgZGlydHkgYmFzZSB0ZXh0dXJlc1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZGlydHkoKTtcbn07Ki9cblxuLyoqXG4gKiBEZXN0cm95cyBhIHByZXZpb3VzIGNhY2hlZCBzcHJpdGUuXG4gKlxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3lDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS50ZXh0dXJlLmRlc3Ryb3kodHJ1ZSk7XG5cbiAgICAvLyBsZXQgdGhlIGdjIGNvbGxlY3QgdGhlIHVudXNlZCBzcHJpdGVcbiAgICAvLyBUT0RPIGNvdWxkIGJlIG9iamVjdCBwb29sZWQhXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07Ki9cblxuLyoqXG4gKiBEcmF3cyB0aGUgZ2l2ZW4gc2hhcGUgdG8gdGhpcyBHcmFwaGljcyBvYmplY3QuIENhbiBiZSBhbnkgb2YgQ2lyY2xlLCBSZWN0YW5nbGUsIEVsbGlwc2UsIExpbmUgb3IgUG9seWdvbi5cbiAqXG4gKiBAcGFyYW0gc2hhcGUge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX0gVGhlIGdlbmVyYXRlZCBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24gKHNoYXBlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgLy8gY2hlY2sgY3VycmVudCBwYXRoIVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IG5ldyBHcmFwaGljc0RhdGEodGhpcy5saW5lV2lkdGgsIHRoaXMubGluZUNvbG9yLCB0aGlzLmxpbmVBbHBoYSwgdGhpcy5maWxsQ29sb3IsIHRoaXMuZmlsbEFscGhhLCB0aGlzLmZpbGxpbmcsIHNoYXBlKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnB1c2goZGF0YSk7XG5cbiAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICB7XG4gICAgICAgIGRhdGEuc2hhcGUuY2xvc2VkID0gZGF0YS5zaGFwZS5jbG9zZWQgfHwgdGhpcy5maWxsaW5nO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBkZXN0cm95IGVhY2ggb2YgdGhlIEdyYXBoaWNzRGF0YSBvYmplY3RzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggd2ViZ2wgZGF0YSBlbnRyeSwgZGVzdHJveSB0aGUgV2ViR0xHcmFwaGljc0RhdGFcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl93ZWJnbCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3dlYmdsW2lkXS5kYXRhLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJnbFtpZF0uZGF0YVtqXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl93ZWJnbCA9IG51bGw7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBudWxsO1xufTtcbiIsIi8qKlxuICogQSBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBmaWxsQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbEFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGwgICAgICB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gKiBAcGFyYW0gc2hhcGUgICAgIHtDaXJjbGV8UmVjdGFuZ2xlfEVsbGlwc2V8TGluZXxQb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzRGF0YShsaW5lV2lkdGgsIGxpbmVDb2xvciwgbGluZUFscGhhLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgZmlsbCwgc2hhcGUpXG57XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IGxpbmVDb2xvcjtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVBbHBoYSA9IGxpbmVBbHBoYTtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMuX2xpbmVUaW50ID0gbGluZUNvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5fZmlsbFRpbnQgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICAgICAqL1xuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gICAgICovXG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFRoZSB0eXBlIG9mIHRoZSBzaGFwZSwgc2VlIHRoZSBDb25zdC5TaGFwZXMgZmlsZSBmb3IgYWxsIHRoZSBleGlzdGluZyB0eXBlcyxcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBzaGFwZS50eXBlO1xufVxuXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljc0RhdGEgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfVxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEdyYXBoaWNzRGF0YShcbiAgICAgICAgdGhpcy5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMubGluZUNvbG9yLFxuICAgICAgICB0aGlzLmxpbmVBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuZmlsbEFscGhhLFxuICAgICAgICB0aGlzLmZpbGwsXG4gICAgICAgIHRoaXMuc2hhcGVcbiAgICApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3MgZGF0YS5cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2hhcGUgPSBudWxsO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vV2ViR0xHcmFwaGljc0RhdGEnKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyJyksXG5cbiAgICAvLyBzb21lIGRyYXdpbmcgZnVuY3Rpb25zLi5cbiAgICBidWlsZExpbmUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkTGluZScpO1xuICAgIGJ1aWxkUG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRQb2x5Jyk7XG4gICAgYnVpbGRDb21wbGV4UG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRDb21wbGV4UG9seScpO1xuICAgIGJ1aWxkUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlJyk7XG4gICAgYnVpbGRDaXJjbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ2lyY2xlJyk7XG5cbiAgICBlYXJjdXQgPSByZXF1aXJlKCdlYXJjdXQnKTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBHcmFwaGljc1JlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgdGhpcy5ncmFwaGljc0RhdGFQb29sID0gW107XG5cbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBvaW50cyBhIHBvbHkgY2FuIGNvbnRhaW4gYmVmb3JlIGl0IGlzIHJlbmRlcmVkIGFzIGEgY29tcGxleCBwb2x5Z29uICh1c2luZyB0aGUgc3RlbmNpbCBidWZmZXIpXG4gICAgICogQHR5cGUge051bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heGltdW1TaW1wbGVQb2x5U2l6ZSA9IDIwMDtcbn1cblxuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2dyYXBoaWNzJywgR3JhcGhpY3NSZW5kZXJlcik7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZVxuICpcbiAqIEBwcml2YXRlXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy5nbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBuZXcgUHJpbWl0aXZlU2hhZGVyKHRoaXMuZ2wpXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgcmVuZGVyZXIuXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2xbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcbiAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIHZhciB3ZWJHTERhdGE7XG4gIC8vICBjb25zb2xlLmxvZyhncmFwaGljcylcbiAgICBpZiAoZ3JhcGhpY3MuZGlydHkgfHwgIWdyYXBoaWNzLl93ZWJHTFtnbC5pZF0pXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZUdyYXBoaWNzKGdyYXBoaWNzKTtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gVGhpcyAgY291bGQgYmUgc3BlZWRlZCB1cCBmb3Igc3VyZSFcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCBncmFwaGljcy5ibGVuZE1vZGUgKTtcblxuLy8gICAgdmFyIG1hdHJpeCA9ICBncmFwaGljcy53b3JsZFRyYW5zZm9ybS5jbG9uZSgpO1xuLy8gICAgdmFyIG1hdHJpeCA9ICByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXguY2xvbmUoKTtcbi8vICAgIG1hdHJpeC5hcHBlbmQoZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0pO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB3ZWJHTC5kYXRhLmxlbmd0aDsgaSA8IG47IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMLmRhdGFbaV0ubW9kZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy9UT0RPIGZpeCB0aGlzIG9uZSFcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnB1c2hTdGVuY2lsKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICBnbC51bmlmb3JtMWYocmVuZGVyZXIuc2hhZGVyTWFuYWdlci5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSAqIHdlYkdMRGF0YS5hbHBoYSk7XG5cbiAgICAgICAgICAgIC8vIHJlbmRlciBxdWFkLi5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgcmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucG9wU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICovXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHNoYWRlciA9IHRoaXMucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgICAgICAgICByZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50aW50ID0gdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5kcmF3Q291bnQrKztcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gdXBkYXRlXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnVwZGF0ZUdyYXBoaWNzID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBnZXQgdGhlIGNvbnRleHRzIGdyYXBoaWNzIG9iamVjdFxuICAgIHZhciB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF07XG5cbiAgICAvLyBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGRvZXMgbm90IGV4aXN0IGluIHRoZSB3ZWJHTCBjb250ZXh0IHRpbWUgdG8gY3JlYXRlIGl0IVxuICAgIGlmICghd2ViR0wpXG4gICAge1xuICAgICAgICB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF0gPSB7bGFzdEluZGV4OjAsIGRhdGE6W10sIGdsOmdsfTtcbiAgICB9XG5cbiAgIFxuICAgIC8vIGZsYWcgdGhlIGdyYXBoaWNzIGFzIG5vdCBkaXJ0eSBhcyB3ZSBhcmUgYWJvdXQgdG8gdXBkYXRlIGl0Li4uXG4gICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcblxuICAgIHZhciBpO1xuXG4gICAgLy8gaWYgdGhlIHVzZXIgY2xlYXJlZCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHdlIHdpbGwgbmVlZCB0byBjbGVhciBldmVyeSBvYmplY3RcbiAgICBpZiAoZ3JhcGhpY3MuY2xlYXJEaXJ0eSlcbiAgICB7XG4gICAgICAgIGdyYXBoaWNzLmNsZWFyRGlydHkgPSBmYWxzZTtcblxuICAgICAgICAvLyBsb29wIHRocm91Z2ggYW5kIHJldHVybiBhbGwgdGhlIHdlYkdMRGF0YXMgdG8gdGhlIG9iamVjdCBwb29sIHNvIHRoYW4gY2FuIGJlIHJldXNlZCBsYXRlciBvblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGdyYXBoaWNzRGF0YSA9IHdlYkdMLmRhdGFbaV07XG4gICAgICAgICAgICBncmFwaGljc0RhdGEucmVzZXQoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wdXNoKCBncmFwaGljc0RhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIHRoZSBhcnJheSBhbmQgcmVzZXQgdGhlIGluZGV4Li5cbiAgICAgICAgd2ViR0wuZGF0YSA9IFtdO1xuICAgICAgICB3ZWJHTC5sYXN0SW5kZXggPSAwO1xuICAgIH1cblxuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICAvLyBsb29wIHRocm91Z2ggdGhlIGdyYXBoaWNzIGRhdGFzIGFuZCBjb25zdHJ1Y3QgZWFjaCBvbmUuLlxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgYSBjb21wbGV4IGZpbGwgdGhlbiB0aGUgbmV3IHN0ZW5jaWwgYnVmZmVyIHRlY2huaXF1ZSB3aWxsIGJlIHVzZWRcbiAgICAvLyBvdGhlciB3aXNlIGdyYXBoaWNzIG9iamVjdHMgd2lsbCBiZSBwdXNoZWQgaW50byBhIGJhdGNoLi5cbiAgICBmb3IgKGkgPSB3ZWJHTC5sYXN0SW5kZXg7IGkgPCBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gbmVlZCB0byBhZGQgdGhlIHBvaW50cyB0aGUgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgICAgICAgICBkYXRhLnBvaW50cyA9IGRhdGEuc2hhcGUucG9pbnRzLnNsaWNlKCk7XG4gICAgICAgICAgICBpZiAoZGF0YS5zaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gY2xvc2UgdGhlIHBvbHkgaWYgdGhlIHZhbHVlIGlzIHRydWUhXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzWzBdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMl0gfHwgZGF0YS5wb2ludHNbMV0gIT09IGRhdGEucG9pbnRzW2RhdGEucG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucG9pbnRzLnB1c2goZGF0YS5wb2ludHNbMF0sIGRhdGEucG9pbnRzWzFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1BS0UgU1VSRSBXRSBIQVZFIFRIRSBDT1JSRUNUIFRZUEUuLlxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoID49IDYpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoIDwgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgKiAyKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FuRHJhd1VzaW5nU2ltcGxlID0gYnVpbGRQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuRHJhd1VzaW5nU2ltcGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGggPiAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG4gICAgICAgICAgICAgICAgYnVpbGRMaW5lKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQyB8fCBkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5FTElQKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkQ2lyY2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2ViR0wubGFzdEluZGV4Kys7XG4gICAgfVxuXG4gICAgLy8gdXBsb2FkIGFsbCB0aGUgZGlydHkgZGF0YS4uLlxuICAgIGZvciAoaSA9IDA7IGkgPCB3ZWJHTC5kYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVtpXTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLmRpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEudXBsb2FkKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB3ZWJHTCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IFRPRE8gQEFsdmluXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnN3aXRjaE1vZGUgPSBmdW5jdGlvbiAod2ViR0wsIHR5cGUpXG57XG4gICAgdmFyIHdlYkdMRGF0YTtcblxuICAgIGlmICghd2ViR0wuZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgd2ViR0xEYXRhLm1vZGUgPSB0eXBlO1xuICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVt3ZWJHTC5kYXRhLmxlbmd0aC0xXTtcblxuICAgICAgICBpZiAoKHdlYkdMRGF0YS5wb2ludHMubGVuZ3RoID4gMzIwMDAwKSB8fCB3ZWJHTERhdGEubW9kZSAhPT0gdHlwZSB8fCB0eXBlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgICAgIHdlYkdMLmRhdGEucHVzaCh3ZWJHTERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd2ViR0xEYXRhLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB3ZWJHTERhdGE7XG59O1xuXG4iLCIvKipcbiAqIEFuIG9iamVjdCBjb250YWluaW5nIFdlYkdMIHNwZWNpZmljIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBXZWJHTEdyYXBoaWNzRGF0YShnbCkge1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLy9UT0RPIGRvZXMgdGhpcyBuZWVkIHRvIGJlIHNwbGl0IGJlZm9yZSB1cGxvZGluZz8/XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgY29sb3IgY29tcG9uZW50cyAocixnLGIpXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5jb2xvciA9IFswLDAsMF07IC8vIGNvbG9yIHNwbGl0IVxuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgcG9pbnRzIHRvIGRyYXdcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50W119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IFtdO1xuICAgIC8qKlxuICAgICAqIFRoZSBtYWluIGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggYnVmZmVyXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogdG9kbyBAYWx2aW5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tb2RlID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgZ3JhcGhpY3MgaXMgZGlydHkgb3Igbm90XG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn1cblxuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xHcmFwaGljc0RhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIFJlc2V0cyB0aGUgdmVydGljZXMgYW5kIHRoZSBpbmRpY2VzXG4gKi9cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnBvaW50cy5sZW5ndGggPSAwO1xuICAgIHRoaXMuaW5kaWNlcy5sZW5ndGggPSAwO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbi8vICAgIHRoaXMubGFzdEluZGV4ID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDtcbiAgICB0aGlzLmdsUG9pbnRzID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnBvaW50cyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5idWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmdsUG9pbnRzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmdsSW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmluZGljZXMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5nbEluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuY29sb3IgPSBudWxsO1xuICAgIHRoaXMucG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIFxuICAgIHRoaXMuZ2wgPSBudWxsO1xuXG4gICAgdGhpcy5idWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5nbFBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5nbEluZGljZXMgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihnbClcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBnbCxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgZmxpcFk7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIHZlYzMgdGludDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvciAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpXG4gICAgKTtcbn1cblxuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHJpbWl0aXZlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBjaXJjbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRyYXdcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDaXJjbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgdmFyIGNpcmNsZURhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSBjaXJjbGVEYXRhLng7XG4gICAgdmFyIHkgPSBjaXJjbGVEYXRhLnk7XG4gICAgdmFyIHdpZHRoO1xuICAgIHZhciBoZWlnaHQ7XG5cbiAgICAvLyBUT0RPIC0gYml0IGhhY2t5Pz9cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSBjaXJjbGVEYXRhLnJhZGl1cztcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS53aWR0aDtcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHRvdGFsU2VncyA9IE1hdGguZmxvb3IoMzAgKiBNYXRoLnNxcnQoY2lyY2xlRGF0YS5yYWRpdXMpKSB8fCBNYXRoLmZsb29yKDE1ICogTWF0aC5zcXJ0KGNpcmNsZURhdGEud2lkdGggKyBjaXJjbGVEYXRhLmhlaWdodCkpO1xuICAgIHZhciBzZWcgPSAoTWF0aC5QSSAqIDIpIC8gdG90YWxTZWdzIDtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTZWdzICsgMSA7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaCh4LHksIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgeSArIE1hdGguY29zKHNlZyAqIGkpICogaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MrKywgdmVjUG9zKyspO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcy0xKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cy5wdXNoKHggKyBNYXRoLnNpbihzZWcgKiBpKSAqIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBidWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENpcmNsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21wbGV4IHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENvbXBsZXhQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vVE9ETyAtIG5vIG5lZWQgdG8gY29weSB0aGlzIGFzIGl0IGdldHMgdHVybmVkIGludG8gYSBGTG9hdDMyQXJyYXkgYW55d2F5cy4uXG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHMuc2xpY2UoKTtcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB3ZWJHTERhdGEucG9pbnRzID0gcG9pbnRzO1xuICAgIHdlYkdMRGF0YS5hbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgd2ViR0xEYXRhLmNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcblxuICAgIC8vIGNhbGNsYXRlIHRoZSBib3VuZHMuLlxuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgdmFyIHgseTtcblxuICAgIC8vIGdldCBzaXplLi5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrPTIpXG4gICAge1xuICAgICAgICB4ID0gcG9pbnRzW2ldO1xuICAgICAgICB5ID0gcG9pbnRzW2krMV07XG5cbiAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBxdWFkIHRvIHRoZSBlbmQgY29zIHRoZXJlIGlzIG5vIHBvaW50IG1ha2luZyBhbm90aGVyIGJ1ZmZlciFcbiAgICBwb2ludHMucHVzaChtaW5YLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWF4WSxcbiAgICAgICAgICAgICAgICBtaW5YLCBtYXhZKTtcblxuICAgIC8vIHB1c2ggYSBxdWFkIG9udG8gdGhlIGVuZC4uXG5cbiAgICAvL1RPRE8gLSB0aGlzIGFpbnQgbmVlZGVkIVxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goIGkgKTtcbiAgICB9XG5cbn07XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29tcGxleFBvbHk7IiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZExpbmUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gVE9ETyBPUFRJTUlTRSFcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGxpbmUgd2lkdGggaXMgYW4gb2RkIG51bWJlciBhZGQgMC41IHRvIGFsaWduIHRvIGEgd2hvbGUgcGl4ZWxcbiAgICAvLyBjb21tZW50aW5nIHRoaXMgb3V0IGZpeGVzICM3MTEgYW5kICMxNjIwXG4gICAgLy8gaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGglMilcbiAgICAvLyB7XG4gICAgLy8gICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAgIHBvaW50c1tpXSArPSAwLjU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGZpcnN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgdmFyIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IHBvaW50IGlzIHRoZSBsYXN0IHBvaW50IC0gZ29ubmEgaGF2ZSBpc3N1ZXMgOilcbiAgICBpZiAoZmlyc3RQb2ludC54ID09PSBsYXN0UG9pbnQueCAmJiBmaXJzdFBvaW50LnkgPT09IGxhc3RQb2ludC55KVxuICAgIHtcbiAgICAgICAgLy8gbmVlZCB0byBjbG9uZSBhcyB3ZSBhcmUgZ29pbmcgdG8gc2xpZ2h0bHkgbW9kaWZ5IHRoZSBzaGFwZS4uXG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5zbGljZSgpO1xuXG4gICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHZhciBtaWRQb2ludFggPSBsYXN0UG9pbnQueCArIChmaXJzdFBvaW50LnggLSBsYXN0UG9pbnQueCkgKjAuNTtcbiAgICAgICAgdmFyIG1pZFBvaW50WSA9IGxhc3RQb2ludC55ICsgKGZpcnN0UG9pbnQueSAtIGxhc3RQb2ludC55KSAqMC41O1xuXG4gICAgICAgIHBvaW50cy51bnNoaWZ0KG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICAgICAgcG9pbnRzLnB1c2gobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgdmFyIGluZGV4Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIHZhciBpbmRleFN0YXJ0ID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAvLyBEUkFXIHRoZSBMaW5lXG4gICAgdmFyIHdpZHRoID0gZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEubGluZUNvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEubGluZUFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHB4LCBweSwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeTtcbiAgICB2YXIgcGVycHgsIHBlcnB5LCBwZXJwMngsIHBlcnAyeSwgcGVycDN4LCBwZXJwM3k7XG4gICAgdmFyIGExLCBiMSwgYzEsIGEyLCBiMiwgYzI7XG4gICAgdmFyIGRlbm9tLCBwZGlzdCwgZGlzdDtcblxuICAgIHAxeCA9IHBvaW50c1swXTtcbiAgICBwMXkgPSBwb2ludHNbMV07XG5cbiAgICBwMnggPSBwb2ludHNbMl07XG4gICAgcDJ5ID0gcG9pbnRzWzNdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSAgcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcblxuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIC8vIHN0YXJ0XG4gICAgdmVydHMucHVzaChwMXggLSBwZXJweCAsIHAxeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDF4ICsgcGVycHggLCBwMXkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoLTE7IGkrKylcbiAgICB7XG4gICAgICAgIHAxeCA9IHBvaW50c1soaS0xKSoyXTtcbiAgICAgICAgcDF5ID0gcG9pbnRzWyhpLTEpKjIgKyAxXTtcblxuICAgICAgICBwMnggPSBwb2ludHNbKGkpKjJdO1xuICAgICAgICBwMnkgPSBwb2ludHNbKGkpKjIgKyAxXTtcblxuICAgICAgICBwM3ggPSBwb2ludHNbKGkrMSkqMl07XG4gICAgICAgIHAzeSA9IHBvaW50c1soaSsxKSoyICsgMV07XG5cbiAgICAgICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgICAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgICAgICBwZXJwMnggPSAtKHAyeSAtIHAzeSk7XG4gICAgICAgIHBlcnAyeSA9IHAyeCAtIHAzeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAyeCpwZXJwMnggKyBwZXJwMnkqcGVycDJ5KTtcbiAgICAgICAgcGVycDJ4IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeSAvPSBkaXN0O1xuICAgICAgICBwZXJwMnggKj0gd2lkdGg7XG4gICAgICAgIHBlcnAyeSAqPSB3aWR0aDtcblxuICAgICAgICBhMSA9ICgtcGVycHkgKyBwMXkpIC0gKC1wZXJweSArIHAyeSk7XG4gICAgICAgIGIxID0gKC1wZXJweCArIHAyeCkgLSAoLXBlcnB4ICsgcDF4KTtcbiAgICAgICAgYzEgPSAoLXBlcnB4ICsgcDF4KSAqICgtcGVycHkgKyBwMnkpIC0gKC1wZXJweCArIHAyeCkgKiAoLXBlcnB5ICsgcDF5KTtcbiAgICAgICAgYTIgPSAoLXBlcnAyeSArIHAzeSkgLSAoLXBlcnAyeSArIHAyeSk7XG4gICAgICAgIGIyID0gKC1wZXJwMnggKyBwMngpIC0gKC1wZXJwMnggKyBwM3gpO1xuICAgICAgICBjMiA9ICgtcGVycDJ4ICsgcDN4KSAqICgtcGVycDJ5ICsgcDJ5KSAtICgtcGVycDJ4ICsgcDJ4KSAqICgtcGVycDJ5ICsgcDN5KTtcblxuICAgICAgICBkZW5vbSA9IGExKmIyIC0gYTIqYjE7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8IDAuMSApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgZGVub20rPTEwLjE7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4ID0gKGIxKmMyIC0gYjIqYzEpL2Rlbm9tO1xuICAgICAgICBweSA9IChhMipjMSAtIGExKmMyKS9kZW5vbTtcblxuXG4gICAgICAgIHBkaXN0ID0gKHB4IC1wMngpICogKHB4IC1wMngpICsgKHB5IC1wMnkpICogKHB5IC1wMnkpO1xuXG5cbiAgICAgICAgaWYgKHBkaXN0ID4gMTQwICogMTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICBwZXJwM3ggPSBwZXJweCAtIHBlcnAyeDtcbiAgICAgICAgICAgIHBlcnAzeSA9IHBlcnB5IC0gcGVycDJ5O1xuXG4gICAgICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAzeCpwZXJwM3ggKyBwZXJwM3kqcGVycDN5KTtcbiAgICAgICAgICAgIHBlcnAzeCAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN5IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3ggKj0gd2lkdGg7XG4gICAgICAgICAgICBwZXJwM3kgKj0gd2lkdGg7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJwM3gsIHAyeSArcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGV4Q291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmVydHMucHVzaChweCAsIHB5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIChweC1wMngpLCBwMnkgLSAocHkgLSBwMnkpKTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcDF4ID0gcG9pbnRzWyhsZW5ndGgtMikqMl07XG4gICAgcDF5ID0gcG9pbnRzWyhsZW5ndGgtMikqMiArIDFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWyhsZW5ndGgtMSkqMl07XG4gICAgcDJ5ID0gcG9pbnRzWyhsZW5ndGgtMSkqMiArIDFdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KyspO1xuICAgIH1cblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0LTEpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZExpbmU7IiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5XZWJHTEdyYXBoaWNzRGF0YX0gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChwb2ludHMsIG51bGwsIDIpO1xuXG4gICAgaWYgKCF0cmlhbmdsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoIC8gNjtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gK3ZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZXJ0UG9zKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2ZXJ0cy5wdXNoKHBvaW50c1tpICogMl0sIHBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFBvbHk7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gLS0tIC8vXG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgLy9cbiAgICB2YXIgcmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSByZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSByZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICAvLyBzdGFydFxuICAgICAgICB2ZXJ0cy5wdXNoKHgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCAsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIC8vIGluc2VydCAyIGRlYWQgdHJpYW5nbGVzLi5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRQb3MsIHZlcnRQb3MsIHZlcnRQb3MrMSwgdmVydFBvcysyLCB2ZXJ0UG9zKzMsIHZlcnRQb3MrMyk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFt4LCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHldO1xuXG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUmVjdGFuZ2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcbiAgICBcbi8qKlxuICogQnVpbGRzIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbmJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcnJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcnJlY3REYXRhLng7XG4gICAgdmFyIHkgPSBycmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSBycmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJyZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICB2YXIgcmFkaXVzID0gcnJlY3REYXRhLnJhZGl1cztcblxuICAgIHZhciByZWNQb2ludHMgPSBbXTtcbiAgICByZWNQb2ludHMucHVzaCh4LCB5ICsgcmFkaXVzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHgsIHkgKyBoZWlnaHQsIHggKyByYWRpdXMsIHkgKyBoZWlnaHQsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoLCB5ICsgcmFkaXVzLCB4ICsgd2lkdGgsIHksIHggKyB3aWR0aCAtIHJhZGl1cywgeSwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyByYWRpdXMsIHksIHgsIHksIHgsIHkgKyByYWRpdXMgKyAwLjAwMDAwMDAwMDEsIHJlY1BvaW50cyk7XG5cbiAgICAvLyB0aGlzIHRpbnkgbnVtYmVyIGRlYWxzIHdpdGggdGhlIGlzc3VlIHRoYXQgb2NjdXJzIHdoZW4gcG9pbnRzIG92ZXJsYXAgYW5kIGVhcmN1dCBmYWlscyB0byB0cmlhbmd1bGF0ZSB0aGUgaXRlbS5cbiAgICAvLyBUT0RPIC0gZml4IHRoaXMgcHJvcGVybHksIHRoaXMgaXMgbm90IHZlcnkgZWxlZ2FudC4uIGJ1dCBpdCB3b3JrcyBmb3Igbm93LlxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocmVjUG9pbnRzLCBudWxsLCAyKTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlY1BvaW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaChyZWNQb2ludHNbaV0sIHJlY1BvaW50c1srK2ldLCByLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gcmVjUG9pbnRzO1xuXG4gICAgICAgIHRoaXMuYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUuIChoZWxwZXIgZnVuY3Rpb24uLilcbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZyb21YIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gZnJvbVkge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEBwYXJhbSBbb3V0XSB7bnVtYmVyW119IFRoZSBvdXRwdXQgYXJyYXkgdG8gYWRkIHBvaW50cyBpbnRvLiBJZiBub3QgcGFzc2VkLCBhIG5ldyBhcnJheSBpcyBjcmVhdGVkLlxuICogQHJldHVybiB7bnVtYmVyW119IGFuIGFycmF5IG9mIHBvaW50c1xuICovXG5xdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IGZ1bmN0aW9uIChmcm9tWCwgZnJvbVksIGNwWCwgY3BZLCB0b1gsIHRvWSwgb3V0KVxue1xuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIHhiLFxuICAgICAgICB5YixcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSBvdXQgfHwgW107XG5cbiAgICBmdW5jdGlvbiBnZXRQdChuMSAsIG4yLCBwZXJjKSB7XG4gICAgICAgIHZhciBkaWZmID0gbjIgLSBuMTtcblxuICAgICAgICByZXR1cm4gbjEgKyAoIGRpZmYgKiBwZXJjICk7XG4gICAgfVxuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKyApIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIC8vIFRoZSBHcmVlbiBMaW5lXG4gICAgICAgIHhhID0gZ2V0UHQoIGZyb21YICwgY3BYICwgaiApO1xuICAgICAgICB5YSA9IGdldFB0KCBmcm9tWSAsIGNwWSAsIGogKTtcbiAgICAgICAgeGIgPSBnZXRQdCggY3BYICwgdG9YICwgaiApO1xuICAgICAgICB5YiA9IGdldFB0KCBjcFkgLCB0b1kgLCBqICk7XG5cbiAgICAgICAgLy8gVGhlIEJsYWNrIERvdFxuICAgICAgICB4ID0gZ2V0UHQoIHhhICwgeGIgLCBqICk7XG4gICAgICAgIHkgPSBnZXRQdCggeWEgLCB5YiAsIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUm91bmRlZFJlY3RhbmdsZTsiLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBjb3JlIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSVxuICovXG4vLyBleHBvcnQgY29yZSBhbmQgY29uc3QuIFdlIGFzc2lnbiBjb3JlIHRvIGNvbnN0IHNvIHRoYXQgdGhlIG5vbi1yZWZlcmVuY2UgdHlwZXMgaW4gY29uc3QgcmVtYWluIGluLXRhY3RcbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduKHJlcXVpcmUoJy4vY29uc3QnKSwgcmVxdWlyZSgnLi9tYXRoJyksIHtcbiAgICAvLyB1dGlsc1xuICAgIHV0aWxzOiByZXF1aXJlKCcuL3V0aWxzJyksXG4gICAgdGlja2VyOiByZXF1aXJlKCcuL3RpY2tlcicpLFxuXG4gICAgLy8gZGlzcGxheVxuICAgIERpc3BsYXlPYmplY3Q6ICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9EaXNwbGF5T2JqZWN0JyksXG4gICAgQ29udGFpbmVyOiAgICAgICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuXG4gICAgLy8gc3ByaXRlc1xuICAgIFNwcml0ZTogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBQYXJ0aWNsZUNvbnRhaW5lcjogICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lcicpLFxuICAgIFNwcml0ZVJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHRcbiAgICBUZXh0OiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHQvVGV4dCcpLFxuXG4gICAgLy8gcHJpbWl0aXZlc1xuICAgIEdyYXBoaWNzOiAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGE6ICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRGF0YScpLFxuICAgIEdyYXBoaWNzUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dHVyZXNcbiAgICBUZXh0dXJlOiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBCYXNlVGV4dHVyZTogICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL0Jhc2VUZXh0dXJlJyksXG4gICAgUmVuZGVyVGV4dHVyZTogICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgQmFzZVJlbmRlclRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmU6ICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnM6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVGV4dHVyZVV2cycpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gY2FudmFzXG4gICAgQ2FudmFzUmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyJyksXG4gICAgQ2FudmFzR3JhcGhpY3M6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzJyksXG4gICAgQ2FudmFzQnVmZmVyOiAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gd2ViZ2xcbiAgICBXZWJHTFJlbmRlcmVyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgU2hhZGVyOiAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXInKSxcbiAgICBPYmplY3RSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFJlbmRlclRhcmdldDogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuXG4gICAgLy8gZmlsdGVycyAtIHdlYmdsXG4gICAgQWJzdHJhY3RGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlcicpLFxuICAgIEZYQUFGaWx0ZXI6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFNwcml0ZU1hc2tGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlcicpLFxuXG4gICAgZ2xDb3JlOiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3Qgd2hpY2ggcmVuZGVyZXIgeW91IHNob3VsZCBiZSB1c2luZy5cbiAgICAgKiBXZWJHTCBpcyB0aGUgcHJlZmVycmVkIHJlbmRlcmVyIGFzIGl0IGlzIGEgbG90IGZhc3Rlci4gSWYgd2ViR0wgaXMgbm90IHN1cHBvcnRlZCBieVxuICAgICAqIHRoZSBicm93c2VyIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhIGNhbnZhcyByZW5kZXJlclxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAcGFyYW0gd2lkdGg9ODAwIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gaGVpZ2h0PTYwMCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSByZW5kZXJlcnMgdmlld1xuICAgICAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gICAgICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZV0ge2Jvb2xlYW59IGVuYWJsZXMgZHJhd2luZyBidWZmZXIgcHJlc2VydmF0aW9uLCBlbmFibGUgdGhpcyBpZiB5b3VcbiAgICAgKiAgICAgIG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIsIHJldGluYSB3b3VsZCBiZSAyXG4gICAgICogQHBhcmFtIFtub1dlYkdMPWZhbHNlXSB7Ym9vbGVhbn0gcHJldmVudHMgc2VsZWN0aW9uIG9mIFdlYkdMIHJlbmRlcmVyLCBldmVuIGlmIHN1Y2ggaXMgcHJlc2VudFxuICAgICAqXG4gICAgICogQHJldHVybiB7V2ViR0xSZW5kZXJlcnxDYW52YXNSZW5kZXJlcn0gUmV0dXJucyBXZWJHTCByZW5kZXJlciBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBDYW52YXNSZW5kZXJlclxuICAgICAqL1xuICAgIGF1dG9EZXRlY3RSZW5kZXJlcjogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMsIG5vV2ViR0wpXG4gICAge1xuICAgICAgICB3aWR0aCA9IHdpZHRoIHx8IDgwMDtcbiAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0IHx8IDYwMDtcblxuICAgICAgICBpZiAoIW5vV2ViR0wgJiYgY29yZS51dGlscy5pc1dlYkdMU3VwcG9ydGVkKCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgY29yZS5XZWJHTFJlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBjb3JlLkNhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgIH1cbn0pO1xuIiwiLy8gQHRvZG8gLSBpZ25vcmUgdGhlIHRvbyBtYW55IHBhcmFtZXRlcnMgd2FybmluZyBmb3Igbm93XG4vLyBzaG91bGQgZWl0aGVyIGZpeCBpdCBvciBjaGFuZ2UgdGhlIGpzaGludCBjb25maWdcbi8vIGpzaGludCAtVzA3MlxuXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuL1BvaW50Jyk7XG5cbi8qKlxuICogVGhlIHBpeGkgTWF0cml4IGNsYXNzIGFzIGFuIG9iamVjdCwgd2hpY2ggbWFrZXMgaXQgYSBsb3QgZmFzdGVyLFxuICogaGVyZSBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIGl0IDpcbiAqIHwgYSB8IGIgfCB0eHxcbiAqIHwgYyB8IGQgfCB0eXxcbiAqIHwgMCB8IDAgfCAxIHxcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIE1hdHJpeCgpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmIgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmMgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnR4ID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eSA9IDA7XG59XG5cbk1hdHJpeC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNYXRyaXg7XG5tb2R1bGUuZXhwb3J0cyA9IE1hdHJpeDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgTWF0cml4IG9iamVjdCBiYXNlZCBvbiB0aGUgZ2l2ZW4gYXJyYXkuIFRoZSBFbGVtZW50IHRvIE1hdHJpeCBtYXBwaW5nIG9yZGVyIGlzIGFzIGZvbGxvd3M6XG4gKlxuICogYSA9IGFycmF5WzBdXG4gKiBiID0gYXJyYXlbMV1cbiAqIGMgPSBhcnJheVszXVxuICogZCA9IGFycmF5WzRdXG4gKiB0eCA9IGFycmF5WzJdXG4gKiB0eSA9IGFycmF5WzVdXG4gKlxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX0gVGhlIGFycmF5IHRoYXQgdGhlIG1hdHJpeCB3aWxsIGJlIHBvcHVsYXRlZCBmcm9tLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJheSlcbntcbiAgICB0aGlzLmEgPSBhcnJheVswXTtcbiAgICB0aGlzLmIgPSBhcnJheVsxXTtcbiAgICB0aGlzLmMgPSBhcnJheVszXTtcbiAgICB0aGlzLmQgPSBhcnJheVs0XTtcbiAgICB0aGlzLnR4ID0gYXJyYXlbMl07XG4gICAgdGhpcy50eSA9IGFycmF5WzVdO1xufTtcblxuXG4vKipcbiAqIHNldHMgdGhlIG1hdHJpeCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gKiBAcGFyYW0ge251bWJlcn0gY1xuICogQHBhcmFtIHtudW1iZXJ9IGRcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eFxuICogQHBhcmFtIHtudW1iZXJ9IHR5XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHR4LCB0eSlcbntcbiAgICB0aGlzLmEgPSBhO1xuICAgIHRoaXMuYiA9IGI7XG4gICAgdGhpcy5jID0gYztcbiAgICB0aGlzLmQgPSBkO1xuICAgIHRoaXMudHggPSB0eDtcbiAgICB0aGlzLnR5ID0gdHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGZyb20gdGhlIGN1cnJlbnQgTWF0cml4IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3NlIHtib29sZWFufSBXaGV0aGVyIHdlIG5lZWQgdG8gdHJhbnNwb3NlIHRoZSBtYXRyaXggb3Igbm90XG4gKiBAcGFyYW0gW291dF0ge0FycmF5fSBJZiBwcm92aWRlZCB0aGUgYXJyYXkgd2lsbCBiZSBhc3NpZ25lZCB0byBvdXRcbiAqIEByZXR1cm4ge251bWJlcltdfSB0aGUgbmV3bHkgY3JlYXRlZCBhcnJheSB3aGljaCBjb250YWlucyB0aGUgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICh0cmFuc3Bvc2UsIG91dClcbntcbiAgICBpZiAoIXRoaXMuYXJyYXkpXG4gICAge1xuICAgICAgICB0aGlzLmFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg5KTtcbiAgICB9XG5cbiAgICB2YXIgYXJyYXkgPSBvdXQgfHwgdGhpcy5hcnJheTtcblxuICAgIGlmICh0cmFuc3Bvc2UpXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzJdID0gMDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IDA7XG4gICAgICAgIGFycmF5WzZdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbN10gPSB0aGlzLnR5O1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGFycmF5WzBdID0gdGhpcy5hO1xuICAgICAgICBhcnJheVsxXSA9IHRoaXMuYztcbiAgICAgICAgYXJyYXlbMl0gPSB0aGlzLnR4O1xuICAgICAgICBhcnJheVszXSA9IHRoaXMuYjtcbiAgICAgICAgYXJyYXlbNF0gPSB0aGlzLmQ7XG4gICAgICAgIGFycmF5WzVdID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbNl0gPSAwO1xuICAgICAgICBhcnJheVs3XSA9IDA7XG4gICAgICAgIGFycmF5WzhdID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59O1xuXG4vKipcbiAqIEdldCBhIG5ldyBwb3NpdGlvbiB3aXRoIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXG4gKiBDYW4gYmUgdXNlZCB0byBnbyBmcm9tIGEgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlIHRvIHRoZSB3b3JsZCBjb29yZGluYXRlIHNwYWNlLiAoZS5nLiByZW5kZXJpbmcpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCB0cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIHggPSBwb3MueDtcbiAgICB2YXIgeSA9IHBvcy55O1xuXG4gICAgbmV3UG9zLnggPSB0aGlzLmEgKiB4ICsgdGhpcy5jICogeSArIHRoaXMudHg7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmIgKiB4ICsgdGhpcy5kICogeSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gbmV3UG9zO1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgaW52ZXJzZSBvZiB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZSB0byBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gaW5wdXQpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCBpbnZlcnNlLXRyYW5zZm9ybWVkIHRocm91Z2ggdGhpcyBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBseUludmVyc2UgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIGlkID0gMSAvICh0aGlzLmEgKiB0aGlzLmQgKyB0aGlzLmMgKiAtdGhpcy5iKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5kICogaWQgKiB4ICsgLXRoaXMuYyAqIGlkICogeSArICh0aGlzLnR5ICogdGhpcy5jIC0gdGhpcy50eCAqIHRoaXMuZCkgKiBpZDtcbiAgICBuZXdQb3MueSA9IHRoaXMuYSAqIGlkICogeSArIC10aGlzLmIgKiBpZCAqIHggKyAoLXRoaXMudHkgKiB0aGlzLmEgKyB0aGlzLnR4ICogdGhpcy5iKSAqIGlkO1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogVHJhbnNsYXRlcyB0aGUgbWF0cml4IG9uIHRoZSB4IGFuZCB5LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudHJhbnNsYXRlID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy50eCArPSB4O1xuICAgIHRoaXMudHkgKz0geTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgc2NhbGUgdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geCBUaGUgYW1vdW50IHRvIHNjYWxlIGhvcml6b250YWxseVxuICogQHBhcmFtIHtudW1iZXJ9IHkgVGhlIGFtb3VudCB0byBzY2FsZSB2ZXJ0aWNhbGx5XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zY2FsZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuYSAqPSB4O1xuICAgIHRoaXMuZCAqPSB5O1xuICAgIHRoaXMuYyAqPSB4O1xuICAgIHRoaXMuYiAqPSB5O1xuICAgIHRoaXMudHggKj0geDtcbiAgICB0aGlzLnR5ICo9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBBcHBsaWVzIGEgcm90YXRpb24gdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgaW4gcmFkaWFucy5cbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZSA9IGZ1bmN0aW9uIChhbmdsZSlcbntcbiAgICB2YXIgY29zID0gTWF0aC5jb3MoIGFuZ2xlICk7XG4gICAgdmFyIHNpbiA9IE1hdGguc2luKCBhbmdsZSApO1xuXG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIHRoaXMuYSA9IGExICogY29zLXRoaXMuYiAqIHNpbjtcbiAgICB0aGlzLmIgPSBhMSAqIHNpbit0aGlzLmIgKiBjb3M7XG4gICAgdGhpcy5jID0gYzEgKiBjb3MtdGhpcy5kICogc2luO1xuICAgIHRoaXMuZCA9IGMxICogc2luK3RoaXMuZCAqIGNvcztcbiAgICB0aGlzLnR4ID0gdHgxICogY29zIC0gdGhpcy50eSAqIHNpbjtcbiAgICB0aGlzLnR5ID0gdHgxICogc2luICsgdGhpcy50eSAqIGNvcztcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcblxuICAgIHRoaXMuYSAgPSBtYXRyaXguYSAqIGExICsgbWF0cml4LmIgKiBjMTtcbiAgICB0aGlzLmIgID0gbWF0cml4LmEgKiBiMSArIG1hdHJpeC5iICogZDE7XG4gICAgdGhpcy5jICA9IG1hdHJpeC5jICogYTEgKyBtYXRyaXguZCAqIGMxO1xuICAgIHRoaXMuZCAgPSBtYXRyaXguYyAqIGIxICsgbWF0cml4LmQgKiBkMTtcblxuICAgIHRoaXMudHggPSBtYXRyaXgudHggKiBhMSArIG1hdHJpeC50eSAqIGMxICsgdGhpcy50eDtcbiAgICB0aGlzLnR5ID0gbWF0cml4LnR4ICogYjEgKyBtYXRyaXgudHkgKiBkMSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbWF0cml4IGJhc2VkIG9uIGFsbCB0aGUgYXZhaWxhYmxlIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFhcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFlcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVlcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3RhdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdYXG4gKiBAcGFyYW0ge251bWJlcn0gc2tld1lcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoeCwgeSwgcGl2b3RYLCBwaXZvdFksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZKVxue1xuICAgIHZhciBhLCBiLCBjLCBkLCBzciwgY3IsIGN5LCBzeSwgbnN4LCBjeDtcblxuICAgIHNyICA9IE1hdGguc2luKHJvdGF0aW9uKTtcbiAgICBjciAgPSBNYXRoLmNvcyhyb3RhdGlvbik7XG4gICAgY3kgID0gTWF0aC5jb3Moc2tld1kpO1xuICAgIHN5ICA9IE1hdGguc2luKHNrZXdZKTtcbiAgICBuc3ggPSAtTWF0aC5zaW4oc2tld1gpO1xuICAgIGN4ICA9ICBNYXRoLmNvcyhza2V3WCk7XG5cbiAgICBhICA9ICBjciAqIHNjYWxlWDtcbiAgICBiICA9ICBzciAqIHNjYWxlWDtcbiAgICBjICA9IC1zciAqIHNjYWxlWTtcbiAgICBkICA9ICBjciAqIHNjYWxlWTtcblxuICAgIHRoaXMuYSAgPSBjeSAqIGEgKyBzeSAqIGM7XG4gICAgdGhpcy5iICA9IGN5ICogYiArIHN5ICogZDtcbiAgICB0aGlzLmMgID0gbnN4ICogYSArIGN4ICogYztcbiAgICB0aGlzLmQgID0gbnN4ICogYiArIGN4ICogZDtcblxuICAgIHRoaXMudHggPSB4ICsgKCBwaXZvdFggKiBhICsgcGl2b3RZICogYyApO1xuICAgIHRoaXMudHkgPSB5ICsgKCBwaXZvdFggKiBiICsgcGl2b3RZICogZCApO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFByZXBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24obWF0cml4KVxue1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuXG4gICAgaWYgKG1hdHJpeC5hICE9PSAxIHx8IG1hdHJpeC5iICE9PSAwIHx8IG1hdHJpeC5jICE9PSAwIHx8IG1hdHJpeC5kICE9PSAxKVxuICAgIHtcbiAgICAgICAgdmFyIGExID0gdGhpcy5hO1xuICAgICAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgICAgIHRoaXMuYSAgPSBhMSptYXRyaXguYSt0aGlzLmIqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuYiAgPSBhMSptYXRyaXguYit0aGlzLmIqbWF0cml4LmQ7XG4gICAgICAgIHRoaXMuYyAgPSBjMSptYXRyaXguYSt0aGlzLmQqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuZCAgPSBjMSptYXRyaXguYit0aGlzLmQqbWF0cml4LmQ7XG4gICAgfVxuXG4gICAgdGhpcy50eCA9IHR4MSptYXRyaXguYSt0aGlzLnR5Km1hdHJpeC5jK21hdHJpeC50eDtcbiAgICB0aGlzLnR5ID0gdHgxKm1hdHJpeC5iK3RoaXMudHkqbWF0cml4LmQrbWF0cml4LnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEludmVydHMgdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5pbnZlcnQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBiMSA9IHRoaXMuYjtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIGQxID0gdGhpcy5kO1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuICAgIHZhciBuID0gYTEqZDEtYjEqYzE7XG5cbiAgICB0aGlzLmEgPSBkMS9uO1xuICAgIHRoaXMuYiA9IC1iMS9uO1xuICAgIHRoaXMuYyA9IC1jMS9uO1xuICAgIHRoaXMuZCA9IGExL247XG4gICAgdGhpcy50eCA9IChjMSp0aGlzLnR5LWQxKnR4MSkvbjtcbiAgICB0aGlzLnR5ID0gLShhMSp0aGlzLnR5LWIxKnR4MSkvbjtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIFJlc2V0cyB0aGlzIE1hdGl4IHRvIGFuIGlkZW50aXR5IChkZWZhdWx0KSBtYXRyaXguXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaWRlbnRpdHkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYSA9IDE7XG4gICAgdGhpcy5iID0gMDtcbiAgICB0aGlzLmMgPSAwO1xuICAgIHRoaXMuZCA9IDE7XG4gICAgdGhpcy50eCA9IDA7XG4gICAgdGhpcy50eSA9IDA7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBNYXRyaXggb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBBIGNvcHkgb2YgdGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1hdHJpeCA9IG5ldyBNYXRyaXgoKTtcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSB2YWx1ZXMgb2YgdGhlIGdpdmVuIG1hdHJpeCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgb25lcyBpbiB0aGlzIG1hdHJpeFxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGUgbWF0cml4IGdpdmVuIGluIHBhcmFtZXRlciB3aXRoIGl0cyB2YWx1ZXMgdXBkYXRlZC5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBBIGRlZmF1bHQgKGlkZW50aXR5KSBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LklERU5USVRZID0gbmV3IE1hdHJpeCgpO1xuXG4vKipcbiAqIEEgdGVtcCBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LlRFTVBfTUFUUklYID0gbmV3IE1hdHJpeCgpO1xuIiwiLyoqXG4gKiBUaGUgUG9pbnQgb2JqZWN0IHJlcHJlc2VudHMgYSBsb2NhdGlvbiBpbiBhIHR3by1kaW1lbnNpb25hbCBjb29yZGluYXRlIHN5c3RlbSwgd2hlcmUgeCByZXByZXNlbnRzXG4gKiB0aGUgaG9yaXpvbnRhbCBheGlzIGFuZCB5IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIGF4aXMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXNcbiAqL1xuZnVuY3Rpb24gUG9pbnQoeCwgeSlcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xufVxuXG5Qb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2ludDtcbm1vZHVsZS5leHBvcnRzID0gUG9pbnQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9pbnRcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBhIGNvcHkgb2YgdGhlIHBvaW50XG4gKi9cblBvaW50LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLngsIHRoaXMueSk7XG59O1xuXG4vKipcbiAqIENvcGllcyB4IGFuZCB5IGZyb20gdGhlIGdpdmVuIHBvaW50XG4gKlxuICogQHBhcmFtIHAge1BJWEkuUG9pbnR9XG4gKi9cblBvaW50LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKHApIHtcbiAgICB0aGlzLnNldChwLngsIHAueSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcG9pbnQgaXMgZXF1YWwgdG8gdGhpcyBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cblBvaW50LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiAocC54ID09PSB0aGlzLngpICYmIChwLnkgPT09IHRoaXMueSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIHBvaW50IHRvIGEgbmV3IHggYW5kIHkgcG9zaXRpb24uXG4gKiBJZiB5IGlzIG9taXR0ZWQsIGJvdGggeCBhbmQgeSB3aWxsIGJlIHNldCB0byB4LlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cblBvaW50LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLnggPSB4IHx8IDA7XG4gICAgdGhpcy55ID0geSB8fCAoICh5ICE9PSAwKSA/IHRoaXMueCA6IDAgKSA7XG59O1xuIiwiLyoqXG4gKiBNYXRoIGNsYXNzZXMgYW5kIHV0aWxpdGllcyBtaXhlZCBpbnRvIFBJWEkgbmFtZXNwYWNlLlxuICpcbiAqIEBsZW5kcyBQSVhJXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8vIFRoZXNlIHdpbGwgYmUgbWl4ZWQgdG8gYmUgbWFkZSBwdWJsaWNseSBhdmFpbGFibGUsXG4gICAgLy8gd2hpbGUgdGhpcyBtb2R1bGUgaXMgdXNlZCBpbnRlcm5hbGx5IGluIGNvcmVcbiAgICAvLyB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYW5kIGN1dCBkb3duIG9uXG4gICAgLy8gaW50ZXJuYWwgbW9kdWxlIHJlcXVpcmVzLlxuXG4gICAgUG9pbnQ6ICAgICAgcmVxdWlyZSgnLi9Qb2ludCcpLFxuICAgIE1hdHJpeDogICAgIHJlcXVpcmUoJy4vTWF0cml4JyksXG5cbiAgICBDaXJjbGU6ICAgICByZXF1aXJlKCcuL3NoYXBlcy9DaXJjbGUnKSxcbiAgICBFbGxpcHNlOiAgICByZXF1aXJlKCcuL3NoYXBlcy9FbGxpcHNlJyksXG4gICAgUG9seWdvbjogICAgcmVxdWlyZSgnLi9zaGFwZXMvUG9seWdvbicpLFxuICAgIFJlY3RhbmdsZTogIHJlcXVpcmUoJy4vc2hhcGVzL1JlY3RhbmdsZScpLFxuICAgIFJvdW5kZWRSZWN0YW5nbGU6IHJlcXVpcmUoJy4vc2hhcGVzL1JvdW5kZWRSZWN0YW5nbGUnKVxufTtcbiIsInZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2lyY2xlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKi9cbmZ1bmN0aW9uIENpcmNsZSh4LCB5LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuQ0lSQztcbn1cblxuQ2lyY2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENpcmNsZTtcbm1vZHVsZS5leHBvcnRzID0gQ2lyY2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIENpcmNsZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuQ2lyY2xlfSBhIGNvcHkgb2YgdGhlIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IENpcmNsZSh0aGlzLngsIHRoaXMueSwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGNpcmNsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgQ2lyY2xlXG4gKi9cbkNpcmNsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy5yYWRpdXMgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgZHggPSAodGhpcy54IC0geCksXG4gICAgICAgIGR5ID0gKHRoaXMueSAtIHkpLFxuICAgICAgICByMiA9IHRoaXMucmFkaXVzICogdGhpcy5yYWRpdXM7XG5cbiAgICBkeCAqPSBkeDtcbiAgICBkeSAqPSBkeTtcblxuICAgIHJldHVybiAoZHggKyBkeSA8PSByMik7XG59O1xuXG4vKipcbiogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIGNpcmNsZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuKi9cbkNpcmNsZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLnJhZGl1cywgdGhpcy55IC0gdGhpcy5yYWRpdXMsIHRoaXMucmFkaXVzICogMiwgdGhpcy5yYWRpdXMgKiAyKTtcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIEVsbGlwc2Ugb2JqZWN0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBoaXQgYXJlYSBmb3IgZGlzcGxheU9iamVjdHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBoYWxmIHdpZHRoIG9mIHRoaXMgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhpcyBlbGxpcHNlXG4gKi9cbmZ1bmN0aW9uIEVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuRUxJUDtcbn1cblxuRWxsaXBzZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFbGxpcHNlO1xubW9kdWxlLmV4cG9ydHMgPSBFbGxpcHNlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIEVsbGlwc2UgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkVsbGlwc2V9IGEgY29weSBvZiB0aGUgZWxsaXBzZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBFbGxpcHNlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgZWxsaXBzZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZHMgYXJlIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy9ub3JtYWxpemUgdGhlIGNvb3JkcyB0byBhbiBlbGxpcHNlIHdpdGggY2VudGVyIDAsMFxuICAgIHZhciBub3JteCA9ICgoeCAtIHRoaXMueCkgLyB0aGlzLndpZHRoKSxcbiAgICAgICAgbm9ybXkgPSAoKHkgLSB0aGlzLnkpIC8gdGhpcy5oZWlnaHQpO1xuXG4gICAgbm9ybXggKj0gbm9ybXg7XG4gICAgbm9ybXkgKj0gbm9ybXk7XG5cbiAgICByZXR1cm4gKG5vcm14ICsgbm9ybXkgPD0gMSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBlbGxpcHNlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLndpZHRoLCB0aGlzLnkgLSB0aGlzLmhlaWdodCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcbiIsInZhciBQb2ludCA9IHJlcXVpcmUoJy4uL1BvaW50JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBwb2ludHMge1BJWEkuUG9pbnRbXXxudW1iZXJbXXwuLi5QSVhJLlBvaW50fC4uLm51bWJlcn0gVGhpcyBjYW4gYmUgYW4gYXJyYXkgb2YgUG9pbnRzIHRoYXQgZm9ybSB0aGUgcG9seWdvbixcbiAqICAgICAgYSBmbGF0IGFycmF5IG9mIG51bWJlcnMgdGhhdCB3aWxsIGJlIGludGVycHJldGVkIGFzIFt4LHksIHgseSwgLi4uXSwgb3IgdGhlIGFyZ3VtZW50cyBwYXNzZWQgY2FuIGJlXG4gKiAgICAgIGFsbCB0aGUgcG9pbnRzIG9mIHRoZSBwb2x5Z29uIGUuZy4gYG5ldyBQSVhJLlBvbHlnb24obmV3IFBJWEkuUG9pbnQoKSwgbmV3IFBJWEkuUG9pbnQoKSwgLi4uKWAsIG9yIHRoZVxuICogICAgICBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZSBmbGF0IHgseSB2YWx1ZXMgZS5nLiBgbmV3IFBvbHlnb24oeCx5LCB4LHksIHgseSwgLi4uKWAgd2hlcmUgYHhgIGFuZCBgeWAgYXJlXG4gKiAgICAgIE51bWJlcnMuXG4gKi9cbmZ1bmN0aW9uIFBvbHlnb24ocG9pbnRzXylcbntcbiAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBhc3NpZ25tZW50IGRlb3B0XG4gICAgLy8gc2VlIHNlY3Rpb24gMy4xOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICB2YXIgcG9pbnRzID0gcG9pbnRzXztcblxuICAgIC8vaWYgcG9pbnRzIGlzbid0IGFuIGFycmF5LCB1c2UgYXJndW1lbnRzIGFzIHRoZSBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBwb2ludHMubGVuZ3RoOyArK2EpIHtcbiAgICAgICAgICAgIHBvaW50c1thXSA9IGFyZ3VtZW50c1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHRoaXMgaXMgYW4gYXJyYXkgb2YgcG9pbnRzLCBjb252ZXJ0IGl0IHRvIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzXG4gICAgaWYgKHBvaW50c1swXSBpbnN0YW5jZW9mIFBvaW50KVxuICAgIHtcbiAgICAgICAgdmFyIHAgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHAucHVzaChwb2ludHNbaV0ueCwgcG9pbnRzW2ldLnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9pbnRzID0gcDtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB0aGUgcG9pbnRzIG9mIHRoaXMgcG9seWdvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlBPTFk7XG59XG5cblBvbHlnb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9seWdvbjtcbm1vZHVsZS5leHBvcnRzID0gUG9seWdvbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBwb2x5Z29uXG4gKlxuICogQHJldHVybiB7UElYSS5Qb2x5Z29ufSBhIGNvcHkgb2YgdGhlIHBvbHlnb25cbiAqL1xuUG9seWdvbi5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9seWdvbih0aGlzLnBvaW50cy5zbGljZSgpKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIGluc2lkZSA9IGZhbHNlO1xuXG4gICAgLy8gdXNlIHNvbWUgcmF5Y2FzdGluZyB0byB0ZXN0IGhpdHNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svcG9pbnQtaW4tcG9seWdvbi9ibG9iL21hc3Rlci9pbmRleC5qc1xuICAgIHZhciBsZW5ndGggPSB0aGlzLnBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBsZW5ndGggLSAxOyBpIDwgbGVuZ3RoOyBqID0gaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHhpID0gdGhpcy5wb2ludHNbaSAqIDJdLCB5aSA9IHRoaXMucG9pbnRzW2kgKiAyICsgMV0sXG4gICAgICAgICAgICB4aiA9IHRoaXMucG9pbnRzW2ogKiAyXSwgeWogPSB0aGlzLnBvaW50c1tqICogMiArIDFdLFxuICAgICAgICAgICAgaW50ZXJzZWN0ID0gKCh5aSA+IHkpICE9PSAoeWogPiB5KSkgJiYgKHggPCAoeGogLSB4aSkgKiAoeSAtIHlpKSAvICh5aiAtIHlpKSArIHhpKTtcblxuICAgICAgICBpZiAoaW50ZXJzZWN0KVxuICAgICAgICB7XG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc2lkZTtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIHRoZSBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgZGVmaW5lZCBieSBpdHMgcG9zaXRpb24sIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCB3aWR0aCBvZiB0aGlzIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByZWN0YW5nbGVcbiAqL1xuZnVuY3Rpb24gUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJFQ1Q7XG59XG5cblJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZWN0YW5nbGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlY3RhbmdsZTtcblxuLyoqXG4gKiBBIGNvbnN0YW50IGVtcHR5IHJlY3RhbmdsZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuUmVjdGFuZ2xlLkVNUFRZID0gbmV3IFJlY3RhbmdsZSgwLCAwLCAwLCAwKTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgUmVjdGFuZ2xlXG4gKi9cblJlY3RhbmdsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHggPj0gdGhpcy54ICYmIHggPCB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPCB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUm91bmRlZCBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgdGhhdCBoYXMgbmljZSByb3VuZGVkIGNvcm5lcnMsIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0IGFuZCBpdHMgcmFkaXVzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBDb250cm9scyB0aGUgcmFkaXVzIG9mIHRoZSByb3VuZGVkIGNvcm5lcnNcbiAqL1xuZnVuY3Rpb24gUm91bmRlZFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMjBcbiAgICAgKi9cbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCAyMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUlJFQztcbn1cblxuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3VuZGVkUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3VuZGVkUmVjdGFuZ2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHJldHVybiB7UElYSS5Sb3VuZGVkUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJvdW5kZWRSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnJhZGl1cyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDw9IHRoaXMueCArIHRoaXMud2lkdGgpXG4gICAge1xuICAgICAgICBpZiAoeSA+PSB0aGlzLnkgJiYgeSA8PSB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBQYXJ0aWNsZUNvbnRhaW5lciBjbGFzcyBpcyBhIHJlYWxseSBmYXN0IHZlcnNpb24gb2YgdGhlIENvbnRhaW5lciBidWlsdCBzb2xlbHkgZm9yIHNwZWVkLFxuICogc28gdXNlIHdoZW4geW91IG5lZWQgYSBsb3Qgb2Ygc3ByaXRlcyBvciBwYXJ0aWNsZXMuIFRoZSB0cmFkZW9mZiBvZiB0aGUgUGFydGljbGVDb250YWluZXIgaXMgdGhhdCBhZHZhbmNlZFxuICogZnVuY3Rpb25hbGl0eSB3aWxsIG5vdCB3b3JrLiBQYXJ0aWNsZUNvbnRhaW5lciBpbXBsZW1lbnRzIG9ubHkgdGhlIGJhc2ljIG9iamVjdCB0cmFuc2Zvcm0gKHBvc2l0aW9uLCBzY2FsZSwgcm90YXRpb24pLlxuICogQW55IG90aGVyIGZ1bmN0aW9uYWxpdHkgbGlrZSB0aW50aW5nLCBtYXNraW5nLCBldGMgd2lsbCBub3Qgd29yayBvbiBzcHJpdGVzIGluIHRoaXMgYmF0Y2guXG4gKlxuICogSXQncyBleHRyZW1lbHkgZWFzeSB0byB1c2UgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgY29udGFpbmVyID0gbmV3IFBhcnRpY2xlQ29udGFpbmVyKCk7XG4gKlxuICogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSlcbiAqIHtcbiAqICAgICB2YXIgc3ByaXRlID0gbmV3IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcIm15SW1hZ2UucG5nXCIpO1xuICogICAgIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogfVxuICogYGBgXG4gKlxuICogQW5kIGhlcmUgeW91IGhhdmUgYSBodW5kcmVkIHNwcml0ZXMgdGhhdCB3aWxsIGJlIHJlbmRlcmVyIGF0IHRoZSBzcGVlZCBvZiBsaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFttYXhTaXplPTE1MDAwXSB7bnVtYmVyfSBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFydGljbGVzIHRoYXQgY2FuIGJlIHJlbmRlcmVyIGJ5IHRoZSBjb250YWluZXIuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXNdIHtvYmplY3R9IFRoZSBwcm9wZXJ0aWVzIG9mIGNoaWxkcmVuIHRoYXQgc2hvdWxkIGJlIHVwbG9hZGVkIHRvIHRoZSBncHUgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuc2NhbGU9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHNjYWxlIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnBvc2l0aW9uPXRydWVdIHtib29sZWFufSBXaGVuIHRydWUsIHBvc2l0aW9uIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnJvdGF0aW9uPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCByb3RhdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy51dnM9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHV2cyBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5hbHBoYT1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgYWxwaGEgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW2JhdGNoU2l6ZT0xNTAwMF0ge251bWJlcn0gTnVtYmVyIG9mIHBhcnRpY2xlcyBwZXIgYmF0Y2guXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQ29udGFpbmVyKG1heFNpemUsIHByb3BlcnRpZXMsIGJhdGNoU2l6ZSlcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIGJhdGNoU2l6ZSA9IGJhdGNoU2l6ZSB8fCAxNTAwMDsgLy9DT05TVC5TUFJJVEVfQkFUQ0hfU0laRTsgLy8gMjAwMCBpcyBhIG5pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSAvIGRlc2t0b3BcbiAgICBtYXhTaXplID0gbWF4U2l6ZSB8fCAxNTAwMDtcblxuICAgIC8vIE1ha2luZyBzdXJlIHRoZSBiYXRjaCBzaXplIGlzIHZhbGlkXG4gICAgLy8gNjU1MzUgaXMgbWF4IHZlcnRleCBpbmRleCBpbiB0aGUgaW5kZXggYnVmZmVyIChzZWUgUGFydGljbGVSZW5kZXJlcilcbiAgICAvLyBzbyBtYXggbnVtYmVyIG9mIHBhcnRpY2xlcyBpcyA2NTUzNiAvIDQgPSAxNjM4NFxuICAgIHZhciBtYXhCYXRjaFNpemUgPSAxNjM4NDtcbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4QmF0Y2hTaXplKSB7XG4gICAgICAgIGJhdGNoU2l6ZSA9IG1heEJhdGNoU2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4U2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhTaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBwcm9wZXJ0aWVzIHRvIGJlIGR5bmFtaWMgKHRydWUpIC8gc3RhdGljIChmYWxzZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW5bXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4U2l6ZSA9IG1heFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYXRjaFNpemUgPSBiYXRjaFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVDaGlsZHJlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGNhbnZhcyByZW5kZXJlcmluZy4gSWYgdHJ1ZSB0aGVuIHRoZSBlbGVtZW50cyB3aWxsIGJlIHBvc2l0aW9uZWQgYXQgdGhlIG5lYXJlc3QgcGl4ZWwuIFRoaXMgcHJvdmlkZXMgYSBuaWNlIHNwZWVkIGJvb3N0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlO1xuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSB0cnVlO1xuXG4gICAgdGhpcy5zZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xufVxuXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQ29udGFpbmVyO1xuXG4vKipcbiAqIFNldHMgdGhlIHByaXZhdGUgcHJvcGVydGllcyBhcnJheSB0byBkeW5hbWljIC8gc3RhdGljIGJhc2VkIG9uIHRoZSBwYXNzZWQgcHJvcGVydGllcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcHJvcGVydGllcyB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyB0byBiZSB1cGxvYWRlZFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuc2V0UHJvcGVydGllcyA9IGZ1bmN0aW9uKHByb3BlcnRpZXMpXG57XG4gICAgaWYgKCBwcm9wZXJ0aWVzICkge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzBdID0gJ3NjYWxlJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnNjYWxlIDogdGhpcy5fcHJvcGVydGllc1swXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1sxXSA9ICdwb3NpdGlvbicgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5wb3NpdGlvbiA6IHRoaXMuX3Byb3BlcnRpZXNbMV07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMl0gPSAncm90YXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucm90YXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzJdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzNdID0gJ3V2cycgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy51dnMgOiB0aGlzLl9wcm9wZXJ0aWVzWzNdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzRdID0gJ2FscGhhJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLmFscGhhIDogdGhpcy5fcHJvcGVydGllc1s0XTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgLy8gVE9ETyBkb24ndCBuZWVkIHRvIVxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIC8vICBQSVhJLkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtLmNhbGwoIHRoaXMgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGFpbmVyIHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgd2ViZ2wgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlciggcmVuZGVyZXIucGx1Z2lucy5wYXJ0aWNsZSApO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUucmVuZGVyKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgZmxhZyB0aGF0IHN0YXRpYyBkYXRhIHNob3VsZCBiZSB1cGRhdGVkIHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUub25DaGlsZHJlbkNoYW5nZSA9IGZ1bmN0aW9uIChzbWFsbGVzdENoaWxkSW5kZXgpXG57XG4gICAgdmFyIGJ1ZmZlckluZGV4ID0gTWF0aC5mbG9vcihzbWFsbGVzdENoaWxkSW5kZXggLyB0aGlzLl9iYXRjaFNpemUpO1xuICAgIGlmIChidWZmZXJJbmRleCA8IHRoaXMuX2J1ZmZlclRvVXBkYXRlKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gYnVmZmVySW5kZXg7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIGNhbnZhcyByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGlzUm90YXRlZCA9IHRydWU7XG5cbiAgICB2YXIgcG9zaXRpb25YID0gMDtcbiAgICB2YXIgcG9zaXRpb25ZID0gMDtcblxuICAgIHZhciBmaW5hbFdpZHRoID0gMDtcbiAgICB2YXIgZmluYWxIZWlnaHQgPSAwO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICBpZiAoIWNoaWxkLnZpc2libGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZyYW1lID0gY2hpbGQudGV4dHVyZS5mcmFtZTtcblxuICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhICogY2hpbGQuYWxwaGE7XG5cbiAgICAgICAgaWYgKGNoaWxkLnJvdGF0aW9uICUgKE1hdGguUEkgKiAyKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgZmFzdGVzdCAgd2F5IHRvIG9wdGltaXNlISAtIGlmIHJvdGF0aW9uIGlzIDAgdGhlbiB3ZSBjYW4gYXZvaWQgYW55IGtpbmQgb2Ygc2V0VHJhbnNmb3JtIGNhbGxcbiAgICAgICAgICAgIGlmIChpc1JvdGF0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoICogY2hpbGQuc2NhbGUueCkgKyBjaGlsZC5wb3NpdGlvbi54ICArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0ICogY2hpbGQuc2NhbGUueSkgKyBjaGlsZC5wb3NpdGlvbi55ICArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLng7XG4gICAgICAgICAgICBmaW5hbEhlaWdodCA9IGZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnk7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzUm90YXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoaWxkLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICAgICAgdmFyIGNoaWxkVHJhbnNmb3JtID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHggfCAwLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eSB8IDBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvblggPSAoKGNoaWxkLmFuY2hvci54KSAqICgtZnJhbWUud2lkdGgpICsgMC41KTtcbiAgICAgICAgICAgIHBvc2l0aW9uWSA9ICgoY2hpbGQuYW5jaG9yLnkpICogKC1mcmFtZS5oZWlnaHQpICsgMC41KTtcblxuICAgICAgICAgICAgZmluYWxXaWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgIGNoaWxkLnRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgZnJhbWUueCxcbiAgICAgICAgICAgIGZyYW1lLnksXG4gICAgICAgICAgICBmcmFtZS53aWR0aCxcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCxcbiAgICAgICAgICAgIHBvc2l0aW9uWCxcbiAgICAgICAgICAgIHBvc2l0aW9uWSxcbiAgICAgICAgICAgIGZpbmFsV2lkdGgsXG4gICAgICAgICAgICBmaW5hbEhlaWdodFxuICAgICAgICApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUNoaWxkcmVuPWZhbHNlXSB7Ym9vbGVhbn0gaWYgc2V0IHRvIHRydWUsIGFsbCB0aGUgY2hpbGRyZW4gd2lsbCBoYXZlIHRoZWlyIGRlc3Ryb3kgbWV0aG9kIGNhbGxlZCBhcyB3ZWxsXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgaWYgKHRoaXMuX2J1ZmZlcnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLl9idWZmZXJzW2ldLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xufTtcbiIsIlxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZUJ1ZmZlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvUGFydGljbGVCdWZmZXIuamF2YVxuICovXG5cbi8qKlxuICogVGhlIHBhcnRpY2xlIGJ1ZmZlciBtYW5hZ2VzIHRoZSBzdGF0aWMgYW5kIGR5bmFtaWMgYnVmZmVycyBmb3IgYSBwYXJ0aWNsZSBjb250YWluZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gUGFydGljbGVCdWZmZXIoZ2wsIHByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBzaXplKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRTaXplID0gMjtcblxuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYSBzaW5nbGUgdmVydGV4IGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGUgYnVmZmVyIGNhbiBob2xkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gc2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBkeW5hbWljLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIHN0YXRpYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcblxuICAgICAgICBpZihkeW5hbWljUHJvcGVydHlGbGFnc1tpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5keW5hbWljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuZHluYW1pY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW5pdEJ1ZmZlcnMoKTtcblxufVxuXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZUJ1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVCdWZmZXI7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmluaXRCdWZmZXJzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpO1xuICAgIHZhciBwcm9wZXJ0eTtcblxuICAgIHZhciBkeW5hbWljT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG5cbiAgICAgICAgcHJvcGVydHkub2Zmc2V0ID0gZHluYW1pY09mZnNldDtcbiAgICAgICAgZHluYW1pY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLmR5bmFtaWNTdHJpZGUgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5keW5hbWljU3RyaWRlICogNCk7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcblxuXG4gICAgLy8gc3RhdGljIC8vXG4gICAgdmFyIHN0YXRpY09mZnNldCA9IDA7XG4gICAgdGhpcy5zdGF0aWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IHN0YXRpY09mZnNldDtcbiAgICAgICAgc3RhdGljT2Zmc2V0ICs9IHByb3BlcnR5LnNpemU7XG4gICAgICAgIHRoaXMuc3RhdGljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5zdGF0aWNTdHJpZGUgKiA0KTtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNEYXRhLCBnbC5EWU5BTUlDX0RSQVcpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBkeW5hbWljIHByb3BlcnRpZXMuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUudXBsb2FkRHluYW1pYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIHByb3BlcnR5LnVwbG9hZEZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIHRoaXMuZHluYW1pY0RhdGEsIHRoaXMuZHluYW1pY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy5keW5hbWljRGF0YSk7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHN0YXRpYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZFN0YXRpYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLnN0YXRpY0RhdGEsIHRoaXMuc3RhdGljU3RyaWRlLCBwcm9wZXJ0eS5vZmZzZXQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuc3RhdGljRGF0YSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIHRvIHRoZSBHUFVcbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpLCBwcm9wZXJ0eTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuc3RhdGljU3RyaWRlICogNCwgcHJvcGVydHkub2Zmc2V0ICogNCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVCdWZmZXIuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLnN0YXRpY0J1ZmZlcik7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgUGFydGljbGVTaGFkZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlU2hhZGVyJyksXG4gICAgUGFydGljbGVCdWZmZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlQnVmZmVyJyksXG4gICAgbWF0aCAgICAgICAgICAgID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFBhcnRpY2xlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICAvLyBhbmQgbWF4IG51bWJlciBvZiBlbGVtZW50IGluIHRoZSBpbmRleCBidWZmZXIgaXMgMTYzODQgKiA2ID0gOTgzMDRcbiAgICAvLyBDcmVhdGluZyBhIGZ1bGwgaW5kZXggYnVmZmVyLCBvdmVyaGVhZCBpcyA5ODMwNCAqIDIgPSAxOTZLb1xuICAgIHZhciBudW1JbmRpY2VzID0gOTgzMDQ7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KG51bUluZGljZXMpO1xuXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCBudW1JbmRpY2VzOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gbnVsbDtcblxuICAgIHRoaXMudGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xufVxuXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbigncGFydGljbGUnLCBQYXJ0aWNsZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBXaGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gbmV3IFBhcnRpY2xlU2hhZGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlcik7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggaW5kZXgsIHNvIDY1NTM1IC8gNiA9IDEwOTIyLlxuXG4gICAgLy91cGxvYWQgdGhlIGluZGV4IGRhdGFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IFtcbiAgICAgICAgLy8gdmVydGljZXNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbixcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkVmVydGljZXMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBwb3NpdGlvbkRhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFBvc2l0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcm90YXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFSb3RhdGlvbixcbiAgICAgICAgICAgIHNpemU6MSxcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkUm90YXRpb24sXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyB1dnNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFV2cyxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIGFscGhhRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZEFscGhhLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfVxuICAgIF07XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBwYXJ0aWNsZSBiYXRjaC5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gYmluZCB0aGUgbWFpbiB0ZXh0dXJlXG4gICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAvLyBiaW5kIHRoZSBidWZmZXJzXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnNoYWRlcjtcblxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBwYXJ0aWNsZSBjb250YWluZXIgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBjaGlsZHJlbiA9IGNvbnRhaW5lci5jaGlsZHJlbixcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aCxcbiAgICAgICAgbWF4U2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemU7XG5cbiAgICBpZih0b3RhbENoaWxkcmVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIGlmKHRvdGFsQ2hpbGRyZW4gPiBtYXhTaXplKVxuICAgIHtcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IG1heFNpemU7XG4gICAgfVxuXG4gICAgaWYoIWNvbnRhaW5lci5fYnVmZmVycylcbiAgICB7XG4gICAgICAgIGNvbnRhaW5lci5fYnVmZmVycyA9IHRoaXMuZ2VuZXJhdGVCdWZmZXJzKCBjb250YWluZXIgKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXZzIGhhdmUgbm90IHVwZGF0ZWQgdGhlbiBubyBwb2ludCByZW5kZXJpbmcganVzdCB5ZXQhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb250YWluZXIuYmxlbmRNb2RlKTtcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgbSA9ICBjb250YWluZXIud29ybGRUcmFuc2Zvcm0uY29weSggdGhpcy50ZW1wTWF0cml4ICk7XG4gICAgbS5wcmVwZW5kKCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeCApO1xuICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5zaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCBtLnRvQXJyYXkodHJ1ZSkpO1xuICAgIGdsLnVuaWZvcm0xZih0aGlzLnNoYWRlci51bmlmb3Jtcy51QWxwaGEuX2xvY2F0aW9uLCBjb250YWluZXIud29ybGRBbHBoYSk7XG5cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgdGV4dHVyZSBpcyBib3VuZC4uXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gY2hpbGRyZW5bMF0uX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSB0ZXh0dXJlIGhhcyBub3QgdXBkYXRlZCB0aGVuIGxldHMgbm90IHVwbG9hZCBhbnkgc3RhdGljIHByb3BlcnRpZXNcbiAgICAgICAgaWYoIXRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZShiYXNlVGV4dHVyZSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFjb250YWluZXIuX3Byb3BlcnRpZXNbMF0gfHwgIWNvbnRhaW5lci5fcHJvcGVydGllc1szXSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICB9XG5cbiAgICAvLyBub3cgbGV0cyB1cGxvYWQgYW5kIHJlbmRlciB0aGUgYnVmZmVycy4uXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgdG90YWxDaGlsZHJlbjsgaSArPSBiYXRjaFNpemUsIGogKz0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhbW91bnQgPSAoIHRvdGFsQ2hpbGRyZW4gLSBpKTtcbiAgICAgICAgaWYoYW1vdW50ID4gYmF0Y2hTaXplKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbW91bnQgPSBiYXRjaFNpemU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYnVmZmVyID0gY29udGFpbmVyLl9idWZmZXJzW2pdO1xuXG4gICAgICAgIC8vIHdlIGFsd2F5cyB1cGxvYWQgdGhlIGR5bmFtaWNcbiAgICAgICAgYnVmZmVyLnVwbG9hZER5bmFtaWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG5cbiAgICAgICAgLy8gd2Ugb25seSB1cGxvYWQgdGhlIHN0YXRpYyBjb250ZW50IHdoZW4gd2UgaGF2ZSB0byFcbiAgICAgICAgaWYoY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9PT0gailcbiAgICAgICAge1xuICAgICAgICAgICAgYnVmZmVyLnVwbG9hZFN0YXRpYyhjaGlsZHJlbiwgaSwgYW1vdW50KTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSBqICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJpbmQgdGhlIGJ1ZmZlclxuICAgICAgICBidWZmZXIuYmluZCggdGhpcy5zaGFkZXIgKTtcblxuICAgICAgICAgLy8gbm93IGRyYXcgdGhvc2Ugc3Vja2FzIVxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBhbW91bnQgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIG9uZSBwYXJ0aWNsZSBidWZmZXIgZm9yIGVhY2ggY2hpbGQgaW4gdGhlIGNvbnRhaW5lciB3ZSB3YW50IHRvIHJlbmRlciBhbmQgdXBkYXRlcyBpbnRlcm5hbCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7UElYSS5QYXJ0aWNsZUNvbnRhaW5lcn0gVGhlIGNvbnRhaW5lciB0byByZW5kZXIgdXNpbmcgdGhpcyBQYXJ0aWNsZVJlbmRlcmVyXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmdlbmVyYXRlQnVmZmVycyA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgYnVmZmVycyA9IFtdLFxuICAgICAgICBzaXplID0gY29udGFpbmVyLl9tYXhTaXplLFxuICAgICAgICBiYXRjaFNpemUgPSBjb250YWluZXIuX2JhdGNoU2l6ZSxcbiAgICAgICAgZHluYW1pY1Byb3BlcnR5RmxhZ3MgPSBjb250YWluZXIuX3Byb3BlcnRpZXMsXG4gICAgICAgIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBiYXRjaFNpemUpXG4gICAge1xuICAgICAgICBidWZmZXJzLnB1c2gobmV3IFBhcnRpY2xlQnVmZmVyKGdsLCB0aGlzLnByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBiYXRjaFNpemUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVycztcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgdmVydGljaWVzLlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciB2ZXJ0aWNlcyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkVmVydGljZXMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIHZhciBzcHJpdGUsXG4gICAgICAgIHRleHR1cmUsXG4gICAgICAgIHRyaW0sXG4gICAgICAgIHN4LFxuICAgICAgICBzeSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKSB7XG5cbiAgICAgICAgc3ByaXRlID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldO1xuICAgICAgICB0ZXh0dXJlID0gc3ByaXRlLl90ZXh0dXJlO1xuICAgICAgICBzeCA9IHNwcml0ZS5zY2FsZS54O1xuICAgICAgICBzeSA9IHNwcml0ZS5zY2FsZS55O1xuXG4gICAgICAgIGlmICh0ZXh0dXJlLnRyaW0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZCB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG5cbiAgICAgICAgICAgIHcxID0gdHJpbS54IC0gc3ByaXRlLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGgxID0gdHJpbS55IC0gc3ByaXRlLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICBoMCA9IGgxICsgdGV4dHVyZS5jcm9wLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS1zcHJpdGUuYW5jaG9yLngpO1xuICAgICAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC1zcHJpdGUuYW5jaG9yLng7XG5cbiAgICAgICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtc3ByaXRlLmFuY2hvci55KTtcbiAgICAgICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXNwcml0ZS5hbmNob3IueTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gaDEgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IGgwICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHBvc2l0aW9ucyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUG9zaXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVQb3NpdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5wb3NpdGlvbjtcblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciByb3RhdGlvbiB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUm90YXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVSb3RhdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5yb3RhdGlvbjtcblxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVJvdGF0aW9uO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBVdnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFV2cyA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmVVdnMgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uX3RleHR1cmUuX3V2cztcblxuICAgICAgICBpZiAodGV4dHVyZVV2cylcbiAgICAgICAge1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHRleHR1cmVVdnMueDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IHRleHR1cmVVdnMueTA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB0ZXh0dXJlVXZzLngxO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSB0ZXh0dXJlVXZzLnkxO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHRleHR1cmVVdnMueDI7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSB0ZXh0dXJlVXZzLnkyO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHRleHR1cmVVdnMueDM7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSB0ZXh0dXJlVXZzLnkzO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyB5b3Uga25vdyB0aGlzIGNhbiBiZSBlYXNpZXIhXG4gICAgICAgICAgICBhcnJheVtvZmZzZXRdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIGFscGhhIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRBbHBoYSA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICAge1xuICAgICAgICB2YXIgc3ByaXRlQWxwaGEgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uYWxwaGE7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlQWxwaGE7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBQYXJ0aWNsZVJlbmRlcmVyLlxuICpcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIuZ2wpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5nbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgfVxuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG4gICAgdGhpcy50ZW1wTWF0cml4ID0gbnVsbDtcbn07XG4iLCJ2YXIgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1RleHR1cmVTaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVNoYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFRleHR1cmVTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVBvc2l0aW9uQ29vcmQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhU2NhbGU7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgZmxvYXQgYVJvdGF0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgdmVjMiB2ID0gYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICcgICB2LnggPSAoYVZlcnRleFBvc2l0aW9uLngpICogY29zKGFSb3RhdGlvbikgLSAoYVZlcnRleFBvc2l0aW9uLnkpICogc2luKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2LnkgPSAoYVZlcnRleFBvc2l0aW9uLngpICogc2luKGFSb3RhdGlvbikgKyAoYVZlcnRleFBvc2l0aW9uLnkpICogY29zKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2ID0gdiArIGFQb3NpdGlvbkNvb3JkOycsXG5cbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKHYsIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gaGVsbG9cbiAgICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IHVBbHBoYTsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciAqIHVBbHBoYTsnLFxuICAgICAgICAgICAgJyAgaWYgKGNvbG9yLmEgPT0gMC4wKSBkaXNjYXJkOycsXG4gICAgICAgICAgICAnICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB1QWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVBvc2l0aW9uQ29vcmQ6IDAsXG4gICAgICAgICAgIC8vIGFTY2FsZTogICAgICAgICAwLFxuICAgICAgICAgICAgYVJvdGF0aW9uOiAgICAgIDBcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBURU1QIEhBQ0tcblxufVxuXG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmVTaGFkZXIucHJvdG90eXBlKTtcblBhcnRpY2xlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlU2hhZGVyO1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogVGhlIENhbnZhc1JlbmRlcmVyIGRyYXdzIHRoZSBzY2VuZSBhbmQgYWxsIGl0cyBjb250ZW50IG9udG8gYSAyZCBjYW52YXMuIFRoaXMgcmVuZGVyZXIgc2hvdWxkIGJlIHVzZWQgZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgd2ViR0wuXG4gKiBEb24ndCBmb3JnZXQgdG8gYWRkIHRoZSBDYW52YXNSZW5kZXJlci52aWV3IHRvIHlvdXIgRE9NIG9yIHlvdSB3aWxsIG5vdCBzZWUgYW55dGhpbmcgOilcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc3lzdGVtIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSBzeXN0ZW0gdGhpcyByZW5kZXJlciBpcyBmb3IuXG4gKiBAcGFyYW0gW3dpZHRoPTgwMF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9NjAwXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBdIHtudW1iZXJ9IFRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSByZW5kZXJlZCBhcmVhIChzaG93biBpZiBub3QgdHJhbnNwYXJlbnQpLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFN5c3RlbVJlbmRlcmVyKHN5c3RlbSwgd2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHV0aWxzLnNheUhlbGxvKHN5c3RlbSk7XG5cbiAgICAvLyBwcmVwYXJlIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zW2ldID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zW2ldID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OU1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBvcHRpb25zID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5SRU5ERVJFUl9UWVBFLlVOS05PV05cbiAgICAgKiBAc2VlIFBJWEkuUkVOREVSRVJfVFlQRVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuVU5LTk9XTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA4MDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgODAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA2MDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHRvXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLnZpZXcgPSBvcHRpb25zLnZpZXcgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gb3B0aW9ucy5yZXNvbHV0aW9uO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy50cmFuc3BhcmVudCA9IG9wdGlvbnMudHJhbnNwYXJlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByZW5kZXIgdmlldyBzaG91bGQgYmUgcmVzaXplZCBhdXRvbWF0aWNhbGx5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IG9wdGlvbnMuYXV0b1Jlc2l6ZSB8fCBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrcyB0aGUgYmxlbmQgbW9kZXMgdXNlZnVsIGZvciB0aGlzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbWl4ZWQ+fVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIHByZXNlcnZlRHJhd2luZ0J1ZmZlciBmbGFnIGFmZmVjdHMgd2hldGhlciBvciBub3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyByZXRhaW5lZCBhZnRlciByZW5kZXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvciBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gICAgICogSWYgdGhlIHNjZW5lIGlzIE5PVCB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGEgY2FudmFzIHNpemVkIGZpbGxSZWN0IG9wZXJhdGlvbiBldmVyeSBmcmFtZSB0byBzZXQgdGhlIGNhbnZhcyBiYWNrZ3JvdW5kIGNvbG9yLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGNsZWFyUmVjdCB0byBjbGVhciB0aGUgY2FudmFzIGV2ZXJ5IGZyYW1lLlxuICAgICAqIERpc2FibGUgdGhpcyBieSBzZXR0aW5nIHRoaXMgdG8gZmFsc2UuIEZvciBleGFtcGxlIGlmIHlvdXIgZ2FtZSBoYXMgYSBjYW52YXMgZmlsbGluZyBiYWNrZ3JvdW5kIGltYWdlIHlvdSBvZnRlbiBkb24ndCBuZWVkIHRoaXMgc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdFxuICAgICAqL1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyO1xuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gICAgICogSGFuZHkgZm9yIGNyaXNwIHBpeGVsIGFydCBhbmQgc3BlZWQgb24gbGVnYWN5IGRldmljZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSBvcHRpb25zLnJvdW5kUGl4ZWxzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSAweDAwMDAwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGFuIFtSLCBHLCBCXSBhcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gJyMwMDAwMDAnO1xuXG4gICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBvcHRpb25zLmJhY2tncm91bmRDb2xvciB8fCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3I7IC8vIHJ1biBiZyBjb2xvciBzZXR0ZXJcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB0cmFuc2Zvcm06e3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpfSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCByb290IG9iamVjdCB0aGF0IHRoZSByZW5kZXJlciB0cmllZCB0byByZW5kZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbn1cblxuLy8gY29uc3RydWN0b3JcblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeXN0ZW1SZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3lzdGVtUmVuZGVyZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZpbGwgaWYgbm90IHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3lzdGVtUmVuZGVyZXIjXG4gICAgICovXG4gICAgYmFja2dyb3VuZENvbG9yOlxuICAgIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9IHV0aWxzLmhleDJzdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHV0aWxzLmhleDJyZ2IodmFsLCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB2aWV3IHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy52aWV3LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0aGlzLnZpZXcuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5hdXRvUmVzaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgYW5kIG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgQ2FudmFzIERPTSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldykge1xuICAgIGlmIChyZW1vdmVWaWV3ICYmIHRoaXMudmlldy5wYXJlbnROb2RlKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy52aWV3KTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICB0aGlzLnZpZXcgPSBudWxsO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMDtcblxuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gbnVsbDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSBudWxsO1xufTtcbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgQ2FudmFzTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ0NhbnZhcycsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5DQU5WQVM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy52aWV3LmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogdGhpcy50cmFuc3BhcmVudCB9KTtcblxuICAgIC8qKlxuICAgICAqIEJvb2xlYW4gZmxhZyBjb250cm9sbGluZyBjYW52YXMgcmVmcmVzaC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIGEgQ2FudmFzTWFza01hbmFnZXIsIGhhbmRsZXMgbWFza2luZyB3aGVuIHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc01hc2tNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBuZXcgQ2FudmFzTWFza01hbmFnZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgcHJvcGVydHkgdXNlZCB0byBzZXQgdGhlIGNhbnZhcyBzbW9vdGhpbmcgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdpbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnd2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21vekltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnb0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21zSW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIHRoaXMuX21hcEJsZW5kTW9kZXMoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge1xuICAgICAgICB3b3JsZFRyYW5zZm9ybTogbmV3IG1hdGguTWF0cml4KCksXG4gICAgICAgIHdvcmxkQWxwaGE6IDFcbiAgICB9O1xuXG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihDYW52YXNSZW5kZXJlcik7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIHRoaXMgY2FudmFzIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IG9iamVjdC5wYXJlbnQ7XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBvYmplY3Q7XG5cbiAgICBvYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgb2JqZWN0LnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIHRoaXMuY29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF07XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMgJiYgdGhpcy52aWV3LnNjcmVlbmNhbnZhcylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGVhckJlZm9yZVJlbmRlcilcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy53aWR0aCAsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChvYmplY3QsIHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGlzLmVtaXQoJ3Bvc3RyZW5kZXInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpXG57XG4gICAgdGhpcy5kZXN0cm95UGx1Z2lucygpO1xuXG4gICAgLy8gY2FsbCB0aGUgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLnJlZnJlc2ggPSB0cnVlO1xuXG4gICAgdGhpcy5tYXNrTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG5cbiAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KVxue1xuICAgIHZhciB0ZW1wQ29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJDYW52YXModGhpcyk7XG4gICAgdGhpcy5jb250ZXh0ID0gdGVtcENvbnRleHQ7XG59O1xuXG4vKipcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXIjcmVzaXplXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAodywgaClcbntcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcywgdywgaCk7XG5cbiAgICAvL3Jlc2V0IHRoZSBzY2FsZSBtb2RlLi4gb2RkbHkgdGhpcyBzZWVtcyB0byBiZSByZXNldCB3aGVuIHRoZSBjYW52YXMgaXMgcmVzaXplZC5cbiAgICAvL3N1cmVseSBhIGJyb3dzZXIgYnVnPz8gTGV0IHBpeGkgZml4IHRoYXQgZm9yIHlvdS4uXG4gICAgaWYodGhpcy5zbW9vdGhQcm9wZXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dFt0aGlzLnNtb290aFByb3BlcnR5XSA9IChDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBNYXBzIFBpeGkgYmxlbmQgbW9kZXMgdG8gY2FudmFzIGJsZW5kIG1vZGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fbWFwQmxlbmRNb2RlcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmJsZW5kTW9kZXMpXG4gICAge1xuICAgICAgICB0aGlzLmJsZW5kTW9kZXMgPSB7fTtcblxuICAgICAgICBpZiAodXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdtdWx0aXBseSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc2NyZWVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdvdmVybGF5JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdkYXJrZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ2xpZ2h0ZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ2NvbG9yLWRvZGdlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdjb2xvci1idXJuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IQVJEX0xJR0hUXSAgICA9ICdoYXJkLWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb2Z0LWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdkaWZmZXJlbmNlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5FWENMVVNJT05dICAgICA9ICdleGNsdXNpb24nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ2h1ZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc2F0dXJhdGUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ2NvbG9yJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdsdW1pbm9zaXR5JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb29sIG5ldyBibGVuZCBtb2RlcyBpbiBjYW52YXMgJ2NvdWdoJyBpZSAnY291Z2gnXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TQVRVUkFUSU9OXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBjYW52YXNcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKi9cbmZ1bmN0aW9uIENhbnZhc0J1ZmZlcih3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBDYW52YXMgb2JqZWN0IHRoYXQgYmVsb25ncyB0byB0aGlzIENhbnZhc0J1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBBIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHdvLWRpbWVuc2lvbmFsIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn1cblxuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc0J1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzQnVmZmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYW52YXNCdWZmZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB2YWw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyBidWZmZXIgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNhbnZhc0J1ZmZlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENsZWFycyB0aGUgY2FudmFzIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIENhbnZhc0J1ZmZlciBjbGFzcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgY2FudmFzIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBjYW52YXMuXG4gKlxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlciB0byBkcmF3IHRoZSBwcmltaXRpdmUgZ3JhcGhpY3MgZGF0YS5cbiAqIEBzdGF0aWNcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xudmFyIENhbnZhc0dyYXBoaWNzID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0dyYXBoaWNzO1xuXG4vKlxuICogUmVuZGVycyBhIEdyYXBoaWNzIG9iamVjdCB0byBhIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBhY3R1YWwgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIDJkIGRyYXdpbmcgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIHdvcmxkQWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljc1RpbnQoZ3JhcGhpY3MpO1xuICAgICAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuX2ZpbGxUaW50O1xuICAgICAgICB2YXIgbGluZUNvbG9yID0gZGF0YS5fbGluZVRpbnQ7XG5cbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRPRE8gLSBuZWVkIHRvIGJlIFVuZGVmaW5lZCFcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsMCwyKk1hdGguUEkpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcblxuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJ4ID0gc2hhcGUueDtcbiAgICAgICAgICAgIHZhciByeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBzaGFwZS53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgcmFkaXVzID0gc2hhcGUucmFkaXVzO1xuXG4gICAgICAgICAgICB2YXIgbWF4UmFkaXVzID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyIHwgMDtcbiAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1cyA+IG1heFJhZGl1cyA/IG1heFJhZGl1cyA6IHJhZGl1cztcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGxDb2xvciB8fCBkYXRhLmZpbGxDb2xvciA9PT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3MgbWFza1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBtYXNrXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY29udGV4dCAyZCBtZXRob2Qgb2YgdGhlIGNhbnZhc1xuICovXG5DYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIGxlbiA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG5cbiAgICBpZiAobGVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludCBhcmUgdGhlIHNhbWUgY2xvc2UgdGhlIHBhdGggLSBtdWNoIG5lYXRlciA6KVxuICAgICAgICAgICAgaWYgKHBvaW50c1swXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gJiYgcG9pbnRzWzFdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5yZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuXG4gICAgICAgICAgICAvLyBlbGxpcHNlIGNvZGUgdGFrZW4gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG5cbiAgICAgICAgICAgIHZhciB3ID0gc2hhcGUud2lkdGggKiAyO1xuICAgICAgICAgICAgdmFyIGggPSBzaGFwZS5oZWlnaHQgKiAyO1xuXG4gICAgICAgICAgICB2YXIgeCA9IHNoYXBlLnggLSB3LzI7XG4gICAgICAgICAgICB2YXIgeSA9IHNoYXBlLnkgLSBoLzI7XG5cbiAgICAgICAgICAgIHZhciBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICAgICAgICAgICAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgIHhlID0geCArIHcsICAgICAgICAgICAvLyB4LWVuZFxuICAgICAgICAgICAgICAgIHllID0geSArIGgsICAgICAgICAgICAvLyB5LWVuZFxuICAgICAgICAgICAgICAgIHhtID0geCArIHcgLyAyLCAgICAgICAvLyB4LW1pZGRsZVxuICAgICAgICAgICAgICAgIHltID0geSArIGggLyAyOyAgICAgICAvLyB5LW1pZGRsZVxuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhlLCB5bSArIG95LCB4bSArIG94LCB5ZSwgeG0sIHllKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdGludCBvZiBhIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB0aGF0IHdpbGwgaGF2ZSBpdHMgdGludCB1cGRhdGVkXG4gKlxuICovXG5DYW52YXNHcmFwaGljcy51cGRhdGVHcmFwaGljc1RpbnQgPSBmdW5jdGlvbiAoZ3JhcGhpY3MpXG57XG4gICAgaWYgKGdyYXBoaWNzLnRpbnQgPT09IDB4RkZGRkZGICYmIGdyYXBoaWNzLl9wcmV2VGludCA9PT0gZ3JhcGhpY3MudGludClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGhpY3MuX3ByZXZUaW50ID0gZ3JhcGhpY3MudGludDtcblxuICAgIHZhciB0aW50UiA9IChncmFwaGljcy50aW50ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIHRpbnRHID0gKGdyYXBoaWNzLnRpbnQgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50QiA9IChncmFwaGljcy50aW50ICYgMHhGRikvIDI1NTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuZmlsbENvbG9yIHwgMDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEubGluZUNvbG9yIHwgMDtcblxuICAgICAgICAvKlxuICAgICAgICB2YXIgY29sb3JSID0gKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JHID0gKGZpbGxDb2xvciA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIHZhciBjb2xvckIgPSAoZmlsbENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBmaWxsQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcblxuICAgICAgICBjb2xvclIgPSAobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIGNvbG9yRyA9IChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckIgPSAobGluZUNvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBsaW5lQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcbiAgICAgICAgKi9cblxuICAgICAgICAvLyBzdXBlciBpbmxpbmUgY29zIGltIGFuIG9wdGltaXphdGlvbiBOQVpJIDopXG4gICAgICAgIGRhdGEuX2ZpbGxUaW50ID0gKCgoZmlsbENvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChmaWxsQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG4gICAgICAgIGRhdGEuX2xpbmVUaW50ID0gKCgobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChsaW5lQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG5cbiAgICB9XG59O1xuXG4iLCJ2YXIgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuL0NhbnZhc0dyYXBoaWNzJyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgdG8gaGFuZGxlIG1hc2tpbmcuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDYW52YXNNYXNrTWFuYWdlcigpXG57fVxuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzTWFza01hbmFnZXI7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgYWRkcyBpdCB0byB0aGUgY3VycmVudCBzdGFjayBvZiBtYXNrcy5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge29iamVjdH0gdGhlIG1hc2tEYXRhIHRoYXQgd2lsbCBiZSBwdXNoZWRcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhLCByZW5kZXJlcilcbntcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2F2ZSgpO1xuXG4gICAgdmFyIGNhY2hlQWxwaGEgPSBtYXNrRGF0YS5hbHBoYTtcbiAgICB2YXIgdHJhbnNmb3JtID0gbWFza0RhdGEud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICAvL1RPRE8gc3Vwb3J0IHNwcml0ZSBhbHBoYSBtYXNrcz8/XG4gICAgLy9sb3RzIG9mIGVmZm9ydCByZXF1aXJlZC4gSWYgZGVtYW5kIGlzIGdyZWF0IGVub3VnaC4uXG4gICAgaWYoIW1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sobWFza0RhdGEsIHJlbmRlcmVyLmNvbnRleHQpO1xuICAgICAgICByZW5kZXJlci5jb250ZXh0LmNsaXAoKTtcbiAgICB9XG5cbiAgICBtYXNrRGF0YS53b3JsZEFscGhhID0gY2FjaGVBbHBoYTtcbn07XG5cbi8qKlxuICogUmVzdG9yZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlIHRoZSBtYXNrIHdhcyBhcHBsaWVkLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIFNwcml0ZS9UZXh0dXJlIHRpbnRpbmcuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNUaW50ZXIgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzVGludGVyO1xuXG4vKipcbiAqIEJhc2ljYWxseSB0aGlzIG1ldGhvZCBqdXN0IG5lZWRzIGEgc3ByaXRlIGFuZCBhIGNvbG9yIGFuZCB0aW50cyB0aGUgc3ByaXRlIHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIHRpbnRlZCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUgPSBmdW5jdGlvbiAoc3ByaXRlLCBjb2xvcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHNwcml0ZS50ZXh0dXJlO1xuXG4gICAgY29sb3IgPSBDYW52YXNUaW50ZXIucm91bmRDb2xvcihjb2xvcik7XG5cbiAgICB2YXIgc3RyaW5nQ29sb3IgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG5cbiAgICB0ZXh0dXJlLnRpbnRDYWNoZSA9IHRleHR1cmUudGludENhY2hlIHx8IHt9O1xuXG4gICAgaWYgKHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl07XG4gICAgfVxuXG4gICAgIC8vIGNsb25lIHRleHR1cmUuLlxuICAgIHZhciBjYW52YXMgPSBDYW52YXNUaW50ZXIuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLy9DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCh0ZXh0dXJlLCBzdHJpbmdDb2xvciwgY2FudmFzKTtcbiAgICBDYW52YXNUaW50ZXIudGludE1ldGhvZCh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKTtcblxuICAgIGlmIChDYW52YXNUaW50ZXIuY29udmVydFRpbnRUb0ltYWdlKVxuICAgIHtcbiAgICAgICAgLy8gaXMgdGhpcyBiZXR0ZXI/XG4gICAgICAgIHZhciB0aW50SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgdGludEltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcblxuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSB0aW50SW1hZ2U7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSA9IGNhbnZhcztcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCBjb252ZXJ0aW5nIHRoZSB0ZXh0dXJlIHRvIGFuIGltYWdlIHRoZW4gd2UgbmVlZCB0byBsb3NlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhc1xuICAgICAgICBDYW52YXNUaW50ZXIuY2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ211bHRpcGx5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgPSBmdW5jdGlvbiAodGV4dHVyZSwgY29sb3IsIGNhbnZhcylcbntcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgIHZhciBjcm9wID0gdGV4dHVyZS5jcm9wLmNsb25lKCk7XG4gICAgY3JvcC54ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC55ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC53aWR0aCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AuaGVpZ2h0ICo9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXMud2lkdGggPSBjcm9wLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wLmhlaWdodDtcblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tYXRvcCc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ292ZXJsYXknIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhPdmVybGF5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgY3JvcC54LFxuICAgICAgICBjcm9wLnksXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodFxuICAgICk7XG5cbiAgICAvLyBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5Jztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgcGl4ZWwgcGVyIHBpeGVsLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuICAgIHZhciByID0gcmdiVmFsdWVzWzBdLCBnID0gcmdiVmFsdWVzWzFdLCBiID0gcmdiVmFsdWVzWzJdO1xuXG4gICAgdmFyIHBpeGVsRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIHZhciBwaXhlbHMgPSBwaXhlbERhdGEuZGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGl4ZWxzLmxlbmd0aDsgaSArPSA0KVxuICAgIHtcbiAgICAgICAgcGl4ZWxzW2krMF0gKj0gcjtcbiAgICAgICAgcGl4ZWxzW2krMV0gKj0gZztcbiAgICAgICAgcGl4ZWxzW2krMl0gKj0gYjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnB1dEltYWdlRGF0YShwaXhlbERhdGEsIDAsIDApO1xufTtcblxuLyoqXG4gKiBSb3VuZHMgdGhlIHNwZWNpZmllZCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gcm91bmQsIHNob3VsZCBiZSBhIGhleCBjb2xvclxuICovXG5DYW52YXNUaW50ZXIucm91bmRDb2xvciA9IGZ1bmN0aW9uIChjb2xvcilcbntcbiAgICB2YXIgc3RlcCA9IENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuXG4gICAgcmdiVmFsdWVzWzBdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzBdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMV0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMV0gLyBzdGVwKSAqIHN0ZXApO1xuICAgIHJnYlZhbHVlc1syXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1syXSAvIHN0ZXApICogc3RlcCk7XG5cbiAgICByZXR1cm4gdXRpbHMucmdiMmhleChyZ2JWYWx1ZXMpO1xufTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygc3RlcHMgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgY2FwIHdoZW4gcm91bmRpbmcgY29sb3JzLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhY2hlU3RlcHNQZXJDb2xvckNoYW5uZWwgPSA4O1xuXG4vKipcbiAqIFRpbnQgY2FjaGUgYm9vbGVhbiBmbGFnLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSA9IGZhbHNlO1xuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkLCBjb25zZXF1ZW50bHkgdGhlIGFiaWxpdHkgdG8gdGludCB1c2luZyB0aGUgbXVsdGlwbHkgbWV0aG9kLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID0gdXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpO1xuXG4vKipcbiAqIFRoZSB0aW50aW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKi9cbkNhbnZhc1RpbnRlci50aW50TWV0aG9kID0gQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID8gQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgOiAgQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWw7XG4iLCJ2YXIgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuXHR1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgVGV4dHVyZU1hbmFnZXIgPSBmdW5jdGlvbihnbClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIHRyYWNrIHRleHR1cmVzIGluIHRoZSByZW5kZXJlciBzbyB3ZSBjYW4gbm8gbG9uZ2VyIGxpc3RlbiB0byB0aGVtIG9uIGRlc3RydWN0aW9uLlxuXHR0aGlzLl9tYW5hZ2VkVGV4dHVyZXMgPSBbXTtcbiAgICB0aGlzLmdsVGV4dHVyZXMgPSB7fTtcblxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmdldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cbi8qKlxuICogVXBkYXRlcyBhbmQvb3IgQ3JlYXRlcyBhIFdlYkdMIHRleHR1cmUgZm9yIHRoZSByZW5kZXJlcidzIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB1cGRhdGVcbiAqL1xuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG5cdGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXS8vdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG5cbiAgICBpZiAoIWdsVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGdsVGV4dHVyZSA9IG5ldyBHTFRleHR1cmUoZ2wpO1xuICAgICAgICBnbFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHRydWVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbFRleHR1cmU7XG5cbiAgICAgICAvLyB0aGlzLmdsVGV4dHVyZXNbdGV4dHVyZS51aWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgIHRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub24oJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xuICAgIH1cblxuICAgIGdsVGV4dHVyZS51cGxvYWQodGV4dHVyZS5zb3VyY2UpO1xuICAgIFxuICAgIC8vVE9ETyBjaGVjayBpcyBwb3dlciBvZiB0d28uLlxuICAgIGdsVGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuXG4gICAgLy8gVE9ETyBjaGVjayBmb3Igc2NhbGluZyB0eXBlXG4gICAgZ2xUZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKTtcblxuICAgIHJldHVybiAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG59XG5cbi8qKlxuICogRGVsZXRlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byBkZXN0cm95XG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUsIF9za2lwUmVtb3ZlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0uZGVzdHJveSgpO1xuICAgICAgICB0ZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGVUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcblxuXG4gICAgICAgIGRlbGV0ZSB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdO1xuXG4gICAgICAgIGlmICghX3NraXBSZW1vdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzLmluZGV4T2YodGV4dHVyZSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLl9tYW5hZ2VkVGV4dHVyZXMsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24oKVxue1xuXHQvLyBlbXB0eSBhbGwgdGhlIG9sZCBnbCB0ZXh0dXJlcyBhcyB0aGV5IGFyZSB1c2VsZXNzIG5vd1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIGlmICh0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgLy8gZGVzdHJveSBtYW5hZ2VkIHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgdGhpcy5kZXN0cm95VGV4dHVyZSh0ZXh0dXJlLCB0cnVlKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFuYWdlZFRleHR1cmVzID0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlTWFuYWdlcjtcblxuIiwidmFyIFN5c3RlbVJlbmRlcmVyID0gcmVxdWlyZSgnLi4vU3lzdGVtUmVuZGVyZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL01hc2tNYW5hZ2VyJyksXG4gICAgU3RlbmNpbE1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyJyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIEJsZW5kTW9kZU1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIEZYQUFGaWx0ZXIgPSByZXF1aXJlKCcuL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi9UZXh0dXJlTWFuYWdlcicpLFxuICAgIGNyZWF0ZUNvbnRleHQgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5jcmVhdGVDb250ZXh0LFxuICAgIG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aSA9IHJlcXVpcmUoJy4vdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpJyksXG4gICAgbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgV2ViR0xSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgd2ViR0wgZW5hYmxlZCBjYW52YXMuIFRoaXMgcmVuZGVyZXJcbiAqIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wuIFRoaXMgUmVuZGVyIHdvcmtzIGJ5IGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgd2ViR0xCYXRjaHMuXG4gKiBTbyBubyBuZWVkIGZvciBTcHJpdGUgQmF0Y2hlcyBvciBTcHJpdGUgQ2xvdWRzLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgdmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD0wXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD0wXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcy4gSWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseSB0aGVuIEZYQUEgYW50aWFsaWFzaW5nIGlzIHVzZWRcbiAqIEBwYXJhbSBbb3B0aW9ucy5mb3JjZUZYQUE9ZmFsc2VdIHtib29sZWFufSBmb3JjZXMgRlhBQSBhbnRpYWxpYXNpbmcgdG8gYmUgdXNlZCBvdmVyIG5hdGl2ZS4gRlhBQSBpcyBmYXN0ZXIsIGJ1dCBtYXkgbm90IGFsd2F5cyBsb29rIGFzIGdyZWF0XG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLiBJZiB5b3Ugd2lzaCB0byBzZXQgdGhpcyB0byBmYWxzZSwgeW91ICptdXN0KiBzZXQgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHRvIGB0cnVlYC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWZcbiAqICAgICAgeW91IG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHQuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgU3lzdGVtUmVuZGVyZXIuY2FsbCh0aGlzLCAnV2ViR0wnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgcmVuZGVyZXIgYXMgYSBzdGFuZGFyZGlzZWQgY29uc3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0vL1xuICAgICAqXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQgPSB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHBhc3NlZCBpbiB0byBjcmVhdGUgYSBuZXcgd2ViZ2wgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0ge1xuICAgICAgICBhbHBoYTogdGhpcy50cmFuc3BhcmVudCxcbiAgICAgICAgYW50aWFsaWFzOiBvcHRpb25zLmFudGlhbGlhcyxcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnRyYW5zcGFyZW50ICYmIHRoaXMudHJhbnNwYXJlbnQgIT09ICdub3RNdWx0aXBsaWVkJyxcbiAgICAgICAgc3RlbmNpbDogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgIH07XG5cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhWzNdID0gdGhpcy50cmFuc3BhcmVudCA/IDAgOiAxO1xuXG4gICAgLyoqXG4gICAgICogRGVhbHMgd2l0aCBtYW5hZ2luZyB0aGUgc2hhZGVyIHByb2dyYW1zIGFuZCB0aGVpciBhdHRyaWJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG5ldyBTaGFkZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWFza3MgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IE1hc2tNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIgPSBuZXcgU3RlbmNpbE1hbmFnZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5GaWx0ZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgYmxlbmRNb2Rlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CbGVuZE1vZGVNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlciA9IG5ldyBCbGVuZE1vZGVNYW5hZ2VyKHRoaXMpO1xuXG4gICAgXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgT2JqZWN0UmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk9iamVjdFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbmV3IE9iamVjdFJlbmRlcmVyKHRoaXMpO1xuXG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBzbyBpdCBpcyByZWFkeSBmb3IgdGhlIG1hbmFnZXJzLlxuICAgIHRoaXMuZ2wgPSBjcmVhdGVDb250ZXh0KHRoaXMudmlldywgdGhpcy5fY29udGV4dE9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcblxuICAgIC8vIG1hcCBzb21lIHdlYkdMIGJsZW5kIGFuZCBkcmF3bW9kZXMuLlxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aShnbCk7XG4gICAgdGhpcy5kcmF3TW9kZXMgPSBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbClcblxuICAgIHRoaXMuX2FjdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldH1cbiAgICAgKi9cbiAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihXZWJHTFJlbmRlcmVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBXZWJHTCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuX2luaXRDb250ZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgLy8gY3JlYXRlIGEgdGV4dHVyZSBtYW5hZ2VyLi4uXG4gICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG5ldyBUZXh0dXJlTWFuYWdlcihnbCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIGRlZmF1bHQgcGl4aSBzZXR0aW5ncy4uXG4gICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcblxuXG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG51bGwsIHRoaXMucmVzb2x1dGlvbiwgdHJ1ZSk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LmNsZWFyQ29sb3IgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhO1xuICAgIFxuICAgIHRoaXMuYmluZFJlbmRlclRhcmdldCh0aGlzLnJvb3RSZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy5lbWl0KCdjb250ZXh0JywgZ2wpO1xuXG4gICAgLy8gc2V0dXAgdGhlIHdpZHRoL2hlaWdodCBwcm9wZXJ0aWVzIGFuZCBnbCB2aWV3cG9ydFxuICAgIHRoaXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsgICAgXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBpdHMgd2ViR0wgdmlld1xuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gdGhlIG9iamVjdCB0byBiZSByZW5kZXJlZFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdClcbntcbiAgICB0aGlzLmVtaXQoJ3ByZXJlbmRlcicpO1xuXG4gICAgLy8gbm8gcG9pbnQgcmVuZGVyaW5nIGlmIG91ciBjb250ZXh0IGhhcyBiZWVuIGJsb3duIHVwIVxuICAgIGlmICh0aGlzLmdsLmlzQ29udGV4dExvc3QoKSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBkaXNwbGF5T2JqZWN0O1xuXG4gICAgdmFyIGNhY2hlUGFyZW50ID0gZGlzcGxheU9iamVjdC5wYXJlbnQ7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgZGlzcGxheU9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICBkaXNwbGF5T2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIHRoaXMucm9vdFJlbmRlclRhcmdldCwgdGhpcy5jbGVhckJlZm9yZVJlbmRlcik7Ly90aGlzLnByb2plY3Rpb24pO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBEaXNwbGF5IE9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSBUaGUgcmVuZGVyIHRhcmdldCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgZGlzcGxheSBvYmplY3RcbiAqXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcmVuZGVyVGFyZ2V0LCBjbGVhcikvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblxuICAgIGlmKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIGZpbHRlciBtYW5hZ2VyXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnNldEZpbHRlclN0YWNrKCByZW5kZXJUYXJnZXQuZmlsdGVyU3RhY2sgKTtcblxuICAgIC8vIHJlbmRlciB0aGUgc2NlbmUhXG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJXZWJHTCh0aGlzKTtcblxuICAgIC8vIGZpbmlzaCB0aGUgY3VycmVudCByZW5kZXJlci4uXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXJlciB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSBvYmplY3RSZW5kZXJlciB7UElYSS5PYmplY3RSZW5kZXJlcn0gVGhlIG9iamVjdCByZW5kZXJlciB0byB1c2UuXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldE9iamVjdFJlbmRlcmVyID0gZnVuY3Rpb24gKG9iamVjdFJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRSZW5kZXJlciA9PT0gb2JqZWN0UmVuZGVyZXIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RvcCgpO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gb2JqZWN0UmVuZGVyZXI7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgd2ViR0wgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHdlYkdMIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHdlYkdMIHZpZXdcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSB0aGlzLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRvIHRoZSBvbmUgZ2l2ZW4gaW4gcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9IHRoZSBuZXcgcmVuZGVyIHRhcmdldFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5iaW5kUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICBpZihyZW5kZXJUYXJnZXQgIT09IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBpZih0aGlzLl9hY3RpdmVTaGFkZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gcmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuc2V0TWFza1N0YWNrKCByZW5kZXJUYXJnZXQuc3RlbmNpbE1hc2tTdGFjayApO1xuICAgIH1cbn1cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFNoYWRlciA9IGZ1bmN0aW9uIChzaGFkZXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgLy9UT0RPIGNhY2hlXG4gICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyICE9PSBzaGFkZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBzaGFkZXI7XG4gICAgICAgIHNoYWRlci5iaW5kKCk7XG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB9XG59XG5cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgbG9jYXRpb24pXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vVE9ETyB0ZXN0IHBlcmYgb2YgY2FjaGU/XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCAwO1xuXG4gICAgaWYodGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uICE9PSBsb2NhdGlvbikvL1xuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uID0gbG9jYXRpb25cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uICk7XG4gICAgfVxuXG4gICAgLy9UT0RPIC0gY2FuIHdlIGNhY2hlIHRoaXMgdGV4dHVyZSB0b28/XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7ICAgICAgXG4gICAgXG4gICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIGJpbmQgdGhlIHRleHR1cmUuLlxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXS5iaW5kKCk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogSGFuZGxlcyBhIGxvc3Qgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRMb3N0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgYSByZXN0b3JlZCB3ZWJnbCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9pbml0Q29udGV4dCgpO1xuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIucmVtb3ZlQWxsKCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciAoZXZlbnQgbGlzdGVuZXJzLCBzcHJpdGViYXRjaCwgZXRjLi4uKVxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIHJlbW92ZSBsaXN0ZW5lcnNcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuaGFuZGxlQ29udGV4dExvc3QpO1xuICAgIHRoaXMudmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkKTtcblxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIuZGVzdHJveUFsbCgpO1xuXG4gICAgLy8gY2FsbCBiYXNlIGRlc3Ryb3lcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHJlbW92ZVZpZXcpO1xuXG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgLy8gZGVzdHJveSB0aGUgbWFuYWdlcnNcbiAgICB0aGlzLnNoYWRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSBudWxsO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0gbnVsbDtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICB0aGlzLmdsID0gbnVsbDtcbn07XG5cbiIsInZhciBEZWZhdWx0U2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBQSVhJIGZpbHRlci4gQ3VycmVudGx5IG9ubHkgV2ViR0wgc3VwcG9ydHMgZmlsdGVycy5cbiAqIElmIHlvdSB3YW50IHRvIG1ha2UgYSBjdXN0b20gZmlsdGVyIHRoaXMgc2hvdWxkIGJlIHlvdXIgYmFzZSBjbGFzcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdmVydGV4U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIGZyYWdtZW50U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlIGFzIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gdW5pZm9ybXMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuaWZvcm1zIGZvciB0aGlzIGZpbHRlci5cbiAqL1xuZnVuY3Rpb24gQWJzdHJhY3RGaWx0ZXIodmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMpXG57XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBzaGFkZXJzXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVycyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4dHJhIHBhZGRpbmcgdGhhdCB0aGUgZmlsdGVyIG1pZ2h0IG5lZWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmlmb3JtcyBhcyBhbiBvYmplY3RcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29kZSBvZiB0aGUgdmVydGV4IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIGZyYW1lbnQgc2hhZGVyXG4gICAgICogQG1lbWJlciB7c3RyaW5nW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICAvL1RPRE8gYSByZW1pbmRlciAtIHdvdWxkIGJlIGNvb2wgdG8gaGF2ZSBsb3dlciByZXMgZmlsdGVycyBhcyB0aGlzIHdvdWxkIGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlLlxuXG4gICAgLy90eXBlb2YgZnJhZ21lbnRTcmMgPT09ICdzdHJpbmcnID8gZnJhZ21lbnRTcmMuc3BsaXQoJycpIDogKGZyYWdtZW50U3JjIHx8IFtdKTtcblxufVxuXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RGaWx0ZXI7XG5cbi8qKlxuICogR3JhYnMgYSBzaGFkZXIgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIHNoYWRlciBmcm9tXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5nZXRTaGFkZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXJzW2dsLmlkXTtcblxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gbmV3IERlZmF1bHRTaGFkZXIocmVuZGVyZXIuc2hhZGVyTWFuYWdlcixcbiAgICAgICAgICAgIHRoaXMudmVydGV4U3JjLFxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudFNyYyxcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNoYWRlcnNbZ2wuaWRdID0gc2hhZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8gY2xlYXIgdGhlIG91dHB1dFRhcmdldFxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xufTtcblxuLyoqXG4gKiBTeW5jcyBhIHVuaWZvcm0gYmV0d2VlbiB0aGUgY2xhc3Mgb2JqZWN0IGFuZCB0aGUgc2hhZGVycy5cbiAqXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5zaGFkZXJzLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyc1tpXS5zeW5jVW5pZm9ybSh1bmlmb3JtKTtcbiAgICB9XG59O1xuIiwidmFyIEFic3RyYWN0RmlsdGVyID0gcmVxdWlyZSgnLi9BYnN0cmFjdEZpbHRlcicpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqXG4gKiBCYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXG4gKiBtb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcbiAqIHVuc3VwcG9ydGVkIGJ5IFdlYkdMLlxuICpcbiAqIC0tXG4gKiBGcm9tOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKlxuICovXG5mdW5jdGlvbiBGWEFBRmlsdGVyKClcbntcbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG5cXG52b2lkIHRleGNvb3Jkcyh2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTlcsIG91dCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JTVywgb3V0IHZlYzIgdl9yZ2JTRSxcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjMiBpbnZlcnNlVlAgPSAxLjAgLyByZXNvbHV0aW9uLnh5O1xcbiAgICB2X3JnYk5XID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk5FID0gKGZyYWdDb29yZCArIHZlYzIoMS4wLCAtMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU1cgPSAoZnJhZ0Nvb3JkICsgdmVjMigtMS4wLCAxLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JTRSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiTSA9IHZlYzIoZnJhZ0Nvb3JkICogaW52ZXJzZVZQKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxuICAgdlJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xcblxcbiAgIC8vY29tcHV0ZSB0aGUgdGV4dHVyZSBjb29yZHMgYW5kIHNlbmQgdGhlbSB0byB2YXJ5aW5nc1xcbiAgIHRleGNvb3JkcyhhVGV4dHVyZUNvb3JkICogcmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgdl9yZ2JOVywgdl9yZ2JORSwgdl9yZ2JTVywgdl9yZ2JTRSwgdl9yZ2JNKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcblxcbi8qKlxcbkJhc2ljIEZYQUEgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGNvZGUgb24gZ2Vla3MzZC5jb20gd2l0aCB0aGVcXG5tb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcXG51bnN1cHBvcnRlZCBieSBXZWJHTC5cXG5cXG4tLVxcblxcbkZyb206XFxuaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcXG5cXG5Db3B5cmlnaHQgKGMpIDIwMTEgYnkgQXJtaW4gUm9uYWNoZXIuXFxuXFxuU29tZSByaWdodHMgcmVzZXJ2ZWQuXFxuXFxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxcbm1ldDpcXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXFxuICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcXG4gICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcXG4gICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXFxuXFxuICAgICogVGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3JcXG4gICAgICBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWNcXG4gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXFxuXFxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xcblxcXCJBUyBJU1xcXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXFxuQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcXG5PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcXG5TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXFxuVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXFxuKi9cXG5cXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01JTlxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvIDEyOC4wKVxcbiNlbmRpZlxcbiNpZm5kZWYgRlhBQV9SRURVQ0VfTVVMXFxuICAgICNkZWZpbmUgRlhBQV9SRURVQ0VfTVVMICAgKDEuMCAvIDguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfU1BBTl9NQVhcXG4gICAgI2RlZmluZSBGWEFBX1NQQU5fTUFYICAgICA4LjBcXG4jZW5kaWZcXG5cXG4vL29wdGltaXplZCB2ZXJzaW9uIGZvciBtb2JpbGUsIHdoZXJlIGRlcGVuZGVudFxcbi8vdGV4dHVyZSByZWFkcyBjYW4gYmUgYSBib3R0bGVuZWNrXFxudmVjNCBmeGFhKHNhbXBsZXIyRCB0ZXgsIHZlYzIgZnJhZ0Nvb3JkLCB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk5XLCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYlNXLCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjNCBjb2xvcjtcXG4gICAgbWVkaXVtcCB2ZWMyIGludmVyc2VWUCA9IHZlYzIoMS4wIC8gcmVzb2x1dGlvbi54LCAxLjAgLyByZXNvbHV0aW9uLnkpO1xcbiAgICB2ZWMzIHJnYk5XID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JOVykueHl6O1xcbiAgICB2ZWMzIHJnYk5FID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JORSkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTVykueHl6O1xcbiAgICB2ZWMzIHJnYlNFID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTRSkueHl6O1xcbiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JNKTtcXG4gICAgdmVjMyByZ2JNICA9IHRleENvbG9yLnh5ejtcXG4gICAgdmVjMyBsdW1hID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTtcXG4gICAgZmxvYXQgbHVtYU5XID0gZG90KHJnYk5XLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KHJnYk5FLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gZG90KHJnYlNXLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNFID0gZG90KHJnYlNFLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KHJnYk0sICBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU1pbiA9IG1pbihsdW1hTSwgbWluKG1pbihsdW1hTlcsIGx1bWFORSksIG1pbihsdW1hU1csIGx1bWFTRSkpKTtcXG4gICAgZmxvYXQgbHVtYU1heCA9IG1heChsdW1hTSwgbWF4KG1heChsdW1hTlcsIGx1bWFORSksIG1heChsdW1hU1csIGx1bWFTRSkpKTtcXG5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpcjtcXG4gICAgZGlyLnggPSAtKChsdW1hTlcgKyBsdW1hTkUpIC0gKGx1bWFTVyArIGx1bWFTRSkpO1xcbiAgICBkaXIueSA9ICAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuXFxuICAgIGZsb2F0IGRpclJlZHVjZSA9IG1heCgobHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFKSAqXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNSAqIEZYQUFfUkVEVUNFX01VTCksIEZYQUFfUkVEVUNFX01JTik7XFxuXFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvIChtaW4oYWJzKGRpci54KSwgYWJzKGRpci55KSkgKyBkaXJSZWR1Y2UpO1xcbiAgICBkaXIgPSBtaW4odmVjMihGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgIG1heCh2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBkaXIgKiByY3BEaXJNaW4pKSAqIGludmVyc2VWUDtcXG5cXG4gICAgdmVjMyByZ2JBID0gMC41ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDEuMCAvIDMuMCAtIDAuNSkpLnh5eiArXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMi4wIC8gMy4wIC0gMC41KSkueHl6KTtcXG4gICAgdmVjMyByZ2JCID0gcmdiQSAqIDAuNSArIDAuMjUgKiAoXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAtMC41KS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogMC41KS54eXopO1xcblxcbiAgICBmbG9hdCBsdW1hQiA9IGRvdChyZ2JCLCBsdW1hKTtcXG4gICAgaWYgKChsdW1hQiA8IGx1bWFNaW4pIHx8IChsdW1hQiA+IGx1bWFNYXgpKVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkEsIHRleENvbG9yLmEpO1xcbiAgICBlbHNlXFxuICAgICAgICBjb2xvciA9IHZlYzQocmdiQiwgdGV4Q29sb3IuYSk7XFxuICAgIHJldHVybiBjb2xvcjtcXG59XFxuXFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGZ4YWEodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKiB2UmVzb2x1dGlvbiwgdlJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxuXFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG59XG5cbkZYQUFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRlhBQUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGWEFBRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBGWEFBRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cbkZYQUFGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlciggcmVuZGVyZXIgKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBTcHJpdGVNYXNrRmlsdGVyIGNsYXNzXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSB0YXJnZXQgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZU1hc2tGaWx0ZXIoc3ByaXRlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgICB2TWFza0Nvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFza0Nvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgLy8gY2hlY2sgY2xpcCEgdGhpcyB3aWxsIHN0b3AgdGhlIG1hc2sgYmxlZWRpbmcgb3V0IGZyb20gdGhlIGVkZ2VzXFxuICAgIHZlYzIgdGV4dCA9IGFicyggdk1hc2tDb29yZCAtIDAuNSApO1xcbiAgICB0ZXh0ID0gc3RlcCgwLjUsIHRleHQpO1xcbiAgICBmbG9hdCBjbGlwID0gMS4wIC0gbWF4KHRleHQueSwgdGV4dC54KTtcXG4gICAgdmVjNCBvcmlnaW5hbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgIHZlYzQgbWFza3kgPSB0ZXh0dXJlMkQobWFzaywgdk1hc2tDb29yZCk7XFxuICAgIG9yaWdpbmFsICo9IChtYXNreS5yICogbWFza3kuYSAqIGFscGhhICogY2xpcCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG9yaWdpbmFsO1xcbn1cXG5cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbWFzazogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUuX3RleHR1cmUgfSxcbiAgICAgICAgICAgIGFscGhhOiAgICAgICAgICB7IHR5cGU6ICdmJywgdmFsdWU6IDF9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcbn1cblxuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0byByZXRyaWV2ZSB0aGUgZmlsdGVyIGZyb21cbiAqIEBwYXJhbSBpbnB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gb3V0cHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqL1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5tYXNrLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLl90ZXh0dXJlO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLndvcmxkQWxwaGE7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZU1hc2tGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgdXNlZCB0byBtb3ZlIHRoZSBkaXNwbGFjZW1lbnQgbWFwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdsTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBCbGVuZE1vZGVNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn1cblxuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZE1vZGVNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGVNYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMtdXAgdGhlIGdpdmVuIGJsZW5kTW9kZSBmcm9tIFdlYkdMJ3MgcG9pbnQgb2Ygdmlldy5cbiAqXG4gKiBAcGFyYW0gYmxlbmRNb2RlIHtudW1iZXJ9IHRoZSBibGVuZE1vZGUsIHNob3VsZCBiZSBhIFBpeGkgY29uc3QsIHN1Y2ggYXMgYFBJWEkuQkxFTkRfTU9ERVMuQUREYC4gU2VlXG4gKiAge0BsaW5rIFBJWEkuQkxFTkRfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLnNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChibGVuZE1vZGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblxuICAgIHZhciBtb2RlID0gdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuY3VycmVudEJsZW5kTW9kZV07XG4gICAgdGhpcy5yZW5kZXJlci5nbC5ibGVuZEZ1bmMobW9kZVswXSwgbW9kZVsxXSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgUXVhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL1F1YWQnKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXTtcblxuICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgIHJlbmRlclRhcmdldDpyZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LFxuICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgIGJvdW5kczpudWxsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldFtdfVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICAvLyBsaXN0ZW4gZm9yIGNvbnRleHQgYW5kIHVwZGF0ZSBuZWNlc3NhcnkgYnVmZmVyc1xuICAgIC8vVE9ETyBtYWtlIHRoaXMgZHluYW1pYyFcbiAgICAvL1RPRE8gdGVzdCB0aGlzIG91dCBieSBmb3JjZXMgcG93ZXIgb2YgdHdvP1xuICAgIHRoaXMudGV4dHVyZVNpemUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgcmVuZGVyZXIud2lkdGgsIHJlbmRlcmVyLmhlaWdodCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmcmFtZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBudWxsO1xufVxuXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbHRlck1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlck1hbmFnZXI7XG5cblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVQb29sLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucXVhZCA9IG5ldyBRdWFkKGdsKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcGFyYW0gYnVmZmVyIHtBcnJheUJ1ZmZlcn1cbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuc2V0RmlsdGVyU3RhY2sgPSBmdW5jdGlvbiAoIGZpbHRlclN0YWNrIClcbntcbiAgICB0aGlzLmZpbHRlclN0YWNrID0gZmlsdGVyU3RhY2s7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlciBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGZpbHRlcnMge1BJWEkuQWJzdHJhY3RGaWxlcltdfSB0aGUgZmlsdGVycyB0aGF0IHdpbGwgYmUgcHVzaGVkIHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFja1xuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5wdXNoRmlsdGVyID0gZnVuY3Rpb24gKHRhcmdldCwgZmlsdGVycylcbntcbiAgICAvLyBnZXQgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0Li5cbiAgICAvLyBUT0RPIHJlcGxhY2UgY2xvbmUgd2l0aCBhIGNvcHkgdG8gc2F2ZSBvYmplY3QgY3JlYXRpb25cbiAgICB2YXIgYm91bmRzID0gdGFyZ2V0LmZpbHRlckFyZWEgPyB0YXJnZXQuZmlsdGVyQXJlYS5jbG9uZSgpIDogdGFyZ2V0LmdldEJvdW5kcygpO1xuXG4gICAgLy9ib3VuZHMgPSBib3VuZHMuY2xvbmUoKTtcblxuICAgIC8vIHJvdW5kIG9mZiB0aGUgcmVjdGFuZ2xlIHRvIGdldCBhIG5pY2Ugc21vb29vb29vdGggZmlsdGVyIDopXG4gICAgYm91bmRzLnggPSBib3VuZHMueCB8IDA7XG4gICAgYm91bmRzLnkgPSBib3VuZHMueSB8IDA7XG4gICAgYm91bmRzLndpZHRoID0gYm91bmRzLndpZHRoIHwgMDtcbiAgICBib3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCB8IDA7XG5cblxuICAgIC8vIHBhZGRpbmchXG4gICAgdmFyIHBhZGRpbmcgPSBmaWx0ZXJzWzBdLnBhZGRpbmcgfCAwO1xuICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLnkgLT0gcGFkZGluZztcbiAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcblxuXG4gICAgaWYodGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vVE9ETyB0aGlzIHdpbGwgYnJlYWsgaWYgdGhlIHJlbmRlclRleHR1cmUgdHJhbnNmb3JtIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYSB0cmFuc2xhdGlvbi5cbiAgICAgICAgLy9XaWxsIG5lZWQgdG8gdGFrZSB0aGUgZnVsbCBtYXRyaXggdHJhbnNmb3JtIGludG8gYWNvdW50Li5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm07XG5cbiAgICAgICAgYm91bmRzLnggKz0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSArPSB0cmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdGhpcy5jYXBGaWx0ZXJBcmVhKCBib3VuZHMgKTtcblxuICAgICAgICBib3VuZHMueCAtPSB0cmFuc2Zvcm0udHg7XG4gICAgICAgIGJvdW5kcy55IC09IHRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG4gICAgfVxuXG4gICAgaWYoYm91bmRzLndpZHRoID4gMCAmJiBib3VuZHMuaGVpZ2h0ID4gMClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gYm91bmRzO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBjbGVhciB0aGUgdGV4dHVyZS4uXG4gICAgICAgIHRleHR1cmUuY2xlYXIoKTtcblxuICAgICAgICAvLyBUT0RPIGdldCByaWQgb2Ygb2JqZWN0IGNyZWF0aW9uIVxuICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OiB0ZXh0dXJlLFxuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJzXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIHB1c2ggc29tdGhpbmcgb24gdG8gdGhlIHN0YWNrIHRoYXQgaXMgZW1wdHlcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucG9wRmlsdGVyID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2sucG9wKCk7XG4gICAgdmFyIHByZXZpb3VzRmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2tbdGhpcy5maWx0ZXJTdGFjay5sZW5ndGgtMV07XG5cbiAgICB2YXIgaW5wdXQgPSBmaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIGlmIHRoZSByZW5kZXJUYXJnZXQgaXMgbnVsbCB0aGVuIHdlIGRvbid0IGFwcGx5IHRoZSBmaWx0ZXIgYXMgaXRzIG9mZnNjcmVlblxuICAgIGlmKCFmaWx0ZXJEYXRhLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gcHJldmlvdXNGaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIHVzZSBwcm9ncmFtXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpbnB1dC5mcmFtZTtcblxuICAgIHRoaXMucXVhZC5tYXAodGhpcy50ZXh0dXJlU2l6ZSwgaW5wdXQuZnJhbWUpO1xuXG5cbiAgICAvLyBUT0RPLi4gdGhpcyBwcm9iYWJseSBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBmaWx0ZXJzID0gZmlsdGVyRGF0YS5maWx0ZXI7XG5cbiAgICAvLyBhc3N1bWluZyBhbGwgZmlsdGVycyBmb2xsb3cgdGhlIGNvcnJlY3QgZm9ybWF0Pz9cbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgbm9ybWFsIGJsZW5kbW9kZSFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKENPTlNULkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDEpXG4gICAge1xuICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICBpZiAoZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJzWzBdLmFwcGx5RmlsdGVyKCB0aGlzLnJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0ICk7XG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBpbnB1dCApO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBmbGlwVGV4dHVyZSA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcFRleHR1cmUgPSB0aGlzLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGZpbHRlcnNbaV07XG5cbiAgICAgICAgICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSB0aGVuIHNldHRpbmcgdGhpcyBlYWNoIHRpbWU/XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlci5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIGZsb3BUZXh0dXJlICk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gZmxpcFRleHR1cmU7XG4gICAgICAgICAgICBmbGlwVGV4dHVyZSA9IGZsb3BUZXh0dXJlO1xuICAgICAgICAgICAgZmxvcFRleHR1cmUgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aC0xXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIG91dHB1dCApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBmbGlwVGV4dHVyZSApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxvcFRleHR1cmUgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyRGF0YS5maWx0ZXI7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgUmVuZGVyVGFyZ2V0XG4gKiBAcmV0dXJuIHtSZW5kZXJUYXJnZXR9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICggY2xlYXIgKVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSB0aGlzLnRleHR1cmVQb29sLnBvcCgpIHx8IG5ldyBSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJlci5nbCwgdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQsIENPTlNULlNDQUxFX01PREVTLkxJTkVBUiwgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uICogQ09OU1QuRklMVEVSX1JFU09MVVRJT04pO1xuICAgIHJlbmRlclRhcmdldC5mcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJUYXJnZXQ7XG59O1xuXG4vKlxuICogUmV0dXJucyBhIFJlbmRlclRhcmdldCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UmVuZGVyVGFyZ2V0fSBUaGUgUmVuZGVyVGFyZ2V0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnJldHVyblJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5wdXNoKCByZW5kZXJUYXJnZXQgKTtcbn07XG5cbi8qXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBzaGFkZXIge1NoYWRlcn0gVGhlIHNoYWRlciB0byB1cGxvYWRcbiAqIEBwYXJhbSBpbnB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAoc2hhZGVyLCBpbnB1dFRhcmdldCwgb3V0cHV0VGFyZ2V0LCBjbGVhcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQob3V0cHV0VGFyZ2V0KTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIG91dHB1dFRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2hhZGVyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBDYW4gdGhpcyBiZSBjYWNoZWQgYW5kIG5vdCBgdG9BcnJheWBlZCBlYWNoIGZyYW1lP1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcblxuICAgIC8vVE9ETyBjYW4gdGhpcyBiZSBvcHRpbWlzZWQ/XG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuLypcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMiAqIDQgKiA0KTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuKi9cblxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGlucHV0VGFyZ2V0LnRleHR1cmUpO1xuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIG1hcHBlZCBtYXRyaXhcbiAqIEBwYXJhbSBmaWx0ZXJBcmVhIHtSZWN0YW5nbGV9IFRoZSBmaWx0ZXIgYXJlYVxuICogQHBhcmFtIHNwcml0ZSB7U3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICogQHBhcmFtIG91dHB1dE1hdHJpeCB7TWF0cml4fSBAYWx2aW5cbiAqL1xuLy8gVE9ETyBwbGF5aW5nIGFyb3VuZCBoZXJlLi4gdGhpcyBpcyB0ZW1wb3JhcnkgLSAod2lsbCBlbmQgdXAgaW4gdGhlIHNoYWRlcilcbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeCA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhLCBzcHJpdGUsIG91dHB1dE1hdHJpeClcbntcbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBzcHJpdGUud29ybGRUcmFuc2Zvcm0uY29weShtYXRoLk1hdHJpeC5URU1QX01BVFJJWCksXG4gICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIHZhciBtYXBwZWRNYXRyaXggPSBvdXRwdXRNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIC8vIHNjYWxlLi5cbiAgICB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICBtYXBwZWRNYXRyaXgudHJhbnNsYXRlKGZpbHRlckFyZWEueCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIGZpbHRlckFyZWEueSAvIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0ICk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIHJhdGlvKTtcblxuICAgIHZhciB0cmFuc2xhdGVTY2FsZVggPSAodGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAvIHRleHR1cmUud2lkdGgpO1xuICAgIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0ZXh0dXJlLmhlaWdodCk7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS50eCAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuICAgIHdvcmxkVHJhbnNmb3JtLnR5IC89IHRleHR1cmUud2lkdGggKiB0cmFuc2xhdGVTY2FsZVg7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIG1hcHBlZE1hdHJpeC5wcmVwZW5kKHdvcmxkVHJhbnNmb3JtKTtcblxuICAgIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIG1hcHBlZE1hdHJpeC5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShzcHJpdGUuYW5jaG9yLngsIHNwcml0ZS5hbmNob3IueSk7XG5cbiAgICByZXR1cm4gbWFwcGVkTWF0cml4O1xuXG4gICAgLy8gS2VlcGluZyB0aGUgb3JnaW5hbCBhcyBhIHJlbWluZGVyIHRvIG1lIG9uIGhvdyB0aGlzIHdvcmtzIVxuICAgIC8vXG4gICAgLy8gdmFyIG0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuICAgIC8vIC8vIHNjYWxlLi5cbiAgICAvLyB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICAvLyBtLnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCk7XG5cblxuICAgIC8vIG0uc2NhbGUoMSAsIHJhdGlvKTtcblxuXG4gICAgLy8gdmFyIHRyYW5zZm9ybSA9IHd0LmNsb25lKCk7XG5cbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyA2MjApO1xuICAgIC8vIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyAzODApO1xuXG4gICAgLy8gdHJhbnNmb3JtLnR4IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICAvLyB0cmFuc2Zvcm0udHkgLz0gNjIwICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgLy8gdHJhbnNmb3JtLmludmVydCgpO1xuXG4gICAgLy8gdHJhbnNmb3JtLmFwcGVuZChtKTtcblxuICAgIC8vIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIC8vIHRyYW5zZm9ybS5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgLy8gcmV0dXJuIHRyYW5zZm9ybTtcbn07XG5cbi8qXG4gKiBDb25zdHJhaW5zIHRoZSBmaWx0ZXIgYXJlYSB0byB0aGUgdGV4dHVyZSBzaXplXG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWEgd2Ugd2FudCB0byBjYXBcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY2FwRmlsdGVyQXJlYSA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhKVxue1xuICAgIGlmIChmaWx0ZXJBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCArPSBmaWx0ZXJBcmVhLng7XG4gICAgICAgIGZpbHRlckFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlckFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLmhlaWdodCArPSBmaWx0ZXJBcmVhLnk7XG4gICAgICAgIGZpbHRlckFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnggKyBmaWx0ZXJBcmVhLndpZHRoID4gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLndpZHRoID0gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAtIGZpbHRlckFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGZpbHRlckFyZWEueSArIGZpbHRlckFyZWEuaGVpZ2h0ID4gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAtIGZpbHRlckFyZWEueTtcbiAgICB9XG59O1xuXG4vKlxuICogUmVzaXplcyBhbGwgdGhlIHJlbmRlciB0YXJnZXRzIGluIHRoZSBwb29sXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMudGV4dHVyZVNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZVBvb2xbaV0ucmVzaXplKCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgZmlsdGVyIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGZpbHRlciBzdGFjay5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucXVhZC5kZXN0cm95KCk7XG4gICAgXG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG4gICAgXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IG51bGw7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGV4dHVyZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVQb29sID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBBbHBoYU1hc2tGaWx0ZXIgPSByZXF1aXJlKCcuLi9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuc3RlbmNpbFN0YWNrID0gW107XG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ID0gMDtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbCA9IFtdO1xufVxuXG5NYXNrTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFNwcml0ZU1hc2sodGFyZ2V0LCBtYXNrRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IG1hc2sgZnJvbSB0aGUgbWFzayBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIGlmIChtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnBvcFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB2YXIgYWxwaGFNYXNrRmlsdGVyID0gdGhpcy5hbHBoYU1hc2tQb29sLnBvcCgpO1xuXG4gICAgaWYgKCFhbHBoYU1hc2tGaWx0ZXIpXG4gICAge1xuICAgICAgICBhbHBoYU1hc2tGaWx0ZXIgPSBbbmV3IEFscGhhTWFza0ZpbHRlcihtYXNrRGF0YSldO1xuICAgIH1cblxuICAgIGFscGhhTWFza0ZpbHRlclswXS5tYXNrU3ByaXRlID0gbWFza0RhdGE7XG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGFyZ2V0LCBhbHBoYU1hc2tGaWx0ZXIpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBmaWx0ZXJzID0gdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgdGhpcy5hbHBoYU1hc2tQb29sLnB1c2goZmlsdGVycyk7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoTWFzayhtYXNrRGF0YSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcE1hc2sobWFza0RhdGEpO1xufTtcblxuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpLFxuICAgIENvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXInKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTaGFkZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heEF0dGlicyA9IDEwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXhBdHRpYnM7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YWNrID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcblxuLy8gICAgdGhpcy5pbml0UGx1Z2lucygpO1xufVxuXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hbmFnZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oU2hhZGVyTWFuYWdlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyTWFuYWdlcjtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRyaWJ1dGUgY29ycmVjdGx5IGFzIHRoaXMgdGVuZHMgdG8gdmFyeVxuICAgIHRoaXMubWF4QXR0aWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVE9ETyAtIFdoeSBhcmUgdGhlc2Ugbm90IHBsdWdpbnM/IFdlIGNhbid0IGRlY291cGxlIHByaW1pdGl2ZXMgdW5sZXNzIHRoZXkgYXJlLi4uLlxuICAgIHRoaXMuZGVmYXVsdFNoYWRlciA9IG5ldyBUZXh0dXJlU2hhZGVyKHRoaXMpO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBuZXcgQ29tcGxleFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogVGFrZXMgdGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gaW4gcGFyYW1ldGVycyBhbmQgdXBsb2FkcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJzIHthbnlbXX0gYXR0cmlic1xuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRBdHRyaWJzID0gZnVuY3Rpb24gKGF0dHJpYnMpXG57XG4gICAgLy8gcmVzZXQgdGVtcCBzdGF0ZVxuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMudGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yICh2YXIgYSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbYXR0cmlic1thXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYlN0YXRlW2ldICE9PSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgc2hhZGVyLlxuICpcbiAqIEBwYXJhbSBzaGFkZXIge1BJWEkuU2hhZGVyfSB0aGUgc2hhZGVyIHRvIHVwbG9hZFxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKVxue1xuICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5fY3VycmVudElkID09PSBzaGFkZXIudWlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IHNoYWRlci51aWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBzaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmdsLnVzZVByb2dyYW0oc2hhZGVyLnByb2dyYW0pO1xuICAgIHRoaXMuc2V0QXR0cmlicyhzaGFkZXIuYXR0cmlidXRlcyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBvYmplY3QuXG4gKlxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLmRlc3Ryb3koKTtcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBudWxsO1xufTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFza01hbmFnZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG51bGw7XG59XG5cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBtYXNrIHN0YWNrIHRoYXQgaXMgdXNlZCBieSB0aGlzIG1hbmFnZXIuXG4gKlxuICogQHBhcmFtIHN0ZW5jaWxNYXNrU3RhY2sge1BJWEkuU3RlbmNpbE1hc2tTdGFja30gVGhlIG1hc2sgc3RhY2tcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuc2V0TWFza1N0YWNrID0gZnVuY3Rpb24gKCBzdGVuY2lsTWFza1N0YWNrIClcbntcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBzdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIGlmIChzdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suIEBhbHZpblxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hdHRhY2hTdGVuY2lsQnVmZmVyKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBzbXMgPSB0aGlzLnN0ZW5jaWxNYXNrU3RhY2s7XG5cbiAgICB0aGlzLmJpbmRHcmFwaGljcyhncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xuICAgICAgICBzbXMucmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIHNtcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wdXNoKHdlYkdMRGF0YSk7XG5cbiAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgLy8gZHJhdyB0aGUgdHJpYW5nbGUgc3RyaXAhXG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IGEgcXVhZCB0byBpbmNyZW1lbnQuLlxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cbiAgICBzbXMuY291bnQrKztcbn07XG5cbi8qKlxuICogVE9ETyB0aGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIVxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5iaW5kR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICAvL2lmICh0aGlzLl9jdXJyZW50R3JhcGhpY3MgPT09IGdyYXBoaWNzKXJldHVybjtcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGJpbmQgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgdmFyIHNoYWRlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICAvKlxuICAgICAgICBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMuY29sb3IuX2xvY2F0aW9uLCB3ZWJHTERhdGEuY29sb3IpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDIsIDApO1xuXG4gICAgICAgIC8vIG5vdyBkbyB0aGUgcmVzdC4uXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICovXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmFjdGl2YXRlUHJpbWl0aXZlU2hhZGVyKCk7XG4vLyAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnByaW1pdGl2ZVNoYWRlcjtcbiAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cblxuICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4vLyAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG5cbiAgICAgIC8qICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTFmKHNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEpO1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCA0LCBnbC5GTE9BVCwgZmFsc2UsNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTsqL1xuICAgIH1cbn07XG5cbi8qKlxuICogVE9ETyBAYWx2aW5cbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTdGVuY2lsID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wb3AoKTtcblxuICAgIHNtcy5jb3VudC0tO1xuXG4gICAgaWYgKHNtcy5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgLy8gdGhlIHN0YWNrIGlzIGVtcHR5IVxuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICAgICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuXG4gICAgICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSAobGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOVkVSVCk7XG5cbiAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50ICs9IDI7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAvLyAgY29uc29sZS5sb2coXCI8PD4+XCIpXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcblxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCksIDB4RkYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5LRUVQKTtcblxuXG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgbWFzayBzdGFjay5cbiAqXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjayA9IG51bGw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119IFRoZSBtYXNrIGRhdGEgc3RydWN0dXJlIHRvIHVzZVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgXG4gICAgLy9UT0RPIEZJWFxuICAgIGlmIChtYXNrRGF0YS5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy51cGRhdGVHcmFwaGljcyhtYXNrRGF0YSwgdGhpcy5yZW5kZXJlci5nbCk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119XG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuXG4gICAgdGhpcy5wb3BTdGVuY2lsKG1hc2tEYXRhLCBtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YVswXSk7XG59O1xuXG4iLCIvKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gV2ViR0xNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMucmVuZGVyZXIub24oJ2NvbnRleHQnLCB0aGlzLm9uQ29udGV4dENoYW5nZSwgdGhpcyk7XG59XG5cbldlYkdMTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFuYWdlcjtcblxuLyoqXG4gKiBHZW5lcmljIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXHQvLyBkbyBzb21lIGNvZGVzIGluaXQhXG59O1xuXG4vKipcbiAqIEdlbmVyaWMgZGVzdHJveSBtZXRob2RzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICovXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVuZGVyZXIub2ZmKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IGNvbXBsZXggcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBDb21wbGV4UHJpbWl0aXZlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gdmVjNChjb2xvciAqIGFscGhhICogdGludCwgYWxwaGEpOycsLy9cIiAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdGludDogICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwgMCwgMF0gfSxcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgY29sb3I6ICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwwLDBdIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYUNvbG9yOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCYXNlIHNoYWRlciBjbGFzcyBmb3IgUElYSSBtYW5hZ2VkIHNoYWRlcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFt1bmlmb3Jtc10ge29iamVjdH0gVW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxuICogQHBhcmFtIFthdHRyaWJ1dGVzXSB7b2JqZWN0fSBBdHRyaWJ1dGVzIGZvciB0aGlzIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKVxue1xuICAgIGlmICghdmVydGV4U3JjIHx8ICFmcmFnbWVudFNyYylcbiAgICB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpeGkuanMgRXJyb3IuIFNoYWRlciByZXF1aXJlcyB2ZXJ0ZXhTcmMgYW5kIGZyYWdtZW50U3JjJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmdsID0gc2hhZGVyTWFuYWdlci5yZW5kZXJlci5nbDtcblxuICAgIC8vVE9ETyBtYXliZSB3ZSBzaG91bGQgcGFzcyByZW5kZXJlciByYXRoZXIgdGhhbiBzaGFkZXIgbWFuZ2VyPz8gZm9vZCBmb3IgdGhvdWdodC4uXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyID0gc2hhZGVyTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBwcm9ncmFtLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xQcm9ncmFtfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF0dHJpYnV0ZXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRleHR1cmUgY291bnRlclxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYztcblxuICAgIHRoaXMuaW5pdCgpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc2hhZGVyIGFuZCB1c2VzIGl0XG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29tcGlsZSgpO1xuXG4gICAgdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLnVuaWZvcm1zKSk7XG4gICAgdGhpcy5jYWNoZUF0dHJpYnV0ZUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpKTtcbn07XG5cbi8qKlxuICogQ2FjaGVzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHVuaWZvcm0gZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSB1bmlmb3JtcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyA9IGZ1bmN0aW9uIChrZXlzKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMudW5pZm9ybXNba2V5c1tpXV0uX2xvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBrZXlzW2ldKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSBhdHRyaWJ1dGVzIHRvIGNhY2hlXG4gKi9cblNoYWRlci5wcm90b3R5cGUuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNba2V5c1tpXV0gPSB0aGlzLmdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4uLlxuXG4gICAgLy8gQmVnaW4gd29yc3QgaGFjayBldmEgLy9cblxuICAgIC8vIFdIWT8/PyBPTkxZIG9uIG15IGNocm9tZSBwaXhlbCB0aGUgbGluZSBhYm92ZSByZXR1cm5zIC0xIHdoZW4gdXNpbmcgZmlsdGVycz9cbiAgICAvLyBtYXliZSBpdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdsIGNvbnRleHQuXG4gICAgLy8gSSdtIGNvbnZpbmNlZCB0aGlzIGlzIGEgYnVnIGluIHRoZSBjaHJvbWUgYnJvd3NlciBhcyB0aGVyZSBpcyBOTyByZWFzb24gd2h5IHRoaXMgc2hvdWxkIGJlIHJldHVybmluZyAtMSBlc3BlY2lhbGx5IGFzIGl0IG9ubHkgbWFuaWZlc3RzIG9uIG15IGNocm9tZSBwaXhlbFxuICAgIC8vIElmIHRoZXJlcyBhbnkgd2ViR0wgcGVvcGxlIHRoYXQga25vdyB3aHkgY291bGQgaGFwcGVuIHBsZWFzZSBoZWxwIDopXG4gICAgLy8gaWYgKHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPT09IC0xKXtcbiAgICAvLyAgICAgdGhpcy5hdHRyaWJ1dGVzLmFDb2xvciA9IDI7XG4gICAgLy8gfVxuXG4gICAgLy8gRW5kIHdvcnN0IGhhY2sgZXZhIC8vXG59O1xuXG4vKipcbiAqIEF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZCBjcmVhdGVzIHRoZSBwcm9ncmFtLlxuICpcbiAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX1cbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIGdsVmVydFNoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5WRVJURVhfU0hBREVSLCB0aGlzLnZlcnRleFNyYyk7XG4gICAgdmFyIGdsRnJhZ1NoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuZnJhZ21lbnRTcmMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xGcmFnU2hhZGVyKTtcbiAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcblxuICAgIC8vIGlmIGxpbmtpbmcgZmFpbHMsIHRoZW4gbG9nIGFuZCBjbGVhbnVwXG4gICAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BpeGkuanMgRXJyb3I6IENvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlci4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuVkFMSURBVEVfU1RBVFVTJywgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuZ2V0RXJyb3IoKScsIGdsLmdldEVycm9yKCkpO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcHJvZ3JhbSBpbmZvIGxvZywgbG9nIGl0XG4gICAgICAgIGlmIChnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSAhPT0gJycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBXYXJuaW5nOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpJywgZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgcHJvZ3JhbSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgc29tZSBzaGFkZXJzXG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsVmVydFNoYWRlcik7XG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsRnJhZ1NoYWRlcik7XG5cbiAgICByZXR1cm4gKHRoaXMucHJvZ3JhbSA9IHByb2dyYW0pO1xufTtcblxuLyoqXG4qIEFkZHMgYSBuZXcgdW5pZm9ybVxuKlxuKiBAcGFyYW0gdW5pZm9ybSB7b2JqZWN0fSB0aGUgbmV3IHVuaWZvcm0gdG8gYXR0YWNoXG4qL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBsb2NhdGlvbiA9IHVuaWZvcm0uX2xvY2F0aW9uLFxuICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWUsXG4gICAgICAgIGdsID0gdGhpcy5nbCxcbiAgICAgICAgaSwgaWw7XG5cbiAgICBzd2l0Y2ggKHVuaWZvcm0udHlwZSlcbiAgICB7XG4gICAgICAgIGNhc2UgJ2InOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlID8gMSA6IDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGludCB2YWx1ZVxuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBzaW5nbGUgZmxvYXQgdmFsdWVcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDIpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoMykgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoNCkgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzRmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSAyRCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjInOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgM0QgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YzJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDREIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2NCc6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzFmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzRmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTInOlxuICAgICAgICBjYXNlICdtYXQyJzpcbiAgICAgICAgY2FzZSAnTWF0cml4MmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICBjYXNlICdtYXQzJzpcbiAgICAgICAgY2FzZSAnTWF0cml4M2Z2JzpcblxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICdtNCc6XG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICBjYXNlICdNYXRyaXg0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgQ29sb3IgVmFsdWVcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGludGVnZXJzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIChKUyBvciB0eXBlZCBhcnJheSlcbiAgICAgICAgY2FzZSAnZnYxJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDJEIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjJ2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDIgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDJdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMiArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAzRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yzdic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgzICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMyArIDJdICAgPSB2YWx1ZVtpXS56O1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHVuaWZvcm0uX2FycmF5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDREIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjR2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDRdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgMl0gICA9IHZhbHVlW2ldLno7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAzXSAgID0gdmFsdWVbaV0udztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBQSVhJLlRleHR1cmVcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgIGNhc2UgJ3NhbXBsZXIyRCc6XG5cbiAgICAgICAgICAgIGlmICghdW5pZm9ybS52YWx1ZSB8fCAhdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFjdGl2YXRlIHRoaXMgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0aGlzLnRleHR1cmVDb3VudF0pO1xuXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgICAgICAgICBpZiAoIXRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2FtcGxlcjJEKHVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSB0ZXh0dXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb25lLi5cbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gICAgICAgICAgICAvLyBzZXQgdW5pZm9ybSB0byB0ZXh0dXJlIGluZGV4XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkodW5pZm9ybS5fbG9jYXRpb24sIHRoaXMudGV4dHVyZUNvdW50KTtcblxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IG5leHQgdGV4dHVyZSBpZFxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBTaGFkZXIgV2FybmluZzogVW5rbm93biB1bmlmb3JtIHR5cGU6ICcgKyB1bmlmb3JtLnR5cGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnVuaWZvcm1zKVxuICAgIHtcbiAgICAgICAgdGhpcy5zeW5jVW5pZm9ybSh0aGlzLnVuaWZvcm1zW2tleV0pO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJbml0aWFsaXNlcyBhIFNhbXBsZXIyRCB1bmlmb3JtICh3aGljaCBtYXkgb25seSBiZSBhdmFpbGFibGUgbGF0ZXIgb24gYWZ0ZXIgaW5pdFVuaWZvcm1zIG9uY2UgdGhlIHRleHR1cmUgaGFzIGxvYWRlZClcbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuaW5pdFNhbXBsZXIyRCA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGlmICh1bmlmb3JtLnRleHR1cmVEYXRhKVxuICAgIHtcblxuICAgICAgICAvL1RPRE8gbW92ZSB0aGlzLi4uXG4gICAgICAgIHZhciBkYXRhID0gdW5pZm9ybS50ZXh0dXJlRGF0YTtcblxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG5cbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGxpZWRBbHBoYSk7XG4gICAgICAgIC8vIEdMVGV4dHVyZSA9IG1hZyBsaW5lYXIsIG1pbiBsaW5lYXJfbWlwbWFwX2xpbmVhciwgd3JhcCByZXBlYXQgKyBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgLy8gR0xUZXh0dXJlTGluZWFyID0gbWFnL21pbiBsaW5lYXIsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdFJlcGVhdCA9IG1hZy9taW4gTkVBUkVTVCwgd3JhcCByZXBlYXRcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdCA9IG1hZy9taW4gbmVhcmVzdCwgd3JhcCBjbGFtcFxuICAgICAgICAvLyBBdWRpb1RleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDUxMiwgaGVpZ2h0IDIsIGJvcmRlciAwXG4gICAgICAgIC8vIEtleVRleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDI1NiwgaGVpZ2h0IDIsIGJvcmRlciAwXG5cbiAgICAgICAgLy8gIG1hZ0ZpbHRlciBjYW4gYmU6IGdsLkxJTkVBUiwgZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgb3IgZ2wuTkVBUkVTVFxuICAgICAgICAvLyAgd3JhcFMvVCBjYW4gYmU6IGdsLkNMQU1QX1RPX0VER0Ugb3IgZ2wuUkVQRUFUXG5cbiAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBkYXRhLmx1bWluYW5jZSA/IGdsLkxVTUlOQU5DRSA6IGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRleHR1cmUuc291cmNlKTtcblxuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZGF0YS5tYWdGaWx0ZXIgPyBkYXRhLm1hZ0ZpbHRlciA6IGdsLkxJTkVBUiApO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFICk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZGF0YS53cmFwVCA/IGRhdGEud3JhcFQgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5zaGFkZXJNYW5hZ2VyLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgc2hhZGVyLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmdsLmRlbGV0ZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgIHRoaXMudW5pZm9ybXMgPSBudWxsO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleFNyYyA9IG51bGw7XG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IG51bGw7XG59O1xuXG5TaGFkZXIucHJvdG90eXBlLl9nbENvbXBpbGUgPSBmdW5jdGlvbiAodHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIHRoaXMuZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc3JjKTtcbiAgICB0aGlzLmdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghdGhpcy5nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCB0aGlzLmdsLkNPTVBJTEVfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIGN1c3RvbVVuaWZvcm1zLCBjdXN0b21BdHRyaWJ1dGVzKVxue1xuICAgIHZhciB1bmlmb3JtcyA9IHtcblxuICAgICAgICB1U2FtcGxlcjogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiAwIH0sXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6ICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDFdKSB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21Vbmlmb3JtcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIHUgaW4gY3VzdG9tVW5pZm9ybXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVuaWZvcm1zW3VdID0gY3VzdG9tVW5pZm9ybXNbdV07XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBhVmVydGV4UG9zaXRpb246ICAgIDAsXG4gICAgICAgIGFUZXh0dXJlQ29vcmQ6ICAgICAgMCxcbiAgICAgICAgYUNvbG9yOiAgICAgICAgICAgICAwXG4gICAgfTtcblxuICAgIGlmIChjdXN0b21BdHRyaWJ1dGVzKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgYSBpbiBjdXN0b21BdHRyaWJ1dGVzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2FdID0gY3VzdG9tQXR0cmlidXRlc1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IHZlcnRleFNyYyB8fCBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcyk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKGdsKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IFRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgZnJhZ21lbnRTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYztcblxuICAgIFNoYWRlci5jYWxsKHRoaXMsIGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTsvLywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xuXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuLi9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBCYXNlIGZvciBhIGNvbW1vbiBvYmplY3QgcmVuZGVyZXIgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHN5c3RlbSByZW5kZXJlciBwbHVnaW4uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBPYmplY3RSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59XG5cblxuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9iamVjdFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RSZW5kZXJlcjtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHJlbmRlcmVyIGFuZCBzZXRzIHRoZSBzaGFkZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gc2V0IHRoZSBzaGFkZXIuLlxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgcmVuZGVyZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIGZsdXNoZXNcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gZmx1c2ghXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyByZW5kZXIgdGhlIG9iamVjdFxufTtcbiIsIi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHF1YWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gVGhlIGdsIGNvbnRleHQgZm9yIHRoaXMgcXVhZCB0byB1c2UuXG4gKi9cbmZ1bmN0aW9uIFF1YWQoZ2wpXG57XG4gICAgLypcbiAgICAgKiB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbi8vICAgIHRoaXMudGV4dHVyZXMgPSBuZXcgVGV4dHVyZVV2cygpO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMjAwLDAsXG4gICAgICAgIDIwMCwyMDAsXG4gICAgICAgIDAsMjAwXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBxdWFkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KFtcbiAgICAgICAgMCwwLFxuICAgICAgICAxLDAsXG4gICAgICAgIDEsMSxcbiAgICAgICAgMCwxXG4gICAgXSk7XG5cbi8vICAgIHZhciB3aGl0ZSA9ICgweEZGRkZGRiA+PiAxNikgKyAoMHhGRkZGRkYgJiAweGZmMDApICsgKCgweEZGRkZGRiAmIDB4ZmYpIDw8IDE2KSArICgxICogMjU1IDw8IDI0KTtcbiAgICAvL1RPRE8gY29udmVydCB0aGlzIHRvIGEgMzIgdW5zaWduZWQgaW50IGFycmF5XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIGNvbXBvbmVudHMgb2YgdGhlIHRyaWFuZ2xlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDFcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KFtcbiAgICAgICAgMCwgMSwgMiwgMCwgMywgMlxuICAgIF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIHZlcnRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICg4ICsgOCArIDE2KSAqIDQsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59XG5cblF1YWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUXVhZDtcblxuLyoqXG4gKiBNYXBzIHR3byBSZWN0YW5nbGUgdG8gdGhlIHF1YWRcbiAqIEBwYXJhbSByZWN0IHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZpcnN0IHJlY3RhbmdsZVxuICogQHBhcmFtIHJlY3QyIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHNlY29uZCByZWN0YW5nbGVcbiAqL1xuUXVhZC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24ocmVjdCwgcmVjdDIpXG57XG4gICAgdmFyIHggPSAwOyAvL3JlY3QyLnggLyByZWN0LndpZHRoO1xuICAgIHZhciB5ID0gMDsgLy9yZWN0Mi55IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1swXSA9IHg7XG4gICAgdGhpcy51dnNbMV0gPSB5O1xuXG4gICAgdGhpcy51dnNbMl0gPSB4ICsgcmVjdDIud2lkdGggLyByZWN0LndpZHRoO1xuICAgIHRoaXMudXZzWzNdID0geTtcblxuICAgIHRoaXMudXZzWzRdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIHRoaXMudXZzWzZdID0geDtcbiAgICB0aGlzLnV2c1s3XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIC8vLyAtLS0tLVxuICAgIHggPSByZWN0Mi54O1xuICAgIHkgPSByZWN0Mi55O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1swXSA9IHg7XG4gICAgdGhpcy52ZXJ0aWNlc1sxXSA9IHk7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzJdID0geCArIHJlY3QyLndpZHRoO1xuICAgIHRoaXMudmVydGljZXNbM10gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1s0XSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzVdID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudmVydGljZXNbNl0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0O1xuXG4gICAgdGhpcy51cGxvYWQoKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlciBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5RdWFkLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIFRPRE8gY291bGQgcHJvYmFibHkgYmUgcHVzaGVkIGludG8gb25lIHVwbG9hZCFcbiAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHRoaXMudmVydGV4QnVmZmVyICk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy52ZXJ0aWNlcyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgOCAqIDQsIHRoaXMudXZzKTtcblxuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDgpICogNCwgdGhpcy5jb2xvcnMpO1xufTtcblxuUXVhZC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWQ7XG5cblxuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKSxcbiAgICAgICAgXG4gICAgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuICAgIEdMRnJhbWVidWZmZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTEZyYW1lYnVmZmVyLFxuICAgIFxuICAgIFN0ZW5jaWxNYXNrU3RhY2sgPSByZXF1aXJlKCcuL1N0ZW5jaWxNYXNrU3RhY2snKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqL1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgaG9yaXpvbnRhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSB2ZXJ0aWNhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICogQHBhcmFtIHJvb3Qge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAqL1xudmFyIFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24sIHJvb3QpXG57XG4gICAgLy9UT0RPIFJlc29sdXRpb24gY291bGQgZ28gaGVyZSAoIGVnIGxvdyByZXMgYmx1cnMgKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vIG5leHQgdGltZSB0byBjcmVhdGUgYSBmcmFtZSBidWZmZXIgYW5kIHRleHR1cmVcblxuICAgIC8qKlxuICAgICAqIEEgZnJhbWUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEZyYW1lQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuXG4gICAgdGhpcy5jbGVhckNvbG9yID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIG9iamVjdCBhcyBhIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2JqZWN0J3MgdHJhbnNmb3JtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk1hdHJpeH1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lID0gbnVsbDtcbiAgICBcbiAgICB0aGlzLmRlZmF1bHRGcmFtZSA9IG5ldyBQSVhJLlJlY3RhbmdsZSgpO1xuICAgIHRoaXMuZGVzdGluYXRpb25GcmFtZSA9IG51bGw7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgc3RvcmVzIG1hc2tpbmcgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbEJ1ZmZlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzdGVuY2lsIG1hc2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gbmV3IFN0ZW5jaWxNYXNrU3RhY2soKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyBmaWx0ZXIgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDp0aGlzLFxuICAgICAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICAgICAgYm91bmRzOnRoaXMuc2l6ZVxuICAgICAgICB9XG4gICAgXTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEEgZnJhbWUgYnVmZmVyIG5lZWRzIGEgdGFyZ2V0IHRvIHJlbmRlciB0by4uXG4gICAgICAgICAgICBjcmVhdGUgYSB0ZXh0dXJlIGFuZCBiaW5kIGl0IGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAgICAgKi9cbiAgICAgICAgXG5cbiAgICAgICAvLyBUT0RPIGNoYW5nZSFcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGJ5IHRoZSBiYXNlIHRleHR1cmVcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGhpcy5mcmFtZUJ1ZmZlci50ZXh0dXJlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBtYWtlIGl0IGEgbnVsbCBmcmFtZWJ1ZmZlci4uXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZnJhbWVidWZmZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xufTtcblxuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRhcmdldDtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGFyZ2V0O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZmlsdGVyIHRleHR1cmUuXG4gKlxuICogQHBhcmFtIFtiaW5kPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIHdlIGJpbmQgb3VyIGZyYW1lYnVmZmVyIGJlZm9yZSBjbGVhcmluZz9cbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGNsZWFyQ29sb3IpXG57XG4gICAgdmFyIGNjID0gY2xlYXJDb2xvciB8fCB0aGlzLmNsZWFyQ29sb3JcbiAgICB0aGlzLmZyYW1lQnVmZmVyLmNsZWFyKGNjWzBdLGNjWzFdLGNjWzJdLGNjWzNdKS8vcixnLGIsYSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuYXR0YWNoU3RlbmNpbEJ1ZmZlciA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPRE8gY2hlY2sgaWYgc3RlbmNpbCBpcyBkb25lP1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBpcyB1c2VkIGZvciBtYXNraW5nIGluIHBpeGlcbiAgICAgKiBsZXRzIGNyZWF0ZSBvbmUgYW5kIHRoZW4gYWRkIGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVTdGVuY2lsKCk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCBpbml0aWFsaXNlcyB0aGUgdmlld3BvcnQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oZGVzdGluYXRpb25GcmFtZSwgc291cmNlRnJhbWUpXG57XG4gICAgLy9UT09EIHJlZmFjdG9yIHVzYWdlIG9mIGZyYW1lLi5cbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5iaW5kKCk7XG5cbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBkZXN0aW5hdGlvbkZyYW1lIHx8IHRoaXMuZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlZmF1bHRGcmFtZTtcbiAgICB0aGlzLnNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgdGhpcy5zb3VyY2VGcmFtZSB8fCBkZXN0aW5hdGlvbkZyYW1lO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUsIHRoaXMuc291cmNlRnJhbWUgKTtcblxuICAgIGlmKHRoaXMudHJhbnNmb3JtKVxuICAgIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFwcGVuZCh0aGlzLnRyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5kZXN0aW5hdGlvbkZyYW1lICE9PSB0aGlzLnNvdXJjZUZyYW1lKVxuICAgIHtcbiAgICAgICAgZ2wuZW5hYmxlKGdsLlNDSVNTT1JfVEVTVCk7XG4gICAgICAgIGdsLnNjaXNzb3IodGhpcy5kZXN0aW5hdGlvbkZyYW1lLngsIHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGgqIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgIH1cblxuXG4gICAgLy8gVE9ETyAtIGRvZXMgbm90IG5lZWQgdG8gYmUgdXBkYXRlZCBhbGwgdGhlIHRpbWU/P1xuICAgIGdsLnZpZXdwb3J0KHRoaXMuZGVzdGluYXRpb25GcmFtZS54LHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuXG5cbn07XG5cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBwcm9qZWN0aW9uIG1hdHJpeCBiYXNlZCBvbiBhIHByb2plY3Rpb24gZnJhbWUgKHdoaWNoIGlzIGEgcmVjdGFuZ2xlKVxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jYWxjdWxhdGVQcm9qZWN0aW9uID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcblxuICAgIHNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHBtLmlkZW50aXR5KCk7XG5cbiAgICAvLyBUT0RPOiBtYWtlIGRlc3Qgc2NhbGUgc291cmNlXG4gICAgaWYgKCF0aGlzLnJvb3QpXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBzb3VyY2VGcmFtZS54ICogcG0uYTtcbiAgICAgICAgcG0udHkgPSAtMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IC0xIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBSZXNpemVzIHRoZSB0ZXh0dXJlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7TnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gaGVpZ2h0IHtOdW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgd2lkdGggPSB3aWR0aCB8IDA7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDtcblxuICAgIGlmICh0aGlzLnNpemUud2lkdGggPT09IHdpZHRoICYmIHRoaXMuc2l6ZS5oZWlnaHQgPT09IGhlaWdodCkgXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZGVmYXVsdEZyYW1lLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5kZWZhdWx0RnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5yZXNpemUod2lkdGggKiB0aGlzLnJlc29sdXRpb24sIGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCBwcm9qZWN0aW9uRnJhbWUgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHJlbmRlciB0YXJnZXQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFN0ZW5jaWxNYXNrU3RhY2soKVxue1xuXHQvKipcbiAgICAgKiBUaGUgYWN0dWFsIHN0YWNrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVE9ETyBAYWx2aW5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvdW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb3VudCA9IDA7XG59XG5cblN0ZW5jaWxNYXNrU3RhY2sucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RlbmNpbE1hc2tTdGFjaztcbm1vZHVsZS5leHBvcnRzID0gU3RlbmNpbE1hc2tTdGFjaztcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBNYXBzIGdsIGJsZW5kIGNvbWJpbmF0aW9ucyB0byBXZWJHTFxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcbiAgICBvYmplY3QgPSBvYmplY3QgfHwge307XG5cbiAgICAvL1RPRE8gLSBwcmVtdWx0aXBseSBhbHBoYSB3b3VsZCBiZSBkaWZmZXJlbnQuXG4gICAgLy9hZGQgYSBib29sZWFuIGZvciB0aGF0IVxuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdICAgICAgICA9IFtnbC5PTkUsICAgICAgIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLkRTVF9BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk1VTFRJUExZXSAgICAgID0gW2dsLkRTVF9DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gW2dsLlNSQ19BTFBIQSwgZ2wuT05FXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VdICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSFVFXSAgICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcblxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpO1xuIiwiQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbCwgb2JqZWN0KVxue1xuXHRvYmplY3Q9IG9iamVjdCB8fCB7fTtcblxuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlBPSU5UU10gICAgICAgICA9IGdsLlBPSU5UUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FU10gICAgICAgICAgPSBnbC5MSU5FUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FX0xPT1BdICAgICAgPSBnbC5MSU5FX0xPT1A7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9TVFJJUF0gICAgID0gZ2wuTElORV9TVFJJUDtcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5UUklBTkdMRVNdICAgICAgPSBnbC5UUklBTkdMRVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBdID0gZ2wuVFJJQU5HTEVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXSAgID0gZ2wuVFJJQU5HTEVfRkFOO1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGk7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIFNwcml0ZSBvYmplY3QgaXMgdGhlIGJhc2UgZm9yIGFsbCB0ZXh0dXJlZCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIHRvIHRoZSBzY3JlZW5cbiAqXG4gKiBBIHNwcml0ZSBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGFuIGltYWdlIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSBmb3IgdGhpcyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gU3ByaXRlKHRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW5jaG9yIHNldHMgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLDAgdGhpcyBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMC41LDAuNSBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyBjZW50ZXJlZFxuICAgICAqIFNldHRpbmcgdGhlIGFuY2hvciB0byAxLDEgd291bGQgbWVhbiB0aGUgdGV4dHVyZSdzIG9yaWdpbiBwb2ludCB3aWxsIGJlIHRoZSBib3R0b20gcmlnaHQgY29ybmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuYW5jaG9yID0gbmV3IG1hdGguUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgc3ByaXRlICh0aGlzIGlzIGluaXRpYWxseSBzZXQgYnkgdGhlIHRleHR1cmUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBIHZhbHVlIG9mIDB4RkZGRkZGIHdpbGwgcmVtb3ZlIGFueSB0aW50IGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaGFkZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBzcHJpdGUuIFNldCB0byBudWxsIHRvIHJlbW92ZSBhIGN1cnJlbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5BYnN0cmFjdEZpbHRlcnxQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBjYWNoZWQgdmFsdWUgb2YgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8vIGNhbGwgdGV4dHVyZSBzZXR0ZXJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG4gICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlXG4gICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy52ZXJ0ZXhEYXRhID0gbmV3IEZsb2F0MzJBcnJheSg4KTtcbn1cblxuLy8gY29uc3RydWN0b3JcblNwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuc2NhbGUueCkgKiB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBNYXRoLmFicyh0aGlzLnNjYWxlLnkpICogdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc2lnbiA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS55KSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gc2lnbiAqIHZhbHVlIC8gdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5TcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIHNvIGlmIF93aWR0aCBpcyAwIHRoZW4gd2lkdGggd2FzIG5vdCBzZXQuLlxuICAgIGlmICh0aGlzLl93aWR0aClcbiAgICB7XG4gICAgICAgIHRoaXMuc2NhbGUueCA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS54KSAqIHRoaXMuX3dpZHRoIC8gdGhpcy50ZXh0dXJlLmZyYW1lLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnkgPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgKiB0aGlzLl9oZWlnaHQgLyB0aGlzLnRleHR1cmUuZnJhbWUuaGVpZ2h0O1xuICAgIH1cbn07XG5cblNwcml0ZS5wcm90b3R5cGUuY2FjbHVsYXRlVmVydGljZXMgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICB3dCA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICBhID0gd3QuYSwgYiA9IHd0LmIsIGMgPSB3dC5jLCBkID0gd3QuZCwgdHggPSB3dC50eCwgdHkgPSB3dC50eSxcbiAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDEsXG4gICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG4gICAgICAgIFxuICAgIGlmICh0cmltKVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkIGFuZCBpcyBub3QgYSB0aWxpbmdzcHJpdGUgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgIHcxID0gdHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgaDEgPSB0cmltLnkgLSB0aGlzLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgIGgwID0gaDEgKyB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG4gICAgfVxuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzBdID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVsxXSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzJdID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVszXSA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs0XSA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbNV0gPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs2XSA9IGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbN10gPSBkICogaDAgKyBiICogdzEgKyB0eTtcblxuXG59XG5cbi8qKlxuKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMudGV4dHVyZURpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMudmVydGV4RGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICB9XG4gICAgXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBTcHJpdGUgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgc3ByaXRlXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG4gICAgICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudmVydGV4RGlydHkgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWluWCxcbiAgICAgICAgICAgIG1heFgsXG4gICAgICAgICAgICBtaW5ZLFxuICAgICAgICAgICAgbWF4WSxcbiAgICAgICAgICAgIHZlcnRleERhdGEgPSB0aGlzLnZlcnRleERhdGE7XG5cbiAgICAgICAgdmFyIHgxID0gdmVydGV4RGF0YVswXVxuICAgICAgICB2YXIgeTEgPSB2ZXJ0ZXhEYXRhWzFdXG5cbiAgICAgICAgdmFyIHgyID0gdmVydGV4RGF0YVsyXVxuICAgICAgICB2YXIgeTIgPSB2ZXJ0ZXhEYXRhWzNdXG5cbiAgICAgICAgdmFyIHgzID0gdmVydGV4RGF0YVs0XVxuICAgICAgICB2YXIgeTMgPSB2ZXJ0ZXhEYXRhWzVdXG5cbiAgICAgICAgdmFyIHg0ID0gdmVydGV4RGF0YVs2XVxuICAgICAgICB2YXIgeTQgPSB2ZXJ0ZXhEYXRhWzddXG5cbiAgICAgICAgbWluWCA9IHgxO1xuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MTtcbiAgICAgICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICAgICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICAgICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgICAgICBtYXhYID0geDE7XG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkxO1xuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIC8vIGNoZWNrIGZvciBjaGlsZHJlblxuICAgICAgICBpZih0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkQm91bmRzID0gdGhpcy5jb250YWluZXJHZXRCb3VuZHMoKTtcblxuICAgICAgICAgICAgdzAgPSBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgdzEgPSBjaGlsZEJvdW5kcy54ICsgY2hpbGRCb3VuZHMud2lkdGg7XG4gICAgICAgICAgICBoMCA9IGNoaWxkQm91bmRzLnk7XG4gICAgICAgICAgICBoMSA9IGNoaWxkQm91bmRzLnkgKyBjaGlsZEJvdW5kcy5oZWlnaHQ7XG5cbiAgICAgICAgICAgIG1pblggPSAobWluWCA8IHcwKSA/IG1pblggOiB3MDtcbiAgICAgICAgICAgIG1pblkgPSAobWluWSA8IGgwKSA/IG1pblkgOiBoMDtcblxuICAgICAgICAgICAgbWF4WCA9IChtYXhYID4gdzEpID8gbWF4WCA6IHcxO1xuICAgICAgICAgICAgbWF4WSA9IChtYXhZID4gaDEpID8gbWF4WSA6IGgxO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2JvdW5kcy54ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB0aGlzLl9ib3VuZHMueSA9IC10aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRoaXMuX2JvdW5kcy5oZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgcmV0dXJuIHRoaXMuX2JvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHNwcml0ZVxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5TcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy50ZXh0dXJlLmNyb3Aud2lkdGggPD0gMCB8fCB0aGlzLnRleHR1cmUuY3JvcC5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyAgSWdub3JlIG51bGwgc291cmNlc1xuICAgIGlmICh0aGlzLnRleHR1cmUudmFsaWQpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgICAgICB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgICAgICBkeCxcbiAgICAgICAgICAgIGR5LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ7XG5cbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgICAgICAvLyBJZiBzbW9vdGhpbmdFbmFibGVkIGlzIHN1cHBvcnRlZCBhbmQgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIHNtb290aGluZyBwcm9wZXJ0eSBmb3IgdGhpcyB0ZXh0dXJlXG4gICAgICAgIHZhciBzbW9vdGhpbmdFbmFibGVkID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5zY2FsZU1vZGUgPT09IENPTlNULlNDQUxFX01PREVTLkxJTkVBUjtcbiAgICAgICAgaWYgKHJlbmRlcmVyLnNtb290aFByb3BlcnR5ICYmIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldICE9PSBzbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0W3JlbmRlcmVyLnNtb290aFByb3BlcnR5XSA9IHNtb290aGluZ0VuYWJsZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgdGV4dHVyZSBpcyB0cmltbWVkIHdlIG9mZnNldCBieSB0aGUgdHJpbSB4L3ksIG90aGVyd2lzZSB3ZSB1c2UgdGhlIGZyYW1lIGRpbWVuc2lvbnNcblxuICAgICAgICBpZih0ZXh0dXJlLnJvdGF0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2lkdGggPSB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBkeCA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgXG4gICAgICAgICAgICBkeCArPSB3aWR0aDtcblxuICAgICAgICAgICAgd3QudHggPSBkeSAqIHd0LmEgKyBkeCAqIHd0LmMgKyB3dC50eDtcbiAgICAgICAgICAgIHd0LnR5ID0gZHkgKiB3dC5iICsgZHggKiB3dC5kICsgd3QudHk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gd3QuYTtcbiAgICAgICAgICAgIHd0LmEgID0gLXd0LmM7XG4gICAgICAgICAgICB3dC5jICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICB0ZW1wID0gd3QuYjtcbiAgICAgICAgICAgIHd0LmIgID0gLXd0LmQ7XG4gICAgICAgICAgICB3dC5kICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICAvLyB0aGUgYW5jaG9yIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCBhYm92ZSwgc28gbGV0cyBzZXQgaXQgdG8gemVyb1xuICAgICAgICAgICAgZHggPSAwO1xuICAgICAgICAgICAgZHkgPSAwO1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC53aWR0aDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0ZXh0dXJlLnRyaW0ud2lkdGggOiB0aGlzLmFuY2hvci54ICogLXRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRleHR1cmUudHJpbS5oZWlnaHQgOiB0aGlzLmFuY2hvci55ICogLXRleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfVxuXG5cblxuICAgICAgICAvLyBBbGxvdyBmb3IgcGl4ZWwgcm91bmRpbmdcbiAgICAgICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB3dC5hLFxuICAgICAgICAgICAgICAgIHd0LmIsXG4gICAgICAgICAgICAgICAgd3QuYyxcbiAgICAgICAgICAgICAgICB3dC5kLFxuICAgICAgICAgICAgICAgICh3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMCxcbiAgICAgICAgICAgICAgICAod3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uKSB8IDBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGR4ID0gZHggfCAwO1xuICAgICAgICAgICAgZHkgPSBkeSB8IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgd3QudHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHd0LnR5ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcblxuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIC8vIFRPRE8gY2xlYW4gdXAgY2FjaGluZyAtIGhvdyB0byBjbGVhbiB1cCB0aGUgY2FjaGVzP1xuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC54ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmNyb3AueSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeSAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHNwcml0ZSBhbmQgb3B0aW9uYWxseSBpdHMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBbZGVzdHJveVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgY3VycmVudCB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICovXG5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveVRleHR1cmUsIGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYW5jaG9yID0gbnVsbDtcblxuICAgIGlmIChkZXN0cm95VGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUuZGVzdHJveShkZXN0cm95QmFzZVRleHR1cmUpO1xuICAgIH1cblxuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn07XG5cbi8vIHNvbWUgaGVscGVyIGZ1bmN0aW9ucy4uXG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgY3Jvc3Mtb3JpZ2luIHBhcmFtZXRlclxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBzY2FsZSBtb2RlLCBzZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGZyYW1lSWRcbiAqL1xuU3ByaXRlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTcHJpdGUodGV4dHVyZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGJhc2VkIG9uIGFuIGltYWdlIHVybFxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZUlkIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblNwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFNwcml0ZShUZXh0dXJlLmZyb21JbWFnZShpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSk7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyJyksXG4gICAgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzJyksXG4gICAgZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIGdsQ29yZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFNwcml0ZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9TcHJpdGVSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKiBSZW5kZXJlciBkZWRpY2F0ZWQgdG8gZHJhd2luZyBhbmQgYmF0Y2hpbmcgc3ByaXRlcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZVJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIHZhbHVlcyBzZW50IGluIHRoZSB2ZXJ0ZXggYnVmZmVyLlxuICAgICAqIHBvc2l0aW9uWCwgcG9zaXRpb25ZLCBjb2xvclIsIGNvbG9yRywgY29sb3JCID0gNVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydFNpemUgPSA1O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIHZlcnRleCBpbmZvcm1hdGlvbiBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBpbWFnZXMgaW4gdGhlIFNwcml0ZUJhdGNoIGJlZm9yZSBpdCBmbHVzaGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IENPTlNULlNQUklURV9CQVRDSF9TSVpFOyAvLyAyMDAwIGlzIGEgbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIC8gZGVza3RvcFxuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBpbiBvdXIgYmF0Y2hcbiAgICB2YXIgbnVtVmVydHMgPSAodGhpcy5zaXplICogNCkgKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYmF0Y2gsIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgICB2YXIgbnVtSW5kaWNlcyA9IHRoaXMuc2l6ZSAqIDY7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgdmVydGV4IGRhdGEgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdGhlIHZlcnRleCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEFycmF5QnVmZmVyKG51bVZlcnRzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgRmxvYXQzMkFycmF5IGZvciBwb3NpdGlvbnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG4gICAgXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBVaW50MzJBcnJheSBmb3IgdXZzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciBjb2xvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXMgb2YgdGhlIGdlb21ldHJ5IChxdWFkcykgdG8gZHJhd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzKHRoaXMuc2l6ZSlcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICBcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIHRoaXMuZ3JvdXBzID0gW107XG4gICAgXG4gICAgLy9UT0RPIC0gMzAwIGlzIGEgYml0IG1hZ2ljLCBmaWd1cmUgb3V0IGEgbmljZXIgYW1vdW50IVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zaXplOyBpKyspIFxuICAgIHtcbiAgICAgICAgdGhpcy5ncm91cHNbaV0gPSB7dGV4dHVyZXM6W10sIHRleHR1cmVDb3VudDowLCBpZHM6W10sIHNpemU6MCwgc3RhcnQ6MCwgYmxlbmQ6MH07IFxuICAgIH07XG4gICAgXG4gICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG5cbiAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbnVsbDsgICAgXG59XG5cblxuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ByaXRlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZVJlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdzcHJpdGUnLCBTcHJpdGVSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMuTUFYX1RFWFRVRVMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpO1xuXG4gICAgdGhpcy5fc2hhZGVyID0gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIoZ2wsIHRoaXMuTUFYX1RFWFRVRVMpLy9uZXcgVGV4dHVyZVNoYWRlcihnbCk7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXI7XG5cbiAgICAvLyBjcmVhdGUgYSBjb3VwbGUgb2YgYnVmZmVyc1xuICAgIHRoaXMudmVydGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlcihnbCwgbnVsbCwgZ2wuRFlOQU1JQ19EUkFXKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyKGdsLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIC8vIGJ1aWxkIHRoZSB2YW8gb2JqZWN0IHRoYXQgd2lsbCByZW5kZXIuLlxuICAgIHRoaXMudmFvID0gbmV3IGdsQ29yZS5WZXJ0ZXhBcnJheU9iamVjdChnbCk7XG5cbiAgICB0aGlzLnZhby5hZGRJbmRleCh0aGlzLmluZGV4QnVmZmVyKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCBnbC5VTlNJR05FRF9TSE9SVCwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDIgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgZ2wuVU5TSUdORURfQllURSwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDMgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlSWQsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDQgKiA0KTtcblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IDk5OTk5O1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHJlbmRlciB3aGVuIHVzaW5nIHRoaXMgc3ByaXRlYmF0Y2hcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChzcHJpdGUpXG57XG4gICAgLy9UT0RPIHNldCBibGVuZCBtb2Rlcy4uXG4gICAgLy8gY2hlY2sgdGV4dHVyZS4uXG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID49IHRoaXMuc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICB9XG5cbiAgXG4gICAgLy8gZ2V0IHRoZSB1dnMgZm9yIHRoZSB0ZXh0dXJlXG4gICBcblxuICAgIC8vIGlmIHRoZSB1dnMgaGF2ZSBub3QgdXBkYXRlZCB0aGVuIG5vIHBvaW50IHJlbmRlcmluZyBqdXN0IHlldCFcbiAgICBpZiAoIXNwcml0ZS50ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgIC8vIHB1c2ggYSB0ZXh0dXJlLlxuICAgIC8vIGluY3JlbWVudCB0aGUgYmF0Y2hzaXplXG4gICAgdmFyIG5leHRUZXh0dXJlID0gIHNwcml0ZS50ZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIHZhciBjdXJyZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRHcm91cDtcbiAgICB2YXIgaTtcblxuICAgIGlmKHRoaXMuY3VycmVudFRleHR1cmUgIT09IG5leHRUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG5leHRUZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgaWYoIW5leHRUZXh0dXJlLl9lbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5fZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5faWQgPSB0aGlzLnRleHR1cmVDb3VudDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy50ZXh0dXJlQ291bnQgPT09IHRoaXMuTUFYX1RFWFRVRVMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50OyBpKyspIFxuICAgICAgICAgICAgICAgIHsgICAgIFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnNpemUgPSB0aGlzLmN1cnJlbnRJbmRleCAtIGN1cnJlbnRHcm91cC5zdGFydDtcbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC5zdGFydCA9IHRoaXMuY3VycmVudEluZGV4O1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCsrXSA9IG5leHRUZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcbiAgICB9XG5cbiAgICAvLyBUT0RPIHRyaW0/P1xuICAgIHZhciBpbmRleCA9IHRoaXMuY3VycmVudEluZGV4ICogdGhpcy52ZXJ0Qnl0ZVNpemU7XG5cbiAgICB0aGlzLmN1cnJlbnRJbmRleCsrO1xuXG4gICAgLy8gdXBsb2FkIHRoZSBzcHJpdGUgZWxlbWV0bnMuLi5cbiAgICAvLyB0aGV5IGhhdmUgYWxsIHJlYWR5IGJlZW4gY2FsY3VsYXRlZCBzbyB3ZSBqdXN0IG5lZWQgdG8gcHVzaCB0aGVtIGludG8gdGhlIGJ1ZmZlci5cbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG4gICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMucG9zaXRpb25zO1xuICAgIHZhciB2ZXJ0ZXhEYXRhID0gc3ByaXRlLnZlcnRleERhdGFcbiAgICB2YXIgdGludCA9IChzcHJpdGUudGludCA+PiAxNikgKyAoc3ByaXRlLnRpbnQgJiAweGZmMDApICsgKChzcHJpdGUudGludCAmIDB4ZmYpIDw8IDE2KSArIChzcHJpdGUud29ybGRBbHBoYSAqIDI1NSA8PCAyNCk7XG4gICAgdmFyIHV2cyA9IHNwcml0ZS50ZXh0dXJlLl91dnMudXZzX3VpbnQzMjtcbiAgICAvL3h5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVswXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzFdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzBdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkOyBcbiAgICBcbiAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMl07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVszXTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1sxXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNF07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs1XTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1syXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs2XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzddO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzNdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb250ZW50IGFuZCBlbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPT09IDApcmV0dXJuO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gdGhpcy5jdXJyZW50R3JvdXAuc3RhcnQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgeyAgICAgXG4gICAgICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVzW2ldLl9lbmFibGVkID0gZmFsc2U7XG4gICAgfTtcbiAgIFxuICAgIC8vIGRvIHNvbWUgc21hcnQgYXJyYXkgc3R1ZmYuLlxuICAgIC8vIGRvdWJsZSBzaXplIHNvIHdlIGRvbnQgYWx3YXkgc3ViYXJyYXkgdGhlIGVsZW1lbnRzLi5cbiAgICAvLyB1cGxvYWQgdGhlIHZlcnRzIHRvIHRoZSBidWZmZXJcbiAgICBpZiAodGhpcy5jdXJyZW50QmF0Y2hTaXplID4gKCB0aGlzLnNpemUgKiAwLjUgKSApXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlci51cGxvYWQodGhpcy52ZXJ0aWNlcywgMCwgdHJ1ZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIG8gayAuLiBzdWIgYXJyYXkgaXMgU0xPVz4/XG4gICAgICAgIHZhciB2aWV3ID0gdGhpcy5wb3NpdGlvbnMuc3ViYXJyYXkoMCwgdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZSk7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh2aWV3LCAwLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBiaW5kIHNoYWRlci4uXG4gICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHRoaXMuX3NoYWRlcik7XG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggMCApO1xuXG4gICAgLy8vIHJlbmRlciB0aGUgZ3JvdXBzLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5ncm91cENvdW50OyBpKyspIHtcbiAgICAgICAgXG4gICAgICAgIHZhciBncm91cCA9IHRoaXMuZ3JvdXBzW2ldO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ3JvdXAudGV4dHVyZUNvdW50OyBqKyspIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFRleHR1cmUoZ3JvdXAudGV4dHVyZXNbal0sIGopO1xuICAgICAgICB9O1xuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGdyb3VwLnNpemUgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgZ3JvdXAuc3RhcnQgKiA2ICogMik7XG4gICAgfTtcblxuICAgIC8vIHJlc2V0IGVsZW1lbnRzIGZvciB0aGUgbmV4dCBmbHVzaFxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cENvdW50ID0gMDtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcbiAgICB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgc3ByaXRlIGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZhby5iaW5kKCk7XG59O1xuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xuICAgIHRoaXMudmFvLnVuYmluZCgpO1xufTtcbi8qKlxuICogRGVzdHJveXMgdGhlIFNwcml0ZUJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMudmVydGljZXMgPSBudWxsO1xuICAgIHRoaXMucG9zaXRpb25zID0gbnVsbDtcbiAgICB0aGlzLmNvbG9ycyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMudmVydGV4QnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuc3ByaXRlcyA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuXG5mdW5jdGlvbiBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgbWF4VGV4dHVyZXMpXG57XG4gICAgdmFyIHZlcnRleFNyYyA9IFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcbmF0dHJpYnV0ZSBmbG9hdCBhVGV4dHVyZUlkO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyBmbG9hdCB2VGV4dHVyZUlkO1xcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2VGV4dHVyZUlkID0gYVRleHR1cmVJZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cIjtcbiAgICB2YXIgZnJhZ21lbnRTcmMgPSAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxuJyArIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKSArIFwiXFxuXFxuXCIgKyBmcmFnVGVtcGxhdGVcblxuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMucmVwbGFjZSgvXFwlXFwlL2dpLCAnMTYnKTtcblxuICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXG4gICAgdmFyIHNhbXBsZVZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkrKykge1xuICAgICAgICBzYW1wbGVWYWx1ZXNbaV0gPSBpO1xuICAgIH07XG5cbiAgICBzaGFkZXIuYmluZCgpO1xuICAgIHNoYWRlci51bmlmb3Jtcy51U2FtcGxlcnMgPSBzYW1wbGVWYWx1ZXM7XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVNhbXBsZVNyYyhtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgc3JjID0gJ3ZlYzQgZ2V0U2FtcGxlRnJvbUFycmF5KHNhbXBsZXIyRCB0ZXh0dXJlc1slJV0sIGludCBuZHgsIHZlYzIgdXYpIHtcXG5cXG52ZWM0IGNvbG9yOydcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSBcbiAgICB7XG4gICAgICAgIGlmKGkgPiAwKXNyYyArPSAnXFxuZWxzZSAnO1xuICAgICAgICBpZihpIDwgbWF4VGV4dHVyZXMtMSlzcmMgKz0gJ2lmKG5keCA9PSAnICsgaSArICcpJztcbiAgICAgICAgc3JjICs9ICdcXG57JztcbiAgICAgICAgc3JjICs9ICdcXG5cXHRjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlc1snK2krJ10sIHV2KTsnO1xuICAgICAgICBzcmMgKz0gJ1xcbn0nO1xuICAgIH07XG5cbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAncmV0dXJuIGNvbG9yOyc7XG4gICAgc3JjICs9ICdcXG59JztcblxuICAgIHJldHVybiBzcmM7XG59XG5cbnZhciBmcmFnVGVtcGxhdGUgPSBbXG5cbiAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuICAgICd2YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7JyxcbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJzWyUlXTsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnZ2xfRnJhZ0NvbG9yID0gZ2V0U2FtcGxlRnJvbUFycmF5KHVTYW1wbGVycywgaW50KHZUZXh0dXJlSWQpLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvcjsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcjtcbiIsInZhciBTcHJpdGUgPSByZXF1aXJlKCcuLi9zcHJpdGVzL1Nwcml0ZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgVGV4dCBPYmplY3Qgd2lsbCBjcmVhdGUgYSBsaW5lIG9yIG11bHRpcGxlIGxpbmVzIG9mIHRleHQuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJyBpbiB5b3VyIHRleHQgc3RyaW5nLFxuICogb3IgYWRkIGEgd29yZFdyYXAgcHJvcGVydHkgc2V0IHRvIHRydWUgYW5kIGFuZCB3b3JkV3JhcFdpZHRoIHByb3BlcnR5IHdpdGggYSB2YWx1ZSBpbiB0aGUgc3R5bGUgb2JqZWN0LlxuICpcbiAqIEEgVGV4dCBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGEgc3RyaW5nIGFuZCBhIHN0eWxlIG9iamVjdFxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dCA9IG5ldyBQSVhJLlRleHQoJ1RoaXMgaXMgYSBwaXhpIHRleHQnLHtmb250IDogJzI0cHggQXJpYWwnLCBmaWxsIDogMHhmZjEwMTAsIGFsaWduIDogJ2NlbnRlcid9KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBbc3R5bGVdIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnRdIHtzdHJpbmd9IGRlZmF1bHQgJ2JvbGQgMjBweCBBcmlhbCcgVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gKiBAcGFyYW0gW3N0eWxlLmZpbGw9J2JsYWNrJ10ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdCBzaW5nbGUgbGluZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZV0ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBzdHJva2UgZS5nICdibHVlJywgJyNGQ0ZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZVRoaWNrbmVzcz0wXSB7bnVtYmVyfSBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgc3Ryb2tlLiBEZWZhdWx0IGlzIDAgKG5vIHN0cm9rZSlcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXAsIGl0IG5lZWRzIHdvcmRXcmFwIHRvIGJlIHNldCB0byB0cnVlXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvdz1mYWxzZV0ge2Jvb2xlYW59IFNldCBhIGRyb3Agc2hhZG93IGZvciB0aGUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93QW5nbGU9TWF0aC5QSS80XSB7bnVtYmVyfSBTZXQgYSBhbmdsZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAqIEBwYXJhbSBbc3R5bGUucGFkZGluZz0wXSB7bnVtYmVyfSBPY2Nhc2lvbmFsbHkgc29tZSBmb250cyBhcmUgY3JvcHBlZCBvbiB0b3Agb3IgYm90dG9tLiBBZGRpbmcgc29tZSBwYWRkaW5nIHdpbGxcbiAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVKb2luPSdtaXRlciddIHtzdHJpbmd9IFRoZSBsaW5lSm9pbiBwcm9wZXJ0eSBzZXRzIHRoZSB0eXBlIG9mIGNvcm5lciBjcmVhdGVkLCBpdCBjYW4gcmVzb2x2ZVxuICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAqICAgICAgb3IgaW5jcmVhc2UgdGhlIHNwaWtpbmVzcyBvZiByZW5kZXJlZCB0ZXh0LlxuICovXG5mdW5jdGlvbiBUZXh0KHRleHQsIHN0eWxlLCByZXNvbHV0aW9uKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgZWxlbWVudCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gdG9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGhcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIGNhbnZhcy5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXModGhpcy5jYW52YXMpO1xuICAgIHRleHR1cmUudHJpbSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuICAgIFNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3ByaXRlLnByb3RvdHlwZSk7XG5UZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHQ7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHQ7XG5cblRleHQuZm9udFByb3BlcnRpZXNDYWNoZSA9IHt9O1xuVGV4dC5mb250UHJvcGVydGllc0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuVGV4dC5mb250UHJvcGVydGllc0NvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHQucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueCAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dCwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc2NhbGUueSAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlIC8gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBzdHlsZSBvZiB0aGUgdGV4dFxuICAgICAqXG4gICAgICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmZvbnQ9J2JvbGQgMjBwdCBBcmlhbCddIHtzdHJpbmd9IFRoZSBzdHlsZSBhbmQgc2l6ZSBvZiB0aGUgZm9udFxuICAgICAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGVnICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnN0cm9rZT0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlZyAnYmx1ZScsICcjRkNGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICAgICAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcFdpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIGF0IHdoaWNoIHRleHQgd2lsbCB3cmFwXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSGVpZ2h0XSB7bnVtYmVyfSBUaGUgbGluZSBoZWlnaHQsIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgc3BhY2UgdGhhdCBhIGxldHRlciB1c2VzXG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfG51bWJlcn0gQSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgb24gdGhlIGRyb3BzaGFkb3cgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzZdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0JsdXI9MF0ge251bWJlcn0gU2V0IGEgc2hhZG93IGJsdXIgcmFkaXVzXG4gICAgICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICAgICAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLnRleHRCYXNlbGluZT0nYWxwaGFiZXRpYyddIHtzdHJpbmd9IFRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dCB0aGF0IGlzIHJlbmRlcmVkLlxuICAgICAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gICAgICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gICAgICogQHBhcmFtIFtzdHlsZS5taXRlckxpbWl0PTEwXSB7bnVtYmVyfSBUaGUgbWl0ZXIgbGltaXQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdtaXRlcicgbGluZUpvaW4gbW9kZS4gVGhpcyBjYW4gcmVkdWNlXG4gICAgICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICBzdHlsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdHlsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3R5bGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZmlsbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5maWxsID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5maWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5zdHJva2UgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5zdHJva2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmRyb3BTaGFkb3dDb2xvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlLmZvbnQgPSBzdHlsZS5mb250IHx8ICdib2xkIDIwcHQgQXJpYWwnO1xuICAgICAgICAgICAgc3R5bGUuZmlsbCA9IHN0eWxlLmZpbGwgfHwgJ2JsYWNrJztcbiAgICAgICAgICAgIHN0eWxlLmFsaWduID0gc3R5bGUuYWxpZ24gfHwgJ2xlZnQnO1xuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gc3R5bGUuc3Ryb2tlIHx8ICdibGFjayc7IC8vcHJvdmlkZSBhIGRlZmF1bHQsIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2lzc3Vlcy8xMzZcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZVRoaWNrbmVzcyA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyB8fCAwO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXAgPSBzdHlsZS53b3JkV3JhcCB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLndvcmRXcmFwV2lkdGggPSBzdHlsZS53b3JkV3JhcFdpZHRoIHx8IDEwMDtcblxuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvdyA9IHN0eWxlLmRyb3BTaGFkb3cgfHwgZmFsc2U7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3IgfHwgJyMwMDAwMDAnO1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0FuZ2xlID0gc3R5bGUuZHJvcFNoYWRvd0FuZ2xlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93QW5nbGUgOiBNYXRoLlBJIC8gNjtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSA9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlIDogNTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXIgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dCbHVyIDogMDsgLy9zaGFkb3dCbHVyIGlzICcwJyBieSBkZWZhdWx0IGFjY29yZGluZyB0byBIVE1MXG5cbiAgICAgICAgICAgIHN0eWxlLnBhZGRpbmcgPSBzdHlsZS5wYWRkaW5nIHx8IDA7XG5cbiAgICAgICAgICAgIHN0eWxlLnRleHRCYXNlbGluZSA9IHN0eWxlLnRleHRCYXNlbGluZSB8fCAnYWxwaGFiZXRpYyc7XG5cbiAgICAgICAgICAgIHN0eWxlLmxpbmVKb2luID0gc3R5bGUubGluZUpvaW4gfHwgJ21pdGVyJztcbiAgICAgICAgICAgIHN0eWxlLm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0IHx8IDEwO1xuXG4gICAgICAgICAgICB0aGlzLl9zdHlsZSA9IHN0eWxlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjb3B5IGZvciB0aGUgdGV4dCBvYmplY3QuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHRleHQpe1xuICAgICAgICAgICAgdGV4dCA9IHRleHQudG9TdHJpbmcoKSB8fCAnICc7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dCA9PT0gdGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdGV4dDtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHN0eWxlID0gdGhpcy5fc3R5bGU7XG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuXG4gICAgLy8gd29yZCB3cmFwXG4gICAgLy8gcHJlc2VydmUgb3JpZ2luYWwgdGV4dFxuICAgIHZhciBvdXRwdXRUZXh0ID0gc3R5bGUud29yZFdyYXAgPyB0aGlzLndvcmRXcmFwKHRoaXMuX3RleHQpIDogdGhpcy5fdGV4dDtcblxuICAgIC8vIHNwbGl0IHRleHQgaW50byBsaW5lc1xuICAgIHZhciBsaW5lcyA9IG91dHB1dFRleHQuc3BsaXQoLyg/OlxcclxcbnxcXHJ8XFxuKS8pO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgd2lkdGhcbiAgICB2YXIgbGluZVdpZHRocyA9IG5ldyBBcnJheShsaW5lcy5sZW5ndGgpO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBmb250UHJvcGVydGllcyA9IHRoaXMuZGV0ZXJtaW5lRm9udFByb3BlcnRpZXMoc3R5bGUuZm9udCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBsaW5lV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQobGluZXNbaV0pLndpZHRoO1xuICAgICAgICBsaW5lV2lkdGhzW2ldID0gbGluZVdpZHRoO1xuICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxpbmVXaWR0aCk7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gbWF4TGluZVdpZHRoICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgd2lkdGggKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gKCB3aWR0aCArIHRoaXMuY29udGV4dC5saW5lV2lkdGggKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIC8vIGNhbGN1bGF0ZSB0ZXh0IGhlaWdodFxuICAgIHZhciBsaW5lSGVpZ2h0ID0gdGhpcy5zdHlsZS5saW5lSGVpZ2h0IHx8IGZvbnRQcm9wZXJ0aWVzLmZvbnRTaXplICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuXG4gICAgdmFyIGhlaWdodCA9IGxpbmVIZWlnaHQgKiBsaW5lcy5sZW5ndGg7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBoZWlnaHQgKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9ICggaGVpZ2h0ICsgdGhpcy5fc3R5bGUucGFkZGluZyAqIDIgKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMuY29udGV4dC5zY2FsZSggdGhpcy5yZXNvbHV0aW9uLCB0aGlzLnJlc29sdXRpb24pO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIH1cblxuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxTdHlsZT1cIiNGRjAwMDBcIjtcbiAgICAvL3RoaXMuY29udGV4dC5maWxsUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIHRoaXMuY29udGV4dC5mb250ID0gc3R5bGUuZm9udDtcbiAgICB0aGlzLmNvbnRleHQuc3Ryb2tlU3R5bGUgPSBzdHlsZS5zdHJva2U7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcbiAgICB0aGlzLmNvbnRleHQudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lO1xuICAgIHRoaXMuY29udGV4dC5saW5lSm9pbiA9IHN0eWxlLmxpbmVKb2luO1xuICAgIHRoaXMuY29udGV4dC5taXRlckxpbWl0ID0gc3R5bGUubWl0ZXJMaW1pdDtcblxuICAgIHZhciBsaW5lUG9zaXRpb25YO1xuICAgIHZhciBsaW5lUG9zaXRpb25ZO1xuXG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBpZiAoc3R5bGUuZHJvcFNoYWRvd0JsdXIgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3I7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Qmx1ciA9IHN0eWxlLmRyb3BTaGFkb3dCbHVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4U2hhZG93T2Zmc2V0ID0gTWF0aC5jb3Moc3R5bGUuZHJvcFNoYWRvd0FuZ2xlKSAqIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICAgICAgdmFyIHlTaGFkb3dPZmZzZXQgPSBNYXRoLnNpbihzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogbGluZUhlaWdodCkgKyBmb250UHJvcGVydGllcy5hc2NlbnQ7XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblggKyB4U2hhZG93T2Zmc2V0LCBsaW5lUG9zaXRpb25ZICsgeVNoYWRvd09mZnNldCArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9zZXQgY2FudmFzIHRleHQgc3R5bGVzXG4gICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmZpbGw7XG5cbiAgICAvL2RyYXcgbGluZXMgbGluZSBieSBsaW5lXG4gICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICBpZiAoc3R5bGUuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHlsZS5zdHJva2UgJiYgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVUZXh0dXJlKCk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLnRyaW0ueCA9IDA7XG4gICAgdGV4dHVyZS50cmltLnkgPSAtdGhpcy5fc3R5bGUucGFkZGluZztcblxuICAgIHRleHR1cmUudHJpbS53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRleHR1cmUudHJpbS5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgLSB0aGlzLl9zdHlsZS5wYWRkaW5nKjI7XG5cbiAgICB0aGlzLl93aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuX2hlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZW1pdCgndXBkYXRlJywgIHRleHR1cmUuYmFzZVRleHR1cmUpO1xuXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKi9cblRleHQucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgLy90aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUucmVuZGVyV2ViR0wuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgIC8vICAgdGhpcy5yZXNvbHV0aW9uID0gMS8vcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGFzY2VudCwgZGVzY2VudCBhbmQgZm9udFNpemUgb2YgYSBnaXZlbiBmb250U3R5bGVcbiAqXG4gKiBAcGFyYW0gZm9udFN0eWxlIHtvYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5kZXRlcm1pbmVGb250UHJvcGVydGllcyA9IGZ1bmN0aW9uIChmb250U3R5bGUpXG57XG4gICAgdmFyIHByb3BlcnRpZXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXTtcblxuICAgIGlmICghcHJvcGVydGllcylcbiAgICB7XG4gICAgICAgIHByb3BlcnRpZXMgPSB7fTtcblxuICAgICAgICB2YXIgY2FudmFzID0gVGV4dC5mb250UHJvcGVydGllc0NhbnZhcztcbiAgICAgICAgdmFyIGNvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dDtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgdmFyIHdpZHRoID0gTWF0aC5jZWlsKGNvbnRleHQubWVhc3VyZVRleHQoJ3xNw4lxJykud2lkdGgpO1xuICAgICAgICB2YXIgYmFzZWxpbmUgPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnTScpLndpZHRoKTtcbiAgICAgICAgdmFyIGhlaWdodCA9IDIgKiBiYXNlbGluZTtcblxuICAgICAgICBiYXNlbGluZSA9IGJhc2VsaW5lICogMS40IHwgMDtcblxuICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjZjAwJztcbiAgICAgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgY29udGV4dC50ZXh0QmFzZWxpbmUgPSAnYWxwaGFiZXRpYyc7XG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMwMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxUZXh0KCd8TcOJcScsIDAsIGJhc2VsaW5lKTtcblxuICAgICAgICB2YXIgaW1hZ2VkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCkuZGF0YTtcbiAgICAgICAgdmFyIHBpeGVscyA9IGltYWdlZGF0YS5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lID0gd2lkdGggKiA0O1xuXG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIHZhciBpZHggPSAwO1xuICAgICAgICB2YXIgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGFzY2VudC4gc2NhbiBmcm9tIHRvcCB0byBib3R0b20gdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGJhc2VsaW5lOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggKz0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuYXNjZW50ID0gYmFzZWxpbmUgLSBpO1xuXG4gICAgICAgIGlkeCA9IHBpeGVscyAtIGxpbmU7XG4gICAgICAgIHN0b3AgPSBmYWxzZTtcblxuICAgICAgICAvLyBkZXNjZW50LiBzY2FuIGZyb20gYm90dG9tIHRvIHRvcCB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSBoZWlnaHQ7IGkgPiBiYXNlbGluZTsgaS0tKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGluZTsgaiArPSA0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0b3ApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWR4IC09IGxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLmRlc2NlbnQgPSBpIC0gYmFzZWxpbmU7XG4gICAgICAgIHByb3BlcnRpZXMuZm9udFNpemUgPSBwcm9wZXJ0aWVzLmFzY2VudCArIHByb3BlcnRpZXMuZGVzY2VudDtcblxuICAgICAgICBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXSA9IHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgbmV3bGluZXMgdG8gYSBzdHJpbmcgdG8gaGF2ZSBpdCBvcHRpbWFsbHkgZml0IGludG8gdGhlIGhvcml6b250YWxcbiAqIGJvdW5kcyBzZXQgYnkgdGhlIFRleHQgb2JqZWN0J3Mgd29yZFdyYXBXaWR0aCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUud29yZFdyYXAgPSBmdW5jdGlvbiAodGV4dClcbntcbiAgICAvLyBHcmVlZHkgd3JhcHBpbmcgYWxnb3JpdGhtIHRoYXQgd2lsbCB3cmFwIHdvcmRzIGFzIHRoZSBsaW5lIGdyb3dzIGxvbmdlclxuICAgIC8vIHRoYW4gaXRzIGhvcml6b250YWwgYm91bmRzLlxuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgICB2YXIgd29yZFdyYXBXaWR0aCA9IHRoaXMuX3N0eWxlLndvcmRXcmFwV2lkdGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcGFjZUxlZnQgPSB3b3JkV3JhcFdpZHRoO1xuICAgICAgICB2YXIgd29yZHMgPSBsaW5lc1tpXS5zcGxpdCgnICcpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdvcmRzLmxlbmd0aDsgaisrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgd29yZFdpZHRoID0gdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KHdvcmRzW2pdKS53aWR0aDtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGhXaXRoU3BhY2UgPSB3b3JkV2lkdGggKyB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQoJyAnKS53aWR0aDtcbiAgICAgICAgICAgIGlmIChqID09PSAwIHx8IHdvcmRXaWR0aFdpdGhTcGFjZSA+IHNwYWNlTGVmdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHByaW50aW5nIHRoZSBuZXdsaW5lIGlmIGl0J3MgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxpbmUgdGhhdCBpc1xuICAgICAgICAgICAgICAgIC8vIGdyZWF0ZXIgdGhhbiB0aGUgd29yZCB3cmFwIHdpZHRoLlxuICAgICAgICAgICAgICAgIGlmIChqID4gMClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdvcmRzW2pdO1xuICAgICAgICAgICAgICAgIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGggLSB3b3JkV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0IC09IHdvcmRXaWR0aFdpdGhTcGFjZTtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyAnICsgd29yZHNbal07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaSA8IGxpbmVzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBUZXh0IGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIFRleHRcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIHJldHVybiBTcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcy5jYWxsKHRoaXMsIG1hdHJpeCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dCBvYmplY3QuXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9dHJ1ZV0ge2Jvb2xlYW59IHdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZVRleHR1cmUpXG57XG4gICAgLy8gbWFrZSBzdXJlIHRvIHJlc2V0IHRoZSB0aGUgY29udGV4dCBhbmQgY2FudmFzLi4gZG9udCB3YW50IHRoaXMgaGFuZ2luZyBhcm91bmQgaW4gbWVtb3J5IVxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xuXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG59O1xuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9GaWx0ZXJNYW5hZ2VyJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgdGVtcFJlY3QgPSBuZXcgbWF0aC5SZWN0YW5nbGUoKTtcblxuLyoqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBCYXNlUmVuZGVyVGV4dHVyZSBzaG91bGQgYmUgcHJlbG9hZGVkXG4gKiBvdGhlcndpc2UgYmxhY2sgcmVjdGFuZ2xlcyB3aWxsIGJlIGRyYXduIGluc3RlYWQuXG4gKlxuICogQSBCYXNlUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIEJhc2VyZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIDgwMCwgNjAwKTtcbiAqIHZhciBzcHJpdGUgPSBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJzcGluT2JqXzAxLnBuZ1wiKTtcbiAqXG4gKiBzcHJpdGUucG9zaXRpb24ueCA9IDgwMC8yO1xuICogc3ByaXRlLnBvc2l0aW9uLnkgPSA2MDAvMjtcbiAqIHNwcml0ZS5hbmNob3IueCA9IDAuNTtcbiAqIHNwcml0ZS5hbmNob3IueSA9IDAuNTtcbiAqXG4gKiBCYXNlcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgQmFzZXJlbmRlclRleHR1cmVcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgZm9yIHRoaXMgQmFzZVJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgaWYgKCFyZW5kZXJlcilcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNyZWF0ZSBCYXNlUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgbnVsbCwgc2NhbGVNb2RlKTtcbiAgIFxuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAxMDA7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OOztcbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIERyYXcvcmVuZGVyIHRoZSBnaXZlbiBEaXNwbGF5T2JqZWN0IG9udG8gdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheU9iamVjdCBhbmQgZGVzY2VuZGVudHMgYXJlIHRyYW5zZm9ybWVkIGR1cmluZyB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBJZiBgdXBkYXRlVHJhbnNmb3JtYCBpcyB0cnVlIHRoZW4gdGhlIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkIGJlZm9yZSB0aGVcbiAgICAgKiBtZXRob2QgcmV0dXJucy4gT3RoZXJ3aXNlIGl0IGlzIHVwIHRvIHRoZSBjYWxsaW5nIGNvZGUgdG8gY29ycmVjdGx5IHVzZSBvciByZXNldFxuICAgICAqIHRoZSB0cmFuc2Zvcm1lZCBkaXNwbGF5IG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgaXMgYWx3YXlzIHJlbmRlcmVkIHdpdGggYSB3b3JsZEFscGhhIHZhbHVlIG9mIDEuXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAgICAgKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBPcHRpb25hbCBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIGRpc3BsYXkgb2JqZWN0IGJlZm9yZSByZW5kZXJpbmcuXG4gICAgICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICAgICAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gICAgICogIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkLiBOb3QgcmVzdG9yaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBhIGxpdHRsZSBmYXN0ZXIuXG4gICAgICovXG4gICAgdGhpcy5yZW5kZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgQmFzZVJlbmRlclRleHR1cmUgdXNlcy4gQSBCYXNlUmVuZGVyVGV4dHVyZSBjYW4gb25seSBiZWxvbmcgdG8gb25lIHJlbmRlcmVyIGF0IHRoZSBtb21lbnQgaWYgaXRzIHdlYkdMLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgUmVuZGVyVGFyZ2V0KGdsLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5zY2FsZU1vZGUsIHRoaXMucmVzb2x1dGlvbik7Ly8sIHRoaXMudGhpcy5zY2FsZU1vZGUpO1xuICAgICAgICB0aGlzLl9nbFRleHR1cmVzW2dsLmlkXSA9ICB0aGlzLnRleHR1cmVCdWZmZXIudGV4dHVyZTtcbiAgICAgICAgXG4gICAgICAgIC8vVE9ETyByZWZhY3RvciBmaWx0ZXIgbWFuYWdlci4uIGFzIHJlYWxseSBpdHMgbm8gbG9uZ2VyIGEgbWFuYWdlciBpZiB3ZSB1c2UgaXQgaGVyZS4uXG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJXZWJHTDtcblxuICAgICAgICAvLyB0aGUgY3JlYXRpb24gb2YgYSBmaWx0ZXIgbWFuYWdlciB1bmJpbmRzIHRoZSBidWZmZXJzLi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbiAgICAgICAgaWYodGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0KXRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJDYW52YXM7XG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIodGhpcy53aWR0aCogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbn1cblxuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlVGV4dHVyZS5wcm90b3R5cGUpO1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzZVJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VSZW5kZXJUZXh0dXJlO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGlmICh3aWR0aCA9PT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT09IHRoaXMuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5maWx0ZXJNYW5hZ2VyKVxuICAgIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLnJlbmRlcmVyLmdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcihmYWxzZSwgZGVzdGluYXRpb25GcmFtZSk7XG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gKHVwZGF0ZVRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSA/IHVwZGF0ZVRyYW5zZm9ybSA6IHRydWU7Ly8hdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnRyYW5zZm9ybSA9IG1hdHJpeDtcblxuICAgIC8vVE9ETyBub3QgYSBmYW4gdGhhdCB0aGlzIGlzIGhlcmUuLi4gaXQgd2lsbCBtb3ZlIVxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5hY3RpdmF0ZSgpO1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgaWYgKHVwZGF0ZVRyYW5zZm9ybSlcbiAgICB7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIG1hdHJpeCBvZiB0aGUgZGlzcGxhdHlPYmplY3QuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmlkZW50aXR5KCk7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgICAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRlbXBSZWN0LndpZHRoID0gZnJhbWUuaGVpZ2h0O1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IGZyYW1lLndpZHRoO1xuICAgXG4gICAgLy9UT0RPIHJlbmFtZSB0ZXh0dXJlQnVmZmVyIHRvIHJlbmRlclRhcmdldC4uXG4gICAgdmFyIHRlbXAgPSAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyID0gdGhpcy5maWx0ZXJNYW5hZ2VyO1xuICAgIFxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKGZyYW1lLCB0ZW1wUmVjdCk7XG4gICAgY29uc29sZS5sb2coZGlzcGxheU9iamVjdClcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgdGhpcy50ZXh0dXJlQnVmZmVyLCBjbGVhcik7XG5cbiAgIC8vIGNvbnNvbGUubG9nKFwiUkVOREVSSU5HIFwiKTtcbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0ZW1wO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXJdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChmcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAhIXVwZGF0ZVRyYW5zZm9ybTtcblxuICAgIHZhciB3dCA9IHRlbXBNYXRyaXg7XG5cbiAgICB3dC5pZGVudGl0eSgpO1xuXG4gICAgaWYgKG1hdHJpeClcbiAgICB7XG4gICAgICAgIHd0LmFwcGVuZChtYXRyaXgpO1xuICAgIH1cblxuXG4gICAgd3QudHggKz0gZnJhbWUueDtcbiAgICB3dC50eSArPSBmcmFtZS55O1xuXG4gICAgdmFyIGNhY2hlZFd0ID0gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybTtcbiAgICBcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gd3Q7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgdmFyIGksIGo7XG5cbiAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgXG4vLyAgICB0aGlzLnRleHR1cmVCdWZmZXIuXG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dDtcblxuICAgIHZhciByZWFsUmVzb2x1dGlvbiA9IHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHJlYWxSZXNvbHV0aW9uO1xuXG4gICAgaWYoZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9PT0gd3QpXG4gICAge1xuICAgICAgICAvLyBmaXhlcyBjYWNoZUFzQml0bWFwIEhhcHBlbmluZyBkdXJpbmcgdGhlIGFib3ZlLi5cbiAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IGNhY2hlZFd0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gZGVzdHJveUJhc2Uge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCB0cnVlKTtcblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICAvLyBkZXN0cm95IHRoZSBmaWx0ZXJtYW5hZ2VyLi5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEltYWdlID0gZnVuY3Rpb24gKGZyYW1lKVxue1xuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLnNyYyA9IHRoaXMuZ2V0QmFzZTY0KGZyYW1lKTtcbiAgICByZXR1cm4gaW1hZ2U7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIEJhc2VSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRCYXNlNjQgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRDYW52YXMoZnJhbWUpLnRvRGF0YVVSTCgpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB0byBpdCBhbmQgdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBBIENhbnZhcyBlbGVtZW50IHdpdGggdGhlIHRleHR1cmUgcmVuZGVyZWQgb24uXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgIFxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgQ2FudmFzQnVmZmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHRlbXBDYW52YXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0RhdGEuZGF0YS5zZXQod2ViR0xQaXhlbHMpO1xuXG4gICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGZyYW1lLndpZHRoID09PSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLndpZHRoICYmIFxuICAgICAgICAgICBmcmFtZS5oZWlnaHQgPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIoZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcbiAgICAgICAgICAgIHZhciBjYW52YXNEYXRhID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNvbnRleHQuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggICogcmVzb2x1dGlvbiwgZnJhbWUueSAqIHJlc29sdXRpb24sIGZyYW1lLndpZHRoICogcmVzb2x1dGlvbiwgZnJhbWUuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0ZW1wQ2FudmFzLmNhbnZhcztcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKCBmcmFtZSApXG57XG4gICAgaWYoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgZnJhbWUud2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS53aWR0aDtcbiAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IGZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YShmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoZnJhbWUsIHgsIHkpXG57XG4gICAgdGVtcFJlY3QueCA9IHg7XG4gICAgdGVtcFJlY3QueSA9IHk7XG4gICAgdGVtcFJlY3Qud2lkdGggPSAxIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZihmcmFtZSlcbiAgICB7XG4gICAgICAgIHRlbXBSZWN0LnggKz0gZnJhbWUueDtcbiAgICAgICAgdGVtcFJlY3QueSArPSBmcmFtZS55O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFBpeGVscyh0ZW1wUmVjdCk7XG59O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZS4gQWxsIHRleHR1cmVzIGhhdmUgYSBiYXNlIHRleHR1cmUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBmb3IgZGV2aWNlcyB3aXRoIGRpZmZlcmVudCBwaXhlbCByYXRpb3NcbiAqL1xuZnVuY3Rpb24gQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnVpZCA9IHV0aWxzLnVpZCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgYmFzZSB0ZXh0dXJlIHNldCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAxMDA7XG5cbiAgICAvLyBUT0RPIGRvY3NcbiAgICAvLyB1c2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgZGltZW5zaW9ucyBvZiB0aGUgc291cmNlXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIHdpZHRoIG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsV2lkdGggPSAxMDA7XG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIGhlaWdodCBvZiB0aGUgc291cmNlIG9mIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucmVhbEhlaWdodCA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlIHRvIGFwcGx5IHdoZW4gc2NhbGluZyB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlNDQUxFX01PREVTLkxJTkVBUlxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSBvbmNlIHRoZSBiYXNlIHRleHR1cmUgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG5ldmVyIHRydWUgaWYgdGhlIHVuZGVybHlpbmcgc291cmNlIGZhaWxzIHRvIGxvYWQgb3IgaGFzIG5vIHRleHR1cmUgZGF0YS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIGlmIHRoZSBzb3VyY2UgaXMgY3VycmVudGx5IGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBJZiBhbiBJbWFnZSBzb3VyY2UgaXMgbG9hZGluZyB0aGUgJ2xvYWRlZCcgb3IgJ2Vycm9yJyBldmVudCB3aWxsIGJlXG4gICAgICogZGlzcGF0Y2hlZCB3aGVuIHRoZSBvcGVyYXRpb24gZW5kcy4gQW4gdW5kZXJ5bGluZyBzb3VyY2UgdGhhdCBpc1xuICAgICAqIGltbWVkaWF0ZWx5LWF2YWlsYWJsZSBieXBhc3NlcyBsb2FkaW5nIGVudGlyZWx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGltYWdlIHNvdXJjZSB0aGF0IGlzIHVzZWQgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogVE9ETzogTWFrZSB0aGlzIGEgc2V0dGVyIHRoYXQgY2FsbHMgbG9hZFNvdXJjZSgpO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SW1hZ2V8Q2FudmFzfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuc291cmNlID0gbnVsbDsgLy8gc2V0IGluIGxvYWRTb3VyY2UsIGlmIGF0IGFsbFxuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgaWYgUkdCIGNoYW5uZWxzIHNob3VsZCBiZSBwcmUtbXVsdGlwbGllZCBieSBBbHBoYSAgKFdlYkdMIG9ubHkpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgb3Igbm90IHRoZSB0ZXh0dXJlIGlzIGEgcG93ZXIgb2YgdHdvLCB0cnkgdG8gdXNlIHBvd2VyIG9mIHR3byB0ZXh0dXJlcyBhcyBtdWNoIGFzIHlvdSBjYW5cbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSBmYWxzZTtcblxuICAgIC8vIHVzZWQgZm9yIHdlYkdMXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgYSBtaXBtYXAgb2YgdGhpcyB0ZXh0dXJlIG5lZWRzIHRvIGJlIGdlbmVyYXRlZC4gVGhpcyB2YWx1ZSBuZWVkcyB0byBiZSBzZXQgYmVmb3JlIHRoZSB0ZXh0dXJlIGlzIHVzZWRcbiAgICAgKiBBbHNvIHRoZSB0ZXh0dXJlIG11c3QgYmUgYSBwb3dlciBvZiB0d28gc2l6ZSB0byB3b3JrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubWlwbWFwID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBBIG1hcCBvZiByZW5kZXJlciBJRHMgdG8gd2ViZ2wgdGV4dHVyZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIFdlYkdMVGV4dHVyZT59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbFRleHR1cmVzID0ge307XG4gICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5faWQgPSAwO1xuICAgIFxuICAgIC8vIGlmIG5vIHNvdXJjZSBwYXNzZWQgZG9uJ3QgdHJ5IHRvIGxvYWRcbiAgICBpZiAoc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5sb2FkU291cmNlKHNvdXJjZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZpbmlzaGVzIGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZGVkXG4gICAgICogQG1lbWJlcm9mIFBJWEkuQmFzZVRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZhaWxzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG59XG5cbkJhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdGV4dHVyZSBvbiBhbGwgdGhlIHdlYmdsIHJlbmRlcmVycywgdGhpcyBhbHNvIGFzc3VtZXMgdGhlIHNyYyBoYXMgY2hhbmdlZC5cbiAqXG4gKiBAZmlyZXMgdXBkYXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVhbFdpZHRoID0gdGhpcy5zb3VyY2UubmF0dXJhbFdpZHRoIHx8IHRoaXMuc291cmNlLndpZHRoO1xuICAgIHRoaXMucmVhbEhlaWdodCA9IHRoaXMuc291cmNlLm5hdHVyYWxIZWlnaHQgfHwgdGhpcy5zb3VyY2UuaGVpZ2h0O1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMucmVhbFdpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5yZWFsSGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSB1dGlscy5pc1Bvd2VyT2ZUd28odGhpcy5yZWFsV2lkdGgsIHRoaXMucmVhbEhlaWdodCk7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBMb2FkIGEgc291cmNlLlxuICpcbiAqIElmIHRoZSBzb3VyY2UgaXMgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSwgc3VjaCBhcyBhbiBpbWFnZSB0aGF0IG5lZWRzIHRvIGJlXG4gKiBkb3dubG9hZGVkLCB0aGVuIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmUgZGlzcGF0Y2hlZCBpbiB0aGUgZnV0dXJlXG4gKiBhbmQgYGhhc0xvYWRlZGAgd2lsbCByZW1haW4gZmFsc2UgYWZ0ZXIgdGhpcyBjYWxsLlxuICpcbiAqIFRoZSBsb2dpYyBzdGF0ZSBhZnRlciBjYWxsaW5nIGBsb2FkU291cmNlYCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IChlZy4gYGZyb21JbWFnZWAsIGBuZXcgQmFzZVRleHR1cmVgKSBpczpcbiAqXG4gKiAgICAgaWYgKHRleHR1cmUuaGFzTG9hZGVkKVxuIHtcbiAqICAgICAgICAvLyB0ZXh0dXJlIHJlYWR5IGZvciB1c2VcbiAqICAgICB9IGVsc2UgaWYgKHRleHR1cmUuaXNMb2FkaW5nKVxuIHtcbiAqICAgICAgICAvLyBsaXN0ZW4gdG8gJ2xvYWRlZCcgYW5kL29yICdlcnJvcicgZXZlbnRzIG9uIHRleHR1cmVcbiAqICAgICB9IGVsc2Uge1xuICogICAgICAgIC8vIG5vdCBsb2FkaW5nLCBub3QgZ29pbmcgdG8gbG9hZCBVTkxFU1MgdGhlIHNvdXJjZSBpcyByZWxvYWRlZFxuICogICAgICAgIC8vIChpdCBtYXkgc3RpbGwgbWFrZSBzZW5zZSB0byBsaXN0ZW4gdG8gdGhlIGV2ZW50cylcbiAqICAgICB9XG4gKlxuICogQHByb3RlY3RlZFxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmxvYWRTb3VyY2UgPSBmdW5jdGlvbiAoc291cmNlKVxue1xuICAgIHZhciB3YXNMb2FkaW5nID0gdGhpcy5pc0xvYWRpbmc7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKHdhc0xvYWRpbmcgJiYgdGhpcy5zb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmVycm9yID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcblxuICAgIC8vIEFwcGx5IHNvdXJjZSBpZiBsb2FkZWQuIE90aGVyd2lzZSBzZXR1cCBhcHByb3ByaWF0ZSBsb2FkaW5nIG1vbml0b3JzLlxuICAgIGlmICgodGhpcy5zb3VyY2UuY29tcGxldGUgfHwgdGhpcy5zb3VyY2UuZ2V0Q29udGV4dCkgJiYgdGhpcy5zb3VyY2Uud2lkdGggJiYgdGhpcy5zb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFzb3VyY2UuZ2V0Q29udGV4dClcbiAgICB7XG5cbiAgICAgICAgLy8gSW1hZ2UgZmFpbCAvIG5vdCByZWFkeVxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgdmFyIHNjb3BlID0gdGhpcztcblxuICAgICAgICBzb3VyY2Uub25sb2FkID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgIHNjb3BlLmVtaXQoJ2xvYWRlZCcsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzb3VyY2Uub25lcnJvciA9IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXNjb3BlLmlzTG9hZGluZylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuZW1pdCgnZXJyb3InLCBzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUGVyIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI3RoZS1pbWctZWxlbWVudFxuICAgICAgICAvLyAgIFwiVGhlIHZhbHVlIG9mIGBjb21wbGV0ZWAgY2FuIHRodXMgY2hhbmdlIHdoaWxlIGEgc2NyaXB0IGlzIGV4ZWN1dGluZy5cIlxuICAgICAgICAvLyBTbyBjb21wbGV0ZSBuZWVkcyB0byBiZSByZS1jaGVja2VkIGFmdGVyIHRoZSBjYWxsYmFja3MgaGF2ZSBiZWVuIGFkZGVkLi5cbiAgICAgICAgLy8gTk9URTogY29tcGxldGUgd2lsbCBiZSB0cnVlIGlmIHRoZSBpbWFnZSBoYXMgbm8gc3JjIHNvIGJlc3QgdG8gY2hlY2sgaWYgdGhlIHNyYyBpcyBzZXQuXG4gICAgICAgIGlmIChzb3VyY2UuY29tcGxldGUgJiYgc291cmNlLnNyYylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gLi5hbmQgaWYgd2UncmUgY29tcGxldGUgbm93LCBubyBuZWVkIGZvciBjYWxsYmFja3NcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiBhbnkgcHJldmlvdXMgc3Vic2NyaWJlcnMgcG9zc2libGVcbiAgICAgICAgICAgICAgICBpZiAod2FzTG9hZGluZylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZCBpbnRlcm5hbGx5IHRvIHVwZGF0ZSB0aGUgd2lkdGgsIGhlaWdodCwgYW5kIHNvbWUgb3RoZXIgdHJhY2tpbmcgdmFycyBvbmNlXG4gKiBhIHNvdXJjZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuX3NvdXJjZUxvYWRlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgYmFzZSB0ZXh0dXJlXG4gKlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuaW1hZ2VVcmwpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcbiAgICAgICAgZGVsZXRlIHV0aWxzLlRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcblxuICAgICAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgICAgICBpZiAoIW5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZS5zcmMgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdGhpcy5zb3VyY2UuX3BpeGlJZF07XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsO1xuXG4gICAgdGhpcy5kaXNwb3NlKCk7XG59O1xuXG4vKipcbiAqIEZyZWVzIHRoZSB0ZXh0dXJlIGZyb20gV2ViR0wgbWVtb3J5IHdpdGhvdXQgZGVzdHJveWluZyB0aGlzIHRleHR1cmUgb2JqZWN0LlxuICogVGhpcyBtZWFucyB5b3UgY2FuIHN0aWxsIHVzZSB0aGUgdGV4dHVyZSBsYXRlciB3aGljaCB3aWxsIHVwbG9hZCBpdCB0byBHUFVcbiAqIG1lbW9yeSBhZ2Fpbi5cbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmVtaXQoJ2Rpc3Bvc2UnLCB0aGlzKTtcblxuICAgIC8vIHRoaXMgc2hvdWxkIG5vIGxvbmdlciBiZSBuZWVkZWQsIHRoZSByZW5kZXJlcnMgc2hvdWxkIGNsZWFudXAgYWxsIHRoZSBnbCB0ZXh0dXJlcy5cbiAgICAvLyB0aGlzLl9nbFRleHR1cmVzID0ge307XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHNvdXJjZSBpbWFnZSBvZiB0aGUgdGV4dHVyZS5cbiAqIFRoZSBvcmlnaW5hbCBzb3VyY2UgbXVzdCBiZSBhbiBJbWFnZSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBuZXdTcmMge3N0cmluZ30gdGhlIHBhdGggb2YgdGhlIGltYWdlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGVTb3VyY2VJbWFnZSA9IGZ1bmN0aW9uIChuZXdTcmMpXG57XG4gICAgdGhpcy5zb3VyY2Uuc3JjID0gbmV3U3JjO1xuXG4gICAgdGhpcy5sb2FkU291cmNlKHRoaXMuc291cmNlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGJhc2UgdGV4dHVyZSBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSBiYXNlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBjcmVhdGVkIGFuZCBsb2FkZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlVXJsIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gU2hvdWxkIHVzZSBhbm9ueW1vdXMgQ09SUz8gRGVmYXVsdHMgdG8gdHJ1ZSBpZiB0aGUgVVJMIGlzIG5vdCBhIGRhdGEtVVJJLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF07XG5cbiAgICBpZiAoY3Jvc3NvcmlnaW4gPT09IHVuZGVmaW5lZCAmJiBpbWFnZVVybC5pbmRleE9mKCdkYXRhOicpICE9PSAwKVxuICAgIHtcbiAgICAgICAgY3Jvc3NvcmlnaW4gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICAvLyBuZXcgSW1hZ2UoKSBicmVha3MgdGV4IGxvYWRpbmcgaW4gc29tZSB2ZXJzaW9ucyBvZiBDaHJvbWUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjM4MDcxXG4gICAgICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpOy8vZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgICAgIGlmIChjcm9zc29yaWdpbilcbiAgICAgICAge1xuICAgICAgICAgICAgaW1hZ2UuY3Jvc3NPcmlnaW4gPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGltYWdlLCBzY2FsZU1vZGUpO1xuICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IGltYWdlVXJsO1xuXG4gICAgICAgIGltYWdlLnNyYyA9IGltYWdlVXJsO1xuXG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gYmFzZVRleHR1cmU7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4gQDJ4IGF0IHRoZSBlbmQgb2YgdGhlIHVybCB3ZSBhcmUgZ29pbmcgdG8gYXNzdW1lIGl0cyBhIGhpZ2hyZXMgaW1hZ2VcbiAgICAgICAgYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHV0aWxzLmdldFJlc29sdXRpb25PZlVybChpbWFnZVVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIGlmICghY2FudmFzLl9waXhpSWQpXG4gICAge1xuICAgICAgICBjYW52YXMuX3BpeGlJZCA9ICdjYW52YXNfJyArIHV0aWxzLnVpZCgpO1xuICAgIH1cblxuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbY2FudmFzLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGNhbnZhcywgc2NhbGVNb2RlKTtcbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuIiwidmFyIEJhc2VSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbi8qKlxuICogQSBSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIFJlbmRlclRleHR1cmUgdGFrZXMgYSBzbmFwc2hvdCBvZiBhbnkgRGlzcGxheSBPYmplY3QgZ2l2ZW4gdG8gaXRzIHJlbmRlciBtZXRob2QuIFRoZSBwb3NpdGlvblxuICogYW5kIHJvdGF0aW9uIG9mIHRoZSBnaXZlbiBEaXNwbGF5IE9iamVjdHMgaXMgaWdub3JlZC4gRm9yIGV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDEwMjQsIDEwMjQsIHsgdmlldzogY2FudmFzLCByYXRpbzogMSB9KTtcbiAqIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKHNwcml0ZSk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgU3ByaXRlIGluIHRoaXMgY2FzZSB3aWxsIGJlIHJlbmRlcmVkIHRvIGEgcG9zaXRpb24gb2YgMCwwLiBUbyByZW5kZXIgdGhpcyBzcHJpdGUgYXQgaXRzIGFjdHVhbFxuICogcG9zaXRpb24gYSBDb250YWluZXIgc2hvdWxkIGJlIHVzZWQ6XG4gKlxuICogYGBganNcbiAqIHZhciBkb2MgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqXG4gKiBkb2MuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqXG4gKiByZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBSZW5kZXJUZXh0dXJlXG4gKiBAcGFyYW0gW3dpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtoZWlnaHQ9MTAwXSB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtzY2FsZU1vZGVdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIFtyZXNvbHV0aW9uPTFdIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICovXG5mdW5jdGlvbiBSZW5kZXJUZXh0dXJlKGJhc2VSZW5kZXJUZXh0dXJlLCBmcmFtZSlcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIFJlbmRlclRleHR1cmUsIHlvdSBtdXN0IHBhc3MgYSByZW5kZXJlciBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIG9iamVjdCB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtCYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICBUZXh0dXJlLmNhbGwodGhpcyxcbiAgICAgICAgYmFzZVJlbmRlclRleHR1cmUsXG4gICAgICAgIGZyYW1lIFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fdXBkYXRlVXZzKCk7XG59XG5cblJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlLnByb3RvdHlwZSk7XG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgUmVuZGVyVGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gdXBkYXRlQmFzZSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBiYXNlVGV4dHVyZS53aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBiZSByZXNpemVkIGFzIHdlbGw/XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB1cGRhdGVCYXNlKVxue1xuICAgXG4gICAgLy9UT0RPIC0gY291bGQgYmUgbm90IHJlcXVpcmVkLi5cbiAgICB0aGlzLnZhbGlkID0gKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTtcblxuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy5jcm9wLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jcm9wLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh1cGRhdGVCYXNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5yZXNpemUod2lkdGgsIGhlaWdodClcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLmNsZWFyKHRoaXMuZnJhbWUpXG4gICAgXG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5iYXNlVGV4dHVyZS5yZW5kZXIodGhpcy5mcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIHRoaXMgdGV4dHVyZS4gSXQgd29ya3MgYnkgY2FsbGluZyBSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0QmFzZTY0LmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0Q2FudmFzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRDYW52YXModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgdGhlIGVudGlyZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbHModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgYSBwaXhlbCB3aXRoaW4gdGhlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbCh0aGlzLmZyYW1lLCB4LCB5KTtcbn07XG5cblJlbmRlclRleHR1cmUuY3JlYXRlID0gZnVuY3Rpb24ocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICByZXR1cm4gbmV3IFJlbmRlclRleHR1cmUobmV3IEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pKTtcbn1cblxuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzID0gcmVxdWlyZSgnLi9UZXh0dXJlVXZzJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZSBvciBwYXJ0IG9mIGFuIGltYWdlLiBJdCBjYW5ub3QgYmUgYWRkZWRcbiAqIHRvIHRoZSBkaXNwbGF5IGxpc3QgZGlyZWN0bHkuIEluc3RlYWQgdXNlIGl0IGFzIHRoZSB0ZXh0dXJlIGZvciBhIFNwcml0ZS4gSWYgbm8gZnJhbWUgaXMgcHJvdmlkZWQgdGhlbiB0aGUgd2hvbGUgaW1hZ2UgaXMgdXNlZC5cbiAqXG4gKiBZb3UgY2FuIGRpcmVjdGx5IGNyZWF0ZSBhIHRleHR1cmUgZnJvbSBhbiBpbWFnZSBhbmQgdGhlbiByZXVzZSBpdCBtdWx0aXBsZSB0aW1lcyBsaWtlIHRoaXMgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIHZhciBzcHJpdGUxID0gbmV3IFBJWEkuU3ByaXRlKHRleHR1cmUpO1xuICogdmFyIHNwcml0ZTIgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gYmFzZVRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV9IFRoZSBiYXNlIHRleHR1cmUgc291cmNlIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZSBmcm9tXG4gKiBAcGFyYW0gW2ZyYW1lXSB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5nbGUgZnJhbWUgb2YgdGhlIHRleHR1cmUgdG8gc2hvd1xuICogQHBhcmFtIFtjcm9wXSB7UElYSS5SZWN0YW5nbGV9IFRoZSBhcmVhIG9mIG9yaWdpbmFsIHRleHR1cmVcbiAqIEBwYXJhbSBbdHJpbV0ge1BJWEkuUmVjdGFuZ2xlfSBUcmltbWVkIHRleHR1cmUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gW3JvdGF0ZV0ge2Jvb2xlYW59IGluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXMgKCB1c2VkIGJ5IHRleHR1cmUgcGFja2VyIClcbiAqL1xuZnVuY3Rpb24gVGV4dHVyZShiYXNlVGV4dHVyZSwgZnJhbWUsIGNyb3AsIHRyaW0sIHJvdGF0ZSlcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIERvZXMgdGhpcyBUZXh0dXJlIGhhdmUgYW55IGZyYW1lIGRhdGEgYXNzaWduZWQgdG8gaXQ/XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubm9GcmFtZSA9IGZhbHNlO1xuXG4gICAgaWYgKCFmcmFtZSlcbiAgICB7XG4gICAgICAgIHRoaXMubm9GcmFtZSA9IHRydWU7XG4gICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuICAgIH1cblxuICAgIGlmIChiYXNlVGV4dHVyZSBpbnN0YW5jZW9mIFRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmFzZVRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy5iYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdHJpbSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy50cmltID0gdHJpbTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgdGhlIHJlbmRlcmVyIGtub3cgaWYgdGhlIHRleHR1cmUgaXMgdmFsaWQuIElmIGl0J3Mgbm90IHRoZW4gaXQgY2Fubm90IGJlIHJlbmRlcmVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHdpbGwgbGV0IGEgcmVuZGVyZXIga25vdyB0aGF0IGEgdGV4dHVyZSBoYXMgYmVlbiB1cGRhdGVkICh1c2VkIG1haW5seSBmb3Igd2ViR0wgdXYgdXBkYXRlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXF1aXJlc1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFdlYkdMIFVWIGRhdGEgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0dXJlIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIGFyZWEgb2YgdGhlIEJhc2VUZXh0dXJlIGltYWdlIHRvIGFjdHVhbGx5IGNvcHkgdG8gdGhlIENhbnZhcyAvIFdlYkdMIHdoZW4gcmVuZGVyaW5nLFxuICAgICAqIGlycmVzcGVjdGl2ZSBvZiB0aGUgYWN0dWFsIGZyYW1lIHNpemUgb3IgcGxhY2VtZW50ICh3aGljaCBjYW4gYmUgaW5mbHVlbmNlZCBieSB0cmltbWVkIHRleHR1cmUgYXRsYXNlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3JvcCA9IGNyb3AgfHwgZnJhbWU7Ly9uZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgcm90YXRlZCBieSA5MCBkZWdyZWVzXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb3RhdGUgPSAhIXJvdGF0ZTtcblxuICAgIGlmIChiYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICBmcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gZnJhbWUgd2Ugc2hvdWxkIG1vbml0b3IgZm9yIGFueSBiYXNlIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5vbigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZS5vbmNlKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZC4gVGhpcyBoYXBwZW5zIGlmIHRoZSBmcmFtZSBvciB0aGUgYmFzZVRleHR1cmUgaXMgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBldmVudCB1cGRhdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0dXJlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqL1xuICAgIGZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBmcmFtZTtcblxuICAgICAgICAgICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHRoaXMud2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMudHJpbSAmJiAhdGhpcy5yb3RhdGUgJiYgKGZyYW1lLnggKyBmcmFtZS53aWR0aCA+IHRoaXMuYmFzZVRleHR1cmUud2lkdGggfHwgZnJhbWUueSArIGZyYW1lLmhlaWdodCA+IHRoaXMuYmFzZVRleHR1cmUuaGVpZ2h0KSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHR1cmUgRXJyb3I6IGZyYW1lIGRvZXMgbm90IGZpdCBpbnNpZGUgdGhlIGJhc2UgVGV4dHVyZSBkaW1lbnNpb25zICcgKyB0aGlzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy90aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuc291cmNlICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuICAgICAgICAgICAgdGhpcy52YWxpZCA9IGZyYW1lICYmIGZyYW1lLndpZHRoICYmIGZyYW1lLmhlaWdodCAmJiB0aGlzLmJhc2VUZXh0dXJlLmhhc0xvYWRlZDtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJpbSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy50cmltLmhlaWdodDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS53aWR0aCA9IHRoaXMudHJpbS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JvcCA9IGZyYW1lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy52YWxpZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVVdnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhpcyB0ZXh0dXJlIG9uIHRoZSBncHUuXG4gKlxuICovXG5UZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYmFzZVRleHR1cmUudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgbG9hZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZUxvYWRlZCA9IGZ1bmN0aW9uIChiYXNlVGV4dHVyZSlcbntcbiAgICAvLyBUT0RPIHRoaXMgY29kZSBsb29rcyBjb25mdXNpbmcuLiBib28gdG8gYWJ1c2luZyBnZXR0ZXJzIGFuZCBzZXR0ZXJzcyFcbiAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMuX2ZyYW1lO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgdXBkYXRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLm9uQmFzZVRleHR1cmVVcGRhdGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZT1mYWxzZV0ge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZSlcbntcbiAgICBpZiAodGhpcy5iYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGlmIChkZXN0cm95QmFzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2ZyYW1lID0gbnVsbDtcbiAgICB0aGlzLl91dnMgPSBudWxsO1xuICAgIHRoaXMudHJpbSA9IG51bGw7XG4gICAgdGhpcy5jcm9wID0gbnVsbDtcblxuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIHRoaXMub2ZmKCdkaXNwb3NlJywgdGhpcy5kaXNwb3NlLCB0aGlzKTtcbiAgICB0aGlzLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRleHR1cmUgb2JqZWN0IHRoYXQgYWN0cyB0aGUgc2FtZSBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9XG4gKi9cblRleHR1cmUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUodGhpcy5iYXNlVGV4dHVyZSwgdGhpcy5mcmFtZSwgdGhpcy5jcm9wLCB0aGlzLnRyaW0sIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuX3VwZGF0ZVV2cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLl91dnMpXG4gICAge1xuICAgICAgICB0aGlzLl91dnMgPSBuZXcgVGV4dHVyZVV2cygpO1xuICAgIH1cblxuICAgIHRoaXMuX3V2cy5zZXQodGhpcy5jcm9wLCB0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLnJvdGF0ZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBUZXh0dXJlIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGNyb3Nzb3JpZ2luIHtib29sZWFufSBXaGV0aGVyIHJlcXVlc3RzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGNyb3Nzb3JpZ2luXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbiAgICAgICAgdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXSA9IHRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZScpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhcywgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW8ge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAodHlwZW9mIHZpZGVvID09PSAnc3RyaW5nJylcbiAgICB7XG4gICAgICAgIHJldHVybiBUZXh0dXJlLmZyb21WaWRlb1VybCh2aWRlbywgc2NhbGVNb2RlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgdmlkZW8gdXJsLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1VybCB7c3RyaW5nfVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gQSBUZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbVZpZGVvVXJsID0gZnVuY3Rpb24gKHZpZGVvVXJsLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh2aWRlb1VybCwgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEFkZHMgYSB0ZXh0dXJlIHRvIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLiBUaGlzIGNhY2hlIGlzIHNoYXJlZCBhY3Jvc3MgdGhlIHdob2xlIFBJWEkgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSBUZXh0dXJlIHRvIGFkZCB0byB0aGUgY2FjaGUuXG4gKiBAcGFyYW0gaWQge3N0cmluZ30gVGhlIGlkIHRoYXQgdGhlIHRleHR1cmUgd2lsbCBiZSBzdG9yZWQgYWdhaW5zdC5cbiAqL1xuVGV4dHVyZS5hZGRUZXh0dXJlVG9DYWNoZSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBpZClcbntcbiAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdID0gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgdGV4dHVyZSBmcm9tIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgb2YgdGhlIHRleHR1cmUgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0aGF0IHdhcyByZW1vdmVkXG4gKi9cblRleHR1cmUucmVtb3ZlVGV4dHVyZUZyb21DYWNoZSA9IGZ1bmN0aW9uIChpZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtpZF07XG5cbiAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcbiAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpZF07XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogQW4gZW1wdHkgdGV4dHVyZSwgdXNlZCBvZnRlbiB0byBub3QgaGF2ZSB0byBjcmVhdGUgbXVsdGlwbGUgZW1wdHkgdGV4dHVyZXMuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmUuRU1QVFkgPSBuZXcgVGV4dHVyZShuZXcgQmFzZVRleHR1cmUoKSk7XG4iLCJcbi8qKlxuICogQSBzdGFuZGFyZCBvYmplY3QgdG8gc3RvcmUgdGhlIFV2cyBvZiBhIHRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBUZXh0dXJlVXZzKClcbntcbiAgICB0aGlzLngwID0gMDtcbiAgICB0aGlzLnkwID0gMDtcblxuICAgIHRoaXMueDEgPSAxO1xuICAgIHRoaXMueTEgPSAwO1xuXG4gICAgdGhpcy54MiA9IDE7XG4gICAgdGhpcy55MiA9IDE7XG5cbiAgICB0aGlzLngzID0gMDtcbiAgICB0aGlzLnkzID0gMTtcblxuICAgIHRoaXMueHkwX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTFfdWludDMyID0gMDtcbiAgICB0aGlzLnh5Ml91aW50MzIgPSAwO1xuICAgIHRoaXMueHkzX3VpbnQzMiA9IDA7XG5cbiAgICB0aGlzLnV2c191aW50MzIgPSBuZXcgVWludDMyQXJyYXkoNClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlVXZzO1xuXG4vKipcbiAqIFNldHMgdGhlIHRleHR1cmUgVXZzIGJhc2VkIG9uIHRoZSBnaXZlbiBmcmFtZSBpbmZvcm1hdGlvblxuICogQHBhcmFtIGZyYW1lIHtQSVhJLlJlY3RhbmdsZX1cbiAqIEBwYXJhbSBiYXNlRnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIHJvdGF0ZSB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIGZyYW1lIGlzIHJvdGF0ZWRcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmVVdnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChmcmFtZSwgYmFzZUZyYW1lLCByb3RhdGUpXG57XG4gICAgdmFyIHR3ID0gYmFzZUZyYW1lLndpZHRoO1xuICAgIHZhciB0aCA9IGJhc2VGcmFtZS5oZWlnaHQ7XG5cbiAgICBpZihyb3RhdGUpXG4gICAge1xuICAgICAgICB0aGlzLngwID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUuaGVpZ2h0KSAvIHR3O1xuICAgICAgICB0aGlzLnkxID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkyID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gZnJhbWUueSAvIHRoO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMueDAgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MiA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gKGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQpIC8gdGg7XG4gICAgfVxuXG4gICAgdGhpcy51dnNfdWludDMyWzBdID0gKCgodGhpcy55MCAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngwICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbMV0gPSAoKCh0aGlzLnkxICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDEgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsyXSA9ICgoKHRoaXMueTIgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MiAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzNdID0gKCgodGhpcy55MyAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngzICogNjU1MzUpICYgMHhGRkZGKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBvZiBhIFtwbGF5aW5nXSBWaWRlby5cbiAqXG4gKiBWaWRlbyBiYXNlIHRleHR1cmVzIG1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kIGluIHRoZWlyIGNyZWF0aW9uIHByb2Nlc3MuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZCBpbiBzZXZlcmFsIHdheXMsIHN1Y2ggYXM6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwoJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0Jyk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh7IHNyYzogJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoWycvdmlkZW8ud2VibScsICcvdmlkZW8ubXA0J10pO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzKFtcbiAqICAgICB7IHNyYzogJy92aWRlby53ZWJtJywgbWltZTogJ3ZpZGVvL3dlYm0nIH0sXG4gKiAgICAgeyBzcmM6ICcvdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfVxuICogXSk7XG4gKiBgYGBcbiAqXG4gKiBTZWUgdGhlIFtcImRldXNcIiBkZW1vXShodHRwOi8vd3d3Lmdvb2Rib3lkaWdpdGFsLmNvbS9waXhpanMvZXhhbXBsZXMvZGV1cy8pLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5CYXNlVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzb3VyY2Uge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIFZpZGVvQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFzb3VyY2UpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHZpZGVvIHNvdXJjZSBlbGVtZW50IHNwZWNpZmllZC4nKTtcbiAgICB9XG5cbiAgICAvLyBob29rIGluIGhlcmUgdG8gY2hlY2sgaWYgdmlkZW8gaXMgYWxyZWFkeSBhdmFpbGFibGUuXG4gICAgLy8gQmFzZVRleHR1cmUgbG9va3MgZm9yIGEgc291cmNlLmNvbXBsZXRlIGJvb2xlYW4sIHBsdXMgd2lkdGggJiBoZWlnaHQuXG5cbiAgICBpZiAoKHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9FTk9VR0hfREFUQSB8fCBzb3VyY2UucmVhZHlTdGF0ZSA9PT0gc291cmNlLkhBVkVfRlVUVVJFX0RBVEEpICYmIHNvdXJjZS53aWR0aCAmJiBzb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgc291cmNlLmNvbXBsZXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBCYXNlVGV4dHVyZS5jYWxsKHRoaXMsIHNvdXJjZSwgc2NhbGVNb2RlKTtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCB0aGUgYmFzZSB0ZXh0dXJlIGF1dG9tYXRpY2FsbHkgdXBkYXRlIGl0c2VsZiwgc2V0IHRvIHRydWUgYnkgZGVmYXVsdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG5cbiAgICB0aGlzLl9vblVwZGF0ZSA9IHRoaXMuX29uVXBkYXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fb25DYW5QbGF5ID0gdGhpcy5fb25DYW5QbGF5LmJpbmQodGhpcyk7XG5cbiAgICBpZiAoIXNvdXJjZS5jb21wbGV0ZSlcbiAgICB7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgdGhpcy5fb25DYW5QbGF5KTtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICAvLyBzdGFydGVkIHBsYXlpbmcuLlxuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX29uUGxheVN0YXJ0LmJpbmQodGhpcykpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9vblBsYXlTdG9wLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHRoaXMuX19sb2FkZWQgPSBmYWxzZTtcbn1cblxuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZpZGVvQmFzZVRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFZpZGVvQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVGhlIGludGVybmFsIHVwZGF0ZSBsb29wIG9mIHRoZSB2aWRlbyBiYXNlIHRleHR1cmUsIG9ubHkgcnVucyB3aGVuIGF1dG9VcGRhdGUgaXMgc2V0IHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25VcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJ1bnMgdGhlIHVwZGF0ZSBsb29wIHdoZW4gdGhlIHZpZGVvIGlzIHJlYWR5IHRvIHBsYXlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5hdXRvVXBkYXRlKVxuICAgIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9vblVwZGF0ZSk7XG4gICAgICAgIHRoaXMuYXV0b1VwZGF0ZSA9IHRydWU7XG4gICAgfVxufTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIGEgcGF1c2UgZXZlbnQgaXMgdHJpZ2dlcmVkLCBzdG9wcyB0aGUgdXBkYXRlIGxvb3BcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gdGhlIHZpZGVvIGlzIGxvYWRlZCBhbmQgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vbkNhblBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX29uQ2FuUGxheSk7XG5cbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuc291cmNlLnZpZGVvV2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5zb3VyY2UudmlkZW9IZWlnaHQ7XG5cbiAgICAgICAgdGhpcy5zb3VyY2UucGxheSgpO1xuXG4gICAgICAgIC8vIHByZXZlbnQgbXVsdGlwbGUgbG9hZGVkIGRpc3BhdGNoZXMuLlxuICAgICAgICBpZiAoIXRoaXMuX19sb2FkZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX19sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5zb3VyY2UuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB0aGlzLnNvdXJjZS5fcGl4aUlkIF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNvdXJjZS5fcGl4aUlkO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIE1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlZpZGVvQmFzZVRleHR1cmV9XG4gKi9cblZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvID0gZnVuY3Rpb24gKHZpZGVvLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCF2aWRlby5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgdmlkZW8uX3BpeGlJZCA9ICd2aWRlb18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt2aWRlby5fcGl4aUlkXTtcblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBWaWRlb0Jhc2VUZXh0dXJlKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB2aWRlby5fcGl4aUlkIF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgQmFzZVRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIHZpZGVvIGVsZW1lbnQuXG4gKiBUaGlzIEJhc2VUZXh0dXJlIGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIGEgdGV4dHVyZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1NyYyB7c3RyaW5nfG9iamVjdHxzdHJpbmdbXXxvYmplY3RbXX0gVGhlIFVSTChzKSBmb3IgdGhlIHZpZGVvLlxuICogQHBhcmFtIFt2aWRlb1NyYy5zcmNdIHtzdHJpbmd9IE9uZSBvZiB0aGUgc291cmNlIHVybHMgZm9yIHRoZSB2aWRlb1xuICogQHBhcmFtIFt2aWRlb1NyYy5taW1lXSB7c3RyaW5nfSBUaGUgbWltZXR5cGUgb2YgdGhlIHZpZGVvIChlLmcuICd2aWRlby9tcDQnKS4gSWYgbm90IHNwZWNpZmllZFxuICogIHRoZSB1cmwncyBleHRlbnNpb24gd2lsbCBiZSB1c2VkIGFzIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgbWltZSB0eXBlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsID0gZnVuY3Rpb24gKHZpZGVvU3JjLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcblxuICAgIC8vIGFycmF5IG9mIG9iamVjdHMgb3Igc3RyaW5nc1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZpZGVvU3JjKSlcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlkZW9TcmMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyY1tpXS5zcmMgfHwgdmlkZW9TcmNbaV0sIHZpZGVvU3JjW2ldLm1pbWUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzaW5nbGUgb2JqZWN0IG9yIHN0cmluZ1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyYy5zcmMgfHwgdmlkZW9TcmMsIHZpZGVvU3JjLm1pbWUpKTtcbiAgICB9XG5cbiAgICB2aWRlby5sb2FkKCk7XG4gICAgdmlkZW8ucGxheSgpO1xuXG4gICAgcmV0dXJuIFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpO1xufTtcblxuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyA9IFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybDtcblxuZnVuY3Rpb24gY3JlYXRlU291cmNlKHBhdGgsIHR5cGUpXG57XG4gICAgaWYgKCF0eXBlKVxuICAgIHtcbiAgICAgICAgdHlwZSA9ICd2aWRlby8nICsgcGF0aC5zdWJzdHIocGF0aC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpO1xuXG4gICAgc291cmNlLnNyYyA9IHBhdGg7XG4gICAgc291cmNlLnR5cGUgPSB0eXBlO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn1cbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIC8vIEludGVybmFsIGV2ZW50IHVzZWQgYnkgY29tcG9zZWQgZW1pdHRlclxuICAgIFRJQ0sgPSAndGljayc7XG5cbi8qKlxuICogQSBUaWNrZXIgY2xhc3MgdGhhdCBydW5zIGFuIHVwZGF0ZSBsb29wIHRoYXQgb3RoZXIgb2JqZWN0cyBsaXN0ZW4gdG8uXG4gKiBUaGlzIGNsYXNzIGlzIGNvbXBvc2VkIGFyb3VuZCBhbiBFdmVudEVtaXR0ZXIgb2JqZWN0IHRvIGFkZCBsaXN0ZW5lcnNcbiAqIG1lYW50IGZvciBleGVjdXRpb24gb24gdGhlIG5leHQgcmVxdWVzdGVkIGFuaW1hdGlvbiBmcmFtZS5cbiAqIEFuaW1hdGlvbiBmcmFtZXMgYXJlIHJlcXVlc3RlZCBvbmx5IHdoZW4gbmVjZXNzYXJ5LFxuICogZS5nLiBXaGVuIHRoZSB0aWNrZXIgaXMgc3RhcnRlZCBhbmQgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlclxuICovXG5mdW5jdGlvbiBUaWNrZXIoKVxue1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0aWNrIG1ldGhvZCBib3VuZCB0byB0aWNrZXIgaW5zdGFuY2UuXG4gICAgICogVGhpcyBpcyBiZWNhdXNlIGluIGVhcmx5IDIwMTUsIEZ1bmN0aW9uLmJpbmRcbiAgICAgKiBpcyBzdGlsbCA2MCUgc2xvd2VyIGluIGhpZ2ggcGVyZm9ybWFuY2Ugc2NlbmFyaW9zLlxuICAgICAqIEFsc28gc2VwYXJhdGluZyBmcmFtZSByZXF1ZXN0cyBmcm9tIHVwZGF0ZSBtZXRob2RcbiAgICAgKiBzbyBsaXN0ZW5lcnMgbWF5IGJlIGNhbGxlZCBhdCBhbnkgdGltZSBhbmQgd2l0aFxuICAgICAqIGFueSBhbmltYXRpb24gQVBJLCBqdXN0IGludm9rZSB0aWNrZXIudXBkYXRlKHRpbWUpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90aWNrID0gZnVuY3Rpb24gX3RpY2sodGltZSkge1xuXG4gICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgICAgIGlmIChfdGhpcy5zdGFydGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBJbnZva2UgbGlzdGVuZXJzIG5vd1xuICAgICAgICAgICAgX3RoaXMudXBkYXRlKHRpbWUpO1xuICAgICAgICAgICAgLy8gTGlzdGVuZXIgc2lkZSBlZmZlY3RzIG1heSBoYXZlIG1vZGlmaWVkIHRpY2tlciBzdGF0ZS5cbiAgICAgICAgICAgIGlmIChfdGhpcy5zdGFydGVkICYmIF90aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgX3RoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMuX3RpY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGVtaXR0ZXIgdXNlZCB0byBmaXJlICd0aWNrJyBldmVudFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGN1cnJlbnQgZnJhbWUgcmVxdWVzdCBJRFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHZhbHVlIG1hbmFnZWQgYnkgbWluRlBTIHByb3BlcnR5IHNldHRlciBhbmQgZ2V0dGVyLlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gYWxsb3dlZCBtaWxsaXNlY29uZHMgYmV0d2VlbiB1cGRhdGVzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4RWxhcHNlZE1TID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhpcyB0aWNrZXIgc2hvdWxkIGludm9rZSB0aGUgbWV0aG9kXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdGFydH0gYXV0b21hdGljYWxseVxuICAgICAqIHdoZW4gYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9TdGFydCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2NhbGFyIHRpbWUgdmFsdWUgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgc2V0dGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI21pbkZQU31cbiAgICAgKiBhbmQgaXMgc2NhbGVkIHdpdGgge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0uXG4gICAgICogKipOb3RlOioqIFRoZSBjYXAgbWF5IGJlIGV4Y2VlZGVkIGJ5IHNjYWxpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZGVsdGFUaW1lID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRpbWUgZWxhcHNlZCBpbiBtaWxsaXNlY29uZHMgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogT3Bwb3NlZCB0byB3aGF0IHRoZSBzY2FsYXIge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9XG4gICAgICogaXMgYmFzZWQsIHRoaXMgdmFsdWUgaXMgbmVpdGhlciBjYXBwZWQgbm9yIHNjYWxlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEgLyBUQVJHRVRfRlBNU1xuICAgICAqL1xuICAgIHRoaXMuZWxhcHNlZE1TID0gMSAvIENPTlNULlRBUkdFVF9GUE1TOyAvLyBkZWZhdWx0IHRvIHRhcmdldCBmcmFtZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCB0aW1lIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjdXBkYXRlfSB3YXMgaW52b2tlZC5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGFsc28gcmVzZXQgaW50ZXJuYWxseSBvdXRzaWRlIG9mIGludm9raW5nXG4gICAgICogdXBkYXRlLCBidXQgb25seSB3aGVuIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gICAgICogSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERPTUhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgICogdGhpcyB2YWx1ZSB3aWxsIGhhdmUgYSBwcmVjaXNpb24gb2YgMSDCtXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5sYXN0VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBGYWN0b3Igb2YgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBTY2FsZXMgdGlja2VyLmRlbHRhVGltZSB0byB3aGF0IHdvdWxkIGJlXG4gICAgICogLy8gdGhlIGVxdWl2YWxlbnQgb2YgYXBwcm94aW1hdGVseSAxMjAgRlBTXG4gICAgICogdGlja2VyLnNwZWVkID0gMjtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5zcGVlZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBoYXMgYmVlbiBzdGFydGVkLlxuICAgICAqIGB0cnVlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogYGZhbHNlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0b3B9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBXaGlsZSBgZmFsc2VgLCB0aGlzIHZhbHVlIG1heSBjaGFuZ2UgdG8gYHRydWVgIGluIHRoZVxuICAgICAqIGV2ZW50IG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBiZWluZyBgdHJ1ZWBcbiAgICAgKiBhbmQgYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlja2VyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZXMgcGVyIHNlY29uZCBhdCB3aGljaCB0aGlzIHRpY2tlciBpcyBydW5uaW5nLlxuICAgICAqIFRoZSBkZWZhdWx0IGlzIGFwcHJveGltYXRlbHkgNjAgaW4gbW9zdCBtb2Rlcm4gYnJvd3NlcnMuXG4gICAgICogKipOb3RlOioqIFRoaXMgZG9lcyBub3QgZmFjdG9yIGluIHRoZSB2YWx1ZSBvZlxuICAgICAqIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3BlZWR9LCB3aGljaCBpcyBzcGVjaWZpY1xuICAgICAqIHRvIHNjYWxpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuZWxhcHNlZE1TO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIG1pbGxpc2Vjb25kcyBhbGxvd2VkIHRvXG4gICAgICogZWxhcHNlIGJldHdlZW4gaW52b2tpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9LlxuICAgICAqIFRoaXMgdmFsdWUgaXMgdXNlZCB0byBjYXAge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICAgICAqIGJ1dCBkb2VzIG5vdCBlZmZlY3QgdGhlIG1lYXN1cmVkIHZhbHVlIG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjRlBTfS5cbiAgICAgKiBXaGVuIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSBpdCBpcyBjbGFtcGVkIHRvIGEgdmFsdWUgYmV0d2VlblxuICAgICAqIGAwYCBhbmQgYFBJWEkuVEFSR0VUX0ZQTVMgKiAxMDAwYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSS50aWNrZXIuVGlja2VyI1xuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgbWluRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuX21heEVsYXBzZWRNUztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbihmcHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIENsYW1wOiAwIHRvIFRBUkdFVF9GUE1TXG4gICAgICAgICAgICB2YXIgbWluRlBNUyA9IE1hdGgubWluKE1hdGgubWF4KDAsIGZwcykgLyAxMDAwLCBDT05TVC5UQVJHRVRfRlBNUyk7XG4gICAgICAgICAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxIC8gbWluRlBNUztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lLlxuICogSWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHkgYmVlbiByZXF1ZXN0ZWQsIGFuZCBpZiB0aGUgaW50ZXJuYWxcbiAqIGVtaXR0ZXIgaGFzIGxpc3RlbmVycywgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3JlcXVlc3RJZk5lZWRlZCA9IGZ1bmN0aW9uIF9yZXF1ZXN0SWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICAvLyBlbnN1cmUgY2FsbGJhY2tzIGdldCBjb3JyZWN0IGRlbHRhXG4gICAgICAgIHRoaXMubGFzdFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX3RpY2spO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSBjYW5jZWxzIGEgcGVuZGluZyBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fY2FuY2VsSWZOZWVkZWQgPSBmdW5jdGlvbiBfY2FuY2VsSWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgIT09IG51bGwpXG4gICAge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZXF1ZXN0SWQpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiB0aGUgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQgaXQgY2hlY2tzIGlmIGEgZnJhbWUgaGFzIG5vdCBhbHJlYWR5XG4gKiBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbCBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMuIElmIHRoZXNlXG4gKiBjb25kaXRpb25zIGFyZSBtZXQsIGEgbmV3IGZyYW1lIGlzIHJlcXVlc3RlZC4gSWYgdGhlIHRpY2tlciBoYXMgbm90XG4gKiBiZWVuIHN0YXJ0ZWQsIGJ1dCBhdXRvU3RhcnQgaXMgYHRydWVgLCB0aGVuIHRoZSB0aWNrZXIgc3RhcnRzIG5vdyxcbiAqIGFuZCBjb250aW51ZXMgd2l0aCB0aGUgcHJldmlvdXMgY29uZGl0aW9ucyB0byByZXF1ZXN0IGEgbmV3IGZyYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3N0YXJ0SWZQb3NzaWJsZSA9IGZ1bmN0aW9uIF9zdGFydElmUG9zc2libGUoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5hdXRvU3RhcnQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29ufSBpbnRlcm5hbGx5IGZvciB0aGVcbiAqIGludGVybmFsICd0aWNrJyBldmVudC4gSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsXG4gKiBhbmQgaWYgc28gaXQgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGF0IHRoaXMgcG9pbnQuXG4gKlxuICogQHBhcmFtIGZuIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGFkZGVkIGZvciB1cGRhdGVzXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbihUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29uY2V9IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIG9uZSB1cGRhdGVcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZE9uY2UgPSBmdW5jdGlvbiBhZGRPbmNlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub25jZShUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29mZn0gaW50ZXJuYWxseSBmb3IgJ3RpY2snIGV2ZW50LlxuICogSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMgZm9yICd0aWNrJyBldmVudC5cbiAqIElmIGl0IGRvZXMsIHRoZW4gaXQgY2FuY2VscyB0aGUgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwYXJhbSBbZm5dIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIHJlbW92ZWRcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dCB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub2ZmKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIGlmICghdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgbGlzdGVuZXJzXG4gKiBhIG5ldyBhbmltYXRpb24gZnJhbWUgaXMgcmVxdWVzdGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiBzdGFydCgpXG57XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSB0aWNrZXIuIElmIHRoZSB0aWNrZXIgaGFzIHJlcXVlc3RlZFxuICogYW4gYW5pbWF0aW9uIGZyYW1lIGl0IGlzIGNhbmNlbGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uIHN0b3AoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2FuY2VsSWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRyaWdnZXJzIGFuIHVwZGF0ZS4gQW4gdXBkYXRlIGVudGFpbHMgc2V0dGluZyB0aGVcbiAqIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNlbGFwc2VkTVN9LFxuICogdGhlIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICogaW52b2tpbmcgYWxsIGxpc3RlbmVycyB3aXRoIGN1cnJlbnQgZGVsdGFUaW1lLFxuICogYW5kIHRoZW4gZmluYWxseSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbGFzdFRpbWV9XG4gKiB3aXRoIHRoZSB2YWx1ZSBvZiBjdXJyZW50VGltZSB0aGF0IHdhcyBwcm92aWRlZC5cbiAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgYW5pbWF0aW9uXG4gKiBmcmFtZSBjYWxsYmFja3MgaWYgdGhlIHRpY2tlciBpbnN0YW5jZSBoYXMgYmVlbiBzdGFydGVkXG4gKiBhbmQgbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqXG4gKiBAcGFyYW0gW2N1cnJlbnRUaW1lPXBlcmZvcm1hbmNlLm5vdygpXSB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9IHRoZSBjdXJyZW50IHRpbWUgb2YgZXhlY3V0aW9uXG4gKi9cblRpY2tlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKGN1cnJlbnRUaW1lKVxue1xuICAgIHZhciBlbGFwc2VkTVM7XG5cbiAgICAvLyBBbGxvdyBjYWxsaW5nIHVwZGF0ZSBkaXJlY3RseSB3aXRoIGRlZmF1bHQgY3VycmVudFRpbWUuXG4gICAgY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSB8fCBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAvLyBTYXZlIHVuY2FwcGVkIGVsYXBzZWRNUyBmb3IgbWVhc3VyZW1lbnRcbiAgICBlbGFwc2VkTVMgPSB0aGlzLmVsYXBzZWRNUyA9IGN1cnJlbnRUaW1lIC0gdGhpcy5sYXN0VGltZTtcblxuICAgIC8vIGNhcCB0aGUgbWlsbGlzZWNvbmRzIGVsYXBzZWQgdXNlZCBmb3IgZGVsdGFUaW1lXG4gICAgaWYgKGVsYXBzZWRNUyA+IHRoaXMuX21heEVsYXBzZWRNUylcbiAgICB7XG4gICAgICAgIGVsYXBzZWRNUyA9IHRoaXMuX21heEVsYXBzZWRNUztcbiAgICB9XG5cbiAgICB0aGlzLmRlbHRhVGltZSA9IGVsYXBzZWRNUyAqIENPTlNULlRBUkdFVF9GUE1TICogdGhpcy5zcGVlZDtcblxuICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgYWRkZWQgdG8gaW50ZXJuYWwgZW1pdHRlclxuICAgIHRoaXMuX2VtaXR0ZXIuZW1pdChUSUNLLCB0aGlzLmRlbHRhVGltZSk7XG5cbiAgICB0aGlzLmxhc3RUaW1lID0gY3VycmVudFRpbWU7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRpY2tlcjtcbiIsInZhciBUaWNrZXIgPSByZXF1aXJlKCcuL1RpY2tlcicpO1xuXG4vKipcbiAqIFRoZSBzaGFyZWQgdGlja2VyIGluc3RhbmNlIHVzZWQgYnkge0BsaW5rIFBJWEkuZXh0cmFzLk1vdmllQ2xpcH0uXG4gKiBhbmQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqIFRoZSBwcm9wZXJ0eSB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2F1dG9TdGFydH0gaXMgc2V0IHRvIGB0cnVlYFxuICogZm9yIHRoaXMgaW5zdGFuY2UuIFBsZWFzZSBmb2xsb3cgdGhlIGV4YW1wbGVzIGZvciB1c2FnZSwgaW5jbHVkaW5nXG4gKiBob3cgdG8gb3B0LW91dCBvZiBhdXRvLXN0YXJ0aW5nIHRoZSBzaGFyZWQgdGlja2VyLlxuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgdGlja2VyID0gUElYSS50aWNrZXIuc2hhcmVkO1xuICogLy8gU2V0IHRoaXMgdG8gcHJldmVudCBzdGFydGluZyB0aGlzIHRpY2tlciB3aGVuIGxpc3RlbmVycyBhcmUgYWRkZWQuXG4gKiAvLyBCeSBkZWZhdWx0IHRoaXMgaXMgdHJ1ZSBvbmx5IGZvciB0aGUgUElYSS50aWNrZXIuc2hhcmVkIGluc3RhbmNlLlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogLy8gRllJLCBjYWxsIHRoaXMgdG8gZW5zdXJlIHRoZSB0aWNrZXIgaXMgc3RvcHBlZC4gSXQgc2hvdWxkIGJlIHN0b3BwZWRcbiAqIC8vIGlmIHlvdSBoYXZlIG5vdCBhdHRlbXB0ZWQgdG8gcmVuZGVyIGFueXRoaW5nIHlldC5cbiAqIHRpY2tlci5zdG9wKCk7XG4gKiAvLyBDYWxsIHRoaXMgd2hlbiB5b3UgYXJlIHJlYWR5IGZvciBhIHJ1bm5pbmcgc2hhcmVkIHRpY2tlci5cbiAqIHRpY2tlci5zdGFydCgpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBZb3UgbWF5IHVzZSB0aGUgc2hhcmVkIHRpY2tlciB0byByZW5kZXIuLi5cbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDgwMCwgNjAwKTtcbiAqIHZhciBzdGFnZSA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogdmFyIGludGVyYWN0aW9uTWFuYWdlciA9IFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyKTtcbiAqIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocmVuZGVyZXIudmlldyk7XG4gKiB0aWNrZXIuYWRkKGZ1bmN0aW9uICh0aW1lKSB7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBPciB5b3UgY2FuIGp1c3QgdXBkYXRlIGl0IG1hbnVhbGx5LlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogdGlja2VyLnN0b3AoKTtcbiAqIGZ1bmN0aW9uIGFuaW1hdGUodGltZSkge1xuICogICAgIHRpY2tlci51cGRhdGUodGltZSk7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XG4gKiB9XG4gKiBhbmltYXRlKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAqXG4gKiBAdHlwZSB7UElYSS50aWNrZXIuVGlja2VyfVxuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbnZhciBzaGFyZWQgPSBuZXcgVGlja2VyKCk7XG5zaGFyZWQuYXV0b1N0YXJ0ID0gdHJ1ZTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudGlja2VyXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIHNoYXJlZDogc2hhcmVkLFxuICAgIFRpY2tlcjogVGlja2VyXG59O1xuIiwiLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuXG52YXIgR0xfTUFQID0ge307XG5cblxudmFyIGNyZWF0ZUluZGljZXNGb3JRdWFkcyA9IGZ1bmN0aW9uIChzaXplKVxue1xuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYXJyYXksIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgIFxuICAgIHZhciB0b3RhbEluZGljZXMgPSBzaXplICogNjtcblxuICAgIHZhciBpbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHRvdGFsSW5kaWNlcyk7XG5cblx0Ly8gZmlsbCB0aGUgaW5kaWNlcyB3aXRoIHRoZSBxdWFkcyB0byBkcmF3XG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCB0b3RhbEluZGljZXM7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kaWNlcztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzOyIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLnV0aWxzXG4gKi9cbnZhciB1dGlscyA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIF91aWQ6IDAsXG4gICAgX3NhaWRIZWxsbzogZmFsc2UsXG5cbiAgICBFdmVudEVtaXR0ZXI6ICAgcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIHBsdWdpblRhcmdldDogICByZXF1aXJlKCcuL3BsdWdpblRhcmdldCcpLFxuICAgIGFzeW5jOiAgICAgICAgICByZXF1aXJlKCdhc3luYycpLFxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllclxuICAgICAqXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllciB0byB1c2UuXG4gICAgICovXG4gICAgdWlkOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICsrdXRpbHMuX3VpZDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBoZXggY29sb3IgbnVtYmVyIHRvIGFuIFtSLCBHLCBCXSBhcnJheVxuICAgICAqXG4gICAgICogQHBhcmFtIGhleCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSAge251bWJlcltdfSBbb3V0PVtdXVxuICAgICAqIEByZXR1cm4ge251bWJlcltdfSBBbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIFtSLCBHLCBCXSBvZiB0aGUgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnJnYjogZnVuY3Rpb24gKGhleCwgb3V0KVxuICAgIHtcbiAgICAgICAgb3V0ID0gb3V0IHx8IFtdO1xuXG4gICAgICAgIG91dFswXSA9IChoZXggPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzFdID0gKGhleCA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIG91dFsyXSA9IChoZXggJiAweEZGKSAvIDI1NTtcblxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5nIGNvbG9yLlxuICAgICAqL1xuICAgIGhleDJzdHJpbmc6IGZ1bmN0aW9uIChoZXgpXG4gICAge1xuICAgICAgICBoZXggPSBoZXgudG9TdHJpbmcoMTYpO1xuICAgICAgICBoZXggPSAnMDAwMDAwJy5zdWJzdHIoMCwgNiAtIGhleC5sZW5ndGgpICsgaGV4O1xuXG4gICAgICAgIHJldHVybiAnIycgKyBoZXg7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgY29sb3IgYXMgYW4gW1IsIEcsIEJdIGFycmF5IHRvIGEgaGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIHJnYiB7bnVtYmVyW119XG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgY29sb3IgbnVtYmVyXG4gICAgICovXG4gICAgcmdiMmhleDogZnVuY3Rpb24gKHJnYilcbiAgICB7XG4gICAgICAgIHJldHVybiAoKHJnYlswXSoyNTUgPDwgMTYpICsgKHJnYlsxXSoyNTUgPDwgOCkgKyByZ2JbMl0qMjU1KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIENhbnZhcyBCbGVuZE1vZGVzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnJvd3NlclxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciB0aGV5IGFyZSBzdXBwb3J0ZWRcbiAgICAgKi9cbiAgICBjYW5Vc2VOZXdDYW52YXNCbGVuZE1vZGVzOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwbmdIZWFkID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVFBQUFBQkFRTUFBQUREOHAyT0FBQUFBMUJNVkVYLyc7XG4gICAgICAgIHZhciBwbmdFbmQgPSAnQUFBQUNrbEVRVlFJMTJOZ0FBQUFBZ0FCNGlHOE13QUFBQUJKUlU1RXJrSmdnZz09JztcblxuICAgICAgICB2YXIgbWFnZW50YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBtYWdlbnRhLnNyYyA9IHBuZ0hlYWQgKyAnQVA4MDRPYTYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciB5ZWxsb3cgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgeWVsbG93LnNyYyA9IHBuZ0hlYWQgKyAnL3dDS3h2UkYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY2FudmFzLndpZHRoID0gNjtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IDE7XG5cbiAgICAgICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShtYWdlbnRhLCAwLCAwKTtcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoeWVsbG93LCAyLCAwKTtcblxuICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDIsMCwxLDEpLmRhdGE7XG5cbiAgICAgICAgcmV0dXJuIChkYXRhWzBdID09PSAyNTUgJiYgZGF0YVsxXSA9PT0gMCAmJiBkYXRhWzJdID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBudW1iZXIsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgdGFrZW4gZnJvbSBTdGFybGluZyBGcmFtZXdvcmsgYXMgaXRzIHByZXR0eSBuZWF0IDspXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbnVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7bnVtYmVyfSB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqL1xuICAgIGdldE5leHRQb3dlck9mVHdvOiBmdW5jdGlvbiAobnVtYmVyKVxuICAgIHtcbiAgICAgICAgLy8gc2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Bvd2VyX29mX3R3byNGYXN0X2FsZ29yaXRobV90b19jaGVja19pZl9hX3Bvc2l0aXZlX251bWJlcl9pc19hX3Bvd2VyX29mX3R3b1xuICAgICAgICBpZiAobnVtYmVyID4gMCAmJiAobnVtYmVyICYgKG51bWJlciAtIDEpKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSAxO1xuXG4gICAgICAgICAgICB3aGlsZSAocmVzdWx0IDwgbnVtYmVyKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA8PD0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBjaGVja3MgaWYgdGhlIGdpdmVuIHdpZHRoIGFuZCBoZWlnaHQgbWFrZSBhIHBvd2VyIG9mIHR3byByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSBoZWlnaHQge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzUG93ZXJPZlR3bzogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm4gKHdpZHRoID4gMCAmJiAod2lkdGggJiAod2lkdGggLSAxKSkgPT09IDAgJiYgaGVpZ2h0ID4gMCAmJiAoaGVpZ2h0ICYgKGhlaWdodCAtIDEpKSA9PT0gMCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGdldCB0aGUgcmVzb2x1dGlvbiBvZiBhbiBhc3NldCBieSBsb29raW5nIGZvciB0aGUgcHJlZml4XG4gICAgICogdXNlZCBieSBzcHJpdGVzaGVldHMgYW5kIGltYWdlIHVybHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwge3N0cmluZ30gdGhlIGltYWdlIHBhdGhcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0UmVzb2x1dGlvbk9mVXJsOiBmdW5jdGlvbiAodXJsKVxuICAgIHtcbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBDT05TVC5SRVRJTkFfUFJFRklYLmV4ZWModXJsKTtcblxuICAgICAgICBpZiAocmVzb2x1dGlvbilcbiAgICAgICAge1xuICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChyZXNvbHV0aW9uWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAxO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBMb2dzIG91dCB0aGUgdmVyc2lvbiBhbmQgcmVuZGVyZXIgaW5mb3JtYXRpb24gZm9yIHRoaXMgcnVubmluZyBpbnN0YW5jZSBvZiBQSVhJLlxuICAgICAqIElmIHlvdSBkb24ndCB3YW50IHRvIHNlZSB0aGlzIG1lc3NhZ2UgeW91IGNhbiBzZXQgYFBJWEkudXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7YFxuICAgICAqIHNvIHRoZSBsaWJyYXJ5IHRoaW5rcyBpdCBhbHJlYWR5IHNhaWQgaXQuIEtlZXAgaW4gbWluZCB0aGF0IGRvaW5nIHRoYXQgd2lsbCBmb3JldmVyXG4gICAgICogbWFrZXMgeW91IGEgamVyayBmYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBUaGUgc3RyaW5nIHJlbmRlcmVyIHR5cGUgdG8gbG9nLlxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBzYXlIZWxsbzogZnVuY3Rpb24gKHR5cGUpXG4gICAge1xuICAgICAgICBpZiAodXRpbHMuX3NhaWRIZWxsbylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjaHJvbWUnKSA+IC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtcbiAgICAgICAgICAgICAgICAnXFxuICVjICVjICVjIFBpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0g4pywICcgKyB0eXBlICsgJyDinLAgICVjICcgKyAnICVjICcgKyAnIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8gICVjICVjIOKZpSVj4pmlJWPimaUgXFxuXFxuJyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmY2NmE1OyBiYWNrZ3JvdW5kOiAjMDMwMzA3OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmYzNkYzsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOydcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBhcmdzKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3aW5kb3cuY29uc29sZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nKCdQaXhpLmpzICcgKyBDT05TVC5WRVJTSU9OICsgJyAtICcgKyB0eXBlICsgJyAtIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8nKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuXG4gICAgICAgIHV0aWxzLl9zYWlkSGVsbG8gPSB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgZm9yIGNoZWNraW5nIGZvciB3ZWJnbCBzdXBwb3J0XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzV2ViR0xTdXBwb3J0ZWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB2YXIgY29udGV4dE9wdGlvbnMgPSB7IHN0ZW5jaWw6IHRydWUgfTtcbiAgICAgICAgdHJ5XG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghd2luZG93LldlYkdMUmVuZGVyaW5nQ29udGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSxcbiAgICAgICAgICAgICAgICBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIGNvbnRleHRPcHRpb25zKSB8fCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgY29udGV4dE9wdGlvbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gISEoZ2wgJiYgZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5zdGVuY2lsKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgc2lnbiBvZiBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBuIHtudW1iZXJ9XG4gICAgICogQHJldHVybnMge251bWJlcn0gMCBpZiBuIGlzIDAsIC0xIGlmIG4gaXMgbmVnYXRpdmUsIDEgaWYgbiBpIHBvc2l0aXZlXG4gICAgICovXG4gICAgc2lnbjogZnVuY3Rpb24gKG4pXG4gICAge1xuICAgICAgICByZXR1cm4gbiA/IChuIDwgMCA/IC0xIDogMSkgOiAwO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZW1vdmVJdGVtc1xuICAgICAqXG4gICAgICogQHBhcmFtIHthcnJheX0gYXJyIFRoZSB0YXJnZXQgYXJyYXlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRJZHggVGhlIGluZGV4IHRvIGJlZ2luIHJlbW92aW5nIGZyb20gKGluY2x1c2l2ZSlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmVtb3ZlQ291bnQgSG93IG1hbnkgaXRlbXMgdG8gcmVtb3ZlXG4gICAgICovXG4gICAgcmVtb3ZlSXRlbXM6IGZ1bmN0aW9uIChhcnIsIHN0YXJ0SWR4LCByZW1vdmVDb3VudClcbiAgICB7XG4gICAgICAgIHZhciBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIGlmIChzdGFydElkeCA+PSBsZW5ndGggfHwgcmVtb3ZlQ291bnQgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbW92ZUNvdW50ID0gKHN0YXJ0SWR4K3JlbW92ZUNvdW50ID4gbGVuZ3RoID8gbGVuZ3RoLXN0YXJ0SWR4IDogcmVtb3ZlQ291bnQpO1xuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJZHgsIGxlbiA9IGxlbmd0aC1yZW1vdmVDb3VudDsgaSA8IGxlbjsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBhcnJbaV0gPSBhcnJbaSArIHJlbW92ZUNvdW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyci5sZW5ndGggPSBsZW47XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIERlc2NyaWJlIHByb3BlcnR5IHVzYWdlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBUZXh0dXJlQ2FjaGU6IHt9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHt9XG59O1xuIiwiLyoqXG4gKiBNaXhpbnMgZnVuY3Rpb25hbGl0eSB0byBtYWtlIGFuIG9iamVjdCBoYXZlIFwicGx1Z2luc1wiLlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkudXRpbHNcbiAqIEBwYXJhbSBvYmoge29iamVjdH0gVGhlIG9iamVjdCB0byBtaXggaW50by5cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIHBsdWdpblRhcmdldC5taXhpbihNeU9iamVjdCk7XG4gKi9cbmZ1bmN0aW9uIHBsdWdpblRhcmdldChvYmopXG57XG4gICAgb2JqLl9fcGx1Z2lucyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHBsdWdpbiB0byBhbiBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwbHVnaW5OYW1lIHtzdHJpbmd9IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICAgICAqIEBwYXJhbSBjdG9yIHtGdW5jdGlvbn0gVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciB0aGUgcGx1Z2luLlxuICAgICAqL1xuICAgIG9iai5yZWdpc3RlclBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW5OYW1lLCBjdG9yKVxuICAgIHtcbiAgICAgICAgb2JqLl9fcGx1Z2luc1twbHVnaW5OYW1lXSA9IGN0b3I7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlcyBhbGwgdGhlIHBsdWdpbnMgb2YgdGhpcyBvYmplY3RcbiAgICAgKlxuICAgICAqL1xuICAgIG9iai5wcm90b3R5cGUuaW5pdFBsdWdpbnMgPSBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zID0gdGhpcy5wbHVnaW5zIHx8IHt9O1xuXG4gICAgICAgIGZvciAodmFyIG8gaW4gb2JqLl9fcGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbmV3IChvYmouX19wbHVnaW5zW29dKSh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5kZXN0cm95UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBvIGluIHRoaXMucGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBsdWdpbnMgPSBudWxsO1xuICAgIH07XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLyoqXG4gICAgICogTWl4ZXMgaW4gdGhlIHByb3BlcnRpZXMgb2YgdGhlIHBsdWdpblRhcmdldCBpbnRvIGFub3RoZXIgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0IHtvYmplY3R9IFRoZSBvYmogdG8gbWl4IGludG9cbiAgICAgKi9cbiAgICBtaXhpbjogZnVuY3Rpb24gbWl4aW4ob2JqKVxuICAgIHtcbiAgICAgICAgcGx1Z2luVGFyZ2V0KG9iaik7XG4gICAgfVxufTtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciBjb3JlID0gcmVxdWlyZSgnLi9jb3JlJyksXG4gICAgbWVzaCA9IHJlcXVpcmUoJy4vbWVzaCcpLFxuICAgIGV4dHJhcyA9IHJlcXVpcmUoJy4vZXh0cmFzJyksXG4gICAgZmlsdGVycyA9IHJlcXVpcmUoJy4vZmlsdGVycycpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIFNwcml0ZUJhdGNoXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLlBhcnRpY2xlQ29udGFpbmVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlNwcml0ZUJhdGNoID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLicpO1xufTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBBc3NldExvYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBzZWUgUElYSS5sb2FkZXJzLkxvYWRlclxuICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IFRoZSBsb2FkZXIgc3lzdGVtIHdhcyBvdmVyaGF1bGVkIGluIHBpeGkgdjMsIHBsZWFzZSBzZWUgdGhlIG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyIGNsYXNzLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLkFzc2V0TG9hZGVyID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuJyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb3JlLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFN0YWdlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQ29udGFpbmVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFN0YWdlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1lvdSBkbyBub3QgbmVlZCB0byB1c2UgYSBQSVhJIFN0YWdlIGFueSBtb3JlLCB5b3UgY2FuIHNpbXBseSByZW5kZXIgYW55IGNvbnRhaW5lci4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIERpc3BsYXlPYmplY3RDb250YWluZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgRGlzcGxheU9iamVjdENvbnRhaW5lcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEaXNwbGF5T2JqZWN0Q29udGFpbmVyIGhhcyBiZWVuIHNob3J0ZW5lZCB0byBDb250YWluZXIsIHBsZWFzZSB1c2UgQ29udGFpbmVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RyaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2hcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RyaXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFN0cmlwIGNsYXNzIGhhcyBiZWVuIHJlbmFtZWQgdG8gTWVzaCBhbmQgbW92ZWQgdG8gbWVzaC5NZXNoLCBwbGVhc2UgdXNlIG1lc2guTWVzaCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLk1lc2g7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBSb3BlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkubWVzaC5Sb3BlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFJvcGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFJvcGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gbWVzaC5Sb3BlLCBwbGVhc2UgdXNlIG1lc2guUm9wZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLlJvcGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBNb3ZpZUNsaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuTW92aWVDbGlwXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIE1vdmllQ2xpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgTW92aWVDbGlwIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5Nb3ZpZUNsaXAsIHBsZWFzZSB1c2UgZXh0cmFzLk1vdmllQ2xpcCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuTW92aWVDbGlwO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGlsaW5nU3ByaXRlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBUaWxpbmdTcHJpdGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRpbGluZ1Nwcml0ZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuVGlsaW5nU3ByaXRlLCBwbGVhc2UgdXNlIGV4dHJhcy5UaWxpbmdTcHJpdGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLlRpbGluZ1Nwcml0ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJpdG1hcFRleHRcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCaXRtYXBUZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCaXRtYXBUZXh0IGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5CaXRtYXBUZXh0LCBwbGVhc2UgdXNlIGV4dHJhcy5CaXRtYXBUZXh0IGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5CaXRtYXBUZXh0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgYmxlbmRNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIGJsZW5kTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGJsZW5kTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gQkxFTkRfTU9ERVMsIHBsZWFzZSB1c2UgQkxFTkRfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5CTEVORF9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNjYWxlTW9kZXNcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBzY2FsZU1vZGVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBzY2FsZU1vZGVzIGhhcyBiZWVuIG1vdmVkIHRvIFNDQUxFX01PREVTLCBwbGVhc2UgdXNlIFNDQUxFX01PREVTIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU0NBTEVfTU9ERVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBCYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuQmFzZVRleHR1cmVDYWNoZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCYXNlVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgQmFzZVRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5CYXNlVGV4dHVyZUNhY2hlLCBwbGVhc2UgdXNlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5UZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuVGV4dHVyZUNhY2hlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIG1hdGhcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBtYXRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgbWF0aCBuYW1lc3BhY2UgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIGFjY2VzcyBtZW1iZXJzIGFscmVhZHkgYWNjZXNzaWJsZSBvbiBQSVhJLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgUElYSS5TcHJpdGUjc2V0VGV4dHVyZVxuICogQHNlZSBQSVhJLlNwcml0ZSN0ZXh0dXJlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlLnByb3RvdHlwZS5zZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dHVyZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dHVyZSBwcm9wZXJ0eSwgZS5nIDogc3ByaXRlLnRleHR1cmUgPSB0ZXh0dXJlOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3NldFRleHRcbiAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmV4dHJhcy5CaXRtYXBUZXh0LnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dClcbntcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dCBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dCBwcm9wZXJ0eSwgZS5nIDogbXlCaXRtYXBUZXh0LnRleHQgPSBcXCdteSB0ZXh0XFwnOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLlRleHQjdGV4dFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteVRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRTdHlsZVxuICogQHNlZSBQSVhJLlRleHQjc3R5bGVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0LnByb3RvdHlwZS5zZXRTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlKVxue1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldFN0eWxlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBzdHlsZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0LnN0eWxlID0gc3R5bGU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQHNlZSBQSVhJLlRleHR1cmUjc2V0RnJhbWVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0dXJlLnByb3RvdHlwZS5zZXRGcmFtZSA9IGZ1bmN0aW9uKGZyYW1lKVxue1xuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldEZyYW1lIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBmcmFtZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0dXJlLmZyYW1lID0gZnJhbWU7Jyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhmaWx0ZXJzLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBzZWUgUElYSS5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBBYnN0cmFjdEZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLkFic3RyYWN0RmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBBYnN0cmFjdEZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkFic3RyYWN0RmlsdGVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkZYQUFGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuRlhBQUZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBGWEFBRmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuRlhBQUZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgRlhBQUZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkZYQUFGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuU3ByaXRlTWFza0ZpbHRlclxuICAgICAqIEBzZWUgUElYSS5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIFNwcml0ZU1hc2tGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBTcHJpdGVNYXNrRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU3ByaXRlTWFza0ZpbHRlcjtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkudXRpbHMudXVpZFxuICogQHNlZSBQSVhJLnV0aWxzLnVpZFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICovXG5jb3JlLnV0aWxzLnV1aWQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvbnNvbGUud2FybigndXRpbHMudXVpZCgpIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdXRpbHMudWlkKCkgZnJvbSBub3cgb24uJyk7XG4gICAgcmV0dXJuIGNvcmUudXRpbHMudWlkKCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogQSBCaXRtYXBUZXh0IG9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dCB1c2luZyBiaXRtYXAgZm9udC4gVG9cbiAqIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJywgJ1xccicgb3IgJ1xcclxcbicgaW4geW91ciBzdHJpbmcuIFlvdSBjYW4gZ2VuZXJhdGUgdGhlIGZudCBmaWxlcyB1c2luZzpcbiAqXG4gKiBBIEJpdG1hcFRleHQgY2FuIG9ubHkgYmUgY3JlYXRlZCB3aGVuIHRoZSBmb250IGlzIGxvYWRlZFxuICpcbiAqIGBgYGpzXG4gKiAvLyBpbiB0aGlzIGNhc2UgdGhlIGZvbnQgaXMgaW4gYSBmaWxlIGNhbGxlZCAnZGVzeXJlbC5mbnQnXG4gKiB2YXIgYml0bWFwVGV4dCA9IG5ldyBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0KFwidGV4dCB1c2luZyBhIGZhbmN5IGZvbnQhXCIsIHtmb250OiBcIjM1cHggRGVzeXJlbFwiLCBhbGlnbjogXCJyaWdodFwifSk7XG4gKiBgYGBcbiAqXG4gKlxuICogaHR0cDovL3d3dy5hbmdlbGNvZGUuY29tL3Byb2R1Y3RzL2JtZm9udC8gZm9yIHdpbmRvd3Mgb3JcbiAqIGh0dHA6Ly93d3cuYm1nbHlwaC5jb20vIGZvciBtYWMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBzdHlsZSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIHN0eWxlLmZvbnQge3N0cmluZ3xvYmplY3R9IFRoZSBmb250IGRlc2NyaXB0b3IgZm9yIHRoZSBvYmplY3QsIGNhbiBiZSBwYXNzZWQgYXMgYSBzdHJpbmcgb2YgZm9ybVxuICogICAgICBcIjI0cHggRm9udE5hbWVcIiBvciBcIkZvbnROYW1lXCIgb3IgYXMgYW4gb2JqZWN0IHdpdGggZXhwbGljaXQgbmFtZS9zaXplIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQubmFtZV0ge3N0cmluZ30gVGhlIGJpdG1hcCBmb250IGlkXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQuc2l6ZV0ge251bWJlcn0gVGhlIHNpemUgb2YgdGhlIGZvbnQgaW4gcGl4ZWxzLCBlLmcuIDI0XG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0XG4gKiAgICAgIHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUudGludD0weEZGRkZGRl0ge251bWJlcn0gVGhlIHRpbnQgY29sb3JcbiAqL1xuZnVuY3Rpb24gQml0bWFwVGV4dCh0ZXh0LCBzdHlsZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgb3ZlcmFsbCB0ZXh0LCBkaWZmZXJlbnQgZnJvbSBmb250U2l6ZSxcbiAgICAgKiB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBzdHlsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRleHRXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dEhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBsZXR0ZXIgc3ByaXRlIHBvb2wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZ2x5cGhzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZm9udCA9IHtcbiAgICAgICAgdGludDogc3R5bGUudGludCAhPT0gdW5kZWZpbmVkID8gc3R5bGUudGludCA6IDB4RkZGRkZGLFxuICAgICAgICBhbGlnbjogc3R5bGUuYWxpZ24gfHwgJ2xlZnQnLFxuICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICBzaXplOiAwXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgZm9udC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZm9udCA9IHN0eWxlLmZvbnQ7IC8vIHJ1biBmb250IHNldHRlclxuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IHRleHQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IHdpZHRoIG9mIHRoaXMgYml0bWFwIHRleHQgaW4gcGl4ZWxzLiBJZiB0aGUgdGV4dCBwcm92aWRlZCBpcyBsb25nZXIgdGhhbiB0aGUgdmFsdWUgcHJvdmlkZWQsIGxpbmUgYnJlYWtzIHdpbGwgYmUgYXV0b21hdGljYWxseSBpbnNlcnRlZCBpbiB0aGUgbGFzdCB3aGl0ZXNwYWNlLlxuICAgICAqIERpc2FibGUgYnkgc2V0dGluZyB2YWx1ZSB0byAwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IGxpbmUgaGVpZ2h0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRyeWluZyB0byB1c2UgdGhlIHRvdGFsIGhlaWdodCBvZiB0aGUgVGV4dCwgaWU6IHdoZW4gdHJ5aW5nIHRvIHZlcnRpY2FsbHkgYWxpZ24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkaXJ0eSBzdGF0ZSBvZiB0aGlzIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy51cGRhdGVUZXh0KCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5CaXRtYXBUZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5Db250YWluZXIucHJvdG90eXBlKTtcbkJpdG1hcFRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQml0bWFwVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gQml0bWFwVGV4dDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQml0bWFwVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGludCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0aW50OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQudGludDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQudGludCA9ICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlID49IDApID8gdmFsdWUgOiAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFsaWdubWVudCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbGVmdCdcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBhbGlnbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250LmFsaWduO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC5hbGlnbiA9IHZhbHVlIHx8ICdsZWZ0JztcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZvbnQgZGVzY3JpcHRvciBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0ZvbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgZm9udDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcgJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9mb250Lm5hbWUgPSB2YWx1ZS5sZW5ndGggPT09IDEgPyB2YWx1ZVswXSA6IHZhbHVlLnNsaWNlKDEpLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB2YWx1ZS5sZW5ndGggPj0gMiA/IHBhcnNlSW50KHZhbHVlWzBdLCAxMCkgOiBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV0uc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5zaXplID0gdHlwZW9mIHZhbHVlLnNpemUgPT09ICdudW1iZXInID8gdmFsdWUuc2l6ZSA6IHBhcnNlSW50KHZhbHVlLnNpemUsIDEwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGV4dCBhbmQgdXBkYXRlcyBpdCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkYXRhID0gQml0bWFwVGV4dC5mb250c1t0aGlzLl9mb250Lm5hbWVdO1xuICAgIHZhciBwb3MgPSBuZXcgY29yZS5Qb2ludCgpO1xuICAgIHZhciBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgIHZhciBjaGFycyA9IFtdO1xuICAgIHZhciBsYXN0TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbGluZVdpZHRocyA9IFtdO1xuICAgIHZhciBsaW5lID0gMDtcbiAgICB2YXIgc2NhbGUgPSB0aGlzLl9mb250LnNpemUgLyBkYXRhLnNpemU7XG4gICAgdmFyIGxhc3RTcGFjZSA9IC0xO1xuICAgIHZhciBtYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0Lmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gdGhpcy50ZXh0LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGxhc3RTcGFjZSA9IC8oXFxzKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSA/IGkgOiBsYXN0U3BhY2U7XG5cbiAgICAgICAgaWYgKC8oPzpcXHJcXG58XFxyfFxcbikvLnRlc3QodGhpcy50ZXh0LmNoYXJBdChpKSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXN0U3BhY2UgIT09IC0xICYmIHRoaXMubWF4V2lkdGggPiAwICYmIHBvcy54ICogc2NhbGUgPiB0aGlzLm1heFdpZHRoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKGNoYXJzLCBsYXN0U3BhY2UsIGkgLSBsYXN0U3BhY2UpO1xuICAgICAgICAgICAgaSA9IGxhc3RTcGFjZTtcbiAgICAgICAgICAgIGxhc3RTcGFjZSA9IC0xO1xuXG4gICAgICAgICAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbGluZSsrO1xuXG4gICAgICAgICAgICBwb3MueCA9IDA7XG4gICAgICAgICAgICBwb3MueSArPSBkYXRhLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hhckRhdGEgPSBkYXRhLmNoYXJzW2NoYXJDb2RlXTtcblxuICAgICAgICBpZiAoIWNoYXJEYXRhKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmV2Q2hhckNvZGUgJiYgY2hhckRhdGEua2VybmluZ1twcmV2Q2hhckNvZGVdKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb3MueCArPSBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV07XG4gICAgICAgIH1cblxuICAgICAgICBjaGFycy5wdXNoKHt0ZXh0dXJlOmNoYXJEYXRhLnRleHR1cmUsIGxpbmU6IGxpbmUsIGNoYXJDb2RlOiBjaGFyQ29kZSwgcG9zaXRpb246IG5ldyBjb3JlLlBvaW50KHBvcy54ICsgY2hhckRhdGEueE9mZnNldCwgcG9zLnkgKyBjaGFyRGF0YS55T2Zmc2V0KX0pO1xuICAgICAgICBsYXN0TGluZVdpZHRoID0gcG9zLnggKyAoY2hhckRhdGEudGV4dHVyZS53aWR0aCArIGNoYXJEYXRhLnhPZmZzZXQpO1xuICAgICAgICBwb3MueCArPSBjaGFyRGF0YS54QWR2YW5jZTtcbiAgICAgICAgbWF4TGluZUhlaWdodCA9IE1hdGgubWF4KG1heExpbmVIZWlnaHQsIChjaGFyRGF0YS55T2Zmc2V0ICsgY2hhckRhdGEudGV4dHVyZS5oZWlnaHQpKTtcbiAgICAgICAgcHJldkNoYXJDb2RlID0gY2hhckNvZGU7XG4gICAgfVxuXG4gICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG5cbiAgICB2YXIgbGluZUFsaWduT2Zmc2V0cyA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8PSBsaW5lOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYWxpZ25PZmZzZXQgPSAwO1xuXG4gICAgICAgIGlmICh0aGlzLl9mb250LmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbGlnbk9mZnNldCA9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5fZm9udC5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpbmVBbGlnbk9mZnNldHMucHVzaChhbGlnbk9mZnNldCk7XG4gICAgfVxuXG4gICAgdmFyIGxlbkNoYXJzID0gY2hhcnMubGVuZ3RoO1xuICAgIHZhciB0aW50ID0gdGhpcy50aW50O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbkNoYXJzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYyA9IHRoaXMuX2dseXBoc1tpXTsgLy8gZ2V0IHRoZSBuZXh0IGdseXBoIHNwcml0ZVxuXG4gICAgICAgIGlmIChjKVxuICAgICAgICB7XG4gICAgICAgICAgICBjLnRleHR1cmUgPSBjaGFyc1tpXS50ZXh0dXJlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgYyA9IG5ldyBjb3JlLlNwcml0ZShjaGFyc1tpXS50ZXh0dXJlKTtcbiAgICAgICAgICAgIHRoaXMuX2dseXBocy5wdXNoKGMpO1xuICAgICAgICB9XG5cbiAgICAgICAgYy5wb3NpdGlvbi54ID0gKGNoYXJzW2ldLnBvc2l0aW9uLnggKyBsaW5lQWxpZ25PZmZzZXRzW2NoYXJzW2ldLmxpbmVdKSAqIHNjYWxlO1xuICAgICAgICBjLnBvc2l0aW9uLnkgPSBjaGFyc1tpXS5wb3NpdGlvbi55ICogc2NhbGU7XG4gICAgICAgIGMuc2NhbGUueCA9IGMuc2NhbGUueSA9IHNjYWxlO1xuICAgICAgICBjLnRpbnQgPSB0aW50O1xuXG4gICAgICAgIGlmICghYy5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoYyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZW1vdmUgdW5uZWNlc3NhcnkgY2hpbGRyZW4uXG4gICAgZm9yIChpID0gbGVuQ2hhcnM7IGkgPCB0aGlzLl9nbHlwaHMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKHRoaXMuX2dseXBoc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0V2lkdGggPSBtYXhMaW5lV2lkdGggKiBzY2FsZTtcbiAgICB0aGlzLnRleHRIZWlnaHQgPSAocG9zLnkgKyBkYXRhLmxpbmVIZWlnaHQpICogc2NhbGU7XG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gbWF4TGluZUhlaWdodCAqIHNjYWxlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb2YgdGhpcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGV4dCBiZWZvcmUgY2FsbGluZyBwYXJlbnQncyBnZXRMb2NhbEJvdW5kc1xuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5cbkJpdG1hcFRleHQucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICByZXR1cm4gY29yZS5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzLmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59O1xuXG5CaXRtYXBUZXh0LmZvbnRzID0ge307XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIE1vdmllQ2xpcCBpcyBhIHNpbXBsZSB3YXkgdG8gZGlzcGxheSBhbiBhbmltYXRpb24gZGVwaWN0ZWQgYnkgYSBsaXN0IG9mIHRleHR1cmVzLlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgYWxpZW5JbWFnZXMgPSBbXCJpbWFnZV9zZXF1ZW5jZV8wMS5wbmdcIixcImltYWdlX3NlcXVlbmNlXzAyLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDMucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wNC5wbmdcIl07XG4gKiB2YXIgdGV4dHVyZUFycmF5ID0gW107XG4gKlxuICogZm9yICh2YXIgaT0wOyBpIDwgNDsgaSsrKVxuICoge1xuICogICAgICB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoYWxpZW5JbWFnZXNbaV0pO1xuICogICAgICB0ZXh0dXJlQXJyYXkucHVzaCh0ZXh0dXJlKTtcbiAqIH07XG4gKlxuICogdmFyIG1jID0gbmV3IFBJWEkuTW92aWVDbGlwKHRleHR1cmVBcnJheSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0dXJlcyB7UElYSS5UZXh0dXJlW118T2JqZWN0W119IGFuIGFycmF5IG9mIHtAbGluayBQSVhJLlRleHR1cmV9IG9yIGZyYW1lIG9iamVjdHMgdGhhdCBtYWtlIHVwIHRoZSBhbmltYXRpb25cbiAqIEBwYXJhbSB0ZXh0dXJlc1tdLnRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHtAbGluayBQSVhJLlRleHR1cmV9IG9mIHRoZSBmcmFtZVxuICogQHBhcmFtIHRleHR1cmVzW10udGltZSB7bnVtYmVyfSB0aGUgZHVyYXRpb24gb2YgdGhlIGZyYW1lIGluIG1zXG4gKi9cbmZ1bmN0aW9uIE1vdmllQ2xpcCh0ZXh0dXJlcylcbntcbiAgICBjb3JlLlNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmVzWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlID8gdGV4dHVyZXNbMF0gOiB0ZXh0dXJlc1swXS50ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kdXJhdGlvbnMgPSBudWxsO1xuXG4gICAgdGhpcy50ZXh0dXJlcyA9IHRleHR1cmVzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNwZWVkIHRoYXQgdGhlIE1vdmllQ2xpcCB3aWxsIHBsYXkgYXQuIEhpZ2hlciBpcyBmYXN0ZXIsIGxvd2VyIGlzIHNsb3dlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmFuaW1hdGlvblNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBtb3ZpZSBjbGlwIHJlcGVhdHMgYWZ0ZXIgcGxheWluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMubG9vcCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gYSBNb3ZpZUNsaXAgZmluaXNoZXMgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICovXG4gICAgdGhpcy5vbkNvbXBsZXRlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEVsYXBzZWQgdGltZSBzaW5jZSBhbmltYXRpb24gaGFzIGJlZW4gc3RhcnRlZCwgdXNlZCBpbnRlcm5hbGx5IHRvIGRpc3BsYXkgY3VycmVudCB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIE1vdmllQ2xpcCBpcyBjdXJyZW50bHkgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1vdmllQ2xpcC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5Nb3ZpZUNsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTW92aWVDbGlwO1xubW9kdWxlLmV4cG9ydHMgPSBNb3ZpZUNsaXA7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1vdmllQ2xpcC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiB0b3RhbEZyYW1lcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIGZyYW1lcyBpbiB0aGUgTW92aWVDbGlwLiBUaGlzIGlzIHRoZSBzYW1lIGFzIG51bWJlciBvZiB0ZXh0dXJlc1xuICAgICAqIGFzc2lnbmVkIHRvIHRoZSBNb3ZpZUNsaXAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdG90YWxGcmFtZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIHRleHR1cmVzIHVzZWQgZm9yIHRoaXMgTW92aWVDbGlwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqXG4gICAgICovXG4gICAgdGV4dHVyZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZih2YWx1ZVswXSBpbnN0YW5jZW9mIGNvcmUuVGV4dHVyZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcy5wdXNoKHZhbHVlW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMucHVzaCh2YWx1ZVtpXS50aW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgKiBUaGUgTW92aWVDbGlwcyBjdXJyZW50IGZyYW1lIGluZGV4XG4gICAgKlxuICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAqIEByZWFkb25seVxuICAgICovXG4gICAgY3VycmVudEZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRGcmFtZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpICUgdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRGcmFtZSA8IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY3VycmVudEZyYW1lICs9IHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RnJhbWU7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKipcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYoIXRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogUGxheXMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZih0aGlzLnBsYXlpbmcpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5aW5nID0gdHJ1ZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZ29lcyB0byBhIHNwZWNpZmljIGZyYW1lXG4gKlxuICogQHBhcmFtIGZyYW1lTnVtYmVyIHtudW1iZXJ9IGZyYW1lIGluZGV4IHRvIHN0b3AgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kU3RvcCA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLnN0b3AoKTtcblxuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbdGhpcy5jdXJyZW50RnJhbWVdO1xufTtcblxuLyoqXG4gKiBHb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWUgYW5kIGJlZ2lucyBwbGF5aW5nIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RhcnQgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kUGxheSA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IGZyYW1lTnVtYmVyO1xuXG4gICAgdGhpcy5wbGF5KCk7XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKiBAcHJpdmF0ZVxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWQgPSB0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2R1cmF0aW9ucyAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIHZhciBsYWcgPSB0aGlzLl9jdXJyZW50VGltZSAlIDEgKiB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuXG4gICAgICAgIGxhZyArPSBlbGFwc2VkIC8gNjAgKiAxMDAwO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPCAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZS0tO1xuICAgICAgICAgICAgbGFnICs9IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2lnbiA9IE1hdGguc2lnbih0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lKTtcbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgPSBNYXRoLmZsb29yKHRoaXMuX2N1cnJlbnRUaW1lKTtcblxuICAgICAgICB3aGlsZSAobGFnID49IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhZyAtPSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdICogc2lnbjtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IHNpZ247XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBsYWcgLyB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBlbGFwc2VkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jdXJyZW50VGltZSA8IDAgJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AoMCk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5fY3VycmVudFRpbWUgPj0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoICYmICF0aGlzLmxvb3ApXG4gICAge1xuICAgICAgICB0aGlzLmdvdG9BbmRTdG9wKHRoaXMuX3RleHR1cmVzLmxlbmd0aCAtIDEpO1xuXG4gICAgICAgIGlmICh0aGlzLm9uQ29tcGxldGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuXG59O1xuXG4vKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZGVzdHJveXMgaXRcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICggKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuICAgIGNvcmUuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIEEgc2hvcnQgaGFuZCB3YXkgb2YgY3JlYXRpbmcgYSBtb3ZpZWNsaXAgZnJvbSBhbiBhcnJheSBvZiBmcmFtZSBpZHNcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVzIHtzdHJpbmdbXX0gdGhlIGFycmF5IG9mIGZyYW1lcyBpZHMgdGhlIG1vdmllY2xpcCB3aWxsIHVzZSBhcyBpdHMgdGV4dHVyZSBmcmFtZXNcbiAqL1xuTW92aWVDbGlwLmZyb21GcmFtZXMgPSBmdW5jdGlvbiAoZnJhbWVzKVxue1xuICAgIHZhciB0ZXh0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0ZXh0dXJlcy5wdXNoKG5ldyBjb3JlLlRleHR1cmUuZnJvbUZyYW1lKGZyYW1lc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW92aWVDbGlwKHRleHR1cmVzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGltYWdlIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgaW1hZ2UgdXJscyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUltYWdlcyA9IGZ1bmN0aW9uIChpbWFnZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTsiLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICAvLyBhIHNwcml0ZSB1c2UgZGZvciByZW5kZXJpbmcgdGV4dHVyZXMuLlxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlcicpO1xuXG4vKipcbiAqIEEgdGlsaW5nIHNwcml0ZSBpcyBhIGZhc3Qgd2F5IG9mIHJlbmRlcmluZyBhIHRpbGluZyBpbWFnZVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmUge1RleHR1cmV9IHRoZSB0ZXh0dXJlIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFRpbGluZ1Nwcml0ZSh0ZXh0dXJlLCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGluZyBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVTY2FsZSA9IG5ldyBjb3JlLlBvaW50KDEsMSk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgcG9zaXRpb24gb2YgdGhlIGltYWdlIHRoYXQgaXMgYmVpbmcgdGlsZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBuZXcgY29yZS5Qb2ludCgwLDApO1xuXG4gICAgLy8vLy8gcHJpdmF0ZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHdpdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gd2lkdGggfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0IHx8IDEwMDtcblxuICAgIC8qKlxuICAgICAqIEFuIGludGVybmFsIFdlYkdMIFVWIGNhY2hlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlVXZzfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdXZzID0gbmV3IGNvcmUuVGV4dHVyZVV2cygpO1xuXG4gICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IG51bGw7XG5cbiAgICAvL1RPRE8gbW92ZS4uXG4gICAgdGhpcy5zaGFkZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcihcblxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1VHJhbnNmb3JtOycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJyAgIGNvb3JkIC09IHVUcmFuc2Zvcm0ueHk7JyxcbiAgICAgICAgJyAgIGNvb3JkIC89IHVUcmFuc2Zvcm0uenc7JyxcbiAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBjb29yZDsnLFxuXG4gICAgICAgICcgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpOycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgIFtcbiAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdUZyYW1lOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzIgdVBpeGVsU2l6ZTsnLFxuXG4gICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IG1vZCh2VGV4dHVyZUNvb3JkLCB1RnJhbWUuencpOycsXG4gICAgICAgICcgICBjb29yZCA9IGNsYW1wKGNvb3JkLCB1UGl4ZWxTaXplLCB1RnJhbWUuencgLSB1UGl4ZWxTaXplKTsnLFxuICAgICAgICAnICAgY29vcmQgKz0gdUZyYW1lLnh5OycsXG5cbiAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9ICB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdUZyYW1lOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVRyYW5zZm9ybTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLDAsMSwxXSB9LFxuICAgICAgICAgICAgICAgIHVQaXhlbFNpemUgOiB7IHR5cGUgOiAnMmZ2JywgdmFsdWU6IFsxLCAxXX1cbiAgICAgICAgICAgIH1cbiAgICAgICk7XG59XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsaW5nU3ByaXRlO1xubW9kdWxlLmV4cG9ydHMgPSBUaWxpbmdTcHJpdGU7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsaW5nU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRpbGluZ1Nwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybjtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICAvLyB0d2VhayBvdXIgdGV4dHVyZSB0ZW1wb3JhcmlseS4uXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUgfHwgIXRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGVtcFV2cyA9IHRleHR1cmUuX3V2cyxcbiAgICAgICAgdGVtcFdpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIHRlbXBIZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQsXG4gICAgICAgIHR3ID0gdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCxcbiAgICAgICAgdGggPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRoaXMuX3V2cztcbiAgICB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51UGl4ZWxTaXplLnZhbHVlWzBdID0gMS4wL3R3O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMV0gPSAxLjAvdGg7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMF0gPSB0ZW1wVXZzLngwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVsxXSA9IHRlbXBVdnMueTA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzJdID0gdGVtcFV2cy54MSAtIHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzNdID0gdGVtcFV2cy55MiAtIHRlbXBVdnMueTA7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzBdID0gKHRoaXMudGlsZVBvc2l0aW9uLnggJSAodGVtcFdpZHRoICogdGhpcy50aWxlU2NhbGUueCkpIC8gdGhpcy5fd2lkdGg7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsxXSA9ICh0aGlzLnRpbGVQb3NpdGlvbi55ICUgKHRlbXBIZWlnaHQgKiB0aGlzLnRpbGVTY2FsZS55KSkgLyB0aGlzLl9oZWlnaHQ7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsyXSA9ICggdHcgLyB0aGlzLl93aWR0aCApICogdGhpcy50aWxlU2NhbGUueDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzNdID0gKCB0aCAvIHRoaXMuX2hlaWdodCApICogdGhpcy50aWxlU2NhbGUueTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIodGhpcyk7XG5cbiAgICB0ZXh0dXJlLl91dnMgPSB0ZW1wVXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGVtcFdpZHRoO1xuICAgIHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRlbXBIZWlnaHQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBhIHJlZmVyZW5jZSB0byB0aGUgY2FudmFzIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0LFxuICAgICAgICB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgYmFzZVRleHR1cmUgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBtb2RYID0gKHRoaXMudGlsZVBvc2l0aW9uLnggLyB0aGlzLnRpbGVTY2FsZS54KSAlIHRleHR1cmUuX2ZyYW1lLndpZHRoLFxuICAgICAgICBtb2RZID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgLyB0aGlzLnRpbGVTY2FsZS55KSAlIHRleHR1cmUuX2ZyYW1lLmhlaWdodDtcblxuICAgIC8vIGNyZWF0ZSBhIG5pY2Ugc2hpbnkgcGF0dGVybiFcbiAgICAvLyBUT0RPIHRoaXMgbmVlZHMgdG8gYmUgcmVmcmVzaGVkIGlmIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgaWYoIXRoaXMuX2NhbnZhc1BhdHRlcm4pXG4gICAge1xuICAgICAgICAvLyBjdXQgYW4gb2JqZWN0IGZyb20gYSBzcHJpdGVzaGVldC4uXG4gICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IGNvcmUuQ2FudmFzQnVmZmVyKHRleHR1cmUuX2ZyYW1lLndpZHRoLCB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQpO1xuXG4gICAgICAgIC8vIFRpbnQgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgICAgaWYgKHRoaXMudGludCAhPT0gMHhGRkZGRkYpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlZFRpbnQgIT09IHRoaXMudGludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUgPSBDYW52YXNUaW50ZXIuZ2V0VGludGVkVGV4dHVyZSh0aGlzLCB0aGlzLnRpbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZSh0aGlzLnRpbnRlZFRleHR1cmUsIDAsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZShiYXNlVGV4dHVyZS5zb3VyY2UsIC10ZXh0dXJlLl9mcmFtZS54LCAtdGV4dHVyZS5fZnJhbWUueSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IHRlbXBDYW52YXMuY29udGV4dC5jcmVhdGVQYXR0ZXJuKCB0ZW1wQ2FudmFzLmNhbnZhcywgJ3JlcGVhdCcgKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgY29udGV4dCBzdGF0ZS4uXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb24pO1xuXG4gICAgLy8gVE9ETyAtIHRoaXMgc2hvdWxkIGJlIHJvbGxlZCBpbnRvIHRoZSBzZXRUcmFuc2Zvcm0gYWJvdmUuLlxuICAgIGNvbnRleHQuc2NhbGUodGhpcy50aWxlU2NhbGUueCx0aGlzLnRpbGVTY2FsZS55KTtcblxuICAgIGNvbnRleHQudHJhbnNsYXRlKG1vZFggKyAodGhpcy5hbmNob3IueCAqIC10aGlzLl93aWR0aCApLFxuICAgICAgICAgICAgICAgICAgICAgIG1vZFkgKyAodGhpcy5hbmNob3IueSAqIC10aGlzLl9oZWlnaHQpKTtcblxuICAgIC8vIGNoZWNrIGJsZW5kIG1vZGVcbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyBmaWxsIHRoZSBwYXR0ZXJuIVxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fY2FudmFzUGF0dGVybjtcbiAgICBjb250ZXh0LmZpbGxSZWN0KC1tb2RYLFxuICAgICAgICAgICAgICAgICAgICAgLW1vZFksXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl93aWR0aCAvIHRoaXMudGlsZVNjYWxlLngsXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWlnaHQgLyB0aGlzLnRpbGVTY2FsZS55KTtcblxuXG4gICAgLy9UT0RPIC0gcHJldHR5IHN1cmUgdGhpcyBjYW4gYmUgZGVsZXRlZC4uLlxuICAgIC8vY29udGV4dC50cmFuc2xhdGUoLXRoaXMudGlsZVBvc2l0aW9uLnggKyAodGhpcy5hbmNob3IueCAqIHRoaXMuX3dpZHRoKSwgLXRoaXMudGlsZVBvc2l0aW9uLnkgKyAodGhpcy5hbmNob3IueSAqIHRoaXMuX2hlaWdodCkpO1xuICAgIC8vY29udGV4dC5zY2FsZSgxIC8gdGhpcy50aWxlU2NhbGUueCwgMSAvIHRoaXMudGlsZVNjYWxlLnkpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBzcHJpdGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xuXG4gICAgdmFyIHcwID0gd2lkdGggKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICB2YXIgdzEgPSB3aWR0aCAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgdmFyIGgwID0gaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgdmFyIGgxID0gaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG5cbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgdmFyIHgxID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTIgPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHg0ID0gIGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciBtaW5YLFxuICAgICAgICBtYXhYLFxuICAgICAgICBtaW5ZLFxuICAgICAgICBtYXhZO1xuXG4gICAgbWluWCA9IHgxO1xuICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgbWluWSA9IHkxO1xuICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgbWF4WCA9IHgxO1xuICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgbWF4WSA9IHkxO1xuICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG5cbiAgICByZXR1cm4gYm91bmRzO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byBjaGVja1xuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKlxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsZVNjYWxlID0gbnVsbDtcbiAgICB0aGlzLl90aWxlU2NhbGVPZmZzZXQgPSBudWxsO1xuICAgIHRoaXMudGlsZVBvc2l0aW9uID0gbnVsbDtcblxuICAgIHRoaXMuX3V2cyA9IG51bGw7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSB0aWxpbmcgc3ByaXRlIHRoYXQgd2lsbCB1c2UgYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICovXG5UaWxpbmdTcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQsd2lkdGgsaGVpZ2h0KVxue1xuICAgIHZhciB0ZXh0dXJlID0gY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgJyArIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKHRleHR1cmUsd2lkdGgsaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBBIG5ldyBUaWxpbmdTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgd2lkdGgsIGhlaWdodCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRpbGluZ1Nwcml0ZShjb3JlLlRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpLHdpZHRoLGhlaWdodCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgRGlzcGxheU9iamVjdCA9IGNvcmUuRGlzcGxheU9iamVjdCxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gbnVsbDtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbEhpdFRlc3QgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsRGVzdHJveSA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVkU3ByaXRlID0gbnVsbDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGlzcGxheU9iamVjdC5wcm90b3R5cGUsIHtcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgeW91IHdhbnQgdGhpcyBkaXNwbGF5IG9iamVjdCB0byBiZSBjYWNoZWQgYXMgYSBiaXRtYXAuXG4gICAgICogVGhpcyBiYXNpY2FsbHkgdGFrZXMgYSBzbmFwIHNob3Qgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IGFzIGl0IGlzIGF0IHRoYXQgbW9tZW50LiBJdCBjYW4gcHJvdmlkZSBhIHBlcmZvcm1hbmNlIGJlbmVmaXQgZm9yIGNvbXBsZXggc3RhdGljIGRpc3BsYXlPYmplY3RzLlxuICAgICAqIFRvIHJlbW92ZSBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ2ZhbHNlJ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGNhY2hlQXNCaXRtYXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVBc0JpdG1hcDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NhY2hlQXNCaXRtYXAgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSB0aGlzLnJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gdGhpcy5yZW5kZXJDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMudXBkYXRlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzID0gdGhpcy5nZXRCb3VuZHM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbERlc3Ryb3kgPSB0aGlzLmRlc3Ryb3k7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQgPSB0aGlzLmNvbnRhaW5zUG9pbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSB0aGlzLl9jYWNoZUFzQml0bWFwRGVzdHJveTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXN0cm95Q2FjaGVkRGlzcGxheU9iamVjdCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXM7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRCb3VuZHMgPSB0aGlzLl9vcmlnaW5hbEdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX29yaWdpbmFsRGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fb3JpZ2luYWxDb250YWluc1BvaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBXZWJHTFxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gdGhlIFdlYkdMIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZFdlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENhY2hlZERpc3BsYXlPYmplY3QoIHJlbmRlcmVyICk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIoIHRoaXMuX2NhY2hlZFNwcml0ZSApO1xufTtcblxuLyoqXG4qIFByZXBhcmVzIHRoZSBXZWJHTCByZW5kZXJlciB0byBjYWNoZSB0aGUgc3ByaXRlXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGZpcnN0IHdlIGZsdXNoIGFueXRoaW5nIGxlZnQgaW4gdGhlIHJlbmRlcmVyIChvdGhlcndpc2UgaXQgd291bGQgZ2V0IHJlbmRlcmVkIHRvIHRoZSBjYWNoZWQgdGV4dHVyZSlcbiAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbiAgICAvL3RoaXMuZmlsdGVycz0gW107XG4gICAgLy8gbmV4dCB3ZSBmaW5kIHRoZSBkaW1lbnNpb25zIG9mIHRoZSB1bnRyYW5zZm9ybWVkIG9iamVjdFxuICAgIC8vIHRoaXMgZnVuY3Rpb24gYWxzbyBjYWxscyB1cGRhdGV0cmFuc2Zvcm0gb24gYWxsIGl0cyBjaGlsZHJlbiBhcyBwYXJ0IG9mIHRoZSBtZWFzdXJpbmcuIFRoaXMgbWVhbnMgd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIHRyYW5zZm9ybSBhZ2FpbiBpbiB0aGlzIGZ1bmN0aW9uXG4gICAgLy8gVE9ETyBwYXNzIGFuIG9iamVjdCB0byBjbG9uZSB0b28/IHNhdmVzIGhhdmluZyB0byBjcmVhdGUgYSBuZXcgb25lIGVhY2ggdGltZSFcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmNsb25lKCk7XG5cbiAgICAvLyBhZGQgc29tZSBwYWRkaW5nIVxuICAgIGlmKHRoaXMuX2ZpbHRlcnMpXG4gICAge1xuICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuX2ZpbHRlcnNbMF0ucGFkZGluZztcbiAgICAgICAgYm91bmRzLnggLT0gcGFkZGluZztcbiAgICAgICAgYm91bmRzLnkgLT0gcGFkZGluZztcblxuICAgICAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG4gICAgfVxuXG4gICAgLy8gZm9yIG5vdyB3ZSBjYWNoZSB0aGUgY3VycmVudCByZW5kZXJUYXJnZXQgdGhhdCB0aGUgd2ViR0wgcmVuZGVyZXIgaXMgY3VycmVudGx5IHVzaW5nLlxuICAgIC8vIHRoaXMgY291bGQgYmUgbW9yZSBlbGVnZW50Li5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldDtcbiAgICAvLyBXZSBhbHNvIHN0b3JlIHRoZSBmaWx0ZXIgc3RhY2sgLSBJIHdpbGwgZGVmaW5pdGVseSBsb29rIHRvIGNoYW5nZSBob3cgdGhpcyB3b3JrcyBhIGxpdHRsZSBsYXRlciBkb3duIHRoZSBsaW5lLlxuICAgIHZhciBzdGFjayA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2s7XG5cbiAgICAvLyB0aGlzIHJlbmRlclRleHR1cmUgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBjYWNoZWQgRGlzcGxheU9iamVjdFxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG5cblxuICAgIC8vIHNldCBhbGwgcHJvcGVydGllcyB0byB0aGVyZSBvcmlnaW5hbCBzbyB3ZSBjYW4gcmVuZGVyIHRvIGEgdGV4dHVyZVxuICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoY2FjaGVkUmVuZGVyVGFyZ2V0KTtcbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmZpbHRlclN0YWNrID0gc3RhY2s7XG5cbiAgICB0aGlzLnJlbmRlcldlYkdMICAgICA9IHRoaXMuX3JlbmRlckNhY2hlZFdlYkdMO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICAgICAgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgdHJhbnNmb3JtIG9mIHRoZSBjYWNoZWQgc3ByaXRlIHRvIGF2b2lkIHRoZSBuYXN0eSBmbGlja2VyLi5cbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgLy8gbWFwIHRoZSBoaXQgdGVzdC4uXG4gICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fY2FjaGVkU3ByaXRlLmNvbnRhaW5zUG9pbnQuYmluZCh0aGlzLl9jYWNoZWRTcHJpdGUpO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgc3ByaXRlIHdpdGggY2FudmFzXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gdGhlIENhbnZhcyByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9yZW5kZXJDYWNoZWRDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdENhbnZhcyggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLnJlbmRlckNhbnZhcyhyZW5kZXJlcik7XG59O1xuXG4vL1RPRE8gdGhpcyBjYW4gYmUgdGhlIHNhbWUgYXMgdGhlIHdlYkdMIHZlcmlzb24uLiB3aWxsIG5lZWQgdG8gZG8gYSBsaXR0bGUgdHdlYWtpbmcgZmlyc3QgdGhvdWdoLi5cbi8qKlxuKiBQcmVwYXJlcyB0aGUgQ2FudmFzIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvL2dldCBib3VuZHMgYWN0dWFsbHkgdHJhbnNmb3JtcyB0aGUgb2JqZWN0IGZvciB1cyBhbHJlYWR5IVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIG0sIHRydWUpO1xuXG4gICAgLy8gbm93IHJlc3RvcmUgdGhlIHN0YXRlIGJlIHNldHRpbmcgdGhlIG5ldyBwcm9wZXJ0aWVzXG4gICAgcmVuZGVyZXIuY29udGV4dCA9IGNhY2hlZFJlbmRlclRhcmdldDtcblxuICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fcmVuZGVyQ2FjaGVkQ2FudmFzO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICA9IHRoaXMuX2dldENhY2hlZEJvdW5kcztcblxuXG4gICAgLy8gY3JlYXRlIG91ciBjYWNoZWQgc3ByaXRlXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IGNvcmUuU3ByaXRlKHJlbmRlclRleHR1cmUpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogQ2FsY3VsYXRlcyB0aGUgYm91bmRzIG9mIHRoZSBjYWNoZWQgc3ByaXRlXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2dldENhY2hlZEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLl9jYWNoZWRTcHJpdGUuZ2V0Qm91bmRzKCk7XG59O1xuXG4vKipcbiogRGVzdHJveXMgdGhlIGNhY2hlZCBzcHJpdGUuXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX3RleHR1cmUuZGVzdHJveSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59O1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcERlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSgpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSBpbnN0YW5jZSBuYW1lIG9mIHRoZSBvYmplY3QuXG4gKlxuICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAqIEBtZW1iZXIge3N0cmluZ31cbiAqL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5uYW1lID0gbnVsbDtcblxuLyoqXG4qIFJldHVybnMgdGhlIGRpc3BsYXkgb2JqZWN0IGluIHRoZSBjb250YWluZXJcbipcbiogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuKiBAcGFyYW0gbmFtZSB7c3RyaW5nfSBpbnN0YW5jZSBuYW1lXG4qIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiovXG5jb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWUgPSBmdW5jdGlvbiAobmFtZSlcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbltpXS5uYW1lID09PSBuYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdFxuKlxuKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuKiBAcGFyYW0gcG9pbnQge1BvaW50fSB0aGUgcG9pbnQgdG8gd3JpdGUgdGhlIGdsb2JhbCB2YWx1ZSB0by4gSWYgbnVsbCBhIG5ldyBwb2ludCB3aWxsIGJlIHJldHVybmVkXG4qIEByZXR1cm4ge1BvaW50fVxuKi9cbmNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0R2xvYmFsUG9zaXRpb24gPSBmdW5jdGlvbiAocG9pbnQpXG57XG4gICAgcG9pbnQgPSBwb2ludCB8fCBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgaWYodGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICBwb2ludC54ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMud29ybGRUcmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHBvaW50LnggPSB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIHBvaW50LnkgPSB0aGlzLnBvc2l0aW9uLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxucmVxdWlyZSgnLi9jYWNoZUFzQml0bWFwJyk7XG5yZXF1aXJlKCcuL2dldENoaWxkQnlOYW1lJyk7XG5yZXF1aXJlKCcuL2dldEdsb2JhbFBvc2l0aW9uJyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmV4dHJhc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNb3ZpZUNsaXA6ICAgICAgcmVxdWlyZSgnLi9Nb3ZpZUNsaXAnKSxcbiAgICBUaWxpbmdTcHJpdGU6ICAgcmVxdWlyZSgnLi9UaWxpbmdTcHJpdGUnKSxcbiAgICBCaXRtYXBUZXh0OiAgICAgcmVxdWlyZSgnLi9CaXRtYXBUZXh0Jylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGUgWSBpcyBmbGlwcGVkIGluIHRoaXMgc2hhZGVyIGZvciBzb21lIHJlYXNvbi5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgc2hhZGVyIDogaHR0cHM6Ly93d3cuc2hhZGVydG95LmNvbS92aWV3L2xzc0dEaiBieSBAbW92QVgxM2hcbiAqL1xuXG4vKipcbiAqIEFuIEFTQ0lJIGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQXNjaWlGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gZmxvYXQgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IGNoYXJhY3RlcihmbG9hdCBuLCB2ZWMyIHApXFxue1xcbiAgICBwID0gZmxvb3IocCp2ZWMyKDQuMCwgLTQuMCkgKyAyLjUpO1xcbiAgICBpZiAoY2xhbXAocC54LCAwLjAsIDQuMCkgPT0gcC54ICYmIGNsYW1wKHAueSwgMC4wLCA0LjApID09IHAueSlcXG4gICAge1xcbiAgICAgICAgaWYgKGludChtb2Qobi9leHAyKHAueCArIDUuMCpwLnkpLCAyLjApKSA9PSAxKSByZXR1cm4gMS4wO1xcbiAgICB9XFxuICAgIHJldHVybiAwLjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5O1xcblxcbiAgICB2ZWMzIGNvbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgZmxvb3IoIHV2IC8gcGl4ZWxTaXplICkgKiBwaXhlbFNpemUgLyBkaW1lbnNpb25zLnh5KS5yZ2I7XFxuXFxuICAgIGZsb2F0IGdyYXkgPSAoY29sLnIgKyBjb2wuZyArIGNvbC5iKSAvIDMuMDtcXG5cXG4gICAgZmxvYXQgbiA9ICA2NTUzNi4wOyAgICAgICAgICAgICAvLyAuXFxuICAgIGlmIChncmF5ID4gMC4yKSBuID0gNjU2MDAuMDsgICAgLy8gOlxcbiAgICBpZiAoZ3JheSA+IDAuMykgbiA9IDMzMjc3Mi4wOyAgIC8vICpcXG4gICAgaWYgKGdyYXkgPiAwLjQpIG4gPSAxNTI1NTA4Ni4wOyAvLyBvXFxuICAgIGlmIChncmF5ID4gMC41KSBuID0gMjMzODUxNjQuMDsgLy8gJlxcbiAgICBpZiAoZ3JheSA+IDAuNikgbiA9IDE1MjUyMDE0LjA7IC8vIDhcXG4gICAgaWYgKGdyYXkgPiAwLjcpIG4gPSAxMzE5OTQ1Mi4wOyAvLyBAXFxuICAgIGlmIChncmF5ID4gMC44KSBuID0gMTE1MTI4MTAuMDsgLy8gI1xcblxcbiAgICB2ZWMyIHAgPSBtb2QoIHV2IC8gKCBwaXhlbFNpemUgKiAwLjUgKSwgMi4wKSAtIHZlYzIoMS4wKTtcXG4gICAgY29sID0gY29sICogY2hhcmFjdGVyKG4sIHApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbCwgMS4wKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiA4IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkFzY2lpRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQXNjaWlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXNjaWlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFzY2lpRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBc2NpaUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGl4ZWwgc2l6ZSB1c2VkIGJ5IHRoZSBmaWx0ZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Bc2NpaUZpbHRlciNcbiAgICAgKi9cbiAgICBzaXplOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsb29tRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsb29tRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlciA9IG5ldyBCbHVyWUZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcbn1cblxuQmxvb21GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbG9vbUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbG9vbUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxvb21GaWx0ZXI7XG5cbkJsb29tRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAvL1RPRE8gLSBjb3B5VGV4U3ViSW1hZ2UyRCBjb3VsZCBiZSB1c2VkIGhlcmU/XG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5TQ1JFRU4pO1xuXG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsb29tRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cblxuLyoqXG4gKiBUaGUgQmx1ckRpckZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0b3dhcmQgYSBkaXJlY3Rpb24gdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpclhcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJZXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJEaXJGaWx0ZXIoZGlyWCwgZGlyWSlcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gZmxvYXQgZGlyWDtcXG51bmlmb3JtIGZsb2F0IGRpclk7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbM107XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWSApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApICogMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pICogMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pICogMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSAqIDAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgZGlyWDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogZGlyWCB8fCAwIH0sXG4gICAgICAgICAgICBkaXJZOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJZIHx8IDAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWCBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJYID0gZGlyWCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWSBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJZID0gZGlyWSB8fCAwO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJEaXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJEaXJGaWx0ZXI7XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcikge1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZiAodGhpcy5wYXNzZXMgPT09IDEpIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCByZW5kZXJUYXJnZXQsIGNsZWFyKTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMjsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL3RoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvICh0aGlzLnBhc3NlcysoaSoyKSkgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCByZW5kZXJUYXJnZXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IHZhbHVlICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBkaXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyWDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZGlyWC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJZO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJZLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWUZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBCbHVyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG59XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJGaWx0ZXI7XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHBhc3Nlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5ibHVyWEZpbHRlci5wYXNzZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcyA9IHRoaXMuYmx1cllGaWx0ZXIucGFzc2VzID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1clhGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJYRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAxMiAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwNCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuXFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1clhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1clhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJYRmlsdGVyO1xuXG5CbHVyWEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1clhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJYRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gIE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJZRmlsdGVyIGFwcGxpZXMgYSBob3Jpem9udGFsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAxMiAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDEyICogc3RyZW5ndGgpO1xcblxcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJZRmlsdGVyO1xuXG5CbHVyWUZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gTWF0aC5hYnModGhpcy5zdHJlbmd0aCkgLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIFNtYXJ0IEJsdXIgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTbWFydEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgKiBwZXJjZW50KTtcXG4gICAgICAgIHNhbXBsZS5yZ2IgKj0gc2FtcGxlLmE7XFxuICAgICAgICBjb2xvciArPSBzYW1wbGUgKiB3ZWlnaHQ7XFxuICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgLyB0b3RhbDtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAvPSBnbF9GcmFnQ29sb3IuYSArIDAuMDAwMDE7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgZGVsdGE6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC4xLCB5OiAwLjAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU21hcnRCbHVyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTbWFydEJsdXJGaWx0ZXI7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA1eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIGBgYGpzXG4gKiAgdmFyIGNvbG9yTWF0cml4ID0gbmV3IFBJWEkuQ29sb3JNYXRyaXhGaWx0ZXIoKTtcbiAqICBjb250YWluZXIuZmlsdGVycyA9IFtjb2xvck1hdHJpeF07XG4gKiAgY29sb3JNYXRyaXguY29udHJhc3QoMik7XG4gKiBgYGBcbiAqIEBhdXRob3IgQ2zDqW1lbnQgQ2hlbmViYXVsdCA8Y2xlbWVudEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ29sb3JNYXRyaXhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgbVsyNV07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcblxcbiAgICB2ZWM0IGMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IuciA9IChtWzBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzJdICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IG1bNF07XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5nID0gKG1bNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bN10gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gbVs5XTtcXG5cXG4gICAgIGdsX0ZyYWdDb2xvci5iID0gKG1bMTBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzExXSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IG1bMTRdO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmEgPSAobVsxNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTZdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gbVsxOV07XFxuXFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICcxZnYnLCB2YWx1ZTogW1xuICAgICAgICAgICAgICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvck1hdHJpeEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JNYXRyaXhGaWx0ZXI7XG5cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGN1cnJlbnQgbWF0cml4IGFuZCBzZXQgdGhlIG5ldyBvbmVcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IGlmIHRydWUsIGN1cnJlbnQgbWF0cml4IGFuZCBtYXRyaXggYXJlIG11bHRpcGxpZWQuIElmIGZhbHNlLCBqdXN0IHNldCB0aGUgY3VycmVudCBtYXRyaXggd2l0aCBAcGFyYW0gbWF0cml4XG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fbG9hZE1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgsIG11bHRpcGx5KVxue1xuICAgIG11bHRpcGx5ID0gISFtdWx0aXBseTtcblxuICAgIHZhciBuZXdNYXRyaXggPSBtYXRyaXg7XG5cbiAgICBpZiAobXVsdGlwbHkpIHtcbiAgICAgICAgdGhpcy5fbXVsdGlwbHkobmV3TWF0cml4LCB0aGlzLnVuaWZvcm1zLm0udmFsdWUsIG1hdHJpeCk7XG4gICAgICAgIG5ld01hdHJpeCA9IHRoaXMuX2NvbG9yTWF0cml4KG5ld01hdHJpeCk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgbWF0cml4XG4gICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gbmV3TWF0cml4O1xufTtcblxuLyoqXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQ1J3NcbiAqXG4gKiBAcGFyYW0gb3V0IHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0gYSB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIGIge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyBvdXQge251bWJlcltdfSAobWF0IDV4NClcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpXG57XG5cbiAgICAvLyBSZWQgQ2hhbm5lbFxuICAgIG91dFswXSA9IChhWzBdICogYlswXSkgKyAoYVsxXSAqIGJbNV0pICsgKGFbMl0gKiBiWzEwXSkgKyAoYVszXSAqIGJbMTVdKTtcbiAgICBvdXRbMV0gPSAoYVswXSAqIGJbMV0pICsgKGFbMV0gKiBiWzZdKSArIChhWzJdICogYlsxMV0pICsgKGFbM10gKiBiWzE2XSk7XG4gICAgb3V0WzJdID0gKGFbMF0gKiBiWzJdKSArIChhWzFdICogYls3XSkgKyAoYVsyXSAqIGJbMTJdKSArIChhWzNdICogYlsxN10pO1xuICAgIG91dFszXSA9IChhWzBdICogYlszXSkgKyAoYVsxXSAqIGJbOF0pICsgKGFbMl0gKiBiWzEzXSkgKyAoYVszXSAqIGJbMThdKTtcbiAgICBvdXRbNF0gPSAoYVswXSAqIGJbNF0pICsgKGFbMV0gKiBiWzldKSArIChhWzJdICogYlsxNF0pICsgKGFbM10gKiBiWzE5XSk7XG5cbiAgICAvLyBHcmVlbiBDaGFubmVsXG4gICAgb3V0WzVdID0gKGFbNV0gKiBiWzBdKSArIChhWzZdICogYls1XSkgKyAoYVs3XSAqIGJbMTBdKSArIChhWzhdICogYlsxNV0pO1xuICAgIG91dFs2XSA9IChhWzVdICogYlsxXSkgKyAoYVs2XSAqIGJbNl0pICsgKGFbN10gKiBiWzExXSkgKyAoYVs4XSAqIGJbMTZdKTtcbiAgICBvdXRbN10gPSAoYVs1XSAqIGJbMl0pICsgKGFbNl0gKiBiWzddKSArIChhWzddICogYlsxMl0pICsgKGFbOF0gKiBiWzE3XSk7XG4gICAgb3V0WzhdID0gKGFbNV0gKiBiWzNdKSArIChhWzZdICogYls4XSkgKyAoYVs3XSAqIGJbMTNdKSArIChhWzhdICogYlsxOF0pO1xuICAgIG91dFs5XSA9IChhWzVdICogYls0XSkgKyAoYVs2XSAqIGJbOV0pICsgKGFbN10gKiBiWzE0XSkgKyAoYVs4XSAqIGJbMTldKTtcblxuICAgIC8vIEJsdWUgQ2hhbm5lbFxuICAgIG91dFsxMF0gPSAoYVsxMF0gKiBiWzBdKSArIChhWzExXSAqIGJbNV0pICsgKGFbMTJdICogYlsxMF0pICsgKGFbMTNdICogYlsxNV0pO1xuICAgIG91dFsxMV0gPSAoYVsxMF0gKiBiWzFdKSArIChhWzExXSAqIGJbNl0pICsgKGFbMTJdICogYlsxMV0pICsgKGFbMTNdICogYlsxNl0pO1xuICAgIG91dFsxMl0gPSAoYVsxMF0gKiBiWzJdKSArIChhWzExXSAqIGJbN10pICsgKGFbMTJdICogYlsxMl0pICsgKGFbMTNdICogYlsxN10pO1xuICAgIG91dFsxM10gPSAoYVsxMF0gKiBiWzNdKSArIChhWzExXSAqIGJbOF0pICsgKGFbMTJdICogYlsxM10pICsgKGFbMTNdICogYlsxOF0pO1xuICAgIG91dFsxNF0gPSAoYVsxMF0gKiBiWzRdKSArIChhWzExXSAqIGJbOV0pICsgKGFbMTJdICogYlsxNF0pICsgKGFbMTNdICogYlsxOV0pO1xuXG4gICAgLy8gQWxwaGEgQ2hhbm5lbFxuICAgIG91dFsxNV0gPSAoYVsxNV0gKiBiWzBdKSArIChhWzE2XSAqIGJbNV0pICsgKGFbMTddICogYlsxMF0pICsgKGFbMThdICogYlsxNV0pO1xuICAgIG91dFsxNl0gPSAoYVsxNV0gKiBiWzFdKSArIChhWzE2XSAqIGJbNl0pICsgKGFbMTddICogYlsxMV0pICsgKGFbMThdICogYlsxNl0pO1xuICAgIG91dFsxN10gPSAoYVsxNV0gKiBiWzJdKSArIChhWzE2XSAqIGJbN10pICsgKGFbMTddICogYlsxMl0pICsgKGFbMThdICogYlsxN10pO1xuICAgIG91dFsxOF0gPSAoYVsxNV0gKiBiWzNdKSArIChhWzE2XSAqIGJbOF0pICsgKGFbMTddICogYlsxM10pICsgKGFbMThdICogYlsxOF0pO1xuICAgIG91dFsxOV0gPSAoYVsxNV0gKiBiWzRdKSArIChhWzE2XSAqIGJbOV0pICsgKGFbMTddICogYlsxNF0pICsgKGFbMThdICogYlsxOV0pO1xuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEByZXR1cm4gbSB7bnVtYmVyW119IChtYXQgNXg0KSB3aXRoIGFsbCB2YWx1ZXMgYmV0d2VlbiAwLTFcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9jb2xvck1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgLy8gQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICAgIHZhciBtID0gbmV3IEZsb2F0MzJBcnJheShtYXRyaXgpO1xuICAgIG1bNF0gLz0gMjU1O1xuICAgIG1bOV0gLz0gMjU1O1xuICAgIG1bMTRdIC89IDI1NTtcbiAgICBtWzE5XSAvPSAyNTU7XG5cbiAgICByZXR1cm4gbTtcbn07XG5cbi8qKlxuICogQWRqdXN0cyBicmlnaHRuZXNzXG4gKlxuICogQHBhcmFtIGIge251bWJlcn0gdmFsdWUgb2YgdGhlIGJyaWd0aG5lc3MgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJpZ2h0bmVzcyA9IGZ1bmN0aW9uIChiLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBiLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCBiLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCBiLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgbWF0cmljZXMgaW4gZ3JleSBzY2FsZXNcbiAqXG4gKiBAcGFyYW0gc2NhbGUge251bWJlcn0gdmFsdWUgb2YgdGhlIGdyZXkgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlID0gZnVuY3Rpb24gKHNjYWxlLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuLy9BbWVyaWNhbml6ZWQgYWxpYXNcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmF5c2NhbGUgPSBDb2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlO1xuXG4vKipcbiAqIFNldCB0aGUgYmxhY2sgYW5kIHdoaXRlIG1hdHJpY2VcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ibGFja0FuZFdoaXRlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBodWUgcHJvcGVydHkgb2YgdGhlIGNvbG9yXG4gKlxuICogQHBhcmFtIHJvdGF0aW9uIHtudW1iZXJ9IGluIGRlZ3JlZXNcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5odWUgPSBmdW5jdGlvbiAocm90YXRpb24sIG11bHRpcGx5KVxue1xuICAgIHJvdGF0aW9uID0gKHJvdGF0aW9uIHx8IDApIC8gMTgwICogTWF0aC5QSTtcbiAgICB2YXIgY29zID0gTWF0aC5jb3Mocm90YXRpb24pLFxuICAgICAgICBzaW4gPSBNYXRoLnNpbihyb3RhdGlvbik7XG5cbiAgICAvLyBsdW1pbmFuY2VSZWQsIGx1bWluYW5jZUdyZWVuLCBsdW1pbmFuY2VCbHVlXG4gICAgdmFyIGx1bVIgPSAwLjIxMywgLy8gb3IgMC4zMDg2XG4gICAgICAgIGx1bUcgPSAwLjcxNSwgLy8gb3IgMC42MDk0XG4gICAgICAgIGx1bUIgPSAwLjA3MjsgLy8gb3IgMC4wODIwXG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBsdW1SICsgY29zICogKDEgLSBsdW1SKSArIHNpbiAqICgtbHVtUiksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKC1sdW1HKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoMSAtIGx1bUIpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgwLjE0MyksIGx1bUcgKyBjb3MgKiAoMSAtIGx1bUcpICsgc2luICogKDAuMTQwKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoLTAuMjgzKSwgMCwgMCxcbiAgICAgICAgbHVtUiArIGNvcyAqICgtbHVtUikgKyBzaW4gKiAoLSgxIC0gbHVtUikpLCBsdW1HICsgY29zICogKC1sdW1HKSArIHNpbiAqIChsdW1HKSwgbHVtQiArIGNvcyAqICgxIC0gbHVtQikgKyBzaW4gKiAobHVtQiksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLyoqXG4gKiBTZXQgdGhlIGNvbnRyYXN0IG1hdHJpeCwgaW5jcmVhc2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBkYXJrIGFuZCBicmlnaHRcbiAqIEluY3JlYXNlIGNvbnRyYXN0IDogc2hhZG93cyBkYXJrZXIgYW5kIGhpZ2hsaWdodHMgYnJpZ2h0ZXJcbiAqIERlY3JlYXNlIGNvbnRyYXN0IDogYnJpbmcgdGhlIHNoYWRvd3MgdXAgYW5kIHRoZSBoaWdobGlnaHRzIGRvd25cbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBjb250cmFzdFxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbnRyYXN0ID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHYgPSAoYW1vdW50IHx8IDApICsgMTtcbiAgICB2YXIgbyA9IC0xMjggKiAodiAtIDEpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgdiwgMCwgMCwgMCwgbyxcbiAgICAgICAgMCwgdiwgMCwgMCwgbyxcbiAgICAgICAgMCwgMCwgdiwgMCwgbyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHNhdHVyYXRpb24gbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGNvbG9yc1xuICogSW5jcmVhc2Ugc2F0dXJhdGlvbiA6IGluY3JlYXNlIGNvbnRyYXN0LCBicmlnaHRuZXNzLCBhbmQgc2hhcnBuZXNzXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNhdHVyYXRlID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHggPSAoYW1vdW50IHx8IDApICogMiAvIDMgKyAxO1xuICAgIHZhciB5ID0gKCh4IC0gMSkgKiAtMC41KTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHgsIHksIHksIDAsIDAsXG4gICAgICAgIHksIHgsIHksIDAsIDAsXG4gICAgICAgIHksIHksIHgsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRGVzYXR1cmF0ZSBpbWFnZSAocmVtb3ZlIGNvbG9yKVxuICpcbiAqIENhbGwgdGhlIHNhdHVyYXRlIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmRlc2F0dXJhdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICB0aGlzLnNhdHVyYXRlKC0xKTtcbn07XG5cbi8qKlxuICogTmVnYXRpdmUgaW1hZ2UgKGludmVyc2Ugb2YgY2xhc3NpYyByZ2IgbWF0cml4KVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uZWdhdGl2ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAxLCAxLCAwLCAwLFxuICAgICAgICAxLCAwLCAxLCAwLCAwLFxuICAgICAgICAxLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNlcGlhIGltYWdlXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNlcGlhID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMzkzLCAwLjc2ODk5OTksIDAuMTg4OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMzQ5LCAwLjY4NTk5OTksIDAuMTY3OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMjcyLCAwLjUzMzk5OTksIDAuMTMwOTk5OTksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgbW90aW9uIHBpY3R1cmUgcHJvY2VzcyBpbnZlbnRlZCBpbiAxOTE2ICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50ZWNobmljb2xvciA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjkxMjUyNzc4OTE0NTYwODMsIC0wLjg1NDUzNDQ5NzY5NTE2NDUsIC0wLjA5MTU1NTA4NDgyNzU1NTg1LCAwLCAxMS43OTM2MDM0MzQzNzczMzcsXG4gICAgICAgIC0wLjMwODc4MzMzODU5MjgwOTcsIDEuNzY1ODkwODU1NTQ1ODQyOCwgLTAuMTA2MDE3NDMwNzQ3MjIyNDUsIDAsIC03MC4zNTIwNTE2MTQ2MTM5OCxcbiAgICAgICAgLTAuMjMxMTAzMzc3NTQ4NjE2LCAtMC43NTAxODk5MTk3NDQwMjEyLCAxLjg0NzU5NzgxNjEwODE4OSwgMCwgMzAuOTUwOTQwODY5NDkxMTM4LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFBvbGFyb2lkIGZpbHRlclxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wb2xhcm9pZCA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjQzOCwgLTAuMDYyLCAtMC4wNjIsIDAsIDAsXG4gICAgICAgIC0wLjEyMiwgMS4zNzgsIC0wLjEyMiwgMCwgMCxcbiAgICAgICAgLTAuMDE2LCAtMC4wMTYsIDEuNDgzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEZpbHRlciB3aG8gdHJhbnNmb3JtcyA6IFJlZCAtPiBCbHVlIGFuZCBCbHVlIC0+IFJlZFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50b0JHUiA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIENvbG9yIHJldmVyc2FsIGZpbG0gaW50cm9kdWNlZCBieSBFYXN0bWFuIEtvZGFrIGluIDE5MzUuICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5rb2RhY2hyb21lID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuMTI4NTU4MjM5NjU5MzUyNSwgLTAuMzk2NzM4MjI4MzYwMTM0OCwgLTAuMDM5OTI1NTkxNzI5MjE3OTMsIDAsIDYzLjcyOTU4NzYyMTk2NTAyLFxuICAgICAgICAtMC4xNjQwNDMzOTk2MjI0NDYxNiwgMS4wODM1MjUxNTY2MjkxMzA0LCAtMC4wNTQ5ODgwNTExNTYzMzEzMiwgMCwgMjQuNzMyNDA3ODk2NzA2MjAzLFxuICAgICAgICAtMC4xNjc4NjAxMDcwNjE1NTc2MywgLTAuNTYwMzQxNjI3NzY5NTI0OCwgMS42MDE0ODUwNzYxOTY0OTQzLCAwLCAzNS42Mjk4MjgwNzQ2MDk0NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBCcm93biBkZWxpY2lvdXMgYnJvd25pIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJvd25pID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNTk5NzAyMzQ5ODE1OTcxNSwgMC4zNDU1MzI0MzA0ODM5MTI2MywgLTAuMjcwODI5ODY3NDUzODA0MiwgMCwgNDcuNDMxOTI4NTU2MDA4NzMsXG4gICAgICAgIC0wLjAzNzcwMzI0OTgzNzc4MzE1NywgMC44NjA5NTc3NTg3OTkyNjQxLCAwLjE1MDU5NTUyMzg4NDU5OTEzLCAwLCAtMzYuOTY4NDE0OTgzMTkxMjcsXG4gICAgICAgIDAuMjQxMTM2MzUxMjgxNTMzMzUsIC0wLjA3NDQxMDM3OTA4NDIyNDkyLCAwLjQ0OTcyMTgyMDY0ODc3MTUzLCAwLCAtNy41NjIwNzUyNzc1OTEyODMsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBWaW50YWdlIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudmludGFnZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjYyNzkzNDU2MzU2MDU5OTQsIDAuMzIwMjE4MzQyMDgxOTM2NywgLTAuMDM5NjU0MDgyMTEzMTI0NTMsIDAsIDkuNjUxMjg1ODM1Mjk0MTIzLFxuICAgICAgICAwLjAyNTc4Mzk3NzA0ODA4ODY4LCAwLjY0NDExODg2NDQzNzQ3NzEsIDAuMDMyNTkxMjc2MTYxNDkyOTQsIDAsIDcuNDYyODI5MTc2NDcwNTkxLFxuICAgICAgICAwLjA0NjYwNTU1NTY3ODI3MTksIC0wLjA4NTEyMzI5ODcyNDc4OTEsIDAuNTI0MTY0ODAxODcwMDQ2NSwgMCwgNS4xNTkxOTA1ODgyMzUyOTYsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBXZSBkb24ndCBrbm93IGV4YWN0bHkgd2hhdCBpdCBkb2VzLCBraW5kIG9mIGdyYWRpZW50IG1hcCwgYnV0IGZ1bm55IHRvIHBsYXkgd2l0aCFcbiAqXG4gKiBAcGFyYW0gZGVzYXR1cmF0aW9uIHtudW1iZXJ9XG4gKiBAcGFyYW0gdG9uZWQge251bWJlcn1cbiAqIEBwYXJhbSBsaWdodENvbG9yIHtzdHJpbmd9IChleGFtcGxlIDogXCIweEZGRTU4MFwiKVxuICogQHBhcmFtIGRhcmtDb2xvciB7c3RyaW5nfSAgKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbG9yVG9uZSA9IGZ1bmN0aW9uIChkZXNhdHVyYXRpb24sIHRvbmVkLCBsaWdodENvbG9yLCBkYXJrQ29sb3IsIG11bHRpcGx5KVxue1xuICAgIGRlc2F0dXJhdGlvbiA9IGRlc2F0dXJhdGlvbiB8fCAwLjI7XG4gICAgdG9uZWQgPSB0b25lZCB8fCAwLjE1O1xuICAgIGxpZ2h0Q29sb3IgPSBsaWdodENvbG9yIHx8IDB4RkZFNTgwO1xuICAgIGRhcmtDb2xvciA9IGRhcmtDb2xvciB8fCAweDMzODAwMDtcblxuICAgIHZhciBsUiA9ICgobGlnaHRDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEcgPSAoKGxpZ2h0Q29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEIgPSAobGlnaHRDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgdmFyIGRSID0gKChkYXJrQ29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGRHID0gKChkYXJrQ29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEIgPSAoZGFya0NvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjMsIDAuNTksIDAuMTEsIDAsIDAsXG4gICAgICAgIGxSLCBsRywgbEIsIGRlc2F0dXJhdGlvbiwgMCxcbiAgICAgICAgZFIsIGRHLCBkQiwgdG9uZWQsIDAsXG4gICAgICAgIGxSIC0gZFIsIGxHIC0gZEcsIGxCIC0gZEIsIDAsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBOaWdodCBlZmZlY3RcbiAqXG4gKiBAcGFyYW0gaW50ZW5zaXR5IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubmlnaHQgPSBmdW5jdGlvbiAoaW50ZW5zaXR5LCBtdWx0aXBseSlcbntcbiAgICBpbnRlbnNpdHkgPSBpbnRlbnNpdHkgfHwgMC4xO1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGludGVuc2l0eSAqICggLTIuMCksIC1pbnRlbnNpdHksIDAsIDAsIDAsXG4gICAgICAgIC1pbnRlbnNpdHksIDAsIGludGVuc2l0eSwgMCwgMCxcbiAgICAgICAgMCwgaW50ZW5zaXR5LCBpbnRlbnNpdHkgKiAyLjAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLypcbiAqIFByZWRhdG9yIGVmZmVjdFxuICpcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIGEgbmV3IGluZGVwZW50IG9uZVxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gaG93IG11Y2ggdGhlIHByZWRhdG9yIGZlZWxzIGhpcyBmdXR1cmUgdmljdGltXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucHJlZGF0b3IgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxMS4yMjQxMzA2MzA0OTMxNjQgKiBhbW91bnQsIC00Ljc5NDQ4Njk5OTUxMTcxOSAqIGFtb3VudCwgLTIuODc0NjExODU0NTUzMjIyNyAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC40MDM0MjQzODIyMDk3Nzc4MyAqIGFtb3VudCxcbiAgICAgICAgLTMuNjMzMDY5NzUzNjQ2ODUwNiAqIGFtb3VudCwgOS4xOTMxNTcxOTYwNDQ5MjIgKiBhbW91bnQsIC0yLjk1MTgxMDgzNjc5MTk5MiAqIGFtb3VudCwgMCAqIGFtb3VudCwgLTEuMzE2MTM1MDQ4ODY2MjcyICogYW1vdW50LFxuICAgICAgICAtMy4yMTg0MTk3OTAyNjc5NDQzICogYW1vdW50LCAtNC4yMzc1MDMwNTE3NTc4MTI1ICogYW1vdW50LCA3LjQ3NjQ0ODA1OTA4MjAzMSAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC44MDQ0NDU5MjIzNzQ3MjUzICogYW1vdW50LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogTFNEIGVmZmVjdFxuICpcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gSG93IGNyYXp5IGlzIHlvdXIgZWZmZWN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubHNkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDIsIC0wLjQsIDAuNSwgMCwgMCxcbiAgICAgICAgLTAuNSwgMiwgLTAuNCwgMCwgMCxcbiAgICAgICAgLTAuNCwgLTAuNSwgMywgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIHRoZSBkZWZhdWx0IG9uZVxuICpcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBmYWxzZSk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hdHJpeCBvZiB0aGUgY29sb3IgbWF0cml4IGZpbHRlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvck1hdHJpeEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCBbMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMF1cbiAgICAgKi9cbiAgICBtYXRyaXg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgbG93ZXJzIHRoZSBjb2xvciBkZXB0aCBvZiB5b3VyIGltYWdlIGJ5IHRoZSBnaXZlbiBhbW91bnQsIHByb2R1Y2luZyBhbiBpbWFnZSB3aXRoIGEgc21hbGxlciBwYWxldHRlLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvclN0ZXBGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc3RlcDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBjb2xvciA9IGZsb29yKGNvbG9yICogc3RlcCkgLyBzdGVwO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdGVwOiB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvclN0ZXBGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yU3RlcEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2Ygc3RlcHMgdG8gcmVkdWNlIHRoZSBwYWxldHRlIGJ5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29sb3JTdGVwRmlsdGVyI1xuICAgICAqL1xuICAgIHN0ZXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb252b2x1dGlvbkZpbHRlciBjbGFzcyBhcHBsaWVzIGEgbWF0cml4IGNvbnZvbHV0aW9uIGZpbHRlciBlZmZlY3QuXG4gKiBBIGNvbnZvbHV0aW9uIGNvbWJpbmVzIHBpeGVscyBpbiB0aGUgaW5wdXQgaW1hZ2Ugd2l0aCBuZWlnaGJvcmluZyBwaXhlbHMgdG8gcHJvZHVjZSBhIG5ldyBpbWFnZS5cbiAqIEEgd2lkZSB2YXJpZXR5IG9mIGltYWdlIGVmZmVjdHMgY2FuIGJlIGFjaGlldmVkIHRocm91Z2ggY29udm9sdXRpb25zLCBpbmNsdWRpbmcgYmx1cnJpbmcsIGVkZ2VcbiAqIGRldGVjdGlvbiwgc2hhcnBlbmluZywgZW1ib3NzaW5nLCBhbmQgYmV2ZWxpbmcuIFRoZSBtYXRyaXggc2hvdWxkIGJlIHNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBTZWUgaHR0cDovL2RvY3MuZ2ltcC5vcmcvZW4vcGx1Zy1pbi1jb252bWF0cml4Lmh0bWwgZm9yIG1vcmUgaW5mby5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSBBbiBhcnJheSBvZiB2YWx1ZXMgdXNlZCBmb3IgbWF0cml4IHRyYW5zZm9ybWF0aW9uLiBTcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFdpZHRoIG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqL1xuZnVuY3Rpb24gQ29udm9sdXRpb25GaWx0ZXIobWF0cml4LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgbWVkaXVtcCB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTtcXG51bmlmb3JtIGZsb2F0IG1hdHJpeFs5XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjNCBjMTEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgLSB0ZXhlbFNpemUpOyAvLyB0b3AgbGVmdFxcbiAgIHZlYzQgYzEyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55IC0gdGV4ZWxTaXplLnkpKTsgLy8gdG9wIGNlbnRlclxcbiAgIHZlYzQgYzEzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgcmlnaHRcXG5cXG4gICB2ZWM0IGMyMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCBsZWZ0XFxuICAgdmVjNCBjMjIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpOyAvLyBtaWQgY2VudGVyXFxuICAgdmVjNCBjMjMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSkpOyAvLyBtaWQgcmlnaHRcXG5cXG4gICB2ZWM0IGMzMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGxlZnRcXG4gICB2ZWM0IGMzMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLngsIHZUZXh0dXJlQ29vcmQueSArIHRleGVsU2l6ZS55KSk7IC8vIGJvdHRvbSBjZW50ZXJcXG4gICB2ZWM0IGMzMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIHRleGVsU2l6ZSk7IC8vIGJvdHRvbSByaWdodFxcblxcbiAgIGdsX0ZyYWdDb2xvciA9XFxuICAgICAgIGMxMSAqIG1hdHJpeFswXSArIGMxMiAqIG1hdHJpeFsxXSArIGMxMyAqIG1hdHJpeFsyXSArXFxuICAgICAgIGMyMSAqIG1hdHJpeFszXSArIGMyMiAqIG1hdHJpeFs0XSArIGMyMyAqIG1hdHJpeFs1XSArXFxuICAgICAgIGMzMSAqIG1hdHJpeFs2XSArIGMzMiAqIG1hdHJpeFs3XSArIGMzMyAqIG1hdHJpeFs4XTtcXG5cXG4gICBnbF9GcmFnQ29sb3IuYSA9IGMyMi5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hdHJpeDogICAgIHsgdHlwZTogJzFmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCkgfSxcbiAgICAgICAgICAgIHRleGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSAvIHdpZHRoLCB5OiAxIC8gaGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb252b2x1dGlvbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29udm9sdXRpb25GaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hdHJpeC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMS90aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueCA9IDEvdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS55ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQSBDcm9zcyBIYXRjaCBlZmZlY3QgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDcm9zc0hhdGNoRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGZsb2F0IGx1bSA9IGxlbmd0aCh0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQueHkpLnJnYik7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wLCAxLjAsIDEuMCwgMS4wKTtcXG5cXG4gICAgaWYgKGx1bSA8IDEuMDApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC43NSlcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjUwKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54ICsgZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuMylcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55IC0gNS4wLCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblwiXG4gICAgKTtcbn1cblxuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNyb3NzSGF0Y2hGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBEaXNwbGFjZW1lbnRGaWx0ZXIgY2xhc3MgdXNlcyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20gdGhlIHNwZWNpZmllZCB0ZXh0dXJlIChjYWxsZWQgdGhlIGRpc3BsYWNlbWVudCBtYXApIHRvIHBlcmZvcm0gYSBkaXNwbGFjZW1lbnQgb2YgYW4gb2JqZWN0LlxuICogWW91IGNhbiB1c2UgdGhpcyBmaWx0ZXIgdG8gYXBwbHkgYWxsIG1hbm9yIG9mIGNyYXp5IHdhcnBpbmcgZWZmZWN0c1xuICogQ3VycmVudGx5IHRoZSByIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB4IGFuZCB0aGUgZyBwcm9wZXJ0eSBvZiB0aGUgdGV4dHVyZSBpcyB1c2VkIHRvIG9mZnNldCB0aGUgeS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiAobWFrZSBzdXJlIGl0cyBhZGRlZCB0byB0aGUgc2NlbmUhKVxuICovXG5mdW5jdGlvbiBEaXNwbGFjZW1lbnRGaWx0ZXIoc3ByaXRlLCBzY2FsZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuICAgIHNwcml0ZS5yZW5kZXJhYmxlID0gZmFsc2U7XG5cbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2TWFwQ29vcmQgPSAoIG90aGVyTWF0cml4ICogdmVjMyggYVRleHR1cmVDb29yZCwgMS4wKSAgKS54eTtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMiBzY2FsZTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXBTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IG1hcCA9ICB0ZXh0dXJlMkQobWFwU2FtcGxlciwgdk1hcENvb3JkKTtcXG5cXG4gICBtYXAgLT0gMC41O1xcbiAgIG1hcC54eSAqPSBzY2FsZTtcXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgbWFwLngsIHZUZXh0dXJlQ29vcmQueSArIG1hcC55KSk7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtYXBTYW1wbGVyOiAgICAgeyB0eXBlOiAnc2FtcGxlcjJEJywgdmFsdWU6IHNwcml0ZS50ZXh0dXJlIH0sXG4gICAgICAgICAgICBvdGhlck1hdHJpeDogICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBtYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSkgfSxcbiAgICAgICAgICAgIHNjYWxlOiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG5cbiAgICBpZiAoc2NhbGUgPT09IG51bGwgfHwgc2NhbGUgPT09IHVuZGVmaW5lZClcbiAgICB7XG4gICAgICAgIHNjYWxlID0gMjA7XG4gICAgfVxuXG4gICAgdGhpcy5zY2FsZSA9IG5ldyBjb3JlLlBvaW50KHNjYWxlLCBzY2FsZSk7XG59XG5cbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGFjZW1lbnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERpc3BsYWNlbWVudEZpbHRlcjtcblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICBmaWx0ZXJNYW5hZ2VyLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeChpbnB1dC5mcmFtZSwgdGhpcy5tYXNrU3ByaXRlLCB0aGlzLm1hc2tNYXRyaXgpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5vdGhlck1hdHJpeC52YWx1ZSA9IHRoaXMubWFza01hdHJpeC50b0FycmF5KHRydWUpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueCA9IHRoaXMuc2NhbGUueCAqICgxL2lucHV0LmZyYW1lLndpZHRoKTtcbiAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlLnkgPSB0aGlzLnNjYWxlLnkgKiAoMS9pbnB1dC5mcmFtZS5oZWlnaHQpO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRGlzcGxhY2VtZW50RmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvZnVuL2RvdHNjcmVlbi5qc1xuICovXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIGRvdHNjcmVlbiBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgdG8gYmUgbWFkZSBvdXQgb2ZcbiAqIGJsYWNrIGFuZCB3aGl0ZSBoYWxmdG9uZSBkb3RzIGxpa2UgYW4gb2xkIHByaW50ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIERvdFNjcmVlbkZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XFxuXFxuZmxvYXQgcGF0dGVybigpXFxue1xcbiAgIGZsb2F0IHMgPSBzaW4oYW5nbGUpLCBjID0gY29zKGFuZ2xlKTtcXG4gICB2ZWMyIHRleCA9IHZUZXh0dXJlQ29vcmQgKiBkaW1lbnNpb25zLnh5O1xcbiAgIHZlYzIgcG9pbnQgPSB2ZWMyKFxcbiAgICAgICBjICogdGV4LnggLSBzICogdGV4LnksXFxuICAgICAgIHMgKiB0ZXgueCArIGMgKiB0ZXgueVxcbiAgICkgKiBzY2FsZTtcXG4gICByZXR1cm4gKHNpbihwb2ludC54KSAqIHNpbihwb2ludC55KSkgKiA0LjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGZsb2F0IGF2ZXJhZ2UgPSAoY29sb3IuciArIGNvbG9yLmcgKyBjb2xvci5iKSAvIDMuMDtcXG4gICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzMoYXZlcmFnZSAqIDEwLjAgLSA1LjAgKyBwYXR0ZXJuKCkpLCBjb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzY2FsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEb3RTY3JlZW5GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERvdFNjcmVlbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBzY2FsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSByYWRpdXMgb2YgdGhlIGVmZmVjdC5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Eb3RTY3JlZW5GaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllUaW50RmlsdGVyIGFwcGxpZXMgYSB2ZXJ0aWNhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1cllUaW50RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24rb2Zmc2V0KSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMyBjb2xvcjtcXG51bmlmb3JtIGZsb2F0IGFscGhhO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBzdW0gPSB2ZWM0KDAuMCk7XFxuXFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KCBjb2xvci5yZ2IgKiBzdW0uYSAqIGFscGhhLCBzdW0uYSAqIGFscGhhICk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgLyA1MTIgfSxcbiAgICAgICAgICAgIGNvbG9yOiB7IHR5cGU6ICdjJywgdmFsdWU6IFswLDAsMF19LFxuICAgICAgICAgICAgYWxwaGE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNyB9LFxuICAgICAgICAgICAgb2Zmc2V0OiB7IHR5cGU6ICcyZicsIHZhbHVlOls1LCA1XX0sXG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZToxfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJZVGludEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllUaW50RmlsdGVyO1xuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCBjbGVhcik7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJZVGludEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllUaW50RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZVGludEZpbHRlciA9IHJlcXVpcmUoJy4vQmx1cllUaW50RmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIERyb3BTaGFkb3dGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRHJvcFNoYWRvd0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyID0gbmV3IEJsdXJZVGludEZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIHRoaXMucGFkZGluZyA9IDMwO1xuXG4gICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgdGhpcy5fYW5nbGUgPSA0NSAqIE1hdGguUEkgLyAxODA7XG4gICAgdGhpcy5fZGlzdGFuY2UgPSAxMDtcbiAgICB0aGlzLmFscGhhID0gMC43NTtcbiAgICB0aGlzLmhpZGVPYmplY3QgPSBmYWxzZTtcbiAgICB0aGlzLmJsZW5kTW9kZSA9IGNvcmUuQkxFTkRfTU9ERVMuTVVMVElQTFk7XG59XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERyb3BTaGFkb3dGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERyb3BTaGFkb3dGaWx0ZXI7XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICBpZih0aGlzLl9kaXJ0eVBvc2l0aW9uKVxuICAgIHtcbiAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVswXSA9IE1hdGguc2luKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5vZmZzZXQudmFsdWVbMV0gPSBNYXRoLmNvcyh0aGlzLl9hbmdsZSkgKiB0aGlzLl9kaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKHRoaXMuYmxlbmRNb2RlKTtcblxuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZighdGhpcy5oaWRlT2JqZWN0KVxuICAgIHtcblxuICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuICAgIH1cblxuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNvbG9yIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgY29sb3I6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIGNvcmUudXRpbHMucmdiMmhleCggdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmNvbG9yLnZhbHVlID0gY29yZS51dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbHBoYSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFscGhhOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzdGFuY2Ugb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBkaXN0YW5jZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3RhbmNlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYW5nbGUgb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fYW5nbGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2FuZ2xlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZ3JleXNjYWxlcyB0aGUgcGFsZXR0ZSBvZiB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gR3JheUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGdyYXk7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peChnbF9GcmFnQ29sb3IucmdiLCB2ZWMzKDAuMjEyNipnbF9GcmFnQ29sb3IuciArIDAuNzE1MipnbF9GcmFnQ29sb3IuZyArIDAuMDcyMipnbF9GcmFnQ29sb3IuYiksIGdyYXkpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBncmF5OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkdyYXlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5HcmF5RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEdyYXlGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmF5LiAxIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGJsYWNrIGFuZCB3aGl0ZSwgMCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuR3JheUZpbHRlciNcbiAgICAgKi9cbiAgICBncmF5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBmaWx0ZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5maWx0ZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEFzY2lpRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9hc2NpaS9Bc2NpaUZpbHRlcicpLFxuICAgIEJsb29tRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibG9vbS9CbG9vbUZpbHRlcicpLFxuICAgIEJsdXJGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJGaWx0ZXInKSxcbiAgICBCbHVyWEZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJZRmlsdGVyJyksXG4gICAgQmx1ckRpckZpbHRlcjogICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckRpckZpbHRlcicpLFxuICAgIENvbG9yTWF0cml4RmlsdGVyOiAgcmVxdWlyZSgnLi9jb2xvci9Db2xvck1hdHJpeEZpbHRlcicpLFxuICAgIENvbG9yU3RlcEZpbHRlcjogICAgcmVxdWlyZSgnLi9jb2xvci9Db2xvclN0ZXBGaWx0ZXInKSxcbiAgICBDb252b2x1dGlvbkZpbHRlcjogIHJlcXVpcmUoJy4vY29udm9sdXRpb24vQ29udm9sdXRpb25GaWx0ZXInKSxcbiAgICBDcm9zc0hhdGNoRmlsdGVyOiAgIHJlcXVpcmUoJy4vY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyJyksXG4gICAgRGlzcGxhY2VtZW50RmlsdGVyOiByZXF1aXJlKCcuL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXInKSxcbiAgICBEb3RTY3JlZW5GaWx0ZXI6ICAgIHJlcXVpcmUoJy4vZG90L0RvdFNjcmVlbkZpbHRlcicpLFxuICAgIEdyYXlGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ncmF5L0dyYXlGaWx0ZXInKSxcbiAgICBEcm9wU2hhZG93RmlsdGVyOiAgIHJlcXVpcmUoJy4vZHJvcHNoYWRvdy9Ecm9wU2hhZG93RmlsdGVyJyksXG4gICAgSW52ZXJ0RmlsdGVyOiAgICAgICByZXF1aXJlKCcuL2ludmVydC9JbnZlcnRGaWx0ZXInKSxcbiAgICBOb2lzZUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vbm9pc2UvTm9pc2VGaWx0ZXInKSxcbiAgICBQaXhlbGF0ZUZpbHRlcjogICAgIHJlcXVpcmUoJy4vcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXInKSxcbiAgICBSR0JTcGxpdEZpbHRlcjogICAgIHJlcXVpcmUoJy4vcmdiL1JHQlNwbGl0RmlsdGVyJyksXG4gICAgU2hvY2t3YXZlRmlsdGVyOiAgICByZXF1aXJlKCcuL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXInKSxcbiAgICBTZXBpYUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vc2VwaWEvU2VwaWFGaWx0ZXInKSxcbiAgICBTbWFydEJsdXJGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vYmx1ci9TbWFydEJsdXJGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFhGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlcicpLFxuICAgIFR3aXN0RmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi90d2lzdC9Ud2lzdEZpbHRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBpbnZlcnRzIHlvdXIgRGlzcGxheSBPYmplY3RzIGNvbG9ycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gSW52ZXJ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIGZsb2F0IGludmVydDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoICh2ZWMzKDEpLWdsX0ZyYWdDb2xvci5yZ2IpICogZ2xfRnJhZ0NvbG9yLmEsIGdsX0ZyYWdDb2xvci5yZ2IsIDEuMCAtIGludmVydCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgaW52ZXJ0OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkludmVydEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkludmVydEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnZlcnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludmVydEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgaW52ZXJ0LiBgMWAgd2lsbCBmdWxseSBpbnZlcnQgdGhlIGNvbG9ycywgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5JbnZlcnRGaWx0ZXIjXG4gICAgICovXG4gICAgaW52ZXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuaW52ZXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYWRqdXN0L25vaXNlLmpzXG4gKi9cblxuLyoqXG4gKiBBIE5vaXNlIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIE5vaXNlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IG5vaXNlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IHJhbmQodmVjMiBjbylcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGNvLnh5LCB2ZWMyKDEyLjk4OTgsIDc4LjIzMykpKSAqIDQzNzU4LjU0NTMpO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGZsb2F0IGRpZmYgPSAocmFuZCh2VGV4dHVyZUNvb3JkKSAtIDAuNSkgKiBub2lzZTtcXG5cXG4gICAgY29sb3IuciArPSBkaWZmO1xcbiAgICBjb2xvci5nICs9IGRpZmY7XFxuICAgIGNvbG9yLmIgKz0gZGlmZjtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbm9pc2U6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Ob2lzZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbk5vaXNlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE5vaXNlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBOb2lzZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTm9pc2VGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGFtb3VudCBvZiBub2lzZSB0byBhcHBseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLk5vaXNlRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDAuNVxuICAgICAqL1xuICAgIG5vaXNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm5vaXNlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSBwaXhlbGF0ZSBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgJ2Jsb2NreScuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFBpeGVsYXRlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZlYzIgc2l6ZSA9IGRpbWVuc2lvbnMueHkgLyBwaXhlbFNpemU7XFxuXFxuICAgIHZlYzIgY29sb3IgPSBmbG9vciggKCB2VGV4dHVyZUNvb3JkICogc2l6ZSApICkgLyBzaXplICsgcGl4ZWxTaXplL2RpbWVuc2lvbnMueHkgKiAwLjU7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgY29sb3IpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsICB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICd2MicsICAgdmFsdWU6IHsgeDogMTAsIHk6IDEwIH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQaXhlbGF0ZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gUGl4ZWxhdGVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgYSBwb2ludCB0aGF0IGRlc2NyaWJlcyB0aGUgc2l6ZSBvZiB0aGUgYmxvY2tzLlxuICAgICAqIHggaXMgdGhlIHdpZHRoIG9mIHRoZSBibG9jayBhbmQgeSBpcyB0aGUgaGVpZ2h0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlBpeGVsYXRlRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBbiBSR0IgU3BsaXQgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBSR0JTcGxpdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSB2ZWMyIHJlZDtcXG51bmlmb3JtIHZlYzIgZ3JlZW47XFxudW5pZm9ybSB2ZWMyIGJsdWU7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvci5yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgcmVkL2RpbWVuc2lvbnMueHkpLnI7XFxuICAgZ2xfRnJhZ0NvbG9yLmcgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBncmVlbi9kaW1lbnNpb25zLnh5KS5nO1xcbiAgIGdsX0ZyYWdDb2xvci5iID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgYmx1ZS9kaW1lbnNpb25zLnh5KS5iO1xcbiAgIGdsX0ZyYWdDb2xvci5hID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKS5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZDogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGdyZWVuOiAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogLTIwLCB5OiAyMCB9IH0sXG4gICAgICAgICAgICBibHVlOiAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDIwLCB5OiAtMjAgfSB9LFxuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLCAwLCAwLCAwXSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5SR0JTcGxpdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJHQlNwbGl0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBSR0JTcGxpdEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogUmVkIGNoYW5uZWwgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIHJlZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJlZC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR3JlZW4gY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JlZW46IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JlZW4udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBCbHVlIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGFwcGxpZXMgYSBzZXBpYSBlZmZlY3QgdG8geW91ciBEaXNwbGF5IE9iamVjdHMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNlcGlhRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHNlcGlhO1xcblxcbmNvbnN0IG1hdDMgc2VwaWFNYXRyaXggPSBtYXQzKDAuMzU4OCwgMC43MDQ0LCAwLjEzNjgsIDAuMjk5MCwgMC41ODcwLCAwLjExNDAsIDAuMjM5MiwgMC40Njk2LCAwLjA5MTIpO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGdsX0ZyYWdDb2xvci5yZ2IgKiBzZXBpYU1hdHJpeCwgc2VwaWEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNlcGlhOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNlcGlhRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU2VwaWFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2VwaWFGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNlcGlhRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTZXBpYUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIHNlcGlhLiBgMWAgd2lsbCBhcHBseSB0aGUgZnVsbCBzZXBpYSBlZmZlY3QsIGFuZFxuICAgICAqIGAwYCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2VwaWFGaWx0ZXIjXG4gICAgICovXG4gICAgc2VwaWE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc2VwaWEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbG9yTWF0cml4RmlsdGVyIGNsYXNzIGxldHMgeW91IGFwcGx5IGEgNHg0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgUkdCQVxuICogY29sb3IgYW5kIGFscGhhIHZhbHVlcyBvZiBldmVyeSBwaXhlbCBvbiB5b3VyIGRpc3BsYXlPYmplY3QgdG8gcHJvZHVjZSBhIHJlc3VsdFxuICogd2l0aCBhIG5ldyBzZXQgb2YgUkdCQSBjb2xvciBhbmQgYWxwaGEgdmFsdWVzLiBJdCdzIHByZXR0eSBwb3dlcmZ1bCFcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2hvY2t3YXZlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIHZlYzIgY2VudGVyO1xcbnVuaWZvcm0gdmVjMyBwYXJhbXM7IC8vIDEwLjAsIDAuOCwgMC4xXFxudW5pZm9ybSBmbG9hdCB0aW1lO1xcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gdlRleHR1cmVDb29yZDtcXG4gICAgdmVjMiB0ZXhDb29yZCA9IHV2O1xcblxcbiAgICBmbG9hdCBkaXN0ID0gZGlzdGFuY2UodXYsIGNlbnRlcik7XFxuXFxuICAgIGlmICggKGRpc3QgPD0gKHRpbWUgKyBwYXJhbXMueikpICYmIChkaXN0ID49ICh0aW1lIC0gcGFyYW1zLnopKSApXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IGRpZmYgPSAoZGlzdCAtIHRpbWUpO1xcbiAgICAgICAgZmxvYXQgcG93RGlmZiA9IDEuMCAtIHBvdyhhYnMoZGlmZipwYXJhbXMueCksIHBhcmFtcy55KTtcXG5cXG4gICAgICAgIGZsb2F0IGRpZmZUaW1lID0gZGlmZiAgKiBwb3dEaWZmO1xcbiAgICAgICAgdmVjMiBkaWZmVVYgPSBub3JtYWxpemUodXYgLSBjZW50ZXIpO1xcbiAgICAgICAgdGV4Q29vcmQgPSB1diArIChkaWZmVVYgKiBkaWZmVGltZSk7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB0ZXhDb29yZCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgY2VudGVyOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfSxcbiAgICAgICAgICAgIHBhcmFtczogeyB0eXBlOiAndjMnLCB2YWx1ZTogeyB4OiAxMCwgeTogMC44LCB6OiAwLjEgfSB9LFxuICAgICAgICAgICAgdGltZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hvY2t3YXZlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaG9ja3dhdmVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjZW50ZXIgb2YgdGhlIHNob2Nrd2F2ZSBpbiBub3JtYWxpemVkIHNjcmVlbiBjb29yZHMuIFRoYXQgaXNcbiAgICAgKiAoMCwwKSBpcyB0aGUgdG9wLWxlZnQgYW5kICgxLDEpIGlzIHRoZSBib3R0b20gcmlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBudW1iZXI+fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIGNlbnRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmNlbnRlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBhcmFtcyBvZiB0aGUgc2hvY2t3YXZlLiBUaGVzZSBtb2RpZnkgdGhlIGxvb2sgYW5kIGJlaGF2aW9yIG9mXG4gICAgICogdGhlIHNob2Nrd2F2ZSBhcyBpdCByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgcGFyYW1zOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGFyYW1zLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZWxhcHNlZCB0aW1lIG9mIHRoZSBzaG9ja3dhdmUuIFRoaXMgY29udHJvbHMgdGhlIHNwZWVkIGF0IHdoaWNoXG4gICAgICogdGhlIHNob2Nrd2F2ZSByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICB0aW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0QXhpc0ZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0QXhpc0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBibHVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JhZGllbnRCbHVyO1xcbnVuaWZvcm0gdmVjMiBzdGFydDtcXG51bmlmb3JtIHZlYzIgZW5kO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG51bmlmb3JtIHZlYzIgdGV4U2l6ZTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG4gICAgdmVjMiBub3JtYWwgPSBub3JtYWxpemUodmVjMihzdGFydC55IC0gZW5kLnksIGVuZC54IC0gc3RhcnQueCkpO1xcbiAgICBmbG9hdCByYWRpdXMgPSBzbW9vdGhzdGVwKDAuMCwgMS4wLCBhYnMoZG90KHZUZXh0dXJlQ29vcmQgKiB0ZXhTaXplIC0gc3RhcnQsIG5vcm1hbCkpIC8gZ3JhZGllbnRCbHVyKSAqIGJsdXI7XFxuXFxuICAgIGZvciAoZmxvYXQgdCA9IC0zMC4wOyB0IDw9IDMwLjA7IHQrKylcXG4gICAge1xcbiAgICAgICAgZmxvYXQgcGVyY2VudCA9ICh0ICsgb2Zmc2V0IC0gMC41KSAvIDMwLjA7XFxuICAgICAgICBmbG9hdCB3ZWlnaHQgPSAxLjAgLSBhYnMocGVyY2VudCk7XFxuICAgICAgICB2ZWM0IHNhbXBsZSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGRlbHRhIC8gdGV4U2l6ZSAqIHBlcmNlbnQgKiByYWRpdXMpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBibHVyOiAgICAgICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMTAwIH0sXG4gICAgICAgICAgICBncmFkaWVudEJsdXI6ICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNjAwIH0sXG4gICAgICAgICAgICBzdGFydDogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLCAgICB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIH0gfSxcbiAgICAgICAgICAgIGVuZDogICAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDYwMCwgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZGVsdGE6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMzAsICAgeTogMzAgfSB9LFxuICAgICAgICAgICAgdGV4U2l6ZTogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogd2luZG93LmlubmVyV2lkdGgsIHk6IHdpbmRvdy5pbm5lckhlaWdodCB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG59XG5cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiB0aGUgWCBhbmQgWSBmaWx0ZXJzLCBkb2VzIG5vdGhpbmcgZm9yIHRoaXMgY2xhc3MuXG4gKlxuICovXG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gMDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSAwO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmFkaWVudEJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIHN0YXJ0IHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgZW5kOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdFlGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0IEZpbHRlci4gTWFuYWdlcyB0aGUgcGFzcyBvZiBib3RoIGEgVGlsdFNoaWZ0WEZpbHRlciBhbmQgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIgPSBuZXcgVGlsdFNoaWZ0WEZpbHRlcigpO1xuICAgIHRoaXMudGlsdFNoaWZ0WUZpbHRlciA9IG5ldyBUaWx0U2hpZnRZRmlsdGVyKCk7XG59XG5cblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEZpbHRlcjtcblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JhZGllbnQgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ncmFkaWVudEJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZ3JhZGllbnRCbHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFkgdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuc3RhcnQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBlbmQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5lbmQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZW5kID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBUaWx0U2hpZnRBeGlzRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRBeGlzRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdFhGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRpbHRTaGlmdEF4aXNGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0WEZpbHRlcigpXG57XG4gICAgVGlsdFNoaWZ0QXhpc0ZpbHRlci5jYWxsKHRoaXMpO1xufVxuXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRYRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRYRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKlxuICovXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGR4ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueCAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueDtcbiAgICB2YXIgZHkgPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS55IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS55O1xuICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IGR4IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeSAvIGQ7XG59O1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRZRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gLWR5IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeCAvIGQ7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHR3aXN0IGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0d2lzdGVkIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFR3aXN0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHJhZGl1cztcXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzIgY29vcmQgPSB2VGV4dHVyZUNvb3JkIC0gb2Zmc2V0O1xcbiAgIGZsb2F0IGRpc3QgPSBsZW5ndGgoY29vcmQpO1xcblxcbiAgIGlmIChkaXN0IDwgcmFkaXVzKVxcbiAgIHtcXG4gICAgICAgZmxvYXQgcmF0aW8gPSAocmFkaXVzIC0gZGlzdCkgLyByYWRpdXM7XFxuICAgICAgIGZsb2F0IGFuZ2xlTW9kID0gcmF0aW8gKiByYXRpbyAqIGFuZ2xlO1xcbiAgICAgICBmbG9hdCBzID0gc2luKGFuZ2xlTW9kKTtcXG4gICAgICAgZmxvYXQgYyA9IGNvcyhhbmdsZU1vZCk7XFxuICAgICAgIGNvb3JkID0gdmVjMihjb29yZC54ICogYyAtIGNvb3JkLnkgKiBzLCBjb29yZC54ICogcyArIGNvb3JkLnkgKiBjKTtcXG4gICB9XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCtvZmZzZXQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhZGl1czogICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9LFxuICAgICAgICAgICAgYW5nbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9LFxuICAgICAgICAgICAgb2Zmc2V0OiAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjUsIHk6IDAuNSB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblR3aXN0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVHdpc3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHdpc3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFR3aXN0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUd2lzdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IGRlc2NyaWJlcyB0aGUgdGhlIG9mZnNldCBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgb2Zmc2V0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHJhZGl1cyBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICByYWRpdXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5yYWRpdXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgYW5nbGUgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiLy8gcnVuIHRoZSBwb2x5ZmlsbHNcbnJlcXVpcmUoJy4vcG9seWZpbGwnKTtcblxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29yZScpO1xuXG4vLyBhZGQgY29yZSBwbHVnaW5zLlxuY29yZS5leHRyYXMgICAgICAgICA9IHJlcXVpcmUoJy4vZXh0cmFzJyk7XG5jb3JlLmZpbHRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5jb3JlLmludGVyYWN0aW9uICAgID0gcmVxdWlyZSgnLi9pbnRlcmFjdGlvbicpO1xuY29yZS5sb2FkZXJzICAgICAgICA9IHJlcXVpcmUoJy4vbG9hZGVycycpO1xuY29yZS5tZXNoICAgICAgICAgICA9IHJlcXVpcmUoJy4vbWVzaCcpO1xuY29yZS5hY2Nlc3NpYmlsaXR5ICA9IHJlcXVpcmUoJy4vYWNjZXNzaWJpbGl0eScpO1xuXG4vLyBleHBvcnQgYSBwcmVtYWRlIGxvYWRlciBpbnN0YW5jZVxuLyoqXG4gKiBBIHByZW1hZGUgaW5zdGFuY2Ugb2YgdGhlIGxvYWRlciB0aGF0IGNhbiBiZSB1c2VkIHRvIGxvYWRlciByZXNvdXJjZXMuXG4gKlxuICogQG5hbWUgbG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHByb3BlcnR5IHtQSVhJLmxvYWRlcnMuTG9hZGVyfVxuICovXG5jb3JlLmxvYWRlciA9IG5ldyBjb3JlLmxvYWRlcnMuTG9hZGVyKCk7XG5cbi8vIG1peGluIHRoZSBkZXByZWNhdGlvbiBmZWF0dXJlcy5cbk9iamVjdC5hc3NpZ24oY29yZSwgcmVxdWlyZSgnLi9kZXByZWNhdGlvbicpKTtcblxuLy8gQWx3YXlzIGV4cG9ydCBwaXhpIGdsb2JhbGx5LlxuZ2xvYmFsLlBJWEkgPSBjb3JlO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogSG9sZHMgYWxsIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gYW4gSW50ZXJhY3Rpb24gZXZlbnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uRGF0YSgpXG57XG4gICAgLyoqXG4gICAgICogVGhpcyBwb2ludCBzdG9yZXMgdGhlIGdsb2JhbCBjb29yZHMgb2Ygd2hlcmUgdGhlIHRvdWNoL21vdXNlIGV2ZW50IGhhcHBlbmVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuZ2xvYmFsID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgU3ByaXRlIHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TcHJpdGV9XG4gICAgICovXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBwYXNzZWQgdG8gYW4gZXZlbnQgaGFuZGxlciwgdGhpcyB3aWxsIGJlIHRoZSBvcmlnaW5hbCBET00gRXZlbnQgdGhhdCB3YXMgY2FwdHVyZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0V2ZW50fVxuICAgICAqL1xuICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IG51bGw7XG59XG5cbkludGVyYWN0aW9uRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbkRhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uRGF0YTtcblxuLyoqXG4gKiBUaGlzIHdpbGwgcmV0dXJuIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgc3BlY2lmaWVkIGRpc3BsYXlPYmplY3QgZm9yIHRoaXMgSW50ZXJhY3Rpb25EYXRhXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgbG9jYWwgY29vcmRzIG9mZlxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBwb2ludClcbiAqIEBwYXJhbSBbZ2xvYmFsUG9zXSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgY29udGFpbmluZyB5b3VyIGN1c3RvbSBnbG9iYWwgY29vcmRzLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgdXNlIHRoZSBjdXJyZW50IGdsb2JhbCBjb29yZHMpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBJbnRlcmFjdGlvbkRhdGEgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIERpc3BsYXlPYmplY3RcbiAqL1xuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5nZXRMb2NhbFBvc2l0aW9uID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHBvaW50LCBnbG9iYWxQb3MpXG57XG4gICAgcmV0dXJuIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKGdsb2JhbFBvcyB8fCB0aGlzLmdsb2JhbCwgcG9pbnQpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIEludGVyYWN0aW9uRGF0YSA9IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25EYXRhJyk7XG5cbi8vIE1peCBpbnRlcmFjdGl2ZVRhcmdldCBpbnRvIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGVcbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbik7XG5cbi8qKlxuICogVGhlIGludGVyYWN0aW9uIG1hbmFnZXIgZGVhbHMgd2l0aCBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzLiBBbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgaW50ZXJhY3RpdmVcbiAqIGlmIGl0cyBpbnRlcmFjdGl2ZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIHRydWVcbiAqIFRoaXMgbWFuYWdlciBhbHNvIHN1cHBvcnRzIG11bHRpdG91Y2guXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH1cbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQ9dHJ1ZV0ge2Jvb2xlYW59IFNob3VsZCB0aGUgbWFuYWdlciBhdXRvbWF0aWNhbGx5IHByZXZlbnQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMuXG4gKiBAcGFyYW0gW29wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3k9MTBdIHtudW1iZXJ9IEZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQuXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uTWFuYWdlcihyZW5kZXJlciwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGludGVyYWN0aW9uIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMgYXV0b21hdGljYWxseSBiZSBwcmV2ZW50ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdCA9IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdCA6IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBcyB0aGlzIGZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQgbW9yZSBvZnRlbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgPSBvcHRpb25zLmludGVyYWN0aW9uRnJlcXVlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vdXNlIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhfVxuICAgICAqL1xuICAgIHRoaXMubW91c2UgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCBkYXRhIG9iamVjdCB0byBoYW5kbGUgYWxsIHRoZSBldmVudCB0cmFja2luZy9kaXNwYXRjaGluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnREYXRhID0ge1xuICAgICAgICBzdG9wcGVkOiBmYWxzZSxcbiAgICAgICAgdGFyZ2V0OiBudWxsLFxuICAgICAgICB0eXBlOiBudWxsLFxuICAgICAgICBkYXRhOiB0aGlzLm1vdXNlLFxuICAgICAgICBzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGlueSBsaXR0bGUgaW50ZXJhY3RpdmVEYXRhIHBvb2wgIVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGFbXX1cbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBET00gZWxlbWVudCB0byBiaW5kIHRvLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTEVsZW1lbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIYXZlIGV2ZW50cyBiZWVuIGF0dGFjaGVkIHRvIHRoZSBkb20gZWxlbWVudD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gZmFsc2U7XG5cbiAgICAvL3RoaXMgd2lsbCBtYWtlIGl0IHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gY2FsbCBiaW5kIGFsbCB0aGUgdGltZVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlVXAgPSB0aGlzLm9uTW91c2VVcC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlVXAgPSB0aGlzLnByb2Nlc3NNb3VzZVVwLmJpbmQoIHRoaXMgKTtcblxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IHRoaXMub25Nb3VzZURvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZURvd24gPSB0aGlzLnByb2Nlc3NNb3VzZURvd24uYmluZCggdGhpcyApO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IHRoaXMub25Nb3VzZU1vdmUuYmluZCggdGhpcyApO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IHRoaXMucHJvY2Vzc01vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VPdXQgPSB0aGlzLm9uTW91c2VPdXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IHRoaXMub25Ub3VjaFN0YXJ0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaEVuZCA9IHRoaXMub25Ub3VjaEVuZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gdGhpcy5wcm9jZXNzVG91Y2hFbmQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaE1vdmUgPSB0aGlzLm9uVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sYXN0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjc3Mgc3R5bGUgb2YgdGhlIGN1cnNvciB0aGF0IGlzIGJlaW5nIHVzZWRcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSAnaW5oZXJpdCc7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjYWNoZWQgdmFyXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCByZXNvbHV0aW9uXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IDE7XG5cbiAgICB0aGlzLnNldFRhcmdldEVsZW1lbnQodGhpcy5yZW5kZXJlci52aWV3LCB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24pO1xufVxuXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJhY3Rpb25NYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5cbi8qKlxuICogU2V0cyB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlL3RvdWNoIGV2ZW50cy4gVGhpcyBpcyB1c2VmdWwgZm9yIHdoZW4geW91IGhhdmVcbiAqIG90aGVyIERPTSBlbGVtZW50cyBvbiB0b3Agb2YgdGhlIHJlbmRlcmVycyBDYW52YXMgZWxlbWVudC4gV2l0aCB0aGlzIHlvdSdsbCBiZSBiYWxlIHRvIGRlbGV0ZWdhdGVcbiAqIGFub3RoZXIgRE9NIGVsZW1lbnQgdG8gcmVjZWl2ZSB0aG9zZSBldmVudHMuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQge0hUTUxFbGVtZW50fSB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVEhlIHJlc29sdXRpb24gb2YgdGhlIG5ldyBlbGVtZW50IChyZWxhdGl2ZSB0byB0aGUgY2FudmFzKS5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuc2V0VGFyZ2V0RWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCByZXNvbHV0aW9uKVxue1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICB0aGlzLmFkZEV2ZW50cygpO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYWxsIHRoZSBET00gZXZlbnRzXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5hZGRFdmVudHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29yZS50aWNrZXIuc2hhcmVkLmFkZCh0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy1jb250ZW50LXpvb21pbmcnXSA9ICdub25lJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICdub25lJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgICAgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgICAgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgICAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCAgIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICAgICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsICAgIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIHRoZSBET00gZXZlbnRzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHJlZ2lzdGVyZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJyc7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAgdGhpcy5vblRvdWNoRW5kLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlLCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgIHRoaXMub25Nb3VzZVVwLCB0cnVlKTtcblxuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc3RhdGUgb2YgaW50ZXJhY3RpdmUgb2JqZWN0cy5cbiAqIEludm9rZWQgYnkgYSB0aHJvdHRsZWQgdGlja2VyIHVwZGF0ZSBmcm9tXG4gKiB7QGxpbmsgUElYSS50aWNrZXIuc2hhcmVkfS5cbiAqXG4gKiBAcGFyYW0gZGVsdGFUaW1lIHtudW1iZXJ9XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB0aGlzLl9kZWx0YVRpbWUgKz0gZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2RlbHRhVGltZSA8IHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGVsdGFUaW1lID0gMDtcblxuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHVzZXIgbW92ZSB0aGUgbW91c2UgdGhpcyBjaGVjayBoYXMgYWxyZWFkeSBiZWVuIGRmb25lIHVzaW5nIHRoZSBtb3VzZSBtb3ZlIVxuICAgIGlmKHRoaXMuZGlkTW92ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlkTW92ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE9cbn07XG5cbi8qKlxuICogRGlzcGF0Y2hlcyBhbiBldmVudCBvbiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIGRpc3BsYXkgb2JqZWN0IGluIHF1ZXN0aW9uXG4gKiBAcGFyYW0gZXZlbnRTdHJpbmcge3N0cmluZ30gdGhlIG5hbWUgb2YgdGhlIGV2ZW50IChlLmcsIG1vdXNlZG93bilcbiAqIEBwYXJhbSBldmVudERhdGEge29iamVjdH0gdGhlIGV2ZW50IGRhdGEgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGV2ZW50U3RyaW5nLCBldmVudERhdGEgKVxue1xuICAgIGlmKCFldmVudERhdGEuc3RvcHBlZClcbiAgICB7XG4gICAgICAgIGV2ZW50RGF0YS50YXJnZXQgPSBkaXNwbGF5T2JqZWN0O1xuICAgICAgICBldmVudERhdGEudHlwZSA9IGV2ZW50U3RyaW5nO1xuXG4gICAgICAgIGRpc3BsYXlPYmplY3QuZW1pdCggZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0W2V2ZW50U3RyaW5nXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddKCBldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogTWFwcyB4IGFuZCB5IGNvb3JkcyBmcm9tIGEgRE9NIG9iamVjdCBhbmQgbWFwcyB0aGVtIGNvcnJlY3RseSB0byB0aGUgcGl4aSB2aWV3LiBUaGUgcmVzdWx0aW5nIHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUgcG9pbnQuXG4gKiBUaGlzIHRha2VzIGludG8gYWNjb3VudCB0aGUgZmFjdCB0aGF0IHRoZSBET00gZWxlbWVudCBjb3VsZCBiZSBzY2FsZWQgYW5kIHBvc2l0aW9uZWQgYW55d2hlcmUgb24gdGhlIHNjcmVlbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCB0aGUgcmVzdWx0IHdpbGwgYmUgc3RvcmVkIGluXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHggICAgIHRoZSB4IGNvb3JkIG9mIHRoZSBwb3NpdGlvbiB0byBtYXBcbiAqIEBwYXJhbSAge251bWJlcn0geSAgICAgdGhlIHkgY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm1hcFBvc2l0aW9uVG9Qb2ludCA9IGZ1bmN0aW9uICggcG9pbnQsIHgsIHkgKVxue1xuICAgIHZhciByZWN0ID0gdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcG9pbnQueCA9ICggKCB4IC0gcmVjdC5sZWZ0ICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQud2lkdGggIC8gcmVjdC53aWR0aCAgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHBvaW50LnkgPSAoICggeSAtIHJlY3QudG9wICApICogKHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmhlaWdodCAvIHJlY3QuaGVpZ2h0ICkgKSAvIHRoaXMucmVzb2x1dGlvbjtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlcyBhIG5lYXQgd2F5IG9mIGNyYXdsaW5nIHRocm91Z2ggdGhlIHNjZW5lIGdyYXBoIGFuZCBydW5uaW5nIGEgc3BlY2lmaWVkIGZ1bmN0aW9uIG9uIGFsbCBpbnRlcmFjdGl2ZSBvYmplY3RzIGl0IGZpbmRzLlxuICogSXQgd2lsbCBhbHNvIHRha2UgY2FyZSBvZiBoaXQgdGVzdGluZyB0aGUgaW50ZXJhY3RpdmUgb2JqZWN0cyBhbmQgcGFzc2VzIHRoZSBoaXQgYWNyb3NzIGluIHRoZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCBpcyB0ZXN0ZWQgZm9yIGNvbGxpc2lvblxuICogQHBhcmFtICB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBkaXNwbGF5T2JqZWN0IHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgd2lsbCBiZSBoaXQgdGVzdCAocmVjdXJjc2l2bHkgY3Jhd2xzIGl0cyBjaGlsZHJlbilcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmdW5jIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggaW50ZXJhY3RpdmUgb2JqZWN0LiBUaGUgZGlzcGxheU9iamVjdCBhbmQgaGl0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvblxuICogQHBhcmFtICB7Ym9vbGVhbn0gaGl0VGVzdCB0aGlzIGluZGljYXRlcyBpZiB0aGUgb2JqZWN0cyBpbnNpZGUgc2hvdWxkIGJlIGhpdCB0ZXN0IGFnYWluc3QgdGhlIHBvaW50XG4gKiBAcmV0dXJuIHtib29sZWFufSByZXR1cm5zIHRydWUgaWYgdGhlIGRpc3BsYXlPYmplY3QgaGl0IHRoZSBwb2ludFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NJbnRlcmFjdGl2ZSA9IGZ1bmN0aW9uIChwb2ludCwgZGlzcGxheU9iamVjdCwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmUpXG57XG4gICAgaWYoIWRpc3BsYXlPYmplY3QgfHwgIWRpc3BsYXlPYmplY3QudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUb29rIGEgbGl0dGxlIHdoaWxlIHRvIHJld29yayB0aGlzIGZ1bmN0aW9uIGNvcnJlY3RseSEgQnV0IG5vdyBpdCBpcyBkb25lIGFuZCBuaWNlIGFuZCBvcHRpbWlzZWQuIF5fXlxuICAgIC8vIFxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBub3cgbG9vcCB0aHJvdWdoIGFsbCBvYmplY3RzIGFuZCB0aGVuIG9ubHkgaGl0IHRlc3QgdGhlIG9iamVjdHMgaXQgSEFTIHRvLCBub3QgYWxsIG9mIHRoZW0uIE1VQ0ggZmFzdGVyLi5cbiAgICAvLyBBbiBvYmplY3Qgd2lsbCBiZSBoaXQgdGVzdCBpZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gICAgLy8gXG4gICAgLy8gMTogSXQgaXMgaW50ZXJhY3RpdmUuXG4gICAgLy8gMjogSXQgYmVsb25ncyB0byBhIHBhcmVudCB0aGF0IGlzIGludGVyYWN0aXZlIEFORCBvbmUgb2YgdGhlIHBhcmVudHMgY2hpbGRyZW4gaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICAvLyBcbiAgICAvLyBBcyBhbm90aGVyIGxpdHRsZSBvcHRpbWlzYXRpb24gb25jZSBhbiBpbnRlcmFjdGl2ZSBvYmplY3QgaGFzIGJlZW4gaGl0IHdlIGNhbiBjYXJyeSBvbiB0aHJvdWdoIHRoZSBzY2VuZWdyYXBoLCBidXQgd2Uga25vdyB0aGF0IHRoZXJlIHdpbGwgYmUgbm8gbW9yZSBoaXRzISBTbyB3ZSBjYW4gYXZvaWQgZXh0cmEgaGl0IHRlc3RzXG4gICAgLy8gQSBmaW5hbCBvcHRpbWlzYXRpb24gaXMgdGhhdCBhbiBvYmplY3QgaXMgbm90IGhpdCB0ZXN0IGRpcmVjdGx5IGlmIGEgY2hpbGQgaGFzIGFscmVhZHkgYmVlbiBoaXQuXG4gICAgXG4gICAgdmFyIGhpdCA9IGZhbHNlLFxuICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGludGVyYWN0aXZlID0gZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSB8fCBpbnRlcmFjdGl2ZTtcblxuICAgIC8vIGlmIHRoZSBkaXNwbGF5b2JqZWN0IGhhcyBhIGhpdEFyZWEsIHRoZW4gaXQgZG9lcyBub3QgbmVlZCB0byBoaXRUZXN0IGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaGl0QXJlYSlcbiAgICB7XG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gKiogRlJFRSBUSVAgKiohIElmIGFuIG9iamVjdCBpcyBub3QgaW50ZXJhY3R0aXZlIG9yIGhhcyBubyBidXR0b25zIGluIGl0IChzdWNoIGFzIGEgZ2FtZSBzY2VuZSEpIHNldCBpbnRlcmFjdGl2ZUNoaWxkcmVuIHRvIGZhbHNlIGZvciB0aGF0IGRpc3BsYXlPYmplY3QuXG4gICAgLy8gVGhpcyB3aWxsIGFsbG93IHBpeGkgdG8gY29tcGxldGx5IGlnbm9yZSBhbmQgYnlwYXNzIGNoZWNraW5nIHRoZSBkaXNwbGF5T2JqZWN0cyBjaGlsZHJlbi5cbiAgICBpZihkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlQ2hpbGRyZW4pXG4gICAgeyAgICAgICBcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICAgICAgXG4gICAgICAgIGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRpbWUgdG8gZ2V0IHJlY3Vyc2l2ZS4uIGlmIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gaWYgc29tdGhpbmcgaXMgaGl0Li5cbiAgICAgICAgICAgIGlmKCB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZShwb2ludCwgY2hpbGRyZW5baV0sIGZ1bmMsIGhpdFRlc3QsIGludGVyYWN0aXZlUGFyZW50KSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIHdlIG5vIGxvbmdlciBuZWVkIHRvIGhpdCB0ZXN0IGFueSBtb3JlIG9iamVjdHMgaW4gdGhpcyBjb250YWluZXIgYXMgd2Ugd2Ugbm93IGtub3cgdGhlIHBhcmVudCBoYXMgYmVlbiBoaXRcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBpcyBpbnRlcmFjdGl2ZSAsIHRoYXQgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhpdCB3YXMgYWN0dWFsbHkgaW50ZXJhY3RpdmUgYW5kIG5vdCBqdXN0IHRoZSBjaGlsZCBvZiBhbiBpbnRlcmFjdGl2ZSBvYmplY3QuIFxuICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55dGhpbmcgZWxzZS4gV2Ugc3RpbGwgbmVlZCB0byBydW4gdGhyb3VnaCBhbGwgb2JqZWN0cywgYnV0IHdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhbnkgaGl0IHRlc3RzLlxuICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuW2ldLmludGVyYWN0aXZlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGl0VGVzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIG5vIHBvaW50IHJ1bm5pbmcgdGhpcyBpZiB0aGUgaXRlbSBpcyBub3QgaW50ZXJhY3RpdmUgb3IgZG9lcyBub3QgaGF2ZSBhbiBpbnRlcmFjdGl2ZSBwYXJlbnQuXG4gICAgaWYoaW50ZXJhY3RpdmUpXG4gICAge1xuICAgICAgICAvLyBpZiB3ZSBhcmUgaGl0IHRlc3RpbmcgKGFzIGluIHdlIGhhdmUgbm8gaGl0IGFueSBvYmplY3RzIHlldClcbiAgICAgICAgLy8gV2UgYWxzbyBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGhpdCB0ZXN0aW5nIGlmIG9uY2Ugb2YgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuIGhhcyBhbHJlYWR5IGJlZW4gaGl0IVxuICAgICAgICBpZihoaXRUZXN0ICYmICFoaXQpXG4gICAgICAgIHsgIFxuICAgICAgICAgICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGhpcy5fdGVtcFBvaW50KTtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmhpdEFyZWEuY29udGFpbnMoIHRoaXMuX3RlbXBQb2ludC54LCB0aGlzLl90ZW1wUG9pbnQueSApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZihkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gZGlzcGxheU9iamVjdC5jb250YWluc1BvaW50KHBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmMoZGlzcGxheU9iamVjdCwgaGl0KTsgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGl0O1xuICBcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgZG93biBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcHJlc3NlZCBkb3duXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VEb3duLCB0cnVlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBkb3duIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlRG93biA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB2YXIgZSA9IHRoaXMubW91c2Uub3JpZ2luYWxFdmVudDtcbiAgICBcbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG5cbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nIF0gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRkb3duJyA6ICdtb3VzZWRvd24nLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcmVsZWFzZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYnV0dG9uIGJlaW5nIHJlbGVhc2VkXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VVcCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlVXAsIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIHVwIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZVVwID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuXG4gICAgdmFyIGlzUmlnaHRCdXR0b24gPSBlLmJ1dHRvbiA9PT0gMiB8fCBlLndoaWNoID09PSAzO1xuICAgIHZhciBpc0Rvd24gPSAgaXNSaWdodEJ1dHRvbiA/ICdfaXNSaWdodERvd24nIDogJ19pc0xlZnREb3duJztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodHVwJyA6ICdtb3VzZXVwJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0Y2xpY2snIDogJ2NsaWNrJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXBvdXRzaWRlJyA6ICdtb3VzZXVwb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgdGhlIG1vdXNlIG1vdmluZ1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5kaWRNb3ZlID0gdHJ1ZTtcblxuICAgIHRoaXMuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VNb3ZlLCB0cnVlICk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgIT09IHRoaXMuY3Vyc29yKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gdGhpcy5jdXJzb3I7XG4gICAgfVxuXG4gICAgLy9UT0RPIEJVRyBmb3IgcGFyZW50cyBpbmVyYWN0aXZlIG9iamVjdCAoYm9yZGVyIG9yZGVyIGlzc3VlKVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlbW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQoZGlzcGxheU9iamVjdCwgaGl0KTtcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgaXMgbW92ZWQgb3V0IG9mIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJlaW5nIG1vdmVkIG91dFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlT3V0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgLy8gVE9ETyBvcHRpbWl6ZSBieSBub3QgY2hlY2sgRVZFUlkgVElNRSEgbWF5YmUgaGFsZiBhcyBvZnRlbj8gLy9cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkgKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIGZhbHNlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBvdmVyL291dCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VPdmVyT3V0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGlmKCFkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3ZlcicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlzcGxheU9iamVjdC5idXR0b25Nb2RlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnNvciA9IGRpc3BsYXlPYmplY3QuZGVmYXVsdEN1cnNvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZihkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIHRoaXMuZXZlbnREYXRhKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIHN0YXJ0ZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggc3RhcnRpbmcgb24gdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaFN0YXJ0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuICAgICAgICAvL1RPRE8gUE9PTFxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0LCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hTdGFydCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaHN0YXJ0JywgdGhpcy5ldmVudERhdGEgKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBlbmRzIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIGVuZGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICAvL1RPRE8gdGhpcyBzaG91bGQgYmUgcGFzc2VkIGFsb25nLi4gbm8gc2V0XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoRW5kLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIGVuZCBvZiBhIHRvdWNoIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaEVuZCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZCcsIHRoaXMuZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndGFwJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZG91dHNpZGUnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIG1vdmVkIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBtb3ZpbmcgYWNyb3NzIHRoZSByZW5kZXJlciB2aWV3XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIGEgdG91Y2ggbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGhpdCA9IGhpdDtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaG1vdmUnLCB0aGlzLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hFdmVudCB7RXZlbnREYXRhfSBUaGUgdG91Y2ggZXZlbnQgd2UgbmVlZCB0byBwYWlyIHdpdGggYW4gaW50ZXJhY3Rpb25EYXRhIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZ2V0VG91Y2hEYXRhID0gZnVuY3Rpb24gKHRvdWNoRXZlbnQpXG57XG4gICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wb3AoKTtcblxuICAgIGlmKCF0b3VjaERhdGEpXG4gICAge1xuICAgICAgICB0b3VjaERhdGEgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG4gICAgfVxuXG4gICAgdG91Y2hEYXRhLmlkZW50aWZpZXIgPSB0b3VjaEV2ZW50LmlkZW50aWZpZXI7XG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRvdWNoRGF0YS5nbG9iYWwsIHRvdWNoRXZlbnQuY2xpZW50WCwgdG91Y2hFdmVudC5jbGllbnRZICk7XG5cbiAgICBpZihuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YS5nbG9iYWwueCA9IHRvdWNoRGF0YS5nbG9iYWwueCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC55ID0gdG91Y2hEYXRhLmdsb2JhbC55IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIH1cblxuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWCA9IHRvdWNoRGF0YS5nbG9iYWwueDtcbiAgICB0b3VjaEV2ZW50Lmdsb2JhbFkgPSB0b3VjaERhdGEuZ2xvYmFsLnk7XG5cbiAgICByZXR1cm4gdG91Y2hEYXRhO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IHRvIHRoZSBpbnRlcm5hbCBwb29sXG4gKlxuICogQHBhcmFtIHRvdWNoRGF0YSB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9IFRoZSB0b3VjaCBkYXRhIG9iamVjdCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmV0dXJuVG91Y2hEYXRhID0gZnVuY3Rpb24gKCB0b3VjaERhdGEgKVxue1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wdXNoKCB0b3VjaERhdGEgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGludGVyYWN0aW9uIG1hbmFnZXJcbiAqXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLm1vdXNlID0gbnVsbDtcblxuICAgIHRoaXMuZXZlbnREYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IG51bGw7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VVcCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Nb3VzZURvd24gPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUgPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlT3V0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBudWxsO1xuXG5cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IG51bGw7XG5cbiAgICB0aGlzLm9uVG91Y2hFbmQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaE1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZW1wUG9pbnQgPSBudWxsO1xufTtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBpbnRlcmFjdGlvbnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEludGVyYWN0aW9uRGF0YTogICAgcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKSxcbiAgICBJbnRlcmFjdGlvbk1hbmFnZXI6IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25NYW5hZ2VyJyksXG4gICAgaW50ZXJhY3RpdmVUYXJnZXQ6ICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbn07XG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGludGVyYWN0aXZlIG9iamVjdHNcbiAqIHVzZWQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5pbnRlcmFjdGlvbi5pbnRlcmFjdGl2ZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgaW50ZXJhY3RpdmVUYXJnZXQgPSB7XG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBidXR0b25Nb2RlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlQ2hpbGRyZW46IHRydWUsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBkZWZhdWx0Q3Vyc29yOiAncG9pbnRlcicsXG5cbiAgICAvLyBzb21lIGludGVybmFsIGNoZWNrcy4uXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX292ZXI6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdG91Y2hEb3duOiBmYWxzZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnRlcmFjdGl2ZVRhcmdldDtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi4vZXh0cmFzJyksXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxuXG5mdW5jdGlvbiBwYXJzZShyZXNvdXJjZSwgdGV4dHVyZSkge1xuICAgIHZhciBkYXRhID0ge307XG4gICAgdmFyIGluZm8gPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF07XG4gICAgdmFyIGNvbW1vbiA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NvbW1vbicpWzBdO1xuXG4gICAgZGF0YS5mb250ID0gaW5mby5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKTtcbiAgICBkYXRhLnNpemUgPSBwYXJzZUludChpbmZvLmdldEF0dHJpYnV0ZSgnc2l6ZScpLCAxMCk7XG4gICAgZGF0YS5saW5lSGVpZ2h0ID0gcGFyc2VJbnQoY29tbW9uLmdldEF0dHJpYnV0ZSgnbGluZUhlaWdodCcpLCAxMCk7XG4gICAgZGF0YS5jaGFycyA9IHt9O1xuXG4gICAgLy9wYXJzZSBsZXR0ZXJzXG4gICAgdmFyIGxldHRlcnMgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjaGFyJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxldHRlcnMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaWQnKSwgMTApO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlUmVjdCA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4JyksIDEwKSArIHRleHR1cmUuZnJhbWUueCxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd5JyksIDEwKSArIHRleHR1cmUuZnJhbWUueSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd3aWR0aCcpLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaGVpZ2h0JyksIDEwKVxuICAgICAgICApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbY2hhckNvZGVdID0ge1xuICAgICAgICAgICAgeE9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeU9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3lvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeEFkdmFuY2U6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4YWR2YW5jZScpLCAxMCksXG4gICAgICAgICAgICBrZXJuaW5nOiB7fSxcbiAgICAgICAgICAgIHRleHR1cmU6IG5ldyBjb3JlLlRleHR1cmUodGV4dHVyZS5iYXNlVGV4dHVyZSwgdGV4dHVyZVJlY3QpXG5cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvL3BhcnNlIGtlcm5pbmdzXG4gICAgdmFyIGtlcm5pbmdzID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgna2VybmluZycpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBrZXJuaW5ncy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBmaXJzdCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnZmlyc3QnKSwgMTApO1xuICAgICAgICB2YXIgc2Vjb25kID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdzZWNvbmQnKSwgMTApO1xuICAgICAgICB2YXIgYW1vdW50ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdhbW91bnQnKSwgMTApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbc2Vjb25kXS5rZXJuaW5nW2ZpcnN0XSA9IGFtb3VudDtcbiAgICB9XG5cbiAgICByZXNvdXJjZS5iaXRtYXBGb250ID0gZGF0YTtcblxuICAgIC8vIEknbSBsZWF2aW5nIHRoaXMgYXMgYSB0ZW1wb3JhcnkgZml4IHNvIHdlIGNhbiB0ZXN0IHRoZSBiaXRtYXAgZm9udHMgaW4gdjNcbiAgICAvLyBidXQgaXQncyB2ZXJ5IGxpa2VseSB0byBjaGFuZ2VcbiAgICBleHRyYXMuQml0bWFwVGV4dC5mb250c1tkYXRhLmZvbnRdID0gZGF0YTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSBvciBub3QgeG1sIGRhdGFcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhIHx8ICFyZXNvdXJjZS5pc1htbClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNraXAgaWYgbm90IGJpdG1hcCBmb250IGRhdGEsIHVzaW5nIHNvbWUgc2lsbHkgZHVjay10eXBpbmdcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGFnZScpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdLmdldEF0dHJpYnV0ZSgnZmFjZScpID09PSBudWxsXG4gICAgICAgICAgICApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeG1sVXJsID0gcGF0aC5kaXJuYW1lKHJlc291cmNlLnVybCk7XG5cbiAgICAgICAgaWYgKHhtbFVybCA9PT0gJy4nKSB7XG4gICAgICAgICAgICB4bWxVcmwgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJhc2VVcmwgJiYgeG1sVXJsKSB7XG4gICAgICAgICAgICAvLyBpZiBiYXNldXJsIGhhcyBhIHRyYWlsaW5nIHNsYXNoIHRoZW4gYWRkIG9uZSB0byB4bWxVcmwgc28gdGhlIHJlcGxhY2Ugd29ya3MgYmVsb3dcbiAgICAgICAgICAgIGlmICh0aGlzLmJhc2VVcmwuY2hhckF0KHRoaXMuYmFzZVVybC5sZW5ndGggLSAxKSA9PT0gJy8nKSB7XG4gICAgICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcmVtb3ZlIGJhc2VVcmwgZnJvbSB4bWxVcmxcbiAgICAgICAgICAgIHhtbFVybCA9IHhtbFVybC5yZXBsYWNlKHRoaXMuYmFzZVVybCwgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4geG1sVXJsIG5vdywgaXQgbmVlZHMgYSB0cmFpbGluZyBzbGFzaC4gRW5zdXJlIHRoYXQgaXQgZG9lcyBpZiB0aGUgc3RyaW5nIGlzbid0IGVtcHR5LlxuICAgICAgICBpZiAoeG1sVXJsICYmIHhtbFVybC5jaGFyQXQoeG1sVXJsLmxlbmd0aCAtIDEpICE9PSAnLycpIHtcbiAgICAgICAgICAgIHhtbFVybCArPSAnLyc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRleHR1cmVVcmwgPSB4bWxVcmwgKyByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJylbMF0uZ2V0QXR0cmlidXRlKCdmaWxlJyk7XG4gICAgICAgIGlmIChjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSkge1xuICAgICAgICAgICAgLy9yZXVzZSBleGlzdGluZyB0ZXh0dXJlXG4gICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbdGV4dHVyZVVybF0pO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGxvYWRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiByZXNvdXJjZS5tZXRhZGF0YS5pbWFnZU1ldGFkYXRhXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gbG9hZCB0aGUgdGV4dHVyZSBmb3IgdGhlIGZvbnRcbiAgICAgICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgdGV4dHVyZVVybCwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgcmVzLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBsb2FkZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5sb2FkZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIExvYWRlcjogICAgICAgICAgICAgcmVxdWlyZSgnLi9sb2FkZXInKSxcblxuICAgIC8vIHBhcnNlcnNcbiAgICBiaXRtYXBGb250UGFyc2VyOiAgIHJlcXVpcmUoJy4vYml0bWFwRm9udFBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyOiAgcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIHRleHR1cmVQYXJzZXI6ICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlUGFyc2VyJyksXG4gICAgUmVzb3VyY2U6ICAgICAgICAgICByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZVxufTtcbiIsInZhciBSZXNvdXJjZUxvYWRlciA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLFxuICAgIHRleHR1cmVQYXJzZXIgPSByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBzcHJpdGVzaGVldFBhcnNlciA9IHJlcXVpcmUoJy4vc3ByaXRlc2hlZXRQYXJzZXInKSxcbiAgICBiaXRtYXBGb250UGFyc2VyID0gcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyk7XG5cbi8qKlxuICpcbiAqIFRoZSBuZXcgbG9hZGVyLCBleHRlbmRzIFJlc291cmNlIExvYWRlciBieSBDaGFkIEVuZ2xlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9lbmdsZXJjai9yZXNvdXJjZS1sb2FkZXJcbiAqXG4gKiBgYGBqc1xuICogdmFyIGxvYWRlciA9IFBJWEkubG9hZGVyOyAvLyBwaXhpIGV4cG9zZXMgYSBwcmVtYWRlIGluc3RhbmNlIGZvciB5b3UgdG8gdXNlLlxuICogLy9vclxuICogdmFyIGxvYWRlciA9IG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyKCk7IC8vIHlvdSBjYW4gYWxzbyBjcmVhdGUgeW91ciBvd24gaWYgeW91IHdhbnRcbiAqXG4gKiBsb2FkZXIuYWRkKCdidW5ueScsXCJkYXRhL2J1bm55LnBuZ1wiKTtcbiAqXG4gKiBsb2FkZXIub25jZSgnY29tcGxldGUnLG9uQXNzZXRzTG9hZGVkKTtcbiAqXG4gKiBsb2FkZXIubG9hZCgpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlJlc291cmNlTG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5sb2FkZXJzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KVxue1xuICAgIFJlc291cmNlTG9hZGVyLmNhbGwodGhpcywgYmFzZVVybCwgY29uY3VycmVuY3kpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMudXNlKExvYWRlci5fcGl4aU1pZGRsZXdhcmVbaV0oKSk7XG4gICAgfVxufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZXNvdXJjZUxvYWRlci5wcm90b3R5cGUpO1xuTG9hZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbkxvYWRlci5fcGl4aU1pZGRsZXdhcmUgPSBbXG4gICAgLy8gcGFyc2UgYW55IGJsb2IgaW50byBtb3JlIHVzYWJsZSBvYmplY3RzIChlLmcuIEltYWdlKVxuICAgIFJlc291cmNlTG9hZGVyLm1pZGRsZXdhcmUucGFyc2luZy5ibG9iLFxuICAgIC8vIHBhcnNlIGFueSBJbWFnZSBvYmplY3RzIGludG8gdGV4dHVyZXNcbiAgICB0ZXh0dXJlUGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBzcHJpdGVzaGVldFBhcnNlcixcbiAgICAvLyBwYXJzZSBhbnkgc3ByaXRlc2hlZXQgZGF0YSBpbnRvIG11bHRpcGxlIHRleHR1cmVzXG4gICAgYml0bWFwRm9udFBhcnNlclxuXTtcblxuTG9hZGVyLmFkZFBpeGlNaWRkbGV3YXJlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgTG9hZGVyLl9waXhpTWlkZGxld2FyZS5wdXNoKGZuKTtcbn07XG5cbi8vIEFkZCBjdXN0b20gZXh0ZW50aW9uc1xudmFyIFJlc291cmNlID0gUmVzb3VyY2VMb2FkZXIuUmVzb3VyY2U7XG5cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUoJ2ZudCcsIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIHBhdGggPSByZXF1aXJlKCdwYXRoJyksXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBza2lwIGlmIG5vIGRhdGEsIGl0cyBub3QganNvbiwgb3IgaXQgaXNuJ3Qgc3ByaXRlc2hlZXQgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzSnNvbiB8fCAhcmVzb3VyY2UuZGF0YS5mcmFtZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzb3VyY2UuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcm91dGUgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJykpO1xuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwoIHJlc291cmNlLnVybCApO1xuXG4gICAgICAgIC8vIGxvYWQgdGhlIGltYWdlIGZvciB0aGlzIHNoZWV0XG4gICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgcm91dGUgKyAnLycgKyByZXNvdXJjZS5kYXRhLm1ldGEuaW1hZ2UsIGxvYWRPcHRpb25zLCBmdW5jdGlvbiAocmVzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlcyA9IHt9O1xuXG4gICAgICAgICAgICB2YXIgZnJhbWVzID0gcmVzb3VyY2UuZGF0YS5mcmFtZXM7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gZnJhbWVzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gZnJhbWVzW2ldLmZyYW1lO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlY3QpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0cmltID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QuaCwgcmVjdC53KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QudywgcmVjdC5oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vICBDaGVjayB0byBzZWUgaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0udHJpbW1lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpbSA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS54IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS55IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS53IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS5oIC8gcmVzb2x1dGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBmbGlwIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IVxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gc2l6ZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggPSBzaXplLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0ID0gdGVtcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNpemUueCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLnkgLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLmhlaWdodCAvPSByZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzW2ldID0gbmV3IGNvcmUuVGV4dHVyZShyZXMudGV4dHVyZS5iYXNlVGV4dHVyZSwgc2l6ZSwgc2l6ZS5jbG9uZSgpLCB0cmltLCBmcmFtZXNbaV0ucm90YXRlZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0cyBhbHNvIGFkZCB0aGUgZnJhbWUgdG8gcGl4aSdzIGdsb2JhbCBjYWNoZSBmb3IgZnJvbUZyYW1lIGFuZCBmcm9tSW1hZ2UgZnVuY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW2ldID0gcmVzb3VyY2UudGV4dHVyZXNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH0pO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gY3JlYXRlIGEgbmV3IHRleHR1cmUgaWYgdGhlIGRhdGEgaXMgYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgIGlmIChyZXNvdXJjZS5kYXRhICYmIHJlc291cmNlLmlzSW1hZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBiYXNlVGV4dHVyZSA9IG5ldyBjb3JlLkJhc2VUZXh0dXJlKHJlc291cmNlLmRhdGEsIG51bGwsIGNvcmUudXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKHJlc291cmNlLnVybCkpO1xuICAgICAgICAgICAgYmFzZVRleHR1cmUuaW1hZ2VVcmwgPSByZXNvdXJjZS51cmw7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlID0gbmV3IGNvcmUuVGV4dHVyZShiYXNlVGV4dHVyZSk7XG4gICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdWNudGlvbnNcbiAgICAgICAgICAgIGNvcmUudXRpbHMuQmFzZVRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gYmFzZVRleHR1cmU7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gcmVzb3VyY2UudGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgdGVtcFBvbHlnb24gPSBuZXcgY29yZS5Qb2x5Z29uKCk7XG5cbi8qKlxuICogQmFzZSBtZXNoIGNsYXNzXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0byB1c2VcbiAqIEBwYXJhbSBbdmVydGljZXNdIHtGbG9hdDMyQXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHZlcnRpY2VzXG4gKiBAcGFyYW0gW3V2c10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdXZzXG4gKiBAcGFyYW0gW2luZGljZXNdIHtVaW50MTZBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgaW5kaWNlc1xuICogQHBhcmFtIFtkcmF3TW9kZV0ge251bWJlcn0gdGhlIGRyYXdNb2RlLCBjYW4gYmUgYW55IG9mIHRoZSBNZXNoLkRSQVdfTU9ERVMgY29uc3RzXG4gKi9cbmZ1bmN0aW9uIE1lc2godGV4dHVyZSwgdmVydGljZXMsIHV2cywgaW5kaWNlcywgZHJhd01vZGUpXG57XG4gICAgY29yZS5Db250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIG9mIHRoZSBNZXNoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBVdnMgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IHV2cyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxLCAwLFxuICAgICAgICAxLCAxLFxuICAgICAgICAwLCAxXSk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB2ZXJ0aWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSB2ZXJ0aWNlcyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxMDAsIDAsXG4gICAgICAgIDEwMCwgMTAwLFxuICAgICAgICAwLCAxMDBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgLy8gIFRPRE8gYXV0byBnZW5lcmF0ZSB0aGlzIGJhc2VkIG9uIGRyYXcgbW9kZSFcbiAgICB0aGlzLmluZGljZXMgPSBpbmRpY2VzIHx8IG5ldyBVaW50MTZBcnJheShbMCwgMSwgMywgMl0pO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgTWVzaCBpcyBkaXJ0eSBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzcHJpdGUuIFNldCB0byBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlbW92ZSBhbnkgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUcmlhbmdsZXMgaW4gY2FudmFzIG1vZGUgYXJlIGF1dG9tYXRpY2FsbHkgYW50aWFsaWFzZWQsIHVzZSB0aGlzIHZhbHVlIHRvIGZvcmNlIHRyaWFuZ2xlcyB0byBvdmVybGFwIGEgYml0IHdpdGggZWFjaCBvdGhlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdheSB0aGUgTWVzaCBzaG91bGQgYmUgZHJhd24sIGNhbiBiZSBhbnkgb2YgdGhlIHtAbGluayBQSVhJLm1lc2guTWVzaC5EUkFXX01PREVTfSBjb25zdHNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAc2VlIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmRyYXdNb2RlID0gZHJhd01vZGUgfHwgTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0g7XG5cbiAgICAvLyBydW4gdGV4dHVyZSBzZXR0ZXI7XG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcblxuICAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgbWVzaCBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1lc2gucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuTWVzaC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNZXNoLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLm1lc2guTWVzaCNcbiAgICAgKi9cbiAgICB0ZXh0dXJlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl90ZXh0dXJlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBXZWJHTCByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMubWVzaCk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5tZXNoLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEsIHRyYW5zZm9ybS5iLCB0cmFuc2Zvcm0uYywgdHJhbnNmb3JtLmQsIHRyYW5zZm9ybS50eCB8IDAsIHRyYW5zZm9ybS50eSB8IDApO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4LCB0cmFuc2Zvcm0udHkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc1RyaWFuZ2xlTWVzaChjb250ZXh0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzKGNvbnRleHQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiBUcmlhbmdsZSBNZXNoIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aCAvIDI7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGggLSAyOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4LCAoaW5kZXggKyAyKSwgKGluZGV4ICsgNCkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiB0cmlhbmdsZSBtb2RlIHVzaW5nIGNhbnZhc1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc1RyaWFuZ2xlcyA9IGZ1bmN0aW9uIChjb250ZXh0KVxue1xuICAgIC8vIGRyYXcgdHJpYW5nbGVzISFcbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcblxuICAgIHZhciBsZW5ndGggPSBpbmRpY2VzLmxlbmd0aDtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAzKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4MCA9IGluZGljZXNbaV0gKiAyLCBpbmRleDEgPSBpbmRpY2VzW2kgKyAxXSAqIDIsIGluZGV4MiA9IGluZGljZXNbaSArIDJdICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3Mgb25lIG9mIHRoZSB0cmlhbmdsZXMgdGhhdCBmb3JtIHRoaXMgTWVzaFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHBhcmFtIHZlcnRpY2VzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgTWVzaFxuICogQHBhcmFtIHV2cyB7RmxvYXQzMkFycmF5fSBhIHJlZmVyZW5jZSB0byB0aGUgdXZzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gaW5kZXgwIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgxIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgc2Vjb25kIHZlcnRleFxuICogQHBhcmFtIGluZGV4MiB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIHRoaXJkIHZlcnRleFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZSA9IGZ1bmN0aW9uIChjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleDAsIGluZGV4MSwgaW5kZXgyKVxue1xuICAgIHZhciB0ZXh0dXJlU291cmNlID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2U7XG4gICAgdmFyIHRleHR1cmVXaWR0aCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdmFyIHRleHR1cmVIZWlnaHQgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHZhciB4MCA9IHZlcnRpY2VzW2luZGV4MF0sIHgxID0gdmVydGljZXNbaW5kZXgxXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleDJdO1xuICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4MCArIDFdLCB5MSA9IHZlcnRpY2VzW2luZGV4MSArIDFdLCB5MiA9IHZlcnRpY2VzW2luZGV4MiArIDFdO1xuXG4gICAgdmFyIHUwID0gdXZzW2luZGV4MF0gKiB0ZXh0dXJlV2lkdGgsIHUxID0gdXZzW2luZGV4MV0gKiB0ZXh0dXJlV2lkdGgsIHUyID0gdXZzW2luZGV4Ml0gKiB0ZXh0dXJlV2lkdGg7XG4gICAgdmFyIHYwID0gdXZzW2luZGV4MCArIDFdICogdGV4dHVyZUhlaWdodCwgdjEgPSB1dnNbaW5kZXgxICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MiA9IHV2c1tpbmRleDIgKyAxXSAqIHRleHR1cmVIZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5jYW52YXNQYWRkaW5nID4gMClcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nWCA9IHRoaXMuY2FudmFzUGFkZGluZyAvIHRoaXMud29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIHBhZGRpbmdZID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgY2VudGVyWCA9ICh4MCArIHgxICsgeDIpIC8gMztcbiAgICAgICAgdmFyIGNlbnRlclkgPSAoeTAgKyB5MSArIHkyKSAvIDM7XG5cbiAgICAgICAgdmFyIG5vcm1YID0geDAgLSBjZW50ZXJYO1xuICAgICAgICB2YXIgbm9ybVkgPSB5MCAtIGNlbnRlclk7XG5cbiAgICAgICAgdmFyIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MCA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MCA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIC8vXG5cbiAgICAgICAgbm9ybVggPSB4MSAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTEgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MSA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MSA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIG5vcm1YID0geDIgLSBjZW50ZXJYO1xuICAgICAgICBub3JtWSA9IHkyIC0gY2VudGVyWTtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDIgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTIgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LnNhdmUoKTtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG5cbiAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcblxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICBjb250ZXh0LmNsaXAoKTtcblxuICAgIC8vIENvbXB1dGUgbWF0cml4IHRyYW5zZm9ybVxuICAgIHZhciBkZWx0YSA9ICAodTAgKiB2MSkgICAgICArICh2MCAqIHUyKSAgICAgICsgKHUxICogdjIpICAgICAgLSAodjEgKiB1MikgICAgICAtICh2MCAqIHUxKSAgICAgIC0gKHUwICogdjIpO1xuICAgIHZhciBkZWx0YUEgPSAoeDAgKiB2MSkgICAgICArICh2MCAqIHgyKSAgICAgICsgKHgxICogdjIpICAgICAgLSAodjEgKiB4MikgICAgICAtICh2MCAqIHgxKSAgICAgIC0gKHgwICogdjIpO1xuICAgIHZhciBkZWx0YUIgPSAodTAgKiB4MSkgICAgICArICh4MCAqIHUyKSAgICAgICsgKHUxICogeDIpICAgICAgLSAoeDEgKiB1MikgICAgICAtICh4MCAqIHUxKSAgICAgIC0gKHUwICogeDIpO1xuICAgIHZhciBkZWx0YUMgPSAodTAgKiB2MSAqIHgyKSArICh2MCAqIHgxICogdTIpICsgKHgwICogdTEgKiB2MikgLSAoeDAgKiB2MSAqIHUyKSAtICh2MCAqIHUxICogeDIpIC0gKHUwICogeDEgKiB2Mik7XG4gICAgdmFyIGRlbHRhRCA9ICh5MCAqIHYxKSAgICAgICsgKHYwICogeTIpICAgICAgKyAoeTEgKiB2MikgICAgICAtICh2MSAqIHkyKSAgICAgIC0gKHYwICogeTEpICAgICAgLSAoeTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhRSA9ICh1MCAqIHkxKSAgICAgICsgKHkwICogdTIpICAgICAgKyAodTEgKiB5MikgICAgICAtICh5MSAqIHUyKSAgICAgIC0gKHkwICogdTEpICAgICAgLSAodTAgKiB5Mik7XG4gICAgdmFyIGRlbHRhRiA9ICh1MCAqIHYxICogeTIpICsgKHYwICogeTEgKiB1MikgKyAoeTAgKiB1MSAqIHYyKSAtICh5MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB5MikgLSAodTAgKiB5MSAqIHYyKTtcblxuICAgIGNvbnRleHQudHJhbnNmb3JtKGRlbHRhQSAvIGRlbHRhLCBkZWx0YUQgLyBkZWx0YSxcbiAgICAgICAgZGVsdGFCIC8gZGVsdGEsIGRlbHRhRSAvIGRlbHRhLFxuICAgICAgICBkZWx0YUMgLyBkZWx0YSwgZGVsdGFGIC8gZGVsdGEpO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UodGV4dHVyZVNvdXJjZSwgMCwgMCk7XG4gICAgY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5cblxuLyoqXG4gKiBSZW5kZXJzIGEgZmxhdCBNZXNoXG4gKlxuICogQHBhcmFtIE1lc2gge1BJWEkubWVzaC5NZXNofSBUaGUgTWVzaCB0byByZW5kZXJcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLnJlbmRlck1lc2hGbGF0ID0gZnVuY3Rpb24gKE1lc2gpXG57XG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgdmFyIHZlcnRpY2VzID0gTWVzaC52ZXJ0aWNlcztcblxuICAgIHZhciBsZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGgvMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgIGZvciAodmFyIGk9MTsgaSA8IGxlbmd0aC0yOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpKjI7XG5cbiAgICAgICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXhdLCAgIHgxID0gdmVydGljZXNbaW5kZXgrMl0sIHgyID0gdmVydGljZXNbaW5kZXgrNF07XG4gICAgICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4KzFdLCB5MSA9IHZlcnRpY2VzW2luZGV4KzNdLCB5MiA9IHZlcnRpY2VzW2luZGV4KzVdO1xuXG4gICAgICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgyLCB5Mik7XG4gICAgfVxuXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnI0ZGMDAwMCc7XG4gICAgY29udGV4dC5maWxsKCk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbn07XG5cbi8qKlxuICogV2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLCB0aGlzIGV2ZW50IHdpbGwgZmlyZSB0byB1cGRhdGUgdGhlIHNjYWxlIGFuZCBmcmFtZVxuICpcbiAqIEBwYXJhbSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51cGRhdGVGcmFtZSA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgbWVzaCBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAoIXRoaXMuX2N1cnJlbnRCb3VuZHMpIHtcbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gbWF0cml4IHx8IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICAgICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSB2ZXJ0aWNlcy5sZW5ndGg7IGkgPCBuOyBpICs9IDIpIHtcbiAgICAgICAgICAgIHZhciByYXdYID0gdmVydGljZXNbaV0sIHJhd1kgPSB2ZXJ0aWNlc1tpICsgMV07XG4gICAgICAgICAgICB2YXIgeCA9IChhICogcmF3WCkgKyAoYyAqIHJhd1kpICsgdHg7XG4gICAgICAgICAgICB2YXIgeSA9IChkICogcmF3WSkgKyAoYiAqIHJhd1gpICsgdHk7XG5cbiAgICAgICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG5cbiAgICAgICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuICAgICAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWluWCA9PT0gLUluZmluaXR5IHx8IG1heFkgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBtZXNoLiBXb3JrcyBvbmx5IGZvciBUUklBTkdMRV9NRVNIXG4gKlxuICogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuICovXG5NZXNoLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50ICkge1xuICAgIGlmICghdGhpcy5nZXRCb3VuZHMoKS5jb250YWlucyhwb2ludC54LCBwb2ludC55KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHBvaW50cyA9IHRlbXBQb2x5Z29uLnBvaW50cztcbiAgICB2YXIgaSwgbGVuO1xuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVMpIHtcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgICAgIGxlbiA9IHRoaXMuaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgIC8vVE9ETzogaW5saW5lIHRoaXMuXG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTMpIHtcbiAgICAgICAgICAgIHZhciBpbmQwID0gaW5kaWNlc1tpXSoyLCBpbmQxID0gaW5kaWNlc1tpKzFdKjIsIGluZDIgPSBpbmRpY2VzW2krMl0qMjtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2luZDBdO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaW5kMCsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2luZDFdO1xuICAgICAgICAgICAgcG9pbnRzWzNdID0gdmVydGljZXNbaW5kMSsxXTtcbiAgICAgICAgICAgIHBvaW50c1s0XSA9IHZlcnRpY2VzW2luZDJdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaW5kMisxXTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBsZW4gPSB2ZXJ0aWNlcy5sZW5ndGg7XG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTYpIHtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2ldO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaSsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2krMl07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpKzNdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaSs0XTtcbiAgICAgICAgICAgIHBvaW50c1s1XSA9IHZlcnRpY2VzW2krNV07XG4gICAgICAgICAgICBpZiAodGVtcFBvbHlnb24uY29udGFpbnModGVtcFBvaW50LngsIHRlbXBQb2ludC55KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGlmZmVyZW50IGRyYXdpbmcgYnVmZmVyIG1vZGVzIHN1cHBvcnRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX01FU0hcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFU1xuICovXG5NZXNoLkRSQVdfTU9ERVMgPSB7XG4gICAgVFJJQU5HTEVfTUVTSDogMCxcbiAgICBUUklBTkdMRVM6IDFcbn07XG4iLCJ2YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xuXG4vKipcbiAqIFRoZSBQbGFuZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciBQbGFuZSA9IG5ldyBQSVhJLlBsYW5lKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIFBsYW5lLlxuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWCAtIFRoZSBudW1iZXIgb3ggeCBzZWdtZW50c1xuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWSAtIFRoZSBudW1iZXIgb2YgeSBzZWdtZW50c1xuICpcbiAqL1xuZnVuY3Rpb24gUGxhbmUodGV4dHVyZSwgc2VnbWVudHNYLCBzZWdtZW50c1kpXG57XG4gICAgTWVzaC5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tlciBmb3IgaWYgdGhlIFBsYW5lIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuc2VnbWVudHNYID0gIHNlZ21lbnRzWCB8fCAxMDtcbiAgICB0aGlzLnNlZ21lbnRzWSA9IHNlZ21lbnRzWSB8fCAxMDtcblxuICAgIHRoaXMuZHJhd01vZGUgPSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVTO1xuICAgIHRoaXMucmVmcmVzaCgpO1xuXG59XG5cblxuLy8gY29uc3RydWN0b3JcblBsYW5lLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIE1lc2gucHJvdG90eXBlICk7XG5QbGFuZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQbGFuZTtcbm1vZHVsZS5leHBvcnRzID0gUGxhbmU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5QbGFuZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgdG90YWwgPSB0aGlzLnNlZ21lbnRzWCAqIHRoaXMuc2VnbWVudHNZO1xuICAgIHZhciB2ZXJ0cyA9IFtdO1xuICAgIHZhciBjb2xvcnMgPSBbXTtcbiAgICB2YXIgdXZzID0gW107XG4gICAgdmFyIGluZGljZXMgPSBbXTtcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMudGV4dHVyZTtcblxuICAvLyAgdGV4dHVyZS53aWR0aCA9IDgwMCB0ZXh0dXJlLndpZHRoIHx8IDgwMDtcbiAvLyAgIHRleHR1cmUuaGVpZ2h0ID0gODAwLy90ZXh0dXJlLmhlaWdodCB8fCA4MDA7XG5cbiAgICB2YXIgc2VnbWVudHNYU3ViID0gdGhpcy5zZWdtZW50c1ggLSAxO1xuICAgIHZhciBzZWdtZW50c1lTdWIgPSB0aGlzLnNlZ21lbnRzWSAtIDE7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgdmFyIHNpemVYID0gdGV4dHVyZS53aWR0aCAvIHNlZ21lbnRzWFN1YjtcbiAgICB2YXIgc2l6ZVkgPSB0ZXh0dXJlLmhlaWdodCAvIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbDsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHggPSAoaSAlIHRoaXMuc2VnbWVudHNYKTtcbiAgICAgICAgdmFyIHkgPSAoIChpIC8gdGhpcy5zZWdtZW50c1ggKSB8IDAgKTtcblxuXG4gICAgICAgIHZlcnRzLnB1c2goKHggKiBzaXplWCksXG4gICAgICAgICAgICAgICAgICAgKHkgKiBzaXplWSkpO1xuXG4gICAgICAgIC8vIHRoaXMgd29ya3MgZm9yIHJlY3Rhbmd1bGFyIHRleHR1cmVzLiBcbiAgICAgICAgdXZzLnB1c2godGV4dHVyZS5fdXZzLngwICsgKHRleHR1cmUuX3V2cy54MSAtIHRleHR1cmUuX3V2cy54MCkgKiAoeCAvICh0aGlzLnNlZ21lbnRzWC0xKSksIHRleHR1cmUuX3V2cy55MCArICh0ZXh0dXJlLl91dnMueTMtdGV4dHVyZS5fdXZzLnkwKSAqICh5LyAodGhpcy5zZWdtZW50c1ktMSkpKTtcbiAgICAgIH1cblxuICAgIC8vICBjb25zXG5cbiAgICB2YXIgdG90YWxTdWIgPSBzZWdtZW50c1hTdWIgKiBzZWdtZW50c1lTdWI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTdWI7IGkrKykge1xuXG4gICAgICAgIHZhciB4cG9zID0gaSAlIHNlZ21lbnRzWFN1YjtcbiAgICAgICAgdmFyIHlwb3MgPSAoaSAvIHNlZ21lbnRzWFN1YiApIHwgMDtcblxuXG4gICAgICAgIHZhciAgdmFsdWUgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWUyID0gKHlwb3MgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zICsgMTtcbiAgICAgICAgdmFyICB2YWx1ZTMgPSAoKHlwb3MrMSkgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zO1xuICAgICAgICB2YXIgIHZhbHVlNCA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuXG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZSwgdmFsdWUyLCB2YWx1ZTMpO1xuICAgICAgICBpbmRpY2VzLnB1c2godmFsdWUyLCB2YWx1ZTQsIHZhbHVlMyk7XG4gICAgfVxuXG5cbiAgICAvL2NvbnNvbGUubG9nKGluZGljZXMpXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkodmVydHMpO1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheSh1dnMpO1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShjb2xvcnMpO1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShpbmRpY2VzKTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGV4dHVyZSBVVnMgd2hlbiBuZXcgdGV4dHVyZSBpcyBzZXRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QbGFuZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFBsYW5lIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBUaGUgcm9wZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciByb3BlID0gbmV3IFBJWEkuUm9wZShQSVhJLlRleHR1cmUuZnJvbUltYWdlKFwic25ha2UucG5nXCIpLCBwb2ludHMpO1xuICogIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5tZXNoLk1lc2hcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB7UElYSS5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIHRleHR1cmUgdG8gdXNlIG9uIHRoZSByb3BlLlxuICogQHBhcmFtIHtQSVhJLlBvaW50W119IHBvaW50cyAtIEFuIGFycmF5IG9mIHtAbGluayBQSVhJLlBvaW50fSBvYmplY3RzIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gKlxuICovXG5mdW5jdGlvbiBSb3BlKHRleHR1cmUsIHBvaW50cylcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnRbXX0gQW4gYXJyYXkgb2YgcG9pbnRzIHRoYXQgZGV0ZXJtaW5lIHRoZSByb3BlXG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgb2YgdmVydGljZXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhpcyByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBUaGUgV2ViR0wgVXZzIG9mIHRoZSByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogNCk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgY29sb3IgY29tcG9uZW50c1xuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgcm9wZSBpcyByZWFkeSB0byBiZSBkcmF3bi4gTmVlZGVkIGJlY2F1c2UgTWVzaCBjdG9yIGNhblxuICAgICAqIGNhbGwgX29uVGV4dHVyZVVwZGF0ZWQgd2hpY2ggY291bGQgY2FsbCByZWZyZXNoIHRvbyBlYXJseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgIHRoaXMucmVmcmVzaCgpO1xufVxuXG5cbi8vIGNvbnN0cnVjdG9yXG5Sb3BlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTWVzaC5wcm90b3R5cGUpO1xuUm9wZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3BlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3BlO1xuXG4vKipcbiAqIFJlZnJlc2hlc1xuICpcbiAqL1xuUm9wZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgLy8gaWYgdG9vIGxpdHRsZSBwb2ludHMsIG9yIHRleHR1cmUgaGFzbid0IGdvdCBVVnMgc2V0IHlldCBqdXN0IG1vdmUgb24uXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxIHx8ICF0aGlzLl90ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuXG4gICAgdmFyIHRleHR1cmVVdnMgPSB0aGlzLl90ZXh0dXJlLl91dnM7XG4gICAgdmFyIG9mZnNldCA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDAsIHRleHR1cmVVdnMueTApO1xuICAgIHZhciBmYWN0b3IgPSBuZXcgY29yZS5Qb2ludCh0ZXh0dXJlVXZzLngyIC0gdGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MiAtIHRleHR1cmVVdnMueTApO1xuXG4gICAgdXZzWzBdID0gMCArIG9mZnNldC54O1xuICAgIHV2c1sxXSA9IDAgKyBvZmZzZXQueTtcbiAgICB1dnNbMl0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICBjb2xvcnNbMF0gPSAxO1xuICAgIGNvbG9yc1sxXSA9IDE7XG5cbiAgICBpbmRpY2VzWzBdID0gMDtcbiAgICBpbmRpY2VzWzFdID0gMTtcblxuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgYW1vdW50O1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG4gICAgICAgIC8vIHRpbWUgdG8gZG8gc29tZSBzbWFydCBkcmF3aW5nIVxuICAgICAgICBhbW91bnQgPSBpIC8gKHRvdGFsLTEpO1xuXG4gICAgICAgIHV2c1tpbmRleF0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrMV0gPSAwICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgdXZzW2luZGV4KzJdID0gYW1vdW50ICogZmFjdG9yLnggKyBvZmZzZXQueDtcbiAgICAgICAgdXZzW2luZGV4KzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgY29sb3JzW2luZGV4XSA9IDE7XG4gICAgICAgIGNvbG9yc1tpbmRleCsxXSA9IDE7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgaW5kaWNlc1tpbmRleF0gPSBpbmRleDtcbiAgICAgICAgaW5kaWNlc1tpbmRleCArIDFdID0gaW5kZXggKyAxO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIE1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUuY2FsbCh0aGlzKTtcblxuICAgIC8vIHdhaXQgZm9yIHRoZSBSb3BlIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Sb3BlLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbGFzdFBvaW50ID0gcG9pbnRzWzBdO1xuICAgIHZhciBuZXh0UG9pbnQ7XG4gICAgdmFyIHBlcnBYID0gMDtcbiAgICB2YXIgcGVycFkgPSAwO1xuXG4gICAgLy8gdGhpcy5jb3VudCAtPSAwLjI7XG5cbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgcmF0aW8sIHBlcnBMZW5ndGgsIG51bTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWw7IGkrKylcbiAgICB7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBpbmRleCA9IGkgKiA0O1xuXG4gICAgICAgIGlmIChpIDwgcG9pbnRzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0UG9pbnQgPSBwb2ludHNbaSsxXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcGVycFkgPSAtKG5leHRQb2ludC54IC0gbGFzdFBvaW50LngpO1xuICAgICAgICBwZXJwWCA9IG5leHRQb2ludC55IC0gbGFzdFBvaW50Lnk7XG5cbiAgICAgICAgcmF0aW8gPSAoMSAtIChpIC8gKHRvdGFsLTEpKSkgKiAxMDtcblxuICAgICAgICBpZiAocmF0aW8gPiAxKVxuICAgICAgICB7XG4gICAgICAgICAgICByYXRpbyA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwTGVuZ3RoID0gTWF0aC5zcXJ0KHBlcnBYICogcGVycFggKyBwZXJwWSAqIHBlcnBZKTtcbiAgICAgICAgbnVtID0gdGhpcy5fdGV4dHVyZS5oZWlnaHQgLyAyOyAvLygyMCArIE1hdGguYWJzKE1hdGguc2luKChpICsgdGhpcy5jb3VudCkgKiAwLjMpICogNTApICkqIHJhdGlvO1xuICAgICAgICBwZXJwWCAvPSBwZXJwTGVuZ3RoO1xuICAgICAgICBwZXJwWSAvPSBwZXJwTGVuZ3RoO1xuXG4gICAgICAgIHBlcnBYICo9IG51bTtcbiAgICAgICAgcGVycFkgKj0gbnVtO1xuXG4gICAgICAgIHZlcnRpY2VzW2luZGV4XSA9IHBvaW50LnggKyBwZXJwWDtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMV0gPSBwb2ludC55ICsgcGVycFk7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzJdID0gcG9pbnQueCAtIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCszXSA9IHBvaW50LnkgLSBwZXJwWTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBwb2ludDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkubWVzaFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNZXNoOiAgICAgICAgICAgcmVxdWlyZSgnLi9NZXNoJyksXG4gICAgUGxhbmU6ICAgICAgICAgICByZXF1aXJlKCcuL1BsYW5lJyksXG4gICAgUm9wZTogICAgICAgICAgIHJlcXVpcmUoJy4vUm9wZScpLFxuICAgIE1lc2hSZW5kZXJlcjogICByZXF1aXJlKCcuL3dlYmdsL01lc2hSZW5kZXJlcicpLFxuICAgIE1lc2hTaGFkZXI6ICAgICByZXF1aXJlKCcuL3dlYmdsL01lc2hTaGFkZXInKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIE1lc2ggPSByZXF1aXJlKCcuLi9NZXNoJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgTWVzaFJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9NZXNoUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgY29yZS5PYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIFxuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSgxNTAwMCk7XG5cbiAgICAvL1RPRE8gdGhpcyBjb3VsZCBiZSBhIHNpbmdsZSBidWZmZXIgc2hhcmVkIGFtb25nc3QgYWxsIHJlbmRlcmVycyBhcyB3ZSByZXVzZSB0aGlzIHNldCB1cCBpbiBtb3N0IHJlbmRlcmVyc1xuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgMTUwMDA7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufVxuXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoUmVuZGVyZXI7XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignbWVzaCcsIE1lc2hSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIG1lc2gge1BJWEkubWVzaC5NZXNofSB0aGUgbWVzaCB0byByZW5kZXJcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICBpZighbWVzaC5fdmVydGV4QnVmZmVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5faW5pdFdlYkdMKG1lc2gpO1xuICAgIH1cblxuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXIsXG4gICAgICAgIGdsID0gcmVuZGVyZXIuZ2wsXG4gICAgICAgIHRleHR1cmUgPSBtZXNoLl90ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBzaGFkZXIgPSBtZXNoLnNoYWRlcjsvLyB8fCByZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnBsdWdpbnMubWVzaFNoYWRlcjtcblxuICAgIHZhciBkcmF3TW9kZSA9IG1lc2guZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIID8gZ2wuVFJJQU5HTEVfU1RSSVAgOiBnbC5UUklBTkdMRVM7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShtZXNoLmJsZW5kTW9kZSk7XG5cbiAgICAvL1RPRE8gY2FjaGUgY3VzdG9tIHN0YXRlLi5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzaGFkZXIgPSBzaGFkZXIuc2hhZGVyc1tnbC5pZF0gfHwgc2hhZGVyLmdldFNoYWRlcihyZW5kZXJlcik7Ly8gOiBzaGFkZXI7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4LnZhbHVlID0gbWVzaC53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gbWVzaC53b3JsZEFscGhhO1xuXG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuXG4gICAgaWYgKCFtZXNoLmRpcnR5KVxuICAgIHtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIG1lc2gudmVydGljZXMpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIHV2c1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cblxuICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCAwLCBtZXNoLmluZGljZXMpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIG1lc2guZGlydHkgPSBmYWxzZTtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZG9udCBuZWVkIHRvIHVwbG9hZCFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIH1cblxuICAgIGdsLmRyYXdFbGVtZW50cyhkcmF3TW9kZSwgbWVzaC5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuXG59O1xuXG4vKipcbiAqIFByZXBhcmVzIGFsbCB0aGUgYnVmZmVycyB0byByZW5kZXIgdGhpcyBtZXNoXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLl9pbml0V2ViR0wgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICAvLyBidWlsZCB0aGUgc3RyaXAhXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIG1lc2guX3ZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIG1lc2guX2luZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5fdXZCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC52ZXJ0aWNlcywgZ2wuRFlOQU1JQ19EUkFXKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgaWYobWVzaC5jb2xvcnMpe1xuICAgICAgICBtZXNoLl9jb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fY29sb3JCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5jb2xvcnMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG59O1xuXG5cbi8qKlxuICogRW1wdGllcyB0aGUgY3VycmVudCBiYXRjaC5cbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBtZXNoIHJlbmRlcmVyLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgXG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgTWVzaCByZW5kZXJlclxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIFdlYkdMIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gTWVzaFNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIGNvcmUuU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIGFscGhhIDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYVRleHR1cmVDb29yZDowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5NZXNoU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TaGFkZXIucHJvdG90eXBlKTtcbk1lc2hTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gTWVzaFNoYWRlcjtcblxuY29yZS5TaGFkZXJNYW5hZ2VyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoU2hhZGVyJywgTWVzaFNoYWRlcik7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9zaWduXG5cbmlmICghTWF0aC5zaWduKVxue1xuICAgIE1hdGguc2lnbiA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHggPSAreDtcbiAgICAgICAgaWYgKHggPT09IDAgfHwgaXNOYU4oeCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4ID4gMCA/IDEgOiAtMTtcbiAgICB9O1xufVxuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvb2JqZWN0LWFzc2lnblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnblxuXG5pZiAoIU9iamVjdC5hc3NpZ24pXG57XG4gICAgT2JqZWN0LmFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcbn1cbiIsInJlcXVpcmUoJy4vT2JqZWN0LmFzc2lnbicpO1xucmVxdWlyZSgnLi9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUnKTtcbnJlcXVpcmUoJy4vTWF0aC5zaWduJyk7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cDovL3BhdWxpcmlzaC5jb20vMjAxMS9yZXF1ZXN0YW5pbWF0aW9uZnJhbWUtZm9yLXNtYXJ0LWFuaW1hdGluZy9cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzE1Nzk2NzFcbi8vIGh0dHA6Ly91cGRhdGVzLmh0bWw1cm9ja3MuY29tLzIwMTIvMDUvcmVxdWVzdEFuaW1hdGlvbkZyYW1lLUFQSS1ub3ctd2l0aC1zdWItbWlsbGlzZWNvbmQtcHJlY2lzaW9uXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90aW1oYWxsLzQwNzg2MTRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9GaW5hbmNpYWwtVGltZXMvcG9seWZpbGwtc2VydmljZS90cmVlL21hc3Rlci9wb2x5ZmlsbHMvcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG5cbi8vIEV4cGVjdGVkIHRvIGJlIHVzZWQgd2l0aCBCcm93c2VyZml5XG4vLyBCcm93c2VyaWZ5IGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB0aGUgdXNlIG9mIGBnbG9iYWxgIGFuZCBwYXNzZXMgdGhlXG4vLyBjb3JyZWN0IHJlZmVyZW5jZSBvZiBgZ2xvYmFsYCwgYHNlbGZgLCBhbmQgZmluYWxseSBgd2luZG93YFxuXG4vLyBEYXRlLm5vd1xuaWYgKCEoRGF0ZS5ub3cgJiYgRGF0ZS5wcm90b3R5cGUuZ2V0VGltZSkpIHtcbiAgICBEYXRlLm5vdyA9IGZ1bmN0aW9uIG5vdygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIH07XG59XG5cbi8vIHBlcmZvcm1hbmNlLm5vd1xuaWYgKCEoZ2xvYmFsLnBlcmZvcm1hbmNlICYmIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cpKSB7XG4gICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgaWYgKCFnbG9iYWwucGVyZm9ybWFuY2UpIHtcbiAgICAgICAgZ2xvYmFsLnBlcmZvcm1hbmNlID0ge307XG4gICAgfVxuICAgIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIH07XG59XG5cbi8vIHJlcXVlc3RBbmltYXRpb25GcmFtZVxudmFyIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbnZhciB2ZW5kb3JzID0gWydtcycsICdtb3onLCAnd2Via2l0JywgJ28nXTtcblxuZm9yKHZhciB4ID0gMDsgeCA8IHZlbmRvcnMubGVuZ3RoICYmICFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lOyArK3gpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnQ2FuY2VsQW5pbWF0aW9uRnJhbWUnXSB8fFxuICAgICAgICBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbn1cblxuaWYgKCFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZGVsYXkgPSAxNiArIGxhc3RUaW1lIC0gY3VycmVudFRpbWU7XG5cbiAgICAgICAgaWYgKGRlbGF5IDwgMCkge1xuICAgICAgICAgICAgZGVsYXkgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFRpbWUgPSBjdXJyZW50VGltZTtcblxuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsYXN0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBjYWxsYmFjayhwZXJmb3JtYW5jZS5ub3coKSk7XG4gICAgICAgIH0sIGRlbGF5KTtcbiAgICB9O1xufVxuXG5pZiAoIWdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSkge1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgfTtcbn1cbiJdfQ== +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L09ic2VydmFibGVQb2ludC5qcyIsInNyYy9jb3JlL2Rpc3BsYXkvVHJhbnNmb3JtU3RhdGljLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3MuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9HcmFwaGljc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvV2ViR0xHcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ2lyY2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRDb21wbGV4UG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkTGluZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL01hdHJpeC5qcyIsInNyYy9jb3JlL21hdGgvUG9pbnQuanMiLCJzcmMvY29yZS9tYXRoL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvQ2lyY2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvRWxsaXBzZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1BvbHlnb24uanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9SZWN0YW5nbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlQnVmZmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvU3lzdGVtUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNNYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1RleHR1cmVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9NYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUXVhZC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvU3RlbmNpbE1hc2tTdGFjay5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9zcHJpdGVzL1Nwcml0ZS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvdGV4dC9UZXh0LmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9CYXNlVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1JlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9UZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZVV2cy5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90aWNrZXIvVGlja2VyLmpzIiwic3JjL2NvcmUvdGlja2VyL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzLmpzIiwic3JjL2NvcmUvdXRpbHMvaW5kZXguanMiLCJzcmMvY29yZS91dGlscy9wbHVnaW5UYXJnZXQuanMiLCJzcmMvZGVwcmVjYXRpb24uanMiLCJzcmMvZXh0cmFzL0JpdG1hcFRleHQuanMiLCJzcmMvZXh0cmFzL01vdmllQ2xpcC5qcyIsInNyYy9leHRyYXMvVGlsaW5nU3ByaXRlLmpzIiwic3JjL2V4dHJhcy9jYWNoZUFzQml0bWFwLmpzIiwic3JjL2V4dHJhcy9nZXRDaGlsZEJ5TmFtZS5qcyIsInNyYy9leHRyYXMvZ2V0R2xvYmFsUG9zaXRpb24uanMiLCJzcmMvZXh0cmFzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvYXNjaWkvQXNjaWlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibG9vbS9CbG9vbUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckRpckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1clhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9TbWFydEJsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvck1hdHJpeEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbG9yL0NvbG9yU3RlcEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2RvdC9Eb3RTY3JlZW5GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0JsdXJZVGludEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2dyYXkvR3JheUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvaW52ZXJ0L0ludmVydEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL25vaXNlL05vaXNlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9yZ2IvUkdCU3BsaXRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zZXBpYS9TZXBpYUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0QXhpc0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdHdpc3QvVHdpc3RGaWx0ZXIuanMiLCJzcmMvc3JjL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL0ludGVyYWN0aW9uRGF0YS5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbk1hbmFnZXIuanMiLCJzcmMvaW50ZXJhY3Rpb24vaW5kZXguanMiLCJzcmMvaW50ZXJhY3Rpb24vaW50ZXJhY3RpdmVUYXJnZXQuanMiLCJzcmMvbG9hZGVycy9iaXRtYXBGb250UGFyc2VyLmpzIiwic3JjL2xvYWRlcnMvaW5kZXguanMiLCJzcmMvbG9hZGVycy9sb2FkZXIuanMiLCJzcmMvbG9hZGVycy9zcHJpdGVzaGVldFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL3RleHR1cmVQYXJzZXIuanMiLCJzcmMvbWVzaC9NZXNoLmpzIiwic3JjL21lc2gvUGxhbmUuanMiLCJzcmMvbWVzaC9Sb3BlLmpzIiwic3JjL21lc2gvaW5kZXguanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoUmVuZGVyZXIuanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoU2hhZGVyLmpzIiwic3JjL3BvbHlmaWxsL01hdGguc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9PYmplY3QuYXNzaWduLmpzIiwic3JjL3BvbHlmaWxsL2luZGV4LmpzIiwic3JjL3BvbHlmaWxsL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzV1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNyaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbm1DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Y0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2h5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNWxCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM21CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25iQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICBjcmVhdGVDb250ZXh0OiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9jcmVhdGVDb250ZXh0JyksXG4gICAgc2V0VmVydGV4QXR0cmliQXJyYXlzOiBcdHJlcXVpcmUoJy4vbGliL3NldFZlcnRleEF0dHJpYkFycmF5cycpLFxuICAgIFxuICAgIEdMQnVmZmVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMQnVmZmVyJyksXG4gICAgR0xGcmFtZWJ1ZmZlcjogXHRcdFx0cmVxdWlyZSgnLi9saWIvR0xGcmFtZWJ1ZmZlcicpLFxuICAgIEdMU2hhZGVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMU2hhZGVyJyksXG4gICAgR0xUZXh0dXJlOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMVGV4dHVyZScpLFxuICAgIFxuICAgIFZlcnRleEFycmF5T2JqZWN0OiBcdFx0cmVxdWlyZSgnLi9saWIvVmVydGV4QXJyYXlPYmplY3QnKVxuXG59OyIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEVNUFRZX0FSUkFZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcblxudmFyIEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuQVJSQVlfQlVGRkVSO1xuXHR0aGlzLmRyYXdUeXBlID0gZHJhd1R5cGUgfHwgZ2wuU1RBVElDX0RSQVc7XG5cdHRoaXMuZGF0YSA9IEVNUFRZX0FSUkFZX0JVRkZFUjtcblxuXHRpZihkYXRhKVxuXHR7XG5cdFx0dGhpcy51cGxvYWQoZGF0YSk7XG5cdH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihkYXRhLCBvZmZzZXQsIGRvbnRCaW5kKVxue1xuXHQvLyB0b2RvIC0gbmVlZGVkP1xuXHQvL2lmKCFkb250QmluZClcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblx0XG5cdGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcblx0b2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cblx0aWYodGhpcy5kYXRhLmJ5dGVMZW5ndGggPj0gZGF0YS5ieXRlTGVuZ3RoKVxuXHR7XHRcblx0XHRnbC5idWZmZXJTdWJEYXRhKHRoaXMudHlwZSwgb2Zmc2V0LCBkYXRhKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC5idWZmZXJEYXRhKHRoaXMudHlwZSwgZGF0YSwgdGhpcy5kcmF3VHlwZSk7XG5cdH1cblxuXHR0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRCdWZmZXIodGhpcy50eXBlLCB0aGlzLmJ1ZmZlcik7XG59XG5cbkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24oZ2wsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZSA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIHR5cGUsIGRyYXdUeXBlKTtcbn1cblxuLy9UT0RPIERlc3Ryb3kuLlxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcjtcblxuIiwiXG52YXIgVGV4dHVyZSA9IHJlcXVpcmUoJy4vR0xUZXh0dXJlJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIEZyYW1lYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEZyYW1lYnVmZmVyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblx0XG5cdHRoaXMuc3RlbmNpbCA9IG51bGw7XG5cdHRoaXMudGV4dHVyZSA9IG51bGw7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlVGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBuZXcgVGV4dHVyZShnbCk7XG5cblx0dGhpcy50ZXh0dXJlLmJpbmQoKTtcblxuXHQvL2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZS50ZXh0dXJlLCAwKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmVuYWJsZVN0ZW5jaWwgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuc3RlbmNpbClyZXR1cm47XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnN0ZW5jaWwgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcbiAgICBcbiAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBcbiAgICAvLyBUT0RPLi4gdGhpcyBpcyBkZXB0aCBBTkQgc3RlbmNpbD9cbiAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsICB0aGlzLndpZHRoICAsIHRoaXMuaGVpZ2h0ICk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCByLCBnLCBiLCBhIClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICBnbC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpO1xuICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLmZyYW1lYnVmZmVyICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuXHRpZiAoIHRoaXMudGV4dHVyZSApXG4gICAge1xuICAgIFx0dGhpcy50ZXh0dXJlLnVwbG9hZERhdGEobnVsbCwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRpZiAoIHRoaXMuc3RlbmNpbCApXG4gICAge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0ZW5jaWwgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0dmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21EYXRhKGdsLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0dGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgZmJvLnVuYmluZCgpO1xuICAgIFxuICAgIHJldHVybiBmYm87XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZUZsb2F0MzIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0Ly8gY3JlYXRlIGEgbmV3IHRleHR1cmUuLlxuICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUuZnJvbURhdGEoZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuICAgIHRleHR1cmUuZW5hYmxlTmVhcmVzdFNjYWxpbmcoKTtcbiAgICB0ZXh0dXJlLmVuYWJsZVdyYXBDbGFtcCgpO1xuXG4gICAgLy9ub3cgY3JlYXRlIHRoZSBmcmFtZWJ1ZmZlciBvYmplY3QgYW5kIGF0dGFjaCB0aGUgdGV4dHVyZSB0byBpdC5cbiAgICB2YXIgZmJvID0gbmV3IEZyYW1lYnVmZmVyKGdsLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICBmYm8uZW5hYmxlVGV4dHVyZSh0ZXh0dXJlKVxuXG4gICAgZmJvLnVuYmluZCgpO1xuXG4gICAgcmV0dXJuIGZibztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGcmFtZWJ1ZmZlcjtcblxuIiwiXG52YXIgY29tcGlsZVByb2dyYW0gPSByZXF1aXJlKCcuL3NoYWRlci9jb21waWxlUHJvZ3JhbScpLFxuXHRleHRyYWN0QXR0cmlidXRlcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RBdHRyaWJ1dGVzJyksXG5cdGV4dHJhY3RVbmlmb3JtcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RVbmlmb3JtcycpLFxuXHRnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QgPSByZXF1aXJlKCcuL3NoYWRlci9nZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgU2hhZGVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cbnZhciBTaGFkZXIgPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIEZpcnN0IGNvbXBpbGUgdGhlIHByb2dyYW0uLlxuXHR0aGlzLnByb2dyYW0gPSBjb21waWxlUHJvZ3JhbShnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7XG5cblx0Ly8gbmV4dCBleHRyYWN0IHRoZSBhdHRyaWJ1dGVzXG5cdHRoaXMuYXR0cmlidXRlcyA9IGV4dHJhY3RBdHRyaWJ1dGVzKGdsLCB0aGlzLnByb2dyYW0pOyBcblxuICAgIHZhciB1bmlmb3JtRGF0YSA9IGV4dHJhY3RVbmlmb3JtcyhnbCwgdGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMudW5pZm9ybXMgPSBnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QoIGdsLCB1bmlmb3JtRGF0YSApO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4iLCJcbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gYSBXZWJHTCBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGZvcm1hdCB7bnVtYmVyfSB0aGUgcGl4ZWwgZm9ybWF0IG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5SR0JBXG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSB0aGUgZ2wgdHlwZSBvZiB0aGUgdGV4dHVyZS4gZGVmYXVsdHMgdG8gZ2wuVU5TSUdORURfQllURVxuICovXG52YXIgVGV4dHVyZSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLnRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cblx0Ly8gc29tZSBzZXR0aW5ncy4uXG5cdHRoaXMubWlwbWFwID0gZmFsc2U7XG5cblx0dGhpcy5wcmVtdWx0aXBseUFscGhhID0gZmFsc2U7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cblx0dGhpcy5mb3JtYXQgPSBmb3JtYXQgfHwgZ2wuUkdCQTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5VTlNJR05FRF9CWVRFO1xuXG5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge1BJWEkuZ2xDb3JlLlRleHR1cmV9IFt2YXJuYW1lXSBbZGVzY3JpcHRpb25dXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKHNvdXJjZSlcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gc291cmNlLndpZHRoO1xuXHR0aGlzLmhlaWdodCA9IHNvdXJjZS5oZWlnaHQ7XG5cblx0Z2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xuICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMuZm9ybWF0LCB0aGlzLnR5cGUsIHNvdXJjZSk7XG59XG5cbnZhciBGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSBmYWxzZTtcblxuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkRGF0YSA9IGZ1bmN0aW9uKGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuYmluZCgpO1xuXHRcblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IHRoaXMud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IHRoaXMuaGVpZ2h0O1xuXG5cdGlmKGRhdGEgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpXG5cdHtcblx0XHRpZighRkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFKVxuXHRcdHtcblx0XHRcdHZhciBleHQgPSBnbC5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9mbG9hdFwiKTtcblx0XHRcdFxuXHRcdFx0aWYoZXh0KVxuXHRcdFx0e1xuXHRcdFx0XHRGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2Zsb2F0aW5nIHBvaW50IHRleHR1cmVzIG5vdCBhdmFpbGFibGUnKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnR5cGUgPSBnbC5GTE9BVDtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHQvLyBUT0RPIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzXG5cdFx0dGhpcy50eXBlID0gZ2wuVU5TSUdORURfQllURTtcblx0fVxuXG5cdC8vIHdoYXQgdHlwZSBvZiBkYXRhP1xuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG5cdGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsICB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgZGF0YSB8fCBudWxsKTtcblxufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24obG9jYXRpb24pXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0aWYobG9jYXRpb24gIT09IHVuZGVmaW5lZClcblx0e1xuXHRcdGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbik7XG5cdH1cblxuXHRnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0aGlzLnRleHR1cmUpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIG51bGwpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5taW5GaWx0ZXIgPSBmdW5jdGlvbiggbGluZWFyIClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRpZih0aGlzLm1pcG1hcClcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVJfTUlQTUFQX0xJTkVBUiA6IGdsLk5FQVJFU1RfTUlQTUFQX05FQVJFU1QpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcblx0fVx0XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1hZ0ZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTWlwbWFwID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR0aGlzLm1pcG1hcCA9IHRydWU7XG5cdGdsLmdlbmVyYXRlTWlwbWFwKGdsLlRFWFRVUkVfMkQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVMaW5lYXJTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcih0cnVlKTtcblx0dGhpcy5tYWdGaWx0ZXIodHJ1ZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZU5lYXJlc3RTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcihmYWxzZSk7XG5cdHRoaXMubWFnRmlsdGVyKGZhbHNlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlV3JhcENsYW1wID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwUmVwZWF0ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXHRcblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuUkVQRUFUKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5SRVBFQVQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlVGV4dHVyZSh0aGlzLnRleHR1cmUpO1xufVxuXG4vL1RleHR1cmUuXG5UZXh0dXJlLmZyb21Tb3VyY2UgPSBmdW5jdGlvbihnbCwgc291cmNlLCBwcmVtdWx0aXBseUFscGhhKVxue1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS5wcmVtdWx0aXBseUFscGhhID0gcHJlbXVsdGlwbHlBbHBoYSB8fCBmYWxzZTtcblx0dGV4dHVyZS51cGxvYWQoc291cmNlKTtcblxuXHRyZXR1cm4gdGV4dHVyZTtcbn1cblxuVGV4dHVyZS5mcm9tRGF0YSA9IGZ1bmN0aW9uKGdsLCBkYXRhLCB3aWR0aCwgaGVpZ2h0KVxue1xuXHQvL2NvbnNvbGUubG9nKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS51cGxvYWREYXRhKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZTtcblxuIiwiXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbi8vIHN0YXRlIG9iamVjdC8vXG5cblxuZnVuY3Rpb24gVmVydGV4QXJyYXlPYmplY3QoZ2wpXG57XG5cdFxuXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IChcbiAgICAgIGdsLmdldEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKVxuICAgICk7XG5cbi8vXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IG51bGw7XG5cblx0aWYodGhpcy5uYXRpdmVWYW9FeHRlbnNpb24pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhbyA9IHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7ICBcblx0fVxuXG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcblxuXHR0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuXHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cblx0XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZlcnRleEFycmF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBWZXJ0ZXhBcnJheU9iamVjdDtcblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKHRoaXMubmF0aXZlVmFvKTsgIFxuXG5cdFx0aWYodGhpcy5kaXJ0eSlcblx0XHR7XG5cdFx0XHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cdFx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdFx0fVxuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLm5hdGl2ZVZhbylcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIFxuXHR7XG5cdFx0dmFyIGF0dHJpYiA9IHRoaXMuYXR0cmlidXRlc1tpXTtcblx0XHRhdHRyaWIuYnVmZmVyLmJpbmQoKTtcdFxuXG5cdFx0YXR0cmliLmF0dHJpYnV0ZS5wb2ludGVyKGF0dHJpYi50eXBlLCBhdHRyaWIubm9ybWFsaXplZCwgYXR0cmliLnN0cmlkZSwgYXR0cmliLnN0YXJ0KTsgXG5cdFx0XG5cdFx0Z2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYXR0cmliLmF0dHJpYnV0ZS5sb2NhdGlvbik7XG5cdH07XG5cblx0dGhpcy5pbmRleEJ1ZmZlci5iaW5kKCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRBdHRyaWJ1dGUgPSBmdW5jdGlvbihidWZmZXIsIGF0dHJpYnV0ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydClcbntcbiAgICB0aGlzLmF0dHJpYnV0ZXMucHVzaCh7XG4gICAgXHRidWZmZXI6IFx0YnVmZmVyLFxuICAgIFx0YXR0cmlidXRlOiBcdGF0dHJpYnV0ZSxcblxuICAgIFx0bG9jYXRpb246IFx0YXR0cmlidXRlLmxvY2F0aW9uLFxuXHQgXHR0eXBlOiBcdFx0dHlwZSB8fCB0aGlzLmdsLkZMT0FULFxuXHQgXHRub3JtYWxpemVkOiBub3JtYWxpemVkIHx8IGZhbHNlLFxuXHQgXHRzdHJpZGU6IFx0c3RyaWRlIHx8IDAsXG5cdCBcdHN0YXJ0OiBcdFx0c3RhcnQgfHwgMFxuXHR9KVxuXG5cdHRoaXMuZGlydHkgPSB0cnVlO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRJbmRleCA9IGZ1bmN0aW9uKGJ1ZmZlciwgb3B0aW9ucylcbntcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gYnVmZmVyO1xuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBzdGFydClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuZHJhd0VsZW1lbnRzKHR5cGUsIHNpemUsIGdsLlVOU0lHTkVEX1NIT1JULCBzdGFydCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgQ29udGV4dFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG5cbnZhciBDT05URVhUX1VJRCA9IDA7XG5cbnZhciBjcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24oY2FudmFzLCBvcHRpb25zKVxue1xuICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgb3B0aW9ucykgfHwgXG4gICAgXHQgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFnbClcbiAgICB7XG4gICAgICAgIC8vIGZhaWwsIG5vdCBhYmxlIHRvIGdldCBhIGNvbnRleHRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB3ZWJHTC4gVHJ5IHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXInKTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCB3YW50IHRvIHBoYXNlIHRoaXMgb3V0P1xuICAgIGdsLmlkID0gQ09OVEVYVF9VSUQrKztcblxuICAgIHJldHVybiBnbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb250ZXh0O1xuXG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgc2V0VmVydGV4QXR0cmliQXJyYXlzID0gZnVuY3Rpb24gKGdsLCBhdHRyaWJzKVxue1x0XG4gICAvLyBjb25zb2xlLmxvZyhnbC5pZClcbiAgICB2YXIgZGF0YSA9IEdMX01BUFtnbC5pZF07XG5cbiAgICBpZighZGF0YSlcbiAgICB7XG5cdCAgIHZhciBtYXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cdFx0ZGF0YSA9IEdMX01BUFtnbC5pZF0gPSB7dGVtcEF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKVxuXHRcdFx0XHQgXHQgXHRcdCAgICxhdHRyaWJTdGF0ZTpuZXcgQXJyYXkobWF4QXR0cmlicyl9O1xuXHR9XG5cdFxuICAgIHZhciBpLFxuICAgIFx0dGVtcEF0dHJpYlN0YXRlID0gZGF0YS50ZW1wQXR0cmliU3RhdGUsXG4gICAgXHRhdHRyaWJTdGF0ZSA9IGRhdGEuYXR0cmliU3RhdGU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAoaSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbaV0ubG9jYXRpb25dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAoYXR0cmliU3RhdGVbaV0gIT09IHRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmliU3RhdGVbaV0gPSB0ZW1wQXR0cmliU3RhdGVbaV07XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmF0dHJpYlN0YXRlW2ldKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VmVydGV4QXR0cmliQXJyYXlzOyIsIlxuXG5cblxuY29tcGlsZVByb2dyYW0gPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcbiAgICB2YXIgZ2xWZXJ0U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuVkVSVEVYX1NIQURFUiwgdmVydGV4U3JjKTtcbiAgICB2YXIgZ2xGcmFnU2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNyYyk7XG5cbiAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbEZyYWdTaGFkZXIpO1xuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgLy8gaWYgbGlua2luZyBmYWlscywgdGhlbiBsb2cgYW5kIGNsZWFudXBcbiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUGl4aS5qcyBFcnJvcjogQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVyLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5WQUxJREFURV9TVEFUVVMnLCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLlZBTElEQVRFX1NUQVRVUykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5nZXRFcnJvcigpJywgZ2wuZ2V0RXJyb3IoKSk7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBwcm9ncmFtIGluZm8gbG9nLCBsb2cgaXRcbiAgICAgICAgaWYgKGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pICE9PSAnJylcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaXhpLmpzIFdhcm5pbmc6IGdsLmdldFByb2dyYW1JbmZvTG9nKCknLCBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICBwcm9ncmFtID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBzb21lIHNoYWRlcnNcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xGcmFnU2hhZGVyKTtcblxuICAgIHJldHVybiBwcm9ncmFtO1xufVxuXG52YXIgY29tcGlsZVNoYWRlciA9IGZ1bmN0aW9uIChnbCwgdHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzcmMpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZVByb2dyYW07XG5cbiIsIlxuXG52YXIgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkgXG57XG4gICAgc3dpdGNoICh0eXBlKVxuICAgIHtcbiAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAndmVjMic6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzQnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSg0ICogc2l6ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgY2FzZSAnc2FtcGxlcjJEJzpcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWMyJzogICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnaXZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDMgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjNCc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDQgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdib29sJzogICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMyJzpcblxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSggMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMzJzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWM0JzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ21hdDInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Myc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMV0pO1xuXG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDAsIDAsIDFdKTtcbiAgICB9XG59XG5cbnZhciBib29sZWFuQXJyYXkgPSBmdW5jdGlvbihzaXplKVxue1xuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgYXJyYXlbaV0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRWYWx1ZTtcbiIsIlxudmFyIG1hcFR5cGUgPSByZXF1aXJlKCcuL21hcFR5cGUnKTtcbnZhciBtYXBTaXplID0gcmVxdWlyZSgnLi9tYXBTaXplJyk7XG5cbnZhciBleHRyYWN0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICB2YXIgdG90YWxBdHRyaWJ1dGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxBdHRyaWJ1dGVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGF0dHJpYkRhdGEgPSBnbC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaSk7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgYXR0cmliRGF0YS50eXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYkRhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOnR5cGUsXG4gICAgICAgICAgICBzaXplOm1hcFNpemUodHlwZSksXG4gICAgICAgICAgICBsb2NhdGlvbjpnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBhdHRyaWJEYXRhLm5hbWUpLFxuICAgICAgICAgICAgLy9UT0RPIC0gbWFrZSBhbiBhdHRyaWJ1dGUgb2JqZWN0XG4gICAgICAgICAgICBwb2ludGVyOmZ1bmN0aW9uKHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpe1xuXG4gICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5sb2NhdGlvbix0aGlzLnNpemUsIHR5cGUgfHwgZ2wuRkxPQVQsIG5vcm1hbGl6ZWQgfHwgZmFsc2UsIHN0cmlkZSB8fCAwLCBzdGFydCB8fCAwKTsgXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYXR0cmlidXRlczsgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RBdHRyaWJ1dGVzO1xuXG4iLCJ2YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIGRlZmF1bHRWYWx1ZSA9IHJlcXVpcmUoJy4vZGVmYXVsdFZhbHVlJyk7XG5cblxudmFyIGV4dHJhY3RVbmlmb3JtcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuXHR2YXIgdW5pZm9ybXMgPSB7fTtcblx0XG4gICAgdmFyIHRvdGFsVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxVbmlmb3JtczsgaSsrKSBcbiAgICB7XG4gICAgXHR2YXIgdW5pZm9ybURhdGEgPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpO1xuICAgIFx0dmFyIG5hbWUgPSB1bmlmb3JtRGF0YS5uYW1lLnJlcGxhY2UoL1xcWy4qP1xcXS8sIFwiXCIpO1xuICAgICAgICB2YXIgdHlwZSA9IG1hcFR5cGUoZ2wsIHVuaWZvcm1EYXRhLnR5cGUgKTtcblxuICAgIFx0dW5pZm9ybXNbbmFtZV0gPSB7XG4gICAgXHRcdHR5cGU6dHlwZSxcbiAgICBcdFx0c2l6ZTp1bmlmb3JtRGF0YS5zaXplLFxuICAgIFx0XHRsb2NhdGlvbjpnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksXG4gICAgXHRcdHZhbHVlOmRlZmF1bHRWYWx1ZSh0eXBlLCB1bmlmb3JtRGF0YS5zaXplKVxuICAgIFx0fVxuICAgIH07XG5cdFxuXHRyZXR1cm4gdW5pZm9ybXM7XHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHRyYWN0VW5pZm9ybXM7XG5cbiIsIlxudmFyIGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IGZ1bmN0aW9uKGdsLCB1bmlmb3JtRGF0YSlcbntcbiAgICAvLyB0aGlzIGlzIHRoZSBvYmplY3Qgd2Ugd2lsbCBiZSBzZW5kaW5nIGJhY2suXG4gICAgLy8gYW4gb2JqZWN0IGhpZXJhY2h5IHdpbGwgYmUgY3JlYXRlZCBmb3Igc3RydWN0c1xuICAgIHZhciB1bmlmb3JtcyA9IHtkYXRhOnt9fTtcblxuICAgIHVuaWZvcm1zLmdsID0gZ2w7XG4gICAgXG4gICAgdmFyIHVuaWZvcm1LZXlzPSBPYmplY3Qua2V5cyh1bmlmb3JtRGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1LZXlzLmxlbmd0aDsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBmdWxsTmFtZSA9IHVuaWZvcm1LZXlzW2ldXG5cbiAgICAgICAgdmFyIG5hbWVUb2tlbnMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAxXTtcblxuICAgICAgICB2YXIgdW5pZm9ybUdyb3VwID0gZ2V0VW5pZm9ybUdyb3VwKG5hbWVUb2tlbnMsIHVuaWZvcm1zKTtcblxuICAgICAgICB2YXIgdW5pZm9ybSA9ICB1bmlmb3JtRGF0YVtmdWxsTmFtZV07XG4gICAgICAgIHVuaWZvcm1Hcm91cC5kYXRhW25hbWVdID0gdW5pZm9ybTtcblxuICAgICAgICB1bmlmb3JtR3JvdXAuZ2wgPSBnbDtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5pZm9ybUdyb3VwLCBuYW1lLCB7XG4gICAgICAgICAgICBnZXQ6IGdlbmVyYXRlR2V0dGVyKG5hbWUpLFxuICAgICAgICAgICAgc2V0OiBnZW5lcmF0ZVNldHRlcihuYW1lLCB1bmlmb3JtKVxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdW5pZm9ybXM7XG59XG5cbnZhciBnZW5lcmF0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpXG57XG5cdHZhciB0ZW1wbGF0ZSA9IGdldHRlclRlbXBsYXRlLnJlcGxhY2UoJyUlJywgbmFtZSk7XG5cdHJldHVybiBuZXcgRnVuY3Rpb24odGVtcGxhdGUpO1xufVxuXG52YXIgZ2VuZXJhdGVTZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCB1bmlmb3JtKVxue1xuICAgIHZhciB0ZW1wbGF0ZSA9IHNldHRlclRlbXBsYXRlLnJlcGxhY2UoLyUlL2csIG5hbWUpO1xuICAgIHZhciBzZXRUZW1wbGF0ZVxuICAgIFxuICAgIGlmKHVuaWZvcm0uc2l6ZSA9PT0gMSlcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19TSU5HTEVfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzZXRUZW1wbGF0ZSA9IEdMU0xfVE9fQVJSQVlfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cblxuICAgIGlmKHNldFRlbXBsYXRlKVxuICAgIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gXCJcXG50aGlzLmdsLlwiICsgc2V0VGVtcGxhdGUgKyBcIjtcIjtcbiAgICB9XG5cbiAgXHRyZXR1cm4gbmV3IEZ1bmN0aW9uKCd2YWx1ZScsIHRlbXBsYXRlKTtcbn1cblxudmFyIGdldFVuaWZvcm1Hcm91cCA9IGZ1bmN0aW9uKG5hbWVUb2tlbnMsIHVuaWZvcm0pXG57XG4gICAgdmFyIGN1ciA9IHVuaWZvcm07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVUb2tlbnMubGVuZ3RoIC0gMTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBvID0gY3VyW25hbWVUb2tlbnNbaV1dIHx8IHtkYXRhOnt9fTtcbiAgICAgICAgY3VyW25hbWVUb2tlbnNbaV1dID0gbztcbiAgICAgICAgY3VyID0gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGN1clxufVxuXG52YXIgZ2V0dGVyVGVtcGxhdGUgPSBbXG4gICAgJ3JldHVybiB0aGlzLmRhdGEuJSUudmFsdWU7Jyxcbl0uam9pbignXFxuJyk7XG5cbnZhciBzZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAndGhpcy5kYXRhLiUlLnZhbHVlID0gdmFsdWU7JyxcbiAgICAndmFyIGxvY2F0aW9uID0gdGhpcy5kYXRhLiUlLmxvY2F0aW9uOydcbl0uam9pbignXFxuJyk7XG5cblxudmFyIEdMU0xfVE9fU0lOR0xFX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ3ZlYzInOiAgICAgJ3VuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ3ZlYzMnOiAgICAgJ3VuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG4gICAgXHRcbiAgICAnaW50JzogICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnaXZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcblxuICAgICdtYXQyJzogICAgICd1bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0Myc6ICAgICAndW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG4gICAgJ21hdDQnOiAgICAgJ3VuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuXG4gICAgJ3NhbXBsZXIyRCc6J3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG52YXIgR0xTTF9UT19BUlJBWV9TRVRURVJTID0ge1xuXG4gICAgJ2Zsb2F0JzogICAgJ3VuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjNCc6ICAgICAndW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG4gICBcbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdDtcblxuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24odHlwZSkgXG57IFxuICAgIHJldHVybiBHTFNMX1RPX1NJWkVbdHlwZV07XG59XG5cblxudmFyIEdMU0xfVE9fU0laRSA9IHtcbiAgICAnZmxvYXQnOiAgICAxLFxuICAgICd2ZWMyJzogICAgIDIsXG4gICAgJ3ZlYzMnOiAgICAgMyxcbiAgICAndmVjNCc6ICAgICA0LFxuXG4gICAgJ2ludCc6ICAgICAgMSxcbiAgICAnaXZlYzInOiAgICAyLFxuICAgICdpdmVjMyc6ICAgIDMsXG4gICAgJ2l2ZWM0JzogICAgNCxcblxuICAgICdib29sJzogICAgIDEsXG4gICAgJ2J2ZWMyJzogICAgMixcbiAgICAnYnZlYzMnOiAgICAzLFxuICAgICdidmVjNCc6ICAgIDQsXG5cbiAgICAnbWF0Mic6ICAgICA0LFxuICAgICdtYXQzJzogICAgIDksXG4gICAgJ21hdDQnOiAgICAgMTYsXG5cbiAgICAnc2FtcGxlcjJEJzogIDFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24oZ2wsIHR5cGUpIFxue1xuICAgIGlmKCFHTF9UQUJMRSkgXG4gICAge1xuICAgICAgICB2YXIgdHlwZU5hbWVzID0gT2JqZWN0LmtleXMoR0xfVE9fR0xTTF9UWVBFUyk7XG5cbiAgICAgICAgR0xfVEFCTEUgPSB7fTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdHlwZU5hbWVzLmxlbmd0aDsgKytpKSBcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHRuID0gdHlwZU5hbWVzW2ldO1xuICAgICAgICAgICAgR0xfVEFCTEVbIGdsW3RuXSBdID0gR0xfVE9fR0xTTF9UWVBFU1t0bl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIEdMX1RBQkxFW3R5cGVdO1xufVxuXG52YXIgR0xfVEFCTEUgPSBudWxsO1xuXG52YXIgR0xfVE9fR0xTTF9UWVBFUyA9IHtcbiAgJ0ZMT0FUJzogICAgICAgJ2Zsb2F0JyxcbiAgJ0ZMT0FUX1ZFQzInOiAgJ3ZlYzInLFxuICAnRkxPQVRfVkVDMyc6ICAndmVjMycsXG4gICdGTE9BVF9WRUM0JzogICd2ZWM0JyxcblxuICAnSU5UJzogICAgICAgICAnaW50JyxcbiAgJ0lOVF9WRUMyJzogICAgJ2l2ZWMyJyxcbiAgJ0lOVF9WRUMzJzogICAgJ2l2ZWMzJyxcbiAgJ0lOVF9WRUM0JzogICAgJ2l2ZWM0JyxcbiAgXG4gICdCT09MJzogICAgICAgICdib29sJyxcbiAgJ0JPT0xfVkVDMic6ICAgJ2J2ZWMyJyxcbiAgJ0JPT0xfVkVDMyc6ICAgJ2J2ZWMzJyxcbiAgJ0JPT0xfVkVDNCc6ICAgJ2J2ZWM0JyxcbiAgXG4gICdGTE9BVF9NQVQyJzogICdtYXQyJyxcbiAgJ0ZMT0FUX01BVDMnOiAgJ21hdDMnLFxuICAnRkxPQVRfTUFUNCc6ICAnbWF0NCcsXG4gIFxuICAnU0FNUExFUl8yRCc6ICAnc2FtcGxlcjJEJyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwU2l6ZTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvQm9vbCh2KSB7XG4gICAgICAgIHJldHVybiAhIXY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vdElkKHYpIHtcbiAgICAgICAgcmV0dXJuICF2O1xuICAgIH1cblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcHJldmlvdXNfYXN5bmM7XG5cbiAgICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gICAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZiB8fFxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgdGhpcztcblxuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgICAgcHJldmlvdXNfYXN5bmMgPSByb290LmFzeW5jO1xuICAgIH1cblxuICAgIGFzeW5jLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBwcmV2aW91c19hc3luYztcbiAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbmx5X29uY2UoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIC8vIFBvcnRlZCBmcm9tIHVuZGVyc2NvcmUuanMgaXNPYmplY3RcbiAgICB2YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9pc0FycmF5TGlrZShhcnIpIHtcbiAgICAgICAgcmV0dXJuIF9pc0FycmF5KGFycikgfHwgKFxuICAgICAgICAgICAgLy8gaGFzIGEgcG9zaXRpdmUgaW50ZWdlciBsZW5ndGggcHJvcGVydHlcbiAgICAgICAgICAgIHR5cGVvZiBhcnIubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICBhcnIubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggJSAxID09PSAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2FycmF5RWFjaChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfbWFwKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdG9yKGFycltpbmRleF0sIGluZGV4LCBhcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JhbmdlKGNvdW50KSB7XG4gICAgICAgIHJldHVybiBfbWFwKEFycmF5KGNvdW50KSwgZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGk7IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9yZWR1Y2UoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBfYXJyYXlFYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9mb3JFYWNoT2Yob2JqZWN0LCBpdGVyYXRvcikge1xuICAgICAgICBfYXJyYXlFYWNoKF9rZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnIsIGl0ZW0pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfa2V5SXRlcmF0b3IoY29sbCkge1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB2YXIgbGVuO1xuICAgICAgICB2YXIga2V5cztcbiAgICAgICAgaWYgKF9pc0FycmF5TGlrZShjb2xsKSkge1xuICAgICAgICAgICAgbGVuID0gY29sbC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBsZW4gPyBpIDogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXlzID0gX2tleXMoY29sbCk7XG4gICAgICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGtleXNbaV0gOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpbWlsYXIgdG8gRVM2J3MgcmVzdCBwYXJhbSAoaHR0cDovL2FyaXlhLm9maWxhYnMuY29tLzIwMTMvMDMvZXM2LWFuZC1yZXN0LXBhcmFtZXRlci5odG1sKVxuICAgIC8vIFRoaXMgYWNjdW11bGF0ZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byBhbiBhcnJheSwgYWZ0ZXIgYSBnaXZlbiBpbmRleC5cbiAgICAvLyBGcm9tIHVuZGVyc2NvcmUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzIxNDApLlxuICAgIGZ1bmN0aW9uIF9yZXN0UGFyYW0oZnVuYywgc3RhcnRJbmRleCkge1xuICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCk7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSB1bnVzZWQgYnV0IGhhbmRsZSBjYXNlcyBvdXRzaWRlIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50OlxuICAgICAgICAgICAgLy8gdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICAgICAgICAvLyBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAvLyAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICAgICAgICAvLyByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBleHBvcnRlZCBhc3luYyBtb2R1bGUgZnVuY3Rpb25zIC8vLy9cblxuICAgIC8vLy8gbmV4dFRpY2sgaW1wbGVtZW50YXRpb24gd2l0aCBicm93c2VyLWNvbXBhdGlibGUgZmFsbGJhY2sgLy8vL1xuXG4gICAgLy8gY2FwdHVyZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZSB0byBndWFyZCBhZ2FpbnN0IGZha2VUaW1lciBtb2Nrc1xuICAgIHZhciBfc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzZXRJbW1lZGlhdGU7XG5cbiAgICB2YXIgX2RlbGF5ID0gX3NldEltbWVkaWF0ZSA/IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgIF9zZXRJbW1lZGlhdGUoZm4pO1xuICAgIH0gOiBmdW5jdGlvbihmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBfZGVsYXk7XG4gICAgfVxuICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IF9zZXRJbW1lZGlhdGUgPyBfZGVsYXkgOiBhc3luYy5uZXh0VGljaztcblxuXG4gICAgYXN5bmMuZm9yRWFjaCA9XG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9XG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mU2VyaWVzKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG5cbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPVxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9lYWNoT2ZMaW1pdChsaW1pdCkoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoT2YgPVxuICAgIGFzeW5jLmVhY2hPZiA9IGZ1bmN0aW9uIChvYmplY3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBvYmplY3QgPSBvYmplY3QgfHwgW107XG5cbiAgICAgICAgdmFyIGl0ZXIgPSBfa2V5SXRlcmF0b3Iob2JqZWN0KTtcbiAgICAgICAgdmFyIGtleSwgY29tcGxldGVkID0gMDtcblxuICAgICAgICB3aGlsZSAoKGtleSA9IGl0ZXIoKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpdGVyYXRvcihvYmplY3Rba2V5XSwga2V5LCBvbmx5X29uY2UoZG9uZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gMCkgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZC0tO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBrZXkgaXMgbnVsbCBpbiBjYXNlIGl0ZXJhdG9yIGlzbid0IGV4aGF1c3RlZFxuICAgICAgICAgICAgLy8gYW5kIGRvbmUgcmVzb2x2ZWQgc3luY2hyb25vdXNseS5cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gbnVsbCAmJiBjb21wbGV0ZWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZlNlcmllcyA9XG4gICAgYXN5bmMuZWFjaE9mU2VyaWVzID0gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iaiA9IG9iaiB8fCBbXTtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgdmFyIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRvcihvYmpba2V5XSwga2V5LCBvbmx5X29uY2UoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoaXRlcmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5mb3JFYWNoT2ZMaW1pdCA9XG4gICAgYXN5bmMuZWFjaE9mTGltaXQgPSBmdW5jdGlvbiAob2JqLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9lYWNoT2ZMaW1pdChsaW1pdCkob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZWFjaE9mTGltaXQobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBydW5uaW5nID0gMDtcbiAgICAgICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChkb25lICYmIHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWwoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZiwgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb1BhcmFsbGVsTGltaXQoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihfZWFjaE9mTGltaXQobGltaXQpLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvU2VyaWVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihhc3luYy5lYWNoT2ZTZXJpZXMsIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gX2lzQXJyYXlMaWtlKGFycikgPyBbXSA6IHt9O1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfYXN5bmNNYXApO1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLmluamVjdCA9XG4gICAgYXN5bmMuZm9sZGwgPVxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgaSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5mb2xkciA9XG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGlkZW50aXR5KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudHJhbnNmb3JtID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGl0ZXJhdG9yO1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBtZW1vO1xuICAgICAgICAgICAgbWVtbyA9IF9pc0FycmF5KGFycikgPyBbXSA6IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuZWFjaE9mKGFyciwgZnVuY3Rpb24odiwgaywgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHYsIGssIGNiKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleDogaW5kZXgsIHZhbHVlOiB4fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soX21hcChyZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICB9KSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMuc2VsZWN0ID1cbiAgICBhc3luYy5maWx0ZXIgPSBkb1BhcmFsbGVsKF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0TGltaXQgPVxuICAgIGFzeW5jLmZpbHRlckxpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID1cbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcblxuICAgIGZ1bmN0aW9uIF9yZWplY3QoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBfZmlsdGVyKGVhY2hmbiwgYXJyLCBmdW5jdGlvbih2YWx1ZSwgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgY2IoIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoZWFjaGZuLCBjaGVjaywgZ2V0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2IpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSBjYihnZXRSZXN1bHQoZmFsc2UsIHZvaWQgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWUoeCwgXywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNiKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2IgJiYgY2hlY2sodikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGdldFJlc3VsdCh0cnVlLCB4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGl0ZXJhdG9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGxpbWl0LCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBsaW1pdDtcbiAgICAgICAgICAgICAgICBlYWNoZm4oYXJyLCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMuYW55ID1cbiAgICBhc3luYy5zb21lID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIHRvQm9vbCwgaWRlbnRpdHkpO1xuXG4gICAgYXN5bmMuc29tZUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5hbGwgPVxuICAgIGFzeW5jLmV2ZXJ5ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIG5vdElkLCBub3RJZCk7XG5cbiAgICBhc3luYy5ldmVyeUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgbm90SWQsIG5vdElkKTtcblxuICAgIGZ1bmN0aW9uIF9maW5kR2V0UmVzdWx0KHYsIHgpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIGFzeW5jLmRldGVjdCA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mU2VyaWVzLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdExpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgaWRlbnRpdHksIF9maW5kR2V0UmVzdWx0KTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoY29tcGFyYXRvciksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgb3B0aW9uYWwsIHNoaWZ0IHRoZSBhcmdzLlxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHJlbWFpbmluZ1Rhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoZm4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gX2luZGV4T2YobGlzdGVuZXJzLCBmbik7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgX2FycmF5RWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2FycmF5RWFjaChrZXlzLCBmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSBfaXNBcnJheSh0YXNrc1trXSkgPyB0YXNrc1trXTogW3Rhc2tzW2tdXTtcbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBfZm9yRWFjaE9mKHJlc3VsdHMsIGZ1bmN0aW9uKHZhbCwgcmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCB0YXNrLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWFkLWxvY2tzXG4gICAgICAgICAgICB2YXIgbGVuID0gcmVxdWlyZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGRlcDtcbiAgICAgICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgICAgICAgIGlmICghKGRlcCA9IHRhc2tzW3JlcXVpcmVzW2xlbl1dKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhcyBpbmV4aXN0YW50IGRlcGVuZGVuY3knKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc0FycmF5KGRlcCkgJiYgX2luZGV4T2YoZGVwLCBrKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGN5Y2xpYyBkZXBlbmRlbmNpZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kgJiYgX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcblxuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHRpbWVzOiBERUZBVUxUX1RJTUVTLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IERFRkFVTFRfSU5URVJWQUxcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgdCA9PT0gJ251bWJlcicpe1xuICAgICAgICAgICAgICAgIGFjYy50aW1lcyA9IHBhcnNlSW50KHQsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiB0ID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodC50aW1lcywgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICAgICAgYWNjLmludGVydmFsID0gcGFyc2VJbnQodC5pbnRlcnZhbCwgMTApIHx8IERFRkFVTFRfSU5URVJWQUw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYXJndW1lbnQgdHlwZSBmb3IgXFwndGltZXNcXCc6ICcgKyB0eXBlb2YgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDEgfHwgbGVuZ3RoID4gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyAtIG11c3QgYmUgZWl0aGVyICh0YXNrKSwgKHRhc2ssIGNhbGxiYWNrKSwgKHRpbWVzLCB0YXNrKSBvciAodGltZXMsIHRhc2ssIGNhbGxiYWNrKScpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA8PSAyICYmIHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGltZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0cywgdGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgb3B0cy50YXNrID0gdGFzaztcblxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVkVGFzayh3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQodGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5SW50ZXJ2YWwoaW50ZXJ2YWwpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKG9wdHMudGltZXMpIHtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5hbEF0dGVtcHQgPSAhKG9wdHMudGltZXMtPTEpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KG9wdHMudGFzaywgZmluYWxBdHRlbXB0KSk7XG4gICAgICAgICAgICAgICAgaWYoIWZpbmFsQXR0ZW1wdCAmJiBvcHRzLmludGVydmFsID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlJbnRlcnZhbChvcHRzLmludGVydmFsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBvcHRzLmNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNhbGxiYWNrIGlzIHBhc3NlZCwgcnVuIHRoaXMgYXMgYSBjb250cm9sbCBmbG93XG4gICAgICAgIHJldHVybiBvcHRzLmNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrO1xuICAgIH07XG5cbiAgICBhc3luYy53YXRlcmZhbGwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGlmICghX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3cmFwSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCh3cmFwSXRlcmF0b3IobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbnN1cmVBc3luYyhpdGVyYXRvcikuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3BhcmFsbGVsKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgbm9vcDtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsIGZ1bmN0aW9uICh0YXNrLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0YXNrKF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLnBhcmFsbGVsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoYXN5bmMuZWFjaE9mLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24odGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoX2VhY2hPZkxpbWl0KGxpbWl0KSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2ZTZXJpZXMsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VDYWxsYmFjayhpbmRleCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYWtlQ2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIGFzeW5jLmFwcGx5ID0gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGNhbGxBcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoY2FsbEFyZ3MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb25jYXQoZWFjaGZuLCBhcnIsIGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIGZuKHgsIGZ1bmN0aW9uIChlcnIsIHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICB2YXIgbmV4dCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdC5hcHBseSh0aGlzLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihuZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gKytjYWxscyA8PSAxIHx8IHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9VbnRpbCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmR1cmluZyA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hlY2spO1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cnV0aCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0KGNoZWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9EdXJpbmcgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIGFzeW5jLmR1cmluZyhmdW5jdGlvbihuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY2FsbHMrKyA8IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBtdXN0IG5vdCBiZSB6ZXJvJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sgfHwgbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBxLnRhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfbmV4dChxLCB0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgd29ya2VycyAtPSAxO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHdvcmtlcnNMaXN0LCBmdW5jdGlvbiAod29ya2VyLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtlciA9PT0gdGFzayAmJiAhcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgdGFza3M6IFtdLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IGNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbm9vcCxcbiAgICAgICAgICAgIGVtcHR5OiBub29wLFxuICAgICAgICAgICAgZHJhaW46IG5vb3AsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHEuZHJhaW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHRydWUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFxLnBhdXNlZCAmJiB3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSh3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBxLnBheWxvYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEucGF5bG9hZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEudGFza3MubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfbWFwKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaCh0YXNrc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UoX25leHQocSwgdGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdW1lQ291bnQgPSBNYXRoLm1pbihxLmNvbmN1cnJlbmN5LCBxLnRhc2tzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSByZXN1bWVDb3VudDsgdysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgcSA9IF9xdWV1ZShmdW5jdGlvbiAoaXRlbXMsIGNiKSB7XG4gICAgICAgICAgICB3b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICAgIGVuZCA9IHNlcXVlbmNlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGJlZyArICgoZW5kIC0gYmVnICsgMSkgPj4+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3BcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoX2JpbmFyeVNlYXJjaChxLnRhc2tzLCBpdGVtLCBfY29tcGFyZVRhc2tzKSArIDEsIDAsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBxLnVuc2hpZnQ7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLmNhcmdvID0gZnVuY3Rpb24gKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gX3F1ZXVlKHdvcmtlciwgMSwgcGF5bG9hZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9jb25zb2xlX2ZuKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGlkZW50aXR5O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIG1lbW9pemVkKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGtleSBpbiBtZW1vKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF90aW1lcyhtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBtYXBwZXIoX3JhbmdlKGNvdW50KSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy50aW1lcyA9IF90aW1lcyhhc3luYy5tYXApO1xuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gX3RpbWVzKGFzeW5jLm1hcFNlcmllcyk7XG4gICAgYXN5bmMudGltZXNMaW1pdCA9IGZ1bmN0aW9uIChjb3VudCwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMubWFwTGltaXQoX3JhbmdlKGNvdW50KSwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBub29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW19yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgbmV4dGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfSldKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoYXQsIFtlcnJdLmNvbmNhdChyZXN1bHRzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5zZXEuYXBwbHkobnVsbCwgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBfYXBwbHlFYWNoKGVhY2hmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbihmbnMsIGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBnbyA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlYWNoZm4oZm5zLCBmdW5jdGlvbiAoZm4sIF8sIGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5hcHBseUVhY2ggPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZik7XG4gICAgYXN5bmMuYXBwbHlFYWNoU2VyaWVzID0gX2FwcGx5RWFjaChhc3luYy5lYWNoT2ZTZXJpZXMpO1xuXG5cbiAgICBhc3luYy5mb3JldmVyID0gZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZG9uZSA9IG9ubHlfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgdmFyIHRhc2sgPSBlbnN1cmVBc3luYyhmbik7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVBc3luYyhmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuXG4gICAgYXN5bmMuY29uc3RhbnQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICB2YXIgYXJncyA9IFtudWxsXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXN5bmMud3JhcFN5bmMgPVxuICAgIGFzeW5jLmFzeW5jaWZ5ID0gZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAoX2lzT2JqZWN0KHJlc3VsdCkgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLm1lc3NhZ2UgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBOb2RlLmpzXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG4gICAgfVxuICAgIC8vIEFNRCAvIFJlcXVpcmVKU1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG5cdCAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXG5cdCAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cblx0ICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSlcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cblx0ICogQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuXHQgKiBVbmljb2RlIHN0cmluZy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gJ3huLS0nICsgZW5jb2RlKHN0cmluZylcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG5cdHB1bnljb2RlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHQndmVyc2lvbic6ICcxLjMuMicsXG5cdFx0LyoqXG5cdFx0ICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHRcdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMpIHtcblx0XHRcdC8vIGluIE5vZGUuanMsIGlvLmpzLCBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IHB1bnljb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5wdW55Y29kZSA9IHB1bnljb2RlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUpIHJldHVybiB0cmlhbmdsZXM7XG5cbiAgICB2YXIgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgc2l6ZTtcblxuICAgIGlmIChoYXNIb2xlcykgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKTtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG4gICAgICAgIG1pblggPSBtYXhYID0gZGF0YVswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xuICAgICAgICAgICAgeSA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIHNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIHNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgICAgICBpLCBqLCBsYXN0O1xuXG4gICAgLy8gY2FsY3VsYXRlIG9yaWdpbmFsIHdpbmRpbmcgb3JkZXIgb2YgYSBwb2x5Z29uIHJpbmdcbiAgICBmb3IgKGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cblxuICAgIC8vIGxpbmsgcG9pbnRzIGludG8gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuICAgIGlmIChjbG9ja3dpc2UgPT09IChzdW0gPiAwKSkge1xuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgc2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChzaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0aWNlIGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZWFyLCB0cmlhbmdsZXMsIGRpbSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDIpO1xuXG4gICAgICAgICAgICAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgd2hpbGUgKHAgIT09IGVhci5wcmV2KSB7XG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG4gICAgdmFyIG1pblRYID0gYS54IDwgYi54ID8gKGEueCA8IGMueCA/IGEueCA6IGMueCkgOiAoYi54IDwgYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoYS55IDwgYy55ID8gYS55IDogYy55KSA6IChiLnkgPCBjLnkgPyBiLnkgOiBjLnkpLFxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1heFRZID0gYS55ID4gYi55ID8gKGEueSA+IGMueSA/IGEueSA6IGMueSkgOiAoYi55ID4gYy55ID8gYi55IDogYy55KTtcblxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgdmFyIG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBzaXplKSxcbiAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgdmFyIHAgPSBlYXIubmV4dFo7XG5cbiAgICB3aGlsZSAocCAmJiBwLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgcCA9IGVhci5wcmV2WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIC8vIGEgc2VsZi1pbnRlcnNlY3Rpb24gd2hlcmUgZWRnZSAodltpLTFdLHZbaV0pIGludGVyc2VjdHMgKHZbaSsxXSx2W2krMl0pXG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcblxuICAgICAgICAgICAgcCA9IHN0YXJ0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBwO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBzdG9wID0gbSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtLm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBtLnggJiZcbiAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoaHkgPCBtLnkgPyBoeCA6IHF4LCBoeSwgbS54LCBtLnksIGh5IDwgbS55ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxU2l6ZSA9PT0gMCB8fCAhcSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwLnogPD0gcS56KSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBzaXplIG9mIHRoZSBkYXRhIGJvdW5kaW5nIGJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlXG4gICAgeCA9IDMyNzY3ICogKHggLSBtaW5YKSAvIHNpemU7XG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAvIHNpemU7XG5cbiAgICB4ID0gKHggfCAoeCA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB4ID0gKHggfCAoeCA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnggPCBsZWZ0bW9zdC54KSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGVxdWFscyhhLCBiKSB8fCBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmXG4gICAgICAgICAgIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYik7XG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgcmV0dXJuIGFyZWEocDEsIHExLCBwMikgPiAwICE9PSBhcmVhKHAxLCBxMSwgcTIpID4gMCAmJlxuICAgICAgICAgICBhcmVhKHAyLCBxMiwgcDEpID4gMCAhPT0gYXJlYShwMiwgcTIsIHExKSA+IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGljZSBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0aWNlIG5vZGVzIGluIGEgcG9seWdvbiByaW5nXG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZVxuICAgIHRoaXMueiA9IG51bGw7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG5cbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuICAgIHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1xuLy8gV2Ugc3RvcmUgb3VyIEVFIG9iamVjdHMgaW4gYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gYH5gIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IG92ZXJyaWRkZW4gb3Jcbi8vIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vIFdlIGFsc28gYXNzdW1lIHRoYXQgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBldmVudCBuYW1lXG4vLyBpcyBhbiBFUzYgU3ltYm9sLlxuLy9cbnZhciBwcmVmaXggPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJyA/ICd+JyA6IGZhbHNlO1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIEV2ZW50RW1pdHRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgQ29udGV4dCBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgZW1pdCBvbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIE1pbmltYWwgRXZlbnRFbWl0dGVyIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkgeyAvKiBOb3RoaW5nIHRvIHNldCAqLyB9XG5cbi8qKlxuICogSG9sZHMgdGhlIGFzc2lnbmVkIEV2ZW50RW1pdHRlcnMgYnkgbmFtZS5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiBhIGxpc3Qgb2YgYXNzaWduZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZXhpc3RzIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7QXJyYXl8Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50LCBleGlzdHMpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGF2YWlsYWJsZSA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoZXhpc3RzKSByZXR1cm4gISFhdmFpbGFibGU7XG4gIGlmICghYXZhaWxhYmxlKSByZXR1cm4gW107XG4gIGlmIChhdmFpbGFibGUuZm4pIHJldHVybiBbYXZhaWxhYmxlLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGF2YWlsYWJsZS5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBhdmFpbGFibGVbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIEVtaXQgYW4gZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSW5kaWNhdGlvbiBpZiB3ZSd2ZSBlbWl0dGVkIGFuIGV2ZW50LlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyBFdmVudExpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdG9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgdGhpcylcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgdGhpcy5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lcjtcbiAgZWxzZSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XS5mbikgdGhpcy5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gICAgZWxzZSB0aGlzLl9ldmVudHNbZXZ0XSA9IFtcbiAgICAgIHRoaXMuX2V2ZW50c1tldnRdLCBsaXN0ZW5lclxuICAgIF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGFuIEV2ZW50TGlzdGVuZXIgdGhhdCdzIG9ubHkgY2FsbGVkIG9uY2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzLCB0cnVlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2Ugd2FudCB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgdGhhdCB3ZSBuZWVkIHRvIGZpbmQuXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IE9ubHkgcmVtb3ZlIGxpc3RlbmVycyBtYXRjaGluZyB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25jZSBsaXN0ZW5lcnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBldmVudHMgPSBbXTtcblxuICBpZiAoZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgIGxpc3RlbmVycy5mbiAhPT0gZm5cbiAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVycy5vbmNlKVxuICAgICAgICB8fCAoY29udGV4dCAmJiBsaXN0ZW5lcnMuY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuXG4gICAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKVxuICAgICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAvL1xuICBpZiAoZXZlbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW2V2dF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgb3Igb25seSB0aGUgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmVycyBmb3IuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKGV2ZW50KSBkZWxldGUgdGhpcy5fZXZlbnRzW3ByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRdO1xuICBlbHNlIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFwcGx5IGFueW1vcmUuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4ndXNlIHN0cmljdCc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiFcbiAqIGFzeW5jXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jXG4gKlxuICogQ29weXJpZ2h0IDIwMTAtMjAxNCBDYW9sYW4gTWNNYWhvblxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbi8qanNoaW50IG9uZXZhcjogZmFsc2UsIGluZGVudDo0ICovXG4vKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cbihmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXN5bmMgPSB7fTtcblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcm9vdCwgcHJldmlvdXNfYXN5bmM7XG5cbiAgICByb290ID0gdGhpcztcbiAgICBpZiAocm9vdCAhPSBudWxsKSB7XG4gICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWQpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkocm9vdCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8gY3Jvc3MtYnJvd3NlciBjb21wYXRpYmxpdHkgZnVuY3Rpb25zIC8vLy9cblxuICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgdmFyIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG5cbiAgICB2YXIgX2VhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBfbWFwID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgaWYgKGFyci5tYXApIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIubWFwKGl0ZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IoeCwgaSwgYSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHZhciBfcmVkdWNlID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIG1lbW8pIHtcbiAgICAgICAgaWYgKGFyci5yZWR1Y2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGl0ZXJhdG9yLCBtZW1vKTtcbiAgICAgICAgfVxuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICBtZW1vID0gaXRlcmF0b3IobWVtbywgeCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuXG4gICAgdmFyIF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgX2VhY2goYXJyLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgb25seV9vbmNlKGRvbmUpICk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2ggPSBhc3luYy5lYWNoO1xuXG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICB2YXIgaXRlcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGFycltjb21wbGV0ZWRdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID0gYXN5bmMuZWFjaFNlcmllcztcblxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZuID0gX2VhY2hMaW1pdChsaW1pdCk7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIFthcnIsIGl0ZXJhdG9yLCBjYWxsYmFja10pO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaExpbWl0ID0gYXN5bmMuZWFjaExpbWl0O1xuXG4gICAgdmFyIF9lYWNoTGltaXQgPSBmdW5jdGlvbiAobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgaWYgKCFhcnIubGVuZ3RoIHx8IGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVwbGVuaXNoICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiBzdGFydGVkIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoYXJyW3N0YXJ0ZWQgLSAxXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB2YXIgZG9QYXJhbGxlbCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvUGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKGxpbWl0LCBmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFtfZWFjaExpbWl0KGxpbWl0KV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBkb1NlcmllcyA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoU2VyaWVzXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBfYXN5bmNNYXAgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1t4LmluZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9tYXBMaW1pdChsaW1pdCkoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB2YXIgX21hcExpbWl0ID0gZnVuY3Rpb24obGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGRvUGFyYWxsZWxMaW1pdChsaW1pdCwgX2FzeW5jTWFwKTtcbiAgICB9O1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihtZW1vLCB4LCBmdW5jdGlvbiAoZXJyLCB2KSB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGluamVjdCBhbGlhc1xuICAgIGFzeW5jLmluamVjdCA9IGFzeW5jLnJlZHVjZTtcbiAgICAvLyBmb2xkbCBhbGlhc1xuICAgIGFzeW5jLmZvbGRsID0gYXN5bmMucmVkdWNlO1xuXG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSkucmV2ZXJzZSgpO1xuICAgICAgICBhc3luYy5yZWR1Y2UocmV2ZXJzZWQsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICAvLyBmb2xkciBhbGlhc1xuICAgIGFzeW5jLmZvbGRyID0gYXN5bmMucmVkdWNlUmlnaHQ7XG5cbiAgICB2YXIgX2ZpbHRlciA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LnZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG4gICAgYXN5bmMuZmlsdGVyU2VyaWVzID0gZG9TZXJpZXMoX2ZpbHRlcik7XG4gICAgLy8gc2VsZWN0IGFsaWFzXG4gICAgYXN5bmMuc2VsZWN0ID0gYXN5bmMuZmlsdGVyO1xuICAgIGFzeW5jLnNlbGVjdFNlcmllcyA9IGFzeW5jLmZpbHRlclNlcmllcztcblxuICAgIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLnJlamVjdCA9IGRvUGFyYWxsZWwoX3JlamVjdCk7XG4gICAgYXN5bmMucmVqZWN0U2VyaWVzID0gZG9TZXJpZXMoX3JlamVjdCk7XG5cbiAgICB2YXIgX2RldGVjdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIG1haW5fY2FsbGJhY2spIHtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKHgpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZGV0ZWN0ID0gZG9QYXJhbGxlbChfZGV0ZWN0KTtcbiAgICBhc3luYy5kZXRlY3RTZXJpZXMgPSBkb1NlcmllcyhfZGV0ZWN0KTtcblxuICAgIGFzeW5jLnNvbWUgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbnkgYWxpYXNcbiAgICBhc3luYy5hbnkgPSBhc3luYy5zb21lO1xuXG4gICAgYXN5bmMuZXZlcnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghdikge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gYWxsIGFsaWFzXG4gICAgYXN5bmMuYWxsID0gYXN5bmMuZXZlcnk7XG5cbiAgICBhc3luYy5zb3J0QnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgYXN5bmMubWFwKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAoZXJyLCBjcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHt2YWx1ZTogeCwgY3JpdGVyaWE6IGNyaXRlcmlhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoZm4pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGhcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldID09PSBmbikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdGFza0NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtYWluaW5nVGFza3MtLVxuICAgICAgICAgICAgX2VhY2gobGlzdGVuZXJzLnNsaWNlKDApLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIHZhciB0aGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZmluYWwgY2FsbGJhY2sgZnJvbSBjYWxsaW5nIGl0c2VsZiBpZiBpdCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdGhlQ2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9lYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKF9rZXlzKHJlc3VsdHMpLCBmdW5jdGlvbihya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIHN1YnNlcXVlbnQgZXJyb3JzIGhpdHRpbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUodGFza0NvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCBNYXRoLmFicyh0YXNrLmxlbmd0aCAtIDEpKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucmV0cnkgPSBmdW5jdGlvbih0aW1lcywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIERFRkFVTFRfVElNRVMgPSA1O1xuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcbiAgICAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHRpbWVzIG5vdCBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICAgICAgdGltZXMgPSBERUZBVUxUX1RJTUVTO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lcyBpcyBhIG51bWJlclxuICAgICAgICB0aW1lcyA9IHBhcnNlSW50KHRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgdmFyIHdyYXBwZWRUYXNrID0gZnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkUmVzdWx0cykge1xuICAgICAgICAgICAgdmFyIHJldHJ5QXR0ZW1wdCA9IGZ1bmN0aW9uKHRhc2ssIGZpbmFsQXR0ZW1wdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKGZ1bmN0aW9uKGVyciwgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKCFlcnIgfHwgZmluYWxBdHRlbXB0LCB7ZXJyOiBlcnIsIHJlc3VsdDogcmVzdWx0fSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXBwZWRSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcykge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KHRhc2ssICEodGltZXMtPTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBjYWxsYmFjaykoZGF0YS5lcnIsIGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrXG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJdGVyYXRvciA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGZ1bmN0aW9uKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGVhY2hmbi5tYXAodGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGVhY2hmbi5lYWNoKF9rZXlzKHRhc2tzKSwgZnVuY3Rpb24gKGssIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGFza3Nba10oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogYXN5bmMubWFwLCBlYWNoOiBhc3luYy5lYWNoIH0sIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogX21hcExpbWl0KGxpbWl0KSwgZWFjaDogX2VhY2hMaW1pdChsaW1pdCkgfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICBhc3luYy5tYXBTZXJpZXModGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5pdGVyYXRvciA9IGZ1bmN0aW9uICh0YXNrcykge1xuICAgICAgICB2YXIgbWFrZUNhbGxiYWNrID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmbi5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCB0YXNrcy5sZW5ndGggLSAxKSA/IG1ha2VDYWxsYmFjayhpbmRleCArIDEpOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KFxuICAgICAgICAgICAgICAgIG51bGwsIGFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgX2NvbmNhdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHIgPSByLmNvbmNhdCh5IHx8IFtdKTtcbiAgICAgICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRlc3QoKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLndoaWxzdCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvV2hpbHN0ID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAodGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMudW50aWwodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAoIXRlc3QuYXBwbHkobnVsbCwgYXJncykpIHtcbiAgICAgICAgICAgICAgICBhc3luYy5kb1VudGlsKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcG9zLCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxLnNhdHVyYXRlZCAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHEuZHJhaW4gPSBudWxsO1xuICAgICAgICAgICAgICBxLnRhc2tzID0gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gcS50YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocS5lbXB0eSAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLmRyYWluICYmIHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UobmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcih0YXNrLmRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSB0cnVlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSBxLmNvbmN1cnJlbmN5OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMucHJpb3JpdHlRdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG5cbiAgICAgICAgZnVuY3Rpb24gX2NvbXBhcmVUYXNrcyhhLCBiKXtcbiAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgIHZhciBiZWcgPSAtMSxcbiAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBzZXF1ZW5jZVttaWRdKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGJlZyA9IG1pZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiZWc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG5vcm1hbCBxdWV1ZVxuICAgICAgICB2YXIgcSA9IGFzeW5jLnF1ZXVlKHdvcmtlciwgY29uY3VycmVuY3kpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciB3b3JraW5nICAgICA9IGZhbHNlLFxuICAgICAgICAgICAgdGFza3MgICAgICAgPSBbXTtcblxuICAgICAgICB2YXIgY2FyZ28gPSB7XG4gICAgICAgICAgICB0YXNrczogdGFza3MsXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBudWxsLFxuICAgICAgICAgICAgZW1wdHk6IG51bGwsXG4gICAgICAgICAgICBkcmFpbjogbnVsbCxcbiAgICAgICAgICAgIGRyYWluZWQ6IHRydWUsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZ28uc2F0dXJhdGVkICYmIHRhc2tzLmxlbmd0aCA9PT0gcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ28uc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoY2FyZ28ucHJvY2Vzcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcygpIHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2luZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2FyZ28uZHJhaW4gJiYgIWNhcmdvLmRyYWluZWQpIGNhcmdvLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvLmRyYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRzID0gdHlwZW9mIHBheWxvYWQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0YXNrcy5zcGxpY2UoMCwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tzLnNwbGljZSgwLCB0YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRzID0gX21hcCh0cywgZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmKGNhcmdvLmVtcHR5KSBjYXJnby5lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHdvcmtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtlcihkcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JraW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKHRzLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjYXJnbztcbiAgICB9O1xuXG4gICAgdmFyIF9jb25zb2xlX2ZuID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZWFjaChhcmdzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbmFtZV0oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIG1lbW9ba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICBxW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfTtcblxuICAgIGFzeW5jLnVubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb3VudGVyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jLm1hcFNlcmllcyhjb3VudGVyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXEgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXN5bmMucmVkdWNlKGZucywgYXJncywgZnVuY3Rpb24gKG5ld2FyZ3MsIGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KFtmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1dKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy5jb21wb3NlID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICB2YXIgX2FwcGx5RWFjaCA9IGZ1bmN0aW9uIChlYWNoZm4sIGZucyAvKmFyZ3MuLi4qLykge1xuICAgICAgICB2YXIgZ28gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzLmNvbmNhdChbY2JdKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgICAgIHJldHVybiBnby5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuYXBwbHlFYWNoID0gZG9QYXJhbGxlbChfYXBwbHlFYWNoKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBkb1NlcmllcyhfYXBwbHlFYWNoKTtcblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbihuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsInZhciBhc3luYyAgICAgICA9IHJlcXVpcmUoJ2FzeW5jJyksXG4gICAgdXJsUGFyc2VyICAgPSByZXF1aXJlKCd1cmwnKSxcbiAgICBSZXNvdXJjZSAgICA9IHJlcXVpcmUoJy4vUmVzb3VyY2UnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgbXVsdGlwbGUgcmVzb3VyY2VzIHRvIGxvYWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KSB7XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICBjb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByb2dyZXNzIHBlcmNlbnQgb2YgdGhlIGxvYWRlciBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRpbmcgc3RhdGUgb2YgdGhlIGxvYWRlciwgdHJ1ZSBpZiBpdCBpcyBjdXJyZW50bHkgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdG90YWwgcHJvZ3Jlc3MgdGhhdCBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGJlZm9yZSBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaWRkbGV3YXJlIHRvIHJ1biBhZnRlciBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfbG9hZFJlc291cmNlYCBmdW5jdGlvbiBib3VuZCB3aXRoIHRoaXMgb2JqZWN0IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kTG9hZFJlc291cmNlID0gdGhpcy5fbG9hZFJlc291cmNlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkxvYWRgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkxvYWQgPSB0aGlzLl9vbkxvYWQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvdXJjZSBidWZmZXIgdGhhdCBmaWxscyB1bnRpbCBgbG9hZGAgaXMgY2FsbGVkIHRvIHN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB0cmFjayBsb2FkIGNvbXBsZXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9udW1Ub0xvYWQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlcyB3YWl0aW5nIHRvIGJlIGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2VbXX1cbiAgICAgKi9cbiAgICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX2JvdW5kTG9hZFJlc291cmNlLCBjb25jdXJyZW5jeSk7XG5cbiAgICAvKipcbiAgICAgKiBBbGwgdGhlIHJlc291cmNlcyBmb3IgdGhpcyBsb2FkZXIga2V5ZWQgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIFJlc291cmNlPn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgb3IgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwcm9ncmVzc1xuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGVycm9yZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGxvYWRlciBiZWdpbnMgdG8gcHJvY2VzcyB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBxdWV1ZWQgcmVzb3VyY2VzIGFsbCBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbi8qKlxuICogQWRkcyBhIHJlc291cmNlIChvciBtdWx0aXBsZSByZXNvdXJjZXMpIHRvIHRoZSBsb2FkZXIgcXVldWUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gdGFrZSBhIHdpZGUgdmFyaWV0eSBvZiBkaWZmZXJlbnQgcGFyYW1ldGVycy4gVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBhbHdheXNcbiAqIHJlcXVpcmVkIHRoZSB1cmwgdG8gbG9hZC4gQWxsIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOlxuICpcbiAqIGBgYGpzXG4gKiBsb2FkZXJcbiAqICAgICAvLyBub3JtYWwgcGFyYW0gc3ludGF4XG4gKiAgICAgLmFkZCgna2V5JywgJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJywgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCgnaHR0cDovLy4uLicpXG4gKlxuICogICAgIC8vIG9iamVjdCBzeW50YXhcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgbmFtZTogJ2tleTInLFxuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MycsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9XG4gKiAgICAgfSlcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgdXJsOiAnaHR0cHM6Ly8uLi4nLFxuICogICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7fSxcbiAqICAgICAgICAgY3Jvc3NPcmlnaW46IHRydWVcbiAqICAgICB9KVxuICpcbiAqICAgICAvLyB5b3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBvYmplY3RzIG9yIHVybHMgb3IgYm90aFxuICogICAgIC5hZGQoW1xuICogICAgICAgICB7IG5hbWU6ICdrZXk0JywgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgIHsgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgICdodHRwOi8vLi4uJ1xuICogICAgIF0pO1xuICogYGBgXG4gKlxuICogQGFsaWFzIGVucXVldWVcbiAqIEBwYXJhbSBbbmFtZV0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQsIGlmIG5vdCBwYXNzZWQgdGhlIHVybCBpcyB1c2VkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCByZWxhdGl2ZSB0byB0aGUgYmFzZVVybCBvZiB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7Ym9vbGVhbn0gSXMgdGhpcyByZXF1ZXN0IGNyb3NzLW9yaWdpbj8gRGVmYXVsdCBpcyB0byBkZXRlcm1pbmUgYXV0b21hdGljYWxseS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5sb2FkVHlwZT1SZXNvdXJjZS5MT0FEX1RZUEUuWEhSXSB7UmVzb3VyY2UuWEhSX0xPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGlzIHNwZWNpZmljIHJlc291cmNlIGNvbXBsZXRlcyBsb2FkaW5nLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFkZCA9IExvYWRlci5wcm90b3R5cGUuZW5xdWV1ZSA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIGNiKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIG9mIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hZGQobmFtZVtpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBpZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluc3RlYWQgb2YgcGFyYW1zXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYiA9IHVybCB8fCBuYW1lLmNhbGxiYWNrIHx8IG5hbWUub25Db21wbGV0ZTtcbiAgICAgICAgb3B0aW9ucyA9IG5hbWU7XG4gICAgICAgIHVybCA9IG5hbWUudXJsO1xuICAgICAgICBuYW1lID0gbmFtZS5uYW1lIHx8IG5hbWUua2V5IHx8IG5hbWUudXJsO1xuICAgIH1cblxuICAgIC8vIGNhc2Ugd2hlcmUgbm8gbmFtZSBpcyBwYXNzZWQgc2hpZnQgYWxsIGFyZ3Mgb3ZlciBieSBvbmUuXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHVybDtcbiAgICAgICAgdXJsID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBzaGlmdGVkIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIHVybC5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB1cmwgcGFzc2VkIHRvIGFkZCByZXNvdXJjZSB0byBsb2FkZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gb3B0aW9ucyBhcmUgb3B0aW9uYWwgc28gcGVvcGxlIG1pZ2h0IHBhc3MgYSBmdW5jdGlvbiBhbmQgbm8gb3B0aW9uc1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHJlc291cmNlIGFscmVhZHkgZXhpc3RzLlxuICAgIGlmICh0aGlzLnJlc291cmNlc1tuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc291cmNlIHdpdGggbmFtZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgIH1cblxuICAgIC8vIGFkZCBiYXNlIHVybCBpZiB0aGlzIGlzbid0IGFuIGFic29sdXRlIHVybFxuICAgIHVybCA9IHRoaXMuX2hhbmRsZUJhc2VVcmwodXJsKTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgc3RvcmUgdGhlIHJlc291cmNlXG4gICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0gPSBuZXcgUmVzb3VyY2UobmFtZSwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0ub25jZSgnYWZ0ZXJNaWRkbGV3YXJlJywgY2IpO1xuICAgIH1cblxuICAgIHRoaXMuX251bVRvTG9hZCsrO1xuXG4gICAgLy8gaWYgYWxyZWFkeSBsb2FkaW5nIGFkZCBpdCB0byB0aGUgd29ya2VyIHF1ZXVlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAoMTAwIC0gdGhpcy5wcm9ncmVzcykgLyAodGhpcy5fcXVldWUubGVuZ3RoKCkgKyB0aGlzLl9xdWV1ZS5ydW5uaW5nKCkpO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgYnVmZmVyIGl0IHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSBsYXRlclxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9idWZmZXIucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAxMDAgLyB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuTG9hZGVyLnByb3RvdHlwZS5faGFuZGxlQmFzZVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFyc2VkVXJsID0gdXJsUGFyc2VyLnBhcnNlKHVybCk7XG5cbiAgICAvLyBhYnNvbHV0ZSB1cmwsIGp1c3QgdXNlIGl0IGFzIGlzLlxuICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgfHwgcGFyc2VkVXJsLnBhdGhuYW1lLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBpZiBiYXNlVXJsIGRvZXNuJ3QgZW5kIGluIHNsYXNoIGFuZCB1cmwgZG9lc24ndCBzdGFydCB3aXRoIHNsYXNoLCB0aGVuIGFkZCBhIHNsYXNoIGluYmV0d2VlblxuICAgIGlmIChcbiAgICAgICAgdGhpcy5iYXNlVXJsLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmJhc2VVcmwubGFzdEluZGV4T2YoJy8nKSAhPT0gdGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgdXJsLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyAnLycgKyB1cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsICsgdXJsO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBTZXRzIHVwIGEgbWlkZGxld2FyZSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuICpiZWZvcmUqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyBwcmVcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYmVmb3JlID0gTG9hZGVyLnByb3RvdHlwZS5wcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLnB1c2goZm4pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmFmdGVyKiB0aGVcbiAqIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqXG4gKiBAYWxpYXMgdXNlXG4gKiBAcGFyYW0gbWlkZGxld2FyZSB7ZnVuY3Rpb259IFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFmdGVyID0gTG9hZGVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9hZnRlck1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoZSBxdWV1ZSBvZiB0aGUgbG9hZGVyIHRvIHByZXBhcmUgZm9yIGEgbmV3IGxvYWQuXG4gKlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvLyB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG4gICAgLy8gdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gICAgdGhpcy5fcXVldWUuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGxvYWRpbmcgdGhlIHF1ZXVlZCByZXNvdXJjZXMuXG4gKlxuICogQGZpcmVzIHN0YXJ0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgYGNvbXBsZXRlYCBldmVudC5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgLy8gcmVnaXN0ZXIgY29tcGxldGUgY2FsbGJhY2sgaWYgdGhleSBwYXNzIG9uZVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcXVldWUgaGFzIGFscmVhZHkgc3RhcnRlZCB3ZSBhcmUgZG9uZSBoZXJlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm90aWZ5IG9mIHN0YXJ0XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gc3RhcnQgdGhlIGludGVybmFsIHF1ZXVlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLl9idWZmZXJbaV0pO1xuICAgIH1cblxuICAgIC8vIGVtcHR5IHRoZSBidWZmZXJcbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBMb2FkcyBhIHNpbmdsZSByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX2xvYWRSZXNvdXJjZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZGVxdWV1ZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHJlc291cmNlLl9kZXF1ZXVlID0gZGVxdWV1ZTtcblxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gcmVzb3VyY2Uub24oJ3Byb2dyZXNzJywgc2VsZi5lbWl0LmJpbmQoc2VsZiwgJ3Byb2dyZXNzJykpO1xuXG4gICAgICAgIHJlc291cmNlLmxvYWQoc2VsZi5fYm91bmRPbkxvYWQpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgb25jZSBlYWNoIHJlc291cmNlIGhhcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzLCB0aGlzLnJlc291cmNlcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBlYWNoIHRpbWUgYSByZXNvdXJjZXMgaXMgbG9hZGVkLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQGZpcmVzIGVycm9yXG4gKiBAZmlyZXMgbG9hZFxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgdGhpcy5wcm9ncmVzcyArPSB0aGlzLl9wcm9ncmVzc0NodW5rO1xuXG4gICAgdGhpcy5lbWl0KCdwcm9ncmVzcycsIHRoaXMsIHJlc291cmNlKTtcblxuICAgIC8vIHJ1biBtaWRkbGV3YXJlLCB0aGlzICptdXN0KiBoYXBwZW4gYmVmb3JlIGRlcXVldWUgc28gc3ViLWFzc2V0cyBnZXQgYWRkZWQgcHJvcGVybHlcbiAgICB0aGlzLl9ydW5NaWRkbGV3YXJlKHJlc291cmNlLCB0aGlzLl9hZnRlck1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzb3VyY2UuZW1pdCgnYWZ0ZXJNaWRkbGV3YXJlJywgcmVzb3VyY2UpO1xuXG4gICAgICAgIHRoaXMuX251bVRvTG9hZC0tO1xuXG4gICAgICAgIC8vIGRvIGNvbXBsZXRpb24gY2hlY2tcbiAgICAgICAgaWYgKHRoaXMuX251bVRvTG9hZCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgIHRoaXMuX29uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc291cmNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgcmVzb3VyY2UuZXJyb3IsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZCcsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuXG5cbiAgICAvLyByZW1vdmUgdGhpcyByZXNvdXJjZSBmcm9tIHRoZSBhc3luYyBxdWV1ZVxuICAgIHJlc291cmNlLl9kZXF1ZXVlKCk7XG59O1xuXG4vKipcbiAqIFJ1biBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvbiBhIHJlc291cmNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX3J1bk1pZGRsZXdhcmUgPSBmdW5jdGlvbiAocmVzb3VyY2UsIGZucywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzKGZucywgZnVuY3Rpb24gKGZuLCBuZXh0KSB7XG4gICAgICAgIGZuLmNhbGwoc2VsZiwgcmVzb3VyY2UsIG5leHQpO1xuICAgIH0sIGNiLmJpbmQodGhpcywgcmVzb3VyY2UpKTtcbn07XG5cbkxvYWRlci5MT0FEX1RZUEUgPSBSZXNvdXJjZS5MT0FEX1RZUEU7XG5Mb2FkZXIuWEhSX1JFQURZX1NUQVRFID0gUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFO1xuTG9hZGVyLlhIUl9SRVNQT05TRV9UWVBFID0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEU7XG4iLCJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIF91cmwgPSByZXF1aXJlKCd1cmwnKSxcbiAgICAvLyB0ZXN0cyBpcyBDT1JTIGlzIHN1cHBvcnRlZCBpbiBYSFIsIGlmIG5vdCB3ZSBuZWVkIHRvIHVzZSBYRFJcbiAgICB1c2VYZHIgPSAhISh3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiAobmV3IFhNTEh0dHBSZXF1ZXN0KCkpKSksXG4gICAgdGVtcEFuY2hvciA9IG51bGw7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgYSBzaW5nbGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnlcbiAqIGEgc2luZ2xlIFVSTC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBuYW1lIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCBmb3IgYXVkaW8vdmlkZW8gbG9hZHMgeW91IGNhbiBwYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMuXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5jcm9zc09yaWdpbl0ge3N0cmluZ3xib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5MT0FEX1RZUEV9IEhvdyBzaG91bGQgdGhpcyByZXNvdXJjZSBiZSBsb2FkZWQ/XG4gKiBAcGFyYW0gW29wdGlvbnMueGhyVHlwZT1SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ERUZBVUxUXSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IEhvdyBzaG91bGQgdGhlIGRhdGEgYmVpbmdcbiAqICAgICAgbG9hZGVkIGJlIGludGVycHJldGVkIHdoZW4gdXNpbmcgWEhSP1xuICogQHBhcmFtIFtvcHRpb25zLm1ldGFkYXRhXSB7b2JqZWN0fSBFeHRyYSBpbmZvIGZvciBtaWRkbGV3YXJlLlxuICovXG5mdW5jdGlvbiBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggbmFtZSBhbmQgdXJsIGFyZSByZXF1aXJlZCBmb3IgY29uc3RydWN0aW5nIGEgcmVzb3VyY2UuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVybCB1c2VkIHRvIGxvYWQgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHVybCBpcyBhIGRhdGEgdXJsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzRGF0YVVybCA9IHRoaXMudXJsLmluZGV4T2YoJ2RhdGE6JykgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSB0aGF0IHdhcyBsb2FkZWQgYnkgdGhlIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55fVxuICAgICAqL1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBvcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJ2Fub255bW91cycgOiBvcHRpb25zLmNyb3NzT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCBvZiBsb2FkaW5nIHRvIHVzZSBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlLkxPQURfVFlQRX1cbiAgICAgKi9cbiAgICB0aGlzLmxvYWRUeXBlID0gb3B0aW9ucy5sb2FkVHlwZSB8fCB0aGlzLl9kZXRlcm1pbmVMb2FkVHlwZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgdXNlZCB0byBsb2FkIHRoZSByZXNvdXJjZSB2aWEgWEhSLiBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMueGhyVHlwZSA9IG9wdGlvbnMueGhyVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgKGlmIGFueSkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFcnJvcn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBYSFIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLiBUaGlzIGlzIG9ubHkgc2V0XG4gICAgICogd2hlbiBgbG9hZFR5cGVgIGlzIGBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1hNTEh0dHBSZXF1ZXN0fVxuICAgICAqL1xuICAgIHRoaXMueGhyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMganNvbi4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNKc29uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIHhtbC4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNYbWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gaW1hZ2UgdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0ltYWdlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGFuIGF1ZGlvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNBdWRpbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhIHZpZGVvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNWaWRlbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBkZXF1ZXVlYCBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgYSBzdG9yYWdlIHBsYWNlIGZvciB0aGUgYXN5bmMgcXVldWUgZGVxdWV1ZSBtZXRob2RcbiAgICAgKiB1c2VkIHByaXZhdGVseSBieSB0aGUgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kZXF1ZXVlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tcGxldGVgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZENvbXBsZXRlID0gdGhpcy5jb21wbGV0ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25FcnJvcmAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25FcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uUHJvZ3Jlc3NgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MgPSB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyk7XG5cbiAgICAvLyB4aHIgY2FsbGJhY2tzXG4gICAgdGhpcy5fYm91bmRYaHJPbkVycm9yID0gdGhpcy5feGhyT25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25BYm9ydCA9IHRoaXMuX3hock9uQWJvcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9ib3VuZFhock9uTG9hZCA9IHRoaXMuX3hock9uTG9hZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0ID0gdGhpcy5feGRyT25UaW1lb3V0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJlc291cmNlIGJlaW5ncyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBlYWNoIHRpbWUgcHJvZ3Jlc3Mgb2YgdGhpcyByZXNvdXJjZSBsb2FkIHVwZGF0ZXMuXG4gICAgICogTm90IGFsbCByZXNvdXJjZXMgdHlwZXMgYW5kIGxvYWRlciBzeXN0ZW1zIGNhbiBzdXBwb3J0IHRoaXMgZXZlbnRcbiAgICAgKiBzbyBzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIElmIHRoZSByZXNvdXJjZVxuICAgICAqIGlzIGJlaW5nIGxvYWRlZCBvbiBhIG1vZGVybiBicm93c2VyLCB1c2luZyBYSFIsIGFuZCB0aGUgcmVtb3RlIHNlcnZlclxuICAgICAqIHByb3Blcmx5IHNldHMgQ29udGVudC1MZW5ndGggaGVhZGVycywgdGhlbiB0aGlzIHdpbGwgYmUgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHRoaXMgcmVzb3VyY2UgaGFzIGxvYWRlZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGl0IHdpbGxcbiAgICAgKiBiZSBpbiB0aGUgYGVycm9yYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb21wbGV0ZVxuICAgICAqIEBtZW1iZXJvZiBSZXNvdXJjZSNcbiAgICAgKi9cbn1cblxuUmVzb3VyY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblJlc291cmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlc291cmNlO1xubW9kdWxlLmV4cG9ydHMgPSBSZXNvdXJjZTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgcmVzb3VyY2UgYXMgY29tcGxldGUuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIGluIGEgd3JhcHBlciBvciBzb21ldGhpbmcuLi5ncm9zcy4uLi5cbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvcik7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgICBpZiAodGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGhyLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub250aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMueGhyLm9ucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25sb2FkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogS2lja3Mgb2ZmIGxvYWRpbmcgb2YgdGhpcyByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gaWYgYSBjYWxsYmFjayBpcyBzZXQsIGxpc3RlbiBmb3IgY29tcGxldGUgZXZlbnRcbiAgICBpZiAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luID09PSBmYWxzZSB8fCB0eXBlb2YgdGhpcy5jcm9zc09yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHRoaXMuX2RldGVybWluZUNyb3NzT3JpZ2luKHRoaXMudXJsKTtcbiAgICB9XG5cbiAgICBzd2l0Y2godGhpcy5sb2FkVHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRTpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRJbWFnZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuQVVESU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlZJREVPOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5YSFI6XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodXNlWGRyICYmIHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGRyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGhyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEltYWdlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLnNyYyA9IHRoaXMudXJsO1xuXG4gICAgdGhpcy5pc0ltYWdlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBIVE1MQXVkaW9FbGVtZW50IG9yIEhUTUxWaWRlb0VsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdhdWRpbycgJiYgdHlwZW9mIEF1ZGlvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQXVkaW8oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBlbGVtZW50ICcgKyB0eXBlKTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBmb3IgQ29jb29uSlMgQ2FudmFzKyBydW50aW1lLCBsYWNrcyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKVxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUykge1xuICAgICAgICB0aGlzLmRhdGEuc3JjID0gQXJyYXkuaXNBcnJheSh0aGlzLnVybCkgPyB0aGlzLnVybFswXSA6IHRoaXMudXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51cmwpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXJsLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybFtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1snaXMnICsgdHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSldID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUsIGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YS5sb2FkKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhNTEh0dHBSZXF1ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBzZXQgdGhlIHJlcXVlc3QgdHlwZSBhbmQgdXJsXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsLCB0cnVlKTtcblxuICAgIC8vIGxvYWQganNvbiBhcyB0ZXh0IGFuZCBwYXJzZSBpdCBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgLy8gKmNvdWdoKiBzYWZhcmkgKmNvdWdoKiBjYW4ndCBkZWFsIHdpdGggaXQuXG4gICAgaWYgKHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTiB8fCB0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHRoaXMueGhyVHlwZTtcbiAgICB9XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkLCBmYWxzZSk7XG5cbiAgICB4aHIuc2VuZCgpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBYRG9tYWluUmVxdWVzdC4gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdXBwb3J0IElFOSAoZ3Jvc3MpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhkciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhkciA9IHRoaXMueGhyID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7XG5cbiAgICAvLyBYRG9tYWluUmVxdWVzdCBoYXMgYSBmZXcgcXVpcmtzLiBPY2Nhc2lvbmFsbHkgaXQgd2lsbCBhYm9ydCByZXF1ZXN0c1xuICAgIC8vIEEgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbWFrZSBzdXJlIEFMTCBjYWxsYmFja3MgYXJlIHNldCBldmVuIGlmIG5vdCB1c2VkXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU3ODY5NjYveGRvbWFpbnJlcXVlc3QtYWJvcnRzLXBvc3Qtb24taWUtOVxuICAgIHhkci50aW1lb3V0ID0gNTAwMDtcblxuICAgIHhkci5vbmVycm9yID0gdGhpcy5fYm91bmRYaHJPbkVycm9yO1xuICAgIHhkci5vbnRpbWVvdXQgPSB0aGlzLl9ib3VuZFhkck9uVGltZW91dDtcbiAgICB4ZHIub25wcm9ncmVzcyA9IHRoaXMuX2JvdW5kT25Qcm9ncmVzcztcbiAgICB4ZHIub25sb2FkID0gdGhpcy5fYm91bmRYaHJPbkxvYWQ7XG5cbiAgICB4ZHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gIE5vdGU6IFRoZSB4ZHIuc2VuZCgpIGNhbGwgaXMgd3JhcHBlZCBpbiBhIHRpbWVvdXQgdG8gcHJldmVudCBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmZhY2Ugd2hlcmUgc29tZSByZXF1ZXN0cyBhcmUgbG9zdFxuICAgIC8vICBpZiBtdWx0aXBsZSBYRG9tYWluUmVxdWVzdHMgYXJlIGJlaW5nIHNlbnQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAvLyBTb21lIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9pc3N1ZXMvMTI0OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB4ZHIuc2VuZCgpO1xuICAgIH0sIDApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc291cmNlIHVzZWQgaW4gbG9hZGluZyB2aWEgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSBUaGUgZWxlbWVudCB0eXBlICh2aWRlbyBvciBhdWRpbykuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSBzb3VyY2UgVVJMIHRvIGxvYWQgZnJvbS5cbiAqIEBwYXJhbSBbbWltZV0ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSBvZiB0aGUgdmlkZW9cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fY3JlYXRlU291cmNlID0gZnVuY3Rpb24gKHR5cGUsIHVybCwgbWltZSkge1xuICAgIGlmICghbWltZSkge1xuICAgICAgICBtaW1lID0gdHlwZSArICcvJyArIHVybC5zdWJzdHIodXJsLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gdXJsO1xuICAgIHNvdXJjZS50eXBlID0gbWltZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgZXJyb3JzIG91dC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgZXJyb3IgZXZlbnQgZnJvbSB0aGUgZWxlbWVudCB0aGF0IGVtaXRzIGl0LlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgZWxlbWVudCB1c2luZyAnICsgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgcHJvZ3Jlc3MgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fb25Qcm9ncmVzcyA9ICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGVycm9yIGV2ZW50IGZpcmVzIGZvciB4aHIveGRyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RFcnJvckV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIHJlcVR5cGUodGhpcy54aHIpICsgJyBSZXF1ZXN0IGZhaWxlZC4gJyArXG4gICAgICAgICdTdGF0dXM6ICcgKyB0aGlzLnhoci5zdGF0dXMgKyAnLCB0ZXh0OiBcIicgKyB0aGlzLnhoci5zdGF0dXNUZXh0ICsgJ1wiJ1xuICAgICk7XG5cbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhbiBhYm9ydCBldmVudCBmaXJlcyBmb3IgeGhyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RBYm9ydEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3Qgd2FzIGFib3J0ZWQgYnkgdGhlIHVzZXIuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYSB0aW1lb3V0IGV2ZW50IGZpcmVzIGZvciB4ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGRyT25UaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgdGltZWQgb3V0LicpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gZGF0YSBzdWNjZXNzZnVsbHkgbG9hZHMgZnJvbSBhbiB4aHIveGRyIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdExvYWRFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGhyT25Mb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB4aHIgPSB0aGlzLnhocixcbiAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1cyAhPT0gdW5kZWZpbmVkID8geGhyLnN0YXR1cyA6IDIwMDsgLy9YRFIgaGFzIG5vIGAuc3RhdHVzYCwgYXNzdW1lIDIwMC5cblxuICAgIC8vIHN0YXR1cyBjYW4gYmUgMCB3aGVuIHVzaW5nIHRoZSBmaWxlOi8vIHByb3RvY29sLCBhbHNvIGNoZWNrIGlmIGEgcmVzcG9uc2Ugd2FzIGZvdW5kXG4gICAgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA0IHx8IChzdGF0dXMgPT09IDAgJiYgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkge1xuICAgICAgICAvLyBpZiB0ZXh0LCBqdXN0IHJldHVybiBpdFxuICAgICAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGpzb24sIHBhcnNlIGludG8ganNvbiBvYmplY3RcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0pzb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGxvYWRlZCBqc29uOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHhtbCwgcGFyc2UgaW50byBhbiB4bWwgZG9jdW1lbnQgb3IgZGl2IGVsZW1lbnRcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LkRPTVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhoci5yZXNwb25zZVRleHQsICd0ZXh0L3htbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZGl2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzWG1sID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIHhtbDonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlciB0eXBlcyBqdXN0IHJldHVybiB0aGUgcmVzcG9uc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2UgfHwgeGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignWycgKyB4aHIuc3RhdHVzICsgJ10nICsgeGhyLnN0YXR1c1RleHQgKyAnOicgKyB4aHIucmVzcG9uc2VVUkwpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbmZ1bmN0aW9uIHJlcVR5cGUoeGhyKSB7XG4gICAgcmV0dXJuIHhoci50b1N0cmluZygpLnJlcGxhY2UoJ29iamVjdCAnLCAnJyk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYGNyb3NzT3JpZ2luYCBwcm9wZXJ0eSBmb3IgdGhpcyByZXNvdXJjZSBiYXNlZCBvbiBpZiB0aGUgdXJsXG4gKiBmb3IgdGhpcyByZXNvdXJjZSBpcyBjcm9zcy1vcmlnaW4uIElmIGNyb3NzT3JpZ2luIHdhcyBtYW51YWxseSBzZXQsIHRoaXNcbiAqIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIHRvIHRlc3QuXG4gKiBAcGFyYW0gW2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbl0ge29iamVjdH0gVGhlIGxvY2F0aW9uIG9iamVjdCB0byB0ZXN0IGFnYWluc3QuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjcm9zc09yaWdpbiB2YWx1ZSB0byB1c2UgKG9yIGVtcHR5IHN0cmluZyBmb3Igbm9uZSkuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbiAodXJsLCBsb2MpIHtcbiAgICAvLyBkYXRhOiBhbmQgamF2YXNjcmlwdDogdXJscyBhcmUgY29uc2lkZXJlZCBzYW1lLW9yaWdpblxuICAgIGlmICh1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBpcyB3aW5kb3cubG9jYXRpb25cbiAgICBsb2MgPSBsb2MgfHwgd2luZG93LmxvY2F0aW9uO1xuXG4gICAgaWYgKCF0ZW1wQW5jaG9yKSB7XG4gICAgICAgIHRlbXBBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgfVxuXG4gICAgLy8gbGV0IHRoZSBicm93c2VyIGRldGVybWluZSB0aGUgZnVsbCBocmVmIGZvciB0aGUgdXJsIG9mIHRoaXMgcmVzb3VyY2UgYW5kIHRoZW5cbiAgICAvLyBwYXJzZSB3aXRoIHRoZSBub2RlIHVybCBsaWIsIHdlIGNhbid0IHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgICAvLyBiZWNhdXNlIHRoZXkgZG9uJ3Qgd29yayBpbiBJRTkgOihcbiAgICB0ZW1wQW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgdXJsID0gX3VybC5wYXJzZSh0ZW1wQW5jaG9yLmhyZWYpO1xuXG4gICAgdmFyIHNhbWVQb3J0ID0gKCF1cmwucG9ydCAmJiBsb2MucG9ydCA9PT0gJycpIHx8ICh1cmwucG9ydCA9PT0gbG9jLnBvcnQpO1xuXG4gICAgLy8gaWYgY3Jvc3Mgb3JpZ2luXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gbG9jLmhvc3RuYW1lIHx8ICFzYW1lUG9ydCB8fCB1cmwucHJvdG9jb2wgIT09IGxvYy5wcm90b2NvbCkge1xuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZXNwb25zZVR5cGUgb2YgYW4gWEhSIHJlcXVlc3QgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGVcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSByZXNwb25zZVR5cGUgdG8gdXNlLlxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZVhoclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlc291cmNlLl94aHJUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVMb2FkVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX2xvYWRUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXMudXJsLFxuICAgICAgICBleHQ7XG5cbiAgICBpZiAodGhpcy5pc0RhdGFVcmwpIHtcbiAgICAgICAgdmFyIHNsYXNoSW5kZXggPSB1cmwuaW5kZXhPZignLycpO1xuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHNsYXNoSW5kZXggKyAxLCB1cmwuaW5kZXhPZignOycsIHNsYXNoSW5kZXgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBxdWVyeVN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXh0ID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQ7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG1pbWUgdHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgcmVzcG9uc2VUeXBlIG9mXG4gKiByZXNvdXJjZSBiZWluZyBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZ2V0TWltZUZyb21YaHJUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5JztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0I6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2Jsb2InO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQ6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCc7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQ6XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVDpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG5cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsb2FkaW5nIGEgcmVzb3VyY2UgY2FuIHVzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBMT0FEX1RZUEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuWEhSIC0gVXNlcyBYTUxIdHRwUmVxdWVzdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuSU1BR0UgLSBVc2VzIGFuIGBJbWFnZWAgb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5BVURJTyAtIFVzZXMgYW4gYEF1ZGlvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLlZJREVPIC0gVXNlcyBhIGBWaWRlb2Agb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICovXG5SZXNvdXJjZS5MT0FEX1RZUEUgPSB7XG4gICAgWEhSOiAgICAxLFxuICAgIElNQUdFOiAgMixcbiAgICBBVURJTzogIDMsXG4gICAgVklERU86ICA0XG59O1xuXG4vKipcbiAqIFRoZSBYSFIgcmVhZHkgc3RhdGVzLCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gWEhSX1JFQURZX1NUQVRFXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLlVOU0VOVCAtIG9wZW4oKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5PUEVORUQgLSBzZW5kKCloYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuSEVBREVSU19SRUNFSVZFRCAtIHNlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuTE9BRElORyAtIERvd25sb2FkaW5nOyByZXNwb25zZVRleHQgaG9sZHMgcGFydGlhbCBkYXRhLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5ET05FIC0gVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFID0ge1xuICAgIFVOU0VOVDogMCxcbiAgICBPUEVORUQ6IDEsXG4gICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICBMT0FESU5HOiAzLFxuICAgIERPTkU6IDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVTUE9OU0VfVFlQRVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQgLSBkZWZhdWx0cyB0byB0ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSIC0gQXJyYXlCdWZmZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CTE9CIC0gQmxvYlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UIC0gRG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5KU09OIC0gT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCAtIFN0cmluZ1xuICovXG5SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRSA9IHtcbiAgICBERUZBVUxUOiAgICAndGV4dCcsXG4gICAgQlVGRkVSOiAgICAgJ2FycmF5YnVmZmVyJyxcbiAgICBCTE9COiAgICAgICAnYmxvYicsXG4gICAgRE9DVU1FTlQ6ICAgJ2RvY3VtZW50JyxcbiAgICBKU09OOiAgICAgICAnanNvbicsXG4gICAgVEVYVDogICAgICAgJ3RleHQnXG59O1xuXG5SZXNvdXJjZS5fbG9hZFR5cGVNYXAgPSB7XG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnYm1wJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGdhJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0Vcbn07XG5cblJlc291cmNlLl94aHJUeXBlTWFwID0ge1xuICAgIC8vIHhtbFxuICAgICd4aHRtbCc6ICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG1sJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG0nOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd4bWwnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0bXgnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0c3gnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdzdmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuXG4gICAgLy8gaW1hZ2VzXG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAncG5nJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBlZyc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnd2VicCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG5cbiAgICAvLyBqc29uXG4gICAgJ2pzb24nOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTixcblxuICAgIC8vIHRleHRcbiAgICAndGV4dCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhULFxuICAgICd0eHQnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFRcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSBsb2FkVHlwZSB7UmVzb3VyY2UuTE9BRF9UWVBFfSBUaGUgbG9hZCB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uTG9hZFR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgbG9hZFR5cGUpIHtcbiAgICBzZXRFeHRNYXAoUmVzb3VyY2UuX2xvYWRUeXBlTWFwLCBleHRuYW1lLCBsb2FkVHlwZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGxvYWQgdHlwZSB0byBiZSB1c2VkIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZXh0bmFtZSB7c3RyaW5nfSBUaGUgZXh0ZW5zaW9uIHRvIHNldCB0aGUgdHlwZSBmb3IsIGUuZy4gXCJwbmdcIiBvciBcImZudFwiXG4gKiBAcGFyYW0geGhyVHlwZSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSB4aHIgdHlwZSB0byBzZXQgaXQgdG8uXG4gKi9cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgeGhyVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5feGhyVHlwZU1hcCwgZXh0bmFtZSwgeGhyVHlwZSk7XG59O1xuXG5mdW5jdGlvbiBzZXRFeHRNYXAobWFwLCBleHRuYW1lLCB2YWwpIHtcbiAgICBpZiAoZXh0bmFtZSAmJiBleHRuYW1lLmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICBleHRuYW1lID0gZXh0bmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRuYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYXBbZXh0bmFtZV0gPSB2YWw7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIHByaXZhdGUgcHJvcGVydHlcbiAgICBfa2V5U3RyOiBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIsXG5cbiAgICBlbmNvZGVCaW5hcnk6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICAgICAgdmFyIGJ5dGVidWZmZXI7XG4gICAgICAgIHZhciBlbmNvZGVkQ2hhckluZGV4ZXMgPSBuZXcgQXJyYXkoNCk7XG4gICAgICAgIHZhciBpbnggPSAwO1xuICAgICAgICB2YXIgam54ID0gMDtcbiAgICAgICAgdmFyIHBhZGRpbmdCeXRlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmlsbCBieXRlIGJ1ZmZlciBhcnJheVxuICAgICAgICAgICAgYnl0ZWJ1ZmZlciA9IG5ldyBBcnJheSgzKTtcbiAgICAgICAgICAgIGZvciAoam54ID0gMDsgam54IDwgYnl0ZWJ1ZmZlci5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhd2F5IGhpZ2gtb3JkZXIgYnl0ZSwgYXMgZG9jdW1lbnRlZCBhdDpcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1MSHR0cFJlcXVlc3QjSGFuZGxpbmdfYmluYXJ5X2RhdGFcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gaW5wdXQuY2hhckNvZGVBdChpbngrKykgJiAweGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCBlYWNoIGVuY29kZWQgY2hhcmFjdGVyLCA2IGJpdHMgYXQgYSB0aW1lXG4gICAgICAgICAgICAvLyBpbmRleCAxOiBmaXJzdCA2IGJpdHNcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1swXSA9IGJ5dGVidWZmZXJbMF0gPj4gMjtcbiAgICAgICAgICAgIC8vIGluZGV4IDI6IHNlY29uZCA2IGJpdHMgKDIgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMSArIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAyKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzFdID0gKChieXRlYnVmZmVyWzBdICYgMHgzKSA8PCA0KSB8IChieXRlYnVmZmVyWzFdID4+IDQpO1xuICAgICAgICAgICAgLy8gaW5kZXggMzogdGhpcmQgNiBiaXRzICg0IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBpbnB1dCBieXRlIDIgKyAyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1syXSA9ICgoYnl0ZWJ1ZmZlclsxXSAmIDB4MGYpIDw8IDIpIHwgKGJ5dGVidWZmZXJbMl0gPj4gNik7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiBmb3J0aCA2IGJpdHMgKDYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IGJ5dGVidWZmZXJbMl0gJiAweDNmO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBwYWRkaW5nIGhhcHBlbmVkLCBhbmQgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBwYWRkaW5nQnl0ZXMgPSBpbnggLSAoaW5wdXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhZGRpbmdCeXRlcykge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxhc3QgMiBjaGFyYWN0ZXJzIHRvIHBhZGRpbmcgY2hhclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbM10gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCBjaGFyYWN0ZXIgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBObyBwYWRkaW5nIC0gcHJvY2VlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb3cgd2Ugd2lsbCBncmFiIGVhY2ggYXBwcm9wcmlhdGUgY2hhcmFjdGVyIG91dCBvZiBvdXIga2V5c3RyaW5nXG4gICAgICAgICAgICAvLyBiYXNlZCBvbiBvdXIgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCBpdCB0byB0aGUgb3V0cHV0IHN0cmluZ1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBlbmNvZGVkQ2hhckluZGV4ZXMubGVuZ3RoOyBqbngrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSB0aGlzLl9rZXlTdHIuY2hhckF0KGVuY29kZWRDaGFySW5kZXhlc1tqbnhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vTG9hZGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJlc291cmNlID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5taWRkbGV3YXJlID0ge1xuICAgIGNhY2hpbmc6IHtcbiAgICAgICAgbWVtb3J5OiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL2NhY2hpbmcvbWVtb3J5JylcbiAgICB9LFxuICAgIHBhcnNpbmc6IHtcbiAgICAgICAgYmxvYjogcmVxdWlyZSgnLi9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2InKVxuICAgIH1cbn07XG4iLCIvLyBhIHNpbXBsZSBpbi1tZW1vcnkgY2FjaGUgZm9yIHJlc291cmNlc1xudmFyIGNhY2hlID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgLy8gaWYgY2FjaGVkLCB0aGVuIHNldCBkYXRhIGFuZCBjb21wbGV0ZSB0aGUgcmVzb3VyY2VcbiAgICAgICAgaWYgKGNhY2hlW3Jlc291cmNlLnVybF0pIHtcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBjYWNoZVtyZXNvdXJjZS51cmxdO1xuICAgICAgICAgICAgcmVzb3VyY2UuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBub3QgY2FjaGVkLCB3YWl0IGZvciBjb21wbGV0ZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlLm9uY2UoJ2NvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgY2FjaGVbdGhpcy51cmxdID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJy4uLy4uL1Jlc291cmNlJyksXG4gICAgYjY0ID0gcmVxdWlyZSgnLi4vLi4vYjY0Jyk7XG5cbndpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cbi8vIGEgbWlkZGxld2FyZSBmb3IgdHJhbnNmb3JtaW5nIFhIUiBsb2FkZWQgQmxvYnMgaW50byBtb3JlIHVzZWZ1bCBvYmplY3RzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgYW4gWEhSIGxvYWQgb2YgYSBibG9iXG4gICAgICAgIGlmIChyZXNvdXJjZS54aHIgJiYgcmVzb3VyY2UueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQikge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYmxvYiBzdXBwb3J0IHdlIHByb2JhYmx5IGdvdCBhIGJpbmFyeSBzdHJpbmcgYmFja1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuQmxvYiB8fCB0eXBlb2YgcmVzb3VyY2UuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlc291cmNlLnhoci5nZXRSZXNwb25zZUhlYWRlcignY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGltYWdlLCBjb252ZXJ0IHRoZSBiaW5hcnkgc3RyaW5nIGludG8gYSBkYXRhIHVybFxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIHR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gJ2RhdGE6JyArIHR5cGUgKyAnO2Jhc2U2NCwnICsgYjY0LmVuY29kZUJpbmFyeShyZXNvdXJjZS54aHIucmVzcG9uc2VUZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5pc0ltYWdlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IHVudGlsIHRoZSBpbWFnZSBsb2FkcyBhbmQgdGhlbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnQgdHlwZSBzYXlzIHRoaXMgaXMgYW4gaW1hZ2UsIHRoZW4gd2Ugc2hvdWxkIHRyYW5zZm9ybSB0aGUgYmxvYiBpbnRvIGFuIEltYWdlIG9iamVjdFxuICAgICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UuZGF0YS50eXBlLmluZGV4T2YoJ2ltYWdlJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXNvdXJjZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmJsb2IgPSByZXNvdXJjZS5kYXRhO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLnNyYyA9IHNyYztcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCB0aGUgbm8gbG9uZ2VyIHVzZWQgYmxvYiBhZnRlciB0aGUgaW1hZ2UgbG9hZHNcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChzcmMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwicGl4aS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIzLjAuMTAtZGV2XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJQaXhpLmpzIGlzIGEgZmFzdCBsaWdodHdlaWdodCAyRCBsaWJyYXJ5IHRoYXQgd29ya3MgYWNyb3NzIGFsbCBkZXZpY2VzLlwiLFxuICBcImF1dGhvclwiOiBcIk1hdCBHcm92ZXNcIixcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIFwiQ2hhZCBFbmdsZXIgPGNoYWRAcGFudGhlcmRldi5jb20+XCIsXG4gICAgXCJSaWNoYXJkIERhdmV5IDxyZGF2ZXlAZ21haWwuY29tPlwiXG4gIF0sXG4gIFwibWFpblwiOiBcIi4vc3JjL2luZGV4LmpzXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ29vZGJveWRpZ2l0YWwuY29tL1wiLFxuICBcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzXCIsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJzdGFydFwiOiBcImd1bHAgJiYgZ3VscCB3YXRjaFwiLFxuICAgIFwidGVzdFwiOiBcImd1bHAgJiYgdGVzdGVtIGNpXCIsXG4gICAgXCJidWlsZFwiOiBcImd1bHBcIixcbiAgICBcImRvY3NcIjogXCJqc2RvYyAtYyAuL2d1bHAvdXRpbC9qc2RvYy5jb25mLmpzb24gLVIgUkVBRE1FLm1kXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW4vXCIsXG4gICAgXCJzcmMvXCIsXG4gICAgXCJDT05UUklCVVRJTkcubWRcIixcbiAgICBcIkxJQ0VOU0VcIixcbiAgICBcInBhY2thZ2UuanNvblwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYXN5bmNcIjogXCJeMS41LjBcIixcbiAgICBcImJyZnNcIjogXCJeMS40LjFcIixcbiAgICBcImVhcmN1dFwiOiBcIl4yLjAuN1wiLFxuICAgIFwiZXZlbnRlbWl0dGVyM1wiOiBcIl4xLjEuMVwiLFxuICAgIFwiZ2wtbWF0cml4XCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS90b2ppL2dsLW1hdHJpeC5naXRcIixcbiAgICBcIm9iamVjdC1hc3NpZ25cIjogXCJeNC4wLjFcIixcbiAgICBcInBpeGktZ2wtY29yZVwiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vR29vZEJveURpZ2l0YWwvcGl4aS1nbC1jb3JlLmdpdFwiLFxuICAgIFwicmVzb3VyY2UtbG9hZGVyXCI6IFwiXjEuNi40XCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYnJvd3NlcmlmeVwiOiBcIl4xMS4xLjBcIixcbiAgICBcImNoYWlcIjogXCJeMy4yLjBcIixcbiAgICBcImRlbFwiOiBcIl4yLjAuMlwiLFxuICAgIFwiZ3VscFwiOiBcIl4zLjkuMFwiLFxuICAgIFwiZ3VscC1jYWNoZWRcIjogXCJeMS4xLjBcIixcbiAgICBcImd1bHAtY29uY2F0XCI6IFwiXjIuNi4wXCIsXG4gICAgXCJndWxwLWRlYnVnXCI6IFwiXjIuMS4wXCIsXG4gICAgXCJndWxwLWhlYWRlclwiOiBcIl4xLjcuMVwiLFxuICAgIFwiZ3VscC1qc2hpbnRcIjogXCJeMS4xMS4yXCIsXG4gICAgXCJndWxwLW1pcnJvclwiOiBcIl4wLjQuMFwiLFxuICAgIFwiZ3VscC1wbHVtYmVyXCI6IFwiXjEuMC4xXCIsXG4gICAgXCJndWxwLXJlbmFtZVwiOiBcIl4xLjIuMlwiLFxuICAgIFwiZ3VscC1zb3VyY2VtYXBzXCI6IFwiXjEuNS4yXCIsXG4gICAgXCJndWxwLXVnbGlmeVwiOiBcIl4xLjQuMVwiLFxuICAgIFwiZ3VscC11dGlsXCI6IFwiXjMuMC42XCIsXG4gICAgXCJqYWd1YXJqcy1qc2RvY1wiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vZGF2aWRzaGltanMvamFndWFyanMtanNkb2MuZ2l0XCIsXG4gICAgXCJqc2RvY1wiOiBcIl4zLjMuMlwiLFxuICAgIFwianNoaW50LXN1bW1hcnlcIjogXCJeMC40LjBcIixcbiAgICBcIm1pbmltaXN0XCI6IFwiXjEuMi4wXCIsXG4gICAgXCJtb2NoYVwiOiBcIl4yLjMuMlwiLFxuICAgIFwicmVxdWlyZS1kaXJcIjogXCJeMC4zLjBcIixcbiAgICBcInJ1bi1zZXF1ZW5jZVwiOiBcIl4xLjEuMlwiLFxuICAgIFwidGVzdGVtXCI6IFwiXjAuOS40XCIsXG4gICAgXCJ2aW55bC1idWZmZXJcIjogXCJeMS4wLjBcIixcbiAgICBcInZpbnlsLXNvdXJjZS1zdHJlYW1cIjogXCJeMS4xLjBcIixcbiAgICBcIndhdGNoaWZ5XCI6IFwiXjMuNC4wXCJcbiAgfSxcbiAgXCJicm93c2VyaWZ5XCI6IHtcbiAgICBcInRyYW5zZm9ybVwiOiBbXG4gICAgICBcImJyZnNcIlxuICAgIF1cbiAgfVxufVxuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8vIGFkZCBzb21lIGV4dHJhIHZhcmlhYmxlcyB0byB0aGUgY29udGFpbmVyLi5cbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKVxuKTtcblxuXG4vKipcbiAqIFRoZSBBY2Nlc3NpYmlsaXR5IG1hbmFnZXIgcmVhY3JlYXRlcyB0aGUgYWJpbGl0eSB0byB0YWIgYW5kIGFuZCBoYXZlIGNvbnRlbnQgcmVhZCBieSBzY3JlZW4gcmVhZGVycy4gVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCBhcyBpdCBjYW4gcG9zc2libHkgaGVscCBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMgYWNjZXNzIHBpeGkgY29udGVudC5cbiAqIE11Y2ggbGlrZSBpbnRlcmFjdGlvbiBhbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgbWFkZSBhY2Nlc3NpYmxlLiBUaGlzIG1hbmFnZXIgd2lsbCBtYXAgdGhlIGV2ZW50cyBhcyBpZiB0aGUgbW91c2Ugd2FzIGJlaW5nIHVzZWQsIG1pbmltaXppbmcgdGhlIGVmZmVyb3QgcmVxdWlyZWQgdG8gaW1wbGVtZW50LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyXG4gKi9cbmZ1bmN0aW9uIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKHJlbmRlcmVyKVxue1xuXHQvLyBmaXJzdCB3ZSBjcmVhdGUgYSBkaXYgdGhhdCB3aWxsIHNpdCBvdmVyIHRoZSBwaXhpIGVsZW1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGRpdiBvdmVybGF5cyB3aWxsIGdvLlxuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBcbiAgICBkaXYuc3R5bGUud2lkdGggPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgZGl2LnN0eWxlLnRvcCA9IDA7XG4gICAgZGl2LnN0eWxlLmxlZnQgPSAwO1xuICAgLy9cbiAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcbiAgIFx0XG4gICBcdC8qKlxuICAgXHQgKiBUaGlzIGlzIHRoZSBkb20gZWxlbWVudCB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuICAgXHR0aGlzLmRpdiA9IGRpdjtcblxuICAgXHQvKipcbiAgIFx0ICogQSBzaW1wbGUgcG9vbCBmb3Igc3RvcmluZyBkaXZzLlxuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0FycmF5fVxuICAgXHQgKiBAcHJpdmF0ZVxuICAgXHQgKi9cbiBcdHRoaXMucG9vbCA9IFtdO1xuXG4gXHQvKipcbiBcdCAqIFRoaXMgaXMgYSB0aWNrIHVzZWQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIG5vIGxvbmdlciBiZWluZyByZW5kZXJlZC5cbiBcdCAqIFxuIFx0ICogQHR5cGUge051bWJlcn1cbiBcdCAqIEBwcml2YXRlXG4gXHQgKi9cbiAgIFx0dGhpcy5yZW5kZXJJZCA9IDA7XG5cbiAgIFx0LyoqXG4gICBcdCAqIFNldHRpbmcgdGhpcyB0byB0cnVlIHdpbGwgdmlzdWFsbHkgc2hvdyB0aGUgZGl2c1xuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0Jvb2xlYW59XG4gICBcdCAqL1xuICAgXHR0aGlzLmRlYnVnID0gZmFsc2U7XG5cbiAgXHQvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBhY2Nlc3NpYmlsaXR5IG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgIFx0dGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICBcdC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjdXJyZW50bHkgYWN0aXZlIGFjY2Vzc2libGUgaXRlbXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgXHR0aGlzLmNoaWxkcmVuID0gW107XG4gICBcdFxuICAgXHQvKipcbiAgICAgKiBwcmUgYmluZCB0aGUgZnVuY3Rpb25zLi5cbiAgICAgKi9cbiAgIFx0dGhpcy5fb25LZXlEb3duID0gdGhpcy5fb25LZXlEb3duLmJpbmQodGhpcyk7XG4gICBcdHRoaXMuX29uTW91c2VNb3ZlID0gdGhpcy5fb25Nb3VzZU1vdmUuYmluZCh0aGlzKTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHN0b3JlcyB0aGUgc3RhdGUgb2YgdGhlIG1hbmFnZXIuIElmIHRoZXJlIGFyZSBubyBhY2Nlc3NpYmxlIG9iamVjdHMgb3IgdGhlIG1vdXNlIGlzIG1vdmluZyB0aGUgd2lsbCBiZSBmYWxzZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcblxuXG4gICBcdC8vIGxldCBsaXN0ZW4gZm9yIHRhYi4uIG9uY2UgcHJlc3NlZCB3ZSBjYW4gZmlyZSB1cCBhbmQgc2hvdyB0aGUgYWNjZXNzaWJpbGl0eSBsYXllclxuICAgXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xufVxuXG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBBY2Nlc3NpYmlsaXR5TWFuYWdlcjtcblxuLyoqXG4gKiBBY3RpdmF0aW5nIHdpbGwgY2F1c2UgdGhlIEFjY2Vzc2liaWxpdHkgbGF5ZXIgdG8gYmUgc2hvd24uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIHByZXNlcyB0aGUgdGFiIGtleVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IHRydWU7XG5cblx0d2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCB0cnVlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9uKCdwb3N0cmVuZGVyJywgdGhpcy51cGRhdGUsIHRoaXMpO1xuXG5cdHRoaXMucmVuZGVyZXIudmlldy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuZGl2KTtcdFxufTtcblxuLyoqXG4gKiBEZWFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBoaWRkZW4uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIG1vdmVzIHRoZSBtb3VzZVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmRlYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKCF0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG5cblx0dGhpcy5yZW5kZXJlci5vZmYoJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSk7XG5cblx0dGhpcy5kaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmRpdik7XG5cbn07XG5cbi8qKlxuICogVGhpcyByZWN1cnNpdmUgZnVuY3Rpb24gd2lsbCBydW4gdGhyb3VnaHQgaGUgc2NlbmUgZ3JhcGggYW5kIGFkZCBhbnkgbmV3IGFjY2Vzc2libGUgb2JqZWN0cyB0byB0aGUgRE9NIGxheWVyLlxuICogQHBhcmFtIGVsZW1lbnQge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIERpc3BsYXlPYmplY3QgdG8gY2hlY2suXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlQWNjZXNzaWJsZU9iamVjdHMgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuXHRpZighZGlzcGxheU9iamVjdC52aXNpYmxlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYoZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlICYmIGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG5cdHtcblx0XHRpZighZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZUFjdGl2ZSlcblx0XHR7XG5cdFx0XHR0aGlzLmFkZENoaWxkKGRpc3BsYXlPYmplY3QpO1xuXHRcdH1cblx0ICAgXHRcblx0ICAgXHRkaXNwbGF5T2JqZWN0LnJlbmRlcklkID0gdGhpcy5yZW5kZXJJZDtcblx0fVxuXG5cdHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG5cblx0Zm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XG5cdFx0dGhpcy51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyhjaGlsZHJlbltpXSk7XG5cdH1cbn07XG5cblxuLyoqXG4gKiBCZWZvcmUgZWFjaCByZW5kZXIgdGhpcyBmdW5jdGlvbiB3aWxsIGVuc3VyZSB0aGF0IGFsbCBkaXZzIGFyZSBtYXBwZWQgY29ycmVjdGx5IHRvIHRoZWlyIERpc3BsYXlPYmplY3RzXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oKVxue1xuXG5cdC8vIHVwZGF0ZSBjaGlsZHJlbi4uLlxuXHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCk7XG5cblx0dmFyIHJlY3QgPSB0aGlzLnJlbmRlcmVyLnZpZXcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdHZhciBzeCA9IHJlY3Qud2lkdGggIC8gdGhpcy5yZW5kZXJlci53aWR0aDtcblx0dmFyIHN5ID0gcmVjdC5oZWlnaHQgLyB0aGlzLnJlbmRlcmVyLmhlaWdodDtcblxuXHR2YXIgZGl2ID0gdGhpcy5kaXY7XG5cblx0ZGl2LnN0eWxlLmxlZnQgPSByZWN0LmxlZnQgKyAncHgnO1xuXHRkaXYuc3R5bGUudG9wID0gcmVjdC50b3AgKyAncHgnO1xuXHRkaXYuc3R5bGUud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoICsgJ3B4Jztcblx0ZGl2LnN0eWxlLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0ICsgJ3B4JztcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblxuXHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cblx0XHRpZihjaGlsZC5yZW5kZXJJZCAhPT0gdGhpcy5yZW5kZXJJZClcblx0XHR7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGksIDEpO1xuXHRcdFx0dGhpcy5kaXYucmVtb3ZlQ2hpbGQoIGNoaWxkLl9hY2Nlc3NpYmxlRGl2ICk7XG5cdFx0XHR0aGlzLnBvb2wucHVzaChjaGlsZC5fYWNjZXNzaWJsZURpdik7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZURpdiA9IG51bGw7XG5cblx0XHRcdGktLTtcblxuXHRcdFx0aWYodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0Ly8gbWFwIGRpdiB0byBkaXNwbGF5Li5cblx0XHRcdGRpdiA9IGNoaWxkLl9hY2Nlc3NpYmxlRGl2O1xuXHRcdFx0dmFyIGhpdEFyZWEgPSBjaGlsZC5oaXRBcmVhO1xuXHRcdFx0dmFyIHd0ID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cblx0XHRcdGlmKGNoaWxkLmhpdEFyZWEpXG5cdFx0XHR7XG5cdFx0XHRcdGRpdi5zdHlsZS5sZWZ0ID0gKCh3dC50eCArIChoaXRBcmVhLnggKiB3dC5hKSkgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gICgod3QudHkgKyAoaGl0QXJlYS55ICogd3QuZCkpICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiB3dC5hICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLmhlaWdodCA9IChoaXRBcmVhLmhlaWdodCAqIHd0LmQgKiBzeSkgKyAncHgnO1xuXHRcdFx0XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdGhpdEFyZWEgPSBjaGlsZC5nZXRCb3VuZHMoKTtcblxuXHRcdFx0XHR0aGlzLmNhcEhpdEFyZWEoaGl0QXJlYSk7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoaGl0QXJlYS54ICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLnRvcCA9ICAoaGl0QXJlYS55ICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogc3kpICsgJ3B4Jztcblx0XHRcdH1cdFx0XG5cdFx0fVxuXHR9XG5cblx0Ly8gaW5jcmVtZW50IHRoZSByZW5kZXIgaWQuLlxuXHR0aGlzLnJlbmRlcklkKys7XG59O1xuXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuY2FwSGl0QXJlYSA9IGZ1bmN0aW9uIChoaXRBcmVhKVxue1xuICAgIGlmIChoaXRBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS53aWR0aCArPSBoaXRBcmVhLng7XG4gICAgICAgIGhpdEFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGhpdEFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCArPSBoaXRBcmVhLnk7XG4gICAgICAgIGhpdEFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBoaXRBcmVhLnggKyBoaXRBcmVhLndpZHRoID4gdGhpcy5yZW5kZXJlci53aWR0aCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoID0gdGhpcy5yZW5kZXJlci53aWR0aCAtIGhpdEFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueSArIGhpdEFyZWEuaGVpZ2h0ID4gdGhpcy5yZW5kZXJlci5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmhlaWdodCAtIGhpdEFyZWEueTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogQWRkcyBhIERpc3BsYXlPYmplY3QgdG8gdGhlIGFjY2Vzc2liaWxpdHkgbWFuYWdlclxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24oZGlzcGxheU9iamVjdClcbntcbi8vXHR0aGlzLmFjdGl2YXRlKCk7XG5cdFxuXHR2YXIgZGl2ID0gdGhpcy5wb29sLnBvcCgpO1xuXG5cdGlmKCFkaXYpXG5cdHtcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgXG5cblx0ICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG5cdCAgICBkaXYuc3R5bGUuaGVpZ2h0ID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmRlYnVnID8gJ3JnYmEoMjU1LDAsMCwwLjUpJyA6ICd0cmFuc3BhcmVudCc7XG5cdCAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXHQgICAgZGl2LnN0eWxlLnpJbmRleCA9IDI7XG5cdCAgICBkaXYuc3R5bGUuYm9yZGVyU3R5bGUgPSAnbm9uZSc7XG5cblx0ICAgIFxuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGljay5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKSk7XG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCB0aGlzLl9vbkZvY3VzT3V0LmJpbmQodGhpcykpO1xuXHR9XG5cdCAgIFx0XG5cblxuXG5cdGRpdi50aXRsZSA9IGRpc3BsYXlPYmplY3QuYWNjZXNzaWJsZVRpdGxlIHx8ICdkaXNwbGF5T2JqZWN0ICcgKyB0aGlzLnRhYkluZGV4O1xuXG5cdC8vXG5cdFxuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlID0gdHJ1ZTtcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiA9IGRpdjtcblx0ZGl2LmRpc3BsYXlPYmplY3QgPSBkaXNwbGF5T2JqZWN0O1xuXG5cblx0dGhpcy5jaGlsZHJlbi5wdXNoKGRpc3BsYXlPYmplY3QpO1xuXHR0aGlzLmRpdi5hcHBlbmRDaGlsZCggZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiApO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2LnRhYkluZGV4ID0gZGlzcGxheU9iamVjdC50YWJJbmRleDtcbn07XG5cblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgYnV0dG9uIHByZXNzIHRvIHBpeGkncyBJbnRlcmFjdGlvbk1hbmFnZXIgKGNsaWNrKVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkNsaWNrID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ2NsaWNrJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW92ZXIpXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uRm9jdXMgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW91dClcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1c091dCA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIGtleSBpcyBwcmVzc2VkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbktleURvd24gPSBmdW5jdGlvbihlKVxue1xuXHRpZihlLmtleUNvZGUgIT09IDkpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmFjdGl2YXRlKCk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uTW91c2VNb3ZlID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmRlYWN0aXZhdGUoKTtcbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKlxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIFxue1xuXHR0aGlzLmRpdiA9IG51bGw7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHR7XG5cdFx0dGhpcy5jaGlsZHJlbltpXS5kaXYgPSBudWxsO1xuXHR9XG5cblx0XG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duKTtcblx0XHRcblx0dGhpcy5wb29sID0gbnVsbDtcblx0dGhpcy5jaGlsZHJlbiA9IG51bGw7XG5cdHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdhY2Nlc3NpYmlsaXR5JywgQWNjZXNzaWJpbGl0eU1hbmFnZXIpO1xuXG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGFjY2Vzc2libGUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlNYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5hY2Nlc3NpYmlsaXR5LmFjY2Vzc2libGVUYXJnZXRcbiAqICAgICAgKTtcbiAqL1xudmFyIGFjY2Vzc2libGVUYXJnZXQgPSB7XG4gICAgXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlOmZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlVGl0bGU6bnVsbCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgdGFiSW5kZXg6MCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVBY3RpdmU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIF9hY2Nlc3NpYmxlRGl2OmZhbHNlXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYWNjZXNzaWJsZVRhcmdldDtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGFjY2Vzc2liaWxpdHkgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGFjY2Vzc2libGVUYXJnZXQ6ICAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKSxcbiAgICBBY2Nlc3NpYmlsaXR5TWFuYWdlcjogcmVxdWlyZSgnLi9BY2Nlc3NpYmlsaXR5TWFuYWdlcicpXG59O1xuIiwiLyoqXG4gKiBDb25zdGFudCB2YWx1ZXMgdXNlZCBpbiBwaXhpXG4gKlxuICogQGxlbmRzIFBJWElcbiAqL1xudmFyIENPTlNUID0ge1xuICAgIC8qKlxuICAgICAqIFN0cmluZyBvZiB0aGUgY3VycmVudCBQSVhJIHZlcnNpb25cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gVkVSU0lPTlxuICAgICAqL1xuICAgIFZFUlNJT046IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb24sXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUElfMiAtIFR3byBQaVxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBQSV8yOiBNYXRoLlBJICogMixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSQURfVE9fREVHIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgcmFkaWFucyB0byBkZWdyZWVzXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFJBRF9UT19ERUc6IDE4MCAvIE1hdGguUEksXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge051bWJlcn0gREVHX1RPX1JBRCAtIENvbnN0YW50IGNvbnZlcnNpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIGRlZ3JlZXMgdG8gcmFkaWFuc1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBERUdfVE9fUkFEOiBNYXRoLlBJIC8gMTgwLFxuXG4gICAgLyoqXG4gICAgICogVGFyZ2V0IGZyYW1lcyBwZXIgbWlsbGlzZWNvbmQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFRBUkdFVF9GUE1TPTAuMDZcbiAgICAgKi9cbiAgICBUQVJHRVRfRlBNUzogMC4wNixcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IHRvIGlkZW50aWZ5IHRoZSBSZW5kZXJlciBUeXBlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBSRU5ERVJFUl9UWVBFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuVU5LTk9XTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLldFQkdMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuQ0FOVkFTXG4gICAgICovXG4gICAgUkVOREVSRVJfVFlQRToge1xuICAgICAgICBVTktOT1dOOiAgICAwLFxuICAgICAgICBXRUJHTDogICAgICAxLFxuICAgICAgICBDQU5WQVM6ICAgICAyXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFZhcmlvdXMgYmxlbmQgbW9kZXMgc3VwcG9ydGVkIGJ5IFBJWEkuIElNUE9SVEFOVCAtIFRoZSBXZWJHTCByZW5kZXJlciBvbmx5IHN1cHBvcnRzXG4gICAgICogdGhlIE5PUk1BTCwgQURELCBNVUxUSVBMWSBhbmQgU0NSRUVOIGJsZW5kIG1vZGVzLiBBbnl0aGluZyBlbHNlIHdpbGwgc2lsZW50bHkgYWN0IGxpa2VcbiAgICAgKiBOT1JNQUwuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IEJMRU5EX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5BRERcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTVVMVElQTFlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0NSRUVOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk9WRVJMQVlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuREFSS0VOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkxJR0hURU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfQlVSTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IQVJEX0xJR0hUXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNPRlRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuRElGRkVSRU5DRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5FWENMVVNJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuSFVFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNBVFVSQVRJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTFVNSU5PU0lUWVxuICAgICAqL1xuICAgIEJMRU5EX01PREVTOiB7XG4gICAgICAgIE5PUk1BTDogICAgICAgICAwLFxuICAgICAgICBBREQ6ICAgICAgICAgICAgMSxcbiAgICAgICAgTVVMVElQTFk6ICAgICAgIDIsXG4gICAgICAgIFNDUkVFTjogICAgICAgICAzLFxuICAgICAgICBPVkVSTEFZOiAgICAgICAgNCxcbiAgICAgICAgREFSS0VOOiAgICAgICAgIDUsXG4gICAgICAgIExJR0hURU46ICAgICAgICA2LFxuICAgICAgICBDT0xPUl9ET0RHRTogICAgNyxcbiAgICAgICAgQ09MT1JfQlVSTjogICAgIDgsXG4gICAgICAgIEhBUkRfTElHSFQ6ICAgICA5LFxuICAgICAgICBTT0ZUX0xJR0hUOiAgICAgMTAsXG4gICAgICAgIERJRkZFUkVOQ0U6ICAgICAxMSxcbiAgICAgICAgRVhDTFVTSU9OOiAgICAgIDEyLFxuICAgICAgICBIVUU6ICAgICAgICAgICAgMTMsXG4gICAgICAgIFNBVFVSQVRJT046ICAgICAxNCxcbiAgICAgICAgQ09MT1I6ICAgICAgICAgIDE1LFxuICAgICAgICBMVU1JTk9TSVRZOiAgICAgMTZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyB3ZWJnbCBkcmF3IG1vZGVzLiBUaGVzZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIEdMIGRyYXdNb2RlIHRvIHVzZVxuICAgICAqIHVuZGVyIGNlcnRhaW4gc2l0dWF0aW9ucyBhbmQgcmVuZGVyZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBEUkFXX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuUE9JTlRTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX0xPT1BcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX1NUUklQXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9GQU5cbiAgICAgKi9cbiAgICBEUkFXX01PREVTOiB7XG4gICAgICAgIFBPSU5UUzogICAgICAgICAwLFxuICAgICAgICBMSU5FUzogICAgICAgICAgMSxcbiAgICAgICAgTElORV9MT09QOiAgICAgIDIsXG4gICAgICAgIExJTkVfU1RSSVA6ICAgICAzLFxuICAgICAgICBUUklBTkdMRVM6ICAgICAgNCxcbiAgICAgICAgVFJJQU5HTEVfU1RSSVA6IDUsXG4gICAgICAgIFRSSUFOR0xFX0ZBTjogICA2XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgcGl4aS5cbiAgICAgKlxuICAgICAqIFRoZSBERUZBVUxUIHNjYWxlIG1vZGUgYWZmZWN0cyB0aGUgZGVmYXVsdCBzY2FsaW5nIG1vZGUgb2YgZnV0dXJlIG9wZXJhdGlvbnMuXG4gICAgICogSXQgY2FuIGJlIHJlLWFzc2lnbmVkIHRvIGVpdGhlciBMSU5FQVIgb3IgTkVBUkVTVCwgZGVwZW5kaW5nIHVwb24gc3VpdGFiaWxpdHkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNDQUxFX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkRFRkFVTFQ9TElORUFSXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkxJTkVBUiBTbW9vdGggc2NhbGluZ1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5ORUFSRVNUIFBpeGVsYXRpbmcgc2NhbGluZ1xuICAgICAqL1xuICAgIFNDQUxFX01PREVTOiB7XG4gICAgICAgIERFRkFVTFQ6ICAgIDAsXG4gICAgICAgIExJTkVBUjogICAgIDAsXG4gICAgICAgIE5FQVJFU1Q6ICAgIDFcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHByZWZpeCB0aGF0IGRlbm90ZXMgYSBVUkwgaXMgZm9yIGEgcmV0aW5hIGFzc2V0XG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFJFVElOQV9QUkVGSVhcbiAgICAgKi9cbiAgICAvL2V4YW1wbGU6ICdAMngnLFxuICAgIFJFVElOQV9QUkVGSVg6IC9AKC4rKXgvLFxuXG4gICAgUkVTT0xVVElPTjoxLFxuXG4gICAgRklMVEVSX1JFU09MVVRJT046MSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHJlbmRlciBvcHRpb25zIGlmIG5vbmUgYXJlIHN1cHBsaWVkIHRvIHtAbGluayBQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICogb3Ige0BsaW5rIFBJWEkuQ2FudmFzUmVuZGVyZXJ9LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TXG4gICAgICogQHByb3BlcnR5IHtIVE1MQ2FudmFzRWxlbWVudH0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy52aWV3PW51bGxcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMudHJhbnNwYXJlbnQ9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuYW50aWFsaWFzPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmZvcmNlRlhBQT1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5yZXNvbHV0aW9uPTFcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hdXRvUmVzaXplPWZhbHNlXG4gICAgICovXG4gICAgREVGQVVMVF9SRU5ERVJfT1BUSU9OUzoge1xuICAgICAgICB2aWV3OiBudWxsLFxuICAgICAgICByZXNvbHV0aW9uOiAxLFxuICAgICAgICBhbnRpYWxpYXM6IGZhbHNlLFxuICAgICAgICBmb3JjZUZYQUE6IGZhbHNlLFxuICAgICAgICBhdXRvUmVzaXplOiBmYWxzZSxcbiAgICAgICAgdHJhbnNwYXJlbnQ6IGZhbHNlLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IDB4MDAwMDAwLFxuICAgICAgICBjbGVhckJlZm9yZVJlbmRlcjogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBmYWxzZSxcbiAgICAgICAgcm91bmRQaXhlbHM6IGZhbHNlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50cyB0aGF0IGlkZW50aWZ5IHNoYXBlcywgbWFpbmx5IHRvIHByZXZlbnQgYGluc3RhbmNlb2ZgIGNhbGxzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVNcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlBPTFk9MFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUkVDVD0xXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5DSVJDPTJcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkVMSVA9M1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUlJFQz00XG4gICAgICovXG4gICAgU0hBUEVTOiB7XG4gICAgICAgIFBPTFk6IDAsXG4gICAgICAgIFJFQ1Q6IDEsXG4gICAgICAgIENJUkM6IDIsXG4gICAgICAgIEVMSVA6IDMsXG4gICAgICAgIFJSRUM6IDRcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogbWF5YmUgY2hhbmdlIHRvIFNQUklURS5CQVRDSF9TSVpFOiAyMDAwXG4gICAgLy8gVE9ETzogbWF5YmUgYWRkIFBBUlRJQ0xFLkJBVENIX1NJWkU6IDE1MDAwXG4gICAgU1BSSVRFX0JBVENIX1NJWkU6IDIwMDAgLy9uaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgYW5kIGRlc2t0b3AgbWFjaGluZXNcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ09OU1Q7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgRGlzcGxheU9iamVjdCA9IHJlcXVpcmUoJy4vRGlzcGxheU9iamVjdCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIENvbnRhaW5lciByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBkaXNwbGF5IG9iamVjdHMuXG4gKiBJdCBpcyB0aGUgYmFzZSBjbGFzcyBvZiBhbGwgZGlzcGxheSBvYmplY3RzIHRoYXQgYWN0IGFzIGEgY29udGFpbmVyIGZvciBvdGhlciBvYmplY3RzLlxuICpcbiAqYGBganNcbiAqIHZhciBjb250YWluZXIgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogYGBgXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuRGlzcGxheU9iamVjdFxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ29udGFpbmVyKClcbntcbiAgICBEaXNwbGF5T2JqZWN0LmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3RbXX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5Db250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSk7XG5Db250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb250YWluZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnRhaW5lci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG5cbiAgICAgICAgICAgIGlmICh3aWR0aCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IDE7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmIChoZWlnaHQgIT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyBoZWlnaHQgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogT3ZlcnJpZGFibGUgbWV0aG9kIHRoYXQgY2FuIGJlIHVzZWQgYnkgQ29udGFpbmVyIHN1YmNsYXNzZXMgd2hlbmV2ZXIgdGhlIGNoaWxkcmVuIGFycmF5IGlzIG1vZGlmaWVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5vbkNoaWxkcmVuQ2hhbmdlID0gZnVuY3Rpb24gKCkge307XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIuXG4gKiBcbiAqIFlvdSBjYW4gYWxzbyBhZGQgbXVsdHBsZSBpdGVtcyBsaWtlIHNvOiBteUNvbnRhaW5lci5hZGRDaGlsZCh0aGlua09uZSwgdGhpbmdUd28sIHRoaW5nVGhyZWUpXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gYWRkIHRvIHRoZSBjb250YWluZXJcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxueyBcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IHdlIGNhbiBieXBhc3MgbG9vcGluZyB0aHJvdWdoIHRoZSB0aGVtXG4gICAgaWYoYXJndW1lbnRzTGVuZ3RoID4gMSlcbiAgICB7XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgYXJndW1lbnRzIHByb3BlcnR5IGFuZCBhZGQgYWxsIGNoaWxkcmVuXG4gICAgICAgIC8vIHVzZSBpdCB0aGUgcmlnaHQgd2F5ICgubGVuZ3RoIGFuZCBbaV0pIHNvIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc3RpbGwgYmUgb3B0aW1pc2VkIGJ5IEpTIHJ1bnRpbWVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoIGFyZ3VtZW50c1tpXSApO1xuICAgICAgICB9XG4gICAgfSAgICAgXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIGNoaWxkIGhhcyBhIHBhcmVudCB0aGVuIGxldHMgcmVtb3ZlIGl0IGFzIFBpeGkgb2JqZWN0cyBjYW4gb25seSBleGlzdCBpbiBvbmUgcGxhY2VcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKHRoaXMuY2hpbGRyZW4ubGVuZ3RoLTEpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIgYXQgYSBzcGVjaWZpZWQgaW5kZXguIElmIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0byBhZGRcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gcGxhY2UgdGhlIGNoaWxkIGluXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyBhZGRlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5hZGRDaGlsZEF0ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuXG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNoaWxkICsgJ2FkZENoaWxkQXQ6IFRoZSBpbmRleCAnKyBpbmRleCArJyBzdXBwbGllZCBpcyBvdXQgb2YgYm91bmRzICcgKyB0aGlzLmNoaWxkcmVuLmxlbmd0aCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBTd2FwcyB0aGUgcG9zaXRpb24gb2YgMiBEaXNwbGF5IE9iamVjdHMgd2l0aGluIHRoaXMgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGNoaWxkMiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnN3YXBDaGlsZHJlbiA9IGZ1bmN0aW9uIChjaGlsZCwgY2hpbGQyKVxue1xuICAgIGlmIChjaGlsZCA9PT0gY2hpbGQyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbmRleDEgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuICAgIHZhciBpbmRleDIgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQyKTtcblxuICAgIGlmIChpbmRleDEgPCAwIHx8IGluZGV4MiA8IDApXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N3YXBDaGlsZHJlbjogQm90aCB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdHMgbXVzdCBiZSBjaGlsZHJlbiBvZiB0aGUgY2FsbGVyLicpO1xuICAgIH1cblxuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgxXSA9IGNoaWxkMjtcbiAgICB0aGlzLmNoaWxkcmVuW2luZGV4Ml0gPSBjaGlsZDtcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgxIDwgaW5kZXgyID8gaW5kZXgxIDogaW5kZXgyKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW5kZXggcG9zaXRpb24gb2YgYSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIHRvIGlkZW50aWZ5XG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3QgdG8gaWRlbnRpZnlcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBtdXN0IGJlIGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgcG9zaXRpb24gb2YgYW4gZXhpc3RpbmcgY2hpbGQgaW4gdGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgRGlzcGxheU9iamVjdCBpbnN0YW5jZSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBpbmRleCBudW1iZXJcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgcmVzdWx0aW5nIGluZGV4IG51bWJlciBmb3IgdGhlIGNoaWxkIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc2V0Q2hpbGRJbmRleCA9IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN1cHBsaWVkIGluZGV4IGlzIG91dCBvZiBib3VuZHMnKTtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudEluZGV4ID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkKTtcblxuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGN1cnJlbnRJbmRleCwgMSk7IC8vIHJlbW92ZSBmcm9tIG9sZCBwb3NpdGlvblxuICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7IC8vYWRkIGF0IG5ldyBwb3NpdGlvblxuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNoaWxkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhcbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgYXRcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIGF0IHRoZSBnaXZlbiBpbmRleCwgaWYgYW55LlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkQXQgPSBmdW5jdGlvbiAoaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0Q2hpbGRBdDogU3VwcGxpZWQgaW5kZXggJyArIGluZGV4ICsgJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY2hpbGQgbGlzdCwgb3IgdGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3QgaXMgbm90IGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2luZGV4XTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVtb3ZlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyByZW1vdmVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuXG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYSBjaGlsZCBmcm9tIHRoZSBzcGVjaWZpZWQgaW5kZXggcG9zaXRpb24uXG4gKlxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBnZXQgdGhlIGNoaWxkIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICB2YXIgY2hpbGQgPSB0aGlzLmdldENoaWxkQXQoaW5kZXgpO1xuXG4gICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpbmRleCwgMSk7XG5cbiAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICBjaGlsZC5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGNoaWxkcmVuIGZyb20gdGhpcyBjb250YWluZXIgdGhhdCBhcmUgd2l0aGluIHRoZSBiZWdpbiBhbmQgZW5kIGluZGV4ZXMuXG4gKlxuICogQHBhcmFtIGJlZ2luSW5kZXgge251bWJlcn0gVGhlIGJlZ2lubmluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyAwLlxuICogQHBhcmFtIGVuZEluZGV4IHtudW1iZXJ9IFRoZSBlbmRpbmcgcG9zaXRpb24uIERlZmF1bHQgdmFsdWUgaXMgc2l6ZSBvZiB0aGUgY29udGFpbmVyLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkcmVuID0gZnVuY3Rpb24gKGJlZ2luSW5kZXgsIGVuZEluZGV4KVxue1xuICAgIHZhciBiZWdpbiA9IGJlZ2luSW5kZXggfHwgMDtcbiAgICB2YXIgZW5kID0gdHlwZW9mIGVuZEluZGV4ID09PSAnbnVtYmVyJyA/IGVuZEluZGV4IDogdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgdmFyIHJhbmdlID0gZW5kIC0gYmVnaW47XG4gICAgdmFyIHJlbW92ZWQsIGk7XG5cbiAgICBpZiAocmFuZ2UgPiAwICYmIHJhbmdlIDw9IGVuZClcbiAgICB7XG4gICAgICAgIHJlbW92ZWQgPSB0aGlzLmNoaWxkcmVuLnNwbGljZShiZWdpbiwgcmFuZ2UpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW1vdmVkW2ldLnBhcmVudCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoYmVnaW5JbmRleCk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0uZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbW92ZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJhbmdlID09PSAwICYmIHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigncmVtb3ZlQ2hpbGRyZW46IG51bWVyaWMgdmFsdWVzIGFyZSBvdXRzaWRlIHRoZSBhY2NlcHRhYmxlIHJhbmdlLicpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb24gYWxsIGNoaWxkcmVuIG9mIHRoaXMgY29udGFpbmVyIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0gPSBDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgQ29udGFpbmVyIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIGFsbCB2aXNpYmxlIGNoaWxkcmVuIGludG8gY29uc2lkZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE8gdGhlIGJvdW5kcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHRoaXMgcmVuZGVyIHNlc3Npb24gc28gcmV0dXJuIHdoYXQgd2UgaGF2ZVxuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBjaGlsZEJvdW5kcztcbiAgICAgICAgdmFyIGNoaWxkTWF4WDtcbiAgICAgICAgdmFyIGNoaWxkTWF4WTtcblxuICAgICAgICB2YXIgY2hpbGRWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZFZpc2libGUgPSB0cnVlO1xuXG4gICAgICAgICAgICBjaGlsZEJvdW5kcyA9IHRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIG1pblggPSBtaW5YIDwgY2hpbGRCb3VuZHMueCA/IG1pblggOiBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgbWluWSA9IG1pblkgPCBjaGlsZEJvdW5kcy55ID8gbWluWSA6IGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIGNoaWxkTWF4WCA9IGNoaWxkQm91bmRzLndpZHRoICsgY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIGNoaWxkTWF4WSA9IGNoaWxkQm91bmRzLmhlaWdodCArIGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIG1heFggPSBtYXhYID4gY2hpbGRNYXhYID8gbWF4WCA6IGNoaWxkTWF4WDtcbiAgICAgICAgICAgIG1heFkgPSBtYXhZID4gY2hpbGRNYXhZID8gbWF4WSA6IGNoaWxkTWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGRWaXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG5Db250YWluZXIucHJvdG90eXBlLmNvbnRhaW5lckdldEJvdW5kcyA9IENvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbm9uLWdsb2JhbCBsb2NhbCBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS5cbiAqIFRoZSBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXhDYWNoZSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0aC5NYXRyaXguSURFTlRJVFk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0cml4Q2FjaGU7XG5cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyggbWF0aC5NYXRyaXguSURFTlRJVFkgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcblxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGksIGo7XG5cbiAgICAvLyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgbWFzayBvciBhIGZpbHRlci5cbiAgICBpZiAodGhpcy5fbWFzayB8fCB0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgLy8gcHVzaCBmaWx0ZXIgZmlyc3QgYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIGNvcnJlY3QgZm9yIGFueSBtYXNraW5nXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzICYmIHRoaXMuX2ZpbHRlcnMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGhpcywgdGhpcy5fZmlsdGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcblxuICAgICAgICAvLyBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIGJhdGNoLCBvbmx5IHJlbmRlcmVkIGlmIGl0IGhhcyBhIHRleHR1cmUuXG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgbWFrZSBzdXJlIHRoZXkgZ2V0IHJlbmRlcmVkXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJXZWJHTChyZW5kZXJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayh0aGlzLCB0aGlzLl9tYXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBzaW1wbGUgcmVuZGVyIGNoaWxkcmVuIVxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gdGhpcyBpcyB3aGVyZSBjb250ZW50IGl0c2VsZiBnZXRzIHJlbmRlcmVkLi4uXG59O1xuXG4vKipcbiAqIFRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzXG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy5hbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hc2spXG4gICAge1xuICAgICAgICByZW5kZXJlci5tYXNrTWFuYWdlci5wdXNoTWFzayh0aGlzLl9tYXNrLCByZW5kZXJlcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayhyZW5kZXJlcik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUNoaWxkcmVuKVxue1xuICAgIERpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGlmIChkZXN0cm95Q2hpbGRyZW4pXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLmRlc3Ryb3koZGVzdHJveUNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xufTtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBUcmFuc2Zvcm0gPSByZXF1aXJlKCcuL1RyYW5zZm9ybVN0YXRpYycpLFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB3b3JsZEFscGhhOjEsIGNoaWxkcmVuOltdfTtcblxuXG4vKipcbiAqIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCBvbiB0aGUgc2NyZWVuLlxuICogVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIG9uIGl0cyBvd24gcmF0aGVyIGl0IHNob3VsZCBiZSBleHRlbmRlZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIEV2ZW50RW1pdHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gRGlzcGxheU9iamVjdCgpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb29yZGluYXRlIG9mIHRoZSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLnRyYW5zZm9ybS5wb3NpdGlvbjtcbiAgIC8vIHRoaXMuX3Bvc2l0aW9uID0gbmV3IENhY2hlUG9pbnQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHBpdm90IHBvaW50IG9mIHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgaXQgcm90YXRlcyBhcm91bmRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5waXZvdCA9IHRoaXMudHJhbnNmb3JtLnBpdm90XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBza2V3IGZhY3RvciBmb3IgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNrZXcgPSB0aGlzLnRyYW5zZm9ybS5za2V3XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3JvdGF0aW9uID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcGFjaXR5IG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgb2JqZWN0LiBJZiBmYWxzZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGRyYXduLCBhbmRcbiAgICAgKiB0aGUgdXBkYXRlVHJhbnNmb3JtIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENhbiB0aGlzIG9iamVjdCBiZSByZW5kZXJlZCwgaWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biBidXQgdGhlIHVwZGF0ZVRyYW5zZm9ybVxuICAgICAqIG1ldGhvZHMgd2lsbCBzdGlsbCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyIHRoYXQgY29udGFpbnMgdGhpcyBkaXNwbGF5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ29udGFpbmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtdWx0aXBsaWVkIGFscGhhIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgdHJhbnNmb3JtIG9mIHRoZSBvYmplY3QgYmFzZWQgb24gd29ybGQgKHBhcmVudCkgZmFjdG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS5sb2NhbFRyYW5zZm9ybTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcmVhIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0by4gVGhpcyBpcyB1c2VkIGFzIG1vcmUgb2YgYW4gb3B0aW1pc2F0aW9uXG4gICAgICogcmF0aGVyIHRoYW4gZmlndXJpbmcgb3V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGVhY2ggZnJhbWUgeW91IGNhbiBzZXQgdGhpcyByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW9zdCB1cC10by1kYXRlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgbWFzayBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gIC8vICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxheU9iamVjdDtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNjYWxlWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcm90YXRpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uZGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX2NyID0gTWF0aC5jb3ModmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBzcHJpdGUgaXMgZ2xvYmFsbHkgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB3b3JsZFZpc2libGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udmlzaWJsZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICB9IHdoaWxlIChpdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIG1hc2sgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LiBBIG1hc2sgaXMgYW4gb2JqZWN0IHRoYXQgbGltaXRzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIG9iamVjdCB0byB0aGUgc2hhcGUgb2YgdGhlIG1hc2sgYXBwbGllZCB0byBpdC5cbiAgICAgKiBJbiBQSVhJIGEgcmVndWxhciBtYXNrIG11c3QgYmUgYSBQSVhJLkdyYXBoaWNzIG9yIGEgUElYSS5TcHJpdGUgb2JqZWN0LiBUaGlzIGFsbG93cyBmb3IgbXVjaCBmYXN0ZXIgbWFza2luZyBpbiBjYW52YXMgYXMgaXQgdXRpbGlzZXMgc2hhcGUgY2xpcHBpbmcuXG4gICAgICogVG8gcmVtb3ZlIGEgbWFzaywgc2V0IHRoaXMgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3N8UElYSS5TcHJpdGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBtYXNrOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrLnJlbmRlcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXNrID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LlxuICAgICAqICogSU1QT1JUQU5UOiBUaGlzIGlzIGEgd2ViR0wgb25seSBmZWF0dXJlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlci5cbiAgICAgKiBUbyByZW1vdmUgZmlsdGVycyBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ251bGwnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkFic3RyYWN0RmlsdGVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMgJiYgdGhpcy5fZmlsdGVycy5zbGljZSgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlICYmIHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogVE9ETyAtIE9wdGltaXphdGlvbiBwYXNzIVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vaWYodGhpcy50cmFuc2Zvcm0uZGlydHkgfHwgcGFyZW50LnRyYW5zZm9ybS5kaXJ0eSlcbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICAvLyBtdWx0aXBseSB0aGUgYWxwaGFzLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gPSBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICpcbiAqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH1cbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyhtYXRoLk1hdHJpeC5JREVOVElUWSk7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9HbG9iYWwgPSBmdW5jdGlvbiAocG9zaXRpb24pXG57XG4gICAgLy8gdGhpcyBwYXJlbnQgY2hlY2sgaXMgZm9yIGp1c3QgaW4gY2FzZSB0aGUgaXRlbSBpcyBhIHJvb3Qgb2JqZWN0LlxuICAgIC8vIElmIGl0IGlzIHdlIG5lZWQgdG8gZ2l2ZSBpdCBhIHRlbXBvcmFyeSBwYXJlbnQgc28gdGhhdCBkaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtIHdvcmtzIGNvcnJlY3RseVxuICAgIC8vIHRoaXMgaXMgbWFpbmx5IHRvIGF2b2lkIGEgcGFyZW50IGNoZWNrIGluIHRoZSBtYWluIGxvb3AuIEV2ZXJ5IGxpdHRsZSBoZWxwcyBmb3IgcGVyZm9ybWFuY2UgOilcbiAgICBpZighdGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLnBhcmVudCA9IF90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIGxvdFxuICAgIHJldHVybiB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5KHBvc2l0aW9uKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgbG9jYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHJlbGF0aXZlIHRvIGFub3RoZXIgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEBwYXJhbSBbZnJvbV0ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gY2FsY3VsYXRlIHRoZSBnbG9iYWwgcG9zaXRpb24gZnJvbVxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBQb2ludClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9Mb2NhbCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgZnJvbSwgcG9pbnQpXG57XG4gICAgaWYgKGZyb20pXG4gICAge1xuICAgICAgICBwb3NpdGlvbiA9IGZyb20udG9HbG9iYWwocG9zaXRpb24pO1xuICAgIH1cblxuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIHNpbXBseSBhcHBseSB0aGUgbWF0cml4Li5cbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9zaXRpb24sIHBvaW50KTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyBPVkVSV1JJVEU7XG59O1xuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBwYXJlbnQgQ29udGFpbmVyIG9mIHRoaXMgRGlzcGxheU9iamVjdFxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge0NvbnRhaW5lcn0gVGhlIENvbnRhaW5lciB0byBhZGQgdGhpcyBEaXNwbGF5T2JqZWN0IHRvXG4gKiBAcmV0dXJuIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdGhhdCB0aGlzIERpc3BsYXlPYmplY3Qgd2FzIGFkZGVkIHRvXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFBhcmVudCA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWNvbnRhaW5lci5hZGRDaGlsZClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0UGFyZW50OiBBcmd1bWVudCBtdXN0IGJlIGEgQ29udGFpbmVyJyk7XG4gICAgfVxuXG4gICAgY29udGFpbmVyLmFkZENoaWxkKHRoaXMpO1xuICAgIHJldHVybiBjb250YWluZXI7XG59O1xuXG4vKipcbiAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHNldCB0aGUgcG9zdGlvbiwgc2NhbGUsIHNrZXcgYW5kIHBpdm90IGF0IG9uY2UuXG4gKlxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IFRoZSBYIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gVGhlIFkgcG9zaXRpb25cbiAqIEBwYXJhbSBbc2NhbGVYPTFdIHtudW1iZXJ9IFRoZSBYIHNjYWxlIHZhbHVlXG4gKiBAcGFyYW0gW3NjYWxlWT0xXSB7bnVtYmVyfSBUaGUgWSBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtyb3RhdGlvbj0wXSB7bnVtYmVyfSBUaGUgcm90YXRpb25cbiAqIEBwYXJhbSBbc2tld1g9MF0ge251bWJlcn0gVGhlIFggc2tldyB2YWx1ZVxuICogQHBhcmFtIFtza2V3WT0wXSB7bnVtYmVyfSBUaGUgWSBza2V3IHZhbHVlXG4gKiBAcGFyYW0gW3Bpdm90WD0wXSB7bnVtYmVyfSBUaGUgWCBwaXZvdCB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFk9MF0ge251bWJlcn0gVGhlIFkgcGl2b3QgdmFsdWVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24oeCwgeSwgc2NhbGVYLCBzY2FsZVksIHJvdGF0aW9uLCBza2V3WCwgc2tld1ksIHBpdm90WCwgcGl2b3RZKSAvL2pzaGludCBpZ25vcmU6bGluZVxue1xuICAgIHRoaXMucG9zaXRpb24ueCA9IHggfHwgMDtcbiAgICB0aGlzLnBvc2l0aW9uLnkgPSB5IHx8IDA7XG4gICAgdGhpcy5zY2FsZS54ID0gIXNjYWxlWCA/IDEgOiBzY2FsZVg7XG4gICAgdGhpcy5zY2FsZS55ID0gIXNjYWxlWSA/IDEgOiBzY2FsZVk7XG4gICAgdGhpcy5yb3RhdGlvbiA9IHJvdGF0aW9uIHx8IDA7XG4gICAgdGhpcy5za2V3LnggPSBza2V3WCB8fCAwO1xuICAgIHRoaXMuc2tldy55ID0gc2tld1kgfHwgMDtcbiAgICB0aGlzLnBpdm90LnggPSBwaXZvdFggfHwgMDtcbiAgICB0aGlzLnBpdm90LnkgPSBwaXZvdFkgfHwgMDtcbiAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQmFzZSBkZXN0cm95IG1ldGhvZCBmb3IgZ2VuZXJpYyBkaXNwbGF5IG9iamVjdHNcbiAqXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdGhpcy5wb3NpdGlvbiA9IG51bGw7XG4gICAgdGhpcy5zY2FsZSA9IG51bGw7XG4gICAgdGhpcy5waXZvdCA9IG51bGw7XG4gICAgdGhpcy5za2V3ID0gbnVsbDtcblxuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIHRoaXMuX2JvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fbWFzayA9IG51bGw7XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xufTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIE9ic2VydmFibGVQb2ludCh0cmFuc2Zvcm0sIHgsIHkpXG57XG4gICAgdGhpcy5feCA9IHggfHwgMDtcbiAgICB0aGlzLl95ID0geSB8fCAwO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG59XG5cbk9ic2VydmFibGVQb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYnNlcnZhYmxlUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IE9ic2VydmFibGVQb2ludDtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE9ic2VydmFibGVQb2ludC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3Qgb24gdGhlIHggYXhpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIHg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5feDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3ggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3k7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl95ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5PYnNlcnZhYmxlUG9pbnQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuX3ggPSB4IHx8IDA7XG4gICAgdGhpcy5feSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLl94IDogMCApO1xuICAgIFxuICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcbnZhciBPYnNlcnZhYmxlUG9pbnQgPSByZXF1aXJlKCcuL09ic2VydmFibGVQb2ludCcpO1xuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLCAwKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLDEsIDEpO1xuICAgIHRoaXMucGl2b3QgPSBuZXcgT2JzZXJ2YWJsZVBvaW50KHRoaXMsIDAsIDApO1xuICAgIHRoaXMuc2tldyA9IG5ldyBPYnNlcnZhYmxlUG9pbnQodGhpcywgMCwwKTtcbiAgICBcbiAgICB0aGlzLnJvdGF0aW9uID0gMDtcbiAgICB0aGlzLl9zciA9IE1hdGguc2luKDApO1xuICAgIHRoaXMuX2NyID0gTWF0aC5jb3MoMCk7XG4gICAgXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cblxuICAgIHRoaXMudXBkYXRlZCA9IHRydWU7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUcmFuc2Zvcm07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKHBhcmVudFRyYW5zZm9ybSlcbntcbiAgICB2YXIgcHQgPSBwYXJlbnRUcmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgbHQgPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3g7XG4gICAgICAgIGx0LmIgID0gIHRoaXMuX3NyICogdGhpcy5zY2FsZS5feDtcbiAgICAgICAgbHQuYyAgPSAtdGhpcy5fc3IgKiB0aGlzLnNjYWxlLl95O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3k7XG4gICAgICAgIGx0LnR4ID0gIHRoaXMucG9zaXRpb24uX3ggLSAodGhpcy5waXZvdC5feCAqIGx0LmEgKyB0aGlzLnBpdm90Ll95ICogbHQuYyk7XG4gICAgICAgIGx0LnR5ID0gIHRoaXMucG9zaXRpb24uX3kgLSAodGhpcy5waXZvdC5feCAqIGx0LmIgKyB0aGlzLnBpdm90Ll95ICogbHQuZCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVkID0gdGhpcy5kaXJ0eSB8fCBwYXJlbnRUcmFuc2Zvcm0uZGlydHk7XG5cbiAgICBpZih0aGlzLnVwZGF0ZWQpXG4gICAgeyAgICAgIFxuICAgICAgICAvLyBjb25jYXQgdGhlIHBhcmVudCBtYXRyaXggd2l0aCB0aGUgb2JqZWN0cyB0cmFuc2Zvcm0uXG4gICAgICAgIHd0LmEgID0gbHQuYSAgKiBwdC5hICsgbHQuYiAgKiBwdC5jO1xuICAgICAgICB3dC5iICA9IGx0LmEgICogcHQuYiArIGx0LmIgICogcHQuZDtcbiAgICAgICAgd3QuYyAgPSBsdC5jICAqIHB0LmEgKyBsdC5kICAqIHB0LmM7XG4gICAgICAgIHd0LmQgID0gbHQuYyAgKiBwdC5iICsgbHQuZCAgKiBwdC5kO1xuICAgICAgICB3dC50eCA9IGx0LnR4ICogcHQuYSArIGx0LnR5ICogcHQuYyArIHB0LnR4O1xuICAgICAgICB3dC50eSA9IGx0LnR4ICogcHQuYiArIGx0LnR5ICogcHQuZCArIHB0LnR5O1xuICAgIH1cbiAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhbnNmb3JtO1xuXG5cbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBDYW52YXNHcmFwaGljcyA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL0dyYXBoaWNzRGF0YScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIEdyYXBoaWNzIGNsYXNzIGNvbnRhaW5zIG1ldGhvZHMgdXNlZCB0byBkcmF3IHByaW1pdGl2ZSBzaGFwZXMgc3VjaCBhcyBsaW5lcywgY2lyY2xlcyBhbmRcbiAqIHJlY3RhbmdsZXMgdG8gdGhlIGRpc3BsYXksIGFuZCB0byBjb2xvciBhbmQgZmlsbCB0aGVtLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzKClcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSB2YWx1ZSB1c2VkIHdoZW4gZmlsbGluZyB0aGUgR3JhcGhpY3Mgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggKHRoaWNrbmVzcykgb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29sb3Igb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBHcmFwaGljcyBkYXRhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFRoaXMgaXMgYSBoZXggdmFsdWUuIEFwcGx5IGEgdmFsdWUgb2YgMHhGRkZGRkYgdG8gcmVzZXQgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmV2aW91cyB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFVzZWQgdG8gY29tcGFyZSB0byB0aGUgY3VycmVudCB0aW50IGFuZCBjaGVjayBpZiB0aGVyZXMgY2hhbmdlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLl9wcmV2VGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMO1xuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCBwYXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgY29udGFpbmluZyBzb21lIFdlYkdMLXJlbGF0ZWQgcHJvcGVydGllcyB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIG9iamVjdD59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAvLyBUT0RPIC0gX3dlYmdsIHNob3VsZCB1c2UgYSBwcm90b3R5cGUgb2JqZWN0LCBub3QgYSByYW5kb20gdW5kb2N1bWVudGVkIG9iamVjdC4uLlxuICAgIHRoaXMuX3dlYkdMID0ge307XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgc2hhcGUgaXMgYmVpbmcgdXNlZCBhcyBhIG1hc2suXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNNYXNrID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYm91bmRzJyBwYWRkaW5nIHVzZWQgZm9yIGJvdW5kcyBjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJvdW5kc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQSBjYWNoZSBvZiB0aGUgbG9jYWwgYm91bmRzIHRvIHByZXZlbnQgcmVjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwwLDEsMSk7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlIGdyYXBoaWNzXG4gICAgICogb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIFdlYkdMIGdyYXBoaWNzIG9iamVjdCBoYXMgY2hhbmdlZC4gSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZVxuICAgICAqIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlY2FsY3VsYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcblxuICAgIHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIGNhY2hlZCBzcHJpdGUgb2JqZWN0IG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBjYWNoZUFzQml0bWFwIGlzIHNldCB0byB0cnVlIHRoZSBncmFwaGljcyBvYmplY3Qgd2lsbCBiZSByZW5kZXJlZCBhcyBpZiBpdCB3YXMgYSBzcHJpdGUuXG4gICAgICogVGhpcyBpcyB1c2VmdWwgaWYgeW91ciBncmFwaGljcyBlbGVtZW50IGRvZXMgbm90IGNoYW5nZSBvZnRlbiwgYXMgaXQgd2lsbCBzcGVlZCB1cCB0aGUgcmVuZGVyaW5nXG4gICAgICogb2YgdGhlIG9iamVjdCBpbiBleGNoYW5nZSBmb3IgdGFraW5nIHVwIHRleHR1cmUgbWVtb3J5LiBJdCBpcyBhbHNvIHVzZWZ1bCBpZiB5b3UgbmVlZCB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3QgdG8gYmUgYW50aS1hbGlhc2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVuZGVyZWQgdXNpbmcgY2FudmFzLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCBpZlxuICAgICAqIHlvdSBhcmUgY29uc3RhbnRseSByZWRyYXdpbmcgdGhlIGdyYXBoaWNzIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBjYWNoZUFzQml0bWFwXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5HcmFwaGljcyNcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuR3JhcGhpY3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcbkdyYXBoaWNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljcztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEdyYXBoaWNzIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqIE5vdGUgdGhhdCB0aGUgb25seSB0aGUgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IGFyZSBjbG9uZWQsIG5vdCBpdHMgdHJhbnNmb3JtIChwb3NpdGlvbixzY2FsZSxldGMpXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2xvbmUgPSBuZXcgR3JhcGhpY3MoKTtcblxuICAgIGNsb25lLnJlbmRlcmFibGUgICAgPSB0aGlzLnJlbmRlcmFibGU7XG4gICAgY2xvbmUuZmlsbEFscGhhICAgICA9IHRoaXMuZmlsbEFscGhhO1xuICAgIGNsb25lLmxpbmVXaWR0aCAgICAgPSB0aGlzLmxpbmVXaWR0aDtcbiAgICBjbG9uZS5saW5lQ29sb3IgICAgID0gdGhpcy5saW5lQ29sb3I7XG4gICAgY2xvbmUudGludCAgICAgICAgICA9IHRoaXMudGludDtcbiAgICBjbG9uZS5ibGVuZE1vZGUgICAgID0gdGhpcy5ibGVuZE1vZGU7XG4gICAgY2xvbmUuaXNNYXNrICAgICAgICA9IHRoaXMuaXNNYXNrO1xuICAgIGNsb25lLmJvdW5kc1BhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG4gICAgY2xvbmUuZGlydHkgICAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuZ2xEaXJ0eSAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuY2FjaGVkU3ByaXRlRGlydHkgPSB0aGlzLmNhY2hlZFNwcml0ZURpcnR5O1xuXG4gICAgLy8gY29weSBncmFwaGljcyBkYXRhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIGNsb25lLmdyYXBoaWNzRGF0YS5wdXNoKHRoaXMuZ3JhcGhpY3NEYXRhW2ldLmNsb25lKCkpO1xuICAgIH1cblxuICAgIGNsb25lLmN1cnJlbnRQYXRoID0gY2xvbmUuZ3JhcGhpY3NEYXRhW2Nsb25lLmdyYXBoaWNzRGF0YS5sZW5ndGggLSAxXTtcblxuICAgIGNsb25lLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICByZXR1cm4gY2xvbmU7XG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgbGluZSBzdHlsZSB1c2VkIGZvciBzdWJzZXF1ZW50IGNhbGxzIHRvIEdyYXBoaWNzIG1ldGhvZHMgc3VjaCBhcyB0aGUgbGluZVRvKCkgbWV0aG9kIG9yIHRoZSBkcmF3Q2lyY2xlKCkgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUubGluZVN0eWxlID0gZnVuY3Rpb24gKGxpbmVXaWR0aCwgY29sb3IsIGFscGhhKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoIHx8IDA7XG4gICAgdGhpcy5saW5lQ29sb3IgPSBjb2xvciB8fCAwO1xuICAgIHRoaXMubGluZUFscGhhID0gKGFscGhhID09PSB1bmRlZmluZWQpID8gMSA6IGFscGhhO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBoYWxmd2F5IHRocm91Z2ggYSBsaW5lPyBzdGFydCBhIG5ldyBvbmUhXG4gICAgICAgICAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnNsaWNlKC0yKSk7XG4gICAgICAgICAgICBzaGFwZS5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSBpdHMgZW1wdHkgc28gbGV0cyBqdXN0IHNldCB0aGUgbGluZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVXaWR0aCA9IHRoaXMubGluZVdpZHRoO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZUFscGhhID0gdGhpcy5saW5lQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogTW92ZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byB4LCB5LlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IHRoZSBYIGNvb3JkaW5hdGUgdG8gbW92ZSB0b1xuICogQHBhcmFtIHkge251bWJlcn0gdGhlIFkgY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICAqL1xuR3JhcGhpY3MucHJvdG90eXBlLm1vdmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24oW3gseV0pO1xuICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIGxpbmUgdXNpbmcgdGhlIGN1cnJlbnQgbGluZSBzdHlsZSBmcm9tIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8gKHgsIHkpO1xuICogVGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiBpcyB0aGVuIHNldCB0byAoeCwgeSkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBkcmF3IHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lVG8gPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgsIHkpO1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnF1YWRyYXRpY0N1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICBuID0gMjAsXG4gICAgICAgIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLCAwKTtcbiAgICB9XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBuOyArK2kpXG4gICAge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgeGEgPSBmcm9tWCArICggKGNwWCAtIGZyb21YKSAqIGogKTtcbiAgICAgICAgeWEgPSBmcm9tWSArICggKGNwWSAtIGZyb21ZKSAqIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCggeGEgKyAoICgoY3BYICsgKCAodG9YIC0gY3BYKSAqIGogKSkgLSB4YSkgKiBqICksXG4gICAgICAgICAgICAgICAgICAgICB5YSArICggKChjcFkgKyAoICh0b1kgLSBjcFkpICogaiApKSAtIHlhKSAqIGogKSApO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gY3BYMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlemllckN1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIGNwWDIsIGNwWTIsIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgbiA9IDIwLFxuICAgICAgICBkdCxcbiAgICAgICAgZHQyLFxuICAgICAgICBkdDMsXG4gICAgICAgIHQyLFxuICAgICAgICB0MyxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICBkdCA9ICgxIC0gaik7XG4gICAgICAgIGR0MiA9IGR0ICogZHQ7XG4gICAgICAgIGR0MyA9IGR0MiAqIGR0O1xuXG4gICAgICAgIHQyID0gaiAqIGo7XG4gICAgICAgIHQzID0gdDIgKiBqO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCBkdDMgKiBmcm9tWCArIDMgKiBkdDIgKiBqICogY3BYICsgMyAqIGR0ICogdDIgKiBjcFgyICsgdDMgKiB0b1gsXG4gICAgICAgICAgICAgICAgICAgICBkdDMgKiBmcm9tWSArIDMgKiBkdDIgKiBqICogY3BZICsgMyAqIGR0ICogdDIgKiBjcFkyICsgdDMgKiB0b1kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjVG8oKSBtZXRob2QgY3JlYXRlcyBhbiBhcmMvY3VydmUgYmV0d2VlbiB0d28gdGFuZ2VudHMgb24gdGhlIGNhbnZhcy5cbiAqXG4gKiBcImJvcnJvd2VkXCIgZnJvbSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Z4Y2FudmFzLyAtIHRoYW5rcyBnb29nbGUhXG4gKlxuICogQHBhcmFtIHgxIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTEge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB4MiB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGFyY1xuICogQHBhcmFtIHkyIHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGFyY1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmFyY1RvID0gZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyLCByYWRpdXMpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oeDEsIHkxKTtcbiAgICB9XG5cbiAgICB2YXIgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMsXG4gICAgICAgIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0sXG4gICAgICAgIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0sXG4gICAgICAgIGExID0gZnJvbVkgLSB5MSxcbiAgICAgICAgYjEgPSBmcm9tWCAtIHgxLFxuICAgICAgICBhMiA9IHkyICAgLSB5MSxcbiAgICAgICAgYjIgPSB4MiAgIC0geDEsXG4gICAgICAgIG1tID0gTWF0aC5hYnMoYTEgKiBiMiAtIGIxICogYTIpO1xuXG4gICAgaWYgKG1tIDwgMS4wZS04IHx8IHJhZGl1cyA9PT0gMClcbiAgICB7XG4gICAgICAgIGlmIChwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAhPT0geDEgfHwgcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0gIT09IHkxKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHMucHVzaCh4MSwgeTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBkZCA9IGExICogYTEgKyBiMSAqIGIxLFxuICAgICAgICAgICAgY2MgPSBhMiAqIGEyICsgYjIgKiBiMixcbiAgICAgICAgICAgIHR0ID0gYTEgKiBhMiArIGIxICogYjIsXG4gICAgICAgICAgICBrMSA9IHJhZGl1cyAqIE1hdGguc3FydChkZCkgLyBtbSxcbiAgICAgICAgICAgIGsyID0gcmFkaXVzICogTWF0aC5zcXJ0KGNjKSAvIG1tLFxuICAgICAgICAgICAgajEgPSBrMSAqIHR0IC8gZGQsXG4gICAgICAgICAgICBqMiA9IGsyICogdHQgLyBjYyxcbiAgICAgICAgICAgIGN4ID0gazEgKiBiMiArIGsyICogYjEsXG4gICAgICAgICAgICBjeSA9IGsxICogYTIgKyBrMiAqIGExLFxuICAgICAgICAgICAgcHggPSBiMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHB5ID0gYTEgKiAoazIgKyBqMSksXG4gICAgICAgICAgICBxeCA9IGIyICogKGsxICsgajIpLFxuICAgICAgICAgICAgcXkgPSBhMiAqIChrMSArIGoyKSxcbiAgICAgICAgICAgIHN0YXJ0QW5nbGUgPSBNYXRoLmF0YW4yKHB5IC0gY3ksIHB4IC0gY3gpLFxuICAgICAgICAgICAgZW5kQW5nbGUgICA9IE1hdGguYXRhbjIocXkgLSBjeSwgcXggLSBjeCk7XG5cbiAgICAgICAgdGhpcy5hcmMoY3ggKyB4MSwgY3kgKyB5MSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYjEgKiBhMiA+IGIyICogYTEpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSAodXNlZCB0byBjcmVhdGUgY2lyY2xlcywgb3IgcGFydHMgb2YgY2lyY2xlcykuXG4gKlxuICogQHBhcmFtIGN4IHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gY3kge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gc3RhcnRBbmdsZSB7bnVtYmVyfSBUaGUgc3RhcnRpbmcgYW5nbGUsIGluIHJhZGlhbnMgKDAgaXMgYXQgdGhlIDMgbydjbG9jayBwb3NpdGlvbiBvZiB0aGUgYXJjJ3MgY2lyY2xlKVxuICogQHBhcmFtIGVuZEFuZ2xlIHtudW1iZXJ9IFRoZSBlbmRpbmcgYW5nbGUsIGluIHJhZGlhbnNcbiAqIEBwYXJhbSBhbnRpY2xvY2t3aXNlIHtib29sZWFufSBPcHRpb25hbC4gU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGRyYXdpbmcgc2hvdWxkIGJlIGNvdW50ZXJjbG9ja3dpc2Ugb3IgY2xvY2t3aXNlLiBGYWxzZSBpcyBkZWZhdWx0LCBhbmQgaW5kaWNhdGVzIGNsb2Nrd2lzZSwgd2hpbGUgdHJ1ZSBpbmRpY2F0ZXMgY291bnRlci1jbG9ja3dpc2UuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjID0gZnVuY3Rpb24oY3gsIGN5LCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBhbnRpY2xvY2t3aXNlKVxue1xuICAgIGFudGljbG9ja3dpc2UgPSBhbnRpY2xvY2t3aXNlIHx8IGZhbHNlO1xuXG4gICAgaWYgKHN0YXJ0QW5nbGUgPT09IGVuZEFuZ2xlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYoICFhbnRpY2xvY2t3aXNlICYmIGVuZEFuZ2xlIDw9IHN0YXJ0QW5nbGUgKVxuICAgIHtcbiAgICAgICAgZW5kQW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuICAgIGVsc2UgaWYoIGFudGljbG9ja3dpc2UgJiYgc3RhcnRBbmdsZSA8PSBlbmRBbmdsZSApXG4gICAge1xuICAgICAgICBzdGFydEFuZ2xlICs9IE1hdGguUEkgKiAyO1xuICAgIH1cblxuICAgIHZhciBzd2VlcCA9IGFudGljbG9ja3dpc2UgPyAoc3RhcnRBbmdsZSAtIGVuZEFuZ2xlKSAqIC0xIDogKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSk7XG4gICAgdmFyIHNlZ3MgPSAgTWF0aC5jZWlsKE1hdGguYWJzKHN3ZWVwKSAvIChNYXRoLlBJICogMikpICogNDA7XG5cbiAgICBpZihzd2VlcCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBzdGFydFggPSBjeCArIE1hdGguY29zKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuICAgIHZhciBzdGFydFkgPSBjeSArIE1hdGguc2luKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHN0YXJ0WCwgc3RhcnRZKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciB0aGV0YSA9IHN3ZWVwLyhzZWdzKjIpO1xuICAgIHZhciB0aGV0YTIgPSB0aGV0YSoyO1xuXG4gICAgdmFyIGNUaGV0YSA9IE1hdGguY29zKHRoZXRhKTtcbiAgICB2YXIgc1RoZXRhID0gTWF0aC5zaW4odGhldGEpO1xuXG4gICAgdmFyIHNlZ01pbnVzID0gc2VncyAtIDE7XG5cbiAgICB2YXIgcmVtYWluZGVyID0gKCBzZWdNaW51cyAlIDEgKSAvIHNlZ01pbnVzO1xuXG4gICAgZm9yKHZhciBpPTA7IGk8PXNlZ01pbnVzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcmVhbCA9ICBpICsgcmVtYWluZGVyICogaTtcblxuXG4gICAgICAgIHZhciBhbmdsZSA9ICgodGhldGEpICsgc3RhcnRBbmdsZSArICh0aGV0YTIgKiByZWFsKSk7XG5cbiAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgIHZhciBzID0gLU1hdGguc2luKGFuZ2xlKTtcblxuICAgICAgICBwb2ludHMucHVzaCgoIChjVGhldGEgKiAgYykgKyAoc1RoZXRhICogcykgKSAqIHJhZGl1cyArIGN4LFxuICAgICAgICAgICAgICAgICAgICAoIChjVGhldGEgKiAtcykgKyAoc1RoZXRhICogYykgKSAqIHJhZGl1cyArIGN5KTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIGEgc2ltcGxlIG9uZS1jb2xvciBmaWxsIHRoYXQgc3Vic2VxdWVudCBjYWxscyB0byBvdGhlciBHcmFwaGljcyBtZXRob2RzXG4gKiAoc3VjaCBhcyBsaW5lVG8oKSBvciBkcmF3Q2lyY2xlKCkpIHVzZSB3aGVuIGRyYXdpbmcuXG4gKlxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlZ2luRmlsbCA9IGZ1bmN0aW9uIChjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5maWxsaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPD0gMilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsID0gdGhpcy5maWxsaW5nO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQ29sb3IgPSB0aGlzLmZpbGxDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbEFscGhhID0gdGhpcy5maWxsQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBmaWxsIHRvIHRoZSBsaW5lcyBhbmQgc2hhcGVzIHRoYXQgd2VyZSBhZGRlZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHRoZSBiZWdpbkZpbGwoKSBtZXRob2QuXG4gKlxuICogQHJldHVybiB7R3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5lbmRGaWxsID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IG51bGw7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCApXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguUmVjdGFuZ2xlKHgseSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gUmFkaXVzIG9mIHRoZSByZWN0YW5nbGUgY29ybmVyc1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSb3VuZGVkUmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzIClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5Sb3VuZGVkUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgY2lyY2xlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3Q2lyY2xlID0gZnVuY3Rpb24gKHgsIHksIHJhZGl1cylcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5DaXJjbGUoeCx5LCByYWRpdXMpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhbiBlbGxpcHNlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIGhhbGYgd2lkdGggb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd0VsbGlwc2UgPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5FbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIHBvbHlnb24gdXNpbmcgdGhlIGdpdmVuIHBhdGguXG4gKlxuICogQHBhcmFtIHBhdGgge251bWJlcltdfFBJWEkuUG9pbnRbXX0gVGhlIHBhdGggZGF0YSB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgcG9seWdvbi5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UG9seWdvbiA9IGZ1bmN0aW9uIChwYXRoKVxue1xuICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGFzc2lnbm1lbnQgZGVvcHRcbiAgICAvLyBzZWUgc2VjdGlvbiAzLjE6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgIHZhciBwb2ludHMgPSBwYXRoO1xuXG4gICAgdmFyIGNsb3NlZCA9IHRydWU7XG5cbiAgICBpZiAocG9pbnRzIGluc3RhbmNlb2YgbWF0aC5Qb2x5Z29uKVxuICAgIHtcbiAgICAgICAgY2xvc2VkID0gcG9pbnRzLmNsb3NlZDtcbiAgICAgICAgcG9pbnRzID0gcG9pbnRzLnBvaW50cztcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHNbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHBvaW50cyk7XG4gICAgc2hhcGUuY2xvc2VkID0gY2xvc2VkO1xuXG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZ3JhcGhpY3MgdGhhdCB3ZXJlIGRyYXduIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LCBhbmQgcmVzZXRzIGZpbGwgYW5kIGxpbmUgc3R5bGUgc2V0dGluZ3MuXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG4gICAgdGhpcy5maWxsaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmNsZWFyRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gW107XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGdlb21ldHJ5IGlzIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNob3VsZCBiZSBvbmUgb2YgdGhlIHNjYWxlTW9kZSBjb25zdHNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBncmFwaGljcyBvYmplY3RcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVzb2x1dGlvbiwgc2NhbGVNb2RlKVxue1xuXG4gICAgcmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGggKiByZXNvbHV0aW9uLCBib3VuZHMuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXNCdWZmZXIuY29udGV4dC5zY2FsZShyZXNvbHV0aW9uLCByZXNvbHV0aW9uKTtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIGNhbnZhc0J1ZmZlci5jb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcblxuICAgIGlmICh0aGlzLmdsRGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5nbERpcnR5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5yZW5kZXIodGhpcyk7XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5pc01hc2sgPT09IHRydWUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHRpbnQgaGFzIGNoYW5nZWQsIHNldCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRpcnR5LlxuICAgIGlmICh0aGlzLl9wcmV2VGludCAhPT0gdGhpcy50aW50KSB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIHRoaXMgY29kZSBtYXkgc3RpbGwgYmUgbmVlZGVkIHNvIGxlYXZpbmcgZm9yIG5vdy4uXG4gICAgLy9cbiAgICAvKlxuICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuZGlydHkgfHwgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVDYWNoZWRTcHJpdGUoKTtcblxuICAgICAgICAgICAgLy8gd2Ugd2lsbCBhbHNvIG5lZWQgdG8gdXBkYXRlIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUoKTtcblxuICAgICAgICAgICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFscGhhID0gdGhpcy5hbHBoYTtcblxuICAgICAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLl9jYWNoZWRTcHJpdGUsIHJlbmRlcmVyKTtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgICovXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY29udGV4dCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYm91bmRzIG9mIHRoZSBncmFwaGljIHNoYXBlIGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IFRoZSB3b3JsZCB0cmFuc2Zvcm0gbWF0cml4IHRvIHVzZSwgZGVmYXVsdHMgdG8gdGhpc1xuICogIG9iamVjdCdzIHdvcmxkVHJhbnNmb3JtLlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICAvLyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBpdGVtIGlzIGEgbWFzayFcbiAgICAgICAgaWYgKCF0aGlzLnJlbmRlcmFibGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJvdW5kc0RpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICAgICAgICAgIHRoaXMuZ2xEaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYm91bmRzRGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9sb2NhbEJvdW5kcztcblxuICAgICAgICB2YXIgdzAgPSBib3VuZHMueDtcbiAgICAgICAgdmFyIHcxID0gYm91bmRzLndpZHRoICsgYm91bmRzLng7XG5cbiAgICAgICAgdmFyIGgwID0gYm91bmRzLnk7XG4gICAgICAgIHZhciBoMSA9IGJvdW5kcy5oZWlnaHQgKyBib3VuZHMueTtcblxuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAgICAgdmFyIHgyID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgICAgICB2YXIgeTMgPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgICAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgbWF4WCA9IHgxO1xuICAgICAgICB2YXIgbWF4WSA9IHkxO1xuXG4gICAgICAgIHZhciBtaW5YID0geDE7XG4gICAgICAgIHZhciBtaW5ZID0geTE7XG5cbiAgICAgICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICAgICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICAgICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgICAgICB0aGlzLl9ib3VuZHMueCA9IG1pblg7XG4gICAgICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy55ID0gbWluWTtcbiAgICAgICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSB0aGlzLl9ib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBncmFwaGljcyBvYmplY3RcbipcbiogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4qL1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciBncmFwaGljc0RhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKCFkYXRhLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gb25seSBkZWFsIHdpdGggZmlsbHMuLlxuICAgICAgICBpZiAoZGF0YS5zaGFwZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCBkYXRhLnNoYXBlLmNvbnRhaW5zKCB0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkgKSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAqXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcblxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICBpZiAodGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdmFyIHNoYXBlLCBwb2ludHMsIHgsIHksIHcsIGg7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVtpXTtcbiAgICAgICAgICAgIHZhciB0eXBlID0gZGF0YS50eXBlO1xuICAgICAgICAgICAgdmFyIGxpbmVXaWR0aCA9IGRhdGEubGluZVdpZHRoO1xuICAgICAgICAgICAgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QgfHwgdHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLnggLSBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueSAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS53aWR0aCArIGxpbmVXaWR0aDtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLnJhZGl1cyArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLng7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLmhlaWdodCArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFBPTFlcbiAgICAgICAgICAgICAgICBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBvaW50cy5sZW5ndGg7IGogKz0gMilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHggPSBwb2ludHNbal07XG4gICAgICAgICAgICAgICAgICAgIHkgPSBwb2ludHNbaisxXTtcblxuICAgICAgICAgICAgICAgICAgICBtaW5YID0geC1saW5lV2lkdGggPCBtaW5YID8geC1saW5lV2lkdGggOiBtaW5YO1xuICAgICAgICAgICAgICAgICAgICBtYXhYID0geCtsaW5lV2lkdGggPiBtYXhYID8geCtsaW5lV2lkdGggOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblkgPSB5LWxpbmVXaWR0aCA8IG1pblkgPyB5LWxpbmVXaWR0aCA6IG1pblk7XG4gICAgICAgICAgICAgICAgICAgIG1heFkgPSB5K2xpbmVXaWR0aCA+IG1heFkgPyB5K2xpbmVXaWR0aCA6IG1heFk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIG1pblggPSAwO1xuICAgICAgICBtYXhYID0gMDtcbiAgICAgICAgbWluWSA9IDA7XG4gICAgICAgIG1heFkgPSAwO1xuICAgIH1cblxuICAgIHZhciBwYWRkaW5nID0gdGhpcy5ib3VuZHNQYWRkaW5nO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueCA9IG1pblggLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLndpZHRoID0gKG1heFggLSBtaW5YKSArIHBhZGRpbmcgKiAyO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueSA9IG1pblkgLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLmhlaWdodCA9IChtYXhZIC0gbWluWSkgKyBwYWRkaW5nICogMjtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjYWNoZWQgc3ByaXRlIHdoZW4gdGhlIHNwcml0ZSBoYXMgY2FjaGVBc0JpdG1hcCA9IHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIGlmICghdGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgdmFyIGNhbnZhc0J1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcbiAgICAgICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzQnVmZmVyLmNhbnZhcyk7XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlciA9IGNhbnZhc0J1ZmZlcjtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLnJlc2l6ZShib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIC8vIGxldmVyYWdlIHRoZSBhbmNob3IgdG8gYWNjb3VudCBmb3IgdGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudFxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQuc2F2ZSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC50cmFuc2xhdGUoLWJvdW5kcy54LC1ib3VuZHMueSk7XG5cbiAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3MgdG8gMSBmb3IgdGhlIHJlbmRlci4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIG5vdyByZW5kZXIgdGhlIGdyYXBoaWMuLlxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dCk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xufTtcbiovXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVDYWNoZWRTcHJpdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2FjaGVkU3ByaXRlID0gdGhpcy5fY2FjaGVkU3ByaXRlO1xuICAgIHZhciB0ZXh0dXJlID0gY2FjaGVkU3ByaXRlLnRleHR1cmU7XG4gICAgdmFyIGNhbnZhcyA9IGNhY2hlZFNwcml0ZS5idWZmZXIuY2FudmFzO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG4gICAgdGV4dHVyZS5jcm9wLndpZHRoID0gdGV4dHVyZS5mcmFtZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmNyb3AuaGVpZ2h0ID0gdGV4dHVyZS5mcmFtZS5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgY2FjaGVkU3ByaXRlLl93aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICBjYWNoZWRTcHJpdGUuX2hlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIGRpcnR5IGJhc2UgdGV4dHVyZXNcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmRpcnR5KCk7XG59OyovXG5cbi8qKlxuICogRGVzdHJveXMgYSBwcmV2aW91cyBjYWNoZWQgc3ByaXRlLlxuICpcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95Q2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUudGV4dHVyZS5kZXN0cm95KHRydWUpO1xuXG4gICAgLy8gbGV0IHRoZSBnYyBjb2xsZWN0IHRoZSB1bnVzZWQgc3ByaXRlXG4gICAgLy8gVE9ETyBjb3VsZCBiZSBvYmplY3QgcG9vbGVkIVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59OyovXG5cbi8qKlxuICogRHJhd3MgdGhlIGdpdmVuIHNoYXBlIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LiBDYW4gYmUgYW55IG9mIENpcmNsZSwgUmVjdGFuZ2xlLCBFbGxpcHNlLCBMaW5lIG9yIFBvbHlnb24uXG4gKlxuICogQHBhcmFtIHNoYXBlIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc0RhdGF9IFRoZSBnZW5lcmF0ZWQgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdTaGFwZSA9IGZ1bmN0aW9uIChzaGFwZSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIC8vIGNoZWNrIGN1cnJlbnQgcGF0aCFcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YS5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgdmFyIGRhdGEgPSBuZXcgR3JhcGhpY3NEYXRhKHRoaXMubGluZVdpZHRoLCB0aGlzLmxpbmVDb2xvciwgdGhpcy5saW5lQWxwaGEsIHRoaXMuZmlsbENvbG9yLCB0aGlzLmZpbGxBbHBoYSwgdGhpcy5maWxsaW5nLCBzaGFwZSk7XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YS5wdXNoKGRhdGEpO1xuXG4gICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAge1xuICAgICAgICBkYXRhLnNoYXBlLmNsb3NlZCA9IGRhdGEuc2hhcGUuY2xvc2VkIHx8IHRoaXMuZmlsbGluZztcbiAgICAgICAgdGhpcy5jdXJyZW50UGF0aCA9IGRhdGE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGRhdGE7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgLy8gZGVzdHJveSBlYWNoIG9mIHRoZSBHcmFwaGljc0RhdGEgb2JqZWN0c1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8vIGZvciBlYWNoIHdlYmdsIGRhdGEgZW50cnksIGRlc3Ryb3kgdGhlIFdlYkdMR3JhcGhpY3NEYXRhXG4gICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fd2ViZ2wpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl93ZWJnbFtpZF0uZGF0YS5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgdGhpcy5fd2ViZ2xbaWRdLmRhdGFbal0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG4gICAgdGhpcy5fd2ViZ2wgPSBudWxsO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEEgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gbGluZVdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gZmlsbENvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGxBbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBmaWxsICAgICAge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICogQHBhcmFtIHNoYXBlICAgICB7Q2lyY2xlfFJlY3RhbmdsZXxFbGxpcHNlfExpbmV8UG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICovXG5mdW5jdGlvbiBHcmFwaGljc0RhdGEobGluZVdpZHRoLCBsaW5lQ29sb3IsIGxpbmVBbHBoYSwgZmlsbENvbG9yLCBmaWxsQWxwaGEsIGZpbGwsIHNoYXBlKVxue1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQ29sb3IgPSBsaW5lQ29sb3I7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQWxwaGEgPSBsaW5lQWxwaGE7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLl9saW5lVGludCA9IGxpbmVDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxDb2xvciA9IGZpbGxDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IGZpbGxBbHBoYTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBjYWNoZWQgdGludCBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuX2ZpbGxUaW50ID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhcGUgaXMgZmlsbGVkIHdpdGggYSBjb2xvdXJcbiAgICAgKi9cbiAgICB0aGlzLmZpbGwgPSBmaWxsO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICAgICAqL1xuICAgIHRoaXMuc2hhcGUgPSBzaGFwZTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBUaGUgdHlwZSBvZiB0aGUgc2hhcGUsIHNlZSB0aGUgQ29uc3QuU2hhcGVzIGZpbGUgZm9yIGFsbCB0aGUgZXhpc3RpbmcgdHlwZXMsXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gc2hhcGUudHlwZTtcbn1cblxuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3NEYXRhIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBHcmFwaGljc0RhdGEoXG4gICAgICAgIHRoaXMubGluZVdpZHRoLFxuICAgICAgICB0aGlzLmxpbmVDb2xvcixcbiAgICAgICAgdGhpcy5saW5lQWxwaGEsXG4gICAgICAgIHRoaXMuZmlsbENvbG9yLFxuICAgICAgICB0aGlzLmZpbGxBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsLFxuICAgICAgICB0aGlzLnNoYXBlXG4gICAgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIGRhdGEuXG4gKi9cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnNoYXBlID0gbnVsbDtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL1dlYkdMR3JhcGhpY3NEYXRhJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuXG4gICAgLy8gc29tZSBkcmF3aW5nIGZ1bmN0aW9ucy4uXG4gICAgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi91dGlscy9idWlsZExpbmUnKTtcbiAgICBidWlsZFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUG9seScpO1xuICAgIGJ1aWxkQ29tcGxleFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ29tcGxleFBvbHknKTtcbiAgICBidWlsZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSZWN0YW5nbGUnKTtcbiAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkQ2lyY2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZENpcmNsZScpO1xuXG4gICAgZWFyY3V0ID0gcmVxdWlyZSgnZWFyY3V0Jyk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IFtdO1xuXG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgYSBwb2x5IGNhbiBjb250YWluIGJlZm9yZSBpdCBpcyByZW5kZXJlZCBhcyBhIGNvbXBsZXggcG9seWdvbiAodXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyKVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgPSAyMDA7XG59XG5cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc1JlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdncmFwaGljcycsIEdyYXBoaWNzUmVuZGVyZXIpO1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMuZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzLmdsKVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHJlbmRlcmVyLlxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YVBvb2wubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBudWxsO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuICAvLyAgY29uc29sZS5sb2coZ3JhcGhpY3MpXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5IHx8ICFncmFwaGljcy5fd2ViR0xbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljcyhncmFwaGljcyk7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIFRoaXMgIGNvdWxkIGJlIHNwZWVkZWQgdXAgZm9yIHN1cmUhXG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggZ3JhcGhpY3MuYmxlbmRNb2RlICk7XG5cbi8vICAgIHZhciBtYXRyaXggPSAgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0uY2xvbmUoKTtcbi8vICAgIHZhciBtYXRyaXggPSAgcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7XG4vLyAgICBtYXRyaXguYXBwZW5kKGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gd2ViR0wuZGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTC5kYXRhW2ldLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyBmaXggdGhpcyBvbmUhXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEgKiB3ZWJHTERhdGEuYWxwaGEpO1xuXG4gICAgICAgICAgICAvLyByZW5kZXIgcXVhZC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgcmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeCA9IGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLmxvY2F0aW9uKTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHVwZGF0ZVxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgLy8gZ2V0IHRoZSBjb250ZXh0cyBncmFwaGljcyBvYmplY3RcbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd2ViR0wgY29udGV4dCB0aW1lIHRvIGNyZWF0ZSBpdCFcbiAgICBpZiAoIXdlYkdMKVxuICAgIHtcbiAgICAgICAgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdID0ge2xhc3RJbmRleDowLCBkYXRhOltdLCBnbDpnbH07XG4gICAgfVxuXG4gICBcbiAgICAvLyBmbGFnIHRoZSBncmFwaGljcyBhcyBub3QgZGlydHkgYXMgd2UgYXJlIGFib3V0IHRvIHVwZGF0ZSBpdC4uLlxuICAgIGdyYXBoaWNzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB2YXIgaTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGNsZWFyZWQgdGhlIGdyYXBoaWNzIG9iamVjdCB3ZSB3aWxsIG5lZWQgdG8gY2xlYXIgZXZlcnkgb2JqZWN0XG4gICAgaWYgKGdyYXBoaWNzLmNsZWFyRGlydHkpXG4gICAge1xuICAgICAgICBncmFwaGljcy5jbGVhckRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuZCByZXR1cm4gYWxsIHRoZSB3ZWJHTERhdGFzIHRvIHRoZSBvYmplY3QgcG9vbCBzbyB0aGFuIGNhbiBiZSByZXVzZWQgbGF0ZXIgb25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBncmFwaGljc0RhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucHVzaCggZ3JhcGhpY3NEYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgYXJyYXkgYW5kIHJlc2V0IHRoZSBpbmRleC4uXG4gICAgICAgIHdlYkdMLmRhdGEgPSBbXTtcbiAgICAgICAgd2ViR0wubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBncmFwaGljcyBkYXRhcyBhbmQgY29uc3RydWN0IGVhY2ggb25lLi5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGEgY29tcGxleCBmaWxsIHRoZW4gdGhlIG5ldyBzdGVuY2lsIGJ1ZmZlciB0ZWNobmlxdWUgd2lsbCBiZSB1c2VkXG4gICAgLy8gb3RoZXIgd2lzZSBncmFwaGljcyBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIGludG8gYSBiYXRjaC4uXG4gICAgZm9yIChpID0gd2ViR0wubGFzdEluZGV4OyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBwb2ludHMgdGhlIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgICAgICAgICAgZGF0YS5wb2ludHMgPSBkYXRhLnNoYXBlLnBvaW50cy5zbGljZSgpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBwb2x5IGlmIHRoZSB2YWx1ZSBpcyB0cnVlIVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50c1swXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTJdIHx8IGRhdGEucG9pbnRzWzFdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKGRhdGEucG9pbnRzWzBdLCBkYXRhLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNQUtFIFNVUkUgV0UgSEFWRSBUSEUgQ09SUkVDVCBUWVBFLi5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA+PSA2KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA8IHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplICogMilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkRyYXdVc2luZ1NpbXBsZSA9IGJ1aWxkUG9seShkYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkRyYXdVc2luZ1NpbXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoID4gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuICAgICAgICAgICAgICAgIGJ1aWxkTGluZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMgfHwgZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZENpcmNsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCsrO1xuICAgIH1cblxuICAgIC8vIHVwbG9hZCBhbGwgdGhlIGRpcnR5IGRhdGEuLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5kaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhLnVwbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gd2ViR0wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSBUT0RPIEBBbHZpblxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5zd2l0Y2hNb2RlID0gZnVuY3Rpb24gKHdlYkdMLCB0eXBlKVxue1xuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICBpZiAoIXdlYkdMLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbd2ViR0wuZGF0YS5sZW5ndGgtMV07XG5cbiAgICAgICAgaWYgKCh3ZWJHTERhdGEucG9pbnRzLmxlbmd0aCA+IDMyMDAwMCkgfHwgd2ViR0xEYXRhLm1vZGUgIT09IHR5cGUgfHwgdHlwZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdlYkdMRGF0YS5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gd2ViR0xEYXRhO1xufTtcblxuIiwiLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyBXZWJHTCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gV2ViR0xHcmFwaGljc0RhdGEoZ2wpIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vVE9ETyBkb2VzIHRoaXMgbmVlZCB0byBiZSBzcGxpdCBiZWZvcmUgdXBsb2Rpbmc/P1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvbG9yIGNvbXBvbmVudHMgKHIsZyxiKVxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3IgPSBbMCwwLDBdOyAvLyBjb2xvciBzcGxpdCFcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBvaW50cyB0byBkcmF3XG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIHRvZG8gQGFsdmluXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubW9kZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGdyYXBoaWNzIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHZlcnRpY2VzIGFuZCB0aGUgaW5kaWNlc1xuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb2ludHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmluZGljZXMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4vLyAgICB0aGlzLmxhc3RJbmRleCA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5nbFBvaW50cyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5wb2ludHMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuYnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5nbFBvaW50cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5nbEluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuZ2xJbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLnBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBcbiAgICB0aGlzLmdsID0gbnVsbDtcblxuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoZ2wpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgZ2wsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgY2lyY2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byBkcmF3XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ2lyY2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIHZhciBjaXJjbGVEYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gY2lyY2xlRGF0YS54O1xuICAgIHZhciB5ID0gY2lyY2xlRGF0YS55O1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuXG4gICAgLy8gVE9ETyAtIGJpdCBoYWNreT8/XG4gICAgaWYgKGdyYXBoaWNzRGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB0b3RhbFNlZ3MgPSBNYXRoLmZsb29yKDMwICogTWF0aC5zcXJ0KGNpcmNsZURhdGEucmFkaXVzKSkgfHwgTWF0aC5mbG9vcigxNSAqIE1hdGguc3FydChjaXJjbGVEYXRhLndpZHRoICsgY2lyY2xlRGF0YS5oZWlnaHQpKTtcbiAgICB2YXIgc2VnID0gKE1hdGguUEkgKiAyKSAvIHRvdGFsU2VncyA7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcyk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDEgOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCx5LCByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKyssIHZlY1BvcysrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MtMSk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDaXJjbGU7IiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuICAgIFxuXG5cbi8qKlxuICogQnVpbGRzIGEgY29tcGxleCBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDb21wbGV4UG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvL1RPRE8gLSBubyBuZWVkIHRvIGNvcHkgdGhpcyBhcyBpdCBnZXRzIHR1cm5lZCBpbnRvIGEgRkxvYXQzMkFycmF5IGFueXdheXMuLlxuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzLnNsaWNlKCk7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDYpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgd2ViR0xEYXRhLnBvaW50cyA9IHBvaW50cztcbiAgICB3ZWJHTERhdGEuYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHdlYkdMRGF0YS5jb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG5cbiAgICAvLyBjYWxjbGF0ZSB0aGUgYm91bmRzLi5cbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIHZhciB4LHk7XG5cbiAgICAvLyBnZXQgc2l6ZS4uXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKz0yKVxuICAgIHtcbiAgICAgICAgeCA9IHBvaW50c1tpXTtcbiAgICAgICAgeSA9IHBvaW50c1tpKzFdO1xuXG4gICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICBtYXhYID0geCA+IG1heFggPyB4IDogbWF4WDtcblxuICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcbiAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgcXVhZCB0byB0aGUgZW5kIGNvcyB0aGVyZSBpcyBubyBwb2ludCBtYWtpbmcgYW5vdGhlciBidWZmZXIhXG4gICAgcG9pbnRzLnB1c2gobWluWCwgbWluWSxcbiAgICAgICAgICAgICAgICBtYXhYLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1heFksXG4gICAgICAgICAgICAgICAgbWluWCwgbWF4WSk7XG5cbiAgICAvLyBwdXNoIGEgcXVhZCBvbnRvIHRoZSBlbmQuLlxuXG4gICAgLy9UT0RPIC0gdGhpcyBhaW50IG5lZWRlZCFcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKCBpICk7XG4gICAgfVxuXG59O1xuXG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENvbXBsZXhQb2x5OyIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBsaW5lIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRMaW5lID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIFRPRE8gT1BUSU1JU0UhXG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGlmIHRoZSBsaW5lIHdpZHRoIGlzIGFuIG9kZCBudW1iZXIgYWRkIDAuNSB0byBhbGlnbiB0byBhIHdob2xlIHBpeGVsXG4gICAgLy8gY29tbWVudGluZyB0aGlzIG91dCBmaXhlcyAjNzExIGFuZCAjMTYyMFxuICAgIC8vIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoJTIpXG4gICAgLy8ge1xuICAgIC8vICAgICBmb3IgKGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKVxuICAgIC8vICAgICB7XG4gICAgLy8gICAgICAgICBwb2ludHNbaV0gKz0gMC41O1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBmaXJzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgIHZhciBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgIC8vIGlmIHRoZSBmaXJzdCBwb2ludCBpcyB0aGUgbGFzdCBwb2ludCAtIGdvbm5hIGhhdmUgaXNzdWVzIDopXG4gICAgaWYgKGZpcnN0UG9pbnQueCA9PT0gbGFzdFBvaW50LnggJiYgZmlyc3RQb2ludC55ID09PSBsYXN0UG9pbnQueSlcbiAgICB7XG4gICAgICAgIC8vIG5lZWQgdG8gY2xvbmUgYXMgd2UgYXJlIGdvaW5nIHRvIHNsaWdodGx5IG1vZGlmeSB0aGUgc2hhcGUuLlxuICAgICAgICBwb2ludHMgPSBwb2ludHMuc2xpY2UoKTtcblxuICAgICAgICBwb2ludHMucG9wKCk7XG4gICAgICAgIHBvaW50cy5wb3AoKTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgICAgICB2YXIgbWlkUG9pbnRYID0gbGFzdFBvaW50LnggKyAoZmlyc3RQb2ludC54IC0gbGFzdFBvaW50LngpICowLjU7XG4gICAgICAgIHZhciBtaWRQb2ludFkgPSBsYXN0UG9pbnQueSArIChmaXJzdFBvaW50LnkgLSBsYXN0UG9pbnQueSkgKjAuNTtcblxuICAgICAgICBwb2ludHMudW5zaGlmdChtaWRQb2ludFgsIG1pZFBvaW50WSk7XG4gICAgICAgIHBvaW50cy5wdXNoKG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICB9XG5cbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgIHZhciBpbmRleENvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICB2YXIgaW5kZXhTdGFydCA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgLy8gRFJBVyB0aGUgTGluZVxuICAgIHZhciB3aWR0aCA9IGdyYXBoaWNzRGF0YS5saW5lV2lkdGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmxpbmVDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmxpbmVBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciBweCwgcHksIHAxeCwgcDF5LCBwMngsIHAyeSwgcDN4LCBwM3k7XG4gICAgdmFyIHBlcnB4LCBwZXJweSwgcGVycDJ4LCBwZXJwMnksIHBlcnAzeCwgcGVycDN5O1xuICAgIHZhciBhMSwgYjEsIGMxLCBhMiwgYjIsIGMyO1xuICAgIHZhciBkZW5vbSwgcGRpc3QsIGRpc3Q7XG5cbiAgICBwMXggPSBwb2ludHNbMF07XG4gICAgcDF5ID0gcG9pbnRzWzFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWzJdO1xuICAgIHAyeSA9IHBvaW50c1szXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gIHAxeCAtIHAyeDtcblxuICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG5cbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAvLyBzdGFydFxuICAgIHZlcnRzLnB1c2gocDF4IC0gcGVycHggLCBwMXkgLSBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAxeCArIHBlcnB4ICwgcDF5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgZm9yIChpID0gMTsgaSA8IGxlbmd0aC0xOyBpKyspXG4gICAge1xuICAgICAgICBwMXggPSBwb2ludHNbKGktMSkqMl07XG4gICAgICAgIHAxeSA9IHBvaW50c1soaS0xKSoyICsgMV07XG5cbiAgICAgICAgcDJ4ID0gcG9pbnRzWyhpKSoyXTtcbiAgICAgICAgcDJ5ID0gcG9pbnRzWyhpKSoyICsgMV07XG5cbiAgICAgICAgcDN4ID0gcG9pbnRzWyhpKzEpKjJdO1xuICAgICAgICBwM3kgPSBwb2ludHNbKGkrMSkqMiArIDFdO1xuXG4gICAgICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgICAgICBwZXJweSA9IHAxeCAtIHAyeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgICAgICBwZXJweCAvPSBkaXN0O1xuICAgICAgICBwZXJweSAvPSBkaXN0O1xuICAgICAgICBwZXJweCAqPSB3aWR0aDtcbiAgICAgICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAgICAgcGVycDJ4ID0gLShwMnkgLSBwM3kpO1xuICAgICAgICBwZXJwMnkgPSBwMnggLSBwM3g7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwMngqcGVycDJ4ICsgcGVycDJ5KnBlcnAyeSk7XG4gICAgICAgIHBlcnAyeCAvPSBkaXN0O1xuICAgICAgICBwZXJwMnkgLz0gZGlzdDtcbiAgICAgICAgcGVycDJ4ICo9IHdpZHRoO1xuICAgICAgICBwZXJwMnkgKj0gd2lkdGg7XG5cbiAgICAgICAgYTEgPSAoLXBlcnB5ICsgcDF5KSAtICgtcGVycHkgKyBwMnkpO1xuICAgICAgICBiMSA9ICgtcGVycHggKyBwMngpIC0gKC1wZXJweCArIHAxeCk7XG4gICAgICAgIGMxID0gKC1wZXJweCArIHAxeCkgKiAoLXBlcnB5ICsgcDJ5KSAtICgtcGVycHggKyBwMngpICogKC1wZXJweSArIHAxeSk7XG4gICAgICAgIGEyID0gKC1wZXJwMnkgKyBwM3kpIC0gKC1wZXJwMnkgKyBwMnkpO1xuICAgICAgICBiMiA9ICgtcGVycDJ4ICsgcDJ4KSAtICgtcGVycDJ4ICsgcDN4KTtcbiAgICAgICAgYzIgPSAoLXBlcnAyeCArIHAzeCkgKiAoLXBlcnAyeSArIHAyeSkgLSAoLXBlcnAyeCArIHAyeCkgKiAoLXBlcnAyeSArIHAzeSk7XG5cbiAgICAgICAgZGVub20gPSBhMSpiMiAtIGEyKmIxO1xuXG4gICAgICAgIGlmIChNYXRoLmFicyhkZW5vbSkgPCAwLjEgKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIGRlbm9tKz0xMC4xO1xuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJweCAsIHAyeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBweCA9IChiMSpjMiAtIGIyKmMxKS9kZW5vbTtcbiAgICAgICAgcHkgPSAoYTIqYzEgLSBhMSpjMikvZGVub207XG5cblxuICAgICAgICBwZGlzdCA9IChweCAtcDJ4KSAqIChweCAtcDJ4KSArIChweSAtcDJ5KSAqIChweSAtcDJ5KTtcblxuXG4gICAgICAgIGlmIChwZGlzdCA+IDE0MCAqIDE0MClcbiAgICAgICAge1xuICAgICAgICAgICAgcGVycDN4ID0gcGVycHggLSBwZXJwMng7XG4gICAgICAgICAgICBwZXJwM3kgPSBwZXJweSAtIHBlcnAyeTtcblxuICAgICAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwM3gqcGVycDN4ICsgcGVycDN5KnBlcnAzeSk7XG4gICAgICAgICAgICBwZXJwM3ggLz0gZGlzdDtcbiAgICAgICAgICAgIHBlcnAzeSAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN4ICo9IHdpZHRoO1xuICAgICAgICAgICAgcGVycDN5ICo9IHdpZHRoO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycDN4LCBwMnkgK3BlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJwM3gsIHAyeSAtcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRleENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocHggLCBweSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSAocHgtcDJ4KSwgcDJ5IC0gKHB5IC0gcDJ5KSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHAxeCA9IHBvaW50c1sobGVuZ3RoLTIpKjJdO1xuICAgIHAxeSA9IHBvaW50c1sobGVuZ3RoLTIpKjIgKyAxXTtcblxuICAgIHAyeCA9IHBvaW50c1sobGVuZ3RoLTEpKjJdO1xuICAgIHAyeSA9IHBvaW50c1sobGVuZ3RoLTEpKjIgKyAxXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5KTtcbiAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBpbmRleENvdW50OyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydCsrKTtcbiAgICB9XG5cbiAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydC0xKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRMaW5lOyIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcG9seWdvbiB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuV2ViR0xHcmFwaGljc0RhdGF9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocG9pbnRzLCBudWxsLCAyKTtcblxuICAgIGlmICghdHJpYW5nbGVzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgdmVydFBvcyA9IHZlcnRzLmxlbmd0aCAvIDY7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICt2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVydFBvcyk7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmVydHMucHVzaChwb2ludHNbaSAqIDJdLCBwb2ludHNbaSAqIDIgKyAxXSxcbiAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRQb2x5O1xuIiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHJlY3RhbmdsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIC0tLSAvL1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIC8vXG4gICAgdmFyIHJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcmVjdERhdGEueDtcbiAgICB2YXIgeSA9IHJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJlY3REYXRhLmhlaWdodDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgLy8gc3RhcnRcbiAgICAgICAgdmVydHMucHVzaCh4LCB5KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAvLyBpbnNlcnQgMiBkZWFkIHRyaWFuZ2xlcy4uXG4gICAgICAgIGluZGljZXMucHVzaCh2ZXJ0UG9zLCB2ZXJ0UG9zLCB2ZXJ0UG9zKzEsIHZlcnRQb3MrMiwgdmVydFBvcyszLCB2ZXJ0UG9zKzMpO1xuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSBbeCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHkgKyBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICB4LCB5XTtcblxuXG4gICAgICAgIGJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJlY3RhbmdsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG4vKipcbiAqIEJ1aWxkcyBhIHJvdW5kZWQgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG5idWlsZFJvdW5kZWRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIHJyZWN0RGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IHJyZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcnJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcnJlY3REYXRhLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSBycmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgdmFyIHJhZGl1cyA9IHJyZWN0RGF0YS5yYWRpdXM7XG5cbiAgICB2YXIgcmVjUG9pbnRzID0gW107XG4gICAgcmVjUG9pbnRzLnB1c2goeCwgeSArIHJhZGl1cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4LCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCB4LCB5ICsgaGVpZ2h0LCB4ICsgcmFkaXVzLCB5ICsgaGVpZ2h0LCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoIC0gcmFkaXVzLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCAtIHJhZGl1cywgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyB3aWR0aCwgeSArIHJhZGl1cywgeCArIHdpZHRoLCB5LCB4ICsgd2lkdGggLSByYWRpdXMsIHksIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgcmFkaXVzLCB5LCB4LCB5LCB4LCB5ICsgcmFkaXVzICsgMC4wMDAwMDAwMDAxLCByZWNQb2ludHMpO1xuXG4gICAgLy8gdGhpcyB0aW55IG51bWJlciBkZWFscyB3aXRoIHRoZSBpc3N1ZSB0aGF0IG9jY3VycyB3aGVuIHBvaW50cyBvdmVybGFwIGFuZCBlYXJjdXQgZmFpbHMgdG8gdHJpYW5ndWxhdGUgdGhlIGl0ZW0uXG4gICAgLy8gVE9ETyAtIGZpeCB0aGlzIHByb3Blcmx5LCB0aGlzIGlzIG5vdCB2ZXJ5IGVsZWdhbnQuLiBidXQgaXQgd29ya3MgZm9yIG5vdy5cblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICB2YXIgdHJpYW5nbGVzID0gZWFyY3V0KHJlY1BvaW50cywgbnVsbCwgMik7XG5cbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICAgICAge1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVjUG9zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZWNQb2ludHMubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gocmVjUG9pbnRzW2ldLCByZWNQb2ludHNbKytpXSwgciwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHJlY1BvaW50cztcblxuICAgICAgICB0aGlzLmJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlLiAoaGVscGVyIGZ1bmN0aW9uLi4pXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBmcm9tWCB7bnVtYmVyfSBPcmlnaW4gcG9pbnQgeFxuICogQHBhcmFtIGZyb21ZIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcGFyYW0gW291dF0ge251bWJlcltdfSBUaGUgb3V0cHV0IGFycmF5IHRvIGFkZCBwb2ludHMgaW50by4gSWYgbm90IHBhc3NlZCwgYSBuZXcgYXJyYXkgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm4ge251bWJlcltdfSBhbiBhcnJheSBvZiBwb2ludHNcbiAqL1xucXVhZHJhdGljQmV6aWVyQ3VydmUgPSBmdW5jdGlvbiAoZnJvbVgsIGZyb21ZLCBjcFgsIGNwWSwgdG9YLCB0b1ksIG91dClcbntcbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICB4YixcbiAgICAgICAgeWIsXG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gb3V0IHx8IFtdO1xuXG4gICAgZnVuY3Rpb24gZ2V0UHQobjEgLCBuMiwgcGVyYykge1xuICAgICAgICB2YXIgZGlmZiA9IG4yIC0gbjE7XG5cbiAgICAgICAgcmV0dXJuIG4xICsgKCBkaWZmICogcGVyYyApO1xuICAgIH1cblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBuOyBpKysgKSB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICAvLyBUaGUgR3JlZW4gTGluZVxuICAgICAgICB4YSA9IGdldFB0KCBmcm9tWCAsIGNwWCAsIGogKTtcbiAgICAgICAgeWEgPSBnZXRQdCggZnJvbVkgLCBjcFkgLCBqICk7XG4gICAgICAgIHhiID0gZ2V0UHQoIGNwWCAsIHRvWCAsIGogKTtcbiAgICAgICAgeWIgPSBnZXRQdCggY3BZICwgdG9ZICwgaiApO1xuXG4gICAgICAgIC8vIFRoZSBCbGFjayBEb3RcbiAgICAgICAgeCA9IGdldFB0KCB4YSAsIHhiICwgaiApO1xuICAgICAgICB5ID0gZ2V0UHQoIHlhICwgeWIgLCBqICk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goeCwgeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50cztcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJvdW5kZWRSZWN0YW5nbGU7IiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgY29yZSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWElcbiAqL1xuLy8gZXhwb3J0IGNvcmUgYW5kIGNvbnN0LiBXZSBhc3NpZ24gY29yZSB0byBjb25zdCBzbyB0aGF0IHRoZSBub24tcmVmZXJlbmNlIHR5cGVzIGluIGNvbnN0IHJlbWFpbiBpbi10YWN0XG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihyZXF1aXJlKCcuL2NvbnN0JyksIHJlcXVpcmUoJy4vbWF0aCcpLCB7XG4gICAgLy8gdXRpbHNcbiAgICB1dGlsczogcmVxdWlyZSgnLi91dGlscycpLFxuICAgIHRpY2tlcjogcmVxdWlyZSgnLi90aWNrZXInKSxcblxuICAgIC8vIGRpc3BsYXlcbiAgICBEaXNwbGF5T2JqZWN0OiAgICAgICAgICByZXF1aXJlKCcuL2Rpc3BsYXkvRGlzcGxheU9iamVjdCcpLFxuICAgIENvbnRhaW5lcjogICAgICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9Db250YWluZXInKSxcblxuICAgIC8vIHNwcml0ZXNcbiAgICBTcHJpdGU6ICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgUGFydGljbGVDb250YWluZXI6ICAgICAgcmVxdWlyZSgnLi9wYXJ0aWNsZXMvUGFydGljbGVDb250YWluZXInKSxcbiAgICBTcHJpdGVSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXInKSxcbiAgICBQYXJ0aWNsZVJlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyJyksXG5cbiAgICAvLyB0ZXh0XG4gICAgVGV4dDogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0L1RleHQnKSxcblxuICAgIC8vIHByaW1pdGl2ZXNcbiAgICBHcmFwaGljczogICAgICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzJyksXG4gICAgR3JhcGhpY3NEYXRhOiAgICAgICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljc0RhdGEnKSxcbiAgICBHcmFwaGljc1JlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHR1cmVzXG4gICAgVGV4dHVyZTogICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQmFzZVRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlVGV4dHVyZScpLFxuICAgIFJlbmRlclRleHR1cmU6ICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEJhc2VSZW5kZXJUZXh0dXJlOiAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlOiAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzOiAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmVVdnMnKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIGNhbnZhc1xuICAgIENhbnZhc1JlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIENhbnZhc0J1ZmZlcjogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIHdlYmdsXG4gICAgV2ViR0xSZW5kZXJlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyksXG4gICAgU2hhZGVyTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIFNoYWRlcjogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyJyksXG4gICAgT2JqZWN0UmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBSZW5kZXJUYXJnZXQ6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcblxuICAgIC8vIGZpbHRlcnMgLSB3ZWJnbFxuICAgIEFic3RyYWN0RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBGWEFBRmlsdGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBTcHJpdGVNYXNrRmlsdGVyOiAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKSxcblxuICAgIGdsQ29yZTogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncGl4aS1nbC1jb3JlJyksXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoaWNoIHJlbmRlcmVyIHlvdSBzaG91bGQgYmUgdXNpbmcuXG4gICAgICogV2ViR0wgaXMgdGhlIHByZWZlcnJlZCByZW5kZXJlciBhcyBpdCBpcyBhIGxvdCBmYXN0ZXIuIElmIHdlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnlcbiAgICAgKiB0aGUgYnJvd3NlciB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBjYW52YXMgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHBhcmFtIHdpZHRoPTgwMCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIGhlaWdodD02MDAge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWYgeW91XG4gICAgICogICAgICBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0XG4gICAgICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyLCByZXRpbmEgd291bGQgYmUgMlxuICAgICAqIEBwYXJhbSBbbm9XZWJHTD1mYWxzZV0ge2Jvb2xlYW59IHByZXZlbnRzIHNlbGVjdGlvbiBvZiBXZWJHTCByZW5kZXJlciwgZXZlbiBpZiBzdWNoIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyZXJ8Q2FudmFzUmVuZGVyZXJ9IFJldHVybnMgV2ViR0wgcmVuZGVyZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgQ2FudmFzUmVuZGVyZXJcbiAgICAgKi9cbiAgICBhdXRvRGV0ZWN0UmVuZGVyZXI6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCBub1dlYkdMKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB3aWR0aCB8fCA4MDA7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAgICAgaWYgKCFub1dlYkdMICYmIGNvcmUudXRpbHMuaXNXZWJHTFN1cHBvcnRlZCgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGNvcmUuV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgY29yZS5DYW52YXNSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB9XG59KTtcbiIsIi8vIEB0b2RvIC0gaWdub3JlIHRoZSB0b28gbWFueSBwYXJhbWV0ZXJzIHdhcm5pbmcgZm9yIG5vd1xuLy8gc2hvdWxkIGVpdGhlciBmaXggaXQgb3IgY2hhbmdlIHRoZSBqc2hpbnQgY29uZmlnXG4vLyBqc2hpbnQgLVcwNzJcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xuXG4vKipcbiAqIFRoZSBwaXhpIE1hdHJpeCBjbGFzcyBhcyBhbiBvYmplY3QsIHdoaWNoIG1ha2VzIGl0IGEgbG90IGZhc3RlcixcbiAqIGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBpdCA6XG4gKiB8IGEgfCBiIHwgdHh8XG4gKiB8IGMgfCBkIHwgdHl8XG4gKiB8IDAgfCAwIHwgMSB8XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBNYXRyaXgoKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5iID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5jID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHkgPSAwO1xufVxuXG5NYXRyaXgucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWF0cml4O1xubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1hdHJpeCBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5LiBUaGUgRWxlbWVudCB0byBNYXRyaXggbWFwcGluZyBvcmRlciBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIGEgPSBhcnJheVswXVxuICogYiA9IGFycmF5WzFdXG4gKiBjID0gYXJyYXlbM11cbiAqIGQgPSBhcnJheVs0XVxuICogdHggPSBhcnJheVsyXVxuICogdHkgPSBhcnJheVs1XVxuICpcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119IFRoZSBhcnJheSB0aGF0IHRoZSBtYXRyaXggd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbS5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpXG57XG4gICAgdGhpcy5hID0gYXJyYXlbMF07XG4gICAgdGhpcy5iID0gYXJyYXlbMV07XG4gICAgdGhpcy5jID0gYXJyYXlbM107XG4gICAgdGhpcy5kID0gYXJyYXlbNF07XG4gICAgdGhpcy50eCA9IGFycmF5WzJdO1xuICAgIHRoaXMudHkgPSBhcnJheVs1XTtcbn07XG5cblxuLyoqXG4gKiBzZXRzIHRoZSBtYXRyaXggcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkXG4gKiBAcGFyYW0ge251bWJlcn0gdHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXG57XG4gICAgdGhpcy5hID0gYTtcbiAgICB0aGlzLmIgPSBiO1xuICAgIHRoaXMuYyA9IGM7XG4gICAgdGhpcy5kID0gZDtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy50eSA9IHR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmcm9tIHRoZSBjdXJyZW50IE1hdHJpeCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9zZSB7Ym9vbGVhbn0gV2hldGhlciB3ZSBuZWVkIHRvIHRyYW5zcG9zZSB0aGUgbWF0cml4IG9yIG5vdFxuICogQHBhcmFtIFtvdXRdIHtBcnJheX0gSWYgcHJvdmlkZWQgdGhlIGFycmF5IHdpbGwgYmUgYXNzaWduZWQgdG8gb3V0XG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gdGhlIG5ld2x5IGNyZWF0ZWQgYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAodHJhbnNwb3NlLCBvdXQpXG57XG4gICAgaWYgKCF0aGlzLmFycmF5KVxuICAgIHtcbiAgICAgICAgdGhpcy5hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gb3V0IHx8IHRoaXMuYXJyYXk7XG5cbiAgICBpZiAodHJhbnNwb3NlKVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVsyXSA9IDA7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSAwO1xuICAgICAgICBhcnJheVs2XSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzddID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzJdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzZdID0gMDtcbiAgICAgICAgYXJyYXlbN10gPSAwO1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZSB0byB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gcmVuZGVyaW5nKVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5hICogeCArIHRoaXMuYyAqIHkgKyB0aGlzLnR4O1xuICAgIG5ld1Bvcy55ID0gdGhpcy5iICogeCArIHRoaXMuZCAqIHkgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGludmVyc2Ugb2YgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UgdG8gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIGlucHV0KVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHlJbnZlcnNlID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciBpZCA9IDEgLyAodGhpcy5hICogdGhpcy5kICsgdGhpcy5jICogLXRoaXMuYik7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuZCAqIGlkICogeCArIC10aGlzLmMgKiBpZCAqIHkgKyAodGhpcy50eSAqIHRoaXMuYyAtIHRoaXMudHggKiB0aGlzLmQpICogaWQ7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmEgKiBpZCAqIHkgKyAtdGhpcy5iICogaWQgKiB4ICsgKC10aGlzLnR5ICogdGhpcy5hICsgdGhpcy50eCAqIHRoaXMuYikgKiBpZDtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdHJpeCBvbiB0aGUgeCBhbmQgeS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMudHggKz0geDtcbiAgICB0aGlzLnR5ICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIHNjYWxlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIGFtb3VudCB0byBzY2FsZSBob3Jpem9udGFsbHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSBhbW91bnQgdG8gc2NhbGUgdmVydGljYWxseVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2NhbGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmEgKj0geDtcbiAgICB0aGlzLmQgKj0geTtcbiAgICB0aGlzLmMgKj0geDtcbiAgICB0aGlzLmIgKj0geTtcbiAgICB0aGlzLnR4ICo9IHg7XG4gICAgdGhpcy50eSAqPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyBhIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpXG57XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKCBhbmdsZSApO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbiggYW5nbGUgKTtcblxuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICB0aGlzLmEgPSBhMSAqIGNvcy10aGlzLmIgKiBzaW47XG4gICAgdGhpcy5iID0gYTEgKiBzaW4rdGhpcy5iICogY29zO1xuICAgIHRoaXMuYyA9IGMxICogY29zLXRoaXMuZCAqIHNpbjtcbiAgICB0aGlzLmQgPSBjMSAqIHNpbit0aGlzLmQgKiBjb3M7XG4gICAgdGhpcy50eCA9IHR4MSAqIGNvcyAtIHRoaXMudHkgKiBzaW47XG4gICAgdGhpcy50eSA9IHR4MSAqIHNpbiArIHRoaXMudHkgKiBjb3M7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG5cbiAgICB0aGlzLmEgID0gbWF0cml4LmEgKiBhMSArIG1hdHJpeC5iICogYzE7XG4gICAgdGhpcy5iICA9IG1hdHJpeC5hICogYjEgKyBtYXRyaXguYiAqIGQxO1xuICAgIHRoaXMuYyAgPSBtYXRyaXguYyAqIGExICsgbWF0cml4LmQgKiBjMTtcbiAgICB0aGlzLmQgID0gbWF0cml4LmMgKiBiMSArIG1hdHJpeC5kICogZDE7XG5cbiAgICB0aGlzLnR4ID0gbWF0cml4LnR4ICogYTEgKyBtYXRyaXgudHkgKiBjMSArIHRoaXMudHg7XG4gICAgdGhpcy50eSA9IG1hdHJpeC50eCAqIGIxICsgbWF0cml4LnR5ICogZDEgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1hdHJpeCBiYXNlZCBvbiBhbGwgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RYXG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RZXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXG4gKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WFxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdZXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKHgsIHksIHBpdm90WCwgcGl2b3RZLCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSlcbntcbiAgICB2YXIgYSwgYiwgYywgZCwgc3IsIGNyLCBjeSwgc3ksIG5zeCwgY3g7XG5cbiAgICBzciAgPSBNYXRoLnNpbihyb3RhdGlvbik7XG4gICAgY3IgID0gTWF0aC5jb3Mocm90YXRpb24pO1xuICAgIGN5ICA9IE1hdGguY29zKHNrZXdZKTtcbiAgICBzeSAgPSBNYXRoLnNpbihza2V3WSk7XG4gICAgbnN4ID0gLU1hdGguc2luKHNrZXdYKTtcbiAgICBjeCAgPSAgTWF0aC5jb3Moc2tld1gpO1xuXG4gICAgYSAgPSAgY3IgKiBzY2FsZVg7XG4gICAgYiAgPSAgc3IgKiBzY2FsZVg7XG4gICAgYyAgPSAtc3IgKiBzY2FsZVk7XG4gICAgZCAgPSAgY3IgKiBzY2FsZVk7XG5cbiAgICB0aGlzLmEgID0gY3kgKiBhICsgc3kgKiBjO1xuICAgIHRoaXMuYiAgPSBjeSAqIGIgKyBzeSAqIGQ7XG4gICAgdGhpcy5jICA9IG5zeCAqIGEgKyBjeCAqIGM7XG4gICAgdGhpcy5kICA9IG5zeCAqIGIgKyBjeCAqIGQ7XG5cbiAgICB0aGlzLnR4ID0geCArICggcGl2b3RYICogYSArIHBpdm90WSAqIGMgKTtcbiAgICB0aGlzLnR5ID0geSArICggcGl2b3RYICogYiArIHBpdm90WSAqIGQgKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQcmVwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uKG1hdHJpeClcbntcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIGlmIChtYXRyaXguYSAhPT0gMSB8fCBtYXRyaXguYiAhPT0gMCB8fCBtYXRyaXguYyAhPT0gMCB8fCBtYXRyaXguZCAhPT0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICAgICAgdmFyIGMxID0gdGhpcy5jO1xuICAgICAgICB0aGlzLmEgID0gYTEqbWF0cml4LmErdGhpcy5iKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmIgID0gYTEqbWF0cml4LmIrdGhpcy5iKm1hdHJpeC5kO1xuICAgICAgICB0aGlzLmMgID0gYzEqbWF0cml4LmErdGhpcy5kKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmQgID0gYzEqbWF0cml4LmIrdGhpcy5kKm1hdHJpeC5kO1xuICAgIH1cblxuICAgIHRoaXMudHggPSB0eDEqbWF0cml4LmErdGhpcy50eSptYXRyaXguYyttYXRyaXgudHg7XG4gICAgdGhpcy50eSA9IHR4MSptYXRyaXguYit0aGlzLnR5Km1hdHJpeC5kK21hdHJpeC50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0ID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcbiAgICB2YXIgbiA9IGExKmQxLWIxKmMxO1xuXG4gICAgdGhpcy5hID0gZDEvbjtcbiAgICB0aGlzLmIgPSAtYjEvbjtcbiAgICB0aGlzLmMgPSAtYzEvbjtcbiAgICB0aGlzLmQgPSBhMS9uO1xuICAgIHRoaXMudHggPSAoYzEqdGhpcy50eS1kMSp0eDEpL247XG4gICAgdGhpcy50eSA9IC0oYTEqdGhpcy50eS1iMSp0eDEpL247XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBSZXNldHMgdGhpcyBNYXRpeCB0byBhbiBpZGVudGl0eSAoZGVmYXVsdCkgbWF0cml4LlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmlkZW50aXR5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmEgPSAxO1xuICAgIHRoaXMuYiA9IDA7XG4gICAgdGhpcy5jID0gMDtcbiAgICB0aGlzLmQgPSAxO1xuICAgIHRoaXMudHggPSAwO1xuICAgIHRoaXMudHkgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgTWF0cml4IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gQSBjb3B5IG9mIHRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgdmFsdWVzIG9mIHRoZSBnaXZlbiBtYXRyaXggdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZXMgaW4gdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhlIG1hdHJpeCBnaXZlbiBpbiBwYXJhbWV0ZXIgd2l0aCBpdHMgdmFsdWVzIHVwZGF0ZWQuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQSBkZWZhdWx0IChpZGVudGl0eSkgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5JREVOVElUWSA9IG5ldyBNYXRyaXgoKTtcblxuLyoqXG4gKiBBIHRlbXAgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5URU1QX01BVFJJWCA9IG5ldyBNYXRyaXgoKTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcbn1cblxuUG9pbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvaW50XG4gKlxuICogQHJldHVybiB7UElYSS5Qb2ludH0gYSBjb3B5IG9mIHRoZSBwb2ludFxuICovXG5Qb2ludC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBDb3BpZXMgeCBhbmQgeSBmcm9tIHRoZSBnaXZlbiBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICovXG5Qb2ludC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgdGhpcy5zZXQocC54LCBwLnkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGVxdWFsIHRvIHRoaXMgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gKHAueCA9PT0gdGhpcy54KSAmJiAocC55ID09PSB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5Qb2ludC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy54ID0geCB8fCAwO1xuICAgIHRoaXMueSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLnggOiAwICkgO1xufTtcbiIsIi8qKlxuICogTWF0aCBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgbWl4ZWQgaW50byBQSVhJIG5hbWVzcGFjZS5cbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBUaGVzZSB3aWxsIGJlIG1peGVkIHRvIGJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLFxuICAgIC8vIHdoaWxlIHRoaXMgbW9kdWxlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBjb3JlXG4gICAgLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBjdXQgZG93biBvblxuICAgIC8vIGludGVybmFsIG1vZHVsZSByZXF1aXJlcy5cblxuICAgIFBvaW50OiAgICAgIHJlcXVpcmUoJy4vUG9pbnQnKSxcbiAgICBNYXRyaXg6ICAgICByZXF1aXJlKCcuL01hdHJpeCcpLFxuXG4gICAgQ2lyY2xlOiAgICAgcmVxdWlyZSgnLi9zaGFwZXMvQ2lyY2xlJyksXG4gICAgRWxsaXBzZTogICAgcmVxdWlyZSgnLi9zaGFwZXMvRWxsaXBzZScpLFxuICAgIFBvbHlnb246ICAgIHJlcXVpcmUoJy4vc2hhcGVzL1BvbHlnb24nKSxcbiAgICBSZWN0YW5nbGU6ICByZXF1aXJlKCcuL3NoYXBlcy9SZWN0YW5nbGUnKSxcbiAgICBSb3VuZGVkUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlJylcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIENpcmNsZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICovXG5mdW5jdGlvbiBDaXJjbGUoeCwgeSwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkNJUkM7XG59XG5cbkNpcmNsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaXJjbGU7XG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBDaXJjbGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkNpcmNsZX0gYSBjb3B5IG9mIHRoZSBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBDaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBjaXJjbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmFkaXVzIDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGR4ID0gKHRoaXMueCAtIHgpLFxuICAgICAgICBkeSA9ICh0aGlzLnkgLSB5KSxcbiAgICAgICAgcjIgPSB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzO1xuXG4gICAgZHggKj0gZHg7XG4gICAgZHkgKj0gZHk7XG5cbiAgICByZXR1cm4gKGR4ICsgZHkgPD0gcjIpO1xufTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBjaXJjbGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4qIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiovXG5DaXJjbGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy5yYWRpdXMsIHRoaXMueSAtIHRoaXMucmFkaXVzLCB0aGlzLnJhZGl1cyAqIDIsIHRoaXMucmFkaXVzICogMik7XG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBFbGxpcHNlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGlzIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZVxuICovXG5mdW5jdGlvbiBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkVMSVA7XG59XG5cbkVsbGlwc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRWxsaXBzZTtcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBFbGxpcHNlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5FbGxpcHNlfSBhIGNvcHkgb2YgdGhlIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgRWxsaXBzZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRzIGFyZSB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vbm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDBcbiAgICB2YXIgbm9ybXggPSAoKHggLSB0aGlzLngpIC8gdGhpcy53aWR0aCksXG4gICAgICAgIG5vcm15ID0gKCh5IC0gdGhpcy55KSAvIHRoaXMuaGVpZ2h0KTtcblxuICAgIG5vcm14ICo9IG5vcm14O1xuICAgIG5vcm15ICo9IG5vcm15O1xuXG4gICAgcmV0dXJuIChub3JteCArIG5vcm15IDw9IDEpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgZWxsaXBzZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy53aWR0aCwgdGhpcy55IC0gdGhpcy5oZWlnaHQsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG4iLCJ2YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9Qb2ludCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcG9pbnRzIHtQSVhJLlBvaW50W118bnVtYmVyW118Li4uUElYSS5Qb2ludHwuLi5udW1iZXJ9IFRoaXMgY2FuIGJlIGFuIGFycmF5IG9mIFBvaW50cyB0aGF0IGZvcm0gdGhlIHBvbHlnb24sXG4gKiAgICAgIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIHRoYXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBbeCx5LCB4LHksIC4uLl0sIG9yIHRoZSBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZVxuICogICAgICBhbGwgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvbiBlLmcuIGBuZXcgUElYSS5Qb2x5Z29uKG5ldyBQSVhJLlBvaW50KCksIG5ldyBQSVhJLlBvaW50KCksIC4uLilgLCBvciB0aGVcbiAqICAgICAgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmUgZmxhdCB4LHkgdmFsdWVzIGUuZy4gYG5ldyBQb2x5Z29uKHgseSwgeCx5LCB4LHksIC4uLilgIHdoZXJlIGB4YCBhbmQgYHlgIGFyZVxuICogICAgICBOdW1iZXJzLlxuICovXG5mdW5jdGlvbiBQb2x5Z29uKHBvaW50c18pXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBvaW50c187XG5cbiAgICAvL2lmIHBvaW50cyBpc24ndCBhbiBhcnJheSwgdXNlIGFyZ3VtZW50cyBhcyB0aGUgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgcG9pbnRzLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICBwb2ludHNbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IG9mIHBvaW50cywgY29udmVydCBpdCB0byBhIGZsYXQgYXJyYXkgb2YgbnVtYmVyc1xuICAgIGlmIChwb2ludHNbMF0gaW5zdGFuY2VvZiBQb2ludClcbiAgICB7XG4gICAgICAgIHZhciBwID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBwLnB1c2gocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50cyA9IHA7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5QT0xZO1xufVxuXG5Qb2x5Z29uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvbHlnb247XG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9seWdvblxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9seWdvbn0gYSBjb3B5IG9mIHRoZSBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvbHlnb24odGhpcy5wb2ludHMuc2xpY2UoKSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcG9seWdvblxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBpbnNpZGUgPSBmYWxzZTtcblxuICAgIC8vIHVzZSBzb21lIHJheWNhc3RpbmcgdG8gdGVzdCBoaXRzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL3BvaW50LWluLXBvbHlnb24vYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5wb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbGVuZ3RoIC0gMTsgaSA8IGxlbmd0aDsgaiA9IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB4aSA9IHRoaXMucG9pbnRzW2kgKiAyXSwgeWkgPSB0aGlzLnBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgeGogPSB0aGlzLnBvaW50c1tqICogMl0sIHlqID0gdGhpcy5wb2ludHNbaiAqIDIgKyAxXSxcbiAgICAgICAgICAgIGludGVyc2VjdCA9ICgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICh4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aSk7XG5cbiAgICAgICAgaWYgKGludGVyc2VjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiB0aGUgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcmVjdGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SRUNUO1xufVxuXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XG5cbi8qKlxuICogQSBjb25zdGFudCBlbXB0eSByZWN0YW5nbGUuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblJlY3RhbmdsZS5FTVBUWSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDwgdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDwgdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFJvdW5kZWQgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIHRoYXQgaGFzIG5pY2Ugcm91bmRlZCBjb3JuZXJzLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodCBhbmQgaXRzIHJhZGl1cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gQ29udHJvbHMgdGhlIHJhZGl1cyBvZiB0aGUgcm91bmRlZCBjb3JuZXJzXG4gKi9cbmZ1bmN0aW9uIFJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJSRUM7XG59XG5cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm91bmRlZFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUm91bmRlZFJlY3RhbmdsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUm91bmRlZFJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSb3VuZGVkUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8PSB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUGFydGljbGVDb250YWluZXIgY2xhc3MgaXMgYSByZWFsbHkgZmFzdCB2ZXJzaW9uIG9mIHRoZSBDb250YWluZXIgYnVpbHQgc29sZWx5IGZvciBzcGVlZCxcbiAqIHNvIHVzZSB3aGVuIHlvdSBuZWVkIGEgbG90IG9mIHNwcml0ZXMgb3IgcGFydGljbGVzLiBUaGUgdHJhZGVvZmYgb2YgdGhlIFBhcnRpY2xlQ29udGFpbmVyIGlzIHRoYXQgYWR2YW5jZWRcbiAqIGZ1bmN0aW9uYWxpdHkgd2lsbCBub3Qgd29yay4gUGFydGljbGVDb250YWluZXIgaW1wbGVtZW50cyBvbmx5IHRoZSBiYXNpYyBvYmplY3QgdHJhbnNmb3JtIChwb3NpdGlvbiwgc2NhbGUsIHJvdGF0aW9uKS5cbiAqIEFueSBvdGhlciBmdW5jdGlvbmFsaXR5IGxpa2UgdGludGluZywgbWFza2luZywgZXRjIHdpbGwgbm90IHdvcmsgb24gc3ByaXRlcyBpbiB0aGlzIGJhdGNoLlxuICpcbiAqIEl0J3MgZXh0cmVtZWx5IGVhc3kgdG8gdXNlIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQYXJ0aWNsZUNvbnRhaW5lcigpO1xuICpcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpXG4gKiB7XG4gKiAgICAgdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJteUltYWdlLnBuZ1wiKTtcbiAqICAgICBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEFuZCBoZXJlIHlvdSBoYXZlIGEgaHVuZHJlZCBzcHJpdGVzIHRoYXQgd2lsbCBiZSByZW5kZXJlciBhdCB0aGUgc3BlZWQgb2YgbGlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbbWF4U2l6ZT0xNTAwMF0ge251bWJlcn0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGF0IGNhbiBiZSByZW5kZXJlciBieSB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzXSB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyBvZiBjaGlsZHJlbiB0aGF0IHNob3VsZCBiZSB1cGxvYWRlZCB0byB0aGUgZ3B1IGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnNjYWxlPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBzY2FsZSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5wb3NpdGlvbj10cnVlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBwb3NpdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5yb3RhdGlvbj1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcm90YXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMudXZzPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCB1dnMgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuYWxwaGE9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIGFscGhhIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtiYXRjaFNpemU9MTUwMDBdIHtudW1iZXJ9IE51bWJlciBvZiBwYXJ0aWNsZXMgcGVyIGJhdGNoLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUNvbnRhaW5lcihtYXhTaXplLCBwcm9wZXJ0aWVzLCBiYXRjaFNpemUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBiYXRjaFNpemUgPSBiYXRjaFNpemUgfHwgMTUwMDA7IC8vQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG4gICAgbWF4U2l6ZSA9IG1heFNpemUgfHwgMTUwMDA7XG5cbiAgICAvLyBNYWtpbmcgc3VyZSB0aGUgYmF0Y2ggc2l6ZSBpcyB2YWxpZFxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICB2YXIgbWF4QmF0Y2hTaXplID0gMTYzODQ7XG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhCYXRjaFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgcHJvcGVydGllcyB0byBiZSBkeW5hbWljICh0cnVlKSAvIHN0YXRpYyAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFuW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmF0Y2hTaXplID0gYmF0Y2hTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICpcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlQ2hpbGRyZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBjYW52YXMgcmVuZGVyZXJpbmcuIElmIHRydWUgdGhlbiB0aGUgZWxlbWVudHMgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBuZWFyZXN0IHBpeGVsLiBUaGlzIHByb3ZpZGVzIGEgbmljZSBzcGVlZCBib29zdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZTtcbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbn1cblxuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBwcml2YXRlIHByb3BlcnRpZXMgYXJyYXkgdG8gZHluYW1pYyAvIHN0YXRpYyBiYXNlZCBvbiB0aGUgcGFzc2VkIHByb3BlcnRpZXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMge29iamVjdH0gVGhlIHByb3BlcnRpZXMgdG8gYmUgdXBsb2FkZWRcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnNldFByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKVxue1xuICAgIGlmICggcHJvcGVydGllcyApIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1swXSA9ICdzY2FsZScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5zY2FsZSA6IHRoaXMuX3Byb3BlcnRpZXNbMF07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMV0gPSAncG9zaXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucG9zaXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzFdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzJdID0gJ3JvdGF0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnJvdGF0aW9uIDogdGhpcy5fcHJvcGVydGllc1syXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1szXSA9ICd1dnMnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMudXZzIDogdGhpcy5fcHJvcGVydGllc1szXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1s0XSA9ICdhbHBoYScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5hbHBoYSA6IHRoaXMuX3Byb3BlcnRpZXNbNF07XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcblxuICAgIC8vIFRPRE8gZG9uJ3QgbmVlZCB0byFcbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAvLyAgUElYSS5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybS5jYWxsKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRhaW5lciB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHdlYmdsIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIoIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUgKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlLnJlbmRlciggdGhpcyApO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGZsYWcgdGhhdCBzdGF0aWMgZGF0YSBzaG91bGQgYmUgdXBkYXRlZCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoc21hbGxlc3RDaGlsZEluZGV4KVxue1xuICAgIHZhciBidWZmZXJJbmRleCA9IE1hdGguZmxvb3Ioc21hbGxlc3RDaGlsZEluZGV4IC8gdGhpcy5fYmF0Y2hTaXplKTtcbiAgICBpZiAoYnVmZmVySW5kZXggPCB0aGlzLl9idWZmZXJUb1VwZGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IGJ1ZmZlckluZGV4O1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciBpc1JvdGF0ZWQgPSB0cnVlO1xuXG4gICAgdmFyIHBvc2l0aW9uWCA9IDA7XG4gICAgdmFyIHBvc2l0aW9uWSA9IDA7XG5cbiAgICB2YXIgZmluYWxXaWR0aCA9IDA7XG4gICAgdmFyIGZpbmFsSGVpZ2h0ID0gMDtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZSA9IGNoaWxkLnRleHR1cmUuZnJhbWU7XG5cbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYSAqIGNoaWxkLmFscGhhO1xuXG4gICAgICAgIGlmIChjaGlsZC5yb3RhdGlvbiAlIChNYXRoLlBJICogMikgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZhc3Rlc3QgIHdheSB0byBvcHRpbWlzZSEgLSBpZiByb3RhdGlvbiBpcyAwIHRoZW4gd2UgY2FuIGF2b2lkIGFueSBraW5kIG9mIHNldFRyYW5zZm9ybSBjYWxsXG4gICAgICAgICAgICBpZiAoaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLngpICsgY2hpbGQucG9zaXRpb24ueCAgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnkpICsgY2hpbGQucG9zaXRpb24ueSAgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54O1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55O1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZC5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZFRyYW5zZm9ybSA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHkgfCAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoKSArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0KSArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICBjaGlsZC50ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgIGZyYW1lLngsXG4gICAgICAgICAgICBmcmFtZS55LFxuICAgICAgICAgICAgZnJhbWUud2lkdGgsXG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQsXG4gICAgICAgICAgICBwb3NpdGlvblgsXG4gICAgICAgICAgICBwb3NpdGlvblksXG4gICAgICAgICAgICBmaW5hbFdpZHRoLFxuICAgICAgICAgICAgZmluYWxIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIGlmICh0aGlzLl9idWZmZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcbn07XG4iLCJcbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVCdWZmZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlQnVmZmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFRoZSBwYXJ0aWNsZSBidWZmZXIgbWFuYWdlcyB0aGUgc3RhdGljIGFuZCBkeW5hbWljIGJ1ZmZlcnMgZm9yIGEgcGFydGljbGUgY29udGFpbmVyLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQnVmZmVyKGdsLCBwcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgc2l6ZSlcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleCBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhlIGJ1ZmZlciBjYW4gaG9sZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgZHluYW1pYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBzdGF0aWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgaWYoZHluYW1pY1Byb3BlcnR5RmxhZ3NbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRCdWZmZXJzKCk7XG5cbn1cblxuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQnVmZmVyO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5pbml0QnVmZmVycyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcHJvcGVydHk7XG5cbiAgICB2YXIgZHluYW1pY09mZnNldCA9IDA7XG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IGR5bmFtaWNPZmZzZXQ7XG4gICAgICAgIGR5bmFtaWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5keW5hbWljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG5cblxuICAgIC8vIHN0YXRpYyAvL1xuICAgIHZhciBzdGF0aWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBzdGF0aWNPZmZzZXQ7XG4gICAgICAgIHN0YXRpY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLnN0YXRpY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuc3RhdGljU3RyaWRlICogNCk7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZHluYW1pYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZER5bmFtaWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLmR5bmFtaWNEYXRhLCB0aGlzLmR5bmFtaWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuZHluYW1pY0RhdGEpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBzdGF0aWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWRTdGF0aWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5zdGF0aWNEYXRhLCB0aGlzLnN0YXRpY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLnN0YXRpY0RhdGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyB0byB0aGUgR1BVXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaSwgcHJvcGVydHk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnN0YXRpY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlQnVmZmVyLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5zdGF0aWNCdWZmZXIpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlU2hhZGVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZVNoYWRlcicpLFxuICAgIFBhcnRpY2xlQnVmZmVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUJ1ZmZlcicpLFxuICAgIG1hdGggICAgICAgICAgICA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgLy8gYW5kIG1heCBudW1iZXIgb2YgZWxlbWVudCBpbiB0aGUgaW5kZXggYnVmZmVyIGlzIDE2Mzg0ICogNiA9IDk4MzA0XG4gICAgLy8gQ3JlYXRpbmcgYSBmdWxsIGluZGV4IGJ1ZmZlciwgb3ZlcmhlYWQgaXMgOTgzMDQgKiAyID0gMTk2S29cbiAgICB2YXIgbnVtSW5kaWNlcyA9IDk4MzA0O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShudW1JbmRpY2VzKTtcblxuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgbnVtSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IG51bGw7XG5cbiAgICB0aGlzLnRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcbn1cblxuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3BhcnRpY2xlJywgUGFydGljbGVSZW5kZXJlcik7XG5cbi8qKlxuICogV2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IG5ldyBQYXJ0aWNsZVNoYWRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIpO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IGluZGV4LCBzbyA2NTUzNSAvIDYgPSAxMDkyMi5cblxuICAgIC8vdXBsb2FkIHRoZSBpbmRleCBkYXRhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBbXG4gICAgICAgIC8vIHZlcnRpY2VzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFZlcnRpY2VzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcG9zaXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbkNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRQb3NpdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJvdGF0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUm90YXRpb24sXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFJvdGF0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdXZzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRVdnMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBhbHBoYURhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRBbHBoYSxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgcGFydGljbGUgYmF0Y2guXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGJpbmQgdGhlIG1haW4gdGV4dHVyZVxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgLy8gYmluZCB0aGUgYnVmZmVyc1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgcGFydGljbGUgY29udGFpbmVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgY2hpbGRyZW4gPSBjb250YWluZXIuY2hpbGRyZW4sXG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIG1heFNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplO1xuXG4gICAgaWYodG90YWxDaGlsZHJlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZih0b3RhbENoaWxkcmVuID4gbWF4U2l6ZSlcbiAgICB7XG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBtYXhTaXplO1xuICAgIH1cblxuICAgIGlmKCFjb250YWluZXIuX2J1ZmZlcnMpXG4gICAge1xuICAgICAgICBjb250YWluZXIuX2J1ZmZlcnMgPSB0aGlzLmdlbmVyYXRlQnVmZmVycyggY29udGFpbmVyICk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29udGFpbmVyLmJsZW5kTW9kZSk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIG0gPSAgY29udGFpbmVyLndvcmxkVHJhbnNmb3JtLmNvcHkoIHRoaXMudGVtcE1hdHJpeCApO1xuICAgIG0ucHJlcGVuZCggdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXggKTtcbiAgICBnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgbS50b0FycmF5KHRydWUpKTtcbiAgICBnbC51bmlmb3JtMWYodGhpcy5zaGFkZXIudW5pZm9ybXMudUFscGhhLl9sb2NhdGlvbiwgY29udGFpbmVyLndvcmxkQWxwaGEpO1xuXG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHRleHR1cmUgaXMgYm91bmQuLlxuICAgIHZhciBiYXNlVGV4dHVyZSA9IGNoaWxkcmVuWzBdLl90ZXh0dXJlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgdGV4dHVyZSBoYXMgbm90IHVwZGF0ZWQgdGhlbiBsZXRzIG5vdCB1cGxvYWQgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmKCF0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUoYmFzZVRleHR1cmUpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZighY29udGFpbmVyLl9wcm9wZXJ0aWVzWzBdIHx8ICFjb250YWluZXIuX3Byb3BlcnRpZXNbM10pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgfVxuXG4gICAgLy8gbm93IGxldHMgdXBsb2FkIGFuZCByZW5kZXIgdGhlIGJ1ZmZlcnMuLlxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IHRvdGFsQ2hpbGRyZW47IGkgKz0gYmF0Y2hTaXplLCBqICs9IDEpXG4gICAge1xuICAgICAgICB2YXIgYW1vdW50ID0gKCB0b3RhbENoaWxkcmVuIC0gaSk7XG4gICAgICAgIGlmKGFtb3VudCA+IGJhdGNoU2l6ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50ID0gYmF0Y2hTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRhaW5lci5fYnVmZmVyc1tqXTtcblxuICAgICAgICAvLyB3ZSBhbHdheXMgdXBsb2FkIHRoZSBkeW5hbWljXG4gICAgICAgIGJ1ZmZlci51cGxvYWREeW5hbWljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuXG4gICAgICAgIC8vIHdlIG9ubHkgdXBsb2FkIHRoZSBzdGF0aWMgY29udGVudCB3aGVuIHdlIGhhdmUgdG8hXG4gICAgICAgIGlmKGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPT09IGopXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJ1ZmZlci51cGxvYWRTdGF0aWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gaiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5kIHRoZSBidWZmZXJcbiAgICAgICAgYnVmZmVyLmJpbmQoIHRoaXMuc2hhZGVyICk7XG5cbiAgICAgICAgIC8vIG5vdyBkcmF3IHRob3NlIHN1Y2thcyFcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgYW1vdW50ICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBvbmUgcGFydGljbGUgYnVmZmVyIGZvciBlYWNoIGNoaWxkIGluIHRoZSBjb250YWluZXIgd2Ugd2FudCB0byByZW5kZXIgYW5kIHVwZGF0ZXMgaW50ZXJuYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5nZW5lcmF0ZUJ1ZmZlcnMgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIGJ1ZmZlcnMgPSBbXSxcbiAgICAgICAgc2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemUsXG4gICAgICAgIGR5bmFtaWNQcm9wZXJ0eUZsYWdzID0gY29udGFpbmVyLl9wcm9wZXJ0aWVzLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gYmF0Y2hTaXplKVxuICAgIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKG5ldyBQYXJ0aWNsZUJ1ZmZlcihnbCwgdGhpcy5wcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgYmF0Y2hTaXplKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHZlcnRpY2llcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgdmVydGljZXMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFZlcnRpY2VzID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICB2YXIgc3ByaXRlLFxuICAgICAgICB0ZXh0dXJlLFxuICAgICAgICB0cmltLFxuICAgICAgICBzeCxcbiAgICAgICAgc3ksXG4gICAgICAgIHcwLCB3MSwgaDAsIGgxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xuXG4gICAgICAgIHNwcml0ZSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXTtcbiAgICAgICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZTtcbiAgICAgICAgc3ggPSBzcHJpdGUuc2NhbGUueDtcbiAgICAgICAgc3kgPSBzcHJpdGUuc2NhbGUueTtcblxuICAgICAgICBpZiAodGV4dHVyZS50cmltKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgICAgICB0cmltID0gdGV4dHVyZS50cmltO1xuXG4gICAgICAgICAgICB3MSA9IHRyaW0ueCAtIHNwcml0ZS5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBoMSA9IHRyaW0ueSAtIHNwcml0ZS5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtc3ByaXRlLmFuY2hvci54KTtcbiAgICAgICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtc3ByaXRlLmFuY2hvci54O1xuXG4gICAgICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXNwcml0ZS5hbmNob3IueSk7XG4gICAgICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC1zcHJpdGUuYW5jaG9yLnk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBwb3NpdGlvbnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFBvc2l0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUG9zaXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucG9zaXRpb247XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcm90YXRpb24gdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFJvdGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUm90YXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucm90YXRpb247XG5cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVSb3RhdGlvbjtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgVXZzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRVdnMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlVXZzID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLl90ZXh0dXJlLl91dnM7XG5cbiAgICAgICAgaWYgKHRleHR1cmVVdnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSB0ZXh0dXJlVXZzLngwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZXh0dXJlVXZzLnkwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdGV4dHVyZVV2cy54MTtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gdGV4dHVyZVV2cy55MTtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB0ZXh0dXJlVXZzLngyO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gdGV4dHVyZVV2cy55MjtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB0ZXh0dXJlVXZzLngzO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gdGV4dHVyZVV2cy55MztcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8geW91IGtub3cgdGhpcyBjYW4gYmUgZWFzaWVyIVxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBhbHBoYSB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkQWxwaGEgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZUFscGhhID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLmFscGhhO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZUFscGhhO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVSZW5kZXJlci5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuICAgIHRoaXMudGVtcE1hdHJpeCA9IG51bGw7XG59O1xuIiwidmFyIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVTaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBUZXh0dXJlU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFQb3NpdGlvbkNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVNjYWxlOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFSb3RhdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIHZlYzIgdiA9IGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAnICAgdi54ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIGNvcyhhUm90YXRpb24pIC0gKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIHNpbihhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdi55ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIHNpbihhUm90YXRpb24pICsgKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIGNvcyhhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdiA9IHYgKyBhUG9zaXRpb25Db29yZDsnLFxuXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyh2LCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGhlbGxvXG4gICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCB1QWxwaGE7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3IgKiB1QWxwaGE7JyxcbiAgICAgICAgICAgICcgIGlmIChjb2xvci5hID09IDAuMCkgZGlzY2FyZDsnLFxuICAgICAgICAgICAgJyAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdUFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFQb3NpdGlvbkNvb3JkOiAwLFxuICAgICAgICAgICAvLyBhU2NhbGU6ICAgICAgICAgMCxcbiAgICAgICAgICAgIGFSb3RhdGlvbjogICAgICAwXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVEVNUCBIQUNLXG5cbn1cblxuUGFydGljbGVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlU2hhZGVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVNoYWRlcjtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHN5c3RlbSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgc3lzdGVtIHRoaXMgcmVuZGVyZXIgaXMgZm9yLlxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXSB7bnVtYmVyfSBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcmVuZGVyZWQgYXJlYSAoc2hvd24gaWYgbm90IHRyYW5zcGFyZW50KS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5yb3VuZFBpeGVscz1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBTeXN0ZW1SZW5kZXJlcihzeXN0ZW0sIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB1dGlscy5zYXlIZWxsbyhzeXN0ZW0pO1xuXG4gICAgLy8gcHJlcGFyZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpIGluIENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tpXSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgb3B0aW9ucyA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHNlZSBQSVhJLlJFTkRFUkVSX1RZUEVcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgODAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDgwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgNjAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy52aWV3ID0gb3B0aW9ucy52aWV3IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG9wdGlvbnMucmVzb2x1dGlvbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBvcHRpb25zLnRyYW5zcGFyZW50O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgc2hvdWxkIGJlIHJlc2l6ZWQgYXV0b21hdGljYWxseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvcHRpb25zLmF1dG9SZXNpemUgfHwgZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIGJsZW5kIG1vZGVzIHVzZWZ1bCBmb3IgdGhpcyByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG1peGVkPn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgZmxhZyBhZmZlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50cyBvZiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgcmV0YWluZWQgYWZ0ZXIgcmVuZGVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3Igbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyBOT1QgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBhIGNhbnZhcyBzaXplZCBmaWxsUmVjdCBvcGVyYXRpb24gZXZlcnkgZnJhbWUgdG8gc2V0IHRoZSBjYW52YXMgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBjbGVhclJlY3QgdG8gY2xlYXIgdGhlIGNhbnZhcyBldmVyeSBmcmFtZS5cbiAgICAgKiBEaXNhYmxlIHRoaXMgYnkgc2V0dGluZyB0aGlzIHRvIGZhbHNlLiBGb3IgZXhhbXBsZSBpZiB5b3VyIGdhbWUgaGFzIGEgY2FudmFzIGZpbGxpbmcgYmFja2dyb3VuZCBpbWFnZSB5b3Ugb2Z0ZW4gZG9uJ3QgbmVlZCB0aGlzIHNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHRcbiAgICAgKi9cbiAgICB0aGlzLmNsZWFyQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICAgICAqIEhhbmR5IGZvciBjcmlzcCBwaXhlbCBhcnQgYW5kIHNwZWVkIG9uIGxlZ2FjeSBkZXZpY2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gb3B0aW9ucy5yb3VuZFBpeGVscztcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmEgPSBbMCwgMCwgMCwgMF07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9ICcjMDAwMDAwJztcblxuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yOyAvLyBydW4gYmcgY29sb3Igc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgdHJhbnNmb3JtOnt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKX0sIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3Qgcm9vdCBvYmplY3QgdGhhdCB0aGUgcmVuZGVyZXIgdHJpZWQgdG8gcmVuZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3lzdGVtUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFN5c3RlbVJlbmRlcmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciB0byBmaWxsIGlmIG5vdCB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlN5c3RlbVJlbmRlcmVyI1xuICAgICAqL1xuICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSB1dGlscy5oZXgyc3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB1dGlscy5oZXgycmdiKHZhbCwgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBjYW52YXMgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMudmlldy53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGhpcy52aWV3LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgICAgICB0aGlzLnZpZXcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpIHtcbiAgICBpZiAocmVtb3ZlVmlldyAmJiB0aGlzLnZpZXcucGFyZW50Tm9kZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMudmlldyk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgdGhpcy52aWV3ID0gbnVsbDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IDA7XG5cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBmYWxzZTtcblxuICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcblxuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDA7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IG51bGw7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gbnVsbDtcbn07XG4iLCJ2YXIgU3lzdGVtUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9TeXN0ZW1SZW5kZXJlcicpLFxuICAgIENhbnZhc01hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi91dGlscy9DYW52YXNNYXNrTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBTeXN0ZW1SZW5kZXJlci5jYWxsKHRoaXMsICdDYW52YXMnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuQ0FOVkFTO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMudmlldy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIGZsYWcgY29udHJvbGxpbmcgY2FudmFzIHJlZnJlc2guXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVmcmVzaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBhIENhbnZhc01hc2tNYW5hZ2VyLCBoYW5kbGVzIG1hc2tpbmcgd2hlbiB1c2luZyB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNNYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IENhbnZhc01hc2tNYW5hZ2VyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIHByb3BlcnR5IHVzZWQgdG8gc2V0IHRoZSBjYW52YXMgc21vb3RoaW5nIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnaW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcblxuICAgIGlmICghdGhpcy5jb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ3dlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ29JbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB0aGlzLl9tYXBCbGVuZE1vZGVzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHtcbiAgICAgICAgd29ybGRUcmFuc2Zvcm06IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgICAgICB3b3JsZEFscGhhOiAxXG4gICAgfTtcblxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oQ2FudmFzUmVuZGVyZXIpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byB0aGlzIGNhbnZhcyB2aWV3XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSB0aGUgb2JqZWN0IHRvIGJlIHJlbmRlcmVkXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KVxue1xuICAgIHRoaXMuZW1pdCgncHJlcmVuZGVyJyk7XG5cbiAgICB2YXIgY2FjaGVQYXJlbnQgPSBvYmplY3QucGFyZW50O1xuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gb2JqZWN0O1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIG9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIG9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTICYmIHRoaXMudmlldy5zY3JlZW5jYW52YXMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpXG4gICAge1xuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGggLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlckRpc3BsYXlPYmplY3Qob2JqZWN0LCB0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciBhbmQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSBDYW52YXMgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIFtyZW1vdmVWaWV3PWZhbHNlXSB7Ym9vbGVhbn0gUmVtb3ZlcyB0aGUgQ2FudmFzIGVsZW1lbnQgZnJvbSB0aGUgRE9NLlxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIGNhbGwgdGhlIGJhc2UgZGVzdHJveVxuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcywgcmVtb3ZlVmlldyk7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5T2JqZWN0IHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgY29udGV4dClcbntcbiAgICB2YXIgdGVtcENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyQ2FudmFzKHRoaXMpO1xuICAgIHRoaXMuY29udGV4dCA9IHRlbXBDb250ZXh0O1xufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBQSVhJLlN5c3RlbVJlbmRlcmVyI3Jlc2l6ZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKiBAcGFyYW0ge251bWJlcn0gaFxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHcsIGgpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xuXG4gICAgLy9yZXNldCB0aGUgc2NhbGUgbW9kZS4uIG9kZGx5IHRoaXMgc2VlbXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgY2FudmFzIGlzIHJlc2l6ZWQuXG4gICAgLy9zdXJlbHkgYSBicm93c2VyIGJ1Zz8/IExldCBwaXhpIGZpeCB0aGF0IGZvciB5b3UuLlxuICAgIGlmKHRoaXMuc21vb3RoUHJvcGVydHkpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHRbdGhpcy5zbW9vdGhQcm9wZXJ0eV0gPSAoQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVCA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogTWFwcyBQaXhpIGJsZW5kIG1vZGVzIHRvIGNhbnZhcyBibGVuZCBtb2Rlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX21hcEJsZW5kTW9kZXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5ibGVuZE1vZGVzKVxuICAgIHtcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzID0ge307XG5cbiAgICAgICAgaWYgKHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnbXVsdGlwbHknO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NjcmVlbic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSAnb3ZlcmxheSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnZGFya2VuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MSUdIVEVOXSAgICAgICA9ICdsaWdodGVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdjb2xvci1kb2RnZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnY29sb3ItYnVybic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnaGFyZC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSAnc29mdC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnZGlmZmVyZW5jZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnZXhjbHVzaW9uJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdodWUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gJ3NhdHVyYXRlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl0gICAgICAgICA9ICdjb2xvcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSAnbHVtaW5vc2l0eSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29vbCBuZXcgYmxlbmQgbW9kZXMgaW4gY2FudmFzICdjb3VnaCcgaWUgJ2NvdWdoJ1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNpemUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGNhbnZhc1xuICovXG5mdW5jdGlvbiBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgQ2FudmFzIG9iamVjdCB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBDYW52YXNCdWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogQSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHR3by1kaW1lbnNpb25hbCByZW5kZXJpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59XG5cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0J1ZmZlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FudmFzQnVmZmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIGJ1ZmZlciBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ2FudmFzQnVmZmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdmFsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGNhbnZhcyB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZSBDYW52YXNCdWZmZXIgY2xhc3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbnZhc1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgY2FudmFzLlxuICpcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBjYW52YXMgcmVuZGVyZXIgdG8gZHJhdyB0aGUgcHJpbWl0aXZlIGdyYXBoaWNzIGRhdGEuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNHcmFwaGljcyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNHcmFwaGljcztcblxuLypcbiAqIFJlbmRlcnMgYSBHcmFwaGljcyBvYmplY3QgdG8gYSBjYW52YXMuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgYWN0dWFsIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSAyZCBkcmF3aW5nIG1ldGhvZCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciB3b3JsZEFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuICAgIGlmIChncmFwaGljcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3NUaW50KGdyYXBoaWNzKTtcbiAgICAgICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLl9maWxsVGludDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEuX2xpbmVUaW50O1xuXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZSBjbG9zZSB0aGUgcGF0aCAtIG11Y2ggbmVhdGVyIDopXG4gICAgICAgICAgICBpZiAocG9pbnRzWzBdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAmJiBwb2ludHNbMV0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbENvbG9yIHx8IGRhdGEuZmlsbENvbG9yID09PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmZpbGxBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggZmlsbENvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUud2lkdGgsIHNoYXBlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLDAsMipNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVsbGlwc2UgY29kZSB0YWtlbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcblxuICAgICAgICAgICAgdmFyIHcgPSBzaGFwZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB2YXIgaCA9IHNoYXBlLmhlaWdodCAqIDI7XG5cbiAgICAgICAgICAgIHZhciB4ID0gc2hhcGUueCAtIHcvMjtcbiAgICAgICAgICAgIHZhciB5ID0gc2hhcGUueSAtIGgvMjtcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIGthcHBhID0gMC41NTIyODQ4LFxuICAgICAgICAgICAgICAgIG94ID0gKHcgLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgb3kgPSAoaCAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgeGUgPSB4ICsgdywgICAgICAgICAgIC8vIHgtZW5kXG4gICAgICAgICAgICAgICAgeWUgPSB5ICsgaCwgICAgICAgICAgIC8vIHktZW5kXG4gICAgICAgICAgICAgICAgeG0gPSB4ICsgdyAvIDIsICAgICAgIC8vIHgtbWlkZGxlXG4gICAgICAgICAgICAgICAgeW0gPSB5ICsgaCAvIDI7ICAgICAgIC8vIHktbWlkZGxlXG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG1hc2tcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3Mgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgbWFza1xuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGNvbnRleHQgMmQgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciBsZW4gPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gVE9ETyAtIG5lZWQgdG8gYmUgVW5kZWZpbmVkIVxuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgcnggPSBzaGFwZS54O1xuICAgICAgICAgICAgdmFyIHJ5ID0gc2hhcGUueTtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcbiAgICAgICAgICAgIHZhciByYWRpdXMgPSBzaGFwZS5yYWRpdXM7XG5cbiAgICAgICAgICAgIHZhciBtYXhSYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDIgfCAwO1xuICAgICAgICAgICAgcmFkaXVzID0gcmFkaXVzID4gbWF4UmFkaXVzID8gbWF4UmFkaXVzIDogcmFkaXVzO1xuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRpbnQgb2YgYSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3MgdGhhdCB3aWxsIGhhdmUgaXRzIHRpbnQgdXBkYXRlZFxuICpcbiAqL1xuQ2FudmFzR3JhcGhpY3MudXBkYXRlR3JhcGhpY3NUaW50ID0gZnVuY3Rpb24gKGdyYXBoaWNzKVxue1xuICAgIGlmIChncmFwaGljcy50aW50ID09PSAweEZGRkZGRiAmJiBncmFwaGljcy5fcHJldlRpbnQgPT09IGdyYXBoaWNzLnRpbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyYXBoaWNzLl9wcmV2VGludCA9IGdyYXBoaWNzLnRpbnQ7XG5cbiAgICB2YXIgdGludFIgPSAoZ3JhcGhpY3MudGludCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50RyA9IChncmFwaGljcy50aW50ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgdGludEIgPSAoZ3JhcGhpY3MudGludCAmIDB4RkYpLyAyNTU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLmZpbGxDb2xvciB8IDA7XG4gICAgICAgIHZhciBsaW5lQ29sb3IgPSBkYXRhLmxpbmVDb2xvciB8IDA7XG5cbiAgICAgICAgLypcbiAgICAgICAgdmFyIGNvbG9yUiA9IChmaWxsQ29sb3IgPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgdmFyIGNvbG9yRyA9IChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JCID0gKGZpbGxDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgZmlsbENvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG5cbiAgICAgICAgY29sb3JSID0gKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckcgPSAobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgY29sb3JCID0gKGxpbmVDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgbGluZUNvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG4gICAgICAgICovXG5cbiAgICAgICAgLy8gc3VwZXIgaW5saW5lIGNvcyBpbSBhbiBvcHRpbWl6YXRpb24gTkFaSSA6KVxuICAgICAgICBkYXRhLl9maWxsVGludCA9ICgoKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgoZmlsbENvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAoZmlsbENvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuICAgICAgICBkYXRhLl9saW5lVGludCA9ICgoKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAobGluZUNvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuXG4gICAgfVxufTtcblxuIiwidmFyIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi9DYW52YXNHcmFwaGljcycpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBtYXNraW5nLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ2FudmFzTWFza01hbmFnZXIoKVxue31cblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FudmFzTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc01hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgc3RhY2sgb2YgbWFza3MuXG4gKlxuICogQHBhcmFtIG1hc2tEYXRhIHtvYmplY3R9IHRoZSBtYXNrRGF0YSB0aGF0IHdpbGwgYmUgcHVzaGVkXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSwgcmVuZGVyZXIpXG57XG5cbiAgICByZW5kZXJlci5jb250ZXh0LnNhdmUoKTtcblxuICAgIHZhciBjYWNoZUFscGhhID0gbWFza0RhdGEuYWxwaGE7XG4gICAgdmFyIHRyYW5zZm9ybSA9IG1hc2tEYXRhLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgLy9UT0RPIHN1cG9ydCBzcHJpdGUgYWxwaGEgbWFza3M/P1xuICAgIC8vbG90cyBvZiBlZmZvcnQgcmVxdWlyZWQuIElmIGRlbWFuZCBpcyBncmVhdCBlbm91Z2guLlxuICAgIGlmKCFtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrKG1hc2tEYXRhLCByZW5kZXJlci5jb250ZXh0KTtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5jbGlwKCk7XG4gICAgfVxuXG4gICAgbWFza0RhdGEud29ybGRBbHBoYSA9IGNhY2hlQWxwaGE7XG59O1xuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dCB0byB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZSB0aGUgbWFzayB3YXMgYXBwbGllZC5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLmNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7fTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2RzIGZvciBTcHJpdGUvVGV4dHVyZSB0aW50aW5nLlxuICogQHN0YXRpY1xuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG52YXIgQ2FudmFzVGludGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1RpbnRlcjtcblxuLyoqXG4gKiBCYXNpY2FsbHkgdGhpcyBtZXRob2QganVzdCBuZWVkcyBhIHNwcml0ZSBhbmQgYSBjb2xvciBhbmQgdGludHMgdGhlIHNwcml0ZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSB0aW50ZWQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlID0gZnVuY3Rpb24gKHNwcml0ZSwgY29sb3IpXG57XG4gICAgdmFyIHRleHR1cmUgPSBzcHJpdGUudGV4dHVyZTtcblxuICAgIGNvbG9yID0gQ2FudmFzVGludGVyLnJvdW5kQ29sb3IoY29sb3IpO1xuXG4gICAgdmFyIHN0cmluZ0NvbG9yID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgdGV4dHVyZS50aW50Q2FjaGUgPSB0ZXh0dXJlLnRpbnRDYWNoZSB8fCB7fTtcblxuICAgIGlmICh0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0pXG4gICAge1xuICAgICAgICByZXR1cm4gdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdO1xuICAgIH1cblxuICAgICAvLyBjbG9uZSB0ZXh0dXJlLi5cbiAgICB2YXIgY2FudmFzID0gQ2FudmFzVGludGVyLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8vQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWwodGV4dHVyZSwgc3RyaW5nQ29sb3IsIGNhbnZhcyk7XG4gICAgQ2FudmFzVGludGVyLnRpbnRNZXRob2QodGV4dHVyZSwgY29sb3IsIGNhbnZhcyk7XG5cbiAgICBpZiAoQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSlcbiAgICB7XG4gICAgICAgIC8vIGlzIHRoaXMgYmV0dGVyP1xuICAgICAgICB2YXIgdGludEltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHRpbnRJbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKCk7XG5cbiAgICAgICAgdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdID0gdGludEltYWdlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSBjYW52YXM7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBub3QgY29udmVydGluZyB0aGUgdGV4dHVyZSB0byBhbiBpbWFnZSB0aGVuIHdlIG5lZWQgdG8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXNcbiAgICAgICAgQ2FudmFzVGludGVyLmNhbnZhcyA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdtdWx0aXBseScgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcblxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdvdmVybGF5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoT3ZlcmxheSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1hdG9wJztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgLy8gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG59O1xuXG4vKipcbiAqIFRpbnQgYSB0ZXh0dXJlIHBpeGVsIHBlciBwaXhlbC5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcbiAgICB2YXIgciA9IHJnYlZhbHVlc1swXSwgZyA9IHJnYlZhbHVlc1sxXSwgYiA9IHJnYlZhbHVlc1syXTtcblxuICAgIHZhciBwaXhlbERhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICB2YXIgcGl4ZWxzID0gcGl4ZWxEYXRhLmRhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBpeGVscy5sZW5ndGg7IGkgKz0gNClcbiAgICB7XG4gICAgICAgIHBpeGVsc1tpKzBdICo9IHI7XG4gICAgICAgIHBpeGVsc1tpKzFdICo9IGc7XG4gICAgICAgIHBpeGVsc1tpKzJdICo9IGI7XG4gICAgfVxuXG4gICAgY29udGV4dC5wdXRJbWFnZURhdGEocGl4ZWxEYXRhLCAwLCAwKTtcbn07XG5cbi8qKlxuICogUm91bmRzIHRoZSBzcGVjaWZpZWQgY29sb3IgYWNjb3JkaW5nIHRvIHRoZSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbC5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHJvdW5kLCBzaG91bGQgYmUgYSBoZXggY29sb3JcbiAqL1xuQ2FudmFzVGludGVyLnJvdW5kQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IpXG57XG4gICAgdmFyIHN0ZXAgPSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbDtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcblxuICAgIHJnYlZhbHVlc1swXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1swXSAvIHN0ZXApICogc3RlcCk7XG4gICAgcmdiVmFsdWVzWzFdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzFdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMl0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMl0gLyBzdGVwKSAqIHN0ZXApO1xuXG4gICAgcmV0dXJuIHV0aWxzLnJnYjJoZXgocmdiVmFsdWVzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGNhcCB3aGVuIHJvdW5kaW5nIGNvbG9ycy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsID0gODtcblxuLyoqXG4gKiBUaW50IGNhY2hlIGJvb2xlYW4gZmxhZy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jb252ZXJ0VGludFRvSW1hZ2UgPSBmYWxzZTtcblxuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCwgY29uc2VxdWVudGx5IHRoZSBhYmlsaXR5IHRvIHRpbnQgdXNpbmcgdGhlIG11bHRpcGx5IG1ldGhvZC5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA9IHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKTtcblxuLyoqXG4gKiBUaGUgdGludGluZyBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQuXG4gKlxuICovXG5DYW52YXNUaW50ZXIudGludE1ldGhvZCA9IENhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA/IENhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5IDogIENhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsO1xuIiwidmFyIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcblx0dXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIFRleHR1cmVNYW5hZ2VyID0gZnVuY3Rpb24oZ2wpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyB0cmFjayB0ZXh0dXJlcyBpbiB0aGUgcmVuZGVyZXIgc28gd2UgY2FuIG5vIGxvbmdlciBsaXN0ZW4gdG8gdGhlbSBvbiBkZXN0cnVjdGlvbi5cblx0dGhpcy5fbWFuYWdlZFRleHR1cmVzID0gW107XG4gICAgdGhpcy5nbFRleHR1cmVzID0ge307XG5cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5nZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW5kL29yIENyZWF0ZXMgYSBXZWJHTCB0ZXh0dXJlIGZvciB0aGUgcmVuZGVyZXIncyBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdXBkYXRlXG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuXHRpZiAoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGdsVGV4dHVyZSA9IHRoaXMuZ2xUZXh0dXJlc1t0ZXh0dXJlLnVpZF0vL3RleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgaWYgKCFnbFRleHR1cmUpXG4gICAge1xuICAgICAgICBnbFRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcbiAgICAgICAgZ2xUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSB0cnVlXG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgLy8gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXSA9IGdsVGV4dHVyZTtcblxuICAgICAgICB0ZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9uKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICBnbFRleHR1cmUudXBsb2FkKHRleHR1cmUuc291cmNlKTtcbiAgICBcbiAgICAvL1RPRE8gY2hlY2sgaXMgcG93ZXIgb2YgdHdvLi5cbiAgICBnbFRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cblxuICAgIC8vIFRPRE8gY2hlY2sgZm9yIHNjYWxpbmcgdHlwZVxuICAgIGdsVGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKCk7XG5cbiAgICByZXR1cm4gIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTFxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gZGVzdHJveVxuICovXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlLCBfc2tpcFJlbW92ZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0pXG4gICAge1xuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG5cblxuICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcblxuICAgICAgICBpZiAoIV9za2lwUmVtb3ZlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5pbmRleE9mKHRleHR1cmUpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5fbWFuYWdlZFRleHR1cmVzLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKClcbntcblx0Ly8gZW1wdHkgYWxsIHRoZSBvbGQgZ2wgdGV4dHVyZXMgYXMgdGhleSBhcmUgdXNlbGVzcyBub3dcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzW2ldO1xuICAgICAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuICAgIC8vIGRlc3Ryb3kgbWFuYWdlZCB0ZXh0dXJlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIHRoaXMuZGVzdHJveVRleHR1cmUodGV4dHVyZSwgdHJ1ZSk7XG4gICAgICAgIHRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9mZignZGlzcG9zZScsIHRoaXMuZGVzdHJveVRleHR1cmUsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcyA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZU1hbmFnZXI7XG5cbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgU2hhZGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIE1hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9NYXNrTWFuYWdlcicpLFxuICAgIFN0ZW5jaWxNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlcicpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBCbGVuZE1vZGVNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4vdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBGWEFBRmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBUZXh0dXJlTWFuYWdlciA9IHJlcXVpcmUoJy4vVGV4dHVyZU1hbmFnZXInKSxcbiAgICBjcmVhdGVDb250ZXh0ID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuY3JlYXRlQ29udGV4dCxcbiAgICBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aScpLFxuICAgIG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpID0gcmVxdWlyZSgnLi91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFdlYkdMUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIHdlYkdMIGVuYWJsZWQgY2FudmFzLiBUaGlzIHJlbmRlcmVyXG4gKiBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMLiBUaGlzIFJlbmRlciB3b3JrcyBieSBhdXRvbWF0aWNhbGx5IG1hbmFnaW5nIHdlYkdMQmF0Y2hzLlxuICogU28gbm8gbmVlZCBmb3IgU3ByaXRlIEJhdGNoZXMgb3IgU3ByaXRlIENsb3Vkcy5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIHZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9MF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9MF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMuIElmIG5vdCBhdmFpbGFibGUgbmF0aXZlbHkgdGhlbiBGWEFBIGFudGlhbGlhc2luZyBpcyB1c2VkXG4gKiBAcGFyYW0gW29wdGlvbnMuZm9yY2VGWEFBPWZhbHNlXSB7Ym9vbGVhbn0gZm9yY2VzIEZYQUEgYW50aWFsaWFzaW5nIHRvIGJlIHVzZWQgb3ZlciBuYXRpdmUuIEZYQUEgaXMgZmFzdGVyLCBidXQgbWF5IG5vdCBhbHdheXMgbG9vayBhcyBncmVhdFxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy4gSWYgeW91IHdpc2ggdG8gc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSAqbXVzdCogc2V0IHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byBgdHJ1ZWAuXG4gKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmXG4gKiAgICAgIHlvdSBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0LlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ1dlYkdMJywgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIHJlbmRlcmVyIGFzIGEgc3RhbmRhcmRpc2VkIGNvbnN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9Ly9cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0w7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gdGhpcy5oYW5kbGVDb250ZXh0TG9zdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5oYW5kbGVDb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gY3JlYXRlIGEgbmV3IHdlYmdsIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgICAgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQsXG4gICAgICAgIGFudGlhbGlhczogb3B0aW9ucy5hbnRpYWxpYXMsXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnRyYW5zcGFyZW50ICE9PSAnbm90TXVsdGlwbGllZCcsXG4gICAgICAgIHN0ZW5jaWw6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICB9O1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYVszXSA9IHRoaXMudHJhbnNwYXJlbnQgPyAwIDogMTtcblxuICAgIC8qKlxuICAgICAqIERlYWxzIHdpdGggbWFuYWdpbmcgdGhlIHNoYWRlciBwcm9ncmFtcyBhbmQgdGhlaXIgYXR0cmlicy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBuZXcgU2hhZGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1hc2tzIHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWFza01hbmFnZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG5ldyBNYXNrTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyID0gbmV3IFN0ZW5jaWxNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRmlsdGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlck1hbmFnZXIgPSBuZXcgRmlsdGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIGJsZW5kTW9kZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmxlbmRNb2RlTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBuZXcgQmxlbmRNb2RlTWFuYWdlcih0aGlzKTtcblxuICAgIFxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIE9iamVjdFJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5PYmplY3RSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG5ldyBPYmplY3RSZW5kZXJlcih0aGlzKTtcblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIGNvbnRleHQgc28gaXQgaXMgcmVhZHkgZm9yIHRoZSBtYW5hZ2Vycy5cbiAgICB0aGlzLmdsID0gY3JlYXRlQ29udGV4dCh0aGlzLnZpZXcsIHRoaXMuX2NvbnRleHRPcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXRDb250ZXh0KCk7XG5cbiAgICAvLyBtYXAgc29tZSB3ZWJHTCBibGVuZCBhbmQgZHJhd21vZGVzLi5cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wpO1xuICAgIHRoaXMuZHJhd01vZGVzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wpXG5cbiAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXR9XG4gICAgICovXG4gICAgdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUZXh0dXJlTG9jYXRpb24gPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oV2ViR0xSZW5kZXJlcik7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgV2ViR0wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLl9pbml0Q29udGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgbWFuYWdlci4uLlxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hbmFnZXIoZ2wpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBkZWZhdWx0IHBpeGkgc2V0dGluZ3MuLlxuICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG5cblxuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBudWxsLCB0aGlzLnJlc29sdXRpb24sIHRydWUpO1xuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5jbGVhckNvbG9yID0gdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYTtcbiAgICBcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQodGhpcy5yb290UmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMuZW1pdCgnY29udGV4dCcsIGdsKTtcblxuICAgIC8vIHNldHVwIHRoZSB3aWR0aC9oZWlnaHQgcHJvcGVydGllcyBhbmQgZ2wgdmlld3BvcnRcbiAgICB0aGlzLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7ICAgIFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gaXRzIHdlYkdMIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIC8vIG5vIHBvaW50IHJlbmRlcmluZyBpZiBvdXIgY29udGV4dCBoYXMgYmVlbiBibG93biB1cCFcbiAgICBpZiAodGhpcy5nbC5pc0NvbnRleHRMb3N0KCkpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gZGlzcGxheU9iamVjdDtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IGRpc3BsYXlPYmplY3QucGFyZW50O1xuICAgIGRpc3BsYXlPYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIGRpc3BsYXlPYmplY3QudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnJvb3RSZW5kZXJUYXJnZXQsIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpOy8vdGhpcy5wcm9qZWN0aW9uKTtcblxuICAgIHRoaXMuZW1pdCgncG9zdHJlbmRlcicpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgRGlzcGxheSBPYmplY3QuXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0gcmVuZGVyVGFyZ2V0IHtQSVhJLlJlbmRlclRhcmdldH0gVGhlIHJlbmRlciB0YXJnZXQgdG8gdXNlIHRvIHJlbmRlciB0aGlzIGRpc3BsYXkgb2JqZWN0XG4gKlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJEaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHJlbmRlclRhcmdldCwgY2xlYXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgdGhpcy5iaW5kUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG5cbiAgICBpZihjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IHRoZSBmaWx0ZXIgbWFuYWdlclxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5zZXRGaWx0ZXJTdGFjayggcmVuZGVyVGFyZ2V0LmZpbHRlclN0YWNrICk7XG5cbiAgICAvLyByZW5kZXIgdGhlIHNjZW5lIVxuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyV2ViR0wodGhpcyk7XG5cbiAgICAvLyBmaW5pc2ggdGhlIGN1cnJlbnQgcmVuZGVyZXIuLlxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdGhlIG9uZSBnaXZlbiBpbiBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gb2JqZWN0UmVuZGVyZXIge1BJWEkuT2JqZWN0UmVuZGVyZXJ9IFRoZSBvYmplY3QgcmVuZGVyZXIgdG8gdXNlLlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRPYmplY3RSZW5kZXJlciA9IGZ1bmN0aW9uIChvYmplY3RSZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyZXIgPT09IG9iamVjdFJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0b3AoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG9iamVjdFJlbmRlcmVyO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHdlYkdMIHZpZXcgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB3ZWJHTCB2aWV3XG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB3ZWJHTCB2aWV3XG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9PT0gdGhpcy5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSB0aGUgbmV3IHJlbmRlciB0YXJnZXRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgaWYocmVuZGVyVGFyZ2V0ICE9PSB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcblxuICAgICAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLnNldE1hc2tTdGFjayggcmVuZGVyVGFyZ2V0LnN0ZW5jaWxNYXNrU3RhY2sgKTtcbiAgICB9XG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKS8vcHJvamVjdGlvbiwgYnVmZmVyKVxue1xuICAgIC8vVE9ETyBjYWNoZVxuICAgIGlmKHRoaXMuX2FjdGl2ZVNoYWRlciAhPT0gc2hhZGVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlU2hhZGVyID0gc2hhZGVyO1xuICAgICAgICBzaGFkZXIuYmluZCgpO1xuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgfVxufVxuXG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvY2F0aW9uKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvL1RPRE8gdGVzdCBwZXJmIG9mIGNhY2hlP1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gfHwgMDtcblxuICAgIGlmKHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiAhPT0gbG9jYXRpb24pLy9cbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbiApO1xuICAgIH1cblxuICAgIC8vVE9ETyAtIGNhbiB3ZSBjYWNoZSB0aGlzIHRleHR1cmUgdG9vP1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOyAgICAgIFxuICAgIFxuICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBiaW5kIHRoZSB0ZXh0dXJlLi5cbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0uYmluZCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEhhbmRsZXMgYSBsb3N0IHdlYmdsIGNvbnRleHRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5oYW5kbGVDb250ZXh0TG9zdCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGEgcmVzdG9yZWQgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnJlbW92ZUFsbCgpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgKGV2ZW50IGxpc3RlbmVycywgc3ByaXRlYmF0Y2gsIGV0Yy4uLilcbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldylcbntcbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICAvLyByZW1vdmUgbGlzdGVuZXJzXG4gICAgdGhpcy52aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0KTtcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCk7XG5cbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLmRlc3Ryb3lBbGwoKTtcblxuICAgIC8vIGNhbGwgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMudWlkID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIG1hbmFnZXJzXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLm1hc2tNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gbnVsbDtcbiAgICB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLnVzZVByb2dyYW0obnVsbCk7XG4gICAgdGhpcy5nbCA9IG51bGw7XG59O1xuXG4iLCJ2YXIgRGVmYXVsdFNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgUElYSSBmaWx0ZXIuIEN1cnJlbnRseSBvbmx5IFdlYkdMIHN1cHBvcnRzIGZpbHRlcnMuXG4gKiBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIGZpbHRlciB0aGlzIHNob3VsZCBiZSB5b3VyIGJhc2UgY2xhc3MuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHZlcnRleFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdmVydGV4IHNoYWRlciBzb3VyY2UgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBmcmFnbWVudFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIHVuaWZvcm1zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1bmlmb3JtcyBmb3IgdGhpcyBmaWx0ZXIuXG4gKi9cbmZ1bmN0aW9uIEFic3RyYWN0RmlsdGVyKHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zKVxue1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygc2hhZGVyc1xuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlcnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHRyYSBwYWRkaW5nIHRoYXQgdGhlIGZpbHRlciBtaWdodCBuZWVkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIHZlcnRleCBzaGFkZXJcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmdbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmVydGV4U3JjID0gdmVydGV4U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIG9mIHRoZSBmcmFtZW50IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgLy9UT0RPIGEgcmVtaW5kZXIgLSB3b3VsZCBiZSBjb29sIHRvIGhhdmUgbG93ZXIgcmVzIGZpbHRlcnMgYXMgdGhpcyB3b3VsZCBnaXZlIGJldHRlciBwZXJmb3JtYW5jZS5cblxuICAgIC8vdHlwZW9mIGZyYWdtZW50U3JjID09PSAnc3RyaW5nJyA/IGZyYWdtZW50U3JjLnNwbGl0KCcnKSA6IChmcmFnbWVudFNyYyB8fCBbXSk7XG5cbn1cblxuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RmlsdGVyO1xuXG4vKipcbiAqIEdyYWJzIGEgc2hhZGVyIGZyb20gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBzaGFkZXIgZnJvbVxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuZ2V0U2hhZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyc1tnbC5pZF07XG5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IG5ldyBEZWZhdWx0U2hhZGVyKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIsXG4gICAgICAgICAgICB0aGlzLnZlcnRleFNyYyxcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRTcmMsXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaGFkZXJzW2dsLmlkXSA9IHNoYWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbn07XG5cbi8qKlxuICogU3luY3MgYSB1bmlmb3JtIGJldHdlZW4gdGhlIGNsYXNzIG9iamVjdCBhbmQgdGhlIHNoYWRlcnMuXG4gKlxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuc2hhZGVycy5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnNoYWRlcnNbaV0uc3luY1VuaWZvcm0odW5pZm9ybSk7XG4gICAgfVxufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKlxuICogQmFzaWMgRlhBQSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgY29kZSBvbiBnZWVrczNkLmNvbSB3aXRoIHRoZVxuICogbW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXG4gKiB1bnN1cHBvcnRlZCBieSBXZWJHTC5cbiAqXG4gKiAtLVxuICogRnJvbTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICpcbiAqL1xuZnVuY3Rpb24gRlhBQUZpbHRlcigpXG57XG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxuXFxudm9pZCB0ZXhjb29yZHModmVjMiBmcmFnQ29vcmQsIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk5XLCBvdXQgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiU1csIG91dCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzIgaW52ZXJzZVZQID0gMS4wIC8gcmVzb2x1dGlvbi54eTtcXG4gICAgdl9yZ2JOVyA9IChmcmFnQ29vcmQgKyB2ZWMyKC0xLjAsIC0xLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JORSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYlNXID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU0UgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIDEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk0gPSB2ZWMyKGZyYWdDb29yZCAqIGludmVyc2VWUCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbiAgIHZSZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcXG5cXG4gICAvL2NvbXB1dGUgdGhlIHRleHR1cmUgY29vcmRzIGFuZCBzZW5kIHRoZW0gdG8gdmFyeWluZ3NcXG4gICB0ZXhjb29yZHMoYVRleHR1cmVDb29yZCAqIHJlc29sdXRpb24sIHJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG5cXG4vKipcXG5CYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXFxubW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXFxudW5zdXBwb3J0ZWQgYnkgV2ViR0wuXFxuXFxuLS1cXG5cXG5Gcm9tOlxcbmh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XFxuXFxuQ29weXJpZ2h0IChjKSAyMDExIGJ5IEFybWluIFJvbmFjaGVyLlxcblxcblNvbWUgcmlnaHRzIHJlc2VydmVkLlxcblxcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcXG5tZXQ6XFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcXG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxcbiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXFxuICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXFxuICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxcblxcbiAgICAqIFRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yXFxuICAgICAgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljXFxuICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxcblxcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcXG5cXFwiQVMgSVNcXFwiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxcbkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXFxuT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXFxuU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxcblRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxcbiovXFxuXFxuI2lmbmRlZiBGWEFBX1JFRFVDRV9NSU5cXG4gICAgI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gICAoMS4wLyAxMjguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01VTFxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAgICgxLjAgLyA4LjApXFxuI2VuZGlmXFxuI2lmbmRlZiBGWEFBX1NQQU5fTUFYXFxuICAgICNkZWZpbmUgRlhBQV9TUEFOX01BWCAgICAgOC4wXFxuI2VuZGlmXFxuXFxuLy9vcHRpbWl6ZWQgdmVyc2lvbiBmb3IgbW9iaWxlLCB3aGVyZSBkZXBlbmRlbnRcXG4vL3RleHR1cmUgcmVhZHMgY2FuIGJlIGEgYm90dGxlbmVja1xcbnZlYzQgZnhhYShzYW1wbGVyMkQgdGV4LCB2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JOVywgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JTVywgdmVjMiB2X3JnYlNFLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzQgY29sb3I7XFxuICAgIG1lZGl1bXAgdmVjMiBpbnZlcnNlVlAgPSB2ZWMyKDEuMCAvIHJlc29sdXRpb24ueCwgMS4wIC8gcmVzb2x1dGlvbi55KTtcXG4gICAgdmVjMyByZ2JOVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTlcpLnh5ejtcXG4gICAgdmVjMyByZ2JORSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTkUpLnh5ejtcXG4gICAgdmVjMyByZ2JTVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU1cpLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU0UpLnh5ejtcXG4gICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTSk7XFxuICAgIHZlYzMgcmdiTSAgPSB0ZXhDb2xvci54eXo7XFxuICAgIHZlYzMgbHVtYSA9IHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdChyZ2JOVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFORSA9IGRvdChyZ2JORSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTVyA9IGRvdChyZ2JTVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdChyZ2JTRSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNICA9IGRvdChyZ2JNLCAgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNaW4gPSBtaW4obHVtYU0sIG1pbihtaW4obHVtYU5XLCBsdW1hTkUpLCBtaW4obHVtYVNXLCBsdW1hU0UpKSk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgobHVtYU0sIG1heChtYXgobHVtYU5XLCBsdW1hTkUpLCBtYXgobHVtYVNXLCBsdW1hU0UpKSk7XFxuXFxuICAgIG1lZGl1bXAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcblxcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoKGx1bWFOVyArIGx1bWFORSArIGx1bWFTVyArIGx1bWFTRSkgKlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwpLCBGWEFBX1JFRFVDRV9NSU4pO1xcblxcbiAgICBmbG9hdCByY3BEaXJNaW4gPSAxLjAgLyAobWluKGFicyhkaXIueCksIGFicyhkaXIueSkpICsgZGlyUmVkdWNlKTtcXG4gICAgZGlyID0gbWluKHZlYzIoRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBtYXgodmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiBpbnZlcnNlVlA7XFxuXFxuICAgIHZlYzMgcmdiQSA9IDAuNSAqIChcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqICgxLjAgLyAzLjAgLSAwLjUpKS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDIuMCAvIDMuMCAtIDAuNSkpLnh5eik7XFxuICAgIHZlYzMgcmdiQiA9IHJnYkEgKiAwLjUgKyAwLjI1ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogLTAuNSkueHl6ICtcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqIDAuNSkueHl6KTtcXG5cXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QocmdiQiwgbHVtYSk7XFxuICAgIGlmICgobHVtYUIgPCBsdW1hTWluKSB8fCAobHVtYUIgPiBsdW1hTWF4KSlcXG4gICAgICAgIGNvbG9yID0gdmVjNChyZ2JBLCB0ZXhDb2xvci5hKTtcXG4gICAgZWxzZVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkIsIHRleENvbG9yLmEpO1xcbiAgICByZXR1cm4gY29sb3I7XFxufVxcblxcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBmeGFhKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICogdlJlc29sdXRpb24sIHZSZXNvbHV0aW9uLCB2X3JnYk5XLCB2X3JnYk5FLCB2X3JnYlNXLCB2X3JnYlNFLCB2X3JnYk0pO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxufVxuXG5GWEFBRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkZYQUFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRlhBQUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRlhBQUZpbHRlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICovXG5GWEFBRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIoIHJlbmRlcmVyICk7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG4iLCJ2YXIgQWJzdHJhY3RGaWx0ZXIgPSByZXF1aXJlKCcuL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgU3ByaXRlTWFza0ZpbHRlciBjbGFzc1xuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICovXG5mdW5jdGlvbiBTcHJpdGVNYXNrRmlsdGVyKHNwcml0ZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXNrQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICAgdk1hc2tDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIC8vIGNoZWNrIGNsaXAhIHRoaXMgd2lsbCBzdG9wIHRoZSBtYXNrIGJsZWVkaW5nIG91dCBmcm9tIHRoZSBlZGdlc1xcbiAgICB2ZWMyIHRleHQgPSBhYnMoIHZNYXNrQ29vcmQgLSAwLjUgKTtcXG4gICAgdGV4dCA9IHN0ZXAoMC41LCB0ZXh0KTtcXG4gICAgZmxvYXQgY2xpcCA9IDEuMCAtIG1heCh0ZXh0LnksIHRleHQueCk7XFxuICAgIHZlYzQgb3JpZ2luYWwgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgICB2ZWM0IG1hc2t5ID0gdGV4dHVyZTJEKG1hc2ssIHZNYXNrQ29vcmQpO1xcbiAgICBvcmlnaW5hbCAqPSAobWFza3kuciAqIG1hc2t5LmEgKiBhbHBoYSAqIGNsaXApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBvcmlnaW5hbDtcXG59XFxuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hc2s6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLl90ZXh0dXJlIH0sXG4gICAgICAgICAgICBhbHBoYTogICAgICAgICAgeyB0eXBlOiAnZicsIHZhbHVlOiAxfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG59XG5cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVNYXNrRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVNYXNrRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS5fdGV4dHVyZTtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS53b3JsZEFscGhhO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHVzZWQgdG8gbW92ZSB0aGUgZGlzcGxhY2VtZW50IG1hcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlTWFza0ZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHbE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQmxlbmRNb2RlTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59XG5cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmRNb2RlTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxlbmRNb2RlTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzLXVwIHRoZSBnaXZlbiBibGVuZE1vZGUgZnJvbSBXZWJHTCdzIHBvaW50IG9mIHZpZXcuXG4gKlxuICogQHBhcmFtIGJsZW5kTW9kZSB7bnVtYmVyfSB0aGUgYmxlbmRNb2RlLCBzaG91bGQgYmUgYSBQaXhpIGNvbnN0LCBzdWNoIGFzIGBQSVhJLkJMRU5EX01PREVTLkFERGAuIFNlZVxuICogIHtAbGluayBQSVhJLkJMRU5EX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICovXG5CbGVuZE1vZGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRCbGVuZE1vZGUgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPT09IGJsZW5kTW9kZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMucmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmN1cnJlbnRCbGVuZE1vZGVdO1xuICAgIHRoaXMucmVuZGVyZXIuZ2wuYmxlbmRGdW5jKG1vZGVbMF0sIG1vZGVbMV0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpLFxuICAgIFF1YWQgPSByZXF1aXJlKCcuLi91dGlscy9RdWFkJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gRmlsdGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW107XG5cbiAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICByZW5kZXJUYXJnZXQ6cmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldCxcbiAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICBib3VuZHM6bnVsbFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgLy8gbGlzdGVuIGZvciBjb250ZXh0IGFuZCB1cGRhdGUgbmVjZXNzYXJ5IGJ1ZmZlcnNcbiAgICAvL1RPRE8gbWFrZSB0aGlzIGR5bmFtaWMhXG4gICAgLy9UT0RPIHRlc3QgdGhpcyBvdXQgYnkgZm9yY2VzIHBvd2VyIG9mIHR3bz9cbiAgICB0aGlzLnRleHR1cmVTaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZnJhbWVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcbn1cblxuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWx0ZXJNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBGaWx0ZXJNYW5hZ2VyO1xuXG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnF1YWQgPSBuZXcgUXVhZChnbCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHBhcmFtIGJ1ZmZlciB7QXJyYXlCdWZmZXJ9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnNldEZpbHRlclN0YWNrID0gZnVuY3Rpb24gKCBmaWx0ZXJTdGFjayApXG57XG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IGZpbHRlclN0YWNrO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXIgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBmaWx0ZXJzIHtQSVhJLkFic3RyYWN0RmlsZXJbXX0gdGhlIGZpbHRlcnMgdGhhdCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2tcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucHVzaEZpbHRlciA9IGZ1bmN0aW9uICh0YXJnZXQsIGZpbHRlcnMpXG57XG4gICAgLy8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdC4uXG4gICAgLy8gVE9ETyByZXBsYWNlIGNsb25lIHdpdGggYSBjb3B5IHRvIHNhdmUgb2JqZWN0IGNyZWF0aW9uXG4gICAgdmFyIGJvdW5kcyA9IHRhcmdldC5maWx0ZXJBcmVhID8gdGFyZ2V0LmZpbHRlckFyZWEuY2xvbmUoKSA6IHRhcmdldC5nZXRCb3VuZHMoKTtcblxuICAgIC8vYm91bmRzID0gYm91bmRzLmNsb25lKCk7XG5cbiAgICAvLyByb3VuZCBvZmYgdGhlIHJlY3RhbmdsZSB0byBnZXQgYSBuaWNlIHNtb29vb29vb3RoIGZpbHRlciA6KVxuICAgIGJvdW5kcy54ID0gYm91bmRzLnggfCAwO1xuICAgIGJvdW5kcy55ID0gYm91bmRzLnkgfCAwO1xuICAgIGJvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCB8IDA7XG4gICAgYm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgfCAwO1xuXG5cbiAgICAvLyBwYWRkaW5nIVxuICAgIHZhciBwYWRkaW5nID0gZmlsdGVyc1swXS5wYWRkaW5nIHwgMDtcbiAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG5cblxuICAgIGlmKHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvL1RPRE8gdGhpcyB3aWxsIGJyZWFrIGlmIHRoZSByZW5kZXJUZXh0dXJlIHRyYW5zZm9ybSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgdHJhbnNsYXRpb24uXG4gICAgICAgIC8vV2lsbCBuZWVkIHRvIHRha2UgdGhlIGZ1bGwgbWF0cml4IHRyYW5zZm9ybSBpbnRvIGFjb3VudC4uXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQudHJhbnNmb3JtO1xuXG4gICAgICAgIGJvdW5kcy54ICs9IHRyYW5zZm9ybS50eDtcbiAgICAgICAgYm91bmRzLnkgKz0gdHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG5cbiAgICAgICAgYm91bmRzLnggLT0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSAtPSB0cmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgICB0aGlzLmNhcEZpbHRlckFyZWEoIGJvdW5kcyApO1xuICAgIH1cblxuICAgIGlmKGJvdW5kcy53aWR0aCA+IDAgJiYgYm91bmRzLmhlaWdodCA+IDApXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGJvdW5kcztcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGV4dHVyZSk7XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRleHR1cmUuLlxuICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gVE9ETyBnZXQgcmlkIG9mIG9iamVjdCBjcmVhdGlvbiFcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogdGV4dHVyZSxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBwdXNoIHNvbXRoaW5nIG9uIHRvIHRoZSBzdGFjayB0aGF0IGlzIGVtcHR5XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcnNcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnBvcEZpbHRlciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrLnBvcCgpO1xuICAgIHZhciBwcmV2aW91c0ZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrW3RoaXMuZmlsdGVyU3RhY2subGVuZ3RoLTFdO1xuXG4gICAgdmFyIGlucHV0ID0gZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyBpZiB0aGUgcmVuZGVyVGFyZ2V0IGlzIG51bGwgdGhlbiB3ZSBkb24ndCBhcHBseSB0aGUgZmlsdGVyIGFzIGl0cyBvZmZzY3JlZW5cbiAgICBpZighZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IHByZXZpb3VzRmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyB1c2UgcHJvZ3JhbVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaW5wdXQuZnJhbWU7XG5cbiAgICB0aGlzLnF1YWQubWFwKHRoaXMudGV4dHVyZVNpemUsIGlucHV0LmZyYW1lKTtcblxuXG4gICAgLy8gVE9ETy4uIHRoaXMgcHJvYmFibHkgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgZmlsdGVycyA9IGZpbHRlckRhdGEuZmlsdGVyO1xuXG4gICAgLy8gYXNzdW1pbmcgYWxsIGZpbHRlcnMgZm9sbG93IHRoZSBjb3JyZWN0IGZvcm1hdD8/XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAyICogNCAqIDQpO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIG5vcm1hbCBibGVuZG1vZGUhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShDT05TVC5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAxKVxuICAgIHtcbiAgICAgICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoZW4gc2V0dGluZyB0aGlzIGVhY2ggdGltZT9cbiAgICAgICAgaWYgKGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgIGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1swXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgaW5wdXQsIG91dHB1dCApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggaW5wdXQgKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZmxpcFRleHR1cmUgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3BUZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aC0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICAgICAgaWYgKGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBmbG9wVGV4dHVyZSApO1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGZsaXBUZXh0dXJlO1xuICAgICAgICAgICAgZmxpcFRleHR1cmUgPSBmbG9wVGV4dHVyZTtcbiAgICAgICAgICAgIGZsb3BUZXh0dXJlID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlcnNbZmlsdGVycy5sZW5ndGgtMV0uYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBvdXRwdXQgKTtcblxuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxpcFRleHR1cmUgKTtcbiAgICAgICAgdGhpcy5yZXR1cm5SZW5kZXJUYXJnZXQoIGZsb3BUZXh0dXJlICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckRhdGEuZmlsdGVyO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY2xlYXIgdGhlIFJlbmRlclRhcmdldFxuICogQHJldHVybiB7UmVuZGVyVGFyZ2V0fVxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIGNsZWFyIClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy50ZXh0dXJlUG9vbC5wb3AoKSB8fCBuZXcgUmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyZXIuZ2wsIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0LCBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiAqIENPTlNULkZJTFRFUl9SRVNPTFVUSU9OKTtcbiAgICByZW5kZXJUYXJnZXQuZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcih0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyVGFyZ2V0O1xufTtcblxuLypcbiAqIFJldHVybnMgYSBSZW5kZXJUYXJnZXQgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1JlbmRlclRhcmdldH0gVGhlIFJlbmRlclRhcmdldCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5SZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0KVxue1xuICAgIHRoaXMudGV4dHVyZVBvb2wucHVzaCggcmVuZGVyVGFyZ2V0ICk7XG59O1xuXG4vKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2hhZGVyIHtTaGFkZXJ9IFRoZSBzaGFkZXIgdG8gdXBsb2FkXG4gKiBAcGFyYW0gaW5wdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBjbGVhciB0aGUgb3V0cHV0VGFyZ2V0XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHNoYWRlciwgaW5wdXRUYXJnZXQsIG91dHB1dFRhcmdldCwgY2xlYXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG91dHB1dFRhcmdldCk7XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICBvdXRwdXRUYXJnZXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHNoYWRlclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gQ2FuIHRoaXMgYmUgY2FjaGVkIGFuZCBub3QgYHRvQXJyYXlgZWQgZWFjaCBmcmFtZT9cbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG5cbiAgICAvL1RPRE8gY2FuIHRoaXMgYmUgb3B0aW1pc2VkP1xuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcbi8qXG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcbiovXG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBpbnB1dFRhcmdldC50ZXh0dXJlKTtcblxuICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbn07XG5cbi8qXG4gKiBDYWxjdWxhdGVzIHRoZSBtYXBwZWQgbWF0cml4XG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWFcbiAqIEBwYXJhbSBzcHJpdGUge1Nwcml0ZX0gdGhlIHRhcmdldCBzcHJpdGVcbiAqIEBwYXJhbSBvdXRwdXRNYXRyaXgge01hdHJpeH0gQGFsdmluXG4gKi9cbi8vIFRPRE8gcGxheWluZyBhcm91bmQgaGVyZS4uIHRoaXMgaXMgdGVtcG9yYXJ5IC0gKHdpbGwgZW5kIHVwIGluIHRoZSBzaGFkZXIpXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jYWxjdWxhdGVNYXBwZWRNYXRyaXggPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSwgc3ByaXRlLCBvdXRwdXRNYXRyaXgpXG57XG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gc3ByaXRlLndvcmxkVHJhbnNmb3JtLmNvcHkobWF0aC5NYXRyaXguVEVNUF9NQVRSSVgpLFxuICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICB2YXIgbWFwcGVkTWF0cml4ID0gb3V0cHV0TWF0cml4LmlkZW50aXR5KCk7XG5cbiAgICAvLyBzY2FsZS4uXG4gICAgdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCApO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKDEgLCByYXRpbyk7XG5cbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyB0ZXh0dXJlLndpZHRoKTtcbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gdGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0udHggLz0gdGV4dHVyZS53aWR0aCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICB3b3JsZFRyYW5zZm9ybS50eSAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0uaW52ZXJ0KCk7XG5cbiAgICBtYXBwZWRNYXRyaXgucHJlcGVuZCh3b3JsZFRyYW5zZm9ybSk7XG5cbiAgICAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIG1hcHBlZE1hdHJpeC50cmFuc2xhdGUoc3ByaXRlLmFuY2hvci54LCBzcHJpdGUuYW5jaG9yLnkpO1xuXG4gICAgcmV0dXJuIG1hcHBlZE1hdHJpeDtcblxuICAgIC8vIEtlZXBpbmcgdGhlIG9yZ2luYWwgYXMgYSByZW1pbmRlciB0byBtZSBvbiBob3cgdGhpcyB3b3JrcyFcbiAgICAvL1xuICAgIC8vIHZhciBtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvLyAvLyBzY2FsZS4uXG4gICAgLy8gdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgLy8gbS50cmFuc2xhdGUoZmlsdGVyQXJlYS54IC8gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgZmlsdGVyQXJlYS55IC8gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQpO1xuXG5cbiAgICAvLyBtLnNjYWxlKDEgLCByYXRpbyk7XG5cblxuICAgIC8vIHZhciB0cmFuc2Zvcm0gPSB3dC5jbG9uZSgpO1xuXG4gICAgLy8gdmFyIHRyYW5zbGF0ZVNjYWxlWCA9ICh0aGlzLnRleHR1cmVTaXplLndpZHRoIC8gNjIwKTtcbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gMzgwKTtcblxuICAgIC8vIHRyYW5zZm9ybS50eCAvPSA2MjAgKiB0cmFuc2xhdGVTY2FsZVg7XG4gICAgLy8gdHJhbnNmb3JtLnR5IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcblxuICAgIC8vIHRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIC8vIHRyYW5zZm9ybS5hcHBlbmQobSk7XG5cbiAgICAvLyAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgLy8gdHJhbnNmb3JtLnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIC8vIHJldHVybiB0cmFuc2Zvcm07XG59O1xuXG4vKlxuICogQ29uc3RyYWlucyB0aGUgZmlsdGVyIGFyZWEgdG8gdGhlIHRleHR1cmUgc2l6ZVxuICogQHBhcmFtIGZpbHRlckFyZWEge1JlY3RhbmdsZX0gVGhlIGZpbHRlciBhcmVhIHdlIHdhbnQgdG8gY2FwXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhcEZpbHRlckFyZWEgPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSlcbntcbiAgICBpZiAoZmlsdGVyQXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEud2lkdGggKz0gZmlsdGVyQXJlYS54O1xuICAgICAgICBmaWx0ZXJBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgKz0gZmlsdGVyQXJlYS55O1xuICAgICAgICBmaWx0ZXJBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggZmlsdGVyQXJlYS54ICsgZmlsdGVyQXJlYS53aWR0aCA+IHRoaXMudGV4dHVyZVNpemUud2lkdGggKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCA9IHRoaXMudGV4dHVyZVNpemUud2lkdGggLSBmaWx0ZXJBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnkgKyBmaWx0ZXJBcmVhLmhlaWdodCA+IHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLSBmaWx0ZXJBcmVhLnk7XG4gICAgfVxufTtcblxuLypcbiAqIFJlc2l6ZXMgYWxsIHRoZSByZW5kZXIgdGFyZ2V0cyBpbiB0aGUgcG9vbFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLnRleHR1cmVTaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLnJlc2l6ZSggd2lkdGgsIGhlaWdodCApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGZpbHRlciBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBmaWx0ZXIgc3RhY2suXG4gKlxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnF1YWQuZGVzdHJveSgpO1xuICAgIFxuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBudWxsO1xuICAgIHRoaXMub2Zmc2V0WSA9IDA7XG5cbiAgICAvLyBkZXN0cm95IHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHR1cmVQb29sLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlUG9vbCA9IG51bGw7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgQWxwaGFNYXNrRmlsdGVyID0gcmVxdWlyZSgnLi4vZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNYXNrTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICB0aGlzLmFscGhhTWFza1Bvb2wgPSBbXTtcbn1cblxuTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hc2tNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgaWYgKG1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBtYXNrIGZyb20gdGhlIG1hc2sgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucG9wU3ByaXRlTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTcHJpdGVNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdmFyIGFscGhhTWFza0ZpbHRlciA9IHRoaXMuYWxwaGFNYXNrUG9vbC5wb3AoKTtcblxuICAgIGlmICghYWxwaGFNYXNrRmlsdGVyKVxuICAgIHtcbiAgICAgICAgYWxwaGFNYXNrRmlsdGVyID0gW25ldyBBbHBoYU1hc2tGaWx0ZXIobWFza0RhdGEpXTtcbiAgICB9XG5cbiAgICBhbHBoYU1hc2tGaWx0ZXJbMF0ubWFza1Nwcml0ZSA9IG1hc2tEYXRhO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRhcmdldCwgYWxwaGFNYXNrRmlsdGVyKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKi9cbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTcHJpdGVNYXNrID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVycyA9IHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbC5wdXNoKGZpbHRlcnMpO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTdGVuY2lsTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaE1hc2sobWFza0RhdGEpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BNYXNrKG1hc2tEYXRhKTtcbn07XG5cbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1RleHR1cmVTaGFkZXInKSxcbiAgICBDb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhBdHRpYnMgPSAxMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG5cbi8vICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcbn1cblxuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaGFkZXJNYW5hZ2VyO1xudXRpbHMucGx1Z2luVGFyZ2V0Lm1peGluKFNoYWRlck1hbmFnZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlck1hbmFnZXI7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cblNoYWRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlIGNvcnJlY3RseSBhcyB0aGlzIHRlbmRzIHRvIHZhcnlcbiAgICB0aGlzLm1heEF0dGlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xuXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1heEF0dGliczsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRPRE8gLSBXaHkgYXJlIHRoZXNlIG5vdCBwbHVnaW5zPyBXZSBjYW4ndCBkZWNvdXBsZSBwcmltaXRpdmVzIHVubGVzcyB0aGV5IGFyZS4uLi5cbiAgICB0aGlzLmRlZmF1bHRTaGFkZXIgPSBuZXcgVGV4dHVyZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcyk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbmV3IENvbXBsZXhQcmltaXRpdmVTaGFkZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFRha2VzIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHBhcmFtZXRlcnMgYW5kIHVwbG9hZHMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXR0cmlicyB7YW55W119IGF0dHJpYnNcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0QXR0cmlicyA9IGZ1bmN0aW9uIChhdHRyaWJzKVxue1xuICAgIC8vIHJlc2V0IHRlbXAgc3RhdGVcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRlbXBBdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAodmFyIGEgaW4gYXR0cmlicylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbYV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSAhPT0gdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHNoYWRlci5cbiAqXG4gKiBAcGFyYW0gc2hhZGVyIHtQSVhJLlNoYWRlcn0gdGhlIHNoYWRlciB0byB1cGxvYWRcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0U2hhZGVyID0gZnVuY3Rpb24gKHNoYWRlcilcbntcbiAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRJZCA9PT0gc2hhZGVyLnVpZClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50SWQgPSBzaGFkZXIudWlkO1xuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5nbC51c2VQcm9ncmFtKHNoYWRlci5wcm9ncmFtKTtcbiAgICB0aGlzLnNldEF0dHJpYnMoc2hhZGVyLmF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0LlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBXZWJHTE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBudWxsO1xufVxuXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFza01hbmFnZXI7XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgbWFzayBzdGFjayB0aGF0IGlzIHVzZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICpcbiAqIEBwYXJhbSBzdGVuY2lsTWFza1N0YWNrIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9IFRoZSBtYXNrIHN0YWNrXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnNldE1hc2tTdGFjayA9IGZ1bmN0aW9uICggc3RlbmNpbE1hc2tTdGFjayApXG57XG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBpZiAoc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLiBAYWx2aW5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWwgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQuYXR0YWNoU3RlbmNpbEJ1ZmZlcigpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICBpZiAoc21zLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgZ2wuY2xlYXIoZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTtcbiAgICAgICAgc21zLnJldmVyc2UgPSB0cnVlO1xuICAgICAgICBzbXMuY291bnQgPSAwO1xuICAgIH1cblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucHVzaCh3ZWJHTERhdGEpO1xuXG4gICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5WRVJUKTtcblxuICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgIGlmIChzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgIH1cblxuICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSBsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLktFRVApO1xuXG4gICAgc21zLmNvdW50Kys7XG59O1xuXG4vKipcbiAqIFRPRE8gdGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSFcbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuYmluZEdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgLy9pZiAodGhpcy5fY3VycmVudEdyYXBoaWNzID09PSBncmFwaGljcylyZXR1cm47XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBiaW5kIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0zZnYoc2hhZGVyLnVuaWZvcm1zLmNvbG9yLl9sb2NhdGlvbiwgd2ViR0xEYXRhLmNvbG9yKTtcblxuICAgICAgICBnbC51bmlmb3JtMWYoc2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSk7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDQgKiAyLCAwKTtcblxuICAgICAgICAvLyBub3cgZG8gdGhlIHJlc3QuLlxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAqL1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvL3RoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5hY3RpdmF0ZVByaW1pdGl2ZVNoYWRlcigpO1xuLy8gICAgICAgIHNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wcmltaXRpdmVTaGFkZXI7XG4gICAgICAgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG5cbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuLy8gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuXG4gICAgICAvKiAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7Ki9cbiAgICB9XG59O1xuXG4vKipcbiAqIFRPRE8gQGFsdmluXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIHNtcyA9IHRoaXMuc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucG9wKCk7XG5cbiAgICBzbXMuY291bnQtLTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIC8vIHRoZSBzdGFjayBpcyBlbXB0eSFcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgICAgIHRoaXMuYmluZEdyYXBoaWNzKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcblxuICAgICAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRyYXcgYSBxdWFkIHRvIGluY3JlbWVudC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgICAgICAgICAvLyBkcmF3IHRoZSB0cmlhbmdsZSBzdHJpcCFcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCArPSAyO1xuXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKSwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgLy8gIGNvbnNvbGUubG9nKFwiPDw+PlwiKVxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIChsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cblxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIG1hc2sgc3RhY2suXG4gKlxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2sgPSBudWxsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfSBUaGUgbWFzayBkYXRhIHN0cnVjdHVyZSB0byB1c2VcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIFxuICAgIC8vVE9ETyBGSVhcbiAgICBpZiAobWFza0RhdGEuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MudXBkYXRlR3JhcGhpY3MobWFza0RhdGEsIHRoaXMucmVuZGVyZXIuZ2wpO1xuICAgIH1cblxuICAgIGlmICghbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFN0ZW5jaWwobWFza0RhdGEsIG1hc2tEYXRhLl93ZWJHTFt0aGlzLnJlbmRlcmVyLmdsLmlkXS5kYXRhWzBdKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIodGhpcy5yZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcblxuICAgIHRoaXMucG9wU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuIiwiLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLm9uKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xufVxuXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTE1hbmFnZXI7XG5cbi8qKlxuICogR2VuZXJpYyBtZXRob2QgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbldlYkdMTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblx0Ly8gZG8gc29tZSBjb2RlcyBpbml0IVxufTtcblxuLyoqXG4gKiBHZW5lcmljIGRlc3Ryb3kgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlbmRlcmVyLm9mZignY29udGV4dCcsIHRoaXMub25Db250ZXh0Q2hhbmdlLCB0aGlzKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCcuL1NoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBjb21wbGV4IHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQ29tcGxleFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyBjb2xvcjsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoY29sb3IgKiBhbHBoYSAqIHRpbnQsIGFscGhhKTsnLC8vXCIgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIGNvbG9yOiAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsMCwwXSB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB0aW50OiAgIHsgdHlwZTogJzNmJywgdmFsdWU6IFswLCAwLCAwXSB9LFxuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFDb2xvcjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQmFzZSBzaGFkZXIgY2xhc3MgZm9yIFBJWEkgbWFuYWdlZCBzaGFkZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbdW5pZm9ybXNdIHtvYmplY3R9IFVuaWZvcm1zIGZvciB0aGlzIHNoYWRlci5cbiAqIEBwYXJhbSBbYXR0cmlidXRlc10ge29iamVjdH0gQXR0cmlidXRlcyBmb3IgdGhpcyBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIFNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcylcbntcbiAgICBpZiAoIXZlcnRleFNyYyB8fCAhZnJhZ21lbnRTcmMpXG4gICAge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXhpLmpzIEVycm9yLiBTaGFkZXIgcmVxdWlyZXMgdmVydGV4U3JjIGFuZCBmcmFnbWVudFNyYycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5nbCA9IHNoYWRlck1hbmFnZXIucmVuZGVyZXIuZ2w7XG5cbiAgICAvL1RPRE8gbWF5YmUgd2Ugc2hvdWxkIHBhc3MgcmVuZGVyZXIgcmF0aGVyIHRoYW4gc2hhZGVyIG1hbmdlcj8/IGZvb2QgZm9yIHRob3VnaHQuLlxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IHNoYWRlck1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgcHJvZ3JhbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUHJvZ3JhbX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaWZvcm1zIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhdHRyaWJ1dGVzIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50ZXJcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlciBhcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmM7XG5cbiAgICB0aGlzLmluaXQoKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHNoYWRlciBhbmQgdXNlcyBpdFxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbXBpbGUoKTtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy51bmlmb3JtcykpO1xuICAgIHRoaXMuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKSk7XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSB1bmlmb3JtIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgdW5pZm9ybXMgdG8gY2FjaGVcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnVuaWZvcm1zW2tleXNbaV1dLl9sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWNoZXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgYXR0cmlidXRlIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgYXR0cmlidXRlcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlQXR0cmlidXRlTG9jYXRpb25zID0gZnVuY3Rpb24gKGtleXMpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleXNbaV1dID0gdGhpcy5nbC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGtleXNbaV0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgbmVlZGVkIGFueW1vcmUuLi5cblxuICAgIC8vIEJlZ2luIHdvcnN0IGhhY2sgZXZhIC8vXG5cbiAgICAvLyBXSFk/Pz8gT05MWSBvbiBteSBjaHJvbWUgcGl4ZWwgdGhlIGxpbmUgYWJvdmUgcmV0dXJucyAtMSB3aGVuIHVzaW5nIGZpbHRlcnM/XG4gICAgLy8gbWF5YmUgaXRzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnbCBjb250ZXh0LlxuICAgIC8vIEknbSBjb252aW5jZWQgdGhpcyBpcyBhIGJ1ZyBpbiB0aGUgY2hyb21lIGJyb3dzZXIgYXMgdGhlcmUgaXMgTk8gcmVhc29uIHdoeSB0aGlzIHNob3VsZCBiZSByZXR1cm5pbmcgLTEgZXNwZWNpYWxseSBhcyBpdCBvbmx5IG1hbmlmZXN0cyBvbiBteSBjaHJvbWUgcGl4ZWxcbiAgICAvLyBJZiB0aGVyZXMgYW55IHdlYkdMIHBlb3BsZSB0aGF0IGtub3cgd2h5IGNvdWxkIGhhcHBlbiBwbGVhc2UgaGVscCA6KVxuICAgIC8vIGlmICh0aGlzLmF0dHJpYnV0ZXMuYUNvbG9yID09PSAtMSl7XG4gICAgLy8gICAgIHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPSAyO1xuICAgIC8vIH1cblxuICAgIC8vIEVuZCB3b3JzdCBoYWNrIGV2YSAvL1xufTtcblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQgY3JlYXRlcyB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19XG4gKi9cblNoYWRlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHZhciBnbFZlcnRTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuVkVSVEVYX1NIQURFUiwgdGhpcy52ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuRlJBR01FTlRfU0hBREVSLCB0aGlzLmZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuICh0aGlzLnByb2dyYW0gPSBwcm9ncmFtKTtcbn07XG5cbi8qKlxuKiBBZGRzIGEgbmV3IHVuaWZvcm1cbipcbiogQHBhcmFtIHVuaWZvcm0ge29iamVjdH0gdGhlIG5ldyB1bmlmb3JtIHRvIGF0dGFjaFxuKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgbG9jYXRpb24gPSB1bmlmb3JtLl9sb2NhdGlvbixcbiAgICAgICAgdmFsdWUgPSB1bmlmb3JtLnZhbHVlLFxuICAgICAgICBnbCA9IHRoaXMuZ2wsXG4gICAgICAgIGksIGlsO1xuXG4gICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIHNpbmdsZSBpbnQgdmFsdWVcbiAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGZsb2F0IHZhbHVlXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBjYXNlICcxZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSgyKSBvciBKUyBBcnJyYXlcbiAgICAgICAgY2FzZSAnMmYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDMpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICczZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDQpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgMkQgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YyJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDNEIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2Myc6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSA0RCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjQnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMWl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMml2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnNGl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20yJzpcbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgIGNhc2UgJ01hdHJpeDJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB1bmlmb3JtLnRyYW5zcG9zZSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20zJzpcbiAgICAgICAgY2FzZSAnbWF0Myc6XG4gICAgICAgIGNhc2UgJ01hdHJpeDNmdic6XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICBjYXNlICdtYXQ0JzpcbiAgICAgICAgY2FzZSAnTWF0cml4NGZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIENvbG9yIFZhbHVlXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgaW50ZWdlcnMgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdjEnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAyRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yydic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgyICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAyXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDIgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYXJyYXkgb2YgM0QgUG9pbnQgb2JqZWN0c1xuICAgICAgICBjYXNlICd2M3YnOlxuICAgICAgICAgICAgaWYgKCF1bmlmb3JtLl9hcnJheSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMyAqIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlsID0gdmFsdWUubGVuZ3RoOyBpIDwgaWw7ICsraSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogM10gICAgICAgPSB2YWx1ZVtpXS54O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzICsgMV0gICA9IHZhbHVlW2ldLnk7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAyXSAgID0gdmFsdWVbaV0uejtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiA0RCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Y0dic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg0ICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0XSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDJdICAgPSB2YWx1ZVtpXS56O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgM10gICA9IHZhbHVlW2ldLnc7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gUElYSS5UZXh0dXJlXG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuXG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUgfHwgIXVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGlzIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xbJ1RFWFRVUkUnICsgdGhpcy50ZXh0dXJlQ291bnRdKTtcblxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXTtcblxuICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdGV4dHVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9uZS4uXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgICAgICAgICAgLy8gc2V0IHVuaWZvcm0gdG8gdGV4dHVyZSBpbmRleFxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0uX2xvY2F0aW9uLCB0aGlzLnRleHR1cmVDb3VudCk7XG5cbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBuZXh0IHRleHR1cmUgaWRcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgU2hhZGVyIFdhcm5pbmc6IFVua25vd24gdW5pZm9ybSB0eXBlOiAnICsgdW5pZm9ybS50eXBlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNoYWRlciB1bmlmb3JtIHZhbHVlcy5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm1zID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy51bmlmb3JtcylcbiAgICB7XG4gICAgICAgIHRoaXMuc3luY1VuaWZvcm0odGhpcy51bmlmb3Jtc1trZXldKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSW5pdGlhbGlzZXMgYSBTYW1wbGVyMkQgdW5pZm9ybSAod2hpY2ggbWF5IG9ubHkgYmUgYXZhaWxhYmxlIGxhdGVyIG9uIGFmdGVyIGluaXRVbmlmb3JtcyBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBsb2FkZWQpXG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXRTYW1wbGVyMkQgPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbiAgICBpZiAodW5pZm9ybS50ZXh0dXJlRGF0YSlcbiAgICB7XG5cbiAgICAgICAgLy9UT0RPIG1vdmUgdGhpcy4uLlxuICAgICAgICB2YXIgZGF0YSA9IHVuaWZvcm0udGV4dHVyZURhdGE7XG5cbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuXG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBsaWVkQWxwaGEpO1xuICAgICAgICAvLyBHTFRleHR1cmUgPSBtYWcgbGluZWFyLCBtaW4gbGluZWFyX21pcG1hcF9saW5lYXIsIHdyYXAgcmVwZWF0ICsgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIC8vIEdMVGV4dHVyZUxpbmVhciA9IG1hZy9taW4gbGluZWFyLCB3cmFwIGNsYW1wXG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3RSZXBlYXQgPSBtYWcvbWluIE5FQVJFU1QsIHdyYXAgcmVwZWF0XG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3QgPSBtYWcvbWluIG5lYXJlc3QsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gQXVkaW9UZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCA1MTIsIGhlaWdodCAyLCBib3JkZXIgMFxuICAgICAgICAvLyBLZXlUZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCAyNTYsIGhlaWdodCAyLCBib3JkZXIgMFxuXG4gICAgICAgIC8vICBtYWdGaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcbiAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxuXG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZGF0YS5sdW1pbmFuY2UgPyBnbC5MVU1JTkFOQ0UgOiBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLnNvdXJjZSk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGRhdGEubWFnRmlsdGVyID8gZGF0YS5tYWdGaWx0ZXIgOiBnbC5MSU5FQVIgKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSApO1xuXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGRhdGEud3JhcFQgPyBkYXRhLndyYXBUIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyTWFuYWdlci5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHNoYWRlci5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5nbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmdsID0gbnVsbDtcbiAgICB0aGlzLnVuaWZvcm1zID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSBudWxsO1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBudWxsO1xufTtcblxuU2hhZGVyLnByb3RvdHlwZS5fZ2xDb21waWxlID0gZnVuY3Rpb24gKHR5cGUsIHNyYylcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICB0aGlzLmdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgdGhpcy5nbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cbiAgICBpZiAoIXRoaXMuZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgdGhpcy5nbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCBjdXN0b21Vbmlmb3JtcywgY3VzdG9tQXR0cmlidXRlcylcbntcbiAgICB2YXIgdW5pZm9ybXMgPSB7XG5cbiAgICAgICAgdVNhbXBsZXI6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogMCB9LFxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxXSkgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVW5pZm9ybXMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciB1IGluIGN1c3RvbVVuaWZvcm1zKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bmlmb3Jtc1t1XSA9IGN1c3RvbVVuaWZvcm1zW3VdO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgYVZlcnRleFBvc2l0aW9uOiAgICAwLFxuICAgICAgICBhVGV4dHVyZUNvb3JkOiAgICAgIDAsXG4gICAgICAgIGFDb2xvcjogICAgICAgICAgICAgMFxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tQXR0cmlidXRlcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGEgaW4gY3VzdG9tQXR0cmlidXRlcylcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlc1thXSA9IGN1c3RvbUF0dHJpYnV0ZXNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYWdtZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IFRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgU2hhZGVyLmNhbGwodGhpcywgc2hhZGVyTWFuYWdlciwgdmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihnbClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7Ly8sIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKTtcblxufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi4vbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQmFzZSBmb3IgYSBjb21tb24gb2JqZWN0IHJlbmRlcmVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzeXN0ZW0gcmVuZGVyZXIgcGx1Z2luLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gT2JqZWN0UmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufVxuXG5cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYmplY3RSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0UmVuZGVyZXI7XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZW5kZXJlciBhbmQgc2V0cyB0aGUgc2hhZGVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIHNldCB0aGUgc2hhZGVyLi5cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHJlbmRlcmVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xufTtcblxuLyoqXG4gKiBmbHVzaGVzXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIGZsdXNoIVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gcmVuZGVyIHRoZSBvYmplY3Rcbn07XG4iLCIvKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSBxdWFkXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFRoZSBnbCBjb250ZXh0IGZvciB0aGlzIHF1YWQgdG8gdXNlLlxuICovXG5mdW5jdGlvbiBRdWFkKGdsKVxue1xuICAgIC8qXG4gICAgICogdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4vLyAgICB0aGlzLnRleHR1cmVzID0gbmV3IFRleHR1cmVVdnMoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAwLDAsXG4gICAgICAgIDIwMCwwLFxuICAgICAgICAyMDAsMjAwLFxuICAgICAgICAwLDIwMFxuICAgIF0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgcXVhZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMSwwLFxuICAgICAgICAxLDEsXG4gICAgICAgIDAsMVxuICAgIF0pO1xuXG4vLyAgICB2YXIgd2hpdGUgPSAoMHhGRkZGRkYgPj4gMTYpICsgKDB4RkZGRkZGICYgMHhmZjAwKSArICgoMHhGRkZGRkYgJiAweGZmKSA8PCAxNikgKyAoMSAqIDI1NSA8PCAyNCk7XG4gICAgLy9UT0RPIGNvbnZlcnQgdGhpcyB0byBhIDMyIHVuc2lnbmVkIGludCBhcnJheVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBjb21wb25lbnRzIG9mIHRoZSB0cmlhbmdsZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxXG4gICAgXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbXG4gICAgICAgIDAsIDEsIDIsIDAsIDMsIDJcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSB2ZXJ0ZXggYnVmZmVyXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSBpbmRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDggKyAxNikgKiA0LCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnVwbG9hZCgpO1xufVxuXG5RdWFkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFF1YWQ7XG5cbi8qKlxuICogTWFwcyB0d28gUmVjdGFuZ2xlIHRvIHRoZSBxdWFkXG4gKiBAcGFyYW0gcmVjdCB7UElYSS5SZWN0YW5nbGV9IHRoZSBmaXJzdCByZWN0YW5nbGVcbiAqIEBwYXJhbSByZWN0MiB7UElYSS5SZWN0YW5nbGV9IHRoZSBzZWNvbmQgcmVjdGFuZ2xlXG4gKi9cblF1YWQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKHJlY3QsIHJlY3QyKVxue1xuICAgIHZhciB4ID0gMDsgLy9yZWN0Mi54IC8gcmVjdC53aWR0aDtcbiAgICB2YXIgeSA9IDA7IC8vcmVjdDIueSAvIHJlY3QuaGVpZ2h0O1xuXG4gICAgdGhpcy51dnNbMF0gPSB4O1xuICAgIHRoaXMudXZzWzFdID0geTtcblxuICAgIHRoaXMudXZzWzJdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1szXSA9IHk7XG5cbiAgICB0aGlzLnV2c1s0XSA9IHggKyByZWN0Mi53aWR0aCAvIHJlY3Qud2lkdGg7XG4gICAgdGhpcy51dnNbNV0gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1s2XSA9IHg7XG4gICAgdGhpcy51dnNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICAvLy8gLS0tLS1cbiAgICB4ID0gcmVjdDIueDtcbiAgICB5ID0gcmVjdDIueTtcblxuICAgIHRoaXMudmVydGljZXNbMF0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbMV0gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1syXSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzNdID0geTtcblxuICAgIHRoaXMudmVydGljZXNbNF0gPSB4ICsgcmVjdDIud2lkdGg7XG4gICAgdGhpcy52ZXJ0aWNlc1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQ7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzZdID0geDtcbiAgICB0aGlzLnZlcnRpY2VzWzddID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXIgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuUXVhZC5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvLyBUT0RPIGNvdWxkIHByb2JhYmx5IGJlIHB1c2hlZCBpbnRvIG9uZSB1cGxvYWQhXG4gICAgZ2wuYmluZEJ1ZmZlciggZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlciApO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMudmVydGljZXMpO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDggKiA0LCB0aGlzLnV2cyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgKDggKyA4KSAqIDQsIHRoaXMuY29sb3JzKTtcbn07XG5cblF1YWQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xuXG5cbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgICAgIFxuICAgIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcbiAgICBHTEZyYW1lYnVmZmVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xGcmFtZWJ1ZmZlcixcbiAgICBcbiAgICBTdGVuY2lsTWFza1N0YWNrID0gcmVxdWlyZSgnLi9TdGVuY2lsTWFza1N0YWNrJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIGhvcml6b250YWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgdmVydGljYWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAqIEBwYXJhbSByb290IHtib29sZWFufSBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gKi9cbnZhciBSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uLCByb290KVxue1xuICAgIC8vVE9ETyBSZXNvbHV0aW9uIGNvdWxkIGdvIGhlcmUgKCBlZyBsb3cgcmVzIGJsdXJzIClcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvLyBuZXh0IHRpbWUgdG8gY3JlYXRlIGEgZnJhbWUgYnVmZmVyIGFuZCB0ZXh0dXJlXG5cbiAgICAvKipcbiAgICAgKiBBIGZyYW1lIGJ1ZmZlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xGcmFtZUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJDb2xvciA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBvYmplY3QgYXMgYSByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9iamVjdCdzIHRyYW5zZm9ybVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5mcmFtZSA9IG51bGw7XG4gICAgXG4gICAgdGhpcy5kZWZhdWx0RnJhbWUgPSBuZXcgUElYSS5SZWN0YW5nbGUoKTtcbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBudWxsO1xuICAgIHRoaXMuc291cmNlRnJhbWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHN0ZW5jaWwgYnVmZmVyIHN0b3JlcyBtYXNraW5nIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlckJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgc3RlbmNpbCBtYXNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFza1N0YWNrfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG5ldyBTdGVuY2lsTWFza1N0YWNrKCk7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZXMgZmlsdGVyIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6dGhpcyxcbiAgICAgICAgICAgIGZpbHRlcjpbXSxcbiAgICAgICAgICAgIGJvdW5kczp0aGlzLnNpemVcbiAgICAgICAgfVxuICAgIF07XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVFxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gR0xGcmFtZWJ1ZmZlci5jcmVhdGVSR0JBKGdsLCAxMDAsIDEwMCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBBIGZyYW1lIGJ1ZmZlciBuZWVkcyBhIHRhcmdldCB0byByZW5kZXIgdG8uLlxuICAgICAgICAgICAgY3JlYXRlIGEgdGV4dHVyZSBhbmQgYmluZCBpdCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgICovXG4gICAgICAgIFxuXG4gICAgICAgLy8gVE9ETyBjaGFuZ2UhXG4gICAgICAgIC8vIHRoaXMgaXMgdXNlZCBieSB0aGUgYmFzZSB0ZXh0dXJlXG4gICAgICAgIHRoaXMudGV4dHVyZSA9IHRoaXMuZnJhbWVCdWZmZXIudGV4dHVyZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbWFrZSBpdCBhIG51bGwgZnJhbWVidWZmZXIuLlxuICAgICAgICB0aGlzLmZyYW1lQnVmZmVyLmZyYW1lYnVmZmVyID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn07XG5cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZW5kZXJUYXJnZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRhcmdldDtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpbHRlciB0ZXh0dXJlLlxuICpcbiAqIEBwYXJhbSBbYmluZD1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCB3ZSBiaW5kIG91ciBmcmFtZWJ1ZmZlciBiZWZvcmUgY2xlYXJpbmc/XG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbihjbGVhckNvbG9yKVxue1xuICAgIHZhciBjYyA9IGNsZWFyQ29sb3IgfHwgdGhpcy5jbGVhckNvbG9yXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5jbGVhcihjY1swXSxjY1sxXSxjY1syXSxjY1szXSkvL3IsZyxiLGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmF0dGFjaFN0ZW5jaWxCdWZmZXIgPSBmdW5jdGlvbigpXG57XG4gICAgLy9UT0RPIGNoZWNrIGlmIHN0ZW5jaWwgaXMgZG9uZT9cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgaXMgdXNlZCBmb3IgbWFza2luZyBpbiBwaXhpXG4gICAgICogbGV0cyBjcmVhdGUgb25lIGFuZCB0aGVuIGFkZCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgKi9cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZW5hYmxlU3RlbmNpbCgpO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXdwb3J0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIC8vVE9PRCByZWZhY3RvciB1c2FnZSBvZiBmcmFtZS4uXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIuYmluZCgpO1xuXG4gICAgdGhpcy5kZXN0aW5hdGlvbkZyYW1lID0gZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgfHwgdGhpcy5kZWZhdWx0RnJhbWU7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IHRoaXMuc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggdGhpcy5kZXN0aW5hdGlvbkZyYW1lLCB0aGlzLnNvdXJjZUZyYW1lICk7XG5cbiAgICBpZih0aGlzLnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5hcHBlbmQodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIGlmKHRoaXMuZGVzdGluYXRpb25GcmFtZSAhPT0gdGhpcy5zb3VyY2VGcmFtZSlcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgICAgICBnbC5zY2lzc29yKHRoaXMuZGVzdGluYXRpb25GcmFtZS54LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmRpc2FibGUoZ2wuU0NJU1NPUl9URVNUKTtcbiAgICB9XG5cblxuICAgIC8vIFRPRE8gLSBkb2VzIG5vdCBuZWVkIHRvIGJlIHVwZGF0ZWQgYWxsIHRoZSB0aW1lPz9cbiAgICBnbC52aWV3cG9ydCh0aGlzLmRlc3RpbmF0aW9uRnJhbWUueCx0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uKTtcblxuXG59O1xuXG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmFzZWQgb24gYSBwcm9qZWN0aW9uIGZyYW1lICh3aGljaCBpcyBhIHJlY3RhbmdsZSlcbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2FsY3VsYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbkZyYW1lLCBzb3VyY2VGcmFtZSlcbntcbiAgICB2YXIgcG0gPSB0aGlzLnByb2plY3Rpb25NYXRyaXg7XG5cbiAgICBzb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IGRlc3RpbmF0aW9uRnJhbWU7XG5cbiAgICBwbS5pZGVudGl0eSgpO1xuXG4gICAgLy8gVE9ETzogbWFrZSBkZXN0IHNjYWxlIHNvdXJjZVxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAxIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gLTEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAtMSAvIGRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0KjI7XG5cbiAgICAgICAgcG0udHggPSAtMSAtIHNvdXJjZUZyYW1lLnggKiBwbS5hO1xuICAgICAgICBwbS50eSA9IDEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVzaXplcyB0aGUgdGV4dHVyZSB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge051bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGhlaWdodCB7TnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgdGV4dHVyZVxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHdpZHRoID0gd2lkdGggfCAwO1xuICAgIGhlaWdodCA9IGhlaWdodCB8IDA7XG5cbiAgICBpZiAodGhpcy5zaXplLndpZHRoID09PSB3aWR0aCAmJiB0aGlzLnNpemUuaGVpZ2h0ID09PSBoZWlnaHQpIFxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2l6ZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuc2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICB0aGlzLmRlZmF1bHRGcmFtZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuZGVmYXVsdEZyYW1lLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIucmVzaXplKHdpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBoZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuICAgIFxuICAgIHZhciBwcm9qZWN0aW9uRnJhbWUgPSB0aGlzLmZyYW1lIHx8IHRoaXMuc2l6ZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSByZW5kZXIgdGFyZ2V0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIHRoaXMuZnJhbWVCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBTdGVuY2lsTWFza1N0YWNrKClcbntcblx0LyoqXG4gICAgICogVGhlIGFjdHVhbCBzdGFja1xuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsU3RhY2sgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQGFsdmluXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb3VudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY291bnQgPSAwO1xufVxuXG5TdGVuY2lsTWFza1N0YWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0ZW5jaWxNYXNrU3RhY2s7XG5tb2R1bGUuZXhwb3J0cyA9IFN0ZW5jaWxNYXNrU3RhY2s7XG4iLCJDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogTWFwcyBnbCBibGVuZCBjb21iaW5hdGlvbnMgdG8gV2ViR0xcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpKGdsLCBvYmplY3QpXG57XG4gICAgb2JqZWN0ID0gb2JqZWN0IHx8IHt9O1xuXG4gICAgLy9UT0RPIC0gcHJlbXVsdGlwbHkgYWxwaGEgd291bGQgYmUgZGlmZmVyZW50LlxuICAgIC8vYWRkIGEgYm9vbGVhbiBmb3IgdGhhdCFcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQUREXSAgICAgICAgICAgPSBbZ2wuU1JDX0FMUEhBLCBnbC5EU1RfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9IFtnbC5EU1RfQ09MT1IsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5TQ1JFRU5dICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLk9ORV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRBUktFTl0gICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0JVUk5dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRJRkZFUkVOQ0VdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aTtcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcblx0b2JqZWN0PSBvYmplY3QgfHwge307XG5cbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5QT0lOVFNdICAgICAgICAgPSBnbC5QT0lOVFM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORVNdICAgICAgICAgID0gZ2wuTElORVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9MT09QXSAgICAgID0gZ2wuTElORV9MT09QO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLkxJTkVfU1RSSVBdICAgICA9IGdsLkxJTkVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVTXSAgICAgID0gZ2wuVFJJQU5HTEVTO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXSA9IGdsLlRSSUFOR0xFX1NUUklQO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX0ZBTl0gICA9IGdsLlRSSUFOR0xFX0ZBTjtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBTcHJpdGUgb2JqZWN0IGlzIHRoZSBiYXNlIGZvciBhbGwgdGV4dHVyZWQgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCB0byB0aGUgc2NyZWVuXG4gKlxuICogQSBzcHJpdGUgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhbiBpbWFnZSBsaWtlIHRoaXM6XG4gKlxuICogYGBganNcbiAqIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgZm9yIHRoaXMgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZSh0ZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFuY2hvciBzZXRzIHRoZSBvcmlnaW4gcG9pbnQgb2YgdGhlIHRleHR1cmUuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgMCwwIHRoaXMgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0XG4gICAgICogU2V0dGluZyB0aGUgYW5jaG9yIHRvIDAuNSwwLjUgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgY2VudGVyZWRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMSwxIHdvdWxkIG1lYW4gdGhlIHRleHR1cmUncyBvcmlnaW4gcG9pbnQgd2lsbCBiZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmFuY2hvciA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUgKHRoaXMgaXMgaW5pdGlhbGx5IHNldCBieSB0aGUgdGV4dHVyZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQSB2YWx1ZSBvZiAweEZGRkZGRiB3aWxsIHJlbW92ZSBhbnkgdGludCBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2hhZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgc3ByaXRlLiBTZXQgdG8gbnVsbCB0byByZW1vdmUgYSBjdXJyZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJ8UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgY2FjaGVkIHZhbHVlIG9mIHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvLyBjYWxsIHRleHR1cmUgc2V0dGVyXG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBUZXh0dXJlLkVNUFRZO1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZVxuICAgIHRoaXMudmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblNwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLngpICogdGhpcy50ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzaWduID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLngpIHx8IDE7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBzaWduICogdmFsdWUgLyB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgTWF0aC5hYnModGhpcy5zY2FsZS55KSAqIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHByaXZhdGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBzbyBpZiBfd2lkdGggaXMgMCB0aGVuIHdpZHRoIHdhcyBub3Qgc2V0Li5cbiAgICBpZiAodGhpcy5fd2lkdGgpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnggPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgKiB0aGlzLl93aWR0aCAvIHRoaXMudGV4dHVyZS5mcmFtZS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zY2FsZS55ID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLnkpICogdGhpcy5faGVpZ2h0IC8gdGhpcy50ZXh0dXJlLmZyYW1lLmhlaWdodDtcbiAgICB9XG59O1xuXG5TcHJpdGUucHJvdG90eXBlLmNhY2x1bGF0ZVZlcnRpY2VzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgIHd0ID0gdGhpcy50cmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIGEgPSB3dC5hLCBiID0gd3QuYiwgYyA9IHd0LmMsIGQgPSB3dC5kLCB0eCA9IHd0LnR4LCB0eSA9IHd0LnR5LFxuICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhLFxuICAgICAgICB3MCwgdzEsIGgwLCBoMSxcbiAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcbiAgICAgICAgXG4gICAgaWYgKHRyaW0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgYW5kIGlzIG5vdCBhIHRpbGluZ3Nwcml0ZSB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgdzEgPSB0cmltLnggLSB0aGlzLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICBoMSA9IHRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcbiAgICB9XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMF0gPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzFdID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMl0gPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzNdID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzRdID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs1XSA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzZdID0gYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs3XSA9IGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG5cbn1cblxuLyoqXG4qXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy50cmFuc2Zvcm0udXBkYXRlZCB8fCB0aGlzLnRleHR1cmVEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZURpcnR5ID0gZmFsc2U7XG4gICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuICAgIH1cbiAgICBcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFNwcml0ZSBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcbiAgICAgICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5YLFxuICAgICAgICAgICAgbWF4WCxcbiAgICAgICAgICAgIG1pblksXG4gICAgICAgICAgICBtYXhZLFxuICAgICAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YTtcblxuICAgICAgICB2YXIgeDEgPSB2ZXJ0ZXhEYXRhWzBdXG4gICAgICAgIHZhciB5MSA9IHZlcnRleERhdGFbMV1cblxuICAgICAgICB2YXIgeDIgPSB2ZXJ0ZXhEYXRhWzJdXG4gICAgICAgIHZhciB5MiA9IHZlcnRleERhdGFbM11cblxuICAgICAgICB2YXIgeDMgPSB2ZXJ0ZXhEYXRhWzRdXG4gICAgICAgIHZhciB5MyA9IHZlcnRleERhdGFbNV1cblxuICAgICAgICB2YXIgeDQgPSB2ZXJ0ZXhEYXRhWzZdXG4gICAgICAgIHZhciB5NCA9IHZlcnRleERhdGFbN11cblxuICAgICAgICBtaW5YID0geDE7XG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkxO1xuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MTtcbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTE7XG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoaWxkcmVuXG4gICAgICAgIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGRCb3VuZHMgPSB0aGlzLmNvbnRhaW5lckdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICB3MCA9IGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICB3MSA9IGNoaWxkQm91bmRzLnggKyBjaGlsZEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGgwID0gY2hpbGRCb3VuZHMueTtcbiAgICAgICAgICAgIGgxID0gY2hpbGRCb3VuZHMueSArIGNoaWxkQm91bmRzLmhlaWdodDtcblxuICAgICAgICAgICAgbWluWCA9IChtaW5YIDwgdzApID8gbWluWCA6IHcwO1xuICAgICAgICAgICAgbWluWSA9IChtaW5ZIDwgaDApID8gbWluWSA6IGgwO1xuXG4gICAgICAgICAgICBtYXhYID0gKG1heFggPiB3MSkgPyBtYXhYIDogdzE7XG4gICAgICAgICAgICBtYXhZID0gKG1heFkgPiBoMSkgPyBtYXhZIDogaDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fYm91bmRzLnggPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHRoaXMuX2JvdW5kcy55ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG4gICAgdGhpcy5fYm91bmRzLndpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICByZXR1cm4gdGhpcy5fYm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgc3ByaXRlXG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cblNwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLnRleHR1cmUuY3JvcC53aWR0aCA8PSAwIHx8IHRoaXMudGV4dHVyZS5jcm9wLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vICBJZ25vcmUgbnVsbCBzb3VyY2VzXG4gICAgaWYgKHRoaXMudGV4dHVyZS52YWxpZClcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgICAgIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgIGR4LFxuICAgICAgICAgICAgZHksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDtcblxuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgICAgIC8vIElmIHNtb290aGluZ0VuYWJsZWQgaXMgc3VwcG9ydGVkIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgc21vb3RoaW5nIHByb3BlcnR5IGZvciB0aGlzIHRleHR1cmVcbiAgICAgICAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSO1xuICAgICAgICBpZiAocmVuZGVyZXIuc21vb3RoUHJvcGVydHkgJiYgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gIT09IHNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldID0gc21vb3RoaW5nRW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHRyaW1tZWQgd2Ugb2Zmc2V0IGJ5IHRoZSB0cmltIHgveSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgZnJhbWUgZGltZW5zaW9uc1xuXG4gICAgICAgIGlmKHRleHR1cmUucm90YXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICBcbiAgICAgICAgICAgIGR4ICs9IHdpZHRoO1xuXG4gICAgICAgICAgICB3dC50eCA9IGR5ICogd3QuYSArIGR4ICogd3QuYyArIHd0LnR4O1xuICAgICAgICAgICAgd3QudHkgPSBkeSAqIHd0LmIgKyBkeCAqIHd0LmQgKyB3dC50eTtcblxuICAgICAgICAgICAgdmFyIHRlbXAgPSB3dC5hO1xuICAgICAgICAgICAgd3QuYSAgPSAtd3QuYztcbiAgICAgICAgICAgIHd0LmMgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIHRlbXAgPSB3dC5iO1xuICAgICAgICAgICAgd3QuYiAgPSAtd3QuZDtcbiAgICAgICAgICAgIHd0LmQgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIC8vIHRoZSBhbmNob3IgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFib3ZlLCBzbyBsZXRzIHNldCBpdCB0byB6ZXJvXG4gICAgICAgICAgICBkeCA9IDA7XG4gICAgICAgICAgICBkeSA9IDA7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIC8vIEFsbG93IGZvciBwaXhlbCByb3VuZGluZ1xuICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgKHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwLFxuICAgICAgICAgICAgICAgICh3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHggPSBkeCB8IDA7XG4gICAgICAgICAgICBkeSA9IGR5IHwgMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICB3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjbGVhbiB1cCBjYWNoaW5nIC0gaG93IHRvIGNsZWFuIHVwIHRoZSBjYWNoZXM/XG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC55ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgc3ByaXRlIGFuZCBvcHRpb25hbGx5IGl0cyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95VGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95VGV4dHVyZSwgZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5hbmNob3IgPSBudWxsO1xuXG4gICAgaWYgKGRlc3Ryb3lUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcblxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zLi5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICovXG5TcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgU3ByaXRlKFRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXInKSxcbiAgICBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9jcmVhdGVJbmRpY2VzRm9yUXVhZHMnKSxcbiAgICBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4vZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgZ2xDb3JlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgU3ByaXRlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1Nwcml0ZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFJlbmRlcmVyIGRlZGljYXRlZCB0byBkcmF3aW5nIGFuZCBiYXRjaGluZyBzcHJpdGVzLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU3ByaXRlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgdmFsdWVzIHNlbnQgaW4gdGhlIHZlcnRleCBidWZmZXIuXG4gICAgICogcG9zaXRpb25YLCBwb3NpdGlvblksIGNvbG9yUiwgY29sb3JHLCBjb2xvckIgPSA1XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdmVydGV4IGluZm9ybWF0aW9uIGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgU3ByaXRlQmF0Y2ggYmVmb3JlIGl0IGZsdXNoZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIG91ciBiYXRjaFxuICAgIHZhciBudW1WZXJ0cyA9ICh0aGlzLnNpemUgKiA0KSAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBiYXRjaCwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgIHZhciBudW1JbmRpY2VzID0gdGhpcy5zaXplICogNjtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSB2ZXJ0ZXggZGF0YSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5QnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgQXJyYXlCdWZmZXIobnVtVmVydHMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBGbG9hdDMyQXJyYXkgZm9yIHBvc2l0aW9uc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciB1dnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIGNvbG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlcyBvZiB0aGUgZ2VvbWV0cnkgKHF1YWRzKSB0byBkcmF3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHModGhpcy5zaXplKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIFxuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICBcbiAgICAvL1RPRE8gLSAzMDAgaXMgYSBiaXQgbWFnaWMsIGZpZ3VyZSBvdXQgYSBuaWNlciBhbW91bnQhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykgXG4gICAge1xuICAgICAgICB0aGlzLmdyb3Vwc1tpXSA9IHt0ZXh0dXJlczpbXSwgdGV4dHVyZUNvdW50OjAsIGlkczpbXSwgc2l6ZTowLCBzdGFydDowLCBibGVuZDowfTsgXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcblxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsOyAgICBcbn1cblxuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3Nwcml0ZScsIFNwcml0ZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5NQVhfVEVYVFVFUyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cbiAgICB0aGlzLl9zaGFkZXIgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgdGhpcy5NQVhfVEVYVFVFUykvL25ldyBUZXh0dXJlU2hhZGVyKGdsKTtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlcjtcblxuICAgIC8vIGNyZWF0ZSBhIGNvdXBsZSBvZiBidWZmZXJzXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKGdsLCBudWxsLCBnbC5EWU5BTUlDX0RSQVcpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoZ2wsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgLy8gYnVpbGQgdGhlIHZhbyBvYmplY3QgdGhhdCB3aWxsIHJlbmRlci4uXG4gICAgdGhpcy52YW8gPSBuZXcgZ2xDb3JlLlZlcnRleEFycmF5T2JqZWN0KGdsKTtcblxuICAgIHRoaXMudmFvLmFkZEluZGV4KHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCAwKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIGdsLlVOU0lHTkVEX1NIT1JULCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMiAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMyAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVJZCwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgNCAqIDQpO1xuXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdG8gcmVuZGVyIHdoZW4gdXNpbmcgdGhpcyBzcHJpdGViYXRjaFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHNwcml0ZSlcbntcbiAgICAvL1RPRE8gc2V0IGJsZW5kIG1vZGVzLi5cbiAgICAvLyBjaGVjayB0ZXh0dXJlLi5cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPj0gdGhpcy5zaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICBcbiAgICAvLyBnZXQgdGhlIHV2cyBmb3IgdGhlIHRleHR1cmVcbiAgIFxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIGlmICghc3ByaXRlLnRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgLy8gcHVzaCBhIHRleHR1cmUuXG4gICAgLy8gaW5jcmVtZW50IHRoZSBiYXRjaHNpemVcbiAgICB2YXIgbmV4dFRleHR1cmUgPSAgc3ByaXRlLnRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgdmFyIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwO1xuICAgIHZhciBpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50VGV4dHVyZSAhPT0gbmV4dFRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbmV4dFRleHR1cmU7XG4gICAgICAgIFxuICAgICAgICBpZighbmV4dFRleHR1cmUuX2VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9pZCA9IHRoaXMudGV4dHVyZUNvdW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLnRleHR1cmVDb3VudCA9PT0gdGhpcy5NQVhfVEVYVFVFUylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgICAgICAgICAgICAgeyAgICAgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnN0YXJ0ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50KytdID0gbmV4dFRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHR1cmVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdHJpbT8/XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG5cbiAgICAvLyB1cGxvYWQgdGhlIHNwcml0ZSBlbGVtZXRucy4uLlxuICAgIC8vIHRoZXkgaGF2ZSBhbGwgcmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIHdlIGp1c3QgbmVlZCB0byBwdXNoIHRoZW0gaW50byB0aGUgYnVmZmVyLlxuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7XG4gICAgdmFyIHZlcnRleERhdGEgPSBzcHJpdGUudmVydGV4RGF0YVxuICAgIHZhciB0aW50ID0gKHNwcml0ZS50aW50ID4+IDE2KSArIChzcHJpdGUudGludCAmIDB4ZmYwMCkgKyAoKHNwcml0ZS50aW50ICYgMHhmZikgPDwgMTYpICsgKHNwcml0ZS53b3JsZEFscGhhICogMjU1IDw8IDI0KTtcbiAgICB2YXIgdXZzID0gc3ByaXRlLnRleHR1cmUuX3V2cy51dnNfdWludDMyO1xuICAgIC8veHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzBdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMF07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7IFxuICAgIFxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsyXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzNdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzFdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs0XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzVdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzJdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzZdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbN107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbM107XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgYW5kIGVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA9PT0gMClyZXR1cm47XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG5cbiAgICB0aGlzLmN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSB0aGlzLmN1cnJlbnRHcm91cC5zdGFydDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICB7ICAgICBcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgXG4gICAgLy8gZG8gc29tZSBzbWFydCBhcnJheSBzdHVmZi4uXG4gICAgLy8gZG91YmxlIHNpemUgc28gd2UgZG9udCBhbHdheSBzdWJhcnJheSB0aGUgZWxlbWVudHMuLlxuICAgIC8vIHVwbG9hZCB0aGUgdmVydHMgdG8gdGhlIGJ1ZmZlclxuICAgIGlmICh0aGlzLmN1cnJlbnRCYXRjaFNpemUgPiAoIHRoaXMuc2l6ZSAqIDAuNSApIClcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh0aGlzLnZlcnRpY2VzLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbyBrIC4uIHN1YiBhcnJheSBpcyBTTE9XPj9cbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnBvc2l0aW9ucy5zdWJhcnJheSgwLCB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplKTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHZpZXcsIDAsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgc2hhZGVyLi5cbiAgICB0aGlzLnJlbmRlcmVyLmJpbmRTaGFkZXIodGhpcy5fc2hhZGVyKTtcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCAwICk7XG5cbiAgICAvLy8gcmVuZGVyIHRoZSBncm91cHMuLlxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdyb3VwQ291bnQ7IGkrKykge1xuICAgICAgICBcbiAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5ncm91cHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC50ZXh0dXJlQ291bnQ7IGorKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kVGV4dHVyZShncm91cC50ZXh0dXJlc1tqXSwgaik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgZ3JvdXAuc2l6ZSAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCBncm91cC5zdGFydCAqIDYgKiAyKTtcbiAgICB9O1xuXG4gICAgLy8gcmVzZXQgZWxlbWVudHMgZm9yIHRoZSBuZXh0IGZsdXNoXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBzcHJpdGUgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFvLmJpbmQoKTtcbn07XG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgdGhpcy52YW8udW5iaW5kKCk7XG59O1xuLyoqXG4gKiBEZXN0cm95cyB0aGUgU3ByaXRlQmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuY29sb3JzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zcHJpdGVzID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCBtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgdmVydGV4U3JjID0gXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGFUZXh0dXJlSWQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZUZXh0dXJlSWQgPSBhVGV4dHVyZUlkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVwiO1xuICAgIHZhciBmcmFnbWVudFNyYyA9ICdwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG4nICsgZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpICsgXCJcXG5cXG5cIiArIGZyYWdUZW1wbGF0ZVxuXG4gICAgZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYy5yZXBsYWNlKC9cXCVcXCUvZ2ksICcxNicpO1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cbiAgICB2YXIgc2FtcGxlVmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSB7XG4gICAgICAgIHNhbXBsZVZhbHVlc1tpXSA9IGk7XG4gICAgfTtcblxuICAgIHNoYWRlci5iaW5kKCk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnVTYW1wbGVycyA9IHNhbXBsZVZhbHVlcztcblxuICAgIHJldHVybiBzaGFkZXI7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKVxue1xuICAgIHZhciBzcmMgPSAndmVjNCBnZXRTYW1wbGVGcm9tQXJyYXkoc2FtcGxlcjJEIHRleHR1cmVzWyUlXSwgaW50IG5keCwgdmVjMiB1dikge1xcblxcbnZlYzQgY29sb3I7J1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgaWYoaSA+IDApc3JjICs9ICdcXG5lbHNlICc7XG4gICAgICAgIGlmKGkgPCBtYXhUZXh0dXJlcy0xKXNyYyArPSAnaWYobmR4ID09ICcgKyBpICsgJyknO1xuICAgICAgICBzcmMgKz0gJ1xcbnsnO1xuICAgICAgICBzcmMgKz0gJ1xcblxcdGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmVzWycraSsnXSwgdXYpOyc7XG4gICAgICAgIHNyYyArPSAnXFxufSc7XG4gICAgfTtcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdyZXR1cm4gY29sb3I7JztcbiAgICBzcmMgKz0gJ1xcbn0nO1xuXG4gICAgcmV0dXJuIHNyYztcbn1cblxudmFyIGZyYWdUZW1wbGF0ZSA9IFtcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG4gICAgJ3ZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsnLFxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcnNbJSVdOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICdnbF9GcmFnQ29sb3IgPSBnZXRTYW1wbGVGcm9tQXJyYXkodVNhbXBsZXJzLCBpbnQodlRleHR1cmVJZCksIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yOycsXG4gICAgJ30nXG5dLmpvaW4oJ1xcbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyO1xuIiwidmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBUZXh0IE9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nIGluIHlvdXIgdGV4dCBzdHJpbmcsXG4gKiBvciBhZGQgYSB3b3JkV3JhcCBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSBhbmQgYW5kIHdvcmRXcmFwV2lkdGggcHJvcGVydHkgd2l0aCBhIHZhbHVlIGluIHRoZSBzdHlsZSBvYmplY3QuXG4gKlxuICogQSBUZXh0IGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBzdHJpbmcgYW5kIGEgc3R5bGUgb2JqZWN0XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0ID0gbmV3IFBJWEkuVGV4dCgnVGhpcyBpcyBhIHBpeGkgdGV4dCcse2ZvbnQgOiAnMjRweCBBcmlhbCcsIGZpbGwgOiAweGZmMTAxMCwgYWxpZ24gOiAnY2VudGVyJ30pO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbc3R5bGUuZm9udF0ge3N0cmluZ30gZGVmYXVsdCAnYm9sZCAyMHB4IEFyaWFsJyBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlLmcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcCwgaXQgbmVlZHMgd29yZFdyYXAgdG8gYmUgc2V0IHRvIHRydWVcbiAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzRdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gKi9cbmZ1bmN0aW9uIFRleHQodGV4dCwgc3R5bGUsIHJlc29sdXRpb24pXG57XG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgMmQgY29udGV4dCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gd2l0aFxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY2FudmFzLlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyh0aGlzLmNhbnZhcyk7XG4gICAgdGV4dHVyZS50cmltID0gbmV3IG1hdGguUmVjdGFuZ2xlKCk7XG4gICAgU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbn1cblxuLy8gY29uc3RydWN0b3JcblRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTcHJpdGUucHJvdG90eXBlKTtcblRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gVGV4dDtcblxuVGV4dC5mb250UHJvcGVydGllc0NhY2hlID0ge307XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZm9udD0nYm9sZCAyMHB0IEFyaWFsJ10ge3N0cmluZ30gVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gICAgICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZWcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGVnICdibHVlJywgJyNGQ0ZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXBcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd8bnVtYmVyfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNl0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gICAgICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAgICAgKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAgICAgKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHN0eWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdHlsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5maWxsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpbGwgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmZpbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLnN0cm9rZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zdHJva2UgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLnN0cm9rZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZHJvcFNoYWRvd0NvbG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZHJvcFNoYWRvd0NvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGUuZm9udCA9IHN0eWxlLmZvbnQgfHwgJ2JvbGQgMjBwdCBBcmlhbCc7XG4gICAgICAgICAgICBzdHlsZS5maWxsID0gc3R5bGUuZmlsbCB8fCAnYmxhY2snO1xuICAgICAgICAgICAgc3R5bGUuYWxpZ24gPSBzdHlsZS5hbGlnbiB8fCAnbGVmdCc7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2UgPSBzdHlsZS5zdHJva2UgfHwgJ2JsYWNrJzsgLy9wcm92aWRlIGEgZGVmYXVsdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzLzEzNlxuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIHx8IDA7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcCA9IHN0eWxlLndvcmRXcmFwIHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXBXaWR0aCA9IHN0eWxlLndvcmRXcmFwV2lkdGggfHwgMTAwO1xuXG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93ID0gc3R5bGUuZHJvcFNoYWRvdyB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvciB8fCAnIzAwMDAwMCc7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93QW5nbGUgPSBzdHlsZS5kcm9wU2hhZG93QW5nbGUgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA6IE1hdGguUEkgLyA2O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlID0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgOiA1O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0JsdXIgOiAwOyAvL3NoYWRvd0JsdXIgaXMgJzAnIGJ5IGRlZmF1bHQgYWNjb3JkaW5nIHRvIEhUTUxcblxuICAgICAgICAgICAgc3R5bGUucGFkZGluZyA9IHN0eWxlLnBhZGRpbmcgfHwgMDtcblxuICAgICAgICAgICAgc3R5bGUudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lIHx8ICdhbHBoYWJldGljJztcblxuICAgICAgICAgICAgc3R5bGUubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbiB8fCAnbWl0ZXInO1xuICAgICAgICAgICAgc3R5bGUubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQgfHwgMTA7XG5cbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gc3R5bGU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNvcHkgZm9yIHRoZSB0ZXh0IG9iamVjdC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCl7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgc3R5bGUgPSB0aGlzLl9zdHlsZTtcbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG5cbiAgICAvLyB3b3JkIHdyYXBcbiAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbCB0ZXh0XG4gICAgdmFyIG91dHB1dFRleHQgPSBzdHlsZS53b3JkV3JhcCA/IHRoaXMud29yZFdyYXAodGhpcy5fdGV4dCkgOiB0aGlzLl90ZXh0O1xuXG4gICAgLy8gc3BsaXQgdGV4dCBpbnRvIGxpbmVzXG4gICAgdmFyIGxpbmVzID0gb3V0cHV0VGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCB3aWR0aFxuICAgIHZhciBsaW5lV2lkdGhzID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aCk7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGZvbnRQcm9wZXJ0aWVzID0gdGhpcy5kZXRlcm1pbmVGb250UHJvcGVydGllcyhzdHlsZS5mb250KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBsaW5lV2lkdGg7XG4gICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICB2YXIgd2lkdGggPSBtYXhMaW5lV2lkdGggKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICB3aWR0aCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSAoIHdpZHRoICsgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgaGVpZ2h0XG4gICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLnN0eWxlLmxpbmVIZWlnaHQgfHwgZm9udFByb3BlcnRpZXMuZm9udFNpemUgKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG5cbiAgICB2YXIgaGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aDtcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGhlaWdodCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gKCBoZWlnaHQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nICogMiApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5jb250ZXh0LnNjYWxlKCB0aGlzLnJlc29sdXRpb24sIHRoaXMucmVzb2x1dGlvbik7XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgfVxuXG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFN0eWxlPVwiI0ZGMDAwMFwiO1xuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuICAgIHRoaXMuY29udGV4dC5zdHJva2VTdHlsZSA9IHN0eWxlLnN0cm9rZTtcbiAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIHRoaXMuY29udGV4dC50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmU7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVKb2luID0gc3R5bGUubGluZUpvaW47XG4gICAgdGhpcy5jb250ZXh0Lm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0O1xuXG4gICAgdmFyIGxpbmVQb3NpdGlvblg7XG4gICAgdmFyIGxpbmVQb3NpdGlvblk7XG5cbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGlmIChzdHlsZS5kcm9wU2hhZG93Qmx1ciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhTaGFkb3dPZmZzZXQgPSBNYXRoLmNvcyhzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgICAgICB2YXIgeVNoYWRvd09mZnNldCA9IE1hdGguc2luKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCArIHhTaGFkb3dPZmZzZXQsIGxpbmVQb3NpdGlvblkgKyB5U2hhZG93T2Zmc2V0ICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL3NldCBjYW52YXMgdGV4dCBzdHlsZXNcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZmlsbDtcblxuICAgIC8vZHJhdyBsaW5lcyBsaW5lIGJ5IGxpbmVcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0cm9rZSAmJiBzdHlsZS5zdHJva2VUaGlja25lc3MpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJva2VUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUudHJpbS54ID0gMDtcbiAgICB0ZXh0dXJlLnRyaW0ueSA9IC10aGlzLl9zdHlsZS5wYWRkaW5nO1xuXG4gICAgdGV4dHVyZS50cmltLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGV4dHVyZS50cmltLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAtIHRoaXMuX3N0eWxlLnBhZGRpbmcqMjtcblxuICAgIHRoaXMuX3dpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5lbWl0KCd1cGRhdGUnLCAgdGV4dHVyZS5iYXNlVGV4dHVyZSk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqL1xuVGV4dC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICAvL3RoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5yZW5kZXJXZWJHTC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgLy8gICB0aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYXNjZW50LCBkZXNjZW50IGFuZCBmb250U2l6ZSBvZiBhIGdpdmVuIGZvbnRTdHlsZVxuICpcbiAqIEBwYXJhbSBmb250U3R5bGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGZvbnRTdHlsZSlcbntcbiAgICB2YXIgcHJvcGVydGllcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdO1xuXG4gICAgaWYgKCFwcm9wZXJ0aWVzKVxuICAgIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzO1xuICAgICAgICB2YXIgY29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnfE3DiXEnKS53aWR0aCk7XG4gICAgICAgIHZhciBiYXNlbGluZSA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCdNJykud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xuXG4gICAgICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiAxLjQgfCAwO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNmMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQoJ3xNw4lxJywgMCwgYmFzZWxpbmUpO1xuXG4gICAgICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgICB2YXIgcGl4ZWxzID0gaW1hZ2VkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmUgPSB3aWR0aCAqIDQ7XG5cbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgIHZhciBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZWxpbmU7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCArPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnQgPSBiYXNlbGluZSAtIGk7XG5cbiAgICAgICAgaWR4ID0gcGl4ZWxzIC0gbGluZTtcbiAgICAgICAgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGRlc2NlbnQuIHNjYW4gZnJvbSBib3R0b20gdG8gdG9wIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggLT0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IGkgLSBiYXNlbGluZTtcbiAgICAgICAgcHJvcGVydGllcy5mb250U2l6ZSA9IHByb3BlcnRpZXMuYXNjZW50ICsgcHJvcGVydGllcy5kZXNjZW50O1xuXG4gICAgICAgIFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBuZXdsaW5lcyB0byBhIHN0cmluZyB0byBoYXZlIGl0IG9wdGltYWxseSBmaXQgaW50byB0aGUgaG9yaXpvbnRhbFxuICogYm91bmRzIHNldCBieSB0aGUgVGV4dCBvYmplY3QncyB3b3JkV3JhcFdpZHRoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS53b3JkV3JhcCA9IGZ1bmN0aW9uICh0ZXh0KVxue1xuICAgIC8vIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyXG4gICAgLy8gdGhhbiBpdHMgaG9yaXpvbnRhbCBib3VuZHMuXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICAgIHZhciB3b3JkV3JhcFdpZHRoID0gdGhpcy5fc3R5bGUud29yZFdyYXBXaWR0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XG4gICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQod29yZHNbal0pLndpZHRoO1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aFdpdGhTcGFjZSA9IHdvcmRXaWR0aCArIHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xuICAgICAgICAgICAgaWYgKGogPT09IDAgfHwgd29yZFdpZHRoV2l0aFNwYWNlID4gc3BhY2VMZWZ0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcHJpbnRpbmcgdGhlIG5ld2xpbmUgaWYgaXQncyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZSB0aGF0IGlzXG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSB3b3JkIHdyYXAgd2lkdGguXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal07XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB3b3Jkc1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgbGluZXMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFRleHQgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgVGV4dFxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UZXh0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzLmNhbGwodGhpcywgbWF0cml4KTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT10cnVlXSB7Ym9vbGVhbn0gd2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICAvLyBtYWtlIHN1cmUgdG8gcmVzZXQgdGhlIHRoZSBjb250ZXh0IGFuZCBjYW52YXMuLiBkb250IHdhbnQgdGhpcyBoYW5naW5nIGFyb3VuZCBpbiBtZW1vcnkhXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG5cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGVzdHJveUJhc2VUZXh0dXJlKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIFJlbmRlclRhcmdldCA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBGaWx0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKSxcbiAgICB0ZW1wUmVjdCA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuXG4vKipcbiAqIEEgQmFzZVJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIEJhc2VSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIHRha2VzIGEgc25hcHNob3Qgb2YgYW55IERpc3BsYXkgT2JqZWN0IGdpdmVuIHRvIGl0cyByZW5kZXIgbWV0aG9kLiBUaGUgcG9zaXRpb25cbiAqIGFuZCByb3RhdGlvbiBvZiB0aGUgZ2l2ZW4gRGlzcGxheSBPYmplY3RzIGlzIGlnbm9yZWQuIEZvciBleGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcigxMDI0LCAxMDI0LCB7IHZpZXc6IGNhbnZhcywgcmF0aW86IDEgfSk7XG4gKiB2YXIgQmFzZXJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5CYXNlUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihzcHJpdGUpO1xuICogYGBgXG4gKlxuICogVGhlIFNwcml0ZSBpbiB0aGlzIGNhc2Ugd2lsbCBiZSByZW5kZXJlZCB0byBhIHBvc2l0aW9uIG9mIDAsMC4gVG8gcmVuZGVyIHRoaXMgc3ByaXRlIGF0IGl0cyBhY3R1YWxcbiAqIHBvc2l0aW9uIGEgQ29udGFpbmVyIHNob3VsZCBiZSB1c2VkOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZG9jID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKlxuICogZG9jLmFkZENoaWxkKHNwcml0ZSk7XG4gKlxuICogQmFzZXJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiBCYXNlcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZVxuICogQHBhcmFtIFt3aWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbaGVpZ2h0PTEwMF0ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIEJhc2VSZW5kZXJUZXh0dXJlLCB5b3UgbXVzdCBwYXNzIGEgcmVuZGVyZXIgaW50byB0aGUgY29uc3RydWN0b3IuJyk7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUuY2FsbCh0aGlzLCBudWxsLCBzY2FsZU1vZGUpO1xuICAgXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047O1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRHJhdy9yZW5kZXIgdGhlIGdpdmVuIERpc3BsYXlPYmplY3Qgb250byB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBkZXNjZW5kZW50cyBhcmUgdHJhbnNmb3JtZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIElmIGB1cGRhdGVUcmFuc2Zvcm1gIGlzIHRydWUgdGhlbiB0aGUgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQgYmVmb3JlIHRoZVxuICAgICAqIG1ldGhvZCByZXR1cm5zLiBPdGhlcndpc2UgaXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcgY29kZSB0byBjb3JyZWN0bHkgdXNlIG9yIHJlc2V0XG4gICAgICogdGhlIHRyYW5zZm9ybWVkIGRpc3BsYXkgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5IG9iamVjdCBpcyBhbHdheXMgcmVuZGVyZWQgd2l0aCBhIHdvcmxkQWxwaGEgdmFsdWUgb2YgMS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICAgICAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gICAgICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAgICAgKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB1c2VzLiBBIEJhc2VSZW5kZXJUZXh0dXJlIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgcmVuZGVyZXIgYXQgdGhlIG1vbWVudCBpZiBpdHMgd2ViR0wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnNjYWxlTW9kZSwgdGhpcy5yZXNvbHV0aW9uKTsvLywgdGhpcy50aGlzLnNjYWxlTW9kZSk7XG4gICAgICAgIHRoaXMuX2dsVGV4dHVyZXNbZ2wuaWRdID0gIHRoaXMudGV4dHVyZUJ1ZmZlci50ZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgLy9UT0RPIHJlZmFjdG9yIGZpbHRlciBtYW5hZ2VyLi4gYXMgcmVhbGx5IGl0cyBubyBsb25nZXIgYSBtYW5hZ2VyIGlmIHdlIHVzZSBpdCBoZXJlLi5cbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbmV3IEZpbHRlck1hbmFnZXIodGhpcy5yZW5kZXJlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlcldlYkdMO1xuXG4gICAgICAgIC8vIHRoZSBjcmVhdGlvbiBvZiBhIGZpbHRlciBtYW5hZ2VyIHVuYmluZHMgdGhlIGJ1ZmZlcnMuLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgICAgICBpZih0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQpdGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlckNhbnZhcztcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcih0aGlzLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuaGVpZ2h0KiB0aGlzLnJlc29sdXRpb24pO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcblxufVxuXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIHVwZGF0ZUJhc2Uge2Jvb2xlYW59IFNob3VsZCB0aGUgYmFzZVRleHR1cmUud2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYmUgcmVzaXplZCBhcyB3ZWxsP1xuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgaWYgKHdpZHRoID09PSB0aGlzLndpZHRoICYmIGhlaWdodCA9PT0gdGhpcy5oZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZCA9ICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7XG5cbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoZGVzdGluYXRpb25GcmFtZSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuYmluZEZyYW1lYnVmZmVyKHRoaXMucmVuZGVyZXIuZ2wuRlJBTUVCVUZGRVIsIHRoaXMudGV4dHVyZUJ1ZmZlci5mcmFtZUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKGZhbHNlLCBkZXN0aW5hdGlvbkZyYW1lKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAoZnJhbWUsIGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAodXBkYXRlVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpID8gdXBkYXRlVHJhbnNmb3JtIDogdHJ1ZTsvLyF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIudHJhbnNmb3JtID0gbWF0cml4O1xuXG4gICAgLy9UT0RPIG5vdCBhIGZhbiB0aGF0IHRoaXMgaXMgaGVyZS4uLiBpdCB3aWxsIG1vdmUhXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKCk7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICBpZiAodXBkYXRlVHJhbnNmb3JtKVxuICAgIHtcblxuICAgICAgICAvLyByZXNldCB0aGUgbWF0cml4IG9mIHRoZSBkaXNwbGF0eU9iamVjdC4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uaWRlbnRpdHkoKTtcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmN1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGVtcFJlY3Qud2lkdGggPSBmcmFtZS5oZWlnaHQ7XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gZnJhbWUud2lkdGg7XG4gICBcbiAgICAvL1RPRE8gcmVuYW1lIHRleHR1cmVCdWZmZXIgdG8gcmVuZGVyVGFyZ2V0Li5cbiAgICB2YXIgdGVtcCA9ICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0aGlzLmZpbHRlck1hbmFnZXI7XG4gICAgXG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIuYWN0aXZhdGUoZnJhbWUsIHRlbXBSZWN0KTtcbiAgICBjb25zb2xlLmxvZyhkaXNwbGF5T2JqZWN0KVxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnRleHR1cmVCdWZmZXIsIGNsZWFyKTtcblxuICAgLy8gY29uc29sZS5sb2coXCJSRU5ERVJJTkcgXCIpO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRlbXA7XG59O1xuXG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcl0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVwZGF0ZVRyYW5zZm9ybSA9ICEhdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdmFyIHd0ID0gdGVtcE1hdHJpeDtcblxuICAgIHd0LmlkZW50aXR5KCk7XG5cbiAgICBpZiAobWF0cml4KVxuICAgIHtcbiAgICAgICAgd3QuYXBwZW5kKG1hdHJpeCk7XG4gICAgfVxuXG5cbiAgICB3dC50eCArPSBmcmFtZS54O1xuICAgIHd0LnR5ICs9IGZyYW1lLnk7XG5cbiAgICB2YXIgY2FjaGVkV3QgPSBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtO1xuICAgIFxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSB3dDtcblxuICAgIC8vIHNldFdvcmxkIEFscGhhIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgcmVuZGVyZXIgYXQgZnVsbCBvcGFjaXR5XG4gICAgZGlzcGxheU9iamVjdC53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICB2YXIgaSwgajtcblxuICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBcbi8vICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5cbiAgICB2YXIgY29udGV4dCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlYWxSZXNvbHV0aW9uID0gdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIGNvbnRleHQpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gcmVhbFJlc29sdXRpb247XG5cbiAgICBpZihkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID09PSB3dClcbiAgICB7XG4gICAgICAgIC8vIGZpeGVzIGNhY2hlQXNCaXRtYXAgSGFwcGVuaW5nIGR1cmluZyB0aGUgYWJvdmUuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gY2FjaGVkV3Q7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBkZXN0cm95QmFzZSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIGZpbHRlcm1hbmFnZXIuLlxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoZnJhbWUpXG57XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uuc3JjID0gdGhpcy5nZXRCYXNlNjQoZnJhbWUpO1xuICAgIHJldHVybiBpbWFnZTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGlzIHRleHR1cmUuIEl0IHdvcmtzIGJ5IGNhbGxpbmcgQmFzZVJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgIHJldHVybiB0aGlzLmdldENhbnZhcyhmcmFtZSkudG9EYXRhVVJMKCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIEJhc2VSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldENhbnZhcyA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2lkdGggPSBmcmFtZS53aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBjYW52YXNEYXRhID0gdGVtcENhbnZhcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2FudmFzRGF0YS5kYXRhLnNldCh3ZWJHTFBpeGVscyk7XG5cbiAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICByZXR1cm4gdGVtcENhbnZhcy5jYW52YXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy53aWR0aDtcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoZnJhbWUud2lkdGggPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGggJiYgXG4gICAgICAgICAgIGZyYW1lLmhlaWdodCA9PT0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5oZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IENhbnZhc0J1ZmZlcihmcmFtZS53aWR0aCAqIHJlc29sdXRpb24sIGZyYW1lLmhlaWdodCAqIHJlc29sdXRpb24pO1xuICAgICAgICAgICAgdmFyIGNhbnZhc0RhdGEgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dC5nZXRJbWFnZURhdGEoZnJhbWUueCAgKiByZXNvbHV0aW9uLCBmcmFtZS55ICogcmVzb2x1dGlvbiwgZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIHRoZSBlbnRpcmUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICBpZighZnJhbWUpXG4gICAge1xuICAgICAgICBmcmFtZSA9IHRlbXBSZWN0O1xuICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICByZXR1cm4gd2ViR0xQaXhlbHM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIGEgcGl4ZWwgd2l0aGluIHRoZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uIChmcmFtZSwgeCwgeSlcbntcbiAgICB0ZW1wUmVjdC54ID0geDtcbiAgICB0ZW1wUmVjdC55ID0geTtcbiAgICB0ZW1wUmVjdC53aWR0aCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gMSAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmKGZyYW1lKVxuICAgIHtcbiAgICAgICAgdGVtcFJlY3QueCArPSBmcmFtZS54O1xuICAgICAgICB0ZW1wUmVjdC55ICs9IGZyYW1lLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UGl4ZWxzKHRlbXBSZWN0KTtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlLiBBbGwgdGV4dHVyZXMgaGF2ZSBhIGJhc2UgdGV4dHVyZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50IHBpeGVsIHJhdGlvc1xuICovXG5mdW5jdGlvbiBCYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDEwMDtcblxuICAgIC8vIFRPRE8gZG9jc1xuICAgIC8vIHVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2VcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxXaWR0aCA9IDEwMDtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgaGVpZ2h0IG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUgdG8gYXBwbHkgd2hlbiBzY2FsaW5nIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuTElORUFSXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIG9uY2UgdGhlIGJhc2UgdGV4dHVyZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbmV2ZXIgdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmFpbHMgdG8gbG9hZCBvciBoYXMgbm8gdGV4dHVyZSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgaWYgdGhlIHNvdXJjZSBpcyBjdXJyZW50bHkgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIElmIGFuIEltYWdlIHNvdXJjZSBpcyBsb2FkaW5nIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmVcbiAgICAgKiBkaXNwYXRjaGVkIHdoZW4gdGhlIG9wZXJhdGlvbiBlbmRzLiBBbiB1bmRlcnlsaW5nIHNvdXJjZSB0aGF0IGlzXG4gICAgICogaW1tZWRpYXRlbHktYXZhaWxhYmxlIGJ5cGFzc2VzIGxvYWRpbmcgZW50aXJlbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW1hZ2Ugc291cmNlIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUT0RPOiBNYWtlIHRoaXMgYSBzZXR0ZXIgdGhhdCBjYWxscyBsb2FkU291cmNlKCk7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtJbWFnZXxDYW52YXN9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsOyAvLyBzZXQgaW4gbG9hZFNvdXJjZSwgaWYgYXQgYWxsXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiBSR0IgY2hhbm5lbHMgc2hvdWxkIGJlIHByZS1tdWx0aXBsaWVkIGJ5IEFscGhhICAoV2ViR0wgb25seSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBvciBub3QgdGhlIHRleHR1cmUgaXMgYSBwb3dlciBvZiB0d28sIHRyeSB0byB1c2UgcG93ZXIgb2YgdHdvIHRleHR1cmVzIGFzIG11Y2ggYXMgeW91IGNhblxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IGZhbHNlO1xuXG4gICAgLy8gdXNlZCBmb3Igd2ViR0xcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiBhIG1pcG1hcCBvZiB0aGlzIHRleHR1cmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLiBUaGlzIHZhbHVlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIHRleHR1cmUgaXMgdXNlZFxuICAgICAqIEFsc28gdGhlIHRleHR1cmUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBzaXplIHRvIHdvcmtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5taXBtYXAgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHJlbmRlcmVyIElEcyB0byB3ZWJnbCB0ZXh0dXJlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgV2ViR0xUZXh0dXJlPn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9pZCA9IDA7XG4gICAgXG4gICAgLy8gaWYgbm8gc291cmNlIHBhc3NlZCBkb24ndCB0cnkgdG8gbG9hZFxuICAgIGlmIChzb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmluaXNoZXMgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkZWRcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmFpbHMgdG8gbG9hZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBCYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0ZXh0dXJlIG9uIGFsbCB0aGUgd2ViZ2wgcmVuZGVyZXJzLCB0aGlzIGFsc28gYXNzdW1lcyB0aGUgc3JjIGhhcyBjaGFuZ2VkLlxuICpcbiAqIEBmaXJlcyB1cGRhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5yZWFsV2lkdGggPSB0aGlzLnNvdXJjZS5uYXR1cmFsV2lkdGggfHwgdGhpcy5zb3VyY2Uud2lkdGg7XG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gdGhpcy5zb3VyY2UubmF0dXJhbEhlaWdodCB8fCB0aGlzLnNvdXJjZS5oZWlnaHQ7XG5cbiAgICB0aGlzLndpZHRoID0gdGhpcy5yZWFsV2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlYWxIZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IHV0aWxzLmlzUG93ZXJPZlR3byh0aGlzLnJlYWxXaWR0aCwgdGhpcy5yZWFsSGVpZ2h0KTtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIExvYWQgYSBzb3VyY2UuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBpcyBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlLCBzdWNoIGFzIGFuIGltYWdlIHRoYXQgbmVlZHMgdG8gYmVcbiAqIGRvd25sb2FkZWQsIHRoZW4gdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIGluIHRoZSBmdXR1cmVcbiAqIGFuZCBgaGFzTG9hZGVkYCB3aWxsIHJlbWFpbiBmYWxzZSBhZnRlciB0aGlzIGNhbGwuXG4gKlxuICogVGhlIGxvZ2ljIHN0YXRlIGFmdGVyIGNhbGxpbmcgYGxvYWRTb3VyY2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGVnLiBgZnJvbUltYWdlYCwgYG5ldyBCYXNlVGV4dHVyZWApIGlzOlxuICpcbiAqICAgICBpZiAodGV4dHVyZS5oYXNMb2FkZWQpXG4ge1xuICogICAgICAgIC8vIHRleHR1cmUgcmVhZHkgZm9yIHVzZVxuICogICAgIH0gZWxzZSBpZiAodGV4dHVyZS5pc0xvYWRpbmcpXG4ge1xuICogICAgICAgIC8vIGxpc3RlbiB0byAnbG9hZGVkJyBhbmQvb3IgJ2Vycm9yJyBldmVudHMgb24gdGV4dHVyZVxuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAgLy8gbm90IGxvYWRpbmcsIG5vdCBnb2luZyB0byBsb2FkIFVOTEVTUyB0aGUgc291cmNlIGlzIHJlbG9hZGVkXG4gKiAgICAgICAgLy8gKGl0IG1heSBzdGlsbCBtYWtlIHNlbnNlIHRvIGxpc3RlbiB0byB0aGUgZXZlbnRzKVxuICogICAgIH1cbiAqXG4gKiBAcHJvdGVjdGVkXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUubG9hZFNvdXJjZSA9IGZ1bmN0aW9uIChzb3VyY2UpXG57XG4gICAgdmFyIHdhc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZztcbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAod2FzTG9hZGluZyAmJiB0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc291cmNlLm9uZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgLy8gQXBwbHkgc291cmNlIGlmIGxvYWRlZC4gT3RoZXJ3aXNlIHNldHVwIGFwcHJvcHJpYXRlIGxvYWRpbmcgbW9uaXRvcnMuXG4gICAgaWYgKCh0aGlzLnNvdXJjZS5jb21wbGV0ZSB8fCB0aGlzLnNvdXJjZS5nZXRDb250ZXh0KSAmJiB0aGlzLnNvdXJjZS53aWR0aCAmJiB0aGlzLnNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNvdXJjZS5nZXRDb250ZXh0KVxuICAgIHtcblxuICAgICAgICAvLyBJbWFnZSBmYWlsIC8gbm90IHJlYWR5XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuXG4gICAgICAgIHNvdXJjZS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgc2NvcGUuZW1pdCgnbG9hZGVkJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvdXJjZS5vbmVycm9yID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5lbWl0KCdlcnJvcicsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQZXIgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjdGhlLWltZy1lbGVtZW50XG4gICAgICAgIC8vICAgXCJUaGUgdmFsdWUgb2YgYGNvbXBsZXRlYCBjYW4gdGh1cyBjaGFuZ2Ugd2hpbGUgYSBzY3JpcHQgaXMgZXhlY3V0aW5nLlwiXG4gICAgICAgIC8vIFNvIGNvbXBsZXRlIG5lZWRzIHRvIGJlIHJlLWNoZWNrZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gYWRkZWQuLlxuICAgICAgICAvLyBOT1RFOiBjb21wbGV0ZSB3aWxsIGJlIHRydWUgaWYgdGhlIGltYWdlIGhhcyBubyBzcmMgc28gYmVzdCB0byBjaGVjayBpZiB0aGUgc3JjIGlzIHNldC5cbiAgICAgICAgaWYgKHNvdXJjZS5jb21wbGV0ZSAmJiBzb3VyY2Uuc3JjKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyAuLmFuZCBpZiB3ZSdyZSBjb21wbGV0ZSBub3csIG5vIG5lZWQgZm9yIGNhbGxiYWNrc1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgc29tZSBvdGhlciB0cmFja2luZyB2YXJzIG9uY2VcbiAqIGEgc291cmNlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5fc291cmNlTG9hZGVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBiYXNlIHRleHR1cmVcbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5pbWFnZVVybClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuICAgICAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlLnNyYyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLnNvdXJjZS5fcGl4aUlkXTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG5cbiAgICB0aGlzLmRpc3Bvc2UoKTtcbn07XG5cbi8qKlxuICogRnJlZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTCBtZW1vcnkgd2l0aG91dCBkZXN0cm95aW5nIHRoaXMgdGV4dHVyZSBvYmplY3QuXG4gKiBUaGlzIG1lYW5zIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSB0ZXh0dXJlIGxhdGVyIHdoaWNoIHdpbGwgdXBsb2FkIGl0IHRvIEdQVVxuICogbWVtb3J5IGFnYWluLlxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIHRoaXMpO1xuXG4gICAgLy8gdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lZWRlZCwgdGhlIHJlbmRlcmVycyBzaG91bGQgY2xlYW51cCBhbGwgdGhlIGdsIHRleHR1cmVzLlxuICAgIC8vIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgc291cmNlIGltYWdlIG9mIHRoZSB0ZXh0dXJlLlxuICogVGhlIG9yaWdpbmFsIHNvdXJjZSBtdXN0IGJlIGFuIEltYWdlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5ld1NyYyB7c3RyaW5nfSB0aGUgcGF0aCBvZiB0aGUgaW1hZ2VcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNvdXJjZUltYWdlID0gZnVuY3Rpb24gKG5ld1NyYylcbntcbiAgICB0aGlzLnNvdXJjZS5zcmMgPSBuZXdTcmM7XG5cbiAgICB0aGlzLmxvYWRTb3VyY2UodGhpcy5zb3VyY2UpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIGJhc2UgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBTaG91bGQgdXNlIGFub255bW91cyBDT1JTPyBEZWZhdWx0cyB0byB0cnVlIGlmIHRoZSBVUkwgaXMgbm90IGEgZGF0YS1VUkkuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmIChjcm9zc29yaWdpbiA9PT0gdW5kZWZpbmVkICYmIGltYWdlVXJsLmluZGV4T2YoJ2RhdGE6JykgIT09IDApXG4gICAge1xuICAgICAgICBjcm9zc29yaWdpbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIC8vIG5ldyBJbWFnZSgpIGJyZWFrcyB0ZXggbG9hZGluZyBpbiBzb21lIHZlcnNpb25zIG9mIENocm9tZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMzgwNzFcbiAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgaWYgKGNyb3Nzb3JpZ2luKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoaW1hZ2UsIHNjYWxlTW9kZSk7XG4gICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgaW1hZ2Uuc3JjID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSBiYXNlVGV4dHVyZTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBAMnggYXQgdGhlIGVuZCBvZiB0aGUgdXJsIHdlIGFyZSBnb2luZyB0byBhc3N1bWUgaXRzIGEgaGlnaHJlcyBpbWFnZVxuICAgICAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKGltYWdlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFjYW52YXMuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGNhbnZhcy5fcGl4aUlkID0gJ2NhbnZhc18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG4iLCJ2YXIgQmFzZVJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VSZW5kZXJUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIFJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIFJlbmRlclRleHR1cmUgc2hvdWxkIGJlIHByZWxvYWRlZFxuICogb3RoZXJ3aXNlIGJsYWNrIHJlY3RhbmdsZXMgd2lsbCBiZSBkcmF3biBpbnN0ZWFkLlxuICpcbiAqIEEgUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCA4MDAsIDYwMCk7XG4gKiB2YXIgc3ByaXRlID0gUElYSS5TcHJpdGUuZnJvbUltYWdlKFwic3Bpbk9ial8wMS5wbmdcIik7XG4gKlxuICogc3ByaXRlLnBvc2l0aW9uLnggPSA4MDAvMjtcbiAqIHNwcml0ZS5wb3NpdGlvbi55ID0gNjAwLzI7XG4gKiBzcHJpdGUuYW5jaG9yLnggPSAwLjU7XG4gKiBzcHJpdGUuYW5jaG9yLnkgPSAwLjU7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiByZW5kZXJUZXh0dXJlXG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIGZvciB0aGlzIFJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIFJlbmRlclRleHR1cmUoYmFzZVJlbmRlclRleHR1cmUsIGZyYW1lKVxue1xuICAgIGlmICghcmVuZGVyZXIpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgb2JqZWN0IHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Jhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIFRleHR1cmUuY2FsbCh0aGlzLFxuICAgICAgICBiYXNlUmVuZGVyVGV4dHVyZSxcbiAgICAgICAgZnJhbWUgXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn1cblxuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmUucHJvdG90eXBlKTtcblJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGV4dHVyZTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIHVwZGF0ZUJhc2UpXG57XG4gICBcbiAgICAvL1RPRE8gLSBjb3VsZCBiZSBub3QgcmVxdWlyZWQuLlxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSB0aGlzLmNyb3Aud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNyb3AuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKHVwZGF0ZUJhc2UpXG4gICAge1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYmFzZVRleHR1cmUuY2xlYXIodGhpcy5mcmFtZSlcbiAgICBcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLnJlbmRlcih0aGlzLmZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRJbWFnZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuYmFzZVRleHR1cmUuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIFJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0QmFzZTY0ID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNlNjQuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIFJlbmRlclRleHR1cmUgdG8gaXQgYW5kIHRoZW4gcmV0dXJucyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gQSBDYW52YXMgZWxlbWVudCB3aXRoIHRoZSB0ZXh0dXJlIHJlbmRlcmVkIG9uLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldENhbnZhcyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVscyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVsKHRoaXMuZnJhbWUsIHgsIHkpO1xufTtcblxuUmVuZGVyVGV4dHVyZS5jcmVhdGUgPSBmdW5jdGlvbihyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHJldHVybiBuZXcgUmVuZGVyVGV4dHVyZShuZXcgQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbikpO1xufVxuXG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnMgPSByZXF1aXJlKCcuL1RleHR1cmVVdnMnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlIG9yIHBhcnQgb2YgYW4gaW1hZ2UuIEl0IGNhbm5vdCBiZSBhZGRlZFxuICogdG8gdGhlIGRpc3BsYXkgbGlzdCBkaXJlY3RseS4gSW5zdGVhZCB1c2UgaXQgYXMgdGhlIHRleHR1cmUgZm9yIGEgU3ByaXRlLiBJZiBubyBmcmFtZSBpcyBwcm92aWRlZCB0aGVuIHRoZSB3aG9sZSBpbWFnZSBpcyB1c2VkLlxuICpcbiAqIFlvdSBjYW4gZGlyZWN0bHkgY3JlYXRlIGEgdGV4dHVyZSBmcm9tIGFuIGltYWdlIGFuZCB0aGVuIHJldXNlIGl0IG11bHRpcGxlIHRpbWVzIGxpa2UgdGhpcyA6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZSgnYXNzZXRzL2ltYWdlLnBuZycpO1xuICogdmFyIHNwcml0ZTEgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiB2YXIgc3ByaXRlMiA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBiYXNlVGV4dHVyZSB7UElYSS5CYXNlVGV4dHVyZX0gVGhlIGJhc2UgdGV4dHVyZSBzb3VyY2UgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlIGZyb21cbiAqIEBwYXJhbSBbZnJhbWVdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3RhbmdsZSBmcmFtZSBvZiB0aGUgdGV4dHVyZSB0byBzaG93XG4gKiBAcGFyYW0gW2Nyb3BdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIGFyZWEgb2Ygb3JpZ2luYWwgdGV4dHVyZVxuICogQHBhcmFtIFt0cmltXSB7UElYSS5SZWN0YW5nbGV9IFRyaW1tZWQgdGV4dHVyZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBbcm90YXRlXSB7Ym9vbGVhbn0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlcyAoIHVzZWQgYnkgdGV4dHVyZSBwYWNrZXIgKVxuICovXG5mdW5jdGlvbiBUZXh0dXJlKGJhc2VUZXh0dXJlLCBmcmFtZSwgY3JvcCwgdHJpbSwgcm90YXRlKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogRG9lcyB0aGlzIFRleHR1cmUgaGF2ZSBhbnkgZnJhbWUgZGF0YSBhc3NpZ25lZCB0byBpdD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5ub0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VUZXh0dXJlIGluc3RhbmNlb2YgVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0cmltIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLnRyaW0gPSB0cmltO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCB0aGUgcmVuZGVyZXIga25vdyBpZiB0aGUgdGV4dHVyZSBpcyB2YWxpZC4gSWYgaXQncyBub3QgdGhlbiBpdCBjYW5ub3QgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgYSByZW5kZXJlciBrbm93IHRoYXQgYSB0ZXh0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgKHVzZWQgbWFpbmx5IGZvciB3ZWJHTCB1diB1cGRhdGVzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVpcmVzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgVVYgZGF0YSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgYXJlYSBvZiB0aGUgQmFzZVRleHR1cmUgaW1hZ2UgdG8gYWN0dWFsbHkgY29weSB0byB0aGUgQ2FudmFzIC8gV2ViR0wgd2hlbiByZW5kZXJpbmcsXG4gICAgICogaXJyZXNwZWN0aXZlIG9mIHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBvciBwbGFjZW1lbnQgKHdoaWNoIGNhbiBiZSBpbmZsdWVuY2VkIGJ5IHRyaW1tZWQgdGV4dHVyZSBhdGxhc2VzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jcm9wID0gY3JvcCB8fCBmcmFtZTsvL25ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdGF0ZSA9ICEhcm90YXRlO1xuXG4gICAgaWYgKGJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBmcmFtZSB3ZSBzaG91bGQgbW9uaXRvciBmb3IgYW55IGJhc2UgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlLm9uY2UoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZyYW1lIG9yIHRoZSBiYXNlVGV4dHVyZSBpcyB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICovXG4gICAgZnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgICAgICAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50cmltICYmICF0aGlzLnJvdGF0ZSAmJiAoZnJhbWUueCArIGZyYW1lLndpZHRoID4gdGhpcy5iYXNlVGV4dHVyZS53aWR0aCB8fCBmcmFtZS55ICsgZnJhbWUuaGVpZ2h0ID4gdGhpcy5iYXNlVGV4dHVyZS5oZWlnaHQpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dHVyZSBFcnJvcjogZnJhbWUgZG9lcyBub3QgZml0IGluc2lkZSB0aGUgYmFzZSBUZXh0dXJlIGRpbWVuc2lvbnMgJyArIHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5zb3VyY2UgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50cmltKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wID0gZnJhbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlcyB0aGlzIHRleHR1cmUgb24gdGhlIGdwdS5cbiAqXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5iYXNlVGV4dHVyZS51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyBsb2FkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlTG9hZGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIC8vIFRPRE8gdGhpcyBjb2RlIGxvb2tzIGNvbmZ1c2luZy4uIGJvbyB0byBhYnVzaW5nIGdldHRlcnMgYW5kIHNldHRlcnNzIVxuICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy5fZnJhbWU7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyB1cGRhdGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZVVwZGF0ZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSBiYXNlVGV4dHVyZS53aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSBiYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlPWZhbHNlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlKVxue1xuICAgIGlmICh0aGlzLmJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGRlc3Ryb3lCYXNlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG4gICAgdGhpcy50cmltID0gbnVsbDtcbiAgICB0aGlzLmNyb3AgPSBudWxsO1xuXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UsIHRoaXMpO1xuICAgIHRoaXMub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGV4dHVyZSBvYmplY3QgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLmZyYW1lLCB0aGlzLmNyb3AsIHRoaXMudHJpbSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5fdXBkYXRlVXZzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuX3V2cylcbiAgICB7XG4gICAgICAgIHRoaXMuX3V2cyA9IG5ldyBUZXh0dXJlVXZzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXZzLnNldCh0aGlzLmNyb3AsIHRoaXMuYmFzZVRleHR1cmUsIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFRleHR1cmUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSAgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gY3Jvc3NvcmlnaW4ge2Jvb2xlYW59IFdoZXRoZXIgcmVxdWVzdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY3Jvc3NvcmlnaW5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21JbWFnZShpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xuICAgICAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gdGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICh0eXBlb2YgdmlkZW8gPT09ICdzdHJpbmcnKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFRleHR1cmUuZnJvbVZpZGVvVXJsKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSB2aWRlbyB1cmwuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvVXJsIHtzdHJpbmd9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW9VcmwgPSBmdW5jdGlvbiAodmlkZW9VcmwsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHZpZGVvVXJsLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIHRleHR1cmUgdG8gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuIFRoaXMgY2FjaGUgaXMgc2hhcmVkIGFjcm9zcyB0aGUgd2hvbGUgUElYSSBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIFRleHR1cmUgdG8gYWRkIHRvIHRoZSBjYWNoZS5cbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIGJlIHN0b3JlZCBhZ2FpbnN0LlxuICovXG5UZXh0dXJlLmFkZFRleHR1cmVUb0NhY2hlID0gZnVuY3Rpb24gKHRleHR1cmUsIGlkKVxue1xuICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpZF0gPSB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB0ZXh0dXJlIGZyb20gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCBvZiB0aGUgdGV4dHVyZSB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRoYXQgd2FzIHJlbW92ZWRcbiAqL1xuVGV4dHVyZS5yZW1vdmVUZXh0dXJlRnJvbUNhY2hlID0gZnVuY3Rpb24gKGlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBBbiBlbXB0eSB0ZXh0dXJlLCB1c2VkIG9mdGVuIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBtdWx0aXBsZSBlbXB0eSB0ZXh0dXJlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZS5FTVBUWSA9IG5ldyBUZXh0dXJlKG5ldyBCYXNlVGV4dHVyZSgpKTtcbiIsIlxuLyoqXG4gKiBBIHN0YW5kYXJkIG9iamVjdCB0byBzdG9yZSB0aGUgVXZzIG9mIGEgdGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmVVdnMoKVxue1xuICAgIHRoaXMueDAgPSAwO1xuICAgIHRoaXMueTAgPSAwO1xuXG4gICAgdGhpcy54MSA9IDE7XG4gICAgdGhpcy55MSA9IDA7XG5cbiAgICB0aGlzLngyID0gMTtcbiAgICB0aGlzLnkyID0gMTtcblxuICAgIHRoaXMueDMgPSAwO1xuICAgIHRoaXMueTMgPSAxO1xuXG4gICAgdGhpcy54eTBfdWludDMyID0gMDtcbiAgICB0aGlzLnh5MV91aW50MzIgPSAwO1xuICAgIHRoaXMueHkyX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTNfdWludDMyID0gMDtcblxuICAgIHRoaXMudXZzX3VpbnQzMiA9IG5ldyBVaW50MzJBcnJheSg0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVVdnM7XG5cbi8qKlxuICogU2V0cyB0aGUgdGV4dHVyZSBVdnMgYmFzZWQgb24gdGhlIGdpdmVuIGZyYW1lIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gZnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIGJhc2VGcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gcm90YXRlIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgcm90YXRlZFxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZVV2cy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZyYW1lLCBiYXNlRnJhbWUsIHJvdGF0ZSlcbntcbiAgICB2YXIgdHcgPSBiYXNlRnJhbWUud2lkdGg7XG4gICAgdmFyIHRoID0gYmFzZUZyYW1lLmhlaWdodDtcblxuICAgIGlmKHJvdGF0ZSlcbiAgICB7XG4gICAgICAgIHRoaXMueDAgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSBmcmFtZS55IC8gdGg7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy54MCA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcbiAgICB9XG5cbiAgICB0aGlzLnV2c191aW50MzJbMF0gPSAoKCh0aGlzLnkwICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDAgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsxXSA9ICgoKHRoaXMueTEgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MSAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzJdID0gKCgodGhpcy55MiAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngyICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbM10gPSAoKCh0aGlzLnkzICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDMgKiA2NTUzNSkgJiAweEZGRkYpO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIG9mIGEgW3BsYXlpbmddIFZpZGVvLlxuICpcbiAqIFZpZGVvIGJhc2UgdGV4dHVyZXMgbWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QgaW4gdGhlaXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNldmVyYWwgd2F5cywgc3VjaCBhczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCgnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHsgc3JjOiAnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9KTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbJy92aWRlby53ZWJtJywgJy92aWRlby5tcDQnXSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoW1xuICogICAgIHsgc3JjOiAnL3ZpZGVvLndlYm0nLCBtaW1lOiAndmlkZW8vd2VibScgfSxcbiAqICAgICB7IHNyYzogJy92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9XG4gKiBdKTtcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgW1wiZGV1c1wiIGRlbW9dKGh0dHA6Ly93d3cuZ29vZGJveWRpZ2l0YWwuY29tL3BpeGlqcy9leGFtcGxlcy9kZXVzLykuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkJhc2VUZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gVmlkZW9CYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmlkZW8gc291cmNlIGVsZW1lbnQgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIC8vIGhvb2sgaW4gaGVyZSB0byBjaGVjayBpZiB2aWRlbyBpcyBhbHJlYWR5IGF2YWlsYWJsZS5cbiAgICAvLyBCYXNlVGV4dHVyZSBsb29rcyBmb3IgYSBzb3VyY2UuY29tcGxldGUgYm9vbGVhbiwgcGx1cyB3aWR0aCAmIGhlaWdodC5cblxuICAgIGlmICgoc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0VOT1VHSF9EQVRBIHx8IHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9GVVRVUkVfREFUQSkgJiYgc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICBzb3VyY2UuY29tcGxldGUgPSB0cnVlO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgc291cmNlLCBzY2FsZU1vZGUpO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBiYXNlIHRleHR1cmUgYXV0b21hdGljYWxseSB1cGRhdGUgaXRzZWxmLCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX29uVXBkYXRlID0gdGhpcy5fb25VcGRhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkNhblBsYXkgPSB0aGlzLl9vbkNhblBsYXkuYmluZCh0aGlzKTtcblxuICAgIGlmICghc291cmNlLmNvbXBsZXRlKVxuICAgIHtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIC8vIHN0YXJ0ZWQgcGxheWluZy4uXG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fb25QbGF5U3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX29uUGxheVN0b3AuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fX2xvYWRlZCA9IGZhbHNlO1xufVxuXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZVRleHR1cmUucHJvdG90eXBlKTtcblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmlkZW9CYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9CYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3Agb2YgdGhlIHZpZGVvIGJhc2UgdGV4dHVyZSwgb25seSBydW5zIHdoZW4gYXV0b1VwZGF0ZSBpcyBzZXQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUnVucyB0aGUgdXBkYXRlIGxvb3Agd2hlbiB0aGUgdmlkZW8gaXMgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBwYXVzZSBldmVudCBpcyB0cmlnZ2VyZWQsIHN0b3BzIHRoZSB1cGRhdGUgbG9vcFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgdmlkZW8gaXMgbG9hZGVkIGFuZCByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uQ2FuUGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2UudmlkZW9XaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnNvdXJjZS52aWRlb0hlaWdodDtcblxuICAgICAgICB0aGlzLnNvdXJjZS5wbGF5KCk7XG5cbiAgICAgICAgLy8gcHJldmVudCBtdWx0aXBsZSBsb2FkZWQgZGlzcGF0Y2hlcy4uXG4gICAgICAgIGlmICghdGhpcy5fX2xvYWRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHRoaXMuc291cmNlLl9waXhpSWQgXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlLl9waXhpSWQ7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogTWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXZpZGVvLl9waXhpSWQpXG4gICAge1xuICAgICAgICB2aWRlby5fcGl4aUlkID0gJ3ZpZGVvXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3ZpZGVvLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IFZpZGVvQmFzZVRleHR1cmUodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHZpZGVvLl9waXhpSWQgXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBCYXNlVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqIFRoaXMgQmFzZVRleHR1cmUgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYSB0ZXh0dXJlXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvU3JjIHtzdHJpbmd8b2JqZWN0fHN0cmluZ1tdfG9iamVjdFtdfSBUaGUgVVJMKHMpIGZvciB0aGUgdmlkZW8uXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLnNyY10ge3N0cmluZ30gT25lIG9mIHRoZSBzb3VyY2UgdXJscyBmb3IgdGhlIHZpZGVvXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLm1pbWVdIHtzdHJpbmd9IFRoZSBtaW1ldHlwZSBvZiB0aGUgdmlkZW8gKGUuZy4gJ3ZpZGVvL21wNCcpLiBJZiBub3Qgc3BlY2lmaWVkXG4gKiAgdGhlIHVybCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBtaW1lIHR5cGUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwgPSBmdW5jdGlvbiAodmlkZW9TcmMsIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXG4gICAgLy8gYXJyYXkgb2Ygb2JqZWN0cyBvciBzdHJpbmdzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW9TcmMpKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWRlb1NyYy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjW2ldLnNyYyB8fCB2aWRlb1NyY1tpXSwgdmlkZW9TcmNbaV0ubWltZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNpbmdsZSBvYmplY3Qgb3Igc3RyaW5nXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjLnNyYyB8fCB2aWRlb1NyYywgdmlkZW9TcmMubWltZSkpO1xuICAgIH1cblxuICAgIHZpZGVvLmxvYWQoKTtcbiAgICB2aWRlby5wbGF5KCk7XG5cbiAgICByZXR1cm4gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSk7XG59O1xuXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzID0gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsO1xuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2UocGF0aCwgdHlwZSlcbntcbiAgICBpZiAoIXR5cGUpXG4gICAge1xuICAgICAgICB0eXBlID0gJ3ZpZGVvLycgKyBwYXRoLnN1YnN0cihwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gcGF0aDtcbiAgICBzb3VyY2UudHlwZSA9IHR5cGU7XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgLy8gSW50ZXJuYWwgZXZlbnQgdXNlZCBieSBjb21wb3NlZCBlbWl0dGVyXG4gICAgVElDSyA9ICd0aWNrJztcblxuLyoqXG4gKiBBIFRpY2tlciBjbGFzcyB0aGF0IHJ1bnMgYW4gdXBkYXRlIGxvb3AgdGhhdCBvdGhlciBvYmplY3RzIGxpc3RlbiB0by5cbiAqIFRoaXMgY2xhc3MgaXMgY29tcG9zZWQgYXJvdW5kIGFuIEV2ZW50RW1pdHRlciBvYmplY3QgdG8gYWRkIGxpc3RlbmVyc1xuICogbWVhbnQgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lLlxuICogQW5pbWF0aW9uIGZyYW1lcyBhcmUgcmVxdWVzdGVkIG9ubHkgd2hlbiBuZWNlc3NhcnksXG4gKiBlLmcuIFdoZW4gdGhlIHRpY2tlciBpcyBzdGFydGVkIGFuZCB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbmZ1bmN0aW9uIFRpY2tlcigpXG57XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRpY2sgbWV0aG9kIGJvdW5kIHRvIHRpY2tlciBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaW4gZWFybHkgMjAxNSwgRnVuY3Rpb24uYmluZFxuICAgICAqIGlzIHN0aWxsIDYwJSBzbG93ZXIgaW4gaGlnaCBwZXJmb3JtYW5jZSBzY2VuYXJpb3MuXG4gICAgICogQWxzbyBzZXBhcmF0aW5nIGZyYW1lIHJlcXVlc3RzIGZyb20gdXBkYXRlIG1ldGhvZFxuICAgICAqIHNvIGxpc3RlbmVycyBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGFuZCB3aXRoXG4gICAgICogYW55IGFuaW1hdGlvbiBBUEksIGp1c3QgaW52b2tlIHRpY2tlci51cGRhdGUodGltZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RpY2sgPSBmdW5jdGlvbiBfdGljayh0aW1lKSB7XG5cbiAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgbm93XG4gICAgICAgICAgICBfdGhpcy51cGRhdGUodGltZSk7XG4gICAgICAgICAgICAvLyBMaXN0ZW5lciBzaWRlIGVmZmVjdHMgbWF5IGhhdmUgbW9kaWZpZWQgdGlja2VyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQgJiYgX3RoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiBfdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fdGljayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZW1pdHRlciB1c2VkIHRvIGZpcmUgJ3RpY2snIGV2ZW50XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9lbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY3VycmVudCBmcmFtZSByZXF1ZXN0IElEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdmFsdWUgbWFuYWdlZCBieSBtaW5GUFMgcHJvcGVydHkgc2V0dGVyIGFuZCBnZXR0ZXIuXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHVwZGF0ZXMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBzaG91bGQgaW52b2tlIHRoZSBtZXRob2RcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBhdXRvbWF0aWNhbGx5XG4gICAgICogd2hlbiBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1N0YXJ0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTY2FsYXIgdGltZSB2YWx1ZSBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbWluRlBTfVxuICAgICAqIGFuZCBpcyBzY2FsZWQgd2l0aCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfS5cbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhcCBtYXkgYmUgZXhjZWVkZWQgYnkgc2NhbGluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kZWx0YVRpbWUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGltZSBlbGFwc2VkIGluIG1pbGxpc2Vjb25kcyBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBPcHBvc2VkIHRvIHdoYXQgdGhlIHNjYWxhciB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX1cbiAgICAgKiBpcyBiYXNlZCwgdGhpcyB2YWx1ZSBpcyBuZWl0aGVyIGNhcHBlZCBub3Igc2NhbGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMSAvIFRBUkdFVF9GUE1TXG4gICAgICovXG4gICAgdGhpcy5lbGFwc2VkTVMgPSAxIC8gQ09OU1QuVEFSR0VUX0ZQTVM7IC8vIGRlZmF1bHQgdG8gdGFyZ2V0IGZyYW1lIHRpbWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBsYXN0IHRpbWUge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9IHdhcyBpbnZva2VkLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgYWxzbyByZXNldCBpbnRlcm5hbGx5IG91dHNpZGUgb2YgaW52b2tpbmdcbiAgICAgKiB1cGRhdGUsIGJ1dCBvbmx5IHdoZW4gYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxhc3RUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEZhY3RvciBvZiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNjYWxlcyB0aWNrZXIuZGVsdGFUaW1lIHRvIHdoYXQgd291bGQgYmVcbiAgICAgKiAvLyB0aGUgZXF1aXZhbGVudCBvZiBhcHByb3hpbWF0ZWx5IDEyMCBGUFNcbiAgICAgKiB0aWNrZXIuc3BlZWQgPSAyO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICogYHRydWVgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBgZmFsc2VgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RvcH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIFdoaWxlIGBmYWxzZWAsIHRoaXMgdmFsdWUgbWF5IGNoYW5nZSB0byBgdHJ1ZWAgaW4gdGhlXG4gICAgICogZXZlbnQgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGJlaW5nIGB0cnVlYFxuICAgICAqIGFuZCBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWNrZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lcyBwZXIgc2Vjb25kIGF0IHdoaWNoIHRoaXMgdGlja2VyIGlzIHJ1bm5pbmcuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgYXBwcm94aW1hdGVseSA2MCBpbiBtb3N0IG1vZGVybiBicm93c2Vycy5cbiAgICAgKiAqKk5vdGU6KiogVGhpcyBkb2VzIG5vdCBmYWN0b3IgaW4gdGhlIHZhbHVlIG9mXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0sIHdoaWNoIGlzIHNwZWNpZmljXG4gICAgICogdG8gc2NhbGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBGUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5lbGFwc2VkTVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGFsbG93ZWQgdG9cbiAgICAgKiBlbGFwc2UgYmV0d2VlbiBpbnZva2luZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0uXG4gICAgICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNhcCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gICAgICogYnV0IGRvZXMgbm90IGVmZmVjdCB0aGUgbWVhc3VyZWQgdmFsdWUgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNGUFN9LlxuICAgICAqIFdoZW4gc2V0dGluZyB0aGlzIHByb3BlcnR5IGl0IGlzIGNsYW1wZWQgdG8gYSB2YWx1ZSBiZXR3ZWVuXG4gICAgICogYDBgIGFuZCBgUElYSS5UQVJHRVRfRlBNUyAqIDEwMDBgLlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICBtaW5GUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZwcylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gQ2xhbXA6IDAgdG8gVEFSR0VUX0ZQTVNcbiAgICAgICAgICAgIHZhciBtaW5GUE1TID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZnBzKSAvIDEwMDAsIENPTlNULlRBUkdFVF9GUE1TKTtcbiAgICAgICAgICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEgLyBtaW5GUE1TO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbFxuICogZW1pdHRlciBoYXMgbGlzdGVuZXJzLCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fcmVxdWVzdElmTmVlZGVkID0gZnVuY3Rpb24gX3JlcXVlc3RJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiB0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIC8vIGVuc3VyZSBjYWxsYmFja3MgZ2V0IGNvcnJlY3QgZGVsdGFcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fdGljayk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IGNhbmNlbHMgYSBwZW5kaW5nIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9jYW5jZWxJZk5lZWRlZCA9IGZ1bmN0aW9uIF9jYW5jZWxJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIHRoZSB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZCBpdCBjaGVja3MgaWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHlcbiAqIGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy4gSWYgdGhlc2VcbiAqIGNvbmRpdGlvbnMgYXJlIG1ldCwgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgdGlja2VyIGhhcyBub3RcbiAqIGJlZW4gc3RhcnRlZCwgYnV0IGF1dG9TdGFydCBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHRpY2tlciBzdGFydHMgbm93LFxuICogYW5kIGNvbnRpbnVlcyB3aXRoIHRoZSBwcmV2aW91cyBjb25kaXRpb25zIHRvIHJlcXVlc3QgYSBuZXcgZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fc3RhcnRJZlBvc3NpYmxlID0gZnVuY3Rpb24gX3N0YXJ0SWZQb3NzaWJsZSgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmF1dG9TdGFydClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb259IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIHVwZGF0ZXNcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb25jZX0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3Igb25lIHVwZGF0ZVxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIGFkZE9uY2UoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbmNlKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb2ZmfSBpbnRlcm5hbGx5IGZvciAndGljaycgZXZlbnQuXG4gKiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyBmb3IgJ3RpY2snIGV2ZW50LlxuICogSWYgaXQgZG9lcywgdGhlbiBpdCBjYW5jZWxzIHRoZSBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHBhcmFtIFtmbl0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZFxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0IHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vZmYoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgaWYgKCF0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyBsaXN0ZW5lcnNcbiAqIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIHN0YXJ0KClcbntcbiAgICBpZiAoIXRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgcmVxdWVzdGVkXG4gKiBhbiBhbmltYXRpb24gZnJhbWUgaXQgaXMgY2FuY2VsZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcCgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVHJpZ2dlcnMgYW4gdXBkYXRlLiBBbiB1cGRhdGUgZW50YWlscyBzZXR0aW5nIHRoZVxuICogY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2VsYXBzZWRNU30sXG4gKiB0aGUgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gKiBpbnZva2luZyBhbGwgbGlzdGVuZXJzIHdpdGggY3VycmVudCBkZWx0YVRpbWUsXG4gKiBhbmQgdGhlbiBmaW5hbGx5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNsYXN0VGltZX1cbiAqIHdpdGggdGhlIHZhbHVlIG9mIGN1cnJlbnRUaW1lIHRoYXQgd2FzIHByb3ZpZGVkLlxuICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBieSBhbmltYXRpb25cbiAqIGZyYW1lIGNhbGxiYWNrcyBpZiB0aGUgdGlja2VyIGluc3RhbmNlIGhhcyBiZWVuIHN0YXJ0ZWRcbiAqIGFuZCBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSBbY3VycmVudFRpbWU9cGVyZm9ybWFuY2Uubm93KCldIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn0gdGhlIGN1cnJlbnQgdGltZSBvZiBleGVjdXRpb25cbiAqL1xuVGlja2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoY3VycmVudFRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWRNUztcblxuICAgIC8vIEFsbG93IGNhbGxpbmcgdXBkYXRlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBjdXJyZW50VGltZS5cbiAgICBjdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIHx8IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIC8vIFNhdmUgdW5jYXBwZWQgZWxhcHNlZE1TIGZvciBtZWFzdXJlbWVudFxuICAgIGVsYXBzZWRNUyA9IHRoaXMuZWxhcHNlZE1TID0gY3VycmVudFRpbWUgLSB0aGlzLmxhc3RUaW1lO1xuXG4gICAgLy8gY2FwIHRoZSBtaWxsaXNlY29uZHMgZWxhcHNlZCB1c2VkIGZvciBkZWx0YVRpbWVcbiAgICBpZiAoZWxhcHNlZE1TID4gdGhpcy5fbWF4RWxhcHNlZE1TKVxuICAgIHtcbiAgICAgICAgZWxhcHNlZE1TID0gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgIH1cblxuICAgIHRoaXMuZGVsdGFUaW1lID0gZWxhcHNlZE1TICogQ09OU1QuVEFSR0VUX0ZQTVMgKiB0aGlzLnNwZWVkO1xuXG4gICAgLy8gSW52b2tlIGxpc3RlbmVycyBhZGRlZCB0byBpbnRlcm5hbCBlbWl0dGVyXG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KFRJQ0ssIHRoaXMuZGVsdGFUaW1lKTtcblxuICAgIHRoaXMubGFzdFRpbWUgPSBjdXJyZW50VGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGlja2VyO1xuIiwidmFyIFRpY2tlciA9IHJlcXVpcmUoJy4vVGlja2VyJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZCB0aWNrZXIgaW5zdGFuY2UgdXNlZCBieSB7QGxpbmsgUElYSS5leHRyYXMuTW92aWVDbGlwfS5cbiAqIGFuZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICogVGhlIHByb3BlcnR5IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBpcyBzZXQgdG8gYHRydWVgXG4gKiBmb3IgdGhpcyBpbnN0YW5jZS4gUGxlYXNlIGZvbGxvdyB0aGUgZXhhbXBsZXMgZm9yIHVzYWdlLCBpbmNsdWRpbmdcbiAqIGhvdyB0byBvcHQtb3V0IG9mIGF1dG8tc3RhcnRpbmcgdGhlIHNoYXJlZCB0aWNrZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciB0aWNrZXIgPSBQSVhJLnRpY2tlci5zaGFyZWQ7XG4gKiAvLyBTZXQgdGhpcyB0byBwcmV2ZW50IHN0YXJ0aW5nIHRoaXMgdGlja2VyIHdoZW4gbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqIC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyB0cnVlIG9ubHkgZm9yIHRoZSBQSVhJLnRpY2tlci5zaGFyZWQgaW5zdGFuY2UuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiAvLyBGWUksIGNhbGwgdGhpcyB0byBlbnN1cmUgdGhlIHRpY2tlciBpcyBzdG9wcGVkLiBJdCBzaG91bGQgYmUgc3RvcHBlZFxuICogLy8gaWYgeW91IGhhdmUgbm90IGF0dGVtcHRlZCB0byByZW5kZXIgYW55dGhpbmcgeWV0LlxuICogdGlja2VyLnN0b3AoKTtcbiAqIC8vIENhbGwgdGhpcyB3aGVuIHlvdSBhcmUgcmVhZHkgZm9yIGEgcnVubmluZyBzaGFyZWQgdGlja2VyLlxuICogdGlja2VyLnN0YXJ0KCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFlvdSBtYXkgdXNlIHRoZSBzaGFyZWQgdGlja2VyIHRvIHJlbmRlci4uLlxuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoODAwLCA2MDApO1xuICogdmFyIHN0YWdlID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiB2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIpO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZW5kZXJlci52aWV3KTtcbiAqIHRpY2tlci5hZGQoZnVuY3Rpb24gKHRpbWUpIHtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE9yIHlvdSBjYW4ganVzdCB1cGRhdGUgaXQgbWFudWFsbHkuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiB0aWNrZXIuc3RvcCgpO1xuICogZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XG4gKiAgICAgdGlja2VyLnVwZGF0ZSh0aW1lKTtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAqIH1cbiAqIGFuaW1hdGUocGVyZm9ybWFuY2Uubm93KCkpO1xuICpcbiAqIEB0eXBlIHtQSVhJLnRpY2tlci5UaWNrZXJ9XG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xudmFyIHNoYXJlZCA9IG5ldyBUaWNrZXIoKTtcbnNoYXJlZC5hdXRvU3RhcnQgPSB0cnVlO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS50aWNrZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc2hhcmVkOiBzaGFyZWQsXG4gICAgVGlja2VyOiBUaWNrZXJcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gZnVuY3Rpb24gKHNpemUpXG57XG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBhcnJheSwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgXG4gICAgdmFyIHRvdGFsSW5kaWNlcyA9IHNpemUgKiA2O1xuXG4gICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodG90YWxJbmRpY2VzKTtcblxuXHQvLyBmaWxsIHRoZSBpbmRpY2VzIHdpdGggdGhlIHF1YWRzIHRvIGRyYXdcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IHRvdGFsSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICBpbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICBpbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHM7IiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudXRpbHNcbiAqL1xudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgX3VpZDogMCxcbiAgICBfc2FpZEhlbGxvOiBmYWxzZSxcblxuICAgIEV2ZW50RW1pdHRlcjogICByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgcGx1Z2luVGFyZ2V0OiAgIHJlcXVpcmUoJy4vcGx1Z2luVGFyZ2V0JyksXG4gICAgYXN5bmM6ICAgICAgICAgIHJlcXVpcmUoJ2FzeW5jJyksXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZS5cbiAgICAgKi9cbiAgICB1aWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICByZXR1cm4gKyt1dGlscy5fdWlkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYW4gW1IsIEcsIEJdIGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHBhcmFtICB7bnVtYmVyW119IFtvdXQ9W11dXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgW1IsIEcsIEJdIG9mIHRoZSBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgycmdiOiBmdW5jdGlvbiAoaGV4LCBvdXQpXG4gICAge1xuICAgICAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICAgICAgb3V0WzBdID0gKGhleCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMV0gPSAoaGV4ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzJdID0gKGhleCAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnN0cmluZzogZnVuY3Rpb24gKGhleClcbiAgICB7XG4gICAgICAgIGhleCA9IGhleC50b1N0cmluZygxNik7XG4gICAgICAgIGhleCA9ICcwMDAwMDAnLnN1YnN0cigwLCA2IC0gaGV4Lmxlbmd0aCkgKyBoZXg7XG5cbiAgICAgICAgcmV0dXJuICcjJyArIGhleDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkgdG8gYSBoZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmdiIHtudW1iZXJbXX1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb2xvciBudW1iZXJcbiAgICAgKi9cbiAgICByZ2IyaGV4OiBmdW5jdGlvbiAocmdiKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgocmdiWzBdKjI1NSA8PCAxNikgKyAocmdiWzFdKjI1NSA8PCA4KSArIHJnYlsyXSoyNTUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZFxuICAgICAqL1xuICAgIGNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXM6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBuZ0hlYWQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFCQVFNQUFBREQ4cDJPQUFBQUExQk1WRVgvJztcbiAgICAgICAgdmFyIHBuZ0VuZCA9ICdBQUFBQ2tsRVFWUUkxMk5nQUFBQUFnQUI0aUc4TXdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG4gICAgICAgIHZhciBtYWdlbnRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSA2O1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcblxuICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1hZ2VudGEsIDAsIDApO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh5ZWxsb3csIDIsIDApO1xuXG4gICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwwLDEsMSkuZGF0YTtcblxuICAgICAgICByZXR1cm4gKGRhdGFbMF0gPT09IDI1NSAmJiBkYXRhWzFdID09PSAwICYmIGRhdGFbMl0gPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIG51bWJlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICogdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIFN0YXJsaW5nIEZyYW1ld29yayBhcyBpdHMgcHJldHR5IG5lYXQgOylcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICovXG4gICAgZ2V0TmV4dFBvd2VyT2ZUd286IGZ1bmN0aW9uIChudW1iZXIpXG4gICAge1xuICAgICAgICAvLyBzZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG93ZXJfb2ZfdHdvI0Zhc3RfYWxnb3JpdGhtX3RvX2NoZWNrX2lmX2FfcG9zaXRpdmVfbnVtYmVyX2lzX2FfcG93ZXJfb2ZfdHdvXG4gICAgICAgIGlmIChudW1iZXIgPiAwICYmIChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDE7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPCBudW1iZXIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzdWx0IDw8PSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBtYWtlIGEgcG93ZXIgb2YgdHdvIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9XG4gICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybiAod2lkdGggPiAwICYmICh3aWR0aCAmICh3aWR0aCAtIDEpKSA9PT0gMCAmJiBoZWlnaHQgPiAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIGFuIGFzc2V0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwcmVmaXhcbiAgICAgKiB1c2VkIGJ5IHNwcml0ZXNoZWV0cyBhbmQgaW1hZ2UgdXJsc1xuICAgICAqXG4gICAgICogQHBhcmFtIHVybCB7c3RyaW5nfSB0aGUgaW1hZ2UgcGF0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRSZXNvbHV0aW9uT2ZVcmw6IGZ1bmN0aW9uICh1cmwpXG4gICAge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IENPTlNULlJFVElOQV9QUkVGSVguZXhlYyh1cmwpO1xuXG4gICAgICAgIGlmIChyZXNvbHV0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlc29sdXRpb25bMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvZ3Mgb3V0IHRoZSB2ZXJzaW9uIGFuZCByZW5kZXJlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBydW5uaW5nIGluc3RhbmNlIG9mIFBJWEkuXG4gICAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoaXMgbWVzc2FnZSB5b3UgY2FuIHNldCBgUElYSS51dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtgXG4gICAgICogc28gdGhlIGxpYnJhcnkgdGhpbmtzIGl0IGFscmVhZHkgc2FpZCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgZG9pbmcgdGhhdCB3aWxsIGZvcmV2ZXJcbiAgICAgKiBtYWtlcyB5b3UgYSBqZXJrIGZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBzdHJpbmcgcmVuZGVyZXIgdHlwZSB0byBsb2cuXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIHNheUhlbGxvOiBmdW5jdGlvbiAodHlwZSlcbiAgICB7XG4gICAgICAgIGlmICh1dGlscy5fc2FpZEhlbGxvKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZScpID4gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW1xuICAgICAgICAgICAgICAgICdcXG4gJWMgJWMgJWMgUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSDinLAgJyArIHR5cGUgKyAnIOKcsCAgJWMgJyArICcgJWMgJyArICcgaHR0cDovL3d3dy5waXhpanMuY29tLyAgJWMgJWMg4pmlJWPimaUlY+KZpSBcXG5cXG4nLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjY2YTU7IGJhY2tncm91bmQ6ICMwMzAzMDc7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmZjM2RjOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7J1xuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3MpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1BpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0gJyArIHR5cGUgKyAnIC0gaHR0cDovL3d3dy5waXhpanMuY29tLycpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmb3IgY2hlY2tpbmcgZm9yIHdlYmdsIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNXZWJHTFN1cHBvcnRlZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHZhciBjb250ZXh0T3B0aW9ucyA9IHsgc3RlbmNpbDogdHJ1ZSB9O1xuICAgICAgICB0cnlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgY29udGV4dE9wdGlvbnMpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBjb250ZXh0T3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIShnbCAmJiBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnN0ZW5jaWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzaWduIG9mIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIG4ge251bWJlcn1cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIG4gaXMgMCwgLTEgaWYgbiBpcyBuZWdhdGl2ZSwgMSBpZiBuIGkgcG9zaXRpdmVcbiAgICAgKi9cbiAgICBzaWduOiBmdW5jdGlvbiAobilcbiAgICB7XG4gICAgICAgIHJldHVybiBuID8gKG4gPCAwID8gLTEgOiAxKSA6IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZUl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydElkeCBUaGUgaW5kZXggdG8gYmVnaW4gcmVtb3ZpbmcgZnJvbSAoaW5jbHVzaXZlKVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVJdGVtczogZnVuY3Rpb24gKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KVxuICAgIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN0YXJ0SWR4ID49IGxlbmd0aCB8fCByZW1vdmVDb3VudCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVtb3ZlQ291bnQgPSAoc3RhcnRJZHgrcmVtb3ZlQ291bnQgPiBsZW5ndGggPyBsZW5ndGgtc3RhcnRJZHggOiByZW1vdmVDb3VudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydElkeCwgbGVuID0gbGVuZ3RoLXJlbW92ZUNvdW50OyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyLmxlbmd0aCA9IGxlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge30sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge31cbn07XG4iLCIvKipcbiAqIE1peGlucyBmdW5jdGlvbmFsaXR5IHRvIG1ha2UgYW4gb2JqZWN0IGhhdmUgXCJwbHVnaW5zXCIuXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS51dGlsc1xuICogQHBhcmFtIG9iaiB7b2JqZWN0fSBUaGUgb2JqZWN0IHRvIG1peCBpbnRvLlxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgcGx1Z2luVGFyZ2V0Lm1peGluKE15T2JqZWN0KTtcbiAqL1xuZnVuY3Rpb24gcGx1Z2luVGFyZ2V0KG9iailcbntcbiAgICBvYmouX19wbHVnaW5zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcGx1Z2luIHRvIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHBsdWdpbk5hbWUge3N0cmluZ30gVGhlIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQuXG4gICAgICogQHBhcmFtIGN0b3Ige0Z1bmN0aW9ufSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBwbHVnaW4uXG4gICAgICovXG4gICAgb2JqLnJlZ2lzdGVyUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGN0b3IpXG4gICAge1xuICAgICAgICBvYmouX19wbHVnaW5zW3BsdWdpbk5hbWVdID0gY3RvcjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5pbml0UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLnBsdWdpbnMgfHwge307XG5cbiAgICAgICAgZm9yICh2YXIgbyBpbiBvYmouX19wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBuZXcgKG9iai5fX3BsdWdpbnNbb10pKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmRlc3Ryb3lQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGZvciAodmFyIG8gaW4gdGhpcy5wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG51bGw7XG4gICAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvKipcbiAgICAgKiBNaXhlcyBpbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGx1Z2luVGFyZ2V0IGludG8gYW5vdGhlciBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3Qge29iamVjdH0gVGhlIG9iaiB0byBtaXggaW50b1xuICAgICAqL1xuICAgIG1peGluOiBmdW5jdGlvbiBtaXhpbihvYmopXG4gICAge1xuICAgICAgICBwbHVnaW5UYXJnZXQob2JqKTtcbiAgICB9XG59O1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKSxcbiAgICBtZXNoID0gcmVxdWlyZSgnLi9tZXNoJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi9leHRyYXMnKSxcbiAgICBmaWx0ZXJzID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgU3ByaXRlQmF0Y2hcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkuUGFydGljbGVDb250YWluZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlQmF0Y2ggPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuJyk7XG59O1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIEFzc2V0TG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLmxvYWRlcnMuTG9hZGVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuQXNzZXRMb2FkZXIgPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy4nKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvcmUsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RhZ2VcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RhZ2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignWW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIFBJWEkgU3RhZ2UgYW55IG1vcmUsIHlvdSBjYW4gc2ltcGx5IHJlbmRlciBhbnkgY29udGFpbmVyLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgRGlzcGxheU9iamVjdENvbnRhaW5lclxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBEaXNwbGF5T2JqZWN0Q29udGFpbmVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Rpc3BsYXlPYmplY3RDb250YWluZXIgaGFzIGJlZW4gc2hvcnRlbmVkIHRvIENvbnRhaW5lciwgcGxlYXNlIHVzZSBDb250YWluZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdHJpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdHJpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgU3RyaXAgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBNZXNoIGFuZCBtb3ZlZCB0byBtZXNoLk1lc2gsIHBsZWFzZSB1c2UgbWVzaC5NZXNoIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guTWVzaDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFJvcGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLlJvcGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgUm9wZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgUm9wZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBtZXNoLlJvcGUsIHBsZWFzZSB1c2UgbWVzaC5Sb3BlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guUm9wZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIE1vdmllQ2xpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXBcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgTW92aWVDbGlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBNb3ZpZUNsaXAgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLk1vdmllQ2xpcCwgcGxlYXNlIHVzZSBleHRyYXMuTW92aWVDbGlwIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5Nb3ZpZUNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUaWxpbmdTcHJpdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRpbGluZ1Nwcml0ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGlsaW5nU3ByaXRlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5UaWxpbmdTcHJpdGUsIHBsZWFzZSB1c2UgZXh0cmFzLlRpbGluZ1Nwcml0ZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuVGlsaW5nU3ByaXRlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQml0bWFwVGV4dFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJpdG1hcFRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJpdG1hcFRleHQgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLkJpdG1hcFRleHQsIHBsZWFzZSB1c2UgZXh0cmFzLkJpdG1hcFRleHQgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLkJpdG1hcFRleHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBibGVuZE1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgYmxlbmRNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYmxlbmRNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBCTEVORF9NT0RFUywgcGxlYXNlIHVzZSBCTEVORF9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkJMRU5EX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2NhbGVNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIHNjYWxlTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHNjYWxlTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gU0NBTEVfTU9ERVMsIHBsZWFzZSB1c2UgU0NBTEVfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TQ0FMRV9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5CYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCYXNlVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuQmFzZVRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5UZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLlRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5UZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5UZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgbWF0aFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIG1hdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBtYXRoIG5hbWVzcGFjZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgYWNjZXNzIG1lbWJlcnMgYWxyZWFkeSBhY2Nlc3NpYmxlIG9uIFBJWEkuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBQSVhJLlNwcml0ZSNzZXRUZXh0dXJlXG4gKiBAc2VlIFBJWEkuU3ByaXRlI3RleHR1cmVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0dXJlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0dXJlIHByb3BlcnR5LCBlLmcgOiBzcHJpdGUudGV4dHVyZSA9IHRleHR1cmU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuZXh0cmFzLkJpdG1hcFRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteUJpdG1hcFRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15VGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFN0eWxlXG4gKiBAc2VlIFBJWEkuVGV4dCNzdHlsZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpXG57XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgIGNvbnNvbGUud2Fybignc2V0U3R5bGUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5LCBlLmcgOiBteVRleHQuc3R5bGUgPSBzdHlsZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAc2VlIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHR1cmUucHJvdG90eXBlLnNldEZyYW1lID0gZnVuY3Rpb24oZnJhbWUpXG57XG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIGNvbnNvbGUud2Fybignc2V0RnJhbWUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIGZyYW1lIHByb3BlcnR5LCBlLmcgOiBteVRleHR1cmUuZnJhbWUgPSBmcmFtZTsnKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpbHRlcnMsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkFic3RyYWN0RmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkFic3RyYWN0RmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEFic3RyYWN0RmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuQWJzdHJhY3RGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEFic3RyYWN0RmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQWJzdHJhY3RGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuRlhBQUZpbHRlclxuICAgICAqIEBzZWUgUElYSS5GWEFBRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEZYQUFGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5GWEFBRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBGWEFBRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuRlhBQUZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgU3ByaXRlTWFza0ZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIFNwcml0ZU1hc2tGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TcHJpdGVNYXNrRmlsdGVyO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS51dGlscy51dWlkXG4gKiBAc2VlIFBJWEkudXRpbHMudWlkXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gKi9cbmNvcmUudXRpbHMudXVpZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29uc29sZS53YXJuKCd1dGlscy51dWlkKCkgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB1dGlscy51aWQoKSBmcm9tIG5vdyBvbi4nKTtcbiAgICByZXR1cm4gY29yZS51dGlscy51aWQoKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIEJpdG1hcFRleHQgb2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0IHVzaW5nIGJpdG1hcCBmb250LiBUb1xuICogc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLCAnXFxyJyBvciAnXFxyXFxuJyBpbiB5b3VyIHN0cmluZy4gWW91IGNhbiBnZW5lcmF0ZSB0aGUgZm50IGZpbGVzIHVzaW5nOlxuICpcbiAqIEEgQml0bWFwVGV4dCBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGZvbnQgaXMgbG9hZGVkXG4gKlxuICogYGBganNcbiAqIC8vIGluIHRoaXMgY2FzZSB0aGUgZm9udCBpcyBpbiBhIGZpbGUgY2FsbGVkICdkZXN5cmVsLmZudCdcbiAqIHZhciBiaXRtYXBUZXh0ID0gbmV3IFBJWEkuZXh0cmFzLkJpdG1hcFRleHQoXCJ0ZXh0IHVzaW5nIGEgZmFuY3kgZm9udCFcIiwge2ZvbnQ6IFwiMzVweCBEZXN5cmVsXCIsIGFsaWduOiBcInJpZ2h0XCJ9KTtcbiAqIGBgYFxuICpcbiAqXG4gKiBodHRwOi8vd3d3LmFuZ2VsY29kZS5jb20vcHJvZHVjdHMvYm1mb250LyBmb3Igd2luZG93cyBvclxuICogaHR0cDovL3d3dy5ibWdseXBoLmNvbS8gZm9yIG1hYy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIHN0eWxlIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gc3R5bGUuZm9udCB7c3RyaW5nfG9iamVjdH0gVGhlIGZvbnQgZGVzY3JpcHRvciBmb3IgdGhlIG9iamVjdCwgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZyBvZiBmb3JtXG4gKiAgICAgIFwiMjRweCBGb250TmFtZVwiIG9yIFwiRm9udE5hbWVcIiBvciBhcyBhbiBvYmplY3Qgd2l0aCBleHBsaWNpdCBuYW1lL3NpemUgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5uYW1lXSB7c3RyaW5nfSBUaGUgYml0bWFwIGZvbnQgaWRcbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5zaXplXSB7bnVtYmVyfSBUaGUgc2l6ZSBvZiB0aGUgZm9udCBpbiBwaXhlbHMsIGUuZy4gMjRcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3RcbiAqICAgICAgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS50aW50PTB4RkZGRkZGXSB7bnVtYmVyfSBUaGUgdGludCBjb2xvclxuICovXG5mdW5jdGlvbiBCaXRtYXBUZXh0KHRleHQsIHN0eWxlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGxldHRlciBzcHJpdGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbHlwaHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mb250ID0ge1xuICAgICAgICB0aW50OiBzdHlsZS50aW50ICE9PSB1bmRlZmluZWQgPyBzdHlsZS50aW50IDogMHhGRkZGRkYsXG4gICAgICAgIGFsaWduOiBzdHlsZS5hbGlnbiB8fCAnbGVmdCcsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIHNpemU6IDBcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBmb250LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mb250ID0gc3R5bGUuZm9udDsgLy8gcnVuIGZvbnQgc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggd2lkdGggb2YgdGhpcyBiaXRtYXAgdGV4dCBpbiBwaXhlbHMuIElmIHRoZSB0ZXh0IHByb3ZpZGVkIGlzIGxvbmdlciB0aGFuIHRoZSB2YWx1ZSBwcm92aWRlZCwgbGluZSBicmVha3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoZSBsYXN0IHdoaXRlc3BhY2UuXG4gICAgICogRGlzYWJsZSBieSBzZXR0aW5nIHZhbHVlIHRvIDBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggbGluZSBoZWlnaHQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBUZXh0LCBpZTogd2hlbiB0cnlpbmcgdG8gdmVydGljYWxseSBhbGlnbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpcnR5IHN0YXRlIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkJpdG1hcFRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuQml0bWFwVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCaXRtYXBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCaXRtYXBUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRpbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC50aW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC50aW50ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCkgPyB2YWx1ZSA6IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdsZWZ0J1xuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGFsaWduOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQuYWxpZ247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LmFsaWduID0gdmFsdWUgfHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9udCBkZXNjcmlwdG9yIG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Rm9udH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBmb250OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWUuc2xpY2UoMSkuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gcGFyc2VJbnQodmFsdWVbMF0sIDEwKSA6IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicgPyB2YWx1ZS5zaXplIDogcGFyc2VJbnQodmFsdWUuc2l6ZSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGRhdGEgPSBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV07XG4gICAgdmFyIHBvcyA9IG5ldyBjb3JlLlBvaW50KCk7XG4gICAgdmFyIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgdmFyIGNoYXJzID0gW107XG4gICAgdmFyIGxhc3RMaW5lV2lkdGggPSAwO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBsaW5lV2lkdGhzID0gW107XG4gICAgdmFyIGxpbmUgPSAwO1xuICAgIHZhciBzY2FsZSA9IHRoaXMuX2ZvbnQuc2l6ZSAvIGRhdGEuc2l6ZTtcbiAgICB2YXIgbGFzdFNwYWNlID0gLTE7XG4gICAgdmFyIG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHQubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSB0aGlzLnRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgbGFzdFNwYWNlID0gLyhcXHMpLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpID8gaSA6IGxhc3RTcGFjZTtcblxuICAgICAgICBpZiAoLyg/OlxcclxcbnxcXHJ8XFxuKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RTcGFjZSAhPT0gLTEgJiYgdGhpcy5tYXhXaWR0aCA+IDAgJiYgcG9zLnggKiBzY2FsZSA+IHRoaXMubWF4V2lkdGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXMoY2hhcnMsIGxhc3RTcGFjZSwgaSAtIGxhc3RTcGFjZSk7XG4gICAgICAgICAgICBpID0gbGFzdFNwYWNlO1xuICAgICAgICAgICAgbGFzdFNwYWNlID0gLTE7XG5cbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFyRGF0YSA9IGRhdGEuY2hhcnNbY2hhckNvZGVdO1xuXG4gICAgICAgIGlmICghY2hhckRhdGEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZDaGFyQ29kZSAmJiBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJzLnB1c2goe3RleHR1cmU6Y2hhckRhdGEudGV4dHVyZSwgbGluZTogbGluZSwgY2hhckNvZGU6IGNoYXJDb2RlLCBwb3NpdGlvbjogbmV3IGNvcmUuUG9pbnQocG9zLnggKyBjaGFyRGF0YS54T2Zmc2V0LCBwb3MueSArIGNoYXJEYXRhLnlPZmZzZXQpfSk7XG4gICAgICAgIGxhc3RMaW5lV2lkdGggPSBwb3MueCArIChjaGFyRGF0YS50ZXh0dXJlLndpZHRoICsgY2hhckRhdGEueE9mZnNldCk7XG4gICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLnhBZHZhbmNlO1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgKGNoYXJEYXRhLnlPZmZzZXQgKyBjaGFyRGF0YS50ZXh0dXJlLmhlaWdodCkpO1xuICAgICAgICBwcmV2Q2hhckNvZGUgPSBjaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcblxuICAgIHZhciBsaW5lQWxpZ25PZmZzZXRzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IGxpbmU7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBhbGlnbk9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9mb250LmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZUFsaWduT2Zmc2V0cy5wdXNoKGFsaWduT2Zmc2V0KTtcbiAgICB9XG5cbiAgICB2YXIgbGVuQ2hhcnMgPSBjaGFycy5sZW5ndGg7XG4gICAgdmFyIHRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuQ2hhcnM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjID0gdGhpcy5fZ2x5cGhzW2ldOyAvLyBnZXQgdGhlIG5leHQgZ2x5cGggc3ByaXRlXG5cbiAgICAgICAgaWYgKGMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMudGV4dHVyZSA9IGNoYXJzW2ldLnRleHR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjID0gbmV3IGNvcmUuU3ByaXRlKGNoYXJzW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZ2x5cGhzLnB1c2goYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjLnBvc2l0aW9uLnggPSAoY2hhcnNbaV0ucG9zaXRpb24ueCArIGxpbmVBbGlnbk9mZnNldHNbY2hhcnNbaV0ubGluZV0pICogc2NhbGU7XG4gICAgICAgIGMucG9zaXRpb24ueSA9IGNoYXJzW2ldLnBvc2l0aW9uLnkgKiBzY2FsZTtcbiAgICAgICAgYy5zY2FsZS54ID0gYy5zY2FsZS55ID0gc2NhbGU7XG4gICAgICAgIGMudGludCA9IHRpbnQ7XG5cbiAgICAgICAgaWYgKCFjLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBjaGlsZHJlbi5cbiAgICBmb3IgKGkgPSBsZW5DaGFyczsgaSA8IHRoaXMuX2dseXBocy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5fZ2x5cGhzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHRXaWR0aCA9IG1heExpbmVXaWR0aCAqIHNjYWxlO1xuICAgIHRoaXMudGV4dEhlaWdodCA9IChwb3MueSArIGRhdGEubGluZUhlaWdodCkgKiBzY2FsZTtcbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSBtYXhMaW5lSGVpZ2h0ICogc2NhbGU7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvZiB0aGlzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0ZXh0IGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGdldExvY2FsQm91bmRzXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cblxuQml0bWFwVGV4dC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHJldHVybiBjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn07XG5cbkJpdG1hcFRleHQuZm9udHMgPSB7fTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgTW92aWVDbGlwIGlzIGEgc2ltcGxlIHdheSB0byBkaXNwbGF5IGFuIGFuaW1hdGlvbiBkZXBpY3RlZCBieSBhIGxpc3Qgb2YgdGV4dHVyZXMuXG4gKlxuICogYGBganNcbiAqIHZhciBhbGllbkltYWdlcyA9IFtcImltYWdlX3NlcXVlbmNlXzAxLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDIucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMy5wbmdcIixcImltYWdlX3NlcXVlbmNlXzA0LnBuZ1wiXTtcbiAqIHZhciB0ZXh0dXJlQXJyYXkgPSBbXTtcbiAqXG4gKiBmb3IgKHZhciBpPTA7IGkgPCA0OyBpKyspXG4gKiB7XG4gKiAgICAgIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZShhbGllbkltYWdlc1tpXSk7XG4gKiAgICAgIHRleHR1cmVBcnJheS5wdXNoKHRleHR1cmUpO1xuICogfTtcbiAqXG4gKiB2YXIgbWMgPSBuZXcgUElYSS5Nb3ZpZUNsaXAodGV4dHVyZUFycmF5KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmVzIHtQSVhJLlRleHR1cmVbXXxPYmplY3RbXX0gYW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuVGV4dHVyZX0gb3IgZnJhbWUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIGFuaW1hdGlvblxuICogQHBhcmFtIHRleHR1cmVzW10udGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUge0BsaW5rIFBJWEkuVGV4dHVyZX0gb2YgdGhlIGZyYW1lXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50aW1lIHtudW1iZXJ9IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWUgaW4gbXNcbiAqL1xuZnVuY3Rpb24gTW92aWVDbGlwKHRleHR1cmVzKVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZXNbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUgPyB0ZXh0dXJlc1swXSA6IHRleHR1cmVzWzBdLnRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVzID0gdGV4dHVyZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3BlZWQgdGhhdCB0aGUgTW92aWVDbGlwIHdpbGwgcGxheSBhdC4gSGlnaGVyIGlzIGZhc3RlciwgbG93ZXIgaXMgc2xvd2VyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIG1vdmllIGNsaXAgcmVwZWF0cyBhZnRlciBwbGF5aW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5sb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIE1vdmllQ2xpcCBmaW5pc2hlcyBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKi9cbiAgICB0aGlzLm9uQ29tcGxldGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRWxhcHNlZCB0aW1lIHNpbmNlIGFuaW1hdGlvbiBoYXMgYmVlbiBzdGFydGVkLCB1c2VkIGludGVybmFsbHkgdG8gZGlzcGxheSBjdXJyZW50IHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgTW92aWVDbGlwIGlzIGN1cnJlbnRseSBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTW92aWVDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcbk1vdmllQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNb3ZpZUNsaXA7XG5tb2R1bGUuZXhwb3J0cyA9IE1vdmllQ2xpcDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTW92aWVDbGlwLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIHRvdGFsRnJhbWVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBNb3ZpZUNsaXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbnVtYmVyIG9mIHRleHR1cmVzXG4gICAgICogYXNzaWduZWQgdG8gdGhlIE1vdmllQ2xpcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0b3RhbEZyYW1lczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgdGV4dHVyZXMgdXNlZCBmb3IgdGhpcyBNb3ZpZUNsaXBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVtdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICpcbiAgICAgKi9cbiAgICB0ZXh0dXJlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzLnB1c2godmFsdWVbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucy5wdXNoKHZhbHVlW2ldLnRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAqIFRoZSBNb3ZpZUNsaXBzIGN1cnJlbnQgZnJhbWUgaW5kZXhcbiAgICAqXG4gICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICogQHJlYWRvbmx5XG4gICAgKi9cbiAgICBjdXJyZW50RnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSkgJSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lIDwgMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUgKz0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGcmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBQbGF5cyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKHRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBnb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RvcCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRTdG9wID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG59O1xuXG4vKipcbiAqIEdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZSBhbmQgYmVnaW5zIHBsYXlpbmcgdGhlIE1vdmllQ2xpcFxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdGFydCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRQbGF5ID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLnBsYXkoKTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqIEBwcml2YXRlXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB2YXIgZWxhcHNlZCA9IHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZHVyYXRpb25zICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGxhZyA9IHRoaXMuX2N1cnJlbnRUaW1lICUgMSAqIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG5cbiAgICAgICAgbGFnICs9IGVsYXBzZWQgLyA2MCAqIDEwMDA7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA8IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lLS07XG4gICAgICAgICAgICBsYWcgKz0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWduID0gTWF0aC5zaWduKHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPj0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGFnIC09IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0gKiBzaWduO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gc2lnbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGxhZyAvIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGVsYXBzZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lIDwgMCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCgwKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VGltZSA+PSB0aGlzLl90ZXh0dXJlcy5sZW5ndGggJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AodGhpcy5fdGV4dHVyZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG5cbn07XG5cbi8qXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBkZXN0cm95cyBpdFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCApXG57XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGZyYW1lIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgZnJhbWVzIGlkcyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUZyYW1lcyA9IGZ1bmN0aW9uIChmcmFtZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tRnJhbWUoZnJhbWVzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBpbWFnZSB1cmxzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tSW1hZ2VzID0gZnVuY3Rpb24gKGltYWdlcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59OyIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIC8vIGEgc3ByaXRlIHVzZSBkZm9yIHJlbmRlcmluZyB0ZXh0dXJlcy4uXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICBDYW52YXNUaW50ZXIgPSByZXF1aXJlKCcuLi9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyk7XG5cbi8qKlxuICogQSB0aWxpbmcgc3ByaXRlIGlzIGEgZmFzdCB3YXkgb2YgcmVuZGVyaW5nIGEgdGlsaW5nIGltYWdlXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZSB7VGV4dHVyZX0gdGhlIHRleHR1cmUgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gVGlsaW5nU3ByaXRlKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsaW5nIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVNjYWxlID0gbmV3IGNvcmUuUG9pbnQoMSwxKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIG9mZnNldCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG5ldyBjb3JlLlBvaW50KDAsMCk7XG5cbiAgICAvLy8vLyBwcml2YXRlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2l0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBuZXcgY29yZS5UZXh0dXJlVXZzKCk7XG5cbiAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gbnVsbDtcblxuICAgIC8vVE9ETyBtb3ZlLi5cbiAgICB0aGlzLnNoYWRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKFxuXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVUcmFuc2Zvcm07JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnICAgY29vcmQgLT0gdVRyYW5zZm9ybS54eTsnLFxuICAgICAgICAnICAgY29vcmQgLz0gdVRyYW5zZm9ybS56dzsnLFxuICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGNvb3JkOycsXG5cbiAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjMiB1UGl4ZWxTaXplOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gbW9kKHZUZXh0dXJlQ29vcmQsIHVGcmFtZS56dyk7JyxcbiAgICAgICAgJyAgIGNvb3JkID0gY2xhbXAoY29vcmQsIHVQaXhlbFNpemUsIHVGcmFtZS56dyAtIHVQaXhlbFNpemUpOycsXG4gICAgICAgICcgICBjb29yZCArPSB1RnJhbWUueHk7JyxcblxuICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gIHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQpICogdkNvbG9yIDsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1RnJhbWU6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1VHJhbnNmb3JtOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVBpeGVsU2l6ZSA6IHsgdHlwZSA6ICcyZnYnLCB2YWx1ZTogWzEsIDFdfVxuICAgICAgICAgICAgfVxuICAgICAgKTtcbn1cblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWxpbmdTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbGluZ1Nwcml0ZTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWxpbmdTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGlsaW5nU3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIHR3ZWFrIG91ciB0ZXh0dXJlIHRlbXBvcmFyaWx5Li5cbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZSB8fCAhdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZW1wVXZzID0gdGV4dHVyZS5fdXZzLFxuICAgICAgICB0ZW1wV2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgdGVtcEhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCxcbiAgICAgICAgdHcgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoLFxuICAgICAgICB0aCA9IHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGhpcy5fdXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMF0gPSAxLjAvdHc7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVsxXSA9IDEuMC90aDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVswXSA9IHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzFdID0gdGVtcFV2cy55MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMl0gPSB0ZW1wVXZzLngxIC0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbM10gPSB0ZW1wVXZzLnkyIC0gdGVtcFV2cy55MDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMF0gPSAodGhpcy50aWxlUG9zaXRpb24ueCAlICh0ZW1wV2lkdGggKiB0aGlzLnRpbGVTY2FsZS54KSkgLyB0aGlzLl93aWR0aDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzFdID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgJSAodGVtcEhlaWdodCAqIHRoaXMudGlsZVNjYWxlLnkpKSAvIHRoaXMuX2hlaWdodDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzJdID0gKCB0dyAvIHRoaXMuX3dpZHRoICkgKiB0aGlzLnRpbGVTY2FsZS54O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbM10gPSAoIHRoIC8gdGhpcy5faGVpZ2h0ICkgKiB0aGlzLnRpbGVTY2FsZS55O1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRlbXBVdnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0ZW1wV2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGVtcEhlaWdodDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZiAoIXRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQsXG4gICAgICAgIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICBiYXNlVGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIG1vZFggPSAodGhpcy50aWxlUG9zaXRpb24ueCAvIHRoaXMudGlsZVNjYWxlLngpICUgdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIG1vZFkgPSAodGhpcy50aWxlUG9zaXRpb24ueSAvIHRoaXMudGlsZVNjYWxlLnkpICUgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuXG4gICAgLy8gY3JlYXRlIGEgbmljZSBzaGlueSBwYXR0ZXJuIVxuICAgIC8vIFRPRE8gdGhpcyBuZWVkcyB0byBiZSByZWZyZXNoZWQgaWYgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICBpZighdGhpcy5fY2FudmFzUGF0dGVybilcbiAgICB7XG4gICAgICAgIC8vIGN1dCBhbiBvYmplY3QgZnJvbSBhIHNwcml0ZXNoZWV0Li5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgY29yZS5DYW52YXNCdWZmZXIodGV4dHVyZS5fZnJhbWUud2lkdGgsIHRleHR1cmUuX2ZyYW1lLmhlaWdodCk7XG5cbiAgICAgICAgLy8gVGludCB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMudGludGVkVGV4dHVyZSwgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKGJhc2VUZXh0dXJlLnNvdXJjZSwgLXRleHR1cmUuX2ZyYW1lLngsIC10ZXh0dXJlLl9mcmFtZS55KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gdGVtcENhbnZhcy5jb250ZXh0LmNyZWF0ZVBhdHRlcm4oIHRlbXBDYW52YXMuY2FudmFzLCAncmVwZWF0JyApO1xuICAgIH1cblxuICAgIC8vIHNldCBjb250ZXh0IHN0YXRlLi5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvbik7XG5cbiAgICAvLyBUT0RPIC0gdGhpcyBzaG91bGQgYmUgcm9sbGVkIGludG8gdGhlIHNldFRyYW5zZm9ybSBhYm92ZS4uXG4gICAgY29udGV4dC5zY2FsZSh0aGlzLnRpbGVTY2FsZS54LHRoaXMudGlsZVNjYWxlLnkpO1xuXG4gICAgY29udGV4dC50cmFuc2xhdGUobW9kWCArICh0aGlzLmFuY2hvci54ICogLXRoaXMuX3dpZHRoICksXG4gICAgICAgICAgICAgICAgICAgICAgbW9kWSArICh0aGlzLmFuY2hvci55ICogLXRoaXMuX2hlaWdodCkpO1xuXG4gICAgLy8gY2hlY2sgYmxlbmQgbW9kZVxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vIGZpbGwgdGhlIHBhdHRlcm4hXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9jYW52YXNQYXR0ZXJuO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoLW1vZFgsXG4gICAgICAgICAgICAgICAgICAgICAtbW9kWSxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoIC8gdGhpcy50aWxlU2NhbGUueCxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCAvIHRoaXMudGlsZVNjYWxlLnkpO1xuXG5cbiAgICAvL1RPRE8gLSBwcmV0dHkgc3VyZSB0aGlzIGNhbiBiZSBkZWxldGVkLi4uXG4gICAgLy9jb250ZXh0LnRyYW5zbGF0ZSgtdGhpcy50aWxlUG9zaXRpb24ueCArICh0aGlzLmFuY2hvci54ICogdGhpcy5fd2lkdGgpLCAtdGhpcy50aWxlUG9zaXRpb24ueSArICh0aGlzLmFuY2hvci55ICogdGhpcy5faGVpZ2h0KSk7XG4gICAgLy9jb250ZXh0LnNjYWxlKDEgLyB0aGlzLnRpbGVTY2FsZS54LCAxIC8gdGhpcy50aWxlU2NhbGUueSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIHNwcml0ZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG5cbiAgICB2YXIgdzAgPSB3aWR0aCAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgIHZhciB3MSA9IHdpZHRoICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICB2YXIgaDAgPSBoZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICB2YXIgaDEgPSBoZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcblxuICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIG1pblgsXG4gICAgICAgIG1heFgsXG4gICAgICAgIG1pblksXG4gICAgICAgIG1heFk7XG5cbiAgICBtaW5YID0geDE7XG4gICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICBtaW5ZID0geTE7XG4gICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICBtYXhYID0geDE7XG4gICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICBtYXhZID0geTE7XG4gICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgYm91bmRzLnggPSBtaW5YO1xuICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcblxuICAgIHJldHVybiBib3VuZHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIGNoZWNrXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRpbGluZyBzcHJpdGVcbiAqXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWxlU2NhbGUgPSBudWxsO1xuICAgIHRoaXMuX3RpbGVTY2FsZU9mZnNldCA9IG51bGw7XG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHRpbGluZyBzcHJpdGUgdGhhdCB3aWxsIHVzZSBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZCx3aWR0aCxoZWlnaHQpXG57XG4gICAgdmFyIHRleHR1cmUgPSBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSAnICsgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUodGV4dHVyZSx3aWR0aCxoZWlnaHQpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCB3aWR0aCwgaGVpZ2h0LCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSksd2lkdGgsaGVpZ2h0KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gY29yZS5EaXNwbGF5T2JqZWN0LFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwID0gZmFsc2U7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSBudWxsO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsSGl0VGVzdCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxEZXN0cm95ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGlzIGRpc3BsYXkgb2JqZWN0IHRvIGJlIGNhY2hlZCBhcyBhIGJpdG1hcC5cbiAgICAgKiBUaGlzIGJhc2ljYWxseSB0YWtlcyBhIHNuYXAgc2hvdCBvZiB0aGUgZGlzcGxheSBvYmplY3QgYXMgaXQgaXMgYXQgdGhhdCBtb21lbnQuIEl0IGNhbiBwcm92aWRlIGEgcGVyZm9ybWFuY2UgYmVuZWZpdCBmb3IgY29tcGxleCBzdGF0aWMgZGlzcGxheU9iamVjdHMuXG4gICAgICogVG8gcmVtb3ZlIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnZmFsc2UnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgY2FjaGVBc0JpdG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZUFzQml0bWFwO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXAgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVBc0JpdG1hcCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IHRoaXMucmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSB0aGlzLnJlbmRlckNhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gdGhpcy51cGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHMgPSB0aGlzLmdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSA9IHRoaXMuZGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludCA9IHRoaXMuY29udGFpbnNQb2ludDtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX2NhY2hlQXNCaXRtYXBEZXN0cm95O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJvdW5kcyA9IHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fb3JpZ2luYWxEZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIFdlYkdMXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlciggdGhpcy5fY2FjaGVkU3ByaXRlICk7XG59O1xuXG4vKipcbiogUHJlcGFyZXMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZmlyc3Qgd2UgZmx1c2ggYW55dGhpbmcgbGVmdCBpbiB0aGUgcmVuZGVyZXIgKG90aGVyd2lzZSBpdCB3b3VsZCBnZXQgcmVuZGVyZWQgdG8gdGhlIGNhY2hlZCB0ZXh0dXJlKVxuICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuICAgIC8vdGhpcy5maWx0ZXJzPSBbXTtcbiAgICAvLyBuZXh0IHdlIGZpbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHVudHJhbnNmb3JtZWQgb2JqZWN0XG4gICAgLy8gdGhpcyBmdW5jdGlvbiBhbHNvIGNhbGxzIHVwZGF0ZXRyYW5zZm9ybSBvbiBhbGwgaXRzIGNoaWxkcmVuIGFzIHBhcnQgb2YgdGhlIG1lYXN1cmluZy4gVGhpcyBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgdHJhbnNmb3JtIGFnYWluIGluIHRoaXMgZnVuY3Rpb25cbiAgICAvLyBUT0RPIHBhc3MgYW4gb2JqZWN0IHRvIGNsb25lIHRvbz8gc2F2ZXMgaGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBvbmUgZWFjaCB0aW1lIVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuY2xvbmUoKTtcblxuICAgIC8vIGFkZCBzb21lIHBhZGRpbmchXG4gICAgaWYodGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5fZmlsdGVyc1swXS5wYWRkaW5nO1xuICAgICAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgICAgICBib3VuZHMueSAtPSBwYWRkaW5nO1xuXG4gICAgICAgIGJvdW5kcy53aWR0aCArPSBwYWRkaW5nICogMjtcbiAgICAgICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcbiAgICB9XG5cbiAgICAvLyBmb3Igbm93IHdlIGNhY2hlIHRoZSBjdXJyZW50IHJlbmRlclRhcmdldCB0aGF0IHRoZSB3ZWJHTCByZW5kZXJlciBpcyBjdXJyZW50bHkgdXNpbmcuXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBtb3JlIGVsZWdlbnQuLlxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0O1xuICAgIC8vIFdlIGFsc28gc3RvcmUgdGhlIGZpbHRlciBzdGFjayAtIEkgd2lsbCBkZWZpbml0ZWx5IGxvb2sgdG8gY2hhbmdlIGhvdyB0aGlzIHdvcmtzIGEgbGl0dGxlIGxhdGVyIGRvd24gdGhlIGxpbmUuXG4gICAgdmFyIHN0YWNrID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjaztcblxuICAgIC8vIHRoaXMgcmVuZGVyVGV4dHVyZSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlZCBEaXNwbGF5T2JqZWN0XG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cblxuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjYWNoZWRSZW5kZXJUYXJnZXQpO1xuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2sgPSBzdGFjaztcblxuICAgIHRoaXMucmVuZGVyV2ViR0wgICAgID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgICAgICAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyByZXN0b3JlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIGNhY2hlZCBzcHJpdGUgdG8gYXZvaWQgdGhlIG5hc3R5IGZsaWNrZXIuLlxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAvLyBtYXAgdGhlIGhpdCB0ZXN0Li5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBjYW52YXNcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzKCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbn07XG5cbi8vVE9ETyB0aGlzIGNhbiBiZSB0aGUgc2FtZSBhcyB0aGUgd2ViR0wgdmVyaXNvbi4uIHdpbGwgbmVlZCB0byBkbyBhIGxpdHRsZSB0d2Vha2luZyBmaXJzdCB0aG91Z2guLlxuLyoqXG4qIFByZXBhcmVzIHRoZSBDYW52YXMgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vZ2V0IGJvdW5kcyBhY3R1YWxseSB0cmFuc2Zvcm1zIHRoZSBvYmplY3QgZm9yIHVzIGFscmVhZHkhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5jb250ZXh0ID0gY2FjaGVkUmVuZGVyVGFyZ2V0O1xuXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBDYWxjdWxhdGVzIHRoZSBib3VuZHMgb2YgdGhlIGNhY2hlZCBzcHJpdGVcbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZ2V0Q2FjaGVkQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNwcml0ZS5nZXRCb3VuZHMoKTtcbn07XG5cbi8qKlxuKiBEZXN0cm95cyB0aGUgY2FjaGVkIHNwcml0ZS5cbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fdGV4dHVyZS5kZXN0cm95KCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwRGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jYWNoZUFzQml0bWFwID0gZmFsc2U7XG4gICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95KCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIG9iamVjdC5cbiAqXG4gKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICogQG1lbWJlciB7c3RyaW5nfVxuICovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZGlzcGxheSBvYmplY3QgaW4gdGhlIGNvbnRhaW5lclxuKlxuKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4qIEBwYXJhbSBuYW1lIHtzdHJpbmd9IGluc3RhbmNlIG5hbWVcbiogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuKi9cbmNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4qXG4qIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4qIEBwYXJhbSBwb2ludCB7UG9pbnR9IHRoZSBwb2ludCB0byB3cml0ZSB0aGUgZ2xvYmFsIHZhbHVlIHRvLiBJZiBudWxsIGEgbmV3IHBvaW50IHdpbGwgYmUgcmV0dXJuZWRcbiogQHJldHVybiB7UG9pbnR9XG4qL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRHbG9iYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb2ludClcbntcbiAgICBwb2ludCA9IHBvaW50IHx8IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICBpZih0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHBvaW50LnggPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICBwb2ludC55ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG9pbnQueCA9IHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMucG9zaXRpb24ueTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG5yZXF1aXJlKCcuL2NhY2hlQXNCaXRtYXAnKTtcbnJlcXVpcmUoJy4vZ2V0Q2hpbGRCeU5hbWUnKTtcbnJlcXVpcmUoJy4vZ2V0R2xvYmFsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZXh0cmFzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1vdmllQ2xpcDogICAgICByZXF1aXJlKCcuL01vdmllQ2xpcCcpLFxuICAgIFRpbGluZ1Nwcml0ZTogICByZXF1aXJlKCcuL1RpbGluZ1Nwcml0ZScpLFxuICAgIEJpdG1hcFRleHQ6ICAgICByZXF1aXJlKCcuL0JpdG1hcFRleHQnKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vLyBUT0RPIChjZW5nbGVyKSAtIFRoZSBZIGlzIGZsaXBwZWQgaW4gdGhpcyBzaGFkZXIgZm9yIHNvbWUgcmVhc29uLlxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBzaGFkZXIgOiBodHRwczovL3d3dy5zaGFkZXJ0b3kuY29tL3ZpZXcvbHNzR0RqIGJ5IEBtb3ZBWDEzaFxuICovXG5cbi8qKlxuICogQW4gQVNDSUkgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBBc2NpaUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgY2hhcmFjdGVyKGZsb2F0IG4sIHZlYzIgcClcXG57XFxuICAgIHAgPSBmbG9vcihwKnZlYzIoNC4wLCAtNC4wKSArIDIuNSk7XFxuICAgIGlmIChjbGFtcChwLngsIDAuMCwgNC4wKSA9PSBwLnggJiYgY2xhbXAocC55LCAwLjAsIDQuMCkgPT0gcC55KVxcbiAgICB7XFxuICAgICAgICBpZiAoaW50KG1vZChuL2V4cDIocC54ICsgNS4wKnAueSksIDIuMCkpID09IDEpIHJldHVybiAxLjA7XFxuICAgIH1cXG4gICAgcmV0dXJuIDAuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHk7XFxuXFxuICAgIHZlYzMgY29sID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBmbG9vciggdXYgLyBwaXhlbFNpemUgKSAqIHBpeGVsU2l6ZSAvIGRpbWVuc2lvbnMueHkpLnJnYjtcXG5cXG4gICAgZmxvYXQgZ3JheSA9IChjb2wuciArIGNvbC5nICsgY29sLmIpIC8gMy4wO1xcblxcbiAgICBmbG9hdCBuID0gIDY1NTM2LjA7ICAgICAgICAgICAgIC8vIC5cXG4gICAgaWYgKGdyYXkgPiAwLjIpIG4gPSA2NTYwMC4wOyAgICAvLyA6XFxuICAgIGlmIChncmF5ID4gMC4zKSBuID0gMzMyNzcyLjA7ICAgLy8gKlxcbiAgICBpZiAoZ3JheSA+IDAuNCkgbiA9IDE1MjU1MDg2LjA7IC8vIG9cXG4gICAgaWYgKGdyYXkgPiAwLjUpIG4gPSAyMzM4NTE2NC4wOyAvLyAmXFxuICAgIGlmIChncmF5ID4gMC42KSBuID0gMTUyNTIwMTQuMDsgLy8gOFxcbiAgICBpZiAoZ3JheSA+IDAuNykgbiA9IDEzMTk5NDUyLjA7IC8vIEBcXG4gICAgaWYgKGdyYXkgPiAwLjgpIG4gPSAxMTUxMjgxMC4wOyAvLyAjXFxuXFxuICAgIHZlYzIgcCA9IG1vZCggdXYgLyAoIHBpeGVsU2l6ZSAqIDAuNSApLCAyLjApIC0gdmVjMigxLjApO1xcbiAgICBjb2wgPSBjb2wgKiBjaGFyYWN0ZXIobiwgcCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sLCAxLjApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDggfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQXNjaWlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Bc2NpaUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc2NpaUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQXNjaWlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFzY2lpRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBzaXplIHVzZWQgYnkgdGhlIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkFzY2lpRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmxvb21GaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmxvb21GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xufVxuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsb29tRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb29tRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbG9vbUZpbHRlcjtcblxuQmxvb21GaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLlNDUkVFTik7XG5cbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvb21GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuXG4vKipcbiAqIFRoZSBCbHVyRGlyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvd2FyZCBhIGRpcmVjdGlvbiB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWFxuICogQHBhcmFtIHtudW1iZXJ9IGRpcllcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckRpckZpbHRlcihkaXJYLCBkaXJZKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBmbG9hdCBkaXJYO1xcbnVuaWZvcm0gZmxvYXQgZGlyWTtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1swXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDEyICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDEyICogc3RyZW5ndGgpICogZGlyWSApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkgKiAwLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkgKiAwLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkgKiAwLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pICogMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBkaXJYOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJYIHx8IDAgfSxcbiAgICAgICAgICAgIGRpclk6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclkgfHwgMCB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclggPSBkaXJYIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclkgPSBkaXJZIHx8IDA7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckRpckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckRpckZpbHRlcjtcblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKSB7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmICh0aGlzLnBhc3NlcyA9PT0gMSkge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0yOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gKHRoaXMucGFzc2VzKyhpKjIpKSAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckRpckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJYO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJYLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsdXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcbn1cblxuQmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckZpbHRlcjtcblxuQmx1ckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcGFzc2VzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzID0gdGhpcy5ibHVyWUZpbHRlci5wYXNzZXMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWEZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1clhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1clhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1clhGaWx0ZXI7XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1clhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSAgTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllGaWx0ZXI7XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSBNYXRoLmFicyh0aGlzLnN0cmVuZ3RoKSAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgU21hcnQgQmx1ciBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNtYXJ0Qmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAqIHBlcmNlbnQpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICBkZWx0YTogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjEsIHk6IDAuMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTbWFydEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNtYXJ0Qmx1ckZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDV4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogYGBganNcbiAqICB2YXIgY29sb3JNYXRyaXggPSBuZXcgUElYSS5Db2xvck1hdHJpeEZpbHRlcigpO1xuICogIGNvbnRhaW5lci5maWx0ZXJzID0gW2NvbG9yTWF0cml4XTtcbiAqICBjb2xvck1hdHJpeC5jb250cmFzdCgyKTtcbiAqIGBgYFxuICogQGF1dGhvciBDbMOpbWVudCBDaGVuZWJhdWx0IDxjbGVtZW50QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvck1hdHJpeEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBtWzI1XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuXFxuICAgIHZlYzQgYyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yID0gKG1bMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gbVs0XTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLmcgPSAobVs1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSBtWzldO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmIgPSAobVsxMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gbVsxNF07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYSA9IChtWzE1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSBtWzE5XTtcXG5cXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJzFmdicsIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yTWF0cml4RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvck1hdHJpeEZpbHRlcjtcblxuXG4vKipcbiAqIFRyYW5zZm9ybXMgY3VycmVudCBtYXRyaXggYW5kIHNldCB0aGUgbmV3IG9uZVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gaWYgdHJ1ZSwgY3VycmVudCBtYXRyaXggYW5kIG1hdHJpeCBhcmUgbXVsdGlwbGllZC4gSWYgZmFsc2UsIGp1c3Qgc2V0IHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIEBwYXJhbSBtYXRyaXhcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9sb2FkTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgbXVsdGlwbHkpXG57XG4gICAgbXVsdGlwbHkgPSAhIW11bHRpcGx5O1xuXG4gICAgdmFyIG5ld01hdHJpeCA9IG1hdHJpeDtcblxuICAgIGlmIChtdWx0aXBseSkge1xuICAgICAgICB0aGlzLl9tdWx0aXBseShuZXdNYXRyaXgsIHRoaXMudW5pZm9ybXMubS52YWx1ZSwgbWF0cml4KTtcbiAgICAgICAgbmV3TWF0cml4ID0gdGhpcy5fY29sb3JNYXRyaXgobmV3TWF0cml4KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBtYXRyaXhcbiAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSBuZXdNYXRyaXg7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDUnc1xuICpcbiAqIEBwYXJhbSBvdXQge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSBhIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0gYiB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIG91dCB7bnVtYmVyW119IChtYXQgNXg0KVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYilcbntcblxuICAgIC8vIFJlZCBDaGFubmVsXG4gICAgb3V0WzBdID0gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYls1XSkgKyAoYVsyXSAqIGJbMTBdKSArIChhWzNdICogYlsxNV0pO1xuICAgIG91dFsxXSA9IChhWzBdICogYlsxXSkgKyAoYVsxXSAqIGJbNl0pICsgKGFbMl0gKiBiWzExXSkgKyAoYVszXSAqIGJbMTZdKTtcbiAgICBvdXRbMl0gPSAoYVswXSAqIGJbMl0pICsgKGFbMV0gKiBiWzddKSArIChhWzJdICogYlsxMl0pICsgKGFbM10gKiBiWzE3XSk7XG4gICAgb3V0WzNdID0gKGFbMF0gKiBiWzNdKSArIChhWzFdICogYls4XSkgKyAoYVsyXSAqIGJbMTNdKSArIChhWzNdICogYlsxOF0pO1xuICAgIG91dFs0XSA9IChhWzBdICogYls0XSkgKyAoYVsxXSAqIGJbOV0pICsgKGFbMl0gKiBiWzE0XSkgKyAoYVszXSAqIGJbMTldKTtcblxuICAgIC8vIEdyZWVuIENoYW5uZWxcbiAgICBvdXRbNV0gPSAoYVs1XSAqIGJbMF0pICsgKGFbNl0gKiBiWzVdKSArIChhWzddICogYlsxMF0pICsgKGFbOF0gKiBiWzE1XSk7XG4gICAgb3V0WzZdID0gKGFbNV0gKiBiWzFdKSArIChhWzZdICogYls2XSkgKyAoYVs3XSAqIGJbMTFdKSArIChhWzhdICogYlsxNl0pO1xuICAgIG91dFs3XSA9IChhWzVdICogYlsyXSkgKyAoYVs2XSAqIGJbN10pICsgKGFbN10gKiBiWzEyXSkgKyAoYVs4XSAqIGJbMTddKTtcbiAgICBvdXRbOF0gPSAoYVs1XSAqIGJbM10pICsgKGFbNl0gKiBiWzhdKSArIChhWzddICogYlsxM10pICsgKGFbOF0gKiBiWzE4XSk7XG4gICAgb3V0WzldID0gKGFbNV0gKiBiWzRdKSArIChhWzZdICogYls5XSkgKyAoYVs3XSAqIGJbMTRdKSArIChhWzhdICogYlsxOV0pO1xuXG4gICAgLy8gQmx1ZSBDaGFubmVsXG4gICAgb3V0WzEwXSA9IChhWzEwXSAqIGJbMF0pICsgKGFbMTFdICogYls1XSkgKyAoYVsxMl0gKiBiWzEwXSkgKyAoYVsxM10gKiBiWzE1XSk7XG4gICAgb3V0WzExXSA9IChhWzEwXSAqIGJbMV0pICsgKGFbMTFdICogYls2XSkgKyAoYVsxMl0gKiBiWzExXSkgKyAoYVsxM10gKiBiWzE2XSk7XG4gICAgb3V0WzEyXSA9IChhWzEwXSAqIGJbMl0pICsgKGFbMTFdICogYls3XSkgKyAoYVsxMl0gKiBiWzEyXSkgKyAoYVsxM10gKiBiWzE3XSk7XG4gICAgb3V0WzEzXSA9IChhWzEwXSAqIGJbM10pICsgKGFbMTFdICogYls4XSkgKyAoYVsxMl0gKiBiWzEzXSkgKyAoYVsxM10gKiBiWzE4XSk7XG4gICAgb3V0WzE0XSA9IChhWzEwXSAqIGJbNF0pICsgKGFbMTFdICogYls5XSkgKyAoYVsxMl0gKiBiWzE0XSkgKyAoYVsxM10gKiBiWzE5XSk7XG5cbiAgICAvLyBBbHBoYSBDaGFubmVsXG4gICAgb3V0WzE1XSA9IChhWzE1XSAqIGJbMF0pICsgKGFbMTZdICogYls1XSkgKyAoYVsxN10gKiBiWzEwXSkgKyAoYVsxOF0gKiBiWzE1XSk7XG4gICAgb3V0WzE2XSA9IChhWzE1XSAqIGJbMV0pICsgKGFbMTZdICogYls2XSkgKyAoYVsxN10gKiBiWzExXSkgKyAoYVsxOF0gKiBiWzE2XSk7XG4gICAgb3V0WzE3XSA9IChhWzE1XSAqIGJbMl0pICsgKGFbMTZdICogYls3XSkgKyAoYVsxN10gKiBiWzEyXSkgKyAoYVsxOF0gKiBiWzE3XSk7XG4gICAgb3V0WzE4XSA9IChhWzE1XSAqIGJbM10pICsgKGFbMTZdICogYls4XSkgKyAoYVsxN10gKiBiWzEzXSkgKyAoYVsxOF0gKiBiWzE4XSk7XG4gICAgb3V0WzE5XSA9IChhWzE1XSAqIGJbNF0pICsgKGFbMTZdICogYls5XSkgKyAoYVsxN10gKiBiWzE0XSkgKyAoYVsxOF0gKiBiWzE5XSk7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHJldHVybiBtIHtudW1iZXJbXX0gKG1hdCA1eDQpIHdpdGggYWxsIHZhbHVlcyBiZXR3ZWVuIDAtMVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2NvbG9yTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICAvLyBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gICAgdmFyIG0gPSBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCk7XG4gICAgbVs0XSAvPSAyNTU7XG4gICAgbVs5XSAvPSAyNTU7XG4gICAgbVsxNF0gLz0gMjU1O1xuICAgIG1bMTldIC89IDI1NTtcblxuICAgIHJldHVybiBtO1xufTtcblxuLyoqXG4gKiBBZGp1c3RzIGJyaWdodG5lc3NcbiAqXG4gKiBAcGFyYW0gYiB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgYnJpZ3RobmVzcyAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icmlnaHRuZXNzID0gZnVuY3Rpb24gKGIsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGIsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIGIsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIGIsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXRyaWNlcyBpbiBncmV5IHNjYWxlc1xuICpcbiAqIEBwYXJhbSBzY2FsZSB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgZ3JleSAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG4vL0FtZXJpY2FuaXplZCBhbGlhc1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyYXlzY2FsZSA9IENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGU7XG5cbi8qKlxuICogU2V0IHRoZSBibGFjayBhbmQgd2hpdGUgbWF0cmljZVxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJsYWNrQW5kV2hpdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGh1ZSBwcm9wZXJ0eSBvZiB0aGUgY29sb3JcbiAqXG4gKiBAcGFyYW0gcm90YXRpb24ge251bWJlcn0gaW4gZGVncmVlc1xuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmh1ZSA9IGZ1bmN0aW9uIChyb3RhdGlvbiwgbXVsdGlwbHkpXG57XG4gICAgcm90YXRpb24gPSAocm90YXRpb24gfHwgMCkgLyAxODAgKiBNYXRoLlBJO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyhyb3RhdGlvbiksXG4gICAgICAgIHNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcblxuICAgIC8vIGx1bWluYW5jZVJlZCwgbHVtaW5hbmNlR3JlZW4sIGx1bWluYW5jZUJsdWVcbiAgICB2YXIgbHVtUiA9IDAuMjEzLCAvLyBvciAwLjMwODZcbiAgICAgICAgbHVtRyA9IDAuNzE1LCAvLyBvciAwLjYwOTRcbiAgICAgICAgbHVtQiA9IDAuMDcyOyAvLyBvciAwLjA4MjBcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoMSAtIGx1bVIpICsgc2luICogKC1sdW1SKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAoLWx1bUcpLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgxIC0gbHVtQiksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKDAuMTQzKSwgbHVtRyArIGNvcyAqICgxIC0gbHVtRykgKyBzaW4gKiAoMC4xNDApLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgtMC4yODMpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgtKDEgLSBsdW1SKSksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKGx1bUcpLCBsdW1CICsgY29zICogKDEgLSBsdW1CKSArIHNpbiAqIChsdW1CKSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKipcbiAqIFNldCB0aGUgY29udHJhc3QgbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGRhcmsgYW5kIGJyaWdodFxuICogSW5jcmVhc2UgY29udHJhc3QgOiBzaGFkb3dzIGRhcmtlciBhbmQgaGlnaGxpZ2h0cyBicmlnaHRlclxuICogRGVjcmVhc2UgY29udHJhc3QgOiBicmluZyB0aGUgc2hhZG93cyB1cCBhbmQgdGhlIGhpZ2hsaWdodHMgZG93blxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdmFsdWUgb2YgdGhlIGNvbnRyYXN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29udHJhc3QgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgdiA9IChhbW91bnQgfHwgMCkgKyAxO1xuICAgIHZhciBvID0gLTEyOCAqICh2IC0gMSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB2LCAwLCAwLCAwLCBvLFxuICAgICAgICAwLCB2LCAwLCAwLCBvLFxuICAgICAgICAwLCAwLCB2LCAwLCBvLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc2F0dXJhdGlvbiBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gY29sb3JzXG4gKiBJbmNyZWFzZSBzYXR1cmF0aW9uIDogaW5jcmVhc2UgY29udHJhc3QsIGJyaWdodG5lc3MsIGFuZCBzaGFycG5lc3NcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgeCA9IChhbW91bnQgfHwgMCkgKiAyIC8gMyArIDE7XG4gICAgdmFyIHkgPSAoKHggLSAxKSAqIC0wLjUpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgeCwgeSwgeSwgMCwgMCxcbiAgICAgICAgeSwgeCwgeSwgMCwgMCxcbiAgICAgICAgeSwgeSwgeCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBEZXNhdHVyYXRlIGltYWdlIChyZW1vdmUgY29sb3IpXG4gKlxuICogQ2FsbCB0aGUgc2F0dXJhdGUgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHRoaXMuc2F0dXJhdGUoLTEpO1xufTtcblxuLyoqXG4gKiBOZWdhdGl2ZSBpbWFnZSAoaW52ZXJzZSBvZiBjbGFzc2ljIHJnYiBtYXRyaXgpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5lZ2F0aXZlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDEsIDEsIDAsIDAsXG4gICAgICAgIDEsIDAsIDEsIDAsIDAsXG4gICAgICAgIDEsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2VwaWEgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2VwaWEgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zOTMsIDAuNzY4OTk5OSwgMC4xODg5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4zNDksIDAuNjg1OTk5OSwgMC4xNjc5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4yNzIsIDAuNTMzOTk5OSwgMC4xMzA5OTk5OSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciBtb3Rpb24gcGljdHVyZSBwcm9jZXNzIGludmVudGVkIGluIDE5MTYgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRlY2huaWNvbG9yID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuOTEyNTI3Nzg5MTQ1NjA4MywgLTAuODU0NTM0NDk3Njk1MTY0NSwgLTAuMDkxNTU1MDg0ODI3NTU1ODUsIDAsIDExLjc5MzYwMzQzNDM3NzMzNyxcbiAgICAgICAgLTAuMzA4NzgzMzM4NTkyODA5NywgMS43NjU4OTA4NTU1NDU4NDI4LCAtMC4xMDYwMTc0MzA3NDcyMjI0NSwgMCwgLTcwLjM1MjA1MTYxNDYxMzk4LFxuICAgICAgICAtMC4yMzExMDMzNzc1NDg2MTYsIC0wLjc1MDE4OTkxOTc0NDAyMTIsIDEuODQ3NTk3ODE2MTA4MTg5LCAwLCAzMC45NTA5NDA4Njk0OTExMzgsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogUG9sYXJvaWQgZmlsdGVyXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnBvbGFyb2lkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuNDM4LCAtMC4wNjIsIC0wLjA2MiwgMCwgMCxcbiAgICAgICAgLTAuMTIyLCAxLjM3OCwgLTAuMTIyLCAwLCAwLFxuICAgICAgICAtMC4wMTYsIC0wLjAxNiwgMS40ODMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRmlsdGVyIHdobyB0cmFuc2Zvcm1zIDogUmVkIC0+IEJsdWUgYW5kIEJsdWUgLT4gUmVkXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRvQkdSID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgcmV2ZXJzYWwgZmlsbSBpbnRyb2R1Y2VkIGJ5IEVhc3RtYW4gS29kYWsgaW4gMTkzNS4gKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmtvZGFjaHJvbWUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS4xMjg1NTgyMzk2NTkzNTI1LCAtMC4zOTY3MzgyMjgzNjAxMzQ4LCAtMC4wMzk5MjU1OTE3MjkyMTc5MywgMCwgNjMuNzI5NTg3NjIxOTY1MDIsXG4gICAgICAgIC0wLjE2NDA0MzM5OTYyMjQ0NjE2LCAxLjA4MzUyNTE1NjYyOTEzMDQsIC0wLjA1NDk4ODA1MTE1NjMzMTMyLCAwLCAyNC43MzI0MDc4OTY3MDYyMDMsXG4gICAgICAgIC0wLjE2Nzg2MDEwNzA2MTU1NzYzLCAtMC41NjAzNDE2Mjc3Njk1MjQ4LCAxLjYwMTQ4NTA3NjE5NjQ5NDMsIDAsIDM1LjYyOTgyODA3NDYwOTQ2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEJyb3duIGRlbGljaW91cyBicm93bmkgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icm93bmkgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC41OTk3MDIzNDk4MTU5NzE1LCAwLjM0NTUzMjQzMDQ4MzkxMjYzLCAtMC4yNzA4Mjk4Njc0NTM4MDQyLCAwLCA0Ny40MzE5Mjg1NTYwMDg3MyxcbiAgICAgICAgLTAuMDM3NzAzMjQ5ODM3NzgzMTU3LCAwLjg2MDk1Nzc1ODc5OTI2NDEsIDAuMTUwNTk1NTIzODg0NTk5MTMsIDAsIC0zNi45Njg0MTQ5ODMxOTEyNyxcbiAgICAgICAgMC4yNDExMzYzNTEyODE1MzMzNSwgLTAuMDc0NDEwMzc5MDg0MjI0OTIsIDAuNDQ5NzIxODIwNjQ4NzcxNTMsIDAsIC03LjU2MjA3NTI3NzU5MTI4MyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFZpbnRhZ2UgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS52aW50YWdlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNjI3OTM0NTYzNTYwNTk5NCwgMC4zMjAyMTgzNDIwODE5MzY3LCAtMC4wMzk2NTQwODIxMTMxMjQ1MywgMCwgOS42NTEyODU4MzUyOTQxMjMsXG4gICAgICAgIDAuMDI1NzgzOTc3MDQ4MDg4NjgsIDAuNjQ0MTE4ODY0NDM3NDc3MSwgMC4wMzI1OTEyNzYxNjE0OTI5NCwgMCwgNy40NjI4MjkxNzY0NzA1OTEsXG4gICAgICAgIDAuMDQ2NjA1NTU1Njc4MjcxOSwgLTAuMDg1MTIzMjk4NzI0Nzg5MSwgMC41MjQxNjQ4MDE4NzAwNDY1LCAwLCA1LjE1OTE5MDU4ODIzNTI5NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGtpbmQgb2YgZ3JhZGllbnQgbWFwLCBidXQgZnVubnkgdG8gcGxheSB3aXRoIVxuICpcbiAqIEBwYXJhbSBkZXNhdHVyYXRpb24ge251bWJlcn1cbiAqIEBwYXJhbSB0b25lZCB7bnVtYmVyfVxuICogQHBhcmFtIGxpZ2h0Q29sb3Ige3N0cmluZ30gKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKiBAcGFyYW0gZGFya0NvbG9yIHtzdHJpbmd9ICAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29sb3JUb25lID0gZnVuY3Rpb24gKGRlc2F0dXJhdGlvbiwgdG9uZWQsIGxpZ2h0Q29sb3IsIGRhcmtDb2xvciwgbXVsdGlwbHkpXG57XG4gICAgZGVzYXR1cmF0aW9uID0gZGVzYXR1cmF0aW9uIHx8IDAuMjtcbiAgICB0b25lZCA9IHRvbmVkIHx8IDAuMTU7XG4gICAgbGlnaHRDb2xvciA9IGxpZ2h0Q29sb3IgfHwgMHhGRkU1ODA7XG4gICAgZGFya0NvbG9yID0gZGFya0NvbG9yIHx8IDB4MzM4MDAwO1xuXG4gICAgdmFyIGxSID0gKChsaWdodENvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsRyA9ICgobGlnaHRDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsQiA9IChsaWdodENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgZFIgPSAoKGRhcmtDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEcgPSAoKGRhcmtDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkQiA9IChkYXJrQ29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC41OSwgMC4xMSwgMCwgMCxcbiAgICAgICAgbFIsIGxHLCBsQiwgZGVzYXR1cmF0aW9uLCAwLFxuICAgICAgICBkUiwgZEcsIGRCLCB0b25lZCwgMCxcbiAgICAgICAgbFIgLSBkUiwgbEcgLSBkRywgbEIgLSBkQiwgMCwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIE5pZ2h0IGVmZmVjdFxuICpcbiAqIEBwYXJhbSBpbnRlbnNpdHkge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uaWdodCA9IGZ1bmN0aW9uIChpbnRlbnNpdHksIG11bHRpcGx5KVxue1xuICAgIGludGVuc2l0eSA9IGludGVuc2l0eSB8fCAwLjE7XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgaW50ZW5zaXR5ICogKCAtMi4wKSwgLWludGVuc2l0eSwgMCwgMCwgMCxcbiAgICAgICAgLWludGVuc2l0eSwgMCwgaW50ZW5zaXR5LCAwLCAwLFxuICAgICAgICAwLCBpbnRlbnNpdHksIGludGVuc2l0eSAqIDIuMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKlxuICogUHJlZGF0b3IgZWZmZWN0XG4gKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgYSBuZXcgaW5kZXBlbnQgb25lXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBob3cgbXVjaCB0aGUgcHJlZGF0b3IgZmVlbHMgaGlzIGZ1dHVyZSB2aWN0aW1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wcmVkYXRvciA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDExLjIyNDEzMDYzMDQ5MzE2NCAqIGFtb3VudCwgLTQuNzk0NDg2OTk5NTExNzE5ICogYW1vdW50LCAtMi44NzQ2MTE4NTQ1NTMyMjI3ICogYW1vdW50LCAwICogYW1vdW50LCAwLjQwMzQyNDM4MjIwOTc3NzgzICogYW1vdW50LFxuICAgICAgICAtMy42MzMwNjk3NTM2NDY4NTA2ICogYW1vdW50LCA5LjE5MzE1NzE5NjA0NDkyMiAqIGFtb3VudCwgLTIuOTUxODEwODM2NzkxOTkyICogYW1vdW50LCAwICogYW1vdW50LCAtMS4zMTYxMzUwNDg4NjYyNzIgKiBhbW91bnQsXG4gICAgICAgIC0zLjIxODQxOTc5MDI2Nzk0NDMgKiBhbW91bnQsIC00LjIzNzUwMzA1MTc1NzgxMjUgKiBhbW91bnQsIDcuNDc2NDQ4MDU5MDgyMDMxICogYW1vdW50LCAwICogYW1vdW50LCAwLjgwNDQ0NTkyMjM3NDcyNTMgKiBhbW91bnQsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBMU0QgZWZmZWN0XG4gKlxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBIb3cgY3JhenkgaXMgeW91ciBlZmZlY3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5sc2QgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMiwgLTAuNCwgMC41LCAwLCAwLFxuICAgICAgICAtMC41LCAyLCAtMC40LCAwLCAwLFxuICAgICAgICAtMC40LCAtMC41LCAzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgb25lXG4gKlxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIGZhbHNlKTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF0cml4IG9mIHRoZSBjb2xvciBtYXRyaXggZmlsdGVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yTWF0cml4RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IFsxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwXVxuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm0udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBsb3dlcnMgdGhlIGNvbG9yIGRlcHRoIG9mIHlvdXIgaW1hZ2UgYnkgdGhlIGdpdmVuIGFtb3VudCwgcHJvZHVjaW5nIGFuIGltYWdlIHdpdGggYSBzbWFsbGVyIHBhbGV0dGUuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yU3RlcEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzdGVwO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGNvbG9yID0gZmxvb3IoY29sb3IgKiBzdGVwKSAvIHN0ZXA7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXA6IHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yU3RlcEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JTdGVwRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBzdGVwcyB0byByZWR1Y2UgdGhlIHBhbGV0dGUgYnkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvclN0ZXBGaWx0ZXIjXG4gICAgICovXG4gICAgc3RlcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbnZvbHV0aW9uRmlsdGVyIGNsYXNzIGFwcGxpZXMgYSBtYXRyaXggY29udm9sdXRpb24gZmlsdGVyIGVmZmVjdC5cbiAqIEEgY29udm9sdXRpb24gY29tYmluZXMgcGl4ZWxzIGluIHRoZSBpbnB1dCBpbWFnZSB3aXRoIG5laWdoYm9yaW5nIHBpeGVscyB0byBwcm9kdWNlIGEgbmV3IGltYWdlLlxuICogQSB3aWRlIHZhcmlldHkgb2YgaW1hZ2UgZWZmZWN0cyBjYW4gYmUgYWNoaWV2ZWQgdGhyb3VnaCBjb252b2x1dGlvbnMsIGluY2x1ZGluZyBibHVycmluZywgZWRnZVxuICogZGV0ZWN0aW9uLCBzaGFycGVuaW5nLCBlbWJvc3NpbmcsIGFuZCBiZXZlbGluZy4gVGhlIG1hdHJpeCBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIFNlZSBodHRwOi8vZG9jcy5naW1wLm9yZy9lbi9wbHVnLWluLWNvbnZtYXRyaXguaHRtbCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICovXG5mdW5jdGlvbiBDb252b2x1dGlvbkZpbHRlcihtYXRyaXgsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyBtZWRpdW1wIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xcbnVuaWZvcm0gZmxvYXQgbWF0cml4WzldO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IGMxMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAtIHRleGVsU2l6ZSk7IC8vIHRvcCBsZWZ0XFxuICAgdmVjNCBjMTIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgY2VudGVyXFxuICAgdmVjNCBjMTMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCByaWdodFxcblxcbiAgIHZlYzQgYzIxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIGxlZnRcXG4gICB2ZWM0IGMyMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7IC8vIG1pZCBjZW50ZXJcXG4gICB2ZWM0IGMyMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCByaWdodFxcblxcbiAgIHZlYzQgYzMxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gbGVmdFxcbiAgIHZlYzQgYzMyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGNlbnRlclxcbiAgIHZlYzQgYzMzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgdGV4ZWxTaXplKTsgLy8gYm90dG9tIHJpZ2h0XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID1cXG4gICAgICAgYzExICogbWF0cml4WzBdICsgYzEyICogbWF0cml4WzFdICsgYzEzICogbWF0cml4WzJdICtcXG4gICAgICAgYzIxICogbWF0cml4WzNdICsgYzIyICogbWF0cml4WzRdICsgYzIzICogbWF0cml4WzVdICtcXG4gICAgICAgYzMxICogbWF0cml4WzZdICsgYzMyICogbWF0cml4WzddICsgYzMzICogbWF0cml4WzhdO1xcblxcbiAgIGdsX0ZyYWdDb2xvci5hID0gYzIyLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWF0cml4OiAgICAgeyB0eXBlOiAnMWZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KSB9LFxuICAgICAgICAgICAgdGV4ZWxTaXplOiAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxIC8gd2lkdGgsIHk6IDEgLyBoZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnZvbHV0aW9uRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb252b2x1dGlvbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnkgPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIENyb3NzIEhhdGNoIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENyb3NzSGF0Y2hGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZmxvYXQgbHVtID0gbGVuZ3RoKHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZC54eSkucmdiKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDEuMCwgMS4wLCAxLjApO1xcblxcbiAgICBpZiAobHVtIDwgMS4wMClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjc1KVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNTApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC4zKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXCJcbiAgICApO1xufVxuXG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDcm9zc0hhdGNoRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDcm9zc0hhdGNoRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIERpc3BsYWNlbWVudEZpbHRlciBjbGFzcyB1c2VzIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHRleHR1cmUgKGNhbGxlZCB0aGUgZGlzcGxhY2VtZW50IG1hcCkgdG8gcGVyZm9ybSBhIGRpc3BsYWNlbWVudCBvZiBhbiBvYmplY3QuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGZpbHRlciB0byBhcHBseSBhbGwgbWFub3Igb2YgY3Jhenkgd2FycGluZyBlZmZlY3RzXG4gKiBDdXJyZW50bHkgdGhlIHIgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHggYW5kIHRoZSBnIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIChtYWtlIHN1cmUgaXRzIGFkZGVkIHRvIHRoZSBzY2VuZSEpXG4gKi9cbmZ1bmN0aW9uIERpc3BsYWNlbWVudEZpbHRlcihzcHJpdGUsIHNjYWxlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG4gICAgc3ByaXRlLnJlbmRlcmFibGUgPSBmYWxzZTtcblxuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZNYXBDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcFNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgbWFwID0gIHRleHR1cmUyRChtYXBTYW1wbGVyLCB2TWFwQ29vcmQpO1xcblxcbiAgIG1hcCAtPSAwLjU7XFxuICAgbWFwLnh5ICo9IHNjYWxlO1xcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyBtYXAueCwgdlRleHR1cmVDb29yZC55ICsgbWFwLnkpKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcFNhbXBsZXI6ICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLnRleHR1cmUgfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9LFxuICAgICAgICAgICAgc2NhbGU6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSwgeTogMSB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcblxuICAgIGlmIChzY2FsZSA9PT0gbnVsbCB8fCBzY2FsZSA9PT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgICAgc2NhbGUgPSAyMDtcbiAgICB9XG5cbiAgICB0aGlzLnNjYWxlID0gbmV3IGNvcmUuUG9pbnQoc2NhbGUsIHNjYWxlKTtcbn1cblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYWNlbWVudEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxhY2VtZW50RmlsdGVyO1xuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS54ID0gdGhpcy5zY2FsZS54ICogKDEvaW5wdXQuZnJhbWUud2lkdGgpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueSA9IHRoaXMuc2NhbGUueSAqICgxL2lucHV0LmZyYW1lLmhlaWdodCk7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gTXVzdCBiZSBwb3dlciBvZiAyIHNpemVkIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5EaXNwbGFjZW1lbnRGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3ZlcyBodHRwOi8vbWF0Z3JvdmVzLmNvbS8gQERvb3JtYXQyM1xuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9mdW4vZG90c2NyZWVuLmpzXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgZG90c2NyZWVuIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0byBiZSBtYWRlIG91dCBvZlxuICogYmxhY2sgYW5kIHdoaXRlIGhhbGZ0b25lIGRvdHMgbGlrZSBhbiBvbGQgcHJpbnRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRG90U2NyZWVuRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG5cXG5mbG9hdCBwYXR0ZXJuKClcXG57XFxuICAgZmxvYXQgcyA9IHNpbihhbmdsZSksIGMgPSBjb3MoYW5nbGUpO1xcbiAgIHZlYzIgdGV4ID0gdlRleHR1cmVDb29yZCAqIGRpbWVuc2lvbnMueHk7XFxuICAgdmVjMiBwb2ludCA9IHZlYzIoXFxuICAgICAgIGMgKiB0ZXgueCAtIHMgKiB0ZXgueSxcXG4gICAgICAgcyAqIHRleC54ICsgYyAqIHRleC55XFxuICAgKSAqIHNjYWxlO1xcbiAgIHJldHVybiAoc2luKHBvaW50LngpICogc2luKHBvaW50LnkpKSAqIDQuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhhdmVyYWdlICogMTAuMCAtIDUuMCArIHBhdHRlcm4oKSksIGNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNjYWxlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvdFNjcmVlbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRG90U2NyZWVuRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIHNjYWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHJhZGl1cyBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWVRpbnRGaWx0ZXIgYXBwbGllcyBhIHZlcnRpY2FsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWVRpbnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbitvZmZzZXQpLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IHN1bSA9IHZlYzQoMC4wKTtcXG5cXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLnJnYiAqIHN1bS5hICogYWxwaGEsIHN1bS5hICogYWxwaGEgKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSAvIDUxMiB9LFxuICAgICAgICAgICAgY29sb3I6IHsgdHlwZTogJ2MnLCB2YWx1ZTogWzAsMCwwXX0sXG4gICAgICAgICAgICBhbHBoYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC43IH0sXG4gICAgICAgICAgICBvZmZzZXQ6IHsgdHlwZTogJzJmJywgdmFsdWU6WzUsIDVdfSxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOjF9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllUaW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWVRpbnRGaWx0ZXI7XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIGNsZWFyKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWVRpbnRGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllUaW50RmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWVRpbnRGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgRHJvcFNoYWRvd0ZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEcm9wU2hhZG93RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIgPSBuZXcgQmx1cllUaW50RmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgdGhpcy5wYWRkaW5nID0gMzA7XG5cbiAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9hbmdsZSA9IDQ1ICogTWF0aC5QSSAvIDE4MDtcbiAgICB0aGlzLl9kaXN0YW5jZSA9IDEwO1xuICAgIHRoaXMuYWxwaGEgPSAwLjc1O1xuICAgIHRoaXMuaGlkZU9iamVjdCA9IGZhbHNlO1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5NVUxUSVBMWTtcbn1cblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRHJvcFNoYWRvd0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRHJvcFNoYWRvd0ZpbHRlcjtcblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIGlmKHRoaXMuX2RpcnR5UG9zaXRpb24pXG4gICAge1xuICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzBdID0gTWF0aC5zaW4odGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVsxXSA9IE1hdGguY29zKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUodGhpcy5ibGVuZE1vZGUpO1xuXG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIGlmKCF0aGlzLmhpZGVPYmplY3QpXG4gICAge1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG4gICAgfVxuXG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBjb2xvcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgY29yZS51dGlscy5yZ2IyaGV4KCB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgPSBjb3JlLnV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYWxwaGE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXN0YW5jZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGRpc3RhbmNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9hbmdsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fYW5nbGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBncmV5c2NhbGVzIHRoZSBwYWxldHRlIG9mIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBHcmF5RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JheTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIHZlYzMoMC4yMTI2KmdsX0ZyYWdDb2xvci5yICsgMC43MTUyKmdsX0ZyYWdDb2xvci5nICsgMC4wNzIyKmdsX0ZyYWdDb2xvci5iKSwgZ3JheSk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXk6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuR3JheUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkdyYXlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JheUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JheUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR3JheUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXkuIDEgd2lsbCBtYWtlIHRoZSBvYmplY3QgYmxhY2sgYW5kIHdoaXRlLCAwIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5HcmF5RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYXk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGZpbHRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmZpbHRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXNjaWlGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2FzY2lpL0FzY2lpRmlsdGVyJyksXG4gICAgQmxvb21GaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2Jsb29tL0Jsb29tRmlsdGVyJyksXG4gICAgQmx1ckZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckZpbHRlcicpLFxuICAgIEJsdXJYRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1cllGaWx0ZXInKSxcbiAgICBCbHVyRGlyRmlsdGVyOiAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRGlyRmlsdGVyJyksXG4gICAgQ29sb3JNYXRyaXhGaWx0ZXI6ICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yTWF0cml4RmlsdGVyJyksXG4gICAgQ29sb3JTdGVwRmlsdGVyOiAgICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yU3RlcEZpbHRlcicpLFxuICAgIENvbnZvbHV0aW9uRmlsdGVyOiAgcmVxdWlyZSgnLi9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlcicpLFxuICAgIENyb3NzSGF0Y2hGaWx0ZXI6ICAgcmVxdWlyZSgnLi9jcm9zc2hhdGNoL0Nyb3NzSGF0Y2hGaWx0ZXInKSxcbiAgICBEaXNwbGFjZW1lbnRGaWx0ZXI6IHJlcXVpcmUoJy4vZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlcicpLFxuICAgIERvdFNjcmVlbkZpbHRlcjogICAgcmVxdWlyZSgnLi9kb3QvRG90U2NyZWVuRmlsdGVyJyksXG4gICAgR3JheUZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2dyYXkvR3JheUZpbHRlcicpLFxuICAgIERyb3BTaGFkb3dGaWx0ZXI6ICAgcmVxdWlyZSgnLi9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXInKSxcbiAgICBJbnZlcnRGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vaW52ZXJ0L0ludmVydEZpbHRlcicpLFxuICAgIE5vaXNlRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ub2lzZS9Ob2lzZUZpbHRlcicpLFxuICAgIFBpeGVsYXRlRmlsdGVyOiAgICAgcmVxdWlyZSgnLi9waXhlbGF0ZS9QaXhlbGF0ZUZpbHRlcicpLFxuICAgIFJHQlNwbGl0RmlsdGVyOiAgICAgcmVxdWlyZSgnLi9yZ2IvUkdCU3BsaXRGaWx0ZXInKSxcbiAgICBTaG9ja3dhdmVGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vc2hvY2t3YXZlL1Nob2Nrd2F2ZUZpbHRlcicpLFxuICAgIFNlcGlhRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9zZXBpYS9TZXBpYUZpbHRlcicpLFxuICAgIFNtYXJ0Qmx1ckZpbHRlcjogICAgcmVxdWlyZSgnLi9ibHVyL1NtYXJ0Qmx1ckZpbHRlcicpLFxuICAgIFRpbHRTaGlmdEZpbHRlcjogICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyJyksXG4gICAgVHdpc3RGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3R3aXN0L1R3aXN0RmlsdGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGludmVydHMgeW91ciBEaXNwbGF5IE9iamVjdHMgY29sb3JzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBJbnZlcnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gZmxvYXQgaW52ZXJ0O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggKHZlYzMoMSktZ2xfRnJhZ0NvbG9yLnJnYikgKiBnbF9GcmFnQ29sb3IuYSwgZ2xfRnJhZ0NvbG9yLnJnYiwgMS4wIC0gaW52ZXJ0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBpbnZlcnQ6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludmVydEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gSW52ZXJ0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhJbnZlcnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBpbnZlcnQuIGAxYCB3aWxsIGZ1bGx5IGludmVydCB0aGUgY29sb3JzLCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkludmVydEZpbHRlciNcbiAgICAgKi9cbiAgICBpbnZlcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9hZGp1c3Qvbm9pc2UuanNcbiAqL1xuXG4vKipcbiAqIEEgTm9pc2UgZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gTm9pc2VGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgbm9pc2U7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgcmFuZCh2ZWMyIGNvKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoY28ueHksIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZmxvYXQgZGlmZiA9IChyYW5kKHZUZXh0dXJlQ29vcmQpIC0gMC41KSAqIG5vaXNlO1xcblxcbiAgICBjb2xvci5yICs9IGRpZmY7XFxuICAgIGNvbG9yLmcgKz0gZGlmZjtcXG4gICAgY29sb3IuYiArPSBkaWZmO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBub2lzZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbk5vaXNlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuTm9pc2VGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTm9pc2VGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE5vaXNlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2lzZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIG5vaXNlIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuTm9pc2VGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMC41XG4gICAgICovXG4gICAgbm9pc2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHBpeGVsYXRlIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciAnYmxvY2t5Jy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUGl4ZWxhdGVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZDtcXG5cXG4gICAgdmVjMiBzaXplID0gZGltZW5zaW9ucy54eSAvIHBpeGVsU2l6ZTtcXG5cXG4gICAgdmVjMiBjb2xvciA9IGZsb29yKCAoIHZUZXh0dXJlQ29vcmQgKiBzaXplICkgKSAvIHNpemUgKyBwaXhlbFNpemUvZGltZW5zaW9ucy54eSAqIDAuNTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb2xvcik7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgICB2YWx1ZTogeyB4OiAxMCwgeTogMTAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBpeGVsYXRlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBQaXhlbGF0ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBhIHBvaW50IHRoYXQgZGVzY3JpYmVzIHRoZSBzaXplIG9mIHRoZSBibG9ja3MuXG4gICAgICogeCBpcyB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGFuZCB5IGlzIHRoZSBoZWlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUGl4ZWxhdGVGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEFuIFJHQiBTcGxpdCBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFJHQlNwbGl0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcmVkO1xcbnVuaWZvcm0gdmVjMiBncmVlbjtcXG51bmlmb3JtIHZlYzIgYmx1ZTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yLnIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyByZWQvZGltZW5zaW9ucy54eSkucjtcXG4gICBnbF9GcmFnQ29sb3IuZyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGdyZWVuL2RpbWVuc2lvbnMueHkpLmc7XFxuICAgZ2xfRnJhZ0NvbG9yLmIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBibHVlL2RpbWVuc2lvbnMueHkpLmI7XFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgZ3JlZW46ICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAtMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGJsdWU6ICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IC0yMCB9IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUkdCU3BsaXRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFJHQlNwbGl0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSR0JTcGxpdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBSZWQgY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgcmVkOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yZWQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmVlbiBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmVlbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEJsdWUgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgYXBwbGllcyBhIHNlcGlhIGVmZmVjdCB0byB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2VwaWFGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc2VwaWE7XFxuXFxuY29uc3QgbWF0MyBzZXBpYU1hdHJpeCA9IG1hdDMoMC4zNTg4LCAwLjcwNDQsIDAuMTM2OCwgMC4yOTkwLCAwLjU4NzAsIDAuMTE0MCwgMC4yMzkyLCAwLjQ2OTYsIDAuMDkxMik7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZ2xfRnJhZ0NvbG9yLnJnYiAqIHNlcGlhTWF0cml4LCBzZXBpYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2VwaWE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2VwaWFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TZXBpYUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXBpYUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2VwaWFGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNlcGlhRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgc2VwaWEuIGAxYCB3aWxsIGFwcGx5IHRoZSBmdWxsIHNlcGlhIGVmZmVjdCwgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TZXBpYUZpbHRlciNcbiAgICAgKi9cbiAgICBzZXBpYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA0eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTaG9ja3dhdmVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XFxudW5pZm9ybSB2ZWMzIHBhcmFtczsgLy8gMTAuMCwgMC44LCAwLjFcXG51bmlmb3JtIGZsb2F0IHRpbWU7XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSB2VGV4dHVyZUNvb3JkO1xcbiAgICB2ZWMyIHRleENvb3JkID0gdXY7XFxuXFxuICAgIGZsb2F0IGRpc3QgPSBkaXN0YW5jZSh1diwgY2VudGVyKTtcXG5cXG4gICAgaWYgKCAoZGlzdCA8PSAodGltZSArIHBhcmFtcy56KSkgJiYgKGRpc3QgPj0gKHRpbWUgLSBwYXJhbXMueikpIClcXG4gICAge1xcbiAgICAgICAgZmxvYXQgZGlmZiA9IChkaXN0IC0gdGltZSk7XFxuICAgICAgICBmbG9hdCBwb3dEaWZmID0gMS4wIC0gcG93KGFicyhkaWZmKnBhcmFtcy54KSwgcGFyYW1zLnkpO1xcblxcbiAgICAgICAgZmxvYXQgZGlmZlRpbWUgPSBkaWZmICAqIHBvd0RpZmY7XFxuICAgICAgICB2ZWMyIGRpZmZVViA9IG5vcm1hbGl6ZSh1diAtIGNlbnRlcik7XFxuICAgICAgICB0ZXhDb29yZCA9IHV2ICsgKGRpZmZVViAqIGRpZmZUaW1lKTtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHRleENvb3JkKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBjZW50ZXI6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9LFxuICAgICAgICAgICAgcGFyYW1zOiB7IHR5cGU6ICd2MycsIHZhbHVlOiB7IHg6IDEwLCB5OiAwLjgsIHo6IDAuMSB9IH0sXG4gICAgICAgICAgICB0aW1lOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaG9ja3dhdmVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNob2Nrd2F2ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNlbnRlciBvZiB0aGUgc2hvY2t3YXZlIGluIG5vcm1hbGl6ZWQgc2NyZWVuIGNvb3Jkcy4gVGhhdCBpc1xuICAgICAqICgwLDApIGlzIHRoZSB0b3AtbGVmdCBhbmQgKDEsMSkgaXMgdGhlIGJvdHRvbSByaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgY2VudGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGFyYW1zIG9mIHRoZSBzaG9ja3dhdmUuIFRoZXNlIG1vZGlmeSB0aGUgbG9vayBhbmQgYmVoYXZpb3Igb2ZcbiAgICAgKiB0aGUgc2hvY2t3YXZlIGFzIGl0IHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIHNob2Nrd2F2ZS4gVGhpcyBjb250cm9scyB0aGUgc3BlZWQgYXQgd2hpY2hcbiAgICAgKiB0aGUgc2hvY2t3YXZlIHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHRpbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRBeGlzRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRBeGlzRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGJsdXI7XFxudW5pZm9ybSBmbG9hdCBncmFkaWVudEJsdXI7XFxudW5pZm9ybSB2ZWMyIHN0YXJ0O1xcbnVuaWZvcm0gdmVjMiBlbmQ7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcbnVuaWZvcm0gdmVjMiB0ZXhTaXplO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcbiAgICB2ZWMyIG5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMyKHN0YXJ0LnkgLSBlbmQueSwgZW5kLnggLSBzdGFydC54KSk7XFxuICAgIGZsb2F0IHJhZGl1cyA9IHNtb290aHN0ZXAoMC4wLCAxLjAsIGFicyhkb3QodlRleHR1cmVDb29yZCAqIHRleFNpemUgLSBzdGFydCwgbm9ybWFsKSkgLyBncmFkaWVudEJsdXIpICogYmx1cjtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgLyB0ZXhTaXplICogcGVyY2VudCAqIHJhZGl1cyk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6ICAgICAgICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxMDAgfSxcbiAgICAgICAgICAgIGdyYWRpZW50Qmx1cjogICB7IHR5cGU6ICcxZicsIHZhbHVlOiA2MDAgfSxcbiAgICAgICAgICAgIHN0YXJ0OiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAsICAgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZW5kOiAgICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogNjAwLCAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBkZWx0YTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAzMCwgICB5OiAzMCB9IH0sXG4gICAgICAgICAgICB0ZXhTaXplOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiB3aW5kb3cuaW5uZXJXaWR0aCwgeTogd2luZG93LmlubmVySGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbn1cblxuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICogVGhpcyBpcyBvdmVycmlkZGVuIGluIHRoZSBYIGFuZCBZIGZpbHRlcnMsIGRvZXMgbm90aGluZyBmb3IgdGhpcyBjbGFzcy5cbiAqXG4gKi9cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAwO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IDA7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WUZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnQgRmlsdGVyLiBNYW5hZ2VzIHRoZSBwYXNzIG9mIGJvdGggYSBUaWx0U2hpZnRYRmlsdGVyIGFuZCBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlciA9IG5ldyBUaWx0U2hpZnRYRmlsdGVyKCk7XG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyID0gbmV3IFRpbHRTaGlmdFlGaWx0ZXIoKTtcbn1cblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0RmlsdGVyO1xuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ncmFkaWVudEJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5zdGFydCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5lbmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRYRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gZHggLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR5IC8gZDtcbn07XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFlGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WUZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAtZHkgLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR4IC8gZDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgdHdpc3QgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHR3aXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVHdpc3RGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgLSBvZmZzZXQ7XFxuICAgZmxvYXQgZGlzdCA9IGxlbmd0aChjb29yZCk7XFxuXFxuICAgaWYgKGRpc3QgPCByYWRpdXMpXFxuICAge1xcbiAgICAgICBmbG9hdCByYXRpbyA9IChyYWRpdXMgLSBkaXN0KSAvIHJhZGl1cztcXG4gICAgICAgZmxvYXQgYW5nbGVNb2QgPSByYXRpbyAqIHJhdGlvICogYW5nbGU7XFxuICAgICAgIGZsb2F0IHMgPSBzaW4oYW5nbGVNb2QpO1xcbiAgICAgICBmbG9hdCBjID0gY29zKGFuZ2xlTW9kKTtcXG4gICAgICAgY29vcmQgPSB2ZWMyKGNvb3JkLnggKiBjIC0gY29vcmQueSAqIHMsIGNvb3JkLnggKiBzICsgY29vcmQueSAqIGMpO1xcbiAgIH1cXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkK29mZnNldCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBvZmZzZXQ6ICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuVHdpc3RGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ud2lzdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUd2lzdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVHdpc3RGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFR3aXN0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgZGVzY3JpYmVzIHRoZSB0aGUgb2Zmc2V0IG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcmFkaXVzIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIHJhZGl1czoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBhbmdsZSBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvLyBydW4gdGhlIHBvbHlmaWxsc1xucmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbi8vIGFkZCBjb3JlIHBsdWdpbnMuXG5jb3JlLmV4dHJhcyAgICAgICAgID0gcmVxdWlyZSgnLi9leHRyYXMnKTtcbmNvcmUuZmlsdGVycyAgICAgICAgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcbmNvcmUuaW50ZXJhY3Rpb24gICAgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9uJyk7XG5jb3JlLmxvYWRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9sb2FkZXJzJyk7XG5jb3JlLm1lc2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9tZXNoJyk7XG5jb3JlLmFjY2Vzc2liaWxpdHkgID0gcmVxdWlyZSgnLi9hY2Nlc3NpYmlsaXR5Jyk7XG5cbi8vIGV4cG9ydCBhIHByZW1hZGUgbG9hZGVyIGluc3RhbmNlXG4vKipcbiAqIEEgcHJlbWFkZSBpbnN0YW5jZSBvZiB0aGUgbG9hZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZGVyIHJlc291cmNlcy5cbiAqXG4gKiBAbmFtZSBsb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcHJvcGVydHkge1BJWEkubG9hZGVycy5Mb2FkZXJ9XG4gKi9cbmNvcmUubG9hZGVyID0gbmV3IGNvcmUubG9hZGVycy5Mb2FkZXIoKTtcblxuLy8gbWl4aW4gdGhlIGRlcHJlY2F0aW9uIGZlYXR1cmVzLlxuT2JqZWN0LmFzc2lnbihjb3JlLCByZXF1aXJlKCcuL2RlcHJlY2F0aW9uJykpO1xuXG4vLyBBbHdheXMgZXhwb3J0IHBpeGkgZ2xvYmFsbHkuXG5nbG9iYWwuUElYSSA9IGNvcmU7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBIb2xkcyBhbGwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhbiBJbnRlcmFjdGlvbiBldmVudFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25EYXRhKClcbntcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IHN0b3JlcyB0aGUgZ2xvYmFsIGNvb3JkcyBvZiB3aGVyZSB0aGUgdG91Y2gvbW91c2UgZXZlbnQgaGFwcGVuZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5nbG9iYWwgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBTcHJpdGUgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBhc3NlZCB0byBhbiBldmVudCBoYW5kbGVyLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbmFsIERPTSBFdmVudCB0aGF0IHdhcyBjYXB0dXJlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gbnVsbDtcbn1cblxuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25EYXRhO1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBzcGVjaWZpZWQgZGlzcGxheU9iamVjdCBmb3IgdGhpcyBJbnRlcmFjdGlvbkRhdGFcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSBsb2NhbCBjb29yZHMgb2ZmXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IHBvaW50KVxuICogQHBhcmFtIFtnbG9iYWxQb3NdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHlvdXIgY3VzdG9tIGdsb2JhbCBjb29yZHMsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCB1c2UgdGhlIGN1cnJlbnQgZ2xvYmFsIGNvb3JkcylcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEludGVyYWN0aW9uRGF0YSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgRGlzcGxheU9iamVjdFxuICovXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmdldExvY2FsUG9zaXRpb24gPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcG9pbnQsIGdsb2JhbFBvcylcbntcbiAgICByZXR1cm4gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UoZ2xvYmFsUG9zIHx8IHRoaXMuZ2xvYmFsLCBwb2ludCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgSW50ZXJhY3Rpb25EYXRhID0gcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKTtcblxuLy8gTWl4IGludGVyYWN0aXZlVGFyZ2V0IGludG8gY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZVxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxuKTtcblxuLyoqXG4gKiBUaGUgaW50ZXJhY3Rpb24gbWFuYWdlciBkZWFscyB3aXRoIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuIEFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBpbnRlcmFjdGl2ZVxuICogaWYgaXRzIGludGVyYWN0aXZlIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZVxuICogVGhpcyBtYW5hZ2VyIGFsc28gc3VwcG9ydHMgbXVsdGl0b3VjaC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdD10cnVlXSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBtYW5hZ2VyIGF1dG9tYXRpY2FsbHkgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeT0xMF0ge251bWJlcn0gRnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyLCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgaW50ZXJhY3Rpb24gbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGJlIHByZXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0ID0gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0IDogdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFzIHRoaXMgZnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZCBtb3JlIG9mdGVuLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSA9IG9wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW91c2UgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9XG4gICAgICovXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IGRhdGEgb2JqZWN0IHRvIGhhbmRsZSBhbGwgdGhlIGV2ZW50IHRyYWNraW5nL2Rpc3BhdGNoaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5ldmVudERhdGEgPSB7XG4gICAgICAgIHN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgIGRhdGE6IHRoaXMubW91c2UsXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGxpdHRsZSBpbnRlcmFjdGl2ZURhdGEgcG9vbCAhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YVtdfVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBlbGVtZW50IHRvIGJpbmQgdG8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhhdmUgZXZlbnRzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGRvbSBlbGVtZW50P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcblxuICAgIC8vdGhpcyB3aWxsIG1ha2UgaXQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGJpbmQgYWxsIHRoZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VVcCA9IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IHRoaXMucHJvY2Vzc01vdXNlVXAuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IHRoaXMucHJvY2Vzc01vdXNlRG93bi5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gdGhpcy5wcm9jZXNzTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU91dCA9IHRoaXMub25Nb3VzZU91dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gdGhpcy5vblRvdWNoU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gdGhpcy5wcm9jZXNzVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoRW5kID0gdGhpcy5vblRvdWNoRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSB0aGlzLnByb2Nlc3NUb3VjaEVuZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IHRoaXMub25Ub3VjaE1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSB0aGlzLnByb2Nlc3NUb3VjaE1vdmUuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxhc3QgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNzcyBzdHlsZSBvZiB0aGUgY3Vyc29yIHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9ICdpbmhlcml0JztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNhY2hlZCB2YXJcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcblxuICAgIHRoaXMuc2V0VGFyZ2V0RWxlbWVudCh0aGlzLnJlbmRlcmVyLnZpZXcsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbik7XG59XG5cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UvdG91Y2ggZXZlbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZVxuICogb3RoZXIgRE9NIGVsZW1lbnRzIG9uIHRvcCBvZiB0aGUgcmVuZGVyZXJzIENhbnZhcyBlbGVtZW50LiBXaXRoIHRoaXMgeW91J2xsIGJlIGJhbGUgdG8gZGVsZXRlZ2F0ZVxuICogYW5vdGhlciBET00gZWxlbWVudCB0byByZWNlaXZlIHRob3NlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9IHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUSGUgcmVzb2x1dGlvbiBvZiB0aGUgbmV3IGVsZW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBjYW52YXMpLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXRUYXJnZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJlc29sdXRpb24pXG57XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgdGhlIERPTSBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAgICB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgICB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICAgICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICAgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgICAgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgICAgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgdGhlIERPTSBldmVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICcnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzLlxuICogSW52b2tlZCBieSBhIHRocm90dGxlZCB0aWNrZXIgdXBkYXRlIGZyb21cbiAqIHtAbGluayBQSVhJLnRpY2tlci5zaGFyZWR9LlxuICpcbiAqIEBwYXJhbSBkZWx0YVRpbWUge251bWJlcn1cbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHRoaXMuX2RlbHRhVGltZSArPSBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZGVsdGFUaW1lIDwgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWx0YVRpbWUgPSAwO1xuXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBtb3ZlIHRoZSBtb3VzZSB0aGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gZGZvbmUgdXNpbmcgdGhlIG1vdXNlIG1vdmUhXG4gICAgaWYodGhpcy5kaWRNb3ZlKVxuICAgIHtcbiAgICAgICAgdGhpcy5kaWRNb3ZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ET1xufTtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgZGlzcGxheSBvYmplY3QgaW4gcXVlc3Rpb25cbiAqIEBwYXJhbSBldmVudFN0cmluZyB7c3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGUuZywgbW91c2Vkb3duKVxuICogQHBhcmFtIGV2ZW50RGF0YSB7b2JqZWN0fSB0aGUgZXZlbnQgZGF0YSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApXG57XG4gICAgaWYoIWV2ZW50RGF0YS5zdG9wcGVkKVxuICAgIHtcbiAgICAgICAgZXZlbnREYXRhLnRhcmdldCA9IGRpc3BsYXlPYmplY3Q7XG4gICAgICAgIGV2ZW50RGF0YS50eXBlID0gZXZlbnRTdHJpbmc7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5lbWl0KCBldmVudFN0cmluZywgZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10oIGV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXBzIHggYW5kIHkgY29vcmRzIGZyb20gYSBET00gb2JqZWN0IGFuZCBtYXBzIHRoZW0gY29ycmVjdGx5IHRvIHRoZSBwaXhpIHZpZXcuIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBwb2ludC5cbiAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgdGhlIERPTSBlbGVtZW50IGNvdWxkIGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCBhbnl3aGVyZSBvbiB0aGUgc2NyZWVuLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW5cbiAqIEBwYXJhbSAge251bWJlcn0geCAgICAgdGhlIHggY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICogQHBhcmFtICB7bnVtYmVyfSB5ICAgICB0aGUgeSBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUubWFwUG9zaXRpb25Ub1BvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgeCwgeSApXG57XG4gICAgdmFyIHJlY3QgPSB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBwb2ludC54ID0gKCAoIHggLSByZWN0LmxlZnQgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC53aWR0aCAgLyByZWN0LndpZHRoICApICkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgcG9pbnQueSA9ICggKCB5IC0gcmVjdC50b3AgICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuaGVpZ2h0IC8gcmVjdC5oZWlnaHQgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVzIGEgbmVhdCB3YXkgb2YgY3Jhd2xpbmcgdGhyb3VnaCB0aGUgc2NlbmUgZ3JhcGggYW5kIHJ1bm5pbmcgYSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gYWxsIGludGVyYWN0aXZlIG9iamVjdHMgaXQgZmluZHMuXG4gKiBJdCB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIGhpdCB0ZXN0aW5nIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlIGhpdCBhY3Jvc3MgaW4gdGhlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IGlzIHRlc3RlZCBmb3IgY29sbGlzaW9uXG4gKiBAcGFyYW0gIHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IGRpc3BsYXlPYmplY3QgdGhlIGRpc3BsYXlPYmplY3QgdGhhdCB3aWxsIGJlIGhpdCB0ZXN0IChyZWN1cmNzaXZseSBjcmF3bHMgaXRzIGNoaWxkcmVuKVxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBpbnRlcmFjdGl2ZSBvYmplY3QuIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBoaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtib29sZWFufSBoaXRUZXN0IHRoaXMgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3RzIGluc2lkZSBzaG91bGQgYmUgaGl0IHRlc3QgYWdhaW5zdCB0aGUgcG9pbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiB0aGUgZGlzcGxheU9iamVjdCBoaXQgdGhlIHBvaW50XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0ludGVyYWN0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBkaXNwbGF5T2JqZWN0LCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZSlcbntcbiAgICBpZighZGlzcGxheU9iamVjdCB8fCAhZGlzcGxheU9iamVjdC52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRvb2sgYSBsaXR0bGUgd2hpbGUgdG8gcmV3b3JrIHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5ISBCdXQgbm93IGl0IGlzIGRvbmUgYW5kIG5pY2UgYW5kIG9wdGltaXNlZC4gXl9eXG4gICAgLy8gXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdyBsb29wIHRocm91Z2ggYWxsIG9iamVjdHMgYW5kIHRoZW4gb25seSBoaXQgdGVzdCB0aGUgb2JqZWN0cyBpdCBIQVMgdG8sIG5vdCBhbGwgb2YgdGhlbS4gTVVDSCBmYXN0ZXIuLlxuICAgIC8vIEFuIG9iamVjdCB3aWxsIGJlIGhpdCB0ZXN0IGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICAvLyBcbiAgICAvLyAxOiBJdCBpcyBpbnRlcmFjdGl2ZS5cbiAgICAvLyAyOiBJdCBiZWxvbmdzIHRvIGEgcGFyZW50IHRoYXQgaXMgaW50ZXJhY3RpdmUgQU5EIG9uZSBvZiB0aGUgcGFyZW50cyBjaGlsZHJlbiBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIC8vIFxuICAgIC8vIEFzIGFub3RoZXIgbGl0dGxlIG9wdGltaXNhdGlvbiBvbmNlIGFuIGludGVyYWN0aXZlIG9iamVjdCBoYXMgYmVlbiBoaXQgd2UgY2FuIGNhcnJ5IG9uIHRocm91Z2ggdGhlIHNjZW5lZ3JhcGgsIGJ1dCB3ZSBrbm93IHRoYXQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGhpdHMhIFNvIHdlIGNhbiBhdm9pZCBleHRyYSBoaXQgdGVzdHNcbiAgICAvLyBBIGZpbmFsIG9wdGltaXNhdGlvbiBpcyB0aGF0IGFuIG9iamVjdCBpcyBub3QgaGl0IHRlc3QgZGlyZWN0bHkgaWYgYSBjaGlsZCBoYXMgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICBcbiAgICB2YXIgaGl0ID0gZmFsc2UsXG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gaW50ZXJhY3RpdmUgPSBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlIHx8IGludGVyYWN0aXZlO1xuXG4gICAgLy8gaWYgdGhlIGRpc3BsYXlvYmplY3QgaGFzIGEgaGl0QXJlYSwgdGhlbiBpdCBkb2VzIG5vdCBuZWVkIHRvIGhpdFRlc3QgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAqKiBGUkVFIFRJUCAqKiEgSWYgYW4gb2JqZWN0IGlzIG5vdCBpbnRlcmFjdHRpdmUgb3IgaGFzIG5vIGJ1dHRvbnMgaW4gaXQgKHN1Y2ggYXMgYSBnYW1lIHNjZW5lISkgc2V0IGludGVyYWN0aXZlQ2hpbGRyZW4gdG8gZmFsc2UgZm9yIHRoYXQgZGlzcGxheU9iamVjdC5cbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgcGl4aSB0byBjb21wbGV0bHkgaWdub3JlIGFuZCBieXBhc3MgY2hlY2tpbmcgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmVDaGlsZHJlbilcbiAgICB7ICAgICAgIFxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aC0xOyBpID49IDA7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGltZSB0byBnZXQgcmVjdXJzaXZlLi4gaWYgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpZiBzb210aGluZyBpcyBoaXQuLlxuICAgICAgICAgICAgaWYoIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHBvaW50LCBjaGlsZHJlbltpXSwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmVQYXJlbnQpIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55IG1vcmUgb2JqZWN0cyBpbiB0aGlzIGNvbnRhaW5lciBhcyB3ZSB3ZSBub3cga25vdyB0aGUgcGFyZW50IGhhcyBiZWVuIGhpdFxuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGludGVyYWN0aXZlICwgdGhhdCBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGl0IHdhcyBhY3R1YWxseSBpbnRlcmFjdGl2ZSBhbmQgbm90IGp1c3QgdGhlIGNoaWxkIG9mIGFuIGludGVyYWN0aXZlIG9iamVjdC4gXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnl0aGluZyBlbHNlLiBXZSBzdGlsbCBuZWVkIHRvIHJ1biB0aHJvdWdoIGFsbCBvYmplY3RzLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBoaXQgdGVzdHMuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uaW50ZXJhY3RpdmUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoaXRUZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm8gcG9pbnQgcnVubmluZyB0aGlzIGlmIHRoZSBpdGVtIGlzIG5vdCBpbnRlcmFjdGl2ZSBvciBkb2VzIG5vdCBoYXZlIGFuIGludGVyYWN0aXZlIHBhcmVudC5cbiAgICBpZihpbnRlcmFjdGl2ZSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBoaXQgdGVzdGluZyAoYXMgaW4gd2UgaGF2ZSBubyBoaXQgYW55IG9iamVjdHMgeWV0KVxuICAgICAgICAvLyBXZSBhbHNvIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGl0IHRlc3RpbmcgaWYgb25jZSBvZiB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4gaGFzIGFscmVhZHkgYmVlbiBoaXQhXG4gICAgICAgIGlmKGhpdFRlc3QgJiYgIWhpdClcbiAgICAgICAgeyAgXG4gICAgICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0aGlzLl90ZW1wUG9pbnQpO1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuaGl0QXJlYS5jb250YWlucyggdGhpcy5fdGVtcFBvaW50LngsIHRoaXMuX3RlbXBQb2ludC55ICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnVuYyhkaXNwbGF5T2JqZWN0LCBoaXQpOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIFxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyBwcmVzc2VkIGRvd25cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZURvd24sIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIGRvd24gY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VEb3duID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuICAgIFxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3RbIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bicgXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGRvd24nIDogJ21vdXNlZG93bicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcmVsZWFzZWRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VVcCwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgdXAgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlVXAgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG4gICAgdmFyIGlzRG93biA9ICBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXAnIDogJ21vdXNldXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRjbGljaycgOiAnY2xpY2snLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cG91dHNpZGUnIDogJ21vdXNldXBvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiB0aGUgbW91c2UgbW92aW5nXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmRpZE1vdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU1vdmUsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE8gQlVHIGZvciBwYXJlbnRzIGluZXJhY3RpdmUgb2JqZWN0IChib3JkZXIgb3JkZXIgaXNzdWUpXG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2Vtb3ZlJywgdGhpcy5ldmVudERhdGEpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dChkaXNwbGF5T2JqZWN0LCBoaXQpO1xufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYmVpbmcgbW92ZWQgb3V0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICAvLyBUT0RPIG9wdGltaXplIGJ5IG5vdCBjaGVjayBFVkVSWSBUSU1FISBtYXliZSBoYWxmIGFzIG9mdGVuPyAvL1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgZmFsc2UgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG92ZXIvb3V0IGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgaWYoIWRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5T2JqZWN0LmJ1dHRvbk1vZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gZGlzcGxheU9iamVjdC5kZWZhdWx0Q3Vyc29yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgdGhpcy5ldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgc3RhcnRlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBzdGFydGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG4gICAgICAgIC8vVE9ETyBQT09MXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaFN0YXJ0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoc3RhcnQnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGVuZHMgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggZW5kaW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIC8vVE9ETyB0aGlzIHNob3VsZCBiZSBwYXNzZWQgYWxvbmcuLiBubyBzZXRcbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hFbmQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgZW5kIG9mIGEgdG91Y2ggYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoRW5kID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0YXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgbW92ZWQgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIG1vdmluZyBhY3Jvc3MgdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaE1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaGl0ID0gaGl0O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNobW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogR3JhYnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaEV2ZW50IHtFdmVudERhdGF9IFRoZSB0b3VjaCBldmVudCB3ZSBuZWVkIHRvIHBhaXIgd2l0aCBhbiBpbnRlcmFjdGlvbkRhdGEgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRUb3VjaERhdGEgPSBmdW5jdGlvbiAodG91Y2hFdmVudClcbntcbiAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnBvcCgpO1xuXG4gICAgaWYoIXRvdWNoRGF0YSlcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcbiAgICB9XG5cbiAgICB0b3VjaERhdGEuaWRlbnRpZmllciA9IHRvdWNoRXZlbnQuaWRlbnRpZmllcjtcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdG91Y2hEYXRhLmdsb2JhbCwgdG91Y2hFdmVudC5jbGllbnRYLCB0b3VjaEV2ZW50LmNsaWVudFkgKTtcblxuICAgIGlmKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC54ID0gdG91Y2hEYXRhLmdsb2JhbC54IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnkgPSB0b3VjaERhdGEuZ2xvYmFsLnkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgfVxuXG4gICAgdG91Y2hFdmVudC5nbG9iYWxYID0gdG91Y2hEYXRhLmdsb2JhbC54O1xuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWSA9IHRvdWNoRGF0YS5nbG9iYWwueTtcblxuICAgIHJldHVybiB0b3VjaERhdGE7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hEYXRhIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX0gVGhlIHRvdWNoIGRhdGEgb2JqZWN0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5Ub3VjaERhdGEgPSBmdW5jdGlvbiAoIHRvdWNoRGF0YSApXG57XG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnB1c2goIHRvdWNoRGF0YSApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgaW50ZXJhY3Rpb24gbWFuYWdlclxuICpcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMubW91c2UgPSBudWxsO1xuXG4gICAgdGhpcy5ldmVudERhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZVVwID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gbnVsbDtcblxuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaEVuZCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMuX3RlbXBQb2ludCA9IG51bGw7XG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGludGVyYWN0aW9ucyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSW50ZXJhY3Rpb25EYXRhOiAgICByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpLFxuICAgIEludGVyYWN0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9JbnRlcmFjdGlvbk1hbmFnZXInKSxcbiAgICBpbnRlcmFjdGl2ZVRhcmdldDogIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxufTtcbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgaW50ZXJhY3RpdmUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmludGVyYWN0aW9uLmludGVyYWN0aXZlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBpbnRlcmFjdGl2ZVRhcmdldCA9IHtcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGJ1dHRvbk1vZGU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmVDaGlsZHJlbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGRlZmF1bHRDdXJzb3I6ICdwb2ludGVyJyxcblxuICAgIC8vIHNvbWUgaW50ZXJuYWwgY2hlY2tzLi5cblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb3ZlcjogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90b3VjaERvd246IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyYWN0aXZlVGFyZ2V0O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuLi9leHRyYXMnKSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5cbmZ1bmN0aW9uIHBhcnNlKHJlc291cmNlLCB0ZXh0dXJlKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgaW5mbyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXTtcbiAgICB2YXIgY29tbW9uID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XG5cbiAgICBkYXRhLmZvbnQgPSBpbmZvLmdldEF0dHJpYnV0ZSgnZmFjZScpO1xuICAgIGRhdGEuc2l6ZSA9IHBhcnNlSW50KGluZm8uZ2V0QXR0cmlidXRlKCdzaXplJyksIDEwKTtcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBwYXJzZUludChjb21tb24uZ2V0QXR0cmlidXRlKCdsaW5lSGVpZ2h0JyksIDEwKTtcbiAgICBkYXRhLmNoYXJzID0ge307XG5cbiAgICAvL3BhcnNlIGxldHRlcnNcbiAgICB2YXIgbGV0dGVycyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NoYXInKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdpZCcpLCAxMCk7XG5cbiAgICAgICAgdmFyIHRleHR1cmVSZWN0ID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3gnKSwgMTApICsgdGV4dHVyZS5mcmFtZS54LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3knKSwgMTApICsgdGV4dHVyZS5mcmFtZS55LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSwgMTApXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICB4T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneG9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB5T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneW9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB4QWR2YW5jZTogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hhZHZhbmNlJyksIDEwKSxcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9LFxuICAgICAgICAgICAgdGV4dHVyZTogbmV3IGNvcmUuVGV4dHVyZSh0ZXh0dXJlLmJhc2VUZXh0dXJlLCB0ZXh0dXJlUmVjdClcblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vcGFyc2Uga2VybmluZ3NcbiAgICB2YXIga2VybmluZ3MgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXJuaW5nJyk7XG4gICAgZm9yIChpID0gMDsgaSA8IGtlcm5pbmdzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdmaXJzdCcpLCAxMCk7XG4gICAgICAgIHZhciBzZWNvbmQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ3NlY29uZCcpLCAxMCk7XG4gICAgICAgIHZhciBhbW91bnQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2Ftb3VudCcpLCAxMCk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tzZWNvbmRdLmtlcm5pbmdbZmlyc3RdID0gYW1vdW50O1xuICAgIH1cblxuICAgIHJlc291cmNlLmJpdG1hcEZvbnQgPSBkYXRhO1xuXG4gICAgLy8gSSdtIGxlYXZpbmcgdGhpcyBhcyBhIHRlbXBvcmFyeSBmaXggc28gd2UgY2FuIHRlc3QgdGhlIGJpdG1hcCBmb250cyBpbiB2M1xuICAgIC8vIGJ1dCBpdCdzIHZlcnkgbGlrZWx5IHRvIGNoYW5nZVxuICAgIGV4dHJhcy5CaXRtYXBUZXh0LmZvbnRzW2RhdGEuZm9udF0gPSBkYXRhO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhIG9yIG5vdCB4bWwgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzWG1sKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBpZiBub3QgYml0bWFwIGZvbnQgZGF0YSwgdXNpbmcgc29tZSBzaWxseSBkdWNrLXR5cGluZ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF0uZ2V0QXR0cmlidXRlKCdmYWNlJykgPT09IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4bWxVcmwgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsKTtcblxuICAgICAgICBpZiAoeG1sVXJsID09PSAnLicpIHtcbiAgICAgICAgICAgIHhtbFVybCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmFzZVVybCAmJiB4bWxVcmwpIHtcbiAgICAgICAgICAgIC8vIGlmIGJhc2V1cmwgaGFzIGEgdHJhaWxpbmcgc2xhc2ggdGhlbiBhZGQgb25lIHRvIHhtbFVybCBzbyB0aGUgcmVwbGFjZSB3b3JrcyBiZWxvd1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVVybC5jaGFyQXQodGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEpID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYmFzZVVybCBmcm9tIHhtbFVybFxuICAgICAgICAgICAgeG1sVXJsID0geG1sVXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiB4bWxVcmwgbm93LCBpdCBuZWVkcyBhIHRyYWlsaW5nIHNsYXNoLiBFbnN1cmUgdGhhdCBpdCBkb2VzIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZW1wdHkuXG4gICAgICAgIGlmICh4bWxVcmwgJiYgeG1sVXJsLmNoYXJBdCh4bWxVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4dHVyZVVybCA9IHhtbFVybCArIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKVswXS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKTtcbiAgICAgICAgaWYgKGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKSB7XG4gICAgICAgICAgICAvL3JldXNlIGV4aXN0aW5nIHRleHR1cmVcbiAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBsb2FkIHRoZSB0ZXh0dXJlIGZvciB0aGUgZm9udFxuICAgICAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCB0ZXh0dXJlVXJsLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCByZXMudGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGxvYWRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmxvYWRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTG9hZGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlcicpLFxuXG4gICAgLy8gcGFyc2Vyc1xuICAgIGJpdG1hcEZvbnRQYXJzZXI6ICAgcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXI6ICByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgdGV4dHVyZVBhcnNlcjogICAgICByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBSZXNvdXJjZTogICAgICAgICAgIHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlXG59O1xuIiwidmFyIFJlc291cmNlTG9hZGVyID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJyksXG4gICAgdGV4dHVyZVBhcnNlciA9IHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyID0gcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIGJpdG1hcEZvbnRQYXJzZXIgPSByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKTtcblxuLyoqXG4gKlxuICogVGhlIG5ldyBsb2FkZXIsIGV4dGVuZHMgUmVzb3VyY2UgTG9hZGVyIGJ5IENoYWQgRW5nbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2VuZ2xlcmNqL3Jlc291cmNlLWxvYWRlclxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbG9hZGVyID0gUElYSS5sb2FkZXI7IC8vIHBpeGkgZXhwb3NlcyBhIHByZW1hZGUgaW5zdGFuY2UgZm9yIHlvdSB0byB1c2UuXG4gKiAvL29yXG4gKiB2YXIgbG9hZGVyID0gbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIoKTsgLy8geW91IGNhbiBhbHNvIGNyZWF0ZSB5b3VyIG93biBpZiB5b3Ugd2FudFxuICpcbiAqIGxvYWRlci5hZGQoJ2J1bm55JyxcImRhdGEvYnVubnkucG5nXCIpO1xuICpcbiAqIGxvYWRlci5vbmNlKCdjb21wbGV0ZScsb25Bc3NldHNMb2FkZWQpO1xuICpcbiAqIGxvYWRlci5sb2FkKCk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuUmVzb3VyY2VMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmxvYWRlcnNcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpXG57XG4gICAgUmVzb3VyY2VMb2FkZXIuY2FsbCh0aGlzLCBiYXNlVXJsLCBjb25jdXJyZW5jeSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IExvYWRlci5fcGl4aU1pZGRsZXdhcmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy51c2UoTG9hZGVyLl9waXhpTWlkZGxld2FyZVtpXSgpKTtcbiAgICB9XG59XG5cbkxvYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuTG9hZGVyLl9waXhpTWlkZGxld2FyZSA9IFtcbiAgICAvLyBwYXJzZSBhbnkgYmxvYiBpbnRvIG1vcmUgdXNhYmxlIG9iamVjdHMgKGUuZy4gSW1hZ2UpXG4gICAgUmVzb3VyY2VMb2FkZXIubWlkZGxld2FyZS5wYXJzaW5nLmJsb2IsXG4gICAgLy8gcGFyc2UgYW55IEltYWdlIG9iamVjdHMgaW50byB0ZXh0dXJlc1xuICAgIHRleHR1cmVQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIHNwcml0ZXNoZWV0UGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBiaXRtYXBGb250UGFyc2VyXG5dO1xuXG5Mb2FkZXIuYWRkUGl4aU1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLnB1c2goZm4pO1xufTtcblxuLy8gQWRkIGN1c3RvbSBleHRlbnRpb25zXG52YXIgUmVzb3VyY2UgPSBSZXNvdXJjZUxvYWRlci5SZXNvdXJjZTtcblxuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSgnZm50JywgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpO1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSwgaXRzIG5vdCBqc29uLCBvciBpdCBpc24ndCBzcHJpdGVzaGVldCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNKc29uIHx8ICFyZXNvdXJjZS5kYXRhLmZyYW1lcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByb3V0ZSA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKSk7XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybCggcmVzb3VyY2UudXJsICk7XG5cbiAgICAgICAgLy8gbG9hZCB0aGUgaW1hZ2UgZm9yIHRoaXMgc2hlZXRcbiAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCByb3V0ZSArICcvJyArIHJlc291cmNlLmRhdGEubWV0YS5pbWFnZSwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzID0ge307XG5cbiAgICAgICAgICAgIHZhciBmcmFtZXMgPSByZXNvdXJjZS5kYXRhLmZyYW1lcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmcmFtZXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBmcmFtZXNbaV0uZnJhbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVjdClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaW0gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC5oLCByZWN0LncpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC53LCByZWN0LmgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS50cmltbWVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmltID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnggLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnkgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLncgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLmggLyByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsaXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQhXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBzaXplLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUueSAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoIC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0IC89IHJlc29sdXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXNbaV0gPSBuZXcgY29yZS5UZXh0dXJlKHJlcy50ZXh0dXJlLmJhc2VUZXh0dXJlLCBzaXplLCBzaXplLmNsb25lKCksIHRyaW0sIGZyYW1lc1tpXS5yb3RhdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbaV0gPSByZXNvdXJjZS50ZXh0dXJlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZSBpZiB0aGUgZGF0YSBpcyBhbiBJbWFnZSBvYmplY3RcbiAgICAgICAgaWYgKHJlc291cmNlLmRhdGEgJiYgcmVzb3VyY2UuaXNJbWFnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGJhc2VUZXh0dXJlID0gbmV3IGNvcmUuQmFzZVRleHR1cmUocmVzb3VyY2UuZGF0YSwgbnVsbCwgY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwocmVzb3VyY2UudXJsKSk7XG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IHJlc291cmNlLnVybDtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmUgPSBuZXcgY29yZS5UZXh0dXJlKGJhc2VUZXh0dXJlKTtcbiAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1Y250aW9uc1xuICAgICAgICAgICAgY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSBiYXNlVGV4dHVyZTtcbiAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSByZXNvdXJjZS50ZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICB0ZW1wUG9seWdvbiA9IG5ldyBjb3JlLlBvbHlnb24oKTtcblxuLyoqXG4gKiBCYXNlIG1lc2ggY2xhc3NcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRvIHVzZVxuICogQHBhcmFtIFt2ZXJ0aWNlc10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdmVydGljZXNcbiAqIEBwYXJhbSBbdXZzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB1dnNcbiAqIEBwYXJhbSBbaW5kaWNlc10ge1VpbnQxNkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBpbmRpY2VzXG4gKiBAcGFyYW0gW2RyYXdNb2RlXSB7bnVtYmVyfSB0aGUgZHJhd01vZGUsIGNhbiBiZSBhbnkgb2YgdGhlIE1lc2guRFJBV19NT0RFUyBjb25zdHNcbiAqL1xuZnVuY3Rpb24gTWVzaCh0ZXh0dXJlLCB2ZXJ0aWNlcywgdXZzLCBpbmRpY2VzLCBkcmF3TW9kZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gdXZzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEsIDAsXG4gICAgICAgIDEsIDEsXG4gICAgICAgIDAsIDFdKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEwMCwgMCxcbiAgICAgICAgMTAwLCAxMDAsXG4gICAgICAgIDAsIDEwMF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICAvLyAgVE9ETyBhdXRvIGdlbmVyYXRlIHRoaXMgYmFzZWQgb24gZHJhdyBtb2RlIVxuICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXMgfHwgbmV3IFVpbnQxNkFycmF5KFswLCAxLCAzLCAyXSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBNZXNoIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gU2V0IHRvIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVtb3ZlIGFueSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRyaWFuZ2xlcyBpbiBjYW52YXMgbW9kZSBhcmUgYXV0b21hdGljYWxseSBhbnRpYWxpYXNlZCwgdXNlIHRoaXMgdmFsdWUgdG8gZm9yY2UgdHJpYW5nbGVzIHRvIG92ZXJsYXAgYSBiaXQgd2l0aCBlYWNoIG90aGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2F5IHRoZSBNZXNoIHNob3VsZCBiZSBkcmF3biwgY2FuIGJlIGFueSBvZiB0aGUge0BsaW5rIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVN9IGNvbnN0c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuZHJhd01vZGUgPSBkcmF3TW9kZSB8fCBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSDtcblxuICAgIC8vIHJ1biB0ZXh0dXJlIHNldHRlcjtcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBtZXNoIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5NZXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2g7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2g7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc2gucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkubWVzaC5NZXNoI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5tZXNoKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLm1lc2gucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4IHwgMCwgdHJhbnNmb3JtLnR5IHwgMCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHgsIHRyYW5zZm9ybS50eSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoKGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMoY29udGV4dCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIFRyaWFuZ2xlIE1lc2ggbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2ggPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoIC8gMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkgKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgsIChpbmRleCArIDIpLCAoaW5kZXggKyA0KSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIHRyaWFuZ2xlIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDMpXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXgwID0gaW5kaWNlc1tpXSAqIDIsIGluZGV4MSA9IGluZGljZXNbaSArIDFdICogMiwgaW5kZXgyID0gaW5kaWNlc1tpICsgMl0gKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4Mik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyBvbmUgb2YgdGhlIHRyaWFuZ2xlcyB0aGF0IGZvcm0gdGhpcyBNZXNoXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdmVydGljZXMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHZlcnRpY2VzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gdXZzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB1dnMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSBpbmRleDAge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDEge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgyIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlID0gZnVuY3Rpb24gKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpXG57XG4gICAgdmFyIHRleHR1cmVTb3VyY2UgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZTtcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aDtcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXgwXSwgeDEgPSB2ZXJ0aWNlc1tpbmRleDFdLCB4MiA9IHZlcnRpY2VzW2luZGV4Ml07XG4gICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgwICsgMV0sIHkxID0gdmVydGljZXNbaW5kZXgxICsgMV0sIHkyID0gdmVydGljZXNbaW5kZXgyICsgMV07XG5cbiAgICB2YXIgdTAgPSB1dnNbaW5kZXgwXSAqIHRleHR1cmVXaWR0aCwgdTEgPSB1dnNbaW5kZXgxXSAqIHRleHR1cmVXaWR0aCwgdTIgPSB1dnNbaW5kZXgyXSAqIHRleHR1cmVXaWR0aDtcbiAgICB2YXIgdjAgPSB1dnNbaW5kZXgwICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MSA9IHV2c1tpbmRleDEgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYyID0gdXZzW2luZGV4MiArIDFdICogdGV4dHVyZUhlaWdodDtcblxuICAgIGlmICh0aGlzLmNhbnZhc1BhZGRpbmcgPiAwKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmdYID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgcGFkZGluZ1kgPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciBjZW50ZXJYID0gKHgwICsgeDEgKyB4MikgLyAzO1xuICAgICAgICB2YXIgY2VudGVyWSA9ICh5MCArIHkxICsgeTIpIC8gMztcblxuICAgICAgICB2YXIgbm9ybVggPSB4MCAtIGNlbnRlclg7XG4gICAgICAgIHZhciBub3JtWSA9IHkwIC0gY2VudGVyWTtcblxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgwID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkwID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgLy9cblxuICAgICAgICBub3JtWCA9IHgxIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MSAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgxID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkxID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgbm9ybVggPSB4MiAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTIgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MiA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MiA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cblxuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGNvbnRleHQuY2xpcCgpO1xuXG4gICAgLy8gQ29tcHV0ZSBtYXRyaXggdHJhbnNmb3JtXG4gICAgdmFyIGRlbHRhID0gICh1MCAqIHYxKSAgICAgICsgKHYwICogdTIpICAgICAgKyAodTEgKiB2MikgICAgICAtICh2MSAqIHUyKSAgICAgIC0gKHYwICogdTEpICAgICAgLSAodTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQSA9ICh4MCAqIHYxKSAgICAgICsgKHYwICogeDIpICAgICAgKyAoeDEgKiB2MikgICAgICAtICh2MSAqIHgyKSAgICAgIC0gKHYwICogeDEpICAgICAgLSAoeDAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQiA9ICh1MCAqIHgxKSAgICAgICsgKHgwICogdTIpICAgICAgKyAodTEgKiB4MikgICAgICAtICh4MSAqIHUyKSAgICAgIC0gKHgwICogdTEpICAgICAgLSAodTAgKiB4Mik7XG4gICAgdmFyIGRlbHRhQyA9ICh1MCAqIHYxICogeDIpICsgKHYwICogeDEgKiB1MikgKyAoeDAgKiB1MSAqIHYyKSAtICh4MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB4MikgLSAodTAgKiB4MSAqIHYyKTtcbiAgICB2YXIgZGVsdGFEID0gKHkwICogdjEpICAgICAgKyAodjAgKiB5MikgICAgICArICh5MSAqIHYyKSAgICAgIC0gKHYxICogeTIpICAgICAgLSAodjAgKiB5MSkgICAgICAtICh5MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFFID0gKHUwICogeTEpICAgICAgKyAoeTAgKiB1MikgICAgICArICh1MSAqIHkyKSAgICAgIC0gKHkxICogdTIpICAgICAgLSAoeTAgKiB1MSkgICAgICAtICh1MCAqIHkyKTtcbiAgICB2YXIgZGVsdGFGID0gKHUwICogdjEgKiB5MikgKyAodjAgKiB5MSAqIHUyKSArICh5MCAqIHUxICogdjIpIC0gKHkwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHkyKSAtICh1MCAqIHkxICogdjIpO1xuXG4gICAgY29udGV4dC50cmFuc2Zvcm0oZGVsdGFBIC8gZGVsdGEsIGRlbHRhRCAvIGRlbHRhLFxuICAgICAgICBkZWx0YUIgLyBkZWx0YSwgZGVsdGFFIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQyAvIGRlbHRhLCBkZWx0YUYgLyBkZWx0YSk7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlU291cmNlLCAwLCAwKTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBmbGF0IE1lc2hcbiAqXG4gKiBAcGFyYW0gTWVzaCB7UElYSS5tZXNoLk1lc2h9IFRoZSBNZXNoIHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUucmVuZGVyTWVzaEZsYXQgPSBmdW5jdGlvbiAoTWVzaClcbntcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICB2YXIgdmVydGljZXMgPSBNZXNoLnZlcnRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aC8yO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgZm9yICh2YXIgaT0xOyBpIDwgbGVuZ3RoLTI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkqMjtcblxuICAgICAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleF0sICAgeDEgPSB2ZXJ0aWNlc1tpbmRleCsyXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleCs0XTtcbiAgICAgICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgrMV0sIHkxID0gdmVydGljZXNbaW5kZXgrM10sIHkyID0gdmVydGljZXNbaW5kZXgrNV07XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVwZGF0ZUZyYW1lID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBtZXNoIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5NZXNoLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICghdGhpcy5fY3VycmVudEJvdW5kcykge1xuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1pblkgPSBJbmZpbml0eTtcblxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IG47IGkgKz0gMikge1xuICAgICAgICAgICAgdmFyIHJhd1ggPSB2ZXJ0aWNlc1tpXSwgcmF3WSA9IHZlcnRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciB4ID0gKGEgKiByYXdYKSArIChjICogcmF3WSkgKyB0eDtcbiAgICAgICAgICAgIHZhciB5ID0gKGQgKiByYXdZKSArIChiICogcmF3WCkgKyB0eTtcblxuICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcblxuICAgICAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG4gICAgICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5YID09PSAtSW5maW5pdHkgfHwgbWF4WSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIG1lc2guIFdvcmtzIG9ubHkgZm9yIFRSSUFOR0xFX01FU0hcbiAqXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4gKi9cbk1lc2gucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKSB7XG4gICAgaWYgKCF0aGlzLmdldEJvdW5kcygpLmNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgcG9pbnRzID0gdGVtcFBvbHlnb24ucG9pbnRzO1xuICAgIHZhciBpLCBsZW47XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUykge1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICAgICAgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgLy9UT0RPOiBpbmxpbmUgdGhpcy5cbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Mykge1xuICAgICAgICAgICAgdmFyIGluZDAgPSBpbmRpY2VzW2ldKjIsIGluZDEgPSBpbmRpY2VzW2krMV0qMiwgaW5kMiA9IGluZGljZXNbaSsyXSoyO1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaW5kMF07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpbmQwKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaW5kMV07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpbmQxKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaW5kMl07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpbmQyKzFdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Nikge1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaSsyXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2krM107XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpKzRdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaSs1XTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEaWZmZXJlbnQgZHJhd2luZyBidWZmZXIgbW9kZXMgc3VwcG9ydGVkXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSFxuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gKi9cbk1lc2guRFJBV19NT0RFUyA9IHtcbiAgICBUUklBTkdMRV9NRVNIOiAwLFxuICAgIFRSSUFOR0xFUzogMVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG5cbi8qKlxuICogVGhlIFBsYW5lIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIFBsYW5lID0gbmV3IFBJWEkuUGxhbmUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgUGxhbmUuXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNYIC0gVGhlIG51bWJlciBveCB4IHNlZ21lbnRzXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNZIC0gVGhlIG51bWJlciBvZiB5IHNlZ21lbnRzXG4gKlxuICovXG5mdW5jdGlvbiBQbGFuZSh0ZXh0dXJlLCBzZWdtZW50c1gsIHNlZ21lbnRzWSlcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgUGxhbmUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWdtZW50c1ggPSAgc2VnbWVudHNYIHx8IDEwO1xuICAgIHRoaXMuc2VnbWVudHNZID0gc2VnbWVudHNZIHx8IDEwO1xuXG4gICAgdGhpcy5kcmF3TW9kZSA9IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVM7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUGxhbmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKTtcblBsYW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsYW5lO1xubW9kdWxlLmV4cG9ydHMgPSBQbGFuZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblBsYW5lLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciB0b3RhbCA9IHRoaXMuc2VnbWVudHNYICogdGhpcy5zZWdtZW50c1k7XG4gICAgdmFyIHZlcnRzID0gW107XG4gICAgdmFyIGNvbG9ycyA9IFtdO1xuICAgIHZhciB1dnMgPSBbXTtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuXG4gIC8vICB0ZXh0dXJlLndpZHRoID0gODAwIHRleHR1cmUud2lkdGggfHwgODAwO1xuIC8vICAgdGV4dHVyZS5oZWlnaHQgPSA4MDAvL3RleHR1cmUuaGVpZ2h0IHx8IDgwMDtcblxuICAgIHZhciBzZWdtZW50c1hTdWIgPSB0aGlzLnNlZ21lbnRzWCAtIDE7XG4gICAgdmFyIHNlZ21lbnRzWVN1YiA9IHRoaXMuc2VnbWVudHNZIC0gMTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB2YXIgc2l6ZVggPSB0ZXh0dXJlLndpZHRoIC8gc2VnbWVudHNYU3ViO1xuICAgIHZhciBzaXplWSA9IHRleHR1cmUuaGVpZ2h0IC8gc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcblxuICAgICAgICB2YXIgeCA9IChpICUgdGhpcy5zZWdtZW50c1gpO1xuICAgICAgICB2YXIgeSA9ICggKGkgLyB0aGlzLnNlZ21lbnRzWCApIHwgMCApO1xuXG5cbiAgICAgICAgdmVydHMucHVzaCgoeCAqIHNpemVYKSxcbiAgICAgICAgICAgICAgICAgICAoeSAqIHNpemVZKSk7XG5cbiAgICAgICAgLy8gdGhpcyB3b3JrcyBmb3IgcmVjdGFuZ3VsYXIgdGV4dHVyZXMuIFxuICAgICAgICB1dnMucHVzaCh0ZXh0dXJlLl91dnMueDAgKyAodGV4dHVyZS5fdXZzLngxIC0gdGV4dHVyZS5fdXZzLngwKSAqICh4IC8gKHRoaXMuc2VnbWVudHNYLTEpKSwgdGV4dHVyZS5fdXZzLnkwICsgKHRleHR1cmUuX3V2cy55My10ZXh0dXJlLl91dnMueTApICogKHkvICh0aGlzLnNlZ21lbnRzWS0xKSkpO1xuICAgICAgfVxuXG4gICAgLy8gIGNvbnNcblxuICAgIHZhciB0b3RhbFN1YiA9IHNlZ21lbnRzWFN1YiAqIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFN1YjsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHhwb3MgPSBpICUgc2VnbWVudHNYU3ViO1xuICAgICAgICB2YXIgeXBvcyA9IChpIC8gc2VnbWVudHNYU3ViICkgfCAwO1xuXG5cbiAgICAgICAgdmFyICB2YWx1ZSA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTIgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuICAgICAgICB2YXIgIHZhbHVlMyA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWU0ID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMyk7XG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZTIsIHZhbHVlNCwgdmFsdWUzKTtcbiAgICB9XG5cblxuICAgIC8vY29uc29sZS5sb2coaW5kaWNlcylcbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0cyk7XG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHV2cyk7XG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvbG9ycyk7XG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBsYW5lLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUGxhbmUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSByb3BlIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIHJvcGUgPSBuZXcgUElYSS5Sb3BlKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIHJvcGUuXG4gKiBAcGFyYW0ge1BJWEkuUG9pbnRbXX0gcG9pbnRzIC0gQW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuUG9pbnR9IG9iamVjdHMgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAqXG4gKi9cbmZ1bmN0aW9uIFJvcGUodGV4dHVyZSwgcG9pbnRzKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfSBBbiBhcnJheSBvZiBwb2ludHMgdGhhdCBkZXRlcm1pbmUgdGhlIHJvcGVcbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBvZiB2ZXJ0aWNlcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IFRoZSBXZWJHTCBVdnMgb2YgdGhlIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBjb21wb25lbnRzXG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSByb3BlIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICAgdGhpcy5yZWZyZXNoKCk7XG59XG5cblxuLy8gY29uc3RydWN0b3JcblJvcGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNZXNoLnByb3RvdHlwZSk7XG5Sb3BlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvcGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvcGU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5Sb3BlLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICAvLyBpZiB0b28gbGl0dGxlIHBvaW50cywgb3IgdGV4dHVyZSBoYXNuJ3QgZ290IFVWcyBzZXQgeWV0IGp1c3QgbW92ZSBvbi5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEgfHwgIXRoaXMuX3RleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cbiAgICB2YXIgdGV4dHVyZVV2cyA9IHRoaXMuX3RleHR1cmUuX3V2cztcbiAgICB2YXIgb2Zmc2V0ID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MCk7XG4gICAgdmFyIGZhY3RvciA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDIgLSB0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkyIC0gdGV4dHVyZVV2cy55MCk7XG5cbiAgICB1dnNbMF0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzFdID0gMCArIG9mZnNldC55O1xuICAgIHV2c1syXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgIGNvbG9yc1swXSA9IDE7XG4gICAgY29sb3JzWzFdID0gMTtcblxuICAgIGluZGljZXNbMF0gPSAwO1xuICAgIGluZGljZXNbMV0gPSAxO1xuXG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCBhbW91bnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcbiAgICAgICAgLy8gdGltZSB0byBkbyBzb21lIHNtYXJ0IGRyYXdpbmchXG4gICAgICAgIGFtb3VudCA9IGkgLyAodG90YWwtMSk7XG5cbiAgICAgICAgdXZzW2luZGV4XSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCsxXSA9IDAgKyBvZmZzZXQueTtcblxuICAgICAgICB1dnNbaW5kZXgrMl0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBjb2xvcnNbaW5kZXhdID0gMTtcbiAgICAgICAgY29sb3JzW2luZGV4KzFdID0gMTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGluZGV4O1xuICAgICAgICBpbmRpY2VzW2luZGV4ICsgMV0gPSBpbmRleCArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFJvcGUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9pbnQgPSBwb2ludHNbMF07XG4gICAgdmFyIG5leHRQb2ludDtcbiAgICB2YXIgcGVycFggPSAwO1xuICAgIHZhciBwZXJwWSA9IDA7XG5cbiAgICAvLyB0aGlzLmNvdW50IC09IDAuMjtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCByYXRpbywgcGVycExlbmd0aCwgbnVtO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG5cbiAgICAgICAgaWYgKGkgPCBwb2ludHMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50c1tpKzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwWSA9IC0obmV4dFBvaW50LnggLSBsYXN0UG9pbnQueCk7XG4gICAgICAgIHBlcnBYID0gbmV4dFBvaW50LnkgLSBsYXN0UG9pbnQueTtcblxuICAgICAgICByYXRpbyA9ICgxIC0gKGkgLyAodG90YWwtMSkpKSAqIDEwO1xuXG4gICAgICAgIGlmIChyYXRpbyA+IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhdGlvID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBMZW5ndGggPSBNYXRoLnNxcnQocGVycFggKiBwZXJwWCArIHBlcnBZICogcGVycFkpO1xuICAgICAgICBudW0gPSB0aGlzLl90ZXh0dXJlLmhlaWdodCAvIDI7IC8vKDIwICsgTWF0aC5hYnMoTWF0aC5zaW4oKGkgKyB0aGlzLmNvdW50KSAqIDAuMykgKiA1MCkgKSogcmF0aW87XG4gICAgICAgIHBlcnBYIC89IHBlcnBMZW5ndGg7XG4gICAgICAgIHBlcnBZIC89IHBlcnBMZW5ndGg7XG5cbiAgICAgICAgcGVycFggKj0gbnVtO1xuICAgICAgICBwZXJwWSAqPSBudW07XG5cbiAgICAgICAgdmVydGljZXNbaW5kZXhdID0gcG9pbnQueCArIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsxXSA9IHBvaW50LnkgKyBwZXJwWTtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMl0gPSBwb2ludC54IC0gcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzNdID0gcG9pbnQueSAtIHBlcnBZO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IHBvaW50O1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5tZXNoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1lc2g6ICAgICAgICAgICByZXF1aXJlKCcuL01lc2gnKSxcbiAgICBQbGFuZTogICAgICAgICAgIHJlcXVpcmUoJy4vUGxhbmUnKSxcbiAgICBSb3BlOiAgICAgICAgICAgcmVxdWlyZSgnLi9Sb3BlJyksXG4gICAgTWVzaFJlbmRlcmVyOiAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFJlbmRlcmVyJyksXG4gICAgTWVzaFNoYWRlcjogICAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFNoYWRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgTWVzaCA9IHJlcXVpcmUoJy4uL01lc2gnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBNZXNoUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL01lc2hSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDE1MDAwKTtcblxuICAgIC8vVE9ETyB0aGlzIGNvdWxkIGJlIGEgc2luZ2xlIGJ1ZmZlciBzaGFyZWQgYW1vbmdzdCBhbGwgcmVuZGVyZXJzIGFzIHdlIHJldXNlIHRoaXMgc2V0IHVwIGluIG1vc3QgcmVuZGVyZXJzXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCAxNTAwMDsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59XG5cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hSZW5kZXJlcjtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoJywgTWVzaFJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIGlmKCFtZXNoLl92ZXJ0ZXhCdWZmZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9pbml0V2ViR0wobWVzaCk7XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcixcbiAgICAgICAgZ2wgPSByZW5kZXJlci5nbCxcbiAgICAgICAgdGV4dHVyZSA9IG1lc2guX3RleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIHNoYWRlciA9IG1lc2guc2hhZGVyOy8vIHx8IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuXG4gICAgdmFyIGRyYXdNb2RlID0gbWVzaC5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0ggPyBnbC5UUklBTkdMRV9TVFJJUCA6IGdsLlRSSUFOR0xFUztcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKG1lc2guYmxlbmRNb2RlKTtcblxuICAgIC8vVE9ETyBjYWNoZSBjdXN0b20gc3RhdGUuLlxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHNoYWRlci5zaGFkZXJzW2dsLmlkXSB8fCBzaGFkZXIuZ2V0U2hhZGVyKHJlbmRlcmVyKTsvLyA6IHNoYWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXgudmFsdWUgPSBtZXNoLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXgudmFsdWUgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSBtZXNoLndvcmxkQWxwaGE7XG5cbiAgICBzaGFkZXIuc3luY1VuaWZvcm1zKCk7XG5cbiAgICBpZiAoIW1lc2guZGlydHkpXG4gICAge1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgbWVzaC52ZXJ0aWNlcyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG1lc2guaW5kaWNlcyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgbWVzaC5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb250IG5lZWQgdG8gdXBsb2FkIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgfVxuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGRyYXdNb2RlLCBtZXNoLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG5cbn07XG5cbi8qKlxuICogUHJlcGFyZXMgYWxsIHRoZSBidWZmZXJzIHRvIHJlbmRlciB0aGlzIG1lc2hcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuX2luaXRXZWJHTCA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIC8vIGJ1aWxkIHRoZSBzdHJpcCFcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgbWVzaC5fdmVydGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5faW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl91dkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG5cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICBpZihtZXNoLmNvbG9ycyl7XG4gICAgICAgIG1lc2guX2NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl9jb2xvckJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLmNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbn07XG5cblxuLyoqXG4gKiBFbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IG1lc2ggcmVuZGVyZXIuXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBcblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBNZXNoIHJlbmRlcmVyXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgV2ViR0wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgY29yZS5TaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogYWxwaGEgOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVZlcnRleFBvc2l0aW9uOjAsXG4gICAgICAgICAgICBhVGV4dHVyZUNvb3JkOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cbk1lc2hTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNoYWRlci5wcm90b3R5cGUpO1xuTWVzaFNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoU2hhZGVyO1xuXG5jb3JlLlNoYWRlck1hbmFnZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2hTaGFkZXInLCBNZXNoU2hhZGVyKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3NpZ25cblxuaWYgKCFNYXRoLnNpZ24pXG57XG4gICAgTWF0aC5zaWduID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCA9ICt4O1xuICAgICAgICBpZiAoeCA9PT0gMCB8fCBpc05hTih4KSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPiAwID8gMSA6IC0xO1xuICAgIH07XG59XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9vYmplY3QtYXNzaWduXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5cbmlmICghT2JqZWN0LmFzc2lnbilcbntcbiAgICBPYmplY3QuYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xufVxuIiwicmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL3JlcXVlc3RBbmltYXRpb25GcmFtZScpO1xucmVxdWlyZSgnLi9NYXRoLnNpZ24nKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTU3OTY3MVxuLy8gaHR0cDovL3VwZGF0ZXMuaHRtbDVyb2Nrcy5jb20vMjAxMi8wNS9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUtQVBJLW5vdy13aXRoLXN1Yi1taWxsaXNlY29uZC1wcmVjaXNpb25cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RpbWhhbGwvNDA3ODYxNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0ZpbmFuY2lhbC1UaW1lcy9wb2x5ZmlsbC1zZXJ2aWNlL3RyZWUvbWFzdGVyL3BvbHlmaWxscy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcblxuLy8gRXhwZWN0ZWQgdG8gYmUgdXNlZCB3aXRoIEJyb3dzZXJmaXlcbi8vIEJyb3dzZXJpZnkgYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZSB1c2Ugb2YgYGdsb2JhbGAgYW5kIHBhc3NlcyB0aGVcbi8vIGNvcnJlY3QgcmVmZXJlbmNlIG9mIGBnbG9iYWxgLCBgc2VsZmAsIGFuZCBmaW5hbGx5IGB3aW5kb3dgXG5cbi8vIERhdGUubm93XG5pZiAoIShEYXRlLm5vdyAmJiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lKSkge1xuICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcbn1cblxuLy8gcGVyZm9ybWFuY2Uubm93XG5pZiAoIShnbG9iYWwucGVyZm9ybWFuY2UgJiYgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdykpIHtcbiAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIWdsb2JhbC5wZXJmb3JtYW5jZSkge1xuICAgICAgICBnbG9iYWwucGVyZm9ybWFuY2UgPSB7fTtcbiAgICB9XG4gICAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgfTtcbn1cblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xudmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xuXG5mb3IodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8XG4gICAgICAgIGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xufVxuXG5pZiAoIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCksXG4gICAgICAgICAgICBkZWxheSA9IDE2ICsgbGFzdFRpbWUgLSBjdXJyZW50VGltZTtcblxuICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgIH07XG59XG5cbmlmICghZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xufVxuIl19 //# sourceMappingURL=pixi.js.map diff --git a/bin/pixi.js.map b/bin/pixi.js.map index 1d72f43..3256814 100644 --- a/bin/pixi.js.map +++ b/bin/pixi.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi.js","sourceRoot":"./","sourcesContent":[]} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi.js","sourceRoot":"./","sourcesContent":[]} \ No newline at end of file diff --git a/bin/pixi.min.js b/bin/pixi.min.js index db31e4a..ee1b45b 100644 --- a/bin/pixi.min.js +++ b/bin/pixi.min.js @@ -1,11 +1,11 @@ !function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&this.texture.uploadData(null,t,e),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=i.fromData(t,null,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a.unbind(),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a.unbind(),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t||null)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){return this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate(),this},i.prototype.unbind=function(){return this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null),this},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=X(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function P(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function D(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},X=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},Y="function"==typeof setImmediate&&setImmediate,z=Y?function(t){Y(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=Y?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=X(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return P(t,1,e)},N.log=D("log"),N.dir=D("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return P.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return D.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",P=/^xn--/,D=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r); g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v,p=""),d=decodeURIComponent(c),f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,P=M.length;P>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var D=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(D.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=D.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var X=i.indexOf("#");-1!==X&&(this.hash=i.substr(X),i=i.slice(0,X));var Y=i.indexOf("?");if(-1!==Y?(this.search=i.substr(Y),this.query=i.substr(Y+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,Y)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","gl-matrix":"git+https://github.com/toji/gl-matrix.git","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirtyTransform=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":56,"../textures/RenderTexture":100,"../utils":107,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.transform=new a,this.position=this.transform.position,this.scale=this.transform.scale,this.pivot=this.transform.pivot,this.skew=this.transform.skew,this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),t("./Transform")),h=new n.Matrix,u={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i;var l=function(t){this.doc=t,this.x=0,this.y=0};Object.defineProperties(l.prototype,{x:{get:function(){return this.doc.position.x},set:function(t){this.doc.position.x=t,this.doc.dirtyTransform=!0}},y:{get:function(){return this.doc.posiiton.y},set:function(t){this.doc.position.y=t,this.doc.dirtyTransform=!0}}}),Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return h.tx=-i.x,h.ty=-i.y,n.render(this,h),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":56,"../textures/RenderTexture":100,"./Transform":41,eventemitter3:25}],41:[function(t,e,r){function i(){this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.position=new n.Point(0),this.scale=new n.Point(1,1),this.pivot=new n.Point(0),this.skew=new n.Point(0),this.rotation=0,this.dirty=!0}var n=t("../math");i.prototype.constructor=i,i.prototype.updateTransform=function(t){var e=t.worldTransform,r=this.worldTransform,i=this.localTransform;return i.a=this._cr*this.scale.x,i.b=this._sr*this.scale.x,i.c=-this._sr*this.scale.y,i.d=this._cr*this.scale.y,i.tx=this.position.x-(this.pivot.x*i.a+this.pivot.y*i.c),i.ty=this.position.y-(this.pivot.x*i.b+this.pivot.y*i.d),r.a=i.a*e.a+i.b*e.c,r.b=i.a*e.b+i.b*e.d,r.c=i.c*e.a+i.d*e.c,r.d=i.c*e.b+i.d*e.d,r.tx=i.tx*e.a+i.ty*e.c+e.tx,r.ty=i.tx*e.b+i.ty*e.d+e.ty,this.dirty=!1,!0},e.exports=i},{"../math":56}],42:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils":107,"./WebGLGraphicsData":45,"./shaders/PrimitiveShader":46,"./utils/buildCircle":47,"./utils/buildComplexPoly":48,"./utils/buildLine":49,"./utils/buildPoly":50,"./utils/buildRectangle":51,"./utils/buildRoundedRectangle":52,earcut:24}],45:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],46:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],47:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":107,"./buildLine":49}],48:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":107,"./buildLine":49}],49:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":56,"../../../utils":107}],50:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":107}],51:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":107,"./buildLine":49}],52:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":107,"./buildLine":49}],53:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),BaseRenderTexture:t("./textures/BaseRenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":42,"./graphics/GraphicsData":43,"./graphics/webgl/GraphicsRenderer":44,"./math":56,"./particles/ParticleContainer":62,"./particles/webgl/ParticleRenderer":64,"./renderers/canvas/CanvasRenderer":67,"./renderers/canvas/utils/CanvasBuffer":68,"./renderers/canvas/utils/CanvasGraphics":69,"./renderers/webgl/WebGLRenderer":73,"./renderers/webgl/filters/AbstractFilter":74,"./renderers/webgl/filters/FXAAFilter":75,"./renderers/webgl/filters/SpriteMaskFilter":76,"./renderers/webgl/managers/ShaderManager":80,"./renderers/webgl/managers/WebGLManager":82,"./renderers/webgl/shaders/Shader":85,"./renderers/webgl/utils/ObjectRenderer":88,"./renderers/webgl/utils/RenderTarget":90,"./sprites/Sprite":94,"./sprites/webgl/SpriteRenderer":95,"./text/Text":97,"./textures/BaseRenderTexture":98,"./textures/BaseTexture":99,"./textures/RenderTexture":100,"./textures/Texture":101,"./textures/TextureUvs":102,"./textures/VideoBaseTexture":103,"./ticker":105,"./utils":107,"pixi-gl-core":1}],54:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":55}],55:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],56:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":54,"./Point":55,"./shapes/Circle":57,"./shapes/Ellipse":58,"./shapes/Polygon":59,"./shapes/Rectangle":60,"./shapes/RoundedRectangle":61}],57:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":60}],58:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":60}],59:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":55}],60:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],62:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"./ParticleBuffer":63,"./ParticleShader":65}],65:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{ -uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":86}],66:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,transform:{worldTransform:new o.Matrix},worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":56,"../utils":107,eventemitter3:25}],67:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":56,"../../utils":107,"../SystemRenderer":66,"./utils/CanvasMaskManager":70}],68:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],69:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],70:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":69}],71:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":86}],75:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\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\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\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)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":74}],76:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":56,"./AbstractFilter":74}],77:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":82}],78:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":107}],86:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":85}],87:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],88:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":82}],89:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],90:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=(t("pixi-gl-core").GLTexture,t("pixi-gl-core").GLFramebuffer),s=t("./StencilMaskStack"),a=function(t,e,r,a,h,u){this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=h||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.defaultFrame=new PIXI.Rectangle,this.destinationFrame=null,this.sourceFrame=null,this.stencilBuffer=null,this.stencilMaskStack=new s,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=a||n.SCALE_MODES.DEFAULT,this.root=u,this.frameBuffer=o.createRGBA(t,100,100),this.root?this.frameBuffer.framebuffer=null:this.texture=this.frameBuffer.texture,this.resize(e,r)};a.prototype.constructor=a,e.exports=a,a.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},a.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},a.prototype.activate=function(t,e){var r=this.gl;this.frameBuffer.bind(),this.destinationFrame=t||this.destinationFrame||this.defaultFrame,this.sourceFrame=e||this.sourceFrame||t,this.calculateProjection(this.destinationFrame,this.sourceFrame),this.transform&&this.projectionMatrix.append(this.transform),this.destinationFrame!==this.sourceFrame?(r.enable(r.SCISSOR_TEST),r.scissor(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)):r.disable(r.SCISSOR_TEST),r.viewport(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)},a.prototype.calculateProjection=function(t,e){var r=this.projectionMatrix;e=e||t,r.identity(),this.root?(r.a=1/t.width*2,r.d=-1/t.height*2,r.tx=-1-e.x*r.a,r.ty=1-e.y*r.d):(r.a=1/t.width*2,r.d=1/t.height*2,r.tx=-1-e.x*r.a,r.ty=-1-e.y*r.d)},a.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.defaultFrame.width=t,this.defaultFrame.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},a.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":56,"../../../utils":107,"./StencilMaskStack":91,"pixi-gl-core":1}],91:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],92:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],93:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],94:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.transform.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0); -}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],97:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=t,this.height=e,this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(t){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear(!1,t))},i.prototype.renderWebGL=function(t,e,r,i,n){if(this.valid){if(n=void 0!==n?n:!0,this.textureBuffer.transform=r,this.textureBuffer.activate(),e.worldAlpha=1,n){e.worldTransform.identity(),e.currentBounds=null;var o,s,a=e.children;for(o=0,s=a.length;s>o;++o)a[o].updateTransform()}p.width=t.height,p.height=t.width;var h=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.textureBuffer.activate(t,p),console.log(e),this.renderer.renderDisplayObject(e,this.textureBuffer,i),this.renderer.filterManager=h}},i.prototype.renderCanvas=function(t,e,r,i,n){if(this.valid){n=!!n;var o=c;o.identity(),r&&o.append(r),o.tx+=t.x,o.ty+=t.y;var s=e.worldTransform;e.worldTransform=o,e.worldAlpha=1;var a,h,u=e.children;for(a=0,h=u.length;h>a;++a)u[a].updateTransform();i&&this.textureBuffer.clear();var l=this.textureBuffer.context,p=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(e,l),this.renderer.resolution=p,e.worldTransform===o&&(e.worldTransform=s)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(t){var e=new Image;return e.src=this.getBase64(t),e},i.prototype.getBase64=function(t){return this.getCanvas(t).toDataURL()},i.prototype.getCanvas=function(t){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution,i=this.renderer.gl,n=new Uint8Array(4*e*r);i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null);var o=new h(e,r),s=o.context.getImageData(0,0,e,r);return s.data.set(n),o.context.putImageData(s,0,0),o.canvas}if(t||(t=p,t.width=this.textureBuffer.canvas.width,t.height=this.textureBuffer.canvas.height),t.width===this.textureBuffer.canvas.width&&t.height===this.textureBuffer.canvas.height)return this.textureBuffer.canvas;var a=this.resolution,o=new h(t.width*a,t.height*a),s=this.textureBuffer.context.getImageData(t.x*a,t.y*a,t.width*a,t.height*a);return o.context.putImageData(s,0,0),o.canvas},i.prototype.getPixels=function(t){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var i=this.renderer.gl,n=new Uint8Array(4*e*r);return i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null),n}return this.textureBuffer.canvas.getContext("2d").getImageData(t.x*this.resolution,t.y*this.resolution,e,r).data},i.prototype.getPixel=function(t,e,r){return p.x=e,p.y=r,p.width=1/this.resolution,p.height=1/this.resolution,t&&(p.x+=t.x,p.y+=t.y),this.getPixels(p)}},{"../const":38,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/webgl/managers/FilterManager":78,"../renderers/webgl/utils/RenderTarget":90,"./BaseTexture":99,"./Texture":101}],99:[function(t,e,r){function i(t,e,r){s.call(this),this.uid=n.uid(),this.resolution=r||1,this.width=100,this.height=100,this.realWidth=100,this.realHeight=100,this.scaleMode=e||o.SCALE_MODES.DEFAULT,this.hasLoaded=!1,this.isLoading=!1,this.source=null,this.premultipliedAlpha=!0,this.imageUrl=null,this.isPowerOfTwo=!1,this.mipmap=!1,this._glTextures={},this._active=!1,this._id=0,t&&this.loadSource(t)}var n=t("../utils"),o=t("../const"),s=t("eventemitter3");i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.update=function(){this.realWidth=this.source.naturalWidth||this.source.width,this.realHeight=this.source.naturalHeight||this.source.height,this.width=this.realWidth/this.resolution,this.height=this.realHeight/this.resolution,this.isPowerOfTwo=n.isPowerOfTwo(this.realWidth,this.realHeight),this.emit("update",this)},i.prototype.loadSource=function(t){var e=this.isLoading;if(this.hasLoaded=!1,this.isLoading=!1,e&&this.source&&(this.source.onload=null,this.source.onerror=null),this.source=t,(this.source.complete||this.source.getContext)&&this.source.width&&this.source.height)this._sourceLoaded();else if(!t.getContext){this.isLoading=!0;var r=this;t.onload=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r._sourceLoaded(),r.emit("loaded",r))},t.onerror=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r.emit("error",r))},t.complete&&t.src&&(this.isLoading=!1,t.onload=null,t.onerror=null,t.width&&t.height?(this._sourceLoaded(),e&&this.emit("loaded",this)):e&&this.emit("error",this))}},i.prototype._sourceLoaded=function(){this.hasLoaded=!0,this.update()},i.prototype.destroy=function(){this.imageUrl?(delete n.BaseTextureCache[this.imageUrl],delete n.TextureCache[this.imageUrl],this.imageUrl=null,navigator.isCocoonJS||(this.source.src="")):this.source&&this.source._pixiId&&delete n.BaseTextureCache[this.source._pixiId],this.source=null,this.dispose()},i.prototype.dispose=function(){this.emit("dispose",this)},i.prototype.updateSourceImage=function(t){this.source.src=t,this.loadSource(this.source)},i.fromImage=function(t,e,r){var o=n.BaseTextureCache[t];if(void 0===e&&0!==t.indexOf("data:")&&(e=!0),!o){var s=new Image;e&&(s.crossOrigin=""),o=new i(s,r),o.imageUrl=t,s.src=t,n.BaseTextureCache[t]=o,o.resolution=n.getResolutionOfUrl(t)}return o},i.fromCanvas=function(t,e){t._pixiId||(t._pixiId="canvas_"+n.uid());var r=n.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),n.BaseTextureCache[t._pixiId]=r),r}},{"../const":38,"../utils":107,eventemitter3:25}],100:[function(t,e,r){function i(t,e){if(!renderer)throw new Error("Unable to create RenderTexture, you must pass a renderer into the constructor.");o.call(this,t,e),this.valid=!0,this._updateUvs()}var n=t("./BaseRenderTexture"),o=t("./Texture"),s=t("../math");t("../const"),new s.Matrix;i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.resize=function(t,e,r){this.valid=t>0&&e>0,this._frame.width=this.crop.width=t,this._frame.height=this.crop.height=e,r&&this.baseTexture.resize(t,e),this._updateUvs()},i.prototype.clear=function(){this.valid&&this.baseTexture.clear(this.frame)},i.prototype.render=function(t,e,r,i){this.valid&&this.baseTexture.render(this.frame,t,e,r,i)},i.prototype.getImage=function(){return this.baseTexture.getImage(this.frame)},i.prototype.getBase64=function(){return this.getBase64.getImage(this.frame)},i.prototype.getCanvas=function(){return this.baseTexture.getCanvas(this.frame)},i.prototype.getPixels=function(){return this.baseTexture.getPixels(this.frame)},i.prototype.getPixel=function(t,e){return this.baseTexture.getPixel(this.frame,t,e)},i.create=function(t,e,r,o,s){return new i(new n(t,e,r,o,s))}},{"../const":38,"../math":56,"./BaseRenderTexture":98,"./Texture":101}],101:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":56,"../utils":107,"./BaseTexture":99,"./TextureUvs":102,"./VideoBaseTexture":103,eventemitter3:25}],102:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],103:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],105:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":104}],106:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],107:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":108,async:16,eventemitter3:25}],108:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],109:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":53, -"./extras":116,"./filters":133,"./mesh":158}],110:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":53}],118:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":53,"../blur/BlurXFilter":121,"../blur/BlurYFilter":122}],119:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){ -t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":53}],125:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":53}],126:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":53}],127:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":53}],128:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":53}],129:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":53}],130:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":53}],140:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":53}],141:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":53,"./TiltShiftXFilter":142,"./TiltShiftYFilter":143}],142:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":140}],143:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":140}],144:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":53}],145:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":53,"./deprecation":109,"./extras":116,"./filters":133,"./interaction":148,"./loaders":151,"./mesh":158,"./polyfill":163}],146:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":53}],147:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){ -var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":53,"./InteractionData":146,"./interactiveTarget":149}],148:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":146,"./InteractionManager":147,"./interactiveTarget":149}],149:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],150:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":53}],156:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":155}],157:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":53,"./Mesh":155}],158:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":155,"./Plane":156,"./Rope":157,"./webgl/MeshRenderer":159,"./webgl/MeshShader":160}],159:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":53,"../Mesh":155}],160:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":53}],161:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],162:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],163:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":161,"./Object.assign":162,"./requestAnimationFrame":164}],164:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[145])(145)}); +i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.complete=function(){this.data&&this.data.removeEventListener&&(this.data.removeEventListener("error",this._boundOnError),this.data.removeEventListener("load",this._boundComplete),this.data.removeEventListener("progress",this._boundOnProgress),this.data.removeEventListener("canplaythrough",this._boundComplete)),this.xhr&&(this.xhr.removeEventListener?(this.xhr.removeEventListener("error",this._boundXhrOnError),this.xhr.removeEventListener("abort",this._boundXhrOnAbort),this.xhr.removeEventListener("progress",this._boundOnProgress),this.xhr.removeEventListener("load",this._boundXhrOnLoad)):(this.xhr.onerror=null,this.xhr.ontimeout=null,this.xhr.onprogress=null,this.xhr.onload=null)),this.emit("complete",this)},i.prototype.load=function(t){switch(this.emit("start",this),t&&this.once("complete",t),(this.crossOrigin===!1||"string"!=typeof this.crossOrigin)&&(this.crossOrigin=this._determineCrossOrigin(this.url)),this.loadType){case i.LOAD_TYPE.IMAGE:this._loadImage();break;case i.LOAD_TYPE.AUDIO:this._loadElement("audio");break;case i.LOAD_TYPE.VIDEO:this._loadElement("video");break;case i.LOAD_TYPE.XHR:default:h&&this.crossOrigin?this._loadXdr():this._loadXhr()}},i.prototype._loadImage=function(){this.data=new Image,this.crossOrigin&&(this.data.crossOrigin=this.crossOrigin),this.data.src=this.url,this.isImage=!0,this.data.addEventListener("error",this._boundOnError,!1),this.data.addEventListener("load",this._boundComplete,!1),this.data.addEventListener("progress",this._boundOnProgress,!1)},i.prototype._loadElement=function(t){if("audio"===t&&"undefined"!=typeof Audio?this.data=new Audio:this.data=document.createElement(t),null===this.data)return this.error=new Error("Unsupported element "+t),void this.complete();if(navigator.isCocoonJS)this.data.src=Array.isArray(this.url)?this.url[0]:this.url;else if(Array.isArray(this.url))for(var e=0;e0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","gl-matrix":"git+https://github.com/toji/gl-matrix.git","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.transform.dirty=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":57,"../textures/RenderTexture":101,"../utils":108,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.transform=new a,this.position=this.transform.position,this.scale=this.transform.scale,this.pivot=this.transform.pivot,this.skew=this.transform.skew,this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=this.transform.worldTransform,this.localTransform=this.transform.localTransform,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),t("./TransformStatic")),h=new n.Matrix,u={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return h.tx=-i.x,h.ty=-i.y,n.render(this,h),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":57,"../textures/RenderTexture":101,"./TransformStatic":42,eventemitter3:25}],41:[function(t,e,r){function i(t,e,r){this._x=e||0,this._y=r||0,this.transform=t}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this._x},set:function(t){this._x=t,this.transform.dirty=!0}},y:{get:function(){return this._y},set:function(t){this._y=t,this.transform.dirty=!0}}}),i.prototype.set=function(t,e){this._x=t||0,this._y=e||(0!==e?this._x:0),this.transform.dirty=!0}},{}],42:[function(t,e,r){function i(){this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.position=new o(this,0),this.scale=new o(this,1,1),this.pivot=new o(this,0,0),this.skew=new o(this,0,0),this.rotation=0,this._sr=Math.sin(0),this._cr=Math.cos(0),this.dirty=!0}var n=t("../math"),o=t("./ObservablePoint");i.prototype.constructor=i,i.prototype.updateTransform=function(t){var e=t.worldTransform,r=this.worldTransform,i=this.localTransform;console.log("DIRTY"),this.dirty&&(i.a=this._cr*this.scale._x,i.b=this._sr*this.scale._x,i.c=-this._sr*this.scale._y,i.d=this._cr*this.scale._y,i.tx=this.position._x-(this.pivot._x*i.a+this.pivot._y*i.c),i.ty=this.position._y-(this.pivot._x*i.b+this.pivot._y*i.d)),(this.dirty||parent.dirty)&&(r.a=i.a*e.a+i.b*e.c,r.b=i.a*e.b+i.b*e.d,r.c=i.c*e.a+i.d*e.c,r.d=i.c*e.b+i.d*e.d,r.tx=i.tx*e.a+i.ty*e.c+e.tx,r.ty=i.tx*e.b+i.ty*e.d+e.ty)},e.exports=i},{"../math":57,"./ObservablePoint":41}],43:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils":108,"./WebGLGraphicsData":46,"./shaders/PrimitiveShader":47,"./utils/buildCircle":48,"./utils/buildComplexPoly":49,"./utils/buildLine":50,"./utils/buildPoly":51,"./utils/buildRectangle":52,"./utils/buildRoundedRectangle":53,earcut:24}],46:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],47:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],48:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":108,"./buildLine":50}],49:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":108,"./buildLine":50}],50:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":57,"../../../utils":108}],51:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":108}],52:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":108,"./buildLine":50}],53:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":108,"./buildLine":50}],54:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),BaseRenderTexture:t("./textures/BaseRenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":43,"./graphics/GraphicsData":44,"./graphics/webgl/GraphicsRenderer":45,"./math":57,"./particles/ParticleContainer":63,"./particles/webgl/ParticleRenderer":65,"./renderers/canvas/CanvasRenderer":68,"./renderers/canvas/utils/CanvasBuffer":69,"./renderers/canvas/utils/CanvasGraphics":70,"./renderers/webgl/WebGLRenderer":74,"./renderers/webgl/filters/AbstractFilter":75,"./renderers/webgl/filters/FXAAFilter":76,"./renderers/webgl/filters/SpriteMaskFilter":77,"./renderers/webgl/managers/ShaderManager":81,"./renderers/webgl/managers/WebGLManager":83,"./renderers/webgl/shaders/Shader":86,"./renderers/webgl/utils/ObjectRenderer":89,"./renderers/webgl/utils/RenderTarget":91,"./sprites/Sprite":95,"./sprites/webgl/SpriteRenderer":96,"./text/Text":98,"./textures/BaseRenderTexture":99,"./textures/BaseTexture":100,"./textures/RenderTexture":101,"./textures/Texture":102,"./textures/TextureUvs":103,"./textures/VideoBaseTexture":104,"./ticker":106,"./utils":108,"pixi-gl-core":1}],55:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":56}],56:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],57:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":55,"./Point":56,"./shapes/Circle":58,"./shapes/Ellipse":59,"./shapes/Polygon":60,"./shapes/Rectangle":61,"./shapes/RoundedRectangle":62}],58:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":61}],59:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":61}],60:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":56}],61:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],63:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"./ParticleBuffer":64,"./ParticleShader":66}],66:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{ +uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":87}],67:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,transform:{worldTransform:new o.Matrix},worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":57,"../utils":108,eventemitter3:25}],68:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":57,"../../utils":108,"../SystemRenderer":67,"./utils/CanvasMaskManager":71}],69:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],70:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],71:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":70}],72:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":87}],76:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\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\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\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)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":75}],77:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":57,"./AbstractFilter":75}],78:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":83}],79:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":108}],87:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":86}],88:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],89:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":83}],90:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],91:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=(t("pixi-gl-core").GLTexture,t("pixi-gl-core").GLFramebuffer),s=t("./StencilMaskStack"),a=function(t,e,r,a,h,u){this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=h||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.defaultFrame=new PIXI.Rectangle,this.destinationFrame=null,this.sourceFrame=null,this.stencilBuffer=null,this.stencilMaskStack=new s,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=a||n.SCALE_MODES.DEFAULT,this.root=u,this.frameBuffer=o.createRGBA(t,100,100),this.root?this.frameBuffer.framebuffer=null:this.texture=this.frameBuffer.texture,this.resize(e,r)};a.prototype.constructor=a,e.exports=a,a.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},a.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},a.prototype.activate=function(t,e){var r=this.gl;this.frameBuffer.bind(),this.destinationFrame=t||this.destinationFrame||this.defaultFrame,this.sourceFrame=e||this.sourceFrame||t,this.calculateProjection(this.destinationFrame,this.sourceFrame),this.transform&&this.projectionMatrix.append(this.transform),this.destinationFrame!==this.sourceFrame?(r.enable(r.SCISSOR_TEST),r.scissor(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)):r.disable(r.SCISSOR_TEST),r.viewport(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)},a.prototype.calculateProjection=function(t,e){var r=this.projectionMatrix;e=e||t,r.identity(),this.root?(r.a=1/t.width*2,r.d=-1/t.height*2,r.tx=-1-e.x*r.a,r.ty=1-e.y*r.d):(r.a=1/t.width*2,r.d=1/t.height*2,r.tx=-1-e.x*r.a,r.ty=-1-e.y*r.d)},a.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.defaultFrame.width=t,this.defaultFrame.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},a.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":57,"../../../utils":108,"./StencilMaskStack":92,"pixi-gl-core":1}],92:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],93:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],94:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],95:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.transform.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0); +}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],98:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=t,this.height=e,this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(t){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear(!1,t))},i.prototype.renderWebGL=function(t,e,r,i,n){if(this.valid){if(n=void 0!==n?n:!0,this.textureBuffer.transform=r,this.textureBuffer.activate(),e.worldAlpha=1,n){e.worldTransform.identity(),e.currentBounds=null;var o,s,a=e.children;for(o=0,s=a.length;s>o;++o)a[o].updateTransform()}p.width=t.height,p.height=t.width;var h=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.textureBuffer.activate(t,p),console.log(e),this.renderer.renderDisplayObject(e,this.textureBuffer,i),this.renderer.filterManager=h}},i.prototype.renderCanvas=function(t,e,r,i,n){if(this.valid){n=!!n;var o=c;o.identity(),r&&o.append(r),o.tx+=t.x,o.ty+=t.y;var s=e.worldTransform;e.worldTransform=o,e.worldAlpha=1;var a,h,u=e.children;for(a=0,h=u.length;h>a;++a)u[a].updateTransform();i&&this.textureBuffer.clear();var l=this.textureBuffer.context,p=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(e,l),this.renderer.resolution=p,e.worldTransform===o&&(e.worldTransform=s)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(t){var e=new Image;return e.src=this.getBase64(t),e},i.prototype.getBase64=function(t){return this.getCanvas(t).toDataURL()},i.prototype.getCanvas=function(t){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution,i=this.renderer.gl,n=new Uint8Array(4*e*r);i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null);var o=new h(e,r),s=o.context.getImageData(0,0,e,r);return s.data.set(n),o.context.putImageData(s,0,0),o.canvas}if(t||(t=p,t.width=this.textureBuffer.canvas.width,t.height=this.textureBuffer.canvas.height),t.width===this.textureBuffer.canvas.width&&t.height===this.textureBuffer.canvas.height)return this.textureBuffer.canvas;var a=this.resolution,o=new h(t.width*a,t.height*a),s=this.textureBuffer.context.getImageData(t.x*a,t.y*a,t.width*a,t.height*a);return o.context.putImageData(s,0,0),o.canvas},i.prototype.getPixels=function(t){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var i=this.renderer.gl,n=new Uint8Array(4*e*r);return i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null),n}return this.textureBuffer.canvas.getContext("2d").getImageData(t.x*this.resolution,t.y*this.resolution,e,r).data},i.prototype.getPixel=function(t,e,r){return p.x=e,p.y=r,p.width=1/this.resolution,p.height=1/this.resolution,t&&(p.x+=t.x,p.y+=t.y),this.getPixels(p)}},{"../const":38,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/webgl/managers/FilterManager":79,"../renderers/webgl/utils/RenderTarget":91,"./BaseTexture":100,"./Texture":102}],100:[function(t,e,r){function i(t,e,r){s.call(this),this.uid=n.uid(),this.resolution=r||1,this.width=100,this.height=100,this.realWidth=100,this.realHeight=100,this.scaleMode=e||o.SCALE_MODES.DEFAULT,this.hasLoaded=!1,this.isLoading=!1,this.source=null,this.premultipliedAlpha=!0,this.imageUrl=null,this.isPowerOfTwo=!1,this.mipmap=!1,this._glTextures={},this._active=!1,this._id=0,t&&this.loadSource(t)}var n=t("../utils"),o=t("../const"),s=t("eventemitter3");i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.update=function(){this.realWidth=this.source.naturalWidth||this.source.width,this.realHeight=this.source.naturalHeight||this.source.height,this.width=this.realWidth/this.resolution,this.height=this.realHeight/this.resolution,this.isPowerOfTwo=n.isPowerOfTwo(this.realWidth,this.realHeight),this.emit("update",this)},i.prototype.loadSource=function(t){var e=this.isLoading;if(this.hasLoaded=!1,this.isLoading=!1,e&&this.source&&(this.source.onload=null,this.source.onerror=null),this.source=t,(this.source.complete||this.source.getContext)&&this.source.width&&this.source.height)this._sourceLoaded();else if(!t.getContext){this.isLoading=!0;var r=this;t.onload=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r._sourceLoaded(),r.emit("loaded",r))},t.onerror=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r.emit("error",r))},t.complete&&t.src&&(this.isLoading=!1,t.onload=null,t.onerror=null,t.width&&t.height?(this._sourceLoaded(),e&&this.emit("loaded",this)):e&&this.emit("error",this))}},i.prototype._sourceLoaded=function(){this.hasLoaded=!0,this.update()},i.prototype.destroy=function(){this.imageUrl?(delete n.BaseTextureCache[this.imageUrl],delete n.TextureCache[this.imageUrl],this.imageUrl=null,navigator.isCocoonJS||(this.source.src="")):this.source&&this.source._pixiId&&delete n.BaseTextureCache[this.source._pixiId],this.source=null,this.dispose()},i.prototype.dispose=function(){this.emit("dispose",this)},i.prototype.updateSourceImage=function(t){this.source.src=t,this.loadSource(this.source)},i.fromImage=function(t,e,r){var o=n.BaseTextureCache[t];if(void 0===e&&0!==t.indexOf("data:")&&(e=!0),!o){var s=new Image;e&&(s.crossOrigin=""),o=new i(s,r),o.imageUrl=t,s.src=t,n.BaseTextureCache[t]=o,o.resolution=n.getResolutionOfUrl(t)}return o},i.fromCanvas=function(t,e){t._pixiId||(t._pixiId="canvas_"+n.uid());var r=n.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),n.BaseTextureCache[t._pixiId]=r),r}},{"../const":38,"../utils":108,eventemitter3:25}],101:[function(t,e,r){function i(t,e){if(!renderer)throw new Error("Unable to create RenderTexture, you must pass a renderer into the constructor.");o.call(this,t,e),this.valid=!0,this._updateUvs()}var n=t("./BaseRenderTexture"),o=t("./Texture"),s=t("../math");t("../const"),new s.Matrix;i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.resize=function(t,e,r){this.valid=t>0&&e>0,this._frame.width=this.crop.width=t,this._frame.height=this.crop.height=e,r&&this.baseTexture.resize(t,e),this._updateUvs()},i.prototype.clear=function(){this.valid&&this.baseTexture.clear(this.frame)},i.prototype.render=function(t,e,r,i){this.valid&&this.baseTexture.render(this.frame,t,e,r,i)},i.prototype.getImage=function(){return this.baseTexture.getImage(this.frame)},i.prototype.getBase64=function(){return this.getBase64.getImage(this.frame)},i.prototype.getCanvas=function(){return this.baseTexture.getCanvas(this.frame)},i.prototype.getPixels=function(){return this.baseTexture.getPixels(this.frame)},i.prototype.getPixel=function(t,e){return this.baseTexture.getPixel(this.frame,t,e)},i.create=function(t,e,r,o,s){return new i(new n(t,e,r,o,s))}},{"../const":38,"../math":57,"./BaseRenderTexture":99,"./Texture":102}],102:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":57,"../utils":108,"./BaseTexture":100,"./TextureUvs":103,"./VideoBaseTexture":104,eventemitter3:25}],103:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],104:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],106:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":105}],107:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],108:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":109,async:16,eventemitter3:25}],109:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],110:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":54, +"./extras":117,"./filters":134,"./mesh":159}],111:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":54}],119:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":54,"../blur/BlurXFilter":122,"../blur/BlurYFilter":123}],120:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){ +t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":54}],126:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":54}],127:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":54}],128:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":54}],129:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":54}],130:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":54}],131:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":54}],141:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":54}],142:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":54,"./TiltShiftXFilter":143,"./TiltShiftYFilter":144}],143:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":141}],144:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":141}],145:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":54}],146:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":54,"./deprecation":110,"./extras":117,"./filters":134,"./interaction":149,"./loaders":152,"./mesh":159,"./polyfill":164}],147:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":54}],148:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){ +var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":54,"./InteractionData":147,"./interactiveTarget":150}],149:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":147,"./InteractionManager":148,"./interactiveTarget":150}],150:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],151:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":54}],157:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":156}],158:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":54,"./Mesh":156}],159:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":156,"./Plane":157,"./Rope":158,"./webgl/MeshRenderer":160,"./webgl/MeshShader":161}],160:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":54,"../Mesh":156}],161:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":54}],162:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],163:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],164:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":162,"./Object.assign":163,"./requestAnimationFrame":165}],165:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[146])(146)}); //# sourceMappingURL=pixi.min.js.map diff --git a/bin/pixi.min.js.map b/bin/pixi.min.js.map index 102b3e1..c95a532 100644 --- a/bin/pixi.min.js.map +++ b/bin/pixi.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","gl-matrix","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","dirtyTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Transform","pivot","_rotation","filterArea","_sr","_cr","_tempDisplayObjectParent","CachePoint","doc","posiiton","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const","./Transform",41,"localTransform","Point","parentTransform","pt","lt",42,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",43,"_lineTint","_fillTint",44,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",45,"glPoints","glIndices","Uint16Array","deleteBuffer",46,47,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",48,49,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",50,"vertPos",51,"rectData",52,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",53,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","BaseRenderTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseRenderTexture","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",54,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",55,56,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",57,"dx","dy","r2","./Rectangle",58,"normx","normy",59,"points_","il","xi","yi","xj","yj","intersect","../Point",60,61,62,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",63,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",64,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",65,"TextureShader","../../renderers/webgl/shaders/TextureShader",66,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",67,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",68,69,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",70,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",71,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",72,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",73,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",74,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",75,"./AbstractFilter",76,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",77,"currentBlendMode","blendFunc","./WebGLManager",78,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",79,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",80,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",81,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",82,83,"./Shader",84,85,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",86,"customUniforms","customAttributes","uSampler",87,88,"../managers/WebGLManager",89,"colors","rect2",90,"StencilMaskStack","frameBuffer","defaultFrame","destinationFrame","sourceFrame","stencilBuffer","calculateProjection","SCISSOR_TEST","scissor","viewport","pm","projectionFrame","./StencilMaskStack",91,92,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",93,94,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",95,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",96,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",97,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",98,"textureBuffer","tempRect","currentBounds","cachedWt","realResolution","getImage","image","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",99,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","getResolutionOfUrl",100,"baseRenderTexture","_updateUvs","updateBase","./BaseRenderTexture",101,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",102,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",103,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",104,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",105,"shared","./Ticker",106,"totalIndices",107,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",108,"__plugins","pluginName","ctor",109,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",110,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",111,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",112,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",113,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",114,"getChildByName",115,"getGlobalPosition",116,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",117,"AsciiFilter","pixelSize","../../core",118,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",119,"BlurDirFilter","dirX","dirY","strength","passes",120,"BlurFilter","./BlurXFilter","./BlurYFilter",121,"flip","flop",122,123,"SmartBlurFilter",124,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",125,"ColorStepFilter",126,"ConvolutionFilter","texelSize",127,"CrossHatchFilter",128,"DisplacementFilter","mapSampler",129,"DotScreenFilter",130,"BlurYTintFilter",131,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",132,"GrayFilter","gray",133,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",134,135,"noise",136,137,"red","green","blue",138,139,"center","params",140,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",141,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",142,"./TiltShiftAxisFilter",143,144,145,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",146,"InteractionData","originalEvent","getLocalPosition","globalPos",147,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",148,"interactiveTarget","./InteractionManager",149,150,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",151,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",152,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",153,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",154,155,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",156,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",157,"factor","nextPoint","perpLength","num","perpX","perpY",158,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",159,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",160,161,"isNaN",162,163,"./Math.sign","./Object.assign","./requestAnimationFrame",164,"Date","getTime","startTime","vendors","delay"],"mappings":"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AA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAw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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","gl-matrix","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","worldAlpha","alpha","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Transform","pivot","_rotation","localTransform","filterArea","_sr","_cr","dirtyTransform","_tempDisplayObjectParent","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","displayObjectUpdateTransform","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const","./TransformStatic",41,"ObservablePoint","_x","_y",42,"parentTransform","pt","lt","./ObservablePoint",43,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","Point","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",44,"_lineTint","_fillTint",45,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",46,"glPoints","glIndices","Uint16Array","deleteBuffer",47,48,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",49,50,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",51,"vertPos",52,"rectData",53,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",54,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","BaseRenderTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseRenderTexture","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",55,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",56,57,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",58,"dx","dy","r2","./Rectangle",59,"normx","normy",60,"points_","il","xi","yi","xj","yj","intersect","../Point",61,62,63,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",64,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",65,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",66,"TextureShader","../../renderers/webgl/shaders/TextureShader",67,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",68,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",69,70,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",71,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",72,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",73,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",74,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",75,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",76,"./AbstractFilter",77,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",78,"currentBlendMode","blendFunc","./WebGLManager",79,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",80,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",81,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",82,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",83,84,"./Shader",85,86,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",87,"customUniforms","customAttributes","uSampler",88,89,"../managers/WebGLManager",90,"colors","rect2",91,"StencilMaskStack","frameBuffer","defaultFrame","destinationFrame","sourceFrame","stencilBuffer","calculateProjection","SCISSOR_TEST","scissor","viewport","pm","projectionFrame","./StencilMaskStack",92,93,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",94,95,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",96,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",97,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",98,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",99,"textureBuffer","tempRect","currentBounds","cachedWt","realResolution","getImage","image","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",100,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","getResolutionOfUrl",101,"baseRenderTexture","_updateUvs","updateBase","./BaseRenderTexture",102,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",103,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",104,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",105,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",106,"shared","./Ticker",107,"totalIndices",108,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",109,"__plugins","pluginName","ctor",110,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",111,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",112,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",113,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",114,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",115,"getChildByName",116,"getGlobalPosition",117,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",118,"AsciiFilter","pixelSize","../../core",119,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",120,"BlurDirFilter","dirX","dirY","strength","passes",121,"BlurFilter","./BlurXFilter","./BlurYFilter",122,"flip","flop",123,124,"SmartBlurFilter",125,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",126,"ColorStepFilter",127,"ConvolutionFilter","texelSize",128,"CrossHatchFilter",129,"DisplacementFilter","mapSampler",130,"DotScreenFilter",131,"BlurYTintFilter",132,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",133,"GrayFilter","gray",134,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",135,136,"noise",137,138,"red","green","blue",139,140,"center","params",141,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",142,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",143,"./TiltShiftAxisFilter",144,145,146,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",147,"InteractionData","originalEvent","getLocalPosition","globalPos",148,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",149,"interactiveTarget","./InteractionManager",150,151,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",152,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",153,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",154,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",155,156,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",157,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",158,"factor","nextPoint","perpLength","num","perpX","perpY",159,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",160,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",161,162,"isNaN",163,164,"./Math.sign","./Object.assign","./requestAnimationFrame",165,"Date","getTime","startTime","vendors","delay"],"mappings":"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AA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 64e912a..9199f9d 100644 --- a/src/core/display/Container.js +++ b/src/core/display/Container.js @@ -399,7 +399,7 @@ this.children[i].updateTransform(); } - this.dirtyTransform = false; + this.transform.dirty = false; }; // performance increase to avoid using call.. (10x faster) diff --git a/src/core/display/DisplayObject.js b/src/core/display/DisplayObject.js index 06bd523..3cc5c2f 100644 --- a/src/core/display/DisplayObject.js +++ b/src/core/display/DisplayObject.js @@ -2,7 +2,7 @@ RenderTexture = require('../textures/RenderTexture'), EventEmitter = require('eventemitter3'), CONST = require('../const'), - Transform = require('./Transform'), + Transform = require('./TransformStatic'), _tempMatrix = new math.Matrix(), _tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1, children:[]}; @@ -114,22 +114,6 @@ */ this.filterArea = null; - /**xww - * cached sin rotation - * - * @member {number} - * @private - */ - this._sr = 0; - - /** - * cached cos rotation - * - * @member {number} - * @private - */ - this._cr = 1; - /** * The original, cached bounds of the object * @@ -154,7 +138,7 @@ */ this._mask = null; - this.dirtyTransform = true; + // this.dirtyTransform = true; } // constructor @@ -238,9 +222,9 @@ set: function (value) { this._rotation = value; - this.dirtyTransform = true; - this._sr = Math.sin(value); - this._cr = Math.cos(value); + this.transform.dirty = true; + this.transform._sr = Math.sin(value); + this.transform._cr = Math.cos(value); } }, @@ -344,6 +328,7 @@ */ DisplayObject.prototype.updateTransform = function () { + //if(this.transform.dirty || parent.transform.dirty) this.transform.updateTransform(this.parent.transform); // multiply the alphas.. this.worldAlpha = this.alpha * this.parent.worldAlpha; diff --git a/src/core/display/ObservablePoint.js b/src/core/display/ObservablePoint.js new file mode 100644 index 0000000..fd7a04b --- /dev/null +++ b/src/core/display/ObservablePoint.js @@ -0,0 +1,68 @@ +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents + * the horizontal axis and y represents the vertical axis. + * + * @class + * @memberof PIXI + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +function ObservablePoint(transform, x, y) +{ + this._x = x || 0; + this._y = y || 0; + + this.transform = transform; +} + +ObservablePoint.prototype.constructor = ObservablePoint; +module.exports = ObservablePoint; + + + +Object.defineProperties(ObservablePoint.prototype, { + /** + * The position of the displayObject on the x axis relative to the local coordinates of the parent. + * + * @member {number} + * @memberof PIXI.DisplayObject# + */ + x: { + get: function () + { + return this._x; + }, + set: function (value) + { + this._x = value; + this.transform.dirty = true; + } + }, + + y: { + get: function () + { + return this._y; + }, + set: function (value) + { + this._y = value; + this.transform.dirty = true; + } + } +}); + +/** + * Sets the point to a new x and y position. + * If y is omitted, both x and y will be set to x. + * + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +ObservablePoint.prototype.set = function (x, y) +{ + this._x = x || 0; + this._y = y || ( (y !== 0) ? this._x : 0 ); + + this.transform.dirty = true; +}; diff --git a/bin/pixi.js b/bin/pixi.js index df52170..915f5c1 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -1,7 +1,7 @@ /** * @license * pixi.js - v3.0.10-dev - * Compiled 2016-01-18T21:33:26.540Z + * Compiled 2016-01-18T22:34:48.843Z * * pixi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -8072,7 +8072,7 @@ core.CanvasRenderer.registerPlugin('accessibility', AccessibilityManager); -},{"../core":53,"./accessibleTarget":36}],36:[function(require,module,exports){ +},{"../core":54,"./accessibleTarget":36}],36:[function(require,module,exports){ /** * Default property values of accessible objects * used by {@link PIXI.accessibility.AccessibilityManager}. @@ -8759,7 +8759,7 @@ this.children[i].updateTransform(); } - this.dirtyTransform = false; + this.transform.dirty = false; }; // performance increase to avoid using call.. (10x faster) @@ -9005,12 +9005,12 @@ this.children = null; }; -},{"../math":56,"../textures/RenderTexture":100,"../utils":107,"./DisplayObject":40}],40:[function(require,module,exports){ +},{"../math":57,"../textures/RenderTexture":101,"../utils":108,"./DisplayObject":40}],40:[function(require,module,exports){ var math = require('../math'), RenderTexture = require('../textures/RenderTexture'), EventEmitter = require('eventemitter3'), CONST = require('../const'), - Transform = require('./Transform'), + Transform = require('./TransformStatic'), _tempMatrix = new math.Matrix(), _tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1, children:[]}; @@ -9122,22 +9122,6 @@ */ this.filterArea = null; - /**xww - * cached sin rotation - * - * @member {number} - * @private - */ - this._sr = 0; - - /** - * cached cos rotation - * - * @member {number} - * @private - */ - this._cr = 1; - /** * The original, cached bounds of the object * @@ -9162,7 +9146,7 @@ */ this._mask = null; - this.dirtyTransform = true; + // this.dirtyTransform = true; } // constructor @@ -9246,9 +9230,9 @@ set: function (value) { this._rotation = value; - this.dirtyTransform = true; - this._sr = Math.sin(value); - this._cr = Math.cos(value); + this.transform.dirty = true; + this.transform._sr = Math.sin(value); + this.transform._cr = Math.cos(value); } }, @@ -9352,6 +9336,7 @@ */ DisplayObject.prototype.updateTransform = function () { + //if(this.transform.dirty || parent.transform.dirty) this.transform.updateTransform(this.parent.transform); // multiply the alphas.. this.worldAlpha = this.alpha * this.parent.worldAlpha; @@ -9554,9 +9539,79 @@ this.filterArea = null; }; -},{"../const":38,"../math":56,"../textures/RenderTexture":100,"./Transform":41,"eventemitter3":25}],41:[function(require,module,exports){ -var math = require('../math'); +},{"../const":38,"../math":57,"../textures/RenderTexture":101,"./TransformStatic":42,"eventemitter3":25}],41:[function(require,module,exports){ +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents + * the horizontal axis and y represents the vertical axis. + * + * @class + * @memberof PIXI + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +function ObservablePoint(transform, x, y) +{ + this._x = x || 0; + this._y = y || 0; + this.transform = transform; +} + +ObservablePoint.prototype.constructor = ObservablePoint; +module.exports = ObservablePoint; + + + +Object.defineProperties(ObservablePoint.prototype, { + /** + * The position of the displayObject on the x axis relative to the local coordinates of the parent. + * + * @member {number} + * @memberof PIXI.DisplayObject# + */ + x: { + get: function () + { + return this._x; + }, + set: function (value) + { + this._x = value; + this.transform.dirty = true; + } + }, + + y: { + get: function () + { + return this._y; + }, + set: function (value) + { + this._y = value; + this.transform.dirty = true; + } + } +}); + +/** + * Sets the point to a new x and y position. + * If y is omitted, both x and y will be set to x. + * + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +ObservablePoint.prototype.set = function (x, y) +{ + this._x = x || 0; + this._y = y || ( (y !== 0) ? this._x : 0 ); + + this.transform.dirty = true; +}; + +},{}],42:[function(require,module,exports){ +var math = require('../math'); +var ObservablePoint = require('./ObservablePoint'); /** * The Point object represents a location in a two-dimensional coordinate system, where x represents @@ -9572,17 +9627,19 @@ this.worldTransform = new math.Matrix(); this.localTransform = new math.Matrix(); - this.position = new math.Point(0.0); - this.scale = new math.Point(1,1); - this.pivot = new math.Point(0.0); - this.skew = new math.Point(0.0); + this.position = new ObservablePoint(this, 0); + this.scale = new ObservablePoint(this,1, 1); + this.pivot = new ObservablePoint(this, 0, 0); + this.skew = new ObservablePoint(this, 0,0); this.rotation = 0; this._sr = Math.sin(0); this._cr = Math.cos(0); - this.dirty = true; + + + this.updated = true; } Transform.prototype.constructor = Transform; @@ -9593,19 +9650,20 @@ var wt = this.worldTransform; var lt = this.localTransform; - if(this.dirty) { // get the matrix values of the displayobject based on its transform properties.. - lt.a = this._cr * this.scale.x; - lt.b = this._sr * this.scale.x; - lt.c = -this._sr * this.scale.y; - lt.d = this._cr * this.scale.y; - lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c); - lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d); + lt.a = this._cr * this.scale._x; + lt.b = this._sr * this.scale._x; + lt.c = -this._sr * this.scale._y; + lt.d = this._cr * this.scale._y; + lt.tx = this.position._x - (this.pivot._x * lt.a + this.pivot._y * lt.c); + lt.ty = this.position._y - (this.pivot._x * lt.b + this.pivot._y * lt.d); } - if(this.dirty || parent.dirty) + this.updated = this.dirty || parentTransform.dirty; + + if(this.updated) { // concat the parent matrix with the objects transform. wt.a = lt.a * pt.a + lt.b * pt.c; @@ -9613,21 +9671,16 @@ wt.c = lt.c * pt.a + lt.d * pt.c; wt.d = lt.c * pt.b + lt.d * pt.d; wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; - wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; - - // this.dirty = false; - // return true; + wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; } - -// this.dirty = false; - // return false; + } module.exports = Transform; -},{"../math":56}],42:[function(require,module,exports){ +},{"../math":57,"./ObservablePoint":41}],43:[function(require,module,exports){ var Container = require('../display/Container'), Texture = require('../textures/Texture'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), @@ -10787,7 +10840,7 @@ this._localBounds = null; }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/canvas/utils/CanvasGraphics":69,"../textures/Texture":101,"./GraphicsData":43}],43:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/canvas/utils/CanvasGraphics":70,"../textures/Texture":102,"./GraphicsData":44}],44:[function(require,module,exports){ /** * A GraphicsData object. * @@ -10880,7 +10933,7 @@ this.shape = null; }; -},{}],44:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ var utils = require('../../utils'), math = require('../../math'), CONST = require('../../const'), @@ -11200,7 +11253,7 @@ }; -},{"../../const":38,"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils":107,"./WebGLGraphicsData":45,"./shaders/PrimitiveShader":46,"./utils/buildCircle":47,"./utils/buildComplexPoly":48,"./utils/buildLine":49,"./utils/buildPoly":50,"./utils/buildRectangle":51,"./utils/buildRoundedRectangle":52,"earcut":24}],45:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils":108,"./WebGLGraphicsData":46,"./shaders/PrimitiveShader":47,"./utils/buildCircle":48,"./utils/buildComplexPoly":49,"./utils/buildLine":50,"./utils/buildPoly":51,"./utils/buildRectangle":52,"./utils/buildRoundedRectangle":53,"earcut":24}],46:[function(require,module,exports){ /** * An object containing WebGL specific properties to be used by the WebGL renderer * @@ -11318,7 +11371,7 @@ this.glIndices = null; }; -},{}],46:[function(require,module,exports){ +},{}],47:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -11370,7 +11423,7 @@ module.exports = PrimitiveShader; -},{"pixi-gl-core":1}],47:[function(require,module,exports){ +},{"pixi-gl-core":1}],48:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11457,7 +11510,7 @@ module.exports = buildCircle; -},{"../../../utils":107,"./buildLine":49}],48:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],49:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11528,7 +11581,7 @@ module.exports = buildComplexPoly; -},{"../../../utils":107,"./buildLine":49}],49:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],50:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'); @@ -11748,7 +11801,7 @@ }; module.exports = buildLine; -},{"../../../math":56,"../../../utils":107}],50:[function(require,module,exports){ +},{"../../../math":57,"../../../utils":108}],51:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -11811,7 +11864,7 @@ module.exports = buildPoly; -},{"../../../utils":107}],51:[function(require,module,exports){ +},{"../../../utils":108}],52:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11882,7 +11935,7 @@ }; module.exports = buildRectangle; -},{"../../../utils":107,"./buildLine":49}],52:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],53:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -12010,7 +12063,7 @@ module.exports = buildRoundedRectangle; -},{"../../../utils":107,"./buildLine":49}],53:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],54:[function(require,module,exports){ /** * @file Main export of the PIXI core library * @author Mat Groves @@ -12106,7 +12159,7 @@ } }); -},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":42,"./graphics/GraphicsData":43,"./graphics/webgl/GraphicsRenderer":44,"./math":56,"./particles/ParticleContainer":62,"./particles/webgl/ParticleRenderer":64,"./renderers/canvas/CanvasRenderer":67,"./renderers/canvas/utils/CanvasBuffer":68,"./renderers/canvas/utils/CanvasGraphics":69,"./renderers/webgl/WebGLRenderer":73,"./renderers/webgl/filters/AbstractFilter":74,"./renderers/webgl/filters/FXAAFilter":75,"./renderers/webgl/filters/SpriteMaskFilter":76,"./renderers/webgl/managers/ShaderManager":80,"./renderers/webgl/managers/WebGLManager":82,"./renderers/webgl/shaders/Shader":85,"./renderers/webgl/utils/ObjectRenderer":88,"./renderers/webgl/utils/RenderTarget":90,"./sprites/Sprite":94,"./sprites/webgl/SpriteRenderer":95,"./text/Text":97,"./textures/BaseRenderTexture":98,"./textures/BaseTexture":99,"./textures/RenderTexture":100,"./textures/Texture":101,"./textures/TextureUvs":102,"./textures/VideoBaseTexture":103,"./ticker":105,"./utils":107,"pixi-gl-core":1}],54:[function(require,module,exports){ +},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":43,"./graphics/GraphicsData":44,"./graphics/webgl/GraphicsRenderer":45,"./math":57,"./particles/ParticleContainer":63,"./particles/webgl/ParticleRenderer":65,"./renderers/canvas/CanvasRenderer":68,"./renderers/canvas/utils/CanvasBuffer":69,"./renderers/canvas/utils/CanvasGraphics":70,"./renderers/webgl/WebGLRenderer":74,"./renderers/webgl/filters/AbstractFilter":75,"./renderers/webgl/filters/FXAAFilter":76,"./renderers/webgl/filters/SpriteMaskFilter":77,"./renderers/webgl/managers/ShaderManager":81,"./renderers/webgl/managers/WebGLManager":83,"./renderers/webgl/shaders/Shader":86,"./renderers/webgl/utils/ObjectRenderer":89,"./renderers/webgl/utils/RenderTarget":91,"./sprites/Sprite":95,"./sprites/webgl/SpriteRenderer":96,"./text/Text":98,"./textures/BaseRenderTexture":99,"./textures/BaseTexture":100,"./textures/RenderTexture":101,"./textures/Texture":102,"./textures/TextureUvs":103,"./textures/VideoBaseTexture":104,"./ticker":106,"./utils":108,"pixi-gl-core":1}],55:[function(require,module,exports){ // @todo - ignore the too many parameters warning for now // should either fix it or change the jshint config // jshint -W072 @@ -12546,7 +12599,7 @@ */ Matrix.TEMP_MATRIX = new Matrix(); -},{"./Point":55}],55:[function(require,module,exports){ +},{"./Point":56}],56:[function(require,module,exports){ /** * The Point object represents a location in a two-dimensional coordinate system, where x represents * the horizontal axis and y represents the vertical axis. @@ -12616,7 +12669,7 @@ this.y = y || ( (y !== 0) ? this.x : 0 ) ; }; -},{}],56:[function(require,module,exports){ +},{}],57:[function(require,module,exports){ /** * Math classes and utilities mixed into PIXI namespace. * @@ -12638,7 +12691,7 @@ RoundedRectangle: require('./shapes/RoundedRectangle') }; -},{"./Matrix":54,"./Point":55,"./shapes/Circle":57,"./shapes/Ellipse":58,"./shapes/Polygon":59,"./shapes/Rectangle":60,"./shapes/RoundedRectangle":61}],57:[function(require,module,exports){ +},{"./Matrix":55,"./Point":56,"./shapes/Circle":58,"./shapes/Ellipse":59,"./shapes/Polygon":60,"./shapes/Rectangle":61,"./shapes/RoundedRectangle":62}],58:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12726,7 +12779,7 @@ return new Rectangle(this.x - this.radius, this.y - this.radius, this.radius * 2, this.radius * 2); }; -},{"../../const":38,"./Rectangle":60}],58:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],59:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12821,7 +12874,7 @@ return new Rectangle(this.x - this.width, this.y - this.height, this.width, this.height); }; -},{"../../const":38,"./Rectangle":60}],59:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],60:[function(require,module,exports){ var Point = require('../Point'), CONST = require('../../const'); @@ -12924,7 +12977,7 @@ return inside; }; -},{"../../const":38,"../Point":55}],60:[function(require,module,exports){ +},{"../../const":38,"../Point":56}],61:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13018,7 +13071,7 @@ return false; }; -},{"../../const":38}],61:[function(require,module,exports){ +},{"../../const":38}],62:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13110,7 +13163,7 @@ return false; }; -},{"../../const":38}],62:[function(require,module,exports){ +},{"../../const":38}],63:[function(require,module,exports){ var Container = require('../display/Container'), CONST = require('../const'); @@ -13429,7 +13482,7 @@ this._buffers = null; }; -},{"../const":38,"../display/Container":39}],63:[function(require,module,exports){ +},{"../const":38,"../display/Container":39}],64:[function(require,module,exports){ /** * @author Mat Groves @@ -13649,7 +13702,7 @@ this.gl.deleteBuffer(this.staticBuffer); }; -},{}],64:[function(require,module,exports){ +},{}],65:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), ParticleShader = require('./ParticleShader'), @@ -14125,7 +14178,7 @@ this.tempMatrix = null; }; -},{"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"./ParticleBuffer":63,"./ParticleShader":65}],65:[function(require,module,exports){ +},{"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"./ParticleBuffer":64,"./ParticleShader":66}],66:[function(require,module,exports){ var TextureShader = require('../../renderers/webgl/shaders/TextureShader'); /** @@ -14203,7 +14256,7 @@ module.exports = ParticleShader; -},{"../../renderers/webgl/shaders/TextureShader":86}],66:[function(require,module,exports){ +},{"../../renderers/webgl/shaders/TextureShader":87}],67:[function(require,module,exports){ var utils = require('../utils'), math = require('../math'), CONST = require('../const'), @@ -14464,7 +14517,7 @@ this._backgroundColorString = null; }; -},{"../const":38,"../math":56,"../utils":107,"eventemitter3":25}],67:[function(require,module,exports){ +},{"../const":38,"../math":57,"../utils":108,"eventemitter3":25}],68:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), CanvasMaskManager = require('./utils/CanvasMaskManager'), utils = require('../../utils'), @@ -14732,7 +14785,7 @@ } }; -},{"../../const":38,"../../math":56,"../../utils":107,"../SystemRenderer":66,"./utils/CanvasMaskManager":70}],68:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../utils":108,"../SystemRenderer":67,"./utils/CanvasMaskManager":71}],69:[function(require,module,exports){ /** * Creates a Canvas element of the given size. * @@ -14832,7 +14885,7 @@ this.canvas = null; }; -},{}],69:[function(require,module,exports){ +},{}],70:[function(require,module,exports){ var CONST = require('../../../const'); /** @@ -15186,7 +15239,7 @@ }; -},{"../../../const":38}],70:[function(require,module,exports){ +},{"../../../const":38}],71:[function(require,module,exports){ var CanvasGraphics = require('./CanvasGraphics'); /** @@ -15248,7 +15301,7 @@ CanvasMaskManager.prototype.destroy = function () {}; -},{"./CanvasGraphics":69}],71:[function(require,module,exports){ +},{"./CanvasGraphics":70}],72:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -15500,7 +15553,7 @@ */ CanvasTinter.tintMethod = CanvasTinter.canUseMultiply ? CanvasTinter.tintWithMultiply : CanvasTinter.tintWithPerPixel; -},{"../../../utils":107}],72:[function(require,module,exports){ +},{"../../../utils":108}],73:[function(require,module,exports){ var GLTexture = require('pixi-gl-core').GLTexture, utils = require('../../utils'); @@ -15640,7 +15693,7 @@ module.exports = TextureManager; -},{"../../utils":107,"pixi-gl-core":1}],73:[function(require,module,exports){ +},{"../../utils":108,"pixi-gl-core":1}],74:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), ShaderManager = require('./managers/ShaderManager'), MaskManager = require('./managers/MaskManager'), @@ -16037,7 +16090,7 @@ }; -},{"../../const":38,"../../utils":107,"../SystemRenderer":66,"./TextureManager":72,"./filters/FXAAFilter":75,"./managers/BlendModeManager":77,"./managers/FilterManager":78,"./managers/MaskManager":79,"./managers/ShaderManager":80,"./managers/StencilManager":81,"./utils/ObjectRenderer":88,"./utils/RenderTarget":90,"./utils/mapWebGLBlendModesToPixi":92,"./utils/mapWebGLDrawModesToPixi":93,"pixi-gl-core":1}],74:[function(require,module,exports){ +},{"../../const":38,"../../utils":108,"../SystemRenderer":67,"./TextureManager":73,"./filters/FXAAFilter":76,"./managers/BlendModeManager":78,"./managers/FilterManager":79,"./managers/MaskManager":80,"./managers/ShaderManager":81,"./managers/StencilManager":82,"./utils/ObjectRenderer":89,"./utils/RenderTarget":91,"./utils/mapWebGLBlendModesToPixi":93,"./utils/mapWebGLDrawModesToPixi":94,"pixi-gl-core":1}],75:[function(require,module,exports){ var DefaultShader = require('../shaders/TextureShader'); /** @@ -16149,7 +16202,7 @@ } }; -},{"../shaders/TextureShader":86}],75:[function(require,module,exports){ +},{"../shaders/TextureShader":87}],76:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'); // @see https://github.com/substack/brfs/issues/25 @@ -16204,7 +16257,7 @@ filterManager.applyFilter(shader, input, output); }; -},{"./AbstractFilter":74}],76:[function(require,module,exports){ +},{"./AbstractFilter":75}],77:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'), math = require('../../../math'); @@ -16301,7 +16354,7 @@ } }); -},{"../../../math":56,"./AbstractFilter":74}],77:[function(require,module,exports){ +},{"../../../math":57,"./AbstractFilter":75}],78:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'); /** @@ -16345,7 +16398,7 @@ return true; }; -},{"./WebGLManager":82}],78:[function(require,module,exports){ +},{"./WebGLManager":83}],79:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), RenderTarget = require('../utils/RenderTarget'), CONST = require('../../../const'), @@ -16797,7 +16850,7 @@ this.texturePool = null; }; -},{"../../../const":38,"../../../math":56,"../utils/Quad":89,"../utils/RenderTarget":90,"./WebGLManager":82}],79:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../utils/Quad":90,"../utils/RenderTarget":91,"./WebGLManager":83}],80:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), AlphaMaskFilter = require('../filters/SpriteMaskFilter'); @@ -16912,7 +16965,7 @@ }; -},{"../filters/SpriteMaskFilter":76,"./WebGLManager":82}],80:[function(require,module,exports){ +},{"../filters/SpriteMaskFilter":77,"./WebGLManager":83}],81:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), TextureShader = require('../shaders/TextureShader'), ComplexPrimitiveShader = require('../shaders/ComplexPrimitiveShader'), @@ -17082,7 +17135,7 @@ this.tempAttribState = null; }; -},{"../../../utils":107,"../shaders/ComplexPrimitiveShader":83,"../shaders/PrimitiveShader":84,"../shaders/TextureShader":86,"./WebGLManager":82}],81:[function(require,module,exports){ +},{"../../../utils":108,"../shaders/ComplexPrimitiveShader":84,"../shaders/PrimitiveShader":85,"../shaders/TextureShader":87,"./WebGLManager":83}],82:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), utils = require('../../../utils'); @@ -17449,7 +17502,7 @@ }; -},{"../../../utils":107,"./WebGLManager":82}],82:[function(require,module,exports){ +},{"../../../utils":108,"./WebGLManager":83}],83:[function(require,module,exports){ /** * @class * @memberof PIXI @@ -17490,7 +17543,7 @@ this.renderer = null; }; -},{}],83:[function(require,module,exports){ +},{}],84:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17552,7 +17605,7 @@ ComplexPrimitiveShader.prototype.constructor = ComplexPrimitiveShader; module.exports = ComplexPrimitiveShader; -},{"./Shader":85}],84:[function(require,module,exports){ +},{"./Shader":86}],85:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17615,7 +17668,7 @@ PrimitiveShader.prototype.constructor = PrimitiveShader; module.exports = PrimitiveShader; -},{"./Shader":85}],85:[function(require,module,exports){ +},{"./Shader":86}],86:[function(require,module,exports){ /*global console */ var utils = require('../../../utils'); @@ -18143,7 +18196,7 @@ return shader; }; -},{"../../../utils":107}],86:[function(require,module,exports){ +},{"../../../utils":108}],87:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -18254,7 +18307,7 @@ '}' ].join('\n'); -},{"./Shader":85}],87:[function(require,module,exports){ +},{"./Shader":86}],88:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -18335,7 +18388,7 @@ '}' ].join('\n'); -},{"pixi-gl-core":1}],88:[function(require,module,exports){ +},{"pixi-gl-core":1}],89:[function(require,module,exports){ var WebGLManager = require('../managers/WebGLManager'); /** @@ -18393,7 +18446,7 @@ // render the object }; -},{"../managers/WebGLManager":82}],89:[function(require,module,exports){ +},{"../managers/WebGLManager":83}],90:[function(require,module,exports){ /** * Helper class to create a quad * @@ -18548,7 +18601,7 @@ -},{}],90:[function(require,module,exports){ +},{}],91:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'), CONST = require('../../../const'), @@ -18853,7 +18906,7 @@ this.texture = null; }; -},{"../../../const":38,"../../../math":56,"../../../utils":107,"./StencilMaskStack":91,"pixi-gl-core":1}],91:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../../../utils":108,"./StencilMaskStack":92,"pixi-gl-core":1}],92:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -18886,7 +18939,7 @@ StencilMaskStack.prototype.constructor = StencilMaskStack; module.exports = StencilMaskStack; -},{}],92:[function(require,module,exports){ +},{}],93:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18923,7 +18976,7 @@ module.exports = mapWebGLBlendModesToPixi; -},{"../../../const":38}],93:[function(require,module,exports){ +},{"../../../const":38}],94:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18947,7 +19000,7 @@ module.exports = mapWebGLDrawModesToPixi; -},{"../../../const":38}],94:[function(require,module,exports){ +},{"../../../const":38}],95:[function(require,module,exports){ var math = require('../math'), Texture = require('../textures/Texture'), Container = require('../display/Container'), @@ -19043,7 +19096,6 @@ // call texture setter this.texture = texture || Texture.EMPTY; this.textureDirty = true - this.vertexDirty = true; this.vertexData = new Float32Array(8); } @@ -19153,7 +19205,6 @@ Sprite.prototype.caclulateVertices = function () { - var texture = this._texture, wt = this.transform.worldTransform, a = wt.a, b = wt.b, c = wt.c, d = wt.d, tx = wt.tx, ty = wt.ty, @@ -19208,22 +19259,11 @@ */ Sprite.prototype._renderWebGL = function (renderer) { - if(this.textureDirty) + if(this.transform.updated || this.textureDirty) { this.textureDirty = false; - - this._onTextureUpdate(); - - this.vertexDirty = true; - } - - if(this.vertexDirty) - { - this.vertexDirty = false; - // set the vertex data this.caclulateVertices(); - } renderer.setObjectRenderer(renderer.plugins.sprite); @@ -19566,7 +19606,7 @@ return new Sprite(Texture.fromImage(imageId, crossorigin, scaleMode)); }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasTinter":71,"../textures/Texture":101,"../utils":107}],95:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasTinter":72,"../textures/Texture":102,"../utils":108}],96:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), TextureShader = require('../../renderers/webgl/shaders/_TextureShader'), @@ -19927,7 +19967,7 @@ this.shader = null; }; -},{"../../const":38,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/shaders/_TextureShader":87,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils/createIndicesForQuads":106,"./generateMultiTextureShader":96,"pixi-gl-core":1}],96:[function(require,module,exports){ +},{"../../const":38,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/shaders/_TextureShader":88,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils/createIndicesForQuads":107,"./generateMultiTextureShader":97,"pixi-gl-core":1}],97:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; @@ -19990,7 +20030,7 @@ module.exports = generateMultiTextureShader; -},{"pixi-gl-core":1}],97:[function(require,module,exports){ +},{"pixi-gl-core":1}],98:[function(require,module,exports){ var Sprite = require('../sprites/Sprite'), Texture = require('../textures/Texture'), math = require('../math'), @@ -20611,7 +20651,7 @@ this._texture.destroy(destroyBaseTexture === undefined ? true : destroyBaseTexture); }; -},{"../const":38,"../math":56,"../sprites/Sprite":94,"../textures/Texture":101,"../utils":107}],98:[function(require,module,exports){ +},{"../const":38,"../math":57,"../sprites/Sprite":95,"../textures/Texture":102,"../utils":108}],99:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), Texture = require('./Texture'), RenderTarget = require('../renderers/webgl/utils/RenderTarget'), @@ -21095,7 +21135,7 @@ return this.getPixels(tempRect); }; -},{"../const":38,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/webgl/managers/FilterManager":78,"../renderers/webgl/utils/RenderTarget":90,"./BaseTexture":99,"./Texture":101}],99:[function(require,module,exports){ +},{"../const":38,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/webgl/managers/FilterManager":79,"../renderers/webgl/utils/RenderTarget":91,"./BaseTexture":100,"./Texture":102}],100:[function(require,module,exports){ var utils = require('../utils'), CONST = require('../const'), EventEmitter = require('eventemitter3'); @@ -21532,7 +21572,7 @@ return baseTexture; }; -},{"../const":38,"../utils":107,"eventemitter3":25}],100:[function(require,module,exports){ +},{"../const":38,"../utils":108,"eventemitter3":25}],101:[function(require,module,exports){ var BaseRenderTexture = require('./BaseRenderTexture'), Texture = require('./Texture'), math = require('../math'), @@ -21727,7 +21767,7 @@ } -},{"../const":38,"../math":56,"./BaseRenderTexture":98,"./Texture":101}],101:[function(require,module,exports){ +},{"../const":38,"../math":57,"./BaseRenderTexture":99,"./Texture":102}],102:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), VideoBaseTexture = require('./VideoBaseTexture'), TextureUvs = require('./TextureUvs'), @@ -22153,7 +22193,7 @@ */ Texture.EMPTY = new Texture(new BaseTexture()); -},{"../math":56,"../utils":107,"./BaseTexture":99,"./TextureUvs":102,"./VideoBaseTexture":103,"eventemitter3":25}],102:[function(require,module,exports){ +},{"../math":57,"../utils":108,"./BaseTexture":100,"./TextureUvs":103,"./VideoBaseTexture":104,"eventemitter3":25}],103:[function(require,module,exports){ /** * A standard object to store the Uvs of a texture @@ -22234,7 +22274,7 @@ this.uvs_uint32[3] = (((this.y3 * 65535) & 0xFFFF) << 16) | ((this.x3 * 65535) & 0xFFFF); }; -},{}],103:[function(require,module,exports){ +},{}],104:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), utils = require('../utils'); @@ -22471,7 +22511,7 @@ return source; } -},{"../utils":107,"./BaseTexture":99}],104:[function(require,module,exports){ +},{"../utils":108,"./BaseTexture":100}],105:[function(require,module,exports){ var CONST = require('../const'), EventEmitter = require('eventemitter3'), // Internal event used by composed emitter @@ -22826,7 +22866,7 @@ module.exports = Ticker; -},{"../const":38,"eventemitter3":25}],105:[function(require,module,exports){ +},{"../const":38,"eventemitter3":25}],106:[function(require,module,exports){ var Ticker = require('./Ticker'); /** @@ -22882,7 +22922,7 @@ Ticker: Ticker }; -},{"./Ticker":104}],106:[function(require,module,exports){ +},{"./Ticker":105}],107:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -22915,7 +22955,7 @@ }; module.exports = createIndicesForQuads; -},{}],107:[function(require,module,exports){ +},{}],108:[function(require,module,exports){ var CONST = require('../const'); /** @@ -23192,7 +23232,7 @@ BaseTextureCache: {} }; -},{"../const":38,"./pluginTarget":108,"async":16,"eventemitter3":25}],108:[function(require,module,exports){ +},{"../const":38,"./pluginTarget":109,"async":16,"eventemitter3":25}],109:[function(require,module,exports){ /** * Mixins functionality to make an object have "plugins". * @@ -23262,7 +23302,7 @@ } }; -},{}],109:[function(require,module,exports){ +},{}],110:[function(require,module,exports){ /*global console */ var core = require('./core'), mesh = require('./mesh'), @@ -23613,7 +23653,7 @@ return core.utils.uid(); }; -},{"./core":53,"./extras":116,"./filters":133,"./mesh":158}],110:[function(require,module,exports){ +},{"./core":54,"./extras":117,"./filters":134,"./mesh":159}],111:[function(require,module,exports){ var core = require('../core'); /** @@ -24001,7 +24041,7 @@ BitmapText.fonts = {}; -},{"../core":53}],111:[function(require,module,exports){ +},{"../core":54}],112:[function(require,module,exports){ var core = require('../core'); /** @@ -24321,7 +24361,7 @@ return new MovieClip(textures); }; -},{"../core":53}],112:[function(require,module,exports){ +},{"../core":54}],113:[function(require,module,exports){ var core = require('../core'), // a sprite use dfor rendering textures.. tempPoint = new core.Point(), @@ -24773,7 +24813,7 @@ return new TilingSprite(core.Texture.fromImage(imageId, crossorigin, scaleMode),width,height); }; -},{"../core":53,"../core/renderers/canvas/utils/CanvasTinter":71}],113:[function(require,module,exports){ +},{"../core":54,"../core/renderers/canvas/utils/CanvasTinter":72}],114:[function(require,module,exports){ var core = require('../core'), DisplayObject = core.DisplayObject, _tempMatrix = new core.Matrix(); @@ -25045,7 +25085,7 @@ this._originalDestroy(); }; -},{"../core":53}],114:[function(require,module,exports){ +},{"../core":54}],115:[function(require,module,exports){ var core = require('../core'); /** @@ -25075,7 +25115,7 @@ return null; }; -},{"../core":53}],115:[function(require,module,exports){ +},{"../core":54}],116:[function(require,module,exports){ var core = require('../core'); /** @@ -25105,7 +25145,7 @@ return point; }; -},{"../core":53}],116:[function(require,module,exports){ +},{"../core":54}],117:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -25126,7 +25166,7 @@ BitmapText: require('./BitmapText') }; -},{"./BitmapText":110,"./MovieClip":111,"./TilingSprite":112,"./cacheAsBitmap":113,"./getChildByName":114,"./getGlobalPosition":115}],117:[function(require,module,exports){ +},{"./BitmapText":111,"./MovieClip":112,"./TilingSprite":113,"./cacheAsBitmap":114,"./getChildByName":115,"./getGlobalPosition":116}],118:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25183,7 +25223,7 @@ } }); -},{"../../core":53}],118:[function(require,module,exports){ +},{"../../core":54}],119:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYFilter = require('../blur/BlurYFilter'); @@ -25284,7 +25324,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"../blur/BlurYFilter":122}],119:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"../blur/BlurYFilter":123}],120:[function(require,module,exports){ var core = require('../../core'); @@ -25426,7 +25466,7 @@ } }); -},{"../../core":53}],120:[function(require,module,exports){ +},{"../../core":54}],121:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('./BlurXFilter'), BlurYFilter = require('./BlurYFilter'); @@ -25536,7 +25576,7 @@ } }); -},{"../../core":53,"./BlurXFilter":121,"./BlurYFilter":122}],121:[function(require,module,exports){ +},{"../../core":54,"./BlurXFilter":122,"./BlurYFilter":123}],122:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25629,7 +25669,7 @@ } }); -},{"../../core":53}],122:[function(require,module,exports){ +},{"../../core":54}],123:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25715,7 +25755,7 @@ } }); -},{"../../core":53}],123:[function(require,module,exports){ +},{"../../core":54}],124:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25745,7 +25785,7 @@ SmartBlurFilter.prototype.constructor = SmartBlurFilter; module.exports = SmartBlurFilter; -},{"../../core":53}],124:[function(require,module,exports){ +},{"../../core":54}],125:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26281,7 +26321,7 @@ } }); -},{"../../core":53}],125:[function(require,module,exports){ +},{"../../core":54}],126:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26330,7 +26370,7 @@ } }); -},{"../../core":53}],126:[function(require,module,exports){ +},{"../../core":54}],127:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26421,7 +26461,7 @@ } }); -},{"../../core":53}],127:[function(require,module,exports){ +},{"../../core":54}],128:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26447,7 +26487,7 @@ CrossHatchFilter.prototype.constructor = CrossHatchFilter; module.exports = CrossHatchFilter; -},{"../../core":53}],128:[function(require,module,exports){ +},{"../../core":54}],129:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26531,7 +26571,7 @@ } }); -},{"../../core":53}],129:[function(require,module,exports){ +},{"../../core":54}],130:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26603,7 +26643,7 @@ } }); -},{"../../core":53}],130:[function(require,module,exports){ +},{"../../core":54}],131:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26694,7 +26734,7 @@ } }); -},{"../../core":53}],131:[function(require,module,exports){ +},{"../../core":54}],132:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYTintFilter = require('./BlurYTintFilter'); @@ -26887,7 +26927,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"./BlurYTintFilter":130}],132:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"./BlurYTintFilter":131}],133:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26936,7 +26976,7 @@ } }); -},{"../../core":53}],133:[function(require,module,exports){ +},{"../../core":54}],134:[function(require,module,exports){ /** * @file Main export of the PIXI filters library * @author Mat Groves @@ -26975,7 +27015,7 @@ TwistFilter: require('./twist/TwistFilter') }; -},{"./ascii/AsciiFilter":117,"./bloom/BloomFilter":118,"./blur/BlurDirFilter":119,"./blur/BlurFilter":120,"./blur/BlurXFilter":121,"./blur/BlurYFilter":122,"./blur/SmartBlurFilter":123,"./color/ColorMatrixFilter":124,"./color/ColorStepFilter":125,"./convolution/ConvolutionFilter":126,"./crosshatch/CrossHatchFilter":127,"./displacement/DisplacementFilter":128,"./dot/DotScreenFilter":129,"./dropshadow/DropShadowFilter":131,"./gray/GrayFilter":132,"./invert/InvertFilter":134,"./noise/NoiseFilter":135,"./pixelate/PixelateFilter":136,"./rgb/RGBSplitFilter":137,"./sepia/SepiaFilter":138,"./shockwave/ShockwaveFilter":139,"./tiltshift/TiltShiftFilter":141,"./tiltshift/TiltShiftXFilter":142,"./tiltshift/TiltShiftYFilter":143,"./twist/TwistFilter":144}],134:[function(require,module,exports){ +},{"./ascii/AsciiFilter":118,"./bloom/BloomFilter":119,"./blur/BlurDirFilter":120,"./blur/BlurFilter":121,"./blur/BlurXFilter":122,"./blur/BlurYFilter":123,"./blur/SmartBlurFilter":124,"./color/ColorMatrixFilter":125,"./color/ColorStepFilter":126,"./convolution/ConvolutionFilter":127,"./crosshatch/CrossHatchFilter":128,"./displacement/DisplacementFilter":129,"./dot/DotScreenFilter":130,"./dropshadow/DropShadowFilter":132,"./gray/GrayFilter":133,"./invert/InvertFilter":135,"./noise/NoiseFilter":136,"./pixelate/PixelateFilter":137,"./rgb/RGBSplitFilter":138,"./sepia/SepiaFilter":139,"./shockwave/ShockwaveFilter":140,"./tiltshift/TiltShiftFilter":142,"./tiltshift/TiltShiftXFilter":143,"./tiltshift/TiltShiftYFilter":144,"./twist/TwistFilter":145}],135:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27025,7 +27065,7 @@ } }); -},{"../../core":53}],135:[function(require,module,exports){ +},{"../../core":54}],136:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27080,7 +27120,7 @@ } }); -},{"../../core":53}],136:[function(require,module,exports){ +},{"../../core":54}],137:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27131,7 +27171,7 @@ } }); -},{"../../core":53}],137:[function(require,module,exports){ +},{"../../core":54}],138:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27217,7 +27257,7 @@ } }); -},{"../../core":53}],138:[function(require,module,exports){ +},{"../../core":54}],139:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27267,7 +27307,7 @@ } }); -},{"../../core":53}],139:[function(require,module,exports){ +},{"../../core":54}],140:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27355,7 +27395,7 @@ } }); -},{"../../core":53}],140:[function(require,module,exports){ +},{"../../core":54}],141:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27480,7 +27520,7 @@ } }); -},{"../../core":53}],141:[function(require,module,exports){ +},{"../../core":54}],142:[function(require,module,exports){ var core = require('../../core'), TiltShiftXFilter = require('./TiltShiftXFilter'), TiltShiftYFilter = require('./TiltShiftYFilter'); @@ -27590,7 +27630,7 @@ } }); -},{"../../core":53,"./TiltShiftXFilter":142,"./TiltShiftYFilter":143}],142:[function(require,module,exports){ +},{"../../core":54,"./TiltShiftXFilter":143,"./TiltShiftYFilter":144}],143:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27628,7 +27668,7 @@ this.uniforms.delta.value.y = dy / d; }; -},{"./TiltShiftAxisFilter":140}],143:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],144:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27666,7 +27706,7 @@ this.uniforms.delta.value.y = dx / d; }; -},{"./TiltShiftAxisFilter":140}],144:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],145:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27751,7 +27791,7 @@ } }); -},{"../../core":53}],145:[function(require,module,exports){ +},{"../../core":54}],146:[function(require,module,exports){ (function (global){ // run the polyfills require('./polyfill'); @@ -27784,7 +27824,7 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./accessibility":37,"./core":53,"./deprecation":109,"./extras":116,"./filters":133,"./interaction":148,"./loaders":151,"./mesh":158,"./polyfill":163}],146:[function(require,module,exports){ +},{"./accessibility":37,"./core":54,"./deprecation":110,"./extras":117,"./filters":134,"./interaction":149,"./loaders":152,"./mesh":159,"./polyfill":164}],147:[function(require,module,exports){ var core = require('../core'); /** @@ -27833,7 +27873,7 @@ return displayObject.worldTransform.applyInverse(globalPos || this.global, point); }; -},{"../core":53}],147:[function(require,module,exports){ +},{"../core":54}],148:[function(require,module,exports){ var core = require('../core'), InteractionData = require('./InteractionData'); @@ -28709,7 +28749,7 @@ core.WebGLRenderer.registerPlugin('interaction', InteractionManager); core.CanvasRenderer.registerPlugin('interaction', InteractionManager); -},{"../core":53,"./InteractionData":146,"./interactiveTarget":149}],148:[function(require,module,exports){ +},{"../core":54,"./InteractionData":147,"./interactiveTarget":150}],149:[function(require,module,exports){ /** * @file Main export of the PIXI interactions library * @author Mat Groves @@ -28726,7 +28766,7 @@ interactiveTarget: require('./interactiveTarget') }; -},{"./InteractionData":146,"./InteractionManager":147,"./interactiveTarget":149}],149:[function(require,module,exports){ +},{"./InteractionData":147,"./InteractionManager":148,"./interactiveTarget":150}],150:[function(require,module,exports){ /** * Default property values of interactive objects * used by {@link PIXI.interaction.InteractionManager}. @@ -28775,7 +28815,7 @@ module.exports = interactiveTarget; -},{}],150:[function(require,module,exports){ +},{}],151:[function(require,module,exports){ var Resource = require('resource-loader').Resource, core = require('../core'), extras = require('../extras'), @@ -28896,7 +28936,7 @@ }; }; -},{"../core":53,"../extras":116,"path":17,"resource-loader":31}],151:[function(require,module,exports){ +},{"../core":54,"../extras":117,"path":17,"resource-loader":31}],152:[function(require,module,exports){ /** * @file Main export of the PIXI loaders library * @author Mat Groves @@ -28917,7 +28957,7 @@ Resource: require('resource-loader').Resource }; -},{"./bitmapFontParser":150,"./loader":152,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],152:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./loader":153,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],153:[function(require,module,exports){ var ResourceLoader = require('resource-loader'), textureParser = require('./textureParser'), spritesheetParser = require('./spritesheetParser'), @@ -28979,7 +29019,7 @@ Resource.setExtensionXhrType('fnt', Resource.XHR_RESPONSE_TYPE.DOCUMENT); -},{"./bitmapFontParser":150,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],153:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],154:[function(require,module,exports){ var Resource = require('resource-loader').Resource, path = require('path'), core = require('../core'); @@ -29063,7 +29103,7 @@ }; }; -},{"../core":53,"path":17,"resource-loader":31}],154:[function(require,module,exports){ +},{"../core":54,"path":17,"resource-loader":31}],155:[function(require,module,exports){ var core = require('../core'); module.exports = function () @@ -29085,7 +29125,7 @@ }; }; -},{"../core":53}],155:[function(require,module,exports){ +},{"../core":54}],156:[function(require,module,exports){ var core = require('../core'), tempPoint = new core.Point(), tempPolygon = new core.Polygon(); @@ -29561,7 +29601,7 @@ TRIANGLES: 1 }; -},{"../core":53}],156:[function(require,module,exports){ +},{"../core":54}],157:[function(require,module,exports){ var Mesh = require('./Mesh'); /** @@ -29687,7 +29727,7 @@ } }; -},{"./Mesh":155}],157:[function(require,module,exports){ +},{"./Mesh":156}],158:[function(require,module,exports){ var Mesh = require('./Mesh'); var core = require('../core'); @@ -29900,7 +29940,7 @@ this.containerUpdateTransform(); }; -},{"../core":53,"./Mesh":155}],158:[function(require,module,exports){ +},{"../core":54,"./Mesh":156}],159:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -29919,7 +29959,7 @@ MeshShader: require('./webgl/MeshShader') }; -},{"./Mesh":155,"./Plane":156,"./Rope":157,"./webgl/MeshRenderer":159,"./webgl/MeshShader":160}],159:[function(require,module,exports){ +},{"./Mesh":156,"./Plane":157,"./Rope":158,"./webgl/MeshRenderer":160,"./webgl/MeshShader":161}],160:[function(require,module,exports){ var core = require('../../core'), Mesh = require('../Mesh'); @@ -30148,7 +30188,7 @@ core.ObjectRenderer.prototype.destroy.call(this); }; -},{"../../core":53,"../Mesh":155}],160:[function(require,module,exports){ +},{"../../core":54,"../Mesh":156}],161:[function(require,module,exports){ var core = require('../../core'); /** @@ -30209,7 +30249,7 @@ core.ShaderManager.registerPlugin('meshShader', MeshShader); -},{"../../core":53}],161:[function(require,module,exports){ +},{"../../core":54}],162:[function(require,module,exports){ // References: // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign @@ -30225,7 +30265,7 @@ }; } -},{}],162:[function(require,module,exports){ +},{}],163:[function(require,module,exports){ // References: // https://github.com/sindresorhus/object-assign // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign @@ -30235,12 +30275,12 @@ Object.assign = require('object-assign'); } -},{"object-assign":26}],163:[function(require,module,exports){ +},{"object-assign":26}],164:[function(require,module,exports){ require('./Object.assign'); require('./requestAnimationFrame'); require('./Math.sign'); -},{"./Math.sign":161,"./Object.assign":162,"./requestAnimationFrame":164}],164:[function(require,module,exports){ +},{"./Math.sign":162,"./Object.assign":163,"./requestAnimationFrame":165}],165:[function(require,module,exports){ (function (global){ // References: // http://paulirish.com/2011/requestanimationframe-for-smart-animating/ @@ -30311,8 +30351,8 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[145])(145) +},{}]},{},[146])(146) }); -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L1RyYW5zZm9ybS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL1dlYkdMR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZENpcmNsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ29tcGxleFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZExpbmUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9NYXRyaXguanMiLCJzcmMvY29yZS9tYXRoL1BvaW50LmpzIiwic3JjL2NvcmUvbWF0aC9pbmRleC5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0NpcmNsZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0VsbGlwc2UuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Qb2x5Z29uLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZUJ1ZmZlci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL1N5c3RlbVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcy5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9UZXh0dXJlTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9GWEFBRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1F1YWQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0LmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1N0ZW5jaWxNYXNrU3RhY2suanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvc3ByaXRlcy9TcHJpdGUuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL1Nwcml0ZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvc3ByaXRlcy93ZWJnbC9nZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3RleHQvVGV4dC5qcyIsInNyYy9jb3JlL3RleHR1cmVzL0Jhc2VSZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1RleHR1cmVVdnMuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGlja2VyL1RpY2tlci5qcyIsInNyYy9jb3JlL3RpY2tlci9pbmRleC5qcyIsInNyYy9jb3JlL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcy5qcyIsInNyYy9jb3JlL3V0aWxzL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvcGx1Z2luVGFyZ2V0LmpzIiwic3JjL2RlcHJlY2F0aW9uLmpzIiwic3JjL2V4dHJhcy9CaXRtYXBUZXh0LmpzIiwic3JjL2V4dHJhcy9Nb3ZpZUNsaXAuanMiLCJzcmMvZXh0cmFzL1RpbGluZ1Nwcml0ZS5qcyIsInNyYy9leHRyYXMvY2FjaGVBc0JpdG1hcC5qcyIsInNyYy9leHRyYXMvZ2V0Q2hpbGRCeU5hbWUuanMiLCJzcmMvZXh0cmFzL2dldEdsb2JhbFBvc2l0aW9uLmpzIiwic3JjL2V4dHJhcy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2FzY2lpL0FzY2lpRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmxvb20vQmxvb21GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJEaXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJYRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9CbHVyWUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvU21hcnRCbHVyRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvclN0ZXBGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kb3QvRG90U2NyZWVuRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZHJvcHNoYWRvdy9CbHVyWVRpbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ncmF5L0dyYXlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2ludmVydC9JbnZlcnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ub2lzZS9Ob2lzZUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcmdiL1JHQlNwbGl0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvc2VwaWEvU2VwaWFGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdEF4aXNGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3R3aXN0L1R3aXN0RmlsdGVyLmpzIiwic3JjL3NyYy9pbmRleC5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbkRhdGEuanMiLCJzcmMvaW50ZXJhY3Rpb24vSW50ZXJhY3Rpb25NYW5hZ2VyLmpzIiwic3JjL2ludGVyYWN0aW9uL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL2ludGVyYWN0aXZlVGFyZ2V0LmpzIiwic3JjL2xvYWRlcnMvYml0bWFwRm9udFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL2luZGV4LmpzIiwic3JjL2xvYWRlcnMvbG9hZGVyLmpzIiwic3JjL2xvYWRlcnMvc3ByaXRlc2hlZXRQYXJzZXIuanMiLCJzcmMvbG9hZGVycy90ZXh0dXJlUGFyc2VyLmpzIiwic3JjL21lc2gvTWVzaC5qcyIsInNyYy9tZXNoL1BsYW5lLmpzIiwic3JjL21lc2gvUm9wZS5qcyIsInNyYy9tZXNoL2luZGV4LmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFJlbmRlcmVyLmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFNoYWRlci5qcyIsInNyYy9wb2x5ZmlsbC9NYXRoLnNpZ24uanMiLCJzcmMvcG9seWZpbGwvT2JqZWN0LmFzc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9pbmRleC5qcyIsInNyYy9wb2x5ZmlsbC9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM1dUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbnNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25tQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0b0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6bUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIGNyZWF0ZUNvbnRleHQ6IFx0XHRcdHJlcXVpcmUoJy4vbGliL2NyZWF0ZUNvbnRleHQnKSxcbiAgICBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM6IFx0cmVxdWlyZSgnLi9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzJyksXG4gICAgXG4gICAgR0xCdWZmZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xCdWZmZXInKSxcbiAgICBHTEZyYW1lYnVmZmVyOiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9HTEZyYW1lYnVmZmVyJyksXG4gICAgR0xTaGFkZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xTaGFkZXInKSxcbiAgICBHTFRleHR1cmU6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xUZXh0dXJlJyksXG4gICAgXG4gICAgVmVydGV4QXJyYXlPYmplY3Q6IFx0XHRyZXF1aXJlKCcuL2xpYi9WZXJ0ZXhBcnJheU9iamVjdCcpXG5cbn07IiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRU1QVFlfQVJSQVlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xuXG52YXIgQnVmZmVyID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5BUlJBWV9CVUZGRVI7XG5cdHRoaXMuZHJhd1R5cGUgPSBkcmF3VHlwZSB8fCBnbC5TVEFUSUNfRFJBVztcblx0dGhpcy5kYXRhID0gRU1QVFlfQVJSQVlfQlVGRkVSO1xuXG5cdGlmKGRhdGEpXG5cdHtcblx0XHR0aGlzLnVwbG9hZChkYXRhKTtcblx0fVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKGRhdGEsIG9mZnNldCwgZG9udEJpbmQpXG57XG5cdC8vIHRvZG8gLSBuZWVkZWQ/XG5cdC8vaWYoIWRvbnRCaW5kKVxuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRcblx0ZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuXHRvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuXHRpZih0aGlzLmRhdGEuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpXG5cdHtcdFxuXHRcdGdsLmJ1ZmZlclN1YkRhdGEodGhpcy50eXBlLCBvZmZzZXQsIGRhdGEpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLCBkYXRhLCB0aGlzLmRyYXdUeXBlKTtcblx0fVxuXG5cdHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKTtcbn1cblxuQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIGdsLkFSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgdHlwZSwgZHJhd1R5cGUpO1xufVxuXG4vL1RPRE8gRGVzdHJveS4uXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyO1xuXG4iLCJcbnZhciBUZXh0dXJlID0gcmVxdWlyZSgnLi9HTFRleHR1cmUnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgRnJhbWVidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRnJhbWVidWZmZXIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcblx0dGhpcy5zdGVuY2lsID0gbnVsbDtcblx0dGhpcy50ZXh0dXJlID0gbnVsbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMTAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5lbmFibGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IG5ldyBUZXh0dXJlKGdsKTtcblxuXHR0aGlzLnRleHR1cmUuYmluZCgpO1xuXG5cdC8vZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlLnRleHR1cmUsIDApO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlU3RlbmNpbCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5zdGVuY2lsKXJldHVybjtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuc3RlbmNpbCA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgIFxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCB0aGlzLnN0ZW5jaWwpO1xuICAgIFxuICAgIC8vIFRPRE8uLiB0aGlzIGlzIGRlcHRoIEFORCBzdGVuY2lsP1xuICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTCwgIHRoaXMud2lkdGggICwgdGhpcy5oZWlnaHQgKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oIHIsIGcsIGIsIGEgKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIGdsLmNsZWFyQ29sb3IociwgZywgYiwgYSk7XG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZnJhbWVidWZmZXIgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdGlmICggdGhpcy50ZXh0dXJlIClcbiAgICB7XG4gICAgXHR0aGlzLnRleHR1cmUudXBsb2FkRGF0YShudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdGlmICggdGhpcy5zdGVuY2lsIClcbiAgICB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgc3RlbmNpbCBidWZmZXIgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlUkdCQSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHR2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbURhdGEoZ2wsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xuXHR0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSk7XG5cbiAgICBmYm8udW5iaW5kKCk7XG4gICAgXG4gICAgcmV0dXJuIGZibztcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlRmxvYXQzMiA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHQvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZS4uXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZS5mcm9tRGF0YShnbCwgZGF0YSwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpXG5cbiAgICBmYm8udW5iaW5kKCk7XG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lYnVmZmVyO1xuXG4iLCJcbnZhciBjb21waWxlUHJvZ3JhbSA9IHJlcXVpcmUoJy4vc2hhZGVyL2NvbXBpbGVQcm9ncmFtJyksXG5cdGV4dHJhY3RBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdEF0dHJpYnV0ZXMnKSxcblx0ZXh0cmFjdFVuaWZvcm1zID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdFVuaWZvcm1zJyksXG5cdGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IHJlcXVpcmUoJy4vc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCcpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBTaGFkZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xudmFyIFNoYWRlciA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0Ly8gRmlyc3QgY29tcGlsZSB0aGUgcHJvZ3JhbS4uXG5cdHRoaXMucHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXHQvLyBuZXh0IGV4dHJhY3QgdGhlIGF0dHJpYnV0ZXNcblx0dGhpcy5hdHRyaWJ1dGVzID0gZXh0cmFjdEF0dHJpYnV0ZXMoZ2wsIHRoaXMucHJvZ3JhbSk7IFxuXG4gICAgdmFyIHVuaWZvcm1EYXRhID0gZXh0cmFjdFVuaWZvcm1zKGdsLCB0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy51bmlmb3JtcyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCggZ2wsIHVuaWZvcm1EYXRhICk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgVGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBhIFdlYkdMIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gZm9ybWF0IHtudW1iZXJ9IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlJHQkFcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IHRoZSBnbCB0eXBlIG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5VTlNJR05FRF9CWVRFXG4gKi9cbnZhciBUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHQvLyBzb21lIHNldHRpbmdzLi5cblx0dGhpcy5taXBtYXAgPSBmYWxzZTtcblxuXHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdCB8fCBnbC5SR0JBO1xuXHR0aGlzLnR5cGUgPSB0eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7XG5cblxufVxuXG4vKipcbiAqIEBwYXJhbSB7UElYSS5nbENvcmUuVGV4dHVyZX0gW3Zhcm5hbWVdIFtkZXNjcmlwdGlvbl1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oc291cmNlKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblxuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgc291cmNlKTtcbn1cblxudmFyIEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IGZhbHNlO1xuXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWREYXRhID0gZnVuY3Rpb24oZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5iaW5kKCk7XG5cdFxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgdGhpcy53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG5cblx0aWYoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcblx0e1xuXHRcdGlmKCFGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUpXG5cdFx0e1xuXHRcdFx0dmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO1xuXHRcdFx0XG5cdFx0XHRpZihleHQpXG5cdFx0XHR7XG5cdFx0XHRcdEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHlwZSA9IGdsLkZMT0FUO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdC8vIFRPRE8gc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXNcblx0XHR0aGlzLnR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuXHR9XG5cblx0Ly8gd2hhdCB0eXBlIG9mIGRhdGE/XG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcblx0Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBkYXRhIHx8IG51bGwpO1xuXG59XG5cblRleHR1cmUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihsb2NhdGlvbilcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRpZihsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKVxuXHR7XG5cdFx0Z2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uKTtcblx0fVxuXG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1pbkZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGlmKHRoaXMubWlwbWFwKVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCk7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xuXHR9XHRcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWFnRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVNaXBtYXAgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHRoaXMubWlwbWFwID0gdHJ1ZTtcblx0Z2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZUxpbmVhclNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKHRydWUpO1xuXHR0aGlzLm1hZ0ZpbHRlcih0cnVlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTmVhcmVzdFNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKGZhbHNlKTtcblx0dGhpcy5tYWdGaWx0ZXIoZmFsc2UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwQ2xhbXAgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBSZXBlYXQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cdFxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5SRVBFQVQpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG59XG5cbi8vVGV4dHVyZS5cblRleHR1cmUuZnJvbVNvdXJjZSA9IGZ1bmN0aW9uKGdsLCBzb3VyY2UsIHByZW11bHRpcGx5QWxwaGEpXG57XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhIHx8IGZhbHNlO1xuXHR0ZXh0dXJlLnVwbG9hZChzb3VyY2UpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5UZXh0dXJlLmZyb21EYXRhID0gZnVuY3Rpb24oZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdC8vY29uc29sZS5sb2coZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnVwbG9hZERhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG4iLCJcbi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxuLy8gc3RhdGUgb2JqZWN0Ly9cblxuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChnbClcbntcblx0XG5cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gKFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpXG4gICAgKTtcblxuLy9cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gbnVsbDtcblxuXHRpZih0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbilcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvID0gdGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsgIFxuXHR9XG5cblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG5cdHRoaXMuZGlydHkgPSBmYWxzZTtcblxuXHRcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVydGV4QXJyYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFZlcnRleEFycmF5T2JqZWN0O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5uYXRpdmVWYW8pOyAgXG5cblx0XHRpZih0aGlzLmRpcnR5KVxuXHRcdHtcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0XHR9XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgXG5cdHtcblx0XHR2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW2ldO1xuXHRcdGF0dHJpYi5idWZmZXIuYmluZCgpO1x0XG5cblx0XHRhdHRyaWIuYXR0cmlidXRlLnBvaW50ZXIoYXR0cmliLnR5cGUsIGF0dHJpYi5ub3JtYWxpemVkLCBhdHRyaWIuc3RyaWRlLCBhdHRyaWIuc3RhcnQpOyBcblx0XHRcblx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWIuYXR0cmlidXRlLmxvY2F0aW9uKTtcblx0fTtcblxuXHR0aGlzLmluZGV4QnVmZmVyLmJpbmQoKTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgYXR0cmlidXRlLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXJ0KVxue1xuICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHtcbiAgICBcdGJ1ZmZlcjogXHRidWZmZXIsXG4gICAgXHRhdHRyaWJ1dGU6IFx0YXR0cmlidXRlLFxuXG4gICAgXHRsb2NhdGlvbjogXHRhdHRyaWJ1dGUubG9jYXRpb24sXG5cdCBcdHR5cGU6IFx0XHR0eXBlIHx8IHRoaXMuZ2wuRkxPQVQsXG5cdCBcdG5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWQgfHwgZmFsc2UsXG5cdCBcdHN0cmlkZTogXHRzdHJpZGUgfHwgMCxcblx0IFx0c3RhcnQ6IFx0XHRzdGFydCB8fCAwXG5cdH0pXG5cblx0dGhpcy5kaXJ0eSA9IHRydWU7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRpb25zKVxue1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBidWZmZXI7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHR5cGUsIHNpemUsIHN0YXJ0KVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5kcmF3RWxlbWVudHModHlwZSwgc2l6ZSwgZ2wuVU5TSUdORURfU0hPUlQsIHN0YXJ0KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBDb250ZXh0XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIENPTlRFWFRfVUlEID0gMDtcblxudmFyIGNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbihjYW52YXMsIG9wdGlvbnMpXG57XG4gICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRpb25zKSB8fCBcbiAgICBcdCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdsKVxuICAgIHtcbiAgICAgICAgLy8gZmFpbCwgbm90IGFibGUgdG8gZ2V0IGEgY29udGV4dFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHdlYkdMLiBUcnkgdXNpbmcgdGhlIGNhbnZhcyByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIC8vIG1pZ2h0IHdhbnQgdG8gcGhhc2UgdGhpcyBvdXQ/XG4gICAgZ2wuaWQgPSBDT05URVhUX1VJRCsrO1xuXG4gICAgcmV0dXJuIGdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbnRleHQ7XG5cbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBzZXRWZXJ0ZXhBdHRyaWJBcnJheXMgPSBmdW5jdGlvbiAoZ2wsIGF0dHJpYnMpXG57XHRcbiAgIC8vIGNvbnNvbGUubG9nKGdsLmlkKVxuICAgIHZhciBkYXRhID0gR0xfTUFQW2dsLmlkXTtcblxuICAgIGlmKCFkYXRhKVxuICAgIHtcblx0ICAgdmFyIG1heEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0XHRkYXRhID0gR0xfTUFQW2dsLmlkXSA9IHt0ZW1wQXR0cmliU3RhdGU6bmV3IEFycmF5KG1heEF0dHJpYnMpXG5cdFx0XHRcdCBcdCBcdFx0ICAgLGF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKX07XG5cdH1cblx0XG4gICAgdmFyIGksXG4gICAgXHR0ZW1wQXR0cmliU3RhdGUgPSBkYXRhLnRlbXBBdHRyaWJTdGF0ZSxcbiAgICBcdGF0dHJpYlN0YXRlID0gZGF0YS5hdHRyaWJTdGF0ZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wQXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yIChpIGluIGF0dHJpYnMpXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbYXR0cmlic1tpXS5sb2NhdGlvbl0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDE7IGkgPCBhdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChhdHRyaWJTdGF0ZVtpXSAhPT0gdGVtcEF0dHJpYlN0YXRlW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJTdGF0ZVtpXSA9IHRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM7IiwiXG5cblxuXG5jb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuICAgIHZhciBnbFZlcnRTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbnZhciBjb21waWxlU2hhZGVyID0gZnVuY3Rpb24gKGdsLCB0eXBlLCBzcmMpXG57XG4gICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuXG4gICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlUHJvZ3JhbTtcblxuIiwiXG5cbnZhciBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBzaXplKSBcbntcbiAgICBzd2l0Y2ggKHR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICBjYXNlICd2ZWMyJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjNCc6ICAgICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KDQgKiBzaXplKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnaXZlYzInOiAgIFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDIgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWM0JzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2wnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY2FzZSAnYnZlYzInOlxuXG4gICAgICAgICAgICByZXR1cm4gYm9vbGVhbkFycmF5KCAyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzQnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSg0ICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDFdKTtcblxuICAgICAgICBjYXNlICdtYXQzJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0NCc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMCwgMV0pO1xuICAgIH1cbn1cblxudmFyIGJvb2xlYW5BcnJheSA9IGZ1bmN0aW9uKHNpemUpXG57XG4gICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgXG4gICAge1xuICAgICAgICBhcnJheVtpXSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdFZhbHVlO1xuIiwiXG52YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIG1hcFNpemUgPSByZXF1aXJlKCcuL21hcFNpemUnKTtcblxudmFyIGV4dHJhY3RBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcblxuICAgIHZhciB0b3RhbEF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9BVFRSSUJVVEVTKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEF0dHJpYnV0ZXM7IGkrKykgXG4gICAge1xuICAgICAgICB2YXIgYXR0cmliRGF0YSA9IGdsLmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpKTtcbiAgICAgICAgdmFyIHR5cGUgPSBtYXBUeXBlKGdsLCBhdHRyaWJEYXRhLnR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNbYXR0cmliRGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgIHR5cGU6dHlwZSxcbiAgICAgICAgICAgIHNpemU6bWFwU2l6ZSh0eXBlKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOmdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGF0dHJpYkRhdGEubmFtZSksXG4gICAgICAgICAgICAvL1RPRE8gLSBtYWtlIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAgICAgICAgICAgIHBvaW50ZXI6ZnVuY3Rpb24odHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydCl7XG5cbiAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmxvY2F0aW9uLHRoaXMuc2l6ZSwgdHlwZSB8fCBnbC5GTE9BVCwgbm9ybWFsaXplZCB8fCBmYWxzZSwgc3RyaWRlIHx8IDAsIHN0YXJ0IHx8IDApOyBcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzOyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0cmFjdEF0dHJpYnV0ZXM7XG5cbiIsInZhciBtYXBUeXBlID0gcmVxdWlyZSgnLi9tYXBUeXBlJyk7XG52YXIgZGVmYXVsdFZhbHVlID0gcmVxdWlyZSgnLi9kZWZhdWx0VmFsdWUnKTtcblxuXG52YXIgZXh0cmFjdFVuaWZvcm1zID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG5cdHZhciB1bmlmb3JtcyA9IHt9O1xuXHRcbiAgICB2YXIgdG90YWxVbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbFVuaWZvcm1zOyBpKyspIFxuICAgIHtcbiAgICBcdHZhciB1bmlmb3JtRGF0YSA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSk7XG4gICAgXHR2YXIgbmFtZSA9IHVuaWZvcm1EYXRhLm5hbWUucmVwbGFjZSgvXFxbLio/XFxdLywgXCJcIik7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgdW5pZm9ybURhdGEudHlwZSApO1xuXG4gICAgXHR1bmlmb3Jtc1tuYW1lXSA9IHtcbiAgICBcdFx0dHlwZTp0eXBlLFxuICAgIFx0XHRzaXplOnVuaWZvcm1EYXRhLnNpemUsXG4gICAgXHRcdGxvY2F0aW9uOmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSxcbiAgICBcdFx0dmFsdWU6ZGVmYXVsdFZhbHVlKHR5cGUsIHVuaWZvcm1EYXRhLnNpemUpXG4gICAgXHR9XG4gICAgfTtcblx0XG5cdHJldHVybiB1bmlmb3JtcztcdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RVbmlmb3JtcztcblxuIiwiXG52YXIgZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gZnVuY3Rpb24oZ2wsIHVuaWZvcm1EYXRhKVxue1xuICAgIC8vIHRoaXMgaXMgdGhlIG9iamVjdCB3ZSB3aWxsIGJlIHNlbmRpbmcgYmFjay5cbiAgICAvLyBhbiBvYmplY3QgaGllcmFjaHkgd2lsbCBiZSBjcmVhdGVkIGZvciBzdHJ1Y3RzXG4gICAgdmFyIHVuaWZvcm1zID0ge2RhdGE6e319O1xuXG4gICAgdW5pZm9ybXMuZ2wgPSBnbDtcbiAgICBcbiAgICB2YXIgdW5pZm9ybUtleXM9IE9iamVjdC5rZXlzKHVuaWZvcm1EYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybUtleXMubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGZ1bGxOYW1lID0gdW5pZm9ybUtleXNbaV1cblxuICAgICAgICB2YXIgbmFtZVRva2VucyA9IGZ1bGxOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHZhciB1bmlmb3JtR3JvdXAgPSBnZXRVbmlmb3JtR3JvdXAobmFtZVRva2VucywgdW5pZm9ybXMpO1xuXG4gICAgICAgIHZhciB1bmlmb3JtID0gIHVuaWZvcm1EYXRhW2Z1bGxOYW1lXTtcbiAgICAgICAgdW5pZm9ybUdyb3VwLmRhdGFbbmFtZV0gPSB1bmlmb3JtO1xuXG4gICAgICAgIHVuaWZvcm1Hcm91cC5nbCA9IGdsO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bmlmb3JtR3JvdXAsIG5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2VuZXJhdGVHZXR0ZXIobmFtZSksXG4gICAgICAgICAgICBzZXQ6IGdlbmVyYXRlU2V0dGVyKG5hbWUsIHVuaWZvcm0pXG4gICAgICAgIH0pXG4gICAgfTtcblxuICAgIHJldHVybiB1bmlmb3Jtcztcbn1cblxudmFyIGdlbmVyYXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSlcbntcblx0dmFyIHRlbXBsYXRlID0gZ2V0dGVyVGVtcGxhdGUucmVwbGFjZSgnJSUnLCBuYW1lKTtcblx0cmV0dXJuIG5ldyBGdW5jdGlvbih0ZW1wbGF0ZSk7XG59XG5cbnZhciBnZW5lcmF0ZVNldHRlciA9IGZ1bmN0aW9uKG5hbWUsIHVuaWZvcm0pXG57XG4gICAgdmFyIHRlbXBsYXRlID0gc2V0dGVyVGVtcGxhdGUucmVwbGFjZSgvJSUvZywgbmFtZSk7XG4gICAgdmFyIHNldFRlbXBsYXRlXG4gICAgXG4gICAgaWYodW5pZm9ybS5zaXplID09PSAxKVxuICAgIHtcbiAgICAgICAgc2V0VGVtcGxhdGUgPSBHTFNMX1RPX1NJTkdMRV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19BUlJBWV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuXG4gICAgaWYoc2V0VGVtcGxhdGUpXG4gICAge1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIlxcbnRoaXMuZ2wuXCIgKyBzZXRUZW1wbGF0ZSArIFwiO1wiO1xuICAgIH1cblxuICBcdHJldHVybiBuZXcgRnVuY3Rpb24oJ3ZhbHVlJywgdGVtcGxhdGUpO1xufVxuXG52YXIgZ2V0VW5pZm9ybUdyb3VwID0gZnVuY3Rpb24obmFtZVRva2VucywgdW5pZm9ybSlcbntcbiAgICB2YXIgY3VyID0gdW5pZm9ybTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZVRva2Vucy5sZW5ndGggLSAxOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIG8gPSBjdXJbbmFtZVRva2Vuc1tpXV0gfHwge2RhdGE6e319O1xuICAgICAgICBjdXJbbmFtZVRva2Vuc1tpXV0gPSBvO1xuICAgICAgICBjdXIgPSBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gY3VyXG59XG5cbnZhciBnZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAncmV0dXJuIHRoaXMuZGF0YS4lJS52YWx1ZTsnLFxuXS5qb2luKCdcXG4nKTtcblxudmFyIHNldHRlclRlbXBsYXRlID0gW1xuICAgICd0aGlzLmRhdGEuJSUudmFsdWUgPSB2YWx1ZTsnLFxuICAgICd2YXIgbG9jYXRpb24gPSB0aGlzLmRhdGEuJSUubG9jYXRpb247J1xuXS5qb2luKCdcXG4nKTtcblxuXG52YXIgR0xTTF9UT19TSU5HTEVfU0VUVEVSUyA9IHtcblxuICAgICdmbG9hdCc6ICAgICd1bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ3ZlYzQnOiAgICAgJ3VuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdidmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdidmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ21hdDInOiAgICAgJ3VuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuICAgICdtYXQzJzogICAgICd1bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0NCc6ICAgICAndW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG5cbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbnZhciBHTFNMX1RPX0FSUkFZX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpJyxcblxuICAgICd2ZWMyJzogICAgICd1bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWMzJzogICAgICd1bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgIFx0XG4gICAgJ2ludCc6ICAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgIFxuICAgICdzYW1wbGVyMkQnOid1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0O1xuXG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbih0eXBlKSBcbnsgXG4gICAgcmV0dXJuIEdMU0xfVE9fU0laRVt0eXBlXTtcbn1cblxuXG52YXIgR0xTTF9UT19TSVpFID0ge1xuICAgICdmbG9hdCc6ICAgIDEsXG4gICAgJ3ZlYzInOiAgICAgMixcbiAgICAndmVjMyc6ICAgICAzLFxuICAgICd2ZWM0JzogICAgIDQsXG5cbiAgICAnaW50JzogICAgICAxLFxuICAgICdpdmVjMic6ICAgIDIsXG4gICAgJ2l2ZWMzJzogICAgMyxcbiAgICAnaXZlYzQnOiAgICA0LFxuXG4gICAgJ2Jvb2wnOiAgICAgMSxcbiAgICAnYnZlYzInOiAgICAyLFxuICAgICdidmVjMyc6ICAgIDMsXG4gICAgJ2J2ZWM0JzogICAgNCxcblxuICAgICdtYXQyJzogICAgIDQsXG4gICAgJ21hdDMnOiAgICAgOSxcbiAgICAnbWF0NCc6ICAgICAxNixcblxuICAgICdzYW1wbGVyMkQnOiAgMVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFNpemU7XG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbihnbCwgdHlwZSkgXG57XG4gICAgaWYoIUdMX1RBQkxFKSBcbiAgICB7XG4gICAgICAgIHZhciB0eXBlTmFtZXMgPSBPYmplY3Qua2V5cyhHTF9UT19HTFNMX1RZUEVTKTtcblxuICAgICAgICBHTF9UQUJMRSA9IHt9O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlTmFtZXMubGVuZ3RoOyArK2kpIFxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdG4gPSB0eXBlTmFtZXNbaV07XG4gICAgICAgICAgICBHTF9UQUJMRVsgZ2xbdG5dIF0gPSBHTF9UT19HTFNMX1RZUEVTW3RuXTtcbiAgICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gR0xfVEFCTEVbdHlwZV07XG59XG5cbnZhciBHTF9UQUJMRSA9IG51bGw7XG5cbnZhciBHTF9UT19HTFNMX1RZUEVTID0ge1xuICAnRkxPQVQnOiAgICAgICAnZmxvYXQnLFxuICAnRkxPQVRfVkVDMic6ICAndmVjMicsXG4gICdGTE9BVF9WRUMzJzogICd2ZWMzJyxcbiAgJ0ZMT0FUX1ZFQzQnOiAgJ3ZlYzQnLFxuXG4gICdJTlQnOiAgICAgICAgICdpbnQnLFxuICAnSU5UX1ZFQzInOiAgICAnaXZlYzInLFxuICAnSU5UX1ZFQzMnOiAgICAnaXZlYzMnLFxuICAnSU5UX1ZFQzQnOiAgICAnaXZlYzQnLFxuICBcbiAgJ0JPT0wnOiAgICAgICAgJ2Jvb2wnLFxuICAnQk9PTF9WRUMyJzogICAnYnZlYzInLFxuICAnQk9PTF9WRUMzJzogICAnYnZlYzMnLFxuICAnQk9PTF9WRUM0JzogICAnYnZlYzQnLFxuICBcbiAgJ0ZMT0FUX01BVDInOiAgJ21hdDInLFxuICAnRkxPQVRfTUFUMyc6ICAnbWF0MycsXG4gICdGTE9BVF9NQVQ0JzogICdtYXQ0JyxcbiAgXG4gICdTQU1QTEVSXzJEJzogICdzYW1wbGVyMkQnICBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiLyohXG4gKiBhc3luY1xuICogaHR0cHM6Ly9naXRodWIuY29tL2Nhb2xhbi9hc3luY1xuICpcbiAqIENvcHlyaWdodCAyMDEwLTIwMTQgQ2FvbGFuIE1jTWFob25cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9Cb29sKHYpIHtcbiAgICAgICAgcmV0dXJuICEhdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90SWQodikge1xuICAgICAgICByZXR1cm4gIXY7XG4gICAgfVxuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBwcmV2aW91c19hc3luYztcblxuICAgIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAgIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICAgIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsIHx8XG4gICAgICAgICAgICB0aGlzO1xuXG4gICAgaWYgKHJvb3QgIT0gbnVsbCkge1xuICAgICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsaXR5IGZ1bmN0aW9ucyAvLy8vXG5cbiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIHZhciBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xuXG4gICAgLy8gUG9ydGVkIGZyb20gdW5kZXJzY29yZS5qcyBpc09iamVjdFxuICAgIHZhciBfaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2lzQXJyYXlMaWtlKGFycikge1xuICAgICAgICByZXR1cm4gX2lzQXJyYXkoYXJyKSB8fCAoXG4gICAgICAgICAgICAvLyBoYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAgICAgICAgdHlwZW9mIGFyci5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgICAgYXJyLmxlbmd0aCAlIDEgPT09IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXJyYXlFYWNoKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaW5kZXhdLCBpbmRleCwgYXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IGFyci5sZW5ndGgsXG4gICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcmFuZ2UoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9tYXAoQXJyYXkoY291bnQpLCBmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gaTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZHVjZShhcnIsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgIF9hcnJheUVhY2goYXJyLCBmdW5jdGlvbiAoeCwgaSwgYSkge1xuICAgICAgICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHgsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZvckVhY2hPZihvYmplY3QsIGl0ZXJhdG9yKSB7XG4gICAgICAgIF9hcnJheUVhY2goX2tleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaXRlcmF0b3Iob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbmRleE9mKGFyciwgaXRlbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9rZXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW47XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBpZiAoX2lzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGkgOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBfa2V5cyhjb2xsKTtcbiAgICAgICAgICAgIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ga2V5c1tpXSA6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2ltaWxhciB0byBFUzYncyByZXN0IHBhcmFtIChodHRwOi8vYXJpeWEub2ZpbGFicy5jb20vMjAxMy8wMy9lczYtYW5kLXJlc3QtcGFyYW1ldGVyLmh0bWwpXG4gICAgLy8gVGhpcyBhY2N1bXVsYXRlcyB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGFuIGFycmF5LCBhZnRlciBhIGdpdmVuIGluZGV4LlxuICAgIC8vIEZyb20gdW5kZXJzY29yZS5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMjE0MCkuXG4gICAgZnVuY3Rpb24gX3Jlc3RQYXJhbShmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IHVudXNlZCBidXQgaGFuZGxlIGNhc2VzIG91dHNpZGUgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQ6XG4gICAgICAgICAgICAvLyB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgIC8vIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIC8vICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgICAgICAgIC8vIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IodmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG5cbiAgICAvLyBjYXB0dXJlIHRoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIGd1YXJkIGFnYWluc3QgZmFrZVRpbWVyIG1vY2tzXG4gICAgdmFyIF9zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcblxuICAgIHZhciBfZGVsYXkgPSBfc2V0SW1tZWRpYXRlID8gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgX3NldEltbWVkaWF0ZShmbik7XG4gICAgfSA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IF9kZWxheTtcbiAgICB9XG4gICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gX3NldEltbWVkaWF0ZSA/IF9kZWxheSA6IGFzeW5jLm5leHRUaWNrO1xuXG5cbiAgICBhc3luYy5mb3JFYWNoID1cbiAgICBhc3luYy5lYWNoID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2YoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID1cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cblxuICAgIGFzeW5jLmZvckVhY2hMaW1pdCA9XG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2VhY2hPZkxpbWl0KGxpbWl0KShhcnIsIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZiA9XG4gICAgYXN5bmMuZWFjaE9mID0gZnVuY3Rpb24gKG9iamVjdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdCB8fCBbXTtcblxuICAgICAgICB2YXIgaXRlciA9IF9rZXlJdGVyYXRvcihvYmplY3QpO1xuICAgICAgICB2YXIga2V5LCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgICAgIHdoaWxlICgoa2V5ID0gaXRlcigpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXksIG9ubHlfb25jZShkb25lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkID09PSAwKSBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgICAgY29tcGxldGVkLS07XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGtleSBpcyBudWxsIGluIGNhc2UgaXRlcmF0b3IgaXNuJ3QgZXhoYXVzdGVkXG4gICAgICAgICAgICAvLyBhbmQgZG9uZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBudWxsICYmIGNvbXBsZXRlZCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaE9mU2VyaWVzID1cbiAgICBhc3luYy5lYWNoT2ZTZXJpZXMgPSBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShpdGVyYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLmZvckVhY2hPZkxpbWl0ID1cbiAgICBhc3luYy5lYWNoT2ZMaW1pdCA9IGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgX2VhY2hPZkxpbWl0KGxpbWl0KShvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9lYWNoT2ZMaW1pdChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgICAgICBvYmogPSBvYmogfHwgW107XG4gICAgICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUgJiYgcnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmICFlcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBuZXh0S2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iob2JqW2tleV0sIGtleSwgb25seV9vbmNlKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZG9QYXJhbGxlbChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oYXN5bmMuZWFjaE9mLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWxMaW1pdChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKF9lYWNoT2ZMaW1pdChsaW1pdCksIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9TZXJpZXMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZlNlcmllcywgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UoYXJyKSA/IFtdIDoge307XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih2YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9hc3luY01hcCk7XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMuaW5qZWN0ID1cbiAgICBhc3luYy5mb2xkbCA9XG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hPZlNlcmllcyhhcnIsIGZ1bmN0aW9uICh4LCBpLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgeCwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBtZW1vKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvbGRyID1cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgaWRlbnRpdHkpLnJldmVyc2UoKTtcbiAgICAgICAgYXN5bmMucmVkdWNlKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0b3I7XG4gICAgICAgICAgICBpdGVyYXRvciA9IG1lbW87XG4gICAgICAgICAgICBtZW1vID0gX2lzQXJyYXkoYXJyKSA/IFtdIDoge307XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoT2YoYXJyLCBmdW5jdGlvbih2LCBrLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgdiwgaywgY2IpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4OiBpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5zZWxlY3QgPVxuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RMaW1pdCA9XG4gICAgYXN5bmMuZmlsdGVyTGltaXQgPSBkb1BhcmFsbGVsTGltaXQoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RTZXJpZXMgPVxuICAgIGFzeW5jLmZpbHRlclNlcmllcyA9IGRvU2VyaWVzKF9maWx0ZXIpO1xuXG4gICAgZnVuY3Rpb24gX3JlamVjdChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9maWx0ZXIoZWFjaGZuLCBhcnIsIGZ1bmN0aW9uKHZhbHVlLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBjYighdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBhc3luYy5yZWplY3QgPSBkb1BhcmFsbGVsKF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdFNlcmllcyA9IGRvU2VyaWVzKF9yZWplY3QpO1xuXG4gICAgZnVuY3Rpb24gX2NyZWF0ZVRlc3RlcihlYWNoZm4sIGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYikge1xuICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIGNiKGdldFJlc3VsdChmYWxzZSwgdm9pZCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZSh4LCBfLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYiAmJiBjaGVjayh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoZ2V0UmVzdWx0KHRydWUsIHgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgZWFjaGZuKGFyciwgbGltaXQsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2IgPSBpdGVyYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGxpbWl0O1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy5hbnkgPVxuICAgIGFzeW5jLnNvbWUgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5zb21lTGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCB0b0Jvb2wsIGlkZW50aXR5KTtcblxuICAgIGFzeW5jLmFsbCA9XG4gICAgYXN5bmMuZXZlcnkgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgbm90SWQsIG5vdElkKTtcblxuICAgIGFzeW5jLmV2ZXJ5TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBub3RJZCwgbm90SWQpO1xuXG4gICAgZnVuY3Rpb24gX2ZpbmRHZXRSZXN1bHQodiwgeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgYXN5bmMuZGV0ZWN0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0U2VyaWVzID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZTZXJpZXMsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuXG4gICAgYXN5bmMuc29ydEJ5ID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLm1hcChhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKGVyciwgY3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7dmFsdWU6IHgsIGNyaXRlcmlhOiBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChjb21wYXJhdG9yKSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNvbmN1cnJlbmN5LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gcmVtYWluaW5nVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBfaW5kZXhPZihsaXN0ZW5lcnMsIGZuKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRhc2tDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLS07XG4gICAgICAgICAgICBfYXJyYXlFYWNoKGxpc3RlbmVycy5zbGljZSgwKSwgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBfYXJyYXlFYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9mb3JFYWNoT2YocmVzdWx0cywgZnVuY3Rpb24odmFsLCBya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHRhc2tDb21wbGV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRlYWQtbG9ja3NcbiAgICAgICAgICAgIHZhciBsZW4gPSByZXF1aXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZGVwO1xuICAgICAgICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZGVwID0gdGFza3NbcmVxdWlyZXNbbGVuXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGluZXhpc3RhbnQgZGVwZW5kZW5jeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzQXJyYXkoZGVwKSAmJiBfaW5kZXhPZihkZXAsIGspID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXMgY3ljbGljIGRlcGVuZGVuY2llcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5uaW5nVGFza3MgPCBjb25jdXJyZW5jeSAmJiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzKys7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLnJldHJ5ID0gZnVuY3Rpb24odGltZXMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBERUZBVUxUX1RJTUVTID0gNTtcbiAgICAgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuXG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbDogREVGQVVMVF9JTlRFUlZBTFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KXtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0ID09PSAnbnVtYmVyJyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodCwgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYodHlwZW9mIHQgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBhY2MudGltZXMgPSBwYXJzZUludCh0LnRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgICAgICAgICBhY2MuaW50ZXJ2YWwgPSBwYXJzZUludCh0LmludGVydmFsLCAxMCkgfHwgREVGQVVMVF9JTlRFUlZBTDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGZvciBcXCd0aW1lc1xcJzogJyArIHR5cGVvZiB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgMSB8fCBsZW5ndGggPiAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIC0gbXVzdCBiZSBlaXRoZXIgKHRhc2spLCAodGFzaywgY2FsbGJhY2spLCAodGltZXMsIHRhc2spIG9yICh0aW1lcywgdGFzaywgY2FsbGJhY2spJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoIDw9IDIgJiYgdHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRzLCB0aW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBvcHRzLnRhc2sgPSB0YXNrO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRUYXNrKHdyYXBwZWRDYWxsYmFjaywgd3JhcHBlZFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCh0YXNrLCBmaW5hbEF0dGVtcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VyaWVzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayhmdW5jdGlvbihlcnIsIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXNDYWxsYmFjayghZXJyIHx8IGZpbmFsQXR0ZW1wdCwge2VycjogZXJyLCByZXN1bHQ6IHJlc3VsdH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVkUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmV0cnlJbnRlcnZhbChpbnRlcnZhbCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAob3B0cy50aW1lcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsQXR0ZW1wdCA9ICEob3B0cy50aW1lcy09MSk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQob3B0cy50YXNrLCBmaW5hbEF0dGVtcHQpKTtcbiAgICAgICAgICAgICAgICBpZighZmluYWxBdHRlbXB0ICYmIG9wdHMuaW50ZXJ2YWwgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUludGVydmFsKG9wdHMuaW50ZXJ2YWwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IG9wdHMuY2FsbGJhY2spKGRhdGEuZXJyLCBkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIG9wdHMuY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2s7XG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBJdGVyYXRvcihpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgW2Vycl0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuc3VyZUFzeW5jKGl0ZXJhdG9yKS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfcGFyYWxsZWwoZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IF9pc0FycmF5TGlrZSh0YXNrcykgPyBbXSA6IHt9O1xuXG4gICAgICAgIGVhY2hmbih0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGtleSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRhc2soX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2YsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChfZWFjaE9mTGltaXQobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKGFzeW5jLmVhY2hPZlNlcmllcywgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuaXRlcmF0b3IgPSBmdW5jdGlvbiAodGFza3MpIHtcbiAgICAgICAgZnVuY3Rpb24gbWFrZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm4ubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgdGFza3MubGVuZ3RoIC0gMSkgPyBtYWtlQ2FsbGJhY2soaW5kZXggKyAxKTogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIChmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoY2FsbEFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLCBhcmdzLmNvbmNhdChjYWxsQXJncylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gX2NvbmNhdChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoeSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG4gICAgICAgIGlmICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0LmFwcGx5KHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1doaWxzdCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiArK2NhbGxzIDw9IDEgfHwgdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZHVyaW5nID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG5cbiAgICAgICAgdmFyIG5leHQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjaGVjayk7XG4gICAgICAgICAgICAgICAgdGVzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24oZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRydXRoKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QoY2hlY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb0R1cmluZyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgYXN5bmMuZHVyaW5nKGZ1bmN0aW9uKG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjYWxscysrIDwgMSkge1xuICAgICAgICAgICAgICAgIG5leHQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3F1ZXVlKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHBvcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayB8fCBub29wXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9uZXh0KHEsIHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIF9hcnJheUVhY2godGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2god29ya2Vyc0xpc3QsIGZ1bmN0aW9uICh3b3JrZXIsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya2VyID09PSB0YXNrICYmICFyZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBub29wLFxuICAgICAgICAgICAgZW1wdHk6IG5vb3AsXG4gICAgICAgICAgICBkcmFpbjogbm9vcCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5kcmFpbiA9IG5vb3A7XG4gICAgICAgICAgICAgICAgcS50YXNrcyA9IFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnQ6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrcyA9IHEucGF5bG9hZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS5wYXlsb2FkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS50YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9tYXAodGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5wdXNoKHRhc2tzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShfbmV4dChxLCB0YXNrcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyKGRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtlcnNMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSBmYWxzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bWVDb3VudCA9IE1hdGgubWluKHEuY29uY3VycmVuY3ksIHEudGFza3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHJlc3VtZUNvdW50OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBxID0gX3F1ZXVlKGZ1bmN0aW9uIChpdGVtcywgY2IpIHtcbiAgICAgICAgICAgIHdvcmtlcihpdGVtc1swXSwgY2IpO1xuICAgICAgICB9LCBjb25jdXJyZW5jeSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLnByaW9yaXR5UXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuXG4gICAgICAgIGZ1bmN0aW9uIF9jb21wYXJlVGFza3MoYSwgYil7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgICB2YXIgYmVnID0gLTEsXG4gICAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgc2VxdWVuY2VbbWlkXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWcgPSBtaWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmVnO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBfcXVldWUod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2NvbnNvbGVfZm4obmFtZSkge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2goYXJncywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlW25hbWVdKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgaWRlbnRpdHk7XG4gICAgICAgIHZhciBtZW1vaXplZCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24gbWVtb2l6ZWQoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBtZW1vW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0gPSBbY2FsbGJhY2tdO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW9ba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH07XG5cbiAgICBhc3luYy51bm1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3RpbWVzKG1hcHBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG1hcHBlcihfcmFuZ2UoY291bnQpLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jLnRpbWVzID0gX3RpbWVzKGFzeW5jLm1hcCk7XG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBfdGltZXMoYXN5bmMubWFwU2VyaWVzKTtcbiAgICBhc3luYy50aW1lc0xpbWl0ID0gZnVuY3Rpb24gKGNvdW50LCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5tYXBMaW1pdChfcmFuZ2UoY291bnQpLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VxID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5vb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnJlZHVjZShmbnMsIGFyZ3MsIGZ1bmN0aW9uIChuZXdhcmdzLCBmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBuZXdhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBuZXh0YXJncykge1xuICAgICAgICAgICAgICAgICAgICBjYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY29tcG9zZSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIF9hcHBseUVhY2goZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uKGZucywgYXJncykge1xuICAgICAgICAgICAgdmFyIGdvID0gX3Jlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgXywgY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncy5jb25jYXQoW2NiXSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ28uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ287XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmFwcGx5RWFjaCA9IF9hcHBseUVhY2goYXN5bmMuZWFjaE9mKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZlNlcmllcyk7XG5cblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seV9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIgdGFzayA9IGVuc3VyZUFzeW5jKGZuKTtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmVuc3VyZUFzeW5jID0gZW5zdXJlQXN5bmM7XG5cbiAgICBhc3luYy5jb25zdGFudCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICAgIHZhciBhcmdzID0gW251bGxdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhc3luYy53cmFwU3luYyA9XG4gICAgYXN5bmMuYXN5bmNpZnkgPSBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChfaXNPYmplY3QocmVzdWx0KSAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIubWVzc2FnZSA/IGVyciA6IG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcblxuICAgIGRpbSA9IGRpbSB8fCAyO1xuXG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLFxuICAgICAgICBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcbiAgICAgICAgdHJpYW5nbGVzID0gW107XG5cbiAgICBpZiAoIW91dGVyTm9kZSkgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBzaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgc2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIHN1bSA9IDAsXG4gICAgICAgIGksIGosIGxhc3Q7XG5cbiAgICAvLyBjYWxjdWxhdGUgb3JpZ2luYWwgd2luZGluZyBvcmRlciBvZiBhIHBvbHlnb24gcmluZ1xuICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuXG4gICAgLy8gbGluayBwb2ludHMgaW50byBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHN1bSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG4gICAgaWYgKCFzdGFydCkgcmV0dXJuIHN0YXJ0O1xuICAgIGlmICghZW5kKSBlbmQgPSBzdGFydDtcblxuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcCA9IGVuZCA9IHAucHJldjtcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuICAgIHJldHVybiBlbmQ7XG59XG5cbi8vIG1haW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBhcyBhIGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIHBhc3MpIHtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuICAgIGlmICghcGFzcyAmJiBzaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICB2YXIgc3RvcCA9IGVhcixcbiAgICAgICAgcHJldiwgbmV4dDtcblxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuICAgIHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcbiAgICAgICAgcHJldiA9IGVhci5wcmV2O1xuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XG5cbiAgICAgICAgaWYgKHNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIHNpemUpIDogaXNFYXIoZWFyKSkge1xuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXG4gICAgICAgICAgICByZW1vdmVOb2RlKGVhcik7XG5cbiAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRpY2UgbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhlYXIsIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIHNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICAvLyBmaXJzdCBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBpbmNyZWFzaW5nIHotb3JkZXJcbiAgICB2YXIgcCA9IGVhci5uZXh0WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyB0aGVuIGxvb2sgZm9yIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICBwID0gZWFyLnByZXZaO1xuXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgLy8gYSBzZWxmLWludGVyc2VjdGlvbiB3aGVyZSBlZGdlICh2W2ktMV0sdltpXSkgaW50ZXJzZWN0cyAodltpKzFdLHZbaSsyXSlcbiAgICAgICAgaWYgKGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHA7XG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBsb29rIGZvciBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgICAgICAgICBhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiA9IGIubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBhID0gYS5uZXh0O1xuICAgIH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG4gICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuICAgICAgICBpZiAobGlzdCA9PT0gbGlzdC5uZXh0KSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuICAgICAgICBxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcbiAgICB9XG5cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0ZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlWChhLCBiKSB7XG4gICAgcmV0dXJuIGEueCAtIGIueDtcbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkge1xuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xuICAgICAgICBmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcbiAgICB9XG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBwID0gb3V0ZXJOb2RlLFxuICAgICAgICBoeCA9IGhvbGUueCxcbiAgICAgICAgaHkgPSBob2xlLnksXG4gICAgICAgIHF4ID0gLUluZmluaXR5LFxuICAgICAgICBtO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgdGFuO1xuXG4gICAgcCA9IG0ubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBzdG9wKSB7XG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG0ueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG0ueSA/IGh4IDogcXgsIGh5LCBtLngsIG0ueSwgaHkgPCBtLnkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuICAgICAgICAgICAgaWYgKCh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIHAueCA+IG0ueCkpICYmIGxvY2FsbHlJbnNpZGUocCwgaG9sZSkpIHtcbiAgICAgICAgICAgICAgICBtID0gcDtcbiAgICAgICAgICAgICAgICB0YW5NaW4gPSB0YW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBtO1xufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgIHAucHJldlogPSBwLnByZXY7XG4gICAgICAgIHAubmV4dFogPSBwLm5leHQ7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgcC5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKHApO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIGRvIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHFTaXplID09PSAwIHx8ICFxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAueiA8PSBxLnopIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuICAgICAgICBpblNpemUgKj0gMjtcblxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIHNpemUgb2YgdGhlIGRhdGEgYm91bmRpbmcgYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpIC8gc2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpIC8gc2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LngpIGxlZnRtb3N0ID0gcDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gbGVmdG1vc3Q7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcbiAgICByZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXF1YWxzKGEsIGIpIHx8IGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcbiAgICAgICAgICAgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKTtcbn1cblxuLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xufVxuXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXG4gICAgICAgICAgIGFyZWEocDIsIHEyLCBwMSkgPiAwICE9PSBhcmVhKHAyLCBxMiwgcTEpID4gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG4vLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG4gICAgICAgIGFuID0gYS5uZXh0LFxuICAgICAgICBicCA9IGIucHJldjtcblxuICAgIGEubmV4dCA9IGI7XG4gICAgYi5wcmV2ID0gYTtcblxuICAgIGEyLm5leHQgPSBhbjtcbiAgICBhbi5wcmV2ID0gYTI7XG5cbiAgICBiMi5uZXh0ID0gYTI7XG4gICAgYTIucHJldiA9IGIyO1xuXG4gICAgYnAubmV4dCA9IGIyO1xuICAgIGIyLnByZXYgPSBicDtcblxuICAgIHJldHVybiBiMjtcbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgcC5wcmV2ID0gcDtcbiAgICAgICAgcC5uZXh0ID0gcDtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHAubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgcC5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xuICAgICAgICBsYXN0Lm5leHQgPSBwO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XG4gICAgcC5uZXh0LnByZXYgPSBwLnByZXY7XG4gICAgcC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cbiAgICBpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG4gICAgaWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcbiAgICAvLyB2ZXJ0aWNlIGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRpY2Ugbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vXG4vLyBXZSBzdG9yZSBvdXIgRUUgb2JqZWN0cyBpbiBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBgfmAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Qgb3ZlcnJpZGRlbiBvclxuLy8gdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy8gV2UgYWxzbyBhc3N1bWUgdGhhdCBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV2ZW50IG5hbWVcbi8vIGlzIGFuIEVTNiBTeW1ib2wuXG4vL1xudmFyIHByZWZpeCA9IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nID8gJ34nIDogZmFsc2U7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgRXZlbnRFbWl0dGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBDb250ZXh0IGZvciBmdW5jdGlvbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSBlbWl0IG9uY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTWluaW1hbCBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIEV2ZW50RW1pdHRlciBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7IC8qIE5vdGhpbmcgdG8gc2V0ICovIH1cblxuLyoqXG4gKiBIb2xkcyB0aGUgYXNzaWduZWQgRXZlbnRFbWl0dGVycyBieSBuYW1lLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBhc3NpZ25lZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBleGlzdHMgV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtBcnJheXxCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQsIGV4aXN0cykge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgYXZhaWxhYmxlID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChleGlzdHMpIHJldHVybiAhIWF2YWlsYWJsZTtcbiAgaWYgKCFhdmFpbGFibGUpIHJldHVybiBbXTtcbiAgaWYgKGF2YWlsYWJsZS5mbikgcmV0dXJuIFthdmFpbGFibGUuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXZhaWxhYmxlLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGF2YWlsYWJsZVtpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB0byBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJbmRpY2F0aW9uIGlmIHdlJ3ZlIGVtaXR0ZWQgYW4gZXZlbnQuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IEV2ZW50TGlzdGVuZXIgZm9yIHRoZSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0b259IGZuIENhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGQgYW4gRXZlbnRMaXN0ZW5lciB0aGF0J3Mgb25seSBjYWxsZWQgb25jZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IHRoaXMsIHRydWUpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKSB0aGlzLl9ldmVudHMgPSBwcmVmaXggPyB7fSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHRoaXMuX2V2ZW50c1tldnRdID0gbGlzdGVuZXI7XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5fZXZlbnRzW2V2dF0uZm4pIHRoaXMuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIGVsc2UgdGhpcy5fZXZlbnRzW2V2dF0gPSBbXG4gICAgICB0aGlzLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3ZSB3YW50IHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciB0aGF0IHdlIG5lZWQgdG8gZmluZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgT25seSByZW1vdmUgbGlzdGVuZXJzIG1hdGNoaW5nIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmNlIGxpc3RlbmVycy5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGV2ZW50cyA9IFtdO1xuXG4gIGlmIChmbikge1xuICAgIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgICAgbGlzdGVuZXJzLmZuICE9PSBmblxuICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzLm9uY2UpXG4gICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVycy5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm5cbiAgICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpXG4gICAgICAgICAgfHwgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gIC8vXG4gIGlmIChldmVudHMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbZXZ0XTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycyBvciBvbmx5IHRoZSBsaXN0ZW5lcnMgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvci5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcztcblxuICBpZiAoZXZlbnQpIGRlbGV0ZSB0aGlzLl9ldmVudHNbcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudF07XG4gIGVsc2UgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYXBwbHkgYW55bW9yZS5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLypqc2hpbnQgb25ldmFyOiBmYWxzZSwgaW5kZW50OjQgKi9cbi8qZ2xvYmFsIHNldEltbWVkaWF0ZTogZmFsc2UsIHNldFRpbWVvdXQ6IGZhbHNlLCBjb25zb2xlOiBmYWxzZSAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciByb290LCBwcmV2aW91c19hc3luYztcblxuICAgIHJvb3QgPSB0aGlzO1xuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgIHByZXZpb3VzX2FzeW5jID0gcm9vdC5hc3luYztcbiAgICB9XG5cbiAgICBhc3luYy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmFzeW5jID0gcHJldmlvdXNfYXN5bmM7XG4gICAgICAgIHJldHVybiBhc3luYztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb25seV9vbmNlKGZuKSB7XG4gICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGNhbGxlZCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseShyb290LCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIHZhciBfZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaV0sIGksIGFycik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIF9tYXAgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBpZiAoYXJyLm1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5tYXAoaXRlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih4LCBpLCBhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgdmFyIF9yZWR1Y2UgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBpZiAoYXJyLnJlZHVjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8pO1xuICAgICAgICB9XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICB2YXIgX2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIC8vLy8gZXhwb3J0ZWQgYXN5bmMgbW9kdWxlIGZ1bmN0aW9ucyAvLy8vXG5cbiAgICAvLy8vIG5leHRUaWNrIGltcGxlbWVudGF0aW9uIHdpdGggYnJvd3Nlci1jb21wYXRpYmxlIGZhbGxiYWNrIC8vLy9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICEocHJvY2Vzcy5uZXh0VGljaykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgICBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAvLyBub3QgYSBkaXJlY3QgYWxpYXMgZm9yIElFMTAgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBvbmx5X29uY2UoZG9uZSkgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaCA9IGFzeW5jLmVhY2g7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmICghYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgIHZhciBpdGVyYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA+PSBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2hTZXJpZXMgPSBhc3luYy5lYWNoU2VyaWVzO1xuXG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZm4gPSBfZWFjaExpbWl0KGxpbWl0KTtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgW2FyciwgaXRlcmF0b3IsIGNhbGxiYWNrXSk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPSBhc3luYy5lYWNoTGltaXQ7XG5cbiAgICB2YXIgX2VhY2hMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBpZiAoIWFyci5sZW5ndGggfHwgbGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmIHN0YXJ0ZWQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihhcnJbc3RhcnRlZCAtIDFdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBkb1BhcmFsbGVsID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZG9QYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24obGltaXQsIGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW19lYWNoTGltaXQobGltaXQpXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvU2VyaWVzID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hTZXJpZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuXG4gICAgdmFyIF9hc3luY01hcCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW3guaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX21hcExpbWl0KGxpbWl0KShhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHZhciBfbWFwTGltaXQgPSBmdW5jdGlvbihsaW1pdCkge1xuICAgICAgICByZXR1cm4gZG9QYXJhbGxlbExpbWl0KGxpbWl0LCBfYXN5bmNNYXApO1xuICAgIH07XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gaW5qZWN0IGFsaWFzXG4gICAgYXN5bmMuaW5qZWN0ID0gYXN5bmMucmVkdWNlO1xuICAgIC8vIGZvbGRsIGFsaWFzXG4gICAgYXN5bmMuZm9sZGwgPSBhc3luYy5yZWR1Y2U7XG5cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIC8vIGZvbGRyIGFsaWFzXG4gICAgYXN5bmMuZm9sZHIgPSBhc3luYy5yZWR1Y2VSaWdodDtcblxuICAgIHZhciBfZmlsdGVyID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZmlsdGVyID0gZG9QYXJhbGxlbChfZmlsdGVyKTtcbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcbiAgICAvLyBzZWxlY3QgYWxpYXNcbiAgICBhc3luYy5zZWxlY3QgPSBhc3luYy5maWx0ZXI7XG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID0gYXN5bmMuZmlsdGVyU2VyaWVzO1xuXG4gICAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIHZhciBfZGV0ZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5kZXRlY3QgPSBkb1BhcmFsbGVsKF9kZXRlY3QpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IGRvU2VyaWVzKF9kZXRlY3QpO1xuXG4gICAgYXN5bmMuc29tZSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGFueSBhbGlhc1xuICAgIGFzeW5jLmFueSA9IGFzeW5jLnNvbWU7XG5cbiAgICBhc3luYy5ldmVyeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbGwgYWxpYXNcbiAgICBhc3luYy5hbGwgPSBhc3luYy5ldmVyeTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChmbiksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aFxuICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB2YXIgYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGZuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0YXNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tXG4gICAgICAgICAgICBfZWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudCBmaW5hbCBjYWxsYmFjayBmcm9tIGNhbGxpbmcgaXRzZWxmIGlmIGl0IGVycm9yc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICB0aGVDYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2VhY2goa2V5cywgZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gX2lzQXJyYXkodGFza3Nba10pID8gdGFza3Nba106IFt0YXNrc1trXV07XG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2FmZVJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgX2VhY2goX2tleXMocmVzdWx0cyksIGZ1bmN0aW9uKHJrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW3JrZXldID0gcmVzdWx0c1tya2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3Agc3Vic2VxdWVudCBlcnJvcnMgaGl0dGluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIE1hdGguYWJzKHRhc2subGVuZ3RoIC0gMSkpIHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuICAgICAgICAvLyBVc2UgZGVmYXVsdHMgaWYgdGltZXMgbm90IHBhc3NlZFxuICAgICAgICBpZiAodHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgICAgICB0aW1lcyA9IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRpbWVzIGlzIGEgbnVtYmVyXG4gICAgICAgIHRpbWVzID0gcGFyc2VJbnQodGltZXMsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICB2YXIgd3JhcHBlZFRhc2sgPSBmdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICB2YXIgcmV0cnlBdHRlbXB0ID0gZnVuY3Rpb24odGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2hpbGUgKHRpbWVzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQodGFzaywgISh0aW1lcy09MSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IGNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQsIHJ1biB0aGlzIGFzIGEgY29udHJvbGwgZmxvd1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2tcbiAgICB9O1xuXG4gICAgYXN5bmMud2F0ZXJmYWxsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIV9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd3JhcEl0ZXJhdG9yID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2god3JhcEl0ZXJhdG9yKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gZnVuY3Rpb24oZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKF9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgZWFjaGZuLm1hcCh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgZWFjaGZuLmVhY2goX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBhc3luYy5tYXAsIGVhY2g6IGFzeW5jLmVhY2ggfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKHRhc2tzLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBfbWFwTGltaXQobGltaXQpLCBlYWNoOiBfZWFjaExpbWl0KGxpbWl0KSB9LCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGFzeW5jLm1hcFNlcmllcyh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhfa2V5cyh0YXNrcyksIGZ1bmN0aW9uIChrLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRhc2tzW2tdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIHZhciBtYWtlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbWFrZUNhbGxiYWNrKDApO1xuICAgIH07XG5cbiAgICBhc3luYy5hcHBseSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBfY29uY2F0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNiKSB7XG4gICAgICAgICAgICBmbih4LCBmdW5jdGlvbiAoZXJyLCB5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMud2hpbHN0KHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICh0ZXN0LmFwcGx5KG51bGwsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0ZXN0KCkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3luYy51bnRpbCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvVW50aWwgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICghdGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvVW50aWwoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICBxLnRhc2tzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbnVsbCxcbiAgICAgICAgICAgIGVtcHR5OiBudWxsLFxuICAgICAgICAgICAgZHJhaW46IG51bGwsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcS5kcmFpbiA9IG51bGw7XG4gICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghcS5wYXVzZWQgJiYgd29ya2VycyA8IHEuY29uY3VycmVuY3kgJiYgcS50YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBxLnRhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLmVtcHR5ICYmIHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4gJiYgcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyKHRhc2suZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHEuY29uY3VycmVuY3k7IHcrKykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICBlbmQgPSBzZXF1ZW5jZS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciBtaWQgPSBiZWcgKyAoKGVuZCAtIGJlZyArIDEpID4+PiAxKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKF9iaW5hcnlTZWFyY2gocS50YXNrcywgaXRlbSwgX2NvbXBhcmVUYXNrcykgKyAxLCAwLCBpdGVtKTtcblxuICAgICAgICAgICAgICBpZiAocS5zYXR1cmF0ZWQgJiYgcS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvblxuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5jYXJnbyA9IGZ1bmN0aW9uICh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHdvcmtpbmcgICAgID0gZmFsc2UsXG4gICAgICAgICAgICB0YXNrcyAgICAgICA9IFtdO1xuXG4gICAgICAgIHZhciBjYXJnbyA9IHtcbiAgICAgICAgICAgIHRhc2tzOiB0YXNrcyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgZHJhaW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX2VhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXJnby5kcmFpbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXJnby5zYXR1cmF0ZWQgJiYgdGFza3MubGVuZ3RoID09PSBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnby5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShjYXJnby5wcm9jZXNzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICAgICAgICAgIGlmICh3b3JraW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZihjYXJnby5kcmFpbiAmJiAhY2FyZ28uZHJhaW5lZCkgY2FyZ28uZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdHMgPSB0eXBlb2YgcGF5bG9hZCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRhc2tzLnNwbGljZSgwLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza3Muc3BsaWNlKDAsIHRhc2tzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZHMgPSBfbWFwKHRzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFzay5kYXRhO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoY2FyZ28uZW1wdHkpIGNhcmdvLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgd29ya2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2VyKGRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgX2VhY2godHMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNhcmdvO1xuICAgIH07XG5cbiAgICB2YXIgX2NvbnNvbGVfZm4gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy50aW1lcyA9IGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb3VudGVyID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY291bnRlci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luYy5tYXAoY291bnRlciwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwU2VyaWVzKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGF0LCBbZXJyXS5jb25jYXQocmVzdWx0cykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICByZXR1cm4gYXN5bmMuc2VxLmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIHZhciBfYXBwbHlFYWNoID0gZnVuY3Rpb24gKGVhY2hmbiwgZm5zIC8qYXJncy4uLiovKSB7XG4gICAgICAgIHZhciBnbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgZnVuY3Rpb24gKGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5hcHBseUVhY2ggPSBkb1BhcmFsbGVsKF9hcHBseUVhY2gpO1xuICAgIGFzeW5jLmFwcGx5RWFjaFNlcmllcyA9IGRvU2VyaWVzKF9hcHBseUVhY2gpO1xuXG4gICAgYXN5bmMuZm9yZXZlciA9IGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xuXG4gICAgLy8gTm9kZS5qc1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwidmFyIGFzeW5jICAgICAgID0gcmVxdWlyZSgnYXN5bmMnKSxcbiAgICB1cmxQYXJzZXIgICA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIFJlc291cmNlICAgID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBtdWx0aXBsZSByZXNvdXJjZXMgdG8gbG9hZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIGNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvZ3Jlc3MgcGVyY2VudCBvZiB0aGUgbG9hZGVyIGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogTG9hZGluZyBzdGF0ZSBvZiB0aGUgbG9hZGVyLCB0cnVlIGlmIGl0IGlzIGN1cnJlbnRseSBsb2FkaW5nIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0b3RhbCBwcm9ncmVzcyB0aGF0IGEgc2luZ2xlIHJlc291cmNlIHJlcHJlc2VudHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWlkZGxld2FyZSB0byBydW4gYmVmb3JlIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGFmdGVyIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9sb2FkUmVzb3VyY2VgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRMb2FkUmVzb3VyY2UgPSB0aGlzLl9sb2FkUmVzb3VyY2UuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uTG9hZGAgZnVuY3Rpb24gYm91bmQgd2l0aCB0aGlzIG9iamVjdCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uTG9hZCA9IHRoaXMuX29uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlIGJ1ZmZlciB0aGF0IGZpbGxzIHVudGlsIGBsb2FkYCBpcyBjYWxsZWQgdG8gc3RhcnQgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlW119XG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyID0gW107XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHRyYWNrIGxvYWQgY29tcGxldGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb3VyY2VzIHdhaXRpbmcgdG8gYmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX3F1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fYm91bmRMb2FkUmVzb3VyY2UsIGNvbmN1cnJlbmN5KTtcblxuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGlzIGxvYWRlciBrZXllZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgUmVzb3VyY2U+fVxuICAgICAqL1xuICAgIHRoaXMucmVzb3VyY2VzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCBvciBlcnJvcmVkIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgb25jZSBwZXIgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbG9hZGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdGFydFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHF1ZXVlZCByZXNvdXJjZXMgYWxsIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY29tcGxldGVcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuLyoqXG4gKiBBZGRzIGEgcmVzb3VyY2UgKG9yIG11bHRpcGxlIHJlc291cmNlcykgdG8gdGhlIGxvYWRlciBxdWV1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGEgd2lkZSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwYXJhbWV0ZXJzLiBUaGUgb25seSB0aGluZyB0aGF0IGlzIGFsd2F5c1xuICogcmVxdWlyZWQgdGhlIHVybCB0byBsb2FkLiBBbGwgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6XG4gKlxuICogYGBganNcbiAqIGxvYWRlclxuICogICAgIC8vIG5vcm1hbCBwYXJhbSBzeW50YXhcbiAqICAgICAuYWRkKCdrZXknLCAnaHR0cDovLy4uLicsIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJylcbiAqXG4gKiAgICAgLy8gb2JqZWN0IHN5bnRheFxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MicsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIG5hbWU6ICdrZXkzJyxcbiAqICAgICAgICAgdXJsOiAnaHR0cDovLy4uLidcbiAqICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge31cbiAqICAgICB9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwczovLy4uLicsXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9LFxuICogICAgICAgICBjcm9zc09yaWdpbjogdHJ1ZVxuICogICAgIH0pXG4gKlxuICogICAgIC8vIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJscyBvciBib3RoXG4gKiAgICAgLmFkZChbXG4gKiAgICAgICAgIHsgbmFtZTogJ2tleTQnLCB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgeyB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgJ2h0dHA6Ly8uLi4nXG4gKiAgICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAYWxpYXMgZW5xdWV1ZVxuICogQHBhcmFtIFtuYW1lXSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZCwgaWYgbm90IHBhc3NlZCB0aGUgdXJsIGlzIHVzZWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIHJlbGF0aXZlIHRvIHRoZSBiYXNlVXJsIG9mIHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcGFyYW0gW29wdGlvbnMuY3Jvc3NPcmlnaW5dIHtib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5YSFJfTE9BRF9UWVBFfSBIb3cgc2hvdWxkIHRoaXMgcmVzb3VyY2UgYmUgbG9hZGVkP1xuICogQHBhcmFtIFtvcHRpb25zLnhoclR5cGU9UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVF0ge1Jlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFfSBIb3cgc2hvdWxkIHRoZSBkYXRhIGJlaW5nXG4gKiAgICAgIGxvYWRlZCBiZSBpbnRlcnByZXRlZCB3aGVuIHVzaW5nIFhIUj9cbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMgc3BlY2lmaWMgcmVzb3VyY2UgY29tcGxldGVzIGxvYWRpbmcuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWRkID0gTG9hZGVyLnByb3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgb3B0aW9ucywgY2IpIHtcbiAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciB1cmxzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChuYW1lW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGlmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW5zdGVhZCBvZiBwYXJhbXNcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNiID0gdXJsIHx8IG5hbWUuY2FsbGJhY2sgfHwgbmFtZS5vbkNvbXBsZXRlO1xuICAgICAgICBvcHRpb25zID0gbmFtZTtcbiAgICAgICAgdXJsID0gbmFtZS51cmw7XG4gICAgICAgIG5hbWUgPSBuYW1lLm5hbWUgfHwgbmFtZS5rZXkgfHwgbmFtZS51cmw7XG4gICAgfVxuXG4gICAgLy8gY2FzZSB3aGVyZSBubyBuYW1lIGlzIHBhc3NlZCBzaGlmdCBhbGwgYXJncyBvdmVyIGJ5IG9uZS5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdXJsO1xuICAgICAgICB1cmwgPSBuYW1lO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IHdlIHNoaWZ0ZWQgbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9wZXIgdXJsLlxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVybCBwYXNzZWQgdG8gYWRkIHJlc291cmNlIHRvIGxvYWRlci4nKTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zIGFyZSBvcHRpb25hbCBzbyBwZW9wbGUgbWlnaHQgcGFzcyBhIGZ1bmN0aW9uIGFuZCBubyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW25hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzb3VyY2Ugd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBleGlzdHMuJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJhc2UgdXJsIGlmIHRoaXMgaXNuJ3QgYW4gYWJzb2x1dGUgdXJsXG4gICAgdXJsID0gdGhpcy5faGFuZGxlQmFzZVVybCh1cmwpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBzdG9yZSB0aGUgcmVzb3VyY2VcbiAgICB0aGlzLnJlc291cmNlc1tuYW1lXSA9IG5ldyBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlc291cmNlc1tuYW1lXS5vbmNlKCdhZnRlck1pZGRsZXdhcmUnLCBjYik7XG4gICAgfVxuXG4gICAgdGhpcy5fbnVtVG9Mb2FkKys7XG5cbiAgICAvLyBpZiBhbHJlYWR5IGxvYWRpbmcgYWRkIGl0IHRvIHRoZSB3b3JrZXIgcXVldWVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9ICgxMDAgLSB0aGlzLnByb2dyZXNzKSAvICh0aGlzLl9xdWV1ZS5sZW5ndGgoKSArIHRoaXMuX3F1ZXVlLnJ1bm5pbmcoKSk7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBidWZmZXIgaXQgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlIGxhdGVyXG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDEwMCAvIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5Mb2FkZXIucHJvdG90eXBlLl9oYW5kbGVCYXNlVXJsID0gZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBwYXJzZWRVcmwgPSB1cmxQYXJzZXIucGFyc2UodXJsKTtcblxuICAgIC8vIGFic29sdXRlIHVybCwganVzdCB1c2UgaXQgYXMgaXMuXG4gICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCB8fCBwYXJzZWRVcmwucGF0aG5hbWUuaW5kZXhPZignLy8nKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIC8vIGlmIGJhc2VVcmwgZG9lc24ndCBlbmQgaW4gc2xhc2ggYW5kIHVybCBkb2Vzbid0IHN0YXJ0IHdpdGggc2xhc2gsIHRoZW4gYWRkIGEgc2xhc2ggaW5iZXR3ZWVuXG4gICAgaWYgKFxuICAgICAgICB0aGlzLmJhc2VVcmwubGVuZ3RoICYmXG4gICAgICAgIHRoaXMuYmFzZVVybC5sYXN0SW5kZXhPZignLycpICE9PSB0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSAmJlxuICAgICAgICB1cmwuY2hhckF0KDApICE9PSAnLydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybCArICcvJyArIHVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmJlZm9yZSogdGhlXG4gKiByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKlxuICogQGFsaWFzIHByZVxuICogQHBhcmFtIG1pZGRsZXdhcmUge2Z1bmN0aW9ufSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5iZWZvcmUgPSBMb2FkZXIucHJvdG90eXBlLnByZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB1cCBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gdGhhdCB3aWxsIHJ1biAqYWZ0ZXIqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyB1c2VcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWZ0ZXIgPSBMb2FkZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZS5wdXNoKGZuKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHF1ZXVlIG9mIHRoZSBsb2FkZXIgdG8gcHJlcGFyZSBmb3IgYSBuZXcgbG9hZC5cbiAqXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gdGhpcy5iYXNlVXJsID0gYmFzZVVybCB8fCAnJztcblxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9ncmVzc0NodW5rID0gMDtcblxuICAgIC8vIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUubGVuZ3RoID0gMDtcbiAgICAvLyB0aGlzLl9hZnRlck1pZGRsZXdhcmUubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fbnVtVG9Mb2FkID0gMDtcblxuICAgIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgICB0aGlzLl9xdWV1ZS5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBTdGFydHMgbG9hZGluZyB0aGUgcXVldWVkIHJlc291cmNlcy5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgY29tcGxldGVgIGV2ZW50LlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAvLyByZWdpc3RlciBjb21wbGV0ZSBjYWxsYmFjayBpZiB0aGV5IHBhc3Mgb25lXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBxdWV1ZSBoYXMgYWxyZWFkeSBzdGFydGVkIHdlIGFyZSBkb25lIGhlcmVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBub3RpZnkgb2Ygc3RhcnRcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBzdGFydCB0aGUgaW50ZXJuYWwgcXVldWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMuX2J1ZmZlcltpXSk7XG4gICAgfVxuXG4gICAgLy8gZW1wdHkgdGhlIGJ1ZmZlclxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIExvYWRzIGEgc2luZ2xlIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc291cmNlID0gZnVuY3Rpb24gKHJlc291cmNlLCBkZXF1ZXVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmVzb3VyY2UuX2RlcXVldWUgPSBkZXF1ZXVlO1xuXG4gICAgdGhpcy5fcnVuTWlkZGxld2FyZShyZXNvdXJjZSwgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXNvdXJjZS5vbigncHJvZ3Jlc3MnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAncHJvZ3Jlc3MnKSk7XG5cbiAgICAgICAgcmVzb3VyY2UubG9hZChzZWxmLl9ib3VuZE9uTG9hZCk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbmNlIGVhY2ggcmVzb3VyY2UgaGFzIGxvYWRlZC5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX29uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMsIHRoaXMucmVzb3VyY2VzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGVhY2ggdGltZSBhIHJlc291cmNlcyBpcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAZmlyZXMgZXJyb3JcbiAqIEBmaXJlcyBsb2FkXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICB0aGlzLnByb2dyZXNzICs9IHRoaXMuX3Byb2dyZXNzQ2h1bms7XG5cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgcmVzb3VyY2UpO1xuXG4gICAgLy8gcnVuIG1pZGRsZXdhcmUsIHRoaXMgKm11c3QqIGhhcHBlbiBiZWZvcmUgZGVxdWV1ZSBzbyBzdWItYXNzZXRzIGdldCBhZGRlZCBwcm9wZXJseVxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2FmdGVyTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvdXJjZS5lbWl0KCdhZnRlck1pZGRsZXdhcmUnLCByZXNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5fbnVtVG9Mb2FkLS07XG5cbiAgICAgICAgLy8gZG8gY29tcGxldGlvbiBjaGVja1xuICAgICAgICBpZiAodGhpcy5fbnVtVG9Mb2FkID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgdGhpcy5fb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzb3VyY2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCByZXNvdXJjZS5lcnJvciwgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkJywgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG5cblxuICAgIC8vIHJlbW92ZSB0aGlzIHJlc291cmNlIGZyb20gdGhlIGFzeW5jIHF1ZXVlXG4gICAgcmVzb3VyY2UuX2RlcXVldWUoKTtcbn07XG5cbi8qKlxuICogUnVuIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9uIGEgcmVzb3VyY2UuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fcnVuTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZm5zLCBjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGFzeW5jLmVhY2hTZXJpZXMoZm5zLCBmdW5jdGlvbiAoZm4sIG5leHQpIHtcbiAgICAgICAgZm4uY2FsbChzZWxmLCByZXNvdXJjZSwgbmV4dCk7XG4gICAgfSwgY2IuYmluZCh0aGlzLCByZXNvdXJjZSkpO1xufTtcblxuTG9hZGVyLkxPQURfVFlQRSA9IFJlc291cmNlLkxPQURfVFlQRTtcbkxvYWRlci5YSFJfUkVBRFlfU1RBVEUgPSBSZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEU7XG5Mb2FkZXIuWEhSX1JFU1BPTlNFX1RZUEUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRTtcbiIsInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgX3VybCA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIC8vIHRlc3RzIGlzIENPUlMgaXMgc3VwcG9ydGVkIGluIFhIUiwgaWYgbm90IHdlIG5lZWQgdG8gdXNlIFhEUlxuICAgIHVzZVhkciA9ICEhKHdpbmRvdy5YRG9tYWluUmVxdWVzdCAmJiAhKCd3aXRoQ3JlZGVudGlhbHMnIGluIChuZXcgWE1MSHR0cFJlcXVlc3QoKSkpKSxcbiAgICB0ZW1wQW5jaG9yID0gbnVsbDtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRlZCBieVxuICogYSBzaW5nbGUgVVJMLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIG5hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd8c3RyaW5nW119IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIGZvciBhdWRpby92aWRlbyBsb2FkcyB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7c3RyaW5nfGJvb2xlYW59IElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IERlZmF1bHQgaXMgdG8gZGV0ZXJtaW5lIGF1dG9tYXRpY2FsbHkuXG4gKiBAcGFyYW0gW29wdGlvbnMubG9hZFR5cGU9UmVzb3VyY2UuTE9BRF9UWVBFLlhIUl0ge1Jlc291cmNlLkxPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW29wdGlvbnMubWV0YWRhdGFdIHtvYmplY3R9IEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmUuXG4gKi9cbmZ1bmN0aW9uIFJlc291cmNlKG5hbWUsIHVybCwgb3B0aW9ucykge1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBuYW1lIGFuZCB1cmwgYXJlIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgYSByZXNvdXJjZS4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdXJsIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgdXJsIGlzIGEgZGF0YSB1cmwuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNEYXRhVXJsID0gdGhpcy51cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnl9XG4gICAgICovXG4gICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jcm9zc09yaWdpbiA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnYW5vbnltb3VzJyA6IG9wdGlvbnMuY3Jvc3NPcmlnaW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIG9mIGxvYWRpbmcgdG8gdXNlIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2UuTE9BRF9UWVBFfVxuICAgICAqL1xuICAgIHRoaXMubG9hZFR5cGUgPSBvcHRpb25zLmxvYWRUeXBlIHx8IHRoaXMuX2RldGVybWluZUxvYWRUeXBlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSB1c2VkIHRvIGxvYWQgdGhlIHJlc291cmNlIHZpYSBYSFIuIElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy54aHJUeXBlID0gb3B0aW9ucy54aHJUeXBlO1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgaW5mbyBmb3IgbWlkZGxld2FyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgd2hpbGUgbG9hZGluZyAoaWYgYW55KS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Vycm9yfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFhIUiBvYmplY3QgdGhhdCB3YXMgdXNlZCB0byBsb2FkIHRoaXMgcmVzb3VyY2UuIFRoaXMgaXMgb25seSBzZXRcbiAgICAgKiB3aGVuIGBsb2FkVHlwZWAgaXMgYFJlc291cmNlLkxPQURfVFlQRS5YSFJgLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7WE1MSHR0cFJlcXVlc3R9XG4gICAgICovXG4gICAgdGhpcy54aHIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBqc29uLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0pzb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgeG1sLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1htbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhbiBpbWFnZSB0YWcuIE9ubHkgdmFsaWQgYWZ0ZXIgdGhlIHJlc291cmNlXG4gICAgICogaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gYXVkaW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0F1ZGlvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGEgdmlkZW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1ZpZGVvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGRlcXVldWVgIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBhIHN0b3JhZ2UgcGxhY2UgZm9yIHRoZSBhc3luYyBxdWV1ZSBkZXF1ZXVlIG1ldGhvZFxuICAgICAqIHVzZWQgcHJpdmF0ZWx5IGJ5IHRoZSBsb2FkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2RlcXVldWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBjb21wbGV0ZWAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kQ29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkVycm9yYCBmdW5jdGlvbiBib3VuZCB0byB0aGlzIHJlc291cmNlJ3MgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25Qcm9ncmVzc2AgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyA9IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcblxuICAgIC8vIHhociBjYWxsYmFja3NcbiAgICB0aGlzLl9ib3VuZFhock9uRXJyb3IgPSB0aGlzLl94aHJPbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYaHJPbkFib3J0ID0gdGhpcy5feGhyT25BYm9ydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25Mb2FkID0gdGhpcy5feGhyT25Mb2FkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYZHJPblRpbWVvdXQgPSB0aGlzLl94ZHJPblRpbWVvdXQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcmVzb3VyY2UgYmVpbmdzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGVhY2ggdGltZSBwcm9ncmVzcyBvZiB0aGlzIHJlc291cmNlIGxvYWQgdXBkYXRlcy5cbiAgICAgKiBOb3QgYWxsIHJlc291cmNlcyB0eXBlcyBhbmQgbG9hZGVyIHN5c3RlbXMgY2FuIHN1cHBvcnQgdGhpcyBldmVudFxuICAgICAqIHNvIHNvbWV0aW1lcyBpdCBtYXkgbm90IGJlIGF2YWlsYWJsZS4gSWYgdGhlIHJlc291cmNlXG4gICAgICogaXMgYmVpbmcgbG9hZGVkIG9uIGEgbW9kZXJuIGJyb3dzZXIsIHVzaW5nIFhIUiwgYW5kIHRoZSByZW1vdGUgc2VydmVyXG4gICAgICogcHJvcGVybHkgc2V0cyBDb250ZW50LUxlbmd0aCBoZWFkZXJzLCB0aGVuIHRoaXMgd2lsbCBiZSBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcHJvZ3Jlc3NcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgdGhpcyByZXNvdXJjZSBoYXMgbG9hZGVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaXQgd2lsbFxuICAgICAqIGJlIGluIHRoZSBgZXJyb3JgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xufVxuXG5SZXNvdXJjZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVzb3VyY2U7XG5tb2R1bGUuZXhwb3J0cyA9IFJlc291cmNlO1xuXG4vKipcbiAqIE1hcmtzIHRoZSByZXNvdXJjZSBhcyBjb21wbGV0ZS5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgaW4gYSB3cmFwcGVyIG9yIHNvbWV0aGluZy4uLmdyb3NzLi4uLlxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICAgIGlmICh0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvcik7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIub25lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25wcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbmxvYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBLaWNrcyBvZmYgbG9hZGluZyBvZiB0aGlzIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBzdGFydFxuICogQHBhcmFtIFtjYWxsYmFja10ge2Z1bmN0aW9ufSBPcHRpb25hbCBjYWxsYmFjayB0byBjYWxsIG9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBpZiBhIGNhbGxiYWNrIGlzIHNldCwgbGlzdGVuIGZvciBjb21wbGV0ZSBldmVudFxuICAgIGlmIChjYikge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4gPT09IGZhbHNlIHx8IHR5cGVvZiB0aGlzLmNyb3NzT3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdGhpcy5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4odGhpcy51cmwpO1xuICAgIH1cblxuICAgIHN3aXRjaCh0aGlzLmxvYWRUeXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEltYWdlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5BVURJTzpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuVklERU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlhIUjpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh1c2VYZHIgJiYgdGhpcy5jcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYZHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYaHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gSW1hZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuc3JjID0gdGhpcy51cmw7XG5cbiAgICB0aGlzLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEhUTUxBdWRpb0VsZW1lbnQgb3IgSFRNTFZpZGVvRWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJyAmJiB0eXBlb2YgQXVkaW8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBBdWRpbygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgJyArIHR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBDb2Nvb25KUyBDYW52YXMrIHJ1bnRpbWUsIGxhY2tzIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zcmMgPSBBcnJheS5pc0FycmF5KHRoaXMudXJsKSA/IHRoaXMudXJsWzBdIDogdGhpcy51cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51cmwubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWydpcycgKyB0eXBlWzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKV0gPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuXG4gICAgdGhpcy5kYXRhLmxvYWQoKTtcbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gWE1MSHR0cFJlcXVlc3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGhyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIHNldCB0aGUgcmVxdWVzdCB0eXBlIGFuZCB1cmxcbiAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gbG9hZCBqc29uIGFzIHRleHQgYW5kIHBhcnNlIGl0IG91cnNlbHZlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHNvbWUgYnJvd3NlcnNcbiAgICAvLyAqY291Z2gqIHNhZmFyaSAqY291Z2gqIGNhbid0IGRlYWwgd2l0aCBpdC5cbiAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OIHx8IHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gdGhpcy54aHJUeXBlO1xuICAgIH1cblxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvciwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQsIGZhbHNlKTtcblxuICAgIHhoci5zZW5kKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhEb21haW5SZXF1ZXN0LiBUaGlzIGlzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHN1cHBvcnQgSUU5IChncm9zcykuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGRyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGRyID0gdGhpcy54aHIgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcblxuICAgIC8vIFhEb21haW5SZXF1ZXN0IGhhcyBhIGZldyBxdWlya3MuIE9jY2FzaW9uYWxseSBpdCB3aWxsIGFib3J0IHJlcXVlc3RzXG4gICAgLy8gQSB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBtYWtlIHN1cmUgQUxMIGNhbGxiYWNrcyBhcmUgc2V0IGV2ZW4gaWYgbm90IHVzZWRcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTc4Njk2Ni94ZG9tYWlucmVxdWVzdC1hYm9ydHMtcG9zdC1vbi1pZS05XG4gICAgeGRyLnRpbWVvdXQgPSA1MDAwO1xuXG4gICAgeGRyLm9uZXJyb3IgPSB0aGlzLl9ib3VuZFhock9uRXJyb3I7XG4gICAgeGRyLm9udGltZW91dCA9IHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0O1xuICAgIHhkci5vbnByb2dyZXNzID0gdGhpcy5fYm91bmRPblByb2dyZXNzO1xuICAgIHhkci5vbmxvYWQgPSB0aGlzLl9ib3VuZFhock9uTG9hZDtcblxuICAgIHhkci5vcGVuKCdHRVQnLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyAgTm90ZTogVGhlIHhkci5zZW5kKCkgY2FsbCBpcyB3cmFwcGVkIGluIGEgdGltZW91dCB0byBwcmV2ZW50IGFuIGlzc3VlIHdpdGggdGhlIGludGVyZmFjZSB3aGVyZSBzb21lIHJlcXVlc3RzIGFyZSBsb3N0XG4gICAgLy8gIGlmIG11bHRpcGxlIFhEb21haW5SZXF1ZXN0cyBhcmUgYmVpbmcgc2VudCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIC8vIFNvbWUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2lzc3Vlcy8xMjQ4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHhkci5zZW5kKCk7XG4gICAgfSwgMCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzb3VyY2UgdXNlZCBpbiBsb2FkaW5nIHZpYSBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB0eXBlIHtzdHJpbmd9IFRoZSBlbGVtZW50IHR5cGUgKHZpZGVvIG9yIGF1ZGlvKS5cbiAqIEBwYXJhbSB1cmwge3N0cmluZ30gVGhlIHNvdXJjZSBVUkwgdG8gbG9hZCBmcm9tLlxuICogQHBhcmFtIFttaW1lXSB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIG9mIHRoZSB2aWRlb1xuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9jcmVhdGVTb3VyY2UgPSBmdW5jdGlvbiAodHlwZSwgdXJsLCBtaW1lKSB7XG4gICAgaWYgKCFtaW1lKSB7XG4gICAgICAgIG1pbWUgPSB0eXBlICsgJy8nICsgdXJsLnN1YnN0cih1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSB1cmw7XG4gICAgc291cmNlLnR5cGUgPSBtaW1lO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBlcnJvcnMgb3V0LlxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBlcnJvciBldmVudCBmcm9tIHRoZSBlbGVtZW50IHRoYXQgZW1pdHMgaXQuXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX29uRXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBlbGVtZW50IHVzaW5nICcgKyBldmVudC50YXJnZXQubm9kZU5hbWUpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBwcm9ncmVzcyBldmVudCBmaXJlcyBmb3IgeGhyL3hkci5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vblByb2dyZXNzID0gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB0aGlzLCBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYW4gZXJyb3IgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEVycm9yRXZlbnR8RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgcmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgZmFpbGVkLiAnICtcbiAgICAgICAgJ1N0YXR1czogJyArIHRoaXMueGhyLnN0YXR1cyArICcsIHRleHQ6IFwiJyArIHRoaXMueGhyLnN0YXR1c1RleHQgKyAnXCInXG4gICAgKTtcblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGFib3J0IGV2ZW50IGZpcmVzIGZvciB4aHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEFib3J0RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB3YXMgYWJvcnRlZCBieSB0aGUgdXNlci4nKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIHRpbWVvdXQgZXZlbnQgZmlyZXMgZm9yIHhkci5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94ZHJPblRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB0aW1lZCBvdXQuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBkYXRhIHN1Y2Nlc3NmdWxseSBsb2FkcyBmcm9tIGFuIHhoci94ZHIgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0TG9hZEV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHhociA9IHRoaXMueGhyLFxuICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzICE9PSB1bmRlZmluZWQgPyB4aHIuc3RhdHVzIDogMjAwOyAvL1hEUiBoYXMgbm8gYC5zdGF0dXNgLCBhc3N1bWUgMjAwLlxuXG4gICAgLy8gc3RhdHVzIGNhbiBiZSAwIHdoZW4gdXNpbmcgdGhlIGZpbGU6Ly8gcHJvdG9jb2wsIGFsc28gY2hlY2sgaWYgYSByZXNwb25zZSB3YXMgZm91bmRcbiAgICBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDQgfHwgKHN0YXR1cyA9PT0gMCAmJiB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIC8vIGlmIHRleHQsIGp1c3QgcmV0dXJuIGl0XG4gICAgICAgIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYganNvbiwgcGFyc2UgaW50byBqc29uIG9iamVjdFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT04pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSnNvbiA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIGpzb246JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgeG1sLCBwYXJzZSBpbnRvIGFuIHhtbCBkb2N1bWVudCBvciBkaXYgZWxlbWVudFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkaXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNYbWwgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSBsb2FkZWQgeG1sOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyIHR5cGVzIGp1c3QgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdbJyArIHhoci5zdGF0dXMgKyAnXScgKyB4aHIuc3RhdHVzVGV4dCArICc6JyArIHhoci5yZXNwb25zZVVSTCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gcmVxVHlwZSh4aHIpIHtcbiAgICByZXR1cm4geGhyLnRvU3RyaW5nKCkucmVwbGFjZSgnb2JqZWN0ICcsICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGZvciB0aGlzIHJlc291cmNlIGJhc2VkIG9uIGlmIHRoZSB1cmxcbiAqIGZvciB0aGlzIHJlc291cmNlIGlzIGNyb3NzLW9yaWdpbi4gSWYgY3Jvc3NPcmlnaW4gd2FzIG1hbnVhbGx5IHNldCwgdGhpc1xuICogZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgdG8gdGVzdC5cbiAqIEBwYXJhbSBbbG9jYXRpb249d2luZG93LmxvY2F0aW9uXSB7b2JqZWN0fSBUaGUgbG9jYXRpb24gb2JqZWN0IHRvIHRlc3QgYWdhaW5zdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNyb3NzT3JpZ2luIHZhbHVlIHRvIHVzZSAob3IgZW1wdHkgc3RyaW5nIGZvciBub25lKS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVDcm9zc09yaWdpbiA9IGZ1bmN0aW9uICh1cmwsIGxvYykge1xuICAgIC8vIGRhdGE6IGFuZCBqYXZhc2NyaXB0OiB1cmxzIGFyZSBjb25zaWRlcmVkIHNhbWUtb3JpZ2luXG4gICAgaWYgKHVybC5pbmRleE9mKCdkYXRhOicpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGlzIHdpbmRvdy5sb2NhdGlvblxuICAgIGxvYyA9IGxvYyB8fCB3aW5kb3cubG9jYXRpb247XG5cbiAgICBpZiAoIXRlbXBBbmNob3IpIHtcbiAgICAgICAgdGVtcEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG5cbiAgICAvLyBsZXQgdGhlIGJyb3dzZXIgZGV0ZXJtaW5lIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSB1cmwgb2YgdGhpcyByZXNvdXJjZSBhbmQgdGhlblxuICAgIC8vIHBhcnNlIHdpdGggdGhlIG5vZGUgdXJsIGxpYiwgd2UgY2FuJ3QgdXNlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICAgIC8vIGJlY2F1c2UgdGhleSBkb24ndCB3b3JrIGluIElFOSA6KFxuICAgIHRlbXBBbmNob3IuaHJlZiA9IHVybDtcbiAgICB1cmwgPSBfdXJsLnBhcnNlKHRlbXBBbmNob3IuaHJlZik7XG5cbiAgICB2YXIgc2FtZVBvcnQgPSAoIXVybC5wb3J0ICYmIGxvYy5wb3J0ID09PSAnJykgfHwgKHVybC5wb3J0ID09PSBsb2MucG9ydCk7XG5cbiAgICAvLyBpZiBjcm9zcyBvcmlnaW5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9PSBsb2MuaG9zdG5hbWUgfHwgIXNhbWVQb3J0IHx8IHVybC5wcm90b2NvbCAhPT0gbG9jLnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiAnYW5vbnltb3VzJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlc3BvbnNlVHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZVxuICogcmVzb3VyY2UgYmVpbmcgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHJlc3BvbnNlVHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lWGhyVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX3hoclR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZUxvYWRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZXNvdXJjZS5fbG9hZFR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLkxPQURfVFlQRS5YSFI7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2dldEV4dGVuc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcy51cmwsXG4gICAgICAgIGV4dDtcblxuICAgIGlmICh0aGlzLmlzRGF0YVVybCkge1xuICAgICAgICB2YXIgc2xhc2hJbmRleCA9IHVybC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGV4dCA9IHVybC5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEsIHVybC5pbmRleE9mKCc7Jywgc2xhc2hJbmRleCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXJ5U3RhcnQgPSB1cmwuaW5kZXhPZignPycpO1xuICAgICAgICBpZiAocXVlcnlTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dDtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWltZSB0eXBlIG9mIGFuIFhIUiByZXF1ZXN0IGJhc2VkIG9uIHRoZSByZXNwb25zZVR5cGUgb2ZcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIHRvIHVzZS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRNaW1lRnJvbVhoclR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1iaW5hcnknO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vYmxvYic7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veG1sJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT046XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVDpcbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUOlxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcblxuICAgIH1cbn07XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxvYWRpbmcgYSByZXNvdXJjZSBjYW4gdXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IExPQURfVFlQRVxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5YSFIgLSBVc2VzIFhNTEh0dHBSZXF1ZXN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5JTUFHRSAtIFVzZXMgYW4gYEltYWdlYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLkFVRElPIC0gVXNlcyBhbiBgQXVkaW9gIG9iamVjdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuVklERU8gLSBVc2VzIGEgYFZpZGVvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlLkxPQURfVFlQRSA9IHtcbiAgICBYSFI6ICAgIDEsXG4gICAgSU1BR0U6ICAyLFxuICAgIEFVRElPOiAgMyxcbiAgICBWSURFTzogIDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVBRFlfU1RBVEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuVU5TRU5UIC0gb3BlbigpaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLk9QRU5FRCAtIHNlbmQoKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5IRUFERVJTX1JFQ0VJVkVEIC0gc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIGhlYWRlcnMgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5MT0FESU5HIC0gRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLkRPTkUgLSBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5SZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEUgPSB7XG4gICAgVU5TRU5UOiAwLFxuICAgIE9QRU5FRDogMSxcbiAgICBIRUFERVJTX1JFQ0VJVkVEOiAyLFxuICAgIExPQURJTkc6IDMsXG4gICAgRE9ORTogNFxufTtcblxuLyoqXG4gKiBUaGUgWEhSIHJlYWR5IHN0YXRlcywgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IFhIUl9SRVNQT05TRV9UWVBFXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVCAtIGRlZmF1bHRzIHRvIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVIgLSBBcnJheUJ1ZmZlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkJMT0IgLSBCbG9iXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQgLSBEb2N1bWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkpTT04gLSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5URVhUIC0gU3RyaW5nXG4gKi9cblJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFID0ge1xuICAgIERFRkFVTFQ6ICAgICd0ZXh0JyxcbiAgICBCVUZGRVI6ICAgICAnYXJyYXlidWZmZXInLFxuICAgIEJMT0I6ICAgICAgICdibG9iJyxcbiAgICBET0NVTUVOVDogICAnZG9jdW1lbnQnLFxuICAgIEpTT046ICAgICAgICdqc29uJyxcbiAgICBURVhUOiAgICAgICAndGV4dCdcbn07XG5cblJlc291cmNlLl9sb2FkVHlwZU1hcCA9IHtcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3BuZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZWcnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3dlYnAnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRVxufTtcblxuUmVzb3VyY2UuX3hoclR5cGVNYXAgPSB7XG4gICAgLy8geG1sXG4gICAgJ3hodG1sJzogICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bWwnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3htbCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RteCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RzeCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3N2Zyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG5cbiAgICAvLyBpbWFnZXNcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2JtcCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RnYSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcblxuICAgIC8vIGpzb25cbiAgICAnanNvbic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OLFxuXG4gICAgLy8gdGV4dFxuICAgICd0ZXh0JzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQsXG4gICAgJ3R4dCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsb2FkIHR5cGUgdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGV4dG5hbWUge3N0cmluZ30gVGhlIGV4dGVuc2lvbiB0byBzZXQgdGhlIHR5cGUgZm9yLCBlLmcuIFwicG5nXCIgb3IgXCJmbnRcIlxuICogQHBhcmFtIGxvYWRUeXBlIHtSZXNvdXJjZS5MT0FEX1RZUEV9IFRoZSBsb2FkIHR5cGUgdG8gc2V0IGl0IHRvLlxuICovXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25Mb2FkVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCBsb2FkVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5fbG9hZFR5cGVNYXAsIGV4dG5hbWUsIGxvYWRUeXBlKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSB4aHJUeXBlIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHhociB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCB4aHJUeXBlKSB7XG4gICAgc2V0RXh0TWFwKFJlc291cmNlLl94aHJUeXBlTWFwLCBleHRuYW1lLCB4aHJUeXBlKTtcbn07XG5cbmZ1bmN0aW9uIHNldEV4dE1hcChtYXAsIGV4dG5hbWUsIHZhbCkge1xuICAgIGlmIChleHRuYW1lICYmIGV4dG5hbWUuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgIGV4dG5hbWUgPSBleHRuYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dG5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hcFtleHRuYW1lXSA9IHZhbDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICAgIF9rZXlTdHI6IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIixcblxuICAgIGVuY29kZUJpbmFyeTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBcIlwiO1xuICAgICAgICB2YXIgYnl0ZWJ1ZmZlcjtcbiAgICAgICAgdmFyIGVuY29kZWRDaGFySW5kZXhlcyA9IG5ldyBBcnJheSg0KTtcbiAgICAgICAgdmFyIGlueCA9IDA7XG4gICAgICAgIHZhciBqbnggPSAwO1xuICAgICAgICB2YXIgcGFkZGluZ0J5dGVzID0gMDtcblxuICAgICAgICB3aGlsZSAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBGaWxsIGJ5dGUgYnVmZmVyIGFycmF5XG4gICAgICAgICAgICBieXRlYnVmZmVyID0gbmV3IEFycmF5KDMpO1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBieXRlYnVmZmVyLmxlbmd0aDsgam54KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGF3YXkgaGlnaC1vcmRlciBieXRlLCBhcyBkb2N1bWVudGVkIGF0OlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdCNIYW5kbGluZ19iaW5hcnlfZGF0YVxuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSBpbnB1dC5jaGFyQ29kZUF0KGlueCsrKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGVhY2ggZW5jb2RlZCBjaGFyYWN0ZXIsIDYgYml0cyBhdCBhIHRpbWVcbiAgICAgICAgICAgIC8vIGluZGV4IDE6IGZpcnN0IDYgYml0c1xuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzBdID0gYnl0ZWJ1ZmZlclswXSA+PiAyO1xuICAgICAgICAgICAgLy8gaW5kZXggMjogc2Vjb25kIDYgYml0cyAoMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAxICsgNCBtb3N0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBieXRlIDIpXG4gICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMV0gPSAoKGJ5dGVidWZmZXJbMF0gJiAweDMpIDw8IDQpIHwgKGJ5dGVidWZmZXJbMV0gPj4gNCk7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiB0aGlyZCA2IGJpdHMgKDQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMiArIDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gKChieXRlYnVmZmVyWzFdICYgMHgwZikgPDwgMikgfCAoYnl0ZWJ1ZmZlclsyXSA+PiA2KTtcbiAgICAgICAgICAgIC8vIGluZGV4IDM6IGZvcnRoIDYgYml0cyAoNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gYnl0ZWJ1ZmZlclsyXSAmIDB4M2Y7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHBhZGRpbmcgaGFwcGVuZWQsIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgIHBhZGRpbmdCeXRlcyA9IGlueCAtIChpbnB1dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFkZGluZ0J5dGVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCAyIGNoYXJhY3RlcnMgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMl0gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBsYXN0IGNoYXJhY3RlciB0byBwYWRkaW5nIGNoYXJcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vIHBhZGRpbmcgLSBwcm9jZWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vdyB3ZSB3aWxsIGdyYWIgZWFjaCBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgb3V0IG9mIG91ciBrZXlzdHJpbmdcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIG91ciBpbmRleCBhcnJheSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQgc3RyaW5nXG4gICAgICAgICAgICBmb3IgKGpueCA9IDA7IGpueCA8IGVuY29kZWRDaGFySW5kZXhlcy5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHRoaXMuX2tleVN0ci5jaGFyQXQoZW5jb2RlZENoYXJJbmRleGVzW2pueF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9Mb2FkZXInKTtcblxubW9kdWxlLmV4cG9ydHMuUmVzb3VyY2UgPSByZXF1aXJlKCcuL1Jlc291cmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzLm1pZGRsZXdhcmUgPSB7XG4gICAgY2FjaGluZzoge1xuICAgICAgICBtZW1vcnk6IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnknKVxuICAgIH0sXG4gICAgcGFyc2luZzoge1xuICAgICAgICBibG9iOiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL3BhcnNpbmcvYmxvYicpXG4gICAgfVxufTtcbiIsIi8vIGEgc2ltcGxlIGluLW1lbW9yeSBjYWNoZSBmb3IgcmVzb3VyY2VzXG52YXIgY2FjaGUgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICAvLyBpZiBjYWNoZWQsIHRoZW4gc2V0IGRhdGEgYW5kIGNvbXBsZXRlIHRoZSByZXNvdXJjZVxuICAgICAgICBpZiAoY2FjaGVbcmVzb3VyY2UudXJsXSkge1xuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IGNhY2hlW3Jlc291cmNlLnVybF07XG4gICAgICAgICAgICByZXNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIG5vdCBjYWNoZWQsIHdhaXQgZm9yIGNvbXBsZXRlIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb3VyY2Uub25jZSgnY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICBjYWNoZVt0aGlzLnVybF0gPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgnLi4vLi4vUmVzb3VyY2UnKSxcbiAgICBiNjQgPSByZXF1aXJlKCcuLi8uLi9iNjQnKTtcblxud2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblxuLy8gYSBtaWRkbGV3YXJlIGZvciB0cmFuc2Zvcm1pbmcgWEhSIGxvYWRlZCBCbG9icyBpbnRvIG1vcmUgdXNlZnVsIG9iamVjdHNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIHdhcyBhbiBYSFIgbG9hZCBvZiBhIGJsb2JcbiAgICAgICAgaWYgKHJlc291cmNlLnhociAmJiByZXNvdXJjZS54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBibG9iIHN1cHBvcnQgd2UgcHJvYmFibHkgZ290IGEgYmluYXJ5IHN0cmluZyBiYWNrXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5CbG9iIHx8IHR5cGVvZiByZXNvdXJjZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVzb3VyY2UueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaW1hZ2UsIGNvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgaW50byBhIGRhdGEgdXJsXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgdHlwZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5zcmMgPSAnZGF0YTonICsgdHlwZSArICc7YmFzZTY0LCcgKyBiNjQuZW5jb2RlQmluYXJ5KHJlc291cmNlLnhoci5yZXNwb25zZVRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGltYWdlIGxvYWRzIGFuZCB0aGVuIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5vbmxvYWQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY29udGVudCB0eXBlIHNheXMgdGhpcyBpcyBhbiBpbWFnZSwgdGhlbiB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBibG9iIGludG8gYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvdXJjZS5kYXRhLnR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlc291cmNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuYmxvYiA9IHJlc291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gc3JjO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuaXNJbWFnZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBubyBsb25nZXIgdXNlZCBibG9iIGFmdGVyIHRoZSBpbWFnZSBsb2Fkc1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJwaXhpLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMC4xMC1kZXZcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlBpeGkuanMgaXMgYSBmYXN0IGxpZ2h0d2VpZ2h0IDJEIGxpYnJhcnkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGRldmljZXMuXCIsXG4gIFwiYXV0aG9yXCI6IFwiTWF0IEdyb3Zlc1wiLFxuICBcImNvbnRyaWJ1dG9yc1wiOiBbXG4gICAgXCJDaGFkIEVuZ2xlciA8Y2hhZEBwYW50aGVyZGV2LmNvbT5cIixcbiAgICBcIlJpY2hhcmQgRGF2ZXkgPHJkYXZleUBnbWFpbC5jb20+XCJcbiAgXSxcbiAgXCJtYWluXCI6IFwiLi9zcmMvaW5kZXguanNcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHA6Ly9nb29kYm95ZGlnaXRhbC5jb20vXCIsXG4gIFwiYnVnc1wiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXNcIixcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiZ3VscCAmJiBndWxwIHdhdGNoXCIsXG4gICAgXCJ0ZXN0XCI6IFwiZ3VscCAmJiB0ZXN0ZW0gY2lcIixcbiAgICBcImJ1aWxkXCI6IFwiZ3VscFwiLFxuICAgIFwiZG9jc1wiOiBcImpzZG9jIC1jIC4vZ3VscC91dGlsL2pzZG9jLmNvbmYuanNvbiAtUiBSRUFETUUubWRcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpbi9cIixcbiAgICBcInNyYy9cIixcbiAgICBcIkNPTlRSSUJVVElORy5tZFwiLFxuICAgIFwiTElDRU5TRVwiLFxuICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgXCJSRUFETUUubWRcIlxuICBdLFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhc3luY1wiOiBcIl4xLjUuMFwiLFxuICAgIFwiYnJmc1wiOiBcIl4xLjQuMVwiLFxuICAgIFwiZWFyY3V0XCI6IFwiXjIuMC43XCIsXG4gICAgXCJldmVudGVtaXR0ZXIzXCI6IFwiXjEuMS4xXCIsXG4gICAgXCJnbC1tYXRyaXhcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL3RvamkvZ2wtbWF0cml4LmdpdFwiLFxuICAgIFwib2JqZWN0LWFzc2lnblwiOiBcIl40LjAuMVwiLFxuICAgIFwicGl4aS1nbC1jb3JlXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9Hb29kQm95RGlnaXRhbC9waXhpLWdsLWNvcmUuZ2l0XCIsXG4gICAgXCJyZXNvdXJjZS1sb2FkZXJcIjogXCJeMS42LjRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjExLjEuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4zLjIuMFwiLFxuICAgIFwiZGVsXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOS4wXCIsXG4gICAgXCJndWxwLWNhY2hlZFwiOiBcIl4xLjEuMFwiLFxuICAgIFwiZ3VscC1jb25jYXRcIjogXCJeMi42LjBcIixcbiAgICBcImd1bHAtZGVidWdcIjogXCJeMi4xLjBcIixcbiAgICBcImd1bHAtaGVhZGVyXCI6IFwiXjEuNy4xXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjExLjJcIixcbiAgICBcImd1bHAtbWlycm9yXCI6IFwiXjAuNC4wXCIsXG4gICAgXCJndWxwLXBsdW1iZXJcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtcmVuYW1lXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJndWxwLXNvdXJjZW1hcHNcIjogXCJeMS41LjJcIixcbiAgICBcImd1bHAtdWdsaWZ5XCI6IFwiXjEuNC4xXCIsXG4gICAgXCJndWxwLXV0aWxcIjogXCJeMy4wLjZcIixcbiAgICBcImphZ3VhcmpzLWpzZG9jXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZHNoaW1qcy9qYWd1YXJqcy1qc2RvYy5naXRcIixcbiAgICBcImpzZG9jXCI6IFwiXjMuMy4yXCIsXG4gICAgXCJqc2hpbnQtc3VtbWFyeVwiOiBcIl4wLjQuMFwiLFxuICAgIFwibWluaW1pc3RcIjogXCJeMS4yLjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMy4yXCIsXG4gICAgXCJyZXF1aXJlLWRpclwiOiBcIl4wLjMuMFwiLFxuICAgIFwicnVuLXNlcXVlbmNlXCI6IFwiXjEuMS4yXCIsXG4gICAgXCJ0ZXN0ZW1cIjogXCJeMC45LjRcIixcbiAgICBcInZpbnlsLWJ1ZmZlclwiOiBcIl4xLjAuMFwiLFxuICAgIFwidmlueWwtc291cmNlLXN0cmVhbVwiOiBcIl4xLjEuMFwiLFxuICAgIFwid2F0Y2hpZnlcIjogXCJeMy40LjBcIlxuICB9LFxuICBcImJyb3dzZXJpZnlcIjoge1xuICAgIFwidHJhbnNmb3JtXCI6IFtcbiAgICAgIFwiYnJmc1wiXG4gICAgXVxuICB9XG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLy8gYWRkIHNvbWUgZXh0cmEgdmFyaWFibGVzIHRvIHRoZSBjb250YWluZXIuLlxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpXG4pO1xuXG5cbi8qKlxuICogVGhlIEFjY2Vzc2liaWxpdHkgbWFuYWdlciByZWFjcmVhdGVzIHRoZSBhYmlsaXR5IHRvIHRhYiBhbmQgYW5kIGhhdmUgY29udGVudCByZWFkIGJ5IHNjcmVlbiByZWFkZXJzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGFzIGl0IGNhbiBwb3NzaWJseSBoZWxwIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyBhY2Nlc3MgcGl4aSBjb250ZW50LlxuICogTXVjaCBsaWtlIGludGVyYWN0aW9uIGFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBtYWRlIGFjY2Vzc2libGUuIFRoaXMgbWFuYWdlciB3aWxsIG1hcCB0aGUgZXZlbnRzIGFzIGlmIHRoZSBtb3VzZSB3YXMgYmVpbmcgdXNlZCwgbWluaW1pemluZyB0aGUgZWZmZXJvdCByZXF1aXJlZCB0byBpbXBsZW1lbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqL1xuZnVuY3Rpb24gQWNjZXNzaWJpbGl0eU1hbmFnZXIocmVuZGVyZXIpXG57XG5cdC8vIGZpcnN0IHdlIGNyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFxuICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUubGVmdCA9IDA7XG4gICAvL1xuICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuICAgXHRcbiAgIFx0LyoqXG4gICBcdCAqIFRoaXMgaXMgdGhlIGRvbSBlbGVtZW50IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gICBcdHRoaXMuZGl2ID0gZGl2O1xuXG4gICBcdC8qKlxuICAgXHQgKiBBIHNpbXBsZSBwb29sIGZvciBzdG9yaW5nIGRpdnMuXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7QXJyYXl9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuIFx0dGhpcy5wb29sID0gW107XG5cbiBcdC8qKlxuIFx0ICogVGhpcyBpcyBhIHRpY2sgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHJlbmRlcmVkLlxuIFx0ICogXG4gXHQgKiBAdHlwZSB7TnVtYmVyfVxuIFx0ICogQHByaXZhdGVcbiBcdCAqL1xuICAgXHR0aGlzLnJlbmRlcklkID0gMDtcblxuICAgXHQvKipcbiAgIFx0ICogU2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB2aXN1YWxseSBzaG93IHRoZSBkaXZzXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgIFx0ICovXG4gICBcdHRoaXMuZGVidWcgPSBmYWxzZTtcblxuICBcdC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGFjY2Vzc2liaWxpdHkgbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgIFx0LyoqXG4gICAgICogVGhlIGFycmF5IG9mIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzaWJsZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHByZSBiaW5kIHRoZSBmdW5jdGlvbnMuLlxuICAgICAqL1xuICAgXHR0aGlzLl9vbktleURvd24gPSB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKTtcbiAgIFx0dGhpcy5fb25Nb3VzZU1vdmUgPSB0aGlzLl9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogc3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFuYWdlci4gSWYgdGhlcmUgYXJlIG5vIGFjY2Vzc2libGUgb2JqZWN0cyBvciB0aGUgbW91c2UgaXMgbW92aW5nIHRoZSB3aWxsIGJlIGZhbHNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cbiAgIFx0Ly8gbGV0IGxpc3RlbiBmb3IgdGFiLi4gb25jZSBwcmVzc2VkIHdlIGNhbiBmaXJlIHVwIGFuZCBzaG93IHRoZSBhY2Nlc3NpYmlsaXR5IGxheWVyXG4gICBcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG59XG5cblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xuXG4vKipcbiAqIEFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBzaG93bi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgcHJlc2VzIHRoZSB0YWIga2V5XG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHRydWUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub24oJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cblx0dGhpcy5yZW5kZXJlci52aWV3LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5kaXYpO1x0XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIGhpZGRlbi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgbW92ZXMgdGhlIG1vdXNlXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYoIXRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9mZigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlKTtcblxuXHR0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcblxufTtcblxuLyoqXG4gKiBUaGlzIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aWxsIHJ1biB0aHJvdWdodCBoZSBzY2VuZSBncmFwaCBhbmQgYWRkIGFueSBuZXcgYWNjZXNzaWJsZSBvYmplY3RzIHRvIHRoZSBET00gbGF5ZXIuXG4gKiBAcGFyYW0gZWxlbWVudCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgRGlzcGxheU9iamVjdCB0byBjaGVjay5cbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG5cdGlmKCFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZihkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGUgJiYgZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcblx0e1xuXHRcdGlmKCFkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlKVxuXHRcdHtcblx0XHRcdHRoaXMuYWRkQ2hpbGQoZGlzcGxheU9iamVjdCk7XG5cdFx0fVxuXHQgICBcdFxuXHQgICBcdGRpc3BsYXlPYmplY3QucmVuZGVySWQgPSB0aGlzLnJlbmRlcklkO1xuXHR9XG5cblx0dmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcblxuXHRmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcblx0XHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKGNoaWxkcmVuW2ldKTtcblx0fVxufTtcblxuXG4vKipcbiAqIEJlZm9yZSBlYWNoIHJlbmRlciB0aGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGRpdnMgYXJlIG1hcHBlZCBjb3JyZWN0bHkgdG8gdGhlaXIgRGlzcGxheU9iamVjdHNcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpXG57XG5cblx0Ly8gdXBkYXRlIGNoaWxkcmVuLi4uXG5cdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHModGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkKTtcblxuXHR2YXIgcmVjdCA9IHRoaXMucmVuZGVyZXIudmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0dmFyIHN4ID0gcmVjdC53aWR0aCAgLyB0aGlzLnJlbmRlcmVyLndpZHRoO1xuXHR2YXIgc3kgPSByZWN0LmhlaWdodCAvIHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuXG5cdHZhciBkaXYgPSB0aGlzLmRpdjtcblxuXHRkaXYuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICdweCc7XG5cdGRpdi5zdHlsZS50b3AgPSByZWN0LnRvcCArICdweCc7XG5cdGRpdi5zdHlsZS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggKyAncHgnO1xuXHRkaXYuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgKyAncHgnO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuXHRcdGlmKGNoaWxkLnJlbmRlcklkICE9PSB0aGlzLnJlbmRlcklkKVxuXHRcdHtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaSwgMSk7XG5cdFx0XHR0aGlzLmRpdi5yZW1vdmVDaGlsZCggY2hpbGQuX2FjY2Vzc2libGVEaXYgKTtcblx0XHRcdHRoaXMucG9vbC5wdXNoKGNoaWxkLl9hY2Nlc3NpYmxlRGl2KTtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlRGl2ID0gbnVsbDtcblxuXHRcdFx0aS0tO1xuXG5cdFx0XHRpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBtYXAgZGl2IHRvIGRpc3BsYXkuLlxuXHRcdFx0ZGl2ID0gY2hpbGQuX2FjY2Vzc2libGVEaXY7XG5cdFx0XHR2YXIgaGl0QXJlYSA9IGNoaWxkLmhpdEFyZWE7XG5cdFx0XHR2YXIgd3QgPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuXHRcdFx0aWYoY2hpbGQuaGl0QXJlYSlcblx0XHRcdHtcblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoKHd0LnR4ICsgKGhpdEFyZWEueCAqIHd0LmEpKSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKCh3dC50eSArIChoaXRBcmVhLnkgKiB3dC5kKSkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHd0LmEgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogd3QuZCAqIHN5KSArICdweCc7XG5cdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0aGl0QXJlYSA9IGNoaWxkLmdldEJvdW5kcygpO1xuXG5cdFx0XHRcdHRoaXMuY2FwSGl0QXJlYShoaXRBcmVhKTtcblxuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9IChoaXRBcmVhLnggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gIChoaXRBcmVhLnkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiBzeSkgKyAncHgnO1xuXHRcdFx0fVx0XHRcblx0XHR9XG5cdH1cblxuXHQvLyBpbmNyZW1lbnQgdGhlIHJlbmRlciBpZC4uXG5cdHRoaXMucmVuZGVySWQrKztcbn07XG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYXBIaXRBcmVhID0gZnVuY3Rpb24gKGhpdEFyZWEpXG57XG4gICAgaWYgKGhpdEFyZWEueCA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoICs9IGhpdEFyZWEueDtcbiAgICAgICAgaGl0QXJlYS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaGl0QXJlYS55IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ICs9IGhpdEFyZWEueTtcbiAgICAgICAgaGl0QXJlYS55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueCArIGhpdEFyZWEud2lkdGggPiB0aGlzLnJlbmRlcmVyLndpZHRoIClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoIC0gaGl0QXJlYS54O1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS55ICsgaGl0QXJlYS5oZWlnaHQgPiB0aGlzLnJlbmRlcmVyLmhlaWdodCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0IC0gaGl0QXJlYS55O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBBZGRzIGEgRGlzcGxheU9iamVjdCB0byB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuLy9cdHRoaXMuYWN0aXZhdGUoKTtcblx0XG5cdHZhciBkaXYgPSB0aGlzLnBvb2wucG9wKCk7XG5cblx0aWYoIWRpdilcblx0e1xuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBcblxuXHQgICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGVidWcgPyAncmdiYSgyNTUsMCwwLDAuNSknIDogJ3RyYW5zcGFyZW50Jztcblx0ICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdCAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcblx0ICAgIGRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdub25lJztcblxuXHQgICAgXG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX29uRm9jdXNPdXQuYmluZCh0aGlzKSk7XG5cdH1cblx0ICAgXHRcblxuXG5cblx0ZGl2LnRpdGxlID0gZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlVGl0bGUgfHwgJ2Rpc3BsYXlPYmplY3QgJyArIHRoaXMudGFiSW5kZXg7XG5cblx0Ly9cblx0XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUgPSB0cnVlO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ID0gZGl2O1xuXHRkaXYuZGlzcGxheU9iamVjdCA9IGRpc3BsYXlPYmplY3Q7XG5cblxuXHR0aGlzLmNoaWxkcmVuLnB1c2goZGlzcGxheU9iamVjdCk7XG5cdHRoaXMuZGl2LmFwcGVuZENoaWxkKCBkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ICk7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYudGFiSW5kZXggPSBkaXNwbGF5T2JqZWN0LnRhYkluZGV4O1xufTtcblxuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBidXR0b24gcHJlc3MgdG8gcGl4aSdzIEludGVyYWN0aW9uTWFuYWdlciAoY2xpY2spXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnY2xpY2snLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3ZlcilcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1cyA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3V0KVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzT3V0ID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uS2V5RG93biA9IGZ1bmN0aW9uKGUpXG57XG5cdGlmKGUua2V5Q29kZSAhPT0gOSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuYWN0aXZhdGUoKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmUgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZGVhY3RpdmF0ZSgpO1xufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgXG57XG5cdHRoaXMuZGl2ID0gbnVsbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblx0XHR0aGlzLmNoaWxkcmVuW2ldLmRpdiA9IG51bGw7XG5cdH1cblxuXHRcblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuXHRcdFxuXHR0aGlzLnBvb2wgPSBudWxsO1xuXHR0aGlzLmNoaWxkcmVuID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5cbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYWNjZXNzaWJsZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmFjY2Vzc2liaWxpdHkuYWNjZXNzaWJsZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgYWNjZXNzaWJsZVRhcmdldCA9IHtcbiAgICBcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGVUaXRsZTpudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICB0YWJJbmRleDowLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZUFjdGl2ZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVEaXY6ZmFsc2VcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBhY2Nlc3NpYmxlVGFyZ2V0O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgYWNjZXNzaWJpbGl0eSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYWNjZXNzaWJsZVRhcmdldDogICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpLFxuICAgIEFjY2Vzc2liaWxpdHlNYW5hZ2VyOiByZXF1aXJlKCcuL0FjY2Vzc2liaWxpdHlNYW5hZ2VyJylcbn07XG4iLCIvKipcbiAqIENvbnN0YW50IHZhbHVlcyB1c2VkIGluIHBpeGlcbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG52YXIgQ09OU1QgPSB7XG4gICAgLyoqXG4gICAgICogU3RyaW5nIG9mIHRoZSBjdXJyZW50IFBJWEkgdmVyc2lvblxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBWRVJTSU9OXG4gICAgICovXG4gICAgVkVSU0lPTjogcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQSV8yIC0gVHdvIFBpXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFBJXzI6IE1hdGguUEkgKiAyLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJBRF9UT19ERUcgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyByYWRpYW5zIHRvIGRlZ3JlZXNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUkFEX1RPX0RFRzogMTgwIC8gTWF0aC5QSSxcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBERUdfVE9fUkFEIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgZGVncmVlcyB0byByYWRpYW5zXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIERFR19UT19SQUQ6IE1hdGguUEkgLyAxODAsXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgZnJhbWVzIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gVEFSR0VUX0ZQTVM9MC4wNlxuICAgICAqL1xuICAgIFRBUkdFVF9GUE1TOiAwLjA2LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgdG8gaWRlbnRpZnkgdGhlIFJlbmRlcmVyIFR5cGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFJFTkRFUkVSX1RZUEVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuV0VCR0xcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5DQU5WQVNcbiAgICAgKi9cbiAgICBSRU5ERVJFUl9UWVBFOiB7XG4gICAgICAgIFVOS05PV046ICAgIDAsXG4gICAgICAgIFdFQkdMOiAgICAgIDEsXG4gICAgICAgIENBTlZBUzogICAgIDJcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyBibGVuZCBtb2RlcyBzdXBwb3J0ZWQgYnkgUElYSS4gSU1QT1JUQU5UIC0gVGhlIFdlYkdMIHJlbmRlcmVyIG9ubHkgc3VwcG9ydHNcbiAgICAgKiB0aGUgTk9STUFMLCBBREQsIE1VTFRJUExZIGFuZCBTQ1JFRU4gYmxlbmQgbW9kZXMuIEFueXRoaW5nIGVsc2Ugd2lsbCBzaWxlbnRseSBhY3QgbGlrZVxuICAgICAqIE5PUk1BTC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gQkxFTkRfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkFERFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5NVUxUSVBMWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQ1JFRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuT1ZFUkxBWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5EQVJLRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTElHSFRFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9ET0RHRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9CVVJOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhBUkRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU09GVF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5ESUZGRVJFTkNFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkVYQ0xVU0lPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IVUVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0FUVVJBVElPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MVU1JTk9TSVRZXG4gICAgICovXG4gICAgQkxFTkRfTU9ERVM6IHtcbiAgICAgICAgTk9STUFMOiAgICAgICAgIDAsXG4gICAgICAgIEFERDogICAgICAgICAgICAxLFxuICAgICAgICBNVUxUSVBMWTogICAgICAgMixcbiAgICAgICAgU0NSRUVOOiAgICAgICAgIDMsXG4gICAgICAgIE9WRVJMQVk6ICAgICAgICA0LFxuICAgICAgICBEQVJLRU46ICAgICAgICAgNSxcbiAgICAgICAgTElHSFRFTjogICAgICAgIDYsXG4gICAgICAgIENPTE9SX0RPREdFOiAgICA3LFxuICAgICAgICBDT0xPUl9CVVJOOiAgICAgOCxcbiAgICAgICAgSEFSRF9MSUdIVDogICAgIDksXG4gICAgICAgIFNPRlRfTElHSFQ6ICAgICAxMCxcbiAgICAgICAgRElGRkVSRU5DRTogICAgIDExLFxuICAgICAgICBFWENMVVNJT046ICAgICAgMTIsXG4gICAgICAgIEhVRTogICAgICAgICAgICAxMyxcbiAgICAgICAgU0FUVVJBVElPTjogICAgIDE0LFxuICAgICAgICBDT0xPUjogICAgICAgICAgMTUsXG4gICAgICAgIExVTUlOT1NJVFk6ICAgICAxNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIHdlYmdsIGRyYXcgbW9kZXMuIFRoZXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggR0wgZHJhd01vZGUgdG8gdXNlXG4gICAgICogdW5kZXIgY2VydGFpbiBzaXR1YXRpb25zIGFuZCByZW5kZXJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5QT0lOVFNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfTE9PUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX0ZBTlxuICAgICAqL1xuICAgIERSQVdfTU9ERVM6IHtcbiAgICAgICAgUE9JTlRTOiAgICAgICAgIDAsXG4gICAgICAgIExJTkVTOiAgICAgICAgICAxLFxuICAgICAgICBMSU5FX0xPT1A6ICAgICAgMixcbiAgICAgICAgTElORV9TVFJJUDogICAgIDMsXG4gICAgICAgIFRSSUFOR0xFUzogICAgICA0LFxuICAgICAgICBUUklBTkdMRV9TVFJJUDogNSxcbiAgICAgICAgVFJJQU5HTEVfRkFOOiAgIDZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBwaXhpLlxuICAgICAqXG4gICAgICogVGhlIERFRkFVTFQgc2NhbGUgbW9kZSBhZmZlY3RzIHRoZSBkZWZhdWx0IHNjYWxpbmcgbW9kZSBvZiBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAgKiBJdCBjYW4gYmUgcmUtYXNzaWduZWQgdG8gZWl0aGVyIExJTkVBUiBvciBORUFSRVNULCBkZXBlbmRpbmcgdXBvbiBzdWl0YWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0NBTEVfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuREVGQVVMVD1MSU5FQVJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTElORUFSIFNtb290aCBzY2FsaW5nXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLk5FQVJFU1QgUGl4ZWxhdGluZyBzY2FsaW5nXG4gICAgICovXG4gICAgU0NBTEVfTU9ERVM6IHtcbiAgICAgICAgREVGQVVMVDogICAgMCxcbiAgICAgICAgTElORUFSOiAgICAgMCxcbiAgICAgICAgTkVBUkVTVDogICAgMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZml4IHRoYXQgZGVub3RlcyBhIFVSTCBpcyBmb3IgYSByZXRpbmEgYXNzZXRcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gUkVUSU5BX1BSRUZJWFxuICAgICAqL1xuICAgIC8vZXhhbXBsZTogJ0AyeCcsXG4gICAgUkVUSU5BX1BSRUZJWDogL0AoLispeC8sXG5cbiAgICBSRVNPTFVUSU9OOjEsXG5cbiAgICBGSUxURVJfUkVTT0xVVElPTjoxLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgcmVuZGVyIG9wdGlvbnMgaWYgbm9uZSBhcmUgc3VwcGxpZWQgdG8ge0BsaW5rIFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKiBvciB7QGxpbmsgUElYSS5DYW52YXNSZW5kZXJlcn0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERFRkFVTFRfUkVOREVSX09QVElPTlNcbiAgICAgKiBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnZpZXc9bnVsbFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy50cmFuc3BhcmVudD1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hbnRpYWxpYXM9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuZm9yY2VGWEFBPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnJlc29sdXRpb249MVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmF1dG9SZXNpemU9ZmFsc2VcbiAgICAgKi9cbiAgICBERUZBVUxUX1JFTkRFUl9PUFRJT05TOiB7XG4gICAgICAgIHZpZXc6IG51bGwsXG4gICAgICAgIHJlc29sdXRpb246IDEsXG4gICAgICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgICAgIGZvcmNlRlhBQTogZmFsc2UsXG4gICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgIGNsZWFyQmVmb3JlUmVuZGVyOiB0cnVlLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgICAgICByb3VuZFBpeGVsczogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnRzIHRoYXQgaWRlbnRpZnkgc2hhcGVzLCBtYWlubHkgdG8gcHJldmVudCBgaW5zdGFuY2VvZmAgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFU1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUE9MWT0wXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SRUNUPTFcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkNJUkM9MlxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuRUxJUD0zXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SUkVDPTRcbiAgICAgKi9cbiAgICBTSEFQRVM6IHtcbiAgICAgICAgUE9MWTogMCxcbiAgICAgICAgUkVDVDogMSxcbiAgICAgICAgQ0lSQzogMixcbiAgICAgICAgRUxJUDogMyxcbiAgICAgICAgUlJFQzogNFxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBtYXliZSBjaGFuZ2UgdG8gU1BSSVRFLkJBVENIX1NJWkU6IDIwMDBcbiAgICAvLyBUT0RPOiBtYXliZSBhZGQgUEFSVElDTEUuQkFUQ0hfU0laRTogMTUwMDBcbiAgICBTUFJJVEVfQkFUQ0hfU0laRTogMjAwMCAvL25pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSBhbmQgZGVza3RvcCBtYWNoaW5lc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDT05TVDtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gcmVxdWlyZSgnLi9EaXNwbGF5T2JqZWN0JyksXG4gICAgUmVuZGVyVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgQ29udGFpbmVyIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0cy5cbiAqIEl0IGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBkaXNwbGF5IG9iamVjdHMgdGhhdCBhY3QgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIG9iamVjdHMuXG4gKlxuICpgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiBgYGBcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5EaXNwbGF5T2JqZWN0XG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDb250YWluZXIoKVxue1xuICAgIERpc3BsYXlPYmplY3QuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdFtdfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERpc3BsYXlPYmplY3QucHJvdG90eXBlKTtcbkNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5lcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udGFpbmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gMTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIGhlaWdodCA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBPdmVycmlkYWJsZSBtZXRob2QgdGhhdCBjYW4gYmUgdXNlZCBieSBDb250YWluZXIgc3ViY2xhc3NlcyB3aGVuZXZlciB0aGUgY2hpbGRyZW4gYXJyYXkgaXMgbW9kaWZpZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7fTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lci5cbiAqIFxuICogWW91IGNhbiBhbHNvIGFkZCBtdWx0cGxlIGl0ZW1zIGxpa2Ugc286IG15Q29udGFpbmVyLmFkZENoaWxkKHRoaW5rT25lLCB0aGluZ1R3bywgdGhpbmdUaHJlZSlcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBhZGQgdG8gdGhlIGNvbnRhaW5lclxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57IFxuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaGFzIGEgcGFyZW50IHRoZW4gbGV0cyByZW1vdmUgaXQgYXMgUGl4aSBvYmplY3RzIGNhbiBvbmx5IGV4aXN0IGluIG9uZSBwbGFjZVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UodGhpcy5jaGlsZHJlbi5sZW5ndGgtMSk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lciBhdCBhIHNwZWNpZmllZCBpbmRleC4gSWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd25cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRvIGFkZFxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBwbGFjZSB0aGUgY2hpbGQgaW5cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkQXQgPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hpbGQgKyAnYWRkQ2hpbGRBdDogVGhlIGluZGV4ICcrIGluZGV4ICsnIHN1cHBsaWVkIGlzIG91dCBvZiBib3VuZHMgJyArIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiAyIERpc3BsYXkgT2JqZWN0cyB3aXRoaW4gdGhpcyBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKiBAcGFyYW0gY2hpbGQyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc3dhcENoaWxkcmVuID0gZnVuY3Rpb24gKGNoaWxkLCBjaGlsZDIpXG57XG4gICAgaWYgKGNoaWxkID09PSBjaGlsZDIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluZGV4MSA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG4gICAgdmFyIGluZGV4MiA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZDIpO1xuXG4gICAgaWYgKGluZGV4MSA8IDAgfHwgaW5kZXgyIDwgMClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3dhcENoaWxkcmVuOiBCb3RoIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0cyBtdXN0IGJlIGNoaWxkcmVuIG9mIHRoZSBjYWxsZXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDFdID0gY2hpbGQyO1xuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgyXSA9IGNoaWxkO1xuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleDEgPCBpbmRleDIgPyBpbmRleDEgOiBpbmRleDIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBwb3NpdGlvbiBvZiBhIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgdG8gaWRlbnRpZnlcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdCB0byBpZGVudGlmeVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiBhbiBleGlzdGluZyBjaGlsZCBpbiB0aGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIGZvciB3aGljaCB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGluZGV4IG51bWJlclxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSByZXN1bHRpbmcgaW5kZXggbnVtYmVyIGZvciB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuXG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgY3VycmVudEluZGV4LCAxKTsgLy8gcmVtb3ZlIGZyb20gb2xkIHBvc2l0aW9uXG4gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsgLy9hZGQgYXQgbmV3IHBvc2l0aW9uXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBhdFxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgYXQgdGhlIGdpdmVuIGluZGV4LCBpZiBhbnkuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDaGlsZEF0OiBTdXBwbGllZCBpbmRleCAnICsgaW5kZXggKyAnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjaGlsZCBsaXN0LCBvciB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baW5kZXhdO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW1vdmVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIHNwZWNpZmllZCBpbmRleCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgZnJvbVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIHZhciBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRBdChpbmRleCk7XG5cbiAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIGNvbnRhaW5lciB0aGF0IGFyZSB3aXRoaW4gdGhlIGJlZ2luIGFuZCBlbmQgaW5kZXhlcy5cbiAqXG4gKiBAcGFyYW0gYmVnaW5JbmRleCB7bnVtYmVyfSBUaGUgYmVnaW5uaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gKiBAcGFyYW0gZW5kSW5kZXgge251bWJlcn0gVGhlIGVuZGluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzaXplIG9mIHRoZSBjb250YWluZXIuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbiAoYmVnaW5JbmRleCwgZW5kSW5kZXgpXG57XG4gICAgdmFyIGJlZ2luID0gYmVnaW5JbmRleCB8fCAwO1xuICAgIHZhciBlbmQgPSB0eXBlb2YgZW5kSW5kZXggPT09ICdudW1iZXInID8gZW5kSW5kZXggOiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgcmFuZ2UgPSBlbmQgLSBiZWdpbjtcbiAgICB2YXIgcmVtb3ZlZCwgaTtcblxuICAgIGlmIChyYW5nZSA+IDAgJiYgcmFuZ2UgPD0gZW5kKVxuICAgIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGJlZ2luLCByYW5nZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0ucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShiZWdpbkluZGV4KTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZ2UgPT09IDAgJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyZW1vdmVDaGlsZHJlbjogbnVtZXJpYyB2YWx1ZXMgYXJlIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UuJyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIgZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSBmYWxzZTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkNvbnRhaW5lci5wcm90b3R5cGUuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtID0gQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIHRoZSBib3VuZHMgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCB0aGlzIHJlbmRlciBzZXNzaW9uIHNvIHJldHVybiB3aGF0IHdlIGhhdmVcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgY2hpbGRCb3VuZHM7XG4gICAgICAgIHZhciBjaGlsZE1heFg7XG4gICAgICAgIHZhciBjaGlsZE1heFk7XG5cbiAgICAgICAgdmFyIGNoaWxkVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgY2hpbGRCb3VuZHMgPSB0aGlzLmNoaWxkcmVuW2ldLmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBtaW5YID0gbWluWCA8IGNoaWxkQm91bmRzLnggPyBtaW5YIDogY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIG1pblkgPSBtaW5ZIDwgY2hpbGRCb3VuZHMueSA/IG1pblkgOiBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBjaGlsZE1heFggPSBjaGlsZEJvdW5kcy53aWR0aCArIGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICBjaGlsZE1heFkgPSBjaGlsZEJvdW5kcy5oZWlnaHQgKyBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBtYXhYID0gbWF4WCA+IGNoaWxkTWF4WCA/IG1heFggOiBjaGlsZE1heFg7XG4gICAgICAgICAgICBtYXhZID0gbWF4WSA+IGNoaWxkTWF4WSA/IG1heFkgOiBjaGlsZE1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkVmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJHZXRCb3VuZHMgPSBDb250YWluZXIucHJvdG90eXBlLmdldEJvdW5kcztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5vbi1nbG9iYWwgbG9jYWwgYm91bmRzIG9mIHRoZSBDb250YWluZXIgYXMgYSByZWN0YW5nbGUuXG4gKiBUaGUgY2FsY3VsYXRpb24gdGFrZXMgYWxsIHZpc2libGUgY2hpbGRyZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4Q2FjaGUgPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdGguTWF0cml4LklERU5USVRZO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdHJpeENhY2hlO1xuXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMoIG1hdGguTWF0cml4LklERU5USVRZICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICBcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpLCBqO1xuXG4gICAgLy8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyBlbGVtZW50IGhhcyBhIG1hc2sgb3IgYSBmaWx0ZXIuXG4gICAgaWYgKHRoaXMuX21hc2sgfHwgdGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuXG4gICAgICAgIC8vIHB1c2ggZmlsdGVyIGZpcnN0IGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyBjb3JyZWN0IGZvciBhbnkgbWFza2luZ1xuICAgICAgICBpZiAodGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRoaXMsIHRoaXMuX2ZpbHRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnB1c2hNYXNrKHRoaXMsIHRoaXMuX21hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgLy8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBiYXRjaCwgb25seSByZW5kZXJlZCBpZiBpdCBoYXMgYSB0ZXh0dXJlLlxuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIG1ha2Ugc3VyZSB0aGV5IGdldCByZW5kZXJlZFxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmlsdGVycylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gc2ltcGxlIHJlbmRlciBjaGlsZHJlbiFcbiAgICAgICAgZm9yIChpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnJlbmRlcldlYkdMKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3ViY2xhc3NcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyB0aGlzIGlzIHdoZXJlIGNvbnRlbnQgaXRzZWxmIGdldHMgcmVuZGVyZWQuLi5cbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpc1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMuYWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcy5fbWFzaywgcmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlckNhbnZhcyhyZW5kZXJlcik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFzaylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2socmVuZGVyZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcbntcbiAgICBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBpZiAoZGVzdHJveUNoaWxkcmVuKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KGRlc3Ryb3lDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9UcmFuc2Zvcm0nKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgIF90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgdGhhdCBhcmUgcmVuZGVyZWQgb24gdGhlIHNjcmVlbi5cbiAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvbiBpdHMgb3duIHJhdGhlciBpdCBzaG91bGQgYmUgZXh0ZW5kZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIERpc3BsYXlPYmplY3QoKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29vcmRpbmF0ZSBvZiB0aGUgb2JqZWN0IHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy50cmFuc2Zvcm0ucG9zaXRpb247XG4gICAvLyB0aGlzLl9wb3NpdGlvbiA9IG5ldyBDYWNoZVBvaW50KHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIGZhY3RvciBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlID0gdGhpcy50cmFuc2Zvcm0uc2NhbGVcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXZvdCBwb2ludCBvZiB0aGUgZGlzcGxheU9iamVjdCB0aGF0IGl0IHJvdGF0ZXMgYXJvdW5kXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucGl2b3QgPSB0aGlzLnRyYW5zZm9ybS5waXZvdFxuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2tldyBmYWN0b3IgZm9yIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5za2V3ID0gdGhpcy50cmFuc2Zvcm0uc2tld1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9yb3RhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BhY2l0eSBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpc2liaWxpdHkgb2YgdGhlIG9iamVjdC4gSWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biwgYW5kXG4gICAgICogdGhlIHVwZGF0ZVRyYW5zZm9ybSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDYW4gdGhpcyBvYmplY3QgYmUgcmVuZGVyZWQsIGlmIGZhbHNlIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgZHJhd24gYnV0IHRoZSB1cGRhdGVUcmFuc2Zvcm1cbiAgICAgKiBtZXRob2RzIHdpbGwgc3RpbGwgYmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmFibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIHRoaXMgZGlzcGxheSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNvbnRhaW5lcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbXVsdGlwbGllZCBhbHBoYSBvZiB0aGUgZGlzcGxheU9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRyYW5zZm9ybSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIHdvcmxkIChwYXJlbnQpIGZhY3RvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gdGhpcy50cmFuc2Zvcm0ubG9jYWxUcmFuc2Zvcm07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJlYSB0aGUgZmlsdGVyIGlzIGFwcGxpZWQgdG8uIFRoaXMgaXMgdXNlZCBhcyBtb3JlIG9mIGFuIG9wdGltaXNhdGlvblxuICAgICAqIHJhdGhlciB0aGFuIGZpZ3VyaW5nIG91dCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgZGlzcGxheU9iamVjdCBlYWNoIGZyYW1lIHlvdSBjYW4gc2V0IHRoaXMgcmVjdGFuZ2xlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xuXG4gICAgLyoqeHd3XG4gICAgICogY2FjaGVkIHNpbiByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3IgPSAwO1xuXG4gICAgLyoqXG4gICAgICogY2FjaGVkIGNvcyByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3IgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRzID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vc3QgdXAtdG8tZGF0ZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcmlnaW5hbCwgY2FjaGVkIG1hc2sgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXNrID0gbnVsbDtcblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGF5T2JqZWN0O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB4IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NhbGVYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByb3RhdGlvbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY3IgPSBNYXRoLmNvcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHNwcml0ZSBpcyBnbG9iYWxseSB2aXNpYmxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHdvcmxkVmlzaWJsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcztcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbWFzayBmb3IgdGhlIGRpc3BsYXlPYmplY3QuIEEgbWFzayBpcyBhbiBvYmplY3QgdGhhdCBsaW1pdHMgdGhlIHZpc2liaWxpdHkgb2YgYW4gb2JqZWN0IHRvIHRoZSBzaGFwZSBvZiB0aGUgbWFzayBhcHBsaWVkIHRvIGl0LlxuICAgICAqIEluIFBJWEkgYSByZWd1bGFyIG1hc2sgbXVzdCBiZSBhIFBJWEkuR3JhcGhpY3Mgb3IgYSBQSVhJLlNwcml0ZSBvYmplY3QuIFRoaXMgYWxsb3dzIGZvciBtdWNoIGZhc3RlciBtYXNraW5nIGluIGNhbnZhcyBhcyBpdCB1dGlsaXNlcyBzaGFwZSBjbGlwcGluZy5cbiAgICAgKiBUbyByZW1vdmUgYSBtYXNrLCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc3xQSVhJLlNwcml0ZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIG1hc2s6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFzaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX21hc2sgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFzay5yZW5kZXJhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVycyBmb3IgdGhlIGRpc3BsYXlPYmplY3QuXG4gICAgICogKiBJTVBPUlRBTlQ6IFRoaXMgaXMgYSB3ZWJHTCBvbmx5IGZlYXR1cmUgYW5kIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqIFRvIHJlbW92ZSBmaWx0ZXJzIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnbnVsbCdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGZpbHRlcnM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLnNsaWNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gdmFsdWUgJiYgdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBUT0RPIC0gT3B0aW1pemF0aW9uIHBhc3MhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgLy8gbXVsdGlwbHkgdGhlIGFscGhhcy4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG59O1xuXG4vLyBwZXJmb3JtYW5jZSBpbmNyZWFzZSB0byBhdm9pZCB1c2luZyBjYWxsLi4gKDEweCBmYXN0ZXIpXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtID0gRGlzcGxheU9iamVjdC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtO1xuXG4vKipcbiAqXG4gKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeCkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMobWF0aC5NYXRyaXguSURFTlRJVFkpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvR2xvYmFsID0gZnVuY3Rpb24gKHBvc2l0aW9uKVxue1xuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb3RcbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseShwb3NpdGlvbik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdCByZWxhdGl2ZSB0byBhbm90aGVyIHBvaW50XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcGFyYW0gW2Zyb21dIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgZ2xvYmFsIHBvc2l0aW9uIGZyb21cbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgUG9pbnQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvTG9jYWwgPSBmdW5jdGlvbiAocG9zaXRpb24sIGZyb20sIHBvaW50KVxue1xuICAgIGlmIChmcm9tKVxuICAgIHtcbiAgICAgICAgcG9zaXRpb24gPSBmcm9tLnRvR2xvYmFsKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBzaW1wbHkgYXBwbHkgdGhlIG1hdHJpeC4uXG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvc2l0aW9uLCBwb2ludCk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFyZW50IENvbnRhaW5lciBvZiB0aGlzIERpc3BsYXlPYmplY3RcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdG8gYWRkIHRoaXMgRGlzcGxheU9iamVjdCB0b1xuICogQHJldHVybiB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRoYXQgdGhpcyBEaXNwbGF5T2JqZWN0IHdhcyBhZGRlZCB0b1xuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXIuYWRkQ2hpbGQpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFBhcmVudDogQXJndW1lbnQgbXVzdCBiZSBhIENvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRDaGlsZCh0aGlzKTtcbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzZXQgdGhlIHBvc3Rpb24sIHNjYWxlLCBza2V3IGFuZCBwaXZvdCBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBUaGUgWCBwb3NpdGlvblxuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IFRoZSBZIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3NjYWxlWD0xXSB7bnVtYmVyfSBUaGUgWCBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtzY2FsZVk9MV0ge251bWJlcn0gVGhlIFkgc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbcm90YXRpb249MF0ge251bWJlcn0gVGhlIHJvdGF0aW9uXG4gKiBAcGFyYW0gW3NrZXdYPTBdIHtudW1iZXJ9IFRoZSBYIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbc2tld1k9MF0ge251bWJlcn0gVGhlIFkgc2tldyB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFg9MF0ge251bWJlcn0gVGhlIFggcGl2b3QgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RZPTBdIHtudW1iZXJ9IFRoZSBZIHBpdm90IHZhbHVlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKHgsIHksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZLCBwaXZvdFgsIHBpdm90WSkgLy9qc2hpbnQgaWdub3JlOmxpbmVcbntcbiAgICB0aGlzLnBvc2l0aW9uLnggPSB4IHx8IDA7XG4gICAgdGhpcy5wb3NpdGlvbi55ID0geSB8fCAwO1xuICAgIHRoaXMuc2NhbGUueCA9ICFzY2FsZVggPyAxIDogc2NhbGVYO1xuICAgIHRoaXMuc2NhbGUueSA9ICFzY2FsZVkgPyAxIDogc2NhbGVZO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgIHRoaXMuc2tldy54ID0gc2tld1ggfHwgMDtcbiAgICB0aGlzLnNrZXcueSA9IHNrZXdZIHx8IDA7XG4gICAgdGhpcy5waXZvdC54ID0gcGl2b3RYIHx8IDA7XG4gICAgdGhpcy5waXZvdC55ID0gcGl2b3RZIHx8IDA7XG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEJhc2UgZGVzdHJveSBtZXRob2QgZm9yIGdlbmVyaWMgZGlzcGxheSBvYmplY3RzXG4gKlxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcblxuICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2NhbGUgPSBudWxsO1xuICAgIHRoaXMucGl2b3QgPSBudWxsO1xuICAgIHRoaXMuc2tldyA9IG51bGw7XG5cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcblxuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IG1hdGguUG9pbnQoMSwxKTtcbiAgICB0aGlzLnBpdm90ID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNrZXcgPSBuZXcgbWF0aC5Qb2ludCgwLjApO1xuICAgIFxuICAgIHRoaXMucm90YXRpb24gPSAwO1xuICAgIHRoaXMuX3NyID0gTWF0aC5zaW4oMCk7XG4gICAgdGhpcy5fY3IgPSBNYXRoLmNvcygwKTtcbiAgICBcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufVxuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHJhbnNmb3JtO1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uIChwYXJlbnRUcmFuc2Zvcm0pXG57XG4gICAgdmFyIHB0ID0gcGFyZW50VHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGx0ID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcblxuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueDtcbiAgICAgICAgbHQuYiAgPSAgdGhpcy5fc3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmMgID0gLXRoaXMuX3NyICogdGhpcy5zY2FsZS55O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQudHggPSAgdGhpcy5wb3NpdGlvbi54IC0gKHRoaXMucGl2b3QueCAqIGx0LmEgKyB0aGlzLnBpdm90LnkgKiBsdC5jKTtcbiAgICAgICAgbHQudHkgPSAgdGhpcy5wb3NpdGlvbi55IC0gKHRoaXMucGl2b3QueCAqIGx0LmIgKyB0aGlzLnBpdm90LnkgKiBsdC5kKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmRpcnR5IHx8IHBhcmVudC5kaXJ0eSlcbiAgICB7ICAgICAgXG4gICAgICAgIC8vIGNvbmNhdCB0aGUgcGFyZW50IG1hdHJpeCB3aXRoIHRoZSBvYmplY3RzIHRyYW5zZm9ybS5cbiAgICAgICAgd3QuYSAgPSBsdC5hICAqIHB0LmEgKyBsdC5iICAqIHB0LmM7XG4gICAgICAgIHd0LmIgID0gbHQuYSAgKiBwdC5iICsgbHQuYiAgKiBwdC5kO1xuICAgICAgICB3dC5jICA9IGx0LmMgICogcHQuYSArIGx0LmQgICogcHQuYztcbiAgICAgICAgd3QuZCAgPSBsdC5jICAqIHB0LmIgKyBsdC5kICAqIHB0LmQ7XG4gICAgICAgIHd0LnR4ID0gbHQudHggKiBwdC5hICsgbHQudHkgKiBwdC5jICsgcHQudHg7XG4gICAgICAgIHd0LnR5ID0gbHQudHggKiBwdC5iICsgbHQudHkgKiBwdC5kICsgcHQudHk7ICAgICAgIFxuICAgIFxuICAgLy8gICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgLy8gICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbi8vICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgLy8gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm07XG5cblxuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vR3JhcGhpY3NEYXRhJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcFBvaW50ID0gbmV3IG1hdGguUG9pbnQoKTtcblxuLyoqXG4gKiBUaGUgR3JhcGhpY3MgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB1c2VkIHRvIGRyYXcgcHJpbWl0aXZlIHNoYXBlcyBzdWNoIGFzIGxpbmVzLCBjaXJjbGVzIGFuZFxuICogcmVjdGFuZ2xlcyB0byB0aGUgZGlzcGxheSwgYW5kIHRvIGNvbG9yIGFuZCBmaWxsIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3MoKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCAodGhpY2tuZXNzKSBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gMDtcblxuICAgIC8qKlxuICAgICAqIEdyYXBoaWNzIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQXBwbHkgYSB2YWx1ZSBvZiAweEZGRkZGRiB0byByZXNldCB0aGUgdGludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByZXZpb3VzIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVXNlZCB0byBjb21wYXJlIHRvIHRoZSBjdXJyZW50IHRpbnQgYW5kIGNoZWNrIGlmIHRoZXJlcyBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMuX3ByZXZUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUw7XG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHBhdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBjb250YWluaW5nIHNvbWUgV2ViR0wtcmVsYXRlZCBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgb2JqZWN0Pn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIFRPRE8gLSBfd2ViZ2wgc2hvdWxkIHVzZSBhIHByb3RvdHlwZSBvYmplY3QsIG5vdCBhIHJhbmRvbSB1bmRvY3VtZW50ZWQgb2JqZWN0Li4uXG4gICAgdGhpcy5fd2ViR0wgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBzaGFwZSBpcyBiZWluZyB1c2VkIGFzIGEgbWFzay5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc01hc2sgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBib3VuZHMnIHBhZGRpbmcgdXNlZCBmb3IgYm91bmRzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYm91bmRzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBsb2NhbCBib3VuZHMgdG8gcHJldmVudCByZWNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLDAsMSwxKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgV2ViR0wgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlXG4gICAgICogZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgY2FjaGVkIHNwcml0ZSBvYmplY3QgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGNhY2hlQXNCaXRtYXAgaXMgc2V0IHRvIHRydWUgdGhlIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIGFzIGlmIGl0IHdhcyBhIHNwcml0ZS5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGdyYXBoaWNzIGVsZW1lbnQgZG9lcyBub3QgY2hhbmdlIG9mdGVuLCBhcyBpdCB3aWxsIHNwZWVkIHVwIHRoZSByZW5kZXJpbmdcbiAgICAgKiBvZiB0aGUgb2JqZWN0IGluIGV4Y2hhbmdlIGZvciB0YWtpbmcgdXAgdGV4dHVyZSBtZW1vcnkuIEl0IGlzIGFsc28gdXNlZnVsIGlmIHlvdSBuZWVkIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB0byBiZSBhbnRpLWFsaWFzZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyBjYW52YXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGlmXG4gICAgICogeW91IGFyZSBjb25zdGFudGx5IHJlZHJhd2luZyB0aGUgZ3JhcGhpY3MgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhY2hlQXNCaXRtYXBcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkdyYXBoaWNzI1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5HcmFwaGljcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3M7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICogTm90ZSB0aGF0IHRoZSBvbmx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIGNsb25lZCwgbm90IGl0cyB0cmFuc2Zvcm0gKHBvc2l0aW9uLHNjYWxlLGV0YylcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjbG9uZSA9IG5ldyBHcmFwaGljcygpO1xuXG4gICAgY2xvbmUucmVuZGVyYWJsZSAgICA9IHRoaXMucmVuZGVyYWJsZTtcbiAgICBjbG9uZS5maWxsQWxwaGEgICAgID0gdGhpcy5maWxsQWxwaGE7XG4gICAgY2xvbmUubGluZVdpZHRoICAgICA9IHRoaXMubGluZVdpZHRoO1xuICAgIGNsb25lLmxpbmVDb2xvciAgICAgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICBjbG9uZS50aW50ICAgICAgICAgID0gdGhpcy50aW50O1xuICAgIGNsb25lLmJsZW5kTW9kZSAgICAgPSB0aGlzLmJsZW5kTW9kZTtcbiAgICBjbG9uZS5pc01hc2sgICAgICAgID0gdGhpcy5pc01hc2s7XG4gICAgY2xvbmUuYm91bmRzUGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcbiAgICBjbG9uZS5kaXJ0eSAgICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5nbERpcnR5ICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRoaXMuY2FjaGVkU3ByaXRlRGlydHk7XG5cbiAgICAvLyBjb3B5IGdyYXBoaWNzIGRhdGFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgY2xvbmUuZ3JhcGhpY3NEYXRhLnB1c2godGhpcy5ncmFwaGljc0RhdGFbaV0uY2xvbmUoKSk7XG4gICAgfVxuXG4gICAgY2xvbmUuY3VycmVudFBhdGggPSBjbG9uZS5ncmFwaGljc0RhdGFbY2xvbmUuZ3JhcGhpY3NEYXRhLmxlbmd0aCAtIDFdO1xuXG4gICAgY2xvbmUudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgIHJldHVybiBjbG9uZTtcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsaW5lIHN0eWxlIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gR3JhcGhpY3MgbWV0aG9kcyBzdWNoIGFzIHRoZSBsaW5lVG8oKSBtZXRob2Qgb3IgdGhlIGRyYXdDaXJjbGUoKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lU3R5bGUgPSBmdW5jdGlvbiAobGluZVdpZHRoLCBjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGggfHwgMDtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5saW5lQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGhhbGZ3YXkgdGhyb3VnaCBhIGxpbmU/IHN0YXJ0IGEgbmV3IG9uZSFcbiAgICAgICAgICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24odGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMuc2xpY2UoLTIpKTtcbiAgICAgICAgICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0cyBlbXB0eSBzbyBsZXRzIGp1c3Qgc2V0IHRoZSBsaW5lIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQWxwaGEgPSB0aGlzLmxpbmVBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBNb3ZlcyB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvIHgsIHkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gICovXG5HcmFwaGljcy5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihbeCx5XSk7XG4gICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgbGluZSB1c2luZyB0aGUgY3VycmVudCBsaW5lIHN0eWxlIGZyb20gdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byAoeCwgeSk7XG4gKiBUaGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIGlzIHRoZW4gc2V0IHRvICh4LCB5KS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeCwgeSk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsIDApO1xuICAgIH1cblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICB4YSA9IGZyb21YICsgKCAoY3BYIC0gZnJvbVgpICogaiApO1xuICAgICAgICB5YSA9IGZyb21ZICsgKCAoY3BZIC0gZnJvbVkpICogaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCB4YSArICggKChjcFggKyAoICh0b1ggLSBjcFgpICogaiApKSAtIHhhKSAqIGogKSxcbiAgICAgICAgICAgICAgICAgICAgIHlhICsgKCAoKGNwWSArICggKHRvWSAtIGNwWSkgKiBqICkpIC0geWEpICogaiApICk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSBjcFgyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgY3BYMiwgY3BZMiwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciBuID0gMjAsXG4gICAgICAgIGR0LFxuICAgICAgICBkdDIsXG4gICAgICAgIGR0MyxcbiAgICAgICAgdDIsXG4gICAgICAgIHQzLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIGR0ID0gKDEgLSBqKTtcbiAgICAgICAgZHQyID0gZHQgKiBkdDtcbiAgICAgICAgZHQzID0gZHQyICogZHQ7XG5cbiAgICAgICAgdDIgPSBqICogajtcbiAgICAgICAgdDMgPSB0MiAqIGo7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIGR0MyAqIGZyb21YICsgMyAqIGR0MiAqIGogKiBjcFggKyAzICogZHQgKiB0MiAqIGNwWDIgKyB0MyAqIHRvWCxcbiAgICAgICAgICAgICAgICAgICAgIGR0MyAqIGZyb21ZICsgMyAqIGR0MiAqIGogKiBjcFkgKyAzICogZHQgKiB0MiAqIGNwWTIgKyB0MyAqIHRvWSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmNUbygpIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSBiZXR3ZWVuIHR3byB0YW5nZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFwiYm9ycm93ZWRcIiBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZnhjYW52YXMvIC0gdGhhbmtzIGdvb2dsZSFcbiAqXG4gKiBAcGFyYW0geDEge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHgyIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTIge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjVG8gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIHJhZGl1cylcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyh4MSwgeTEpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyxcbiAgICAgICAgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSxcbiAgICAgICAgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSxcbiAgICAgICAgYTEgPSBmcm9tWSAtIHkxLFxuICAgICAgICBiMSA9IGZyb21YIC0geDEsXG4gICAgICAgIGEyID0geTIgICAtIHkxLFxuICAgICAgICBiMiA9IHgyICAgLSB4MSxcbiAgICAgICAgbW0gPSBNYXRoLmFicyhhMSAqIGIyIC0gYjEgKiBhMik7XG5cbiAgICBpZiAobW0gPCAxLjBlLTggfHwgcmFkaXVzID09PSAwKVxuICAgIHtcbiAgICAgICAgaWYgKHBvaW50c1twb2ludHMubGVuZ3RoLTJdICE9PSB4MSB8fCBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSAhPT0geTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIGRkID0gYTEgKiBhMSArIGIxICogYjEsXG4gICAgICAgICAgICBjYyA9IGEyICogYTIgKyBiMiAqIGIyLFxuICAgICAgICAgICAgdHQgPSBhMSAqIGEyICsgYjEgKiBiMixcbiAgICAgICAgICAgIGsxID0gcmFkaXVzICogTWF0aC5zcXJ0KGRkKSAvIG1tLFxuICAgICAgICAgICAgazIgPSByYWRpdXMgKiBNYXRoLnNxcnQoY2MpIC8gbW0sXG4gICAgICAgICAgICBqMSA9IGsxICogdHQgLyBkZCxcbiAgICAgICAgICAgIGoyID0gazIgKiB0dCAvIGNjLFxuICAgICAgICAgICAgY3ggPSBrMSAqIGIyICsgazIgKiBiMSxcbiAgICAgICAgICAgIGN5ID0gazEgKiBhMiArIGsyICogYTEsXG4gICAgICAgICAgICBweCA9IGIxICogKGsyICsgajEpLFxuICAgICAgICAgICAgcHkgPSBhMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHF4ID0gYjIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBxeSA9IGEyICogKGsxICsgajIpLFxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IE1hdGguYXRhbjIocHkgLSBjeSwgcHggLSBjeCksXG4gICAgICAgICAgICBlbmRBbmdsZSAgID0gTWF0aC5hdGFuMihxeSAtIGN5LCBxeCAtIGN4KTtcblxuICAgICAgICB0aGlzLmFyYyhjeCArIHgxLCBjeSArIHkxLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBiMSAqIGEyID4gYjIgKiBhMSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmMgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlICh1c2VkIHRvIGNyZWF0ZSBjaXJjbGVzLCBvciBwYXJ0cyBvZiBjaXJjbGVzKS5cbiAqXG4gKiBAcGFyYW0gY3gge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBjeSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBzdGFydEFuZ2xlIHtudW1iZXJ9IFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucyAoMCBpcyBhdCB0aGUgMyBvJ2Nsb2NrIHBvc2l0aW9uIG9mIHRoZSBhcmMncyBjaXJjbGUpXG4gKiBAcGFyYW0gZW5kQW5nbGUge251bWJlcn0gVGhlIGVuZGluZyBhbmdsZSwgaW4gcmFkaWFuc1xuICogQHBhcmFtIGFudGljbG9ja3dpc2Uge2Jvb2xlYW59IE9wdGlvbmFsLiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgY291bnRlcmNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuIEZhbHNlIGlzIGRlZmF1bHQsIGFuZCBpbmRpY2F0ZXMgY2xvY2t3aXNlLCB3aGlsZSB0cnVlIGluZGljYXRlcyBjb3VudGVyLWNsb2Nrd2lzZS5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmMgPSBmdW5jdGlvbihjeCwgY3ksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UpXG57XG4gICAgYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gZW5kQW5nbGUpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiggIWFudGljbG9ja3dpc2UgJiYgZW5kQW5nbGUgPD0gc3RhcnRBbmdsZSApXG4gICAge1xuICAgICAgICBlbmRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG4gICAgZWxzZSBpZiggYW50aWNsb2Nrd2lzZSAmJiBzdGFydEFuZ2xlIDw9IGVuZEFuZ2xlIClcbiAgICB7XG4gICAgICAgIHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuXG4gICAgdmFyIHN3ZWVwID0gYW50aWNsb2Nrd2lzZSA/IChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpICogLTEgOiAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKTtcbiAgICB2YXIgc2VncyA9ICBNYXRoLmNlaWwoTWF0aC5hYnMoc3dlZXApIC8gKE1hdGguUEkgKiAyKSkgKiA0MDtcblxuICAgIGlmKHN3ZWVwID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0WCA9IGN4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXM7XG4gICAgdmFyIHN0YXJ0WSA9IGN5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXM7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyhzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIHRoZXRhID0gc3dlZXAvKHNlZ3MqMik7XG4gICAgdmFyIHRoZXRhMiA9IHRoZXRhKjI7XG5cbiAgICB2YXIgY1RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgICB2YXIgc2VnTWludXMgPSBzZWdzIC0gMTtcblxuICAgIHZhciByZW1haW5kZXIgPSAoIHNlZ01pbnVzICUgMSApIC8gc2VnTWludXM7XG5cbiAgICBmb3IodmFyIGk9MDsgaTw9c2VnTWludXM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciByZWFsID0gIGkgKyByZW1haW5kZXIgKiBpO1xuXG5cbiAgICAgICAgdmFyIGFuZ2xlID0gKCh0aGV0YSkgKyBzdGFydEFuZ2xlICsgKHRoZXRhMiAqIHJlYWwpKTtcblxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgdmFyIHMgPSAtTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCggKGNUaGV0YSAqICBjKSArIChzVGhldGEgKiBzKSApICogcmFkaXVzICsgY3gsXG4gICAgICAgICAgICAgICAgICAgICggKGNUaGV0YSAqIC1zKSArIChzVGhldGEgKiBjKSApICogcmFkaXVzICsgY3kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSBzaW1wbGUgb25lLWNvbG9yIGZpbGwgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIG90aGVyIEdyYXBoaWNzIG1ldGhvZHNcbiAqIChzdWNoIGFzIGxpbmVUbygpIG9yIGRyYXdDaXJjbGUoKSkgdXNlIHdoZW4gZHJhd2luZy5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmVnaW5GaWxsID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmZpbGxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGwgPSB0aGlzLmZpbGxpbmc7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxDb2xvciA9IHRoaXMuZmlsbENvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQWxwaGEgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbGwgdG8gdGhlIGxpbmVzIGFuZCBzaGFwZXMgdGhhdCB3ZXJlIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhlIGJlZ2luRmlsbCgpIG1ldGhvZC5cbiAqXG4gKiBAcmV0dXJuIHtHcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmVuZEZpbGwgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gbnVsbDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5SZWN0YW5nbGUoeCx5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBSYWRpdXMgb2YgdGhlIHJlY3RhbmdsZSBjb3JuZXJzXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JvdW5kZWRSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdDaXJjbGUgPSBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkNpcmNsZSh4LHksIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhlIGVsbGlwc2VcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3RWxsaXBzZSA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgcG9seWdvbiB1c2luZyB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCB7bnVtYmVyW118UElYSS5Qb2ludFtdfSBUaGUgcGF0aCBkYXRhIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwb2x5Z29uLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24gKHBhdGgpXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBhdGg7XG5cbiAgICB2YXIgY2xvc2VkID0gdHJ1ZTtcblxuICAgIGlmIChwb2ludHMgaW5zdGFuY2VvZiBtYXRoLlBvbHlnb24pXG4gICAge1xuICAgICAgICBjbG9zZWQgPSBwb2ludHMuY2xvc2VkO1xuICAgICAgICBwb2ludHMgPSBwb2ludHMucG9pbnRzO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50c1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24ocG9pbnRzKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBjbG9zZWQ7XG5cbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBncmFwaGljcyB0aGF0IHdlcmUgZHJhd24gdG8gdGhpcyBHcmFwaGljcyBvYmplY3QsIGFuZCByZXNldHMgZmlsbCBhbmQgbGluZSBzdHlsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuY2xlYXJEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZ2VvbWV0cnkgaXMgY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2hvdWxkIGJlIG9uZSBvZiB0aGUgc2NhbGVNb2RlIGNvbnN0c1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdFxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG5cbiAgICByZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCAqIHJlc29sdXRpb24sIGJvdW5kcy5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY2FudmFzQnVmZmVyLmNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgdGhlIHNwcml0ZSBpcyBub3QgdmlzaWJsZSBvciB0aGUgYWxwaGEgaXMgMCB0aGVuIG5vIG5lZWQgdG8gcmVuZGVyIHRoaXMgZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuZ2xEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzLnJlbmRlcih0aGlzKTtcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmlzTWFzayA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdGludCBoYXMgY2hhbmdlZCwgc2V0IHRoZSBncmFwaGljcyBvYmplY3QgdG8gZGlydHkuXG4gICAgaWYgKHRoaXMuX3ByZXZUaW50ICE9PSB0aGlzLnRpbnQpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjb2RlIG1heSBzdGlsbCBiZSBuZWVkZWQgc28gbGVhdmluZyBmb3Igbm93Li5cbiAgICAvL1xuICAgIC8qXG4gICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXApXG4gICAge1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSB8fCB0aGlzLmNhY2hlZFNwcml0ZURpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSgpO1xuXG4gICAgICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xuXG4gICAgICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMuX2NhY2hlZFNwcml0ZSwgcmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb247XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjb250ZXh0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGdyYXBoaWMgc2hhcGUgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gVGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlLCBkZWZhdWx0cyB0byB0aGlzXG4gKiAgb2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuXG4gICAgICAgIC8vIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGl0ZW0gaXMgYSBtYXNrIVxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyYWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgICAgICAgICAgdGhpcy5nbERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2xvY2FsQm91bmRzO1xuXG4gICAgICAgIHZhciB3MCA9IGJvdW5kcy54O1xuICAgICAgICB2YXIgdzEgPSBib3VuZHMud2lkdGggKyBib3VuZHMueDtcblxuICAgICAgICB2YXIgaDAgPSBib3VuZHMueTtcbiAgICAgICAgdmFyIGgxID0gYm91bmRzLmhlaWdodCArIGJvdW5kcy55O1xuXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciBtYXhYID0geDE7XG4gICAgICAgIHZhciBtYXhZID0geTE7XG5cbiAgICAgICAgdmFyIG1pblggPSB4MTtcbiAgICAgICAgdmFyIG1pblkgPSB5MTtcblxuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy54ID0gbWluWDtcbiAgICAgICAgdGhpcy5fYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IHRoaXMuX2JvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIGdyYXBoaWNzIG9iamVjdFxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5HcmFwaGljcy5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIGdyYXBoaWNzRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoIWRhdGEuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGRlYWwgd2l0aCBmaWxscy4uXG4gICAgICAgIGlmIChkYXRhLnNoYXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIGRhdGEuc2hhcGUuY29udGFpbnMoIHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSApIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICpcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUxvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGlmICh0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB2YXIgc2hhcGUsIHBvaW50cywgeCwgeSwgdywgaDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG4gICAgICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVCB8fCB0eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueCAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gUE9MWVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSAyKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvaW50c1tqKzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblggPSB4LWxpbmVXaWR0aCA8IG1pblggPyB4LWxpbmVXaWR0aCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSB4K2xpbmVXaWR0aCA+IG1heFggPyB4K2xpbmVXaWR0aCA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IHktbGluZVdpZHRoIDwgbWluWSA/IHktbGluZVdpZHRoIDogbWluWTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IHkrbGluZVdpZHRoID4gbWF4WSA/IHkrbGluZVdpZHRoIDogbWF4WTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgbWluWCA9IDA7XG4gICAgICAgIG1heFggPSAwO1xuICAgICAgICBtaW5ZID0gMDtcbiAgICAgICAgbWF4WSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy54ID0gbWluWCAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMud2lkdGggPSAobWF4WCAtIG1pblgpICsgcGFkZGluZyAqIDI7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy55ID0gbWluWSAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMuaGVpZ2h0ID0gKG1heFkgLSBtaW5ZKSArIHBhZGRpbmcgKiAyO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNhY2hlZCBzcHJpdGUgd2hlbiB0aGUgc3ByaXRlIGhhcyBjYWNoZUFzQml0bWFwID0gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgaWYgKCF0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzKTtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgU3ByaXRlKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyID0gY2FudmFzQnVmZmVyO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIucmVzaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gbGV2ZXJhZ2UgdGhlIGFuY2hvciB0byBhY2NvdW50IGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC5zYXZlKCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGFscGhhIG9mIHRoZSBncmFwaGljcyB0byAxIGZvciB0aGUgcmVuZGVyLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gbm93IHJlbmRlciB0aGUgZ3JhcGhpYy4uXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0KTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG59O1xuKi9cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjYWNoZWRTcHJpdGUgPSB0aGlzLl9jYWNoZWRTcHJpdGU7XG4gICAgdmFyIHRleHR1cmUgPSBjYWNoZWRTcHJpdGUudGV4dHVyZTtcbiAgICB2YXIgY2FudmFzID0gY2FjaGVkU3ByaXRlLmJ1ZmZlci5jYW52YXM7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLmZyYW1lLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLmZyYW1lLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICBjYWNoZWRTcHJpdGUuX3dpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIGNhY2hlZFNwcml0ZS5faGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgZGlydHkgYmFzZSB0ZXh0dXJlc1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZGlydHkoKTtcbn07Ki9cblxuLyoqXG4gKiBEZXN0cm95cyBhIHByZXZpb3VzIGNhY2hlZCBzcHJpdGUuXG4gKlxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3lDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS50ZXh0dXJlLmRlc3Ryb3kodHJ1ZSk7XG5cbiAgICAvLyBsZXQgdGhlIGdjIGNvbGxlY3QgdGhlIHVudXNlZCBzcHJpdGVcbiAgICAvLyBUT0RPIGNvdWxkIGJlIG9iamVjdCBwb29sZWQhXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07Ki9cblxuLyoqXG4gKiBEcmF3cyB0aGUgZ2l2ZW4gc2hhcGUgdG8gdGhpcyBHcmFwaGljcyBvYmplY3QuIENhbiBiZSBhbnkgb2YgQ2lyY2xlLCBSZWN0YW5nbGUsIEVsbGlwc2UsIExpbmUgb3IgUG9seWdvbi5cbiAqXG4gKiBAcGFyYW0gc2hhcGUge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX0gVGhlIGdlbmVyYXRlZCBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24gKHNoYXBlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgLy8gY2hlY2sgY3VycmVudCBwYXRoIVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IG5ldyBHcmFwaGljc0RhdGEodGhpcy5saW5lV2lkdGgsIHRoaXMubGluZUNvbG9yLCB0aGlzLmxpbmVBbHBoYSwgdGhpcy5maWxsQ29sb3IsIHRoaXMuZmlsbEFscGhhLCB0aGlzLmZpbGxpbmcsIHNoYXBlKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnB1c2goZGF0YSk7XG5cbiAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICB7XG4gICAgICAgIGRhdGEuc2hhcGUuY2xvc2VkID0gZGF0YS5zaGFwZS5jbG9zZWQgfHwgdGhpcy5maWxsaW5nO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBkZXN0cm95IGVhY2ggb2YgdGhlIEdyYXBoaWNzRGF0YSBvYmplY3RzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggd2ViZ2wgZGF0YSBlbnRyeSwgZGVzdHJveSB0aGUgV2ViR0xHcmFwaGljc0RhdGFcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl93ZWJnbCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3dlYmdsW2lkXS5kYXRhLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJnbFtpZF0uZGF0YVtqXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl93ZWJnbCA9IG51bGw7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBudWxsO1xufTtcbiIsIi8qKlxuICogQSBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBmaWxsQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbEFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGwgICAgICB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gKiBAcGFyYW0gc2hhcGUgICAgIHtDaXJjbGV8UmVjdGFuZ2xlfEVsbGlwc2V8TGluZXxQb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzRGF0YShsaW5lV2lkdGgsIGxpbmVDb2xvciwgbGluZUFscGhhLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgZmlsbCwgc2hhcGUpXG57XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IGxpbmVDb2xvcjtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVBbHBoYSA9IGxpbmVBbHBoYTtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMuX2xpbmVUaW50ID0gbGluZUNvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5fZmlsbFRpbnQgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICAgICAqL1xuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gICAgICovXG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFRoZSB0eXBlIG9mIHRoZSBzaGFwZSwgc2VlIHRoZSBDb25zdC5TaGFwZXMgZmlsZSBmb3IgYWxsIHRoZSBleGlzdGluZyB0eXBlcyxcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBzaGFwZS50eXBlO1xufVxuXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljc0RhdGEgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfVxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEdyYXBoaWNzRGF0YShcbiAgICAgICAgdGhpcy5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMubGluZUNvbG9yLFxuICAgICAgICB0aGlzLmxpbmVBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuZmlsbEFscGhhLFxuICAgICAgICB0aGlzLmZpbGwsXG4gICAgICAgIHRoaXMuc2hhcGVcbiAgICApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3MgZGF0YS5cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2hhcGUgPSBudWxsO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vV2ViR0xHcmFwaGljc0RhdGEnKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyJyksXG5cbiAgICAvLyBzb21lIGRyYXdpbmcgZnVuY3Rpb25zLi5cbiAgICBidWlsZExpbmUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkTGluZScpO1xuICAgIGJ1aWxkUG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRQb2x5Jyk7XG4gICAgYnVpbGRDb21wbGV4UG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRDb21wbGV4UG9seScpO1xuICAgIGJ1aWxkUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlJyk7XG4gICAgYnVpbGRDaXJjbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ2lyY2xlJyk7XG5cbiAgICBlYXJjdXQgPSByZXF1aXJlKCdlYXJjdXQnKTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBHcmFwaGljc1JlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgdGhpcy5ncmFwaGljc0RhdGFQb29sID0gW107XG5cbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBvaW50cyBhIHBvbHkgY2FuIGNvbnRhaW4gYmVmb3JlIGl0IGlzIHJlbmRlcmVkIGFzIGEgY29tcGxleCBwb2x5Z29uICh1c2luZyB0aGUgc3RlbmNpbCBidWZmZXIpXG4gICAgICogQHR5cGUge051bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heGltdW1TaW1wbGVQb2x5U2l6ZSA9IDIwMDtcbn1cblxuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2dyYXBoaWNzJywgR3JhcGhpY3NSZW5kZXJlcik7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZVxuICpcbiAqIEBwcml2YXRlXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy5nbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBuZXcgUHJpbWl0aXZlU2hhZGVyKHRoaXMuZ2wpXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgcmVuZGVyZXIuXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2xbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcbiAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIHZhciB3ZWJHTERhdGE7XG4gIC8vICBjb25zb2xlLmxvZyhncmFwaGljcylcbiAgICBpZiAoZ3JhcGhpY3MuZGlydHkgfHwgIWdyYXBoaWNzLl93ZWJHTFtnbC5pZF0pXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZUdyYXBoaWNzKGdyYXBoaWNzKTtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gVGhpcyAgY291bGQgYmUgc3BlZWRlZCB1cCBmb3Igc3VyZSFcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCBncmFwaGljcy5ibGVuZE1vZGUgKTtcblxuLy8gICAgdmFyIG1hdHJpeCA9ICBncmFwaGljcy53b3JsZFRyYW5zZm9ybS5jbG9uZSgpO1xuLy8gICAgdmFyIG1hdHJpeCA9ICByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXguY2xvbmUoKTtcbi8vICAgIG1hdHJpeC5hcHBlbmQoZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0pO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB3ZWJHTC5kYXRhLmxlbmd0aDsgaSA8IG47IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMLmRhdGFbaV0ubW9kZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy9UT0RPIGZpeCB0aGlzIG9uZSFcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnB1c2hTdGVuY2lsKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICBnbC51bmlmb3JtMWYocmVuZGVyZXIuc2hhZGVyTWFuYWdlci5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSAqIHdlYkdMRGF0YS5hbHBoYSk7XG5cbiAgICAgICAgICAgIC8vIHJlbmRlciBxdWFkLi5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgcmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucG9wU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICovXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHNoYWRlciA9IHRoaXMucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgICAgICAgICByZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50aW50ID0gdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5kcmF3Q291bnQrKztcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gdXBkYXRlXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnVwZGF0ZUdyYXBoaWNzID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBnZXQgdGhlIGNvbnRleHRzIGdyYXBoaWNzIG9iamVjdFxuICAgIHZhciB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF07XG5cbiAgICAvLyBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGRvZXMgbm90IGV4aXN0IGluIHRoZSB3ZWJHTCBjb250ZXh0IHRpbWUgdG8gY3JlYXRlIGl0IVxuICAgIGlmICghd2ViR0wpXG4gICAge1xuICAgICAgICB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF0gPSB7bGFzdEluZGV4OjAsIGRhdGE6W10sIGdsOmdsfTtcbiAgICB9XG5cbiAgIFxuICAgIC8vIGZsYWcgdGhlIGdyYXBoaWNzIGFzIG5vdCBkaXJ0eSBhcyB3ZSBhcmUgYWJvdXQgdG8gdXBkYXRlIGl0Li4uXG4gICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcblxuICAgIHZhciBpO1xuXG4gICAgLy8gaWYgdGhlIHVzZXIgY2xlYXJlZCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHdlIHdpbGwgbmVlZCB0byBjbGVhciBldmVyeSBvYmplY3RcbiAgICBpZiAoZ3JhcGhpY3MuY2xlYXJEaXJ0eSlcbiAgICB7XG4gICAgICAgIGdyYXBoaWNzLmNsZWFyRGlydHkgPSBmYWxzZTtcblxuICAgICAgICAvLyBsb29wIHRocm91Z2ggYW5kIHJldHVybiBhbGwgdGhlIHdlYkdMRGF0YXMgdG8gdGhlIG9iamVjdCBwb29sIHNvIHRoYW4gY2FuIGJlIHJldXNlZCBsYXRlciBvblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGdyYXBoaWNzRGF0YSA9IHdlYkdMLmRhdGFbaV07XG4gICAgICAgICAgICBncmFwaGljc0RhdGEucmVzZXQoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wdXNoKCBncmFwaGljc0RhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIHRoZSBhcnJheSBhbmQgcmVzZXQgdGhlIGluZGV4Li5cbiAgICAgICAgd2ViR0wuZGF0YSA9IFtdO1xuICAgICAgICB3ZWJHTC5sYXN0SW5kZXggPSAwO1xuICAgIH1cblxuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICAvLyBsb29wIHRocm91Z2ggdGhlIGdyYXBoaWNzIGRhdGFzIGFuZCBjb25zdHJ1Y3QgZWFjaCBvbmUuLlxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgYSBjb21wbGV4IGZpbGwgdGhlbiB0aGUgbmV3IHN0ZW5jaWwgYnVmZmVyIHRlY2huaXF1ZSB3aWxsIGJlIHVzZWRcbiAgICAvLyBvdGhlciB3aXNlIGdyYXBoaWNzIG9iamVjdHMgd2lsbCBiZSBwdXNoZWQgaW50byBhIGJhdGNoLi5cbiAgICBmb3IgKGkgPSB3ZWJHTC5sYXN0SW5kZXg7IGkgPCBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gbmVlZCB0byBhZGQgdGhlIHBvaW50cyB0aGUgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgICAgICAgICBkYXRhLnBvaW50cyA9IGRhdGEuc2hhcGUucG9pbnRzLnNsaWNlKCk7XG4gICAgICAgICAgICBpZiAoZGF0YS5zaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gY2xvc2UgdGhlIHBvbHkgaWYgdGhlIHZhbHVlIGlzIHRydWUhXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzWzBdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMl0gfHwgZGF0YS5wb2ludHNbMV0gIT09IGRhdGEucG9pbnRzW2RhdGEucG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucG9pbnRzLnB1c2goZGF0YS5wb2ludHNbMF0sIGRhdGEucG9pbnRzWzFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1BS0UgU1VSRSBXRSBIQVZFIFRIRSBDT1JSRUNUIFRZUEUuLlxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoID49IDYpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoIDwgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgKiAyKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FuRHJhd1VzaW5nU2ltcGxlID0gYnVpbGRQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuRHJhd1VzaW5nU2ltcGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGggPiAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG4gICAgICAgICAgICAgICAgYnVpbGRMaW5lKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQyB8fCBkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5FTElQKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkQ2lyY2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2ViR0wubGFzdEluZGV4Kys7XG4gICAgfVxuXG4gICAgLy8gdXBsb2FkIGFsbCB0aGUgZGlydHkgZGF0YS4uLlxuICAgIGZvciAoaSA9IDA7IGkgPCB3ZWJHTC5kYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVtpXTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLmRpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEudXBsb2FkKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB3ZWJHTCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IFRPRE8gQEFsdmluXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnN3aXRjaE1vZGUgPSBmdW5jdGlvbiAod2ViR0wsIHR5cGUpXG57XG4gICAgdmFyIHdlYkdMRGF0YTtcblxuICAgIGlmICghd2ViR0wuZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgd2ViR0xEYXRhLm1vZGUgPSB0eXBlO1xuICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVt3ZWJHTC5kYXRhLmxlbmd0aC0xXTtcblxuICAgICAgICBpZiAoKHdlYkdMRGF0YS5wb2ludHMubGVuZ3RoID4gMzIwMDAwKSB8fCB3ZWJHTERhdGEubW9kZSAhPT0gdHlwZSB8fCB0eXBlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgICAgIHdlYkdMLmRhdGEucHVzaCh3ZWJHTERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd2ViR0xEYXRhLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB3ZWJHTERhdGE7XG59O1xuXG4iLCIvKipcbiAqIEFuIG9iamVjdCBjb250YWluaW5nIFdlYkdMIHNwZWNpZmljIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBXZWJHTEdyYXBoaWNzRGF0YShnbCkge1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLy9UT0RPIGRvZXMgdGhpcyBuZWVkIHRvIGJlIHNwbGl0IGJlZm9yZSB1cGxvZGluZz8/XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgY29sb3IgY29tcG9uZW50cyAocixnLGIpXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5jb2xvciA9IFswLDAsMF07IC8vIGNvbG9yIHNwbGl0IVxuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgcG9pbnRzIHRvIGRyYXdcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50W119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IFtdO1xuICAgIC8qKlxuICAgICAqIFRoZSBtYWluIGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggYnVmZmVyXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogdG9kbyBAYWx2aW5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tb2RlID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgZ3JhcGhpY3MgaXMgZGlydHkgb3Igbm90XG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn1cblxuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xHcmFwaGljc0RhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIFJlc2V0cyB0aGUgdmVydGljZXMgYW5kIHRoZSBpbmRpY2VzXG4gKi9cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnBvaW50cy5sZW5ndGggPSAwO1xuICAgIHRoaXMuaW5kaWNlcy5sZW5ndGggPSAwO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbi8vICAgIHRoaXMubGFzdEluZGV4ID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDtcbiAgICB0aGlzLmdsUG9pbnRzID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnBvaW50cyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5idWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmdsUG9pbnRzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmdsSW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmluZGljZXMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5nbEluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuY29sb3IgPSBudWxsO1xuICAgIHRoaXMucG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIFxuICAgIHRoaXMuZ2wgPSBudWxsO1xuXG4gICAgdGhpcy5idWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5nbFBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5nbEluZGljZXMgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihnbClcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBnbCxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgZmxpcFk7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIHZlYzMgdGludDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvciAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpXG4gICAgKTtcbn1cblxuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHJpbWl0aXZlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBjaXJjbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRyYXdcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDaXJjbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgdmFyIGNpcmNsZURhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSBjaXJjbGVEYXRhLng7XG4gICAgdmFyIHkgPSBjaXJjbGVEYXRhLnk7XG4gICAgdmFyIHdpZHRoO1xuICAgIHZhciBoZWlnaHQ7XG5cbiAgICAvLyBUT0RPIC0gYml0IGhhY2t5Pz9cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSBjaXJjbGVEYXRhLnJhZGl1cztcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS53aWR0aDtcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHRvdGFsU2VncyA9IE1hdGguZmxvb3IoMzAgKiBNYXRoLnNxcnQoY2lyY2xlRGF0YS5yYWRpdXMpKSB8fCBNYXRoLmZsb29yKDE1ICogTWF0aC5zcXJ0KGNpcmNsZURhdGEud2lkdGggKyBjaXJjbGVEYXRhLmhlaWdodCkpO1xuICAgIHZhciBzZWcgPSAoTWF0aC5QSSAqIDIpIC8gdG90YWxTZWdzIDtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTZWdzICsgMSA7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaCh4LHksIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgeSArIE1hdGguY29zKHNlZyAqIGkpICogaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MrKywgdmVjUG9zKyspO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcy0xKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cy5wdXNoKHggKyBNYXRoLnNpbihzZWcgKiBpKSAqIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBidWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENpcmNsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21wbGV4IHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENvbXBsZXhQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vVE9ETyAtIG5vIG5lZWQgdG8gY29weSB0aGlzIGFzIGl0IGdldHMgdHVybmVkIGludG8gYSBGTG9hdDMyQXJyYXkgYW55d2F5cy4uXG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHMuc2xpY2UoKTtcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB3ZWJHTERhdGEucG9pbnRzID0gcG9pbnRzO1xuICAgIHdlYkdMRGF0YS5hbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgd2ViR0xEYXRhLmNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcblxuICAgIC8vIGNhbGNsYXRlIHRoZSBib3VuZHMuLlxuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgdmFyIHgseTtcblxuICAgIC8vIGdldCBzaXplLi5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrPTIpXG4gICAge1xuICAgICAgICB4ID0gcG9pbnRzW2ldO1xuICAgICAgICB5ID0gcG9pbnRzW2krMV07XG5cbiAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBxdWFkIHRvIHRoZSBlbmQgY29zIHRoZXJlIGlzIG5vIHBvaW50IG1ha2luZyBhbm90aGVyIGJ1ZmZlciFcbiAgICBwb2ludHMucHVzaChtaW5YLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWF4WSxcbiAgICAgICAgICAgICAgICBtaW5YLCBtYXhZKTtcblxuICAgIC8vIHB1c2ggYSBxdWFkIG9udG8gdGhlIGVuZC4uXG5cbiAgICAvL1RPRE8gLSB0aGlzIGFpbnQgbmVlZGVkIVxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goIGkgKTtcbiAgICB9XG5cbn07XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29tcGxleFBvbHk7IiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZExpbmUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gVE9ETyBPUFRJTUlTRSFcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGxpbmUgd2lkdGggaXMgYW4gb2RkIG51bWJlciBhZGQgMC41IHRvIGFsaWduIHRvIGEgd2hvbGUgcGl4ZWxcbiAgICAvLyBjb21tZW50aW5nIHRoaXMgb3V0IGZpeGVzICM3MTEgYW5kICMxNjIwXG4gICAgLy8gaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGglMilcbiAgICAvLyB7XG4gICAgLy8gICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAgIHBvaW50c1tpXSArPSAwLjU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGZpcnN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgdmFyIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IHBvaW50IGlzIHRoZSBsYXN0IHBvaW50IC0gZ29ubmEgaGF2ZSBpc3N1ZXMgOilcbiAgICBpZiAoZmlyc3RQb2ludC54ID09PSBsYXN0UG9pbnQueCAmJiBmaXJzdFBvaW50LnkgPT09IGxhc3RQb2ludC55KVxuICAgIHtcbiAgICAgICAgLy8gbmVlZCB0byBjbG9uZSBhcyB3ZSBhcmUgZ29pbmcgdG8gc2xpZ2h0bHkgbW9kaWZ5IHRoZSBzaGFwZS4uXG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5zbGljZSgpO1xuXG4gICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHZhciBtaWRQb2ludFggPSBsYXN0UG9pbnQueCArIChmaXJzdFBvaW50LnggLSBsYXN0UG9pbnQueCkgKjAuNTtcbiAgICAgICAgdmFyIG1pZFBvaW50WSA9IGxhc3RQb2ludC55ICsgKGZpcnN0UG9pbnQueSAtIGxhc3RQb2ludC55KSAqMC41O1xuXG4gICAgICAgIHBvaW50cy51bnNoaWZ0KG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICAgICAgcG9pbnRzLnB1c2gobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgdmFyIGluZGV4Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIHZhciBpbmRleFN0YXJ0ID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAvLyBEUkFXIHRoZSBMaW5lXG4gICAgdmFyIHdpZHRoID0gZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEubGluZUNvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEubGluZUFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHB4LCBweSwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeTtcbiAgICB2YXIgcGVycHgsIHBlcnB5LCBwZXJwMngsIHBlcnAyeSwgcGVycDN4LCBwZXJwM3k7XG4gICAgdmFyIGExLCBiMSwgYzEsIGEyLCBiMiwgYzI7XG4gICAgdmFyIGRlbm9tLCBwZGlzdCwgZGlzdDtcblxuICAgIHAxeCA9IHBvaW50c1swXTtcbiAgICBwMXkgPSBwb2ludHNbMV07XG5cbiAgICBwMnggPSBwb2ludHNbMl07XG4gICAgcDJ5ID0gcG9pbnRzWzNdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSAgcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcblxuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIC8vIHN0YXJ0XG4gICAgdmVydHMucHVzaChwMXggLSBwZXJweCAsIHAxeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDF4ICsgcGVycHggLCBwMXkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoLTE7IGkrKylcbiAgICB7XG4gICAgICAgIHAxeCA9IHBvaW50c1soaS0xKSoyXTtcbiAgICAgICAgcDF5ID0gcG9pbnRzWyhpLTEpKjIgKyAxXTtcblxuICAgICAgICBwMnggPSBwb2ludHNbKGkpKjJdO1xuICAgICAgICBwMnkgPSBwb2ludHNbKGkpKjIgKyAxXTtcblxuICAgICAgICBwM3ggPSBwb2ludHNbKGkrMSkqMl07XG4gICAgICAgIHAzeSA9IHBvaW50c1soaSsxKSoyICsgMV07XG5cbiAgICAgICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgICAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgICAgICBwZXJwMnggPSAtKHAyeSAtIHAzeSk7XG4gICAgICAgIHBlcnAyeSA9IHAyeCAtIHAzeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAyeCpwZXJwMnggKyBwZXJwMnkqcGVycDJ5KTtcbiAgICAgICAgcGVycDJ4IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeSAvPSBkaXN0O1xuICAgICAgICBwZXJwMnggKj0gd2lkdGg7XG4gICAgICAgIHBlcnAyeSAqPSB3aWR0aDtcblxuICAgICAgICBhMSA9ICgtcGVycHkgKyBwMXkpIC0gKC1wZXJweSArIHAyeSk7XG4gICAgICAgIGIxID0gKC1wZXJweCArIHAyeCkgLSAoLXBlcnB4ICsgcDF4KTtcbiAgICAgICAgYzEgPSAoLXBlcnB4ICsgcDF4KSAqICgtcGVycHkgKyBwMnkpIC0gKC1wZXJweCArIHAyeCkgKiAoLXBlcnB5ICsgcDF5KTtcbiAgICAgICAgYTIgPSAoLXBlcnAyeSArIHAzeSkgLSAoLXBlcnAyeSArIHAyeSk7XG4gICAgICAgIGIyID0gKC1wZXJwMnggKyBwMngpIC0gKC1wZXJwMnggKyBwM3gpO1xuICAgICAgICBjMiA9ICgtcGVycDJ4ICsgcDN4KSAqICgtcGVycDJ5ICsgcDJ5KSAtICgtcGVycDJ4ICsgcDJ4KSAqICgtcGVycDJ5ICsgcDN5KTtcblxuICAgICAgICBkZW5vbSA9IGExKmIyIC0gYTIqYjE7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8IDAuMSApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgZGVub20rPTEwLjE7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4ID0gKGIxKmMyIC0gYjIqYzEpL2Rlbm9tO1xuICAgICAgICBweSA9IChhMipjMSAtIGExKmMyKS9kZW5vbTtcblxuXG4gICAgICAgIHBkaXN0ID0gKHB4IC1wMngpICogKHB4IC1wMngpICsgKHB5IC1wMnkpICogKHB5IC1wMnkpO1xuXG5cbiAgICAgICAgaWYgKHBkaXN0ID4gMTQwICogMTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICBwZXJwM3ggPSBwZXJweCAtIHBlcnAyeDtcbiAgICAgICAgICAgIHBlcnAzeSA9IHBlcnB5IC0gcGVycDJ5O1xuXG4gICAgICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAzeCpwZXJwM3ggKyBwZXJwM3kqcGVycDN5KTtcbiAgICAgICAgICAgIHBlcnAzeCAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN5IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3ggKj0gd2lkdGg7XG4gICAgICAgICAgICBwZXJwM3kgKj0gd2lkdGg7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJwM3gsIHAyeSArcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGV4Q291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmVydHMucHVzaChweCAsIHB5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIChweC1wMngpLCBwMnkgLSAocHkgLSBwMnkpKTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcDF4ID0gcG9pbnRzWyhsZW5ndGgtMikqMl07XG4gICAgcDF5ID0gcG9pbnRzWyhsZW5ndGgtMikqMiArIDFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWyhsZW5ndGgtMSkqMl07XG4gICAgcDJ5ID0gcG9pbnRzWyhsZW5ndGgtMSkqMiArIDFdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KyspO1xuICAgIH1cblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0LTEpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZExpbmU7IiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5XZWJHTEdyYXBoaWNzRGF0YX0gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChwb2ludHMsIG51bGwsIDIpO1xuXG4gICAgaWYgKCF0cmlhbmdsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoIC8gNjtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gK3ZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZXJ0UG9zKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2ZXJ0cy5wdXNoKHBvaW50c1tpICogMl0sIHBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFBvbHk7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gLS0tIC8vXG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgLy9cbiAgICB2YXIgcmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSByZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSByZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICAvLyBzdGFydFxuICAgICAgICB2ZXJ0cy5wdXNoKHgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCAsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIC8vIGluc2VydCAyIGRlYWQgdHJpYW5nbGVzLi5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRQb3MsIHZlcnRQb3MsIHZlcnRQb3MrMSwgdmVydFBvcysyLCB2ZXJ0UG9zKzMsIHZlcnRQb3MrMyk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFt4LCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHldO1xuXG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUmVjdGFuZ2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcbiAgICBcbi8qKlxuICogQnVpbGRzIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbmJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcnJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcnJlY3REYXRhLng7XG4gICAgdmFyIHkgPSBycmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSBycmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJyZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICB2YXIgcmFkaXVzID0gcnJlY3REYXRhLnJhZGl1cztcblxuICAgIHZhciByZWNQb2ludHMgPSBbXTtcbiAgICByZWNQb2ludHMucHVzaCh4LCB5ICsgcmFkaXVzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHgsIHkgKyBoZWlnaHQsIHggKyByYWRpdXMsIHkgKyBoZWlnaHQsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoLCB5ICsgcmFkaXVzLCB4ICsgd2lkdGgsIHksIHggKyB3aWR0aCAtIHJhZGl1cywgeSwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyByYWRpdXMsIHksIHgsIHksIHgsIHkgKyByYWRpdXMgKyAwLjAwMDAwMDAwMDEsIHJlY1BvaW50cyk7XG5cbiAgICAvLyB0aGlzIHRpbnkgbnVtYmVyIGRlYWxzIHdpdGggdGhlIGlzc3VlIHRoYXQgb2NjdXJzIHdoZW4gcG9pbnRzIG92ZXJsYXAgYW5kIGVhcmN1dCBmYWlscyB0byB0cmlhbmd1bGF0ZSB0aGUgaXRlbS5cbiAgICAvLyBUT0RPIC0gZml4IHRoaXMgcHJvcGVybHksIHRoaXMgaXMgbm90IHZlcnkgZWxlZ2FudC4uIGJ1dCBpdCB3b3JrcyBmb3Igbm93LlxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocmVjUG9pbnRzLCBudWxsLCAyKTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlY1BvaW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaChyZWNQb2ludHNbaV0sIHJlY1BvaW50c1srK2ldLCByLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gcmVjUG9pbnRzO1xuXG4gICAgICAgIHRoaXMuYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUuIChoZWxwZXIgZnVuY3Rpb24uLilcbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZyb21YIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gZnJvbVkge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEBwYXJhbSBbb3V0XSB7bnVtYmVyW119IFRoZSBvdXRwdXQgYXJyYXkgdG8gYWRkIHBvaW50cyBpbnRvLiBJZiBub3QgcGFzc2VkLCBhIG5ldyBhcnJheSBpcyBjcmVhdGVkLlxuICogQHJldHVybiB7bnVtYmVyW119IGFuIGFycmF5IG9mIHBvaW50c1xuICovXG5xdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IGZ1bmN0aW9uIChmcm9tWCwgZnJvbVksIGNwWCwgY3BZLCB0b1gsIHRvWSwgb3V0KVxue1xuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIHhiLFxuICAgICAgICB5YixcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSBvdXQgfHwgW107XG5cbiAgICBmdW5jdGlvbiBnZXRQdChuMSAsIG4yLCBwZXJjKSB7XG4gICAgICAgIHZhciBkaWZmID0gbjIgLSBuMTtcblxuICAgICAgICByZXR1cm4gbjEgKyAoIGRpZmYgKiBwZXJjICk7XG4gICAgfVxuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKyApIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIC8vIFRoZSBHcmVlbiBMaW5lXG4gICAgICAgIHhhID0gZ2V0UHQoIGZyb21YICwgY3BYICwgaiApO1xuICAgICAgICB5YSA9IGdldFB0KCBmcm9tWSAsIGNwWSAsIGogKTtcbiAgICAgICAgeGIgPSBnZXRQdCggY3BYICwgdG9YICwgaiApO1xuICAgICAgICB5YiA9IGdldFB0KCBjcFkgLCB0b1kgLCBqICk7XG5cbiAgICAgICAgLy8gVGhlIEJsYWNrIERvdFxuICAgICAgICB4ID0gZ2V0UHQoIHhhICwgeGIgLCBqICk7XG4gICAgICAgIHkgPSBnZXRQdCggeWEgLCB5YiAsIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUm91bmRlZFJlY3RhbmdsZTsiLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBjb3JlIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSVxuICovXG4vLyBleHBvcnQgY29yZSBhbmQgY29uc3QuIFdlIGFzc2lnbiBjb3JlIHRvIGNvbnN0IHNvIHRoYXQgdGhlIG5vbi1yZWZlcmVuY2UgdHlwZXMgaW4gY29uc3QgcmVtYWluIGluLXRhY3RcbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduKHJlcXVpcmUoJy4vY29uc3QnKSwgcmVxdWlyZSgnLi9tYXRoJyksIHtcbiAgICAvLyB1dGlsc1xuICAgIHV0aWxzOiByZXF1aXJlKCcuL3V0aWxzJyksXG4gICAgdGlja2VyOiByZXF1aXJlKCcuL3RpY2tlcicpLFxuXG4gICAgLy8gZGlzcGxheVxuICAgIERpc3BsYXlPYmplY3Q6ICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9EaXNwbGF5T2JqZWN0JyksXG4gICAgQ29udGFpbmVyOiAgICAgICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuXG4gICAgLy8gc3ByaXRlc1xuICAgIFNwcml0ZTogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBQYXJ0aWNsZUNvbnRhaW5lcjogICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lcicpLFxuICAgIFNwcml0ZVJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHRcbiAgICBUZXh0OiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHQvVGV4dCcpLFxuXG4gICAgLy8gcHJpbWl0aXZlc1xuICAgIEdyYXBoaWNzOiAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGE6ICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRGF0YScpLFxuICAgIEdyYXBoaWNzUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dHVyZXNcbiAgICBUZXh0dXJlOiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBCYXNlVGV4dHVyZTogICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL0Jhc2VUZXh0dXJlJyksXG4gICAgUmVuZGVyVGV4dHVyZTogICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgQmFzZVJlbmRlclRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmU6ICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnM6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVGV4dHVyZVV2cycpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gY2FudmFzXG4gICAgQ2FudmFzUmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyJyksXG4gICAgQ2FudmFzR3JhcGhpY3M6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzJyksXG4gICAgQ2FudmFzQnVmZmVyOiAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gd2ViZ2xcbiAgICBXZWJHTFJlbmRlcmVyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgU2hhZGVyOiAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXInKSxcbiAgICBPYmplY3RSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFJlbmRlclRhcmdldDogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuXG4gICAgLy8gZmlsdGVycyAtIHdlYmdsXG4gICAgQWJzdHJhY3RGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlcicpLFxuICAgIEZYQUFGaWx0ZXI6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFNwcml0ZU1hc2tGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlcicpLFxuXG4gICAgZ2xDb3JlOiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3Qgd2hpY2ggcmVuZGVyZXIgeW91IHNob3VsZCBiZSB1c2luZy5cbiAgICAgKiBXZWJHTCBpcyB0aGUgcHJlZmVycmVkIHJlbmRlcmVyIGFzIGl0IGlzIGEgbG90IGZhc3Rlci4gSWYgd2ViR0wgaXMgbm90IHN1cHBvcnRlZCBieVxuICAgICAqIHRoZSBicm93c2VyIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhIGNhbnZhcyByZW5kZXJlclxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAcGFyYW0gd2lkdGg9ODAwIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gaGVpZ2h0PTYwMCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSByZW5kZXJlcnMgdmlld1xuICAgICAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gICAgICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZV0ge2Jvb2xlYW59IGVuYWJsZXMgZHJhd2luZyBidWZmZXIgcHJlc2VydmF0aW9uLCBlbmFibGUgdGhpcyBpZiB5b3VcbiAgICAgKiAgICAgIG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIsIHJldGluYSB3b3VsZCBiZSAyXG4gICAgICogQHBhcmFtIFtub1dlYkdMPWZhbHNlXSB7Ym9vbGVhbn0gcHJldmVudHMgc2VsZWN0aW9uIG9mIFdlYkdMIHJlbmRlcmVyLCBldmVuIGlmIHN1Y2ggaXMgcHJlc2VudFxuICAgICAqXG4gICAgICogQHJldHVybiB7V2ViR0xSZW5kZXJlcnxDYW52YXNSZW5kZXJlcn0gUmV0dXJucyBXZWJHTCByZW5kZXJlciBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBDYW52YXNSZW5kZXJlclxuICAgICAqL1xuICAgIGF1dG9EZXRlY3RSZW5kZXJlcjogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMsIG5vV2ViR0wpXG4gICAge1xuICAgICAgICB3aWR0aCA9IHdpZHRoIHx8IDgwMDtcbiAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0IHx8IDYwMDtcblxuICAgICAgICBpZiAoIW5vV2ViR0wgJiYgY29yZS51dGlscy5pc1dlYkdMU3VwcG9ydGVkKCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgY29yZS5XZWJHTFJlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBjb3JlLkNhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgIH1cbn0pO1xuIiwiLy8gQHRvZG8gLSBpZ25vcmUgdGhlIHRvbyBtYW55IHBhcmFtZXRlcnMgd2FybmluZyBmb3Igbm93XG4vLyBzaG91bGQgZWl0aGVyIGZpeCBpdCBvciBjaGFuZ2UgdGhlIGpzaGludCBjb25maWdcbi8vIGpzaGludCAtVzA3MlxuXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuL1BvaW50Jyk7XG5cbi8qKlxuICogVGhlIHBpeGkgTWF0cml4IGNsYXNzIGFzIGFuIG9iamVjdCwgd2hpY2ggbWFrZXMgaXQgYSBsb3QgZmFzdGVyLFxuICogaGVyZSBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIGl0IDpcbiAqIHwgYSB8IGIgfCB0eHxcbiAqIHwgYyB8IGQgfCB0eXxcbiAqIHwgMCB8IDAgfCAxIHxcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIE1hdHJpeCgpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmIgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmMgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnR4ID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eSA9IDA7XG59XG5cbk1hdHJpeC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNYXRyaXg7XG5tb2R1bGUuZXhwb3J0cyA9IE1hdHJpeDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgTWF0cml4IG9iamVjdCBiYXNlZCBvbiB0aGUgZ2l2ZW4gYXJyYXkuIFRoZSBFbGVtZW50IHRvIE1hdHJpeCBtYXBwaW5nIG9yZGVyIGlzIGFzIGZvbGxvd3M6XG4gKlxuICogYSA9IGFycmF5WzBdXG4gKiBiID0gYXJyYXlbMV1cbiAqIGMgPSBhcnJheVszXVxuICogZCA9IGFycmF5WzRdXG4gKiB0eCA9IGFycmF5WzJdXG4gKiB0eSA9IGFycmF5WzVdXG4gKlxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX0gVGhlIGFycmF5IHRoYXQgdGhlIG1hdHJpeCB3aWxsIGJlIHBvcHVsYXRlZCBmcm9tLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJheSlcbntcbiAgICB0aGlzLmEgPSBhcnJheVswXTtcbiAgICB0aGlzLmIgPSBhcnJheVsxXTtcbiAgICB0aGlzLmMgPSBhcnJheVszXTtcbiAgICB0aGlzLmQgPSBhcnJheVs0XTtcbiAgICB0aGlzLnR4ID0gYXJyYXlbMl07XG4gICAgdGhpcy50eSA9IGFycmF5WzVdO1xufTtcblxuXG4vKipcbiAqIHNldHMgdGhlIG1hdHJpeCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gKiBAcGFyYW0ge251bWJlcn0gY1xuICogQHBhcmFtIHtudW1iZXJ9IGRcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eFxuICogQHBhcmFtIHtudW1iZXJ9IHR5XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHR4LCB0eSlcbntcbiAgICB0aGlzLmEgPSBhO1xuICAgIHRoaXMuYiA9IGI7XG4gICAgdGhpcy5jID0gYztcbiAgICB0aGlzLmQgPSBkO1xuICAgIHRoaXMudHggPSB0eDtcbiAgICB0aGlzLnR5ID0gdHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGZyb20gdGhlIGN1cnJlbnQgTWF0cml4IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3NlIHtib29sZWFufSBXaGV0aGVyIHdlIG5lZWQgdG8gdHJhbnNwb3NlIHRoZSBtYXRyaXggb3Igbm90XG4gKiBAcGFyYW0gW291dF0ge0FycmF5fSBJZiBwcm92aWRlZCB0aGUgYXJyYXkgd2lsbCBiZSBhc3NpZ25lZCB0byBvdXRcbiAqIEByZXR1cm4ge251bWJlcltdfSB0aGUgbmV3bHkgY3JlYXRlZCBhcnJheSB3aGljaCBjb250YWlucyB0aGUgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICh0cmFuc3Bvc2UsIG91dClcbntcbiAgICBpZiAoIXRoaXMuYXJyYXkpXG4gICAge1xuICAgICAgICB0aGlzLmFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg5KTtcbiAgICB9XG5cbiAgICB2YXIgYXJyYXkgPSBvdXQgfHwgdGhpcy5hcnJheTtcblxuICAgIGlmICh0cmFuc3Bvc2UpXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzJdID0gMDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IDA7XG4gICAgICAgIGFycmF5WzZdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbN10gPSB0aGlzLnR5O1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGFycmF5WzBdID0gdGhpcy5hO1xuICAgICAgICBhcnJheVsxXSA9IHRoaXMuYztcbiAgICAgICAgYXJyYXlbMl0gPSB0aGlzLnR4O1xuICAgICAgICBhcnJheVszXSA9IHRoaXMuYjtcbiAgICAgICAgYXJyYXlbNF0gPSB0aGlzLmQ7XG4gICAgICAgIGFycmF5WzVdID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbNl0gPSAwO1xuICAgICAgICBhcnJheVs3XSA9IDA7XG4gICAgICAgIGFycmF5WzhdID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59O1xuXG4vKipcbiAqIEdldCBhIG5ldyBwb3NpdGlvbiB3aXRoIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXG4gKiBDYW4gYmUgdXNlZCB0byBnbyBmcm9tIGEgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlIHRvIHRoZSB3b3JsZCBjb29yZGluYXRlIHNwYWNlLiAoZS5nLiByZW5kZXJpbmcpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCB0cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIHggPSBwb3MueDtcbiAgICB2YXIgeSA9IHBvcy55O1xuXG4gICAgbmV3UG9zLnggPSB0aGlzLmEgKiB4ICsgdGhpcy5jICogeSArIHRoaXMudHg7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmIgKiB4ICsgdGhpcy5kICogeSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gbmV3UG9zO1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgaW52ZXJzZSBvZiB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZSB0byBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gaW5wdXQpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCBpbnZlcnNlLXRyYW5zZm9ybWVkIHRocm91Z2ggdGhpcyBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBseUludmVyc2UgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIGlkID0gMSAvICh0aGlzLmEgKiB0aGlzLmQgKyB0aGlzLmMgKiAtdGhpcy5iKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5kICogaWQgKiB4ICsgLXRoaXMuYyAqIGlkICogeSArICh0aGlzLnR5ICogdGhpcy5jIC0gdGhpcy50eCAqIHRoaXMuZCkgKiBpZDtcbiAgICBuZXdQb3MueSA9IHRoaXMuYSAqIGlkICogeSArIC10aGlzLmIgKiBpZCAqIHggKyAoLXRoaXMudHkgKiB0aGlzLmEgKyB0aGlzLnR4ICogdGhpcy5iKSAqIGlkO1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogVHJhbnNsYXRlcyB0aGUgbWF0cml4IG9uIHRoZSB4IGFuZCB5LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudHJhbnNsYXRlID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy50eCArPSB4O1xuICAgIHRoaXMudHkgKz0geTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgc2NhbGUgdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geCBUaGUgYW1vdW50IHRvIHNjYWxlIGhvcml6b250YWxseVxuICogQHBhcmFtIHtudW1iZXJ9IHkgVGhlIGFtb3VudCB0byBzY2FsZSB2ZXJ0aWNhbGx5XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zY2FsZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuYSAqPSB4O1xuICAgIHRoaXMuZCAqPSB5O1xuICAgIHRoaXMuYyAqPSB4O1xuICAgIHRoaXMuYiAqPSB5O1xuICAgIHRoaXMudHggKj0geDtcbiAgICB0aGlzLnR5ICo9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBBcHBsaWVzIGEgcm90YXRpb24gdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgaW4gcmFkaWFucy5cbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZSA9IGZ1bmN0aW9uIChhbmdsZSlcbntcbiAgICB2YXIgY29zID0gTWF0aC5jb3MoIGFuZ2xlICk7XG4gICAgdmFyIHNpbiA9IE1hdGguc2luKCBhbmdsZSApO1xuXG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIHRoaXMuYSA9IGExICogY29zLXRoaXMuYiAqIHNpbjtcbiAgICB0aGlzLmIgPSBhMSAqIHNpbit0aGlzLmIgKiBjb3M7XG4gICAgdGhpcy5jID0gYzEgKiBjb3MtdGhpcy5kICogc2luO1xuICAgIHRoaXMuZCA9IGMxICogc2luK3RoaXMuZCAqIGNvcztcbiAgICB0aGlzLnR4ID0gdHgxICogY29zIC0gdGhpcy50eSAqIHNpbjtcbiAgICB0aGlzLnR5ID0gdHgxICogc2luICsgdGhpcy50eSAqIGNvcztcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcblxuICAgIHRoaXMuYSAgPSBtYXRyaXguYSAqIGExICsgbWF0cml4LmIgKiBjMTtcbiAgICB0aGlzLmIgID0gbWF0cml4LmEgKiBiMSArIG1hdHJpeC5iICogZDE7XG4gICAgdGhpcy5jICA9IG1hdHJpeC5jICogYTEgKyBtYXRyaXguZCAqIGMxO1xuICAgIHRoaXMuZCAgPSBtYXRyaXguYyAqIGIxICsgbWF0cml4LmQgKiBkMTtcblxuICAgIHRoaXMudHggPSBtYXRyaXgudHggKiBhMSArIG1hdHJpeC50eSAqIGMxICsgdGhpcy50eDtcbiAgICB0aGlzLnR5ID0gbWF0cml4LnR4ICogYjEgKyBtYXRyaXgudHkgKiBkMSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbWF0cml4IGJhc2VkIG9uIGFsbCB0aGUgYXZhaWxhYmxlIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFhcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFlcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVlcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3RhdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdYXG4gKiBAcGFyYW0ge251bWJlcn0gc2tld1lcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoeCwgeSwgcGl2b3RYLCBwaXZvdFksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZKVxue1xuICAgIHZhciBhLCBiLCBjLCBkLCBzciwgY3IsIGN5LCBzeSwgbnN4LCBjeDtcblxuICAgIHNyICA9IE1hdGguc2luKHJvdGF0aW9uKTtcbiAgICBjciAgPSBNYXRoLmNvcyhyb3RhdGlvbik7XG4gICAgY3kgID0gTWF0aC5jb3Moc2tld1kpO1xuICAgIHN5ICA9IE1hdGguc2luKHNrZXdZKTtcbiAgICBuc3ggPSAtTWF0aC5zaW4oc2tld1gpO1xuICAgIGN4ICA9ICBNYXRoLmNvcyhza2V3WCk7XG5cbiAgICBhICA9ICBjciAqIHNjYWxlWDtcbiAgICBiICA9ICBzciAqIHNjYWxlWDtcbiAgICBjICA9IC1zciAqIHNjYWxlWTtcbiAgICBkICA9ICBjciAqIHNjYWxlWTtcblxuICAgIHRoaXMuYSAgPSBjeSAqIGEgKyBzeSAqIGM7XG4gICAgdGhpcy5iICA9IGN5ICogYiArIHN5ICogZDtcbiAgICB0aGlzLmMgID0gbnN4ICogYSArIGN4ICogYztcbiAgICB0aGlzLmQgID0gbnN4ICogYiArIGN4ICogZDtcblxuICAgIHRoaXMudHggPSB4ICsgKCBwaXZvdFggKiBhICsgcGl2b3RZICogYyApO1xuICAgIHRoaXMudHkgPSB5ICsgKCBwaXZvdFggKiBiICsgcGl2b3RZICogZCApO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFByZXBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24obWF0cml4KVxue1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuXG4gICAgaWYgKG1hdHJpeC5hICE9PSAxIHx8IG1hdHJpeC5iICE9PSAwIHx8IG1hdHJpeC5jICE9PSAwIHx8IG1hdHJpeC5kICE9PSAxKVxuICAgIHtcbiAgICAgICAgdmFyIGExID0gdGhpcy5hO1xuICAgICAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgICAgIHRoaXMuYSAgPSBhMSptYXRyaXguYSt0aGlzLmIqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuYiAgPSBhMSptYXRyaXguYit0aGlzLmIqbWF0cml4LmQ7XG4gICAgICAgIHRoaXMuYyAgPSBjMSptYXRyaXguYSt0aGlzLmQqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuZCAgPSBjMSptYXRyaXguYit0aGlzLmQqbWF0cml4LmQ7XG4gICAgfVxuXG4gICAgdGhpcy50eCA9IHR4MSptYXRyaXguYSt0aGlzLnR5Km1hdHJpeC5jK21hdHJpeC50eDtcbiAgICB0aGlzLnR5ID0gdHgxKm1hdHJpeC5iK3RoaXMudHkqbWF0cml4LmQrbWF0cml4LnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEludmVydHMgdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5pbnZlcnQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBiMSA9IHRoaXMuYjtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIGQxID0gdGhpcy5kO1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuICAgIHZhciBuID0gYTEqZDEtYjEqYzE7XG5cbiAgICB0aGlzLmEgPSBkMS9uO1xuICAgIHRoaXMuYiA9IC1iMS9uO1xuICAgIHRoaXMuYyA9IC1jMS9uO1xuICAgIHRoaXMuZCA9IGExL247XG4gICAgdGhpcy50eCA9IChjMSp0aGlzLnR5LWQxKnR4MSkvbjtcbiAgICB0aGlzLnR5ID0gLShhMSp0aGlzLnR5LWIxKnR4MSkvbjtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIFJlc2V0cyB0aGlzIE1hdGl4IHRvIGFuIGlkZW50aXR5IChkZWZhdWx0KSBtYXRyaXguXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaWRlbnRpdHkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYSA9IDE7XG4gICAgdGhpcy5iID0gMDtcbiAgICB0aGlzLmMgPSAwO1xuICAgIHRoaXMuZCA9IDE7XG4gICAgdGhpcy50eCA9IDA7XG4gICAgdGhpcy50eSA9IDA7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBNYXRyaXggb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBBIGNvcHkgb2YgdGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1hdHJpeCA9IG5ldyBNYXRyaXgoKTtcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSB2YWx1ZXMgb2YgdGhlIGdpdmVuIG1hdHJpeCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgb25lcyBpbiB0aGlzIG1hdHJpeFxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGUgbWF0cml4IGdpdmVuIGluIHBhcmFtZXRlciB3aXRoIGl0cyB2YWx1ZXMgdXBkYXRlZC5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBBIGRlZmF1bHQgKGlkZW50aXR5KSBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LklERU5USVRZID0gbmV3IE1hdHJpeCgpO1xuXG4vKipcbiAqIEEgdGVtcCBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LlRFTVBfTUFUUklYID0gbmV3IE1hdHJpeCgpO1xuIiwiLyoqXG4gKiBUaGUgUG9pbnQgb2JqZWN0IHJlcHJlc2VudHMgYSBsb2NhdGlvbiBpbiBhIHR3by1kaW1lbnNpb25hbCBjb29yZGluYXRlIHN5c3RlbSwgd2hlcmUgeCByZXByZXNlbnRzXG4gKiB0aGUgaG9yaXpvbnRhbCBheGlzIGFuZCB5IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIGF4aXMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXNcbiAqL1xuZnVuY3Rpb24gUG9pbnQoeCwgeSlcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xufVxuXG5Qb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2ludDtcbm1vZHVsZS5leHBvcnRzID0gUG9pbnQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9pbnRcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBhIGNvcHkgb2YgdGhlIHBvaW50XG4gKi9cblBvaW50LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLngsIHRoaXMueSk7XG59O1xuXG4vKipcbiAqIENvcGllcyB4IGFuZCB5IGZyb20gdGhlIGdpdmVuIHBvaW50XG4gKlxuICogQHBhcmFtIHAge1BJWEkuUG9pbnR9XG4gKi9cblBvaW50LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKHApIHtcbiAgICB0aGlzLnNldChwLngsIHAueSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcG9pbnQgaXMgZXF1YWwgdG8gdGhpcyBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cblBvaW50LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiAocC54ID09PSB0aGlzLngpICYmIChwLnkgPT09IHRoaXMueSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIHBvaW50IHRvIGEgbmV3IHggYW5kIHkgcG9zaXRpb24uXG4gKiBJZiB5IGlzIG9taXR0ZWQsIGJvdGggeCBhbmQgeSB3aWxsIGJlIHNldCB0byB4LlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cblBvaW50LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLnggPSB4IHx8IDA7XG4gICAgdGhpcy55ID0geSB8fCAoICh5ICE9PSAwKSA/IHRoaXMueCA6IDAgKSA7XG59O1xuIiwiLyoqXG4gKiBNYXRoIGNsYXNzZXMgYW5kIHV0aWxpdGllcyBtaXhlZCBpbnRvIFBJWEkgbmFtZXNwYWNlLlxuICpcbiAqIEBsZW5kcyBQSVhJXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8vIFRoZXNlIHdpbGwgYmUgbWl4ZWQgdG8gYmUgbWFkZSBwdWJsaWNseSBhdmFpbGFibGUsXG4gICAgLy8gd2hpbGUgdGhpcyBtb2R1bGUgaXMgdXNlZCBpbnRlcm5hbGx5IGluIGNvcmVcbiAgICAvLyB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYW5kIGN1dCBkb3duIG9uXG4gICAgLy8gaW50ZXJuYWwgbW9kdWxlIHJlcXVpcmVzLlxuXG4gICAgUG9pbnQ6ICAgICAgcmVxdWlyZSgnLi9Qb2ludCcpLFxuICAgIE1hdHJpeDogICAgIHJlcXVpcmUoJy4vTWF0cml4JyksXG5cbiAgICBDaXJjbGU6ICAgICByZXF1aXJlKCcuL3NoYXBlcy9DaXJjbGUnKSxcbiAgICBFbGxpcHNlOiAgICByZXF1aXJlKCcuL3NoYXBlcy9FbGxpcHNlJyksXG4gICAgUG9seWdvbjogICAgcmVxdWlyZSgnLi9zaGFwZXMvUG9seWdvbicpLFxuICAgIFJlY3RhbmdsZTogIHJlcXVpcmUoJy4vc2hhcGVzL1JlY3RhbmdsZScpLFxuICAgIFJvdW5kZWRSZWN0YW5nbGU6IHJlcXVpcmUoJy4vc2hhcGVzL1JvdW5kZWRSZWN0YW5nbGUnKVxufTtcbiIsInZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2lyY2xlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKi9cbmZ1bmN0aW9uIENpcmNsZSh4LCB5LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuQ0lSQztcbn1cblxuQ2lyY2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENpcmNsZTtcbm1vZHVsZS5leHBvcnRzID0gQ2lyY2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIENpcmNsZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuQ2lyY2xlfSBhIGNvcHkgb2YgdGhlIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IENpcmNsZSh0aGlzLngsIHRoaXMueSwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGNpcmNsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgQ2lyY2xlXG4gKi9cbkNpcmNsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy5yYWRpdXMgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgZHggPSAodGhpcy54IC0geCksXG4gICAgICAgIGR5ID0gKHRoaXMueSAtIHkpLFxuICAgICAgICByMiA9IHRoaXMucmFkaXVzICogdGhpcy5yYWRpdXM7XG5cbiAgICBkeCAqPSBkeDtcbiAgICBkeSAqPSBkeTtcblxuICAgIHJldHVybiAoZHggKyBkeSA8PSByMik7XG59O1xuXG4vKipcbiogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIGNpcmNsZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuKi9cbkNpcmNsZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLnJhZGl1cywgdGhpcy55IC0gdGhpcy5yYWRpdXMsIHRoaXMucmFkaXVzICogMiwgdGhpcy5yYWRpdXMgKiAyKTtcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIEVsbGlwc2Ugb2JqZWN0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBoaXQgYXJlYSBmb3IgZGlzcGxheU9iamVjdHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBoYWxmIHdpZHRoIG9mIHRoaXMgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhpcyBlbGxpcHNlXG4gKi9cbmZ1bmN0aW9uIEVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuRUxJUDtcbn1cblxuRWxsaXBzZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFbGxpcHNlO1xubW9kdWxlLmV4cG9ydHMgPSBFbGxpcHNlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIEVsbGlwc2UgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkVsbGlwc2V9IGEgY29weSBvZiB0aGUgZWxsaXBzZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBFbGxpcHNlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgZWxsaXBzZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZHMgYXJlIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy9ub3JtYWxpemUgdGhlIGNvb3JkcyB0byBhbiBlbGxpcHNlIHdpdGggY2VudGVyIDAsMFxuICAgIHZhciBub3JteCA9ICgoeCAtIHRoaXMueCkgLyB0aGlzLndpZHRoKSxcbiAgICAgICAgbm9ybXkgPSAoKHkgLSB0aGlzLnkpIC8gdGhpcy5oZWlnaHQpO1xuXG4gICAgbm9ybXggKj0gbm9ybXg7XG4gICAgbm9ybXkgKj0gbm9ybXk7XG5cbiAgICByZXR1cm4gKG5vcm14ICsgbm9ybXkgPD0gMSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBlbGxpcHNlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLndpZHRoLCB0aGlzLnkgLSB0aGlzLmhlaWdodCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcbiIsInZhciBQb2ludCA9IHJlcXVpcmUoJy4uL1BvaW50JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBwb2ludHMge1BJWEkuUG9pbnRbXXxudW1iZXJbXXwuLi5QSVhJLlBvaW50fC4uLm51bWJlcn0gVGhpcyBjYW4gYmUgYW4gYXJyYXkgb2YgUG9pbnRzIHRoYXQgZm9ybSB0aGUgcG9seWdvbixcbiAqICAgICAgYSBmbGF0IGFycmF5IG9mIG51bWJlcnMgdGhhdCB3aWxsIGJlIGludGVycHJldGVkIGFzIFt4LHksIHgseSwgLi4uXSwgb3IgdGhlIGFyZ3VtZW50cyBwYXNzZWQgY2FuIGJlXG4gKiAgICAgIGFsbCB0aGUgcG9pbnRzIG9mIHRoZSBwb2x5Z29uIGUuZy4gYG5ldyBQSVhJLlBvbHlnb24obmV3IFBJWEkuUG9pbnQoKSwgbmV3IFBJWEkuUG9pbnQoKSwgLi4uKWAsIG9yIHRoZVxuICogICAgICBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZSBmbGF0IHgseSB2YWx1ZXMgZS5nLiBgbmV3IFBvbHlnb24oeCx5LCB4LHksIHgseSwgLi4uKWAgd2hlcmUgYHhgIGFuZCBgeWAgYXJlXG4gKiAgICAgIE51bWJlcnMuXG4gKi9cbmZ1bmN0aW9uIFBvbHlnb24ocG9pbnRzXylcbntcbiAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBhc3NpZ25tZW50IGRlb3B0XG4gICAgLy8gc2VlIHNlY3Rpb24gMy4xOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICB2YXIgcG9pbnRzID0gcG9pbnRzXztcblxuICAgIC8vaWYgcG9pbnRzIGlzbid0IGFuIGFycmF5LCB1c2UgYXJndW1lbnRzIGFzIHRoZSBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBwb2ludHMubGVuZ3RoOyArK2EpIHtcbiAgICAgICAgICAgIHBvaW50c1thXSA9IGFyZ3VtZW50c1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHRoaXMgaXMgYW4gYXJyYXkgb2YgcG9pbnRzLCBjb252ZXJ0IGl0IHRvIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzXG4gICAgaWYgKHBvaW50c1swXSBpbnN0YW5jZW9mIFBvaW50KVxuICAgIHtcbiAgICAgICAgdmFyIHAgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHAucHVzaChwb2ludHNbaV0ueCwgcG9pbnRzW2ldLnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9pbnRzID0gcDtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB0aGUgcG9pbnRzIG9mIHRoaXMgcG9seWdvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlBPTFk7XG59XG5cblBvbHlnb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9seWdvbjtcbm1vZHVsZS5leHBvcnRzID0gUG9seWdvbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBwb2x5Z29uXG4gKlxuICogQHJldHVybiB7UElYSS5Qb2x5Z29ufSBhIGNvcHkgb2YgdGhlIHBvbHlnb25cbiAqL1xuUG9seWdvbi5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9seWdvbih0aGlzLnBvaW50cy5zbGljZSgpKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIGluc2lkZSA9IGZhbHNlO1xuXG4gICAgLy8gdXNlIHNvbWUgcmF5Y2FzdGluZyB0byB0ZXN0IGhpdHNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svcG9pbnQtaW4tcG9seWdvbi9ibG9iL21hc3Rlci9pbmRleC5qc1xuICAgIHZhciBsZW5ndGggPSB0aGlzLnBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBsZW5ndGggLSAxOyBpIDwgbGVuZ3RoOyBqID0gaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHhpID0gdGhpcy5wb2ludHNbaSAqIDJdLCB5aSA9IHRoaXMucG9pbnRzW2kgKiAyICsgMV0sXG4gICAgICAgICAgICB4aiA9IHRoaXMucG9pbnRzW2ogKiAyXSwgeWogPSB0aGlzLnBvaW50c1tqICogMiArIDFdLFxuICAgICAgICAgICAgaW50ZXJzZWN0ID0gKCh5aSA+IHkpICE9PSAoeWogPiB5KSkgJiYgKHggPCAoeGogLSB4aSkgKiAoeSAtIHlpKSAvICh5aiAtIHlpKSArIHhpKTtcblxuICAgICAgICBpZiAoaW50ZXJzZWN0KVxuICAgICAgICB7XG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc2lkZTtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIHRoZSBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgZGVmaW5lZCBieSBpdHMgcG9zaXRpb24sIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCB3aWR0aCBvZiB0aGlzIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByZWN0YW5nbGVcbiAqL1xuZnVuY3Rpb24gUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJFQ1Q7XG59XG5cblJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZWN0YW5nbGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlY3RhbmdsZTtcblxuLyoqXG4gKiBBIGNvbnN0YW50IGVtcHR5IHJlY3RhbmdsZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuUmVjdGFuZ2xlLkVNUFRZID0gbmV3IFJlY3RhbmdsZSgwLCAwLCAwLCAwKTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgUmVjdGFuZ2xlXG4gKi9cblJlY3RhbmdsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHggPj0gdGhpcy54ICYmIHggPCB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPCB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUm91bmRlZCBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgdGhhdCBoYXMgbmljZSByb3VuZGVkIGNvcm5lcnMsIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0IGFuZCBpdHMgcmFkaXVzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBDb250cm9scyB0aGUgcmFkaXVzIG9mIHRoZSByb3VuZGVkIGNvcm5lcnNcbiAqL1xuZnVuY3Rpb24gUm91bmRlZFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMjBcbiAgICAgKi9cbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCAyMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUlJFQztcbn1cblxuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3VuZGVkUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3VuZGVkUmVjdGFuZ2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHJldHVybiB7UElYSS5Sb3VuZGVkUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJvdW5kZWRSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnJhZGl1cyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDw9IHRoaXMueCArIHRoaXMud2lkdGgpXG4gICAge1xuICAgICAgICBpZiAoeSA+PSB0aGlzLnkgJiYgeSA8PSB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBQYXJ0aWNsZUNvbnRhaW5lciBjbGFzcyBpcyBhIHJlYWxseSBmYXN0IHZlcnNpb24gb2YgdGhlIENvbnRhaW5lciBidWlsdCBzb2xlbHkgZm9yIHNwZWVkLFxuICogc28gdXNlIHdoZW4geW91IG5lZWQgYSBsb3Qgb2Ygc3ByaXRlcyBvciBwYXJ0aWNsZXMuIFRoZSB0cmFkZW9mZiBvZiB0aGUgUGFydGljbGVDb250YWluZXIgaXMgdGhhdCBhZHZhbmNlZFxuICogZnVuY3Rpb25hbGl0eSB3aWxsIG5vdCB3b3JrLiBQYXJ0aWNsZUNvbnRhaW5lciBpbXBsZW1lbnRzIG9ubHkgdGhlIGJhc2ljIG9iamVjdCB0cmFuc2Zvcm0gKHBvc2l0aW9uLCBzY2FsZSwgcm90YXRpb24pLlxuICogQW55IG90aGVyIGZ1bmN0aW9uYWxpdHkgbGlrZSB0aW50aW5nLCBtYXNraW5nLCBldGMgd2lsbCBub3Qgd29yayBvbiBzcHJpdGVzIGluIHRoaXMgYmF0Y2guXG4gKlxuICogSXQncyBleHRyZW1lbHkgZWFzeSB0byB1c2UgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgY29udGFpbmVyID0gbmV3IFBhcnRpY2xlQ29udGFpbmVyKCk7XG4gKlxuICogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSlcbiAqIHtcbiAqICAgICB2YXIgc3ByaXRlID0gbmV3IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcIm15SW1hZ2UucG5nXCIpO1xuICogICAgIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogfVxuICogYGBgXG4gKlxuICogQW5kIGhlcmUgeW91IGhhdmUgYSBodW5kcmVkIHNwcml0ZXMgdGhhdCB3aWxsIGJlIHJlbmRlcmVyIGF0IHRoZSBzcGVlZCBvZiBsaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFttYXhTaXplPTE1MDAwXSB7bnVtYmVyfSBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFydGljbGVzIHRoYXQgY2FuIGJlIHJlbmRlcmVyIGJ5IHRoZSBjb250YWluZXIuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXNdIHtvYmplY3R9IFRoZSBwcm9wZXJ0aWVzIG9mIGNoaWxkcmVuIHRoYXQgc2hvdWxkIGJlIHVwbG9hZGVkIHRvIHRoZSBncHUgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuc2NhbGU9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHNjYWxlIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnBvc2l0aW9uPXRydWVdIHtib29sZWFufSBXaGVuIHRydWUsIHBvc2l0aW9uIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnJvdGF0aW9uPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCByb3RhdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy51dnM9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHV2cyBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5hbHBoYT1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgYWxwaGEgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW2JhdGNoU2l6ZT0xNTAwMF0ge251bWJlcn0gTnVtYmVyIG9mIHBhcnRpY2xlcyBwZXIgYmF0Y2guXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQ29udGFpbmVyKG1heFNpemUsIHByb3BlcnRpZXMsIGJhdGNoU2l6ZSlcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIGJhdGNoU2l6ZSA9IGJhdGNoU2l6ZSB8fCAxNTAwMDsgLy9DT05TVC5TUFJJVEVfQkFUQ0hfU0laRTsgLy8gMjAwMCBpcyBhIG5pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSAvIGRlc2t0b3BcbiAgICBtYXhTaXplID0gbWF4U2l6ZSB8fCAxNTAwMDtcblxuICAgIC8vIE1ha2luZyBzdXJlIHRoZSBiYXRjaCBzaXplIGlzIHZhbGlkXG4gICAgLy8gNjU1MzUgaXMgbWF4IHZlcnRleCBpbmRleCBpbiB0aGUgaW5kZXggYnVmZmVyIChzZWUgUGFydGljbGVSZW5kZXJlcilcbiAgICAvLyBzbyBtYXggbnVtYmVyIG9mIHBhcnRpY2xlcyBpcyA2NTUzNiAvIDQgPSAxNjM4NFxuICAgIHZhciBtYXhCYXRjaFNpemUgPSAxNjM4NDtcbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4QmF0Y2hTaXplKSB7XG4gICAgICAgIGJhdGNoU2l6ZSA9IG1heEJhdGNoU2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4U2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhTaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBwcm9wZXJ0aWVzIHRvIGJlIGR5bmFtaWMgKHRydWUpIC8gc3RhdGljIChmYWxzZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW5bXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4U2l6ZSA9IG1heFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYXRjaFNpemUgPSBiYXRjaFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVDaGlsZHJlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGNhbnZhcyByZW5kZXJlcmluZy4gSWYgdHJ1ZSB0aGVuIHRoZSBlbGVtZW50cyB3aWxsIGJlIHBvc2l0aW9uZWQgYXQgdGhlIG5lYXJlc3QgcGl4ZWwuIFRoaXMgcHJvdmlkZXMgYSBuaWNlIHNwZWVkIGJvb3N0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlO1xuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSB0cnVlO1xuXG4gICAgdGhpcy5zZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xufVxuXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQ29udGFpbmVyO1xuXG4vKipcbiAqIFNldHMgdGhlIHByaXZhdGUgcHJvcGVydGllcyBhcnJheSB0byBkeW5hbWljIC8gc3RhdGljIGJhc2VkIG9uIHRoZSBwYXNzZWQgcHJvcGVydGllcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcHJvcGVydGllcyB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyB0byBiZSB1cGxvYWRlZFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuc2V0UHJvcGVydGllcyA9IGZ1bmN0aW9uKHByb3BlcnRpZXMpXG57XG4gICAgaWYgKCBwcm9wZXJ0aWVzICkge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzBdID0gJ3NjYWxlJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnNjYWxlIDogdGhpcy5fcHJvcGVydGllc1swXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1sxXSA9ICdwb3NpdGlvbicgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5wb3NpdGlvbiA6IHRoaXMuX3Byb3BlcnRpZXNbMV07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMl0gPSAncm90YXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucm90YXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzJdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzNdID0gJ3V2cycgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy51dnMgOiB0aGlzLl9wcm9wZXJ0aWVzWzNdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzRdID0gJ2FscGhhJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLmFscGhhIDogdGhpcy5fcHJvcGVydGllc1s0XTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgLy8gVE9ETyBkb24ndCBuZWVkIHRvIVxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIC8vICBQSVhJLkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtLmNhbGwoIHRoaXMgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGFpbmVyIHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgd2ViZ2wgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlciggcmVuZGVyZXIucGx1Z2lucy5wYXJ0aWNsZSApO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUucmVuZGVyKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgZmxhZyB0aGF0IHN0YXRpYyBkYXRhIHNob3VsZCBiZSB1cGRhdGVkIHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUub25DaGlsZHJlbkNoYW5nZSA9IGZ1bmN0aW9uIChzbWFsbGVzdENoaWxkSW5kZXgpXG57XG4gICAgdmFyIGJ1ZmZlckluZGV4ID0gTWF0aC5mbG9vcihzbWFsbGVzdENoaWxkSW5kZXggLyB0aGlzLl9iYXRjaFNpemUpO1xuICAgIGlmIChidWZmZXJJbmRleCA8IHRoaXMuX2J1ZmZlclRvVXBkYXRlKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gYnVmZmVySW5kZXg7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIGNhbnZhcyByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGlzUm90YXRlZCA9IHRydWU7XG5cbiAgICB2YXIgcG9zaXRpb25YID0gMDtcbiAgICB2YXIgcG9zaXRpb25ZID0gMDtcblxuICAgIHZhciBmaW5hbFdpZHRoID0gMDtcbiAgICB2YXIgZmluYWxIZWlnaHQgPSAwO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICBpZiAoIWNoaWxkLnZpc2libGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZyYW1lID0gY2hpbGQudGV4dHVyZS5mcmFtZTtcblxuICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhICogY2hpbGQuYWxwaGE7XG5cbiAgICAgICAgaWYgKGNoaWxkLnJvdGF0aW9uICUgKE1hdGguUEkgKiAyKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgZmFzdGVzdCAgd2F5IHRvIG9wdGltaXNlISAtIGlmIHJvdGF0aW9uIGlzIDAgdGhlbiB3ZSBjYW4gYXZvaWQgYW55IGtpbmQgb2Ygc2V0VHJhbnNmb3JtIGNhbGxcbiAgICAgICAgICAgIGlmIChpc1JvdGF0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoICogY2hpbGQuc2NhbGUueCkgKyBjaGlsZC5wb3NpdGlvbi54ICArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0ICogY2hpbGQuc2NhbGUueSkgKyBjaGlsZC5wb3NpdGlvbi55ICArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLng7XG4gICAgICAgICAgICBmaW5hbEhlaWdodCA9IGZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnk7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzUm90YXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoaWxkLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICAgICAgdmFyIGNoaWxkVHJhbnNmb3JtID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHggfCAwLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eSB8IDBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvblggPSAoKGNoaWxkLmFuY2hvci54KSAqICgtZnJhbWUud2lkdGgpICsgMC41KTtcbiAgICAgICAgICAgIHBvc2l0aW9uWSA9ICgoY2hpbGQuYW5jaG9yLnkpICogKC1mcmFtZS5oZWlnaHQpICsgMC41KTtcblxuICAgICAgICAgICAgZmluYWxXaWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgIGNoaWxkLnRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgZnJhbWUueCxcbiAgICAgICAgICAgIGZyYW1lLnksXG4gICAgICAgICAgICBmcmFtZS53aWR0aCxcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCxcbiAgICAgICAgICAgIHBvc2l0aW9uWCxcbiAgICAgICAgICAgIHBvc2l0aW9uWSxcbiAgICAgICAgICAgIGZpbmFsV2lkdGgsXG4gICAgICAgICAgICBmaW5hbEhlaWdodFxuICAgICAgICApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUNoaWxkcmVuPWZhbHNlXSB7Ym9vbGVhbn0gaWYgc2V0IHRvIHRydWUsIGFsbCB0aGUgY2hpbGRyZW4gd2lsbCBoYXZlIHRoZWlyIGRlc3Ryb3kgbWV0aG9kIGNhbGxlZCBhcyB3ZWxsXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgaWYgKHRoaXMuX2J1ZmZlcnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLl9idWZmZXJzW2ldLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xufTtcbiIsIlxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZUJ1ZmZlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvUGFydGljbGVCdWZmZXIuamF2YVxuICovXG5cbi8qKlxuICogVGhlIHBhcnRpY2xlIGJ1ZmZlciBtYW5hZ2VzIHRoZSBzdGF0aWMgYW5kIGR5bmFtaWMgYnVmZmVycyBmb3IgYSBwYXJ0aWNsZSBjb250YWluZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gUGFydGljbGVCdWZmZXIoZ2wsIHByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBzaXplKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRTaXplID0gMjtcblxuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYSBzaW5nbGUgdmVydGV4IGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGUgYnVmZmVyIGNhbiBob2xkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gc2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBkeW5hbWljLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIHN0YXRpYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcblxuICAgICAgICBpZihkeW5hbWljUHJvcGVydHlGbGFnc1tpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5keW5hbWljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuZHluYW1pY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW5pdEJ1ZmZlcnMoKTtcblxufVxuXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZUJ1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVCdWZmZXI7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmluaXRCdWZmZXJzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpO1xuICAgIHZhciBwcm9wZXJ0eTtcblxuICAgIHZhciBkeW5hbWljT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG5cbiAgICAgICAgcHJvcGVydHkub2Zmc2V0ID0gZHluYW1pY09mZnNldDtcbiAgICAgICAgZHluYW1pY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLmR5bmFtaWNTdHJpZGUgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5keW5hbWljU3RyaWRlICogNCk7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcblxuXG4gICAgLy8gc3RhdGljIC8vXG4gICAgdmFyIHN0YXRpY09mZnNldCA9IDA7XG4gICAgdGhpcy5zdGF0aWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IHN0YXRpY09mZnNldDtcbiAgICAgICAgc3RhdGljT2Zmc2V0ICs9IHByb3BlcnR5LnNpemU7XG4gICAgICAgIHRoaXMuc3RhdGljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5zdGF0aWNTdHJpZGUgKiA0KTtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNEYXRhLCBnbC5EWU5BTUlDX0RSQVcpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBkeW5hbWljIHByb3BlcnRpZXMuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUudXBsb2FkRHluYW1pYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIHByb3BlcnR5LnVwbG9hZEZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIHRoaXMuZHluYW1pY0RhdGEsIHRoaXMuZHluYW1pY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy5keW5hbWljRGF0YSk7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHN0YXRpYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZFN0YXRpYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLnN0YXRpY0RhdGEsIHRoaXMuc3RhdGljU3RyaWRlLCBwcm9wZXJ0eS5vZmZzZXQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuc3RhdGljRGF0YSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIHRvIHRoZSBHUFVcbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpLCBwcm9wZXJ0eTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuc3RhdGljU3RyaWRlICogNCwgcHJvcGVydHkub2Zmc2V0ICogNCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVCdWZmZXIuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLnN0YXRpY0J1ZmZlcik7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgUGFydGljbGVTaGFkZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlU2hhZGVyJyksXG4gICAgUGFydGljbGVCdWZmZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlQnVmZmVyJyksXG4gICAgbWF0aCAgICAgICAgICAgID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFBhcnRpY2xlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICAvLyBhbmQgbWF4IG51bWJlciBvZiBlbGVtZW50IGluIHRoZSBpbmRleCBidWZmZXIgaXMgMTYzODQgKiA2ID0gOTgzMDRcbiAgICAvLyBDcmVhdGluZyBhIGZ1bGwgaW5kZXggYnVmZmVyLCBvdmVyaGVhZCBpcyA5ODMwNCAqIDIgPSAxOTZLb1xuICAgIHZhciBudW1JbmRpY2VzID0gOTgzMDQ7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KG51bUluZGljZXMpO1xuXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCBudW1JbmRpY2VzOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gbnVsbDtcblxuICAgIHRoaXMudGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xufVxuXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbigncGFydGljbGUnLCBQYXJ0aWNsZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBXaGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gbmV3IFBhcnRpY2xlU2hhZGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlcik7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggaW5kZXgsIHNvIDY1NTM1IC8gNiA9IDEwOTIyLlxuXG4gICAgLy91cGxvYWQgdGhlIGluZGV4IGRhdGFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IFtcbiAgICAgICAgLy8gdmVydGljZXNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbixcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkVmVydGljZXMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBwb3NpdGlvbkRhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFBvc2l0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcm90YXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFSb3RhdGlvbixcbiAgICAgICAgICAgIHNpemU6MSxcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkUm90YXRpb24sXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyB1dnNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFV2cyxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIGFscGhhRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZEFscGhhLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfVxuICAgIF07XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBwYXJ0aWNsZSBiYXRjaC5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gYmluZCB0aGUgbWFpbiB0ZXh0dXJlXG4gICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAvLyBiaW5kIHRoZSBidWZmZXJzXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnNoYWRlcjtcblxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBwYXJ0aWNsZSBjb250YWluZXIgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBjaGlsZHJlbiA9IGNvbnRhaW5lci5jaGlsZHJlbixcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aCxcbiAgICAgICAgbWF4U2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemU7XG5cbiAgICBpZih0b3RhbENoaWxkcmVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIGlmKHRvdGFsQ2hpbGRyZW4gPiBtYXhTaXplKVxuICAgIHtcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IG1heFNpemU7XG4gICAgfVxuXG4gICAgaWYoIWNvbnRhaW5lci5fYnVmZmVycylcbiAgICB7XG4gICAgICAgIGNvbnRhaW5lci5fYnVmZmVycyA9IHRoaXMuZ2VuZXJhdGVCdWZmZXJzKCBjb250YWluZXIgKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXZzIGhhdmUgbm90IHVwZGF0ZWQgdGhlbiBubyBwb2ludCByZW5kZXJpbmcganVzdCB5ZXQhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb250YWluZXIuYmxlbmRNb2RlKTtcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgbSA9ICBjb250YWluZXIud29ybGRUcmFuc2Zvcm0uY29weSggdGhpcy50ZW1wTWF0cml4ICk7XG4gICAgbS5wcmVwZW5kKCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeCApO1xuICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5zaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCBtLnRvQXJyYXkodHJ1ZSkpO1xuICAgIGdsLnVuaWZvcm0xZih0aGlzLnNoYWRlci51bmlmb3Jtcy51QWxwaGEuX2xvY2F0aW9uLCBjb250YWluZXIud29ybGRBbHBoYSk7XG5cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgdGV4dHVyZSBpcyBib3VuZC4uXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gY2hpbGRyZW5bMF0uX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSB0ZXh0dXJlIGhhcyBub3QgdXBkYXRlZCB0aGVuIGxldHMgbm90IHVwbG9hZCBhbnkgc3RhdGljIHByb3BlcnRpZXNcbiAgICAgICAgaWYoIXRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZShiYXNlVGV4dHVyZSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFjb250YWluZXIuX3Byb3BlcnRpZXNbMF0gfHwgIWNvbnRhaW5lci5fcHJvcGVydGllc1szXSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICB9XG5cbiAgICAvLyBub3cgbGV0cyB1cGxvYWQgYW5kIHJlbmRlciB0aGUgYnVmZmVycy4uXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgdG90YWxDaGlsZHJlbjsgaSArPSBiYXRjaFNpemUsIGogKz0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhbW91bnQgPSAoIHRvdGFsQ2hpbGRyZW4gLSBpKTtcbiAgICAgICAgaWYoYW1vdW50ID4gYmF0Y2hTaXplKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbW91bnQgPSBiYXRjaFNpemU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYnVmZmVyID0gY29udGFpbmVyLl9idWZmZXJzW2pdO1xuXG4gICAgICAgIC8vIHdlIGFsd2F5cyB1cGxvYWQgdGhlIGR5bmFtaWNcbiAgICAgICAgYnVmZmVyLnVwbG9hZER5bmFtaWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG5cbiAgICAgICAgLy8gd2Ugb25seSB1cGxvYWQgdGhlIHN0YXRpYyBjb250ZW50IHdoZW4gd2UgaGF2ZSB0byFcbiAgICAgICAgaWYoY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9PT0gailcbiAgICAgICAge1xuICAgICAgICAgICAgYnVmZmVyLnVwbG9hZFN0YXRpYyhjaGlsZHJlbiwgaSwgYW1vdW50KTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSBqICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJpbmQgdGhlIGJ1ZmZlclxuICAgICAgICBidWZmZXIuYmluZCggdGhpcy5zaGFkZXIgKTtcblxuICAgICAgICAgLy8gbm93IGRyYXcgdGhvc2Ugc3Vja2FzIVxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBhbW91bnQgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIG9uZSBwYXJ0aWNsZSBidWZmZXIgZm9yIGVhY2ggY2hpbGQgaW4gdGhlIGNvbnRhaW5lciB3ZSB3YW50IHRvIHJlbmRlciBhbmQgdXBkYXRlcyBpbnRlcm5hbCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7UElYSS5QYXJ0aWNsZUNvbnRhaW5lcn0gVGhlIGNvbnRhaW5lciB0byByZW5kZXIgdXNpbmcgdGhpcyBQYXJ0aWNsZVJlbmRlcmVyXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmdlbmVyYXRlQnVmZmVycyA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgYnVmZmVycyA9IFtdLFxuICAgICAgICBzaXplID0gY29udGFpbmVyLl9tYXhTaXplLFxuICAgICAgICBiYXRjaFNpemUgPSBjb250YWluZXIuX2JhdGNoU2l6ZSxcbiAgICAgICAgZHluYW1pY1Byb3BlcnR5RmxhZ3MgPSBjb250YWluZXIuX3Byb3BlcnRpZXMsXG4gICAgICAgIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBiYXRjaFNpemUpXG4gICAge1xuICAgICAgICBidWZmZXJzLnB1c2gobmV3IFBhcnRpY2xlQnVmZmVyKGdsLCB0aGlzLnByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBiYXRjaFNpemUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVycztcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgdmVydGljaWVzLlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciB2ZXJ0aWNlcyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkVmVydGljZXMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIHZhciBzcHJpdGUsXG4gICAgICAgIHRleHR1cmUsXG4gICAgICAgIHRyaW0sXG4gICAgICAgIHN4LFxuICAgICAgICBzeSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKSB7XG5cbiAgICAgICAgc3ByaXRlID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldO1xuICAgICAgICB0ZXh0dXJlID0gc3ByaXRlLl90ZXh0dXJlO1xuICAgICAgICBzeCA9IHNwcml0ZS5zY2FsZS54O1xuICAgICAgICBzeSA9IHNwcml0ZS5zY2FsZS55O1xuXG4gICAgICAgIGlmICh0ZXh0dXJlLnRyaW0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZCB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG5cbiAgICAgICAgICAgIHcxID0gdHJpbS54IC0gc3ByaXRlLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGgxID0gdHJpbS55IC0gc3ByaXRlLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICBoMCA9IGgxICsgdGV4dHVyZS5jcm9wLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS1zcHJpdGUuYW5jaG9yLngpO1xuICAgICAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC1zcHJpdGUuYW5jaG9yLng7XG5cbiAgICAgICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtc3ByaXRlLmFuY2hvci55KTtcbiAgICAgICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXNwcml0ZS5hbmNob3IueTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gaDEgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IGgwICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHBvc2l0aW9ucyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUG9zaXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVQb3NpdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5wb3NpdGlvbjtcblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciByb3RhdGlvbiB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUm90YXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVSb3RhdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5yb3RhdGlvbjtcblxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVJvdGF0aW9uO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBVdnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFV2cyA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmVVdnMgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uX3RleHR1cmUuX3V2cztcblxuICAgICAgICBpZiAodGV4dHVyZVV2cylcbiAgICAgICAge1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHRleHR1cmVVdnMueDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IHRleHR1cmVVdnMueTA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB0ZXh0dXJlVXZzLngxO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSB0ZXh0dXJlVXZzLnkxO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHRleHR1cmVVdnMueDI7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSB0ZXh0dXJlVXZzLnkyO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHRleHR1cmVVdnMueDM7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSB0ZXh0dXJlVXZzLnkzO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyB5b3Uga25vdyB0aGlzIGNhbiBiZSBlYXNpZXIhXG4gICAgICAgICAgICBhcnJheVtvZmZzZXRdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIGFscGhhIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRBbHBoYSA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICAge1xuICAgICAgICB2YXIgc3ByaXRlQWxwaGEgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uYWxwaGE7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlQWxwaGE7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBQYXJ0aWNsZVJlbmRlcmVyLlxuICpcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIuZ2wpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5nbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgfVxuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG4gICAgdGhpcy50ZW1wTWF0cml4ID0gbnVsbDtcbn07XG4iLCJ2YXIgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1RleHR1cmVTaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVNoYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFRleHR1cmVTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVBvc2l0aW9uQ29vcmQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhU2NhbGU7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgZmxvYXQgYVJvdGF0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgdmVjMiB2ID0gYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICcgICB2LnggPSAoYVZlcnRleFBvc2l0aW9uLngpICogY29zKGFSb3RhdGlvbikgLSAoYVZlcnRleFBvc2l0aW9uLnkpICogc2luKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2LnkgPSAoYVZlcnRleFBvc2l0aW9uLngpICogc2luKGFSb3RhdGlvbikgKyAoYVZlcnRleFBvc2l0aW9uLnkpICogY29zKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2ID0gdiArIGFQb3NpdGlvbkNvb3JkOycsXG5cbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKHYsIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gaGVsbG9cbiAgICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IHVBbHBoYTsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciAqIHVBbHBoYTsnLFxuICAgICAgICAgICAgJyAgaWYgKGNvbG9yLmEgPT0gMC4wKSBkaXNjYXJkOycsXG4gICAgICAgICAgICAnICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB1QWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVBvc2l0aW9uQ29vcmQ6IDAsXG4gICAgICAgICAgIC8vIGFTY2FsZTogICAgICAgICAwLFxuICAgICAgICAgICAgYVJvdGF0aW9uOiAgICAgIDBcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBURU1QIEhBQ0tcblxufVxuXG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmVTaGFkZXIucHJvdG90eXBlKTtcblBhcnRpY2xlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlU2hhZGVyO1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogVGhlIENhbnZhc1JlbmRlcmVyIGRyYXdzIHRoZSBzY2VuZSBhbmQgYWxsIGl0cyBjb250ZW50IG9udG8gYSAyZCBjYW52YXMuIFRoaXMgcmVuZGVyZXIgc2hvdWxkIGJlIHVzZWQgZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgd2ViR0wuXG4gKiBEb24ndCBmb3JnZXQgdG8gYWRkIHRoZSBDYW52YXNSZW5kZXJlci52aWV3IHRvIHlvdXIgRE9NIG9yIHlvdSB3aWxsIG5vdCBzZWUgYW55dGhpbmcgOilcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc3lzdGVtIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSBzeXN0ZW0gdGhpcyByZW5kZXJlciBpcyBmb3IuXG4gKiBAcGFyYW0gW3dpZHRoPTgwMF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9NjAwXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBdIHtudW1iZXJ9IFRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSByZW5kZXJlZCBhcmVhIChzaG93biBpZiBub3QgdHJhbnNwYXJlbnQpLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFN5c3RlbVJlbmRlcmVyKHN5c3RlbSwgd2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHV0aWxzLnNheUhlbGxvKHN5c3RlbSk7XG5cbiAgICAvLyBwcmVwYXJlIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zW2ldID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zW2ldID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OU1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBvcHRpb25zID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5SRU5ERVJFUl9UWVBFLlVOS05PV05cbiAgICAgKiBAc2VlIFBJWEkuUkVOREVSRVJfVFlQRVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuVU5LTk9XTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA4MDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgODAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA2MDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHRvXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLnZpZXcgPSBvcHRpb25zLnZpZXcgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gb3B0aW9ucy5yZXNvbHV0aW9uO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy50cmFuc3BhcmVudCA9IG9wdGlvbnMudHJhbnNwYXJlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByZW5kZXIgdmlldyBzaG91bGQgYmUgcmVzaXplZCBhdXRvbWF0aWNhbGx5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IG9wdGlvbnMuYXV0b1Jlc2l6ZSB8fCBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrcyB0aGUgYmxlbmQgbW9kZXMgdXNlZnVsIGZvciB0aGlzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbWl4ZWQ+fVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIHByZXNlcnZlRHJhd2luZ0J1ZmZlciBmbGFnIGFmZmVjdHMgd2hldGhlciBvciBub3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyByZXRhaW5lZCBhZnRlciByZW5kZXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvciBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gICAgICogSWYgdGhlIHNjZW5lIGlzIE5PVCB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGEgY2FudmFzIHNpemVkIGZpbGxSZWN0IG9wZXJhdGlvbiBldmVyeSBmcmFtZSB0byBzZXQgdGhlIGNhbnZhcyBiYWNrZ3JvdW5kIGNvbG9yLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGNsZWFyUmVjdCB0byBjbGVhciB0aGUgY2FudmFzIGV2ZXJ5IGZyYW1lLlxuICAgICAqIERpc2FibGUgdGhpcyBieSBzZXR0aW5nIHRoaXMgdG8gZmFsc2UuIEZvciBleGFtcGxlIGlmIHlvdXIgZ2FtZSBoYXMgYSBjYW52YXMgZmlsbGluZyBiYWNrZ3JvdW5kIGltYWdlIHlvdSBvZnRlbiBkb24ndCBuZWVkIHRoaXMgc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdFxuICAgICAqL1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyO1xuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gICAgICogSGFuZHkgZm9yIGNyaXNwIHBpeGVsIGFydCBhbmQgc3BlZWQgb24gbGVnYWN5IGRldmljZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSBvcHRpb25zLnJvdW5kUGl4ZWxzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSAweDAwMDAwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGFuIFtSLCBHLCBCXSBhcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gJyMwMDAwMDAnO1xuXG4gICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBvcHRpb25zLmJhY2tncm91bmRDb2xvciB8fCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3I7IC8vIHJ1biBiZyBjb2xvciBzZXR0ZXJcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB0cmFuc2Zvcm06e3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpfSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCByb290IG9iamVjdCB0aGF0IHRoZSByZW5kZXJlciB0cmllZCB0byByZW5kZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbn1cblxuLy8gY29uc3RydWN0b3JcblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeXN0ZW1SZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3lzdGVtUmVuZGVyZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZpbGwgaWYgbm90IHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3lzdGVtUmVuZGVyZXIjXG4gICAgICovXG4gICAgYmFja2dyb3VuZENvbG9yOlxuICAgIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9IHV0aWxzLmhleDJzdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHV0aWxzLmhleDJyZ2IodmFsLCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB2aWV3IHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy52aWV3LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0aGlzLnZpZXcuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5hdXRvUmVzaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgYW5kIG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgQ2FudmFzIERPTSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldykge1xuICAgIGlmIChyZW1vdmVWaWV3ICYmIHRoaXMudmlldy5wYXJlbnROb2RlKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy52aWV3KTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICB0aGlzLnZpZXcgPSBudWxsO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMDtcblxuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gbnVsbDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSBudWxsO1xufTtcbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgQ2FudmFzTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ0NhbnZhcycsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5DQU5WQVM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy52aWV3LmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogdGhpcy50cmFuc3BhcmVudCB9KTtcblxuICAgIC8qKlxuICAgICAqIEJvb2xlYW4gZmxhZyBjb250cm9sbGluZyBjYW52YXMgcmVmcmVzaC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIGEgQ2FudmFzTWFza01hbmFnZXIsIGhhbmRsZXMgbWFza2luZyB3aGVuIHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc01hc2tNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBuZXcgQ2FudmFzTWFza01hbmFnZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgcHJvcGVydHkgdXNlZCB0byBzZXQgdGhlIGNhbnZhcyBzbW9vdGhpbmcgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdpbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnd2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21vekltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnb0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21zSW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIHRoaXMuX21hcEJsZW5kTW9kZXMoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge1xuICAgICAgICB3b3JsZFRyYW5zZm9ybTogbmV3IG1hdGguTWF0cml4KCksXG4gICAgICAgIHdvcmxkQWxwaGE6IDFcbiAgICB9O1xuXG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihDYW52YXNSZW5kZXJlcik7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIHRoaXMgY2FudmFzIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IG9iamVjdC5wYXJlbnQ7XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBvYmplY3Q7XG5cbiAgICBvYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgb2JqZWN0LnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIHRoaXMuY29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF07XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMgJiYgdGhpcy52aWV3LnNjcmVlbmNhbnZhcylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGVhckJlZm9yZVJlbmRlcilcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy53aWR0aCAsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChvYmplY3QsIHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGlzLmVtaXQoJ3Bvc3RyZW5kZXInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpXG57XG4gICAgdGhpcy5kZXN0cm95UGx1Z2lucygpO1xuXG4gICAgLy8gY2FsbCB0aGUgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLnJlZnJlc2ggPSB0cnVlO1xuXG4gICAgdGhpcy5tYXNrTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG5cbiAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KVxue1xuICAgIHZhciB0ZW1wQ29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJDYW52YXModGhpcyk7XG4gICAgdGhpcy5jb250ZXh0ID0gdGVtcENvbnRleHQ7XG59O1xuXG4vKipcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXIjcmVzaXplXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAodywgaClcbntcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcywgdywgaCk7XG5cbiAgICAvL3Jlc2V0IHRoZSBzY2FsZSBtb2RlLi4gb2RkbHkgdGhpcyBzZWVtcyB0byBiZSByZXNldCB3aGVuIHRoZSBjYW52YXMgaXMgcmVzaXplZC5cbiAgICAvL3N1cmVseSBhIGJyb3dzZXIgYnVnPz8gTGV0IHBpeGkgZml4IHRoYXQgZm9yIHlvdS4uXG4gICAgaWYodGhpcy5zbW9vdGhQcm9wZXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dFt0aGlzLnNtb290aFByb3BlcnR5XSA9IChDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBNYXBzIFBpeGkgYmxlbmQgbW9kZXMgdG8gY2FudmFzIGJsZW5kIG1vZGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fbWFwQmxlbmRNb2RlcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmJsZW5kTW9kZXMpXG4gICAge1xuICAgICAgICB0aGlzLmJsZW5kTW9kZXMgPSB7fTtcblxuICAgICAgICBpZiAodXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdtdWx0aXBseSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc2NyZWVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdvdmVybGF5JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdkYXJrZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ2xpZ2h0ZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ2NvbG9yLWRvZGdlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdjb2xvci1idXJuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IQVJEX0xJR0hUXSAgICA9ICdoYXJkLWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb2Z0LWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdkaWZmZXJlbmNlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5FWENMVVNJT05dICAgICA9ICdleGNsdXNpb24nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ2h1ZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc2F0dXJhdGUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ2NvbG9yJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdsdW1pbm9zaXR5JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb29sIG5ldyBibGVuZCBtb2RlcyBpbiBjYW52YXMgJ2NvdWdoJyBpZSAnY291Z2gnXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TQVRVUkFUSU9OXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBjYW52YXNcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKi9cbmZ1bmN0aW9uIENhbnZhc0J1ZmZlcih3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBDYW52YXMgb2JqZWN0IHRoYXQgYmVsb25ncyB0byB0aGlzIENhbnZhc0J1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBBIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHdvLWRpbWVuc2lvbmFsIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn1cblxuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc0J1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzQnVmZmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYW52YXNCdWZmZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB2YWw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyBidWZmZXIgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNhbnZhc0J1ZmZlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENsZWFycyB0aGUgY2FudmFzIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIENhbnZhc0J1ZmZlciBjbGFzcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgY2FudmFzIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBjYW52YXMuXG4gKlxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlciB0byBkcmF3IHRoZSBwcmltaXRpdmUgZ3JhcGhpY3MgZGF0YS5cbiAqIEBzdGF0aWNcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xudmFyIENhbnZhc0dyYXBoaWNzID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0dyYXBoaWNzO1xuXG4vKlxuICogUmVuZGVycyBhIEdyYXBoaWNzIG9iamVjdCB0byBhIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBhY3R1YWwgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIDJkIGRyYXdpbmcgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIHdvcmxkQWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljc1RpbnQoZ3JhcGhpY3MpO1xuICAgICAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuX2ZpbGxUaW50O1xuICAgICAgICB2YXIgbGluZUNvbG9yID0gZGF0YS5fbGluZVRpbnQ7XG5cbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRPRE8gLSBuZWVkIHRvIGJlIFVuZGVmaW5lZCFcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsMCwyKk1hdGguUEkpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcblxuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJ4ID0gc2hhcGUueDtcbiAgICAgICAgICAgIHZhciByeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBzaGFwZS53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgcmFkaXVzID0gc2hhcGUucmFkaXVzO1xuXG4gICAgICAgICAgICB2YXIgbWF4UmFkaXVzID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyIHwgMDtcbiAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1cyA+IG1heFJhZGl1cyA/IG1heFJhZGl1cyA6IHJhZGl1cztcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGxDb2xvciB8fCBkYXRhLmZpbGxDb2xvciA9PT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3MgbWFza1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBtYXNrXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY29udGV4dCAyZCBtZXRob2Qgb2YgdGhlIGNhbnZhc1xuICovXG5DYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIGxlbiA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG5cbiAgICBpZiAobGVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludCBhcmUgdGhlIHNhbWUgY2xvc2UgdGhlIHBhdGggLSBtdWNoIG5lYXRlciA6KVxuICAgICAgICAgICAgaWYgKHBvaW50c1swXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gJiYgcG9pbnRzWzFdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5yZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuXG4gICAgICAgICAgICAvLyBlbGxpcHNlIGNvZGUgdGFrZW4gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG5cbiAgICAgICAgICAgIHZhciB3ID0gc2hhcGUud2lkdGggKiAyO1xuICAgICAgICAgICAgdmFyIGggPSBzaGFwZS5oZWlnaHQgKiAyO1xuXG4gICAgICAgICAgICB2YXIgeCA9IHNoYXBlLnggLSB3LzI7XG4gICAgICAgICAgICB2YXIgeSA9IHNoYXBlLnkgLSBoLzI7XG5cbiAgICAgICAgICAgIHZhciBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICAgICAgICAgICAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgIHhlID0geCArIHcsICAgICAgICAgICAvLyB4LWVuZFxuICAgICAgICAgICAgICAgIHllID0geSArIGgsICAgICAgICAgICAvLyB5LWVuZFxuICAgICAgICAgICAgICAgIHhtID0geCArIHcgLyAyLCAgICAgICAvLyB4LW1pZGRsZVxuICAgICAgICAgICAgICAgIHltID0geSArIGggLyAyOyAgICAgICAvLyB5LW1pZGRsZVxuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhlLCB5bSArIG95LCB4bSArIG94LCB5ZSwgeG0sIHllKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdGludCBvZiBhIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB0aGF0IHdpbGwgaGF2ZSBpdHMgdGludCB1cGRhdGVkXG4gKlxuICovXG5DYW52YXNHcmFwaGljcy51cGRhdGVHcmFwaGljc1RpbnQgPSBmdW5jdGlvbiAoZ3JhcGhpY3MpXG57XG4gICAgaWYgKGdyYXBoaWNzLnRpbnQgPT09IDB4RkZGRkZGICYmIGdyYXBoaWNzLl9wcmV2VGludCA9PT0gZ3JhcGhpY3MudGludClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGhpY3MuX3ByZXZUaW50ID0gZ3JhcGhpY3MudGludDtcblxuICAgIHZhciB0aW50UiA9IChncmFwaGljcy50aW50ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIHRpbnRHID0gKGdyYXBoaWNzLnRpbnQgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50QiA9IChncmFwaGljcy50aW50ICYgMHhGRikvIDI1NTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuZmlsbENvbG9yIHwgMDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEubGluZUNvbG9yIHwgMDtcblxuICAgICAgICAvKlxuICAgICAgICB2YXIgY29sb3JSID0gKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JHID0gKGZpbGxDb2xvciA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIHZhciBjb2xvckIgPSAoZmlsbENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBmaWxsQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcblxuICAgICAgICBjb2xvclIgPSAobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIGNvbG9yRyA9IChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckIgPSAobGluZUNvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBsaW5lQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcbiAgICAgICAgKi9cblxuICAgICAgICAvLyBzdXBlciBpbmxpbmUgY29zIGltIGFuIG9wdGltaXphdGlvbiBOQVpJIDopXG4gICAgICAgIGRhdGEuX2ZpbGxUaW50ID0gKCgoZmlsbENvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChmaWxsQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG4gICAgICAgIGRhdGEuX2xpbmVUaW50ID0gKCgobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChsaW5lQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG5cbiAgICB9XG59O1xuXG4iLCJ2YXIgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuL0NhbnZhc0dyYXBoaWNzJyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgdG8gaGFuZGxlIG1hc2tpbmcuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDYW52YXNNYXNrTWFuYWdlcigpXG57fVxuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzTWFza01hbmFnZXI7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgYWRkcyBpdCB0byB0aGUgY3VycmVudCBzdGFjayBvZiBtYXNrcy5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge29iamVjdH0gdGhlIG1hc2tEYXRhIHRoYXQgd2lsbCBiZSBwdXNoZWRcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhLCByZW5kZXJlcilcbntcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2F2ZSgpO1xuXG4gICAgdmFyIGNhY2hlQWxwaGEgPSBtYXNrRGF0YS5hbHBoYTtcbiAgICB2YXIgdHJhbnNmb3JtID0gbWFza0RhdGEud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICAvL1RPRE8gc3Vwb3J0IHNwcml0ZSBhbHBoYSBtYXNrcz8/XG4gICAgLy9sb3RzIG9mIGVmZm9ydCByZXF1aXJlZC4gSWYgZGVtYW5kIGlzIGdyZWF0IGVub3VnaC4uXG4gICAgaWYoIW1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sobWFza0RhdGEsIHJlbmRlcmVyLmNvbnRleHQpO1xuICAgICAgICByZW5kZXJlci5jb250ZXh0LmNsaXAoKTtcbiAgICB9XG5cbiAgICBtYXNrRGF0YS53b3JsZEFscGhhID0gY2FjaGVBbHBoYTtcbn07XG5cbi8qKlxuICogUmVzdG9yZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlIHRoZSBtYXNrIHdhcyBhcHBsaWVkLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIFNwcml0ZS9UZXh0dXJlIHRpbnRpbmcuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNUaW50ZXIgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzVGludGVyO1xuXG4vKipcbiAqIEJhc2ljYWxseSB0aGlzIG1ldGhvZCBqdXN0IG5lZWRzIGEgc3ByaXRlIGFuZCBhIGNvbG9yIGFuZCB0aW50cyB0aGUgc3ByaXRlIHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIHRpbnRlZCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUgPSBmdW5jdGlvbiAoc3ByaXRlLCBjb2xvcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHNwcml0ZS50ZXh0dXJlO1xuXG4gICAgY29sb3IgPSBDYW52YXNUaW50ZXIucm91bmRDb2xvcihjb2xvcik7XG5cbiAgICB2YXIgc3RyaW5nQ29sb3IgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG5cbiAgICB0ZXh0dXJlLnRpbnRDYWNoZSA9IHRleHR1cmUudGludENhY2hlIHx8IHt9O1xuXG4gICAgaWYgKHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl07XG4gICAgfVxuXG4gICAgIC8vIGNsb25lIHRleHR1cmUuLlxuICAgIHZhciBjYW52YXMgPSBDYW52YXNUaW50ZXIuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLy9DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCh0ZXh0dXJlLCBzdHJpbmdDb2xvciwgY2FudmFzKTtcbiAgICBDYW52YXNUaW50ZXIudGludE1ldGhvZCh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKTtcblxuICAgIGlmIChDYW52YXNUaW50ZXIuY29udmVydFRpbnRUb0ltYWdlKVxuICAgIHtcbiAgICAgICAgLy8gaXMgdGhpcyBiZXR0ZXI/XG4gICAgICAgIHZhciB0aW50SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgdGludEltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcblxuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSB0aW50SW1hZ2U7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSA9IGNhbnZhcztcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCBjb252ZXJ0aW5nIHRoZSB0ZXh0dXJlIHRvIGFuIGltYWdlIHRoZW4gd2UgbmVlZCB0byBsb3NlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhc1xuICAgICAgICBDYW52YXNUaW50ZXIuY2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ211bHRpcGx5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgPSBmdW5jdGlvbiAodGV4dHVyZSwgY29sb3IsIGNhbnZhcylcbntcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgIHZhciBjcm9wID0gdGV4dHVyZS5jcm9wLmNsb25lKCk7XG4gICAgY3JvcC54ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC55ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC53aWR0aCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AuaGVpZ2h0ICo9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXMud2lkdGggPSBjcm9wLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wLmhlaWdodDtcblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tYXRvcCc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ292ZXJsYXknIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhPdmVybGF5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgY3JvcC54LFxuICAgICAgICBjcm9wLnksXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodFxuICAgICk7XG5cbiAgICAvLyBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5Jztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgcGl4ZWwgcGVyIHBpeGVsLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuICAgIHZhciByID0gcmdiVmFsdWVzWzBdLCBnID0gcmdiVmFsdWVzWzFdLCBiID0gcmdiVmFsdWVzWzJdO1xuXG4gICAgdmFyIHBpeGVsRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIHZhciBwaXhlbHMgPSBwaXhlbERhdGEuZGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGl4ZWxzLmxlbmd0aDsgaSArPSA0KVxuICAgIHtcbiAgICAgICAgcGl4ZWxzW2krMF0gKj0gcjtcbiAgICAgICAgcGl4ZWxzW2krMV0gKj0gZztcbiAgICAgICAgcGl4ZWxzW2krMl0gKj0gYjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnB1dEltYWdlRGF0YShwaXhlbERhdGEsIDAsIDApO1xufTtcblxuLyoqXG4gKiBSb3VuZHMgdGhlIHNwZWNpZmllZCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gcm91bmQsIHNob3VsZCBiZSBhIGhleCBjb2xvclxuICovXG5DYW52YXNUaW50ZXIucm91bmRDb2xvciA9IGZ1bmN0aW9uIChjb2xvcilcbntcbiAgICB2YXIgc3RlcCA9IENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuXG4gICAgcmdiVmFsdWVzWzBdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzBdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMV0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMV0gLyBzdGVwKSAqIHN0ZXApO1xuICAgIHJnYlZhbHVlc1syXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1syXSAvIHN0ZXApICogc3RlcCk7XG5cbiAgICByZXR1cm4gdXRpbHMucmdiMmhleChyZ2JWYWx1ZXMpO1xufTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygc3RlcHMgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgY2FwIHdoZW4gcm91bmRpbmcgY29sb3JzLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhY2hlU3RlcHNQZXJDb2xvckNoYW5uZWwgPSA4O1xuXG4vKipcbiAqIFRpbnQgY2FjaGUgYm9vbGVhbiBmbGFnLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSA9IGZhbHNlO1xuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkLCBjb25zZXF1ZW50bHkgdGhlIGFiaWxpdHkgdG8gdGludCB1c2luZyB0aGUgbXVsdGlwbHkgbWV0aG9kLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID0gdXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpO1xuXG4vKipcbiAqIFRoZSB0aW50aW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKi9cbkNhbnZhc1RpbnRlci50aW50TWV0aG9kID0gQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID8gQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgOiAgQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWw7XG4iLCJ2YXIgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuXHR1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgVGV4dHVyZU1hbmFnZXIgPSBmdW5jdGlvbihnbClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIHRyYWNrIHRleHR1cmVzIGluIHRoZSByZW5kZXJlciBzbyB3ZSBjYW4gbm8gbG9uZ2VyIGxpc3RlbiB0byB0aGVtIG9uIGRlc3RydWN0aW9uLlxuXHR0aGlzLl9tYW5hZ2VkVGV4dHVyZXMgPSBbXTtcbiAgICB0aGlzLmdsVGV4dHVyZXMgPSB7fTtcblxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmdldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cbi8qKlxuICogVXBkYXRlcyBhbmQvb3IgQ3JlYXRlcyBhIFdlYkdMIHRleHR1cmUgZm9yIHRoZSByZW5kZXJlcidzIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB1cGRhdGVcbiAqL1xuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG5cdGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXS8vdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG5cbiAgICBpZiAoIWdsVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGdsVGV4dHVyZSA9IG5ldyBHTFRleHR1cmUoZ2wpO1xuICAgICAgICBnbFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHRydWVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbFRleHR1cmU7XG5cbiAgICAgICAvLyB0aGlzLmdsVGV4dHVyZXNbdGV4dHVyZS51aWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgIHRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub24oJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xuICAgIH1cblxuICAgIGdsVGV4dHVyZS51cGxvYWQodGV4dHVyZS5zb3VyY2UpO1xuICAgIFxuICAgIC8vVE9ETyBjaGVjayBpcyBwb3dlciBvZiB0d28uLlxuICAgIGdsVGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuXG4gICAgLy8gVE9ETyBjaGVjayBmb3Igc2NhbGluZyB0eXBlXG4gICAgZ2xUZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKTtcblxuICAgIHJldHVybiAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG59XG5cbi8qKlxuICogRGVsZXRlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byBkZXN0cm95XG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUsIF9za2lwUmVtb3ZlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0uZGVzdHJveSgpO1xuICAgICAgICB0ZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGVUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcblxuXG4gICAgICAgIGRlbGV0ZSB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdO1xuXG4gICAgICAgIGlmICghX3NraXBSZW1vdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzLmluZGV4T2YodGV4dHVyZSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLl9tYW5hZ2VkVGV4dHVyZXMsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24oKVxue1xuXHQvLyBlbXB0eSBhbGwgdGhlIG9sZCBnbCB0ZXh0dXJlcyBhcyB0aGV5IGFyZSB1c2VsZXNzIG5vd1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIGlmICh0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgLy8gZGVzdHJveSBtYW5hZ2VkIHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgdGhpcy5kZXN0cm95VGV4dHVyZSh0ZXh0dXJlLCB0cnVlKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFuYWdlZFRleHR1cmVzID0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlTWFuYWdlcjtcblxuIiwidmFyIFN5c3RlbVJlbmRlcmVyID0gcmVxdWlyZSgnLi4vU3lzdGVtUmVuZGVyZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL01hc2tNYW5hZ2VyJyksXG4gICAgU3RlbmNpbE1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyJyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIEJsZW5kTW9kZU1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIEZYQUFGaWx0ZXIgPSByZXF1aXJlKCcuL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi9UZXh0dXJlTWFuYWdlcicpLFxuICAgIGNyZWF0ZUNvbnRleHQgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5jcmVhdGVDb250ZXh0LFxuICAgIG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aSA9IHJlcXVpcmUoJy4vdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpJyksXG4gICAgbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgV2ViR0xSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgd2ViR0wgZW5hYmxlZCBjYW52YXMuIFRoaXMgcmVuZGVyZXJcbiAqIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wuIFRoaXMgUmVuZGVyIHdvcmtzIGJ5IGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgd2ViR0xCYXRjaHMuXG4gKiBTbyBubyBuZWVkIGZvciBTcHJpdGUgQmF0Y2hlcyBvciBTcHJpdGUgQ2xvdWRzLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgdmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD0wXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD0wXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcy4gSWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseSB0aGVuIEZYQUEgYW50aWFsaWFzaW5nIGlzIHVzZWRcbiAqIEBwYXJhbSBbb3B0aW9ucy5mb3JjZUZYQUE9ZmFsc2VdIHtib29sZWFufSBmb3JjZXMgRlhBQSBhbnRpYWxpYXNpbmcgdG8gYmUgdXNlZCBvdmVyIG5hdGl2ZS4gRlhBQSBpcyBmYXN0ZXIsIGJ1dCBtYXkgbm90IGFsd2F5cyBsb29rIGFzIGdyZWF0XG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLiBJZiB5b3Ugd2lzaCB0byBzZXQgdGhpcyB0byBmYWxzZSwgeW91ICptdXN0KiBzZXQgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHRvIGB0cnVlYC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWZcbiAqICAgICAgeW91IG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHQuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgU3lzdGVtUmVuZGVyZXIuY2FsbCh0aGlzLCAnV2ViR0wnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgcmVuZGVyZXIgYXMgYSBzdGFuZGFyZGlzZWQgY29uc3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0vL1xuICAgICAqXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQgPSB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHBhc3NlZCBpbiB0byBjcmVhdGUgYSBuZXcgd2ViZ2wgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0ge1xuICAgICAgICBhbHBoYTogdGhpcy50cmFuc3BhcmVudCxcbiAgICAgICAgYW50aWFsaWFzOiBvcHRpb25zLmFudGlhbGlhcyxcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnRyYW5zcGFyZW50ICYmIHRoaXMudHJhbnNwYXJlbnQgIT09ICdub3RNdWx0aXBsaWVkJyxcbiAgICAgICAgc3RlbmNpbDogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgIH07XG5cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhWzNdID0gdGhpcy50cmFuc3BhcmVudCA/IDAgOiAxO1xuXG4gICAgLyoqXG4gICAgICogRGVhbHMgd2l0aCBtYW5hZ2luZyB0aGUgc2hhZGVyIHByb2dyYW1zIGFuZCB0aGVpciBhdHRyaWJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG5ldyBTaGFkZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWFza3MgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IE1hc2tNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIgPSBuZXcgU3RlbmNpbE1hbmFnZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5GaWx0ZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgYmxlbmRNb2Rlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CbGVuZE1vZGVNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlciA9IG5ldyBCbGVuZE1vZGVNYW5hZ2VyKHRoaXMpO1xuXG4gICAgXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgT2JqZWN0UmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk9iamVjdFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbmV3IE9iamVjdFJlbmRlcmVyKHRoaXMpO1xuXG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBzbyBpdCBpcyByZWFkeSBmb3IgdGhlIG1hbmFnZXJzLlxuICAgIHRoaXMuZ2wgPSBjcmVhdGVDb250ZXh0KHRoaXMudmlldywgdGhpcy5fY29udGV4dE9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcblxuICAgIC8vIG1hcCBzb21lIHdlYkdMIGJsZW5kIGFuZCBkcmF3bW9kZXMuLlxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aShnbCk7XG4gICAgdGhpcy5kcmF3TW9kZXMgPSBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbClcblxuICAgIHRoaXMuX2FjdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldH1cbiAgICAgKi9cbiAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihXZWJHTFJlbmRlcmVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBXZWJHTCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuX2luaXRDb250ZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgLy8gY3JlYXRlIGEgdGV4dHVyZSBtYW5hZ2VyLi4uXG4gICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG5ldyBUZXh0dXJlTWFuYWdlcihnbCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIGRlZmF1bHQgcGl4aSBzZXR0aW5ncy4uXG4gICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcblxuXG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG51bGwsIHRoaXMucmVzb2x1dGlvbiwgdHJ1ZSk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LmNsZWFyQ29sb3IgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhO1xuICAgIFxuICAgIHRoaXMuYmluZFJlbmRlclRhcmdldCh0aGlzLnJvb3RSZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy5lbWl0KCdjb250ZXh0JywgZ2wpO1xuXG4gICAgLy8gc2V0dXAgdGhlIHdpZHRoL2hlaWdodCBwcm9wZXJ0aWVzIGFuZCBnbCB2aWV3cG9ydFxuICAgIHRoaXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsgICAgXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBpdHMgd2ViR0wgdmlld1xuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gdGhlIG9iamVjdCB0byBiZSByZW5kZXJlZFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdClcbntcbiAgICB0aGlzLmVtaXQoJ3ByZXJlbmRlcicpO1xuXG4gICAgLy8gbm8gcG9pbnQgcmVuZGVyaW5nIGlmIG91ciBjb250ZXh0IGhhcyBiZWVuIGJsb3duIHVwIVxuICAgIGlmICh0aGlzLmdsLmlzQ29udGV4dExvc3QoKSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBkaXNwbGF5T2JqZWN0O1xuXG4gICAgdmFyIGNhY2hlUGFyZW50ID0gZGlzcGxheU9iamVjdC5wYXJlbnQ7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgZGlzcGxheU9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICBkaXNwbGF5T2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIHRoaXMucm9vdFJlbmRlclRhcmdldCwgdGhpcy5jbGVhckJlZm9yZVJlbmRlcik7Ly90aGlzLnByb2plY3Rpb24pO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBEaXNwbGF5IE9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSBUaGUgcmVuZGVyIHRhcmdldCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgZGlzcGxheSBvYmplY3RcbiAqXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcmVuZGVyVGFyZ2V0LCBjbGVhcikvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblxuICAgIGlmKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIGZpbHRlciBtYW5hZ2VyXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnNldEZpbHRlclN0YWNrKCByZW5kZXJUYXJnZXQuZmlsdGVyU3RhY2sgKTtcblxuICAgIC8vIHJlbmRlciB0aGUgc2NlbmUhXG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJXZWJHTCh0aGlzKTtcblxuICAgIC8vIGZpbmlzaCB0aGUgY3VycmVudCByZW5kZXJlci4uXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXJlciB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSBvYmplY3RSZW5kZXJlciB7UElYSS5PYmplY3RSZW5kZXJlcn0gVGhlIG9iamVjdCByZW5kZXJlciB0byB1c2UuXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldE9iamVjdFJlbmRlcmVyID0gZnVuY3Rpb24gKG9iamVjdFJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRSZW5kZXJlciA9PT0gb2JqZWN0UmVuZGVyZXIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RvcCgpO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gb2JqZWN0UmVuZGVyZXI7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgd2ViR0wgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHdlYkdMIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHdlYkdMIHZpZXdcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSB0aGlzLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRvIHRoZSBvbmUgZ2l2ZW4gaW4gcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9IHRoZSBuZXcgcmVuZGVyIHRhcmdldFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5iaW5kUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICBpZihyZW5kZXJUYXJnZXQgIT09IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBpZih0aGlzLl9hY3RpdmVTaGFkZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gcmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuc2V0TWFza1N0YWNrKCByZW5kZXJUYXJnZXQuc3RlbmNpbE1hc2tTdGFjayApO1xuICAgIH1cbn1cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFNoYWRlciA9IGZ1bmN0aW9uIChzaGFkZXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgLy9UT0RPIGNhY2hlXG4gICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyICE9PSBzaGFkZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBzaGFkZXI7XG4gICAgICAgIHNoYWRlci5iaW5kKCk7XG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB9XG59XG5cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgbG9jYXRpb24pXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vVE9ETyB0ZXN0IHBlcmYgb2YgY2FjaGU/XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCAwO1xuXG4gICAgaWYodGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uICE9PSBsb2NhdGlvbikvL1xuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uID0gbG9jYXRpb25cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uICk7XG4gICAgfVxuXG4gICAgLy9UT0RPIC0gY2FuIHdlIGNhY2hlIHRoaXMgdGV4dHVyZSB0b28/XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7ICAgICAgXG4gICAgXG4gICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIGJpbmQgdGhlIHRleHR1cmUuLlxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXS5iaW5kKCk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogSGFuZGxlcyBhIGxvc3Qgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRMb3N0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgYSByZXN0b3JlZCB3ZWJnbCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9pbml0Q29udGV4dCgpO1xuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIucmVtb3ZlQWxsKCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciAoZXZlbnQgbGlzdGVuZXJzLCBzcHJpdGViYXRjaCwgZXRjLi4uKVxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIHJlbW92ZSBsaXN0ZW5lcnNcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuaGFuZGxlQ29udGV4dExvc3QpO1xuICAgIHRoaXMudmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkKTtcblxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIuZGVzdHJveUFsbCgpO1xuXG4gICAgLy8gY2FsbCBiYXNlIGRlc3Ryb3lcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHJlbW92ZVZpZXcpO1xuXG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgLy8gZGVzdHJveSB0aGUgbWFuYWdlcnNcbiAgICB0aGlzLnNoYWRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSBudWxsO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0gbnVsbDtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICB0aGlzLmdsID0gbnVsbDtcbn07XG5cbiIsInZhciBEZWZhdWx0U2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBQSVhJIGZpbHRlci4gQ3VycmVudGx5IG9ubHkgV2ViR0wgc3VwcG9ydHMgZmlsdGVycy5cbiAqIElmIHlvdSB3YW50IHRvIG1ha2UgYSBjdXN0b20gZmlsdGVyIHRoaXMgc2hvdWxkIGJlIHlvdXIgYmFzZSBjbGFzcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdmVydGV4U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIGZyYWdtZW50U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlIGFzIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gdW5pZm9ybXMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuaWZvcm1zIGZvciB0aGlzIGZpbHRlci5cbiAqL1xuZnVuY3Rpb24gQWJzdHJhY3RGaWx0ZXIodmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMpXG57XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBzaGFkZXJzXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVycyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4dHJhIHBhZGRpbmcgdGhhdCB0aGUgZmlsdGVyIG1pZ2h0IG5lZWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmlmb3JtcyBhcyBhbiBvYmplY3RcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29kZSBvZiB0aGUgdmVydGV4IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIGZyYW1lbnQgc2hhZGVyXG4gICAgICogQG1lbWJlciB7c3RyaW5nW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICAvL1RPRE8gYSByZW1pbmRlciAtIHdvdWxkIGJlIGNvb2wgdG8gaGF2ZSBsb3dlciByZXMgZmlsdGVycyBhcyB0aGlzIHdvdWxkIGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlLlxuXG4gICAgLy90eXBlb2YgZnJhZ21lbnRTcmMgPT09ICdzdHJpbmcnID8gZnJhZ21lbnRTcmMuc3BsaXQoJycpIDogKGZyYWdtZW50U3JjIHx8IFtdKTtcblxufVxuXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RGaWx0ZXI7XG5cbi8qKlxuICogR3JhYnMgYSBzaGFkZXIgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIHNoYWRlciBmcm9tXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5nZXRTaGFkZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXJzW2dsLmlkXTtcblxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gbmV3IERlZmF1bHRTaGFkZXIocmVuZGVyZXIuc2hhZGVyTWFuYWdlcixcbiAgICAgICAgICAgIHRoaXMudmVydGV4U3JjLFxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudFNyYyxcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNoYWRlcnNbZ2wuaWRdID0gc2hhZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8gY2xlYXIgdGhlIG91dHB1dFRhcmdldFxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xufTtcblxuLyoqXG4gKiBTeW5jcyBhIHVuaWZvcm0gYmV0d2VlbiB0aGUgY2xhc3Mgb2JqZWN0IGFuZCB0aGUgc2hhZGVycy5cbiAqXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5zaGFkZXJzLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyc1tpXS5zeW5jVW5pZm9ybSh1bmlmb3JtKTtcbiAgICB9XG59O1xuIiwidmFyIEFic3RyYWN0RmlsdGVyID0gcmVxdWlyZSgnLi9BYnN0cmFjdEZpbHRlcicpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqXG4gKiBCYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXG4gKiBtb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcbiAqIHVuc3VwcG9ydGVkIGJ5IFdlYkdMLlxuICpcbiAqIC0tXG4gKiBGcm9tOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKlxuICovXG5mdW5jdGlvbiBGWEFBRmlsdGVyKClcbntcbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG5cXG52b2lkIHRleGNvb3Jkcyh2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTlcsIG91dCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JTVywgb3V0IHZlYzIgdl9yZ2JTRSxcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjMiBpbnZlcnNlVlAgPSAxLjAgLyByZXNvbHV0aW9uLnh5O1xcbiAgICB2X3JnYk5XID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk5FID0gKGZyYWdDb29yZCArIHZlYzIoMS4wLCAtMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU1cgPSAoZnJhZ0Nvb3JkICsgdmVjMigtMS4wLCAxLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JTRSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiTSA9IHZlYzIoZnJhZ0Nvb3JkICogaW52ZXJzZVZQKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxuICAgdlJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xcblxcbiAgIC8vY29tcHV0ZSB0aGUgdGV4dHVyZSBjb29yZHMgYW5kIHNlbmQgdGhlbSB0byB2YXJ5aW5nc1xcbiAgIHRleGNvb3JkcyhhVGV4dHVyZUNvb3JkICogcmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgdl9yZ2JOVywgdl9yZ2JORSwgdl9yZ2JTVywgdl9yZ2JTRSwgdl9yZ2JNKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcblxcbi8qKlxcbkJhc2ljIEZYQUEgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGNvZGUgb24gZ2Vla3MzZC5jb20gd2l0aCB0aGVcXG5tb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcXG51bnN1cHBvcnRlZCBieSBXZWJHTC5cXG5cXG4tLVxcblxcbkZyb206XFxuaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcXG5cXG5Db3B5cmlnaHQgKGMpIDIwMTEgYnkgQXJtaW4gUm9uYWNoZXIuXFxuXFxuU29tZSByaWdodHMgcmVzZXJ2ZWQuXFxuXFxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxcbm1ldDpcXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXFxuICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcXG4gICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcXG4gICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXFxuXFxuICAgICogVGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3JcXG4gICAgICBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWNcXG4gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXFxuXFxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xcblxcXCJBUyBJU1xcXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXFxuQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcXG5PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcXG5TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXFxuVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXFxuKi9cXG5cXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01JTlxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvIDEyOC4wKVxcbiNlbmRpZlxcbiNpZm5kZWYgRlhBQV9SRURVQ0VfTVVMXFxuICAgICNkZWZpbmUgRlhBQV9SRURVQ0VfTVVMICAgKDEuMCAvIDguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfU1BBTl9NQVhcXG4gICAgI2RlZmluZSBGWEFBX1NQQU5fTUFYICAgICA4LjBcXG4jZW5kaWZcXG5cXG4vL29wdGltaXplZCB2ZXJzaW9uIGZvciBtb2JpbGUsIHdoZXJlIGRlcGVuZGVudFxcbi8vdGV4dHVyZSByZWFkcyBjYW4gYmUgYSBib3R0bGVuZWNrXFxudmVjNCBmeGFhKHNhbXBsZXIyRCB0ZXgsIHZlYzIgZnJhZ0Nvb3JkLCB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk5XLCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYlNXLCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjNCBjb2xvcjtcXG4gICAgbWVkaXVtcCB2ZWMyIGludmVyc2VWUCA9IHZlYzIoMS4wIC8gcmVzb2x1dGlvbi54LCAxLjAgLyByZXNvbHV0aW9uLnkpO1xcbiAgICB2ZWMzIHJnYk5XID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JOVykueHl6O1xcbiAgICB2ZWMzIHJnYk5FID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JORSkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTVykueHl6O1xcbiAgICB2ZWMzIHJnYlNFID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTRSkueHl6O1xcbiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JNKTtcXG4gICAgdmVjMyByZ2JNICA9IHRleENvbG9yLnh5ejtcXG4gICAgdmVjMyBsdW1hID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTtcXG4gICAgZmxvYXQgbHVtYU5XID0gZG90KHJnYk5XLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KHJnYk5FLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gZG90KHJnYlNXLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNFID0gZG90KHJnYlNFLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KHJnYk0sICBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU1pbiA9IG1pbihsdW1hTSwgbWluKG1pbihsdW1hTlcsIGx1bWFORSksIG1pbihsdW1hU1csIGx1bWFTRSkpKTtcXG4gICAgZmxvYXQgbHVtYU1heCA9IG1heChsdW1hTSwgbWF4KG1heChsdW1hTlcsIGx1bWFORSksIG1heChsdW1hU1csIGx1bWFTRSkpKTtcXG5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpcjtcXG4gICAgZGlyLnggPSAtKChsdW1hTlcgKyBsdW1hTkUpIC0gKGx1bWFTVyArIGx1bWFTRSkpO1xcbiAgICBkaXIueSA9ICAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuXFxuICAgIGZsb2F0IGRpclJlZHVjZSA9IG1heCgobHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFKSAqXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNSAqIEZYQUFfUkVEVUNFX01VTCksIEZYQUFfUkVEVUNFX01JTik7XFxuXFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvIChtaW4oYWJzKGRpci54KSwgYWJzKGRpci55KSkgKyBkaXJSZWR1Y2UpO1xcbiAgICBkaXIgPSBtaW4odmVjMihGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgIG1heCh2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBkaXIgKiByY3BEaXJNaW4pKSAqIGludmVyc2VWUDtcXG5cXG4gICAgdmVjMyByZ2JBID0gMC41ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDEuMCAvIDMuMCAtIDAuNSkpLnh5eiArXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMi4wIC8gMy4wIC0gMC41KSkueHl6KTtcXG4gICAgdmVjMyByZ2JCID0gcmdiQSAqIDAuNSArIDAuMjUgKiAoXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAtMC41KS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogMC41KS54eXopO1xcblxcbiAgICBmbG9hdCBsdW1hQiA9IGRvdChyZ2JCLCBsdW1hKTtcXG4gICAgaWYgKChsdW1hQiA8IGx1bWFNaW4pIHx8IChsdW1hQiA+IGx1bWFNYXgpKVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkEsIHRleENvbG9yLmEpO1xcbiAgICBlbHNlXFxuICAgICAgICBjb2xvciA9IHZlYzQocmdiQiwgdGV4Q29sb3IuYSk7XFxuICAgIHJldHVybiBjb2xvcjtcXG59XFxuXFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGZ4YWEodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKiB2UmVzb2x1dGlvbiwgdlJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxuXFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG59XG5cbkZYQUFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRlhBQUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGWEFBRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBGWEFBRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cbkZYQUFGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlciggcmVuZGVyZXIgKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBTcHJpdGVNYXNrRmlsdGVyIGNsYXNzXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSB0YXJnZXQgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZU1hc2tGaWx0ZXIoc3ByaXRlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgICB2TWFza0Nvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFza0Nvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgLy8gY2hlY2sgY2xpcCEgdGhpcyB3aWxsIHN0b3AgdGhlIG1hc2sgYmxlZWRpbmcgb3V0IGZyb20gdGhlIGVkZ2VzXFxuICAgIHZlYzIgdGV4dCA9IGFicyggdk1hc2tDb29yZCAtIDAuNSApO1xcbiAgICB0ZXh0ID0gc3RlcCgwLjUsIHRleHQpO1xcbiAgICBmbG9hdCBjbGlwID0gMS4wIC0gbWF4KHRleHQueSwgdGV4dC54KTtcXG4gICAgdmVjNCBvcmlnaW5hbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgIHZlYzQgbWFza3kgPSB0ZXh0dXJlMkQobWFzaywgdk1hc2tDb29yZCk7XFxuICAgIG9yaWdpbmFsICo9IChtYXNreS5yICogbWFza3kuYSAqIGFscGhhICogY2xpcCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG9yaWdpbmFsO1xcbn1cXG5cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbWFzazogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUuX3RleHR1cmUgfSxcbiAgICAgICAgICAgIGFscGhhOiAgICAgICAgICB7IHR5cGU6ICdmJywgdmFsdWU6IDF9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcbn1cblxuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0byByZXRyaWV2ZSB0aGUgZmlsdGVyIGZyb21cbiAqIEBwYXJhbSBpbnB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gb3V0cHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqL1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5tYXNrLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLl90ZXh0dXJlO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLndvcmxkQWxwaGE7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZU1hc2tGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgdXNlZCB0byBtb3ZlIHRoZSBkaXNwbGFjZW1lbnQgbWFwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdsTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBCbGVuZE1vZGVNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn1cblxuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZE1vZGVNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGVNYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMtdXAgdGhlIGdpdmVuIGJsZW5kTW9kZSBmcm9tIFdlYkdMJ3MgcG9pbnQgb2Ygdmlldy5cbiAqXG4gKiBAcGFyYW0gYmxlbmRNb2RlIHtudW1iZXJ9IHRoZSBibGVuZE1vZGUsIHNob3VsZCBiZSBhIFBpeGkgY29uc3QsIHN1Y2ggYXMgYFBJWEkuQkxFTkRfTU9ERVMuQUREYC4gU2VlXG4gKiAge0BsaW5rIFBJWEkuQkxFTkRfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLnNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChibGVuZE1vZGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblxuICAgIHZhciBtb2RlID0gdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuY3VycmVudEJsZW5kTW9kZV07XG4gICAgdGhpcy5yZW5kZXJlci5nbC5ibGVuZEZ1bmMobW9kZVswXSwgbW9kZVsxXSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgUXVhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL1F1YWQnKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXTtcblxuICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgIHJlbmRlclRhcmdldDpyZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LFxuICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgIGJvdW5kczpudWxsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldFtdfVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICAvLyBsaXN0ZW4gZm9yIGNvbnRleHQgYW5kIHVwZGF0ZSBuZWNlc3NhcnkgYnVmZmVyc1xuICAgIC8vVE9ETyBtYWtlIHRoaXMgZHluYW1pYyFcbiAgICAvL1RPRE8gdGVzdCB0aGlzIG91dCBieSBmb3JjZXMgcG93ZXIgb2YgdHdvP1xuICAgIHRoaXMudGV4dHVyZVNpemUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgcmVuZGVyZXIud2lkdGgsIHJlbmRlcmVyLmhlaWdodCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmcmFtZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBudWxsO1xufVxuXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbHRlck1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlck1hbmFnZXI7XG5cblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVQb29sLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucXVhZCA9IG5ldyBRdWFkKGdsKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcGFyYW0gYnVmZmVyIHtBcnJheUJ1ZmZlcn1cbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuc2V0RmlsdGVyU3RhY2sgPSBmdW5jdGlvbiAoIGZpbHRlclN0YWNrIClcbntcbiAgICB0aGlzLmZpbHRlclN0YWNrID0gZmlsdGVyU3RhY2s7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlciBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGZpbHRlcnMge1BJWEkuQWJzdHJhY3RGaWxlcltdfSB0aGUgZmlsdGVycyB0aGF0IHdpbGwgYmUgcHVzaGVkIHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFja1xuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5wdXNoRmlsdGVyID0gZnVuY3Rpb24gKHRhcmdldCwgZmlsdGVycylcbntcbiAgICAvLyBnZXQgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0Li5cbiAgICAvLyBUT0RPIHJlcGxhY2UgY2xvbmUgd2l0aCBhIGNvcHkgdG8gc2F2ZSBvYmplY3QgY3JlYXRpb25cbiAgICB2YXIgYm91bmRzID0gdGFyZ2V0LmZpbHRlckFyZWEgPyB0YXJnZXQuZmlsdGVyQXJlYS5jbG9uZSgpIDogdGFyZ2V0LmdldEJvdW5kcygpO1xuXG4gICAgLy9ib3VuZHMgPSBib3VuZHMuY2xvbmUoKTtcblxuICAgIC8vIHJvdW5kIG9mZiB0aGUgcmVjdGFuZ2xlIHRvIGdldCBhIG5pY2Ugc21vb29vb29vdGggZmlsdGVyIDopXG4gICAgYm91bmRzLnggPSBib3VuZHMueCB8IDA7XG4gICAgYm91bmRzLnkgPSBib3VuZHMueSB8IDA7XG4gICAgYm91bmRzLndpZHRoID0gYm91bmRzLndpZHRoIHwgMDtcbiAgICBib3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCB8IDA7XG5cblxuICAgIC8vIHBhZGRpbmchXG4gICAgdmFyIHBhZGRpbmcgPSBmaWx0ZXJzWzBdLnBhZGRpbmcgfCAwO1xuICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLnkgLT0gcGFkZGluZztcbiAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcblxuXG4gICAgaWYodGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vVE9ETyB0aGlzIHdpbGwgYnJlYWsgaWYgdGhlIHJlbmRlclRleHR1cmUgdHJhbnNmb3JtIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYSB0cmFuc2xhdGlvbi5cbiAgICAgICAgLy9XaWxsIG5lZWQgdG8gdGFrZSB0aGUgZnVsbCBtYXRyaXggdHJhbnNmb3JtIGludG8gYWNvdW50Li5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm07XG5cbiAgICAgICAgYm91bmRzLnggKz0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSArPSB0cmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdGhpcy5jYXBGaWx0ZXJBcmVhKCBib3VuZHMgKTtcblxuICAgICAgICBib3VuZHMueCAtPSB0cmFuc2Zvcm0udHg7XG4gICAgICAgIGJvdW5kcy55IC09IHRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG4gICAgfVxuXG4gICAgaWYoYm91bmRzLndpZHRoID4gMCAmJiBib3VuZHMuaGVpZ2h0ID4gMClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gYm91bmRzO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBjbGVhciB0aGUgdGV4dHVyZS4uXG4gICAgICAgIHRleHR1cmUuY2xlYXIoKTtcblxuICAgICAgICAvLyBUT0RPIGdldCByaWQgb2Ygb2JqZWN0IGNyZWF0aW9uIVxuICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OiB0ZXh0dXJlLFxuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJzXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIHB1c2ggc29tdGhpbmcgb24gdG8gdGhlIHN0YWNrIHRoYXQgaXMgZW1wdHlcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucG9wRmlsdGVyID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2sucG9wKCk7XG4gICAgdmFyIHByZXZpb3VzRmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2tbdGhpcy5maWx0ZXJTdGFjay5sZW5ndGgtMV07XG5cbiAgICB2YXIgaW5wdXQgPSBmaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIGlmIHRoZSByZW5kZXJUYXJnZXQgaXMgbnVsbCB0aGVuIHdlIGRvbid0IGFwcGx5IHRoZSBmaWx0ZXIgYXMgaXRzIG9mZnNjcmVlblxuICAgIGlmKCFmaWx0ZXJEYXRhLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gcHJldmlvdXNGaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIHVzZSBwcm9ncmFtXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpbnB1dC5mcmFtZTtcblxuICAgIHRoaXMucXVhZC5tYXAodGhpcy50ZXh0dXJlU2l6ZSwgaW5wdXQuZnJhbWUpO1xuXG5cbiAgICAvLyBUT0RPLi4gdGhpcyBwcm9iYWJseSBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBmaWx0ZXJzID0gZmlsdGVyRGF0YS5maWx0ZXI7XG5cbiAgICAvLyBhc3N1bWluZyBhbGwgZmlsdGVycyBmb2xsb3cgdGhlIGNvcnJlY3QgZm9ybWF0Pz9cbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgbm9ybWFsIGJsZW5kbW9kZSFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKENPTlNULkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDEpXG4gICAge1xuICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICBpZiAoZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJzWzBdLmFwcGx5RmlsdGVyKCB0aGlzLnJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0ICk7XG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBpbnB1dCApO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBmbGlwVGV4dHVyZSA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcFRleHR1cmUgPSB0aGlzLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGZpbHRlcnNbaV07XG5cbiAgICAgICAgICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSB0aGVuIHNldHRpbmcgdGhpcyBlYWNoIHRpbWU/XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlci5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIGZsb3BUZXh0dXJlICk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gZmxpcFRleHR1cmU7XG4gICAgICAgICAgICBmbGlwVGV4dHVyZSA9IGZsb3BUZXh0dXJlO1xuICAgICAgICAgICAgZmxvcFRleHR1cmUgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aC0xXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIG91dHB1dCApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBmbGlwVGV4dHVyZSApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxvcFRleHR1cmUgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyRGF0YS5maWx0ZXI7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgUmVuZGVyVGFyZ2V0XG4gKiBAcmV0dXJuIHtSZW5kZXJUYXJnZXR9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICggY2xlYXIgKVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSB0aGlzLnRleHR1cmVQb29sLnBvcCgpIHx8IG5ldyBSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJlci5nbCwgdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQsIENPTlNULlNDQUxFX01PREVTLkxJTkVBUiwgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uICogQ09OU1QuRklMVEVSX1JFU09MVVRJT04pO1xuICAgIHJlbmRlclRhcmdldC5mcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJUYXJnZXQ7XG59O1xuXG4vKlxuICogUmV0dXJucyBhIFJlbmRlclRhcmdldCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UmVuZGVyVGFyZ2V0fSBUaGUgUmVuZGVyVGFyZ2V0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnJldHVyblJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5wdXNoKCByZW5kZXJUYXJnZXQgKTtcbn07XG5cbi8qXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBzaGFkZXIge1NoYWRlcn0gVGhlIHNoYWRlciB0byB1cGxvYWRcbiAqIEBwYXJhbSBpbnB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAoc2hhZGVyLCBpbnB1dFRhcmdldCwgb3V0cHV0VGFyZ2V0LCBjbGVhcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQob3V0cHV0VGFyZ2V0KTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIG91dHB1dFRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2hhZGVyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBDYW4gdGhpcyBiZSBjYWNoZWQgYW5kIG5vdCBgdG9BcnJheWBlZCBlYWNoIGZyYW1lP1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcblxuICAgIC8vVE9ETyBjYW4gdGhpcyBiZSBvcHRpbWlzZWQ/XG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuLypcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMiAqIDQgKiA0KTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuKi9cblxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGlucHV0VGFyZ2V0LnRleHR1cmUpO1xuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIG1hcHBlZCBtYXRyaXhcbiAqIEBwYXJhbSBmaWx0ZXJBcmVhIHtSZWN0YW5nbGV9IFRoZSBmaWx0ZXIgYXJlYVxuICogQHBhcmFtIHNwcml0ZSB7U3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICogQHBhcmFtIG91dHB1dE1hdHJpeCB7TWF0cml4fSBAYWx2aW5cbiAqL1xuLy8gVE9ETyBwbGF5aW5nIGFyb3VuZCBoZXJlLi4gdGhpcyBpcyB0ZW1wb3JhcnkgLSAod2lsbCBlbmQgdXAgaW4gdGhlIHNoYWRlcilcbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeCA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhLCBzcHJpdGUsIG91dHB1dE1hdHJpeClcbntcbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBzcHJpdGUud29ybGRUcmFuc2Zvcm0uY29weShtYXRoLk1hdHJpeC5URU1QX01BVFJJWCksXG4gICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIHZhciBtYXBwZWRNYXRyaXggPSBvdXRwdXRNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIC8vIHNjYWxlLi5cbiAgICB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICBtYXBwZWRNYXRyaXgudHJhbnNsYXRlKGZpbHRlckFyZWEueCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIGZpbHRlckFyZWEueSAvIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0ICk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIHJhdGlvKTtcblxuICAgIHZhciB0cmFuc2xhdGVTY2FsZVggPSAodGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAvIHRleHR1cmUud2lkdGgpO1xuICAgIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0ZXh0dXJlLmhlaWdodCk7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS50eCAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuICAgIHdvcmxkVHJhbnNmb3JtLnR5IC89IHRleHR1cmUud2lkdGggKiB0cmFuc2xhdGVTY2FsZVg7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIG1hcHBlZE1hdHJpeC5wcmVwZW5kKHdvcmxkVHJhbnNmb3JtKTtcblxuICAgIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIG1hcHBlZE1hdHJpeC5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShzcHJpdGUuYW5jaG9yLngsIHNwcml0ZS5hbmNob3IueSk7XG5cbiAgICByZXR1cm4gbWFwcGVkTWF0cml4O1xuXG4gICAgLy8gS2VlcGluZyB0aGUgb3JnaW5hbCBhcyBhIHJlbWluZGVyIHRvIG1lIG9uIGhvdyB0aGlzIHdvcmtzIVxuICAgIC8vXG4gICAgLy8gdmFyIG0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuICAgIC8vIC8vIHNjYWxlLi5cbiAgICAvLyB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICAvLyBtLnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCk7XG5cblxuICAgIC8vIG0uc2NhbGUoMSAsIHJhdGlvKTtcblxuXG4gICAgLy8gdmFyIHRyYW5zZm9ybSA9IHd0LmNsb25lKCk7XG5cbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyA2MjApO1xuICAgIC8vIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyAzODApO1xuXG4gICAgLy8gdHJhbnNmb3JtLnR4IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICAvLyB0cmFuc2Zvcm0udHkgLz0gNjIwICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgLy8gdHJhbnNmb3JtLmludmVydCgpO1xuXG4gICAgLy8gdHJhbnNmb3JtLmFwcGVuZChtKTtcblxuICAgIC8vIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIC8vIHRyYW5zZm9ybS5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgLy8gcmV0dXJuIHRyYW5zZm9ybTtcbn07XG5cbi8qXG4gKiBDb25zdHJhaW5zIHRoZSBmaWx0ZXIgYXJlYSB0byB0aGUgdGV4dHVyZSBzaXplXG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWEgd2Ugd2FudCB0byBjYXBcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY2FwRmlsdGVyQXJlYSA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhKVxue1xuICAgIGlmIChmaWx0ZXJBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCArPSBmaWx0ZXJBcmVhLng7XG4gICAgICAgIGZpbHRlckFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlckFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLmhlaWdodCArPSBmaWx0ZXJBcmVhLnk7XG4gICAgICAgIGZpbHRlckFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnggKyBmaWx0ZXJBcmVhLndpZHRoID4gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLndpZHRoID0gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAtIGZpbHRlckFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGZpbHRlckFyZWEueSArIGZpbHRlckFyZWEuaGVpZ2h0ID4gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAtIGZpbHRlckFyZWEueTtcbiAgICB9XG59O1xuXG4vKlxuICogUmVzaXplcyBhbGwgdGhlIHJlbmRlciB0YXJnZXRzIGluIHRoZSBwb29sXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMudGV4dHVyZVNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZVBvb2xbaV0ucmVzaXplKCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgZmlsdGVyIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGZpbHRlciBzdGFjay5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucXVhZC5kZXN0cm95KCk7XG4gICAgXG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG4gICAgXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IG51bGw7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGV4dHVyZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVQb29sID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBBbHBoYU1hc2tGaWx0ZXIgPSByZXF1aXJlKCcuLi9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuc3RlbmNpbFN0YWNrID0gW107XG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ID0gMDtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbCA9IFtdO1xufVxuXG5NYXNrTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFNwcml0ZU1hc2sodGFyZ2V0LCBtYXNrRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IG1hc2sgZnJvbSB0aGUgbWFzayBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIGlmIChtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnBvcFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB2YXIgYWxwaGFNYXNrRmlsdGVyID0gdGhpcy5hbHBoYU1hc2tQb29sLnBvcCgpO1xuXG4gICAgaWYgKCFhbHBoYU1hc2tGaWx0ZXIpXG4gICAge1xuICAgICAgICBhbHBoYU1hc2tGaWx0ZXIgPSBbbmV3IEFscGhhTWFza0ZpbHRlcihtYXNrRGF0YSldO1xuICAgIH1cblxuICAgIGFscGhhTWFza0ZpbHRlclswXS5tYXNrU3ByaXRlID0gbWFza0RhdGE7XG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGFyZ2V0LCBhbHBoYU1hc2tGaWx0ZXIpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBmaWx0ZXJzID0gdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgdGhpcy5hbHBoYU1hc2tQb29sLnB1c2goZmlsdGVycyk7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoTWFzayhtYXNrRGF0YSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcE1hc2sobWFza0RhdGEpO1xufTtcblxuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpLFxuICAgIENvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXInKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTaGFkZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heEF0dGlicyA9IDEwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXhBdHRpYnM7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YWNrID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcblxuLy8gICAgdGhpcy5pbml0UGx1Z2lucygpO1xufVxuXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hbmFnZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oU2hhZGVyTWFuYWdlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyTWFuYWdlcjtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRyaWJ1dGUgY29ycmVjdGx5IGFzIHRoaXMgdGVuZHMgdG8gdmFyeVxuICAgIHRoaXMubWF4QXR0aWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVE9ETyAtIFdoeSBhcmUgdGhlc2Ugbm90IHBsdWdpbnM/IFdlIGNhbid0IGRlY291cGxlIHByaW1pdGl2ZXMgdW5sZXNzIHRoZXkgYXJlLi4uLlxuICAgIHRoaXMuZGVmYXVsdFNoYWRlciA9IG5ldyBUZXh0dXJlU2hhZGVyKHRoaXMpO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBuZXcgQ29tcGxleFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogVGFrZXMgdGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gaW4gcGFyYW1ldGVycyBhbmQgdXBsb2FkcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJzIHthbnlbXX0gYXR0cmlic1xuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRBdHRyaWJzID0gZnVuY3Rpb24gKGF0dHJpYnMpXG57XG4gICAgLy8gcmVzZXQgdGVtcCBzdGF0ZVxuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMudGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yICh2YXIgYSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbYXR0cmlic1thXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYlN0YXRlW2ldICE9PSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgc2hhZGVyLlxuICpcbiAqIEBwYXJhbSBzaGFkZXIge1BJWEkuU2hhZGVyfSB0aGUgc2hhZGVyIHRvIHVwbG9hZFxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKVxue1xuICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5fY3VycmVudElkID09PSBzaGFkZXIudWlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IHNoYWRlci51aWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBzaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmdsLnVzZVByb2dyYW0oc2hhZGVyLnByb2dyYW0pO1xuICAgIHRoaXMuc2V0QXR0cmlicyhzaGFkZXIuYXR0cmlidXRlcyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBvYmplY3QuXG4gKlxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLmRlc3Ryb3koKTtcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBudWxsO1xufTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFza01hbmFnZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG51bGw7XG59XG5cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBtYXNrIHN0YWNrIHRoYXQgaXMgdXNlZCBieSB0aGlzIG1hbmFnZXIuXG4gKlxuICogQHBhcmFtIHN0ZW5jaWxNYXNrU3RhY2sge1BJWEkuU3RlbmNpbE1hc2tTdGFja30gVGhlIG1hc2sgc3RhY2tcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuc2V0TWFza1N0YWNrID0gZnVuY3Rpb24gKCBzdGVuY2lsTWFza1N0YWNrIClcbntcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBzdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIGlmIChzdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suIEBhbHZpblxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hdHRhY2hTdGVuY2lsQnVmZmVyKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBzbXMgPSB0aGlzLnN0ZW5jaWxNYXNrU3RhY2s7XG5cbiAgICB0aGlzLmJpbmRHcmFwaGljcyhncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xuICAgICAgICBzbXMucmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIHNtcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wdXNoKHdlYkdMRGF0YSk7XG5cbiAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgLy8gZHJhdyB0aGUgdHJpYW5nbGUgc3RyaXAhXG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IGEgcXVhZCB0byBpbmNyZW1lbnQuLlxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cbiAgICBzbXMuY291bnQrKztcbn07XG5cbi8qKlxuICogVE9ETyB0aGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIVxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5iaW5kR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICAvL2lmICh0aGlzLl9jdXJyZW50R3JhcGhpY3MgPT09IGdyYXBoaWNzKXJldHVybjtcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGJpbmQgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgdmFyIHNoYWRlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICAvKlxuICAgICAgICBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMuY29sb3IuX2xvY2F0aW9uLCB3ZWJHTERhdGEuY29sb3IpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDIsIDApO1xuXG4gICAgICAgIC8vIG5vdyBkbyB0aGUgcmVzdC4uXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICovXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmFjdGl2YXRlUHJpbWl0aXZlU2hhZGVyKCk7XG4vLyAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnByaW1pdGl2ZVNoYWRlcjtcbiAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cblxuICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4vLyAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG5cbiAgICAgIC8qICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTFmKHNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEpO1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCA0LCBnbC5GTE9BVCwgZmFsc2UsNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTsqL1xuICAgIH1cbn07XG5cbi8qKlxuICogVE9ETyBAYWx2aW5cbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTdGVuY2lsID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wb3AoKTtcblxuICAgIHNtcy5jb3VudC0tO1xuXG4gICAgaWYgKHNtcy5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgLy8gdGhlIHN0YWNrIGlzIGVtcHR5IVxuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICAgICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuXG4gICAgICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSAobGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOVkVSVCk7XG5cbiAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50ICs9IDI7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAvLyAgY29uc29sZS5sb2coXCI8PD4+XCIpXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcblxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCksIDB4RkYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5LRUVQKTtcblxuXG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgbWFzayBzdGFjay5cbiAqXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjayA9IG51bGw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119IFRoZSBtYXNrIGRhdGEgc3RydWN0dXJlIHRvIHVzZVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgXG4gICAgLy9UT0RPIEZJWFxuICAgIGlmIChtYXNrRGF0YS5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy51cGRhdGVHcmFwaGljcyhtYXNrRGF0YSwgdGhpcy5yZW5kZXJlci5nbCk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119XG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuXG4gICAgdGhpcy5wb3BTdGVuY2lsKG1hc2tEYXRhLCBtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YVswXSk7XG59O1xuXG4iLCIvKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gV2ViR0xNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMucmVuZGVyZXIub24oJ2NvbnRleHQnLCB0aGlzLm9uQ29udGV4dENoYW5nZSwgdGhpcyk7XG59XG5cbldlYkdMTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFuYWdlcjtcblxuLyoqXG4gKiBHZW5lcmljIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXHQvLyBkbyBzb21lIGNvZGVzIGluaXQhXG59O1xuXG4vKipcbiAqIEdlbmVyaWMgZGVzdHJveSBtZXRob2RzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICovXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVuZGVyZXIub2ZmKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IGNvbXBsZXggcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBDb21wbGV4UHJpbWl0aXZlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gdmVjNChjb2xvciAqIGFscGhhICogdGludCwgYWxwaGEpOycsLy9cIiAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdGludDogICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwgMCwgMF0gfSxcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgY29sb3I6ICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwwLDBdIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYUNvbG9yOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCYXNlIHNoYWRlciBjbGFzcyBmb3IgUElYSSBtYW5hZ2VkIHNoYWRlcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFt1bmlmb3Jtc10ge29iamVjdH0gVW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxuICogQHBhcmFtIFthdHRyaWJ1dGVzXSB7b2JqZWN0fSBBdHRyaWJ1dGVzIGZvciB0aGlzIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKVxue1xuICAgIGlmICghdmVydGV4U3JjIHx8ICFmcmFnbWVudFNyYylcbiAgICB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpeGkuanMgRXJyb3IuIFNoYWRlciByZXF1aXJlcyB2ZXJ0ZXhTcmMgYW5kIGZyYWdtZW50U3JjJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmdsID0gc2hhZGVyTWFuYWdlci5yZW5kZXJlci5nbDtcblxuICAgIC8vVE9ETyBtYXliZSB3ZSBzaG91bGQgcGFzcyByZW5kZXJlciByYXRoZXIgdGhhbiBzaGFkZXIgbWFuZ2VyPz8gZm9vZCBmb3IgdGhvdWdodC4uXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyID0gc2hhZGVyTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBwcm9ncmFtLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xQcm9ncmFtfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF0dHJpYnV0ZXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRleHR1cmUgY291bnRlclxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYztcblxuICAgIHRoaXMuaW5pdCgpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc2hhZGVyIGFuZCB1c2VzIGl0XG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29tcGlsZSgpO1xuXG4gICAgdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLnVuaWZvcm1zKSk7XG4gICAgdGhpcy5jYWNoZUF0dHJpYnV0ZUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpKTtcbn07XG5cbi8qKlxuICogQ2FjaGVzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHVuaWZvcm0gZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSB1bmlmb3JtcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyA9IGZ1bmN0aW9uIChrZXlzKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMudW5pZm9ybXNba2V5c1tpXV0uX2xvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBrZXlzW2ldKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSBhdHRyaWJ1dGVzIHRvIGNhY2hlXG4gKi9cblNoYWRlci5wcm90b3R5cGUuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNba2V5c1tpXV0gPSB0aGlzLmdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4uLlxuXG4gICAgLy8gQmVnaW4gd29yc3QgaGFjayBldmEgLy9cblxuICAgIC8vIFdIWT8/PyBPTkxZIG9uIG15IGNocm9tZSBwaXhlbCB0aGUgbGluZSBhYm92ZSByZXR1cm5zIC0xIHdoZW4gdXNpbmcgZmlsdGVycz9cbiAgICAvLyBtYXliZSBpdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdsIGNvbnRleHQuXG4gICAgLy8gSSdtIGNvbnZpbmNlZCB0aGlzIGlzIGEgYnVnIGluIHRoZSBjaHJvbWUgYnJvd3NlciBhcyB0aGVyZSBpcyBOTyByZWFzb24gd2h5IHRoaXMgc2hvdWxkIGJlIHJldHVybmluZyAtMSBlc3BlY2lhbGx5IGFzIGl0IG9ubHkgbWFuaWZlc3RzIG9uIG15IGNocm9tZSBwaXhlbFxuICAgIC8vIElmIHRoZXJlcyBhbnkgd2ViR0wgcGVvcGxlIHRoYXQga25vdyB3aHkgY291bGQgaGFwcGVuIHBsZWFzZSBoZWxwIDopXG4gICAgLy8gaWYgKHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPT09IC0xKXtcbiAgICAvLyAgICAgdGhpcy5hdHRyaWJ1dGVzLmFDb2xvciA9IDI7XG4gICAgLy8gfVxuXG4gICAgLy8gRW5kIHdvcnN0IGhhY2sgZXZhIC8vXG59O1xuXG4vKipcbiAqIEF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZCBjcmVhdGVzIHRoZSBwcm9ncmFtLlxuICpcbiAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX1cbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIGdsVmVydFNoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5WRVJURVhfU0hBREVSLCB0aGlzLnZlcnRleFNyYyk7XG4gICAgdmFyIGdsRnJhZ1NoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuZnJhZ21lbnRTcmMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xGcmFnU2hhZGVyKTtcbiAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcblxuICAgIC8vIGlmIGxpbmtpbmcgZmFpbHMsIHRoZW4gbG9nIGFuZCBjbGVhbnVwXG4gICAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BpeGkuanMgRXJyb3I6IENvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlci4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuVkFMSURBVEVfU1RBVFVTJywgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuZ2V0RXJyb3IoKScsIGdsLmdldEVycm9yKCkpO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcHJvZ3JhbSBpbmZvIGxvZywgbG9nIGl0XG4gICAgICAgIGlmIChnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSAhPT0gJycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBXYXJuaW5nOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpJywgZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgcHJvZ3JhbSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgc29tZSBzaGFkZXJzXG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsVmVydFNoYWRlcik7XG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsRnJhZ1NoYWRlcik7XG5cbiAgICByZXR1cm4gKHRoaXMucHJvZ3JhbSA9IHByb2dyYW0pO1xufTtcblxuLyoqXG4qIEFkZHMgYSBuZXcgdW5pZm9ybVxuKlxuKiBAcGFyYW0gdW5pZm9ybSB7b2JqZWN0fSB0aGUgbmV3IHVuaWZvcm0gdG8gYXR0YWNoXG4qL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBsb2NhdGlvbiA9IHVuaWZvcm0uX2xvY2F0aW9uLFxuICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWUsXG4gICAgICAgIGdsID0gdGhpcy5nbCxcbiAgICAgICAgaSwgaWw7XG5cbiAgICBzd2l0Y2ggKHVuaWZvcm0udHlwZSlcbiAgICB7XG4gICAgICAgIGNhc2UgJ2InOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlID8gMSA6IDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGludCB2YWx1ZVxuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBzaW5nbGUgZmxvYXQgdmFsdWVcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDIpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoMykgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoNCkgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzRmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSAyRCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjInOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgM0QgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YzJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDREIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2NCc6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzFmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzRmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTInOlxuICAgICAgICBjYXNlICdtYXQyJzpcbiAgICAgICAgY2FzZSAnTWF0cml4MmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICBjYXNlICdtYXQzJzpcbiAgICAgICAgY2FzZSAnTWF0cml4M2Z2JzpcblxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICdtNCc6XG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICBjYXNlICdNYXRyaXg0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgQ29sb3IgVmFsdWVcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGludGVnZXJzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIChKUyBvciB0eXBlZCBhcnJheSlcbiAgICAgICAgY2FzZSAnZnYxJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDJEIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjJ2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDIgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDJdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMiArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAzRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yzdic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgzICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMyArIDJdICAgPSB2YWx1ZVtpXS56O1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHVuaWZvcm0uX2FycmF5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDREIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjR2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDRdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgMl0gICA9IHZhbHVlW2ldLno7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAzXSAgID0gdmFsdWVbaV0udztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBQSVhJLlRleHR1cmVcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgIGNhc2UgJ3NhbXBsZXIyRCc6XG5cbiAgICAgICAgICAgIGlmICghdW5pZm9ybS52YWx1ZSB8fCAhdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFjdGl2YXRlIHRoaXMgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0aGlzLnRleHR1cmVDb3VudF0pO1xuXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgICAgICAgICBpZiAoIXRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2FtcGxlcjJEKHVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSB0ZXh0dXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb25lLi5cbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gICAgICAgICAgICAvLyBzZXQgdW5pZm9ybSB0byB0ZXh0dXJlIGluZGV4XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkodW5pZm9ybS5fbG9jYXRpb24sIHRoaXMudGV4dHVyZUNvdW50KTtcblxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IG5leHQgdGV4dHVyZSBpZFxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBTaGFkZXIgV2FybmluZzogVW5rbm93biB1bmlmb3JtIHR5cGU6ICcgKyB1bmlmb3JtLnR5cGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnVuaWZvcm1zKVxuICAgIHtcbiAgICAgICAgdGhpcy5zeW5jVW5pZm9ybSh0aGlzLnVuaWZvcm1zW2tleV0pO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJbml0aWFsaXNlcyBhIFNhbXBsZXIyRCB1bmlmb3JtICh3aGljaCBtYXkgb25seSBiZSBhdmFpbGFibGUgbGF0ZXIgb24gYWZ0ZXIgaW5pdFVuaWZvcm1zIG9uY2UgdGhlIHRleHR1cmUgaGFzIGxvYWRlZClcbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuaW5pdFNhbXBsZXIyRCA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGlmICh1bmlmb3JtLnRleHR1cmVEYXRhKVxuICAgIHtcblxuICAgICAgICAvL1RPRE8gbW92ZSB0aGlzLi4uXG4gICAgICAgIHZhciBkYXRhID0gdW5pZm9ybS50ZXh0dXJlRGF0YTtcblxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG5cbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGxpZWRBbHBoYSk7XG4gICAgICAgIC8vIEdMVGV4dHVyZSA9IG1hZyBsaW5lYXIsIG1pbiBsaW5lYXJfbWlwbWFwX2xpbmVhciwgd3JhcCByZXBlYXQgKyBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgLy8gR0xUZXh0dXJlTGluZWFyID0gbWFnL21pbiBsaW5lYXIsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdFJlcGVhdCA9IG1hZy9taW4gTkVBUkVTVCwgd3JhcCByZXBlYXRcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdCA9IG1hZy9taW4gbmVhcmVzdCwgd3JhcCBjbGFtcFxuICAgICAgICAvLyBBdWRpb1RleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDUxMiwgaGVpZ2h0IDIsIGJvcmRlciAwXG4gICAgICAgIC8vIEtleVRleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDI1NiwgaGVpZ2h0IDIsIGJvcmRlciAwXG5cbiAgICAgICAgLy8gIG1hZ0ZpbHRlciBjYW4gYmU6IGdsLkxJTkVBUiwgZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgb3IgZ2wuTkVBUkVTVFxuICAgICAgICAvLyAgd3JhcFMvVCBjYW4gYmU6IGdsLkNMQU1QX1RPX0VER0Ugb3IgZ2wuUkVQRUFUXG5cbiAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBkYXRhLmx1bWluYW5jZSA/IGdsLkxVTUlOQU5DRSA6IGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRleHR1cmUuc291cmNlKTtcblxuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZGF0YS5tYWdGaWx0ZXIgPyBkYXRhLm1hZ0ZpbHRlciA6IGdsLkxJTkVBUiApO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFICk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZGF0YS53cmFwVCA/IGRhdGEud3JhcFQgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5zaGFkZXJNYW5hZ2VyLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgc2hhZGVyLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmdsLmRlbGV0ZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgIHRoaXMudW5pZm9ybXMgPSBudWxsO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleFNyYyA9IG51bGw7XG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IG51bGw7XG59O1xuXG5TaGFkZXIucHJvdG90eXBlLl9nbENvbXBpbGUgPSBmdW5jdGlvbiAodHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIHRoaXMuZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc3JjKTtcbiAgICB0aGlzLmdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghdGhpcy5nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCB0aGlzLmdsLkNPTVBJTEVfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIGN1c3RvbVVuaWZvcm1zLCBjdXN0b21BdHRyaWJ1dGVzKVxue1xuICAgIHZhciB1bmlmb3JtcyA9IHtcblxuICAgICAgICB1U2FtcGxlcjogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiAwIH0sXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6ICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDFdKSB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21Vbmlmb3JtcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIHUgaW4gY3VzdG9tVW5pZm9ybXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVuaWZvcm1zW3VdID0gY3VzdG9tVW5pZm9ybXNbdV07XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBhVmVydGV4UG9zaXRpb246ICAgIDAsXG4gICAgICAgIGFUZXh0dXJlQ29vcmQ6ICAgICAgMCxcbiAgICAgICAgYUNvbG9yOiAgICAgICAgICAgICAwXG4gICAgfTtcblxuICAgIGlmIChjdXN0b21BdHRyaWJ1dGVzKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgYSBpbiBjdXN0b21BdHRyaWJ1dGVzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2FdID0gY3VzdG9tQXR0cmlidXRlc1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IHZlcnRleFNyYyB8fCBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcyk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKGdsKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IFRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgZnJhZ21lbnRTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYztcblxuICAgIFNoYWRlci5jYWxsKHRoaXMsIGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTsvLywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xuXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuLi9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBCYXNlIGZvciBhIGNvbW1vbiBvYmplY3QgcmVuZGVyZXIgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHN5c3RlbSByZW5kZXJlciBwbHVnaW4uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBPYmplY3RSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59XG5cblxuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9iamVjdFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RSZW5kZXJlcjtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHJlbmRlcmVyIGFuZCBzZXRzIHRoZSBzaGFkZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gc2V0IHRoZSBzaGFkZXIuLlxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgcmVuZGVyZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIGZsdXNoZXNcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gZmx1c2ghXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyByZW5kZXIgdGhlIG9iamVjdFxufTtcbiIsIi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHF1YWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gVGhlIGdsIGNvbnRleHQgZm9yIHRoaXMgcXVhZCB0byB1c2UuXG4gKi9cbmZ1bmN0aW9uIFF1YWQoZ2wpXG57XG4gICAgLypcbiAgICAgKiB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbi8vICAgIHRoaXMudGV4dHVyZXMgPSBuZXcgVGV4dHVyZVV2cygpO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMjAwLDAsXG4gICAgICAgIDIwMCwyMDAsXG4gICAgICAgIDAsMjAwXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBxdWFkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KFtcbiAgICAgICAgMCwwLFxuICAgICAgICAxLDAsXG4gICAgICAgIDEsMSxcbiAgICAgICAgMCwxXG4gICAgXSk7XG5cbi8vICAgIHZhciB3aGl0ZSA9ICgweEZGRkZGRiA+PiAxNikgKyAoMHhGRkZGRkYgJiAweGZmMDApICsgKCgweEZGRkZGRiAmIDB4ZmYpIDw8IDE2KSArICgxICogMjU1IDw8IDI0KTtcbiAgICAvL1RPRE8gY29udmVydCB0aGlzIHRvIGEgMzIgdW5zaWduZWQgaW50IGFycmF5XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIGNvbXBvbmVudHMgb2YgdGhlIHRyaWFuZ2xlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDFcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KFtcbiAgICAgICAgMCwgMSwgMiwgMCwgMywgMlxuICAgIF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIHZlcnRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICg4ICsgOCArIDE2KSAqIDQsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59XG5cblF1YWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUXVhZDtcblxuLyoqXG4gKiBNYXBzIHR3byBSZWN0YW5nbGUgdG8gdGhlIHF1YWRcbiAqIEBwYXJhbSByZWN0IHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZpcnN0IHJlY3RhbmdsZVxuICogQHBhcmFtIHJlY3QyIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHNlY29uZCByZWN0YW5nbGVcbiAqL1xuUXVhZC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24ocmVjdCwgcmVjdDIpXG57XG4gICAgdmFyIHggPSAwOyAvL3JlY3QyLnggLyByZWN0LndpZHRoO1xuICAgIHZhciB5ID0gMDsgLy9yZWN0Mi55IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1swXSA9IHg7XG4gICAgdGhpcy51dnNbMV0gPSB5O1xuXG4gICAgdGhpcy51dnNbMl0gPSB4ICsgcmVjdDIud2lkdGggLyByZWN0LndpZHRoO1xuICAgIHRoaXMudXZzWzNdID0geTtcblxuICAgIHRoaXMudXZzWzRdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIHRoaXMudXZzWzZdID0geDtcbiAgICB0aGlzLnV2c1s3XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIC8vLyAtLS0tLVxuICAgIHggPSByZWN0Mi54O1xuICAgIHkgPSByZWN0Mi55O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1swXSA9IHg7XG4gICAgdGhpcy52ZXJ0aWNlc1sxXSA9IHk7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzJdID0geCArIHJlY3QyLndpZHRoO1xuICAgIHRoaXMudmVydGljZXNbM10gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1s0XSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzVdID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudmVydGljZXNbNl0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0O1xuXG4gICAgdGhpcy51cGxvYWQoKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlciBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5RdWFkLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIFRPRE8gY291bGQgcHJvYmFibHkgYmUgcHVzaGVkIGludG8gb25lIHVwbG9hZCFcbiAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHRoaXMudmVydGV4QnVmZmVyICk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy52ZXJ0aWNlcyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgOCAqIDQsIHRoaXMudXZzKTtcblxuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDgpICogNCwgdGhpcy5jb2xvcnMpO1xufTtcblxuUXVhZC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWQ7XG5cblxuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKSxcbiAgICAgICAgXG4gICAgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuICAgIEdMRnJhbWVidWZmZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTEZyYW1lYnVmZmVyLFxuICAgIFxuICAgIFN0ZW5jaWxNYXNrU3RhY2sgPSByZXF1aXJlKCcuL1N0ZW5jaWxNYXNrU3RhY2snKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqL1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgaG9yaXpvbnRhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSB2ZXJ0aWNhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICogQHBhcmFtIHJvb3Qge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAqL1xudmFyIFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24sIHJvb3QpXG57XG4gICAgLy9UT0RPIFJlc29sdXRpb24gY291bGQgZ28gaGVyZSAoIGVnIGxvdyByZXMgYmx1cnMgKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vIG5leHQgdGltZSB0byBjcmVhdGUgYSBmcmFtZSBidWZmZXIgYW5kIHRleHR1cmVcblxuICAgIC8qKlxuICAgICAqIEEgZnJhbWUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEZyYW1lQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuXG4gICAgdGhpcy5jbGVhckNvbG9yID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIG9iamVjdCBhcyBhIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2JqZWN0J3MgdHJhbnNmb3JtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk1hdHJpeH1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lID0gbnVsbDtcbiAgICBcbiAgICB0aGlzLmRlZmF1bHRGcmFtZSA9IG5ldyBQSVhJLlJlY3RhbmdsZSgpO1xuICAgIHRoaXMuZGVzdGluYXRpb25GcmFtZSA9IG51bGw7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgc3RvcmVzIG1hc2tpbmcgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbEJ1ZmZlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzdGVuY2lsIG1hc2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gbmV3IFN0ZW5jaWxNYXNrU3RhY2soKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyBmaWx0ZXIgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDp0aGlzLFxuICAgICAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICAgICAgYm91bmRzOnRoaXMuc2l6ZVxuICAgICAgICB9XG4gICAgXTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEEgZnJhbWUgYnVmZmVyIG5lZWRzIGEgdGFyZ2V0IHRvIHJlbmRlciB0by4uXG4gICAgICAgICAgICBjcmVhdGUgYSB0ZXh0dXJlIGFuZCBiaW5kIGl0IGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAgICAgKi9cbiAgICAgICAgXG5cbiAgICAgICAvLyBUT0RPIGNoYW5nZSFcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGJ5IHRoZSBiYXNlIHRleHR1cmVcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGhpcy5mcmFtZUJ1ZmZlci50ZXh0dXJlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBtYWtlIGl0IGEgbnVsbCBmcmFtZWJ1ZmZlci4uXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZnJhbWVidWZmZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xufTtcblxuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRhcmdldDtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGFyZ2V0O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZmlsdGVyIHRleHR1cmUuXG4gKlxuICogQHBhcmFtIFtiaW5kPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIHdlIGJpbmQgb3VyIGZyYW1lYnVmZmVyIGJlZm9yZSBjbGVhcmluZz9cbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGNsZWFyQ29sb3IpXG57XG4gICAgdmFyIGNjID0gY2xlYXJDb2xvciB8fCB0aGlzLmNsZWFyQ29sb3JcbiAgICB0aGlzLmZyYW1lQnVmZmVyLmNsZWFyKGNjWzBdLGNjWzFdLGNjWzJdLGNjWzNdKS8vcixnLGIsYSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuYXR0YWNoU3RlbmNpbEJ1ZmZlciA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPRE8gY2hlY2sgaWYgc3RlbmNpbCBpcyBkb25lP1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBpcyB1c2VkIGZvciBtYXNraW5nIGluIHBpeGlcbiAgICAgKiBsZXRzIGNyZWF0ZSBvbmUgYW5kIHRoZW4gYWRkIGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVTdGVuY2lsKCk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCBpbml0aWFsaXNlcyB0aGUgdmlld3BvcnQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oZGVzdGluYXRpb25GcmFtZSwgc291cmNlRnJhbWUpXG57XG4gICAgLy9UT09EIHJlZmFjdG9yIHVzYWdlIG9mIGZyYW1lLi5cbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5iaW5kKCk7XG5cbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBkZXN0aW5hdGlvbkZyYW1lIHx8IHRoaXMuZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlZmF1bHRGcmFtZTtcbiAgICB0aGlzLnNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgdGhpcy5zb3VyY2VGcmFtZSB8fCBkZXN0aW5hdGlvbkZyYW1lO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUsIHRoaXMuc291cmNlRnJhbWUgKTtcblxuICAgIGlmKHRoaXMudHJhbnNmb3JtKVxuICAgIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFwcGVuZCh0aGlzLnRyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5kZXN0aW5hdGlvbkZyYW1lICE9PSB0aGlzLnNvdXJjZUZyYW1lKVxuICAgIHtcbiAgICAgICAgZ2wuZW5hYmxlKGdsLlNDSVNTT1JfVEVTVCk7XG4gICAgICAgIGdsLnNjaXNzb3IodGhpcy5kZXN0aW5hdGlvbkZyYW1lLngsIHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGgqIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgIH1cblxuXG4gICAgLy8gVE9ETyAtIGRvZXMgbm90IG5lZWQgdG8gYmUgdXBkYXRlZCBhbGwgdGhlIHRpbWU/P1xuICAgIGdsLnZpZXdwb3J0KHRoaXMuZGVzdGluYXRpb25GcmFtZS54LHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuXG5cbn07XG5cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBwcm9qZWN0aW9uIG1hdHJpeCBiYXNlZCBvbiBhIHByb2plY3Rpb24gZnJhbWUgKHdoaWNoIGlzIGEgcmVjdGFuZ2xlKVxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jYWxjdWxhdGVQcm9qZWN0aW9uID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcblxuICAgIHNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHBtLmlkZW50aXR5KCk7XG5cbiAgICAvLyBUT0RPOiBtYWtlIGRlc3Qgc2NhbGUgc291cmNlXG4gICAgaWYgKCF0aGlzLnJvb3QpXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBzb3VyY2VGcmFtZS54ICogcG0uYTtcbiAgICAgICAgcG0udHkgPSAtMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IC0xIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBSZXNpemVzIHRoZSB0ZXh0dXJlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7TnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gaGVpZ2h0IHtOdW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgd2lkdGggPSB3aWR0aCB8IDA7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDtcblxuICAgIGlmICh0aGlzLnNpemUud2lkdGggPT09IHdpZHRoICYmIHRoaXMuc2l6ZS5oZWlnaHQgPT09IGhlaWdodCkgXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZGVmYXVsdEZyYW1lLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5kZWZhdWx0RnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5yZXNpemUod2lkdGggKiB0aGlzLnJlc29sdXRpb24sIGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCBwcm9qZWN0aW9uRnJhbWUgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHJlbmRlciB0YXJnZXQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFN0ZW5jaWxNYXNrU3RhY2soKVxue1xuXHQvKipcbiAgICAgKiBUaGUgYWN0dWFsIHN0YWNrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVE9ETyBAYWx2aW5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvdW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb3VudCA9IDA7XG59XG5cblN0ZW5jaWxNYXNrU3RhY2sucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RlbmNpbE1hc2tTdGFjaztcbm1vZHVsZS5leHBvcnRzID0gU3RlbmNpbE1hc2tTdGFjaztcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBNYXBzIGdsIGJsZW5kIGNvbWJpbmF0aW9ucyB0byBXZWJHTFxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcbiAgICBvYmplY3QgPSBvYmplY3QgfHwge307XG5cbiAgICAvL1RPRE8gLSBwcmVtdWx0aXBseSBhbHBoYSB3b3VsZCBiZSBkaWZmZXJlbnQuXG4gICAgLy9hZGQgYSBib29sZWFuIGZvciB0aGF0IVxuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdICAgICAgICA9IFtnbC5PTkUsICAgICAgIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLkRTVF9BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk1VTFRJUExZXSAgICAgID0gW2dsLkRTVF9DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gW2dsLlNSQ19BTFBIQSwgZ2wuT05FXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VdICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSFVFXSAgICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcblxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpO1xuIiwiQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbCwgb2JqZWN0KVxue1xuXHRvYmplY3Q9IG9iamVjdCB8fCB7fTtcblxuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlBPSU5UU10gICAgICAgICA9IGdsLlBPSU5UUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FU10gICAgICAgICAgPSBnbC5MSU5FUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FX0xPT1BdICAgICAgPSBnbC5MSU5FX0xPT1A7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9TVFJJUF0gICAgID0gZ2wuTElORV9TVFJJUDtcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5UUklBTkdMRVNdICAgICAgPSBnbC5UUklBTkdMRVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBdID0gZ2wuVFJJQU5HTEVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXSAgID0gZ2wuVFJJQU5HTEVfRkFOO1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGk7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIFNwcml0ZSBvYmplY3QgaXMgdGhlIGJhc2UgZm9yIGFsbCB0ZXh0dXJlZCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIHRvIHRoZSBzY3JlZW5cbiAqXG4gKiBBIHNwcml0ZSBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGFuIGltYWdlIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSBmb3IgdGhpcyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gU3ByaXRlKHRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW5jaG9yIHNldHMgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLDAgdGhpcyBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMC41LDAuNSBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyBjZW50ZXJlZFxuICAgICAqIFNldHRpbmcgdGhlIGFuY2hvciB0byAxLDEgd291bGQgbWVhbiB0aGUgdGV4dHVyZSdzIG9yaWdpbiBwb2ludCB3aWxsIGJlIHRoZSBib3R0b20gcmlnaHQgY29ybmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuYW5jaG9yID0gbmV3IG1hdGguUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgc3ByaXRlICh0aGlzIGlzIGluaXRpYWxseSBzZXQgYnkgdGhlIHRleHR1cmUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBIHZhbHVlIG9mIDB4RkZGRkZGIHdpbGwgcmVtb3ZlIGFueSB0aW50IGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaGFkZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBzcHJpdGUuIFNldCB0byBudWxsIHRvIHJlbW92ZSBhIGN1cnJlbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5BYnN0cmFjdEZpbHRlcnxQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBjYWNoZWQgdmFsdWUgb2YgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8vIGNhbGwgdGV4dHVyZSBzZXR0ZXJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG4gICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlXG4gICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy52ZXJ0ZXhEYXRhID0gbmV3IEZsb2F0MzJBcnJheSg4KTtcbn1cblxuLy8gY29uc3RydWN0b3JcblNwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuc2NhbGUueCkgKiB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBNYXRoLmFicyh0aGlzLnNjYWxlLnkpICogdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc2lnbiA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS55KSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gc2lnbiAqIHZhbHVlIC8gdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5TcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIHNvIGlmIF93aWR0aCBpcyAwIHRoZW4gd2lkdGggd2FzIG5vdCBzZXQuLlxuICAgIGlmICh0aGlzLl93aWR0aClcbiAgICB7XG4gICAgICAgIHRoaXMuc2NhbGUueCA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS54KSAqIHRoaXMuX3dpZHRoIC8gdGhpcy50ZXh0dXJlLmZyYW1lLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnkgPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgKiB0aGlzLl9oZWlnaHQgLyB0aGlzLnRleHR1cmUuZnJhbWUuaGVpZ2h0O1xuICAgIH1cbn07XG5cblNwcml0ZS5wcm90b3R5cGUuY2FjbHVsYXRlVmVydGljZXMgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICB3dCA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICBhID0gd3QuYSwgYiA9IHd0LmIsIGMgPSB3dC5jLCBkID0gd3QuZCwgdHggPSB3dC50eCwgdHkgPSB3dC50eSxcbiAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDEsXG4gICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG4gICAgICAgIFxuICAgIGlmICh0cmltKVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkIGFuZCBpcyBub3QgYSB0aWxpbmdzcHJpdGUgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgIHcxID0gdHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgaDEgPSB0cmltLnkgLSB0aGlzLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgIGgwID0gaDEgKyB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG4gICAgfVxuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzBdID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVsxXSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzJdID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVszXSA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs0XSA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbNV0gPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs2XSA9IGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbN10gPSBkICogaDAgKyBiICogdzEgKyB0eTtcblxuXG59XG5cbi8qKlxuKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMudGV4dHVyZURpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMudmVydGV4RGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICB9XG4gICAgXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBTcHJpdGUgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgc3ByaXRlXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG4gICAgICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudmVydGV4RGlydHkgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWluWCxcbiAgICAgICAgICAgIG1heFgsXG4gICAgICAgICAgICBtaW5ZLFxuICAgICAgICAgICAgbWF4WSxcbiAgICAgICAgICAgIHZlcnRleERhdGEgPSB0aGlzLnZlcnRleERhdGE7XG5cbiAgICAgICAgdmFyIHgxID0gdmVydGV4RGF0YVswXVxuICAgICAgICB2YXIgeTEgPSB2ZXJ0ZXhEYXRhWzFdXG5cbiAgICAgICAgdmFyIHgyID0gdmVydGV4RGF0YVsyXVxuICAgICAgICB2YXIgeTIgPSB2ZXJ0ZXhEYXRhWzNdXG5cbiAgICAgICAgdmFyIHgzID0gdmVydGV4RGF0YVs0XVxuICAgICAgICB2YXIgeTMgPSB2ZXJ0ZXhEYXRhWzVdXG5cbiAgICAgICAgdmFyIHg0ID0gdmVydGV4RGF0YVs2XVxuICAgICAgICB2YXIgeTQgPSB2ZXJ0ZXhEYXRhWzddXG5cbiAgICAgICAgbWluWCA9IHgxO1xuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MTtcbiAgICAgICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICAgICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICAgICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgICAgICBtYXhYID0geDE7XG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkxO1xuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIC8vIGNoZWNrIGZvciBjaGlsZHJlblxuICAgICAgICBpZih0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkQm91bmRzID0gdGhpcy5jb250YWluZXJHZXRCb3VuZHMoKTtcblxuICAgICAgICAgICAgdzAgPSBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgdzEgPSBjaGlsZEJvdW5kcy54ICsgY2hpbGRCb3VuZHMud2lkdGg7XG4gICAgICAgICAgICBoMCA9IGNoaWxkQm91bmRzLnk7XG4gICAgICAgICAgICBoMSA9IGNoaWxkQm91bmRzLnkgKyBjaGlsZEJvdW5kcy5oZWlnaHQ7XG5cbiAgICAgICAgICAgIG1pblggPSAobWluWCA8IHcwKSA/IG1pblggOiB3MDtcbiAgICAgICAgICAgIG1pblkgPSAobWluWSA8IGgwKSA/IG1pblkgOiBoMDtcblxuICAgICAgICAgICAgbWF4WCA9IChtYXhYID4gdzEpID8gbWF4WCA6IHcxO1xuICAgICAgICAgICAgbWF4WSA9IChtYXhZID4gaDEpID8gbWF4WSA6IGgxO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2JvdW5kcy54ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB0aGlzLl9ib3VuZHMueSA9IC10aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRoaXMuX2JvdW5kcy5oZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgcmV0dXJuIHRoaXMuX2JvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHNwcml0ZVxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5TcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy50ZXh0dXJlLmNyb3Aud2lkdGggPD0gMCB8fCB0aGlzLnRleHR1cmUuY3JvcC5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyAgSWdub3JlIG51bGwgc291cmNlc1xuICAgIGlmICh0aGlzLnRleHR1cmUudmFsaWQpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgICAgICB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgICAgICBkeCxcbiAgICAgICAgICAgIGR5LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ7XG5cbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgICAgICAvLyBJZiBzbW9vdGhpbmdFbmFibGVkIGlzIHN1cHBvcnRlZCBhbmQgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIHNtb290aGluZyBwcm9wZXJ0eSBmb3IgdGhpcyB0ZXh0dXJlXG4gICAgICAgIHZhciBzbW9vdGhpbmdFbmFibGVkID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5zY2FsZU1vZGUgPT09IENPTlNULlNDQUxFX01PREVTLkxJTkVBUjtcbiAgICAgICAgaWYgKHJlbmRlcmVyLnNtb290aFByb3BlcnR5ICYmIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldICE9PSBzbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0W3JlbmRlcmVyLnNtb290aFByb3BlcnR5XSA9IHNtb290aGluZ0VuYWJsZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgdGV4dHVyZSBpcyB0cmltbWVkIHdlIG9mZnNldCBieSB0aGUgdHJpbSB4L3ksIG90aGVyd2lzZSB3ZSB1c2UgdGhlIGZyYW1lIGRpbWVuc2lvbnNcblxuICAgICAgICBpZih0ZXh0dXJlLnJvdGF0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2lkdGggPSB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBkeCA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgXG4gICAgICAgICAgICBkeCArPSB3aWR0aDtcblxuICAgICAgICAgICAgd3QudHggPSBkeSAqIHd0LmEgKyBkeCAqIHd0LmMgKyB3dC50eDtcbiAgICAgICAgICAgIHd0LnR5ID0gZHkgKiB3dC5iICsgZHggKiB3dC5kICsgd3QudHk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gd3QuYTtcbiAgICAgICAgICAgIHd0LmEgID0gLXd0LmM7XG4gICAgICAgICAgICB3dC5jICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICB0ZW1wID0gd3QuYjtcbiAgICAgICAgICAgIHd0LmIgID0gLXd0LmQ7XG4gICAgICAgICAgICB3dC5kICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICAvLyB0aGUgYW5jaG9yIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCBhYm92ZSwgc28gbGV0cyBzZXQgaXQgdG8gemVyb1xuICAgICAgICAgICAgZHggPSAwO1xuICAgICAgICAgICAgZHkgPSAwO1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC53aWR0aDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0ZXh0dXJlLnRyaW0ud2lkdGggOiB0aGlzLmFuY2hvci54ICogLXRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRleHR1cmUudHJpbS5oZWlnaHQgOiB0aGlzLmFuY2hvci55ICogLXRleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfVxuXG5cblxuICAgICAgICAvLyBBbGxvdyBmb3IgcGl4ZWwgcm91bmRpbmdcbiAgICAgICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB3dC5hLFxuICAgICAgICAgICAgICAgIHd0LmIsXG4gICAgICAgICAgICAgICAgd3QuYyxcbiAgICAgICAgICAgICAgICB3dC5kLFxuICAgICAgICAgICAgICAgICh3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMCxcbiAgICAgICAgICAgICAgICAod3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uKSB8IDBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGR4ID0gZHggfCAwO1xuICAgICAgICAgICAgZHkgPSBkeSB8IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgd3QudHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHd0LnR5ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcblxuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIC8vIFRPRE8gY2xlYW4gdXAgY2FjaGluZyAtIGhvdyB0byBjbGVhbiB1cCB0aGUgY2FjaGVzP1xuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC54ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmNyb3AueSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeSAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHNwcml0ZSBhbmQgb3B0aW9uYWxseSBpdHMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBbZGVzdHJveVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgY3VycmVudCB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICovXG5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveVRleHR1cmUsIGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYW5jaG9yID0gbnVsbDtcblxuICAgIGlmIChkZXN0cm95VGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUuZGVzdHJveShkZXN0cm95QmFzZVRleHR1cmUpO1xuICAgIH1cblxuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn07XG5cbi8vIHNvbWUgaGVscGVyIGZ1bmN0aW9ucy4uXG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgY3Jvc3Mtb3JpZ2luIHBhcmFtZXRlclxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBzY2FsZSBtb2RlLCBzZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGZyYW1lSWRcbiAqL1xuU3ByaXRlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTcHJpdGUodGV4dHVyZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGJhc2VkIG9uIGFuIGltYWdlIHVybFxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZUlkIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblNwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFNwcml0ZShUZXh0dXJlLmZyb21JbWFnZShpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSk7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyJyksXG4gICAgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzJyksXG4gICAgZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIGdsQ29yZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFNwcml0ZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9TcHJpdGVSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKiBSZW5kZXJlciBkZWRpY2F0ZWQgdG8gZHJhd2luZyBhbmQgYmF0Y2hpbmcgc3ByaXRlcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZVJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIHZhbHVlcyBzZW50IGluIHRoZSB2ZXJ0ZXggYnVmZmVyLlxuICAgICAqIHBvc2l0aW9uWCwgcG9zaXRpb25ZLCBjb2xvclIsIGNvbG9yRywgY29sb3JCID0gNVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydFNpemUgPSA1O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIHZlcnRleCBpbmZvcm1hdGlvbiBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBpbWFnZXMgaW4gdGhlIFNwcml0ZUJhdGNoIGJlZm9yZSBpdCBmbHVzaGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IENPTlNULlNQUklURV9CQVRDSF9TSVpFOyAvLyAyMDAwIGlzIGEgbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIC8gZGVza3RvcFxuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBpbiBvdXIgYmF0Y2hcbiAgICB2YXIgbnVtVmVydHMgPSAodGhpcy5zaXplICogNCkgKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYmF0Y2gsIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgICB2YXIgbnVtSW5kaWNlcyA9IHRoaXMuc2l6ZSAqIDY7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgdmVydGV4IGRhdGEgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdGhlIHZlcnRleCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEFycmF5QnVmZmVyKG51bVZlcnRzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgRmxvYXQzMkFycmF5IGZvciBwb3NpdGlvbnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG4gICAgXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBVaW50MzJBcnJheSBmb3IgdXZzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciBjb2xvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXMgb2YgdGhlIGdlb21ldHJ5IChxdWFkcykgdG8gZHJhd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzKHRoaXMuc2l6ZSlcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICBcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIHRoaXMuZ3JvdXBzID0gW107XG4gICAgXG4gICAgLy9UT0RPIC0gMzAwIGlzIGEgYml0IG1hZ2ljLCBmaWd1cmUgb3V0IGEgbmljZXIgYW1vdW50IVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zaXplOyBpKyspIFxuICAgIHtcbiAgICAgICAgdGhpcy5ncm91cHNbaV0gPSB7dGV4dHVyZXM6W10sIHRleHR1cmVDb3VudDowLCBpZHM6W10sIHNpemU6MCwgc3RhcnQ6MCwgYmxlbmQ6MH07IFxuICAgIH07XG4gICAgXG4gICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG5cbiAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbnVsbDsgICAgXG59XG5cblxuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ByaXRlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZVJlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdzcHJpdGUnLCBTcHJpdGVSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMuTUFYX1RFWFRVRVMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpO1xuXG4gICAgdGhpcy5fc2hhZGVyID0gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIoZ2wsIHRoaXMuTUFYX1RFWFRVRVMpLy9uZXcgVGV4dHVyZVNoYWRlcihnbCk7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXI7XG5cbiAgICAvLyBjcmVhdGUgYSBjb3VwbGUgb2YgYnVmZmVyc1xuICAgIHRoaXMudmVydGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlcihnbCwgbnVsbCwgZ2wuRFlOQU1JQ19EUkFXKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyKGdsLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIC8vIGJ1aWxkIHRoZSB2YW8gb2JqZWN0IHRoYXQgd2lsbCByZW5kZXIuLlxuICAgIHRoaXMudmFvID0gbmV3IGdsQ29yZS5WZXJ0ZXhBcnJheU9iamVjdChnbCk7XG5cbiAgICB0aGlzLnZhby5hZGRJbmRleCh0aGlzLmluZGV4QnVmZmVyKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCBnbC5VTlNJR05FRF9TSE9SVCwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDIgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgZ2wuVU5TSUdORURfQllURSwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDMgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlSWQsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDQgKiA0KTtcblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IDk5OTk5O1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHJlbmRlciB3aGVuIHVzaW5nIHRoaXMgc3ByaXRlYmF0Y2hcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChzcHJpdGUpXG57XG4gICAgLy9UT0RPIHNldCBibGVuZCBtb2Rlcy4uXG4gICAgLy8gY2hlY2sgdGV4dHVyZS4uXG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID49IHRoaXMuc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICB9XG5cbiAgXG4gICAgLy8gZ2V0IHRoZSB1dnMgZm9yIHRoZSB0ZXh0dXJlXG4gICBcblxuICAgIC8vIGlmIHRoZSB1dnMgaGF2ZSBub3QgdXBkYXRlZCB0aGVuIG5vIHBvaW50IHJlbmRlcmluZyBqdXN0IHlldCFcbiAgICBpZiAoIXNwcml0ZS50ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgIC8vIHB1c2ggYSB0ZXh0dXJlLlxuICAgIC8vIGluY3JlbWVudCB0aGUgYmF0Y2hzaXplXG4gICAgdmFyIG5leHRUZXh0dXJlID0gIHNwcml0ZS50ZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIHZhciBjdXJyZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRHcm91cDtcbiAgICB2YXIgaTtcblxuICAgIGlmKHRoaXMuY3VycmVudFRleHR1cmUgIT09IG5leHRUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG5leHRUZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgaWYoIW5leHRUZXh0dXJlLl9lbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5fZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5faWQgPSB0aGlzLnRleHR1cmVDb3VudDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy50ZXh0dXJlQ291bnQgPT09IHRoaXMuTUFYX1RFWFRVRVMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50OyBpKyspIFxuICAgICAgICAgICAgICAgIHsgICAgIFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnNpemUgPSB0aGlzLmN1cnJlbnRJbmRleCAtIGN1cnJlbnRHcm91cC5zdGFydDtcbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC5zdGFydCA9IHRoaXMuY3VycmVudEluZGV4O1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCsrXSA9IG5leHRUZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcbiAgICB9XG5cbiAgICAvLyBUT0RPIHRyaW0/P1xuICAgIHZhciBpbmRleCA9IHRoaXMuY3VycmVudEluZGV4ICogdGhpcy52ZXJ0Qnl0ZVNpemU7XG5cbiAgICB0aGlzLmN1cnJlbnRJbmRleCsrO1xuXG4gICAgLy8gdXBsb2FkIHRoZSBzcHJpdGUgZWxlbWV0bnMuLi5cbiAgICAvLyB0aGV5IGhhdmUgYWxsIHJlYWR5IGJlZW4gY2FsY3VsYXRlZCBzbyB3ZSBqdXN0IG5lZWQgdG8gcHVzaCB0aGVtIGludG8gdGhlIGJ1ZmZlci5cbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG4gICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMucG9zaXRpb25zO1xuICAgIHZhciB2ZXJ0ZXhEYXRhID0gc3ByaXRlLnZlcnRleERhdGFcbiAgICB2YXIgdGludCA9IChzcHJpdGUudGludCA+PiAxNikgKyAoc3ByaXRlLnRpbnQgJiAweGZmMDApICsgKChzcHJpdGUudGludCAmIDB4ZmYpIDw8IDE2KSArIChzcHJpdGUud29ybGRBbHBoYSAqIDI1NSA8PCAyNCk7XG4gICAgdmFyIHV2cyA9IHNwcml0ZS50ZXh0dXJlLl91dnMudXZzX3VpbnQzMjtcbiAgICAvL3h5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVswXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzFdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzBdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkOyBcbiAgICBcbiAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMl07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVszXTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1sxXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNF07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs1XTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1syXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs2XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzddO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzNdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb250ZW50IGFuZCBlbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPT09IDApcmV0dXJuO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gdGhpcy5jdXJyZW50R3JvdXAuc3RhcnQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgeyAgICAgXG4gICAgICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVzW2ldLl9lbmFibGVkID0gZmFsc2U7XG4gICAgfTtcbiAgIFxuICAgIC8vIGRvIHNvbWUgc21hcnQgYXJyYXkgc3R1ZmYuLlxuICAgIC8vIGRvdWJsZSBzaXplIHNvIHdlIGRvbnQgYWx3YXkgc3ViYXJyYXkgdGhlIGVsZW1lbnRzLi5cbiAgICAvLyB1cGxvYWQgdGhlIHZlcnRzIHRvIHRoZSBidWZmZXJcbiAgICBpZiAodGhpcy5jdXJyZW50QmF0Y2hTaXplID4gKCB0aGlzLnNpemUgKiAwLjUgKSApXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlci51cGxvYWQodGhpcy52ZXJ0aWNlcywgMCwgdHJ1ZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIG8gayAuLiBzdWIgYXJyYXkgaXMgU0xPVz4/XG4gICAgICAgIHZhciB2aWV3ID0gdGhpcy5wb3NpdGlvbnMuc3ViYXJyYXkoMCwgdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZSk7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh2aWV3LCAwLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBiaW5kIHNoYWRlci4uXG4gICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHRoaXMuX3NoYWRlcik7XG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggMCApO1xuXG4gICAgLy8vIHJlbmRlciB0aGUgZ3JvdXBzLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5ncm91cENvdW50OyBpKyspIHtcbiAgICAgICAgXG4gICAgICAgIHZhciBncm91cCA9IHRoaXMuZ3JvdXBzW2ldO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ3JvdXAudGV4dHVyZUNvdW50OyBqKyspIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFRleHR1cmUoZ3JvdXAudGV4dHVyZXNbal0sIGopO1xuICAgICAgICB9O1xuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGdyb3VwLnNpemUgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgZ3JvdXAuc3RhcnQgKiA2ICogMik7XG4gICAgfTtcblxuICAgIC8vIHJlc2V0IGVsZW1lbnRzIGZvciB0aGUgbmV4dCBmbHVzaFxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cENvdW50ID0gMDtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcbiAgICB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgc3ByaXRlIGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZhby5iaW5kKCk7XG59O1xuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xuICAgIHRoaXMudmFvLnVuYmluZCgpO1xufTtcbi8qKlxuICogRGVzdHJveXMgdGhlIFNwcml0ZUJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMudmVydGljZXMgPSBudWxsO1xuICAgIHRoaXMucG9zaXRpb25zID0gbnVsbDtcbiAgICB0aGlzLmNvbG9ycyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMudmVydGV4QnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuc3ByaXRlcyA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuXG5mdW5jdGlvbiBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgbWF4VGV4dHVyZXMpXG57XG4gICAgdmFyIHZlcnRleFNyYyA9IFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcbmF0dHJpYnV0ZSBmbG9hdCBhVGV4dHVyZUlkO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyBmbG9hdCB2VGV4dHVyZUlkO1xcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2VGV4dHVyZUlkID0gYVRleHR1cmVJZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cIjtcbiAgICB2YXIgZnJhZ21lbnRTcmMgPSAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxuJyArIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKSArIFwiXFxuXFxuXCIgKyBmcmFnVGVtcGxhdGVcblxuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMucmVwbGFjZSgvXFwlXFwlL2dpLCAnMTYnKTtcblxuICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXG4gICAgdmFyIHNhbXBsZVZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkrKykge1xuICAgICAgICBzYW1wbGVWYWx1ZXNbaV0gPSBpO1xuICAgIH07XG5cbiAgICBzaGFkZXIuYmluZCgpO1xuICAgIHNoYWRlci51bmlmb3Jtcy51U2FtcGxlcnMgPSBzYW1wbGVWYWx1ZXM7XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVNhbXBsZVNyYyhtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgc3JjID0gJ3ZlYzQgZ2V0U2FtcGxlRnJvbUFycmF5KHNhbXBsZXIyRCB0ZXh0dXJlc1slJV0sIGludCBuZHgsIHZlYzIgdXYpIHtcXG5cXG52ZWM0IGNvbG9yOydcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSBcbiAgICB7XG4gICAgICAgIGlmKGkgPiAwKXNyYyArPSAnXFxuZWxzZSAnO1xuICAgICAgICBpZihpIDwgbWF4VGV4dHVyZXMtMSlzcmMgKz0gJ2lmKG5keCA9PSAnICsgaSArICcpJztcbiAgICAgICAgc3JjICs9ICdcXG57JztcbiAgICAgICAgc3JjICs9ICdcXG5cXHRjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlc1snK2krJ10sIHV2KTsnO1xuICAgICAgICBzcmMgKz0gJ1xcbn0nO1xuICAgIH07XG5cbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAncmV0dXJuIGNvbG9yOyc7XG4gICAgc3JjICs9ICdcXG59JztcblxuICAgIHJldHVybiBzcmM7XG59XG5cbnZhciBmcmFnVGVtcGxhdGUgPSBbXG5cbiAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuICAgICd2YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7JyxcbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJzWyUlXTsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnZ2xfRnJhZ0NvbG9yID0gZ2V0U2FtcGxlRnJvbUFycmF5KHVTYW1wbGVycywgaW50KHZUZXh0dXJlSWQpLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvcjsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcjtcbiIsInZhciBTcHJpdGUgPSByZXF1aXJlKCcuLi9zcHJpdGVzL1Nwcml0ZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgVGV4dCBPYmplY3Qgd2lsbCBjcmVhdGUgYSBsaW5lIG9yIG11bHRpcGxlIGxpbmVzIG9mIHRleHQuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJyBpbiB5b3VyIHRleHQgc3RyaW5nLFxuICogb3IgYWRkIGEgd29yZFdyYXAgcHJvcGVydHkgc2V0IHRvIHRydWUgYW5kIGFuZCB3b3JkV3JhcFdpZHRoIHByb3BlcnR5IHdpdGggYSB2YWx1ZSBpbiB0aGUgc3R5bGUgb2JqZWN0LlxuICpcbiAqIEEgVGV4dCBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGEgc3RyaW5nIGFuZCBhIHN0eWxlIG9iamVjdFxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dCA9IG5ldyBQSVhJLlRleHQoJ1RoaXMgaXMgYSBwaXhpIHRleHQnLHtmb250IDogJzI0cHggQXJpYWwnLCBmaWxsIDogMHhmZjEwMTAsIGFsaWduIDogJ2NlbnRlcid9KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBbc3R5bGVdIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnRdIHtzdHJpbmd9IGRlZmF1bHQgJ2JvbGQgMjBweCBBcmlhbCcgVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gKiBAcGFyYW0gW3N0eWxlLmZpbGw9J2JsYWNrJ10ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdCBzaW5nbGUgbGluZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZV0ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBzdHJva2UgZS5nICdibHVlJywgJyNGQ0ZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZVRoaWNrbmVzcz0wXSB7bnVtYmVyfSBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgc3Ryb2tlLiBEZWZhdWx0IGlzIDAgKG5vIHN0cm9rZSlcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXAsIGl0IG5lZWRzIHdvcmRXcmFwIHRvIGJlIHNldCB0byB0cnVlXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvdz1mYWxzZV0ge2Jvb2xlYW59IFNldCBhIGRyb3Agc2hhZG93IGZvciB0aGUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93QW5nbGU9TWF0aC5QSS80XSB7bnVtYmVyfSBTZXQgYSBhbmdsZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAqIEBwYXJhbSBbc3R5bGUucGFkZGluZz0wXSB7bnVtYmVyfSBPY2Nhc2lvbmFsbHkgc29tZSBmb250cyBhcmUgY3JvcHBlZCBvbiB0b3Agb3IgYm90dG9tLiBBZGRpbmcgc29tZSBwYWRkaW5nIHdpbGxcbiAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVKb2luPSdtaXRlciddIHtzdHJpbmd9IFRoZSBsaW5lSm9pbiBwcm9wZXJ0eSBzZXRzIHRoZSB0eXBlIG9mIGNvcm5lciBjcmVhdGVkLCBpdCBjYW4gcmVzb2x2ZVxuICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAqICAgICAgb3IgaW5jcmVhc2UgdGhlIHNwaWtpbmVzcyBvZiByZW5kZXJlZCB0ZXh0LlxuICovXG5mdW5jdGlvbiBUZXh0KHRleHQsIHN0eWxlLCByZXNvbHV0aW9uKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgZWxlbWVudCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gdG9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGhcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIGNhbnZhcy5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXModGhpcy5jYW52YXMpO1xuICAgIHRleHR1cmUudHJpbSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuICAgIFNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3ByaXRlLnByb3RvdHlwZSk7XG5UZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHQ7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHQ7XG5cblRleHQuZm9udFByb3BlcnRpZXNDYWNoZSA9IHt9O1xuVGV4dC5mb250UHJvcGVydGllc0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuVGV4dC5mb250UHJvcGVydGllc0NvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHQucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueCAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dCwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc2NhbGUueSAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlIC8gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBzdHlsZSBvZiB0aGUgdGV4dFxuICAgICAqXG4gICAgICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmZvbnQ9J2JvbGQgMjBwdCBBcmlhbCddIHtzdHJpbmd9IFRoZSBzdHlsZSBhbmQgc2l6ZSBvZiB0aGUgZm9udFxuICAgICAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGVnICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnN0cm9rZT0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlZyAnYmx1ZScsICcjRkNGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICAgICAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcFdpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIGF0IHdoaWNoIHRleHQgd2lsbCB3cmFwXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSGVpZ2h0XSB7bnVtYmVyfSBUaGUgbGluZSBoZWlnaHQsIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgc3BhY2UgdGhhdCBhIGxldHRlciB1c2VzXG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfG51bWJlcn0gQSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgb24gdGhlIGRyb3BzaGFkb3cgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzZdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0JsdXI9MF0ge251bWJlcn0gU2V0IGEgc2hhZG93IGJsdXIgcmFkaXVzXG4gICAgICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICAgICAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLnRleHRCYXNlbGluZT0nYWxwaGFiZXRpYyddIHtzdHJpbmd9IFRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dCB0aGF0IGlzIHJlbmRlcmVkLlxuICAgICAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gICAgICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gICAgICogQHBhcmFtIFtzdHlsZS5taXRlckxpbWl0PTEwXSB7bnVtYmVyfSBUaGUgbWl0ZXIgbGltaXQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdtaXRlcicgbGluZUpvaW4gbW9kZS4gVGhpcyBjYW4gcmVkdWNlXG4gICAgICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICBzdHlsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdHlsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3R5bGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZmlsbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5maWxsID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5maWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5zdHJva2UgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5zdHJva2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmRyb3BTaGFkb3dDb2xvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlLmZvbnQgPSBzdHlsZS5mb250IHx8ICdib2xkIDIwcHQgQXJpYWwnO1xuICAgICAgICAgICAgc3R5bGUuZmlsbCA9IHN0eWxlLmZpbGwgfHwgJ2JsYWNrJztcbiAgICAgICAgICAgIHN0eWxlLmFsaWduID0gc3R5bGUuYWxpZ24gfHwgJ2xlZnQnO1xuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gc3R5bGUuc3Ryb2tlIHx8ICdibGFjayc7IC8vcHJvdmlkZSBhIGRlZmF1bHQsIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2lzc3Vlcy8xMzZcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZVRoaWNrbmVzcyA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyB8fCAwO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXAgPSBzdHlsZS53b3JkV3JhcCB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLndvcmRXcmFwV2lkdGggPSBzdHlsZS53b3JkV3JhcFdpZHRoIHx8IDEwMDtcblxuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvdyA9IHN0eWxlLmRyb3BTaGFkb3cgfHwgZmFsc2U7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3IgfHwgJyMwMDAwMDAnO1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0FuZ2xlID0gc3R5bGUuZHJvcFNoYWRvd0FuZ2xlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93QW5nbGUgOiBNYXRoLlBJIC8gNjtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSA9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlIDogNTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXIgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dCbHVyIDogMDsgLy9zaGFkb3dCbHVyIGlzICcwJyBieSBkZWZhdWx0IGFjY29yZGluZyB0byBIVE1MXG5cbiAgICAgICAgICAgIHN0eWxlLnBhZGRpbmcgPSBzdHlsZS5wYWRkaW5nIHx8IDA7XG5cbiAgICAgICAgICAgIHN0eWxlLnRleHRCYXNlbGluZSA9IHN0eWxlLnRleHRCYXNlbGluZSB8fCAnYWxwaGFiZXRpYyc7XG5cbiAgICAgICAgICAgIHN0eWxlLmxpbmVKb2luID0gc3R5bGUubGluZUpvaW4gfHwgJ21pdGVyJztcbiAgICAgICAgICAgIHN0eWxlLm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0IHx8IDEwO1xuXG4gICAgICAgICAgICB0aGlzLl9zdHlsZSA9IHN0eWxlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjb3B5IGZvciB0aGUgdGV4dCBvYmplY3QuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHRleHQpe1xuICAgICAgICAgICAgdGV4dCA9IHRleHQudG9TdHJpbmcoKSB8fCAnICc7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dCA9PT0gdGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdGV4dDtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHN0eWxlID0gdGhpcy5fc3R5bGU7XG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuXG4gICAgLy8gd29yZCB3cmFwXG4gICAgLy8gcHJlc2VydmUgb3JpZ2luYWwgdGV4dFxuICAgIHZhciBvdXRwdXRUZXh0ID0gc3R5bGUud29yZFdyYXAgPyB0aGlzLndvcmRXcmFwKHRoaXMuX3RleHQpIDogdGhpcy5fdGV4dDtcblxuICAgIC8vIHNwbGl0IHRleHQgaW50byBsaW5lc1xuICAgIHZhciBsaW5lcyA9IG91dHB1dFRleHQuc3BsaXQoLyg/OlxcclxcbnxcXHJ8XFxuKS8pO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgd2lkdGhcbiAgICB2YXIgbGluZVdpZHRocyA9IG5ldyBBcnJheShsaW5lcy5sZW5ndGgpO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBmb250UHJvcGVydGllcyA9IHRoaXMuZGV0ZXJtaW5lRm9udFByb3BlcnRpZXMoc3R5bGUuZm9udCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBsaW5lV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQobGluZXNbaV0pLndpZHRoO1xuICAgICAgICBsaW5lV2lkdGhzW2ldID0gbGluZVdpZHRoO1xuICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxpbmVXaWR0aCk7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gbWF4TGluZVdpZHRoICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgd2lkdGggKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gKCB3aWR0aCArIHRoaXMuY29udGV4dC5saW5lV2lkdGggKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIC8vIGNhbGN1bGF0ZSB0ZXh0IGhlaWdodFxuICAgIHZhciBsaW5lSGVpZ2h0ID0gdGhpcy5zdHlsZS5saW5lSGVpZ2h0IHx8IGZvbnRQcm9wZXJ0aWVzLmZvbnRTaXplICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuXG4gICAgdmFyIGhlaWdodCA9IGxpbmVIZWlnaHQgKiBsaW5lcy5sZW5ndGg7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBoZWlnaHQgKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9ICggaGVpZ2h0ICsgdGhpcy5fc3R5bGUucGFkZGluZyAqIDIgKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMuY29udGV4dC5zY2FsZSggdGhpcy5yZXNvbHV0aW9uLCB0aGlzLnJlc29sdXRpb24pO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIH1cblxuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxTdHlsZT1cIiNGRjAwMDBcIjtcbiAgICAvL3RoaXMuY29udGV4dC5maWxsUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIHRoaXMuY29udGV4dC5mb250ID0gc3R5bGUuZm9udDtcbiAgICB0aGlzLmNvbnRleHQuc3Ryb2tlU3R5bGUgPSBzdHlsZS5zdHJva2U7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcbiAgICB0aGlzLmNvbnRleHQudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lO1xuICAgIHRoaXMuY29udGV4dC5saW5lSm9pbiA9IHN0eWxlLmxpbmVKb2luO1xuICAgIHRoaXMuY29udGV4dC5taXRlckxpbWl0ID0gc3R5bGUubWl0ZXJMaW1pdDtcblxuICAgIHZhciBsaW5lUG9zaXRpb25YO1xuICAgIHZhciBsaW5lUG9zaXRpb25ZO1xuXG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBpZiAoc3R5bGUuZHJvcFNoYWRvd0JsdXIgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3I7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Qmx1ciA9IHN0eWxlLmRyb3BTaGFkb3dCbHVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4U2hhZG93T2Zmc2V0ID0gTWF0aC5jb3Moc3R5bGUuZHJvcFNoYWRvd0FuZ2xlKSAqIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICAgICAgdmFyIHlTaGFkb3dPZmZzZXQgPSBNYXRoLnNpbihzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogbGluZUhlaWdodCkgKyBmb250UHJvcGVydGllcy5hc2NlbnQ7XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblggKyB4U2hhZG93T2Zmc2V0LCBsaW5lUG9zaXRpb25ZICsgeVNoYWRvd09mZnNldCArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9zZXQgY2FudmFzIHRleHQgc3R5bGVzXG4gICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmZpbGw7XG5cbiAgICAvL2RyYXcgbGluZXMgbGluZSBieSBsaW5lXG4gICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICBpZiAoc3R5bGUuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHlsZS5zdHJva2UgJiYgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVUZXh0dXJlKCk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLnRyaW0ueCA9IDA7XG4gICAgdGV4dHVyZS50cmltLnkgPSAtdGhpcy5fc3R5bGUucGFkZGluZztcblxuICAgIHRleHR1cmUudHJpbS53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRleHR1cmUudHJpbS5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgLSB0aGlzLl9zdHlsZS5wYWRkaW5nKjI7XG5cbiAgICB0aGlzLl93aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuX2hlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZW1pdCgndXBkYXRlJywgIHRleHR1cmUuYmFzZVRleHR1cmUpO1xuXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKi9cblRleHQucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgLy90aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUucmVuZGVyV2ViR0wuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgIC8vICAgdGhpcy5yZXNvbHV0aW9uID0gMS8vcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGFzY2VudCwgZGVzY2VudCBhbmQgZm9udFNpemUgb2YgYSBnaXZlbiBmb250U3R5bGVcbiAqXG4gKiBAcGFyYW0gZm9udFN0eWxlIHtvYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5kZXRlcm1pbmVGb250UHJvcGVydGllcyA9IGZ1bmN0aW9uIChmb250U3R5bGUpXG57XG4gICAgdmFyIHByb3BlcnRpZXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXTtcblxuICAgIGlmICghcHJvcGVydGllcylcbiAgICB7XG4gICAgICAgIHByb3BlcnRpZXMgPSB7fTtcblxuICAgICAgICB2YXIgY2FudmFzID0gVGV4dC5mb250UHJvcGVydGllc0NhbnZhcztcbiAgICAgICAgdmFyIGNvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dDtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgdmFyIHdpZHRoID0gTWF0aC5jZWlsKGNvbnRleHQubWVhc3VyZVRleHQoJ3xNw4lxJykud2lkdGgpO1xuICAgICAgICB2YXIgYmFzZWxpbmUgPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnTScpLndpZHRoKTtcbiAgICAgICAgdmFyIGhlaWdodCA9IDIgKiBiYXNlbGluZTtcblxuICAgICAgICBiYXNlbGluZSA9IGJhc2VsaW5lICogMS40IHwgMDtcblxuICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjZjAwJztcbiAgICAgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgY29udGV4dC50ZXh0QmFzZWxpbmUgPSAnYWxwaGFiZXRpYyc7XG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMwMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxUZXh0KCd8TcOJcScsIDAsIGJhc2VsaW5lKTtcblxuICAgICAgICB2YXIgaW1hZ2VkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCkuZGF0YTtcbiAgICAgICAgdmFyIHBpeGVscyA9IGltYWdlZGF0YS5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lID0gd2lkdGggKiA0O1xuXG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIHZhciBpZHggPSAwO1xuICAgICAgICB2YXIgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGFzY2VudC4gc2NhbiBmcm9tIHRvcCB0byBib3R0b20gdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGJhc2VsaW5lOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggKz0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuYXNjZW50ID0gYmFzZWxpbmUgLSBpO1xuXG4gICAgICAgIGlkeCA9IHBpeGVscyAtIGxpbmU7XG4gICAgICAgIHN0b3AgPSBmYWxzZTtcblxuICAgICAgICAvLyBkZXNjZW50LiBzY2FuIGZyb20gYm90dG9tIHRvIHRvcCB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSBoZWlnaHQ7IGkgPiBiYXNlbGluZTsgaS0tKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGluZTsgaiArPSA0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0b3ApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWR4IC09IGxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLmRlc2NlbnQgPSBpIC0gYmFzZWxpbmU7XG4gICAgICAgIHByb3BlcnRpZXMuZm9udFNpemUgPSBwcm9wZXJ0aWVzLmFzY2VudCArIHByb3BlcnRpZXMuZGVzY2VudDtcblxuICAgICAgICBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXSA9IHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgbmV3bGluZXMgdG8gYSBzdHJpbmcgdG8gaGF2ZSBpdCBvcHRpbWFsbHkgZml0IGludG8gdGhlIGhvcml6b250YWxcbiAqIGJvdW5kcyBzZXQgYnkgdGhlIFRleHQgb2JqZWN0J3Mgd29yZFdyYXBXaWR0aCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUud29yZFdyYXAgPSBmdW5jdGlvbiAodGV4dClcbntcbiAgICAvLyBHcmVlZHkgd3JhcHBpbmcgYWxnb3JpdGhtIHRoYXQgd2lsbCB3cmFwIHdvcmRzIGFzIHRoZSBsaW5lIGdyb3dzIGxvbmdlclxuICAgIC8vIHRoYW4gaXRzIGhvcml6b250YWwgYm91bmRzLlxuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgICB2YXIgd29yZFdyYXBXaWR0aCA9IHRoaXMuX3N0eWxlLndvcmRXcmFwV2lkdGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcGFjZUxlZnQgPSB3b3JkV3JhcFdpZHRoO1xuICAgICAgICB2YXIgd29yZHMgPSBsaW5lc1tpXS5zcGxpdCgnICcpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdvcmRzLmxlbmd0aDsgaisrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgd29yZFdpZHRoID0gdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KHdvcmRzW2pdKS53aWR0aDtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGhXaXRoU3BhY2UgPSB3b3JkV2lkdGggKyB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQoJyAnKS53aWR0aDtcbiAgICAgICAgICAgIGlmIChqID09PSAwIHx8IHdvcmRXaWR0aFdpdGhTcGFjZSA+IHNwYWNlTGVmdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHByaW50aW5nIHRoZSBuZXdsaW5lIGlmIGl0J3MgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxpbmUgdGhhdCBpc1xuICAgICAgICAgICAgICAgIC8vIGdyZWF0ZXIgdGhhbiB0aGUgd29yZCB3cmFwIHdpZHRoLlxuICAgICAgICAgICAgICAgIGlmIChqID4gMClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdvcmRzW2pdO1xuICAgICAgICAgICAgICAgIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGggLSB3b3JkV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0IC09IHdvcmRXaWR0aFdpdGhTcGFjZTtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyAnICsgd29yZHNbal07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaSA8IGxpbmVzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBUZXh0IGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIFRleHRcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIHJldHVybiBTcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcy5jYWxsKHRoaXMsIG1hdHJpeCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dCBvYmplY3QuXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9dHJ1ZV0ge2Jvb2xlYW59IHdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZVRleHR1cmUpXG57XG4gICAgLy8gbWFrZSBzdXJlIHRvIHJlc2V0IHRoZSB0aGUgY29udGV4dCBhbmQgY2FudmFzLi4gZG9udCB3YW50IHRoaXMgaGFuZ2luZyBhcm91bmQgaW4gbWVtb3J5IVxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xuXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG59O1xuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9GaWx0ZXJNYW5hZ2VyJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgdGVtcFJlY3QgPSBuZXcgbWF0aC5SZWN0YW5nbGUoKTtcblxuLyoqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBCYXNlUmVuZGVyVGV4dHVyZSBzaG91bGQgYmUgcHJlbG9hZGVkXG4gKiBvdGhlcndpc2UgYmxhY2sgcmVjdGFuZ2xlcyB3aWxsIGJlIGRyYXduIGluc3RlYWQuXG4gKlxuICogQSBCYXNlUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIEJhc2VyZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIDgwMCwgNjAwKTtcbiAqIHZhciBzcHJpdGUgPSBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJzcGluT2JqXzAxLnBuZ1wiKTtcbiAqXG4gKiBzcHJpdGUucG9zaXRpb24ueCA9IDgwMC8yO1xuICogc3ByaXRlLnBvc2l0aW9uLnkgPSA2MDAvMjtcbiAqIHNwcml0ZS5hbmNob3IueCA9IDAuNTtcbiAqIHNwcml0ZS5hbmNob3IueSA9IDAuNTtcbiAqXG4gKiBCYXNlcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgQmFzZXJlbmRlclRleHR1cmVcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgZm9yIHRoaXMgQmFzZVJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgaWYgKCFyZW5kZXJlcilcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNyZWF0ZSBCYXNlUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgbnVsbCwgc2NhbGVNb2RlKTtcbiAgIFxuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAxMDA7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OOztcbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIERyYXcvcmVuZGVyIHRoZSBnaXZlbiBEaXNwbGF5T2JqZWN0IG9udG8gdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheU9iamVjdCBhbmQgZGVzY2VuZGVudHMgYXJlIHRyYW5zZm9ybWVkIGR1cmluZyB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBJZiBgdXBkYXRlVHJhbnNmb3JtYCBpcyB0cnVlIHRoZW4gdGhlIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkIGJlZm9yZSB0aGVcbiAgICAgKiBtZXRob2QgcmV0dXJucy4gT3RoZXJ3aXNlIGl0IGlzIHVwIHRvIHRoZSBjYWxsaW5nIGNvZGUgdG8gY29ycmVjdGx5IHVzZSBvciByZXNldFxuICAgICAqIHRoZSB0cmFuc2Zvcm1lZCBkaXNwbGF5IG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgaXMgYWx3YXlzIHJlbmRlcmVkIHdpdGggYSB3b3JsZEFscGhhIHZhbHVlIG9mIDEuXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAgICAgKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBPcHRpb25hbCBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIGRpc3BsYXkgb2JqZWN0IGJlZm9yZSByZW5kZXJpbmcuXG4gICAgICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICAgICAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gICAgICogIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkLiBOb3QgcmVzdG9yaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBhIGxpdHRsZSBmYXN0ZXIuXG4gICAgICovXG4gICAgdGhpcy5yZW5kZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgQmFzZVJlbmRlclRleHR1cmUgdXNlcy4gQSBCYXNlUmVuZGVyVGV4dHVyZSBjYW4gb25seSBiZWxvbmcgdG8gb25lIHJlbmRlcmVyIGF0IHRoZSBtb21lbnQgaWYgaXRzIHdlYkdMLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgUmVuZGVyVGFyZ2V0KGdsLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5zY2FsZU1vZGUsIHRoaXMucmVzb2x1dGlvbik7Ly8sIHRoaXMudGhpcy5zY2FsZU1vZGUpO1xuICAgICAgICB0aGlzLl9nbFRleHR1cmVzW2dsLmlkXSA9ICB0aGlzLnRleHR1cmVCdWZmZXIudGV4dHVyZTtcbiAgICAgICAgXG4gICAgICAgIC8vVE9ETyByZWZhY3RvciBmaWx0ZXIgbWFuYWdlci4uIGFzIHJlYWxseSBpdHMgbm8gbG9uZ2VyIGEgbWFuYWdlciBpZiB3ZSB1c2UgaXQgaGVyZS4uXG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJXZWJHTDtcblxuICAgICAgICAvLyB0aGUgY3JlYXRpb24gb2YgYSBmaWx0ZXIgbWFuYWdlciB1bmJpbmRzIHRoZSBidWZmZXJzLi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbiAgICAgICAgaWYodGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0KXRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJDYW52YXM7XG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIodGhpcy53aWR0aCogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbn1cblxuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlVGV4dHVyZS5wcm90b3R5cGUpO1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzZVJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VSZW5kZXJUZXh0dXJlO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGlmICh3aWR0aCA9PT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT09IHRoaXMuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5maWx0ZXJNYW5hZ2VyKVxuICAgIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLnJlbmRlcmVyLmdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcihmYWxzZSwgZGVzdGluYXRpb25GcmFtZSk7XG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gKHVwZGF0ZVRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSA/IHVwZGF0ZVRyYW5zZm9ybSA6IHRydWU7Ly8hdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnRyYW5zZm9ybSA9IG1hdHJpeDtcblxuICAgIC8vVE9ETyBub3QgYSBmYW4gdGhhdCB0aGlzIGlzIGhlcmUuLi4gaXQgd2lsbCBtb3ZlIVxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5hY3RpdmF0ZSgpO1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgaWYgKHVwZGF0ZVRyYW5zZm9ybSlcbiAgICB7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIG1hdHJpeCBvZiB0aGUgZGlzcGxhdHlPYmplY3QuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmlkZW50aXR5KCk7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgICAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRlbXBSZWN0LndpZHRoID0gZnJhbWUuaGVpZ2h0O1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IGZyYW1lLndpZHRoO1xuICAgXG4gICAgLy9UT0RPIHJlbmFtZSB0ZXh0dXJlQnVmZmVyIHRvIHJlbmRlclRhcmdldC4uXG4gICAgdmFyIHRlbXAgPSAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyID0gdGhpcy5maWx0ZXJNYW5hZ2VyO1xuICAgIFxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKGZyYW1lLCB0ZW1wUmVjdCk7XG4gICAgY29uc29sZS5sb2coZGlzcGxheU9iamVjdClcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgdGhpcy50ZXh0dXJlQnVmZmVyLCBjbGVhcik7XG5cbiAgIC8vIGNvbnNvbGUubG9nKFwiUkVOREVSSU5HIFwiKTtcbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0ZW1wO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXJdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChmcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAhIXVwZGF0ZVRyYW5zZm9ybTtcblxuICAgIHZhciB3dCA9IHRlbXBNYXRyaXg7XG5cbiAgICB3dC5pZGVudGl0eSgpO1xuXG4gICAgaWYgKG1hdHJpeClcbiAgICB7XG4gICAgICAgIHd0LmFwcGVuZChtYXRyaXgpO1xuICAgIH1cblxuXG4gICAgd3QudHggKz0gZnJhbWUueDtcbiAgICB3dC50eSArPSBmcmFtZS55O1xuXG4gICAgdmFyIGNhY2hlZFd0ID0gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybTtcbiAgICBcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gd3Q7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgdmFyIGksIGo7XG5cbiAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgXG4vLyAgICB0aGlzLnRleHR1cmVCdWZmZXIuXG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dDtcblxuICAgIHZhciByZWFsUmVzb2x1dGlvbiA9IHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHJlYWxSZXNvbHV0aW9uO1xuXG4gICAgaWYoZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9PT0gd3QpXG4gICAge1xuICAgICAgICAvLyBmaXhlcyBjYWNoZUFzQml0bWFwIEhhcHBlbmluZyBkdXJpbmcgdGhlIGFib3ZlLi5cbiAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IGNhY2hlZFd0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gZGVzdHJveUJhc2Uge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCB0cnVlKTtcblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICAvLyBkZXN0cm95IHRoZSBmaWx0ZXJtYW5hZ2VyLi5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEltYWdlID0gZnVuY3Rpb24gKGZyYW1lKVxue1xuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLnNyYyA9IHRoaXMuZ2V0QmFzZTY0KGZyYW1lKTtcbiAgICByZXR1cm4gaW1hZ2U7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIEJhc2VSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRCYXNlNjQgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRDYW52YXMoZnJhbWUpLnRvRGF0YVVSTCgpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB0byBpdCBhbmQgdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBBIENhbnZhcyBlbGVtZW50IHdpdGggdGhlIHRleHR1cmUgcmVuZGVyZWQgb24uXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgIFxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgQ2FudmFzQnVmZmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHRlbXBDYW52YXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0RhdGEuZGF0YS5zZXQod2ViR0xQaXhlbHMpO1xuXG4gICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGZyYW1lLndpZHRoID09PSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLndpZHRoICYmIFxuICAgICAgICAgICBmcmFtZS5oZWlnaHQgPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIoZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcbiAgICAgICAgICAgIHZhciBjYW52YXNEYXRhID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNvbnRleHQuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggICogcmVzb2x1dGlvbiwgZnJhbWUueSAqIHJlc29sdXRpb24sIGZyYW1lLndpZHRoICogcmVzb2x1dGlvbiwgZnJhbWUuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0ZW1wQ2FudmFzLmNhbnZhcztcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKCBmcmFtZSApXG57XG4gICAgaWYoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgZnJhbWUud2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS53aWR0aDtcbiAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IGZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YShmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoZnJhbWUsIHgsIHkpXG57XG4gICAgdGVtcFJlY3QueCA9IHg7XG4gICAgdGVtcFJlY3QueSA9IHk7XG4gICAgdGVtcFJlY3Qud2lkdGggPSAxIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZihmcmFtZSlcbiAgICB7XG4gICAgICAgIHRlbXBSZWN0LnggKz0gZnJhbWUueDtcbiAgICAgICAgdGVtcFJlY3QueSArPSBmcmFtZS55O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFBpeGVscyh0ZW1wUmVjdCk7XG59O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZS4gQWxsIHRleHR1cmVzIGhhdmUgYSBiYXNlIHRleHR1cmUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBmb3IgZGV2aWNlcyB3aXRoIGRpZmZlcmVudCBwaXhlbCByYXRpb3NcbiAqL1xuZnVuY3Rpb24gQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnVpZCA9IHV0aWxzLnVpZCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgYmFzZSB0ZXh0dXJlIHNldCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAxMDA7XG5cbiAgICAvLyBUT0RPIGRvY3NcbiAgICAvLyB1c2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgZGltZW5zaW9ucyBvZiB0aGUgc291cmNlXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIHdpZHRoIG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsV2lkdGggPSAxMDA7XG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIGhlaWdodCBvZiB0aGUgc291cmNlIG9mIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucmVhbEhlaWdodCA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlIHRvIGFwcGx5IHdoZW4gc2NhbGluZyB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlNDQUxFX01PREVTLkxJTkVBUlxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSBvbmNlIHRoZSBiYXNlIHRleHR1cmUgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG5ldmVyIHRydWUgaWYgdGhlIHVuZGVybHlpbmcgc291cmNlIGZhaWxzIHRvIGxvYWQgb3IgaGFzIG5vIHRleHR1cmUgZGF0YS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIGlmIHRoZSBzb3VyY2UgaXMgY3VycmVudGx5IGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBJZiBhbiBJbWFnZSBzb3VyY2UgaXMgbG9hZGluZyB0aGUgJ2xvYWRlZCcgb3IgJ2Vycm9yJyBldmVudCB3aWxsIGJlXG4gICAgICogZGlzcGF0Y2hlZCB3aGVuIHRoZSBvcGVyYXRpb24gZW5kcy4gQW4gdW5kZXJ5bGluZyBzb3VyY2UgdGhhdCBpc1xuICAgICAqIGltbWVkaWF0ZWx5LWF2YWlsYWJsZSBieXBhc3NlcyBsb2FkaW5nIGVudGlyZWx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGltYWdlIHNvdXJjZSB0aGF0IGlzIHVzZWQgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogVE9ETzogTWFrZSB0aGlzIGEgc2V0dGVyIHRoYXQgY2FsbHMgbG9hZFNvdXJjZSgpO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SW1hZ2V8Q2FudmFzfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuc291cmNlID0gbnVsbDsgLy8gc2V0IGluIGxvYWRTb3VyY2UsIGlmIGF0IGFsbFxuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgaWYgUkdCIGNoYW5uZWxzIHNob3VsZCBiZSBwcmUtbXVsdGlwbGllZCBieSBBbHBoYSAgKFdlYkdMIG9ubHkpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgb3Igbm90IHRoZSB0ZXh0dXJlIGlzIGEgcG93ZXIgb2YgdHdvLCB0cnkgdG8gdXNlIHBvd2VyIG9mIHR3byB0ZXh0dXJlcyBhcyBtdWNoIGFzIHlvdSBjYW5cbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSBmYWxzZTtcblxuICAgIC8vIHVzZWQgZm9yIHdlYkdMXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgYSBtaXBtYXAgb2YgdGhpcyB0ZXh0dXJlIG5lZWRzIHRvIGJlIGdlbmVyYXRlZC4gVGhpcyB2YWx1ZSBuZWVkcyB0byBiZSBzZXQgYmVmb3JlIHRoZSB0ZXh0dXJlIGlzIHVzZWRcbiAgICAgKiBBbHNvIHRoZSB0ZXh0dXJlIG11c3QgYmUgYSBwb3dlciBvZiB0d28gc2l6ZSB0byB3b3JrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubWlwbWFwID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBBIG1hcCBvZiByZW5kZXJlciBJRHMgdG8gd2ViZ2wgdGV4dHVyZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIFdlYkdMVGV4dHVyZT59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbFRleHR1cmVzID0ge307XG4gICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5faWQgPSAwO1xuICAgIFxuICAgIC8vIGlmIG5vIHNvdXJjZSBwYXNzZWQgZG9uJ3QgdHJ5IHRvIGxvYWRcbiAgICBpZiAoc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5sb2FkU291cmNlKHNvdXJjZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZpbmlzaGVzIGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZGVkXG4gICAgICogQG1lbWJlcm9mIFBJWEkuQmFzZVRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZhaWxzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG59XG5cbkJhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdGV4dHVyZSBvbiBhbGwgdGhlIHdlYmdsIHJlbmRlcmVycywgdGhpcyBhbHNvIGFzc3VtZXMgdGhlIHNyYyBoYXMgY2hhbmdlZC5cbiAqXG4gKiBAZmlyZXMgdXBkYXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVhbFdpZHRoID0gdGhpcy5zb3VyY2UubmF0dXJhbFdpZHRoIHx8IHRoaXMuc291cmNlLndpZHRoO1xuICAgIHRoaXMucmVhbEhlaWdodCA9IHRoaXMuc291cmNlLm5hdHVyYWxIZWlnaHQgfHwgdGhpcy5zb3VyY2UuaGVpZ2h0O1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMucmVhbFdpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5yZWFsSGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSB1dGlscy5pc1Bvd2VyT2ZUd28odGhpcy5yZWFsV2lkdGgsIHRoaXMucmVhbEhlaWdodCk7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBMb2FkIGEgc291cmNlLlxuICpcbiAqIElmIHRoZSBzb3VyY2UgaXMgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSwgc3VjaCBhcyBhbiBpbWFnZSB0aGF0IG5lZWRzIHRvIGJlXG4gKiBkb3dubG9hZGVkLCB0aGVuIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmUgZGlzcGF0Y2hlZCBpbiB0aGUgZnV0dXJlXG4gKiBhbmQgYGhhc0xvYWRlZGAgd2lsbCByZW1haW4gZmFsc2UgYWZ0ZXIgdGhpcyBjYWxsLlxuICpcbiAqIFRoZSBsb2dpYyBzdGF0ZSBhZnRlciBjYWxsaW5nIGBsb2FkU291cmNlYCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IChlZy4gYGZyb21JbWFnZWAsIGBuZXcgQmFzZVRleHR1cmVgKSBpczpcbiAqXG4gKiAgICAgaWYgKHRleHR1cmUuaGFzTG9hZGVkKVxuIHtcbiAqICAgICAgICAvLyB0ZXh0dXJlIHJlYWR5IGZvciB1c2VcbiAqICAgICB9IGVsc2UgaWYgKHRleHR1cmUuaXNMb2FkaW5nKVxuIHtcbiAqICAgICAgICAvLyBsaXN0ZW4gdG8gJ2xvYWRlZCcgYW5kL29yICdlcnJvcicgZXZlbnRzIG9uIHRleHR1cmVcbiAqICAgICB9IGVsc2Uge1xuICogICAgICAgIC8vIG5vdCBsb2FkaW5nLCBub3QgZ29pbmcgdG8gbG9hZCBVTkxFU1MgdGhlIHNvdXJjZSBpcyByZWxvYWRlZFxuICogICAgICAgIC8vIChpdCBtYXkgc3RpbGwgbWFrZSBzZW5zZSB0byBsaXN0ZW4gdG8gdGhlIGV2ZW50cylcbiAqICAgICB9XG4gKlxuICogQHByb3RlY3RlZFxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmxvYWRTb3VyY2UgPSBmdW5jdGlvbiAoc291cmNlKVxue1xuICAgIHZhciB3YXNMb2FkaW5nID0gdGhpcy5pc0xvYWRpbmc7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKHdhc0xvYWRpbmcgJiYgdGhpcy5zb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmVycm9yID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcblxuICAgIC8vIEFwcGx5IHNvdXJjZSBpZiBsb2FkZWQuIE90aGVyd2lzZSBzZXR1cCBhcHByb3ByaWF0ZSBsb2FkaW5nIG1vbml0b3JzLlxuICAgIGlmICgodGhpcy5zb3VyY2UuY29tcGxldGUgfHwgdGhpcy5zb3VyY2UuZ2V0Q29udGV4dCkgJiYgdGhpcy5zb3VyY2Uud2lkdGggJiYgdGhpcy5zb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFzb3VyY2UuZ2V0Q29udGV4dClcbiAgICB7XG5cbiAgICAgICAgLy8gSW1hZ2UgZmFpbCAvIG5vdCByZWFkeVxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgdmFyIHNjb3BlID0gdGhpcztcblxuICAgICAgICBzb3VyY2Uub25sb2FkID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgIHNjb3BlLmVtaXQoJ2xvYWRlZCcsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzb3VyY2Uub25lcnJvciA9IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXNjb3BlLmlzTG9hZGluZylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuZW1pdCgnZXJyb3InLCBzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUGVyIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI3RoZS1pbWctZWxlbWVudFxuICAgICAgICAvLyAgIFwiVGhlIHZhbHVlIG9mIGBjb21wbGV0ZWAgY2FuIHRodXMgY2hhbmdlIHdoaWxlIGEgc2NyaXB0IGlzIGV4ZWN1dGluZy5cIlxuICAgICAgICAvLyBTbyBjb21wbGV0ZSBuZWVkcyB0byBiZSByZS1jaGVja2VkIGFmdGVyIHRoZSBjYWxsYmFja3MgaGF2ZSBiZWVuIGFkZGVkLi5cbiAgICAgICAgLy8gTk9URTogY29tcGxldGUgd2lsbCBiZSB0cnVlIGlmIHRoZSBpbWFnZSBoYXMgbm8gc3JjIHNvIGJlc3QgdG8gY2hlY2sgaWYgdGhlIHNyYyBpcyBzZXQuXG4gICAgICAgIGlmIChzb3VyY2UuY29tcGxldGUgJiYgc291cmNlLnNyYylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gLi5hbmQgaWYgd2UncmUgY29tcGxldGUgbm93LCBubyBuZWVkIGZvciBjYWxsYmFja3NcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiBhbnkgcHJldmlvdXMgc3Vic2NyaWJlcnMgcG9zc2libGVcbiAgICAgICAgICAgICAgICBpZiAod2FzTG9hZGluZylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZCBpbnRlcm5hbGx5IHRvIHVwZGF0ZSB0aGUgd2lkdGgsIGhlaWdodCwgYW5kIHNvbWUgb3RoZXIgdHJhY2tpbmcgdmFycyBvbmNlXG4gKiBhIHNvdXJjZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuX3NvdXJjZUxvYWRlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgYmFzZSB0ZXh0dXJlXG4gKlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuaW1hZ2VVcmwpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcbiAgICAgICAgZGVsZXRlIHV0aWxzLlRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcblxuICAgICAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgICAgICBpZiAoIW5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZS5zcmMgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdGhpcy5zb3VyY2UuX3BpeGlJZF07XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsO1xuXG4gICAgdGhpcy5kaXNwb3NlKCk7XG59O1xuXG4vKipcbiAqIEZyZWVzIHRoZSB0ZXh0dXJlIGZyb20gV2ViR0wgbWVtb3J5IHdpdGhvdXQgZGVzdHJveWluZyB0aGlzIHRleHR1cmUgb2JqZWN0LlxuICogVGhpcyBtZWFucyB5b3UgY2FuIHN0aWxsIHVzZSB0aGUgdGV4dHVyZSBsYXRlciB3aGljaCB3aWxsIHVwbG9hZCBpdCB0byBHUFVcbiAqIG1lbW9yeSBhZ2Fpbi5cbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmVtaXQoJ2Rpc3Bvc2UnLCB0aGlzKTtcblxuICAgIC8vIHRoaXMgc2hvdWxkIG5vIGxvbmdlciBiZSBuZWVkZWQsIHRoZSByZW5kZXJlcnMgc2hvdWxkIGNsZWFudXAgYWxsIHRoZSBnbCB0ZXh0dXJlcy5cbiAgICAvLyB0aGlzLl9nbFRleHR1cmVzID0ge307XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHNvdXJjZSBpbWFnZSBvZiB0aGUgdGV4dHVyZS5cbiAqIFRoZSBvcmlnaW5hbCBzb3VyY2UgbXVzdCBiZSBhbiBJbWFnZSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBuZXdTcmMge3N0cmluZ30gdGhlIHBhdGggb2YgdGhlIGltYWdlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGVTb3VyY2VJbWFnZSA9IGZ1bmN0aW9uIChuZXdTcmMpXG57XG4gICAgdGhpcy5zb3VyY2Uuc3JjID0gbmV3U3JjO1xuXG4gICAgdGhpcy5sb2FkU291cmNlKHRoaXMuc291cmNlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGJhc2UgdGV4dHVyZSBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSBiYXNlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBjcmVhdGVkIGFuZCBsb2FkZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlVXJsIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gU2hvdWxkIHVzZSBhbm9ueW1vdXMgQ09SUz8gRGVmYXVsdHMgdG8gdHJ1ZSBpZiB0aGUgVVJMIGlzIG5vdCBhIGRhdGEtVVJJLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF07XG5cbiAgICBpZiAoY3Jvc3NvcmlnaW4gPT09IHVuZGVmaW5lZCAmJiBpbWFnZVVybC5pbmRleE9mKCdkYXRhOicpICE9PSAwKVxuICAgIHtcbiAgICAgICAgY3Jvc3NvcmlnaW4gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICAvLyBuZXcgSW1hZ2UoKSBicmVha3MgdGV4IGxvYWRpbmcgaW4gc29tZSB2ZXJzaW9ucyBvZiBDaHJvbWUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjM4MDcxXG4gICAgICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpOy8vZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgICAgIGlmIChjcm9zc29yaWdpbilcbiAgICAgICAge1xuICAgICAgICAgICAgaW1hZ2UuY3Jvc3NPcmlnaW4gPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGltYWdlLCBzY2FsZU1vZGUpO1xuICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IGltYWdlVXJsO1xuXG4gICAgICAgIGltYWdlLnNyYyA9IGltYWdlVXJsO1xuXG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gYmFzZVRleHR1cmU7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4gQDJ4IGF0IHRoZSBlbmQgb2YgdGhlIHVybCB3ZSBhcmUgZ29pbmcgdG8gYXNzdW1lIGl0cyBhIGhpZ2hyZXMgaW1hZ2VcbiAgICAgICAgYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHV0aWxzLmdldFJlc29sdXRpb25PZlVybChpbWFnZVVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIGlmICghY2FudmFzLl9waXhpSWQpXG4gICAge1xuICAgICAgICBjYW52YXMuX3BpeGlJZCA9ICdjYW52YXNfJyArIHV0aWxzLnVpZCgpO1xuICAgIH1cblxuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbY2FudmFzLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGNhbnZhcywgc2NhbGVNb2RlKTtcbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuIiwidmFyIEJhc2VSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbi8qKlxuICogQSBSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIFJlbmRlclRleHR1cmUgdGFrZXMgYSBzbmFwc2hvdCBvZiBhbnkgRGlzcGxheSBPYmplY3QgZ2l2ZW4gdG8gaXRzIHJlbmRlciBtZXRob2QuIFRoZSBwb3NpdGlvblxuICogYW5kIHJvdGF0aW9uIG9mIHRoZSBnaXZlbiBEaXNwbGF5IE9iamVjdHMgaXMgaWdub3JlZC4gRm9yIGV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDEwMjQsIDEwMjQsIHsgdmlldzogY2FudmFzLCByYXRpbzogMSB9KTtcbiAqIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKHNwcml0ZSk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgU3ByaXRlIGluIHRoaXMgY2FzZSB3aWxsIGJlIHJlbmRlcmVkIHRvIGEgcG9zaXRpb24gb2YgMCwwLiBUbyByZW5kZXIgdGhpcyBzcHJpdGUgYXQgaXRzIGFjdHVhbFxuICogcG9zaXRpb24gYSBDb250YWluZXIgc2hvdWxkIGJlIHVzZWQ6XG4gKlxuICogYGBganNcbiAqIHZhciBkb2MgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqXG4gKiBkb2MuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqXG4gKiByZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBSZW5kZXJUZXh0dXJlXG4gKiBAcGFyYW0gW3dpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtoZWlnaHQ9MTAwXSB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtzY2FsZU1vZGVdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIFtyZXNvbHV0aW9uPTFdIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICovXG5mdW5jdGlvbiBSZW5kZXJUZXh0dXJlKGJhc2VSZW5kZXJUZXh0dXJlLCBmcmFtZSlcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIFJlbmRlclRleHR1cmUsIHlvdSBtdXN0IHBhc3MgYSByZW5kZXJlciBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIG9iamVjdCB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtCYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICBUZXh0dXJlLmNhbGwodGhpcyxcbiAgICAgICAgYmFzZVJlbmRlclRleHR1cmUsXG4gICAgICAgIGZyYW1lIFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fdXBkYXRlVXZzKCk7XG59XG5cblJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlLnByb3RvdHlwZSk7XG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgUmVuZGVyVGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gdXBkYXRlQmFzZSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBiYXNlVGV4dHVyZS53aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBiZSByZXNpemVkIGFzIHdlbGw/XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB1cGRhdGVCYXNlKVxue1xuICAgXG4gICAgLy9UT0RPIC0gY291bGQgYmUgbm90IHJlcXVpcmVkLi5cbiAgICB0aGlzLnZhbGlkID0gKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTtcblxuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy5jcm9wLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jcm9wLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh1cGRhdGVCYXNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5yZXNpemUod2lkdGgsIGhlaWdodClcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLmNsZWFyKHRoaXMuZnJhbWUpXG4gICAgXG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5iYXNlVGV4dHVyZS5yZW5kZXIodGhpcy5mcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIHRoaXMgdGV4dHVyZS4gSXQgd29ya3MgYnkgY2FsbGluZyBSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0QmFzZTY0LmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0Q2FudmFzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRDYW52YXModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgdGhlIGVudGlyZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbHModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgYSBwaXhlbCB3aXRoaW4gdGhlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbCh0aGlzLmZyYW1lLCB4LCB5KTtcbn07XG5cblJlbmRlclRleHR1cmUuY3JlYXRlID0gZnVuY3Rpb24ocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICByZXR1cm4gbmV3IFJlbmRlclRleHR1cmUobmV3IEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pKTtcbn1cblxuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzID0gcmVxdWlyZSgnLi9UZXh0dXJlVXZzJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZSBvciBwYXJ0IG9mIGFuIGltYWdlLiBJdCBjYW5ub3QgYmUgYWRkZWRcbiAqIHRvIHRoZSBkaXNwbGF5IGxpc3QgZGlyZWN0bHkuIEluc3RlYWQgdXNlIGl0IGFzIHRoZSB0ZXh0dXJlIGZvciBhIFNwcml0ZS4gSWYgbm8gZnJhbWUgaXMgcHJvdmlkZWQgdGhlbiB0aGUgd2hvbGUgaW1hZ2UgaXMgdXNlZC5cbiAqXG4gKiBZb3UgY2FuIGRpcmVjdGx5IGNyZWF0ZSBhIHRleHR1cmUgZnJvbSBhbiBpbWFnZSBhbmQgdGhlbiByZXVzZSBpdCBtdWx0aXBsZSB0aW1lcyBsaWtlIHRoaXMgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIHZhciBzcHJpdGUxID0gbmV3IFBJWEkuU3ByaXRlKHRleHR1cmUpO1xuICogdmFyIHNwcml0ZTIgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gYmFzZVRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV9IFRoZSBiYXNlIHRleHR1cmUgc291cmNlIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZSBmcm9tXG4gKiBAcGFyYW0gW2ZyYW1lXSB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5nbGUgZnJhbWUgb2YgdGhlIHRleHR1cmUgdG8gc2hvd1xuICogQHBhcmFtIFtjcm9wXSB7UElYSS5SZWN0YW5nbGV9IFRoZSBhcmVhIG9mIG9yaWdpbmFsIHRleHR1cmVcbiAqIEBwYXJhbSBbdHJpbV0ge1BJWEkuUmVjdGFuZ2xlfSBUcmltbWVkIHRleHR1cmUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gW3JvdGF0ZV0ge2Jvb2xlYW59IGluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXMgKCB1c2VkIGJ5IHRleHR1cmUgcGFja2VyIClcbiAqL1xuZnVuY3Rpb24gVGV4dHVyZShiYXNlVGV4dHVyZSwgZnJhbWUsIGNyb3AsIHRyaW0sIHJvdGF0ZSlcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIERvZXMgdGhpcyBUZXh0dXJlIGhhdmUgYW55IGZyYW1lIGRhdGEgYXNzaWduZWQgdG8gaXQ/XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubm9GcmFtZSA9IGZhbHNlO1xuXG4gICAgaWYgKCFmcmFtZSlcbiAgICB7XG4gICAgICAgIHRoaXMubm9GcmFtZSA9IHRydWU7XG4gICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuICAgIH1cblxuICAgIGlmIChiYXNlVGV4dHVyZSBpbnN0YW5jZW9mIFRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmFzZVRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy5iYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdHJpbSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy50cmltID0gdHJpbTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgdGhlIHJlbmRlcmVyIGtub3cgaWYgdGhlIHRleHR1cmUgaXMgdmFsaWQuIElmIGl0J3Mgbm90IHRoZW4gaXQgY2Fubm90IGJlIHJlbmRlcmVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHdpbGwgbGV0IGEgcmVuZGVyZXIga25vdyB0aGF0IGEgdGV4dHVyZSBoYXMgYmVlbiB1cGRhdGVkICh1c2VkIG1haW5seSBmb3Igd2ViR0wgdXYgdXBkYXRlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXF1aXJlc1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFdlYkdMIFVWIGRhdGEgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0dXJlIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIGFyZWEgb2YgdGhlIEJhc2VUZXh0dXJlIGltYWdlIHRvIGFjdHVhbGx5IGNvcHkgdG8gdGhlIENhbnZhcyAvIFdlYkdMIHdoZW4gcmVuZGVyaW5nLFxuICAgICAqIGlycmVzcGVjdGl2ZSBvZiB0aGUgYWN0dWFsIGZyYW1lIHNpemUgb3IgcGxhY2VtZW50ICh3aGljaCBjYW4gYmUgaW5mbHVlbmNlZCBieSB0cmltbWVkIHRleHR1cmUgYXRsYXNlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3JvcCA9IGNyb3AgfHwgZnJhbWU7Ly9uZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgcm90YXRlZCBieSA5MCBkZWdyZWVzXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb3RhdGUgPSAhIXJvdGF0ZTtcblxuICAgIGlmIChiYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICBmcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gZnJhbWUgd2Ugc2hvdWxkIG1vbml0b3IgZm9yIGFueSBiYXNlIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5vbigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZS5vbmNlKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZC4gVGhpcyBoYXBwZW5zIGlmIHRoZSBmcmFtZSBvciB0aGUgYmFzZVRleHR1cmUgaXMgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBldmVudCB1cGRhdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0dXJlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqL1xuICAgIGZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBmcmFtZTtcblxuICAgICAgICAgICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHRoaXMud2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMudHJpbSAmJiAhdGhpcy5yb3RhdGUgJiYgKGZyYW1lLnggKyBmcmFtZS53aWR0aCA+IHRoaXMuYmFzZVRleHR1cmUud2lkdGggfHwgZnJhbWUueSArIGZyYW1lLmhlaWdodCA+IHRoaXMuYmFzZVRleHR1cmUuaGVpZ2h0KSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHR1cmUgRXJyb3I6IGZyYW1lIGRvZXMgbm90IGZpdCBpbnNpZGUgdGhlIGJhc2UgVGV4dHVyZSBkaW1lbnNpb25zICcgKyB0aGlzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy90aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuc291cmNlICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuICAgICAgICAgICAgdGhpcy52YWxpZCA9IGZyYW1lICYmIGZyYW1lLndpZHRoICYmIGZyYW1lLmhlaWdodCAmJiB0aGlzLmJhc2VUZXh0dXJlLmhhc0xvYWRlZDtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJpbSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy50cmltLmhlaWdodDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS53aWR0aCA9IHRoaXMudHJpbS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JvcCA9IGZyYW1lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy52YWxpZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVVdnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhpcyB0ZXh0dXJlIG9uIHRoZSBncHUuXG4gKlxuICovXG5UZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYmFzZVRleHR1cmUudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgbG9hZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZUxvYWRlZCA9IGZ1bmN0aW9uIChiYXNlVGV4dHVyZSlcbntcbiAgICAvLyBUT0RPIHRoaXMgY29kZSBsb29rcyBjb25mdXNpbmcuLiBib28gdG8gYWJ1c2luZyBnZXR0ZXJzIGFuZCBzZXR0ZXJzcyFcbiAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMuX2ZyYW1lO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgdXBkYXRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLm9uQmFzZVRleHR1cmVVcGRhdGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZT1mYWxzZV0ge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZSlcbntcbiAgICBpZiAodGhpcy5iYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGlmIChkZXN0cm95QmFzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2ZyYW1lID0gbnVsbDtcbiAgICB0aGlzLl91dnMgPSBudWxsO1xuICAgIHRoaXMudHJpbSA9IG51bGw7XG4gICAgdGhpcy5jcm9wID0gbnVsbDtcblxuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIHRoaXMub2ZmKCdkaXNwb3NlJywgdGhpcy5kaXNwb3NlLCB0aGlzKTtcbiAgICB0aGlzLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRleHR1cmUgb2JqZWN0IHRoYXQgYWN0cyB0aGUgc2FtZSBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9XG4gKi9cblRleHR1cmUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUodGhpcy5iYXNlVGV4dHVyZSwgdGhpcy5mcmFtZSwgdGhpcy5jcm9wLCB0aGlzLnRyaW0sIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuX3VwZGF0ZVV2cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLl91dnMpXG4gICAge1xuICAgICAgICB0aGlzLl91dnMgPSBuZXcgVGV4dHVyZVV2cygpO1xuICAgIH1cblxuICAgIHRoaXMuX3V2cy5zZXQodGhpcy5jcm9wLCB0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLnJvdGF0ZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBUZXh0dXJlIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGNyb3Nzb3JpZ2luIHtib29sZWFufSBXaGV0aGVyIHJlcXVlc3RzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGNyb3Nzb3JpZ2luXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbiAgICAgICAgdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXSA9IHRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZScpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhcywgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW8ge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAodHlwZW9mIHZpZGVvID09PSAnc3RyaW5nJylcbiAgICB7XG4gICAgICAgIHJldHVybiBUZXh0dXJlLmZyb21WaWRlb1VybCh2aWRlbywgc2NhbGVNb2RlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgdmlkZW8gdXJsLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1VybCB7c3RyaW5nfVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gQSBUZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbVZpZGVvVXJsID0gZnVuY3Rpb24gKHZpZGVvVXJsLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh2aWRlb1VybCwgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEFkZHMgYSB0ZXh0dXJlIHRvIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLiBUaGlzIGNhY2hlIGlzIHNoYXJlZCBhY3Jvc3MgdGhlIHdob2xlIFBJWEkgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSBUZXh0dXJlIHRvIGFkZCB0byB0aGUgY2FjaGUuXG4gKiBAcGFyYW0gaWQge3N0cmluZ30gVGhlIGlkIHRoYXQgdGhlIHRleHR1cmUgd2lsbCBiZSBzdG9yZWQgYWdhaW5zdC5cbiAqL1xuVGV4dHVyZS5hZGRUZXh0dXJlVG9DYWNoZSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBpZClcbntcbiAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdID0gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgdGV4dHVyZSBmcm9tIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgb2YgdGhlIHRleHR1cmUgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0aGF0IHdhcyByZW1vdmVkXG4gKi9cblRleHR1cmUucmVtb3ZlVGV4dHVyZUZyb21DYWNoZSA9IGZ1bmN0aW9uIChpZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtpZF07XG5cbiAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcbiAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpZF07XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogQW4gZW1wdHkgdGV4dHVyZSwgdXNlZCBvZnRlbiB0byBub3QgaGF2ZSB0byBjcmVhdGUgbXVsdGlwbGUgZW1wdHkgdGV4dHVyZXMuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmUuRU1QVFkgPSBuZXcgVGV4dHVyZShuZXcgQmFzZVRleHR1cmUoKSk7XG4iLCJcbi8qKlxuICogQSBzdGFuZGFyZCBvYmplY3QgdG8gc3RvcmUgdGhlIFV2cyBvZiBhIHRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBUZXh0dXJlVXZzKClcbntcbiAgICB0aGlzLngwID0gMDtcbiAgICB0aGlzLnkwID0gMDtcblxuICAgIHRoaXMueDEgPSAxO1xuICAgIHRoaXMueTEgPSAwO1xuXG4gICAgdGhpcy54MiA9IDE7XG4gICAgdGhpcy55MiA9IDE7XG5cbiAgICB0aGlzLngzID0gMDtcbiAgICB0aGlzLnkzID0gMTtcblxuICAgIHRoaXMueHkwX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTFfdWludDMyID0gMDtcbiAgICB0aGlzLnh5Ml91aW50MzIgPSAwO1xuICAgIHRoaXMueHkzX3VpbnQzMiA9IDA7XG5cbiAgICB0aGlzLnV2c191aW50MzIgPSBuZXcgVWludDMyQXJyYXkoNClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlVXZzO1xuXG4vKipcbiAqIFNldHMgdGhlIHRleHR1cmUgVXZzIGJhc2VkIG9uIHRoZSBnaXZlbiBmcmFtZSBpbmZvcm1hdGlvblxuICogQHBhcmFtIGZyYW1lIHtQSVhJLlJlY3RhbmdsZX1cbiAqIEBwYXJhbSBiYXNlRnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIHJvdGF0ZSB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIGZyYW1lIGlzIHJvdGF0ZWRcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmVVdnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChmcmFtZSwgYmFzZUZyYW1lLCByb3RhdGUpXG57XG4gICAgdmFyIHR3ID0gYmFzZUZyYW1lLndpZHRoO1xuICAgIHZhciB0aCA9IGJhc2VGcmFtZS5oZWlnaHQ7XG5cbiAgICBpZihyb3RhdGUpXG4gICAge1xuICAgICAgICB0aGlzLngwID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUuaGVpZ2h0KSAvIHR3O1xuICAgICAgICB0aGlzLnkxID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkyID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gZnJhbWUueSAvIHRoO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMueDAgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MiA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gKGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQpIC8gdGg7XG4gICAgfVxuXG4gICAgdGhpcy51dnNfdWludDMyWzBdID0gKCgodGhpcy55MCAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngwICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbMV0gPSAoKCh0aGlzLnkxICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDEgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsyXSA9ICgoKHRoaXMueTIgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MiAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzNdID0gKCgodGhpcy55MyAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngzICogNjU1MzUpICYgMHhGRkZGKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBvZiBhIFtwbGF5aW5nXSBWaWRlby5cbiAqXG4gKiBWaWRlbyBiYXNlIHRleHR1cmVzIG1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kIGluIHRoZWlyIGNyZWF0aW9uIHByb2Nlc3MuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZCBpbiBzZXZlcmFsIHdheXMsIHN1Y2ggYXM6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwoJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0Jyk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh7IHNyYzogJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoWycvdmlkZW8ud2VibScsICcvdmlkZW8ubXA0J10pO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzKFtcbiAqICAgICB7IHNyYzogJy92aWRlby53ZWJtJywgbWltZTogJ3ZpZGVvL3dlYm0nIH0sXG4gKiAgICAgeyBzcmM6ICcvdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfVxuICogXSk7XG4gKiBgYGBcbiAqXG4gKiBTZWUgdGhlIFtcImRldXNcIiBkZW1vXShodHRwOi8vd3d3Lmdvb2Rib3lkaWdpdGFsLmNvbS9waXhpanMvZXhhbXBsZXMvZGV1cy8pLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5CYXNlVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzb3VyY2Uge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIFZpZGVvQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFzb3VyY2UpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHZpZGVvIHNvdXJjZSBlbGVtZW50IHNwZWNpZmllZC4nKTtcbiAgICB9XG5cbiAgICAvLyBob29rIGluIGhlcmUgdG8gY2hlY2sgaWYgdmlkZW8gaXMgYWxyZWFkeSBhdmFpbGFibGUuXG4gICAgLy8gQmFzZVRleHR1cmUgbG9va3MgZm9yIGEgc291cmNlLmNvbXBsZXRlIGJvb2xlYW4sIHBsdXMgd2lkdGggJiBoZWlnaHQuXG5cbiAgICBpZiAoKHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9FTk9VR0hfREFUQSB8fCBzb3VyY2UucmVhZHlTdGF0ZSA9PT0gc291cmNlLkhBVkVfRlVUVVJFX0RBVEEpICYmIHNvdXJjZS53aWR0aCAmJiBzb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgc291cmNlLmNvbXBsZXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBCYXNlVGV4dHVyZS5jYWxsKHRoaXMsIHNvdXJjZSwgc2NhbGVNb2RlKTtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCB0aGUgYmFzZSB0ZXh0dXJlIGF1dG9tYXRpY2FsbHkgdXBkYXRlIGl0c2VsZiwgc2V0IHRvIHRydWUgYnkgZGVmYXVsdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG5cbiAgICB0aGlzLl9vblVwZGF0ZSA9IHRoaXMuX29uVXBkYXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fb25DYW5QbGF5ID0gdGhpcy5fb25DYW5QbGF5LmJpbmQodGhpcyk7XG5cbiAgICBpZiAoIXNvdXJjZS5jb21wbGV0ZSlcbiAgICB7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgdGhpcy5fb25DYW5QbGF5KTtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICAvLyBzdGFydGVkIHBsYXlpbmcuLlxuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX29uUGxheVN0YXJ0LmJpbmQodGhpcykpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9vblBsYXlTdG9wLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHRoaXMuX19sb2FkZWQgPSBmYWxzZTtcbn1cblxuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZpZGVvQmFzZVRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFZpZGVvQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVGhlIGludGVybmFsIHVwZGF0ZSBsb29wIG9mIHRoZSB2aWRlbyBiYXNlIHRleHR1cmUsIG9ubHkgcnVucyB3aGVuIGF1dG9VcGRhdGUgaXMgc2V0IHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25VcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJ1bnMgdGhlIHVwZGF0ZSBsb29wIHdoZW4gdGhlIHZpZGVvIGlzIHJlYWR5IHRvIHBsYXlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5hdXRvVXBkYXRlKVxuICAgIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9vblVwZGF0ZSk7XG4gICAgICAgIHRoaXMuYXV0b1VwZGF0ZSA9IHRydWU7XG4gICAgfVxufTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIGEgcGF1c2UgZXZlbnQgaXMgdHJpZ2dlcmVkLCBzdG9wcyB0aGUgdXBkYXRlIGxvb3BcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gdGhlIHZpZGVvIGlzIGxvYWRlZCBhbmQgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vbkNhblBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX29uQ2FuUGxheSk7XG5cbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuc291cmNlLnZpZGVvV2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5zb3VyY2UudmlkZW9IZWlnaHQ7XG5cbiAgICAgICAgdGhpcy5zb3VyY2UucGxheSgpO1xuXG4gICAgICAgIC8vIHByZXZlbnQgbXVsdGlwbGUgbG9hZGVkIGRpc3BhdGNoZXMuLlxuICAgICAgICBpZiAoIXRoaXMuX19sb2FkZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX19sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5zb3VyY2UuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB0aGlzLnNvdXJjZS5fcGl4aUlkIF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNvdXJjZS5fcGl4aUlkO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIE1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlZpZGVvQmFzZVRleHR1cmV9XG4gKi9cblZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvID0gZnVuY3Rpb24gKHZpZGVvLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCF2aWRlby5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgdmlkZW8uX3BpeGlJZCA9ICd2aWRlb18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt2aWRlby5fcGl4aUlkXTtcblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBWaWRlb0Jhc2VUZXh0dXJlKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB2aWRlby5fcGl4aUlkIF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgQmFzZVRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIHZpZGVvIGVsZW1lbnQuXG4gKiBUaGlzIEJhc2VUZXh0dXJlIGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIGEgdGV4dHVyZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1NyYyB7c3RyaW5nfG9iamVjdHxzdHJpbmdbXXxvYmplY3RbXX0gVGhlIFVSTChzKSBmb3IgdGhlIHZpZGVvLlxuICogQHBhcmFtIFt2aWRlb1NyYy5zcmNdIHtzdHJpbmd9IE9uZSBvZiB0aGUgc291cmNlIHVybHMgZm9yIHRoZSB2aWRlb1xuICogQHBhcmFtIFt2aWRlb1NyYy5taW1lXSB7c3RyaW5nfSBUaGUgbWltZXR5cGUgb2YgdGhlIHZpZGVvIChlLmcuICd2aWRlby9tcDQnKS4gSWYgbm90IHNwZWNpZmllZFxuICogIHRoZSB1cmwncyBleHRlbnNpb24gd2lsbCBiZSB1c2VkIGFzIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgbWltZSB0eXBlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsID0gZnVuY3Rpb24gKHZpZGVvU3JjLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcblxuICAgIC8vIGFycmF5IG9mIG9iamVjdHMgb3Igc3RyaW5nc1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZpZGVvU3JjKSlcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlkZW9TcmMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyY1tpXS5zcmMgfHwgdmlkZW9TcmNbaV0sIHZpZGVvU3JjW2ldLm1pbWUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzaW5nbGUgb2JqZWN0IG9yIHN0cmluZ1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyYy5zcmMgfHwgdmlkZW9TcmMsIHZpZGVvU3JjLm1pbWUpKTtcbiAgICB9XG5cbiAgICB2aWRlby5sb2FkKCk7XG4gICAgdmlkZW8ucGxheSgpO1xuXG4gICAgcmV0dXJuIFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpO1xufTtcblxuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyA9IFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybDtcblxuZnVuY3Rpb24gY3JlYXRlU291cmNlKHBhdGgsIHR5cGUpXG57XG4gICAgaWYgKCF0eXBlKVxuICAgIHtcbiAgICAgICAgdHlwZSA9ICd2aWRlby8nICsgcGF0aC5zdWJzdHIocGF0aC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpO1xuXG4gICAgc291cmNlLnNyYyA9IHBhdGg7XG4gICAgc291cmNlLnR5cGUgPSB0eXBlO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn1cbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIC8vIEludGVybmFsIGV2ZW50IHVzZWQgYnkgY29tcG9zZWQgZW1pdHRlclxuICAgIFRJQ0sgPSAndGljayc7XG5cbi8qKlxuICogQSBUaWNrZXIgY2xhc3MgdGhhdCBydW5zIGFuIHVwZGF0ZSBsb29wIHRoYXQgb3RoZXIgb2JqZWN0cyBsaXN0ZW4gdG8uXG4gKiBUaGlzIGNsYXNzIGlzIGNvbXBvc2VkIGFyb3VuZCBhbiBFdmVudEVtaXR0ZXIgb2JqZWN0IHRvIGFkZCBsaXN0ZW5lcnNcbiAqIG1lYW50IGZvciBleGVjdXRpb24gb24gdGhlIG5leHQgcmVxdWVzdGVkIGFuaW1hdGlvbiBmcmFtZS5cbiAqIEFuaW1hdGlvbiBmcmFtZXMgYXJlIHJlcXVlc3RlZCBvbmx5IHdoZW4gbmVjZXNzYXJ5LFxuICogZS5nLiBXaGVuIHRoZSB0aWNrZXIgaXMgc3RhcnRlZCBhbmQgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlclxuICovXG5mdW5jdGlvbiBUaWNrZXIoKVxue1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0aWNrIG1ldGhvZCBib3VuZCB0byB0aWNrZXIgaW5zdGFuY2UuXG4gICAgICogVGhpcyBpcyBiZWNhdXNlIGluIGVhcmx5IDIwMTUsIEZ1bmN0aW9uLmJpbmRcbiAgICAgKiBpcyBzdGlsbCA2MCUgc2xvd2VyIGluIGhpZ2ggcGVyZm9ybWFuY2Ugc2NlbmFyaW9zLlxuICAgICAqIEFsc28gc2VwYXJhdGluZyBmcmFtZSByZXF1ZXN0cyBmcm9tIHVwZGF0ZSBtZXRob2RcbiAgICAgKiBzbyBsaXN0ZW5lcnMgbWF5IGJlIGNhbGxlZCBhdCBhbnkgdGltZSBhbmQgd2l0aFxuICAgICAqIGFueSBhbmltYXRpb24gQVBJLCBqdXN0IGludm9rZSB0aWNrZXIudXBkYXRlKHRpbWUpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90aWNrID0gZnVuY3Rpb24gX3RpY2sodGltZSkge1xuXG4gICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgICAgIGlmIChfdGhpcy5zdGFydGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBJbnZva2UgbGlzdGVuZXJzIG5vd1xuICAgICAgICAgICAgX3RoaXMudXBkYXRlKHRpbWUpO1xuICAgICAgICAgICAgLy8gTGlzdGVuZXIgc2lkZSBlZmZlY3RzIG1heSBoYXZlIG1vZGlmaWVkIHRpY2tlciBzdGF0ZS5cbiAgICAgICAgICAgIGlmIChfdGhpcy5zdGFydGVkICYmIF90aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgX3RoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMuX3RpY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGVtaXR0ZXIgdXNlZCB0byBmaXJlICd0aWNrJyBldmVudFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGN1cnJlbnQgZnJhbWUgcmVxdWVzdCBJRFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHZhbHVlIG1hbmFnZWQgYnkgbWluRlBTIHByb3BlcnR5IHNldHRlciBhbmQgZ2V0dGVyLlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gYWxsb3dlZCBtaWxsaXNlY29uZHMgYmV0d2VlbiB1cGRhdGVzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4RWxhcHNlZE1TID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhpcyB0aWNrZXIgc2hvdWxkIGludm9rZSB0aGUgbWV0aG9kXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdGFydH0gYXV0b21hdGljYWxseVxuICAgICAqIHdoZW4gYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9TdGFydCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2NhbGFyIHRpbWUgdmFsdWUgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgc2V0dGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI21pbkZQU31cbiAgICAgKiBhbmQgaXMgc2NhbGVkIHdpdGgge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0uXG4gICAgICogKipOb3RlOioqIFRoZSBjYXAgbWF5IGJlIGV4Y2VlZGVkIGJ5IHNjYWxpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZGVsdGFUaW1lID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRpbWUgZWxhcHNlZCBpbiBtaWxsaXNlY29uZHMgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogT3Bwb3NlZCB0byB3aGF0IHRoZSBzY2FsYXIge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9XG4gICAgICogaXMgYmFzZWQsIHRoaXMgdmFsdWUgaXMgbmVpdGhlciBjYXBwZWQgbm9yIHNjYWxlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEgLyBUQVJHRVRfRlBNU1xuICAgICAqL1xuICAgIHRoaXMuZWxhcHNlZE1TID0gMSAvIENPTlNULlRBUkdFVF9GUE1TOyAvLyBkZWZhdWx0IHRvIHRhcmdldCBmcmFtZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCB0aW1lIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjdXBkYXRlfSB3YXMgaW52b2tlZC5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGFsc28gcmVzZXQgaW50ZXJuYWxseSBvdXRzaWRlIG9mIGludm9raW5nXG4gICAgICogdXBkYXRlLCBidXQgb25seSB3aGVuIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gICAgICogSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERPTUhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgICogdGhpcyB2YWx1ZSB3aWxsIGhhdmUgYSBwcmVjaXNpb24gb2YgMSDCtXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5sYXN0VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBGYWN0b3Igb2YgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBTY2FsZXMgdGlja2VyLmRlbHRhVGltZSB0byB3aGF0IHdvdWxkIGJlXG4gICAgICogLy8gdGhlIGVxdWl2YWxlbnQgb2YgYXBwcm94aW1hdGVseSAxMjAgRlBTXG4gICAgICogdGlja2VyLnNwZWVkID0gMjtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5zcGVlZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBoYXMgYmVlbiBzdGFydGVkLlxuICAgICAqIGB0cnVlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogYGZhbHNlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0b3B9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBXaGlsZSBgZmFsc2VgLCB0aGlzIHZhbHVlIG1heSBjaGFuZ2UgdG8gYHRydWVgIGluIHRoZVxuICAgICAqIGV2ZW50IG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBiZWluZyBgdHJ1ZWBcbiAgICAgKiBhbmQgYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlja2VyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZXMgcGVyIHNlY29uZCBhdCB3aGljaCB0aGlzIHRpY2tlciBpcyBydW5uaW5nLlxuICAgICAqIFRoZSBkZWZhdWx0IGlzIGFwcHJveGltYXRlbHkgNjAgaW4gbW9zdCBtb2Rlcm4gYnJvd3NlcnMuXG4gICAgICogKipOb3RlOioqIFRoaXMgZG9lcyBub3QgZmFjdG9yIGluIHRoZSB2YWx1ZSBvZlxuICAgICAqIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3BlZWR9LCB3aGljaCBpcyBzcGVjaWZpY1xuICAgICAqIHRvIHNjYWxpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuZWxhcHNlZE1TO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIG1pbGxpc2Vjb25kcyBhbGxvd2VkIHRvXG4gICAgICogZWxhcHNlIGJldHdlZW4gaW52b2tpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9LlxuICAgICAqIFRoaXMgdmFsdWUgaXMgdXNlZCB0byBjYXAge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICAgICAqIGJ1dCBkb2VzIG5vdCBlZmZlY3QgdGhlIG1lYXN1cmVkIHZhbHVlIG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjRlBTfS5cbiAgICAgKiBXaGVuIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSBpdCBpcyBjbGFtcGVkIHRvIGEgdmFsdWUgYmV0d2VlblxuICAgICAqIGAwYCBhbmQgYFBJWEkuVEFSR0VUX0ZQTVMgKiAxMDAwYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSS50aWNrZXIuVGlja2VyI1xuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgbWluRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuX21heEVsYXBzZWRNUztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbihmcHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIENsYW1wOiAwIHRvIFRBUkdFVF9GUE1TXG4gICAgICAgICAgICB2YXIgbWluRlBNUyA9IE1hdGgubWluKE1hdGgubWF4KDAsIGZwcykgLyAxMDAwLCBDT05TVC5UQVJHRVRfRlBNUyk7XG4gICAgICAgICAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxIC8gbWluRlBNUztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lLlxuICogSWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHkgYmVlbiByZXF1ZXN0ZWQsIGFuZCBpZiB0aGUgaW50ZXJuYWxcbiAqIGVtaXR0ZXIgaGFzIGxpc3RlbmVycywgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3JlcXVlc3RJZk5lZWRlZCA9IGZ1bmN0aW9uIF9yZXF1ZXN0SWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICAvLyBlbnN1cmUgY2FsbGJhY2tzIGdldCBjb3JyZWN0IGRlbHRhXG4gICAgICAgIHRoaXMubGFzdFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX3RpY2spO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSBjYW5jZWxzIGEgcGVuZGluZyBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fY2FuY2VsSWZOZWVkZWQgPSBmdW5jdGlvbiBfY2FuY2VsSWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgIT09IG51bGwpXG4gICAge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZXF1ZXN0SWQpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiB0aGUgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQgaXQgY2hlY2tzIGlmIGEgZnJhbWUgaGFzIG5vdCBhbHJlYWR5XG4gKiBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbCBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMuIElmIHRoZXNlXG4gKiBjb25kaXRpb25zIGFyZSBtZXQsIGEgbmV3IGZyYW1lIGlzIHJlcXVlc3RlZC4gSWYgdGhlIHRpY2tlciBoYXMgbm90XG4gKiBiZWVuIHN0YXJ0ZWQsIGJ1dCBhdXRvU3RhcnQgaXMgYHRydWVgLCB0aGVuIHRoZSB0aWNrZXIgc3RhcnRzIG5vdyxcbiAqIGFuZCBjb250aW51ZXMgd2l0aCB0aGUgcHJldmlvdXMgY29uZGl0aW9ucyB0byByZXF1ZXN0IGEgbmV3IGZyYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3N0YXJ0SWZQb3NzaWJsZSA9IGZ1bmN0aW9uIF9zdGFydElmUG9zc2libGUoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5hdXRvU3RhcnQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29ufSBpbnRlcm5hbGx5IGZvciB0aGVcbiAqIGludGVybmFsICd0aWNrJyBldmVudC4gSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsXG4gKiBhbmQgaWYgc28gaXQgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGF0IHRoaXMgcG9pbnQuXG4gKlxuICogQHBhcmFtIGZuIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGFkZGVkIGZvciB1cGRhdGVzXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbihUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29uY2V9IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIG9uZSB1cGRhdGVcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZE9uY2UgPSBmdW5jdGlvbiBhZGRPbmNlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub25jZShUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29mZn0gaW50ZXJuYWxseSBmb3IgJ3RpY2snIGV2ZW50LlxuICogSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMgZm9yICd0aWNrJyBldmVudC5cbiAqIElmIGl0IGRvZXMsIHRoZW4gaXQgY2FuY2VscyB0aGUgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwYXJhbSBbZm5dIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIHJlbW92ZWRcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dCB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub2ZmKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIGlmICghdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgbGlzdGVuZXJzXG4gKiBhIG5ldyBhbmltYXRpb24gZnJhbWUgaXMgcmVxdWVzdGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiBzdGFydCgpXG57XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSB0aWNrZXIuIElmIHRoZSB0aWNrZXIgaGFzIHJlcXVlc3RlZFxuICogYW4gYW5pbWF0aW9uIGZyYW1lIGl0IGlzIGNhbmNlbGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uIHN0b3AoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2FuY2VsSWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRyaWdnZXJzIGFuIHVwZGF0ZS4gQW4gdXBkYXRlIGVudGFpbHMgc2V0dGluZyB0aGVcbiAqIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNlbGFwc2VkTVN9LFxuICogdGhlIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICogaW52b2tpbmcgYWxsIGxpc3RlbmVycyB3aXRoIGN1cnJlbnQgZGVsdGFUaW1lLFxuICogYW5kIHRoZW4gZmluYWxseSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbGFzdFRpbWV9XG4gKiB3aXRoIHRoZSB2YWx1ZSBvZiBjdXJyZW50VGltZSB0aGF0IHdhcyBwcm92aWRlZC5cbiAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgYW5pbWF0aW9uXG4gKiBmcmFtZSBjYWxsYmFja3MgaWYgdGhlIHRpY2tlciBpbnN0YW5jZSBoYXMgYmVlbiBzdGFydGVkXG4gKiBhbmQgbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqXG4gKiBAcGFyYW0gW2N1cnJlbnRUaW1lPXBlcmZvcm1hbmNlLm5vdygpXSB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9IHRoZSBjdXJyZW50IHRpbWUgb2YgZXhlY3V0aW9uXG4gKi9cblRpY2tlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKGN1cnJlbnRUaW1lKVxue1xuICAgIHZhciBlbGFwc2VkTVM7XG5cbiAgICAvLyBBbGxvdyBjYWxsaW5nIHVwZGF0ZSBkaXJlY3RseSB3aXRoIGRlZmF1bHQgY3VycmVudFRpbWUuXG4gICAgY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSB8fCBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAvLyBTYXZlIHVuY2FwcGVkIGVsYXBzZWRNUyBmb3IgbWVhc3VyZW1lbnRcbiAgICBlbGFwc2VkTVMgPSB0aGlzLmVsYXBzZWRNUyA9IGN1cnJlbnRUaW1lIC0gdGhpcy5sYXN0VGltZTtcblxuICAgIC8vIGNhcCB0aGUgbWlsbGlzZWNvbmRzIGVsYXBzZWQgdXNlZCBmb3IgZGVsdGFUaW1lXG4gICAgaWYgKGVsYXBzZWRNUyA+IHRoaXMuX21heEVsYXBzZWRNUylcbiAgICB7XG4gICAgICAgIGVsYXBzZWRNUyA9IHRoaXMuX21heEVsYXBzZWRNUztcbiAgICB9XG5cbiAgICB0aGlzLmRlbHRhVGltZSA9IGVsYXBzZWRNUyAqIENPTlNULlRBUkdFVF9GUE1TICogdGhpcy5zcGVlZDtcblxuICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgYWRkZWQgdG8gaW50ZXJuYWwgZW1pdHRlclxuICAgIHRoaXMuX2VtaXR0ZXIuZW1pdChUSUNLLCB0aGlzLmRlbHRhVGltZSk7XG5cbiAgICB0aGlzLmxhc3RUaW1lID0gY3VycmVudFRpbWU7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRpY2tlcjtcbiIsInZhciBUaWNrZXIgPSByZXF1aXJlKCcuL1RpY2tlcicpO1xuXG4vKipcbiAqIFRoZSBzaGFyZWQgdGlja2VyIGluc3RhbmNlIHVzZWQgYnkge0BsaW5rIFBJWEkuZXh0cmFzLk1vdmllQ2xpcH0uXG4gKiBhbmQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqIFRoZSBwcm9wZXJ0eSB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2F1dG9TdGFydH0gaXMgc2V0IHRvIGB0cnVlYFxuICogZm9yIHRoaXMgaW5zdGFuY2UuIFBsZWFzZSBmb2xsb3cgdGhlIGV4YW1wbGVzIGZvciB1c2FnZSwgaW5jbHVkaW5nXG4gKiBob3cgdG8gb3B0LW91dCBvZiBhdXRvLXN0YXJ0aW5nIHRoZSBzaGFyZWQgdGlja2VyLlxuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgdGlja2VyID0gUElYSS50aWNrZXIuc2hhcmVkO1xuICogLy8gU2V0IHRoaXMgdG8gcHJldmVudCBzdGFydGluZyB0aGlzIHRpY2tlciB3aGVuIGxpc3RlbmVycyBhcmUgYWRkZWQuXG4gKiAvLyBCeSBkZWZhdWx0IHRoaXMgaXMgdHJ1ZSBvbmx5IGZvciB0aGUgUElYSS50aWNrZXIuc2hhcmVkIGluc3RhbmNlLlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogLy8gRllJLCBjYWxsIHRoaXMgdG8gZW5zdXJlIHRoZSB0aWNrZXIgaXMgc3RvcHBlZC4gSXQgc2hvdWxkIGJlIHN0b3BwZWRcbiAqIC8vIGlmIHlvdSBoYXZlIG5vdCBhdHRlbXB0ZWQgdG8gcmVuZGVyIGFueXRoaW5nIHlldC5cbiAqIHRpY2tlci5zdG9wKCk7XG4gKiAvLyBDYWxsIHRoaXMgd2hlbiB5b3UgYXJlIHJlYWR5IGZvciBhIHJ1bm5pbmcgc2hhcmVkIHRpY2tlci5cbiAqIHRpY2tlci5zdGFydCgpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBZb3UgbWF5IHVzZSB0aGUgc2hhcmVkIHRpY2tlciB0byByZW5kZXIuLi5cbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDgwMCwgNjAwKTtcbiAqIHZhciBzdGFnZSA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogdmFyIGludGVyYWN0aW9uTWFuYWdlciA9IFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyKTtcbiAqIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocmVuZGVyZXIudmlldyk7XG4gKiB0aWNrZXIuYWRkKGZ1bmN0aW9uICh0aW1lKSB7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBPciB5b3UgY2FuIGp1c3QgdXBkYXRlIGl0IG1hbnVhbGx5LlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogdGlja2VyLnN0b3AoKTtcbiAqIGZ1bmN0aW9uIGFuaW1hdGUodGltZSkge1xuICogICAgIHRpY2tlci51cGRhdGUodGltZSk7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XG4gKiB9XG4gKiBhbmltYXRlKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAqXG4gKiBAdHlwZSB7UElYSS50aWNrZXIuVGlja2VyfVxuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbnZhciBzaGFyZWQgPSBuZXcgVGlja2VyKCk7XG5zaGFyZWQuYXV0b1N0YXJ0ID0gdHJ1ZTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudGlja2VyXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIHNoYXJlZDogc2hhcmVkLFxuICAgIFRpY2tlcjogVGlja2VyXG59O1xuIiwiLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuXG52YXIgR0xfTUFQID0ge307XG5cblxudmFyIGNyZWF0ZUluZGljZXNGb3JRdWFkcyA9IGZ1bmN0aW9uIChzaXplKVxue1xuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYXJyYXksIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgIFxuICAgIHZhciB0b3RhbEluZGljZXMgPSBzaXplICogNjtcblxuICAgIHZhciBpbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHRvdGFsSW5kaWNlcyk7XG5cblx0Ly8gZmlsbCB0aGUgaW5kaWNlcyB3aXRoIHRoZSBxdWFkcyB0byBkcmF3XG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCB0b3RhbEluZGljZXM7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kaWNlcztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzOyIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLnV0aWxzXG4gKi9cbnZhciB1dGlscyA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIF91aWQ6IDAsXG4gICAgX3NhaWRIZWxsbzogZmFsc2UsXG5cbiAgICBFdmVudEVtaXR0ZXI6ICAgcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIHBsdWdpblRhcmdldDogICByZXF1aXJlKCcuL3BsdWdpblRhcmdldCcpLFxuICAgIGFzeW5jOiAgICAgICAgICByZXF1aXJlKCdhc3luYycpLFxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllclxuICAgICAqXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllciB0byB1c2UuXG4gICAgICovXG4gICAgdWlkOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICsrdXRpbHMuX3VpZDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBoZXggY29sb3IgbnVtYmVyIHRvIGFuIFtSLCBHLCBCXSBhcnJheVxuICAgICAqXG4gICAgICogQHBhcmFtIGhleCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSAge251bWJlcltdfSBbb3V0PVtdXVxuICAgICAqIEByZXR1cm4ge251bWJlcltdfSBBbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIFtSLCBHLCBCXSBvZiB0aGUgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnJnYjogZnVuY3Rpb24gKGhleCwgb3V0KVxuICAgIHtcbiAgICAgICAgb3V0ID0gb3V0IHx8IFtdO1xuXG4gICAgICAgIG91dFswXSA9IChoZXggPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzFdID0gKGhleCA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIG91dFsyXSA9IChoZXggJiAweEZGKSAvIDI1NTtcblxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5nIGNvbG9yLlxuICAgICAqL1xuICAgIGhleDJzdHJpbmc6IGZ1bmN0aW9uIChoZXgpXG4gICAge1xuICAgICAgICBoZXggPSBoZXgudG9TdHJpbmcoMTYpO1xuICAgICAgICBoZXggPSAnMDAwMDAwJy5zdWJzdHIoMCwgNiAtIGhleC5sZW5ndGgpICsgaGV4O1xuXG4gICAgICAgIHJldHVybiAnIycgKyBoZXg7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgY29sb3IgYXMgYW4gW1IsIEcsIEJdIGFycmF5IHRvIGEgaGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIHJnYiB7bnVtYmVyW119XG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgY29sb3IgbnVtYmVyXG4gICAgICovXG4gICAgcmdiMmhleDogZnVuY3Rpb24gKHJnYilcbiAgICB7XG4gICAgICAgIHJldHVybiAoKHJnYlswXSoyNTUgPDwgMTYpICsgKHJnYlsxXSoyNTUgPDwgOCkgKyByZ2JbMl0qMjU1KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIENhbnZhcyBCbGVuZE1vZGVzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnJvd3NlclxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciB0aGV5IGFyZSBzdXBwb3J0ZWRcbiAgICAgKi9cbiAgICBjYW5Vc2VOZXdDYW52YXNCbGVuZE1vZGVzOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwbmdIZWFkID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVFBQUFBQkFRTUFBQUREOHAyT0FBQUFBMUJNVkVYLyc7XG4gICAgICAgIHZhciBwbmdFbmQgPSAnQUFBQUNrbEVRVlFJMTJOZ0FBQUFBZ0FCNGlHOE13QUFBQUJKUlU1RXJrSmdnZz09JztcblxuICAgICAgICB2YXIgbWFnZW50YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBtYWdlbnRhLnNyYyA9IHBuZ0hlYWQgKyAnQVA4MDRPYTYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciB5ZWxsb3cgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgeWVsbG93LnNyYyA9IHBuZ0hlYWQgKyAnL3dDS3h2UkYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY2FudmFzLndpZHRoID0gNjtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IDE7XG5cbiAgICAgICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShtYWdlbnRhLCAwLCAwKTtcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoeWVsbG93LCAyLCAwKTtcblxuICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDIsMCwxLDEpLmRhdGE7XG5cbiAgICAgICAgcmV0dXJuIChkYXRhWzBdID09PSAyNTUgJiYgZGF0YVsxXSA9PT0gMCAmJiBkYXRhWzJdID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBudW1iZXIsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgdGFrZW4gZnJvbSBTdGFybGluZyBGcmFtZXdvcmsgYXMgaXRzIHByZXR0eSBuZWF0IDspXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbnVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7bnVtYmVyfSB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqL1xuICAgIGdldE5leHRQb3dlck9mVHdvOiBmdW5jdGlvbiAobnVtYmVyKVxuICAgIHtcbiAgICAgICAgLy8gc2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Bvd2VyX29mX3R3byNGYXN0X2FsZ29yaXRobV90b19jaGVja19pZl9hX3Bvc2l0aXZlX251bWJlcl9pc19hX3Bvd2VyX29mX3R3b1xuICAgICAgICBpZiAobnVtYmVyID4gMCAmJiAobnVtYmVyICYgKG51bWJlciAtIDEpKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSAxO1xuXG4gICAgICAgICAgICB3aGlsZSAocmVzdWx0IDwgbnVtYmVyKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA8PD0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBjaGVja3MgaWYgdGhlIGdpdmVuIHdpZHRoIGFuZCBoZWlnaHQgbWFrZSBhIHBvd2VyIG9mIHR3byByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSBoZWlnaHQge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzUG93ZXJPZlR3bzogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm4gKHdpZHRoID4gMCAmJiAod2lkdGggJiAod2lkdGggLSAxKSkgPT09IDAgJiYgaGVpZ2h0ID4gMCAmJiAoaGVpZ2h0ICYgKGhlaWdodCAtIDEpKSA9PT0gMCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGdldCB0aGUgcmVzb2x1dGlvbiBvZiBhbiBhc3NldCBieSBsb29raW5nIGZvciB0aGUgcHJlZml4XG4gICAgICogdXNlZCBieSBzcHJpdGVzaGVldHMgYW5kIGltYWdlIHVybHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwge3N0cmluZ30gdGhlIGltYWdlIHBhdGhcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0UmVzb2x1dGlvbk9mVXJsOiBmdW5jdGlvbiAodXJsKVxuICAgIHtcbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBDT05TVC5SRVRJTkFfUFJFRklYLmV4ZWModXJsKTtcblxuICAgICAgICBpZiAocmVzb2x1dGlvbilcbiAgICAgICAge1xuICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChyZXNvbHV0aW9uWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAxO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBMb2dzIG91dCB0aGUgdmVyc2lvbiBhbmQgcmVuZGVyZXIgaW5mb3JtYXRpb24gZm9yIHRoaXMgcnVubmluZyBpbnN0YW5jZSBvZiBQSVhJLlxuICAgICAqIElmIHlvdSBkb24ndCB3YW50IHRvIHNlZSB0aGlzIG1lc3NhZ2UgeW91IGNhbiBzZXQgYFBJWEkudXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7YFxuICAgICAqIHNvIHRoZSBsaWJyYXJ5IHRoaW5rcyBpdCBhbHJlYWR5IHNhaWQgaXQuIEtlZXAgaW4gbWluZCB0aGF0IGRvaW5nIHRoYXQgd2lsbCBmb3JldmVyXG4gICAgICogbWFrZXMgeW91IGEgamVyayBmYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBUaGUgc3RyaW5nIHJlbmRlcmVyIHR5cGUgdG8gbG9nLlxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBzYXlIZWxsbzogZnVuY3Rpb24gKHR5cGUpXG4gICAge1xuICAgICAgICBpZiAodXRpbHMuX3NhaWRIZWxsbylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjaHJvbWUnKSA+IC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtcbiAgICAgICAgICAgICAgICAnXFxuICVjICVjICVjIFBpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0g4pywICcgKyB0eXBlICsgJyDinLAgICVjICcgKyAnICVjICcgKyAnIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8gICVjICVjIOKZpSVj4pmlJWPimaUgXFxuXFxuJyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmY2NmE1OyBiYWNrZ3JvdW5kOiAjMDMwMzA3OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmYzNkYzsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOydcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBhcmdzKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3aW5kb3cuY29uc29sZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nKCdQaXhpLmpzICcgKyBDT05TVC5WRVJTSU9OICsgJyAtICcgKyB0eXBlICsgJyAtIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8nKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuXG4gICAgICAgIHV0aWxzLl9zYWlkSGVsbG8gPSB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgZm9yIGNoZWNraW5nIGZvciB3ZWJnbCBzdXBwb3J0XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzV2ViR0xTdXBwb3J0ZWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB2YXIgY29udGV4dE9wdGlvbnMgPSB7IHN0ZW5jaWw6IHRydWUgfTtcbiAgICAgICAgdHJ5XG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghd2luZG93LldlYkdMUmVuZGVyaW5nQ29udGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSxcbiAgICAgICAgICAgICAgICBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIGNvbnRleHRPcHRpb25zKSB8fCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgY29udGV4dE9wdGlvbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gISEoZ2wgJiYgZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5zdGVuY2lsKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgc2lnbiBvZiBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBuIHtudW1iZXJ9XG4gICAgICogQHJldHVybnMge251bWJlcn0gMCBpZiBuIGlzIDAsIC0xIGlmIG4gaXMgbmVnYXRpdmUsIDEgaWYgbiBpIHBvc2l0aXZlXG4gICAgICovXG4gICAgc2lnbjogZnVuY3Rpb24gKG4pXG4gICAge1xuICAgICAgICByZXR1cm4gbiA/IChuIDwgMCA/IC0xIDogMSkgOiAwO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZW1vdmVJdGVtc1xuICAgICAqXG4gICAgICogQHBhcmFtIHthcnJheX0gYXJyIFRoZSB0YXJnZXQgYXJyYXlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRJZHggVGhlIGluZGV4IHRvIGJlZ2luIHJlbW92aW5nIGZyb20gKGluY2x1c2l2ZSlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmVtb3ZlQ291bnQgSG93IG1hbnkgaXRlbXMgdG8gcmVtb3ZlXG4gICAgICovXG4gICAgcmVtb3ZlSXRlbXM6IGZ1bmN0aW9uIChhcnIsIHN0YXJ0SWR4LCByZW1vdmVDb3VudClcbiAgICB7XG4gICAgICAgIHZhciBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIGlmIChzdGFydElkeCA+PSBsZW5ndGggfHwgcmVtb3ZlQ291bnQgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbW92ZUNvdW50ID0gKHN0YXJ0SWR4K3JlbW92ZUNvdW50ID4gbGVuZ3RoID8gbGVuZ3RoLXN0YXJ0SWR4IDogcmVtb3ZlQ291bnQpO1xuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJZHgsIGxlbiA9IGxlbmd0aC1yZW1vdmVDb3VudDsgaSA8IGxlbjsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBhcnJbaV0gPSBhcnJbaSArIHJlbW92ZUNvdW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyci5sZW5ndGggPSBsZW47XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIERlc2NyaWJlIHByb3BlcnR5IHVzYWdlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBUZXh0dXJlQ2FjaGU6IHt9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHt9XG59O1xuIiwiLyoqXG4gKiBNaXhpbnMgZnVuY3Rpb25hbGl0eSB0byBtYWtlIGFuIG9iamVjdCBoYXZlIFwicGx1Z2luc1wiLlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkudXRpbHNcbiAqIEBwYXJhbSBvYmoge29iamVjdH0gVGhlIG9iamVjdCB0byBtaXggaW50by5cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIHBsdWdpblRhcmdldC5taXhpbihNeU9iamVjdCk7XG4gKi9cbmZ1bmN0aW9uIHBsdWdpblRhcmdldChvYmopXG57XG4gICAgb2JqLl9fcGx1Z2lucyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHBsdWdpbiB0byBhbiBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwbHVnaW5OYW1lIHtzdHJpbmd9IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICAgICAqIEBwYXJhbSBjdG9yIHtGdW5jdGlvbn0gVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciB0aGUgcGx1Z2luLlxuICAgICAqL1xuICAgIG9iai5yZWdpc3RlclBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW5OYW1lLCBjdG9yKVxuICAgIHtcbiAgICAgICAgb2JqLl9fcGx1Z2luc1twbHVnaW5OYW1lXSA9IGN0b3I7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlcyBhbGwgdGhlIHBsdWdpbnMgb2YgdGhpcyBvYmplY3RcbiAgICAgKlxuICAgICAqL1xuICAgIG9iai5wcm90b3R5cGUuaW5pdFBsdWdpbnMgPSBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zID0gdGhpcy5wbHVnaW5zIHx8IHt9O1xuXG4gICAgICAgIGZvciAodmFyIG8gaW4gb2JqLl9fcGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbmV3IChvYmouX19wbHVnaW5zW29dKSh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5kZXN0cm95UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBvIGluIHRoaXMucGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBsdWdpbnMgPSBudWxsO1xuICAgIH07XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLyoqXG4gICAgICogTWl4ZXMgaW4gdGhlIHByb3BlcnRpZXMgb2YgdGhlIHBsdWdpblRhcmdldCBpbnRvIGFub3RoZXIgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0IHtvYmplY3R9IFRoZSBvYmogdG8gbWl4IGludG9cbiAgICAgKi9cbiAgICBtaXhpbjogZnVuY3Rpb24gbWl4aW4ob2JqKVxuICAgIHtcbiAgICAgICAgcGx1Z2luVGFyZ2V0KG9iaik7XG4gICAgfVxufTtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciBjb3JlID0gcmVxdWlyZSgnLi9jb3JlJyksXG4gICAgbWVzaCA9IHJlcXVpcmUoJy4vbWVzaCcpLFxuICAgIGV4dHJhcyA9IHJlcXVpcmUoJy4vZXh0cmFzJyksXG4gICAgZmlsdGVycyA9IHJlcXVpcmUoJy4vZmlsdGVycycpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIFNwcml0ZUJhdGNoXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLlBhcnRpY2xlQ29udGFpbmVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlNwcml0ZUJhdGNoID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLicpO1xufTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBBc3NldExvYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBzZWUgUElYSS5sb2FkZXJzLkxvYWRlclxuICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IFRoZSBsb2FkZXIgc3lzdGVtIHdhcyBvdmVyaGF1bGVkIGluIHBpeGkgdjMsIHBsZWFzZSBzZWUgdGhlIG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyIGNsYXNzLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLkFzc2V0TG9hZGVyID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuJyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb3JlLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFN0YWdlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQ29udGFpbmVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFN0YWdlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1lvdSBkbyBub3QgbmVlZCB0byB1c2UgYSBQSVhJIFN0YWdlIGFueSBtb3JlLCB5b3UgY2FuIHNpbXBseSByZW5kZXIgYW55IGNvbnRhaW5lci4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIERpc3BsYXlPYmplY3RDb250YWluZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgRGlzcGxheU9iamVjdENvbnRhaW5lcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEaXNwbGF5T2JqZWN0Q29udGFpbmVyIGhhcyBiZWVuIHNob3J0ZW5lZCB0byBDb250YWluZXIsIHBsZWFzZSB1c2UgQ29udGFpbmVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RyaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2hcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RyaXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFN0cmlwIGNsYXNzIGhhcyBiZWVuIHJlbmFtZWQgdG8gTWVzaCBhbmQgbW92ZWQgdG8gbWVzaC5NZXNoLCBwbGVhc2UgdXNlIG1lc2guTWVzaCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLk1lc2g7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBSb3BlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkubWVzaC5Sb3BlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFJvcGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFJvcGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gbWVzaC5Sb3BlLCBwbGVhc2UgdXNlIG1lc2guUm9wZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLlJvcGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBNb3ZpZUNsaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuTW92aWVDbGlwXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIE1vdmllQ2xpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgTW92aWVDbGlwIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5Nb3ZpZUNsaXAsIHBsZWFzZSB1c2UgZXh0cmFzLk1vdmllQ2xpcCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuTW92aWVDbGlwO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGlsaW5nU3ByaXRlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBUaWxpbmdTcHJpdGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRpbGluZ1Nwcml0ZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuVGlsaW5nU3ByaXRlLCBwbGVhc2UgdXNlIGV4dHJhcy5UaWxpbmdTcHJpdGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLlRpbGluZ1Nwcml0ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJpdG1hcFRleHRcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCaXRtYXBUZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCaXRtYXBUZXh0IGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5CaXRtYXBUZXh0LCBwbGVhc2UgdXNlIGV4dHJhcy5CaXRtYXBUZXh0IGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5CaXRtYXBUZXh0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgYmxlbmRNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIGJsZW5kTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGJsZW5kTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gQkxFTkRfTU9ERVMsIHBsZWFzZSB1c2UgQkxFTkRfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5CTEVORF9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNjYWxlTW9kZXNcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBzY2FsZU1vZGVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBzY2FsZU1vZGVzIGhhcyBiZWVuIG1vdmVkIHRvIFNDQUxFX01PREVTLCBwbGVhc2UgdXNlIFNDQUxFX01PREVTIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU0NBTEVfTU9ERVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBCYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuQmFzZVRleHR1cmVDYWNoZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCYXNlVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgQmFzZVRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5CYXNlVGV4dHVyZUNhY2hlLCBwbGVhc2UgdXNlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5UZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuVGV4dHVyZUNhY2hlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIG1hdGhcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBtYXRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgbWF0aCBuYW1lc3BhY2UgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIGFjY2VzcyBtZW1iZXJzIGFscmVhZHkgYWNjZXNzaWJsZSBvbiBQSVhJLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgUElYSS5TcHJpdGUjc2V0VGV4dHVyZVxuICogQHNlZSBQSVhJLlNwcml0ZSN0ZXh0dXJlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlLnByb3RvdHlwZS5zZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dHVyZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dHVyZSBwcm9wZXJ0eSwgZS5nIDogc3ByaXRlLnRleHR1cmUgPSB0ZXh0dXJlOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3NldFRleHRcbiAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmV4dHJhcy5CaXRtYXBUZXh0LnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dClcbntcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dCBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dCBwcm9wZXJ0eSwgZS5nIDogbXlCaXRtYXBUZXh0LnRleHQgPSBcXCdteSB0ZXh0XFwnOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLlRleHQjdGV4dFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteVRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRTdHlsZVxuICogQHNlZSBQSVhJLlRleHQjc3R5bGVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0LnByb3RvdHlwZS5zZXRTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlKVxue1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldFN0eWxlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBzdHlsZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0LnN0eWxlID0gc3R5bGU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQHNlZSBQSVhJLlRleHR1cmUjc2V0RnJhbWVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0dXJlLnByb3RvdHlwZS5zZXRGcmFtZSA9IGZ1bmN0aW9uKGZyYW1lKVxue1xuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldEZyYW1lIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBmcmFtZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0dXJlLmZyYW1lID0gZnJhbWU7Jyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhmaWx0ZXJzLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBzZWUgUElYSS5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBBYnN0cmFjdEZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLkFic3RyYWN0RmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBBYnN0cmFjdEZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkFic3RyYWN0RmlsdGVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkZYQUFGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuRlhBQUZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBGWEFBRmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuRlhBQUZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgRlhBQUZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkZYQUFGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuU3ByaXRlTWFza0ZpbHRlclxuICAgICAqIEBzZWUgUElYSS5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIFNwcml0ZU1hc2tGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBTcHJpdGVNYXNrRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU3ByaXRlTWFza0ZpbHRlcjtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkudXRpbHMudXVpZFxuICogQHNlZSBQSVhJLnV0aWxzLnVpZFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICovXG5jb3JlLnV0aWxzLnV1aWQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvbnNvbGUud2FybigndXRpbHMudXVpZCgpIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdXRpbHMudWlkKCkgZnJvbSBub3cgb24uJyk7XG4gICAgcmV0dXJuIGNvcmUudXRpbHMudWlkKCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogQSBCaXRtYXBUZXh0IG9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dCB1c2luZyBiaXRtYXAgZm9udC4gVG9cbiAqIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJywgJ1xccicgb3IgJ1xcclxcbicgaW4geW91ciBzdHJpbmcuIFlvdSBjYW4gZ2VuZXJhdGUgdGhlIGZudCBmaWxlcyB1c2luZzpcbiAqXG4gKiBBIEJpdG1hcFRleHQgY2FuIG9ubHkgYmUgY3JlYXRlZCB3aGVuIHRoZSBmb250IGlzIGxvYWRlZFxuICpcbiAqIGBgYGpzXG4gKiAvLyBpbiB0aGlzIGNhc2UgdGhlIGZvbnQgaXMgaW4gYSBmaWxlIGNhbGxlZCAnZGVzeXJlbC5mbnQnXG4gKiB2YXIgYml0bWFwVGV4dCA9IG5ldyBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0KFwidGV4dCB1c2luZyBhIGZhbmN5IGZvbnQhXCIsIHtmb250OiBcIjM1cHggRGVzeXJlbFwiLCBhbGlnbjogXCJyaWdodFwifSk7XG4gKiBgYGBcbiAqXG4gKlxuICogaHR0cDovL3d3dy5hbmdlbGNvZGUuY29tL3Byb2R1Y3RzL2JtZm9udC8gZm9yIHdpbmRvd3Mgb3JcbiAqIGh0dHA6Ly93d3cuYm1nbHlwaC5jb20vIGZvciBtYWMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBzdHlsZSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIHN0eWxlLmZvbnQge3N0cmluZ3xvYmplY3R9IFRoZSBmb250IGRlc2NyaXB0b3IgZm9yIHRoZSBvYmplY3QsIGNhbiBiZSBwYXNzZWQgYXMgYSBzdHJpbmcgb2YgZm9ybVxuICogICAgICBcIjI0cHggRm9udE5hbWVcIiBvciBcIkZvbnROYW1lXCIgb3IgYXMgYW4gb2JqZWN0IHdpdGggZXhwbGljaXQgbmFtZS9zaXplIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQubmFtZV0ge3N0cmluZ30gVGhlIGJpdG1hcCBmb250IGlkXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQuc2l6ZV0ge251bWJlcn0gVGhlIHNpemUgb2YgdGhlIGZvbnQgaW4gcGl4ZWxzLCBlLmcuIDI0XG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0XG4gKiAgICAgIHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUudGludD0weEZGRkZGRl0ge251bWJlcn0gVGhlIHRpbnQgY29sb3JcbiAqL1xuZnVuY3Rpb24gQml0bWFwVGV4dCh0ZXh0LCBzdHlsZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgb3ZlcmFsbCB0ZXh0LCBkaWZmZXJlbnQgZnJvbSBmb250U2l6ZSxcbiAgICAgKiB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBzdHlsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRleHRXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dEhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBsZXR0ZXIgc3ByaXRlIHBvb2wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZ2x5cGhzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZm9udCA9IHtcbiAgICAgICAgdGludDogc3R5bGUudGludCAhPT0gdW5kZWZpbmVkID8gc3R5bGUudGludCA6IDB4RkZGRkZGLFxuICAgICAgICBhbGlnbjogc3R5bGUuYWxpZ24gfHwgJ2xlZnQnLFxuICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICBzaXplOiAwXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgZm9udC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZm9udCA9IHN0eWxlLmZvbnQ7IC8vIHJ1biBmb250IHNldHRlclxuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IHRleHQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IHdpZHRoIG9mIHRoaXMgYml0bWFwIHRleHQgaW4gcGl4ZWxzLiBJZiB0aGUgdGV4dCBwcm92aWRlZCBpcyBsb25nZXIgdGhhbiB0aGUgdmFsdWUgcHJvdmlkZWQsIGxpbmUgYnJlYWtzIHdpbGwgYmUgYXV0b21hdGljYWxseSBpbnNlcnRlZCBpbiB0aGUgbGFzdCB3aGl0ZXNwYWNlLlxuICAgICAqIERpc2FibGUgYnkgc2V0dGluZyB2YWx1ZSB0byAwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IGxpbmUgaGVpZ2h0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRyeWluZyB0byB1c2UgdGhlIHRvdGFsIGhlaWdodCBvZiB0aGUgVGV4dCwgaWU6IHdoZW4gdHJ5aW5nIHRvIHZlcnRpY2FsbHkgYWxpZ24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkaXJ0eSBzdGF0ZSBvZiB0aGlzIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy51cGRhdGVUZXh0KCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5CaXRtYXBUZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5Db250YWluZXIucHJvdG90eXBlKTtcbkJpdG1hcFRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQml0bWFwVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gQml0bWFwVGV4dDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQml0bWFwVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGludCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0aW50OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQudGludDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQudGludCA9ICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlID49IDApID8gdmFsdWUgOiAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFsaWdubWVudCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbGVmdCdcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBhbGlnbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250LmFsaWduO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC5hbGlnbiA9IHZhbHVlIHx8ICdsZWZ0JztcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZvbnQgZGVzY3JpcHRvciBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0ZvbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgZm9udDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcgJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9mb250Lm5hbWUgPSB2YWx1ZS5sZW5ndGggPT09IDEgPyB2YWx1ZVswXSA6IHZhbHVlLnNsaWNlKDEpLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB2YWx1ZS5sZW5ndGggPj0gMiA/IHBhcnNlSW50KHZhbHVlWzBdLCAxMCkgOiBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV0uc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5zaXplID0gdHlwZW9mIHZhbHVlLnNpemUgPT09ICdudW1iZXInID8gdmFsdWUuc2l6ZSA6IHBhcnNlSW50KHZhbHVlLnNpemUsIDEwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGV4dCBhbmQgdXBkYXRlcyBpdCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkYXRhID0gQml0bWFwVGV4dC5mb250c1t0aGlzLl9mb250Lm5hbWVdO1xuICAgIHZhciBwb3MgPSBuZXcgY29yZS5Qb2ludCgpO1xuICAgIHZhciBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgIHZhciBjaGFycyA9IFtdO1xuICAgIHZhciBsYXN0TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbGluZVdpZHRocyA9IFtdO1xuICAgIHZhciBsaW5lID0gMDtcbiAgICB2YXIgc2NhbGUgPSB0aGlzLl9mb250LnNpemUgLyBkYXRhLnNpemU7XG4gICAgdmFyIGxhc3RTcGFjZSA9IC0xO1xuICAgIHZhciBtYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0Lmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gdGhpcy50ZXh0LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGxhc3RTcGFjZSA9IC8oXFxzKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSA/IGkgOiBsYXN0U3BhY2U7XG5cbiAgICAgICAgaWYgKC8oPzpcXHJcXG58XFxyfFxcbikvLnRlc3QodGhpcy50ZXh0LmNoYXJBdChpKSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXN0U3BhY2UgIT09IC0xICYmIHRoaXMubWF4V2lkdGggPiAwICYmIHBvcy54ICogc2NhbGUgPiB0aGlzLm1heFdpZHRoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKGNoYXJzLCBsYXN0U3BhY2UsIGkgLSBsYXN0U3BhY2UpO1xuICAgICAgICAgICAgaSA9IGxhc3RTcGFjZTtcbiAgICAgICAgICAgIGxhc3RTcGFjZSA9IC0xO1xuXG4gICAgICAgICAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbGluZSsrO1xuXG4gICAgICAgICAgICBwb3MueCA9IDA7XG4gICAgICAgICAgICBwb3MueSArPSBkYXRhLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hhckRhdGEgPSBkYXRhLmNoYXJzW2NoYXJDb2RlXTtcblxuICAgICAgICBpZiAoIWNoYXJEYXRhKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmV2Q2hhckNvZGUgJiYgY2hhckRhdGEua2VybmluZ1twcmV2Q2hhckNvZGVdKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb3MueCArPSBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV07XG4gICAgICAgIH1cblxuICAgICAgICBjaGFycy5wdXNoKHt0ZXh0dXJlOmNoYXJEYXRhLnRleHR1cmUsIGxpbmU6IGxpbmUsIGNoYXJDb2RlOiBjaGFyQ29kZSwgcG9zaXRpb246IG5ldyBjb3JlLlBvaW50KHBvcy54ICsgY2hhckRhdGEueE9mZnNldCwgcG9zLnkgKyBjaGFyRGF0YS55T2Zmc2V0KX0pO1xuICAgICAgICBsYXN0TGluZVdpZHRoID0gcG9zLnggKyAoY2hhckRhdGEudGV4dHVyZS53aWR0aCArIGNoYXJEYXRhLnhPZmZzZXQpO1xuICAgICAgICBwb3MueCArPSBjaGFyRGF0YS54QWR2YW5jZTtcbiAgICAgICAgbWF4TGluZUhlaWdodCA9IE1hdGgubWF4KG1heExpbmVIZWlnaHQsIChjaGFyRGF0YS55T2Zmc2V0ICsgY2hhckRhdGEudGV4dHVyZS5oZWlnaHQpKTtcbiAgICAgICAgcHJldkNoYXJDb2RlID0gY2hhckNvZGU7XG4gICAgfVxuXG4gICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG5cbiAgICB2YXIgbGluZUFsaWduT2Zmc2V0cyA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8PSBsaW5lOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYWxpZ25PZmZzZXQgPSAwO1xuXG4gICAgICAgIGlmICh0aGlzLl9mb250LmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbGlnbk9mZnNldCA9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5fZm9udC5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpbmVBbGlnbk9mZnNldHMucHVzaChhbGlnbk9mZnNldCk7XG4gICAgfVxuXG4gICAgdmFyIGxlbkNoYXJzID0gY2hhcnMubGVuZ3RoO1xuICAgIHZhciB0aW50ID0gdGhpcy50aW50O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbkNoYXJzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYyA9IHRoaXMuX2dseXBoc1tpXTsgLy8gZ2V0IHRoZSBuZXh0IGdseXBoIHNwcml0ZVxuXG4gICAgICAgIGlmIChjKVxuICAgICAgICB7XG4gICAgICAgICAgICBjLnRleHR1cmUgPSBjaGFyc1tpXS50ZXh0dXJlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgYyA9IG5ldyBjb3JlLlNwcml0ZShjaGFyc1tpXS50ZXh0dXJlKTtcbiAgICAgICAgICAgIHRoaXMuX2dseXBocy5wdXNoKGMpO1xuICAgICAgICB9XG5cbiAgICAgICAgYy5wb3NpdGlvbi54ID0gKGNoYXJzW2ldLnBvc2l0aW9uLnggKyBsaW5lQWxpZ25PZmZzZXRzW2NoYXJzW2ldLmxpbmVdKSAqIHNjYWxlO1xuICAgICAgICBjLnBvc2l0aW9uLnkgPSBjaGFyc1tpXS5wb3NpdGlvbi55ICogc2NhbGU7XG4gICAgICAgIGMuc2NhbGUueCA9IGMuc2NhbGUueSA9IHNjYWxlO1xuICAgICAgICBjLnRpbnQgPSB0aW50O1xuXG4gICAgICAgIGlmICghYy5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoYyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZW1vdmUgdW5uZWNlc3NhcnkgY2hpbGRyZW4uXG4gICAgZm9yIChpID0gbGVuQ2hhcnM7IGkgPCB0aGlzLl9nbHlwaHMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKHRoaXMuX2dseXBoc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0V2lkdGggPSBtYXhMaW5lV2lkdGggKiBzY2FsZTtcbiAgICB0aGlzLnRleHRIZWlnaHQgPSAocG9zLnkgKyBkYXRhLmxpbmVIZWlnaHQpICogc2NhbGU7XG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gbWF4TGluZUhlaWdodCAqIHNjYWxlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb2YgdGhpcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGV4dCBiZWZvcmUgY2FsbGluZyBwYXJlbnQncyBnZXRMb2NhbEJvdW5kc1xuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5cbkJpdG1hcFRleHQucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICByZXR1cm4gY29yZS5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzLmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59O1xuXG5CaXRtYXBUZXh0LmZvbnRzID0ge307XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIE1vdmllQ2xpcCBpcyBhIHNpbXBsZSB3YXkgdG8gZGlzcGxheSBhbiBhbmltYXRpb24gZGVwaWN0ZWQgYnkgYSBsaXN0IG9mIHRleHR1cmVzLlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgYWxpZW5JbWFnZXMgPSBbXCJpbWFnZV9zZXF1ZW5jZV8wMS5wbmdcIixcImltYWdlX3NlcXVlbmNlXzAyLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDMucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wNC5wbmdcIl07XG4gKiB2YXIgdGV4dHVyZUFycmF5ID0gW107XG4gKlxuICogZm9yICh2YXIgaT0wOyBpIDwgNDsgaSsrKVxuICoge1xuICogICAgICB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoYWxpZW5JbWFnZXNbaV0pO1xuICogICAgICB0ZXh0dXJlQXJyYXkucHVzaCh0ZXh0dXJlKTtcbiAqIH07XG4gKlxuICogdmFyIG1jID0gbmV3IFBJWEkuTW92aWVDbGlwKHRleHR1cmVBcnJheSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0dXJlcyB7UElYSS5UZXh0dXJlW118T2JqZWN0W119IGFuIGFycmF5IG9mIHtAbGluayBQSVhJLlRleHR1cmV9IG9yIGZyYW1lIG9iamVjdHMgdGhhdCBtYWtlIHVwIHRoZSBhbmltYXRpb25cbiAqIEBwYXJhbSB0ZXh0dXJlc1tdLnRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHtAbGluayBQSVhJLlRleHR1cmV9IG9mIHRoZSBmcmFtZVxuICogQHBhcmFtIHRleHR1cmVzW10udGltZSB7bnVtYmVyfSB0aGUgZHVyYXRpb24gb2YgdGhlIGZyYW1lIGluIG1zXG4gKi9cbmZ1bmN0aW9uIE1vdmllQ2xpcCh0ZXh0dXJlcylcbntcbiAgICBjb3JlLlNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmVzWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlID8gdGV4dHVyZXNbMF0gOiB0ZXh0dXJlc1swXS50ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kdXJhdGlvbnMgPSBudWxsO1xuXG4gICAgdGhpcy50ZXh0dXJlcyA9IHRleHR1cmVzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNwZWVkIHRoYXQgdGhlIE1vdmllQ2xpcCB3aWxsIHBsYXkgYXQuIEhpZ2hlciBpcyBmYXN0ZXIsIGxvd2VyIGlzIHNsb3dlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmFuaW1hdGlvblNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBtb3ZpZSBjbGlwIHJlcGVhdHMgYWZ0ZXIgcGxheWluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMubG9vcCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gYSBNb3ZpZUNsaXAgZmluaXNoZXMgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICovXG4gICAgdGhpcy5vbkNvbXBsZXRlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEVsYXBzZWQgdGltZSBzaW5jZSBhbmltYXRpb24gaGFzIGJlZW4gc3RhcnRlZCwgdXNlZCBpbnRlcm5hbGx5IHRvIGRpc3BsYXkgY3VycmVudCB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIE1vdmllQ2xpcCBpcyBjdXJyZW50bHkgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1vdmllQ2xpcC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5Nb3ZpZUNsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTW92aWVDbGlwO1xubW9kdWxlLmV4cG9ydHMgPSBNb3ZpZUNsaXA7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1vdmllQ2xpcC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiB0b3RhbEZyYW1lcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIGZyYW1lcyBpbiB0aGUgTW92aWVDbGlwLiBUaGlzIGlzIHRoZSBzYW1lIGFzIG51bWJlciBvZiB0ZXh0dXJlc1xuICAgICAqIGFzc2lnbmVkIHRvIHRoZSBNb3ZpZUNsaXAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdG90YWxGcmFtZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIHRleHR1cmVzIHVzZWQgZm9yIHRoaXMgTW92aWVDbGlwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqXG4gICAgICovXG4gICAgdGV4dHVyZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZih2YWx1ZVswXSBpbnN0YW5jZW9mIGNvcmUuVGV4dHVyZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcy5wdXNoKHZhbHVlW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMucHVzaCh2YWx1ZVtpXS50aW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgKiBUaGUgTW92aWVDbGlwcyBjdXJyZW50IGZyYW1lIGluZGV4XG4gICAgKlxuICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAqIEByZWFkb25seVxuICAgICovXG4gICAgY3VycmVudEZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRGcmFtZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpICUgdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRGcmFtZSA8IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY3VycmVudEZyYW1lICs9IHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RnJhbWU7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKipcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYoIXRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogUGxheXMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZih0aGlzLnBsYXlpbmcpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5aW5nID0gdHJ1ZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZ29lcyB0byBhIHNwZWNpZmljIGZyYW1lXG4gKlxuICogQHBhcmFtIGZyYW1lTnVtYmVyIHtudW1iZXJ9IGZyYW1lIGluZGV4IHRvIHN0b3AgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kU3RvcCA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLnN0b3AoKTtcblxuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbdGhpcy5jdXJyZW50RnJhbWVdO1xufTtcblxuLyoqXG4gKiBHb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWUgYW5kIGJlZ2lucyBwbGF5aW5nIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RhcnQgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kUGxheSA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IGZyYW1lTnVtYmVyO1xuXG4gICAgdGhpcy5wbGF5KCk7XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKiBAcHJpdmF0ZVxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWQgPSB0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2R1cmF0aW9ucyAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIHZhciBsYWcgPSB0aGlzLl9jdXJyZW50VGltZSAlIDEgKiB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuXG4gICAgICAgIGxhZyArPSBlbGFwc2VkIC8gNjAgKiAxMDAwO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPCAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZS0tO1xuICAgICAgICAgICAgbGFnICs9IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2lnbiA9IE1hdGguc2lnbih0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lKTtcbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgPSBNYXRoLmZsb29yKHRoaXMuX2N1cnJlbnRUaW1lKTtcblxuICAgICAgICB3aGlsZSAobGFnID49IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhZyAtPSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdICogc2lnbjtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IHNpZ247XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBsYWcgLyB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBlbGFwc2VkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jdXJyZW50VGltZSA8IDAgJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AoMCk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5fY3VycmVudFRpbWUgPj0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoICYmICF0aGlzLmxvb3ApXG4gICAge1xuICAgICAgICB0aGlzLmdvdG9BbmRTdG9wKHRoaXMuX3RleHR1cmVzLmxlbmd0aCAtIDEpO1xuXG4gICAgICAgIGlmICh0aGlzLm9uQ29tcGxldGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuXG59O1xuXG4vKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZGVzdHJveXMgaXRcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICggKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuICAgIGNvcmUuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIEEgc2hvcnQgaGFuZCB3YXkgb2YgY3JlYXRpbmcgYSBtb3ZpZWNsaXAgZnJvbSBhbiBhcnJheSBvZiBmcmFtZSBpZHNcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVzIHtzdHJpbmdbXX0gdGhlIGFycmF5IG9mIGZyYW1lcyBpZHMgdGhlIG1vdmllY2xpcCB3aWxsIHVzZSBhcyBpdHMgdGV4dHVyZSBmcmFtZXNcbiAqL1xuTW92aWVDbGlwLmZyb21GcmFtZXMgPSBmdW5jdGlvbiAoZnJhbWVzKVxue1xuICAgIHZhciB0ZXh0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0ZXh0dXJlcy5wdXNoKG5ldyBjb3JlLlRleHR1cmUuZnJvbUZyYW1lKGZyYW1lc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW92aWVDbGlwKHRleHR1cmVzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGltYWdlIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgaW1hZ2UgdXJscyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUltYWdlcyA9IGZ1bmN0aW9uIChpbWFnZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTsiLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICAvLyBhIHNwcml0ZSB1c2UgZGZvciByZW5kZXJpbmcgdGV4dHVyZXMuLlxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlcicpO1xuXG4vKipcbiAqIEEgdGlsaW5nIHNwcml0ZSBpcyBhIGZhc3Qgd2F5IG9mIHJlbmRlcmluZyBhIHRpbGluZyBpbWFnZVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmUge1RleHR1cmV9IHRoZSB0ZXh0dXJlIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFRpbGluZ1Nwcml0ZSh0ZXh0dXJlLCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGluZyBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVTY2FsZSA9IG5ldyBjb3JlLlBvaW50KDEsMSk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgcG9zaXRpb24gb2YgdGhlIGltYWdlIHRoYXQgaXMgYmVpbmcgdGlsZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBuZXcgY29yZS5Qb2ludCgwLDApO1xuXG4gICAgLy8vLy8gcHJpdmF0ZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHdpdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gd2lkdGggfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0IHx8IDEwMDtcblxuICAgIC8qKlxuICAgICAqIEFuIGludGVybmFsIFdlYkdMIFVWIGNhY2hlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlVXZzfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdXZzID0gbmV3IGNvcmUuVGV4dHVyZVV2cygpO1xuXG4gICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IG51bGw7XG5cbiAgICAvL1RPRE8gbW92ZS4uXG4gICAgdGhpcy5zaGFkZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcihcblxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1VHJhbnNmb3JtOycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJyAgIGNvb3JkIC09IHVUcmFuc2Zvcm0ueHk7JyxcbiAgICAgICAgJyAgIGNvb3JkIC89IHVUcmFuc2Zvcm0uenc7JyxcbiAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBjb29yZDsnLFxuXG4gICAgICAgICcgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpOycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgIFtcbiAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdUZyYW1lOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzIgdVBpeGVsU2l6ZTsnLFxuXG4gICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IG1vZCh2VGV4dHVyZUNvb3JkLCB1RnJhbWUuencpOycsXG4gICAgICAgICcgICBjb29yZCA9IGNsYW1wKGNvb3JkLCB1UGl4ZWxTaXplLCB1RnJhbWUuencgLSB1UGl4ZWxTaXplKTsnLFxuICAgICAgICAnICAgY29vcmQgKz0gdUZyYW1lLnh5OycsXG5cbiAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9ICB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdUZyYW1lOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVRyYW5zZm9ybTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLDAsMSwxXSB9LFxuICAgICAgICAgICAgICAgIHVQaXhlbFNpemUgOiB7IHR5cGUgOiAnMmZ2JywgdmFsdWU6IFsxLCAxXX1cbiAgICAgICAgICAgIH1cbiAgICAgICk7XG59XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsaW5nU3ByaXRlO1xubW9kdWxlLmV4cG9ydHMgPSBUaWxpbmdTcHJpdGU7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsaW5nU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRpbGluZ1Nwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybjtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICAvLyB0d2VhayBvdXIgdGV4dHVyZSB0ZW1wb3JhcmlseS4uXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUgfHwgIXRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGVtcFV2cyA9IHRleHR1cmUuX3V2cyxcbiAgICAgICAgdGVtcFdpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIHRlbXBIZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQsXG4gICAgICAgIHR3ID0gdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCxcbiAgICAgICAgdGggPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRoaXMuX3V2cztcbiAgICB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51UGl4ZWxTaXplLnZhbHVlWzBdID0gMS4wL3R3O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMV0gPSAxLjAvdGg7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMF0gPSB0ZW1wVXZzLngwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVsxXSA9IHRlbXBVdnMueTA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzJdID0gdGVtcFV2cy54MSAtIHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzNdID0gdGVtcFV2cy55MiAtIHRlbXBVdnMueTA7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzBdID0gKHRoaXMudGlsZVBvc2l0aW9uLnggJSAodGVtcFdpZHRoICogdGhpcy50aWxlU2NhbGUueCkpIC8gdGhpcy5fd2lkdGg7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsxXSA9ICh0aGlzLnRpbGVQb3NpdGlvbi55ICUgKHRlbXBIZWlnaHQgKiB0aGlzLnRpbGVTY2FsZS55KSkgLyB0aGlzLl9oZWlnaHQ7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsyXSA9ICggdHcgLyB0aGlzLl93aWR0aCApICogdGhpcy50aWxlU2NhbGUueDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzNdID0gKCB0aCAvIHRoaXMuX2hlaWdodCApICogdGhpcy50aWxlU2NhbGUueTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIodGhpcyk7XG5cbiAgICB0ZXh0dXJlLl91dnMgPSB0ZW1wVXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGVtcFdpZHRoO1xuICAgIHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRlbXBIZWlnaHQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBhIHJlZmVyZW5jZSB0byB0aGUgY2FudmFzIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0LFxuICAgICAgICB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgYmFzZVRleHR1cmUgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBtb2RYID0gKHRoaXMudGlsZVBvc2l0aW9uLnggLyB0aGlzLnRpbGVTY2FsZS54KSAlIHRleHR1cmUuX2ZyYW1lLndpZHRoLFxuICAgICAgICBtb2RZID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgLyB0aGlzLnRpbGVTY2FsZS55KSAlIHRleHR1cmUuX2ZyYW1lLmhlaWdodDtcblxuICAgIC8vIGNyZWF0ZSBhIG5pY2Ugc2hpbnkgcGF0dGVybiFcbiAgICAvLyBUT0RPIHRoaXMgbmVlZHMgdG8gYmUgcmVmcmVzaGVkIGlmIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgaWYoIXRoaXMuX2NhbnZhc1BhdHRlcm4pXG4gICAge1xuICAgICAgICAvLyBjdXQgYW4gb2JqZWN0IGZyb20gYSBzcHJpdGVzaGVldC4uXG4gICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IGNvcmUuQ2FudmFzQnVmZmVyKHRleHR1cmUuX2ZyYW1lLndpZHRoLCB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQpO1xuXG4gICAgICAgIC8vIFRpbnQgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgICAgaWYgKHRoaXMudGludCAhPT0gMHhGRkZGRkYpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlZFRpbnQgIT09IHRoaXMudGludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUgPSBDYW52YXNUaW50ZXIuZ2V0VGludGVkVGV4dHVyZSh0aGlzLCB0aGlzLnRpbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZSh0aGlzLnRpbnRlZFRleHR1cmUsIDAsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZShiYXNlVGV4dHVyZS5zb3VyY2UsIC10ZXh0dXJlLl9mcmFtZS54LCAtdGV4dHVyZS5fZnJhbWUueSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IHRlbXBDYW52YXMuY29udGV4dC5jcmVhdGVQYXR0ZXJuKCB0ZW1wQ2FudmFzLmNhbnZhcywgJ3JlcGVhdCcgKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgY29udGV4dCBzdGF0ZS4uXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb24pO1xuXG4gICAgLy8gVE9ETyAtIHRoaXMgc2hvdWxkIGJlIHJvbGxlZCBpbnRvIHRoZSBzZXRUcmFuc2Zvcm0gYWJvdmUuLlxuICAgIGNvbnRleHQuc2NhbGUodGhpcy50aWxlU2NhbGUueCx0aGlzLnRpbGVTY2FsZS55KTtcblxuICAgIGNvbnRleHQudHJhbnNsYXRlKG1vZFggKyAodGhpcy5hbmNob3IueCAqIC10aGlzLl93aWR0aCApLFxuICAgICAgICAgICAgICAgICAgICAgIG1vZFkgKyAodGhpcy5hbmNob3IueSAqIC10aGlzLl9oZWlnaHQpKTtcblxuICAgIC8vIGNoZWNrIGJsZW5kIG1vZGVcbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyBmaWxsIHRoZSBwYXR0ZXJuIVxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fY2FudmFzUGF0dGVybjtcbiAgICBjb250ZXh0LmZpbGxSZWN0KC1tb2RYLFxuICAgICAgICAgICAgICAgICAgICAgLW1vZFksXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl93aWR0aCAvIHRoaXMudGlsZVNjYWxlLngsXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWlnaHQgLyB0aGlzLnRpbGVTY2FsZS55KTtcblxuXG4gICAgLy9UT0RPIC0gcHJldHR5IHN1cmUgdGhpcyBjYW4gYmUgZGVsZXRlZC4uLlxuICAgIC8vY29udGV4dC50cmFuc2xhdGUoLXRoaXMudGlsZVBvc2l0aW9uLnggKyAodGhpcy5hbmNob3IueCAqIHRoaXMuX3dpZHRoKSwgLXRoaXMudGlsZVBvc2l0aW9uLnkgKyAodGhpcy5hbmNob3IueSAqIHRoaXMuX2hlaWdodCkpO1xuICAgIC8vY29udGV4dC5zY2FsZSgxIC8gdGhpcy50aWxlU2NhbGUueCwgMSAvIHRoaXMudGlsZVNjYWxlLnkpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBzcHJpdGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xuXG4gICAgdmFyIHcwID0gd2lkdGggKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICB2YXIgdzEgPSB3aWR0aCAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgdmFyIGgwID0gaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgdmFyIGgxID0gaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG5cbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgdmFyIHgxID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTIgPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHg0ID0gIGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciBtaW5YLFxuICAgICAgICBtYXhYLFxuICAgICAgICBtaW5ZLFxuICAgICAgICBtYXhZO1xuXG4gICAgbWluWCA9IHgxO1xuICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgbWluWSA9IHkxO1xuICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgbWF4WCA9IHgxO1xuICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgbWF4WSA9IHkxO1xuICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG5cbiAgICByZXR1cm4gYm91bmRzO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byBjaGVja1xuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKlxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsZVNjYWxlID0gbnVsbDtcbiAgICB0aGlzLl90aWxlU2NhbGVPZmZzZXQgPSBudWxsO1xuICAgIHRoaXMudGlsZVBvc2l0aW9uID0gbnVsbDtcblxuICAgIHRoaXMuX3V2cyA9IG51bGw7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSB0aWxpbmcgc3ByaXRlIHRoYXQgd2lsbCB1c2UgYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICovXG5UaWxpbmdTcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQsd2lkdGgsaGVpZ2h0KVxue1xuICAgIHZhciB0ZXh0dXJlID0gY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgJyArIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKHRleHR1cmUsd2lkdGgsaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBBIG5ldyBUaWxpbmdTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgd2lkdGgsIGhlaWdodCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRpbGluZ1Nwcml0ZShjb3JlLlRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpLHdpZHRoLGhlaWdodCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgRGlzcGxheU9iamVjdCA9IGNvcmUuRGlzcGxheU9iamVjdCxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gbnVsbDtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbEhpdFRlc3QgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsRGVzdHJveSA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVkU3ByaXRlID0gbnVsbDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGlzcGxheU9iamVjdC5wcm90b3R5cGUsIHtcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgeW91IHdhbnQgdGhpcyBkaXNwbGF5IG9iamVjdCB0byBiZSBjYWNoZWQgYXMgYSBiaXRtYXAuXG4gICAgICogVGhpcyBiYXNpY2FsbHkgdGFrZXMgYSBzbmFwIHNob3Qgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IGFzIGl0IGlzIGF0IHRoYXQgbW9tZW50LiBJdCBjYW4gcHJvdmlkZSBhIHBlcmZvcm1hbmNlIGJlbmVmaXQgZm9yIGNvbXBsZXggc3RhdGljIGRpc3BsYXlPYmplY3RzLlxuICAgICAqIFRvIHJlbW92ZSBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ2ZhbHNlJ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGNhY2hlQXNCaXRtYXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVBc0JpdG1hcDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NhY2hlQXNCaXRtYXAgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSB0aGlzLnJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gdGhpcy5yZW5kZXJDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMudXBkYXRlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzID0gdGhpcy5nZXRCb3VuZHM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbERlc3Ryb3kgPSB0aGlzLmRlc3Ryb3k7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQgPSB0aGlzLmNvbnRhaW5zUG9pbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSB0aGlzLl9jYWNoZUFzQml0bWFwRGVzdHJveTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXN0cm95Q2FjaGVkRGlzcGxheU9iamVjdCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXM7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRCb3VuZHMgPSB0aGlzLl9vcmlnaW5hbEdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX29yaWdpbmFsRGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fb3JpZ2luYWxDb250YWluc1BvaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBXZWJHTFxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gdGhlIFdlYkdMIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZFdlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENhY2hlZERpc3BsYXlPYmplY3QoIHJlbmRlcmVyICk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIoIHRoaXMuX2NhY2hlZFNwcml0ZSApO1xufTtcblxuLyoqXG4qIFByZXBhcmVzIHRoZSBXZWJHTCByZW5kZXJlciB0byBjYWNoZSB0aGUgc3ByaXRlXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGZpcnN0IHdlIGZsdXNoIGFueXRoaW5nIGxlZnQgaW4gdGhlIHJlbmRlcmVyIChvdGhlcndpc2UgaXQgd291bGQgZ2V0IHJlbmRlcmVkIHRvIHRoZSBjYWNoZWQgdGV4dHVyZSlcbiAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbiAgICAvL3RoaXMuZmlsdGVycz0gW107XG4gICAgLy8gbmV4dCB3ZSBmaW5kIHRoZSBkaW1lbnNpb25zIG9mIHRoZSB1bnRyYW5zZm9ybWVkIG9iamVjdFxuICAgIC8vIHRoaXMgZnVuY3Rpb24gYWxzbyBjYWxscyB1cGRhdGV0cmFuc2Zvcm0gb24gYWxsIGl0cyBjaGlsZHJlbiBhcyBwYXJ0IG9mIHRoZSBtZWFzdXJpbmcuIFRoaXMgbWVhbnMgd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIHRyYW5zZm9ybSBhZ2FpbiBpbiB0aGlzIGZ1bmN0aW9uXG4gICAgLy8gVE9ETyBwYXNzIGFuIG9iamVjdCB0byBjbG9uZSB0b28/IHNhdmVzIGhhdmluZyB0byBjcmVhdGUgYSBuZXcgb25lIGVhY2ggdGltZSFcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmNsb25lKCk7XG5cbiAgICAvLyBhZGQgc29tZSBwYWRkaW5nIVxuICAgIGlmKHRoaXMuX2ZpbHRlcnMpXG4gICAge1xuICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuX2ZpbHRlcnNbMF0ucGFkZGluZztcbiAgICAgICAgYm91bmRzLnggLT0gcGFkZGluZztcbiAgICAgICAgYm91bmRzLnkgLT0gcGFkZGluZztcblxuICAgICAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG4gICAgfVxuXG4gICAgLy8gZm9yIG5vdyB3ZSBjYWNoZSB0aGUgY3VycmVudCByZW5kZXJUYXJnZXQgdGhhdCB0aGUgd2ViR0wgcmVuZGVyZXIgaXMgY3VycmVudGx5IHVzaW5nLlxuICAgIC8vIHRoaXMgY291bGQgYmUgbW9yZSBlbGVnZW50Li5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldDtcbiAgICAvLyBXZSBhbHNvIHN0b3JlIHRoZSBmaWx0ZXIgc3RhY2sgLSBJIHdpbGwgZGVmaW5pdGVseSBsb29rIHRvIGNoYW5nZSBob3cgdGhpcyB3b3JrcyBhIGxpdHRsZSBsYXRlciBkb3duIHRoZSBsaW5lLlxuICAgIHZhciBzdGFjayA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2s7XG5cbiAgICAvLyB0aGlzIHJlbmRlclRleHR1cmUgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBjYWNoZWQgRGlzcGxheU9iamVjdFxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG5cblxuICAgIC8vIHNldCBhbGwgcHJvcGVydGllcyB0byB0aGVyZSBvcmlnaW5hbCBzbyB3ZSBjYW4gcmVuZGVyIHRvIGEgdGV4dHVyZVxuICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoY2FjaGVkUmVuZGVyVGFyZ2V0KTtcbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmZpbHRlclN0YWNrID0gc3RhY2s7XG5cbiAgICB0aGlzLnJlbmRlcldlYkdMICAgICA9IHRoaXMuX3JlbmRlckNhY2hlZFdlYkdMO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICAgICAgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgdHJhbnNmb3JtIG9mIHRoZSBjYWNoZWQgc3ByaXRlIHRvIGF2b2lkIHRoZSBuYXN0eSBmbGlja2VyLi5cbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgLy8gbWFwIHRoZSBoaXQgdGVzdC4uXG4gICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fY2FjaGVkU3ByaXRlLmNvbnRhaW5zUG9pbnQuYmluZCh0aGlzLl9jYWNoZWRTcHJpdGUpO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgc3ByaXRlIHdpdGggY2FudmFzXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gdGhlIENhbnZhcyByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9yZW5kZXJDYWNoZWRDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdENhbnZhcyggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLnJlbmRlckNhbnZhcyhyZW5kZXJlcik7XG59O1xuXG4vL1RPRE8gdGhpcyBjYW4gYmUgdGhlIHNhbWUgYXMgdGhlIHdlYkdMIHZlcmlzb24uLiB3aWxsIG5lZWQgdG8gZG8gYSBsaXR0bGUgdHdlYWtpbmcgZmlyc3QgdGhvdWdoLi5cbi8qKlxuKiBQcmVwYXJlcyB0aGUgQ2FudmFzIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvL2dldCBib3VuZHMgYWN0dWFsbHkgdHJhbnNmb3JtcyB0aGUgb2JqZWN0IGZvciB1cyBhbHJlYWR5IVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIG0sIHRydWUpO1xuXG4gICAgLy8gbm93IHJlc3RvcmUgdGhlIHN0YXRlIGJlIHNldHRpbmcgdGhlIG5ldyBwcm9wZXJ0aWVzXG4gICAgcmVuZGVyZXIuY29udGV4dCA9IGNhY2hlZFJlbmRlclRhcmdldDtcblxuICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fcmVuZGVyQ2FjaGVkQ2FudmFzO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICA9IHRoaXMuX2dldENhY2hlZEJvdW5kcztcblxuXG4gICAgLy8gY3JlYXRlIG91ciBjYWNoZWQgc3ByaXRlXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IGNvcmUuU3ByaXRlKHJlbmRlclRleHR1cmUpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogQ2FsY3VsYXRlcyB0aGUgYm91bmRzIG9mIHRoZSBjYWNoZWQgc3ByaXRlXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2dldENhY2hlZEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLl9jYWNoZWRTcHJpdGUuZ2V0Qm91bmRzKCk7XG59O1xuXG4vKipcbiogRGVzdHJveXMgdGhlIGNhY2hlZCBzcHJpdGUuXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX3RleHR1cmUuZGVzdHJveSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59O1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcERlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSgpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSBpbnN0YW5jZSBuYW1lIG9mIHRoZSBvYmplY3QuXG4gKlxuICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAqIEBtZW1iZXIge3N0cmluZ31cbiAqL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5uYW1lID0gbnVsbDtcblxuLyoqXG4qIFJldHVybnMgdGhlIGRpc3BsYXkgb2JqZWN0IGluIHRoZSBjb250YWluZXJcbipcbiogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuKiBAcGFyYW0gbmFtZSB7c3RyaW5nfSBpbnN0YW5jZSBuYW1lXG4qIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiovXG5jb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWUgPSBmdW5jdGlvbiAobmFtZSlcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbltpXS5uYW1lID09PSBuYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdFxuKlxuKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuKiBAcGFyYW0gcG9pbnQge1BvaW50fSB0aGUgcG9pbnQgdG8gd3JpdGUgdGhlIGdsb2JhbCB2YWx1ZSB0by4gSWYgbnVsbCBhIG5ldyBwb2ludCB3aWxsIGJlIHJldHVybmVkXG4qIEByZXR1cm4ge1BvaW50fVxuKi9cbmNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0R2xvYmFsUG9zaXRpb24gPSBmdW5jdGlvbiAocG9pbnQpXG57XG4gICAgcG9pbnQgPSBwb2ludCB8fCBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgaWYodGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICBwb2ludC54ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMud29ybGRUcmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHBvaW50LnggPSB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIHBvaW50LnkgPSB0aGlzLnBvc2l0aW9uLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxucmVxdWlyZSgnLi9jYWNoZUFzQml0bWFwJyk7XG5yZXF1aXJlKCcuL2dldENoaWxkQnlOYW1lJyk7XG5yZXF1aXJlKCcuL2dldEdsb2JhbFBvc2l0aW9uJyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmV4dHJhc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNb3ZpZUNsaXA6ICAgICAgcmVxdWlyZSgnLi9Nb3ZpZUNsaXAnKSxcbiAgICBUaWxpbmdTcHJpdGU6ICAgcmVxdWlyZSgnLi9UaWxpbmdTcHJpdGUnKSxcbiAgICBCaXRtYXBUZXh0OiAgICAgcmVxdWlyZSgnLi9CaXRtYXBUZXh0Jylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGUgWSBpcyBmbGlwcGVkIGluIHRoaXMgc2hhZGVyIGZvciBzb21lIHJlYXNvbi5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgc2hhZGVyIDogaHR0cHM6Ly93d3cuc2hhZGVydG95LmNvbS92aWV3L2xzc0dEaiBieSBAbW92QVgxM2hcbiAqL1xuXG4vKipcbiAqIEFuIEFTQ0lJIGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQXNjaWlGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gZmxvYXQgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IGNoYXJhY3RlcihmbG9hdCBuLCB2ZWMyIHApXFxue1xcbiAgICBwID0gZmxvb3IocCp2ZWMyKDQuMCwgLTQuMCkgKyAyLjUpO1xcbiAgICBpZiAoY2xhbXAocC54LCAwLjAsIDQuMCkgPT0gcC54ICYmIGNsYW1wKHAueSwgMC4wLCA0LjApID09IHAueSlcXG4gICAge1xcbiAgICAgICAgaWYgKGludChtb2Qobi9leHAyKHAueCArIDUuMCpwLnkpLCAyLjApKSA9PSAxKSByZXR1cm4gMS4wO1xcbiAgICB9XFxuICAgIHJldHVybiAwLjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5O1xcblxcbiAgICB2ZWMzIGNvbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgZmxvb3IoIHV2IC8gcGl4ZWxTaXplICkgKiBwaXhlbFNpemUgLyBkaW1lbnNpb25zLnh5KS5yZ2I7XFxuXFxuICAgIGZsb2F0IGdyYXkgPSAoY29sLnIgKyBjb2wuZyArIGNvbC5iKSAvIDMuMDtcXG5cXG4gICAgZmxvYXQgbiA9ICA2NTUzNi4wOyAgICAgICAgICAgICAvLyAuXFxuICAgIGlmIChncmF5ID4gMC4yKSBuID0gNjU2MDAuMDsgICAgLy8gOlxcbiAgICBpZiAoZ3JheSA+IDAuMykgbiA9IDMzMjc3Mi4wOyAgIC8vICpcXG4gICAgaWYgKGdyYXkgPiAwLjQpIG4gPSAxNTI1NTA4Ni4wOyAvLyBvXFxuICAgIGlmIChncmF5ID4gMC41KSBuID0gMjMzODUxNjQuMDsgLy8gJlxcbiAgICBpZiAoZ3JheSA+IDAuNikgbiA9IDE1MjUyMDE0LjA7IC8vIDhcXG4gICAgaWYgKGdyYXkgPiAwLjcpIG4gPSAxMzE5OTQ1Mi4wOyAvLyBAXFxuICAgIGlmIChncmF5ID4gMC44KSBuID0gMTE1MTI4MTAuMDsgLy8gI1xcblxcbiAgICB2ZWMyIHAgPSBtb2QoIHV2IC8gKCBwaXhlbFNpemUgKiAwLjUgKSwgMi4wKSAtIHZlYzIoMS4wKTtcXG4gICAgY29sID0gY29sICogY2hhcmFjdGVyKG4sIHApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbCwgMS4wKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiA4IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkFzY2lpRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQXNjaWlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXNjaWlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFzY2lpRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBc2NpaUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGl4ZWwgc2l6ZSB1c2VkIGJ5IHRoZSBmaWx0ZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Bc2NpaUZpbHRlciNcbiAgICAgKi9cbiAgICBzaXplOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsb29tRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsb29tRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlciA9IG5ldyBCbHVyWUZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcbn1cblxuQmxvb21GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbG9vbUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbG9vbUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxvb21GaWx0ZXI7XG5cbkJsb29tRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAvL1RPRE8gLSBjb3B5VGV4U3ViSW1hZ2UyRCBjb3VsZCBiZSB1c2VkIGhlcmU/XG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5TQ1JFRU4pO1xuXG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsb29tRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cblxuLyoqXG4gKiBUaGUgQmx1ckRpckZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0b3dhcmQgYSBkaXJlY3Rpb24gdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpclhcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJZXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJEaXJGaWx0ZXIoZGlyWCwgZGlyWSlcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gZmxvYXQgZGlyWDtcXG51bmlmb3JtIGZsb2F0IGRpclk7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbM107XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWSApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApICogMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pICogMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pICogMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSAqIDAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgZGlyWDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogZGlyWCB8fCAwIH0sXG4gICAgICAgICAgICBkaXJZOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJZIHx8IDAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWCBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJYID0gZGlyWCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWSBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJZID0gZGlyWSB8fCAwO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJEaXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJEaXJGaWx0ZXI7XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcikge1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZiAodGhpcy5wYXNzZXMgPT09IDEpIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCByZW5kZXJUYXJnZXQsIGNsZWFyKTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMjsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL3RoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvICh0aGlzLnBhc3NlcysoaSoyKSkgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCByZW5kZXJUYXJnZXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IHZhbHVlICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBkaXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyWDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZGlyWC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJZO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJZLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWUZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBCbHVyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG59XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJGaWx0ZXI7XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHBhc3Nlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5ibHVyWEZpbHRlci5wYXNzZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcyA9IHRoaXMuYmx1cllGaWx0ZXIucGFzc2VzID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1clhGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJYRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAxMiAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwNCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuXFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1clhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1clhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJYRmlsdGVyO1xuXG5CbHVyWEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1clhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJYRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gIE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJZRmlsdGVyIGFwcGxpZXMgYSBob3Jpem9udGFsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAxMiAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDEyICogc3RyZW5ndGgpO1xcblxcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJZRmlsdGVyO1xuXG5CbHVyWUZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gTWF0aC5hYnModGhpcy5zdHJlbmd0aCkgLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIFNtYXJ0IEJsdXIgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTbWFydEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgKiBwZXJjZW50KTtcXG4gICAgICAgIHNhbXBsZS5yZ2IgKj0gc2FtcGxlLmE7XFxuICAgICAgICBjb2xvciArPSBzYW1wbGUgKiB3ZWlnaHQ7XFxuICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgLyB0b3RhbDtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAvPSBnbF9GcmFnQ29sb3IuYSArIDAuMDAwMDE7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgZGVsdGE6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC4xLCB5OiAwLjAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU21hcnRCbHVyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTbWFydEJsdXJGaWx0ZXI7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA1eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIGBgYGpzXG4gKiAgdmFyIGNvbG9yTWF0cml4ID0gbmV3IFBJWEkuQ29sb3JNYXRyaXhGaWx0ZXIoKTtcbiAqICBjb250YWluZXIuZmlsdGVycyA9IFtjb2xvck1hdHJpeF07XG4gKiAgY29sb3JNYXRyaXguY29udHJhc3QoMik7XG4gKiBgYGBcbiAqIEBhdXRob3IgQ2zDqW1lbnQgQ2hlbmViYXVsdCA8Y2xlbWVudEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ29sb3JNYXRyaXhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgbVsyNV07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcblxcbiAgICB2ZWM0IGMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IuciA9IChtWzBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzJdICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IG1bNF07XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5nID0gKG1bNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bN10gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gbVs5XTtcXG5cXG4gICAgIGdsX0ZyYWdDb2xvci5iID0gKG1bMTBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzExXSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IG1bMTRdO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmEgPSAobVsxNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTZdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gbVsxOV07XFxuXFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICcxZnYnLCB2YWx1ZTogW1xuICAgICAgICAgICAgICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvck1hdHJpeEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JNYXRyaXhGaWx0ZXI7XG5cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGN1cnJlbnQgbWF0cml4IGFuZCBzZXQgdGhlIG5ldyBvbmVcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IGlmIHRydWUsIGN1cnJlbnQgbWF0cml4IGFuZCBtYXRyaXggYXJlIG11bHRpcGxpZWQuIElmIGZhbHNlLCBqdXN0IHNldCB0aGUgY3VycmVudCBtYXRyaXggd2l0aCBAcGFyYW0gbWF0cml4XG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fbG9hZE1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgsIG11bHRpcGx5KVxue1xuICAgIG11bHRpcGx5ID0gISFtdWx0aXBseTtcblxuICAgIHZhciBuZXdNYXRyaXggPSBtYXRyaXg7XG5cbiAgICBpZiAobXVsdGlwbHkpIHtcbiAgICAgICAgdGhpcy5fbXVsdGlwbHkobmV3TWF0cml4LCB0aGlzLnVuaWZvcm1zLm0udmFsdWUsIG1hdHJpeCk7XG4gICAgICAgIG5ld01hdHJpeCA9IHRoaXMuX2NvbG9yTWF0cml4KG5ld01hdHJpeCk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgbWF0cml4XG4gICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gbmV3TWF0cml4O1xufTtcblxuLyoqXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQ1J3NcbiAqXG4gKiBAcGFyYW0gb3V0IHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0gYSB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIGIge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyBvdXQge251bWJlcltdfSAobWF0IDV4NClcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpXG57XG5cbiAgICAvLyBSZWQgQ2hhbm5lbFxuICAgIG91dFswXSA9IChhWzBdICogYlswXSkgKyAoYVsxXSAqIGJbNV0pICsgKGFbMl0gKiBiWzEwXSkgKyAoYVszXSAqIGJbMTVdKTtcbiAgICBvdXRbMV0gPSAoYVswXSAqIGJbMV0pICsgKGFbMV0gKiBiWzZdKSArIChhWzJdICogYlsxMV0pICsgKGFbM10gKiBiWzE2XSk7XG4gICAgb3V0WzJdID0gKGFbMF0gKiBiWzJdKSArIChhWzFdICogYls3XSkgKyAoYVsyXSAqIGJbMTJdKSArIChhWzNdICogYlsxN10pO1xuICAgIG91dFszXSA9IChhWzBdICogYlszXSkgKyAoYVsxXSAqIGJbOF0pICsgKGFbMl0gKiBiWzEzXSkgKyAoYVszXSAqIGJbMThdKTtcbiAgICBvdXRbNF0gPSAoYVswXSAqIGJbNF0pICsgKGFbMV0gKiBiWzldKSArIChhWzJdICogYlsxNF0pICsgKGFbM10gKiBiWzE5XSk7XG5cbiAgICAvLyBHcmVlbiBDaGFubmVsXG4gICAgb3V0WzVdID0gKGFbNV0gKiBiWzBdKSArIChhWzZdICogYls1XSkgKyAoYVs3XSAqIGJbMTBdKSArIChhWzhdICogYlsxNV0pO1xuICAgIG91dFs2XSA9IChhWzVdICogYlsxXSkgKyAoYVs2XSAqIGJbNl0pICsgKGFbN10gKiBiWzExXSkgKyAoYVs4XSAqIGJbMTZdKTtcbiAgICBvdXRbN10gPSAoYVs1XSAqIGJbMl0pICsgKGFbNl0gKiBiWzddKSArIChhWzddICogYlsxMl0pICsgKGFbOF0gKiBiWzE3XSk7XG4gICAgb3V0WzhdID0gKGFbNV0gKiBiWzNdKSArIChhWzZdICogYls4XSkgKyAoYVs3XSAqIGJbMTNdKSArIChhWzhdICogYlsxOF0pO1xuICAgIG91dFs5XSA9IChhWzVdICogYls0XSkgKyAoYVs2XSAqIGJbOV0pICsgKGFbN10gKiBiWzE0XSkgKyAoYVs4XSAqIGJbMTldKTtcblxuICAgIC8vIEJsdWUgQ2hhbm5lbFxuICAgIG91dFsxMF0gPSAoYVsxMF0gKiBiWzBdKSArIChhWzExXSAqIGJbNV0pICsgKGFbMTJdICogYlsxMF0pICsgKGFbMTNdICogYlsxNV0pO1xuICAgIG91dFsxMV0gPSAoYVsxMF0gKiBiWzFdKSArIChhWzExXSAqIGJbNl0pICsgKGFbMTJdICogYlsxMV0pICsgKGFbMTNdICogYlsxNl0pO1xuICAgIG91dFsxMl0gPSAoYVsxMF0gKiBiWzJdKSArIChhWzExXSAqIGJbN10pICsgKGFbMTJdICogYlsxMl0pICsgKGFbMTNdICogYlsxN10pO1xuICAgIG91dFsxM10gPSAoYVsxMF0gKiBiWzNdKSArIChhWzExXSAqIGJbOF0pICsgKGFbMTJdICogYlsxM10pICsgKGFbMTNdICogYlsxOF0pO1xuICAgIG91dFsxNF0gPSAoYVsxMF0gKiBiWzRdKSArIChhWzExXSAqIGJbOV0pICsgKGFbMTJdICogYlsxNF0pICsgKGFbMTNdICogYlsxOV0pO1xuXG4gICAgLy8gQWxwaGEgQ2hhbm5lbFxuICAgIG91dFsxNV0gPSAoYVsxNV0gKiBiWzBdKSArIChhWzE2XSAqIGJbNV0pICsgKGFbMTddICogYlsxMF0pICsgKGFbMThdICogYlsxNV0pO1xuICAgIG91dFsxNl0gPSAoYVsxNV0gKiBiWzFdKSArIChhWzE2XSAqIGJbNl0pICsgKGFbMTddICogYlsxMV0pICsgKGFbMThdICogYlsxNl0pO1xuICAgIG91dFsxN10gPSAoYVsxNV0gKiBiWzJdKSArIChhWzE2XSAqIGJbN10pICsgKGFbMTddICogYlsxMl0pICsgKGFbMThdICogYlsxN10pO1xuICAgIG91dFsxOF0gPSAoYVsxNV0gKiBiWzNdKSArIChhWzE2XSAqIGJbOF0pICsgKGFbMTddICogYlsxM10pICsgKGFbMThdICogYlsxOF0pO1xuICAgIG91dFsxOV0gPSAoYVsxNV0gKiBiWzRdKSArIChhWzE2XSAqIGJbOV0pICsgKGFbMTddICogYlsxNF0pICsgKGFbMThdICogYlsxOV0pO1xuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEByZXR1cm4gbSB7bnVtYmVyW119IChtYXQgNXg0KSB3aXRoIGFsbCB2YWx1ZXMgYmV0d2VlbiAwLTFcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9jb2xvck1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgLy8gQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICAgIHZhciBtID0gbmV3IEZsb2F0MzJBcnJheShtYXRyaXgpO1xuICAgIG1bNF0gLz0gMjU1O1xuICAgIG1bOV0gLz0gMjU1O1xuICAgIG1bMTRdIC89IDI1NTtcbiAgICBtWzE5XSAvPSAyNTU7XG5cbiAgICByZXR1cm4gbTtcbn07XG5cbi8qKlxuICogQWRqdXN0cyBicmlnaHRuZXNzXG4gKlxuICogQHBhcmFtIGIge251bWJlcn0gdmFsdWUgb2YgdGhlIGJyaWd0aG5lc3MgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJpZ2h0bmVzcyA9IGZ1bmN0aW9uIChiLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBiLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCBiLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCBiLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgbWF0cmljZXMgaW4gZ3JleSBzY2FsZXNcbiAqXG4gKiBAcGFyYW0gc2NhbGUge251bWJlcn0gdmFsdWUgb2YgdGhlIGdyZXkgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlID0gZnVuY3Rpb24gKHNjYWxlLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuLy9BbWVyaWNhbml6ZWQgYWxpYXNcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmF5c2NhbGUgPSBDb2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlO1xuXG4vKipcbiAqIFNldCB0aGUgYmxhY2sgYW5kIHdoaXRlIG1hdHJpY2VcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ibGFja0FuZFdoaXRlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBodWUgcHJvcGVydHkgb2YgdGhlIGNvbG9yXG4gKlxuICogQHBhcmFtIHJvdGF0aW9uIHtudW1iZXJ9IGluIGRlZ3JlZXNcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5odWUgPSBmdW5jdGlvbiAocm90YXRpb24sIG11bHRpcGx5KVxue1xuICAgIHJvdGF0aW9uID0gKHJvdGF0aW9uIHx8IDApIC8gMTgwICogTWF0aC5QSTtcbiAgICB2YXIgY29zID0gTWF0aC5jb3Mocm90YXRpb24pLFxuICAgICAgICBzaW4gPSBNYXRoLnNpbihyb3RhdGlvbik7XG5cbiAgICAvLyBsdW1pbmFuY2VSZWQsIGx1bWluYW5jZUdyZWVuLCBsdW1pbmFuY2VCbHVlXG4gICAgdmFyIGx1bVIgPSAwLjIxMywgLy8gb3IgMC4zMDg2XG4gICAgICAgIGx1bUcgPSAwLjcxNSwgLy8gb3IgMC42MDk0XG4gICAgICAgIGx1bUIgPSAwLjA3MjsgLy8gb3IgMC4wODIwXG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBsdW1SICsgY29zICogKDEgLSBsdW1SKSArIHNpbiAqICgtbHVtUiksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKC1sdW1HKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoMSAtIGx1bUIpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgwLjE0MyksIGx1bUcgKyBjb3MgKiAoMSAtIGx1bUcpICsgc2luICogKDAuMTQwKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoLTAuMjgzKSwgMCwgMCxcbiAgICAgICAgbHVtUiArIGNvcyAqICgtbHVtUikgKyBzaW4gKiAoLSgxIC0gbHVtUikpLCBsdW1HICsgY29zICogKC1sdW1HKSArIHNpbiAqIChsdW1HKSwgbHVtQiArIGNvcyAqICgxIC0gbHVtQikgKyBzaW4gKiAobHVtQiksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLyoqXG4gKiBTZXQgdGhlIGNvbnRyYXN0IG1hdHJpeCwgaW5jcmVhc2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBkYXJrIGFuZCBicmlnaHRcbiAqIEluY3JlYXNlIGNvbnRyYXN0IDogc2hhZG93cyBkYXJrZXIgYW5kIGhpZ2hsaWdodHMgYnJpZ2h0ZXJcbiAqIERlY3JlYXNlIGNvbnRyYXN0IDogYnJpbmcgdGhlIHNoYWRvd3MgdXAgYW5kIHRoZSBoaWdobGlnaHRzIGRvd25cbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBjb250cmFzdFxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbnRyYXN0ID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHYgPSAoYW1vdW50IHx8IDApICsgMTtcbiAgICB2YXIgbyA9IC0xMjggKiAodiAtIDEpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgdiwgMCwgMCwgMCwgbyxcbiAgICAgICAgMCwgdiwgMCwgMCwgbyxcbiAgICAgICAgMCwgMCwgdiwgMCwgbyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHNhdHVyYXRpb24gbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGNvbG9yc1xuICogSW5jcmVhc2Ugc2F0dXJhdGlvbiA6IGluY3JlYXNlIGNvbnRyYXN0LCBicmlnaHRuZXNzLCBhbmQgc2hhcnBuZXNzXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNhdHVyYXRlID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHggPSAoYW1vdW50IHx8IDApICogMiAvIDMgKyAxO1xuICAgIHZhciB5ID0gKCh4IC0gMSkgKiAtMC41KTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHgsIHksIHksIDAsIDAsXG4gICAgICAgIHksIHgsIHksIDAsIDAsXG4gICAgICAgIHksIHksIHgsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRGVzYXR1cmF0ZSBpbWFnZSAocmVtb3ZlIGNvbG9yKVxuICpcbiAqIENhbGwgdGhlIHNhdHVyYXRlIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmRlc2F0dXJhdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICB0aGlzLnNhdHVyYXRlKC0xKTtcbn07XG5cbi8qKlxuICogTmVnYXRpdmUgaW1hZ2UgKGludmVyc2Ugb2YgY2xhc3NpYyByZ2IgbWF0cml4KVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uZWdhdGl2ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAxLCAxLCAwLCAwLFxuICAgICAgICAxLCAwLCAxLCAwLCAwLFxuICAgICAgICAxLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNlcGlhIGltYWdlXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNlcGlhID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMzkzLCAwLjc2ODk5OTksIDAuMTg4OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMzQ5LCAwLjY4NTk5OTksIDAuMTY3OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMjcyLCAwLjUzMzk5OTksIDAuMTMwOTk5OTksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgbW90aW9uIHBpY3R1cmUgcHJvY2VzcyBpbnZlbnRlZCBpbiAxOTE2ICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50ZWNobmljb2xvciA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjkxMjUyNzc4OTE0NTYwODMsIC0wLjg1NDUzNDQ5NzY5NTE2NDUsIC0wLjA5MTU1NTA4NDgyNzU1NTg1LCAwLCAxMS43OTM2MDM0MzQzNzczMzcsXG4gICAgICAgIC0wLjMwODc4MzMzODU5MjgwOTcsIDEuNzY1ODkwODU1NTQ1ODQyOCwgLTAuMTA2MDE3NDMwNzQ3MjIyNDUsIDAsIC03MC4zNTIwNTE2MTQ2MTM5OCxcbiAgICAgICAgLTAuMjMxMTAzMzc3NTQ4NjE2LCAtMC43NTAxODk5MTk3NDQwMjEyLCAxLjg0NzU5NzgxNjEwODE4OSwgMCwgMzAuOTUwOTQwODY5NDkxMTM4LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFBvbGFyb2lkIGZpbHRlclxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wb2xhcm9pZCA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjQzOCwgLTAuMDYyLCAtMC4wNjIsIDAsIDAsXG4gICAgICAgIC0wLjEyMiwgMS4zNzgsIC0wLjEyMiwgMCwgMCxcbiAgICAgICAgLTAuMDE2LCAtMC4wMTYsIDEuNDgzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEZpbHRlciB3aG8gdHJhbnNmb3JtcyA6IFJlZCAtPiBCbHVlIGFuZCBCbHVlIC0+IFJlZFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50b0JHUiA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIENvbG9yIHJldmVyc2FsIGZpbG0gaW50cm9kdWNlZCBieSBFYXN0bWFuIEtvZGFrIGluIDE5MzUuICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5rb2RhY2hyb21lID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuMTI4NTU4MjM5NjU5MzUyNSwgLTAuMzk2NzM4MjI4MzYwMTM0OCwgLTAuMDM5OTI1NTkxNzI5MjE3OTMsIDAsIDYzLjcyOTU4NzYyMTk2NTAyLFxuICAgICAgICAtMC4xNjQwNDMzOTk2MjI0NDYxNiwgMS4wODM1MjUxNTY2MjkxMzA0LCAtMC4wNTQ5ODgwNTExNTYzMzEzMiwgMCwgMjQuNzMyNDA3ODk2NzA2MjAzLFxuICAgICAgICAtMC4xNjc4NjAxMDcwNjE1NTc2MywgLTAuNTYwMzQxNjI3NzY5NTI0OCwgMS42MDE0ODUwNzYxOTY0OTQzLCAwLCAzNS42Mjk4MjgwNzQ2MDk0NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBCcm93biBkZWxpY2lvdXMgYnJvd25pIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJvd25pID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNTk5NzAyMzQ5ODE1OTcxNSwgMC4zNDU1MzI0MzA0ODM5MTI2MywgLTAuMjcwODI5ODY3NDUzODA0MiwgMCwgNDcuNDMxOTI4NTU2MDA4NzMsXG4gICAgICAgIC0wLjAzNzcwMzI0OTgzNzc4MzE1NywgMC44NjA5NTc3NTg3OTkyNjQxLCAwLjE1MDU5NTUyMzg4NDU5OTEzLCAwLCAtMzYuOTY4NDE0OTgzMTkxMjcsXG4gICAgICAgIDAuMjQxMTM2MzUxMjgxNTMzMzUsIC0wLjA3NDQxMDM3OTA4NDIyNDkyLCAwLjQ0OTcyMTgyMDY0ODc3MTUzLCAwLCAtNy41NjIwNzUyNzc1OTEyODMsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBWaW50YWdlIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudmludGFnZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjYyNzkzNDU2MzU2MDU5OTQsIDAuMzIwMjE4MzQyMDgxOTM2NywgLTAuMDM5NjU0MDgyMTEzMTI0NTMsIDAsIDkuNjUxMjg1ODM1Mjk0MTIzLFxuICAgICAgICAwLjAyNTc4Mzk3NzA0ODA4ODY4LCAwLjY0NDExODg2NDQzNzQ3NzEsIDAuMDMyNTkxMjc2MTYxNDkyOTQsIDAsIDcuNDYyODI5MTc2NDcwNTkxLFxuICAgICAgICAwLjA0NjYwNTU1NTY3ODI3MTksIC0wLjA4NTEyMzI5ODcyNDc4OTEsIDAuNTI0MTY0ODAxODcwMDQ2NSwgMCwgNS4xNTkxOTA1ODgyMzUyOTYsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBXZSBkb24ndCBrbm93IGV4YWN0bHkgd2hhdCBpdCBkb2VzLCBraW5kIG9mIGdyYWRpZW50IG1hcCwgYnV0IGZ1bm55IHRvIHBsYXkgd2l0aCFcbiAqXG4gKiBAcGFyYW0gZGVzYXR1cmF0aW9uIHtudW1iZXJ9XG4gKiBAcGFyYW0gdG9uZWQge251bWJlcn1cbiAqIEBwYXJhbSBsaWdodENvbG9yIHtzdHJpbmd9IChleGFtcGxlIDogXCIweEZGRTU4MFwiKVxuICogQHBhcmFtIGRhcmtDb2xvciB7c3RyaW5nfSAgKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbG9yVG9uZSA9IGZ1bmN0aW9uIChkZXNhdHVyYXRpb24sIHRvbmVkLCBsaWdodENvbG9yLCBkYXJrQ29sb3IsIG11bHRpcGx5KVxue1xuICAgIGRlc2F0dXJhdGlvbiA9IGRlc2F0dXJhdGlvbiB8fCAwLjI7XG4gICAgdG9uZWQgPSB0b25lZCB8fCAwLjE1O1xuICAgIGxpZ2h0Q29sb3IgPSBsaWdodENvbG9yIHx8IDB4RkZFNTgwO1xuICAgIGRhcmtDb2xvciA9IGRhcmtDb2xvciB8fCAweDMzODAwMDtcblxuICAgIHZhciBsUiA9ICgobGlnaHRDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEcgPSAoKGxpZ2h0Q29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEIgPSAobGlnaHRDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgdmFyIGRSID0gKChkYXJrQ29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGRHID0gKChkYXJrQ29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEIgPSAoZGFya0NvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjMsIDAuNTksIDAuMTEsIDAsIDAsXG4gICAgICAgIGxSLCBsRywgbEIsIGRlc2F0dXJhdGlvbiwgMCxcbiAgICAgICAgZFIsIGRHLCBkQiwgdG9uZWQsIDAsXG4gICAgICAgIGxSIC0gZFIsIGxHIC0gZEcsIGxCIC0gZEIsIDAsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBOaWdodCBlZmZlY3RcbiAqXG4gKiBAcGFyYW0gaW50ZW5zaXR5IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubmlnaHQgPSBmdW5jdGlvbiAoaW50ZW5zaXR5LCBtdWx0aXBseSlcbntcbiAgICBpbnRlbnNpdHkgPSBpbnRlbnNpdHkgfHwgMC4xO1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGludGVuc2l0eSAqICggLTIuMCksIC1pbnRlbnNpdHksIDAsIDAsIDAsXG4gICAgICAgIC1pbnRlbnNpdHksIDAsIGludGVuc2l0eSwgMCwgMCxcbiAgICAgICAgMCwgaW50ZW5zaXR5LCBpbnRlbnNpdHkgKiAyLjAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLypcbiAqIFByZWRhdG9yIGVmZmVjdFxuICpcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIGEgbmV3IGluZGVwZW50IG9uZVxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gaG93IG11Y2ggdGhlIHByZWRhdG9yIGZlZWxzIGhpcyBmdXR1cmUgdmljdGltXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucHJlZGF0b3IgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxMS4yMjQxMzA2MzA0OTMxNjQgKiBhbW91bnQsIC00Ljc5NDQ4Njk5OTUxMTcxOSAqIGFtb3VudCwgLTIuODc0NjExODU0NTUzMjIyNyAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC40MDM0MjQzODIyMDk3Nzc4MyAqIGFtb3VudCxcbiAgICAgICAgLTMuNjMzMDY5NzUzNjQ2ODUwNiAqIGFtb3VudCwgOS4xOTMxNTcxOTYwNDQ5MjIgKiBhbW91bnQsIC0yLjk1MTgxMDgzNjc5MTk5MiAqIGFtb3VudCwgMCAqIGFtb3VudCwgLTEuMzE2MTM1MDQ4ODY2MjcyICogYW1vdW50LFxuICAgICAgICAtMy4yMTg0MTk3OTAyNjc5NDQzICogYW1vdW50LCAtNC4yMzc1MDMwNTE3NTc4MTI1ICogYW1vdW50LCA3LjQ3NjQ0ODA1OTA4MjAzMSAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC44MDQ0NDU5MjIzNzQ3MjUzICogYW1vdW50LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogTFNEIGVmZmVjdFxuICpcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gSG93IGNyYXp5IGlzIHlvdXIgZWZmZWN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubHNkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDIsIC0wLjQsIDAuNSwgMCwgMCxcbiAgICAgICAgLTAuNSwgMiwgLTAuNCwgMCwgMCxcbiAgICAgICAgLTAuNCwgLTAuNSwgMywgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIHRoZSBkZWZhdWx0IG9uZVxuICpcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBmYWxzZSk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hdHJpeCBvZiB0aGUgY29sb3IgbWF0cml4IGZpbHRlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvck1hdHJpeEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCBbMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMF1cbiAgICAgKi9cbiAgICBtYXRyaXg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgbG93ZXJzIHRoZSBjb2xvciBkZXB0aCBvZiB5b3VyIGltYWdlIGJ5IHRoZSBnaXZlbiBhbW91bnQsIHByb2R1Y2luZyBhbiBpbWFnZSB3aXRoIGEgc21hbGxlciBwYWxldHRlLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvclN0ZXBGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc3RlcDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBjb2xvciA9IGZsb29yKGNvbG9yICogc3RlcCkgLyBzdGVwO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdGVwOiB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvclN0ZXBGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yU3RlcEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2Ygc3RlcHMgdG8gcmVkdWNlIHRoZSBwYWxldHRlIGJ5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29sb3JTdGVwRmlsdGVyI1xuICAgICAqL1xuICAgIHN0ZXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb252b2x1dGlvbkZpbHRlciBjbGFzcyBhcHBsaWVzIGEgbWF0cml4IGNvbnZvbHV0aW9uIGZpbHRlciBlZmZlY3QuXG4gKiBBIGNvbnZvbHV0aW9uIGNvbWJpbmVzIHBpeGVscyBpbiB0aGUgaW5wdXQgaW1hZ2Ugd2l0aCBuZWlnaGJvcmluZyBwaXhlbHMgdG8gcHJvZHVjZSBhIG5ldyBpbWFnZS5cbiAqIEEgd2lkZSB2YXJpZXR5IG9mIGltYWdlIGVmZmVjdHMgY2FuIGJlIGFjaGlldmVkIHRocm91Z2ggY29udm9sdXRpb25zLCBpbmNsdWRpbmcgYmx1cnJpbmcsIGVkZ2VcbiAqIGRldGVjdGlvbiwgc2hhcnBlbmluZywgZW1ib3NzaW5nLCBhbmQgYmV2ZWxpbmcuIFRoZSBtYXRyaXggc2hvdWxkIGJlIHNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBTZWUgaHR0cDovL2RvY3MuZ2ltcC5vcmcvZW4vcGx1Zy1pbi1jb252bWF0cml4Lmh0bWwgZm9yIG1vcmUgaW5mby5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSBBbiBhcnJheSBvZiB2YWx1ZXMgdXNlZCBmb3IgbWF0cml4IHRyYW5zZm9ybWF0aW9uLiBTcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFdpZHRoIG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqL1xuZnVuY3Rpb24gQ29udm9sdXRpb25GaWx0ZXIobWF0cml4LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgbWVkaXVtcCB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTtcXG51bmlmb3JtIGZsb2F0IG1hdHJpeFs5XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjNCBjMTEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgLSB0ZXhlbFNpemUpOyAvLyB0b3AgbGVmdFxcbiAgIHZlYzQgYzEyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55IC0gdGV4ZWxTaXplLnkpKTsgLy8gdG9wIGNlbnRlclxcbiAgIHZlYzQgYzEzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgcmlnaHRcXG5cXG4gICB2ZWM0IGMyMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCBsZWZ0XFxuICAgdmVjNCBjMjIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpOyAvLyBtaWQgY2VudGVyXFxuICAgdmVjNCBjMjMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSkpOyAvLyBtaWQgcmlnaHRcXG5cXG4gICB2ZWM0IGMzMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGxlZnRcXG4gICB2ZWM0IGMzMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLngsIHZUZXh0dXJlQ29vcmQueSArIHRleGVsU2l6ZS55KSk7IC8vIGJvdHRvbSBjZW50ZXJcXG4gICB2ZWM0IGMzMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIHRleGVsU2l6ZSk7IC8vIGJvdHRvbSByaWdodFxcblxcbiAgIGdsX0ZyYWdDb2xvciA9XFxuICAgICAgIGMxMSAqIG1hdHJpeFswXSArIGMxMiAqIG1hdHJpeFsxXSArIGMxMyAqIG1hdHJpeFsyXSArXFxuICAgICAgIGMyMSAqIG1hdHJpeFszXSArIGMyMiAqIG1hdHJpeFs0XSArIGMyMyAqIG1hdHJpeFs1XSArXFxuICAgICAgIGMzMSAqIG1hdHJpeFs2XSArIGMzMiAqIG1hdHJpeFs3XSArIGMzMyAqIG1hdHJpeFs4XTtcXG5cXG4gICBnbF9GcmFnQ29sb3IuYSA9IGMyMi5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hdHJpeDogICAgIHsgdHlwZTogJzFmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCkgfSxcbiAgICAgICAgICAgIHRleGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSAvIHdpZHRoLCB5OiAxIC8gaGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb252b2x1dGlvbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29udm9sdXRpb25GaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hdHJpeC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMS90aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueCA9IDEvdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS55ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQSBDcm9zcyBIYXRjaCBlZmZlY3QgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDcm9zc0hhdGNoRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGZsb2F0IGx1bSA9IGxlbmd0aCh0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQueHkpLnJnYik7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wLCAxLjAsIDEuMCwgMS4wKTtcXG5cXG4gICAgaWYgKGx1bSA8IDEuMDApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC43NSlcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjUwKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54ICsgZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuMylcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55IC0gNS4wLCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblwiXG4gICAgKTtcbn1cblxuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNyb3NzSGF0Y2hGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBEaXNwbGFjZW1lbnRGaWx0ZXIgY2xhc3MgdXNlcyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20gdGhlIHNwZWNpZmllZCB0ZXh0dXJlIChjYWxsZWQgdGhlIGRpc3BsYWNlbWVudCBtYXApIHRvIHBlcmZvcm0gYSBkaXNwbGFjZW1lbnQgb2YgYW4gb2JqZWN0LlxuICogWW91IGNhbiB1c2UgdGhpcyBmaWx0ZXIgdG8gYXBwbHkgYWxsIG1hbm9yIG9mIGNyYXp5IHdhcnBpbmcgZWZmZWN0c1xuICogQ3VycmVudGx5IHRoZSByIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB4IGFuZCB0aGUgZyBwcm9wZXJ0eSBvZiB0aGUgdGV4dHVyZSBpcyB1c2VkIHRvIG9mZnNldCB0aGUgeS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiAobWFrZSBzdXJlIGl0cyBhZGRlZCB0byB0aGUgc2NlbmUhKVxuICovXG5mdW5jdGlvbiBEaXNwbGFjZW1lbnRGaWx0ZXIoc3ByaXRlLCBzY2FsZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuICAgIHNwcml0ZS5yZW5kZXJhYmxlID0gZmFsc2U7XG5cbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2TWFwQ29vcmQgPSAoIG90aGVyTWF0cml4ICogdmVjMyggYVRleHR1cmVDb29yZCwgMS4wKSAgKS54eTtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMiBzY2FsZTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXBTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IG1hcCA9ICB0ZXh0dXJlMkQobWFwU2FtcGxlciwgdk1hcENvb3JkKTtcXG5cXG4gICBtYXAgLT0gMC41O1xcbiAgIG1hcC54eSAqPSBzY2FsZTtcXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgbWFwLngsIHZUZXh0dXJlQ29vcmQueSArIG1hcC55KSk7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtYXBTYW1wbGVyOiAgICAgeyB0eXBlOiAnc2FtcGxlcjJEJywgdmFsdWU6IHNwcml0ZS50ZXh0dXJlIH0sXG4gICAgICAgICAgICBvdGhlck1hdHJpeDogICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBtYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSkgfSxcbiAgICAgICAgICAgIHNjYWxlOiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG5cbiAgICBpZiAoc2NhbGUgPT09IG51bGwgfHwgc2NhbGUgPT09IHVuZGVmaW5lZClcbiAgICB7XG4gICAgICAgIHNjYWxlID0gMjA7XG4gICAgfVxuXG4gICAgdGhpcy5zY2FsZSA9IG5ldyBjb3JlLlBvaW50KHNjYWxlLCBzY2FsZSk7XG59XG5cbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGFjZW1lbnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERpc3BsYWNlbWVudEZpbHRlcjtcblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICBmaWx0ZXJNYW5hZ2VyLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeChpbnB1dC5mcmFtZSwgdGhpcy5tYXNrU3ByaXRlLCB0aGlzLm1hc2tNYXRyaXgpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5vdGhlck1hdHJpeC52YWx1ZSA9IHRoaXMubWFza01hdHJpeC50b0FycmF5KHRydWUpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueCA9IHRoaXMuc2NhbGUueCAqICgxL2lucHV0LmZyYW1lLndpZHRoKTtcbiAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlLnkgPSB0aGlzLnNjYWxlLnkgKiAoMS9pbnB1dC5mcmFtZS5oZWlnaHQpO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRGlzcGxhY2VtZW50RmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvZnVuL2RvdHNjcmVlbi5qc1xuICovXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIGRvdHNjcmVlbiBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgdG8gYmUgbWFkZSBvdXQgb2ZcbiAqIGJsYWNrIGFuZCB3aGl0ZSBoYWxmdG9uZSBkb3RzIGxpa2UgYW4gb2xkIHByaW50ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIERvdFNjcmVlbkZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XFxuXFxuZmxvYXQgcGF0dGVybigpXFxue1xcbiAgIGZsb2F0IHMgPSBzaW4oYW5nbGUpLCBjID0gY29zKGFuZ2xlKTtcXG4gICB2ZWMyIHRleCA9IHZUZXh0dXJlQ29vcmQgKiBkaW1lbnNpb25zLnh5O1xcbiAgIHZlYzIgcG9pbnQgPSB2ZWMyKFxcbiAgICAgICBjICogdGV4LnggLSBzICogdGV4LnksXFxuICAgICAgIHMgKiB0ZXgueCArIGMgKiB0ZXgueVxcbiAgICkgKiBzY2FsZTtcXG4gICByZXR1cm4gKHNpbihwb2ludC54KSAqIHNpbihwb2ludC55KSkgKiA0LjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGZsb2F0IGF2ZXJhZ2UgPSAoY29sb3IuciArIGNvbG9yLmcgKyBjb2xvci5iKSAvIDMuMDtcXG4gICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzMoYXZlcmFnZSAqIDEwLjAgLSA1LjAgKyBwYXR0ZXJuKCkpLCBjb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzY2FsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEb3RTY3JlZW5GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERvdFNjcmVlbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBzY2FsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSByYWRpdXMgb2YgdGhlIGVmZmVjdC5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Eb3RTY3JlZW5GaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllUaW50RmlsdGVyIGFwcGxpZXMgYSB2ZXJ0aWNhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1cllUaW50RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24rb2Zmc2V0KSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMyBjb2xvcjtcXG51bmlmb3JtIGZsb2F0IGFscGhhO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBzdW0gPSB2ZWM0KDAuMCk7XFxuXFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KCBjb2xvci5yZ2IgKiBzdW0uYSAqIGFscGhhLCBzdW0uYSAqIGFscGhhICk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgLyA1MTIgfSxcbiAgICAgICAgICAgIGNvbG9yOiB7IHR5cGU6ICdjJywgdmFsdWU6IFswLDAsMF19LFxuICAgICAgICAgICAgYWxwaGE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNyB9LFxuICAgICAgICAgICAgb2Zmc2V0OiB7IHR5cGU6ICcyZicsIHZhbHVlOls1LCA1XX0sXG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZToxfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJZVGludEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllUaW50RmlsdGVyO1xuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCBjbGVhcik7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJZVGludEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllUaW50RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZVGludEZpbHRlciA9IHJlcXVpcmUoJy4vQmx1cllUaW50RmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIERyb3BTaGFkb3dGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRHJvcFNoYWRvd0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyID0gbmV3IEJsdXJZVGludEZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIHRoaXMucGFkZGluZyA9IDMwO1xuXG4gICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgdGhpcy5fYW5nbGUgPSA0NSAqIE1hdGguUEkgLyAxODA7XG4gICAgdGhpcy5fZGlzdGFuY2UgPSAxMDtcbiAgICB0aGlzLmFscGhhID0gMC43NTtcbiAgICB0aGlzLmhpZGVPYmplY3QgPSBmYWxzZTtcbiAgICB0aGlzLmJsZW5kTW9kZSA9IGNvcmUuQkxFTkRfTU9ERVMuTVVMVElQTFk7XG59XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERyb3BTaGFkb3dGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERyb3BTaGFkb3dGaWx0ZXI7XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICBpZih0aGlzLl9kaXJ0eVBvc2l0aW9uKVxuICAgIHtcbiAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVswXSA9IE1hdGguc2luKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5vZmZzZXQudmFsdWVbMV0gPSBNYXRoLmNvcyh0aGlzLl9hbmdsZSkgKiB0aGlzLl9kaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKHRoaXMuYmxlbmRNb2RlKTtcblxuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZighdGhpcy5oaWRlT2JqZWN0KVxuICAgIHtcblxuICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuICAgIH1cblxuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNvbG9yIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgY29sb3I6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIGNvcmUudXRpbHMucmdiMmhleCggdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmNvbG9yLnZhbHVlID0gY29yZS51dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbHBoYSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFscGhhOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzdGFuY2Ugb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBkaXN0YW5jZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3RhbmNlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYW5nbGUgb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fYW5nbGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2FuZ2xlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZ3JleXNjYWxlcyB0aGUgcGFsZXR0ZSBvZiB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gR3JheUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGdyYXk7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peChnbF9GcmFnQ29sb3IucmdiLCB2ZWMzKDAuMjEyNipnbF9GcmFnQ29sb3IuciArIDAuNzE1MipnbF9GcmFnQ29sb3IuZyArIDAuMDcyMipnbF9GcmFnQ29sb3IuYiksIGdyYXkpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBncmF5OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkdyYXlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5HcmF5RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEdyYXlGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmF5LiAxIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGJsYWNrIGFuZCB3aGl0ZSwgMCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuR3JheUZpbHRlciNcbiAgICAgKi9cbiAgICBncmF5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBmaWx0ZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5maWx0ZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEFzY2lpRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9hc2NpaS9Bc2NpaUZpbHRlcicpLFxuICAgIEJsb29tRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibG9vbS9CbG9vbUZpbHRlcicpLFxuICAgIEJsdXJGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJGaWx0ZXInKSxcbiAgICBCbHVyWEZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJZRmlsdGVyJyksXG4gICAgQmx1ckRpckZpbHRlcjogICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckRpckZpbHRlcicpLFxuICAgIENvbG9yTWF0cml4RmlsdGVyOiAgcmVxdWlyZSgnLi9jb2xvci9Db2xvck1hdHJpeEZpbHRlcicpLFxuICAgIENvbG9yU3RlcEZpbHRlcjogICAgcmVxdWlyZSgnLi9jb2xvci9Db2xvclN0ZXBGaWx0ZXInKSxcbiAgICBDb252b2x1dGlvbkZpbHRlcjogIHJlcXVpcmUoJy4vY29udm9sdXRpb24vQ29udm9sdXRpb25GaWx0ZXInKSxcbiAgICBDcm9zc0hhdGNoRmlsdGVyOiAgIHJlcXVpcmUoJy4vY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyJyksXG4gICAgRGlzcGxhY2VtZW50RmlsdGVyOiByZXF1aXJlKCcuL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXInKSxcbiAgICBEb3RTY3JlZW5GaWx0ZXI6ICAgIHJlcXVpcmUoJy4vZG90L0RvdFNjcmVlbkZpbHRlcicpLFxuICAgIEdyYXlGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ncmF5L0dyYXlGaWx0ZXInKSxcbiAgICBEcm9wU2hhZG93RmlsdGVyOiAgIHJlcXVpcmUoJy4vZHJvcHNoYWRvdy9Ecm9wU2hhZG93RmlsdGVyJyksXG4gICAgSW52ZXJ0RmlsdGVyOiAgICAgICByZXF1aXJlKCcuL2ludmVydC9JbnZlcnRGaWx0ZXInKSxcbiAgICBOb2lzZUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vbm9pc2UvTm9pc2VGaWx0ZXInKSxcbiAgICBQaXhlbGF0ZUZpbHRlcjogICAgIHJlcXVpcmUoJy4vcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXInKSxcbiAgICBSR0JTcGxpdEZpbHRlcjogICAgIHJlcXVpcmUoJy4vcmdiL1JHQlNwbGl0RmlsdGVyJyksXG4gICAgU2hvY2t3YXZlRmlsdGVyOiAgICByZXF1aXJlKCcuL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXInKSxcbiAgICBTZXBpYUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vc2VwaWEvU2VwaWFGaWx0ZXInKSxcbiAgICBTbWFydEJsdXJGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vYmx1ci9TbWFydEJsdXJGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFhGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlcicpLFxuICAgIFR3aXN0RmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi90d2lzdC9Ud2lzdEZpbHRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBpbnZlcnRzIHlvdXIgRGlzcGxheSBPYmplY3RzIGNvbG9ycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gSW52ZXJ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIGZsb2F0IGludmVydDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoICh2ZWMzKDEpLWdsX0ZyYWdDb2xvci5yZ2IpICogZ2xfRnJhZ0NvbG9yLmEsIGdsX0ZyYWdDb2xvci5yZ2IsIDEuMCAtIGludmVydCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgaW52ZXJ0OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkludmVydEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkludmVydEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnZlcnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludmVydEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgaW52ZXJ0LiBgMWAgd2lsbCBmdWxseSBpbnZlcnQgdGhlIGNvbG9ycywgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5JbnZlcnRGaWx0ZXIjXG4gICAgICovXG4gICAgaW52ZXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuaW52ZXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYWRqdXN0L25vaXNlLmpzXG4gKi9cblxuLyoqXG4gKiBBIE5vaXNlIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIE5vaXNlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IG5vaXNlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IHJhbmQodmVjMiBjbylcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGNvLnh5LCB2ZWMyKDEyLjk4OTgsIDc4LjIzMykpKSAqIDQzNzU4LjU0NTMpO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGZsb2F0IGRpZmYgPSAocmFuZCh2VGV4dHVyZUNvb3JkKSAtIDAuNSkgKiBub2lzZTtcXG5cXG4gICAgY29sb3IuciArPSBkaWZmO1xcbiAgICBjb2xvci5nICs9IGRpZmY7XFxuICAgIGNvbG9yLmIgKz0gZGlmZjtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbm9pc2U6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Ob2lzZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbk5vaXNlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE5vaXNlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBOb2lzZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTm9pc2VGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGFtb3VudCBvZiBub2lzZSB0byBhcHBseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLk5vaXNlRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDAuNVxuICAgICAqL1xuICAgIG5vaXNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm5vaXNlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSBwaXhlbGF0ZSBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgJ2Jsb2NreScuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFBpeGVsYXRlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZlYzIgc2l6ZSA9IGRpbWVuc2lvbnMueHkgLyBwaXhlbFNpemU7XFxuXFxuICAgIHZlYzIgY29sb3IgPSBmbG9vciggKCB2VGV4dHVyZUNvb3JkICogc2l6ZSApICkgLyBzaXplICsgcGl4ZWxTaXplL2RpbWVuc2lvbnMueHkgKiAwLjU7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgY29sb3IpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsICB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICd2MicsICAgdmFsdWU6IHsgeDogMTAsIHk6IDEwIH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQaXhlbGF0ZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gUGl4ZWxhdGVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgYSBwb2ludCB0aGF0IGRlc2NyaWJlcyB0aGUgc2l6ZSBvZiB0aGUgYmxvY2tzLlxuICAgICAqIHggaXMgdGhlIHdpZHRoIG9mIHRoZSBibG9jayBhbmQgeSBpcyB0aGUgaGVpZ2h0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlBpeGVsYXRlRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBbiBSR0IgU3BsaXQgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBSR0JTcGxpdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSB2ZWMyIHJlZDtcXG51bmlmb3JtIHZlYzIgZ3JlZW47XFxudW5pZm9ybSB2ZWMyIGJsdWU7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvci5yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgcmVkL2RpbWVuc2lvbnMueHkpLnI7XFxuICAgZ2xfRnJhZ0NvbG9yLmcgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBncmVlbi9kaW1lbnNpb25zLnh5KS5nO1xcbiAgIGdsX0ZyYWdDb2xvci5iID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgYmx1ZS9kaW1lbnNpb25zLnh5KS5iO1xcbiAgIGdsX0ZyYWdDb2xvci5hID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKS5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZDogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGdyZWVuOiAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogLTIwLCB5OiAyMCB9IH0sXG4gICAgICAgICAgICBibHVlOiAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDIwLCB5OiAtMjAgfSB9LFxuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLCAwLCAwLCAwXSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5SR0JTcGxpdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJHQlNwbGl0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBSR0JTcGxpdEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogUmVkIGNoYW5uZWwgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIHJlZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJlZC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR3JlZW4gY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JlZW46IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JlZW4udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBCbHVlIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGFwcGxpZXMgYSBzZXBpYSBlZmZlY3QgdG8geW91ciBEaXNwbGF5IE9iamVjdHMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNlcGlhRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHNlcGlhO1xcblxcbmNvbnN0IG1hdDMgc2VwaWFNYXRyaXggPSBtYXQzKDAuMzU4OCwgMC43MDQ0LCAwLjEzNjgsIDAuMjk5MCwgMC41ODcwLCAwLjExNDAsIDAuMjM5MiwgMC40Njk2LCAwLjA5MTIpO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGdsX0ZyYWdDb2xvci5yZ2IgKiBzZXBpYU1hdHJpeCwgc2VwaWEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNlcGlhOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNlcGlhRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU2VwaWFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2VwaWFGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNlcGlhRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTZXBpYUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIHNlcGlhLiBgMWAgd2lsbCBhcHBseSB0aGUgZnVsbCBzZXBpYSBlZmZlY3QsIGFuZFxuICAgICAqIGAwYCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2VwaWFGaWx0ZXIjXG4gICAgICovXG4gICAgc2VwaWE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc2VwaWEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbG9yTWF0cml4RmlsdGVyIGNsYXNzIGxldHMgeW91IGFwcGx5IGEgNHg0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgUkdCQVxuICogY29sb3IgYW5kIGFscGhhIHZhbHVlcyBvZiBldmVyeSBwaXhlbCBvbiB5b3VyIGRpc3BsYXlPYmplY3QgdG8gcHJvZHVjZSBhIHJlc3VsdFxuICogd2l0aCBhIG5ldyBzZXQgb2YgUkdCQSBjb2xvciBhbmQgYWxwaGEgdmFsdWVzLiBJdCdzIHByZXR0eSBwb3dlcmZ1bCFcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2hvY2t3YXZlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIHZlYzIgY2VudGVyO1xcbnVuaWZvcm0gdmVjMyBwYXJhbXM7IC8vIDEwLjAsIDAuOCwgMC4xXFxudW5pZm9ybSBmbG9hdCB0aW1lO1xcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gdlRleHR1cmVDb29yZDtcXG4gICAgdmVjMiB0ZXhDb29yZCA9IHV2O1xcblxcbiAgICBmbG9hdCBkaXN0ID0gZGlzdGFuY2UodXYsIGNlbnRlcik7XFxuXFxuICAgIGlmICggKGRpc3QgPD0gKHRpbWUgKyBwYXJhbXMueikpICYmIChkaXN0ID49ICh0aW1lIC0gcGFyYW1zLnopKSApXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IGRpZmYgPSAoZGlzdCAtIHRpbWUpO1xcbiAgICAgICAgZmxvYXQgcG93RGlmZiA9IDEuMCAtIHBvdyhhYnMoZGlmZipwYXJhbXMueCksIHBhcmFtcy55KTtcXG5cXG4gICAgICAgIGZsb2F0IGRpZmZUaW1lID0gZGlmZiAgKiBwb3dEaWZmO1xcbiAgICAgICAgdmVjMiBkaWZmVVYgPSBub3JtYWxpemUodXYgLSBjZW50ZXIpO1xcbiAgICAgICAgdGV4Q29vcmQgPSB1diArIChkaWZmVVYgKiBkaWZmVGltZSk7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB0ZXhDb29yZCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgY2VudGVyOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfSxcbiAgICAgICAgICAgIHBhcmFtczogeyB0eXBlOiAndjMnLCB2YWx1ZTogeyB4OiAxMCwgeTogMC44LCB6OiAwLjEgfSB9LFxuICAgICAgICAgICAgdGltZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hvY2t3YXZlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaG9ja3dhdmVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjZW50ZXIgb2YgdGhlIHNob2Nrd2F2ZSBpbiBub3JtYWxpemVkIHNjcmVlbiBjb29yZHMuIFRoYXQgaXNcbiAgICAgKiAoMCwwKSBpcyB0aGUgdG9wLWxlZnQgYW5kICgxLDEpIGlzIHRoZSBib3R0b20gcmlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBudW1iZXI+fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIGNlbnRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmNlbnRlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBhcmFtcyBvZiB0aGUgc2hvY2t3YXZlLiBUaGVzZSBtb2RpZnkgdGhlIGxvb2sgYW5kIGJlaGF2aW9yIG9mXG4gICAgICogdGhlIHNob2Nrd2F2ZSBhcyBpdCByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgcGFyYW1zOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGFyYW1zLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZWxhcHNlZCB0aW1lIG9mIHRoZSBzaG9ja3dhdmUuIFRoaXMgY29udHJvbHMgdGhlIHNwZWVkIGF0IHdoaWNoXG4gICAgICogdGhlIHNob2Nrd2F2ZSByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICB0aW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0QXhpc0ZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0QXhpc0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBibHVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JhZGllbnRCbHVyO1xcbnVuaWZvcm0gdmVjMiBzdGFydDtcXG51bmlmb3JtIHZlYzIgZW5kO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG51bmlmb3JtIHZlYzIgdGV4U2l6ZTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG4gICAgdmVjMiBub3JtYWwgPSBub3JtYWxpemUodmVjMihzdGFydC55IC0gZW5kLnksIGVuZC54IC0gc3RhcnQueCkpO1xcbiAgICBmbG9hdCByYWRpdXMgPSBzbW9vdGhzdGVwKDAuMCwgMS4wLCBhYnMoZG90KHZUZXh0dXJlQ29vcmQgKiB0ZXhTaXplIC0gc3RhcnQsIG5vcm1hbCkpIC8gZ3JhZGllbnRCbHVyKSAqIGJsdXI7XFxuXFxuICAgIGZvciAoZmxvYXQgdCA9IC0zMC4wOyB0IDw9IDMwLjA7IHQrKylcXG4gICAge1xcbiAgICAgICAgZmxvYXQgcGVyY2VudCA9ICh0ICsgb2Zmc2V0IC0gMC41KSAvIDMwLjA7XFxuICAgICAgICBmbG9hdCB3ZWlnaHQgPSAxLjAgLSBhYnMocGVyY2VudCk7XFxuICAgICAgICB2ZWM0IHNhbXBsZSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGRlbHRhIC8gdGV4U2l6ZSAqIHBlcmNlbnQgKiByYWRpdXMpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBibHVyOiAgICAgICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMTAwIH0sXG4gICAgICAgICAgICBncmFkaWVudEJsdXI6ICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNjAwIH0sXG4gICAgICAgICAgICBzdGFydDogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLCAgICB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIH0gfSxcbiAgICAgICAgICAgIGVuZDogICAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDYwMCwgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZGVsdGE6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMzAsICAgeTogMzAgfSB9LFxuICAgICAgICAgICAgdGV4U2l6ZTogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogd2luZG93LmlubmVyV2lkdGgsIHk6IHdpbmRvdy5pbm5lckhlaWdodCB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG59XG5cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiB0aGUgWCBhbmQgWSBmaWx0ZXJzLCBkb2VzIG5vdGhpbmcgZm9yIHRoaXMgY2xhc3MuXG4gKlxuICovXG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gMDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSAwO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmFkaWVudEJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIHN0YXJ0IHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgZW5kOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdFlGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0IEZpbHRlci4gTWFuYWdlcyB0aGUgcGFzcyBvZiBib3RoIGEgVGlsdFNoaWZ0WEZpbHRlciBhbmQgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIgPSBuZXcgVGlsdFNoaWZ0WEZpbHRlcigpO1xuICAgIHRoaXMudGlsdFNoaWZ0WUZpbHRlciA9IG5ldyBUaWx0U2hpZnRZRmlsdGVyKCk7XG59XG5cblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEZpbHRlcjtcblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JhZGllbnQgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ncmFkaWVudEJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZ3JhZGllbnRCbHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFkgdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuc3RhcnQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBlbmQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5lbmQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZW5kID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBUaWx0U2hpZnRBeGlzRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRBeGlzRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdFhGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRpbHRTaGlmdEF4aXNGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0WEZpbHRlcigpXG57XG4gICAgVGlsdFNoaWZ0QXhpc0ZpbHRlci5jYWxsKHRoaXMpO1xufVxuXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRYRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRYRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKlxuICovXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGR4ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueCAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueDtcbiAgICB2YXIgZHkgPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS55IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS55O1xuICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IGR4IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeSAvIGQ7XG59O1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRZRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gLWR5IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeCAvIGQ7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHR3aXN0IGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0d2lzdGVkIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFR3aXN0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHJhZGl1cztcXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzIgY29vcmQgPSB2VGV4dHVyZUNvb3JkIC0gb2Zmc2V0O1xcbiAgIGZsb2F0IGRpc3QgPSBsZW5ndGgoY29vcmQpO1xcblxcbiAgIGlmIChkaXN0IDwgcmFkaXVzKVxcbiAgIHtcXG4gICAgICAgZmxvYXQgcmF0aW8gPSAocmFkaXVzIC0gZGlzdCkgLyByYWRpdXM7XFxuICAgICAgIGZsb2F0IGFuZ2xlTW9kID0gcmF0aW8gKiByYXRpbyAqIGFuZ2xlO1xcbiAgICAgICBmbG9hdCBzID0gc2luKGFuZ2xlTW9kKTtcXG4gICAgICAgZmxvYXQgYyA9IGNvcyhhbmdsZU1vZCk7XFxuICAgICAgIGNvb3JkID0gdmVjMihjb29yZC54ICogYyAtIGNvb3JkLnkgKiBzLCBjb29yZC54ICogcyArIGNvb3JkLnkgKiBjKTtcXG4gICB9XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCtvZmZzZXQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhZGl1czogICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9LFxuICAgICAgICAgICAgYW5nbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9LFxuICAgICAgICAgICAgb2Zmc2V0OiAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjUsIHk6IDAuNSB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblR3aXN0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVHdpc3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHdpc3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFR3aXN0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUd2lzdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IGRlc2NyaWJlcyB0aGUgdGhlIG9mZnNldCBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgb2Zmc2V0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHJhZGl1cyBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICByYWRpdXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5yYWRpdXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgYW5nbGUgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiLy8gcnVuIHRoZSBwb2x5ZmlsbHNcbnJlcXVpcmUoJy4vcG9seWZpbGwnKTtcblxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29yZScpO1xuXG4vLyBhZGQgY29yZSBwbHVnaW5zLlxuY29yZS5leHRyYXMgICAgICAgICA9IHJlcXVpcmUoJy4vZXh0cmFzJyk7XG5jb3JlLmZpbHRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5jb3JlLmludGVyYWN0aW9uICAgID0gcmVxdWlyZSgnLi9pbnRlcmFjdGlvbicpO1xuY29yZS5sb2FkZXJzICAgICAgICA9IHJlcXVpcmUoJy4vbG9hZGVycycpO1xuY29yZS5tZXNoICAgICAgICAgICA9IHJlcXVpcmUoJy4vbWVzaCcpO1xuY29yZS5hY2Nlc3NpYmlsaXR5ICA9IHJlcXVpcmUoJy4vYWNjZXNzaWJpbGl0eScpO1xuXG4vLyBleHBvcnQgYSBwcmVtYWRlIGxvYWRlciBpbnN0YW5jZVxuLyoqXG4gKiBBIHByZW1hZGUgaW5zdGFuY2Ugb2YgdGhlIGxvYWRlciB0aGF0IGNhbiBiZSB1c2VkIHRvIGxvYWRlciByZXNvdXJjZXMuXG4gKlxuICogQG5hbWUgbG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHByb3BlcnR5IHtQSVhJLmxvYWRlcnMuTG9hZGVyfVxuICovXG5jb3JlLmxvYWRlciA9IG5ldyBjb3JlLmxvYWRlcnMuTG9hZGVyKCk7XG5cbi8vIG1peGluIHRoZSBkZXByZWNhdGlvbiBmZWF0dXJlcy5cbk9iamVjdC5hc3NpZ24oY29yZSwgcmVxdWlyZSgnLi9kZXByZWNhdGlvbicpKTtcblxuLy8gQWx3YXlzIGV4cG9ydCBwaXhpIGdsb2JhbGx5LlxuZ2xvYmFsLlBJWEkgPSBjb3JlO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogSG9sZHMgYWxsIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gYW4gSW50ZXJhY3Rpb24gZXZlbnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uRGF0YSgpXG57XG4gICAgLyoqXG4gICAgICogVGhpcyBwb2ludCBzdG9yZXMgdGhlIGdsb2JhbCBjb29yZHMgb2Ygd2hlcmUgdGhlIHRvdWNoL21vdXNlIGV2ZW50IGhhcHBlbmVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuZ2xvYmFsID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgU3ByaXRlIHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TcHJpdGV9XG4gICAgICovXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBwYXNzZWQgdG8gYW4gZXZlbnQgaGFuZGxlciwgdGhpcyB3aWxsIGJlIHRoZSBvcmlnaW5hbCBET00gRXZlbnQgdGhhdCB3YXMgY2FwdHVyZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0V2ZW50fVxuICAgICAqL1xuICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IG51bGw7XG59XG5cbkludGVyYWN0aW9uRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbkRhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uRGF0YTtcblxuLyoqXG4gKiBUaGlzIHdpbGwgcmV0dXJuIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgc3BlY2lmaWVkIGRpc3BsYXlPYmplY3QgZm9yIHRoaXMgSW50ZXJhY3Rpb25EYXRhXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgbG9jYWwgY29vcmRzIG9mZlxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBwb2ludClcbiAqIEBwYXJhbSBbZ2xvYmFsUG9zXSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgY29udGFpbmluZyB5b3VyIGN1c3RvbSBnbG9iYWwgY29vcmRzLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgdXNlIHRoZSBjdXJyZW50IGdsb2JhbCBjb29yZHMpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBJbnRlcmFjdGlvbkRhdGEgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIERpc3BsYXlPYmplY3RcbiAqL1xuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5nZXRMb2NhbFBvc2l0aW9uID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHBvaW50LCBnbG9iYWxQb3MpXG57XG4gICAgcmV0dXJuIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKGdsb2JhbFBvcyB8fCB0aGlzLmdsb2JhbCwgcG9pbnQpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIEludGVyYWN0aW9uRGF0YSA9IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25EYXRhJyk7XG5cbi8vIE1peCBpbnRlcmFjdGl2ZVRhcmdldCBpbnRvIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGVcbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbik7XG5cbi8qKlxuICogVGhlIGludGVyYWN0aW9uIG1hbmFnZXIgZGVhbHMgd2l0aCBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzLiBBbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgaW50ZXJhY3RpdmVcbiAqIGlmIGl0cyBpbnRlcmFjdGl2ZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIHRydWVcbiAqIFRoaXMgbWFuYWdlciBhbHNvIHN1cHBvcnRzIG11bHRpdG91Y2guXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH1cbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQ9dHJ1ZV0ge2Jvb2xlYW59IFNob3VsZCB0aGUgbWFuYWdlciBhdXRvbWF0aWNhbGx5IHByZXZlbnQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMuXG4gKiBAcGFyYW0gW29wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3k9MTBdIHtudW1iZXJ9IEZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQuXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uTWFuYWdlcihyZW5kZXJlciwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGludGVyYWN0aW9uIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMgYXV0b21hdGljYWxseSBiZSBwcmV2ZW50ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdCA9IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdCA6IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBcyB0aGlzIGZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQgbW9yZSBvZnRlbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgPSBvcHRpb25zLmludGVyYWN0aW9uRnJlcXVlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vdXNlIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhfVxuICAgICAqL1xuICAgIHRoaXMubW91c2UgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCBkYXRhIG9iamVjdCB0byBoYW5kbGUgYWxsIHRoZSBldmVudCB0cmFja2luZy9kaXNwYXRjaGluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnREYXRhID0ge1xuICAgICAgICBzdG9wcGVkOiBmYWxzZSxcbiAgICAgICAgdGFyZ2V0OiBudWxsLFxuICAgICAgICB0eXBlOiBudWxsLFxuICAgICAgICBkYXRhOiB0aGlzLm1vdXNlLFxuICAgICAgICBzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGlueSBsaXR0bGUgaW50ZXJhY3RpdmVEYXRhIHBvb2wgIVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGFbXX1cbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBET00gZWxlbWVudCB0byBiaW5kIHRvLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTEVsZW1lbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIYXZlIGV2ZW50cyBiZWVuIGF0dGFjaGVkIHRvIHRoZSBkb20gZWxlbWVudD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gZmFsc2U7XG5cbiAgICAvL3RoaXMgd2lsbCBtYWtlIGl0IHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gY2FsbCBiaW5kIGFsbCB0aGUgdGltZVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlVXAgPSB0aGlzLm9uTW91c2VVcC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlVXAgPSB0aGlzLnByb2Nlc3NNb3VzZVVwLmJpbmQoIHRoaXMgKTtcblxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IHRoaXMub25Nb3VzZURvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZURvd24gPSB0aGlzLnByb2Nlc3NNb3VzZURvd24uYmluZCggdGhpcyApO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IHRoaXMub25Nb3VzZU1vdmUuYmluZCggdGhpcyApO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IHRoaXMucHJvY2Vzc01vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VPdXQgPSB0aGlzLm9uTW91c2VPdXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IHRoaXMub25Ub3VjaFN0YXJ0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaEVuZCA9IHRoaXMub25Ub3VjaEVuZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gdGhpcy5wcm9jZXNzVG91Y2hFbmQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaE1vdmUgPSB0aGlzLm9uVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sYXN0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjc3Mgc3R5bGUgb2YgdGhlIGN1cnNvciB0aGF0IGlzIGJlaW5nIHVzZWRcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSAnaW5oZXJpdCc7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjYWNoZWQgdmFyXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCByZXNvbHV0aW9uXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IDE7XG5cbiAgICB0aGlzLnNldFRhcmdldEVsZW1lbnQodGhpcy5yZW5kZXJlci52aWV3LCB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24pO1xufVxuXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJhY3Rpb25NYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5cbi8qKlxuICogU2V0cyB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlL3RvdWNoIGV2ZW50cy4gVGhpcyBpcyB1c2VmdWwgZm9yIHdoZW4geW91IGhhdmVcbiAqIG90aGVyIERPTSBlbGVtZW50cyBvbiB0b3Agb2YgdGhlIHJlbmRlcmVycyBDYW52YXMgZWxlbWVudC4gV2l0aCB0aGlzIHlvdSdsbCBiZSBiYWxlIHRvIGRlbGV0ZWdhdGVcbiAqIGFub3RoZXIgRE9NIGVsZW1lbnQgdG8gcmVjZWl2ZSB0aG9zZSBldmVudHMuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQge0hUTUxFbGVtZW50fSB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVEhlIHJlc29sdXRpb24gb2YgdGhlIG5ldyBlbGVtZW50IChyZWxhdGl2ZSB0byB0aGUgY2FudmFzKS5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuc2V0VGFyZ2V0RWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCByZXNvbHV0aW9uKVxue1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICB0aGlzLmFkZEV2ZW50cygpO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYWxsIHRoZSBET00gZXZlbnRzXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5hZGRFdmVudHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29yZS50aWNrZXIuc2hhcmVkLmFkZCh0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy1jb250ZW50LXpvb21pbmcnXSA9ICdub25lJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICdub25lJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgICAgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgICAgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgICAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCAgIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICAgICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsICAgIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIHRoZSBET00gZXZlbnRzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHJlZ2lzdGVyZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJyc7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAgdGhpcy5vblRvdWNoRW5kLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlLCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgIHRoaXMub25Nb3VzZVVwLCB0cnVlKTtcblxuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc3RhdGUgb2YgaW50ZXJhY3RpdmUgb2JqZWN0cy5cbiAqIEludm9rZWQgYnkgYSB0aHJvdHRsZWQgdGlja2VyIHVwZGF0ZSBmcm9tXG4gKiB7QGxpbmsgUElYSS50aWNrZXIuc2hhcmVkfS5cbiAqXG4gKiBAcGFyYW0gZGVsdGFUaW1lIHtudW1iZXJ9XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB0aGlzLl9kZWx0YVRpbWUgKz0gZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2RlbHRhVGltZSA8IHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGVsdGFUaW1lID0gMDtcblxuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHVzZXIgbW92ZSB0aGUgbW91c2UgdGhpcyBjaGVjayBoYXMgYWxyZWFkeSBiZWVuIGRmb25lIHVzaW5nIHRoZSBtb3VzZSBtb3ZlIVxuICAgIGlmKHRoaXMuZGlkTW92ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlkTW92ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE9cbn07XG5cbi8qKlxuICogRGlzcGF0Y2hlcyBhbiBldmVudCBvbiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIGRpc3BsYXkgb2JqZWN0IGluIHF1ZXN0aW9uXG4gKiBAcGFyYW0gZXZlbnRTdHJpbmcge3N0cmluZ30gdGhlIG5hbWUgb2YgdGhlIGV2ZW50IChlLmcsIG1vdXNlZG93bilcbiAqIEBwYXJhbSBldmVudERhdGEge29iamVjdH0gdGhlIGV2ZW50IGRhdGEgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGV2ZW50U3RyaW5nLCBldmVudERhdGEgKVxue1xuICAgIGlmKCFldmVudERhdGEuc3RvcHBlZClcbiAgICB7XG4gICAgICAgIGV2ZW50RGF0YS50YXJnZXQgPSBkaXNwbGF5T2JqZWN0O1xuICAgICAgICBldmVudERhdGEudHlwZSA9IGV2ZW50U3RyaW5nO1xuXG4gICAgICAgIGRpc3BsYXlPYmplY3QuZW1pdCggZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0W2V2ZW50U3RyaW5nXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddKCBldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogTWFwcyB4IGFuZCB5IGNvb3JkcyBmcm9tIGEgRE9NIG9iamVjdCBhbmQgbWFwcyB0aGVtIGNvcnJlY3RseSB0byB0aGUgcGl4aSB2aWV3LiBUaGUgcmVzdWx0aW5nIHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUgcG9pbnQuXG4gKiBUaGlzIHRha2VzIGludG8gYWNjb3VudCB0aGUgZmFjdCB0aGF0IHRoZSBET00gZWxlbWVudCBjb3VsZCBiZSBzY2FsZWQgYW5kIHBvc2l0aW9uZWQgYW55d2hlcmUgb24gdGhlIHNjcmVlbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCB0aGUgcmVzdWx0IHdpbGwgYmUgc3RvcmVkIGluXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHggICAgIHRoZSB4IGNvb3JkIG9mIHRoZSBwb3NpdGlvbiB0byBtYXBcbiAqIEBwYXJhbSAge251bWJlcn0geSAgICAgdGhlIHkgY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm1hcFBvc2l0aW9uVG9Qb2ludCA9IGZ1bmN0aW9uICggcG9pbnQsIHgsIHkgKVxue1xuICAgIHZhciByZWN0ID0gdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcG9pbnQueCA9ICggKCB4IC0gcmVjdC5sZWZ0ICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQud2lkdGggIC8gcmVjdC53aWR0aCAgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHBvaW50LnkgPSAoICggeSAtIHJlY3QudG9wICApICogKHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmhlaWdodCAvIHJlY3QuaGVpZ2h0ICkgKSAvIHRoaXMucmVzb2x1dGlvbjtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlcyBhIG5lYXQgd2F5IG9mIGNyYXdsaW5nIHRocm91Z2ggdGhlIHNjZW5lIGdyYXBoIGFuZCBydW5uaW5nIGEgc3BlY2lmaWVkIGZ1bmN0aW9uIG9uIGFsbCBpbnRlcmFjdGl2ZSBvYmplY3RzIGl0IGZpbmRzLlxuICogSXQgd2lsbCBhbHNvIHRha2UgY2FyZSBvZiBoaXQgdGVzdGluZyB0aGUgaW50ZXJhY3RpdmUgb2JqZWN0cyBhbmQgcGFzc2VzIHRoZSBoaXQgYWNyb3NzIGluIHRoZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCBpcyB0ZXN0ZWQgZm9yIGNvbGxpc2lvblxuICogQHBhcmFtICB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBkaXNwbGF5T2JqZWN0IHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgd2lsbCBiZSBoaXQgdGVzdCAocmVjdXJjc2l2bHkgY3Jhd2xzIGl0cyBjaGlsZHJlbilcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmdW5jIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggaW50ZXJhY3RpdmUgb2JqZWN0LiBUaGUgZGlzcGxheU9iamVjdCBhbmQgaGl0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvblxuICogQHBhcmFtICB7Ym9vbGVhbn0gaGl0VGVzdCB0aGlzIGluZGljYXRlcyBpZiB0aGUgb2JqZWN0cyBpbnNpZGUgc2hvdWxkIGJlIGhpdCB0ZXN0IGFnYWluc3QgdGhlIHBvaW50XG4gKiBAcmV0dXJuIHtib29sZWFufSByZXR1cm5zIHRydWUgaWYgdGhlIGRpc3BsYXlPYmplY3QgaGl0IHRoZSBwb2ludFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NJbnRlcmFjdGl2ZSA9IGZ1bmN0aW9uIChwb2ludCwgZGlzcGxheU9iamVjdCwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmUpXG57XG4gICAgaWYoIWRpc3BsYXlPYmplY3QgfHwgIWRpc3BsYXlPYmplY3QudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUb29rIGEgbGl0dGxlIHdoaWxlIHRvIHJld29yayB0aGlzIGZ1bmN0aW9uIGNvcnJlY3RseSEgQnV0IG5vdyBpdCBpcyBkb25lIGFuZCBuaWNlIGFuZCBvcHRpbWlzZWQuIF5fXlxuICAgIC8vIFxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBub3cgbG9vcCB0aHJvdWdoIGFsbCBvYmplY3RzIGFuZCB0aGVuIG9ubHkgaGl0IHRlc3QgdGhlIG9iamVjdHMgaXQgSEFTIHRvLCBub3QgYWxsIG9mIHRoZW0uIE1VQ0ggZmFzdGVyLi5cbiAgICAvLyBBbiBvYmplY3Qgd2lsbCBiZSBoaXQgdGVzdCBpZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gICAgLy8gXG4gICAgLy8gMTogSXQgaXMgaW50ZXJhY3RpdmUuXG4gICAgLy8gMjogSXQgYmVsb25ncyB0byBhIHBhcmVudCB0aGF0IGlzIGludGVyYWN0aXZlIEFORCBvbmUgb2YgdGhlIHBhcmVudHMgY2hpbGRyZW4gaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICAvLyBcbiAgICAvLyBBcyBhbm90aGVyIGxpdHRsZSBvcHRpbWlzYXRpb24gb25jZSBhbiBpbnRlcmFjdGl2ZSBvYmplY3QgaGFzIGJlZW4gaGl0IHdlIGNhbiBjYXJyeSBvbiB0aHJvdWdoIHRoZSBzY2VuZWdyYXBoLCBidXQgd2Uga25vdyB0aGF0IHRoZXJlIHdpbGwgYmUgbm8gbW9yZSBoaXRzISBTbyB3ZSBjYW4gYXZvaWQgZXh0cmEgaGl0IHRlc3RzXG4gICAgLy8gQSBmaW5hbCBvcHRpbWlzYXRpb24gaXMgdGhhdCBhbiBvYmplY3QgaXMgbm90IGhpdCB0ZXN0IGRpcmVjdGx5IGlmIGEgY2hpbGQgaGFzIGFscmVhZHkgYmVlbiBoaXQuXG4gICAgXG4gICAgdmFyIGhpdCA9IGZhbHNlLFxuICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGludGVyYWN0aXZlID0gZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSB8fCBpbnRlcmFjdGl2ZTtcblxuICAgIC8vIGlmIHRoZSBkaXNwbGF5b2JqZWN0IGhhcyBhIGhpdEFyZWEsIHRoZW4gaXQgZG9lcyBub3QgbmVlZCB0byBoaXRUZXN0IGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaGl0QXJlYSlcbiAgICB7XG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gKiogRlJFRSBUSVAgKiohIElmIGFuIG9iamVjdCBpcyBub3QgaW50ZXJhY3R0aXZlIG9yIGhhcyBubyBidXR0b25zIGluIGl0IChzdWNoIGFzIGEgZ2FtZSBzY2VuZSEpIHNldCBpbnRlcmFjdGl2ZUNoaWxkcmVuIHRvIGZhbHNlIGZvciB0aGF0IGRpc3BsYXlPYmplY3QuXG4gICAgLy8gVGhpcyB3aWxsIGFsbG93IHBpeGkgdG8gY29tcGxldGx5IGlnbm9yZSBhbmQgYnlwYXNzIGNoZWNraW5nIHRoZSBkaXNwbGF5T2JqZWN0cyBjaGlsZHJlbi5cbiAgICBpZihkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlQ2hpbGRyZW4pXG4gICAgeyAgICAgICBcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICAgICAgXG4gICAgICAgIGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRpbWUgdG8gZ2V0IHJlY3Vyc2l2ZS4uIGlmIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gaWYgc29tdGhpbmcgaXMgaGl0Li5cbiAgICAgICAgICAgIGlmKCB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZShwb2ludCwgY2hpbGRyZW5baV0sIGZ1bmMsIGhpdFRlc3QsIGludGVyYWN0aXZlUGFyZW50KSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIHdlIG5vIGxvbmdlciBuZWVkIHRvIGhpdCB0ZXN0IGFueSBtb3JlIG9iamVjdHMgaW4gdGhpcyBjb250YWluZXIgYXMgd2Ugd2Ugbm93IGtub3cgdGhlIHBhcmVudCBoYXMgYmVlbiBoaXRcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBpcyBpbnRlcmFjdGl2ZSAsIHRoYXQgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhpdCB3YXMgYWN0dWFsbHkgaW50ZXJhY3RpdmUgYW5kIG5vdCBqdXN0IHRoZSBjaGlsZCBvZiBhbiBpbnRlcmFjdGl2ZSBvYmplY3QuIFxuICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55dGhpbmcgZWxzZS4gV2Ugc3RpbGwgbmVlZCB0byBydW4gdGhyb3VnaCBhbGwgb2JqZWN0cywgYnV0IHdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhbnkgaGl0IHRlc3RzLlxuICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuW2ldLmludGVyYWN0aXZlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGl0VGVzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIG5vIHBvaW50IHJ1bm5pbmcgdGhpcyBpZiB0aGUgaXRlbSBpcyBub3QgaW50ZXJhY3RpdmUgb3IgZG9lcyBub3QgaGF2ZSBhbiBpbnRlcmFjdGl2ZSBwYXJlbnQuXG4gICAgaWYoaW50ZXJhY3RpdmUpXG4gICAge1xuICAgICAgICAvLyBpZiB3ZSBhcmUgaGl0IHRlc3RpbmcgKGFzIGluIHdlIGhhdmUgbm8gaGl0IGFueSBvYmplY3RzIHlldClcbiAgICAgICAgLy8gV2UgYWxzbyBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGhpdCB0ZXN0aW5nIGlmIG9uY2Ugb2YgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuIGhhcyBhbHJlYWR5IGJlZW4gaGl0IVxuICAgICAgICBpZihoaXRUZXN0ICYmICFoaXQpXG4gICAgICAgIHsgIFxuICAgICAgICAgICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGhpcy5fdGVtcFBvaW50KTtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmhpdEFyZWEuY29udGFpbnMoIHRoaXMuX3RlbXBQb2ludC54LCB0aGlzLl90ZW1wUG9pbnQueSApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZihkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gZGlzcGxheU9iamVjdC5jb250YWluc1BvaW50KHBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmMoZGlzcGxheU9iamVjdCwgaGl0KTsgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGl0O1xuICBcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgZG93biBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcHJlc3NlZCBkb3duXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VEb3duLCB0cnVlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBkb3duIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlRG93biA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB2YXIgZSA9IHRoaXMubW91c2Uub3JpZ2luYWxFdmVudDtcbiAgICBcbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG5cbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nIF0gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRkb3duJyA6ICdtb3VzZWRvd24nLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcmVsZWFzZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYnV0dG9uIGJlaW5nIHJlbGVhc2VkXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VVcCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlVXAsIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIHVwIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZVVwID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuXG4gICAgdmFyIGlzUmlnaHRCdXR0b24gPSBlLmJ1dHRvbiA9PT0gMiB8fCBlLndoaWNoID09PSAzO1xuICAgIHZhciBpc0Rvd24gPSAgaXNSaWdodEJ1dHRvbiA/ICdfaXNSaWdodERvd24nIDogJ19pc0xlZnREb3duJztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodHVwJyA6ICdtb3VzZXVwJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0Y2xpY2snIDogJ2NsaWNrJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXBvdXRzaWRlJyA6ICdtb3VzZXVwb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgdGhlIG1vdXNlIG1vdmluZ1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5kaWRNb3ZlID0gdHJ1ZTtcblxuICAgIHRoaXMuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VNb3ZlLCB0cnVlICk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgIT09IHRoaXMuY3Vyc29yKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gdGhpcy5jdXJzb3I7XG4gICAgfVxuXG4gICAgLy9UT0RPIEJVRyBmb3IgcGFyZW50cyBpbmVyYWN0aXZlIG9iamVjdCAoYm9yZGVyIG9yZGVyIGlzc3VlKVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlbW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQoZGlzcGxheU9iamVjdCwgaGl0KTtcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgaXMgbW92ZWQgb3V0IG9mIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJlaW5nIG1vdmVkIG91dFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlT3V0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgLy8gVE9ETyBvcHRpbWl6ZSBieSBub3QgY2hlY2sgRVZFUlkgVElNRSEgbWF5YmUgaGFsZiBhcyBvZnRlbj8gLy9cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkgKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIGZhbHNlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBvdmVyL291dCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VPdmVyT3V0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGlmKCFkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3ZlcicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlzcGxheU9iamVjdC5idXR0b25Nb2RlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnNvciA9IGRpc3BsYXlPYmplY3QuZGVmYXVsdEN1cnNvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZihkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIHRoaXMuZXZlbnREYXRhKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIHN0YXJ0ZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggc3RhcnRpbmcgb24gdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaFN0YXJ0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuICAgICAgICAvL1RPRE8gUE9PTFxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0LCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hTdGFydCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaHN0YXJ0JywgdGhpcy5ldmVudERhdGEgKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBlbmRzIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIGVuZGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICAvL1RPRE8gdGhpcyBzaG91bGQgYmUgcGFzc2VkIGFsb25nLi4gbm8gc2V0XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoRW5kLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIGVuZCBvZiBhIHRvdWNoIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaEVuZCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZCcsIHRoaXMuZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndGFwJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZG91dHNpZGUnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIG1vdmVkIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBtb3ZpbmcgYWNyb3NzIHRoZSByZW5kZXJlciB2aWV3XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIGEgdG91Y2ggbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGhpdCA9IGhpdDtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaG1vdmUnLCB0aGlzLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hFdmVudCB7RXZlbnREYXRhfSBUaGUgdG91Y2ggZXZlbnQgd2UgbmVlZCB0byBwYWlyIHdpdGggYW4gaW50ZXJhY3Rpb25EYXRhIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZ2V0VG91Y2hEYXRhID0gZnVuY3Rpb24gKHRvdWNoRXZlbnQpXG57XG4gICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wb3AoKTtcblxuICAgIGlmKCF0b3VjaERhdGEpXG4gICAge1xuICAgICAgICB0b3VjaERhdGEgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG4gICAgfVxuXG4gICAgdG91Y2hEYXRhLmlkZW50aWZpZXIgPSB0b3VjaEV2ZW50LmlkZW50aWZpZXI7XG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRvdWNoRGF0YS5nbG9iYWwsIHRvdWNoRXZlbnQuY2xpZW50WCwgdG91Y2hFdmVudC5jbGllbnRZICk7XG5cbiAgICBpZihuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YS5nbG9iYWwueCA9IHRvdWNoRGF0YS5nbG9iYWwueCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC55ID0gdG91Y2hEYXRhLmdsb2JhbC55IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIH1cblxuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWCA9IHRvdWNoRGF0YS5nbG9iYWwueDtcbiAgICB0b3VjaEV2ZW50Lmdsb2JhbFkgPSB0b3VjaERhdGEuZ2xvYmFsLnk7XG5cbiAgICByZXR1cm4gdG91Y2hEYXRhO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IHRvIHRoZSBpbnRlcm5hbCBwb29sXG4gKlxuICogQHBhcmFtIHRvdWNoRGF0YSB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9IFRoZSB0b3VjaCBkYXRhIG9iamVjdCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmV0dXJuVG91Y2hEYXRhID0gZnVuY3Rpb24gKCB0b3VjaERhdGEgKVxue1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wdXNoKCB0b3VjaERhdGEgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGludGVyYWN0aW9uIG1hbmFnZXJcbiAqXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLm1vdXNlID0gbnVsbDtcblxuICAgIHRoaXMuZXZlbnREYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IG51bGw7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VVcCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Nb3VzZURvd24gPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUgPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlT3V0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBudWxsO1xuXG5cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IG51bGw7XG5cbiAgICB0aGlzLm9uVG91Y2hFbmQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaE1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZW1wUG9pbnQgPSBudWxsO1xufTtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBpbnRlcmFjdGlvbnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEludGVyYWN0aW9uRGF0YTogICAgcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKSxcbiAgICBJbnRlcmFjdGlvbk1hbmFnZXI6IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25NYW5hZ2VyJyksXG4gICAgaW50ZXJhY3RpdmVUYXJnZXQ6ICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbn07XG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGludGVyYWN0aXZlIG9iamVjdHNcbiAqIHVzZWQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5pbnRlcmFjdGlvbi5pbnRlcmFjdGl2ZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgaW50ZXJhY3RpdmVUYXJnZXQgPSB7XG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBidXR0b25Nb2RlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlQ2hpbGRyZW46IHRydWUsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBkZWZhdWx0Q3Vyc29yOiAncG9pbnRlcicsXG5cbiAgICAvLyBzb21lIGludGVybmFsIGNoZWNrcy4uXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX292ZXI6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdG91Y2hEb3duOiBmYWxzZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnRlcmFjdGl2ZVRhcmdldDtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi4vZXh0cmFzJyksXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxuXG5mdW5jdGlvbiBwYXJzZShyZXNvdXJjZSwgdGV4dHVyZSkge1xuICAgIHZhciBkYXRhID0ge307XG4gICAgdmFyIGluZm8gPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF07XG4gICAgdmFyIGNvbW1vbiA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NvbW1vbicpWzBdO1xuXG4gICAgZGF0YS5mb250ID0gaW5mby5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKTtcbiAgICBkYXRhLnNpemUgPSBwYXJzZUludChpbmZvLmdldEF0dHJpYnV0ZSgnc2l6ZScpLCAxMCk7XG4gICAgZGF0YS5saW5lSGVpZ2h0ID0gcGFyc2VJbnQoY29tbW9uLmdldEF0dHJpYnV0ZSgnbGluZUhlaWdodCcpLCAxMCk7XG4gICAgZGF0YS5jaGFycyA9IHt9O1xuXG4gICAgLy9wYXJzZSBsZXR0ZXJzXG4gICAgdmFyIGxldHRlcnMgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjaGFyJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxldHRlcnMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaWQnKSwgMTApO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlUmVjdCA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4JyksIDEwKSArIHRleHR1cmUuZnJhbWUueCxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd5JyksIDEwKSArIHRleHR1cmUuZnJhbWUueSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd3aWR0aCcpLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaGVpZ2h0JyksIDEwKVxuICAgICAgICApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbY2hhckNvZGVdID0ge1xuICAgICAgICAgICAgeE9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeU9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3lvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeEFkdmFuY2U6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4YWR2YW5jZScpLCAxMCksXG4gICAgICAgICAgICBrZXJuaW5nOiB7fSxcbiAgICAgICAgICAgIHRleHR1cmU6IG5ldyBjb3JlLlRleHR1cmUodGV4dHVyZS5iYXNlVGV4dHVyZSwgdGV4dHVyZVJlY3QpXG5cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvL3BhcnNlIGtlcm5pbmdzXG4gICAgdmFyIGtlcm5pbmdzID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgna2VybmluZycpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBrZXJuaW5ncy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBmaXJzdCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnZmlyc3QnKSwgMTApO1xuICAgICAgICB2YXIgc2Vjb25kID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdzZWNvbmQnKSwgMTApO1xuICAgICAgICB2YXIgYW1vdW50ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdhbW91bnQnKSwgMTApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbc2Vjb25kXS5rZXJuaW5nW2ZpcnN0XSA9IGFtb3VudDtcbiAgICB9XG5cbiAgICByZXNvdXJjZS5iaXRtYXBGb250ID0gZGF0YTtcblxuICAgIC8vIEknbSBsZWF2aW5nIHRoaXMgYXMgYSB0ZW1wb3JhcnkgZml4IHNvIHdlIGNhbiB0ZXN0IHRoZSBiaXRtYXAgZm9udHMgaW4gdjNcbiAgICAvLyBidXQgaXQncyB2ZXJ5IGxpa2VseSB0byBjaGFuZ2VcbiAgICBleHRyYXMuQml0bWFwVGV4dC5mb250c1tkYXRhLmZvbnRdID0gZGF0YTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSBvciBub3QgeG1sIGRhdGFcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhIHx8ICFyZXNvdXJjZS5pc1htbClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNraXAgaWYgbm90IGJpdG1hcCBmb250IGRhdGEsIHVzaW5nIHNvbWUgc2lsbHkgZHVjay10eXBpbmdcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGFnZScpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdLmdldEF0dHJpYnV0ZSgnZmFjZScpID09PSBudWxsXG4gICAgICAgICAgICApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeG1sVXJsID0gcGF0aC5kaXJuYW1lKHJlc291cmNlLnVybCk7XG5cbiAgICAgICAgaWYgKHhtbFVybCA9PT0gJy4nKSB7XG4gICAgICAgICAgICB4bWxVcmwgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJhc2VVcmwgJiYgeG1sVXJsKSB7XG4gICAgICAgICAgICAvLyBpZiBiYXNldXJsIGhhcyBhIHRyYWlsaW5nIHNsYXNoIHRoZW4gYWRkIG9uZSB0byB4bWxVcmwgc28gdGhlIHJlcGxhY2Ugd29ya3MgYmVsb3dcbiAgICAgICAgICAgIGlmICh0aGlzLmJhc2VVcmwuY2hhckF0KHRoaXMuYmFzZVVybC5sZW5ndGggLSAxKSA9PT0gJy8nKSB7XG4gICAgICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcmVtb3ZlIGJhc2VVcmwgZnJvbSB4bWxVcmxcbiAgICAgICAgICAgIHhtbFVybCA9IHhtbFVybC5yZXBsYWNlKHRoaXMuYmFzZVVybCwgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4geG1sVXJsIG5vdywgaXQgbmVlZHMgYSB0cmFpbGluZyBzbGFzaC4gRW5zdXJlIHRoYXQgaXQgZG9lcyBpZiB0aGUgc3RyaW5nIGlzbid0IGVtcHR5LlxuICAgICAgICBpZiAoeG1sVXJsICYmIHhtbFVybC5jaGFyQXQoeG1sVXJsLmxlbmd0aCAtIDEpICE9PSAnLycpIHtcbiAgICAgICAgICAgIHhtbFVybCArPSAnLyc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRleHR1cmVVcmwgPSB4bWxVcmwgKyByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJylbMF0uZ2V0QXR0cmlidXRlKCdmaWxlJyk7XG4gICAgICAgIGlmIChjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSkge1xuICAgICAgICAgICAgLy9yZXVzZSBleGlzdGluZyB0ZXh0dXJlXG4gICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbdGV4dHVyZVVybF0pO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGxvYWRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiByZXNvdXJjZS5tZXRhZGF0YS5pbWFnZU1ldGFkYXRhXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gbG9hZCB0aGUgdGV4dHVyZSBmb3IgdGhlIGZvbnRcbiAgICAgICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgdGV4dHVyZVVybCwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgcmVzLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBsb2FkZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5sb2FkZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIExvYWRlcjogICAgICAgICAgICAgcmVxdWlyZSgnLi9sb2FkZXInKSxcblxuICAgIC8vIHBhcnNlcnNcbiAgICBiaXRtYXBGb250UGFyc2VyOiAgIHJlcXVpcmUoJy4vYml0bWFwRm9udFBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyOiAgcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIHRleHR1cmVQYXJzZXI6ICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlUGFyc2VyJyksXG4gICAgUmVzb3VyY2U6ICAgICAgICAgICByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZVxufTtcbiIsInZhciBSZXNvdXJjZUxvYWRlciA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLFxuICAgIHRleHR1cmVQYXJzZXIgPSByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBzcHJpdGVzaGVldFBhcnNlciA9IHJlcXVpcmUoJy4vc3ByaXRlc2hlZXRQYXJzZXInKSxcbiAgICBiaXRtYXBGb250UGFyc2VyID0gcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyk7XG5cbi8qKlxuICpcbiAqIFRoZSBuZXcgbG9hZGVyLCBleHRlbmRzIFJlc291cmNlIExvYWRlciBieSBDaGFkIEVuZ2xlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9lbmdsZXJjai9yZXNvdXJjZS1sb2FkZXJcbiAqXG4gKiBgYGBqc1xuICogdmFyIGxvYWRlciA9IFBJWEkubG9hZGVyOyAvLyBwaXhpIGV4cG9zZXMgYSBwcmVtYWRlIGluc3RhbmNlIGZvciB5b3UgdG8gdXNlLlxuICogLy9vclxuICogdmFyIGxvYWRlciA9IG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyKCk7IC8vIHlvdSBjYW4gYWxzbyBjcmVhdGUgeW91ciBvd24gaWYgeW91IHdhbnRcbiAqXG4gKiBsb2FkZXIuYWRkKCdidW5ueScsXCJkYXRhL2J1bm55LnBuZ1wiKTtcbiAqXG4gKiBsb2FkZXIub25jZSgnY29tcGxldGUnLG9uQXNzZXRzTG9hZGVkKTtcbiAqXG4gKiBsb2FkZXIubG9hZCgpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlJlc291cmNlTG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5sb2FkZXJzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KVxue1xuICAgIFJlc291cmNlTG9hZGVyLmNhbGwodGhpcywgYmFzZVVybCwgY29uY3VycmVuY3kpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMudXNlKExvYWRlci5fcGl4aU1pZGRsZXdhcmVbaV0oKSk7XG4gICAgfVxufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZXNvdXJjZUxvYWRlci5wcm90b3R5cGUpO1xuTG9hZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbkxvYWRlci5fcGl4aU1pZGRsZXdhcmUgPSBbXG4gICAgLy8gcGFyc2UgYW55IGJsb2IgaW50byBtb3JlIHVzYWJsZSBvYmplY3RzIChlLmcuIEltYWdlKVxuICAgIFJlc291cmNlTG9hZGVyLm1pZGRsZXdhcmUucGFyc2luZy5ibG9iLFxuICAgIC8vIHBhcnNlIGFueSBJbWFnZSBvYmplY3RzIGludG8gdGV4dHVyZXNcbiAgICB0ZXh0dXJlUGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBzcHJpdGVzaGVldFBhcnNlcixcbiAgICAvLyBwYXJzZSBhbnkgc3ByaXRlc2hlZXQgZGF0YSBpbnRvIG11bHRpcGxlIHRleHR1cmVzXG4gICAgYml0bWFwRm9udFBhcnNlclxuXTtcblxuTG9hZGVyLmFkZFBpeGlNaWRkbGV3YXJlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgTG9hZGVyLl9waXhpTWlkZGxld2FyZS5wdXNoKGZuKTtcbn07XG5cbi8vIEFkZCBjdXN0b20gZXh0ZW50aW9uc1xudmFyIFJlc291cmNlID0gUmVzb3VyY2VMb2FkZXIuUmVzb3VyY2U7XG5cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUoJ2ZudCcsIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIHBhdGggPSByZXF1aXJlKCdwYXRoJyksXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBza2lwIGlmIG5vIGRhdGEsIGl0cyBub3QganNvbiwgb3IgaXQgaXNuJ3Qgc3ByaXRlc2hlZXQgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzSnNvbiB8fCAhcmVzb3VyY2UuZGF0YS5mcmFtZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzb3VyY2UuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcm91dGUgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJykpO1xuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwoIHJlc291cmNlLnVybCApO1xuXG4gICAgICAgIC8vIGxvYWQgdGhlIGltYWdlIGZvciB0aGlzIHNoZWV0XG4gICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgcm91dGUgKyAnLycgKyByZXNvdXJjZS5kYXRhLm1ldGEuaW1hZ2UsIGxvYWRPcHRpb25zLCBmdW5jdGlvbiAocmVzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlcyA9IHt9O1xuXG4gICAgICAgICAgICB2YXIgZnJhbWVzID0gcmVzb3VyY2UuZGF0YS5mcmFtZXM7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gZnJhbWVzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gZnJhbWVzW2ldLmZyYW1lO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlY3QpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0cmltID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QuaCwgcmVjdC53KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QudywgcmVjdC5oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vICBDaGVjayB0byBzZWUgaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0udHJpbW1lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpbSA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS54IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS55IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS53IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS5oIC8gcmVzb2x1dGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBmbGlwIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IVxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gc2l6ZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggPSBzaXplLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0ID0gdGVtcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNpemUueCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLnkgLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLmhlaWdodCAvPSByZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzW2ldID0gbmV3IGNvcmUuVGV4dHVyZShyZXMudGV4dHVyZS5iYXNlVGV4dHVyZSwgc2l6ZSwgc2l6ZS5jbG9uZSgpLCB0cmltLCBmcmFtZXNbaV0ucm90YXRlZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0cyBhbHNvIGFkZCB0aGUgZnJhbWUgdG8gcGl4aSdzIGdsb2JhbCBjYWNoZSBmb3IgZnJvbUZyYW1lIGFuZCBmcm9tSW1hZ2UgZnVuY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW2ldID0gcmVzb3VyY2UudGV4dHVyZXNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH0pO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gY3JlYXRlIGEgbmV3IHRleHR1cmUgaWYgdGhlIGRhdGEgaXMgYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgIGlmIChyZXNvdXJjZS5kYXRhICYmIHJlc291cmNlLmlzSW1hZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBiYXNlVGV4dHVyZSA9IG5ldyBjb3JlLkJhc2VUZXh0dXJlKHJlc291cmNlLmRhdGEsIG51bGwsIGNvcmUudXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKHJlc291cmNlLnVybCkpO1xuICAgICAgICAgICAgYmFzZVRleHR1cmUuaW1hZ2VVcmwgPSByZXNvdXJjZS51cmw7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlID0gbmV3IGNvcmUuVGV4dHVyZShiYXNlVGV4dHVyZSk7XG4gICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdWNudGlvbnNcbiAgICAgICAgICAgIGNvcmUudXRpbHMuQmFzZVRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gYmFzZVRleHR1cmU7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gcmVzb3VyY2UudGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgdGVtcFBvbHlnb24gPSBuZXcgY29yZS5Qb2x5Z29uKCk7XG5cbi8qKlxuICogQmFzZSBtZXNoIGNsYXNzXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0byB1c2VcbiAqIEBwYXJhbSBbdmVydGljZXNdIHtGbG9hdDMyQXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHZlcnRpY2VzXG4gKiBAcGFyYW0gW3V2c10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdXZzXG4gKiBAcGFyYW0gW2luZGljZXNdIHtVaW50MTZBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgaW5kaWNlc1xuICogQHBhcmFtIFtkcmF3TW9kZV0ge251bWJlcn0gdGhlIGRyYXdNb2RlLCBjYW4gYmUgYW55IG9mIHRoZSBNZXNoLkRSQVdfTU9ERVMgY29uc3RzXG4gKi9cbmZ1bmN0aW9uIE1lc2godGV4dHVyZSwgdmVydGljZXMsIHV2cywgaW5kaWNlcywgZHJhd01vZGUpXG57XG4gICAgY29yZS5Db250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIG9mIHRoZSBNZXNoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBVdnMgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IHV2cyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxLCAwLFxuICAgICAgICAxLCAxLFxuICAgICAgICAwLCAxXSk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB2ZXJ0aWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSB2ZXJ0aWNlcyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxMDAsIDAsXG4gICAgICAgIDEwMCwgMTAwLFxuICAgICAgICAwLCAxMDBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgLy8gIFRPRE8gYXV0byBnZW5lcmF0ZSB0aGlzIGJhc2VkIG9uIGRyYXcgbW9kZSFcbiAgICB0aGlzLmluZGljZXMgPSBpbmRpY2VzIHx8IG5ldyBVaW50MTZBcnJheShbMCwgMSwgMywgMl0pO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgTWVzaCBpcyBkaXJ0eSBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzcHJpdGUuIFNldCB0byBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlbW92ZSBhbnkgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUcmlhbmdsZXMgaW4gY2FudmFzIG1vZGUgYXJlIGF1dG9tYXRpY2FsbHkgYW50aWFsaWFzZWQsIHVzZSB0aGlzIHZhbHVlIHRvIGZvcmNlIHRyaWFuZ2xlcyB0byBvdmVybGFwIGEgYml0IHdpdGggZWFjaCBvdGhlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdheSB0aGUgTWVzaCBzaG91bGQgYmUgZHJhd24sIGNhbiBiZSBhbnkgb2YgdGhlIHtAbGluayBQSVhJLm1lc2guTWVzaC5EUkFXX01PREVTfSBjb25zdHNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAc2VlIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmRyYXdNb2RlID0gZHJhd01vZGUgfHwgTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0g7XG5cbiAgICAvLyBydW4gdGV4dHVyZSBzZXR0ZXI7XG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcblxuICAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgbWVzaCBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1lc2gucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuTWVzaC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNZXNoLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLm1lc2guTWVzaCNcbiAgICAgKi9cbiAgICB0ZXh0dXJlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl90ZXh0dXJlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBXZWJHTCByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMubWVzaCk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5tZXNoLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEsIHRyYW5zZm9ybS5iLCB0cmFuc2Zvcm0uYywgdHJhbnNmb3JtLmQsIHRyYW5zZm9ybS50eCB8IDAsIHRyYW5zZm9ybS50eSB8IDApO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4LCB0cmFuc2Zvcm0udHkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc1RyaWFuZ2xlTWVzaChjb250ZXh0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzKGNvbnRleHQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiBUcmlhbmdsZSBNZXNoIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aCAvIDI7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGggLSAyOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4LCAoaW5kZXggKyAyKSwgKGluZGV4ICsgNCkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiB0cmlhbmdsZSBtb2RlIHVzaW5nIGNhbnZhc1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc1RyaWFuZ2xlcyA9IGZ1bmN0aW9uIChjb250ZXh0KVxue1xuICAgIC8vIGRyYXcgdHJpYW5nbGVzISFcbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcblxuICAgIHZhciBsZW5ndGggPSBpbmRpY2VzLmxlbmd0aDtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAzKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4MCA9IGluZGljZXNbaV0gKiAyLCBpbmRleDEgPSBpbmRpY2VzW2kgKyAxXSAqIDIsIGluZGV4MiA9IGluZGljZXNbaSArIDJdICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3Mgb25lIG9mIHRoZSB0cmlhbmdsZXMgdGhhdCBmb3JtIHRoaXMgTWVzaFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHBhcmFtIHZlcnRpY2VzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgTWVzaFxuICogQHBhcmFtIHV2cyB7RmxvYXQzMkFycmF5fSBhIHJlZmVyZW5jZSB0byB0aGUgdXZzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gaW5kZXgwIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgxIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgc2Vjb25kIHZlcnRleFxuICogQHBhcmFtIGluZGV4MiB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIHRoaXJkIHZlcnRleFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZSA9IGZ1bmN0aW9uIChjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleDAsIGluZGV4MSwgaW5kZXgyKVxue1xuICAgIHZhciB0ZXh0dXJlU291cmNlID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2U7XG4gICAgdmFyIHRleHR1cmVXaWR0aCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdmFyIHRleHR1cmVIZWlnaHQgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHZhciB4MCA9IHZlcnRpY2VzW2luZGV4MF0sIHgxID0gdmVydGljZXNbaW5kZXgxXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleDJdO1xuICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4MCArIDFdLCB5MSA9IHZlcnRpY2VzW2luZGV4MSArIDFdLCB5MiA9IHZlcnRpY2VzW2luZGV4MiArIDFdO1xuXG4gICAgdmFyIHUwID0gdXZzW2luZGV4MF0gKiB0ZXh0dXJlV2lkdGgsIHUxID0gdXZzW2luZGV4MV0gKiB0ZXh0dXJlV2lkdGgsIHUyID0gdXZzW2luZGV4Ml0gKiB0ZXh0dXJlV2lkdGg7XG4gICAgdmFyIHYwID0gdXZzW2luZGV4MCArIDFdICogdGV4dHVyZUhlaWdodCwgdjEgPSB1dnNbaW5kZXgxICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MiA9IHV2c1tpbmRleDIgKyAxXSAqIHRleHR1cmVIZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5jYW52YXNQYWRkaW5nID4gMClcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nWCA9IHRoaXMuY2FudmFzUGFkZGluZyAvIHRoaXMud29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIHBhZGRpbmdZID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgY2VudGVyWCA9ICh4MCArIHgxICsgeDIpIC8gMztcbiAgICAgICAgdmFyIGNlbnRlclkgPSAoeTAgKyB5MSArIHkyKSAvIDM7XG5cbiAgICAgICAgdmFyIG5vcm1YID0geDAgLSBjZW50ZXJYO1xuICAgICAgICB2YXIgbm9ybVkgPSB5MCAtIGNlbnRlclk7XG5cbiAgICAgICAgdmFyIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MCA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MCA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIC8vXG5cbiAgICAgICAgbm9ybVggPSB4MSAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTEgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MSA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MSA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIG5vcm1YID0geDIgLSBjZW50ZXJYO1xuICAgICAgICBub3JtWSA9IHkyIC0gY2VudGVyWTtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDIgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTIgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LnNhdmUoKTtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG5cbiAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcblxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICBjb250ZXh0LmNsaXAoKTtcblxuICAgIC8vIENvbXB1dGUgbWF0cml4IHRyYW5zZm9ybVxuICAgIHZhciBkZWx0YSA9ICAodTAgKiB2MSkgICAgICArICh2MCAqIHUyKSAgICAgICsgKHUxICogdjIpICAgICAgLSAodjEgKiB1MikgICAgICAtICh2MCAqIHUxKSAgICAgIC0gKHUwICogdjIpO1xuICAgIHZhciBkZWx0YUEgPSAoeDAgKiB2MSkgICAgICArICh2MCAqIHgyKSAgICAgICsgKHgxICogdjIpICAgICAgLSAodjEgKiB4MikgICAgICAtICh2MCAqIHgxKSAgICAgIC0gKHgwICogdjIpO1xuICAgIHZhciBkZWx0YUIgPSAodTAgKiB4MSkgICAgICArICh4MCAqIHUyKSAgICAgICsgKHUxICogeDIpICAgICAgLSAoeDEgKiB1MikgICAgICAtICh4MCAqIHUxKSAgICAgIC0gKHUwICogeDIpO1xuICAgIHZhciBkZWx0YUMgPSAodTAgKiB2MSAqIHgyKSArICh2MCAqIHgxICogdTIpICsgKHgwICogdTEgKiB2MikgLSAoeDAgKiB2MSAqIHUyKSAtICh2MCAqIHUxICogeDIpIC0gKHUwICogeDEgKiB2Mik7XG4gICAgdmFyIGRlbHRhRCA9ICh5MCAqIHYxKSAgICAgICsgKHYwICogeTIpICAgICAgKyAoeTEgKiB2MikgICAgICAtICh2MSAqIHkyKSAgICAgIC0gKHYwICogeTEpICAgICAgLSAoeTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhRSA9ICh1MCAqIHkxKSAgICAgICsgKHkwICogdTIpICAgICAgKyAodTEgKiB5MikgICAgICAtICh5MSAqIHUyKSAgICAgIC0gKHkwICogdTEpICAgICAgLSAodTAgKiB5Mik7XG4gICAgdmFyIGRlbHRhRiA9ICh1MCAqIHYxICogeTIpICsgKHYwICogeTEgKiB1MikgKyAoeTAgKiB1MSAqIHYyKSAtICh5MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB5MikgLSAodTAgKiB5MSAqIHYyKTtcblxuICAgIGNvbnRleHQudHJhbnNmb3JtKGRlbHRhQSAvIGRlbHRhLCBkZWx0YUQgLyBkZWx0YSxcbiAgICAgICAgZGVsdGFCIC8gZGVsdGEsIGRlbHRhRSAvIGRlbHRhLFxuICAgICAgICBkZWx0YUMgLyBkZWx0YSwgZGVsdGFGIC8gZGVsdGEpO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UodGV4dHVyZVNvdXJjZSwgMCwgMCk7XG4gICAgY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5cblxuLyoqXG4gKiBSZW5kZXJzIGEgZmxhdCBNZXNoXG4gKlxuICogQHBhcmFtIE1lc2gge1BJWEkubWVzaC5NZXNofSBUaGUgTWVzaCB0byByZW5kZXJcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLnJlbmRlck1lc2hGbGF0ID0gZnVuY3Rpb24gKE1lc2gpXG57XG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgdmFyIHZlcnRpY2VzID0gTWVzaC52ZXJ0aWNlcztcblxuICAgIHZhciBsZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGgvMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgIGZvciAodmFyIGk9MTsgaSA8IGxlbmd0aC0yOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpKjI7XG5cbiAgICAgICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXhdLCAgIHgxID0gdmVydGljZXNbaW5kZXgrMl0sIHgyID0gdmVydGljZXNbaW5kZXgrNF07XG4gICAgICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4KzFdLCB5MSA9IHZlcnRpY2VzW2luZGV4KzNdLCB5MiA9IHZlcnRpY2VzW2luZGV4KzVdO1xuXG4gICAgICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgyLCB5Mik7XG4gICAgfVxuXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnI0ZGMDAwMCc7XG4gICAgY29udGV4dC5maWxsKCk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbn07XG5cbi8qKlxuICogV2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLCB0aGlzIGV2ZW50IHdpbGwgZmlyZSB0byB1cGRhdGUgdGhlIHNjYWxlIGFuZCBmcmFtZVxuICpcbiAqIEBwYXJhbSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51cGRhdGVGcmFtZSA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgbWVzaCBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAoIXRoaXMuX2N1cnJlbnRCb3VuZHMpIHtcbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gbWF0cml4IHx8IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICAgICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSB2ZXJ0aWNlcy5sZW5ndGg7IGkgPCBuOyBpICs9IDIpIHtcbiAgICAgICAgICAgIHZhciByYXdYID0gdmVydGljZXNbaV0sIHJhd1kgPSB2ZXJ0aWNlc1tpICsgMV07XG4gICAgICAgICAgICB2YXIgeCA9IChhICogcmF3WCkgKyAoYyAqIHJhd1kpICsgdHg7XG4gICAgICAgICAgICB2YXIgeSA9IChkICogcmF3WSkgKyAoYiAqIHJhd1gpICsgdHk7XG5cbiAgICAgICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG5cbiAgICAgICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuICAgICAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWluWCA9PT0gLUluZmluaXR5IHx8IG1heFkgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBtZXNoLiBXb3JrcyBvbmx5IGZvciBUUklBTkdMRV9NRVNIXG4gKlxuICogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuICovXG5NZXNoLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50ICkge1xuICAgIGlmICghdGhpcy5nZXRCb3VuZHMoKS5jb250YWlucyhwb2ludC54LCBwb2ludC55KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHBvaW50cyA9IHRlbXBQb2x5Z29uLnBvaW50cztcbiAgICB2YXIgaSwgbGVuO1xuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVMpIHtcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgICAgIGxlbiA9IHRoaXMuaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgIC8vVE9ETzogaW5saW5lIHRoaXMuXG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTMpIHtcbiAgICAgICAgICAgIHZhciBpbmQwID0gaW5kaWNlc1tpXSoyLCBpbmQxID0gaW5kaWNlc1tpKzFdKjIsIGluZDIgPSBpbmRpY2VzW2krMl0qMjtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2luZDBdO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaW5kMCsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2luZDFdO1xuICAgICAgICAgICAgcG9pbnRzWzNdID0gdmVydGljZXNbaW5kMSsxXTtcbiAgICAgICAgICAgIHBvaW50c1s0XSA9IHZlcnRpY2VzW2luZDJdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaW5kMisxXTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBsZW4gPSB2ZXJ0aWNlcy5sZW5ndGg7XG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTYpIHtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2ldO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaSsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2krMl07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpKzNdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaSs0XTtcbiAgICAgICAgICAgIHBvaW50c1s1XSA9IHZlcnRpY2VzW2krNV07XG4gICAgICAgICAgICBpZiAodGVtcFBvbHlnb24uY29udGFpbnModGVtcFBvaW50LngsIHRlbXBQb2ludC55KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGlmZmVyZW50IGRyYXdpbmcgYnVmZmVyIG1vZGVzIHN1cHBvcnRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX01FU0hcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFU1xuICovXG5NZXNoLkRSQVdfTU9ERVMgPSB7XG4gICAgVFJJQU5HTEVfTUVTSDogMCxcbiAgICBUUklBTkdMRVM6IDFcbn07XG4iLCJ2YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xuXG4vKipcbiAqIFRoZSBQbGFuZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciBQbGFuZSA9IG5ldyBQSVhJLlBsYW5lKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIFBsYW5lLlxuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWCAtIFRoZSBudW1iZXIgb3ggeCBzZWdtZW50c1xuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWSAtIFRoZSBudW1iZXIgb2YgeSBzZWdtZW50c1xuICpcbiAqL1xuZnVuY3Rpb24gUGxhbmUodGV4dHVyZSwgc2VnbWVudHNYLCBzZWdtZW50c1kpXG57XG4gICAgTWVzaC5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tlciBmb3IgaWYgdGhlIFBsYW5lIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuc2VnbWVudHNYID0gIHNlZ21lbnRzWCB8fCAxMDtcbiAgICB0aGlzLnNlZ21lbnRzWSA9IHNlZ21lbnRzWSB8fCAxMDtcblxuICAgIHRoaXMuZHJhd01vZGUgPSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVTO1xuICAgIHRoaXMucmVmcmVzaCgpO1xuXG59XG5cblxuLy8gY29uc3RydWN0b3JcblBsYW5lLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIE1lc2gucHJvdG90eXBlICk7XG5QbGFuZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQbGFuZTtcbm1vZHVsZS5leHBvcnRzID0gUGxhbmU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5QbGFuZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgdG90YWwgPSB0aGlzLnNlZ21lbnRzWCAqIHRoaXMuc2VnbWVudHNZO1xuICAgIHZhciB2ZXJ0cyA9IFtdO1xuICAgIHZhciBjb2xvcnMgPSBbXTtcbiAgICB2YXIgdXZzID0gW107XG4gICAgdmFyIGluZGljZXMgPSBbXTtcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMudGV4dHVyZTtcblxuICAvLyAgdGV4dHVyZS53aWR0aCA9IDgwMCB0ZXh0dXJlLndpZHRoIHx8IDgwMDtcbiAvLyAgIHRleHR1cmUuaGVpZ2h0ID0gODAwLy90ZXh0dXJlLmhlaWdodCB8fCA4MDA7XG5cbiAgICB2YXIgc2VnbWVudHNYU3ViID0gdGhpcy5zZWdtZW50c1ggLSAxO1xuICAgIHZhciBzZWdtZW50c1lTdWIgPSB0aGlzLnNlZ21lbnRzWSAtIDE7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgdmFyIHNpemVYID0gdGV4dHVyZS53aWR0aCAvIHNlZ21lbnRzWFN1YjtcbiAgICB2YXIgc2l6ZVkgPSB0ZXh0dXJlLmhlaWdodCAvIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbDsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHggPSAoaSAlIHRoaXMuc2VnbWVudHNYKTtcbiAgICAgICAgdmFyIHkgPSAoIChpIC8gdGhpcy5zZWdtZW50c1ggKSB8IDAgKTtcblxuXG4gICAgICAgIHZlcnRzLnB1c2goKHggKiBzaXplWCksXG4gICAgICAgICAgICAgICAgICAgKHkgKiBzaXplWSkpO1xuXG4gICAgICAgIC8vIHRoaXMgd29ya3MgZm9yIHJlY3Rhbmd1bGFyIHRleHR1cmVzLiBcbiAgICAgICAgdXZzLnB1c2godGV4dHVyZS5fdXZzLngwICsgKHRleHR1cmUuX3V2cy54MSAtIHRleHR1cmUuX3V2cy54MCkgKiAoeCAvICh0aGlzLnNlZ21lbnRzWC0xKSksIHRleHR1cmUuX3V2cy55MCArICh0ZXh0dXJlLl91dnMueTMtdGV4dHVyZS5fdXZzLnkwKSAqICh5LyAodGhpcy5zZWdtZW50c1ktMSkpKTtcbiAgICAgIH1cblxuICAgIC8vICBjb25zXG5cbiAgICB2YXIgdG90YWxTdWIgPSBzZWdtZW50c1hTdWIgKiBzZWdtZW50c1lTdWI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTdWI7IGkrKykge1xuXG4gICAgICAgIHZhciB4cG9zID0gaSAlIHNlZ21lbnRzWFN1YjtcbiAgICAgICAgdmFyIHlwb3MgPSAoaSAvIHNlZ21lbnRzWFN1YiApIHwgMDtcblxuXG4gICAgICAgIHZhciAgdmFsdWUgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWUyID0gKHlwb3MgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zICsgMTtcbiAgICAgICAgdmFyICB2YWx1ZTMgPSAoKHlwb3MrMSkgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zO1xuICAgICAgICB2YXIgIHZhbHVlNCA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuXG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZSwgdmFsdWUyLCB2YWx1ZTMpO1xuICAgICAgICBpbmRpY2VzLnB1c2godmFsdWUyLCB2YWx1ZTQsIHZhbHVlMyk7XG4gICAgfVxuXG5cbiAgICAvL2NvbnNvbGUubG9nKGluZGljZXMpXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkodmVydHMpO1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheSh1dnMpO1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShjb2xvcnMpO1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShpbmRpY2VzKTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGV4dHVyZSBVVnMgd2hlbiBuZXcgdGV4dHVyZSBpcyBzZXRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QbGFuZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFBsYW5lIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBUaGUgcm9wZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciByb3BlID0gbmV3IFBJWEkuUm9wZShQSVhJLlRleHR1cmUuZnJvbUltYWdlKFwic25ha2UucG5nXCIpLCBwb2ludHMpO1xuICogIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5tZXNoLk1lc2hcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB7UElYSS5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIHRleHR1cmUgdG8gdXNlIG9uIHRoZSByb3BlLlxuICogQHBhcmFtIHtQSVhJLlBvaW50W119IHBvaW50cyAtIEFuIGFycmF5IG9mIHtAbGluayBQSVhJLlBvaW50fSBvYmplY3RzIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gKlxuICovXG5mdW5jdGlvbiBSb3BlKHRleHR1cmUsIHBvaW50cylcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnRbXX0gQW4gYXJyYXkgb2YgcG9pbnRzIHRoYXQgZGV0ZXJtaW5lIHRoZSByb3BlXG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgb2YgdmVydGljZXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhpcyByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBUaGUgV2ViR0wgVXZzIG9mIHRoZSByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogNCk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgY29sb3IgY29tcG9uZW50c1xuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgcm9wZSBpcyByZWFkeSB0byBiZSBkcmF3bi4gTmVlZGVkIGJlY2F1c2UgTWVzaCBjdG9yIGNhblxuICAgICAqIGNhbGwgX29uVGV4dHVyZVVwZGF0ZWQgd2hpY2ggY291bGQgY2FsbCByZWZyZXNoIHRvbyBlYXJseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgIHRoaXMucmVmcmVzaCgpO1xufVxuXG5cbi8vIGNvbnN0cnVjdG9yXG5Sb3BlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTWVzaC5wcm90b3R5cGUpO1xuUm9wZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3BlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3BlO1xuXG4vKipcbiAqIFJlZnJlc2hlc1xuICpcbiAqL1xuUm9wZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgLy8gaWYgdG9vIGxpdHRsZSBwb2ludHMsIG9yIHRleHR1cmUgaGFzbid0IGdvdCBVVnMgc2V0IHlldCBqdXN0IG1vdmUgb24uXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxIHx8ICF0aGlzLl90ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuXG4gICAgdmFyIHRleHR1cmVVdnMgPSB0aGlzLl90ZXh0dXJlLl91dnM7XG4gICAgdmFyIG9mZnNldCA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDAsIHRleHR1cmVVdnMueTApO1xuICAgIHZhciBmYWN0b3IgPSBuZXcgY29yZS5Qb2ludCh0ZXh0dXJlVXZzLngyIC0gdGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MiAtIHRleHR1cmVVdnMueTApO1xuXG4gICAgdXZzWzBdID0gMCArIG9mZnNldC54O1xuICAgIHV2c1sxXSA9IDAgKyBvZmZzZXQueTtcbiAgICB1dnNbMl0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICBjb2xvcnNbMF0gPSAxO1xuICAgIGNvbG9yc1sxXSA9IDE7XG5cbiAgICBpbmRpY2VzWzBdID0gMDtcbiAgICBpbmRpY2VzWzFdID0gMTtcblxuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgYW1vdW50O1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG4gICAgICAgIC8vIHRpbWUgdG8gZG8gc29tZSBzbWFydCBkcmF3aW5nIVxuICAgICAgICBhbW91bnQgPSBpIC8gKHRvdGFsLTEpO1xuXG4gICAgICAgIHV2c1tpbmRleF0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrMV0gPSAwICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgdXZzW2luZGV4KzJdID0gYW1vdW50ICogZmFjdG9yLnggKyBvZmZzZXQueDtcbiAgICAgICAgdXZzW2luZGV4KzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgY29sb3JzW2luZGV4XSA9IDE7XG4gICAgICAgIGNvbG9yc1tpbmRleCsxXSA9IDE7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgaW5kaWNlc1tpbmRleF0gPSBpbmRleDtcbiAgICAgICAgaW5kaWNlc1tpbmRleCArIDFdID0gaW5kZXggKyAxO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIE1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUuY2FsbCh0aGlzKTtcblxuICAgIC8vIHdhaXQgZm9yIHRoZSBSb3BlIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Sb3BlLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbGFzdFBvaW50ID0gcG9pbnRzWzBdO1xuICAgIHZhciBuZXh0UG9pbnQ7XG4gICAgdmFyIHBlcnBYID0gMDtcbiAgICB2YXIgcGVycFkgPSAwO1xuXG4gICAgLy8gdGhpcy5jb3VudCAtPSAwLjI7XG5cbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgcmF0aW8sIHBlcnBMZW5ndGgsIG51bTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWw7IGkrKylcbiAgICB7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBpbmRleCA9IGkgKiA0O1xuXG4gICAgICAgIGlmIChpIDwgcG9pbnRzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0UG9pbnQgPSBwb2ludHNbaSsxXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcGVycFkgPSAtKG5leHRQb2ludC54IC0gbGFzdFBvaW50LngpO1xuICAgICAgICBwZXJwWCA9IG5leHRQb2ludC55IC0gbGFzdFBvaW50Lnk7XG5cbiAgICAgICAgcmF0aW8gPSAoMSAtIChpIC8gKHRvdGFsLTEpKSkgKiAxMDtcblxuICAgICAgICBpZiAocmF0aW8gPiAxKVxuICAgICAgICB7XG4gICAgICAgICAgICByYXRpbyA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwTGVuZ3RoID0gTWF0aC5zcXJ0KHBlcnBYICogcGVycFggKyBwZXJwWSAqIHBlcnBZKTtcbiAgICAgICAgbnVtID0gdGhpcy5fdGV4dHVyZS5oZWlnaHQgLyAyOyAvLygyMCArIE1hdGguYWJzKE1hdGguc2luKChpICsgdGhpcy5jb3VudCkgKiAwLjMpICogNTApICkqIHJhdGlvO1xuICAgICAgICBwZXJwWCAvPSBwZXJwTGVuZ3RoO1xuICAgICAgICBwZXJwWSAvPSBwZXJwTGVuZ3RoO1xuXG4gICAgICAgIHBlcnBYICo9IG51bTtcbiAgICAgICAgcGVycFkgKj0gbnVtO1xuXG4gICAgICAgIHZlcnRpY2VzW2luZGV4XSA9IHBvaW50LnggKyBwZXJwWDtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMV0gPSBwb2ludC55ICsgcGVycFk7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzJdID0gcG9pbnQueCAtIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCszXSA9IHBvaW50LnkgLSBwZXJwWTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBwb2ludDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkubWVzaFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNZXNoOiAgICAgICAgICAgcmVxdWlyZSgnLi9NZXNoJyksXG4gICAgUGxhbmU6ICAgICAgICAgICByZXF1aXJlKCcuL1BsYW5lJyksXG4gICAgUm9wZTogICAgICAgICAgIHJlcXVpcmUoJy4vUm9wZScpLFxuICAgIE1lc2hSZW5kZXJlcjogICByZXF1aXJlKCcuL3dlYmdsL01lc2hSZW5kZXJlcicpLFxuICAgIE1lc2hTaGFkZXI6ICAgICByZXF1aXJlKCcuL3dlYmdsL01lc2hTaGFkZXInKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIE1lc2ggPSByZXF1aXJlKCcuLi9NZXNoJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgTWVzaFJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9NZXNoUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgY29yZS5PYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIFxuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSgxNTAwMCk7XG5cbiAgICAvL1RPRE8gdGhpcyBjb3VsZCBiZSBhIHNpbmdsZSBidWZmZXIgc2hhcmVkIGFtb25nc3QgYWxsIHJlbmRlcmVycyBhcyB3ZSByZXVzZSB0aGlzIHNldCB1cCBpbiBtb3N0IHJlbmRlcmVyc1xuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgMTUwMDA7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufVxuXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoUmVuZGVyZXI7XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignbWVzaCcsIE1lc2hSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIG1lc2gge1BJWEkubWVzaC5NZXNofSB0aGUgbWVzaCB0byByZW5kZXJcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICBpZighbWVzaC5fdmVydGV4QnVmZmVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5faW5pdFdlYkdMKG1lc2gpO1xuICAgIH1cblxuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXIsXG4gICAgICAgIGdsID0gcmVuZGVyZXIuZ2wsXG4gICAgICAgIHRleHR1cmUgPSBtZXNoLl90ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBzaGFkZXIgPSBtZXNoLnNoYWRlcjsvLyB8fCByZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnBsdWdpbnMubWVzaFNoYWRlcjtcblxuICAgIHZhciBkcmF3TW9kZSA9IG1lc2guZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIID8gZ2wuVFJJQU5HTEVfU1RSSVAgOiBnbC5UUklBTkdMRVM7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShtZXNoLmJsZW5kTW9kZSk7XG5cbiAgICAvL1RPRE8gY2FjaGUgY3VzdG9tIHN0YXRlLi5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzaGFkZXIgPSBzaGFkZXIuc2hhZGVyc1tnbC5pZF0gfHwgc2hhZGVyLmdldFNoYWRlcihyZW5kZXJlcik7Ly8gOiBzaGFkZXI7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4LnZhbHVlID0gbWVzaC53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gbWVzaC53b3JsZEFscGhhO1xuXG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuXG4gICAgaWYgKCFtZXNoLmRpcnR5KVxuICAgIHtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIG1lc2gudmVydGljZXMpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIHV2c1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cblxuICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCAwLCBtZXNoLmluZGljZXMpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIG1lc2guZGlydHkgPSBmYWxzZTtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZG9udCBuZWVkIHRvIHVwbG9hZCFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIH1cblxuICAgIGdsLmRyYXdFbGVtZW50cyhkcmF3TW9kZSwgbWVzaC5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuXG59O1xuXG4vKipcbiAqIFByZXBhcmVzIGFsbCB0aGUgYnVmZmVycyB0byByZW5kZXIgdGhpcyBtZXNoXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLl9pbml0V2ViR0wgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICAvLyBidWlsZCB0aGUgc3RyaXAhXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIG1lc2guX3ZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIG1lc2guX2luZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5fdXZCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC52ZXJ0aWNlcywgZ2wuRFlOQU1JQ19EUkFXKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgaWYobWVzaC5jb2xvcnMpe1xuICAgICAgICBtZXNoLl9jb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fY29sb3JCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5jb2xvcnMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG59O1xuXG5cbi8qKlxuICogRW1wdGllcyB0aGUgY3VycmVudCBiYXRjaC5cbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBtZXNoIHJlbmRlcmVyLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgXG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgTWVzaCByZW5kZXJlclxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIFdlYkdMIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gTWVzaFNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIGNvcmUuU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIGFscGhhIDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYVRleHR1cmVDb29yZDowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5NZXNoU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TaGFkZXIucHJvdG90eXBlKTtcbk1lc2hTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gTWVzaFNoYWRlcjtcblxuY29yZS5TaGFkZXJNYW5hZ2VyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoU2hhZGVyJywgTWVzaFNoYWRlcik7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9zaWduXG5cbmlmICghTWF0aC5zaWduKVxue1xuICAgIE1hdGguc2lnbiA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHggPSAreDtcbiAgICAgICAgaWYgKHggPT09IDAgfHwgaXNOYU4oeCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4ID4gMCA/IDEgOiAtMTtcbiAgICB9O1xufVxuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvb2JqZWN0LWFzc2lnblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnblxuXG5pZiAoIU9iamVjdC5hc3NpZ24pXG57XG4gICAgT2JqZWN0LmFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcbn1cbiIsInJlcXVpcmUoJy4vT2JqZWN0LmFzc2lnbicpO1xucmVxdWlyZSgnLi9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUnKTtcbnJlcXVpcmUoJy4vTWF0aC5zaWduJyk7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cDovL3BhdWxpcmlzaC5jb20vMjAxMS9yZXF1ZXN0YW5pbWF0aW9uZnJhbWUtZm9yLXNtYXJ0LWFuaW1hdGluZy9cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzE1Nzk2NzFcbi8vIGh0dHA6Ly91cGRhdGVzLmh0bWw1cm9ja3MuY29tLzIwMTIvMDUvcmVxdWVzdEFuaW1hdGlvbkZyYW1lLUFQSS1ub3ctd2l0aC1zdWItbWlsbGlzZWNvbmQtcHJlY2lzaW9uXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90aW1oYWxsLzQwNzg2MTRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9GaW5hbmNpYWwtVGltZXMvcG9seWZpbGwtc2VydmljZS90cmVlL21hc3Rlci9wb2x5ZmlsbHMvcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG5cbi8vIEV4cGVjdGVkIHRvIGJlIHVzZWQgd2l0aCBCcm93c2VyZml5XG4vLyBCcm93c2VyaWZ5IGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB0aGUgdXNlIG9mIGBnbG9iYWxgIGFuZCBwYXNzZXMgdGhlXG4vLyBjb3JyZWN0IHJlZmVyZW5jZSBvZiBgZ2xvYmFsYCwgYHNlbGZgLCBhbmQgZmluYWxseSBgd2luZG93YFxuXG4vLyBEYXRlLm5vd1xuaWYgKCEoRGF0ZS5ub3cgJiYgRGF0ZS5wcm90b3R5cGUuZ2V0VGltZSkpIHtcbiAgICBEYXRlLm5vdyA9IGZ1bmN0aW9uIG5vdygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIH07XG59XG5cbi8vIHBlcmZvcm1hbmNlLm5vd1xuaWYgKCEoZ2xvYmFsLnBlcmZvcm1hbmNlICYmIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cpKSB7XG4gICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgaWYgKCFnbG9iYWwucGVyZm9ybWFuY2UpIHtcbiAgICAgICAgZ2xvYmFsLnBlcmZvcm1hbmNlID0ge307XG4gICAgfVxuICAgIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIH07XG59XG5cbi8vIHJlcXVlc3RBbmltYXRpb25GcmFtZVxudmFyIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbnZhciB2ZW5kb3JzID0gWydtcycsICdtb3onLCAnd2Via2l0JywgJ28nXTtcblxuZm9yKHZhciB4ID0gMDsgeCA8IHZlbmRvcnMubGVuZ3RoICYmICFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lOyArK3gpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnQ2FuY2VsQW5pbWF0aW9uRnJhbWUnXSB8fFxuICAgICAgICBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbn1cblxuaWYgKCFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZGVsYXkgPSAxNiArIGxhc3RUaW1lIC0gY3VycmVudFRpbWU7XG5cbiAgICAgICAgaWYgKGRlbGF5IDwgMCkge1xuICAgICAgICAgICAgZGVsYXkgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFRpbWUgPSBjdXJyZW50VGltZTtcblxuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsYXN0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBjYWxsYmFjayhwZXJmb3JtYW5jZS5ub3coKSk7XG4gICAgICAgIH0sIGRlbGF5KTtcbiAgICB9O1xufVxuXG5pZiAoIWdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSkge1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgfTtcbn1cbiJdfQ== +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L09ic2VydmFibGVQb2ludC5qcyIsInNyYy9jb3JlL2Rpc3BsYXkvVHJhbnNmb3JtU3RhdGljLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3MuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9HcmFwaGljc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvV2ViR0xHcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ2lyY2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRDb21wbGV4UG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkTGluZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL01hdHJpeC5qcyIsInNyYy9jb3JlL21hdGgvUG9pbnQuanMiLCJzcmMvY29yZS9tYXRoL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvQ2lyY2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvRWxsaXBzZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1BvbHlnb24uanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9SZWN0YW5nbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlQnVmZmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvU3lzdGVtUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNNYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1RleHR1cmVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9NYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUXVhZC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvU3RlbmNpbE1hc2tTdGFjay5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9zcHJpdGVzL1Nwcml0ZS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvdGV4dC9UZXh0LmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9CYXNlVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1JlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9UZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZVV2cy5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90aWNrZXIvVGlja2VyLmpzIiwic3JjL2NvcmUvdGlja2VyL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzLmpzIiwic3JjL2NvcmUvdXRpbHMvaW5kZXguanMiLCJzcmMvY29yZS91dGlscy9wbHVnaW5UYXJnZXQuanMiLCJzcmMvZGVwcmVjYXRpb24uanMiLCJzcmMvZXh0cmFzL0JpdG1hcFRleHQuanMiLCJzcmMvZXh0cmFzL01vdmllQ2xpcC5qcyIsInNyYy9leHRyYXMvVGlsaW5nU3ByaXRlLmpzIiwic3JjL2V4dHJhcy9jYWNoZUFzQml0bWFwLmpzIiwic3JjL2V4dHJhcy9nZXRDaGlsZEJ5TmFtZS5qcyIsInNyYy9leHRyYXMvZ2V0R2xvYmFsUG9zaXRpb24uanMiLCJzcmMvZXh0cmFzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvYXNjaWkvQXNjaWlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibG9vbS9CbG9vbUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckRpckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1clhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9TbWFydEJsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvck1hdHJpeEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbG9yL0NvbG9yU3RlcEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2RvdC9Eb3RTY3JlZW5GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0JsdXJZVGludEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2dyYXkvR3JheUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvaW52ZXJ0L0ludmVydEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL25vaXNlL05vaXNlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9yZ2IvUkdCU3BsaXRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zZXBpYS9TZXBpYUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0QXhpc0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdHdpc3QvVHdpc3RGaWx0ZXIuanMiLCJzcmMvc3JjL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL0ludGVyYWN0aW9uRGF0YS5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbk1hbmFnZXIuanMiLCJzcmMvaW50ZXJhY3Rpb24vaW5kZXguanMiLCJzcmMvaW50ZXJhY3Rpb24vaW50ZXJhY3RpdmVUYXJnZXQuanMiLCJzcmMvbG9hZGVycy9iaXRtYXBGb250UGFyc2VyLmpzIiwic3JjL2xvYWRlcnMvaW5kZXguanMiLCJzcmMvbG9hZGVycy9sb2FkZXIuanMiLCJzcmMvbG9hZGVycy9zcHJpdGVzaGVldFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL3RleHR1cmVQYXJzZXIuanMiLCJzcmMvbWVzaC9NZXNoLmpzIiwic3JjL21lc2gvUGxhbmUuanMiLCJzcmMvbWVzaC9Sb3BlLmpzIiwic3JjL21lc2gvaW5kZXguanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoUmVuZGVyZXIuanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoU2hhZGVyLmpzIiwic3JjL3BvbHlmaWxsL01hdGguc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9PYmplY3QuYXNzaWduLmpzIiwic3JjL3BvbHlmaWxsL2luZGV4LmpzIiwic3JjL3BvbHlmaWxsL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzV1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNyaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbm1DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Y0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2h5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNWxCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM21CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25iQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICBjcmVhdGVDb250ZXh0OiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9jcmVhdGVDb250ZXh0JyksXG4gICAgc2V0VmVydGV4QXR0cmliQXJyYXlzOiBcdHJlcXVpcmUoJy4vbGliL3NldFZlcnRleEF0dHJpYkFycmF5cycpLFxuICAgIFxuICAgIEdMQnVmZmVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMQnVmZmVyJyksXG4gICAgR0xGcmFtZWJ1ZmZlcjogXHRcdFx0cmVxdWlyZSgnLi9saWIvR0xGcmFtZWJ1ZmZlcicpLFxuICAgIEdMU2hhZGVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMU2hhZGVyJyksXG4gICAgR0xUZXh0dXJlOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMVGV4dHVyZScpLFxuICAgIFxuICAgIFZlcnRleEFycmF5T2JqZWN0OiBcdFx0cmVxdWlyZSgnLi9saWIvVmVydGV4QXJyYXlPYmplY3QnKVxuXG59OyIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEVNUFRZX0FSUkFZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcblxudmFyIEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuQVJSQVlfQlVGRkVSO1xuXHR0aGlzLmRyYXdUeXBlID0gZHJhd1R5cGUgfHwgZ2wuU1RBVElDX0RSQVc7XG5cdHRoaXMuZGF0YSA9IEVNUFRZX0FSUkFZX0JVRkZFUjtcblxuXHRpZihkYXRhKVxuXHR7XG5cdFx0dGhpcy51cGxvYWQoZGF0YSk7XG5cdH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihkYXRhLCBvZmZzZXQsIGRvbnRCaW5kKVxue1xuXHQvLyB0b2RvIC0gbmVlZGVkP1xuXHQvL2lmKCFkb250QmluZClcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblx0XG5cdGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcblx0b2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cblx0aWYodGhpcy5kYXRhLmJ5dGVMZW5ndGggPj0gZGF0YS5ieXRlTGVuZ3RoKVxuXHR7XHRcblx0XHRnbC5idWZmZXJTdWJEYXRhKHRoaXMudHlwZSwgb2Zmc2V0LCBkYXRhKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC5idWZmZXJEYXRhKHRoaXMudHlwZSwgZGF0YSwgdGhpcy5kcmF3VHlwZSk7XG5cdH1cblxuXHR0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRCdWZmZXIodGhpcy50eXBlLCB0aGlzLmJ1ZmZlcik7XG59XG5cbkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24oZ2wsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZSA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIHR5cGUsIGRyYXdUeXBlKTtcbn1cblxuLy9UT0RPIERlc3Ryb3kuLlxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcjtcblxuIiwiXG52YXIgVGV4dHVyZSA9IHJlcXVpcmUoJy4vR0xUZXh0dXJlJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIEZyYW1lYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEZyYW1lYnVmZmVyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblx0XG5cdHRoaXMuc3RlbmNpbCA9IG51bGw7XG5cdHRoaXMudGV4dHVyZSA9IG51bGw7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlVGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBuZXcgVGV4dHVyZShnbCk7XG5cblx0dGhpcy50ZXh0dXJlLmJpbmQoKTtcblxuXHQvL2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZS50ZXh0dXJlLCAwKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmVuYWJsZVN0ZW5jaWwgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuc3RlbmNpbClyZXR1cm47XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnN0ZW5jaWwgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcbiAgICBcbiAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBcbiAgICAvLyBUT0RPLi4gdGhpcyBpcyBkZXB0aCBBTkQgc3RlbmNpbD9cbiAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsICB0aGlzLndpZHRoICAsIHRoaXMuaGVpZ2h0ICk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCByLCBnLCBiLCBhIClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICBnbC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpO1xuICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLmZyYW1lYnVmZmVyICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuXHRpZiAoIHRoaXMudGV4dHVyZSApXG4gICAge1xuICAgIFx0dGhpcy50ZXh0dXJlLnVwbG9hZERhdGEobnVsbCwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRpZiAoIHRoaXMuc3RlbmNpbCApXG4gICAge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0ZW5jaWwgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0dmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21EYXRhKGdsLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0dGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgZmJvLnVuYmluZCgpO1xuICAgIFxuICAgIHJldHVybiBmYm87XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZUZsb2F0MzIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0Ly8gY3JlYXRlIGEgbmV3IHRleHR1cmUuLlxuICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUuZnJvbURhdGEoZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuICAgIHRleHR1cmUuZW5hYmxlTmVhcmVzdFNjYWxpbmcoKTtcbiAgICB0ZXh0dXJlLmVuYWJsZVdyYXBDbGFtcCgpO1xuXG4gICAgLy9ub3cgY3JlYXRlIHRoZSBmcmFtZWJ1ZmZlciBvYmplY3QgYW5kIGF0dGFjaCB0aGUgdGV4dHVyZSB0byBpdC5cbiAgICB2YXIgZmJvID0gbmV3IEZyYW1lYnVmZmVyKGdsLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICBmYm8uZW5hYmxlVGV4dHVyZSh0ZXh0dXJlKVxuXG4gICAgZmJvLnVuYmluZCgpO1xuXG4gICAgcmV0dXJuIGZibztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGcmFtZWJ1ZmZlcjtcblxuIiwiXG52YXIgY29tcGlsZVByb2dyYW0gPSByZXF1aXJlKCcuL3NoYWRlci9jb21waWxlUHJvZ3JhbScpLFxuXHRleHRyYWN0QXR0cmlidXRlcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RBdHRyaWJ1dGVzJyksXG5cdGV4dHJhY3RVbmlmb3JtcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RVbmlmb3JtcycpLFxuXHRnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QgPSByZXF1aXJlKCcuL3NoYWRlci9nZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgU2hhZGVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cbnZhciBTaGFkZXIgPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIEZpcnN0IGNvbXBpbGUgdGhlIHByb2dyYW0uLlxuXHR0aGlzLnByb2dyYW0gPSBjb21waWxlUHJvZ3JhbShnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7XG5cblx0Ly8gbmV4dCBleHRyYWN0IHRoZSBhdHRyaWJ1dGVzXG5cdHRoaXMuYXR0cmlidXRlcyA9IGV4dHJhY3RBdHRyaWJ1dGVzKGdsLCB0aGlzLnByb2dyYW0pOyBcblxuICAgIHZhciB1bmlmb3JtRGF0YSA9IGV4dHJhY3RVbmlmb3JtcyhnbCwgdGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMudW5pZm9ybXMgPSBnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QoIGdsLCB1bmlmb3JtRGF0YSApO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4iLCJcbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gYSBXZWJHTCBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGZvcm1hdCB7bnVtYmVyfSB0aGUgcGl4ZWwgZm9ybWF0IG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5SR0JBXG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSB0aGUgZ2wgdHlwZSBvZiB0aGUgdGV4dHVyZS4gZGVmYXVsdHMgdG8gZ2wuVU5TSUdORURfQllURVxuICovXG52YXIgVGV4dHVyZSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLnRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cblx0Ly8gc29tZSBzZXR0aW5ncy4uXG5cdHRoaXMubWlwbWFwID0gZmFsc2U7XG5cblx0dGhpcy5wcmVtdWx0aXBseUFscGhhID0gZmFsc2U7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cblx0dGhpcy5mb3JtYXQgPSBmb3JtYXQgfHwgZ2wuUkdCQTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5VTlNJR05FRF9CWVRFO1xuXG5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge1BJWEkuZ2xDb3JlLlRleHR1cmV9IFt2YXJuYW1lXSBbZGVzY3JpcHRpb25dXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKHNvdXJjZSlcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gc291cmNlLndpZHRoO1xuXHR0aGlzLmhlaWdodCA9IHNvdXJjZS5oZWlnaHQ7XG5cblx0Z2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xuICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMuZm9ybWF0LCB0aGlzLnR5cGUsIHNvdXJjZSk7XG59XG5cbnZhciBGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSBmYWxzZTtcblxuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkRGF0YSA9IGZ1bmN0aW9uKGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuYmluZCgpO1xuXHRcblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IHRoaXMud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IHRoaXMuaGVpZ2h0O1xuXG5cdGlmKGRhdGEgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpXG5cdHtcblx0XHRpZighRkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFKVxuXHRcdHtcblx0XHRcdHZhciBleHQgPSBnbC5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9mbG9hdFwiKTtcblx0XHRcdFxuXHRcdFx0aWYoZXh0KVxuXHRcdFx0e1xuXHRcdFx0XHRGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2Zsb2F0aW5nIHBvaW50IHRleHR1cmVzIG5vdCBhdmFpbGFibGUnKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnR5cGUgPSBnbC5GTE9BVDtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHQvLyBUT0RPIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzXG5cdFx0dGhpcy50eXBlID0gZ2wuVU5TSUdORURfQllURTtcblx0fVxuXG5cdC8vIHdoYXQgdHlwZSBvZiBkYXRhP1xuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG5cdGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsICB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgZGF0YSB8fCBudWxsKTtcblxufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24obG9jYXRpb24pXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0aWYobG9jYXRpb24gIT09IHVuZGVmaW5lZClcblx0e1xuXHRcdGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbik7XG5cdH1cblxuXHRnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0aGlzLnRleHR1cmUpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIG51bGwpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5taW5GaWx0ZXIgPSBmdW5jdGlvbiggbGluZWFyIClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRpZih0aGlzLm1pcG1hcClcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVJfTUlQTUFQX0xJTkVBUiA6IGdsLk5FQVJFU1RfTUlQTUFQX05FQVJFU1QpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcblx0fVx0XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1hZ0ZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTWlwbWFwID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR0aGlzLm1pcG1hcCA9IHRydWU7XG5cdGdsLmdlbmVyYXRlTWlwbWFwKGdsLlRFWFRVUkVfMkQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVMaW5lYXJTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcih0cnVlKTtcblx0dGhpcy5tYWdGaWx0ZXIodHJ1ZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZU5lYXJlc3RTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcihmYWxzZSk7XG5cdHRoaXMubWFnRmlsdGVyKGZhbHNlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlV3JhcENsYW1wID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwUmVwZWF0ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXHRcblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuUkVQRUFUKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5SRVBFQVQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlVGV4dHVyZSh0aGlzLnRleHR1cmUpO1xufVxuXG4vL1RleHR1cmUuXG5UZXh0dXJlLmZyb21Tb3VyY2UgPSBmdW5jdGlvbihnbCwgc291cmNlLCBwcmVtdWx0aXBseUFscGhhKVxue1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS5wcmVtdWx0aXBseUFscGhhID0gcHJlbXVsdGlwbHlBbHBoYSB8fCBmYWxzZTtcblx0dGV4dHVyZS51cGxvYWQoc291cmNlKTtcblxuXHRyZXR1cm4gdGV4dHVyZTtcbn1cblxuVGV4dHVyZS5mcm9tRGF0YSA9IGZ1bmN0aW9uKGdsLCBkYXRhLCB3aWR0aCwgaGVpZ2h0KVxue1xuXHQvL2NvbnNvbGUubG9nKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS51cGxvYWREYXRhKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZTtcblxuIiwiXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbi8vIHN0YXRlIG9iamVjdC8vXG5cblxuZnVuY3Rpb24gVmVydGV4QXJyYXlPYmplY3QoZ2wpXG57XG5cdFxuXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IChcbiAgICAgIGdsLmdldEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKVxuICAgICk7XG5cbi8vXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IG51bGw7XG5cblx0aWYodGhpcy5uYXRpdmVWYW9FeHRlbnNpb24pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhbyA9IHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7ICBcblx0fVxuXG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcblxuXHR0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuXHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cblx0XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZlcnRleEFycmF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBWZXJ0ZXhBcnJheU9iamVjdDtcblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKHRoaXMubmF0aXZlVmFvKTsgIFxuXG5cdFx0aWYodGhpcy5kaXJ0eSlcblx0XHR7XG5cdFx0XHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cdFx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdFx0fVxuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLm5hdGl2ZVZhbylcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIFxuXHR7XG5cdFx0dmFyIGF0dHJpYiA9IHRoaXMuYXR0cmlidXRlc1tpXTtcblx0XHRhdHRyaWIuYnVmZmVyLmJpbmQoKTtcdFxuXG5cdFx0YXR0cmliLmF0dHJpYnV0ZS5wb2ludGVyKGF0dHJpYi50eXBlLCBhdHRyaWIubm9ybWFsaXplZCwgYXR0cmliLnN0cmlkZSwgYXR0cmliLnN0YXJ0KTsgXG5cdFx0XG5cdFx0Z2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYXR0cmliLmF0dHJpYnV0ZS5sb2NhdGlvbik7XG5cdH07XG5cblx0dGhpcy5pbmRleEJ1ZmZlci5iaW5kKCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRBdHRyaWJ1dGUgPSBmdW5jdGlvbihidWZmZXIsIGF0dHJpYnV0ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydClcbntcbiAgICB0aGlzLmF0dHJpYnV0ZXMucHVzaCh7XG4gICAgXHRidWZmZXI6IFx0YnVmZmVyLFxuICAgIFx0YXR0cmlidXRlOiBcdGF0dHJpYnV0ZSxcblxuICAgIFx0bG9jYXRpb246IFx0YXR0cmlidXRlLmxvY2F0aW9uLFxuXHQgXHR0eXBlOiBcdFx0dHlwZSB8fCB0aGlzLmdsLkZMT0FULFxuXHQgXHRub3JtYWxpemVkOiBub3JtYWxpemVkIHx8IGZhbHNlLFxuXHQgXHRzdHJpZGU6IFx0c3RyaWRlIHx8IDAsXG5cdCBcdHN0YXJ0OiBcdFx0c3RhcnQgfHwgMFxuXHR9KVxuXG5cdHRoaXMuZGlydHkgPSB0cnVlO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRJbmRleCA9IGZ1bmN0aW9uKGJ1ZmZlciwgb3B0aW9ucylcbntcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gYnVmZmVyO1xuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBzdGFydClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuZHJhd0VsZW1lbnRzKHR5cGUsIHNpemUsIGdsLlVOU0lHTkVEX1NIT1JULCBzdGFydCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgQ29udGV4dFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG5cbnZhciBDT05URVhUX1VJRCA9IDA7XG5cbnZhciBjcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24oY2FudmFzLCBvcHRpb25zKVxue1xuICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgb3B0aW9ucykgfHwgXG4gICAgXHQgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFnbClcbiAgICB7XG4gICAgICAgIC8vIGZhaWwsIG5vdCBhYmxlIHRvIGdldCBhIGNvbnRleHRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB3ZWJHTC4gVHJ5IHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXInKTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCB3YW50IHRvIHBoYXNlIHRoaXMgb3V0P1xuICAgIGdsLmlkID0gQ09OVEVYVF9VSUQrKztcblxuICAgIHJldHVybiBnbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb250ZXh0O1xuXG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgc2V0VmVydGV4QXR0cmliQXJyYXlzID0gZnVuY3Rpb24gKGdsLCBhdHRyaWJzKVxue1x0XG4gICAvLyBjb25zb2xlLmxvZyhnbC5pZClcbiAgICB2YXIgZGF0YSA9IEdMX01BUFtnbC5pZF07XG5cbiAgICBpZighZGF0YSlcbiAgICB7XG5cdCAgIHZhciBtYXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cdFx0ZGF0YSA9IEdMX01BUFtnbC5pZF0gPSB7dGVtcEF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKVxuXHRcdFx0XHQgXHQgXHRcdCAgICxhdHRyaWJTdGF0ZTpuZXcgQXJyYXkobWF4QXR0cmlicyl9O1xuXHR9XG5cdFxuICAgIHZhciBpLFxuICAgIFx0dGVtcEF0dHJpYlN0YXRlID0gZGF0YS50ZW1wQXR0cmliU3RhdGUsXG4gICAgXHRhdHRyaWJTdGF0ZSA9IGRhdGEuYXR0cmliU3RhdGU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAoaSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbaV0ubG9jYXRpb25dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAoYXR0cmliU3RhdGVbaV0gIT09IHRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmliU3RhdGVbaV0gPSB0ZW1wQXR0cmliU3RhdGVbaV07XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmF0dHJpYlN0YXRlW2ldKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VmVydGV4QXR0cmliQXJyYXlzOyIsIlxuXG5cblxuY29tcGlsZVByb2dyYW0gPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcbiAgICB2YXIgZ2xWZXJ0U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuVkVSVEVYX1NIQURFUiwgdmVydGV4U3JjKTtcbiAgICB2YXIgZ2xGcmFnU2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNyYyk7XG5cbiAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbEZyYWdTaGFkZXIpO1xuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgLy8gaWYgbGlua2luZyBmYWlscywgdGhlbiBsb2cgYW5kIGNsZWFudXBcbiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUGl4aS5qcyBFcnJvcjogQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVyLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5WQUxJREFURV9TVEFUVVMnLCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLlZBTElEQVRFX1NUQVRVUykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5nZXRFcnJvcigpJywgZ2wuZ2V0RXJyb3IoKSk7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBwcm9ncmFtIGluZm8gbG9nLCBsb2cgaXRcbiAgICAgICAgaWYgKGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pICE9PSAnJylcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaXhpLmpzIFdhcm5pbmc6IGdsLmdldFByb2dyYW1JbmZvTG9nKCknLCBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICBwcm9ncmFtID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBzb21lIHNoYWRlcnNcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xGcmFnU2hhZGVyKTtcblxuICAgIHJldHVybiBwcm9ncmFtO1xufVxuXG52YXIgY29tcGlsZVNoYWRlciA9IGZ1bmN0aW9uIChnbCwgdHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzcmMpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZVByb2dyYW07XG5cbiIsIlxuXG52YXIgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkgXG57XG4gICAgc3dpdGNoICh0eXBlKVxuICAgIHtcbiAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAndmVjMic6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzQnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSg0ICogc2l6ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgY2FzZSAnc2FtcGxlcjJEJzpcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWMyJzogICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnaXZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDMgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjNCc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDQgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdib29sJzogICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMyJzpcblxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSggMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMzJzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWM0JzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ21hdDInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Myc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMV0pO1xuXG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDAsIDAsIDFdKTtcbiAgICB9XG59XG5cbnZhciBib29sZWFuQXJyYXkgPSBmdW5jdGlvbihzaXplKVxue1xuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgYXJyYXlbaV0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRWYWx1ZTtcbiIsIlxudmFyIG1hcFR5cGUgPSByZXF1aXJlKCcuL21hcFR5cGUnKTtcbnZhciBtYXBTaXplID0gcmVxdWlyZSgnLi9tYXBTaXplJyk7XG5cbnZhciBleHRyYWN0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICB2YXIgdG90YWxBdHRyaWJ1dGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxBdHRyaWJ1dGVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGF0dHJpYkRhdGEgPSBnbC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaSk7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgYXR0cmliRGF0YS50eXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYkRhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOnR5cGUsXG4gICAgICAgICAgICBzaXplOm1hcFNpemUodHlwZSksXG4gICAgICAgICAgICBsb2NhdGlvbjpnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBhdHRyaWJEYXRhLm5hbWUpLFxuICAgICAgICAgICAgLy9UT0RPIC0gbWFrZSBhbiBhdHRyaWJ1dGUgb2JqZWN0XG4gICAgICAgICAgICBwb2ludGVyOmZ1bmN0aW9uKHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpe1xuXG4gICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5sb2NhdGlvbix0aGlzLnNpemUsIHR5cGUgfHwgZ2wuRkxPQVQsIG5vcm1hbGl6ZWQgfHwgZmFsc2UsIHN0cmlkZSB8fCAwLCBzdGFydCB8fCAwKTsgXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYXR0cmlidXRlczsgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RBdHRyaWJ1dGVzO1xuXG4iLCJ2YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIGRlZmF1bHRWYWx1ZSA9IHJlcXVpcmUoJy4vZGVmYXVsdFZhbHVlJyk7XG5cblxudmFyIGV4dHJhY3RVbmlmb3JtcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuXHR2YXIgdW5pZm9ybXMgPSB7fTtcblx0XG4gICAgdmFyIHRvdGFsVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxVbmlmb3JtczsgaSsrKSBcbiAgICB7XG4gICAgXHR2YXIgdW5pZm9ybURhdGEgPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpO1xuICAgIFx0dmFyIG5hbWUgPSB1bmlmb3JtRGF0YS5uYW1lLnJlcGxhY2UoL1xcWy4qP1xcXS8sIFwiXCIpO1xuICAgICAgICB2YXIgdHlwZSA9IG1hcFR5cGUoZ2wsIHVuaWZvcm1EYXRhLnR5cGUgKTtcblxuICAgIFx0dW5pZm9ybXNbbmFtZV0gPSB7XG4gICAgXHRcdHR5cGU6dHlwZSxcbiAgICBcdFx0c2l6ZTp1bmlmb3JtRGF0YS5zaXplLFxuICAgIFx0XHRsb2NhdGlvbjpnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksXG4gICAgXHRcdHZhbHVlOmRlZmF1bHRWYWx1ZSh0eXBlLCB1bmlmb3JtRGF0YS5zaXplKVxuICAgIFx0fVxuICAgIH07XG5cdFxuXHRyZXR1cm4gdW5pZm9ybXM7XHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHRyYWN0VW5pZm9ybXM7XG5cbiIsIlxudmFyIGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IGZ1bmN0aW9uKGdsLCB1bmlmb3JtRGF0YSlcbntcbiAgICAvLyB0aGlzIGlzIHRoZSBvYmplY3Qgd2Ugd2lsbCBiZSBzZW5kaW5nIGJhY2suXG4gICAgLy8gYW4gb2JqZWN0IGhpZXJhY2h5IHdpbGwgYmUgY3JlYXRlZCBmb3Igc3RydWN0c1xuICAgIHZhciB1bmlmb3JtcyA9IHtkYXRhOnt9fTtcblxuICAgIHVuaWZvcm1zLmdsID0gZ2w7XG4gICAgXG4gICAgdmFyIHVuaWZvcm1LZXlzPSBPYmplY3Qua2V5cyh1bmlmb3JtRGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1LZXlzLmxlbmd0aDsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBmdWxsTmFtZSA9IHVuaWZvcm1LZXlzW2ldXG5cbiAgICAgICAgdmFyIG5hbWVUb2tlbnMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAxXTtcblxuICAgICAgICB2YXIgdW5pZm9ybUdyb3VwID0gZ2V0VW5pZm9ybUdyb3VwKG5hbWVUb2tlbnMsIHVuaWZvcm1zKTtcblxuICAgICAgICB2YXIgdW5pZm9ybSA9ICB1bmlmb3JtRGF0YVtmdWxsTmFtZV07XG4gICAgICAgIHVuaWZvcm1Hcm91cC5kYXRhW25hbWVdID0gdW5pZm9ybTtcblxuICAgICAgICB1bmlmb3JtR3JvdXAuZ2wgPSBnbDtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5pZm9ybUdyb3VwLCBuYW1lLCB7XG4gICAgICAgICAgICBnZXQ6IGdlbmVyYXRlR2V0dGVyKG5hbWUpLFxuICAgICAgICAgICAgc2V0OiBnZW5lcmF0ZVNldHRlcihuYW1lLCB1bmlmb3JtKVxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdW5pZm9ybXM7XG59XG5cbnZhciBnZW5lcmF0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpXG57XG5cdHZhciB0ZW1wbGF0ZSA9IGdldHRlclRlbXBsYXRlLnJlcGxhY2UoJyUlJywgbmFtZSk7XG5cdHJldHVybiBuZXcgRnVuY3Rpb24odGVtcGxhdGUpO1xufVxuXG52YXIgZ2VuZXJhdGVTZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCB1bmlmb3JtKVxue1xuICAgIHZhciB0ZW1wbGF0ZSA9IHNldHRlclRlbXBsYXRlLnJlcGxhY2UoLyUlL2csIG5hbWUpO1xuICAgIHZhciBzZXRUZW1wbGF0ZVxuICAgIFxuICAgIGlmKHVuaWZvcm0uc2l6ZSA9PT0gMSlcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19TSU5HTEVfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzZXRUZW1wbGF0ZSA9IEdMU0xfVE9fQVJSQVlfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cblxuICAgIGlmKHNldFRlbXBsYXRlKVxuICAgIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gXCJcXG50aGlzLmdsLlwiICsgc2V0VGVtcGxhdGUgKyBcIjtcIjtcbiAgICB9XG5cbiAgXHRyZXR1cm4gbmV3IEZ1bmN0aW9uKCd2YWx1ZScsIHRlbXBsYXRlKTtcbn1cblxudmFyIGdldFVuaWZvcm1Hcm91cCA9IGZ1bmN0aW9uKG5hbWVUb2tlbnMsIHVuaWZvcm0pXG57XG4gICAgdmFyIGN1ciA9IHVuaWZvcm07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVUb2tlbnMubGVuZ3RoIC0gMTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBvID0gY3VyW25hbWVUb2tlbnNbaV1dIHx8IHtkYXRhOnt9fTtcbiAgICAgICAgY3VyW25hbWVUb2tlbnNbaV1dID0gbztcbiAgICAgICAgY3VyID0gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGN1clxufVxuXG52YXIgZ2V0dGVyVGVtcGxhdGUgPSBbXG4gICAgJ3JldHVybiB0aGlzLmRhdGEuJSUudmFsdWU7Jyxcbl0uam9pbignXFxuJyk7XG5cbnZhciBzZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAndGhpcy5kYXRhLiUlLnZhbHVlID0gdmFsdWU7JyxcbiAgICAndmFyIGxvY2F0aW9uID0gdGhpcy5kYXRhLiUlLmxvY2F0aW9uOydcbl0uam9pbignXFxuJyk7XG5cblxudmFyIEdMU0xfVE9fU0lOR0xFX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ3ZlYzInOiAgICAgJ3VuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ3ZlYzMnOiAgICAgJ3VuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG4gICAgXHRcbiAgICAnaW50JzogICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnaXZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcblxuICAgICdtYXQyJzogICAgICd1bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0Myc6ICAgICAndW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG4gICAgJ21hdDQnOiAgICAgJ3VuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuXG4gICAgJ3NhbXBsZXIyRCc6J3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG52YXIgR0xTTF9UT19BUlJBWV9TRVRURVJTID0ge1xuXG4gICAgJ2Zsb2F0JzogICAgJ3VuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjNCc6ICAgICAndW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG4gICBcbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdDtcblxuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24odHlwZSkgXG57IFxuICAgIHJldHVybiBHTFNMX1RPX1NJWkVbdHlwZV07XG59XG5cblxudmFyIEdMU0xfVE9fU0laRSA9IHtcbiAgICAnZmxvYXQnOiAgICAxLFxuICAgICd2ZWMyJzogICAgIDIsXG4gICAgJ3ZlYzMnOiAgICAgMyxcbiAgICAndmVjNCc6ICAgICA0LFxuXG4gICAgJ2ludCc6ICAgICAgMSxcbiAgICAnaXZlYzInOiAgICAyLFxuICAgICdpdmVjMyc6ICAgIDMsXG4gICAgJ2l2ZWM0JzogICAgNCxcblxuICAgICdib29sJzogICAgIDEsXG4gICAgJ2J2ZWMyJzogICAgMixcbiAgICAnYnZlYzMnOiAgICAzLFxuICAgICdidmVjNCc6ICAgIDQsXG5cbiAgICAnbWF0Mic6ICAgICA0LFxuICAgICdtYXQzJzogICAgIDksXG4gICAgJ21hdDQnOiAgICAgMTYsXG5cbiAgICAnc2FtcGxlcjJEJzogIDFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24oZ2wsIHR5cGUpIFxue1xuICAgIGlmKCFHTF9UQUJMRSkgXG4gICAge1xuICAgICAgICB2YXIgdHlwZU5hbWVzID0gT2JqZWN0LmtleXMoR0xfVE9fR0xTTF9UWVBFUyk7XG5cbiAgICAgICAgR0xfVEFCTEUgPSB7fTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdHlwZU5hbWVzLmxlbmd0aDsgKytpKSBcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHRuID0gdHlwZU5hbWVzW2ldO1xuICAgICAgICAgICAgR0xfVEFCTEVbIGdsW3RuXSBdID0gR0xfVE9fR0xTTF9UWVBFU1t0bl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIEdMX1RBQkxFW3R5cGVdO1xufVxuXG52YXIgR0xfVEFCTEUgPSBudWxsO1xuXG52YXIgR0xfVE9fR0xTTF9UWVBFUyA9IHtcbiAgJ0ZMT0FUJzogICAgICAgJ2Zsb2F0JyxcbiAgJ0ZMT0FUX1ZFQzInOiAgJ3ZlYzInLFxuICAnRkxPQVRfVkVDMyc6ICAndmVjMycsXG4gICdGTE9BVF9WRUM0JzogICd2ZWM0JyxcblxuICAnSU5UJzogICAgICAgICAnaW50JyxcbiAgJ0lOVF9WRUMyJzogICAgJ2l2ZWMyJyxcbiAgJ0lOVF9WRUMzJzogICAgJ2l2ZWMzJyxcbiAgJ0lOVF9WRUM0JzogICAgJ2l2ZWM0JyxcbiAgXG4gICdCT09MJzogICAgICAgICdib29sJyxcbiAgJ0JPT0xfVkVDMic6ICAgJ2J2ZWMyJyxcbiAgJ0JPT0xfVkVDMyc6ICAgJ2J2ZWMzJyxcbiAgJ0JPT0xfVkVDNCc6ICAgJ2J2ZWM0JyxcbiAgXG4gICdGTE9BVF9NQVQyJzogICdtYXQyJyxcbiAgJ0ZMT0FUX01BVDMnOiAgJ21hdDMnLFxuICAnRkxPQVRfTUFUNCc6ICAnbWF0NCcsXG4gIFxuICAnU0FNUExFUl8yRCc6ICAnc2FtcGxlcjJEJyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwU2l6ZTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvQm9vbCh2KSB7XG4gICAgICAgIHJldHVybiAhIXY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vdElkKHYpIHtcbiAgICAgICAgcmV0dXJuICF2O1xuICAgIH1cblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcHJldmlvdXNfYXN5bmM7XG5cbiAgICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gICAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZiB8fFxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgdGhpcztcblxuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgICAgcHJldmlvdXNfYXN5bmMgPSByb290LmFzeW5jO1xuICAgIH1cblxuICAgIGFzeW5jLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBwcmV2aW91c19hc3luYztcbiAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbmx5X29uY2UoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIC8vIFBvcnRlZCBmcm9tIHVuZGVyc2NvcmUuanMgaXNPYmplY3RcbiAgICB2YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9pc0FycmF5TGlrZShhcnIpIHtcbiAgICAgICAgcmV0dXJuIF9pc0FycmF5KGFycikgfHwgKFxuICAgICAgICAgICAgLy8gaGFzIGEgcG9zaXRpdmUgaW50ZWdlciBsZW5ndGggcHJvcGVydHlcbiAgICAgICAgICAgIHR5cGVvZiBhcnIubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICBhcnIubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggJSAxID09PSAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2FycmF5RWFjaChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfbWFwKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdG9yKGFycltpbmRleF0sIGluZGV4LCBhcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JhbmdlKGNvdW50KSB7XG4gICAgICAgIHJldHVybiBfbWFwKEFycmF5KGNvdW50KSwgZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGk7IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9yZWR1Y2UoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBfYXJyYXlFYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9mb3JFYWNoT2Yob2JqZWN0LCBpdGVyYXRvcikge1xuICAgICAgICBfYXJyYXlFYWNoKF9rZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnIsIGl0ZW0pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfa2V5SXRlcmF0b3IoY29sbCkge1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB2YXIgbGVuO1xuICAgICAgICB2YXIga2V5cztcbiAgICAgICAgaWYgKF9pc0FycmF5TGlrZShjb2xsKSkge1xuICAgICAgICAgICAgbGVuID0gY29sbC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBsZW4gPyBpIDogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXlzID0gX2tleXMoY29sbCk7XG4gICAgICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGtleXNbaV0gOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpbWlsYXIgdG8gRVM2J3MgcmVzdCBwYXJhbSAoaHR0cDovL2FyaXlhLm9maWxhYnMuY29tLzIwMTMvMDMvZXM2LWFuZC1yZXN0LXBhcmFtZXRlci5odG1sKVxuICAgIC8vIFRoaXMgYWNjdW11bGF0ZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byBhbiBhcnJheSwgYWZ0ZXIgYSBnaXZlbiBpbmRleC5cbiAgICAvLyBGcm9tIHVuZGVyc2NvcmUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzIxNDApLlxuICAgIGZ1bmN0aW9uIF9yZXN0UGFyYW0oZnVuYywgc3RhcnRJbmRleCkge1xuICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCk7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSB1bnVzZWQgYnV0IGhhbmRsZSBjYXNlcyBvdXRzaWRlIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50OlxuICAgICAgICAgICAgLy8gdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICAgICAgICAvLyBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAvLyAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICAgICAgICAvLyByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBleHBvcnRlZCBhc3luYyBtb2R1bGUgZnVuY3Rpb25zIC8vLy9cblxuICAgIC8vLy8gbmV4dFRpY2sgaW1wbGVtZW50YXRpb24gd2l0aCBicm93c2VyLWNvbXBhdGlibGUgZmFsbGJhY2sgLy8vL1xuXG4gICAgLy8gY2FwdHVyZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZSB0byBndWFyZCBhZ2FpbnN0IGZha2VUaW1lciBtb2Nrc1xuICAgIHZhciBfc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzZXRJbW1lZGlhdGU7XG5cbiAgICB2YXIgX2RlbGF5ID0gX3NldEltbWVkaWF0ZSA/IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgIF9zZXRJbW1lZGlhdGUoZm4pO1xuICAgIH0gOiBmdW5jdGlvbihmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBfZGVsYXk7XG4gICAgfVxuICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IF9zZXRJbW1lZGlhdGUgPyBfZGVsYXkgOiBhc3luYy5uZXh0VGljaztcblxuXG4gICAgYXN5bmMuZm9yRWFjaCA9XG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9XG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mU2VyaWVzKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG5cbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPVxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9lYWNoT2ZMaW1pdChsaW1pdCkoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoT2YgPVxuICAgIGFzeW5jLmVhY2hPZiA9IGZ1bmN0aW9uIChvYmplY3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBvYmplY3QgPSBvYmplY3QgfHwgW107XG5cbiAgICAgICAgdmFyIGl0ZXIgPSBfa2V5SXRlcmF0b3Iob2JqZWN0KTtcbiAgICAgICAgdmFyIGtleSwgY29tcGxldGVkID0gMDtcblxuICAgICAgICB3aGlsZSAoKGtleSA9IGl0ZXIoKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpdGVyYXRvcihvYmplY3Rba2V5XSwga2V5LCBvbmx5X29uY2UoZG9uZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gMCkgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZC0tO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBrZXkgaXMgbnVsbCBpbiBjYXNlIGl0ZXJhdG9yIGlzbid0IGV4aGF1c3RlZFxuICAgICAgICAgICAgLy8gYW5kIGRvbmUgcmVzb2x2ZWQgc3luY2hyb25vdXNseS5cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gbnVsbCAmJiBjb21wbGV0ZWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZlNlcmllcyA9XG4gICAgYXN5bmMuZWFjaE9mU2VyaWVzID0gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iaiA9IG9iaiB8fCBbXTtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgdmFyIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRvcihvYmpba2V5XSwga2V5LCBvbmx5X29uY2UoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoaXRlcmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5mb3JFYWNoT2ZMaW1pdCA9XG4gICAgYXN5bmMuZWFjaE9mTGltaXQgPSBmdW5jdGlvbiAob2JqLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9lYWNoT2ZMaW1pdChsaW1pdCkob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZWFjaE9mTGltaXQobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBydW5uaW5nID0gMDtcbiAgICAgICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChkb25lICYmIHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWwoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZiwgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb1BhcmFsbGVsTGltaXQoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihfZWFjaE9mTGltaXQobGltaXQpLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvU2VyaWVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihhc3luYy5lYWNoT2ZTZXJpZXMsIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gX2lzQXJyYXlMaWtlKGFycikgPyBbXSA6IHt9O1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfYXN5bmNNYXApO1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLmluamVjdCA9XG4gICAgYXN5bmMuZm9sZGwgPVxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgaSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5mb2xkciA9XG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGlkZW50aXR5KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudHJhbnNmb3JtID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGl0ZXJhdG9yO1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBtZW1vO1xuICAgICAgICAgICAgbWVtbyA9IF9pc0FycmF5KGFycikgPyBbXSA6IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuZWFjaE9mKGFyciwgZnVuY3Rpb24odiwgaywgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHYsIGssIGNiKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleDogaW5kZXgsIHZhbHVlOiB4fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soX21hcChyZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICB9KSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMuc2VsZWN0ID1cbiAgICBhc3luYy5maWx0ZXIgPSBkb1BhcmFsbGVsKF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0TGltaXQgPVxuICAgIGFzeW5jLmZpbHRlckxpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID1cbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcblxuICAgIGZ1bmN0aW9uIF9yZWplY3QoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBfZmlsdGVyKGVhY2hmbiwgYXJyLCBmdW5jdGlvbih2YWx1ZSwgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgY2IoIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoZWFjaGZuLCBjaGVjaywgZ2V0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2IpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSBjYihnZXRSZXN1bHQoZmFsc2UsIHZvaWQgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWUoeCwgXywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNiKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2IgJiYgY2hlY2sodikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGdldFJlc3VsdCh0cnVlLCB4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGl0ZXJhdG9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGxpbWl0LCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBsaW1pdDtcbiAgICAgICAgICAgICAgICBlYWNoZm4oYXJyLCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMuYW55ID1cbiAgICBhc3luYy5zb21lID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIHRvQm9vbCwgaWRlbnRpdHkpO1xuXG4gICAgYXN5bmMuc29tZUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5hbGwgPVxuICAgIGFzeW5jLmV2ZXJ5ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIG5vdElkLCBub3RJZCk7XG5cbiAgICBhc3luYy5ldmVyeUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgbm90SWQsIG5vdElkKTtcblxuICAgIGZ1bmN0aW9uIF9maW5kR2V0UmVzdWx0KHYsIHgpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIGFzeW5jLmRldGVjdCA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mU2VyaWVzLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdExpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgaWRlbnRpdHksIF9maW5kR2V0UmVzdWx0KTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoY29tcGFyYXRvciksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgb3B0aW9uYWwsIHNoaWZ0IHRoZSBhcmdzLlxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHJlbWFpbmluZ1Rhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoZm4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gX2luZGV4T2YobGlzdGVuZXJzLCBmbik7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgX2FycmF5RWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2FycmF5RWFjaChrZXlzLCBmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSBfaXNBcnJheSh0YXNrc1trXSkgPyB0YXNrc1trXTogW3Rhc2tzW2tdXTtcbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBfZm9yRWFjaE9mKHJlc3VsdHMsIGZ1bmN0aW9uKHZhbCwgcmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCB0YXNrLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWFkLWxvY2tzXG4gICAgICAgICAgICB2YXIgbGVuID0gcmVxdWlyZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGRlcDtcbiAgICAgICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgICAgICAgIGlmICghKGRlcCA9IHRhc2tzW3JlcXVpcmVzW2xlbl1dKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhcyBpbmV4aXN0YW50IGRlcGVuZGVuY3knKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc0FycmF5KGRlcCkgJiYgX2luZGV4T2YoZGVwLCBrKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGN5Y2xpYyBkZXBlbmRlbmNpZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kgJiYgX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcblxuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHRpbWVzOiBERUZBVUxUX1RJTUVTLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IERFRkFVTFRfSU5URVJWQUxcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgdCA9PT0gJ251bWJlcicpe1xuICAgICAgICAgICAgICAgIGFjYy50aW1lcyA9IHBhcnNlSW50KHQsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiB0ID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodC50aW1lcywgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICAgICAgYWNjLmludGVydmFsID0gcGFyc2VJbnQodC5pbnRlcnZhbCwgMTApIHx8IERFRkFVTFRfSU5URVJWQUw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYXJndW1lbnQgdHlwZSBmb3IgXFwndGltZXNcXCc6ICcgKyB0eXBlb2YgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDEgfHwgbGVuZ3RoID4gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyAtIG11c3QgYmUgZWl0aGVyICh0YXNrKSwgKHRhc2ssIGNhbGxiYWNrKSwgKHRpbWVzLCB0YXNrKSBvciAodGltZXMsIHRhc2ssIGNhbGxiYWNrKScpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA8PSAyICYmIHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGltZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0cywgdGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgb3B0cy50YXNrID0gdGFzaztcblxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVkVGFzayh3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQodGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5SW50ZXJ2YWwoaW50ZXJ2YWwpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKG9wdHMudGltZXMpIHtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5hbEF0dGVtcHQgPSAhKG9wdHMudGltZXMtPTEpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KG9wdHMudGFzaywgZmluYWxBdHRlbXB0KSk7XG4gICAgICAgICAgICAgICAgaWYoIWZpbmFsQXR0ZW1wdCAmJiBvcHRzLmludGVydmFsID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlJbnRlcnZhbChvcHRzLmludGVydmFsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBvcHRzLmNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNhbGxiYWNrIGlzIHBhc3NlZCwgcnVuIHRoaXMgYXMgYSBjb250cm9sbCBmbG93XG4gICAgICAgIHJldHVybiBvcHRzLmNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrO1xuICAgIH07XG5cbiAgICBhc3luYy53YXRlcmZhbGwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGlmICghX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3cmFwSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCh3cmFwSXRlcmF0b3IobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbnN1cmVBc3luYyhpdGVyYXRvcikuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3BhcmFsbGVsKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgbm9vcDtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsIGZ1bmN0aW9uICh0YXNrLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0YXNrKF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLnBhcmFsbGVsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoYXN5bmMuZWFjaE9mLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24odGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoX2VhY2hPZkxpbWl0KGxpbWl0KSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2ZTZXJpZXMsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VDYWxsYmFjayhpbmRleCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYWtlQ2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIGFzeW5jLmFwcGx5ID0gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGNhbGxBcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoY2FsbEFyZ3MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb25jYXQoZWFjaGZuLCBhcnIsIGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIGZuKHgsIGZ1bmN0aW9uIChlcnIsIHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICB2YXIgbmV4dCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdC5hcHBseSh0aGlzLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihuZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gKytjYWxscyA8PSAxIHx8IHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9VbnRpbCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmR1cmluZyA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hlY2spO1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cnV0aCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0KGNoZWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9EdXJpbmcgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIGFzeW5jLmR1cmluZyhmdW5jdGlvbihuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY2FsbHMrKyA8IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBtdXN0IG5vdCBiZSB6ZXJvJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sgfHwgbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBxLnRhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfbmV4dChxLCB0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgd29ya2VycyAtPSAxO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHdvcmtlcnNMaXN0LCBmdW5jdGlvbiAod29ya2VyLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtlciA9PT0gdGFzayAmJiAhcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgdGFza3M6IFtdLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IGNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbm9vcCxcbiAgICAgICAgICAgIGVtcHR5OiBub29wLFxuICAgICAgICAgICAgZHJhaW46IG5vb3AsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHEuZHJhaW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHRydWUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFxLnBhdXNlZCAmJiB3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSh3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBxLnBheWxvYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEucGF5bG9hZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEudGFza3MubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfbWFwKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaCh0YXNrc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UoX25leHQocSwgdGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdW1lQ291bnQgPSBNYXRoLm1pbihxLmNvbmN1cnJlbmN5LCBxLnRhc2tzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSByZXN1bWVDb3VudDsgdysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgcSA9IF9xdWV1ZShmdW5jdGlvbiAoaXRlbXMsIGNiKSB7XG4gICAgICAgICAgICB3b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICAgIGVuZCA9IHNlcXVlbmNlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGJlZyArICgoZW5kIC0gYmVnICsgMSkgPj4+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3BcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoX2JpbmFyeVNlYXJjaChxLnRhc2tzLCBpdGVtLCBfY29tcGFyZVRhc2tzKSArIDEsIDAsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBxLnVuc2hpZnQ7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLmNhcmdvID0gZnVuY3Rpb24gKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gX3F1ZXVlKHdvcmtlciwgMSwgcGF5bG9hZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9jb25zb2xlX2ZuKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGlkZW50aXR5O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIG1lbW9pemVkKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGtleSBpbiBtZW1vKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF90aW1lcyhtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBtYXBwZXIoX3JhbmdlKGNvdW50KSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy50aW1lcyA9IF90aW1lcyhhc3luYy5tYXApO1xuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gX3RpbWVzKGFzeW5jLm1hcFNlcmllcyk7XG4gICAgYXN5bmMudGltZXNMaW1pdCA9IGZ1bmN0aW9uIChjb3VudCwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMubWFwTGltaXQoX3JhbmdlKGNvdW50KSwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBub29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW19yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgbmV4dGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfSldKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoYXQsIFtlcnJdLmNvbmNhdChyZXN1bHRzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5zZXEuYXBwbHkobnVsbCwgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBfYXBwbHlFYWNoKGVhY2hmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbihmbnMsIGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBnbyA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlYWNoZm4oZm5zLCBmdW5jdGlvbiAoZm4sIF8sIGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5hcHBseUVhY2ggPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZik7XG4gICAgYXN5bmMuYXBwbHlFYWNoU2VyaWVzID0gX2FwcGx5RWFjaChhc3luYy5lYWNoT2ZTZXJpZXMpO1xuXG5cbiAgICBhc3luYy5mb3JldmVyID0gZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZG9uZSA9IG9ubHlfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgdmFyIHRhc2sgPSBlbnN1cmVBc3luYyhmbik7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVBc3luYyhmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuXG4gICAgYXN5bmMuY29uc3RhbnQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICB2YXIgYXJncyA9IFtudWxsXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXN5bmMud3JhcFN5bmMgPVxuICAgIGFzeW5jLmFzeW5jaWZ5ID0gZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAoX2lzT2JqZWN0KHJlc3VsdCkgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLm1lc3NhZ2UgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBOb2RlLmpzXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG4gICAgfVxuICAgIC8vIEFNRCAvIFJlcXVpcmVKU1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG5cdCAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXG5cdCAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cblx0ICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSlcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cblx0ICogQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuXHQgKiBVbmljb2RlIHN0cmluZy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gJ3huLS0nICsgZW5jb2RlKHN0cmluZylcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG5cdHB1bnljb2RlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHQndmVyc2lvbic6ICcxLjMuMicsXG5cdFx0LyoqXG5cdFx0ICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHRcdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMpIHtcblx0XHRcdC8vIGluIE5vZGUuanMsIGlvLmpzLCBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IHB1bnljb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5wdW55Y29kZSA9IHB1bnljb2RlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUpIHJldHVybiB0cmlhbmdsZXM7XG5cbiAgICB2YXIgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgc2l6ZTtcblxuICAgIGlmIChoYXNIb2xlcykgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKTtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG4gICAgICAgIG1pblggPSBtYXhYID0gZGF0YVswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xuICAgICAgICAgICAgeSA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIHNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIHNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgICAgICBpLCBqLCBsYXN0O1xuXG4gICAgLy8gY2FsY3VsYXRlIG9yaWdpbmFsIHdpbmRpbmcgb3JkZXIgb2YgYSBwb2x5Z29uIHJpbmdcbiAgICBmb3IgKGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cblxuICAgIC8vIGxpbmsgcG9pbnRzIGludG8gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuICAgIGlmIChjbG9ja3dpc2UgPT09IChzdW0gPiAwKSkge1xuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgc2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChzaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0aWNlIGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZWFyLCB0cmlhbmdsZXMsIGRpbSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDIpO1xuXG4gICAgICAgICAgICAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgd2hpbGUgKHAgIT09IGVhci5wcmV2KSB7XG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG4gICAgdmFyIG1pblRYID0gYS54IDwgYi54ID8gKGEueCA8IGMueCA/IGEueCA6IGMueCkgOiAoYi54IDwgYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoYS55IDwgYy55ID8gYS55IDogYy55KSA6IChiLnkgPCBjLnkgPyBiLnkgOiBjLnkpLFxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1heFRZID0gYS55ID4gYi55ID8gKGEueSA+IGMueSA/IGEueSA6IGMueSkgOiAoYi55ID4gYy55ID8gYi55IDogYy55KTtcblxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgdmFyIG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBzaXplKSxcbiAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgdmFyIHAgPSBlYXIubmV4dFo7XG5cbiAgICB3aGlsZSAocCAmJiBwLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgcCA9IGVhci5wcmV2WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIC8vIGEgc2VsZi1pbnRlcnNlY3Rpb24gd2hlcmUgZWRnZSAodltpLTFdLHZbaV0pIGludGVyc2VjdHMgKHZbaSsxXSx2W2krMl0pXG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcblxuICAgICAgICAgICAgcCA9IHN0YXJ0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBwO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBzdG9wID0gbSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtLm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBtLnggJiZcbiAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoaHkgPCBtLnkgPyBoeCA6IHF4LCBoeSwgbS54LCBtLnksIGh5IDwgbS55ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxU2l6ZSA9PT0gMCB8fCAhcSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwLnogPD0gcS56KSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBzaXplIG9mIHRoZSBkYXRhIGJvdW5kaW5nIGJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlXG4gICAgeCA9IDMyNzY3ICogKHggLSBtaW5YKSAvIHNpemU7XG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAvIHNpemU7XG5cbiAgICB4ID0gKHggfCAoeCA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB4ID0gKHggfCAoeCA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnggPCBsZWZ0bW9zdC54KSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGVxdWFscyhhLCBiKSB8fCBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmXG4gICAgICAgICAgIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYik7XG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgcmV0dXJuIGFyZWEocDEsIHExLCBwMikgPiAwICE9PSBhcmVhKHAxLCBxMSwgcTIpID4gMCAmJlxuICAgICAgICAgICBhcmVhKHAyLCBxMiwgcDEpID4gMCAhPT0gYXJlYShwMiwgcTIsIHExKSA+IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGljZSBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0aWNlIG5vZGVzIGluIGEgcG9seWdvbiByaW5nXG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZVxuICAgIHRoaXMueiA9IG51bGw7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG5cbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuICAgIHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1xuLy8gV2Ugc3RvcmUgb3VyIEVFIG9iamVjdHMgaW4gYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gYH5gIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IG92ZXJyaWRkZW4gb3Jcbi8vIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vIFdlIGFsc28gYXNzdW1lIHRoYXQgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBldmVudCBuYW1lXG4vLyBpcyBhbiBFUzYgU3ltYm9sLlxuLy9cbnZhciBwcmVmaXggPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJyA/ICd+JyA6IGZhbHNlO1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIEV2ZW50RW1pdHRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgQ29udGV4dCBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgZW1pdCBvbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIE1pbmltYWwgRXZlbnRFbWl0dGVyIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkgeyAvKiBOb3RoaW5nIHRvIHNldCAqLyB9XG5cbi8qKlxuICogSG9sZHMgdGhlIGFzc2lnbmVkIEV2ZW50RW1pdHRlcnMgYnkgbmFtZS5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiBhIGxpc3Qgb2YgYXNzaWduZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZXhpc3RzIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7QXJyYXl8Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50LCBleGlzdHMpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGF2YWlsYWJsZSA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoZXhpc3RzKSByZXR1cm4gISFhdmFpbGFibGU7XG4gIGlmICghYXZhaWxhYmxlKSByZXR1cm4gW107XG4gIGlmIChhdmFpbGFibGUuZm4pIHJldHVybiBbYXZhaWxhYmxlLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGF2YWlsYWJsZS5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBhdmFpbGFibGVbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIEVtaXQgYW4gZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSW5kaWNhdGlvbiBpZiB3ZSd2ZSBlbWl0dGVkIGFuIGV2ZW50LlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyBFdmVudExpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdG9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgdGhpcylcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgdGhpcy5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lcjtcbiAgZWxzZSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XS5mbikgdGhpcy5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gICAgZWxzZSB0aGlzLl9ldmVudHNbZXZ0XSA9IFtcbiAgICAgIHRoaXMuX2V2ZW50c1tldnRdLCBsaXN0ZW5lclxuICAgIF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGFuIEV2ZW50TGlzdGVuZXIgdGhhdCdzIG9ubHkgY2FsbGVkIG9uY2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzLCB0cnVlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2Ugd2FudCB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgdGhhdCB3ZSBuZWVkIHRvIGZpbmQuXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IE9ubHkgcmVtb3ZlIGxpc3RlbmVycyBtYXRjaGluZyB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25jZSBsaXN0ZW5lcnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBldmVudHMgPSBbXTtcblxuICBpZiAoZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgIGxpc3RlbmVycy5mbiAhPT0gZm5cbiAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVycy5vbmNlKVxuICAgICAgICB8fCAoY29udGV4dCAmJiBsaXN0ZW5lcnMuY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuXG4gICAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKVxuICAgICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAvL1xuICBpZiAoZXZlbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW2V2dF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgb3Igb25seSB0aGUgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmVycyBmb3IuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKGV2ZW50KSBkZWxldGUgdGhpcy5fZXZlbnRzW3ByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRdO1xuICBlbHNlIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFwcGx5IGFueW1vcmUuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4ndXNlIHN0cmljdCc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiFcbiAqIGFzeW5jXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jXG4gKlxuICogQ29weXJpZ2h0IDIwMTAtMjAxNCBDYW9sYW4gTWNNYWhvblxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbi8qanNoaW50IG9uZXZhcjogZmFsc2UsIGluZGVudDo0ICovXG4vKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cbihmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXN5bmMgPSB7fTtcblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcm9vdCwgcHJldmlvdXNfYXN5bmM7XG5cbiAgICByb290ID0gdGhpcztcbiAgICBpZiAocm9vdCAhPSBudWxsKSB7XG4gICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWQpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkocm9vdCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8gY3Jvc3MtYnJvd3NlciBjb21wYXRpYmxpdHkgZnVuY3Rpb25zIC8vLy9cblxuICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgdmFyIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG5cbiAgICB2YXIgX2VhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBfbWFwID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgaWYgKGFyci5tYXApIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIubWFwKGl0ZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IoeCwgaSwgYSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHZhciBfcmVkdWNlID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIG1lbW8pIHtcbiAgICAgICAgaWYgKGFyci5yZWR1Y2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGl0ZXJhdG9yLCBtZW1vKTtcbiAgICAgICAgfVxuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICBtZW1vID0gaXRlcmF0b3IobWVtbywgeCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuXG4gICAgdmFyIF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgX2VhY2goYXJyLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgb25seV9vbmNlKGRvbmUpICk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2ggPSBhc3luYy5lYWNoO1xuXG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICB2YXIgaXRlcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGFycltjb21wbGV0ZWRdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID0gYXN5bmMuZWFjaFNlcmllcztcblxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZuID0gX2VhY2hMaW1pdChsaW1pdCk7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIFthcnIsIGl0ZXJhdG9yLCBjYWxsYmFja10pO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaExpbWl0ID0gYXN5bmMuZWFjaExpbWl0O1xuXG4gICAgdmFyIF9lYWNoTGltaXQgPSBmdW5jdGlvbiAobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgaWYgKCFhcnIubGVuZ3RoIHx8IGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVwbGVuaXNoICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiBzdGFydGVkIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoYXJyW3N0YXJ0ZWQgLSAxXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB2YXIgZG9QYXJhbGxlbCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvUGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKGxpbWl0LCBmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFtfZWFjaExpbWl0KGxpbWl0KV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBkb1NlcmllcyA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoU2VyaWVzXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBfYXN5bmNNYXAgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1t4LmluZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9tYXBMaW1pdChsaW1pdCkoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB2YXIgX21hcExpbWl0ID0gZnVuY3Rpb24obGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGRvUGFyYWxsZWxMaW1pdChsaW1pdCwgX2FzeW5jTWFwKTtcbiAgICB9O1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihtZW1vLCB4LCBmdW5jdGlvbiAoZXJyLCB2KSB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGluamVjdCBhbGlhc1xuICAgIGFzeW5jLmluamVjdCA9IGFzeW5jLnJlZHVjZTtcbiAgICAvLyBmb2xkbCBhbGlhc1xuICAgIGFzeW5jLmZvbGRsID0gYXN5bmMucmVkdWNlO1xuXG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSkucmV2ZXJzZSgpO1xuICAgICAgICBhc3luYy5yZWR1Y2UocmV2ZXJzZWQsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICAvLyBmb2xkciBhbGlhc1xuICAgIGFzeW5jLmZvbGRyID0gYXN5bmMucmVkdWNlUmlnaHQ7XG5cbiAgICB2YXIgX2ZpbHRlciA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LnZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG4gICAgYXN5bmMuZmlsdGVyU2VyaWVzID0gZG9TZXJpZXMoX2ZpbHRlcik7XG4gICAgLy8gc2VsZWN0IGFsaWFzXG4gICAgYXN5bmMuc2VsZWN0ID0gYXN5bmMuZmlsdGVyO1xuICAgIGFzeW5jLnNlbGVjdFNlcmllcyA9IGFzeW5jLmZpbHRlclNlcmllcztcblxuICAgIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLnJlamVjdCA9IGRvUGFyYWxsZWwoX3JlamVjdCk7XG4gICAgYXN5bmMucmVqZWN0U2VyaWVzID0gZG9TZXJpZXMoX3JlamVjdCk7XG5cbiAgICB2YXIgX2RldGVjdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIG1haW5fY2FsbGJhY2spIHtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKHgpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZGV0ZWN0ID0gZG9QYXJhbGxlbChfZGV0ZWN0KTtcbiAgICBhc3luYy5kZXRlY3RTZXJpZXMgPSBkb1NlcmllcyhfZGV0ZWN0KTtcblxuICAgIGFzeW5jLnNvbWUgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbnkgYWxpYXNcbiAgICBhc3luYy5hbnkgPSBhc3luYy5zb21lO1xuXG4gICAgYXN5bmMuZXZlcnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghdikge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gYWxsIGFsaWFzXG4gICAgYXN5bmMuYWxsID0gYXN5bmMuZXZlcnk7XG5cbiAgICBhc3luYy5zb3J0QnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgYXN5bmMubWFwKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAoZXJyLCBjcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHt2YWx1ZTogeCwgY3JpdGVyaWE6IGNyaXRlcmlhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoZm4pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGhcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldID09PSBmbikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdGFza0NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtYWluaW5nVGFza3MtLVxuICAgICAgICAgICAgX2VhY2gobGlzdGVuZXJzLnNsaWNlKDApLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIHZhciB0aGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZmluYWwgY2FsbGJhY2sgZnJvbSBjYWxsaW5nIGl0c2VsZiBpZiBpdCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdGhlQ2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9lYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKF9rZXlzKHJlc3VsdHMpLCBmdW5jdGlvbihya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIHN1YnNlcXVlbnQgZXJyb3JzIGhpdHRpbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUodGFza0NvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCBNYXRoLmFicyh0YXNrLmxlbmd0aCAtIDEpKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucmV0cnkgPSBmdW5jdGlvbih0aW1lcywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIERFRkFVTFRfVElNRVMgPSA1O1xuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcbiAgICAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHRpbWVzIG5vdCBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICAgICAgdGltZXMgPSBERUZBVUxUX1RJTUVTO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lcyBpcyBhIG51bWJlclxuICAgICAgICB0aW1lcyA9IHBhcnNlSW50KHRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgdmFyIHdyYXBwZWRUYXNrID0gZnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkUmVzdWx0cykge1xuICAgICAgICAgICAgdmFyIHJldHJ5QXR0ZW1wdCA9IGZ1bmN0aW9uKHRhc2ssIGZpbmFsQXR0ZW1wdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKGZ1bmN0aW9uKGVyciwgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKCFlcnIgfHwgZmluYWxBdHRlbXB0LCB7ZXJyOiBlcnIsIHJlc3VsdDogcmVzdWx0fSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXBwZWRSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcykge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KHRhc2ssICEodGltZXMtPTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBjYWxsYmFjaykoZGF0YS5lcnIsIGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrXG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJdGVyYXRvciA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGZ1bmN0aW9uKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGVhY2hmbi5tYXAodGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGVhY2hmbi5lYWNoKF9rZXlzKHRhc2tzKSwgZnVuY3Rpb24gKGssIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGFza3Nba10oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogYXN5bmMubWFwLCBlYWNoOiBhc3luYy5lYWNoIH0sIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogX21hcExpbWl0KGxpbWl0KSwgZWFjaDogX2VhY2hMaW1pdChsaW1pdCkgfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICBhc3luYy5tYXBTZXJpZXModGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5pdGVyYXRvciA9IGZ1bmN0aW9uICh0YXNrcykge1xuICAgICAgICB2YXIgbWFrZUNhbGxiYWNrID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmbi5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCB0YXNrcy5sZW5ndGggLSAxKSA/IG1ha2VDYWxsYmFjayhpbmRleCArIDEpOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KFxuICAgICAgICAgICAgICAgIG51bGwsIGFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgX2NvbmNhdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHIgPSByLmNvbmNhdCh5IHx8IFtdKTtcbiAgICAgICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRlc3QoKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLndoaWxzdCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvV2hpbHN0ID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAodGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMudW50aWwodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAoIXRlc3QuYXBwbHkobnVsbCwgYXJncykpIHtcbiAgICAgICAgICAgICAgICBhc3luYy5kb1VudGlsKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcG9zLCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxLnNhdHVyYXRlZCAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHEuZHJhaW4gPSBudWxsO1xuICAgICAgICAgICAgICBxLnRhc2tzID0gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gcS50YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocS5lbXB0eSAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLmRyYWluICYmIHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UobmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcih0YXNrLmRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSB0cnVlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSBxLmNvbmN1cnJlbmN5OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMucHJpb3JpdHlRdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG5cbiAgICAgICAgZnVuY3Rpb24gX2NvbXBhcmVUYXNrcyhhLCBiKXtcbiAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgIHZhciBiZWcgPSAtMSxcbiAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBzZXF1ZW5jZVttaWRdKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGJlZyA9IG1pZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiZWc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG5vcm1hbCBxdWV1ZVxuICAgICAgICB2YXIgcSA9IGFzeW5jLnF1ZXVlKHdvcmtlciwgY29uY3VycmVuY3kpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciB3b3JraW5nICAgICA9IGZhbHNlLFxuICAgICAgICAgICAgdGFza3MgICAgICAgPSBbXTtcblxuICAgICAgICB2YXIgY2FyZ28gPSB7XG4gICAgICAgICAgICB0YXNrczogdGFza3MsXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBudWxsLFxuICAgICAgICAgICAgZW1wdHk6IG51bGwsXG4gICAgICAgICAgICBkcmFpbjogbnVsbCxcbiAgICAgICAgICAgIGRyYWluZWQ6IHRydWUsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZ28uc2F0dXJhdGVkICYmIHRhc2tzLmxlbmd0aCA9PT0gcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ28uc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoY2FyZ28ucHJvY2Vzcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcygpIHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2luZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2FyZ28uZHJhaW4gJiYgIWNhcmdvLmRyYWluZWQpIGNhcmdvLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvLmRyYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRzID0gdHlwZW9mIHBheWxvYWQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0YXNrcy5zcGxpY2UoMCwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tzLnNwbGljZSgwLCB0YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRzID0gX21hcCh0cywgZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmKGNhcmdvLmVtcHR5KSBjYXJnby5lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHdvcmtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtlcihkcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JraW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKHRzLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjYXJnbztcbiAgICB9O1xuXG4gICAgdmFyIF9jb25zb2xlX2ZuID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZWFjaChhcmdzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbmFtZV0oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIG1lbW9ba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICBxW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfTtcblxuICAgIGFzeW5jLnVubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb3VudGVyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jLm1hcFNlcmllcyhjb3VudGVyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXEgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXN5bmMucmVkdWNlKGZucywgYXJncywgZnVuY3Rpb24gKG5ld2FyZ3MsIGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KFtmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1dKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy5jb21wb3NlID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICB2YXIgX2FwcGx5RWFjaCA9IGZ1bmN0aW9uIChlYWNoZm4sIGZucyAvKmFyZ3MuLi4qLykge1xuICAgICAgICB2YXIgZ28gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzLmNvbmNhdChbY2JdKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgICAgIHJldHVybiBnby5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuYXBwbHlFYWNoID0gZG9QYXJhbGxlbChfYXBwbHlFYWNoKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBkb1NlcmllcyhfYXBwbHlFYWNoKTtcblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbihuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsInZhciBhc3luYyAgICAgICA9IHJlcXVpcmUoJ2FzeW5jJyksXG4gICAgdXJsUGFyc2VyICAgPSByZXF1aXJlKCd1cmwnKSxcbiAgICBSZXNvdXJjZSAgICA9IHJlcXVpcmUoJy4vUmVzb3VyY2UnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgbXVsdGlwbGUgcmVzb3VyY2VzIHRvIGxvYWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KSB7XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICBjb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByb2dyZXNzIHBlcmNlbnQgb2YgdGhlIGxvYWRlciBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRpbmcgc3RhdGUgb2YgdGhlIGxvYWRlciwgdHJ1ZSBpZiBpdCBpcyBjdXJyZW50bHkgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdG90YWwgcHJvZ3Jlc3MgdGhhdCBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGJlZm9yZSBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaWRkbGV3YXJlIHRvIHJ1biBhZnRlciBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfbG9hZFJlc291cmNlYCBmdW5jdGlvbiBib3VuZCB3aXRoIHRoaXMgb2JqZWN0IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kTG9hZFJlc291cmNlID0gdGhpcy5fbG9hZFJlc291cmNlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkxvYWRgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkxvYWQgPSB0aGlzLl9vbkxvYWQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvdXJjZSBidWZmZXIgdGhhdCBmaWxscyB1bnRpbCBgbG9hZGAgaXMgY2FsbGVkIHRvIHN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB0cmFjayBsb2FkIGNvbXBsZXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9udW1Ub0xvYWQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlcyB3YWl0aW5nIHRvIGJlIGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2VbXX1cbiAgICAgKi9cbiAgICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX2JvdW5kTG9hZFJlc291cmNlLCBjb25jdXJyZW5jeSk7XG5cbiAgICAvKipcbiAgICAgKiBBbGwgdGhlIHJlc291cmNlcyBmb3IgdGhpcyBsb2FkZXIga2V5ZWQgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIFJlc291cmNlPn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgb3IgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwcm9ncmVzc1xuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGVycm9yZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGxvYWRlciBiZWdpbnMgdG8gcHJvY2VzcyB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBxdWV1ZWQgcmVzb3VyY2VzIGFsbCBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbi8qKlxuICogQWRkcyBhIHJlc291cmNlIChvciBtdWx0aXBsZSByZXNvdXJjZXMpIHRvIHRoZSBsb2FkZXIgcXVldWUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gdGFrZSBhIHdpZGUgdmFyaWV0eSBvZiBkaWZmZXJlbnQgcGFyYW1ldGVycy4gVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBhbHdheXNcbiAqIHJlcXVpcmVkIHRoZSB1cmwgdG8gbG9hZC4gQWxsIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOlxuICpcbiAqIGBgYGpzXG4gKiBsb2FkZXJcbiAqICAgICAvLyBub3JtYWwgcGFyYW0gc3ludGF4XG4gKiAgICAgLmFkZCgna2V5JywgJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJywgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCgnaHR0cDovLy4uLicpXG4gKlxuICogICAgIC8vIG9iamVjdCBzeW50YXhcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgbmFtZTogJ2tleTInLFxuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MycsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9XG4gKiAgICAgfSlcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgdXJsOiAnaHR0cHM6Ly8uLi4nLFxuICogICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7fSxcbiAqICAgICAgICAgY3Jvc3NPcmlnaW46IHRydWVcbiAqICAgICB9KVxuICpcbiAqICAgICAvLyB5b3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBvYmplY3RzIG9yIHVybHMgb3IgYm90aFxuICogICAgIC5hZGQoW1xuICogICAgICAgICB7IG5hbWU6ICdrZXk0JywgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgIHsgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgICdodHRwOi8vLi4uJ1xuICogICAgIF0pO1xuICogYGBgXG4gKlxuICogQGFsaWFzIGVucXVldWVcbiAqIEBwYXJhbSBbbmFtZV0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQsIGlmIG5vdCBwYXNzZWQgdGhlIHVybCBpcyB1c2VkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCByZWxhdGl2ZSB0byB0aGUgYmFzZVVybCBvZiB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7Ym9vbGVhbn0gSXMgdGhpcyByZXF1ZXN0IGNyb3NzLW9yaWdpbj8gRGVmYXVsdCBpcyB0byBkZXRlcm1pbmUgYXV0b21hdGljYWxseS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5sb2FkVHlwZT1SZXNvdXJjZS5MT0FEX1RZUEUuWEhSXSB7UmVzb3VyY2UuWEhSX0xPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGlzIHNwZWNpZmljIHJlc291cmNlIGNvbXBsZXRlcyBsb2FkaW5nLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFkZCA9IExvYWRlci5wcm90b3R5cGUuZW5xdWV1ZSA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIGNiKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIG9mIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hZGQobmFtZVtpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBpZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluc3RlYWQgb2YgcGFyYW1zXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYiA9IHVybCB8fCBuYW1lLmNhbGxiYWNrIHx8IG5hbWUub25Db21wbGV0ZTtcbiAgICAgICAgb3B0aW9ucyA9IG5hbWU7XG4gICAgICAgIHVybCA9IG5hbWUudXJsO1xuICAgICAgICBuYW1lID0gbmFtZS5uYW1lIHx8IG5hbWUua2V5IHx8IG5hbWUudXJsO1xuICAgIH1cblxuICAgIC8vIGNhc2Ugd2hlcmUgbm8gbmFtZSBpcyBwYXNzZWQgc2hpZnQgYWxsIGFyZ3Mgb3ZlciBieSBvbmUuXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHVybDtcbiAgICAgICAgdXJsID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBzaGlmdGVkIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIHVybC5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB1cmwgcGFzc2VkIHRvIGFkZCByZXNvdXJjZSB0byBsb2FkZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gb3B0aW9ucyBhcmUgb3B0aW9uYWwgc28gcGVvcGxlIG1pZ2h0IHBhc3MgYSBmdW5jdGlvbiBhbmQgbm8gb3B0aW9uc1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHJlc291cmNlIGFscmVhZHkgZXhpc3RzLlxuICAgIGlmICh0aGlzLnJlc291cmNlc1tuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc291cmNlIHdpdGggbmFtZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgIH1cblxuICAgIC8vIGFkZCBiYXNlIHVybCBpZiB0aGlzIGlzbid0IGFuIGFic29sdXRlIHVybFxuICAgIHVybCA9IHRoaXMuX2hhbmRsZUJhc2VVcmwodXJsKTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgc3RvcmUgdGhlIHJlc291cmNlXG4gICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0gPSBuZXcgUmVzb3VyY2UobmFtZSwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0ub25jZSgnYWZ0ZXJNaWRkbGV3YXJlJywgY2IpO1xuICAgIH1cblxuICAgIHRoaXMuX251bVRvTG9hZCsrO1xuXG4gICAgLy8gaWYgYWxyZWFkeSBsb2FkaW5nIGFkZCBpdCB0byB0aGUgd29ya2VyIHF1ZXVlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAoMTAwIC0gdGhpcy5wcm9ncmVzcykgLyAodGhpcy5fcXVldWUubGVuZ3RoKCkgKyB0aGlzLl9xdWV1ZS5ydW5uaW5nKCkpO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgYnVmZmVyIGl0IHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSBsYXRlclxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9idWZmZXIucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAxMDAgLyB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuTG9hZGVyLnByb3RvdHlwZS5faGFuZGxlQmFzZVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFyc2VkVXJsID0gdXJsUGFyc2VyLnBhcnNlKHVybCk7XG5cbiAgICAvLyBhYnNvbHV0ZSB1cmwsIGp1c3QgdXNlIGl0IGFzIGlzLlxuICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgfHwgcGFyc2VkVXJsLnBhdGhuYW1lLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBpZiBiYXNlVXJsIGRvZXNuJ3QgZW5kIGluIHNsYXNoIGFuZCB1cmwgZG9lc24ndCBzdGFydCB3aXRoIHNsYXNoLCB0aGVuIGFkZCBhIHNsYXNoIGluYmV0d2VlblxuICAgIGlmIChcbiAgICAgICAgdGhpcy5iYXNlVXJsLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmJhc2VVcmwubGFzdEluZGV4T2YoJy8nKSAhPT0gdGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgdXJsLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyAnLycgKyB1cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsICsgdXJsO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBTZXRzIHVwIGEgbWlkZGxld2FyZSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuICpiZWZvcmUqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyBwcmVcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYmVmb3JlID0gTG9hZGVyLnByb3RvdHlwZS5wcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLnB1c2goZm4pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmFmdGVyKiB0aGVcbiAqIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqXG4gKiBAYWxpYXMgdXNlXG4gKiBAcGFyYW0gbWlkZGxld2FyZSB7ZnVuY3Rpb259IFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFmdGVyID0gTG9hZGVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9hZnRlck1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoZSBxdWV1ZSBvZiB0aGUgbG9hZGVyIHRvIHByZXBhcmUgZm9yIGEgbmV3IGxvYWQuXG4gKlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvLyB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG4gICAgLy8gdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gICAgdGhpcy5fcXVldWUuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGxvYWRpbmcgdGhlIHF1ZXVlZCByZXNvdXJjZXMuXG4gKlxuICogQGZpcmVzIHN0YXJ0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgYGNvbXBsZXRlYCBldmVudC5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgLy8gcmVnaXN0ZXIgY29tcGxldGUgY2FsbGJhY2sgaWYgdGhleSBwYXNzIG9uZVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcXVldWUgaGFzIGFscmVhZHkgc3RhcnRlZCB3ZSBhcmUgZG9uZSBoZXJlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm90aWZ5IG9mIHN0YXJ0XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gc3RhcnQgdGhlIGludGVybmFsIHF1ZXVlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLl9idWZmZXJbaV0pO1xuICAgIH1cblxuICAgIC8vIGVtcHR5IHRoZSBidWZmZXJcbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBMb2FkcyBhIHNpbmdsZSByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX2xvYWRSZXNvdXJjZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZGVxdWV1ZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHJlc291cmNlLl9kZXF1ZXVlID0gZGVxdWV1ZTtcblxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gcmVzb3VyY2Uub24oJ3Byb2dyZXNzJywgc2VsZi5lbWl0LmJpbmQoc2VsZiwgJ3Byb2dyZXNzJykpO1xuXG4gICAgICAgIHJlc291cmNlLmxvYWQoc2VsZi5fYm91bmRPbkxvYWQpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgb25jZSBlYWNoIHJlc291cmNlIGhhcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzLCB0aGlzLnJlc291cmNlcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBlYWNoIHRpbWUgYSByZXNvdXJjZXMgaXMgbG9hZGVkLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQGZpcmVzIGVycm9yXG4gKiBAZmlyZXMgbG9hZFxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgdGhpcy5wcm9ncmVzcyArPSB0aGlzLl9wcm9ncmVzc0NodW5rO1xuXG4gICAgdGhpcy5lbWl0KCdwcm9ncmVzcycsIHRoaXMsIHJlc291cmNlKTtcblxuICAgIC8vIHJ1biBtaWRkbGV3YXJlLCB0aGlzICptdXN0KiBoYXBwZW4gYmVmb3JlIGRlcXVldWUgc28gc3ViLWFzc2V0cyBnZXQgYWRkZWQgcHJvcGVybHlcbiAgICB0aGlzLl9ydW5NaWRkbGV3YXJlKHJlc291cmNlLCB0aGlzLl9hZnRlck1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzb3VyY2UuZW1pdCgnYWZ0ZXJNaWRkbGV3YXJlJywgcmVzb3VyY2UpO1xuXG4gICAgICAgIHRoaXMuX251bVRvTG9hZC0tO1xuXG4gICAgICAgIC8vIGRvIGNvbXBsZXRpb24gY2hlY2tcbiAgICAgICAgaWYgKHRoaXMuX251bVRvTG9hZCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgIHRoaXMuX29uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc291cmNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgcmVzb3VyY2UuZXJyb3IsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZCcsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuXG5cbiAgICAvLyByZW1vdmUgdGhpcyByZXNvdXJjZSBmcm9tIHRoZSBhc3luYyBxdWV1ZVxuICAgIHJlc291cmNlLl9kZXF1ZXVlKCk7XG59O1xuXG4vKipcbiAqIFJ1biBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvbiBhIHJlc291cmNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX3J1bk1pZGRsZXdhcmUgPSBmdW5jdGlvbiAocmVzb3VyY2UsIGZucywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzKGZucywgZnVuY3Rpb24gKGZuLCBuZXh0KSB7XG4gICAgICAgIGZuLmNhbGwoc2VsZiwgcmVzb3VyY2UsIG5leHQpO1xuICAgIH0sIGNiLmJpbmQodGhpcywgcmVzb3VyY2UpKTtcbn07XG5cbkxvYWRlci5MT0FEX1RZUEUgPSBSZXNvdXJjZS5MT0FEX1RZUEU7XG5Mb2FkZXIuWEhSX1JFQURZX1NUQVRFID0gUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFO1xuTG9hZGVyLlhIUl9SRVNQT05TRV9UWVBFID0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEU7XG4iLCJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIF91cmwgPSByZXF1aXJlKCd1cmwnKSxcbiAgICAvLyB0ZXN0cyBpcyBDT1JTIGlzIHN1cHBvcnRlZCBpbiBYSFIsIGlmIG5vdCB3ZSBuZWVkIHRvIHVzZSBYRFJcbiAgICB1c2VYZHIgPSAhISh3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiAobmV3IFhNTEh0dHBSZXF1ZXN0KCkpKSksXG4gICAgdGVtcEFuY2hvciA9IG51bGw7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgYSBzaW5nbGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnlcbiAqIGEgc2luZ2xlIFVSTC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBuYW1lIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCBmb3IgYXVkaW8vdmlkZW8gbG9hZHMgeW91IGNhbiBwYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMuXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5jcm9zc09yaWdpbl0ge3N0cmluZ3xib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5MT0FEX1RZUEV9IEhvdyBzaG91bGQgdGhpcyByZXNvdXJjZSBiZSBsb2FkZWQ/XG4gKiBAcGFyYW0gW29wdGlvbnMueGhyVHlwZT1SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ERUZBVUxUXSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IEhvdyBzaG91bGQgdGhlIGRhdGEgYmVpbmdcbiAqICAgICAgbG9hZGVkIGJlIGludGVycHJldGVkIHdoZW4gdXNpbmcgWEhSP1xuICogQHBhcmFtIFtvcHRpb25zLm1ldGFkYXRhXSB7b2JqZWN0fSBFeHRyYSBpbmZvIGZvciBtaWRkbGV3YXJlLlxuICovXG5mdW5jdGlvbiBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggbmFtZSBhbmQgdXJsIGFyZSByZXF1aXJlZCBmb3IgY29uc3RydWN0aW5nIGEgcmVzb3VyY2UuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVybCB1c2VkIHRvIGxvYWQgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHVybCBpcyBhIGRhdGEgdXJsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzRGF0YVVybCA9IHRoaXMudXJsLmluZGV4T2YoJ2RhdGE6JykgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSB0aGF0IHdhcyBsb2FkZWQgYnkgdGhlIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55fVxuICAgICAqL1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBvcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJ2Fub255bW91cycgOiBvcHRpb25zLmNyb3NzT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCBvZiBsb2FkaW5nIHRvIHVzZSBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlLkxPQURfVFlQRX1cbiAgICAgKi9cbiAgICB0aGlzLmxvYWRUeXBlID0gb3B0aW9ucy5sb2FkVHlwZSB8fCB0aGlzLl9kZXRlcm1pbmVMb2FkVHlwZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgdXNlZCB0byBsb2FkIHRoZSByZXNvdXJjZSB2aWEgWEhSLiBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMueGhyVHlwZSA9IG9wdGlvbnMueGhyVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgKGlmIGFueSkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFcnJvcn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBYSFIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLiBUaGlzIGlzIG9ubHkgc2V0XG4gICAgICogd2hlbiBgbG9hZFR5cGVgIGlzIGBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1hNTEh0dHBSZXF1ZXN0fVxuICAgICAqL1xuICAgIHRoaXMueGhyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMganNvbi4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNKc29uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIHhtbC4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNYbWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gaW1hZ2UgdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0ltYWdlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGFuIGF1ZGlvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNBdWRpbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhIHZpZGVvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNWaWRlbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBkZXF1ZXVlYCBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgYSBzdG9yYWdlIHBsYWNlIGZvciB0aGUgYXN5bmMgcXVldWUgZGVxdWV1ZSBtZXRob2RcbiAgICAgKiB1c2VkIHByaXZhdGVseSBieSB0aGUgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kZXF1ZXVlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tcGxldGVgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZENvbXBsZXRlID0gdGhpcy5jb21wbGV0ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25FcnJvcmAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25FcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uUHJvZ3Jlc3NgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MgPSB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyk7XG5cbiAgICAvLyB4aHIgY2FsbGJhY2tzXG4gICAgdGhpcy5fYm91bmRYaHJPbkVycm9yID0gdGhpcy5feGhyT25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25BYm9ydCA9IHRoaXMuX3hock9uQWJvcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9ib3VuZFhock9uTG9hZCA9IHRoaXMuX3hock9uTG9hZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0ID0gdGhpcy5feGRyT25UaW1lb3V0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJlc291cmNlIGJlaW5ncyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBlYWNoIHRpbWUgcHJvZ3Jlc3Mgb2YgdGhpcyByZXNvdXJjZSBsb2FkIHVwZGF0ZXMuXG4gICAgICogTm90IGFsbCByZXNvdXJjZXMgdHlwZXMgYW5kIGxvYWRlciBzeXN0ZW1zIGNhbiBzdXBwb3J0IHRoaXMgZXZlbnRcbiAgICAgKiBzbyBzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIElmIHRoZSByZXNvdXJjZVxuICAgICAqIGlzIGJlaW5nIGxvYWRlZCBvbiBhIG1vZGVybiBicm93c2VyLCB1c2luZyBYSFIsIGFuZCB0aGUgcmVtb3RlIHNlcnZlclxuICAgICAqIHByb3Blcmx5IHNldHMgQ29udGVudC1MZW5ndGggaGVhZGVycywgdGhlbiB0aGlzIHdpbGwgYmUgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHRoaXMgcmVzb3VyY2UgaGFzIGxvYWRlZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGl0IHdpbGxcbiAgICAgKiBiZSBpbiB0aGUgYGVycm9yYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb21wbGV0ZVxuICAgICAqIEBtZW1iZXJvZiBSZXNvdXJjZSNcbiAgICAgKi9cbn1cblxuUmVzb3VyY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblJlc291cmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlc291cmNlO1xubW9kdWxlLmV4cG9ydHMgPSBSZXNvdXJjZTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgcmVzb3VyY2UgYXMgY29tcGxldGUuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIGluIGEgd3JhcHBlciBvciBzb21ldGhpbmcuLi5ncm9zcy4uLi5cbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvcik7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgICBpZiAodGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGhyLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub250aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMueGhyLm9ucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25sb2FkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogS2lja3Mgb2ZmIGxvYWRpbmcgb2YgdGhpcyByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gaWYgYSBjYWxsYmFjayBpcyBzZXQsIGxpc3RlbiBmb3IgY29tcGxldGUgZXZlbnRcbiAgICBpZiAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luID09PSBmYWxzZSB8fCB0eXBlb2YgdGhpcy5jcm9zc09yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHRoaXMuX2RldGVybWluZUNyb3NzT3JpZ2luKHRoaXMudXJsKTtcbiAgICB9XG5cbiAgICBzd2l0Y2godGhpcy5sb2FkVHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRTpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRJbWFnZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuQVVESU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlZJREVPOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5YSFI6XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodXNlWGRyICYmIHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGRyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGhyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEltYWdlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLnNyYyA9IHRoaXMudXJsO1xuXG4gICAgdGhpcy5pc0ltYWdlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBIVE1MQXVkaW9FbGVtZW50IG9yIEhUTUxWaWRlb0VsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdhdWRpbycgJiYgdHlwZW9mIEF1ZGlvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQXVkaW8oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBlbGVtZW50ICcgKyB0eXBlKTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBmb3IgQ29jb29uSlMgQ2FudmFzKyBydW50aW1lLCBsYWNrcyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKVxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUykge1xuICAgICAgICB0aGlzLmRhdGEuc3JjID0gQXJyYXkuaXNBcnJheSh0aGlzLnVybCkgPyB0aGlzLnVybFswXSA6IHRoaXMudXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51cmwpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXJsLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybFtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1snaXMnICsgdHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSldID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUsIGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YS5sb2FkKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhNTEh0dHBSZXF1ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBzZXQgdGhlIHJlcXVlc3QgdHlwZSBhbmQgdXJsXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsLCB0cnVlKTtcblxuICAgIC8vIGxvYWQganNvbiBhcyB0ZXh0IGFuZCBwYXJzZSBpdCBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgLy8gKmNvdWdoKiBzYWZhcmkgKmNvdWdoKiBjYW4ndCBkZWFsIHdpdGggaXQuXG4gICAgaWYgKHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTiB8fCB0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHRoaXMueGhyVHlwZTtcbiAgICB9XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkLCBmYWxzZSk7XG5cbiAgICB4aHIuc2VuZCgpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBYRG9tYWluUmVxdWVzdC4gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdXBwb3J0IElFOSAoZ3Jvc3MpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhkciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhkciA9IHRoaXMueGhyID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7XG5cbiAgICAvLyBYRG9tYWluUmVxdWVzdCBoYXMgYSBmZXcgcXVpcmtzLiBPY2Nhc2lvbmFsbHkgaXQgd2lsbCBhYm9ydCByZXF1ZXN0c1xuICAgIC8vIEEgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbWFrZSBzdXJlIEFMTCBjYWxsYmFja3MgYXJlIHNldCBldmVuIGlmIG5vdCB1c2VkXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU3ODY5NjYveGRvbWFpbnJlcXVlc3QtYWJvcnRzLXBvc3Qtb24taWUtOVxuICAgIHhkci50aW1lb3V0ID0gNTAwMDtcblxuICAgIHhkci5vbmVycm9yID0gdGhpcy5fYm91bmRYaHJPbkVycm9yO1xuICAgIHhkci5vbnRpbWVvdXQgPSB0aGlzLl9ib3VuZFhkck9uVGltZW91dDtcbiAgICB4ZHIub25wcm9ncmVzcyA9IHRoaXMuX2JvdW5kT25Qcm9ncmVzcztcbiAgICB4ZHIub25sb2FkID0gdGhpcy5fYm91bmRYaHJPbkxvYWQ7XG5cbiAgICB4ZHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gIE5vdGU6IFRoZSB4ZHIuc2VuZCgpIGNhbGwgaXMgd3JhcHBlZCBpbiBhIHRpbWVvdXQgdG8gcHJldmVudCBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmZhY2Ugd2hlcmUgc29tZSByZXF1ZXN0cyBhcmUgbG9zdFxuICAgIC8vICBpZiBtdWx0aXBsZSBYRG9tYWluUmVxdWVzdHMgYXJlIGJlaW5nIHNlbnQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAvLyBTb21lIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9pc3N1ZXMvMTI0OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB4ZHIuc2VuZCgpO1xuICAgIH0sIDApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc291cmNlIHVzZWQgaW4gbG9hZGluZyB2aWEgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSBUaGUgZWxlbWVudCB0eXBlICh2aWRlbyBvciBhdWRpbykuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSBzb3VyY2UgVVJMIHRvIGxvYWQgZnJvbS5cbiAqIEBwYXJhbSBbbWltZV0ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSBvZiB0aGUgdmlkZW9cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fY3JlYXRlU291cmNlID0gZnVuY3Rpb24gKHR5cGUsIHVybCwgbWltZSkge1xuICAgIGlmICghbWltZSkge1xuICAgICAgICBtaW1lID0gdHlwZSArICcvJyArIHVybC5zdWJzdHIodXJsLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gdXJsO1xuICAgIHNvdXJjZS50eXBlID0gbWltZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgZXJyb3JzIG91dC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgZXJyb3IgZXZlbnQgZnJvbSB0aGUgZWxlbWVudCB0aGF0IGVtaXRzIGl0LlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgZWxlbWVudCB1c2luZyAnICsgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgcHJvZ3Jlc3MgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fb25Qcm9ncmVzcyA9ICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGVycm9yIGV2ZW50IGZpcmVzIGZvciB4aHIveGRyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RFcnJvckV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIHJlcVR5cGUodGhpcy54aHIpICsgJyBSZXF1ZXN0IGZhaWxlZC4gJyArXG4gICAgICAgICdTdGF0dXM6ICcgKyB0aGlzLnhoci5zdGF0dXMgKyAnLCB0ZXh0OiBcIicgKyB0aGlzLnhoci5zdGF0dXNUZXh0ICsgJ1wiJ1xuICAgICk7XG5cbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhbiBhYm9ydCBldmVudCBmaXJlcyBmb3IgeGhyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RBYm9ydEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3Qgd2FzIGFib3J0ZWQgYnkgdGhlIHVzZXIuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYSB0aW1lb3V0IGV2ZW50IGZpcmVzIGZvciB4ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGRyT25UaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgdGltZWQgb3V0LicpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gZGF0YSBzdWNjZXNzZnVsbHkgbG9hZHMgZnJvbSBhbiB4aHIveGRyIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdExvYWRFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGhyT25Mb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB4aHIgPSB0aGlzLnhocixcbiAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1cyAhPT0gdW5kZWZpbmVkID8geGhyLnN0YXR1cyA6IDIwMDsgLy9YRFIgaGFzIG5vIGAuc3RhdHVzYCwgYXNzdW1lIDIwMC5cblxuICAgIC8vIHN0YXR1cyBjYW4gYmUgMCB3aGVuIHVzaW5nIHRoZSBmaWxlOi8vIHByb3RvY29sLCBhbHNvIGNoZWNrIGlmIGEgcmVzcG9uc2Ugd2FzIGZvdW5kXG4gICAgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA0IHx8IChzdGF0dXMgPT09IDAgJiYgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkge1xuICAgICAgICAvLyBpZiB0ZXh0LCBqdXN0IHJldHVybiBpdFxuICAgICAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGpzb24sIHBhcnNlIGludG8ganNvbiBvYmplY3RcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0pzb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGxvYWRlZCBqc29uOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHhtbCwgcGFyc2UgaW50byBhbiB4bWwgZG9jdW1lbnQgb3IgZGl2IGVsZW1lbnRcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LkRPTVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhoci5yZXNwb25zZVRleHQsICd0ZXh0L3htbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZGl2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzWG1sID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIHhtbDonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlciB0eXBlcyBqdXN0IHJldHVybiB0aGUgcmVzcG9uc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2UgfHwgeGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignWycgKyB4aHIuc3RhdHVzICsgJ10nICsgeGhyLnN0YXR1c1RleHQgKyAnOicgKyB4aHIucmVzcG9uc2VVUkwpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbmZ1bmN0aW9uIHJlcVR5cGUoeGhyKSB7XG4gICAgcmV0dXJuIHhoci50b1N0cmluZygpLnJlcGxhY2UoJ29iamVjdCAnLCAnJyk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYGNyb3NzT3JpZ2luYCBwcm9wZXJ0eSBmb3IgdGhpcyByZXNvdXJjZSBiYXNlZCBvbiBpZiB0aGUgdXJsXG4gKiBmb3IgdGhpcyByZXNvdXJjZSBpcyBjcm9zcy1vcmlnaW4uIElmIGNyb3NzT3JpZ2luIHdhcyBtYW51YWxseSBzZXQsIHRoaXNcbiAqIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIHRvIHRlc3QuXG4gKiBAcGFyYW0gW2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbl0ge29iamVjdH0gVGhlIGxvY2F0aW9uIG9iamVjdCB0byB0ZXN0IGFnYWluc3QuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjcm9zc09yaWdpbiB2YWx1ZSB0byB1c2UgKG9yIGVtcHR5IHN0cmluZyBmb3Igbm9uZSkuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbiAodXJsLCBsb2MpIHtcbiAgICAvLyBkYXRhOiBhbmQgamF2YXNjcmlwdDogdXJscyBhcmUgY29uc2lkZXJlZCBzYW1lLW9yaWdpblxuICAgIGlmICh1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBpcyB3aW5kb3cubG9jYXRpb25cbiAgICBsb2MgPSBsb2MgfHwgd2luZG93LmxvY2F0aW9uO1xuXG4gICAgaWYgKCF0ZW1wQW5jaG9yKSB7XG4gICAgICAgIHRlbXBBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgfVxuXG4gICAgLy8gbGV0IHRoZSBicm93c2VyIGRldGVybWluZSB0aGUgZnVsbCBocmVmIGZvciB0aGUgdXJsIG9mIHRoaXMgcmVzb3VyY2UgYW5kIHRoZW5cbiAgICAvLyBwYXJzZSB3aXRoIHRoZSBub2RlIHVybCBsaWIsIHdlIGNhbid0IHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgICAvLyBiZWNhdXNlIHRoZXkgZG9uJ3Qgd29yayBpbiBJRTkgOihcbiAgICB0ZW1wQW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgdXJsID0gX3VybC5wYXJzZSh0ZW1wQW5jaG9yLmhyZWYpO1xuXG4gICAgdmFyIHNhbWVQb3J0ID0gKCF1cmwucG9ydCAmJiBsb2MucG9ydCA9PT0gJycpIHx8ICh1cmwucG9ydCA9PT0gbG9jLnBvcnQpO1xuXG4gICAgLy8gaWYgY3Jvc3Mgb3JpZ2luXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gbG9jLmhvc3RuYW1lIHx8ICFzYW1lUG9ydCB8fCB1cmwucHJvdG9jb2wgIT09IGxvYy5wcm90b2NvbCkge1xuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZXNwb25zZVR5cGUgb2YgYW4gWEhSIHJlcXVlc3QgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGVcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSByZXNwb25zZVR5cGUgdG8gdXNlLlxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZVhoclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlc291cmNlLl94aHJUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVMb2FkVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX2xvYWRUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXMudXJsLFxuICAgICAgICBleHQ7XG5cbiAgICBpZiAodGhpcy5pc0RhdGFVcmwpIHtcbiAgICAgICAgdmFyIHNsYXNoSW5kZXggPSB1cmwuaW5kZXhPZignLycpO1xuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHNsYXNoSW5kZXggKyAxLCB1cmwuaW5kZXhPZignOycsIHNsYXNoSW5kZXgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBxdWVyeVN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXh0ID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQ7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG1pbWUgdHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgcmVzcG9uc2VUeXBlIG9mXG4gKiByZXNvdXJjZSBiZWluZyBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZ2V0TWltZUZyb21YaHJUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5JztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0I6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2Jsb2InO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQ6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCc7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQ6XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVDpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG5cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsb2FkaW5nIGEgcmVzb3VyY2UgY2FuIHVzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBMT0FEX1RZUEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuWEhSIC0gVXNlcyBYTUxIdHRwUmVxdWVzdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuSU1BR0UgLSBVc2VzIGFuIGBJbWFnZWAgb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5BVURJTyAtIFVzZXMgYW4gYEF1ZGlvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLlZJREVPIC0gVXNlcyBhIGBWaWRlb2Agb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICovXG5SZXNvdXJjZS5MT0FEX1RZUEUgPSB7XG4gICAgWEhSOiAgICAxLFxuICAgIElNQUdFOiAgMixcbiAgICBBVURJTzogIDMsXG4gICAgVklERU86ICA0XG59O1xuXG4vKipcbiAqIFRoZSBYSFIgcmVhZHkgc3RhdGVzLCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gWEhSX1JFQURZX1NUQVRFXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLlVOU0VOVCAtIG9wZW4oKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5PUEVORUQgLSBzZW5kKCloYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuSEVBREVSU19SRUNFSVZFRCAtIHNlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuTE9BRElORyAtIERvd25sb2FkaW5nOyByZXNwb25zZVRleHQgaG9sZHMgcGFydGlhbCBkYXRhLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5ET05FIC0gVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFID0ge1xuICAgIFVOU0VOVDogMCxcbiAgICBPUEVORUQ6IDEsXG4gICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICBMT0FESU5HOiAzLFxuICAgIERPTkU6IDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVTUE9OU0VfVFlQRVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQgLSBkZWZhdWx0cyB0byB0ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSIC0gQXJyYXlCdWZmZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CTE9CIC0gQmxvYlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UIC0gRG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5KU09OIC0gT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCAtIFN0cmluZ1xuICovXG5SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRSA9IHtcbiAgICBERUZBVUxUOiAgICAndGV4dCcsXG4gICAgQlVGRkVSOiAgICAgJ2FycmF5YnVmZmVyJyxcbiAgICBCTE9COiAgICAgICAnYmxvYicsXG4gICAgRE9DVU1FTlQ6ICAgJ2RvY3VtZW50JyxcbiAgICBKU09OOiAgICAgICAnanNvbicsXG4gICAgVEVYVDogICAgICAgJ3RleHQnXG59O1xuXG5SZXNvdXJjZS5fbG9hZFR5cGVNYXAgPSB7XG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnYm1wJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGdhJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0Vcbn07XG5cblJlc291cmNlLl94aHJUeXBlTWFwID0ge1xuICAgIC8vIHhtbFxuICAgICd4aHRtbCc6ICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG1sJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG0nOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd4bWwnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0bXgnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0c3gnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdzdmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuXG4gICAgLy8gaW1hZ2VzXG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAncG5nJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBlZyc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnd2VicCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG5cbiAgICAvLyBqc29uXG4gICAgJ2pzb24nOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTixcblxuICAgIC8vIHRleHRcbiAgICAndGV4dCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhULFxuICAgICd0eHQnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFRcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSBsb2FkVHlwZSB7UmVzb3VyY2UuTE9BRF9UWVBFfSBUaGUgbG9hZCB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uTG9hZFR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgbG9hZFR5cGUpIHtcbiAgICBzZXRFeHRNYXAoUmVzb3VyY2UuX2xvYWRUeXBlTWFwLCBleHRuYW1lLCBsb2FkVHlwZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGxvYWQgdHlwZSB0byBiZSB1c2VkIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZXh0bmFtZSB7c3RyaW5nfSBUaGUgZXh0ZW5zaW9uIHRvIHNldCB0aGUgdHlwZSBmb3IsIGUuZy4gXCJwbmdcIiBvciBcImZudFwiXG4gKiBAcGFyYW0geGhyVHlwZSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSB4aHIgdHlwZSB0byBzZXQgaXQgdG8uXG4gKi9cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgeGhyVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5feGhyVHlwZU1hcCwgZXh0bmFtZSwgeGhyVHlwZSk7XG59O1xuXG5mdW5jdGlvbiBzZXRFeHRNYXAobWFwLCBleHRuYW1lLCB2YWwpIHtcbiAgICBpZiAoZXh0bmFtZSAmJiBleHRuYW1lLmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICBleHRuYW1lID0gZXh0bmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRuYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYXBbZXh0bmFtZV0gPSB2YWw7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIHByaXZhdGUgcHJvcGVydHlcbiAgICBfa2V5U3RyOiBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIsXG5cbiAgICBlbmNvZGVCaW5hcnk6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICAgICAgdmFyIGJ5dGVidWZmZXI7XG4gICAgICAgIHZhciBlbmNvZGVkQ2hhckluZGV4ZXMgPSBuZXcgQXJyYXkoNCk7XG4gICAgICAgIHZhciBpbnggPSAwO1xuICAgICAgICB2YXIgam54ID0gMDtcbiAgICAgICAgdmFyIHBhZGRpbmdCeXRlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmlsbCBieXRlIGJ1ZmZlciBhcnJheVxuICAgICAgICAgICAgYnl0ZWJ1ZmZlciA9IG5ldyBBcnJheSgzKTtcbiAgICAgICAgICAgIGZvciAoam54ID0gMDsgam54IDwgYnl0ZWJ1ZmZlci5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhd2F5IGhpZ2gtb3JkZXIgYnl0ZSwgYXMgZG9jdW1lbnRlZCBhdDpcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1MSHR0cFJlcXVlc3QjSGFuZGxpbmdfYmluYXJ5X2RhdGFcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gaW5wdXQuY2hhckNvZGVBdChpbngrKykgJiAweGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCBlYWNoIGVuY29kZWQgY2hhcmFjdGVyLCA2IGJpdHMgYXQgYSB0aW1lXG4gICAgICAgICAgICAvLyBpbmRleCAxOiBmaXJzdCA2IGJpdHNcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1swXSA9IGJ5dGVidWZmZXJbMF0gPj4gMjtcbiAgICAgICAgICAgIC8vIGluZGV4IDI6IHNlY29uZCA2IGJpdHMgKDIgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMSArIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAyKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzFdID0gKChieXRlYnVmZmVyWzBdICYgMHgzKSA8PCA0KSB8IChieXRlYnVmZmVyWzFdID4+IDQpO1xuICAgICAgICAgICAgLy8gaW5kZXggMzogdGhpcmQgNiBiaXRzICg0IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBpbnB1dCBieXRlIDIgKyAyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1syXSA9ICgoYnl0ZWJ1ZmZlclsxXSAmIDB4MGYpIDw8IDIpIHwgKGJ5dGVidWZmZXJbMl0gPj4gNik7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiBmb3J0aCA2IGJpdHMgKDYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IGJ5dGVidWZmZXJbMl0gJiAweDNmO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBwYWRkaW5nIGhhcHBlbmVkLCBhbmQgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBwYWRkaW5nQnl0ZXMgPSBpbnggLSAoaW5wdXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhZGRpbmdCeXRlcykge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxhc3QgMiBjaGFyYWN0ZXJzIHRvIHBhZGRpbmcgY2hhclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbM10gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCBjaGFyYWN0ZXIgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBObyBwYWRkaW5nIC0gcHJvY2VlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb3cgd2Ugd2lsbCBncmFiIGVhY2ggYXBwcm9wcmlhdGUgY2hhcmFjdGVyIG91dCBvZiBvdXIga2V5c3RyaW5nXG4gICAgICAgICAgICAvLyBiYXNlZCBvbiBvdXIgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCBpdCB0byB0aGUgb3V0cHV0IHN0cmluZ1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBlbmNvZGVkQ2hhckluZGV4ZXMubGVuZ3RoOyBqbngrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSB0aGlzLl9rZXlTdHIuY2hhckF0KGVuY29kZWRDaGFySW5kZXhlc1tqbnhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vTG9hZGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJlc291cmNlID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5taWRkbGV3YXJlID0ge1xuICAgIGNhY2hpbmc6IHtcbiAgICAgICAgbWVtb3J5OiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL2NhY2hpbmcvbWVtb3J5JylcbiAgICB9LFxuICAgIHBhcnNpbmc6IHtcbiAgICAgICAgYmxvYjogcmVxdWlyZSgnLi9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2InKVxuICAgIH1cbn07XG4iLCIvLyBhIHNpbXBsZSBpbi1tZW1vcnkgY2FjaGUgZm9yIHJlc291cmNlc1xudmFyIGNhY2hlID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgLy8gaWYgY2FjaGVkLCB0aGVuIHNldCBkYXRhIGFuZCBjb21wbGV0ZSB0aGUgcmVzb3VyY2VcbiAgICAgICAgaWYgKGNhY2hlW3Jlc291cmNlLnVybF0pIHtcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBjYWNoZVtyZXNvdXJjZS51cmxdO1xuICAgICAgICAgICAgcmVzb3VyY2UuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBub3QgY2FjaGVkLCB3YWl0IGZvciBjb21wbGV0ZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlLm9uY2UoJ2NvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgY2FjaGVbdGhpcy51cmxdID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJy4uLy4uL1Jlc291cmNlJyksXG4gICAgYjY0ID0gcmVxdWlyZSgnLi4vLi4vYjY0Jyk7XG5cbndpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cbi8vIGEgbWlkZGxld2FyZSBmb3IgdHJhbnNmb3JtaW5nIFhIUiBsb2FkZWQgQmxvYnMgaW50byBtb3JlIHVzZWZ1bCBvYmplY3RzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgYW4gWEhSIGxvYWQgb2YgYSBibG9iXG4gICAgICAgIGlmIChyZXNvdXJjZS54aHIgJiYgcmVzb3VyY2UueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQikge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYmxvYiBzdXBwb3J0IHdlIHByb2JhYmx5IGdvdCBhIGJpbmFyeSBzdHJpbmcgYmFja1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuQmxvYiB8fCB0eXBlb2YgcmVzb3VyY2UuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlc291cmNlLnhoci5nZXRSZXNwb25zZUhlYWRlcignY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGltYWdlLCBjb252ZXJ0IHRoZSBiaW5hcnkgc3RyaW5nIGludG8gYSBkYXRhIHVybFxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIHR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gJ2RhdGE6JyArIHR5cGUgKyAnO2Jhc2U2NCwnICsgYjY0LmVuY29kZUJpbmFyeShyZXNvdXJjZS54aHIucmVzcG9uc2VUZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5pc0ltYWdlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IHVudGlsIHRoZSBpbWFnZSBsb2FkcyBhbmQgdGhlbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnQgdHlwZSBzYXlzIHRoaXMgaXMgYW4gaW1hZ2UsIHRoZW4gd2Ugc2hvdWxkIHRyYW5zZm9ybSB0aGUgYmxvYiBpbnRvIGFuIEltYWdlIG9iamVjdFxuICAgICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UuZGF0YS50eXBlLmluZGV4T2YoJ2ltYWdlJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXNvdXJjZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmJsb2IgPSByZXNvdXJjZS5kYXRhO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLnNyYyA9IHNyYztcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCB0aGUgbm8gbG9uZ2VyIHVzZWQgYmxvYiBhZnRlciB0aGUgaW1hZ2UgbG9hZHNcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChzcmMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwicGl4aS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIzLjAuMTAtZGV2XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJQaXhpLmpzIGlzIGEgZmFzdCBsaWdodHdlaWdodCAyRCBsaWJyYXJ5IHRoYXQgd29ya3MgYWNyb3NzIGFsbCBkZXZpY2VzLlwiLFxuICBcImF1dGhvclwiOiBcIk1hdCBHcm92ZXNcIixcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIFwiQ2hhZCBFbmdsZXIgPGNoYWRAcGFudGhlcmRldi5jb20+XCIsXG4gICAgXCJSaWNoYXJkIERhdmV5IDxyZGF2ZXlAZ21haWwuY29tPlwiXG4gIF0sXG4gIFwibWFpblwiOiBcIi4vc3JjL2luZGV4LmpzXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ29vZGJveWRpZ2l0YWwuY29tL1wiLFxuICBcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzXCIsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJzdGFydFwiOiBcImd1bHAgJiYgZ3VscCB3YXRjaFwiLFxuICAgIFwidGVzdFwiOiBcImd1bHAgJiYgdGVzdGVtIGNpXCIsXG4gICAgXCJidWlsZFwiOiBcImd1bHBcIixcbiAgICBcImRvY3NcIjogXCJqc2RvYyAtYyAuL2d1bHAvdXRpbC9qc2RvYy5jb25mLmpzb24gLVIgUkVBRE1FLm1kXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW4vXCIsXG4gICAgXCJzcmMvXCIsXG4gICAgXCJDT05UUklCVVRJTkcubWRcIixcbiAgICBcIkxJQ0VOU0VcIixcbiAgICBcInBhY2thZ2UuanNvblwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYXN5bmNcIjogXCJeMS41LjBcIixcbiAgICBcImJyZnNcIjogXCJeMS40LjFcIixcbiAgICBcImVhcmN1dFwiOiBcIl4yLjAuN1wiLFxuICAgIFwiZXZlbnRlbWl0dGVyM1wiOiBcIl4xLjEuMVwiLFxuICAgIFwiZ2wtbWF0cml4XCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS90b2ppL2dsLW1hdHJpeC5naXRcIixcbiAgICBcIm9iamVjdC1hc3NpZ25cIjogXCJeNC4wLjFcIixcbiAgICBcInBpeGktZ2wtY29yZVwiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vR29vZEJveURpZ2l0YWwvcGl4aS1nbC1jb3JlLmdpdFwiLFxuICAgIFwicmVzb3VyY2UtbG9hZGVyXCI6IFwiXjEuNi40XCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYnJvd3NlcmlmeVwiOiBcIl4xMS4xLjBcIixcbiAgICBcImNoYWlcIjogXCJeMy4yLjBcIixcbiAgICBcImRlbFwiOiBcIl4yLjAuMlwiLFxuICAgIFwiZ3VscFwiOiBcIl4zLjkuMFwiLFxuICAgIFwiZ3VscC1jYWNoZWRcIjogXCJeMS4xLjBcIixcbiAgICBcImd1bHAtY29uY2F0XCI6IFwiXjIuNi4wXCIsXG4gICAgXCJndWxwLWRlYnVnXCI6IFwiXjIuMS4wXCIsXG4gICAgXCJndWxwLWhlYWRlclwiOiBcIl4xLjcuMVwiLFxuICAgIFwiZ3VscC1qc2hpbnRcIjogXCJeMS4xMS4yXCIsXG4gICAgXCJndWxwLW1pcnJvclwiOiBcIl4wLjQuMFwiLFxuICAgIFwiZ3VscC1wbHVtYmVyXCI6IFwiXjEuMC4xXCIsXG4gICAgXCJndWxwLXJlbmFtZVwiOiBcIl4xLjIuMlwiLFxuICAgIFwiZ3VscC1zb3VyY2VtYXBzXCI6IFwiXjEuNS4yXCIsXG4gICAgXCJndWxwLXVnbGlmeVwiOiBcIl4xLjQuMVwiLFxuICAgIFwiZ3VscC11dGlsXCI6IFwiXjMuMC42XCIsXG4gICAgXCJqYWd1YXJqcy1qc2RvY1wiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vZGF2aWRzaGltanMvamFndWFyanMtanNkb2MuZ2l0XCIsXG4gICAgXCJqc2RvY1wiOiBcIl4zLjMuMlwiLFxuICAgIFwianNoaW50LXN1bW1hcnlcIjogXCJeMC40LjBcIixcbiAgICBcIm1pbmltaXN0XCI6IFwiXjEuMi4wXCIsXG4gICAgXCJtb2NoYVwiOiBcIl4yLjMuMlwiLFxuICAgIFwicmVxdWlyZS1kaXJcIjogXCJeMC4zLjBcIixcbiAgICBcInJ1bi1zZXF1ZW5jZVwiOiBcIl4xLjEuMlwiLFxuICAgIFwidGVzdGVtXCI6IFwiXjAuOS40XCIsXG4gICAgXCJ2aW55bC1idWZmZXJcIjogXCJeMS4wLjBcIixcbiAgICBcInZpbnlsLXNvdXJjZS1zdHJlYW1cIjogXCJeMS4xLjBcIixcbiAgICBcIndhdGNoaWZ5XCI6IFwiXjMuNC4wXCJcbiAgfSxcbiAgXCJicm93c2VyaWZ5XCI6IHtcbiAgICBcInRyYW5zZm9ybVwiOiBbXG4gICAgICBcImJyZnNcIlxuICAgIF1cbiAgfVxufVxuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8vIGFkZCBzb21lIGV4dHJhIHZhcmlhYmxlcyB0byB0aGUgY29udGFpbmVyLi5cbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKVxuKTtcblxuXG4vKipcbiAqIFRoZSBBY2Nlc3NpYmlsaXR5IG1hbmFnZXIgcmVhY3JlYXRlcyB0aGUgYWJpbGl0eSB0byB0YWIgYW5kIGFuZCBoYXZlIGNvbnRlbnQgcmVhZCBieSBzY3JlZW4gcmVhZGVycy4gVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCBhcyBpdCBjYW4gcG9zc2libHkgaGVscCBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMgYWNjZXNzIHBpeGkgY29udGVudC5cbiAqIE11Y2ggbGlrZSBpbnRlcmFjdGlvbiBhbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgbWFkZSBhY2Nlc3NpYmxlLiBUaGlzIG1hbmFnZXIgd2lsbCBtYXAgdGhlIGV2ZW50cyBhcyBpZiB0aGUgbW91c2Ugd2FzIGJlaW5nIHVzZWQsIG1pbmltaXppbmcgdGhlIGVmZmVyb3QgcmVxdWlyZWQgdG8gaW1wbGVtZW50LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyXG4gKi9cbmZ1bmN0aW9uIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKHJlbmRlcmVyKVxue1xuXHQvLyBmaXJzdCB3ZSBjcmVhdGUgYSBkaXYgdGhhdCB3aWxsIHNpdCBvdmVyIHRoZSBwaXhpIGVsZW1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGRpdiBvdmVybGF5cyB3aWxsIGdvLlxuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBcbiAgICBkaXYuc3R5bGUud2lkdGggPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgZGl2LnN0eWxlLnRvcCA9IDA7XG4gICAgZGl2LnN0eWxlLmxlZnQgPSAwO1xuICAgLy9cbiAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcbiAgIFx0XG4gICBcdC8qKlxuICAgXHQgKiBUaGlzIGlzIHRoZSBkb20gZWxlbWVudCB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuICAgXHR0aGlzLmRpdiA9IGRpdjtcblxuICAgXHQvKipcbiAgIFx0ICogQSBzaW1wbGUgcG9vbCBmb3Igc3RvcmluZyBkaXZzLlxuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0FycmF5fVxuICAgXHQgKiBAcHJpdmF0ZVxuICAgXHQgKi9cbiBcdHRoaXMucG9vbCA9IFtdO1xuXG4gXHQvKipcbiBcdCAqIFRoaXMgaXMgYSB0aWNrIHVzZWQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIG5vIGxvbmdlciBiZWluZyByZW5kZXJlZC5cbiBcdCAqIFxuIFx0ICogQHR5cGUge051bWJlcn1cbiBcdCAqIEBwcml2YXRlXG4gXHQgKi9cbiAgIFx0dGhpcy5yZW5kZXJJZCA9IDA7XG5cbiAgIFx0LyoqXG4gICBcdCAqIFNldHRpbmcgdGhpcyB0byB0cnVlIHdpbGwgdmlzdWFsbHkgc2hvdyB0aGUgZGl2c1xuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0Jvb2xlYW59XG4gICBcdCAqL1xuICAgXHR0aGlzLmRlYnVnID0gZmFsc2U7XG5cbiAgXHQvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBhY2Nlc3NpYmlsaXR5IG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgIFx0dGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICBcdC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjdXJyZW50bHkgYWN0aXZlIGFjY2Vzc2libGUgaXRlbXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgXHR0aGlzLmNoaWxkcmVuID0gW107XG4gICBcdFxuICAgXHQvKipcbiAgICAgKiBwcmUgYmluZCB0aGUgZnVuY3Rpb25zLi5cbiAgICAgKi9cbiAgIFx0dGhpcy5fb25LZXlEb3duID0gdGhpcy5fb25LZXlEb3duLmJpbmQodGhpcyk7XG4gICBcdHRoaXMuX29uTW91c2VNb3ZlID0gdGhpcy5fb25Nb3VzZU1vdmUuYmluZCh0aGlzKTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHN0b3JlcyB0aGUgc3RhdGUgb2YgdGhlIG1hbmFnZXIuIElmIHRoZXJlIGFyZSBubyBhY2Nlc3NpYmxlIG9iamVjdHMgb3IgdGhlIG1vdXNlIGlzIG1vdmluZyB0aGUgd2lsbCBiZSBmYWxzZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcblxuXG4gICBcdC8vIGxldCBsaXN0ZW4gZm9yIHRhYi4uIG9uY2UgcHJlc3NlZCB3ZSBjYW4gZmlyZSB1cCBhbmQgc2hvdyB0aGUgYWNjZXNzaWJpbGl0eSBsYXllclxuICAgXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xufVxuXG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBBY2Nlc3NpYmlsaXR5TWFuYWdlcjtcblxuLyoqXG4gKiBBY3RpdmF0aW5nIHdpbGwgY2F1c2UgdGhlIEFjY2Vzc2liaWxpdHkgbGF5ZXIgdG8gYmUgc2hvd24uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIHByZXNlcyB0aGUgdGFiIGtleVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IHRydWU7XG5cblx0d2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCB0cnVlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9uKCdwb3N0cmVuZGVyJywgdGhpcy51cGRhdGUsIHRoaXMpO1xuXG5cdHRoaXMucmVuZGVyZXIudmlldy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuZGl2KTtcdFxufTtcblxuLyoqXG4gKiBEZWFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBoaWRkZW4uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIG1vdmVzIHRoZSBtb3VzZVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmRlYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKCF0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG5cblx0dGhpcy5yZW5kZXJlci5vZmYoJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSk7XG5cblx0dGhpcy5kaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmRpdik7XG5cbn07XG5cbi8qKlxuICogVGhpcyByZWN1cnNpdmUgZnVuY3Rpb24gd2lsbCBydW4gdGhyb3VnaHQgaGUgc2NlbmUgZ3JhcGggYW5kIGFkZCBhbnkgbmV3IGFjY2Vzc2libGUgb2JqZWN0cyB0byB0aGUgRE9NIGxheWVyLlxuICogQHBhcmFtIGVsZW1lbnQge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIERpc3BsYXlPYmplY3QgdG8gY2hlY2suXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlQWNjZXNzaWJsZU9iamVjdHMgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuXHRpZighZGlzcGxheU9iamVjdC52aXNpYmxlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYoZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlICYmIGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG5cdHtcblx0XHRpZighZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZUFjdGl2ZSlcblx0XHR7XG5cdFx0XHR0aGlzLmFkZENoaWxkKGRpc3BsYXlPYmplY3QpO1xuXHRcdH1cblx0ICAgXHRcblx0ICAgXHRkaXNwbGF5T2JqZWN0LnJlbmRlcklkID0gdGhpcy5yZW5kZXJJZDtcblx0fVxuXG5cdHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG5cblx0Zm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XG5cdFx0dGhpcy51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyhjaGlsZHJlbltpXSk7XG5cdH1cbn07XG5cblxuLyoqXG4gKiBCZWZvcmUgZWFjaCByZW5kZXIgdGhpcyBmdW5jdGlvbiB3aWxsIGVuc3VyZSB0aGF0IGFsbCBkaXZzIGFyZSBtYXBwZWQgY29ycmVjdGx5IHRvIHRoZWlyIERpc3BsYXlPYmplY3RzXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oKVxue1xuXG5cdC8vIHVwZGF0ZSBjaGlsZHJlbi4uLlxuXHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCk7XG5cblx0dmFyIHJlY3QgPSB0aGlzLnJlbmRlcmVyLnZpZXcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdHZhciBzeCA9IHJlY3Qud2lkdGggIC8gdGhpcy5yZW5kZXJlci53aWR0aDtcblx0dmFyIHN5ID0gcmVjdC5oZWlnaHQgLyB0aGlzLnJlbmRlcmVyLmhlaWdodDtcblxuXHR2YXIgZGl2ID0gdGhpcy5kaXY7XG5cblx0ZGl2LnN0eWxlLmxlZnQgPSByZWN0LmxlZnQgKyAncHgnO1xuXHRkaXYuc3R5bGUudG9wID0gcmVjdC50b3AgKyAncHgnO1xuXHRkaXYuc3R5bGUud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoICsgJ3B4Jztcblx0ZGl2LnN0eWxlLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0ICsgJ3B4JztcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblxuXHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cblx0XHRpZihjaGlsZC5yZW5kZXJJZCAhPT0gdGhpcy5yZW5kZXJJZClcblx0XHR7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGksIDEpO1xuXHRcdFx0dGhpcy5kaXYucmVtb3ZlQ2hpbGQoIGNoaWxkLl9hY2Nlc3NpYmxlRGl2ICk7XG5cdFx0XHR0aGlzLnBvb2wucHVzaChjaGlsZC5fYWNjZXNzaWJsZURpdik7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZURpdiA9IG51bGw7XG5cblx0XHRcdGktLTtcblxuXHRcdFx0aWYodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0Ly8gbWFwIGRpdiB0byBkaXNwbGF5Li5cblx0XHRcdGRpdiA9IGNoaWxkLl9hY2Nlc3NpYmxlRGl2O1xuXHRcdFx0dmFyIGhpdEFyZWEgPSBjaGlsZC5oaXRBcmVhO1xuXHRcdFx0dmFyIHd0ID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cblx0XHRcdGlmKGNoaWxkLmhpdEFyZWEpXG5cdFx0XHR7XG5cdFx0XHRcdGRpdi5zdHlsZS5sZWZ0ID0gKCh3dC50eCArIChoaXRBcmVhLnggKiB3dC5hKSkgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gICgod3QudHkgKyAoaGl0QXJlYS55ICogd3QuZCkpICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiB3dC5hICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLmhlaWdodCA9IChoaXRBcmVhLmhlaWdodCAqIHd0LmQgKiBzeSkgKyAncHgnO1xuXHRcdFx0XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdGhpdEFyZWEgPSBjaGlsZC5nZXRCb3VuZHMoKTtcblxuXHRcdFx0XHR0aGlzLmNhcEhpdEFyZWEoaGl0QXJlYSk7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoaGl0QXJlYS54ICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLnRvcCA9ICAoaGl0QXJlYS55ICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogc3kpICsgJ3B4Jztcblx0XHRcdH1cdFx0XG5cdFx0fVxuXHR9XG5cblx0Ly8gaW5jcmVtZW50IHRoZSByZW5kZXIgaWQuLlxuXHR0aGlzLnJlbmRlcklkKys7XG59O1xuXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuY2FwSGl0QXJlYSA9IGZ1bmN0aW9uIChoaXRBcmVhKVxue1xuICAgIGlmIChoaXRBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS53aWR0aCArPSBoaXRBcmVhLng7XG4gICAgICAgIGhpdEFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGhpdEFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCArPSBoaXRBcmVhLnk7XG4gICAgICAgIGhpdEFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBoaXRBcmVhLnggKyBoaXRBcmVhLndpZHRoID4gdGhpcy5yZW5kZXJlci53aWR0aCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoID0gdGhpcy5yZW5kZXJlci53aWR0aCAtIGhpdEFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueSArIGhpdEFyZWEuaGVpZ2h0ID4gdGhpcy5yZW5kZXJlci5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmhlaWdodCAtIGhpdEFyZWEueTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogQWRkcyBhIERpc3BsYXlPYmplY3QgdG8gdGhlIGFjY2Vzc2liaWxpdHkgbWFuYWdlclxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24oZGlzcGxheU9iamVjdClcbntcbi8vXHR0aGlzLmFjdGl2YXRlKCk7XG5cdFxuXHR2YXIgZGl2ID0gdGhpcy5wb29sLnBvcCgpO1xuXG5cdGlmKCFkaXYpXG5cdHtcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgXG5cblx0ICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG5cdCAgICBkaXYuc3R5bGUuaGVpZ2h0ID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmRlYnVnID8gJ3JnYmEoMjU1LDAsMCwwLjUpJyA6ICd0cmFuc3BhcmVudCc7XG5cdCAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXHQgICAgZGl2LnN0eWxlLnpJbmRleCA9IDI7XG5cdCAgICBkaXYuc3R5bGUuYm9yZGVyU3R5bGUgPSAnbm9uZSc7XG5cblx0ICAgIFxuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGljay5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKSk7XG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCB0aGlzLl9vbkZvY3VzT3V0LmJpbmQodGhpcykpO1xuXHR9XG5cdCAgIFx0XG5cblxuXG5cdGRpdi50aXRsZSA9IGRpc3BsYXlPYmplY3QuYWNjZXNzaWJsZVRpdGxlIHx8ICdkaXNwbGF5T2JqZWN0ICcgKyB0aGlzLnRhYkluZGV4O1xuXG5cdC8vXG5cdFxuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlID0gdHJ1ZTtcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiA9IGRpdjtcblx0ZGl2LmRpc3BsYXlPYmplY3QgPSBkaXNwbGF5T2JqZWN0O1xuXG5cblx0dGhpcy5jaGlsZHJlbi5wdXNoKGRpc3BsYXlPYmplY3QpO1xuXHR0aGlzLmRpdi5hcHBlbmRDaGlsZCggZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiApO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2LnRhYkluZGV4ID0gZGlzcGxheU9iamVjdC50YWJJbmRleDtcbn07XG5cblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgYnV0dG9uIHByZXNzIHRvIHBpeGkncyBJbnRlcmFjdGlvbk1hbmFnZXIgKGNsaWNrKVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkNsaWNrID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ2NsaWNrJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW92ZXIpXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uRm9jdXMgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW91dClcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1c091dCA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIGtleSBpcyBwcmVzc2VkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbktleURvd24gPSBmdW5jdGlvbihlKVxue1xuXHRpZihlLmtleUNvZGUgIT09IDkpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmFjdGl2YXRlKCk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uTW91c2VNb3ZlID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmRlYWN0aXZhdGUoKTtcbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKlxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIFxue1xuXHR0aGlzLmRpdiA9IG51bGw7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHR7XG5cdFx0dGhpcy5jaGlsZHJlbltpXS5kaXYgPSBudWxsO1xuXHR9XG5cblx0XG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duKTtcblx0XHRcblx0dGhpcy5wb29sID0gbnVsbDtcblx0dGhpcy5jaGlsZHJlbiA9IG51bGw7XG5cdHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdhY2Nlc3NpYmlsaXR5JywgQWNjZXNzaWJpbGl0eU1hbmFnZXIpO1xuXG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGFjY2Vzc2libGUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlNYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5hY2Nlc3NpYmlsaXR5LmFjY2Vzc2libGVUYXJnZXRcbiAqICAgICAgKTtcbiAqL1xudmFyIGFjY2Vzc2libGVUYXJnZXQgPSB7XG4gICAgXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlOmZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlVGl0bGU6bnVsbCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgdGFiSW5kZXg6MCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVBY3RpdmU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIF9hY2Nlc3NpYmxlRGl2OmZhbHNlXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYWNjZXNzaWJsZVRhcmdldDtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGFjY2Vzc2liaWxpdHkgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGFjY2Vzc2libGVUYXJnZXQ6ICAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKSxcbiAgICBBY2Nlc3NpYmlsaXR5TWFuYWdlcjogcmVxdWlyZSgnLi9BY2Nlc3NpYmlsaXR5TWFuYWdlcicpXG59O1xuIiwiLyoqXG4gKiBDb25zdGFudCB2YWx1ZXMgdXNlZCBpbiBwaXhpXG4gKlxuICogQGxlbmRzIFBJWElcbiAqL1xudmFyIENPTlNUID0ge1xuICAgIC8qKlxuICAgICAqIFN0cmluZyBvZiB0aGUgY3VycmVudCBQSVhJIHZlcnNpb25cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gVkVSU0lPTlxuICAgICAqL1xuICAgIFZFUlNJT046IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb24sXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUElfMiAtIFR3byBQaVxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBQSV8yOiBNYXRoLlBJICogMixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSQURfVE9fREVHIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgcmFkaWFucyB0byBkZWdyZWVzXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFJBRF9UT19ERUc6IDE4MCAvIE1hdGguUEksXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge051bWJlcn0gREVHX1RPX1JBRCAtIENvbnN0YW50IGNvbnZlcnNpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIGRlZ3JlZXMgdG8gcmFkaWFuc1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBERUdfVE9fUkFEOiBNYXRoLlBJIC8gMTgwLFxuXG4gICAgLyoqXG4gICAgICogVGFyZ2V0IGZyYW1lcyBwZXIgbWlsbGlzZWNvbmQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFRBUkdFVF9GUE1TPTAuMDZcbiAgICAgKi9cbiAgICBUQVJHRVRfRlBNUzogMC4wNixcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IHRvIGlkZW50aWZ5IHRoZSBSZW5kZXJlciBUeXBlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBSRU5ERVJFUl9UWVBFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuVU5LTk9XTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLldFQkdMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuQ0FOVkFTXG4gICAgICovXG4gICAgUkVOREVSRVJfVFlQRToge1xuICAgICAgICBVTktOT1dOOiAgICAwLFxuICAgICAgICBXRUJHTDogICAgICAxLFxuICAgICAgICBDQU5WQVM6ICAgICAyXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFZhcmlvdXMgYmxlbmQgbW9kZXMgc3VwcG9ydGVkIGJ5IFBJWEkuIElNUE9SVEFOVCAtIFRoZSBXZWJHTCByZW5kZXJlciBvbmx5IHN1cHBvcnRzXG4gICAgICogdGhlIE5PUk1BTCwgQURELCBNVUxUSVBMWSBhbmQgU0NSRUVOIGJsZW5kIG1vZGVzLiBBbnl0aGluZyBlbHNlIHdpbGwgc2lsZW50bHkgYWN0IGxpa2VcbiAgICAgKiBOT1JNQUwuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IEJMRU5EX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5BRERcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTVVMVElQTFlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0NSRUVOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk9WRVJMQVlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuREFSS0VOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkxJR0hURU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfQlVSTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IQVJEX0xJR0hUXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNPRlRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuRElGRkVSRU5DRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5FWENMVVNJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuSFVFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNBVFVSQVRJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTFVNSU5PU0lUWVxuICAgICAqL1xuICAgIEJMRU5EX01PREVTOiB7XG4gICAgICAgIE5PUk1BTDogICAgICAgICAwLFxuICAgICAgICBBREQ6ICAgICAgICAgICAgMSxcbiAgICAgICAgTVVMVElQTFk6ICAgICAgIDIsXG4gICAgICAgIFNDUkVFTjogICAgICAgICAzLFxuICAgICAgICBPVkVSTEFZOiAgICAgICAgNCxcbiAgICAgICAgREFSS0VOOiAgICAgICAgIDUsXG4gICAgICAgIExJR0hURU46ICAgICAgICA2LFxuICAgICAgICBDT0xPUl9ET0RHRTogICAgNyxcbiAgICAgICAgQ09MT1JfQlVSTjogICAgIDgsXG4gICAgICAgIEhBUkRfTElHSFQ6ICAgICA5LFxuICAgICAgICBTT0ZUX0xJR0hUOiAgICAgMTAsXG4gICAgICAgIERJRkZFUkVOQ0U6ICAgICAxMSxcbiAgICAgICAgRVhDTFVTSU9OOiAgICAgIDEyLFxuICAgICAgICBIVUU6ICAgICAgICAgICAgMTMsXG4gICAgICAgIFNBVFVSQVRJT046ICAgICAxNCxcbiAgICAgICAgQ09MT1I6ICAgICAgICAgIDE1LFxuICAgICAgICBMVU1JTk9TSVRZOiAgICAgMTZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyB3ZWJnbCBkcmF3IG1vZGVzLiBUaGVzZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIEdMIGRyYXdNb2RlIHRvIHVzZVxuICAgICAqIHVuZGVyIGNlcnRhaW4gc2l0dWF0aW9ucyBhbmQgcmVuZGVyZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBEUkFXX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuUE9JTlRTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX0xPT1BcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX1NUUklQXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9GQU5cbiAgICAgKi9cbiAgICBEUkFXX01PREVTOiB7XG4gICAgICAgIFBPSU5UUzogICAgICAgICAwLFxuICAgICAgICBMSU5FUzogICAgICAgICAgMSxcbiAgICAgICAgTElORV9MT09QOiAgICAgIDIsXG4gICAgICAgIExJTkVfU1RSSVA6ICAgICAzLFxuICAgICAgICBUUklBTkdMRVM6ICAgICAgNCxcbiAgICAgICAgVFJJQU5HTEVfU1RSSVA6IDUsXG4gICAgICAgIFRSSUFOR0xFX0ZBTjogICA2XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgcGl4aS5cbiAgICAgKlxuICAgICAqIFRoZSBERUZBVUxUIHNjYWxlIG1vZGUgYWZmZWN0cyB0aGUgZGVmYXVsdCBzY2FsaW5nIG1vZGUgb2YgZnV0dXJlIG9wZXJhdGlvbnMuXG4gICAgICogSXQgY2FuIGJlIHJlLWFzc2lnbmVkIHRvIGVpdGhlciBMSU5FQVIgb3IgTkVBUkVTVCwgZGVwZW5kaW5nIHVwb24gc3VpdGFiaWxpdHkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNDQUxFX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkRFRkFVTFQ9TElORUFSXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkxJTkVBUiBTbW9vdGggc2NhbGluZ1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5ORUFSRVNUIFBpeGVsYXRpbmcgc2NhbGluZ1xuICAgICAqL1xuICAgIFNDQUxFX01PREVTOiB7XG4gICAgICAgIERFRkFVTFQ6ICAgIDAsXG4gICAgICAgIExJTkVBUjogICAgIDAsXG4gICAgICAgIE5FQVJFU1Q6ICAgIDFcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHByZWZpeCB0aGF0IGRlbm90ZXMgYSBVUkwgaXMgZm9yIGEgcmV0aW5hIGFzc2V0XG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFJFVElOQV9QUkVGSVhcbiAgICAgKi9cbiAgICAvL2V4YW1wbGU6ICdAMngnLFxuICAgIFJFVElOQV9QUkVGSVg6IC9AKC4rKXgvLFxuXG4gICAgUkVTT0xVVElPTjoxLFxuXG4gICAgRklMVEVSX1JFU09MVVRJT046MSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHJlbmRlciBvcHRpb25zIGlmIG5vbmUgYXJlIHN1cHBsaWVkIHRvIHtAbGluayBQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICogb3Ige0BsaW5rIFBJWEkuQ2FudmFzUmVuZGVyZXJ9LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TXG4gICAgICogQHByb3BlcnR5IHtIVE1MQ2FudmFzRWxlbWVudH0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy52aWV3PW51bGxcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMudHJhbnNwYXJlbnQ9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuYW50aWFsaWFzPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmZvcmNlRlhBQT1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5yZXNvbHV0aW9uPTFcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hdXRvUmVzaXplPWZhbHNlXG4gICAgICovXG4gICAgREVGQVVMVF9SRU5ERVJfT1BUSU9OUzoge1xuICAgICAgICB2aWV3OiBudWxsLFxuICAgICAgICByZXNvbHV0aW9uOiAxLFxuICAgICAgICBhbnRpYWxpYXM6IGZhbHNlLFxuICAgICAgICBmb3JjZUZYQUE6IGZhbHNlLFxuICAgICAgICBhdXRvUmVzaXplOiBmYWxzZSxcbiAgICAgICAgdHJhbnNwYXJlbnQ6IGZhbHNlLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IDB4MDAwMDAwLFxuICAgICAgICBjbGVhckJlZm9yZVJlbmRlcjogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBmYWxzZSxcbiAgICAgICAgcm91bmRQaXhlbHM6IGZhbHNlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50cyB0aGF0IGlkZW50aWZ5IHNoYXBlcywgbWFpbmx5IHRvIHByZXZlbnQgYGluc3RhbmNlb2ZgIGNhbGxzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVNcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlBPTFk9MFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUkVDVD0xXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5DSVJDPTJcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkVMSVA9M1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUlJFQz00XG4gICAgICovXG4gICAgU0hBUEVTOiB7XG4gICAgICAgIFBPTFk6IDAsXG4gICAgICAgIFJFQ1Q6IDEsXG4gICAgICAgIENJUkM6IDIsXG4gICAgICAgIEVMSVA6IDMsXG4gICAgICAgIFJSRUM6IDRcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogbWF5YmUgY2hhbmdlIHRvIFNQUklURS5CQVRDSF9TSVpFOiAyMDAwXG4gICAgLy8gVE9ETzogbWF5YmUgYWRkIFBBUlRJQ0xFLkJBVENIX1NJWkU6IDE1MDAwXG4gICAgU1BSSVRFX0JBVENIX1NJWkU6IDIwMDAgLy9uaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgYW5kIGRlc2t0b3AgbWFjaGluZXNcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ09OU1Q7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgRGlzcGxheU9iamVjdCA9IHJlcXVpcmUoJy4vRGlzcGxheU9iamVjdCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIENvbnRhaW5lciByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBkaXNwbGF5IG9iamVjdHMuXG4gKiBJdCBpcyB0aGUgYmFzZSBjbGFzcyBvZiBhbGwgZGlzcGxheSBvYmplY3RzIHRoYXQgYWN0IGFzIGEgY29udGFpbmVyIGZvciBvdGhlciBvYmplY3RzLlxuICpcbiAqYGBganNcbiAqIHZhciBjb250YWluZXIgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogYGBgXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuRGlzcGxheU9iamVjdFxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ29udGFpbmVyKClcbntcbiAgICBEaXNwbGF5T2JqZWN0LmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3RbXX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5Db250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSk7XG5Db250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb250YWluZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnRhaW5lci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG5cbiAgICAgICAgICAgIGlmICh3aWR0aCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IDE7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmIChoZWlnaHQgIT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyBoZWlnaHQgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogT3ZlcnJpZGFibGUgbWV0aG9kIHRoYXQgY2FuIGJlIHVzZWQgYnkgQ29udGFpbmVyIHN1YmNsYXNzZXMgd2hlbmV2ZXIgdGhlIGNoaWxkcmVuIGFycmF5IGlzIG1vZGlmaWVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5vbkNoaWxkcmVuQ2hhbmdlID0gZnVuY3Rpb24gKCkge307XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIuXG4gKiBcbiAqIFlvdSBjYW4gYWxzbyBhZGQgbXVsdHBsZSBpdGVtcyBsaWtlIHNvOiBteUNvbnRhaW5lci5hZGRDaGlsZCh0aGlua09uZSwgdGhpbmdUd28sIHRoaW5nVGhyZWUpXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gYWRkIHRvIHRoZSBjb250YWluZXJcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxueyBcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IHdlIGNhbiBieXBhc3MgbG9vcGluZyB0aHJvdWdoIHRoZSB0aGVtXG4gICAgaWYoYXJndW1lbnRzTGVuZ3RoID4gMSlcbiAgICB7XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgYXJndW1lbnRzIHByb3BlcnR5IGFuZCBhZGQgYWxsIGNoaWxkcmVuXG4gICAgICAgIC8vIHVzZSBpdCB0aGUgcmlnaHQgd2F5ICgubGVuZ3RoIGFuZCBbaV0pIHNvIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc3RpbGwgYmUgb3B0aW1pc2VkIGJ5IEpTIHJ1bnRpbWVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoIGFyZ3VtZW50c1tpXSApO1xuICAgICAgICB9XG4gICAgfSAgICAgXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIGNoaWxkIGhhcyBhIHBhcmVudCB0aGVuIGxldHMgcmVtb3ZlIGl0IGFzIFBpeGkgb2JqZWN0cyBjYW4gb25seSBleGlzdCBpbiBvbmUgcGxhY2VcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKHRoaXMuY2hpbGRyZW4ubGVuZ3RoLTEpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIgYXQgYSBzcGVjaWZpZWQgaW5kZXguIElmIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0byBhZGRcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gcGxhY2UgdGhlIGNoaWxkIGluXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyBhZGRlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5hZGRDaGlsZEF0ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuXG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNoaWxkICsgJ2FkZENoaWxkQXQ6IFRoZSBpbmRleCAnKyBpbmRleCArJyBzdXBwbGllZCBpcyBvdXQgb2YgYm91bmRzICcgKyB0aGlzLmNoaWxkcmVuLmxlbmd0aCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBTd2FwcyB0aGUgcG9zaXRpb24gb2YgMiBEaXNwbGF5IE9iamVjdHMgd2l0aGluIHRoaXMgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGNoaWxkMiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnN3YXBDaGlsZHJlbiA9IGZ1bmN0aW9uIChjaGlsZCwgY2hpbGQyKVxue1xuICAgIGlmIChjaGlsZCA9PT0gY2hpbGQyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbmRleDEgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuICAgIHZhciBpbmRleDIgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQyKTtcblxuICAgIGlmIChpbmRleDEgPCAwIHx8IGluZGV4MiA8IDApXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N3YXBDaGlsZHJlbjogQm90aCB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdHMgbXVzdCBiZSBjaGlsZHJlbiBvZiB0aGUgY2FsbGVyLicpO1xuICAgIH1cblxuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgxXSA9IGNoaWxkMjtcbiAgICB0aGlzLmNoaWxkcmVuW2luZGV4Ml0gPSBjaGlsZDtcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgxIDwgaW5kZXgyID8gaW5kZXgxIDogaW5kZXgyKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW5kZXggcG9zaXRpb24gb2YgYSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIHRvIGlkZW50aWZ5XG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3QgdG8gaWRlbnRpZnlcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBtdXN0IGJlIGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgcG9zaXRpb24gb2YgYW4gZXhpc3RpbmcgY2hpbGQgaW4gdGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgRGlzcGxheU9iamVjdCBpbnN0YW5jZSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBpbmRleCBudW1iZXJcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgcmVzdWx0aW5nIGluZGV4IG51bWJlciBmb3IgdGhlIGNoaWxkIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc2V0Q2hpbGRJbmRleCA9IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN1cHBsaWVkIGluZGV4IGlzIG91dCBvZiBib3VuZHMnKTtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudEluZGV4ID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkKTtcblxuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGN1cnJlbnRJbmRleCwgMSk7IC8vIHJlbW92ZSBmcm9tIG9sZCBwb3NpdGlvblxuICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7IC8vYWRkIGF0IG5ldyBwb3NpdGlvblxuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNoaWxkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhcbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgYXRcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIGF0IHRoZSBnaXZlbiBpbmRleCwgaWYgYW55LlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkQXQgPSBmdW5jdGlvbiAoaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0Q2hpbGRBdDogU3VwcGxpZWQgaW5kZXggJyArIGluZGV4ICsgJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY2hpbGQgbGlzdCwgb3IgdGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3QgaXMgbm90IGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2luZGV4XTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVtb3ZlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyByZW1vdmVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuXG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYSBjaGlsZCBmcm9tIHRoZSBzcGVjaWZpZWQgaW5kZXggcG9zaXRpb24uXG4gKlxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBnZXQgdGhlIGNoaWxkIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICB2YXIgY2hpbGQgPSB0aGlzLmdldENoaWxkQXQoaW5kZXgpO1xuXG4gICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpbmRleCwgMSk7XG5cbiAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICBjaGlsZC5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGNoaWxkcmVuIGZyb20gdGhpcyBjb250YWluZXIgdGhhdCBhcmUgd2l0aGluIHRoZSBiZWdpbiBhbmQgZW5kIGluZGV4ZXMuXG4gKlxuICogQHBhcmFtIGJlZ2luSW5kZXgge251bWJlcn0gVGhlIGJlZ2lubmluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyAwLlxuICogQHBhcmFtIGVuZEluZGV4IHtudW1iZXJ9IFRoZSBlbmRpbmcgcG9zaXRpb24uIERlZmF1bHQgdmFsdWUgaXMgc2l6ZSBvZiB0aGUgY29udGFpbmVyLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkcmVuID0gZnVuY3Rpb24gKGJlZ2luSW5kZXgsIGVuZEluZGV4KVxue1xuICAgIHZhciBiZWdpbiA9IGJlZ2luSW5kZXggfHwgMDtcbiAgICB2YXIgZW5kID0gdHlwZW9mIGVuZEluZGV4ID09PSAnbnVtYmVyJyA/IGVuZEluZGV4IDogdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgdmFyIHJhbmdlID0gZW5kIC0gYmVnaW47XG4gICAgdmFyIHJlbW92ZWQsIGk7XG5cbiAgICBpZiAocmFuZ2UgPiAwICYmIHJhbmdlIDw9IGVuZClcbiAgICB7XG4gICAgICAgIHJlbW92ZWQgPSB0aGlzLmNoaWxkcmVuLnNwbGljZShiZWdpbiwgcmFuZ2UpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW1vdmVkW2ldLnBhcmVudCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoYmVnaW5JbmRleCk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0uZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbW92ZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJhbmdlID09PSAwICYmIHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigncmVtb3ZlQ2hpbGRyZW46IG51bWVyaWMgdmFsdWVzIGFyZSBvdXRzaWRlIHRoZSBhY2NlcHRhYmxlIHJhbmdlLicpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb24gYWxsIGNoaWxkcmVuIG9mIHRoaXMgY29udGFpbmVyIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0gPSBDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgQ29udGFpbmVyIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIGFsbCB2aXNpYmxlIGNoaWxkcmVuIGludG8gY29uc2lkZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE8gdGhlIGJvdW5kcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHRoaXMgcmVuZGVyIHNlc3Npb24gc28gcmV0dXJuIHdoYXQgd2UgaGF2ZVxuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBjaGlsZEJvdW5kcztcbiAgICAgICAgdmFyIGNoaWxkTWF4WDtcbiAgICAgICAgdmFyIGNoaWxkTWF4WTtcblxuICAgICAgICB2YXIgY2hpbGRWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZFZpc2libGUgPSB0cnVlO1xuXG4gICAgICAgICAgICBjaGlsZEJvdW5kcyA9IHRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIG1pblggPSBtaW5YIDwgY2hpbGRCb3VuZHMueCA/IG1pblggOiBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgbWluWSA9IG1pblkgPCBjaGlsZEJvdW5kcy55ID8gbWluWSA6IGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIGNoaWxkTWF4WCA9IGNoaWxkQm91bmRzLndpZHRoICsgY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIGNoaWxkTWF4WSA9IGNoaWxkQm91bmRzLmhlaWdodCArIGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIG1heFggPSBtYXhYID4gY2hpbGRNYXhYID8gbWF4WCA6IGNoaWxkTWF4WDtcbiAgICAgICAgICAgIG1heFkgPSBtYXhZID4gY2hpbGRNYXhZID8gbWF4WSA6IGNoaWxkTWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGRWaXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG5Db250YWluZXIucHJvdG90eXBlLmNvbnRhaW5lckdldEJvdW5kcyA9IENvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbm9uLWdsb2JhbCBsb2NhbCBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS5cbiAqIFRoZSBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXhDYWNoZSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0aC5NYXRyaXguSURFTlRJVFk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0cml4Q2FjaGU7XG5cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyggbWF0aC5NYXRyaXguSURFTlRJVFkgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcblxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGksIGo7XG5cbiAgICAvLyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgbWFzayBvciBhIGZpbHRlci5cbiAgICBpZiAodGhpcy5fbWFzayB8fCB0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgLy8gcHVzaCBmaWx0ZXIgZmlyc3QgYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIGNvcnJlY3QgZm9yIGFueSBtYXNraW5nXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzICYmIHRoaXMuX2ZpbHRlcnMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGhpcywgdGhpcy5fZmlsdGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcblxuICAgICAgICAvLyBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIGJhdGNoLCBvbmx5IHJlbmRlcmVkIGlmIGl0IGhhcyBhIHRleHR1cmUuXG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgbWFrZSBzdXJlIHRoZXkgZ2V0IHJlbmRlcmVkXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJXZWJHTChyZW5kZXJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayh0aGlzLCB0aGlzLl9tYXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBzaW1wbGUgcmVuZGVyIGNoaWxkcmVuIVxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gdGhpcyBpcyB3aGVyZSBjb250ZW50IGl0c2VsZiBnZXRzIHJlbmRlcmVkLi4uXG59O1xuXG4vKipcbiAqIFRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzXG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy5hbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hc2spXG4gICAge1xuICAgICAgICByZW5kZXJlci5tYXNrTWFuYWdlci5wdXNoTWFzayh0aGlzLl9tYXNrLCByZW5kZXJlcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayhyZW5kZXJlcik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUNoaWxkcmVuKVxue1xuICAgIERpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGlmIChkZXN0cm95Q2hpbGRyZW4pXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLmRlc3Ryb3koZGVzdHJveUNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xufTtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBUcmFuc2Zvcm0gPSByZXF1aXJlKCcuL1RyYW5zZm9ybVN0YXRpYycpLFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB3b3JsZEFscGhhOjEsIGNoaWxkcmVuOltdfTtcblxuXG4vKipcbiAqIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCBvbiB0aGUgc2NyZWVuLlxuICogVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIG9uIGl0cyBvd24gcmF0aGVyIGl0IHNob3VsZCBiZSBleHRlbmRlZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIEV2ZW50RW1pdHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gRGlzcGxheU9iamVjdCgpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb29yZGluYXRlIG9mIHRoZSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLnRyYW5zZm9ybS5wb3NpdGlvbjtcbiAgIC8vIHRoaXMuX3Bvc2l0aW9uID0gbmV3IENhY2hlUG9pbnQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHBpdm90IHBvaW50IG9mIHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgaXQgcm90YXRlcyBhcm91bmRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5waXZvdCA9IHRoaXMudHJhbnNmb3JtLnBpdm90XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBza2V3IGZhY3RvciBmb3IgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNrZXcgPSB0aGlzLnRyYW5zZm9ybS5za2V3XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3JvdGF0aW9uID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcGFjaXR5IG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgb2JqZWN0LiBJZiBmYWxzZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGRyYXduLCBhbmRcbiAgICAgKiB0aGUgdXBkYXRlVHJhbnNmb3JtIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENhbiB0aGlzIG9iamVjdCBiZSByZW5kZXJlZCwgaWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biBidXQgdGhlIHVwZGF0ZVRyYW5zZm9ybVxuICAgICAqIG1ldGhvZHMgd2lsbCBzdGlsbCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyIHRoYXQgY29udGFpbnMgdGhpcyBkaXNwbGF5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ29udGFpbmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtdWx0aXBsaWVkIGFscGhhIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgdHJhbnNmb3JtIG9mIHRoZSBvYmplY3QgYmFzZWQgb24gd29ybGQgKHBhcmVudCkgZmFjdG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS5sb2NhbFRyYW5zZm9ybTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcmVhIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0by4gVGhpcyBpcyB1c2VkIGFzIG1vcmUgb2YgYW4gb3B0aW1pc2F0aW9uXG4gICAgICogcmF0aGVyIHRoYW4gZmlndXJpbmcgb3V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGVhY2ggZnJhbWUgeW91IGNhbiBzZXQgdGhpcyByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW9zdCB1cC10by1kYXRlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgbWFzayBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gIC8vICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxheU9iamVjdDtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNjYWxlWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcm90YXRpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uZGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX2NyID0gTWF0aC5jb3ModmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBzcHJpdGUgaXMgZ2xvYmFsbHkgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB3b3JsZFZpc2libGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udmlzaWJsZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICB9IHdoaWxlIChpdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIG1hc2sgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LiBBIG1hc2sgaXMgYW4gb2JqZWN0IHRoYXQgbGltaXRzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIG9iamVjdCB0byB0aGUgc2hhcGUgb2YgdGhlIG1hc2sgYXBwbGllZCB0byBpdC5cbiAgICAgKiBJbiBQSVhJIGEgcmVndWxhciBtYXNrIG11c3QgYmUgYSBQSVhJLkdyYXBoaWNzIG9yIGEgUElYSS5TcHJpdGUgb2JqZWN0LiBUaGlzIGFsbG93cyBmb3IgbXVjaCBmYXN0ZXIgbWFza2luZyBpbiBjYW52YXMgYXMgaXQgdXRpbGlzZXMgc2hhcGUgY2xpcHBpbmcuXG4gICAgICogVG8gcmVtb3ZlIGEgbWFzaywgc2V0IHRoaXMgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3N8UElYSS5TcHJpdGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBtYXNrOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrLnJlbmRlcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXNrID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LlxuICAgICAqICogSU1QT1JUQU5UOiBUaGlzIGlzIGEgd2ViR0wgb25seSBmZWF0dXJlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlci5cbiAgICAgKiBUbyByZW1vdmUgZmlsdGVycyBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ251bGwnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkFic3RyYWN0RmlsdGVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMgJiYgdGhpcy5fZmlsdGVycy5zbGljZSgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlICYmIHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogVE9ETyAtIE9wdGltaXphdGlvbiBwYXNzIVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vaWYodGhpcy50cmFuc2Zvcm0uZGlydHkgfHwgcGFyZW50LnRyYW5zZm9ybS5kaXJ0eSlcbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICAvLyBtdWx0aXBseSB0aGUgYWxwaGFzLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gPSBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICpcbiAqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH1cbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyhtYXRoLk1hdHJpeC5JREVOVElUWSk7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9HbG9iYWwgPSBmdW5jdGlvbiAocG9zaXRpb24pXG57XG4gICAgLy8gdGhpcyBwYXJlbnQgY2hlY2sgaXMgZm9yIGp1c3QgaW4gY2FzZSB0aGUgaXRlbSBpcyBhIHJvb3Qgb2JqZWN0LlxuICAgIC8vIElmIGl0IGlzIHdlIG5lZWQgdG8gZ2l2ZSBpdCBhIHRlbXBvcmFyeSBwYXJlbnQgc28gdGhhdCBkaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtIHdvcmtzIGNvcnJlY3RseVxuICAgIC8vIHRoaXMgaXMgbWFpbmx5IHRvIGF2b2lkIGEgcGFyZW50IGNoZWNrIGluIHRoZSBtYWluIGxvb3AuIEV2ZXJ5IGxpdHRsZSBoZWxwcyBmb3IgcGVyZm9ybWFuY2UgOilcbiAgICBpZighdGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLnBhcmVudCA9IF90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIGxvdFxuICAgIHJldHVybiB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5KHBvc2l0aW9uKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgbG9jYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHJlbGF0aXZlIHRvIGFub3RoZXIgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEBwYXJhbSBbZnJvbV0ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gY2FsY3VsYXRlIHRoZSBnbG9iYWwgcG9zaXRpb24gZnJvbVxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBQb2ludClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9Mb2NhbCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgZnJvbSwgcG9pbnQpXG57XG4gICAgaWYgKGZyb20pXG4gICAge1xuICAgICAgICBwb3NpdGlvbiA9IGZyb20udG9HbG9iYWwocG9zaXRpb24pO1xuICAgIH1cblxuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIHNpbXBseSBhcHBseSB0aGUgbWF0cml4Li5cbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9zaXRpb24sIHBvaW50KTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyBPVkVSV1JJVEU7XG59O1xuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBwYXJlbnQgQ29udGFpbmVyIG9mIHRoaXMgRGlzcGxheU9iamVjdFxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge0NvbnRhaW5lcn0gVGhlIENvbnRhaW5lciB0byBhZGQgdGhpcyBEaXNwbGF5T2JqZWN0IHRvXG4gKiBAcmV0dXJuIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdGhhdCB0aGlzIERpc3BsYXlPYmplY3Qgd2FzIGFkZGVkIHRvXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFBhcmVudCA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWNvbnRhaW5lci5hZGRDaGlsZClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0UGFyZW50OiBBcmd1bWVudCBtdXN0IGJlIGEgQ29udGFpbmVyJyk7XG4gICAgfVxuXG4gICAgY29udGFpbmVyLmFkZENoaWxkKHRoaXMpO1xuICAgIHJldHVybiBjb250YWluZXI7XG59O1xuXG4vKipcbiAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHNldCB0aGUgcG9zdGlvbiwgc2NhbGUsIHNrZXcgYW5kIHBpdm90IGF0IG9uY2UuXG4gKlxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IFRoZSBYIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gVGhlIFkgcG9zaXRpb25cbiAqIEBwYXJhbSBbc2NhbGVYPTFdIHtudW1iZXJ9IFRoZSBYIHNjYWxlIHZhbHVlXG4gKiBAcGFyYW0gW3NjYWxlWT0xXSB7bnVtYmVyfSBUaGUgWSBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtyb3RhdGlvbj0wXSB7bnVtYmVyfSBUaGUgcm90YXRpb25cbiAqIEBwYXJhbSBbc2tld1g9MF0ge251bWJlcn0gVGhlIFggc2tldyB2YWx1ZVxuICogQHBhcmFtIFtza2V3WT0wXSB7bnVtYmVyfSBUaGUgWSBza2V3IHZhbHVlXG4gKiBAcGFyYW0gW3Bpdm90WD0wXSB7bnVtYmVyfSBUaGUgWCBwaXZvdCB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFk9MF0ge251bWJlcn0gVGhlIFkgcGl2b3QgdmFsdWVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24oeCwgeSwgc2NhbGVYLCBzY2FsZVksIHJvdGF0aW9uLCBza2V3WCwgc2tld1ksIHBpdm90WCwgcGl2b3RZKSAvL2pzaGludCBpZ25vcmU6bGluZVxue1xuICAgIHRoaXMucG9zaXRpb24ueCA9IHggfHwgMDtcbiAgICB0aGlzLnBvc2l0aW9uLnkgPSB5IHx8IDA7XG4gICAgdGhpcy5zY2FsZS54ID0gIXNjYWxlWCA/IDEgOiBzY2FsZVg7XG4gICAgdGhpcy5zY2FsZS55ID0gIXNjYWxlWSA/IDEgOiBzY2FsZVk7XG4gICAgdGhpcy5yb3RhdGlvbiA9IHJvdGF0aW9uIHx8IDA7XG4gICAgdGhpcy5za2V3LnggPSBza2V3WCB8fCAwO1xuICAgIHRoaXMuc2tldy55ID0gc2tld1kgfHwgMDtcbiAgICB0aGlzLnBpdm90LnggPSBwaXZvdFggfHwgMDtcbiAgICB0aGlzLnBpdm90LnkgPSBwaXZvdFkgfHwgMDtcbiAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQmFzZSBkZXN0cm95IG1ldGhvZCBmb3IgZ2VuZXJpYyBkaXNwbGF5IG9iamVjdHNcbiAqXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdGhpcy5wb3NpdGlvbiA9IG51bGw7XG4gICAgdGhpcy5zY2FsZSA9IG51bGw7XG4gICAgdGhpcy5waXZvdCA9IG51bGw7XG4gICAgdGhpcy5za2V3ID0gbnVsbDtcblxuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIHRoaXMuX2JvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fbWFzayA9IG51bGw7XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xufTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIE9ic2VydmFibGVQb2ludCh0cmFuc2Zvcm0sIHgsIHkpXG57XG4gICAgdGhpcy5feCA9IHggfHwgMDtcbiAgICB0aGlzLl95ID0geSB8fCAwO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG59XG5cbk9ic2VydmFibGVQb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYnNlcnZhYmxlUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IE9ic2VydmFibGVQb2ludDtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE9ic2VydmFibGVQb2ludC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3Qgb24gdGhlIHggYXhpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIHg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5feDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3ggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3k7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl95ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5PYnNlcnZhYmxlUG9pbnQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuX3ggPSB4IHx8IDA7XG4gICAgdGhpcy5feSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLl94IDogMCApO1xuICAgIFxuICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcbnZhciBPYnNlcnZhYmxlUG9pbnQgPSByZXF1aXJlKCcuL09ic2VydmFibGVQb2ludCcpO1xuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLCAwKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLDEsIDEpO1xuICAgIHRoaXMucGl2b3QgPSBuZXcgT2JzZXJ2YWJsZVBvaW50KHRoaXMsIDAsIDApO1xuICAgIHRoaXMuc2tldyA9IG5ldyBPYnNlcnZhYmxlUG9pbnQodGhpcywgMCwwKTtcbiAgICBcbiAgICB0aGlzLnJvdGF0aW9uID0gMDtcbiAgICB0aGlzLl9zciA9IE1hdGguc2luKDApO1xuICAgIHRoaXMuX2NyID0gTWF0aC5jb3MoMCk7XG4gICAgXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cblxuICAgIHRoaXMudXBkYXRlZCA9IHRydWU7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUcmFuc2Zvcm07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKHBhcmVudFRyYW5zZm9ybSlcbntcbiAgICB2YXIgcHQgPSBwYXJlbnRUcmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgbHQgPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3g7XG4gICAgICAgIGx0LmIgID0gIHRoaXMuX3NyICogdGhpcy5zY2FsZS5feDtcbiAgICAgICAgbHQuYyAgPSAtdGhpcy5fc3IgKiB0aGlzLnNjYWxlLl95O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3k7XG4gICAgICAgIGx0LnR4ID0gIHRoaXMucG9zaXRpb24uX3ggLSAodGhpcy5waXZvdC5feCAqIGx0LmEgKyB0aGlzLnBpdm90Ll95ICogbHQuYyk7XG4gICAgICAgIGx0LnR5ID0gIHRoaXMucG9zaXRpb24uX3kgLSAodGhpcy5waXZvdC5feCAqIGx0LmIgKyB0aGlzLnBpdm90Ll95ICogbHQuZCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVkID0gdGhpcy5kaXJ0eSB8fCBwYXJlbnRUcmFuc2Zvcm0uZGlydHk7XG5cbiAgICBpZih0aGlzLnVwZGF0ZWQpXG4gICAgeyAgICAgIFxuICAgICAgICAvLyBjb25jYXQgdGhlIHBhcmVudCBtYXRyaXggd2l0aCB0aGUgb2JqZWN0cyB0cmFuc2Zvcm0uXG4gICAgICAgIHd0LmEgID0gbHQuYSAgKiBwdC5hICsgbHQuYiAgKiBwdC5jO1xuICAgICAgICB3dC5iICA9IGx0LmEgICogcHQuYiArIGx0LmIgICogcHQuZDtcbiAgICAgICAgd3QuYyAgPSBsdC5jICAqIHB0LmEgKyBsdC5kICAqIHB0LmM7XG4gICAgICAgIHd0LmQgID0gbHQuYyAgKiBwdC5iICsgbHQuZCAgKiBwdC5kO1xuICAgICAgICB3dC50eCA9IGx0LnR4ICogcHQuYSArIGx0LnR5ICogcHQuYyArIHB0LnR4O1xuICAgICAgICB3dC50eSA9IGx0LnR4ICogcHQuYiArIGx0LnR5ICogcHQuZCArIHB0LnR5O1xuICAgIH1cbiAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhbnNmb3JtO1xuXG5cbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBDYW52YXNHcmFwaGljcyA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL0dyYXBoaWNzRGF0YScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIEdyYXBoaWNzIGNsYXNzIGNvbnRhaW5zIG1ldGhvZHMgdXNlZCB0byBkcmF3IHByaW1pdGl2ZSBzaGFwZXMgc3VjaCBhcyBsaW5lcywgY2lyY2xlcyBhbmRcbiAqIHJlY3RhbmdsZXMgdG8gdGhlIGRpc3BsYXksIGFuZCB0byBjb2xvciBhbmQgZmlsbCB0aGVtLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzKClcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSB2YWx1ZSB1c2VkIHdoZW4gZmlsbGluZyB0aGUgR3JhcGhpY3Mgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggKHRoaWNrbmVzcykgb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29sb3Igb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBHcmFwaGljcyBkYXRhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFRoaXMgaXMgYSBoZXggdmFsdWUuIEFwcGx5IGEgdmFsdWUgb2YgMHhGRkZGRkYgdG8gcmVzZXQgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmV2aW91cyB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFVzZWQgdG8gY29tcGFyZSB0byB0aGUgY3VycmVudCB0aW50IGFuZCBjaGVjayBpZiB0aGVyZXMgY2hhbmdlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLl9wcmV2VGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMO1xuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCBwYXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgY29udGFpbmluZyBzb21lIFdlYkdMLXJlbGF0ZWQgcHJvcGVydGllcyB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIG9iamVjdD59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAvLyBUT0RPIC0gX3dlYmdsIHNob3VsZCB1c2UgYSBwcm90b3R5cGUgb2JqZWN0LCBub3QgYSByYW5kb20gdW5kb2N1bWVudGVkIG9iamVjdC4uLlxuICAgIHRoaXMuX3dlYkdMID0ge307XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgc2hhcGUgaXMgYmVpbmcgdXNlZCBhcyBhIG1hc2suXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNNYXNrID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYm91bmRzJyBwYWRkaW5nIHVzZWQgZm9yIGJvdW5kcyBjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJvdW5kc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQSBjYWNoZSBvZiB0aGUgbG9jYWwgYm91bmRzIHRvIHByZXZlbnQgcmVjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwwLDEsMSk7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlIGdyYXBoaWNzXG4gICAgICogb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIFdlYkdMIGdyYXBoaWNzIG9iamVjdCBoYXMgY2hhbmdlZC4gSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZVxuICAgICAqIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlY2FsY3VsYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcblxuICAgIHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIGNhY2hlZCBzcHJpdGUgb2JqZWN0IG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBjYWNoZUFzQml0bWFwIGlzIHNldCB0byB0cnVlIHRoZSBncmFwaGljcyBvYmplY3Qgd2lsbCBiZSByZW5kZXJlZCBhcyBpZiBpdCB3YXMgYSBzcHJpdGUuXG4gICAgICogVGhpcyBpcyB1c2VmdWwgaWYgeW91ciBncmFwaGljcyBlbGVtZW50IGRvZXMgbm90IGNoYW5nZSBvZnRlbiwgYXMgaXQgd2lsbCBzcGVlZCB1cCB0aGUgcmVuZGVyaW5nXG4gICAgICogb2YgdGhlIG9iamVjdCBpbiBleGNoYW5nZSBmb3IgdGFraW5nIHVwIHRleHR1cmUgbWVtb3J5LiBJdCBpcyBhbHNvIHVzZWZ1bCBpZiB5b3UgbmVlZCB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3QgdG8gYmUgYW50aS1hbGlhc2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVuZGVyZWQgdXNpbmcgY2FudmFzLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCBpZlxuICAgICAqIHlvdSBhcmUgY29uc3RhbnRseSByZWRyYXdpbmcgdGhlIGdyYXBoaWNzIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBjYWNoZUFzQml0bWFwXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5HcmFwaGljcyNcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuR3JhcGhpY3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcbkdyYXBoaWNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljcztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEdyYXBoaWNzIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqIE5vdGUgdGhhdCB0aGUgb25seSB0aGUgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IGFyZSBjbG9uZWQsIG5vdCBpdHMgdHJhbnNmb3JtIChwb3NpdGlvbixzY2FsZSxldGMpXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2xvbmUgPSBuZXcgR3JhcGhpY3MoKTtcblxuICAgIGNsb25lLnJlbmRlcmFibGUgICAgPSB0aGlzLnJlbmRlcmFibGU7XG4gICAgY2xvbmUuZmlsbEFscGhhICAgICA9IHRoaXMuZmlsbEFscGhhO1xuICAgIGNsb25lLmxpbmVXaWR0aCAgICAgPSB0aGlzLmxpbmVXaWR0aDtcbiAgICBjbG9uZS5saW5lQ29sb3IgICAgID0gdGhpcy5saW5lQ29sb3I7XG4gICAgY2xvbmUudGludCAgICAgICAgICA9IHRoaXMudGludDtcbiAgICBjbG9uZS5ibGVuZE1vZGUgICAgID0gdGhpcy5ibGVuZE1vZGU7XG4gICAgY2xvbmUuaXNNYXNrICAgICAgICA9IHRoaXMuaXNNYXNrO1xuICAgIGNsb25lLmJvdW5kc1BhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG4gICAgY2xvbmUuZGlydHkgICAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuZ2xEaXJ0eSAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuY2FjaGVkU3ByaXRlRGlydHkgPSB0aGlzLmNhY2hlZFNwcml0ZURpcnR5O1xuXG4gICAgLy8gY29weSBncmFwaGljcyBkYXRhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIGNsb25lLmdyYXBoaWNzRGF0YS5wdXNoKHRoaXMuZ3JhcGhpY3NEYXRhW2ldLmNsb25lKCkpO1xuICAgIH1cblxuICAgIGNsb25lLmN1cnJlbnRQYXRoID0gY2xvbmUuZ3JhcGhpY3NEYXRhW2Nsb25lLmdyYXBoaWNzRGF0YS5sZW5ndGggLSAxXTtcblxuICAgIGNsb25lLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICByZXR1cm4gY2xvbmU7XG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgbGluZSBzdHlsZSB1c2VkIGZvciBzdWJzZXF1ZW50IGNhbGxzIHRvIEdyYXBoaWNzIG1ldGhvZHMgc3VjaCBhcyB0aGUgbGluZVRvKCkgbWV0aG9kIG9yIHRoZSBkcmF3Q2lyY2xlKCkgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUubGluZVN0eWxlID0gZnVuY3Rpb24gKGxpbmVXaWR0aCwgY29sb3IsIGFscGhhKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoIHx8IDA7XG4gICAgdGhpcy5saW5lQ29sb3IgPSBjb2xvciB8fCAwO1xuICAgIHRoaXMubGluZUFscGhhID0gKGFscGhhID09PSB1bmRlZmluZWQpID8gMSA6IGFscGhhO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBoYWxmd2F5IHRocm91Z2ggYSBsaW5lPyBzdGFydCBhIG5ldyBvbmUhXG4gICAgICAgICAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnNsaWNlKC0yKSk7XG4gICAgICAgICAgICBzaGFwZS5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSBpdHMgZW1wdHkgc28gbGV0cyBqdXN0IHNldCB0aGUgbGluZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVXaWR0aCA9IHRoaXMubGluZVdpZHRoO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZUFscGhhID0gdGhpcy5saW5lQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogTW92ZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byB4LCB5LlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IHRoZSBYIGNvb3JkaW5hdGUgdG8gbW92ZSB0b1xuICogQHBhcmFtIHkge251bWJlcn0gdGhlIFkgY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICAqL1xuR3JhcGhpY3MucHJvdG90eXBlLm1vdmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24oW3gseV0pO1xuICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIGxpbmUgdXNpbmcgdGhlIGN1cnJlbnQgbGluZSBzdHlsZSBmcm9tIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8gKHgsIHkpO1xuICogVGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiBpcyB0aGVuIHNldCB0byAoeCwgeSkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBkcmF3IHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lVG8gPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgsIHkpO1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnF1YWRyYXRpY0N1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICBuID0gMjAsXG4gICAgICAgIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLCAwKTtcbiAgICB9XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBuOyArK2kpXG4gICAge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgeGEgPSBmcm9tWCArICggKGNwWCAtIGZyb21YKSAqIGogKTtcbiAgICAgICAgeWEgPSBmcm9tWSArICggKGNwWSAtIGZyb21ZKSAqIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCggeGEgKyAoICgoY3BYICsgKCAodG9YIC0gY3BYKSAqIGogKSkgLSB4YSkgKiBqICksXG4gICAgICAgICAgICAgICAgICAgICB5YSArICggKChjcFkgKyAoICh0b1kgLSBjcFkpICogaiApKSAtIHlhKSAqIGogKSApO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gY3BYMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlemllckN1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIGNwWDIsIGNwWTIsIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgbiA9IDIwLFxuICAgICAgICBkdCxcbiAgICAgICAgZHQyLFxuICAgICAgICBkdDMsXG4gICAgICAgIHQyLFxuICAgICAgICB0MyxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICBkdCA9ICgxIC0gaik7XG4gICAgICAgIGR0MiA9IGR0ICogZHQ7XG4gICAgICAgIGR0MyA9IGR0MiAqIGR0O1xuXG4gICAgICAgIHQyID0gaiAqIGo7XG4gICAgICAgIHQzID0gdDIgKiBqO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCBkdDMgKiBmcm9tWCArIDMgKiBkdDIgKiBqICogY3BYICsgMyAqIGR0ICogdDIgKiBjcFgyICsgdDMgKiB0b1gsXG4gICAgICAgICAgICAgICAgICAgICBkdDMgKiBmcm9tWSArIDMgKiBkdDIgKiBqICogY3BZICsgMyAqIGR0ICogdDIgKiBjcFkyICsgdDMgKiB0b1kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjVG8oKSBtZXRob2QgY3JlYXRlcyBhbiBhcmMvY3VydmUgYmV0d2VlbiB0d28gdGFuZ2VudHMgb24gdGhlIGNhbnZhcy5cbiAqXG4gKiBcImJvcnJvd2VkXCIgZnJvbSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Z4Y2FudmFzLyAtIHRoYW5rcyBnb29nbGUhXG4gKlxuICogQHBhcmFtIHgxIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTEge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB4MiB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGFyY1xuICogQHBhcmFtIHkyIHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGFyY1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmFyY1RvID0gZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyLCByYWRpdXMpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oeDEsIHkxKTtcbiAgICB9XG5cbiAgICB2YXIgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMsXG4gICAgICAgIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0sXG4gICAgICAgIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0sXG4gICAgICAgIGExID0gZnJvbVkgLSB5MSxcbiAgICAgICAgYjEgPSBmcm9tWCAtIHgxLFxuICAgICAgICBhMiA9IHkyICAgLSB5MSxcbiAgICAgICAgYjIgPSB4MiAgIC0geDEsXG4gICAgICAgIG1tID0gTWF0aC5hYnMoYTEgKiBiMiAtIGIxICogYTIpO1xuXG4gICAgaWYgKG1tIDwgMS4wZS04IHx8IHJhZGl1cyA9PT0gMClcbiAgICB7XG4gICAgICAgIGlmIChwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAhPT0geDEgfHwgcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0gIT09IHkxKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHMucHVzaCh4MSwgeTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBkZCA9IGExICogYTEgKyBiMSAqIGIxLFxuICAgICAgICAgICAgY2MgPSBhMiAqIGEyICsgYjIgKiBiMixcbiAgICAgICAgICAgIHR0ID0gYTEgKiBhMiArIGIxICogYjIsXG4gICAgICAgICAgICBrMSA9IHJhZGl1cyAqIE1hdGguc3FydChkZCkgLyBtbSxcbiAgICAgICAgICAgIGsyID0gcmFkaXVzICogTWF0aC5zcXJ0KGNjKSAvIG1tLFxuICAgICAgICAgICAgajEgPSBrMSAqIHR0IC8gZGQsXG4gICAgICAgICAgICBqMiA9IGsyICogdHQgLyBjYyxcbiAgICAgICAgICAgIGN4ID0gazEgKiBiMiArIGsyICogYjEsXG4gICAgICAgICAgICBjeSA9IGsxICogYTIgKyBrMiAqIGExLFxuICAgICAgICAgICAgcHggPSBiMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHB5ID0gYTEgKiAoazIgKyBqMSksXG4gICAgICAgICAgICBxeCA9IGIyICogKGsxICsgajIpLFxuICAgICAgICAgICAgcXkgPSBhMiAqIChrMSArIGoyKSxcbiAgICAgICAgICAgIHN0YXJ0QW5nbGUgPSBNYXRoLmF0YW4yKHB5IC0gY3ksIHB4IC0gY3gpLFxuICAgICAgICAgICAgZW5kQW5nbGUgICA9IE1hdGguYXRhbjIocXkgLSBjeSwgcXggLSBjeCk7XG5cbiAgICAgICAgdGhpcy5hcmMoY3ggKyB4MSwgY3kgKyB5MSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYjEgKiBhMiA+IGIyICogYTEpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSAodXNlZCB0byBjcmVhdGUgY2lyY2xlcywgb3IgcGFydHMgb2YgY2lyY2xlcykuXG4gKlxuICogQHBhcmFtIGN4IHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gY3kge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gc3RhcnRBbmdsZSB7bnVtYmVyfSBUaGUgc3RhcnRpbmcgYW5nbGUsIGluIHJhZGlhbnMgKDAgaXMgYXQgdGhlIDMgbydjbG9jayBwb3NpdGlvbiBvZiB0aGUgYXJjJ3MgY2lyY2xlKVxuICogQHBhcmFtIGVuZEFuZ2xlIHtudW1iZXJ9IFRoZSBlbmRpbmcgYW5nbGUsIGluIHJhZGlhbnNcbiAqIEBwYXJhbSBhbnRpY2xvY2t3aXNlIHtib29sZWFufSBPcHRpb25hbC4gU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGRyYXdpbmcgc2hvdWxkIGJlIGNvdW50ZXJjbG9ja3dpc2Ugb3IgY2xvY2t3aXNlLiBGYWxzZSBpcyBkZWZhdWx0LCBhbmQgaW5kaWNhdGVzIGNsb2Nrd2lzZSwgd2hpbGUgdHJ1ZSBpbmRpY2F0ZXMgY291bnRlci1jbG9ja3dpc2UuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjID0gZnVuY3Rpb24oY3gsIGN5LCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBhbnRpY2xvY2t3aXNlKVxue1xuICAgIGFudGljbG9ja3dpc2UgPSBhbnRpY2xvY2t3aXNlIHx8IGZhbHNlO1xuXG4gICAgaWYgKHN0YXJ0QW5nbGUgPT09IGVuZEFuZ2xlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYoICFhbnRpY2xvY2t3aXNlICYmIGVuZEFuZ2xlIDw9IHN0YXJ0QW5nbGUgKVxuICAgIHtcbiAgICAgICAgZW5kQW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuICAgIGVsc2UgaWYoIGFudGljbG9ja3dpc2UgJiYgc3RhcnRBbmdsZSA8PSBlbmRBbmdsZSApXG4gICAge1xuICAgICAgICBzdGFydEFuZ2xlICs9IE1hdGguUEkgKiAyO1xuICAgIH1cblxuICAgIHZhciBzd2VlcCA9IGFudGljbG9ja3dpc2UgPyAoc3RhcnRBbmdsZSAtIGVuZEFuZ2xlKSAqIC0xIDogKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSk7XG4gICAgdmFyIHNlZ3MgPSAgTWF0aC5jZWlsKE1hdGguYWJzKHN3ZWVwKSAvIChNYXRoLlBJICogMikpICogNDA7XG5cbiAgICBpZihzd2VlcCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBzdGFydFggPSBjeCArIE1hdGguY29zKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuICAgIHZhciBzdGFydFkgPSBjeSArIE1hdGguc2luKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHN0YXJ0WCwgc3RhcnRZKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciB0aGV0YSA9IHN3ZWVwLyhzZWdzKjIpO1xuICAgIHZhciB0aGV0YTIgPSB0aGV0YSoyO1xuXG4gICAgdmFyIGNUaGV0YSA9IE1hdGguY29zKHRoZXRhKTtcbiAgICB2YXIgc1RoZXRhID0gTWF0aC5zaW4odGhldGEpO1xuXG4gICAgdmFyIHNlZ01pbnVzID0gc2VncyAtIDE7XG5cbiAgICB2YXIgcmVtYWluZGVyID0gKCBzZWdNaW51cyAlIDEgKSAvIHNlZ01pbnVzO1xuXG4gICAgZm9yKHZhciBpPTA7IGk8PXNlZ01pbnVzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcmVhbCA9ICBpICsgcmVtYWluZGVyICogaTtcblxuXG4gICAgICAgIHZhciBhbmdsZSA9ICgodGhldGEpICsgc3RhcnRBbmdsZSArICh0aGV0YTIgKiByZWFsKSk7XG5cbiAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgIHZhciBzID0gLU1hdGguc2luKGFuZ2xlKTtcblxuICAgICAgICBwb2ludHMucHVzaCgoIChjVGhldGEgKiAgYykgKyAoc1RoZXRhICogcykgKSAqIHJhZGl1cyArIGN4LFxuICAgICAgICAgICAgICAgICAgICAoIChjVGhldGEgKiAtcykgKyAoc1RoZXRhICogYykgKSAqIHJhZGl1cyArIGN5KTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIGEgc2ltcGxlIG9uZS1jb2xvciBmaWxsIHRoYXQgc3Vic2VxdWVudCBjYWxscyB0byBvdGhlciBHcmFwaGljcyBtZXRob2RzXG4gKiAoc3VjaCBhcyBsaW5lVG8oKSBvciBkcmF3Q2lyY2xlKCkpIHVzZSB3aGVuIGRyYXdpbmcuXG4gKlxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlZ2luRmlsbCA9IGZ1bmN0aW9uIChjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5maWxsaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPD0gMilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsID0gdGhpcy5maWxsaW5nO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQ29sb3IgPSB0aGlzLmZpbGxDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbEFscGhhID0gdGhpcy5maWxsQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBmaWxsIHRvIHRoZSBsaW5lcyBhbmQgc2hhcGVzIHRoYXQgd2VyZSBhZGRlZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHRoZSBiZWdpbkZpbGwoKSBtZXRob2QuXG4gKlxuICogQHJldHVybiB7R3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5lbmRGaWxsID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IG51bGw7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCApXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguUmVjdGFuZ2xlKHgseSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gUmFkaXVzIG9mIHRoZSByZWN0YW5nbGUgY29ybmVyc1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSb3VuZGVkUmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzIClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5Sb3VuZGVkUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgY2lyY2xlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3Q2lyY2xlID0gZnVuY3Rpb24gKHgsIHksIHJhZGl1cylcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5DaXJjbGUoeCx5LCByYWRpdXMpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhbiBlbGxpcHNlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIGhhbGYgd2lkdGggb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd0VsbGlwc2UgPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5FbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIHBvbHlnb24gdXNpbmcgdGhlIGdpdmVuIHBhdGguXG4gKlxuICogQHBhcmFtIHBhdGgge251bWJlcltdfFBJWEkuUG9pbnRbXX0gVGhlIHBhdGggZGF0YSB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgcG9seWdvbi5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UG9seWdvbiA9IGZ1bmN0aW9uIChwYXRoKVxue1xuICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGFzc2lnbm1lbnQgZGVvcHRcbiAgICAvLyBzZWUgc2VjdGlvbiAzLjE6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgIHZhciBwb2ludHMgPSBwYXRoO1xuXG4gICAgdmFyIGNsb3NlZCA9IHRydWU7XG5cbiAgICBpZiAocG9pbnRzIGluc3RhbmNlb2YgbWF0aC5Qb2x5Z29uKVxuICAgIHtcbiAgICAgICAgY2xvc2VkID0gcG9pbnRzLmNsb3NlZDtcbiAgICAgICAgcG9pbnRzID0gcG9pbnRzLnBvaW50cztcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHNbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHBvaW50cyk7XG4gICAgc2hhcGUuY2xvc2VkID0gY2xvc2VkO1xuXG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZ3JhcGhpY3MgdGhhdCB3ZXJlIGRyYXduIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LCBhbmQgcmVzZXRzIGZpbGwgYW5kIGxpbmUgc3R5bGUgc2V0dGluZ3MuXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG4gICAgdGhpcy5maWxsaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmNsZWFyRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gW107XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGdlb21ldHJ5IGlzIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNob3VsZCBiZSBvbmUgb2YgdGhlIHNjYWxlTW9kZSBjb25zdHNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBncmFwaGljcyBvYmplY3RcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVzb2x1dGlvbiwgc2NhbGVNb2RlKVxue1xuXG4gICAgcmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGggKiByZXNvbHV0aW9uLCBib3VuZHMuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXNCdWZmZXIuY29udGV4dC5zY2FsZShyZXNvbHV0aW9uLCByZXNvbHV0aW9uKTtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIGNhbnZhc0J1ZmZlci5jb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcblxuICAgIGlmICh0aGlzLmdsRGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5nbERpcnR5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5yZW5kZXIodGhpcyk7XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5pc01hc2sgPT09IHRydWUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHRpbnQgaGFzIGNoYW5nZWQsIHNldCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRpcnR5LlxuICAgIGlmICh0aGlzLl9wcmV2VGludCAhPT0gdGhpcy50aW50KSB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIHRoaXMgY29kZSBtYXkgc3RpbGwgYmUgbmVlZGVkIHNvIGxlYXZpbmcgZm9yIG5vdy4uXG4gICAgLy9cbiAgICAvKlxuICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuZGlydHkgfHwgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVDYWNoZWRTcHJpdGUoKTtcblxuICAgICAgICAgICAgLy8gd2Ugd2lsbCBhbHNvIG5lZWQgdG8gdXBkYXRlIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUoKTtcblxuICAgICAgICAgICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFscGhhID0gdGhpcy5hbHBoYTtcblxuICAgICAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLl9jYWNoZWRTcHJpdGUsIHJlbmRlcmVyKTtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgICovXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY29udGV4dCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYm91bmRzIG9mIHRoZSBncmFwaGljIHNoYXBlIGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IFRoZSB3b3JsZCB0cmFuc2Zvcm0gbWF0cml4IHRvIHVzZSwgZGVmYXVsdHMgdG8gdGhpc1xuICogIG9iamVjdCdzIHdvcmxkVHJhbnNmb3JtLlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICAvLyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBpdGVtIGlzIGEgbWFzayFcbiAgICAgICAgaWYgKCF0aGlzLnJlbmRlcmFibGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJvdW5kc0RpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICAgICAgICAgIHRoaXMuZ2xEaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYm91bmRzRGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9sb2NhbEJvdW5kcztcblxuICAgICAgICB2YXIgdzAgPSBib3VuZHMueDtcbiAgICAgICAgdmFyIHcxID0gYm91bmRzLndpZHRoICsgYm91bmRzLng7XG5cbiAgICAgICAgdmFyIGgwID0gYm91bmRzLnk7XG4gICAgICAgIHZhciBoMSA9IGJvdW5kcy5oZWlnaHQgKyBib3VuZHMueTtcblxuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAgICAgdmFyIHgyID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgICAgICB2YXIgeTMgPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgICAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgbWF4WCA9IHgxO1xuICAgICAgICB2YXIgbWF4WSA9IHkxO1xuXG4gICAgICAgIHZhciBtaW5YID0geDE7XG4gICAgICAgIHZhciBtaW5ZID0geTE7XG5cbiAgICAgICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICAgICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICAgICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgICAgICB0aGlzLl9ib3VuZHMueCA9IG1pblg7XG4gICAgICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy55ID0gbWluWTtcbiAgICAgICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSB0aGlzLl9ib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBncmFwaGljcyBvYmplY3RcbipcbiogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4qL1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciBncmFwaGljc0RhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKCFkYXRhLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gb25seSBkZWFsIHdpdGggZmlsbHMuLlxuICAgICAgICBpZiAoZGF0YS5zaGFwZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCBkYXRhLnNoYXBlLmNvbnRhaW5zKCB0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkgKSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAqXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcblxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICBpZiAodGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdmFyIHNoYXBlLCBwb2ludHMsIHgsIHksIHcsIGg7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVtpXTtcbiAgICAgICAgICAgIHZhciB0eXBlID0gZGF0YS50eXBlO1xuICAgICAgICAgICAgdmFyIGxpbmVXaWR0aCA9IGRhdGEubGluZVdpZHRoO1xuICAgICAgICAgICAgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QgfHwgdHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLnggLSBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueSAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS53aWR0aCArIGxpbmVXaWR0aDtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLnJhZGl1cyArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLng7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLmhlaWdodCArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFBPTFlcbiAgICAgICAgICAgICAgICBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBvaW50cy5sZW5ndGg7IGogKz0gMilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHggPSBwb2ludHNbal07XG4gICAgICAgICAgICAgICAgICAgIHkgPSBwb2ludHNbaisxXTtcblxuICAgICAgICAgICAgICAgICAgICBtaW5YID0geC1saW5lV2lkdGggPCBtaW5YID8geC1saW5lV2lkdGggOiBtaW5YO1xuICAgICAgICAgICAgICAgICAgICBtYXhYID0geCtsaW5lV2lkdGggPiBtYXhYID8geCtsaW5lV2lkdGggOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblkgPSB5LWxpbmVXaWR0aCA8IG1pblkgPyB5LWxpbmVXaWR0aCA6IG1pblk7XG4gICAgICAgICAgICAgICAgICAgIG1heFkgPSB5K2xpbmVXaWR0aCA+IG1heFkgPyB5K2xpbmVXaWR0aCA6IG1heFk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIG1pblggPSAwO1xuICAgICAgICBtYXhYID0gMDtcbiAgICAgICAgbWluWSA9IDA7XG4gICAgICAgIG1heFkgPSAwO1xuICAgIH1cblxuICAgIHZhciBwYWRkaW5nID0gdGhpcy5ib3VuZHNQYWRkaW5nO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueCA9IG1pblggLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLndpZHRoID0gKG1heFggLSBtaW5YKSArIHBhZGRpbmcgKiAyO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueSA9IG1pblkgLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLmhlaWdodCA9IChtYXhZIC0gbWluWSkgKyBwYWRkaW5nICogMjtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjYWNoZWQgc3ByaXRlIHdoZW4gdGhlIHNwcml0ZSBoYXMgY2FjaGVBc0JpdG1hcCA9IHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIGlmICghdGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgdmFyIGNhbnZhc0J1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcbiAgICAgICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzQnVmZmVyLmNhbnZhcyk7XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlciA9IGNhbnZhc0J1ZmZlcjtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLnJlc2l6ZShib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIC8vIGxldmVyYWdlIHRoZSBhbmNob3IgdG8gYWNjb3VudCBmb3IgdGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudFxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQuc2F2ZSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC50cmFuc2xhdGUoLWJvdW5kcy54LC1ib3VuZHMueSk7XG5cbiAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3MgdG8gMSBmb3IgdGhlIHJlbmRlci4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIG5vdyByZW5kZXIgdGhlIGdyYXBoaWMuLlxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dCk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xufTtcbiovXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVDYWNoZWRTcHJpdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2FjaGVkU3ByaXRlID0gdGhpcy5fY2FjaGVkU3ByaXRlO1xuICAgIHZhciB0ZXh0dXJlID0gY2FjaGVkU3ByaXRlLnRleHR1cmU7XG4gICAgdmFyIGNhbnZhcyA9IGNhY2hlZFNwcml0ZS5idWZmZXIuY2FudmFzO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG4gICAgdGV4dHVyZS5jcm9wLndpZHRoID0gdGV4dHVyZS5mcmFtZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmNyb3AuaGVpZ2h0ID0gdGV4dHVyZS5mcmFtZS5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgY2FjaGVkU3ByaXRlLl93aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICBjYWNoZWRTcHJpdGUuX2hlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIGRpcnR5IGJhc2UgdGV4dHVyZXNcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmRpcnR5KCk7XG59OyovXG5cbi8qKlxuICogRGVzdHJveXMgYSBwcmV2aW91cyBjYWNoZWQgc3ByaXRlLlxuICpcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95Q2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUudGV4dHVyZS5kZXN0cm95KHRydWUpO1xuXG4gICAgLy8gbGV0IHRoZSBnYyBjb2xsZWN0IHRoZSB1bnVzZWQgc3ByaXRlXG4gICAgLy8gVE9ETyBjb3VsZCBiZSBvYmplY3QgcG9vbGVkIVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59OyovXG5cbi8qKlxuICogRHJhd3MgdGhlIGdpdmVuIHNoYXBlIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LiBDYW4gYmUgYW55IG9mIENpcmNsZSwgUmVjdGFuZ2xlLCBFbGxpcHNlLCBMaW5lIG9yIFBvbHlnb24uXG4gKlxuICogQHBhcmFtIHNoYXBlIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc0RhdGF9IFRoZSBnZW5lcmF0ZWQgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdTaGFwZSA9IGZ1bmN0aW9uIChzaGFwZSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIC8vIGNoZWNrIGN1cnJlbnQgcGF0aCFcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YS5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgdmFyIGRhdGEgPSBuZXcgR3JhcGhpY3NEYXRhKHRoaXMubGluZVdpZHRoLCB0aGlzLmxpbmVDb2xvciwgdGhpcy5saW5lQWxwaGEsIHRoaXMuZmlsbENvbG9yLCB0aGlzLmZpbGxBbHBoYSwgdGhpcy5maWxsaW5nLCBzaGFwZSk7XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YS5wdXNoKGRhdGEpO1xuXG4gICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAge1xuICAgICAgICBkYXRhLnNoYXBlLmNsb3NlZCA9IGRhdGEuc2hhcGUuY2xvc2VkIHx8IHRoaXMuZmlsbGluZztcbiAgICAgICAgdGhpcy5jdXJyZW50UGF0aCA9IGRhdGE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGRhdGE7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgLy8gZGVzdHJveSBlYWNoIG9mIHRoZSBHcmFwaGljc0RhdGEgb2JqZWN0c1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8vIGZvciBlYWNoIHdlYmdsIGRhdGEgZW50cnksIGRlc3Ryb3kgdGhlIFdlYkdMR3JhcGhpY3NEYXRhXG4gICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fd2ViZ2wpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl93ZWJnbFtpZF0uZGF0YS5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgdGhpcy5fd2ViZ2xbaWRdLmRhdGFbal0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG4gICAgdGhpcy5fd2ViZ2wgPSBudWxsO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEEgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gbGluZVdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gZmlsbENvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGxBbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBmaWxsICAgICAge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICogQHBhcmFtIHNoYXBlICAgICB7Q2lyY2xlfFJlY3RhbmdsZXxFbGxpcHNlfExpbmV8UG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICovXG5mdW5jdGlvbiBHcmFwaGljc0RhdGEobGluZVdpZHRoLCBsaW5lQ29sb3IsIGxpbmVBbHBoYSwgZmlsbENvbG9yLCBmaWxsQWxwaGEsIGZpbGwsIHNoYXBlKVxue1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQ29sb3IgPSBsaW5lQ29sb3I7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQWxwaGEgPSBsaW5lQWxwaGE7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLl9saW5lVGludCA9IGxpbmVDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxDb2xvciA9IGZpbGxDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IGZpbGxBbHBoYTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBjYWNoZWQgdGludCBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuX2ZpbGxUaW50ID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhcGUgaXMgZmlsbGVkIHdpdGggYSBjb2xvdXJcbiAgICAgKi9cbiAgICB0aGlzLmZpbGwgPSBmaWxsO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICAgICAqL1xuICAgIHRoaXMuc2hhcGUgPSBzaGFwZTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBUaGUgdHlwZSBvZiB0aGUgc2hhcGUsIHNlZSB0aGUgQ29uc3QuU2hhcGVzIGZpbGUgZm9yIGFsbCB0aGUgZXhpc3RpbmcgdHlwZXMsXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gc2hhcGUudHlwZTtcbn1cblxuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3NEYXRhIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBHcmFwaGljc0RhdGEoXG4gICAgICAgIHRoaXMubGluZVdpZHRoLFxuICAgICAgICB0aGlzLmxpbmVDb2xvcixcbiAgICAgICAgdGhpcy5saW5lQWxwaGEsXG4gICAgICAgIHRoaXMuZmlsbENvbG9yLFxuICAgICAgICB0aGlzLmZpbGxBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsLFxuICAgICAgICB0aGlzLnNoYXBlXG4gICAgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIGRhdGEuXG4gKi9cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnNoYXBlID0gbnVsbDtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL1dlYkdMR3JhcGhpY3NEYXRhJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuXG4gICAgLy8gc29tZSBkcmF3aW5nIGZ1bmN0aW9ucy4uXG4gICAgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi91dGlscy9idWlsZExpbmUnKTtcbiAgICBidWlsZFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUG9seScpO1xuICAgIGJ1aWxkQ29tcGxleFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ29tcGxleFBvbHknKTtcbiAgICBidWlsZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSZWN0YW5nbGUnKTtcbiAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkQ2lyY2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZENpcmNsZScpO1xuXG4gICAgZWFyY3V0ID0gcmVxdWlyZSgnZWFyY3V0Jyk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IFtdO1xuXG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgYSBwb2x5IGNhbiBjb250YWluIGJlZm9yZSBpdCBpcyByZW5kZXJlZCBhcyBhIGNvbXBsZXggcG9seWdvbiAodXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyKVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgPSAyMDA7XG59XG5cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc1JlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdncmFwaGljcycsIEdyYXBoaWNzUmVuZGVyZXIpO1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMuZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzLmdsKVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHJlbmRlcmVyLlxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YVBvb2wubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBudWxsO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuICAvLyAgY29uc29sZS5sb2coZ3JhcGhpY3MpXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5IHx8ICFncmFwaGljcy5fd2ViR0xbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljcyhncmFwaGljcyk7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIFRoaXMgIGNvdWxkIGJlIHNwZWVkZWQgdXAgZm9yIHN1cmUhXG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggZ3JhcGhpY3MuYmxlbmRNb2RlICk7XG5cbi8vICAgIHZhciBtYXRyaXggPSAgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0uY2xvbmUoKTtcbi8vICAgIHZhciBtYXRyaXggPSAgcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7XG4vLyAgICBtYXRyaXguYXBwZW5kKGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gd2ViR0wuZGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTC5kYXRhW2ldLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyBmaXggdGhpcyBvbmUhXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEgKiB3ZWJHTERhdGEuYWxwaGEpO1xuXG4gICAgICAgICAgICAvLyByZW5kZXIgcXVhZC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgcmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeCA9IGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLmxvY2F0aW9uKTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHVwZGF0ZVxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgLy8gZ2V0IHRoZSBjb250ZXh0cyBncmFwaGljcyBvYmplY3RcbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd2ViR0wgY29udGV4dCB0aW1lIHRvIGNyZWF0ZSBpdCFcbiAgICBpZiAoIXdlYkdMKVxuICAgIHtcbiAgICAgICAgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdID0ge2xhc3RJbmRleDowLCBkYXRhOltdLCBnbDpnbH07XG4gICAgfVxuXG4gICBcbiAgICAvLyBmbGFnIHRoZSBncmFwaGljcyBhcyBub3QgZGlydHkgYXMgd2UgYXJlIGFib3V0IHRvIHVwZGF0ZSBpdC4uLlxuICAgIGdyYXBoaWNzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB2YXIgaTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGNsZWFyZWQgdGhlIGdyYXBoaWNzIG9iamVjdCB3ZSB3aWxsIG5lZWQgdG8gY2xlYXIgZXZlcnkgb2JqZWN0XG4gICAgaWYgKGdyYXBoaWNzLmNsZWFyRGlydHkpXG4gICAge1xuICAgICAgICBncmFwaGljcy5jbGVhckRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuZCByZXR1cm4gYWxsIHRoZSB3ZWJHTERhdGFzIHRvIHRoZSBvYmplY3QgcG9vbCBzbyB0aGFuIGNhbiBiZSByZXVzZWQgbGF0ZXIgb25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBncmFwaGljc0RhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucHVzaCggZ3JhcGhpY3NEYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgYXJyYXkgYW5kIHJlc2V0IHRoZSBpbmRleC4uXG4gICAgICAgIHdlYkdMLmRhdGEgPSBbXTtcbiAgICAgICAgd2ViR0wubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBncmFwaGljcyBkYXRhcyBhbmQgY29uc3RydWN0IGVhY2ggb25lLi5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGEgY29tcGxleCBmaWxsIHRoZW4gdGhlIG5ldyBzdGVuY2lsIGJ1ZmZlciB0ZWNobmlxdWUgd2lsbCBiZSB1c2VkXG4gICAgLy8gb3RoZXIgd2lzZSBncmFwaGljcyBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIGludG8gYSBiYXRjaC4uXG4gICAgZm9yIChpID0gd2ViR0wubGFzdEluZGV4OyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBwb2ludHMgdGhlIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgICAgICAgICAgZGF0YS5wb2ludHMgPSBkYXRhLnNoYXBlLnBvaW50cy5zbGljZSgpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBwb2x5IGlmIHRoZSB2YWx1ZSBpcyB0cnVlIVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50c1swXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTJdIHx8IGRhdGEucG9pbnRzWzFdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKGRhdGEucG9pbnRzWzBdLCBkYXRhLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNQUtFIFNVUkUgV0UgSEFWRSBUSEUgQ09SUkVDVCBUWVBFLi5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA+PSA2KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA8IHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplICogMilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkRyYXdVc2luZ1NpbXBsZSA9IGJ1aWxkUG9seShkYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkRyYXdVc2luZ1NpbXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoID4gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuICAgICAgICAgICAgICAgIGJ1aWxkTGluZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMgfHwgZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZENpcmNsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCsrO1xuICAgIH1cblxuICAgIC8vIHVwbG9hZCBhbGwgdGhlIGRpcnR5IGRhdGEuLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5kaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhLnVwbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gd2ViR0wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSBUT0RPIEBBbHZpblxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5zd2l0Y2hNb2RlID0gZnVuY3Rpb24gKHdlYkdMLCB0eXBlKVxue1xuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICBpZiAoIXdlYkdMLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbd2ViR0wuZGF0YS5sZW5ndGgtMV07XG5cbiAgICAgICAgaWYgKCh3ZWJHTERhdGEucG9pbnRzLmxlbmd0aCA+IDMyMDAwMCkgfHwgd2ViR0xEYXRhLm1vZGUgIT09IHR5cGUgfHwgdHlwZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdlYkdMRGF0YS5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gd2ViR0xEYXRhO1xufTtcblxuIiwiLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyBXZWJHTCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gV2ViR0xHcmFwaGljc0RhdGEoZ2wpIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vVE9ETyBkb2VzIHRoaXMgbmVlZCB0byBiZSBzcGxpdCBiZWZvcmUgdXBsb2Rpbmc/P1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvbG9yIGNvbXBvbmVudHMgKHIsZyxiKVxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3IgPSBbMCwwLDBdOyAvLyBjb2xvciBzcGxpdCFcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBvaW50cyB0byBkcmF3XG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIHRvZG8gQGFsdmluXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubW9kZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGdyYXBoaWNzIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHZlcnRpY2VzIGFuZCB0aGUgaW5kaWNlc1xuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb2ludHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmluZGljZXMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4vLyAgICB0aGlzLmxhc3RJbmRleCA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5nbFBvaW50cyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5wb2ludHMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuYnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5nbFBvaW50cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5nbEluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuZ2xJbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLnBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBcbiAgICB0aGlzLmdsID0gbnVsbDtcblxuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoZ2wpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgZ2wsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgY2lyY2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byBkcmF3XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ2lyY2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIHZhciBjaXJjbGVEYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gY2lyY2xlRGF0YS54O1xuICAgIHZhciB5ID0gY2lyY2xlRGF0YS55O1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuXG4gICAgLy8gVE9ETyAtIGJpdCBoYWNreT8/XG4gICAgaWYgKGdyYXBoaWNzRGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB0b3RhbFNlZ3MgPSBNYXRoLmZsb29yKDMwICogTWF0aC5zcXJ0KGNpcmNsZURhdGEucmFkaXVzKSkgfHwgTWF0aC5mbG9vcigxNSAqIE1hdGguc3FydChjaXJjbGVEYXRhLndpZHRoICsgY2lyY2xlRGF0YS5oZWlnaHQpKTtcbiAgICB2YXIgc2VnID0gKE1hdGguUEkgKiAyKSAvIHRvdGFsU2VncyA7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcyk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDEgOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCx5LCByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKyssIHZlY1BvcysrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MtMSk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDaXJjbGU7IiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuICAgIFxuXG5cbi8qKlxuICogQnVpbGRzIGEgY29tcGxleCBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDb21wbGV4UG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvL1RPRE8gLSBubyBuZWVkIHRvIGNvcHkgdGhpcyBhcyBpdCBnZXRzIHR1cm5lZCBpbnRvIGEgRkxvYXQzMkFycmF5IGFueXdheXMuLlxuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzLnNsaWNlKCk7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDYpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgd2ViR0xEYXRhLnBvaW50cyA9IHBvaW50cztcbiAgICB3ZWJHTERhdGEuYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHdlYkdMRGF0YS5jb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG5cbiAgICAvLyBjYWxjbGF0ZSB0aGUgYm91bmRzLi5cbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIHZhciB4LHk7XG5cbiAgICAvLyBnZXQgc2l6ZS4uXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKz0yKVxuICAgIHtcbiAgICAgICAgeCA9IHBvaW50c1tpXTtcbiAgICAgICAgeSA9IHBvaW50c1tpKzFdO1xuXG4gICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICBtYXhYID0geCA+IG1heFggPyB4IDogbWF4WDtcblxuICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcbiAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgcXVhZCB0byB0aGUgZW5kIGNvcyB0aGVyZSBpcyBubyBwb2ludCBtYWtpbmcgYW5vdGhlciBidWZmZXIhXG4gICAgcG9pbnRzLnB1c2gobWluWCwgbWluWSxcbiAgICAgICAgICAgICAgICBtYXhYLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1heFksXG4gICAgICAgICAgICAgICAgbWluWCwgbWF4WSk7XG5cbiAgICAvLyBwdXNoIGEgcXVhZCBvbnRvIHRoZSBlbmQuLlxuXG4gICAgLy9UT0RPIC0gdGhpcyBhaW50IG5lZWRlZCFcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKCBpICk7XG4gICAgfVxuXG59O1xuXG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENvbXBsZXhQb2x5OyIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBsaW5lIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRMaW5lID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIFRPRE8gT1BUSU1JU0UhXG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGlmIHRoZSBsaW5lIHdpZHRoIGlzIGFuIG9kZCBudW1iZXIgYWRkIDAuNSB0byBhbGlnbiB0byBhIHdob2xlIHBpeGVsXG4gICAgLy8gY29tbWVudGluZyB0aGlzIG91dCBmaXhlcyAjNzExIGFuZCAjMTYyMFxuICAgIC8vIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoJTIpXG4gICAgLy8ge1xuICAgIC8vICAgICBmb3IgKGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKVxuICAgIC8vICAgICB7XG4gICAgLy8gICAgICAgICBwb2ludHNbaV0gKz0gMC41O1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBmaXJzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgIHZhciBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgIC8vIGlmIHRoZSBmaXJzdCBwb2ludCBpcyB0aGUgbGFzdCBwb2ludCAtIGdvbm5hIGhhdmUgaXNzdWVzIDopXG4gICAgaWYgKGZpcnN0UG9pbnQueCA9PT0gbGFzdFBvaW50LnggJiYgZmlyc3RQb2ludC55ID09PSBsYXN0UG9pbnQueSlcbiAgICB7XG4gICAgICAgIC8vIG5lZWQgdG8gY2xvbmUgYXMgd2UgYXJlIGdvaW5nIHRvIHNsaWdodGx5IG1vZGlmeSB0aGUgc2hhcGUuLlxuICAgICAgICBwb2ludHMgPSBwb2ludHMuc2xpY2UoKTtcblxuICAgICAgICBwb2ludHMucG9wKCk7XG4gICAgICAgIHBvaW50cy5wb3AoKTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgICAgICB2YXIgbWlkUG9pbnRYID0gbGFzdFBvaW50LnggKyAoZmlyc3RQb2ludC54IC0gbGFzdFBvaW50LngpICowLjU7XG4gICAgICAgIHZhciBtaWRQb2ludFkgPSBsYXN0UG9pbnQueSArIChmaXJzdFBvaW50LnkgLSBsYXN0UG9pbnQueSkgKjAuNTtcblxuICAgICAgICBwb2ludHMudW5zaGlmdChtaWRQb2ludFgsIG1pZFBvaW50WSk7XG4gICAgICAgIHBvaW50cy5wdXNoKG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICB9XG5cbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgIHZhciBpbmRleENvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICB2YXIgaW5kZXhTdGFydCA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgLy8gRFJBVyB0aGUgTGluZVxuICAgIHZhciB3aWR0aCA9IGdyYXBoaWNzRGF0YS5saW5lV2lkdGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmxpbmVDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmxpbmVBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciBweCwgcHksIHAxeCwgcDF5LCBwMngsIHAyeSwgcDN4LCBwM3k7XG4gICAgdmFyIHBlcnB4LCBwZXJweSwgcGVycDJ4LCBwZXJwMnksIHBlcnAzeCwgcGVycDN5O1xuICAgIHZhciBhMSwgYjEsIGMxLCBhMiwgYjIsIGMyO1xuICAgIHZhciBkZW5vbSwgcGRpc3QsIGRpc3Q7XG5cbiAgICBwMXggPSBwb2ludHNbMF07XG4gICAgcDF5ID0gcG9pbnRzWzFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWzJdO1xuICAgIHAyeSA9IHBvaW50c1szXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gIHAxeCAtIHAyeDtcblxuICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG5cbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAvLyBzdGFydFxuICAgIHZlcnRzLnB1c2gocDF4IC0gcGVycHggLCBwMXkgLSBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAxeCArIHBlcnB4ICwgcDF5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgZm9yIChpID0gMTsgaSA8IGxlbmd0aC0xOyBpKyspXG4gICAge1xuICAgICAgICBwMXggPSBwb2ludHNbKGktMSkqMl07XG4gICAgICAgIHAxeSA9IHBvaW50c1soaS0xKSoyICsgMV07XG5cbiAgICAgICAgcDJ4ID0gcG9pbnRzWyhpKSoyXTtcbiAgICAgICAgcDJ5ID0gcG9pbnRzWyhpKSoyICsgMV07XG5cbiAgICAgICAgcDN4ID0gcG9pbnRzWyhpKzEpKjJdO1xuICAgICAgICBwM3kgPSBwb2ludHNbKGkrMSkqMiArIDFdO1xuXG4gICAgICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgICAgICBwZXJweSA9IHAxeCAtIHAyeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgICAgICBwZXJweCAvPSBkaXN0O1xuICAgICAgICBwZXJweSAvPSBkaXN0O1xuICAgICAgICBwZXJweCAqPSB3aWR0aDtcbiAgICAgICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAgICAgcGVycDJ4ID0gLShwMnkgLSBwM3kpO1xuICAgICAgICBwZXJwMnkgPSBwMnggLSBwM3g7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwMngqcGVycDJ4ICsgcGVycDJ5KnBlcnAyeSk7XG4gICAgICAgIHBlcnAyeCAvPSBkaXN0O1xuICAgICAgICBwZXJwMnkgLz0gZGlzdDtcbiAgICAgICAgcGVycDJ4ICo9IHdpZHRoO1xuICAgICAgICBwZXJwMnkgKj0gd2lkdGg7XG5cbiAgICAgICAgYTEgPSAoLXBlcnB5ICsgcDF5KSAtICgtcGVycHkgKyBwMnkpO1xuICAgICAgICBiMSA9ICgtcGVycHggKyBwMngpIC0gKC1wZXJweCArIHAxeCk7XG4gICAgICAgIGMxID0gKC1wZXJweCArIHAxeCkgKiAoLXBlcnB5ICsgcDJ5KSAtICgtcGVycHggKyBwMngpICogKC1wZXJweSArIHAxeSk7XG4gICAgICAgIGEyID0gKC1wZXJwMnkgKyBwM3kpIC0gKC1wZXJwMnkgKyBwMnkpO1xuICAgICAgICBiMiA9ICgtcGVycDJ4ICsgcDJ4KSAtICgtcGVycDJ4ICsgcDN4KTtcbiAgICAgICAgYzIgPSAoLXBlcnAyeCArIHAzeCkgKiAoLXBlcnAyeSArIHAyeSkgLSAoLXBlcnAyeCArIHAyeCkgKiAoLXBlcnAyeSArIHAzeSk7XG5cbiAgICAgICAgZGVub20gPSBhMSpiMiAtIGEyKmIxO1xuXG4gICAgICAgIGlmIChNYXRoLmFicyhkZW5vbSkgPCAwLjEgKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIGRlbm9tKz0xMC4xO1xuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJweCAsIHAyeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBweCA9IChiMSpjMiAtIGIyKmMxKS9kZW5vbTtcbiAgICAgICAgcHkgPSAoYTIqYzEgLSBhMSpjMikvZGVub207XG5cblxuICAgICAgICBwZGlzdCA9IChweCAtcDJ4KSAqIChweCAtcDJ4KSArIChweSAtcDJ5KSAqIChweSAtcDJ5KTtcblxuXG4gICAgICAgIGlmIChwZGlzdCA+IDE0MCAqIDE0MClcbiAgICAgICAge1xuICAgICAgICAgICAgcGVycDN4ID0gcGVycHggLSBwZXJwMng7XG4gICAgICAgICAgICBwZXJwM3kgPSBwZXJweSAtIHBlcnAyeTtcblxuICAgICAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwM3gqcGVycDN4ICsgcGVycDN5KnBlcnAzeSk7XG4gICAgICAgICAgICBwZXJwM3ggLz0gZGlzdDtcbiAgICAgICAgICAgIHBlcnAzeSAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN4ICo9IHdpZHRoO1xuICAgICAgICAgICAgcGVycDN5ICo9IHdpZHRoO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycDN4LCBwMnkgK3BlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJwM3gsIHAyeSAtcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRleENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocHggLCBweSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSAocHgtcDJ4KSwgcDJ5IC0gKHB5IC0gcDJ5KSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHAxeCA9IHBvaW50c1sobGVuZ3RoLTIpKjJdO1xuICAgIHAxeSA9IHBvaW50c1sobGVuZ3RoLTIpKjIgKyAxXTtcblxuICAgIHAyeCA9IHBvaW50c1sobGVuZ3RoLTEpKjJdO1xuICAgIHAyeSA9IHBvaW50c1sobGVuZ3RoLTEpKjIgKyAxXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5KTtcbiAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBpbmRleENvdW50OyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydCsrKTtcbiAgICB9XG5cbiAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydC0xKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRMaW5lOyIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcG9seWdvbiB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuV2ViR0xHcmFwaGljc0RhdGF9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocG9pbnRzLCBudWxsLCAyKTtcblxuICAgIGlmICghdHJpYW5nbGVzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgdmVydFBvcyA9IHZlcnRzLmxlbmd0aCAvIDY7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICt2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVydFBvcyk7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmVydHMucHVzaChwb2ludHNbaSAqIDJdLCBwb2ludHNbaSAqIDIgKyAxXSxcbiAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRQb2x5O1xuIiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHJlY3RhbmdsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIC0tLSAvL1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIC8vXG4gICAgdmFyIHJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcmVjdERhdGEueDtcbiAgICB2YXIgeSA9IHJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJlY3REYXRhLmhlaWdodDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgLy8gc3RhcnRcbiAgICAgICAgdmVydHMucHVzaCh4LCB5KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAvLyBpbnNlcnQgMiBkZWFkIHRyaWFuZ2xlcy4uXG4gICAgICAgIGluZGljZXMucHVzaCh2ZXJ0UG9zLCB2ZXJ0UG9zLCB2ZXJ0UG9zKzEsIHZlcnRQb3MrMiwgdmVydFBvcyszLCB2ZXJ0UG9zKzMpO1xuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSBbeCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHkgKyBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICB4LCB5XTtcblxuXG4gICAgICAgIGJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJlY3RhbmdsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG4vKipcbiAqIEJ1aWxkcyBhIHJvdW5kZWQgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG5idWlsZFJvdW5kZWRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIHJyZWN0RGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IHJyZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcnJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcnJlY3REYXRhLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSBycmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgdmFyIHJhZGl1cyA9IHJyZWN0RGF0YS5yYWRpdXM7XG5cbiAgICB2YXIgcmVjUG9pbnRzID0gW107XG4gICAgcmVjUG9pbnRzLnB1c2goeCwgeSArIHJhZGl1cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4LCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCB4LCB5ICsgaGVpZ2h0LCB4ICsgcmFkaXVzLCB5ICsgaGVpZ2h0LCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoIC0gcmFkaXVzLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCAtIHJhZGl1cywgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyB3aWR0aCwgeSArIHJhZGl1cywgeCArIHdpZHRoLCB5LCB4ICsgd2lkdGggLSByYWRpdXMsIHksIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgcmFkaXVzLCB5LCB4LCB5LCB4LCB5ICsgcmFkaXVzICsgMC4wMDAwMDAwMDAxLCByZWNQb2ludHMpO1xuXG4gICAgLy8gdGhpcyB0aW55IG51bWJlciBkZWFscyB3aXRoIHRoZSBpc3N1ZSB0aGF0IG9jY3VycyB3aGVuIHBvaW50cyBvdmVybGFwIGFuZCBlYXJjdXQgZmFpbHMgdG8gdHJpYW5ndWxhdGUgdGhlIGl0ZW0uXG4gICAgLy8gVE9ETyAtIGZpeCB0aGlzIHByb3Blcmx5LCB0aGlzIGlzIG5vdCB2ZXJ5IGVsZWdhbnQuLiBidXQgaXQgd29ya3MgZm9yIG5vdy5cblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICB2YXIgdHJpYW5nbGVzID0gZWFyY3V0KHJlY1BvaW50cywgbnVsbCwgMik7XG5cbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICAgICAge1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVjUG9zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZWNQb2ludHMubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gocmVjUG9pbnRzW2ldLCByZWNQb2ludHNbKytpXSwgciwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHJlY1BvaW50cztcblxuICAgICAgICB0aGlzLmJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlLiAoaGVscGVyIGZ1bmN0aW9uLi4pXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBmcm9tWCB7bnVtYmVyfSBPcmlnaW4gcG9pbnQgeFxuICogQHBhcmFtIGZyb21ZIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcGFyYW0gW291dF0ge251bWJlcltdfSBUaGUgb3V0cHV0IGFycmF5IHRvIGFkZCBwb2ludHMgaW50by4gSWYgbm90IHBhc3NlZCwgYSBuZXcgYXJyYXkgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm4ge251bWJlcltdfSBhbiBhcnJheSBvZiBwb2ludHNcbiAqL1xucXVhZHJhdGljQmV6aWVyQ3VydmUgPSBmdW5jdGlvbiAoZnJvbVgsIGZyb21ZLCBjcFgsIGNwWSwgdG9YLCB0b1ksIG91dClcbntcbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICB4YixcbiAgICAgICAgeWIsXG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gb3V0IHx8IFtdO1xuXG4gICAgZnVuY3Rpb24gZ2V0UHQobjEgLCBuMiwgcGVyYykge1xuICAgICAgICB2YXIgZGlmZiA9IG4yIC0gbjE7XG5cbiAgICAgICAgcmV0dXJuIG4xICsgKCBkaWZmICogcGVyYyApO1xuICAgIH1cblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBuOyBpKysgKSB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICAvLyBUaGUgR3JlZW4gTGluZVxuICAgICAgICB4YSA9IGdldFB0KCBmcm9tWCAsIGNwWCAsIGogKTtcbiAgICAgICAgeWEgPSBnZXRQdCggZnJvbVkgLCBjcFkgLCBqICk7XG4gICAgICAgIHhiID0gZ2V0UHQoIGNwWCAsIHRvWCAsIGogKTtcbiAgICAgICAgeWIgPSBnZXRQdCggY3BZICwgdG9ZICwgaiApO1xuXG4gICAgICAgIC8vIFRoZSBCbGFjayBEb3RcbiAgICAgICAgeCA9IGdldFB0KCB4YSAsIHhiICwgaiApO1xuICAgICAgICB5ID0gZ2V0UHQoIHlhICwgeWIgLCBqICk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goeCwgeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50cztcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJvdW5kZWRSZWN0YW5nbGU7IiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgY29yZSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWElcbiAqL1xuLy8gZXhwb3J0IGNvcmUgYW5kIGNvbnN0LiBXZSBhc3NpZ24gY29yZSB0byBjb25zdCBzbyB0aGF0IHRoZSBub24tcmVmZXJlbmNlIHR5cGVzIGluIGNvbnN0IHJlbWFpbiBpbi10YWN0XG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihyZXF1aXJlKCcuL2NvbnN0JyksIHJlcXVpcmUoJy4vbWF0aCcpLCB7XG4gICAgLy8gdXRpbHNcbiAgICB1dGlsczogcmVxdWlyZSgnLi91dGlscycpLFxuICAgIHRpY2tlcjogcmVxdWlyZSgnLi90aWNrZXInKSxcblxuICAgIC8vIGRpc3BsYXlcbiAgICBEaXNwbGF5T2JqZWN0OiAgICAgICAgICByZXF1aXJlKCcuL2Rpc3BsYXkvRGlzcGxheU9iamVjdCcpLFxuICAgIENvbnRhaW5lcjogICAgICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9Db250YWluZXInKSxcblxuICAgIC8vIHNwcml0ZXNcbiAgICBTcHJpdGU6ICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgUGFydGljbGVDb250YWluZXI6ICAgICAgcmVxdWlyZSgnLi9wYXJ0aWNsZXMvUGFydGljbGVDb250YWluZXInKSxcbiAgICBTcHJpdGVSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXInKSxcbiAgICBQYXJ0aWNsZVJlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyJyksXG5cbiAgICAvLyB0ZXh0XG4gICAgVGV4dDogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0L1RleHQnKSxcblxuICAgIC8vIHByaW1pdGl2ZXNcbiAgICBHcmFwaGljczogICAgICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzJyksXG4gICAgR3JhcGhpY3NEYXRhOiAgICAgICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljc0RhdGEnKSxcbiAgICBHcmFwaGljc1JlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHR1cmVzXG4gICAgVGV4dHVyZTogICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQmFzZVRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlVGV4dHVyZScpLFxuICAgIFJlbmRlclRleHR1cmU6ICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEJhc2VSZW5kZXJUZXh0dXJlOiAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlOiAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzOiAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmVVdnMnKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIGNhbnZhc1xuICAgIENhbnZhc1JlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIENhbnZhc0J1ZmZlcjogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIHdlYmdsXG4gICAgV2ViR0xSZW5kZXJlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyksXG4gICAgU2hhZGVyTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIFNoYWRlcjogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyJyksXG4gICAgT2JqZWN0UmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBSZW5kZXJUYXJnZXQ6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcblxuICAgIC8vIGZpbHRlcnMgLSB3ZWJnbFxuICAgIEFic3RyYWN0RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBGWEFBRmlsdGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBTcHJpdGVNYXNrRmlsdGVyOiAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKSxcblxuICAgIGdsQ29yZTogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncGl4aS1nbC1jb3JlJyksXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoaWNoIHJlbmRlcmVyIHlvdSBzaG91bGQgYmUgdXNpbmcuXG4gICAgICogV2ViR0wgaXMgdGhlIHByZWZlcnJlZCByZW5kZXJlciBhcyBpdCBpcyBhIGxvdCBmYXN0ZXIuIElmIHdlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnlcbiAgICAgKiB0aGUgYnJvd3NlciB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBjYW52YXMgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHBhcmFtIHdpZHRoPTgwMCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIGhlaWdodD02MDAge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWYgeW91XG4gICAgICogICAgICBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0XG4gICAgICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyLCByZXRpbmEgd291bGQgYmUgMlxuICAgICAqIEBwYXJhbSBbbm9XZWJHTD1mYWxzZV0ge2Jvb2xlYW59IHByZXZlbnRzIHNlbGVjdGlvbiBvZiBXZWJHTCByZW5kZXJlciwgZXZlbiBpZiBzdWNoIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyZXJ8Q2FudmFzUmVuZGVyZXJ9IFJldHVybnMgV2ViR0wgcmVuZGVyZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgQ2FudmFzUmVuZGVyZXJcbiAgICAgKi9cbiAgICBhdXRvRGV0ZWN0UmVuZGVyZXI6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCBub1dlYkdMKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB3aWR0aCB8fCA4MDA7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAgICAgaWYgKCFub1dlYkdMICYmIGNvcmUudXRpbHMuaXNXZWJHTFN1cHBvcnRlZCgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGNvcmUuV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgY29yZS5DYW52YXNSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB9XG59KTtcbiIsIi8vIEB0b2RvIC0gaWdub3JlIHRoZSB0b28gbWFueSBwYXJhbWV0ZXJzIHdhcm5pbmcgZm9yIG5vd1xuLy8gc2hvdWxkIGVpdGhlciBmaXggaXQgb3IgY2hhbmdlIHRoZSBqc2hpbnQgY29uZmlnXG4vLyBqc2hpbnQgLVcwNzJcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xuXG4vKipcbiAqIFRoZSBwaXhpIE1hdHJpeCBjbGFzcyBhcyBhbiBvYmplY3QsIHdoaWNoIG1ha2VzIGl0IGEgbG90IGZhc3RlcixcbiAqIGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBpdCA6XG4gKiB8IGEgfCBiIHwgdHh8XG4gKiB8IGMgfCBkIHwgdHl8XG4gKiB8IDAgfCAwIHwgMSB8XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBNYXRyaXgoKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5iID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5jID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHkgPSAwO1xufVxuXG5NYXRyaXgucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWF0cml4O1xubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1hdHJpeCBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5LiBUaGUgRWxlbWVudCB0byBNYXRyaXggbWFwcGluZyBvcmRlciBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIGEgPSBhcnJheVswXVxuICogYiA9IGFycmF5WzFdXG4gKiBjID0gYXJyYXlbM11cbiAqIGQgPSBhcnJheVs0XVxuICogdHggPSBhcnJheVsyXVxuICogdHkgPSBhcnJheVs1XVxuICpcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119IFRoZSBhcnJheSB0aGF0IHRoZSBtYXRyaXggd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbS5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpXG57XG4gICAgdGhpcy5hID0gYXJyYXlbMF07XG4gICAgdGhpcy5iID0gYXJyYXlbMV07XG4gICAgdGhpcy5jID0gYXJyYXlbM107XG4gICAgdGhpcy5kID0gYXJyYXlbNF07XG4gICAgdGhpcy50eCA9IGFycmF5WzJdO1xuICAgIHRoaXMudHkgPSBhcnJheVs1XTtcbn07XG5cblxuLyoqXG4gKiBzZXRzIHRoZSBtYXRyaXggcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkXG4gKiBAcGFyYW0ge251bWJlcn0gdHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXG57XG4gICAgdGhpcy5hID0gYTtcbiAgICB0aGlzLmIgPSBiO1xuICAgIHRoaXMuYyA9IGM7XG4gICAgdGhpcy5kID0gZDtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy50eSA9IHR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmcm9tIHRoZSBjdXJyZW50IE1hdHJpeCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9zZSB7Ym9vbGVhbn0gV2hldGhlciB3ZSBuZWVkIHRvIHRyYW5zcG9zZSB0aGUgbWF0cml4IG9yIG5vdFxuICogQHBhcmFtIFtvdXRdIHtBcnJheX0gSWYgcHJvdmlkZWQgdGhlIGFycmF5IHdpbGwgYmUgYXNzaWduZWQgdG8gb3V0XG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gdGhlIG5ld2x5IGNyZWF0ZWQgYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAodHJhbnNwb3NlLCBvdXQpXG57XG4gICAgaWYgKCF0aGlzLmFycmF5KVxuICAgIHtcbiAgICAgICAgdGhpcy5hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gb3V0IHx8IHRoaXMuYXJyYXk7XG5cbiAgICBpZiAodHJhbnNwb3NlKVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVsyXSA9IDA7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSAwO1xuICAgICAgICBhcnJheVs2XSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzddID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzJdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzZdID0gMDtcbiAgICAgICAgYXJyYXlbN10gPSAwO1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZSB0byB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gcmVuZGVyaW5nKVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5hICogeCArIHRoaXMuYyAqIHkgKyB0aGlzLnR4O1xuICAgIG5ld1Bvcy55ID0gdGhpcy5iICogeCArIHRoaXMuZCAqIHkgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGludmVyc2Ugb2YgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UgdG8gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIGlucHV0KVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHlJbnZlcnNlID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciBpZCA9IDEgLyAodGhpcy5hICogdGhpcy5kICsgdGhpcy5jICogLXRoaXMuYik7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuZCAqIGlkICogeCArIC10aGlzLmMgKiBpZCAqIHkgKyAodGhpcy50eSAqIHRoaXMuYyAtIHRoaXMudHggKiB0aGlzLmQpICogaWQ7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmEgKiBpZCAqIHkgKyAtdGhpcy5iICogaWQgKiB4ICsgKC10aGlzLnR5ICogdGhpcy5hICsgdGhpcy50eCAqIHRoaXMuYikgKiBpZDtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdHJpeCBvbiB0aGUgeCBhbmQgeS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMudHggKz0geDtcbiAgICB0aGlzLnR5ICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIHNjYWxlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIGFtb3VudCB0byBzY2FsZSBob3Jpem9udGFsbHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSBhbW91bnQgdG8gc2NhbGUgdmVydGljYWxseVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2NhbGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmEgKj0geDtcbiAgICB0aGlzLmQgKj0geTtcbiAgICB0aGlzLmMgKj0geDtcbiAgICB0aGlzLmIgKj0geTtcbiAgICB0aGlzLnR4ICo9IHg7XG4gICAgdGhpcy50eSAqPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyBhIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpXG57XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKCBhbmdsZSApO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbiggYW5nbGUgKTtcblxuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICB0aGlzLmEgPSBhMSAqIGNvcy10aGlzLmIgKiBzaW47XG4gICAgdGhpcy5iID0gYTEgKiBzaW4rdGhpcy5iICogY29zO1xuICAgIHRoaXMuYyA9IGMxICogY29zLXRoaXMuZCAqIHNpbjtcbiAgICB0aGlzLmQgPSBjMSAqIHNpbit0aGlzLmQgKiBjb3M7XG4gICAgdGhpcy50eCA9IHR4MSAqIGNvcyAtIHRoaXMudHkgKiBzaW47XG4gICAgdGhpcy50eSA9IHR4MSAqIHNpbiArIHRoaXMudHkgKiBjb3M7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG5cbiAgICB0aGlzLmEgID0gbWF0cml4LmEgKiBhMSArIG1hdHJpeC5iICogYzE7XG4gICAgdGhpcy5iICA9IG1hdHJpeC5hICogYjEgKyBtYXRyaXguYiAqIGQxO1xuICAgIHRoaXMuYyAgPSBtYXRyaXguYyAqIGExICsgbWF0cml4LmQgKiBjMTtcbiAgICB0aGlzLmQgID0gbWF0cml4LmMgKiBiMSArIG1hdHJpeC5kICogZDE7XG5cbiAgICB0aGlzLnR4ID0gbWF0cml4LnR4ICogYTEgKyBtYXRyaXgudHkgKiBjMSArIHRoaXMudHg7XG4gICAgdGhpcy50eSA9IG1hdHJpeC50eCAqIGIxICsgbWF0cml4LnR5ICogZDEgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1hdHJpeCBiYXNlZCBvbiBhbGwgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RYXG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RZXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXG4gKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WFxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdZXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKHgsIHksIHBpdm90WCwgcGl2b3RZLCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSlcbntcbiAgICB2YXIgYSwgYiwgYywgZCwgc3IsIGNyLCBjeSwgc3ksIG5zeCwgY3g7XG5cbiAgICBzciAgPSBNYXRoLnNpbihyb3RhdGlvbik7XG4gICAgY3IgID0gTWF0aC5jb3Mocm90YXRpb24pO1xuICAgIGN5ICA9IE1hdGguY29zKHNrZXdZKTtcbiAgICBzeSAgPSBNYXRoLnNpbihza2V3WSk7XG4gICAgbnN4ID0gLU1hdGguc2luKHNrZXdYKTtcbiAgICBjeCAgPSAgTWF0aC5jb3Moc2tld1gpO1xuXG4gICAgYSAgPSAgY3IgKiBzY2FsZVg7XG4gICAgYiAgPSAgc3IgKiBzY2FsZVg7XG4gICAgYyAgPSAtc3IgKiBzY2FsZVk7XG4gICAgZCAgPSAgY3IgKiBzY2FsZVk7XG5cbiAgICB0aGlzLmEgID0gY3kgKiBhICsgc3kgKiBjO1xuICAgIHRoaXMuYiAgPSBjeSAqIGIgKyBzeSAqIGQ7XG4gICAgdGhpcy5jICA9IG5zeCAqIGEgKyBjeCAqIGM7XG4gICAgdGhpcy5kICA9IG5zeCAqIGIgKyBjeCAqIGQ7XG5cbiAgICB0aGlzLnR4ID0geCArICggcGl2b3RYICogYSArIHBpdm90WSAqIGMgKTtcbiAgICB0aGlzLnR5ID0geSArICggcGl2b3RYICogYiArIHBpdm90WSAqIGQgKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQcmVwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uKG1hdHJpeClcbntcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIGlmIChtYXRyaXguYSAhPT0gMSB8fCBtYXRyaXguYiAhPT0gMCB8fCBtYXRyaXguYyAhPT0gMCB8fCBtYXRyaXguZCAhPT0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICAgICAgdmFyIGMxID0gdGhpcy5jO1xuICAgICAgICB0aGlzLmEgID0gYTEqbWF0cml4LmErdGhpcy5iKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmIgID0gYTEqbWF0cml4LmIrdGhpcy5iKm1hdHJpeC5kO1xuICAgICAgICB0aGlzLmMgID0gYzEqbWF0cml4LmErdGhpcy5kKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmQgID0gYzEqbWF0cml4LmIrdGhpcy5kKm1hdHJpeC5kO1xuICAgIH1cblxuICAgIHRoaXMudHggPSB0eDEqbWF0cml4LmErdGhpcy50eSptYXRyaXguYyttYXRyaXgudHg7XG4gICAgdGhpcy50eSA9IHR4MSptYXRyaXguYit0aGlzLnR5Km1hdHJpeC5kK21hdHJpeC50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0ID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcbiAgICB2YXIgbiA9IGExKmQxLWIxKmMxO1xuXG4gICAgdGhpcy5hID0gZDEvbjtcbiAgICB0aGlzLmIgPSAtYjEvbjtcbiAgICB0aGlzLmMgPSAtYzEvbjtcbiAgICB0aGlzLmQgPSBhMS9uO1xuICAgIHRoaXMudHggPSAoYzEqdGhpcy50eS1kMSp0eDEpL247XG4gICAgdGhpcy50eSA9IC0oYTEqdGhpcy50eS1iMSp0eDEpL247XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBSZXNldHMgdGhpcyBNYXRpeCB0byBhbiBpZGVudGl0eSAoZGVmYXVsdCkgbWF0cml4LlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmlkZW50aXR5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmEgPSAxO1xuICAgIHRoaXMuYiA9IDA7XG4gICAgdGhpcy5jID0gMDtcbiAgICB0aGlzLmQgPSAxO1xuICAgIHRoaXMudHggPSAwO1xuICAgIHRoaXMudHkgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgTWF0cml4IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gQSBjb3B5IG9mIHRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgdmFsdWVzIG9mIHRoZSBnaXZlbiBtYXRyaXggdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZXMgaW4gdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhlIG1hdHJpeCBnaXZlbiBpbiBwYXJhbWV0ZXIgd2l0aCBpdHMgdmFsdWVzIHVwZGF0ZWQuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQSBkZWZhdWx0IChpZGVudGl0eSkgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5JREVOVElUWSA9IG5ldyBNYXRyaXgoKTtcblxuLyoqXG4gKiBBIHRlbXAgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5URU1QX01BVFJJWCA9IG5ldyBNYXRyaXgoKTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcbn1cblxuUG9pbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvaW50XG4gKlxuICogQHJldHVybiB7UElYSS5Qb2ludH0gYSBjb3B5IG9mIHRoZSBwb2ludFxuICovXG5Qb2ludC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBDb3BpZXMgeCBhbmQgeSBmcm9tIHRoZSBnaXZlbiBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICovXG5Qb2ludC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgdGhpcy5zZXQocC54LCBwLnkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGVxdWFsIHRvIHRoaXMgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gKHAueCA9PT0gdGhpcy54KSAmJiAocC55ID09PSB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5Qb2ludC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy54ID0geCB8fCAwO1xuICAgIHRoaXMueSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLnggOiAwICkgO1xufTtcbiIsIi8qKlxuICogTWF0aCBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgbWl4ZWQgaW50byBQSVhJIG5hbWVzcGFjZS5cbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBUaGVzZSB3aWxsIGJlIG1peGVkIHRvIGJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLFxuICAgIC8vIHdoaWxlIHRoaXMgbW9kdWxlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBjb3JlXG4gICAgLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBjdXQgZG93biBvblxuICAgIC8vIGludGVybmFsIG1vZHVsZSByZXF1aXJlcy5cblxuICAgIFBvaW50OiAgICAgIHJlcXVpcmUoJy4vUG9pbnQnKSxcbiAgICBNYXRyaXg6ICAgICByZXF1aXJlKCcuL01hdHJpeCcpLFxuXG4gICAgQ2lyY2xlOiAgICAgcmVxdWlyZSgnLi9zaGFwZXMvQ2lyY2xlJyksXG4gICAgRWxsaXBzZTogICAgcmVxdWlyZSgnLi9zaGFwZXMvRWxsaXBzZScpLFxuICAgIFBvbHlnb246ICAgIHJlcXVpcmUoJy4vc2hhcGVzL1BvbHlnb24nKSxcbiAgICBSZWN0YW5nbGU6ICByZXF1aXJlKCcuL3NoYXBlcy9SZWN0YW5nbGUnKSxcbiAgICBSb3VuZGVkUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlJylcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIENpcmNsZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICovXG5mdW5jdGlvbiBDaXJjbGUoeCwgeSwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkNJUkM7XG59XG5cbkNpcmNsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaXJjbGU7XG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBDaXJjbGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkNpcmNsZX0gYSBjb3B5IG9mIHRoZSBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBDaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBjaXJjbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmFkaXVzIDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGR4ID0gKHRoaXMueCAtIHgpLFxuICAgICAgICBkeSA9ICh0aGlzLnkgLSB5KSxcbiAgICAgICAgcjIgPSB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzO1xuXG4gICAgZHggKj0gZHg7XG4gICAgZHkgKj0gZHk7XG5cbiAgICByZXR1cm4gKGR4ICsgZHkgPD0gcjIpO1xufTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBjaXJjbGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4qIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiovXG5DaXJjbGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy5yYWRpdXMsIHRoaXMueSAtIHRoaXMucmFkaXVzLCB0aGlzLnJhZGl1cyAqIDIsIHRoaXMucmFkaXVzICogMik7XG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBFbGxpcHNlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGlzIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZVxuICovXG5mdW5jdGlvbiBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkVMSVA7XG59XG5cbkVsbGlwc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRWxsaXBzZTtcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBFbGxpcHNlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5FbGxpcHNlfSBhIGNvcHkgb2YgdGhlIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgRWxsaXBzZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRzIGFyZSB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vbm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDBcbiAgICB2YXIgbm9ybXggPSAoKHggLSB0aGlzLngpIC8gdGhpcy53aWR0aCksXG4gICAgICAgIG5vcm15ID0gKCh5IC0gdGhpcy55KSAvIHRoaXMuaGVpZ2h0KTtcblxuICAgIG5vcm14ICo9IG5vcm14O1xuICAgIG5vcm15ICo9IG5vcm15O1xuXG4gICAgcmV0dXJuIChub3JteCArIG5vcm15IDw9IDEpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgZWxsaXBzZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy53aWR0aCwgdGhpcy55IC0gdGhpcy5oZWlnaHQsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG4iLCJ2YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9Qb2ludCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcG9pbnRzIHtQSVhJLlBvaW50W118bnVtYmVyW118Li4uUElYSS5Qb2ludHwuLi5udW1iZXJ9IFRoaXMgY2FuIGJlIGFuIGFycmF5IG9mIFBvaW50cyB0aGF0IGZvcm0gdGhlIHBvbHlnb24sXG4gKiAgICAgIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIHRoYXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBbeCx5LCB4LHksIC4uLl0sIG9yIHRoZSBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZVxuICogICAgICBhbGwgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvbiBlLmcuIGBuZXcgUElYSS5Qb2x5Z29uKG5ldyBQSVhJLlBvaW50KCksIG5ldyBQSVhJLlBvaW50KCksIC4uLilgLCBvciB0aGVcbiAqICAgICAgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmUgZmxhdCB4LHkgdmFsdWVzIGUuZy4gYG5ldyBQb2x5Z29uKHgseSwgeCx5LCB4LHksIC4uLilgIHdoZXJlIGB4YCBhbmQgYHlgIGFyZVxuICogICAgICBOdW1iZXJzLlxuICovXG5mdW5jdGlvbiBQb2x5Z29uKHBvaW50c18pXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBvaW50c187XG5cbiAgICAvL2lmIHBvaW50cyBpc24ndCBhbiBhcnJheSwgdXNlIGFyZ3VtZW50cyBhcyB0aGUgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgcG9pbnRzLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICBwb2ludHNbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IG9mIHBvaW50cywgY29udmVydCBpdCB0byBhIGZsYXQgYXJyYXkgb2YgbnVtYmVyc1xuICAgIGlmIChwb2ludHNbMF0gaW5zdGFuY2VvZiBQb2ludClcbiAgICB7XG4gICAgICAgIHZhciBwID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBwLnB1c2gocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50cyA9IHA7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5QT0xZO1xufVxuXG5Qb2x5Z29uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvbHlnb247XG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9seWdvblxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9seWdvbn0gYSBjb3B5IG9mIHRoZSBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvbHlnb24odGhpcy5wb2ludHMuc2xpY2UoKSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcG9seWdvblxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBpbnNpZGUgPSBmYWxzZTtcblxuICAgIC8vIHVzZSBzb21lIHJheWNhc3RpbmcgdG8gdGVzdCBoaXRzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL3BvaW50LWluLXBvbHlnb24vYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5wb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbGVuZ3RoIC0gMTsgaSA8IGxlbmd0aDsgaiA9IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB4aSA9IHRoaXMucG9pbnRzW2kgKiAyXSwgeWkgPSB0aGlzLnBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgeGogPSB0aGlzLnBvaW50c1tqICogMl0sIHlqID0gdGhpcy5wb2ludHNbaiAqIDIgKyAxXSxcbiAgICAgICAgICAgIGludGVyc2VjdCA9ICgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICh4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aSk7XG5cbiAgICAgICAgaWYgKGludGVyc2VjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiB0aGUgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcmVjdGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SRUNUO1xufVxuXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XG5cbi8qKlxuICogQSBjb25zdGFudCBlbXB0eSByZWN0YW5nbGUuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblJlY3RhbmdsZS5FTVBUWSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDwgdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDwgdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFJvdW5kZWQgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIHRoYXQgaGFzIG5pY2Ugcm91bmRlZCBjb3JuZXJzLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodCBhbmQgaXRzIHJhZGl1cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gQ29udHJvbHMgdGhlIHJhZGl1cyBvZiB0aGUgcm91bmRlZCBjb3JuZXJzXG4gKi9cbmZ1bmN0aW9uIFJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJSRUM7XG59XG5cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm91bmRlZFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUm91bmRlZFJlY3RhbmdsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUm91bmRlZFJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSb3VuZGVkUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8PSB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUGFydGljbGVDb250YWluZXIgY2xhc3MgaXMgYSByZWFsbHkgZmFzdCB2ZXJzaW9uIG9mIHRoZSBDb250YWluZXIgYnVpbHQgc29sZWx5IGZvciBzcGVlZCxcbiAqIHNvIHVzZSB3aGVuIHlvdSBuZWVkIGEgbG90IG9mIHNwcml0ZXMgb3IgcGFydGljbGVzLiBUaGUgdHJhZGVvZmYgb2YgdGhlIFBhcnRpY2xlQ29udGFpbmVyIGlzIHRoYXQgYWR2YW5jZWRcbiAqIGZ1bmN0aW9uYWxpdHkgd2lsbCBub3Qgd29yay4gUGFydGljbGVDb250YWluZXIgaW1wbGVtZW50cyBvbmx5IHRoZSBiYXNpYyBvYmplY3QgdHJhbnNmb3JtIChwb3NpdGlvbiwgc2NhbGUsIHJvdGF0aW9uKS5cbiAqIEFueSBvdGhlciBmdW5jdGlvbmFsaXR5IGxpa2UgdGludGluZywgbWFza2luZywgZXRjIHdpbGwgbm90IHdvcmsgb24gc3ByaXRlcyBpbiB0aGlzIGJhdGNoLlxuICpcbiAqIEl0J3MgZXh0cmVtZWx5IGVhc3kgdG8gdXNlIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQYXJ0aWNsZUNvbnRhaW5lcigpO1xuICpcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpXG4gKiB7XG4gKiAgICAgdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJteUltYWdlLnBuZ1wiKTtcbiAqICAgICBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEFuZCBoZXJlIHlvdSBoYXZlIGEgaHVuZHJlZCBzcHJpdGVzIHRoYXQgd2lsbCBiZSByZW5kZXJlciBhdCB0aGUgc3BlZWQgb2YgbGlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbbWF4U2l6ZT0xNTAwMF0ge251bWJlcn0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGF0IGNhbiBiZSByZW5kZXJlciBieSB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzXSB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyBvZiBjaGlsZHJlbiB0aGF0IHNob3VsZCBiZSB1cGxvYWRlZCB0byB0aGUgZ3B1IGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnNjYWxlPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBzY2FsZSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5wb3NpdGlvbj10cnVlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBwb3NpdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5yb3RhdGlvbj1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcm90YXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMudXZzPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCB1dnMgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuYWxwaGE9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIGFscGhhIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtiYXRjaFNpemU9MTUwMDBdIHtudW1iZXJ9IE51bWJlciBvZiBwYXJ0aWNsZXMgcGVyIGJhdGNoLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUNvbnRhaW5lcihtYXhTaXplLCBwcm9wZXJ0aWVzLCBiYXRjaFNpemUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBiYXRjaFNpemUgPSBiYXRjaFNpemUgfHwgMTUwMDA7IC8vQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG4gICAgbWF4U2l6ZSA9IG1heFNpemUgfHwgMTUwMDA7XG5cbiAgICAvLyBNYWtpbmcgc3VyZSB0aGUgYmF0Y2ggc2l6ZSBpcyB2YWxpZFxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICB2YXIgbWF4QmF0Y2hTaXplID0gMTYzODQ7XG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhCYXRjaFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgcHJvcGVydGllcyB0byBiZSBkeW5hbWljICh0cnVlKSAvIHN0YXRpYyAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFuW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmF0Y2hTaXplID0gYmF0Y2hTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICpcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlQ2hpbGRyZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBjYW52YXMgcmVuZGVyZXJpbmcuIElmIHRydWUgdGhlbiB0aGUgZWxlbWVudHMgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBuZWFyZXN0IHBpeGVsLiBUaGlzIHByb3ZpZGVzIGEgbmljZSBzcGVlZCBib29zdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZTtcbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbn1cblxuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBwcml2YXRlIHByb3BlcnRpZXMgYXJyYXkgdG8gZHluYW1pYyAvIHN0YXRpYyBiYXNlZCBvbiB0aGUgcGFzc2VkIHByb3BlcnRpZXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMge29iamVjdH0gVGhlIHByb3BlcnRpZXMgdG8gYmUgdXBsb2FkZWRcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnNldFByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKVxue1xuICAgIGlmICggcHJvcGVydGllcyApIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1swXSA9ICdzY2FsZScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5zY2FsZSA6IHRoaXMuX3Byb3BlcnRpZXNbMF07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMV0gPSAncG9zaXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucG9zaXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzFdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzJdID0gJ3JvdGF0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnJvdGF0aW9uIDogdGhpcy5fcHJvcGVydGllc1syXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1szXSA9ICd1dnMnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMudXZzIDogdGhpcy5fcHJvcGVydGllc1szXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1s0XSA9ICdhbHBoYScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5hbHBoYSA6IHRoaXMuX3Byb3BlcnRpZXNbNF07XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcblxuICAgIC8vIFRPRE8gZG9uJ3QgbmVlZCB0byFcbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAvLyAgUElYSS5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybS5jYWxsKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRhaW5lciB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHdlYmdsIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIoIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUgKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlLnJlbmRlciggdGhpcyApO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGZsYWcgdGhhdCBzdGF0aWMgZGF0YSBzaG91bGQgYmUgdXBkYXRlZCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoc21hbGxlc3RDaGlsZEluZGV4KVxue1xuICAgIHZhciBidWZmZXJJbmRleCA9IE1hdGguZmxvb3Ioc21hbGxlc3RDaGlsZEluZGV4IC8gdGhpcy5fYmF0Y2hTaXplKTtcbiAgICBpZiAoYnVmZmVySW5kZXggPCB0aGlzLl9idWZmZXJUb1VwZGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IGJ1ZmZlckluZGV4O1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciBpc1JvdGF0ZWQgPSB0cnVlO1xuXG4gICAgdmFyIHBvc2l0aW9uWCA9IDA7XG4gICAgdmFyIHBvc2l0aW9uWSA9IDA7XG5cbiAgICB2YXIgZmluYWxXaWR0aCA9IDA7XG4gICAgdmFyIGZpbmFsSGVpZ2h0ID0gMDtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZSA9IGNoaWxkLnRleHR1cmUuZnJhbWU7XG5cbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYSAqIGNoaWxkLmFscGhhO1xuXG4gICAgICAgIGlmIChjaGlsZC5yb3RhdGlvbiAlIChNYXRoLlBJICogMikgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZhc3Rlc3QgIHdheSB0byBvcHRpbWlzZSEgLSBpZiByb3RhdGlvbiBpcyAwIHRoZW4gd2UgY2FuIGF2b2lkIGFueSBraW5kIG9mIHNldFRyYW5zZm9ybSBjYWxsXG4gICAgICAgICAgICBpZiAoaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLngpICsgY2hpbGQucG9zaXRpb24ueCAgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnkpICsgY2hpbGQucG9zaXRpb24ueSAgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54O1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55O1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZC5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZFRyYW5zZm9ybSA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHkgfCAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoKSArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0KSArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICBjaGlsZC50ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgIGZyYW1lLngsXG4gICAgICAgICAgICBmcmFtZS55LFxuICAgICAgICAgICAgZnJhbWUud2lkdGgsXG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQsXG4gICAgICAgICAgICBwb3NpdGlvblgsXG4gICAgICAgICAgICBwb3NpdGlvblksXG4gICAgICAgICAgICBmaW5hbFdpZHRoLFxuICAgICAgICAgICAgZmluYWxIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIGlmICh0aGlzLl9idWZmZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcbn07XG4iLCJcbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVCdWZmZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlQnVmZmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFRoZSBwYXJ0aWNsZSBidWZmZXIgbWFuYWdlcyB0aGUgc3RhdGljIGFuZCBkeW5hbWljIGJ1ZmZlcnMgZm9yIGEgcGFydGljbGUgY29udGFpbmVyLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQnVmZmVyKGdsLCBwcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgc2l6ZSlcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleCBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhlIGJ1ZmZlciBjYW4gaG9sZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgZHluYW1pYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBzdGF0aWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgaWYoZHluYW1pY1Byb3BlcnR5RmxhZ3NbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRCdWZmZXJzKCk7XG5cbn1cblxuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQnVmZmVyO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5pbml0QnVmZmVycyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcHJvcGVydHk7XG5cbiAgICB2YXIgZHluYW1pY09mZnNldCA9IDA7XG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IGR5bmFtaWNPZmZzZXQ7XG4gICAgICAgIGR5bmFtaWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5keW5hbWljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG5cblxuICAgIC8vIHN0YXRpYyAvL1xuICAgIHZhciBzdGF0aWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBzdGF0aWNPZmZzZXQ7XG4gICAgICAgIHN0YXRpY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLnN0YXRpY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuc3RhdGljU3RyaWRlICogNCk7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZHluYW1pYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZER5bmFtaWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLmR5bmFtaWNEYXRhLCB0aGlzLmR5bmFtaWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuZHluYW1pY0RhdGEpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBzdGF0aWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWRTdGF0aWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5zdGF0aWNEYXRhLCB0aGlzLnN0YXRpY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLnN0YXRpY0RhdGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyB0byB0aGUgR1BVXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaSwgcHJvcGVydHk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnN0YXRpY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlQnVmZmVyLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5zdGF0aWNCdWZmZXIpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlU2hhZGVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZVNoYWRlcicpLFxuICAgIFBhcnRpY2xlQnVmZmVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUJ1ZmZlcicpLFxuICAgIG1hdGggICAgICAgICAgICA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgLy8gYW5kIG1heCBudW1iZXIgb2YgZWxlbWVudCBpbiB0aGUgaW5kZXggYnVmZmVyIGlzIDE2Mzg0ICogNiA9IDk4MzA0XG4gICAgLy8gQ3JlYXRpbmcgYSBmdWxsIGluZGV4IGJ1ZmZlciwgb3ZlcmhlYWQgaXMgOTgzMDQgKiAyID0gMTk2S29cbiAgICB2YXIgbnVtSW5kaWNlcyA9IDk4MzA0O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShudW1JbmRpY2VzKTtcblxuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgbnVtSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IG51bGw7XG5cbiAgICB0aGlzLnRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcbn1cblxuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3BhcnRpY2xlJywgUGFydGljbGVSZW5kZXJlcik7XG5cbi8qKlxuICogV2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IG5ldyBQYXJ0aWNsZVNoYWRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIpO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IGluZGV4LCBzbyA2NTUzNSAvIDYgPSAxMDkyMi5cblxuICAgIC8vdXBsb2FkIHRoZSBpbmRleCBkYXRhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBbXG4gICAgICAgIC8vIHZlcnRpY2VzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFZlcnRpY2VzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcG9zaXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbkNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRQb3NpdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJvdGF0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUm90YXRpb24sXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFJvdGF0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdXZzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRVdnMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBhbHBoYURhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRBbHBoYSxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgcGFydGljbGUgYmF0Y2guXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGJpbmQgdGhlIG1haW4gdGV4dHVyZVxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgLy8gYmluZCB0aGUgYnVmZmVyc1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgcGFydGljbGUgY29udGFpbmVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgY2hpbGRyZW4gPSBjb250YWluZXIuY2hpbGRyZW4sXG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIG1heFNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplO1xuXG4gICAgaWYodG90YWxDaGlsZHJlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZih0b3RhbENoaWxkcmVuID4gbWF4U2l6ZSlcbiAgICB7XG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBtYXhTaXplO1xuICAgIH1cblxuICAgIGlmKCFjb250YWluZXIuX2J1ZmZlcnMpXG4gICAge1xuICAgICAgICBjb250YWluZXIuX2J1ZmZlcnMgPSB0aGlzLmdlbmVyYXRlQnVmZmVycyggY29udGFpbmVyICk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29udGFpbmVyLmJsZW5kTW9kZSk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIG0gPSAgY29udGFpbmVyLndvcmxkVHJhbnNmb3JtLmNvcHkoIHRoaXMudGVtcE1hdHJpeCApO1xuICAgIG0ucHJlcGVuZCggdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXggKTtcbiAgICBnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgbS50b0FycmF5KHRydWUpKTtcbiAgICBnbC51bmlmb3JtMWYodGhpcy5zaGFkZXIudW5pZm9ybXMudUFscGhhLl9sb2NhdGlvbiwgY29udGFpbmVyLndvcmxkQWxwaGEpO1xuXG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHRleHR1cmUgaXMgYm91bmQuLlxuICAgIHZhciBiYXNlVGV4dHVyZSA9IGNoaWxkcmVuWzBdLl90ZXh0dXJlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgdGV4dHVyZSBoYXMgbm90IHVwZGF0ZWQgdGhlbiBsZXRzIG5vdCB1cGxvYWQgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmKCF0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUoYmFzZVRleHR1cmUpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZighY29udGFpbmVyLl9wcm9wZXJ0aWVzWzBdIHx8ICFjb250YWluZXIuX3Byb3BlcnRpZXNbM10pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgfVxuXG4gICAgLy8gbm93IGxldHMgdXBsb2FkIGFuZCByZW5kZXIgdGhlIGJ1ZmZlcnMuLlxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IHRvdGFsQ2hpbGRyZW47IGkgKz0gYmF0Y2hTaXplLCBqICs9IDEpXG4gICAge1xuICAgICAgICB2YXIgYW1vdW50ID0gKCB0b3RhbENoaWxkcmVuIC0gaSk7XG4gICAgICAgIGlmKGFtb3VudCA+IGJhdGNoU2l6ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50ID0gYmF0Y2hTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRhaW5lci5fYnVmZmVyc1tqXTtcblxuICAgICAgICAvLyB3ZSBhbHdheXMgdXBsb2FkIHRoZSBkeW5hbWljXG4gICAgICAgIGJ1ZmZlci51cGxvYWREeW5hbWljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuXG4gICAgICAgIC8vIHdlIG9ubHkgdXBsb2FkIHRoZSBzdGF0aWMgY29udGVudCB3aGVuIHdlIGhhdmUgdG8hXG4gICAgICAgIGlmKGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPT09IGopXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJ1ZmZlci51cGxvYWRTdGF0aWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gaiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5kIHRoZSBidWZmZXJcbiAgICAgICAgYnVmZmVyLmJpbmQoIHRoaXMuc2hhZGVyICk7XG5cbiAgICAgICAgIC8vIG5vdyBkcmF3IHRob3NlIHN1Y2thcyFcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgYW1vdW50ICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBvbmUgcGFydGljbGUgYnVmZmVyIGZvciBlYWNoIGNoaWxkIGluIHRoZSBjb250YWluZXIgd2Ugd2FudCB0byByZW5kZXIgYW5kIHVwZGF0ZXMgaW50ZXJuYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5nZW5lcmF0ZUJ1ZmZlcnMgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIGJ1ZmZlcnMgPSBbXSxcbiAgICAgICAgc2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemUsXG4gICAgICAgIGR5bmFtaWNQcm9wZXJ0eUZsYWdzID0gY29udGFpbmVyLl9wcm9wZXJ0aWVzLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gYmF0Y2hTaXplKVxuICAgIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKG5ldyBQYXJ0aWNsZUJ1ZmZlcihnbCwgdGhpcy5wcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgYmF0Y2hTaXplKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHZlcnRpY2llcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgdmVydGljZXMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFZlcnRpY2VzID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICB2YXIgc3ByaXRlLFxuICAgICAgICB0ZXh0dXJlLFxuICAgICAgICB0cmltLFxuICAgICAgICBzeCxcbiAgICAgICAgc3ksXG4gICAgICAgIHcwLCB3MSwgaDAsIGgxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xuXG4gICAgICAgIHNwcml0ZSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXTtcbiAgICAgICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZTtcbiAgICAgICAgc3ggPSBzcHJpdGUuc2NhbGUueDtcbiAgICAgICAgc3kgPSBzcHJpdGUuc2NhbGUueTtcblxuICAgICAgICBpZiAodGV4dHVyZS50cmltKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgICAgICB0cmltID0gdGV4dHVyZS50cmltO1xuXG4gICAgICAgICAgICB3MSA9IHRyaW0ueCAtIHNwcml0ZS5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBoMSA9IHRyaW0ueSAtIHNwcml0ZS5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtc3ByaXRlLmFuY2hvci54KTtcbiAgICAgICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtc3ByaXRlLmFuY2hvci54O1xuXG4gICAgICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXNwcml0ZS5hbmNob3IueSk7XG4gICAgICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC1zcHJpdGUuYW5jaG9yLnk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBwb3NpdGlvbnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFBvc2l0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUG9zaXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucG9zaXRpb247XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcm90YXRpb24gdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFJvdGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUm90YXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucm90YXRpb247XG5cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVSb3RhdGlvbjtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgVXZzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRVdnMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlVXZzID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLl90ZXh0dXJlLl91dnM7XG5cbiAgICAgICAgaWYgKHRleHR1cmVVdnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSB0ZXh0dXJlVXZzLngwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZXh0dXJlVXZzLnkwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdGV4dHVyZVV2cy54MTtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gdGV4dHVyZVV2cy55MTtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB0ZXh0dXJlVXZzLngyO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gdGV4dHVyZVV2cy55MjtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB0ZXh0dXJlVXZzLngzO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gdGV4dHVyZVV2cy55MztcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8geW91IGtub3cgdGhpcyBjYW4gYmUgZWFzaWVyIVxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBhbHBoYSB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkQWxwaGEgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZUFscGhhID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLmFscGhhO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZUFscGhhO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVSZW5kZXJlci5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuICAgIHRoaXMudGVtcE1hdHJpeCA9IG51bGw7XG59O1xuIiwidmFyIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVTaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBUZXh0dXJlU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFQb3NpdGlvbkNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVNjYWxlOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFSb3RhdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIHZlYzIgdiA9IGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAnICAgdi54ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIGNvcyhhUm90YXRpb24pIC0gKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIHNpbihhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdi55ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIHNpbihhUm90YXRpb24pICsgKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIGNvcyhhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdiA9IHYgKyBhUG9zaXRpb25Db29yZDsnLFxuXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyh2LCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGhlbGxvXG4gICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCB1QWxwaGE7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3IgKiB1QWxwaGE7JyxcbiAgICAgICAgICAgICcgIGlmIChjb2xvci5hID09IDAuMCkgZGlzY2FyZDsnLFxuICAgICAgICAgICAgJyAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdUFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFQb3NpdGlvbkNvb3JkOiAwLFxuICAgICAgICAgICAvLyBhU2NhbGU6ICAgICAgICAgMCxcbiAgICAgICAgICAgIGFSb3RhdGlvbjogICAgICAwXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVEVNUCBIQUNLXG5cbn1cblxuUGFydGljbGVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlU2hhZGVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVNoYWRlcjtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHN5c3RlbSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgc3lzdGVtIHRoaXMgcmVuZGVyZXIgaXMgZm9yLlxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXSB7bnVtYmVyfSBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcmVuZGVyZWQgYXJlYSAoc2hvd24gaWYgbm90IHRyYW5zcGFyZW50KS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5yb3VuZFBpeGVscz1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBTeXN0ZW1SZW5kZXJlcihzeXN0ZW0sIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB1dGlscy5zYXlIZWxsbyhzeXN0ZW0pO1xuXG4gICAgLy8gcHJlcGFyZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpIGluIENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tpXSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgb3B0aW9ucyA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHNlZSBQSVhJLlJFTkRFUkVSX1RZUEVcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgODAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDgwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgNjAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy52aWV3ID0gb3B0aW9ucy52aWV3IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG9wdGlvbnMucmVzb2x1dGlvbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBvcHRpb25zLnRyYW5zcGFyZW50O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgc2hvdWxkIGJlIHJlc2l6ZWQgYXV0b21hdGljYWxseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvcHRpb25zLmF1dG9SZXNpemUgfHwgZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIGJsZW5kIG1vZGVzIHVzZWZ1bCBmb3IgdGhpcyByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG1peGVkPn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgZmxhZyBhZmZlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50cyBvZiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgcmV0YWluZWQgYWZ0ZXIgcmVuZGVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3Igbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyBOT1QgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBhIGNhbnZhcyBzaXplZCBmaWxsUmVjdCBvcGVyYXRpb24gZXZlcnkgZnJhbWUgdG8gc2V0IHRoZSBjYW52YXMgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBjbGVhclJlY3QgdG8gY2xlYXIgdGhlIGNhbnZhcyBldmVyeSBmcmFtZS5cbiAgICAgKiBEaXNhYmxlIHRoaXMgYnkgc2V0dGluZyB0aGlzIHRvIGZhbHNlLiBGb3IgZXhhbXBsZSBpZiB5b3VyIGdhbWUgaGFzIGEgY2FudmFzIGZpbGxpbmcgYmFja2dyb3VuZCBpbWFnZSB5b3Ugb2Z0ZW4gZG9uJ3QgbmVlZCB0aGlzIHNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHRcbiAgICAgKi9cbiAgICB0aGlzLmNsZWFyQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICAgICAqIEhhbmR5IGZvciBjcmlzcCBwaXhlbCBhcnQgYW5kIHNwZWVkIG9uIGxlZ2FjeSBkZXZpY2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gb3B0aW9ucy5yb3VuZFBpeGVscztcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmEgPSBbMCwgMCwgMCwgMF07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9ICcjMDAwMDAwJztcblxuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yOyAvLyBydW4gYmcgY29sb3Igc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgdHJhbnNmb3JtOnt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKX0sIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3Qgcm9vdCBvYmplY3QgdGhhdCB0aGUgcmVuZGVyZXIgdHJpZWQgdG8gcmVuZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3lzdGVtUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFN5c3RlbVJlbmRlcmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciB0byBmaWxsIGlmIG5vdCB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlN5c3RlbVJlbmRlcmVyI1xuICAgICAqL1xuICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSB1dGlscy5oZXgyc3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB1dGlscy5oZXgycmdiKHZhbCwgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBjYW52YXMgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMudmlldy53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGhpcy52aWV3LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgICAgICB0aGlzLnZpZXcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpIHtcbiAgICBpZiAocmVtb3ZlVmlldyAmJiB0aGlzLnZpZXcucGFyZW50Tm9kZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMudmlldyk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgdGhpcy52aWV3ID0gbnVsbDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IDA7XG5cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBmYWxzZTtcblxuICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcblxuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDA7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IG51bGw7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gbnVsbDtcbn07XG4iLCJ2YXIgU3lzdGVtUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9TeXN0ZW1SZW5kZXJlcicpLFxuICAgIENhbnZhc01hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi91dGlscy9DYW52YXNNYXNrTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBTeXN0ZW1SZW5kZXJlci5jYWxsKHRoaXMsICdDYW52YXMnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuQ0FOVkFTO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMudmlldy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIGZsYWcgY29udHJvbGxpbmcgY2FudmFzIHJlZnJlc2guXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVmcmVzaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBhIENhbnZhc01hc2tNYW5hZ2VyLCBoYW5kbGVzIG1hc2tpbmcgd2hlbiB1c2luZyB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNNYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IENhbnZhc01hc2tNYW5hZ2VyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIHByb3BlcnR5IHVzZWQgdG8gc2V0IHRoZSBjYW52YXMgc21vb3RoaW5nIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnaW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcblxuICAgIGlmICghdGhpcy5jb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ3dlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ29JbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB0aGlzLl9tYXBCbGVuZE1vZGVzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHtcbiAgICAgICAgd29ybGRUcmFuc2Zvcm06IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgICAgICB3b3JsZEFscGhhOiAxXG4gICAgfTtcblxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oQ2FudmFzUmVuZGVyZXIpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byB0aGlzIGNhbnZhcyB2aWV3XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSB0aGUgb2JqZWN0IHRvIGJlIHJlbmRlcmVkXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KVxue1xuICAgIHRoaXMuZW1pdCgncHJlcmVuZGVyJyk7XG5cbiAgICB2YXIgY2FjaGVQYXJlbnQgPSBvYmplY3QucGFyZW50O1xuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gb2JqZWN0O1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIG9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIG9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTICYmIHRoaXMudmlldy5zY3JlZW5jYW52YXMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpXG4gICAge1xuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGggLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlckRpc3BsYXlPYmplY3Qob2JqZWN0LCB0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciBhbmQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSBDYW52YXMgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIFtyZW1vdmVWaWV3PWZhbHNlXSB7Ym9vbGVhbn0gUmVtb3ZlcyB0aGUgQ2FudmFzIGVsZW1lbnQgZnJvbSB0aGUgRE9NLlxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIGNhbGwgdGhlIGJhc2UgZGVzdHJveVxuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcywgcmVtb3ZlVmlldyk7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5T2JqZWN0IHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgY29udGV4dClcbntcbiAgICB2YXIgdGVtcENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyQ2FudmFzKHRoaXMpO1xuICAgIHRoaXMuY29udGV4dCA9IHRlbXBDb250ZXh0O1xufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBQSVhJLlN5c3RlbVJlbmRlcmVyI3Jlc2l6ZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKiBAcGFyYW0ge251bWJlcn0gaFxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHcsIGgpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xuXG4gICAgLy9yZXNldCB0aGUgc2NhbGUgbW9kZS4uIG9kZGx5IHRoaXMgc2VlbXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgY2FudmFzIGlzIHJlc2l6ZWQuXG4gICAgLy9zdXJlbHkgYSBicm93c2VyIGJ1Zz8/IExldCBwaXhpIGZpeCB0aGF0IGZvciB5b3UuLlxuICAgIGlmKHRoaXMuc21vb3RoUHJvcGVydHkpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHRbdGhpcy5zbW9vdGhQcm9wZXJ0eV0gPSAoQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVCA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogTWFwcyBQaXhpIGJsZW5kIG1vZGVzIHRvIGNhbnZhcyBibGVuZCBtb2Rlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX21hcEJsZW5kTW9kZXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5ibGVuZE1vZGVzKVxuICAgIHtcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzID0ge307XG5cbiAgICAgICAgaWYgKHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnbXVsdGlwbHknO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NjcmVlbic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSAnb3ZlcmxheSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnZGFya2VuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MSUdIVEVOXSAgICAgICA9ICdsaWdodGVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdjb2xvci1kb2RnZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnY29sb3ItYnVybic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnaGFyZC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSAnc29mdC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnZGlmZmVyZW5jZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnZXhjbHVzaW9uJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdodWUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gJ3NhdHVyYXRlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl0gICAgICAgICA9ICdjb2xvcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSAnbHVtaW5vc2l0eSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29vbCBuZXcgYmxlbmQgbW9kZXMgaW4gY2FudmFzICdjb3VnaCcgaWUgJ2NvdWdoJ1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNpemUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGNhbnZhc1xuICovXG5mdW5jdGlvbiBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgQ2FudmFzIG9iamVjdCB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBDYW52YXNCdWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogQSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHR3by1kaW1lbnNpb25hbCByZW5kZXJpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59XG5cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0J1ZmZlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FudmFzQnVmZmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIGJ1ZmZlciBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ2FudmFzQnVmZmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdmFsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGNhbnZhcyB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZSBDYW52YXNCdWZmZXIgY2xhc3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbnZhc1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgY2FudmFzLlxuICpcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBjYW52YXMgcmVuZGVyZXIgdG8gZHJhdyB0aGUgcHJpbWl0aXZlIGdyYXBoaWNzIGRhdGEuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNHcmFwaGljcyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNHcmFwaGljcztcblxuLypcbiAqIFJlbmRlcnMgYSBHcmFwaGljcyBvYmplY3QgdG8gYSBjYW52YXMuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgYWN0dWFsIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSAyZCBkcmF3aW5nIG1ldGhvZCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciB3b3JsZEFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuICAgIGlmIChncmFwaGljcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3NUaW50KGdyYXBoaWNzKTtcbiAgICAgICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLl9maWxsVGludDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEuX2xpbmVUaW50O1xuXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZSBjbG9zZSB0aGUgcGF0aCAtIG11Y2ggbmVhdGVyIDopXG4gICAgICAgICAgICBpZiAocG9pbnRzWzBdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAmJiBwb2ludHNbMV0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbENvbG9yIHx8IGRhdGEuZmlsbENvbG9yID09PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmZpbGxBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggZmlsbENvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUud2lkdGgsIHNoYXBlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLDAsMipNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVsbGlwc2UgY29kZSB0YWtlbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcblxuICAgICAgICAgICAgdmFyIHcgPSBzaGFwZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB2YXIgaCA9IHNoYXBlLmhlaWdodCAqIDI7XG5cbiAgICAgICAgICAgIHZhciB4ID0gc2hhcGUueCAtIHcvMjtcbiAgICAgICAgICAgIHZhciB5ID0gc2hhcGUueSAtIGgvMjtcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIGthcHBhID0gMC41NTIyODQ4LFxuICAgICAgICAgICAgICAgIG94ID0gKHcgLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgb3kgPSAoaCAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgeGUgPSB4ICsgdywgICAgICAgICAgIC8vIHgtZW5kXG4gICAgICAgICAgICAgICAgeWUgPSB5ICsgaCwgICAgICAgICAgIC8vIHktZW5kXG4gICAgICAgICAgICAgICAgeG0gPSB4ICsgdyAvIDIsICAgICAgIC8vIHgtbWlkZGxlXG4gICAgICAgICAgICAgICAgeW0gPSB5ICsgaCAvIDI7ICAgICAgIC8vIHktbWlkZGxlXG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG1hc2tcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3Mgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgbWFza1xuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGNvbnRleHQgMmQgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciBsZW4gPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gVE9ETyAtIG5lZWQgdG8gYmUgVW5kZWZpbmVkIVxuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgcnggPSBzaGFwZS54O1xuICAgICAgICAgICAgdmFyIHJ5ID0gc2hhcGUueTtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcbiAgICAgICAgICAgIHZhciByYWRpdXMgPSBzaGFwZS5yYWRpdXM7XG5cbiAgICAgICAgICAgIHZhciBtYXhSYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDIgfCAwO1xuICAgICAgICAgICAgcmFkaXVzID0gcmFkaXVzID4gbWF4UmFkaXVzID8gbWF4UmFkaXVzIDogcmFkaXVzO1xuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRpbnQgb2YgYSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3MgdGhhdCB3aWxsIGhhdmUgaXRzIHRpbnQgdXBkYXRlZFxuICpcbiAqL1xuQ2FudmFzR3JhcGhpY3MudXBkYXRlR3JhcGhpY3NUaW50ID0gZnVuY3Rpb24gKGdyYXBoaWNzKVxue1xuICAgIGlmIChncmFwaGljcy50aW50ID09PSAweEZGRkZGRiAmJiBncmFwaGljcy5fcHJldlRpbnQgPT09IGdyYXBoaWNzLnRpbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyYXBoaWNzLl9wcmV2VGludCA9IGdyYXBoaWNzLnRpbnQ7XG5cbiAgICB2YXIgdGludFIgPSAoZ3JhcGhpY3MudGludCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50RyA9IChncmFwaGljcy50aW50ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgdGludEIgPSAoZ3JhcGhpY3MudGludCAmIDB4RkYpLyAyNTU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLmZpbGxDb2xvciB8IDA7XG4gICAgICAgIHZhciBsaW5lQ29sb3IgPSBkYXRhLmxpbmVDb2xvciB8IDA7XG5cbiAgICAgICAgLypcbiAgICAgICAgdmFyIGNvbG9yUiA9IChmaWxsQ29sb3IgPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgdmFyIGNvbG9yRyA9IChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JCID0gKGZpbGxDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgZmlsbENvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG5cbiAgICAgICAgY29sb3JSID0gKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckcgPSAobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgY29sb3JCID0gKGxpbmVDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgbGluZUNvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG4gICAgICAgICovXG5cbiAgICAgICAgLy8gc3VwZXIgaW5saW5lIGNvcyBpbSBhbiBvcHRpbWl6YXRpb24gTkFaSSA6KVxuICAgICAgICBkYXRhLl9maWxsVGludCA9ICgoKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgoZmlsbENvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAoZmlsbENvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuICAgICAgICBkYXRhLl9saW5lVGludCA9ICgoKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAobGluZUNvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuXG4gICAgfVxufTtcblxuIiwidmFyIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi9DYW52YXNHcmFwaGljcycpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBtYXNraW5nLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ2FudmFzTWFza01hbmFnZXIoKVxue31cblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FudmFzTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc01hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgc3RhY2sgb2YgbWFza3MuXG4gKlxuICogQHBhcmFtIG1hc2tEYXRhIHtvYmplY3R9IHRoZSBtYXNrRGF0YSB0aGF0IHdpbGwgYmUgcHVzaGVkXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSwgcmVuZGVyZXIpXG57XG5cbiAgICByZW5kZXJlci5jb250ZXh0LnNhdmUoKTtcblxuICAgIHZhciBjYWNoZUFscGhhID0gbWFza0RhdGEuYWxwaGE7XG4gICAgdmFyIHRyYW5zZm9ybSA9IG1hc2tEYXRhLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgLy9UT0RPIHN1cG9ydCBzcHJpdGUgYWxwaGEgbWFza3M/P1xuICAgIC8vbG90cyBvZiBlZmZvcnQgcmVxdWlyZWQuIElmIGRlbWFuZCBpcyBncmVhdCBlbm91Z2guLlxuICAgIGlmKCFtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrKG1hc2tEYXRhLCByZW5kZXJlci5jb250ZXh0KTtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5jbGlwKCk7XG4gICAgfVxuXG4gICAgbWFza0RhdGEud29ybGRBbHBoYSA9IGNhY2hlQWxwaGE7XG59O1xuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dCB0byB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZSB0aGUgbWFzayB3YXMgYXBwbGllZC5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLmNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7fTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2RzIGZvciBTcHJpdGUvVGV4dHVyZSB0aW50aW5nLlxuICogQHN0YXRpY1xuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG52YXIgQ2FudmFzVGludGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1RpbnRlcjtcblxuLyoqXG4gKiBCYXNpY2FsbHkgdGhpcyBtZXRob2QganVzdCBuZWVkcyBhIHNwcml0ZSBhbmQgYSBjb2xvciBhbmQgdGludHMgdGhlIHNwcml0ZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSB0aW50ZWQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlID0gZnVuY3Rpb24gKHNwcml0ZSwgY29sb3IpXG57XG4gICAgdmFyIHRleHR1cmUgPSBzcHJpdGUudGV4dHVyZTtcblxuICAgIGNvbG9yID0gQ2FudmFzVGludGVyLnJvdW5kQ29sb3IoY29sb3IpO1xuXG4gICAgdmFyIHN0cmluZ0NvbG9yID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgdGV4dHVyZS50aW50Q2FjaGUgPSB0ZXh0dXJlLnRpbnRDYWNoZSB8fCB7fTtcblxuICAgIGlmICh0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0pXG4gICAge1xuICAgICAgICByZXR1cm4gdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdO1xuICAgIH1cblxuICAgICAvLyBjbG9uZSB0ZXh0dXJlLi5cbiAgICB2YXIgY2FudmFzID0gQ2FudmFzVGludGVyLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8vQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWwodGV4dHVyZSwgc3RyaW5nQ29sb3IsIGNhbnZhcyk7XG4gICAgQ2FudmFzVGludGVyLnRpbnRNZXRob2QodGV4dHVyZSwgY29sb3IsIGNhbnZhcyk7XG5cbiAgICBpZiAoQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSlcbiAgICB7XG4gICAgICAgIC8vIGlzIHRoaXMgYmV0dGVyP1xuICAgICAgICB2YXIgdGludEltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHRpbnRJbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKCk7XG5cbiAgICAgICAgdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdID0gdGludEltYWdlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSBjYW52YXM7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBub3QgY29udmVydGluZyB0aGUgdGV4dHVyZSB0byBhbiBpbWFnZSB0aGVuIHdlIG5lZWQgdG8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXNcbiAgICAgICAgQ2FudmFzVGludGVyLmNhbnZhcyA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdtdWx0aXBseScgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcblxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdvdmVybGF5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoT3ZlcmxheSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1hdG9wJztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgLy8gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG59O1xuXG4vKipcbiAqIFRpbnQgYSB0ZXh0dXJlIHBpeGVsIHBlciBwaXhlbC5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcbiAgICB2YXIgciA9IHJnYlZhbHVlc1swXSwgZyA9IHJnYlZhbHVlc1sxXSwgYiA9IHJnYlZhbHVlc1syXTtcblxuICAgIHZhciBwaXhlbERhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICB2YXIgcGl4ZWxzID0gcGl4ZWxEYXRhLmRhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBpeGVscy5sZW5ndGg7IGkgKz0gNClcbiAgICB7XG4gICAgICAgIHBpeGVsc1tpKzBdICo9IHI7XG4gICAgICAgIHBpeGVsc1tpKzFdICo9IGc7XG4gICAgICAgIHBpeGVsc1tpKzJdICo9IGI7XG4gICAgfVxuXG4gICAgY29udGV4dC5wdXRJbWFnZURhdGEocGl4ZWxEYXRhLCAwLCAwKTtcbn07XG5cbi8qKlxuICogUm91bmRzIHRoZSBzcGVjaWZpZWQgY29sb3IgYWNjb3JkaW5nIHRvIHRoZSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbC5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHJvdW5kLCBzaG91bGQgYmUgYSBoZXggY29sb3JcbiAqL1xuQ2FudmFzVGludGVyLnJvdW5kQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IpXG57XG4gICAgdmFyIHN0ZXAgPSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbDtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcblxuICAgIHJnYlZhbHVlc1swXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1swXSAvIHN0ZXApICogc3RlcCk7XG4gICAgcmdiVmFsdWVzWzFdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzFdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMl0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMl0gLyBzdGVwKSAqIHN0ZXApO1xuXG4gICAgcmV0dXJuIHV0aWxzLnJnYjJoZXgocmdiVmFsdWVzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGNhcCB3aGVuIHJvdW5kaW5nIGNvbG9ycy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsID0gODtcblxuLyoqXG4gKiBUaW50IGNhY2hlIGJvb2xlYW4gZmxhZy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jb252ZXJ0VGludFRvSW1hZ2UgPSBmYWxzZTtcblxuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCwgY29uc2VxdWVudGx5IHRoZSBhYmlsaXR5IHRvIHRpbnQgdXNpbmcgdGhlIG11bHRpcGx5IG1ldGhvZC5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA9IHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKTtcblxuLyoqXG4gKiBUaGUgdGludGluZyBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQuXG4gKlxuICovXG5DYW52YXNUaW50ZXIudGludE1ldGhvZCA9IENhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA/IENhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5IDogIENhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsO1xuIiwidmFyIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcblx0dXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIFRleHR1cmVNYW5hZ2VyID0gZnVuY3Rpb24oZ2wpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyB0cmFjayB0ZXh0dXJlcyBpbiB0aGUgcmVuZGVyZXIgc28gd2UgY2FuIG5vIGxvbmdlciBsaXN0ZW4gdG8gdGhlbSBvbiBkZXN0cnVjdGlvbi5cblx0dGhpcy5fbWFuYWdlZFRleHR1cmVzID0gW107XG4gICAgdGhpcy5nbFRleHR1cmVzID0ge307XG5cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5nZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW5kL29yIENyZWF0ZXMgYSBXZWJHTCB0ZXh0dXJlIGZvciB0aGUgcmVuZGVyZXIncyBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdXBkYXRlXG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuXHRpZiAoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGdsVGV4dHVyZSA9IHRoaXMuZ2xUZXh0dXJlc1t0ZXh0dXJlLnVpZF0vL3RleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgaWYgKCFnbFRleHR1cmUpXG4gICAge1xuICAgICAgICBnbFRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcbiAgICAgICAgZ2xUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSB0cnVlXG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgLy8gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXSA9IGdsVGV4dHVyZTtcblxuICAgICAgICB0ZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9uKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICBnbFRleHR1cmUudXBsb2FkKHRleHR1cmUuc291cmNlKTtcbiAgICBcbiAgICAvL1RPRE8gY2hlY2sgaXMgcG93ZXIgb2YgdHdvLi5cbiAgICBnbFRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cblxuICAgIC8vIFRPRE8gY2hlY2sgZm9yIHNjYWxpbmcgdHlwZVxuICAgIGdsVGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKCk7XG5cbiAgICByZXR1cm4gIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTFxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gZGVzdHJveVxuICovXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlLCBfc2tpcFJlbW92ZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0pXG4gICAge1xuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG5cblxuICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcblxuICAgICAgICBpZiAoIV9za2lwUmVtb3ZlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5pbmRleE9mKHRleHR1cmUpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5fbWFuYWdlZFRleHR1cmVzLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKClcbntcblx0Ly8gZW1wdHkgYWxsIHRoZSBvbGQgZ2wgdGV4dHVyZXMgYXMgdGhleSBhcmUgdXNlbGVzcyBub3dcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzW2ldO1xuICAgICAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuICAgIC8vIGRlc3Ryb3kgbWFuYWdlZCB0ZXh0dXJlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIHRoaXMuZGVzdHJveVRleHR1cmUodGV4dHVyZSwgdHJ1ZSk7XG4gICAgICAgIHRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9mZignZGlzcG9zZScsIHRoaXMuZGVzdHJveVRleHR1cmUsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcyA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZU1hbmFnZXI7XG5cbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgU2hhZGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIE1hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9NYXNrTWFuYWdlcicpLFxuICAgIFN0ZW5jaWxNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlcicpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBCbGVuZE1vZGVNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4vdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBGWEFBRmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBUZXh0dXJlTWFuYWdlciA9IHJlcXVpcmUoJy4vVGV4dHVyZU1hbmFnZXInKSxcbiAgICBjcmVhdGVDb250ZXh0ID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuY3JlYXRlQ29udGV4dCxcbiAgICBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aScpLFxuICAgIG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpID0gcmVxdWlyZSgnLi91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFdlYkdMUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIHdlYkdMIGVuYWJsZWQgY2FudmFzLiBUaGlzIHJlbmRlcmVyXG4gKiBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMLiBUaGlzIFJlbmRlciB3b3JrcyBieSBhdXRvbWF0aWNhbGx5IG1hbmFnaW5nIHdlYkdMQmF0Y2hzLlxuICogU28gbm8gbmVlZCBmb3IgU3ByaXRlIEJhdGNoZXMgb3IgU3ByaXRlIENsb3Vkcy5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIHZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9MF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9MF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMuIElmIG5vdCBhdmFpbGFibGUgbmF0aXZlbHkgdGhlbiBGWEFBIGFudGlhbGlhc2luZyBpcyB1c2VkXG4gKiBAcGFyYW0gW29wdGlvbnMuZm9yY2VGWEFBPWZhbHNlXSB7Ym9vbGVhbn0gZm9yY2VzIEZYQUEgYW50aWFsaWFzaW5nIHRvIGJlIHVzZWQgb3ZlciBuYXRpdmUuIEZYQUEgaXMgZmFzdGVyLCBidXQgbWF5IG5vdCBhbHdheXMgbG9vayBhcyBncmVhdFxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy4gSWYgeW91IHdpc2ggdG8gc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSAqbXVzdCogc2V0IHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byBgdHJ1ZWAuXG4gKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmXG4gKiAgICAgIHlvdSBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0LlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ1dlYkdMJywgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIHJlbmRlcmVyIGFzIGEgc3RhbmRhcmRpc2VkIGNvbnN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9Ly9cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0w7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gdGhpcy5oYW5kbGVDb250ZXh0TG9zdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5oYW5kbGVDb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gY3JlYXRlIGEgbmV3IHdlYmdsIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgICAgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQsXG4gICAgICAgIGFudGlhbGlhczogb3B0aW9ucy5hbnRpYWxpYXMsXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnRyYW5zcGFyZW50ICE9PSAnbm90TXVsdGlwbGllZCcsXG4gICAgICAgIHN0ZW5jaWw6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICB9O1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYVszXSA9IHRoaXMudHJhbnNwYXJlbnQgPyAwIDogMTtcblxuICAgIC8qKlxuICAgICAqIERlYWxzIHdpdGggbWFuYWdpbmcgdGhlIHNoYWRlciBwcm9ncmFtcyBhbmQgdGhlaXIgYXR0cmlicy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBuZXcgU2hhZGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1hc2tzIHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWFza01hbmFnZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG5ldyBNYXNrTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyID0gbmV3IFN0ZW5jaWxNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRmlsdGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlck1hbmFnZXIgPSBuZXcgRmlsdGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIGJsZW5kTW9kZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmxlbmRNb2RlTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBuZXcgQmxlbmRNb2RlTWFuYWdlcih0aGlzKTtcblxuICAgIFxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIE9iamVjdFJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5PYmplY3RSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG5ldyBPYmplY3RSZW5kZXJlcih0aGlzKTtcblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIGNvbnRleHQgc28gaXQgaXMgcmVhZHkgZm9yIHRoZSBtYW5hZ2Vycy5cbiAgICB0aGlzLmdsID0gY3JlYXRlQ29udGV4dCh0aGlzLnZpZXcsIHRoaXMuX2NvbnRleHRPcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXRDb250ZXh0KCk7XG5cbiAgICAvLyBtYXAgc29tZSB3ZWJHTCBibGVuZCBhbmQgZHJhd21vZGVzLi5cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wpO1xuICAgIHRoaXMuZHJhd01vZGVzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wpXG5cbiAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXR9XG4gICAgICovXG4gICAgdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUZXh0dXJlTG9jYXRpb24gPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oV2ViR0xSZW5kZXJlcik7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgV2ViR0wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLl9pbml0Q29udGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgbWFuYWdlci4uLlxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hbmFnZXIoZ2wpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBkZWZhdWx0IHBpeGkgc2V0dGluZ3MuLlxuICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG5cblxuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBudWxsLCB0aGlzLnJlc29sdXRpb24sIHRydWUpO1xuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5jbGVhckNvbG9yID0gdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYTtcbiAgICBcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQodGhpcy5yb290UmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMuZW1pdCgnY29udGV4dCcsIGdsKTtcblxuICAgIC8vIHNldHVwIHRoZSB3aWR0aC9oZWlnaHQgcHJvcGVydGllcyBhbmQgZ2wgdmlld3BvcnRcbiAgICB0aGlzLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7ICAgIFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gaXRzIHdlYkdMIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIC8vIG5vIHBvaW50IHJlbmRlcmluZyBpZiBvdXIgY29udGV4dCBoYXMgYmVlbiBibG93biB1cCFcbiAgICBpZiAodGhpcy5nbC5pc0NvbnRleHRMb3N0KCkpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gZGlzcGxheU9iamVjdDtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IGRpc3BsYXlPYmplY3QucGFyZW50O1xuICAgIGRpc3BsYXlPYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIGRpc3BsYXlPYmplY3QudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnJvb3RSZW5kZXJUYXJnZXQsIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpOy8vdGhpcy5wcm9qZWN0aW9uKTtcblxuICAgIHRoaXMuZW1pdCgncG9zdHJlbmRlcicpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgRGlzcGxheSBPYmplY3QuXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0gcmVuZGVyVGFyZ2V0IHtQSVhJLlJlbmRlclRhcmdldH0gVGhlIHJlbmRlciB0YXJnZXQgdG8gdXNlIHRvIHJlbmRlciB0aGlzIGRpc3BsYXkgb2JqZWN0XG4gKlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJEaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHJlbmRlclRhcmdldCwgY2xlYXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgdGhpcy5iaW5kUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG5cbiAgICBpZihjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IHRoZSBmaWx0ZXIgbWFuYWdlclxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5zZXRGaWx0ZXJTdGFjayggcmVuZGVyVGFyZ2V0LmZpbHRlclN0YWNrICk7XG5cbiAgICAvLyByZW5kZXIgdGhlIHNjZW5lIVxuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyV2ViR0wodGhpcyk7XG5cbiAgICAvLyBmaW5pc2ggdGhlIGN1cnJlbnQgcmVuZGVyZXIuLlxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdGhlIG9uZSBnaXZlbiBpbiBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gb2JqZWN0UmVuZGVyZXIge1BJWEkuT2JqZWN0UmVuZGVyZXJ9IFRoZSBvYmplY3QgcmVuZGVyZXIgdG8gdXNlLlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRPYmplY3RSZW5kZXJlciA9IGZ1bmN0aW9uIChvYmplY3RSZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyZXIgPT09IG9iamVjdFJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0b3AoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG9iamVjdFJlbmRlcmVyO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHdlYkdMIHZpZXcgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB3ZWJHTCB2aWV3XG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB3ZWJHTCB2aWV3XG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9PT0gdGhpcy5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSB0aGUgbmV3IHJlbmRlciB0YXJnZXRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgaWYocmVuZGVyVGFyZ2V0ICE9PSB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcblxuICAgICAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLnNldE1hc2tTdGFjayggcmVuZGVyVGFyZ2V0LnN0ZW5jaWxNYXNrU3RhY2sgKTtcbiAgICB9XG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKS8vcHJvamVjdGlvbiwgYnVmZmVyKVxue1xuICAgIC8vVE9ETyBjYWNoZVxuICAgIGlmKHRoaXMuX2FjdGl2ZVNoYWRlciAhPT0gc2hhZGVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlU2hhZGVyID0gc2hhZGVyO1xuICAgICAgICBzaGFkZXIuYmluZCgpO1xuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgfVxufVxuXG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvY2F0aW9uKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvL1RPRE8gdGVzdCBwZXJmIG9mIGNhY2hlP1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gfHwgMDtcblxuICAgIGlmKHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiAhPT0gbG9jYXRpb24pLy9cbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbiApO1xuICAgIH1cblxuICAgIC8vVE9ETyAtIGNhbiB3ZSBjYWNoZSB0aGlzIHRleHR1cmUgdG9vP1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOyAgICAgIFxuICAgIFxuICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBiaW5kIHRoZSB0ZXh0dXJlLi5cbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0uYmluZCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEhhbmRsZXMgYSBsb3N0IHdlYmdsIGNvbnRleHRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5oYW5kbGVDb250ZXh0TG9zdCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGEgcmVzdG9yZWQgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnJlbW92ZUFsbCgpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgKGV2ZW50IGxpc3RlbmVycywgc3ByaXRlYmF0Y2gsIGV0Yy4uLilcbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldylcbntcbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICAvLyByZW1vdmUgbGlzdGVuZXJzXG4gICAgdGhpcy52aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0KTtcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCk7XG5cbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLmRlc3Ryb3lBbGwoKTtcblxuICAgIC8vIGNhbGwgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMudWlkID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIG1hbmFnZXJzXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLm1hc2tNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gbnVsbDtcbiAgICB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLnVzZVByb2dyYW0obnVsbCk7XG4gICAgdGhpcy5nbCA9IG51bGw7XG59O1xuXG4iLCJ2YXIgRGVmYXVsdFNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgUElYSSBmaWx0ZXIuIEN1cnJlbnRseSBvbmx5IFdlYkdMIHN1cHBvcnRzIGZpbHRlcnMuXG4gKiBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIGZpbHRlciB0aGlzIHNob3VsZCBiZSB5b3VyIGJhc2UgY2xhc3MuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHZlcnRleFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdmVydGV4IHNoYWRlciBzb3VyY2UgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBmcmFnbWVudFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIHVuaWZvcm1zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1bmlmb3JtcyBmb3IgdGhpcyBmaWx0ZXIuXG4gKi9cbmZ1bmN0aW9uIEFic3RyYWN0RmlsdGVyKHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zKVxue1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygc2hhZGVyc1xuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlcnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHRyYSBwYWRkaW5nIHRoYXQgdGhlIGZpbHRlciBtaWdodCBuZWVkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIHZlcnRleCBzaGFkZXJcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmdbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmVydGV4U3JjID0gdmVydGV4U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIG9mIHRoZSBmcmFtZW50IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgLy9UT0RPIGEgcmVtaW5kZXIgLSB3b3VsZCBiZSBjb29sIHRvIGhhdmUgbG93ZXIgcmVzIGZpbHRlcnMgYXMgdGhpcyB3b3VsZCBnaXZlIGJldHRlciBwZXJmb3JtYW5jZS5cblxuICAgIC8vdHlwZW9mIGZyYWdtZW50U3JjID09PSAnc3RyaW5nJyA/IGZyYWdtZW50U3JjLnNwbGl0KCcnKSA6IChmcmFnbWVudFNyYyB8fCBbXSk7XG5cbn1cblxuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RmlsdGVyO1xuXG4vKipcbiAqIEdyYWJzIGEgc2hhZGVyIGZyb20gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBzaGFkZXIgZnJvbVxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuZ2V0U2hhZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyc1tnbC5pZF07XG5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IG5ldyBEZWZhdWx0U2hhZGVyKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIsXG4gICAgICAgICAgICB0aGlzLnZlcnRleFNyYyxcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRTcmMsXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaGFkZXJzW2dsLmlkXSA9IHNoYWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbn07XG5cbi8qKlxuICogU3luY3MgYSB1bmlmb3JtIGJldHdlZW4gdGhlIGNsYXNzIG9iamVjdCBhbmQgdGhlIHNoYWRlcnMuXG4gKlxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuc2hhZGVycy5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnNoYWRlcnNbaV0uc3luY1VuaWZvcm0odW5pZm9ybSk7XG4gICAgfVxufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKlxuICogQmFzaWMgRlhBQSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgY29kZSBvbiBnZWVrczNkLmNvbSB3aXRoIHRoZVxuICogbW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXG4gKiB1bnN1cHBvcnRlZCBieSBXZWJHTC5cbiAqXG4gKiAtLVxuICogRnJvbTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICpcbiAqL1xuZnVuY3Rpb24gRlhBQUZpbHRlcigpXG57XG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxuXFxudm9pZCB0ZXhjb29yZHModmVjMiBmcmFnQ29vcmQsIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk5XLCBvdXQgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiU1csIG91dCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzIgaW52ZXJzZVZQID0gMS4wIC8gcmVzb2x1dGlvbi54eTtcXG4gICAgdl9yZ2JOVyA9IChmcmFnQ29vcmQgKyB2ZWMyKC0xLjAsIC0xLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JORSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYlNXID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU0UgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIDEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk0gPSB2ZWMyKGZyYWdDb29yZCAqIGludmVyc2VWUCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbiAgIHZSZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcXG5cXG4gICAvL2NvbXB1dGUgdGhlIHRleHR1cmUgY29vcmRzIGFuZCBzZW5kIHRoZW0gdG8gdmFyeWluZ3NcXG4gICB0ZXhjb29yZHMoYVRleHR1cmVDb29yZCAqIHJlc29sdXRpb24sIHJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG5cXG4vKipcXG5CYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXFxubW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXFxudW5zdXBwb3J0ZWQgYnkgV2ViR0wuXFxuXFxuLS1cXG5cXG5Gcm9tOlxcbmh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XFxuXFxuQ29weXJpZ2h0IChjKSAyMDExIGJ5IEFybWluIFJvbmFjaGVyLlxcblxcblNvbWUgcmlnaHRzIHJlc2VydmVkLlxcblxcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcXG5tZXQ6XFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcXG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxcbiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXFxuICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXFxuICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxcblxcbiAgICAqIFRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yXFxuICAgICAgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljXFxuICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxcblxcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcXG5cXFwiQVMgSVNcXFwiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxcbkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXFxuT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXFxuU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxcblRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxcbiovXFxuXFxuI2lmbmRlZiBGWEFBX1JFRFVDRV9NSU5cXG4gICAgI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gICAoMS4wLyAxMjguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01VTFxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAgICgxLjAgLyA4LjApXFxuI2VuZGlmXFxuI2lmbmRlZiBGWEFBX1NQQU5fTUFYXFxuICAgICNkZWZpbmUgRlhBQV9TUEFOX01BWCAgICAgOC4wXFxuI2VuZGlmXFxuXFxuLy9vcHRpbWl6ZWQgdmVyc2lvbiBmb3IgbW9iaWxlLCB3aGVyZSBkZXBlbmRlbnRcXG4vL3RleHR1cmUgcmVhZHMgY2FuIGJlIGEgYm90dGxlbmVja1xcbnZlYzQgZnhhYShzYW1wbGVyMkQgdGV4LCB2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JOVywgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JTVywgdmVjMiB2X3JnYlNFLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzQgY29sb3I7XFxuICAgIG1lZGl1bXAgdmVjMiBpbnZlcnNlVlAgPSB2ZWMyKDEuMCAvIHJlc29sdXRpb24ueCwgMS4wIC8gcmVzb2x1dGlvbi55KTtcXG4gICAgdmVjMyByZ2JOVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTlcpLnh5ejtcXG4gICAgdmVjMyByZ2JORSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTkUpLnh5ejtcXG4gICAgdmVjMyByZ2JTVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU1cpLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU0UpLnh5ejtcXG4gICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTSk7XFxuICAgIHZlYzMgcmdiTSAgPSB0ZXhDb2xvci54eXo7XFxuICAgIHZlYzMgbHVtYSA9IHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdChyZ2JOVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFORSA9IGRvdChyZ2JORSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTVyA9IGRvdChyZ2JTVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdChyZ2JTRSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNICA9IGRvdChyZ2JNLCAgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNaW4gPSBtaW4obHVtYU0sIG1pbihtaW4obHVtYU5XLCBsdW1hTkUpLCBtaW4obHVtYVNXLCBsdW1hU0UpKSk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgobHVtYU0sIG1heChtYXgobHVtYU5XLCBsdW1hTkUpLCBtYXgobHVtYVNXLCBsdW1hU0UpKSk7XFxuXFxuICAgIG1lZGl1bXAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcblxcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoKGx1bWFOVyArIGx1bWFORSArIGx1bWFTVyArIGx1bWFTRSkgKlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwpLCBGWEFBX1JFRFVDRV9NSU4pO1xcblxcbiAgICBmbG9hdCByY3BEaXJNaW4gPSAxLjAgLyAobWluKGFicyhkaXIueCksIGFicyhkaXIueSkpICsgZGlyUmVkdWNlKTtcXG4gICAgZGlyID0gbWluKHZlYzIoRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBtYXgodmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiBpbnZlcnNlVlA7XFxuXFxuICAgIHZlYzMgcmdiQSA9IDAuNSAqIChcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqICgxLjAgLyAzLjAgLSAwLjUpKS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDIuMCAvIDMuMCAtIDAuNSkpLnh5eik7XFxuICAgIHZlYzMgcmdiQiA9IHJnYkEgKiAwLjUgKyAwLjI1ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogLTAuNSkueHl6ICtcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqIDAuNSkueHl6KTtcXG5cXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QocmdiQiwgbHVtYSk7XFxuICAgIGlmICgobHVtYUIgPCBsdW1hTWluKSB8fCAobHVtYUIgPiBsdW1hTWF4KSlcXG4gICAgICAgIGNvbG9yID0gdmVjNChyZ2JBLCB0ZXhDb2xvci5hKTtcXG4gICAgZWxzZVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkIsIHRleENvbG9yLmEpO1xcbiAgICByZXR1cm4gY29sb3I7XFxufVxcblxcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBmeGFhKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICogdlJlc29sdXRpb24sIHZSZXNvbHV0aW9uLCB2X3JnYk5XLCB2X3JnYk5FLCB2X3JnYlNXLCB2X3JnYlNFLCB2X3JnYk0pO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxufVxuXG5GWEFBRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkZYQUFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRlhBQUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRlhBQUZpbHRlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICovXG5GWEFBRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIoIHJlbmRlcmVyICk7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG4iLCJ2YXIgQWJzdHJhY3RGaWx0ZXIgPSByZXF1aXJlKCcuL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgU3ByaXRlTWFza0ZpbHRlciBjbGFzc1xuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICovXG5mdW5jdGlvbiBTcHJpdGVNYXNrRmlsdGVyKHNwcml0ZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXNrQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICAgdk1hc2tDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIC8vIGNoZWNrIGNsaXAhIHRoaXMgd2lsbCBzdG9wIHRoZSBtYXNrIGJsZWVkaW5nIG91dCBmcm9tIHRoZSBlZGdlc1xcbiAgICB2ZWMyIHRleHQgPSBhYnMoIHZNYXNrQ29vcmQgLSAwLjUgKTtcXG4gICAgdGV4dCA9IHN0ZXAoMC41LCB0ZXh0KTtcXG4gICAgZmxvYXQgY2xpcCA9IDEuMCAtIG1heCh0ZXh0LnksIHRleHQueCk7XFxuICAgIHZlYzQgb3JpZ2luYWwgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgICB2ZWM0IG1hc2t5ID0gdGV4dHVyZTJEKG1hc2ssIHZNYXNrQ29vcmQpO1xcbiAgICBvcmlnaW5hbCAqPSAobWFza3kuciAqIG1hc2t5LmEgKiBhbHBoYSAqIGNsaXApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBvcmlnaW5hbDtcXG59XFxuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hc2s6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLl90ZXh0dXJlIH0sXG4gICAgICAgICAgICBhbHBoYTogICAgICAgICAgeyB0eXBlOiAnZicsIHZhbHVlOiAxfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG59XG5cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVNYXNrRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVNYXNrRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS5fdGV4dHVyZTtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS53b3JsZEFscGhhO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHVzZWQgdG8gbW92ZSB0aGUgZGlzcGxhY2VtZW50IG1hcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlTWFza0ZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHbE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQmxlbmRNb2RlTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59XG5cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmRNb2RlTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxlbmRNb2RlTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzLXVwIHRoZSBnaXZlbiBibGVuZE1vZGUgZnJvbSBXZWJHTCdzIHBvaW50IG9mIHZpZXcuXG4gKlxuICogQHBhcmFtIGJsZW5kTW9kZSB7bnVtYmVyfSB0aGUgYmxlbmRNb2RlLCBzaG91bGQgYmUgYSBQaXhpIGNvbnN0LCBzdWNoIGFzIGBQSVhJLkJMRU5EX01PREVTLkFERGAuIFNlZVxuICogIHtAbGluayBQSVhJLkJMRU5EX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICovXG5CbGVuZE1vZGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRCbGVuZE1vZGUgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPT09IGJsZW5kTW9kZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMucmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmN1cnJlbnRCbGVuZE1vZGVdO1xuICAgIHRoaXMucmVuZGVyZXIuZ2wuYmxlbmRGdW5jKG1vZGVbMF0sIG1vZGVbMV0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpLFxuICAgIFF1YWQgPSByZXF1aXJlKCcuLi91dGlscy9RdWFkJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gRmlsdGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW107XG5cbiAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICByZW5kZXJUYXJnZXQ6cmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldCxcbiAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICBib3VuZHM6bnVsbFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgLy8gbGlzdGVuIGZvciBjb250ZXh0IGFuZCB1cGRhdGUgbmVjZXNzYXJ5IGJ1ZmZlcnNcbiAgICAvL1RPRE8gbWFrZSB0aGlzIGR5bmFtaWMhXG4gICAgLy9UT0RPIHRlc3QgdGhpcyBvdXQgYnkgZm9yY2VzIHBvd2VyIG9mIHR3bz9cbiAgICB0aGlzLnRleHR1cmVTaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZnJhbWVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcbn1cblxuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWx0ZXJNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBGaWx0ZXJNYW5hZ2VyO1xuXG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnF1YWQgPSBuZXcgUXVhZChnbCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHBhcmFtIGJ1ZmZlciB7QXJyYXlCdWZmZXJ9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnNldEZpbHRlclN0YWNrID0gZnVuY3Rpb24gKCBmaWx0ZXJTdGFjayApXG57XG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IGZpbHRlclN0YWNrO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXIgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBmaWx0ZXJzIHtQSVhJLkFic3RyYWN0RmlsZXJbXX0gdGhlIGZpbHRlcnMgdGhhdCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2tcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucHVzaEZpbHRlciA9IGZ1bmN0aW9uICh0YXJnZXQsIGZpbHRlcnMpXG57XG4gICAgLy8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdC4uXG4gICAgLy8gVE9ETyByZXBsYWNlIGNsb25lIHdpdGggYSBjb3B5IHRvIHNhdmUgb2JqZWN0IGNyZWF0aW9uXG4gICAgdmFyIGJvdW5kcyA9IHRhcmdldC5maWx0ZXJBcmVhID8gdGFyZ2V0LmZpbHRlckFyZWEuY2xvbmUoKSA6IHRhcmdldC5nZXRCb3VuZHMoKTtcblxuICAgIC8vYm91bmRzID0gYm91bmRzLmNsb25lKCk7XG5cbiAgICAvLyByb3VuZCBvZmYgdGhlIHJlY3RhbmdsZSB0byBnZXQgYSBuaWNlIHNtb29vb29vb3RoIGZpbHRlciA6KVxuICAgIGJvdW5kcy54ID0gYm91bmRzLnggfCAwO1xuICAgIGJvdW5kcy55ID0gYm91bmRzLnkgfCAwO1xuICAgIGJvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCB8IDA7XG4gICAgYm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgfCAwO1xuXG5cbiAgICAvLyBwYWRkaW5nIVxuICAgIHZhciBwYWRkaW5nID0gZmlsdGVyc1swXS5wYWRkaW5nIHwgMDtcbiAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG5cblxuICAgIGlmKHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvL1RPRE8gdGhpcyB3aWxsIGJyZWFrIGlmIHRoZSByZW5kZXJUZXh0dXJlIHRyYW5zZm9ybSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgdHJhbnNsYXRpb24uXG4gICAgICAgIC8vV2lsbCBuZWVkIHRvIHRha2UgdGhlIGZ1bGwgbWF0cml4IHRyYW5zZm9ybSBpbnRvIGFjb3VudC4uXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQudHJhbnNmb3JtO1xuXG4gICAgICAgIGJvdW5kcy54ICs9IHRyYW5zZm9ybS50eDtcbiAgICAgICAgYm91bmRzLnkgKz0gdHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG5cbiAgICAgICAgYm91bmRzLnggLT0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSAtPSB0cmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgICB0aGlzLmNhcEZpbHRlckFyZWEoIGJvdW5kcyApO1xuICAgIH1cblxuICAgIGlmKGJvdW5kcy53aWR0aCA+IDAgJiYgYm91bmRzLmhlaWdodCA+IDApXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGJvdW5kcztcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGV4dHVyZSk7XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRleHR1cmUuLlxuICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gVE9ETyBnZXQgcmlkIG9mIG9iamVjdCBjcmVhdGlvbiFcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogdGV4dHVyZSxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBwdXNoIHNvbXRoaW5nIG9uIHRvIHRoZSBzdGFjayB0aGF0IGlzIGVtcHR5XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcnNcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnBvcEZpbHRlciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrLnBvcCgpO1xuICAgIHZhciBwcmV2aW91c0ZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrW3RoaXMuZmlsdGVyU3RhY2subGVuZ3RoLTFdO1xuXG4gICAgdmFyIGlucHV0ID0gZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyBpZiB0aGUgcmVuZGVyVGFyZ2V0IGlzIG51bGwgdGhlbiB3ZSBkb24ndCBhcHBseSB0aGUgZmlsdGVyIGFzIGl0cyBvZmZzY3JlZW5cbiAgICBpZighZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IHByZXZpb3VzRmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyB1c2UgcHJvZ3JhbVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaW5wdXQuZnJhbWU7XG5cbiAgICB0aGlzLnF1YWQubWFwKHRoaXMudGV4dHVyZVNpemUsIGlucHV0LmZyYW1lKTtcblxuXG4gICAgLy8gVE9ETy4uIHRoaXMgcHJvYmFibHkgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgZmlsdGVycyA9IGZpbHRlckRhdGEuZmlsdGVyO1xuXG4gICAgLy8gYXNzdW1pbmcgYWxsIGZpbHRlcnMgZm9sbG93IHRoZSBjb3JyZWN0IGZvcm1hdD8/XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAyICogNCAqIDQpO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIG5vcm1hbCBibGVuZG1vZGUhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShDT05TVC5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAxKVxuICAgIHtcbiAgICAgICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoZW4gc2V0dGluZyB0aGlzIGVhY2ggdGltZT9cbiAgICAgICAgaWYgKGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgIGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1swXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgaW5wdXQsIG91dHB1dCApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggaW5wdXQgKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZmxpcFRleHR1cmUgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3BUZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aC0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICAgICAgaWYgKGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBmbG9wVGV4dHVyZSApO1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGZsaXBUZXh0dXJlO1xuICAgICAgICAgICAgZmxpcFRleHR1cmUgPSBmbG9wVGV4dHVyZTtcbiAgICAgICAgICAgIGZsb3BUZXh0dXJlID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlcnNbZmlsdGVycy5sZW5ndGgtMV0uYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBvdXRwdXQgKTtcblxuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxpcFRleHR1cmUgKTtcbiAgICAgICAgdGhpcy5yZXR1cm5SZW5kZXJUYXJnZXQoIGZsb3BUZXh0dXJlICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckRhdGEuZmlsdGVyO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY2xlYXIgdGhlIFJlbmRlclRhcmdldFxuICogQHJldHVybiB7UmVuZGVyVGFyZ2V0fVxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIGNsZWFyIClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy50ZXh0dXJlUG9vbC5wb3AoKSB8fCBuZXcgUmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyZXIuZ2wsIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0LCBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiAqIENPTlNULkZJTFRFUl9SRVNPTFVUSU9OKTtcbiAgICByZW5kZXJUYXJnZXQuZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcih0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyVGFyZ2V0O1xufTtcblxuLypcbiAqIFJldHVybnMgYSBSZW5kZXJUYXJnZXQgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1JlbmRlclRhcmdldH0gVGhlIFJlbmRlclRhcmdldCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5SZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0KVxue1xuICAgIHRoaXMudGV4dHVyZVBvb2wucHVzaCggcmVuZGVyVGFyZ2V0ICk7XG59O1xuXG4vKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2hhZGVyIHtTaGFkZXJ9IFRoZSBzaGFkZXIgdG8gdXBsb2FkXG4gKiBAcGFyYW0gaW5wdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBjbGVhciB0aGUgb3V0cHV0VGFyZ2V0XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHNoYWRlciwgaW5wdXRUYXJnZXQsIG91dHB1dFRhcmdldCwgY2xlYXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG91dHB1dFRhcmdldCk7XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICBvdXRwdXRUYXJnZXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHNoYWRlclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gQ2FuIHRoaXMgYmUgY2FjaGVkIGFuZCBub3QgYHRvQXJyYXlgZWQgZWFjaCBmcmFtZT9cbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG5cbiAgICAvL1RPRE8gY2FuIHRoaXMgYmUgb3B0aW1pc2VkP1xuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcbi8qXG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcbiovXG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBpbnB1dFRhcmdldC50ZXh0dXJlKTtcblxuICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbn07XG5cbi8qXG4gKiBDYWxjdWxhdGVzIHRoZSBtYXBwZWQgbWF0cml4XG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWFcbiAqIEBwYXJhbSBzcHJpdGUge1Nwcml0ZX0gdGhlIHRhcmdldCBzcHJpdGVcbiAqIEBwYXJhbSBvdXRwdXRNYXRyaXgge01hdHJpeH0gQGFsdmluXG4gKi9cbi8vIFRPRE8gcGxheWluZyBhcm91bmQgaGVyZS4uIHRoaXMgaXMgdGVtcG9yYXJ5IC0gKHdpbGwgZW5kIHVwIGluIHRoZSBzaGFkZXIpXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jYWxjdWxhdGVNYXBwZWRNYXRyaXggPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSwgc3ByaXRlLCBvdXRwdXRNYXRyaXgpXG57XG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gc3ByaXRlLndvcmxkVHJhbnNmb3JtLmNvcHkobWF0aC5NYXRyaXguVEVNUF9NQVRSSVgpLFxuICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICB2YXIgbWFwcGVkTWF0cml4ID0gb3V0cHV0TWF0cml4LmlkZW50aXR5KCk7XG5cbiAgICAvLyBzY2FsZS4uXG4gICAgdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCApO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKDEgLCByYXRpbyk7XG5cbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyB0ZXh0dXJlLndpZHRoKTtcbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gdGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0udHggLz0gdGV4dHVyZS53aWR0aCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICB3b3JsZFRyYW5zZm9ybS50eSAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0uaW52ZXJ0KCk7XG5cbiAgICBtYXBwZWRNYXRyaXgucHJlcGVuZCh3b3JsZFRyYW5zZm9ybSk7XG5cbiAgICAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIG1hcHBlZE1hdHJpeC50cmFuc2xhdGUoc3ByaXRlLmFuY2hvci54LCBzcHJpdGUuYW5jaG9yLnkpO1xuXG4gICAgcmV0dXJuIG1hcHBlZE1hdHJpeDtcblxuICAgIC8vIEtlZXBpbmcgdGhlIG9yZ2luYWwgYXMgYSByZW1pbmRlciB0byBtZSBvbiBob3cgdGhpcyB3b3JrcyFcbiAgICAvL1xuICAgIC8vIHZhciBtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvLyAvLyBzY2FsZS4uXG4gICAgLy8gdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgLy8gbS50cmFuc2xhdGUoZmlsdGVyQXJlYS54IC8gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgZmlsdGVyQXJlYS55IC8gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQpO1xuXG5cbiAgICAvLyBtLnNjYWxlKDEgLCByYXRpbyk7XG5cblxuICAgIC8vIHZhciB0cmFuc2Zvcm0gPSB3dC5jbG9uZSgpO1xuXG4gICAgLy8gdmFyIHRyYW5zbGF0ZVNjYWxlWCA9ICh0aGlzLnRleHR1cmVTaXplLndpZHRoIC8gNjIwKTtcbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gMzgwKTtcblxuICAgIC8vIHRyYW5zZm9ybS50eCAvPSA2MjAgKiB0cmFuc2xhdGVTY2FsZVg7XG4gICAgLy8gdHJhbnNmb3JtLnR5IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcblxuICAgIC8vIHRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIC8vIHRyYW5zZm9ybS5hcHBlbmQobSk7XG5cbiAgICAvLyAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgLy8gdHJhbnNmb3JtLnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIC8vIHJldHVybiB0cmFuc2Zvcm07XG59O1xuXG4vKlxuICogQ29uc3RyYWlucyB0aGUgZmlsdGVyIGFyZWEgdG8gdGhlIHRleHR1cmUgc2l6ZVxuICogQHBhcmFtIGZpbHRlckFyZWEge1JlY3RhbmdsZX0gVGhlIGZpbHRlciBhcmVhIHdlIHdhbnQgdG8gY2FwXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhcEZpbHRlckFyZWEgPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSlcbntcbiAgICBpZiAoZmlsdGVyQXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEud2lkdGggKz0gZmlsdGVyQXJlYS54O1xuICAgICAgICBmaWx0ZXJBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgKz0gZmlsdGVyQXJlYS55O1xuICAgICAgICBmaWx0ZXJBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggZmlsdGVyQXJlYS54ICsgZmlsdGVyQXJlYS53aWR0aCA+IHRoaXMudGV4dHVyZVNpemUud2lkdGggKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCA9IHRoaXMudGV4dHVyZVNpemUud2lkdGggLSBmaWx0ZXJBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnkgKyBmaWx0ZXJBcmVhLmhlaWdodCA+IHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLSBmaWx0ZXJBcmVhLnk7XG4gICAgfVxufTtcblxuLypcbiAqIFJlc2l6ZXMgYWxsIHRoZSByZW5kZXIgdGFyZ2V0cyBpbiB0aGUgcG9vbFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLnRleHR1cmVTaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLnJlc2l6ZSggd2lkdGgsIGhlaWdodCApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGZpbHRlciBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBmaWx0ZXIgc3RhY2suXG4gKlxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnF1YWQuZGVzdHJveSgpO1xuICAgIFxuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBudWxsO1xuICAgIHRoaXMub2Zmc2V0WSA9IDA7XG5cbiAgICAvLyBkZXN0cm95IHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHR1cmVQb29sLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlUG9vbCA9IG51bGw7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgQWxwaGFNYXNrRmlsdGVyID0gcmVxdWlyZSgnLi4vZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNYXNrTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICB0aGlzLmFscGhhTWFza1Bvb2wgPSBbXTtcbn1cblxuTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hc2tNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgaWYgKG1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBtYXNrIGZyb20gdGhlIG1hc2sgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucG9wU3ByaXRlTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTcHJpdGVNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdmFyIGFscGhhTWFza0ZpbHRlciA9IHRoaXMuYWxwaGFNYXNrUG9vbC5wb3AoKTtcblxuICAgIGlmICghYWxwaGFNYXNrRmlsdGVyKVxuICAgIHtcbiAgICAgICAgYWxwaGFNYXNrRmlsdGVyID0gW25ldyBBbHBoYU1hc2tGaWx0ZXIobWFza0RhdGEpXTtcbiAgICB9XG5cbiAgICBhbHBoYU1hc2tGaWx0ZXJbMF0ubWFza1Nwcml0ZSA9IG1hc2tEYXRhO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRhcmdldCwgYWxwaGFNYXNrRmlsdGVyKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKi9cbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTcHJpdGVNYXNrID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVycyA9IHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbC5wdXNoKGZpbHRlcnMpO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTdGVuY2lsTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaE1hc2sobWFza0RhdGEpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BNYXNrKG1hc2tEYXRhKTtcbn07XG5cbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1RleHR1cmVTaGFkZXInKSxcbiAgICBDb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhBdHRpYnMgPSAxMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG5cbi8vICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcbn1cblxuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaGFkZXJNYW5hZ2VyO1xudXRpbHMucGx1Z2luVGFyZ2V0Lm1peGluKFNoYWRlck1hbmFnZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlck1hbmFnZXI7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cblNoYWRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlIGNvcnJlY3RseSBhcyB0aGlzIHRlbmRzIHRvIHZhcnlcbiAgICB0aGlzLm1heEF0dGlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xuXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1heEF0dGliczsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRPRE8gLSBXaHkgYXJlIHRoZXNlIG5vdCBwbHVnaW5zPyBXZSBjYW4ndCBkZWNvdXBsZSBwcmltaXRpdmVzIHVubGVzcyB0aGV5IGFyZS4uLi5cbiAgICB0aGlzLmRlZmF1bHRTaGFkZXIgPSBuZXcgVGV4dHVyZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcyk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbmV3IENvbXBsZXhQcmltaXRpdmVTaGFkZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFRha2VzIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHBhcmFtZXRlcnMgYW5kIHVwbG9hZHMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXR0cmlicyB7YW55W119IGF0dHJpYnNcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0QXR0cmlicyA9IGZ1bmN0aW9uIChhdHRyaWJzKVxue1xuICAgIC8vIHJlc2V0IHRlbXAgc3RhdGVcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRlbXBBdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAodmFyIGEgaW4gYXR0cmlicylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbYV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSAhPT0gdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHNoYWRlci5cbiAqXG4gKiBAcGFyYW0gc2hhZGVyIHtQSVhJLlNoYWRlcn0gdGhlIHNoYWRlciB0byB1cGxvYWRcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0U2hhZGVyID0gZnVuY3Rpb24gKHNoYWRlcilcbntcbiAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRJZCA9PT0gc2hhZGVyLnVpZClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50SWQgPSBzaGFkZXIudWlkO1xuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5nbC51c2VQcm9ncmFtKHNoYWRlci5wcm9ncmFtKTtcbiAgICB0aGlzLnNldEF0dHJpYnMoc2hhZGVyLmF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0LlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBXZWJHTE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBudWxsO1xufVxuXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFza01hbmFnZXI7XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgbWFzayBzdGFjayB0aGF0IGlzIHVzZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICpcbiAqIEBwYXJhbSBzdGVuY2lsTWFza1N0YWNrIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9IFRoZSBtYXNrIHN0YWNrXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnNldE1hc2tTdGFjayA9IGZ1bmN0aW9uICggc3RlbmNpbE1hc2tTdGFjayApXG57XG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBpZiAoc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLiBAYWx2aW5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWwgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQuYXR0YWNoU3RlbmNpbEJ1ZmZlcigpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICBpZiAoc21zLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgZ2wuY2xlYXIoZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTtcbiAgICAgICAgc21zLnJldmVyc2UgPSB0cnVlO1xuICAgICAgICBzbXMuY291bnQgPSAwO1xuICAgIH1cblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucHVzaCh3ZWJHTERhdGEpO1xuXG4gICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5WRVJUKTtcblxuICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgIGlmIChzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgIH1cblxuICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSBsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLktFRVApO1xuXG4gICAgc21zLmNvdW50Kys7XG59O1xuXG4vKipcbiAqIFRPRE8gdGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSFcbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuYmluZEdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgLy9pZiAodGhpcy5fY3VycmVudEdyYXBoaWNzID09PSBncmFwaGljcylyZXR1cm47XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBiaW5kIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0zZnYoc2hhZGVyLnVuaWZvcm1zLmNvbG9yLl9sb2NhdGlvbiwgd2ViR0xEYXRhLmNvbG9yKTtcblxuICAgICAgICBnbC51bmlmb3JtMWYoc2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSk7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDQgKiAyLCAwKTtcblxuICAgICAgICAvLyBub3cgZG8gdGhlIHJlc3QuLlxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAqL1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvL3RoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5hY3RpdmF0ZVByaW1pdGl2ZVNoYWRlcigpO1xuLy8gICAgICAgIHNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wcmltaXRpdmVTaGFkZXI7XG4gICAgICAgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG5cbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuLy8gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuXG4gICAgICAvKiAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7Ki9cbiAgICB9XG59O1xuXG4vKipcbiAqIFRPRE8gQGFsdmluXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIHNtcyA9IHRoaXMuc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucG9wKCk7XG5cbiAgICBzbXMuY291bnQtLTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIC8vIHRoZSBzdGFjayBpcyBlbXB0eSFcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgICAgIHRoaXMuYmluZEdyYXBoaWNzKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcblxuICAgICAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRyYXcgYSBxdWFkIHRvIGluY3JlbWVudC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgICAgICAgICAvLyBkcmF3IHRoZSB0cmlhbmdsZSBzdHJpcCFcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCArPSAyO1xuXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKSwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgLy8gIGNvbnNvbGUubG9nKFwiPDw+PlwiKVxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIChsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cblxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIG1hc2sgc3RhY2suXG4gKlxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2sgPSBudWxsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfSBUaGUgbWFzayBkYXRhIHN0cnVjdHVyZSB0byB1c2VcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIFxuICAgIC8vVE9ETyBGSVhcbiAgICBpZiAobWFza0RhdGEuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MudXBkYXRlR3JhcGhpY3MobWFza0RhdGEsIHRoaXMucmVuZGVyZXIuZ2wpO1xuICAgIH1cblxuICAgIGlmICghbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFN0ZW5jaWwobWFza0RhdGEsIG1hc2tEYXRhLl93ZWJHTFt0aGlzLnJlbmRlcmVyLmdsLmlkXS5kYXRhWzBdKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIodGhpcy5yZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcblxuICAgIHRoaXMucG9wU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuIiwiLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLm9uKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xufVxuXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTE1hbmFnZXI7XG5cbi8qKlxuICogR2VuZXJpYyBtZXRob2QgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbldlYkdMTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblx0Ly8gZG8gc29tZSBjb2RlcyBpbml0IVxufTtcblxuLyoqXG4gKiBHZW5lcmljIGRlc3Ryb3kgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlbmRlcmVyLm9mZignY29udGV4dCcsIHRoaXMub25Db250ZXh0Q2hhbmdlLCB0aGlzKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCcuL1NoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBjb21wbGV4IHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQ29tcGxleFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyBjb2xvcjsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoY29sb3IgKiBhbHBoYSAqIHRpbnQsIGFscGhhKTsnLC8vXCIgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIGNvbG9yOiAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsMCwwXSB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB0aW50OiAgIHsgdHlwZTogJzNmJywgdmFsdWU6IFswLCAwLCAwXSB9LFxuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFDb2xvcjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQmFzZSBzaGFkZXIgY2xhc3MgZm9yIFBJWEkgbWFuYWdlZCBzaGFkZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbdW5pZm9ybXNdIHtvYmplY3R9IFVuaWZvcm1zIGZvciB0aGlzIHNoYWRlci5cbiAqIEBwYXJhbSBbYXR0cmlidXRlc10ge29iamVjdH0gQXR0cmlidXRlcyBmb3IgdGhpcyBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIFNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcylcbntcbiAgICBpZiAoIXZlcnRleFNyYyB8fCAhZnJhZ21lbnRTcmMpXG4gICAge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXhpLmpzIEVycm9yLiBTaGFkZXIgcmVxdWlyZXMgdmVydGV4U3JjIGFuZCBmcmFnbWVudFNyYycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5nbCA9IHNoYWRlck1hbmFnZXIucmVuZGVyZXIuZ2w7XG5cbiAgICAvL1RPRE8gbWF5YmUgd2Ugc2hvdWxkIHBhc3MgcmVuZGVyZXIgcmF0aGVyIHRoYW4gc2hhZGVyIG1hbmdlcj8/IGZvb2QgZm9yIHRob3VnaHQuLlxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IHNoYWRlck1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgcHJvZ3JhbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUHJvZ3JhbX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaWZvcm1zIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhdHRyaWJ1dGVzIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50ZXJcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlciBhcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmM7XG5cbiAgICB0aGlzLmluaXQoKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHNoYWRlciBhbmQgdXNlcyBpdFxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbXBpbGUoKTtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy51bmlmb3JtcykpO1xuICAgIHRoaXMuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKSk7XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSB1bmlmb3JtIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgdW5pZm9ybXMgdG8gY2FjaGVcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnVuaWZvcm1zW2tleXNbaV1dLl9sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWNoZXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgYXR0cmlidXRlIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgYXR0cmlidXRlcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlQXR0cmlidXRlTG9jYXRpb25zID0gZnVuY3Rpb24gKGtleXMpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleXNbaV1dID0gdGhpcy5nbC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGtleXNbaV0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgbmVlZGVkIGFueW1vcmUuLi5cblxuICAgIC8vIEJlZ2luIHdvcnN0IGhhY2sgZXZhIC8vXG5cbiAgICAvLyBXSFk/Pz8gT05MWSBvbiBteSBjaHJvbWUgcGl4ZWwgdGhlIGxpbmUgYWJvdmUgcmV0dXJucyAtMSB3aGVuIHVzaW5nIGZpbHRlcnM/XG4gICAgLy8gbWF5YmUgaXRzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnbCBjb250ZXh0LlxuICAgIC8vIEknbSBjb252aW5jZWQgdGhpcyBpcyBhIGJ1ZyBpbiB0aGUgY2hyb21lIGJyb3dzZXIgYXMgdGhlcmUgaXMgTk8gcmVhc29uIHdoeSB0aGlzIHNob3VsZCBiZSByZXR1cm5pbmcgLTEgZXNwZWNpYWxseSBhcyBpdCBvbmx5IG1hbmlmZXN0cyBvbiBteSBjaHJvbWUgcGl4ZWxcbiAgICAvLyBJZiB0aGVyZXMgYW55IHdlYkdMIHBlb3BsZSB0aGF0IGtub3cgd2h5IGNvdWxkIGhhcHBlbiBwbGVhc2UgaGVscCA6KVxuICAgIC8vIGlmICh0aGlzLmF0dHJpYnV0ZXMuYUNvbG9yID09PSAtMSl7XG4gICAgLy8gICAgIHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPSAyO1xuICAgIC8vIH1cblxuICAgIC8vIEVuZCB3b3JzdCBoYWNrIGV2YSAvL1xufTtcblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQgY3JlYXRlcyB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19XG4gKi9cblNoYWRlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHZhciBnbFZlcnRTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuVkVSVEVYX1NIQURFUiwgdGhpcy52ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuRlJBR01FTlRfU0hBREVSLCB0aGlzLmZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuICh0aGlzLnByb2dyYW0gPSBwcm9ncmFtKTtcbn07XG5cbi8qKlxuKiBBZGRzIGEgbmV3IHVuaWZvcm1cbipcbiogQHBhcmFtIHVuaWZvcm0ge29iamVjdH0gdGhlIG5ldyB1bmlmb3JtIHRvIGF0dGFjaFxuKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgbG9jYXRpb24gPSB1bmlmb3JtLl9sb2NhdGlvbixcbiAgICAgICAgdmFsdWUgPSB1bmlmb3JtLnZhbHVlLFxuICAgICAgICBnbCA9IHRoaXMuZ2wsXG4gICAgICAgIGksIGlsO1xuXG4gICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIHNpbmdsZSBpbnQgdmFsdWVcbiAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGZsb2F0IHZhbHVlXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBjYXNlICcxZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSgyKSBvciBKUyBBcnJyYXlcbiAgICAgICAgY2FzZSAnMmYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDMpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICczZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDQpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgMkQgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YyJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDNEIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2Myc6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSA0RCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjQnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMWl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMml2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnNGl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20yJzpcbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgIGNhc2UgJ01hdHJpeDJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB1bmlmb3JtLnRyYW5zcG9zZSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20zJzpcbiAgICAgICAgY2FzZSAnbWF0Myc6XG4gICAgICAgIGNhc2UgJ01hdHJpeDNmdic6XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICBjYXNlICdtYXQ0JzpcbiAgICAgICAgY2FzZSAnTWF0cml4NGZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIENvbG9yIFZhbHVlXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgaW50ZWdlcnMgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdjEnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAyRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yydic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgyICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAyXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDIgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYXJyYXkgb2YgM0QgUG9pbnQgb2JqZWN0c1xuICAgICAgICBjYXNlICd2M3YnOlxuICAgICAgICAgICAgaWYgKCF1bmlmb3JtLl9hcnJheSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMyAqIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlsID0gdmFsdWUubGVuZ3RoOyBpIDwgaWw7ICsraSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogM10gICAgICAgPSB2YWx1ZVtpXS54O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzICsgMV0gICA9IHZhbHVlW2ldLnk7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAyXSAgID0gdmFsdWVbaV0uejtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiA0RCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Y0dic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg0ICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0XSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDJdICAgPSB2YWx1ZVtpXS56O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgM10gICA9IHZhbHVlW2ldLnc7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gUElYSS5UZXh0dXJlXG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuXG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUgfHwgIXVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGlzIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xbJ1RFWFRVUkUnICsgdGhpcy50ZXh0dXJlQ291bnRdKTtcblxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXTtcblxuICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdGV4dHVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9uZS4uXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgICAgICAgICAgLy8gc2V0IHVuaWZvcm0gdG8gdGV4dHVyZSBpbmRleFxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0uX2xvY2F0aW9uLCB0aGlzLnRleHR1cmVDb3VudCk7XG5cbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBuZXh0IHRleHR1cmUgaWRcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgU2hhZGVyIFdhcm5pbmc6IFVua25vd24gdW5pZm9ybSB0eXBlOiAnICsgdW5pZm9ybS50eXBlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNoYWRlciB1bmlmb3JtIHZhbHVlcy5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm1zID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy51bmlmb3JtcylcbiAgICB7XG4gICAgICAgIHRoaXMuc3luY1VuaWZvcm0odGhpcy51bmlmb3Jtc1trZXldKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSW5pdGlhbGlzZXMgYSBTYW1wbGVyMkQgdW5pZm9ybSAod2hpY2ggbWF5IG9ubHkgYmUgYXZhaWxhYmxlIGxhdGVyIG9uIGFmdGVyIGluaXRVbmlmb3JtcyBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBsb2FkZWQpXG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXRTYW1wbGVyMkQgPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbiAgICBpZiAodW5pZm9ybS50ZXh0dXJlRGF0YSlcbiAgICB7XG5cbiAgICAgICAgLy9UT0RPIG1vdmUgdGhpcy4uLlxuICAgICAgICB2YXIgZGF0YSA9IHVuaWZvcm0udGV4dHVyZURhdGE7XG5cbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuXG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBsaWVkQWxwaGEpO1xuICAgICAgICAvLyBHTFRleHR1cmUgPSBtYWcgbGluZWFyLCBtaW4gbGluZWFyX21pcG1hcF9saW5lYXIsIHdyYXAgcmVwZWF0ICsgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIC8vIEdMVGV4dHVyZUxpbmVhciA9IG1hZy9taW4gbGluZWFyLCB3cmFwIGNsYW1wXG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3RSZXBlYXQgPSBtYWcvbWluIE5FQVJFU1QsIHdyYXAgcmVwZWF0XG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3QgPSBtYWcvbWluIG5lYXJlc3QsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gQXVkaW9UZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCA1MTIsIGhlaWdodCAyLCBib3JkZXIgMFxuICAgICAgICAvLyBLZXlUZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCAyNTYsIGhlaWdodCAyLCBib3JkZXIgMFxuXG4gICAgICAgIC8vICBtYWdGaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcbiAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxuXG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZGF0YS5sdW1pbmFuY2UgPyBnbC5MVU1JTkFOQ0UgOiBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLnNvdXJjZSk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGRhdGEubWFnRmlsdGVyID8gZGF0YS5tYWdGaWx0ZXIgOiBnbC5MSU5FQVIgKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSApO1xuXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGRhdGEud3JhcFQgPyBkYXRhLndyYXBUIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyTWFuYWdlci5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHNoYWRlci5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5nbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmdsID0gbnVsbDtcbiAgICB0aGlzLnVuaWZvcm1zID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSBudWxsO1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBudWxsO1xufTtcblxuU2hhZGVyLnByb3RvdHlwZS5fZ2xDb21waWxlID0gZnVuY3Rpb24gKHR5cGUsIHNyYylcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICB0aGlzLmdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgdGhpcy5nbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cbiAgICBpZiAoIXRoaXMuZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgdGhpcy5nbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCBjdXN0b21Vbmlmb3JtcywgY3VzdG9tQXR0cmlidXRlcylcbntcbiAgICB2YXIgdW5pZm9ybXMgPSB7XG5cbiAgICAgICAgdVNhbXBsZXI6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogMCB9LFxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxXSkgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVW5pZm9ybXMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciB1IGluIGN1c3RvbVVuaWZvcm1zKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bmlmb3Jtc1t1XSA9IGN1c3RvbVVuaWZvcm1zW3VdO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgYVZlcnRleFBvc2l0aW9uOiAgICAwLFxuICAgICAgICBhVGV4dHVyZUNvb3JkOiAgICAgIDAsXG4gICAgICAgIGFDb2xvcjogICAgICAgICAgICAgMFxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tQXR0cmlidXRlcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGEgaW4gY3VzdG9tQXR0cmlidXRlcylcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlc1thXSA9IGN1c3RvbUF0dHJpYnV0ZXNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYWdtZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IFRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgU2hhZGVyLmNhbGwodGhpcywgc2hhZGVyTWFuYWdlciwgdmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihnbClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7Ly8sIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKTtcblxufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi4vbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQmFzZSBmb3IgYSBjb21tb24gb2JqZWN0IHJlbmRlcmVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzeXN0ZW0gcmVuZGVyZXIgcGx1Z2luLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gT2JqZWN0UmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufVxuXG5cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYmplY3RSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0UmVuZGVyZXI7XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZW5kZXJlciBhbmQgc2V0cyB0aGUgc2hhZGVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIHNldCB0aGUgc2hhZGVyLi5cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHJlbmRlcmVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xufTtcblxuLyoqXG4gKiBmbHVzaGVzXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIGZsdXNoIVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gcmVuZGVyIHRoZSBvYmplY3Rcbn07XG4iLCIvKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSBxdWFkXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFRoZSBnbCBjb250ZXh0IGZvciB0aGlzIHF1YWQgdG8gdXNlLlxuICovXG5mdW5jdGlvbiBRdWFkKGdsKVxue1xuICAgIC8qXG4gICAgICogdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4vLyAgICB0aGlzLnRleHR1cmVzID0gbmV3IFRleHR1cmVVdnMoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAwLDAsXG4gICAgICAgIDIwMCwwLFxuICAgICAgICAyMDAsMjAwLFxuICAgICAgICAwLDIwMFxuICAgIF0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgcXVhZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMSwwLFxuICAgICAgICAxLDEsXG4gICAgICAgIDAsMVxuICAgIF0pO1xuXG4vLyAgICB2YXIgd2hpdGUgPSAoMHhGRkZGRkYgPj4gMTYpICsgKDB4RkZGRkZGICYgMHhmZjAwKSArICgoMHhGRkZGRkYgJiAweGZmKSA8PCAxNikgKyAoMSAqIDI1NSA8PCAyNCk7XG4gICAgLy9UT0RPIGNvbnZlcnQgdGhpcyB0byBhIDMyIHVuc2lnbmVkIGludCBhcnJheVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBjb21wb25lbnRzIG9mIHRoZSB0cmlhbmdsZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxXG4gICAgXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbXG4gICAgICAgIDAsIDEsIDIsIDAsIDMsIDJcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSB2ZXJ0ZXggYnVmZmVyXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSBpbmRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDggKyAxNikgKiA0LCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnVwbG9hZCgpO1xufVxuXG5RdWFkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFF1YWQ7XG5cbi8qKlxuICogTWFwcyB0d28gUmVjdGFuZ2xlIHRvIHRoZSBxdWFkXG4gKiBAcGFyYW0gcmVjdCB7UElYSS5SZWN0YW5nbGV9IHRoZSBmaXJzdCByZWN0YW5nbGVcbiAqIEBwYXJhbSByZWN0MiB7UElYSS5SZWN0YW5nbGV9IHRoZSBzZWNvbmQgcmVjdGFuZ2xlXG4gKi9cblF1YWQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKHJlY3QsIHJlY3QyKVxue1xuICAgIHZhciB4ID0gMDsgLy9yZWN0Mi54IC8gcmVjdC53aWR0aDtcbiAgICB2YXIgeSA9IDA7IC8vcmVjdDIueSAvIHJlY3QuaGVpZ2h0O1xuXG4gICAgdGhpcy51dnNbMF0gPSB4O1xuICAgIHRoaXMudXZzWzFdID0geTtcblxuICAgIHRoaXMudXZzWzJdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1szXSA9IHk7XG5cbiAgICB0aGlzLnV2c1s0XSA9IHggKyByZWN0Mi53aWR0aCAvIHJlY3Qud2lkdGg7XG4gICAgdGhpcy51dnNbNV0gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1s2XSA9IHg7XG4gICAgdGhpcy51dnNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICAvLy8gLS0tLS1cbiAgICB4ID0gcmVjdDIueDtcbiAgICB5ID0gcmVjdDIueTtcblxuICAgIHRoaXMudmVydGljZXNbMF0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbMV0gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1syXSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzNdID0geTtcblxuICAgIHRoaXMudmVydGljZXNbNF0gPSB4ICsgcmVjdDIud2lkdGg7XG4gICAgdGhpcy52ZXJ0aWNlc1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQ7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzZdID0geDtcbiAgICB0aGlzLnZlcnRpY2VzWzddID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXIgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuUXVhZC5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvLyBUT0RPIGNvdWxkIHByb2JhYmx5IGJlIHB1c2hlZCBpbnRvIG9uZSB1cGxvYWQhXG4gICAgZ2wuYmluZEJ1ZmZlciggZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlciApO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMudmVydGljZXMpO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDggKiA0LCB0aGlzLnV2cyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgKDggKyA4KSAqIDQsIHRoaXMuY29sb3JzKTtcbn07XG5cblF1YWQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xuXG5cbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgICAgIFxuICAgIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcbiAgICBHTEZyYW1lYnVmZmVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xGcmFtZWJ1ZmZlcixcbiAgICBcbiAgICBTdGVuY2lsTWFza1N0YWNrID0gcmVxdWlyZSgnLi9TdGVuY2lsTWFza1N0YWNrJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIGhvcml6b250YWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgdmVydGljYWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAqIEBwYXJhbSByb290IHtib29sZWFufSBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gKi9cbnZhciBSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uLCByb290KVxue1xuICAgIC8vVE9ETyBSZXNvbHV0aW9uIGNvdWxkIGdvIGhlcmUgKCBlZyBsb3cgcmVzIGJsdXJzIClcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvLyBuZXh0IHRpbWUgdG8gY3JlYXRlIGEgZnJhbWUgYnVmZmVyIGFuZCB0ZXh0dXJlXG5cbiAgICAvKipcbiAgICAgKiBBIGZyYW1lIGJ1ZmZlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xGcmFtZUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJDb2xvciA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBvYmplY3QgYXMgYSByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9iamVjdCdzIHRyYW5zZm9ybVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5mcmFtZSA9IG51bGw7XG4gICAgXG4gICAgdGhpcy5kZWZhdWx0RnJhbWUgPSBuZXcgUElYSS5SZWN0YW5nbGUoKTtcbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBudWxsO1xuICAgIHRoaXMuc291cmNlRnJhbWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHN0ZW5jaWwgYnVmZmVyIHN0b3JlcyBtYXNraW5nIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlckJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgc3RlbmNpbCBtYXNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFza1N0YWNrfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG5ldyBTdGVuY2lsTWFza1N0YWNrKCk7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZXMgZmlsdGVyIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6dGhpcyxcbiAgICAgICAgICAgIGZpbHRlcjpbXSxcbiAgICAgICAgICAgIGJvdW5kczp0aGlzLnNpemVcbiAgICAgICAgfVxuICAgIF07XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVFxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gR0xGcmFtZWJ1ZmZlci5jcmVhdGVSR0JBKGdsLCAxMDAsIDEwMCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBBIGZyYW1lIGJ1ZmZlciBuZWVkcyBhIHRhcmdldCB0byByZW5kZXIgdG8uLlxuICAgICAgICAgICAgY3JlYXRlIGEgdGV4dHVyZSBhbmQgYmluZCBpdCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgICovXG4gICAgICAgIFxuXG4gICAgICAgLy8gVE9ETyBjaGFuZ2UhXG4gICAgICAgIC8vIHRoaXMgaXMgdXNlZCBieSB0aGUgYmFzZSB0ZXh0dXJlXG4gICAgICAgIHRoaXMudGV4dHVyZSA9IHRoaXMuZnJhbWVCdWZmZXIudGV4dHVyZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbWFrZSBpdCBhIG51bGwgZnJhbWVidWZmZXIuLlxuICAgICAgICB0aGlzLmZyYW1lQnVmZmVyLmZyYW1lYnVmZmVyID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn07XG5cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZW5kZXJUYXJnZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRhcmdldDtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpbHRlciB0ZXh0dXJlLlxuICpcbiAqIEBwYXJhbSBbYmluZD1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCB3ZSBiaW5kIG91ciBmcmFtZWJ1ZmZlciBiZWZvcmUgY2xlYXJpbmc/XG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbihjbGVhckNvbG9yKVxue1xuICAgIHZhciBjYyA9IGNsZWFyQ29sb3IgfHwgdGhpcy5jbGVhckNvbG9yXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5jbGVhcihjY1swXSxjY1sxXSxjY1syXSxjY1szXSkvL3IsZyxiLGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmF0dGFjaFN0ZW5jaWxCdWZmZXIgPSBmdW5jdGlvbigpXG57XG4gICAgLy9UT0RPIGNoZWNrIGlmIHN0ZW5jaWwgaXMgZG9uZT9cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgaXMgdXNlZCBmb3IgbWFza2luZyBpbiBwaXhpXG4gICAgICogbGV0cyBjcmVhdGUgb25lIGFuZCB0aGVuIGFkZCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgKi9cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZW5hYmxlU3RlbmNpbCgpO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXdwb3J0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIC8vVE9PRCByZWZhY3RvciB1c2FnZSBvZiBmcmFtZS4uXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIuYmluZCgpO1xuXG4gICAgdGhpcy5kZXN0aW5hdGlvbkZyYW1lID0gZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgfHwgdGhpcy5kZWZhdWx0RnJhbWU7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IHRoaXMuc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggdGhpcy5kZXN0aW5hdGlvbkZyYW1lLCB0aGlzLnNvdXJjZUZyYW1lICk7XG5cbiAgICBpZih0aGlzLnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5hcHBlbmQodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIGlmKHRoaXMuZGVzdGluYXRpb25GcmFtZSAhPT0gdGhpcy5zb3VyY2VGcmFtZSlcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgICAgICBnbC5zY2lzc29yKHRoaXMuZGVzdGluYXRpb25GcmFtZS54LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmRpc2FibGUoZ2wuU0NJU1NPUl9URVNUKTtcbiAgICB9XG5cblxuICAgIC8vIFRPRE8gLSBkb2VzIG5vdCBuZWVkIHRvIGJlIHVwZGF0ZWQgYWxsIHRoZSB0aW1lPz9cbiAgICBnbC52aWV3cG9ydCh0aGlzLmRlc3RpbmF0aW9uRnJhbWUueCx0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uKTtcblxuXG59O1xuXG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmFzZWQgb24gYSBwcm9qZWN0aW9uIGZyYW1lICh3aGljaCBpcyBhIHJlY3RhbmdsZSlcbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2FsY3VsYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbkZyYW1lLCBzb3VyY2VGcmFtZSlcbntcbiAgICB2YXIgcG0gPSB0aGlzLnByb2plY3Rpb25NYXRyaXg7XG5cbiAgICBzb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IGRlc3RpbmF0aW9uRnJhbWU7XG5cbiAgICBwbS5pZGVudGl0eSgpO1xuXG4gICAgLy8gVE9ETzogbWFrZSBkZXN0IHNjYWxlIHNvdXJjZVxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAxIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gLTEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAtMSAvIGRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0KjI7XG5cbiAgICAgICAgcG0udHggPSAtMSAtIHNvdXJjZUZyYW1lLnggKiBwbS5hO1xuICAgICAgICBwbS50eSA9IDEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVzaXplcyB0aGUgdGV4dHVyZSB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge051bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGhlaWdodCB7TnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgdGV4dHVyZVxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHdpZHRoID0gd2lkdGggfCAwO1xuICAgIGhlaWdodCA9IGhlaWdodCB8IDA7XG5cbiAgICBpZiAodGhpcy5zaXplLndpZHRoID09PSB3aWR0aCAmJiB0aGlzLnNpemUuaGVpZ2h0ID09PSBoZWlnaHQpIFxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2l6ZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuc2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICB0aGlzLmRlZmF1bHRGcmFtZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuZGVmYXVsdEZyYW1lLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIucmVzaXplKHdpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBoZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuICAgIFxuICAgIHZhciBwcm9qZWN0aW9uRnJhbWUgPSB0aGlzLmZyYW1lIHx8IHRoaXMuc2l6ZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSByZW5kZXIgdGFyZ2V0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIHRoaXMuZnJhbWVCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBTdGVuY2lsTWFza1N0YWNrKClcbntcblx0LyoqXG4gICAgICogVGhlIGFjdHVhbCBzdGFja1xuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsU3RhY2sgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQGFsdmluXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb3VudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY291bnQgPSAwO1xufVxuXG5TdGVuY2lsTWFza1N0YWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0ZW5jaWxNYXNrU3RhY2s7XG5tb2R1bGUuZXhwb3J0cyA9IFN0ZW5jaWxNYXNrU3RhY2s7XG4iLCJDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogTWFwcyBnbCBibGVuZCBjb21iaW5hdGlvbnMgdG8gV2ViR0xcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpKGdsLCBvYmplY3QpXG57XG4gICAgb2JqZWN0ID0gb2JqZWN0IHx8IHt9O1xuXG4gICAgLy9UT0RPIC0gcHJlbXVsdGlwbHkgYWxwaGEgd291bGQgYmUgZGlmZmVyZW50LlxuICAgIC8vYWRkIGEgYm9vbGVhbiBmb3IgdGhhdCFcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQUREXSAgICAgICAgICAgPSBbZ2wuU1JDX0FMUEhBLCBnbC5EU1RfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9IFtnbC5EU1RfQ09MT1IsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5TQ1JFRU5dICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLk9ORV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRBUktFTl0gICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0JVUk5dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRJRkZFUkVOQ0VdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aTtcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcblx0b2JqZWN0PSBvYmplY3QgfHwge307XG5cbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5QT0lOVFNdICAgICAgICAgPSBnbC5QT0lOVFM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORVNdICAgICAgICAgID0gZ2wuTElORVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9MT09QXSAgICAgID0gZ2wuTElORV9MT09QO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLkxJTkVfU1RSSVBdICAgICA9IGdsLkxJTkVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVTXSAgICAgID0gZ2wuVFJJQU5HTEVTO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXSA9IGdsLlRSSUFOR0xFX1NUUklQO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX0ZBTl0gICA9IGdsLlRSSUFOR0xFX0ZBTjtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBTcHJpdGUgb2JqZWN0IGlzIHRoZSBiYXNlIGZvciBhbGwgdGV4dHVyZWQgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCB0byB0aGUgc2NyZWVuXG4gKlxuICogQSBzcHJpdGUgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhbiBpbWFnZSBsaWtlIHRoaXM6XG4gKlxuICogYGBganNcbiAqIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgZm9yIHRoaXMgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZSh0ZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFuY2hvciBzZXRzIHRoZSBvcmlnaW4gcG9pbnQgb2YgdGhlIHRleHR1cmUuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgMCwwIHRoaXMgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0XG4gICAgICogU2V0dGluZyB0aGUgYW5jaG9yIHRvIDAuNSwwLjUgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgY2VudGVyZWRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMSwxIHdvdWxkIG1lYW4gdGhlIHRleHR1cmUncyBvcmlnaW4gcG9pbnQgd2lsbCBiZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmFuY2hvciA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUgKHRoaXMgaXMgaW5pdGlhbGx5IHNldCBieSB0aGUgdGV4dHVyZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQSB2YWx1ZSBvZiAweEZGRkZGRiB3aWxsIHJlbW92ZSBhbnkgdGludCBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2hhZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgc3ByaXRlLiBTZXQgdG8gbnVsbCB0byByZW1vdmUgYSBjdXJyZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJ8UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgY2FjaGVkIHZhbHVlIG9mIHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvLyBjYWxsIHRleHR1cmUgc2V0dGVyXG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBUZXh0dXJlLkVNUFRZO1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZVxuICAgIHRoaXMudmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblNwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLngpICogdGhpcy50ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzaWduID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLngpIHx8IDE7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBzaWduICogdmFsdWUgLyB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgTWF0aC5hYnModGhpcy5zY2FsZS55KSAqIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHByaXZhdGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBzbyBpZiBfd2lkdGggaXMgMCB0aGVuIHdpZHRoIHdhcyBub3Qgc2V0Li5cbiAgICBpZiAodGhpcy5fd2lkdGgpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnggPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgKiB0aGlzLl93aWR0aCAvIHRoaXMudGV4dHVyZS5mcmFtZS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zY2FsZS55ID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLnkpICogdGhpcy5faGVpZ2h0IC8gdGhpcy50ZXh0dXJlLmZyYW1lLmhlaWdodDtcbiAgICB9XG59O1xuXG5TcHJpdGUucHJvdG90eXBlLmNhY2x1bGF0ZVZlcnRpY2VzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgIHd0ID0gdGhpcy50cmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIGEgPSB3dC5hLCBiID0gd3QuYiwgYyA9IHd0LmMsIGQgPSB3dC5kLCB0eCA9IHd0LnR4LCB0eSA9IHd0LnR5LFxuICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhLFxuICAgICAgICB3MCwgdzEsIGgwLCBoMSxcbiAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcbiAgICAgICAgXG4gICAgaWYgKHRyaW0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgYW5kIGlzIG5vdCBhIHRpbGluZ3Nwcml0ZSB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgdzEgPSB0cmltLnggLSB0aGlzLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICBoMSA9IHRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcbiAgICB9XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMF0gPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzFdID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMl0gPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzNdID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzRdID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs1XSA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzZdID0gYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs3XSA9IGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG5cbn1cblxuLyoqXG4qXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy50cmFuc2Zvcm0udXBkYXRlZCB8fCB0aGlzLnRleHR1cmVEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZURpcnR5ID0gZmFsc2U7XG4gICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuICAgIH1cbiAgICBcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFNwcml0ZSBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcbiAgICAgICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5YLFxuICAgICAgICAgICAgbWF4WCxcbiAgICAgICAgICAgIG1pblksXG4gICAgICAgICAgICBtYXhZLFxuICAgICAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YTtcblxuICAgICAgICB2YXIgeDEgPSB2ZXJ0ZXhEYXRhWzBdXG4gICAgICAgIHZhciB5MSA9IHZlcnRleERhdGFbMV1cblxuICAgICAgICB2YXIgeDIgPSB2ZXJ0ZXhEYXRhWzJdXG4gICAgICAgIHZhciB5MiA9IHZlcnRleERhdGFbM11cblxuICAgICAgICB2YXIgeDMgPSB2ZXJ0ZXhEYXRhWzRdXG4gICAgICAgIHZhciB5MyA9IHZlcnRleERhdGFbNV1cblxuICAgICAgICB2YXIgeDQgPSB2ZXJ0ZXhEYXRhWzZdXG4gICAgICAgIHZhciB5NCA9IHZlcnRleERhdGFbN11cblxuICAgICAgICBtaW5YID0geDE7XG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkxO1xuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MTtcbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTE7XG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoaWxkcmVuXG4gICAgICAgIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGRCb3VuZHMgPSB0aGlzLmNvbnRhaW5lckdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICB3MCA9IGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICB3MSA9IGNoaWxkQm91bmRzLnggKyBjaGlsZEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGgwID0gY2hpbGRCb3VuZHMueTtcbiAgICAgICAgICAgIGgxID0gY2hpbGRCb3VuZHMueSArIGNoaWxkQm91bmRzLmhlaWdodDtcblxuICAgICAgICAgICAgbWluWCA9IChtaW5YIDwgdzApID8gbWluWCA6IHcwO1xuICAgICAgICAgICAgbWluWSA9IChtaW5ZIDwgaDApID8gbWluWSA6IGgwO1xuXG4gICAgICAgICAgICBtYXhYID0gKG1heFggPiB3MSkgPyBtYXhYIDogdzE7XG4gICAgICAgICAgICBtYXhZID0gKG1heFkgPiBoMSkgPyBtYXhZIDogaDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fYm91bmRzLnggPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHRoaXMuX2JvdW5kcy55ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG4gICAgdGhpcy5fYm91bmRzLndpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICByZXR1cm4gdGhpcy5fYm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgc3ByaXRlXG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cblNwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLnRleHR1cmUuY3JvcC53aWR0aCA8PSAwIHx8IHRoaXMudGV4dHVyZS5jcm9wLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vICBJZ25vcmUgbnVsbCBzb3VyY2VzXG4gICAgaWYgKHRoaXMudGV4dHVyZS52YWxpZClcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgICAgIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgIGR4LFxuICAgICAgICAgICAgZHksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDtcblxuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgICAgIC8vIElmIHNtb290aGluZ0VuYWJsZWQgaXMgc3VwcG9ydGVkIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgc21vb3RoaW5nIHByb3BlcnR5IGZvciB0aGlzIHRleHR1cmVcbiAgICAgICAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSO1xuICAgICAgICBpZiAocmVuZGVyZXIuc21vb3RoUHJvcGVydHkgJiYgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gIT09IHNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldID0gc21vb3RoaW5nRW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHRyaW1tZWQgd2Ugb2Zmc2V0IGJ5IHRoZSB0cmltIHgveSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgZnJhbWUgZGltZW5zaW9uc1xuXG4gICAgICAgIGlmKHRleHR1cmUucm90YXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICBcbiAgICAgICAgICAgIGR4ICs9IHdpZHRoO1xuXG4gICAgICAgICAgICB3dC50eCA9IGR5ICogd3QuYSArIGR4ICogd3QuYyArIHd0LnR4O1xuICAgICAgICAgICAgd3QudHkgPSBkeSAqIHd0LmIgKyBkeCAqIHd0LmQgKyB3dC50eTtcblxuICAgICAgICAgICAgdmFyIHRlbXAgPSB3dC5hO1xuICAgICAgICAgICAgd3QuYSAgPSAtd3QuYztcbiAgICAgICAgICAgIHd0LmMgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIHRlbXAgPSB3dC5iO1xuICAgICAgICAgICAgd3QuYiAgPSAtd3QuZDtcbiAgICAgICAgICAgIHd0LmQgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIC8vIHRoZSBhbmNob3IgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFib3ZlLCBzbyBsZXRzIHNldCBpdCB0byB6ZXJvXG4gICAgICAgICAgICBkeCA9IDA7XG4gICAgICAgICAgICBkeSA9IDA7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIC8vIEFsbG93IGZvciBwaXhlbCByb3VuZGluZ1xuICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgKHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwLFxuICAgICAgICAgICAgICAgICh3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHggPSBkeCB8IDA7XG4gICAgICAgICAgICBkeSA9IGR5IHwgMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICB3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjbGVhbiB1cCBjYWNoaW5nIC0gaG93IHRvIGNsZWFuIHVwIHRoZSBjYWNoZXM/XG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC55ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgc3ByaXRlIGFuZCBvcHRpb25hbGx5IGl0cyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95VGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95VGV4dHVyZSwgZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5hbmNob3IgPSBudWxsO1xuXG4gICAgaWYgKGRlc3Ryb3lUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcblxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zLi5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICovXG5TcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgU3ByaXRlKFRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXInKSxcbiAgICBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9jcmVhdGVJbmRpY2VzRm9yUXVhZHMnKSxcbiAgICBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4vZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgZ2xDb3JlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgU3ByaXRlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1Nwcml0ZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFJlbmRlcmVyIGRlZGljYXRlZCB0byBkcmF3aW5nIGFuZCBiYXRjaGluZyBzcHJpdGVzLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU3ByaXRlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgdmFsdWVzIHNlbnQgaW4gdGhlIHZlcnRleCBidWZmZXIuXG4gICAgICogcG9zaXRpb25YLCBwb3NpdGlvblksIGNvbG9yUiwgY29sb3JHLCBjb2xvckIgPSA1XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdmVydGV4IGluZm9ybWF0aW9uIGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgU3ByaXRlQmF0Y2ggYmVmb3JlIGl0IGZsdXNoZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIG91ciBiYXRjaFxuICAgIHZhciBudW1WZXJ0cyA9ICh0aGlzLnNpemUgKiA0KSAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBiYXRjaCwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgIHZhciBudW1JbmRpY2VzID0gdGhpcy5zaXplICogNjtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSB2ZXJ0ZXggZGF0YSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5QnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgQXJyYXlCdWZmZXIobnVtVmVydHMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBGbG9hdDMyQXJyYXkgZm9yIHBvc2l0aW9uc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciB1dnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIGNvbG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlcyBvZiB0aGUgZ2VvbWV0cnkgKHF1YWRzKSB0byBkcmF3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHModGhpcy5zaXplKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIFxuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICBcbiAgICAvL1RPRE8gLSAzMDAgaXMgYSBiaXQgbWFnaWMsIGZpZ3VyZSBvdXQgYSBuaWNlciBhbW91bnQhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykgXG4gICAge1xuICAgICAgICB0aGlzLmdyb3Vwc1tpXSA9IHt0ZXh0dXJlczpbXSwgdGV4dHVyZUNvdW50OjAsIGlkczpbXSwgc2l6ZTowLCBzdGFydDowLCBibGVuZDowfTsgXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcblxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsOyAgICBcbn1cblxuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3Nwcml0ZScsIFNwcml0ZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5NQVhfVEVYVFVFUyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cbiAgICB0aGlzLl9zaGFkZXIgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgdGhpcy5NQVhfVEVYVFVFUykvL25ldyBUZXh0dXJlU2hhZGVyKGdsKTtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlcjtcblxuICAgIC8vIGNyZWF0ZSBhIGNvdXBsZSBvZiBidWZmZXJzXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKGdsLCBudWxsLCBnbC5EWU5BTUlDX0RSQVcpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoZ2wsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgLy8gYnVpbGQgdGhlIHZhbyBvYmplY3QgdGhhdCB3aWxsIHJlbmRlci4uXG4gICAgdGhpcy52YW8gPSBuZXcgZ2xDb3JlLlZlcnRleEFycmF5T2JqZWN0KGdsKTtcblxuICAgIHRoaXMudmFvLmFkZEluZGV4KHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCAwKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIGdsLlVOU0lHTkVEX1NIT1JULCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMiAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMyAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVJZCwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgNCAqIDQpO1xuXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdG8gcmVuZGVyIHdoZW4gdXNpbmcgdGhpcyBzcHJpdGViYXRjaFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHNwcml0ZSlcbntcbiAgICAvL1RPRE8gc2V0IGJsZW5kIG1vZGVzLi5cbiAgICAvLyBjaGVjayB0ZXh0dXJlLi5cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPj0gdGhpcy5zaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICBcbiAgICAvLyBnZXQgdGhlIHV2cyBmb3IgdGhlIHRleHR1cmVcbiAgIFxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIGlmICghc3ByaXRlLnRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgLy8gcHVzaCBhIHRleHR1cmUuXG4gICAgLy8gaW5jcmVtZW50IHRoZSBiYXRjaHNpemVcbiAgICB2YXIgbmV4dFRleHR1cmUgPSAgc3ByaXRlLnRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgdmFyIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwO1xuICAgIHZhciBpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50VGV4dHVyZSAhPT0gbmV4dFRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbmV4dFRleHR1cmU7XG4gICAgICAgIFxuICAgICAgICBpZighbmV4dFRleHR1cmUuX2VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9pZCA9IHRoaXMudGV4dHVyZUNvdW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLnRleHR1cmVDb3VudCA9PT0gdGhpcy5NQVhfVEVYVFVFUylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgICAgICAgICAgICAgeyAgICAgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnN0YXJ0ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50KytdID0gbmV4dFRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHR1cmVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdHJpbT8/XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG5cbiAgICAvLyB1cGxvYWQgdGhlIHNwcml0ZSBlbGVtZXRucy4uLlxuICAgIC8vIHRoZXkgaGF2ZSBhbGwgcmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIHdlIGp1c3QgbmVlZCB0byBwdXNoIHRoZW0gaW50byB0aGUgYnVmZmVyLlxuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7XG4gICAgdmFyIHZlcnRleERhdGEgPSBzcHJpdGUudmVydGV4RGF0YVxuICAgIHZhciB0aW50ID0gKHNwcml0ZS50aW50ID4+IDE2KSArIChzcHJpdGUudGludCAmIDB4ZmYwMCkgKyAoKHNwcml0ZS50aW50ICYgMHhmZikgPDwgMTYpICsgKHNwcml0ZS53b3JsZEFscGhhICogMjU1IDw8IDI0KTtcbiAgICB2YXIgdXZzID0gc3ByaXRlLnRleHR1cmUuX3V2cy51dnNfdWludDMyO1xuICAgIC8veHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzBdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMF07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7IFxuICAgIFxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsyXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzNdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzFdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs0XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzVdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzJdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzZdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbN107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbM107XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgYW5kIGVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA9PT0gMClyZXR1cm47XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG5cbiAgICB0aGlzLmN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSB0aGlzLmN1cnJlbnRHcm91cC5zdGFydDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICB7ICAgICBcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgXG4gICAgLy8gZG8gc29tZSBzbWFydCBhcnJheSBzdHVmZi4uXG4gICAgLy8gZG91YmxlIHNpemUgc28gd2UgZG9udCBhbHdheSBzdWJhcnJheSB0aGUgZWxlbWVudHMuLlxuICAgIC8vIHVwbG9hZCB0aGUgdmVydHMgdG8gdGhlIGJ1ZmZlclxuICAgIGlmICh0aGlzLmN1cnJlbnRCYXRjaFNpemUgPiAoIHRoaXMuc2l6ZSAqIDAuNSApIClcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh0aGlzLnZlcnRpY2VzLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbyBrIC4uIHN1YiBhcnJheSBpcyBTTE9XPj9cbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnBvc2l0aW9ucy5zdWJhcnJheSgwLCB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplKTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHZpZXcsIDAsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgc2hhZGVyLi5cbiAgICB0aGlzLnJlbmRlcmVyLmJpbmRTaGFkZXIodGhpcy5fc2hhZGVyKTtcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCAwICk7XG5cbiAgICAvLy8gcmVuZGVyIHRoZSBncm91cHMuLlxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdyb3VwQ291bnQ7IGkrKykge1xuICAgICAgICBcbiAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5ncm91cHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC50ZXh0dXJlQ291bnQ7IGorKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kVGV4dHVyZShncm91cC50ZXh0dXJlc1tqXSwgaik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgZ3JvdXAuc2l6ZSAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCBncm91cC5zdGFydCAqIDYgKiAyKTtcbiAgICB9O1xuXG4gICAgLy8gcmVzZXQgZWxlbWVudHMgZm9yIHRoZSBuZXh0IGZsdXNoXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBzcHJpdGUgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFvLmJpbmQoKTtcbn07XG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgdGhpcy52YW8udW5iaW5kKCk7XG59O1xuLyoqXG4gKiBEZXN0cm95cyB0aGUgU3ByaXRlQmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuY29sb3JzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zcHJpdGVzID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCBtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgdmVydGV4U3JjID0gXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGFUZXh0dXJlSWQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZUZXh0dXJlSWQgPSBhVGV4dHVyZUlkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVwiO1xuICAgIHZhciBmcmFnbWVudFNyYyA9ICdwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG4nICsgZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpICsgXCJcXG5cXG5cIiArIGZyYWdUZW1wbGF0ZVxuXG4gICAgZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYy5yZXBsYWNlKC9cXCVcXCUvZ2ksICcxNicpO1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cbiAgICB2YXIgc2FtcGxlVmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSB7XG4gICAgICAgIHNhbXBsZVZhbHVlc1tpXSA9IGk7XG4gICAgfTtcblxuICAgIHNoYWRlci5iaW5kKCk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnVTYW1wbGVycyA9IHNhbXBsZVZhbHVlcztcblxuICAgIHJldHVybiBzaGFkZXI7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKVxue1xuICAgIHZhciBzcmMgPSAndmVjNCBnZXRTYW1wbGVGcm9tQXJyYXkoc2FtcGxlcjJEIHRleHR1cmVzWyUlXSwgaW50IG5keCwgdmVjMiB1dikge1xcblxcbnZlYzQgY29sb3I7J1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgaWYoaSA+IDApc3JjICs9ICdcXG5lbHNlICc7XG4gICAgICAgIGlmKGkgPCBtYXhUZXh0dXJlcy0xKXNyYyArPSAnaWYobmR4ID09ICcgKyBpICsgJyknO1xuICAgICAgICBzcmMgKz0gJ1xcbnsnO1xuICAgICAgICBzcmMgKz0gJ1xcblxcdGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmVzWycraSsnXSwgdXYpOyc7XG4gICAgICAgIHNyYyArPSAnXFxufSc7XG4gICAgfTtcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdyZXR1cm4gY29sb3I7JztcbiAgICBzcmMgKz0gJ1xcbn0nO1xuXG4gICAgcmV0dXJuIHNyYztcbn1cblxudmFyIGZyYWdUZW1wbGF0ZSA9IFtcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG4gICAgJ3ZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsnLFxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcnNbJSVdOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICdnbF9GcmFnQ29sb3IgPSBnZXRTYW1wbGVGcm9tQXJyYXkodVNhbXBsZXJzLCBpbnQodlRleHR1cmVJZCksIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yOycsXG4gICAgJ30nXG5dLmpvaW4oJ1xcbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyO1xuIiwidmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBUZXh0IE9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nIGluIHlvdXIgdGV4dCBzdHJpbmcsXG4gKiBvciBhZGQgYSB3b3JkV3JhcCBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSBhbmQgYW5kIHdvcmRXcmFwV2lkdGggcHJvcGVydHkgd2l0aCBhIHZhbHVlIGluIHRoZSBzdHlsZSBvYmplY3QuXG4gKlxuICogQSBUZXh0IGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBzdHJpbmcgYW5kIGEgc3R5bGUgb2JqZWN0XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0ID0gbmV3IFBJWEkuVGV4dCgnVGhpcyBpcyBhIHBpeGkgdGV4dCcse2ZvbnQgOiAnMjRweCBBcmlhbCcsIGZpbGwgOiAweGZmMTAxMCwgYWxpZ24gOiAnY2VudGVyJ30pO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbc3R5bGUuZm9udF0ge3N0cmluZ30gZGVmYXVsdCAnYm9sZCAyMHB4IEFyaWFsJyBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlLmcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcCwgaXQgbmVlZHMgd29yZFdyYXAgdG8gYmUgc2V0IHRvIHRydWVcbiAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzRdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gKi9cbmZ1bmN0aW9uIFRleHQodGV4dCwgc3R5bGUsIHJlc29sdXRpb24pXG57XG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgMmQgY29udGV4dCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gd2l0aFxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY2FudmFzLlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyh0aGlzLmNhbnZhcyk7XG4gICAgdGV4dHVyZS50cmltID0gbmV3IG1hdGguUmVjdGFuZ2xlKCk7XG4gICAgU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbn1cblxuLy8gY29uc3RydWN0b3JcblRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTcHJpdGUucHJvdG90eXBlKTtcblRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gVGV4dDtcblxuVGV4dC5mb250UHJvcGVydGllc0NhY2hlID0ge307XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZm9udD0nYm9sZCAyMHB0IEFyaWFsJ10ge3N0cmluZ30gVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gICAgICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZWcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGVnICdibHVlJywgJyNGQ0ZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXBcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd8bnVtYmVyfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNl0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gICAgICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAgICAgKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAgICAgKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHN0eWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdHlsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5maWxsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpbGwgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmZpbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLnN0cm9rZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zdHJva2UgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLnN0cm9rZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZHJvcFNoYWRvd0NvbG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZHJvcFNoYWRvd0NvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGUuZm9udCA9IHN0eWxlLmZvbnQgfHwgJ2JvbGQgMjBwdCBBcmlhbCc7XG4gICAgICAgICAgICBzdHlsZS5maWxsID0gc3R5bGUuZmlsbCB8fCAnYmxhY2snO1xuICAgICAgICAgICAgc3R5bGUuYWxpZ24gPSBzdHlsZS5hbGlnbiB8fCAnbGVmdCc7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2UgPSBzdHlsZS5zdHJva2UgfHwgJ2JsYWNrJzsgLy9wcm92aWRlIGEgZGVmYXVsdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzLzEzNlxuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIHx8IDA7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcCA9IHN0eWxlLndvcmRXcmFwIHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXBXaWR0aCA9IHN0eWxlLndvcmRXcmFwV2lkdGggfHwgMTAwO1xuXG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93ID0gc3R5bGUuZHJvcFNoYWRvdyB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvciB8fCAnIzAwMDAwMCc7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93QW5nbGUgPSBzdHlsZS5kcm9wU2hhZG93QW5nbGUgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA6IE1hdGguUEkgLyA2O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlID0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgOiA1O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0JsdXIgOiAwOyAvL3NoYWRvd0JsdXIgaXMgJzAnIGJ5IGRlZmF1bHQgYWNjb3JkaW5nIHRvIEhUTUxcblxuICAgICAgICAgICAgc3R5bGUucGFkZGluZyA9IHN0eWxlLnBhZGRpbmcgfHwgMDtcblxuICAgICAgICAgICAgc3R5bGUudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lIHx8ICdhbHBoYWJldGljJztcblxuICAgICAgICAgICAgc3R5bGUubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbiB8fCAnbWl0ZXInO1xuICAgICAgICAgICAgc3R5bGUubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQgfHwgMTA7XG5cbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gc3R5bGU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNvcHkgZm9yIHRoZSB0ZXh0IG9iamVjdC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCl7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgc3R5bGUgPSB0aGlzLl9zdHlsZTtcbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG5cbiAgICAvLyB3b3JkIHdyYXBcbiAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbCB0ZXh0XG4gICAgdmFyIG91dHB1dFRleHQgPSBzdHlsZS53b3JkV3JhcCA/IHRoaXMud29yZFdyYXAodGhpcy5fdGV4dCkgOiB0aGlzLl90ZXh0O1xuXG4gICAgLy8gc3BsaXQgdGV4dCBpbnRvIGxpbmVzXG4gICAgdmFyIGxpbmVzID0gb3V0cHV0VGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCB3aWR0aFxuICAgIHZhciBsaW5lV2lkdGhzID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aCk7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGZvbnRQcm9wZXJ0aWVzID0gdGhpcy5kZXRlcm1pbmVGb250UHJvcGVydGllcyhzdHlsZS5mb250KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBsaW5lV2lkdGg7XG4gICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICB2YXIgd2lkdGggPSBtYXhMaW5lV2lkdGggKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICB3aWR0aCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSAoIHdpZHRoICsgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgaGVpZ2h0XG4gICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLnN0eWxlLmxpbmVIZWlnaHQgfHwgZm9udFByb3BlcnRpZXMuZm9udFNpemUgKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG5cbiAgICB2YXIgaGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aDtcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGhlaWdodCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gKCBoZWlnaHQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nICogMiApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5jb250ZXh0LnNjYWxlKCB0aGlzLnJlc29sdXRpb24sIHRoaXMucmVzb2x1dGlvbik7XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgfVxuXG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFN0eWxlPVwiI0ZGMDAwMFwiO1xuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuICAgIHRoaXMuY29udGV4dC5zdHJva2VTdHlsZSA9IHN0eWxlLnN0cm9rZTtcbiAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIHRoaXMuY29udGV4dC50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmU7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVKb2luID0gc3R5bGUubGluZUpvaW47XG4gICAgdGhpcy5jb250ZXh0Lm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0O1xuXG4gICAgdmFyIGxpbmVQb3NpdGlvblg7XG4gICAgdmFyIGxpbmVQb3NpdGlvblk7XG5cbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGlmIChzdHlsZS5kcm9wU2hhZG93Qmx1ciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhTaGFkb3dPZmZzZXQgPSBNYXRoLmNvcyhzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgICAgICB2YXIgeVNoYWRvd09mZnNldCA9IE1hdGguc2luKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCArIHhTaGFkb3dPZmZzZXQsIGxpbmVQb3NpdGlvblkgKyB5U2hhZG93T2Zmc2V0ICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL3NldCBjYW52YXMgdGV4dCBzdHlsZXNcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZmlsbDtcblxuICAgIC8vZHJhdyBsaW5lcyBsaW5lIGJ5IGxpbmVcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0cm9rZSAmJiBzdHlsZS5zdHJva2VUaGlja25lc3MpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJva2VUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUudHJpbS54ID0gMDtcbiAgICB0ZXh0dXJlLnRyaW0ueSA9IC10aGlzLl9zdHlsZS5wYWRkaW5nO1xuXG4gICAgdGV4dHVyZS50cmltLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGV4dHVyZS50cmltLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAtIHRoaXMuX3N0eWxlLnBhZGRpbmcqMjtcblxuICAgIHRoaXMuX3dpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5lbWl0KCd1cGRhdGUnLCAgdGV4dHVyZS5iYXNlVGV4dHVyZSk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqL1xuVGV4dC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICAvL3RoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5yZW5kZXJXZWJHTC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgLy8gICB0aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYXNjZW50LCBkZXNjZW50IGFuZCBmb250U2l6ZSBvZiBhIGdpdmVuIGZvbnRTdHlsZVxuICpcbiAqIEBwYXJhbSBmb250U3R5bGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGZvbnRTdHlsZSlcbntcbiAgICB2YXIgcHJvcGVydGllcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdO1xuXG4gICAgaWYgKCFwcm9wZXJ0aWVzKVxuICAgIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzO1xuICAgICAgICB2YXIgY29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnfE3DiXEnKS53aWR0aCk7XG4gICAgICAgIHZhciBiYXNlbGluZSA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCdNJykud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xuXG4gICAgICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiAxLjQgfCAwO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNmMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQoJ3xNw4lxJywgMCwgYmFzZWxpbmUpO1xuXG4gICAgICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgICB2YXIgcGl4ZWxzID0gaW1hZ2VkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmUgPSB3aWR0aCAqIDQ7XG5cbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgIHZhciBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZWxpbmU7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCArPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnQgPSBiYXNlbGluZSAtIGk7XG5cbiAgICAgICAgaWR4ID0gcGl4ZWxzIC0gbGluZTtcbiAgICAgICAgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGRlc2NlbnQuIHNjYW4gZnJvbSBib3R0b20gdG8gdG9wIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggLT0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IGkgLSBiYXNlbGluZTtcbiAgICAgICAgcHJvcGVydGllcy5mb250U2l6ZSA9IHByb3BlcnRpZXMuYXNjZW50ICsgcHJvcGVydGllcy5kZXNjZW50O1xuXG4gICAgICAgIFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBuZXdsaW5lcyB0byBhIHN0cmluZyB0byBoYXZlIGl0IG9wdGltYWxseSBmaXQgaW50byB0aGUgaG9yaXpvbnRhbFxuICogYm91bmRzIHNldCBieSB0aGUgVGV4dCBvYmplY3QncyB3b3JkV3JhcFdpZHRoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS53b3JkV3JhcCA9IGZ1bmN0aW9uICh0ZXh0KVxue1xuICAgIC8vIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyXG4gICAgLy8gdGhhbiBpdHMgaG9yaXpvbnRhbCBib3VuZHMuXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICAgIHZhciB3b3JkV3JhcFdpZHRoID0gdGhpcy5fc3R5bGUud29yZFdyYXBXaWR0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XG4gICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQod29yZHNbal0pLndpZHRoO1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aFdpdGhTcGFjZSA9IHdvcmRXaWR0aCArIHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xuICAgICAgICAgICAgaWYgKGogPT09IDAgfHwgd29yZFdpZHRoV2l0aFNwYWNlID4gc3BhY2VMZWZ0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcHJpbnRpbmcgdGhlIG5ld2xpbmUgaWYgaXQncyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZSB0aGF0IGlzXG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSB3b3JkIHdyYXAgd2lkdGguXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal07XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB3b3Jkc1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgbGluZXMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFRleHQgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgVGV4dFxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UZXh0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzLmNhbGwodGhpcywgbWF0cml4KTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT10cnVlXSB7Ym9vbGVhbn0gd2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICAvLyBtYWtlIHN1cmUgdG8gcmVzZXQgdGhlIHRoZSBjb250ZXh0IGFuZCBjYW52YXMuLiBkb250IHdhbnQgdGhpcyBoYW5naW5nIGFyb3VuZCBpbiBtZW1vcnkhXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG5cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGVzdHJveUJhc2VUZXh0dXJlKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIFJlbmRlclRhcmdldCA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBGaWx0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKSxcbiAgICB0ZW1wUmVjdCA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuXG4vKipcbiAqIEEgQmFzZVJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIEJhc2VSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIHRha2VzIGEgc25hcHNob3Qgb2YgYW55IERpc3BsYXkgT2JqZWN0IGdpdmVuIHRvIGl0cyByZW5kZXIgbWV0aG9kLiBUaGUgcG9zaXRpb25cbiAqIGFuZCByb3RhdGlvbiBvZiB0aGUgZ2l2ZW4gRGlzcGxheSBPYmplY3RzIGlzIGlnbm9yZWQuIEZvciBleGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcigxMDI0LCAxMDI0LCB7IHZpZXc6IGNhbnZhcywgcmF0aW86IDEgfSk7XG4gKiB2YXIgQmFzZXJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5CYXNlUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihzcHJpdGUpO1xuICogYGBgXG4gKlxuICogVGhlIFNwcml0ZSBpbiB0aGlzIGNhc2Ugd2lsbCBiZSByZW5kZXJlZCB0byBhIHBvc2l0aW9uIG9mIDAsMC4gVG8gcmVuZGVyIHRoaXMgc3ByaXRlIGF0IGl0cyBhY3R1YWxcbiAqIHBvc2l0aW9uIGEgQ29udGFpbmVyIHNob3VsZCBiZSB1c2VkOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZG9jID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKlxuICogZG9jLmFkZENoaWxkKHNwcml0ZSk7XG4gKlxuICogQmFzZXJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiBCYXNlcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZVxuICogQHBhcmFtIFt3aWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbaGVpZ2h0PTEwMF0ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIEJhc2VSZW5kZXJUZXh0dXJlLCB5b3UgbXVzdCBwYXNzIGEgcmVuZGVyZXIgaW50byB0aGUgY29uc3RydWN0b3IuJyk7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUuY2FsbCh0aGlzLCBudWxsLCBzY2FsZU1vZGUpO1xuICAgXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047O1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRHJhdy9yZW5kZXIgdGhlIGdpdmVuIERpc3BsYXlPYmplY3Qgb250byB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBkZXNjZW5kZW50cyBhcmUgdHJhbnNmb3JtZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIElmIGB1cGRhdGVUcmFuc2Zvcm1gIGlzIHRydWUgdGhlbiB0aGUgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQgYmVmb3JlIHRoZVxuICAgICAqIG1ldGhvZCByZXR1cm5zLiBPdGhlcndpc2UgaXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcgY29kZSB0byBjb3JyZWN0bHkgdXNlIG9yIHJlc2V0XG4gICAgICogdGhlIHRyYW5zZm9ybWVkIGRpc3BsYXkgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5IG9iamVjdCBpcyBhbHdheXMgcmVuZGVyZWQgd2l0aCBhIHdvcmxkQWxwaGEgdmFsdWUgb2YgMS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICAgICAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gICAgICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAgICAgKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB1c2VzLiBBIEJhc2VSZW5kZXJUZXh0dXJlIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgcmVuZGVyZXIgYXQgdGhlIG1vbWVudCBpZiBpdHMgd2ViR0wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnNjYWxlTW9kZSwgdGhpcy5yZXNvbHV0aW9uKTsvLywgdGhpcy50aGlzLnNjYWxlTW9kZSk7XG4gICAgICAgIHRoaXMuX2dsVGV4dHVyZXNbZ2wuaWRdID0gIHRoaXMudGV4dHVyZUJ1ZmZlci50ZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgLy9UT0RPIHJlZmFjdG9yIGZpbHRlciBtYW5hZ2VyLi4gYXMgcmVhbGx5IGl0cyBubyBsb25nZXIgYSBtYW5hZ2VyIGlmIHdlIHVzZSBpdCBoZXJlLi5cbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbmV3IEZpbHRlck1hbmFnZXIodGhpcy5yZW5kZXJlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlcldlYkdMO1xuXG4gICAgICAgIC8vIHRoZSBjcmVhdGlvbiBvZiBhIGZpbHRlciBtYW5hZ2VyIHVuYmluZHMgdGhlIGJ1ZmZlcnMuLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgICAgICBpZih0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQpdGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlckNhbnZhcztcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcih0aGlzLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuaGVpZ2h0KiB0aGlzLnJlc29sdXRpb24pO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcblxufVxuXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIHVwZGF0ZUJhc2Uge2Jvb2xlYW59IFNob3VsZCB0aGUgYmFzZVRleHR1cmUud2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYmUgcmVzaXplZCBhcyB3ZWxsP1xuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgaWYgKHdpZHRoID09PSB0aGlzLndpZHRoICYmIGhlaWdodCA9PT0gdGhpcy5oZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZCA9ICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7XG5cbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoZGVzdGluYXRpb25GcmFtZSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuYmluZEZyYW1lYnVmZmVyKHRoaXMucmVuZGVyZXIuZ2wuRlJBTUVCVUZGRVIsIHRoaXMudGV4dHVyZUJ1ZmZlci5mcmFtZUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKGZhbHNlLCBkZXN0aW5hdGlvbkZyYW1lKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAoZnJhbWUsIGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAodXBkYXRlVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpID8gdXBkYXRlVHJhbnNmb3JtIDogdHJ1ZTsvLyF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIudHJhbnNmb3JtID0gbWF0cml4O1xuXG4gICAgLy9UT0RPIG5vdCBhIGZhbiB0aGF0IHRoaXMgaXMgaGVyZS4uLiBpdCB3aWxsIG1vdmUhXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKCk7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICBpZiAodXBkYXRlVHJhbnNmb3JtKVxuICAgIHtcblxuICAgICAgICAvLyByZXNldCB0aGUgbWF0cml4IG9mIHRoZSBkaXNwbGF0eU9iamVjdC4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uaWRlbnRpdHkoKTtcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmN1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGVtcFJlY3Qud2lkdGggPSBmcmFtZS5oZWlnaHQ7XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gZnJhbWUud2lkdGg7XG4gICBcbiAgICAvL1RPRE8gcmVuYW1lIHRleHR1cmVCdWZmZXIgdG8gcmVuZGVyVGFyZ2V0Li5cbiAgICB2YXIgdGVtcCA9ICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0aGlzLmZpbHRlck1hbmFnZXI7XG4gICAgXG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIuYWN0aXZhdGUoZnJhbWUsIHRlbXBSZWN0KTtcbiAgICBjb25zb2xlLmxvZyhkaXNwbGF5T2JqZWN0KVxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnRleHR1cmVCdWZmZXIsIGNsZWFyKTtcblxuICAgLy8gY29uc29sZS5sb2coXCJSRU5ERVJJTkcgXCIpO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRlbXA7XG59O1xuXG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcl0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVwZGF0ZVRyYW5zZm9ybSA9ICEhdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdmFyIHd0ID0gdGVtcE1hdHJpeDtcblxuICAgIHd0LmlkZW50aXR5KCk7XG5cbiAgICBpZiAobWF0cml4KVxuICAgIHtcbiAgICAgICAgd3QuYXBwZW5kKG1hdHJpeCk7XG4gICAgfVxuXG5cbiAgICB3dC50eCArPSBmcmFtZS54O1xuICAgIHd0LnR5ICs9IGZyYW1lLnk7XG5cbiAgICB2YXIgY2FjaGVkV3QgPSBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtO1xuICAgIFxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSB3dDtcblxuICAgIC8vIHNldFdvcmxkIEFscGhhIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgcmVuZGVyZXIgYXQgZnVsbCBvcGFjaXR5XG4gICAgZGlzcGxheU9iamVjdC53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICB2YXIgaSwgajtcblxuICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBcbi8vICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5cbiAgICB2YXIgY29udGV4dCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlYWxSZXNvbHV0aW9uID0gdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIGNvbnRleHQpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gcmVhbFJlc29sdXRpb247XG5cbiAgICBpZihkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID09PSB3dClcbiAgICB7XG4gICAgICAgIC8vIGZpeGVzIGNhY2hlQXNCaXRtYXAgSGFwcGVuaW5nIGR1cmluZyB0aGUgYWJvdmUuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gY2FjaGVkV3Q7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBkZXN0cm95QmFzZSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIGZpbHRlcm1hbmFnZXIuLlxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoZnJhbWUpXG57XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uuc3JjID0gdGhpcy5nZXRCYXNlNjQoZnJhbWUpO1xuICAgIHJldHVybiBpbWFnZTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGlzIHRleHR1cmUuIEl0IHdvcmtzIGJ5IGNhbGxpbmcgQmFzZVJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgIHJldHVybiB0aGlzLmdldENhbnZhcyhmcmFtZSkudG9EYXRhVVJMKCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIEJhc2VSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldENhbnZhcyA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2lkdGggPSBmcmFtZS53aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBjYW52YXNEYXRhID0gdGVtcENhbnZhcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2FudmFzRGF0YS5kYXRhLnNldCh3ZWJHTFBpeGVscyk7XG5cbiAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICByZXR1cm4gdGVtcENhbnZhcy5jYW52YXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy53aWR0aDtcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoZnJhbWUud2lkdGggPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGggJiYgXG4gICAgICAgICAgIGZyYW1lLmhlaWdodCA9PT0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5oZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IENhbnZhc0J1ZmZlcihmcmFtZS53aWR0aCAqIHJlc29sdXRpb24sIGZyYW1lLmhlaWdodCAqIHJlc29sdXRpb24pO1xuICAgICAgICAgICAgdmFyIGNhbnZhc0RhdGEgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dC5nZXRJbWFnZURhdGEoZnJhbWUueCAgKiByZXNvbHV0aW9uLCBmcmFtZS55ICogcmVzb2x1dGlvbiwgZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIHRoZSBlbnRpcmUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICBpZighZnJhbWUpXG4gICAge1xuICAgICAgICBmcmFtZSA9IHRlbXBSZWN0O1xuICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICByZXR1cm4gd2ViR0xQaXhlbHM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIGEgcGl4ZWwgd2l0aGluIHRoZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uIChmcmFtZSwgeCwgeSlcbntcbiAgICB0ZW1wUmVjdC54ID0geDtcbiAgICB0ZW1wUmVjdC55ID0geTtcbiAgICB0ZW1wUmVjdC53aWR0aCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gMSAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmKGZyYW1lKVxuICAgIHtcbiAgICAgICAgdGVtcFJlY3QueCArPSBmcmFtZS54O1xuICAgICAgICB0ZW1wUmVjdC55ICs9IGZyYW1lLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UGl4ZWxzKHRlbXBSZWN0KTtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlLiBBbGwgdGV4dHVyZXMgaGF2ZSBhIGJhc2UgdGV4dHVyZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50IHBpeGVsIHJhdGlvc1xuICovXG5mdW5jdGlvbiBCYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDEwMDtcblxuICAgIC8vIFRPRE8gZG9jc1xuICAgIC8vIHVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2VcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxXaWR0aCA9IDEwMDtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgaGVpZ2h0IG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUgdG8gYXBwbHkgd2hlbiBzY2FsaW5nIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuTElORUFSXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIG9uY2UgdGhlIGJhc2UgdGV4dHVyZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbmV2ZXIgdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmFpbHMgdG8gbG9hZCBvciBoYXMgbm8gdGV4dHVyZSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgaWYgdGhlIHNvdXJjZSBpcyBjdXJyZW50bHkgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIElmIGFuIEltYWdlIHNvdXJjZSBpcyBsb2FkaW5nIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmVcbiAgICAgKiBkaXNwYXRjaGVkIHdoZW4gdGhlIG9wZXJhdGlvbiBlbmRzLiBBbiB1bmRlcnlsaW5nIHNvdXJjZSB0aGF0IGlzXG4gICAgICogaW1tZWRpYXRlbHktYXZhaWxhYmxlIGJ5cGFzc2VzIGxvYWRpbmcgZW50aXJlbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW1hZ2Ugc291cmNlIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUT0RPOiBNYWtlIHRoaXMgYSBzZXR0ZXIgdGhhdCBjYWxscyBsb2FkU291cmNlKCk7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtJbWFnZXxDYW52YXN9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsOyAvLyBzZXQgaW4gbG9hZFNvdXJjZSwgaWYgYXQgYWxsXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiBSR0IgY2hhbm5lbHMgc2hvdWxkIGJlIHByZS1tdWx0aXBsaWVkIGJ5IEFscGhhICAoV2ViR0wgb25seSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBvciBub3QgdGhlIHRleHR1cmUgaXMgYSBwb3dlciBvZiB0d28sIHRyeSB0byB1c2UgcG93ZXIgb2YgdHdvIHRleHR1cmVzIGFzIG11Y2ggYXMgeW91IGNhblxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IGZhbHNlO1xuXG4gICAgLy8gdXNlZCBmb3Igd2ViR0xcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiBhIG1pcG1hcCBvZiB0aGlzIHRleHR1cmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLiBUaGlzIHZhbHVlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIHRleHR1cmUgaXMgdXNlZFxuICAgICAqIEFsc28gdGhlIHRleHR1cmUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBzaXplIHRvIHdvcmtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5taXBtYXAgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHJlbmRlcmVyIElEcyB0byB3ZWJnbCB0ZXh0dXJlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgV2ViR0xUZXh0dXJlPn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9pZCA9IDA7XG4gICAgXG4gICAgLy8gaWYgbm8gc291cmNlIHBhc3NlZCBkb24ndCB0cnkgdG8gbG9hZFxuICAgIGlmIChzb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmluaXNoZXMgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkZWRcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmFpbHMgdG8gbG9hZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBCYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0ZXh0dXJlIG9uIGFsbCB0aGUgd2ViZ2wgcmVuZGVyZXJzLCB0aGlzIGFsc28gYXNzdW1lcyB0aGUgc3JjIGhhcyBjaGFuZ2VkLlxuICpcbiAqIEBmaXJlcyB1cGRhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5yZWFsV2lkdGggPSB0aGlzLnNvdXJjZS5uYXR1cmFsV2lkdGggfHwgdGhpcy5zb3VyY2Uud2lkdGg7XG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gdGhpcy5zb3VyY2UubmF0dXJhbEhlaWdodCB8fCB0aGlzLnNvdXJjZS5oZWlnaHQ7XG5cbiAgICB0aGlzLndpZHRoID0gdGhpcy5yZWFsV2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlYWxIZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IHV0aWxzLmlzUG93ZXJPZlR3byh0aGlzLnJlYWxXaWR0aCwgdGhpcy5yZWFsSGVpZ2h0KTtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIExvYWQgYSBzb3VyY2UuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBpcyBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlLCBzdWNoIGFzIGFuIGltYWdlIHRoYXQgbmVlZHMgdG8gYmVcbiAqIGRvd25sb2FkZWQsIHRoZW4gdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIGluIHRoZSBmdXR1cmVcbiAqIGFuZCBgaGFzTG9hZGVkYCB3aWxsIHJlbWFpbiBmYWxzZSBhZnRlciB0aGlzIGNhbGwuXG4gKlxuICogVGhlIGxvZ2ljIHN0YXRlIGFmdGVyIGNhbGxpbmcgYGxvYWRTb3VyY2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGVnLiBgZnJvbUltYWdlYCwgYG5ldyBCYXNlVGV4dHVyZWApIGlzOlxuICpcbiAqICAgICBpZiAodGV4dHVyZS5oYXNMb2FkZWQpXG4ge1xuICogICAgICAgIC8vIHRleHR1cmUgcmVhZHkgZm9yIHVzZVxuICogICAgIH0gZWxzZSBpZiAodGV4dHVyZS5pc0xvYWRpbmcpXG4ge1xuICogICAgICAgIC8vIGxpc3RlbiB0byAnbG9hZGVkJyBhbmQvb3IgJ2Vycm9yJyBldmVudHMgb24gdGV4dHVyZVxuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAgLy8gbm90IGxvYWRpbmcsIG5vdCBnb2luZyB0byBsb2FkIFVOTEVTUyB0aGUgc291cmNlIGlzIHJlbG9hZGVkXG4gKiAgICAgICAgLy8gKGl0IG1heSBzdGlsbCBtYWtlIHNlbnNlIHRvIGxpc3RlbiB0byB0aGUgZXZlbnRzKVxuICogICAgIH1cbiAqXG4gKiBAcHJvdGVjdGVkXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUubG9hZFNvdXJjZSA9IGZ1bmN0aW9uIChzb3VyY2UpXG57XG4gICAgdmFyIHdhc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZztcbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAod2FzTG9hZGluZyAmJiB0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc291cmNlLm9uZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgLy8gQXBwbHkgc291cmNlIGlmIGxvYWRlZC4gT3RoZXJ3aXNlIHNldHVwIGFwcHJvcHJpYXRlIGxvYWRpbmcgbW9uaXRvcnMuXG4gICAgaWYgKCh0aGlzLnNvdXJjZS5jb21wbGV0ZSB8fCB0aGlzLnNvdXJjZS5nZXRDb250ZXh0KSAmJiB0aGlzLnNvdXJjZS53aWR0aCAmJiB0aGlzLnNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNvdXJjZS5nZXRDb250ZXh0KVxuICAgIHtcblxuICAgICAgICAvLyBJbWFnZSBmYWlsIC8gbm90IHJlYWR5XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuXG4gICAgICAgIHNvdXJjZS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgc2NvcGUuZW1pdCgnbG9hZGVkJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvdXJjZS5vbmVycm9yID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5lbWl0KCdlcnJvcicsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQZXIgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjdGhlLWltZy1lbGVtZW50XG4gICAgICAgIC8vICAgXCJUaGUgdmFsdWUgb2YgYGNvbXBsZXRlYCBjYW4gdGh1cyBjaGFuZ2Ugd2hpbGUgYSBzY3JpcHQgaXMgZXhlY3V0aW5nLlwiXG4gICAgICAgIC8vIFNvIGNvbXBsZXRlIG5lZWRzIHRvIGJlIHJlLWNoZWNrZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gYWRkZWQuLlxuICAgICAgICAvLyBOT1RFOiBjb21wbGV0ZSB3aWxsIGJlIHRydWUgaWYgdGhlIGltYWdlIGhhcyBubyBzcmMgc28gYmVzdCB0byBjaGVjayBpZiB0aGUgc3JjIGlzIHNldC5cbiAgICAgICAgaWYgKHNvdXJjZS5jb21wbGV0ZSAmJiBzb3VyY2Uuc3JjKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyAuLmFuZCBpZiB3ZSdyZSBjb21wbGV0ZSBub3csIG5vIG5lZWQgZm9yIGNhbGxiYWNrc1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgc29tZSBvdGhlciB0cmFja2luZyB2YXJzIG9uY2VcbiAqIGEgc291cmNlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5fc291cmNlTG9hZGVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBiYXNlIHRleHR1cmVcbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5pbWFnZVVybClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuICAgICAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlLnNyYyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLnNvdXJjZS5fcGl4aUlkXTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG5cbiAgICB0aGlzLmRpc3Bvc2UoKTtcbn07XG5cbi8qKlxuICogRnJlZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTCBtZW1vcnkgd2l0aG91dCBkZXN0cm95aW5nIHRoaXMgdGV4dHVyZSBvYmplY3QuXG4gKiBUaGlzIG1lYW5zIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSB0ZXh0dXJlIGxhdGVyIHdoaWNoIHdpbGwgdXBsb2FkIGl0IHRvIEdQVVxuICogbWVtb3J5IGFnYWluLlxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIHRoaXMpO1xuXG4gICAgLy8gdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lZWRlZCwgdGhlIHJlbmRlcmVycyBzaG91bGQgY2xlYW51cCBhbGwgdGhlIGdsIHRleHR1cmVzLlxuICAgIC8vIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgc291cmNlIGltYWdlIG9mIHRoZSB0ZXh0dXJlLlxuICogVGhlIG9yaWdpbmFsIHNvdXJjZSBtdXN0IGJlIGFuIEltYWdlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5ld1NyYyB7c3RyaW5nfSB0aGUgcGF0aCBvZiB0aGUgaW1hZ2VcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNvdXJjZUltYWdlID0gZnVuY3Rpb24gKG5ld1NyYylcbntcbiAgICB0aGlzLnNvdXJjZS5zcmMgPSBuZXdTcmM7XG5cbiAgICB0aGlzLmxvYWRTb3VyY2UodGhpcy5zb3VyY2UpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIGJhc2UgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBTaG91bGQgdXNlIGFub255bW91cyBDT1JTPyBEZWZhdWx0cyB0byB0cnVlIGlmIHRoZSBVUkwgaXMgbm90IGEgZGF0YS1VUkkuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmIChjcm9zc29yaWdpbiA9PT0gdW5kZWZpbmVkICYmIGltYWdlVXJsLmluZGV4T2YoJ2RhdGE6JykgIT09IDApXG4gICAge1xuICAgICAgICBjcm9zc29yaWdpbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIC8vIG5ldyBJbWFnZSgpIGJyZWFrcyB0ZXggbG9hZGluZyBpbiBzb21lIHZlcnNpb25zIG9mIENocm9tZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMzgwNzFcbiAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgaWYgKGNyb3Nzb3JpZ2luKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoaW1hZ2UsIHNjYWxlTW9kZSk7XG4gICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgaW1hZ2Uuc3JjID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSBiYXNlVGV4dHVyZTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBAMnggYXQgdGhlIGVuZCBvZiB0aGUgdXJsIHdlIGFyZSBnb2luZyB0byBhc3N1bWUgaXRzIGEgaGlnaHJlcyBpbWFnZVxuICAgICAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKGltYWdlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFjYW52YXMuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGNhbnZhcy5fcGl4aUlkID0gJ2NhbnZhc18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG4iLCJ2YXIgQmFzZVJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VSZW5kZXJUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIFJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIFJlbmRlclRleHR1cmUgc2hvdWxkIGJlIHByZWxvYWRlZFxuICogb3RoZXJ3aXNlIGJsYWNrIHJlY3RhbmdsZXMgd2lsbCBiZSBkcmF3biBpbnN0ZWFkLlxuICpcbiAqIEEgUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCA4MDAsIDYwMCk7XG4gKiB2YXIgc3ByaXRlID0gUElYSS5TcHJpdGUuZnJvbUltYWdlKFwic3Bpbk9ial8wMS5wbmdcIik7XG4gKlxuICogc3ByaXRlLnBvc2l0aW9uLnggPSA4MDAvMjtcbiAqIHNwcml0ZS5wb3NpdGlvbi55ID0gNjAwLzI7XG4gKiBzcHJpdGUuYW5jaG9yLnggPSAwLjU7XG4gKiBzcHJpdGUuYW5jaG9yLnkgPSAwLjU7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiByZW5kZXJUZXh0dXJlXG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIGZvciB0aGlzIFJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIFJlbmRlclRleHR1cmUoYmFzZVJlbmRlclRleHR1cmUsIGZyYW1lKVxue1xuICAgIGlmICghcmVuZGVyZXIpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgb2JqZWN0IHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Jhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIFRleHR1cmUuY2FsbCh0aGlzLFxuICAgICAgICBiYXNlUmVuZGVyVGV4dHVyZSxcbiAgICAgICAgZnJhbWUgXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn1cblxuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmUucHJvdG90eXBlKTtcblJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGV4dHVyZTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIHVwZGF0ZUJhc2UpXG57XG4gICBcbiAgICAvL1RPRE8gLSBjb3VsZCBiZSBub3QgcmVxdWlyZWQuLlxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSB0aGlzLmNyb3Aud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNyb3AuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKHVwZGF0ZUJhc2UpXG4gICAge1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYmFzZVRleHR1cmUuY2xlYXIodGhpcy5mcmFtZSlcbiAgICBcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLnJlbmRlcih0aGlzLmZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRJbWFnZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuYmFzZVRleHR1cmUuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIFJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0QmFzZTY0ID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNlNjQuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIFJlbmRlclRleHR1cmUgdG8gaXQgYW5kIHRoZW4gcmV0dXJucyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gQSBDYW52YXMgZWxlbWVudCB3aXRoIHRoZSB0ZXh0dXJlIHJlbmRlcmVkIG9uLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldENhbnZhcyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVscyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVsKHRoaXMuZnJhbWUsIHgsIHkpO1xufTtcblxuUmVuZGVyVGV4dHVyZS5jcmVhdGUgPSBmdW5jdGlvbihyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHJldHVybiBuZXcgUmVuZGVyVGV4dHVyZShuZXcgQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbikpO1xufVxuXG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnMgPSByZXF1aXJlKCcuL1RleHR1cmVVdnMnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlIG9yIHBhcnQgb2YgYW4gaW1hZ2UuIEl0IGNhbm5vdCBiZSBhZGRlZFxuICogdG8gdGhlIGRpc3BsYXkgbGlzdCBkaXJlY3RseS4gSW5zdGVhZCB1c2UgaXQgYXMgdGhlIHRleHR1cmUgZm9yIGEgU3ByaXRlLiBJZiBubyBmcmFtZSBpcyBwcm92aWRlZCB0aGVuIHRoZSB3aG9sZSBpbWFnZSBpcyB1c2VkLlxuICpcbiAqIFlvdSBjYW4gZGlyZWN0bHkgY3JlYXRlIGEgdGV4dHVyZSBmcm9tIGFuIGltYWdlIGFuZCB0aGVuIHJldXNlIGl0IG11bHRpcGxlIHRpbWVzIGxpa2UgdGhpcyA6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZSgnYXNzZXRzL2ltYWdlLnBuZycpO1xuICogdmFyIHNwcml0ZTEgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiB2YXIgc3ByaXRlMiA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBiYXNlVGV4dHVyZSB7UElYSS5CYXNlVGV4dHVyZX0gVGhlIGJhc2UgdGV4dHVyZSBzb3VyY2UgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlIGZyb21cbiAqIEBwYXJhbSBbZnJhbWVdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3RhbmdsZSBmcmFtZSBvZiB0aGUgdGV4dHVyZSB0byBzaG93XG4gKiBAcGFyYW0gW2Nyb3BdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIGFyZWEgb2Ygb3JpZ2luYWwgdGV4dHVyZVxuICogQHBhcmFtIFt0cmltXSB7UElYSS5SZWN0YW5nbGV9IFRyaW1tZWQgdGV4dHVyZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBbcm90YXRlXSB7Ym9vbGVhbn0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlcyAoIHVzZWQgYnkgdGV4dHVyZSBwYWNrZXIgKVxuICovXG5mdW5jdGlvbiBUZXh0dXJlKGJhc2VUZXh0dXJlLCBmcmFtZSwgY3JvcCwgdHJpbSwgcm90YXRlKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogRG9lcyB0aGlzIFRleHR1cmUgaGF2ZSBhbnkgZnJhbWUgZGF0YSBhc3NpZ25lZCB0byBpdD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5ub0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VUZXh0dXJlIGluc3RhbmNlb2YgVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0cmltIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLnRyaW0gPSB0cmltO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCB0aGUgcmVuZGVyZXIga25vdyBpZiB0aGUgdGV4dHVyZSBpcyB2YWxpZC4gSWYgaXQncyBub3QgdGhlbiBpdCBjYW5ub3QgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgYSByZW5kZXJlciBrbm93IHRoYXQgYSB0ZXh0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgKHVzZWQgbWFpbmx5IGZvciB3ZWJHTCB1diB1cGRhdGVzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVpcmVzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgVVYgZGF0YSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgYXJlYSBvZiB0aGUgQmFzZVRleHR1cmUgaW1hZ2UgdG8gYWN0dWFsbHkgY29weSB0byB0aGUgQ2FudmFzIC8gV2ViR0wgd2hlbiByZW5kZXJpbmcsXG4gICAgICogaXJyZXNwZWN0aXZlIG9mIHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBvciBwbGFjZW1lbnQgKHdoaWNoIGNhbiBiZSBpbmZsdWVuY2VkIGJ5IHRyaW1tZWQgdGV4dHVyZSBhdGxhc2VzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jcm9wID0gY3JvcCB8fCBmcmFtZTsvL25ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdGF0ZSA9ICEhcm90YXRlO1xuXG4gICAgaWYgKGJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBmcmFtZSB3ZSBzaG91bGQgbW9uaXRvciBmb3IgYW55IGJhc2UgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlLm9uY2UoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZyYW1lIG9yIHRoZSBiYXNlVGV4dHVyZSBpcyB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICovXG4gICAgZnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgICAgICAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50cmltICYmICF0aGlzLnJvdGF0ZSAmJiAoZnJhbWUueCArIGZyYW1lLndpZHRoID4gdGhpcy5iYXNlVGV4dHVyZS53aWR0aCB8fCBmcmFtZS55ICsgZnJhbWUuaGVpZ2h0ID4gdGhpcy5iYXNlVGV4dHVyZS5oZWlnaHQpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dHVyZSBFcnJvcjogZnJhbWUgZG9lcyBub3QgZml0IGluc2lkZSB0aGUgYmFzZSBUZXh0dXJlIGRpbWVuc2lvbnMgJyArIHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5zb3VyY2UgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50cmltKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wID0gZnJhbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlcyB0aGlzIHRleHR1cmUgb24gdGhlIGdwdS5cbiAqXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5iYXNlVGV4dHVyZS51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyBsb2FkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlTG9hZGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIC8vIFRPRE8gdGhpcyBjb2RlIGxvb2tzIGNvbmZ1c2luZy4uIGJvbyB0byBhYnVzaW5nIGdldHRlcnMgYW5kIHNldHRlcnNzIVxuICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy5fZnJhbWU7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyB1cGRhdGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZVVwZGF0ZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSBiYXNlVGV4dHVyZS53aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSBiYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlPWZhbHNlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlKVxue1xuICAgIGlmICh0aGlzLmJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGRlc3Ryb3lCYXNlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG4gICAgdGhpcy50cmltID0gbnVsbDtcbiAgICB0aGlzLmNyb3AgPSBudWxsO1xuXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UsIHRoaXMpO1xuICAgIHRoaXMub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGV4dHVyZSBvYmplY3QgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLmZyYW1lLCB0aGlzLmNyb3AsIHRoaXMudHJpbSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5fdXBkYXRlVXZzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuX3V2cylcbiAgICB7XG4gICAgICAgIHRoaXMuX3V2cyA9IG5ldyBUZXh0dXJlVXZzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXZzLnNldCh0aGlzLmNyb3AsIHRoaXMuYmFzZVRleHR1cmUsIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFRleHR1cmUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSAgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gY3Jvc3NvcmlnaW4ge2Jvb2xlYW59IFdoZXRoZXIgcmVxdWVzdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY3Jvc3NvcmlnaW5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21JbWFnZShpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xuICAgICAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gdGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICh0eXBlb2YgdmlkZW8gPT09ICdzdHJpbmcnKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFRleHR1cmUuZnJvbVZpZGVvVXJsKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSB2aWRlbyB1cmwuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvVXJsIHtzdHJpbmd9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW9VcmwgPSBmdW5jdGlvbiAodmlkZW9VcmwsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHZpZGVvVXJsLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIHRleHR1cmUgdG8gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuIFRoaXMgY2FjaGUgaXMgc2hhcmVkIGFjcm9zcyB0aGUgd2hvbGUgUElYSSBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIFRleHR1cmUgdG8gYWRkIHRvIHRoZSBjYWNoZS5cbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIGJlIHN0b3JlZCBhZ2FpbnN0LlxuICovXG5UZXh0dXJlLmFkZFRleHR1cmVUb0NhY2hlID0gZnVuY3Rpb24gKHRleHR1cmUsIGlkKVxue1xuICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpZF0gPSB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB0ZXh0dXJlIGZyb20gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCBvZiB0aGUgdGV4dHVyZSB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRoYXQgd2FzIHJlbW92ZWRcbiAqL1xuVGV4dHVyZS5yZW1vdmVUZXh0dXJlRnJvbUNhY2hlID0gZnVuY3Rpb24gKGlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBBbiBlbXB0eSB0ZXh0dXJlLCB1c2VkIG9mdGVuIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBtdWx0aXBsZSBlbXB0eSB0ZXh0dXJlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZS5FTVBUWSA9IG5ldyBUZXh0dXJlKG5ldyBCYXNlVGV4dHVyZSgpKTtcbiIsIlxuLyoqXG4gKiBBIHN0YW5kYXJkIG9iamVjdCB0byBzdG9yZSB0aGUgVXZzIG9mIGEgdGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmVVdnMoKVxue1xuICAgIHRoaXMueDAgPSAwO1xuICAgIHRoaXMueTAgPSAwO1xuXG4gICAgdGhpcy54MSA9IDE7XG4gICAgdGhpcy55MSA9IDA7XG5cbiAgICB0aGlzLngyID0gMTtcbiAgICB0aGlzLnkyID0gMTtcblxuICAgIHRoaXMueDMgPSAwO1xuICAgIHRoaXMueTMgPSAxO1xuXG4gICAgdGhpcy54eTBfdWludDMyID0gMDtcbiAgICB0aGlzLnh5MV91aW50MzIgPSAwO1xuICAgIHRoaXMueHkyX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTNfdWludDMyID0gMDtcblxuICAgIHRoaXMudXZzX3VpbnQzMiA9IG5ldyBVaW50MzJBcnJheSg0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVVdnM7XG5cbi8qKlxuICogU2V0cyB0aGUgdGV4dHVyZSBVdnMgYmFzZWQgb24gdGhlIGdpdmVuIGZyYW1lIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gZnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIGJhc2VGcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gcm90YXRlIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgcm90YXRlZFxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZVV2cy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZyYW1lLCBiYXNlRnJhbWUsIHJvdGF0ZSlcbntcbiAgICB2YXIgdHcgPSBiYXNlRnJhbWUud2lkdGg7XG4gICAgdmFyIHRoID0gYmFzZUZyYW1lLmhlaWdodDtcblxuICAgIGlmKHJvdGF0ZSlcbiAgICB7XG4gICAgICAgIHRoaXMueDAgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSBmcmFtZS55IC8gdGg7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy54MCA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcbiAgICB9XG5cbiAgICB0aGlzLnV2c191aW50MzJbMF0gPSAoKCh0aGlzLnkwICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDAgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsxXSA9ICgoKHRoaXMueTEgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MSAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzJdID0gKCgodGhpcy55MiAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngyICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbM10gPSAoKCh0aGlzLnkzICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDMgKiA2NTUzNSkgJiAweEZGRkYpO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIG9mIGEgW3BsYXlpbmddIFZpZGVvLlxuICpcbiAqIFZpZGVvIGJhc2UgdGV4dHVyZXMgbWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QgaW4gdGhlaXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNldmVyYWwgd2F5cywgc3VjaCBhczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCgnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHsgc3JjOiAnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9KTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbJy92aWRlby53ZWJtJywgJy92aWRlby5tcDQnXSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoW1xuICogICAgIHsgc3JjOiAnL3ZpZGVvLndlYm0nLCBtaW1lOiAndmlkZW8vd2VibScgfSxcbiAqICAgICB7IHNyYzogJy92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9XG4gKiBdKTtcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgW1wiZGV1c1wiIGRlbW9dKGh0dHA6Ly93d3cuZ29vZGJveWRpZ2l0YWwuY29tL3BpeGlqcy9leGFtcGxlcy9kZXVzLykuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkJhc2VUZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gVmlkZW9CYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmlkZW8gc291cmNlIGVsZW1lbnQgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIC8vIGhvb2sgaW4gaGVyZSB0byBjaGVjayBpZiB2aWRlbyBpcyBhbHJlYWR5IGF2YWlsYWJsZS5cbiAgICAvLyBCYXNlVGV4dHVyZSBsb29rcyBmb3IgYSBzb3VyY2UuY29tcGxldGUgYm9vbGVhbiwgcGx1cyB3aWR0aCAmIGhlaWdodC5cblxuICAgIGlmICgoc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0VOT1VHSF9EQVRBIHx8IHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9GVVRVUkVfREFUQSkgJiYgc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICBzb3VyY2UuY29tcGxldGUgPSB0cnVlO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgc291cmNlLCBzY2FsZU1vZGUpO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBiYXNlIHRleHR1cmUgYXV0b21hdGljYWxseSB1cGRhdGUgaXRzZWxmLCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX29uVXBkYXRlID0gdGhpcy5fb25VcGRhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkNhblBsYXkgPSB0aGlzLl9vbkNhblBsYXkuYmluZCh0aGlzKTtcblxuICAgIGlmICghc291cmNlLmNvbXBsZXRlKVxuICAgIHtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIC8vIHN0YXJ0ZWQgcGxheWluZy4uXG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fb25QbGF5U3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX29uUGxheVN0b3AuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fX2xvYWRlZCA9IGZhbHNlO1xufVxuXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZVRleHR1cmUucHJvdG90eXBlKTtcblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmlkZW9CYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9CYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3Agb2YgdGhlIHZpZGVvIGJhc2UgdGV4dHVyZSwgb25seSBydW5zIHdoZW4gYXV0b1VwZGF0ZSBpcyBzZXQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUnVucyB0aGUgdXBkYXRlIGxvb3Agd2hlbiB0aGUgdmlkZW8gaXMgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBwYXVzZSBldmVudCBpcyB0cmlnZ2VyZWQsIHN0b3BzIHRoZSB1cGRhdGUgbG9vcFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgdmlkZW8gaXMgbG9hZGVkIGFuZCByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uQ2FuUGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2UudmlkZW9XaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnNvdXJjZS52aWRlb0hlaWdodDtcblxuICAgICAgICB0aGlzLnNvdXJjZS5wbGF5KCk7XG5cbiAgICAgICAgLy8gcHJldmVudCBtdWx0aXBsZSBsb2FkZWQgZGlzcGF0Y2hlcy4uXG4gICAgICAgIGlmICghdGhpcy5fX2xvYWRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHRoaXMuc291cmNlLl9waXhpSWQgXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlLl9waXhpSWQ7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogTWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXZpZGVvLl9waXhpSWQpXG4gICAge1xuICAgICAgICB2aWRlby5fcGl4aUlkID0gJ3ZpZGVvXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3ZpZGVvLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IFZpZGVvQmFzZVRleHR1cmUodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHZpZGVvLl9waXhpSWQgXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBCYXNlVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqIFRoaXMgQmFzZVRleHR1cmUgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYSB0ZXh0dXJlXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvU3JjIHtzdHJpbmd8b2JqZWN0fHN0cmluZ1tdfG9iamVjdFtdfSBUaGUgVVJMKHMpIGZvciB0aGUgdmlkZW8uXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLnNyY10ge3N0cmluZ30gT25lIG9mIHRoZSBzb3VyY2UgdXJscyBmb3IgdGhlIHZpZGVvXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLm1pbWVdIHtzdHJpbmd9IFRoZSBtaW1ldHlwZSBvZiB0aGUgdmlkZW8gKGUuZy4gJ3ZpZGVvL21wNCcpLiBJZiBub3Qgc3BlY2lmaWVkXG4gKiAgdGhlIHVybCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBtaW1lIHR5cGUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwgPSBmdW5jdGlvbiAodmlkZW9TcmMsIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXG4gICAgLy8gYXJyYXkgb2Ygb2JqZWN0cyBvciBzdHJpbmdzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW9TcmMpKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWRlb1NyYy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjW2ldLnNyYyB8fCB2aWRlb1NyY1tpXSwgdmlkZW9TcmNbaV0ubWltZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNpbmdsZSBvYmplY3Qgb3Igc3RyaW5nXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjLnNyYyB8fCB2aWRlb1NyYywgdmlkZW9TcmMubWltZSkpO1xuICAgIH1cblxuICAgIHZpZGVvLmxvYWQoKTtcbiAgICB2aWRlby5wbGF5KCk7XG5cbiAgICByZXR1cm4gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSk7XG59O1xuXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzID0gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsO1xuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2UocGF0aCwgdHlwZSlcbntcbiAgICBpZiAoIXR5cGUpXG4gICAge1xuICAgICAgICB0eXBlID0gJ3ZpZGVvLycgKyBwYXRoLnN1YnN0cihwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gcGF0aDtcbiAgICBzb3VyY2UudHlwZSA9IHR5cGU7XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgLy8gSW50ZXJuYWwgZXZlbnQgdXNlZCBieSBjb21wb3NlZCBlbWl0dGVyXG4gICAgVElDSyA9ICd0aWNrJztcblxuLyoqXG4gKiBBIFRpY2tlciBjbGFzcyB0aGF0IHJ1bnMgYW4gdXBkYXRlIGxvb3AgdGhhdCBvdGhlciBvYmplY3RzIGxpc3RlbiB0by5cbiAqIFRoaXMgY2xhc3MgaXMgY29tcG9zZWQgYXJvdW5kIGFuIEV2ZW50RW1pdHRlciBvYmplY3QgdG8gYWRkIGxpc3RlbmVyc1xuICogbWVhbnQgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lLlxuICogQW5pbWF0aW9uIGZyYW1lcyBhcmUgcmVxdWVzdGVkIG9ubHkgd2hlbiBuZWNlc3NhcnksXG4gKiBlLmcuIFdoZW4gdGhlIHRpY2tlciBpcyBzdGFydGVkIGFuZCB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbmZ1bmN0aW9uIFRpY2tlcigpXG57XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRpY2sgbWV0aG9kIGJvdW5kIHRvIHRpY2tlciBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaW4gZWFybHkgMjAxNSwgRnVuY3Rpb24uYmluZFxuICAgICAqIGlzIHN0aWxsIDYwJSBzbG93ZXIgaW4gaGlnaCBwZXJmb3JtYW5jZSBzY2VuYXJpb3MuXG4gICAgICogQWxzbyBzZXBhcmF0aW5nIGZyYW1lIHJlcXVlc3RzIGZyb20gdXBkYXRlIG1ldGhvZFxuICAgICAqIHNvIGxpc3RlbmVycyBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGFuZCB3aXRoXG4gICAgICogYW55IGFuaW1hdGlvbiBBUEksIGp1c3QgaW52b2tlIHRpY2tlci51cGRhdGUodGltZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RpY2sgPSBmdW5jdGlvbiBfdGljayh0aW1lKSB7XG5cbiAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgbm93XG4gICAgICAgICAgICBfdGhpcy51cGRhdGUodGltZSk7XG4gICAgICAgICAgICAvLyBMaXN0ZW5lciBzaWRlIGVmZmVjdHMgbWF5IGhhdmUgbW9kaWZpZWQgdGlja2VyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQgJiYgX3RoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiBfdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fdGljayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZW1pdHRlciB1c2VkIHRvIGZpcmUgJ3RpY2snIGV2ZW50XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9lbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY3VycmVudCBmcmFtZSByZXF1ZXN0IElEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdmFsdWUgbWFuYWdlZCBieSBtaW5GUFMgcHJvcGVydHkgc2V0dGVyIGFuZCBnZXR0ZXIuXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHVwZGF0ZXMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBzaG91bGQgaW52b2tlIHRoZSBtZXRob2RcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBhdXRvbWF0aWNhbGx5XG4gICAgICogd2hlbiBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1N0YXJ0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTY2FsYXIgdGltZSB2YWx1ZSBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbWluRlBTfVxuICAgICAqIGFuZCBpcyBzY2FsZWQgd2l0aCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfS5cbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhcCBtYXkgYmUgZXhjZWVkZWQgYnkgc2NhbGluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kZWx0YVRpbWUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGltZSBlbGFwc2VkIGluIG1pbGxpc2Vjb25kcyBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBPcHBvc2VkIHRvIHdoYXQgdGhlIHNjYWxhciB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX1cbiAgICAgKiBpcyBiYXNlZCwgdGhpcyB2YWx1ZSBpcyBuZWl0aGVyIGNhcHBlZCBub3Igc2NhbGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMSAvIFRBUkdFVF9GUE1TXG4gICAgICovXG4gICAgdGhpcy5lbGFwc2VkTVMgPSAxIC8gQ09OU1QuVEFSR0VUX0ZQTVM7IC8vIGRlZmF1bHQgdG8gdGFyZ2V0IGZyYW1lIHRpbWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBsYXN0IHRpbWUge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9IHdhcyBpbnZva2VkLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgYWxzbyByZXNldCBpbnRlcm5hbGx5IG91dHNpZGUgb2YgaW52b2tpbmdcbiAgICAgKiB1cGRhdGUsIGJ1dCBvbmx5IHdoZW4gYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxhc3RUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEZhY3RvciBvZiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNjYWxlcyB0aWNrZXIuZGVsdGFUaW1lIHRvIHdoYXQgd291bGQgYmVcbiAgICAgKiAvLyB0aGUgZXF1aXZhbGVudCBvZiBhcHByb3hpbWF0ZWx5IDEyMCBGUFNcbiAgICAgKiB0aWNrZXIuc3BlZWQgPSAyO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICogYHRydWVgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBgZmFsc2VgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RvcH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIFdoaWxlIGBmYWxzZWAsIHRoaXMgdmFsdWUgbWF5IGNoYW5nZSB0byBgdHJ1ZWAgaW4gdGhlXG4gICAgICogZXZlbnQgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGJlaW5nIGB0cnVlYFxuICAgICAqIGFuZCBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWNrZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lcyBwZXIgc2Vjb25kIGF0IHdoaWNoIHRoaXMgdGlja2VyIGlzIHJ1bm5pbmcuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgYXBwcm94aW1hdGVseSA2MCBpbiBtb3N0IG1vZGVybiBicm93c2Vycy5cbiAgICAgKiAqKk5vdGU6KiogVGhpcyBkb2VzIG5vdCBmYWN0b3IgaW4gdGhlIHZhbHVlIG9mXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0sIHdoaWNoIGlzIHNwZWNpZmljXG4gICAgICogdG8gc2NhbGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBGUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5lbGFwc2VkTVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGFsbG93ZWQgdG9cbiAgICAgKiBlbGFwc2UgYmV0d2VlbiBpbnZva2luZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0uXG4gICAgICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNhcCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gICAgICogYnV0IGRvZXMgbm90IGVmZmVjdCB0aGUgbWVhc3VyZWQgdmFsdWUgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNGUFN9LlxuICAgICAqIFdoZW4gc2V0dGluZyB0aGlzIHByb3BlcnR5IGl0IGlzIGNsYW1wZWQgdG8gYSB2YWx1ZSBiZXR3ZWVuXG4gICAgICogYDBgIGFuZCBgUElYSS5UQVJHRVRfRlBNUyAqIDEwMDBgLlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICBtaW5GUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZwcylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gQ2xhbXA6IDAgdG8gVEFSR0VUX0ZQTVNcbiAgICAgICAgICAgIHZhciBtaW5GUE1TID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZnBzKSAvIDEwMDAsIENPTlNULlRBUkdFVF9GUE1TKTtcbiAgICAgICAgICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEgLyBtaW5GUE1TO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbFxuICogZW1pdHRlciBoYXMgbGlzdGVuZXJzLCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fcmVxdWVzdElmTmVlZGVkID0gZnVuY3Rpb24gX3JlcXVlc3RJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiB0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIC8vIGVuc3VyZSBjYWxsYmFja3MgZ2V0IGNvcnJlY3QgZGVsdGFcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fdGljayk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IGNhbmNlbHMgYSBwZW5kaW5nIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9jYW5jZWxJZk5lZWRlZCA9IGZ1bmN0aW9uIF9jYW5jZWxJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIHRoZSB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZCBpdCBjaGVja3MgaWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHlcbiAqIGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy4gSWYgdGhlc2VcbiAqIGNvbmRpdGlvbnMgYXJlIG1ldCwgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgdGlja2VyIGhhcyBub3RcbiAqIGJlZW4gc3RhcnRlZCwgYnV0IGF1dG9TdGFydCBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHRpY2tlciBzdGFydHMgbm93LFxuICogYW5kIGNvbnRpbnVlcyB3aXRoIHRoZSBwcmV2aW91cyBjb25kaXRpb25zIHRvIHJlcXVlc3QgYSBuZXcgZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fc3RhcnRJZlBvc3NpYmxlID0gZnVuY3Rpb24gX3N0YXJ0SWZQb3NzaWJsZSgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmF1dG9TdGFydClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb259IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIHVwZGF0ZXNcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb25jZX0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3Igb25lIHVwZGF0ZVxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIGFkZE9uY2UoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbmNlKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb2ZmfSBpbnRlcm5hbGx5IGZvciAndGljaycgZXZlbnQuXG4gKiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyBmb3IgJ3RpY2snIGV2ZW50LlxuICogSWYgaXQgZG9lcywgdGhlbiBpdCBjYW5jZWxzIHRoZSBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHBhcmFtIFtmbl0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZFxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0IHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vZmYoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgaWYgKCF0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyBsaXN0ZW5lcnNcbiAqIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIHN0YXJ0KClcbntcbiAgICBpZiAoIXRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgcmVxdWVzdGVkXG4gKiBhbiBhbmltYXRpb24gZnJhbWUgaXQgaXMgY2FuY2VsZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcCgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVHJpZ2dlcnMgYW4gdXBkYXRlLiBBbiB1cGRhdGUgZW50YWlscyBzZXR0aW5nIHRoZVxuICogY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2VsYXBzZWRNU30sXG4gKiB0aGUgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gKiBpbnZva2luZyBhbGwgbGlzdGVuZXJzIHdpdGggY3VycmVudCBkZWx0YVRpbWUsXG4gKiBhbmQgdGhlbiBmaW5hbGx5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNsYXN0VGltZX1cbiAqIHdpdGggdGhlIHZhbHVlIG9mIGN1cnJlbnRUaW1lIHRoYXQgd2FzIHByb3ZpZGVkLlxuICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBieSBhbmltYXRpb25cbiAqIGZyYW1lIGNhbGxiYWNrcyBpZiB0aGUgdGlja2VyIGluc3RhbmNlIGhhcyBiZWVuIHN0YXJ0ZWRcbiAqIGFuZCBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSBbY3VycmVudFRpbWU9cGVyZm9ybWFuY2Uubm93KCldIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn0gdGhlIGN1cnJlbnQgdGltZSBvZiBleGVjdXRpb25cbiAqL1xuVGlja2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoY3VycmVudFRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWRNUztcblxuICAgIC8vIEFsbG93IGNhbGxpbmcgdXBkYXRlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBjdXJyZW50VGltZS5cbiAgICBjdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIHx8IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIC8vIFNhdmUgdW5jYXBwZWQgZWxhcHNlZE1TIGZvciBtZWFzdXJlbWVudFxuICAgIGVsYXBzZWRNUyA9IHRoaXMuZWxhcHNlZE1TID0gY3VycmVudFRpbWUgLSB0aGlzLmxhc3RUaW1lO1xuXG4gICAgLy8gY2FwIHRoZSBtaWxsaXNlY29uZHMgZWxhcHNlZCB1c2VkIGZvciBkZWx0YVRpbWVcbiAgICBpZiAoZWxhcHNlZE1TID4gdGhpcy5fbWF4RWxhcHNlZE1TKVxuICAgIHtcbiAgICAgICAgZWxhcHNlZE1TID0gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgIH1cblxuICAgIHRoaXMuZGVsdGFUaW1lID0gZWxhcHNlZE1TICogQ09OU1QuVEFSR0VUX0ZQTVMgKiB0aGlzLnNwZWVkO1xuXG4gICAgLy8gSW52b2tlIGxpc3RlbmVycyBhZGRlZCB0byBpbnRlcm5hbCBlbWl0dGVyXG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KFRJQ0ssIHRoaXMuZGVsdGFUaW1lKTtcblxuICAgIHRoaXMubGFzdFRpbWUgPSBjdXJyZW50VGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGlja2VyO1xuIiwidmFyIFRpY2tlciA9IHJlcXVpcmUoJy4vVGlja2VyJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZCB0aWNrZXIgaW5zdGFuY2UgdXNlZCBieSB7QGxpbmsgUElYSS5leHRyYXMuTW92aWVDbGlwfS5cbiAqIGFuZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICogVGhlIHByb3BlcnR5IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBpcyBzZXQgdG8gYHRydWVgXG4gKiBmb3IgdGhpcyBpbnN0YW5jZS4gUGxlYXNlIGZvbGxvdyB0aGUgZXhhbXBsZXMgZm9yIHVzYWdlLCBpbmNsdWRpbmdcbiAqIGhvdyB0byBvcHQtb3V0IG9mIGF1dG8tc3RhcnRpbmcgdGhlIHNoYXJlZCB0aWNrZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciB0aWNrZXIgPSBQSVhJLnRpY2tlci5zaGFyZWQ7XG4gKiAvLyBTZXQgdGhpcyB0byBwcmV2ZW50IHN0YXJ0aW5nIHRoaXMgdGlja2VyIHdoZW4gbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqIC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyB0cnVlIG9ubHkgZm9yIHRoZSBQSVhJLnRpY2tlci5zaGFyZWQgaW5zdGFuY2UuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiAvLyBGWUksIGNhbGwgdGhpcyB0byBlbnN1cmUgdGhlIHRpY2tlciBpcyBzdG9wcGVkLiBJdCBzaG91bGQgYmUgc3RvcHBlZFxuICogLy8gaWYgeW91IGhhdmUgbm90IGF0dGVtcHRlZCB0byByZW5kZXIgYW55dGhpbmcgeWV0LlxuICogdGlja2VyLnN0b3AoKTtcbiAqIC8vIENhbGwgdGhpcyB3aGVuIHlvdSBhcmUgcmVhZHkgZm9yIGEgcnVubmluZyBzaGFyZWQgdGlja2VyLlxuICogdGlja2VyLnN0YXJ0KCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFlvdSBtYXkgdXNlIHRoZSBzaGFyZWQgdGlja2VyIHRvIHJlbmRlci4uLlxuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoODAwLCA2MDApO1xuICogdmFyIHN0YWdlID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiB2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIpO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZW5kZXJlci52aWV3KTtcbiAqIHRpY2tlci5hZGQoZnVuY3Rpb24gKHRpbWUpIHtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE9yIHlvdSBjYW4ganVzdCB1cGRhdGUgaXQgbWFudWFsbHkuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiB0aWNrZXIuc3RvcCgpO1xuICogZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XG4gKiAgICAgdGlja2VyLnVwZGF0ZSh0aW1lKTtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAqIH1cbiAqIGFuaW1hdGUocGVyZm9ybWFuY2Uubm93KCkpO1xuICpcbiAqIEB0eXBlIHtQSVhJLnRpY2tlci5UaWNrZXJ9XG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xudmFyIHNoYXJlZCA9IG5ldyBUaWNrZXIoKTtcbnNoYXJlZC5hdXRvU3RhcnQgPSB0cnVlO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS50aWNrZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc2hhcmVkOiBzaGFyZWQsXG4gICAgVGlja2VyOiBUaWNrZXJcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gZnVuY3Rpb24gKHNpemUpXG57XG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBhcnJheSwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgXG4gICAgdmFyIHRvdGFsSW5kaWNlcyA9IHNpemUgKiA2O1xuXG4gICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodG90YWxJbmRpY2VzKTtcblxuXHQvLyBmaWxsIHRoZSBpbmRpY2VzIHdpdGggdGhlIHF1YWRzIHRvIGRyYXdcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IHRvdGFsSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICBpbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICBpbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHM7IiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudXRpbHNcbiAqL1xudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgX3VpZDogMCxcbiAgICBfc2FpZEhlbGxvOiBmYWxzZSxcblxuICAgIEV2ZW50RW1pdHRlcjogICByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgcGx1Z2luVGFyZ2V0OiAgIHJlcXVpcmUoJy4vcGx1Z2luVGFyZ2V0JyksXG4gICAgYXN5bmM6ICAgICAgICAgIHJlcXVpcmUoJ2FzeW5jJyksXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZS5cbiAgICAgKi9cbiAgICB1aWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICByZXR1cm4gKyt1dGlscy5fdWlkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYW4gW1IsIEcsIEJdIGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHBhcmFtICB7bnVtYmVyW119IFtvdXQ9W11dXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgW1IsIEcsIEJdIG9mIHRoZSBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgycmdiOiBmdW5jdGlvbiAoaGV4LCBvdXQpXG4gICAge1xuICAgICAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICAgICAgb3V0WzBdID0gKGhleCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMV0gPSAoaGV4ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzJdID0gKGhleCAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnN0cmluZzogZnVuY3Rpb24gKGhleClcbiAgICB7XG4gICAgICAgIGhleCA9IGhleC50b1N0cmluZygxNik7XG4gICAgICAgIGhleCA9ICcwMDAwMDAnLnN1YnN0cigwLCA2IC0gaGV4Lmxlbmd0aCkgKyBoZXg7XG5cbiAgICAgICAgcmV0dXJuICcjJyArIGhleDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkgdG8gYSBoZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmdiIHtudW1iZXJbXX1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb2xvciBudW1iZXJcbiAgICAgKi9cbiAgICByZ2IyaGV4OiBmdW5jdGlvbiAocmdiKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgocmdiWzBdKjI1NSA8PCAxNikgKyAocmdiWzFdKjI1NSA8PCA4KSArIHJnYlsyXSoyNTUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZFxuICAgICAqL1xuICAgIGNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXM6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBuZ0hlYWQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFCQVFNQUFBREQ4cDJPQUFBQUExQk1WRVgvJztcbiAgICAgICAgdmFyIHBuZ0VuZCA9ICdBQUFBQ2tsRVFWUUkxMk5nQUFBQUFnQUI0aUc4TXdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG4gICAgICAgIHZhciBtYWdlbnRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSA2O1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcblxuICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1hZ2VudGEsIDAsIDApO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh5ZWxsb3csIDIsIDApO1xuXG4gICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwwLDEsMSkuZGF0YTtcblxuICAgICAgICByZXR1cm4gKGRhdGFbMF0gPT09IDI1NSAmJiBkYXRhWzFdID09PSAwICYmIGRhdGFbMl0gPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIG51bWJlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICogdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIFN0YXJsaW5nIEZyYW1ld29yayBhcyBpdHMgcHJldHR5IG5lYXQgOylcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICovXG4gICAgZ2V0TmV4dFBvd2VyT2ZUd286IGZ1bmN0aW9uIChudW1iZXIpXG4gICAge1xuICAgICAgICAvLyBzZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG93ZXJfb2ZfdHdvI0Zhc3RfYWxnb3JpdGhtX3RvX2NoZWNrX2lmX2FfcG9zaXRpdmVfbnVtYmVyX2lzX2FfcG93ZXJfb2ZfdHdvXG4gICAgICAgIGlmIChudW1iZXIgPiAwICYmIChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDE7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPCBudW1iZXIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzdWx0IDw8PSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBtYWtlIGEgcG93ZXIgb2YgdHdvIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9XG4gICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybiAod2lkdGggPiAwICYmICh3aWR0aCAmICh3aWR0aCAtIDEpKSA9PT0gMCAmJiBoZWlnaHQgPiAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIGFuIGFzc2V0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwcmVmaXhcbiAgICAgKiB1c2VkIGJ5IHNwcml0ZXNoZWV0cyBhbmQgaW1hZ2UgdXJsc1xuICAgICAqXG4gICAgICogQHBhcmFtIHVybCB7c3RyaW5nfSB0aGUgaW1hZ2UgcGF0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRSZXNvbHV0aW9uT2ZVcmw6IGZ1bmN0aW9uICh1cmwpXG4gICAge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IENPTlNULlJFVElOQV9QUkVGSVguZXhlYyh1cmwpO1xuXG4gICAgICAgIGlmIChyZXNvbHV0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlc29sdXRpb25bMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvZ3Mgb3V0IHRoZSB2ZXJzaW9uIGFuZCByZW5kZXJlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBydW5uaW5nIGluc3RhbmNlIG9mIFBJWEkuXG4gICAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoaXMgbWVzc2FnZSB5b3UgY2FuIHNldCBgUElYSS51dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtgXG4gICAgICogc28gdGhlIGxpYnJhcnkgdGhpbmtzIGl0IGFscmVhZHkgc2FpZCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgZG9pbmcgdGhhdCB3aWxsIGZvcmV2ZXJcbiAgICAgKiBtYWtlcyB5b3UgYSBqZXJrIGZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBzdHJpbmcgcmVuZGVyZXIgdHlwZSB0byBsb2cuXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIHNheUhlbGxvOiBmdW5jdGlvbiAodHlwZSlcbiAgICB7XG4gICAgICAgIGlmICh1dGlscy5fc2FpZEhlbGxvKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZScpID4gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW1xuICAgICAgICAgICAgICAgICdcXG4gJWMgJWMgJWMgUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSDinLAgJyArIHR5cGUgKyAnIOKcsCAgJWMgJyArICcgJWMgJyArICcgaHR0cDovL3d3dy5waXhpanMuY29tLyAgJWMgJWMg4pmlJWPimaUlY+KZpSBcXG5cXG4nLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjY2YTU7IGJhY2tncm91bmQ6ICMwMzAzMDc7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmZjM2RjOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7J1xuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3MpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1BpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0gJyArIHR5cGUgKyAnIC0gaHR0cDovL3d3dy5waXhpanMuY29tLycpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmb3IgY2hlY2tpbmcgZm9yIHdlYmdsIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNXZWJHTFN1cHBvcnRlZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHZhciBjb250ZXh0T3B0aW9ucyA9IHsgc3RlbmNpbDogdHJ1ZSB9O1xuICAgICAgICB0cnlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgY29udGV4dE9wdGlvbnMpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBjb250ZXh0T3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIShnbCAmJiBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnN0ZW5jaWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzaWduIG9mIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIG4ge251bWJlcn1cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIG4gaXMgMCwgLTEgaWYgbiBpcyBuZWdhdGl2ZSwgMSBpZiBuIGkgcG9zaXRpdmVcbiAgICAgKi9cbiAgICBzaWduOiBmdW5jdGlvbiAobilcbiAgICB7XG4gICAgICAgIHJldHVybiBuID8gKG4gPCAwID8gLTEgOiAxKSA6IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZUl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydElkeCBUaGUgaW5kZXggdG8gYmVnaW4gcmVtb3ZpbmcgZnJvbSAoaW5jbHVzaXZlKVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVJdGVtczogZnVuY3Rpb24gKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KVxuICAgIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN0YXJ0SWR4ID49IGxlbmd0aCB8fCByZW1vdmVDb3VudCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVtb3ZlQ291bnQgPSAoc3RhcnRJZHgrcmVtb3ZlQ291bnQgPiBsZW5ndGggPyBsZW5ndGgtc3RhcnRJZHggOiByZW1vdmVDb3VudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydElkeCwgbGVuID0gbGVuZ3RoLXJlbW92ZUNvdW50OyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyLmxlbmd0aCA9IGxlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge30sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge31cbn07XG4iLCIvKipcbiAqIE1peGlucyBmdW5jdGlvbmFsaXR5IHRvIG1ha2UgYW4gb2JqZWN0IGhhdmUgXCJwbHVnaW5zXCIuXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS51dGlsc1xuICogQHBhcmFtIG9iaiB7b2JqZWN0fSBUaGUgb2JqZWN0IHRvIG1peCBpbnRvLlxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgcGx1Z2luVGFyZ2V0Lm1peGluKE15T2JqZWN0KTtcbiAqL1xuZnVuY3Rpb24gcGx1Z2luVGFyZ2V0KG9iailcbntcbiAgICBvYmouX19wbHVnaW5zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcGx1Z2luIHRvIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHBsdWdpbk5hbWUge3N0cmluZ30gVGhlIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQuXG4gICAgICogQHBhcmFtIGN0b3Ige0Z1bmN0aW9ufSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBwbHVnaW4uXG4gICAgICovXG4gICAgb2JqLnJlZ2lzdGVyUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGN0b3IpXG4gICAge1xuICAgICAgICBvYmouX19wbHVnaW5zW3BsdWdpbk5hbWVdID0gY3RvcjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5pbml0UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLnBsdWdpbnMgfHwge307XG5cbiAgICAgICAgZm9yICh2YXIgbyBpbiBvYmouX19wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBuZXcgKG9iai5fX3BsdWdpbnNbb10pKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmRlc3Ryb3lQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGZvciAodmFyIG8gaW4gdGhpcy5wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG51bGw7XG4gICAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvKipcbiAgICAgKiBNaXhlcyBpbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGx1Z2luVGFyZ2V0IGludG8gYW5vdGhlciBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3Qge29iamVjdH0gVGhlIG9iaiB0byBtaXggaW50b1xuICAgICAqL1xuICAgIG1peGluOiBmdW5jdGlvbiBtaXhpbihvYmopXG4gICAge1xuICAgICAgICBwbHVnaW5UYXJnZXQob2JqKTtcbiAgICB9XG59O1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKSxcbiAgICBtZXNoID0gcmVxdWlyZSgnLi9tZXNoJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi9leHRyYXMnKSxcbiAgICBmaWx0ZXJzID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgU3ByaXRlQmF0Y2hcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkuUGFydGljbGVDb250YWluZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlQmF0Y2ggPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuJyk7XG59O1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIEFzc2V0TG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLmxvYWRlcnMuTG9hZGVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuQXNzZXRMb2FkZXIgPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy4nKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvcmUsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RhZ2VcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RhZ2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignWW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIFBJWEkgU3RhZ2UgYW55IG1vcmUsIHlvdSBjYW4gc2ltcGx5IHJlbmRlciBhbnkgY29udGFpbmVyLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgRGlzcGxheU9iamVjdENvbnRhaW5lclxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBEaXNwbGF5T2JqZWN0Q29udGFpbmVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Rpc3BsYXlPYmplY3RDb250YWluZXIgaGFzIGJlZW4gc2hvcnRlbmVkIHRvIENvbnRhaW5lciwgcGxlYXNlIHVzZSBDb250YWluZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdHJpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdHJpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgU3RyaXAgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBNZXNoIGFuZCBtb3ZlZCB0byBtZXNoLk1lc2gsIHBsZWFzZSB1c2UgbWVzaC5NZXNoIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guTWVzaDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFJvcGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLlJvcGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgUm9wZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgUm9wZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBtZXNoLlJvcGUsIHBsZWFzZSB1c2UgbWVzaC5Sb3BlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guUm9wZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIE1vdmllQ2xpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXBcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgTW92aWVDbGlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBNb3ZpZUNsaXAgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLk1vdmllQ2xpcCwgcGxlYXNlIHVzZSBleHRyYXMuTW92aWVDbGlwIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5Nb3ZpZUNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUaWxpbmdTcHJpdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRpbGluZ1Nwcml0ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGlsaW5nU3ByaXRlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5UaWxpbmdTcHJpdGUsIHBsZWFzZSB1c2UgZXh0cmFzLlRpbGluZ1Nwcml0ZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuVGlsaW5nU3ByaXRlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQml0bWFwVGV4dFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJpdG1hcFRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJpdG1hcFRleHQgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLkJpdG1hcFRleHQsIHBsZWFzZSB1c2UgZXh0cmFzLkJpdG1hcFRleHQgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLkJpdG1hcFRleHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBibGVuZE1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgYmxlbmRNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYmxlbmRNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBCTEVORF9NT0RFUywgcGxlYXNlIHVzZSBCTEVORF9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkJMRU5EX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2NhbGVNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIHNjYWxlTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHNjYWxlTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gU0NBTEVfTU9ERVMsIHBsZWFzZSB1c2UgU0NBTEVfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TQ0FMRV9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5CYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCYXNlVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuQmFzZVRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5UZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLlRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5UZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5UZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgbWF0aFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIG1hdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBtYXRoIG5hbWVzcGFjZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgYWNjZXNzIG1lbWJlcnMgYWxyZWFkeSBhY2Nlc3NpYmxlIG9uIFBJWEkuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBQSVhJLlNwcml0ZSNzZXRUZXh0dXJlXG4gKiBAc2VlIFBJWEkuU3ByaXRlI3RleHR1cmVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0dXJlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0dXJlIHByb3BlcnR5LCBlLmcgOiBzcHJpdGUudGV4dHVyZSA9IHRleHR1cmU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuZXh0cmFzLkJpdG1hcFRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteUJpdG1hcFRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15VGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFN0eWxlXG4gKiBAc2VlIFBJWEkuVGV4dCNzdHlsZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpXG57XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgIGNvbnNvbGUud2Fybignc2V0U3R5bGUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5LCBlLmcgOiBteVRleHQuc3R5bGUgPSBzdHlsZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAc2VlIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHR1cmUucHJvdG90eXBlLnNldEZyYW1lID0gZnVuY3Rpb24oZnJhbWUpXG57XG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIGNvbnNvbGUud2Fybignc2V0RnJhbWUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIGZyYW1lIHByb3BlcnR5LCBlLmcgOiBteVRleHR1cmUuZnJhbWUgPSBmcmFtZTsnKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpbHRlcnMsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkFic3RyYWN0RmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkFic3RyYWN0RmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEFic3RyYWN0RmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuQWJzdHJhY3RGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEFic3RyYWN0RmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQWJzdHJhY3RGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuRlhBQUZpbHRlclxuICAgICAqIEBzZWUgUElYSS5GWEFBRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEZYQUFGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5GWEFBRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBGWEFBRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuRlhBQUZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgU3ByaXRlTWFza0ZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIFNwcml0ZU1hc2tGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TcHJpdGVNYXNrRmlsdGVyO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS51dGlscy51dWlkXG4gKiBAc2VlIFBJWEkudXRpbHMudWlkXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gKi9cbmNvcmUudXRpbHMudXVpZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29uc29sZS53YXJuKCd1dGlscy51dWlkKCkgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB1dGlscy51aWQoKSBmcm9tIG5vdyBvbi4nKTtcbiAgICByZXR1cm4gY29yZS51dGlscy51aWQoKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIEJpdG1hcFRleHQgb2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0IHVzaW5nIGJpdG1hcCBmb250LiBUb1xuICogc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLCAnXFxyJyBvciAnXFxyXFxuJyBpbiB5b3VyIHN0cmluZy4gWW91IGNhbiBnZW5lcmF0ZSB0aGUgZm50IGZpbGVzIHVzaW5nOlxuICpcbiAqIEEgQml0bWFwVGV4dCBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGZvbnQgaXMgbG9hZGVkXG4gKlxuICogYGBganNcbiAqIC8vIGluIHRoaXMgY2FzZSB0aGUgZm9udCBpcyBpbiBhIGZpbGUgY2FsbGVkICdkZXN5cmVsLmZudCdcbiAqIHZhciBiaXRtYXBUZXh0ID0gbmV3IFBJWEkuZXh0cmFzLkJpdG1hcFRleHQoXCJ0ZXh0IHVzaW5nIGEgZmFuY3kgZm9udCFcIiwge2ZvbnQ6IFwiMzVweCBEZXN5cmVsXCIsIGFsaWduOiBcInJpZ2h0XCJ9KTtcbiAqIGBgYFxuICpcbiAqXG4gKiBodHRwOi8vd3d3LmFuZ2VsY29kZS5jb20vcHJvZHVjdHMvYm1mb250LyBmb3Igd2luZG93cyBvclxuICogaHR0cDovL3d3dy5ibWdseXBoLmNvbS8gZm9yIG1hYy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIHN0eWxlIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gc3R5bGUuZm9udCB7c3RyaW5nfG9iamVjdH0gVGhlIGZvbnQgZGVzY3JpcHRvciBmb3IgdGhlIG9iamVjdCwgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZyBvZiBmb3JtXG4gKiAgICAgIFwiMjRweCBGb250TmFtZVwiIG9yIFwiRm9udE5hbWVcIiBvciBhcyBhbiBvYmplY3Qgd2l0aCBleHBsaWNpdCBuYW1lL3NpemUgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5uYW1lXSB7c3RyaW5nfSBUaGUgYml0bWFwIGZvbnQgaWRcbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5zaXplXSB7bnVtYmVyfSBUaGUgc2l6ZSBvZiB0aGUgZm9udCBpbiBwaXhlbHMsIGUuZy4gMjRcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3RcbiAqICAgICAgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS50aW50PTB4RkZGRkZGXSB7bnVtYmVyfSBUaGUgdGludCBjb2xvclxuICovXG5mdW5jdGlvbiBCaXRtYXBUZXh0KHRleHQsIHN0eWxlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGxldHRlciBzcHJpdGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbHlwaHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mb250ID0ge1xuICAgICAgICB0aW50OiBzdHlsZS50aW50ICE9PSB1bmRlZmluZWQgPyBzdHlsZS50aW50IDogMHhGRkZGRkYsXG4gICAgICAgIGFsaWduOiBzdHlsZS5hbGlnbiB8fCAnbGVmdCcsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIHNpemU6IDBcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBmb250LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mb250ID0gc3R5bGUuZm9udDsgLy8gcnVuIGZvbnQgc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggd2lkdGggb2YgdGhpcyBiaXRtYXAgdGV4dCBpbiBwaXhlbHMuIElmIHRoZSB0ZXh0IHByb3ZpZGVkIGlzIGxvbmdlciB0aGFuIHRoZSB2YWx1ZSBwcm92aWRlZCwgbGluZSBicmVha3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoZSBsYXN0IHdoaXRlc3BhY2UuXG4gICAgICogRGlzYWJsZSBieSBzZXR0aW5nIHZhbHVlIHRvIDBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggbGluZSBoZWlnaHQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBUZXh0LCBpZTogd2hlbiB0cnlpbmcgdG8gdmVydGljYWxseSBhbGlnbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpcnR5IHN0YXRlIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkJpdG1hcFRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuQml0bWFwVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCaXRtYXBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCaXRtYXBUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRpbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC50aW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC50aW50ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCkgPyB2YWx1ZSA6IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdsZWZ0J1xuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGFsaWduOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQuYWxpZ247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LmFsaWduID0gdmFsdWUgfHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9udCBkZXNjcmlwdG9yIG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Rm9udH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBmb250OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWUuc2xpY2UoMSkuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gcGFyc2VJbnQodmFsdWVbMF0sIDEwKSA6IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicgPyB2YWx1ZS5zaXplIDogcGFyc2VJbnQodmFsdWUuc2l6ZSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGRhdGEgPSBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV07XG4gICAgdmFyIHBvcyA9IG5ldyBjb3JlLlBvaW50KCk7XG4gICAgdmFyIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgdmFyIGNoYXJzID0gW107XG4gICAgdmFyIGxhc3RMaW5lV2lkdGggPSAwO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBsaW5lV2lkdGhzID0gW107XG4gICAgdmFyIGxpbmUgPSAwO1xuICAgIHZhciBzY2FsZSA9IHRoaXMuX2ZvbnQuc2l6ZSAvIGRhdGEuc2l6ZTtcbiAgICB2YXIgbGFzdFNwYWNlID0gLTE7XG4gICAgdmFyIG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHQubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSB0aGlzLnRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgbGFzdFNwYWNlID0gLyhcXHMpLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpID8gaSA6IGxhc3RTcGFjZTtcblxuICAgICAgICBpZiAoLyg/OlxcclxcbnxcXHJ8XFxuKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RTcGFjZSAhPT0gLTEgJiYgdGhpcy5tYXhXaWR0aCA+IDAgJiYgcG9zLnggKiBzY2FsZSA+IHRoaXMubWF4V2lkdGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXMoY2hhcnMsIGxhc3RTcGFjZSwgaSAtIGxhc3RTcGFjZSk7XG4gICAgICAgICAgICBpID0gbGFzdFNwYWNlO1xuICAgICAgICAgICAgbGFzdFNwYWNlID0gLTE7XG5cbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFyRGF0YSA9IGRhdGEuY2hhcnNbY2hhckNvZGVdO1xuXG4gICAgICAgIGlmICghY2hhckRhdGEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZDaGFyQ29kZSAmJiBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJzLnB1c2goe3RleHR1cmU6Y2hhckRhdGEudGV4dHVyZSwgbGluZTogbGluZSwgY2hhckNvZGU6IGNoYXJDb2RlLCBwb3NpdGlvbjogbmV3IGNvcmUuUG9pbnQocG9zLnggKyBjaGFyRGF0YS54T2Zmc2V0LCBwb3MueSArIGNoYXJEYXRhLnlPZmZzZXQpfSk7XG4gICAgICAgIGxhc3RMaW5lV2lkdGggPSBwb3MueCArIChjaGFyRGF0YS50ZXh0dXJlLndpZHRoICsgY2hhckRhdGEueE9mZnNldCk7XG4gICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLnhBZHZhbmNlO1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgKGNoYXJEYXRhLnlPZmZzZXQgKyBjaGFyRGF0YS50ZXh0dXJlLmhlaWdodCkpO1xuICAgICAgICBwcmV2Q2hhckNvZGUgPSBjaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcblxuICAgIHZhciBsaW5lQWxpZ25PZmZzZXRzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IGxpbmU7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBhbGlnbk9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9mb250LmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZUFsaWduT2Zmc2V0cy5wdXNoKGFsaWduT2Zmc2V0KTtcbiAgICB9XG5cbiAgICB2YXIgbGVuQ2hhcnMgPSBjaGFycy5sZW5ndGg7XG4gICAgdmFyIHRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuQ2hhcnM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjID0gdGhpcy5fZ2x5cGhzW2ldOyAvLyBnZXQgdGhlIG5leHQgZ2x5cGggc3ByaXRlXG5cbiAgICAgICAgaWYgKGMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMudGV4dHVyZSA9IGNoYXJzW2ldLnRleHR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjID0gbmV3IGNvcmUuU3ByaXRlKGNoYXJzW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZ2x5cGhzLnB1c2goYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjLnBvc2l0aW9uLnggPSAoY2hhcnNbaV0ucG9zaXRpb24ueCArIGxpbmVBbGlnbk9mZnNldHNbY2hhcnNbaV0ubGluZV0pICogc2NhbGU7XG4gICAgICAgIGMucG9zaXRpb24ueSA9IGNoYXJzW2ldLnBvc2l0aW9uLnkgKiBzY2FsZTtcbiAgICAgICAgYy5zY2FsZS54ID0gYy5zY2FsZS55ID0gc2NhbGU7XG4gICAgICAgIGMudGludCA9IHRpbnQ7XG5cbiAgICAgICAgaWYgKCFjLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBjaGlsZHJlbi5cbiAgICBmb3IgKGkgPSBsZW5DaGFyczsgaSA8IHRoaXMuX2dseXBocy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5fZ2x5cGhzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHRXaWR0aCA9IG1heExpbmVXaWR0aCAqIHNjYWxlO1xuICAgIHRoaXMudGV4dEhlaWdodCA9IChwb3MueSArIGRhdGEubGluZUhlaWdodCkgKiBzY2FsZTtcbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSBtYXhMaW5lSGVpZ2h0ICogc2NhbGU7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvZiB0aGlzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0ZXh0IGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGdldExvY2FsQm91bmRzXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cblxuQml0bWFwVGV4dC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHJldHVybiBjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn07XG5cbkJpdG1hcFRleHQuZm9udHMgPSB7fTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgTW92aWVDbGlwIGlzIGEgc2ltcGxlIHdheSB0byBkaXNwbGF5IGFuIGFuaW1hdGlvbiBkZXBpY3RlZCBieSBhIGxpc3Qgb2YgdGV4dHVyZXMuXG4gKlxuICogYGBganNcbiAqIHZhciBhbGllbkltYWdlcyA9IFtcImltYWdlX3NlcXVlbmNlXzAxLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDIucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMy5wbmdcIixcImltYWdlX3NlcXVlbmNlXzA0LnBuZ1wiXTtcbiAqIHZhciB0ZXh0dXJlQXJyYXkgPSBbXTtcbiAqXG4gKiBmb3IgKHZhciBpPTA7IGkgPCA0OyBpKyspXG4gKiB7XG4gKiAgICAgIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZShhbGllbkltYWdlc1tpXSk7XG4gKiAgICAgIHRleHR1cmVBcnJheS5wdXNoKHRleHR1cmUpO1xuICogfTtcbiAqXG4gKiB2YXIgbWMgPSBuZXcgUElYSS5Nb3ZpZUNsaXAodGV4dHVyZUFycmF5KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmVzIHtQSVhJLlRleHR1cmVbXXxPYmplY3RbXX0gYW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuVGV4dHVyZX0gb3IgZnJhbWUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIGFuaW1hdGlvblxuICogQHBhcmFtIHRleHR1cmVzW10udGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUge0BsaW5rIFBJWEkuVGV4dHVyZX0gb2YgdGhlIGZyYW1lXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50aW1lIHtudW1iZXJ9IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWUgaW4gbXNcbiAqL1xuZnVuY3Rpb24gTW92aWVDbGlwKHRleHR1cmVzKVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZXNbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUgPyB0ZXh0dXJlc1swXSA6IHRleHR1cmVzWzBdLnRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVzID0gdGV4dHVyZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3BlZWQgdGhhdCB0aGUgTW92aWVDbGlwIHdpbGwgcGxheSBhdC4gSGlnaGVyIGlzIGZhc3RlciwgbG93ZXIgaXMgc2xvd2VyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIG1vdmllIGNsaXAgcmVwZWF0cyBhZnRlciBwbGF5aW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5sb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIE1vdmllQ2xpcCBmaW5pc2hlcyBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKi9cbiAgICB0aGlzLm9uQ29tcGxldGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRWxhcHNlZCB0aW1lIHNpbmNlIGFuaW1hdGlvbiBoYXMgYmVlbiBzdGFydGVkLCB1c2VkIGludGVybmFsbHkgdG8gZGlzcGxheSBjdXJyZW50IHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgTW92aWVDbGlwIGlzIGN1cnJlbnRseSBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTW92aWVDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcbk1vdmllQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNb3ZpZUNsaXA7XG5tb2R1bGUuZXhwb3J0cyA9IE1vdmllQ2xpcDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTW92aWVDbGlwLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIHRvdGFsRnJhbWVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBNb3ZpZUNsaXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbnVtYmVyIG9mIHRleHR1cmVzXG4gICAgICogYXNzaWduZWQgdG8gdGhlIE1vdmllQ2xpcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0b3RhbEZyYW1lczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgdGV4dHVyZXMgdXNlZCBmb3IgdGhpcyBNb3ZpZUNsaXBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVtdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICpcbiAgICAgKi9cbiAgICB0ZXh0dXJlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzLnB1c2godmFsdWVbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucy5wdXNoKHZhbHVlW2ldLnRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAqIFRoZSBNb3ZpZUNsaXBzIGN1cnJlbnQgZnJhbWUgaW5kZXhcbiAgICAqXG4gICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICogQHJlYWRvbmx5XG4gICAgKi9cbiAgICBjdXJyZW50RnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSkgJSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lIDwgMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUgKz0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGcmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBQbGF5cyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKHRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBnb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RvcCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRTdG9wID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG59O1xuXG4vKipcbiAqIEdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZSBhbmQgYmVnaW5zIHBsYXlpbmcgdGhlIE1vdmllQ2xpcFxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdGFydCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRQbGF5ID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLnBsYXkoKTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqIEBwcml2YXRlXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB2YXIgZWxhcHNlZCA9IHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZHVyYXRpb25zICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGxhZyA9IHRoaXMuX2N1cnJlbnRUaW1lICUgMSAqIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG5cbiAgICAgICAgbGFnICs9IGVsYXBzZWQgLyA2MCAqIDEwMDA7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA8IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lLS07XG4gICAgICAgICAgICBsYWcgKz0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWduID0gTWF0aC5zaWduKHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPj0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGFnIC09IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0gKiBzaWduO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gc2lnbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGxhZyAvIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGVsYXBzZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lIDwgMCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCgwKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VGltZSA+PSB0aGlzLl90ZXh0dXJlcy5sZW5ndGggJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AodGhpcy5fdGV4dHVyZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG5cbn07XG5cbi8qXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBkZXN0cm95cyBpdFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCApXG57XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGZyYW1lIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgZnJhbWVzIGlkcyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUZyYW1lcyA9IGZ1bmN0aW9uIChmcmFtZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tRnJhbWUoZnJhbWVzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBpbWFnZSB1cmxzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tSW1hZ2VzID0gZnVuY3Rpb24gKGltYWdlcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59OyIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIC8vIGEgc3ByaXRlIHVzZSBkZm9yIHJlbmRlcmluZyB0ZXh0dXJlcy4uXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICBDYW52YXNUaW50ZXIgPSByZXF1aXJlKCcuLi9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyk7XG5cbi8qKlxuICogQSB0aWxpbmcgc3ByaXRlIGlzIGEgZmFzdCB3YXkgb2YgcmVuZGVyaW5nIGEgdGlsaW5nIGltYWdlXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZSB7VGV4dHVyZX0gdGhlIHRleHR1cmUgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gVGlsaW5nU3ByaXRlKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsaW5nIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVNjYWxlID0gbmV3IGNvcmUuUG9pbnQoMSwxKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIG9mZnNldCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG5ldyBjb3JlLlBvaW50KDAsMCk7XG5cbiAgICAvLy8vLyBwcml2YXRlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2l0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBuZXcgY29yZS5UZXh0dXJlVXZzKCk7XG5cbiAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gbnVsbDtcblxuICAgIC8vVE9ETyBtb3ZlLi5cbiAgICB0aGlzLnNoYWRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKFxuXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVUcmFuc2Zvcm07JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnICAgY29vcmQgLT0gdVRyYW5zZm9ybS54eTsnLFxuICAgICAgICAnICAgY29vcmQgLz0gdVRyYW5zZm9ybS56dzsnLFxuICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGNvb3JkOycsXG5cbiAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjMiB1UGl4ZWxTaXplOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gbW9kKHZUZXh0dXJlQ29vcmQsIHVGcmFtZS56dyk7JyxcbiAgICAgICAgJyAgIGNvb3JkID0gY2xhbXAoY29vcmQsIHVQaXhlbFNpemUsIHVGcmFtZS56dyAtIHVQaXhlbFNpemUpOycsXG4gICAgICAgICcgICBjb29yZCArPSB1RnJhbWUueHk7JyxcblxuICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gIHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQpICogdkNvbG9yIDsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1RnJhbWU6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1VHJhbnNmb3JtOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVBpeGVsU2l6ZSA6IHsgdHlwZSA6ICcyZnYnLCB2YWx1ZTogWzEsIDFdfVxuICAgICAgICAgICAgfVxuICAgICAgKTtcbn1cblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWxpbmdTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbGluZ1Nwcml0ZTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWxpbmdTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGlsaW5nU3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIHR3ZWFrIG91ciB0ZXh0dXJlIHRlbXBvcmFyaWx5Li5cbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZSB8fCAhdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZW1wVXZzID0gdGV4dHVyZS5fdXZzLFxuICAgICAgICB0ZW1wV2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgdGVtcEhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCxcbiAgICAgICAgdHcgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoLFxuICAgICAgICB0aCA9IHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGhpcy5fdXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMF0gPSAxLjAvdHc7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVsxXSA9IDEuMC90aDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVswXSA9IHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzFdID0gdGVtcFV2cy55MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMl0gPSB0ZW1wVXZzLngxIC0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbM10gPSB0ZW1wVXZzLnkyIC0gdGVtcFV2cy55MDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMF0gPSAodGhpcy50aWxlUG9zaXRpb24ueCAlICh0ZW1wV2lkdGggKiB0aGlzLnRpbGVTY2FsZS54KSkgLyB0aGlzLl93aWR0aDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzFdID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgJSAodGVtcEhlaWdodCAqIHRoaXMudGlsZVNjYWxlLnkpKSAvIHRoaXMuX2hlaWdodDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzJdID0gKCB0dyAvIHRoaXMuX3dpZHRoICkgKiB0aGlzLnRpbGVTY2FsZS54O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbM10gPSAoIHRoIC8gdGhpcy5faGVpZ2h0ICkgKiB0aGlzLnRpbGVTY2FsZS55O1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRlbXBVdnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0ZW1wV2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGVtcEhlaWdodDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZiAoIXRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQsXG4gICAgICAgIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICBiYXNlVGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIG1vZFggPSAodGhpcy50aWxlUG9zaXRpb24ueCAvIHRoaXMudGlsZVNjYWxlLngpICUgdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIG1vZFkgPSAodGhpcy50aWxlUG9zaXRpb24ueSAvIHRoaXMudGlsZVNjYWxlLnkpICUgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuXG4gICAgLy8gY3JlYXRlIGEgbmljZSBzaGlueSBwYXR0ZXJuIVxuICAgIC8vIFRPRE8gdGhpcyBuZWVkcyB0byBiZSByZWZyZXNoZWQgaWYgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICBpZighdGhpcy5fY2FudmFzUGF0dGVybilcbiAgICB7XG4gICAgICAgIC8vIGN1dCBhbiBvYmplY3QgZnJvbSBhIHNwcml0ZXNoZWV0Li5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgY29yZS5DYW52YXNCdWZmZXIodGV4dHVyZS5fZnJhbWUud2lkdGgsIHRleHR1cmUuX2ZyYW1lLmhlaWdodCk7XG5cbiAgICAgICAgLy8gVGludCB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMudGludGVkVGV4dHVyZSwgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKGJhc2VUZXh0dXJlLnNvdXJjZSwgLXRleHR1cmUuX2ZyYW1lLngsIC10ZXh0dXJlLl9mcmFtZS55KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gdGVtcENhbnZhcy5jb250ZXh0LmNyZWF0ZVBhdHRlcm4oIHRlbXBDYW52YXMuY2FudmFzLCAncmVwZWF0JyApO1xuICAgIH1cblxuICAgIC8vIHNldCBjb250ZXh0IHN0YXRlLi5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvbik7XG5cbiAgICAvLyBUT0RPIC0gdGhpcyBzaG91bGQgYmUgcm9sbGVkIGludG8gdGhlIHNldFRyYW5zZm9ybSBhYm92ZS4uXG4gICAgY29udGV4dC5zY2FsZSh0aGlzLnRpbGVTY2FsZS54LHRoaXMudGlsZVNjYWxlLnkpO1xuXG4gICAgY29udGV4dC50cmFuc2xhdGUobW9kWCArICh0aGlzLmFuY2hvci54ICogLXRoaXMuX3dpZHRoICksXG4gICAgICAgICAgICAgICAgICAgICAgbW9kWSArICh0aGlzLmFuY2hvci55ICogLXRoaXMuX2hlaWdodCkpO1xuXG4gICAgLy8gY2hlY2sgYmxlbmQgbW9kZVxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vIGZpbGwgdGhlIHBhdHRlcm4hXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9jYW52YXNQYXR0ZXJuO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoLW1vZFgsXG4gICAgICAgICAgICAgICAgICAgICAtbW9kWSxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoIC8gdGhpcy50aWxlU2NhbGUueCxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCAvIHRoaXMudGlsZVNjYWxlLnkpO1xuXG5cbiAgICAvL1RPRE8gLSBwcmV0dHkgc3VyZSB0aGlzIGNhbiBiZSBkZWxldGVkLi4uXG4gICAgLy9jb250ZXh0LnRyYW5zbGF0ZSgtdGhpcy50aWxlUG9zaXRpb24ueCArICh0aGlzLmFuY2hvci54ICogdGhpcy5fd2lkdGgpLCAtdGhpcy50aWxlUG9zaXRpb24ueSArICh0aGlzLmFuY2hvci55ICogdGhpcy5faGVpZ2h0KSk7XG4gICAgLy9jb250ZXh0LnNjYWxlKDEgLyB0aGlzLnRpbGVTY2FsZS54LCAxIC8gdGhpcy50aWxlU2NhbGUueSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIHNwcml0ZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG5cbiAgICB2YXIgdzAgPSB3aWR0aCAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgIHZhciB3MSA9IHdpZHRoICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICB2YXIgaDAgPSBoZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICB2YXIgaDEgPSBoZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcblxuICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIG1pblgsXG4gICAgICAgIG1heFgsXG4gICAgICAgIG1pblksXG4gICAgICAgIG1heFk7XG5cbiAgICBtaW5YID0geDE7XG4gICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICBtaW5ZID0geTE7XG4gICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICBtYXhYID0geDE7XG4gICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICBtYXhZID0geTE7XG4gICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgYm91bmRzLnggPSBtaW5YO1xuICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcblxuICAgIHJldHVybiBib3VuZHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIGNoZWNrXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRpbGluZyBzcHJpdGVcbiAqXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWxlU2NhbGUgPSBudWxsO1xuICAgIHRoaXMuX3RpbGVTY2FsZU9mZnNldCA9IG51bGw7XG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHRpbGluZyBzcHJpdGUgdGhhdCB3aWxsIHVzZSBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZCx3aWR0aCxoZWlnaHQpXG57XG4gICAgdmFyIHRleHR1cmUgPSBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSAnICsgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUodGV4dHVyZSx3aWR0aCxoZWlnaHQpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCB3aWR0aCwgaGVpZ2h0LCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSksd2lkdGgsaGVpZ2h0KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gY29yZS5EaXNwbGF5T2JqZWN0LFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwID0gZmFsc2U7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSBudWxsO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsSGl0VGVzdCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxEZXN0cm95ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGlzIGRpc3BsYXkgb2JqZWN0IHRvIGJlIGNhY2hlZCBhcyBhIGJpdG1hcC5cbiAgICAgKiBUaGlzIGJhc2ljYWxseSB0YWtlcyBhIHNuYXAgc2hvdCBvZiB0aGUgZGlzcGxheSBvYmplY3QgYXMgaXQgaXMgYXQgdGhhdCBtb21lbnQuIEl0IGNhbiBwcm92aWRlIGEgcGVyZm9ybWFuY2UgYmVuZWZpdCBmb3IgY29tcGxleCBzdGF0aWMgZGlzcGxheU9iamVjdHMuXG4gICAgICogVG8gcmVtb3ZlIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnZmFsc2UnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgY2FjaGVBc0JpdG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZUFzQml0bWFwO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXAgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVBc0JpdG1hcCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IHRoaXMucmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSB0aGlzLnJlbmRlckNhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gdGhpcy51cGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHMgPSB0aGlzLmdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSA9IHRoaXMuZGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludCA9IHRoaXMuY29udGFpbnNQb2ludDtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX2NhY2hlQXNCaXRtYXBEZXN0cm95O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJvdW5kcyA9IHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fb3JpZ2luYWxEZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIFdlYkdMXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlciggdGhpcy5fY2FjaGVkU3ByaXRlICk7XG59O1xuXG4vKipcbiogUHJlcGFyZXMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZmlyc3Qgd2UgZmx1c2ggYW55dGhpbmcgbGVmdCBpbiB0aGUgcmVuZGVyZXIgKG90aGVyd2lzZSBpdCB3b3VsZCBnZXQgcmVuZGVyZWQgdG8gdGhlIGNhY2hlZCB0ZXh0dXJlKVxuICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuICAgIC8vdGhpcy5maWx0ZXJzPSBbXTtcbiAgICAvLyBuZXh0IHdlIGZpbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHVudHJhbnNmb3JtZWQgb2JqZWN0XG4gICAgLy8gdGhpcyBmdW5jdGlvbiBhbHNvIGNhbGxzIHVwZGF0ZXRyYW5zZm9ybSBvbiBhbGwgaXRzIGNoaWxkcmVuIGFzIHBhcnQgb2YgdGhlIG1lYXN1cmluZy4gVGhpcyBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgdHJhbnNmb3JtIGFnYWluIGluIHRoaXMgZnVuY3Rpb25cbiAgICAvLyBUT0RPIHBhc3MgYW4gb2JqZWN0IHRvIGNsb25lIHRvbz8gc2F2ZXMgaGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBvbmUgZWFjaCB0aW1lIVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuY2xvbmUoKTtcblxuICAgIC8vIGFkZCBzb21lIHBhZGRpbmchXG4gICAgaWYodGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5fZmlsdGVyc1swXS5wYWRkaW5nO1xuICAgICAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgICAgICBib3VuZHMueSAtPSBwYWRkaW5nO1xuXG4gICAgICAgIGJvdW5kcy53aWR0aCArPSBwYWRkaW5nICogMjtcbiAgICAgICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcbiAgICB9XG5cbiAgICAvLyBmb3Igbm93IHdlIGNhY2hlIHRoZSBjdXJyZW50IHJlbmRlclRhcmdldCB0aGF0IHRoZSB3ZWJHTCByZW5kZXJlciBpcyBjdXJyZW50bHkgdXNpbmcuXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBtb3JlIGVsZWdlbnQuLlxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0O1xuICAgIC8vIFdlIGFsc28gc3RvcmUgdGhlIGZpbHRlciBzdGFjayAtIEkgd2lsbCBkZWZpbml0ZWx5IGxvb2sgdG8gY2hhbmdlIGhvdyB0aGlzIHdvcmtzIGEgbGl0dGxlIGxhdGVyIGRvd24gdGhlIGxpbmUuXG4gICAgdmFyIHN0YWNrID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjaztcblxuICAgIC8vIHRoaXMgcmVuZGVyVGV4dHVyZSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlZCBEaXNwbGF5T2JqZWN0XG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cblxuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjYWNoZWRSZW5kZXJUYXJnZXQpO1xuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2sgPSBzdGFjaztcblxuICAgIHRoaXMucmVuZGVyV2ViR0wgICAgID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgICAgICAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyByZXN0b3JlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIGNhY2hlZCBzcHJpdGUgdG8gYXZvaWQgdGhlIG5hc3R5IGZsaWNrZXIuLlxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAvLyBtYXAgdGhlIGhpdCB0ZXN0Li5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBjYW52YXNcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzKCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbn07XG5cbi8vVE9ETyB0aGlzIGNhbiBiZSB0aGUgc2FtZSBhcyB0aGUgd2ViR0wgdmVyaXNvbi4uIHdpbGwgbmVlZCB0byBkbyBhIGxpdHRsZSB0d2Vha2luZyBmaXJzdCB0aG91Z2guLlxuLyoqXG4qIFByZXBhcmVzIHRoZSBDYW52YXMgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vZ2V0IGJvdW5kcyBhY3R1YWxseSB0cmFuc2Zvcm1zIHRoZSBvYmplY3QgZm9yIHVzIGFscmVhZHkhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5jb250ZXh0ID0gY2FjaGVkUmVuZGVyVGFyZ2V0O1xuXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBDYWxjdWxhdGVzIHRoZSBib3VuZHMgb2YgdGhlIGNhY2hlZCBzcHJpdGVcbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZ2V0Q2FjaGVkQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNwcml0ZS5nZXRCb3VuZHMoKTtcbn07XG5cbi8qKlxuKiBEZXN0cm95cyB0aGUgY2FjaGVkIHNwcml0ZS5cbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fdGV4dHVyZS5kZXN0cm95KCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwRGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jYWNoZUFzQml0bWFwID0gZmFsc2U7XG4gICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95KCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIG9iamVjdC5cbiAqXG4gKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICogQG1lbWJlciB7c3RyaW5nfVxuICovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZGlzcGxheSBvYmplY3QgaW4gdGhlIGNvbnRhaW5lclxuKlxuKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4qIEBwYXJhbSBuYW1lIHtzdHJpbmd9IGluc3RhbmNlIG5hbWVcbiogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuKi9cbmNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4qXG4qIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4qIEBwYXJhbSBwb2ludCB7UG9pbnR9IHRoZSBwb2ludCB0byB3cml0ZSB0aGUgZ2xvYmFsIHZhbHVlIHRvLiBJZiBudWxsIGEgbmV3IHBvaW50IHdpbGwgYmUgcmV0dXJuZWRcbiogQHJldHVybiB7UG9pbnR9XG4qL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRHbG9iYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb2ludClcbntcbiAgICBwb2ludCA9IHBvaW50IHx8IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICBpZih0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHBvaW50LnggPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICBwb2ludC55ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG9pbnQueCA9IHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMucG9zaXRpb24ueTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG5yZXF1aXJlKCcuL2NhY2hlQXNCaXRtYXAnKTtcbnJlcXVpcmUoJy4vZ2V0Q2hpbGRCeU5hbWUnKTtcbnJlcXVpcmUoJy4vZ2V0R2xvYmFsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZXh0cmFzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1vdmllQ2xpcDogICAgICByZXF1aXJlKCcuL01vdmllQ2xpcCcpLFxuICAgIFRpbGluZ1Nwcml0ZTogICByZXF1aXJlKCcuL1RpbGluZ1Nwcml0ZScpLFxuICAgIEJpdG1hcFRleHQ6ICAgICByZXF1aXJlKCcuL0JpdG1hcFRleHQnKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vLyBUT0RPIChjZW5nbGVyKSAtIFRoZSBZIGlzIGZsaXBwZWQgaW4gdGhpcyBzaGFkZXIgZm9yIHNvbWUgcmVhc29uLlxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBzaGFkZXIgOiBodHRwczovL3d3dy5zaGFkZXJ0b3kuY29tL3ZpZXcvbHNzR0RqIGJ5IEBtb3ZBWDEzaFxuICovXG5cbi8qKlxuICogQW4gQVNDSUkgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBBc2NpaUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgY2hhcmFjdGVyKGZsb2F0IG4sIHZlYzIgcClcXG57XFxuICAgIHAgPSBmbG9vcihwKnZlYzIoNC4wLCAtNC4wKSArIDIuNSk7XFxuICAgIGlmIChjbGFtcChwLngsIDAuMCwgNC4wKSA9PSBwLnggJiYgY2xhbXAocC55LCAwLjAsIDQuMCkgPT0gcC55KVxcbiAgICB7XFxuICAgICAgICBpZiAoaW50KG1vZChuL2V4cDIocC54ICsgNS4wKnAueSksIDIuMCkpID09IDEpIHJldHVybiAxLjA7XFxuICAgIH1cXG4gICAgcmV0dXJuIDAuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHk7XFxuXFxuICAgIHZlYzMgY29sID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBmbG9vciggdXYgLyBwaXhlbFNpemUgKSAqIHBpeGVsU2l6ZSAvIGRpbWVuc2lvbnMueHkpLnJnYjtcXG5cXG4gICAgZmxvYXQgZ3JheSA9IChjb2wuciArIGNvbC5nICsgY29sLmIpIC8gMy4wO1xcblxcbiAgICBmbG9hdCBuID0gIDY1NTM2LjA7ICAgICAgICAgICAgIC8vIC5cXG4gICAgaWYgKGdyYXkgPiAwLjIpIG4gPSA2NTYwMC4wOyAgICAvLyA6XFxuICAgIGlmIChncmF5ID4gMC4zKSBuID0gMzMyNzcyLjA7ICAgLy8gKlxcbiAgICBpZiAoZ3JheSA+IDAuNCkgbiA9IDE1MjU1MDg2LjA7IC8vIG9cXG4gICAgaWYgKGdyYXkgPiAwLjUpIG4gPSAyMzM4NTE2NC4wOyAvLyAmXFxuICAgIGlmIChncmF5ID4gMC42KSBuID0gMTUyNTIwMTQuMDsgLy8gOFxcbiAgICBpZiAoZ3JheSA+IDAuNykgbiA9IDEzMTk5NDUyLjA7IC8vIEBcXG4gICAgaWYgKGdyYXkgPiAwLjgpIG4gPSAxMTUxMjgxMC4wOyAvLyAjXFxuXFxuICAgIHZlYzIgcCA9IG1vZCggdXYgLyAoIHBpeGVsU2l6ZSAqIDAuNSApLCAyLjApIC0gdmVjMigxLjApO1xcbiAgICBjb2wgPSBjb2wgKiBjaGFyYWN0ZXIobiwgcCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sLCAxLjApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDggfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQXNjaWlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Bc2NpaUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc2NpaUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQXNjaWlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFzY2lpRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBzaXplIHVzZWQgYnkgdGhlIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkFzY2lpRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmxvb21GaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmxvb21GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xufVxuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsb29tRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb29tRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbG9vbUZpbHRlcjtcblxuQmxvb21GaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLlNDUkVFTik7XG5cbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvb21GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuXG4vKipcbiAqIFRoZSBCbHVyRGlyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvd2FyZCBhIGRpcmVjdGlvbiB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWFxuICogQHBhcmFtIHtudW1iZXJ9IGRpcllcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckRpckZpbHRlcihkaXJYLCBkaXJZKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBmbG9hdCBkaXJYO1xcbnVuaWZvcm0gZmxvYXQgZGlyWTtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1swXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDEyICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDEyICogc3RyZW5ndGgpICogZGlyWSApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkgKiAwLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkgKiAwLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkgKiAwLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pICogMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBkaXJYOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJYIHx8IDAgfSxcbiAgICAgICAgICAgIGRpclk6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclkgfHwgMCB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclggPSBkaXJYIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclkgPSBkaXJZIHx8IDA7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckRpckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckRpckZpbHRlcjtcblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKSB7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmICh0aGlzLnBhc3NlcyA9PT0gMSkge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0yOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gKHRoaXMucGFzc2VzKyhpKjIpKSAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckRpckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJYO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJYLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsdXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcbn1cblxuQmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckZpbHRlcjtcblxuQmx1ckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcGFzc2VzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzID0gdGhpcy5ibHVyWUZpbHRlci5wYXNzZXMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWEZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1clhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1clhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1clhGaWx0ZXI7XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1clhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSAgTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllGaWx0ZXI7XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSBNYXRoLmFicyh0aGlzLnN0cmVuZ3RoKSAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgU21hcnQgQmx1ciBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNtYXJ0Qmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAqIHBlcmNlbnQpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICBkZWx0YTogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjEsIHk6IDAuMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTbWFydEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNtYXJ0Qmx1ckZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDV4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogYGBganNcbiAqICB2YXIgY29sb3JNYXRyaXggPSBuZXcgUElYSS5Db2xvck1hdHJpeEZpbHRlcigpO1xuICogIGNvbnRhaW5lci5maWx0ZXJzID0gW2NvbG9yTWF0cml4XTtcbiAqICBjb2xvck1hdHJpeC5jb250cmFzdCgyKTtcbiAqIGBgYFxuICogQGF1dGhvciBDbMOpbWVudCBDaGVuZWJhdWx0IDxjbGVtZW50QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvck1hdHJpeEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBtWzI1XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuXFxuICAgIHZlYzQgYyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yID0gKG1bMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gbVs0XTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLmcgPSAobVs1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSBtWzldO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmIgPSAobVsxMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gbVsxNF07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYSA9IChtWzE1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSBtWzE5XTtcXG5cXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJzFmdicsIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yTWF0cml4RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvck1hdHJpeEZpbHRlcjtcblxuXG4vKipcbiAqIFRyYW5zZm9ybXMgY3VycmVudCBtYXRyaXggYW5kIHNldCB0aGUgbmV3IG9uZVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gaWYgdHJ1ZSwgY3VycmVudCBtYXRyaXggYW5kIG1hdHJpeCBhcmUgbXVsdGlwbGllZC4gSWYgZmFsc2UsIGp1c3Qgc2V0IHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIEBwYXJhbSBtYXRyaXhcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9sb2FkTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgbXVsdGlwbHkpXG57XG4gICAgbXVsdGlwbHkgPSAhIW11bHRpcGx5O1xuXG4gICAgdmFyIG5ld01hdHJpeCA9IG1hdHJpeDtcblxuICAgIGlmIChtdWx0aXBseSkge1xuICAgICAgICB0aGlzLl9tdWx0aXBseShuZXdNYXRyaXgsIHRoaXMudW5pZm9ybXMubS52YWx1ZSwgbWF0cml4KTtcbiAgICAgICAgbmV3TWF0cml4ID0gdGhpcy5fY29sb3JNYXRyaXgobmV3TWF0cml4KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBtYXRyaXhcbiAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSBuZXdNYXRyaXg7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDUnc1xuICpcbiAqIEBwYXJhbSBvdXQge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSBhIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0gYiB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIG91dCB7bnVtYmVyW119IChtYXQgNXg0KVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYilcbntcblxuICAgIC8vIFJlZCBDaGFubmVsXG4gICAgb3V0WzBdID0gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYls1XSkgKyAoYVsyXSAqIGJbMTBdKSArIChhWzNdICogYlsxNV0pO1xuICAgIG91dFsxXSA9IChhWzBdICogYlsxXSkgKyAoYVsxXSAqIGJbNl0pICsgKGFbMl0gKiBiWzExXSkgKyAoYVszXSAqIGJbMTZdKTtcbiAgICBvdXRbMl0gPSAoYVswXSAqIGJbMl0pICsgKGFbMV0gKiBiWzddKSArIChhWzJdICogYlsxMl0pICsgKGFbM10gKiBiWzE3XSk7XG4gICAgb3V0WzNdID0gKGFbMF0gKiBiWzNdKSArIChhWzFdICogYls4XSkgKyAoYVsyXSAqIGJbMTNdKSArIChhWzNdICogYlsxOF0pO1xuICAgIG91dFs0XSA9IChhWzBdICogYls0XSkgKyAoYVsxXSAqIGJbOV0pICsgKGFbMl0gKiBiWzE0XSkgKyAoYVszXSAqIGJbMTldKTtcblxuICAgIC8vIEdyZWVuIENoYW5uZWxcbiAgICBvdXRbNV0gPSAoYVs1XSAqIGJbMF0pICsgKGFbNl0gKiBiWzVdKSArIChhWzddICogYlsxMF0pICsgKGFbOF0gKiBiWzE1XSk7XG4gICAgb3V0WzZdID0gKGFbNV0gKiBiWzFdKSArIChhWzZdICogYls2XSkgKyAoYVs3XSAqIGJbMTFdKSArIChhWzhdICogYlsxNl0pO1xuICAgIG91dFs3XSA9IChhWzVdICogYlsyXSkgKyAoYVs2XSAqIGJbN10pICsgKGFbN10gKiBiWzEyXSkgKyAoYVs4XSAqIGJbMTddKTtcbiAgICBvdXRbOF0gPSAoYVs1XSAqIGJbM10pICsgKGFbNl0gKiBiWzhdKSArIChhWzddICogYlsxM10pICsgKGFbOF0gKiBiWzE4XSk7XG4gICAgb3V0WzldID0gKGFbNV0gKiBiWzRdKSArIChhWzZdICogYls5XSkgKyAoYVs3XSAqIGJbMTRdKSArIChhWzhdICogYlsxOV0pO1xuXG4gICAgLy8gQmx1ZSBDaGFubmVsXG4gICAgb3V0WzEwXSA9IChhWzEwXSAqIGJbMF0pICsgKGFbMTFdICogYls1XSkgKyAoYVsxMl0gKiBiWzEwXSkgKyAoYVsxM10gKiBiWzE1XSk7XG4gICAgb3V0WzExXSA9IChhWzEwXSAqIGJbMV0pICsgKGFbMTFdICogYls2XSkgKyAoYVsxMl0gKiBiWzExXSkgKyAoYVsxM10gKiBiWzE2XSk7XG4gICAgb3V0WzEyXSA9IChhWzEwXSAqIGJbMl0pICsgKGFbMTFdICogYls3XSkgKyAoYVsxMl0gKiBiWzEyXSkgKyAoYVsxM10gKiBiWzE3XSk7XG4gICAgb3V0WzEzXSA9IChhWzEwXSAqIGJbM10pICsgKGFbMTFdICogYls4XSkgKyAoYVsxMl0gKiBiWzEzXSkgKyAoYVsxM10gKiBiWzE4XSk7XG4gICAgb3V0WzE0XSA9IChhWzEwXSAqIGJbNF0pICsgKGFbMTFdICogYls5XSkgKyAoYVsxMl0gKiBiWzE0XSkgKyAoYVsxM10gKiBiWzE5XSk7XG5cbiAgICAvLyBBbHBoYSBDaGFubmVsXG4gICAgb3V0WzE1XSA9IChhWzE1XSAqIGJbMF0pICsgKGFbMTZdICogYls1XSkgKyAoYVsxN10gKiBiWzEwXSkgKyAoYVsxOF0gKiBiWzE1XSk7XG4gICAgb3V0WzE2XSA9IChhWzE1XSAqIGJbMV0pICsgKGFbMTZdICogYls2XSkgKyAoYVsxN10gKiBiWzExXSkgKyAoYVsxOF0gKiBiWzE2XSk7XG4gICAgb3V0WzE3XSA9IChhWzE1XSAqIGJbMl0pICsgKGFbMTZdICogYls3XSkgKyAoYVsxN10gKiBiWzEyXSkgKyAoYVsxOF0gKiBiWzE3XSk7XG4gICAgb3V0WzE4XSA9IChhWzE1XSAqIGJbM10pICsgKGFbMTZdICogYls4XSkgKyAoYVsxN10gKiBiWzEzXSkgKyAoYVsxOF0gKiBiWzE4XSk7XG4gICAgb3V0WzE5XSA9IChhWzE1XSAqIGJbNF0pICsgKGFbMTZdICogYls5XSkgKyAoYVsxN10gKiBiWzE0XSkgKyAoYVsxOF0gKiBiWzE5XSk7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHJldHVybiBtIHtudW1iZXJbXX0gKG1hdCA1eDQpIHdpdGggYWxsIHZhbHVlcyBiZXR3ZWVuIDAtMVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2NvbG9yTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICAvLyBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gICAgdmFyIG0gPSBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCk7XG4gICAgbVs0XSAvPSAyNTU7XG4gICAgbVs5XSAvPSAyNTU7XG4gICAgbVsxNF0gLz0gMjU1O1xuICAgIG1bMTldIC89IDI1NTtcblxuICAgIHJldHVybiBtO1xufTtcblxuLyoqXG4gKiBBZGp1c3RzIGJyaWdodG5lc3NcbiAqXG4gKiBAcGFyYW0gYiB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgYnJpZ3RobmVzcyAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icmlnaHRuZXNzID0gZnVuY3Rpb24gKGIsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGIsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIGIsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIGIsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXRyaWNlcyBpbiBncmV5IHNjYWxlc1xuICpcbiAqIEBwYXJhbSBzY2FsZSB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgZ3JleSAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG4vL0FtZXJpY2FuaXplZCBhbGlhc1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyYXlzY2FsZSA9IENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGU7XG5cbi8qKlxuICogU2V0IHRoZSBibGFjayBhbmQgd2hpdGUgbWF0cmljZVxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJsYWNrQW5kV2hpdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGh1ZSBwcm9wZXJ0eSBvZiB0aGUgY29sb3JcbiAqXG4gKiBAcGFyYW0gcm90YXRpb24ge251bWJlcn0gaW4gZGVncmVlc1xuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmh1ZSA9IGZ1bmN0aW9uIChyb3RhdGlvbiwgbXVsdGlwbHkpXG57XG4gICAgcm90YXRpb24gPSAocm90YXRpb24gfHwgMCkgLyAxODAgKiBNYXRoLlBJO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyhyb3RhdGlvbiksXG4gICAgICAgIHNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcblxuICAgIC8vIGx1bWluYW5jZVJlZCwgbHVtaW5hbmNlR3JlZW4sIGx1bWluYW5jZUJsdWVcbiAgICB2YXIgbHVtUiA9IDAuMjEzLCAvLyBvciAwLjMwODZcbiAgICAgICAgbHVtRyA9IDAuNzE1LCAvLyBvciAwLjYwOTRcbiAgICAgICAgbHVtQiA9IDAuMDcyOyAvLyBvciAwLjA4MjBcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoMSAtIGx1bVIpICsgc2luICogKC1sdW1SKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAoLWx1bUcpLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgxIC0gbHVtQiksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKDAuMTQzKSwgbHVtRyArIGNvcyAqICgxIC0gbHVtRykgKyBzaW4gKiAoMC4xNDApLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgtMC4yODMpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgtKDEgLSBsdW1SKSksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKGx1bUcpLCBsdW1CICsgY29zICogKDEgLSBsdW1CKSArIHNpbiAqIChsdW1CKSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKipcbiAqIFNldCB0aGUgY29udHJhc3QgbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGRhcmsgYW5kIGJyaWdodFxuICogSW5jcmVhc2UgY29udHJhc3QgOiBzaGFkb3dzIGRhcmtlciBhbmQgaGlnaGxpZ2h0cyBicmlnaHRlclxuICogRGVjcmVhc2UgY29udHJhc3QgOiBicmluZyB0aGUgc2hhZG93cyB1cCBhbmQgdGhlIGhpZ2hsaWdodHMgZG93blxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdmFsdWUgb2YgdGhlIGNvbnRyYXN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29udHJhc3QgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgdiA9IChhbW91bnQgfHwgMCkgKyAxO1xuICAgIHZhciBvID0gLTEyOCAqICh2IC0gMSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB2LCAwLCAwLCAwLCBvLFxuICAgICAgICAwLCB2LCAwLCAwLCBvLFxuICAgICAgICAwLCAwLCB2LCAwLCBvLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc2F0dXJhdGlvbiBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gY29sb3JzXG4gKiBJbmNyZWFzZSBzYXR1cmF0aW9uIDogaW5jcmVhc2UgY29udHJhc3QsIGJyaWdodG5lc3MsIGFuZCBzaGFycG5lc3NcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgeCA9IChhbW91bnQgfHwgMCkgKiAyIC8gMyArIDE7XG4gICAgdmFyIHkgPSAoKHggLSAxKSAqIC0wLjUpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgeCwgeSwgeSwgMCwgMCxcbiAgICAgICAgeSwgeCwgeSwgMCwgMCxcbiAgICAgICAgeSwgeSwgeCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBEZXNhdHVyYXRlIGltYWdlIChyZW1vdmUgY29sb3IpXG4gKlxuICogQ2FsbCB0aGUgc2F0dXJhdGUgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHRoaXMuc2F0dXJhdGUoLTEpO1xufTtcblxuLyoqXG4gKiBOZWdhdGl2ZSBpbWFnZSAoaW52ZXJzZSBvZiBjbGFzc2ljIHJnYiBtYXRyaXgpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5lZ2F0aXZlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDEsIDEsIDAsIDAsXG4gICAgICAgIDEsIDAsIDEsIDAsIDAsXG4gICAgICAgIDEsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2VwaWEgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2VwaWEgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zOTMsIDAuNzY4OTk5OSwgMC4xODg5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4zNDksIDAuNjg1OTk5OSwgMC4xNjc5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4yNzIsIDAuNTMzOTk5OSwgMC4xMzA5OTk5OSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciBtb3Rpb24gcGljdHVyZSBwcm9jZXNzIGludmVudGVkIGluIDE5MTYgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRlY2huaWNvbG9yID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuOTEyNTI3Nzg5MTQ1NjA4MywgLTAuODU0NTM0NDk3Njk1MTY0NSwgLTAuMDkxNTU1MDg0ODI3NTU1ODUsIDAsIDExLjc5MzYwMzQzNDM3NzMzNyxcbiAgICAgICAgLTAuMzA4NzgzMzM4NTkyODA5NywgMS43NjU4OTA4NTU1NDU4NDI4LCAtMC4xMDYwMTc0MzA3NDcyMjI0NSwgMCwgLTcwLjM1MjA1MTYxNDYxMzk4LFxuICAgICAgICAtMC4yMzExMDMzNzc1NDg2MTYsIC0wLjc1MDE4OTkxOTc0NDAyMTIsIDEuODQ3NTk3ODE2MTA4MTg5LCAwLCAzMC45NTA5NDA4Njk0OTExMzgsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogUG9sYXJvaWQgZmlsdGVyXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnBvbGFyb2lkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuNDM4LCAtMC4wNjIsIC0wLjA2MiwgMCwgMCxcbiAgICAgICAgLTAuMTIyLCAxLjM3OCwgLTAuMTIyLCAwLCAwLFxuICAgICAgICAtMC4wMTYsIC0wLjAxNiwgMS40ODMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRmlsdGVyIHdobyB0cmFuc2Zvcm1zIDogUmVkIC0+IEJsdWUgYW5kIEJsdWUgLT4gUmVkXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRvQkdSID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgcmV2ZXJzYWwgZmlsbSBpbnRyb2R1Y2VkIGJ5IEVhc3RtYW4gS29kYWsgaW4gMTkzNS4gKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmtvZGFjaHJvbWUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS4xMjg1NTgyMzk2NTkzNTI1LCAtMC4zOTY3MzgyMjgzNjAxMzQ4LCAtMC4wMzk5MjU1OTE3MjkyMTc5MywgMCwgNjMuNzI5NTg3NjIxOTY1MDIsXG4gICAgICAgIC0wLjE2NDA0MzM5OTYyMjQ0NjE2LCAxLjA4MzUyNTE1NjYyOTEzMDQsIC0wLjA1NDk4ODA1MTE1NjMzMTMyLCAwLCAyNC43MzI0MDc4OTY3MDYyMDMsXG4gICAgICAgIC0wLjE2Nzg2MDEwNzA2MTU1NzYzLCAtMC41NjAzNDE2Mjc3Njk1MjQ4LCAxLjYwMTQ4NTA3NjE5NjQ5NDMsIDAsIDM1LjYyOTgyODA3NDYwOTQ2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEJyb3duIGRlbGljaW91cyBicm93bmkgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icm93bmkgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC41OTk3MDIzNDk4MTU5NzE1LCAwLjM0NTUzMjQzMDQ4MzkxMjYzLCAtMC4yNzA4Mjk4Njc0NTM4MDQyLCAwLCA0Ny40MzE5Mjg1NTYwMDg3MyxcbiAgICAgICAgLTAuMDM3NzAzMjQ5ODM3NzgzMTU3LCAwLjg2MDk1Nzc1ODc5OTI2NDEsIDAuMTUwNTk1NTIzODg0NTk5MTMsIDAsIC0zNi45Njg0MTQ5ODMxOTEyNyxcbiAgICAgICAgMC4yNDExMzYzNTEyODE1MzMzNSwgLTAuMDc0NDEwMzc5MDg0MjI0OTIsIDAuNDQ5NzIxODIwNjQ4NzcxNTMsIDAsIC03LjU2MjA3NTI3NzU5MTI4MyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFZpbnRhZ2UgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS52aW50YWdlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNjI3OTM0NTYzNTYwNTk5NCwgMC4zMjAyMTgzNDIwODE5MzY3LCAtMC4wMzk2NTQwODIxMTMxMjQ1MywgMCwgOS42NTEyODU4MzUyOTQxMjMsXG4gICAgICAgIDAuMDI1NzgzOTc3MDQ4MDg4NjgsIDAuNjQ0MTE4ODY0NDM3NDc3MSwgMC4wMzI1OTEyNzYxNjE0OTI5NCwgMCwgNy40NjI4MjkxNzY0NzA1OTEsXG4gICAgICAgIDAuMDQ2NjA1NTU1Njc4MjcxOSwgLTAuMDg1MTIzMjk4NzI0Nzg5MSwgMC41MjQxNjQ4MDE4NzAwNDY1LCAwLCA1LjE1OTE5MDU4ODIzNTI5NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGtpbmQgb2YgZ3JhZGllbnQgbWFwLCBidXQgZnVubnkgdG8gcGxheSB3aXRoIVxuICpcbiAqIEBwYXJhbSBkZXNhdHVyYXRpb24ge251bWJlcn1cbiAqIEBwYXJhbSB0b25lZCB7bnVtYmVyfVxuICogQHBhcmFtIGxpZ2h0Q29sb3Ige3N0cmluZ30gKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKiBAcGFyYW0gZGFya0NvbG9yIHtzdHJpbmd9ICAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29sb3JUb25lID0gZnVuY3Rpb24gKGRlc2F0dXJhdGlvbiwgdG9uZWQsIGxpZ2h0Q29sb3IsIGRhcmtDb2xvciwgbXVsdGlwbHkpXG57XG4gICAgZGVzYXR1cmF0aW9uID0gZGVzYXR1cmF0aW9uIHx8IDAuMjtcbiAgICB0b25lZCA9IHRvbmVkIHx8IDAuMTU7XG4gICAgbGlnaHRDb2xvciA9IGxpZ2h0Q29sb3IgfHwgMHhGRkU1ODA7XG4gICAgZGFya0NvbG9yID0gZGFya0NvbG9yIHx8IDB4MzM4MDAwO1xuXG4gICAgdmFyIGxSID0gKChsaWdodENvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsRyA9ICgobGlnaHRDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsQiA9IChsaWdodENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgZFIgPSAoKGRhcmtDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEcgPSAoKGRhcmtDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkQiA9IChkYXJrQ29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC41OSwgMC4xMSwgMCwgMCxcbiAgICAgICAgbFIsIGxHLCBsQiwgZGVzYXR1cmF0aW9uLCAwLFxuICAgICAgICBkUiwgZEcsIGRCLCB0b25lZCwgMCxcbiAgICAgICAgbFIgLSBkUiwgbEcgLSBkRywgbEIgLSBkQiwgMCwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIE5pZ2h0IGVmZmVjdFxuICpcbiAqIEBwYXJhbSBpbnRlbnNpdHkge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uaWdodCA9IGZ1bmN0aW9uIChpbnRlbnNpdHksIG11bHRpcGx5KVxue1xuICAgIGludGVuc2l0eSA9IGludGVuc2l0eSB8fCAwLjE7XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgaW50ZW5zaXR5ICogKCAtMi4wKSwgLWludGVuc2l0eSwgMCwgMCwgMCxcbiAgICAgICAgLWludGVuc2l0eSwgMCwgaW50ZW5zaXR5LCAwLCAwLFxuICAgICAgICAwLCBpbnRlbnNpdHksIGludGVuc2l0eSAqIDIuMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKlxuICogUHJlZGF0b3IgZWZmZWN0XG4gKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgYSBuZXcgaW5kZXBlbnQgb25lXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBob3cgbXVjaCB0aGUgcHJlZGF0b3IgZmVlbHMgaGlzIGZ1dHVyZSB2aWN0aW1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wcmVkYXRvciA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDExLjIyNDEzMDYzMDQ5MzE2NCAqIGFtb3VudCwgLTQuNzk0NDg2OTk5NTExNzE5ICogYW1vdW50LCAtMi44NzQ2MTE4NTQ1NTMyMjI3ICogYW1vdW50LCAwICogYW1vdW50LCAwLjQwMzQyNDM4MjIwOTc3NzgzICogYW1vdW50LFxuICAgICAgICAtMy42MzMwNjk3NTM2NDY4NTA2ICogYW1vdW50LCA5LjE5MzE1NzE5NjA0NDkyMiAqIGFtb3VudCwgLTIuOTUxODEwODM2NzkxOTkyICogYW1vdW50LCAwICogYW1vdW50LCAtMS4zMTYxMzUwNDg4NjYyNzIgKiBhbW91bnQsXG4gICAgICAgIC0zLjIxODQxOTc5MDI2Nzk0NDMgKiBhbW91bnQsIC00LjIzNzUwMzA1MTc1NzgxMjUgKiBhbW91bnQsIDcuNDc2NDQ4MDU5MDgyMDMxICogYW1vdW50LCAwICogYW1vdW50LCAwLjgwNDQ0NTkyMjM3NDcyNTMgKiBhbW91bnQsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBMU0QgZWZmZWN0XG4gKlxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBIb3cgY3JhenkgaXMgeW91ciBlZmZlY3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5sc2QgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMiwgLTAuNCwgMC41LCAwLCAwLFxuICAgICAgICAtMC41LCAyLCAtMC40LCAwLCAwLFxuICAgICAgICAtMC40LCAtMC41LCAzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgb25lXG4gKlxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIGZhbHNlKTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF0cml4IG9mIHRoZSBjb2xvciBtYXRyaXggZmlsdGVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yTWF0cml4RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IFsxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwXVxuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm0udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBsb3dlcnMgdGhlIGNvbG9yIGRlcHRoIG9mIHlvdXIgaW1hZ2UgYnkgdGhlIGdpdmVuIGFtb3VudCwgcHJvZHVjaW5nIGFuIGltYWdlIHdpdGggYSBzbWFsbGVyIHBhbGV0dGUuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yU3RlcEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzdGVwO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGNvbG9yID0gZmxvb3IoY29sb3IgKiBzdGVwKSAvIHN0ZXA7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXA6IHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yU3RlcEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JTdGVwRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBzdGVwcyB0byByZWR1Y2UgdGhlIHBhbGV0dGUgYnkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvclN0ZXBGaWx0ZXIjXG4gICAgICovXG4gICAgc3RlcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbnZvbHV0aW9uRmlsdGVyIGNsYXNzIGFwcGxpZXMgYSBtYXRyaXggY29udm9sdXRpb24gZmlsdGVyIGVmZmVjdC5cbiAqIEEgY29udm9sdXRpb24gY29tYmluZXMgcGl4ZWxzIGluIHRoZSBpbnB1dCBpbWFnZSB3aXRoIG5laWdoYm9yaW5nIHBpeGVscyB0byBwcm9kdWNlIGEgbmV3IGltYWdlLlxuICogQSB3aWRlIHZhcmlldHkgb2YgaW1hZ2UgZWZmZWN0cyBjYW4gYmUgYWNoaWV2ZWQgdGhyb3VnaCBjb252b2x1dGlvbnMsIGluY2x1ZGluZyBibHVycmluZywgZWRnZVxuICogZGV0ZWN0aW9uLCBzaGFycGVuaW5nLCBlbWJvc3NpbmcsIGFuZCBiZXZlbGluZy4gVGhlIG1hdHJpeCBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIFNlZSBodHRwOi8vZG9jcy5naW1wLm9yZy9lbi9wbHVnLWluLWNvbnZtYXRyaXguaHRtbCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICovXG5mdW5jdGlvbiBDb252b2x1dGlvbkZpbHRlcihtYXRyaXgsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyBtZWRpdW1wIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xcbnVuaWZvcm0gZmxvYXQgbWF0cml4WzldO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IGMxMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAtIHRleGVsU2l6ZSk7IC8vIHRvcCBsZWZ0XFxuICAgdmVjNCBjMTIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgY2VudGVyXFxuICAgdmVjNCBjMTMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCByaWdodFxcblxcbiAgIHZlYzQgYzIxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIGxlZnRcXG4gICB2ZWM0IGMyMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7IC8vIG1pZCBjZW50ZXJcXG4gICB2ZWM0IGMyMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCByaWdodFxcblxcbiAgIHZlYzQgYzMxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gbGVmdFxcbiAgIHZlYzQgYzMyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGNlbnRlclxcbiAgIHZlYzQgYzMzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgdGV4ZWxTaXplKTsgLy8gYm90dG9tIHJpZ2h0XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID1cXG4gICAgICAgYzExICogbWF0cml4WzBdICsgYzEyICogbWF0cml4WzFdICsgYzEzICogbWF0cml4WzJdICtcXG4gICAgICAgYzIxICogbWF0cml4WzNdICsgYzIyICogbWF0cml4WzRdICsgYzIzICogbWF0cml4WzVdICtcXG4gICAgICAgYzMxICogbWF0cml4WzZdICsgYzMyICogbWF0cml4WzddICsgYzMzICogbWF0cml4WzhdO1xcblxcbiAgIGdsX0ZyYWdDb2xvci5hID0gYzIyLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWF0cml4OiAgICAgeyB0eXBlOiAnMWZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KSB9LFxuICAgICAgICAgICAgdGV4ZWxTaXplOiAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxIC8gd2lkdGgsIHk6IDEgLyBoZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnZvbHV0aW9uRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb252b2x1dGlvbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnkgPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIENyb3NzIEhhdGNoIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENyb3NzSGF0Y2hGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZmxvYXQgbHVtID0gbGVuZ3RoKHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZC54eSkucmdiKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDEuMCwgMS4wLCAxLjApO1xcblxcbiAgICBpZiAobHVtIDwgMS4wMClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjc1KVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNTApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC4zKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXCJcbiAgICApO1xufVxuXG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDcm9zc0hhdGNoRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDcm9zc0hhdGNoRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIERpc3BsYWNlbWVudEZpbHRlciBjbGFzcyB1c2VzIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHRleHR1cmUgKGNhbGxlZCB0aGUgZGlzcGxhY2VtZW50IG1hcCkgdG8gcGVyZm9ybSBhIGRpc3BsYWNlbWVudCBvZiBhbiBvYmplY3QuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGZpbHRlciB0byBhcHBseSBhbGwgbWFub3Igb2YgY3Jhenkgd2FycGluZyBlZmZlY3RzXG4gKiBDdXJyZW50bHkgdGhlIHIgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHggYW5kIHRoZSBnIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIChtYWtlIHN1cmUgaXRzIGFkZGVkIHRvIHRoZSBzY2VuZSEpXG4gKi9cbmZ1bmN0aW9uIERpc3BsYWNlbWVudEZpbHRlcihzcHJpdGUsIHNjYWxlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG4gICAgc3ByaXRlLnJlbmRlcmFibGUgPSBmYWxzZTtcblxuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZNYXBDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcFNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgbWFwID0gIHRleHR1cmUyRChtYXBTYW1wbGVyLCB2TWFwQ29vcmQpO1xcblxcbiAgIG1hcCAtPSAwLjU7XFxuICAgbWFwLnh5ICo9IHNjYWxlO1xcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyBtYXAueCwgdlRleHR1cmVDb29yZC55ICsgbWFwLnkpKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcFNhbXBsZXI6ICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLnRleHR1cmUgfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9LFxuICAgICAgICAgICAgc2NhbGU6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSwgeTogMSB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcblxuICAgIGlmIChzY2FsZSA9PT0gbnVsbCB8fCBzY2FsZSA9PT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgICAgc2NhbGUgPSAyMDtcbiAgICB9XG5cbiAgICB0aGlzLnNjYWxlID0gbmV3IGNvcmUuUG9pbnQoc2NhbGUsIHNjYWxlKTtcbn1cblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYWNlbWVudEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxhY2VtZW50RmlsdGVyO1xuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS54ID0gdGhpcy5zY2FsZS54ICogKDEvaW5wdXQuZnJhbWUud2lkdGgpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueSA9IHRoaXMuc2NhbGUueSAqICgxL2lucHV0LmZyYW1lLmhlaWdodCk7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gTXVzdCBiZSBwb3dlciBvZiAyIHNpemVkIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5EaXNwbGFjZW1lbnRGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3ZlcyBodHRwOi8vbWF0Z3JvdmVzLmNvbS8gQERvb3JtYXQyM1xuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9mdW4vZG90c2NyZWVuLmpzXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgZG90c2NyZWVuIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0byBiZSBtYWRlIG91dCBvZlxuICogYmxhY2sgYW5kIHdoaXRlIGhhbGZ0b25lIGRvdHMgbGlrZSBhbiBvbGQgcHJpbnRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRG90U2NyZWVuRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG5cXG5mbG9hdCBwYXR0ZXJuKClcXG57XFxuICAgZmxvYXQgcyA9IHNpbihhbmdsZSksIGMgPSBjb3MoYW5nbGUpO1xcbiAgIHZlYzIgdGV4ID0gdlRleHR1cmVDb29yZCAqIGRpbWVuc2lvbnMueHk7XFxuICAgdmVjMiBwb2ludCA9IHZlYzIoXFxuICAgICAgIGMgKiB0ZXgueCAtIHMgKiB0ZXgueSxcXG4gICAgICAgcyAqIHRleC54ICsgYyAqIHRleC55XFxuICAgKSAqIHNjYWxlO1xcbiAgIHJldHVybiAoc2luKHBvaW50LngpICogc2luKHBvaW50LnkpKSAqIDQuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhhdmVyYWdlICogMTAuMCAtIDUuMCArIHBhdHRlcm4oKSksIGNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNjYWxlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvdFNjcmVlbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRG90U2NyZWVuRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIHNjYWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHJhZGl1cyBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWVRpbnRGaWx0ZXIgYXBwbGllcyBhIHZlcnRpY2FsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWVRpbnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbitvZmZzZXQpLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IHN1bSA9IHZlYzQoMC4wKTtcXG5cXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLnJnYiAqIHN1bS5hICogYWxwaGEsIHN1bS5hICogYWxwaGEgKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSAvIDUxMiB9LFxuICAgICAgICAgICAgY29sb3I6IHsgdHlwZTogJ2MnLCB2YWx1ZTogWzAsMCwwXX0sXG4gICAgICAgICAgICBhbHBoYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC43IH0sXG4gICAgICAgICAgICBvZmZzZXQ6IHsgdHlwZTogJzJmJywgdmFsdWU6WzUsIDVdfSxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOjF9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllUaW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWVRpbnRGaWx0ZXI7XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIGNsZWFyKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWVRpbnRGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllUaW50RmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWVRpbnRGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgRHJvcFNoYWRvd0ZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEcm9wU2hhZG93RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIgPSBuZXcgQmx1cllUaW50RmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgdGhpcy5wYWRkaW5nID0gMzA7XG5cbiAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9hbmdsZSA9IDQ1ICogTWF0aC5QSSAvIDE4MDtcbiAgICB0aGlzLl9kaXN0YW5jZSA9IDEwO1xuICAgIHRoaXMuYWxwaGEgPSAwLjc1O1xuICAgIHRoaXMuaGlkZU9iamVjdCA9IGZhbHNlO1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5NVUxUSVBMWTtcbn1cblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRHJvcFNoYWRvd0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRHJvcFNoYWRvd0ZpbHRlcjtcblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIGlmKHRoaXMuX2RpcnR5UG9zaXRpb24pXG4gICAge1xuICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzBdID0gTWF0aC5zaW4odGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVsxXSA9IE1hdGguY29zKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUodGhpcy5ibGVuZE1vZGUpO1xuXG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIGlmKCF0aGlzLmhpZGVPYmplY3QpXG4gICAge1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG4gICAgfVxuXG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBjb2xvcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgY29yZS51dGlscy5yZ2IyaGV4KCB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgPSBjb3JlLnV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYWxwaGE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXN0YW5jZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGRpc3RhbmNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9hbmdsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fYW5nbGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBncmV5c2NhbGVzIHRoZSBwYWxldHRlIG9mIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBHcmF5RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JheTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIHZlYzMoMC4yMTI2KmdsX0ZyYWdDb2xvci5yICsgMC43MTUyKmdsX0ZyYWdDb2xvci5nICsgMC4wNzIyKmdsX0ZyYWdDb2xvci5iKSwgZ3JheSk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXk6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuR3JheUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkdyYXlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JheUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JheUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR3JheUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXkuIDEgd2lsbCBtYWtlIHRoZSBvYmplY3QgYmxhY2sgYW5kIHdoaXRlLCAwIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5HcmF5RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYXk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGZpbHRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmZpbHRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXNjaWlGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2FzY2lpL0FzY2lpRmlsdGVyJyksXG4gICAgQmxvb21GaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2Jsb29tL0Jsb29tRmlsdGVyJyksXG4gICAgQmx1ckZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckZpbHRlcicpLFxuICAgIEJsdXJYRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1cllGaWx0ZXInKSxcbiAgICBCbHVyRGlyRmlsdGVyOiAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRGlyRmlsdGVyJyksXG4gICAgQ29sb3JNYXRyaXhGaWx0ZXI6ICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yTWF0cml4RmlsdGVyJyksXG4gICAgQ29sb3JTdGVwRmlsdGVyOiAgICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yU3RlcEZpbHRlcicpLFxuICAgIENvbnZvbHV0aW9uRmlsdGVyOiAgcmVxdWlyZSgnLi9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlcicpLFxuICAgIENyb3NzSGF0Y2hGaWx0ZXI6ICAgcmVxdWlyZSgnLi9jcm9zc2hhdGNoL0Nyb3NzSGF0Y2hGaWx0ZXInKSxcbiAgICBEaXNwbGFjZW1lbnRGaWx0ZXI6IHJlcXVpcmUoJy4vZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlcicpLFxuICAgIERvdFNjcmVlbkZpbHRlcjogICAgcmVxdWlyZSgnLi9kb3QvRG90U2NyZWVuRmlsdGVyJyksXG4gICAgR3JheUZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2dyYXkvR3JheUZpbHRlcicpLFxuICAgIERyb3BTaGFkb3dGaWx0ZXI6ICAgcmVxdWlyZSgnLi9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXInKSxcbiAgICBJbnZlcnRGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vaW52ZXJ0L0ludmVydEZpbHRlcicpLFxuICAgIE5vaXNlRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ub2lzZS9Ob2lzZUZpbHRlcicpLFxuICAgIFBpeGVsYXRlRmlsdGVyOiAgICAgcmVxdWlyZSgnLi9waXhlbGF0ZS9QaXhlbGF0ZUZpbHRlcicpLFxuICAgIFJHQlNwbGl0RmlsdGVyOiAgICAgcmVxdWlyZSgnLi9yZ2IvUkdCU3BsaXRGaWx0ZXInKSxcbiAgICBTaG9ja3dhdmVGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vc2hvY2t3YXZlL1Nob2Nrd2F2ZUZpbHRlcicpLFxuICAgIFNlcGlhRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9zZXBpYS9TZXBpYUZpbHRlcicpLFxuICAgIFNtYXJ0Qmx1ckZpbHRlcjogICAgcmVxdWlyZSgnLi9ibHVyL1NtYXJ0Qmx1ckZpbHRlcicpLFxuICAgIFRpbHRTaGlmdEZpbHRlcjogICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyJyksXG4gICAgVHdpc3RGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3R3aXN0L1R3aXN0RmlsdGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGludmVydHMgeW91ciBEaXNwbGF5IE9iamVjdHMgY29sb3JzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBJbnZlcnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gZmxvYXQgaW52ZXJ0O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggKHZlYzMoMSktZ2xfRnJhZ0NvbG9yLnJnYikgKiBnbF9GcmFnQ29sb3IuYSwgZ2xfRnJhZ0NvbG9yLnJnYiwgMS4wIC0gaW52ZXJ0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBpbnZlcnQ6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludmVydEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gSW52ZXJ0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhJbnZlcnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBpbnZlcnQuIGAxYCB3aWxsIGZ1bGx5IGludmVydCB0aGUgY29sb3JzLCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkludmVydEZpbHRlciNcbiAgICAgKi9cbiAgICBpbnZlcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9hZGp1c3Qvbm9pc2UuanNcbiAqL1xuXG4vKipcbiAqIEEgTm9pc2UgZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gTm9pc2VGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgbm9pc2U7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgcmFuZCh2ZWMyIGNvKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoY28ueHksIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZmxvYXQgZGlmZiA9IChyYW5kKHZUZXh0dXJlQ29vcmQpIC0gMC41KSAqIG5vaXNlO1xcblxcbiAgICBjb2xvci5yICs9IGRpZmY7XFxuICAgIGNvbG9yLmcgKz0gZGlmZjtcXG4gICAgY29sb3IuYiArPSBkaWZmO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBub2lzZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbk5vaXNlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuTm9pc2VGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTm9pc2VGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE5vaXNlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2lzZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIG5vaXNlIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuTm9pc2VGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMC41XG4gICAgICovXG4gICAgbm9pc2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHBpeGVsYXRlIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciAnYmxvY2t5Jy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUGl4ZWxhdGVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZDtcXG5cXG4gICAgdmVjMiBzaXplID0gZGltZW5zaW9ucy54eSAvIHBpeGVsU2l6ZTtcXG5cXG4gICAgdmVjMiBjb2xvciA9IGZsb29yKCAoIHZUZXh0dXJlQ29vcmQgKiBzaXplICkgKSAvIHNpemUgKyBwaXhlbFNpemUvZGltZW5zaW9ucy54eSAqIDAuNTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb2xvcik7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgICB2YWx1ZTogeyB4OiAxMCwgeTogMTAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBpeGVsYXRlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBQaXhlbGF0ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBhIHBvaW50IHRoYXQgZGVzY3JpYmVzIHRoZSBzaXplIG9mIHRoZSBibG9ja3MuXG4gICAgICogeCBpcyB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGFuZCB5IGlzIHRoZSBoZWlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUGl4ZWxhdGVGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEFuIFJHQiBTcGxpdCBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFJHQlNwbGl0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcmVkO1xcbnVuaWZvcm0gdmVjMiBncmVlbjtcXG51bmlmb3JtIHZlYzIgYmx1ZTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yLnIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyByZWQvZGltZW5zaW9ucy54eSkucjtcXG4gICBnbF9GcmFnQ29sb3IuZyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGdyZWVuL2RpbWVuc2lvbnMueHkpLmc7XFxuICAgZ2xfRnJhZ0NvbG9yLmIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBibHVlL2RpbWVuc2lvbnMueHkpLmI7XFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgZ3JlZW46ICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAtMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGJsdWU6ICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IC0yMCB9IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUkdCU3BsaXRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFJHQlNwbGl0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSR0JTcGxpdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBSZWQgY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgcmVkOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yZWQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmVlbiBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmVlbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEJsdWUgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgYXBwbGllcyBhIHNlcGlhIGVmZmVjdCB0byB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2VwaWFGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc2VwaWE7XFxuXFxuY29uc3QgbWF0MyBzZXBpYU1hdHJpeCA9IG1hdDMoMC4zNTg4LCAwLjcwNDQsIDAuMTM2OCwgMC4yOTkwLCAwLjU4NzAsIDAuMTE0MCwgMC4yMzkyLCAwLjQ2OTYsIDAuMDkxMik7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZ2xfRnJhZ0NvbG9yLnJnYiAqIHNlcGlhTWF0cml4LCBzZXBpYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2VwaWE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2VwaWFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TZXBpYUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXBpYUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2VwaWFGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNlcGlhRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgc2VwaWEuIGAxYCB3aWxsIGFwcGx5IHRoZSBmdWxsIHNlcGlhIGVmZmVjdCwgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TZXBpYUZpbHRlciNcbiAgICAgKi9cbiAgICBzZXBpYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA0eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTaG9ja3dhdmVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XFxudW5pZm9ybSB2ZWMzIHBhcmFtczsgLy8gMTAuMCwgMC44LCAwLjFcXG51bmlmb3JtIGZsb2F0IHRpbWU7XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSB2VGV4dHVyZUNvb3JkO1xcbiAgICB2ZWMyIHRleENvb3JkID0gdXY7XFxuXFxuICAgIGZsb2F0IGRpc3QgPSBkaXN0YW5jZSh1diwgY2VudGVyKTtcXG5cXG4gICAgaWYgKCAoZGlzdCA8PSAodGltZSArIHBhcmFtcy56KSkgJiYgKGRpc3QgPj0gKHRpbWUgLSBwYXJhbXMueikpIClcXG4gICAge1xcbiAgICAgICAgZmxvYXQgZGlmZiA9IChkaXN0IC0gdGltZSk7XFxuICAgICAgICBmbG9hdCBwb3dEaWZmID0gMS4wIC0gcG93KGFicyhkaWZmKnBhcmFtcy54KSwgcGFyYW1zLnkpO1xcblxcbiAgICAgICAgZmxvYXQgZGlmZlRpbWUgPSBkaWZmICAqIHBvd0RpZmY7XFxuICAgICAgICB2ZWMyIGRpZmZVViA9IG5vcm1hbGl6ZSh1diAtIGNlbnRlcik7XFxuICAgICAgICB0ZXhDb29yZCA9IHV2ICsgKGRpZmZVViAqIGRpZmZUaW1lKTtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHRleENvb3JkKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBjZW50ZXI6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9LFxuICAgICAgICAgICAgcGFyYW1zOiB7IHR5cGU6ICd2MycsIHZhbHVlOiB7IHg6IDEwLCB5OiAwLjgsIHo6IDAuMSB9IH0sXG4gICAgICAgICAgICB0aW1lOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaG9ja3dhdmVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNob2Nrd2F2ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNlbnRlciBvZiB0aGUgc2hvY2t3YXZlIGluIG5vcm1hbGl6ZWQgc2NyZWVuIGNvb3Jkcy4gVGhhdCBpc1xuICAgICAqICgwLDApIGlzIHRoZSB0b3AtbGVmdCBhbmQgKDEsMSkgaXMgdGhlIGJvdHRvbSByaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgY2VudGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGFyYW1zIG9mIHRoZSBzaG9ja3dhdmUuIFRoZXNlIG1vZGlmeSB0aGUgbG9vayBhbmQgYmVoYXZpb3Igb2ZcbiAgICAgKiB0aGUgc2hvY2t3YXZlIGFzIGl0IHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIHNob2Nrd2F2ZS4gVGhpcyBjb250cm9scyB0aGUgc3BlZWQgYXQgd2hpY2hcbiAgICAgKiB0aGUgc2hvY2t3YXZlIHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHRpbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRBeGlzRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRBeGlzRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGJsdXI7XFxudW5pZm9ybSBmbG9hdCBncmFkaWVudEJsdXI7XFxudW5pZm9ybSB2ZWMyIHN0YXJ0O1xcbnVuaWZvcm0gdmVjMiBlbmQ7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcbnVuaWZvcm0gdmVjMiB0ZXhTaXplO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcbiAgICB2ZWMyIG5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMyKHN0YXJ0LnkgLSBlbmQueSwgZW5kLnggLSBzdGFydC54KSk7XFxuICAgIGZsb2F0IHJhZGl1cyA9IHNtb290aHN0ZXAoMC4wLCAxLjAsIGFicyhkb3QodlRleHR1cmVDb29yZCAqIHRleFNpemUgLSBzdGFydCwgbm9ybWFsKSkgLyBncmFkaWVudEJsdXIpICogYmx1cjtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgLyB0ZXhTaXplICogcGVyY2VudCAqIHJhZGl1cyk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6ICAgICAgICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxMDAgfSxcbiAgICAgICAgICAgIGdyYWRpZW50Qmx1cjogICB7IHR5cGU6ICcxZicsIHZhbHVlOiA2MDAgfSxcbiAgICAgICAgICAgIHN0YXJ0OiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAsICAgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZW5kOiAgICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogNjAwLCAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBkZWx0YTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAzMCwgICB5OiAzMCB9IH0sXG4gICAgICAgICAgICB0ZXhTaXplOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiB3aW5kb3cuaW5uZXJXaWR0aCwgeTogd2luZG93LmlubmVySGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbn1cblxuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICogVGhpcyBpcyBvdmVycmlkZGVuIGluIHRoZSBYIGFuZCBZIGZpbHRlcnMsIGRvZXMgbm90aGluZyBmb3IgdGhpcyBjbGFzcy5cbiAqXG4gKi9cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAwO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IDA7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WUZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnQgRmlsdGVyLiBNYW5hZ2VzIHRoZSBwYXNzIG9mIGJvdGggYSBUaWx0U2hpZnRYRmlsdGVyIGFuZCBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlciA9IG5ldyBUaWx0U2hpZnRYRmlsdGVyKCk7XG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyID0gbmV3IFRpbHRTaGlmdFlGaWx0ZXIoKTtcbn1cblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0RmlsdGVyO1xuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ncmFkaWVudEJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5zdGFydCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5lbmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRYRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gZHggLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR5IC8gZDtcbn07XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFlGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WUZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAtZHkgLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR4IC8gZDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgdHdpc3QgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHR3aXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVHdpc3RGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgLSBvZmZzZXQ7XFxuICAgZmxvYXQgZGlzdCA9IGxlbmd0aChjb29yZCk7XFxuXFxuICAgaWYgKGRpc3QgPCByYWRpdXMpXFxuICAge1xcbiAgICAgICBmbG9hdCByYXRpbyA9IChyYWRpdXMgLSBkaXN0KSAvIHJhZGl1cztcXG4gICAgICAgZmxvYXQgYW5nbGVNb2QgPSByYXRpbyAqIHJhdGlvICogYW5nbGU7XFxuICAgICAgIGZsb2F0IHMgPSBzaW4oYW5nbGVNb2QpO1xcbiAgICAgICBmbG9hdCBjID0gY29zKGFuZ2xlTW9kKTtcXG4gICAgICAgY29vcmQgPSB2ZWMyKGNvb3JkLnggKiBjIC0gY29vcmQueSAqIHMsIGNvb3JkLnggKiBzICsgY29vcmQueSAqIGMpO1xcbiAgIH1cXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkK29mZnNldCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBvZmZzZXQ6ICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuVHdpc3RGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ud2lzdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUd2lzdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVHdpc3RGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFR3aXN0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgZGVzY3JpYmVzIHRoZSB0aGUgb2Zmc2V0IG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcmFkaXVzIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIHJhZGl1czoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBhbmdsZSBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvLyBydW4gdGhlIHBvbHlmaWxsc1xucmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbi8vIGFkZCBjb3JlIHBsdWdpbnMuXG5jb3JlLmV4dHJhcyAgICAgICAgID0gcmVxdWlyZSgnLi9leHRyYXMnKTtcbmNvcmUuZmlsdGVycyAgICAgICAgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcbmNvcmUuaW50ZXJhY3Rpb24gICAgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9uJyk7XG5jb3JlLmxvYWRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9sb2FkZXJzJyk7XG5jb3JlLm1lc2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9tZXNoJyk7XG5jb3JlLmFjY2Vzc2liaWxpdHkgID0gcmVxdWlyZSgnLi9hY2Nlc3NpYmlsaXR5Jyk7XG5cbi8vIGV4cG9ydCBhIHByZW1hZGUgbG9hZGVyIGluc3RhbmNlXG4vKipcbiAqIEEgcHJlbWFkZSBpbnN0YW5jZSBvZiB0aGUgbG9hZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZGVyIHJlc291cmNlcy5cbiAqXG4gKiBAbmFtZSBsb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcHJvcGVydHkge1BJWEkubG9hZGVycy5Mb2FkZXJ9XG4gKi9cbmNvcmUubG9hZGVyID0gbmV3IGNvcmUubG9hZGVycy5Mb2FkZXIoKTtcblxuLy8gbWl4aW4gdGhlIGRlcHJlY2F0aW9uIGZlYXR1cmVzLlxuT2JqZWN0LmFzc2lnbihjb3JlLCByZXF1aXJlKCcuL2RlcHJlY2F0aW9uJykpO1xuXG4vLyBBbHdheXMgZXhwb3J0IHBpeGkgZ2xvYmFsbHkuXG5nbG9iYWwuUElYSSA9IGNvcmU7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBIb2xkcyBhbGwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhbiBJbnRlcmFjdGlvbiBldmVudFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25EYXRhKClcbntcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IHN0b3JlcyB0aGUgZ2xvYmFsIGNvb3JkcyBvZiB3aGVyZSB0aGUgdG91Y2gvbW91c2UgZXZlbnQgaGFwcGVuZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5nbG9iYWwgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBTcHJpdGUgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBhc3NlZCB0byBhbiBldmVudCBoYW5kbGVyLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbmFsIERPTSBFdmVudCB0aGF0IHdhcyBjYXB0dXJlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gbnVsbDtcbn1cblxuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25EYXRhO1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBzcGVjaWZpZWQgZGlzcGxheU9iamVjdCBmb3IgdGhpcyBJbnRlcmFjdGlvbkRhdGFcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSBsb2NhbCBjb29yZHMgb2ZmXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IHBvaW50KVxuICogQHBhcmFtIFtnbG9iYWxQb3NdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHlvdXIgY3VzdG9tIGdsb2JhbCBjb29yZHMsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCB1c2UgdGhlIGN1cnJlbnQgZ2xvYmFsIGNvb3JkcylcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEludGVyYWN0aW9uRGF0YSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgRGlzcGxheU9iamVjdFxuICovXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmdldExvY2FsUG9zaXRpb24gPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcG9pbnQsIGdsb2JhbFBvcylcbntcbiAgICByZXR1cm4gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UoZ2xvYmFsUG9zIHx8IHRoaXMuZ2xvYmFsLCBwb2ludCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgSW50ZXJhY3Rpb25EYXRhID0gcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKTtcblxuLy8gTWl4IGludGVyYWN0aXZlVGFyZ2V0IGludG8gY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZVxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxuKTtcblxuLyoqXG4gKiBUaGUgaW50ZXJhY3Rpb24gbWFuYWdlciBkZWFscyB3aXRoIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuIEFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBpbnRlcmFjdGl2ZVxuICogaWYgaXRzIGludGVyYWN0aXZlIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZVxuICogVGhpcyBtYW5hZ2VyIGFsc28gc3VwcG9ydHMgbXVsdGl0b3VjaC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdD10cnVlXSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBtYW5hZ2VyIGF1dG9tYXRpY2FsbHkgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeT0xMF0ge251bWJlcn0gRnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyLCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgaW50ZXJhY3Rpb24gbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGJlIHByZXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0ID0gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0IDogdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFzIHRoaXMgZnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZCBtb3JlIG9mdGVuLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSA9IG9wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW91c2UgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9XG4gICAgICovXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IGRhdGEgb2JqZWN0IHRvIGhhbmRsZSBhbGwgdGhlIGV2ZW50IHRyYWNraW5nL2Rpc3BhdGNoaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5ldmVudERhdGEgPSB7XG4gICAgICAgIHN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgIGRhdGE6IHRoaXMubW91c2UsXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGxpdHRsZSBpbnRlcmFjdGl2ZURhdGEgcG9vbCAhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YVtdfVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBlbGVtZW50IHRvIGJpbmQgdG8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhhdmUgZXZlbnRzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGRvbSBlbGVtZW50P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcblxuICAgIC8vdGhpcyB3aWxsIG1ha2UgaXQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGJpbmQgYWxsIHRoZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VVcCA9IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IHRoaXMucHJvY2Vzc01vdXNlVXAuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IHRoaXMucHJvY2Vzc01vdXNlRG93bi5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gdGhpcy5wcm9jZXNzTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU91dCA9IHRoaXMub25Nb3VzZU91dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gdGhpcy5vblRvdWNoU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gdGhpcy5wcm9jZXNzVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoRW5kID0gdGhpcy5vblRvdWNoRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSB0aGlzLnByb2Nlc3NUb3VjaEVuZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IHRoaXMub25Ub3VjaE1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSB0aGlzLnByb2Nlc3NUb3VjaE1vdmUuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxhc3QgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNzcyBzdHlsZSBvZiB0aGUgY3Vyc29yIHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9ICdpbmhlcml0JztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNhY2hlZCB2YXJcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcblxuICAgIHRoaXMuc2V0VGFyZ2V0RWxlbWVudCh0aGlzLnJlbmRlcmVyLnZpZXcsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbik7XG59XG5cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UvdG91Y2ggZXZlbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZVxuICogb3RoZXIgRE9NIGVsZW1lbnRzIG9uIHRvcCBvZiB0aGUgcmVuZGVyZXJzIENhbnZhcyBlbGVtZW50LiBXaXRoIHRoaXMgeW91J2xsIGJlIGJhbGUgdG8gZGVsZXRlZ2F0ZVxuICogYW5vdGhlciBET00gZWxlbWVudCB0byByZWNlaXZlIHRob3NlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9IHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUSGUgcmVzb2x1dGlvbiBvZiB0aGUgbmV3IGVsZW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBjYW52YXMpLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXRUYXJnZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJlc29sdXRpb24pXG57XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgdGhlIERPTSBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAgICB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgICB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICAgICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICAgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgICAgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgICAgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgdGhlIERPTSBldmVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICcnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzLlxuICogSW52b2tlZCBieSBhIHRocm90dGxlZCB0aWNrZXIgdXBkYXRlIGZyb21cbiAqIHtAbGluayBQSVhJLnRpY2tlci5zaGFyZWR9LlxuICpcbiAqIEBwYXJhbSBkZWx0YVRpbWUge251bWJlcn1cbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHRoaXMuX2RlbHRhVGltZSArPSBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZGVsdGFUaW1lIDwgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWx0YVRpbWUgPSAwO1xuXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBtb3ZlIHRoZSBtb3VzZSB0aGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gZGZvbmUgdXNpbmcgdGhlIG1vdXNlIG1vdmUhXG4gICAgaWYodGhpcy5kaWRNb3ZlKVxuICAgIHtcbiAgICAgICAgdGhpcy5kaWRNb3ZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ET1xufTtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgZGlzcGxheSBvYmplY3QgaW4gcXVlc3Rpb25cbiAqIEBwYXJhbSBldmVudFN0cmluZyB7c3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGUuZywgbW91c2Vkb3duKVxuICogQHBhcmFtIGV2ZW50RGF0YSB7b2JqZWN0fSB0aGUgZXZlbnQgZGF0YSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApXG57XG4gICAgaWYoIWV2ZW50RGF0YS5zdG9wcGVkKVxuICAgIHtcbiAgICAgICAgZXZlbnREYXRhLnRhcmdldCA9IGRpc3BsYXlPYmplY3Q7XG4gICAgICAgIGV2ZW50RGF0YS50eXBlID0gZXZlbnRTdHJpbmc7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5lbWl0KCBldmVudFN0cmluZywgZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10oIGV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXBzIHggYW5kIHkgY29vcmRzIGZyb20gYSBET00gb2JqZWN0IGFuZCBtYXBzIHRoZW0gY29ycmVjdGx5IHRvIHRoZSBwaXhpIHZpZXcuIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBwb2ludC5cbiAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgdGhlIERPTSBlbGVtZW50IGNvdWxkIGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCBhbnl3aGVyZSBvbiB0aGUgc2NyZWVuLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW5cbiAqIEBwYXJhbSAge251bWJlcn0geCAgICAgdGhlIHggY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICogQHBhcmFtICB7bnVtYmVyfSB5ICAgICB0aGUgeSBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUubWFwUG9zaXRpb25Ub1BvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgeCwgeSApXG57XG4gICAgdmFyIHJlY3QgPSB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBwb2ludC54ID0gKCAoIHggLSByZWN0LmxlZnQgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC53aWR0aCAgLyByZWN0LndpZHRoICApICkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgcG9pbnQueSA9ICggKCB5IC0gcmVjdC50b3AgICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuaGVpZ2h0IC8gcmVjdC5oZWlnaHQgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVzIGEgbmVhdCB3YXkgb2YgY3Jhd2xpbmcgdGhyb3VnaCB0aGUgc2NlbmUgZ3JhcGggYW5kIHJ1bm5pbmcgYSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gYWxsIGludGVyYWN0aXZlIG9iamVjdHMgaXQgZmluZHMuXG4gKiBJdCB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIGhpdCB0ZXN0aW5nIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlIGhpdCBhY3Jvc3MgaW4gdGhlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IGlzIHRlc3RlZCBmb3IgY29sbGlzaW9uXG4gKiBAcGFyYW0gIHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IGRpc3BsYXlPYmplY3QgdGhlIGRpc3BsYXlPYmplY3QgdGhhdCB3aWxsIGJlIGhpdCB0ZXN0IChyZWN1cmNzaXZseSBjcmF3bHMgaXRzIGNoaWxkcmVuKVxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBpbnRlcmFjdGl2ZSBvYmplY3QuIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBoaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtib29sZWFufSBoaXRUZXN0IHRoaXMgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3RzIGluc2lkZSBzaG91bGQgYmUgaGl0IHRlc3QgYWdhaW5zdCB0aGUgcG9pbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiB0aGUgZGlzcGxheU9iamVjdCBoaXQgdGhlIHBvaW50XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0ludGVyYWN0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBkaXNwbGF5T2JqZWN0LCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZSlcbntcbiAgICBpZighZGlzcGxheU9iamVjdCB8fCAhZGlzcGxheU9iamVjdC52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRvb2sgYSBsaXR0bGUgd2hpbGUgdG8gcmV3b3JrIHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5ISBCdXQgbm93IGl0IGlzIGRvbmUgYW5kIG5pY2UgYW5kIG9wdGltaXNlZC4gXl9eXG4gICAgLy8gXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdyBsb29wIHRocm91Z2ggYWxsIG9iamVjdHMgYW5kIHRoZW4gb25seSBoaXQgdGVzdCB0aGUgb2JqZWN0cyBpdCBIQVMgdG8sIG5vdCBhbGwgb2YgdGhlbS4gTVVDSCBmYXN0ZXIuLlxuICAgIC8vIEFuIG9iamVjdCB3aWxsIGJlIGhpdCB0ZXN0IGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICAvLyBcbiAgICAvLyAxOiBJdCBpcyBpbnRlcmFjdGl2ZS5cbiAgICAvLyAyOiBJdCBiZWxvbmdzIHRvIGEgcGFyZW50IHRoYXQgaXMgaW50ZXJhY3RpdmUgQU5EIG9uZSBvZiB0aGUgcGFyZW50cyBjaGlsZHJlbiBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIC8vIFxuICAgIC8vIEFzIGFub3RoZXIgbGl0dGxlIG9wdGltaXNhdGlvbiBvbmNlIGFuIGludGVyYWN0aXZlIG9iamVjdCBoYXMgYmVlbiBoaXQgd2UgY2FuIGNhcnJ5IG9uIHRocm91Z2ggdGhlIHNjZW5lZ3JhcGgsIGJ1dCB3ZSBrbm93IHRoYXQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGhpdHMhIFNvIHdlIGNhbiBhdm9pZCBleHRyYSBoaXQgdGVzdHNcbiAgICAvLyBBIGZpbmFsIG9wdGltaXNhdGlvbiBpcyB0aGF0IGFuIG9iamVjdCBpcyBub3QgaGl0IHRlc3QgZGlyZWN0bHkgaWYgYSBjaGlsZCBoYXMgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICBcbiAgICB2YXIgaGl0ID0gZmFsc2UsXG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gaW50ZXJhY3RpdmUgPSBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlIHx8IGludGVyYWN0aXZlO1xuXG4gICAgLy8gaWYgdGhlIGRpc3BsYXlvYmplY3QgaGFzIGEgaGl0QXJlYSwgdGhlbiBpdCBkb2VzIG5vdCBuZWVkIHRvIGhpdFRlc3QgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAqKiBGUkVFIFRJUCAqKiEgSWYgYW4gb2JqZWN0IGlzIG5vdCBpbnRlcmFjdHRpdmUgb3IgaGFzIG5vIGJ1dHRvbnMgaW4gaXQgKHN1Y2ggYXMgYSBnYW1lIHNjZW5lISkgc2V0IGludGVyYWN0aXZlQ2hpbGRyZW4gdG8gZmFsc2UgZm9yIHRoYXQgZGlzcGxheU9iamVjdC5cbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgcGl4aSB0byBjb21wbGV0bHkgaWdub3JlIGFuZCBieXBhc3MgY2hlY2tpbmcgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmVDaGlsZHJlbilcbiAgICB7ICAgICAgIFxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aC0xOyBpID49IDA7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGltZSB0byBnZXQgcmVjdXJzaXZlLi4gaWYgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpZiBzb210aGluZyBpcyBoaXQuLlxuICAgICAgICAgICAgaWYoIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHBvaW50LCBjaGlsZHJlbltpXSwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmVQYXJlbnQpIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55IG1vcmUgb2JqZWN0cyBpbiB0aGlzIGNvbnRhaW5lciBhcyB3ZSB3ZSBub3cga25vdyB0aGUgcGFyZW50IGhhcyBiZWVuIGhpdFxuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGludGVyYWN0aXZlICwgdGhhdCBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGl0IHdhcyBhY3R1YWxseSBpbnRlcmFjdGl2ZSBhbmQgbm90IGp1c3QgdGhlIGNoaWxkIG9mIGFuIGludGVyYWN0aXZlIG9iamVjdC4gXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnl0aGluZyBlbHNlLiBXZSBzdGlsbCBuZWVkIHRvIHJ1biB0aHJvdWdoIGFsbCBvYmplY3RzLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBoaXQgdGVzdHMuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uaW50ZXJhY3RpdmUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoaXRUZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm8gcG9pbnQgcnVubmluZyB0aGlzIGlmIHRoZSBpdGVtIGlzIG5vdCBpbnRlcmFjdGl2ZSBvciBkb2VzIG5vdCBoYXZlIGFuIGludGVyYWN0aXZlIHBhcmVudC5cbiAgICBpZihpbnRlcmFjdGl2ZSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBoaXQgdGVzdGluZyAoYXMgaW4gd2UgaGF2ZSBubyBoaXQgYW55IG9iamVjdHMgeWV0KVxuICAgICAgICAvLyBXZSBhbHNvIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGl0IHRlc3RpbmcgaWYgb25jZSBvZiB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4gaGFzIGFscmVhZHkgYmVlbiBoaXQhXG4gICAgICAgIGlmKGhpdFRlc3QgJiYgIWhpdClcbiAgICAgICAgeyAgXG4gICAgICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0aGlzLl90ZW1wUG9pbnQpO1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuaGl0QXJlYS5jb250YWlucyggdGhpcy5fdGVtcFBvaW50LngsIHRoaXMuX3RlbXBQb2ludC55ICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnVuYyhkaXNwbGF5T2JqZWN0LCBoaXQpOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIFxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyBwcmVzc2VkIGRvd25cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZURvd24sIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIGRvd24gY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VEb3duID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuICAgIFxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3RbIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bicgXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGRvd24nIDogJ21vdXNlZG93bicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcmVsZWFzZWRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VVcCwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgdXAgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlVXAgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG4gICAgdmFyIGlzRG93biA9ICBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXAnIDogJ21vdXNldXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRjbGljaycgOiAnY2xpY2snLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cG91dHNpZGUnIDogJ21vdXNldXBvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiB0aGUgbW91c2UgbW92aW5nXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmRpZE1vdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU1vdmUsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE8gQlVHIGZvciBwYXJlbnRzIGluZXJhY3RpdmUgb2JqZWN0IChib3JkZXIgb3JkZXIgaXNzdWUpXG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2Vtb3ZlJywgdGhpcy5ldmVudERhdGEpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dChkaXNwbGF5T2JqZWN0LCBoaXQpO1xufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYmVpbmcgbW92ZWQgb3V0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICAvLyBUT0RPIG9wdGltaXplIGJ5IG5vdCBjaGVjayBFVkVSWSBUSU1FISBtYXliZSBoYWxmIGFzIG9mdGVuPyAvL1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgZmFsc2UgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG92ZXIvb3V0IGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgaWYoIWRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5T2JqZWN0LmJ1dHRvbk1vZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gZGlzcGxheU9iamVjdC5kZWZhdWx0Q3Vyc29yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgdGhpcy5ldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgc3RhcnRlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBzdGFydGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG4gICAgICAgIC8vVE9ETyBQT09MXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaFN0YXJ0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoc3RhcnQnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGVuZHMgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggZW5kaW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIC8vVE9ETyB0aGlzIHNob3VsZCBiZSBwYXNzZWQgYWxvbmcuLiBubyBzZXRcbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hFbmQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgZW5kIG9mIGEgdG91Y2ggYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoRW5kID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0YXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgbW92ZWQgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIG1vdmluZyBhY3Jvc3MgdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaE1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaGl0ID0gaGl0O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNobW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogR3JhYnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaEV2ZW50IHtFdmVudERhdGF9IFRoZSB0b3VjaCBldmVudCB3ZSBuZWVkIHRvIHBhaXIgd2l0aCBhbiBpbnRlcmFjdGlvbkRhdGEgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRUb3VjaERhdGEgPSBmdW5jdGlvbiAodG91Y2hFdmVudClcbntcbiAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnBvcCgpO1xuXG4gICAgaWYoIXRvdWNoRGF0YSlcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcbiAgICB9XG5cbiAgICB0b3VjaERhdGEuaWRlbnRpZmllciA9IHRvdWNoRXZlbnQuaWRlbnRpZmllcjtcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdG91Y2hEYXRhLmdsb2JhbCwgdG91Y2hFdmVudC5jbGllbnRYLCB0b3VjaEV2ZW50LmNsaWVudFkgKTtcblxuICAgIGlmKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC54ID0gdG91Y2hEYXRhLmdsb2JhbC54IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnkgPSB0b3VjaERhdGEuZ2xvYmFsLnkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgfVxuXG4gICAgdG91Y2hFdmVudC5nbG9iYWxYID0gdG91Y2hEYXRhLmdsb2JhbC54O1xuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWSA9IHRvdWNoRGF0YS5nbG9iYWwueTtcblxuICAgIHJldHVybiB0b3VjaERhdGE7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hEYXRhIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX0gVGhlIHRvdWNoIGRhdGEgb2JqZWN0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5Ub3VjaERhdGEgPSBmdW5jdGlvbiAoIHRvdWNoRGF0YSApXG57XG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnB1c2goIHRvdWNoRGF0YSApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgaW50ZXJhY3Rpb24gbWFuYWdlclxuICpcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMubW91c2UgPSBudWxsO1xuXG4gICAgdGhpcy5ldmVudERhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZVVwID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gbnVsbDtcblxuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaEVuZCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMuX3RlbXBQb2ludCA9IG51bGw7XG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGludGVyYWN0aW9ucyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSW50ZXJhY3Rpb25EYXRhOiAgICByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpLFxuICAgIEludGVyYWN0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9JbnRlcmFjdGlvbk1hbmFnZXInKSxcbiAgICBpbnRlcmFjdGl2ZVRhcmdldDogIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxufTtcbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgaW50ZXJhY3RpdmUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmludGVyYWN0aW9uLmludGVyYWN0aXZlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBpbnRlcmFjdGl2ZVRhcmdldCA9IHtcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGJ1dHRvbk1vZGU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmVDaGlsZHJlbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGRlZmF1bHRDdXJzb3I6ICdwb2ludGVyJyxcblxuICAgIC8vIHNvbWUgaW50ZXJuYWwgY2hlY2tzLi5cblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb3ZlcjogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90b3VjaERvd246IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyYWN0aXZlVGFyZ2V0O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuLi9leHRyYXMnKSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5cbmZ1bmN0aW9uIHBhcnNlKHJlc291cmNlLCB0ZXh0dXJlKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgaW5mbyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXTtcbiAgICB2YXIgY29tbW9uID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XG5cbiAgICBkYXRhLmZvbnQgPSBpbmZvLmdldEF0dHJpYnV0ZSgnZmFjZScpO1xuICAgIGRhdGEuc2l6ZSA9IHBhcnNlSW50KGluZm8uZ2V0QXR0cmlidXRlKCdzaXplJyksIDEwKTtcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBwYXJzZUludChjb21tb24uZ2V0QXR0cmlidXRlKCdsaW5lSGVpZ2h0JyksIDEwKTtcbiAgICBkYXRhLmNoYXJzID0ge307XG5cbiAgICAvL3BhcnNlIGxldHRlcnNcbiAgICB2YXIgbGV0dGVycyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NoYXInKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdpZCcpLCAxMCk7XG5cbiAgICAgICAgdmFyIHRleHR1cmVSZWN0ID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3gnKSwgMTApICsgdGV4dHVyZS5mcmFtZS54LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3knKSwgMTApICsgdGV4dHVyZS5mcmFtZS55LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSwgMTApXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICB4T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneG9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB5T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneW9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB4QWR2YW5jZTogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hhZHZhbmNlJyksIDEwKSxcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9LFxuICAgICAgICAgICAgdGV4dHVyZTogbmV3IGNvcmUuVGV4dHVyZSh0ZXh0dXJlLmJhc2VUZXh0dXJlLCB0ZXh0dXJlUmVjdClcblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vcGFyc2Uga2VybmluZ3NcbiAgICB2YXIga2VybmluZ3MgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXJuaW5nJyk7XG4gICAgZm9yIChpID0gMDsgaSA8IGtlcm5pbmdzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdmaXJzdCcpLCAxMCk7XG4gICAgICAgIHZhciBzZWNvbmQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ3NlY29uZCcpLCAxMCk7XG4gICAgICAgIHZhciBhbW91bnQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2Ftb3VudCcpLCAxMCk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tzZWNvbmRdLmtlcm5pbmdbZmlyc3RdID0gYW1vdW50O1xuICAgIH1cblxuICAgIHJlc291cmNlLmJpdG1hcEZvbnQgPSBkYXRhO1xuXG4gICAgLy8gSSdtIGxlYXZpbmcgdGhpcyBhcyBhIHRlbXBvcmFyeSBmaXggc28gd2UgY2FuIHRlc3QgdGhlIGJpdG1hcCBmb250cyBpbiB2M1xuICAgIC8vIGJ1dCBpdCdzIHZlcnkgbGlrZWx5IHRvIGNoYW5nZVxuICAgIGV4dHJhcy5CaXRtYXBUZXh0LmZvbnRzW2RhdGEuZm9udF0gPSBkYXRhO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhIG9yIG5vdCB4bWwgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzWG1sKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBpZiBub3QgYml0bWFwIGZvbnQgZGF0YSwgdXNpbmcgc29tZSBzaWxseSBkdWNrLXR5cGluZ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF0uZ2V0QXR0cmlidXRlKCdmYWNlJykgPT09IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4bWxVcmwgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsKTtcblxuICAgICAgICBpZiAoeG1sVXJsID09PSAnLicpIHtcbiAgICAgICAgICAgIHhtbFVybCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmFzZVVybCAmJiB4bWxVcmwpIHtcbiAgICAgICAgICAgIC8vIGlmIGJhc2V1cmwgaGFzIGEgdHJhaWxpbmcgc2xhc2ggdGhlbiBhZGQgb25lIHRvIHhtbFVybCBzbyB0aGUgcmVwbGFjZSB3b3JrcyBiZWxvd1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVVybC5jaGFyQXQodGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEpID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYmFzZVVybCBmcm9tIHhtbFVybFxuICAgICAgICAgICAgeG1sVXJsID0geG1sVXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiB4bWxVcmwgbm93LCBpdCBuZWVkcyBhIHRyYWlsaW5nIHNsYXNoLiBFbnN1cmUgdGhhdCBpdCBkb2VzIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZW1wdHkuXG4gICAgICAgIGlmICh4bWxVcmwgJiYgeG1sVXJsLmNoYXJBdCh4bWxVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4dHVyZVVybCA9IHhtbFVybCArIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKVswXS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKTtcbiAgICAgICAgaWYgKGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKSB7XG4gICAgICAgICAgICAvL3JldXNlIGV4aXN0aW5nIHRleHR1cmVcbiAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBsb2FkIHRoZSB0ZXh0dXJlIGZvciB0aGUgZm9udFxuICAgICAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCB0ZXh0dXJlVXJsLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCByZXMudGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGxvYWRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmxvYWRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTG9hZGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlcicpLFxuXG4gICAgLy8gcGFyc2Vyc1xuICAgIGJpdG1hcEZvbnRQYXJzZXI6ICAgcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXI6ICByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgdGV4dHVyZVBhcnNlcjogICAgICByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBSZXNvdXJjZTogICAgICAgICAgIHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlXG59O1xuIiwidmFyIFJlc291cmNlTG9hZGVyID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJyksXG4gICAgdGV4dHVyZVBhcnNlciA9IHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyID0gcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIGJpdG1hcEZvbnRQYXJzZXIgPSByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKTtcblxuLyoqXG4gKlxuICogVGhlIG5ldyBsb2FkZXIsIGV4dGVuZHMgUmVzb3VyY2UgTG9hZGVyIGJ5IENoYWQgRW5nbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2VuZ2xlcmNqL3Jlc291cmNlLWxvYWRlclxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbG9hZGVyID0gUElYSS5sb2FkZXI7IC8vIHBpeGkgZXhwb3NlcyBhIHByZW1hZGUgaW5zdGFuY2UgZm9yIHlvdSB0byB1c2UuXG4gKiAvL29yXG4gKiB2YXIgbG9hZGVyID0gbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIoKTsgLy8geW91IGNhbiBhbHNvIGNyZWF0ZSB5b3VyIG93biBpZiB5b3Ugd2FudFxuICpcbiAqIGxvYWRlci5hZGQoJ2J1bm55JyxcImRhdGEvYnVubnkucG5nXCIpO1xuICpcbiAqIGxvYWRlci5vbmNlKCdjb21wbGV0ZScsb25Bc3NldHNMb2FkZWQpO1xuICpcbiAqIGxvYWRlci5sb2FkKCk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuUmVzb3VyY2VMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmxvYWRlcnNcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpXG57XG4gICAgUmVzb3VyY2VMb2FkZXIuY2FsbCh0aGlzLCBiYXNlVXJsLCBjb25jdXJyZW5jeSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IExvYWRlci5fcGl4aU1pZGRsZXdhcmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy51c2UoTG9hZGVyLl9waXhpTWlkZGxld2FyZVtpXSgpKTtcbiAgICB9XG59XG5cbkxvYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuTG9hZGVyLl9waXhpTWlkZGxld2FyZSA9IFtcbiAgICAvLyBwYXJzZSBhbnkgYmxvYiBpbnRvIG1vcmUgdXNhYmxlIG9iamVjdHMgKGUuZy4gSW1hZ2UpXG4gICAgUmVzb3VyY2VMb2FkZXIubWlkZGxld2FyZS5wYXJzaW5nLmJsb2IsXG4gICAgLy8gcGFyc2UgYW55IEltYWdlIG9iamVjdHMgaW50byB0ZXh0dXJlc1xuICAgIHRleHR1cmVQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIHNwcml0ZXNoZWV0UGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBiaXRtYXBGb250UGFyc2VyXG5dO1xuXG5Mb2FkZXIuYWRkUGl4aU1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLnB1c2goZm4pO1xufTtcblxuLy8gQWRkIGN1c3RvbSBleHRlbnRpb25zXG52YXIgUmVzb3VyY2UgPSBSZXNvdXJjZUxvYWRlci5SZXNvdXJjZTtcblxuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSgnZm50JywgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpO1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSwgaXRzIG5vdCBqc29uLCBvciBpdCBpc24ndCBzcHJpdGVzaGVldCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNKc29uIHx8ICFyZXNvdXJjZS5kYXRhLmZyYW1lcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByb3V0ZSA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKSk7XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybCggcmVzb3VyY2UudXJsICk7XG5cbiAgICAgICAgLy8gbG9hZCB0aGUgaW1hZ2UgZm9yIHRoaXMgc2hlZXRcbiAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCByb3V0ZSArICcvJyArIHJlc291cmNlLmRhdGEubWV0YS5pbWFnZSwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzID0ge307XG5cbiAgICAgICAgICAgIHZhciBmcmFtZXMgPSByZXNvdXJjZS5kYXRhLmZyYW1lcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmcmFtZXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBmcmFtZXNbaV0uZnJhbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVjdClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaW0gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC5oLCByZWN0LncpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC53LCByZWN0LmgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS50cmltbWVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmltID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnggLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnkgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLncgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLmggLyByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsaXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQhXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBzaXplLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUueSAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoIC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0IC89IHJlc29sdXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXNbaV0gPSBuZXcgY29yZS5UZXh0dXJlKHJlcy50ZXh0dXJlLmJhc2VUZXh0dXJlLCBzaXplLCBzaXplLmNsb25lKCksIHRyaW0sIGZyYW1lc1tpXS5yb3RhdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbaV0gPSByZXNvdXJjZS50ZXh0dXJlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZSBpZiB0aGUgZGF0YSBpcyBhbiBJbWFnZSBvYmplY3RcbiAgICAgICAgaWYgKHJlc291cmNlLmRhdGEgJiYgcmVzb3VyY2UuaXNJbWFnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGJhc2VUZXh0dXJlID0gbmV3IGNvcmUuQmFzZVRleHR1cmUocmVzb3VyY2UuZGF0YSwgbnVsbCwgY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwocmVzb3VyY2UudXJsKSk7XG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IHJlc291cmNlLnVybDtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmUgPSBuZXcgY29yZS5UZXh0dXJlKGJhc2VUZXh0dXJlKTtcbiAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1Y250aW9uc1xuICAgICAgICAgICAgY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSBiYXNlVGV4dHVyZTtcbiAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSByZXNvdXJjZS50ZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICB0ZW1wUG9seWdvbiA9IG5ldyBjb3JlLlBvbHlnb24oKTtcblxuLyoqXG4gKiBCYXNlIG1lc2ggY2xhc3NcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRvIHVzZVxuICogQHBhcmFtIFt2ZXJ0aWNlc10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdmVydGljZXNcbiAqIEBwYXJhbSBbdXZzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB1dnNcbiAqIEBwYXJhbSBbaW5kaWNlc10ge1VpbnQxNkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBpbmRpY2VzXG4gKiBAcGFyYW0gW2RyYXdNb2RlXSB7bnVtYmVyfSB0aGUgZHJhd01vZGUsIGNhbiBiZSBhbnkgb2YgdGhlIE1lc2guRFJBV19NT0RFUyBjb25zdHNcbiAqL1xuZnVuY3Rpb24gTWVzaCh0ZXh0dXJlLCB2ZXJ0aWNlcywgdXZzLCBpbmRpY2VzLCBkcmF3TW9kZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gdXZzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEsIDAsXG4gICAgICAgIDEsIDEsXG4gICAgICAgIDAsIDFdKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEwMCwgMCxcbiAgICAgICAgMTAwLCAxMDAsXG4gICAgICAgIDAsIDEwMF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICAvLyAgVE9ETyBhdXRvIGdlbmVyYXRlIHRoaXMgYmFzZWQgb24gZHJhdyBtb2RlIVxuICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXMgfHwgbmV3IFVpbnQxNkFycmF5KFswLCAxLCAzLCAyXSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBNZXNoIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gU2V0IHRvIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVtb3ZlIGFueSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRyaWFuZ2xlcyBpbiBjYW52YXMgbW9kZSBhcmUgYXV0b21hdGljYWxseSBhbnRpYWxpYXNlZCwgdXNlIHRoaXMgdmFsdWUgdG8gZm9yY2UgdHJpYW5nbGVzIHRvIG92ZXJsYXAgYSBiaXQgd2l0aCBlYWNoIG90aGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2F5IHRoZSBNZXNoIHNob3VsZCBiZSBkcmF3biwgY2FuIGJlIGFueSBvZiB0aGUge0BsaW5rIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVN9IGNvbnN0c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuZHJhd01vZGUgPSBkcmF3TW9kZSB8fCBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSDtcblxuICAgIC8vIHJ1biB0ZXh0dXJlIHNldHRlcjtcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBtZXNoIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5NZXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2g7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2g7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc2gucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkubWVzaC5NZXNoI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5tZXNoKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLm1lc2gucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4IHwgMCwgdHJhbnNmb3JtLnR5IHwgMCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHgsIHRyYW5zZm9ybS50eSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoKGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMoY29udGV4dCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIFRyaWFuZ2xlIE1lc2ggbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2ggPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoIC8gMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkgKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgsIChpbmRleCArIDIpLCAoaW5kZXggKyA0KSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIHRyaWFuZ2xlIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDMpXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXgwID0gaW5kaWNlc1tpXSAqIDIsIGluZGV4MSA9IGluZGljZXNbaSArIDFdICogMiwgaW5kZXgyID0gaW5kaWNlc1tpICsgMl0gKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4Mik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyBvbmUgb2YgdGhlIHRyaWFuZ2xlcyB0aGF0IGZvcm0gdGhpcyBNZXNoXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdmVydGljZXMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHZlcnRpY2VzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gdXZzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB1dnMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSBpbmRleDAge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDEge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgyIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlID0gZnVuY3Rpb24gKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpXG57XG4gICAgdmFyIHRleHR1cmVTb3VyY2UgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZTtcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aDtcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXgwXSwgeDEgPSB2ZXJ0aWNlc1tpbmRleDFdLCB4MiA9IHZlcnRpY2VzW2luZGV4Ml07XG4gICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgwICsgMV0sIHkxID0gdmVydGljZXNbaW5kZXgxICsgMV0sIHkyID0gdmVydGljZXNbaW5kZXgyICsgMV07XG5cbiAgICB2YXIgdTAgPSB1dnNbaW5kZXgwXSAqIHRleHR1cmVXaWR0aCwgdTEgPSB1dnNbaW5kZXgxXSAqIHRleHR1cmVXaWR0aCwgdTIgPSB1dnNbaW5kZXgyXSAqIHRleHR1cmVXaWR0aDtcbiAgICB2YXIgdjAgPSB1dnNbaW5kZXgwICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MSA9IHV2c1tpbmRleDEgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYyID0gdXZzW2luZGV4MiArIDFdICogdGV4dHVyZUhlaWdodDtcblxuICAgIGlmICh0aGlzLmNhbnZhc1BhZGRpbmcgPiAwKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmdYID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgcGFkZGluZ1kgPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciBjZW50ZXJYID0gKHgwICsgeDEgKyB4MikgLyAzO1xuICAgICAgICB2YXIgY2VudGVyWSA9ICh5MCArIHkxICsgeTIpIC8gMztcblxuICAgICAgICB2YXIgbm9ybVggPSB4MCAtIGNlbnRlclg7XG4gICAgICAgIHZhciBub3JtWSA9IHkwIC0gY2VudGVyWTtcblxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgwID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkwID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgLy9cblxuICAgICAgICBub3JtWCA9IHgxIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MSAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgxID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkxID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgbm9ybVggPSB4MiAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTIgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MiA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MiA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cblxuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGNvbnRleHQuY2xpcCgpO1xuXG4gICAgLy8gQ29tcHV0ZSBtYXRyaXggdHJhbnNmb3JtXG4gICAgdmFyIGRlbHRhID0gICh1MCAqIHYxKSAgICAgICsgKHYwICogdTIpICAgICAgKyAodTEgKiB2MikgICAgICAtICh2MSAqIHUyKSAgICAgIC0gKHYwICogdTEpICAgICAgLSAodTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQSA9ICh4MCAqIHYxKSAgICAgICsgKHYwICogeDIpICAgICAgKyAoeDEgKiB2MikgICAgICAtICh2MSAqIHgyKSAgICAgIC0gKHYwICogeDEpICAgICAgLSAoeDAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQiA9ICh1MCAqIHgxKSAgICAgICsgKHgwICogdTIpICAgICAgKyAodTEgKiB4MikgICAgICAtICh4MSAqIHUyKSAgICAgIC0gKHgwICogdTEpICAgICAgLSAodTAgKiB4Mik7XG4gICAgdmFyIGRlbHRhQyA9ICh1MCAqIHYxICogeDIpICsgKHYwICogeDEgKiB1MikgKyAoeDAgKiB1MSAqIHYyKSAtICh4MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB4MikgLSAodTAgKiB4MSAqIHYyKTtcbiAgICB2YXIgZGVsdGFEID0gKHkwICogdjEpICAgICAgKyAodjAgKiB5MikgICAgICArICh5MSAqIHYyKSAgICAgIC0gKHYxICogeTIpICAgICAgLSAodjAgKiB5MSkgICAgICAtICh5MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFFID0gKHUwICogeTEpICAgICAgKyAoeTAgKiB1MikgICAgICArICh1MSAqIHkyKSAgICAgIC0gKHkxICogdTIpICAgICAgLSAoeTAgKiB1MSkgICAgICAtICh1MCAqIHkyKTtcbiAgICB2YXIgZGVsdGFGID0gKHUwICogdjEgKiB5MikgKyAodjAgKiB5MSAqIHUyKSArICh5MCAqIHUxICogdjIpIC0gKHkwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHkyKSAtICh1MCAqIHkxICogdjIpO1xuXG4gICAgY29udGV4dC50cmFuc2Zvcm0oZGVsdGFBIC8gZGVsdGEsIGRlbHRhRCAvIGRlbHRhLFxuICAgICAgICBkZWx0YUIgLyBkZWx0YSwgZGVsdGFFIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQyAvIGRlbHRhLCBkZWx0YUYgLyBkZWx0YSk7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlU291cmNlLCAwLCAwKTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBmbGF0IE1lc2hcbiAqXG4gKiBAcGFyYW0gTWVzaCB7UElYSS5tZXNoLk1lc2h9IFRoZSBNZXNoIHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUucmVuZGVyTWVzaEZsYXQgPSBmdW5jdGlvbiAoTWVzaClcbntcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICB2YXIgdmVydGljZXMgPSBNZXNoLnZlcnRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aC8yO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgZm9yICh2YXIgaT0xOyBpIDwgbGVuZ3RoLTI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkqMjtcblxuICAgICAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleF0sICAgeDEgPSB2ZXJ0aWNlc1tpbmRleCsyXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleCs0XTtcbiAgICAgICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgrMV0sIHkxID0gdmVydGljZXNbaW5kZXgrM10sIHkyID0gdmVydGljZXNbaW5kZXgrNV07XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVwZGF0ZUZyYW1lID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBtZXNoIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5NZXNoLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICghdGhpcy5fY3VycmVudEJvdW5kcykge1xuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1pblkgPSBJbmZpbml0eTtcblxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IG47IGkgKz0gMikge1xuICAgICAgICAgICAgdmFyIHJhd1ggPSB2ZXJ0aWNlc1tpXSwgcmF3WSA9IHZlcnRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciB4ID0gKGEgKiByYXdYKSArIChjICogcmF3WSkgKyB0eDtcbiAgICAgICAgICAgIHZhciB5ID0gKGQgKiByYXdZKSArIChiICogcmF3WCkgKyB0eTtcblxuICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcblxuICAgICAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG4gICAgICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5YID09PSAtSW5maW5pdHkgfHwgbWF4WSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIG1lc2guIFdvcmtzIG9ubHkgZm9yIFRSSUFOR0xFX01FU0hcbiAqXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4gKi9cbk1lc2gucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKSB7XG4gICAgaWYgKCF0aGlzLmdldEJvdW5kcygpLmNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgcG9pbnRzID0gdGVtcFBvbHlnb24ucG9pbnRzO1xuICAgIHZhciBpLCBsZW47XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUykge1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICAgICAgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgLy9UT0RPOiBpbmxpbmUgdGhpcy5cbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Mykge1xuICAgICAgICAgICAgdmFyIGluZDAgPSBpbmRpY2VzW2ldKjIsIGluZDEgPSBpbmRpY2VzW2krMV0qMiwgaW5kMiA9IGluZGljZXNbaSsyXSoyO1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaW5kMF07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpbmQwKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaW5kMV07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpbmQxKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaW5kMl07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpbmQyKzFdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Nikge1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaSsyXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2krM107XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpKzRdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaSs1XTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEaWZmZXJlbnQgZHJhd2luZyBidWZmZXIgbW9kZXMgc3VwcG9ydGVkXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSFxuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gKi9cbk1lc2guRFJBV19NT0RFUyA9IHtcbiAgICBUUklBTkdMRV9NRVNIOiAwLFxuICAgIFRSSUFOR0xFUzogMVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG5cbi8qKlxuICogVGhlIFBsYW5lIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIFBsYW5lID0gbmV3IFBJWEkuUGxhbmUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgUGxhbmUuXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNYIC0gVGhlIG51bWJlciBveCB4IHNlZ21lbnRzXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNZIC0gVGhlIG51bWJlciBvZiB5IHNlZ21lbnRzXG4gKlxuICovXG5mdW5jdGlvbiBQbGFuZSh0ZXh0dXJlLCBzZWdtZW50c1gsIHNlZ21lbnRzWSlcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgUGxhbmUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWdtZW50c1ggPSAgc2VnbWVudHNYIHx8IDEwO1xuICAgIHRoaXMuc2VnbWVudHNZID0gc2VnbWVudHNZIHx8IDEwO1xuXG4gICAgdGhpcy5kcmF3TW9kZSA9IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVM7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUGxhbmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKTtcblBsYW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsYW5lO1xubW9kdWxlLmV4cG9ydHMgPSBQbGFuZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblBsYW5lLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciB0b3RhbCA9IHRoaXMuc2VnbWVudHNYICogdGhpcy5zZWdtZW50c1k7XG4gICAgdmFyIHZlcnRzID0gW107XG4gICAgdmFyIGNvbG9ycyA9IFtdO1xuICAgIHZhciB1dnMgPSBbXTtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuXG4gIC8vICB0ZXh0dXJlLndpZHRoID0gODAwIHRleHR1cmUud2lkdGggfHwgODAwO1xuIC8vICAgdGV4dHVyZS5oZWlnaHQgPSA4MDAvL3RleHR1cmUuaGVpZ2h0IHx8IDgwMDtcblxuICAgIHZhciBzZWdtZW50c1hTdWIgPSB0aGlzLnNlZ21lbnRzWCAtIDE7XG4gICAgdmFyIHNlZ21lbnRzWVN1YiA9IHRoaXMuc2VnbWVudHNZIC0gMTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB2YXIgc2l6ZVggPSB0ZXh0dXJlLndpZHRoIC8gc2VnbWVudHNYU3ViO1xuICAgIHZhciBzaXplWSA9IHRleHR1cmUuaGVpZ2h0IC8gc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcblxuICAgICAgICB2YXIgeCA9IChpICUgdGhpcy5zZWdtZW50c1gpO1xuICAgICAgICB2YXIgeSA9ICggKGkgLyB0aGlzLnNlZ21lbnRzWCApIHwgMCApO1xuXG5cbiAgICAgICAgdmVydHMucHVzaCgoeCAqIHNpemVYKSxcbiAgICAgICAgICAgICAgICAgICAoeSAqIHNpemVZKSk7XG5cbiAgICAgICAgLy8gdGhpcyB3b3JrcyBmb3IgcmVjdGFuZ3VsYXIgdGV4dHVyZXMuIFxuICAgICAgICB1dnMucHVzaCh0ZXh0dXJlLl91dnMueDAgKyAodGV4dHVyZS5fdXZzLngxIC0gdGV4dHVyZS5fdXZzLngwKSAqICh4IC8gKHRoaXMuc2VnbWVudHNYLTEpKSwgdGV4dHVyZS5fdXZzLnkwICsgKHRleHR1cmUuX3V2cy55My10ZXh0dXJlLl91dnMueTApICogKHkvICh0aGlzLnNlZ21lbnRzWS0xKSkpO1xuICAgICAgfVxuXG4gICAgLy8gIGNvbnNcblxuICAgIHZhciB0b3RhbFN1YiA9IHNlZ21lbnRzWFN1YiAqIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFN1YjsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHhwb3MgPSBpICUgc2VnbWVudHNYU3ViO1xuICAgICAgICB2YXIgeXBvcyA9IChpIC8gc2VnbWVudHNYU3ViICkgfCAwO1xuXG5cbiAgICAgICAgdmFyICB2YWx1ZSA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTIgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuICAgICAgICB2YXIgIHZhbHVlMyA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWU0ID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMyk7XG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZTIsIHZhbHVlNCwgdmFsdWUzKTtcbiAgICB9XG5cblxuICAgIC8vY29uc29sZS5sb2coaW5kaWNlcylcbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0cyk7XG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHV2cyk7XG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvbG9ycyk7XG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBsYW5lLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUGxhbmUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSByb3BlIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIHJvcGUgPSBuZXcgUElYSS5Sb3BlKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIHJvcGUuXG4gKiBAcGFyYW0ge1BJWEkuUG9pbnRbXX0gcG9pbnRzIC0gQW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuUG9pbnR9IG9iamVjdHMgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAqXG4gKi9cbmZ1bmN0aW9uIFJvcGUodGV4dHVyZSwgcG9pbnRzKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfSBBbiBhcnJheSBvZiBwb2ludHMgdGhhdCBkZXRlcm1pbmUgdGhlIHJvcGVcbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBvZiB2ZXJ0aWNlcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IFRoZSBXZWJHTCBVdnMgb2YgdGhlIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBjb21wb25lbnRzXG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSByb3BlIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICAgdGhpcy5yZWZyZXNoKCk7XG59XG5cblxuLy8gY29uc3RydWN0b3JcblJvcGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNZXNoLnByb3RvdHlwZSk7XG5Sb3BlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvcGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvcGU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5Sb3BlLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICAvLyBpZiB0b28gbGl0dGxlIHBvaW50cywgb3IgdGV4dHVyZSBoYXNuJ3QgZ290IFVWcyBzZXQgeWV0IGp1c3QgbW92ZSBvbi5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEgfHwgIXRoaXMuX3RleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cbiAgICB2YXIgdGV4dHVyZVV2cyA9IHRoaXMuX3RleHR1cmUuX3V2cztcbiAgICB2YXIgb2Zmc2V0ID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MCk7XG4gICAgdmFyIGZhY3RvciA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDIgLSB0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkyIC0gdGV4dHVyZVV2cy55MCk7XG5cbiAgICB1dnNbMF0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzFdID0gMCArIG9mZnNldC55O1xuICAgIHV2c1syXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgIGNvbG9yc1swXSA9IDE7XG4gICAgY29sb3JzWzFdID0gMTtcblxuICAgIGluZGljZXNbMF0gPSAwO1xuICAgIGluZGljZXNbMV0gPSAxO1xuXG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCBhbW91bnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcbiAgICAgICAgLy8gdGltZSB0byBkbyBzb21lIHNtYXJ0IGRyYXdpbmchXG4gICAgICAgIGFtb3VudCA9IGkgLyAodG90YWwtMSk7XG5cbiAgICAgICAgdXZzW2luZGV4XSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCsxXSA9IDAgKyBvZmZzZXQueTtcblxuICAgICAgICB1dnNbaW5kZXgrMl0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBjb2xvcnNbaW5kZXhdID0gMTtcbiAgICAgICAgY29sb3JzW2luZGV4KzFdID0gMTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGluZGV4O1xuICAgICAgICBpbmRpY2VzW2luZGV4ICsgMV0gPSBpbmRleCArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFJvcGUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9pbnQgPSBwb2ludHNbMF07XG4gICAgdmFyIG5leHRQb2ludDtcbiAgICB2YXIgcGVycFggPSAwO1xuICAgIHZhciBwZXJwWSA9IDA7XG5cbiAgICAvLyB0aGlzLmNvdW50IC09IDAuMjtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCByYXRpbywgcGVycExlbmd0aCwgbnVtO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG5cbiAgICAgICAgaWYgKGkgPCBwb2ludHMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50c1tpKzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwWSA9IC0obmV4dFBvaW50LnggLSBsYXN0UG9pbnQueCk7XG4gICAgICAgIHBlcnBYID0gbmV4dFBvaW50LnkgLSBsYXN0UG9pbnQueTtcblxuICAgICAgICByYXRpbyA9ICgxIC0gKGkgLyAodG90YWwtMSkpKSAqIDEwO1xuXG4gICAgICAgIGlmIChyYXRpbyA+IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhdGlvID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBMZW5ndGggPSBNYXRoLnNxcnQocGVycFggKiBwZXJwWCArIHBlcnBZICogcGVycFkpO1xuICAgICAgICBudW0gPSB0aGlzLl90ZXh0dXJlLmhlaWdodCAvIDI7IC8vKDIwICsgTWF0aC5hYnMoTWF0aC5zaW4oKGkgKyB0aGlzLmNvdW50KSAqIDAuMykgKiA1MCkgKSogcmF0aW87XG4gICAgICAgIHBlcnBYIC89IHBlcnBMZW5ndGg7XG4gICAgICAgIHBlcnBZIC89IHBlcnBMZW5ndGg7XG5cbiAgICAgICAgcGVycFggKj0gbnVtO1xuICAgICAgICBwZXJwWSAqPSBudW07XG5cbiAgICAgICAgdmVydGljZXNbaW5kZXhdID0gcG9pbnQueCArIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsxXSA9IHBvaW50LnkgKyBwZXJwWTtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMl0gPSBwb2ludC54IC0gcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzNdID0gcG9pbnQueSAtIHBlcnBZO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IHBvaW50O1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5tZXNoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1lc2g6ICAgICAgICAgICByZXF1aXJlKCcuL01lc2gnKSxcbiAgICBQbGFuZTogICAgICAgICAgIHJlcXVpcmUoJy4vUGxhbmUnKSxcbiAgICBSb3BlOiAgICAgICAgICAgcmVxdWlyZSgnLi9Sb3BlJyksXG4gICAgTWVzaFJlbmRlcmVyOiAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFJlbmRlcmVyJyksXG4gICAgTWVzaFNoYWRlcjogICAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFNoYWRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgTWVzaCA9IHJlcXVpcmUoJy4uL01lc2gnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBNZXNoUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL01lc2hSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDE1MDAwKTtcblxuICAgIC8vVE9ETyB0aGlzIGNvdWxkIGJlIGEgc2luZ2xlIGJ1ZmZlciBzaGFyZWQgYW1vbmdzdCBhbGwgcmVuZGVyZXJzIGFzIHdlIHJldXNlIHRoaXMgc2V0IHVwIGluIG1vc3QgcmVuZGVyZXJzXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCAxNTAwMDsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59XG5cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hSZW5kZXJlcjtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoJywgTWVzaFJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIGlmKCFtZXNoLl92ZXJ0ZXhCdWZmZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9pbml0V2ViR0wobWVzaCk7XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcixcbiAgICAgICAgZ2wgPSByZW5kZXJlci5nbCxcbiAgICAgICAgdGV4dHVyZSA9IG1lc2guX3RleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIHNoYWRlciA9IG1lc2guc2hhZGVyOy8vIHx8IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuXG4gICAgdmFyIGRyYXdNb2RlID0gbWVzaC5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0ggPyBnbC5UUklBTkdMRV9TVFJJUCA6IGdsLlRSSUFOR0xFUztcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKG1lc2guYmxlbmRNb2RlKTtcblxuICAgIC8vVE9ETyBjYWNoZSBjdXN0b20gc3RhdGUuLlxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHNoYWRlci5zaGFkZXJzW2dsLmlkXSB8fCBzaGFkZXIuZ2V0U2hhZGVyKHJlbmRlcmVyKTsvLyA6IHNoYWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXgudmFsdWUgPSBtZXNoLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXgudmFsdWUgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSBtZXNoLndvcmxkQWxwaGE7XG5cbiAgICBzaGFkZXIuc3luY1VuaWZvcm1zKCk7XG5cbiAgICBpZiAoIW1lc2guZGlydHkpXG4gICAge1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgbWVzaC52ZXJ0aWNlcyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG1lc2guaW5kaWNlcyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgbWVzaC5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb250IG5lZWQgdG8gdXBsb2FkIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgfVxuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGRyYXdNb2RlLCBtZXNoLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG5cbn07XG5cbi8qKlxuICogUHJlcGFyZXMgYWxsIHRoZSBidWZmZXJzIHRvIHJlbmRlciB0aGlzIG1lc2hcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuX2luaXRXZWJHTCA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIC8vIGJ1aWxkIHRoZSBzdHJpcCFcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgbWVzaC5fdmVydGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5faW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl91dkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG5cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICBpZihtZXNoLmNvbG9ycyl7XG4gICAgICAgIG1lc2guX2NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl9jb2xvckJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLmNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbn07XG5cblxuLyoqXG4gKiBFbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IG1lc2ggcmVuZGVyZXIuXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBcblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBNZXNoIHJlbmRlcmVyXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgV2ViR0wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgY29yZS5TaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogYWxwaGEgOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVZlcnRleFBvc2l0aW9uOjAsXG4gICAgICAgICAgICBhVGV4dHVyZUNvb3JkOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cbk1lc2hTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNoYWRlci5wcm90b3R5cGUpO1xuTWVzaFNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoU2hhZGVyO1xuXG5jb3JlLlNoYWRlck1hbmFnZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2hTaGFkZXInLCBNZXNoU2hhZGVyKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3NpZ25cblxuaWYgKCFNYXRoLnNpZ24pXG57XG4gICAgTWF0aC5zaWduID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCA9ICt4O1xuICAgICAgICBpZiAoeCA9PT0gMCB8fCBpc05hTih4KSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPiAwID8gMSA6IC0xO1xuICAgIH07XG59XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9vYmplY3QtYXNzaWduXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5cbmlmICghT2JqZWN0LmFzc2lnbilcbntcbiAgICBPYmplY3QuYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xufVxuIiwicmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL3JlcXVlc3RBbmltYXRpb25GcmFtZScpO1xucmVxdWlyZSgnLi9NYXRoLnNpZ24nKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTU3OTY3MVxuLy8gaHR0cDovL3VwZGF0ZXMuaHRtbDVyb2Nrcy5jb20vMjAxMi8wNS9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUtQVBJLW5vdy13aXRoLXN1Yi1taWxsaXNlY29uZC1wcmVjaXNpb25cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RpbWhhbGwvNDA3ODYxNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0ZpbmFuY2lhbC1UaW1lcy9wb2x5ZmlsbC1zZXJ2aWNlL3RyZWUvbWFzdGVyL3BvbHlmaWxscy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcblxuLy8gRXhwZWN0ZWQgdG8gYmUgdXNlZCB3aXRoIEJyb3dzZXJmaXlcbi8vIEJyb3dzZXJpZnkgYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZSB1c2Ugb2YgYGdsb2JhbGAgYW5kIHBhc3NlcyB0aGVcbi8vIGNvcnJlY3QgcmVmZXJlbmNlIG9mIGBnbG9iYWxgLCBgc2VsZmAsIGFuZCBmaW5hbGx5IGB3aW5kb3dgXG5cbi8vIERhdGUubm93XG5pZiAoIShEYXRlLm5vdyAmJiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lKSkge1xuICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcbn1cblxuLy8gcGVyZm9ybWFuY2Uubm93XG5pZiAoIShnbG9iYWwucGVyZm9ybWFuY2UgJiYgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdykpIHtcbiAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIWdsb2JhbC5wZXJmb3JtYW5jZSkge1xuICAgICAgICBnbG9iYWwucGVyZm9ybWFuY2UgPSB7fTtcbiAgICB9XG4gICAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgfTtcbn1cblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xudmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xuXG5mb3IodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8XG4gICAgICAgIGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xufVxuXG5pZiAoIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCksXG4gICAgICAgICAgICBkZWxheSA9IDE2ICsgbGFzdFRpbWUgLSBjdXJyZW50VGltZTtcblxuICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgIH07XG59XG5cbmlmICghZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xufVxuIl19 //# sourceMappingURL=pixi.js.map diff --git a/bin/pixi.js.map b/bin/pixi.js.map index 1d72f43..3256814 100644 --- a/bin/pixi.js.map +++ b/bin/pixi.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi.js","sourceRoot":"./","sourcesContent":[]} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi.js","sourceRoot":"./","sourcesContent":[]} \ No newline at end of file diff --git a/bin/pixi.min.js b/bin/pixi.min.js index db31e4a..ee1b45b 100644 --- a/bin/pixi.min.js +++ b/bin/pixi.min.js @@ -1,11 +1,11 @@ !function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&this.texture.uploadData(null,t,e),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=i.fromData(t,null,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a.unbind(),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a.unbind(),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t||null)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){return this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate(),this},i.prototype.unbind=function(){return this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null),this},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=X(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function P(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function D(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},X=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},Y="function"==typeof setImmediate&&setImmediate,z=Y?function(t){Y(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=Y?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=X(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return P(t,1,e)},N.log=D("log"),N.dir=D("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return P.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return D.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",P=/^xn--/,D=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r); g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v,p=""),d=decodeURIComponent(c),f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,P=M.length;P>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var D=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(D.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=D.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var X=i.indexOf("#");-1!==X&&(this.hash=i.substr(X),i=i.slice(0,X));var Y=i.indexOf("?");if(-1!==Y?(this.search=i.substr(Y),this.query=i.substr(Y+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,Y)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","gl-matrix":"git+https://github.com/toji/gl-matrix.git","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirtyTransform=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":56,"../textures/RenderTexture":100,"../utils":107,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.transform=new a,this.position=this.transform.position,this.scale=this.transform.scale,this.pivot=this.transform.pivot,this.skew=this.transform.skew,this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),t("./Transform")),h=new n.Matrix,u={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i;var l=function(t){this.doc=t,this.x=0,this.y=0};Object.defineProperties(l.prototype,{x:{get:function(){return this.doc.position.x},set:function(t){this.doc.position.x=t,this.doc.dirtyTransform=!0}},y:{get:function(){return this.doc.posiiton.y},set:function(t){this.doc.position.y=t,this.doc.dirtyTransform=!0}}}),Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return h.tx=-i.x,h.ty=-i.y,n.render(this,h),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":56,"../textures/RenderTexture":100,"./Transform":41,eventemitter3:25}],41:[function(t,e,r){function i(){this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.position=new n.Point(0),this.scale=new n.Point(1,1),this.pivot=new n.Point(0),this.skew=new n.Point(0),this.rotation=0,this.dirty=!0}var n=t("../math");i.prototype.constructor=i,i.prototype.updateTransform=function(t){var e=t.worldTransform,r=this.worldTransform,i=this.localTransform;return i.a=this._cr*this.scale.x,i.b=this._sr*this.scale.x,i.c=-this._sr*this.scale.y,i.d=this._cr*this.scale.y,i.tx=this.position.x-(this.pivot.x*i.a+this.pivot.y*i.c),i.ty=this.position.y-(this.pivot.x*i.b+this.pivot.y*i.d),r.a=i.a*e.a+i.b*e.c,r.b=i.a*e.b+i.b*e.d,r.c=i.c*e.a+i.d*e.c,r.d=i.c*e.b+i.d*e.d,r.tx=i.tx*e.a+i.ty*e.c+e.tx,r.ty=i.tx*e.b+i.ty*e.d+e.ty,this.dirty=!1,!0},e.exports=i},{"../math":56}],42:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils":107,"./WebGLGraphicsData":45,"./shaders/PrimitiveShader":46,"./utils/buildCircle":47,"./utils/buildComplexPoly":48,"./utils/buildLine":49,"./utils/buildPoly":50,"./utils/buildRectangle":51,"./utils/buildRoundedRectangle":52,earcut:24}],45:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],46:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],47:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":107,"./buildLine":49}],48:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":107,"./buildLine":49}],49:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":56,"../../../utils":107}],50:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":107}],51:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":107,"./buildLine":49}],52:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":107,"./buildLine":49}],53:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),BaseRenderTexture:t("./textures/BaseRenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":42,"./graphics/GraphicsData":43,"./graphics/webgl/GraphicsRenderer":44,"./math":56,"./particles/ParticleContainer":62,"./particles/webgl/ParticleRenderer":64,"./renderers/canvas/CanvasRenderer":67,"./renderers/canvas/utils/CanvasBuffer":68,"./renderers/canvas/utils/CanvasGraphics":69,"./renderers/webgl/WebGLRenderer":73,"./renderers/webgl/filters/AbstractFilter":74,"./renderers/webgl/filters/FXAAFilter":75,"./renderers/webgl/filters/SpriteMaskFilter":76,"./renderers/webgl/managers/ShaderManager":80,"./renderers/webgl/managers/WebGLManager":82,"./renderers/webgl/shaders/Shader":85,"./renderers/webgl/utils/ObjectRenderer":88,"./renderers/webgl/utils/RenderTarget":90,"./sprites/Sprite":94,"./sprites/webgl/SpriteRenderer":95,"./text/Text":97,"./textures/BaseRenderTexture":98,"./textures/BaseTexture":99,"./textures/RenderTexture":100,"./textures/Texture":101,"./textures/TextureUvs":102,"./textures/VideoBaseTexture":103,"./ticker":105,"./utils":107,"pixi-gl-core":1}],54:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":55}],55:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],56:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":54,"./Point":55,"./shapes/Circle":57,"./shapes/Ellipse":58,"./shapes/Polygon":59,"./shapes/Rectangle":60,"./shapes/RoundedRectangle":61}],57:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":60}],58:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":60}],59:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":55}],60:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],62:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"./ParticleBuffer":63,"./ParticleShader":65}],65:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{ -uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":86}],66:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,transform:{worldTransform:new o.Matrix},worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":56,"../utils":107,eventemitter3:25}],67:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":56,"../../utils":107,"../SystemRenderer":66,"./utils/CanvasMaskManager":70}],68:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],69:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],70:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":69}],71:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":86}],75:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\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\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\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)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":74}],76:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":56,"./AbstractFilter":74}],77:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":82}],78:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":107}],86:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":85}],87:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],88:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":82}],89:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],90:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=(t("pixi-gl-core").GLTexture,t("pixi-gl-core").GLFramebuffer),s=t("./StencilMaskStack"),a=function(t,e,r,a,h,u){this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=h||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.defaultFrame=new PIXI.Rectangle,this.destinationFrame=null,this.sourceFrame=null,this.stencilBuffer=null,this.stencilMaskStack=new s,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=a||n.SCALE_MODES.DEFAULT,this.root=u,this.frameBuffer=o.createRGBA(t,100,100),this.root?this.frameBuffer.framebuffer=null:this.texture=this.frameBuffer.texture,this.resize(e,r)};a.prototype.constructor=a,e.exports=a,a.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},a.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},a.prototype.activate=function(t,e){var r=this.gl;this.frameBuffer.bind(),this.destinationFrame=t||this.destinationFrame||this.defaultFrame,this.sourceFrame=e||this.sourceFrame||t,this.calculateProjection(this.destinationFrame,this.sourceFrame),this.transform&&this.projectionMatrix.append(this.transform),this.destinationFrame!==this.sourceFrame?(r.enable(r.SCISSOR_TEST),r.scissor(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)):r.disable(r.SCISSOR_TEST),r.viewport(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)},a.prototype.calculateProjection=function(t,e){var r=this.projectionMatrix;e=e||t,r.identity(),this.root?(r.a=1/t.width*2,r.d=-1/t.height*2,r.tx=-1-e.x*r.a,r.ty=1-e.y*r.d):(r.a=1/t.width*2,r.d=1/t.height*2,r.tx=-1-e.x*r.a,r.ty=-1-e.y*r.d)},a.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.defaultFrame.width=t,this.defaultFrame.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},a.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":56,"../../../utils":107,"./StencilMaskStack":91,"pixi-gl-core":1}],91:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],92:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],93:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],94:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.transform.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0); -}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],97:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=t,this.height=e,this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(t){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear(!1,t))},i.prototype.renderWebGL=function(t,e,r,i,n){if(this.valid){if(n=void 0!==n?n:!0,this.textureBuffer.transform=r,this.textureBuffer.activate(),e.worldAlpha=1,n){e.worldTransform.identity(),e.currentBounds=null;var o,s,a=e.children;for(o=0,s=a.length;s>o;++o)a[o].updateTransform()}p.width=t.height,p.height=t.width;var h=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.textureBuffer.activate(t,p),console.log(e),this.renderer.renderDisplayObject(e,this.textureBuffer,i),this.renderer.filterManager=h}},i.prototype.renderCanvas=function(t,e,r,i,n){if(this.valid){n=!!n;var o=c;o.identity(),r&&o.append(r),o.tx+=t.x,o.ty+=t.y;var s=e.worldTransform;e.worldTransform=o,e.worldAlpha=1;var a,h,u=e.children;for(a=0,h=u.length;h>a;++a)u[a].updateTransform();i&&this.textureBuffer.clear();var l=this.textureBuffer.context,p=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(e,l),this.renderer.resolution=p,e.worldTransform===o&&(e.worldTransform=s)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(t){var e=new Image;return e.src=this.getBase64(t),e},i.prototype.getBase64=function(t){return this.getCanvas(t).toDataURL()},i.prototype.getCanvas=function(t){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution,i=this.renderer.gl,n=new Uint8Array(4*e*r);i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null);var o=new h(e,r),s=o.context.getImageData(0,0,e,r);return s.data.set(n),o.context.putImageData(s,0,0),o.canvas}if(t||(t=p,t.width=this.textureBuffer.canvas.width,t.height=this.textureBuffer.canvas.height),t.width===this.textureBuffer.canvas.width&&t.height===this.textureBuffer.canvas.height)return this.textureBuffer.canvas;var a=this.resolution,o=new h(t.width*a,t.height*a),s=this.textureBuffer.context.getImageData(t.x*a,t.y*a,t.width*a,t.height*a);return o.context.putImageData(s,0,0),o.canvas},i.prototype.getPixels=function(t){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var i=this.renderer.gl,n=new Uint8Array(4*e*r);return i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null),n}return this.textureBuffer.canvas.getContext("2d").getImageData(t.x*this.resolution,t.y*this.resolution,e,r).data},i.prototype.getPixel=function(t,e,r){return p.x=e,p.y=r,p.width=1/this.resolution,p.height=1/this.resolution,t&&(p.x+=t.x,p.y+=t.y),this.getPixels(p)}},{"../const":38,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/webgl/managers/FilterManager":78,"../renderers/webgl/utils/RenderTarget":90,"./BaseTexture":99,"./Texture":101}],99:[function(t,e,r){function i(t,e,r){s.call(this),this.uid=n.uid(),this.resolution=r||1,this.width=100,this.height=100,this.realWidth=100,this.realHeight=100,this.scaleMode=e||o.SCALE_MODES.DEFAULT,this.hasLoaded=!1,this.isLoading=!1,this.source=null,this.premultipliedAlpha=!0,this.imageUrl=null,this.isPowerOfTwo=!1,this.mipmap=!1,this._glTextures={},this._active=!1,this._id=0,t&&this.loadSource(t)}var n=t("../utils"),o=t("../const"),s=t("eventemitter3");i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.update=function(){this.realWidth=this.source.naturalWidth||this.source.width,this.realHeight=this.source.naturalHeight||this.source.height,this.width=this.realWidth/this.resolution,this.height=this.realHeight/this.resolution,this.isPowerOfTwo=n.isPowerOfTwo(this.realWidth,this.realHeight),this.emit("update",this)},i.prototype.loadSource=function(t){var e=this.isLoading;if(this.hasLoaded=!1,this.isLoading=!1,e&&this.source&&(this.source.onload=null,this.source.onerror=null),this.source=t,(this.source.complete||this.source.getContext)&&this.source.width&&this.source.height)this._sourceLoaded();else if(!t.getContext){this.isLoading=!0;var r=this;t.onload=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r._sourceLoaded(),r.emit("loaded",r))},t.onerror=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r.emit("error",r))},t.complete&&t.src&&(this.isLoading=!1,t.onload=null,t.onerror=null,t.width&&t.height?(this._sourceLoaded(),e&&this.emit("loaded",this)):e&&this.emit("error",this))}},i.prototype._sourceLoaded=function(){this.hasLoaded=!0,this.update()},i.prototype.destroy=function(){this.imageUrl?(delete n.BaseTextureCache[this.imageUrl],delete n.TextureCache[this.imageUrl],this.imageUrl=null,navigator.isCocoonJS||(this.source.src="")):this.source&&this.source._pixiId&&delete n.BaseTextureCache[this.source._pixiId],this.source=null,this.dispose()},i.prototype.dispose=function(){this.emit("dispose",this)},i.prototype.updateSourceImage=function(t){this.source.src=t,this.loadSource(this.source)},i.fromImage=function(t,e,r){var o=n.BaseTextureCache[t];if(void 0===e&&0!==t.indexOf("data:")&&(e=!0),!o){var s=new Image;e&&(s.crossOrigin=""),o=new i(s,r),o.imageUrl=t,s.src=t,n.BaseTextureCache[t]=o,o.resolution=n.getResolutionOfUrl(t)}return o},i.fromCanvas=function(t,e){t._pixiId||(t._pixiId="canvas_"+n.uid());var r=n.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),n.BaseTextureCache[t._pixiId]=r),r}},{"../const":38,"../utils":107,eventemitter3:25}],100:[function(t,e,r){function i(t,e){if(!renderer)throw new Error("Unable to create RenderTexture, you must pass a renderer into the constructor.");o.call(this,t,e),this.valid=!0,this._updateUvs()}var n=t("./BaseRenderTexture"),o=t("./Texture"),s=t("../math");t("../const"),new s.Matrix;i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.resize=function(t,e,r){this.valid=t>0&&e>0,this._frame.width=this.crop.width=t,this._frame.height=this.crop.height=e,r&&this.baseTexture.resize(t,e),this._updateUvs()},i.prototype.clear=function(){this.valid&&this.baseTexture.clear(this.frame)},i.prototype.render=function(t,e,r,i){this.valid&&this.baseTexture.render(this.frame,t,e,r,i)},i.prototype.getImage=function(){return this.baseTexture.getImage(this.frame)},i.prototype.getBase64=function(){return this.getBase64.getImage(this.frame)},i.prototype.getCanvas=function(){return this.baseTexture.getCanvas(this.frame)},i.prototype.getPixels=function(){return this.baseTexture.getPixels(this.frame)},i.prototype.getPixel=function(t,e){return this.baseTexture.getPixel(this.frame,t,e)},i.create=function(t,e,r,o,s){return new i(new n(t,e,r,o,s))}},{"../const":38,"../math":56,"./BaseRenderTexture":98,"./Texture":101}],101:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":56,"../utils":107,"./BaseTexture":99,"./TextureUvs":102,"./VideoBaseTexture":103,eventemitter3:25}],102:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],103:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],105:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":104}],106:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],107:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":108,async:16,eventemitter3:25}],108:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],109:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":53, -"./extras":116,"./filters":133,"./mesh":158}],110:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":53}],118:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":53,"../blur/BlurXFilter":121,"../blur/BlurYFilter":122}],119:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){ -t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":53}],125:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":53}],126:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":53}],127:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":53}],128:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":53}],129:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":53}],130:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":53}],140:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":53}],141:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":53,"./TiltShiftXFilter":142,"./TiltShiftYFilter":143}],142:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":140}],143:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":140}],144:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":53}],145:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":53,"./deprecation":109,"./extras":116,"./filters":133,"./interaction":148,"./loaders":151,"./mesh":158,"./polyfill":163}],146:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":53}],147:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){ -var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":53,"./InteractionData":146,"./interactiveTarget":149}],148:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":146,"./InteractionManager":147,"./interactiveTarget":149}],149:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],150:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":53}],156:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":155}],157:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":53,"./Mesh":155}],158:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":155,"./Plane":156,"./Rope":157,"./webgl/MeshRenderer":159,"./webgl/MeshShader":160}],159:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":53,"../Mesh":155}],160:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":53}],161:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],162:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],163:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":161,"./Object.assign":162,"./requestAnimationFrame":164}],164:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[145])(145)}); +i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.complete=function(){this.data&&this.data.removeEventListener&&(this.data.removeEventListener("error",this._boundOnError),this.data.removeEventListener("load",this._boundComplete),this.data.removeEventListener("progress",this._boundOnProgress),this.data.removeEventListener("canplaythrough",this._boundComplete)),this.xhr&&(this.xhr.removeEventListener?(this.xhr.removeEventListener("error",this._boundXhrOnError),this.xhr.removeEventListener("abort",this._boundXhrOnAbort),this.xhr.removeEventListener("progress",this._boundOnProgress),this.xhr.removeEventListener("load",this._boundXhrOnLoad)):(this.xhr.onerror=null,this.xhr.ontimeout=null,this.xhr.onprogress=null,this.xhr.onload=null)),this.emit("complete",this)},i.prototype.load=function(t){switch(this.emit("start",this),t&&this.once("complete",t),(this.crossOrigin===!1||"string"!=typeof this.crossOrigin)&&(this.crossOrigin=this._determineCrossOrigin(this.url)),this.loadType){case i.LOAD_TYPE.IMAGE:this._loadImage();break;case i.LOAD_TYPE.AUDIO:this._loadElement("audio");break;case i.LOAD_TYPE.VIDEO:this._loadElement("video");break;case i.LOAD_TYPE.XHR:default:h&&this.crossOrigin?this._loadXdr():this._loadXhr()}},i.prototype._loadImage=function(){this.data=new Image,this.crossOrigin&&(this.data.crossOrigin=this.crossOrigin),this.data.src=this.url,this.isImage=!0,this.data.addEventListener("error",this._boundOnError,!1),this.data.addEventListener("load",this._boundComplete,!1),this.data.addEventListener("progress",this._boundOnProgress,!1)},i.prototype._loadElement=function(t){if("audio"===t&&"undefined"!=typeof Audio?this.data=new Audio:this.data=document.createElement(t),null===this.data)return this.error=new Error("Unsupported element "+t),void this.complete();if(navigator.isCocoonJS)this.data.src=Array.isArray(this.url)?this.url[0]:this.url;else if(Array.isArray(this.url))for(var e=0;e0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","gl-matrix":"git+https://github.com/toji/gl-matrix.git","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.transform.dirty=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":57,"../textures/RenderTexture":101,"../utils":108,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.transform=new a,this.position=this.transform.position,this.scale=this.transform.scale,this.pivot=this.transform.pivot,this.skew=this.transform.skew,this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=this.transform.worldTransform,this.localTransform=this.transform.localTransform,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),t("./TransformStatic")),h=new n.Matrix,u={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return h.tx=-i.x,h.ty=-i.y,n.render(this,h),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":57,"../textures/RenderTexture":101,"./TransformStatic":42,eventemitter3:25}],41:[function(t,e,r){function i(t,e,r){this._x=e||0,this._y=r||0,this.transform=t}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this._x},set:function(t){this._x=t,this.transform.dirty=!0}},y:{get:function(){return this._y},set:function(t){this._y=t,this.transform.dirty=!0}}}),i.prototype.set=function(t,e){this._x=t||0,this._y=e||(0!==e?this._x:0),this.transform.dirty=!0}},{}],42:[function(t,e,r){function i(){this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.position=new o(this,0),this.scale=new o(this,1,1),this.pivot=new o(this,0,0),this.skew=new o(this,0,0),this.rotation=0,this._sr=Math.sin(0),this._cr=Math.cos(0),this.dirty=!0}var n=t("../math"),o=t("./ObservablePoint");i.prototype.constructor=i,i.prototype.updateTransform=function(t){var e=t.worldTransform,r=this.worldTransform,i=this.localTransform;console.log("DIRTY"),this.dirty&&(i.a=this._cr*this.scale._x,i.b=this._sr*this.scale._x,i.c=-this._sr*this.scale._y,i.d=this._cr*this.scale._y,i.tx=this.position._x-(this.pivot._x*i.a+this.pivot._y*i.c),i.ty=this.position._y-(this.pivot._x*i.b+this.pivot._y*i.d)),(this.dirty||parent.dirty)&&(r.a=i.a*e.a+i.b*e.c,r.b=i.a*e.b+i.b*e.d,r.c=i.c*e.a+i.d*e.c,r.d=i.c*e.b+i.d*e.d,r.tx=i.tx*e.a+i.ty*e.c+e.tx,r.ty=i.tx*e.b+i.ty*e.d+e.ty)},e.exports=i},{"../math":57,"./ObservablePoint":41}],43:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils":108,"./WebGLGraphicsData":46,"./shaders/PrimitiveShader":47,"./utils/buildCircle":48,"./utils/buildComplexPoly":49,"./utils/buildLine":50,"./utils/buildPoly":51,"./utils/buildRectangle":52,"./utils/buildRoundedRectangle":53,earcut:24}],46:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],47:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],48:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":108,"./buildLine":50}],49:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":108,"./buildLine":50}],50:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":57,"../../../utils":108}],51:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":108}],52:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":108,"./buildLine":50}],53:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":108,"./buildLine":50}],54:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),BaseRenderTexture:t("./textures/BaseRenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":43,"./graphics/GraphicsData":44,"./graphics/webgl/GraphicsRenderer":45,"./math":57,"./particles/ParticleContainer":63,"./particles/webgl/ParticleRenderer":65,"./renderers/canvas/CanvasRenderer":68,"./renderers/canvas/utils/CanvasBuffer":69,"./renderers/canvas/utils/CanvasGraphics":70,"./renderers/webgl/WebGLRenderer":74,"./renderers/webgl/filters/AbstractFilter":75,"./renderers/webgl/filters/FXAAFilter":76,"./renderers/webgl/filters/SpriteMaskFilter":77,"./renderers/webgl/managers/ShaderManager":81,"./renderers/webgl/managers/WebGLManager":83,"./renderers/webgl/shaders/Shader":86,"./renderers/webgl/utils/ObjectRenderer":89,"./renderers/webgl/utils/RenderTarget":91,"./sprites/Sprite":95,"./sprites/webgl/SpriteRenderer":96,"./text/Text":98,"./textures/BaseRenderTexture":99,"./textures/BaseTexture":100,"./textures/RenderTexture":101,"./textures/Texture":102,"./textures/TextureUvs":103,"./textures/VideoBaseTexture":104,"./ticker":106,"./utils":108,"pixi-gl-core":1}],55:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":56}],56:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],57:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":55,"./Point":56,"./shapes/Circle":58,"./shapes/Ellipse":59,"./shapes/Polygon":60,"./shapes/Rectangle":61,"./shapes/RoundedRectangle":62}],58:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":61}],59:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":61}],60:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":56}],61:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],63:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"./ParticleBuffer":64,"./ParticleShader":66}],66:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{ +uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":87}],67:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,transform:{worldTransform:new o.Matrix},worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":57,"../utils":108,eventemitter3:25}],68:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":57,"../../utils":108,"../SystemRenderer":67,"./utils/CanvasMaskManager":71}],69:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],70:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],71:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":70}],72:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":87}],76:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\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\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\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)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":75}],77:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":57,"./AbstractFilter":75}],78:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":83}],79:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":108}],87:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":86}],88:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],89:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":83}],90:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],91:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=(t("pixi-gl-core").GLTexture,t("pixi-gl-core").GLFramebuffer),s=t("./StencilMaskStack"),a=function(t,e,r,a,h,u){this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=h||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.defaultFrame=new PIXI.Rectangle,this.destinationFrame=null,this.sourceFrame=null,this.stencilBuffer=null,this.stencilMaskStack=new s,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=a||n.SCALE_MODES.DEFAULT,this.root=u,this.frameBuffer=o.createRGBA(t,100,100),this.root?this.frameBuffer.framebuffer=null:this.texture=this.frameBuffer.texture,this.resize(e,r)};a.prototype.constructor=a,e.exports=a,a.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},a.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},a.prototype.activate=function(t,e){var r=this.gl;this.frameBuffer.bind(),this.destinationFrame=t||this.destinationFrame||this.defaultFrame,this.sourceFrame=e||this.sourceFrame||t,this.calculateProjection(this.destinationFrame,this.sourceFrame),this.transform&&this.projectionMatrix.append(this.transform),this.destinationFrame!==this.sourceFrame?(r.enable(r.SCISSOR_TEST),r.scissor(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)):r.disable(r.SCISSOR_TEST),r.viewport(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)},a.prototype.calculateProjection=function(t,e){var r=this.projectionMatrix;e=e||t,r.identity(),this.root?(r.a=1/t.width*2,r.d=-1/t.height*2,r.tx=-1-e.x*r.a,r.ty=1-e.y*r.d):(r.a=1/t.width*2,r.d=1/t.height*2,r.tx=-1-e.x*r.a,r.ty=-1-e.y*r.d)},a.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.defaultFrame.width=t,this.defaultFrame.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},a.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":57,"../../../utils":108,"./StencilMaskStack":92,"pixi-gl-core":1}],92:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],93:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],94:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],95:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.transform.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0); +}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],98:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=t,this.height=e,this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(t){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear(!1,t))},i.prototype.renderWebGL=function(t,e,r,i,n){if(this.valid){if(n=void 0!==n?n:!0,this.textureBuffer.transform=r,this.textureBuffer.activate(),e.worldAlpha=1,n){e.worldTransform.identity(),e.currentBounds=null;var o,s,a=e.children;for(o=0,s=a.length;s>o;++o)a[o].updateTransform()}p.width=t.height,p.height=t.width;var h=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.textureBuffer.activate(t,p),console.log(e),this.renderer.renderDisplayObject(e,this.textureBuffer,i),this.renderer.filterManager=h}},i.prototype.renderCanvas=function(t,e,r,i,n){if(this.valid){n=!!n;var o=c;o.identity(),r&&o.append(r),o.tx+=t.x,o.ty+=t.y;var s=e.worldTransform;e.worldTransform=o,e.worldAlpha=1;var a,h,u=e.children;for(a=0,h=u.length;h>a;++a)u[a].updateTransform();i&&this.textureBuffer.clear();var l=this.textureBuffer.context,p=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(e,l),this.renderer.resolution=p,e.worldTransform===o&&(e.worldTransform=s)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(t){var e=new Image;return e.src=this.getBase64(t),e},i.prototype.getBase64=function(t){return this.getCanvas(t).toDataURL()},i.prototype.getCanvas=function(t){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution,i=this.renderer.gl,n=new Uint8Array(4*e*r);i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null);var o=new h(e,r),s=o.context.getImageData(0,0,e,r);return s.data.set(n),o.context.putImageData(s,0,0),o.canvas}if(t||(t=p,t.width=this.textureBuffer.canvas.width,t.height=this.textureBuffer.canvas.height),t.width===this.textureBuffer.canvas.width&&t.height===this.textureBuffer.canvas.height)return this.textureBuffer.canvas;var a=this.resolution,o=new h(t.width*a,t.height*a),s=this.textureBuffer.context.getImageData(t.x*a,t.y*a,t.width*a,t.height*a);return o.context.putImageData(s,0,0),o.canvas},i.prototype.getPixels=function(t){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var i=this.renderer.gl,n=new Uint8Array(4*e*r);return i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null),n}return this.textureBuffer.canvas.getContext("2d").getImageData(t.x*this.resolution,t.y*this.resolution,e,r).data},i.prototype.getPixel=function(t,e,r){return p.x=e,p.y=r,p.width=1/this.resolution,p.height=1/this.resolution,t&&(p.x+=t.x,p.y+=t.y),this.getPixels(p)}},{"../const":38,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/webgl/managers/FilterManager":79,"../renderers/webgl/utils/RenderTarget":91,"./BaseTexture":100,"./Texture":102}],100:[function(t,e,r){function i(t,e,r){s.call(this),this.uid=n.uid(),this.resolution=r||1,this.width=100,this.height=100,this.realWidth=100,this.realHeight=100,this.scaleMode=e||o.SCALE_MODES.DEFAULT,this.hasLoaded=!1,this.isLoading=!1,this.source=null,this.premultipliedAlpha=!0,this.imageUrl=null,this.isPowerOfTwo=!1,this.mipmap=!1,this._glTextures={},this._active=!1,this._id=0,t&&this.loadSource(t)}var n=t("../utils"),o=t("../const"),s=t("eventemitter3");i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.update=function(){this.realWidth=this.source.naturalWidth||this.source.width,this.realHeight=this.source.naturalHeight||this.source.height,this.width=this.realWidth/this.resolution,this.height=this.realHeight/this.resolution,this.isPowerOfTwo=n.isPowerOfTwo(this.realWidth,this.realHeight),this.emit("update",this)},i.prototype.loadSource=function(t){var e=this.isLoading;if(this.hasLoaded=!1,this.isLoading=!1,e&&this.source&&(this.source.onload=null,this.source.onerror=null),this.source=t,(this.source.complete||this.source.getContext)&&this.source.width&&this.source.height)this._sourceLoaded();else if(!t.getContext){this.isLoading=!0;var r=this;t.onload=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r._sourceLoaded(),r.emit("loaded",r))},t.onerror=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r.emit("error",r))},t.complete&&t.src&&(this.isLoading=!1,t.onload=null,t.onerror=null,t.width&&t.height?(this._sourceLoaded(),e&&this.emit("loaded",this)):e&&this.emit("error",this))}},i.prototype._sourceLoaded=function(){this.hasLoaded=!0,this.update()},i.prototype.destroy=function(){this.imageUrl?(delete n.BaseTextureCache[this.imageUrl],delete n.TextureCache[this.imageUrl],this.imageUrl=null,navigator.isCocoonJS||(this.source.src="")):this.source&&this.source._pixiId&&delete n.BaseTextureCache[this.source._pixiId],this.source=null,this.dispose()},i.prototype.dispose=function(){this.emit("dispose",this)},i.prototype.updateSourceImage=function(t){this.source.src=t,this.loadSource(this.source)},i.fromImage=function(t,e,r){var o=n.BaseTextureCache[t];if(void 0===e&&0!==t.indexOf("data:")&&(e=!0),!o){var s=new Image;e&&(s.crossOrigin=""),o=new i(s,r),o.imageUrl=t,s.src=t,n.BaseTextureCache[t]=o,o.resolution=n.getResolutionOfUrl(t)}return o},i.fromCanvas=function(t,e){t._pixiId||(t._pixiId="canvas_"+n.uid());var r=n.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),n.BaseTextureCache[t._pixiId]=r),r}},{"../const":38,"../utils":108,eventemitter3:25}],101:[function(t,e,r){function i(t,e){if(!renderer)throw new Error("Unable to create RenderTexture, you must pass a renderer into the constructor.");o.call(this,t,e),this.valid=!0,this._updateUvs()}var n=t("./BaseRenderTexture"),o=t("./Texture"),s=t("../math");t("../const"),new s.Matrix;i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.resize=function(t,e,r){this.valid=t>0&&e>0,this._frame.width=this.crop.width=t,this._frame.height=this.crop.height=e,r&&this.baseTexture.resize(t,e),this._updateUvs()},i.prototype.clear=function(){this.valid&&this.baseTexture.clear(this.frame)},i.prototype.render=function(t,e,r,i){this.valid&&this.baseTexture.render(this.frame,t,e,r,i)},i.prototype.getImage=function(){return this.baseTexture.getImage(this.frame)},i.prototype.getBase64=function(){return this.getBase64.getImage(this.frame)},i.prototype.getCanvas=function(){return this.baseTexture.getCanvas(this.frame)},i.prototype.getPixels=function(){return this.baseTexture.getPixels(this.frame)},i.prototype.getPixel=function(t,e){return this.baseTexture.getPixel(this.frame,t,e)},i.create=function(t,e,r,o,s){return new i(new n(t,e,r,o,s))}},{"../const":38,"../math":57,"./BaseRenderTexture":99,"./Texture":102}],102:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":57,"../utils":108,"./BaseTexture":100,"./TextureUvs":103,"./VideoBaseTexture":104,eventemitter3:25}],103:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],104:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],106:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":105}],107:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],108:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":109,async:16,eventemitter3:25}],109:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],110:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":54, +"./extras":117,"./filters":134,"./mesh":159}],111:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":54}],119:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":54,"../blur/BlurXFilter":122,"../blur/BlurYFilter":123}],120:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){ +t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":54}],126:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":54}],127:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":54}],128:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":54}],129:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":54}],130:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":54}],131:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":54}],141:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":54}],142:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":54,"./TiltShiftXFilter":143,"./TiltShiftYFilter":144}],143:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":141}],144:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":141}],145:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":54}],146:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":54,"./deprecation":110,"./extras":117,"./filters":134,"./interaction":149,"./loaders":152,"./mesh":159,"./polyfill":164}],147:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":54}],148:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){ +var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":54,"./InteractionData":147,"./interactiveTarget":150}],149:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":147,"./InteractionManager":148,"./interactiveTarget":150}],150:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],151:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":54}],157:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":156}],158:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":54,"./Mesh":156}],159:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":156,"./Plane":157,"./Rope":158,"./webgl/MeshRenderer":160,"./webgl/MeshShader":161}],160:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":54,"../Mesh":156}],161:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":54}],162:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],163:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],164:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":162,"./Object.assign":163,"./requestAnimationFrame":165}],165:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[146])(146)}); //# sourceMappingURL=pixi.min.js.map diff --git a/bin/pixi.min.js.map b/bin/pixi.min.js.map index 102b3e1..c95a532 100644 --- a/bin/pixi.min.js.map +++ b/bin/pixi.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","gl-matrix","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","dirtyTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Transform","pivot","_rotation","filterArea","_sr","_cr","_tempDisplayObjectParent","CachePoint","doc","posiiton","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const","./Transform",41,"localTransform","Point","parentTransform","pt","lt",42,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",43,"_lineTint","_fillTint",44,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",45,"glPoints","glIndices","Uint16Array","deleteBuffer",46,47,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",48,49,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",50,"vertPos",51,"rectData",52,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",53,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","BaseRenderTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseRenderTexture","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",54,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",55,56,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",57,"dx","dy","r2","./Rectangle",58,"normx","normy",59,"points_","il","xi","yi","xj","yj","intersect","../Point",60,61,62,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",63,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",64,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",65,"TextureShader","../../renderers/webgl/shaders/TextureShader",66,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",67,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",68,69,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",70,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",71,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",72,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",73,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",74,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",75,"./AbstractFilter",76,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",77,"currentBlendMode","blendFunc","./WebGLManager",78,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",79,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",80,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",81,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",82,83,"./Shader",84,85,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",86,"customUniforms","customAttributes","uSampler",87,88,"../managers/WebGLManager",89,"colors","rect2",90,"StencilMaskStack","frameBuffer","defaultFrame","destinationFrame","sourceFrame","stencilBuffer","calculateProjection","SCISSOR_TEST","scissor","viewport","pm","projectionFrame","./StencilMaskStack",91,92,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",93,94,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",95,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",96,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",97,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",98,"textureBuffer","tempRect","currentBounds","cachedWt","realResolution","getImage","image","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",99,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","getResolutionOfUrl",100,"baseRenderTexture","_updateUvs","updateBase","./BaseRenderTexture",101,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",102,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",103,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",104,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",105,"shared","./Ticker",106,"totalIndices",107,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",108,"__plugins","pluginName","ctor",109,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",110,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",111,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",112,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",113,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",114,"getChildByName",115,"getGlobalPosition",116,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",117,"AsciiFilter","pixelSize","../../core",118,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",119,"BlurDirFilter","dirX","dirY","strength","passes",120,"BlurFilter","./BlurXFilter","./BlurYFilter",121,"flip","flop",122,123,"SmartBlurFilter",124,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",125,"ColorStepFilter",126,"ConvolutionFilter","texelSize",127,"CrossHatchFilter",128,"DisplacementFilter","mapSampler",129,"DotScreenFilter",130,"BlurYTintFilter",131,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",132,"GrayFilter","gray",133,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",134,135,"noise",136,137,"red","green","blue",138,139,"center","params",140,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",141,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",142,"./TiltShiftAxisFilter",143,144,145,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",146,"InteractionData","originalEvent","getLocalPosition","globalPos",147,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",148,"interactiveTarget","./InteractionManager",149,150,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",151,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",152,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",153,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",154,155,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",156,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",157,"factor","nextPoint","perpLength","num","perpX","perpY",158,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",159,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",160,161,"isNaN",162,163,"./Math.sign","./Object.assign","./requestAnimationFrame",164,"Date","getTime","startTime","vendors","delay"],"mappings":"CAAA,SAAAA,GAAA,GAAA,gBAAAC,UAAA,mBAAAC,QAAAA,OAAAD,QAAAD,QAAA,IAAA,kBAAAG,SAAAA,OAAAC,IAAAD,UAAAH,OAAA,CAAA,GAAAK,EAAAA,GAAA,mBAAAC,QAAAA,OAAA,mBAAAC,QAAAA,OAAA,mBAAAC,MAAAA,KAAAC,KAAAJ,EAAAK,KAAAV,MAAA,WAAA,GAAAG,EAAA,OAAA,SAAAQ,GAAAC,EAAAC,EAAAC,GAAA,QAAAC,GAAAC,EAAAC,GAAA,IAAAJ,EAAAG,GAAA,CAAA,IAAAJ,EAAAI,GAAA,CAAA,GAAAE,GAAA,kBAAAC,UAAAA,OAAA,KAAAF,GAAAC,EAAA,MAAAA,GAAAF,GAAA,EAAA,IAAAI,EAAA,MAAAA,GAAAJ,GAAA,EAAA,IAAAhB,GAAA,GAAAqB,OAAA,uBAAAL,EAAA,IAAA,MAAAhB,GAAAsB,KAAA,mBAAAtB,EAAA,GAAAuB,GAAAV,EAAAG,IAAAf,WAAAW,GAAAI,GAAA,GAAAQ,KAAAD,EAAAtB,QAAA,SAAAU,GAAA,GAAAE,GAAAD,EAAAI,GAAA,GAAAL,EAAA,OAAAI,GAAAF,EAAAA,EAAAF,IAAAY,EAAAA,EAAAtB,QAAAU,EAAAC,EAAAC,EAAAC,GAAA,MAAAD,GAAAG,GAAAf,QAAA,IAAA,GAAAmB,GAAA,kBAAAD,UAAAA,QAAAH,EAAA,EAAAA,EAAAF,EAAAW,OAAAT,IAAAD,EAAAD,EAAAE,GAAA,OAAAD,KAAAW,GAAA,SAAAP,EAAAjB,EAAAD,GAGAC,EAAAD,SAEA0B,cAAAR,EAAA,uBACAS,sBAAAT,EAAA,+BAEAU,SAAAV,EAAA,kBACAW,cAAAX,EAAA,uBACAY,SAAAZ,EAAA,kBACAa,UAAAb,EAAA,mBAEAc,kBAAAd,EAAA,8BAGAe,iBAAA,EAAAC,sBAAA,EAAAC,iBAAA,EAAAC,kBAAA,EAAAC,0BAAA,EAAAC,sBAAA,EAAAC,8BAAA,IAAAC,GAAA,SAAAtB,EAAAjB,EAAAD,GAUA,GAAAyC,GAAA,GAAAC,aAAA,GAEAC,EAAA,SAAAC,EAAAC,EAAAC,EAAAC,GAEAvC,KAAAoC,GAAAA,EAEApC,KAAAwC,OAAAJ,EAAAK,eACAzC,KAAAqC,KAAAA,GAAAD,EAAAM,aACA1C,KAAAuC,SAAAA,GAAAH,EAAAO,YACA3C,KAAAsC,KAAAL,EAEAK,GAEAtC,KAAA4C,OAAAN,GAIAH,GAAAU,UAAAD,OAAA,SAAAN,EAAAQ,EAAAC,GAIA/C,KAAAgD,MAEA,IAAAZ,GAAApC,KAAAoC,EAEAE,GAAAA,GAAAtC,KAAAsC,KACAQ,EAAAA,GAAA,EAEA9C,KAAAsC,KAAAW,YAAAX,EAAAW,WAEAb,EAAAc,cAAAlD,KAAAqC,KAAAS,EAAAR,GAIAF,EAAAe,WAAAnD,KAAAqC,KAAAC,EAAAtC,KAAAuC,UAGAvC,KAAAsC,KAAAA,GAGAH,EAAAU,UAAAG,KAAA,WAEA,GAAAZ,GAAApC,KAAAoC,EACAA,GAAAgB,WAAApD,KAAAqC,KAAArC,KAAAwC,SAGAL,EAAAkB,mBAAA,SAAAjB,EAAAE,EAAAC,GAEA,MAAA,IAAAJ,GAAAC,EAAAA,EAAAM,aAAAJ,EAAAC,IAGAJ,EAAAmB,kBAAA,SAAAlB,EAAAE,EAAAC,GAEA,MAAA,IAAAJ,GAAAC,EAAAA,EAAAmB,qBAAAjB,EAAAC,IAGAJ,EAAAqB,OAAA,SAAApB,EAAAC,EAAAC,EAAAC,GAEA,MAAA,IAAAJ,GAAAC,EAAAC,EAAAE,IAKA9C,EAAAD,QAAA2C,OAGAsB,GAAA,SAAA/C,EAAAjB,EAAAD,GAEA,GAAAkE,GAAAhD,EAAA,eAUAiD,EAAA,SAAAvB,EAAAwB,EAAAC,GAEA7D,KAAAoC,GAAAA,EAEApC,KAAA8D,YAAA1B,EAAA2B,oBAEA/D,KAAAgE,QAAA,KACAhE,KAAAiE,QAAA,KAEAjE,KAAA4D,MAAAA,GAAA,IACA5D,KAAA6D,OAAAA,GAAA,IAGAF,GAAAd,UAAAqB,cAAA,SAAAD,GAEA,GAAA7B,GAAApC,KAAAoC,EAEApC,MAAAiE,QAAAA,GAAA,GAAAP,GAAAtB,GAEApC,KAAAiE,QAAAjB,OAIAhD,KAAAgD,OAEAZ,EAAA+B,qBAAA/B,EAAAgC,YAAAhC,EAAAiC,kBAAAjC,EAAAkC,WAAAtE,KAAAiE,QAAAA,QAAA,IAGAN,EAAAd,UAAA0B,cAAA,WAEA,IAAAvE,KAAAgE,QAAA,CAEA,GAAA5B,GAAApC,KAAAoC,EAEApC,MAAAgE,QAAA5B,EAAAoC,qBAEApC,EAAAqC,iBAAArC,EAAAsC,aAAA1E,KAAAgE,SAGA5B,EAAAuC,wBAAAvC,EAAAgC,YAAAhC,EAAAwC,yBAAAxC,EAAAsC,aAAA1E,KAAAgE,SACA5B,EAAAyC,oBAAAzC,EAAAsC,aAAAtC,EAAA0C,cAAA9E,KAAA4D,MAAA5D,KAAA6D,UAGAF,EAAAd,UAAAkC,MAAA,SAAA1E,EAAAT,EAAAoF,EAAAvE,GAEAT,KAAAgD,MAEA,IAAAZ,GAAApC,KAAAoC,EAEAA,GAAA6C,WAAA5E,EAAAT,EAAAoF,EAAAvE,GACA2B,EAAA2C,MAAA3C,EAAA8C,mBAGAvB,EAAAd,UAAAG,KAAA,WAEA,GAAAZ,GAAApC,KAAAoC,EACAA,GAAA+C,gBAAA/C,EAAAgC,YAAApE,KAAA8D,cAGAH,EAAAd,UAAAuC,OAAA,WAEAhD,GAAA+C,gBAAA/C,GAAAgC,YAAA,OAGAT,EAAAd,UAAAwC,OAAA,SAAAzB,EAAAC,GAEA,GAAAzB,GAAApC,KAAAoC,EAEApC,MAAA4D,MAAAA,EACA5D,KAAA6D,OAAAA,EAEA7D,KAAAiE,SAEAjE,KAAAiE,QAAAqB,WAAA,KAAA1B,EAAAC,GAGA7D,KAAAgE,UAGA5B,EAAAqC,iBAAArC,EAAAsC,aAAA1E,KAAAgE,SACA5B,EAAAyC,oBAAAzC,EAAAsC,aAAAtC,EAAA0C,cAAAlB,EAAAC,KAIAF,EAAAd,UAAA0C,QAAA,WAEA,GAAAnD,GAAApC,KAAAoC,EAEAA,GAAAoD,kBAAAxF,KAAA8D,cAGAH,EAAA8B,WAAA,SAAArD,EAAAwB,EAAAC,EAAAvB,GAEA,GAAA2B,GAAAP,EAAAgC,SAAAtD,EAAA,KAAAwB,EAAAC,EACAI,GAAA0B,uBACA1B,EAAA2B,iBAGA,IAAAC,GAAA,GAAAlC,GAAAvB,EAAAwB,EAAAC,EAKA,OAJAgC,GAAA3B,cAAAD,GAEA4B,EAAAT,SAEAS,GAGAlC,EAAAmC,cAAA,SAAA1D,EAAAwB,EAAAC,EAAAvB,GAGA,GAAA2B,GAAA,GAAAP,GAAAgC,SAAAtD,EAAAE,EAAAsB,EAAAC,EACAI,GAAA0B,uBACA1B,EAAA2B,iBAGA,IAAAC,GAAA,GAAAlC,GAAAvB,EAAAwB,EAAAC,EAKA,OAJAgC,GAAA3B,cAAAD,GAEA4B,EAAAT,SAEAS,GAGApG,EAAAD,QAAAmE,IAGAoC,cAAA,IAAAC,GAAA,SAAAtF,EAAAjB,EAAAD,GAEA,GAAAyG,GAAAvF,EAAA,2BACAwF,EAAAxF,EAAA,8BACAyF,EAAAzF,EAAA,4BACA0F,EAAA1F,EAAA,wCASA2F,EAAA,SAAAjE,EAAAkE,EAAAC,GAEAvG,KAAAoC,GAAAA,EAGApC,KAAAwG,QAAAP,EAAA7D,EAAAkE,EAAAC,GAGAvG,KAAAyG,WAAAP,EAAA9D,EAAApC,KAAAwG,QAEA,IAAAE,GAAAP,EAAA/D,EAAApC,KAAAwG,QAEAxG,MAAA2G,SAAAP,EAAAhE,EAAAsE,GAGAL,GAAAxD,UAAAG,KAAA,WAEAhD,KAAAoC,GAAAwE,WAAA5G,KAAAwG,UAGAH,EAAAxD,UAAA0C,QAAA,WAEAvF,KAAAoC,IAGA3C,EAAAD,QAAA6G,IAGAQ,0BAAA,EAAAC,6BAAA,GAAAC,2BAAA,GAAAC,uCAAA,KAAAC,GAAA,SAAAvG,EAAAjB,EAAAD,GAaA,GAAAkE,GAAA,SAAAtB,EAAAwB,EAAAC,EAAAqD,EAAA7E,GAEArC,KAAAoC,GAAAA,EAEApC,KAAAiE,QAAA7B,EAAA+E,gBAGAnH,KAAAoH,QAAA,EAEApH,KAAAqH,kBAAA,EAEArH,KAAA4D,MAAAA,GAAA,EACA5D,KAAA6D,OAAAA,GAAA,EAEA7D,KAAAkH,OAAAA,GAAA9E,EAAAkF,KACAtH,KAAAqC,KAAAA,GAAAD,EAAAmF,cAQA7D,GAAAb,UAAAD,OAAA,SAAA4E,GAEAxH,KAAAgD,MAEA,IAAAZ,GAAApC,KAAAoC,EAEApC,MAAA4D,MAAA4D,EAAA5D,MACA5D,KAAA6D,OAAA2D,EAAA3D,OAEAzB,EAAAqF,YAAArF,EAAAsF,+BAAA1H,KAAAqH,kBACAjF,EAAAuF,WAAAvF,EAAAkC,WAAA,EAAAtE,KAAAkH,OAAAlH,KAAAkH,OAAAlH,KAAAqC,KAAAmF,GAGA,IAAAI,IAAA,CAEAlE,GAAAb,UAAAyC,WAAA,SAAAhD,EAAAsB,EAAAC,GAOA,GALA7D,KAAAgD,OAEAhD,KAAA4D,MAAAA,GAAA5D,KAAA4D,MACA5D,KAAA6D,OAAAA,GAAA7D,KAAA6D,OAEAvB,YAAAuF,cACA,CACA,IAAAD,EACA,CACA,GAAAE,GAAA1F,GAAA2F,aAAA,oBAEA,KAAAD,EAMA,KAAA,IAAAlH,OAAA,wCAJAgH,IAAA,EAQA5H,KAAAqC,KAAAD,GAAA4F,UAKAhI,MAAAqC,KAAAD,GAAAmF,aAIAnF,IAAAqF,YAAArF,GAAAsF,+BAAA1H,KAAAqH,kBACAjF,GAAAuF,WAAAvF,GAAAkC,WAAA,EAAAtE,KAAAkH,OAAAlH,KAAA4D,MAAA5D,KAAA6D,OAAA,EAAA7D,KAAAkH,OAAAlH,KAAAqC,KAAAC,GAAA,OAIAoB,EAAAb,UAAAG,KAAA,SAAAiF,GAEA,GAAA7F,GAAApC,KAAAoC,EAEA8F,UAAAD,GAEA7F,EAAA+F,cAAA/F,EAAAgG,SAAAH,GAGA7F,EAAAiG,YAAAjG,EAAAkC,WAAAtE,KAAAiE,UAGAP,EAAAb,UAAAuC,OAAA,WAEA,GAAAhD,GAAApC,KAAAoC,EACAA,GAAAiG,YAAAjG,EAAAkC,WAAA,OAGAZ,EAAAb,UAAAyF,UAAA,SAAAC,GAEA,GAAAnG,GAAApC,KAAAoC,EAEApC,MAAAgD,OAEAhD,KAAAoH,OAEAhF,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAAqG,mBAAAF,EAAAnG,EAAAsG,qBAAAtG,EAAAuG,wBAIAvG,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAAqG,mBAAAF,EAAAnG,EAAAwG,OAAAxG,EAAAyG,UAIAnF,EAAAb,UAAAiG,UAAA,SAAAP,GAEA,GAAAnG,GAAApC,KAAAoC,EAEApC,MAAAgD,OAEAZ,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAA2G,mBAAAR,EAAAnG,EAAAwG,OAAAxG,EAAAyG,UAGAnF,EAAAb,UAAAmG,aAAA,WAEAhJ,KAAAgD,OAEAhD,KAAAoH,QAAA,EACAhF,GAAA6G,eAAA7G,GAAAkC,aAGAZ,EAAAb,UAAAqG,oBAAA,WAEAlJ,KAAAsI,WAAA,GACAtI,KAAA8I,WAAA,IAGApF,EAAAb,UAAA8C,qBAAA,WAEA3F,KAAAsI,WAAA,GACAtI,KAAA8I,WAAA,IAGApF,EAAAb,UAAA+C,gBAAA,WAEA,GAAAxD,GAAApC,KAAAoC,EAEApC,MAAAgD,OAEAZ,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAA+G,eAAA/G,EAAAgH,eACAhH,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAAiH,eAAAjH,EAAAgH,gBAGA1F,EAAAb,UAAAyG,iBAAA,WAEA,GAAAlH,GAAApC,KAAAoC,EAEApC,MAAAgD,OAEAZ,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAA+G,eAAA/G,EAAAmH,QACAnH,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAAiH,eAAAjH,EAAAmH,SAGA7F,EAAAb,UAAA0C,QAAA,WAEA,GAAAnD,GAAApC,KAAAoC,EAEAA,GAAAoH,cAAAxJ,KAAAiE,UAIAP,EAAA+F,WAAA,SAAArH,EAAAoF,EAAAH,GAEA,GAAApD,GAAA,GAAAP,GAAAtB,EAIA,OAHA6B,GAAAoD,iBAAAA,IAAA,EACApD,EAAArB,OAAA4E,GAEAvD,GAGAP,EAAAgC,SAAA,SAAAtD,EAAAE,EAAAsB,EAAAC,GAGA,GAAAI,GAAA,GAAAP,GAAAtB,EAGA,OAFA6B,GAAAqB,WAAAhD,EAAAsB,EAAAC,GAEAI,GAIAxE,EAAAD,QAAAkE,OAGAgG,GAAA,SAAAhJ,EAAAjB,EAAAD,GAWA,QAAAgC,GAAAY,GAGApC,KAAA2J,mBACAvH,EAAA2F,aAAA,4BACA3F,EAAA2F,aAAA,gCACA3F,EAAA2F,aAAA,kCAKA/H,KAAA2J,qBAEA3J,KAAA4J,UAAA5J,KAAA2J,mBAAAE,wBAGA7J,KAAAoC,GAAAA,EAEApC,KAAAyG,cAEAzG,KAAA8J,YAAA,KAEA9J,KAAA+J,OAAA,EAKAvI,EAAAqB,UAAAmH,YAAAxI,EACA/B,EAAAD,QAAAgC,EAEAA,EAAAqB,UAAAG,KAAA,WAiBA,MAfAhD,MAAA4J,WAEA5J,KAAA2J,mBAAAM,mBAAAjK,KAAA4J,WAEA5J,KAAA+J,QAEA/J,KAAA+J,OAAA,EACA/J,KAAAkK,aAKAlK,KAAAkK,WAGAlK,MAGAwB,EAAAqB,UAAAuC,OAAA,WAOA,MALApF,MAAA4J,WAEA5J,KAAA2J,mBAAAM,mBAAA,MAGAjK,MAGAwB,EAAAqB,UAAAqH,SAAA,WAIA,IAAA,GAFA9H,GAAApC,KAAAoC,GAEAzB,EAAA,EAAAA,EAAAX,KAAAyG,WAAAzF,OAAAL,IACA,CACA,GAAAwJ,GAAAnK,KAAAyG,WAAA9F,EACAwJ,GAAA3H,OAAAQ,OAEAmH,EAAAC,UAAAC,QAAAF,EAAA9H,KAAA8H,EAAAG,WAAAH,EAAAI,OAAAJ,EAAAK,OAEApI,EAAAqI,wBAAAN,EAAAC,UAAAnC,UAKA,MAFAjI,MAAA8J,YAAA9G,OAEAhD,MAGAwB,EAAAqB,UAAA6H,aAAA,SAAAlI,EAAA4H,EAAA/H,EAAAiI,EAAAC,EAAAC,GAeA,MAbAxK,MAAAyG,WAAAkE,MACAnI,OAAAA,EACA4H,UAAAA,EAEAnC,SAAAmC,EAAAnC,SACA5F,KAAAA,GAAArC,KAAAoC,GAAA4F,MACAsC,WAAAA,IAAA,EACAC,OAAAA,GAAA,EACAC,MAAAA,GAAA,IAGAxK,KAAA+J,OAAA,EAEA/J,MAIAwB,EAAAqB,UAAA+H,SAAA,SAAApI,EAAAqI,GAMA,MAJA7K,MAAA8J,YAAAtH,EAEAxC,KAAA+J,OAAA,EAEA/J,MAGAwB,EAAAqB,UAAAiI,KAAA,SAAAzI,EAAA0I,EAAAP,GAEA,GAAApI,GAAApC,KAAAoC,EAGA,OAFAA,GAAA4I,aAAA3I,EAAA0I,EAAA3I,EAAA6I,eAAAT,GAEAxK,WAIAkL,GAAA,SAAAxK,EAAAjB,EAAAD,GAUA,GAAA2L,GAAA,EAEAjK,EAAA,SAAAkK,EAAAP,GAKA,GAHAzI,GAAAgJ,EAAAC,WAAA,QAAAR,IACAO,EAAAC,WAAA,qBAAAR,IAEAzI,GAGA,KAAA,IAAAxB,OAAA,qEAMA,OAFAwB,IAAAkJ,GAAAH,IAEA/I,GAGA3C,GAAAD,QAAA0B,OAGAqK,GAAA,SAAA7K,EAAAjB,EAAAD,GAOA,GAAAgM,MAGArK,EAAA,SAAAiB,EAAAqJ,GAGA,GAAAnJ,GAAAkJ,EAAApJ,EAAAkJ,GAEA,KAAAhJ,EACA,CACA,GAAAoJ,GAAAtJ,EAAAuJ,aAAAvJ,EAAAwJ,mBACAtJ,GAAAkJ,EAAApJ,EAAAkJ,KAAAO,gBAAA,GAAAC,OAAAJ,GACAK,YAAA,GAAAD,OAAAJ,IAGA,GAAA/K,GACAkL,EAAAvJ,EAAAuJ,gBACAE,EAAAzJ,EAAAyJ,WAEA,KAAApL,EAAA,EAAAA,EAAAkL,EAAA7K,OAAAL,IAEAkL,EAAAlL,IAAA,CAIA,KAAAA,IAAA8K,GAEAI,EAAAJ,EAAA9K,GAAAsH,WAAA,CAGA,KAAAtH,EAAA,EAAAA,EAAAoL,EAAA/K,OAAAL,IAEAoL,EAAApL,KAAAkL,EAAAlL,KAEAoL,EAAApL,GAAAkL,EAAAlL,GAEA2B,EAAAyJ,YAAApL,GAEAyB,EAAAqI,wBAAA9J,GAIAyB,EAAA4J,yBAAArL,IAMAlB,GAAAD,QAAA2B,OACA8K,GAAA,SAAAvL,EAAAjB,EAAAD,GAKAyG,eAAA,SAAA7D,EAAAkE,EAAAC,GAEA,GAAA2F,GAAAC,EAAA/J,EAAAA,EAAAgK,cAAA9F,GACA+F,EAAAF,EAAA/J,EAAAA,EAAAkK,gBAAA/F,GAEAC,EAAApE,EAAAmK,eA2BA,OAzBAnK,GAAAoK,aAAAhG,EAAA0F,GACA9J,EAAAoK,aAAAhG,EAAA6F,GACAjK,EAAAqK,YAAAjG,GAGApE,EAAAsK,oBAAAlG,EAAApE,EAAAuK,eAEAC,QAAAC,MAAA,+CACAD,QAAAC,MAAA,qBAAAzK,EAAAsK,oBAAAlG,EAAApE,EAAA0K,kBACAF,QAAAC,MAAA,gBAAAzK,EAAA2K,YAGA,KAAA3K,EAAA4K,kBAAAxG,IAEAoG,QAAAK,KAAA,0CAAA7K,EAAA4K,kBAAAxG,IAGApE,EAAA8K,cAAA1G,GACAA,EAAA,MAIApE,EAAA+K,aAAAjB,GACA9J,EAAA+K,aAAAd,GAEA7F,EAGA,IAAA2F,GAAA,SAAA/J,EAAAC,EAAA+K,GAEA,GAAAC,GAAAjL,EAAAkL,aAAAjL,EAKA,OAHAD,GAAAmL,aAAAF,EAAAD,GACAhL,EAAA+J,cAAAkB,GAEAjL,EAAAoL,mBAAAH,EAAAjL,EAAAqL,gBAMAJ,GAJAT,QAAAc,IAAAtL,EAAAuL,iBAAAN,IACA,MAMA5N,GAAAD,QAAAyG,oBAGA2H,IAAA,SAAAlN,EAAAjB,EAAAD,GAGA,GAAAqO,GAAA,SAAAxL,EAAA0I,GAEA,OAAA1I,GAEA,IAAA,QACA,MAAA,EAEA,KAAA,OACA,MAAA,IAAAwF,cAAA,EAAAkD,EAEA,KAAA,OACA,MAAA,IAAAlD,cAAA,EAAAkD,EAEA,KAAA,OACA,MAAA,IAAAlD,cAAA,EAAAkD,EAEA,KAAA,MACA,IAAA,YACA,MAAA,EAEA,KAAA,QACA,MAAA,IAAA+C,YAAA,EAAA/C,EAEA,KAAA,QACA,MAAA,IAAA+C,YAAA,EAAA/C,EAEA,KAAA,QACA,MAAA,IAAA+C,YAAA,EAAA/C,EAEA,KAAA,OACA,OAAA,CAEA,KAAA,QAEA,MAAAgD,GAAA,EAAAhD,EAEA,KAAA,QACA,MAAAgD,GAAA,EAAAhD,EAEA,KAAA,QACA,MAAAgD,GAAA,EAAAhD,EAEA,KAAA,OACA,MAAA,IAAAlD,eAAA,EAAA,EACA,EAAA,GAEA,KAAA,OACA,MAAA,IAAAA,eAAA,EAAA,EAAA,EACA,EAAA,EAAA,EACA,EAAA,EAAA,GAEA,KAAA,OACA,MAAA,IAAAA,eAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,MAIAkG,EAAA,SAAAhD,GAIA,IAAA,GAFAiD,GAAA,GAAAlC,OAAAf,GAEApK,EAAA,EAAAA,EAAAqN,EAAAhN,OAAAL,IAEAqN,EAAArN,IAAA,CAGA,OAAAqN,GAGAvO,GAAAD,QAAAqO,OAEAI,IAAA,SAAAvN,EAAAjB,EAAAD,GAEA,GAAA0O,GAAAxN,EAAA,aACAyN,EAAAzN,EAAA,aAEAwF,EAAA,SAAA9D,EAAAoE,GAMA,IAAA,GAJAC,MAEA2H,EAAAhM,EAAAsK,oBAAAlG,EAAApE,EAAAiM,mBAEA1N,EAAA,EAAAyN,EAAAzN,EAAAA,IACA,CACA,GAAA2N,GAAAlM,EAAAmM,gBAAA/H,EAAA7F,GACA0B,EAAA6L,EAAA9L,EAAAkM,EAAAjM,KAEAoE,GAAA6H,EAAAE,OACAnM,KAAAA,EACA0I,KAAAoD,EAAA9L,GACA4F,SAAA7F,EAAAqM,kBAAAjI,EAAA8H,EAAAE,MAEAnE,QAAA,SAAAhI,EAAAiI,EAAAC,EAAAC,GAGApI,EAAAsM,oBAAA1O,KAAAiI,SAAAjI,KAAA+K,KAAA1I,GAAAD,EAAA4F,MAAAsC,IAAA,EAAAC,GAAA,EAAAC,GAAA,KAMA,MAAA/D,GAGAhH,GAAAD,QAAA0G,IAGAyI,YAAA,GAAAC,YAAA,KAAAC,IAAA,SAAAnO,EAAAjB,EAAAD,GACA,GAAA0O,GAAAxN,EAAA,aACAmN,EAAAnN,EAAA,kBAGAyF,EAAA,SAAA/D,EAAAoE,GAMA,IAAA,GAJAG,MAEAmI,EAAA1M,EAAAsK,oBAAAlG,EAAApE,EAAA2M,iBAEApO,EAAA,EAAAmO,EAAAnO,EAAAA,IACA,CACA,GAAA+F,GAAAtE,EAAA4M,iBAAAxI,EAAA7F,GACA6N,EAAA9H,EAAA8H,KAAAS,QAAA,UAAA,IACA5M,EAAA6L,EAAA9L,EAAAsE,EAAArE,KAEAsE,GAAA6H,IACAnM,KAAAA,EACA0I,KAAArE,EAAAqE,KACA9C,SAAA7F,EAAA8M,mBAAA1I,EAAAgI,GACAW,MAAAtB,EAAAxL,EAAAqE,EAAAqE,OAIA,MAAApE,GAGAlH,GAAAD,QAAA2G,IAGAiJ,iBAAA,GAAAR,YAAA,KAAAS,IAAA,SAAA3O,EAAAjB,EAAAD,GAEA,GAAA4G,GAAA,SAAAhE,EAAAsE,GAIA,GAAAC,IAAArE,QAEAqE,GAAAvE,GAAAA,CAIA,KAAA,GAFAkN,GAAAC,OAAAC,KAAA9I,GAEA/F,EAAA,EAAAA,EAAA2O,EAAAtO,OAAAL,IACA,CACA,GAAA8O,GAAAH,EAAA3O,GAEA+O,EAAAD,EAAAE,MAAA,KACAnB,EAAAkB,EAAAA,EAAA1O,OAAA,GAEA4O,EAAAC,EAAAH,EAAA/I,GAEAmJ,EAAApJ,EAAA+I,EACAG,GAAAtN,KAAAkM,GAAAsB,EAEAF,EAAAxN,GAAAA,EAEAmN,OAAAQ,eAAAH,EAAApB,GACAwB,IAAAC,EAAAzB,GACA0B,IAAAC,EAAA3B,EAAAsB,KAIA,MAAAnJ,IAGAsJ,EAAA,SAAAzB,GAEA,GAAA4B,GAAAC,EAAApB,QAAA,KAAAT,EACA,OAAA,IAAA8B,UAAAF,IAGAD,EAAA,SAAA3B,EAAAsB,GAEA,GACAS,GADAH,EAAAI,EAAAvB,QAAA,MAAAT,EAiBA,OAZA+B,GAFA,IAAAT,EAAA/E,KAEA0F,EAAAX,EAAAzN,MAIAqO,EAAAZ,EAAAzN,MAGAkO,IAEAH,GAAA,aAAAG,EAAA,KAGA,GAAAD,UAAA,QAAAF,IAGAP,EAAA,SAAAH,EAAAI,GAIA,IAAA,GAFAa,GAAAb,EAEAnP,EAAA,EAAAA,EAAA+O,EAAA1O,OAAA,EAAAL,IACA,CACA,GAAAJ,GAAAoQ,EAAAjB,EAAA/O,MAAA2B,QACAqO,GAAAjB,EAAA/O,IAAAJ,EACAoQ,EAAApQ,EAGA,MAAAoQ,IAGAN,GACA,8BACAO,KAAA,MAEAJ,GACA,8BACA,yCACAI,KAAA,MAGAH,GAEAI,QAAA,6BAEAC,KAAA,0CACAC,KAAA,oDACAC,KAAA,8DAEAC,MAAA,6BACAC,MAAA,0CACAC,MAAA,oDACAC,MAAA,8DAEAC,KAAA,6BACAC,MAAA,0CACAC,MAAA,oDACAC,MAAA,8DAEAC,KAAA,2CACAC,KAAA,2CACAC,KAAA,2CAEAC,UAAA,8BAGAlB,GAEAG,QAAA,8BAEAC,KAAA,8BACAC,KAAA,8BACAC,KAAA,8BAEAC,MAAA,8BACAC,MAAA,8BACAC,MAAA,8BACAC,MAAA,8BAEAC,KAAA,8BACAC,MAAA,8BACAC,MAAA,8BACAC,MAAA,8BAEAI,UAAA,8BAGAnS,GAAAD,QAAA4G,OAGAyL,IAAA,SAAAnR,EAAAjB,EAAAD,GAGA,GAAA2O,GAAA,SAAA9L,GAEA,MAAAyP,GAAAzP,IAIAyP,GACAjB,QAAA,EACAC,KAAA,EACAC,KAAA,EACAC,KAAA,EAEAC,MAAA,EACAC,MAAA,EACAC,MAAA,EACAC,MAAA,EAEAC,KAAA,EACAC,MAAA,EACAC,MAAA,EACAC,MAAA,EAEAC,KAAA,EACAC,KAAA,EACAC,KAAA,GAEAC,UAAA,EAGAnS,GAAAD,QAAA2O,OAEA4D,IAAA,SAAArR,EAAAjB,EAAAD,GAGA,GAAA2O,GAAA,SAAA/L,EAAAC,GAEA,IAAA2P,EACA,CACA,GAAAC,GAAA1C,OAAAC,KAAA0C,EAEAF,KAEA,KAAA,GAAArR,GAAA,EAAAA,EAAAsR,EAAAjR,SAAAL,EACA,CACA,GAAAwR,GAAAF,EAAAtR,EACAqR,GAAA5P,EAAA+P,IAAAD,EAAAC,IAIA,MAAAH,GAAA3P,IAGA2P,EAAA,KAEAE,GACAlK,MAAA,QACAoK,WAAA,OACAC,WAAA,OACAC,WAAA,OAEAC,IAAA,MACAC,SAAA,QACAC,SAAA,QACAC,SAAA,QAEAC,KAAA,OACAC,UAAA,QACAC,UAAA,QACAC,UAAA,QAEAC,WAAA,OACAC,WAAA,OACAC,WAAA,OAEAC,WAAA,YAGAzT,GAAAD,QAAA2O,OAEAgF,IAAA,SAAAzS,EAAAjB,EAAAD,IACA,SAAA4T,EAAAtT,IAQA,WAGA,QAAAuT,MACA,QAAAC,GAAAC,GACA,MAAAA,GAEA,QAAAC,GAAAD,GACA,QAAAA,EAEA,QAAAE,GAAAF,GACA,OAAAA,EAsBA,QAAAG,GAAAC,GACA,MAAA,YACA,GAAA,OAAAA,EAAA,KAAA,IAAA/S,OAAA,+BACA+S,GAAAC,MAAA5T,KAAA6T,WACAF,EAAA,MAIA,QAAAG,GAAAH,GACA,MAAA,YACA,OAAAA,IACAA,EAAAC,MAAA5T,KAAA6T,WACAF,EAAA,OAkBA,QAAAI,GAAAC,GACA,MAAAC,GAAAD,IAEA,gBAAAA,GAAAhT,QACAgT,EAAAhT,QAAA,GACAgT,EAAAhT,OAAA,IAAA,EAIA,QAAAkT,GAAAF,EAAAG,GAIA,IAHA,GAAAC,GAAA,GACApT,EAAAgT,EAAAhT,SAEAoT,EAAApT,GACAmT,EAAAH,EAAAI,GAAAA,EAAAJ,GAIA,QAAAK,GAAAL,EAAAG,GAKA,IAJA,GAAAC,GAAA,GACApT,EAAAgT,EAAAhT,OACAsT,EAAAxI,MAAA9K,KAEAoT,EAAApT,GACAsT,EAAAF,GAAAD,EAAAH,EAAAI,GAAAA,EAAAJ,EAEA,OAAAM,GAGA,QAAAC,GAAAC,GACA,MAAAH,GAAAvI,MAAA0I,GAAA,SAAAjB,EAAA5S,GAAA,MAAAA,KAGA,QAAA8T,GAAAT,EAAAG,EAAAO,GAIA,MAHAR,GAAAF,EAAA,SAAAW,EAAAhU,EAAAF,GACAiU,EAAAP,EAAAO,EAAAC,EAAAhU,EAAAF,KAEAiU,EAGA,QAAAE,GAAAC,EAAAV,GACAD,EAAAY,EAAAD,GAAA,SAAAE,GACAZ,EAAAU,EAAAE,GAAAA,KAIA,QAAAC,GAAAhB,EAAAiB,GACA,IAAA,GAAAtU,GAAA,EAAAA,EAAAqT,EAAAhT,OAAAL,IACA,GAAAqT,EAAArT,KAAAsU,EAAA,MAAAtU,EAEA,OAAA,GAaA,QAAAuU,GAAAC,GACA,GACAC,GACA5F,EAFA7O,EAAA,EAGA,OAAAoT,GAAAoB,IACAC,EAAAD,EAAAnU,OACA,WAEA,MADAL,KACAyU,EAAAzU,EAAAA,EAAA,QAGA6O,EAAAsF,EAAAK,GACAC,EAAA5F,EAAAxO,OACA,WAEA,MADAL,KACAyU,EAAAzU,EAAA6O,EAAA7O,GAAA,OAQA,QAAA0U,GAAAC,EAAAC,GAEA,MADAA,GAAA,MAAAA,EAAAD,EAAAtU,OAAA,GAAAuU,EACA,WAGA,IAAA,GAFAvU,GAAAwU,KAAAC,IAAA5B,UAAA7S,OAAAuU,EAAA,GACAG,EAAA5J,MAAA9K,GACAoT,EAAA,EAAApT,EAAAoT,EAAAA,IACAsB,EAAAtB,GAAAP,UAAAO,EAAAmB,EAEA,QAAAA,GACA,IAAA,GAAA,MAAAD,GAAAvU,KAAAf,KAAA0V,EACA,KAAA,GAAA,MAAAJ,GAAAvU,KAAAf,KAAA6T,UAAA,GAAA6B,KAYA,QAAAC,GAAAxB,GACA,MAAA,UAAAhF,EAAAiF,EAAAwB,GACA,MAAAzB,GAAAhF,EAAAyG,IA8GA,QAAAC,GAAAC,GAEA,MAAA,UAAAC,EAAA5B,EAAAyB,GACAA,EAAA9B,EAAA8B,GAAAvC,GACA0C,EAAAA,KACA,IAAAC,GAAAd,EAAAa,EACA,IAAA,GAAAD,EACA,MAAAF,GAAA,KAEA,IAAAK,IAAA,EACAC,EAAA,EACAC,GAAA,GAEA,QAAAC,KACA,GAAAH,GAAA,GAAAC,EACA,MAAAN,GAAA,KAGA,MAAAE,EAAAI,IAAAC,GAAA,CACA,GAAApB,GAAAiB,GACA,IAAA,OAAAjB,EAKA,MAJAkB,IAAA,OACA,GAAAC,GACAN,EAAA,MAIAM,IAAA,EACA/B,EAAA4B,EAAAhB,GAAAA,EAAArB,EAAA,SAAA2C,GACAH,GAAA,EACAG,GACAT,EAAAS,GACAF,GAAA,GAGAC,YASA,QAAAE,GAAA3C,GACA,MAAA,UAAAoC,EAAA5B,EAAAyB,GACA,MAAAjC,GAAA4C,EAAAC,OAAAT,EAAA5B,EAAAyB,IAGA,QAAAa,GAAA9C,GACA,MAAA,UAAAoC,EAAAD,EAAA3B,EAAAyB,GACA,MAAAjC,GAAAkC,EAAAC,GAAAC,EAAA5B,EAAAyB,IAGA,QAAAc,GAAA/C,GACA,MAAA,UAAAoC,EAAA5B,EAAAyB,GACA,MAAAjC,GAAA4C,EAAAI,aAAAZ,EAAA5B,EAAAyB,IAIA,QAAAgB,GAAAC,EAAA7C,EAAAG,EAAAyB,GACAA,EAAA9B,EAAA8B,GAAAvC,GACAW,EAAAA,KACA,IAAA8C,GAAA/C,EAAAC,QACA6C,GAAA7C,EAAA,SAAA7E,EAAAiF,EAAAwB,GACAzB,EAAAhF,EAAA,SAAAkH,EAAA9C,GACAuD,EAAA1C,GAAAb,EACAqC,EAAAS,MAEA,SAAAA,GACAT,EAAAS,EAAAS,KA2CA,QAAAC,GAAAF,EAAA7C,EAAAG,EAAAyB,GACA,GAAAkB,KACAD,GAAA7C,EAAA,SAAAW,EAAAP,EAAAwB,GACAzB,EAAAQ,EAAA,SAAApB,GACAA,GACAuD,EAAAnM,MAAAyJ,MAAAA,EAAAjF,MAAAwF,IAEAiB,OAEA,WACAA,EAAAvB,EAAAyC,EAAAE,KAAA,SAAAvW,EAAAuE,GACA,MAAAvE,GAAA2T,MAAApP,EAAAoP,QACA,SAAAO,GACA,MAAAA,GAAAxF,WAcA,QAAA8H,GAAAJ,EAAA7C,EAAAG,EAAAyB,GACAmB,EAAAF,EAAA7C,EAAA,SAAA7E,EAAA+H,GACA/C,EAAAhF,EAAA,SAAAoE,GACA2D,GAAA3D,MAEAqC,GAMA,QAAAuB,GAAAN,EAAAO,EAAAC,GACA,MAAA,UAAArD,EAAA8B,EAAA3B,EAAA+C,GACA,QAAAjB,KACAiB,GAAAA,EAAAG,GAAA,EAAA,SAEA,QAAAC,GAAA3C,EAAA4C,EAAA3B,GACA,MAAAsB,OACA/C,GAAAQ,EAAA,SAAApB,GACA2D,GAAAE,EAAA7D,KACA2D,EAAAG,GAAA,EAAA1C,IACAuC,EAAA/C,GAAA,GAEAyB,MANAA,IASA/B,UAAA7S,OAAA,EACA6V,EAAA7C,EAAA8B,EAAAwB,EAAArB,IAEAiB,EAAA/C,EACAA,EAAA2B,EACAe,EAAA7C,EAAAsD,EAAArB,KAeA,QAAAuB,GAAAjE,EAAAoB,GACA,MAAAA,GAsOA,QAAA8C,GAAAZ,EAAAa,EAAA9B,GACAA,EAAAA,GAAAvC,CACA,IAAAyD,GAAA/C,EAAA2D,QAEAb,GAAAa,EAAA,SAAAC,EAAA5C,EAAAa,GACA+B,EAAAtC,EAAA,SAAAgB,EAAAuB,GACAA,EAAA5W,QAAA,IACA4W,EAAAA,EAAA,IAEAd,EAAA/B,GAAA6C,EACAhC,EAAAS,OAEA,SAAAA,GACAT,EAAAS,EAAAS,KAwCA,QAAAe,GAAAhB,EAAA7C,EAAAL,EAAAiC,GACA,GAAAtB,KACAuC,GAAA7C,EAAA,SAAAW,EAAAP,EAAA8C,GACAvD,EAAAgB,EAAA,SAAA0B,EAAAyB,GACAxD,EAAAA,EAAAyD,OAAAD,OACAZ,EAAAb,MAEA,SAAAA,GACAT,EAAAS,EAAA/B,KA+EA,QAAA0D,GAAAC,EAAAC,EAAAC,GAOA,QAAAC,GAAAC,EAAA/V,EAAAgW,EAAA1C,GACA,GAAA,MAAAA,GAAA,kBAAAA,GACA,KAAA,IAAAhV,OAAA,mCAMA,OAJAyX,GAAAE,SAAA,EACAtE,EAAA3R,KACAA,GAAAA,IAEA,IAAAA,EAAAtB,QAAAqX,EAAAG,OAEAjC,EAAAkC,aAAA,WACAJ,EAAAK,WAGAxE,EAAA5R,EAAA,SAAAqV,GACA,GAAA1C,IACA3S,KAAAqV,EACA/B,SAAAA,GAAAvC,EAGAiF,GACAD,EAAAX,MAAAiB,QAAA1D,GAEAoD,EAAAX,MAAA/M,KAAAsK,GAGAoD,EAAAX,MAAA1W,SAAAqX,EAAAH,aACAG,EAAAO,kBAGArC,GAAAkC,aAAAJ,EAAAjF,UAEA,QAAAyF,GAAAR,EAAAX,GACA,MAAA,YACAoB,GAAA,CAEA,IAAAC,IAAA,EACAnB,EAAA/D,SACAK,GAAAwD,EAAA,SAAAC,GACAzD,EAAA8E,EAAA,SAAAf,EAAA7D,GACA6D,IAAAN,GAAAoB,IACAC,EAAAC,OAAA7E,EAAA,GACA2E,GAAA,KAIApB,EAAA/B,SAAAhC,MAAA+D,EAAAC,KAEAS,EAAAX,MAAA1W,OAAA8X,IAAA,GACAT,EAAAK,QAEAL,EAAAjF,WAzDA,GAAA,MAAA8E,EACAA,EAAA,MAEA,IAAA,IAAAA,EACA,KAAA,IAAAtX,OAAA,+BAyDA,IAAAkY,GAAA,EACAE,KACAX,GACAX,SACAQ,YAAAA,EACAC,QAAAA,EACAS,UAAAvF,EACA6F,MAAA7F,EACAqF,MAAArF,EACAkF,SAAA,EACAY,QAAA,EACAxO,KAAA,SAAArI,EAAAsT,GACAwC,EAAAC,EAAA/V,GAAA,EAAAsT,IAEAwD,KAAA,WACAf,EAAAK,MAAArF,EACAgF,EAAAX,UAEAiB,QAAA,SAAArW,EAAAsT,GACAwC,EAAAC,EAAA/V,GAAA,EAAAsT,IAEAxC,QAAA,WACA,IAAAiF,EAAAc,QAAAL,EAAAT,EAAAH,aAAAG,EAAAX,MAAA1W,OACA,KAAA8X,EAAAT,EAAAH,aAAAG,EAAAX,MAAA1W,QAAA,CACA,GAAA0W,GAAAW,EAAAF,QACAE,EAAAX,MAAAuB,OAAA,EAAAZ,EAAAF,SACAE,EAAAX,MAAAuB,OAAA,EAAAZ,EAAAX,MAAA1W,QAEAsB,EAAA+R,EAAAqD,EAAA,SAAAC,GACA,MAAAA,GAAArV,MAGA,KAAA+V,EAAAX,MAAA1W,QACAqX,EAAAa,QAEAJ,GAAA,EACAE,EAAArO,KAAA+M,EAAA,GACA,IAAAR,GAAAxD,EAAAmF,EAAAR,EAAAX,GACAO,GAAA3V,EAAA4U,KAIAlW,OAAA,WACA,MAAAqX,GAAAX,MAAA1W,QAEAkV,QAAA,WACA,MAAA4C,IAEAE,YAAA,WACA,MAAAA,IAEAR,KAAA,WACA,MAAAH,GAAAX,MAAA1W,OAAA8X,IAAA,GAEAO,MAAA,WACAhB,EAAAc,QAAA,GAEAG,OAAA,WACA,GAAAjB,EAAAc,UAAA,EAAA,CACAd,EAAAc,QAAA,CAIA,KAAA,GAHAI,GAAA/D,KAAAgE,IAAAnB,EAAAH,YAAAG,EAAAX,MAAA1W,QAGAyY,EAAA,EAAAF,GAAAE,EAAAA,IACAlD,EAAAkC,aAAAJ,EAAAjF,WAIA,OAAAiF,GA+EA,QAAAqB,GAAAlL,GACA,MAAA6G,GAAA,SAAA1B,EAAAiE,GACAjE,EAAAC,MAAA,KAAAgE,EAAAG,QAAA1C,EAAA,SAAAgB,EAAAuB,GACA,gBAAAhL,WACAyJ,EACAzJ,QAAAC,OACAD,QAAAC,MAAAwJ,GAGAzJ,QAAA4B,IACA0F,EAAA0D,EAAA,SAAAjD,GACA/H,QAAA4B,GAAAmG,aAmDA,QAAAgF,GAAAC,GACA,MAAA,UAAApF,EAAAL,EAAAyB,GACAgE,EAAArF,EAAAC,GAAAL,EAAAyB,IAsCA,QAAAiE,GAAAhD,GACA,MAAAxB,GAAA,SAAAyE,EAAAlC,GACA,GAAAmC,GAAA1E,EAAA,SAAAuC,GACA,GAAAoC,GAAAha,KACA4V,EAAAgC,EAAAqC,KACA,OAAApD,GAAAiD,EAAA,SAAAnG,EAAA4D,EAAAL,GACAvD,EAAAC,MAAAoG,EAAApC,EAAAG,QAAAb,MAEAtB,IAEA,OAAAgC,GAAA5W,OACA+Y,EAAAnG,MAAA5T,KAAA4X,GAGAmC,IAqBA,QAAAG,GAAAvG,GACA,MAAA0B,GAAA,SAAAuC,GACA,GAAAhC,GAAAgC,EAAAqC,KACArC,GAAAjN,KAAA,WACA,GAAAwP,GAAAtG,SACAuG,GACA7D,EAAAkC,aAAA,WACA7C,EAAAhC,MAAA,KAAAuG,KAGAvE,EAAAhC,MAAA,KAAAuG,IAGA,IAAAC,IAAA,CACAzG,GAAAC,MAAA5T,KAAA4X,GACAwC,GAAA,IA/qCA,GAaAC,GAbA9D,KAkBA+D,EAAA,gBAAAva,OAAAA,KAAAA,OAAAA,MAAAA,MACA,gBAAAD,IAAAA,EAAAA,SAAAA,GAAAA,GACAE,IAEA,OAAAsa,IACAD,EAAAC,EAAA/D,OAGAA,EAAAgE,WAAA,WAEA,MADAD,GAAA/D,MAAA8D,EACA9D,EAqBA,IAAAiE,GAAAjL,OAAA1M,UAAA4X,SAEAxG,EAAAnI,MAAA4O,SAAA,SAAA3E,GACA,MAAA,mBAAAyE,EAAAzZ,KAAAgV,IAIA4E,EAAA,SAAA5E,GACA,GAAA1T,SAAA0T,EACA,OAAA,aAAA1T,GAAA,WAAAA,KAAA0T,GAwDAjB,EAAAvF,OAAAC,MAAA,SAAAuG,GACA,GAAAvG,KACA,KAAA,GAAAoL,KAAA7E,GACAA,EAAA8E,eAAAD,IACApL,EAAA7E,KAAAiQ,EAGA,OAAApL,IA2DAsL,EAAA,kBAAArC,eAAAA,aAEAsC,EAAAD,EAAA,SAAAnH,GAEAmH,EAAAnH,IACA,SAAAA,GACAqH,WAAArH,EAAA,GAGA,iBAAAP,IAAA,kBAAAA,GAAA6H,SACA1E,EAAA0E,SAAA7H,EAAA6H,SAEA1E,EAAA0E,SAAAF,EAEAxE,EAAAkC,aAAAqC,EAAAC,EAAAxE,EAAA0E,SAGA1E,EAAA2E,QACA3E,EAAA4E,KAAA,SAAAnH,EAAAG,EAAAyB,GACA,MAAAW,GAAAC,OAAAxC,EAAA2B,EAAAxB,GAAAyB,IAGAW,EAAA6E,cACA7E,EAAA8E,WAAA,SAAArH,EAAAG,EAAAyB,GACA,MAAAW,GAAAI,aAAA3C,EAAA2B,EAAAxB,GAAAyB,IAIAW,EAAA+E,aACA/E,EAAAgF,UAAA,SAAAvH,EAAA8B,EAAA3B,EAAAyB,GACA,MAAAC,GAAAC,GAAA9B,EAAA2B,EAAAxB,GAAAyB,IAGAW,EAAAiF,UACAjF,EAAAC,OAAA,SAAA3B,EAAAV,EAAAyB,GAcA,QAAAK,GAAAI,GACAoF,IACApF,EACAT,EAAAS,GAIA,OAAAtB,GAAA,GAAA0G,GACA7F,EAAA,MArBAA,EAAA9B,EAAA8B,GAAAvC,GACAwB,EAAAA,KAKA,KAHA,GACAE,GADA2G,EAAAxG,EAAAL,GACA4G,EAAA,EAEA,OAAA1G,EAAA2G,MACAD,GAAA,EACAtH,EAAAU,EAAAE,GAAAA,EAAArB,EAAAuC,GAGA,KAAAwF,GAAA7F,EAAA,OAeAW,EAAAoF,gBACApF,EAAAI,aAAA,SAAAZ,EAAA5B,EAAAyB,GAKA,QAAAgG,KACA,GAAAxB,IAAA,CACA,OAAA,QAAArF,EACAa,EAAA,OAEAzB,EAAA4B,EAAAhB,GAAAA,EAAArB,EAAA,SAAA2C,GACA,GAAAA,EACAT,EAAAS,OAEA,CAEA,GADAtB,EAAAiB,IACA,OAAAjB,EACA,MAAAa,GAAA,KAEAwE,GACA7D,EAAAkC,aAAAmD,GAEAA,aAKAxB,GAAA,IA1BAxE,EAAA9B,EAAA8B,GAAAvC,GACA0C,EAAAA,KACA,IAAAC,GAAAd,EAAAa,GACAhB,EAAAiB,GAyBA4F,MAKArF,EAAAsF,eACAtF,EAAAuF,YAAA,SAAA/F,EAAAD,EAAA3B,EAAAyB,GACAC,EAAAC,GAAAC,EAAA5B,EAAAyB,IA6EAW,EAAAwF,IAAAzF,EAAAM,GACAL,EAAAyF,UAAAtF,EAAAE,GACAL,EAAA0F,SAAAxF,EAAAG,GAIAL,EAAA2F,OACA3F,EAAA4F,MACA5F,EAAA6F,OAAA,SAAApI,EAAAU,EAAAP,EAAAyB,GACAW,EAAAI,aAAA3C,EAAA,SAAAW,EAAAhU,EAAAiV,GACAzB,EAAAO,EAAAC,EAAA,SAAA0B,EAAA9C,GACAmB,EAAAnB,EACAqC,EAAAS,MAEA,SAAAA,GACAT,EAAAS,EAAA3B,MAIA6B,EAAA8F,MACA9F,EAAA+F,YAAA,SAAAtI,EAAAU,EAAAP,EAAAyB,GACA,GAAA2G,GAAAlI,EAAAL,EAAAV,GAAAkJ,SACAjG,GAAA6F,OAAAG,EAAA7H,EAAAP,EAAAyB,IAGAW,EAAAkG,UAAA,SAAAzI,EAAAU,EAAAP,EAAAyB,GACA,IAAA/B,UAAA7S,SACA4U,EAAAzB,EACAA,EAAAO,EACAA,EAAAT,EAAAD,UAGAuC,EAAAC,OAAAxC,EAAA,SAAAT,EAAAqH,EAAA1D,GACA/C,EAAAO,EAAAnB,EAAAqH,EAAA1D,IACA,SAAAb,GACAT,EAAAS,EAAA3B,MAsBA6B,EAAAmG,OACAnG,EAAAoG,OAAArG,EAAAS,GAEAR,EAAAqG,YACArG,EAAAsG,YAAApG,EAAAM,GAEAR,EAAAuG,aACAvG,EAAAwG,aAAArG,EAAAK,GASAR,EAAAyG,OAAA1G,EAAAW,GACAV,EAAA0G,YAAAxG,EAAAQ,GACAV,EAAA2G,aAAAxG,EAAAO,GA2BAV,EAAA4G,IACA5G,EAAA6G,KAAAjG,EAAAZ,EAAAC,OAAAhD,EAAAF,GAEAiD,EAAA8G,UAAAlG,EAAAZ,EAAAuF,YAAAtI,EAAAF,GAEAiD,EAAA+G,IACA/G,EAAAgH,MAAApG,EAAAZ,EAAAC,OAAA/C,EAAAA,GAEA8C,EAAAiH,WAAArG,EAAAZ,EAAAuF,YAAArI,EAAAA,GAKA8C,EAAAkH,OAAAtG,EAAAZ,EAAAC,OAAAlD,EAAAkE,GACAjB,EAAAmH,aAAAvG,EAAAZ,EAAAI,aAAArD,EAAAkE,GACAjB,EAAAoH,YAAAxG,EAAAZ,EAAAuF,YAAAxI,EAAAkE,GAEAjB,EAAAqH,OAAA,SAAA5J,EAAAG,EAAAyB,GAsBA,QAAAiI,GAAAC,EAAAC,GACA,GAAAtd,GAAAqd,EAAAE,SAAAhZ,EAAA+Y,EAAAC,QACA,OAAAhZ,GAAAvE,EAAA,GAAAA,EAAAuE,EAAA,EAAA,EAvBAuR,EAAAwF,IAAA/H,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAA,SAAA0B,EAAA2H,GACA3H,EACAT,EAAAS,GAGAT,EAAA,MAAAzG,MAAAwF,EAAAqJ,SAAAA,OAGA,SAAA3H,EAAAS,GACA,MAAAT,GACAT,EAAAS,OAGAT,GAAA,KAAAvB,EAAAyC,EAAAE,KAAA6G,GAAA,SAAAlJ,GACA,MAAAA,GAAAxF,YAYAoH,EAAA0H,KAAA,SAAAvG,EAAAQ,EAAAtC,GAoBA,QAAAsI,GAAAvK,GACAwK,EAAAxF,QAAAhF,GAEA,QAAAyK,GAAAzK,GACA,GAAA0K,GAAArJ,EAAAmJ,EAAAxK,EACA0K,IAAA,GAAAF,EAAAlF,OAAAoF,EAAA,GAEA,QAAAC,KACAC,IACArK,EAAAiK,EAAAK,MAAA,GAAA,SAAA7K,GACAA,MA7BAiC,IAEAA,EAAAsC,EACAA,EAAA,MAEAtC,EAAA9B,EAAA8B,GAAAvC,EACA,IAAA7D,GAAAsF,EAAA4C,GACA6G,EAAA/O,EAAAxO,MACA,KAAAud,EACA,MAAA3I,GAAA,KAEAsC,KACAA,EAAAqG,EAGA,IAAAzH,MACA2H,EAAA,EAEAN,IAeAD,GAAA,WACAK,GACA3I,EAAA,KAAAkB,KAIA5C,EAAA1E,EAAA,SAAAoL,GAgCA,QAAA8D,KACA,MAAAxG,GAAAuG,GAAAhK,EAAAkK,EAAA,SAAAle,EAAAkU,GACA,MAAAlU,IAAAqW,EAAA+D,eAAAlG,KACA,KAAAmC,EAAA+D,eAAAD,GASA,QAAAgE,KACAF,MACAD,IACAL,EAAAQ,GACAjH,EAAAA,EAAA3W,OAAA,GAAA6d,EAAA/H,IAxBA,IAvBA,GAsBAgI,GAtBAnH,EAAA1D,EAAAyD,EAAAkD,IAAAlD,EAAAkD,IAAAlD,EAAAkD,IACAiE,EAAAxJ,EAAA,SAAAgB,EAAAuB,GAKA,GAJA6G,IACA7G,EAAA5W,QAAA,IACA4W,EAAAA,EAAA,IAEAvB,EAAA,CACA,GAAA0I,KACAnK,GAAAkC,EAAA,SAAAkI,EAAAC,GACAF,EAAAE,GAAAD,IAEAD,EAAAnE,GAAAhD,EACAhC,EAAAS,EAAA0I,OAGAjI,GAAA8D,GAAAhD,EACArB,EAAAkC,aAAA6F,KAGAK,EAAAhH,EAAA6G,MAAA,EAAA7G,EAAA3W,OAAA,GAEAoU,EAAAuJ,EAAA3d,OAEAoU,KAAA,CACA,KAAA0J,EAAApH,EAAAiH,EAAAvJ,KACA,KAAA,IAAAxU,OAAA,4BAEA,IAAAqT,EAAA6K,IAAA9J,EAAA8J,EAAAlE,IAAA,EACA,KAAA,IAAAha,OAAA,2BAQA8d,KACAD,IACA9G,EAAAA,EAAA3W,OAAA,GAAA6d,EAAA/H,IAGAoH,EAAAU,MAcArI,EAAA2I,MAAA,SAAAC,EAAAxH,EAAA/B,GAWA,QAAAwJ,GAAAC,EAAAlf,GACA,GAAA,gBAAAA,GACAkf,EAAAF,MAAAG,SAAAnf,EAAA,KAAAof,MACA,CAAA,GAAA,gBAAApf,GAIA,KAAA,IAAAS,OAAA,gDAAAT,GAHAkf,GAAAF,MAAAG,SAAAnf,EAAAgf,MAAA,KAAAI,EACAF,EAAAG,SAAAF,SAAAnf,EAAAqf,SAAA,KAAAC,GAmBA,QAAAC,GAAAC,EAAAC,GACA,QAAAC,GAAAlI,EAAAmI,GACA,MAAA,UAAAC,GACApI,EAAA,SAAAtB,EAAA/B,GACAyL,GAAA1J,GAAAyJ,GAAAzJ,IAAAA,EAAA/B,OAAAA,KACAsL,IAIA,QAAAI,GAAAR,GACA,MAAA,UAAAO,GACA/E,WAAA,WACA+E,EAAA,OACAP,IAIA,KAAAS,EAAAd,OAAA,CAEA,GAAAW,KAAAG,EAAAd,OAAA,EACAe,GAAAvV,KAAAkV,EAAAI,EAAAtI,KAAAmI,KACAA,GAAAG,EAAAT,SAAA,GACAU,EAAAvV,KAAAqV,EAAAC,EAAAT,WAIAjJ,EAAA4J,OAAAD,EAAA,SAAAjK,EAAA3T,GACAA,EAAAA,EAAAA,EAAAtB,OAAA,IACA2e,GAAAM,EAAArK,UAAAtT,EAAA+T,IAAA/T,EAAAgS,UA9DA,GAAAiL,GAAA,EACAE,EAAA,EAEAS,KAEAD,GACAd,MAAAI,EACAC,SAAAC,GAcAze,EAAA6S,UAAA7S,MACA,IAAA,EAAAA,GAAAA,EAAA,EACA,KAAA,IAAAJ,OAAA,wGA4CA,OA3CA,IAAAI,GAAA,kBAAAme,KACAvJ,EAAA+B,EACAA,EAAAwH,GAEA,kBAAAA,IACAC,EAAAa,EAAAd,GAEAc,EAAArK,SAAAA,EACAqK,EAAAtI,KAAAA,EAmCAsI,EAAArK,SAAA8J,IAAAA,GAGAnJ,EAAA6J,UAAA,SAAA1I,EAAA9B,GASA,QAAAyK,GAAAlM,GACA,MAAAkB,GAAA,SAAAgB,EAAAuB,GACA,GAAAvB,EACAT,EAAAhC,MAAA,MAAAyC,GAAA0B,OAAAH,QAEA,CACA,GAAA0I,GAAAnM,EAAAmM,MACAA,GACA1I,EAAAjN,KAAA0V,EAAAC,IAGA1I,EAAAjN,KAAAiL,GAEAsE,EAAA/F,GAAAP,MAAA,KAAAgE,MApBA,GADAhC,EAAA9B,EAAA8B,GAAAvC,IACAY,EAAAyD,GAAA,CACA,GAAArB,GAAA,GAAAzV,OAAA,4DACA,OAAAgV,GAAAS,GAEA,MAAAqB,GAAA1W,WAoBAqf,GAAA9J,EAAApC,SAAAuD,MAnBA9B,KAuCAW,EAAAgK,SAAA,SAAA7I,EAAA9B,GACA6B,EAAAlB,EAAAC,OAAAkB,EAAA9B,IAGAW,EAAAiK,cAAA,SAAA9I,EAAA5B,EAAAF,GACA6B,EAAA5B,EAAAC,GAAA4B,EAAA9B,IAGAW,EAAA4J,OAAA,SAAAzI,EAAA9B,GACA6B,EAAAlB,EAAAI,aAAAe,EAAA9B,IAGAW,EAAApC,SAAA,SAAAuD,GACA,QAAA+I,GAAArM,GACA,QAAAT,KAIA,MAHA+D,GAAA1W,QACA0W,EAAAtD,GAAAR,MAAA,KAAAC,WAEAF,EAAA2M,OAKA,MAHA3M,GAAA2M,KAAA,WACA,MAAAlM,GAAAsD,EAAA1W,OAAA,EAAAyf,EAAArM,EAAA,GAAA,MAEAT,EAEA,MAAA8M,GAAA,IAGAlK,EAAA3C,MAAAyB,EAAA,SAAA1B,EAAAiE,GACA,MAAAvC,GAAA,SAAAqL,GACA,MAAA/M,GAAAC,MACA,KAAAgE,EAAAG,OAAA2I,QAgBAnK,EAAAwB,OAAAzB,EAAAuB,GACAtB,EAAAoK,aAAAjK,EAAAmB,GAEAtB,EAAAqK,OAAA,SAAAC,EAAA1M,EAAAyB,GAEA,GADAA,EAAAA,GAAAvC,EACAwN,IAAA,CACA,GAAAP,GAAAjL,EAAA,SAAAgB,EAAAuB,GACAvB,EACAT,EAAAS,GACAwK,EAAAjN,MAAA5T,KAAA4X,GACAzD,EAAAmM,GAEA1K,EAAA,OAGAzB,GAAAmM,OAEA1K,GAAA,OAIAW,EAAAuK,SAAA,SAAA3M,EAAA0M,EAAAjL,GACA,GAAAmL,GAAA,CACA,OAAAxK,GAAAqK,OAAA,WACA,QAAAG,GAAA,GAAAF,EAAAjN,MAAA5T,KAAA6T,YACAM,EAAAyB,IAGAW,EAAAyK,MAAA,SAAAH,EAAA1M,EAAAyB,GACA,MAAAW,GAAAqK,OAAA,WACA,OAAAC,EAAAjN,MAAA5T,KAAA6T,YACAM,EAAAyB,IAGAW,EAAA0K,QAAA,SAAA9M,EAAA0M,EAAAjL,GACA,MAAAW,GAAAuK,SAAA3M,EAAA,WACA,OAAA0M,EAAAjN,MAAA5T,KAAA6T,YACA+B,IAGAW,EAAA2K,OAAA,SAAAL,EAAA1M,EAAAyB,GACAA,EAAAA,GAAAvC,CAEA,IAAAiN,GAAAjL,EAAA,SAAAgB,EAAAuB,GACAvB,EACAT,EAAAS,IAEAuB,EAAAjN,KAAAyM,GACAyJ,EAAAjN,MAAA5T,KAAA4X,MAIAR,EAAA,SAAAf,EAAA8K,GACA9K,EACAT,EAAAS,GACA8K,EACAhN,EAAAmM,GAEA1K,EAAA,MAIAiL,GAAAzJ,IAGAb,EAAA6K,SAAA,SAAAjN,EAAA0M,EAAAjL,GACA,GAAAmL,GAAA,CACAxK,GAAA2K,OAAA,SAAAZ,GACAS,IAAA,EACAT,EAAA,MAAA,GAEAO,EAAAjN,MAAA5T,KAAA6T,YAEAM,EAAAyB,IAwIAW,EAAA8K,MAAA,SAAApJ,EAAAC,GACA,GAAAG,GAAAL,EAAA,SAAAsJ,EAAApK,GACAe,EAAAqJ,EAAA,GAAApK,IACAgB,EAAA,EAEA,OAAAG,IAGA9B,EAAAgL,cAAA,SAAAtJ,EAAAC,GAEA,QAAAsJ,GAAA/gB,EAAAuE,GACA,MAAAvE,GAAAghB,SAAAzc,EAAAyc,SAGA,QAAAC,GAAAC,EAAA1M,EAAA2M,GAGA,IAFA,GAAAC,GAAA,GACAC,EAAAH,EAAA3gB,OAAA,EACA8gB,EAAAD,GAAA,CACA,GAAAE,GAAAF,GAAAC,EAAAD,EAAA,IAAA,EACAD,GAAA3M,EAAA0M,EAAAI,KAAA,EACAF,EAAAE,EAEAD,EAAAC,EAAA,EAGA,MAAAF,GAGA,QAAAzJ,GAAAC,EAAA/V,EAAAmf,EAAA7L,GACA,GAAA,MAAAA,GAAA,kBAAAA,GACA,KAAA,IAAAhV,OAAA,mCAMA,OAJAyX,GAAAE,SAAA,EACAtE,EAAA3R,KACAA,GAAAA,IAEA,IAAAA,EAAAtB,OAEAuV,EAAAkC,aAAA,WACAJ,EAAAK,cAGAxE,GAAA5R,EAAA,SAAAqV,GACA,GAAA1C,IACA3S,KAAAqV,EACA8J,SAAAA,EACA7L,SAAA,kBAAAA,GAAAA,EAAAvC,EAGAgF,GAAAX,MAAAuB,OAAAyI,EAAArJ,EAAAX,MAAAzC,EAAAuM,GAAA,EAAA,EAAAvM,GAEAoD,EAAAX,MAAA1W,SAAAqX,EAAAH,aACAG,EAAAO,YAEArC,EAAAkC,aAAAJ,EAAAjF,WAKA,GAAAiF,GAAA9B,EAAA8K,MAAApJ,EAAAC,EAUA,OAPAG,GAAA1N,KAAA,SAAArI,EAAAmf,EAAA7L,GACAwC,EAAAC,EAAA/V,EAAAmf,EAAA7L,UAIAyC,GAAAM,QAEAN,GAGA9B,EAAAyL,MAAA,SAAA/J,EAAAE,GACA,MAAAH,GAAAC,EAAA,EAAAE,IAqBA5B,EAAA7I,IAAAgM,EAAA,OACAnD,EAAA0L,IAAAvI,EAAA,OAKAnD,EAAA2L,QAAA,SAAAvO,EAAAwO,GACA,GAAAzN,MACA0N,IACAD,GAAAA,GAAA7O,CACA,IAAA+O,GAAAhN,EAAA,SAAAuC,GACA,GAAAhC,GAAAgC,EAAAqC,MACAlF,EAAAoN,EAAAvO,MAAA,KAAAgE,EACA7C,KAAAL,GACA6B,EAAAkC,aAAA,WACA7C,EAAAhC,MAAA,KAAAc,EAAAK,MAGAA,IAAAqN,GACAA,EAAArN,GAAApK,KAAAiL,IAGAwM,EAAArN,IAAAa,GACAjC,EAAAC,MAAA,KAAAgE,EAAAG,QAAA1C,EAAA,SAAAuC,GACAlD,EAAAK,GAAA6C,CACA,IAAAS,GAAA+J,EAAArN,SACAqN,GAAArN,EACA,KAAA,GAAApU,GAAA,EAAAG,EAAAuX,EAAArX,OAAAF,EAAAH,EAAAA,IACA0X,EAAA1X,GAAAiT,MAAA,KAAAgE,UAOA,OAFAyK,GAAA3N,KAAAA,EACA2N,EAAAC,WAAA3O,EACA0O,GAGA9L,EAAAgM,UAAA,SAAA5O,GACA,MAAA,YACA,OAAAA,EAAA2O,YAAA3O,GAAAC,MAAA,KAAAC,aAUA0C,EAAA4I,MAAAxF,EAAApD,EAAAwF,KACAxF,EAAAiM,YAAA7I,EAAApD,EAAAyF,WACAzF,EAAAkM,WAAA,SAAAjO,EAAAsB,EAAA3B,EAAAyB,GACA,MAAAW,GAAA0F,SAAA1H,EAAAC,GAAAsB,EAAA3B,EAAAyB,IAGAW,EAAAmM,IAAA,WACA,GAAA5I,GAAAjG,SACA,OAAAwB,GAAA,SAAAuC,GACA,GAAAoC,GAAAha,KAEA4V,EAAAgC,EAAAA,EAAA5W,OAAA,EACA,mBAAA4U,GACAgC,EAAAqC,MAEArE,EAAAvC,EAGAkD,EAAA6F,OAAAtC,EAAAlC,EAAA,SAAA+K,EAAAhP,EAAAuD,GACAvD,EAAAC,MAAAoG,EAAA2I,EAAA5K,QAAA1C,EAAA,SAAAgB,EAAAuM,GACA1L,EAAAb,EAAAuM,SAGA,SAAAvM,EAAAS,GACAlB,EAAAhC,MAAAoG,GAAA3D,GAAA0B,OAAAjB,SAKAP,EAAAsM,QAAA,WACA,MAAAtM,GAAAmM,IAAA9O,MAAA,KAAA9H,MAAAjJ,UAAA2Z,QAAAzb,KAAA8S,aAuBA0C,EAAAuM,UAAAjJ,EAAAtD,EAAAC,QACAD,EAAAwM,gBAAAlJ,EAAAtD,EAAAI,cAGAJ,EAAAyM,QAAA,SAAArP,EAAAiC,GAGA,QAAA0K,GAAAjK,GACA,MAAAA,GACAJ,EAAAI,OAEAsB,GAAA2I,GANA,GAAArK,GAAAvC,EAAAkC,GAAAvC,GACAsE,EAAAuC,EAAAvG,EAOA2M,MAsBA/J,EAAA2D,YAAAA,EAEA3D,EAAA0M,SAAA5N,EAAA,SAAA6N,GACA,GAAAtL,IAAA,MAAAG,OAAAmL,EACA,OAAA,UAAAtN,GACA,MAAAA,GAAAhC,MAAA5T,KAAA4X,MAIArB,EAAA4M,SACA5M,EAAA6M,SAAA,SAAA9N,GACA,MAAAD,GAAA,SAAAuC,GACA,GACAtD,GADAsB,EAAAgC,EAAAqC,KAEA,KACA3F,EAAAgB,EAAA1B,MAAA5T,KAAA4X,GACA,MAAA1X,GACA,MAAA0V,GAAA1V,GAGAya,EAAArG,IAAA,kBAAAA,GAAA+O,KACA/O,EAAA+O,KAAA,SAAAlU,GACAyG,EAAA,KAAAzG,KACA,SAAA,SAAAkH,GACAT,EAAAS,EAAAiN,QAAAjN,EAAA,GAAAzV,OAAAyV,MAGAT,EAAA,KAAAtB,MAMA,gBAAA7U,IAAAA,EAAAD,QACAC,EAAAD,QAAA+W,EAGA,kBAAA7W,IAAAA,EAAAC,IACAD,KAAA,WACA,MAAA6W,KAKA+D,EAAA/D,MAAAA,OAKAxV,KAAAf,KAAAU,EAAA,YAAA,mBAAAZ,QAAAA,OAAA,mBAAAC,MAAAA,KAAA,mBAAAF,QAAAA,aAEA0jB,SAAA,KAAAC,IAAA,SAAA9iB,EAAAjB,EAAAD,IACA,SAAA4T,GA0BA,QAAAqQ,GAAAC,EAAAC,GAGA,IAAA,GADAC,GAAA,EACAjjB,EAAA+iB,EAAA1iB,OAAA,EAAAL,GAAA,EAAAA,IAAA,CACA,GAAAkjB,GAAAH,EAAA/iB,EACA,OAAAkjB,EACAH,EAAAzK,OAAAtY,EAAA,GACA,OAAAkjB,GACAH,EAAAzK,OAAAtY,EAAA,GACAijB,KACAA,IACAF,EAAAzK,OAAAtY,EAAA,GACAijB,KAKA,GAAAD,EACA,KAAAC,IAAAA,EACAF,EAAA/K,QAAA,KAIA,OAAA+K,GA+JA,QAAA/G,GAAAmH,EAAAvkB,GACA,GAAAukB,EAAAnH,OAAA,MAAAmH,GAAAnH,OAAApd,EAEA,KAAA,GADAwkB,MACApjB,EAAA,EAAAA,EAAAmjB,EAAA9iB,OAAAL,IACApB,EAAAukB,EAAAnjB,GAAAA,EAAAmjB,IAAAC,EAAApZ,KAAAmZ,EAAAnjB,GAEA,OAAAojB,GAhKA,GAAAC,GACA,gEACAC,EAAA,SAAAC,GACA,MAAAF,GAAAG,KAAAD,GAAA1F,MAAA,GAKAhf,GAAA4kB,QAAA,WAIA,IAAA,GAHAC,GAAA,GACAC,GAAA,EAEA3jB,EAAAkT,UAAA7S,OAAA,EAAAL,GAAA,KAAA2jB,EAAA3jB,IAAA,CACA,GAAA4jB,GAAA5jB,GAAA,EAAAkT,UAAAlT,GAAAyS,EAAAoR,KAGA,IAAA,gBAAAD,GACA,KAAA,IAAAE,WAAA,4CACAF,KAIAF,EAAAE,EAAA,IAAAF,EACAC,EAAA,MAAAC,EAAAG,OAAA,IAWA,MAJAL,GAAAZ,EAAA9G,EAAA0H,EAAA1U,MAAA,KAAA,SAAAgV,GACA,QAAAA,KACAL,GAAA1T,KAAA,MAEA0T,EAAA,IAAA,IAAAD,GAAA,KAKA7kB,EAAAolB,UAAA,SAAAL,GACA,GAAAM,GAAArlB,EAAAqlB,WAAAN,GACAO,EAAA,MAAAC,EAAAR,EAAA,GAcA,OAXAA,GAAAd,EAAA9G,EAAA4H,EAAA5U,MAAA,KAAA,SAAAgV,GACA,QAAAA,KACAE,GAAAjU,KAAA,KAEA2T,GAAAM,IACAN,EAAA,KAEAA,GAAAO,IACAP,GAAA,MAGAM,EAAA,IAAA,IAAAN,GAIA/kB,EAAAqlB,WAAA,SAAAN,GACA,MAAA,MAAAA,EAAAG,OAAA,IAIAllB,EAAAoR,KAAA,WACA,GAAAoU,GAAAlZ,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA,OAAArU,GAAAolB,UAAAjI,EAAAqI,EAAA,SAAAL,EAAAvQ,GACA,GAAA,gBAAAuQ,GACA,KAAA,IAAAF,WAAA,yCAEA,OAAAE,KACA/T,KAAA,OAMApR,EAAAylB,SAAA,SAAAC,EAAAC,GAIA,QAAAC,GAAApR,GAEA,IADA,GAAAxJ,GAAA,EACAA,EAAAwJ,EAAAhT,QACA,KAAAgT,EAAAxJ,GADAA,KAKA,IADA,GAAAsX,GAAA9N,EAAAhT,OAAA,EACA8gB,GAAA,GACA,KAAA9N,EAAA8N,GADAA,KAIA,MAAAtX,GAAAsX,KACA9N,EAAAwK,MAAAhU,EAAAsX,EAAAtX,EAAA,GAfA0a,EAAA1lB,EAAA4kB,QAAAc,GAAAH,OAAA,GACAI,EAAA3lB,EAAA4kB,QAAAe,GAAAJ,OAAA,EAsBA,KAAA,GALAM,GAAAD,EAAAF,EAAAvV,MAAA,MACA2V,EAAAF,EAAAD,EAAAxV,MAAA,MAEA3O,EAAAwU,KAAAgE,IAAA6L,EAAArkB,OAAAskB,EAAAtkB,QACAukB,EAAAvkB,EACAL,EAAA,EAAAK,EAAAL,EAAAA,IACA,GAAA0kB,EAAA1kB,KAAA2kB,EAAA3kB,GAAA,CACA4kB,EAAA5kB,CACA,OAKA,IAAA,GADA6kB,MACA7kB,EAAA4kB,EAAA5kB,EAAA0kB,EAAArkB,OAAAL,IACA6kB,EAAA7a,KAAA,KAKA,OAFA6a,GAAAA,EAAAzN,OAAAuN,EAAA9G,MAAA+G,IAEAC,EAAA5U,KAAA,MAGApR,EAAAimB,IAAA,IACAjmB,EAAAkmB,UAAA,IAEAlmB,EAAAmmB,QAAA,SAAApB,GACA,GAAAjQ,GAAA2P,EAAAM,GACAjK,EAAAhG,EAAA,GACA2N,EAAA3N,EAAA,EAEA,OAAAgG,IAAA2H,GAKAA,IAEAA,EAAAA,EAAA8C,OAAA,EAAA9C,EAAAjhB,OAAA,IAGAsZ,EAAA2H,GARA,KAYAziB,EAAAomB,SAAA,SAAArB,EAAAzc,GACA,GAAAvI,GAAA0kB,EAAAM,GAAA,EAKA,OAHAzc,IAAAvI,EAAAwlB,OAAA,GAAAjd,EAAA9G,UAAA8G,IACAvI,EAAAA,EAAAwlB,OAAA,EAAAxlB,EAAAyB,OAAA8G,EAAA9G,SAEAzB,GAIAC,EAAAqmB,QAAA,SAAAtB,GACA,MAAAN,GAAAM,GAAA,GAaA,IAAAQ,GAAA,MAAA,KAAAA,OAAA,IACA,SAAAe,EAAAtb,EAAA4K,GAAA,MAAA0Q,GAAAf,OAAAva,EAAA4K,IACA,SAAA0Q,EAAAtb,EAAA4K,GAEA,MADA,GAAA5K,IAAAA,EAAAsb,EAAA9kB,OAAAwJ,GACAsb,EAAAf,OAAAva,EAAA4K,MAIArU,KAAAf,KAAAU,EAAA,eAEA6iB,SAAA,KAAAwC,IAAA,SAAArlB,EAAAjB,EAAAD,GASA,QAAAwmB,KACAC,GAAA,EACAC,EAAAllB,OACAqgB,EAAA6E,EAAAnO,OAAAsJ,GAEA8E,EAAA,GAEA9E,EAAArgB,QACAolB,IAIA,QAAAA,KACA,IAAAH,EAAA,CAGA,GAAAI,GAAArL,WAAAgL,EACAC,IAAA,CAGA,KADA,GAAA7Q,GAAAiM,EAAArgB,OACAoU,GAAA,CAGA,IAFA8Q,EAAA7E,EACAA,OACA8E,EAAA/Q,GACA8Q,GACAA,EAAAC,GAAAG,KAGAH,GAAA,GACA/Q,EAAAiM,EAAArgB,OAEAklB,EAAA,KACAD,GAAA,EACAM,aAAAF,IAiBA,QAAAG,GAAAC,EAAAzY,GACAhO,KAAAymB,IAAAA,EACAzmB,KAAAgO,MAAAA,EAYA,QAAAqF,MAtEA,GAGA6S,GAHA9S,EAAA3T,EAAAD,WACA6hB,KACA4E,GAAA,EAEAE,EAAA,EAsCA/S,GAAA6H,SAAA,SAAAwL,GACA,GAAA7O,GAAA,GAAA9L,OAAA+H,UAAA7S,OAAA,EACA,IAAA6S,UAAA7S,OAAA,EACA,IAAA,GAAAL,GAAA,EAAAA,EAAAkT,UAAA7S,OAAAL,IACAiX,EAAAjX,EAAA,GAAAkT,UAAAlT,EAGA0gB,GAAA1W,KAAA,GAAA6b,GAAAC,EAAA7O,IACA,IAAAyJ,EAAArgB,QAAAilB,GACAjL,WAAAoL,EAAA,IASAI,EAAA3jB,UAAAyjB,IAAA,WACAtmB,KAAAymB,IAAA7S,MAAA,KAAA5T,KAAAgO,QAEAoF,EAAAsT,MAAA,UACAtT,EAAAuT,SAAA,EACAvT,EAAAwT,OACAxT,EAAAyT,QACAzT,EAAA0T,QAAA,GACA1T,EAAA2T,YAIA3T,EAAA4T,GAAA3T,EACAD,EAAA8K,YAAA7K,EACAD,EAAA6T,KAAA5T,EACAD,EAAA8T,IAAA7T,EACAD,EAAAgL,eAAA/K,EACAD,EAAA+T,mBAAA9T,EACAD,EAAAgU,KAAA/T,EAEAD,EAAAiU,QAAA,SAAA7Y,GACA,KAAA,IAAA5N,OAAA,qCAGAwS,EAAAoR,IAAA,WAAA,MAAA,KACApR,EAAAkU,MAAA,SAAArF,GACA,KAAA,IAAArhB,OAAA,mCAEAwS,EAAAmU,MAAA,WAAA,MAAA,SAEAC,IAAA,SAAA9mB,EAAAjB,EAAAD,IACA,SAAAM,IAEA,SAAAwa,GAgEA,QAAAzN,GAAAxK,GACA,KAAA,IAAAolB,YAAAC,EAAArlB,IAWA,QAAA0Z,GAAA/N,EAAA2F,GAGA,IAFA,GAAA3S,GAAAgN,EAAAhN,OACAsT,KACAtT,KACAsT,EAAAtT,GAAA2S,EAAA3F,EAAAhN,GAEA,OAAAsT,GAaA,QAAAqT,GAAAC,EAAAjU,GACA,GAAA+P,GAAAkE,EAAAjY,MAAA,KACA2E,EAAA,EACAoP,GAAA1iB,OAAA,IAGAsT,EAAAoP,EAAA,GAAA,IACAkE,EAAAlE,EAAA,IAGAkE,EAAAA,EAAA3Y,QAAA4Y,EAAA,IACA,IAAAC,GAAAF,EAAAjY,MAAA,KACAoY,EAAAhM,EAAA+L,EAAAnU,GAAA/C,KAAA,IACA,OAAA0D,GAAAyT,EAgBA,QAAAC,GAAAJ,GAMA,IALA,GAGAzY,GACA8Y,EAJAC,KACAC,EAAA,EACAnnB,EAAA4mB,EAAA5mB,OAGAA,EAAAmnB,GACAhZ,EAAAyY,EAAAQ,WAAAD,KACAhZ,GAAA,OAAA,OAAAA,GAAAnO,EAAAmnB,GAEAF,EAAAL,EAAAQ,WAAAD,KACA,QAAA,MAAAF,GACAC,EAAAvd,OAAA,KAAAwE,IAAA,KAAA,KAAA8Y,GAAA,QAIAC,EAAAvd,KAAAwE,GACAgZ,MAGAD,EAAAvd,KAAAwE,EAGA,OAAA+Y,GAWA,QAAAG,GAAAra,GACA,MAAA+N,GAAA/N,EAAA,SAAAmB,GACA,GAAA+Y,GAAA,EAOA,OANA/Y,GAAA,QACAA,GAAA,MACA+Y,GAAAI,EAAAnZ,IAAA,GAAA,KAAA,OACAA,EAAA,MAAA,KAAAA,GAEA+Y,GAAAI,EAAAnZ,KAEAyB,KAAA,IAYA,QAAA2X,GAAAC,GACA,MAAA,IAAAA,EAAA,GACAA,EAAA,GAEA,GAAAA,EAAA,GACAA,EAAA,GAEA,GAAAA,EAAA,GACAA,EAAA,GAEAC,EAcA,QAAAC,GAAAC,EAAAC,GAGA,MAAAD,GAAA,GAAA,IAAA,GAAAA,KAAA,GAAAC,IAAA,GAQA,QAAAC,GAAAC,EAAAC,EAAAC,GACA,GAAApO,GAAA,CAGA,KAFAkO,EAAAE,EAAAC,EAAAH,EAAAI,GAAAJ,GAAA,EACAA,GAAAG,EAAAH,EAAAC,GACAD,EAAAK,EAAAC,GAAA,EAAAxO,GAAA6N,EACAK,EAAAG,EAAAH,EAAAK,EAEA,OAAAF,GAAArO,GAAAuO,EAAA,GAAAL,GAAAA,EAAAO,IAUA,QAAAC,GAAAC,GAEA,GAEAC,GAIAC,EACAC,EACAtV,EACAuV,EACAlQ,EACAmB,EACA+N,EACAxoB,EAEAypB,EAfA1B,KACA2B,EAAAN,EAAAvoB,OAEAL,EAAA,EACAP,EAAA0pB,EACAC,EAAAC,CAqBA,KALAP,EAAAF,EAAAU,YAAAvE,GACA,EAAA+D,IACAA,EAAA,GAGAC,EAAA,EAAAD,EAAAC,IAAAA,EAEAH,EAAAnB,WAAAsB,IAAA,KACA7c,EAAA,aAEAqb,EAAAvd,KAAA4e,EAAAnB,WAAAsB,GAMA,KAAAtV,EAAAqV,EAAA,EAAAA,EAAA,EAAA,EAAAI,EAAAzV,GAAA,CAOA,IAAAuV,EAAAhpB,EAAA8Y,EAAA,EAAAmB,EAAA6N,EAEArU,GAAAyV,GACAhd,EAAA,iBAGA8b,EAAAJ,EAAAgB,EAAAnB,WAAAhU,OAEAuU,GAAAF,GAAAE,EAAAM,GAAAiB,EAAAvpB,GAAA8Y,KACA5M,EAAA,YAGAlM,GAAAgoB,EAAAlP,EACAtZ,EAAA4pB,GAAAnP,EAAAuP,EAAAvP,GAAAmP,EAAAX,EAAAA,EAAAxO,EAAAmP,IAEA5pB,EAAAwoB,GAfA/N,GAAA6N,EAmBAmB,EAAAnB,EAAAtoB,EACAsZ,EAAAwP,EAAAiB,EAAAN,IACA/c,EAAA,YAGA4M,GAAAmQ,CAIAJ,GAAAtB,EAAAlnB,OAAA,EACA+oB,EAAAlB,EAAAloB,EAAAgpB,EAAAH,EAAA,GAAAG,GAIAV,EAAAtoB,EAAA6oB,GAAAU,EAAA9pB,GACAyM,EAAA,YAGAzM,GAAA6oB,EAAAtoB,EAAA6oB,GACA7oB,GAAA6oB,EAGAtB,EAAAjP,OAAAtY,IAAA,EAAAP,GAIA,MAAAioB,GAAAH,GAUA,QAAAkC,GAAAb,GACA,GAAAnpB,GACA0oB,EACAuB,EACAC,EACAP,EACAL,EACAa,EACAlS,EACAuC,EACAza,EACAqqB,EAGAX,EAEAY,EACAb,EACAc,EANAxC,IAoBA,KAXAqB,EAAAvB,EAAAuB,GAGAM,EAAAN,EAAAvoB,OAGAZ,EAAA0pB,EACAhB,EAAA,EACAiB,EAAAC,EAGAN,EAAA,EAAAG,EAAAH,IAAAA,EACAc,EAAAjB,EAAAG,GACA,IAAAc,GACAtC,EAAAvd,KAAA2d,EAAAkC,GAeA,KAXAH,EAAAC,EAAApC,EAAAlnB,OAMAspB,GACApC,EAAAvd,KAAA+a,GAIAmE,EAAAQ,GAAA,CAIA,IAAAE,EAAAL,EAAAR,EAAA,EAAAG,EAAAH,IAAAA,EACAc,EAAAjB,EAAAG,GACAc,GAAApqB,GAAAmqB,EAAAC,IACAD,EAAAC,EAcA,KARAC,EAAAJ,EAAA,EACAE,EAAAnqB,EAAA6oB,GAAAiB,EAAApB,GAAA2B,IACA5d,EAAA,YAGAic,IAAAyB,EAAAnqB,GAAAqqB,EACArqB,EAAAmqB,EAEAb,EAAA,EAAAG,EAAAH,IAAAA,EAOA,GANAc,EAAAjB,EAAAG,GAEAtpB,EAAAoqB,KAAA1B,EAAAoB,GACArd,EAAA,YAGA2d,GAAApqB,EAAA,CAEA,IAAAiY,EAAAyQ,EAAAlO,EAAA6N,EACAtoB,EAAA4pB,GAAAnP,EAAAuP,EAAAvP,GAAAmP,EAAAX,EAAAA,EAAAxO,EAAAmP,IACA5pB,EAAAkY,GAFAuC,GAAA6N,EAKAiC,EAAArS,EAAAlY,EACAypB,EAAAnB,EAAAtoB,EACA+nB,EAAAvd,KACA2d,EAAAI,EAAAvoB,EAAAuqB,EAAAd,EAAA,KAEAvR,EAAA4Q,EAAAyB,EAAAd,EAGA1B,GAAAvd,KAAA2d,EAAAI,EAAArQ,EAAA,KACA0R,EAAAlB,EAAAC,EAAA2B,EAAAJ,GAAAC,GACAxB,EAAA,IACAuB,IAIAvB,IACA1oB,EAGA,MAAA8nB,GAAAtX,KAAA,IAcA,QAAA+Z,GAAApB,GACA,MAAA5B,GAAA4B,EAAA,SAAA3B,GACA,MAAAgD,GAAA/J,KAAA+G,GACA0B,EAAA1B,EAAApJ,MAAA,GAAAqM,eACAjD,IAeA,QAAAkD,GAAAvB,GACA,MAAA5B,GAAA4B,EAAA,SAAA3B,GACA,MAAAmD,GAAAlK,KAAA+G,GACA,OAAAwC,EAAAxC,GACAA,IAvdA,GAAAoD,GAAA,gBAAAxrB,IAAAA,IACAA,EAAAyrB,UAAAzrB,EACA0rB,EAAA,gBAAAzrB,IAAAA,IACAA,EAAAwrB,UAAAxrB,EACA0rB,EAAA,gBAAArrB,IAAAA,GAEAqrB,EAAArrB,SAAAqrB,GACAA,EAAAtrB,SAAAsrB,GACAA,EAAAprB,OAAAorB,KAEA7Q,EAAA6Q,EAQA,IAAAC,GAiCArW,EA9BAmV,EAAA,WAGAzB,EAAA,GACA0B,EAAA,EACAf,EAAA,GACAC,EAAA,GACAH,EAAA,IACAc,EAAA,GACAF,EAAA,IACApE,EAAA,IAGAkF,EAAA,QACAG,EAAA,eACAlD,EAAA,4BAGAH,GACA2D,SAAA,kDACAC,YAAA,iDACAC,gBAAA,iBAIApC,EAAAV,EAAA0B,EACAlB,EAAAzT,KAAAyT,MACAX,EAAAkD,OAAAC,YAycA,IA3BAL,GAMAtE,QAAA,QAQA4E,MACApC,OAAAtB,EACAoC,OAAA/B,GAEAiB,OAAAA,EACAc,OAAAA,EACAU,QAAAA,EACAH,UAAAA,GAOA,kBAAAjrB,IACA,gBAAAA,GAAAC,KACAD,EAAAC,IAEAD,EAAA,WAAA,WACA,MAAA0rB,SAEA,IAAAJ,GAAAE,EACA,GAAAzrB,EAAAD,SAAAwrB,EAEAE,EAAA1rB,QAAA4rB,MAGA,KAAArW,IAAAqW,GACAA,EAAAvQ,eAAA9F,KAAAiW,EAAAjW,GAAAqW,EAAArW,QAKAuF,GAAA8Q,SAAAA,GAGAprB,QAEAe,KAAAf,KAAA,mBAAAF,QAAAA,OAAA,mBAAAC,MAAAA,KAAA,mBAAAF,QAAAA,gBAEA8rB,IAAA,SAAAjrB,EAAAjB,EAAAD,GAsBA,YAKA,SAAAqb,GAAA9E,EAAA6V,GACA,MAAArc,QAAA1M,UAAAgY,eAAA9Z,KAAAgV,EAAA6V,GAGAnsB,EAAAD,QAAA,SAAAqsB,EAAApG,EAAAqG,EAAAjhB,GACA4a,EAAAA,GAAA,IACAqG,EAAAA,GAAA,GACA,IAAA/V,KAEA,IAAA,gBAAA8V,IAAA,IAAAA,EAAA7qB,OACA,MAAA+U,EAGA,IAAAgW,GAAA,KACAF,GAAAA,EAAAlc,MAAA8V,EAEA,IAAAuG,GAAA,GACAnhB,IAAA,gBAAAA,GAAAmhB,UACAA,EAAAnhB,EAAAmhB,QAGA,IAAA5W,GAAAyW,EAAA7qB,MAEAgrB,GAAA,GAAA5W,EAAA4W,IACA5W,EAAA4W,EAGA,KAAA,GAAArrB,GAAA,EAAAyU,EAAAzU,IAAAA,EAAA,CACA,GAEAsrB,GAAAC,EAAAtR,EAAArH,EAFAoB,EAAAkX,EAAAlrB,GAAAsO,QAAA8c,EAAA,OACA1N,EAAA1J,EAAAwX,QAAAL;AAGAzN,GAAA,GACA4N,EAAAtX,EAAAoQ,OAAA,EAAA1G,GACA6N,EAAAvX,EAAAoQ,OAAA1G,EAAA,KAEA4N,EAAAtX,EACAuX,EAAA,IAGAtR,EAAAwR,mBAAAH,GACA1Y,EAAA6Y,mBAAAF,GAEArR,EAAA9E,EAAA6E,GAEAF,EAAA3E,EAAA6E,IACA7E,EAAA6E,GAAAjQ,KAAA4I,GAEAwC,EAAA6E,IAAA7E,EAAA6E,GAAArH,GAJAwC,EAAA6E,GAAArH,EAQA,MAAAwC,GAGA,IAAA2E,GAAA5O,MAAA4O,SAAA,SAAAoJ,GACA,MAAA,mBAAAvU,OAAA1M,UAAA4X,SAAA1Z,KAAA+iB,SAGAuI,IAAA,SAAA3rB,EAAAjB,EAAAD,GAsBA,YAgDA,SAAAuc,GAAA+H,EAAAvkB,GACA,GAAAukB,EAAA/H,IAAA,MAAA+H,GAAA/H,IAAAxc,EAEA,KAAA,GADAwkB,MACApjB,EAAA,EAAAA,EAAAmjB,EAAA9iB,OAAAL,IACAojB,EAAApZ,KAAApL,EAAAukB,EAAAnjB,GAAAA,GAEA,OAAAojB,GApDA,GAAAuI,GAAA,SAAA/Y,GACA,aAAAA,IACA,IAAA,SACA,MAAAA,EAEA,KAAA,UACA,MAAAA,GAAA,OAAA,OAEA,KAAA,SACA,MAAAgZ,UAAAhZ,GAAAA,EAAA,EAEA,SACA,MAAA,IAIA9T,GAAAD,QAAA,SAAAuW,EAAA0P,EAAAqG,EAAAtd,GAOA,MANAiX,GAAAA,GAAA,IACAqG,EAAAA,GAAA,IACA,OAAA/V,IACAA,EAAA7N,QAGA,gBAAA6N,GACAgG,EAAAyQ,EAAAzW,GAAA,SAAA6E,GACA,GAAA6R,GAAAC,mBAAAJ,EAAA1R,IAAAkR,CACA,OAAApR,GAAA3E,EAAA6E,IACAmB,EAAAhG,EAAA6E,GAAA,SAAArH,GACA,MAAAkZ,GAAAC,mBAAAJ,EAAA/Y,MACA3C,KAAA6U,GAEAgH,EAAAC,mBAAAJ,EAAAvW,EAAA6E,OAEAhK,KAAA6U,GAIAjX,EACAke,mBAAAJ,EAAA9d,IAAAsd,EACAY,mBAAAJ,EAAAvW,IAFA,GAKA,IAAA2E,GAAA5O,MAAA4O,SAAA,SAAAoJ,GACA,MAAA,mBAAAvU,OAAA1M,UAAA4X,SAAA1Z,KAAA+iB,IAYA0I,EAAAjd,OAAAC,MAAA,SAAAuG,GACA,GAAAgO,KACA,KAAA,GAAAhP,KAAAgB,GACAxG,OAAA1M,UAAAgY,eAAA9Z,KAAAgV,EAAAhB,IAAAgP,EAAApZ,KAAAoK,EAEA,OAAAgP,SAGA4I,IAAA,SAAAjsB,EAAAjB,EAAAD,GACA,YAEAA,GAAA8pB,OAAA9pB,EAAAotB,MAAAlsB,EAAA,YACAlB,EAAA4qB,OAAA5qB,EAAAqtB,UAAAnsB,EAAA,cAEAosB,WAAA,GAAAC,WAAA,KAAAC,IAAA,SAAAtsB,EAAAjB,EAAAD,GA+BA,QAAAytB,KACAjtB,KAAAktB,SAAA,KACAltB,KAAAmtB,QAAA,KACAntB,KAAAotB,KAAA,KACAptB,KAAAqtB,KAAA,KACArtB,KAAAstB,KAAA,KACAttB,KAAAutB,SAAA,KACAvtB,KAAAwtB,KAAA,KACAxtB,KAAAytB,OAAA,KACAztB,KAAA0tB,MAAA,KACA1tB,KAAA2tB,SAAA,KACA3tB,KAAAukB,KAAA,KACAvkB,KAAA4tB,KAAA,KAqDA,QAAAC,GAAAC,EAAAC,EAAAC,GACA,GAAAF,GAAAG,EAAAH,IAAAA,YAAAb,GAAA,MAAAa,EAEA,IAAAttB,GAAA,GAAAysB,EAEA,OADAzsB,GAAAosB,MAAAkB,EAAAC,EAAAC,GACAxtB,EA6OA,QAAA0tB,GAAAnY,GAMA,MADAoY,GAAApY,KAAAA,EAAA8X,EAAA9X,IACAA,YAAAkX,GACAlX,EAAA7O,SADA+lB,EAAApqB,UAAAqE,OAAAnG,KAAAgV,GA4DA,QAAAqY,GAAA5mB,EAAAyd,GACA,MAAA4I,GAAArmB,GAAA,GAAA,GAAA4c,QAAAa,GAOA,QAAAoJ,GAAA7mB,EAAAyd,GACA,MAAAzd,GACAqmB,EAAArmB,GAAA,GAAA,GAAA8mB,cAAArJ,GADAA,EAyRA,QAAAkJ,GAAAI,GACA,MAAA,gBAAAA,GAGA,QAAAN,GAAAM,GACA,MAAA,gBAAAA,IAAA,OAAAA,EAGA,QAAAC,GAAAD,GACA,MAAA,QAAAA,EAEA,QAAAE,GAAAF,GACA,MAAA,OAAAA,EA5qBA,GAAAnD,GAAA1qB,EAAA,WAEAlB,GAAAotB,MAAAiB,EACAruB,EAAA4kB,QAAAgK,EACA5uB,EAAA8uB,cAAAD,EACA7uB,EAAA0H,OAAAgnB,EAEA1uB,EAAAytB,IAAAA,CAqBA,IAAAyB,GAAA,oBACAC,EAAA,WAIAC,GAAA,IAAA,IAAA,IAAA,IAAA,IAAA,KAAA,KAAA,KAGAC,GAAA,IAAA,IAAA,IAAA,KAAA,IAAA,KAAA9W,OAAA6W,GAGAE,GAAA,KAAA/W,OAAA8W,GAKAE,GAAA,IAAA,IAAA,IAAA,IAAA,KAAAhX,OAAA+W,GACAE,GAAA,IAAA,IAAA,KACAC,EAAA,IACAC,EAAA,wBACAC,EAAA,8BAEAC,GACAC,YAAA,EACAC,eAAA,GAGAC,GACAF,YAAA,EACAC,eAAA,GAGAE,GACAC,MAAA,EACAC,OAAA,EACAC,KAAA,EACAC,QAAA,EACAC,MAAA,EACAC,SAAA,EACAC,UAAA,EACAC,QAAA,EACAC,WAAA,EACAC,SAAA,GAEAC,EAAAzvB,EAAA,cAUAusB,GAAApqB,UAAA+pB,MAAA,SAAAkB,EAAAC,EAAAC,GACA,IAAAG,EAAAL,GACA,KAAA,IAAArJ,WAAA,+CAAAqJ,GAGA,IAAApY,GAAAoY,CAIApY,GAAAA,EAAA0P,MAEA,IAAAgL,GAAA1B,EAAAvK,KAAAzO,EACA,IAAA0a,EAAA,CACAA,EAAAA,EAAA,EACA,IAAAC,GAAAD,EAAAvF,aACA7qB,MAAAktB,SAAAmD,EACA3a,EAAAA,EAAAqP,OAAAqL,EAAApvB,QAOA,GAAAgtB,GAAAoC,GAAA1a,EAAA4a,MAAA,wBAAA,CACA,GAAAnD,GAAA,OAAAzX,EAAAqP,OAAA,EAAA,IACAoI,GAAAiD,GAAAb,EAAAa,KACA1a,EAAAA,EAAAqP,OAAA,GACA/kB,KAAAmtB,SAAA,GAIA,IAAAoC,EAAAa,KACAjD,GAAAiD,IAAAZ,EAAAY,IAAA,CAmBA,IAAA,GADAG,GAAA,GACA5vB,EAAA,EAAAA,EAAAquB,EAAAhuB,OAAAL,IAAA,CACA,GAAA6vB,GAAA9a,EAAAyW,QAAA6C,EAAAruB,GACA,MAAA6vB,IAAA,KAAAD,GAAAA,EAAAC,KACAD,EAAAC,GAKA,GAAApD,GAAAqD,CAGAA,GAFA,KAAAF,EAEA7a,EAAAuU,YAAA,KAIAvU,EAAAuU,YAAA,IAAAsG,GAKA,KAAAE,IACArD,EAAA1X,EAAA8I,MAAA,EAAAiS,GACA/a,EAAAA,EAAA8I,MAAAiS,EAAA,GACAzwB,KAAAotB,KAAAhB,mBAAAgB,IAIAmD,EAAA,EACA,KAAA,GAAA5vB,GAAA,EAAAA,EAAAouB,EAAA/tB,OAAAL,IAAA,CACA,GAAA6vB,GAAA9a,EAAAyW,QAAA4C,EAAApuB,GACA,MAAA6vB,IAAA,KAAAD,GAAAA,EAAAC,KACAD,EAAAC,GAGA,KAAAD,IACAA,EAAA7a,EAAA1U,QAEAhB,KAAAqtB,KAAA3X,EAAA8I,MAAA,EAAA+R,GACA7a,EAAAA,EAAA8I,MAAA+R,GAGAvwB,KAAA0wB,YAIA1wB,KAAAutB,SAAAvtB,KAAAutB,UAAA,EAIA,IAAAoD,GAAA,MAAA3wB,KAAAutB,SAAA,IACA,MAAAvtB,KAAAutB,SAAAvtB,KAAAutB,SAAAvsB,OAAA,EAGA,KAAA2vB,EAEA,IAAA,GADAC,GAAA5wB,KAAAutB,SAAA5d,MAAA,MACAhP,EAAA,EAAAG,EAAA8vB,EAAA5vB,OAAAF,EAAAH,EAAAA,IAAA,CACA,GAAAkwB,GAAAD,EAAAjwB,EACA,IAAAkwB,IACAA,EAAAP,MAAApB,GAAA,CAEA,IAAA,GADA4B,GAAA,GACApH,EAAA,EAAA9O,EAAAiW,EAAA7vB,OAAA4Z,EAAA8O,EAAAA,IAKAoH,GAJAD,EAAAzI,WAAAsB,GAAA,IAIA,IAEAmH,EAAAnH,EAIA,KAAAoH,EAAAR,MAAApB,GAAA,CACA,GAAA6B,GAAAH,EAAApS,MAAA,EAAA7d,GACAqwB,EAAAJ,EAAApS,MAAA7d,EAAA,GACAswB,EAAAJ,EAAAP,MAAAnB,EACA8B,KACAF,EAAApmB,KAAAsmB,EAAA,IACAD,EAAArY,QAAAsY,EAAA,KAEAD,EAAAhwB,SACA0U,EAAA,IAAAsb,EAAApgB,KAAA,KAAA8E,GAEA1V,KAAAutB,SAAAwD,EAAAngB,KAAA,IACA,SAaA,GAPA5Q,KAAAutB,SAAAvsB,OAAAiuB,EACAjvB,KAAAutB,SAAA,GAGAvtB,KAAAutB,SAAAvtB,KAAAutB,SAAA1C,eAGA8F,EAAA,CAOA,IAAA,GAFAO,GAAAlxB,KAAAutB,SAAA5d,MAAA,KACAwhB,KACAxwB,EAAA,EAAAA,EAAAuwB,EAAAlwB,SAAAL,EAAA,CACA,GAAAL,GAAA4wB,EAAAvwB,EACAwwB,GAAAxmB,KAAArK,EAAAgwB,MAAA,kBACA,OAAAlF,EAAAhB,OAAA9pB,GAAAA,GAEAN,KAAAutB,SAAA4D,EAAAvgB,KAAA,KAGA,GAAA+T,GAAA3kB,KAAAstB,KAAA,IAAAttB,KAAAstB,KAAA,GACA8D,EAAApxB,KAAAutB,UAAA,EACAvtB,MAAAqtB,KAAA+D,EAAAzM,EACA3kB,KAAA4tB,MAAA5tB,KAAAqtB,KAIAsD,IACA3wB,KAAAutB,SAAAvtB,KAAAutB,SAAAxI,OAAA,EAAA/kB,KAAAutB,SAAAvsB,OAAA,GACA,MAAA0U,EAAA,KACAA,EAAA,IAAAA,IAOA,IAAA0Z,EAAAiB,GAKA,IAAA,GAAA1vB,GAAA,EAAAG,EAAAguB,EAAA9tB,OAAAF,EAAAH,EAAAA,IAAA,CACA,GAAA0wB,GAAAvC,EAAAnuB,GACA2wB,EAAA5E,mBAAA2E,EACAC,KAAAD,IACAC,EAAAC,OAAAF,IAEA3b,EAAAA,EAAA/F,MAAA0hB,GAAAzgB,KAAA0gB,GAMA,GAAA9D,GAAA9X,EAAAyW,QAAA,IACA,MAAAqB,IAEAxtB,KAAAwtB,KAAA9X,EAAAqP,OAAAyI,GACA9X,EAAAA,EAAA8I,MAAA,EAAAgP,GAEA,IAAAgE,GAAA9b,EAAAyW,QAAA,IAoBA,IAnBA,KAAAqF,GACAxxB,KAAAytB,OAAA/X,EAAAqP,OAAAyM,GACAxxB,KAAA0tB,MAAAhY,EAAAqP,OAAAyM,EAAA,GACAzD,IACA/tB,KAAA0tB,MAAAyC,EAAAvD,MAAA5sB,KAAA0tB,QAEAhY,EAAAA,EAAA8I,MAAA,EAAAgT,IACAzD,IAEA/tB,KAAAytB,OAAA,GACAztB,KAAA0tB,UAEAhY,IAAA1V,KAAA2tB,SAAAjY,GACA8Z,EAAAa,IACArwB,KAAAutB,WAAAvtB,KAAA2tB,WACA3tB,KAAA2tB,SAAA,KAIA3tB,KAAA2tB,UAAA3tB,KAAAytB,OAAA,CACA,GAAA9I,GAAA3kB,KAAA2tB,UAAA,GACArtB,EAAAN,KAAAytB,QAAA,EACAztB,MAAAukB,KAAAI,EAAArkB,EAKA,MADAN,MAAA4tB,KAAA5tB,KAAAkH,SACAlH,MAcAitB,EAAApqB,UAAAqE,OAAA,WACA,GAAAkmB,GAAAptB,KAAAotB,MAAA,EACAA,KACAA,EAAAV,mBAAAU,GACAA,EAAAA,EAAAne,QAAA,OAAA,KACAme,GAAA,IAGA,IAAAF,GAAAltB,KAAAktB,UAAA,GACAS,EAAA3tB,KAAA2tB,UAAA,GACAH,EAAAxtB,KAAAwtB,MAAA,GACAH,GAAA,EACAK,EAAA,EAEA1tB,MAAAqtB,KACAA,EAAAD,EAAAptB,KAAAqtB,KACArtB,KAAAutB,WACAF,EAAAD,GAAA,KAAAptB,KAAAutB,SAAApB,QAAA,KACAnsB,KAAAutB,SACA,IAAAvtB,KAAAutB,SAAA,KACAvtB,KAAAstB,OACAD,GAAA,IAAArtB,KAAAstB,OAIAttB,KAAA0tB,OACAO,EAAAjuB,KAAA0tB,QACAne,OAAAC,KAAAxP,KAAA0tB,OAAA1sB,SACA0sB,EAAAyC,EAAAtD,UAAA7sB,KAAA0tB,OAGA,IAAAD,GAAAztB,KAAAytB,QAAAC,GAAA,IAAAA,GAAA,EAsBA,OApBAR,IAAA,MAAAA,EAAAnI,OAAA,MAAAmI,GAAA,KAIAltB,KAAAmtB,WACAD,GAAAsC,EAAAtC,KAAAG,KAAA,GACAA,EAAA,MAAAA,GAAA,IACAM,GAAA,MAAAA,EAAAjJ,OAAA,KAAAiJ,EAAA,IAAAA,IACAN,IACAA,EAAA,IAGAG,GAAA,MAAAA,EAAA9I,OAAA,KAAA8I,EAAA,IAAAA,GACAC,GAAA,MAAAA,EAAA/I,OAAA,KAAA+I,EAAA,IAAAA,GAEAE,EAAAA,EAAA1e,QAAA,QAAA,SAAAqhB,GACA,MAAA5D,oBAAA4D,KAEA7C,EAAAA,EAAAxe,QAAA,IAAA,OAEAie,EAAAG,EAAAM,EAAAF,EAAAD,GAOAP,EAAApqB,UAAAuhB,QAAA,SAAAa,GACA,MAAAjlB,MAAAsuB,cAAAT,EAAA5I,GAAA,GAAA,IAAA/d,UAQA+lB,EAAApqB,UAAAyrB,cAAA,SAAArJ,GACA,GAAAkJ,EAAAlJ,GAAA,CACA,GAAAwM,GAAA,GAAAxE,EACAwE,GAAA7E,MAAA3H,GAAA,GAAA,GACAA,EAAAwM,EAGA,GAAAnd,GAAA,GAAA2Y,EAUA,IATA1d,OAAAC,KAAAxP,MAAAkb,QAAA,SAAAN,GACAtG,EAAAsG,GAAA5a,KAAA4a,IACA5a,MAIAsU,EAAAkZ,KAAAvI,EAAAuI,KAGA,KAAAvI,EAAA2I,KAEA,MADAtZ,GAAAsZ,KAAAtZ,EAAApN,SACAoN,CAIA,IAAA2Q,EAAAkI,UAAAlI,EAAAiI,SAcA,MAZA3d,QAAAC,KAAAyV,GAAA/J,QAAA,SAAAN,GACA,aAAAA,IACAtG,EAAAsG,GAAAqK,EAAArK,MAIA4U,EAAAlb,EAAA4Y,WACA5Y,EAAAiZ,WAAAjZ,EAAAqZ,WACArZ,EAAAiQ,KAAAjQ,EAAAqZ,SAAA,KAGArZ,EAAAsZ,KAAAtZ,EAAApN,SACAoN,CAGA,IAAA2Q,EAAAiI,UAAAjI,EAAAiI,WAAA5Y,EAAA4Y,SAAA,CASA,IAAAsC,EAAAvK,EAAAiI,UAKA,MAJA3d,QAAAC,KAAAyV,GAAA/J,QAAA,SAAAN,GACAtG,EAAAsG,GAAAqK,EAAArK,KAEAtG,EAAAsZ,KAAAtZ,EAAApN,SACAoN,CAIA,IADAA,EAAA4Y,SAAAjI,EAAAiI,SACAjI,EAAAoI,MAAAkC,EAAAtK,EAAAiI,UASA5Y,EAAAqZ,SAAA1I,EAAA0I,aATA,CAEA,IADA,GAAA+D,IAAAzM,EAAA0I,UAAA,IAAAhe,MAAA,KACA+hB,EAAA1wB,UAAAikB,EAAAoI,KAAAqE,EAAAC,WACA1M,EAAAoI,OAAApI,EAAAoI,KAAA,IACApI,EAAAsI,WAAAtI,EAAAsI,SAAA,IACA,KAAAmE,EAAA,IAAAA,EAAA/Y,QAAA,IACA+Y,EAAA1wB,OAAA,GAAA0wB,EAAA/Y,QAAA,IACArE,EAAAqZ,SAAA+D,EAAA9gB,KAAA,KAWA,GAPA0D,EAAAmZ,OAAAxI,EAAAwI,OACAnZ,EAAAoZ,MAAAzI,EAAAyI,MACApZ,EAAA+Y,KAAApI,EAAAoI,MAAA,GACA/Y,EAAA8Y,KAAAnI,EAAAmI,KACA9Y,EAAAiZ,SAAAtI,EAAAsI,UAAAtI,EAAAoI,KACA/Y,EAAAgZ,KAAArI,EAAAqI,KAEAhZ,EAAAqZ,UAAArZ,EAAAmZ,OAAA,CACA,GAAA9I,GAAArQ,EAAAqZ,UAAA,GACArtB,EAAAgU,EAAAmZ,QAAA,EACAnZ,GAAAiQ,KAAAI,EAAArkB,EAIA,MAFAgU,GAAA6Y,QAAA7Y,EAAA6Y,SAAAlI,EAAAkI,QACA7Y,EAAAsZ,KAAAtZ,EAAApN,SACAoN,EAGA,GAAAsd,GAAAtd,EAAAqZ,UAAA,MAAArZ,EAAAqZ,SAAAjJ,OAAA,GACAmN,EACA5M,EAAAoI,MACApI,EAAA0I,UAAA,MAAA1I,EAAA0I,SAAAjJ,OAAA,GAEAoN,EAAAD,GAAAD,GACAtd,EAAA+Y,MAAApI,EAAA0I,SACAoE,EAAAD,EACAE,EAAA1d,EAAAqZ,UAAArZ,EAAAqZ,SAAAhe,MAAA,SACA+hB,EAAAzM,EAAA0I,UAAA1I,EAAA0I,SAAAhe,MAAA,SACAsiB,EAAA3d,EAAA4Y,WAAAsC,EAAAlb,EAAA4Y,SA2BA,IApBA+E,IACA3d,EAAAiZ,SAAA,GACAjZ,EAAAgZ,KAAA,KACAhZ,EAAA+Y,OACA,KAAA2E,EAAA,GAAAA,EAAA,GAAA1d,EAAA+Y,KACA2E,EAAArZ,QAAArE,EAAA+Y,OAEA/Y,EAAA+Y,KAAA,GACApI,EAAAiI,WACAjI,EAAAsI,SAAA,KACAtI,EAAAqI,KAAA,KACArI,EAAAoI,OACA,KAAAqE,EAAA,GAAAA,EAAA,GAAAzM,EAAAoI,KACAqE,EAAA/Y,QAAAsM,EAAAoI,OAEApI,EAAAoI,KAAA,MAEAyE,EAAAA,IAAA,KAAAJ,EAAA,IAAA,KAAAM,EAAA,KAGAH,EAEAvd,EAAA+Y,KAAApI,EAAAoI,MAAA,KAAApI,EAAAoI,KACApI,EAAAoI,KAAA/Y,EAAA+Y,KACA/Y,EAAAiZ,SAAAtI,EAAAsI,UAAA,KAAAtI,EAAAsI,SACAtI,EAAAsI,SAAAjZ,EAAAiZ,SACAjZ,EAAAmZ,OAAAxI,EAAAwI,OACAnZ,EAAAoZ,MAAAzI,EAAAyI,MACAsE,EAAAN,MAEA,IAAAA,EAAA1wB,OAGAgxB,IAAAA,MACAA,EAAA/X,MACA+X,EAAAA,EAAAja,OAAA2Z,GACApd,EAAAmZ,OAAAxI,EAAAwI,OACAnZ,EAAAoZ,MAAAzI,EAAAyI,UACA,KAAAe,EAAAxJ,EAAAwI,QAAA,CAIA,GAAAwE,EAAA,CACA3d,EAAAiZ,SAAAjZ,EAAA+Y,KAAA2E,EAAAL,OAIA,IAAAO,GAAA5d,EAAA+Y,MAAA/Y,EAAA+Y,KAAAlB,QAAA,KAAA,EACA7X,EAAA+Y,KAAA1d,MAAA,MAAA,CACAuiB,KACA5d,EAAA8Y,KAAA8E,EAAAP,QACArd,EAAA+Y,KAAA/Y,EAAAiZ,SAAA2E,EAAAP,SAWA,MARArd,GAAAmZ,OAAAxI,EAAAwI,OACAnZ,EAAAoZ,MAAAzI,EAAAyI,MAEAc,EAAAla,EAAAqZ,WAAAa,EAAAla,EAAAmZ,UACAnZ,EAAAiQ,MAAAjQ,EAAAqZ,SAAArZ,EAAAqZ,SAAA,KACArZ,EAAAmZ,OAAAnZ,EAAAmZ,OAAA,KAEAnZ,EAAAsZ,KAAAtZ,EAAApN,SACAoN,EAGA,IAAA0d,EAAAhxB,OAWA,MARAsT,GAAAqZ,SAAA,KAEArZ,EAAAmZ,OACAnZ,EAAAiQ,KAAA,IAAAjQ,EAAAmZ,OAEAnZ,EAAAiQ,KAAA,KAEAjQ,EAAAsZ,KAAAtZ,EAAApN,SACAoN,CAcA,KAAA,GARAuP,GAAAmO,EAAAxT,MAAA,IAAA,GACA2T,GACA7d,EAAA+Y,MAAApI,EAAAoI,QAAA,MAAAxJ,GAAA,OAAAA,IACA,KAAAA,EAIAD,EAAA,EACAjjB,EAAAqxB,EAAAhxB,OAAAL,GAAA,EAAAA,IACAkjB,EAAAmO,EAAArxB,GACA,KAAAkjB,EACAmO,EAAA/Y,OAAAtY,EAAA,GACA,OAAAkjB,GACAmO,EAAA/Y,OAAAtY,EAAA,GACAijB,KACAA,IACAoO,EAAA/Y,OAAAtY,EAAA,GACAijB,IAKA,KAAAkO,IAAAC,EACA,KAAAnO,IAAAA,EACAoO,EAAArZ,QAAA,OAIAmZ,GAAA,KAAAE,EAAA,IACAA,EAAA,IAAA,MAAAA,EAAA,GAAAtN,OAAA,IACAsN,EAAArZ,QAAA,IAGAwZ,GAAA,MAAAH,EAAAphB,KAAA,KAAAmU,OAAA,KACAiN,EAAArnB,KAAA,GAGA,IAAAka,GAAA,KAAAmN,EAAA,IACAA,EAAA,IAAA,MAAAA,EAAA,GAAAtN,OAAA,EAGA,IAAAuN,EAAA,CACA3d,EAAAiZ,SAAAjZ,EAAA+Y,KAAAxI,EAAA,GACAmN,EAAAhxB,OAAAgxB,EAAAL,QAAA,EAIA,IAAAO,GAAA5d,EAAA+Y,MAAA/Y,EAAA+Y,KAAAlB,QAAA,KAAA,EACA7X,EAAA+Y,KAAA1d,MAAA,MAAA,CACAuiB,KACA5d,EAAA8Y,KAAA8E,EAAAP,QACArd,EAAA+Y,KAAA/Y,EAAAiZ,SAAA2E,EAAAP,SAyBA,MArBAG,GAAAA,GAAAxd,EAAA+Y,MAAA2E,EAAAhxB,OAEA8wB,IAAAjN,GACAmN,EAAArZ,QAAA,IAGAqZ,EAAAhxB,OAIAsT,EAAAqZ,SAAAqE,EAAAphB,KAAA,MAHA0D,EAAAqZ,SAAA,KACArZ,EAAAiQ,KAAA,MAMAiK,EAAAla,EAAAqZ,WAAAa,EAAAla,EAAAmZ,UACAnZ,EAAAiQ,MAAAjQ,EAAAqZ,SAAArZ,EAAAqZ,SAAA,KACArZ,EAAAmZ,OAAAnZ,EAAAmZ,OAAA,KAEAnZ,EAAA8Y,KAAAnI,EAAAmI,MAAA9Y,EAAA8Y,KACA9Y,EAAA6Y,QAAA7Y,EAAA6Y,SAAAlI,EAAAkI,QACA7Y,EAAAsZ,KAAAtZ,EAAApN,SACAoN,GAGA2Y,EAAApqB,UAAA6tB,UAAA,WACA,GAAArD,GAAArtB,KAAAqtB,KACAC,EAAAqB,EAAAxK,KAAAkJ,EACAC,KACAA,EAAAA,EAAA,GACA,MAAAA,IACAttB,KAAAstB,KAAAA,EAAAvI,OAAA,IAEAsI,EAAAA,EAAAtI,OAAA,EAAAsI,EAAArsB,OAAAssB,EAAAtsB,SAEAqsB,IAAArtB,KAAAutB,SAAAF,MAkBAjC,SAAA,GAAA+E,YAAA,KAAAiC,IAAA,SAAA1xB,EAAAjB,EAAAD,GACA,YAIA,SAAA6yB,GAAA/vB,EAAAgwB,EAAAC,GAEAA,EAAAA,GAAA,CAEA,IAAAC,GAAAF,GAAAA,EAAAtxB,OACAyxB,EAAAD,EAAAF,EAAA,GAAAC,EAAAjwB,EAAAtB,OACA0xB,EAAAC,EAAArwB,EAAA,EAAAmwB,EAAAF,GAAA,GACAK,IAEA,KAAAF,EAAA,MAAAE,EAEA,IAAAC,GAAAC,EAAAC,EAAAC,EAAAre,EAAAmD,EAAA/M,CAKA,IAHAynB,IAAAE,EAAAO,EAAA3wB,EAAAgwB,EAAAI,EAAAH,IAGAjwB,EAAAtB,OAAA,GAAAuxB,EAAA,CACAM,EAAAE,EAAAzwB,EAAA,GACAwwB,EAAAE,EAAA1wB,EAAA,EAEA,KAAA,GAAA3B,GAAA4xB,EAAAE,EAAA9xB,EAAAA,GAAA4xB,EACA5d,EAAArS,EAAA3B,GACAmX,EAAAxV,EAAA3B,EAAA,GACAkyB,EAAAle,IAAAke,EAAAle,GACAme,EAAAhb,IAAAgb,EAAAhb,GACAnD,EAAAoe,IAAAA,EAAApe,GACAmD,EAAAkb,IAAAA,EAAAlb,EAIA/M,GAAAyK,KAAAC,IAAAsd,EAAAF,EAAAG,EAAAF,GAKA,MAFAI,GAAAR,EAAAE,EAAAL,EAAAM,EAAAC,EAAA/nB,GAEA6nB,EAIA,QAAAD,GAAArwB,EAAAkI,EAAAsX,EAAAyQ,EAAAY,GACA,GACAxyB,GAAA+oB,EAAA7F,EADAuP,EAAA,CAIA,KAAAzyB,EAAA6J,EAAAkf,EAAA5H,EAAAyQ,EAAAzQ,EAAAnhB,EAAAA,GAAA4xB,EACAa,IAAA9wB,EAAAonB,GAAApnB,EAAA3B,KAAA2B,EAAA3B,EAAA,GAAA2B,EAAAonB,EAAA,IACAA,EAAA/oB,CAIA,IAAAwyB,IAAAC,EAAA,EACA,IAAAzyB,EAAA6J,EAAAsX,EAAAnhB,EAAAA,GAAA4xB,EAAA1O,EAAAwP,EAAA1yB,EAAA2B,EAAA3B,GAAA2B,EAAA3B,EAAA,GAAAkjB,OAEA,KAAAljB,EAAAmhB,EAAAyQ,EAAA5xB,GAAA6J,EAAA7J,GAAA4xB,EAAA1O,EAAAwP,EAAA1yB,EAAA2B,EAAA3B,GAAA2B,EAAA3B,EAAA,GAAAkjB,EAGA,OAAAA,GAIA,QAAAyP,GAAA9oB,EAAAsX,GACA,IAAAtX,EAAA,MAAAA,EACAsX,KAAAA,EAAAtX,EAEA,IACA+oB,GADA5O,EAAAna,CAEA,GAGA,IAFA+oB,GAAA,EAEA5O,EAAA6O,UAAAC,EAAA9O,EAAAA,EAAArE,OAAA,IAAAoT,EAAA/O,EAAAgP,KAAAhP,EAAAA,EAAArE,MAOAqE,EAAAA,EAAArE,SAPA,CAGA,GAFAsT,EAAAjP,GACAA,EAAA7C,EAAA6C,EAAAgP,KACAhP,IAAAA,EAAArE,KAAA,MAAA,KACAiT,IAAA,QAKAA,GAAA5O,IAAA7C,EAEA,OAAAA,GAIA,QAAAoR,GAAAW,EAAAjB,EAAAL,EAAAM,EAAAC,EAAA/nB,EAAA+oB,GACA,GAAAD,EAAA,EAGAC,GAAA/oB,GAAAgpB,EAAAF,EAAAhB,EAAAC,EAAA/nB,EAMA,KAJA,GACA4oB,GAAArT,EADA0T,EAAAH,EAIAA,EAAAF,OAAAE,EAAAvT,MAIA,GAHAqT,EAAAE,EAAAF,KACArT,EAAAuT,EAAAvT,KAEAvV,EAAAkpB,EAAAJ,EAAAhB,EAAAC,EAAA/nB,GAAAmpB,EAAAL,GAEAjB,EAAAjoB,KAAAgpB,EAAAhzB,EAAA4xB,GACAK,EAAAjoB,KAAAkpB,EAAAlzB,EAAA4xB,GACAK,EAAAjoB,KAAA2V,EAAA3f,EAAA4xB,GAEAqB,EAAAC,GAGAA,EAAAvT,EAAAA,KACA0T,EAAA1T,EAAAA,SAQA,IAHAuT,EAAAvT,EAGAuT,IAAAG,EAAA,CAEAF,EAIA,IAAAA,GACAD,EAAAM,EAAAN,EAAAjB,EAAAL,GACAW,EAAAW,EAAAjB,EAAAL,EAAAM,EAAAC,EAAA/nB,EAAA,IAGA,IAAA+oB,GACAM,EAAAP,EAAAjB,EAAAL,EAAAM,EAAAC,EAAA/nB,GATAmoB,EAAAI,EAAAO,GAAAjB,EAAAL,EAAAM,EAAAC,EAAA/nB,EAAA,EAYA,SAMA,QAAAmpB,GAAAL,GACA,GAAApzB,GAAAozB,EAAAF,KACA3uB,EAAA6uB,EACAQ,EAAAR,EAAAvT,IAEA,IAAAoT,EAAAjzB,EAAAuE,EAAAqvB,IAAA,EAAA,OAAA,CAKA,KAFA,GAAA1P,GAAAkP,EAAAvT,KAAAA,KAEAqE,IAAAkP,EAAAF,MAAA,CACA,GAAAW,EAAA7zB,EAAAkU,EAAAlU,EAAAqX,EAAA9S,EAAA2P,EAAA3P,EAAA8S,EAAAuc,EAAA1f,EAAA0f,EAAAvc,EAAA6M,EAAAhQ,EAAAgQ,EAAA7M,IACA4b,EAAA/O,EAAAgP,KAAAhP,EAAAA,EAAArE,OAAA,EAAA,OAAA,CACAqE,GAAAA,EAAArE,KAGA,OAAA,EAGA,QAAA2T,GAAAJ,EAAAhB,EAAAC,EAAA/nB,GACA,GAAAtK,GAAAozB,EAAAF,KACA3uB,EAAA6uB,EACAQ,EAAAR,EAAAvT,IAEA,IAAAoT,EAAAjzB,EAAAuE,EAAAqvB,IAAA,EAAA,OAAA,CAeA,KAZA,GAAAE,GAAA9zB,EAAAkU,EAAA3P,EAAA2P,EAAAlU,EAAAkU,EAAA0f,EAAA1f,EAAAlU,EAAAkU,EAAA0f,EAAA1f,EAAA3P,EAAA2P,EAAA0f,EAAA1f,EAAA3P,EAAA2P,EAAA0f,EAAA1f,EACA6f,EAAA/zB,EAAAqX,EAAA9S,EAAA8S,EAAArX,EAAAqX,EAAAuc,EAAAvc,EAAArX,EAAAqX,EAAAuc,EAAAvc,EAAA9S,EAAA8S,EAAAuc,EAAAvc,EAAA9S,EAAA8S,EAAAuc,EAAAvc,EACA2c,EAAAh0B,EAAAkU,EAAA3P,EAAA2P,EAAAlU,EAAAkU,EAAA0f,EAAA1f,EAAAlU,EAAAkU,EAAA0f,EAAA1f,EAAA3P,EAAA2P,EAAA0f,EAAA1f,EAAA3P,EAAA2P,EAAA0f,EAAA1f,EACA+f,EAAAj0B,EAAAqX,EAAA9S,EAAA8S,EAAArX,EAAAqX,EAAAuc,EAAAvc,EAAArX,EAAAqX,EAAAuc,EAAAvc,EAAA9S,EAAA8S,EAAAuc,EAAAvc,EAAA9S,EAAA8S,EAAAuc,EAAAvc,EAGA6c,EAAAC,EAAAL,EAAAC,EAAA3B,EAAAC,EAAA/nB,GACA8pB,EAAAD,EAAAH,EAAAC,EAAA7B,EAAAC,EAAA/nB,GAGA4Z,EAAAkP,EAAAiB,MAEAnQ,GAAAA,EAAAoQ,GAAAF,GAAA,CACA,GAAAlQ,IAAAkP,EAAAF,MAAAhP,IAAAkP,EAAAvT,MACAgU,EAAA7zB,EAAAkU,EAAAlU,EAAAqX,EAAA9S,EAAA2P,EAAA3P,EAAA8S,EAAAuc,EAAA1f,EAAA0f,EAAAvc,EAAA6M,EAAAhQ,EAAAgQ,EAAA7M,IACA4b,EAAA/O,EAAAgP,KAAAhP,EAAAA,EAAArE,OAAA,EAAA,OAAA,CACAqE,GAAAA,EAAAmQ,MAMA,IAFAnQ,EAAAkP,EAAAmB,MAEArQ,GAAAA,EAAAoQ,GAAAJ,GAAA,CACA,GAAAhQ,IAAAkP,EAAAF,MAAAhP,IAAAkP,EAAAvT,MACAgU,EAAA7zB,EAAAkU,EAAAlU,EAAAqX,EAAA9S,EAAA2P,EAAA3P,EAAA8S,EAAAuc,EAAA1f,EAAA0f,EAAAvc,EAAA6M,EAAAhQ,EAAAgQ,EAAA7M,IACA4b,EAAA/O,EAAAgP,KAAAhP,EAAAA,EAAArE,OAAA,EAAA,OAAA,CACAqE,GAAAA,EAAAqQ,MAGA,OAAA,EAIA,QAAAb,GAAA3pB,EAAAooB,EAAAL,GACA,GAAA5N,GAAAna,CACA,GAAA,CACA,GAAA/J,GAAAkkB,EAAAgP,KACA3uB,EAAA2f,EAAArE,KAAAA,IAGA2U,GAAAx0B,EAAAkkB,EAAAA,EAAArE,KAAAtb,IAAAkwB,EAAAz0B,EAAAuE,IAAAkwB,EAAAlwB,EAAAvE,KAEAmyB,EAAAjoB,KAAAlK,EAAAE,EAAA4xB,GACAK,EAAAjoB,KAAAga,EAAAhkB,EAAA4xB,GACAK,EAAAjoB,KAAA3F,EAAArE,EAAA4xB,GAGAqB,EAAAjP,GACAiP,EAAAjP,EAAArE,MAEAqE,EAAAna,EAAAxF,GAEA2f,EAAAA,EAAArE,WACAqE,IAAAna,EAEA,OAAAma,GAIA,QAAAyP,GAAA5pB,EAAAooB,EAAAL,EAAAM,EAAAC,EAAA/nB,GAEA,GAAAtK,GAAA+J,CACA,GAAA,CAEA,IADA,GAAAxF,GAAAvE,EAAA6f,KAAAA,KACAtb,IAAAvE,EAAAkzB,MAAA,CACA,GAAAlzB,EAAAE,IAAAqE,EAAArE,GAAAw0B,EAAA10B,EAAAuE,GAAA,CAEA,GAAAqvB,GAAAe,EAAA30B,EAAAuE,EASA,OANAvE,GAAA6yB,EAAA7yB,EAAAA,EAAA6f,MACA+T,EAAAf,EAAAe,EAAAA,EAAA/T,MAGA4S,EAAAzyB,EAAAmyB,EAAAL,EAAAM,EAAAC,EAAA/nB,OACAmoB,GAAAmB,EAAAzB,EAAAL,EAAAM,EAAAC,EAAA/nB,GAGA/F,EAAAA,EAAAsb,KAEA7f,EAAAA,EAAA6f,WACA7f,IAAA+J,GAIA,QAAAyoB,GAAA3wB,EAAAgwB,EAAAI,EAAAH,GACA,GACA5xB,GAAAyU,EAAA5K,EAAAsX,EAAAuT,EADAhU,IAGA,KAAA1gB,EAAA,EAAAyU,EAAAkd,EAAAtxB,OAAAoU,EAAAzU,EAAAA,IACA6J,EAAA8nB,EAAA3xB,GAAA4xB,EACAzQ,EAAA1M,EAAA,EAAAzU,EAAA2xB,EAAA3xB,EAAA,GAAA4xB,EAAAjwB,EAAAtB,OACAq0B,EAAA1C,EAAArwB,EAAAkI,EAAAsX,EAAAyQ,GAAA,GACA8C,IAAAA,EAAA/U,OAAA+U,EAAA7B,SAAA,GACAnS,EAAA1W,KAAA2qB,EAAAD,GAMA,KAHAhU,EAAArK,KAAAue,GAGA50B,EAAA,EAAAA,EAAA0gB,EAAArgB,OAAAL,IACA60B,EAAAnU,EAAA1gB,GAAA+xB,GACAA,EAAAY,EAAAZ,EAAAA,EAAApS,KAGA,OAAAoS,GAGA,QAAA6C,GAAA90B,EAAAuE,GACA,MAAAvE,GAAAkU,EAAA3P,EAAA2P,EAIA,QAAA6gB,GAAAC,EAAA/C,GAEA,GADAA,EAAAgD,EAAAD,EAAA/C,GACA,CACA,GAAA1tB,GAAAowB,EAAA1C,EAAA+C,EACAnC,GAAAtuB,EAAAA,EAAAsb,OAKA,QAAAoV,GAAAD,EAAA/C,GACA,GAIAnI,GAJA5F,EAAA+N,EACAiD,EAAAF,EAAA9gB,EACAihB,EAAAH,EAAA3d,EACA+d,IAAAC,EAAAA,EAKA,GAAA,CACA,GAAAF,GAAAjR,EAAA7M,GAAA8d,GAAAjR,EAAArE,KAAAxI,EAAA,CACA,GAAAnD,GAAAgQ,EAAAhQ,GAAAihB,EAAAjR,EAAA7M,IAAA6M,EAAArE,KAAA3L,EAAAgQ,EAAAhQ,IAAAgQ,EAAArE,KAAAxI,EAAA6M,EAAA7M,EACA6d,IAAAhhB,GAAAA,EAAAkhB,IACAA,EAAAlhB,EACA4V,EAAA5F,EAAAhQ,EAAAgQ,EAAArE,KAAA3L,EAAAgQ,EAAAA,EAAArE,MAGAqE,EAAAA,EAAArE,WACAqE,IAAA+N,EAEA,KAAAnI,EAAA,MAAA,KAMA,IAEAwL,GAFA/B,EAAAzJ,EACAyL,EAAAF,EAAAA,CAKA,KAFAnR,EAAA4F,EAAAjK,KAEAqE,IAAAqP,GACA2B,GAAAhR,EAAAhQ,GAAAgQ,EAAAhQ,GAAA4V,EAAA5V,GACA2f,EAAAsB,EAAArL,EAAAzS,EAAA6d,EAAAE,EAAAD,EAAArL,EAAA5V,EAAA4V,EAAAzS,EAAA8d,EAAArL,EAAAzS,EAAA+d,EAAAF,EAAAC,EAAAjR,EAAAhQ,EAAAgQ,EAAA7M,KAEAie,EAAAvgB,KAAAygB,IAAAL,EAAAjR,EAAA7M,IAAA6d,EAAAhR,EAAAhQ,IAEAqhB,EAAAD,GAAAA,IAAAC,GAAArR,EAAAhQ,EAAA4V,EAAA5V,IAAAugB,EAAAvQ,EAAA8Q,KACAlL,EAAA5F,EACAqR,EAAAD,IAIApR,EAAAA,EAAArE,IAGA,OAAAiK,GAIA,QAAAwJ,GAAAvpB,EAAAqoB,EAAAC,EAAA/nB,GACA,GAAA4Z,GAAAna,CACA,GACA,QAAAma,EAAAoQ,IAAApQ,EAAAoQ,EAAAH,EAAAjQ,EAAAhQ,EAAAgQ,EAAA7M,EAAA+a,EAAAC,EAAA/nB,IACA4Z,EAAAqQ,MAAArQ,EAAAgP,KACAhP,EAAAmQ,MAAAnQ,EAAArE,KACAqE,EAAAA,EAAArE,WACAqE,IAAAna,EAEAma,GAAAqQ,MAAAF,MAAA,KACAnQ,EAAAqQ,MAAA,KAEAkB,EAAAvR,GAKA,QAAAuR,GAAAb,GACA,GAAA10B,GAAAgkB,EAAAtM,EAAAnY,EAAAi2B,EAAAC,EAAAC,EAAAC,EACAC,EAAA,CAEA,GAAA,CAMA,IALA5R,EAAA0Q,EACAA,EAAA,KACAc,EAAA,KACAC,EAAA,EAEAzR,GAAA,CAIA,IAHAyR,IACA/d,EAAAsM,EACA0R,EAAA,EACA11B,EAAA,EAAA41B,EAAA51B,IACA01B,IACAhe,EAAAA,EAAAyc,MACAzc,GAHA1X,KAQA,IAFA21B,EAAAC,EAEAF,EAAA,GAAAC,EAAA,GAAAje,GAEA,IAAAge,GACAn2B,EAAAmY,EACAA,EAAAA,EAAAyc,MACAwB,KACA,IAAAA,GAAAje,EAIAsM,EAAAoQ,GAAA1c,EAAA0c,GACA70B,EAAAykB,EACAA,EAAAA,EAAAmQ,MACAuB,MAEAn2B,EAAAmY,EACAA,EAAAA,EAAAyc,MACAwB,MAVAp2B,EAAAykB,EACAA,EAAAA,EAAAmQ,MACAuB,KAWAF,EAAAA,EAAArB,MAAA50B,EACAm1B,EAAAn1B,EAEAA,EAAA80B,MAAAmB,EACAA,EAAAj2B,CAGAykB,GAAAtM,EAGA8d,EAAArB,MAAA,KACAyB,GAAA,QAEAH,EAAA,EAEA,OAAAf,GAIA,QAAAT,GAAAjgB,EAAAmD,EAAA+a,EAAAC,EAAA/nB,GAeA,MAbA4J,GAAA,OAAAA,EAAAke,GAAA9nB,EACA+M,EAAA,OAAAA,EAAAgb,GAAA/nB,EAEA4J,EAAA,UAAAA,EAAAA,GAAA,GACAA,EAAA,WAAAA,EAAAA,GAAA,GACAA,EAAA,WAAAA,EAAAA,GAAA,GACAA,EAAA,YAAAA,EAAAA,GAAA,GAEAmD,EAAA,UAAAA,EAAAA,GAAA,GACAA,EAAA,WAAAA,EAAAA,GAAA,GACAA,EAAA,WAAAA,EAAAA,GAAA,GACAA,EAAA,YAAAA,EAAAA,GAAA,GAEAnD,EAAAmD,GAAA,EAIA,QAAAwd,GAAA9qB,GACA,GAAAma,GAAAna,EACAgsB,EAAAhsB,CACA,GACAma,GAAAhQ,EAAA6hB,EAAA7hB,IAAA6hB,EAAA7R,GACAA,EAAAA,EAAArE,WACAqE,IAAAna,EAEA,OAAAgsB,GAIA,QAAAlC,GAAAmC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GACA,OAAAH,EAAAE,IAAAL,EAAAM,IAAAP,EAAAM,IAAAD,EAAAE,IAAA,IACAP,EAAAM,IAAAH,EAAAI,IAAAL,EAAAI,IAAAL,EAAAM,IAAA,IACAL,EAAAI,IAAAD,EAAAE,IAAAH,EAAAE,IAAAH,EAAAI,IAAA,EAIA,QAAA7B,GAAA10B,EAAAuE,GACA,MAAAyuB,GAAAhzB,EAAAuE,IAAAvE,EAAA6f,KAAA3f,IAAAqE,EAAArE,GAAAF,EAAAkzB,KAAAhzB,IAAAqE,EAAArE,IAAAs2B,EAAAx2B,EAAAuE,IACAkwB,EAAAz0B,EAAAuE,IAAAkwB,EAAAlwB,EAAAvE,IAAAy2B,EAAAz2B,EAAAuE,GAIA,QAAA0uB,GAAA/O,EAAAtM,EAAAhY,GACA,OAAAgY,EAAAP,EAAA6M,EAAA7M,IAAAzX,EAAAsU,EAAA0D,EAAA1D,IAAA0D,EAAA1D,EAAAgQ,EAAAhQ,IAAAtU,EAAAyX,EAAAO,EAAAP,GAIA,QAAA2b,GAAA0D,EAAAC,GACA,MAAAD,GAAAxiB,IAAAyiB,EAAAziB,GAAAwiB,EAAArf,IAAAsf,EAAAtf,EAIA,QAAAmd,GAAAkC,EAAAE,EAAAD,EAAAE,GACA,MAAA5D,GAAAyD,EAAAE,EAAAD,GAAA,GAAA1D,EAAAyD,EAAAE,EAAAC,GAAA,GACA5D,EAAA0D,EAAAE,EAAAH,GAAA,GAAAzD,EAAA0D,EAAAE,EAAAD,GAAA,EAIA,QAAAJ,GAAAx2B,EAAAuE,GACA,GAAA2f,GAAAlkB,CACA,GAAA,CACA,GAAAkkB,EAAAhkB,IAAAF,EAAAE,GAAAgkB,EAAArE,KAAA3f,IAAAF,EAAAE,GAAAgkB,EAAAhkB,IAAAqE,EAAArE,GAAAgkB,EAAArE,KAAA3f,IAAAqE,EAAArE,GACAs0B,EAAAtQ,EAAAA,EAAArE,KAAA7f,EAAAuE,GAAA,OAAA,CACA2f,GAAAA,EAAArE,WACAqE,IAAAlkB,EAEA,QAAA,EAIA,QAAAy0B,GAAAz0B,EAAAuE,GACA,MAAA0uB,GAAAjzB,EAAAkzB,KAAAlzB,EAAAA,EAAA6f,MAAA,EACAoT,EAAAjzB,EAAAuE,EAAAvE,EAAA6f,OAAA,GAAAoT,EAAAjzB,EAAAA,EAAAkzB,KAAA3uB,IAAA,EACA0uB,EAAAjzB,EAAAuE,EAAAvE,EAAAkzB,MAAA,GAAAD,EAAAjzB,EAAAA,EAAA6f,KAAAtb,GAAA,EAIA,QAAAkyB,GAAAz2B,EAAAuE,GACA,GAAA2f,GAAAlkB,EACA82B,GAAA,EACAR,GAAAt2B,EAAAkU,EAAA3P,EAAA2P,GAAA,EACAqiB,GAAAv2B,EAAAqX,EAAA9S,EAAA8S,GAAA,CACA,GACA6M,GAAA7M,EAAAkf,GAAArS,EAAArE,KAAAxI,EAAAkf,GAAAD,GAAApS,EAAArE,KAAA3L,EAAAgQ,EAAAhQ,IAAAqiB,EAAArS,EAAA7M,IAAA6M,EAAArE,KAAAxI,EAAA6M,EAAA7M,GAAA6M,EAAAhQ,IACA4iB,GAAAA,GACA5S,EAAAA,EAAArE,WACAqE,IAAAlkB,EAEA,OAAA82B,GAKA,QAAAnC,GAAA30B,EAAAuE,GACA,GAAAwyB,GAAA,GAAAC,GAAAh3B,EAAAE,EAAAF,EAAAkU,EAAAlU,EAAAqX,GACA4f,EAAA,GAAAD,GAAAzyB,EAAArE,EAAAqE,EAAA2P,EAAA3P,EAAA8S,GACA6f,EAAAl3B,EAAA6f,KACAsX,EAAA5yB,EAAA2uB,IAcA,OAZAlzB,GAAA6f,KAAAtb,EACAA,EAAA2uB,KAAAlzB,EAEA+2B,EAAAlX,KAAAqX,EACAA,EAAAhE,KAAA6D,EAEAE,EAAApX,KAAAkX,EACAA,EAAA7D,KAAA+D,EAEAE,EAAAtX,KAAAoX,EACAA,EAAA/D,KAAAiE,EAEAF,EAIA,QAAArE,GAAA1yB,EAAAgU,EAAAmD,EAAA+L,GACA,GAAAc,GAAA,GAAA8S,GAAA92B,EAAAgU,EAAAmD,EAYA,OAVA+L,IAKAc,EAAArE,KAAAuD,EAAAvD,KACAqE,EAAAgP,KAAA9P,EACAA,EAAAvD,KAAAqT,KAAAhP,EACAd,EAAAvD,KAAAqE,IAPAA,EAAAgP,KAAAhP,EACAA,EAAArE,KAAAqE,GAQAA,EAGA,QAAAiP,GAAAjP,GACAA,EAAArE,KAAAqT,KAAAhP,EAAAgP,KACAhP,EAAAgP,KAAArT,KAAAqE,EAAArE,KAEAqE,EAAAqQ,QAAArQ,EAAAqQ,MAAAF,MAAAnQ,EAAAmQ,OACAnQ,EAAAmQ,QAAAnQ,EAAAmQ,MAAAE,MAAArQ,EAAAqQ,OAGA,QAAAyC,GAAA92B,EAAAgU,EAAAmD,GAEA9X,KAAAW,EAAAA,EAGAX,KAAA2U,EAAAA,EACA3U,KAAA8X,EAAAA,EAGA9X,KAAA2zB,KAAA,KACA3zB,KAAAsgB,KAAA,KAGAtgB,KAAA+0B,EAAA,KAGA/0B,KAAAg1B,MAAA,KACAh1B,KAAA80B,MAAA,KAGA90B,KAAAwzB,SAAA,EAlkBA/zB,EAAAD,QAAA6yB,OAqkBAwF,IAAA,SAAAn3B,EAAAjB,EAAAD,GACA,YAoBA,SAAAs4B,GAAAnkB,EAAAokB,EAAA9Q,GACAjnB,KAAA2T,GAAAA,EACA3T,KAAA+3B,QAAAA,EACA/3B,KAAAinB,KAAAA,IAAA,EAUA,QAAA+Q,MAvBA,GAAAC,GAAA,kBAAA1oB,QAAA/L,OAAA,KAAA,CA+BAw0B,GAAAn1B,UAAAq1B,QAAAhwB,OAUA8vB,EAAAn1B,UAAAsb,UAAA,SAAAga,EAAAC,GACA,GAAAC,GAAAJ,EAAAA,EAAAE,EAAAA,EACAG,EAAAt4B,KAAAk4B,SAAAl4B,KAAAk4B,QAAAG,EAEA,IAAAD,EAAA,QAAAE,CACA,KAAAA,EAAA,QACA,IAAAA,EAAA3kB,GAAA,OAAA2kB,EAAA3kB,GAEA,KAAA,GAAAhT,GAAA,EAAAG,EAAAw3B,EAAAt3B,OAAAu3B,EAAA,GAAAzsB,OAAAhL,GAAAA,EAAAH,EAAAA,IACA43B,EAAA53B,GAAA23B,EAAA33B,GAAAgT,EAGA,OAAA4kB,IAUAP,EAAAn1B,UAAAukB,KAAA,SAAA+Q,EAAAK,EAAAhB,EAAAiB,EAAAC,EAAAC,GACA,GAAAN,GAAAJ,EAAAA,EAAAE,EAAAA,CAEA,KAAAn4B,KAAAk4B,UAAAl4B,KAAAk4B,QAAAG,GAAA,OAAA,CAEA,IAEAzgB,GACAjX,EAHAwd,EAAAne,KAAAk4B,QAAAG,GACAjjB,EAAAvB,UAAA7S,MAIA,IAAA,kBAAAmd,GAAAxK,GAAA,CAGA,OAFAwK,EAAA8I,MAAAjnB,KAAAoe,eAAA+Z,EAAAha,EAAAxK,GAAAzL,QAAA,GAEAkN,GACA,IAAA,GAAA,MAAA+I,GAAAxK,GAAA5S,KAAAod,EAAA4Z,UAAA,CACA,KAAA,GAAA,MAAA5Z,GAAAxK,GAAA5S,KAAAod,EAAA4Z,QAAAS,IAAA,CACA,KAAA,GAAA,MAAAra,GAAAxK,GAAA5S,KAAAod,EAAA4Z,QAAAS,EAAAhB,IAAA,CACA,KAAA,GAAA,MAAArZ,GAAAxK,GAAA5S,KAAAod,EAAA4Z,QAAAS,EAAAhB,EAAAiB,IAAA,CACA,KAAA,GAAA,MAAAta,GAAAxK,GAAA5S,KAAAod,EAAA4Z,QAAAS,EAAAhB,EAAAiB,EAAAC,IAAA,CACA,KAAA,GAAA,MAAAva,GAAAxK,GAAA5S,KAAAod,EAAA4Z,QAAAS,EAAAhB,EAAAiB,EAAAC,EAAAC,IAAA,EAGA,IAAAh4B,EAAA,EAAAiX,EAAA,GAAA9L,OAAAsJ,EAAA,GAAAA,EAAAzU,EAAAA,IACAiX,EAAAjX,EAAA,GAAAkT,UAAAlT,EAGAwd,GAAAxK,GAAAC,MAAAuK,EAAA4Z,QAAAngB,OACA,CACA,GACA8R,GADA1oB,EAAAmd,EAAAnd,MAGA,KAAAL,EAAA,EAAAK,EAAAL,EAAAA,IAGA,OAFAwd,EAAAxd,GAAAsmB,MAAAjnB,KAAAoe,eAAA+Z,EAAAha,EAAAxd,GAAAgT,GAAAzL,QAAA,GAEAkN,GACA,IAAA,GAAA+I,EAAAxd,GAAAgT,GAAA5S,KAAAod,EAAAxd,GAAAo3B,QAAA,MACA,KAAA,GAAA5Z,EAAAxd,GAAAgT,GAAA5S,KAAAod,EAAAxd,GAAAo3B,QAAAS,EAAA,MACA,KAAA,GAAAra,EAAAxd,GAAAgT,GAAA5S,KAAAod,EAAAxd,GAAAo3B,QAAAS,EAAAhB,EAAA,MACA,SACA,IAAA5f,EAAA,IAAA8R,EAAA,EAAA9R,EAAA,GAAA9L,OAAAsJ,EAAA,GAAAA,EAAAsU,EAAAA,IACA9R,EAAA8R,EAAA,GAAA7V,UAAA6V,EAGAvL,GAAAxd,GAAAgT,GAAAC,MAAAuK,EAAAxd,GAAAo3B,QAAAngB,IAKA,OAAA,GAWAogB,EAAAn1B,UAAAmkB,GAAA,SAAAmR,EAAAxkB,EAAAokB,GACA,GAAAnZ,GAAA,GAAAkZ,GAAAnkB,EAAAokB,GAAA/3B,MACAq4B,EAAAJ,EAAAA,EAAAE,EAAAA,CAWA,OATAn4B,MAAAk4B,UAAAl4B,KAAAk4B,QAAAD,KAAA1oB,OAAA/L,OAAA,OACAxD,KAAAk4B,QAAAG,GAEAr4B,KAAAk4B,QAAAG,GAAA1kB,GACA3T,KAAAk4B,QAAAG,IACAr4B,KAAAk4B,QAAAG,GAAAzZ,GAFA5e,KAAAk4B,QAAAG,GAAA1tB,KAAAiU,GAFA5e,KAAAk4B,QAAAG,GAAAzZ,EAQA5e,MAWAg4B,EAAAn1B,UAAAokB,KAAA,SAAAkR,EAAAxkB,EAAAokB,GACA,GAAAnZ,GAAA,GAAAkZ,GAAAnkB,EAAAokB,GAAA/3B,MAAA,GACAq4B,EAAAJ,EAAAA,EAAAE,EAAAA,CAWA,OATAn4B,MAAAk4B,UAAAl4B,KAAAk4B,QAAAD,KAAA1oB,OAAA/L,OAAA,OACAxD,KAAAk4B,QAAAG,GAEAr4B,KAAAk4B,QAAAG,GAAA1kB,GACA3T,KAAAk4B,QAAAG,IACAr4B,KAAAk4B,QAAAG,GAAAzZ,GAFA5e,KAAAk4B,QAAAG,GAAA1tB,KAAAiU,GAFA5e,KAAAk4B,QAAAG,GAAAzZ,EAQA5e,MAYAg4B,EAAAn1B,UAAAub,eAAA,SAAA+Z,EAAAxkB,EAAAokB,EAAA9Q,GACA,GAAAoR,GAAAJ,EAAAA,EAAAE,EAAAA,CAEA,KAAAn4B,KAAAk4B,UAAAl4B,KAAAk4B,QAAAG,GAAA,MAAAr4B,KAEA,IAAAme,GAAAne,KAAAk4B,QAAAG,GACAO,IAEA,IAAAjlB,EACA,GAAAwK,EAAAxK,IAEAwK,EAAAxK,KAAAA,GACAsT,IAAA9I,EAAA8I,MACA8Q,GAAA5Z,EAAA4Z,UAAAA,IAEAa,EAAAjuB,KAAAwT,OAGA,KAAA,GAAAxd,GAAA,EAAAK,EAAAmd,EAAAnd,OAAAA,EAAAL,EAAAA,KAEAwd,EAAAxd,GAAAgT,KAAAA,GACAsT,IAAA9I,EAAAxd,GAAAsmB,MACA8Q,GAAA5Z,EAAAxd,GAAAo3B,UAAAA,IAEAa,EAAAjuB,KAAAwT,EAAAxd,GAeA,OANAi4B,GAAA53B,OACAhB,KAAAk4B,QAAAG,GAAA,IAAAO,EAAA53B,OAAA43B,EAAA,GAAAA,QAEA54B,MAAAk4B,QAAAG,GAGAr4B,MASAg4B,EAAAn1B,UAAAskB,mBAAA,SAAAgR,GACA,MAAAn4B,MAAAk4B,SAEAC,QAAAn4B,MAAAk4B,QAAAD,EAAAA,EAAAE,EAAAA,GACAn4B,KAAAk4B,QAAAD,KAAA1oB,OAAA/L,OAAA,MAEAxD,MALAA,MAWAg4B,EAAAn1B,UAAAqkB,IAAA8Q,EAAAn1B,UAAAub,eACA4Z,EAAAn1B,UAAAqb,YAAA8Z,EAAAn1B,UAAAmkB,GAKAgR,EAAAn1B,UAAAg2B,gBAAA,WACA,MAAA74B,OAMAg4B,EAAAc,SAAAb,EAKA,mBAAAx4B,KACAA,EAAAD,QAAAw4B,QAGAe,IAAA,SAAAr4B,EAAAjB,EAAAD,GAEA,YAIA,SAAAw5B,GAAAha,GACA,GAAA,OAAAA,GAAA9W,SAAA8W,EACA,KAAA,IAAAyF,WAAA,wDAGA,OAAAlV,QAAAyP,GARA,GAAAnE,GAAAtL,OAAA1M,UAAAgY,eACAoe,EAAA1pB,OAAA1M,UAAAq2B,oBAUAz5B,GAAAD,QAAA+P,OAAA4pB,QAAA,SAAAC,EAAA5xB,GAKA,IAAA,GAJA0d,GAEAmU,EADAlU,EAAA6T,EAAAI,GAGA94B,EAAA,EAAAA,EAAAuT,UAAA7S,OAAAV,IAAA,CACA4kB,EAAA3V,OAAAsE,UAAAvT,GAEA,KAAA,GAAAyU,KAAAmQ,GACArK,EAAA9Z,KAAAmkB,EAAAnQ,KACAoQ,EAAApQ,GAAAmQ,EAAAnQ,GAIA,IAAAxF,OAAA+pB,sBAAA,CACAD,EAAA9pB,OAAA+pB,sBAAApU,EACA,KAAA,GAAAvkB,GAAA,EAAAA,EAAA04B,EAAAr4B,OAAAL,IACAs4B,EAAAl4B,KAAAmkB,EAAAmU,EAAA14B,MACAwkB,EAAAkU,EAAA14B,IAAAukB,EAAAmU,EAAA14B,MAMA,MAAAwkB,SAGAoU,IAAA,SAAA74B,EAAAjB,EAAAD,IACA,SAAA4T,IAUA,WAiBA,QAAAM,GAAAC,GACA,GAAA6lB,IAAA,CACA,OAAA,YACA,GAAAA,EAAA,KAAA,IAAA54B,OAAA,+BACA44B,IAAA,EACA7lB,EAAAC,MAAA0G,EAAAzG,YApBA,GAGAyG,GAAAD,EAHA9D,IAKA+D,GAAAta,KACA,MAAAsa,IACAD,EAAAC,EAAA/D,OAGAA,EAAAgE,WAAA,WAEA,MADAD,GAAA/D,MAAA8D,EACA9D,EAcA,IAAAiE,GAAAjL,OAAA1M,UAAA4X,SAEAxG,EAAAnI,MAAA4O,SAAA,SAAA3E,GACA,MAAA,mBAAAyE,EAAAzZ,KAAAgV,IAGA0jB,EAAA,SAAAzlB,EAAAG,GACA,IAAA,GAAAxT,GAAA,EAAAA,EAAAqT,EAAAhT,OAAAL,GAAA,EACAwT,EAAAH,EAAArT,GAAAA,EAAAqT,IAIAK,EAAA,SAAAL,EAAAG,GACA,GAAAH,EAAA+H,IACA,MAAA/H,GAAA+H,IAAA5H,EAEA,IAAA2C,KAIA,OAHA2iB,GAAAzlB,EAAA,SAAAW,EAAAhU,EAAAF,GACAqW,EAAAnM,KAAAwJ,EAAAQ,EAAAhU,EAAAF,MAEAqW,GAGArC,EAAA,SAAAT,EAAAG,EAAAO,GACA,MAAAV,GAAAoI,OACApI,EAAAoI,OAAAjI,EAAAO,IAEA+kB,EAAAzlB,EAAA,SAAAW,EAAAhU,EAAAF,GACAiU,EAAAP,EAAAO,EAAAC,EAAAhU,EAAAF,KAEAiU,IAGAI,EAAA,SAAAiB,GACA,GAAAxG,OAAAC,KACA,MAAAD,QAAAC,KAAAuG,EAEA,IAAAvG,KACA,KAAA,GAAAoL,KAAA7E,GACAA,EAAA8E,eAAAD,IACApL,EAAA7E,KAAAiQ,EAGA,OAAApL,GAMA,oBAAA4D,IAAAA,EAAA,UAgBAmD,EAAA0E,SAAA7H,EAAA6H,SACA,mBAAAxC,cACAlC,EAAAkC,aAAA,SAAA9E,GAEA8E,aAAA9E,IAIA4C,EAAAkC,aAAAlC,EAAA0E,UAvBA,kBAAAxC,eACAlC,EAAA0E,SAAA,SAAAtH,GAEA8E,aAAA9E,IAEA4C,EAAAkC,aAAAlC,EAAA0E,WAGA1E,EAAA0E,SAAA,SAAAtH,GACAqH,WAAArH,EAAA,IAEA4C,EAAAkC,aAAAlC,EAAA0E,UAgBA1E,EAAA4E,KAAA,SAAAnH,EAAAG,EAAAyB,GASA,QAAAK,GAAAI,GACAA,GACAT,EAAAS,GACAT,EAAA,eAGA6F,GAAA,EACAA,GAAAzH,EAAAhT,QACA4U,KAfA,GADAA,EAAAA,GAAA,cACA5B,EAAAhT,OACA,MAAA4U,IAEA,IAAA6F,GAAA,CACAge,GAAAzlB,EAAA,SAAAW,GACAR,EAAAQ,EAAAjB,EAAAuC,OAeAM,EAAA2E,QAAA3E,EAAA4E,KAEA5E,EAAA8E,WAAA,SAAArH,EAAAG,EAAAyB,GAEA,GADAA,EAAAA,GAAA,cACA5B,EAAAhT,OACA,MAAA4U,IAEA,IAAA6F,GAAA,EACAG,EAAA,WACAzH,EAAAH,EAAAyH,GAAA,SAAApF,GACAA,GACAT,EAAAS,GACAT,EAAA,eAGA6F,GAAA,EACAA,GAAAzH,EAAAhT,OACA4U,IAGAgG,OAKAA,MAEArF,EAAA6E,cAAA7E,EAAA8E,WAEA9E,EAAAgF,UAAA,SAAAvH,EAAA8B,EAAA3B,EAAAyB,GACA,GAAAjC,GAAA+lB,EAAA5jB,EACAnC,GAAAC,MAAA,MAAAI,EAAAG,EAAAyB,KAEAW,EAAA+E,aAAA/E,EAAAgF,SAEA,IAAAme,GAAA,SAAA5jB,GAEA,MAAA,UAAA9B,EAAAG,EAAAyB,GAEA,GADAA,EAAAA,GAAA,cACA5B,EAAAhT,QAAA,GAAA8U,EACA,MAAAF,IAEA,IAAA6F,GAAA,EACAlD,EAAA,EACArC,EAAA,GAEA,QAAAE,KACA,GAAAqF,GAAAzH,EAAAhT,OACA,MAAA4U,IAGA,MAAAE,EAAAI,GAAAqC,EAAAvE,EAAAhT,QACAuX,GAAA,EACArC,GAAA,EACA/B,EAAAH,EAAAuE,EAAA,GAAA,SAAAlC,GACAA,GACAT,EAAAS,GACAT,EAAA,eAGA6F,GAAA,EACAvF,GAAA,EACAuF,GAAAzH,EAAAhT,OACA4U,IAGAQ,YAUAE,EAAA,SAAA3C,GACA,MAAA,YACA,GAAAiE,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UACA,OAAAF,GAAAC,MAAA,MAAA2C,EAAA4E,MAAApD,OAAAH,MAGAnB,EAAA,SAAAX,EAAAnC,GACA,MAAA,YACA,GAAAiE,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UACA,OAAAF,GAAAC,MAAA,MAAA8lB,EAAA5jB,IAAAiC,OAAAH,MAGAlB,EAAA,SAAA/C,GACA,MAAA,YACA,GAAAiE,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UACA,OAAAF,GAAAC,MAAA,MAAA2C,EAAA8E,YAAAtD,OAAAH,MAKAhB,EAAA,SAAAC,EAAA7C,EAAAG,EAAAyB,GAIA,GAHA5B,EAAAK,EAAAL,EAAA,SAAAW,EAAAhU,GACA,OAAAyT,MAAAzT,EAAAwO,MAAAwF,KAEAiB,EAMA,CACA,GAAAkB,KACAD,GAAA7C,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAAxF,MAAA,SAAAkH,EAAA9C,GACAuD,EAAAnC,EAAAP,OAAAb,EACAqC,EAAAS,MAEA,SAAAA,GACAT,EAAAS,EAAAS,SAbAD,GAAA7C,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAAxF,MAAA,SAAAkH,GACAT,EAAAS,OAeAE,GAAAwF,IAAAzF,EAAAM,GACAL,EAAAyF,UAAAtF,EAAAE,GACAL,EAAA0F,SAAA,SAAAjI,EAAA8B,EAAA3B,EAAAyB,GACA,MAAA+jB,GAAA7jB,GAAA9B,EAAAG,EAAAyB,GAGA,IAAA+jB,GAAA,SAAA7jB,GACA,MAAAW,GAAAX,EAAAc,GAKAL,GAAA6F,OAAA,SAAApI,EAAAU,EAAAP,EAAAyB,GACAW,EAAA8E,WAAArH,EAAA,SAAAW,EAAAiB,GACAzB,EAAAO,EAAAC,EAAA,SAAA0B,EAAA9C,GACAmB,EAAAnB,EACAqC,EAAAS,MAEA,SAAAA,GACAT,EAAAS,EAAA3B,MAIA6B,EAAA2F,OAAA3F,EAAA6F,OAEA7F,EAAA4F,MAAA5F,EAAA6F,OAEA7F,EAAA+F,YAAA,SAAAtI,EAAAU,EAAAP,EAAAyB,GACA,GAAA2G,GAAAlI,EAAAL,EAAA,SAAAW,GACA,MAAAA,KACA6H,SACAjG,GAAA6F,OAAAG,EAAA7H,EAAAP,EAAAyB,IAGAW,EAAA8F,MAAA9F,EAAA+F,WAEA,IAAAvF,GAAA,SAAAF,EAAA7C,EAAAG,EAAAyB,GACA,GAAAkB,KACA9C,GAAAK,EAAAL,EAAA,SAAAW,EAAAhU,GACA,OAAAyT,MAAAzT,EAAAwO,MAAAwF,KAEAkC,EAAA7C,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAAxF,MAAA,SAAAoE,GACAA,GACAuD,EAAAnM,KAAAgK,GAEAiB,OAEA,SAAAS,GACAT,EAAAvB,EAAAyC,EAAAE,KAAA,SAAAvW,EAAAuE,GACA,MAAAvE,GAAA2T,MAAApP,EAAAoP,QACA,SAAAO,GACA,MAAAA,GAAAxF,WAIAoH,GAAAoG,OAAArG,EAAAS,GACAR,EAAAwG,aAAArG,EAAAK,GAEAR,EAAAmG,OAAAnG,EAAAoG,OACApG,EAAAuG,aAAAvG,EAAAwG,YAEA,IAAA9F,GAAA,SAAAJ,EAAA7C,EAAAG,EAAAyB,GACA,GAAAkB,KACA9C,GAAAK,EAAAL,EAAA,SAAAW,EAAAhU,GACA,OAAAyT,MAAAzT,EAAAwO,MAAAwF,KAEAkC,EAAA7C,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAAxF,MAAA,SAAAoE,GACAA,GACAuD,EAAAnM,KAAAgK,GAEAiB,OAEA,SAAAS,GACAT,EAAAvB,EAAAyC,EAAAE,KAAA,SAAAvW,EAAAuE,GACA,MAAAvE,GAAA2T,MAAApP,EAAAoP,QACA,SAAAO,GACA,MAAAA,GAAAxF,WAIAoH,GAAAyG,OAAA1G,EAAAW,GACAV,EAAA2G,aAAAxG,EAAAO,EAEA,IAAA2iB,GAAA,SAAA/iB,EAAA7C,EAAAG,EAAA0lB,GACAhjB,EAAA7C,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAA,SAAAL,GACAA,GACAulB,EAAAllB,GACAklB,EAAA,cAGAjkB,OAGA,SAAAS,GACAwjB,MAGAtjB,GAAAkH,OAAAnH,EAAAsjB,GACArjB,EAAAmH,aAAAhH,EAAAkjB,GAEArjB,EAAA6G,KAAA,SAAApJ,EAAAG,EAAA0lB,GACAtjB,EAAA4E,KAAAnH,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAA,SAAApB,GACAA,IACAsmB,GAAA,GACAA,EAAA,cAEAjkB,OAEA,SAAAS,GACAwjB,GAAA,MAIAtjB,EAAA4G,IAAA5G,EAAA6G,KAEA7G,EAAAgH,MAAA,SAAAvJ,EAAAG,EAAA0lB,GACAtjB,EAAA4E,KAAAnH,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAA,SAAApB,GACAA,IACAsmB,GAAA,GACAA,EAAA,cAEAjkB,OAEA,SAAAS,GACAwjB,GAAA,MAIAtjB,EAAA+G,IAAA/G,EAAAgH,MAEAhH,EAAAqH,OAAA,SAAA5J,EAAAG,EAAAyB,GACAW,EAAAwF,IAAA/H,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAA,SAAA0B,EAAA2H,GACA3H,EACAT,EAAAS,GAGAT,EAAA,MAAAzG,MAAAwF,EAAAqJ,SAAAA,OAGA,SAAA3H,EAAAS,GACA,GAAAT,EACA,MAAAT,GAAAS,EAGA,IAAA1C,GAAA,SAAAmK,EAAAC,GACA,GAAAtd,GAAAqd,EAAAE,SAAAhZ,EAAA+Y,EAAAC,QACA,OAAAhZ,GAAAvE,EAAA,GAAAA,EAAAuE,EAAA,EAAA,EAEA4Q,GAAA,KAAAvB,EAAAyC,EAAAE,KAAArD,GAAA,SAAAgB,GACA,MAAAA,GAAAxF,YAMAoH,EAAA0H,KAAA,SAAAvG,EAAA9B,GACAA,EAAAA,GAAA,YACA,IAAApG,GAAAsF,EAAA4C,GACA6G,EAAA/O,EAAAxO,MACA,KAAAud,EACA,MAAA3I,IAGA,IAAAkB,MAEAqH,KACAD,EAAA,SAAAvK,GACAwK,EAAAxF,QAAAhF,IAEAyK,EAAA,SAAAzK,GACA,IAAA,GAAAhT,GAAA,EAAAA,EAAAwd,EAAAnd,OAAAL,GAAA,EACA,GAAAwd,EAAAxd,KAAAgT,EAEA,WADAwK,GAAAlF,OAAAtY,EAAA,IAKA2d,EAAA,WACAC,IACAkb,EAAAtb,EAAAK,MAAA,GAAA,SAAA7K,GACAA,MAIAuK,GAAA,WACA,IAAAK,EAAA,CACA,GAAAub,GAAAlkB,CAEAA,GAAA,aAEAkkB,EAAA,KAAAhjB,MAIA2iB,EAAAjqB,EAAA,SAAAoL,GACA,GAAAjD,GAAA1D,EAAAyD,EAAAkD,IAAAlD,EAAAkD,IAAAlD,EAAAkD,IACAiE,EAAA,SAAAxI,GACA,GAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EAIA,IAHA+D,EAAA5W,QAAA,IACA4W,EAAAA,EAAA,IAEAvB,EAAA,CACA,GAAA0I,KACA0a,GAAA3kB,EAAAgC,GAAA,SAAAmI,GACAF,EAAAE,GAAAnI,EAAAmI,KAEAF,EAAAnE,GAAAhD,EACAhC,EAAAS,EAAA0I,GAEAnJ,EAAA,iBAGAkB,GAAA8D,GAAAhD,EACArB,EAAAkC,aAAA6F,IAGAK,EAAAhH,EAAA6G,MAAA,EAAAhJ,KAAAygB,IAAAte,EAAA3W,OAAA,QACA0d,EAAA,WACA,MAAAjK,GAAAkK,EAAA,SAAAle,EAAAkU,GACA,MAAAlU,IAAAqW,EAAA+D,eAAAlG,KACA,KAAAmC,EAAA+D,eAAAD,GAEA,IAAA8D,IACA/G,EAAAA,EAAA3W,OAAA,GAAA6d,EAAA/H,OAEA,CACA,GAAA8H,GAAA,WACAF,MACAN,EAAAQ,GACAjH,EAAAA,EAAA3W,OAAA,GAAA6d,EAAA/H,IAGAoH,GAAAU,OAKArI,EAAA2I,MAAA,SAAAC,EAAAxH,EAAA/B,GACA,GAAA2J,GAAA,EACAW,IAEA,mBAAAf,KACAvJ,EAAA+B,EACAA,EAAAwH,EACAA,EAAAI,GAGAJ,EAAAG,SAAAH,EAAA,KAAAI,CACA,IAAAG,GAAA,SAAAC,EAAAC,GAQA,IAPA,GAAAC,GAAA,SAAAlI,EAAAmI,GACA,MAAA,UAAAC,GACApI,EAAA,SAAAtB,EAAA/B,GACAyL,GAAA1J,GAAAyJ,GAAAzJ,IAAAA,EAAA/B,OAAAA,KACAsL,KAGAT,GACAe,EAAAvV,KAAAkV,EAAAlI,IAAAwH,GAAA,IAEA5I,GAAA4J,OAAAD,EAAA,SAAAjK,EAAA3T,GACAA,EAAAA,EAAAA,EAAAtB,OAAA,IACA2e,GAAA/J,GAAAtT,EAAA+T,IAAA/T,EAAAgS,UAIA,OAAAsB,GAAA8J,IAAAA,GAGAnJ,EAAA6J,UAAA,SAAA1I,EAAA9B,GAEA,GADAA,EAAAA,GAAA,cACA3B,EAAAyD,GAAA,CACA,GAAArB,GAAA,GAAAzV,OAAA,4DACA,OAAAgV,GAAAS,GAEA,IAAAqB,EAAA1W,OACA,MAAA4U,IAEA,IAAAyK,GAAA,SAAAlM,GACA,MAAA,UAAAkC,GACA,GAAAA,EACAT,EAAAhC,MAAA,KAAAC,WACA+B,EAAA,iBAEA,CACA,GAAAgC,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,GACAyM,EAAAnM,EAAAmM,MACAA,GACA1I,EAAAjN,KAAA0V,EAAAC,IAGA1I,EAAAjN,KAAAiL,GAEAW,EAAAkC,aAAA,WACAtE,EAAAP,MAAA,KAAAgE,OAKAyI,GAAA9J,EAAApC,SAAAuD,MAGA,IAAAD,GAAA,SAAAZ,EAAAa,EAAA9B,GAEA,GADAA,EAAAA,GAAA,aACA3B,EAAAyD,GACAb,EAAAkF,IAAArE,EAAA,SAAA/D,EAAAiC,GACAjC,GACAA,EAAA,SAAA0C,GACA,GAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA+D,GAAA5W,QAAA,IACA4W,EAAAA,EAAA,IAEAhC,EAAA7U,KAAA,KAAAsV,EAAAuB,MAGAhC,OAEA,CACA,GAAAkB,KACAD,GAAAsE,KAAArG,EAAA4C,GAAA,SAAAkD,EAAAhF,GACA8B,EAAAkD,GAAA,SAAAvE,GACA,GAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA+D,GAAA5W,QAAA,IACA4W,EAAAA,EAAA,IAEAd,EAAA8D,GAAAhD,EACAhC,EAAAS,MAEA,SAAAA,GACAT,EAAAS,EAAAS,MAKAP,GAAAgK,SAAA,SAAA7I,EAAA9B,GACA6B,GAAAsE,IAAAxF,EAAAwF,IAAAZ,KAAA5E,EAAA4E,MAAAzD,EAAA9B,IAGAW,EAAAiK,cAAA,SAAA9I,EAAA5B,EAAAF,GACA6B,GAAAsE,IAAA4d,EAAA7jB,GAAAqF,KAAAue,EAAA5jB,IAAA4B,EAAA9B,IAGAW,EAAA4J,OAAA,SAAAzI,EAAA9B,GAEA,GADAA,EAAAA,GAAA,aACA3B,EAAAyD,GACAnB,EAAAyF,UAAAtE,EAAA,SAAA/D,EAAAiC,GACAjC,GACAA,EAAA,SAAA0C,GACA,GAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA+D,GAAA5W,QAAA,IACA4W,EAAAA,EAAA,IAEAhC,EAAA7U,KAAA,KAAAsV,EAAAuB,MAGAhC,OAEA,CACA,GAAAkB,KACAP,GAAA8E,WAAAvG,EAAA4C,GAAA,SAAAkD,EAAAhF,GACA8B,EAAAkD,GAAA,SAAAvE,GACA,GAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA+D,GAAA5W,QAAA,IACA4W,EAAAA,EAAA,IAEAd,EAAA8D,GAAAhD,EACAhC,EAAAS,MAEA,SAAAA,GACAT,EAAAS,EAAAS,OAKAP,EAAApC,SAAA,SAAAuD,GACA,GAAA+I,GAAA,SAAArM,GACA,GAAAT,GAAA,WAIA,MAHA+D,GAAA1W,QACA0W,EAAAtD,GAAAR,MAAA,KAAAC,WAEAF,EAAA2M,OAKA,OAHA3M,GAAA2M,KAAA,WACA,MAAAlM,GAAAsD,EAAA1W,OAAA,EAAAyf,EAAArM,EAAA,GAAA,MAEAT,EAEA,OAAA8M,GAAA,IAGAlK,EAAA3C,MAAA,SAAAD,GACA,GAAAiE,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA,OAAA,YACA,MAAAF,GAAAC,MACA,KAAAgE,EAAAG,OAAAjM,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,cAKA,IAAAgE,GAAA,SAAAhB,EAAA7C,EAAAL,EAAAiC,GACA,GAAAvV,KACAwW,GAAA7C,EAAA,SAAAW,EAAAuC,GACAvD,EAAAgB,EAAA,SAAA0B,EAAAyB,GACAzX,EAAAA,EAAA0X,OAAAD,OACAZ,EAAAb,MAEA,SAAAA,GACAT,EAAAS,EAAAhW,KAGAkW,GAAAwB,OAAAzB,EAAAuB,GACAtB,EAAAoK,aAAAjK,EAAAmB,GAEAtB,EAAAqK,OAAA,SAAAC,EAAA1M,EAAAyB,GACAiL,IACA1M,EAAA,SAAAkC,GACA,MAAAA,GACAT,EAAAS,OAEAE,GAAAqK,OAAAC,EAAA1M,EAAAyB,KAIAA,KAIAW,EAAAuK,SAAA,SAAA3M,EAAA0M,EAAAjL,GACAzB,EAAA,SAAAkC,GACA,GAAAA,EACA,MAAAT,GAAAS,EAEA,IAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACAgN,GAAAjN,MAAA,KAAAgE,GACArB,EAAAuK,SAAA3M,EAAA0M,EAAAjL,GAGAA,OAKAW,EAAAyK,MAAA,SAAAH,EAAA1M,EAAAyB,GACAiL,IASAjL,IARAzB,EAAA,SAAAkC,GACA,MAAAA,GACAT,EAAAS,OAEAE,GAAAyK,MAAAH,EAAA1M,EAAAyB,MAQAW,EAAA0K,QAAA,SAAA9M,EAAA0M,EAAAjL,GACAzB,EAAA,SAAAkC,GACA,GAAAA,EACA,MAAAT,GAAAS,EAEA,IAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACAgN,GAAAjN,MAAA,KAAAgE,GAIAhC,IAHAW,EAAA0K,QAAA9M,EAAA0M,EAAAjL,MAQAW,EAAA8K,MAAA,SAAApJ,EAAAC,GAIA,QAAAE,GAAAC,EAAA/V,EAAAgW,EAAA1C,GAOA,MANAyC,GAAAE,UACAF,EAAAE,SAAA,GAEAtE,EAAA3R,KACAA,GAAAA,IAEA,GAAAA,EAAAtB,OAEAuV,EAAAkC,aAAA,WACAJ,EAAAK,OACAL,EAAAK,cAIA+gB,GAAAn3B,EAAA,SAAAqV,GACA,GAAA1C,IACA3S,KAAAqV,EACA/B,SAAA,kBAAAA,GAAAA,EAAA,KAGA0C,GACAD,EAAAX,MAAAiB,QAAA1D,GAEAoD,EAAAX,MAAA/M,KAAAsK,GAGAoD,EAAAO,WAAAP,EAAAX,MAAA1W,SAAAqX,EAAAH,aACAG,EAAAO,YAEArC,EAAAkC,aAAAJ,EAAAjF,WAjCAlL,SAAAgQ,IACAA,EAAA,EAoCA,IAAAY,GAAA,EACAT,GACAX,SACAQ,YAAAA,EACAU,UAAA,KACAM,MAAA,KACAR,MAAA,KACAH,SAAA,EACAY,QAAA,EACAxO,KAAA,SAAArI,EAAAsT,GACAwC,EAAAC,EAAA/V,GAAA,EAAAsT,IAEAwD,KAAA,WACAf,EAAAK,MAAA,KACAL,EAAAX,UAEAiB,QAAA,SAAArW,EAAAsT,GACAwC,EAAAC,EAAA/V,GAAA,EAAAsT,IAEAxC,QAAA,WACA,IAAAiF,EAAAc,QAAAL,EAAAT,EAAAH,aAAAG,EAAAX,MAAA1W,OAAA,CACA,GAAA2W,GAAAU,EAAAX,MAAAia,OACAtZ,GAAAa,OAAA,IAAAb,EAAAX,MAAA1W,QACAqX,EAAAa,QAEAJ,GAAA,CACA,IAAAwH,GAAA,WACAxH,GAAA,EACAnB,EAAA/B,UACA+B,EAAA/B,SAAAhC,MAAA+D,EAAA9D,WAEAwE,EAAAK,OAAAL,EAAAX,MAAA1W,OAAA8X,IAAA,GACAT,EAAAK,QAEAL,EAAAjF,WAEA8D,EAAAxD,EAAA4M,EACArI,GAAAN,EAAArV,KAAA4U,KAGAlW,OAAA,WACA,MAAAqX,GAAAX,MAAA1W,QAEAkV,QAAA,WACA,MAAA4C,IAEAN,KAAA,WACA,MAAAH,GAAAX,MAAA1W,OAAA8X,IAAA,GAEAO,MAAA,WACAhB,EAAAc,UAAA,IACAd,EAAAc,QAAA,IAEAG,OAAA,WACA,GAAAjB,EAAAc,UAAA,EAAA,CACAd,EAAAc,QAAA,CAGA,KAAA,GAAAM,GAAA,EAAAA,GAAApB,EAAAH,YAAAuB,IACAlD,EAAAkC,aAAAJ,EAAAjF,WAIA,OAAAiF,IAGA9B,EAAAgL,cAAA,SAAAtJ,EAAAC,GAEA,QAAAsJ,GAAA/gB,EAAAuE,GACA,MAAAvE,GAAAghB,SAAAzc,EAAAyc,SAGA,QAAAC,GAAAC,EAAA1M,EAAA2M,GAGA,IAFA,GAAAC,GAAA,GACAC,EAAAH,EAAA3gB,OAAA,EACA8gB,EAAAD,GAAA,CACA,GAAAE,GAAAF,GAAAC,EAAAD,EAAA,IAAA,EACAD,GAAA3M,EAAA0M,EAAAI,KAAA,EACAF,EAAAE,EAEAD,EAAAC,EAAA,EAGA,MAAAF,GAGA,QAAAzJ,GAAAC,EAAA/V,EAAAmf,EAAA7L,GAOA,MANAyC,GAAAE,UACAF,EAAAE,SAAA,GAEAtE,EAAA3R,KACAA,GAAAA,IAEA,GAAAA,EAAAtB,OAEAuV,EAAAkC,aAAA,WACAJ,EAAAK,OACAL,EAAAK,cAIA+gB,GAAAn3B,EAAA,SAAAqV,GACA,GAAA1C,IACA3S,KAAAqV,EACA8J,SAAAA,EACA7L,SAAA,kBAAAA,GAAAA,EAAA,KAGAyC,GAAAX,MAAAuB,OAAAyI,EAAArJ,EAAAX,MAAAzC,EAAAuM,GAAA,EAAA,EAAAvM,GAEAoD,EAAAO,WAAAP,EAAAX,MAAA1W,SAAAqX,EAAAH,aACAG,EAAAO,YAEArC,EAAAkC,aAAAJ,EAAAjF,WAKA,GAAAiF,GAAA9B,EAAA8K,MAAApJ,EAAAC,EAUA,OAPAG,GAAA1N,KAAA,SAAArI,EAAAmf,EAAA7L,GACAwC,EAAAC,EAAA/V,EAAAmf,EAAA7L,UAIAyC,GAAAM,QAEAN,GAGA9B,EAAAyL,MAAA,SAAA/J,EAAAE,GACA,GAAA4hB,IAAA,EACAriB,KAEAsK,GACAtK,MAAAA,EACAS,QAAAA,EACAS,UAAA,KACAM,MAAA,KACAR,MAAA,KACAshB,SAAA,EACArvB,KAAA,SAAArI,EAAAsT,GACA3B,EAAA3R,KACAA,GAAAA,IAEAm3B,EAAAn3B,EAAA,SAAAqV,GACAD,EAAA/M,MACArI,KAAAqV,EACA/B,SAAA,kBAAAA,GAAAA,EAAA,OAEAoM,EAAAgY,SAAA,EACAhY,EAAApJ,WAAAlB,EAAA1W,SAAAmX,GACA6J,EAAApJ,cAGArC,EAAAkC,aAAAuJ,EAAA5O,UAEAA,QAAA,QAAAA,KACA,IAAA2mB,EAAA,CACA,GAAA,IAAAriB,EAAA1W,OAGA,MAFAghB,GAAAtJ,QAAAsJ,EAAAgY,SAAAhY,EAAAtJ,aACAsJ,EAAAgY,SAAA,EAIA,IAAAC,GAAA,gBAAA9hB,GACAT,EAAAuB,OAAA,EAAAd,GACAT,EAAAuB,OAAA,EAAAvB,EAAA1W,QAEAk5B,EAAA7lB,EAAA4lB,EAAA,SAAAtiB,GACA,MAAAA,GAAArV,MAGA0f,GAAA9I,OAAA8I,EAAA9I,QACA6gB,GAAA,EACA9hB,EAAAiiB,EAAA,WACAH,GAAA,CAEA,IAAAniB,GAAA/D,SACA4lB,GAAAQ,EAAA,SAAA33B,GACAA,EAAAsT,UACAtT,EAAAsT,SAAAhC,MAAA,KAAAgE,KAIAxE,QAGApS,OAAA,WACA,MAAA0W,GAAA1W,QAEAkV,QAAA,WACA,MAAA6jB,IAGA,OAAA/X,GAGA,IAAAtI,GAAA,SAAAlL,GACA,MAAA,UAAAmF,GACA,GAAAiE,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACAF,GAAAC,MAAA,KAAAgE,EAAAG,QAAA,SAAA1B,GACA,GAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA,oBAAAjH,WACAyJ,EACAzJ,QAAAC,OACAD,QAAAC,MAAAwJ,GAGAzJ,QAAA4B,IACAirB,EAAA7hB,EAAA,SAAAjD,GACA/H,QAAA4B,GAAAmG,WAOA4B,GAAA7I,IAAAgM,EAAA,OACAnD,EAAA0L,IAAAvI,EAAA,OAKAnD,EAAA2L,QAAA,SAAAvO,EAAAwO,GACA,GAAAzN,MACA0N,IACAD,GAAAA,GAAA,SAAAxN,GACA,MAAAA,GAEA,IAAA0N,GAAA,WACA,GAAAzK,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,WACA+B,EAAAgC,EAAAqC,MACAlF,EAAAoN,EAAAvO,MAAA,KAAAgE,EACA7C,KAAAL,GACA6B,EAAA0E,SAAA,WACArF,EAAAhC,MAAA,KAAAc,EAAAK,MAGAA,IAAAqN,GACAA,EAAArN,GAAApK,KAAAiL,IAGAwM,EAAArN,IAAAa,GACAjC,EAAAC,MAAA,KAAAgE,EAAAG,QAAA,WACArD,EAAAK,GAAAlB,SACA,IAAAwE,GAAA+J,EAAArN,SACAqN,GAAArN,EACA,KAAA,GAAApU,GAAA,EAAAG,EAAAuX,EAAArX,OAAAF,EAAAH,EAAAA,IACA0X,EAAA1X,GAAAiT,MAAA,KAAAC,gBAOA,OAFAwO,GAAA3N,KAAAA,EACA2N,EAAAC,WAAA3O,EACA0O,GAGA9L,EAAAgM,UAAA,SAAA5O,GACA,MAAA,YACA,OAAAA,EAAA2O,YAAA3O,GAAAC,MAAA,KAAAC,aAIA0C,EAAA4I,MAAA,SAAA3K,EAAAL,EAAAyB,GAEA,IAAA,GADAuS,MACAxnB,EAAA,EAAA6T,EAAA7T,EAAAA,IACAwnB,EAAAxd,KAAAhK,EAEA,OAAA4V,GAAAwF,IAAAoM,EAAAhU,EAAAyB,IAGAW,EAAAiM,YAAA,SAAAhO,EAAAL,EAAAyB,GAEA,IAAA,GADAuS,MACAxnB,EAAA,EAAA6T,EAAA7T,EAAAA,IACAwnB,EAAAxd,KAAAhK,EAEA,OAAA4V,GAAAyF,UAAAmM,EAAAhU,EAAAyB,IAGAW,EAAAmM,IAAA,WACA,GAAA5I,GAAAjG,SACA,OAAA,YACA,GAAAmG,GAAAha,KACA4X,EAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,WACA+B,EAAAgC,EAAAqC,KACA1D,GAAA6F,OAAAtC,EAAAlC,EAAA,SAAA+K,EAAAhP,EAAAuD,GACAvD,EAAAC,MAAAoG,EAAA2I,EAAA5K,QAAA,WACA,GAAA1B,GAAAxC,UAAA,GACA+O,EAAA9W,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACAqD,GAAAb,EAAAuM,QAGA,SAAAvM,EAAAS,GACAlB,EAAAhC,MAAAoG,GAAA3D,GAAA0B,OAAAjB,QAKAP,EAAAsM,QAAA,WACA,MAAAtM,GAAAmM,IAAA9O,MAAA,KAAA9H,MAAAjJ,UAAA2Z,QAAAzb,KAAA8S,YAGA,IAAAgG,GAAA,SAAAhD,EAAAiD,GACA,GAAAC,GAAA,WACA,GAAAC,GAAAha,KACA4X,EAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,WACA+B,EAAAgC,EAAAqC,KACA,OAAApD,GAAAiD,EAAA,SAAAnG,EAAAuD,GACAvD,EAAAC,MAAAoG,EAAApC,EAAAG,QAAAb,MAEAtB,GAEA,IAAA/B,UAAA7S,OAAA,EAAA,CACA,GAAA4W,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA,OAAAkG,GAAAnG,MAAA5T,KAAA4X,GAGA,MAAAmC,GAGAxD,GAAAuM,UAAAxM,EAAAuD,GACAtD,EAAAwM,gBAAArM,EAAAmD,GAEAtD,EAAAyM,QAAA,SAAArP,EAAAiC,GACA,QAAA0K,GAAAjK,GACA,GAAAA,EAAA,CACA,GAAAT,EACA,MAAAA,GAAAS,EAEA,MAAAA,GAEA1C,EAAA2M,GAEAA,KAIA,mBAAA7gB,IAAAA,EAAAD,QACAC,EAAAD,QAAA+W,EAGA,mBAAA7W,IAAAA,EAAAC,IACAD,KAAA,WACA,MAAA6W,KAKA+D,EAAA/D,MAAAA,OAKAxV,KAAAf,KAAAU,EAAA,eAEA6iB,SAAA,KAAA4W,IAAA,SAAAz5B,EAAAjB,EAAAD,GAaA,QAAA46B,GAAAC,EAAAniB,GACA8f,EAAAj3B,KAAAf,MAEAkY,EAAAA,GAAA,GAOAlY,KAAAq6B,QAAAA,GAAA,GAOAr6B,KAAAs6B,SAAA,EAOAt6B,KAAAu6B,SAAA,EAOAv6B,KAAAw6B,eAAA,EAOAx6B,KAAAy6B,qBAOAz6B,KAAA06B,oBAQA16B,KAAA26B,mBAAA36B,KAAA46B,cAAA53B,KAAAhD,MAQAA,KAAA66B,aAAA76B,KAAA86B,QAAA93B,KAAAhD,MAQAA,KAAA+6B,WAQA/6B,KAAAg7B,WAAA,EAQAh7B,KAAAgY,OAAAzB,EAAA8K,MAAArhB,KAAA26B,mBAAAziB,GAOAlY,KAAAi7B,aAxGA,GAAA1kB,GAAA7V,EAAA,SACAw6B,EAAAx6B,EAAA,OACAy6B,EAAAz6B,EAAA,cACAs3B,EAAAt3B,EAAA,gBA2IA05B,GAAAv3B,UAAA0M,OAAA/L,OAAAw0B,EAAAn1B,WACAu3B,EAAAv3B,UAAAmH,YAAAowB,EACA36B,EAAAD,QAAA46B,EAqDAA,EAAAv3B,UAAAu4B,IAAAhB,EAAAv3B,UAAAw4B,QAAA,SAAA7sB,EAAAsf,EAAAjjB,EAAAqM,GAEA,GAAApL,MAAA4O,QAAAlM,GAAA,CACA,IAAA,GAAA7N,GAAA,EAAAA,EAAA6N,EAAAxN,SAAAL,EACAX,KAAAo7B,IAAA5sB,EAAA7N,GAGA,OAAAX,MAmBA,GAfA,gBAAAwO,KACA0I,EAAA4W,GAAAtf,EAAAoH,UAAApH,EAAA8sB,WACAzwB,EAAA2D,EACAsf,EAAAtf,EAAAsf,IACAtf,EAAAA,EAAAA,MAAAA,EAAAuG,KAAAvG,EAAAsf,KAIA,gBAAAA,KACA5W,EAAArM,EACAA,EAAAijB,EACAA,EAAAtf,GAIA,gBAAAsf,GACA,KAAA,IAAAltB,OAAA,2CAUA,IANA,kBAAAiK,KACAqM,EAAArM,EACAA,EAAA,MAIA7K,KAAAi7B,UAAAzsB,GACA,KAAA,IAAA5N,OAAA,uBAAA4N,EAAA,oBA0BA,OAtBAsf,GAAA9tB,KAAAu7B,eAAAzN,GAGA9tB,KAAAi7B,UAAAzsB,GAAA,GAAA2sB,GAAA3sB,EAAAsf,EAAAjjB,GAEA,kBAAAqM,IACAlX,KAAAi7B,UAAAzsB,GAAAyY,KAAA,kBAAA/P,GAGAlX,KAAAg7B,aAGAh7B,KAAAgY,OAAAO,SACAvY,KAAAgY,OAAArN,KAAA3K,KAAAi7B,UAAAzsB,IACAxO,KAAAw6B,gBAAA,IAAAx6B,KAAAs6B,WAAAt6B,KAAAgY,OAAAhX,SAAAhB,KAAAgY,OAAA9B,aAIAlW,KAAA+6B,QAAApwB,KAAA3K,KAAAi7B,UAAAzsB,IACAxO,KAAAw6B,eAAA,IAAAx6B,KAAA+6B,QAAA/5B,QAGAhB,MAGAo6B,EAAAv3B,UAAA04B,eAAA,SAAAzN,GACA,GAAA0N,GAAAN,EAAAtO,MAAAkB,EAGA,OAAA0N,GAAAtO,UAAA,IAAAsO,EAAA7N,SAAAxB,QAAA,MACA2B,EAKA9tB,KAAAq6B,QAAAr5B,QACAhB,KAAAq6B,QAAApQ,YAAA,OAAAjqB,KAAAq6B,QAAAr5B,OAAA,GACA,MAAA8sB,EAAApJ,OAAA,GAEA1kB,KAAAq6B,QAAA,IAAAvM,EAGA9tB,KAAAq6B,QAAAvM,GAaAsM,EAAAv3B,UAAA44B,OAAArB,EAAAv3B,UAAA64B,IAAA,SAAA/nB,GAGA,MAFA3T,MAAAy6B,kBAAA9vB,KAAAgJ,GAEA3T,MAWAo6B,EAAAv3B,UAAA84B,MAAAvB,EAAAv3B,UAAA+4B,IAAA,SAAAjoB,GAGA,MAFA3T,MAAA06B,iBAAA/vB,KAAAgJ,GAEA3T,MAQAo6B,EAAAv3B,UAAAg5B,MAAA,WAGA77B,KAAAs6B,SAAA,EAEAt6B,KAAAu6B,SAAA,EAEAv6B,KAAAw6B,eAAA,EAKAx6B,KAAA+6B,QAAA/5B,OAAA,EAEAhB,KAAAg7B,WAAA,EAEAh7B,KAAAgY,OAAAoB,OACApZ,KAAAgY,OAAAO,SAAA,EAEAvY,KAAAi7B,cAUAb,EAAAv3B,UAAAi5B,KAAA,SAAA5kB,GAOA,GALA,kBAAAA,IACAlX,KAAAinB,KAAA,WAAA/P,GAIAlX,KAAAgY,OAAAO,QACA,MAAAvY,KAIAA,MAAAonB,KAAA,QAAApnB,KAGA,KAAA,GAAAW,GAAA,EAAAA,EAAAX,KAAA+6B,QAAA/5B,SAAAL,EACAX,KAAAgY,OAAArN,KAAA3K,KAAA+6B,QAAAp6B,GAMA,OAFAX,MAAA+6B,QAAA/5B,OAAA,EAEAhB,MASAo6B,EAAAv3B,UAAA+3B,cAAA,SAAAmB,EAAAC,GACA,GAAAj8B,GAAAC,IAEA+7B,GAAAE,SAAAD,EAEAh8B,KAAAk8B,eAAAH,EAAA/7B,KAAAy6B,kBAAA,WAGAsB,EAAAD,KAAA/7B,EAAA86B,iBAUAT,EAAAv3B,UAAAs5B,YAAA,WACAn8B,KAAAonB,KAAA,WAAApnB,KAAAA,KAAAi7B,YAWAb,EAAAv3B,UAAAi4B,QAAA,SAAAiB,GACA/7B,KAAAs6B,UAAAt6B,KAAAw6B,eAEAx6B,KAAAonB,KAAA,WAAApnB,KAAA+7B,GAGA/7B,KAAAk8B,eAAAH,EAAA/7B,KAAA06B,iBAAA,WACAqB,EAAA3U,KAAA,kBAAA2U,GAEA/7B,KAAAg7B,aAGA,IAAAh7B,KAAAg7B,aACAh7B,KAAAs6B,SAAA,IACAt6B,KAAAm8B,eAGAJ,EAAAlvB,MACA7M,KAAAonB,KAAA,QAAA2U,EAAAlvB,MAAA7M,KAAA+7B,GAGA/7B,KAAAonB,KAAA,OAAApnB,KAAA+7B,KAOAA,EAAAE,YAQA7B,EAAAv3B,UAAAq5B,eAAA,SAAAH,EAAAjiB,EAAA5C,GACA,GAAAnX,GAAAC,IAEAuW,GAAA8E,WAAAvB,EAAA,SAAAnG,EAAA2M,GACA3M,EAAA5S,KAAAhB,EAAAg8B,EAAAzb,IACApJ,EAAAlU,KAAAhD,KAAA+7B,KAGA3B,EAAAgC,UAAAjB,EAAAiB,UACAhC,EAAAiC,gBAAAlB,EAAAkB,gBACAjC,EAAAkC,kBAAAnB,EAAAmB,oBAEAC,aAAA,GAAAhmB,MAAA,GAAAimB,cAAA,GAAA1O,IAAA,KAAA2O,IAAA,SAAA/7B,EAAAjB,EAAAD,GAqBA,QAAA27B,GAAA3sB,EAAAsf,EAAAjjB,GAKA,GAJAmtB,EAAAj3B,KAAAf,MAEA6K,EAAAA,MAEA,gBAAA2D,IAAA,gBAAAsf,GACA,KAAA,IAAAltB,OAAA,8DASAZ,MAAAwO,KAAAA,EAQAxO,KAAA8tB,IAAAA,EAQA9tB,KAAA08B,UAAA,IAAA18B,KAAA8tB,IAAA3B,QAAA,SAOAnsB,KAAAsC,KAAA,KAOAtC,KAAA28B,YAAA9xB,EAAA8xB,eAAA,EAAA,YAAA9xB,EAAA8xB,YAOA38B,KAAA48B,SAAA/xB,EAAA+xB,UAAA58B,KAAA68B,qBAOA78B,KAAA88B,QAAAjyB,EAAAiyB,QAOA98B,KAAA+8B,SAAAlyB,EAAAkyB,aAQA/8B,KAAA6M,MAAA,KAQA7M,KAAAg9B,IAAA,KAQAh9B,KAAAi9B,QAAA,EAQAj9B,KAAAk9B,OAAA,EAQAl9B,KAAAm9B,SAAA,EAQAn9B,KAAAo9B,SAAA,EAQAp9B,KAAAq9B,SAAA,EASAr9B,KAAAi8B,SAAA,KAQAj8B,KAAAs9B,eAAAt9B,KAAAu9B,SAAAv6B,KAAAhD,MAQAA,KAAAw9B,cAAAx9B,KAAAy9B,SAAAz6B,KAAAhD,MAQAA,KAAA09B,iBAAA19B,KAAA29B,YAAA36B,KAAAhD,MAGAA,KAAA49B,iBAAA59B,KAAA69B,YAAA76B,KAAAhD,MACAA,KAAA89B,iBAAA99B,KAAA+9B,YAAA/6B,KAAAhD,MACAA,KAAAg+B,gBAAAh+B,KAAAi+B,WAAAj7B,KAAAhD,MACAA,KAAAk+B,mBAAAl+B,KAAAm+B,cAAAn7B,KAAAhD,MAyXA,QAAAo+B,GAAApB,GACA,MAAAA,GAAAviB,WAAAxL,QAAA,UAAA,IAsOA,QAAAovB,GAAAtiB,EAAA8J,EAAA7G,GACA6G,GAAA,IAAAA,EAAAsG,QAAA,OACAtG,EAAAA,EAAAyY,UAAA,IAGAzY,IAIA9J,EAAA8J,GAAA7G,GA9xBA,GAAAgZ,GAAAt3B,EAAA,iBACA69B,EAAA79B,EAAA,OAEA89B,KAAA3+B,OAAA4+B,gBAAA,mBAAA,IAAAC,iBACAC,EAAA;AA8MAxD,EAAAt4B,UAAA0M,OAAA/L,OAAAw0B,EAAAn1B,WACAs4B,EAAAt4B,UAAAmH,YAAAmxB,EACA17B,EAAAD,QAAA27B,EAOAA,EAAAt4B,UAAA06B,SAAA,WAEAv9B,KAAAsC,MAAAtC,KAAAsC,KAAAs8B,sBACA5+B,KAAAsC,KAAAs8B,oBAAA,QAAA5+B,KAAAw9B,eACAx9B,KAAAsC,KAAAs8B,oBAAA,OAAA5+B,KAAAs9B,gBACAt9B,KAAAsC,KAAAs8B,oBAAA,WAAA5+B,KAAA09B,kBACA19B,KAAAsC,KAAAs8B,oBAAA,iBAAA5+B,KAAAs9B,iBAGAt9B,KAAAg9B,MACAh9B,KAAAg9B,IAAA4B,qBACA5+B,KAAAg9B,IAAA4B,oBAAA,QAAA5+B,KAAA49B,kBACA59B,KAAAg9B,IAAA4B,oBAAA,QAAA5+B,KAAA89B,kBACA99B,KAAAg9B,IAAA4B,oBAAA,WAAA5+B,KAAA09B,kBACA19B,KAAAg9B,IAAA4B,oBAAA,OAAA5+B,KAAAg+B,mBAGAh+B,KAAAg9B,IAAA6B,QAAA,KACA7+B,KAAAg9B,IAAA8B,UAAA,KACA9+B,KAAAg9B,IAAA+B,WAAA,KACA/+B,KAAAg9B,IAAAgC,OAAA,OAIAh/B,KAAAonB,KAAA,WAAApnB,OASAm7B,EAAAt4B,UAAAi5B,KAAA,SAAA5kB,GAaA,OAZAlX,KAAAonB,KAAA,QAAApnB,MAGAkX,GACAlX,KAAAinB,KAAA,WAAA/P,IAIAlX,KAAA28B,eAAA,GAAA,gBAAA38B,MAAA28B,eACA38B,KAAA28B,YAAA38B,KAAAi/B,sBAAAj/B,KAAA8tB,MAGA9tB,KAAA48B,UACA,IAAAzB,GAAAiB,UAAA8C,MACAl/B,KAAAm/B,YACA,MAEA,KAAAhE,GAAAiB,UAAAgD,MACAp/B,KAAAq/B,aAAA,QACA,MAEA,KAAAlE,GAAAiB,UAAAkD,MACAt/B,KAAAq/B,aAAA,QACA,MAEA,KAAAlE,GAAAiB,UAAAmD,IAEA,QACAf,GAAAx+B,KAAA28B,YACA38B,KAAAw/B,WAGAx/B,KAAAy/B,aAWAtE,EAAAt4B,UAAAs8B,WAAA,WACAn/B,KAAAsC,KAAA,GAAAo9B,OAEA1/B,KAAA28B,cACA38B,KAAAsC,KAAAq6B,YAAA38B,KAAA28B,aAGA38B,KAAAsC,KAAA8K,IAAApN,KAAA8tB,IAEA9tB,KAAAm9B,SAAA,EAEAn9B,KAAAsC,KAAAq9B,iBAAA,QAAA3/B,KAAAw9B,eAAA,GACAx9B,KAAAsC,KAAAq9B,iBAAA,OAAA3/B,KAAAs9B,gBAAA,GACAt9B,KAAAsC,KAAAq9B,iBAAA,WAAA3/B,KAAA09B,kBAAA,IAQAvC,EAAAt4B,UAAAw8B,aAAA,SAAAh9B,GAQA,GAPA,UAAAA,GAAA,mBAAAu9B,OACA5/B,KAAAsC,KAAA,GAAAs9B,OAGA5/B,KAAAsC,KAAAu9B,SAAAC,cAAAz9B,GAGA,OAAArC,KAAAsC,KAGA,MAFAtC,MAAA6M,MAAA,GAAAjM,OAAA,uBAAAyB,OACArC,MAAAu9B,UAKA,IAAAwC,UAAAC,WACAhgC,KAAAsC,KAAA8K,IAAAtB,MAAA4O,QAAA1a,KAAA8tB,KAAA9tB,KAAA8tB,IAAA,GAAA9tB,KAAA8tB,QAGA,IAAAhiB,MAAA4O,QAAA1a,KAAA8tB,KACA,IAAA,GAAAntB,GAAA,EAAAA,EAAAX,KAAA8tB,IAAA9sB,SAAAL,EACAX,KAAAsC,KAAA29B,YAAAjgC,KAAAkgC,cAAA79B,EAAArC,KAAA8tB,IAAAntB,SAIAX,MAAAsC,KAAA29B,YAAAjgC,KAAAkgC,cAAA79B,EAAArC,KAAA8tB,KAIA9tB,MAAA,KAAAqC,EAAA,GAAA89B,cAAA99B,EAAAi8B,UAAA,KAAA,EAEAt+B,KAAAsC,KAAAq9B,iBAAA,QAAA3/B,KAAAw9B,eAAA,GACAx9B,KAAAsC,KAAAq9B,iBAAA,OAAA3/B,KAAAs9B,gBAAA,GACAt9B,KAAAsC,KAAAq9B,iBAAA,WAAA3/B,KAAA09B,kBAAA,GACA19B,KAAAsC,KAAAq9B,iBAAA,iBAAA3/B,KAAAs9B,gBAAA,GAEAt9B,KAAAsC,KAAAw5B,QAQAX,EAAAt4B,UAAA48B,SAAA,WAEA,gBAAAz/B,MAAA88B,UACA98B,KAAA88B,QAAA98B,KAAAogC,oBAGA,IAAApD,GAAAh9B,KAAAg9B,IAAA,GAAA0B,eAGA1B,GAAAqD,KAAA,MAAArgC,KAAA8tB,KAAA,GAIA9tB,KAAA88B,UAAA3B,EAAAmB,kBAAAgE,MAAAtgC,KAAA88B,UAAA3B,EAAAmB,kBAAAiE,SACAvD,EAAAwD,aAAArF,EAAAmB,kBAAAmE,KAGAzD,EAAAwD,aAAAxgC,KAAA88B,QAGAE,EAAA2C,iBAAA,QAAA3/B,KAAA49B,kBAAA,GACAZ,EAAA2C,iBAAA,QAAA3/B,KAAA89B,kBAAA,GACAd,EAAA2C,iBAAA,WAAA3/B,KAAA09B,kBAAA,GACAV,EAAA2C,iBAAA,OAAA3/B,KAAAg+B,iBAAA,GAEAhB,EAAA0D,QAQAvF,EAAAt4B,UAAA28B,SAAA,WAEA,gBAAAx/B,MAAA88B,UACA98B,KAAA88B,QAAA98B,KAAAogC,oBAGA,IAAAO,GAAA3gC,KAAAg9B,IAAA,GAAAyB,eAKAkC,GAAAta,QAAA,IAEAsa,EAAA9B,QAAA7+B,KAAA49B,iBACA+C,EAAA7B,UAAA9+B,KAAAk+B,mBACAyC,EAAA5B,WAAA/+B,KAAA09B,iBACAiD,EAAA3B,OAAAh/B,KAAAg+B,gBAEA2C,EAAAN,KAAA,MAAArgC,KAAA8tB,KAAA,GAKA9S,WAAA,WACA2lB,EAAAD,QACA,IAWAvF,EAAAt4B,UAAAq9B,cAAA,SAAA79B,EAAAyrB,EAAA8S,GACAA,IACAA,EAAAv+B,EAAA,IAAAyrB,EAAA/I,OAAA+I,EAAA7D,YAAA,KAAA,GAGA,IAAAziB,GAAAq4B,SAAAC,cAAA,SAKA,OAHAt4B,GAAA4F,IAAA0gB,EACAtmB,EAAAnF,KAAAu+B,EAEAp5B,GASA2zB,EAAAt4B,UAAA46B,SAAA,SAAAtF,GACAn4B,KAAA6M,MAAA,GAAAjM,OAAA,gCAAAu3B,EAAAiB,OAAAyH,UACA7gC,KAAAu9B,YAUApC,EAAAt4B,UAAA86B,YAAA,SAAAxF,GACAA,GAAAA,EAAA2I,kBACA9gC,KAAAonB,KAAA,WAAApnB,KAAAm4B,EAAA4I,OAAA5I,EAAA6I,QAUA7F,EAAAt4B,UAAAg7B,YAAA,WACA79B,KAAA6M,MAAA,GAAAjM,OACAw9B,EAAAp+B,KAAAg9B,KAAA,4BACAh9B,KAAAg9B,IAAAiE,OAAA,YAAAjhC,KAAAg9B,IAAAkE,WAAA,KAGAlhC,KAAAu9B,YASApC,EAAAt4B,UAAAk7B,YAAA,WACA/9B,KAAA6M,MAAA,GAAAjM,OAAAw9B,EAAAp+B,KAAAg9B,KAAA,qCACAh9B,KAAAu9B,YASApC,EAAAt4B,UAAAs7B,cAAA,WACAn+B,KAAA6M,MAAA,GAAAjM,OAAAw9B,EAAAp+B,KAAAg9B,KAAA,uBACAh9B,KAAAu9B,YASApC,EAAAt4B,UAAAo7B,WAAA,WACA,GAAAjB,GAAAh9B,KAAAg9B,IACAiE,EAAA/4B,SAAA80B,EAAAiE,OAAAjE,EAAAiE,OAAA,GAGA,IAAA,MAAAA,GAAA,MAAAA,GAAA,IAAAA,GAAAjE,EAAAmE,aAAAngC,OAAA,EAEA,GAAAhB,KAAA88B,UAAA3B,EAAAmB,kBAAAmE,KACAzgC,KAAAsC,KAAA06B,EAAAmE,iBAGA,IAAAnhC,KAAA88B,UAAA3B,EAAAmB,kBAAAgE,KACA,IACAtgC,KAAAsC,KAAAg+B,KAAA1T,MAAAoQ,EAAAmE,cACAnhC,KAAAi9B,QAAA,EACA,MAAA/8B,GACAF,KAAA6M,MAAA,GAAAjM,OAAA,qCAAAV,OAIA,IAAAF,KAAA88B,UAAA3B,EAAAmB,kBAAAiE,SACA,IACA,GAAA1gC,OAAAuhC,UAAA,CACA,GAAAC,GAAA,GAAAD,UACAphC,MAAAsC,KAAA++B,EAAAC,gBAAAtE,EAAAmE,aAAA,gBAEA,CACA,GAAAI,GAAA1B,SAAAC,cAAA,MACAyB,GAAAC,UAAAxE,EAAAmE,aACAnhC,KAAAsC,KAAAi/B,EAEAvhC,KAAAk9B,OAAA,EACA,MAAAh9B,GACAF,KAAA6M,MAAA,GAAAjM,OAAA,oCAAAV,OAKAF,MAAAsC,KAAA06B,EAAAyE,UAAAzE,EAAAmE,iBAIAnhC,MAAA6M,MAAA,GAAAjM,OAAA,IAAAo8B,EAAAiE,OAAA,IAAAjE,EAAAkE,WAAA,IAAAlE,EAAA0E,YAGA1hC,MAAAu9B,YAiBApC,EAAAt4B,UAAAo8B,sBAAA,SAAAnR,EAAA6T,GAEA,GAAA,IAAA7T,EAAA3B,QAAA,SACA,MAAA,EAIAwV,GAAAA,GAAA9hC,OAAAoI,SAEA02B,IACAA,EAAAkB,SAAAC,cAAA,MAMAnB,EAAA/Q,KAAAE,EACAA,EAAAyQ,EAAA3R,MAAA+R,EAAA/Q,KAEA,IAAAgU,IAAA9T,EAAAR,MAAA,KAAAqU,EAAArU,MAAAQ,EAAAR,OAAAqU,EAAArU,IAGA,OAAAQ,GAAAP,WAAAoU,EAAApU,UAAAqU,GAAA9T,EAAAZ,WAAAyU,EAAAzU,SAIA,GAHA,aAaAiO,EAAAt4B,UAAAu9B,kBAAA,WACA,MAAAjF,GAAA0G,YAAA7hC,KAAA8hC,kBAAA3G,EAAAmB,kBAAAmE,MAGAtF,EAAAt4B,UAAAg6B,mBAAA,WACA,MAAA1B,GAAA4G,aAAA/hC,KAAA8hC,kBAAA3G,EAAAiB,UAAAmD,KAGApE,EAAAt4B,UAAAi/B,cAAA,WACA,GACAh6B,GADAgmB,EAAA9tB,KAAA8tB,GAGA,IAAA9tB,KAAA08B,UAAA,CACA,GAAAsF,GAAAlU,EAAA3B,QAAA,IACArkB,GAAAgmB,EAAAwQ,UAAA0D,EAAA,EAAAlU,EAAA3B,QAAA,IAAA6V,QAEA,CACA,GAAAC,GAAAnU,EAAA3B,QAAA,IACA,MAAA8V,IACAnU,EAAAA,EAAAwQ,UAAA,EAAA2D,IAGAn6B,EAAAgmB,EAAAwQ,UAAAxQ,EAAA7D,YAAA,KAAA,GAGA,MAAAniB,IAUAqzB,EAAAt4B,UAAAq/B,oBAAA,SAAA7/B,GACA,OAAAA,GACA,IAAA84B,GAAAmB,kBAAA6F,OACA,MAAA,0BAEA,KAAAhH,GAAAmB,kBAAA8F,KACA,MAAA,kBAEA,KAAAjH,GAAAmB,kBAAAiE,SACA,MAAA,iBAEA,KAAApF,GAAAmB,kBAAAgE,KACA,MAAA,kBAEA,KAAAnF,GAAAmB,kBAAA+F,QACA,IAAAlH,GAAAmB,kBAAAmE,KAEA,QACA,MAAA,eAgBAtF,EAAAiB,WACAmD,IAAA,EACAL,MAAA,EACAE,MAAA,EACAE,MAAA,GAeAnE,EAAAkB,iBACAiG,OAAA,EACAC,OAAA,EACAC,iBAAA,EACAC,QAAA,EACAC,KAAA,GAgBAvH,EAAAmB,mBACA+F,QAAA,OACAF,OAAA,cACAC,KAAA,OACA7B,SAAA,WACAD,KAAA,OACAG,KAAA,QAGAtF,EAAA4G,cACAY,IAAAxH,EAAAiB,UAAA8C,MACA0D,IAAAzH,EAAAiB,UAAA8C,MACA2D,IAAA1H,EAAAiB,UAAA8C,MACA4D,IAAA3H,EAAAiB,UAAA8C,MACA6D,KAAA5H,EAAAiB,UAAA8C,MACA8D,IAAA7H,EAAAiB,UAAA8C,MACA+D,KAAA9H,EAAAiB,UAAA8C,MACAgE,KAAA/H,EAAAiB,UAAA8C,MACAiE,IAAAhI,EAAAiB,UAAA8C,OAGA/D,EAAA0G,aAEAuB,MAAAjI,EAAAmB,kBAAAiE,SACA8C,KAAAlI,EAAAmB,kBAAAiE,SACA+C,IAAAnI,EAAAmB,kBAAAiE,SACAgD,IAAApI,EAAAmB,kBAAAiE,SACAiD,IAAArI,EAAAmB,kBAAAiE,SACAkD,IAAAtI,EAAAmB,kBAAAiE,SACAmD,IAAAvI,EAAAmB,kBAAAiE,SAGAoC,IAAAxH,EAAAmB,kBAAA8F,KACAQ,IAAAzH,EAAAmB,kBAAA8F,KACAS,IAAA1H,EAAAmB,kBAAA8F,KACAU,IAAA3H,EAAAmB,kBAAA8F,KACAW,KAAA5H,EAAAmB,kBAAA8F,KACAY,IAAA7H,EAAAmB,kBAAA8F,KACAa,KAAA9H,EAAAmB,kBAAA8F,KACAc,KAAA/H,EAAAmB,kBAAA8F,KACAe,IAAAhI,EAAAmB,kBAAA8F,KAGAuB,KAAAxI,EAAAmB,kBAAAgE,KAGAsD,KAAAzI,EAAAmB,kBAAAmE,KACAoD,IAAA1I,EAAAmB,kBAAAmE,MAUAtF,EAAA2I,qBAAA,SAAAje,EAAA+W,GACAyB,EAAAlD,EAAA4G,aAAAlc,EAAA+W,IAUAzB,EAAA4I,oBAAA,SAAAle,EAAAiX,GACAuB,EAAAlD,EAAA0G,YAAAhc,EAAAiX,MAeAN,cAAA,GAAA1O,IAAA,KAAAkW,IAAA,SAAAtjC,EAAAjB,EAAAD,GACAC,EAAAD,SAGAykC,QAAA,oEAEAC,aAAA,SAAA3a,GAQA,IAPA,GACA4a,GADAjc,EAAA,GAEAkc,EAAA,GAAAt4B,OAAA,GACAu4B,EAAA,EACAC,EAAA,EACAC,EAAA,EAEAF,EAAA9a,EAAAvoB,QAAA,CAGA,IADAmjC,EAAA,GAAAr4B,OAAA,GACAw4B,EAAA,EAAAA,EAAAH,EAAAnjC,OAAAsjC,IACAD,EAAA9a,EAAAvoB,OAGAmjC,EAAAG,GAAA,IAAA/a,EAAAnB,WAAAic,KAGAF,EAAAG,GAAA,CAgBA,QAVAF,EAAA,GAAAD,EAAA,IAAA,EAEAC,EAAA,IAAA,EAAAD,EAAA,KAAA,EAAAA,EAAA,IAAA,EAEAC,EAAA,IAAA,GAAAD,EAAA,KAAA,EAAAA,EAAA,IAAA,EAEAC,EAAA,GAAA,GAAAD,EAAA,GAGAI,EAAAF,GAAA9a,EAAAvoB,OAAA,IAEA,IAAA,GAEAojC,EAAA,GAAA,GACAA,EAAA,GAAA,EACA,MAEA,KAAA,GAEAA,EAAA,GAAA,GASA,IAAAE,EAAA,EAAAA,EAAAF,EAAApjC,OAAAsjC,IACApc,GAAAloB,KAAAikC,QAAAvf,OAAA0f,EAAAE,IAGA,MAAApc,UAIAsc,IAAA,SAAA9jC,EAAAjB,EAAAD,GACAC,EAAAD,QAAAkB,EAAA,YAEAjB,EAAAD,QAAA27B,SAAAz6B,EAAA,cAEAjB,EAAAD,QAAAilC,YACAC,SACAC,OAAAjkC,EAAA,iCAEAkkC,SACAC,KAAAnkC,EAAA,kCAIAokC,WAAA,GAAAvI,aAAA,GAAAwI,+BAAA,GAAAC,6BAAA,KAAAC,IAAA,SAAAvkC,EAAAjB,EAAAD,GAEA,GAAA0lC,KAEAzlC,GAAAD,QAAA,WACA,MAAA,UAAAu8B,EAAAzb,GAEA4kB,EAAAnJ,EAAAjO,MACAiO,EAAAz5B,KAAA4iC,EAAAnJ,EAAAjO,KACAiO,EAAAwB,YAIAxB,EAAA9U,KAAA,WAAA,WACAie,EAAAllC,KAAA8tB,KAAA9tB,KAAAsC,OAIAge,WAIA6kB,IAAA,SAAAzkC,EAAAjB,EAAAD,GACA,GAAA27B,GAAAz6B,EAAA,kBACA0kC,EAAA1kC,EAAA,YAEAb,QAAAwlC,IAAAxlC,OAAAwlC,KAAAxlC,OAAAylC,UAIA7lC,EAAAD,QAAA,WACA,MAAA,UAAAu8B,EAAAzb,GACA,IAAAyb,EAAAz5B,KACA,MAAAge,IAIA,IAAAyb,EAAAiB,KAAAjB,EAAAe,UAAA3B,EAAAmB,kBAAA8F,KAEA,GAAAviC,OAAA0lC,MAAA,gBAAAxJ,GAAAz5B,MAmBA,GAAA,IAAAy5B,EAAAz5B,KAAAD,KAAA8pB,QAAA,SAAA,CACA,GAAA/e,GAAAi4B,IAAAG,gBAAAzJ,EAAAz5B,KAEAy5B,GAAA8I,KAAA9I,EAAAz5B,KACAy5B,EAAAz5B,KAAA,GAAAo9B,OACA3D,EAAAz5B,KAAA8K,IAAAA,EAEA2uB,EAAAoB,SAAA,EAGApB,EAAAz5B,KAAA08B,OAAA,WACAqG,IAAAI,gBAAAr4B,GACA2uB,EAAAz5B,KAAA08B,OAAA,KAEA1e,UAjCA,CACA,GAAAje,GAAA05B,EAAAiB,IAAA0I,kBAAA,eAGArjC,IAAA,IAAAA,EAAA8pB,QAAA,WACA4P,EAAAz5B,KAAA,GAAAo9B,OACA3D,EAAAz5B,KAAA8K,IAAA,QAAA/K,EAAA,WAAA+iC,EAAAlB,aAAAnI,EAAAiB,IAAAmE,cAEApF,EAAAoB,SAAA,EAGApB,EAAAz5B,KAAA08B,OAAA,WACAjD,EAAAz5B,KAAA08B,OAAA,KAEA1e,UAwBAA,SAKAqlB,iBAAA,GAAAC,YAAA,KAAAC,IAAA,SAAAnlC,EAAAjB,EAAAD,GACAC,EAAAD,SACAgP,KAAA,UACAsY,QAAA,aACAgf,YAAA,0EACAC,OAAA,aACAC,cACA,oCACA,oCAEAC,KAAA,iBACAC,SAAA,6BACAC,KAAA,2CACAC,QAAA,MACAC,YACAhkC,KAAA,MACAyrB,IAAA,yCAEAwY,SACA97B,MAAA,qBACAqW,KAAA,oBACA0lB,MAAA,OACAC,KAAA,qDAEAC,OACA,OACA,OACA,kBACA,UACA,eACA,aAEAC,cACAnwB,MAAA,SACAowB,KAAA,SACAtU,OAAA,SACAmK,cAAA,SACAoK,YAAA,4CACAC,gBAAA,SACAC,eAAA,yDACAC,kBAAA,UAEAC,iBACAC,WAAA,UACAC,KAAA,SACAC,IAAA,SACAC,KAAA,SACAC,cAAA,SACAC,cAAA,SACAC,aAAA,SACAC,cAAA,SACAC,cAAA,UACAC,cAAA,SACAC,eAAA,SACAC,cAAA,SACAC,kBAAA,SACAC,cAAA,SACAC,YAAA,SACAC,iBAAA,wDACAC,MAAA,SACAC,iBAAA,SACAC,SAAA,SACAC,MAAA,SACAC,cAAA,SACAC,eAAA,SACAC,OAAA,SACAC,eAAA,SACAC,sBAAA,SACAC,SAAA,UAEAzB,YACAxqB,WACA,eAKAksB,IAAA,SAAAjoC,EAAAjB,EAAAD,GAkBA,QAAAopC,GAAAC,GAGA,GAAAtH,GAAA1B,SAAAC,cAAA,MAEAyB,GAAAuH,MAAAllC,MAAA,QACA29B,EAAAuH,MAAAjlC,OAAA,QACA09B,EAAAuH,MAAAC,SAAA,WACAxH,EAAAuH,MAAAE,IAAA,EACAzH,EAAAuH,MAAAhrB,KAAA,EAEAyjB,EAAAuH,MAAAG,OAAA,EAQAjpC,KAAAuhC,IAAAA,EAQAvhC,KAAAkpC,QAQAlpC,KAAAmpC,SAAA,EAOAnpC,KAAAopC,OAAA,EAOAppC,KAAA6oC,SAAAA,EAQA7oC,KAAAqpC,YAKArpC,KAAAspC,WAAAtpC,KAAAspC,WAAAtmC,KAAAhD,MACAA,KAAAupC,aAAAvpC,KAAAupC,aAAAvmC,KAAAhD,MAQAA,KAAAwpC,UAAA,EAIA3pC,OAAA8/B,iBAAA,UAAA3/B,KAAAspC,YAAA,GA5FA,GAAAG,GAAA/oC,EAAA,UAGA6O,QAAA4pB,OACAsQ,EAAAC,cAAA7mC,UACAnC,EAAA,uBA2FAkoC,EAAA/lC,UAAAmH,YAAA4+B,EACAnpC,EAAAD,QAAAopC,EAMAA,EAAA/lC,UAAAqH,SAAA,WAEAlK,KAAAwpC,WAKAxpC,KAAAwpC,UAAA,EAEA3pC,OAAAggC,SAAAF,iBAAA,YAAA3/B,KAAAupC,cAAA,GACA1pC,OAAA++B,oBAAA,UAAA5+B,KAAAspC,YAAA,GAEAtpC,KAAA6oC,SAAA7hB,GAAA,aAAAhnB,KAAA2pC,OAAA3pC,MAEAA,KAAA6oC,SAAAe,KAAAC,WAAA5J,YAAAjgC,KAAAuhC,OAOAqH,EAAA/lC,UAAAinC,WAAA,WAEA9pC,KAAAwpC,WAKAxpC,KAAAwpC,UAAA,EAEA3pC,OAAAggC,SAAAjB,oBAAA,YAAA5+B,KAAAupC,cACA1pC,OAAA8/B,iBAAA,UAAA3/B,KAAAspC,YAAA,GAEAtpC,KAAA6oC,SAAA3hB,IAAA,aAAAlnB,KAAA2pC,QAEA3pC,KAAAuhC,IAAAsI,WAAAE,YAAA/pC,KAAAuhC,OASAqH,EAAA/lC,UAAAmnC,wBAAA,SAAAC,GAEA,GAAAA,EAAAC,QAAA,CAKAD,EAAAE,YAAAF,EAAAG,cAEAH,EAAAI,mBAEArqC,KAAAsqC,SAAAL,GAGAA,EAAAd,SAAAnpC,KAAAmpC,SAKA,KAAA,GAFAE,GAAAY,EAAAZ,SAEA1oC,EAAA0oC,EAAAroC,OAAA,EAAAL,GAAA,EAAAA,IAEAX,KAAAgqC,wBAAAX,EAAA1oC,MASAioC,EAAA/lC,UAAA8mC,OAAA,WAIA3pC,KAAAgqC,wBAAAhqC,KAAA6oC,SAAA0B,oBAEA,IAAAC,GAAAxqC,KAAA6oC,SAAAe,KAAAa,wBACAC,EAAAF,EAAA5mC,MAAA5D,KAAA6oC,SAAAjlC,MACA+mC,EAAAH,EAAA3mC,OAAA7D,KAAA6oC,SAAAhlC,OAEA09B,EAAAvhC,KAAAuhC,GAEAA,GAAAuH,MAAAhrB,KAAA0sB,EAAA1sB,KAAA,KACAyjB,EAAAuH,MAAAE,IAAAwB,EAAAxB,IAAA,KACAzH,EAAAuH,MAAAllC,MAAA5D,KAAA6oC,SAAAjlC,MAAA,KACA29B,EAAAuH,MAAAjlC,OAAA7D,KAAA6oC,SAAAhlC,OAAA,IAEA,KAAA,GAAAlD,GAAA,EAAAA,EAAAX,KAAAqpC,SAAAroC,OAAAL,IACA,CAEA,GAAAiqC,GAAA5qC,KAAAqpC,SAAA1oC,EAEA,IAAAiqC,EAAAzB,WAAAnpC,KAAAmpC,SAEAyB,EAAAP,mBAAA,EAEAZ,EAAAoB,MAAAC,YAAA9qC,KAAAqpC,SAAA1oC,EAAA,GACAX,KAAAuhC,IAAAwI,YAAAa,EAAAG,gBACA/qC,KAAAkpC,KAAAv+B,KAAAigC,EAAAG,gBACAH,EAAAG,eAAA,KAEApqC,IAEA,IAAAX,KAAAqpC,SAAAroC,QAEAhB,KAAA8pC,iBAIA,CAEAvI,EAAAqJ,EAAAG,cACA,IAAAC,GAAAJ,EAAAI,QACAC,EAAAL,EAAAM,cAEAN,GAAAI,SAEAzJ,EAAAuH,MAAAhrB,MAAAmtB,EAAAE,GAAAH,EAAAr2B,EAAAs2B,EAAAxqC,GAAAiqC,EAAA,KACAnJ,EAAAuH,MAAAE,KAAAiC,EAAAG,GAAAJ,EAAAlzB,EAAAmzB,EAAAI,GAAAV,EAAA,KAEApJ,EAAAuH,MAAAllC,MAAAonC,EAAApnC,MAAAqnC,EAAAxqC,EAAAiqC,EAAA,KACAnJ,EAAAuH,MAAAjlC,OAAAmnC,EAAAnnC,OAAAonC,EAAAI,EAAAV,EAAA,OAKAK,EAAAJ,EAAAU,YAEAtrC,KAAAurC,WAAAP,GAEAzJ,EAAAuH,MAAAhrB,KAAAktB,EAAAr2B,EAAA+1B,EAAA,KACAnJ,EAAAuH,MAAAE,IAAAgC,EAAAlzB,EAAA6yB,EAAA,KAEApJ,EAAAuH,MAAAllC,MAAAonC,EAAApnC,MAAA8mC,EAAA,KACAnJ,EAAAuH,MAAAjlC,OAAAmnC,EAAAnnC,OAAA8mC,EAAA,OAMA3qC,KAAAmpC,YAGAP,EAAA/lC,UAAA0oC,WAAA,SAAAP,GAEAA,EAAAr2B,EAAA,IAEAq2B,EAAApnC,OAAAonC,EAAAr2B,EACAq2B,EAAAr2B,EAAA,GAGAq2B,EAAAlzB,EAAA,IAEAkzB,EAAAnnC,QAAAmnC,EAAAlzB,EACAkzB,EAAAlzB,EAAA,GAGAkzB,EAAAr2B,EAAAq2B,EAAApnC,MAAA5D,KAAA6oC,SAAAjlC,QAEAonC,EAAApnC,MAAA5D,KAAA6oC,SAAAjlC,MAAAonC,EAAAr2B,GAGAq2B,EAAAlzB,EAAAkzB,EAAAnnC,OAAA7D,KAAA6oC,SAAAhlC,SAEAmnC,EAAAnnC,OAAA7D,KAAA6oC,SAAAhlC,OAAAmnC,EAAAlzB,IASA8wB,EAAA/lC,UAAAynC,SAAA,SAAAL,GAIA,GAAA1I,GAAAvhC,KAAAkpC,KAAAjvB,KAEAsnB,KAEAA,EAAA1B,SAAAC,cAAA,UAEAyB,EAAAuH,MAAAllC,MAAA,QACA29B,EAAAuH,MAAAjlC,OAAA,QACA09B,EAAAuH,MAAA0C,gBAAAxrC,KAAAopC,MAAA,oBAAA,cACA7H,EAAAuH,MAAAC,SAAA,WACAxH,EAAAuH,MAAAG,OAAA,EACA1H,EAAAuH,MAAA2C,YAAA,OAGAlK,EAAA5B,iBAAA,QAAA3/B,KAAA0rC,SAAA1oC,KAAAhD,OACAuhC,EAAA5B,iBAAA,QAAA3/B,KAAA2rC,SAAA3oC,KAAAhD,OACAuhC,EAAA5B,iBAAA,WAAA3/B,KAAA4rC,YAAA5oC,KAAAhD,QAMAuhC,EAAA7a,MAAAujB,EAAA4B,iBAAA,iBAAA7rC,KAAA8rC,SAIA7B,EAAAI,mBAAA,EACAJ,EAAAc,eAAAxJ,EACAA,EAAA0I,cAAAA,EAGAjqC,KAAAqpC,SAAA1+B,KAAAs/B,GACAjqC,KAAAuhC,IAAAtB,YAAAgK,EAAAc,gBACAd,EAAAc,eAAAe,SAAA7B,EAAA6B,UAQAlD,EAAA/lC,UAAA6oC,SAAA,SAAAxrC,GAEA,GAAA6rC,GAAA/rC,KAAA6oC,SAAAmD,QAAAC,WACAF,GAAAG,cAAAhsC,EAAAk5B,OAAA6Q,cAAA,QAAA8B,EAAAI,YAOAvD,EAAA/lC,UAAA8oC,SAAA,SAAAzrC,GAEA,GAAA6rC,GAAA/rC,KAAA6oC,SAAAmD,QAAAC,WACAF,GAAAG,cAAAhsC,EAAAk5B,OAAA6Q,cAAA,YAAA8B,EAAAI,YAOAvD,EAAA/lC,UAAA+oC,YAAA,SAAA1rC,GAEA,GAAA6rC,GAAA/rC,KAAA6oC,SAAAmD,QAAAC,WACAF,GAAAG,cAAAhsC,EAAAk5B,OAAA6Q,cAAA,WAAA8B,EAAAI,YAQAvD,EAAA/lC,UAAAymC,WAAA,SAAAppC,GAEA,IAAAA,EAAAksC,SAKApsC,KAAAkK,YAQA0+B,EAAA/lC,UAAA0mC,aAAA,WAEAvpC,KAAA8pC,cAQAlB,EAAA/lC,UAAA0C,QAAA,WAEAvF,KAAAuhC,IAAA,IAEA,KAAA,GAAA5gC,GAAA,EAAAA,EAAAX,KAAAqpC,SAAAroC,OAAAL,IAEAX,KAAAqpC,SAAA1oC,GAAA4gC,IAAA,IAIA1hC,QAAAggC,SAAAjB,oBAAA,YAAA5+B,KAAAupC,cACA1pC,OAAA++B,oBAAA,UAAA5+B,KAAAspC,YAEAtpC,KAAAkpC,KAAA,KACAlpC,KAAAqpC,SAAA,KACArpC,KAAA6oC,SAAA,MAIAY,EAAA4C,cAAAC,eAAA,gBAAA1D,GACAa,EAAA8C,eAAAD,eAAA,gBAAA1D,KAGA4D,UAAA,GAAAC,qBAAA,KAAAC,IAAA,SAAAhsC,EAAAjB,EAAAD,GAeA,GAAAmtC,IAKAxC,YAAA,EAKA0B,gBAAA,KAKAC,SAAA,EAKAzB,mBAAA,EAKAU,gBAAA,EAIAtrC,GAAAD,QAAAmtC,OAEAC,IAAA,SAAAlsC,EAAAjB,EAAAD,GAWAC,EAAAD,SACAmtC,iBAAAjsC,EAAA,sBACAkoC,qBAAAloC,EAAA,6BAGAmsC,yBAAA,GAAAJ,qBAAA,KAAAK,IAAA,SAAApsC,EAAAjB,EAAAD,GAMA,GAAAutC,IAQAC,QAAAtsC,EAAA,sBAAAomB,QAOAmmB,KAAA,EAAAz3B,KAAA03B,GAOAC,WAAA,IAAA33B,KAAA03B,GAOAE,WAAA53B,KAAA03B,GAAA,IASAG,YAAA,IAYAC,eACAC,QAAA,EACAC,MAAA,EACAC,OAAA,GA6BAC,aACAC,OAAA,EACAC,IAAA,EACAC,SAAA,EACAC,OAAA,EACAC,QAAA,EACAC,OAAA,EACAC,QAAA,EACAC,YAAA,EACAC,WAAA,EACAC,WAAA,EACAC,WAAA,GACAC,WAAA,GACAC,UAAA,GACAC,IAAA,GACAC,WAAA,GACAC,MAAA,GACAC,WAAA,IAkBAC,YACAC,OAAA,EACAC,MAAA,EACAC,UAAA,EACAC,WAAA,EACAC,UAAA,EACAC,eAAA,EACAC,aAAA,GAgBAC,aACA/M,QAAA,EACAz5B,OAAA,EACAC,QAAA,GAWAwmC,cAAA,SAEAC,WAAA,EAEAC,kBAAA,EAmBAC,wBACA5F,KAAA,KACA6F,WAAA,EACAC,WAAA,EACAC,WAAA,EACAC,YAAA,EACAC,aAAA,EACArE,gBAAA,EACAsE,mBAAA,EACAC,uBAAA,EACAC,aAAA,GAeAC,QACAC,KAAA,EACAC,KAAA,EACAC,KAAA,EACAC,KAAA,EACAC,KAAA,GAKAC,kBAAA,IAGA9wC,GAAAD,QAAAutC,IAEAyD,qBAAA,KAAAC,IAAA,SAAA/vC,EAAAjB,EAAAD,GAmBA,QAAAkxC,KAEAhH,EAAA3oC,KAAAf,MAQAA,KAAAqpC,YA5BA,GAAAsH,GAAAjwC,EAAA,WACAmqC,EAAAnqC,EAAA,YACAgpC,EAAAhpC,EAAA,mBACAkwC,EAAAlwC,EAAA,6BACAmwC,EAAA,GAAAF,GAAAG,MA4BAJ,GAAA7tC,UAAA0M,OAAA/L,OAAAkmC,EAAA7mC,WACA6tC,EAAA7tC,UAAAmH,YAAA0mC,EACAjxC,EAAAD,QAAAkxC,EAEAnhC,OAAAwhC,iBAAAL,EAAA7tC,WAOAe,OACAoM,IAAA,WAEA,MAAAhQ,MAAAgxC,MAAAr8B,EAAA3U,KAAAixC,iBAAArtC,OAEAsM,IAAA,SAAAf,GAGA,GAAAvL,GAAA5D,KAAAixC,iBAAArtC,KAEA,KAAAA,EAEA5D,KAAAgxC,MAAAr8B,EAAAxF,EAAAvL,EAIA5D,KAAAgxC,MAAAr8B,EAAA,EAIA3U,KAAAkxC,OAAA/hC,IAUAtL,QACAmM,IAAA,WAEA,MAAAhQ,MAAAgxC,MAAAl5B,EAAA9X,KAAAixC,iBAAAptC,QAEAqM,IAAA,SAAAf,GAGA,GAAAtL,GAAA7D,KAAAixC,iBAAAptC,MAEA,KAAAA,EAEA7D,KAAAgxC,MAAAl5B,EAAA3I,EAAAtL,EAIA7D,KAAAgxC,MAAAl5B,EAAA,EAGA9X,KAAAmxC,QAAAhiC,MAUAuhC,EAAA7tC,UAAAuuC,iBAAA,aASAV,EAAA7tC,UAAAynC,SAAA,SAAAM,GAEA,GAAAyG,GAAAx9B,UAAA7S,MAGA,IAAAqwC,EAAA,EAIA,IAAA,GAAA1wC,GAAA,EAAA0wC,EAAA1wC,EAAAA,IAEAX,KAAAsqC,SAAAz2B,UAAAlT,QAMAiqC,GAAA0G,QAEA1G,EAAA0G,OAAAvH,YAAAa,GAGAA,EAAA0G,OAAAtxC,KAEAA,KAAAqpC,SAAA1+B,KAAAigC,GAGA5qC,KAAAoxC,iBAAApxC,KAAAqpC,SAAAroC,OAAA,GACA4pC,EAAAxjB,KAAA,QAAApnB,KAGA,OAAA4qC,IAUA8F,EAAA7tC,UAAA0uC,WAAA,SAAA3G,EAAAx2B,GAEA,GAAAA,GAAA,GAAAA,GAAApU,KAAAqpC,SAAAroC,OAeA,MAbA4pC,GAAA0G,QAEA1G,EAAA0G,OAAAvH,YAAAa,GAGAA,EAAA0G,OAAAtxC,KAEAA,KAAAqpC,SAAApwB,OAAA7E,EAAA,EAAAw2B,GAGA5qC,KAAAoxC,iBAAAh9B,GACAw2B,EAAAxjB,KAAA,QAAApnB,MAEA4qC,CAIA,MAAA,IAAAhqC,OAAAgqC,EAAA,yBAAAx2B,EAAA,8BAAApU,KAAAqpC,SAAAroC,SAUA0vC,EAAA7tC,UAAA2uC,aAAA,SAAA5G,EAAA6G,GAEA,GAAA7G,IAAA6G,EAAA,CAKA,GAAAC,GAAA1xC,KAAA2xC,cAAA/G,GACAgH,EAAA5xC,KAAA2xC,cAAAF,EAEA,IAAA,EAAAC,GAAA,EAAAE,EAEA,KAAA,IAAAhxC,OAAA,iFAGAZ,MAAAqpC,SAAAqI,GAAAD,EACAzxC,KAAAqpC,SAAAuI,GAAAhH,EACA5qC,KAAAoxC,iBAAAQ,EAAAF,EAAAA,EAAAE,KASAlB,EAAA7tC,UAAA8uC,cAAA,SAAA/G,GAEA,GAAAx2B,GAAApU,KAAAqpC,SAAAld,QAAAye,EAEA,IAAA,KAAAx2B,EAEA,KAAA,IAAAxT,OAAA,2DAGA,OAAAwT,IASAs8B,EAAA7tC,UAAAgvC,cAAA,SAAAjH,EAAAx2B,GAEA,GAAA,EAAAA,GAAAA,GAAApU,KAAAqpC,SAAAroC,OAEA,KAAA,IAAAJ,OAAA,sCAGA,IAAAkxC,GAAA9xC,KAAA2xC,cAAA/G,EAEAC,GAAAC,YAAA9qC,KAAAqpC,SAAAyI,EAAA,GACA9xC,KAAAqpC,SAAApwB,OAAA7E,EAAA,EAAAw2B,GACA5qC,KAAAoxC,iBAAAh9B,IASAs8B,EAAA7tC,UAAAkvC,WAAA,SAAA39B,GAEA,GAAA,EAAAA,GAAAA,GAAApU,KAAAqpC,SAAAroC,OAEA,KAAA,IAAAJ,OAAA,8BAAAwT,EAAA,gGAGA,OAAApU,MAAAqpC,SAAAj1B,IASAs8B,EAAA7tC,UAAAknC,YAAA,SAAAa,GAEA,GAAAyG,GAAAx9B,UAAA7S,MAGA,IAAAqwC,EAAA,EAIA,IAAA,GAAA1wC,GAAA,EAAA0wC,EAAA1wC,EAAAA,IAEAX,KAAA+pC,YAAAl2B,UAAAlT,QAIA,CACA,GAAAyT,GAAApU,KAAAqpC,SAAAld,QAAAye,EAEA,IAAA,KAAAx2B,EAEA,MAGAw2B,GAAA0G,OAAA,KACAzG,EAAAC,YAAA9qC,KAAAqpC,SAAAj1B,EAAA,GAGApU,KAAAoxC,iBAAAh9B,GACAw2B,EAAAxjB,KAAA,UAAApnB,MAGA,MAAA4qC,IASA8F,EAAA7tC,UAAAmvC,cAAA,SAAA59B,GAEA,GAAAw2B,GAAA5qC,KAAA+xC,WAAA39B,EASA,OAPAw2B,GAAA0G,OAAA,KACAzG,EAAAC,YAAA9qC,KAAAqpC,SAAAj1B,EAAA,GAGApU,KAAAoxC,iBAAAh9B,GACAw2B,EAAAxjB,KAAA,UAAApnB,MAEA4qC,GASA8F,EAAA7tC,UAAAovC,eAAA,SAAAC,EAAAC,GAEA,GAGAp5B,GAAApY,EAHAyxC,EAAAF,GAAA,EACApwB,EAAA,gBAAAqwB,GAAAA,EAAAnyC,KAAAqpC,SAAAroC,OACAqxC,EAAAvwB,EAAAswB,CAGA,IAAAC,EAAA,GAAAvwB,GAAAuwB,EACA,CAGA,IAFAt5B,EAAA/Y,KAAAqpC,SAAApwB,OAAAm5B,EAAAC,GAEA1xC,EAAA,EAAAA,EAAAoY,EAAA/X,SAAAL,EAEAoY,EAAApY,GAAA2wC,OAAA,IAKA,KAFAtxC,KAAAoxC,iBAAAc,GAEAvxC,EAAA,EAAAA,EAAAoY,EAAA/X,SAAAL,EAEAoY,EAAApY,GAAAymB,KAAA,UAAApnB,KAGA,OAAA+Y,GAEA,GAAA,IAAAs5B,GAAA,IAAAryC,KAAAqpC,SAAAroC,OAEA,QAIA,MAAA,IAAAymB,YAAA,qEAaAipB,EAAA7tC,UAAAyvC,gBAAA,SAAAzJ,EAAA4G,EAAA8C,GAEA,GAAAC,GAAAxyC,KAAAixC,iBAEAwB,EAAA,GAAA7B,GAAA/H,EAAA,EAAA2J,EAAA5uC,MAAA,EAAA4uC,EAAA3uC,OAAA0uC,EAAA9C,EAOA,OALAoB,GAAA1F,IAAAqH,EAAA79B,EACAk8B,EAAAzF,IAAAoH,EAAA16B,EAEA26B,EAAAC,OAAA1yC,KAAA6wC,GAEA4B,GAQA/B,EAAA7tC,UAAA8vC,gBAAA,WAEA,GAAA3yC,KAAAkqC,QAAA,CAKAlqC,KAAA4yC,8BAEA,KAAA,GAAAjyC,GAAA,EAAA+oB,EAAA1pB,KAAAqpC,SAAAroC,OAAA0oB,EAAA/oB,IAAAA,EAEAX,KAAAqpC,SAAA1oC,GAAAgyC,iBAGA3yC,MAAA6yC,gBAAA,IAIAnC,EAAA7tC,UAAAiwC,yBAAApC,EAAA7tC,UAAA8vC,gBAOAjC,EAAA7tC,UAAAyoC,UAAA,WAEA,IAAAtrC,KAAA+yC,eACA,CAEA,GAAA,IAAA/yC,KAAAqpC,SAAAroC,OAEA,MAAA2vC,GAAAqC,UAAAC,KAiBA,KAAA,GANAC,GACAC,EACAC,EARAvgB,EAAAiD,EAAAA,EACAhD,EAAAgD,EAAAA,EAEA/C,IAAA+C,EAAAA,GACA9C,IAAA8C,EAAAA,GAMAud,GAAA,EAEA1yC,EAAA,EAAA+oB,EAAA1pB,KAAAqpC,SAAAroC,OAAA0oB,EAAA/oB,IAAAA,EACA,CACA,GAAAiqC,GAAA5qC,KAAAqpC,SAAA1oC,EAEAiqC,GAAAV,UAKAmJ,GAAA,EAEAH,EAAAlzC,KAAAqpC,SAAA1oC,GAAA2qC,YAEAzY,EAAAA,EAAAqgB,EAAAv+B,EAAAke,EAAAqgB,EAAAv+B,EACAme,EAAAA,EAAAogB,EAAAp7B,EAAAgb,EAAAogB,EAAAp7B,EAEAq7B,EAAAD,EAAAtvC,MAAAsvC,EAAAv+B,EACAy+B,EAAAF,EAAArvC,OAAAqvC,EAAAp7B,EAEAib,EAAAA,EAAAogB,EAAApgB,EAAAogB,EACAngB,EAAAA,EAAAogB,EAAApgB,EAAAogB,GAGA,IAAAC,EAEA,MAAA1C,GAAAqC,UAAAC,KAGA,IAAAT,GAAAxyC,KAAAszC,OAEAd,GAAA79B,EAAAke,EACA2f,EAAA16B,EAAAgb,EACA0f,EAAA5uC,MAAAmvB,EAAAF,EACA2f,EAAA3uC,OAAAmvB,EAAAF,EAEA9yB,KAAA+yC,eAAAP,EAGA,MAAAxyC,MAAA+yC,gBAGArC,EAAA7tC,UAAA0wC,mBAAA7C,EAAA7tC,UAAAyoC,UAQAoF,EAAA7tC,UAAAouC,eAAA,WAEA,GAAAuC,GAAAxzC,KAAAkrC,cAEAlrC,MAAAkrC,eAAAyF,EAAAG,OAAA2C,QAEA,KAAA,GAAA9yC,GAAA,EAAA+oB,EAAA1pB,KAAAqpC,SAAAroC,OAAA0oB,EAAA/oB,IAAAA,EAEAX,KAAAqpC,SAAA1oC,GAAAgyC,iBAOA,OAJA3yC,MAAAkrC,eAAAsI,EAEAxzC,KAAA+yC,eAAA,KAEA/yC,KAAAsrC,UAAAqF,EAAAG,OAAA2C,WAQA/C,EAAA7tC,UAAA6wC,YAAA,SAAA7K,GAIA,GAAA7oC,KAAAkqC,WAAAlqC,KAAA2zC,YAAA,IAAA3zC,KAAA4zC,WAAA,CAMA,GAAAjzC,GAAA+oB,CAGA,IAAA1pB,KAAA6zC,OAAA7zC,KAAA8zC,SACA,CAoBA,IAnBAjL,EAAAkL,gBAAAC,QAGAh0C,KAAA8zC,UAAA9zC,KAAA8zC,SAAA9yC,QAEA6nC,EAAAoL,cAAAC,WAAAl0C,KAAAA,KAAA8zC,UAGA9zC,KAAA6zC,OAEAhL,EAAAsL,YAAAC,SAAAp0C,KAAAA,KAAA6zC,OAGAhL,EAAAkL,gBAAAvpC,QAGAxK,KAAAq0C,aAAAxL,GAGAloC,EAAA,EAAA+oB,EAAA1pB,KAAAqpC,SAAAroC,OAAA0oB,EAAA/oB,EAAAA,IAEAX,KAAAqpC,SAAA1oC,GAAA+yC,YAAA7K,EAGAA,GAAAkL,gBAAAC,QAEAh0C,KAAA6zC,OAEAhL,EAAAsL,YAAAG,QAAAt0C,KAAAA,KAAA6zC,OAGA7zC,KAAA8zC,UAEAjL,EAAAoL,cAAAM,YAGA1L,EAAAkL,gBAAAvpC,YAOA,KAHAxK,KAAAq0C,aAAAxL,GAGAloC,EAAA,EAAA+oB,EAAA1pB,KAAAqpC,SAAAroC,OAAA0oB,EAAA/oB,IAAAA,EAEAX,KAAAqpC,SAAA1oC,GAAA+yC,YAAA7K,KAWA6H,EAAA7tC,UAAAwxC,aAAA,SAAAxL,KAWA6H,EAAA7tC,UAAA2xC,cAAA,SAAA3L,KAWA6H,EAAA7tC,UAAA4xC,aAAA,SAAA5L,GAGA,GAAA7oC,KAAAkqC,WAAAlqC,KAAA00C,OAAA,IAAA10C,KAAA4zC,WAAA,CAKA5zC,KAAA6zC,OAEAhL,EAAAsL,YAAAC,SAAAp0C,KAAA6zC,MAAAhL,GAGA7oC,KAAAw0C,cAAA3L,EACA,KAAA,GAAAloC,GAAA,EAAA+oB,EAAA1pB,KAAAqpC,SAAAroC,OAAA0oB,EAAA/oB,IAAAA,EAEAX,KAAAqpC,SAAA1oC,GAAA8zC,aAAA5L,EAGA7oC,MAAA6zC,OAEAhL,EAAAsL,YAAAG,QAAAzL,KAQA6H,EAAA7tC,UAAA0C,QAAA,SAAAovC,GAIA,GAFAjL,EAAA7mC,UAAA0C,QAAAxE,KAAAf,MAEA20C,EAEA,IAAA,GAAAh0C,GAAA,EAAA+oB,EAAA1pB,KAAAqpC,SAAAroC,OAAA0oB,EAAA/oB,IAAAA,EAEAX,KAAAqpC,SAAA1oC,GAAA4E,QAAAovC,EAIA30C,MAAAiyC,iBAEAjyC,KAAAqpC,SAAA,QAGAuL,UAAA,GAAAC,4BAAA,IAAAC,WAAA,IAAAC,kBAAA,KAAAC,IAAA,SAAAt0C,EAAAjB,EAAAD,GAkBA,QAAAkqC,KAEA1R,EAAAj3B,KAAAf,MAEAA,KAAAyc,UAAA,GAAAw4B,GAOAj1C,KAAA+oC,SAAA/oC,KAAAyc,UAAAssB,SAQA/oC,KAAAgxC,MAAAhxC,KAAAyc,UAAAu0B,MAOAhxC,KAAAk1C,MAAAl1C,KAAAyc,UAAAy4B,MAQAl1C,KAAAqpB,KAAArpB,KAAAyc,UAAA4M,KAOArpB,KAAAm1C,UAAA,EAOAn1C,KAAA00C,MAAA,EAQA10C,KAAAkqC,SAAA,EAQAlqC,KAAA4zC,YAAA,EAQA5zC,KAAAsxC,OAAA,KAQAtxC,KAAA2zC,WAAA,EAiBA3zC,KAAAo1C,WAAA,KAQAp1C,KAAAq1C,IAAA,EAQAr1C,KAAAs1C,IAAA,EAQAt1C,KAAAszC,QAAA,GAAA3C,GAAAqC,UAAA,EAAA,EAAA,EAAA,GAQAhzC,KAAA+yC,eAAA,KAQA/yC,KAAA6zC,MAAA,KAEA7zC,KAAA6yC,gBAAA,EA5JA,GAAAlC,GAAAjwC,EAAA,WACAkwC,EAAAlwC,EAAA,6BACAs3B,EAAAt3B,EAAA,iBAEAu0C,GADAv0C,EAAA,YACAA,EAAA,gBACAmwC,EAAA,GAAAF,GAAAG,OACAyE,GAAArK,eAAA,GAAAyF,GAAAG,OAAA6C,WAAA,EAAAtK,YA0JAK,GAAA7mC,UAAA0M,OAAA/L,OAAAw0B,EAAAn1B,WACA6mC,EAAA7mC,UAAAmH,YAAA0/B,EACAjqC,EAAAD,QAAAkqC,CAEA,IAAA8L,GAAA,SAAAC,GAEAz1C,KAAAy1C,IAAAA,EAEAz1C,KAAA2U,EAAA,EACA3U,KAAA8X,EAAA,EAGAvI,QAAAwhC,iBAAAyE,EAAA3yC,WAOA8R,GACA3E,IAAA,WAEA,MAAAhQ,MAAAy1C,IAAA1M,SAAAp0B,GAEAzE,IAAA,SAAAf,GAEAnP,KAAAy1C,IAAA1M,SAAAp0B,EAAAxF,EACAnP,KAAAy1C,IAAA5C,gBAAA,IAIA/6B,GACA9H,IAAA,WAEA,MAAAhQ,MAAAy1C,IAAAC,SAAA59B,GAEA5H,IAAA,SAAAf,GAEAnP,KAAAy1C,IAAA1M,SAAAjxB,EAAA3I,EACAnP,KAAAy1C,IAAA5C,gBAAA,MAMAtjC,OAAAwhC,iBAAArH,EAAA7mC,WAOA8R,GACA3E,IAAA,WAEA,MAAAhQ,MAAA+oC,SAAAp0B,GAEAzE,IAAA,SAAAf,GAEAnP,KAAA+oC,SAAAp0B,EAAAxF,EACAnP,KAAA6yC,gBAAA,IAUA/6B,GACA9H,IAAA,WAEA,MAAAhQ,MAAA+oC,SAAAjxB,GAEA5H,IAAA,SAAAf,GAEAnP,KAAA+oC,SAAAjxB,EAAA3I,EACAnP,KAAA6yC,gBAAA,IAIA8C,QACA3lC,IAAA,WAEA,MAAAhQ,MAAAgxC,MAAAr8B,GAEAzE,IAAA,SAAAf,GAEAnP,KAAAgxC,MAAAr8B,EAAAxF,EACAnP,KAAA6yC,gBAAA,IAUA+C,QACA5lC,IAAA,WAEA,MAAAhQ,MAAAgxC,MAAAl5B,GAEA5H,IAAA,SAAAf,GAEAnP,KAAAgxC,MAAAl5B,EAAA3I,EACAnP,KAAA6yC,gBAAA,IAIAgD,UACA7lC,IAAA,WAEA,MAAAhQ,MAAAm1C,WAEAjlC,IAAA,SAAAf,GAEAnP,KAAAm1C,UAAAhmC,EACAnP,KAAA6yC,gBAAA,EACA7yC,KAAAq1C,IAAA7/B,KAAAsgC,IAAA3mC,GACAnP,KAAAs1C,IAAA9/B,KAAAugC,IAAA5mC,KAUAymC,QACA5lC,IAAA,WAEA,MAAAhQ,MAAAgxC,MAAAl5B,GAEA5H,IAAA,SAAAf,GAEAnP,KAAAgxC,MAAAl5B,EAAA3I,EACAnP,KAAA6yC,gBAAA,IAWAmD,cACAhmC,IAAA,WAEA,GAAAiF,GAAAjV,IAEA,GAAA,CACA,IAAAiV,EAAAi1B,QAEA,OAAA,CAGAj1B,GAAAA,EAAAq8B,aACAr8B,EAEA,QAAA,IAYAghC,MACAjmC,IAAA,WAEA,MAAAhQ,MAAA6zC,OAEA3jC,IAAA,SAAAf,GAEAnP,KAAA6zC,QAEA7zC,KAAA6zC,MAAAD,YAAA,GAGA5zC,KAAA6zC,MAAA1kC,EAEAnP,KAAA6zC,QAEA7zC,KAAA6zC,MAAAD,YAAA,KAaAsC,SACAlmC,IAAA,WAEA,MAAAhQ,MAAA8zC,UAAA9zC,KAAA8zC,SAAAt1B,SAEAtO,IAAA,SAAAf,GAEAnP,KAAA8zC,SAAA3kC,GAAAA,EAAAqP,YAWAkrB,EAAA7mC,UAAA8vC,gBAAA,WA+BA3yC,KAAAyc,UAAAk2B,gBAAA3yC,KAAAsxC,OAAA70B,WAEAzc,KAAA2zC,WAAA3zC,KAAA00C,MAAA10C,KAAAsxC,OAAAqC,YAOAjK,EAAA7mC,UAAA+vC,6BAAAlJ,EAAA7mC,UAAA8vC,gBAUAjJ,EAAA7mC,UAAAyoC,UAAA,SAAA6K,GAEA,MAAAxF,GAAAqC,UAAAC,OAQAvJ,EAAA7mC,UAAAouC,eAAA,WAEA,MAAAjxC,MAAAsrC,UAAAqF,EAAAG,OAAA2C,WASA/J,EAAA7mC,UAAAuzC,SAAA,SAAArN,GAiBA,MAZA/oC,MAAAsxC,OAQAtxC,KAAA4yC,gCANA5yC,KAAAsxC,OAAAiE,EACAv1C,KAAA4yC,+BACA5yC,KAAAsxC,OAAA,MAQAtxC,KAAAkrC,eAAAt3B,MAAAm1B,IAWAW,EAAA7mC,UAAAwzC,QAAA,SAAAtN,EAAA7jB,EAAAoxB,GAsBA,MApBApxB,KAEA6jB,EAAA7jB,EAAAkxB,SAAArN,IAMA/oC,KAAAsxC,OAQAtxC,KAAA4yC,gCANA5yC,KAAAsxC,OAAAiE,EACAv1C,KAAA4yC,+BACA5yC,KAAAsxC,OAAA,MAQAtxC,KAAAkrC,eAAAqL,aAAAxN,EAAAuN,IASA5M,EAAA7mC,UAAA6wC,YAAA,SAAA7K,KAWAa,EAAA7mC,UAAA4xC,aAAA,SAAA5L,KAaAa,EAAA7mC,UAAAyvC,gBAAA,SAAAzJ,EAAA0J,EAAA9C,GAEA,GAAA+C,GAAAxyC,KAAAixC,iBAEAwB,EAAA,GAAA7B,GAAA/H,EAAA,EAAA2J,EAAA5uC,MAAA,EAAA4uC,EAAA3uC,OAAA0uC,EAAA9C,EAOA,OALAoB,GAAA1F,IAAAqH,EAAA79B,EACAk8B,EAAAzF,IAAAoH,EAAA16B,EAEA26B,EAAAC,OAAA1yC,KAAA6wC,GAEA4B,GASA/I,EAAA7mC,UAAA2zC,UAAA,SAAAC,GAEA,IAAAA,IAAAA,EAAAnM,SAEA,KAAA,IAAA1pC,OAAA,0CAIA,OADA61C,GAAAnM,SAAAtqC,MACAy2C,GAiBA/M,EAAA7mC,UAAA6zC,aAAA,SAAA/hC,EAAAmD,EAAA69B,EAAAC,EAAAC,EAAAc,EAAAC,EAAAC,EAAAC,GAYA,MAVA92C,MAAA+oC,SAAAp0B,EAAAA,GAAA,EACA3U,KAAA+oC,SAAAjxB,EAAAA,GAAA,EACA9X,KAAAgxC,MAAAr8B,EAAAghC,EAAAA,EAAA,EACA31C,KAAAgxC,MAAAl5B,EAAA89B,EAAAA,EAAA,EACA51C,KAAA61C,SAAAA,GAAA,EACA71C,KAAAqpB,KAAA1U,EAAAgiC,GAAA,EACA32C,KAAAqpB,KAAAvR,EAAA8+B,GAAA,EACA52C,KAAAk1C,MAAAvgC,EAAAkiC,GAAA,EACA72C,KAAAk1C,MAAAp9B,EAAAg/B,GAAA,EACA92C,KAAA6yC,gBAAA,EACA7yC,MAOA0pC,EAAA7mC,UAAA0C,QAAA,WAGAvF,KAAA+oC,SAAA,KACA/oC,KAAAgxC,MAAA,KACAhxC,KAAAk1C,MAAA,KACAl1C,KAAAqpB,KAAA,KAEArpB,KAAAsxC,OAAA,KAEAtxC,KAAAszC,QAAA,KACAtzC,KAAA+yC,eAAA,KACA/yC,KAAA6zC,MAAA,KAEA7zC,KAAAkrC,eAAA,KACAlrC,KAAAo1C,WAAA,QAGA2B,WAAA,GAAAnC,UAAA,GAAAC,4BAAA,IAAAmC,cAAA,GAAAxa,cAAA,KAAAya,IAAA,SAAAv2C,EAAAjB,EAAAD,GAaA,QAAAy1C,KAEAj1C,KAAAkrC,eAAA,GAAAyF,GAAAG,OACA9wC,KAAAk3C,eAAA,GAAAvG,GAAAG,OAEA9wC,KAAA+oC,SAAA,GAAA4H,GAAAwG,MAAA,GACAn3C,KAAAgxC,MAAA,GAAAL,GAAAwG,MAAA,EAAA,GACAn3C,KAAAk1C,MAAA,GAAAvE,GAAAwG,MAAA,GACAn3C,KAAAqpB,KAAA,GAAAsnB,GAAAwG,MAAA,GAEAn3C,KAAA61C,SAAA,EAKA71C,KAAA+J,OAAA,EA3BA,GAAA4mC,GAAAjwC,EAAA,UA8BAu0C,GAAApyC,UAAAmH,YAAAirC,EAEAA,EAAApyC,UAAA8vC,gBAAA,SAAAyE,GAEA,GAAAC,GAAAD,EAAAlM,eACAD,EAAAjrC,KAAAkrC,eACAoM,EAAAt3C,KAAAk3C,cAyBA,OAnBAI,GAAA72C,EAAAT,KAAAs1C,IAAAt1C,KAAAgxC,MAAAr8B,EACA2iC,EAAAtyC,EAAAhF,KAAAq1C,IAAAr1C,KAAAgxC,MAAAr8B,EACA2iC,EAAAjjB,GAAAr0B,KAAAq1C,IAAAr1C,KAAAgxC,MAAAl5B,EACAw/B,EAAAjM,EAAArrC,KAAAs1C,IAAAt1C,KAAAgxC,MAAAl5B,EACAw/B,EAAAnM,GAAAnrC,KAAA+oC,SAAAp0B,GAAA3U,KAAAk1C,MAAAvgC,EAAA2iC,EAAA72C,EAAAT,KAAAk1C,MAAAp9B,EAAAw/B,EAAAjjB,GACAijB,EAAAlM,GAAAprC,KAAA+oC,SAAAjxB,GAAA9X,KAAAk1C,MAAAvgC,EAAA2iC,EAAAtyC,EAAAhF,KAAAk1C,MAAAp9B,EAAAw/B,EAAAjM,GAMAJ,EAAAxqC,EAAA62C,EAAA72C,EAAA42C,EAAA52C,EAAA62C,EAAAtyC,EAAAqyC,EAAAhjB,EACA4W,EAAAjmC,EAAAsyC,EAAA72C,EAAA42C,EAAAryC,EAAAsyC,EAAAtyC,EAAAqyC,EAAAhM,EACAJ,EAAA5W,EAAAijB,EAAAjjB,EAAAgjB,EAAA52C,EAAA62C,EAAAjM,EAAAgM,EAAAhjB,EACA4W,EAAAI,EAAAiM,EAAAjjB,EAAAgjB,EAAAryC,EAAAsyC,EAAAjM,EAAAgM,EAAAhM,EACAJ,EAAAE,GAAAmM,EAAAnM,GAAAkM,EAAA52C,EAAA62C,EAAAlM,GAAAiM,EAAAhjB,EAAAgjB,EAAAlM,GACAF,EAAAG,GAAAkM,EAAAnM,GAAAkM,EAAAryC,EAAAsyC,EAAAlM,GAAAiM,EAAAhM,EAAAgM,EAAAjM,GAEAprC,KAAA+J,OAAA,GACA,GAOAtK,EAAAD,QAAAy1C,IAIAL,UAAA,KAAA2C,IAAA,SAAA72C,EAAAjB,EAAAD,GAkBA,QAAAg4C,KAEA9G,EAAA3vC,KAAAf,MAQAA,KAAAy3C,UAAA,EAQAz3C,KAAA03C,UAAA,EAQA13C,KAAA23C,UAAA,EAQA33C,KAAA43C,gBAQA53C,KAAA63C,KAAA,SASA73C,KAAA83C,UAAA,SASA93C,KAAA+3C,UAAAhL,EAAAW,YAAAC,OAQA3tC,KAAAg4C,YAAA,KASAh4C,KAAAi4C,UAOAj4C,KAAAk4C,QAAA,EAOAl4C,KAAAm4C,cAAA,EAQAn4C,KAAAo4C,aAAA,GAAAzH,GAAAqC,UAAA,EAAA,EAAA,EAAA,GASAhzC,KAAA+J,OAAA,EASA/J,KAAAq4C,SAAA,EAEAr4C,KAAAs4C,aAAA,EAQAt4C,KAAAu4C,mBAAA,EAhJA,GAAA7H,GAAAhwC,EAAA,wBACAgD,EAAAhD,EAAA,uBACA83C,EAAA93C,EAAA,0CACA+3C,EAAA/3C,EAAA,4CACAg4C,EAAAh4C,EAAA,kBACAiwC,EAAAjwC,EAAA,WACAqsC,EAAArsC,EAAA,YACAi4C,EAAA,GAAAhI,GAAAwG,KA0JAK,GAAA30C,UAAA0M,OAAA/L,OAAAktC,EAAA7tC,WACA20C,EAAA30C,UAAAmH,YAAAwtC,EACA/3C,EAAAD,QAAAg4C,EAQAA,EAAA30C,UAAA+1C,MAAA,WAEA,GAAAA,GAAA,GAAApB,EAEAoB,GAAAhF,WAAA5zC,KAAA4zC,WACAgF,EAAAnB,UAAAz3C,KAAAy3C,UACAmB,EAAAlB,UAAA13C,KAAA03C,UACAkB,EAAAjB,UAAA33C,KAAA23C,UACAiB,EAAAf,KAAA73C,KAAA63C,KACAe,EAAAb,UAAA/3C,KAAA+3C,UACAa,EAAAV,OAAAl4C,KAAAk4C,OACAU,EAAAT,cAAAn4C,KAAAm4C,cACAS,EAAA7uC,OAAA,EACA6uC,EAAAP,SAAA,EACAO,EAAAL,kBAAAv4C,KAAAu4C,iBAGA,KAAA,GAAA53C,GAAA,EAAAA,EAAAX,KAAA43C,aAAA52C,SAAAL,EAEAi4C,EAAAhB,aAAAjtC,KAAA3K,KAAA43C,aAAAj3C,GAAAi4C,QAOA,OAJAA,GAAAZ,YAAAY,EAAAhB,aAAAgB,EAAAhB,aAAA52C,OAAA,GAEA43C,EAAAC,oBAEAD,GAWApB,EAAA30C,UAAAi2C,UAAA,SAAApB,EAAAqB,EAAArE,GAMA,GAJA10C,KAAA03C,UAAAA,GAAA,EACA13C,KAAA23C,UAAAoB,GAAA,EACA/4C,KAAAg5C,UAAA9wC,SAAAwsC,EAAA,EAAAA,EAEA10C,KAAAg4C,YAEA,GAAAh4C,KAAAg4C,YAAAiB,MAAAC,OAAAl4C,OACA,CAEA,GAAAi4C,GAAA,GAAAtI,GAAAwI,QAAAn5C,KAAAg4C,YAAAiB,MAAAC,OAAA16B,MAAA,IACAy6B,GAAAG,QAAA,EACAp5C,KAAAq5C,UAAAJ,OAKAj5C,MAAAg4C,YAAAN,UAAA13C,KAAA03C,UACA13C,KAAAg4C,YAAAL,UAAA33C,KAAA23C,UACA33C,KAAAg4C,YAAAgB,UAAAh5C,KAAAg5C,SAIA,OAAAh5C,OAUAw3C,EAAA30C,UAAAy2C,OAAA,SAAA3kC,EAAAmD,GAEA,GAAAmhC,GAAA,GAAAtI,GAAAwI,SAAAxkC,EAAAmD,GAIA,OAHAmhC,GAAAG,QAAA,EACAp5C,KAAAq5C,UAAAJ,GAEAj5C,MAWAw3C,EAAA30C,UAAA02C,OAAA,SAAA5kC,EAAAmD,GAKA,MAHA9X,MAAAg4C,YAAAiB,MAAAC,OAAAvuC,KAAAgK,EAAAmD,GACA9X,KAAA+J,OAAA,EAEA/J,MAaAw3C,EAAA30C,UAAA22C,iBAAA,SAAAC,EAAAC,EAAAC,EAAAC,GAEA55C,KAAAg4C,YAEA,IAAAh4C,KAAAg4C,YAAAiB,MAAAC,OAAAl4C,SAEAhB,KAAAg4C,YAAAiB,MAAAC,QAAA,EAAA,IAKAl5C,KAAAs5C,OAAA,EAAA,EAGA,IAAAO,GACAC,EACA15C,EAAA,GACA84C,EAAAl5C,KAAAg4C,YAAAiB,MAAAC,MAEA,KAAAA,EAAAl4C,QAEAhB,KAAAs5C,OAAA,EAAA,EAOA,KAAA,GAJAS,GAAAb,EAAAA,EAAAl4C,OAAA,GACAg5C,EAAAd,EAAAA,EAAAl4C,OAAA,GAEA0oB,EAAA,EACA/oB,EAAA,EAAAP,GAAAO,IAAAA,EAEA+oB,EAAA/oB,EAAAP,EAEAy5C,EAAAE,GAAAN,EAAAM,GAAArwB,EACAowB,EAAAE,GAAAN,EAAAM,GAAAtwB,EAEAwvB,EAAAvuC,KAAAkvC,GAAAJ,GAAAE,EAAAF,GAAA/vB,EAAAmwB,GAAAnwB,EACAowB,GAAAJ,GAAAE,EAAAF,GAAAhwB,EAAAowB,GAAApwB,EAKA,OAFA1pB,MAAA+J,MAAA/J,KAAAs4C,aAAA,EAEAt4C,MAcAw3C,EAAA30C,UAAAo3C,cAAA,SAAAR,EAAAC,EAAAQ,EAAAC,EAAAR,EAAAC,GAEA55C,KAAAg4C,YAEA,IAAAh4C,KAAAg4C,YAAAiB,MAAAC,OAAAl4C,SAEAhB,KAAAg4C,YAAAiB,MAAAC,QAAA,EAAA,IAKAl5C,KAAAs5C,OAAA,EAAA,EAgBA,KAAA,GAZAc,GACAC,EACAC,EACAC,EACAC,EALAp6C,EAAA,GAMA84C,EAAAl5C,KAAAg4C,YAAAiB,MAAAC,OAEAa,EAAAb,EAAAA,EAAAl4C,OAAA,GACAg5C,EAAAd,EAAAA,EAAAl4C,OAAA,GAEA0oB,EAAA,EAEA/oB,EAAA,EAAAP,GAAAO,IAAAA,EAEA+oB,EAAA/oB,EAAAP,EAEAg6C,EAAA,EAAA1wB,EACA2wB,EAAAD,EAAAA,EACAE,EAAAD,EAAAD,EAEAG,EAAA7wB,EAAAA,EACA8wB,EAAAD,EAAA7wB,EAEAwvB,EAAAvuC,KAAA2vC,EAAAP,EAAA,EAAAM,EAAA3wB,EAAA+vB,EAAA,EAAAW,EAAAG,EAAAL,EAAAM,EAAAb,EACAW,EAAAN,EAAA,EAAAK,EAAA3wB,EAAAgwB,EAAA,EAAAU,EAAAG,EAAAJ,EAAAK,EAAAZ,EAKA,OAFA55C,MAAA+J,MAAA/J,KAAAs4C,aAAA,EAEAt4C,MAeAw3C,EAAA30C,UAAA43C,MAAA,SAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAEA96C,KAAAg4C,YAEA,IAAAh4C,KAAAg4C,YAAAiB,MAAAC,OAAAl4C,QAEAhB,KAAAg4C,YAAAiB,MAAAC,OAAAvuC,KAAA+vC,EAAAC,GAKA36C,KAAAs5C,OAAAoB,EAAAC,EAGA,IAAAzB,GAAAl5C,KAAAg4C,YAAAiB,MAAAC,OACAa,EAAAb,EAAAA,EAAAl4C,OAAA,GACAg5C,EAAAd,EAAAA,EAAAl4C,OAAA,GACAw3B,EAAAwhB,EAAAW,EACAI,EAAAhB,EAAAW,EACAljB,EAAAqjB,EAAAF,EACAjjB,EAAAkjB,EAAAF,EACAM,EAAAxlC,KAAAygB,IAAAuC,EAAAd,EAAAqjB,EAAAvjB,EAEA,IAAA,KAAAwjB,GAAA,IAAAF,GAEA5B,EAAAA,EAAAl4C,OAAA,KAAA05C,GAAAxB,EAAAA,EAAAl4C,OAAA,KAAA25C,IAEAzB,EAAAvuC,KAAA+vC,EAAAC,OAIA,CACA,GAAAM,GAAAziB,EAAAA,EAAAuiB,EAAAA,EACAG,EAAA1jB,EAAAA,EAAAE,EAAAA,EACAyjB,EAAA3iB,EAAAhB,EAAAujB,EAAArjB,EACA0jB,EAAAN,EAAAtlC,KAAA6lC,KAAAJ,GAAAD,EACAM,EAAAR,EAAAtlC,KAAA6lC,KAAAH,GAAAF,EACAO,EAAAH,EAAAD,EAAAF,EACAO,EAAAF,EAAAH,EAAAD,EACArkB,EAAAukB,EAAA1jB,EAAA4jB,EAAAP,EACAjkB,EAAAskB,EAAA5jB,EAAA8jB,EAAA9iB,EACAzB,EAAAgkB,GAAAO,EAAAC,GACAvkB,EAAAwB,GAAA8iB,EAAAC,GACA1lB,EAAA6B,GAAA0jB,EAAAI,GACAC,EAAAjkB,GAAA4jB,EAAAI,GACAE,EAAAlmC,KAAAmmC,MAAA3kB,EAAAF,EAAAC,EAAAF,GACA+kB,EAAApmC,KAAAmmC,MAAAF,EAAA3kB,EAAAjB,EAAAgB,EAEA72B,MAAA67C,IAAAhlB,EAAA6jB,EAAA5jB,EAAA6jB,EAAAG,EAAAY,EAAAE,EAAAb,EAAAvjB,EAAAE,EAAAc,GAKA,MAFAx4B,MAAA+J,MAAA/J,KAAAs4C,aAAA,EAEAt4C,MAcAw3C,EAAA30C,UAAAg5C,IAAA,SAAAhlB,EAAAC,EAAAgkB,EAAAY,EAAAE,EAAAE,GAIA,GAFAA,EAAAA,IAAA,EAEAJ,IAAAE,EAEA,MAAA57C,OAGA87C,GAAAJ,GAAAE,EAEAA,GAAA,EAAApmC,KAAA03B,GAEA4O,GAAAF,GAAAF,IAEAA,GAAA,EAAAlmC,KAAA03B,GAGA,IAAA6O,GAAAD,EAAA,IAAAJ,EAAAE,GAAAA,EAAAF,EACAM,EAAA,GAAAxmC,KAAAymC,KAAAzmC,KAAAygB,IAAA8lB,IAAA,EAAAvmC,KAAA03B,IAEA,IAAA,IAAA6O,EAEA,MAAA/7C,KAGA,IAAAk8C,GAAArlB,EAAArhB,KAAAugC,IAAA2F,GAAAZ,EACAqB,EAAArlB,EAAAthB,KAAAsgC,IAAA4F,GAAAZ,CAEA96C,MAAAg4C,YAEAh4C,KAAAg4C,YAAAiB,MAAAC,OAAAvuC,KAAAuxC,EAAAC,GAIAn8C,KAAAs5C,OAAA4C,EAAAC,EAeA,KAAA,GAZAjD,GAAAl5C,KAAAg4C,YAAAiB,MAAAC,OAEAkD,EAAAL,GAAA,EAAAC,GACAK,EAAA,EAAAD,EAEAE,EAAA9mC,KAAAugC,IAAAqG,GACAG,EAAA/mC,KAAAsgC,IAAAsG,GAEAI,EAAAR,EAAA,EAEAS,EAAAD,EAAA,EAAAA,EAEA77C,EAAA,EAAA67C,GAAA77C,EAAAA,IACA,CACA,GAAA+7C,GAAA/7C,EAAA87C,EAAA97C,EAGAg8C,EAAA,EAAAjB,EAAAW,EAAAK,EAEAroB,EAAA7e,KAAAugC,IAAA4G,GACAr8C,GAAAkV,KAAAsgC,IAAA6G,EAEAzD,GAAAvuC,MAAA2xC,EAAAjoB,EAAAkoB,EAAAj8C,GAAAw6C,EAAAjkB,GACAylB,GAAAh8C,EAAAi8C,EAAAloB,GAAAymB,EAAAhkB,GAKA,MAFA92B,MAAA+J,MAAA/J,KAAAs4C,aAAA,EAEAt4C,MAWAw3C,EAAA30C,UAAA+5C,UAAA,SAAA7D,EAAArE,GAeA,MAbA10C,MAAA68C,SAAA,EACA78C,KAAA88C,UAAA/D,GAAA,EACA/4C,KAAAy3C,UAAAvvC,SAAAwsC,EAAA,EAAAA,EAEA10C,KAAAg4C,aAEAh4C,KAAAg4C,YAAAiB,MAAAC,OAAAl4C,QAAA,IAEAhB,KAAAg4C,YAAA+E,KAAA/8C,KAAA68C,QACA78C,KAAAg4C,YAAA8E,UAAA98C,KAAA88C,UACA98C,KAAAg4C,YAAAP,UAAAz3C,KAAAy3C,WAGAz3C,MAQAw3C,EAAA30C,UAAAm6C,QAAA,WAMA,MAJAh9C,MAAA68C,SAAA,EACA78C,KAAA88C,UAAA,KACA98C,KAAAy3C,UAAA,EAEAz3C,MAWAw3C,EAAA30C,UAAAo6C,SAAA,SAAAtoC,EAAAmD,EAAAlU,EAAAC,GAIA,MAFA7D,MAAAq5C,UAAA,GAAA1I,GAAAqC,UAAAr+B,EAAAmD,EAAAlU,EAAAC,IAEA7D,MAYAw3C,EAAA30C,UAAAq6C,gBAAA,SAAAvoC,EAAAmD,EAAAlU,EAAAC,EAAAi3C,GAIA,MAFA96C,MAAAq5C,UAAA,GAAA1I,GAAAwM,iBAAAxoC,EAAAmD,EAAAlU,EAAAC,EAAAi3C,IAEA96C,MAWAw3C,EAAA30C,UAAAu6C,WAAA,SAAAzoC,EAAAmD,EAAAgjC,GAIA,MAFA96C,MAAAq5C,UAAA,GAAA1I,GAAA0M,OAAA1oC,EAAAmD,EAAAgjC,IAEA96C,MAYAw3C,EAAA30C,UAAAy6C,YAAA,SAAA3oC,EAAAmD,EAAAlU,EAAAC,GAIA,MAFA7D,MAAAq5C,UAAA,GAAA1I,GAAA4M,QAAA5oC,EAAAmD,EAAAlU,EAAAC,IAEA7D,MASAw3C,EAAA30C,UAAA26C,YAAA,SAAAj5B,GAIA,GAAA20B,GAAA30B,EAEA60B,GAAA,CAQA,IANAF,YAAAvI,GAAAwI,UAEAC,EAAAF,EAAAE,OACAF,EAAAA,EAAAA,SAGAptC,MAAA4O,QAAAw+B,GACA,CAGAA,EAAA,GAAAptC,OAAA+H,UAAA7S,OAEA,KAAA,GAAAL,GAAA,EAAAA,EAAAu4C,EAAAl4C,SAAAL,EAEAu4C,EAAAv4C,GAAAkT,UAAAlT,GAIA,GAAAs4C,GAAA,GAAAtI,GAAAwI,QAAAD,EAKA,OAJAD,GAAAG,OAAAA,EAEAp5C,KAAAq5C,UAAAJ,GAEAj5C,MAQAw3C,EAAA30C,UAAAkC,MAAA,WASA,MAPA/E,MAAA03C,UAAA,EACA13C,KAAA68C,SAAA,EAEA78C,KAAA+J,OAAA,EACA/J,KAAAy9C,YAAA,EACAz9C,KAAA43C,gBAEA53C,MAWAw3C,EAAA30C,UAAAyvC,gBAAA,SAAAzJ,EAAA4G,EAAA8C,GAGA9C,EAAAA,GAAA,CAEA,IAAA+C,GAAAxyC,KAAAixC,iBAEAyM,EAAA,GAAAlF,GAAAhG,EAAA5uC,MAAA6rC,EAAA+C,EAAA3uC,OAAA4rC,GAEAxrC,EAAAP,EAAAi6C,WAAAD,EAAAtyC,OAAAmnC,EASA,OARAtuC,GAAA25C,YAAAnO,WAAAA,EAEAiO,EAAA3lB,QAAAiZ,MAAAvB,EAAAA,GAEAiO,EAAA3lB,QAAA8lB,WAAArL,EAAA79B,GAAA69B,EAAA16B,GAEA2gC,EAAAqF,eAAA99C,KAAA09C,EAAA3lB,SAEA9zB,GASAuzC,EAAA30C,UAAAwxC,aAAA,SAAAxL,GAIA7oC,KAAAq4C,UAEAr4C,KAAA+J,OAAA,EACA/J,KAAAq4C,SAAA,GAGAxP,EAAAkV,kBAAAlV,EAAAmD,QAAAgS,UACAnV,EAAAmD,QAAAgS,SAAAtL,OAAA1yC,OAUAw3C,EAAA30C,UAAA2xC,cAAA,SAAA3L,GAEA,GAAA7oC,KAAAk4C,UAAA,EAAA,CAMAl4C,KAAA83C,YAAA93C,KAAA63C,OACA73C,KAAA+J,OAAA,EA0BA,IAAAguB,GAAA8Q,EAAA9Q,QACAtb,EAAAzc,KAAAkrC,eAEA+S,EAAApV,EAAAqV,WAAAl+C,KAAA+3C,UACAkG,KAAAlmB,EAAAomB,2BAEApmB,EAAAomB,yBAAAF,EAGA,IAAAxO,GAAA5G,EAAA4G,UACA1X,GAAA2e,aACAj6B,EAAAhc,EAAAgvC,EACAhzB,EAAAzX,EAAAyqC,EACAhzB,EAAA4X,EAAAob,EACAhzB,EAAA4uB,EAAAoE,EACAhzB,EAAA0uB,GAAAsE,EACAhzB,EAAA2uB,GAAAqE,GAGAgJ,EAAAqF,eAAA99C,KAAA+3B,KAUAyf,EAAA30C,UAAAyoC,UAAA,SAAA6K,GAEA,IAAAn2C,KAAA+yC,eACA,CAGA,IAAA/yC,KAAA4zC,WAEA,MAAAjD,GAAAqC,UAAAC,KAGAjzC,MAAAs4C,cAEAt4C,KAAA64C,oBAEA74C,KAAAq4C,SAAA,EACAr4C,KAAAu4C,mBAAA,EACAv4C,KAAAs4C,aAAA,EAGA,IAAA9F,GAAAxyC,KAAAo4C,aAEAgG,EAAA5L,EAAA79B,EACA0pC,EAAA7L,EAAA5uC,MAAA4uC,EAAA79B,EAEA2pC,EAAA9L,EAAA16B,EACAymC,EAAA/L,EAAA3uC,OAAA2uC,EAAA16B,EAEAozB,EAAAiL,GAAAn2C,KAAAkrC,eAEAzqC,EAAAyqC,EAAAzqC,EACAuE,EAAAkmC,EAAAlmC,EACAqvB,EAAA6W,EAAA7W,EACAgX,EAAAH,EAAAG,EACAF,EAAAD,EAAAC,GACAC,EAAAF,EAAAE,GAEAsP,EAAAj6C,EAAA49C,EAAAhqB,EAAAkqB,EAAApT,EACAwP,EAAAtP,EAAAkT,EAAAv5C,EAAAq5C,EAAAjT,EAEAwP,EAAAn6C,EAAA29C,EAAA/pB,EAAAkqB,EAAApT,EACA0P,EAAAxP,EAAAkT,EAAAv5C,EAAAo5C,EAAAhT,EAEAoT,EAAA/9C,EAAA29C,EAAA/pB,EAAAiqB,EAAAnT,EACAsT,EAAApT,EAAAiT,EAAAt5C,EAAAo5C,EAAAhT,EAEAsT,EAAAj+C,EAAA49C,EAAAhqB,EAAAiqB,EAAAnT,EACAwT,EAAAtT,EAAAiT,EAAAt5C,EAAAq5C,EAAAjT,EAEArY,EAAA2nB,EACA1nB,EAAA2nB,EAEA9nB,EAAA6nB,EACA5nB,EAAA6nB;AAEA9nB,EAAAA,EAAA+nB,EAAAA,EAAA/nB,EACAA,EAAAA,EAAA2rB,EAAAA,EAAA3rB,EACAA,EAAAA,EAAA6rB,EAAAA,EAAA7rB,EAEAC,EAAAA,EAAA+nB,EAAAA,EAAA/nB,EACAA,EAAAA,EAAA2rB,EAAAA,EAAA3rB,EACAA,EAAAA,EAAA6rB,EAAAA,EAAA7rB,EAEAC,EAAA6nB,EAAA7nB,EAAA6nB,EAAA7nB,EACAA,EAAAyrB,EAAAzrB,EAAAyrB,EAAAzrB,EACAA,EAAA2rB,EAAA3rB,EAAA2rB,EAAA3rB,EAEAC,EAAA6nB,EAAA7nB,EAAA6nB,EAAA7nB,EACAA,EAAAyrB,EAAAzrB,EAAAyrB,EAAAzrB,EACAA,EAAA2rB,EAAA3rB,EAAA2rB,EAAA3rB,EAEAhzB,KAAAszC,QAAA3+B,EAAAke,EACA7yB,KAAAszC,QAAA1vC,MAAAmvB,EAAAF,EAEA7yB,KAAAszC,QAAAx7B,EAAAgb,EACA9yB,KAAAszC,QAAAzvC,OAAAmvB,EAAAF,EAEA9yB,KAAA+yC,eAAA/yC,KAAAszC,QAGA,MAAAtzC,MAAA+yC,gBASAyE,EAAA30C,UAAA+7C,cAAA,SAAAtI,GAEAt2C,KAAAkrC,eAAAqL,aAAAD,EAAAqC,EAIA,KAAA,GAFAf,GAAA53C,KAAA43C,aAEAj3C,EAAA,EAAAA,EAAAi3C,EAAA52C,OAAAL,IACA,CACA,GAAA2B,GAAAs1C,EAAAj3C,EAEA,IAAA2B,EAAAy6C,MAMAz6C,EAAA22C,OAEA32C,EAAA22C,MAAA4F,SAAAlG,EAAAhkC,EAAAgkC,EAAA7gC,GAEA,OAAA,EAKA,OAAA,GAOA0/B,EAAA30C,UAAAg2C,kBAAA,WAEA,GAAAhmB,GAAAiD,EAAAA,EACA/C,IAAA+C,EAAAA,GAEAhD,EAAAgD,EAAAA,EACA9C,IAAA8C,EAAAA,EAEA,IAAA91B,KAAA43C,aAAA52C,OAIA,IAAA,GAFAi4C,GAAAC,EAAAvkC,EAAAmD,EAAA2B,EAAA2X,EAEAzwB,EAAA,EAAAA,EAAAX,KAAA43C,aAAA52C,OAAAL,IACA,CACA,GAAA2B,GAAAtC,KAAA43C,aAAAj3C,GACA0B,EAAAC,EAAAD,KACAq1C,EAAAp1C,EAAAo1C,SAGA,IAFAuB,EAAA32C,EAAA22C,MAEA52C,IAAA0qC,EAAAkD,OAAAE,MAAA9tC,IAAA0qC,EAAAkD,OAAAK,KAEA37B,EAAAskC,EAAAtkC,EAAA+iC,EAAA,EACA5/B,EAAAmhC,EAAAnhC,EAAA4/B,EAAA,EACAj+B,EAAAw/B,EAAAr1C,MAAA8zC,EACAtmB,EAAA6nB,EAAAp1C,OAAA6zC,EAEA7kB,EAAAA,EAAAle,EAAAA,EAAAke,EACAE,EAAApe,EAAA8E,EAAAsZ,EAAApe,EAAA8E,EAAAsZ,EAEAD,EAAAA,EAAAhb,EAAAA,EAAAgb,EACAE,EAAAlb,EAAAsZ,EAAA4B,EAAAlb,EAAAsZ,EAAA4B,MAEA,IAAA3wB,IAAA0qC,EAAAkD,OAAAG,KAEAz7B,EAAAskC,EAAAtkC,EACAmD,EAAAmhC,EAAAnhC,EACA2B,EAAAw/B,EAAA6B,OAAApD,EAAA,EACAtmB,EAAA6nB,EAAA6B,OAAApD,EAAA,EAEA7kB,EAAAA,EAAAle,EAAA8E,EAAA9E,EAAA8E,EAAAoZ,EACAE,EAAApe,EAAA8E,EAAAsZ,EAAApe,EAAA8E,EAAAsZ,EAEAD,EAAAA,EAAAhb,EAAAsZ,EAAAtZ,EAAAsZ,EAAA0B,EACAE,EAAAlb,EAAAsZ,EAAA4B,EAAAlb,EAAAsZ,EAAA4B,MAEA,IAAA3wB,IAAA0qC,EAAAkD,OAAAI,KAEA17B,EAAAskC,EAAAtkC,EACAmD,EAAAmhC,EAAAnhC,EACA2B,EAAAw/B,EAAAr1C,MAAA8zC,EAAA,EACAtmB,EAAA6nB,EAAAp1C,OAAA6zC,EAAA,EAEA7kB,EAAAA,EAAAle,EAAA8E,EAAA9E,EAAA8E,EAAAoZ,EACAE,EAAApe,EAAA8E,EAAAsZ,EAAApe,EAAA8E,EAAAsZ,EAEAD,EAAAA,EAAAhb,EAAAsZ,EAAAtZ,EAAAsZ,EAAA0B,EACAE,EAAAlb,EAAAsZ,EAAA4B,EAAAlb,EAAAsZ,EAAA4B,MAGA,CAEAkmB,EAAAD,EAAAC,MAEA,KAAA,GAAAxvB,GAAA,EAAAA,EAAAwvB,EAAAl4C,OAAA0oB,GAAA,EAEA/U,EAAAukC,EAAAxvB,GACA5R,EAAAohC,EAAAxvB,EAAA,GAEAmJ,EAAAA,EAAAle,EAAA+iC,EAAA/iC,EAAA+iC,EAAA7kB,EACAE,EAAApe,EAAA+iC,EAAA3kB,EAAApe,EAAA+iC,EAAA3kB,EAEAD,EAAAA,EAAAhb,EAAA4/B,EAAA5/B,EAAA4/B,EAAA5kB,EACAE,EAAAlb,EAAA4/B,EAAA1kB,EAAAlb,EAAA4/B,EAAA1kB,OAOAH,GAAA,EACAE,EAAA,EACAD,EAAA,EACAE,EAAA,CAGA,IAAA8rB,GAAA9+C,KAAAm4C,aAEAn4C,MAAAo4C,aAAAzjC,EAAAke,EAAAisB,EACA9+C,KAAAo4C,aAAAx0C,MAAAmvB,EAAAF,EAAA,EAAAisB,EAEA9+C,KAAAo4C,aAAAtgC,EAAAgb,EAAAgsB,EACA9+C,KAAAo4C,aAAAv0C,OAAAmvB,EAAAF,EAAA,EAAAgsB,GAwFAtH,EAAA30C,UAAAw2C,UAAA,SAAAJ,GAEAj5C,KAAAg4C,aAGAh4C,KAAAg4C,YAAAiB,MAAAC,OAAAl4C,QAAA,GAEAhB,KAAA43C,aAAA39B,MAIAja,KAAAg4C,YAAA,IAEA,IAAA11C,GAAA,GAAAo2C,GAAA14C,KAAA03C,UAAA13C,KAAA23C,UAAA33C,KAAAg5C,UAAAh5C,KAAA88C,UAAA98C,KAAAy3C,UAAAz3C,KAAA68C,QAAA5D,EAYA,OAVAj5C,MAAA43C,aAAAjtC,KAAArI,GAEAA,EAAAD,OAAA0qC,EAAAkD,OAAAC,OAEA5tC,EAAA22C,MAAAG,OAAA92C,EAAA22C,MAAAG,QAAAp5C,KAAA68C,QACA78C,KAAAg4C,YAAA11C,GAGAtC,KAAA+J,MAAA/J,KAAAs4C,aAAA,EAEAh2C,GAMAk1C,EAAA30C,UAAA0C,QAAA,WACAmrC,EAAA7tC,UAAA0C,QAAAqO,MAAA5T,KAAA6T,UAGA,KAAA,GAAAlT,GAAA,EAAAA,EAAAX,KAAA43C,aAAA52C,SAAAL,EACAX,KAAA43C,aAAAj3C,GAAA4E,SAIA,KAAA,GAAA+F,KAAAtL,MAAA++C,OACA,IAAA,GAAAr1B,GAAA,EAAAA,EAAA1pB,KAAA++C,OAAAzzC,GAAAhJ,KAAAtB,SAAA0oB,EACA1pB,KAAA++C,OAAAzzC,GAAAhJ,KAAAonB,GAAAnkB,SAIAvF,MAAA43C,aAAA,KAEA53C,KAAAg4C,YAAA,KACAh4C,KAAA++C,OAAA,KACA/+C,KAAAo4C,aAAA,QAGArB,WAAA,GAAAiI,uBAAA,GAAApK,UAAA,GAAAqK,yCAAA,GAAAC,2CAAA,GAAAC,sBAAA,IAAAC,iBAAA,KAAAC,IAAA,SAAA3+C,EAAAjB,EAAAD,GAcA,QAAAk5C,GAAAhB,EAAAC,EAAAqB,EAAA8D,EAAArF,EAAAsF,EAAA9D,GAKAj5C,KAAA03C,UAAAA,EAKA13C,KAAA23C,UAAAA,EAIA33C,KAAAg5C,UAAAA,EAIAh5C,KAAAs/C,UAAA3H,EAKA33C,KAAA88C,UAAAA,EAKA98C,KAAAy3C,UAAAA,EAKAz3C,KAAAu/C,UAAAzC,EAKA98C,KAAA+8C,KAAAA,EAKA/8C,KAAAi5C,MAAAA,EAKAj5C,KAAAqC,KAAA42C,EAAA52C,KAGAq2C,EAAA71C,UAAAmH,YAAA0uC,EACAj5C,EAAAD,QAAAk5C,EAOAA,EAAA71C,UAAA+1C,MAAA,WAEA,MAAA,IAAAF,GACA14C,KAAA03C,UACA13C,KAAA23C,UACA33C,KAAAg5C,UACAh5C,KAAA88C,UACA98C,KAAAy3C,UACAz3C,KAAA+8C,KACA/8C,KAAAi5C,QAOAP,EAAA71C,UAAA0C,QAAA,WACAvF,KAAAi5C,MAAA,WAGAuG,IAAA,SAAA9+C,EAAAjB,EAAAD,GA4BA,QAAAigD,GAAA5W,GAEA6W,EAAA3+C,KAAAf,KAAA6oC,GAEA7oC,KAAA2/C,oBAEA3/C,KAAA4/C,gBAAA,KACA5/C,KAAA6/C,uBAAA,KAEA7/C,KAAAoC,GAAAymC,EAAAzmC,GAMApC,KAAA8/C,sBAAA,IA1CA,GAAAjV,GAAAnqC,EAAA,eAEAqsC,GADArsC,EAAA,cACAA,EAAA,gBACAg/C,EAAAh/C,EAAA,8CACA2rC,EAAA3rC,EAAA,uCACAq/C,EAAAr/C,EAAA,uBACAs/C,EAAAt/C,EAAA,6BAGAu/C,EAAAv/C,EAAA,oBACAw/C,WAAAx/C,EAAA,qBACAy/C,iBAAAz/C,EAAA,4BACA0/C,eAAA1/C,EAAA,0BACA2/C,sBAAA3/C,EAAA,iCACA4/C,YAAA5/C,EAAA,uBAEA2xB,OAAA3xB,EAAA,UA6BA++C,EAAA58C,UAAA0M,OAAA/L,OAAAk8C,EAAA78C,WACA48C,EAAA58C,UAAAmH,YAAAy1C,EACAhgD,EAAAD,QAAAigD,EAEApT,EAAAC,eAAA,WAAAmT,GAQAA,EAAA58C,UAAA09C,gBAAA,WAEAvgD,KAAAoC,GAAApC,KAAA6oC,SAAAzmC,GACApC,KAAA4/C,gBAAA,GAAAI,GAAAhgD,KAAAoC,KAOAq9C,EAAA58C,UAAA0C,QAAA,WACAm6C,EAAA78C,UAAA0C,QAAAxE,KAAAf,KAEA,KAAA,GAAAW,GAAA,EAAAA,EAAAX,KAAA2/C,iBAAA3+C,SAAAL,EACAX,KAAA2/C,iBAAAh/C,GAAA4E,SAGAvF,MAAA2/C,iBAAA,MAQAF,EAAA58C,UAAA6vC,OAAA,SAAAsL,GAEA,GAGAwC,GAHA3X,EAAA7oC,KAAA6oC,SACAzmC,EAAAymC,EAAAzmC,IAIA47C,EAAAj0C,QAAAi0C,EAAA/F,OAAA71C,EAAAkJ,MAEAtL,KAAAygD,eAAAzC,EAGA,IAAA0C,GAAA1C,EAAA/F,OAAA71C,EAAAkJ,GAIAu9B,GAAA8X,iBAAAC,aAAA5C,EAAAjG,UAMA,KAAA,GAAAp3C,GAAA,EAAAP,EAAAsgD,EAAAp+C,KAAAtB,OAAAZ,EAAAO,EAAAA,IAEA6/C,EAAAE,EAAAp+C,KAAA3B,GAEA,IAAA+/C,EAAAp+C,KAAA3B,GAAAkgD,OAkBAxzC,OAAArN,KAAA4/C,gBAEA/W,EAAAiY,WAAAzzC,QAEAA,OAAA1G,SAAAo6C,kBAAA/C,EAAA9S,eAAA8V,SAAA,GACA3zC,OAAA1G,SAAAkxC,KAAAhN,EAAAoW,QAAAjD,EAAAnG,MACAxqC,OAAA1G,SAAA+tC,MAAAsJ,EAAArK,WAGAvxC,EAAAgB,WAAAhB,EAAAM,aAAA89C,EAAAh+C,QAEA6K,OAAArN,KAAA4/C,gBAEAvyC,OAAA5G,WAAAy6C,gBAAA72C,QAAAjI,EAAA4F,OAAA,EAAA,GAAA,GACAqF,OAAA5G,WAAA06C,OAAA92C,QAAAjI,EAAA4F,OAAA,EAAA,GAAA,GAEA5F,EAAAqI,wBAAA4C,OAAA5G,WAAAy6C,gBAAAj5C,UACA7F,EAAAqI,wBAAA4C,OAAA5G,WAAA06C,OAAAl5C,UAGA7F,EAAAgB,WAAAhB,EAAAmB,qBAAAi9C,EAAA12C,aACA1H,EAAA4I,aAAA5I,EAAA8sC,eAAAsR,EAAAY,QAAApgD,OAAAoB,EAAA6I,eAAA,IAGA49B,EAAAwY,aAUA5B,EAAA58C,UAAA49C,eAAA,SAAAzC,GAEA,GAAA57C,GAAApC,KAAA6oC,SAAAzmC,GAGAs+C,EAAA1C,EAAA/F,OAAA71C,EAAAkJ,GAGAo1C,KAEAA,EAAA1C,EAAA/F,OAAA71C,EAAAkJ,KAAAg2C,UAAA,EAAAh/C,QAAAF,GAAAA,IAKA47C,EAAAj0C,OAAA,CAEA,IAAApJ,EAGA,IAAAq9C,EAAAP,WACA,CAIA,IAHAO,EAAAP,YAAA,EAGA98C,EAAA,EAAAA,EAAA+/C,EAAAp+C,KAAAtB,OAAAL,IACA,CACA,GAAAi3C,GAAA8I,EAAAp+C,KAAA3B,EACAi3C,GAAA/b,QACA77B,KAAA2/C,iBAAAh1C,KAAAitC,GAIA8I,EAAAp+C,QACAo+C,EAAAY,UAAA,EAGA,GAAAd,EAKA,KAAA7/C,EAAA+/C,EAAAY,UAAA3gD,EAAAq9C,EAAApG,aAAA52C,OAAAL,IACA,CACA,GAAA2B,GAAA07C,EAAApG,aAAAj3C,EAEA,IAAA2B,EAAAD,OAAA0qC,EAAAkD,OAAAC,KACA,CAaA,GAXA5tC,EAAA42C,OAAA52C,EAAA22C,MAAAC,OAAA16B,QACAlc,EAAA22C,MAAAG,SAGA92C,EAAA42C,OAAA,KAAA52C,EAAA42C,OAAA52C,EAAA42C,OAAAl4C,OAAA,IAAAsB,EAAA42C,OAAA,KAAA52C,EAAA42C,OAAA52C,EAAA42C,OAAAl4C,OAAA,KAEAsB,EAAA42C,OAAAvuC,KAAArI,EAAA42C,OAAA,GAAA52C,EAAA42C,OAAA,IAKA52C,EAAAy6C,MAEAz6C,EAAA42C,OAAAl4C,QAAA,EAEA,GAAAsB,EAAA42C,OAAAl4C,OAAA,EAAAhB,KAAA8/C,sBACA,CACAU,EAAAxgD,KAAAuhD,WAAAb,EAAA,EAEA,IAAAc,GAAAtB,UAAA59C,EAAAk+C,EAEAgB,KAEAhB,EAAAxgD,KAAAuhD,WAAAb,EAAA,GACAP,iBAAA79C,EAAAk+C,QAMAA,GAAAxgD,KAAAuhD,WAAAb,EAAA,GACAP,iBAAA79C,EAAAk+C,EAKAl+C,GAAAo1C,UAAA,IAEA8I,EAAAxgD,KAAAuhD,WAAAb,EAAA,GACAT,EAAA39C,EAAAk+C,QAKAA,GAAAxgD,KAAAuhD,WAAAb,EAAA,GAEAp+C,EAAAD,OAAA0qC,EAAAkD,OAAAE,KAEAiQ,eAAA99C,EAAAk+C,GAEAl+C,EAAAD,OAAA0qC,EAAAkD,OAAAG,MAAA9tC,EAAAD,OAAA0qC,EAAAkD,OAAAI,KAEAiQ,YAAAh+C,EAAAk+C,GAEAl+C,EAAAD,OAAA0qC,EAAAkD,OAAAK,MAEA+P,sBAAA/9C,EAAAk+C,EAIAE,GAAAY,YAIA,IAAA3gD,EAAA,EAAAA,EAAA+/C,EAAAp+C,KAAAtB,OAAAL,IAEA6/C,EAAAE,EAAAp+C,KAAA3B,GAEA6/C,EAAAz2C,OAEAy2C,EAAA59C,UAYA68C,EAAA58C,UAAA0+C,WAAA,SAAAb,EAAAr+C,GAEA,GAAAm+C,EAsBA,OApBAE,GAAAp+C,KAAAtB,QAQAw/C,EAAAE,EAAAp+C,KAAAo+C,EAAAp+C,KAAAtB,OAAA,IAEAw/C,EAAAtH,OAAAl4C,OAAA,MAAAw/C,EAAAK,OAAAx+C,GAAA,IAAAA,KAEAm+C,EAAAxgD,KAAA2/C,iBAAA1lC,OAAA,GAAA8lC,GAAAW,EAAAt+C,IACAo+C,EAAAK,KAAAx+C,EACAq+C,EAAAp+C,KAAAqI,KAAA61C,MAZAA,EAAAxgD,KAAA2/C,iBAAA1lC,OAAA,GAAA8lC,GAAAW,EAAAt+C,IACAo+C,EAAAK,KAAAx+C,EACAq+C,EAAAp+C,KAAAqI,KAAA61C,IAcAA,EAAAz2C,OAAA,EAEAy2C,KAIAiB,cAAA,GAAAC,aAAA,GAAAC,sCAAA,GAAAC,6CAAA,GAAAC,cAAA,IAAAC,sBAAA,GAAAC,4BAAA,GAAAC,sBAAA,GAAAC,2BAAA,GAAAC,oBAAA,GAAAC,oBAAA,GAAAC,yBAAA,GAAAC,gCAAA,GAAAhwB,OAAA,KAAAiwB,IAAA,SAAA5hD,EAAAjB,EAAAD,GASA,QAAAugD,GAAA39C,GAOApC,KAAAoC,GAAAA,EAOApC,KAAA+4C,OAAA,EAAA,EAAA,GAMA/4C,KAAAk5C,UAMAl5C,KAAAohD,WAKAphD,KAAAwC,OAAAJ,EAAAK,eAMAzC,KAAA8J,YAAA1H,EAAAK,eAMAzC,KAAA6gD,KAAA,EAMA7gD,KAAA00C,MAAA,EAMA10C,KAAA+J,OAAA,EAEA/J,KAAAuiD,SAAA,KACAviD,KAAAwiD,UAAA,KAGAzC,EAAAl9C,UAAAmH,YAAA+1C,EACAtgD,EAAAD,QAAAugD,EAKAA,EAAAl9C,UAAAg5B,MAAA,WACA77B,KAAAk5C,OAAAl4C,OAAA,EACAhB,KAAAohD,QAAApgD,OAAA,GAMA++C,EAAAl9C,UAAAD,OAAA,WACA,GAAAR,GAAApC,KAAAoC,EAGApC,MAAAuiD,SAAA,GAAA16C,cAAA7H,KAAAk5C,QAEA92C,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAAwC,QACAJ,EAAAe,WAAAf,EAAAM,aAAA1C,KAAAuiD,SAAAngD,EAAAO,aAEA3C,KAAAwiD,UAAA,GAAAC,aAAAziD,KAAAohD,SAEAh/C,EAAAgB,WAAAhB,EAAAmB,qBAAAvD,KAAA8J,aACA1H,EAAAe,WAAAf,EAAAmB,qBAAAvD,KAAAwiD,UAAApgD,EAAAO,aAEA3C,KAAA+J,OAAA,GAGAg2C,EAAAl9C,UAAA0C,QAAA,WACAvF,KAAA+4C,MAAA,KACA/4C,KAAAk5C,OAAA,KACAl5C,KAAAohD,QAAA,KAEAphD,KAAAoC,GAAAsgD,aAAA1iD,KAAAwC,QACAxC,KAAAoC,GAAAsgD,aAAA1iD,KAAA8J,aAEA9J,KAAAoC,GAAA,KAEApC,KAAAwC,OAAA,KACAxC,KAAA8J,YAAA,KAEA9J,KAAAuiD,SAAA,KACAviD,KAAAwiD,UAAA,WAGAG,IAAA,SAAAjiD,EAAAjB,EAAAD,GAWA,QAAAwgD,GAAA59C,GAEAiE,EAAAtF,KAAAf,KACAoC,GAGA,kCACA,yBAEA,kCACA,iCAEA,uBACA,uBACA,qBAEA,uBAEA,mBACA,2GACA,kDACA,KACAwO,KAAA,OAGA,2BAEA,uBAEA,mBACA,4BACA,KACAA,KAAA,OA1CA,GAAAvK,GAAA3F,EAAA,gBAAAY,QA8CA0+C,GAAAn9C,UAAA0M,OAAA/L,OAAA6C,EAAAxD,WACAm9C,EAAAn9C,UAAAmH,YAAAg2C,EAEAvgD,EAAAD,QAAAwgD,IAEAlZ,eAAA,IAAA8b,IAAA,SAAAliD,EAAAjB,EAAAD,GACA,GAAAygD,GAAAv/C,EAAA,eACAmqC,EAAAnqC,EAAA,kBASA4/C,EAAA,SAAA1I,EAAA4I,GAGA,GAGA58C,GACAC,EAJAg/C,EAAAjL,EAAAqB,MACAtkC,EAAAkuC,EAAAluC,EACAmD,EAAA+qC,EAAA/qC,CAKA8/B,GAAAv1C,OAAA0qC,MAAAkD,OAAAG,MAEAxsC,EAAAi/C,EAAA/H,OACAj3C,EAAAg/C,EAAA/H,SAIAl3C,EAAAi/C,EAAAj/C,MACAC,EAAAg/C,EAAAh/C,OAGA,IAAAi/C,GAAAttC,KAAAyT,MAAA,GAAAzT,KAAA6lC,KAAAwH,EAAA/H,UAAAtlC,KAAAyT,MAAA,GAAAzT,KAAA6lC,KAAAwH,EAAAj/C,MAAAi/C,EAAAh/C,SACAk/C,EAAA,EAAAvtC,KAAA03B,GAAA4V,EAEAniD,EAAA,CAEA,IAAAi3C,EAAAmF,KACA,CACA,GAAAhE,GAAAlO,EAAAoW,QAAArJ,EAAAkF,WACApI,EAAAkD,EAAAH,UAEAp3C,EAAA04C,EAAA,GAAArE,EACA90C,EAAAm5C,EAAA,GAAArE,EACA1vC,EAAA+zC,EAAA,GAAArE,EAEAsO,EAAAxC,EAAAtH,OACAkI,EAAAZ,EAAAY,QAEA6B,EAAAD,EAAAhiD,OAAA,CAIA,KAFAogD,EAAAz2C,KAAAs4C,GAEAtiD,EAAA,EAAAmiD,EAAA,EAAAniD,EAAAA,IAEAqiD,EAAAr4C,KAAAgK,EAAAmD,EAAAzX,EAAAT,EAAAoF,EAAA0vC,GAEAsO,EAAAr4C,KAAAgK,EAAAa,KAAAsgC,IAAAiN,EAAApiD,GAAAiD,EACAkU,EAAAtC,KAAAugC,IAAAgN,EAAApiD,GAAAkD,EACAxD,EAAAT,EAAAoF,EAAA0vC,GAEA0M,EAAAz2C,KAAAs4C,IAAAA,IAGA7B,GAAAz2C,KAAAs4C,EAAA,GAGA,GAAArL,EAAAF,UACA,CACA,GAAAwL,GAAAtL,EAAAsB,MAIA,KAFAtB,EAAAsB,UAEAv4C,EAAA,EAAAmiD,EAAA,EAAAniD,EAAAA,IAEAi3C,EAAAsB,OAAAvuC,KAAAgK,EAAAa,KAAAsgC,IAAAiN,EAAApiD,GAAAiD,EACAkU,EAAAtC,KAAAugC,IAAAgN,EAAApiD,GAAAkD,EAGAo8C,GAAArI,EAAA4I,GAEA5I,EAAAsB,OAAAgK,GAKAzjD,GAAAD,QAAA8gD,IACA6C,iBAAA,IAAAC,cAAA,KAAAC,IAAA,SAAA3iD,EAAAjB,EAAAD,GACA,GACAqrC,IADAnqC,EAAA,eACAA,EAAA,mBAWAy/C,EAAA,SAAAvI,EAAA4I,GAGA,GAAAtH,GAAAtB,EAAAsB,OAAA16B,OAEA,MAAA06B,EAAAl4C,OAAA,GAAA,CAMA,GAAAogD,GAAAZ,EAAAY,OACAZ,GAAAtH,OAAAA,EACAsH,EAAA9L,MAAAkD,EAAAH,UACA+I,EAAAzH,MAAAlO,EAAAoW,QAAArJ,EAAAkF,UAYA,KAAA,GAHAnoC,GAAAmD,EANA+a,EAAAiD,EAAAA,EACA/C,IAAA+C,EAAAA,GAEAhD,EAAAgD,EAAAA,EACA9C,IAAA8C,EAAAA,GAKAn1B,EAAA,EAAAA,EAAAu4C,EAAAl4C,OAAAL,GAAA,EAEAgU,EAAAukC,EAAAv4C,GACAmX,EAAAohC,EAAAv4C,EAAA,GAEAkyB,EAAAA,EAAAle,EAAAA,EAAAke,EACAE,EAAApe,EAAAoe,EAAApe,EAAAoe,EAEAD,EAAAA,EAAAhb,EAAAA,EAAAgb,EACAE,EAAAlb,EAAAkb,EAAAlb,EAAAkb,CAIAkmB,GAAAvuC,KAAAkoB,EAAAC,EACAC,EAAAD,EACAC,EAAAC,EACAH,EAAAG,EAKA,IAAAhyB,GAAAk4C,EAAAl4C,OAAA,CACA,KAAAL,EAAA,EAAAK,EAAAL,EAAAA,IAEAygD,EAAAz2C,KAAAhK,IAOAlB,GAAAD,QAAA2gD,IACAgD,iBAAA,IAAAC,cAAA,KAAAE,IAAA,SAAA5iD,EAAAjB,EAAAD,GACA,GAAAmxC,GAAAjwC,EAAA,iBACAmqC,EAAAnqC,EAAA,kBASAu/C,EAAA,SAAArI,EAAA4I,GAGA,GAAA7/C,GAAA,EACAu4C,EAAAtB,EAAAsB,MAEA,IAAA,IAAAA,EAAAl4C,OAAA,CAeA,GAAAuiD,GAAA,GAAA5S,GAAAwG,MAAA+B,EAAA,GAAAA,EAAA,IACAsK,EAAA,GAAA7S,GAAAwG,MAAA+B,EAAAA,EAAAl4C,OAAA,GAAAk4C,EAAAA,EAAAl4C,OAAA,GAGA,IAAAuiD,EAAA5uC,IAAA6uC,EAAA7uC,GAAA4uC,EAAAzrC,IAAA0rC,EAAA1rC,EACA,CAEAohC,EAAAA,EAAA16B,QAEA06B,EAAAj/B,MACAi/B,EAAAj/B,MAEAupC,EAAA,GAAA7S,GAAAwG,MAAA+B,EAAAA,EAAAl4C,OAAA,GAAAk4C,EAAAA,EAAAl4C,OAAA,GAEA,IAAAyiD,GAAAD,EAAA7uC,EAAA,IAAA4uC,EAAA5uC,EAAA6uC,EAAA7uC,GACA+uC,EAAAF,EAAA1rC,EAAA,IAAAyrC,EAAAzrC,EAAA0rC,EAAA1rC,EAEAohC,GAAAvgC,QAAA8qC,EAAAC,GACAxK,EAAAvuC,KAAA84C,EAAAC,GAGA,GAgBA3sB,GAAAC,EAAA2sB,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACA9rB,EAAAuiB,EAAAwJ,EAAA/sB,EAAAE,EAAA8sB,EACAC,EAAAC,EAAAC,EAnBA3B,EAAAxC,EAAAtH,OACAkI,EAAAZ,EAAAY,QACApgD,EAAAk4C,EAAAl4C,OAAA,EACA4jD,EAAA1L,EAAAl4C,OACA6jD,EAAA7B,EAAAhiD,OAAA,EAGA4C,EAAAg0C,EAAAF,UAAA,EAGAqB,EAAAlO,EAAAoW,QAAArJ,EAAAD,WACAjD,EAAAkD,EAAAoB,UACA34C,EAAA04C,EAAA,GAAArE,EACA90C,EAAAm5C,EAAA,GAAArE,EACA1vC,EAAA+zC,EAAA,GAAArE,CA8BA,KAvBAiP,EAAAzK,EAAA,GACA0K,EAAA1K,EAAA,GAEA2K,EAAA3K,EAAA,GACA4K,EAAA5K,EAAA,GAEA+K,IAAAL,EAAAE,GACAI,EAAAP,EAAAE,EAEAc,EAAAnvC,KAAA6lC,KAAA4I,EAAAA,EAAAC,EAAAA,GAEAD,GAAAU,EACAT,GAAAS,EACAV,GAAArgD,EACAsgD,GAAAtgD,EAGAo/C,EAAAr4C,KAAAg5C,EAAAM,EAAAL,EAAAM,EACA7jD,EAAAT,EAAAoF,EAAA0vC,GAEAsO,EAAAr4C,KAAAg5C,EAAAM,EAAAL,EAAAM,EACA7jD,EAAAT,EAAAoF,EAAA0vC,GAEA/zC,EAAA,EAAAK,EAAA,EAAAL,EAAAA,IAEAgjD,EAAAzK,EAAA,GAAAv4C,EAAA,IACAijD,EAAA1K,EAAA,GAAAv4C,EAAA,GAAA,GAEAkjD,EAAA3K,EAAA,EAAA,GACA4K,EAAA5K,EAAA,EAAA,EAAA,GAEA6K,EAAA7K,EAAA,GAAAv4C,EAAA,IACAqjD,EAAA9K,EAAA,GAAAv4C,EAAA,GAAA,GAEAsjD,IAAAL,EAAAE,GACAI,EAAAP,EAAAE,EAEAc,EAAAnvC,KAAA6lC,KAAA4I,EAAAA,EAAAC,EAAAA,GACAD,GAAAU,EACAT,GAAAS,EACAV,GAAArgD,EACAsgD,GAAAtgD,EAEAugD,IAAAL,EAAAE,GACAI,EAAAP,EAAAE,EAEAY,EAAAnvC,KAAA6lC,KAAA8I,EAAAA,EAAAC,EAAAA,GACAD,GAAAQ,EACAP,GAAAO,EACAR,GAAAvgD,EACAwgD,GAAAxgD,EAEA40B,GAAA0rB,EAAAN,IAAAM,EAAAJ,GACA/I,GAAAkJ,EAAAJ,IAAAI,EAAAN,GACAY,IAAAN,EAAAN,KAAAO,EAAAJ,KAAAG,EAAAJ,KAAAK,EAAAN,GACApsB,GAAA4sB,EAAAJ,IAAAI,EAAAN,GACApsB,GAAAysB,EAAAN,IAAAM,EAAAJ,GACAS,IAAAL,EAAAJ,KAAAK,EAAAN,KAAAK,EAAAN,KAAAO,EAAAJ,GAEAS,EAAAjsB,EAAAd,EAAAF,EAAAujB,EAEAvlC,KAAAygB,IAAAwuB,GAAA,IAGAA,GAAA,KACAzB,EAAAr4C,KAAAk5C,EAAAI,EAAAH,EAAAI,EACA7jD,EAAAT,EAAAoF,EAAA0vC,GAEAsO,EAAAr4C,KAAAk5C,EAAAI,EAAAH,EAAAI,EACA7jD,EAAAT,EAAAoF,EAAA0vC,KAKA3d,GAAAgkB,EAAAyJ,EAAA9sB,EAAA6sB,GAAAE,EACAztB,GAAAQ,EAAA+sB,EAAA/rB,EAAAgsB,GAAAC,EAGAC,GAAA3tB,EAAA8sB,IAAA9sB,EAAA8sB,IAAA7sB,EAAA8sB,IAAA9sB,EAAA8sB,GAGAY,EAAA,OAEAL,EAAAJ,EAAAE,EACAG,EAAAJ,EAAAE,EAEAO,EAAAnvC,KAAA6lC,KAAAgJ,EAAAA,EAAAC,EAAAA,GACAD,GAAAM,EACAL,GAAAK,EACAN,GAAAzgD,EACA0gD,GAAA1gD,EAEAo/C,EAAAr4C,KAAAk5C,EAAAQ,EAAAP,EAAAQ,GACAtB,EAAAr4C,KAAAtK,EAAAT,EAAAoF,EAAA0vC,GAEAsO,EAAAr4C,KAAAk5C,EAAAQ,EAAAP,EAAAQ,GACAtB,EAAAr4C,KAAAtK,EAAAT,EAAAoF,EAAA0vC,GAEAsO,EAAAr4C,KAAAk5C,EAAAQ,EAAAP,EAAAQ,GACAtB,EAAAr4C,KAAAtK,EAAAT,EAAAoF,EAAA0vC,GAEAkQ,MAKA5B,EAAAr4C,KAAAosB,EAAAC,GACAgsB,EAAAr4C,KAAAtK,EAAAT,EAAAoF,EAAA0vC,GAEAsO,EAAAr4C,KAAAk5C,GAAA9sB,EAAA8sB,GAAAC,GAAA9sB,EAAA8sB,IACAd,EAAAr4C,KAAAtK,EAAAT,EAAAoF,EAAA0vC,IA2BA,KAvBAiP,EAAAzK,EAAA,GAAAl4C,EAAA,IACA4iD,EAAA1K,EAAA,GAAAl4C,EAAA,GAAA,GAEA6iD,EAAA3K,EAAA,GAAAl4C,EAAA,IACA8iD,EAAA5K,EAAA,GAAAl4C,EAAA,GAAA,GAEAijD,IAAAL,EAAAE,GACAI,EAAAP,EAAAE,EAEAc,EAAAnvC,KAAA6lC,KAAA4I,EAAAA,EAAAC,EAAAA,GACAD,GAAAU,EACAT,GAAAS,EACAV,GAAArgD,EACAsgD,GAAAtgD,EAEAo/C,EAAAr4C,KAAAk5C,EAAAI,EAAAH,EAAAI,GACAlB,EAAAr4C,KAAAtK,EAAAT,EAAAoF,EAAA0vC,GAEAsO,EAAAr4C,KAAAk5C,EAAAI,EAAAH,EAAAI,GACAlB,EAAAr4C,KAAAtK,EAAAT,EAAAoF,EAAA0vC,GAEA0M,EAAAz2C,KAAAk6C,GAEAlkD,EAAA,EAAAikD,EAAAjkD,EAAAA,IAEAygD,EAAAz2C,KAAAk6C,IAGAzD,GAAAz2C,KAAAk6C,EAAA,IAGAplD,GAAAD,QAAAygD,IACA6E,gBAAA,GAAA3B,iBAAA,MAAA4B,IAAA,SAAArkD,EAAAjB,EAAAD,GACA,GAAAqrC,GAAAnqC,EAAA,kBASAw/C,EAAA,SAAAtI,EAAA4I,GAEA,GAAAtH,GAAAtB,EAAAsB,MAEA,MAAAA,EAAAl4C,OAAA,GAAA,CAMA,GAAAgiD,GAAAxC,EAAAtH,OACAkI,EAAAZ,EAAAY,QAEApgD,EAAAk4C,EAAAl4C,OAAA,EAGA+3C,EAAAlO,EAAAoW,QAAArJ,EAAAkF,WACApI,EAAAkD,EAAAH,UACAp3C,EAAA04C,EAAA,GAAArE,EACA90C,EAAAm5C,EAAA,GAAArE,EACA1vC,EAAA+zC,EAAA,GAAArE,EAEA9hB,EAAAP,OAAA6mB,EAAA,KAAA,EAEA,KAAAtmB,EACA,OAAA,CAGA,IAAAoyB,GAAAhC,EAAAhiD,OAAA,EAEAL,EAAA,CAEA,KAAAA,EAAA,EAAAA,EAAAiyB,EAAA5xB,OAAAL,GAAA,EAEAygD,EAAAz2C,KAAAioB,EAAAjyB,GAAAqkD,GACA5D,EAAAz2C,KAAAioB,EAAAjyB,GAAAqkD,GACA5D,EAAAz2C,KAAAioB,EAAAjyB,EAAA,GAAAqkD,GACA5D,EAAAz2C,KAAAioB,EAAAjyB,EAAA,GAAAqkD,GACA5D,EAAAz2C,KAAAioB,EAAAjyB,EAAA,GAAAqkD,EAGA,KAAArkD,EAAA,EAAAK,EAAAL,EAAAA,IAEAqiD,EAAAr4C,KAAAuuC,EAAA,EAAAv4C,GAAAu4C,EAAA,EAAAv4C,EAAA,GACAN,EAAAT,EAAAoF,EAAA0vC,EAGA,QAAA,GAIAj1C,GAAAD,QAAA0gD,IAEAiD,iBAAA,MAAA8B,IAAA,SAAAvkD,EAAAjB,EAAAD,GACA,GAAAygD,GAAAv/C,EAAA,eACAmqC,EAAAnqC,EAAA,kBASA0/C,EAAA,SAAAxI,EAAA4I,GAKA,GAAA0E,GAAAtN,EAAAqB,MACAtkC,EAAAuwC,EAAAvwC,EACAmD,EAAAotC,EAAAptC,EACAlU,EAAAshD,EAAAthD,MACAC,EAAAqhD,EAAArhD,MAEA,IAAA+zC,EAAAmF,KACA,CACA,GAAAhE,GAAAlO,EAAAoW,QAAArJ,EAAAkF,WACApI,EAAAkD,EAAAH,UAEAp3C,EAAA04C,EAAA,GAAArE,EACA90C,EAAAm5C,EAAA,GAAArE,EACA1vC,EAAA+zC,EAAA,GAAArE,EAEAsO,EAAAxC,EAAAtH,OACAkI,EAAAZ,EAAAY,QAEA4D,EAAAhC,EAAAhiD,OAAA,CAGAgiD,GAAAr4C,KAAAgK,EAAAmD,GACAkrC,EAAAr4C,KAAAtK,EAAAT,EAAAoF,EAAA0vC,GAEAsO,EAAAr4C,KAAAgK,EAAA/Q,EAAAkU,GACAkrC,EAAAr4C,KAAAtK,EAAAT,EAAAoF,EAAA0vC,GAEAsO,EAAAr4C,KAAAgK,EAAAmD,EAAAjU,GACAm/C,EAAAr4C,KAAAtK,EAAAT,EAAAoF,EAAA0vC,GAEAsO,EAAAr4C,KAAAgK,EAAA/Q,EAAAkU,EAAAjU,GACAm/C,EAAAr4C,KAAAtK,EAAAT,EAAAoF,EAAA0vC,GAGA0M,EAAAz2C,KAAAq6C,EAAAA,EAAAA,EAAA,EAAAA,EAAA,EAAAA,EAAA,EAAAA,EAAA,GAGA,GAAApN,EAAAF,UACA,CACA,GAAAwL,GAAAtL,EAAAsB,MAEAtB,GAAAsB,QAAAvkC,EAAAmD,EACAnD,EAAA/Q,EAAAkU,EACAnD,EAAA/Q,EAAAkU,EAAAjU,EACA8Q,EAAAmD,EAAAjU,EACA8Q,EAAAmD,GAGAmoC,EAAArI,EAAA4I,GAEA5I,EAAAsB,OAAAgK,GAIAzjD,GAAAD,QAAA4gD,IACA+C,iBAAA,IAAAC,cAAA,KAAA+B,IAAA,SAAAzkD,EAAAjB,EAAAD,GACA,GACAqrC,IADAnqC,EAAA,eACAA,EAAA,kBASA2/C,uBAAA,SAAAzI,EAAA4I,GAEA,GAAA4E,GAAAxN,EAAAqB,MACAtkC,EAAAywC,EAAAzwC,EACAmD,EAAAstC,EAAAttC,EACAlU,EAAAwhD,EAAAxhD,MACAC,EAAAuhD,EAAAvhD,OAEAi3C,EAAAsK,EAAAtK,OAEAuK,IAUA,IATAA,EAAA16C,KAAAgK,EAAAmD,EAAAgjC,GACA96C,KAAAslD,qBAAA3wC,EAAAmD,EAAAjU,EAAAi3C,EAAAnmC,EAAAmD,EAAAjU,EAAA8Q,EAAAmmC,EAAAhjC,EAAAjU,EAAAwhD,GACArlD,KAAAslD,qBAAA3wC,EAAA/Q,EAAAk3C,EAAAhjC,EAAAjU,EAAA8Q,EAAA/Q,EAAAkU,EAAAjU,EAAA8Q,EAAA/Q,EAAAkU,EAAAjU,EAAAi3C,EAAAuK,GACArlD,KAAAslD,qBAAA3wC,EAAA/Q,EAAAkU,EAAAgjC,EAAAnmC,EAAA/Q,EAAAkU,EAAAnD,EAAA/Q,EAAAk3C,EAAAhjC,EAAAutC,GACArlD,KAAAslD,qBAAA3wC,EAAAmmC,EAAAhjC,EAAAnD,EAAAmD,EAAAnD,EAAAmD,EAAAgjC,EAAA,MAAAuK,GAKAzN,EAAAmF,KACA,CACA,GAAAhE,GAAAlO,EAAAoW,QAAArJ,EAAAkF,WACApI,EAAAkD,EAAAH,UAEAp3C,EAAA04C,EAAA,GAAArE,EACA90C,EAAAm5C,EAAA,GAAArE,EACA1vC,EAAA+zC,EAAA,GAAArE,EAEAsO,EAAAxC,EAAAtH,OACAkI,EAAAZ,EAAAY,QAEA6B,EAAAD,EAAAhiD,OAAA,EAEA4xB,EAAAP,OAAAgzB,EAAA,KAAA,GAEA1kD,EAAA,CACA,KAAAA,EAAA,EAAAA,EAAAiyB,EAAA5xB,OAAAL,GAAA,EAEAygD,EAAAz2C,KAAAioB,EAAAjyB,GAAAsiD,GACA7B,EAAAz2C,KAAAioB,EAAAjyB,GAAAsiD,GACA7B,EAAAz2C,KAAAioB,EAAAjyB,EAAA,GAAAsiD,GACA7B,EAAAz2C,KAAAioB,EAAAjyB,EAAA,GAAAsiD,GACA7B,EAAAz2C,KAAAioB,EAAAjyB,EAAA,GAAAsiD,EAGA,KAAAtiD,EAAA,EAAAA,EAAA0kD,EAAArkD,OAAAL,IAEAqiD,EAAAr4C,KAAA06C,EAAA1kD,GAAA0kD,IAAA1kD,GAAAN,EAAAT,EAAAoF,EAAA0vC,GAIA,GAAAkD,EAAAF,UACA,CACA,GAAAwL,GAAAtL,EAAAsB,MAEAtB,GAAAsB,OAAAmM,EAEArlD,KAAAigD,UAAArI,EAAA4I,GAEA5I,EAAAsB,OAAAgK,IAkBAoC,qBAAA,SAAAvL,EAAAC,EAAAP,EAAAC,EAAAC,EAAAC,EAAApwB,GAWA,QAAA+7B,GAAAC,EAAAC,EAAAC,GACA,GAAAC,GAAAF,EAAAD,CAEA,OAAAA,GAAAG,EAAAD,EAIA,IAAA,GAhBA7L,GACAC,EACA8L,EACAC,EACAlxC,EACAmD,EACA1X,EAAA,GACA84C,EAAA1vB,MAQAE,EAAA,EACA/oB,EAAA,EAAAP,GAAAO,EAAAA,IACA+oB,EAAA/oB,EAAAP,EAGAy5C,EAAA0L,EAAAxL,EAAAN,EAAA/vB,GACAowB,EAAAyL,EAAAvL,EAAAN,EAAAhwB,GACAk8B,EAAAL,EAAA9L,EAAAE,EAAAjwB,GACAm8B,EAAAN,EAAA7L,EAAAE,EAAAlwB,GAGA/U,EAAA4wC,EAAA1L,EAAA+L,EAAAl8B,GACA5R,EAAAytC,EAAAzL,EAAA+L,EAAAn8B,GAEAwvB,EAAAvuC,KAAAgK,EAAAmD,EAGA,OAAAohC,IAIAz5C,EAAAD,QAAA6gD,wBACA8C,iBAAA,IAAAC,cAAA,KAAA0C,IAAA,SAAAplD,EAAAjB,EAAAD,GAYA,GAAAiqC,GAAAhqC,EAAAD,QAAA+P,OAAA4pB,OAAAz4B,EAAA,WAAAA,EAAA,WAEAmqC,MAAAnqC,EAAA,WACAqlD,OAAArlD,EAAA,YAGAgpC,cAAAhpC,EAAA,2BACAgwC,UAAAhwC,EAAA,uBAGAslD,OAAAtlD,EAAA,oBACAulD,kBAAAvlD,EAAA,iCACAwlD,eAAAxlD,EAAA,kCACAylD,iBAAAzlD,EAAA,sCAGA0lD,KAAA1lD,EAAA,eAGA82C,SAAA92C,EAAA,uBACAg4C,aAAAh4C,EAAA,2BACA++C,iBAAA/+C,EAAA,qCAGAgD,QAAAhD,EAAA,sBACA2lD,YAAA3lD,EAAA,0BACAkwC,cAAAlwC,EAAA,4BACA4lD,kBAAA5lD,EAAA,gCACA6lD,iBAAA7lD,EAAA,+BACA8lD,WAAA9lD,EAAA,yBAGA6rC,eAAA7rC,EAAA,qCACA+3C,eAAA/3C,EAAA,2CACA83C,aAAA93C,EAAA,yCAGA2rC,cAAA3rC,EAAA,mCACA+lD,aAAA/lD,EAAA,2CACAgmD,cAAAhmD,EAAA,4CACA2F,OAAA3F,EAAA,oCACAg/C,eAAAh/C,EAAA,0CACAimD,aAAAjmD,EAAA,wCAGAkmD,eAAAlmD,EAAA,4CACAmmD,WAAAnmD,EAAA,wCACAomD,iBAAApmD,EAAA,8CAEAqmD,OAAArmD,EAAA,gBAqBAsmD,mBAAA,SAAApjD,EAAAC,EAAAgH,EAAAo8C,GAKA,MAHArjD,GAAAA,GAAA,IACAC,EAAAA,GAAA,KAEAojD,GAAAxd,EAAAoB,MAAAqc,mBAEA,GAAAzd,GAAA4C,cAAAzoC,EAAAC,EAAAgH,GAGA,GAAA4+B,GAAA8C,eAAA3oC,EAAAC,EAAAgH,QAIAs8C,UAAA,GAAAC,sBAAA,GAAAC,0BAAA,GAAAC,sBAAA,GAAAC,0BAAA,GAAAC,oCAAA,GAAAC,SAAA,GAAAC,gCAAA,GAAAC,qCAAA,GAAAC,oCAAA,GAAAC,wCAAA,GAAAC,0CAAA,GAAAC,kCAAA,GAAAC,2CAAA,GAAAC,uCAAA,GAAAC,6CAAA,GAAAC,2CAAA,GAAAC,0CAAA,GAAAC,mCAAA,GAAAC,yCAAA,GAAAC,uCAAA,GAAAC,mBAAA,GAAAC,iCAAA,GAAAC,cAAA,GAAAC,+BAAA,GAAAC,yBAAA,GAAAC,2BAAA,IAAAC,qBAAA,IAAAC,wBAAA,IAAAC,8BAAA,IAAAC,WAAA,IAAAC,UAAA,IAAApiB,eAAA,IAAAqiB,IAAA,SAAAzoD,EAAAjB,EAAAD,GAiBA,QAAAsxC,KAMA9wC,KAAAS,EAAA,EAMAT,KAAAgF,EAAA,EAMAhF,KAAAq0B,EAAA,EAMAr0B,KAAAqrC,EAAA,EAMArrC,KAAAmrC,GAAA,EAMAnrC,KAAAorC,GAAA,EAhDA,GAAA+L,GAAAz2C,EAAA,UAmDAowC,GAAAjuC,UAAAmH,YAAA8mC,EACArxC,EAAAD,QAAAsxC,EAcAA,EAAAjuC,UAAAumD,UAAA,SAAAp7C,GAEAhO,KAAAS,EAAAuN,EAAA,GACAhO,KAAAgF,EAAAgJ,EAAA,GACAhO,KAAAq0B,EAAArmB,EAAA,GACAhO,KAAAqrC,EAAAr9B,EAAA,GACAhO,KAAAmrC,GAAAn9B,EAAA,GACAhO,KAAAorC,GAAAp9B,EAAA,IAgBA8iC,EAAAjuC,UAAAqN,IAAA,SAAAzP,EAAAuE,EAAAqvB,EAAAgX,EAAAF,EAAAC,GASA,MAPAprC,MAAAS,EAAAA,EACAT,KAAAgF,EAAAA,EACAhF,KAAAq0B,EAAAA,EACAr0B,KAAAqrC,EAAAA,EACArrC,KAAAmrC,GAAAA,EACAnrC,KAAAorC,GAAAA,EAEAprC,MAWA8wC,EAAAjuC,UAAAm+C,QAAA,SAAAqI,EAAA7/B,GAEAxpB,KAAAgO,QAEAhO,KAAAgO,MAAA,GAAAnG,cAAA,GAGA,IAAAmG,GAAAwb,GAAAxpB,KAAAgO,KA2BA,OAzBAq7C,IAEAr7C,EAAA,GAAAhO,KAAAS,EACAuN,EAAA,GAAAhO,KAAAgF,EACAgJ,EAAA,GAAA,EACAA,EAAA,GAAAhO,KAAAq0B,EACArmB,EAAA,GAAAhO,KAAAqrC,EACAr9B,EAAA,GAAA,EACAA,EAAA,GAAAhO,KAAAmrC,GACAn9B,EAAA,GAAAhO,KAAAorC,GACAp9B,EAAA,GAAA,IAIAA,EAAA,GAAAhO,KAAAS,EACAuN,EAAA,GAAAhO,KAAAq0B,EACArmB,EAAA,GAAAhO,KAAAmrC,GACAn9B,EAAA,GAAAhO,KAAAgF,EACAgJ,EAAA,GAAAhO,KAAAqrC,EACAr9B,EAAA,GAAAhO,KAAAorC,GACAp9B,EAAA,GAAA,EACAA,EAAA,GAAA,EACAA,EAAA,GAAA,GAGAA,GAWA8iC,EAAAjuC,UAAA+Q,MAAA,SAAA0E,EAAAgxC,GAEAA,EAAAA,GAAA,GAAAnS,EAEA,IAAAxiC,GAAA2D,EAAA3D,EACAmD,EAAAQ,EAAAR,CAKA,OAHAwxC,GAAA30C,EAAA3U,KAAAS,EAAAkU,EAAA3U,KAAAq0B,EAAAvc,EAAA9X,KAAAmrC,GACAme,EAAAxxC,EAAA9X,KAAAgF,EAAA2P,EAAA3U,KAAAqrC,EAAAvzB,EAAA9X,KAAAorC,GAEAke,GAWAxY,EAAAjuC,UAAA0zC,aAAA,SAAAj+B,EAAAgxC,GAEAA,EAAAA,GAAA,GAAAnS,EAEA,IAAA7rC,GAAA,GAAAtL,KAAAS,EAAAT,KAAAqrC,EAAArrC,KAAAq0B,GAAAr0B,KAAAgF,GAEA2P,EAAA2D,EAAA3D,EACAmD,EAAAQ,EAAAR,CAKA,OAHAwxC,GAAA30C,EAAA3U,KAAAqrC,EAAA//B,EAAAqJ,GAAA3U,KAAAq0B,EAAA/oB,EAAAwM,GAAA9X,KAAAorC,GAAAprC,KAAAq0B,EAAAr0B,KAAAmrC,GAAAnrC,KAAAqrC,GAAA//B,EACAg+C,EAAAxxC,EAAA9X,KAAAS,EAAA6K,EAAAwM,GAAA9X,KAAAgF,EAAAsG,EAAAqJ,IAAA3U,KAAAorC,GAAAprC,KAAAS,EAAAT,KAAAmrC,GAAAnrC,KAAAgF,GAAAsG,EAEAg+C,GAUAxY,EAAAjuC,UAAAg7C,UAAA,SAAAlpC,EAAAmD,GAKA,MAHA9X,MAAAmrC,IAAAx2B,EACA3U,KAAAorC,IAAAtzB,EAEA9X,MAUA8wC,EAAAjuC,UAAAmuC,MAAA,SAAAr8B,EAAAmD,GASA,MAPA9X,MAAAS,GAAAkU,EACA3U,KAAAqrC,GAAAvzB,EACA9X,KAAAq0B,GAAA1f,EACA3U,KAAAgF,GAAA8S,EACA9X,KAAAmrC,IAAAx2B,EACA3U,KAAAorC,IAAAtzB,EAEA9X,MAUA8wC,EAAAjuC,UAAA0mD,OAAA,SAAA5M,GAEA,GAAA5G,GAAAvgC,KAAAugC,IAAA4G,GACA7G,EAAAtgC,KAAAsgC,IAAA6G,GAEAnkB,EAAAx4B,KAAAS,EACA8jD,EAAAvkD,KAAAq0B,EACAm1B,EAAAxpD,KAAAmrC,EASA,OAPAnrC,MAAAS,EAAA+3B,EAAAud,EAAA/1C,KAAAgF,EAAA8wC,EACA91C,KAAAgF,EAAAwzB,EAAAsd,EAAA91C,KAAAgF,EAAA+wC,EACA/1C,KAAAq0B,EAAAkwB,EAAAxO,EAAA/1C,KAAAqrC,EAAAyK,EACA91C,KAAAqrC,EAAAkZ,EAAAzO,EAAA91C,KAAAqrC,EAAA0K,EACA/1C,KAAAmrC,GAAAqe,EAAAzT,EAAA/1C,KAAAorC,GAAA0K,EACA91C,KAAAorC,GAAAoe,EAAA1T,EAAA91C,KAAAorC,GAAA2K,EAEA/1C,MASA8wC,EAAAjuC,UAAA4mD,OAAA,SAAAtT,GAEA,GAAA3d,GAAAx4B,KAAAS,EACAs6C,EAAA/6C,KAAAgF,EACAu/C,EAAAvkD,KAAAq0B,EACAq1B,EAAA1pD,KAAAqrC,CAUA,OARArrC,MAAAS,EAAA01C,EAAA11C,EAAA+3B,EAAA2d,EAAAnxC,EAAAu/C,EACAvkD,KAAAgF,EAAAmxC,EAAA11C,EAAAs6C,EAAA5E,EAAAnxC,EAAA0kD,EACA1pD,KAAAq0B,EAAA8hB,EAAA9hB,EAAAmE,EAAA2d,EAAA9K,EAAAkZ,EACAvkD,KAAAqrC,EAAA8K,EAAA9hB,EAAA0mB,EAAA5E,EAAA9K,EAAAqe,EAEA1pD,KAAAmrC,GAAAgL,EAAAhL,GAAA3S,EAAA2d,EAAA/K,GAAAmZ,EAAAvkD,KAAAmrC,GACAnrC,KAAAorC,GAAA+K,EAAAhL,GAAA4P,EAAA5E,EAAA/K,GAAAse,EAAA1pD,KAAAorC,GAEAprC,MAkBA8wC,EAAAjuC,UAAA6zC,aAAA,SAAA/hC,EAAAmD,EAAA++B,EAAAC,EAAAnB,EAAAC,EAAAC,EAAAc,EAAAC,GAEA,GAAAn2C,GAAAuE,EAAAqvB,EAAAgX,EAAAse,EAAAC,EAAA9yB,EAAA6T,EAAAkf,EAAAhzB,CAsBA,OApBA8yB,GAAAn0C,KAAAsgC,IAAAD,GACA+T,EAAAp0C,KAAAugC,IAAAF,GACA/e,EAAAthB,KAAAugC,IAAAa,GACAjM,EAAAn1B,KAAAsgC,IAAAc,GACAiT,GAAAr0C,KAAAsgC,IAAAa,GACA9f,EAAArhB,KAAAugC,IAAAY,GAEAl2C,EAAAmpD,EAAAjU,EACA3wC,EAAA2kD,EAAAhU,EACAthB,GAAAs1B,EAAA/T,EACAvK,EAAAue,EAAAhU,EAEA51C,KAAAS,EAAAq2B,EAAAr2B,EAAAkqC,EAAAtW,EACAr0B,KAAAgF,EAAA8xB,EAAA9xB,EAAA2lC,EAAAU,EACArrC,KAAAq0B,EAAAw1B,EAAAppD,EAAAo2B,EAAAxC,EACAr0B,KAAAqrC,EAAAwe,EAAA7kD,EAAA6xB,EAAAwU,EAEArrC,KAAAmrC,GAAAx2B,GAAAkiC,EAAAp2C,EAAAq2C,EAAAziB,GACAr0B,KAAAorC,GAAAtzB,GAAA++B,EAAA7xC,EAAA8xC,EAAAzL,GAEArrC,MASA8wC,EAAAjuC,UAAAinD,QAAA,SAAA3T,GAEA,GAAAqT,GAAAxpD,KAAAmrC,EAEA,IAAA,IAAAgL,EAAA11C,GAAA,IAAA01C,EAAAnxC,GAAA,IAAAmxC,EAAA9hB,GAAA,IAAA8hB,EAAA9K,EACA,CACA,GAAA7S,GAAAx4B,KAAAS,EACA8jD,EAAAvkD,KAAAq0B,CACAr0B,MAAAS,EAAA+3B,EAAA2d,EAAA11C,EAAAT,KAAAgF,EAAAmxC,EAAA9hB,EACAr0B,KAAAgF,EAAAwzB,EAAA2d,EAAAnxC,EAAAhF,KAAAgF,EAAAmxC,EAAA9K,EACArrC,KAAAq0B,EAAAkwB,EAAApO,EAAA11C,EAAAT,KAAAqrC,EAAA8K,EAAA9hB,EACAr0B,KAAAqrC,EAAAkZ,EAAApO,EAAAnxC,EAAAhF,KAAAqrC,EAAA8K,EAAA9K,EAMA,MAHArrC,MAAAmrC,GAAAqe,EAAArT,EAAA11C,EAAAT,KAAAorC,GAAA+K,EAAA9hB,EAAA8hB,EAAAhL,GACAnrC,KAAAorC,GAAAoe,EAAArT,EAAAnxC,EAAAhF,KAAAorC,GAAA+K,EAAA9K,EAAA8K,EAAA/K,GAEAprC,MAQA8wC,EAAAjuC,UAAAknD,OAAA,WAEA,GAAAvxB,GAAAx4B,KAAAS,EACAs6C,EAAA/6C,KAAAgF,EACAu/C,EAAAvkD,KAAAq0B,EACAq1B,EAAA1pD,KAAAqrC,EACAme,EAAAxpD,KAAAmrC,GACA/qC,EAAAo4B,EAAAkxB,EAAA3O,EAAAwJ,CASA,OAPAvkD,MAAAS,EAAAipD,EAAAtpD,EACAJ,KAAAgF,GAAA+1C,EAAA36C,EACAJ,KAAAq0B,GAAAkwB,EAAAnkD,EACAJ,KAAAqrC,EAAA7S,EAAAp4B,EACAJ,KAAAmrC,IAAAoZ,EAAAvkD,KAAAorC,GAAAse,EAAAF,GAAAppD,EACAJ,KAAAorC,KAAA5S,EAAAx4B,KAAAorC,GAAA2P,EAAAyO,GAAAppD,EAEAJ,MASA8wC,EAAAjuC,UAAAyQ,SAAA,WASA,MAPAtT,MAAAS,EAAA,EACAT,KAAAgF,EAAA,EACAhF,KAAAq0B,EAAA,EACAr0B,KAAAqrC,EAAA,EACArrC,KAAAmrC,GAAA,EACAnrC,KAAAorC,GAAA,EAEAprC,MAQA8wC,EAAAjuC,UAAA+1C,MAAA,WAEA,GAAAzC,GAAA,GAAArF,EAQA,OAPAqF,GAAA11C,EAAAT,KAAAS,EACA01C,EAAAnxC,EAAAhF,KAAAgF,EACAmxC,EAAA9hB,EAAAr0B,KAAAq0B,EACA8hB,EAAA9K,EAAArrC,KAAAqrC,EACA8K,EAAAhL,GAAAnrC,KAAAmrC,GACAgL,EAAA/K,GAAAprC,KAAAorC,GAEA+K,GAQArF,EAAAjuC,UAAAmnD,KAAA,SAAA7T,GASA,MAPAA,GAAA11C,EAAAT,KAAAS,EACA01C,EAAAnxC,EAAAhF,KAAAgF,EACAmxC,EAAA9hB,EAAAr0B,KAAAq0B,EACA8hB,EAAA9K,EAAArrC,KAAAqrC,EACA8K,EAAAhL,GAAAnrC,KAAAmrC,GACAgL,EAAA/K,GAAAprC,KAAAorC,GAEA+K,GASArF,EAAA2C,SAAA,GAAA3C,GAQAA,EAAAmZ,YAAA,GAAAnZ,KAEAoZ,UAAA,KAAAC,IAAA,SAAAzpD,EAAAjB,EAAAD,GAUA,QAAA23C,GAAAxiC,EAAAmD,GAMA9X,KAAA2U,EAAAA,GAAA,EAMA3U,KAAA8X,EAAAA,GAAA,EAGAq/B,EAAAt0C,UAAAmH,YAAAmtC,EACA13C,EAAAD,QAAA23C,EAOAA,EAAAt0C,UAAA+1C,MAAA,WAEA,MAAA,IAAAzB,GAAAn3C,KAAA2U,EAAA3U,KAAA8X,IAQAq/B,EAAAt0C,UAAAmnD,KAAA,SAAArlC,GACA3kB,KAAAkQ,IAAAyU,EAAAhQ,EAAAgQ,EAAA7M,IASAq/B,EAAAt0C,UAAA4wB,OAAA,SAAA9O,GACA,MAAAA,GAAAhQ,IAAA3U,KAAA2U,GAAAgQ,EAAA7M,IAAA9X,KAAA8X,GAUAq/B,EAAAt0C,UAAAqN,IAAA,SAAAyE,EAAAmD,GAEA9X,KAAA2U,EAAAA,GAAA,EACA3U,KAAA8X,EAAAA,IAAA,IAAAA,EAAA9X,KAAA2U,EAAA,SAGAy1C,IAAA,SAAA1pD,EAAAjB,EAAAD,GAMAC,EAAAD,SAMA23C,MAAAz2C,EAAA,WACAowC,OAAApwC,EAAA,YAEA28C,OAAA38C,EAAA,mBACA68C,QAAA78C,EAAA,oBACAy4C,QAAAz4C,EAAA,oBACAsyC,UAAAtyC,EAAA,sBACAy8C,iBAAAz8C,EAAA,gCAGA2pD,WAAA,GAAAH,UAAA,GAAAI,kBAAA,GAAAC,mBAAA,GAAAC,mBAAA,GAAAC,qBAAA,GAAAC,4BAAA,KAAAC,IAAA,SAAAjqD,EAAAjB,EAAAD,GAaA,QAAA69C,GAAA1oC,EAAAmD,EAAAgjC,GAMA96C,KAAA2U,EAAAA,GAAA,EAMA3U,KAAA8X,EAAAA,GAAA,EAMA9X,KAAA86C,OAAAA,GAAA,EAOA96C,KAAAqC,KAAA0qC,EAAAkD,OAAAG,KArCA,GAAA4C,GAAAtyC,EAAA,eACAqsC,EAAArsC,EAAA,cAuCA28C,GAAAx6C,UAAAmH,YAAAqzC,EACA59C,EAAAD,QAAA69C,EAOAA,EAAAx6C,UAAA+1C,MAAA,WAEA,MAAA,IAAAyE,GAAAr9C,KAAA2U,EAAA3U,KAAA8X,EAAA9X,KAAA86C,SAUAuC,EAAAx6C,UAAAg8C,SAAA,SAAAlqC,EAAAmD,GAEA,GAAA9X,KAAA86C,QAAA,EAEA,OAAA,CAGA,IAAA8P,GAAA5qD,KAAA2U,EAAAA,EACAk2C,EAAA7qD,KAAA8X,EAAAA,EACAgzC,EAAA9qD,KAAA86C,OAAA96C,KAAA86C,MAKA,OAHA8P,IAAAA,EACAC,GAAAA,EAEAC,GAAAF,EAAAC,GAQAxN,EAAAx6C,UAAAyoC,UAAA,WAEA,MAAA,IAAA0H,GAAAhzC,KAAA2U,EAAA3U,KAAA86C,OAAA96C,KAAA8X,EAAA9X,KAAA86C,OAAA,EAAA96C,KAAA86C,OAAA,EAAA96C,KAAA86C,WAGA2G,cAAA,GAAAsJ,cAAA,KAAAC,IAAA,SAAAtqD,EAAAjB,EAAAD,GAcA,QAAA+9C,GAAA5oC,EAAAmD,EAAAlU,EAAAC,GAMA7D,KAAA2U,EAAAA,GAAA,EAMA3U,KAAA8X,EAAAA,GAAA,EAMA9X,KAAA4D,MAAAA,GAAA,EAMA5D,KAAA6D,OAAAA,GAAA,EAOA7D,KAAAqC,KAAA0qC,EAAAkD,OAAAI,KA5CA,GAAA2C,GAAAtyC,EAAA,eACAqsC,EAAArsC,EAAA,cA8CA68C,GAAA16C,UAAAmH,YAAAuzC,EACA99C,EAAAD,QAAA+9C,EAOAA,EAAA16C,UAAA+1C,MAAA,WAEA,MAAA,IAAA2E,GAAAv9C,KAAA2U,EAAA3U,KAAA8X,EAAA9X,KAAA4D,MAAA5D,KAAA6D,SAUA05C,EAAA16C,UAAAg8C,SAAA,SAAAlqC,EAAAmD,GAEA,GAAA9X,KAAA4D,OAAA,GAAA5D,KAAA6D,QAAA,EAEA,OAAA,CAIA,IAAAonD,IAAAt2C,EAAA3U,KAAA2U,GAAA3U,KAAA4D,MACAsnD,GAAApzC,EAAA9X,KAAA8X,GAAA9X,KAAA6D,MAKA,OAHAonD,IAAAA,EACAC,GAAAA,EAEA,GAAAD,EAAAC,GAQA3N,EAAA16C,UAAAyoC,UAAA,WAEA,MAAA,IAAA0H,GAAAhzC,KAAA2U,EAAA3U,KAAA4D,MAAA5D,KAAA8X,EAAA9X,KAAA6D,OAAA7D,KAAA4D,MAAA5D,KAAA6D,WAGA49C,cAAA,GAAAsJ,cAAA,KAAAI,IAAA,SAAAzqD,EAAAjB,EAAAD,GAaA,QAAA25C,GAAAiS,GAIA,GAAAlS,GAAAkS,CAGA,KAAAt/C,MAAA4O,QAAAw+B,GACA,CAGAA,EAAA,GAAAptC,OAAA+H,UAAA7S,OAEA,KAAA,GAAAP,GAAA,EAAAA,EAAAy4C,EAAAl4C,SAAAP,EACAy4C,EAAAz4C,GAAAoT,UAAApT,GAKA,GAAAy4C,EAAA,YAAA/B,GACA,CAEA,IAAA,GADAxyB,MACAhkB,EAAA,EAAA0qD,EAAAnS,EAAAl4C,OAAAqqD,EAAA1qD,EAAAA,IAEAgkB,EAAAha,KAAAuuC,EAAAv4C,GAAAgU,EAAAukC,EAAAv4C,GAAAmX,EAGAohC,GAAAv0B,EAGA3kB,KAAAo5C,QAAA,EAOAp5C,KAAAk5C,OAAAA,EAOAl5C,KAAAqC,KAAA0qC,EAAAkD,OAAAC,KAxDA,GAAAiH,GAAAz2C,EAAA,YACAqsC,EAAArsC,EAAA,cA0DAy4C,GAAAt2C,UAAAmH,YAAAmvC,EACA15C,EAAAD,QAAA25C,EAOAA,EAAAt2C,UAAA+1C,MAAA,WAEA,MAAA,IAAAO,GAAAn5C,KAAAk5C,OAAA16B,UAUA26B,EAAAt2C,UAAAg8C,SAAA,SAAAlqC,EAAAmD,GAQA,IAAA,GANAyf,IAAA,EAIAv2B,EAAAhB,KAAAk5C,OAAAl4C,OAAA,EAEAL,EAAA,EAAA+oB,EAAA1oB,EAAA,EAAAA,EAAAL,EAAA+oB,EAAA/oB,IACA,CACA,GAAA2qD,GAAAtrD,KAAAk5C,OAAA,EAAAv4C,GAAA4qD,EAAAvrD,KAAAk5C,OAAA,EAAAv4C,EAAA,GACA6qD,EAAAxrD,KAAAk5C,OAAA,EAAAxvB,GAAA+hC,EAAAzrD,KAAAk5C,OAAA,EAAAxvB,EAAA,GACAgiC,EAAAH,EAAAzzC,GAAA2zC,EAAA3zC,IAAA0zC,EAAAF,IAAAxzC,EAAAyzC,IAAAE,EAAAF,GAAAD,EAAA32C,CAEA+2C,KAEAn0B,GAAAA,GAIA,MAAAA,MAGAkqB,cAAA,GAAAkK,WAAA,KAAAC,IAAA,SAAAlrD,EAAAjB,EAAAD,GAaA,QAAAwzC,GAAAr+B,EAAAmD,EAAAlU,EAAAC,GAMA7D,KAAA2U,EAAAA,GAAA,EAMA3U,KAAA8X,EAAAA,GAAA,EAMA9X,KAAA4D,MAAAA,GAAA,EAMA5D,KAAA6D,OAAAA,GAAA,EAOA7D,KAAAqC,KAAA0qC,EAAAkD,OAAAE,KA3CA,GAAApD,GAAArsC,EAAA,cA8CAsyC,GAAAnwC,UAAAmH,YAAAgpC,EACAvzC,EAAAD,QAAAwzC,EAQAA,EAAAC,MAAA,GAAAD,GAAA,EAAA,EAAA,EAAA,GAQAA,EAAAnwC,UAAA+1C,MAAA,WAEA,MAAA,IAAA5F,GAAAhzC,KAAA2U,EAAA3U,KAAA8X,EAAA9X,KAAA4D,MAAA5D,KAAA6D,SAUAmvC,EAAAnwC,UAAAg8C,SAAA,SAAAlqC,EAAAmD,GAEA,MAAA9X,MAAA4D,OAAA,GAAA5D,KAAA6D,QAAA,GAEA,EAGA8Q,GAAA3U,KAAA2U,GAAAA,EAAA3U,KAAA2U,EAAA3U,KAAA4D,OAEAkU,GAAA9X,KAAA8X,GAAAA,EAAA9X,KAAA8X,EAAA9X,KAAA6D,QAEA,GAIA,KAGA49C,cAAA,KAAAoK,IAAA,SAAAnrD,EAAAjB,EAAAD,GAcA,QAAA29C,GAAAxoC,EAAAmD,EAAAlU,EAAAC,EAAAi3C,GAMA96C,KAAA2U,EAAAA,GAAA,EAMA3U,KAAA8X,EAAAA,GAAA,EAMA9X,KAAA4D,MAAAA,GAAA,EAMA5D,KAAA6D,OAAAA,GAAA,EAMA7D,KAAA86C,OAAAA,GAAA,GAOA96C,KAAAqC,KAAA0qC,EAAAkD,OAAAK,KAlDA,GAAAvD,GAAArsC,EAAA,cAqDAy8C,GAAAt6C,UAAAmH,YAAAmzC,EACA19C,EAAAD,QAAA29C,EAOAA,EAAAt6C,UAAA+1C,MAAA,WAEA,MAAA,IAAAuE,GAAAn9C,KAAA2U,EAAA3U,KAAA8X,EAAA9X,KAAA4D,MAAA5D,KAAA6D,OAAA7D,KAAA86C,SAUAqC,EAAAt6C,UAAAg8C,SAAA,SAAAlqC,EAAAmD,GAEA,MAAA9X,MAAA4D,OAAA,GAAA5D,KAAA6D,QAAA,GAEA,EAGA8Q,GAAA3U,KAAA2U,GAAAA,GAAA3U,KAAA2U,EAAA3U,KAAA4D,OAEAkU,GAAA9X,KAAA8X,GAAAA,GAAA9X,KAAA8X,EAAA9X,KAAA6D,QAEA,GAIA,KAGA49C,cAAA,KAAAqK,IAAA,SAAAprD,EAAAjB,EAAAD,GAoCA,QAAAymD,GAAA8F,EAAAC,EAAAC,GAEAvb,EAAA3vC,KAAAf,MAEAisD,EAAAA,GAAA,KACAF,EAAAA,GAAA,IAKA,IAAAG,GAAA,KACAD,GAAAC,IACAD,EAAAC,GAGAD,EAAAF,IACAE,EAAAF,GASA/rD,KAAAmsD,cAAA,GAAA,GAAA,GAAA,GAAA,GAMAnsD,KAAAosD,SAAAL,EAMA/rD,KAAAqsD,WAAAJ,EAMAjsD,KAAAssD,SAAA,KAMAtsD,KAAAusD,gBAAA,EAMAvsD,KAAAwsD,qBAAA,EASAxsD,KAAA+3C,UAAAhL,EAAAW,YAAAC,OAQA3tC,KAAAgwC,aAAA,EAEAhwC,KAAAysD,cAAAT,GA7GA,GAAAtb,GAAAhwC,EAAA,wBACAqsC,EAAArsC,EAAA,WA+GAulD,GAAApjD,UAAA0M,OAAA/L,OAAAktC,EAAA7tC,WACAojD,EAAApjD,UAAAmH,YAAAi8C,EACAxmD,EAAAD,QAAAymD,EAOAA,EAAApjD,UAAA4pD,cAAA,SAAAT,GAEAA,IACAhsD,KAAAmsD,YAAA,GAAA,SAAAH,KAAAA,EAAAhb,MAAAhxC,KAAAmsD,YAAA,GACAnsD,KAAAmsD,YAAA,GAAA,YAAAH,KAAAA,EAAAjjB,SAAA/oC,KAAAmsD,YAAA,GACAnsD,KAAAmsD,YAAA,GAAA,YAAAH,KAAAA,EAAAnW,SAAA71C,KAAAmsD,YAAA,GACAnsD,KAAAmsD,YAAA,GAAA,OAAAH,KAAAA,EAAAU,IAAA1sD,KAAAmsD,YAAA,GACAnsD,KAAAmsD,YAAA,GAAA,SAAAH,KAAAA,EAAAtX,MAAA10C,KAAAmsD,YAAA,KASAlG,EAAApjD,UAAA8vC,gBAAA,WAIA3yC,KAAA4yC,gCAUAqT,EAAApjD,UAAA6wC,YAAA,SAAA7K,GAEA7oC,KAAAkqC,WAAAlqC,KAAA2zC,YAAA,IAAA3zC,KAAAqpC,SAAAroC,QAAAhB,KAAA4zC,aAKA/K,EAAAkV,kBAAAlV,EAAAmD,QAAA2gB,UACA9jB,EAAAmD,QAAA2gB,SAAAja,OAAA1yC,QAQAimD,EAAApjD,UAAAuuC,iBAAA,SAAAwb,GAEA,GAAAC,GAAAr3C,KAAAyT,MAAA2jC,EAAA5sD,KAAAqsD,WACAQ,GAAA7sD,KAAAusD,kBACAvsD,KAAAusD,gBAAAM,IAUA5G,EAAApjD,UAAA4xC,aAAA,SAAA5L,GAEA,GAAA7oC,KAAAkqC,WAAAlqC,KAAA2zC,YAAA,IAAA3zC,KAAAqpC,SAAAroC,QAAAhB,KAAA4zC,WAAA,CAKA,GAAA7b,GAAA8Q,EAAA9Q,QACAtb,EAAAzc,KAAAkrC,eACA4hB,GAAA,EAEAC,EAAA,EACAC,EAAA,EAEAC,EAAA,EACAC,EAAA,EAEAjP,EAAApV,EAAAqV,WAAAl+C,KAAA+3C,UACAkG,KAAAlmB,EAAAomB,2BAEApmB,EAAAomB,yBAAAF,GAGAlmB,EAAAo1B,YAAAntD,KAAA2zC,WAEA3zC,KAAA4yC,8BAEA,KAAA,GAAAjyC,GAAA,EAAAA,EAAAX,KAAAqpC,SAAAroC,SAAAL,EACA,CACA,GAAAiqC,GAAA5qC,KAAAqpC,SAAA1oC,EAEA,IAAAiqC,EAAAV,QAAA,CAKA,GAAAkjB,GAAAxiB,EAAA3mC,QAAAmpD,KAIA,IAFAr1B,EAAAo1B,YAAAntD,KAAA2zC,WAAA/I,EAAA8J,MAEA9J,EAAAiL,UAAA,EAAArgC,KAAA03B,MAAA,EAGA4f,IAEA/0B,EAAA2e,aACAj6B,EAAAhc,EACAgc,EAAAzX,EACAyX,EAAA4X,EACA5X,EAAA4uB,EACA5uB,EAAA0uB,GACA1uB,EAAA2uB,IAGA0hB,GAAA,GAGAC,EAAAniB,EAAAyiB,OAAA,IAAAD,EAAAxpD,MAAAgnC,EAAAoG,MAAAr8B,GAAAi2B,EAAA7B,SAAAp0B,EAAA,GACAq4C,EAAApiB,EAAAyiB,OAAA,IAAAD,EAAAvpD,OAAA+mC,EAAAoG,MAAAl5B,GAAA8yB,EAAA7B,SAAAjxB,EAAA,GAEAm1C,EAAAG,EAAAxpD,MAAAgnC,EAAAoG,MAAAr8B,EACAu4C,EAAAE,EAAAvpD,OAAA+mC,EAAAoG,MAAAl5B,MAIA,CACAg1C,IAEAA,GAAA,GAGAliB,EAAAgI,8BAEA,IAAA0a,GAAA1iB,EAAAM,cAEArC,GAAAmH,YAEAjY,EAAA2e,aACA4W,EAAA7sD,EACA6sD,EAAAtoD,EACAsoD,EAAAj5B,EACAi5B,EAAAjiB,EACA,EAAAiiB,EAAAniB,GACA,EAAAmiB,EAAAliB,IAKArT,EAAA2e,aACA4W,EAAA7sD,EACA6sD,EAAAtoD,EACAsoD,EAAAj5B,EACAi5B,EAAAjiB,EACAiiB,EAAAniB,GACAmiB,EAAAliB,IAIA2hB,EAAAniB,EAAAyiB,OAAA,GAAAD,EAAAxpD,MAAA,GACAopD,EAAApiB,EAAAyiB,OAAA,GAAAD,EAAAvpD,OAAA,GAEAopD,EAAAG,EAAAxpD,MACAspD,EAAAE,EAAAvpD,OAGAk0B,EAAAw1B,UACA3iB,EAAA3mC,QAAA25C,YAAAp2C,OACA4lD,EAAAz4C,EACAy4C,EAAAt1C,EACAs1C,EAAAxpD,MACAwpD,EAAAvpD,OACAkpD,EACAC,EACAC,EACAC,OAUAjH,EAAApjD,UAAA0C,QAAA,WAGA,GAFAmrC,EAAA7tC,UAAA0C,QAAAqO,MAAA5T,KAAA6T,WAEA7T,KAAAssD,SACA,IAAA,GAAA3rD,GAAA,EAAAA,EAAAX,KAAAssD,SAAAtrD,SAAAL,EACAX,KAAAssD,SAAA3rD,GAAA4E,SAIAvF,MAAAmsD,YAAA,KACAnsD,KAAAssD,SAAA,QAGAvV,WAAA,GAAAiI,uBAAA,KAAAwO,IAAA,SAAA9sD,EAAAjB,EAAAD,GAoBA,QAAAiuD,GAAArrD,EAAA4pD,EAAA0B,EAAA3iD,GAOA/K,KAAAoC,GAAAA,EAOApC,KAAA2tD,SAAA,EAOA3tD,KAAA4tD,aAAA,EAAA5tD,KAAA2tD,SAOA3tD,KAAA+K,KAAAA,EAOA/K,KAAA6tD,qBAOA7tD,KAAA8tD,mBAEA,KAAA,GAAAntD,GAAA,EAAAA,EAAAqrD,EAAAhrD,OAAAL,IACA,CACA,GAAAotD,GAAA/B,EAAArrD,EAEA+sD,GAAA/sD,GAEAX,KAAA6tD,kBAAAljD,KAAAojD,GAIA/tD,KAAA8tD,iBAAAnjD,KAAAojD,GAIA/tD,KAAAguD,aAAA,EACAhuD,KAAAiuD,aAAA,KACAjuD,KAAAkuD,WAAA,KAEAluD,KAAAmuD,cAAA,EACAnuD,KAAAouD,cAAA,KACApuD,KAAAquD,YAAA,KAEAruD,KAAAsuD,cAIAb,EAAA5qD,UAAAmH,YAAAyjD,EACAhuD,EAAAD,QAAAiuD,EAOAA,EAAA5qD,UAAAyrD,YAAA,WAEA,GACA3tD,GACAotD,EAFA3rD,EAAApC,KAAAoC,GAIAmsD,EAAA,CAGA,KAFAvuD,KAAAmuD,cAAA,EAEAxtD,EAAA,EAAAA,EAAAX,KAAA6tD,kBAAA7sD,OAAAL,IAEAotD,EAAA/tD,KAAA6tD,kBAAAltD,GAEAotD,EAAAjrD,OAAAyrD,EACAA,GAAAR,EAAAhjD,KACA/K,KAAAmuD,eAAAJ,EAAAhjD,IAGA/K,MAAAquD,YAAA,GAAAxmD,cAAA7H,KAAA+K,KAAA/K,KAAAmuD,cAAA,GACAnuD,KAAAouD,cAAAhsD,EAAAK,eAEAL,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAAouD,eACAhsD,EAAAe,WAAAf,EAAAM,aAAA1C,KAAAquD,YAAAjsD,EAAAosD,aAIA,IAAAC,GAAA,CAGA,KAFAzuD,KAAAguD,aAAA,EAEArtD,EAAA,EAAAA,EAAAX,KAAA8tD,iBAAA9sD,OAAAL,IAEAotD,EAAA/tD,KAAA8tD,iBAAAntD,GAEAotD,EAAAjrD,OAAA2rD,EACAA,GAAAV,EAAAhjD,KACA/K,KAAAguD,cAAAD,EAAAhjD,IAGA/K,MAAAkuD,WAAA,GAAArmD,cAAA7H,KAAA+K,KAAA/K,KAAAguD,aAAA,GACAhuD,KAAAiuD,aAAA7rD,EAAAK,eAEAL,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAAiuD,cACA7rD,EAAAe,WAAAf,EAAAM,aAAA1C,KAAAkuD,WAAA9rD,EAAAosD,eAOAf,EAAA5qD,UAAA6rD,cAAA,SAAArlB,EAAA9zB,EAAAo5C,GAIA,IAAA,GAFAvsD,GAAApC,KAAAoC,GAEAzB,EAAA,EAAAA,EAAAX,KAAA6tD,kBAAA7sD,OAAAL,IACA,CACA,GAAAotD,GAAA/tD,KAAA6tD,kBAAAltD,EACAotD,GAAAa,eAAAvlB,EAAA9zB,EAAAo5C,EAAA3uD,KAAAquD,YAAAruD,KAAAmuD,cAAAJ,EAAAjrD,QAGAV,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAAouD,eACAhsD,EAAAc,cAAAd,EAAAM,aAAA,EAAA1C,KAAAquD,cAOAZ,EAAA5qD,UAAAgsD,aAAA,SAAAxlB,EAAA9zB,EAAAo5C,GAIA,IAAA,GAFAvsD,GAAApC,KAAAoC,GAEAzB,EAAA,EAAAA,EAAAX,KAAA8tD,iBAAA9sD,OAAAL,IACA,CACA,GAAAotD,GAAA/tD,KAAA8tD,iBAAAntD,EACAotD,GAAAa,eAAAvlB,EAAA9zB,EAAAo5C,EAAA3uD,KAAAkuD,WAAAluD,KAAAguD,aAAAD,EAAAjrD,QAGAV,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAAiuD,cACA7rD,EAAAc,cAAAd,EAAAM,aAAA,EAAA1C,KAAAkuD,aAOAT,EAAA5qD,UAAAG,KAAA,WAEA,GACArC,GAAAotD,EADA3rD,EAAApC,KAAAoC,EAKA,KAFAA,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAAouD,eAEAztD,EAAA,EAAAA,EAAAX,KAAA6tD,kBAAA7sD,OAAAL,IAEAotD,EAAA/tD,KAAA6tD,kBAAAltD,GACAyB,EAAAsM,oBAAAq/C,EAAA3jD,UAAA2jD,EAAAhjD,KAAA3I,EAAA4F,OAAA,EAAA,EAAAhI,KAAAmuD,cAAA,EAAAJ,EAAAjrD,OAKA,KAFAV,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAAiuD,cAEAttD,EAAA,EAAAA,EAAAX,KAAA8tD,iBAAA9sD,OAAAL,IAEAotD,EAAA/tD,KAAA8tD,iBAAAntD,GACAyB,EAAAsM,oBAAAq/C,EAAA3jD,UAAA2jD,EAAAhjD,KAAA3I,EAAA4F,OAAA,EAAA,EAAAhI,KAAAguD,aAAA,EAAAD,EAAAjrD,SAQA2qD,EAAA5qD,UAAA0C,QAAA,WAEAvF,KAAA6tD,kBAAA,KACA7tD,KAAAquD,YAAA,KACAruD,KAAAoC,GAAAsgD,aAAA1iD,KAAAouD,eAEApuD,KAAA8tD,iBAAA,KACA9tD,KAAAkuD,WAAA,KACAluD,KAAAoC,GAAAsgD,aAAA1iD,KAAAiuD,oBAGAa,IAAA,SAAApuD,EAAAjB,EAAAD,GAyBA,QAAA2mD,GAAAtd,GAEA6W,EAAA3+C,KAAAf,KAAA6oC,EAMA,IAAAkmB,GAAA,KAOA/uD,MAAAohD,QAAA,GAAAqB,aAAAsM,EAEA,KAAA,GAAApuD,GAAA,EAAA+oB,EAAA,EAAAqlC,EAAApuD,EAAAA,GAAA,EAAA+oB,GAAA,EAEA1pB,KAAAohD,QAAAzgD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAohD,QAAAzgD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAohD,QAAAzgD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAohD,QAAAzgD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAohD,QAAAzgD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAohD,QAAAzgD,EAAA,GAAA+oB,EAAA,CAQA1pB,MAAAqN,OAAA,KAEArN,KAAA8J,YAAA,KAEA9J,KAAAgsD,WAAA,KAEAhsD,KAAAgvD,WAAA,GAAAre,GAAAG,OA9DA,GAAA4O,GAAAh/C,EAAA,8CACA2rC,EAAA3rC,EAAA,uCACAuuD,EAAAvuD,EAAA,oBACA+sD,EAAA/sD,EAAA,oBACAiwC,EAAAjwC,EAAA,aA6DAylD,GAAAtjD,UAAA0M,OAAA/L,OAAAk8C,EAAA78C,WACAsjD,EAAAtjD,UAAAmH,YAAAm8C,EACA1mD,EAAAD,QAAA2mD,EAEA9Z,EAAAC,eAAA,WAAA6Z,GAOAA,EAAAtjD,UAAA09C,gBAAA,WAEA,GAAAn+C,GAAApC,KAAA6oC,SAAAzmC,EAGApC,MAAAqN,OAAA,GAAA4hD,GAAAjvD,KAAA6oC,SAAAqmB,eAEAlvD,KAAA8J,YAAA1H,EAAAK,eAKAL,EAAAgB,WAAAhB,EAAAmB,qBAAAvD,KAAA8J,aACA1H,EAAAe,WAAAf,EAAAmB,qBAAAvD,KAAAohD,QAAAh/C,EAAAO,aAEA3C,KAAAgsD,aAGA5hD,UAAApK,KAAAqN,OAAA5G,WAAAy6C,gBACAn2C,KAAA,EACA6jD,eAAA5uD,KAAAmvD,eACArsD,OAAA,IAIAsH,UAAApK,KAAAqN,OAAA5G,WAAA2oD,eACArkD,KAAA,EACA6jD,eAAA5uD,KAAAqvD,eACAvsD,OAAA,IAIAsH,UAAApK,KAAAqN,OAAA5G,WAAA6oD,UACAvkD,KAAA,EACA6jD,eAAA5uD,KAAAuvD,eACAzsD,OAAA,IAIAsH,UAAApK,KAAAqN,OAAA5G,WAAA+oD,cACAzkD,KAAA,EACA6jD,eAAA5uD,KAAAyvD,UACA3sD,OAAA,IAIAsH,UAAApK,KAAAqN,OAAA5G,WAAA06C,OACAp2C,KAAA,EACA6jD,eAAA5uD,KAAA0vD,YACA5sD,OAAA,KASAqjD,EAAAtjD,UAAA2H,MAAA,WAEA,GAAApI,GAAApC,KAAA6oC,SAAAzmC,EAGAA,GAAA+F,cAAA/F,EAAAgG,UAIAhG,EAAAgB,WAAAhB,EAAAmB,qBAAAvD,KAAA8J,YAEA,IAAAuD,GAAArN,KAAAqN,MAEArN,MAAA6oC,SAAAqmB,cAAAS,UAAAtiD,IASA84C,EAAAtjD,UAAA6vC,OAAA,SAAA+D,GAEA,GAAApN,GAAAoN,EAAApN,SACAumB,EAAAvmB,EAAAroC,OACA+qD,EAAAtV,EAAA2V,SACAH,EAAAxV,EAAA4V,UAEA,IAAA,IAAAuD,EAAA,CAIAA,EAAA7D,IAEA6D,EAAA7D,GAGAtV,EAAA6V,WAEA7V,EAAA6V,SAAAtsD,KAAA6vD,gBAAApZ,IAIAz2C,KAAA6oC,SAAA8X,iBAAAC,aAAAnK,EAAAsB,UAEA,IAAA31C,GAAApC,KAAA6oC,SAAAzmC,GAEAmoB,EAAAksB,EAAAvL,eAAA8e,KAAAhqD,KAAAgvD,WACAzkC,GAAAu/B,QAAA9pD,KAAA6oC,SAAAinB,oBAAAC,kBACA3tD,EAAA4tD,iBAAAhwD,KAAAqN,OAAA1G,SAAAopD,iBAAAE,WAAA,EAAA1lC,EAAAy2B,SAAA,IACA5+C,EAAA8tD,UAAAlwD,KAAAqN,OAAA1G,SAAAwpD,OAAAF,UAAAxZ,EAAA9C,WAIA,IAAAiK,GAAAvU,EAAA,GAAA+mB,SAAAxS,WAEA,IAAAA,EAAAyS,YAAAjuD,EAAAkJ,IAeAlJ,EAAAiG,YAAAjG,EAAAkC,WAAAs5C,EAAAyS,YAAAjuD,EAAAkJ,SAdA,CAEA,IAAAtL,KAAA6oC,SAAAynB,cAAA1S,GAEA,MAGAnH,GAAA0V,YAAA,IAAA1V,EAAA0V,YAAA,KAEA1V,EAAA8V,gBAAA,GASA,IAAA,GAAA5rD,GAAA,EAAA+oB,EAAA,EAAAkmC,EAAAjvD,EAAAA,GAAAsrD,EAAAviC,GAAA,EACA,CACA,GAAAilC,GAAAiB,EAAAjvD,CACAguD,GAAA1C,IAEA0C,EAAA1C,EAGA,IAAAzpD,GAAAi0C,EAAA6V,SAAA5iC,EAGAlnB,GAAAksD,cAAArlB,EAAA1oC,EAAAguD,GAGAlY,EAAA8V,kBAAA7iC,IAEAlnB,EAAAqsD,aAAAxlB,EAAA1oC,EAAAguD,GACAlY,EAAA8V,gBAAA7iC,EAAA,GAIAlnB,EAAAQ,KAAAhD,KAAAqN,QAGAjL,EAAA4I,aAAA5I,EAAA6sC,UAAA,EAAA0f,EAAAvsD,EAAA6I,eAAA,GACAjL,KAAA6oC,SAAAwY,eASA8E,EAAAtjD,UAAAgtD,gBAAA,SAAApZ,GAEA,GAKA91C,GALAyB,EAAApC,KAAA6oC,SAAAzmC,GACAmuD,KACAxlD,EAAA0rC,EAAA2V,SACAH,EAAAxV,EAAA4V,WACAqB,EAAAjX,EAAA0V,WAGA,KAAAxrD,EAAA,EAAAoK,EAAApK,EAAAA,GAAAsrD,EAEAsE,EAAA5lD,KAAA,GAAA8iD,GAAArrD,EAAApC,KAAAgsD,WAAA0B,EAAAzB,GAGA,OAAAsE,IAaApK,EAAAtjD,UAAAssD,eAAA,SAAA9lB,EAAA9zB,EAAAo5C,EAAA3gD,EAAAzD,EAAAzH,GASA,IAAA,GAPA0tD,GACAvsD,EACAmhB,EACAslB,EACAC,EACAyT,EAAAC,EAAAC,EAAAC,EAEA59C,EAAA,EAAAguD,EAAAhuD,EAAAA,IAEA6vD,EAAAnnB,EAAA9zB,EAAA5U,GACAsD,EAAAusD,EAAAJ,SACA1lB,EAAA8lB,EAAAxf,MAAAr8B,EACAg2B,EAAA6lB,EAAAxf,MAAAl5B,EAEA7T,EAAAmhB,MAGAA,EAAAnhB,EAAAmhB,KAEAi5B,EAAAj5B,EAAAzQ,EAAA67C,EAAAnD,OAAA14C,EAAAyQ,EAAAxhB,MACAw6C,EAAAC,EAAAp6C,EAAAwsD,KAAA7sD,MAEA26C,EAAAn5B,EAAAtN,EAAA04C,EAAAnD,OAAAv1C,EAAAsN,EAAAvhB,OACAy6C,EAAAC,EAAAt6C,EAAAwsD,KAAA5sD,SAIAu6C,EAAAn6C,EAAAysD,OAAA,OAAA,EAAAF,EAAAnD,OAAA14C,GACA0pC,EAAAp6C,EAAAysD,OAAA,OAAAF,EAAAnD,OAAA14C,EAEA2pC,EAAAr6C,EAAAysD,OAAA7sD,QAAA,EAAA2sD,EAAAnD,OAAAv1C,GACAymC,EAAAt6C,EAAAysD,OAAA7sD,QAAA2sD,EAAAnD,OAAAv1C,GAGA9J,EAAAlL,GAAAu7C,EAAA3T,EACA18B,EAAAlL,EAAA,GAAAy7C,EAAA5T,EAEA38B,EAAAlL,EAAAyH,GAAA6zC,EAAA1T,EACA18B,EAAAlL,EAAAyH,EAAA,GAAAg0C,EAAA5T,EAEA38B,EAAAlL,EAAA,EAAAyH,GAAA6zC,EAAA1T,EACA18B,EAAAlL,EAAA,EAAAyH,EAAA,GAAA+zC,EAAA3T,EAEA38B,EAAAlL,EAAA,EAAAyH,GAAA8zC,EAAA3T,EACA18B,EAAAlL,EAAA,EAAAyH,EAAA,GAAA+zC,EAAA3T,EAEA7nC,GAAA,EAAAyH,GAcA47C,EAAAtjD,UAAAwsD,eAAA,SAAAhmB,EAAA9zB,EAAAo5C,EAAA3gD,EAAAzD,EAAAzH,GAEA,IAAA,GAAAnC,GAAA,EAAAguD,EAAAhuD,EAAAA,IACA,CACA,GAAAgwD,GAAAtnB,EAAA9zB,EAAA5U,GAAAooC,QAEA/6B,GAAAlL,GAAA6tD,EAAAh8C,EACA3G,EAAAlL,EAAA,GAAA6tD,EAAA74C,EAEA9J,EAAAlL,EAAAyH,GAAAomD,EAAAh8C,EACA3G,EAAAlL,EAAAyH,EAAA,GAAAomD,EAAA74C,EAEA9J,EAAAlL,EAAA,EAAAyH,GAAAomD,EAAAh8C,EACA3G,EAAAlL,EAAA,EAAAyH,EAAA,GAAAomD,EAAA74C,EAEA9J,EAAAlL,EAAA,EAAAyH,GAAAomD,EAAAh8C,EACA3G,EAAAlL,EAAA,EAAAyH,EAAA,GAAAomD,EAAA74C,EAEAhV,GAAA,EAAAyH,IAcA47C,EAAAtjD,UAAA0sD,eAAA,SAAAlmB,EAAA9zB,EAAAo5C,EAAA3gD,EAAAzD,EAAAzH,GAEA,IAAA,GAAAnC,GAAA,EAAAguD,EAAAhuD,EAAAA,IACA,CACA,GAAAiwD,GAAAvnB,EAAA9zB,EAAA5U,GAAAk1C,QAGA7nC,GAAAlL,GAAA8tD,EACA5iD,EAAAlL,EAAAyH,GAAAqmD,EACA5iD,EAAAlL,EAAA,EAAAyH,GAAAqmD,EACA5iD,EAAAlL,EAAA,EAAAyH,GAAAqmD,EAEA9tD,GAAA,EAAAyH,IAaA47C,EAAAtjD,UAAA4sD,UAAA,SAAApmB,EAAA9zB,EAAAo5C,EAAA3gD,EAAAzD,EAAAzH,GAEA,IAAA,GAAAnC,GAAA,EAAAguD,EAAAhuD,EAAAA,IACA,CACA,GAAAkwD,GAAAxnB,EAAA9zB,EAAA5U,GAAAyvD,SAAAU,IAEAD,IAEA7iD,EAAAlL,GAAA+tD,EAAAE,GACA/iD,EAAAlL,EAAA,GAAA+tD,EAAAG,GAEAhjD,EAAAlL,EAAAyH,GAAAsmD,EAAAnW,GACA1sC,EAAAlL,EAAAyH,EAAA,GAAAsmD,EAAAlW,GAEA3sC,EAAAlL,EAAA,EAAAyH,GAAAsmD,EAAAjW,GACA5sC,EAAAlL,EAAA,EAAAyH,EAAA,GAAAsmD,EAAAhW,GAEA7sC,EAAAlL,EAAA,EAAAyH,GAAAsmD,EAAArS,GACAxwC,EAAAlL,EAAA,EAAAyH,EAAA,GAAAsmD,EAAApS,GAEA37C,GAAA,EAAAyH,IAKAyD,EAAAlL,GAAA,EACAkL,EAAAlL,EAAA,GAAA,EAEAkL,EAAAlL,EAAAyH,GAAA,EACAyD,EAAAlL,EAAAyH,EAAA,GAAA,EAEAyD,EAAAlL,EAAA,EAAAyH,GAAA,EACAyD,EAAAlL,EAAA,EAAAyH,EAAA,GAAA,EAEAyD,EAAAlL,EAAA,EAAAyH,GAAA,EACAyD,EAAAlL,EAAA,EAAAyH,EAAA,GAAA,EAEAzH,GAAA,EAAAyH,KAcA47C,EAAAtjD,UAAA6sD,YAAA,SAAArmB,EAAA9zB,EAAAo5C,EAAA3gD,EAAAzD,EAAAzH,GAEA,IAAA,GAAAnC,GAAA,EAAAguD,EAAAhuD,EAAAA,IACA,CACA,GAAAswD,GAAA5nB,EAAA9zB,EAAA5U,GAAA+zC,KAEA1mC,GAAAlL,GAAAmuD,EACAjjD,EAAAlL,EAAAyH,GAAA0mD,EACAjjD,EAAAlL,EAAA,EAAAyH,GAAA0mD,EACAjjD,EAAAlL,EAAA,EAAAyH,GAAA0mD,EAEAnuD,GAAA,EAAAyH,IASA47C,EAAAtjD,UAAA0C,QAAA,WAEAvF,KAAA6oC,SAAAzmC,IACApC,KAAA6oC,SAAAzmC,GAAAsgD,aAAA1iD,KAAA8J,aAGA41C,EAAA78C,UAAA0C,QAAAqO,MAAA5T,KAAA6T,WAEA7T,KAAAqN,OAAA9H,UAEAvF,KAAAohD,QAAA,KACAphD,KAAAgvD,WAAA,QAGAtN,aAAA,GAAAC,sCAAA,GAAAC,6CAAA,GAAAsP,mBAAA,GAAAC,mBAAA,KAAAC,IAAA,SAAA1wD,EAAAjB,EAAAD,GASA,QAAAyvD,GAAAC,GAEAmC,EAAAtwD,KAAAf,KACAkvD,GAGA,kCACA,gCACA,0BAEA,iCACA,yBACA,6BAEA,iCAEA,8BACA,wBAEA,mBACA,+BAEA,wFACA,wFACA,6BAEA,yEAEA,oCACA,sBACA,KACAt+C,KAAA,OAGA,wBAEA,8BACA,wBAEA,8BACA,wBAEA,mBACA,uEACA,iCACA,0BACA,KACAA,KAAA;AAGAu/C,QAAA9tD,KAAA,KAAA8M,MAAA,KAIAigD,eAAA,EAEAE,UAAA,IAhEA,GAAA+B,GAAA3wD,EAAA,8CAwEAuuD,GAAApsD,UAAA0M,OAAA/L,OAAA6tD,EAAAxuD,WACAosD,EAAApsD,UAAAmH,YAAAilD,EAEAxvD,EAAAD,QAAAyvD,IAEAqC,8CAAA,KAAAC,IAAA,SAAA7wD,EAAAjB,EAAAD,GA0BA,QAAAgyD,GAAAC,EAAA7tD,EAAAC,EAAAgH,GAOA,GALAmtB,EAAAj3B,KAAAf,MAEA6qC,EAAA6mB,SAAAD,GAGA5mD,EAEA,IAAA,GAAAlK,KAAAosC,GAAAyC,uBAEA,mBAAA3kC,GAAAlK,KAEAkK,EAAAlK,GAAAosC,EAAAyC,uBAAA7uC,QAMAkK,GAAAkiC,EAAAyC,sBAUAxvC,MAAAqC,KAAA0qC,EAAAO,cAAAC,QAQAvtC,KAAA4D,MAAAA,GAAA,IAQA5D,KAAA6D,OAAAA,GAAA,IAOA7D,KAAA4pC,KAAA/+B,EAAA++B,MAAA/J,SAAAC,cAAA,UAQA9/B,KAAAyvC,WAAA5kC,EAAA4kC,WAOAzvC,KAAA6vC,YAAAhlC,EAAAglC,YAOA7vC,KAAA4vC,WAAA/kC,EAAA+kC,aAAA,EAOA5vC,KAAAk+C,WAAA,KAOAl+C,KAAA+vC,sBAAAllC,EAAAklC,sBAWA/vC,KAAA8vC,kBAAAjlC,EAAAilC,kBAQA9vC,KAAAgwC,YAAAnlC,EAAAmlC,YAQAhwC,KAAA2xD,iBAAA,EAQA3xD,KAAA4xD,sBAAA,EAAA,EAAA,EAAA,GAQA5xD,KAAA6xD,uBAAA,UAEA7xD,KAAAwrC,gBAAA3gC,EAAA2gC,iBAAAxrC,KAAA2xD,iBAQA3xD,KAAAu1C,0BAAArK,eAAA,GAAAyF,GAAAG,OAAAr0B,WAAAyuB,eAAA,GAAAyF,GAAAG,QAAA6C,WAAA,EAAAtK,aAQArpC,KAAAuqC,oBAAAvqC,KAAAu1C,yBA9KA,GAAA1K,GAAAnqC,EAAA,YACAiwC,EAAAjwC,EAAA,WACAqsC,EAAArsC,EAAA,YACAs3B,EAAAt3B,EAAA,gBA+KA8wD,GAAA3uD,UAAA0M,OAAA/L,OAAAw0B,EAAAn1B,WACA2uD,EAAA3uD,UAAAmH,YAAAwnD,EACA/xD,EAAAD,QAAAgyD,EAEAjiD,OAAAwhC,iBAAAygB,EAAA3uD,WAOA2oC,iBAEAx7B,IAAA,WAEA,MAAAhQ,MAAA2xD,kBAEAzhD,IAAA,SAAA8O,GAEAhf,KAAA2xD,iBAAA3yC,EACAhf,KAAA6xD,uBAAAhnB,EAAAinB,WAAA9yC,GACA6rB,EAAAoW,QAAAjiC,EAAAhf,KAAA4xD,0BAWAJ,EAAA3uD,UAAAwC,OAAA,SAAAzB,EAAAC,GACA7D,KAAA4D,MAAAA,EAAA5D,KAAAyvC,WACAzvC,KAAA6D,OAAAA,EAAA7D,KAAAyvC,WAEAzvC,KAAA4pC,KAAAhmC,MAAA5D,KAAA4D,MACA5D,KAAA4pC,KAAA/lC,OAAA7D,KAAA6D,OAEA7D,KAAA4vC,aAEA5vC,KAAA4pC,KAAAd,MAAAllC,MAAA5D,KAAA4D,MAAA5D,KAAAyvC,WAAA,KACAzvC,KAAA4pC,KAAAd,MAAAjlC,OAAA7D,KAAA6D,OAAA7D,KAAAyvC,WAAA,OASA+hB,EAAA3uD,UAAA0C,QAAA,SAAAwsD,GACAA,GAAA/xD,KAAA4pC,KAAAC,YAEA7pC,KAAA4pC,KAAAC,WAAAE,YAAA/pC,KAAA4pC,MAGA5pC,KAAAqC,KAAA0qC,EAAAO,cAAAC,QAEAvtC,KAAA4D,MAAA,EACA5D,KAAA6D,OAAA,EAEA7D,KAAA4pC,KAAA,KAEA5pC,KAAAyvC,WAAA,EAEAzvC,KAAA6vC,aAAA,EAEA7vC,KAAA4vC,YAAA,EAEA5vC,KAAAk+C,WAAA,KAEAl+C,KAAA+vC,uBAAA,EACA/vC,KAAA8vC,mBAAA,EAEA9vC,KAAAgwC,aAAA,EAEAhwC,KAAA2xD,iBAAA,EACA3xD,KAAA4xD,qBAAA,KACA5xD,KAAA6xD,uBAAA,QAGA9a,WAAA,GAAAnC,UAAA,GAAAE,WAAA,IAAAtY,cAAA,KAAAw1B,IAAA,SAAAtxD,EAAAjB,EAAAD,GA0BA,QAAA+sC,GAAA3oC,EAAAC,EAAAgH,GAEAA,EAAAA,MAEA2mD,EAAAzwD,KAAAf,KAAA,SAAA4D,EAAAC,EAAAgH,GAEA7K,KAAAqC,KAAA0qC,EAAAO,cAAAG,OAOAztC,KAAA+3B,QAAA/3B,KAAA4pC,KAAAv+B,WAAA,MAAAqpC,MAAA10C,KAAA6vC,cAOA7vC,KAAAiyD,SAAA,EAOAjyD,KAAAm0C,YAAA,GAAA+d,GAOAlyD,KAAAmyD,eAAA,wBAEAnyD,KAAA+3B,QAAAq6B,wBAEApyD,KAAA+3B,QAAAs6B,4BAEAryD,KAAAmyD,eAAA,8BAEAnyD,KAAA+3B,QAAAu6B,yBAEAtyD,KAAAmyD,eAAA,2BAEAnyD,KAAA+3B,QAAAw6B,uBAEAvyD,KAAAmyD,eAAA,yBAEAnyD,KAAA+3B,QAAAy6B,0BAEAxyD,KAAAmyD,eAAA,4BAIAnyD,KAAAyyD,cAEAzyD,KAAA0yD,iBAQA1yD,KAAAu1C,0BACArK,eAAA,GAAAyF,GAAAG,OACA6C,WAAA,GAIA3zC,KAAAqF,OAAAzB,EAAAC,GAjGA,GAAA2tD,GAAA9wD,EAAA,qBACAwxD,EAAAxxD,EAAA,6BACAmqC,EAAAnqC,EAAA,eACAiwC,EAAAjwC,EAAA,cACAqsC,EAAArsC,EAAA,cAiGA6rC,GAAA1pC,UAAA0M,OAAA/L,OAAAguD,EAAA3uD,WACA0pC,EAAA1pC,UAAAmH,YAAAuiC,EACA9sC,EAAAD,QAAA+sC,EACA1B,EAAA8nB,aAAAC,MAAArmB,GAOAA,EAAA1pC,UAAA6vC,OAAA,SAAA79B,GAEA7U,KAAAonB,KAAA,YAEA,IAAAyrC,GAAAh+C,EAAAy8B,MAEAtxC,MAAAuqC,oBAAA11B,EAEAA,EAAAy8B,OAAAtxC,KAAAu1C,yBAGA1gC,EAAA89B,kBAEA99B,EAAAy8B,OAAAuhB,EAEA7yD,KAAA+3B,QAAA2e,aAAA,EAAA,EAAA,EAAA,EAAA,EAAA,GAEA12C,KAAA+3B,QAAAo1B,YAAA,EAEAntD,KAAA+3B,QAAAomB,yBAAAn+C,KAAAk+C,WAAAnR,EAAAW,YAAAC,QAEA5N,UAAAC,YAAAhgC,KAAA4pC,KAAAkpB,eAEA9yD,KAAA+3B,QAAAg7B,UAAA,QACA/yD,KAAA+3B,QAAAhzB,SAGA/E,KAAA8vC,oBAEA9vC,KAAA6vC,YAEA7vC,KAAA+3B,QAAAi7B,UAAA,EAAA,EAAAhzD,KAAA4D,MAAA5D,KAAA6D,SAIA7D,KAAA+3B,QAAAg7B,UAAA/yD,KAAA6xD,uBACA7xD,KAAA+3B,QAAAk7B,SAAA,EAAA,EAAAjzD,KAAA4D,MAAA5D,KAAA6D,UAIA7D,KAAAkzD,oBAAAr+C,EAAA7U,KAAA+3B,SAEA/3B,KAAAonB,KAAA,eAQAmlB,EAAA1pC,UAAA0C,QAAA,SAAAwsD,GAEA/xD,KAAAmzD,iBAGA3B,EAAA3uD,UAAA0C,QAAAxE,KAAAf,KAAA+xD,GAEA/xD,KAAA+3B,QAAA,KAEA/3B,KAAAiyD,SAAA,EAEAjyD,KAAAm0C,YAAA5uC,UACAvF,KAAAm0C,YAAA,KAEAn0C,KAAAmyD,eAAA,MASA5lB,EAAA1pC,UAAAqwD,oBAAA,SAAAjpB,EAAAlS,GAEA,GAAAq7B,GAAApzD,KAAA+3B,OAEA/3B,MAAA+3B,QAAAA,EACAkS,EAAAwK,aAAAz0C,MACAA,KAAA+3B,QAAAq7B,GASA7mB,EAAA1pC,UAAAwC,OAAA,SAAAoU,EAAA2X,GAEAogC,EAAA3uD,UAAAwC,OAAAtE,KAAAf,KAAAyZ,EAAA2X,GAIApxB,KAAAmyD,iBAEAnyD,KAAA+3B,QAAA/3B,KAAAmyD,gBAAAplB,EAAAqC,YAAA/M,UAAA0K,EAAAqC,YAAAxmC,SAUA2jC,EAAA1pC,UAAA6vD,eAAA,WAEA1yD,KAAAk+C,aAEAl+C,KAAAk+C,cAEArT,EAAAwoB,6BAEArzD,KAAAk+C,WAAAnR,EAAAW,YAAAC,QAAA,cACA3tC,KAAAk+C,WAAAnR,EAAAW,YAAAE,KAAA,UACA5tC,KAAAk+C,WAAAnR,EAAAW,YAAAG,UAAA,WACA7tC,KAAAk+C,WAAAnR,EAAAW,YAAAI,QAAA,SACA9tC,KAAAk+C,WAAAnR,EAAAW,YAAAK,SAAA,UACA/tC,KAAAk+C,WAAAnR,EAAAW,YAAAM,QAAA,SACAhuC,KAAAk+C,WAAAnR,EAAAW,YAAAO,SAAA,UACAjuC,KAAAk+C,WAAAnR,EAAAW,YAAAQ,aAAA,cACAluC,KAAAk+C,WAAAnR,EAAAW,YAAAS,YAAA,aACAnuC,KAAAk+C,WAAAnR,EAAAW,YAAAU,YAAA,aACApuC,KAAAk+C,WAAAnR,EAAAW,YAAAW,YAAA,aACAruC,KAAAk+C,WAAAnR,EAAAW,YAAAY,YAAA,aACAtuC,KAAAk+C,WAAAnR,EAAAW,YAAAa,WAAA,YACAvuC,KAAAk+C,WAAAnR,EAAAW,YAAAc,KAAA,MACAxuC,KAAAk+C,WAAAnR,EAAAW,YAAAe,YAAA,WACAzuC,KAAAk+C,WAAAnR,EAAAW,YAAAgB,OAAA,QACA1uC,KAAAk+C,WAAAnR,EAAAW,YAAAiB,YAAA,eAKA3uC,KAAAk+C,WAAAnR,EAAAW,YAAAC,QAAA,cACA3tC,KAAAk+C,WAAAnR,EAAAW,YAAAE,KAAA,UACA5tC,KAAAk+C,WAAAnR,EAAAW,YAAAG,UAAA,cACA7tC,KAAAk+C,WAAAnR,EAAAW,YAAAI,QAAA,cACA9tC,KAAAk+C,WAAAnR,EAAAW,YAAAK,SAAA,cACA/tC,KAAAk+C,WAAAnR,EAAAW,YAAAM,QAAA,cACAhuC,KAAAk+C,WAAAnR,EAAAW,YAAAO,SAAA,cACAjuC,KAAAk+C,WAAAnR,EAAAW,YAAAQ,aAAA,cACAluC,KAAAk+C,WAAAnR,EAAAW,YAAAS,YAAA,cACAnuC,KAAAk+C,WAAAnR,EAAAW,YAAAU,YAAA,cACApuC,KAAAk+C,WAAAnR,EAAAW,YAAAW,YAAA,cACAruC,KAAAk+C,WAAAnR,EAAAW,YAAAY,YAAA,cACAtuC,KAAAk+C,WAAAnR,EAAAW,YAAAa,WAAA,cACAvuC,KAAAk+C,WAAAnR,EAAAW,YAAAc,KAAA,cACAxuC,KAAAk+C,WAAAnR,EAAAW,YAAAe,YAAA,cACAzuC,KAAAk+C,WAAAnR,EAAAW,YAAAgB,OAAA,cACA1uC,KAAAk+C,WAAAnR,EAAAW,YAAAiB,YAAA,mBAKA8S,cAAA,GAAAC,aAAA,GAAAG,cAAA,IAAAyR,oBAAA,GAAAC,4BAAA,KAAAC,IAAA,SAAA9yD,EAAAjB,EAAAD,GASA,QAAAg5C,GAAA50C,EAAAC,GAOA7D,KAAAoL,OAAAy0B,SAAAC,cAAA,UAOA9/B,KAAA+3B,QAAA/3B,KAAAoL,OAAAC,WAAA,MAEArL,KAAAoL,OAAAxH,MAAAA,EACA5D,KAAAoL,OAAAvH,OAAAA,EAGA20C,EAAA31C,UAAAmH,YAAAwuC,EACA/4C,EAAAD,QAAAg5C,EAEAjpC,OAAAwhC,iBAAAyH,EAAA31C,WAOAe,OACAoM,IAAA,WAEA,MAAAhQ,MAAAoL,OAAAxH,OAEAsM,IAAA,SAAA8O,GAEAhf,KAAAoL,OAAAxH,MAAAob,IASAnb,QACAmM,IAAA,WAEA,MAAAhQ,MAAAoL,OAAAvH,QAEAqM,IAAA,SAAA8O,GAEAhf,KAAAoL,OAAAvH,OAAAmb,MAUAw5B,EAAA31C,UAAAkC,MAAA,WAEA/E,KAAA+3B,QAAA2e,aAAA,EAAA,EAAA,EAAA,EAAA,EAAA,GACA12C,KAAA+3B,QAAAi7B,UAAA,EAAA,EAAAhzD,KAAAoL,OAAAxH,MAAA5D,KAAAoL,OAAAvH,SASA20C,EAAA31C,UAAAwC,OAAA,SAAAzB,EAAAC,GAEA7D,KAAAoL,OAAAxH,MAAAA,EACA5D,KAAAoL,OAAAvH,OAAAA,GAOA20C,EAAA31C,UAAA0C,QAAA,WAEAvF,KAAA+3B,QAAA,KACA/3B,KAAAoL,OAAA,WAGAqoD,IAAA,SAAA/yD,EAAAjB,EAAAD,GACA,GAAAutC,GAAArsC,EAAA,kBAQA+3C,IACAh5C,GAAAD,QAAAi5C,EAQAA,EAAAqF,eAAA,SAAAE,EAAAjmB,GAEA,GAAA4b,GAAAqK,EAAArK,UAEAqK,GAAAj0C,QAEA/J,KAAA0zD,mBAAA1V,GACAA,EAAAj0C,OAAA,EAGA,KAAA,GAAApJ,GAAA,EAAAA,EAAAq9C,EAAApG,aAAA52C,OAAAL,IACA,CACA,GAAA2B,GAAA07C,EAAApG,aAAAj3C,GACAs4C,EAAA32C,EAAA22C,MAEA6D,EAAAx6C,EAAAi9C,UACA5H,EAAAr1C,EAAAg9C,SAIA,IAFAvnB,EAAA2f,UAAAp1C,EAAAo1C,UAEAp1C,EAAAD,OAAA0qC,EAAAkD,OAAAC,KACA,CACAnY,EAAA47B,WAEA,IAAAza,GAAAD,EAAAC,MAEAnhB,GAAAuhB,OAAAJ,EAAA,GAAAA,EAAA,GAEA,KAAA,GAAAxvB,GAAA,EAAAA,EAAAwvB,EAAAl4C,OAAA,EAAA0oB,IAEAqO,EAAAwhB,OAAAL,EAAA,EAAAxvB,GAAAwvB,EAAA,EAAAxvB,EAAA,GAGAuvB,GAAAG,QAEArhB,EAAAwhB,OAAAL,EAAA,GAAAA,EAAA,IAIAA,EAAA,KAAAA,EAAAA,EAAAl4C,OAAA,IAAAk4C,EAAA,KAAAA,EAAAA,EAAAl4C,OAAA,IAEA+2B,EAAA67B,YAGAtxD,EAAAy6C,OAEAhlB,EAAAo1B,YAAA7qD,EAAAm1C,UAAA9D,EACA5b,EAAAg7B,UAAA,KAAA,SAAA,EAAAjW,GAAAriC,SAAA,KAAAsK,OAAA,IACAgT,EAAAglB,QAEAz6C,EAAAo1C,YAEA3f,EAAAo1B,YAAA7qD,EAAA02C,UAAArF,EACA5b,EAAA87B,YAAA,KAAA,SAAA,EAAAlc,GAAAl9B,SAAA,KAAAsK,OAAA,IACAgT,EAAA+7B,cAGA,IAAAxxD,EAAAD,OAAA0qC,EAAAkD,OAAAE,MAGA7tC,EAAAw6C,WAAA,IAAAx6C,EAAAw6C,aAEA/kB,EAAAo1B,YAAA7qD,EAAAm1C,UAAA9D,EACA5b,EAAAg7B,UAAA,KAAA,SAAA,EAAAjW,GAAAriC,SAAA,KAAAsK,OAAA,IACAgT,EAAAk7B,SAAAha,EAAAtkC,EAAAskC,EAAAnhC,EAAAmhC,EAAAr1C,MAAAq1C,EAAAp1C,SAGAvB,EAAAo1C,YAEA3f,EAAAo1B,YAAA7qD,EAAA02C,UAAArF,EACA5b,EAAA87B,YAAA,KAAA,SAAA,EAAAlc,GAAAl9B,SAAA,KAAAsK,OAAA,IACAgT,EAAAg8B,WAAA9a,EAAAtkC,EAAAskC,EAAAnhC,EAAAmhC,EAAAr1C,MAAAq1C,EAAAp1C,aAGA,IAAAvB,EAAAD,OAAA0qC,EAAAkD,OAAAG,KAGArY,EAAA47B,YACA57B,EAAA8jB,IAAA5C,EAAAtkC,EAAAskC,EAAAnhC,EAAAmhC,EAAA6B,OAAA,EAAA,EAAAtlC,KAAA03B,IACAnV,EAAA67B,YAEAtxD,EAAAy6C,OAEAhlB,EAAAo1B,YAAA7qD,EAAAm1C,UAAA9D,EACA5b,EAAAg7B,UAAA,KAAA,SAAA,EAAAjW,GAAAriC,SAAA,KAAAsK,OAAA,IACAgT,EAAAglB,QAEAz6C,EAAAo1C,YAEA3f,EAAAo1B,YAAA7qD,EAAA02C,UAAArF,EACA5b,EAAA87B,YAAA,KAAA,SAAA,EAAAlc,GAAAl9B,SAAA,KAAAsK,OAAA,IACAgT,EAAA+7B,cAGA,IAAAxxD,EAAAD,OAAA0qC,EAAAkD,OAAAI,KACA,CAGA,GAAA52B,GAAA,EAAAw/B,EAAAr1C,MACAwtB,EAAA,EAAA6nB,EAAAp1C,OAEA8Q,EAAAskC,EAAAtkC,EAAA8E,EAAA,EACA3B,EAAAmhC,EAAAnhC,EAAAsZ,EAAA,CAEA2G,GAAA47B,WAEA,IAAAK,GAAA,SACAC,EAAAx6C,EAAA,EAAAu6C,EACAE,EAAA9iC,EAAA,EAAA4iC,EACAG,EAAAx/C,EAAA8E,EACA26C,EAAAt8C,EAAAsZ,EACAijC,EAAA1/C,EAAA8E,EAAA,EACA66C,EAAAx8C,EAAAsZ,EAAA,CAEA2G,GAAAuhB,OAAA3kC,EAAA2/C,GACAv8B,EAAAkiB,cAAAtlC,EAAA2/C,EAAAJ,EAAAG,EAAAJ,EAAAn8C,EAAAu8C,EAAAv8C,GACAigB,EAAAkiB,cAAAoa,EAAAJ,EAAAn8C,EAAAq8C,EAAAG,EAAAJ,EAAAC,EAAAG,GACAv8B,EAAAkiB,cAAAka,EAAAG,EAAAJ,EAAAG,EAAAJ,EAAAG,EAAAC,EAAAD,GACAr8B,EAAAkiB,cAAAoa,EAAAJ,EAAAG,EAAAz/C,EAAA2/C,EAAAJ,EAAAv/C,EAAA2/C,GAEAv8B,EAAA67B,YAEAtxD,EAAAy6C,OAEAhlB,EAAAo1B,YAAA7qD,EAAAm1C,UAAA9D,EACA5b,EAAAg7B,UAAA,KAAA,SAAA,EAAAjW,GAAAriC,SAAA,KAAAsK,OAAA,IACAgT,EAAAglB,QAEAz6C,EAAAo1C,YAEA3f,EAAAo1B,YAAA7qD,EAAA02C,UAAArF,EACA5b,EAAA87B,YAAA,KAAA,SAAA,EAAAlc,GAAAl9B,SAAA,KAAAsK,OAAA,IACAgT,EAAA+7B,cAGA,IAAAxxD,EAAAD,OAAA0qC,EAAAkD,OAAAK,KACA,CACA,GAAAikB,GAAAtb,EAAAtkC,EACA6/C,EAAAvb,EAAAnhC,EACAlU,EAAAq1C,EAAAr1C,MACAC,EAAAo1C,EAAAp1C,OACAi3C,EAAA7B,EAAA6B,OAEA2Z,EAAAj/C,KAAAgE,IAAA5V,EAAAC,GAAA,EAAA,CACAi3C,GAAAA,EAAA2Z,EAAAA,EAAA3Z,EAEA/iB,EAAA47B,YACA57B,EAAAuhB,OAAAib,EAAAC,EAAA1Z,GACA/iB,EAAAwhB,OAAAgb,EAAAC,EAAA3wD,EAAAi3C,GACA/iB,EAAAyhB,iBAAA+a,EAAAC,EAAA3wD,EAAA0wD,EAAAzZ,EAAA0Z,EAAA3wD,GACAk0B,EAAAwhB,OAAAgb,EAAA3wD,EAAAk3C,EAAA0Z,EAAA3wD,GACAk0B,EAAAyhB,iBAAA+a,EAAA3wD,EAAA4wD,EAAA3wD,EAAA0wD,EAAA3wD,EAAA4wD,EAAA3wD,EAAAi3C,GACA/iB,EAAAwhB,OAAAgb,EAAA3wD,EAAA4wD,EAAA1Z,GACA/iB,EAAAyhB,iBAAA+a,EAAA3wD,EAAA4wD,EAAAD,EAAA3wD,EAAAk3C,EAAA0Z,GACAz8B,EAAAwhB,OAAAgb,EAAAzZ,EAAA0Z,GACAz8B,EAAAyhB,iBAAA+a,EAAAC,EAAAD,EAAAC,EAAA1Z,GACA/iB,EAAA67B,aAEAtxD,EAAAw6C,WAAA,IAAAx6C,EAAAw6C,aAEA/kB,EAAAo1B,YAAA7qD,EAAAm1C,UAAA9D,EACA5b,EAAAg7B,UAAA,KAAA,SAAA,EAAAjW,GAAAriC,SAAA,KAAAsK,OAAA,IACAgT,EAAAglB,QAGAz6C,EAAAo1C,YAEA3f,EAAAo1B,YAAA7qD,EAAA02C,UAAArF,EACA5b,EAAA87B,YAAA,KAAA,SAAA,EAAAlc,GAAAl9B,SAAA,KAAAsK,OAAA,IACAgT,EAAA+7B,aAaArb,EAAAic,mBAAA,SAAA1W,EAAAjmB,GAEA,GAAA3iB,GAAA4oC,EAAApG,aAAA52C,MAEA,IAAA,IAAAoU,EAAA,CAKA2iB,EAAA47B,WAEA,KAAA,GAAAhzD,GAAA,EAAAyU,EAAAzU,EAAAA,IACA,CACA,GAAA2B,GAAA07C,EAAApG,aAAAj3C,GACAs4C,EAAA32C,EAAA22C,KAEA,IAAA32C,EAAAD,OAAA0qC,EAAAkD,OAAAC,KACA,CAEA,GAAAgJ,GAAAD,EAAAC,MAEAnhB,GAAAuhB,OAAAJ,EAAA,GAAAA,EAAA,GAEA,KAAA,GAAAxvB,GAAA,EAAAA,EAAAwvB,EAAAl4C,OAAA,EAAA0oB,IAEAqO,EAAAwhB,OAAAL,EAAA,EAAAxvB,GAAAwvB,EAAA,EAAAxvB,EAAA,GAIAwvB,GAAA,KAAAA,EAAAA,EAAAl4C,OAAA,IAAAk4C,EAAA,KAAAA,EAAAA,EAAAl4C,OAAA,IAEA+2B,EAAA67B,gBAIA,IAAAtxD,EAAAD,OAAA0qC,EAAAkD,OAAAE,KAEApY,EAAAyS,KAAAyO,EAAAtkC,EAAAskC,EAAAnhC,EAAAmhC,EAAAr1C,MAAAq1C,EAAAp1C,QACAk0B,EAAA67B,gBAEA,IAAAtxD,EAAAD,OAAA0qC,EAAAkD,OAAAG,KAGArY,EAAA8jB,IAAA5C,EAAAtkC,EAAAskC,EAAAnhC,EAAAmhC,EAAA6B,OAAA,EAAA,EAAAtlC,KAAA03B,IACAnV,EAAA67B,gBAEA,IAAAtxD,EAAAD,OAAA0qC,EAAAkD,OAAAI,KACA,CAIA,GAAA52B,GAAA,EAAAw/B,EAAAr1C,MACAwtB,EAAA,EAAA6nB,EAAAp1C,OAEA8Q,EAAAskC,EAAAtkC,EAAA8E,EAAA,EACA3B,EAAAmhC,EAAAnhC,EAAAsZ,EAAA,EAEA4iC,EAAA,SACAC,EAAAx6C,EAAA,EAAAu6C,EACAE,EAAA9iC,EAAA,EAAA4iC,EACAG,EAAAx/C,EAAA8E,EACA26C,EAAAt8C,EAAAsZ,EACAijC,EAAA1/C,EAAA8E,EAAA,EACA66C,EAAAx8C,EAAAsZ,EAAA,CAEA2G,GAAAuhB,OAAA3kC,EAAA2/C,GACAv8B,EAAAkiB,cAAAtlC,EAAA2/C,EAAAJ,EAAAG,EAAAJ,EAAAn8C,EAAAu8C,EAAAv8C,GACAigB,EAAAkiB,cAAAoa,EAAAJ,EAAAn8C,EAAAq8C,EAAAG,EAAAJ,EAAAC,EAAAG,GACAv8B,EAAAkiB,cAAAka,EAAAG,EAAAJ,EAAAG,EAAAJ,EAAAG,EAAAC,EAAAD,GACAr8B,EAAAkiB,cAAAoa,EAAAJ,EAAAG,EAAAz/C,EAAA2/C,EAAAJ,EAAAv/C,EAAA2/C,GACAv8B,EAAA67B,gBAEA,IAAAtxD,EAAAD,OAAA0qC,EAAAkD,OAAAK,KACA,CAEA,GAAAikB,GAAAtb,EAAAtkC,EACA6/C,EAAAvb,EAAAnhC,EACAlU,EAAAq1C,EAAAr1C,MACAC,EAAAo1C,EAAAp1C,OACAi3C,EAAA7B,EAAA6B,OAEA2Z,EAAAj/C,KAAAgE,IAAA5V,EAAAC,GAAA,EAAA,CACAi3C,GAAAA,EAAA2Z,EAAAA,EAAA3Z,EAEA/iB,EAAAuhB,OAAAib,EAAAC,EAAA1Z,GACA/iB,EAAAwhB,OAAAgb,EAAAC,EAAA3wD,EAAAi3C,GACA/iB,EAAAyhB,iBAAA+a,EAAAC,EAAA3wD,EAAA0wD,EAAAzZ,EAAA0Z,EAAA3wD,GACAk0B,EAAAwhB,OAAAgb,EAAA3wD,EAAAk3C,EAAA0Z,EAAA3wD,GACAk0B,EAAAyhB,iBAAA+a,EAAA3wD,EAAA4wD,EAAA3wD,EAAA0wD,EAAA3wD,EAAA4wD,EAAA3wD,EAAAi3C,GACA/iB,EAAAwhB,OAAAgb,EAAA3wD,EAAA4wD,EAAA1Z,GACA/iB,EAAAyhB,iBAAA+a,EAAA3wD,EAAA4wD,EAAAD,EAAA3wD,EAAAk3C,EAAA0Z,GACAz8B,EAAAwhB,OAAAgb,EAAAzZ,EAAA0Z,GACAz8B,EAAAyhB,iBAAA+a,EAAAC,EAAAD,EAAAC,EAAA1Z,GACA/iB,EAAA67B,gBAYAnb,EAAAib,mBAAA,SAAA1V,GAEA,GAAA,WAAAA,EAAAnG,MAAAmG,EAAAlG,YAAAkG,EAAAnG,KAAA,CAIAmG,EAAAlG,UAAAkG,EAAAnG,IAMA,KAAA,GAJA8c,IAAA3W,EAAAnG,MAAA,GAAA,KAAA,IACA+c,GAAA5W,EAAAnG,MAAA,EAAA,KAAA,IACAgd,GAAA,IAAA7W,EAAAnG,MAAA,IAEAl3C,EAAA,EAAAA,EAAAq9C,EAAApG,aAAA52C,OAAAL,IACA,CACA,GAAA2B,GAAA07C,EAAApG,aAAAj3C,GAEAm8C,EAAA,EAAAx6C,EAAAw6C,UACAnF,EAAA,EAAAr1C,EAAAq1C,SAyBAr1C,GAAAi9C,YAAAzC,GAAA,GAAA,KAAA,IAAA6X,EAAA,KAAA,MAAA7X,GAAA,EAAA,KAAA,IAAA8X,EAAA,KAAA,IAAA,IAAA9X,GAAA,IAAA+X,EAAA,IACAvyD,EAAAg9C,YAAA3H,GAAA,GAAA,KAAA,IAAAgd,EAAA,KAAA,MAAAhd,GAAA,EAAA,KAAA,IAAAid,EAAA,KAAA,IAAA,IAAAjd,GAAA,IAAAkd,EAAA,SAMAC,iBAAA,KAAAC,IAAA,SAAAr0D,EAAAjB,EAAAD,GASA,QAAA0yD,MARA,GAAAzZ,GAAA/3C,EAAA,mBAWAwxD,GAAArvD,UAAAmH,YAAAkoD,EACAzyD,EAAAD,QAAA0yD,EAQAA,EAAArvD,UAAAuxC,SAAA,SAAA4gB,EAAAnsB,GAGAA,EAAA9Q,QAAAk9B,MAEA,IAAAC,GAAAF,EAAAtgB,MACAj4B,EAAAu4C,EAAA9pB,eACAuE,EAAA5G,EAAA4G,UAEA5G,GAAA9Q,QAAA2e,aACAj6B,EAAAhc,EAAAgvC,EACAhzB,EAAAzX,EAAAyqC,EACAhzB,EAAA4X,EAAAob,EACAhzB,EAAA4uB,EAAAoE,EACAhzB,EAAA0uB,GAAAsE,EACAhzB,EAAA2uB,GAAAqE,GAKAulB,EAAA/wD,UAEAw0C,EAAAic,mBAAAM,EAAAnsB,EAAA9Q,SACA8Q,EAAA9Q,QAAAo9B,QAGAH,EAAArhB,WAAAuhB,GAQAhD,EAAArvD,UAAAyxC,QAAA,SAAAzL,GAEAA,EAAA9Q,QAAAq9B,WAGAlD,EAAArvD,UAAA0C,QAAA,eAEA8vD,mBAAA,KAAAC,IAAA,SAAA50D,EAAAjB,EAAAD,GACA,GAAAqrC,GAAAnqC,EAAA,kBAQA60D,IACA91D,GAAAD,QAAA+1D,EASAA,EAAAC,iBAAA,SAAAhF,EAAAzX,GAEA,GAAA90C,GAAAusD,EAAAvsD,OAEA80C,GAAAwc,EAAAE,WAAA1c,EAEA,IAAA2c,GAAA,KAAA,SAAA,EAAA3c,GAAAt+B,SAAA,KAAAsK,OAAA,GAIA,IAFA9gB,EAAA0xD,UAAA1xD,EAAA0xD,cAEA1xD,EAAA0xD,UAAAD,GAEA,MAAAzxD,GAAA0xD,UAAAD,EAIA,IAAAtqD,GAAAmqD,EAAAnqD,QAAAy0B,SAAAC,cAAA,SAKA,IAFAy1B,EAAAK,WAAA3xD,EAAA80C,EAAA3tC,GAEAmqD,EAAAM,mBACA,CAEA,GAAAC,GAAA,GAAAp2B,MACAo2B,GAAA1oD,IAAAhC,EAAA2qD,YAEA9xD,EAAA0xD,UAAAD,GAAAI,MAIA7xD,GAAA0xD,UAAAD,GAAAtqD,EAEAmqD,EAAAnqD,OAAA,IAGA,OAAAA,IAUAmqD,EAAAS,iBAAA,SAAA/xD,EAAA80C,EAAA3tC,GAEA,GAAA2sB,GAAA3sB,EAAAC,WAAA,MAEAokC,EAAAxrC,EAAA25C,YAAAnO,WAEAghB,EAAAxsD,EAAAwsD,KAAA7X,OACA6X,GAAA97C,GAAA86B,EACAghB,EAAA34C,GAAA23B,EACAghB,EAAA7sD,OAAA6rC,EACAghB,EAAA5sD,QAAA4rC,EAEArkC,EAAAxH,MAAA6sD,EAAA7sD,MACAwH,EAAAvH,OAAA4sD,EAAA5sD,OAEAk0B,EAAAg7B,UAAA,KAAA,SAAA,EAAAha,GAAAt+B,SAAA,KAAAsK,OAAA,IAEAgT,EAAAk7B,SAAA,EAAA,EAAAxC,EAAA7sD,MAAA6sD,EAAA5sD,QAEAk0B,EAAAomB,yBAAA,WAEApmB,EAAAw1B,UACAtpD,EAAA25C,YAAAp2C,OACAipD,EAAA97C,EACA87C,EAAA34C,EACA24C,EAAA7sD,MACA6sD,EAAA5sD,OACA,EACA,EACA4sD,EAAA7sD,MACA6sD,EAAA5sD,QAGAk0B,EAAAomB,yBAAA,mBAEApmB,EAAAw1B,UACAtpD,EAAA25C,YAAAp2C,OACAipD,EAAA97C,EACA87C,EAAA34C,EACA24C,EAAA7sD,MACA6sD,EAAA5sD,OACA,EACA,EACA4sD,EAAA7sD,MACA6sD,EAAA5sD,SAWA0xD,EAAAU,gBAAA,SAAAhyD,EAAA80C,EAAA3tC,GAEA,GAAA2sB,GAAA3sB,EAAAC,WAAA,MAEAokC,EAAAxrC,EAAA25C,YAAAnO,WAEAghB,EAAAxsD,EAAAwsD,KAAA7X,OACA6X,GAAA97C,GAAA86B,EACAghB,EAAA34C,GAAA23B,EACAghB,EAAA7sD,OAAA6rC,EACAghB,EAAA5sD,QAAA4rC,EAEArkC,EAAAxH,MAAA6sD,EAAA7sD,MACAwH,EAAAvH,OAAA4sD,EAAA5sD,OAEAk0B,EAAAomB,yBAAA,OACApmB,EAAAg7B,UAAA,KAAA,SAAA,EAAAha,GAAAt+B,SAAA,KAAAsK,OAAA,IACAgT,EAAAk7B,SAAA,EAAA,EAAAxC,EAAA7sD,MAAA6sD,EAAA5sD,QAEAk0B,EAAAomB,yBAAA,mBACApmB,EAAAw1B,UACAtpD,EAAA25C,YAAAp2C,OACAipD,EAAA97C,EACA87C,EAAA34C,EACA24C,EAAA7sD,MACA6sD,EAAA5sD,OACA,EACA,EACA4sD,EAAA7sD,MACA6sD,EAAA5sD,SAaA0xD,EAAAW,iBAAA,SAAAjyD,EAAA80C,EAAA3tC,GAEA,GAAA2sB,GAAA3sB,EAAAC,WAAA,MAEAokC,EAAAxrC,EAAA25C,YAAAnO,WAEAghB,EAAAxsD,EAAAwsD,KAAA7X,OACA6X,GAAA97C,GAAA86B,EACAghB,EAAA34C,GAAA23B,EACAghB,EAAA7sD,OAAA6rC,EACAghB,EAAA5sD,QAAA4rC,EAEArkC,EAAAxH,MAAA6sD,EAAA7sD,MACAwH,EAAAvH,OAAA4sD,EAAA5sD,OAEAk0B,EAAAomB,yBAAA,OACApmB,EAAAw1B,UACAtpD,EAAA25C,YAAAp2C,OACAipD,EAAA97C,EACA87C,EAAA34C,EACA24C,EAAA7sD,MACA6sD,EAAA5sD,OACA,EACA,EACA4sD,EAAA7sD,MACA6sD,EAAA5sD,OAUA,KAAA,GAPAsyD,GAAAtrB,EAAAoW,QAAAlI,GACA14C,EAAA81D,EAAA,GAAAv2D,EAAAu2D,EAAA,GAAAnxD,EAAAmxD,EAAA,GAEAC,EAAAr+B,EAAAs+B,aAAA,EAAA,EAAA5F,EAAA7sD,MAAA6sD,EAAA5sD,QAEAyyD,EAAAF,EAAA9zD,KAEA3B,EAAA,EAAAA,EAAA21D,EAAAt1D,OAAAL,GAAA,EAEA21D,EAAA31D,EAAA,IAAAN,EACAi2D,EAAA31D,EAAA,IAAAf,EACA02D,EAAA31D,EAAA,IAAAqE,CAGA+yB,GAAAw+B,aAAAH,EAAA,EAAA,IAQAb,EAAAE,WAAA,SAAA1c,GAEA,GAAAyd,GAAAjB,EAAAkB,0BAEAN,EAAAtrB,EAAAoW,QAAAlI,EAMA,OAJAod,GAAA,GAAA3gD,KAAAgE,IAAA,IAAA28C,EAAA,GAAAK,EAAAA,GACAL,EAAA,GAAA3gD,KAAAgE,IAAA,IAAA28C,EAAA,GAAAK,EAAAA,GACAL,EAAA,GAAA3gD,KAAAgE,IAAA,IAAA28C,EAAA,GAAAK,EAAAA,GAEA3rB,EAAA6rB,QAAAP,IAQAZ,EAAAkB,0BAAA,EAOAlB,EAAAM,oBAAA,EAOAN,EAAAoB,eAAA9rB,EAAAwoB,4BAMAkC,EAAAK,WAAAL,EAAAoB,eAAApB,EAAAS,iBAAAT,EAAAW,mBAEA/S,iBAAA,MAAAyT,IAAA,SAAAl2D,EAAAjB,EAAAD,GACA,GAAA+B,GAAAb,EAAA,gBAAAa,UACAspC,EAAAnqC,EAAA,eAUAm2D,EAAA,SAAAz0D,GAEApC,KAAAoC,GAAAA,EAGApC,KAAA82D,oBACA92D,KAAA+2D,cAIAF,GAAAh0D,UAAAwF,YAAA,SAAApE,KAMA4yD,EAAAh0D,UAAAm0D,WAAA,SAAA/yD,KAUA4yD,EAAAh0D,UAAAytD,cAAA,SAAArsD,GAIA,GAFAA,EAAAA,EAAA25C,aAAA35C,EAEAA,EAAAgzD,UAAA,CAMA,GAAA70D,GAAApC,KAAAoC,GACA80D,EAAAl3D,KAAA+2D,WAAA9yD,EAAAkzD,IAyBA,OAvBAD,KAEAA,EAAA,GAAA31D,GAAAa,GACA80D,EAAA7vD,kBAAA,EACApD,EAAAosD,YAAAjuD,EAAAkJ,IAAA4rD,EAIAjzD,EAAA+iB,GAAA,SAAAhnB,KAAAswD,cAAAtwD,MACAiE,EAAA+iB,GAAA,UAAAhnB,KAAAo3D,eAAAp3D,MAEAA,KAAA82D,iBAAAnsD,KAAA1G,IAGAizD,EAAAt0D,OAAAqB,EAAAuD,QAGA0vD,EAAAtxD,kBAIAsxD,EAAAhuD,sBAEAjF,EAAAosD,YAAAjuD,EAAAkJ,MAQAurD,EAAAh0D,UAAAu0D,eAAA,SAAAnzD,EAAAozD,GAIA,GAFApzD,EAAAA,EAAA25C,aAAA35C,EAEAA,EAAAgzD,WAKAhzD,EAAAosD,YAAArwD,KAAAoC,GAAAkJ,MAEArH,EAAAosD,YAAArwD,KAAAoC,GAAAkJ,IAAA/F,UACAtB,EAAAijB,IAAA,SAAAlnB,KAAAswD,cAAAtwD,MACAiE,EAAAijB,IAAA,UAAAlnB,KAAAo3D,eAAAp3D,YAGAiE,GAAAosD,YAAArwD,KAAAoC,GAAAkJ,KAEA+rD,GACA,CACA,GAAA12D,GAAAX,KAAA82D,iBAAA3qC,QAAAloB,EACA,MAAAtD,GACAkqC,EAAAC,YAAA9qC,KAAA82D,iBAAAn2D,EAAA,KAMAk2D,EAAAh0D,UAAAy0D,UAAA,WAGA,IAAA,GAAA32D,GAAA,EAAAA,EAAAX,KAAA82D,iBAAA91D,SAAAL,EACA,CACA,GAAAsD,GAAAjE,KAAA82D,iBAAAn2D,EACAsD,GAAAosD,YAAArwD,KAAAoC,GAAAkJ,WAEArH,GAAAosD,YAAArwD,KAAAoC,GAAAkJ,MAKAurD,EAAAh0D,UAAA0C,QAAA,WAGA,IAAA,GAAA5E,GAAA,EAAAA,EAAAX,KAAA82D,iBAAA91D,SAAAL,EACA,CACA,GAAAsD,GAAAjE,KAAA82D,iBAAAn2D,EACAX,MAAAo3D,eAAAnzD,GAAA,GACAA,EAAAijB,IAAA,SAAAlnB,KAAAswD,cAAAtwD,MACAiE,EAAAijB,IAAA,UAAAlnB,KAAAo3D,eAAAp3D,MAGAA,KAAA82D,iBAAA,MAGAr3D,EAAAD,QAAAq3D,IAGAhV,cAAA,IAAA/a,eAAA,IAAAywB,IAAA,SAAA72D,EAAAjB,EAAAD,GAyCA,QAAA6sC,GAAAzoC,EAAAC,EAAAgH,GAEAA,EAAAA,MAEA2mD,EAAAzwD,KAAAf,KAAA,QAAA4D,EAAAC,EAAAgH,GAQA7K,KAAAqC,KAAA0qC,EAAAO,cAAAE,MAEAxtC,KAAAw3D,kBAAAx3D,KAAAw3D,kBAAAx0D,KAAAhD,MACAA,KAAAy3D,sBAAAz3D,KAAAy3D,sBAAAz0D,KAAAhD,MAEAA,KAAA4pC,KAAAjK,iBAAA,mBAAA3/B,KAAAw3D,mBAAA,GACAx3D,KAAA4pC,KAAAjK,iBAAA,uBAAA3/B,KAAAy3D,uBAAA,GAQAz3D,KAAA03D,iBACAhjB,MAAA10C,KAAA6vC,YACAH,UAAA7kC,EAAA6kC,UACAioB,mBAAA33D,KAAA6vC,aAAA,kBAAA7vC,KAAA6vC,YACA7rC,SAAA,EACA+rC,sBAAAllC,EAAAklC,uBAGA/vC,KAAA4xD,qBAAA,GAAA5xD,KAAA6vC,YAAA,EAAA,EAOA7vC,KAAAkvD,cAAA,GAAAxI,GAAA1mD,MAOAA,KAAAm0C,YAAA,GAAAyjB,GAAA53D,MAOAA,KAAA63D,eAAA,GAAAC,GAAA93D,MAOAA,KAAAi0C,cAAA,GAAA8jB,GAAA/3D,MAOAA,KAAA2gD,iBAAA,GAAAqX,GAAAh4D,MAQAA,KAAA+zC,gBAAA,GAAA2L,GAAA1/C,MAEAA,KAAAyyD,cAGAzyD,KAAAoC,GAAAlB,EAAAlB,KAAA4pC,KAAA5pC,KAAA03D,iBAEA13D,KAAAi4D,eAGAj4D,KAAAk+C,WAAAga,EAAA91D,IACApC,KAAAm4D,UAAAC,EAAAh2D,IAEApC,KAAAq4D,cAAA,KAOAr4D,KAAAs4D,oBAAA,KACAt4D,KAAAu4D,uBAAA,KACAv4D,KAAAw4D,eAAA,KA3IA,GAAAhH,GAAA9wD,EAAA,qBACAgmD,EAAAhmD,EAAA,4BACAk3D,EAAAl3D,EAAA,0BACAo3D,EAAAp3D,EAAA,6BACAq3D,EAAAr3D,EAAA,4BACAs3D,EAAAt3D,EAAA,+BACAimD,EAAAjmD,EAAA,wBACAg/C,EAAAh/C,EAAA,0BAEAm2D,GADAn2D,EAAA,wBACAA,EAAA,qBACAQ,EAAAR,EAAA,gBAAAQ,cACAg3D,EAAAx3D,EAAA,oCACA03D,EAAA13D,EAAA,mCACAmqC,EAAAnqC,EAAA,eACAqsC,EAAArsC,EAAA,cAiIA2rC,GAAAxpC,UAAA0M,OAAA/L,OAAAguD,EAAA3uD,WACAwpC,EAAAxpC,UAAAmH,YAAAqiC,EACA5sC,EAAAD,QAAA6sC,EACAxB,EAAA8nB,aAAAC,MAAAvmB,GAOAA,EAAAxpC,UAAAo1D,aAAA,WAEA,GAAA71D,GAAApC,KAAAoC,EAGApC,MAAAy4D,eAAA,GAAA5B,GAAAz0D,GAGAA,EAAAs2D,QAAAt2D,EAAAu2D,YACAv2D,EAAAs2D,QAAAt2D,EAAAw2D,WACAx2D,EAAAy2D,OAAAz2D,EAAA02D,OAGA94D,KAAA+4D,iBAAA,GAAApS,GAAAvkD,EAAApC,KAAA4D,MAAA5D,KAAA6D,OAAA,KAAA7D,KAAAyvC,YAAA,GACAzvC,KAAA+4D,iBAAA9zD,WAAAjF,KAAA4xD,qBAEA5xD,KAAAg5D,iBAAAh5D,KAAA+4D,kBAEA/4D,KAAAonB,KAAA,UAAAhlB,GAGApC,KAAAqF,OAAArF,KAAA4D,MAAA5D,KAAA6D,SAQAwoC,EAAAxpC,UAAA6vC,OAAA,SAAAzI,GAKA,GAHAjqC,KAAAonB,KAAA,cAGApnB,KAAAoC,GAAA62D,gBAAA,CAKAj5D,KAAAuqC,oBAAAN,CAEA,IAAA4oB,GAAA5oB,EAAAqH,MACArH,GAAAqH,OAAAtxC,KAAAu1C,yBAEAtL,EAAA0I,kBACA1I,EAAAqH,OAAAuhB,EAEA7yD,KAAAkzD,oBAAAjpB,EAAAjqC,KAAA+4D,iBAAA/4D,KAAA8vC,mBAEA9vC,KAAAonB,KAAA,gBAUAilB,EAAAxpC,UAAAqwD,oBAAA,SAAAjpB,EAAAivB,EAAAn0D,GAEA/E,KAAAg5D,iBAAAE,GAEAn0D,GAEAm0D,EAAAn0D,QAIA/E,KAAAi0C,cAAAklB,eAAAD,EAAAE,aAGAnvB,EAAAyJ,YAAA1zC,MAGAA,KAAA+zC,gBAAAC,SAQA3H,EAAAxpC,UAAAk7C,kBAAA,SAAAsb,GAEAr5D,KAAA+zC,kBAAAslB,IAKAr5D,KAAA+zC,gBAAA/f,OACAh0B,KAAA+zC,gBAAAslB,EACAr5D,KAAA+zC,gBAAAvpC,UASA6hC,EAAAxpC,UAAAwC,OAAA,SAAAzB,EAAAC,GAEA2tD,EAAA3uD,UAAAwC,OAAAtE,KAAAf,KAAA4D,EAAAC,GAEA7D,KAAAi0C,cAAA5uC,OAAAzB,EAAAC,GACA7D,KAAA+4D,iBAAA1zD,OAAAzB,EAAAC,GAEA7D,KAAA8vD,sBAAA9vD,KAAAk5D,cAEAl5D,KAAA+4D,iBAAA7uD,YASAmiC,EAAAxpC,UAAAm2D,iBAAA,SAAAE,GAEAA,IAAAl5D,KAAAs4D,sBAEAt4D,KAAAs4D,oBAAAY,EAEAl5D,KAAAq4D,gBAEAr4D,KAAAq4D,cAAA1xD,SAAAopD,iBAAAmJ,EAAAnJ,iBAAA/O,SAAA,IAGAkY,EAAAhvD,WAEAlK,KAAA63D,eAAAyB,aAAAJ,EAAAK,oBAIAltB,EAAAxpC,UAAAi+C,WAAA,SAAAzzC,GAGArN,KAAAq4D,gBAAAhrD,IAEArN,KAAAq4D,cAAAhrD,EACAA,EAAArK,OAGAqK,EAAA1G,SAAAopD,iBAAA/vD,KAAAs4D,oBAAAvI,iBAAA/O,SAAA,KAKA3U,EAAAxpC,UAAAwF,YAAA,SAAApE,EAAAgE,GAEA,GAAA7F,GAAApC,KAAAoC,EAGA6F,GAAAA,GAAA,EAEAjI,KAAAu4D,yBAAAtwD,IAEAjI,KAAAu4D,uBAAAtwD,EACA7F,EAAA+F,cAAA/F,EAAAgG,SAAAH,IAIAjI,KAAAw4D,eAAAv0D,EAEAA,EAAAosD,YAAAjuD,EAAAkJ,IAQArH,EAAAosD,YAAAjuD,EAAAkJ,IAAAtI,OALAhD,KAAAy4D,eAAAnI,cAAArsD,IAeAooC,EAAAxpC,UAAA20D,kBAAA,SAAAr/B,GAEAA,EAAAqhC,kBAQAntB,EAAAxpC,UAAA40D,sBAAA,WAEAz3D,KAAAi4D,eACAj4D,KAAAy4D,eAAAnB,aAQAjrB,EAAAxpC,UAAA0C,QAAA,SAAAwsD,GAEA/xD,KAAAmzD,iBAGAnzD,KAAA4pC,KAAAhL,oBAAA,mBAAA5+B,KAAAw3D,mBACAx3D,KAAA4pC,KAAAhL,oBAAA,uBAAA5+B,KAAAy3D,uBAEAz3D,KAAAy4D,eAAAgB,aAGAjI,EAAA3uD,UAAA0C,QAAAxE,KAAAf,KAAA+xD,GAEA/xD,KAAAm3D,IAAA,EAGAn3D,KAAAkvD,cAAA3pD,UACAvF,KAAAm0C,YAAA5uC,UACAvF,KAAA63D,eAAAtyD,UACAvF,KAAAi0C,cAAA1uC,UACAvF,KAAA2gD,iBAAAp7C,UAEAvF,KAAAkvD,cAAA,KACAlvD,KAAAm0C,YAAA,KACAn0C,KAAAi0C,cAAA,KACAj0C,KAAA2gD,iBAAA,KACA3gD,KAAA+zC,gBAAA,KAEA/zC,KAAAw3D,kBAAA,KACAx3D,KAAAy3D,sBAAA,KAEAz3D,KAAA03D,gBAAA,KAEA13D,KAAAoC,GAAAwE,WAAA,MACA5G,KAAAoC,GAAA,QAIAq/C,cAAA,GAAAI,cAAA,IAAAyR,oBAAA,GAAAoG,mBAAA,GAAAC,uBAAA,GAAAC,8BAAA,GAAAC,2BAAA,GAAAC,yBAAA,GAAAC,2BAAA,GAAAC,4BAAA,GAAAC,yBAAA,GAAAC,uBAAA,GAAAC,mCAAA,GAAAC,kCAAA,GAAAtzB,eAAA,IAAAuzB,IAAA,SAAA35D,EAAAjB,EAAAD,GAaA,QAAAonD,GAAAtgD,EAAAC,EAAAI,GAQA3G,KAAAs6D,WAMAt6D,KAAA8+C,QAAA,EAMA9+C,KAAA2G,SAAAA,MAQA3G,KAAAsG,UAAAA,GAAAi0D,EAAAC,iBAOAx6D,KAAAuG,YAAAA,GAAAg0D,EAAAE,mBA/CA,GAAAF,GAAA75D,EAAA,2BAuDAkmD,GAAA/jD,UAAAmH,YAAA48C,EACAnnD,EAAAD,QAAAonD,EAOAA,EAAA/jD,UAAA63D,UAAA,SAAA7xB,GAEA,GAAAzmC,GAAAymC,EAAAzmC,GAEAiL,EAAArN,KAAAs6D,QAAAl4D,EAAAkJ,GAcA,OAZA+B,KAEAA,EAAA,GAAAktD,GAAA1xB,EAAAqmB,cACAlvD,KAAAsG,UACAtG,KAAAuG,YACAvG,KAAA2G,SACA3G,KAAAyG,YAGAzG,KAAAs6D,QAAAl4D,EAAAkJ,IAAA+B,GAGAA,GAWAu5C,EAAA/jD,UAAA83D,YAAA,SAAA9xB,EAAAtf,EAAArB,EAAAnjB,GAEA,GAAAsI,GAAArN,KAAA06D,UAAA7xB,EAEAA,GAAAoL,cAAA0mB,YAAAttD,EAAAkc,EAAArB,EAAAnjB,IAOA6hD,EAAA/jD,UAAA+3D,YAAA,SAAA9qD,GAEA,IAAA,GAAAnP,GAAA,EAAA+oB,EAAA1pB,KAAAs6D,QAAAt5D,OAAA0oB,EAAA/oB,IAAAA,EAEAX,KAAAs6D,QAAA35D,GAAAi6D,YAAA9qD,MAIA+qD,2BAAA,KAAAC,IAAA,SAAAp6D,EAAAjB,EAAAD,GAoBA,QAAAqnD,KAEAD,EAAA7lD,KAAAf,KAEA,8zCAEA,66IAGAyvC,YAAAptC,KAAA,KAAA8M,OAAAwF,EAAA,EAAAmD,EAAA,MA5BA,GAAA8uC,GAAAlmD,EAAA,mBAkCAmmD,GAAAhkD,UAAA0M,OAAA/L,OAAAojD,EAAA/jD,WACAgkD,EAAAhkD,UAAAmH,YAAA68C,EACApnD,EAAAD,QAAAqnD,EASAA,EAAAhkD,UAAA83D,YAAA,SAAA9xB,EAAAtf,EAAArB,GAEA,GAAA+rB,GAAApL,EAAAoL,cAEA5mC,EAAArN,KAAA06D,UAAA7xB,EAEAoL,GAAA0mB,YAAAttD,EAAAkc,EAAArB,MAGA6yC,mBAAA,KAAAC,IAAA,SAAAt6D,EAAAjB,EAAAD,GAeA,QAAAsnD,GAAA0J,GAEA,GAAAyK,GAAA,GAAAtqB,GAAAG,MAEA8V,GAAA7lD,KAAAf,KACA,mfACA,wkBAEAi2C,MAAA5zC,KAAA,YAAA8M,MAAAqhD,EAAAJ,UACA1b,OAAAryC,KAAA,IAAA8M,MAAA,GACA+rD,aAAA74D,KAAA,OAAA8M,MAAA8rD,EAAAja,SAAA,MAIAhhD,KAAAm7D,WAAA3K,EACAxwD,KAAAi7D,WAAAA,EA7BA,GAAArU,GAAAlmD,EAAA,oBACAiwC,EAAAjwC,EAAA,gBA+BAomD,GAAAjkD,UAAA0M,OAAA/L,OAAAojD,EAAA/jD,WACAikD,EAAAjkD,UAAAmH,YAAA88C,EACArnD,EAAAD,QAAAsnD,EASAA,EAAAjkD,UAAA83D,YAAA,SAAA9xB,EAAAtf,EAAArB,GAEA,GAAA+rB,GAAApL,EAAAoL,aAEAj0C,MAAA2G,SAAAsvC,KAAA9mC,MAAAnP,KAAAm7D,WAAA/K,SAEAnc,EAAAmnB,sBAAA7xC,EAAA6jC,MAAAptD,KAAAm7D,WAAAn7D,KAAAi7D,YAEAj7D,KAAA2G,SAAAu0D,YAAA/rD,MAAAnP,KAAAi7D,WAAAja,SAAA,GACAhhD,KAAA2G,SAAA+tC,MAAAvlC,MAAAnP,KAAAm7D,WAAAxnB,UAEA,IAAAtmC,GAAArN,KAAA06D,UAAA7xB,EAEAoL,GAAA0mB,YAAAttD,EAAAkc,EAAArB,IAIA3Y,OAAAwhC,iBAAA+V,EAAAjkD,WAOAkZ,KACA/L,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAsvC,KAAA9mC,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAsvC,KAAA9mC,MAAAA,IAUArM,QACAkN,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA7D,OAAAqM,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA7D,OAAAqM,MAAAA,QAKA21C,gBAAA,GAAAiW,mBAAA,KAAAM,IAAA,SAAA36D,EAAAjB,EAAAD,GASA,QAAAw4D,GAAAnvB,GAEA4d,EAAA1lD,KAAAf,KAAA6oC,GAKA7oC,KAAAs7D,iBAAA,MAfA,GAAA7U,GAAA/lD,EAAA,iBAkBAs3D,GAAAn1D,UAAA0M,OAAA/L,OAAAijD,EAAA5jD,WACAm1D,EAAAn1D,UAAAmH,YAAAguD,EACAv4D,EAAAD,QAAAw4D,EAQAA,EAAAn1D,UAAA+9C,aAAA,SAAA7I,GAEA,GAAA/3C,KAAAs7D,mBAAAvjB,EAEA,OAAA,CAGA/3C,MAAAs7D,iBAAAvjB,CAEA,IAAA8I,GAAA7gD,KAAA6oC,SAAAqV,WAAAl+C,KAAAs7D,iBAGA,OAFAt7D,MAAA6oC,SAAAzmC,GAAAm5D,UAAA1a,EAAA,GAAAA,EAAA,KAEA,KAGA2a,iBAAA,KAAAC,IAAA,SAAA/6D,EAAAjB,EAAAD,GAaA,QAAAu4D,GAAAlvB,GAEA4d,EAAA1lD,KAAAf,KAAA6oC,GAKA7oC,KAAAo5D,eAEAp5D,KAAAo5D,YAAAzuD,MACAuuD,aAAArwB,EAAAinB,oBACAnzC,UACA61B,OAAA,OAMAxyC,KAAA07D,eAUA17D,KAAA27D,YAAA,GAAAhrB,GAAAqC,UAAA,EAAA,EAAAnK,EAAAjlC,MAAAilC,EAAAhlC,QAOA7D,KAAA47D,aAAA,KA/CA,GAAAnV,GAAA/lD,EAAA,kBACAimD,EAAAjmD,EAAA,yBACAqsC,EAAArsC,EAAA,kBACAm7D,EAAAn7D,EAAA,iBACAiwC,EAAAjwC,EAAA,gBA8CAq3D,GAAAl1D,UAAA0M,OAAA/L,OAAAijD,EAAA5jD,WACAk1D,EAAAl1D,UAAAmH,YAAA+tD,EACAt4D,EAAAD,QAAAu4D,EAOAA,EAAAl1D,UAAA09C,gBAAA,WAEAvgD,KAAA07D,YAAA16D,OAAA,CAEA,IAAAoB,GAAApC,KAAA6oC,SAAAzmC,EACApC,MAAA87D,KAAA,GAAAD,GAAAz5D,IAOA21D,EAAAl1D,UAAAs2D,eAAA,SAAAC,GAEAp5D,KAAAo5D,YAAAA,GASArB,EAAAl1D,UAAAqxC,WAAA,SAAA9a,EAAA8c,GAIA,GAAA1D,GAAApZ,EAAAgc,WAAAhc,EAAAgc,WAAAwD,QAAAxf,EAAAkS,WAKAkH,GAAA79B,EAAA,EAAA69B,EAAA79B,EACA69B,EAAA16B,EAAA,EAAA06B,EAAA16B,EACA06B,EAAA5uC,MAAA,EAAA4uC,EAAA5uC,MACA4uC,EAAA3uC,OAAA,EAAA2uC,EAAA3uC,MAIA,IAAAi7C,GAAA,EAAA5I,EAAA,GAAA4I,OAOA,IANAtM,EAAA79B,GAAAmqC,EACAtM,EAAA16B,GAAAgnC,EACAtM,EAAA5uC,OAAA,EAAAk7C,EACAtM,EAAA3uC,QAAA,EAAAi7C,EAGA9+C,KAAA6oC,SAAAinB,oBAAArzC,UACA,CAGA,GAAAA,GAAAzc,KAAA6oC,SAAAinB,oBAAArzC,SAEA+1B,GAAA79B,GAAA8H,EAAA0uB,GACAqH,EAAA16B,GAAA2E,EAAA2uB,GAEAprC,KAAA+7D,cAAAvpB,GAEAA,EAAA79B,GAAA8H,EAAA0uB,GACAqH,EAAA16B,GAAA2E,EAAA2uB,OAIAprC,MAAA+7D,cAAAvpB,EAGA,IAAAA,EAAA5uC,MAAA,GAAA4uC,EAAA3uC,OAAA,EACA,CACA7D,KAAA47D,aAAAppB,CAEA,IAAAvuC,GAAAjE,KAAAg8D,iBAEAh8D,MAAA6oC,SAAAozB,gBAAAh4D,GAGAA,EAAAc,QAGA/E,KAAAo5D,YAAAzuD,MACAuuD,aAAAj1D,EACA0Y,OAAAu5B,QAOAl2C,MAAAo5D,YAAAzuD,MACAuuD,aAAA,KACAv8C,OAAAu5B,KAUA6hB,EAAAl1D,UAAA0xC,UAAA,WAEA,GAAA2nB,GAAAl8D,KAAAo5D,YAAAn/C,MACAkiD,EAAAn8D,KAAAo5D,YAAAp5D,KAAAo5D,YAAAp4D,OAAA,GAEAuoB,EAAA2yC,EAAAhD,YAGA,IAAAgD,EAAAhD,aAAA,CAKA,GAAAhxC,GAAAi0C,EAAAjD,aAGA92D,EAAApC,KAAA6oC,SAAAzmC,EAGApC,MAAA47D,aAAAryC,EAAA6jC,MAEAptD,KAAA87D,KAAA//C,IAAA/b,KAAA27D,YAAApyC,EAAA6jC,OAIAhrD,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAA87D,KAAAM,cACAh6D,EAAAgB,WAAAhB,EAAAmB,qBAAAvD,KAAA87D,KAAAhyD,YAEA,IAAAosC,GAAAgmB,EAAAv/C,MAUA,IAPAva,EAAAsM,oBAAA1O,KAAA6oC,SAAAqmB,cAAAmN,cAAA51D,WAAAy6C,gBAAA,EAAA9+C,EAAA4F,OAAA,EAAA,EAAA,GACA5F,EAAAsM,oBAAA1O,KAAA6oC,SAAAqmB,cAAAmN,cAAA51D,WAAA+oD,cAAA,EAAAptD,EAAA4F,OAAA,EAAA,EAAA,IACA5F,EAAAsM,oBAAA1O,KAAA6oC,SAAAqmB,cAAAmN,cAAA51D,WAAA06C,OAAA,EAAA/+C,EAAA4F,OAAA,EAAA,EAAA,IAGAhI,KAAA6oC,SAAA8X,iBAAAC,aAAA7T,EAAAW,YAAAC,QAEA,IAAAuI,EAAAl1C,OAGAk1C,EAAA,GAAAvvC,SAAA21D,aAEApmB,EAAA,GAAAvvC,SAAA21D,WAAAntD,MAAA,GAAAnP,KAAA6oC,SAAAjlC,MACAsyC,EAAA,GAAAvvC,SAAA21D,WAAAntD,MAAA,GAAAnP,KAAA6oC,SAAAhlC,OACAqyC,EAAA,GAAAvvC,SAAA21D,WAAAntD,MAAA,GAAAnP,KAAA87D,KAAAS,SAAA,GACArmB,EAAA,GAAAvvC,SAAA21D,WAAAntD,MAAA,GAAAnP,KAAA87D,KAAAS,SAAA,IAGArmB,EAAA,GAAAykB,YAAA36D,KAAA6oC,SAAAtf,EAAArB,GACAloB,KAAAw8D,mBAAAjzC,OAIA,CAIA,IAAA,GAHAkzC,GAAAlzC,EACAmzC,EAAA18D,KAAAg8D,iBAAA,GAEAr7D,EAAA,EAAAA,EAAAu1C,EAAAl1C,OAAA,EAAAL,IACA,CACA,GAAAgc,GAAAu5B,EAAAv1C,EAGAgc,GAAAhW,SAAA21D,aAEA3/C,EAAAhW,SAAA21D,WAAAntD,MAAA,GAAAnP,KAAA6oC,SAAAjlC,MACA+Y,EAAAhW,SAAA21D,WAAAntD,MAAA,GAAAnP,KAAA6oC,SAAAhlC,OACA8Y,EAAAhW,SAAA21D,WAAAntD,MAAA,GAAAnP,KAAA87D,KAAAS,SAAA,GACA5/C,EAAAhW,SAAA21D,WAAAntD,MAAA,GAAAnP,KAAA87D,KAAAS,SAAA,IAGA5/C,EAAAg+C,YAAA36D,KAAA6oC,SAAA4zB,EAAAC;AAEA,GAAAC,GAAAF,CACAA,GAAAC,EACAA,EAAAC,EAGAzmB,EAAAA,EAAAl1C,OAAA,GAAA25D,YAAA36D,KAAA6oC,SAAA4zB,EAAAv0C,GAEAloB,KAAAw8D,mBAAAC,GACAz8D,KAAAw8D,mBAAAE,GAGA,MAAAR,GAAAv/C,SASAo7C,EAAAl1D,UAAAm5D,gBAAA,SAAAj3D,GAEA,GAAAm0D,GAAAl5D,KAAA07D,YAAAzhD,OAAA,GAAA0sC,GAAA3mD,KAAA6oC,SAAAzmC,GAAApC,KAAA27D,YAAA/3D,MAAA5D,KAAA27D,YAAA93D,OAAAkpC,EAAAqC,YAAAxmC,OAAA5I,KAAA6oC,SAAA4G,WAAA1C,EAAAwC,kBAQA,OAPA2pB,GAAA9L,MAAAptD,KAAA47D,aAEA72D,GAEAm0D,EAAAn0D,OAAA,GAGAm0D,GAOAnB,EAAAl1D,UAAA25D,mBAAA,SAAAtD,GAEAl5D,KAAA07D,YAAA/wD,KAAAuuD,IAUAnB,EAAAl1D,UAAA83D,YAAA,SAAAttD,EAAAuvD,EAAAC,EAAA93D,GAEA,GAAA3C,GAAApC,KAAA6oC,SAAAzmC,EAEApC,MAAA6oC,SAAAozB,gBAAAY,GAEA93D,GAEA83D,EAAA93D,QAIA/E,KAAA6oC,SAAAqmB,cAAAS,UAAAtiD,GAGAA,EAAA1G,SAAAopD,iBAAA5gD,MAAAnP,KAAA6oC,SAAAinB,oBAAAC,iBAAA/O,SAAA,GAGA3zC,EAAAyvD,eAOA16D,EAAA+F,cAAA/F,EAAAgG,UACAhG,EAAAiG,YAAAjG,EAAAkC,WAAAs4D,EAAA34D,SAEA7B,EAAA4I,aAAA5I,EAAA6sC,UAAA,EAAA7sC,EAAA6I,eAAA,GACAjL,KAAA6oC,SAAAwY,aAUA0W,EAAAl1D,UAAAu4D,sBAAA,SAAAhmB,EAAAob,EAAAuM,GAEA,GAAA7xB,GAAAslB,EAAAtlB,eAAA8e,KAAArZ,EAAAG,OAAAmZ,aACAhmD,EAAAusD,EAAAJ,SAAAxS,YAEAof,EAAAD,EAAAzpD,WAGA2pD,EAAAj9D,KAAA27D,YAAA93D,OAAA7D,KAAA27D,YAAA/3D,KAEAo5D,GAAAnf,UAAAzI,EAAAzgC,EAAA3U,KAAA27D,YAAA/3D,MAAAwxC,EAAAt9B,EAAA9X,KAAA27D,YAAA93D,QAEAm5D,EAAAhsB,MAAA,EAAAisB,EAEA,IAAAC,GAAAl9D,KAAA27D,YAAA/3D,MAAAK,EAAAL,MACAu5D,EAAAn9D,KAAA27D,YAAA93D,OAAAI,EAAAJ,MAgBA,OAdAqnC,GAAAC,IAAAlnC,EAAAL,MAAAs5D,EACAhyB,EAAAE,IAAAnnC,EAAAL,MAAAs5D,EAEAhyB,EAAA6e,SAEAiT,EAAAlT,QAAA5e,GAGA8xB,EAAAhsB,MAAA,EAAA,EAAAisB,GAEAD,EAAAhsB,MAAAksB,EAAAC,GAEAH,EAAAnf,UAAA2S,EAAAnD,OAAA14C,EAAA67C,EAAAnD,OAAAv1C,GAEAklD,GAuCAjF,EAAAl1D,UAAAk5D,cAAA,SAAA3mB,GAEAA,EAAAzgC,EAAA,IAEAygC,EAAAxxC,OAAAwxC,EAAAzgC,EACAygC,EAAAzgC,EAAA,GAGAygC,EAAAt9B,EAAA,IAEAs9B,EAAAvxC,QAAAuxC,EAAAt9B,EACAs9B,EAAAt9B,EAAA,GAGAs9B,EAAAzgC,EAAAygC,EAAAxxC,MAAA5D,KAAA27D,YAAA/3D,QAEAwxC,EAAAxxC,MAAA5D,KAAA27D,YAAA/3D,MAAAwxC,EAAAzgC,GAGAygC,EAAAt9B,EAAAs9B,EAAAvxC,OAAA7D,KAAA27D,YAAA93D,SAEAuxC,EAAAvxC,OAAA7D,KAAA27D,YAAA93D,OAAAuxC,EAAAt9B,IASAigD,EAAAl1D,UAAAwC,OAAA,SAAAzB,EAAAC,GAEA7D,KAAA27D,YAAA/3D,MAAAA,EACA5D,KAAA27D,YAAA93D,OAAAA,CAEA,KAAA,GAAAlD,GAAA,EAAAA,EAAAX,KAAA07D,YAAA16D,OAAAL,IAEAX,KAAA07D,YAAA/6D,GAAA0E,OAAAzB,EAAAC,IAQAk0D,EAAAl1D,UAAA0C,QAAA,WAEAvF,KAAA87D,KAAAv2D,UAEAkhD,EAAA5jD,UAAA0C,QAAAxE,KAAAf,MAEAA,KAAAo5D,YAAA,KACAp5D,KAAAo9D,QAAA,CAGA,KAAA,GAAAz8D,GAAA,EAAAA,EAAAX,KAAA07D,YAAA16D,OAAAL,IAEAX,KAAA07D,YAAA/6D,GAAA4E,SAGAvF,MAAA07D,YAAA,QAGA5G,iBAAA,GAAAhQ,gBAAA,GAAAuY,gBAAA,GAAAC,wBAAA,GAAA9B,iBAAA,KAAA+B,IAAA,SAAA78D,EAAAjB,EAAAD,GASA,QAAAo4D,GAAA/uB,GAEA4d,EAAA1lD,KAAAf,KAAA6oC,GAEA7oC,KAAAw9D,gBACAx9D,KAAAwc,SAAA,EACAxc,KAAAwU,MAAA,EAEAxU,KAAAy9D,iBAhBA,GAAAhX,GAAA/lD,EAAA,kBACAg9D,EAAAh9D,EAAA,8BAkBAk3D,GAAA/0D,UAAA0M,OAAA/L,OAAAijD,EAAA5jD,WACA+0D,EAAA/0D,UAAAmH,YAAA4tD,EACAn4D,EAAAD,QAAAo4D,EAQAA,EAAA/0D,UAAAuxC,SAAA,SAAAhb,EAAA47B,GAEAA,EAAA/wD,QAEAjE,KAAA29D,eAAAvkC,EAAA47B,GAIAh1D,KAAA49D,gBAAAxkC,EAAA47B,IAWA4C,EAAA/0D,UAAAyxC,QAAA,SAAAlb,EAAA47B,GAEAA,EAAA/wD,QAEAjE,KAAA69D,cAAAzkC,EAAA47B,GAIAh1D,KAAA89D,eAAA1kC,EAAA47B,IAUA4C,EAAA/0D,UAAA86D,eAAA,SAAAvkC,EAAA47B,GAEA,GAAA+I,GAAA/9D,KAAAy9D,cAAAxjD,KAEA8jD,KAEAA,GAAA,GAAAL,GAAA1I,KAGA+I,EAAA,GAAA5C,WAAAnG,EACAh1D,KAAA6oC,SAAAoL,cAAAC,WAAA9a,EAAA2kC,IAOAnG,EAAA/0D,UAAAg7D,cAAA,WAEA,GAAA3nB,GAAAl2C,KAAA6oC,SAAAoL,cAAAM,WAEAv0C,MAAAy9D,cAAA9yD,KAAAurC,IAUA0hB,EAAA/0D,UAAA+6D,gBAAA,SAAAxkC,EAAA47B,GAEAh1D,KAAA6oC,SAAAgvB,eAAAzjB,SAAA4gB,IASA4C,EAAA/0D,UAAAi7D,eAAA,SAAA1kC,EAAA47B,GAEAh1D,KAAA6oC,SAAAgvB,eAAAvjB,QAAA0gB,MAIAgJ,8BAAA,GAAAxC,iBAAA,KAAAyC,IAAA,SAAAv9D,EAAAjB,EAAAD,GAaA,QAAAknD,GAAA7d,GAEA4d,EAAA1lD,KAAAf,KAAA6oC,GAKA7oC,KAAAk+D,UAAA,GAKAl+D,KAAA+L,eAKA/L,KAAA6L,kBAEA,KAAA,GAAAlL,GAAA,EAAAA,EAAAX,KAAAk+D,UAAAv9D,IAEAX,KAAA+L,YAAApL,IAAA,CAMAX,MAAAm+D,SAMAn+D,KAAAo+D,WAAA,GAMAp+D,KAAAq+D,cAAA,KAnDA,GAAA5X,GAAA/lD,EAAA,kBACA2wD,EAAA3wD,EAAA,4BACA49D,EAAA59D,EAAA,qCACAs/C,EAAAt/C,EAAA,8BACAmqC,EAAAnqC,EAAA,iBAoDAgmD,GAAA7jD,UAAA0M,OAAA/L,OAAAijD,EAAA5jD,WACA6jD,EAAA7jD,UAAAmH,YAAA08C,EACA7b,EAAA8nB,aAAAC,MAAAlM,GAEAjnD,EAAAD,QAAAknD,EAMAA,EAAA7jD,UAAA09C,gBAAA,WAEAvgD,KAAAyyD,aAEA,IAAArwD,GAAApC,KAAA6oC,SAAAzmC,EAGApC,MAAAk+D,UAAA97D,EAAAuJ,aAAAvJ,EAAAwJ,oBAEA5L,KAAA+L,cAEA,KAAA,GAAApL,GAAA,EAAAA,EAAAX,KAAAk+D,UAAAv9D,IAEAX,KAAA+L,YAAApL,IAAA,CAIAX,MAAAq8D,cAAA,GAAAhL,GAAArxD,MACAA,KAAA4/C,gBAAA,GAAAI,GAAAhgD,MACAA,KAAA6/C,uBAAA,GAAAye,GAAAt+D,OAQA0mD,EAAA7jD,UAAA07D,WAAA,SAAA9yD,GAGA,GAAA9K,EAEA,KAAAA,EAAA,EAAAA,EAAAX,KAAA6L,gBAAA7K,OAAAL,IAEAX,KAAA6L,gBAAAlL,IAAA,CAIA,KAAA,GAAAF,KAAAgL,GAEAzL,KAAA6L,gBAAAJ,EAAAhL,KAAA,CAGA,IAAA2B,GAAApC,KAAA6oC,SAAAzmC,EAEA,KAAAzB,EAAA,EAAAA,EAAAX,KAAA+L,YAAA/K,OAAAL,IAEAX,KAAA+L,YAAApL,KAAAX,KAAA6L,gBAAAlL,KAEAX,KAAA+L,YAAApL,GAAAX,KAAA6L,gBAAAlL,GAEAX,KAAA+L,YAAApL,GAEAyB,EAAAqI,wBAAA9J,GAIAyB,EAAA4J,yBAAArL,KAWA+lD,EAAA7jD,UAAA8sD,UAAA,SAAAtiD,KAsBAq5C,EAAA7jD,UAAA0C,QAAA,WAEAvF,KAAA4/C,gBAAAr6C,UACAvF,KAAA6/C,uBAAAt6C,UACAkhD,EAAA5jD,UAAA0C,QAAAxE,KAAAf,MAEAA,KAAAmzD,iBAEAnzD,KAAA+L,YAAA,KAEA/L,KAAA6L,gBAAA,QAGAs3C,iBAAA,IAAAqb,oCAAA,GAAAC,6BAAA,GAAA5D,2BAAA,GAAAW,iBAAA,KAAAkD,IAAA,SAAAh+D,EAAAjB,EAAAD,GASA,QAAAm/D,GAAA91B,GAEA4d,EAAA1lD,KAAAf,KAAA6oC,GACA7oC,KAAAu5D,iBAAA,KAXA,GAAA9S,GAAA/lD,EAAA,kBACAmqC,EAAAnqC,EAAA,iBAaAi+D,GAAA97D,UAAA0M,OAAA/L,OAAAijD,EAAA5jD,WACA87D,EAAA97D,UAAAmH,YAAA20D,EACAl/D,EAAAD,QAAAm/D,EAOAA,EAAA97D,UAAAy2D,aAAA,SAAAC,GAEAv5D,KAAAu5D,iBAAAA,CAEA,IAAAn3D,GAAApC,KAAA6oC,SAAAzmC,EAEA,KAAAm3D,EAAAiE,aAAAx8D,OAEAoB,EAAAs2D,QAAAt2D,EAAAw8D,cAIAx8D,EAAAy2D,OAAAz2D,EAAAw8D,eAUAD,EAAA97D,UAAAg8D,YAAA,SAAA7gB,EAAAwC,GAEAxgD,KAAA6oC,SAAAyvB,oBAAAwG,qBAEA,IAAA18D,GAAApC,KAAA6oC,SAAAzmC,GACA28D,EAAA/+D,KAAAu5D,gBAEAv5D,MAAAg/D,aAAAhhB,EAAAwC,GAEA,IAAAue,EAAAvB,aAAAx8D,SAEAoB,EAAAy2D,OAAAz2D,EAAAw8D,cACAx8D,EAAA2C,MAAA3C,EAAA68D,oBACAF,EAAAviD,SAAA,EACAuiD,EAAAvqD,MAAA,GAGAuqD,EAAAvB,aAAA7yD,KAAA61C,EAEA,IAAA0e,GAAAH,EAAAvqD,KAEApS,GAAA+8D,WAAA,GAAA,GAAA,GAAA,GAEA/8D,EAAAg9D,YAAAh9D,EAAAi9D,OAAA,EAAA,KACAj9D,EAAAk9D,UAAAl9D,EAAAm9D,KAAAn9D,EAAAm9D,KAAAn9D,EAAAo9D,QAIA,IAAAhf,EAAAK,MAEAz+C,EAAA4I,aAAA5I,EAAA+sC,aAAAqR,EAAAY,QAAApgD,OAAA,EAAAoB,EAAA6I,eAAA,GAEA8zD,EAAAviD,SAEApa,EAAAg9D,YAAAh9D,EAAAq9D,MAAA,IAAAP,EAAA,KACA98D,EAAAk9D,UAAAl9D,EAAAm9D,KAAAn9D,EAAAm9D,KAAAn9D,EAAAs9D,QAIAt9D,EAAAg9D,YAAAh9D,EAAAq9D,MAAAP,EAAA,KACA98D,EAAAk9D,UAAAl9D,EAAAm9D,KAAAn9D,EAAAm9D,KAAAn9D,EAAAu9D,OAIAv9D,EAAA4I,aAAA5I,EAAA+sC,aAAA,EAAA/sC,EAAA6I,eAAA,GAAAu1C,EAAAY,QAAApgD,OAAA,IAEA+9D,EAAAviD,QAEApa,EAAAg9D,YAAAh9D,EAAAq9D,MAAA,KAAAP,EAAA,GAAA,KAIA98D,EAAAg9D,YAAAh9D,EAAAq9D,MAAAP,EAAA,EAAA,KAGAH,EAAAviD,SAAAuiD,EAAAviD,UAIAuiD,EAAAviD,SAOApa,EAAAg9D,YAAAh9D,EAAAq9D,MAAAP,EAAA,KACA98D,EAAAk9D,UAAAl9D,EAAAm9D,KAAAn9D,EAAAm9D,KAAAn9D,EAAAu9D,QANAv9D,EAAAg9D,YAAAh9D,EAAAq9D,MAAA,IAAAP,EAAA,KACA98D,EAAAk9D,UAAAl9D,EAAAm9D,KAAAn9D,EAAAm9D,KAAAn9D,EAAAs9D,OAQAt9D,EAAA4I,aAAA5I,EAAA8sC,eAAAsR,EAAAY,QAAApgD,OAAAoB,EAAA6I,eAAA,GAEA8zD,EAAAviD,QAMApa,EAAAg9D,YAAAh9D,EAAAq9D,MAAAP,EAAA,EAAA,KAJA98D,EAAAg9D,YAAAh9D,EAAAq9D,MAAA,KAAAP,EAAA,GAAA,MAQA98D,EAAA+8D,WAAA,GAAA,GAAA,GAAA,GACA/8D,EAAAk9D,UAAAl9D,EAAAm9D,KAAAn9D,EAAAm9D,KAAAn9D,EAAAm9D,MAEAR,EAAAvqD,SASAmqD,EAAA97D,UAAAm8D,aAAA,SAAAhhB,EAAAwC,GAGA,GAAAp+C,GAAApC,KAAA6oC,SAAAzmC,GAGAiL,EAAArN,KAAA6oC,SAAAmD,QAAAgS,SAAA4B,eAEA,KAAAY,EAAAK,OA+BA7gD,KAAA6oC,SAAAiY,WAAAzzC,GAEAA,EAAA1G,SAAAo6C,kBAAA/C,EAAA9S,eAAA8V,SAAA,GACA3zC,EAAA1G,SAAAkxC,KAAAhN,EAAAoW,QAAAjD,EAAAnG,MACAxqC,EAAA1G,SAAA+tC,MAAAsJ,EAAArK,WAGAvxC,EAAAgB,WAAAhB,EAAAM,aAAA89C,EAAAh+C,QAGA6K,EAAA5G,WAAAy6C,gBAAA72C,QAAAjI,EAAA4F,OAAA,EAAA,GAAA,GACAqF,EAAA5G,WAAA06C,OAAA92C,QAAAjI,EAAA4F,OAAA,EAAA,GAAA,GAEA5F,EAAAqI,wBAAA4C,EAAA5G,WAAAy6C,gBAAAj5C,UACA7F,EAAAqI,wBAAA4C,EAAA5G,WAAA06C,OAAAl5C,UAGA7F,EAAAgB,WAAAhB,EAAAmB,qBAAAi9C,EAAA12C,eA6BA60D,EAAA97D,UAAA+8D,WAAA,SAAA5hB,EAAAwC,GAEA,GAAAp+C,GAAApC,KAAA6oC,SAAAzmC,GACA28D,EAAA/+D,KAAAu5D,gBAMA,IAJAwF,EAAAvB,aAAAvjD,MAEA8kD,EAAAvqD,QAEA,IAAAuqD,EAAAvB,aAAAx8D,OAGAoB,EAAAs2D,QAAAt2D,EAAAw8D,kBAIA,CAEA,GAAAM,GAAAH,EAAAvqD,KAEAxU,MAAAg/D,aAAAhhB,EAAAwC,GAEAp+C,EAAA+8D,WAAA,GAAA,GAAA,GAAA,GAEA,IAAA3e,EAAAK,MAEAke,EAAAviD,SAAAuiD,EAAAviD,QAEAuiD,EAAAviD,SAEApa,EAAAg9D,YAAAh9D,EAAAq9D,MAAA,KAAAP,EAAA,GAAA,KACA98D,EAAAk9D,UAAAl9D,EAAAm9D,KAAAn9D,EAAAm9D,KAAAn9D,EAAAu9D,QAIAv9D,EAAAg9D,YAAAh9D,EAAAq9D,MAAAP,EAAA,EAAA,KACA98D,EAAAk9D,UAAAl9D,EAAAm9D,KAAAn9D,EAAAm9D,KAAAn9D,EAAAs9D,OAIAt9D,EAAA4I,aAAA5I,EAAA+sC,aAAA,EAAA/sC,EAAA6I,eAAA,GAAAu1C,EAAAY,QAAApgD,OAAA,IAEAoB,EAAAg9D,YAAAh9D,EAAAi9D,OAAA,EAAA,KACAj9D,EAAAk9D,UAAAl9D,EAAAm9D,KAAAn9D,EAAAm9D,KAAAn9D,EAAAo9D,QAGAp9D,EAAA4I,aAAA5I,EAAA+sC,aAAAqR,EAAAY,QAAApgD,OAAA,EAAAoB,EAAA6I,eAAA,GAEAjL,KAAA6oC,SAAAwY,WAAA,EAEA0d,EAAAviD,QAMApa,EAAAg9D,YAAAh9D,EAAAq9D,MAAAP,EAAA,KAJA98D,EAAAg9D,YAAAh9D,EAAAq9D,MAAA,IAAA,EAAA,OAWAV,EAAAviD,SAOApa,EAAAg9D,YAAAh9D,EAAAq9D,MAAAP,EAAA,EAAA,KACA98D,EAAAk9D,UAAAl9D,EAAAm9D,KAAAn9D,EAAAm9D,KAAAn9D,EAAAs9D,QANAt9D,EAAAg9D,YAAAh9D,EAAAq9D,MAAA,KAAAP,EAAA,GAAA,KACA98D,EAAAk9D,UAAAl9D,EAAAm9D,KAAAn9D,EAAAm9D,KAAAn9D,EAAAu9D,OAQAv9D,EAAA4I,aAAA5I,EAAA8sC,eAAAsR,EAAAY,QAAApgD,OAAAoB,EAAA6I,eAAA,GAEAjL,KAAA6oC,SAAAwY,YAEA0d,EAAAviD,QAMApa,EAAAg9D,YAAAh9D,EAAAq9D,MAAAP,EAAA,KAJA98D,EAAAg9D,YAAAh9D,EAAAq9D,MAAA,IAAA,EAAA,MAQAr9D,EAAA+8D,WAAA,GAAA,GAAA,GAAA,GACA/8D,EAAAk9D,UAAAl9D,EAAAm9D,KAAAn9D,EAAAm9D,KAAAn9D,EAAAm9D,QAUAZ,EAAA97D,UAAA0C,QAAA,WAEAkhD,EAAA5jD,UAAA0C,QAAAxE,KAAAf,MAEAA,KAAAu5D,iBAAAiE,aAAA,MAQAmB,EAAA97D,UAAAuxC,SAAA,SAAA4gB,GAEAh1D,KAAA6oC,SAAAkV,kBAAA/9C,KAAA6oC,SAAAmD,QAAAgS,UAGAgX,EAAAjrD,OAEA/J,KAAA6oC,SAAAmD,QAAAgS,SAAAyC,eAAAuU,EAAAh1D,KAAA6oC,SAAAzmC,IAGA4yD,EAAA/c,OAAAj4C,KAAA6oC,SAAAzmC,GAAAkJ,IAAAhJ,KAAAtB,QAKAhB,KAAA6+D,YAAA7J,EAAAA,EAAA/c,OAAAj4C,KAAA6oC,SAAAzmC,GAAAkJ,IAAAhJ,KAAA,KAQAq8D,EAAA97D,UAAAyxC,QAAA,SAAA0gB,GAEAh1D,KAAA6oC,SAAAkV,kBAAA/9C,KAAA6oC,SAAAmD,QAAAgS,UAEAh+C,KAAA4/D,WAAA5K,EAAAA,EAAA/c,OAAAj4C,KAAA6oC,SAAAzmC,GAAAkJ,IAAAhJ,KAAA,OAIA6gD,iBAAA,IAAAqY,iBAAA,KAAAqE,IAAA,SAAAn/D,EAAAjB,EAAAD,GAMA,QAAAinD,GAAA5d,GAOA7oC,KAAA6oC,SAAAA,EAEA7oC,KAAA6oC,SAAA7hB,GAAA,UAAAhnB,KAAAugD,gBAAAvgD,MAGAymD,EAAA5jD,UAAAmH,YAAAy8C,EACAhnD,EAAAD,QAAAinD,EAMAA,EAAA5jD,UAAA09C,gBAAA,aASAkG,EAAA5jD,UAAA0C,QAAA,WAEAvF,KAAA6oC,SAAA3hB,IAAA,UAAAlnB,KAAAugD,gBAAAvgD,MAEAA,KAAA6oC,SAAA,WAGAi3B,IAAA,SAAAp/D,EAAAjB,EAAAD,GAWA,QAAA8+D,GAAApP,GAEA7oD,EAAAtF,KAAAf,KACAkvD,GAGA,kCAEA,kCACA,iCAEA,qBACA,uBACA,sBAEA,uBAEA,mBACA,2GACA,iDACA,KACAt+C,KAAA,OAGA,2BAEA,uBAEA,mBACA,4BACA,KACAA,KAAA,OAGAinC,MAAAx1C,KAAA,KAAA8M,OAAA,EAAA,EAAA,IACAulC,OAAAryC,KAAA,KAAA8M,MAAA,GACA4pC,OAAA12C,KAAA,KAAA8M,OAAA,EAAA,EAAA,IACA4xC,mBAAA1+C,KAAA,OAAA8M,MAAA,GAAAtH,cAAA,IACAkoD,kBAAA1tD,KAAA,OAAA8M,MAAA,GAAAtH,cAAA,MAIAq5C,gBAAA,IApDA,GAAA76C,GAAA3F,EAAA,WAyDA49D,GAAAz7D,UAAA0M,OAAA/L,OAAA6C,EAAAxD,WACAy7D,EAAAz7D,UAAAmH,YAAAs0D,EACA7+D,EAAAD,QAAA8+D,IAEAyB,WAAA,KAAAC,IAAA,SAAAt/D,EAAAjB,EAAAD,GAWA,QAAAwgD,GAAAkP,GAEA7oD,EAAAtF,KAAAf,KACAkvD,GAGA,kCACA,yBAEA,kCACA,iCAEA,uBACA,uBACA,qBAEA,uBAEA,mBACA,2GACA,kDACA,KACAt+C,KAAA,OAGA,2BAEA,uBAEA,mBACA,4BACA,KACAA,KAAA,OAGAinC,MAAAx1C,KAAA,KAAA8M,OAAA,EAAA,EAAA,IACAulC,OAAAryC,KAAA,KAAA8M,MAAA,GACA4xC,mBAAA1+C,KAAA,OAAA8M,MAAA,GAAAtH,cAAA,IACAkoD,kBAAA1tD,KAAA,OAAA8M,MAAA,GAAAtH,cAAA,MAIAq5C,gBAAA,EACAC,OAAA,IArDA,GAAA96C,GAAA3F,EAAA,WA0DAs/C,GAAAn9C,UAAA0M,OAAA/L,OAAA6C,EAAAxD,WACAm9C,EAAAn9C,UAAAmH,YAAAg2C,EACAvgD,EAAAD,QAAAwgD,IAEA+f,WAAA,KAAAE,IAAA,SAAAv/D,EAAAjB,EAAAD,GAeA,QAAA6G,GAAA6oD,EAAA5oD,EAAAC,EAAAI,EAAAF,GAEA,IAAAH,IAAAC,EAEA,KAAA,IAAA3F,OAAA,2DAQAZ,MAAAm3D,IAAAtsB,EAAAssB,MAOAn3D,KAAAoC,GAAA8sD,EAAArmB,SAAAzmC,GAGApC,KAAAkvD,cAAAA,EAQAlvD,KAAAwG,QAAA,KAOAxG,KAAA2G,SAAAA,MAOA3G,KAAAyG,WAAAA,MAOAzG,KAAAkgE,aAAA,EAOAlgE,KAAAsG,UAAAA,EAOAtG,KAAAuG,YAAAA,EAEAvG,KAAAmgE,OAhFA,GAAAt1B,GAAAnqC,EAAA,iBAmFA2F,GAAAxD,UAAAmH,YAAA3D,EACA5G,EAAAD,QAAA6G,EAMAA,EAAAxD,UAAAs9D,KAAA,WAEAngE,KAAAogE,UAEApgE,KAAAoC,GAAAwE,WAAA5G,KAAAwG,SAEAxG,KAAAqgE,sBAAA9wD,OAAAC,KAAAxP,KAAA2G,WACA3G,KAAAsgE,wBAAA/wD,OAAAC,KAAAxP,KAAAyG,cAQAJ,EAAAxD,UAAAw9D,sBAAA,SAAA7wD,GAEA,IAAA,GAAA7O,GAAA,EAAAA,EAAA6O,EAAAxO,SAAAL,EAEAX,KAAA2G,SAAA6I,EAAA7O,IAAAsvD,UAAAjwD,KAAAoC,GAAA8M,mBAAAlP,KAAAwG,QAAAgJ,EAAA7O,KASA0F,EAAAxD,UAAAy9D,wBAAA,SAAA9wD,GAEA,IAAA,GAAA7O,GAAA,EAAAA,EAAA6O,EAAAxO,SAAAL,EAEAX,KAAAyG,WAAA+I,EAAA7O,IAAAX,KAAAoC,GAAAqM,kBAAAzO,KAAAwG,QAAAgJ,EAAA7O,KAuBA0F,EAAAxD,UAAAu9D,QAAA,WAEA,GAAAh+D,GAAApC,KAAAoC,GAEA8J,EAAAlM,KAAAugE,WAAAn+D,EAAAgK,cAAApM,KAAAsG,WACA+F,EAAArM,KAAAugE,WAAAn+D,EAAAkK,gBAAAtM,KAAAuG,aAEAC,EAAApE,EAAAmK,eA2BA,OAzBAnK,GAAAoK,aAAAhG,EAAA0F,GACA9J,EAAAoK,aAAAhG,EAAA6F,GACAjK,EAAAqK,YAAAjG,GAGApE,EAAAsK,oBAAAlG,EAAApE,EAAAuK,eAEAC,QAAAC,MAAA,+CACAD,QAAAC,MAAA,qBAAAzK,EAAAsK,oBAAAlG,EAAApE,EAAA0K,kBACAF,QAAAC,MAAA,gBAAAzK,EAAA2K,YAGA,KAAA3K,EAAA4K,kBAAAxG,IAEAoG,QAAAK,KAAA,0CAAA7K,EAAA4K,kBAAAxG,IAGApE,EAAA8K,cAAA1G,GACAA,EAAA,MAIApE,EAAA+K,aAAAjB,GACA9J,EAAA+K,aAAAd,GAEArM,KAAAwG,QAAAA,GAQAH,EAAAxD,UAAA+3D,YAAA,SAAA9qD,GAEA,GAGAnP,GAAA0qD,EAHApjD,EAAA6H,EAAAmgD,UACA9gD,EAAAW,EAAAX,MACA/M,EAAApC,KAAAoC,EAGA,QAAA0N,EAAAzN,MAEA,IAAA,IACA,IAAA,OACA,IAAA,UACAD,EAAAo+D,UAAAv4D,EAAAkH,EAAA,EAAA,EACA,MAGA,KAAA,IACA,IAAA,KACA/M,EAAAo+D,UAAAv4D,EAAAkH,EACA,MAGA,KAAA,IACA,IAAA,KACA/M,EAAA8tD,UAAAjoD,EAAAkH,EACA,MAGA,KAAA,KACA/M,EAAAq+D,UAAAx4D,EAAAkH,EAAA,GAAAA,EAAA,GACA,MAGA,KAAA,KACA/M,EAAAs+D,UAAAz4D,EAAAkH,EAAA,GAAAA,EAAA,GAAAA,EAAA,GACA,MAGA,KAAA,KACA/M,EAAAu+D,UAAA14D,EAAAkH,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GACA,MAGA,KAAA,KACA/M,EAAAq+D,UAAAx4D,EAAAkH,EAAAwF,EAAAxF,EAAA2I,EACA,MAGA,KAAA,KACA1V,EAAAs+D,UAAAz4D,EAAAkH,EAAAwF,EAAAxF,EAAA2I,EAAA3I,EAAA4lB,EACA,MAGA,KAAA,KACA3yB,EAAAu+D,UAAA14D,EAAAkH,EAAAwF,EAAAxF,EAAA2I,EAAA3I,EAAA4lB,EAAA5lB,EAAAsK,EACA,MAGA,KAAA,MACArX,EAAAw+D,WAAA34D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAAy+D,WAAA54D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAA0+D,WAAA74D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAA2+D,WAAA94D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAA4+D,WAAA/4D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAA6+D,WAAAh5D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAA8+D,WAAAj5D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAA++D,WAAAl5D,EAAAkH,EACA,MAGA,KAAA,KACA,IAAA,OACA,IAAA,YACA/M,EAAAg/D,iBAAAn5D,EAAA6H,EAAAu5C,UAAAl6C,EACA,MAGA,KAAA,KACA,IAAA,OACA,IAAA,YAEA/M,EAAA4tD,iBAAA/nD,EAAA6H,EAAAu5C,UAAAl6C,EACA,MAGA,KAAA,KACA,IAAA,OACA,IAAA,YACA/M,EAAAi/D,iBAAAp5D,EAAA6H,EAAAu5C,UAAAl6C,EACA,MAGA,KAAA,IACA,gBAAAA,KAEAA,EAAA07B,EAAAoW,QAAA9xC,IAGA/M,EAAAs+D,UAAAz4D,EAAAkH,EAAA,GAAAA,EAAA,GAAAA,EAAA,GACA,MAGA,KAAA,MACA/M,EAAAw+D,WAAA34D,EAAAkH,EACA,MAGA,KAAA,KACA/M,EAAA0+D,WAAA74D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAA4+D,WAAA/4D,EAAAkH,EACA,MAGA,KAAA,KACA/M,EAAA8+D,WAAAj5D,EAAAkH,EACA,MAGA,KAAA,MAMA,IALAW,EAAAwxD,SAEAxxD,EAAAwxD,OAAA,GAAAz5D,cAAA,EAAAsH,EAAAnO,SAGAL,EAAA,EAAA0qD,EAAAl8C,EAAAnO,OAAAqqD,EAAA1qD,IAAAA,EAEAmP,EAAAwxD,OAAA,EAAA3gE,GAAAwO,EAAAxO,GAAAgU,EACA7E,EAAAwxD,OAAA,EAAA3gE,EAAA,GAAAwO,EAAAxO,GAAAmX,CAGA1V,GAAA6+D,WAAAh5D,EAAA6H,EAAAwxD,OACA,MAGA,KAAA,MAMA,IALAxxD,EAAAwxD,SAEAxxD,EAAAwxD,OAAA,GAAAz5D,cAAA,EAAAsH,EAAAnO,SAGAL,EAAA,EAAA0qD,EAAAl8C,EAAAnO,OAAAqqD,EAAA1qD,IAAAA,EAEAmP,EAAAwxD,OAAA,EAAA3gE,GAAAwO,EAAAxO,GAAAgU,EACA7E,EAAAwxD,OAAA,EAAA3gE,EAAA,GAAAwO,EAAAxO,GAAAmX,EACAhI,EAAAwxD,OAAA,EAAA3gE,EAAA,GAAAwO,EAAAxO,GAAAo0B,CAIA3yB,GAAA8+D,WAAAj5D,EAAA6H,EAAAwxD,OACA,MAGA,KAAA,MAMA,IALAxxD,EAAAwxD,SAEAxxD,EAAAwxD,OAAA,GAAAz5D,cAAA,EAAAsH,EAAAnO,SAGAL,EAAA,EAAA0qD,EAAAl8C,EAAAnO,OAAAqqD,EAAA1qD,IAAAA,EAEAmP,EAAAwxD,OAAA,EAAA3gE,GAAAwO,EAAAxO,GAAAgU,EACA7E,EAAAwxD,OAAA,EAAA3gE,EAAA,GAAAwO,EAAAxO,GAAAmX,EACAhI,EAAAwxD,OAAA,EAAA3gE,EAAA,GAAAwO,EAAAxO,GAAAo0B,EACAjlB,EAAAwxD,OAAA,EAAA3gE,EAAA,GAAAwO,EAAAxO,GAAA8Y,CAIArX,GAAA++D,WAAAl5D,EAAA6H,EAAAwxD,OACA,MAGA,KAAA,IACA,IAAA,YAEA,IAAAxxD,EAAAX,QAAAW,EAAAX,MAAAyuC,YAAAqZ,UAEA,KAIA70D,GAAA+F,cAAA/F,EAAA,UAAApC,KAAAkgE,cAEA,IAAAj8D,GAAA6L,EAAAX,MAAAyuC,YAAAyS,YAAAjuD,EAAAkJ,GAEArH,KAEAjE,KAAAuhE,cAAAzxD,GAGA7L,EAAA6L,EAAAX,MAAAyuC,YAAAyS,YAAAjuD,EAAAkJ,KAIAlJ,EAAAiG,YAAAjG,EAAAkC,WAAAL,GAGA7B,EAAAo+D,UAAA1wD,EAAAmgD,UAAAjwD,KAAAkgE,cAGAlgE,KAAAkgE,cAEA,MAEA,SACAtzD,QAAAK,KAAA,iDAAA6C,EAAAzN,QAQAgE,EAAAxD,UAAAi6D,aAAA,WAEA98D,KAAAkgE,aAAA,CAEA,KAAA,GAAAnrD,KAAA/U,MAAA2G,SAEA3G,KAAA46D,YAAA56D,KAAA2G,SAAAoO,KASA1O,EAAAxD,UAAA0+D,cAAA,SAAAzxD,GAEA,GAAA1N,GAAApC,KAAAoC,GAEA6B,EAAA6L,EAAAX,MAAAyuC,WAEA,IAAA35C,EAAAgzD,UAOA,GAAAnnD,EAAA0xD,YACA,CAGA,GAAAl/D,GAAAwN,EAAA0xD,WAEAv9D,GAAAosD,YAAAjuD,EAAAkJ,IAAAlJ,EAAA+E,gBAEA/E,EAAAiG,YAAAjG,EAAAkC,WAAAL,EAAAosD,YAAAjuD,EAAAkJ,KAEAlJ,EAAAqF,YAAArF,EAAAsF,+BAAAzD,EAAA0zD,oBAWAv1D,EAAAuF,WAAAvF,EAAAkC,WAAA,EAAAhC,EAAAm/D,UAAAr/D,EAAAs/D,UAAAt/D,EAAAkF,KAAAlF,EAAAkF,KAAAlF,EAAAmF,cAAAtD,EAAAuD,QAEApF,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAA2G,mBAAAzG,EAAAwG,UAAAxG,EAAAwG,UAAA1G,EAAAwG,QACAxG,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAAqG,mBAAAnG,EAAAq/D,MAAAr/D,EAAAq/D,MAAAv/D,EAAAgH,eAEAhH,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAAiH,eAAA/G,EAAAq/D,MAAAr/D,EAAAq/D,MAAAv/D,EAAAgH,eACAhH,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAA+G,eAAA7G,EAAAs/D,MAAAt/D,EAAAs/D,MAAAx/D,EAAAgH,mBAIApJ,MAAAkvD,cAAArmB,SAAAynB,cAAArsD,IAQAoC,EAAAxD,UAAA0C,QAAA,WAEAvF,KAAAoC,GAAA8K,cAAAlN,KAAAwG,SAEAxG,KAAAoC,GAAA,KACApC,KAAA2G,SAAA,KACA3G,KAAAyG,WAAA,KAEAzG,KAAAsG,UAAA,KACAtG,KAAAuG,YAAA,MAGAF,EAAAxD,UAAA09D,WAAA,SAAAl+D,EAAA+K,GAEA,GAAAC,GAAArN,KAAAoC,GAAAkL,aAAAjL,EAKA,OAHArC,MAAAoC,GAAAmL,aAAAF,EAAAD,GACApN,KAAAoC,GAAA+J,cAAAkB,GAEArN,KAAAoC,GAAAoL,mBAAAH,EAAArN,KAAAoC,GAAAqL,gBAMAJ,GAJAT,QAAAc,IAAA1N,KAAAoC,GAAAuL,iBAAAN,IACA,SAMA81C,iBAAA,MAAA0e,IAAA,SAAAnhE,EAAAjB,EAAAD,GAaA,QAAA6xD,GAAAnC,EAAA5oD,EAAAC,EAAAu7D,EAAAC,GAEA,GAAAp7D,IAEAq7D,UAAA3/D,KAAA,YAAA8M,MAAA,GACA4gD,kBAAA1tD,KAAA,OAAA8M,MAAA,GAAAtH,eAAA,EAAA,EAAA,EACA,EAAA,EAAA,EACA,EAAA,EAAA,KAGA,IAAAi6D,EAEA,IAAA,GAAAthE,KAAAshE,GAEAn7D,EAAAnG,GAAAshE,EAAAthE,EAKA,IAAAiG,IACAy6C,gBAAA,EACAsO,cAAA,EACArO,OAAA,EAGA,IAAA4gB,EAEA,IAAA,GAAAthE,KAAAshE,GAEAt7D,EAAAhG,GAAAshE,EAAAthE,EASA6F,GAAAA,GAAA+qD,EAAAmJ,iBAOAj0D,EAAAA,GAAA8qD,EAAAoJ,mBAEAp0D,EAAAtF,KAAAf,KAAAkvD,EAAA5oD,EAAAC,EAAAI,EAAAF,GA3DA,GAAAJ,GAAA3F,EAAA,WA+DA2wD,GAAAxuD,UAAA0M,OAAA/L,OAAA6C,EAAAxD,WACAwuD,EAAAxuD,UAAAmH,YAAAqnD,EACA5xD,EAAAD,QAAA6xD,EAQAA,EAAAmJ,kBACA,wBACA,kCACA,gCACA,yBAEA,iCAEA,8BACA,uBAEA,mBACA,uFACA,oCACA,qDACA,KACA5pD,KAAA,MAQAygD,EAAAoJ,oBACA,wBAEA,8BACA,uBAEA,8BAEA,mBACA,kEACA,KACA7pD,KAAA,QAEAmvD,WAAA,KAAAkC,IAAA,SAAAvhE,EAAAjB,EAAAD,GAaA,QAAA6xD,GAAAjvD,GAOAkE,UAAA+qD,EAAAmJ,iBAOAj0D,YAAA8qD,EAAAoJ,mBAEAp0D,EAAAtF,KAAAf,KAAAoC,EAAAkE,UAAAC,aA5BA,GAAAF,GAAA3F,EAAA,gBAAAY,QAiCA+vD,GAAAxuD,UAAA0M,OAAA/L,OAAA6C,EAAAxD,WACAwuD,EAAAxuD,UAAAmH,YAAAqnD,EACA5xD,EAAAD,QAAA6xD,EAQAA,EAAAmJ,kBACA,wBACA,kCACA,gCACA,yBAEA,iCAEA,8BACA,uBAEA,mBACA,uFACA,oCACA,qDACA,KACA5pD,KAAA,MAQAygD,EAAAoJ,oBACA,wBAEA,8BACA,uBAEA,8BAEA,mBACA,kEACA,KACA7pD,KAAA,QAEAk2B,eAAA,IAAAo7B,IAAA,SAAAxhE,EAAAjB,EAAAD,GAWA,QAAAkgD,GAAA7W,GAEA4d,EAAA1lD,KAAAf,KAAA6oC,GAZA,GAAA4d,GAAA/lD,EAAA,2BAgBAg/C,GAAA78C,UAAA0M,OAAA/L,OAAAijD,EAAA5jD,WACA68C,EAAA78C,UAAAmH,YAAA01C,EACAjgD,EAAAD,QAAAkgD,EAMAA,EAAA78C,UAAA2H,MAAA,aASAk1C,EAAA78C,UAAAmxB,KAAA,WAEAh0B,KAAAg0C,SAOA0L,EAAA78C,UAAAmxC,MAAA,aAUA0L,EAAA78C,UAAA6vC,OAAA,SAAA79B,OAKAstD,2BAAA,KAAAC,IAAA,SAAA1hE,EAAAjB,EAAAD,GAQA,QAAAq8D,GAAAz5D,GAOApC,KAAAoC,GAAAA,EASApC,KAAAu8D,SAAA,GAAA10D,eACA,EAAA,EACA,IAAA,EACA,IAAA,IACA,EAAA,MAQA7H,KAAA0sD,IAAA,GAAA7kD,eACA,EAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,IAUA7H,KAAAqiE,OAAA,GAAAx6D,eACA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,IAMA7H,KAAAohD,QAAA,GAAAqB,cACA,EAAA,EAAA,EAAA,EAAA,EAAA,IAMAziD,KAAAo8D,aAAAh6D,EAAAK,eAKAzC,KAAA8J,YAAA1H,EAAAK,eAEAL,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAAo8D,cACAh6D,EAAAe,WAAAf,EAAAM,aAAA,IAAAN,EAAAosD,cAEApsD,EAAAgB,WAAAhB,EAAAmB,qBAAAvD,KAAA8J,aACA1H,EAAAe,WAAAf,EAAAmB,qBAAAvD,KAAAohD,QAAAh/C,EAAAO,aAEA3C,KAAA4C,SAGAi5D,EAAAh5D,UAAAmH,YAAA6xD,EAOAA,EAAAh5D,UAAAkZ,IAAA,SAAAyuB,EAAA83B,GAEA,GAAA3tD,GAAA,EACAmD,EAAA,CAEA9X,MAAA0sD,IAAA,GAAA/3C,EACA3U,KAAA0sD,IAAA,GAAA50C,EAEA9X,KAAA0sD,IAAA,GAAA/3C,EAAA2tD,EAAA1+D,MAAA4mC,EAAA5mC,MACA5D,KAAA0sD,IAAA,GAAA50C,EAEA9X,KAAA0sD,IAAA,GAAA/3C,EAAA2tD,EAAA1+D,MAAA4mC,EAAA5mC,MACA5D,KAAA0sD,IAAA,GAAA50C,EAAAwqD,EAAAz+D,OAAA2mC,EAAA3mC,OAEA7D,KAAA0sD,IAAA,GAAA/3C,EACA3U,KAAA0sD,IAAA,GAAA50C,EAAAwqD,EAAAz+D,OAAA2mC,EAAA3mC,OAGA8Q,EAAA2tD,EAAA3tD,EACAmD,EAAAwqD,EAAAxqD,EAEA9X,KAAAu8D,SAAA,GAAA5nD,EACA3U,KAAAu8D,SAAA,GAAAzkD,EAEA9X,KAAAu8D,SAAA,GAAA5nD,EAAA2tD,EAAA1+D,MACA5D,KAAAu8D,SAAA,GAAAzkD,EAEA9X,KAAAu8D,SAAA,GAAA5nD,EAAA2tD,EAAA1+D,MACA5D,KAAAu8D,SAAA,GAAAzkD,EAAAwqD,EAAAz+D,OAEA7D,KAAAu8D,SAAA,GAAA5nD,EACA3U,KAAAu8D,SAAA,GAAAzkD,EAAAwqD,EAAAz+D,OAEA7D,KAAA4C,UAMAi5D,EAAAh5D,UAAAD,OAAA,WAEA,GAAAR,GAAApC,KAAAoC,EAGAA,GAAAgB,WAAAhB,EAAAM,aAAA1C,KAAAo8D,cAEAh6D,EAAAc,cAAAd,EAAAM,aAAA,EAAA1C,KAAAu8D,UAEAn6D,EAAAc,cAAAd,EAAAM,aAAA,GAAA1C,KAAA0sD,KAEAtqD,EAAAc,cAAAd,EAAAM,aAAA,GAAA1C,KAAAqiE,SAGAxG,EAAAh5D,UAAA0C,QAAA,WAEA,GAAAnD,GAAApC,KAAAoC,EAEAA,GAAAsgD,aAAA1iD,KAAAo8D,cACAh6D,EAAAsgD,aAAA1iD,KAAA8J,cAGArK,EAAAD,QAAAq8D,OAIA0G,IAAA,SAAA7hE,EAAAjB,EAAAD,GACA,GAAAmxC,GAAAjwC,EAAA,iBAEAqsC,GADArsC,EAAA,kBACAA,EAAA,mBAGAW,GADAX,EAAA,gBAAAa,UACAb,EAAA,gBAAAW,eAEAmhE,EAAA9hE,EAAA,sBAgBAimD,EAAA,SAAAvkD,EAAAwB,EAAAC,EAAA0uC,EAAA9C,EAAAn1B,GASAta,KAAAoC,GAAAA,EASApC,KAAAyiE,YAAA,KAOAziE,KAAAiE,QAAA,KAEAjE,KAAAiF,YAAA,EAAA,EAAA,EAAA,GAOAjF,KAAA+K,KAAA,GAAA4lC,GAAAqC,UAAA,EAAA,EAAA,EAAA,GAOAhzC,KAAAyvC,WAAAA,GAAA1C,EAAAuC,WAOAtvC,KAAA+vD,iBAAA,GAAApf,GAAAG,OAOA9wC,KAAAyc,UAAA,KAOAzc,KAAAotD,MAAA,KAEAptD,KAAA0iE,aAAA,GAAAziE,MAAA+yC,UACAhzC,KAAA2iE,iBAAA,KACA3iE,KAAA4iE,YAAA,KAOA5iE,KAAA6iE,cAAA,KAOA7iE,KAAAu5D,iBAAA,GAAAiJ,GAOAxiE,KAAAo5D,cAEAF,aAAAl5D,KACA2c,UACA61B,OAAAxyC,KAAA+K,OAYA/K,KAAAuyC,UAAAA,GAAAxF,EAAAqC,YAAA/M,QAOAriC,KAAAsa,KAAAA,EAEAta,KAAAyiE,YAAAphE,EAAAoE,WAAArD,EAAA,IAAA,KAEApC,KAAAsa,KAeAta,KAAAyiE,YAAA3+D,YAAA,KALA9D,KAAAiE,QAAAjE,KAAAyiE,YAAAx+D,QAQAjE,KAAAqF,OAAAzB,EAAAC,GAGA8iD,GAAA9jD,UAAAmH,YAAA28C,EACAlnD,EAAAD,QAAAmnD,EAOAA,EAAA9jD,UAAAkC,MAAA,SAAAE,GAEA,GAAAi2C,GAAAj2C,GAAAjF,KAAAiF,UACAjF,MAAAyiE,YAAA19D,MAAAm2C,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,KAOAyL,EAAA9jD,UAAAi8D,oBAAA,WAOA9+D,KAAAsa,MAEAta,KAAAyiE,YAAAl+D,iBASAoiD,EAAA9jD,UAAAqH,SAAA,SAAAy4D,EAAAC,GAGA,GAAAxgE,GAAApC,KAAAoC,EAEApC,MAAAyiE,YAAAz/D,OAEAhD,KAAA2iE,iBAAAA,GAAA3iE,KAAA2iE,kBAAA3iE,KAAA0iE,aACA1iE,KAAA4iE,YAAAA,GAAA5iE,KAAA4iE,aAAAD,EAEA3iE,KAAA8iE,oBAAA9iE,KAAA2iE,iBAAA3iE,KAAA4iE,aAEA5iE,KAAAyc,WAEAzc,KAAA+vD,iBAAAtG,OAAAzpD,KAAAyc,WAGAzc,KAAA2iE,mBAAA3iE,KAAA4iE,aAEAxgE,EAAAy2D,OAAAz2D,EAAA2gE,cACA3gE,EAAA4gE,QAAAhjE,KAAA2iE,iBAAAhuD,EAAA3U,KAAA2iE,iBAAA7qD,EAAA9X,KAAA2iE,iBAAA/+D,MAAA5D,KAAAyvC,WAAAzvC,KAAA2iE,iBAAA9+D,OAAA7D,KAAAyvC,aAIArtC,EAAAs2D,QAAAt2D,EAAA2gE,cAKA3gE,EAAA6gE,SAAAjjE,KAAA2iE,iBAAAhuD,EAAA3U,KAAA2iE,iBAAA7qD,EAAA9X,KAAA2iE,iBAAA/+D,MAAA5D,KAAAyvC,WAAAzvC,KAAA2iE,iBAAA9+D,OAAA7D,KAAAyvC,aAUAkX,EAAA9jD,UAAAigE,oBAAA,SAAAH,EAAAC,GAEA,GAAAM,GAAAljE,KAAA+vD,gBAEA6S,GAAAA,GAAAD,EAEAO,EAAA5vD,WAGAtT,KAAAsa,MAUA4oD,EAAAziE,EAAA,EAAAkiE,EAAA/+D,MAAA,EACAs/D,EAAA73B,EAAA,GAAAs3B,EAAA9+D,OAAA,EAEAq/D,EAAA/3B,GAAA,GAAAy3B,EAAAjuD,EAAAuuD,EAAAziE,EACAyiE,EAAA93B,GAAA,EAAAw3B,EAAA9qD,EAAAorD,EAAA73B,IAZA63B,EAAAziE,EAAA,EAAAkiE,EAAA/+D,MAAA,EACAs/D,EAAA73B,EAAA,EAAAs3B,EAAA9+D,OAAA,EAEAq/D,EAAA/3B,GAAA,GAAAy3B,EAAAjuD,EAAAuuD,EAAAziE,EACAyiE,EAAA93B,GAAA,GAAAw3B,EAAA9qD,EAAAorD,EAAA73B,IAmBAsb,EAAA9jD,UAAAwC,OAAA,SAAAzB,EAAAC,GAKA,GAHAD,EAAA,EAAAA,EACAC,EAAA,EAAAA,EAEA7D,KAAA+K,KAAAnH,QAAAA,GAAA5D,KAAA+K,KAAAlH,SAAAA,EAAA,CAKA7D,KAAA+K,KAAAnH,MAAAA,EACA5D,KAAA+K,KAAAlH,OAAAA,EAEA7D,KAAA0iE,aAAA9+D,MAAAA,EACA5D,KAAA0iE,aAAA7+D,OAAAA,EAEA7D,KAAAyiE,YAAAp9D,OAAAzB,EAAA5D,KAAAyvC,WAAA5rC,EAAA7D,KAAAyvC,WAEA,IAAA0zB,GAAAnjE,KAAAotD,OAAAptD,KAAA+K,IAEA/K,MAAA8iE,oBAAAK,KAOAxc,EAAA9jD,UAAA0C,QAAA,WAEAvF,KAAAoC,EAEApC,MAAAyiE,YAAAl9D,UAEAvF,KAAAyiE,YAAA,KACAziE,KAAAiE,QAAA,QAGA6wD,iBAAA,GAAAhQ,gBAAA,GAAA3B,iBAAA,IAAAigB,qBAAA,GAAAt8B,eAAA,IAAAu8B,IAAA,SAAA3iE,EAAAjB,EAAAD,GAMA,QAAAgjE,KAOAxiE,KAAAw9D,gBAOAx9D,KAAAwc,SAAA,EAOAxc,KAAAwU,MAAA,EAGAguD,EAAA3/D,UAAAmH,YAAAw4D,EACA/iE,EAAAD,QAAAgjE,OAEAc,IAAA,SAAA5iE,EAAAjB,EAAAD,GAQA,QAAA04D,GAAA91D,EAAAyS,GAwBA,MAtBAA,GAAAA,MAIAA,EAAAk4B,MAAAW,YAAAC,SAAAvrC,EAAAmhE,IAAAnhE,EAAAohE,qBACA3uD,EAAAk4B,MAAAW,YAAAE,MAAAxrC,EAAAqhE,UAAArhE,EAAAshE,WACA7uD,EAAAk4B,MAAAW,YAAAG,WAAAzrC,EAAAuhE,UAAAvhE,EAAAohE,qBACA3uD,EAAAk4B,MAAAW,YAAAI,SAAA1rC,EAAAqhE,UAAArhE,EAAAmhE,KACA1uD,EAAAk4B,MAAAW,YAAAK,UAAA3rC,EAAAmhE,IAAAnhE,EAAAohE,qBACA3uD,EAAAk4B,MAAAW,YAAAM,SAAA5rC,EAAAmhE,IAAAnhE,EAAAohE,qBACA3uD,EAAAk4B,MAAAW,YAAAO,UAAA7rC,EAAAmhE,IAAAnhE,EAAAohE,qBACA3uD,EAAAk4B,MAAAW,YAAAQ,cAAA9rC,EAAAmhE,IAAAnhE,EAAAohE,qBACA3uD,EAAAk4B,MAAAW,YAAAS,aAAA/rC,EAAAmhE,IAAAnhE,EAAAohE,qBACA3uD,EAAAk4B,MAAAW,YAAAU,aAAAhsC,EAAAmhE,IAAAnhE,EAAAohE,qBACA3uD,EAAAk4B,MAAAW,YAAAW,aAAAjsC,EAAAmhE,IAAAnhE,EAAAohE,qBACA3uD,EAAAk4B,MAAAW,YAAAY,aAAAlsC,EAAAmhE,IAAAnhE,EAAAohE,qBACA3uD,EAAAk4B,MAAAW,YAAAa,YAAAnsC,EAAAmhE,IAAAnhE,EAAAohE,qBACA3uD,EAAAk4B,MAAAW,YAAAc,MAAApsC,EAAAmhE,IAAAnhE,EAAAohE,qBACA3uD,EAAAk4B,MAAAW,YAAAe,aAAArsC,EAAAmhE,IAAAnhE,EAAAohE,qBACA3uD,EAAAk4B,MAAAW,YAAAgB,QAAAtsC,EAAAmhE,IAAAnhE,EAAAohE,qBACA3uD,EAAAk4B,MAAAW,YAAAiB,aAAAvsC,EAAAmhE,IAAAnhE,EAAAohE,qBAEA3uD,EA/BAk4B,MAAArsC,EAAA,kBAkCAjB,EAAAD,QAAA04D,IAEApD,iBAAA,KAAA8O,IAAA,SAAAljE,EAAAjB,EAAAD,GAQA,QAAA44D,GAAAh2D,EAAAyS,GAEAA,EAAAA,MAEAA,EAAAk4B,MAAA6B,WAAAC,QAAAzsC,EAAAysC,OACAh6B,EAAAk4B,MAAA6B,WAAAE,OAAA1sC,EAAA0sC,MACAj6B,EAAAk4B,MAAA6B,WAAAG,WAAA3sC,EAAA2sC,UACAl6B,EAAAk4B,MAAA6B,WAAAI,YAAA5sC,EAAA4sC,WACAn6B,EAAAk4B,MAAA6B,WAAAK,WAAA7sC,EAAA6sC,UACAp6B,EAAAk4B,MAAA6B,WAAAM,gBAAA9sC,EAAA8sC,eACAr6B,EAAAk4B,MAAA6B,WAAAO,cAAA/sC,EAAA+sC,aAjBApC,MAAArsC,EAAA,kBAqBAjB,EAAAD,QAAA44D,IAEAtD,iBAAA,KAAA+O,IAAA,SAAAnjE,EAAAjB,EAAAD,GAuBA,QAAAwmD,GAAA/hD,GAEAysC,EAAA3vC,KAAAf,MAUAA,KAAAqtD,OAAA,GAAA1c,GAAAwG,MAQAn3C,KAAAowD,SAAA,KAQApwD,KAAAkxC,OAAA,EAQAlxC,KAAAmxC,QAAA,EAQAnxC,KAAA63C,KAAA,SASA73C,KAAA+3C,UAAAhL,EAAAW,YAAAC,OAOA3tC,KAAAqN,OAAA,KAQArN,KAAA8jE,WAAA,SAGA9jE,KAAAiE,QAAAA,GAAAP,EAAAuvC,MACAjzC,KAAA+jE,cAAA,EACA/jE,KAAAgkE,aAAA,EACAhkE,KAAAikE,WAAA,GAAAp8D,cAAA,GAhGA,GAAA8oC,GAAAjwC,EAAA,WACAgD,EAAAhD,EAAA,uBACAgwC,EAAAhwC,EAAA,wBACA60D,EAAA70D,EAAA,0CACAmqC,EAAAnqC,EAAA,YACAqsC,EAAArsC,EAAA,YACAi4C,EAAA,GAAAhI,GAAAwG,KA8FA6O,GAAAnjD,UAAA0M,OAAA/L,OAAAktC,EAAA7tC,WACAmjD,EAAAnjD,UAAAmH,YAAAg8C,EACAvmD,EAAAD,QAAAwmD,EAEAz2C,OAAAwhC,iBAAAiV,EAAAnjD,WAOAe,OACAoM,IAAA,WAEA,MAAAwF,MAAAygB,IAAAj2B,KAAAgxC,MAAAr8B,GAAA3U,KAAAiE,QAAAysD,OAAA9sD,OAEAsM,IAAA,SAAAf,GAEA,GAAA+0D,GAAAr5B,EAAAq5B,KAAAlkE,KAAAgxC,MAAAr8B,IAAA,CACA3U,MAAAgxC,MAAAr8B,EAAAuvD,EAAA/0D,EAAAnP,KAAAiE,QAAAysD,OAAA9sD,MACA5D,KAAAkxC,OAAA/hC,IAUAtL,QACAmM,IAAA,WAEA,MAAAwF,MAAAygB,IAAAj2B,KAAAgxC,MAAAl5B,GAAA9X,KAAAiE,QAAAysD,OAAA7sD,QAEAqM,IAAA,SAAAf,GAEA,GAAA+0D,GAAAr5B,EAAAq5B,KAAAlkE,KAAAgxC,MAAAl5B,IAAA,CACA9X,MAAAgxC,MAAAl5B,EAAAosD,EAAA/0D,EAAAnP,KAAAiE,QAAAysD,OAAA7sD,OACA7D,KAAAmxC,QAAAhiC,IAUAlL,SACA+L,IAAA,WAEA,MAAAhQ,MAAAowD,UAEAlgD,IAAA,SAAAf,GAEAnP,KAAAowD,WAAAjhD,IAKAnP,KAAAowD,SAAAjhD,EACAnP,KAAA8jE,WAAA,SAEA9jE,KAAA+jE,cAAA,EAEA50D,IAGAA,EAAAyuC,YAAAqZ,UAEAj3D,KAAAmkE,mBAIAh1D,EAAA8X,KAAA,SAAAjnB,KAAAmkE,iBAAAnkE,YAYAgmD,EAAAnjD,UAAAshE,iBAAA,WAEAnkE,KAAA+jE,cAAA,EAGA/jE,KAAAkxC,SAEAlxC,KAAAgxC,MAAAr8B,EAAAk2B,EAAAq5B,KAAAlkE,KAAAgxC,MAAAr8B,GAAA3U,KAAAkxC,OAAAlxC,KAAAiE,QAAAmpD,MAAAxpD,OAGA5D,KAAAmxC,UAEAnxC,KAAAgxC,MAAAl5B,EAAA+yB,EAAAq5B,KAAAlkE,KAAAgxC,MAAAl5B,GAAA9X,KAAAmxC,QAAAnxC,KAAAiE,QAAAmpD,MAAAvpD,SAIAmiD,EAAAnjD,UAAAuhE,kBAAA,WAGA,GAIAhmB,GAAAC,EAAAC,EAAAC,EAJAt6C,EAAAjE,KAAAowD,SACAnlB,EAAAjrC,KAAAyc,UAAAyuB,eACAzqC,EAAAwqC,EAAAxqC,EAAAuE,EAAAimC,EAAAjmC,EAAAqvB,EAAA4W,EAAA5W,EAAAgX,EAAAJ,EAAAI,EAAAF,EAAAF,EAAAE,GAAAC,EAAAH,EAAAG,GACA64B,EAAAjkE,KAAAikE,WAEA7+C,EAAAnhB,EAAAmhB,IAGAA,IAGAi5B,EAAAj5B,EAAAzQ,EAAA3U,KAAAqtD,OAAA14C,EAAAyQ,EAAAxhB,MACAw6C,EAAAC,EAAAp6C,EAAAwsD,KAAA7sD,MAEA26C,EAAAn5B,EAAAtN,EAAA9X,KAAAqtD,OAAAv1C,EAAAsN,EAAAvhB,OACAy6C,EAAAC,EAAAt6C,EAAAwsD,KAAA5sD,SAKAu6C,EAAAn6C,EAAAysD,OAAA,OAAA,EAAA1wD,KAAAqtD,OAAA14C,GACA0pC,EAAAp6C,EAAAysD,OAAA,OAAA1wD,KAAAqtD,OAAA14C,EAEA2pC,EAAAr6C,EAAAysD,OAAA7sD,QAAA,EAAA7D,KAAAqtD,OAAAv1C,GACAymC,EAAAt6C,EAAAysD,OAAA7sD,QAAA7D,KAAAqtD,OAAAv1C,GAIAmsD,EAAA,GAAAxjE,EAAA49C,EAAAhqB,EAAAkqB,EAAApT,EACA84B,EAAA,GAAA54B,EAAAkT,EAAAv5C,EAAAq5C,EAAAjT,EAGA64B,EAAA,GAAAxjE,EAAA29C,EAAA/pB,EAAAkqB,EAAApT,EACA84B,EAAA,GAAA54B,EAAAkT,EAAAv5C,EAAAo5C,EAAAhT,EAGA64B,EAAA,GAAAxjE,EAAA29C,EAAA/pB,EAAAiqB,EAAAnT,EACA84B,EAAA,GAAA54B,EAAAiT,EAAAt5C,EAAAo5C,EAAAhT,EAGA64B,EAAA,GAAAxjE,EAAA49C,EAAAhqB,EAAAiqB,EAAAnT,EACA84B,EAAA,GAAA54B,EAAAiT,EAAAt5C,EAAAq5C,EAAAjT,GAYA4a,EAAAnjD,UAAAwxC,aAAA,SAAAxL,GAEA7oC,KAAA+jE,eAEA/jE,KAAA+jE,cAAA,EAEA/jE,KAAAmkE,mBAEAnkE,KAAAgkE,aAAA,GAGAhkE,KAAAgkE,cAEAhkE,KAAAgkE,aAAA,EAGAhkE,KAAAokE,qBAIAv7B,EAAAkV,kBAAAlV,EAAAmD,QAAAwkB,QACA3nB,EAAAmD,QAAAwkB,OAAA9d,OAAA1yC,OASAgmD,EAAAnjD,UAAAyoC,UAAA,SAAA6K,GAEA,IAAAn2C,KAAA+yC,eACA,CACA/yC,KAAAgkE,cAEAhkE,KAAAgkE,aAAA,EAGAhkE,KAAAokE,oBAIA,IAAAvxC,GACAE,EACAD,EACAE,EACAixC,EAAAjkE,KAAAikE,WAEAvpB,EAAAupB,EAAA,GACAtpB,EAAAspB,EAAA,GAEArpB,EAAAqpB,EAAA,GACAppB,EAAAopB,EAAA,GAEAzlB,EAAAylB,EAAA,GACAxlB,EAAAwlB,EAAA,GAEAvlB,EAAAulB,EAAA,GACAtlB,EAAAslB,EAAA,EAuBA,IArBApxC,EAAA6nB,EACA7nB,EAAAA,EAAA+nB,EAAAA,EAAA/nB,EACAA,EAAAA,EAAA2rB,EAAAA,EAAA3rB,EACAA,EAAAA,EAAA6rB,EAAAA,EAAA7rB,EAEAC,EAAA6nB,EACA7nB,EAAAA,EAAA+nB,EAAAA,EAAA/nB,EACAA,EAAAA,EAAA2rB,EAAAA,EAAA3rB,EACAA,EAAAA,EAAA6rB,EAAAA,EAAA7rB,EAEAC,EAAA2nB,EACA3nB,EAAA6nB,EAAA7nB,EAAA6nB,EAAA7nB,EACAA,EAAAyrB,EAAAzrB,EAAAyrB,EAAAzrB,EACAA,EAAA2rB,EAAA3rB,EAAA2rB,EAAA3rB,EAEAC,EAAA2nB,EACA3nB,EAAA6nB,EAAA7nB,EAAA6nB,EAAA7nB,EACAA,EAAAyrB,EAAAzrB,EAAAyrB,EAAAzrB,EACAA,EAAA2rB,EAAA3rB,EAAA2rB,EAAA3rB,EAGAhzB,KAAAqpC,SAAAroC,OACA,CACA,GAAAkyC,GAAAlzC,KAAAuzC,oBAEA6K,IAAAlL,EAAAv+B,EACA0pC,GAAAnL,EAAAv+B,EAAAu+B,EAAAtvC,MACA06C,GAAApL,EAAAp7B,EACAymC,GAAArL,EAAAp7B,EAAAo7B,EAAArvC,OAEAgvB,EAAAA,EAAAurB,GAAAvrB,EAAAurB,GACAtrB,EAAAA,EAAAwrB,GAAAxrB,EAAAwrB,GAEAvrB,EAAAA,EAAAsrB,GAAAtrB,EAAAsrB,GACArrB,EAAAA,EAAAurB,GAAAvrB,EAAAurB,GAGA,GAAA/L,GAAAxyC,KAAAszC,OAEAd,GAAA79B,EAAAke,EACA2f,EAAA5uC,MAAAmvB,EAAAF,EAEA2f,EAAA16B,EAAAgb,EACA0f,EAAA3uC,OAAAmvB,EAAAF,EAGA9yB,KAAA+yC,eAAAP,EAGA,MAAAxyC,MAAA+yC,gBAOAiT,EAAAnjD,UAAAouC,eAAA,WAMA,MAJAjxC,MAAAszC,QAAA3+B,GAAA3U,KAAAowD,SAAAM,OAAA9sD,MAAA5D,KAAAqtD,OAAA14C,EACA3U,KAAAszC,QAAAx7B,GAAA9X,KAAAowD,SAAAM,OAAA7sD,OAAA7D,KAAAqtD,OAAAv1C,EACA9X,KAAAszC,QAAA1vC,MAAA5D,KAAAowD,SAAAM,OAAA9sD,MACA5D,KAAAszC,QAAAzvC,OAAA7D,KAAAowD,SAAAM,OAAA7sD,OACA7D,KAAAszC,SASA0S,EAAAnjD,UAAA+7C,cAAA,SAAAtI,GAEAt2C,KAAAkrC,eAAAqL,aAAAD,EAAAqC,EAEA,IAGAgC,GAHA/2C,EAAA5D,KAAAowD,SAAAM,OAAA9sD,MACAC,EAAA7D,KAAAowD,SAAAM,OAAA7sD,OACA62C,GAAA92C,EAAA5D,KAAAqtD,OAAA14C,CAGA,OAAAgkC,GAAAhkC,EAAA+lC,GAAA/B,EAAAhkC,EAAA+lC,EAAA92C,IAEA+2C,GAAA92C,EAAA7D,KAAAqtD,OAAAv1C,EAEA6gC,EAAA7gC,EAAA6iC,GAAAhC,EAAA7gC,EAAA6iC,EAAA92C,IAEA,GAIA,GASAmiD,EAAAnjD,UAAA2xC,cAAA,SAAA3L,GAEA,KAAA7oC,KAAAiE,QAAAwsD,KAAA7sD,OAAA,GAAA5D,KAAAiE,QAAAwsD,KAAA5sD,QAAA,GAAA,CAKA,GAAAo6C,GAAApV,EAAAqV,WAAAl+C,KAAA+3C,UAOA,IANAkG,IAAApV,EAAA9Q,QAAAomB,2BAEAtV,EAAA9Q,QAAAomB,yBAAAF,GAIAj+C,KAAAiE,QAAAogE,MACA,CACA,GAEAzZ,GACAC,EACAjnD,EACAC,EALAI,EAAAjE,KAAAowD,SACAnlB,EAAAjrC,KAAAkrC,cAMArC,GAAA9Q,QAAAo1B,YAAAntD,KAAA2zC,UAGA,IAAA2wB,GAAArgE,EAAA25C,YAAArL,YAAAxF,EAAAqC,YAAAxmC,MAQA,IAPAigC,EAAAspB,gBAAAtpB,EAAA9Q,QAAA8Q,EAAAspB,kBAAAmS,IAEAz7B,EAAA9Q,QAAA8Q,EAAAspB,gBAAAmS,GAKArgE,EAAAslD,OACA,CACA3lD,EAAAK,EAAAwsD,KAAA5sD,OACAA,EAAAI,EAAAwsD,KAAA7sD,MAEAgnD,EAAA3mD,EAAA,KAAAA,EAAAmhB,KAAAtN,EAAA9X,KAAAqtD,OAAAv1C,EAAA7T,EAAAmhB,KAAAvhB,OAAA7D,KAAAqtD,OAAAv1C,GAAA7T,EAAAysD,OAAA7sD,OACAgnD,EAAA5mD,EAAA,KAAAA,EAAAmhB,KAAAzQ,EAAA3U,KAAAqtD,OAAA14C,EAAA1Q,EAAAmhB,KAAAxhB,MAAA5D,KAAAqtD,OAAA14C,GAAA1Q,EAAAysD,OAAA9sD,MAEAgnD,GAAAhnD,EAEAqnC,EAAAE,GAAA0f,EAAA5f,EAAAxqC,EAAAmqD,EAAA3f,EAAA5W,EAAA4W,EAAAE,GACAF,EAAAG,GAAAyf,EAAA5f,EAAAjmC,EAAA4lD,EAAA3f,EAAAI,EAAAJ,EAAAG,EAEA,IAAAuxB,GAAA1xB,EAAAxqC,CACAwqC,GAAAxqC,GAAAwqC,EAAA5W,EACA4W,EAAA5W,EAAAsoC,EAEAA,EAAA1xB,EAAAjmC,EACAimC,EAAAjmC,GAAAimC,EAAAI,EACAJ,EAAAI,EAAAsxB,EAGA/R,EAAA,EACAC,EAAA,MAKAjnD,GAAAK,EAAAwsD,KAAA7sD,MACAC,EAAAI,EAAAwsD,KAAA5sD,OAEA+mD,EAAA3mD,EAAA,KAAAA,EAAAmhB,KAAAzQ,EAAA3U,KAAAqtD,OAAA14C,EAAA1Q,EAAAmhB,KAAAxhB,MAAA5D,KAAAqtD,OAAA14C,GAAA1Q,EAAAysD,OAAA9sD,MACAinD,EAAA5mD,EAAA,KAAAA,EAAAmhB,KAAAtN,EAAA9X,KAAAqtD,OAAAv1C,EAAA7T,EAAAmhB,KAAAvhB,OAAA7D,KAAAqtD,OAAAv1C,GAAA7T,EAAAysD,OAAA7sD,MAMAglC,GAAAmH,aAEAnH,EAAA9Q,QAAA2e,aACAzL,EAAAxqC,EACAwqC,EAAAjmC,EACAimC,EAAA5W,EACA4W,EAAAI,EACAJ,EAAAE,GAAAtC,EAAA4G,WAAA,EACAxE,EAAAG,GAAAvC,EAAA4G,WAAA,GAGAmb,EAAA,EAAAA,EACAC,EAAA,EAAAA,GAKAhiB,EAAA9Q,QAAA2e,aACAzL,EAAAxqC,EACAwqC,EAAAjmC,EACAimC,EAAA5W,EACA4W,EAAAI,EACAJ,EAAAE,GAAAtC,EAAA4G,WACAxE,EAAAG,GAAAvC,EAAA4G,WAMA,IAAAA,GAAAxrC,EAAA25C,YAAAnO,UAEA,YAAAzvC,KAAA63C,MAEA73C,KAAA8jE,aAAA9jE,KAAA63C,OAEA73C,KAAA8jE,WAAA9jE,KAAA63C,KAGA73C,KAAAukE,cAAAhP,EAAAC,iBAAAx1D,KAAAA,KAAA63C,OAGAhP,EAAA9Q,QAAAw1B,UACAvtD,KAAAukE,cACA,EACA,EACA3gE,EAAA6rC,EACA5rC,EAAA4rC,EACAmb,EAAA/hB,EAAA4G,WACAob,EAAAhiB,EAAA4G,WACA7rC,EAAAilC,EAAA4G,WACA5rC,EAAAglC,EAAA4G,aAKA5G,EAAA9Q,QAAAw1B,UACAtpD,EAAA25C,YAAAp2C,OACAvD,EAAAwsD,KAAA97C,EAAA86B,EACAxrC,EAAAwsD,KAAA34C,EAAA23B,EACA7rC,EAAA6rC,EACA5rC,EAAA4rC,EACAmb,EAAA/hB,EAAA4G,WACAob,EAAAhiB,EAAA4G,WACA7rC,EAAAilC,EAAA4G,WACA5rC,EAAAglC,EAAA4G,eAYAuW,EAAAnjD,UAAA0C,QAAA,SAAA6xD,EAAAoN,GAEA9zB,EAAA7tC,UAAA0C,QAAAxE,KAAAf,MAEAA,KAAAqtD,OAAA,KAEA+J,GAEAp3D,KAAAowD,SAAA7qD,QAAAi/D,GAGAxkE,KAAAowD,SAAA,KACApwD,KAAAqN,OAAA,MAeA24C,EAAAye,UAAA,SAAAC,GAEA,GAAAzgE,GAAA4mC,EAAA85B,aAAAD,EAEA,KAAAzgE,EAEA,KAAA,IAAArD,OAAA,gBAAA8jE,EAAA,wCAGA,OAAA,IAAA1e,GAAA/hD,IAWA+hD,EAAA4e,UAAA,SAAAC,EAAAC,EAAAvyB,GAEA,MAAA,IAAAyT,GAAAtiD,EAAAkhE,UAAAC,EAAAC,EAAAvyB,OAGAwE,WAAA,GAAAiI,uBAAA,GAAApK,UAAA,GAAAmwB,yCAAA,GAAA5lB,sBAAA,IAAArK,WAAA,MAAAkwB,IAAA,SAAAtkE,EAAAjB,EAAAD,GA6BA,QAAA0mD,GAAArd,GAEA6W,EAAA3+C,KAAAf,KAAA6oC,GAQA7oC,KAAA2tD,SAAA,EAOA3tD,KAAA4tD,aAAA,EAAA5tD,KAAA2tD,SAOA3tD,KAAA+K,KAAAgiC,EAAAwD,iBAGA,IAAA00B,GAAA,EAAAjlE,KAAA+K,KAAA/K,KAAA4tD,YAGA,GAAA5tD,KAAA+K,IAOA/K,MAAAu8D,SAAA,GAAAr6D,aAAA+iE,GAOAjlE,KAAAklE,UAAA,GAAAr9D,cAAA7H,KAAAu8D,UAOAv8D,KAAA0sD,IAAA,GAAAyY,aAAAnlE,KAAAu8D,UAOAv8D,KAAAqiE,OAAA,GAAA8C,aAAAnlE,KAAAu8D,UAOAv8D,KAAAohD,QAAAgkB,EAAAplE,KAAA+K,MAOA/K,KAAAqN,OAAA,KAEArN,KAAAkgE,aAAA,EACAlgE,KAAA8xC,aAAA,EAEA9xC,KAAAqlE,WAAA,EACArlE,KAAAslE,SAGA,KAAA,GAAA3kE,GAAA,EAAAA,EAAAX,KAAA+K,KAAApK,IAEAX,KAAAslE,OAAA3kE,IAAA4kE,YAAArF,aAAA,EAAAsF,OAAAz6D,KAAA,EAAAP,MAAA,EAAAi7D,MAAA,EAGAzlE,MAAA0lE,aAAA1lE,KAAAslE,OAAAtlE,KAAAqlE,cAEArlE,KAAA2lE,eAAA,KApHA,GAAAjmB,GAAAh/C,EAAA,8CACA2rC,EAAA3rC,EAAA,uCAEA0kE,GADA1kE,EAAA,gDACAA,EAAA,sCACAklE,EAAAllE,EAAA,gCACAqsC,EAAArsC,EAAA,eACAqmD,EAAArmD,EAAA,eAkHAwlD,GAAArjD,UAAA0M,OAAA/L,OAAAk8C,EAAA78C,WACAqjD,EAAArjD,UAAAmH,YAAAk8C,EACAzmD,EAAAD,QAAA0mD,EAEA7Z,EAAAC,eAAA,SAAA4Z,GAQAA,EAAArjD,UAAA09C,gBAAA,WAEA,GAAAn+C,GAAApC,KAAA6oC,SAAAzmC,EAEApC,MAAA6lE,YAAAzjE,EAAAuJ,aAAAvJ,EAAA0jE,yBAEA9lE,KAAA+lE,QAAAH,EAAAxjE,EAAApC,KAAA6lE,aAGA7lE,KAAAqN,OAAArN,KAAA6oC,SAAAqmB,cAAAmN,cAGAr8D,KAAAo8D,aAAArV,EAAA3lD,SAAAiC,mBAAAjB,EAAA,KAAAA,EAAAosD,cACAxuD,KAAA8J,YAAAi9C,EAAA3lD,SAAAkC,kBAAAlB,EAAApC,KAAAohD,QAAAh/C,EAAAO,aAGA3C,KAAAgmE,IAAA,GAAAjf,GAAAvlD,kBAAAY,GAEApC,KAAAgmE,IAAAp7D,SAAA5K,KAAA8J,aACA9J,KAAAgmE,IAAAt7D,aAAA1K,KAAAo8D,aAAAp8D,KAAA+lE,QAAAt/D,WAAAy6C,gBAAA9+C,EAAA4F,OAAA,EAAAhI,KAAA4tD,aAAA,GACA5tD,KAAAgmE,IAAAt7D,aAAA1K,KAAAo8D,aAAAp8D,KAAA+lE,QAAAt/D,WAAA+oD,cAAAptD,EAAA6I,gBAAA,EAAAjL,KAAA4tD,aAAA,GACA5tD,KAAAgmE,IAAAt7D,aAAA1K,KAAAo8D,aAAAp8D,KAAA+lE,QAAAt/D,WAAA06C,OAAA/+C,EAAAmF,eAAA,EAAAvH,KAAA4tD,aAAA,IACA5tD,KAAAgmE,IAAAt7D,aAAA1K,KAAAo8D,aAAAp8D,KAAA+lE,QAAAt/D,WAAAw/D,WAAA7jE,EAAA4F,OAAA,EAAAhI,KAAA4tD,aAAA,IAEA5tD,KAAAs7D,iBAAA,OAQApV,EAAArjD,UAAA6vC,OAAA,SAAA8d,GAcA,GAVAxwD,KAAA8xC,cAAA9xC,KAAA+K,MAEA/K,KAAAg0C,QAQAwc,EAAAvsD,QAAA6sD,KAAA,CAOA,GAEAnwD,GAFAulE,EAAA1V,EAAAvsD,QAAA25C,YACA8nB,EAAA1lE,KAAA0lE,YAGA,IAAA1lE,KAAA2lE,iBAAAO,EACA,CAGA,GAFAlmE,KAAA2lE,eAAAO,GAEAA,EAAAC,SACA,CAIA,GAHAD,EAAAC,UAAA,EACAD,EAAAE,IAAApmE,KAAAkgE,aAEAlgE,KAAAkgE,eAAAlgE,KAAA6lE,YACA,CACA,IAAAllE,EAAA,EAAAA,EAAA+kE,EAAAxF,aAAAv/D,IAEA+kE,EAAAH,SAAA5kE,GAAAwlE,UAAA,CAGAnmE,MAAAkgE,aAAA,EAEAwF,EAAA36D,KAAA/K,KAAA8xC,aAAA4zB,EAAAl7D,MAEAk7D,EAAA1lE,KAAA0lE,aAAA1lE,KAAAslE,OAAAtlE,KAAAqlE,cACAK,EAAAxF,aAAA,EACAwF,EAAAl7D,MAAAxK,KAAA8xC,aAIA4zB,EAAAH,SAAAG,EAAAxF,gBAAAgG,EAGAlmE,KAAAkgE,eAIA,GAAA9rD,GAAApU,KAAA8xC,aAAA9xC,KAAA4tD,YAEA5tD,MAAA8xC,cAIA,IAAAuwB,GAAAriE,KAAAqiE,OACA6C,EAAAllE,KAAAklE,UACAjB,EAAAzT,EAAAyT,WACApsB,GAAA2Y,EAAA3Y,MAAA,KAAA,MAAA2Y,EAAA3Y,QAAA,IAAA2Y,EAAA3Y,OAAA,KAAA,IAAA2Y,EAAA7c,YAAA,IACA+Y,EAAA8D,EAAAvsD,QAAA6sD,KAAAuV,UAEAnB,GAAA9wD,KAAA6vD,EAAA,GACAiB,EAAA9wD,KAAA6vD,EAAA,GACAjkE,KAAA0sD,IAAAt4C,KAAAs4C,EAAA,GACA2V,EAAAjuD,KAAAyjC,EACAqtB,EAAA9wD,KAAA8xD,EAAAE,IAGAlB,EAAA9wD,KAAA6vD,EAAA,GACAiB,EAAA9wD,KAAA6vD,EAAA,GACAjkE,KAAA0sD,IAAAt4C,KAAAs4C,EAAA,GACA2V,EAAAjuD,KAAAyjC,EACAqtB,EAAA9wD,KAAA8xD,EAAAE,IAGAlB,EAAA9wD,KAAA6vD,EAAA,GACAiB,EAAA9wD,KAAA6vD,EAAA,GACAjkE,KAAA0sD,IAAAt4C,KAAAs4C,EAAA,GACA2V,EAAAjuD,KAAAyjC,EACAqtB,EAAA9wD,KAAA8xD,EAAAE,IAGAlB,EAAA9wD,KAAA6vD,EAAA,GACAiB,EAAA9wD,KAAA6vD,EAAA,GACAjkE,KAAA0sD,IAAAt4C,KAAAs4C,EAAA,GACA2V,EAAAjuD,KAAAyjC,EACAqtB,EAAA9wD,KAAA8xD,EAAAE,MAOAlgB,EAAArjD,UAAAmxC,MAAA,WAEA,GAAA,IAAAh0C,KAAA8xC,aAAA,CAEA,GAAA1vC,GAAApC,KAAA6oC,SAAAzmC,EAGApC,MAAA0lE,aAAA36D,KAAA/K,KAAA8xC,aAAA9xC,KAAA0lE,aAAAl7D,KACA,KAAA,GAAA7J,GAAA,EAAAA,EAAAX,KAAA0lE,aAAAxF,aAAAv/D,IAEAX,KAAA0lE,aAAAH,SAAA5kE,GAAAwlE,UAAA,CAMA,IAAAnmE,KAAAsmE,iBAAA,GAAAtmE,KAAA+K,KAEA/K,KAAAo8D,aAAAx5D,OAAA5C,KAAAu8D,SAAA,GAAA,OAGA,CAEA,GAAA3yB,GAAA5pC,KAAAklE,UAAAqB,SAAA,EAAAvmE,KAAA8xC,aAAA9xC,KAAA4tD,aACA5tD,MAAAo8D,aAAAx5D,OAAAgnC,EAAA,GAAA;CAQA,IAJA5pC,KAAA6oC,SAAAiY,WAAA9gD,KAAA+lE,SACA/lE,KAAA6oC,SAAA8X,iBAAAC,aAAA,GAGAjgD,EAAA,EAAAA,EAAAX,KAAAqlE,WAAA1kE,IAAA,CAIA,IAAA,GAFA6lE,GAAAxmE,KAAAslE,OAAA3kE,GAEA+oB,EAAA,EAAAA,EAAA88C,EAAAtG,aAAAx2C,IACA1pB,KAAA6oC,SAAAxgC,YAAAm+D,EAAAjB,SAAA77C,GAAAA,EAGAtnB,GAAA4I,aAAA5I,EAAA6sC,UAAA,EAAAu3B,EAAAz7D,KAAA3I,EAAA6I,eAAA,EAAAu7D,EAAAh8D,MAAA,GAIAxK,KAAA2lE,eAAA,KACA3lE,KAAA8xC,aAAA,EACA9xC,KAAAkgE,aAAA,EACAlgE,KAAAqlE,WAAA,EAEArlE,KAAA0lE,aAAA1lE,KAAAslE,OAAAtlE,KAAAqlE,cACArlE,KAAA0lE,aAAAxF,aAAA,IAOAha,EAAArjD,UAAA2H,MAAA,WAEAxK,KAAAgmE,IAAAhjE,QAGAkjD,EAAArjD,UAAAmxB,KAAA,WAEAh0B,KAAAg0C,QACAh0C,KAAAgmE,IAAA5gE,UAMA8gD,EAAArjD,UAAA0C,QAAA,WAEAvF,KAAAo8D,aAAA72D,UACAvF,KAAA8J,YAAAvE,UAEAm6C,EAAA78C,UAAA0C,QAAAxE,KAAAf,MAEAA,KAAAqN,OAAA9H,UAEAvF,KAAA6oC,SAAA,KAEA7oC,KAAAu8D,SAAA,KACAv8D,KAAAklE,UAAA,KACAllE,KAAAqiE,OAAA,KACAriE,KAAAohD,QAAA,KAEAphD,KAAAo8D,aAAA,KACAp8D,KAAA8J,YAAA,KAEA9J,KAAAymE,QAAA,KACAzmE,KAAAqN,OAAA,QAGAo0C,cAAA,GAAAE,sCAAA,GAAA+kB,+CAAA,GAAA9kB,6CAAA,GAAA+kB,oCAAA,IAAAC,+BAAA,GAAA9/B,eAAA,IAAA+/B,IAAA,SAAAnmE,EAAAjB,EAAAD,GAIA,QAAAomE,GAAAxjE,EAAA0kE,GAEA,GAAAxgE,GAAA,geACAC,EAAA,4BAAAwgE,EAAAD,GAAA,OAAAE,CAEAzgE,GAAAA,EAAA0I,QAAA,SAAA,KAMA,KAAA,GAJA5B,GAAA,GAAAhH,GAAAjE,EAAAkE,EAAAC,GAGA0gE,KACAtmE,EAAA,EAAAmmE,EAAAnmE,EAAAA,IACAsmE,EAAAtmE,GAAAA,CAMA,OAHA0M,GAAArK,OACAqK,EAAA1G,SAAAugE,UAAAD,EAEA55D,EAGA,QAAA05D,GAAAD,GAEA,GAAA15D,GAAA,oFAEAA,IAAA,KACAA,GAAA,IAEA,KAAA,GAAAzM,GAAA,EAAAmmE,EAAAnmE,EAAAA,IAEAA,EAAA,IAAAyM,GAAA,WACA05D,EAAA,EAAAnmE,IAAAyM,GAAA,aAAAzM,EAAA,KACAyM,GAAA,MACAA,GAAA,iCAAAzM,EAAA,UACAyM,GAAA,KAQA,OALAA,IAAA,KACAA,GAAA,KACAA,GAAA,gBACAA,GAAA,MA3CA,GAAA/G,GAAA3F,EAAA,gBAAAY,SAgDA0lE,GAEA,8BACA,uBACA,4BACA,mCAEA,mBACA,yFACA,KACAp2D,KAAA,KAEAnR,GAAAD,QAAAomE,IAEA9+B,eAAA,IAAAqgC,IAAA,SAAAzmE,EAAAjB,EAAAD,GA2CA,QAAA4mD,GAAAxiB,EAAAkF,EAAA2G,GAOAzvC,KAAAoL,OAAAy0B,SAAAC,cAAA,UAMA9/B,KAAA+3B,QAAA/3B,KAAAoL,OAAAC,WAAA,MAMArL,KAAAyvC,WAAAA,GAAA1C,EAAAuC,WAQAtvC,KAAAonE,MAAA,KAQApnE,KAAAqnE,OAAA,IAEA,IAAApjE,GAAAP,EAAAi6C,WAAA39C,KAAAoL,OACAnH,GAAAmhB,KAAA,GAAAurB,GAAAqC,UACAgT,EAAAjlD,KAAAf,KAAAiE,GAEAjE,KAAA4jC,KAAAA,EACA5jC,KAAA8oC,MAAAA,EApFA,GAAAkd,GAAAtlD,EAAA,qBACAgD,EAAAhD,EAAA,uBACAiwC,EAAAjwC,EAAA,WACAmqC,EAAAnqC,EAAA,YACAqsC,EAAArsC,EAAA,WAoFA0lD,GAAAvjD,UAAA0M,OAAA/L,OAAAwiD,EAAAnjD,WACAujD,EAAAvjD,UAAAmH,YAAAo8C,EACA3mD,EAAAD,QAAA4mD,EAEAA,EAAAkhB,uBACAlhB,EAAAmhB,qBAAA1nC,SAAAC,cAAA,UACAsmB,EAAAohB,sBAAAphB,EAAAmhB,qBAAAl8D,WAAA,MAEAkE,OAAAwhC,iBAAAqV,EAAAvjD,WAOAe,OACAoM,IAAA,WAOA,MALAhQ,MAAA+J,OAEA/J,KAAAynE,aAGAznE,KAAAgxC,MAAAr8B,EAAA3U,KAAAowD,SAAAM,OAAA9sD,OAEAsM,IAAA,SAAAf,GAEAnP,KAAAgxC,MAAAr8B,EAAAxF,EAAAnP,KAAAowD,SAAAM,OAAA9sD,MACA5D,KAAAkxC,OAAA/hC,IAUAtL,QACAmM,IAAA,WAOA,MALAhQ,MAAA+J,OAEA/J,KAAAynE,aAGAznE,KAAAgxC,MAAAl5B,EAAA9X,KAAAowD,SAAAM,OAAA7sD,QAEAqM,IAAA,SAAAf,GAEAnP,KAAAgxC,MAAAl5B,EAAA3I,EAAAnP,KAAAowD,SAAAM,OAAA7sD,OACA7D,KAAAmxC,QAAAhiC,IA8BA25B,OACA94B,IAAA,WAEA,MAAAhQ,MAAAqnE,QAEAn3D,IAAA,SAAA44B,GAEAA,EAAAA,MAEA,gBAAAA,GAAAiU,OACAjU,EAAAiU,KAAAlS,EAAAinB,WAAAhpB,EAAAiU,OAGA,gBAAAjU,GAAAgrB,SACAhrB,EAAAgrB,OAAAjpB,EAAAinB,WAAAhpB,EAAAgrB,SAGA,gBAAAhrB,GAAA4+B,kBACA5+B,EAAA4+B,gBAAA78B,EAAAinB,WAAAhpB,EAAA4+B,kBAGA5+B,EAAA6+B,KAAA7+B,EAAA6+B,MAAA,kBACA7+B,EAAAiU,KAAAjU,EAAAiU,MAAA,QACAjU,EAAA8+B,MAAA9+B,EAAA8+B,OAAA,OACA9+B,EAAAgrB,OAAAhrB,EAAAgrB,QAAA,QACAhrB,EAAA++B,gBAAA/+B,EAAA++B,iBAAA,EACA/+B,EAAAg/B,SAAAh/B,EAAAg/B,WAAA,EACAh/B,EAAAi/B,cAAAj/B,EAAAi/B,eAAA,IAEAj/B,EAAAk/B,WAAAl/B,EAAAk/B,aAAA,EACAl/B,EAAA4+B,gBAAA5+B,EAAA4+B,iBAAA,UACA5+B,EAAAm/B,gBAAA//D,SAAA4gC,EAAAm/B,gBAAAn/B,EAAAm/B,gBAAAzyD,KAAA03B,GAAA,EACApE,EAAAo/B,mBAAAhgE,SAAA4gC,EAAAo/B,mBAAAp/B,EAAAo/B,mBAAA,EACAp/B,EAAAq/B,eAAAjgE,SAAA4gC,EAAAq/B,eAAAr/B,EAAAq/B,eAAA,EAEAr/B,EAAAgW,QAAAhW,EAAAgW,SAAA,EAEAhW,EAAAs/B,aAAAt/B,EAAAs/B,cAAA,aAEAt/B,EAAAu/B,SAAAv/B,EAAAu/B,UAAA,QACAv/B,EAAAw/B,WAAAx/B,EAAAw/B,YAAA,GAEAtoE,KAAAqnE,OAAAv+B,EACA9oC,KAAA+J,OAAA,IAUA65B,MACA5zB,IAAA,WAEA,MAAAhQ,MAAAonE,OAEAl3D,IAAA,SAAA0zB,GACAA,EAAAA,EAAAnpB,YAAA,IACAza,KAAAonE,QAAAxjC,IAIA5jC,KAAAonE,MAAAxjC,EACA5jC,KAAA+J,OAAA,OAUAq8C,EAAAvjD,UAAA4kE,WAAA,WAEA,GAAA3+B,GAAA9oC,KAAAqnE,MACArnE,MAAA+3B,QAAA4vC,KAAA7+B,EAAA6+B,IAaA,KAAA,GATAY,GAAAz/B,EAAAg/B,SAAA9nE,KAAA8nE,SAAA9nE,KAAAonE,OAAApnE,KAAAonE,MAGAoB,EAAAD,EAAA54D,MAAA,kBAGA84D,EAAA,GAAA38D,OAAA08D,EAAAxnE,QACA0nE,EAAA,EACAC,EAAA3oE,KAAA4oE,wBAAA9/B,EAAA6+B,MACAhnE,EAAA,EAAAA,EAAA6nE,EAAAxnE,OAAAL,IACA,CACA,GAAA+2C,GAAA13C,KAAA+3B,QAAA8wC,YAAAL,EAAA7nE,IAAAiD,KACA6kE,GAAA9nE,GAAA+2C,EACAgxB,EAAAlzD,KAAAC,IAAAizD,EAAAhxB,GAGA,GAAA9zC,GAAA8kE,EAAA5/B,EAAA++B,eACA/+B,GAAAk/B,aAEApkE,GAAAklC,EAAAo/B,oBAGAloE,KAAAoL,OAAAxH,OAAAA,EAAA5D,KAAA+3B,QAAA2f,WAAA13C,KAAAyvC,UAGA,IAAAq5B,GAAA9oE,KAAA8oC,MAAAggC,YAAAH,EAAAI,SAAAjgC,EAAA++B,gBAEAhkE,EAAAilE,EAAAN,EAAAxnE,MACA8nC,GAAAk/B,aAEAnkE,GAAAilC,EAAAo/B,oBAGAloE,KAAAoL,OAAAvH,QAAAA,EAAA,EAAA7D,KAAAqnE,OAAAvoB,SAAA9+C,KAAAyvC,WAEAzvC,KAAA+3B,QAAAiZ,MAAAhxC,KAAAyvC,WAAAzvC,KAAAyvC,YAEA1P,UAAAC,YAEAhgC,KAAA+3B,QAAAi7B,UAAA,EAAA,EAAAhzD,KAAAoL,OAAAxH,MAAA5D,KAAAoL,OAAAvH,QAOA7D,KAAA+3B,QAAA4vC,KAAA7+B,EAAA6+B,KACA3nE,KAAA+3B,QAAA87B,YAAA/qB,EAAAgrB,OACA9zD,KAAA+3B,QAAA2f,UAAA5O,EAAA++B,gBACA7nE,KAAA+3B,QAAAqwC,aAAAt/B,EAAAs/B,aACApoE,KAAA+3B,QAAAswC,SAAAv/B,EAAAu/B,SACAroE,KAAA+3B,QAAAuwC,WAAAx/B,EAAAw/B,UAEA,IAAAU,GACAC,CAEA,IAAAngC,EAAAk/B,WACA,CACAl/B,EAAAq/B,eAAA,GACAnoE,KAAA+3B,QAAAmxC,YAAApgC,EAAA4+B,gBACA1nE,KAAA+3B,QAAAoxC,WAAArgC,EAAAq/B,gBAEAnoE,KAAA+3B,QAAAg7B,UAAAjqB,EAAA4+B,eAGA,IAAA0B,GAAA5zD,KAAAugC,IAAAjN,EAAAm/B,iBAAAn/B,EAAAo/B,mBACAmB,EAAA7zD,KAAAsgC,IAAAhN,EAAAm/B,iBAAAn/B,EAAAo/B,kBAEA,KAAAvnE,EAAA,EAAAA,EAAA6nE,EAAAxnE,OAAAL,IAEAqoE,EAAAlgC,EAAA++B,gBAAA,EACAoB,EAAAngC,EAAA++B,gBAAA,EAAAlnE,EAAAmoE,EAAAH,EAAAW,OAEA,UAAAxgC,EAAA8+B,MAEAoB,GAAAN,EAAAD,EAAA9nE,GAEA,WAAAmoC,EAAA8+B,QAEAoB,IAAAN,EAAAD,EAAA9nE,IAAA,GAGAmoC,EAAAiU,MAEA/8C,KAAA+3B,QAAAwxC,SAAAf,EAAA7nE,GAAAqoE,EAAAI,EAAAH,EAAAI,EAAArpE,KAAAqnE,OAAAvoB,SASA,IAHA9+C,KAAA+3B,QAAAg7B,UAAAjqB,EAAAiU,KAGAp8C,EAAA,EAAAA,EAAA6nE,EAAAxnE,OAAAL,IAEAqoE,EAAAlgC,EAAA++B,gBAAA,EACAoB,EAAAngC,EAAA++B,gBAAA,EAAAlnE,EAAAmoE,EAAAH,EAAAW,OAEA,UAAAxgC,EAAA8+B,MAEAoB,GAAAN,EAAAD,EAAA9nE,GAEA,WAAAmoC,EAAA8+B,QAEAoB,IAAAN,EAAAD,EAAA9nE,IAAA,GAGAmoC,EAAAgrB,QAAAhrB,EAAA++B,iBAEA7nE,KAAA+3B,QAAAyxC,WAAAhB,EAAA7nE,GAAAqoE,EAAAC,EAAAjpE,KAAAqnE,OAAAvoB,SAGAhW,EAAAiU,MAEA/8C,KAAA+3B,QAAAwxC,SAAAf,EAAA7nE,GAAAqoE,EAAAC,EAAAjpE,KAAAqnE,OAAAvoB,QAIA9+C,MAAAswD,iBAQAlK,EAAAvjD,UAAAytD,cAAA,WAEA,GAAArsD,GAAAjE,KAAAowD,QAEAnsD,GAAA25C,YAAAqZ,WAAA,EACAhzD,EAAA25C,YAAAnO,WAAAzvC,KAAAyvC,WAEAxrC,EAAA25C,YAAAh6C,MAAA5D,KAAAoL,OAAAxH,MAAA5D,KAAAyvC,WACAxrC,EAAA25C,YAAA/5C,OAAA7D,KAAAoL,OAAAvH,OAAA7D,KAAAyvC,WACAxrC,EAAAwsD,KAAA7sD,MAAAK,EAAAysD,OAAA9sD,MAAA5D,KAAAoL,OAAAxH,MAAA5D,KAAAyvC,WACAxrC,EAAAwsD,KAAA5sD,OAAAI,EAAAysD,OAAA7sD,OAAA7D,KAAAoL,OAAAvH,OAAA7D,KAAAyvC,WAEAxrC,EAAAmhB,KAAAzQ,EAAA,EACA1Q,EAAAmhB,KAAAtN,GAAA9X,KAAAqnE,OAAAvoB,QAEA76C,EAAAmhB,KAAAxhB,MAAAK,EAAAysD,OAAA9sD,MACAK,EAAAmhB,KAAAvhB,OAAAI,EAAAysD,OAAA7sD,OAAA,EAAA7D,KAAAqnE,OAAAvoB,QAEA9+C,KAAAkxC,OAAAlxC,KAAAoL,OAAAxH,MAAA5D,KAAAyvC,WACAzvC,KAAAmxC,QAAAnxC,KAAAoL,OAAAvH,OAAA7D,KAAAyvC,WAEAxrC,EAAA25C,YAAAx2B,KAAA,SAAAnjB,EAAA25C,aAEA59C,KAAA+J,OAAA,GAQAq8C,EAAAvjD,UAAA6wC,YAAA,SAAA7K,GAEA7oC,KAAA+J,OAIA/J,KAAAynE,aAGAzhB,EAAAnjD,UAAA6wC,YAAA3yC,KAAAf,KAAA6oC,IASAud,EAAAvjD,UAAA2xC,cAAA,SAAA3L,GAEA7oC,KAAA+J,OAIA/J,KAAAynE,aAGAzhB,EAAAnjD,UAAA2xC,cAAAzzC,KAAAf,KAAA6oC,IASAud,EAAAvjD,UAAA+lE,wBAAA,SAAAa,GAEA,GAAAzd,GAAA5F,EAAAkhB,oBAAAmC,EAEA,KAAAzd,EACA,CACAA,IAEA,IAAA5gD,GAAAg7C,EAAAmhB,qBACAxvC,EAAAquB,EAAAohB,qBAEAzvC,GAAA4vC,KAAA8B,CAEA,IAAA7lE,GAAA4R,KAAAymC,KAAAlkB,EAAA8wC,YAAA,QAAAjlE,OACA8lE,EAAAl0D,KAAAymC,KAAAlkB,EAAA8wC,YAAA,KAAAjlE,OACAC,EAAA,EAAA6lE,CAEAA,GAAA,IAAAA,EAAA,EAEAt+D,EAAAxH,MAAAA,EACAwH,EAAAvH,OAAAA,EAEAk0B,EAAAg7B,UAAA,OACAh7B,EAAAk7B,SAAA,EAAA,EAAArvD,EAAAC,GAEAk0B,EAAA4vC,KAAA8B,EAEA1xC,EAAAqwC,aAAA,aACArwC,EAAAg7B,UAAA,OACAh7B,EAAAwxC,SAAA,OAAA,EAAAG,EAEA,IAIA/oE,GAAA+oB,EAJAigD,EAAA5xC,EAAAs+B,aAAA,EAAA,EAAAzyD,EAAAC,GAAAvB,KACAg0D,EAAAqT,EAAA3oE,OACA4oE,EAAA,EAAAhmE,EAIAya,EAAA,EACA2V,GAAA,CAGA,KAAArzB,EAAA,EAAA+oE,EAAA/oE,EAAAA,IACA,CACA,IAAA+oB,EAAA,EAAAkgD,EAAAlgD,EAAAA,GAAA,EAEA,GAAA,MAAAigD,EAAAtrD,EAAAqL,GACA,CACAsK,GAAA,CACA,OAGA,GAAAA,EAMA,KAJA3V,IAAAurD,EAcA,IANA5d,EAAAsd,OAAAI,EAAA/oE,EAEA0d,EAAAi4C,EAAAsT,EACA51C,GAAA,EAGArzB,EAAAkD,EAAAlD,EAAA+oE,EAAA/oE,IACA,CACA,IAAA+oB,EAAA,EAAAkgD,EAAAlgD,EAAAA,GAAA,EAEA,GAAA,MAAAigD,EAAAtrD,EAAAqL,GACA,CACAsK,GAAA,CACA,OAGA,GAAAA,EAMA,KAJA3V,IAAAurD,EAQA5d,EAAA6d,QAAAlpE,EAAA+oE,EACA1d,EAAA+c,SAAA/c,EAAAsd,OAAAtd,EAAA6d,QAEAzjB,EAAAkhB,oBAAAmC,GAAAzd,EAGA,MAAAA,IAUA5F,EAAAvjD,UAAAilE,SAAA,SAAAlkC,GAOA,IAAA,GAHAtvB,GAAA,GACAk0D,EAAA5kC,EAAAj0B,MAAA,MACAo4D,EAAA/nE,KAAAqnE,OAAAU,cACApnE,EAAA,EAAAA,EAAA6nE,EAAAxnE,OAAAL,IACA,CAGA,IAAA,GAFAmpE,GAAA/B,EACAgC,EAAAvB,EAAA7nE,GAAAgP,MAAA,KACA+Z,EAAA,EAAAA,EAAAqgD,EAAA/oE,OAAA0oB,IACA,CACA,GAAAsgD,GAAAhqE,KAAA+3B,QAAA8wC,YAAAkB,EAAArgD,IAAA9lB,MACAqmE,EAAAD,EAAAhqE,KAAA+3B,QAAA8wC,YAAA,KAAAjlE,KACA,KAAA8lB,GAAAugD,EAAAH,GAIApgD,EAAA,IAEApV,GAAA,MAEAA,GAAAy1D,EAAArgD,GACAogD,EAAA/B,EAAAiC,IAIAF,GAAAG,EACA31D,GAAA,IAAAy1D,EAAArgD,IAIA/oB,EAAA6nE,EAAAxnE,OAAA,IAEAsT,GAAA,MAGA,MAAAA,IASA8xC,EAAAvjD,UAAAyoC,UAAA,SAAA6K,GAOA,MALAn2C,MAAA+J,OAEA/J,KAAAynE,aAGAzhB,EAAAnjD,UAAAyoC,UAAAvqC,KAAAf,KAAAm2C,IAQAiQ,EAAAvjD,UAAA0C,QAAA,SAAAi/D,GAGAxkE,KAAA+3B,QAAA,KACA/3B,KAAAoL,OAAA,KAEApL,KAAAqnE,OAAA,KAEArnE,KAAAowD,SAAA7qD,QAAA2C,SAAAs8D,GAAA,EAAAA,MAGAztB,WAAA,GAAAnC,UAAA,GAAAs1B,oBAAA,GAAA/qB,sBAAA,IAAArK,WAAA,MAAAq1B,IAAA,SAAAzpE,EAAAjB,EAAAD,GAqDA,QAAA8mD,GAAAzd,EAAAjlC,EAAAC,EAAA0uC,EAAA9C,GAEA,IAAA5G,EAEA,KAAA,IAAAjoC,OAAA,qFAuCA,IApCAylD,EAAAtlD,KAAAf,KAAA,KAAAuyC,GAEAvyC,KAAA4D,MAAAA,GAAA,IACA5D,KAAA6D,OAAAA,GAAA,IAEA7D,KAAAyvC,WAAAA,GAAA1C,EAAAuC,WACAtvC,KAAAuyC,UAAAA,GAAAxF,EAAAqC,YAAA/M,QACAriC,KAAAi3D,WAAA,EAmBAj3D,KAAA0yC,OAAA,KAOA1yC,KAAA6oC,SAAAA,EAGA7oC,KAAA6oC,SAAAxmC,OAAA0qC,EAAAO,cAAAE,MACA,CACA,GAAAprC,GAAApC,KAAA6oC,SAAAzmC,EAEApC,MAAAoqE,cAAA,GAAAzjB,GAAAvkD,EAAApC,KAAA4D,MAAA5D,KAAA6D,OAAA7D,KAAAuyC,UAAAvyC,KAAAyvC,YACAzvC,KAAAqwD,YAAAjuD,EAAAkJ,IAAAtL,KAAAoqE,cAAAnmE,QAGAjE,KAAAi0C,cAAA,GAAA8jB,GAAA/3D,KAAA6oC,UACA7oC,KAAAi0C,cAAAsM,kBACAvgD,KAAAi0C,cAAA5uC,OAAAzB,EAAAC,GACA7D,KAAA0yC,OAAA1yC,KAAA0zC,YAGA1zC,KAAA6oC,SAAAkL,gBAAAvpC,QACAxK,KAAA6oC,SAAAyvB,qBAAAt4D,KAAA6oC,SAAAyvB,oBAAApuD,eAKAlK,MAAA0yC,OAAA1yC,KAAAy0C,aACAz0C,KAAAoqE,cAAA,GAAA5xB,GAAAx4C,KAAA4D,MAAA5D,KAAAyvC,WAAAzvC,KAAA6D,OAAA7D,KAAAyvC,YACAzvC,KAAAwH,OAAAxH,KAAAoqE,cAAAh/D,MAMApL,MAAAqkE,OAAA,EA3HA,GAAAhe,GAAA3lD,EAAA,iBACAgD,EAAAhD,EAAA,aACAimD,EAAAjmD,EAAA,yCACAq3D,EAAAr3D,EAAA,6CACA83C,EAAA93C,EAAA,0CACAiwC,EAAAjwC,EAAA,WACAqsC,EAAArsC,EAAA,YACAsuD,EAAA,GAAAre,GAAAG,OACAu5B,EAAA,GAAA15B,GAAAqC,SAuHAsT,GAAAzjD,UAAA0M,OAAA/L,OAAA6iD,EAAAxjD,WACAyjD,EAAAzjD,UAAAmH,YAAAs8C,EACA7mD,EAAAD,QAAA8mD,EASAA,EAAAzjD,UAAAwC,OAAA,SAAAzB,EAAAC,IAEAD,IAAA5D,KAAA4D,OAAAC,IAAA7D,KAAA6D,UAKA7D,KAAAqkE,MAAAzgE,EAAA,GAAAC,EAAA,EAEA7D,KAAA4D,MAAAA,EACA5D,KAAA6D,OAAAA,EAEA7D,KAAAqkE,QAKArkE,KAAAoqE,cAAA/kE,OAAArF,KAAA4D,MAAA5D,KAAA6D,QAEA7D,KAAAi0C,eAEAj0C,KAAAi0C,cAAA5uC,OAAArF,KAAA4D,MAAA5D,KAAA6D,WAQAyiD,EAAAzjD,UAAAkC,MAAA,SAAA49D,GAEA3iE,KAAAqkE,QAKArkE,KAAA6oC,SAAAxmC,OAAA0qC,EAAAO,cAAAE,OAEAxtC,KAAA6oC,SAAAzmC,GAAA+C,gBAAAnF,KAAA6oC,SAAAzmC,GAAAgC,YAAApE,KAAAoqE,cAAA3H,aAGAziE,KAAAoqE,cAAArlE,OAAA,EAAA49D,KAaArc,EAAAzjD,UAAA6wC,YAAA,SAAA0Z,EAAAnjB,EAAAkM,EAAApxC,EAAA4tC,GAEA,GAAA3yC,KAAAqkE,MAAA,CAgBA,GAVA1xB,EAAAzqC,SAAAyqC,EAAAA,GAAA,EAEA3yC,KAAAoqE,cAAA3tD,UAAA05B,EAGAn2C,KAAAoqE,cAAAlgE,WAGA+/B,EAAA0J,WAAA,EAEAhB,EACA,CAGA1I,EAAAiB,eAAA53B,WAEA22B,EAAAqgC,cAAA,IAGA,IACA3pE,GAAA+oB,EADA2f,EAAAY,EAAAZ,QAGA,KAAA1oC,EAAA,EAAA+oB,EAAA2f,EAAAroC,OAAA0oB,EAAA/oB,IAAAA,EAEA0oC,EAAA1oC,GAAAgyC,kBAIA03B,EAAAzmE,MAAAwpD,EAAAvpD,OACAwmE,EAAAxmE,OAAAupD,EAAAxpD,KAGA,IAAA+4D,GAAA38D,KAAA6oC,SAAAoL,aAEAj0C,MAAA6oC,SAAAoL,cAAAj0C,KAAAi0C,cAGAj0C,KAAAoqE,cAAAlgE,SAAAkjD,EAAAid,GACAz9D,QAAAc,IAAAu8B,GACAjqC,KAAA6oC,SAAAqqB,oBAAAjpB,EAAAjqC,KAAAoqE,cAAArlE,GAGA/E,KAAA6oC,SAAAoL,cAAA0oB,IAYArW,EAAAzjD,UAAA4xC,aAAA,SAAA2Y,EAAAnjB,EAAAkM,EAAApxC,EAAA4tC,GAEA,GAAA3yC,KAAAqkE,MAAA,CAKA1xB,IAAAA,CAEA,IAAA1H,GAAA+jB,CAEA/jB,GAAA33B,WAEA6iC,GAEAlL,EAAAwe,OAAAtT,GAIAlL,EAAAE,IAAAiiB,EAAAz4C,EACAs2B,EAAAG,IAAAgiB,EAAAt1C,CAEA,IAAAyyD,GAAAtgC,EAAAiB,cAEAjB,GAAAiB,eAAAD,EAGAhB,EAAA0J,WAAA,CAGA,IACAhzC,GAAA+oB,EADA2f,EAAAY,EAAAZ,QAGA,KAAA1oC,EAAA,EAAA+oB,EAAA2f,EAAAroC,OAAA0oB,EAAA/oB,IAAAA,EAEA0oC,EAAA1oC,GAAAgyC,iBAGA5tC,IAEA/E,KAAAoqE,cAAArlE,OAKA,IAAAgzB,GAAA/3B,KAAAoqE,cAAAryC,QAEAyyC,EAAAxqE,KAAA6oC,SAAA4G,UAEAzvC,MAAA6oC,SAAA4G,WAAAzvC,KAAAyvC,WAEAzvC,KAAA6oC,SAAAqqB,oBAAAjpB,EAAAlS,GAEA/3B,KAAA6oC,SAAA4G,WAAA+6B,EAEAvgC,EAAAiB,iBAAAD,IAGAhB,EAAAiB,eAAAq/B,KAUAjkB,EAAAzjD,UAAA0C,QAAA,WAEA7B,EAAAb,UAAA0C,QAAAxE,KAAAf,MAAA,GAEAA,KAAAoqE,cAAA7kE,UAGAvF,KAAAi0C,eAEAj0C,KAAAi0C,cAAA1uC,UAGAvF,KAAA6oC,SAAA,MAQAyd,EAAAzjD,UAAA4nE,SAAA,SAAArd,GAEA,GAAAsd,GAAA,GAAAhrC,MAEA,OADAgrC,GAAAt9D,IAAApN,KAAA2qE,UAAAvd,GACAsd,GAQApkB,EAAAzjD,UAAA8nE,UAAA,SAAAvd,GAEA,MAAAptD,MAAA4qE,UAAAxd,GAAA2I,aAQAzP,EAAAzjD,UAAA+nE,UAAA,SAAAxd,GAIA,GAAAptD,KAAA6oC,SAAAxmC,OAAA0qC,EAAAO,cAAAE,MACA,CACA4f,IAEAA,EAAAid,EACAjd,EAAAxpD,MAAA5D,KAAAoqE,cAAAr/D,KAAAnH,MACAwpD,EAAAvpD,OAAA7D,KAAAoqE,cAAAr/D,KAAAlH,OAGA,IAAAD,GAAAwpD,EAAAxpD,MAAA5D,KAAAyvC,WACA5rC,EAAAupD,EAAAvpD,OAAA7D,KAAAyvC,WAEArtC,EAAApC,KAAA6oC,SAAAzmC,GAEAyoE,EAAA,GAAAC,YAAA,EAAAlnE,EAAAC,EAEAzB,GAAA+C,gBAAA/C,EAAAgC,YAAApE,KAAAoqE,cAAA3H,aACArgE,EAAA2oE,WAAA3d,EAAAz4C,EAAA3U,KAAAyvC,WAAA2d,EAAAt1C,EAAA9X,KAAAyvC,WAAA7rC,EAAAC,EAAAzB,EAAAkF,KAAAlF,EAAAmF,cAAAsjE,GACAzoE,EAAA+C,gBAAA/C,EAAAgC,YAAA,KAEA,IAAA4mE,GAAA,GAAAxyB,GAAA50C,EAAAC,GACAonE,EAAAD,EAAAjzC,QAAAs+B,aAAA,EAAA,EAAAzyD,EAAAC,EAKA,OAJAonE,GAAA3oE,KAAA4N,IAAA26D,GAEAG,EAAAjzC,QAAAw+B,aAAA0U,EAAA,EAAA,GAEAD,EAAA5/D,OAWA,GAPAgiD,IAEAA,EAAAid,EACAjd,EAAAxpD,MAAA5D,KAAAoqE,cAAAh/D,OAAAxH,MACAwpD,EAAAvpD,OAAA7D,KAAAoqE,cAAAh/D,OAAAvH,QAGAupD,EAAAxpD,QAAA5D,KAAAoqE,cAAAh/D,OAAAxH,OACAwpD,EAAAvpD,SAAA7D,KAAAoqE,cAAAh/D,OAAAvH,OAEA,MAAA7D,MAAAoqE,cAAAh/D,MAKA,IAAAqkC,GAAAzvC,KAAAyvC,WAEAu7B,EAAA,GAAAxyB,GAAA4U,EAAAxpD,MAAA6rC,EAAA2d,EAAAvpD,OAAA4rC,GACAw7B,EAAAjrE,KAAAoqE,cAAAryC,QAAAs+B,aAAAjJ,EAAAz4C,EAAA86B,EAAA2d,EAAAt1C,EAAA23B,EAAA2d,EAAAxpD,MAAA6rC,EAAA2d,EAAAvpD,OAAA4rC,EAIA,OAFAu7B,GAAAjzC,QAAAw+B,aAAA0U,EAAA,EAAA,GAEAD,EAAA5/D,QAUAk7C,EAAAzjD,UAAAqoE,UAAA,SAAA9d,GAEAA,IAEAA,EAAAid,EACAjd,EAAAxpD,MAAA5D,KAAAoqE,cAAAr/D,KAAAnH,MACAwpD,EAAAvpD,OAAA7D,KAAAoqE,cAAAr/D,KAAAlH,OAGA,IAAAD,GAAAwpD,EAAAxpD,MAAA5D,KAAAyvC,WACA5rC,EAAAupD,EAAAvpD,OAAA7D,KAAAyvC,UAEA,IAAAzvC,KAAA6oC,SAAAxmC,OAAA0qC,EAAAO,cAAAE,MACA,CACA,GAAAprC,GAAApC,KAAA6oC,SAAAzmC,GAEAyoE,EAAA,GAAAC,YAAA,EAAAlnE,EAAAC,EAMA,OAJAzB,GAAA+C,gBAAA/C,EAAAgC,YAAApE,KAAAoqE,cAAA3H,aACArgE,EAAA2oE,WAAA3d,EAAAz4C,EAAA3U,KAAAyvC,WAAA2d,EAAAt1C,EAAA9X,KAAAyvC,WAAA7rC,EAAAC,EAAAzB,EAAAkF,KAAAlF,EAAAmF,cAAAsjE,GACAzoE,EAAA+C,gBAAA/C,EAAAgC,YAAA,MAEAymE,EAIA,MAAA7qE,MAAAoqE,cAAAh/D,OAAAC,WAAA,MAAAgrD,aAAAjJ,EAAAz4C,EAAA3U,KAAAyvC,WAAA2d,EAAAt1C,EAAA9X,KAAAyvC,WAAA7rC,EAAAC,GAAAvB,MAWAgkD,EAAAzjD,UAAAsoE,SAAA,SAAA/d,EAAAz4C,EAAAmD,GAaA,MAXAuyD,GAAA11D,EAAAA,EACA01D,EAAAvyD,EAAAA,EACAuyD,EAAAzmE,MAAA,EAAA5D,KAAAyvC,WACA46B,EAAAxmE,OAAA,EAAA7D,KAAAyvC,WAEA2d,IAEAid,EAAA11D,GAAAy4C,EAAAz4C,EACA01D,EAAAvyD,GAAAs1C,EAAAt1C,GAGA9X,KAAAkrE,UAAAb,MAGAtzB,WAAA,GAAAnC,UAAA,GAAAqK,yCAAA,GAAAmsB,4CAAA,GAAAC,wCAAA,GAAAC,gBAAA,GAAAC,YAAA,MAAAC,IAAA,SAAA9qE,EAAAjB,EAAAD,GAcA,QAAA6mD,GAAA7+C,EAAA+qC,EAAA9C,GAEAzX,EAAAj3B,KAAAf,MAEAA,KAAAm3D,IAAAtsB,EAAAssB,MAOAn3D,KAAAyvC,WAAAA,GAAA,EAQAzvC,KAAA4D,MAAA,IAQA5D,KAAA6D,OAAA,IAUA7D,KAAAyrE,UAAA,IAOAzrE,KAAA0rE,WAAA,IASA1rE,KAAAuyC,UAAAA,GAAAxF,EAAAqC,YAAA/M,QAUAriC,KAAAi3D,WAAA,EAYAj3D,KAAA2rE,WAAA,EAUA3rE,KAAAwH,OAAA,KAQAxH,KAAA23D,oBAAA,EAKA33D,KAAA4rE,SAAA,KAOA5rE,KAAA6rE,cAAA,EAWA7rE,KAAAoH,QAAA,EAQApH,KAAAqwD,eACArwD,KAAA8rE,SAAA,EACA9rE,KAAAomE,IAAA,EAGA5+D,GAEAxH,KAAA+rE,WAAAvkE,GAhJA,GAAAqjC,GAAAnqC,EAAA,YACAqsC,EAAArsC,EAAA,YACAs3B,EAAAt3B,EAAA,gBAkKA2lD,GAAAxjD,UAAA0M,OAAA/L,OAAAw0B,EAAAn1B,WACAwjD,EAAAxjD,UAAAmH,YAAAq8C,EACA5mD,EAAAD,QAAA6mD,EAOAA,EAAAxjD,UAAA8mC,OAAA,WAEA3pC,KAAAyrE,UAAAzrE,KAAAwH,OAAAwkE,cAAAhsE,KAAAwH,OAAA5D,MACA5D,KAAA0rE,WAAA1rE,KAAAwH,OAAAykE,eAAAjsE,KAAAwH,OAAA3D,OAEA7D,KAAA4D,MAAA5D,KAAAyrE,UAAAzrE,KAAAyvC,WACAzvC,KAAA6D,OAAA7D,KAAA0rE,WAAA1rE,KAAAyvC,WAEAzvC,KAAA6rE,aAAAhhC,EAAAghC,aAAA7rE,KAAAyrE,UAAAzrE,KAAA0rE,YAEA1rE,KAAAonB,KAAA,SAAApnB,OA0BAqmD,EAAAxjD,UAAAkpE,WAAA,SAAAvkE,GAEA,GAAA0kE,GAAAlsE,KAAA2rE,SAaA,IAZA3rE,KAAAi3D,WAAA,EACAj3D,KAAA2rE,WAAA,EAEAO,GAAAlsE,KAAAwH,SAEAxH,KAAAwH,OAAAw3B,OAAA,KACAh/B,KAAAwH,OAAAq3B,QAAA,MAGA7+B,KAAAwH,OAAAA,GAGAxH,KAAAwH,OAAA+1B,UAAAv9B,KAAAwH,OAAA6D,aAAArL,KAAAwH,OAAA5D,OAAA5D,KAAAwH,OAAA3D,OAEA7D,KAAAmsE,oBAEA,KAAA3kE,EAAA6D,WACA,CAGArL,KAAA2rE,WAAA,CAEA,IAAAS,GAAApsE,IAEAwH,GAAAw3B,OAAA,WAEAx3B,EAAAw3B,OAAA,KACAx3B,EAAAq3B,QAAA,KAEAutC,EAAAT,YAKAS,EAAAT,WAAA,EACAS,EAAAD,gBAEAC,EAAAhlD,KAAA,SAAAglD,KAGA5kE,EAAAq3B,QAAA,WAEAr3B,EAAAw3B,OAAA,KACAx3B,EAAAq3B,QAAA,KAEAutC,EAAAT,YAKAS,EAAAT,WAAA,EACAS,EAAAhlD,KAAA,QAAAglD,KAOA5kE,EAAA+1B,UAAA/1B,EAAA4F,MAEApN,KAAA2rE,WAAA,EAGAnkE,EAAAw3B,OAAA,KACAx3B,EAAAq3B,QAAA,KAEAr3B,EAAA5D,OAAA4D,EAAA3D,QAEA7D,KAAAmsE,gBAGAD,GAEAlsE,KAAAonB,KAAA,SAAApnB,OAMAksE,GAEAlsE,KAAAonB,KAAA,QAAApnB,SAaAqmD,EAAAxjD,UAAAspE,cAAA,WAEAnsE,KAAAi3D,WAAA,EACAj3D,KAAA2pC,UAOA0c,EAAAxjD,UAAA0C,QAAA,WAEAvF,KAAA4rE,gBAEA/gC,GAAAwhC,iBAAArsE,KAAA4rE,gBACA/gC,GAAA85B,aAAA3kE,KAAA4rE,UAEA5rE,KAAA4rE,SAAA,KAEA7rC,UAAAC,aAEAhgC,KAAAwH,OAAA4F,IAAA,KAGApN,KAAAwH,QAAAxH,KAAAwH,OAAA8kE,eAEAzhC,GAAAwhC,iBAAArsE,KAAAwH,OAAA8kE,SAGAtsE,KAAAwH,OAAA,KAEAxH,KAAAusE,WASAlmB,EAAAxjD,UAAA0pE,QAAA,WAEAvsE,KAAAonB,KAAA,UAAApnB,OAYAqmD,EAAAxjD,UAAA2pE,kBAAA,SAAAC,GAEAzsE,KAAAwH,OAAA4F,IAAAq/D,EAEAzsE,KAAA+rE,WAAA/rE,KAAAwH,SAaA6+C,EAAAue,UAAA,SAAAgH,EAAA9G,EAAAvyB,GAEA,GAAAqL,GAAA/S,EAAAwhC,iBAAAT,EAOA,IALA1jE,SAAA48D,GAAA,IAAA8G,EAAAz/C,QAAA,WAEA24C,GAAA,IAGAlnB,EACA,CAGA,GAAA8sB,GAAA,GAAAhrC,MACAolC,KAEA4F,EAAA/tC,YAAA,IAGAihB,EAAA,GAAAyI,GAAAqkB,EAAAn4B,GACAqL,EAAAguB,SAAAA,EAEAlB,EAAAt9D,IAAAw+D,EAEA/gC,EAAAwhC,iBAAAT,GAAAhuB,EAGAA,EAAAnO,WAAA5E,EAAA6hC,mBAAAd,GAGA,MAAAhuB,IAWAyI,EAAA1I,WAAA,SAAAvyC,EAAAmnC,GAEAnnC,EAAAkhE,UAEAlhE,EAAAkhE,QAAA,UAAAzhC,EAAAssB,MAGA,IAAAvZ,GAAA/S,EAAAwhC,iBAAAjhE,EAAAkhE,QAQA,OANA1uB,KAEAA,EAAA,GAAAyI,GAAAj7C,EAAAmnC,GACA1H,EAAAwhC,iBAAAjhE,EAAAkhE,SAAA1uB,GAGAA,KAGA7G,WAAA,GAAAjC,WAAA,IAAAtY,cAAA,KAAAmwC,KAAA,SAAAjsE,EAAAjB,EAAAD,GAiDA,QAAAoxC,GAAAg8B,EAAAxf,GAEA,IAAAvkB,SAEA,KAAA,IAAAjoC,OAAA,iFAQA8C,GAAA3C,KAAAf,KACA4sE,EACAxf,GAMAptD,KAAAqkE,OAAA,EAEArkE,KAAA6sE,aAtEA,GAAAvmB,GAAA5lD,EAAA,uBACAgD,EAAAhD,EAAA,aACAiwC,EAAAjwC,EAAA,UACAA,GAAA,YACA,GAAAiwC,GAAAG,MAqEAF,GAAA/tC,UAAA0M,OAAA/L,OAAAE,EAAAb,WACA+tC,EAAA/tC,UAAAmH,YAAA4mC,EACAnxC,EAAAD,QAAAoxC,EASAA,EAAA/tC,UAAAwC,OAAA,SAAAzB,EAAAC,EAAAipE,GAIA9sE,KAAAqkE,MAAAzgE,EAAA,GAAAC,EAAA,EAEA7D,KAAA0wD,OAAA9sD,MAAA5D,KAAAywD,KAAA7sD,MAAAA,EACA5D,KAAA0wD,OAAA7sD,OAAA7D,KAAAywD,KAAA5sD,OAAAA,EAEAipE,GAEA9sE,KAAA49C,YAAAv4C,OAAAzB,EAAAC,GAGA7D,KAAA6sE,cAOAj8B,EAAA/tC,UAAAkC,MAAA,WAEA/E,KAAAqkE,OAKArkE,KAAA49C,YAAA74C,MAAA/E,KAAAotD,QAcAxc,EAAA/tC,UAAA6vC,OAAA,SAAAzI,EAAAkM,EAAApxC,EAAA4tC,GAEA3yC,KAAAqkE,OAKArkE,KAAA49C,YAAAlL,OAAA1yC,KAAAotD,MAAAnjB,EAAAkM,EAAApxC,EAAA4tC,IAQA/B,EAAA/tC,UAAA4nE,SAAA,WAEA,MAAAzqE,MAAA49C,YAAA6sB,SAAAzqE,KAAAotD,QAQAxc,EAAA/tC,UAAA8nE,UAAA,WAEA,MAAA3qE,MAAA2qE,UAAAF,SAAAzqE,KAAAotD,QAQAxc,EAAA/tC,UAAA+nE,UAAA,WAEA,MAAA5qE,MAAA49C,YAAAgtB,UAAA5qE,KAAAotD,QAQAxc,EAAA/tC,UAAAqoE,UAAA,WAEA,MAAAlrE,MAAA49C,YAAAstB,UAAAlrE,KAAAotD,QAUAxc,EAAA/tC,UAAAsoE,SAAA,SAAAx2D,EAAAmD,GAEA,MAAA9X,MAAA49C,YAAAutB,SAAAnrE,KAAAotD,MAAAz4C,EAAAmD,IAGA84B,EAAAptC,OAAA,SAAAqlC,EAAAjlC,EAAAC,EAAA0uC,EAAA9C,GAEA,MAAA,IAAAmB,GAAA,GAAA0V,GAAAzd,EAAAjlC,EAAAC,EAAA0uC,EAAA9C,OAIAsH,WAAA,GAAAnC,UAAA,GAAAm4B,sBAAA,GAAAxB,YAAA,MAAAyB,KAAA,SAAAtsE,EAAAjB,EAAAD,GA4BA,QAAAkE,GAAAk6C,EAAAwP,EAAAqD,EAAArrC,EAAAmkC,GAEAvxB,EAAAj3B,KAAAf,MAOAA,KAAAitE,SAAA,EAEA7f,IAEAptD,KAAAitE,SAAA,EACA7f,EAAA,GAAAzc,GAAAqC,UAAA,EAAA,EAAA,EAAA,IAGA4K,YAAAl6C,KAEAk6C,EAAAA,EAAAA,aAQA59C,KAAA49C,YAAAA,EAQA59C,KAAA0wD,OAAAtD,EAOAptD,KAAAolB,KAAAA,EAOAplB,KAAAqkE,OAAA,EAOArkE,KAAAktE,gBAAA,EAQAltE,KAAA8wD,KAAA,KAOA9wD,KAAA4D,MAAA,EAOA5D,KAAA6D,OAAA,EAQA7D,KAAAywD,KAAAA,GAAArD,EAQAptD,KAAAupD,SAAAA,EAEA3L,EAAAqZ,WAEAj3D,KAAAitE,UAEA7f,EAAA,GAAAzc,GAAAqC,UAAA,EAAA,EAAA4K,EAAAh6C,MAAAg6C,EAAA/5C,QAGA+5C,EAAA52B,GAAA,SAAAhnB,KAAAmtE,qBAAAntE,OAEAA,KAAAotD,MAAAA,GAIAxP,EAAA32B,KAAA,SAAAjnB,KAAAotE,oBAAAptE,MAxIA,GAAAqmD,GAAA3lD,EAAA,iBACA6lD,EAAA7lD,EAAA,sBACA8lD,EAAA9lD,EAAA,gBACAs3B,EAAAt3B,EAAA,iBACAiwC,EAAAjwC,EAAA,WACAmqC,EAAAnqC,EAAA,WA+IAgD,GAAAb,UAAA0M,OAAA/L,OAAAw0B,EAAAn1B,WACAa,EAAAb,UAAAmH,YAAAtG,EACAjE,EAAAD,QAAAkE,EAEA6L,OAAAwhC,iBAAArtC,EAAAb,WAOAuqD,OACAp9C,IAAA,WAEA,MAAAhQ,MAAA0wD,QAEAxgD,IAAA,SAAAk9C,GASA,GAPAptD,KAAA0wD,OAAAtD,EAEAptD,KAAAitE,SAAA,EAEAjtE,KAAA4D,MAAAwpD,EAAAxpD,MACA5D,KAAA6D,OAAAupD,EAAAvpD,QAEA7D,KAAAolB,OAAAplB,KAAAupD,SAAA6D,EAAAz4C,EAAAy4C,EAAAxpD,MAAA5D,KAAA49C,YAAAh6C,OAAAwpD,EAAAt1C,EAAAs1C,EAAAvpD,OAAA7D,KAAA49C,YAAA/5C,QAEA,KAAA,IAAAjD,OAAA,wEAAAZ,KAIAA,MAAAqkE,MAAAjX,GAAAA,EAAAxpD,OAAAwpD,EAAAvpD,QAAA7D,KAAA49C,YAAAqZ,UAEAj3D,KAAAolB,MAEAplB,KAAA4D,MAAA5D,KAAAolB,KAAAxhB,MACA5D,KAAA6D,OAAA7D,KAAAolB,KAAAvhB,OACA7D,KAAA0wD,OAAA9sD,MAAA5D,KAAAolB,KAAAxhB,MACA5D,KAAA0wD,OAAA7sD,OAAA7D,KAAAolB,KAAAvhB,QAIA7D,KAAAywD,KAAArD,EAGAptD,KAAAqkE,OAEArkE,KAAA6sE,iBAUAnpE,EAAAb,UAAA8mC,OAAA,WAEA3pC,KAAA49C,YAAAjU,UAQAjmC,EAAAb,UAAAuqE,oBAAA,SAAAxvB,GAGA59C,KAAAitE,QAEAjtE,KAAAotD,MAAA,GAAAzc,GAAAqC,UAAA,EAAA,EAAA4K,EAAAh6C,MAAAg6C,EAAA/5C,QAIA7D,KAAAotD,MAAAptD,KAAA0wD,OAGA1wD,KAAAonB,KAAA,SAAApnB,OAQA0D,EAAAb,UAAAsqE,qBAAA,SAAAvvB,GAEA59C,KAAA0wD,OAAA9sD,MAAAg6C,EAAAh6C,MACA5D,KAAA0wD,OAAA7sD,OAAA+5C,EAAA/5C,OAEA7D,KAAAonB,KAAA,SAAApnB,OAQA0D,EAAAb,UAAA0C,QAAA,SAAA8nE,GAEArtE,KAAA49C,cAEAyvB,GAEArtE,KAAA49C,YAAAr4C,UAGAvF,KAAA49C,YAAA12B,IAAA,SAAAlnB,KAAAmtE,qBAAAntE,MACAA,KAAA49C,YAAA12B,IAAA,SAAAlnB,KAAAotE,oBAAAptE,MAEAA,KAAA49C,YAAA,MAGA59C,KAAA0wD,OAAA,KACA1wD,KAAA8wD,KAAA,KACA9wD,KAAAolB,KAAA,KACAplB,KAAAywD,KAAA,KAEAzwD,KAAAqkE,OAAA,EAEArkE,KAAAknB,IAAA,UAAAlnB,KAAAusE,QAAAvsE,MACAA,KAAAknB,IAAA,SAAAlnB,KAAA2pC,OAAA3pC,OAQA0D,EAAAb,UAAA+1C,MAAA,WAEA,MAAA,IAAAl1C,GAAA1D,KAAA49C,YAAA59C,KAAAotD,MAAAptD,KAAAywD,KAAAzwD,KAAAolB,KAAAplB,KAAAupD,SAQA7lD,EAAAb,UAAAgqE,WAAA,WAEA7sE,KAAA8wD,OAEA9wD,KAAA8wD,KAAA,GAAAtK,IAGAxmD,KAAA8wD,KAAA5gD,IAAAlQ,KAAAywD,KAAAzwD,KAAA49C,YAAA59C,KAAAupD,SAaA7lD,EAAAkhE,UAAA,SAAAgH,EAAA9G,EAAAvyB,GAEA,GAAAtuC,GAAA4mC,EAAA85B,aAAAiH,EAQA,OANA3nE,KAEAA,EAAA,GAAAP,GAAA2iD,EAAAue,UAAAgH,EAAA9G,EAAAvyB,IACA1H,EAAA85B,aAAAiH,GAAA3nE,GAGAA,GAWAP,EAAA+gE,UAAA,SAAAC,GAEA,GAAAzgE,GAAA4mC,EAAA85B,aAAAD,EAEA,KAAAzgE,EAEA,KAAA,IAAArD,OAAA,gBAAA8jE,EAAA,wCAGA,OAAAzgE,IAWAP,EAAAi6C,WAAA,SAAAvyC,EAAAmnC,GAEA,MAAA,IAAA7uC,GAAA2iD,EAAA1I,WAAAvyC,EAAAmnC,KAWA7uC,EAAA4pE,UAAA,SAAAC,EAAAh7B,GAEA,MAAA,gBAAAg7B,GAEA7pE,EAAA8pE,aAAAD,EAAAh7B,GAIA,GAAA7uC,GAAA6iD,EAAA+mB,UAAAC,EAAAh7B,KAYA7uC,EAAA8pE,aAAA,SAAAC,EAAAl7B,GAEA,MAAA,IAAA7uC,GAAA6iD,EAAAmnB,QAAAD,EAAAl7B,KAUA7uC,EAAAiqE,kBAAA,SAAA1pE,EAAAqH,GAEAu/B,EAAA85B,aAAAr5D,GAAArH,GAUAP,EAAAkqE,uBAAA,SAAAtiE,GAEA,GAAArH,GAAA4mC,EAAA85B,aAAAr5D,EAKA,cAHAu/B,GAAA85B,aAAAr5D,SACAu/B,GAAAwhC,iBAAA/gE,GAEArH,GASAP,EAAAuvC,MAAA,GAAAvvC,GAAA,GAAA2iD,MAEAzR,UAAA,GAAAE,WAAA,IAAAw2B,gBAAA,GAAAuC,eAAA,IAAAC,qBAAA,IAAAtxC,cAAA,KAAAuxC,KAAA,SAAArtE,EAAAjB,EAAAD,GASA,QAAAgnD,KAEAxmD,KAAA+wD,GAAA,EACA/wD,KAAAgxD,GAAA,EAEAhxD,KAAA06C,GAAA,EACA16C,KAAA26C,GAAA,EAEA36C,KAAA46C,GAAA,EACA56C,KAAA66C,GAAA,EAEA76C,KAAAw+C,GAAA,EACAx+C,KAAAy+C,GAAA,EAEAz+C,KAAAguE,WAAA,EACAhuE,KAAAiuE,WAAA,EACAjuE,KAAAkuE,WAAA,EACAluE,KAAAmuE,WAAA,EAEAnuE,KAAAqmE,WAAA,GAAAlB,aAAA,GAGA1lE,EAAAD,QAAAgnD,EASAA,EAAA3jD,UAAAqN,IAAA,SAAAk9C,EAAAghB,EAAA7kB,GAEA,GAAA8kB,GAAAD,EAAAxqE,MACA0qE,EAAAF,EAAAvqE,MAEA0lD,IAEAvpD,KAAA+wD,IAAA3D,EAAAz4C,EAAAy4C,EAAAvpD,QAAAwqE,EACAruE,KAAAgxD,GAAA5D,EAAAt1C,EAAAw2D,EAEAtuE,KAAA06C,IAAA0S,EAAAz4C,EAAAy4C,EAAAvpD,QAAAwqE,EACAruE,KAAA26C,IAAAyS,EAAAt1C,EAAAs1C,EAAAxpD,OAAA0qE,EAEAtuE,KAAA46C,GAAAwS,EAAAz4C,EAAA05D,EACAruE,KAAA66C,IAAAuS,EAAAt1C,EAAAs1C,EAAAxpD,OAAA0qE,EAEAtuE,KAAAw+C,GAAA4O,EAAAz4C,EAAA05D,EACAruE,KAAAy+C,GAAA2O,EAAAt1C,EAAAw2D,IAKAtuE,KAAA+wD,GAAA3D,EAAAz4C,EAAA05D,EACAruE,KAAAgxD,GAAA5D,EAAAt1C,EAAAw2D,EAEAtuE,KAAA06C,IAAA0S,EAAAz4C,EAAAy4C,EAAAxpD,OAAAyqE,EACAruE,KAAA26C,GAAAyS,EAAAt1C,EAAAw2D,EAEAtuE,KAAA46C,IAAAwS,EAAAz4C,EAAAy4C,EAAAxpD,OAAAyqE,EACAruE,KAAA66C,IAAAuS,EAAAt1C,EAAAs1C,EAAAvpD,QAAAyqE,EAEAtuE,KAAAw+C,GAAA4O,EAAAz4C,EAAA05D,EACAruE,KAAAy+C,IAAA2O,EAAAt1C,EAAAs1C,EAAAvpD,QAAAyqE,GAGAtuE,KAAAqmE,WAAA,IAAA,MAAArmE,KAAAgxD,GAAA,QAAA,GAAA,MAAAhxD,KAAA+wD,GAAA,MACA/wD,KAAAqmE,WAAA,IAAA,MAAArmE,KAAA26C,GAAA,QAAA,GAAA,MAAA36C,KAAA06C,GAAA,MACA16C,KAAAqmE,WAAA,IAAA,MAAArmE,KAAA66C,GAAA,QAAA,GAAA,MAAA76C,KAAA46C,GAAA,MACA56C,KAAAqmE,WAAA,IAAA,MAAArmE,KAAAy+C,GAAA,QAAA,GAAA,MAAAz+C,KAAAw+C,GAAA,YAGA+vB,KAAA,SAAA7tE,EAAAjB,EAAAD,GAgCA,QAAA+mD,GAAA/+C,EAAA+qC,GAEA,IAAA/qC,EAEA,KAAA,IAAA5G,OAAA,uCAMA4G,EAAAgnE,aAAAhnE,EAAAinE,kBAAAjnE,EAAAgnE,aAAAhnE,EAAAknE,mBAAAlnE,EAAA5D,OAAA4D,EAAA3D,SAEA2D,EAAA+1B,UAAA,GAGA8oB,EAAAtlD,KAAAf,KAAAwH,EAAA+qC,GAQAvyC,KAAA2uE,YAAA,EAEA3uE,KAAA4uE,UAAA5uE,KAAA4uE,UAAA5rE,KAAAhD,MACAA,KAAA6uE,WAAA7uE,KAAA6uE,WAAA7rE,KAAAhD,MAEAwH,EAAA+1B,WAEA/1B,EAAAm4B,iBAAA,UAAA3/B,KAAA6uE,YACArnE,EAAAm4B,iBAAA,iBAAA3/B,KAAA6uE,YAGArnE,EAAAm4B,iBAAA,OAAA3/B,KAAA8uE,aAAA9rE,KAAAhD,OACAwH,EAAAm4B,iBAAA,QAAA3/B,KAAA+uE,YAAA/rE,KAAAhD,QAGAA,KAAAgvE,UAAA,EAwJA,QAAAC,GAAA1qD,EAAAliB,GAEAA,IAEAA,EAAA,SAAAkiB,EAAAQ,OAAAR,EAAA0F,YAAA,KAAA,GAGA,IAAAziB,GAAAq4B,SAAAC,cAAA,SAKA,OAHAt4B,GAAA4F,IAAAmX,EACA/c,EAAAnF,KAAAA,EAEAmF,EAzOA,GAAA6+C,GAAA3lD,EAAA,iBACAmqC,EAAAnqC,EAAA,WAuEA6lD,GAAA1jD,UAAA0M,OAAA/L,OAAA6iD,EAAAxjD,WACA0jD,EAAA1jD,UAAAmH,YAAAu8C,EACA9mD,EAAAD,QAAA+mD,EAOAA,EAAA1jD,UAAA+rE,UAAA,WAEA5uE,KAAA2uE,aAEA9uE,OAAAqvE,sBAAAlvE,KAAA4uE,WACA5uE,KAAA2pC,WASA4c,EAAA1jD,UAAAisE,aAAA,WAEA9uE,KAAA2uE,aAEA9uE,OAAAqvE,sBAAAlvE,KAAA4uE,WACA5uE,KAAA2uE,YAAA,IASApoB,EAAA1jD,UAAAksE,YAAA,WAEA/uE,KAAA2uE,YAAA,GAQApoB,EAAA1jD,UAAAgsE,WAAA,WAEA7uE,KAAAi3D,WAAA,EAEAj3D,KAAAwH,SAEAxH,KAAAwH,OAAAo3B,oBAAA,UAAA5+B,KAAA6uE,YACA7uE,KAAAwH,OAAAo3B,oBAAA,iBAAA5+B,KAAA6uE,YAEA7uE,KAAA4D,MAAA5D,KAAAwH,OAAA2nE,WACAnvE,KAAA6D,OAAA7D,KAAAwH,OAAA4nE,YAEApvE,KAAAwH,OAAA6nE,OAGArvE,KAAAgvE,WAEAhvE,KAAAgvE,UAAA,EACAhvE,KAAAonB,KAAA,SAAApnB,SASAumD,EAAA1jD,UAAA0C,QAAA,WAEAvF,KAAAwH,QAAAxH,KAAAwH,OAAA8kE,gBAEAzhC,GAAAwhC,iBAAArsE,KAAAwH,OAAA8kE,eACAtsE,MAAAwH,OAAA8kE,SAGAjmB,EAAAxjD,UAAA0C,QAAAxE,KAAAf,OAWAumD,EAAA+mB,UAAA,SAAAC,EAAAh7B,GAEAg7B,EAAAjB,UAEAiB,EAAAjB,QAAA,SAAAzhC,EAAAssB,MAGA,IAAAvZ,GAAA/S,EAAAwhC,iBAAAkB,EAAAjB,QAQA,OANA1uB,KAEAA,EAAA,GAAA2I,GAAAgnB,EAAAh7B,GACA1H,EAAAwhC,iBAAAkB,EAAAjB,SAAA1uB,GAGAA,GAeA2I,EAAAmnB,QAAA,SAAA4B,EAAA/8B,GAEA,GAAAg7B,GAAA1tC,SAAAC,cAAA,QAGA,IAAAh0B,MAAA4O,QAAA40D,GAEA,IAAA,GAAA3uE,GAAA,EAAAA,EAAA2uE,EAAAtuE,SAAAL,EAEA4sE,EAAAttC,YAAAgvC,EAAAK,EAAA3uE,GAAAyM,KAAAkiE,EAAA3uE,GAAA2uE,EAAA3uE,GAAAigC,WAMA2sC,GAAAttC,YAAAgvC,EAAAK,EAAAliE,KAAAkiE,EAAAA,EAAA1uC,MAMA,OAHA2sC,GAAAzxC,OACAyxC,EAAA8B,OAEA9oB,EAAA+mB,UAAAC,EAAAh7B,IAGAgU,EAAAgpB,SAAAhpB,EAAAmnB,UAiBA54B,WAAA,IAAAw2B,gBAAA,KAAAkE,KAAA,SAAA9uE,EAAAjB,EAAAD,GAgBA,QAAAiwE,KAEA,GAAAC,GAAA1vE,IAYAA,MAAA2vE,MAAA,SAAAC,GAEAF,EAAAG,WAAA,KAEAH,EAAAn3D,UAGAm3D,EAAA/lC,OAAAimC,GAEAF,EAAAn3D,SAAA,OAAAm3D,EAAAG,YAAAH,EAAAI,SAAA3xD,UAAA4xD,GAAA,KAEAL,EAAAG,WAAAX,sBAAAQ,EAAAC,UASA3vE,KAAA8vE,SAAA,GAAA93C,GAMAh4B,KAAA6vE,WAAA,KAOA7vE,KAAAgwE,cAAA,IAUAhwE,KAAAiwE,WAAA,EAWAjwE,KAAAkwE,UAAA,EAYAlwE,KAAAmwE,UAAA,EAAApjC,EAAAM,YAYArtC,KAAAowE,SAAA,EAYApwE,KAAAqwE,MAAA,EAaArwE,KAAAuY,SAAA,EApIA,GAAAw0B,GAAArsC,EAAA,YACAs3B,EAAAt3B,EAAA,iBAEAqvE,EAAA,MAoIAxgE,QAAAwhC,iBAAA0+B,EAAA5sE,WAYAytE,KACAtgE,IAAA,WAEA,MAAA,KAAAhQ,KAAAmwE,YAgBAI,QACAvgE,IAAA,WAEA,MAAA,KAAAhQ,KAAAgwE,eAEA9/D,IAAA,SAAAsgE,GAGA,GAAAC,GAAAj7D,KAAAgE,IAAAhE,KAAAC,IAAA,EAAA+6D,GAAA,IAAAzjC,EAAAM,YACArtC,MAAAgwE,cAAA,EAAAS,MAYAhB,EAAA5sE,UAAA6tE,iBAAA,WAEA,OAAA1wE,KAAA6vE,YAAA7vE,KAAA8vE,SAAA3xD,UAAA4xD,GAAA,KAGA/vE,KAAAowE,SAAAO,YAAAC,MACA5wE,KAAA6vE,WAAAX,sBAAAlvE,KAAA2vE,SASAF,EAAA5sE,UAAAguE,gBAAA,WAEA,OAAA7wE,KAAA6vE,aAEAiB,qBAAA9wE,KAAA6vE,YACA7vE,KAAA6vE,WAAA,OAcAJ,EAAA5sE,UAAAkuE,iBAAA,WAEA/wE,KAAAuY,QAEAvY,KAAA0wE,mBAEA1wE,KAAAiwE,WAEAjwE,KAAAwK,SAaAilE,EAAA5sE,UAAAu4B,IAAA,SAAAznB,EAAAokB,GAMA,MAJA/3B,MAAA8vE,SAAA9oD,GAAA+oD,EAAAp8D,EAAAokB,GAEA/3B,KAAA+wE,mBAEA/wE,MAYAyvE,EAAA5sE,UAAAmuE,QAAA,SAAAr9D,EAAAokB,GAMA,MAJA/3B,MAAA8vE,SAAA7oD,KAAA8oD,EAAAp8D,EAAAokB,GAEA/3B,KAAA+wE,mBAEA/wE,MAYAyvE,EAAA5sE,UAAAouE,OAAA,SAAAt9D,EAAAokB,GASA,MAPA/3B,MAAA8vE,SAAA5oD,IAAA6oD,EAAAp8D,EAAAokB,GAEA/3B,KAAA8vE,SAAA3xD,UAAA4xD,GAAA,IAEA/vE,KAAA6wE,kBAGA7wE,MAOAyvE,EAAA5sE,UAAA2H,MAAA,WAEAxK,KAAAuY,UAEAvY,KAAAuY,SAAA,EACAvY,KAAA0wE,qBAQAjB,EAAA5sE,UAAAmxB,KAAA,WAEAh0B,KAAAuY,UAEAvY,KAAAuY,SAAA,EACAvY,KAAA6wE,oBAiBApB,EAAA5sE,UAAA8mC,OAAA,SAAAunC,GAEA,GAAAf,EAGAe,GAAAA,GAAAP,YAAAC,MAEAT,EAAAnwE,KAAAmwE,UAAAe,EAAAlxE,KAAAowE,SAGAD,EAAAnwE,KAAAgwE,gBAEAG,EAAAnwE,KAAAgwE,eAGAhwE,KAAAkwE,UAAAC,EAAApjC,EAAAM,YAAArtC,KAAAqwE,MAGArwE,KAAA8vE,SAAA1oD,KAAA2oD,EAAA/vE,KAAAkwE,WAEAlwE,KAAAowE,SAAAc,GAGAzxE,EAAAD,QAAAiwE,IAEA14B,WAAA,GAAAva,cAAA,KAAA20C,KAAA,SAAAzwE,EAAAjB,EAAAD,GACA,GAAAiwE,GAAA/uE,EAAA,YA4CA0wE,EAAA,GAAA3B,EACA2B,GAAAnB,WAAA,EAKAxwE,EAAAD,SACA4xE,OAAAA,EACA3B,OAAAA,KAGA4B,WAAA,MAAAC,KAAA,SAAA5wE,EAAAjB,EAAAD,GAOA,GAGA4lE,GAAA,SAAAr6D,GASA,IAAA,GALAwmE,GAAA,EAAAxmE,EAEAq2C,EAAA,GAAAqB,aAAA8uB,GAGA5wE,EAAA,EAAA+oB,EAAA,EAAA6nD,EAAA5wE,EAAAA,GAAA,EAAA+oB,GAAA,EAEA03B,EAAAzgD,EAAA,GAAA+oB,EAAA,EACA03B,EAAAzgD,EAAA,GAAA+oB,EAAA,EACA03B,EAAAzgD,EAAA,GAAA+oB,EAAA,EACA03B,EAAAzgD,EAAA,GAAA+oB,EAAA,EACA03B,EAAAzgD,EAAA,GAAA+oB,EAAA,EACA03B,EAAAzgD,EAAA,GAAA+oB,EAAA,CAGA,OAAA03B,GAGA3hD,GAAAD,QAAA4lE,OACAoM,KAAA,SAAA9wE,EAAAjB,EAAAD,GACA,GAAAutC,GAAArsC,EAAA,YAKAmqC,EAAAprC,EAAAD,SACAiyE,KAAA,EACAC,YAAA,EAEA15C,aAAAt3B,EAAA,iBACAiyD,aAAAjyD,EAAA,kBACA6V,MAAA7V,EAAA,SAOAy2D,IAAA,WAEA,QAAAtsB,EAAA4mC,MAUAxwB,QAAA,SAAA0wB,EAAAnoD,GAQA,MANAA,GAAAA,MAEAA,EAAA,IAAAmoD,GAAA,GAAA,KAAA,IACAnoD,EAAA,IAAAmoD,GAAA,EAAA,KAAA,IACAnoD,EAAA,IAAA,IAAAmoD,GAAA,IAEAnoD,GASAsoC,WAAA,SAAA6f,GAKA,MAHAA,GAAAA,EAAAl3D,SAAA,IACAk3D,EAAA,SAAA5sD,OAAA,EAAA,EAAA4sD,EAAA3wE,QAAA2wE,EAEA,IAAAA,GASAjb,QAAA,SAAAkb,GAEA,OAAA,IAAAA,EAAA,IAAA,KAAA,IAAAA,EAAA,IAAA,GAAA,IAAAA,EAAA,IAQAve,0BAAA,WAEA,GAAA,mBAAAxzB,UAEA,OAAA,CAGA,IAAAgyC,GAAA,iFACAC,EAAA,mDAEAC,EAAA,GAAAryC,MACAqyC,GAAA3kE,IAAAykE,EAAA,WAAAC,CAEA,IAAAE,GAAA,GAAAtyC,MACAsyC,GAAA5kE,IAAAykE,EAAA,WAAAC,CAEA,IAAA1mE,GAAAy0B,SAAAC,cAAA,SACA10B,GAAAxH,MAAA,EACAwH,EAAAvH,OAAA,CAEA,IAAAk0B,GAAA3sB,EAAAC,WAAA,KACA0sB,GAAAomB,yBAAA,WACApmB,EAAAw1B,UAAAwkB,EAAA,EAAA,GACAh6C,EAAAw1B,UAAAykB,EAAA,EAAA,EAEA,IAAA1vE,GAAAy1B,EAAAs+B,aAAA,EAAA,EAAA,EAAA,GAAA/zD,IAEA,OAAA,OAAAA,EAAA,IAAA,IAAAA,EAAA,IAAA,IAAAA,EAAA,IAUA2vE,kBAAA,SAAAC,GAGA,GAAAA,EAAA,GAAA,KAAAA,EAAAA,EAAA,GAEA,MAAAA,EAMA,KAFA,GAAA59D,GAAA,EAEA49D,EAAA59D,GAEAA,IAAA,CAGA,OAAAA,IAWAu3D,aAAA,SAAAjoE,EAAAC,GAEA,MAAAD,GAAA,GAAA,KAAAA,EAAAA,EAAA,IAAAC,EAAA,GAAA,KAAAA,EAAAA,EAAA,IAUA6oE,mBAAA,SAAA5+C,GAEA,GAAA2hB,GAAA1C,EAAAsC,cAAAlrB,KAAA2J,EAEA,OAAA2hB,GAEA0iC,WAAA1iC,EAAA,IAGA,GAaAiiB,SAAA,SAAArvD,GAEA,IAAAwoC,EAAA6mC,WAAA,CAKA,GAAA3xC,UAAAqyC,UAAAvnD,cAAAsB,QAAA,UAAA,GACA,CACA,GAAAvU,IACA,uBAAAm1B,EAAAC,QAAA,QAAA3qC,EAAA,yDACA,sCACA,sCACA,sDACA,sCACA,sCACA,sCACA,mDACA,mDACA,mDAGAxC,QAAA+M,QAAAc,IAAAkG,MAAAhH,QAAAgL,OAEA/X,QAAA+M,SAEA/M,OAAA+M,QAAAc,IAAA,WAAAq/B,EAAAC,QAAA,MAAA3qC,EAAA,4BAGAwoC,GAAA6mC,YAAA,IAQAxqB,iBAAA,WAEA,GAAAmrB,IAAAruE,SAAA,EACA,KAEA,IAAAnE,OAAAyyE,sBAEA,OAAA,CAGA,IAAAlnE,GAAAy0B,SAAAC,cAAA,UACA19B,EAAAgJ,EAAAC,WAAA,QAAAgnE,IAAAjnE,EAAAC,WAAA,qBAAAgnE,EAEA,UAAAjwE,IAAAA,EAAAmwE,uBAAAvuE,SAEA,MAAA9D,GAEA,OAAA,IAUAgkE,KAAA,SAAA9jE,GAEA,MAAAA,GAAA,EAAAA,EAAA,GAAA,EAAA,GAUA0qC,YAAA,SAAA92B,EAAAw+D,EAAAC,GAEA,GAAAzxE,GAAAgT,EAAAhT,MAEA,MAAAwxE,GAAAxxE,GAAA,IAAAyxE,GAAA,CAKAA,EAAAD,EAAAC,EAAAzxE,EAAAA,EAAAwxE,EAAAC,CACA,KAAA,GAAA9xE,GAAA6xE,EAAAp9D,EAAApU,EAAAyxE,EAAAr9D,EAAAzU,IAAAA,EAEAqT,EAAArT,GAAAqT,EAAArT,EAAA8xE,EAGAz+D,GAAAhT,OAAAoU,IAOAuvD,gBAMA0H,uBAGAt1B,WAAA,GAAA27B,iBAAA,IAAAn8D,MAAA,GAAAimB,cAAA,KAAAm2C,KAAA,SAAAjyE,EAAAjB,EAAAD,GAYA,QAAAmzD,GAAA58C,GAEAA,EAAA68D,aAQA78D,EAAAu2B,eAAA,SAAAumC,EAAAC,GAEA/8D,EAAA68D,UAAAC,GAAAC,GAOA/8D,EAAAlT,UAAA4vD,YAAA,WAEAzyD,KAAAgsC,QAAAhsC,KAAAgsC,WAEA,KAAA,GAAAzrC,KAAAwV,GAAA68D,UAEA5yE,KAAAgsC,QAAAzrC,GAAA,GAAAwV,GAAA68D,UAAAryE,GAAAP,OAQA+V,EAAAlT,UAAAswD,eAAA,WAEA,IAAA,GAAA5yD,KAAAP,MAAAgsC,QAEAhsC,KAAAgsC,QAAAzrC,GAAAgF,UACAvF,KAAAgsC,QAAAzrC,GAAA,IAGAP,MAAAgsC,QAAA,MAKAvsC,EAAAD,SAMAozD,MAAA,SAAA78C,GAEA48C,EAAA58C,UAIAg9D,KAAA,SAAAryE,EAAAjB,EAAAD,GAEA,GAAAiqC,GAAA/oC,EAAA,UACAsyE,EAAAtyE,EAAA,UACAuyE,EAAAvyE,EAAA,YACAw1C,EAAAx1C,EAAA,YAWA+oC,GAAAypC,YAAA,WAEA,KAAA,IAAAC,gBAAA,uFAYA1pC,EAAA2pC,YAAA,WAEA,KAAA,IAAAD,gBAAA,+FAGA5jE,OAAAwhC,iBAAAtH,GAUA4pC,OACArjE,IAAA,WAGA,MADApD,SAAAK,KAAA,sFACAw8B,EAAAiH,YAYA4iC,wBACAtjE,IAAA,WAGA,MADApD,SAAAK,KAAA,6FACAw8B,EAAAiH,YAYA6iC,OACAvjE,IAAA,WAGA,MADApD,SAAAK,KAAA,sGACA+lE,EAAAQ,OAYAC,MACAzjE,IAAA,WAGA,MADApD,SAAAK,KAAA,iFACA+lE,EAAAS,OAYAC,WACA1jE,IAAA,WAGA,MADApD,SAAAK,KAAA,oGACAgmE,EAAAS,YAYAC,cACA3jE,IAAA,WAGA,MADApD,SAAAK,KAAA,6GACAgmE,EAAAU,eAYAC,YACA5jE,IAAA,WAGA,MADApD,SAAAK,KAAA,uGACAgmE,EAAAW,aAYA11B,YACAluC,IAAA,WAGA,MADApD,SAAAK,KAAA,qFACAw8B,EAAAiE,cAYAmmC,YACA7jE,IAAA,WAGA,MADApD,SAAAK,KAAA,qFACAw8B,EAAA2F,cAYAi9B,kBACAr8D,IAAA,WAGA,MADApD,SAAAK,KAAA,uHACAw8B,EAAAoB,MAAAwhC,mBAYA1H,cACA30D,IAAA,WAGA,MADApD,SAAAK,KAAA,2GACAw8B,EAAAoB,MAAA85B,eAYAh0B,MACA3gC,IAAA,WAGA,MADApD,SAAAK,KAAA,uFACAw8B,MAYAA,EAAAuc,OAAAnjD,UAAAixE,WAAA,SAAA7vE,GAEAjE,KAAAiE,QAAAA,EACA2I,QAAAK,KAAA,mGASAgmE,EAAAW,WAAA/wE,UAAAkxE,QAAA,SAAAnwC,GAEA5jC,KAAA4jC,KAAAA,EACAh3B,QAAAK,KAAA,kGASAw8B,EAAA2c,KAAAvjD,UAAAkxE,QAAA,SAAAnwC,GAEA5jC,KAAA4jC,KAAAA,EACAh3B,QAAAK,KAAA,4FASAw8B,EAAA2c,KAAAvjD,UAAAmxE,SAAA,SAAAlrC,GAEA9oC,KAAA8oC,MAAAA,EACAl8B,QAAAK,KAAA,2FASAw8B,EAAA/lC,QAAAb,UAAAoxE,SAAA,SAAA7mB,GAEAptD,KAAAotD,MAAAA,EACAxgD,QAAAK,KAAA,8FAGAsC,OAAAwhC,iBAAAmF,GASA0Q,gBACA52C,IAAA,WAGA,MADApD,SAAAK,KAAA,2FACAw8B,EAAAmd,iBAWAC,YACA72C,IAAA,WAGA,MADApD,SAAAK,KAAA,mFACAw8B,EAAAod,aAWAC,kBACA92C,IAAA,WAGA,MADApD,SAAAK,KAAA,+FACAw8B,EAAAqd,qBAWArd,EAAAoB,MAAAqpC,KAAA,WAGA,MADAtnE,SAAAK,KAAA,mEACAw8B,EAAAoB,MAAAssB,SAGAgd,SAAA;AAAAC,WAAA,IAAAC,YAAA,IAAAC,SAAA,MAAAC,KAAA,SAAA7zE,EAAAjB,EAAAD,GA+BA,QAAAo0E,GAAAhwC,EAAAkF,GAEAW,EAAAiH,UAAA3vC,KAAAf,MAEA8oC,EAAAA,MASA9oC,KAAAw0E,UAAA,EASAx0E,KAAAy0E,WAAA,EAQAz0E,KAAA00E,WAQA10E,KAAA20E,OACA98B,KAAA3vC,SAAA4gC,EAAA+O,KAAA/O,EAAA+O,KAAA,SACA+vB,MAAA9+B,EAAA8+B,OAAA,OACAp5D,KAAA,KACAzD,KAAA,GASA/K,KAAA2nE,KAAA7+B,EAAA6+B,KAQA3nE,KAAAonE,MAAAxjC,EAQA5jC,KAAA40E,SAAA,EAOA50E,KAAA60E,cAAA,EAOA70E,KAAA+J,OAAA,EAEA/J,KAAAynE,aAjHA,GAAAh+B,GAAA/oC,EAAA,UAqHAkzE,GAAA/wE,UAAA0M,OAAA/L,OAAAimC,EAAAiH,UAAA7tC,WACA+wE,EAAA/wE,UAAAmH,YAAA4pE,EACAn0E,EAAAD,QAAAo0E,EAEArkE,OAAAwhC,iBAAA6iC,EAAA/wE,WAOAg1C,MACA7nC,IAAA,WAEA,MAAAhQ,MAAA20E,MAAA98B,MAEA3nC,IAAA,SAAAf,GAEAnP,KAAA20E,MAAA98B,KAAA,gBAAA1oC,IAAAA,GAAA,EAAAA,EAAA,SAEAnP,KAAA+J,OAAA,IAWA69D,OACA53D,IAAA,WAEA,MAAAhQ,MAAA20E,MAAA/M,OAEA13D,IAAA,SAAAf,GAEAnP,KAAA20E,MAAA/M,MAAAz4D,GAAA,OAEAnP,KAAA+J,OAAA,IAUA49D,MACA33D,IAAA,WAEA,MAAAhQ,MAAA20E,OAEAzkE,IAAA,SAAAf,GAEAA,IAIA,gBAAAA,IACAA,EAAAA,EAAAQ,MAAA,KAEA3P,KAAA20E,MAAAnmE,KAAA,IAAAW,EAAAnO,OAAAmO,EAAA,GAAAA,EAAAqP,MAAA,GAAA5N,KAAA,KACA5Q,KAAA20E,MAAA5pE,KAAAoE,EAAAnO,QAAA,EAAAse,SAAAnQ,EAAA,GAAA,IAAAykE,EAAAkB,MAAA90E,KAAA20E,MAAAnmE,MAAAzD,OAGA/K,KAAA20E,MAAAnmE,KAAAW,EAAAX,KACAxO,KAAA20E,MAAA5pE,KAAA,gBAAAoE,GAAApE,KAAAoE,EAAApE,KAAAuU,SAAAnQ,EAAApE,KAAA,KAGA/K,KAAA+J,OAAA,KAUA65B,MACA5zB,IAAA,WAEA,MAAAhQ,MAAAonE,OAEAl3D,IAAA,SAAAf,GAEAA,EAAAA,EAAAsL,YAAA,IACAza,KAAAonE,QAAAj4D,IAIAnP,KAAAonE,MAAAj4D,EACAnP,KAAA+J,OAAA,OAUA6pE,EAAA/wE,UAAA4kE,WAAA,WAcA,IAAA,GAZAnlE,GAAAsxE,EAAAkB,MAAA90E,KAAA20E,MAAAnmE,MACA8J,EAAA,GAAAmxB,GAAA0N,MACA49B,EAAA,KACAC,KACAC,EAAA,EACAvM,EAAA,EACAD,KACAmB,EAAA,EACA54B,EAAAhxC,KAAA20E,MAAA5pE,KAAAzI,EAAAyI,KACAmqE,EAAA,GACAL,EAAA,EAEAl0E,EAAA,EAAAA,EAAAX,KAAA4jC,KAAA5iC,OAAAL,IACA,CACA,GAAAw0E,GAAAn1E,KAAA4jC,KAAAxb,WAAAznB,EAGA,IAFAu0E,EAAA,OAAAr0D,KAAA7gB,KAAA4jC,KAAAlf,OAAA/jB,IAAAA,EAAAu0E,EAEA,iBAAAr0D,KAAA7gB,KAAA4jC,KAAAlf,OAAA/jB,IAEA8nE,EAAA99D,KAAAsqE,GACAvM,EAAAlzD,KAAAC,IAAAizD,EAAAuM,GACArL,IAEAtxD,EAAA3D,EAAA,EACA2D,EAAAR,GAAAxV,EAAAwmE,WACAiM,EAAA,SAIA,IAAA,KAAAG,GAAAl1E,KAAA40E,SAAA,GAAAt8D,EAAA3D,EAAAq8B,EAAAhxC,KAAA40E,SAEAnrC,EAAAoB,MAAAC,YAAAkqC,EAAAE,EAAAv0E,EAAAu0E,GACAv0E,EAAAu0E,EACAA,EAAA,GAEAzM,EAAA99D,KAAAsqE,GACAvM,EAAAlzD,KAAAC,IAAAizD,EAAAuM,GACArL,IAEAtxD,EAAA3D,EAAA,EACA2D,EAAAR,GAAAxV,EAAAwmE,WACAiM,EAAA,SAZA,CAgBA,GAAAK,GAAA9yE,EAAA0yE,MAAAG,EAEAC,KAKAL,GAAAK,EAAAC,QAAAN,KAEAz8D,EAAA3D,GAAAygE,EAAAC,QAAAN,IAGAC,EAAArqE,MAAA1G,QAAAmxE,EAAAnxE,QAAA2lE,KAAAA,EAAAuL,SAAAA,EAAApsC,SAAA,GAAAU,GAAA0N,MAAA7+B,EAAA3D,EAAAygE,EAAAE,QAAAh9D,EAAAR,EAAAs9D,EAAAG,WACAN,EAAA38D,EAAA3D,GAAAygE,EAAAnxE,QAAAL,MAAAwxE,EAAAE,SACAh9D,EAAA3D,GAAAygE,EAAAI,SACAX,EAAAr/D,KAAAC,IAAAo/D,EAAAO,EAAAG,QAAAH,EAAAnxE,QAAAJ,QACAkxE,EAAAI,IAGA1M,EAAA99D,KAAAsqE,GACAvM,EAAAlzD,KAAAC,IAAAizD,EAAAuM,EAEA,IAAAQ,KAEA,KAAA90E,EAAA,EAAAipE,GAAAjpE,EAAAA,IACA,CACA,GAAA+0E,GAAA,CAEA,WAAA11E,KAAA20E,MAAA/M,MAEA8N,EAAAhN,EAAAD,EAAA9nE,GAEA,WAAAX,KAAA20E,MAAA/M,QAEA8N,GAAAhN,EAAAD,EAAA9nE,IAAA,GAGA80E,EAAA9qE,KAAA+qE,GAGA,GAAAC,GAAAX,EAAAh0E,OACA62C,EAAA73C,KAAA63C,IAEA,KAAAl3C,EAAA,EAAAg1E,EAAAh1E,EAAAA,IACA,CACA,GAAA0zB,GAAAr0B,KAAA00E,QAAA/zE,EAEA0zB,GAEAA,EAAApwB,QAAA+wE,EAAAr0E,GAAAsD,SAIAowB,EAAA,GAAAoV,GAAAuc,OAAAgvB,EAAAr0E,GAAAsD,SACAjE,KAAA00E,QAAA/pE,KAAA0pB,IAGAA,EAAA0U,SAAAp0B,GAAAqgE,EAAAr0E,GAAAooC,SAAAp0B,EAAA8gE,EAAAT,EAAAr0E,GAAAipE,OAAA54B,EACA3c,EAAA0U,SAAAjxB,EAAAk9D,EAAAr0E,GAAAooC,SAAAjxB,EAAAk5B,EACA3c,EAAA2c,MAAAr8B,EAAA0f,EAAA2c,MAAAl5B,EAAAk5B,EACA3c,EAAAwjB,KAAAA,EAEAxjB,EAAAid,QAEAtxC,KAAAsqC,SAAAjW,GAKA,IAAA1zB,EAAAg1E,EAAAh1E,EAAAX,KAAA00E,QAAA1zE,SAAAL,EAEAX,KAAA+pC,YAAA/pC,KAAA00E,QAAA/zE,GAGAX,MAAAw0E,UAAA9L,EAAA13B,EACAhxC,KAAAy0E,YAAAn8D,EAAAR,EAAAxV,EAAAwmE,YAAA93B,EACAhxC,KAAA60E,cAAAA,EAAA7jC,GAQA4iC,EAAA/wE,UAAA8vC,gBAAA,WAEA3yC,KAAA41E,WACA51E,KAAA8yC,4BASA8gC,EAAA/wE,UAAAouC,eAAA,WAGA,MADAjxC,MAAA41E,WACAnsC,EAAAiH,UAAA7tC,UAAAouC,eAAAlwC,KAAAf,OAQA4zE,EAAA/wE,UAAA+yE,SAAA,WAEA51E,KAAA+J,QAEA/J,KAAAynE,aACAznE,KAAA+J,OAAA,IAIA6pE,EAAAkB,WAEAtoC,UAAA,KAAAqpC,KAAA,SAAAn1E,EAAAjB,EAAAD,GA0BA,QAAAk0E,GAAAnO,GAEA97B,EAAAuc,OAAAjlD,KAAAf,KAAAulE,EAAA,YAAA97B,GAAA/lC,QAAA6hE,EAAA,GAAAA,EAAA,GAAAthE,SAKAjE,KAAA81E,UAAA,KAKA91E,KAAA+1E,WAAA,KAEA/1E,KAAAulE,SAAAA,EAQAvlE,KAAAg2E,eAAA,EAQAh2E,KAAAi2E,MAAA,EAQAj2E,KAAAs7B,WAAA,KAQAt7B,KAAAk2E,aAAA,EAQAl2E,KAAAm2E,SAAA,EA/EA,GAAA1sC,GAAA/oC,EAAA,UAmFAgzE,GAAA7wE,UAAA0M,OAAA/L,OAAAimC,EAAAuc,OAAAnjD,WACA6wE,EAAA7wE,UAAAmH,YAAA0pE,EACAj0E,EAAAD,QAAAk0E,EAEAnkE,OAAAwhC,iBAAA2iC,EAAA7wE,WAUAuzE,aACApmE,IAAA,WAEA,MAAAhQ,MAAA81E,UAAA90E,SAWAukE,UACAv1D,IAAA,WAEA,MAAAhQ,MAAA81E,WAEA5lE,IAAA,SAAAf,GAEA,GAAAA,EAAA,YAAAs6B,GAAA/lC,QAEA1D,KAAA81E,UAAA3mE,EACAnP,KAAA+1E,WAAA,SAGA,CACA/1E,KAAA81E,aACA91E,KAAA+1E,aACA,KAAA,GAAAp1E,GAAA,EAAAA,EAAAwO,EAAAnO,OAAAL,IAEAX,KAAA81E,UAAAnrE,KAAAwE,EAAAxO,GAAAsD,SACAjE,KAAA+1E,WAAAprE,KAAAwE,EAAAxO,GAAAivE,SAaAhU,cACA5rD,IAAA,WAEA,GAAA4rD,GAAApmD,KAAAyT,MAAAjpB,KAAAk2E,cAAAl2E,KAAA81E,UAAA90E,MAKA,OAJA,GAAA46D,IAEAA,GAAA57D,KAAA81E,UAAA90E,QAEA46D,MAUA8X,EAAA7wE,UAAAmxB,KAAA,WAEAh0B,KAAAm2E,UAKAn2E,KAAAm2E,SAAA,EACA1sC,EAAAsc,OAAAqrB,OAAAH,OAAAjxE,KAAA2pC,OAAA3pC,QAOA0zE,EAAA7wE,UAAAwsE,KAAA,WAEArvE,KAAAm2E,UAKAn2E,KAAAm2E,SAAA,EACA1sC,EAAAsc,OAAAqrB,OAAAh2C,IAAAp7B,KAAA2pC,OAAA3pC,QAQA0zE,EAAA7wE,UAAAwzE,YAAA,SAAAC,GAEAt2E,KAAAg0B,OAEAh0B,KAAAk2E,aAAAI,EAEAt2E,KAAAowD,SAAApwD,KAAA81E,UAAA91E,KAAA47D,eAQA8X,EAAA7wE,UAAA0zE,YAAA,SAAAD,GAEAt2E,KAAAk2E,aAAAI,EAEAt2E,KAAAqvE,QAOAqE,EAAA7wE,UAAA8mC,OAAA,SAAAumC,GAEA,GAAAsG,GAAAx2E,KAAAg2E,eAAA9F,CAEA,IAAA,OAAAlwE,KAAA+1E,WACA,CACA,GAAAU,GAAAz2E,KAAAk2E,aAAA,EAAAl2E,KAAA+1E,WAAA/1E,KAAA47D,aAIA,KAFA6a,GAAAD,EAAA,GAAA,IAEA,EAAAC,GAEAz2E,KAAAk2E,eACAO,GAAAz2E,KAAA+1E,WAAA/1E,KAAA47D,aAGA,IAAAsI,GAAA1uD,KAAA0uD,KAAAlkE,KAAAg2E,eAAA9F,EAGA,KAFAlwE,KAAAk2E,aAAA1gE,KAAAyT,MAAAjpB,KAAAk2E,cAEAO,GAAAz2E,KAAA+1E,WAAA/1E,KAAA47D,eAEA6a,GAAAz2E,KAAA+1E,WAAA/1E,KAAA47D,cAAAsI,EACAlkE,KAAAk2E,cAAAhS,CAGAlkE,MAAAk2E,cAAAO,EAAAz2E,KAAA+1E,WAAA/1E,KAAA47D,kBAIA57D,MAAAk2E,cAAAM,CAGAx2E,MAAAk2E,aAAA,IAAAl2E,KAAAi2E,MAEAj2E,KAAAq2E,YAAA,GAEAr2E,KAAAs7B,YAEAt7B,KAAAs7B,cAGAt7B,KAAAk2E,cAAAl2E,KAAA81E,UAAA90E,SAAAhB,KAAAi2E,MAEAj2E,KAAAq2E,YAAAr2E,KAAA81E,UAAA90E,OAAA,GAEAhB,KAAAs7B,YAEAt7B,KAAAs7B,cAKAt7B,KAAAowD,SAAApwD,KAAA81E,UAAA91E,KAAA47D,eASA8X,EAAA7wE,UAAA0C,QAAA,WAEAvF,KAAAg0B,OACAyV,EAAAuc,OAAAnjD,UAAA0C,QAAAxE,KAAAf,OASA0zE,EAAAgD,WAAA,SAAAC,GAIA,IAAA,GAFApR,MAEA5kE,EAAA,EAAAA,EAAAg2E,EAAA31E,SAAAL,EAEA4kE,EAAA56D,KAAA,GAAA8+B,GAAA/lC,QAAA+gE,UAAAkS,EAAAh2E,IAGA,OAAA,IAAA+yE,GAAAnO,IASAmO,EAAAkD,WAAA,SAAAC,GAIA,IAAA,GAFAtR,MAEA5kE,EAAA,EAAAA,EAAAk2E,EAAA71E,SAAAL,EAEA4kE,EAAA56D,KAAA,GAAA8+B,GAAA/lC,QAAAkhE,UAAAiS,EAAAl2E,IAGA,OAAA,IAAA+yE,GAAAnO,MAEA/4B,UAAA,KAAAsqC,KAAA,SAAAp2E,EAAAjB,EAAAD,GAgBA,QAAAm0E,GAAA1vE,EAAAL,EAAAC,GAEA4lC,EAAAuc,OAAAjlD,KAAAf,KAAAiE,GAOAjE,KAAA+2E,UAAA,GAAAttC,GAAA0N,MAAA,EAAA,GAQAn3C,KAAAg3E,aAAA,GAAAvtC,GAAA0N,MAAA,EAAA,GAUAn3C,KAAAkxC,OAAAttC,GAAA,IAQA5D,KAAAmxC,QAAAttC,GAAA,IAQA7D,KAAA8wD,KAAA,GAAArnB,GAAA+c,WAEAxmD,KAAAi3E,eAAA,KAGAj3E,KAAAqN,OAAA,GAAAo8B,GAAAmd,gBAGA,wBACA,kCACA,gCACA,yBAEA,iCAEA,uBACA,2BAEA,8BACA,uBAEA,mBACA,uFAEA,iCACA,6BACA,6BACA,4BAEA,qDACA,KACAh2C,KAAA,OAEA,wBAEA,8BACA,uBAEA,8BACA,uBACA,2BAEA,mBAEA,iDACA,+DACA,yBAEA,2DACA,KACAA,KAAA,OAIAsmE,QAAA70E,KAAA,MAAA8M,OAAA,EAAA,EAAA,EAAA,IACAgoE,YAAA90E,KAAA,MAAA8M,OAAA,EAAA,EAAA,EAAA,IACAioE,YAAA/0E,KAAA,MAAA8M,OAAA,EAAA,MAlHA,GAAAs6B,GAAA/oC,EAAA,WAEAi4C,EAAA,GAAAlP,GAAA0N,MACAoe,EAAA70D,EAAA,8CAoHAizE,GAAA9wE,UAAA0M,OAAA/L,OAAAimC,EAAAuc,OAAAnjD,WACA8wE,EAAA9wE,UAAAmH,YAAA2pE,EACAl0E,EAAAD,QAAAm0E,EAGApkE,OAAAwhC,iBAAA4iC,EAAA9wE,WAOAe,OACAoM,IAAA,WAEA,MAAAhQ,MAAAkxC,QAEAhhC,IAAA,SAAAf,GAEAnP,KAAAkxC,OAAA/hC,IAUAtL,QACAmM,IAAA,WAEA,MAAAhQ,MAAAmxC,SAEAjhC,IAAA,SAAAf,GAEAnP,KAAAmxC,QAAAhiC,MAKAwkE,EAAA9wE,UAAAshE,iBAAA,aAYAwP,EAAA9wE,UAAAwxC,aAAA,SAAAxL,GAGA,GAAA5kC,GAAAjE,KAAAowD,QAEA,IAAAnsD,GAAAA,EAAA6sD,KAAA,CAKA,GAAAumB,GAAApzE,EAAA6sD,KACAwmB,EAAArzE,EAAAysD,OAAA9sD,MACA2zE,EAAAtzE,EAAAysD,OAAA7sD,OACAwqE,EAAApqE,EAAA25C,YAAAh6C,MACA0qE,EAAArqE,EAAA25C,YAAA/5C,MAEAI,GAAA6sD,KAAA9wD,KAAA8wD,KACA7sD,EAAAysD,OAAA9sD,MAAA5D,KAAA4D,MACAK,EAAAysD,OAAA7sD,OAAA7D,KAAA6D,OAEA7D,KAAAqN,OAAA1G,SAAAywE,WAAAjoE,MAAA,GAAA,EAAAk/D,EACAruE,KAAAqN,OAAA1G,SAAAywE,WAAAjoE,MAAA,GAAA,EAAAm/D,EAEAtuE,KAAAqN,OAAA1G,SAAAuwE,OAAA/nE,MAAA,GAAAkoE,EAAAtmB,GACA/wD,KAAAqN,OAAA1G,SAAAuwE,OAAA/nE,MAAA,GAAAkoE,EAAArmB,GACAhxD,KAAAqN,OAAA1G,SAAAuwE,OAAA/nE,MAAA,GAAAkoE,EAAA38B,GAAA28B,EAAAtmB,GACA/wD,KAAAqN,OAAA1G,SAAAuwE,OAAA/nE,MAAA,GAAAkoE,EAAAx8B,GAAAw8B,EAAArmB,GAEAhxD,KAAAqN,OAAA1G,SAAAwwE,WAAAhoE,MAAA,GAAAnP,KAAAg3E,aAAAriE,GAAA2iE,EAAAt3E,KAAA+2E,UAAApiE,GAAA3U,KAAAkxC,OACAlxC,KAAAqN,OAAA1G,SAAAwwE,WAAAhoE,MAAA,GAAAnP,KAAAg3E,aAAAl/D,GAAAy/D,EAAAv3E,KAAA+2E,UAAAj/D,GAAA9X,KAAAmxC,QACAnxC,KAAAqN,OAAA1G,SAAAwwE,WAAAhoE,MAAA,GAAAk/D,EAAAruE,KAAAkxC,OAAAlxC,KAAA+2E,UAAApiE,EACA3U,KAAAqN,OAAA1G,SAAAwwE,WAAAhoE,MAAA,GAAAm/D,EAAAtuE,KAAAmxC,QAAAnxC,KAAA+2E,UAAAj/D,EAEA+wB,EAAAkV,kBAAAlV,EAAAmD,QAAAwkB,QACA3nB,EAAAmD,QAAAwkB,OAAA9d,OAAA1yC,MAEAiE,EAAA6sD,KAAAumB,EACApzE,EAAAysD,OAAA9sD,MAAA0zE,EACArzE,EAAAysD,OAAA7sD,OAAA0zE,IASA5D,EAAA9wE,UAAA2xC,cAAA,SAAA3L,GAEA,GAAA5kC,GAAAjE,KAAAowD,QAEA,IAAAnsD,EAAA25C,YAAAqZ,UAAA,CAKA,GAAAl/B,GAAA8Q,EAAA9Q,QACAtb,EAAAzc,KAAAkrC,eACAuE,EAAA5G,EAAA4G,WACAmO,EAAA35C,EAAA25C,YACA45B,EAAAx3E,KAAAg3E,aAAAriE,EAAA3U,KAAA+2E,UAAApiE,EAAA1Q,EAAAysD,OAAA9sD,MACA6zE,EAAAz3E,KAAAg3E,aAAAl/D,EAAA9X,KAAA+2E,UAAAj/D,EAAA7T,EAAAysD,OAAA7sD,MAIA,KAAA7D,KAAAi3E,eACA,CAEA,GAAAjM,GAAA,GAAAvhC,GAAA+O,aAAAv0C,EAAAysD,OAAA9sD,MAAAK,EAAAysD,OAAA7sD,OAGA,YAAA7D,KAAA63C,MAEA73C,KAAA8jE,aAAA9jE,KAAA63C,OAEA73C,KAAA8jE,WAAA9jE,KAAA63C,KAEA73C,KAAAukE,cAAAhP,EAAAC,iBAAAx1D,KAAAA,KAAA63C,OAEAmzB,EAAAjzC,QAAAw1B,UAAAvtD,KAAAukE,cAAA,EAAA,IAIAyG,EAAAjzC,QAAAw1B,UAAA3P,EAAAp2C,QAAAvD,EAAAysD,OAAA/7C,GAAA1Q,EAAAysD,OAAA54C,GAEA9X,KAAAi3E,eAAAjM,EAAAjzC,QAAA2/C,cAAA1M,EAAA5/D,OAAA,UAIA2sB,EAAAo1B,YAAAntD,KAAA2zC,WACA5b,EAAA2e,aAAAj6B,EAAAhc,EAAAgvC,EACAhzB,EAAAzX,EAAAyqC,EACAhzB,EAAA4X,EAAAob,EACAhzB,EAAA4uB,EAAAoE,EACAhzB,EAAA0uB,GAAAsE,EACAhzB,EAAA2uB,GAAAqE,GAGA1X,EAAAiZ,MAAAhxC,KAAA+2E,UAAApiE,EAAA3U,KAAA+2E,UAAAj/D,GAEAigB,EAAA8lB,UAAA25B,EAAAx3E,KAAAqtD,OAAA14C,GAAA3U,KAAAkxC,OACAumC,EAAAz3E,KAAAqtD,OAAAv1C,GAAA9X,KAAAmxC,QAGA,IAAA8M,GAAApV,EAAAqV,WAAAl+C,KAAA+3C,UACAkG,KAAApV,EAAA9Q,QAAAomB,2BAEApmB,EAAAomB,yBAAAF,GAIAlmB,EAAAg7B,UAAA/yD,KAAAi3E,eACAl/C,EAAAk7B,UAAAukB,GACAC,EACAz3E,KAAAkxC,OAAAlxC,KAAA+2E,UAAApiE,EACA3U,KAAAmxC,QAAAnxC,KAAA+2E,UAAAj/D,KAcA67D,EAAA9wE,UAAAyoC,UAAA,WAEA,GA8BAzY,GACAE,EACAD,EACAE,EAjCApvB,EAAA5D,KAAAkxC,OACArtC,EAAA7D,KAAAmxC,QAEAiN,EAAAx6C,GAAA,EAAA5D,KAAAqtD,OAAA14C,GACA0pC,EAAAz6C,GAAA5D,KAAAqtD,OAAA14C,EAEA2pC,EAAAz6C,GAAA,EAAA7D,KAAAqtD,OAAAv1C,GACAymC,EAAA16C,GAAA7D,KAAAqtD,OAAAv1C,EAEAozB,EAAAlrC,KAAAkrC,eAEAzqC,EAAAyqC,EAAAzqC,EACAuE,EAAAkmC,EAAAlmC,EACAqvB,EAAA6W,EAAA7W,EACAgX,EAAAH,EAAAG,EACAF,EAAAD,EAAAC,GACAC,EAAAF,EAAAE,GAEAsP,EAAAj6C,EAAA49C,EAAAhqB,EAAAkqB,EAAApT,EACAwP,EAAAtP,EAAAkT,EAAAv5C,EAAAq5C,EAAAjT,EAEAwP,EAAAn6C,EAAA29C,EAAA/pB,EAAAkqB,EAAApT,EACA0P,EAAAxP,EAAAkT,EAAAv5C,EAAAo5C,EAAAhT,EAEAoT,EAAA/9C,EAAA29C,EAAA/pB,EAAAiqB,EAAAnT,EACAsT,EAAApT,EAAAiT,EAAAt5C,EAAAo5C,EAAAhT,EAEAsT,EAAAj+C,EAAA49C,EAAAhqB,EAAAiqB,EAAAnT,EACAwT,EAAAtT,EAAAiT,EAAAt5C,EAAAq5C,EAAAjT,CAOAvY,GAAA6nB,EACA7nB,EAAAA,EAAA+nB,EAAAA,EAAA/nB,EACAA,EAAAA,EAAA2rB,EAAAA,EAAA3rB,EACAA,EAAAA,EAAA6rB,EAAAA,EAAA7rB,EAEAC,EAAA6nB,EACA7nB,EAAAA,EAAA+nB,EAAAA,EAAA/nB,EACAA,EAAAA,EAAA2rB,EAAAA,EAAA3rB,EACAA,EAAAA,EAAA6rB,EAAAA,EAAA7rB,EAEAC,EAAA2nB,EACA3nB,EAAA6nB,EAAA7nB,EAAA6nB,EAAA7nB,EACAA,EAAAyrB,EAAAzrB,EAAAyrB,EAAAzrB,EACAA,EAAA2rB,EAAA3rB,EAAA2rB,EAAA3rB,EAEAC,EAAA2nB,EACA3nB,EAAA6nB,EAAA7nB,EAAA6nB,EAAA7nB,EACAA,EAAAyrB,EAAAzrB,EAAAyrB,EAAAzrB,EACAA,EAAA2rB,EAAA3rB,EAAA2rB,EAAA3rB,CAEA,IAAAwf,GAAAxyC,KAAAszC,OAWA,OATAd,GAAA79B,EAAAke,EACA2f,EAAA5uC,MAAAmvB,EAAAF,EAEA2f,EAAA16B,EAAAgb,EACA0f,EAAA3uC,OAAAmvB,EAAAF,EAGA9yB,KAAA+yC,eAAAP,EAEAA,GAOAmhC,EAAA9wE,UAAA+7C,cAAA,SAAAtI,GAEAt2C,KAAAkrC,eAAAqL,aAAAD,EAAAqC,EAEA,IAGAgC,GAHA/2C,EAAA5D,KAAAkxC,OACArtC,EAAA7D,KAAAmxC,QACAuJ,GAAA92C,EAAA5D,KAAAqtD,OAAA14C,CAGA,OAAAgkC,GAAAhkC,EAAA+lC,GAAA/B,EAAAhkC,EAAA+lC,EAAA92C,IAEA+2C,GAAA92C,EAAA7D,KAAAqtD,OAAAv1C,EAEA6gC,EAAA7gC,EAAA6iC,GAAAhC,EAAA7gC,EAAA6iC,EAAA92C,IAEA,GAIA,GAOA8vE,EAAA9wE,UAAA0C,QAAA,WACAkkC,EAAAuc,OAAAnjD,UAAA0C,QAAAxE,KAAAf,MAEAA,KAAA+2E,UAAA,KACA/2E,KAAA23E,iBAAA,KACA33E,KAAAg3E,aAAA,KAEAh3E,KAAA8wD,KAAA,MAaA6iB,EAAAlP,UAAA,SAAAC,EAAA9gE,EAAAC,GAEA,GAAAI,GAAAwlC,EAAAoB,MAAA85B,aAAAD,EAEA,KAAAzgE,EAEA,KAAA,IAAArD,OAAA,gBAAA8jE,EAAA,yCAAA1kE,KAGA,OAAA,IAAA2zE,GAAA1vE,EAAAL,EAAAC,IAeA8vE,EAAA/O,UAAA,SAAAC,EAAAjhE,EAAAC,EAAAihE,EAAAvyB,GAEA,MAAA,IAAAohC,GAAAlqC,EAAA/lC,QAAAkhE,UAAAC,EAAAC,EAAAvyB,GAAA3uC,EAAAC,MAGA2oC,UAAA,GAAAorC,8CAAA,KAAAC,KAAA,SAAAn3E,EAAAjB,EAAAD,GACA,GAAAiqC,GAAA/oC,EAAA,WACAgpC,EAAAD,EAAAC,cACAmH,EAAA,GAAApH,GAAAqH,MAEApH,GAAA7mC,UAAAi1E,gBAAA,EACApuC,EAAA7mC,UAAAk1E,qBAAA,KACAruC,EAAA7mC,UAAAm1E,sBAAA,KAEAtuC,EAAA7mC,UAAAo1E,yBAAA,KACAvuC,EAAA7mC,UAAAq1E,iBAAA,KACAxuC,EAAA7mC,UAAAs1E,iBAAA,KACAzuC,EAAA7mC,UAAAu1E,cAAA,KAEA7oE,OAAAwhC,iBAAArH,EAAA7mC,WAUAw1E,eACAroE,IAAA,WAEA,MAAAhQ,MAAA83E,gBAEA5nE,IAAA,SAAAf,GAEAnP,KAAA83E,iBAAA3oE,IAKAnP,KAAA83E,eAAA3oE,EAEAA,GAEAnP,KAAA+3E,qBAAA/3E,KAAA0zC,YACA1zC,KAAAg4E,sBAAAh4E,KAAAy0C,aAEAz0C,KAAAi4E,yBAAAj4E,KAAA2yC,gBACA3yC,KAAAs4E,mBAAAt4E,KAAAsrC,UAEAtrC,KAAAm4E,iBAAAn4E,KAAAuF,QAEAvF,KAAAu4E,uBAAAv4E,KAAA4+C,cAEA5+C,KAAA0zC,YAAA1zC,KAAAw4E,mBACAx4E,KAAAy0C,aAAAz0C,KAAAy4E,oBAEAz4E,KAAAuF,QAAAvF,KAAA04E,wBAKA14E,KAAAo4E,eAEAp4E,KAAA24E,8BAGA34E,KAAA0zC,YAAA1zC,KAAA+3E,qBACA/3E,KAAAy0C,aAAAz0C,KAAAg4E,sBACAh4E,KAAAsrC,UAAAtrC,KAAAs4E,mBAEAt4E,KAAAuF,QAAAvF,KAAAm4E,iBAEAn4E,KAAA2yC,gBAAA3yC,KAAAi4E,yBACAj4E,KAAA4+C,cAAA5+C,KAAAu4E,6BAWA7uC,EAAA7mC,UAAA21E,mBAAA,SAAA3vC,IAEA7oC,KAAAkqC,SAAAlqC,KAAA2zC,YAAA,IAAA3zC,KAAA4zC,aAKA5zC,KAAA44E,yBAAA/vC,GAEA7oC,KAAAo4E,cAAAzkC,WAAA3zC,KAAA2zC,WAEA9K,EAAAkV,kBAAAlV,EAAAmD,QAAAwkB,QACA3nB,EAAAmD,QAAAwkB,OAAA9d,OAAA1yC,KAAAo4E,iBASA1uC,EAAA7mC,UAAA+1E,yBAAA,SAAA/vC,GAEA,IAAA7oC,KAAAo4E,cAAA,CAMAvvC,EAAAkL,gBAAAC,OAKA,IAAAxB,GAAAxyC,KAAAixC,iBAAA2H,OAGA,IAAA54C,KAAA8zC,SACA,CACA,GAAAgL,GAAA9+C,KAAA8zC,SAAA,GAAAgL,OACAtM,GAAA79B,GAAAmqC,EACAtM,EAAA16B,GAAAgnC,EAEAtM,EAAA5uC,OAAA,EAAAk7C,EACAtM,EAAA3uC,QAAA,EAAAi7C,EAKA,GAAA+5B,GAAAhwC,EAAAinB,oBAEAqO,EAAAt1B,EAAAoL,cAAAmlB,YAGA3mB,EAAA,GAAAhJ,GAAAmH,cAAA/H,EAAA,EAAA2J,EAAA5uC,MAAA,EAAA4uC,EAAA3uC,QAGA0mB,EAAAsmB,CAEAtmB,GAAA4gB,IAAAqH,EAAA79B,EACA4V,EAAA6gB,IAAAoH,EAAA16B,EAKA9X,KAAA0zC,YAAA1zC,KAAA+3E,qBAEAtlC,EAAAC,OAAA1yC,KAAAuqB,GAAA,GAAA,GAGAse,EAAAozB,gBAAA4c,GACAhwC,EAAAoL,cAAAmlB,YAAA+E,EAEAn+D,KAAA0zC,YAAA1zC,KAAAw4E,mBACAx4E,KAAA2yC,gBAAA3yC,KAAA4yC,6BACA5yC,KAAAsrC,UAAAtrC,KAAA84E,iBAIA94E,KAAAo4E,cAAA,GAAA3uC,GAAAuc,OAAAvT,GACAzyC,KAAAo4E,cAAAltC,eAAAlrC,KAAAkrC,eACAlrC,KAAAo4E,cAAA/qB,OAAA14C,IAAA69B,EAAA79B,EAAA69B,EAAA5uC,OACA5D,KAAAo4E,cAAA/qB,OAAAv1C,IAAA06B,EAAA16B,EAAA06B,EAAA3uC,QAGA7D,KAAA2yC,kBAGA3yC,KAAA4+C,cAAA5+C,KAAAo4E,cAAAx5B,cAAA57C,KAAAhD,KAAAo4E,iBASA1uC,EAAA7mC,UAAA41E,oBAAA,SAAA5vC,IAEA7oC,KAAAkqC,SAAAlqC,KAAA2zC,YAAA,IAAA3zC,KAAA4zC,aAKA5zC,KAAA+4E,+BAAAlwC,GAEA7oC,KAAAo4E,cAAAzkC,WAAA3zC,KAAA2zC,WAEA3zC,KAAAo4E,cAAA3jC,aAAA5L,KAUAa,EAAA7mC,UAAAk2E,+BAAA,SAAAlwC,GAEA,IAAA7oC,KAAAo4E,cAAA,CAMA,GAAA5lC,GAAAxyC,KAAAixC,iBAEA4nC,EAAAhwC,EAAA9Q,QAEA0a,EAAA,GAAAhJ,GAAAmH,cAAA/H,EAAA,EAAA2J,EAAA5uC,MAAA,EAAA4uC,EAAA3uC,QAGA0mB,EAAAsmB,CAEAtmB,GAAA4gB,IAAAqH,EAAA79B,EACA4V,EAAA6gB,IAAAoH,EAAA16B,EAGA9X,KAAAy0C,aAAAz0C,KAAAg4E,sBAEAvlC,EAAAC,OAAA1yC,KAAAuqB,GAAA,GAGAse,EAAA9Q,QAAA8gD,EAEA74E,KAAAy0C,aAAAz0C,KAAAy4E,oBACAz4E,KAAA2yC,gBAAA3yC,KAAA4yC,6BACA5yC,KAAAsrC,UAAAtrC,KAAA84E,iBAIA94E,KAAAo4E,cAAA,GAAA3uC,GAAAuc,OAAAvT,GACAzyC,KAAAo4E,cAAAltC,eAAAlrC,KAAAkrC,eACAlrC,KAAAo4E,cAAA/qB,OAAA14C,IAAA69B,EAAA79B,EAAA69B,EAAA5uC,OACA5D,KAAAo4E,cAAA/qB,OAAAv1C,IAAA06B,EAAA16B,EAAA06B,EAAA3uC,QAEA7D,KAAA2yC,kBAEA3yC,KAAA4+C,cAAA5+C,KAAAo4E,cAAAx5B,cAAA57C,KAAAhD,KAAAo4E,iBAQA1uC,EAAA7mC,UAAAi2E,iBAAA,WAIA,MAFA94E,MAAAo4E,cAAArlC,eAAA,KAEA/yC,KAAAo4E,cAAA9sC,aAQA5B,EAAA7mC,UAAA81E,4BAAA,WAEA34E,KAAAo4E,cAAAhoB,SAAA7qD,UACAvF,KAAAo4E,cAAA,MAGA1uC,EAAA7mC,UAAA61E,sBAAA,WAEA14E,KAAAq4E,eAAA,EACAr4E,KAAAm4E,sBAGA3rC,UAAA,KAAAwsC,KAAA,SAAAt4E,EAAAjB,EAAAD,GACA,GAAAiqC,GAAA/oC,EAAA,UAQA+oC,GAAAC,cAAA7mC,UAAA2L,KAAA,KASAi7B,EAAAiH,UAAA7tC,UAAAo2E,eAAA,SAAAzqE,GAEA,IAAA,GAAA7N,GAAA,EAAAA,EAAAX,KAAAqpC,SAAAroC,OAAAL,IAEA,GAAAX,KAAAqpC,SAAA1oC,GAAA6N,OAAAA,EAEA,MAAAxO,MAAAqpC,SAAA1oC,EAGA,OAAA,SAGA6rC,UAAA,KAAA0sC,KAAA,SAAAx4E,EAAAjB,EAAAD,GACA,GAAAiqC,GAAA/oC,EAAA,UASA+oC,GAAAC,cAAA7mC,UAAAs2E,kBAAA,SAAA7iC,GAiBA,MAfAA,GAAAA,GAAA,GAAA7M,GAAA0N,MAEAn3C,KAAAsxC,QAEAtxC,KAAA4yC,+BAEA0D,EAAA3hC,EAAA3U,KAAAkrC,eAAAC,GACAmL,EAAAx+B,EAAA9X,KAAAkrC,eAAAE,KAIAkL,EAAA3hC,EAAA3U,KAAA+oC,SAAAp0B,EACA2hC,EAAAx+B,EAAA9X,KAAA+oC,SAAAjxB,GAGAw+B,KAGA9J,UAAA,KAAA4sC,KAAA,SAAA14E,EAAAjB,EAAAD,GAQAkB,EAAA,mBACAA,EAAA,oBACAA,EAAA,uBAKAjB,EAAAD,SACAk0E,UAAAhzE,EAAA,eACAizE,aAAAjzE,EAAA,kBACAkzE,WAAAlzE,EAAA,mBAGA24E,eAAA,IAAAC,cAAA,IAAAC,iBAAA,IAAAC,kBAAA,IAAAC,mBAAA,IAAAC,sBAAA,MAAAC,KAAA,SAAAj5E,EAAAjB,EAAAD,GAmBA,QAAAo6E,KAEAnwC,EAAAmd,eAAA7lD,KAAAf,KAEA,KAEA,+gCAGAs8D,YAAAj6D,KAAA,MAAA8M,MAAA,GAAAtH,eAAA,EAAA,EAAA,EAAA,KACAgyE,WAAAx3E,KAAA,KAAA8M,MAAA,KA5BA,GAAAs6B,GAAA/oC,EAAA,aAiCAk5E,GAAA/2E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACA+2E,EAAA/2E,UAAAmH,YAAA4vE,EACAn6E,EAAAD,QAAAo6E,EAEArqE,OAAAwhC,iBAAA6oC,EAAA/2E,WAOAkI,MACAiF,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAkzE,UAAA1qE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAkzE,UAAA1qE,MAAAA,QAKA2qE,aAAA,KAAAC,KAAA,SAAAr5E,EAAAjB,EAAAD,GAaA,QAAAw6E,KAEAvwC,EAAAmd,eAAA7lD,KAAAf,MAEAA,KAAAi6E,YAAA,GAAAC,GACAl6E,KAAAm6E,YAAA,GAAAC,GAEAp6E,KAAAq6E,cAAA,GAAA5wC,GAAAmd,eAnBA,GAAAnd,GAAA/oC,EAAA,cACAw5E,EAAAx5E,EAAA,uBACA05E,EAAA15E,EAAA,sBAoBAs5E,GAAAn3E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACAm3E,EAAAn3E,UAAAmH,YAAAgwE,EACAv6E,EAAAD,QAAAw6E,EAEAA,EAAAn3E,UAAA83D,YAAA,SAAA9xB,EAAAtf,EAAArB,GAEA,GAAAgxC,GAAArwB,EAAAoL,cAAA+nB,iBAAA,EAGAh8D,MAAAq6E,cAAA1f,YAAA9xB,EAAAtf,EAAArB,GAEAloB,KAAAi6E,YAAAtf,YAAA9xB,EAAAtf,EAAA2vC,GAEArwB,EAAA8X,iBAAAC,aAAAnX,EAAAiE,YAAAI,QAEA9tC,KAAAm6E,YAAAxf,YAAA9xB,EAAAqwB,EAAAhxC,GAEA2gB,EAAA8X,iBAAAC,aAAAnX,EAAAiE,YAAAC,QAEA9E,EAAAoL,cAAAuoB,mBAAAtD,IAGA3pD,OAAAwhC,iBAAAipC,EAAAn3E,WAQAy3E,MACAtqE,IAAA,WAEA,MAAAhQ,MAAAi6E,YAAAK,MAEApqE,IAAA,SAAAf,GAEAnP,KAAAi6E,YAAAK,KAAAt6E,KAAAm6E,YAAAG,KAAAnrE,IAWAorE,OACAvqE,IAAA,WAEA,MAAAhQ,MAAAi6E,YAAAK,MAEApqE,IAAA,SAAAf,GAEAnP,KAAAi6E,YAAAK,KAAAnrE,IAWAqrE,OACAxqE,IAAA,WAEA,MAAAhQ,MAAAm6E,YAAAG,MAEApqE,IAAA,SAAAf,GAEAnP,KAAAm6E,YAAAG,KAAAnrE,QAKA2qE,aAAA,GAAAW,sBAAA,IAAAC,sBAAA,MAAAC,KAAA,SAAAj6E,EAAAjB,EAAAD,GAaA,QAAAo7E,GAAAC,EAAAC,GAEArxC,EAAAmd,eAAA7lD,KAAAf,KAEA,0xBAEA,yhBAGA+6E,UAAA14E,KAAA,KAAA8M,MAAA,GACA0rE,MAAAx4E,KAAA,KAAA8M,MAAA0rE,GAAA,GACAC,MAAAz4E,KAAA,KAAA8M,MAAA2rE,GAAA,KAIA96E,KAAAq6E,cAAA,GAAA5wC,GAAAmd,eAQA5mD,KAAAg7E,OAAA,EAQAh7E,KAAA66E,KAAAA,GAAA,EAQA76E,KAAA86E,KAAAA,GAAA,EAEA96E,KAAA+6E,SAAA,EArDA,GAAAtxC,GAAA/oC,EAAA,aAwDAk6E,GAAA/3E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACA+3E,EAAA/3E,UAAAmH,YAAA4wE,EACAn7E,EAAAD,QAAAo7E,EAEAA,EAAA/3E,UAAA83D,YAAA,SAAA9xB,EAAAtf,EAAArB,EAAAnjB,GAEA,GAAAsI,GAAArN,KAAA06D,UAAA7xB,EAIA,IAFA7oC,KAAA2G,SAAAo0E,SAAA5rE,MAAAnP,KAAA+6E,SAAA,EAAA/6E,KAAAg7E,QAAAzxD,EAAA6jC,MAAAxpD,MAAA2lB,EAAAxe,KAAAnH,OAEA,IAAA5D,KAAAg7E,OACAnyC,EAAAoL,cAAA0mB,YAAAttD,EAAAkc,EAAArB,EAAAnjB,OACA,CACA,GAAAm0D,GAAArwB,EAAAoL,cAAA+nB,iBAAA,EAEAnzB,GAAAoL,cAAA0mB,YAAAttD,EAAAkc,EAAA2vC,EAAAn0D,EAEA,KAAA,GAAApE,GAAA,EAAAA,EAAAX,KAAAg7E,OAAA,EAAAr6E,IAGAkoC,EAAAoL,cAAA0mB,YAAAttD,EAAA6rD,EAAAA,EAAAn0D,EAGA8jC,GAAAoL,cAAA0mB,YAAAttD,EAAA6rD,EAAAhxC,EAAAnjB,GAEA8jC,EAAAoL,cAAAuoB,mBAAAtD,KAKA3pD,OAAAwhC,iBAAA6pC,EAAA/3E,WAQAy3E,MACAtqE,IAAA,WAEA,MAAAhQ,MAAA+6E,UAEA7qE,IAAA,SAAAf,GAEAnP,KAAA8+C,QAAA,GAAA3vC,EACAnP,KAAA+6E,SAAA5rE,IAUA0rE,MACA7qE,IAAA,WAEA,MAAAhQ,MAAA66E,MAEA3qE,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAk0E,KAAA1rE,MAAAA,IAUA2rE,MACA9qE,IAAA,WAEA,MAAAhQ,MAAA86E,MAEA5qE,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAm0E,KAAA3rE,MAAAA,QAKA2qE,aAAA,KAAAmB,KAAA,SAAAv6E,EAAAjB,EAAAD,GAaA,QAAA07E,KAEAzxC,EAAAmd,eAAA7lD,KAAAf,MAEAA,KAAAi6E,YAAA,GAAAC,GACAl6E,KAAAm6E,YAAA,GAAAC,GAjBA,GAAA3wC,GAAA/oC,EAAA,cACAw5E,EAAAx5E,EAAA,iBACA05E,EAAA15E,EAAA,gBAkBAw6E,GAAAr4E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACAq4E,EAAAr4E,UAAAmH,YAAAkxE,EACAz7E,EAAAD,QAAA07E,EAEAA,EAAAr4E,UAAA83D,YAAA,SAAA9xB,EAAAtf,EAAArB,GAEA,GAAAgxC,GAAArwB,EAAAoL,cAAA+nB,iBAAA,EAEAh8D,MAAAi6E,YAAAtf,YAAA9xB,EAAAtf,EAAA2vC,GACAl5D,KAAAm6E,YAAAxf,YAAA9xB,EAAAqwB,EAAAhxC,GAEA2gB,EAAAoL,cAAAuoB,mBAAAtD,IAGA3pD,OAAAwhC,iBAAAmqC,EAAAr4E,WAQAy3E,MACAtqE,IAAA,WAEA,MAAAhQ,MAAAi6E,YAAAK,MAEApqE,IAAA,SAAAf,GAEAnP,KAAA8+C,QAAA,GAAAtpC,KAAAygB,IAAA9mB,GACAnP,KAAAi6E,YAAAK,KAAAt6E,KAAAm6E,YAAAG,KAAAnrE,IAWA6rE,QACAhrE,IAAA,WAEA,MAAAhQ,MAAAi6E,YAAAe,QAEA9qE,IAAA,SAAAf,GAEAnP,KAAAi6E,YAAAe,OAAAh7E,KAAAm6E,YAAAa,OAAA7rE,IAWAorE,OACAvqE,IAAA,WAEA,MAAAhQ,MAAAi6E,YAAAK,MAEApqE,IAAA,SAAAf,GAEAnP,KAAAi6E,YAAAK,KAAAnrE,IAWAqrE,OACAxqE,IAAA,WAEA,MAAAhQ,MAAAm6E,YAAAG,MAEApqE,IAAA,SAAAf,GAEAnP,KAAAm6E,YAAAG,KAAAnrE,QAKA2qE,aAAA,GAAAqB,gBAAA,IAAAC,gBAAA,MAAAC,KAAA,SAAA36E,EAAAjB,EAAAD,GAYA,QAAA06E,KAEAzwC,EAAAmd,eAAA7lD,KAAAf,KAEA,22BAEA,uwBAGA+6E,UAAA14E,KAAA,KAAA8M,MAAA,KAUAnP,KAAAg7E,OAAA,EAEAh7E,KAAA+6E,SAAA,EAhCA,GAAAtxC,GAAA/oC,EAAA,aAmCAw5E,GAAAr3E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACAq3E,EAAAr3E,UAAAmH,YAAAkwE,EACAz6E,EAAAD,QAAA06E,EAEAA,EAAAr3E,UAAA83D,YAAA,SAAA9xB,EAAAtf,EAAArB,EAAAnjB,GAEA,GAAAsI,GAAArN,KAAA06D,UAAA7xB,EAIA,IAFA7oC,KAAA2G,SAAAo0E,SAAA5rE,MAAAnP,KAAA+6E,SAAA,EAAA/6E,KAAAg7E,QAAAzxD,EAAA6jC,MAAAxpD,MAAA2lB,EAAAxe,KAAAnH,OAEA,IAAA5D,KAAAg7E,OAEAnyC,EAAAoL,cAAA0mB,YAAAttD,EAAAkc,EAAArB,EAAAnjB,OAGA,CAKA,IAAA,GAJAm0D,GAAArwB,EAAAoL,cAAA+nB,iBAAA,GACAsf,EAAA/xD,EACAgyD,EAAAriB,EAEAv4D,EAAA,EAAAA,EAAAX,KAAAg7E,OAAA,EAAAr6E,IACA,CACAkoC,EAAAoL,cAAA0mB,YAAAttD,EAAAiuE,EAAAC,GAAA,EAEA,IAAA5e,GAAA4e,CACAA,GAAAD,EACAA,EAAA3e,EAGA9zB,EAAAoL,cAAA0mB,YAAAttD,EAAAiuE,EAAApzD,EAAAnjB,GAEA8jC,EAAAoL,cAAAuoB,mBAAAtD,KAKA3pD,OAAAwhC,iBAAAmpC,EAAAr3E,WAQAy3E,MACAtqE,IAAA,WAEA,MAAAhQ,MAAA+6E,UAEA7qE,IAAA,SAAAf,GAEAnP,KAAA8+C,QAAA,GAAAtpC,KAAAygB,IAAA9mB,GACAnP,KAAA+6E,SAAA5rE,QAKA2qE,aAAA,KAAA0B,KAAA,SAAA96E,EAAAjB,EAAAD,GAYA,QAAA46E,KAEA3wC,EAAAmd,eAAA7lD,KAAAf,KAEA,02BAEA,uwBAGA+6E,UAAA14E,KAAA,KAAA8M,MAAA,KAIAnP,KAAAg7E,OAAA,EACAh7E,KAAA+6E,SAAA,EAzBA,GAAAtxC,GAAA/oC,EAAA,aA4BA05E,GAAAv3E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACAu3E,EAAAv3E,UAAAmH,YAAAowE,EACA36E,EAAAD,QAAA46E,EAEAA,EAAAv3E,UAAA83D,YAAA,SAAA9xB,EAAAtf,EAAArB,EAAAnjB,GAEA,GAAAsI,GAAArN,KAAA06D,UAAA7xB,EAIA,IAFA7oC,KAAA2G,SAAAo0E,SAAA5rE,MAAAqG,KAAAygB,IAAAj2B,KAAA+6E,UAAA,EAAA/6E,KAAAg7E,QAAAzxD,EAAA6jC,MAAAvpD,OAAA0lB,EAAAxe,KAAAlH,QAEA,IAAA7D,KAAAg7E,OAEAnyC,EAAAoL,cAAA0mB,YAAAttD,EAAAkc,EAAArB,EAAAnjB,OAGA,CAKA,IAAA,GAJAm0D,GAAArwB,EAAAoL,cAAA+nB,iBAAA,GACAsf,EAAA/xD,EACAgyD,EAAAriB,EAEAv4D,EAAA,EAAAA,EAAAX,KAAAg7E,OAAA,EAAAr6E,IACA,CACAkoC,EAAAoL,cAAA0mB,YAAAttD,EAAAiuE,EAAAC,GAAA,EAEA,IAAA5e,GAAA4e,CACAA,GAAAD,EACAA,EAAA3e,EAGA9zB,EAAAoL,cAAA0mB,YAAAttD,EAAAiuE,EAAApzD,EAAAnjB,GAEA8jC,EAAAoL,cAAAuoB,mBAAAtD,KAKA3pD,OAAAwhC,iBAAAqpC,EAAAv3E,WAQAy3E,MACAtqE,IAAA,WAEA,MAAAhQ,MAAA+6E,UAEA7qE,IAAA,SAAAf,GAEAnP,KAAA8+C,QAAA,GAAAtpC,KAAAygB,IAAA9mB,GACAnP,KAAA+6E,SAAA5rE,QAKA2qE,aAAA,KAAA2B,KAAA,SAAA/6E,EAAAjB,EAAAD,GAYA,QAAAk8E,KAEAjyC,EAAAmd,eAAA7lD,KAAAf,KAEA,KAEA,gyBAGA8oB,OAAAzmB,KAAA,KAAA8M,OAAAwF,EAAA,GAAAmD,EAAA,MApBA,GAAA2xB,GAAA/oC,EAAA,aAyBAg7E,GAAA74E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACA64E,EAAA74E,UAAAmH,YAAA0xE,EACAj8E,EAAAD,QAAAk8E,IAEA5B,aAAA,KAAA6B,KAAA,SAAAj7E,EAAAjB,EAAAD,GAoBA,QAAAo8E,KAEAnyC,EAAAmd,eAAA7lD,KAAAf,KAEA,KAEA,m9BAGAuqB,GACAloB,KAAA,MAAA8M,OACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,MAjCA,GAAAs6B,GAAA/oC,EAAA,aAwCAk7E,GAAA/4E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACA+4E,EAAA/4E,UAAAmH,YAAA4xE,EACAn8E,EAAAD,QAAAo8E,EASAA,EAAA/4E,UAAAg5E,YAAA,SAAA1lC,EAAA2lC,GAEAA,IAAAA,CAEA,IAAAC,GAAA5lC,CAEA2lC,KACA97E,KAAAg8E,UAAAD,EAAA/7E,KAAA2G,SAAA4jB,EAAApb,MAAAgnC,GACA4lC,EAAA/7E,KAAAi8E,aAAAF,IAIA/7E,KAAA2G,SAAA4jB,EAAApb,MAAA4sE,GAWAH,EAAA/4E,UAAAm5E,UAAA,SAAAxyD,EAAA/oB,EAAAuE,GA+BA,MA3BAwkB,GAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAw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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","gl-matrix","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","worldAlpha","alpha","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Transform","pivot","_rotation","localTransform","filterArea","_sr","_cr","dirtyTransform","_tempDisplayObjectParent","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","displayObjectUpdateTransform","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const","./TransformStatic",41,"ObservablePoint","_x","_y",42,"parentTransform","pt","lt","./ObservablePoint",43,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","Point","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",44,"_lineTint","_fillTint",45,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",46,"glPoints","glIndices","Uint16Array","deleteBuffer",47,48,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",49,50,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",51,"vertPos",52,"rectData",53,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",54,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","BaseRenderTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseRenderTexture","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",55,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",56,57,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",58,"dx","dy","r2","./Rectangle",59,"normx","normy",60,"points_","il","xi","yi","xj","yj","intersect","../Point",61,62,63,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",64,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",65,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",66,"TextureShader","../../renderers/webgl/shaders/TextureShader",67,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",68,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",69,70,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",71,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",72,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",73,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",74,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",75,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",76,"./AbstractFilter",77,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",78,"currentBlendMode","blendFunc","./WebGLManager",79,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",80,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",81,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",82,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",83,84,"./Shader",85,86,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",87,"customUniforms","customAttributes","uSampler",88,89,"../managers/WebGLManager",90,"colors","rect2",91,"StencilMaskStack","frameBuffer","defaultFrame","destinationFrame","sourceFrame","stencilBuffer","calculateProjection","SCISSOR_TEST","scissor","viewport","pm","projectionFrame","./StencilMaskStack",92,93,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",94,95,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",96,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",97,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",98,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",99,"textureBuffer","tempRect","currentBounds","cachedWt","realResolution","getImage","image","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",100,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","getResolutionOfUrl",101,"baseRenderTexture","_updateUvs","updateBase","./BaseRenderTexture",102,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",103,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",104,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",105,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",106,"shared","./Ticker",107,"totalIndices",108,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",109,"__plugins","pluginName","ctor",110,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",111,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",112,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",113,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",114,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",115,"getChildByName",116,"getGlobalPosition",117,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",118,"AsciiFilter","pixelSize","../../core",119,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",120,"BlurDirFilter","dirX","dirY","strength","passes",121,"BlurFilter","./BlurXFilter","./BlurYFilter",122,"flip","flop",123,124,"SmartBlurFilter",125,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",126,"ColorStepFilter",127,"ConvolutionFilter","texelSize",128,"CrossHatchFilter",129,"DisplacementFilter","mapSampler",130,"DotScreenFilter",131,"BlurYTintFilter",132,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",133,"GrayFilter","gray",134,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",135,136,"noise",137,138,"red","green","blue",139,140,"center","params",141,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",142,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",143,"./TiltShiftAxisFilter",144,145,146,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",147,"InteractionData","originalEvent","getLocalPosition","globalPos",148,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",149,"interactiveTarget","./InteractionManager",150,151,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",152,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",153,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",154,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",155,156,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",157,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",158,"factor","nextPoint","perpLength","num","perpX","perpY",159,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",160,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",161,162,"isNaN",163,164,"./Math.sign","./Object.assign","./requestAnimationFrame",165,"Date","getTime","startTime","vendors","delay"],"mappings":"CAAA,SAAAA,GAAA,GAAA,gBAAAC,UAAA,mBAAAC,QAAAA,OAAAD,QAAAD,QAAA,IAAA,kBAAAG,SAAAA,OAAAC,IAAAD,UAAAH,OAAA,CAAA,GAAAK,EAAAA,GAAA,mBAAAC,QAAAA,OAAA,mBAAAC,QAAAA,OAAA,mBAAAC,MAAAA,KAAAC,KAAAJ,EAAAK,KAAAV,MAAA,WAAA,GAAAG,EAAA,OAAA,SAAAQ,GAAAC,EAAAC,EAAAC,GAAA,QAAAC,GAAAC,EAAAC,GAAA,IAAAJ,EAAAG,GAAA,CAAA,IAAAJ,EAAAI,GAAA,CAAA,GAAAE,GAAA,kBAAAC,UAAAA,OAAA,KAAAF,GAAAC,EAAA,MAAAA,GAAAF,GAAA,EAAA,IAAAI,EAAA,MAAAA,GAAAJ,GAAA,EAAA,IAAAhB,GAAA,GAAAqB,OAAA,uBAAAL,EAAA,IAAA,MAAAhB,GAAAsB,KAAA,mBAAAtB,EAAA,GAAAuB,GAAAV,EAAAG,IAAAf,WAAAW,GAAAI,GAAA,GAAAQ,KAAAD,EAAAtB,QAAA,SAAAU,GAAA,GAAAE,GAAAD,EAAAI,GAAA,GAAAL,EAAA,OAAAI,GAAAF,EAAAA,EAAAF,IAAAY,EAAAA,EAAAtB,QAAAU,EAAAC,EAAAC,EAAAC,GAAA,MAAAD,GAAAG,GAAAf,QAAA,IAAA,GAAAmB,GAAA,kBAAAD,UAAAA,QAAAH,EAAA,EAAAA,EAAAF,EAAAW,OAAAT,IAAAD,EAAAD,EAAAE,GAAA,OAAAD,KAAAW,GAAA,SAAAP,EAAAjB,EAAAD,GAGAC,EAAAD,SAEA0B,cAAAR,EAAA,uBACAS,sBAAAT,EAAA,+BAEAU,SAAAV,EAAA,kBACAW,cAAAX,EAAA,uBACAY,SAAAZ,EAAA,kBACAa,UAAAb,EAAA,mBAEAc,kBAAAd,EAAA,8BAGAe,iBAAA,EAAAC,sBAAA,EAAAC,iBAAA,EAAAC,kBAAA,EAAAC,0BAAA,EAAAC,sBAAA,EAAAC,8BAAA,IAAAC,GAAA,SAAAtB,EAAAjB,EAAAD,GAUA,GAAAyC,GAAA,GAAAC,aAAA,GAEAC,EAAA,SAAAC,EAAAC,EAAAC,EAAAC,GAEAvC,KAAAoC,GAAAA,EAEApC,KAAAwC,OAAAJ,EAAAK,eACAzC,KAAAqC,KAAAA,GAAAD,EAAAM,aACA1C,KAAAuC,SAAAA,GAAAH,EAAAO,YACA3C,KAAAsC,KAAAL,EAEAK,GAEAtC,KAAA4C,OAAAN,GAIAH,GAAAU,UAAAD,OAAA,SAAAN,EAAAQ,EAAAC,GAIA/C,KAAAgD,MAEA,IAAAZ,GAAApC,KAAAoC,EAEAE,GAAAA,GAAAtC,KAAAsC,KACAQ,EAAAA,GAAA,EAEA9C,KAAAsC,KAAAW,YAAAX,EAAAW,WAEAb,EAAAc,cAAAlD,KAAAqC,KAAAS,EAAAR,GAIAF,EAAAe,WAAAnD,KAAAqC,KAAAC,EAAAtC,KAAAuC,UAGAvC,KAAAsC,KAAAA,GAGAH,EAAAU,UAAAG,KAAA,WAEA,GAAAZ,GAAApC,KAAAoC,EACAA,GAAAgB,WAAApD,KAAAqC,KAAArC,KAAAwC,SAGAL,EAAAkB,mBAAA,SAAAjB,EAAAE,EAAAC,GAEA,MAAA,IAAAJ,GAAAC,EAAAA,EAAAM,aAAAJ,EAAAC,IAGAJ,EAAAmB,kBAAA,SAAAlB,EAAAE,EAAAC,GAEA,MAAA,IAAAJ,GAAAC,EAAAA,EAAAmB,qBAAAjB,EAAAC,IAGAJ,EAAAqB,OAAA,SAAApB,EAAAC,EAAAC,EAAAC,GAEA,MAAA,IAAAJ,GAAAC,EAAAC,EAAAE,IAKA9C,EAAAD,QAAA2C,OAGAsB,GAAA,SAAA/C,EAAAjB,EAAAD,GAEA,GAAAkE,GAAAhD,EAAA,eAUAiD,EAAA,SAAAvB,EAAAwB,EAAAC,GAEA7D,KAAAoC,GAAAA,EAEApC,KAAA8D,YAAA1B,EAAA2B,oBAEA/D,KAAAgE,QAAA,KACAhE,KAAAiE,QAAA,KAEAjE,KAAA4D,MAAAA,GAAA,IACA5D,KAAA6D,OAAAA,GAAA,IAGAF,GAAAd,UAAAqB,cAAA,SAAAD,GAEA,GAAA7B,GAAApC,KAAAoC,EAEApC,MAAAiE,QAAAA,GAAA,GAAAP,GAAAtB,GAEApC,KAAAiE,QAAAjB,OAIAhD,KAAAgD,OAEAZ,EAAA+B,qBAAA/B,EAAAgC,YAAAhC,EAAAiC,kBAAAjC,EAAAkC,WAAAtE,KAAAiE,QAAAA,QAAA,IAGAN,EAAAd,UAAA0B,cAAA,WAEA,IAAAvE,KAAAgE,QAAA,CAEA,GAAA5B,GAAApC,KAAAoC,EAEApC,MAAAgE,QAAA5B,EAAAoC,qBAEApC,EAAAqC,iBAAArC,EAAAsC,aAAA1E,KAAAgE,SAGA5B,EAAAuC,wBAAAvC,EAAAgC,YAAAhC,EAAAwC,yBAAAxC,EAAAsC,aAAA1E,KAAAgE,SACA5B,EAAAyC,oBAAAzC,EAAAsC,aAAAtC,EAAA0C,cAAA9E,KAAA4D,MAAA5D,KAAA6D,UAGAF,EAAAd,UAAAkC,MAAA,SAAA1E,EAAAT,EAAAoF,EAAAvE,GAEAT,KAAAgD,MAEA,IAAAZ,GAAApC,KAAAoC,EAEAA,GAAA6C,WAAA5E,EAAAT,EAAAoF,EAAAvE,GACA2B,EAAA2C,MAAA3C,EAAA8C,mBAGAvB,EAAAd,UAAAG,KAAA,WAEA,GAAAZ,GAAApC,KAAAoC,EACAA,GAAA+C,gBAAA/C,EAAAgC,YAAApE,KAAA8D,cAGAH,EAAAd,UAAAuC,OAAA,WAEAhD,GAAA+C,gBAAA/C,GAAAgC,YAAA,OAGAT,EAAAd,UAAAwC,OAAA,SAAAzB,EAAAC,GAEA,GAAAzB,GAAApC,KAAAoC,EAEApC,MAAA4D,MAAAA,EACA5D,KAAA6D,OAAAA,EAEA7D,KAAAiE,SAEAjE,KAAAiE,QAAAqB,WAAA,KAAA1B,EAAAC,GAGA7D,KAAAgE,UAGA5B,EAAAqC,iBAAArC,EAAAsC,aAAA1E,KAAAgE,SACA5B,EAAAyC,oBAAAzC,EAAAsC,aAAAtC,EAAA0C,cAAAlB,EAAAC,KAIAF,EAAAd,UAAA0C,QAAA,WAEA,GAAAnD,GAAApC,KAAAoC,EAEAA,GAAAoD,kBAAAxF,KAAA8D,cAGAH,EAAA8B,WAAA,SAAArD,EAAAwB,EAAAC,EAAAvB,GAEA,GAAA2B,GAAAP,EAAAgC,SAAAtD,EAAA,KAAAwB,EAAAC,EACAI,GAAA0B,uBACA1B,EAAA2B,iBAGA,IAAAC,GAAA,GAAAlC,GAAAvB,EAAAwB,EAAAC,EAKA,OAJAgC,GAAA3B,cAAAD,GAEA4B,EAAAT,SAEAS,GAGAlC,EAAAmC,cAAA,SAAA1D,EAAAwB,EAAAC,EAAAvB,GAGA,GAAA2B,GAAA,GAAAP,GAAAgC,SAAAtD,EAAAE,EAAAsB,EAAAC,EACAI,GAAA0B,uBACA1B,EAAA2B,iBAGA,IAAAC,GAAA,GAAAlC,GAAAvB,EAAAwB,EAAAC,EAKA,OAJAgC,GAAA3B,cAAAD,GAEA4B,EAAAT,SAEAS,GAGApG,EAAAD,QAAAmE,IAGAoC,cAAA,IAAAC,GAAA,SAAAtF,EAAAjB,EAAAD,GAEA,GAAAyG,GAAAvF,EAAA,2BACAwF,EAAAxF,EAAA,8BACAyF,EAAAzF,EAAA,4BACA0F,EAAA1F,EAAA,wCASA2F,EAAA,SAAAjE,EAAAkE,EAAAC,GAEAvG,KAAAoC,GAAAA,EAGApC,KAAAwG,QAAAP,EAAA7D,EAAAkE,EAAAC,GAGAvG,KAAAyG,WAAAP,EAAA9D,EAAApC,KAAAwG,QAEA,IAAAE,GAAAP,EAAA/D,EAAApC,KAAAwG,QAEAxG,MAAA2G,SAAAP,EAAAhE,EAAAsE,GAGAL,GAAAxD,UAAAG,KAAA,WAEAhD,KAAAoC,GAAAwE,WAAA5G,KAAAwG,UAGAH,EAAAxD,UAAA0C,QAAA,WAEAvF,KAAAoC,IAGA3C,EAAAD,QAAA6G,IAGAQ,0BAAA,EAAAC,6BAAA,GAAAC,2BAAA,GAAAC,uCAAA,KAAAC,GAAA,SAAAvG,EAAAjB,EAAAD,GAaA,GAAAkE,GAAA,SAAAtB,EAAAwB,EAAAC,EAAAqD,EAAA7E,GAEArC,KAAAoC,GAAAA,EAEApC,KAAAiE,QAAA7B,EAAA+E,gBAGAnH,KAAAoH,QAAA,EAEApH,KAAAqH,kBAAA,EAEArH,KAAA4D,MAAAA,GAAA,EACA5D,KAAA6D,OAAAA,GAAA,EAEA7D,KAAAkH,OAAAA,GAAA9E,EAAAkF,KACAtH,KAAAqC,KAAAA,GAAAD,EAAAmF,cAQA7D,GAAAb,UAAAD,OAAA,SAAA4E,GAEAxH,KAAAgD,MAEA,IAAAZ,GAAApC,KAAAoC,EAEApC,MAAA4D,MAAA4D,EAAA5D,MACA5D,KAAA6D,OAAA2D,EAAA3D,OAEAzB,EAAAqF,YAAArF,EAAAsF,+BAAA1H,KAAAqH,kBACAjF,EAAAuF,WAAAvF,EAAAkC,WAAA,EAAAtE,KAAAkH,OAAAlH,KAAAkH,OAAAlH,KAAAqC,KAAAmF,GAGA,IAAAI,IAAA,CAEAlE,GAAAb,UAAAyC,WAAA,SAAAhD,EAAAsB,EAAAC,GAOA,GALA7D,KAAAgD,OAEAhD,KAAA4D,MAAAA,GAAA5D,KAAA4D,MACA5D,KAAA6D,OAAAA,GAAA7D,KAAA6D,OAEAvB,YAAAuF,cACA,CACA,IAAAD,EACA,CACA,GAAAE,GAAA1F,GAAA2F,aAAA,oBAEA,KAAAD,EAMA,KAAA,IAAAlH,OAAA,wCAJAgH,IAAA,EAQA5H,KAAAqC,KAAAD,GAAA4F,UAKAhI,MAAAqC,KAAAD,GAAAmF,aAIAnF,IAAAqF,YAAArF,GAAAsF,+BAAA1H,KAAAqH,kBACAjF,GAAAuF,WAAAvF,GAAAkC,WAAA,EAAAtE,KAAAkH,OAAAlH,KAAA4D,MAAA5D,KAAA6D,OAAA,EAAA7D,KAAAkH,OAAAlH,KAAAqC,KAAAC,GAAA,OAIAoB,EAAAb,UAAAG,KAAA,SAAAiF,GAEA,GAAA7F,GAAApC,KAAAoC,EAEA8F,UAAAD,GAEA7F,EAAA+F,cAAA/F,EAAAgG,SAAAH,GAGA7F,EAAAiG,YAAAjG,EAAAkC,WAAAtE,KAAAiE,UAGAP,EAAAb,UAAAuC,OAAA,WAEA,GAAAhD,GAAApC,KAAAoC,EACAA,GAAAiG,YAAAjG,EAAAkC,WAAA,OAGAZ,EAAAb,UAAAyF,UAAA,SAAAC,GAEA,GAAAnG,GAAApC,KAAAoC,EAEApC,MAAAgD,OAEAhD,KAAAoH,OAEAhF,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAAqG,mBAAAF,EAAAnG,EAAAsG,qBAAAtG,EAAAuG,wBAIAvG,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAAqG,mBAAAF,EAAAnG,EAAAwG,OAAAxG,EAAAyG,UAIAnF,EAAAb,UAAAiG,UAAA,SAAAP,GAEA,GAAAnG,GAAApC,KAAAoC,EAEApC,MAAAgD,OAEAZ,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAA2G,mBAAAR,EAAAnG,EAAAwG,OAAAxG,EAAAyG,UAGAnF,EAAAb,UAAAmG,aAAA,WAEAhJ,KAAAgD,OAEAhD,KAAAoH,QAAA,EACAhF,GAAA6G,eAAA7G,GAAAkC,aAGAZ,EAAAb,UAAAqG,oBAAA,WAEAlJ,KAAAsI,WAAA,GACAtI,KAAA8I,WAAA,IAGApF,EAAAb,UAAA8C,qBAAA,WAEA3F,KAAAsI,WAAA,GACAtI,KAAA8I,WAAA,IAGApF,EAAAb,UAAA+C,gBAAA,WAEA,GAAAxD,GAAApC,KAAAoC,EAEApC,MAAAgD,OAEAZ,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAA+G,eAAA/G,EAAAgH,eACAhH,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAAiH,eAAAjH,EAAAgH,gBAGA1F,EAAAb,UAAAyG,iBAAA,WAEA,GAAAlH,GAAApC,KAAAoC,EAEApC,MAAAgD,OAEAZ,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAA+G,eAAA/G,EAAAmH,QACAnH,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAAiH,eAAAjH,EAAAmH,SAGA7F,EAAAb,UAAA0C,QAAA,WAEA,GAAAnD,GAAApC,KAAAoC,EAEAA,GAAAoH,cAAAxJ,KAAAiE,UAIAP,EAAA+F,WAAA,SAAArH,EAAAoF,EAAAH,GAEA,GAAApD,GAAA,GAAAP,GAAAtB,EAIA,OAHA6B,GAAAoD,iBAAAA,IAAA,EACApD,EAAArB,OAAA4E,GAEAvD,GAGAP,EAAAgC,SAAA,SAAAtD,EAAAE,EAAAsB,EAAAC,GAGA,GAAAI,GAAA,GAAAP,GAAAtB,EAGA,OAFA6B,GAAAqB,WAAAhD,EAAAsB,EAAAC,GAEAI,GAIAxE,EAAAD,QAAAkE,OAGAgG,GAAA,SAAAhJ,EAAAjB,EAAAD,GAWA,QAAAgC,GAAAY,GAGApC,KAAA2J,mBACAvH,EAAA2F,aAAA,4BACA3F,EAAA2F,aAAA,gCACA3F,EAAA2F,aAAA,kCAKA/H,KAAA2J,qBAEA3J,KAAA4J,UAAA5J,KAAA2J,mBAAAE,wBAGA7J,KAAAoC,GAAAA,EAEApC,KAAAyG,cAEAzG,KAAA8J,YAAA,KAEA9J,KAAA+J,OAAA,EAKAvI,EAAAqB,UAAAmH,YAAAxI,EACA/B,EAAAD,QAAAgC,EAEAA,EAAAqB,UAAAG,KAAA,WAiBA,MAfAhD,MAAA4J,WAEA5J,KAAA2J,mBAAAM,mBAAAjK,KAAA4J,WAEA5J,KAAA+J,QAEA/J,KAAA+J,OAAA,EACA/J,KAAAkK,aAKAlK,KAAAkK,WAGAlK,MAGAwB,EAAAqB,UAAAuC,OAAA,WAOA,MALApF,MAAA4J,WAEA5J,KAAA2J,mBAAAM,mBAAA,MAGAjK,MAGAwB,EAAAqB,UAAAqH,SAAA,WAIA,IAAA,GAFA9H,GAAApC,KAAAoC,GAEAzB,EAAA,EAAAA,EAAAX,KAAAyG,WAAAzF,OAAAL,IACA,CACA,GAAAwJ,GAAAnK,KAAAyG,WAAA9F,EACAwJ,GAAA3H,OAAAQ,OAEAmH,EAAAC,UAAAC,QAAAF,EAAA9H,KAAA8H,EAAAG,WAAAH,EAAAI,OAAAJ,EAAAK,OAEApI,EAAAqI,wBAAAN,EAAAC,UAAAnC,UAKA,MAFAjI,MAAA8J,YAAA9G,OAEAhD,MAGAwB,EAAAqB,UAAA6H,aAAA,SAAAlI,EAAA4H,EAAA/H,EAAAiI,EAAAC,EAAAC,GAeA,MAbAxK,MAAAyG,WAAAkE,MACAnI,OAAAA,EACA4H,UAAAA,EAEAnC,SAAAmC,EAAAnC,SACA5F,KAAAA,GAAArC,KAAAoC,GAAA4F,MACAsC,WAAAA,IAAA,EACAC,OAAAA,GAAA,EACAC,MAAAA,GAAA,IAGAxK,KAAA+J,OAAA,EAEA/J,MAIAwB,EAAAqB,UAAA+H,SAAA,SAAApI,EAAAqI,GAMA,MAJA7K,MAAA8J,YAAAtH,EAEAxC,KAAA+J,OAAA,EAEA/J,MAGAwB,EAAAqB,UAAAiI,KAAA,SAAAzI,EAAA0I,EAAAP,GAEA,GAAApI,GAAApC,KAAAoC,EAGA,OAFAA,GAAA4I,aAAA3I,EAAA0I,EAAA3I,EAAA6I,eAAAT,GAEAxK,WAIAkL,GAAA,SAAAxK,EAAAjB,EAAAD,GAUA,GAAA2L,GAAA,EAEAjK,EAAA,SAAAkK,EAAAP,GAKA,GAHAzI,GAAAgJ,EAAAC,WAAA,QAAAR,IACAO,EAAAC,WAAA,qBAAAR,IAEAzI,GAGA,KAAA,IAAAxB,OAAA,qEAMA,OAFAwB,IAAAkJ,GAAAH,IAEA/I,GAGA3C,GAAAD,QAAA0B,OAGAqK,GAAA,SAAA7K,EAAAjB,EAAAD,GAOA,GAAAgM,MAGArK,EAAA,SAAAiB,EAAAqJ,GAGA,GAAAnJ,GAAAkJ,EAAApJ,EAAAkJ,GAEA,KAAAhJ,EACA,CACA,GAAAoJ,GAAAtJ,EAAAuJ,aAAAvJ,EAAAwJ,mBACAtJ,GAAAkJ,EAAApJ,EAAAkJ,KAAAO,gBAAA,GAAAC,OAAAJ,GACAK,YAAA,GAAAD,OAAAJ,IAGA,GAAA/K,GACAkL,EAAAvJ,EAAAuJ,gBACAE,EAAAzJ,EAAAyJ,WAEA,KAAApL,EAAA,EAAAA,EAAAkL,EAAA7K,OAAAL,IAEAkL,EAAAlL,IAAA,CAIA,KAAAA,IAAA8K,GAEAI,EAAAJ,EAAA9K,GAAAsH,WAAA,CAGA,KAAAtH,EAAA,EAAAA,EAAAoL,EAAA/K,OAAAL,IAEAoL,EAAApL,KAAAkL,EAAAlL,KAEAoL,EAAApL,GAAAkL,EAAAlL,GAEA2B,EAAAyJ,YAAApL,GAEAyB,EAAAqI,wBAAA9J,GAIAyB,EAAA4J,yBAAArL,IAMAlB,GAAAD,QAAA2B,OACA8K,GAAA,SAAAvL,EAAAjB,EAAAD,GAKAyG,eAAA,SAAA7D,EAAAkE,EAAAC,GAEA,GAAA2F,GAAAC,EAAA/J,EAAAA,EAAAgK,cAAA9F,GACA+F,EAAAF,EAAA/J,EAAAA,EAAAkK,gBAAA/F,GAEAC,EAAApE,EAAAmK,eA2BA,OAzBAnK,GAAAoK,aAAAhG,EAAA0F,GACA9J,EAAAoK,aAAAhG,EAAA6F,GACAjK,EAAAqK,YAAAjG,GAGApE,EAAAsK,oBAAAlG,EAAApE,EAAAuK,eAEAC,QAAAC,MAAA,+CACAD,QAAAC,MAAA,qBAAAzK,EAAAsK,oBAAAlG,EAAApE,EAAA0K,kBACAF,QAAAC,MAAA,gBAAAzK,EAAA2K,YAGA,KAAA3K,EAAA4K,kBAAAxG,IAEAoG,QAAAK,KAAA,0CAAA7K,EAAA4K,kBAAAxG,IAGApE,EAAA8K,cAAA1G,GACAA,EAAA,MAIApE,EAAA+K,aAAAjB,GACA9J,EAAA+K,aAAAd,GAEA7F,EAGA,IAAA2F,GAAA,SAAA/J,EAAAC,EAAA+K,GAEA,GAAAC,GAAAjL,EAAAkL,aAAAjL,EAKA,OAHAD,GAAAmL,aAAAF,EAAAD,GACAhL,EAAA+J,cAAAkB,GAEAjL,EAAAoL,mBAAAH,EAAAjL,EAAAqL,gBAMAJ,GAJAT,QAAAc,IAAAtL,EAAAuL,iBAAAN,IACA,MAMA5N,GAAAD,QAAAyG,oBAGA2H,IAAA,SAAAlN,EAAAjB,EAAAD,GAGA,GAAAqO,GAAA,SAAAxL,EAAA0I,GAEA,OAAA1I,GAEA,IAAA,QACA,MAAA,EAEA,KAAA,OACA,MAAA,IAAAwF,cAAA,EAAAkD,EAEA,KAAA,OACA,MAAA,IAAAlD,cAAA,EAAAkD,EAEA,KAAA,OACA,MAAA,IAAAlD,cAAA,EAAAkD,EAEA,KAAA,MACA,IAAA,YACA,MAAA,EAEA,KAAA,QACA,MAAA,IAAA+C,YAAA,EAAA/C,EAEA,KAAA,QACA,MAAA,IAAA+C,YAAA,EAAA/C,EAEA,KAAA,QACA,MAAA,IAAA+C,YAAA,EAAA/C,EAEA,KAAA,OACA,OAAA,CAEA,KAAA,QAEA,MAAAgD,GAAA,EAAAhD,EAEA,KAAA,QACA,MAAAgD,GAAA,EAAAhD,EAEA,KAAA,QACA,MAAAgD,GAAA,EAAAhD,EAEA,KAAA,OACA,MAAA,IAAAlD,eAAA,EAAA,EACA,EAAA,GAEA,KAAA,OACA,MAAA,IAAAA,eAAA,EAAA,EAAA,EACA,EAAA,EAAA,EACA,EAAA,EAAA,GAEA,KAAA,OACA,MAAA,IAAAA,eAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,MAIAkG,EAAA,SAAAhD,GAIA,IAAA,GAFAiD,GAAA,GAAAlC,OAAAf,GAEApK,EAAA,EAAAA,EAAAqN,EAAAhN,OAAAL,IAEAqN,EAAArN,IAAA,CAGA,OAAAqN,GAGAvO,GAAAD,QAAAqO,OAEAI,IAAA,SAAAvN,EAAAjB,EAAAD,GAEA,GAAA0O,GAAAxN,EAAA,aACAyN,EAAAzN,EAAA,aAEAwF,EAAA,SAAA9D,EAAAoE,GAMA,IAAA,GAJAC,MAEA2H,EAAAhM,EAAAsK,oBAAAlG,EAAApE,EAAAiM,mBAEA1N,EAAA,EAAAyN,EAAAzN,EAAAA,IACA,CACA,GAAA2N,GAAAlM,EAAAmM,gBAAA/H,EAAA7F,GACA0B,EAAA6L,EAAA9L,EAAAkM,EAAAjM,KAEAoE,GAAA6H,EAAAE,OACAnM,KAAAA,EACA0I,KAAAoD,EAAA9L,GACA4F,SAAA7F,EAAAqM,kBAAAjI,EAAA8H,EAAAE,MAEAnE,QAAA,SAAAhI,EAAAiI,EAAAC,EAAAC,GAGApI,EAAAsM,oBAAA1O,KAAAiI,SAAAjI,KAAA+K,KAAA1I,GAAAD,EAAA4F,MAAAsC,IAAA,EAAAC,GAAA,EAAAC,GAAA,KAMA,MAAA/D,GAGAhH,GAAAD,QAAA0G,IAGAyI,YAAA,GAAAC,YAAA,KAAAC,IAAA,SAAAnO,EAAAjB,EAAAD,GACA,GAAA0O,GAAAxN,EAAA,aACAmN,EAAAnN,EAAA,kBAGAyF,EAAA,SAAA/D,EAAAoE,GAMA,IAAA,GAJAG,MAEAmI,EAAA1M,EAAAsK,oBAAAlG,EAAApE,EAAA2M,iBAEApO,EAAA,EAAAmO,EAAAnO,EAAAA,IACA,CACA,GAAA+F,GAAAtE,EAAA4M,iBAAAxI,EAAA7F,GACA6N,EAAA9H,EAAA8H,KAAAS,QAAA,UAAA,IACA5M,EAAA6L,EAAA9L,EAAAsE,EAAArE,KAEAsE,GAAA6H,IACAnM,KAAAA,EACA0I,KAAArE,EAAAqE,KACA9C,SAAA7F,EAAA8M,mBAAA1I,EAAAgI,GACAW,MAAAtB,EAAAxL,EAAAqE,EAAAqE,OAIA,MAAApE,GAGAlH,GAAAD,QAAA2G,IAGAiJ,iBAAA,GAAAR,YAAA,KAAAS,IAAA,SAAA3O,EAAAjB,EAAAD,GAEA,GAAA4G,GAAA,SAAAhE,EAAAsE,GAIA,GAAAC,IAAArE,QAEAqE,GAAAvE,GAAAA,CAIA,KAAA,GAFAkN,GAAAC,OAAAC,KAAA9I,GAEA/F,EAAA,EAAAA,EAAA2O,EAAAtO,OAAAL,IACA,CACA,GAAA8O,GAAAH,EAAA3O,GAEA+O,EAAAD,EAAAE,MAAA,KACAnB,EAAAkB,EAAAA,EAAA1O,OAAA,GAEA4O,EAAAC,EAAAH,EAAA/I,GAEAmJ,EAAApJ,EAAA+I,EACAG,GAAAtN,KAAAkM,GAAAsB,EAEAF,EAAAxN,GAAAA,EAEAmN,OAAAQ,eAAAH,EAAApB,GACAwB,IAAAC,EAAAzB,GACA0B,IAAAC,EAAA3B,EAAAsB,KAIA,MAAAnJ,IAGAsJ,EAAA,SAAAzB,GAEA,GAAA4B,GAAAC,EAAApB,QAAA,KAAAT,EACA,OAAA,IAAA8B,UAAAF,IAGAD,EAAA,SAAA3B,EAAAsB,GAEA,GACAS,GADAH,EAAAI,EAAAvB,QAAA,MAAAT,EAiBA,OAZA+B,GAFA,IAAAT,EAAA/E,KAEA0F,EAAAX,EAAAzN,MAIAqO,EAAAZ,EAAAzN,MAGAkO,IAEAH,GAAA,aAAAG,EAAA,KAGA,GAAAD,UAAA,QAAAF,IAGAP,EAAA,SAAAH,EAAAI,GAIA,IAAA,GAFAa,GAAAb,EAEAnP,EAAA,EAAAA,EAAA+O,EAAA1O,OAAA,EAAAL,IACA,CACA,GAAAJ,GAAAoQ,EAAAjB,EAAA/O,MAAA2B,QACAqO,GAAAjB,EAAA/O,IAAAJ,EACAoQ,EAAApQ,EAGA,MAAAoQ,IAGAN,GACA,8BACAO,KAAA,MAEAJ,GACA,8BACA,yCACAI,KAAA,MAGAH,GAEAI,QAAA,6BAEAC,KAAA,0CACAC,KAAA,oDACAC,KAAA,8DAEAC,MAAA,6BACAC,MAAA,0CACAC,MAAA,oDACAC,MAAA,8DAEAC,KAAA,6BACAC,MAAA,0CACAC,MAAA,oDACAC,MAAA,8DAEAC,KAAA,2CACAC,KAAA,2CACAC,KAAA,2CAEAC,UAAA,8BAGAlB,GAEAG,QAAA,8BAEAC,KAAA,8BACAC,KAAA,8BACAC,KAAA,8BAEAC,MAAA,8BACAC,MAAA,8BACAC,MAAA,8BACAC,MAAA,8BAEAC,KAAA,8BACAC,MAAA,8BACAC,MAAA,8BACAC,MAAA,8BAEAI,UAAA,8BAGAnS,GAAAD,QAAA4G,OAGAyL,IAAA,SAAAnR,EAAAjB,EAAAD,GAGA,GAAA2O,GAAA,SAAA9L,GAEA,MAAAyP,GAAAzP,IAIAyP,GACAjB,QAAA,EACAC,KAAA,EACAC,KAAA,EACAC,KAAA,EAEAC,MAAA,EACAC,MAAA,EACAC,MAAA,EACAC,MAAA,EAEAC,KAAA,EACAC,MAAA,EACAC,MAAA,EACAC,MAAA,EAEAC,KAAA,EACAC,KAAA,EACAC,KAAA,GAEAC,UAAA,EAGAnS,GAAAD,QAAA2O,OAEA4D,IAAA,SAAArR,EAAAjB,EAAAD,GAGA,GAAA2O,GAAA,SAAA/L,EAAAC,GAEA,IAAA2P,EACA,CACA,GAAAC,GAAA1C,OAAAC,KAAA0C,EAEAF,KAEA,KAAA,GAAArR,GAAA,EAAAA,EAAAsR,EAAAjR,SAAAL,EACA,CACA,GAAAwR,GAAAF,EAAAtR,EACAqR,GAAA5P,EAAA+P,IAAAD,EAAAC,IAIA,MAAAH,GAAA3P,IAGA2P,EAAA,KAEAE,GACAlK,MAAA,QACAoK,WAAA,OACAC,WAAA,OACAC,WAAA,OAEAC,IAAA,MACAC,SAAA,QACAC,SAAA,QACAC,SAAA,QAEAC,KAAA,OACAC,UAAA,QACAC,UAAA,QACAC,UAAA,QAEAC,WAAA,OACAC,WAAA,OACAC,WAAA,OAEAC,WAAA,YAGAzT,GAAAD,QAAA2O,OAEAgF,IAAA,SAAAzS,EAAAjB,EAAAD,IACA,SAAA4T,EAAAtT,IAQA,WAGA,QAAAuT,MACA,QAAAC,GAAAC,GACA,MAAAA,GAEA,QAAAC,GAAAD,GACA,QAAAA,EAEA,QAAAE,GAAAF,GACA,OAAAA,EAsBA,QAAAG,GAAAC,GACA,MAAA,YACA,GAAA,OAAAA,EAAA,KAAA,IAAA/S,OAAA,+BACA+S,GAAAC,MAAA5T,KAAA6T,WACAF,EAAA,MAIA,QAAAG,GAAAH,GACA,MAAA,YACA,OAAAA,IACAA,EAAAC,MAAA5T,KAAA6T,WACAF,EAAA,OAkBA,QAAAI,GAAAC,GACA,MAAAC,GAAAD,IAEA,gBAAAA,GAAAhT,QACAgT,EAAAhT,QAAA,GACAgT,EAAAhT,OAAA,IAAA,EAIA,QAAAkT,GAAAF,EAAAG,GAIA,IAHA,GAAAC,GAAA,GACApT,EAAAgT,EAAAhT,SAEAoT,EAAApT,GACAmT,EAAAH,EAAAI,GAAAA,EAAAJ,GAIA,QAAAK,GAAAL,EAAAG,GAKA,IAJA,GAAAC,GAAA,GACApT,EAAAgT,EAAAhT,OACAsT,EAAAxI,MAAA9K,KAEAoT,EAAApT,GACAsT,EAAAF,GAAAD,EAAAH,EAAAI,GAAAA,EAAAJ,EAEA,OAAAM,GAGA,QAAAC,GAAAC,GACA,MAAAH,GAAAvI,MAAA0I,GAAA,SAAAjB,EAAA5S,GAAA,MAAAA,KAGA,QAAA8T,GAAAT,EAAAG,EAAAO,GAIA,MAHAR,GAAAF,EAAA,SAAAW,EAAAhU,EAAAF,GACAiU,EAAAP,EAAAO,EAAAC,EAAAhU,EAAAF,KAEAiU,EAGA,QAAAE,GAAAC,EAAAV,GACAD,EAAAY,EAAAD,GAAA,SAAAE,GACAZ,EAAAU,EAAAE,GAAAA,KAIA,QAAAC,GAAAhB,EAAAiB,GACA,IAAA,GAAAtU,GAAA,EAAAA,EAAAqT,EAAAhT,OAAAL,IACA,GAAAqT,EAAArT,KAAAsU,EAAA,MAAAtU,EAEA,OAAA,GAaA,QAAAuU,GAAAC,GACA,GACAC,GACA5F,EAFA7O,EAAA,EAGA,OAAAoT,GAAAoB,IACAC,EAAAD,EAAAnU,OACA,WAEA,MADAL,KACAyU,EAAAzU,EAAAA,EAAA,QAGA6O,EAAAsF,EAAAK,GACAC,EAAA5F,EAAAxO,OACA,WAEA,MADAL,KACAyU,EAAAzU,EAAA6O,EAAA7O,GAAA,OAQA,QAAA0U,GAAAC,EAAAC,GAEA,MADAA,GAAA,MAAAA,EAAAD,EAAAtU,OAAA,GAAAuU,EACA,WAGA,IAAA,GAFAvU,GAAAwU,KAAAC,IAAA5B,UAAA7S,OAAAuU,EAAA,GACAG,EAAA5J,MAAA9K,GACAoT,EAAA,EAAApT,EAAAoT,EAAAA,IACAsB,EAAAtB,GAAAP,UAAAO,EAAAmB,EAEA,QAAAA,GACA,IAAA,GAAA,MAAAD,GAAAvU,KAAAf,KAAA0V,EACA,KAAA,GAAA,MAAAJ,GAAAvU,KAAAf,KAAA6T,UAAA,GAAA6B,KAYA,QAAAC,GAAAxB,GACA,MAAA,UAAAhF,EAAAiF,EAAAwB,GACA,MAAAzB,GAAAhF,EAAAyG,IA8GA,QAAAC,GAAAC,GAEA,MAAA,UAAAC,EAAA5B,EAAAyB,GACAA,EAAA9B,EAAA8B,GAAAvC,GACA0C,EAAAA,KACA,IAAAC,GAAAd,EAAAa,EACA,IAAA,GAAAD,EACA,MAAAF,GAAA,KAEA,IAAAK,IAAA,EACAC,EAAA,EACAC,GAAA,GAEA,QAAAC,KACA,GAAAH,GAAA,GAAAC,EACA,MAAAN,GAAA,KAGA,MAAAE,EAAAI,IAAAC,GAAA,CACA,GAAApB,GAAAiB,GACA,IAAA,OAAAjB,EAKA,MAJAkB,IAAA,OACA,GAAAC,GACAN,EAAA,MAIAM,IAAA,EACA/B,EAAA4B,EAAAhB,GAAAA,EAAArB,EAAA,SAAA2C,GACAH,GAAA,EACAG,GACAT,EAAAS,GACAF,GAAA,GAGAC,YASA,QAAAE,GAAA3C,GACA,MAAA,UAAAoC,EAAA5B,EAAAyB,GACA,MAAAjC,GAAA4C,EAAAC,OAAAT,EAAA5B,EAAAyB,IAGA,QAAAa,GAAA9C,GACA,MAAA,UAAAoC,EAAAD,EAAA3B,EAAAyB,GACA,MAAAjC,GAAAkC,EAAAC,GAAAC,EAAA5B,EAAAyB,IAGA,QAAAc,GAAA/C,GACA,MAAA,UAAAoC,EAAA5B,EAAAyB,GACA,MAAAjC,GAAA4C,EAAAI,aAAAZ,EAAA5B,EAAAyB,IAIA,QAAAgB,GAAAC,EAAA7C,EAAAG,EAAAyB,GACAA,EAAA9B,EAAA8B,GAAAvC,GACAW,EAAAA,KACA,IAAA8C,GAAA/C,EAAAC,QACA6C,GAAA7C,EAAA,SAAA7E,EAAAiF,EAAAwB,GACAzB,EAAAhF,EAAA,SAAAkH,EAAA9C,GACAuD,EAAA1C,GAAAb,EACAqC,EAAAS,MAEA,SAAAA,GACAT,EAAAS,EAAAS,KA2CA,QAAAC,GAAAF,EAAA7C,EAAAG,EAAAyB,GACA,GAAAkB,KACAD,GAAA7C,EAAA,SAAAW,EAAAP,EAAAwB,GACAzB,EAAAQ,EAAA,SAAApB,GACAA,GACAuD,EAAAnM,MAAAyJ,MAAAA,EAAAjF,MAAAwF,IAEAiB,OAEA,WACAA,EAAAvB,EAAAyC,EAAAE,KAAA,SAAAvW,EAAAuE,GACA,MAAAvE,GAAA2T,MAAApP,EAAAoP,QACA,SAAAO,GACA,MAAAA,GAAAxF,WAcA,QAAA8H,GAAAJ,EAAA7C,EAAAG,EAAAyB,GACAmB,EAAAF,EAAA7C,EAAA,SAAA7E,EAAA+H,GACA/C,EAAAhF,EAAA,SAAAoE,GACA2D,GAAA3D,MAEAqC,GAMA,QAAAuB,GAAAN,EAAAO,EAAAC,GACA,MAAA,UAAArD,EAAA8B,EAAA3B,EAAA+C,GACA,QAAAjB,KACAiB,GAAAA,EAAAG,GAAA,EAAA,SAEA,QAAAC,GAAA3C,EAAA4C,EAAA3B,GACA,MAAAsB,OACA/C,GAAAQ,EAAA,SAAApB,GACA2D,GAAAE,EAAA7D,KACA2D,EAAAG,GAAA,EAAA1C,IACAuC,EAAA/C,GAAA,GAEAyB,MANAA,IASA/B,UAAA7S,OAAA,EACA6V,EAAA7C,EAAA8B,EAAAwB,EAAArB,IAEAiB,EAAA/C,EACAA,EAAA2B,EACAe,EAAA7C,EAAAsD,EAAArB,KAeA,QAAAuB,GAAAjE,EAAAoB,GACA,MAAAA,GAsOA,QAAA8C,GAAAZ,EAAAa,EAAA9B,GACAA,EAAAA,GAAAvC,CACA,IAAAyD,GAAA/C,EAAA2D,QAEAb,GAAAa,EAAA,SAAAC,EAAA5C,EAAAa,GACA+B,EAAAtC,EAAA,SAAAgB,EAAAuB,GACAA,EAAA5W,QAAA,IACA4W,EAAAA,EAAA,IAEAd,EAAA/B,GAAA6C,EACAhC,EAAAS,OAEA,SAAAA,GACAT,EAAAS,EAAAS,KAwCA,QAAAe,GAAAhB,EAAA7C,EAAAL,EAAAiC,GACA,GAAAtB,KACAuC,GAAA7C,EAAA,SAAAW,EAAAP,EAAA8C,GACAvD,EAAAgB,EAAA,SAAA0B,EAAAyB,GACAxD,EAAAA,EAAAyD,OAAAD,OACAZ,EAAAb,MAEA,SAAAA,GACAT,EAAAS,EAAA/B,KA+EA,QAAA0D,GAAAC,EAAAC,EAAAC,GAOA,QAAAC,GAAAC,EAAA/V,EAAAgW,EAAA1C,GACA,GAAA,MAAAA,GAAA,kBAAAA,GACA,KAAA,IAAAhV,OAAA,mCAMA,OAJAyX,GAAAE,SAAA,EACAtE,EAAA3R,KACAA,GAAAA,IAEA,IAAAA,EAAAtB,QAAAqX,EAAAG,OAEAjC,EAAAkC,aAAA,WACAJ,EAAAK,WAGAxE,EAAA5R,EAAA,SAAAqV,GACA,GAAA1C,IACA3S,KAAAqV,EACA/B,SAAAA,GAAAvC,EAGAiF,GACAD,EAAAX,MAAAiB,QAAA1D,GAEAoD,EAAAX,MAAA/M,KAAAsK,GAGAoD,EAAAX,MAAA1W,SAAAqX,EAAAH,aACAG,EAAAO,kBAGArC,GAAAkC,aAAAJ,EAAAjF,UAEA,QAAAyF,GAAAR,EAAAX,GACA,MAAA,YACAoB,GAAA,CAEA,IAAAC,IAAA,EACAnB,EAAA/D,SACAK,GAAAwD,EAAA,SAAAC,GACAzD,EAAA8E,EAAA,SAAAf,EAAA7D,GACA6D,IAAAN,GAAAoB,IACAC,EAAAC,OAAA7E,EAAA,GACA2E,GAAA,KAIApB,EAAA/B,SAAAhC,MAAA+D,EAAAC,KAEAS,EAAAX,MAAA1W,OAAA8X,IAAA,GACAT,EAAAK,QAEAL,EAAAjF,WAzDA,GAAA,MAAA8E,EACAA,EAAA,MAEA,IAAA,IAAAA,EACA,KAAA,IAAAtX,OAAA,+BAyDA,IAAAkY,GAAA,EACAE,KACAX,GACAX,SACAQ,YAAAA,EACAC,QAAAA,EACAS,UAAAvF,EACA6F,MAAA7F,EACAqF,MAAArF,EACAkF,SAAA,EACAY,QAAA,EACAxO,KAAA,SAAArI,EAAAsT,GACAwC,EAAAC,EAAA/V,GAAA,EAAAsT,IAEAwD,KAAA,WACAf,EAAAK,MAAArF,EACAgF,EAAAX,UAEAiB,QAAA,SAAArW,EAAAsT,GACAwC,EAAAC,EAAA/V,GAAA,EAAAsT,IAEAxC,QAAA,WACA,IAAAiF,EAAAc,QAAAL,EAAAT,EAAAH,aAAAG,EAAAX,MAAA1W,OACA,KAAA8X,EAAAT,EAAAH,aAAAG,EAAAX,MAAA1W,QAAA,CACA,GAAA0W,GAAAW,EAAAF,QACAE,EAAAX,MAAAuB,OAAA,EAAAZ,EAAAF,SACAE,EAAAX,MAAAuB,OAAA,EAAAZ,EAAAX,MAAA1W,QAEAsB,EAAA+R,EAAAqD,EAAA,SAAAC,GACA,MAAAA,GAAArV,MAGA,KAAA+V,EAAAX,MAAA1W,QACAqX,EAAAa,QAEAJ,GAAA,EACAE,EAAArO,KAAA+M,EAAA,GACA,IAAAR,GAAAxD,EAAAmF,EAAAR,EAAAX,GACAO,GAAA3V,EAAA4U,KAIAlW,OAAA,WACA,MAAAqX,GAAAX,MAAA1W,QAEAkV,QAAA,WACA,MAAA4C,IAEAE,YAAA,WACA,MAAAA,IAEAR,KAAA,WACA,MAAAH,GAAAX,MAAA1W,OAAA8X,IAAA,GAEAO,MAAA,WACAhB,EAAAc,QAAA,GAEAG,OAAA,WACA,GAAAjB,EAAAc,UAAA,EAAA,CACAd,EAAAc,QAAA,CAIA,KAAA,GAHAI,GAAA/D,KAAAgE,IAAAnB,EAAAH,YAAAG,EAAAX,MAAA1W,QAGAyY,EAAA,EAAAF,GAAAE,EAAAA,IACAlD,EAAAkC,aAAAJ,EAAAjF,WAIA,OAAAiF,GA+EA,QAAAqB,GAAAlL,GACA,MAAA6G,GAAA,SAAA1B,EAAAiE,GACAjE,EAAAC,MAAA,KAAAgE,EAAAG,QAAA1C,EAAA,SAAAgB,EAAAuB,GACA,gBAAAhL,WACAyJ,EACAzJ,QAAAC,OACAD,QAAAC,MAAAwJ,GAGAzJ,QAAA4B,IACA0F,EAAA0D,EAAA,SAAAjD,GACA/H,QAAA4B,GAAAmG,aAmDA,QAAAgF,GAAAC,GACA,MAAA,UAAApF,EAAAL,EAAAyB,GACAgE,EAAArF,EAAAC,GAAAL,EAAAyB,IAsCA,QAAAiE,GAAAhD,GACA,MAAAxB,GAAA,SAAAyE,EAAAlC,GACA,GAAAmC,GAAA1E,EAAA,SAAAuC,GACA,GAAAoC,GAAAha,KACA4V,EAAAgC,EAAAqC,KACA,OAAApD,GAAAiD,EAAA,SAAAnG,EAAA4D,EAAAL,GACAvD,EAAAC,MAAAoG,EAAApC,EAAAG,QAAAb,MAEAtB,IAEA,OAAAgC,GAAA5W,OACA+Y,EAAAnG,MAAA5T,KAAA4X,GAGAmC,IAqBA,QAAAG,GAAAvG,GACA,MAAA0B,GAAA,SAAAuC,GACA,GAAAhC,GAAAgC,EAAAqC,KACArC,GAAAjN,KAAA,WACA,GAAAwP,GAAAtG,SACAuG,GACA7D,EAAAkC,aAAA,WACA7C,EAAAhC,MAAA,KAAAuG,KAGAvE,EAAAhC,MAAA,KAAAuG,IAGA,IAAAC,IAAA,CACAzG,GAAAC,MAAA5T,KAAA4X,GACAwC,GAAA,IA/qCA,GAaAC,GAbA9D,KAkBA+D,EAAA,gBAAAva,OAAAA,KAAAA,OAAAA,MAAAA,MACA,gBAAAD,IAAAA,EAAAA,SAAAA,GAAAA,GACAE,IAEA,OAAAsa,IACAD,EAAAC,EAAA/D,OAGAA,EAAAgE,WAAA,WAEA,MADAD,GAAA/D,MAAA8D,EACA9D,EAqBA,IAAAiE,GAAAjL,OAAA1M,UAAA4X,SAEAxG,EAAAnI,MAAA4O,SAAA,SAAA3E,GACA,MAAA,mBAAAyE,EAAAzZ,KAAAgV,IAIA4E,EAAA,SAAA5E,GACA,GAAA1T,SAAA0T,EACA,OAAA,aAAA1T,GAAA,WAAAA,KAAA0T,GAwDAjB,EAAAvF,OAAAC,MAAA,SAAAuG,GACA,GAAAvG,KACA,KAAA,GAAAoL,KAAA7E,GACAA,EAAA8E,eAAAD,IACApL,EAAA7E,KAAAiQ,EAGA,OAAApL,IA2DAsL,EAAA,kBAAArC,eAAAA,aAEAsC,EAAAD,EAAA,SAAAnH,GAEAmH,EAAAnH,IACA,SAAAA,GACAqH,WAAArH,EAAA,GAGA,iBAAAP,IAAA,kBAAAA,GAAA6H,SACA1E,EAAA0E,SAAA7H,EAAA6H,SAEA1E,EAAA0E,SAAAF,EAEAxE,EAAAkC,aAAAqC,EAAAC,EAAAxE,EAAA0E,SAGA1E,EAAA2E,QACA3E,EAAA4E,KAAA,SAAAnH,EAAAG,EAAAyB,GACA,MAAAW,GAAAC,OAAAxC,EAAA2B,EAAAxB,GAAAyB,IAGAW,EAAA6E,cACA7E,EAAA8E,WAAA,SAAArH,EAAAG,EAAAyB,GACA,MAAAW,GAAAI,aAAA3C,EAAA2B,EAAAxB,GAAAyB,IAIAW,EAAA+E,aACA/E,EAAAgF,UAAA,SAAAvH,EAAA8B,EAAA3B,EAAAyB,GACA,MAAAC,GAAAC,GAAA9B,EAAA2B,EAAAxB,GAAAyB,IAGAW,EAAAiF,UACAjF,EAAAC,OAAA,SAAA3B,EAAAV,EAAAyB,GAcA,QAAAK,GAAAI,GACAoF,IACApF,EACAT,EAAAS,GAIA,OAAAtB,GAAA,GAAA0G,GACA7F,EAAA,MArBAA,EAAA9B,EAAA8B,GAAAvC,GACAwB,EAAAA,KAKA,KAHA,GACAE,GADA2G,EAAAxG,EAAAL,GACA4G,EAAA,EAEA,OAAA1G,EAAA2G,MACAD,GAAA,EACAtH,EAAAU,EAAAE,GAAAA,EAAArB,EAAAuC,GAGA,KAAAwF,GAAA7F,EAAA,OAeAW,EAAAoF,gBACApF,EAAAI,aAAA,SAAAZ,EAAA5B,EAAAyB,GAKA,QAAAgG,KACA,GAAAxB,IAAA,CACA,OAAA,QAAArF,EACAa,EAAA,OAEAzB,EAAA4B,EAAAhB,GAAAA,EAAArB,EAAA,SAAA2C,GACA,GAAAA,EACAT,EAAAS,OAEA,CAEA,GADAtB,EAAAiB,IACA,OAAAjB,EACA,MAAAa,GAAA,KAEAwE,GACA7D,EAAAkC,aAAAmD,GAEAA,aAKAxB,GAAA,IA1BAxE,EAAA9B,EAAA8B,GAAAvC,GACA0C,EAAAA,KACA,IAAAC,GAAAd,EAAAa,GACAhB,EAAAiB,GAyBA4F,MAKArF,EAAAsF,eACAtF,EAAAuF,YAAA,SAAA/F,EAAAD,EAAA3B,EAAAyB,GACAC,EAAAC,GAAAC,EAAA5B,EAAAyB,IA6EAW,EAAAwF,IAAAzF,EAAAM,GACAL,EAAAyF,UAAAtF,EAAAE,GACAL,EAAA0F,SAAAxF,EAAAG,GAIAL,EAAA2F,OACA3F,EAAA4F,MACA5F,EAAA6F,OAAA,SAAApI,EAAAU,EAAAP,EAAAyB,GACAW,EAAAI,aAAA3C,EAAA,SAAAW,EAAAhU,EAAAiV,GACAzB,EAAAO,EAAAC,EAAA,SAAA0B,EAAA9C,GACAmB,EAAAnB,EACAqC,EAAAS,MAEA,SAAAA,GACAT,EAAAS,EAAA3B,MAIA6B,EAAA8F,MACA9F,EAAA+F,YAAA,SAAAtI,EAAAU,EAAAP,EAAAyB,GACA,GAAA2G,GAAAlI,EAAAL,EAAAV,GAAAkJ,SACAjG,GAAA6F,OAAAG,EAAA7H,EAAAP,EAAAyB,IAGAW,EAAAkG,UAAA,SAAAzI,EAAAU,EAAAP,EAAAyB,GACA,IAAA/B,UAAA7S,SACA4U,EAAAzB,EACAA,EAAAO,EACAA,EAAAT,EAAAD,UAGAuC,EAAAC,OAAAxC,EAAA,SAAAT,EAAAqH,EAAA1D,GACA/C,EAAAO,EAAAnB,EAAAqH,EAAA1D,IACA,SAAAb,GACAT,EAAAS,EAAA3B,MAsBA6B,EAAAmG,OACAnG,EAAAoG,OAAArG,EAAAS,GAEAR,EAAAqG,YACArG,EAAAsG,YAAApG,EAAAM,GAEAR,EAAAuG,aACAvG,EAAAwG,aAAArG,EAAAK,GASAR,EAAAyG,OAAA1G,EAAAW,GACAV,EAAA0G,YAAAxG,EAAAQ,GACAV,EAAA2G,aAAAxG,EAAAO,GA2BAV,EAAA4G,IACA5G,EAAA6G,KAAAjG,EAAAZ,EAAAC,OAAAhD,EAAAF,GAEAiD,EAAA8G,UAAAlG,EAAAZ,EAAAuF,YAAAtI,EAAAF,GAEAiD,EAAA+G,IACA/G,EAAAgH,MAAApG,EAAAZ,EAAAC,OAAA/C,EAAAA,GAEA8C,EAAAiH,WAAArG,EAAAZ,EAAAuF,YAAArI,EAAAA,GAKA8C,EAAAkH,OAAAtG,EAAAZ,EAAAC,OAAAlD,EAAAkE,GACAjB,EAAAmH,aAAAvG,EAAAZ,EAAAI,aAAArD,EAAAkE,GACAjB,EAAAoH,YAAAxG,EAAAZ,EAAAuF,YAAAxI,EAAAkE,GAEAjB,EAAAqH,OAAA,SAAA5J,EAAAG,EAAAyB,GAsBA,QAAAiI,GAAAC,EAAAC,GACA,GAAAtd,GAAAqd,EAAAE,SAAAhZ,EAAA+Y,EAAAC,QACA,OAAAhZ,GAAAvE,EAAA,GAAAA,EAAAuE,EAAA,EAAA,EAvBAuR,EAAAwF,IAAA/H,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAA,SAAA0B,EAAA2H,GACA3H,EACAT,EAAAS,GAGAT,EAAA,MAAAzG,MAAAwF,EAAAqJ,SAAAA,OAGA,SAAA3H,EAAAS,GACA,MAAAT,GACAT,EAAAS,OAGAT,GAAA,KAAAvB,EAAAyC,EAAAE,KAAA6G,GAAA,SAAAlJ,GACA,MAAAA,GAAAxF,YAYAoH,EAAA0H,KAAA,SAAAvG,EAAAQ,EAAAtC,GAoBA,QAAAsI,GAAAvK,GACAwK,EAAAxF,QAAAhF,GAEA,QAAAyK,GAAAzK,GACA,GAAA0K,GAAArJ,EAAAmJ,EAAAxK,EACA0K,IAAA,GAAAF,EAAAlF,OAAAoF,EAAA,GAEA,QAAAC,KACAC,IACArK,EAAAiK,EAAAK,MAAA,GAAA,SAAA7K,GACAA,MA7BAiC,IAEAA,EAAAsC,EACAA,EAAA,MAEAtC,EAAA9B,EAAA8B,GAAAvC,EACA,IAAA7D,GAAAsF,EAAA4C,GACA6G,EAAA/O,EAAAxO,MACA,KAAAud,EACA,MAAA3I,GAAA,KAEAsC,KACAA,EAAAqG,EAGA,IAAAzH,MACA2H,EAAA,EAEAN,IAeAD,GAAA,WACAK,GACA3I,EAAA,KAAAkB,KAIA5C,EAAA1E,EAAA,SAAAoL,GAgCA,QAAA8D,KACA,MAAAxG,GAAAuG,GAAAhK,EAAAkK,EAAA,SAAAle,EAAAkU,GACA,MAAAlU,IAAAqW,EAAA+D,eAAAlG,KACA,KAAAmC,EAAA+D,eAAAD,GASA,QAAAgE,KACAF,MACAD,IACAL,EAAAQ,GACAjH,EAAAA,EAAA3W,OAAA,GAAA6d,EAAA/H,IAxBA,IAvBA,GAsBAgI,GAtBAnH,EAAA1D,EAAAyD,EAAAkD,IAAAlD,EAAAkD,IAAAlD,EAAAkD,IACAiE,EAAAxJ,EAAA,SAAAgB,EAAAuB,GAKA,GAJA6G,IACA7G,EAAA5W,QAAA,IACA4W,EAAAA,EAAA,IAEAvB,EAAA,CACA,GAAA0I,KACAnK,GAAAkC,EAAA,SAAAkI,EAAAC,GACAF,EAAAE,GAAAD,IAEAD,EAAAnE,GAAAhD,EACAhC,EAAAS,EAAA0I,OAGAjI,GAAA8D,GAAAhD,EACArB,EAAAkC,aAAA6F,KAGAK,EAAAhH,EAAA6G,MAAA,EAAA7G,EAAA3W,OAAA,GAEAoU,EAAAuJ,EAAA3d,OAEAoU,KAAA,CACA,KAAA0J,EAAApH,EAAAiH,EAAAvJ,KACA,KAAA,IAAAxU,OAAA,4BAEA,IAAAqT,EAAA6K,IAAA9J,EAAA8J,EAAAlE,IAAA,EACA,KAAA,IAAAha,OAAA,2BAQA8d,KACAD,IACA9G,EAAAA,EAAA3W,OAAA,GAAA6d,EAAA/H,IAGAoH,EAAAU,MAcArI,EAAA2I,MAAA,SAAAC,EAAAxH,EAAA/B,GAWA,QAAAwJ,GAAAC,EAAAlf,GACA,GAAA,gBAAAA,GACAkf,EAAAF,MAAAG,SAAAnf,EAAA,KAAAof,MACA,CAAA,GAAA,gBAAApf,GAIA,KAAA,IAAAS,OAAA,gDAAAT,GAHAkf,GAAAF,MAAAG,SAAAnf,EAAAgf,MAAA,KAAAI,EACAF,EAAAG,SAAAF,SAAAnf,EAAAqf,SAAA,KAAAC,GAmBA,QAAAC,GAAAC,EAAAC,GACA,QAAAC,GAAAlI,EAAAmI,GACA,MAAA,UAAAC,GACApI,EAAA,SAAAtB,EAAA/B,GACAyL,GAAA1J,GAAAyJ,GAAAzJ,IAAAA,EAAA/B,OAAAA,KACAsL,IAIA,QAAAI,GAAAR,GACA,MAAA,UAAAO,GACA/E,WAAA,WACA+E,EAAA,OACAP,IAIA,KAAAS,EAAAd,OAAA,CAEA,GAAAW,KAAAG,EAAAd,OAAA,EACAe,GAAAvV,KAAAkV,EAAAI,EAAAtI,KAAAmI,KACAA,GAAAG,EAAAT,SAAA,GACAU,EAAAvV,KAAAqV,EAAAC,EAAAT,WAIAjJ,EAAA4J,OAAAD,EAAA,SAAAjK,EAAA3T,GACAA,EAAAA,EAAAA,EAAAtB,OAAA,IACA2e,GAAAM,EAAArK,UAAAtT,EAAA+T,IAAA/T,EAAAgS,UA9DA,GAAAiL,GAAA,EACAE,EAAA,EAEAS,KAEAD,GACAd,MAAAI,EACAC,SAAAC,GAcAze,EAAA6S,UAAA7S,MACA,IAAA,EAAAA,GAAAA,EAAA,EACA,KAAA,IAAAJ,OAAA,wGA4CA,OA3CA,IAAAI,GAAA,kBAAAme,KACAvJ,EAAA+B,EACAA,EAAAwH,GAEA,kBAAAA,IACAC,EAAAa,EAAAd,GAEAc,EAAArK,SAAAA,EACAqK,EAAAtI,KAAAA,EAmCAsI,EAAArK,SAAA8J,IAAAA,GAGAnJ,EAAA6J,UAAA,SAAA1I,EAAA9B,GASA,QAAAyK,GAAAlM,GACA,MAAAkB,GAAA,SAAAgB,EAAAuB,GACA,GAAAvB,EACAT,EAAAhC,MAAA,MAAAyC,GAAA0B,OAAAH,QAEA,CACA,GAAA0I,GAAAnM,EAAAmM,MACAA,GACA1I,EAAAjN,KAAA0V,EAAAC,IAGA1I,EAAAjN,KAAAiL,GAEAsE,EAAA/F,GAAAP,MAAA,KAAAgE,MApBA,GADAhC,EAAA9B,EAAA8B,GAAAvC,IACAY,EAAAyD,GAAA,CACA,GAAArB,GAAA,GAAAzV,OAAA,4DACA,OAAAgV,GAAAS,GAEA,MAAAqB,GAAA1W,WAoBAqf,GAAA9J,EAAApC,SAAAuD,MAnBA9B,KAuCAW,EAAAgK,SAAA,SAAA7I,EAAA9B,GACA6B,EAAAlB,EAAAC,OAAAkB,EAAA9B,IAGAW,EAAAiK,cAAA,SAAA9I,EAAA5B,EAAAF,GACA6B,EAAA5B,EAAAC,GAAA4B,EAAA9B,IAGAW,EAAA4J,OAAA,SAAAzI,EAAA9B,GACA6B,EAAAlB,EAAAI,aAAAe,EAAA9B,IAGAW,EAAApC,SAAA,SAAAuD,GACA,QAAA+I,GAAArM,GACA,QAAAT,KAIA,MAHA+D,GAAA1W,QACA0W,EAAAtD,GAAAR,MAAA,KAAAC,WAEAF,EAAA2M,OAKA,MAHA3M,GAAA2M,KAAA,WACA,MAAAlM,GAAAsD,EAAA1W,OAAA,EAAAyf,EAAArM,EAAA,GAAA,MAEAT,EAEA,MAAA8M,GAAA,IAGAlK,EAAA3C,MAAAyB,EAAA,SAAA1B,EAAAiE,GACA,MAAAvC,GAAA,SAAAqL,GACA,MAAA/M,GAAAC,MACA,KAAAgE,EAAAG,OAAA2I,QAgBAnK,EAAAwB,OAAAzB,EAAAuB,GACAtB,EAAAoK,aAAAjK,EAAAmB,GAEAtB,EAAAqK,OAAA,SAAAC,EAAA1M,EAAAyB,GAEA,GADAA,EAAAA,GAAAvC,EACAwN,IAAA,CACA,GAAAP,GAAAjL,EAAA,SAAAgB,EAAAuB,GACAvB,EACAT,EAAAS,GACAwK,EAAAjN,MAAA5T,KAAA4X,GACAzD,EAAAmM,GAEA1K,EAAA,OAGAzB,GAAAmM,OAEA1K,GAAA,OAIAW,EAAAuK,SAAA,SAAA3M,EAAA0M,EAAAjL,GACA,GAAAmL,GAAA,CACA,OAAAxK,GAAAqK,OAAA,WACA,QAAAG,GAAA,GAAAF,EAAAjN,MAAA5T,KAAA6T,YACAM,EAAAyB,IAGAW,EAAAyK,MAAA,SAAAH,EAAA1M,EAAAyB,GACA,MAAAW,GAAAqK,OAAA,WACA,OAAAC,EAAAjN,MAAA5T,KAAA6T,YACAM,EAAAyB,IAGAW,EAAA0K,QAAA,SAAA9M,EAAA0M,EAAAjL,GACA,MAAAW,GAAAuK,SAAA3M,EAAA,WACA,OAAA0M,EAAAjN,MAAA5T,KAAA6T,YACA+B,IAGAW,EAAA2K,OAAA,SAAAL,EAAA1M,EAAAyB,GACAA,EAAAA,GAAAvC,CAEA,IAAAiN,GAAAjL,EAAA,SAAAgB,EAAAuB,GACAvB,EACAT,EAAAS,IAEAuB,EAAAjN,KAAAyM,GACAyJ,EAAAjN,MAAA5T,KAAA4X,MAIAR,EAAA,SAAAf,EAAA8K,GACA9K,EACAT,EAAAS,GACA8K,EACAhN,EAAAmM,GAEA1K,EAAA,MAIAiL,GAAAzJ,IAGAb,EAAA6K,SAAA,SAAAjN,EAAA0M,EAAAjL,GACA,GAAAmL,GAAA,CACAxK,GAAA2K,OAAA,SAAAZ,GACAS,IAAA,EACAT,EAAA,MAAA,GAEAO,EAAAjN,MAAA5T,KAAA6T,YAEAM,EAAAyB,IAwIAW,EAAA8K,MAAA,SAAApJ,EAAAC,GACA,GAAAG,GAAAL,EAAA,SAAAsJ,EAAApK,GACAe,EAAAqJ,EAAA,GAAApK,IACAgB,EAAA,EAEA,OAAAG,IAGA9B,EAAAgL,cAAA,SAAAtJ,EAAAC,GAEA,QAAAsJ,GAAA/gB,EAAAuE,GACA,MAAAvE,GAAAghB,SAAAzc,EAAAyc,SAGA,QAAAC,GAAAC,EAAA1M,EAAA2M,GAGA,IAFA,GAAAC,GAAA,GACAC,EAAAH,EAAA3gB,OAAA,EACA8gB,EAAAD,GAAA,CACA,GAAAE,GAAAF,GAAAC,EAAAD,EAAA,IAAA,EACAD,GAAA3M,EAAA0M,EAAAI,KAAA,EACAF,EAAAE,EAEAD,EAAAC,EAAA,EAGA,MAAAF,GAGA,QAAAzJ,GAAAC,EAAA/V,EAAAmf,EAAA7L,GACA,GAAA,MAAAA,GAAA,kBAAAA,GACA,KAAA,IAAAhV,OAAA,mCAMA,OAJAyX,GAAAE,SAAA,EACAtE,EAAA3R,KACAA,GAAAA,IAEA,IAAAA,EAAAtB,OAEAuV,EAAAkC,aAAA,WACAJ,EAAAK,cAGAxE,GAAA5R,EAAA,SAAAqV,GACA,GAAA1C,IACA3S,KAAAqV,EACA8J,SAAAA,EACA7L,SAAA,kBAAAA,GAAAA,EAAAvC,EAGAgF,GAAAX,MAAAuB,OAAAyI,EAAArJ,EAAAX,MAAAzC,EAAAuM,GAAA,EAAA,EAAAvM,GAEAoD,EAAAX,MAAA1W,SAAAqX,EAAAH,aACAG,EAAAO,YAEArC,EAAAkC,aAAAJ,EAAAjF,WAKA,GAAAiF,GAAA9B,EAAA8K,MAAApJ,EAAAC,EAUA,OAPAG,GAAA1N,KAAA,SAAArI,EAAAmf,EAAA7L,GACAwC,EAAAC,EAAA/V,EAAAmf,EAAA7L,UAIAyC,GAAAM,QAEAN,GAGA9B,EAAAyL,MAAA,SAAA/J,EAAAE,GACA,MAAAH,GAAAC,EAAA,EAAAE,IAqBA5B,EAAA7I,IAAAgM,EAAA,OACAnD,EAAA0L,IAAAvI,EAAA,OAKAnD,EAAA2L,QAAA,SAAAvO,EAAAwO,GACA,GAAAzN,MACA0N,IACAD,GAAAA,GAAA7O,CACA,IAAA+O,GAAAhN,EAAA,SAAAuC,GACA,GAAAhC,GAAAgC,EAAAqC,MACAlF,EAAAoN,EAAAvO,MAAA,KAAAgE,EACA7C,KAAAL,GACA6B,EAAAkC,aAAA,WACA7C,EAAAhC,MAAA,KAAAc,EAAAK,MAGAA,IAAAqN,GACAA,EAAArN,GAAApK,KAAAiL,IAGAwM,EAAArN,IAAAa,GACAjC,EAAAC,MAAA,KAAAgE,EAAAG,QAAA1C,EAAA,SAAAuC,GACAlD,EAAAK,GAAA6C,CACA,IAAAS,GAAA+J,EAAArN,SACAqN,GAAArN,EACA,KAAA,GAAApU,GAAA,EAAAG,EAAAuX,EAAArX,OAAAF,EAAAH,EAAAA,IACA0X,EAAA1X,GAAAiT,MAAA,KAAAgE,UAOA,OAFAyK,GAAA3N,KAAAA,EACA2N,EAAAC,WAAA3O,EACA0O,GAGA9L,EAAAgM,UAAA,SAAA5O,GACA,MAAA,YACA,OAAAA,EAAA2O,YAAA3O,GAAAC,MAAA,KAAAC,aAUA0C,EAAA4I,MAAAxF,EAAApD,EAAAwF,KACAxF,EAAAiM,YAAA7I,EAAApD,EAAAyF,WACAzF,EAAAkM,WAAA,SAAAjO,EAAAsB,EAAA3B,EAAAyB,GACA,MAAAW,GAAA0F,SAAA1H,EAAAC,GAAAsB,EAAA3B,EAAAyB,IAGAW,EAAAmM,IAAA,WACA,GAAA5I,GAAAjG,SACA,OAAAwB,GAAA,SAAAuC,GACA,GAAAoC,GAAAha,KAEA4V,EAAAgC,EAAAA,EAAA5W,OAAA,EACA,mBAAA4U,GACAgC,EAAAqC,MAEArE,EAAAvC,EAGAkD,EAAA6F,OAAAtC,EAAAlC,EAAA,SAAA+K,EAAAhP,EAAAuD,GACAvD,EAAAC,MAAAoG,EAAA2I,EAAA5K,QAAA1C,EAAA,SAAAgB,EAAAuM,GACA1L,EAAAb,EAAAuM,SAGA,SAAAvM,EAAAS,GACAlB,EAAAhC,MAAAoG,GAAA3D,GAAA0B,OAAAjB,SAKAP,EAAAsM,QAAA,WACA,MAAAtM,GAAAmM,IAAA9O,MAAA,KAAA9H,MAAAjJ,UAAA2Z,QAAAzb,KAAA8S,aAuBA0C,EAAAuM,UAAAjJ,EAAAtD,EAAAC,QACAD,EAAAwM,gBAAAlJ,EAAAtD,EAAAI,cAGAJ,EAAAyM,QAAA,SAAArP,EAAAiC,GAGA,QAAA0K,GAAAjK,GACA,MAAAA,GACAJ,EAAAI,OAEAsB,GAAA2I,GANA,GAAArK,GAAAvC,EAAAkC,GAAAvC,GACAsE,EAAAuC,EAAAvG,EAOA2M,MAsBA/J,EAAA2D,YAAAA,EAEA3D,EAAA0M,SAAA5N,EAAA,SAAA6N,GACA,GAAAtL,IAAA,MAAAG,OAAAmL,EACA,OAAA,UAAAtN,GACA,MAAAA,GAAAhC,MAAA5T,KAAA4X,MAIArB,EAAA4M,SACA5M,EAAA6M,SAAA,SAAA9N,GACA,MAAAD,GAAA,SAAAuC,GACA,GACAtD,GADAsB,EAAAgC,EAAAqC,KAEA,KACA3F,EAAAgB,EAAA1B,MAAA5T,KAAA4X,GACA,MAAA1X,GACA,MAAA0V,GAAA1V,GAGAya,EAAArG,IAAA,kBAAAA,GAAA+O,KACA/O,EAAA+O,KAAA,SAAAlU,GACAyG,EAAA,KAAAzG,KACA,SAAA,SAAAkH,GACAT,EAAAS,EAAAiN,QAAAjN,EAAA,GAAAzV,OAAAyV,MAGAT,EAAA,KAAAtB,MAMA,gBAAA7U,IAAAA,EAAAD,QACAC,EAAAD,QAAA+W,EAGA,kBAAA7W,IAAAA,EAAAC,IACAD,KAAA,WACA,MAAA6W,KAKA+D,EAAA/D,MAAAA,OAKAxV,KAAAf,KAAAU,EAAA,YAAA,mBAAAZ,QAAAA,OAAA,mBAAAC,MAAAA,KAAA,mBAAAF,QAAAA,aAEA0jB,SAAA,KAAAC,IAAA,SAAA9iB,EAAAjB,EAAAD,IACA,SAAA4T,GA0BA,QAAAqQ,GAAAC,EAAAC,GAGA,IAAA,GADAC,GAAA,EACAjjB,EAAA+iB,EAAA1iB,OAAA,EAAAL,GAAA,EAAAA,IAAA,CACA,GAAAkjB,GAAAH,EAAA/iB,EACA,OAAAkjB,EACAH,EAAAzK,OAAAtY,EAAA,GACA,OAAAkjB,GACAH,EAAAzK,OAAAtY,EAAA,GACAijB,KACAA,IACAF,EAAAzK,OAAAtY,EAAA,GACAijB,KAKA,GAAAD,EACA,KAAAC,IAAAA,EACAF,EAAA/K,QAAA,KAIA,OAAA+K,GA+JA,QAAA/G,GAAAmH,EAAAvkB,GACA,GAAAukB,EAAAnH,OAAA,MAAAmH,GAAAnH,OAAApd,EAEA,KAAA,GADAwkB,MACApjB,EAAA,EAAAA,EAAAmjB,EAAA9iB,OAAAL,IACApB,EAAAukB,EAAAnjB,GAAAA,EAAAmjB,IAAAC,EAAApZ,KAAAmZ,EAAAnjB,GAEA,OAAAojB,GAhKA,GAAAC,GACA,gEACAC,EAAA,SAAAC,GACA,MAAAF,GAAAG,KAAAD,GAAA1F,MAAA,GAKAhf,GAAA4kB,QAAA,WAIA,IAAA,GAHAC,GAAA,GACAC,GAAA,EAEA3jB,EAAAkT,UAAA7S,OAAA,EAAAL,GAAA,KAAA2jB,EAAA3jB,IAAA,CACA,GAAA4jB,GAAA5jB,GAAA,EAAAkT,UAAAlT,GAAAyS,EAAAoR,KAGA,IAAA,gBAAAD,GACA,KAAA,IAAAE,WAAA,4CACAF,KAIAF,EAAAE,EAAA,IAAAF,EACAC,EAAA,MAAAC,EAAAG,OAAA,IAWA,MAJAL,GAAAZ,EAAA9G,EAAA0H,EAAA1U,MAAA,KAAA,SAAAgV,GACA,QAAAA,KACAL,GAAA1T,KAAA,MAEA0T,EAAA,IAAA,IAAAD,GAAA,KAKA7kB,EAAAolB,UAAA,SAAAL,GACA,GAAAM,GAAArlB,EAAAqlB,WAAAN,GACAO,EAAA,MAAAC,EAAAR,EAAA,GAcA,OAXAA,GAAAd,EAAA9G,EAAA4H,EAAA5U,MAAA,KAAA,SAAAgV,GACA,QAAAA,KACAE,GAAAjU,KAAA,KAEA2T,GAAAM,IACAN,EAAA,KAEAA,GAAAO,IACAP,GAAA,MAGAM,EAAA,IAAA,IAAAN,GAIA/kB,EAAAqlB,WAAA,SAAAN,GACA,MAAA,MAAAA,EAAAG,OAAA,IAIAllB,EAAAoR,KAAA,WACA,GAAAoU,GAAAlZ,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA,OAAArU,GAAAolB,UAAAjI,EAAAqI,EAAA,SAAAL,EAAAvQ,GACA,GAAA,gBAAAuQ,GACA,KAAA,IAAAF,WAAA,yCAEA,OAAAE,KACA/T,KAAA,OAMApR,EAAAylB,SAAA,SAAAC,EAAAC,GAIA,QAAAC,GAAApR,GAEA,IADA,GAAAxJ,GAAA,EACAA,EAAAwJ,EAAAhT,QACA,KAAAgT,EAAAxJ,GADAA,KAKA,IADA,GAAAsX,GAAA9N,EAAAhT,OAAA,EACA8gB,GAAA,GACA,KAAA9N,EAAA8N,GADAA,KAIA,MAAAtX,GAAAsX,KACA9N,EAAAwK,MAAAhU,EAAAsX,EAAAtX,EAAA,GAfA0a,EAAA1lB,EAAA4kB,QAAAc,GAAAH,OAAA,GACAI,EAAA3lB,EAAA4kB,QAAAe,GAAAJ,OAAA,EAsBA,KAAA,GALAM,GAAAD,EAAAF,EAAAvV,MAAA,MACA2V,EAAAF,EAAAD,EAAAxV,MAAA,MAEA3O,EAAAwU,KAAAgE,IAAA6L,EAAArkB,OAAAskB,EAAAtkB,QACAukB,EAAAvkB,EACAL,EAAA,EAAAK,EAAAL,EAAAA,IACA,GAAA0kB,EAAA1kB,KAAA2kB,EAAA3kB,GAAA,CACA4kB,EAAA5kB,CACA,OAKA,IAAA,GADA6kB,MACA7kB,EAAA4kB,EAAA5kB,EAAA0kB,EAAArkB,OAAAL,IACA6kB,EAAA7a,KAAA,KAKA,OAFA6a,GAAAA,EAAAzN,OAAAuN,EAAA9G,MAAA+G,IAEAC,EAAA5U,KAAA,MAGApR,EAAAimB,IAAA,IACAjmB,EAAAkmB,UAAA,IAEAlmB,EAAAmmB,QAAA,SAAApB,GACA,GAAAjQ,GAAA2P,EAAAM,GACAjK,EAAAhG,EAAA,GACA2N,EAAA3N,EAAA,EAEA,OAAAgG,IAAA2H,GAKAA,IAEAA,EAAAA,EAAA8C,OAAA,EAAA9C,EAAAjhB,OAAA,IAGAsZ,EAAA2H,GARA,KAYAziB,EAAAomB,SAAA,SAAArB,EAAAzc,GACA,GAAAvI,GAAA0kB,EAAAM,GAAA,EAKA,OAHAzc,IAAAvI,EAAAwlB,OAAA,GAAAjd,EAAA9G,UAAA8G,IACAvI,EAAAA,EAAAwlB,OAAA,EAAAxlB,EAAAyB,OAAA8G,EAAA9G,SAEAzB,GAIAC,EAAAqmB,QAAA,SAAAtB,GACA,MAAAN,GAAAM,GAAA,GAaA,IAAAQ,GAAA,MAAA,KAAAA,OAAA,IACA,SAAAe,EAAAtb,EAAA4K,GAAA,MAAA0Q,GAAAf,OAAAva,EAAA4K,IACA,SAAA0Q,EAAAtb,EAAA4K,GAEA,MADA,GAAA5K,IAAAA,EAAAsb,EAAA9kB,OAAAwJ,GACAsb,EAAAf,OAAAva,EAAA4K,MAIArU,KAAAf,KAAAU,EAAA,eAEA6iB,SAAA,KAAAwC,IAAA,SAAArlB,EAAAjB,EAAAD,GASA,QAAAwmB,KACAC,GAAA,EACAC,EAAAllB,OACAqgB,EAAA6E,EAAAnO,OAAAsJ,GAEA8E,EAAA,GAEA9E,EAAArgB,QACAolB,IAIA,QAAAA,KACA,IAAAH,EAAA,CAGA,GAAAI,GAAArL,WAAAgL,EACAC,IAAA,CAGA,KADA,GAAA7Q,GAAAiM,EAAArgB,OACAoU,GAAA,CAGA,IAFA8Q,EAAA7E,EACAA,OACA8E,EAAA/Q,GACA8Q,GACAA,EAAAC,GAAAG,KAGAH,GAAA,GACA/Q,EAAAiM,EAAArgB,OAEAklB,EAAA,KACAD,GAAA,EACAM,aAAAF,IAiBA,QAAAG,GAAAC,EAAAzY,GACAhO,KAAAymB,IAAAA,EACAzmB,KAAAgO,MAAAA,EAYA,QAAAqF,MAtEA,GAGA6S,GAHA9S,EAAA3T,EAAAD,WACA6hB,KACA4E,GAAA,EAEAE,EAAA,EAsCA/S,GAAA6H,SAAA,SAAAwL,GACA,GAAA7O,GAAA,GAAA9L,OAAA+H,UAAA7S,OAAA,EACA,IAAA6S,UAAA7S,OAAA,EACA,IAAA,GAAAL,GAAA,EAAAA,EAAAkT,UAAA7S,OAAAL,IACAiX,EAAAjX,EAAA,GAAAkT,UAAAlT,EAGA0gB,GAAA1W,KAAA,GAAA6b,GAAAC,EAAA7O,IACA,IAAAyJ,EAAArgB,QAAAilB,GACAjL,WAAAoL,EAAA,IASAI,EAAA3jB,UAAAyjB,IAAA,WACAtmB,KAAAymB,IAAA7S,MAAA,KAAA5T,KAAAgO,QAEAoF,EAAAsT,MAAA,UACAtT,EAAAuT,SAAA,EACAvT,EAAAwT,OACAxT,EAAAyT,QACAzT,EAAA0T,QAAA,GACA1T,EAAA2T,YAIA3T,EAAA4T,GAAA3T,EACAD,EAAA8K,YAAA7K,EACAD,EAAA6T,KAAA5T,EACAD,EAAA8T,IAAA7T,EACAD,EAAAgL,eAAA/K,EACAD,EAAA+T,mBAAA9T,EACAD,EAAAgU,KAAA/T,EAEAD,EAAAiU,QAAA,SAAA7Y,GACA,KAAA,IAAA5N,OAAA,qCAGAwS,EAAAoR,IAAA,WAAA,MAAA,KACApR,EAAAkU,MAAA,SAAArF,GACA,KAAA,IAAArhB,OAAA,mCAEAwS,EAAAmU,MAAA,WAAA,MAAA,SAEAC,IAAA,SAAA9mB,EAAAjB,EAAAD,IACA,SAAAM,IAEA,SAAAwa,GAgEA,QAAAzN,GAAAxK,GACA,KAAA,IAAAolB,YAAAC,EAAArlB,IAWA,QAAA0Z,GAAA/N,EAAA2F,GAGA,IAFA,GAAA3S,GAAAgN,EAAAhN,OACAsT,KACAtT,KACAsT,EAAAtT,GAAA2S,EAAA3F,EAAAhN,GAEA,OAAAsT,GAaA,QAAAqT,GAAAC,EAAAjU,GACA,GAAA+P,GAAAkE,EAAAjY,MAAA,KACA2E,EAAA,EACAoP,GAAA1iB,OAAA,IAGAsT,EAAAoP,EAAA,GAAA,IACAkE,EAAAlE,EAAA,IAGAkE,EAAAA,EAAA3Y,QAAA4Y,EAAA,IACA,IAAAC,GAAAF,EAAAjY,MAAA,KACAoY,EAAAhM,EAAA+L,EAAAnU,GAAA/C,KAAA,IACA,OAAA0D,GAAAyT,EAgBA,QAAAC,GAAAJ,GAMA,IALA,GAGAzY,GACA8Y,EAJAC,KACAC,EAAA,EACAnnB,EAAA4mB,EAAA5mB,OAGAA,EAAAmnB,GACAhZ,EAAAyY,EAAAQ,WAAAD,KACAhZ,GAAA,OAAA,OAAAA,GAAAnO,EAAAmnB,GAEAF,EAAAL,EAAAQ,WAAAD,KACA,QAAA,MAAAF,GACAC,EAAAvd,OAAA,KAAAwE,IAAA,KAAA,KAAA8Y,GAAA,QAIAC,EAAAvd,KAAAwE,GACAgZ,MAGAD,EAAAvd,KAAAwE,EAGA,OAAA+Y,GAWA,QAAAG,GAAAra,GACA,MAAA+N,GAAA/N,EAAA,SAAAmB,GACA,GAAA+Y,GAAA,EAOA,OANA/Y,GAAA,QACAA,GAAA,MACA+Y,GAAAI,EAAAnZ,IAAA,GAAA,KAAA,OACAA,EAAA,MAAA,KAAAA,GAEA+Y,GAAAI,EAAAnZ,KAEAyB,KAAA,IAYA,QAAA2X,GAAAC,GACA,MAAA,IAAAA,EAAA,GACAA,EAAA,GAEA,GAAAA,EAAA,GACAA,EAAA,GAEA,GAAAA,EAAA,GACAA,EAAA,GAEAC,EAcA,QAAAC,GAAAC,EAAAC,GAGA,MAAAD,GAAA,GAAA,IAAA,GAAAA,KAAA,GAAAC,IAAA,GAQA,QAAAC,GAAAC,EAAAC,EAAAC,GACA,GAAApO,GAAA,CAGA,KAFAkO,EAAAE,EAAAC,EAAAH,EAAAI,GAAAJ,GAAA,EACAA,GAAAG,EAAAH,EAAAC,GACAD,EAAAK,EAAAC,GAAA,EAAAxO,GAAA6N,EACAK,EAAAG,EAAAH,EAAAK,EAEA,OAAAF,GAAArO,GAAAuO,EAAA,GAAAL,GAAAA,EAAAO,IAUA,QAAAC,GAAAC,GAEA,GAEAC,GAIAC,EACAC,EACAtV,EACAuV,EACAlQ,EACAmB,EACA+N,EACAxoB,EAEAypB,EAfA1B,KACA2B,EAAAN,EAAAvoB,OAEAL,EAAA,EACAP,EAAA0pB,EACAC,EAAAC,CAqBA,KALAP,EAAAF,EAAAU,YAAAvE,GACA,EAAA+D,IACAA,EAAA,GAGAC,EAAA,EAAAD,EAAAC,IAAAA,EAEAH,EAAAnB,WAAAsB,IAAA,KACA7c,EAAA,aAEAqb,EAAAvd,KAAA4e,EAAAnB,WAAAsB,GAMA,KAAAtV,EAAAqV,EAAA,EAAAA,EAAA,EAAA,EAAAI,EAAAzV,GAAA,CAOA,IAAAuV,EAAAhpB,EAAA8Y,EAAA,EAAAmB,EAAA6N,EAEArU,GAAAyV,GACAhd,EAAA,iBAGA8b,EAAAJ,EAAAgB,EAAAnB,WAAAhU,OAEAuU,GAAAF,GAAAE,EAAAM,GAAAiB,EAAAvpB,GAAA8Y,KACA5M,EAAA,YAGAlM,GAAAgoB,EAAAlP,EACAtZ,EAAA4pB,GAAAnP,EAAAuP,EAAAvP,GAAAmP,EAAAX,EAAAA,EAAAxO,EAAAmP,IAEA5pB,EAAAwoB,GAfA/N,GAAA6N,EAmBAmB,EAAAnB,EAAAtoB,EACAsZ,EAAAwP,EAAAiB,EAAAN,IACA/c,EAAA,YAGA4M,GAAAmQ,CAIAJ,GAAAtB,EAAAlnB,OAAA,EACA+oB,EAAAlB,EAAAloB,EAAAgpB,EAAAH,EAAA,GAAAG,GAIAV,EAAAtoB,EAAA6oB,GAAAU,EAAA9pB,GACAyM,EAAA,YAGAzM,GAAA6oB,EAAAtoB,EAAA6oB,GACA7oB,GAAA6oB,EAGAtB,EAAAjP,OAAAtY,IAAA,EAAAP,GAIA,MAAAioB,GAAAH,GAUA,QAAAkC,GAAAb,GACA,GAAAnpB,GACA0oB,EACAuB,EACAC,EACAP,EACAL,EACAa,EACAlS,EACAuC,EACAza,EACAqqB,EAGAX,EAEAY,EACAb,EACAc,EANAxC,IAoBA,KAXAqB,EAAAvB,EAAAuB,GAGAM,EAAAN,EAAAvoB,OAGAZ,EAAA0pB,EACAhB,EAAA,EACAiB,EAAAC,EAGAN,EAAA,EAAAG,EAAAH,IAAAA,EACAc,EAAAjB,EAAAG,GACA,IAAAc,GACAtC,EAAAvd,KAAA2d,EAAAkC,GAeA,KAXAH,EAAAC,EAAApC,EAAAlnB,OAMAspB,GACApC,EAAAvd,KAAA+a,GAIAmE,EAAAQ,GAAA,CAIA,IAAAE,EAAAL,EAAAR,EAAA,EAAAG,EAAAH,IAAAA,EACAc,EAAAjB,EAAAG,GACAc,GAAApqB,GAAAmqB,EAAAC,IACAD,EAAAC,EAcA,KARAC,EAAAJ,EAAA,EACAE,EAAAnqB,EAAA6oB,GAAAiB,EAAApB,GAAA2B,IACA5d,EAAA,YAGAic,IAAAyB,EAAAnqB,GAAAqqB,EACArqB,EAAAmqB,EAEAb,EAAA,EAAAG,EAAAH,IAAAA,EAOA,GANAc,EAAAjB,EAAAG,GAEAtpB,EAAAoqB,KAAA1B,EAAAoB,GACArd,EAAA,YAGA2d,GAAApqB,EAAA,CAEA,IAAAiY,EAAAyQ,EAAAlO,EAAA6N,EACAtoB,EAAA4pB,GAAAnP,EAAAuP,EAAAvP,GAAAmP,EAAAX,EAAAA,EAAAxO,EAAAmP,IACA5pB,EAAAkY,GAFAuC,GAAA6N,EAKAiC,EAAArS,EAAAlY,EACAypB,EAAAnB,EAAAtoB,EACA+nB,EAAAvd,KACA2d,EAAAI,EAAAvoB,EAAAuqB,EAAAd,EAAA,KAEAvR,EAAA4Q,EAAAyB,EAAAd,EAGA1B,GAAAvd,KAAA2d,EAAAI,EAAArQ,EAAA,KACA0R,EAAAlB,EAAAC,EAAA2B,EAAAJ,GAAAC,GACAxB,EAAA,IACAuB,IAIAvB,IACA1oB,EAGA,MAAA8nB,GAAAtX,KAAA,IAcA,QAAA+Z,GAAApB,GACA,MAAA5B,GAAA4B,EAAA,SAAA3B,GACA,MAAAgD,GAAA/J,KAAA+G,GACA0B,EAAA1B,EAAApJ,MAAA,GAAAqM,eACAjD,IAeA,QAAAkD,GAAAvB,GACA,MAAA5B,GAAA4B,EAAA,SAAA3B,GACA,MAAAmD,GAAAlK,KAAA+G,GACA,OAAAwC,EAAAxC,GACAA,IAvdA,GAAAoD,GAAA,gBAAAxrB,IAAAA,IACAA,EAAAyrB,UAAAzrB,EACA0rB,EAAA,gBAAAzrB,IAAAA,IACAA,EAAAwrB,UAAAxrB,EACA0rB,EAAA,gBAAArrB,IAAAA,GAEAqrB,EAAArrB,SAAAqrB,GACAA,EAAAtrB,SAAAsrB,GACAA,EAAAprB,OAAAorB,KAEA7Q,EAAA6Q,EAQA,IAAAC,GAiCArW,EA9BAmV,EAAA,WAGAzB,EAAA,GACA0B,EAAA,EACAf,EAAA,GACAC,EAAA,GACAH,EAAA,IACAc,EAAA,GACAF,EAAA,IACApE,EAAA,IAGAkF,EAAA,QACAG,EAAA,eACAlD,EAAA,4BAGAH,GACA2D,SAAA,kDACAC,YAAA,iDACAC,gBAAA,iBAIApC,EAAAV,EAAA0B,EACAlB,EAAAzT,KAAAyT,MACAX,EAAAkD,OAAAC,YAycA,IA3BAL,GAMAtE,QAAA,QAQA4E,MACApC,OAAAtB,EACAoC,OAAA/B,GAEAiB,OAAAA,EACAc,OAAAA,EACAU,QAAAA,EACAH,UAAAA,GAOA,kBAAAjrB,IACA,gBAAAA,GAAAC,KACAD,EAAAC,IAEAD,EAAA,WAAA,WACA,MAAA0rB,SAEA,IAAAJ,GAAAE,EACA,GAAAzrB,EAAAD,SAAAwrB,EAEAE,EAAA1rB,QAAA4rB,MAGA,KAAArW,IAAAqW,GACAA,EAAAvQ,eAAA9F,KAAAiW,EAAAjW,GAAAqW,EAAArW,QAKAuF,GAAA8Q,SAAAA,GAGAprB,QAEAe,KAAAf,KAAA,mBAAAF,QAAAA,OAAA,mBAAAC,MAAAA,KAAA,mBAAAF,QAAAA,gBAEA8rB,IAAA,SAAAjrB,EAAAjB,EAAAD,GAsBA,YAKA,SAAAqb,GAAA9E,EAAA6V,GACA,MAAArc,QAAA1M,UAAAgY,eAAA9Z,KAAAgV,EAAA6V,GAGAnsB,EAAAD,QAAA,SAAAqsB,EAAApG,EAAAqG,EAAAjhB,GACA4a,EAAAA,GAAA,IACAqG,EAAAA,GAAA,GACA,IAAA/V,KAEA,IAAA,gBAAA8V,IAAA,IAAAA,EAAA7qB,OACA,MAAA+U,EAGA,IAAAgW,GAAA,KACAF,GAAAA,EAAAlc,MAAA8V,EAEA,IAAAuG,GAAA,GACAnhB,IAAA,gBAAAA,GAAAmhB,UACAA,EAAAnhB,EAAAmhB,QAGA,IAAA5W,GAAAyW,EAAA7qB,MAEAgrB,GAAA,GAAA5W,EAAA4W,IACA5W,EAAA4W,EAGA,KAAA,GAAArrB,GAAA,EAAAyU,EAAAzU,IAAAA,EAAA,CACA,GAEAsrB,GAAAC,EAAAtR,EAAArH,EAFAoB,EAAAkX,EAAAlrB,GAAAsO,QAAA8c,EAAA,OACA1N,EAAA1J,EAAAwX,QAAAL;AAGAzN,GAAA,GACA4N,EAAAtX,EAAAoQ,OAAA,EAAA1G,GACA6N,EAAAvX,EAAAoQ,OAAA1G,EAAA,KAEA4N,EAAAtX,EACAuX,EAAA,IAGAtR,EAAAwR,mBAAAH,GACA1Y,EAAA6Y,mBAAAF,GAEArR,EAAA9E,EAAA6E,GAEAF,EAAA3E,EAAA6E,IACA7E,EAAA6E,GAAAjQ,KAAA4I,GAEAwC,EAAA6E,IAAA7E,EAAA6E,GAAArH,GAJAwC,EAAA6E,GAAArH,EAQA,MAAAwC,GAGA,IAAA2E,GAAA5O,MAAA4O,SAAA,SAAAoJ,GACA,MAAA,mBAAAvU,OAAA1M,UAAA4X,SAAA1Z,KAAA+iB,SAGAuI,IAAA,SAAA3rB,EAAAjB,EAAAD,GAsBA,YAgDA,SAAAuc,GAAA+H,EAAAvkB,GACA,GAAAukB,EAAA/H,IAAA,MAAA+H,GAAA/H,IAAAxc,EAEA,KAAA,GADAwkB,MACApjB,EAAA,EAAAA,EAAAmjB,EAAA9iB,OAAAL,IACAojB,EAAApZ,KAAApL,EAAAukB,EAAAnjB,GAAAA,GAEA,OAAAojB,GApDA,GAAAuI,GAAA,SAAA/Y,GACA,aAAAA,IACA,IAAA,SACA,MAAAA,EAEA,KAAA,UACA,MAAAA,GAAA,OAAA,OAEA,KAAA,SACA,MAAAgZ,UAAAhZ,GAAAA,EAAA,EAEA,SACA,MAAA,IAIA9T,GAAAD,QAAA,SAAAuW,EAAA0P,EAAAqG,EAAAtd,GAOA,MANAiX,GAAAA,GAAA,IACAqG,EAAAA,GAAA,IACA,OAAA/V,IACAA,EAAA7N,QAGA,gBAAA6N,GACAgG,EAAAyQ,EAAAzW,GAAA,SAAA6E,GACA,GAAA6R,GAAAC,mBAAAJ,EAAA1R,IAAAkR,CACA,OAAApR,GAAA3E,EAAA6E,IACAmB,EAAAhG,EAAA6E,GAAA,SAAArH,GACA,MAAAkZ,GAAAC,mBAAAJ,EAAA/Y,MACA3C,KAAA6U,GAEAgH,EAAAC,mBAAAJ,EAAAvW,EAAA6E,OAEAhK,KAAA6U,GAIAjX,EACAke,mBAAAJ,EAAA9d,IAAAsd,EACAY,mBAAAJ,EAAAvW,IAFA,GAKA,IAAA2E,GAAA5O,MAAA4O,SAAA,SAAAoJ,GACA,MAAA,mBAAAvU,OAAA1M,UAAA4X,SAAA1Z,KAAA+iB,IAYA0I,EAAAjd,OAAAC,MAAA,SAAAuG,GACA,GAAAgO,KACA,KAAA,GAAAhP,KAAAgB,GACAxG,OAAA1M,UAAAgY,eAAA9Z,KAAAgV,EAAAhB,IAAAgP,EAAApZ,KAAAoK,EAEA,OAAAgP,SAGA4I,IAAA,SAAAjsB,EAAAjB,EAAAD,GACA,YAEAA,GAAA8pB,OAAA9pB,EAAAotB,MAAAlsB,EAAA,YACAlB,EAAA4qB,OAAA5qB,EAAAqtB,UAAAnsB,EAAA,cAEAosB,WAAA,GAAAC,WAAA,KAAAC,IAAA,SAAAtsB,EAAAjB,EAAAD,GA+BA,QAAAytB,KACAjtB,KAAAktB,SAAA,KACAltB,KAAAmtB,QAAA,KACAntB,KAAAotB,KAAA,KACAptB,KAAAqtB,KAAA,KACArtB,KAAAstB,KAAA,KACAttB,KAAAutB,SAAA,KACAvtB,KAAAwtB,KAAA,KACAxtB,KAAAytB,OAAA,KACAztB,KAAA0tB,MAAA,KACA1tB,KAAA2tB,SAAA,KACA3tB,KAAAukB,KAAA,KACAvkB,KAAA4tB,KAAA,KAqDA,QAAAC,GAAAC,EAAAC,EAAAC,GACA,GAAAF,GAAAG,EAAAH,IAAAA,YAAAb,GAAA,MAAAa,EAEA,IAAAttB,GAAA,GAAAysB,EAEA,OADAzsB,GAAAosB,MAAAkB,EAAAC,EAAAC,GACAxtB,EA6OA,QAAA0tB,GAAAnY,GAMA,MADAoY,GAAApY,KAAAA,EAAA8X,EAAA9X,IACAA,YAAAkX,GACAlX,EAAA7O,SADA+lB,EAAApqB,UAAAqE,OAAAnG,KAAAgV,GA4DA,QAAAqY,GAAA5mB,EAAAyd,GACA,MAAA4I,GAAArmB,GAAA,GAAA,GAAA4c,QAAAa,GAOA,QAAAoJ,GAAA7mB,EAAAyd,GACA,MAAAzd,GACAqmB,EAAArmB,GAAA,GAAA,GAAA8mB,cAAArJ,GADAA,EAyRA,QAAAkJ,GAAAI,GACA,MAAA,gBAAAA,GAGA,QAAAN,GAAAM,GACA,MAAA,gBAAAA,IAAA,OAAAA,EAGA,QAAAC,GAAAD,GACA,MAAA,QAAAA,EAEA,QAAAE,GAAAF,GACA,MAAA,OAAAA,EA5qBA,GAAAnD,GAAA1qB,EAAA,WAEAlB,GAAAotB,MAAAiB,EACAruB,EAAA4kB,QAAAgK,EACA5uB,EAAA8uB,cAAAD,EACA7uB,EAAA0H,OAAAgnB,EAEA1uB,EAAAytB,IAAAA,CAqBA,IAAAyB,GAAA,oBACAC,EAAA,WAIAC,GAAA,IAAA,IAAA,IAAA,IAAA,IAAA,KAAA,KAAA,KAGAC,GAAA,IAAA,IAAA,IAAA,KAAA,IAAA,KAAA9W,OAAA6W,GAGAE,GAAA,KAAA/W,OAAA8W,GAKAE,GAAA,IAAA,IAAA,IAAA,IAAA,KAAAhX,OAAA+W,GACAE,GAAA,IAAA,IAAA,KACAC,EAAA,IACAC,EAAA,wBACAC,EAAA,8BAEAC,GACAC,YAAA,EACAC,eAAA,GAGAC,GACAF,YAAA,EACAC,eAAA,GAGAE,GACAC,MAAA,EACAC,OAAA,EACAC,KAAA,EACAC,QAAA,EACAC,MAAA,EACAC,SAAA,EACAC,UAAA,EACAC,QAAA,EACAC,WAAA,EACAC,SAAA,GAEAC,EAAAzvB,EAAA,cAUAusB,GAAApqB,UAAA+pB,MAAA,SAAAkB,EAAAC,EAAAC,GACA,IAAAG,EAAAL,GACA,KAAA,IAAArJ,WAAA,+CAAAqJ,GAGA,IAAApY,GAAAoY,CAIApY,GAAAA,EAAA0P,MAEA,IAAAgL,GAAA1B,EAAAvK,KAAAzO,EACA,IAAA0a,EAAA,CACAA,EAAAA,EAAA,EACA,IAAAC,GAAAD,EAAAvF,aACA7qB,MAAAktB,SAAAmD,EACA3a,EAAAA,EAAAqP,OAAAqL,EAAApvB,QAOA,GAAAgtB,GAAAoC,GAAA1a,EAAA4a,MAAA,wBAAA,CACA,GAAAnD,GAAA,OAAAzX,EAAAqP,OAAA,EAAA,IACAoI,GAAAiD,GAAAb,EAAAa,KACA1a,EAAAA,EAAAqP,OAAA,GACA/kB,KAAAmtB,SAAA,GAIA,IAAAoC,EAAAa,KACAjD,GAAAiD,IAAAZ,EAAAY,IAAA,CAmBA,IAAA,GADAG,GAAA,GACA5vB,EAAA,EAAAA,EAAAquB,EAAAhuB,OAAAL,IAAA,CACA,GAAA6vB,GAAA9a,EAAAyW,QAAA6C,EAAAruB,GACA,MAAA6vB,IAAA,KAAAD,GAAAA,EAAAC,KACAD,EAAAC,GAKA,GAAApD,GAAAqD,CAGAA,GAFA,KAAAF,EAEA7a,EAAAuU,YAAA,KAIAvU,EAAAuU,YAAA,IAAAsG,GAKA,KAAAE,IACArD,EAAA1X,EAAA8I,MAAA,EAAAiS,GACA/a,EAAAA,EAAA8I,MAAAiS,EAAA,GACAzwB,KAAAotB,KAAAhB,mBAAAgB,IAIAmD,EAAA,EACA,KAAA,GAAA5vB,GAAA,EAAAA,EAAAouB,EAAA/tB,OAAAL,IAAA,CACA,GAAA6vB,GAAA9a,EAAAyW,QAAA4C,EAAApuB,GACA,MAAA6vB,IAAA,KAAAD,GAAAA,EAAAC,KACAD,EAAAC,GAGA,KAAAD,IACAA,EAAA7a,EAAA1U,QAEAhB,KAAAqtB,KAAA3X,EAAA8I,MAAA,EAAA+R,GACA7a,EAAAA,EAAA8I,MAAA+R,GAGAvwB,KAAA0wB,YAIA1wB,KAAAutB,SAAAvtB,KAAAutB,UAAA,EAIA,IAAAoD,GAAA,MAAA3wB,KAAAutB,SAAA,IACA,MAAAvtB,KAAAutB,SAAAvtB,KAAAutB,SAAAvsB,OAAA,EAGA,KAAA2vB,EAEA,IAAA,GADAC,GAAA5wB,KAAAutB,SAAA5d,MAAA,MACAhP,EAAA,EAAAG,EAAA8vB,EAAA5vB,OAAAF,EAAAH,EAAAA,IAAA,CACA,GAAAkwB,GAAAD,EAAAjwB,EACA,IAAAkwB,IACAA,EAAAP,MAAApB,GAAA,CAEA,IAAA,GADA4B,GAAA,GACApH,EAAA,EAAA9O,EAAAiW,EAAA7vB,OAAA4Z,EAAA8O,EAAAA,IAKAoH,GAJAD,EAAAzI,WAAAsB,GAAA,IAIA,IAEAmH,EAAAnH,EAIA,KAAAoH,EAAAR,MAAApB,GAAA,CACA,GAAA6B,GAAAH,EAAApS,MAAA,EAAA7d,GACAqwB,EAAAJ,EAAApS,MAAA7d,EAAA,GACAswB,EAAAJ,EAAAP,MAAAnB,EACA8B,KACAF,EAAApmB,KAAAsmB,EAAA,IACAD,EAAArY,QAAAsY,EAAA,KAEAD,EAAAhwB,SACA0U,EAAA,IAAAsb,EAAApgB,KAAA,KAAA8E,GAEA1V,KAAAutB,SAAAwD,EAAAngB,KAAA,IACA,SAaA,GAPA5Q,KAAAutB,SAAAvsB,OAAAiuB,EACAjvB,KAAAutB,SAAA,GAGAvtB,KAAAutB,SAAAvtB,KAAAutB,SAAA1C,eAGA8F,EAAA,CAOA,IAAA,GAFAO,GAAAlxB,KAAAutB,SAAA5d,MAAA,KACAwhB,KACAxwB,EAAA,EAAAA,EAAAuwB,EAAAlwB,SAAAL,EAAA,CACA,GAAAL,GAAA4wB,EAAAvwB,EACAwwB,GAAAxmB,KAAArK,EAAAgwB,MAAA,kBACA,OAAAlF,EAAAhB,OAAA9pB,GAAAA,GAEAN,KAAAutB,SAAA4D,EAAAvgB,KAAA,KAGA,GAAA+T,GAAA3kB,KAAAstB,KAAA,IAAAttB,KAAAstB,KAAA,GACA8D,EAAApxB,KAAAutB,UAAA,EACAvtB,MAAAqtB,KAAA+D,EAAAzM,EACA3kB,KAAA4tB,MAAA5tB,KAAAqtB,KAIAsD,IACA3wB,KAAAutB,SAAAvtB,KAAAutB,SAAAxI,OAAA,EAAA/kB,KAAAutB,SAAAvsB,OAAA,GACA,MAAA0U,EAAA,KACAA,EAAA,IAAAA,IAOA,IAAA0Z,EAAAiB,GAKA,IAAA,GAAA1vB,GAAA,EAAAG,EAAAguB,EAAA9tB,OAAAF,EAAAH,EAAAA,IAAA,CACA,GAAA0wB,GAAAvC,EAAAnuB,GACA2wB,EAAA5E,mBAAA2E,EACAC,KAAAD,IACAC,EAAAC,OAAAF,IAEA3b,EAAAA,EAAA/F,MAAA0hB,GAAAzgB,KAAA0gB,GAMA,GAAA9D,GAAA9X,EAAAyW,QAAA,IACA,MAAAqB,IAEAxtB,KAAAwtB,KAAA9X,EAAAqP,OAAAyI,GACA9X,EAAAA,EAAA8I,MAAA,EAAAgP,GAEA,IAAAgE,GAAA9b,EAAAyW,QAAA,IAoBA,IAnBA,KAAAqF,GACAxxB,KAAAytB,OAAA/X,EAAAqP,OAAAyM,GACAxxB,KAAA0tB,MAAAhY,EAAAqP,OAAAyM,EAAA,GACAzD,IACA/tB,KAAA0tB,MAAAyC,EAAAvD,MAAA5sB,KAAA0tB,QAEAhY,EAAAA,EAAA8I,MAAA,EAAAgT,IACAzD,IAEA/tB,KAAAytB,OAAA,GACAztB,KAAA0tB,UAEAhY,IAAA1V,KAAA2tB,SAAAjY,GACA8Z,EAAAa,IACArwB,KAAAutB,WAAAvtB,KAAA2tB,WACA3tB,KAAA2tB,SAAA,KAIA3tB,KAAA2tB,UAAA3tB,KAAAytB,OAAA,CACA,GAAA9I,GAAA3kB,KAAA2tB,UAAA,GACArtB,EAAAN,KAAAytB,QAAA,EACAztB,MAAAukB,KAAAI,EAAArkB,EAKA,MADAN,MAAA4tB,KAAA5tB,KAAAkH,SACAlH,MAcAitB,EAAApqB,UAAAqE,OAAA,WACA,GAAAkmB,GAAAptB,KAAAotB,MAAA,EACAA,KACAA,EAAAV,mBAAAU,GACAA,EAAAA,EAAAne,QAAA,OAAA,KACAme,GAAA,IAGA,IAAAF,GAAAltB,KAAAktB,UAAA,GACAS,EAAA3tB,KAAA2tB,UAAA,GACAH,EAAAxtB,KAAAwtB,MAAA,GACAH,GAAA,EACAK,EAAA,EAEA1tB,MAAAqtB,KACAA,EAAAD,EAAAptB,KAAAqtB,KACArtB,KAAAutB,WACAF,EAAAD,GAAA,KAAAptB,KAAAutB,SAAApB,QAAA,KACAnsB,KAAAutB,SACA,IAAAvtB,KAAAutB,SAAA,KACAvtB,KAAAstB,OACAD,GAAA,IAAArtB,KAAAstB,OAIAttB,KAAA0tB,OACAO,EAAAjuB,KAAA0tB,QACAne,OAAAC,KAAAxP,KAAA0tB,OAAA1sB,SACA0sB,EAAAyC,EAAAtD,UAAA7sB,KAAA0tB,OAGA,IAAAD,GAAAztB,KAAAytB,QAAAC,GAAA,IAAAA,GAAA,EAsBA,OApBAR,IAAA,MAAAA,EAAAnI,OAAA,MAAAmI,GAAA,KAIAltB,KAAAmtB,WACAD,GAAAsC,EAAAtC,KAAAG,KAAA,GACAA,EAAA,MAAAA,GAAA,IACAM,GAAA,MAAAA,EAAAjJ,OAAA,KAAAiJ,EAAA,IAAAA,IACAN,IACAA,EAAA,IAGAG,GAAA,MAAAA,EAAA9I,OAAA,KAAA8I,EAAA,IAAAA,GACAC,GAAA,MAAAA,EAAA/I,OAAA,KAAA+I,EAAA,IAAAA,GAEAE,EAAAA,EAAA1e,QAAA,QAAA,SAAAqhB,GACA,MAAA5D,oBAAA4D,KAEA7C,EAAAA,EAAAxe,QAAA,IAAA,OAEAie,EAAAG,EAAAM,EAAAF,EAAAD,GAOAP,EAAApqB,UAAAuhB,QAAA,SAAAa,GACA,MAAAjlB,MAAAsuB,cAAAT,EAAA5I,GAAA,GAAA,IAAA/d,UAQA+lB,EAAApqB,UAAAyrB,cAAA,SAAArJ,GACA,GAAAkJ,EAAAlJ,GAAA,CACA,GAAAwM,GAAA,GAAAxE,EACAwE,GAAA7E,MAAA3H,GAAA,GAAA,GACAA,EAAAwM,EAGA,GAAAnd,GAAA,GAAA2Y,EAUA,IATA1d,OAAAC,KAAAxP,MAAAkb,QAAA,SAAAN,GACAtG,EAAAsG,GAAA5a,KAAA4a,IACA5a,MAIAsU,EAAAkZ,KAAAvI,EAAAuI,KAGA,KAAAvI,EAAA2I,KAEA,MADAtZ,GAAAsZ,KAAAtZ,EAAApN,SACAoN,CAIA,IAAA2Q,EAAAkI,UAAAlI,EAAAiI,SAcA,MAZA3d,QAAAC,KAAAyV,GAAA/J,QAAA,SAAAN,GACA,aAAAA,IACAtG,EAAAsG,GAAAqK,EAAArK,MAIA4U,EAAAlb,EAAA4Y,WACA5Y,EAAAiZ,WAAAjZ,EAAAqZ,WACArZ,EAAAiQ,KAAAjQ,EAAAqZ,SAAA,KAGArZ,EAAAsZ,KAAAtZ,EAAApN,SACAoN,CAGA,IAAA2Q,EAAAiI,UAAAjI,EAAAiI,WAAA5Y,EAAA4Y,SAAA,CASA,IAAAsC,EAAAvK,EAAAiI,UAKA,MAJA3d,QAAAC,KAAAyV,GAAA/J,QAAA,SAAAN,GACAtG,EAAAsG,GAAAqK,EAAArK,KAEAtG,EAAAsZ,KAAAtZ,EAAApN,SACAoN,CAIA,IADAA,EAAA4Y,SAAAjI,EAAAiI,SACAjI,EAAAoI,MAAAkC,EAAAtK,EAAAiI,UASA5Y,EAAAqZ,SAAA1I,EAAA0I,aATA,CAEA,IADA,GAAA+D,IAAAzM,EAAA0I,UAAA,IAAAhe,MAAA,KACA+hB,EAAA1wB,UAAAikB,EAAAoI,KAAAqE,EAAAC,WACA1M,EAAAoI,OAAApI,EAAAoI,KAAA,IACApI,EAAAsI,WAAAtI,EAAAsI,SAAA,IACA,KAAAmE,EAAA,IAAAA,EAAA/Y,QAAA,IACA+Y,EAAA1wB,OAAA,GAAA0wB,EAAA/Y,QAAA,IACArE,EAAAqZ,SAAA+D,EAAA9gB,KAAA,KAWA,GAPA0D,EAAAmZ,OAAAxI,EAAAwI,OACAnZ,EAAAoZ,MAAAzI,EAAAyI,MACApZ,EAAA+Y,KAAApI,EAAAoI,MAAA,GACA/Y,EAAA8Y,KAAAnI,EAAAmI,KACA9Y,EAAAiZ,SAAAtI,EAAAsI,UAAAtI,EAAAoI,KACA/Y,EAAAgZ,KAAArI,EAAAqI,KAEAhZ,EAAAqZ,UAAArZ,EAAAmZ,OAAA,CACA,GAAA9I,GAAArQ,EAAAqZ,UAAA,GACArtB,EAAAgU,EAAAmZ,QAAA,EACAnZ,GAAAiQ,KAAAI,EAAArkB,EAIA,MAFAgU,GAAA6Y,QAAA7Y,EAAA6Y,SAAAlI,EAAAkI,QACA7Y,EAAAsZ,KAAAtZ,EAAApN,SACAoN,EAGA,GAAAsd,GAAAtd,EAAAqZ,UAAA,MAAArZ,EAAAqZ,SAAAjJ,OAAA,GACAmN,EACA5M,EAAAoI,MACApI,EAAA0I,UAAA,MAAA1I,EAAA0I,SAAAjJ,OAAA,GAEAoN,EAAAD,GAAAD,GACAtd,EAAA+Y,MAAApI,EAAA0I,SACAoE,EAAAD,EACAE,EAAA1d,EAAAqZ,UAAArZ,EAAAqZ,SAAAhe,MAAA,SACA+hB,EAAAzM,EAAA0I,UAAA1I,EAAA0I,SAAAhe,MAAA,SACAsiB,EAAA3d,EAAA4Y,WAAAsC,EAAAlb,EAAA4Y,SA2BA,IApBA+E,IACA3d,EAAAiZ,SAAA,GACAjZ,EAAAgZ,KAAA,KACAhZ,EAAA+Y,OACA,KAAA2E,EAAA,GAAAA,EAAA,GAAA1d,EAAA+Y,KACA2E,EAAArZ,QAAArE,EAAA+Y,OAEA/Y,EAAA+Y,KAAA,GACApI,EAAAiI,WACAjI,EAAAsI,SAAA,KACAtI,EAAAqI,KAAA,KACArI,EAAAoI,OACA,KAAAqE,EAAA,GAAAA,EAAA,GAAAzM,EAAAoI,KACAqE,EAAA/Y,QAAAsM,EAAAoI,OAEApI,EAAAoI,KAAA,MAEAyE,EAAAA,IAAA,KAAAJ,EAAA,IAAA,KAAAM,EAAA,KAGAH,EAEAvd,EAAA+Y,KAAApI,EAAAoI,MAAA,KAAApI,EAAAoI,KACApI,EAAAoI,KAAA/Y,EAAA+Y,KACA/Y,EAAAiZ,SAAAtI,EAAAsI,UAAA,KAAAtI,EAAAsI,SACAtI,EAAAsI,SAAAjZ,EAAAiZ,SACAjZ,EAAAmZ,OAAAxI,EAAAwI,OACAnZ,EAAAoZ,MAAAzI,EAAAyI,MACAsE,EAAAN,MAEA,IAAAA,EAAA1wB,OAGAgxB,IAAAA,MACAA,EAAA/X,MACA+X,EAAAA,EAAAja,OAAA2Z,GACApd,EAAAmZ,OAAAxI,EAAAwI,OACAnZ,EAAAoZ,MAAAzI,EAAAyI,UACA,KAAAe,EAAAxJ,EAAAwI,QAAA,CAIA,GAAAwE,EAAA,CACA3d,EAAAiZ,SAAAjZ,EAAA+Y,KAAA2E,EAAAL,OAIA,IAAAO,GAAA5d,EAAA+Y,MAAA/Y,EAAA+Y,KAAAlB,QAAA,KAAA,EACA7X,EAAA+Y,KAAA1d,MAAA,MAAA,CACAuiB,KACA5d,EAAA8Y,KAAA8E,EAAAP,QACArd,EAAA+Y,KAAA/Y,EAAAiZ,SAAA2E,EAAAP,SAWA,MARArd,GAAAmZ,OAAAxI,EAAAwI,OACAnZ,EAAAoZ,MAAAzI,EAAAyI,MAEAc,EAAAla,EAAAqZ,WAAAa,EAAAla,EAAAmZ,UACAnZ,EAAAiQ,MAAAjQ,EAAAqZ,SAAArZ,EAAAqZ,SAAA,KACArZ,EAAAmZ,OAAAnZ,EAAAmZ,OAAA,KAEAnZ,EAAAsZ,KAAAtZ,EAAApN,SACAoN,EAGA,IAAA0d,EAAAhxB,OAWA,MARAsT,GAAAqZ,SAAA,KAEArZ,EAAAmZ,OACAnZ,EAAAiQ,KAAA,IAAAjQ,EAAAmZ,OAEAnZ,EAAAiQ,KAAA,KAEAjQ,EAAAsZ,KAAAtZ,EAAApN,SACAoN,CAcA,KAAA,GARAuP,GAAAmO,EAAAxT,MAAA,IAAA,GACA2T,GACA7d,EAAA+Y,MAAApI,EAAAoI,QAAA,MAAAxJ,GAAA,OAAAA,IACA,KAAAA,EAIAD,EAAA,EACAjjB,EAAAqxB,EAAAhxB,OAAAL,GAAA,EAAAA,IACAkjB,EAAAmO,EAAArxB,GACA,KAAAkjB,EACAmO,EAAA/Y,OAAAtY,EAAA,GACA,OAAAkjB,GACAmO,EAAA/Y,OAAAtY,EAAA,GACAijB,KACAA,IACAoO,EAAA/Y,OAAAtY,EAAA,GACAijB,IAKA,KAAAkO,IAAAC,EACA,KAAAnO,IAAAA,EACAoO,EAAArZ,QAAA,OAIAmZ,GAAA,KAAAE,EAAA,IACAA,EAAA,IAAA,MAAAA,EAAA,GAAAtN,OAAA,IACAsN,EAAArZ,QAAA,IAGAwZ,GAAA,MAAAH,EAAAphB,KAAA,KAAAmU,OAAA,KACAiN,EAAArnB,KAAA,GAGA,IAAAka,GAAA,KAAAmN,EAAA,IACAA,EAAA,IAAA,MAAAA,EAAA,GAAAtN,OAAA,EAGA,IAAAuN,EAAA,CACA3d,EAAAiZ,SAAAjZ,EAAA+Y,KAAAxI,EAAA,GACAmN,EAAAhxB,OAAAgxB,EAAAL,QAAA,EAIA,IAAAO,GAAA5d,EAAA+Y,MAAA/Y,EAAA+Y,KAAAlB,QAAA,KAAA,EACA7X,EAAA+Y,KAAA1d,MAAA,MAAA,CACAuiB,KACA5d,EAAA8Y,KAAA8E,EAAAP,QACArd,EAAA+Y,KAAA/Y,EAAAiZ,SAAA2E,EAAAP,SAyBA,MArBAG,GAAAA,GAAAxd,EAAA+Y,MAAA2E,EAAAhxB,OAEA8wB,IAAAjN,GACAmN,EAAArZ,QAAA,IAGAqZ,EAAAhxB,OAIAsT,EAAAqZ,SAAAqE,EAAAphB,KAAA,MAHA0D,EAAAqZ,SAAA,KACArZ,EAAAiQ,KAAA,MAMAiK,EAAAla,EAAAqZ,WAAAa,EAAAla,EAAAmZ,UACAnZ,EAAAiQ,MAAAjQ,EAAAqZ,SAAArZ,EAAAqZ,SAAA,KACArZ,EAAAmZ,OAAAnZ,EAAAmZ,OAAA,KAEAnZ,EAAA8Y,KAAAnI,EAAAmI,MAAA9Y,EAAA8Y,KACA9Y,EAAA6Y,QAAA7Y,EAAA6Y,SAAAlI,EAAAkI,QACA7Y,EAAAsZ,KAAAtZ,EAAApN,SACAoN,GAGA2Y,EAAApqB,UAAA6tB,UAAA,WACA,GAAArD,GAAArtB,KAAAqtB,KACAC,EAAAqB,EAAAxK,KAAAkJ,EACAC,KACAA,EAAAA,EAAA,GACA,MAAAA,IACAttB,KAAAstB,KAAAA,EAAAvI,OAAA,IAEAsI,EAAAA,EAAAtI,OAAA,EAAAsI,EAAArsB,OAAAssB,EAAAtsB,SAEAqsB,IAAArtB,KAAAutB,SAAAF,MAkBAjC,SAAA,GAAA+E,YAAA,KAAAiC,IAAA,SAAA1xB,EAAAjB,EAAAD,GACA,YAIA,SAAA6yB,GAAA/vB,EAAAgwB,EAAAC,GAEAA,EAAAA,GAAA,CAEA,IAAAC,GAAAF,GAAAA,EAAAtxB,OACAyxB,EAAAD,EAAAF,EAAA,GAAAC,EAAAjwB,EAAAtB,OACA0xB,EAAAC,EAAArwB,EAAA,EAAAmwB,EAAAF,GAAA,GACAK,IAEA,KAAAF,EAAA,MAAAE,EAEA,IAAAC,GAAAC,EAAAC,EAAAC,EAAAre,EAAAmD,EAAA/M,CAKA,IAHAynB,IAAAE,EAAAO,EAAA3wB,EAAAgwB,EAAAI,EAAAH,IAGAjwB,EAAAtB,OAAA,GAAAuxB,EAAA,CACAM,EAAAE,EAAAzwB,EAAA,GACAwwB,EAAAE,EAAA1wB,EAAA,EAEA,KAAA,GAAA3B,GAAA4xB,EAAAE,EAAA9xB,EAAAA,GAAA4xB,EACA5d,EAAArS,EAAA3B,GACAmX,EAAAxV,EAAA3B,EAAA,GACAkyB,EAAAle,IAAAke,EAAAle,GACAme,EAAAhb,IAAAgb,EAAAhb,GACAnD,EAAAoe,IAAAA,EAAApe,GACAmD,EAAAkb,IAAAA,EAAAlb,EAIA/M,GAAAyK,KAAAC,IAAAsd,EAAAF,EAAAG,EAAAF,GAKA,MAFAI,GAAAR,EAAAE,EAAAL,EAAAM,EAAAC,EAAA/nB,GAEA6nB,EAIA,QAAAD,GAAArwB,EAAAkI,EAAAsX,EAAAyQ,EAAAY,GACA,GACAxyB,GAAA+oB,EAAA7F,EADAuP,EAAA,CAIA,KAAAzyB,EAAA6J,EAAAkf,EAAA5H,EAAAyQ,EAAAzQ,EAAAnhB,EAAAA,GAAA4xB,EACAa,IAAA9wB,EAAAonB,GAAApnB,EAAA3B,KAAA2B,EAAA3B,EAAA,GAAA2B,EAAAonB,EAAA,IACAA,EAAA/oB,CAIA,IAAAwyB,IAAAC,EAAA,EACA,IAAAzyB,EAAA6J,EAAAsX,EAAAnhB,EAAAA,GAAA4xB,EAAA1O,EAAAwP,EAAA1yB,EAAA2B,EAAA3B,GAAA2B,EAAA3B,EAAA,GAAAkjB,OAEA,KAAAljB,EAAAmhB,EAAAyQ,EAAA5xB,GAAA6J,EAAA7J,GAAA4xB,EAAA1O,EAAAwP,EAAA1yB,EAAA2B,EAAA3B,GAAA2B,EAAA3B,EAAA,GAAAkjB,EAGA,OAAAA,GAIA,QAAAyP,GAAA9oB,EAAAsX,GACA,IAAAtX,EAAA,MAAAA,EACAsX,KAAAA,EAAAtX,EAEA,IACA+oB,GADA5O,EAAAna,CAEA,GAGA,IAFA+oB,GAAA,EAEA5O,EAAA6O,UAAAC,EAAA9O,EAAAA,EAAArE,OAAA,IAAAoT,EAAA/O,EAAAgP,KAAAhP,EAAAA,EAAArE,MAOAqE,EAAAA,EAAArE,SAPA,CAGA,GAFAsT,EAAAjP,GACAA,EAAA7C,EAAA6C,EAAAgP,KACAhP,IAAAA,EAAArE,KAAA,MAAA,KACAiT,IAAA,QAKAA,GAAA5O,IAAA7C,EAEA,OAAAA,GAIA,QAAAoR,GAAAW,EAAAjB,EAAAL,EAAAM,EAAAC,EAAA/nB,EAAA+oB,GACA,GAAAD,EAAA,EAGAC,GAAA/oB,GAAAgpB,EAAAF,EAAAhB,EAAAC,EAAA/nB,EAMA,KAJA,GACA4oB,GAAArT,EADA0T,EAAAH,EAIAA,EAAAF,OAAAE,EAAAvT,MAIA,GAHAqT,EAAAE,EAAAF,KACArT,EAAAuT,EAAAvT,KAEAvV,EAAAkpB,EAAAJ,EAAAhB,EAAAC,EAAA/nB,GAAAmpB,EAAAL,GAEAjB,EAAAjoB,KAAAgpB,EAAAhzB,EAAA4xB,GACAK,EAAAjoB,KAAAkpB,EAAAlzB,EAAA4xB,GACAK,EAAAjoB,KAAA2V,EAAA3f,EAAA4xB,GAEAqB,EAAAC,GAGAA,EAAAvT,EAAAA,KACA0T,EAAA1T,EAAAA,SAQA,IAHAuT,EAAAvT,EAGAuT,IAAAG,EAAA,CAEAF,EAIA,IAAAA,GACAD,EAAAM,EAAAN,EAAAjB,EAAAL,GACAW,EAAAW,EAAAjB,EAAAL,EAAAM,EAAAC,EAAA/nB,EAAA,IAGA,IAAA+oB,GACAM,EAAAP,EAAAjB,EAAAL,EAAAM,EAAAC,EAAA/nB,GATAmoB,EAAAI,EAAAO,GAAAjB,EAAAL,EAAAM,EAAAC,EAAA/nB,EAAA,EAYA,SAMA,QAAAmpB,GAAAL,GACA,GAAApzB,GAAAozB,EAAAF,KACA3uB,EAAA6uB,EACAQ,EAAAR,EAAAvT,IAEA,IAAAoT,EAAAjzB,EAAAuE,EAAAqvB,IAAA,EAAA,OAAA,CAKA,KAFA,GAAA1P,GAAAkP,EAAAvT,KAAAA,KAEAqE,IAAAkP,EAAAF,MAAA,CACA,GAAAW,EAAA7zB,EAAAkU,EAAAlU,EAAAqX,EAAA9S,EAAA2P,EAAA3P,EAAA8S,EAAAuc,EAAA1f,EAAA0f,EAAAvc,EAAA6M,EAAAhQ,EAAAgQ,EAAA7M,IACA4b,EAAA/O,EAAAgP,KAAAhP,EAAAA,EAAArE,OAAA,EAAA,OAAA,CACAqE,GAAAA,EAAArE,KAGA,OAAA,EAGA,QAAA2T,GAAAJ,EAAAhB,EAAAC,EAAA/nB,GACA,GAAAtK,GAAAozB,EAAAF,KACA3uB,EAAA6uB,EACAQ,EAAAR,EAAAvT,IAEA,IAAAoT,EAAAjzB,EAAAuE,EAAAqvB,IAAA,EAAA,OAAA,CAeA,KAZA,GAAAE,GAAA9zB,EAAAkU,EAAA3P,EAAA2P,EAAAlU,EAAAkU,EAAA0f,EAAA1f,EAAAlU,EAAAkU,EAAA0f,EAAA1f,EAAA3P,EAAA2P,EAAA0f,EAAA1f,EAAA3P,EAAA2P,EAAA0f,EAAA1f,EACA6f,EAAA/zB,EAAAqX,EAAA9S,EAAA8S,EAAArX,EAAAqX,EAAAuc,EAAAvc,EAAArX,EAAAqX,EAAAuc,EAAAvc,EAAA9S,EAAA8S,EAAAuc,EAAAvc,EAAA9S,EAAA8S,EAAAuc,EAAAvc,EACA2c,EAAAh0B,EAAAkU,EAAA3P,EAAA2P,EAAAlU,EAAAkU,EAAA0f,EAAA1f,EAAAlU,EAAAkU,EAAA0f,EAAA1f,EAAA3P,EAAA2P,EAAA0f,EAAA1f,EAAA3P,EAAA2P,EAAA0f,EAAA1f,EACA+f,EAAAj0B,EAAAqX,EAAA9S,EAAA8S,EAAArX,EAAAqX,EAAAuc,EAAAvc,EAAArX,EAAAqX,EAAAuc,EAAAvc,EAAA9S,EAAA8S,EAAAuc,EAAAvc,EAAA9S,EAAA8S,EAAAuc,EAAAvc,EAGA6c,EAAAC,EAAAL,EAAAC,EAAA3B,EAAAC,EAAA/nB,GACA8pB,EAAAD,EAAAH,EAAAC,EAAA7B,EAAAC,EAAA/nB,GAGA4Z,EAAAkP,EAAAiB,MAEAnQ,GAAAA,EAAAoQ,GAAAF,GAAA,CACA,GAAAlQ,IAAAkP,EAAAF,MAAAhP,IAAAkP,EAAAvT,MACAgU,EAAA7zB,EAAAkU,EAAAlU,EAAAqX,EAAA9S,EAAA2P,EAAA3P,EAAA8S,EAAAuc,EAAA1f,EAAA0f,EAAAvc,EAAA6M,EAAAhQ,EAAAgQ,EAAA7M,IACA4b,EAAA/O,EAAAgP,KAAAhP,EAAAA,EAAArE,OAAA,EAAA,OAAA,CACAqE,GAAAA,EAAAmQ,MAMA,IAFAnQ,EAAAkP,EAAAmB,MAEArQ,GAAAA,EAAAoQ,GAAAJ,GAAA,CACA,GAAAhQ,IAAAkP,EAAAF,MAAAhP,IAAAkP,EAAAvT,MACAgU,EAAA7zB,EAAAkU,EAAAlU,EAAAqX,EAAA9S,EAAA2P,EAAA3P,EAAA8S,EAAAuc,EAAA1f,EAAA0f,EAAAvc,EAAA6M,EAAAhQ,EAAAgQ,EAAA7M,IACA4b,EAAA/O,EAAAgP,KAAAhP,EAAAA,EAAArE,OAAA,EAAA,OAAA,CACAqE,GAAAA,EAAAqQ,MAGA,OAAA,EAIA,QAAAb,GAAA3pB,EAAAooB,EAAAL,GACA,GAAA5N,GAAAna,CACA,GAAA,CACA,GAAA/J,GAAAkkB,EAAAgP,KACA3uB,EAAA2f,EAAArE,KAAAA,IAGA2U,GAAAx0B,EAAAkkB,EAAAA,EAAArE,KAAAtb,IAAAkwB,EAAAz0B,EAAAuE,IAAAkwB,EAAAlwB,EAAAvE,KAEAmyB,EAAAjoB,KAAAlK,EAAAE,EAAA4xB,GACAK,EAAAjoB,KAAAga,EAAAhkB,EAAA4xB,GACAK,EAAAjoB,KAAA3F,EAAArE,EAAA4xB,GAGAqB,EAAAjP,GACAiP,EAAAjP,EAAArE,MAEAqE,EAAAna,EAAAxF,GAEA2f,EAAAA,EAAArE,WACAqE,IAAAna,EAEA,OAAAma,GAIA,QAAAyP,GAAA5pB,EAAAooB,EAAAL,EAAAM,EAAAC,EAAA/nB,GAEA,GAAAtK,GAAA+J,CACA,GAAA,CAEA,IADA,GAAAxF,GAAAvE,EAAA6f,KAAAA,KACAtb,IAAAvE,EAAAkzB,MAAA,CACA,GAAAlzB,EAAAE,IAAAqE,EAAArE,GAAAw0B,EAAA10B,EAAAuE,GAAA,CAEA,GAAAqvB,GAAAe,EAAA30B,EAAAuE,EASA,OANAvE,GAAA6yB,EAAA7yB,EAAAA,EAAA6f,MACA+T,EAAAf,EAAAe,EAAAA,EAAA/T,MAGA4S,EAAAzyB,EAAAmyB,EAAAL,EAAAM,EAAAC,EAAA/nB,OACAmoB,GAAAmB,EAAAzB,EAAAL,EAAAM,EAAAC,EAAA/nB,GAGA/F,EAAAA,EAAAsb,KAEA7f,EAAAA,EAAA6f,WACA7f,IAAA+J,GAIA,QAAAyoB,GAAA3wB,EAAAgwB,EAAAI,EAAAH,GACA,GACA5xB,GAAAyU,EAAA5K,EAAAsX,EAAAuT,EADAhU,IAGA,KAAA1gB,EAAA,EAAAyU,EAAAkd,EAAAtxB,OAAAoU,EAAAzU,EAAAA,IACA6J,EAAA8nB,EAAA3xB,GAAA4xB,EACAzQ,EAAA1M,EAAA,EAAAzU,EAAA2xB,EAAA3xB,EAAA,GAAA4xB,EAAAjwB,EAAAtB,OACAq0B,EAAA1C,EAAArwB,EAAAkI,EAAAsX,EAAAyQ,GAAA,GACA8C,IAAAA,EAAA/U,OAAA+U,EAAA7B,SAAA,GACAnS,EAAA1W,KAAA2qB,EAAAD,GAMA,KAHAhU,EAAArK,KAAAue,GAGA50B,EAAA,EAAAA,EAAA0gB,EAAArgB,OAAAL,IACA60B,EAAAnU,EAAA1gB,GAAA+xB,GACAA,EAAAY,EAAAZ,EAAAA,EAAApS,KAGA,OAAAoS,GAGA,QAAA6C,GAAA90B,EAAAuE,GACA,MAAAvE,GAAAkU,EAAA3P,EAAA2P,EAIA,QAAA6gB,GAAAC,EAAA/C,GAEA,GADAA,EAAAgD,EAAAD,EAAA/C,GACA,CACA,GAAA1tB,GAAAowB,EAAA1C,EAAA+C,EACAnC,GAAAtuB,EAAAA,EAAAsb,OAKA,QAAAoV,GAAAD,EAAA/C,GACA,GAIAnI,GAJA5F,EAAA+N,EACAiD,EAAAF,EAAA9gB,EACAihB,EAAAH,EAAA3d,EACA+d,IAAAC,EAAAA,EAKA,GAAA,CACA,GAAAF,GAAAjR,EAAA7M,GAAA8d,GAAAjR,EAAArE,KAAAxI,EAAA,CACA,GAAAnD,GAAAgQ,EAAAhQ,GAAAihB,EAAAjR,EAAA7M,IAAA6M,EAAArE,KAAA3L,EAAAgQ,EAAAhQ,IAAAgQ,EAAArE,KAAAxI,EAAA6M,EAAA7M,EACA6d,IAAAhhB,GAAAA,EAAAkhB,IACAA,EAAAlhB,EACA4V,EAAA5F,EAAAhQ,EAAAgQ,EAAArE,KAAA3L,EAAAgQ,EAAAA,EAAArE,MAGAqE,EAAAA,EAAArE,WACAqE,IAAA+N,EAEA,KAAAnI,EAAA,MAAA,KAMA,IAEAwL,GAFA/B,EAAAzJ,EACAyL,EAAAF,EAAAA,CAKA,KAFAnR,EAAA4F,EAAAjK,KAEAqE,IAAAqP,GACA2B,GAAAhR,EAAAhQ,GAAAgQ,EAAAhQ,GAAA4V,EAAA5V,GACA2f,EAAAsB,EAAArL,EAAAzS,EAAA6d,EAAAE,EAAAD,EAAArL,EAAA5V,EAAA4V,EAAAzS,EAAA8d,EAAArL,EAAAzS,EAAA+d,EAAAF,EAAAC,EAAAjR,EAAAhQ,EAAAgQ,EAAA7M,KAEAie,EAAAvgB,KAAAygB,IAAAL,EAAAjR,EAAA7M,IAAA6d,EAAAhR,EAAAhQ,IAEAqhB,EAAAD,GAAAA,IAAAC,GAAArR,EAAAhQ,EAAA4V,EAAA5V,IAAAugB,EAAAvQ,EAAA8Q,KACAlL,EAAA5F,EACAqR,EAAAD,IAIApR,EAAAA,EAAArE,IAGA,OAAAiK,GAIA,QAAAwJ,GAAAvpB,EAAAqoB,EAAAC,EAAA/nB,GACA,GAAA4Z,GAAAna,CACA,GACA,QAAAma,EAAAoQ,IAAApQ,EAAAoQ,EAAAH,EAAAjQ,EAAAhQ,EAAAgQ,EAAA7M,EAAA+a,EAAAC,EAAA/nB,IACA4Z,EAAAqQ,MAAArQ,EAAAgP,KACAhP,EAAAmQ,MAAAnQ,EAAArE,KACAqE,EAAAA,EAAArE,WACAqE,IAAAna,EAEAma,GAAAqQ,MAAAF,MAAA,KACAnQ,EAAAqQ,MAAA,KAEAkB,EAAAvR,GAKA,QAAAuR,GAAAb,GACA,GAAA10B,GAAAgkB,EAAAtM,EAAAnY,EAAAi2B,EAAAC,EAAAC,EAAAC,EACAC,EAAA,CAEA,GAAA,CAMA,IALA5R,EAAA0Q,EACAA,EAAA,KACAc,EAAA,KACAC,EAAA,EAEAzR,GAAA,CAIA,IAHAyR,IACA/d,EAAAsM,EACA0R,EAAA,EACA11B,EAAA,EAAA41B,EAAA51B,IACA01B,IACAhe,EAAAA,EAAAyc,MACAzc,GAHA1X,KAQA,IAFA21B,EAAAC,EAEAF,EAAA,GAAAC,EAAA,GAAAje,GAEA,IAAAge,GACAn2B,EAAAmY,EACAA,EAAAA,EAAAyc,MACAwB,KACA,IAAAA,GAAAje,EAIAsM,EAAAoQ,GAAA1c,EAAA0c,GACA70B,EAAAykB,EACAA,EAAAA,EAAAmQ,MACAuB,MAEAn2B,EAAAmY,EACAA,EAAAA,EAAAyc,MACAwB,MAVAp2B,EAAAykB,EACAA,EAAAA,EAAAmQ,MACAuB,KAWAF,EAAAA,EAAArB,MAAA50B,EACAm1B,EAAAn1B,EAEAA,EAAA80B,MAAAmB,EACAA,EAAAj2B,CAGAykB,GAAAtM,EAGA8d,EAAArB,MAAA,KACAyB,GAAA,QAEAH,EAAA,EAEA,OAAAf,GAIA,QAAAT,GAAAjgB,EAAAmD,EAAA+a,EAAAC,EAAA/nB,GAeA,MAbA4J,GAAA,OAAAA,EAAAke,GAAA9nB,EACA+M,EAAA,OAAAA,EAAAgb,GAAA/nB,EAEA4J,EAAA,UAAAA,EAAAA,GAAA,GACAA,EAAA,WAAAA,EAAAA,GAAA,GACAA,EAAA,WAAAA,EAAAA,GAAA,GACAA,EAAA,YAAAA,EAAAA,GAAA,GAEAmD,EAAA,UAAAA,EAAAA,GAAA,GACAA,EAAA,WAAAA,EAAAA,GAAA,GACAA,EAAA,WAAAA,EAAAA,GAAA,GACAA,EAAA,YAAAA,EAAAA,GAAA,GAEAnD,EAAAmD,GAAA,EAIA,QAAAwd,GAAA9qB,GACA,GAAAma,GAAAna,EACAgsB,EAAAhsB,CACA,GACAma,GAAAhQ,EAAA6hB,EAAA7hB,IAAA6hB,EAAA7R,GACAA,EAAAA,EAAArE,WACAqE,IAAAna,EAEA,OAAAgsB,GAIA,QAAAlC,GAAAmC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GACA,OAAAH,EAAAE,IAAAL,EAAAM,IAAAP,EAAAM,IAAAD,EAAAE,IAAA,IACAP,EAAAM,IAAAH,EAAAI,IAAAL,EAAAI,IAAAL,EAAAM,IAAA,IACAL,EAAAI,IAAAD,EAAAE,IAAAH,EAAAE,IAAAH,EAAAI,IAAA,EAIA,QAAA7B,GAAA10B,EAAAuE,GACA,MAAAyuB,GAAAhzB,EAAAuE,IAAAvE,EAAA6f,KAAA3f,IAAAqE,EAAArE,GAAAF,EAAAkzB,KAAAhzB,IAAAqE,EAAArE,IAAAs2B,EAAAx2B,EAAAuE,IACAkwB,EAAAz0B,EAAAuE,IAAAkwB,EAAAlwB,EAAAvE,IAAAy2B,EAAAz2B,EAAAuE,GAIA,QAAA0uB,GAAA/O,EAAAtM,EAAAhY,GACA,OAAAgY,EAAAP,EAAA6M,EAAA7M,IAAAzX,EAAAsU,EAAA0D,EAAA1D,IAAA0D,EAAA1D,EAAAgQ,EAAAhQ,IAAAtU,EAAAyX,EAAAO,EAAAP,GAIA,QAAA2b,GAAA0D,EAAAC,GACA,MAAAD,GAAAxiB,IAAAyiB,EAAAziB,GAAAwiB,EAAArf,IAAAsf,EAAAtf,EAIA,QAAAmd,GAAAkC,EAAAE,EAAAD,EAAAE,GACA,MAAA5D,GAAAyD,EAAAE,EAAAD,GAAA,GAAA1D,EAAAyD,EAAAE,EAAAC,GAAA,GACA5D,EAAA0D,EAAAE,EAAAH,GAAA,GAAAzD,EAAA0D,EAAAE,EAAAD,GAAA,EAIA,QAAAJ,GAAAx2B,EAAAuE,GACA,GAAA2f,GAAAlkB,CACA,GAAA,CACA,GAAAkkB,EAAAhkB,IAAAF,EAAAE,GAAAgkB,EAAArE,KAAA3f,IAAAF,EAAAE,GAAAgkB,EAAAhkB,IAAAqE,EAAArE,GAAAgkB,EAAArE,KAAA3f,IAAAqE,EAAArE,GACAs0B,EAAAtQ,EAAAA,EAAArE,KAAA7f,EAAAuE,GAAA,OAAA,CACA2f,GAAAA,EAAArE,WACAqE,IAAAlkB,EAEA,QAAA,EAIA,QAAAy0B,GAAAz0B,EAAAuE,GACA,MAAA0uB,GAAAjzB,EAAAkzB,KAAAlzB,EAAAA,EAAA6f,MAAA,EACAoT,EAAAjzB,EAAAuE,EAAAvE,EAAA6f,OAAA,GAAAoT,EAAAjzB,EAAAA,EAAAkzB,KAAA3uB,IAAA,EACA0uB,EAAAjzB,EAAAuE,EAAAvE,EAAAkzB,MAAA,GAAAD,EAAAjzB,EAAAA,EAAA6f,KAAAtb,GAAA,EAIA,QAAAkyB,GAAAz2B,EAAAuE,GACA,GAAA2f,GAAAlkB,EACA82B,GAAA,EACAR,GAAAt2B,EAAAkU,EAAA3P,EAAA2P,GAAA,EACAqiB,GAAAv2B,EAAAqX,EAAA9S,EAAA8S,GAAA,CACA,GACA6M,GAAA7M,EAAAkf,GAAArS,EAAArE,KAAAxI,EAAAkf,GAAAD,GAAApS,EAAArE,KAAA3L,EAAAgQ,EAAAhQ,IAAAqiB,EAAArS,EAAA7M,IAAA6M,EAAArE,KAAAxI,EAAA6M,EAAA7M,GAAA6M,EAAAhQ,IACA4iB,GAAAA,GACA5S,EAAAA,EAAArE,WACAqE,IAAAlkB,EAEA,OAAA82B,GAKA,QAAAnC,GAAA30B,EAAAuE,GACA,GAAAwyB,GAAA,GAAAC,GAAAh3B,EAAAE,EAAAF,EAAAkU,EAAAlU,EAAAqX,GACA4f,EAAA,GAAAD,GAAAzyB,EAAArE,EAAAqE,EAAA2P,EAAA3P,EAAA8S,GACA6f,EAAAl3B,EAAA6f,KACAsX,EAAA5yB,EAAA2uB,IAcA,OAZAlzB,GAAA6f,KAAAtb,EACAA,EAAA2uB,KAAAlzB,EAEA+2B,EAAAlX,KAAAqX,EACAA,EAAAhE,KAAA6D,EAEAE,EAAApX,KAAAkX,EACAA,EAAA7D,KAAA+D,EAEAE,EAAAtX,KAAAoX,EACAA,EAAA/D,KAAAiE,EAEAF,EAIA,QAAArE,GAAA1yB,EAAAgU,EAAAmD,EAAA+L,GACA,GAAAc,GAAA,GAAA8S,GAAA92B,EAAAgU,EAAAmD,EAYA,OAVA+L,IAKAc,EAAArE,KAAAuD,EAAAvD,KACAqE,EAAAgP,KAAA9P,EACAA,EAAAvD,KAAAqT,KAAAhP,EACAd,EAAAvD,KAAAqE,IAPAA,EAAAgP,KAAAhP,EACAA,EAAArE,KAAAqE,GAQAA,EAGA,QAAAiP,GAAAjP,GACAA,EAAArE,KAAAqT,KAAAhP,EAAAgP,KACAhP,EAAAgP,KAAArT,KAAAqE,EAAArE,KAEAqE,EAAAqQ,QAAArQ,EAAAqQ,MAAAF,MAAAnQ,EAAAmQ,OACAnQ,EAAAmQ,QAAAnQ,EAAAmQ,MAAAE,MAAArQ,EAAAqQ,OAGA,QAAAyC,GAAA92B,EAAAgU,EAAAmD,GAEA9X,KAAAW,EAAAA,EAGAX,KAAA2U,EAAAA,EACA3U,KAAA8X,EAAAA,EAGA9X,KAAA2zB,KAAA,KACA3zB,KAAAsgB,KAAA,KAGAtgB,KAAA+0B,EAAA,KAGA/0B,KAAAg1B,MAAA,KACAh1B,KAAA80B,MAAA,KAGA90B,KAAAwzB,SAAA,EAlkBA/zB,EAAAD,QAAA6yB,OAqkBAwF,IAAA,SAAAn3B,EAAAjB,EAAAD,GACA,YAoBA,SAAAs4B,GAAAnkB,EAAAokB,EAAA9Q,GACAjnB,KAAA2T,GAAAA,EACA3T,KAAA+3B,QAAAA,EACA/3B,KAAAinB,KAAAA,IAAA,EAUA,QAAA+Q,MAvBA,GAAAC,GAAA,kBAAA1oB,QAAA/L,OAAA,KAAA,CA+BAw0B,GAAAn1B,UAAAq1B,QAAAhwB,OAUA8vB,EAAAn1B,UAAAsb,UAAA,SAAAga,EAAAC,GACA,GAAAC,GAAAJ,EAAAA,EAAAE,EAAAA,EACAG,EAAAt4B,KAAAk4B,SAAAl4B,KAAAk4B,QAAAG,EAEA,IAAAD,EAAA,QAAAE,CACA,KAAAA,EAAA,QACA,IAAAA,EAAA3kB,GAAA,OAAA2kB,EAAA3kB,GAEA,KAAA,GAAAhT,GAAA,EAAAG,EAAAw3B,EAAAt3B,OAAAu3B,EAAA,GAAAzsB,OAAAhL,GAAAA,EAAAH,EAAAA,IACA43B,EAAA53B,GAAA23B,EAAA33B,GAAAgT,EAGA,OAAA4kB,IAUAP,EAAAn1B,UAAAukB,KAAA,SAAA+Q,EAAAK,EAAAhB,EAAAiB,EAAAC,EAAAC,GACA,GAAAN,GAAAJ,EAAAA,EAAAE,EAAAA,CAEA,KAAAn4B,KAAAk4B,UAAAl4B,KAAAk4B,QAAAG,GAAA,OAAA,CAEA,IAEAzgB,GACAjX,EAHAwd,EAAAne,KAAAk4B,QAAAG,GACAjjB,EAAAvB,UAAA7S,MAIA,IAAA,kBAAAmd,GAAAxK,GAAA,CAGA,OAFAwK,EAAA8I,MAAAjnB,KAAAoe,eAAA+Z,EAAAha,EAAAxK,GAAAzL,QAAA,GAEAkN,GACA,IAAA,GAAA,MAAA+I,GAAAxK,GAAA5S,KAAAod,EAAA4Z,UAAA,CACA,KAAA,GAAA,MAAA5Z,GAAAxK,GAAA5S,KAAAod,EAAA4Z,QAAAS,IAAA,CACA,KAAA,GAAA,MAAAra,GAAAxK,GAAA5S,KAAAod,EAAA4Z,QAAAS,EAAAhB,IAAA,CACA,KAAA,GAAA,MAAArZ,GAAAxK,GAAA5S,KAAAod,EAAA4Z,QAAAS,EAAAhB,EAAAiB,IAAA,CACA,KAAA,GAAA,MAAAta,GAAAxK,GAAA5S,KAAAod,EAAA4Z,QAAAS,EAAAhB,EAAAiB,EAAAC,IAAA,CACA,KAAA,GAAA,MAAAva,GAAAxK,GAAA5S,KAAAod,EAAA4Z,QAAAS,EAAAhB,EAAAiB,EAAAC,EAAAC,IAAA,EAGA,IAAAh4B,EAAA,EAAAiX,EAAA,GAAA9L,OAAAsJ,EAAA,GAAAA,EAAAzU,EAAAA,IACAiX,EAAAjX,EAAA,GAAAkT,UAAAlT,EAGAwd,GAAAxK,GAAAC,MAAAuK,EAAA4Z,QAAAngB,OACA,CACA,GACA8R,GADA1oB,EAAAmd,EAAAnd,MAGA,KAAAL,EAAA,EAAAK,EAAAL,EAAAA,IAGA,OAFAwd,EAAAxd,GAAAsmB,MAAAjnB,KAAAoe,eAAA+Z,EAAAha,EAAAxd,GAAAgT,GAAAzL,QAAA,GAEAkN,GACA,IAAA,GAAA+I,EAAAxd,GAAAgT,GAAA5S,KAAAod,EAAAxd,GAAAo3B,QAAA,MACA,KAAA,GAAA5Z,EAAAxd,GAAAgT,GAAA5S,KAAAod,EAAAxd,GAAAo3B,QAAAS,EAAA,MACA,KAAA,GAAAra,EAAAxd,GAAAgT,GAAA5S,KAAAod,EAAAxd,GAAAo3B,QAAAS,EAAAhB,EAAA,MACA,SACA,IAAA5f,EAAA,IAAA8R,EAAA,EAAA9R,EAAA,GAAA9L,OAAAsJ,EAAA,GAAAA,EAAAsU,EAAAA,IACA9R,EAAA8R,EAAA,GAAA7V,UAAA6V,EAGAvL,GAAAxd,GAAAgT,GAAAC,MAAAuK,EAAAxd,GAAAo3B,QAAAngB,IAKA,OAAA,GAWAogB,EAAAn1B,UAAAmkB,GAAA,SAAAmR,EAAAxkB,EAAAokB,GACA,GAAAnZ,GAAA,GAAAkZ,GAAAnkB,EAAAokB,GAAA/3B,MACAq4B,EAAAJ,EAAAA,EAAAE,EAAAA,CAWA,OATAn4B,MAAAk4B,UAAAl4B,KAAAk4B,QAAAD,KAAA1oB,OAAA/L,OAAA,OACAxD,KAAAk4B,QAAAG,GAEAr4B,KAAAk4B,QAAAG,GAAA1kB,GACA3T,KAAAk4B,QAAAG,IACAr4B,KAAAk4B,QAAAG,GAAAzZ,GAFA5e,KAAAk4B,QAAAG,GAAA1tB,KAAAiU,GAFA5e,KAAAk4B,QAAAG,GAAAzZ,EAQA5e,MAWAg4B,EAAAn1B,UAAAokB,KAAA,SAAAkR,EAAAxkB,EAAAokB,GACA,GAAAnZ,GAAA,GAAAkZ,GAAAnkB,EAAAokB,GAAA/3B,MAAA,GACAq4B,EAAAJ,EAAAA,EAAAE,EAAAA,CAWA,OATAn4B,MAAAk4B,UAAAl4B,KAAAk4B,QAAAD,KAAA1oB,OAAA/L,OAAA,OACAxD,KAAAk4B,QAAAG,GAEAr4B,KAAAk4B,QAAAG,GAAA1kB,GACA3T,KAAAk4B,QAAAG,IACAr4B,KAAAk4B,QAAAG,GAAAzZ,GAFA5e,KAAAk4B,QAAAG,GAAA1tB,KAAAiU,GAFA5e,KAAAk4B,QAAAG,GAAAzZ,EAQA5e,MAYAg4B,EAAAn1B,UAAAub,eAAA,SAAA+Z,EAAAxkB,EAAAokB,EAAA9Q,GACA,GAAAoR,GAAAJ,EAAAA,EAAAE,EAAAA,CAEA,KAAAn4B,KAAAk4B,UAAAl4B,KAAAk4B,QAAAG,GAAA,MAAAr4B,KAEA,IAAAme,GAAAne,KAAAk4B,QAAAG,GACAO,IAEA,IAAAjlB,EACA,GAAAwK,EAAAxK,IAEAwK,EAAAxK,KAAAA,GACAsT,IAAA9I,EAAA8I,MACA8Q,GAAA5Z,EAAA4Z,UAAAA,IAEAa,EAAAjuB,KAAAwT,OAGA,KAAA,GAAAxd,GAAA,EAAAK,EAAAmd,EAAAnd,OAAAA,EAAAL,EAAAA,KAEAwd,EAAAxd,GAAAgT,KAAAA,GACAsT,IAAA9I,EAAAxd,GAAAsmB,MACA8Q,GAAA5Z,EAAAxd,GAAAo3B,UAAAA,IAEAa,EAAAjuB,KAAAwT,EAAAxd,GAeA,OANAi4B,GAAA53B,OACAhB,KAAAk4B,QAAAG,GAAA,IAAAO,EAAA53B,OAAA43B,EAAA,GAAAA,QAEA54B,MAAAk4B,QAAAG,GAGAr4B,MASAg4B,EAAAn1B,UAAAskB,mBAAA,SAAAgR,GACA,MAAAn4B,MAAAk4B,SAEAC,QAAAn4B,MAAAk4B,QAAAD,EAAAA,EAAAE,EAAAA,GACAn4B,KAAAk4B,QAAAD,KAAA1oB,OAAA/L,OAAA,MAEAxD,MALAA,MAWAg4B,EAAAn1B,UAAAqkB,IAAA8Q,EAAAn1B,UAAAub,eACA4Z,EAAAn1B,UAAAqb,YAAA8Z,EAAAn1B,UAAAmkB,GAKAgR,EAAAn1B,UAAAg2B,gBAAA,WACA,MAAA74B,OAMAg4B,EAAAc,SAAAb,EAKA,mBAAAx4B,KACAA,EAAAD,QAAAw4B,QAGAe,IAAA,SAAAr4B,EAAAjB,EAAAD,GAEA,YAIA,SAAAw5B,GAAAha,GACA,GAAA,OAAAA,GAAA9W,SAAA8W,EACA,KAAA,IAAAyF,WAAA,wDAGA,OAAAlV,QAAAyP,GARA,GAAAnE,GAAAtL,OAAA1M,UAAAgY,eACAoe,EAAA1pB,OAAA1M,UAAAq2B,oBAUAz5B,GAAAD,QAAA+P,OAAA4pB,QAAA,SAAAC,EAAA5xB,GAKA,IAAA,GAJA0d,GAEAmU,EADAlU,EAAA6T,EAAAI,GAGA94B,EAAA,EAAAA,EAAAuT,UAAA7S,OAAAV,IAAA,CACA4kB,EAAA3V,OAAAsE,UAAAvT,GAEA,KAAA,GAAAyU,KAAAmQ,GACArK,EAAA9Z,KAAAmkB,EAAAnQ,KACAoQ,EAAApQ,GAAAmQ,EAAAnQ,GAIA,IAAAxF,OAAA+pB,sBAAA,CACAD,EAAA9pB,OAAA+pB,sBAAApU,EACA,KAAA,GAAAvkB,GAAA,EAAAA,EAAA04B,EAAAr4B,OAAAL,IACAs4B,EAAAl4B,KAAAmkB,EAAAmU,EAAA14B,MACAwkB,EAAAkU,EAAA14B,IAAAukB,EAAAmU,EAAA14B,MAMA,MAAAwkB,SAGAoU,IAAA,SAAA74B,EAAAjB,EAAAD,IACA,SAAA4T,IAUA,WAiBA,QAAAM,GAAAC,GACA,GAAA6lB,IAAA,CACA,OAAA,YACA,GAAAA,EAAA,KAAA,IAAA54B,OAAA,+BACA44B,IAAA,EACA7lB,EAAAC,MAAA0G,EAAAzG,YApBA,GAGAyG,GAAAD,EAHA9D,IAKA+D,GAAAta,KACA,MAAAsa,IACAD,EAAAC,EAAA/D,OAGAA,EAAAgE,WAAA,WAEA,MADAD,GAAA/D,MAAA8D,EACA9D,EAcA,IAAAiE,GAAAjL,OAAA1M,UAAA4X,SAEAxG,EAAAnI,MAAA4O,SAAA,SAAA3E,GACA,MAAA,mBAAAyE,EAAAzZ,KAAAgV,IAGA0jB,EAAA,SAAAzlB,EAAAG,GACA,IAAA,GAAAxT,GAAA,EAAAA,EAAAqT,EAAAhT,OAAAL,GAAA,EACAwT,EAAAH,EAAArT,GAAAA,EAAAqT,IAIAK,EAAA,SAAAL,EAAAG,GACA,GAAAH,EAAA+H,IACA,MAAA/H,GAAA+H,IAAA5H,EAEA,IAAA2C,KAIA,OAHA2iB,GAAAzlB,EAAA,SAAAW,EAAAhU,EAAAF,GACAqW,EAAAnM,KAAAwJ,EAAAQ,EAAAhU,EAAAF,MAEAqW,GAGArC,EAAA,SAAAT,EAAAG,EAAAO,GACA,MAAAV,GAAAoI,OACApI,EAAAoI,OAAAjI,EAAAO,IAEA+kB,EAAAzlB,EAAA,SAAAW,EAAAhU,EAAAF,GACAiU,EAAAP,EAAAO,EAAAC,EAAAhU,EAAAF,KAEAiU,IAGAI,EAAA,SAAAiB,GACA,GAAAxG,OAAAC,KACA,MAAAD,QAAAC,KAAAuG,EAEA,IAAAvG,KACA,KAAA,GAAAoL,KAAA7E,GACAA,EAAA8E,eAAAD,IACApL,EAAA7E,KAAAiQ,EAGA,OAAApL,GAMA,oBAAA4D,IAAAA,EAAA,UAgBAmD,EAAA0E,SAAA7H,EAAA6H,SACA,mBAAAxC,cACAlC,EAAAkC,aAAA,SAAA9E,GAEA8E,aAAA9E,IAIA4C,EAAAkC,aAAAlC,EAAA0E,UAvBA,kBAAAxC,eACAlC,EAAA0E,SAAA,SAAAtH,GAEA8E,aAAA9E,IAEA4C,EAAAkC,aAAAlC,EAAA0E,WAGA1E,EAAA0E,SAAA,SAAAtH,GACAqH,WAAArH,EAAA,IAEA4C,EAAAkC,aAAAlC,EAAA0E,UAgBA1E,EAAA4E,KAAA,SAAAnH,EAAAG,EAAAyB,GASA,QAAAK,GAAAI,GACAA,GACAT,EAAAS,GACAT,EAAA,eAGA6F,GAAA,EACAA,GAAAzH,EAAAhT,QACA4U,KAfA,GADAA,EAAAA,GAAA,cACA5B,EAAAhT,OACA,MAAA4U,IAEA,IAAA6F,GAAA,CACAge,GAAAzlB,EAAA,SAAAW,GACAR,EAAAQ,EAAAjB,EAAAuC,OAeAM,EAAA2E,QAAA3E,EAAA4E,KAEA5E,EAAA8E,WAAA,SAAArH,EAAAG,EAAAyB,GAEA,GADAA,EAAAA,GAAA,cACA5B,EAAAhT,OACA,MAAA4U,IAEA,IAAA6F,GAAA,EACAG,EAAA,WACAzH,EAAAH,EAAAyH,GAAA,SAAApF,GACAA,GACAT,EAAAS,GACAT,EAAA,eAGA6F,GAAA,EACAA,GAAAzH,EAAAhT,OACA4U,IAGAgG,OAKAA,MAEArF,EAAA6E,cAAA7E,EAAA8E,WAEA9E,EAAAgF,UAAA,SAAAvH,EAAA8B,EAAA3B,EAAAyB,GACA,GAAAjC,GAAA+lB,EAAA5jB,EACAnC,GAAAC,MAAA,MAAAI,EAAAG,EAAAyB,KAEAW,EAAA+E,aAAA/E,EAAAgF,SAEA,IAAAme,GAAA,SAAA5jB,GAEA,MAAA,UAAA9B,EAAAG,EAAAyB,GAEA,GADAA,EAAAA,GAAA,cACA5B,EAAAhT,QAAA,GAAA8U,EACA,MAAAF,IAEA,IAAA6F,GAAA,EACAlD,EAAA,EACArC,EAAA,GAEA,QAAAE,KACA,GAAAqF,GAAAzH,EAAAhT,OACA,MAAA4U,IAGA,MAAAE,EAAAI,GAAAqC,EAAAvE,EAAAhT,QACAuX,GAAA,EACArC,GAAA,EACA/B,EAAAH,EAAAuE,EAAA,GAAA,SAAAlC,GACAA,GACAT,EAAAS,GACAT,EAAA,eAGA6F,GAAA,EACAvF,GAAA,EACAuF,GAAAzH,EAAAhT,OACA4U,IAGAQ,YAUAE,EAAA,SAAA3C,GACA,MAAA,YACA,GAAAiE,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UACA,OAAAF,GAAAC,MAAA,MAAA2C,EAAA4E,MAAApD,OAAAH,MAGAnB,EAAA,SAAAX,EAAAnC,GACA,MAAA,YACA,GAAAiE,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UACA,OAAAF,GAAAC,MAAA,MAAA8lB,EAAA5jB,IAAAiC,OAAAH,MAGAlB,EAAA,SAAA/C,GACA,MAAA,YACA,GAAAiE,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UACA,OAAAF,GAAAC,MAAA,MAAA2C,EAAA8E,YAAAtD,OAAAH,MAKAhB,EAAA,SAAAC,EAAA7C,EAAAG,EAAAyB,GAIA,GAHA5B,EAAAK,EAAAL,EAAA,SAAAW,EAAAhU,GACA,OAAAyT,MAAAzT,EAAAwO,MAAAwF,KAEAiB,EAMA,CACA,GAAAkB,KACAD,GAAA7C,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAAxF,MAAA,SAAAkH,EAAA9C,GACAuD,EAAAnC,EAAAP,OAAAb,EACAqC,EAAAS,MAEA,SAAAA,GACAT,EAAAS,EAAAS,SAbAD,GAAA7C,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAAxF,MAAA,SAAAkH,GACAT,EAAAS,OAeAE,GAAAwF,IAAAzF,EAAAM,GACAL,EAAAyF,UAAAtF,EAAAE,GACAL,EAAA0F,SAAA,SAAAjI,EAAA8B,EAAA3B,EAAAyB,GACA,MAAA+jB,GAAA7jB,GAAA9B,EAAAG,EAAAyB,GAGA,IAAA+jB,GAAA,SAAA7jB,GACA,MAAAW,GAAAX,EAAAc,GAKAL,GAAA6F,OAAA,SAAApI,EAAAU,EAAAP,EAAAyB,GACAW,EAAA8E,WAAArH,EAAA,SAAAW,EAAAiB,GACAzB,EAAAO,EAAAC,EAAA,SAAA0B,EAAA9C,GACAmB,EAAAnB,EACAqC,EAAAS,MAEA,SAAAA,GACAT,EAAAS,EAAA3B,MAIA6B,EAAA2F,OAAA3F,EAAA6F,OAEA7F,EAAA4F,MAAA5F,EAAA6F,OAEA7F,EAAA+F,YAAA,SAAAtI,EAAAU,EAAAP,EAAAyB,GACA,GAAA2G,GAAAlI,EAAAL,EAAA,SAAAW,GACA,MAAAA,KACA6H,SACAjG,GAAA6F,OAAAG,EAAA7H,EAAAP,EAAAyB,IAGAW,EAAA8F,MAAA9F,EAAA+F,WAEA,IAAAvF,GAAA,SAAAF,EAAA7C,EAAAG,EAAAyB,GACA,GAAAkB,KACA9C,GAAAK,EAAAL,EAAA,SAAAW,EAAAhU,GACA,OAAAyT,MAAAzT,EAAAwO,MAAAwF,KAEAkC,EAAA7C,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAAxF,MAAA,SAAAoE,GACAA,GACAuD,EAAAnM,KAAAgK,GAEAiB,OAEA,SAAAS,GACAT,EAAAvB,EAAAyC,EAAAE,KAAA,SAAAvW,EAAAuE,GACA,MAAAvE,GAAA2T,MAAApP,EAAAoP,QACA,SAAAO,GACA,MAAAA,GAAAxF,WAIAoH,GAAAoG,OAAArG,EAAAS,GACAR,EAAAwG,aAAArG,EAAAK,GAEAR,EAAAmG,OAAAnG,EAAAoG,OACApG,EAAAuG,aAAAvG,EAAAwG,YAEA,IAAA9F,GAAA,SAAAJ,EAAA7C,EAAAG,EAAAyB,GACA,GAAAkB,KACA9C,GAAAK,EAAAL,EAAA,SAAAW,EAAAhU,GACA,OAAAyT,MAAAzT,EAAAwO,MAAAwF,KAEAkC,EAAA7C,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAAxF,MAAA,SAAAoE,GACAA,GACAuD,EAAAnM,KAAAgK,GAEAiB,OAEA,SAAAS,GACAT,EAAAvB,EAAAyC,EAAAE,KAAA,SAAAvW,EAAAuE,GACA,MAAAvE,GAAA2T,MAAApP,EAAAoP,QACA,SAAAO,GACA,MAAAA,GAAAxF,WAIAoH,GAAAyG,OAAA1G,EAAAW,GACAV,EAAA2G,aAAAxG,EAAAO,EAEA,IAAA2iB,GAAA,SAAA/iB,EAAA7C,EAAAG,EAAA0lB,GACAhjB,EAAA7C,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAA,SAAAL,GACAA,GACAulB,EAAAllB,GACAklB,EAAA,cAGAjkB,OAGA,SAAAS,GACAwjB,MAGAtjB,GAAAkH,OAAAnH,EAAAsjB,GACArjB,EAAAmH,aAAAhH,EAAAkjB,GAEArjB,EAAA6G,KAAA,SAAApJ,EAAAG,EAAA0lB,GACAtjB,EAAA4E,KAAAnH,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAA,SAAApB,GACAA,IACAsmB,GAAA,GACAA,EAAA,cAEAjkB,OAEA,SAAAS,GACAwjB,GAAA,MAIAtjB,EAAA4G,IAAA5G,EAAA6G,KAEA7G,EAAAgH,MAAA,SAAAvJ,EAAAG,EAAA0lB,GACAtjB,EAAA4E,KAAAnH,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAA,SAAApB,GACAA,IACAsmB,GAAA,GACAA,EAAA,cAEAjkB,OAEA,SAAAS,GACAwjB,GAAA,MAIAtjB,EAAA+G,IAAA/G,EAAAgH,MAEAhH,EAAAqH,OAAA,SAAA5J,EAAAG,EAAAyB,GACAW,EAAAwF,IAAA/H,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAA,SAAA0B,EAAA2H,GACA3H,EACAT,EAAAS,GAGAT,EAAA,MAAAzG,MAAAwF,EAAAqJ,SAAAA,OAGA,SAAA3H,EAAAS,GACA,GAAAT,EACA,MAAAT,GAAAS,EAGA,IAAA1C,GAAA,SAAAmK,EAAAC,GACA,GAAAtd,GAAAqd,EAAAE,SAAAhZ,EAAA+Y,EAAAC,QACA,OAAAhZ,GAAAvE,EAAA,GAAAA,EAAAuE,EAAA,EAAA,EAEA4Q,GAAA,KAAAvB,EAAAyC,EAAAE,KAAArD,GAAA,SAAAgB,GACA,MAAAA,GAAAxF,YAMAoH,EAAA0H,KAAA,SAAAvG,EAAA9B,GACAA,EAAAA,GAAA,YACA,IAAApG,GAAAsF,EAAA4C,GACA6G,EAAA/O,EAAAxO,MACA,KAAAud,EACA,MAAA3I,IAGA,IAAAkB,MAEAqH,KACAD,EAAA,SAAAvK,GACAwK,EAAAxF,QAAAhF,IAEAyK,EAAA,SAAAzK,GACA,IAAA,GAAAhT,GAAA,EAAAA,EAAAwd,EAAAnd,OAAAL,GAAA,EACA,GAAAwd,EAAAxd,KAAAgT,EAEA,WADAwK,GAAAlF,OAAAtY,EAAA,IAKA2d,EAAA,WACAC,IACAkb,EAAAtb,EAAAK,MAAA,GAAA,SAAA7K,GACAA,MAIAuK,GAAA,WACA,IAAAK,EAAA,CACA,GAAAub,GAAAlkB,CAEAA,GAAA,aAEAkkB,EAAA,KAAAhjB,MAIA2iB,EAAAjqB,EAAA,SAAAoL,GACA,GAAAjD,GAAA1D,EAAAyD,EAAAkD,IAAAlD,EAAAkD,IAAAlD,EAAAkD,IACAiE,EAAA,SAAAxI,GACA,GAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EAIA,IAHA+D,EAAA5W,QAAA,IACA4W,EAAAA,EAAA,IAEAvB,EAAA,CACA,GAAA0I,KACA0a,GAAA3kB,EAAAgC,GAAA,SAAAmI,GACAF,EAAAE,GAAAnI,EAAAmI,KAEAF,EAAAnE,GAAAhD,EACAhC,EAAAS,EAAA0I,GAEAnJ,EAAA,iBAGAkB,GAAA8D,GAAAhD,EACArB,EAAAkC,aAAA6F,IAGAK,EAAAhH,EAAA6G,MAAA,EAAAhJ,KAAAygB,IAAAte,EAAA3W,OAAA,QACA0d,EAAA,WACA,MAAAjK,GAAAkK,EAAA,SAAAle,EAAAkU,GACA,MAAAlU,IAAAqW,EAAA+D,eAAAlG,KACA,KAAAmC,EAAA+D,eAAAD,GAEA,IAAA8D,IACA/G,EAAAA,EAAA3W,OAAA,GAAA6d,EAAA/H,OAEA,CACA,GAAA8H,GAAA,WACAF,MACAN,EAAAQ,GACAjH,EAAAA,EAAA3W,OAAA,GAAA6d,EAAA/H,IAGAoH,GAAAU,OAKArI,EAAA2I,MAAA,SAAAC,EAAAxH,EAAA/B,GACA,GAAA2J,GAAA,EACAW,IAEA,mBAAAf,KACAvJ,EAAA+B,EACAA,EAAAwH,EACAA,EAAAI,GAGAJ,EAAAG,SAAAH,EAAA,KAAAI,CACA,IAAAG,GAAA,SAAAC,EAAAC,GAQA,IAPA,GAAAC,GAAA,SAAAlI,EAAAmI,GACA,MAAA,UAAAC,GACApI,EAAA,SAAAtB,EAAA/B,GACAyL,GAAA1J,GAAAyJ,GAAAzJ,IAAAA,EAAA/B,OAAAA,KACAsL,KAGAT,GACAe,EAAAvV,KAAAkV,EAAAlI,IAAAwH,GAAA,IAEA5I,GAAA4J,OAAAD,EAAA,SAAAjK,EAAA3T,GACAA,EAAAA,EAAAA,EAAAtB,OAAA,IACA2e,GAAA/J,GAAAtT,EAAA+T,IAAA/T,EAAAgS,UAIA,OAAAsB,GAAA8J,IAAAA,GAGAnJ,EAAA6J,UAAA,SAAA1I,EAAA9B,GAEA,GADAA,EAAAA,GAAA,cACA3B,EAAAyD,GAAA,CACA,GAAArB,GAAA,GAAAzV,OAAA,4DACA,OAAAgV,GAAAS,GAEA,IAAAqB,EAAA1W,OACA,MAAA4U,IAEA,IAAAyK,GAAA,SAAAlM,GACA,MAAA,UAAAkC,GACA,GAAAA,EACAT,EAAAhC,MAAA,KAAAC,WACA+B,EAAA,iBAEA,CACA,GAAAgC,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,GACAyM,EAAAnM,EAAAmM,MACAA,GACA1I,EAAAjN,KAAA0V,EAAAC,IAGA1I,EAAAjN,KAAAiL,GAEAW,EAAAkC,aAAA,WACAtE,EAAAP,MAAA,KAAAgE,OAKAyI,GAAA9J,EAAApC,SAAAuD,MAGA,IAAAD,GAAA,SAAAZ,EAAAa,EAAA9B,GAEA,GADAA,EAAAA,GAAA,aACA3B,EAAAyD,GACAb,EAAAkF,IAAArE,EAAA,SAAA/D,EAAAiC,GACAjC,GACAA,EAAA,SAAA0C,GACA,GAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA+D,GAAA5W,QAAA,IACA4W,EAAAA,EAAA,IAEAhC,EAAA7U,KAAA,KAAAsV,EAAAuB,MAGAhC,OAEA,CACA,GAAAkB,KACAD,GAAAsE,KAAArG,EAAA4C,GAAA,SAAAkD,EAAAhF,GACA8B,EAAAkD,GAAA,SAAAvE,GACA,GAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA+D,GAAA5W,QAAA,IACA4W,EAAAA,EAAA,IAEAd,EAAA8D,GAAAhD,EACAhC,EAAAS,MAEA,SAAAA,GACAT,EAAAS,EAAAS,MAKAP,GAAAgK,SAAA,SAAA7I,EAAA9B,GACA6B,GAAAsE,IAAAxF,EAAAwF,IAAAZ,KAAA5E,EAAA4E,MAAAzD,EAAA9B,IAGAW,EAAAiK,cAAA,SAAA9I,EAAA5B,EAAAF,GACA6B,GAAAsE,IAAA4d,EAAA7jB,GAAAqF,KAAAue,EAAA5jB,IAAA4B,EAAA9B,IAGAW,EAAA4J,OAAA,SAAAzI,EAAA9B,GAEA,GADAA,EAAAA,GAAA,aACA3B,EAAAyD,GACAnB,EAAAyF,UAAAtE,EAAA,SAAA/D,EAAAiC,GACAjC,GACAA,EAAA,SAAA0C,GACA,GAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA+D,GAAA5W,QAAA,IACA4W,EAAAA,EAAA,IAEAhC,EAAA7U,KAAA,KAAAsV,EAAAuB,MAGAhC,OAEA,CACA,GAAAkB,KACAP,GAAA8E,WAAAvG,EAAA4C,GAAA,SAAAkD,EAAAhF,GACA8B,EAAAkD,GAAA,SAAAvE,GACA,GAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA+D,GAAA5W,QAAA,IACA4W,EAAAA,EAAA,IAEAd,EAAA8D,GAAAhD,EACAhC,EAAAS,MAEA,SAAAA,GACAT,EAAAS,EAAAS,OAKAP,EAAApC,SAAA,SAAAuD,GACA,GAAA+I,GAAA,SAAArM,GACA,GAAAT,GAAA,WAIA,MAHA+D,GAAA1W,QACA0W,EAAAtD,GAAAR,MAAA,KAAAC,WAEAF,EAAA2M,OAKA,OAHA3M,GAAA2M,KAAA,WACA,MAAAlM,GAAAsD,EAAA1W,OAAA,EAAAyf,EAAArM,EAAA,GAAA,MAEAT,EAEA,OAAA8M,GAAA,IAGAlK,EAAA3C,MAAA,SAAAD,GACA,GAAAiE,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA,OAAA,YACA,MAAAF,GAAAC,MACA,KAAAgE,EAAAG,OAAAjM,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,cAKA,IAAAgE,GAAA,SAAAhB,EAAA7C,EAAAL,EAAAiC,GACA,GAAAvV,KACAwW,GAAA7C,EAAA,SAAAW,EAAAuC,GACAvD,EAAAgB,EAAA,SAAA0B,EAAAyB,GACAzX,EAAAA,EAAA0X,OAAAD,OACAZ,EAAAb,MAEA,SAAAA,GACAT,EAAAS,EAAAhW,KAGAkW,GAAAwB,OAAAzB,EAAAuB,GACAtB,EAAAoK,aAAAjK,EAAAmB,GAEAtB,EAAAqK,OAAA,SAAAC,EAAA1M,EAAAyB,GACAiL,IACA1M,EAAA,SAAAkC,GACA,MAAAA,GACAT,EAAAS,OAEAE,GAAAqK,OAAAC,EAAA1M,EAAAyB,KAIAA,KAIAW,EAAAuK,SAAA,SAAA3M,EAAA0M,EAAAjL,GACAzB,EAAA,SAAAkC,GACA,GAAAA,EACA,MAAAT,GAAAS,EAEA,IAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACAgN,GAAAjN,MAAA,KAAAgE,GACArB,EAAAuK,SAAA3M,EAAA0M,EAAAjL,GAGAA,OAKAW,EAAAyK,MAAA,SAAAH,EAAA1M,EAAAyB,GACAiL,IASAjL,IARAzB,EAAA,SAAAkC,GACA,MAAAA,GACAT,EAAAS,OAEAE,GAAAyK,MAAAH,EAAA1M,EAAAyB,MAQAW,EAAA0K,QAAA,SAAA9M,EAAA0M,EAAAjL,GACAzB,EAAA,SAAAkC,GACA,GAAAA,EACA,MAAAT,GAAAS,EAEA,IAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACAgN,GAAAjN,MAAA,KAAAgE,GAIAhC,IAHAW,EAAA0K,QAAA9M,EAAA0M,EAAAjL,MAQAW,EAAA8K,MAAA,SAAApJ,EAAAC,GAIA,QAAAE,GAAAC,EAAA/V,EAAAgW,EAAA1C,GAOA,MANAyC,GAAAE,UACAF,EAAAE,SAAA,GAEAtE,EAAA3R,KACAA,GAAAA,IAEA,GAAAA,EAAAtB,OAEAuV,EAAAkC,aAAA,WACAJ,EAAAK,OACAL,EAAAK,cAIA+gB,GAAAn3B,EAAA,SAAAqV,GACA,GAAA1C,IACA3S,KAAAqV,EACA/B,SAAA,kBAAAA,GAAAA,EAAA,KAGA0C,GACAD,EAAAX,MAAAiB,QAAA1D,GAEAoD,EAAAX,MAAA/M,KAAAsK,GAGAoD,EAAAO,WAAAP,EAAAX,MAAA1W,SAAAqX,EAAAH,aACAG,EAAAO,YAEArC,EAAAkC,aAAAJ,EAAAjF,WAjCAlL,SAAAgQ,IACAA,EAAA,EAoCA,IAAAY,GAAA,EACAT,GACAX,SACAQ,YAAAA,EACAU,UAAA,KACAM,MAAA,KACAR,MAAA,KACAH,SAAA,EACAY,QAAA,EACAxO,KAAA,SAAArI,EAAAsT,GACAwC,EAAAC,EAAA/V,GAAA,EAAAsT,IAEAwD,KAAA,WACAf,EAAAK,MAAA,KACAL,EAAAX,UAEAiB,QAAA,SAAArW,EAAAsT,GACAwC,EAAAC,EAAA/V,GAAA,EAAAsT,IAEAxC,QAAA,WACA,IAAAiF,EAAAc,QAAAL,EAAAT,EAAAH,aAAAG,EAAAX,MAAA1W,OAAA,CACA,GAAA2W,GAAAU,EAAAX,MAAAia,OACAtZ,GAAAa,OAAA,IAAAb,EAAAX,MAAA1W,QACAqX,EAAAa,QAEAJ,GAAA,CACA,IAAAwH,GAAA,WACAxH,GAAA,EACAnB,EAAA/B,UACA+B,EAAA/B,SAAAhC,MAAA+D,EAAA9D,WAEAwE,EAAAK,OAAAL,EAAAX,MAAA1W,OAAA8X,IAAA,GACAT,EAAAK,QAEAL,EAAAjF,WAEA8D,EAAAxD,EAAA4M,EACArI,GAAAN,EAAArV,KAAA4U,KAGAlW,OAAA,WACA,MAAAqX,GAAAX,MAAA1W,QAEAkV,QAAA,WACA,MAAA4C,IAEAN,KAAA,WACA,MAAAH,GAAAX,MAAA1W,OAAA8X,IAAA,GAEAO,MAAA,WACAhB,EAAAc,UAAA,IACAd,EAAAc,QAAA,IAEAG,OAAA,WACA,GAAAjB,EAAAc,UAAA,EAAA,CACAd,EAAAc,QAAA,CAGA,KAAA,GAAAM,GAAA,EAAAA,GAAApB,EAAAH,YAAAuB,IACAlD,EAAAkC,aAAAJ,EAAAjF,WAIA,OAAAiF,IAGA9B,EAAAgL,cAAA,SAAAtJ,EAAAC,GAEA,QAAAsJ,GAAA/gB,EAAAuE,GACA,MAAAvE,GAAAghB,SAAAzc,EAAAyc,SAGA,QAAAC,GAAAC,EAAA1M,EAAA2M,GAGA,IAFA,GAAAC,GAAA,GACAC,EAAAH,EAAA3gB,OAAA,EACA8gB,EAAAD,GAAA,CACA,GAAAE,GAAAF,GAAAC,EAAAD,EAAA,IAAA,EACAD,GAAA3M,EAAA0M,EAAAI,KAAA,EACAF,EAAAE,EAEAD,EAAAC,EAAA,EAGA,MAAAF,GAGA,QAAAzJ,GAAAC,EAAA/V,EAAAmf,EAAA7L,GAOA,MANAyC,GAAAE,UACAF,EAAAE,SAAA,GAEAtE,EAAA3R,KACAA,GAAAA,IAEA,GAAAA,EAAAtB,OAEAuV,EAAAkC,aAAA,WACAJ,EAAAK,OACAL,EAAAK,cAIA+gB,GAAAn3B,EAAA,SAAAqV,GACA,GAAA1C,IACA3S,KAAAqV,EACA8J,SAAAA,EACA7L,SAAA,kBAAAA,GAAAA,EAAA,KAGAyC,GAAAX,MAAAuB,OAAAyI,EAAArJ,EAAAX,MAAAzC,EAAAuM,GAAA,EAAA,EAAAvM,GAEAoD,EAAAO,WAAAP,EAAAX,MAAA1W,SAAAqX,EAAAH,aACAG,EAAAO,YAEArC,EAAAkC,aAAAJ,EAAAjF,WAKA,GAAAiF,GAAA9B,EAAA8K,MAAApJ,EAAAC,EAUA,OAPAG,GAAA1N,KAAA,SAAArI,EAAAmf,EAAA7L,GACAwC,EAAAC,EAAA/V,EAAAmf,EAAA7L,UAIAyC,GAAAM,QAEAN,GAGA9B,EAAAyL,MAAA,SAAA/J,EAAAE,GACA,GAAA4hB,IAAA,EACAriB,KAEAsK,GACAtK,MAAAA,EACAS,QAAAA,EACAS,UAAA,KACAM,MAAA,KACAR,MAAA,KACAshB,SAAA,EACArvB,KAAA,SAAArI,EAAAsT,GACA3B,EAAA3R,KACAA,GAAAA,IAEAm3B,EAAAn3B,EAAA,SAAAqV,GACAD,EAAA/M,MACArI,KAAAqV,EACA/B,SAAA,kBAAAA,GAAAA,EAAA,OAEAoM,EAAAgY,SAAA,EACAhY,EAAApJ,WAAAlB,EAAA1W,SAAAmX,GACA6J,EAAApJ,cAGArC,EAAAkC,aAAAuJ,EAAA5O,UAEAA,QAAA,QAAAA,KACA,IAAA2mB,EAAA,CACA,GAAA,IAAAriB,EAAA1W,OAGA,MAFAghB,GAAAtJ,QAAAsJ,EAAAgY,SAAAhY,EAAAtJ,aACAsJ,EAAAgY,SAAA,EAIA,IAAAC,GAAA,gBAAA9hB,GACAT,EAAAuB,OAAA,EAAAd,GACAT,EAAAuB,OAAA,EAAAvB,EAAA1W,QAEAk5B,EAAA7lB,EAAA4lB,EAAA,SAAAtiB,GACA,MAAAA,GAAArV,MAGA0f,GAAA9I,OAAA8I,EAAA9I,QACA6gB,GAAA,EACA9hB,EAAAiiB,EAAA,WACAH,GAAA,CAEA,IAAAniB,GAAA/D,SACA4lB,GAAAQ,EAAA,SAAA33B,GACAA,EAAAsT,UACAtT,EAAAsT,SAAAhC,MAAA,KAAAgE,KAIAxE,QAGApS,OAAA,WACA,MAAA0W,GAAA1W,QAEAkV,QAAA,WACA,MAAA6jB,IAGA,OAAA/X,GAGA,IAAAtI,GAAA,SAAAlL,GACA,MAAA,UAAAmF,GACA,GAAAiE,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACAF,GAAAC,MAAA,KAAAgE,EAAAG,QAAA,SAAA1B,GACA,GAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA,oBAAAjH,WACAyJ,EACAzJ,QAAAC,OACAD,QAAAC,MAAAwJ,GAGAzJ,QAAA4B,IACAirB,EAAA7hB,EAAA,SAAAjD,GACA/H,QAAA4B,GAAAmG,WAOA4B,GAAA7I,IAAAgM,EAAA,OACAnD,EAAA0L,IAAAvI,EAAA,OAKAnD,EAAA2L,QAAA,SAAAvO,EAAAwO,GACA,GAAAzN,MACA0N,IACAD,GAAAA,GAAA,SAAAxN,GACA,MAAAA,GAEA,IAAA0N,GAAA,WACA,GAAAzK,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,WACA+B,EAAAgC,EAAAqC,MACAlF,EAAAoN,EAAAvO,MAAA,KAAAgE,EACA7C,KAAAL,GACA6B,EAAA0E,SAAA,WACArF,EAAAhC,MAAA,KAAAc,EAAAK,MAGAA,IAAAqN,GACAA,EAAArN,GAAApK,KAAAiL,IAGAwM,EAAArN,IAAAa,GACAjC,EAAAC,MAAA,KAAAgE,EAAAG,QAAA,WACArD,EAAAK,GAAAlB,SACA,IAAAwE,GAAA+J,EAAArN,SACAqN,GAAArN,EACA,KAAA,GAAApU,GAAA,EAAAG,EAAAuX,EAAArX,OAAAF,EAAAH,EAAAA,IACA0X,EAAA1X,GAAAiT,MAAA,KAAAC,gBAOA,OAFAwO,GAAA3N,KAAAA,EACA2N,EAAAC,WAAA3O,EACA0O,GAGA9L,EAAAgM,UAAA,SAAA5O,GACA,MAAA,YACA,OAAAA,EAAA2O,YAAA3O,GAAAC,MAAA,KAAAC,aAIA0C,EAAA4I,MAAA,SAAA3K,EAAAL,EAAAyB,GAEA,IAAA,GADAuS,MACAxnB,EAAA,EAAA6T,EAAA7T,EAAAA,IACAwnB,EAAAxd,KAAAhK,EAEA,OAAA4V,GAAAwF,IAAAoM,EAAAhU,EAAAyB,IAGAW,EAAAiM,YAAA,SAAAhO,EAAAL,EAAAyB,GAEA,IAAA,GADAuS,MACAxnB,EAAA,EAAA6T,EAAA7T,EAAAA,IACAwnB,EAAAxd,KAAAhK,EAEA,OAAA4V,GAAAyF,UAAAmM,EAAAhU,EAAAyB,IAGAW,EAAAmM,IAAA,WACA,GAAA5I,GAAAjG,SACA,OAAA,YACA,GAAAmG,GAAAha,KACA4X,EAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,WACA+B,EAAAgC,EAAAqC,KACA1D,GAAA6F,OAAAtC,EAAAlC,EAAA,SAAA+K,EAAAhP,EAAAuD,GACAvD,EAAAC,MAAAoG,EAAA2I,EAAA5K,QAAA,WACA,GAAA1B,GAAAxC,UAAA,GACA+O,EAAA9W,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACAqD,GAAAb,EAAAuM,QAGA,SAAAvM,EAAAS,GACAlB,EAAAhC,MAAAoG,GAAA3D,GAAA0B,OAAAjB,QAKAP,EAAAsM,QAAA,WACA,MAAAtM,GAAAmM,IAAA9O,MAAA,KAAA9H,MAAAjJ,UAAA2Z,QAAAzb,KAAA8S,YAGA,IAAAgG,GAAA,SAAAhD,EAAAiD,GACA,GAAAC,GAAA,WACA,GAAAC,GAAAha,KACA4X,EAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,WACA+B,EAAAgC,EAAAqC,KACA,OAAApD,GAAAiD,EAAA,SAAAnG,EAAAuD,GACAvD,EAAAC,MAAAoG,EAAApC,EAAAG,QAAAb,MAEAtB,GAEA,IAAA/B,UAAA7S,OAAA,EAAA,CACA,GAAA4W,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA,OAAAkG,GAAAnG,MAAA5T,KAAA4X,GAGA,MAAAmC,GAGAxD,GAAAuM,UAAAxM,EAAAuD,GACAtD,EAAAwM,gBAAArM,EAAAmD,GAEAtD,EAAAyM,QAAA,SAAArP,EAAAiC,GACA,QAAA0K,GAAAjK,GACA,GAAAA,EAAA,CACA,GAAAT,EACA,MAAAA,GAAAS,EAEA,MAAAA,GAEA1C,EAAA2M,GAEAA,KAIA,mBAAA7gB,IAAAA,EAAAD,QACAC,EAAAD,QAAA+W,EAGA,mBAAA7W,IAAAA,EAAAC,IACAD,KAAA,WACA,MAAA6W,KAKA+D,EAAA/D,MAAAA,OAKAxV,KAAAf,KAAAU,EAAA,eAEA6iB,SAAA,KAAA4W,IAAA,SAAAz5B,EAAAjB,EAAAD,GAaA,QAAA46B,GAAAC,EAAAniB,GACA8f,EAAAj3B,KAAAf,MAEAkY,EAAAA,GAAA,GAOAlY,KAAAq6B,QAAAA,GAAA,GAOAr6B,KAAAs6B,SAAA,EAOAt6B,KAAAu6B,SAAA,EAOAv6B,KAAAw6B,eAAA,EAOAx6B,KAAAy6B,qBAOAz6B,KAAA06B,oBAQA16B,KAAA26B,mBAAA36B,KAAA46B,cAAA53B,KAAAhD,MAQAA,KAAA66B,aAAA76B,KAAA86B,QAAA93B,KAAAhD,MAQAA,KAAA+6B,WAQA/6B,KAAAg7B,WAAA,EAQAh7B,KAAAgY,OAAAzB,EAAA8K,MAAArhB,KAAA26B,mBAAAziB,GAOAlY,KAAAi7B,aAxGA,GAAA1kB,GAAA7V,EAAA,SACAw6B,EAAAx6B,EAAA,OACAy6B,EAAAz6B,EAAA,cACAs3B,EAAAt3B,EAAA,gBA2IA05B,GAAAv3B,UAAA0M,OAAA/L,OAAAw0B,EAAAn1B,WACAu3B,EAAAv3B,UAAAmH,YAAAowB,EACA36B,EAAAD,QAAA46B,EAqDAA,EAAAv3B,UAAAu4B,IAAAhB,EAAAv3B,UAAAw4B,QAAA,SAAA7sB,EAAAsf,EAAAjjB,EAAAqM,GAEA,GAAApL,MAAA4O,QAAAlM,GAAA,CACA,IAAA,GAAA7N,GAAA,EAAAA,EAAA6N,EAAAxN,SAAAL,EACAX,KAAAo7B,IAAA5sB,EAAA7N,GAGA,OAAAX,MAmBA,GAfA,gBAAAwO,KACA0I,EAAA4W,GAAAtf,EAAAoH,UAAApH,EAAA8sB,WACAzwB,EAAA2D,EACAsf,EAAAtf,EAAAsf,IACAtf,EAAAA,EAAAA,MAAAA,EAAAuG,KAAAvG,EAAAsf,KAIA,gBAAAA,KACA5W,EAAArM,EACAA,EAAAijB,EACAA,EAAAtf,GAIA,gBAAAsf,GACA,KAAA,IAAAltB,OAAA,2CAUA,IANA,kBAAAiK,KACAqM,EAAArM,EACAA,EAAA,MAIA7K,KAAAi7B,UAAAzsB,GACA,KAAA,IAAA5N,OAAA,uBAAA4N,EAAA,oBA0BA,OAtBAsf,GAAA9tB,KAAAu7B,eAAAzN,GAGA9tB,KAAAi7B,UAAAzsB,GAAA,GAAA2sB,GAAA3sB,EAAAsf,EAAAjjB,GAEA,kBAAAqM,IACAlX,KAAAi7B,UAAAzsB,GAAAyY,KAAA,kBAAA/P,GAGAlX,KAAAg7B,aAGAh7B,KAAAgY,OAAAO,SACAvY,KAAAgY,OAAArN,KAAA3K,KAAAi7B,UAAAzsB,IACAxO,KAAAw6B,gBAAA,IAAAx6B,KAAAs6B,WAAAt6B,KAAAgY,OAAAhX,SAAAhB,KAAAgY,OAAA9B,aAIAlW,KAAA+6B,QAAApwB,KAAA3K,KAAAi7B,UAAAzsB,IACAxO,KAAAw6B,eAAA,IAAAx6B,KAAA+6B,QAAA/5B,QAGAhB,MAGAo6B,EAAAv3B,UAAA04B,eAAA,SAAAzN,GACA,GAAA0N,GAAAN,EAAAtO,MAAAkB,EAGA,OAAA0N,GAAAtO,UAAA,IAAAsO,EAAA7N,SAAAxB,QAAA,MACA2B,EAKA9tB,KAAAq6B,QAAAr5B,QACAhB,KAAAq6B,QAAApQ,YAAA,OAAAjqB,KAAAq6B,QAAAr5B,OAAA,GACA,MAAA8sB,EAAApJ,OAAA,GAEA1kB,KAAAq6B,QAAA,IAAAvM,EAGA9tB,KAAAq6B,QAAAvM,GAaAsM,EAAAv3B,UAAA44B,OAAArB,EAAAv3B,UAAA64B,IAAA,SAAA/nB,GAGA,MAFA3T,MAAAy6B,kBAAA9vB,KAAAgJ,GAEA3T,MAWAo6B,EAAAv3B,UAAA84B,MAAAvB,EAAAv3B,UAAA+4B,IAAA,SAAAjoB,GAGA,MAFA3T,MAAA06B,iBAAA/vB,KAAAgJ,GAEA3T,MAQAo6B,EAAAv3B,UAAAg5B,MAAA,WAGA77B,KAAAs6B,SAAA,EAEAt6B,KAAAu6B,SAAA,EAEAv6B,KAAAw6B,eAAA,EAKAx6B,KAAA+6B,QAAA/5B,OAAA,EAEAhB,KAAAg7B,WAAA,EAEAh7B,KAAAgY,OAAAoB,OACApZ,KAAAgY,OAAAO,SAAA,EAEAvY,KAAAi7B,cAUAb,EAAAv3B,UAAAi5B,KAAA,SAAA5kB,GAOA,GALA,kBAAAA,IACAlX,KAAAinB,KAAA,WAAA/P,GAIAlX,KAAAgY,OAAAO,QACA,MAAAvY,KAIAA,MAAAonB,KAAA,QAAApnB,KAGA,KAAA,GAAAW,GAAA,EAAAA,EAAAX,KAAA+6B,QAAA/5B,SAAAL,EACAX,KAAAgY,OAAArN,KAAA3K,KAAA+6B,QAAAp6B,GAMA,OAFAX,MAAA+6B,QAAA/5B,OAAA,EAEAhB,MASAo6B,EAAAv3B,UAAA+3B,cAAA,SAAAmB,EAAAC,GACA,GAAAj8B,GAAAC,IAEA+7B,GAAAE,SAAAD,EAEAh8B,KAAAk8B,eAAAH,EAAA/7B,KAAAy6B,kBAAA,WAGAsB,EAAAD,KAAA/7B,EAAA86B,iBAUAT,EAAAv3B,UAAAs5B,YAAA,WACAn8B,KAAAonB,KAAA,WAAApnB,KAAAA,KAAAi7B,YAWAb,EAAAv3B,UAAAi4B,QAAA,SAAAiB,GACA/7B,KAAAs6B,UAAAt6B,KAAAw6B,eAEAx6B,KAAAonB,KAAA,WAAApnB,KAAA+7B,GAGA/7B,KAAAk8B,eAAAH,EAAA/7B,KAAA06B,iBAAA,WACAqB,EAAA3U,KAAA,kBAAA2U,GAEA/7B,KAAAg7B,aAGA,IAAAh7B,KAAAg7B,aACAh7B,KAAAs6B,SAAA,IACAt6B,KAAAm8B,eAGAJ,EAAAlvB,MACA7M,KAAAonB,KAAA,QAAA2U,EAAAlvB,MAAA7M,KAAA+7B,GAGA/7B,KAAAonB,KAAA,OAAApnB,KAAA+7B,KAOAA,EAAAE,YAQA7B,EAAAv3B,UAAAq5B,eAAA,SAAAH,EAAAjiB,EAAA5C,GACA,GAAAnX,GAAAC,IAEAuW,GAAA8E,WAAAvB,EAAA,SAAAnG,EAAA2M,GACA3M,EAAA5S,KAAAhB,EAAAg8B,EAAAzb,IACApJ,EAAAlU,KAAAhD,KAAA+7B,KAGA3B,EAAAgC,UAAAjB,EAAAiB,UACAhC,EAAAiC,gBAAAlB,EAAAkB,gBACAjC,EAAAkC,kBAAAnB,EAAAmB,oBAEAC,aAAA,GAAAhmB,MAAA,GAAAimB,cAAA,GAAA1O,IAAA,KAAA2O,IAAA,SAAA/7B,EAAAjB,EAAAD,GAqBA,QAAA27B,GAAA3sB,EAAAsf,EAAAjjB,GAKA,GAJAmtB,EAAAj3B,KAAAf,MAEA6K,EAAAA,MAEA,gBAAA2D,IAAA,gBAAAsf,GACA,KAAA,IAAAltB,OAAA,8DASAZ,MAAAwO,KAAAA,EAQAxO,KAAA8tB,IAAAA,EAQA9tB,KAAA08B,UAAA,IAAA18B,KAAA8tB,IAAA3B,QAAA,SAOAnsB,KAAAsC,KAAA,KAOAtC,KAAA28B,YAAA9xB,EAAA8xB,eAAA,EAAA,YAAA9xB,EAAA8xB,YAOA38B,KAAA48B,SAAA/xB,EAAA+xB,UAAA58B,KAAA68B,qBAOA78B,KAAA88B,QAAAjyB,EAAAiyB,QAOA98B,KAAA+8B,SAAAlyB,EAAAkyB,aAQA/8B,KAAA6M,MAAA,KAQA7M,KAAAg9B,IAAA,KAQAh9B,KAAAi9B,QAAA,EAQAj9B,KAAAk9B,OAAA,EAQAl9B,KAAAm9B,SAAA,EAQAn9B,KAAAo9B,SAAA,EAQAp9B,KAAAq9B,SAAA,EASAr9B,KAAAi8B,SAAA,KAQAj8B,KAAAs9B,eAAAt9B,KAAAu9B,SAAAv6B,KAAAhD,MAQAA,KAAAw9B,cAAAx9B,KAAAy9B,SAAAz6B,KAAAhD,MAQAA,KAAA09B,iBAAA19B,KAAA29B,YAAA36B,KAAAhD,MAGAA,KAAA49B,iBAAA59B,KAAA69B,YAAA76B,KAAAhD,MACAA,KAAA89B,iBAAA99B,KAAA+9B,YAAA/6B,KAAAhD,MACAA,KAAAg+B,gBAAAh+B,KAAAi+B,WAAAj7B,KAAAhD,MACAA,KAAAk+B,mBAAAl+B,KAAAm+B,cAAAn7B,KAAAhD,MAyXA,QAAAo+B,GAAApB,GACA,MAAAA,GAAAviB,WAAAxL,QAAA,UAAA,IAsOA,QAAAovB,GAAAtiB,EAAA8J,EAAA7G,GACA6G,GAAA,IAAAA,EAAAsG,QAAA,OACAtG,EAAAA,EAAAyY,UAAA,IAGAzY,IAIA9J,EAAA8J,GAAA7G,GA9xBA,GAAAgZ,GAAAt3B,EAAA,iBACA69B,EAAA79B,EAAA,OAEA89B,KAAA3+B,OAAA4+B,gBAAA,mBAAA,IAAAC,iBACAC,EAAA;AA8MAxD,EAAAt4B,UAAA0M,OAAA/L,OAAAw0B,EAAAn1B,WACAs4B,EAAAt4B,UAAAmH,YAAAmxB,EACA17B,EAAAD,QAAA27B,EAOAA,EAAAt4B,UAAA06B,SAAA,WAEAv9B,KAAAsC,MAAAtC,KAAAsC,KAAAs8B,sBACA5+B,KAAAsC,KAAAs8B,oBAAA,QAAA5+B,KAAAw9B,eACAx9B,KAAAsC,KAAAs8B,oBAAA,OAAA5+B,KAAAs9B,gBACAt9B,KAAAsC,KAAAs8B,oBAAA,WAAA5+B,KAAA09B,kBACA19B,KAAAsC,KAAAs8B,oBAAA,iBAAA5+B,KAAAs9B,iBAGAt9B,KAAAg9B,MACAh9B,KAAAg9B,IAAA4B,qBACA5+B,KAAAg9B,IAAA4B,oBAAA,QAAA5+B,KAAA49B,kBACA59B,KAAAg9B,IAAA4B,oBAAA,QAAA5+B,KAAA89B,kBACA99B,KAAAg9B,IAAA4B,oBAAA,WAAA5+B,KAAA09B,kBACA19B,KAAAg9B,IAAA4B,oBAAA,OAAA5+B,KAAAg+B,mBAGAh+B,KAAAg9B,IAAA6B,QAAA,KACA7+B,KAAAg9B,IAAA8B,UAAA,KACA9+B,KAAAg9B,IAAA+B,WAAA,KACA/+B,KAAAg9B,IAAAgC,OAAA,OAIAh/B,KAAAonB,KAAA,WAAApnB,OASAm7B,EAAAt4B,UAAAi5B,KAAA,SAAA5kB,GAaA,OAZAlX,KAAAonB,KAAA,QAAApnB,MAGAkX,GACAlX,KAAAinB,KAAA,WAAA/P,IAIAlX,KAAA28B,eAAA,GAAA,gBAAA38B,MAAA28B,eACA38B,KAAA28B,YAAA38B,KAAAi/B,sBAAAj/B,KAAA8tB,MAGA9tB,KAAA48B,UACA,IAAAzB,GAAAiB,UAAA8C,MACAl/B,KAAAm/B,YACA,MAEA,KAAAhE,GAAAiB,UAAAgD,MACAp/B,KAAAq/B,aAAA,QACA,MAEA,KAAAlE,GAAAiB,UAAAkD,MACAt/B,KAAAq/B,aAAA,QACA,MAEA,KAAAlE,GAAAiB,UAAAmD,IAEA,QACAf,GAAAx+B,KAAA28B,YACA38B,KAAAw/B,WAGAx/B,KAAAy/B,aAWAtE,EAAAt4B,UAAAs8B,WAAA,WACAn/B,KAAAsC,KAAA,GAAAo9B,OAEA1/B,KAAA28B,cACA38B,KAAAsC,KAAAq6B,YAAA38B,KAAA28B,aAGA38B,KAAAsC,KAAA8K,IAAApN,KAAA8tB,IAEA9tB,KAAAm9B,SAAA,EAEAn9B,KAAAsC,KAAAq9B,iBAAA,QAAA3/B,KAAAw9B,eAAA,GACAx9B,KAAAsC,KAAAq9B,iBAAA,OAAA3/B,KAAAs9B,gBAAA,GACAt9B,KAAAsC,KAAAq9B,iBAAA,WAAA3/B,KAAA09B,kBAAA,IAQAvC,EAAAt4B,UAAAw8B,aAAA,SAAAh9B,GAQA,GAPA,UAAAA,GAAA,mBAAAu9B,OACA5/B,KAAAsC,KAAA,GAAAs9B,OAGA5/B,KAAAsC,KAAAu9B,SAAAC,cAAAz9B,GAGA,OAAArC,KAAAsC,KAGA,MAFAtC,MAAA6M,MAAA,GAAAjM,OAAA,uBAAAyB,OACArC,MAAAu9B,UAKA,IAAAwC,UAAAC,WACAhgC,KAAAsC,KAAA8K,IAAAtB,MAAA4O,QAAA1a,KAAA8tB,KAAA9tB,KAAA8tB,IAAA,GAAA9tB,KAAA8tB,QAGA,IAAAhiB,MAAA4O,QAAA1a,KAAA8tB,KACA,IAAA,GAAAntB,GAAA,EAAAA,EAAAX,KAAA8tB,IAAA9sB,SAAAL,EACAX,KAAAsC,KAAA29B,YAAAjgC,KAAAkgC,cAAA79B,EAAArC,KAAA8tB,IAAAntB,SAIAX,MAAAsC,KAAA29B,YAAAjgC,KAAAkgC,cAAA79B,EAAArC,KAAA8tB,KAIA9tB,MAAA,KAAAqC,EAAA,GAAA89B,cAAA99B,EAAAi8B,UAAA,KAAA,EAEAt+B,KAAAsC,KAAAq9B,iBAAA,QAAA3/B,KAAAw9B,eAAA,GACAx9B,KAAAsC,KAAAq9B,iBAAA,OAAA3/B,KAAAs9B,gBAAA,GACAt9B,KAAAsC,KAAAq9B,iBAAA,WAAA3/B,KAAA09B,kBAAA,GACA19B,KAAAsC,KAAAq9B,iBAAA,iBAAA3/B,KAAAs9B,gBAAA,GAEAt9B,KAAAsC,KAAAw5B,QAQAX,EAAAt4B,UAAA48B,SAAA,WAEA,gBAAAz/B,MAAA88B,UACA98B,KAAA88B,QAAA98B,KAAAogC,oBAGA,IAAApD,GAAAh9B,KAAAg9B,IAAA,GAAA0B,eAGA1B,GAAAqD,KAAA,MAAArgC,KAAA8tB,KAAA,GAIA9tB,KAAA88B,UAAA3B,EAAAmB,kBAAAgE,MAAAtgC,KAAA88B,UAAA3B,EAAAmB,kBAAAiE,SACAvD,EAAAwD,aAAArF,EAAAmB,kBAAAmE,KAGAzD,EAAAwD,aAAAxgC,KAAA88B,QAGAE,EAAA2C,iBAAA,QAAA3/B,KAAA49B,kBAAA,GACAZ,EAAA2C,iBAAA,QAAA3/B,KAAA89B,kBAAA,GACAd,EAAA2C,iBAAA,WAAA3/B,KAAA09B,kBAAA,GACAV,EAAA2C,iBAAA,OAAA3/B,KAAAg+B,iBAAA,GAEAhB,EAAA0D,QAQAvF,EAAAt4B,UAAA28B,SAAA,WAEA,gBAAAx/B,MAAA88B,UACA98B,KAAA88B,QAAA98B,KAAAogC,oBAGA,IAAAO,GAAA3gC,KAAAg9B,IAAA,GAAAyB,eAKAkC,GAAAta,QAAA,IAEAsa,EAAA9B,QAAA7+B,KAAA49B,iBACA+C,EAAA7B,UAAA9+B,KAAAk+B,mBACAyC,EAAA5B,WAAA/+B,KAAA09B,iBACAiD,EAAA3B,OAAAh/B,KAAAg+B,gBAEA2C,EAAAN,KAAA,MAAArgC,KAAA8tB,KAAA,GAKA9S,WAAA,WACA2lB,EAAAD,QACA,IAWAvF,EAAAt4B,UAAAq9B,cAAA,SAAA79B,EAAAyrB,EAAA8S,GACAA,IACAA,EAAAv+B,EAAA,IAAAyrB,EAAA/I,OAAA+I,EAAA7D,YAAA,KAAA,GAGA,IAAAziB,GAAAq4B,SAAAC,cAAA,SAKA,OAHAt4B,GAAA4F,IAAA0gB,EACAtmB,EAAAnF,KAAAu+B,EAEAp5B,GASA2zB,EAAAt4B,UAAA46B,SAAA,SAAAtF,GACAn4B,KAAA6M,MAAA,GAAAjM,OAAA,gCAAAu3B,EAAAiB,OAAAyH,UACA7gC,KAAAu9B,YAUApC,EAAAt4B,UAAA86B,YAAA,SAAAxF,GACAA,GAAAA,EAAA2I,kBACA9gC,KAAAonB,KAAA,WAAApnB,KAAAm4B,EAAA4I,OAAA5I,EAAA6I,QAUA7F,EAAAt4B,UAAAg7B,YAAA,WACA79B,KAAA6M,MAAA,GAAAjM,OACAw9B,EAAAp+B,KAAAg9B,KAAA,4BACAh9B,KAAAg9B,IAAAiE,OAAA,YAAAjhC,KAAAg9B,IAAAkE,WAAA,KAGAlhC,KAAAu9B,YASApC,EAAAt4B,UAAAk7B,YAAA,WACA/9B,KAAA6M,MAAA,GAAAjM,OAAAw9B,EAAAp+B,KAAAg9B,KAAA,qCACAh9B,KAAAu9B,YASApC,EAAAt4B,UAAAs7B,cAAA,WACAn+B,KAAA6M,MAAA,GAAAjM,OAAAw9B,EAAAp+B,KAAAg9B,KAAA,uBACAh9B,KAAAu9B,YASApC,EAAAt4B,UAAAo7B,WAAA,WACA,GAAAjB,GAAAh9B,KAAAg9B,IACAiE,EAAA/4B,SAAA80B,EAAAiE,OAAAjE,EAAAiE,OAAA,GAGA,IAAA,MAAAA,GAAA,MAAAA,GAAA,IAAAA,GAAAjE,EAAAmE,aAAAngC,OAAA,EAEA,GAAAhB,KAAA88B,UAAA3B,EAAAmB,kBAAAmE,KACAzgC,KAAAsC,KAAA06B,EAAAmE,iBAGA,IAAAnhC,KAAA88B,UAAA3B,EAAAmB,kBAAAgE,KACA,IACAtgC,KAAAsC,KAAAg+B,KAAA1T,MAAAoQ,EAAAmE,cACAnhC,KAAAi9B,QAAA,EACA,MAAA/8B,GACAF,KAAA6M,MAAA,GAAAjM,OAAA,qCAAAV,OAIA,IAAAF,KAAA88B,UAAA3B,EAAAmB,kBAAAiE,SACA,IACA,GAAA1gC,OAAAuhC,UAAA,CACA,GAAAC,GAAA,GAAAD,UACAphC,MAAAsC,KAAA++B,EAAAC,gBAAAtE,EAAAmE,aAAA,gBAEA,CACA,GAAAI,GAAA1B,SAAAC,cAAA,MACAyB,GAAAC,UAAAxE,EAAAmE,aACAnhC,KAAAsC,KAAAi/B,EAEAvhC,KAAAk9B,OAAA,EACA,MAAAh9B,GACAF,KAAA6M,MAAA,GAAAjM,OAAA,oCAAAV,OAKAF,MAAAsC,KAAA06B,EAAAyE,UAAAzE,EAAAmE,iBAIAnhC,MAAA6M,MAAA,GAAAjM,OAAA,IAAAo8B,EAAAiE,OAAA,IAAAjE,EAAAkE,WAAA,IAAAlE,EAAA0E,YAGA1hC,MAAAu9B,YAiBApC,EAAAt4B,UAAAo8B,sBAAA,SAAAnR,EAAA6T,GAEA,GAAA,IAAA7T,EAAA3B,QAAA,SACA,MAAA,EAIAwV,GAAAA,GAAA9hC,OAAAoI,SAEA02B,IACAA,EAAAkB,SAAAC,cAAA,MAMAnB,EAAA/Q,KAAAE,EACAA,EAAAyQ,EAAA3R,MAAA+R,EAAA/Q,KAEA,IAAAgU,IAAA9T,EAAAR,MAAA,KAAAqU,EAAArU,MAAAQ,EAAAR,OAAAqU,EAAArU,IAGA,OAAAQ,GAAAP,WAAAoU,EAAApU,UAAAqU,GAAA9T,EAAAZ,WAAAyU,EAAAzU,SAIA,GAHA,aAaAiO,EAAAt4B,UAAAu9B,kBAAA,WACA,MAAAjF,GAAA0G,YAAA7hC,KAAA8hC,kBAAA3G,EAAAmB,kBAAAmE,MAGAtF,EAAAt4B,UAAAg6B,mBAAA,WACA,MAAA1B,GAAA4G,aAAA/hC,KAAA8hC,kBAAA3G,EAAAiB,UAAAmD,KAGApE,EAAAt4B,UAAAi/B,cAAA,WACA,GACAh6B,GADAgmB,EAAA9tB,KAAA8tB,GAGA,IAAA9tB,KAAA08B,UAAA,CACA,GAAAsF,GAAAlU,EAAA3B,QAAA,IACArkB,GAAAgmB,EAAAwQ,UAAA0D,EAAA,EAAAlU,EAAA3B,QAAA,IAAA6V,QAEA,CACA,GAAAC,GAAAnU,EAAA3B,QAAA,IACA,MAAA8V,IACAnU,EAAAA,EAAAwQ,UAAA,EAAA2D,IAGAn6B,EAAAgmB,EAAAwQ,UAAAxQ,EAAA7D,YAAA,KAAA,GAGA,MAAAniB,IAUAqzB,EAAAt4B,UAAAq/B,oBAAA,SAAA7/B,GACA,OAAAA,GACA,IAAA84B,GAAAmB,kBAAA6F,OACA,MAAA,0BAEA,KAAAhH,GAAAmB,kBAAA8F,KACA,MAAA,kBAEA,KAAAjH,GAAAmB,kBAAAiE,SACA,MAAA,iBAEA,KAAApF,GAAAmB,kBAAAgE,KACA,MAAA,kBAEA,KAAAnF,GAAAmB,kBAAA+F,QACA,IAAAlH,GAAAmB,kBAAAmE,KAEA,QACA,MAAA,eAgBAtF,EAAAiB,WACAmD,IAAA,EACAL,MAAA,EACAE,MAAA,EACAE,MAAA,GAeAnE,EAAAkB,iBACAiG,OAAA,EACAC,OAAA,EACAC,iBAAA,EACAC,QAAA,EACAC,KAAA,GAgBAvH,EAAAmB,mBACA+F,QAAA,OACAF,OAAA,cACAC,KAAA,OACA7B,SAAA,WACAD,KAAA,OACAG,KAAA,QAGAtF,EAAA4G,cACAY,IAAAxH,EAAAiB,UAAA8C,MACA0D,IAAAzH,EAAAiB,UAAA8C,MACA2D,IAAA1H,EAAAiB,UAAA8C,MACA4D,IAAA3H,EAAAiB,UAAA8C,MACA6D,KAAA5H,EAAAiB,UAAA8C,MACA8D,IAAA7H,EAAAiB,UAAA8C,MACA+D,KAAA9H,EAAAiB,UAAA8C,MACAgE,KAAA/H,EAAAiB,UAAA8C,MACAiE,IAAAhI,EAAAiB,UAAA8C,OAGA/D,EAAA0G,aAEAuB,MAAAjI,EAAAmB,kBAAAiE,SACA8C,KAAAlI,EAAAmB,kBAAAiE,SACA+C,IAAAnI,EAAAmB,kBAAAiE,SACAgD,IAAApI,EAAAmB,kBAAAiE,SACAiD,IAAArI,EAAAmB,kBAAAiE,SACAkD,IAAAtI,EAAAmB,kBAAAiE,SACAmD,IAAAvI,EAAAmB,kBAAAiE,SAGAoC,IAAAxH,EAAAmB,kBAAA8F,KACAQ,IAAAzH,EAAAmB,kBAAA8F,KACAS,IAAA1H,EAAAmB,kBAAA8F,KACAU,IAAA3H,EAAAmB,kBAAA8F,KACAW,KAAA5H,EAAAmB,kBAAA8F,KACAY,IAAA7H,EAAAmB,kBAAA8F,KACAa,KAAA9H,EAAAmB,kBAAA8F,KACAc,KAAA/H,EAAAmB,kBAAA8F,KACAe,IAAAhI,EAAAmB,kBAAA8F,KAGAuB,KAAAxI,EAAAmB,kBAAAgE,KAGAsD,KAAAzI,EAAAmB,kBAAAmE,KACAoD,IAAA1I,EAAAmB,kBAAAmE,MAUAtF,EAAA2I,qBAAA,SAAAje,EAAA+W,GACAyB,EAAAlD,EAAA4G,aAAAlc,EAAA+W,IAUAzB,EAAA4I,oBAAA,SAAAle,EAAAiX,GACAuB,EAAAlD,EAAA0G,YAAAhc,EAAAiX,MAeAN,cAAA,GAAA1O,IAAA,KAAAkW,IAAA,SAAAtjC,EAAAjB,EAAAD,GACAC,EAAAD,SAGAykC,QAAA,oEAEAC,aAAA,SAAA3a,GAQA,IAPA,GACA4a,GADAjc,EAAA,GAEAkc,EAAA,GAAAt4B,OAAA,GACAu4B,EAAA,EACAC,EAAA,EACAC,EAAA,EAEAF,EAAA9a,EAAAvoB,QAAA,CAGA,IADAmjC,EAAA,GAAAr4B,OAAA,GACAw4B,EAAA,EAAAA,EAAAH,EAAAnjC,OAAAsjC,IACAD,EAAA9a,EAAAvoB,OAGAmjC,EAAAG,GAAA,IAAA/a,EAAAnB,WAAAic,KAGAF,EAAAG,GAAA,CAgBA,QAVAF,EAAA,GAAAD,EAAA,IAAA,EAEAC,EAAA,IAAA,EAAAD,EAAA,KAAA,EAAAA,EAAA,IAAA,EAEAC,EAAA,IAAA,GAAAD,EAAA,KAAA,EAAAA,EAAA,IAAA,EAEAC,EAAA,GAAA,GAAAD,EAAA,GAGAI,EAAAF,GAAA9a,EAAAvoB,OAAA,IAEA,IAAA,GAEAojC,EAAA,GAAA,GACAA,EAAA,GAAA,EACA,MAEA,KAAA,GAEAA,EAAA,GAAA,GASA,IAAAE,EAAA,EAAAA,EAAAF,EAAApjC,OAAAsjC,IACApc,GAAAloB,KAAAikC,QAAAvf,OAAA0f,EAAAE,IAGA,MAAApc,UAIAsc,IAAA,SAAA9jC,EAAAjB,EAAAD,GACAC,EAAAD,QAAAkB,EAAA,YAEAjB,EAAAD,QAAA27B,SAAAz6B,EAAA,cAEAjB,EAAAD,QAAAilC,YACAC,SACAC,OAAAjkC,EAAA,iCAEAkkC,SACAC,KAAAnkC,EAAA,kCAIAokC,WAAA,GAAAvI,aAAA,GAAAwI,+BAAA,GAAAC,6BAAA,KAAAC,IAAA,SAAAvkC,EAAAjB,EAAAD,GAEA,GAAA0lC,KAEAzlC,GAAAD,QAAA,WACA,MAAA,UAAAu8B,EAAAzb,GAEA4kB,EAAAnJ,EAAAjO,MACAiO,EAAAz5B,KAAA4iC,EAAAnJ,EAAAjO,KACAiO,EAAAwB,YAIAxB,EAAA9U,KAAA,WAAA,WACAie,EAAAllC,KAAA8tB,KAAA9tB,KAAAsC,OAIAge,WAIA6kB,IAAA,SAAAzkC,EAAAjB,EAAAD,GACA,GAAA27B,GAAAz6B,EAAA,kBACA0kC,EAAA1kC,EAAA,YAEAb,QAAAwlC,IAAAxlC,OAAAwlC,KAAAxlC,OAAAylC,UAIA7lC,EAAAD,QAAA,WACA,MAAA,UAAAu8B,EAAAzb,GACA,IAAAyb,EAAAz5B,KACA,MAAAge,IAIA,IAAAyb,EAAAiB,KAAAjB,EAAAe,UAAA3B,EAAAmB,kBAAA8F,KAEA,GAAAviC,OAAA0lC,MAAA,gBAAAxJ,GAAAz5B,MAmBA,GAAA,IAAAy5B,EAAAz5B,KAAAD,KAAA8pB,QAAA,SAAA,CACA,GAAA/e,GAAAi4B,IAAAG,gBAAAzJ,EAAAz5B,KAEAy5B,GAAA8I,KAAA9I,EAAAz5B,KACAy5B,EAAAz5B,KAAA,GAAAo9B,OACA3D,EAAAz5B,KAAA8K,IAAAA,EAEA2uB,EAAAoB,SAAA,EAGApB,EAAAz5B,KAAA08B,OAAA,WACAqG,IAAAI,gBAAAr4B,GACA2uB,EAAAz5B,KAAA08B,OAAA,KAEA1e,UAjCA,CACA,GAAAje,GAAA05B,EAAAiB,IAAA0I,kBAAA,eAGArjC,IAAA,IAAAA,EAAA8pB,QAAA,WACA4P,EAAAz5B,KAAA,GAAAo9B,OACA3D,EAAAz5B,KAAA8K,IAAA,QAAA/K,EAAA,WAAA+iC,EAAAlB,aAAAnI,EAAAiB,IAAAmE,cAEApF,EAAAoB,SAAA,EAGApB,EAAAz5B,KAAA08B,OAAA,WACAjD,EAAAz5B,KAAA08B,OAAA,KAEA1e,UAwBAA,SAKAqlB,iBAAA,GAAAC,YAAA,KAAAC,IAAA,SAAAnlC,EAAAjB,EAAAD,GACAC,EAAAD,SACAgP,KAAA,UACAsY,QAAA,aACAgf,YAAA,0EACAC,OAAA,aACAC,cACA,oCACA,oCAEAC,KAAA,iBACAC,SAAA,6BACAC,KAAA,2CACAC,QAAA,MACAC,YACAhkC,KAAA,MACAyrB,IAAA,yCAEAwY,SACA97B,MAAA,qBACAqW,KAAA,oBACA0lB,MAAA,OACAC,KAAA,qDAEAC,OACA,OACA,OACA,kBACA,UACA,eACA,aAEAC,cACAnwB,MAAA,SACAowB,KAAA,SACAtU,OAAA,SACAmK,cAAA,SACAoK,YAAA,4CACAC,gBAAA,SACAC,eAAA,yDACAC,kBAAA,UAEAC,iBACAC,WAAA,UACAC,KAAA,SACAC,IAAA,SACAC,KAAA,SACAC,cAAA,SACAC,cAAA,SACAC,aAAA,SACAC,cAAA,SACAC,cAAA,UACAC,cAAA,SACAC,eAAA,SACAC,cAAA,SACAC,kBAAA,SACAC,cAAA,SACAC,YAAA,SACAC,iBAAA,wDACAC,MAAA,SACAC,iBAAA,SACAC,SAAA,SACAC,MAAA,SACAC,cAAA,SACAC,eAAA,SACAC,OAAA,SACAC,eAAA,SACAC,sBAAA,SACAC,SAAA,UAEAzB,YACAxqB,WACA,eAKAksB,IAAA,SAAAjoC,EAAAjB,EAAAD,GAkBA,QAAAopC,GAAAC,GAGA,GAAAtH,GAAA1B,SAAAC,cAAA,MAEAyB,GAAAuH,MAAAllC,MAAA,QACA29B,EAAAuH,MAAAjlC,OAAA,QACA09B,EAAAuH,MAAAC,SAAA,WACAxH,EAAAuH,MAAAE,IAAA,EACAzH,EAAAuH,MAAAhrB,KAAA,EAEAyjB,EAAAuH,MAAAG,OAAA,EAQAjpC,KAAAuhC,IAAAA,EAQAvhC,KAAAkpC,QAQAlpC,KAAAmpC,SAAA,EAOAnpC,KAAAopC,OAAA,EAOAppC,KAAA6oC,SAAAA,EAQA7oC,KAAAqpC,YAKArpC,KAAAspC,WAAAtpC,KAAAspC,WAAAtmC,KAAAhD,MACAA,KAAAupC,aAAAvpC,KAAAupC,aAAAvmC,KAAAhD,MAQAA,KAAAwpC,UAAA,EAIA3pC,OAAA8/B,iBAAA,UAAA3/B,KAAAspC,YAAA,GA5FA,GAAAG,GAAA/oC,EAAA,UAGA6O,QAAA4pB,OACAsQ,EAAAC,cAAA7mC,UACAnC,EAAA,uBA2FAkoC,EAAA/lC,UAAAmH,YAAA4+B,EACAnpC,EAAAD,QAAAopC,EAMAA,EAAA/lC,UAAAqH,SAAA,WAEAlK,KAAAwpC,WAKAxpC,KAAAwpC,UAAA,EAEA3pC,OAAAggC,SAAAF,iBAAA,YAAA3/B,KAAAupC,cAAA,GACA1pC,OAAA++B,oBAAA,UAAA5+B,KAAAspC,YAAA,GAEAtpC,KAAA6oC,SAAA7hB,GAAA,aAAAhnB,KAAA2pC,OAAA3pC,MAEAA,KAAA6oC,SAAAe,KAAAC,WAAA5J,YAAAjgC,KAAAuhC,OAOAqH,EAAA/lC,UAAAinC,WAAA,WAEA9pC,KAAAwpC,WAKAxpC,KAAAwpC,UAAA,EAEA3pC,OAAAggC,SAAAjB,oBAAA,YAAA5+B,KAAAupC,cACA1pC,OAAA8/B,iBAAA,UAAA3/B,KAAAspC,YAAA,GAEAtpC,KAAA6oC,SAAA3hB,IAAA,aAAAlnB,KAAA2pC,QAEA3pC,KAAAuhC,IAAAsI,WAAAE,YAAA/pC,KAAAuhC,OASAqH,EAAA/lC,UAAAmnC,wBAAA,SAAAC,GAEA,GAAAA,EAAAC,QAAA,CAKAD,EAAAE,YAAAF,EAAAG,cAEAH,EAAAI,mBAEArqC,KAAAsqC,SAAAL,GAGAA,EAAAd,SAAAnpC,KAAAmpC,SAKA,KAAA,GAFAE,GAAAY,EAAAZ,SAEA1oC,EAAA0oC,EAAAroC,OAAA,EAAAL,GAAA,EAAAA,IAEAX,KAAAgqC,wBAAAX,EAAA1oC,MASAioC,EAAA/lC,UAAA8mC,OAAA,WAIA3pC,KAAAgqC,wBAAAhqC,KAAA6oC,SAAA0B,oBAEA,IAAAC,GAAAxqC,KAAA6oC,SAAAe,KAAAa,wBACAC,EAAAF,EAAA5mC,MAAA5D,KAAA6oC,SAAAjlC,MACA+mC,EAAAH,EAAA3mC,OAAA7D,KAAA6oC,SAAAhlC,OAEA09B,EAAAvhC,KAAAuhC,GAEAA,GAAAuH,MAAAhrB,KAAA0sB,EAAA1sB,KAAA,KACAyjB,EAAAuH,MAAAE,IAAAwB,EAAAxB,IAAA,KACAzH,EAAAuH,MAAAllC,MAAA5D,KAAA6oC,SAAAjlC,MAAA,KACA29B,EAAAuH,MAAAjlC,OAAA7D,KAAA6oC,SAAAhlC,OAAA,IAEA,KAAA,GAAAlD,GAAA,EAAAA,EAAAX,KAAAqpC,SAAAroC,OAAAL,IACA,CAEA,GAAAiqC,GAAA5qC,KAAAqpC,SAAA1oC,EAEA,IAAAiqC,EAAAzB,WAAAnpC,KAAAmpC,SAEAyB,EAAAP,mBAAA,EAEAZ,EAAAoB,MAAAC,YAAA9qC,KAAAqpC,SAAA1oC,EAAA,GACAX,KAAAuhC,IAAAwI,YAAAa,EAAAG,gBACA/qC,KAAAkpC,KAAAv+B,KAAAigC,EAAAG,gBACAH,EAAAG,eAAA,KAEApqC,IAEA,IAAAX,KAAAqpC,SAAAroC,QAEAhB,KAAA8pC,iBAIA,CAEAvI,EAAAqJ,EAAAG,cACA,IAAAC,GAAAJ,EAAAI,QACAC,EAAAL,EAAAM,cAEAN,GAAAI,SAEAzJ,EAAAuH,MAAAhrB,MAAAmtB,EAAAE,GAAAH,EAAAr2B,EAAAs2B,EAAAxqC,GAAAiqC,EAAA,KACAnJ,EAAAuH,MAAAE,KAAAiC,EAAAG,GAAAJ,EAAAlzB,EAAAmzB,EAAAI,GAAAV,EAAA,KAEApJ,EAAAuH,MAAAllC,MAAAonC,EAAApnC,MAAAqnC,EAAAxqC,EAAAiqC,EAAA,KACAnJ,EAAAuH,MAAAjlC,OAAAmnC,EAAAnnC,OAAAonC,EAAAI,EAAAV,EAAA,OAKAK,EAAAJ,EAAAU,YAEAtrC,KAAAurC,WAAAP,GAEAzJ,EAAAuH,MAAAhrB,KAAAktB,EAAAr2B,EAAA+1B,EAAA,KACAnJ,EAAAuH,MAAAE,IAAAgC,EAAAlzB,EAAA6yB,EAAA,KAEApJ,EAAAuH,MAAAllC,MAAAonC,EAAApnC,MAAA8mC,EAAA,KACAnJ,EAAAuH,MAAAjlC,OAAAmnC,EAAAnnC,OAAA8mC,EAAA,OAMA3qC,KAAAmpC,YAGAP,EAAA/lC,UAAA0oC,WAAA,SAAAP,GAEAA,EAAAr2B,EAAA,IAEAq2B,EAAApnC,OAAAonC,EAAAr2B,EACAq2B,EAAAr2B,EAAA,GAGAq2B,EAAAlzB,EAAA,IAEAkzB,EAAAnnC,QAAAmnC,EAAAlzB,EACAkzB,EAAAlzB,EAAA,GAGAkzB,EAAAr2B,EAAAq2B,EAAApnC,MAAA5D,KAAA6oC,SAAAjlC,QAEAonC,EAAApnC,MAAA5D,KAAA6oC,SAAAjlC,MAAAonC,EAAAr2B,GAGAq2B,EAAAlzB,EAAAkzB,EAAAnnC,OAAA7D,KAAA6oC,SAAAhlC,SAEAmnC,EAAAnnC,OAAA7D,KAAA6oC,SAAAhlC,OAAAmnC,EAAAlzB,IASA8wB,EAAA/lC,UAAAynC,SAAA,SAAAL,GAIA,GAAA1I,GAAAvhC,KAAAkpC,KAAAjvB,KAEAsnB,KAEAA,EAAA1B,SAAAC,cAAA,UAEAyB,EAAAuH,MAAAllC,MAAA,QACA29B,EAAAuH,MAAAjlC,OAAA,QACA09B,EAAAuH,MAAA0C,gBAAAxrC,KAAAopC,MAAA,oBAAA,cACA7H,EAAAuH,MAAAC,SAAA,WACAxH,EAAAuH,MAAAG,OAAA,EACA1H,EAAAuH,MAAA2C,YAAA,OAGAlK,EAAA5B,iBAAA,QAAA3/B,KAAA0rC,SAAA1oC,KAAAhD,OACAuhC,EAAA5B,iBAAA,QAAA3/B,KAAA2rC,SAAA3oC,KAAAhD,OACAuhC,EAAA5B,iBAAA,WAAA3/B,KAAA4rC,YAAA5oC,KAAAhD,QAMAuhC,EAAA7a,MAAAujB,EAAA4B,iBAAA,iBAAA7rC,KAAA8rC,SAIA7B,EAAAI,mBAAA,EACAJ,EAAAc,eAAAxJ,EACAA,EAAA0I,cAAAA,EAGAjqC,KAAAqpC,SAAA1+B,KAAAs/B,GACAjqC,KAAAuhC,IAAAtB,YAAAgK,EAAAc,gBACAd,EAAAc,eAAAe,SAAA7B,EAAA6B,UAQAlD,EAAA/lC,UAAA6oC,SAAA,SAAAxrC,GAEA,GAAA6rC,GAAA/rC,KAAA6oC,SAAAmD,QAAAC,WACAF,GAAAG,cAAAhsC,EAAAk5B,OAAA6Q,cAAA,QAAA8B,EAAAI,YAOAvD,EAAA/lC,UAAA8oC,SAAA,SAAAzrC,GAEA,GAAA6rC,GAAA/rC,KAAA6oC,SAAAmD,QAAAC,WACAF,GAAAG,cAAAhsC,EAAAk5B,OAAA6Q,cAAA,YAAA8B,EAAAI,YAOAvD,EAAA/lC,UAAA+oC,YAAA,SAAA1rC,GAEA,GAAA6rC,GAAA/rC,KAAA6oC,SAAAmD,QAAAC,WACAF,GAAAG,cAAAhsC,EAAAk5B,OAAA6Q,cAAA,WAAA8B,EAAAI,YAQAvD,EAAA/lC,UAAAymC,WAAA,SAAAppC,GAEA,IAAAA,EAAAksC,SAKApsC,KAAAkK,YAQA0+B,EAAA/lC,UAAA0mC,aAAA,WAEAvpC,KAAA8pC,cAQAlB,EAAA/lC,UAAA0C,QAAA,WAEAvF,KAAAuhC,IAAA,IAEA,KAAA,GAAA5gC,GAAA,EAAAA,EAAAX,KAAAqpC,SAAAroC,OAAAL,IAEAX,KAAAqpC,SAAA1oC,GAAA4gC,IAAA,IAIA1hC,QAAAggC,SAAAjB,oBAAA,YAAA5+B,KAAAupC,cACA1pC,OAAA++B,oBAAA,UAAA5+B,KAAAspC,YAEAtpC,KAAAkpC,KAAA,KACAlpC,KAAAqpC,SAAA,KACArpC,KAAA6oC,SAAA,MAIAY,EAAA4C,cAAAC,eAAA,gBAAA1D,GACAa,EAAA8C,eAAAD,eAAA,gBAAA1D,KAGA4D,UAAA,GAAAC,qBAAA,KAAAC,IAAA,SAAAhsC,EAAAjB,EAAAD,GAeA,GAAAmtC,IAKAxC,YAAA,EAKA0B,gBAAA,KAKAC,SAAA,EAKAzB,mBAAA,EAKAU,gBAAA,EAIAtrC,GAAAD,QAAAmtC,OAEAC,IAAA,SAAAlsC,EAAAjB,EAAAD,GAWAC,EAAAD,SACAmtC,iBAAAjsC,EAAA,sBACAkoC,qBAAAloC,EAAA,6BAGAmsC,yBAAA,GAAAJ,qBAAA,KAAAK,IAAA,SAAApsC,EAAAjB,EAAAD,GAMA,GAAAutC,IAQAC,QAAAtsC,EAAA,sBAAAomB,QAOAmmB,KAAA,EAAAz3B,KAAA03B,GAOAC,WAAA,IAAA33B,KAAA03B,GAOAE,WAAA53B,KAAA03B,GAAA,IASAG,YAAA,IAYAC,eACAC,QAAA,EACAC,MAAA,EACAC,OAAA,GA6BAC,aACAC,OAAA,EACAC,IAAA,EACAC,SAAA,EACAC,OAAA,EACAC,QAAA,EACAC,OAAA,EACAC,QAAA,EACAC,YAAA,EACAC,WAAA,EACAC,WAAA,EACAC,WAAA,GACAC,WAAA,GACAC,UAAA,GACAC,IAAA,GACAC,WAAA,GACAC,MAAA,GACAC,WAAA,IAkBAC,YACAC,OAAA,EACAC,MAAA,EACAC,UAAA,EACAC,WAAA,EACAC,UAAA,EACAC,eAAA,EACAC,aAAA,GAgBAC,aACA/M,QAAA,EACAz5B,OAAA,EACAC,QAAA,GAWAwmC,cAAA,SAEAC,WAAA,EAEAC,kBAAA,EAmBAC,wBACA5F,KAAA,KACA6F,WAAA,EACAC,WAAA,EACAC,WAAA,EACAC,YAAA,EACAC,aAAA,EACArE,gBAAA,EACAsE,mBAAA,EACAC,uBAAA,EACAC,aAAA,GAeAC,QACAC,KAAA,EACAC,KAAA,EACAC,KAAA,EACAC,KAAA,EACAC,KAAA,GAKAC,kBAAA,IAGA9wC,GAAAD,QAAAutC,IAEAyD,qBAAA,KAAAC,IAAA,SAAA/vC,EAAAjB,EAAAD,GAmBA,QAAAkxC,KAEAhH,EAAA3oC,KAAAf,MAQAA,KAAAqpC,YA5BA,GAAAsH,GAAAjwC,EAAA,WACAmqC,EAAAnqC,EAAA,YACAgpC,EAAAhpC,EAAA,mBACAkwC,EAAAlwC,EAAA,6BACAmwC,EAAA,GAAAF,GAAAG,MA4BAJ,GAAA7tC,UAAA0M,OAAA/L,OAAAkmC,EAAA7mC,WACA6tC,EAAA7tC,UAAAmH,YAAA0mC,EACAjxC,EAAAD,QAAAkxC,EAEAnhC,OAAAwhC,iBAAAL,EAAA7tC,WAOAe,OACAoM,IAAA,WAEA,MAAAhQ,MAAAgxC,MAAAr8B,EAAA3U,KAAAixC,iBAAArtC,OAEAsM,IAAA,SAAAf,GAGA,GAAAvL,GAAA5D,KAAAixC,iBAAArtC,KAEA,KAAAA,EAEA5D,KAAAgxC,MAAAr8B,EAAAxF,EAAAvL,EAIA5D,KAAAgxC,MAAAr8B,EAAA,EAIA3U,KAAAkxC,OAAA/hC,IAUAtL,QACAmM,IAAA,WAEA,MAAAhQ,MAAAgxC,MAAAl5B,EAAA9X,KAAAixC,iBAAAptC,QAEAqM,IAAA,SAAAf,GAGA,GAAAtL,GAAA7D,KAAAixC,iBAAAptC,MAEA,KAAAA,EAEA7D,KAAAgxC,MAAAl5B,EAAA3I,EAAAtL,EAIA7D,KAAAgxC,MAAAl5B,EAAA,EAGA9X,KAAAmxC,QAAAhiC,MAUAuhC,EAAA7tC,UAAAuuC,iBAAA,aASAV,EAAA7tC,UAAAynC,SAAA,SAAAM,GAEA,GAAAyG,GAAAx9B,UAAA7S,MAGA,IAAAqwC,EAAA,EAIA,IAAA,GAAA1wC,GAAA,EAAA0wC,EAAA1wC,EAAAA,IAEAX,KAAAsqC,SAAAz2B,UAAAlT,QAMAiqC,GAAA0G,QAEA1G,EAAA0G,OAAAvH,YAAAa,GAGAA,EAAA0G,OAAAtxC,KAEAA,KAAAqpC,SAAA1+B,KAAAigC,GAGA5qC,KAAAoxC,iBAAApxC,KAAAqpC,SAAAroC,OAAA,GACA4pC,EAAAxjB,KAAA,QAAApnB,KAGA,OAAA4qC,IAUA8F,EAAA7tC,UAAA0uC,WAAA,SAAA3G,EAAAx2B,GAEA,GAAAA,GAAA,GAAAA,GAAApU,KAAAqpC,SAAAroC,OAeA,MAbA4pC,GAAA0G,QAEA1G,EAAA0G,OAAAvH,YAAAa,GAGAA,EAAA0G,OAAAtxC,KAEAA,KAAAqpC,SAAApwB,OAAA7E,EAAA,EAAAw2B,GAGA5qC,KAAAoxC,iBAAAh9B,GACAw2B,EAAAxjB,KAAA,QAAApnB,MAEA4qC,CAIA,MAAA,IAAAhqC,OAAAgqC,EAAA,yBAAAx2B,EAAA,8BAAApU,KAAAqpC,SAAAroC,SAUA0vC,EAAA7tC,UAAA2uC,aAAA,SAAA5G,EAAA6G,GAEA,GAAA7G,IAAA6G,EAAA,CAKA,GAAAC,GAAA1xC,KAAA2xC,cAAA/G,GACAgH,EAAA5xC,KAAA2xC,cAAAF,EAEA,IAAA,EAAAC,GAAA,EAAAE,EAEA,KAAA,IAAAhxC,OAAA,iFAGAZ,MAAAqpC,SAAAqI,GAAAD,EACAzxC,KAAAqpC,SAAAuI,GAAAhH,EACA5qC,KAAAoxC,iBAAAQ,EAAAF,EAAAA,EAAAE,KASAlB,EAAA7tC,UAAA8uC,cAAA,SAAA/G,GAEA,GAAAx2B,GAAApU,KAAAqpC,SAAAld,QAAAye,EAEA,IAAA,KAAAx2B,EAEA,KAAA,IAAAxT,OAAA,2DAGA,OAAAwT,IASAs8B,EAAA7tC,UAAAgvC,cAAA,SAAAjH,EAAAx2B,GAEA,GAAA,EAAAA,GAAAA,GAAApU,KAAAqpC,SAAAroC,OAEA,KAAA,IAAAJ,OAAA,sCAGA,IAAAkxC,GAAA9xC,KAAA2xC,cAAA/G,EAEAC,GAAAC,YAAA9qC,KAAAqpC,SAAAyI,EAAA,GACA9xC,KAAAqpC,SAAApwB,OAAA7E,EAAA,EAAAw2B,GACA5qC,KAAAoxC,iBAAAh9B,IASAs8B,EAAA7tC,UAAAkvC,WAAA,SAAA39B,GAEA,GAAA,EAAAA,GAAAA,GAAApU,KAAAqpC,SAAAroC,OAEA,KAAA,IAAAJ,OAAA,8BAAAwT,EAAA,gGAGA,OAAApU,MAAAqpC,SAAAj1B,IASAs8B,EAAA7tC,UAAAknC,YAAA,SAAAa,GAEA,GAAAyG,GAAAx9B,UAAA7S,MAGA,IAAAqwC,EAAA,EAIA,IAAA,GAAA1wC,GAAA,EAAA0wC,EAAA1wC,EAAAA,IAEAX,KAAA+pC,YAAAl2B,UAAAlT,QAIA,CACA,GAAAyT,GAAApU,KAAAqpC,SAAAld,QAAAye,EAEA,IAAA,KAAAx2B,EAEA,MAGAw2B,GAAA0G,OAAA,KACAzG,EAAAC,YAAA9qC,KAAAqpC,SAAAj1B,EAAA,GAGApU,KAAAoxC,iBAAAh9B,GACAw2B,EAAAxjB,KAAA,UAAApnB,MAGA,MAAA4qC,IASA8F,EAAA7tC,UAAAmvC,cAAA,SAAA59B,GAEA,GAAAw2B,GAAA5qC,KAAA+xC,WAAA39B,EASA,OAPAw2B,GAAA0G,OAAA,KACAzG,EAAAC,YAAA9qC,KAAAqpC,SAAAj1B,EAAA,GAGApU,KAAAoxC,iBAAAh9B,GACAw2B,EAAAxjB,KAAA,UAAApnB,MAEA4qC,GASA8F,EAAA7tC,UAAAovC,eAAA,SAAAC,EAAAC,GAEA,GAGAp5B,GAAApY,EAHAyxC,EAAAF,GAAA,EACApwB,EAAA,gBAAAqwB,GAAAA,EAAAnyC,KAAAqpC,SAAAroC,OACAqxC,EAAAvwB,EAAAswB,CAGA,IAAAC,EAAA,GAAAvwB,GAAAuwB,EACA,CAGA,IAFAt5B,EAAA/Y,KAAAqpC,SAAApwB,OAAAm5B,EAAAC,GAEA1xC,EAAA,EAAAA,EAAAoY,EAAA/X,SAAAL,EAEAoY,EAAApY,GAAA2wC,OAAA,IAKA,KAFAtxC,KAAAoxC,iBAAAc,GAEAvxC,EAAA,EAAAA,EAAAoY,EAAA/X,SAAAL,EAEAoY,EAAApY,GAAAymB,KAAA,UAAApnB,KAGA,OAAA+Y,GAEA,GAAA,IAAAs5B,GAAA,IAAAryC,KAAAqpC,SAAAroC,OAEA,QAIA,MAAA,IAAAymB,YAAA,qEAaAipB,EAAA7tC,UAAAyvC,gBAAA,SAAAzJ,EAAA4G,EAAA8C,GAEA,GAAAC,GAAAxyC,KAAAixC,iBAEAwB,EAAA,GAAA7B,GAAA/H,EAAA,EAAA2J,EAAA5uC,MAAA,EAAA4uC,EAAA3uC,OAAA0uC,EAAA9C,EAOA,OALAoB,GAAA1F,IAAAqH,EAAA79B,EACAk8B,EAAAzF,IAAAoH,EAAA16B,EAEA26B,EAAAC,OAAA1yC,KAAA6wC,GAEA4B,GAQA/B,EAAA7tC,UAAA8vC,gBAAA,WAEA,GAAA3yC,KAAAkqC,QAAA,CAKAlqC,KAAAyc,UAAAk2B,gBAAA3yC,KAAAsxC,OAAA70B,WACAzc,KAAA4yC,WAAA5yC,KAAA6yC,MAAA7yC,KAAAsxC,OAAAsB,UAEA,KAAA,GAAAjyC,GAAA,EAAA+oB,EAAA1pB,KAAAqpC,SAAAroC,OAAA0oB,EAAA/oB,IAAAA,EAEAX,KAAAqpC,SAAA1oC,GAAAgyC,iBAGA3yC,MAAAyc,UAAA1S,OAAA,IAIA2mC,EAAA7tC,UAAAiwC,yBAAApC,EAAA7tC,UAAA8vC,gBAOAjC,EAAA7tC,UAAAyoC,UAAA,WAEA,IAAAtrC,KAAA+yC,eACA,CAEA,GAAA,IAAA/yC,KAAAqpC,SAAAroC,OAEA,MAAA2vC,GAAAqC,UAAAC,KAiBA,KAAA,GANAC,GACAC,EACAC,EARAvgB,EAAAiD,EAAAA,EACAhD,EAAAgD,EAAAA,EAEA/C,IAAA+C,EAAAA,GACA9C,IAAA8C,EAAAA,GAMAud,GAAA,EAEA1yC,EAAA,EAAA+oB,EAAA1pB,KAAAqpC,SAAAroC,OAAA0oB,EAAA/oB,IAAAA,EACA,CACA,GAAAiqC,GAAA5qC,KAAAqpC,SAAA1oC,EAEAiqC,GAAAV,UAKAmJ,GAAA,EAEAH,EAAAlzC,KAAAqpC,SAAA1oC,GAAA2qC,YAEAzY,EAAAA,EAAAqgB,EAAAv+B,EAAAke,EAAAqgB,EAAAv+B,EACAme,EAAAA,EAAAogB,EAAAp7B,EAAAgb,EAAAogB,EAAAp7B,EAEAq7B,EAAAD,EAAAtvC,MAAAsvC,EAAAv+B,EACAy+B,EAAAF,EAAArvC,OAAAqvC,EAAAp7B,EAEAib,EAAAA,EAAAogB,EAAApgB,EAAAogB,EACAngB,EAAAA,EAAAogB,EAAApgB,EAAAogB,GAGA,IAAAC,EAEA,MAAA1C,GAAAqC,UAAAC,KAGA,IAAAT,GAAAxyC,KAAAszC,OAEAd,GAAA79B,EAAAke,EACA2f,EAAA16B,EAAAgb,EACA0f,EAAA5uC,MAAAmvB,EAAAF,EACA2f,EAAA3uC,OAAAmvB,EAAAF,EAEA9yB,KAAA+yC,eAAAP,EAGA,MAAAxyC,MAAA+yC,gBAGArC,EAAA7tC,UAAA0wC,mBAAA7C,EAAA7tC,UAAAyoC,UAQAoF,EAAA7tC,UAAAouC,eAAA,WAEA,GAAAuC,GAAAxzC,KAAAkrC,cAEAlrC,MAAAkrC,eAAAyF,EAAAG,OAAA2C,QAEA,KAAA,GAAA9yC,GAAA,EAAA+oB,EAAA1pB,KAAAqpC,SAAAroC,OAAA0oB,EAAA/oB,IAAAA,EAEAX,KAAAqpC,SAAA1oC,GAAAgyC,iBAOA,OAJA3yC,MAAAkrC,eAAAsI,EAEAxzC,KAAA+yC,eAAA,KAEA/yC,KAAAsrC,UAAAqF,EAAAG,OAAA2C,WAQA/C,EAAA7tC,UAAA6wC,YAAA,SAAA7K,GAIA,GAAA7oC,KAAAkqC,WAAAlqC,KAAA4yC,YAAA,IAAA5yC,KAAA2zC,WAAA,CAMA,GAAAhzC,GAAA+oB,CAGA,IAAA1pB,KAAA4zC,OAAA5zC,KAAA6zC,SACA,CAoBA,IAnBAhL,EAAAiL,gBAAAC,QAGA/zC,KAAA6zC,UAAA7zC,KAAA6zC,SAAA7yC,QAEA6nC,EAAAmL,cAAAC,WAAAj0C,KAAAA,KAAA6zC,UAGA7zC,KAAA4zC,OAEA/K,EAAAqL,YAAAC,SAAAn0C,KAAAA,KAAA4zC,OAGA/K,EAAAiL,gBAAAtpC,QAGAxK,KAAAo0C,aAAAvL,GAGAloC,EAAA,EAAA+oB,EAAA1pB,KAAAqpC,SAAAroC,OAAA0oB,EAAA/oB,EAAAA,IAEAX,KAAAqpC,SAAA1oC,GAAA+yC,YAAA7K,EAGAA,GAAAiL,gBAAAC,QAEA/zC,KAAA4zC,OAEA/K,EAAAqL,YAAAG,QAAAr0C,KAAAA,KAAA4zC,OAGA5zC,KAAA6zC,UAEAhL,EAAAmL,cAAAM,YAGAzL,EAAAiL,gBAAAtpC,YAOA,KAHAxK,KAAAo0C,aAAAvL,GAGAloC,EAAA,EAAA+oB,EAAA1pB,KAAAqpC,SAAAroC,OAAA0oB,EAAA/oB,IAAAA,EAEAX,KAAAqpC,SAAA1oC,GAAA+yC,YAAA7K,KAWA6H,EAAA7tC,UAAAuxC,aAAA,SAAAvL,KAWA6H,EAAA7tC,UAAA0xC,cAAA,SAAA1L,KAWA6H,EAAA7tC,UAAA2xC,aAAA,SAAA3L,GAGA,GAAA7oC,KAAAkqC,WAAAlqC,KAAA6yC,OAAA,IAAA7yC,KAAA2zC,WAAA,CAKA3zC,KAAA4zC,OAEA/K,EAAAqL,YAAAC,SAAAn0C,KAAA4zC,MAAA/K,GAGA7oC,KAAAu0C,cAAA1L,EACA,KAAA,GAAAloC,GAAA,EAAA+oB,EAAA1pB,KAAAqpC,SAAAroC,OAAA0oB,EAAA/oB,IAAAA,EAEAX,KAAAqpC,SAAA1oC,GAAA6zC,aAAA3L,EAGA7oC,MAAA4zC,OAEA/K,EAAAqL,YAAAG,QAAAxL,KAQA6H,EAAA7tC,UAAA0C,QAAA,SAAAkvC,GAIA,GAFA/K,EAAA7mC,UAAA0C,QAAAxE,KAAAf,MAEAy0C,EAEA,IAAA,GAAA9zC,GAAA,EAAA+oB,EAAA1pB,KAAAqpC,SAAAroC,OAAA0oB,EAAA/oB,IAAAA,EAEAX,KAAAqpC,SAAA1oC,GAAA4E,QAAAkvC,EAIAz0C,MAAAiyC,iBAEAjyC,KAAAqpC,SAAA,QAGAqL,UAAA,GAAAC,4BAAA,IAAAC,WAAA,IAAAC,kBAAA,KAAAC,IAAA,SAAAp0C,EAAAjB,EAAAD,GAkBA,QAAAkqC,KAEA1R,EAAAj3B,KAAAf,MAEAA,KAAAyc,UAAA,GAAAs4B,GAOA/0C,KAAA+oC,SAAA/oC,KAAAyc,UAAAssB,SAQA/oC,KAAAgxC,MAAAhxC,KAAAyc,UAAAu0B,MAOAhxC,KAAAg1C,MAAAh1C,KAAAyc,UAAAu4B,MAQAh1C,KAAAqpB,KAAArpB,KAAAyc,UAAA4M,KAOArpB,KAAAi1C,UAAA,EAOAj1C,KAAA6yC,MAAA,EAQA7yC,KAAAkqC,SAAA,EAQAlqC,KAAA2zC,YAAA,EAQA3zC,KAAAsxC,OAAA,KAQAtxC,KAAA4yC,WAAA,EAQA5yC,KAAAkrC,eAAAlrC,KAAAyc,UAAAyuB,eACAlrC,KAAAk1C,eAAAl1C,KAAAyc,UAAAy4B,eAQAl1C,KAAAm1C,WAAA,KAQAn1C,KAAAo1C,IAAA,EAQAp1C,KAAAq1C,IAAA,EAQAr1C,KAAAszC,QAAA,GAAA3C,GAAAqC,UAAA,EAAA,EAAA,EAAA,GAQAhzC,KAAA+yC,eAAA,KAQA/yC,KAAA4zC,MAAA,KAEA5zC,KAAAs1C,gBAAA,EA5JA,GAAA3E,GAAAjwC,EAAA,WACAkwC,EAAAlwC,EAAA,6BACAs3B,EAAAt3B,EAAA,iBAEAq0C,GADAr0C,EAAA,YACAA,EAAA,sBACAmwC,EAAA,GAAAF,GAAAG,OACAyE,GAAArK,eAAA,GAAAyF,GAAAG,OAAA8B,WAAA,EAAAvJ,YA0JAK,GAAA7mC,UAAA0M,OAAA/L,OAAAw0B,EAAAn1B,WACA6mC,EAAA7mC,UAAAmH,YAAA0/B,EACAjqC,EAAAD,QAAAkqC,EAGAn6B,OAAAwhC,iBAAArH,EAAA7mC,WAOA8R,GACA3E,IAAA,WAEA,MAAAhQ,MAAA+oC,SAAAp0B,GAEAzE,IAAA,SAAAf,GAEAnP,KAAA+oC,SAAAp0B,EAAAxF,EACAnP,KAAAs1C,gBAAA,IAUAx9B,GACA9H,IAAA,WAEA,MAAAhQ,MAAA+oC,SAAAjxB,GAEA5H,IAAA,SAAAf,GAEAnP,KAAA+oC,SAAAjxB,EAAA3I,EACAnP,KAAAs1C,gBAAA,IAIAE,QACAxlC,IAAA,WAEA,MAAAhQ,MAAAgxC,MAAAr8B,GAEAzE,IAAA,SAAAf,GAEAnP,KAAAgxC,MAAAr8B,EAAAxF,EACAnP,KAAAs1C,gBAAA,IAUAG,QACAzlC,IAAA,WAEA,MAAAhQ,MAAAgxC,MAAAl5B,GAEA5H,IAAA,SAAAf,GAEAnP,KAAAgxC,MAAAl5B,EAAA3I,EACAnP,KAAAs1C,gBAAA,IAIAI,UACA1lC,IAAA,WAEA,MAAAhQ,MAAAi1C,WAEA/kC,IAAA,SAAAf,GAEAnP,KAAAi1C,UAAA9lC,EACAnP,KAAAs1C,gBAAA,EACAt1C,KAAAo1C,IAAA5/B,KAAAmgC,IAAAxmC,GACAnP,KAAAq1C,IAAA7/B,KAAAogC,IAAAzmC,KAUAsmC,QACAzlC,IAAA,WAEA,MAAAhQ,MAAAgxC,MAAAl5B,GAEA5H,IAAA,SAAAf,GAEAnP,KAAAgxC,MAAAl5B,EAAA3I,EACAnP,KAAAs1C,gBAAA,IAWAO,cACA7lC,IAAA,WAEA,GAAAiF,GAAAjV,IAEA,GAAA,CACA,IAAAiV,EAAAi1B,QAEA,OAAA,CAGAj1B,GAAAA,EAAAq8B,aACAr8B,EAEA,QAAA,IAYA6gC,MACA9lC,IAAA,WAEA,MAAAhQ,MAAA4zC,OAEA1jC,IAAA,SAAAf,GAEAnP,KAAA4zC,QAEA5zC,KAAA4zC,MAAAD,YAAA,GAGA3zC,KAAA4zC,MAAAzkC,EAEAnP,KAAA4zC,QAEA5zC,KAAA4zC,MAAAD,YAAA,KAaAoC,SACA/lC,IAAA,WAEA,MAAAhQ,MAAA6zC,UAAA7zC,KAAA6zC,SAAAr1B,SAEAtO,IAAA,SAAAf,GAEAnP,KAAA6zC,SAAA1kC,GAAAA,EAAAqP,YAWAkrB,EAAA7mC,UAAA8vC,gBAAA,WAEA3yC,KAAAyc,UAAAk2B,gBAAA3yC,KAAAsxC,OAAA70B,WAEAzc,KAAA4yC,WAAA5yC,KAAA6yC,MAAA7yC,KAAAsxC,OAAAsB,YAIAlJ,EAAA7mC,UAAAmzC,6BAAAtM,EAAA7mC,UAAA8vC,gBAUAjJ,EAAA7mC,UAAAyoC,UAAA,SAAA2K,GAEA,MAAAtF,GAAAqC,UAAAC,OAQAvJ,EAAA7mC,UAAAouC,eAAA,WAEA,MAAAjxC,MAAAsrC,UAAAqF,EAAAG,OAAA2C,WASA/J,EAAA7mC,UAAAqzC,SAAA,SAAAnN,GAiBA,MAZA/oC,MAAAsxC,OAQAtxC,KAAAg2C,gCANAh2C,KAAAsxC,OAAAiE,EACAv1C,KAAAg2C,+BACAh2C,KAAAsxC,OAAA,MAQAtxC,KAAAkrC,eAAAt3B,MAAAm1B,IAWAW,EAAA7mC,UAAAszC,QAAA,SAAApN,EAAA7jB,EAAAkxB,GAsBA,MApBAlxB,KAEA6jB,EAAA7jB,EAAAgxB,SAAAnN,IAMA/oC,KAAAsxC,OAQAtxC,KAAAg2C,gCANAh2C,KAAAsxC,OAAAiE,EACAv1C,KAAAg2C,+BACAh2C,KAAAsxC,OAAA,MAQAtxC,KAAAkrC,eAAAmL,aAAAtN,EAAAqN,IASA1M,EAAA7mC,UAAA6wC,YAAA,SAAA7K,KAWAa,EAAA7mC,UAAA2xC,aAAA,SAAA3L,KAaAa,EAAA7mC,UAAAyvC,gBAAA,SAAAzJ,EAAA0J,EAAA9C,GAEA,GAAA+C,GAAAxyC,KAAAixC,iBAEAwB,EAAA,GAAA7B,GAAA/H,EAAA,EAAA2J,EAAA5uC,MAAA,EAAA4uC,EAAA3uC,OAAA0uC,EAAA9C,EAOA,OALAoB,GAAA1F,IAAAqH,EAAA79B,EACAk8B,EAAAzF,IAAAoH,EAAA16B,EAEA26B,EAAAC,OAAA1yC,KAAA6wC,GAEA4B,GASA/I,EAAA7mC,UAAAyzC,UAAA,SAAAC,GAEA,IAAAA,IAAAA,EAAAjM,SAEA,KAAA,IAAA1pC,OAAA,0CAIA,OADA21C,GAAAjM,SAAAtqC,MACAu2C,GAiBA7M,EAAA7mC,UAAA2zC,aAAA,SAAA7hC,EAAAmD,EAAA09B,EAAAC,EAAAC,EAAAe,EAAAC,EAAAC,EAAAC,GAYA,MAVA52C,MAAA+oC,SAAAp0B,EAAAA,GAAA,EACA3U,KAAA+oC,SAAAjxB,EAAAA,GAAA,EACA9X,KAAAgxC,MAAAr8B,EAAA6gC,EAAAA,EAAA,EACAx1C,KAAAgxC,MAAAl5B,EAAA29B,EAAAA,EAAA,EACAz1C,KAAA01C,SAAAA,GAAA,EACA11C,KAAAqpB,KAAA1U,EAAA8hC,GAAA,EACAz2C,KAAAqpB,KAAAvR,EAAA4+B,GAAA,EACA12C,KAAAg1C,MAAArgC,EAAAgiC,GAAA,EACA32C,KAAAg1C,MAAAl9B,EAAA8+B,GAAA,EACA52C,KAAAs1C,gBAAA,EACAt1C,MAOA0pC,EAAA7mC,UAAA0C,QAAA,WAGAvF,KAAA+oC,SAAA,KACA/oC,KAAAgxC,MAAA,KACAhxC,KAAAg1C,MAAA,KACAh1C,KAAAqpB,KAAA,KAEArpB,KAAAsxC,OAAA,KAEAtxC,KAAAszC,QAAA,KACAtzC,KAAA+yC,eAAA,KACA/yC,KAAA4zC,MAAA,KAEA5zC,KAAAkrC,eAAA,KACAlrC,KAAAm1C,WAAA,QAGA0B,WAAA,GAAAnC,UAAA,GAAAC,4BAAA,IAAAmC,oBAAA,GAAAta,cAAA,KAAAua,IAAA,SAAAr2C,EAAAjB,EAAAD,GAUA,QAAAw3C,GAAAv6B,EAAA9H,EAAAmD,GAEA9X,KAAAi3C,GAAAtiC,GAAA,EACA3U,KAAAk3C,GAAAp/B,GAAA,EAEA9X,KAAAyc,UAAAA,EAGAu6B,EAAAn0C,UAAAmH,YAAAgtC,EACAv3C,EAAAD,QAAAw3C,EAIAznC,OAAAwhC,iBAAAiG,EAAAn0C,WAOA8R,GACA3E,IAAA,WAEA,MAAAhQ,MAAAi3C,IAEA/mC,IAAA,SAAAf,GAEAnP,KAAAi3C,GAAA9nC,EACAnP,KAAAyc,UAAA1S,OAAA,IAIA+N,GACA9H,IAAA,WAEA,MAAAhQ,MAAAk3C,IAEAhnC,IAAA,SAAAf,GAEAnP,KAAAk3C,GAAA/nC,EACAnP,KAAAyc,UAAA1S,OAAA,MAYAitC,EAAAn0C,UAAAqN,IAAA,SAAAyE,EAAAmD,GAEA9X,KAAAi3C,GAAAtiC,GAAA,EACA3U,KAAAk3C,GAAAp/B,IAAA,IAAAA,EAAA9X,KAAAi3C,GAAA,GAEAj3C,KAAAyc,UAAA1S,OAAA,QAGAotC,IAAA,SAAAz2C,EAAAjB,EAAAD,GAaA,QAAAu1C,KAEA/0C,KAAAkrC,eAAA,GAAAyF,GAAAG,OACA9wC,KAAAk1C,eAAA,GAAAvE,GAAAG,OAEA9wC,KAAA+oC,SAAA,GAAAiO,GAAAh3C,KAAA,GACAA,KAAAgxC,MAAA,GAAAgG,GAAAh3C,KAAA,EAAA,GACAA,KAAAg1C,MAAA,GAAAgC,GAAAh3C,KAAA,EAAA,GACAA,KAAAqpB,KAAA,GAAA2tB,GAAAh3C,KAAA,EAAA,GAGAA,KAAA01C,SAAA,EACA11C,KAAAo1C,IAAA5/B,KAAAmgC,IAAA,GACA31C,KAAAq1C,IAAA7/B,KAAAogC,IAAA,GAGA51C,KAAA+J,OAAA,EA5BA,GAAA4mC,GAAAjwC,EAAA,WACAs2C,EAAAt2C,EAAA,oBA8BAq0C,GAAAlyC,UAAAmH,YAAA+qC,EAEAA,EAAAlyC,UAAA8vC,gBAAA,SAAAyE,GAEA,GAAAC,GAAAD,EAAAlM,eACAD,EAAAjrC,KAAAkrC,eACAoM,EAAAt3C,KAAAk1C,cAEAtoC,SAAAc,IAAA,SACA1N,KAAA+J,QAIAutC,EAAA72C,EAAAT,KAAAq1C,IAAAr1C,KAAAgxC,MAAAiG,GACAK,EAAAtyC,EAAAhF,KAAAo1C,IAAAp1C,KAAAgxC,MAAAiG,GACAK,EAAAjjB,GAAAr0B,KAAAo1C,IAAAp1C,KAAAgxC,MAAAkG,GACAI,EAAAjM,EAAArrC,KAAAq1C,IAAAr1C,KAAAgxC,MAAAkG,GACAI,EAAAnM,GAAAnrC,KAAA+oC,SAAAkO,IAAAj3C,KAAAg1C,MAAAiC,GAAAK,EAAA72C,EAAAT,KAAAg1C,MAAAkC,GAAAI,EAAAjjB,GACAijB,EAAAlM,GAAAprC,KAAA+oC,SAAAmO,IAAAl3C,KAAAg1C,MAAAiC,GAAAK,EAAAtyC,EAAAhF,KAAAg1C,MAAAkC,GAAAI,EAAAjM,KAGArrC,KAAA+J,OAAAunC,OAAAvnC,SAGAkhC,EAAAxqC,EAAA62C,EAAA72C,EAAA42C,EAAA52C,EAAA62C,EAAAtyC,EAAAqyC,EAAAhjB,EACA4W,EAAAjmC,EAAAsyC,EAAA72C,EAAA42C,EAAAryC,EAAAsyC,EAAAtyC,EAAAqyC,EAAAhM,EACAJ,EAAA5W,EAAAijB,EAAAjjB,EAAAgjB,EAAA52C,EAAA62C,EAAAjM,EAAAgM,EAAAhjB,EACA4W,EAAAI,EAAAiM,EAAAjjB,EAAAgjB,EAAAryC,EAAAsyC,EAAAjM,EAAAgM,EAAAhM,EACAJ,EAAAE,GAAAmM,EAAAnM,GAAAkM,EAAA52C,EAAA62C,EAAAlM,GAAAiM,EAAAhjB,EAAAgjB,EAAAlM,GACAF,EAAAG,GAAAkM,EAAAnM,GAAAkM,EAAAryC,EAAAsyC,EAAAlM,GAAAiM,EAAAhM,EAAAgM,EAAAjM,KAUA3rC,EAAAD,QAAAu1C,IAIAL,UAAA,GAAA6C,oBAAA,KAAAC,IAAA,SAAA92C,EAAAjB,EAAAD,GAkBA,QAAAi4C,KAEA/G,EAAA3vC,KAAAf,MAQAA,KAAA03C,UAAA,EAQA13C,KAAA23C,UAAA,EAQA33C,KAAA43C,UAAA,EAQA53C,KAAA63C,gBAQA73C,KAAA83C,KAAA,SASA93C,KAAA+3C,UAAA,SASA/3C,KAAAg4C,UAAAjL,EAAAW,YAAAC,OAQA3tC,KAAAi4C,YAAA,KASAj4C,KAAAk4C,UAOAl4C,KAAAm4C,QAAA,EAOAn4C,KAAAo4C,cAAA,EAQAp4C,KAAAq4C,aAAA,GAAA1H,GAAAqC,UAAA,EAAA,EAAA,EAAA,GASAhzC,KAAA+J,OAAA,EASA/J,KAAAs4C,SAAA,EAEAt4C,KAAAu4C,aAAA,EAQAv4C,KAAAw4C,mBAAA,EAhJA,GAAA9H,GAAAhwC,EAAA,wBACAgD,EAAAhD,EAAA,uBACA+3C,EAAA/3C,EAAA,0CACAg4C,EAAAh4C,EAAA,4CACAi4C,EAAAj4C,EAAA,kBACAiwC,EAAAjwC,EAAA,WACAqsC,EAAArsC,EAAA,YACAk4C,EAAA,GAAAjI,GAAAkI,KA0JApB,GAAA50C,UAAA0M,OAAA/L,OAAAktC,EAAA7tC,WACA40C,EAAA50C,UAAAmH,YAAAytC,EACAh4C,EAAAD,QAAAi4C,EAQAA,EAAA50C,UAAAi2C,MAAA,WAEA,GAAAA,GAAA,GAAArB,EAEAqB,GAAAnF,WAAA3zC,KAAA2zC,WACAmF,EAAApB,UAAA13C,KAAA03C,UACAoB,EAAAnB,UAAA33C,KAAA23C,UACAmB,EAAAlB,UAAA53C,KAAA43C,UACAkB,EAAAhB,KAAA93C,KAAA83C,KACAgB,EAAAd,UAAAh4C,KAAAg4C,UACAc,EAAAX,OAAAn4C,KAAAm4C,OACAW,EAAAV,cAAAp4C,KAAAo4C,cACAU,EAAA/uC,OAAA,EACA+uC,EAAAR,SAAA,EACAQ,EAAAN,kBAAAx4C,KAAAw4C,iBAGA,KAAA,GAAA73C,GAAA,EAAAA,EAAAX,KAAA63C,aAAA72C,SAAAL,EAEAm4C,EAAAjB,aAAAltC,KAAA3K,KAAA63C,aAAAl3C,GAAAm4C,QAOA,OAJAA,GAAAb,YAAAa,EAAAjB,aAAAiB,EAAAjB,aAAA72C,OAAA,GAEA83C,EAAAC,oBAEAD,GAWArB,EAAA50C,UAAAm2C,UAAA,SAAArB,EAAAsB,EAAApG,GAMA,GAJA7yC,KAAA23C,UAAAA,GAAA,EACA33C,KAAA43C,UAAAqB,GAAA,EACAj5C,KAAAk5C,UAAAhxC,SAAA2qC,EAAA,EAAAA,EAEA7yC,KAAAi4C,YAEA,GAAAj4C,KAAAi4C,YAAAkB,MAAAC,OAAAp4C,OACA,CAEA,GAAAm4C,GAAA,GAAAxI,GAAA0I,QAAAr5C,KAAAi4C,YAAAkB,MAAAC,OAAA56B,MAAA,IACA26B,GAAAG,QAAA,EACAt5C,KAAAu5C,UAAAJ,OAKAn5C,MAAAi4C,YAAAN,UAAA33C,KAAA23C,UACA33C,KAAAi4C,YAAAL,UAAA53C,KAAA43C,UACA53C,KAAAi4C,YAAAiB,UAAAl5C,KAAAk5C,SAIA,OAAAl5C,OAUAy3C,EAAA50C,UAAA22C,OAAA,SAAA7kC,EAAAmD,GAEA,GAAAqhC,GAAA,GAAAxI,GAAA0I,SAAA1kC,EAAAmD,GAIA,OAHAqhC,GAAAG,QAAA,EACAt5C,KAAAu5C,UAAAJ,GAEAn5C,MAWAy3C,EAAA50C,UAAA42C,OAAA,SAAA9kC,EAAAmD,GAKA,MAHA9X,MAAAi4C,YAAAkB,MAAAC,OAAAzuC,KAAAgK,EAAAmD,GACA9X,KAAA+J,OAAA,EAEA/J,MAaAy3C,EAAA50C,UAAA62C,iBAAA,SAAAC,EAAAC,EAAAC,EAAAC,GAEA95C,KAAAi4C,YAEA,IAAAj4C,KAAAi4C,YAAAkB,MAAAC,OAAAp4C,SAEAhB,KAAAi4C,YAAAkB,MAAAC,QAAA,EAAA,IAKAp5C,KAAAw5C,OAAA,EAAA,EAGA,IAAAO,GACAC,EACA55C,EAAA,GACAg5C,EAAAp5C,KAAAi4C,YAAAkB,MAAAC,MAEA,KAAAA,EAAAp4C,QAEAhB,KAAAw5C,OAAA,EAAA,EAOA,KAAA,GAJAS,GAAAb,EAAAA,EAAAp4C,OAAA,GACAk5C,EAAAd,EAAAA,EAAAp4C,OAAA,GAEA0oB,EAAA,EACA/oB,EAAA,EAAAP,GAAAO,IAAAA,EAEA+oB,EAAA/oB,EAAAP,EAEA25C,EAAAE,GAAAN,EAAAM,GAAAvwB,EACAswB,EAAAE,GAAAN,EAAAM,GAAAxwB,EAEA0vB,EAAAzuC,KAAAovC,GAAAJ,GAAAE,EAAAF,GAAAjwB,EAAAqwB,GAAArwB,EACAswB,GAAAJ,GAAAE,EAAAF,GAAAlwB,EAAAswB,GAAAtwB,EAKA,OAFA1pB,MAAA+J,MAAA/J,KAAAu4C,aAAA,EAEAv4C,MAcAy3C,EAAA50C,UAAAs3C,cAAA,SAAAR,EAAAC,EAAAQ,EAAAC,EAAAR,EAAAC,GAEA95C,KAAAi4C,YAEA,IAAAj4C,KAAAi4C,YAAAkB,MAAAC,OAAAp4C,SAEAhB,KAAAi4C,YAAAkB,MAAAC,QAAA,EAAA,IAKAp5C,KAAAw5C,OAAA,EAAA,EAgBA,KAAA,GAZAc,GACAC,EACAC,EACAC,EACAC,EALAt6C,EAAA,GAMAg5C,EAAAp5C,KAAAi4C,YAAAkB,MAAAC,OAEAa,EAAAb,EAAAA,EAAAp4C,OAAA,GACAk5C,EAAAd,EAAAA,EAAAp4C,OAAA,GAEA0oB,EAAA,EAEA/oB,EAAA,EAAAP,GAAAO,IAAAA,EAEA+oB,EAAA/oB,EAAAP,EAEAk6C,EAAA,EAAA5wB,EACA6wB,EAAAD,EAAAA,EACAE,EAAAD,EAAAD,EAEAG,EAAA/wB,EAAAA,EACAgxB,EAAAD,EAAA/wB,EAEA0vB,EAAAzuC,KAAA6vC,EAAAP,EAAA,EAAAM,EAAA7wB,EAAAiwB,EAAA,EAAAW,EAAAG,EAAAL,EAAAM,EAAAb,EACAW,EAAAN,EAAA,EAAAK,EAAA7wB,EAAAkwB,EAAA,EAAAU,EAAAG,EAAAJ,EAAAK,EAAAZ,EAKA,OAFA95C,MAAA+J,MAAA/J,KAAAu4C,aAAA,EAEAv4C,MAeAy3C,EAAA50C,UAAA83C,MAAA,SAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAEAh7C,KAAAi4C,YAEA,IAAAj4C,KAAAi4C,YAAAkB,MAAAC,OAAAp4C,QAEAhB,KAAAi4C,YAAAkB,MAAAC,OAAAzuC,KAAAiwC,EAAAC,GAKA76C,KAAAw5C,OAAAoB,EAAAC,EAGA,IAAAzB,GAAAp5C,KAAAi4C,YAAAkB,MAAAC,OACAa,EAAAb,EAAAA,EAAAp4C,OAAA,GACAk5C,EAAAd,EAAAA,EAAAp4C,OAAA,GACAw3B,EAAA0hB,EAAAW,EACAI,EAAAhB,EAAAW,EACApjB,EAAAujB,EAAAF,EACAnjB,EAAAojB,EAAAF,EACAM,EAAA1lC,KAAAygB,IAAAuC,EAAAd,EAAAujB,EAAAzjB,EAEA,IAAA,KAAA0jB,GAAA,IAAAF,GAEA5B,EAAAA,EAAAp4C,OAAA,KAAA45C,GAAAxB,EAAAA,EAAAp4C,OAAA,KAAA65C,IAEAzB,EAAAzuC,KAAAiwC,EAAAC,OAIA,CACA,GAAAM,GAAA3iB,EAAAA,EAAAyiB,EAAAA,EACAG,EAAA5jB,EAAAA,EAAAE,EAAAA,EACA2jB,EAAA7iB,EAAAhB,EAAAyjB,EAAAvjB,EACA4jB,EAAAN,EAAAxlC,KAAA+lC,KAAAJ,GAAAD,EACAM,EAAAR,EAAAxlC,KAAA+lC,KAAAH,GAAAF,EACAO,EAAAH,EAAAD,EAAAF,EACAO,EAAAF,EAAAH,EAAAD,EACAvkB,EAAAykB,EAAA5jB,EAAA8jB,EAAAP,EACAnkB,EAAAwkB,EAAA9jB,EAAAgkB,EAAAhjB,EACAzB,EAAAkkB,GAAAO,EAAAC,GACAzkB,EAAAwB,GAAAgjB,EAAAC,GACA5lB,EAAA6B,GAAA4jB,EAAAI,GACAC,EAAAnkB,GAAA8jB,EAAAI,GACAE,EAAApmC,KAAAqmC,MAAA7kB,EAAAF,EAAAC,EAAAF,GACAilB,EAAAtmC,KAAAqmC,MAAAF,EAAA7kB,EAAAjB,EAAAgB,EAEA72B,MAAA+7C,IAAAllB,EAAA+jB,EAAA9jB,EAAA+jB,EAAAG,EAAAY,EAAAE,EAAAb,EAAAzjB,EAAAE,EAAAc,GAKA,MAFAx4B,MAAA+J,MAAA/J,KAAAu4C,aAAA,EAEAv4C,MAcAy3C,EAAA50C,UAAAk5C,IAAA,SAAAllB,EAAAC,EAAAkkB,EAAAY,EAAAE,EAAAE,GAIA,GAFAA,EAAAA,IAAA,EAEAJ,IAAAE,EAEA,MAAA97C,OAGAg8C,GAAAJ,GAAAE,EAEAA,GAAA,EAAAtmC,KAAA03B,GAEA8O,GAAAF,GAAAF,IAEAA,GAAA,EAAApmC,KAAA03B,GAGA,IAAA+O,GAAAD,EAAA,IAAAJ,EAAAE,GAAAA,EAAAF,EACAM,EAAA,GAAA1mC,KAAA2mC,KAAA3mC,KAAAygB,IAAAgmB,IAAA,EAAAzmC,KAAA03B,IAEA,IAAA,IAAA+O,EAEA,MAAAj8C,KAGA,IAAAo8C,GAAAvlB,EAAArhB,KAAAogC,IAAAgG,GAAAZ,EACAqB,EAAAvlB,EAAAthB,KAAAmgC,IAAAiG,GAAAZ,CAEAh7C,MAAAi4C,YAEAj4C,KAAAi4C,YAAAkB,MAAAC,OAAAzuC,KAAAyxC,EAAAC,GAIAr8C,KAAAw5C,OAAA4C,EAAAC,EAeA,KAAA,GAZAjD,GAAAp5C,KAAAi4C,YAAAkB,MAAAC,OAEAkD,EAAAL,GAAA,EAAAC,GACAK,EAAA,EAAAD,EAEAE,EAAAhnC,KAAAogC,IAAA0G,GACAG,EAAAjnC,KAAAmgC,IAAA2G,GAEAI,EAAAR,EAAA,EAEAS,EAAAD,EAAA,EAAAA,EAEA/7C,EAAA,EAAA+7C,GAAA/7C,EAAAA,IACA,CACA,GAAAi8C,GAAAj8C,EAAAg8C,EAAAh8C,EAGAk8C,EAAA,EAAAjB,EAAAW,EAAAK,EAEAvoB,EAAA7e,KAAAogC,IAAAiH,GACAv8C,GAAAkV,KAAAmgC,IAAAkH,EAEAzD,GAAAzuC,MAAA6xC,EAAAnoB,EAAAooB,EAAAn8C,GAAA06C,EAAAnkB,GACA2lB,GAAAl8C,EAAAm8C,EAAApoB,GAAA2mB,EAAAlkB,GAKA,MAFA92B,MAAA+J,MAAA/J,KAAAu4C,aAAA,EAEAv4C,MAWAy3C,EAAA50C,UAAAi6C,UAAA,SAAA7D,EAAApG,GAeA,MAbA7yC,MAAA+8C,SAAA,EACA/8C,KAAAg9C,UAAA/D,GAAA,EACAj5C,KAAA03C,UAAAxvC,SAAA2qC,EAAA,EAAAA,EAEA7yC,KAAAi4C,aAEAj4C,KAAAi4C,YAAAkB,MAAAC,OAAAp4C,QAAA,IAEAhB,KAAAi4C,YAAAgF,KAAAj9C,KAAA+8C,QACA/8C,KAAAi4C,YAAA+E,UAAAh9C,KAAAg9C,UACAh9C,KAAAi4C,YAAAP,UAAA13C,KAAA03C,WAGA13C,MAQAy3C,EAAA50C,UAAAq6C,QAAA,WAMA,MAJAl9C,MAAA+8C,SAAA,EACA/8C,KAAAg9C,UAAA,KACAh9C,KAAA03C,UAAA,EAEA13C,MAWAy3C,EAAA50C,UAAAs6C,SAAA,SAAAxoC,EAAAmD,EAAAlU,EAAAC,GAIA,MAFA7D,MAAAu5C,UAAA,GAAA5I,GAAAqC,UAAAr+B,EAAAmD,EAAAlU,EAAAC,IAEA7D,MAYAy3C,EAAA50C,UAAAu6C,gBAAA,SAAAzoC,EAAAmD,EAAAlU,EAAAC,EAAAm3C,GAIA,MAFAh7C,MAAAu5C,UAAA,GAAA5I,GAAA0M,iBAAA1oC,EAAAmD,EAAAlU,EAAAC,EAAAm3C,IAEAh7C,MAWAy3C,EAAA50C,UAAAy6C,WAAA,SAAA3oC,EAAAmD,EAAAkjC,GAIA,MAFAh7C,MAAAu5C,UAAA,GAAA5I,GAAA4M,OAAA5oC,EAAAmD,EAAAkjC,IAEAh7C,MAYAy3C,EAAA50C,UAAA26C,YAAA,SAAA7oC,EAAAmD,EAAAlU,EAAAC,GAIA,MAFA7D,MAAAu5C,UAAA,GAAA5I,GAAA8M,QAAA9oC,EAAAmD,EAAAlU,EAAAC,IAEA7D,MASAy3C,EAAA50C,UAAA66C,YAAA,SAAAn5B,GAIA,GAAA60B,GAAA70B,EAEA+0B,GAAA,CAQA,IANAF,YAAAzI,GAAA0I,UAEAC,EAAAF,EAAAE,OACAF,EAAAA,EAAAA,SAGAttC,MAAA4O,QAAA0+B,GACA,CAGAA,EAAA,GAAAttC,OAAA+H,UAAA7S,OAEA,KAAA,GAAAL,GAAA,EAAAA,EAAAy4C,EAAAp4C,SAAAL,EAEAy4C,EAAAz4C,GAAAkT,UAAAlT,GAIA,GAAAw4C,GAAA,GAAAxI,GAAA0I,QAAAD,EAKA,OAJAD,GAAAG,OAAAA,EAEAt5C,KAAAu5C,UAAAJ,GAEAn5C,MAQAy3C,EAAA50C,UAAAkC,MAAA,WASA,MAPA/E,MAAA23C,UAAA,EACA33C,KAAA+8C,SAAA,EAEA/8C,KAAA+J,OAAA,EACA/J,KAAA29C,YAAA,EACA39C,KAAA63C,gBAEA73C,MAWAy3C,EAAA50C,UAAAyvC,gBAAA,SAAAzJ,EAAA4G,EAAA8C,GAGA9C,EAAAA,GAAA,CAEA,IAAA+C,GAAAxyC,KAAAixC,iBAEA2M,EAAA,GAAAnF,GAAAjG,EAAA5uC,MAAA6rC,EAAA+C,EAAA3uC,OAAA4rC,GAEAxrC,EAAAP,EAAAm6C,WAAAD,EAAAxyC,OAAAmnC,EASA,OARAtuC,GAAA65C,YAAArO,WAAAA,EAEAmO,EAAA7lB,QAAAiZ,MAAAvB,EAAAA,GAEAmO,EAAA7lB,QAAAgmB,WAAAvL,EAAA79B,GAAA69B,EAAA16B,GAEA4gC,EAAAsF,eAAAh+C,KAAA49C,EAAA7lB,SAEA9zB,GASAwzC,EAAA50C,UAAAuxC,aAAA,SAAAvL,GAIA7oC,KAAAs4C,UAEAt4C,KAAA+J,OAAA,EACA/J,KAAAs4C,SAAA,GAGAzP,EAAAoV,kBAAApV,EAAAmD,QAAAkS,UACArV,EAAAmD,QAAAkS,SAAAxL,OAAA1yC,OAUAy3C,EAAA50C,UAAA0xC,cAAA,SAAA1L,GAEA,GAAA7oC,KAAAm4C,UAAA,EAAA,CAMAn4C,KAAA+3C,YAAA/3C,KAAA83C,OACA93C,KAAA+J,OAAA,EA0BA,IAAAguB,GAAA8Q,EAAA9Q,QACAtb,EAAAzc,KAAAkrC,eAEAiT,EAAAtV,EAAAuV,WAAAp+C,KAAAg4C,UACAmG,KAAApmB,EAAAsmB,2BAEAtmB,EAAAsmB,yBAAAF,EAGA,IAAA1O,GAAA5G,EAAA4G;AACA1X,EAAAye,aACA/5B,EAAAhc,EAAAgvC,EACAhzB,EAAAzX,EAAAyqC,EACAhzB,EAAA4X,EAAAob,EACAhzB,EAAA4uB,EAAAoE,EACAhzB,EAAA0uB,GAAAsE,EACAhzB,EAAA2uB,GAAAqE,GAGAiJ,EAAAsF,eAAAh+C,KAAA+3B,KAUA0f,EAAA50C,UAAAyoC,UAAA,SAAA2K,GAEA,IAAAj2C,KAAA+yC,eACA,CAGA,IAAA/yC,KAAA2zC,WAEA,MAAAhD,GAAAqC,UAAAC,KAGAjzC,MAAAu4C,cAEAv4C,KAAA+4C,oBAEA/4C,KAAAs4C,SAAA,EACAt4C,KAAAw4C,mBAAA,EACAx4C,KAAAu4C,aAAA,EAGA,IAAA/F,GAAAxyC,KAAAq4C,aAEAiG,EAAA9L,EAAA79B,EACA4pC,EAAA/L,EAAA5uC,MAAA4uC,EAAA79B,EAEA6pC,EAAAhM,EAAA16B,EACA2mC,EAAAjM,EAAA3uC,OAAA2uC,EAAA16B,EAEAozB,EAAA+K,GAAAj2C,KAAAkrC,eAEAzqC,EAAAyqC,EAAAzqC,EACAuE,EAAAkmC,EAAAlmC,EACAqvB,EAAA6W,EAAA7W,EACAgX,EAAAH,EAAAG,EACAF,EAAAD,EAAAC,GACAC,EAAAF,EAAAE,GAEAwP,EAAAn6C,EAAA89C,EAAAlqB,EAAAoqB,EAAAtT,EACA0P,EAAAxP,EAAAoT,EAAAz5C,EAAAu5C,EAAAnT,EAEA0P,EAAAr6C,EAAA69C,EAAAjqB,EAAAoqB,EAAAtT,EACA4P,EAAA1P,EAAAoT,EAAAz5C,EAAAs5C,EAAAlT,EAEAsT,EAAAj+C,EAAA69C,EAAAjqB,EAAAmqB,EAAArT,EACAwT,EAAAtT,EAAAmT,EAAAx5C,EAAAs5C,EAAAlT,EAEAwT,EAAAn+C,EAAA89C,EAAAlqB,EAAAmqB,EAAArT,EACA0T,EAAAxT,EAAAmT,EAAAx5C,EAAAu5C,EAAAnT,EAEArY,EAAA6nB,EACA5nB,EAAA6nB,EAEAhoB,EAAA+nB,EACA9nB,EAAA+nB,CAEAhoB,GAAAA,EAAAioB,EAAAA,EAAAjoB,EACAA,EAAAA,EAAA6rB,EAAAA,EAAA7rB,EACAA,EAAAA,EAAA+rB,EAAAA,EAAA/rB,EAEAC,EAAAA,EAAAioB,EAAAA,EAAAjoB,EACAA,EAAAA,EAAA6rB,EAAAA,EAAA7rB,EACAA,EAAAA,EAAA+rB,EAAAA,EAAA/rB,EAEAC,EAAA+nB,EAAA/nB,EAAA+nB,EAAA/nB,EACAA,EAAA2rB,EAAA3rB,EAAA2rB,EAAA3rB,EACAA,EAAA6rB,EAAA7rB,EAAA6rB,EAAA7rB,EAEAC,EAAA+nB,EAAA/nB,EAAA+nB,EAAA/nB,EACAA,EAAA2rB,EAAA3rB,EAAA2rB,EAAA3rB,EACAA,EAAA6rB,EAAA7rB,EAAA6rB,EAAA7rB,EAEAhzB,KAAAszC,QAAA3+B,EAAAke,EACA7yB,KAAAszC,QAAA1vC,MAAAmvB,EAAAF,EAEA7yB,KAAAszC,QAAAx7B,EAAAgb,EACA9yB,KAAAszC,QAAAzvC,OAAAmvB,EAAAF,EAEA9yB,KAAA+yC,eAAA/yC,KAAAszC,QAGA,MAAAtzC,MAAA+yC,gBASA0E,EAAA50C,UAAAi8C,cAAA,SAAA1I,GAEAp2C,KAAAkrC,eAAAmL,aAAAD,EAAAwC,EAIA,KAAA,GAFAf,GAAA73C,KAAA63C,aAEAl3C,EAAA,EAAAA,EAAAk3C,EAAA72C,OAAAL,IACA,CACA,GAAA2B,GAAAu1C,EAAAl3C,EAEA,IAAA2B,EAAA26C,MAMA36C,EAAA62C,OAEA72C,EAAA62C,MAAA4F,SAAAnG,EAAAjkC,EAAAikC,EAAA9gC,GAEA,OAAA,EAKA,OAAA,GAOA2/B,EAAA50C,UAAAk2C,kBAAA,WAEA,GAAAlmB,GAAAiD,EAAAA,EACA/C,IAAA+C,EAAAA,GAEAhD,EAAAgD,EAAAA,EACA9C,IAAA8C,EAAAA,EAEA,IAAA91B,KAAA63C,aAAA72C,OAIA,IAAA,GAFAm4C,GAAAC,EAAAzkC,EAAAmD,EAAA2B,EAAA2X,EAEAzwB,EAAA,EAAAA,EAAAX,KAAA63C,aAAA72C,OAAAL,IACA,CACA,GAAA2B,GAAAtC,KAAA63C,aAAAl3C,GACA0B,EAAAC,EAAAD,KACAs1C,EAAAr1C,EAAAq1C,SAGA,IAFAwB,EAAA72C,EAAA62C,MAEA92C,IAAA0qC,EAAAkD,OAAAE,MAAA9tC,IAAA0qC,EAAAkD,OAAAK,KAEA37B,EAAAwkC,EAAAxkC,EAAAgjC,EAAA,EACA7/B,EAAAqhC,EAAArhC,EAAA6/B,EAAA,EACAl+B,EAAA0/B,EAAAv1C,MAAA+zC,EACAvmB,EAAA+nB,EAAAt1C,OAAA8zC,EAEA9kB,EAAAA,EAAAle,EAAAA,EAAAke,EACAE,EAAApe,EAAA8E,EAAAsZ,EAAApe,EAAA8E,EAAAsZ,EAEAD,EAAAA,EAAAhb,EAAAA,EAAAgb,EACAE,EAAAlb,EAAAsZ,EAAA4B,EAAAlb,EAAAsZ,EAAA4B,MAEA,IAAA3wB,IAAA0qC,EAAAkD,OAAAG,KAEAz7B,EAAAwkC,EAAAxkC,EACAmD,EAAAqhC,EAAArhC,EACA2B,EAAA0/B,EAAA6B,OAAArD,EAAA,EACAvmB,EAAA+nB,EAAA6B,OAAArD,EAAA,EAEA9kB,EAAAA,EAAAle,EAAA8E,EAAA9E,EAAA8E,EAAAoZ,EACAE,EAAApe,EAAA8E,EAAAsZ,EAAApe,EAAA8E,EAAAsZ,EAEAD,EAAAA,EAAAhb,EAAAsZ,EAAAtZ,EAAAsZ,EAAA0B,EACAE,EAAAlb,EAAAsZ,EAAA4B,EAAAlb,EAAAsZ,EAAA4B,MAEA,IAAA3wB,IAAA0qC,EAAAkD,OAAAI,KAEA17B,EAAAwkC,EAAAxkC,EACAmD,EAAAqhC,EAAArhC,EACA2B,EAAA0/B,EAAAv1C,MAAA+zC,EAAA,EACAvmB,EAAA+nB,EAAAt1C,OAAA8zC,EAAA,EAEA9kB,EAAAA,EAAAle,EAAA8E,EAAA9E,EAAA8E,EAAAoZ,EACAE,EAAApe,EAAA8E,EAAAsZ,EAAApe,EAAA8E,EAAAsZ,EAEAD,EAAAA,EAAAhb,EAAAsZ,EAAAtZ,EAAAsZ,EAAA0B,EACAE,EAAAlb,EAAAsZ,EAAA4B,EAAAlb,EAAAsZ,EAAA4B,MAGA,CAEAomB,EAAAD,EAAAC,MAEA,KAAA,GAAA1vB,GAAA,EAAAA,EAAA0vB,EAAAp4C,OAAA0oB,GAAA,EAEA/U,EAAAykC,EAAA1vB,GACA5R,EAAAshC,EAAA1vB,EAAA,GAEAmJ,EAAAA,EAAAle,EAAAgjC,EAAAhjC,EAAAgjC,EAAA9kB,EACAE,EAAApe,EAAAgjC,EAAA5kB,EAAApe,EAAAgjC,EAAA5kB,EAEAD,EAAAA,EAAAhb,EAAA6/B,EAAA7/B,EAAA6/B,EAAA7kB,EACAE,EAAAlb,EAAA6/B,EAAA3kB,EAAAlb,EAAA6/B,EAAA3kB,OAOAH,GAAA,EACAE,EAAA,EACAD,EAAA,EACAE,EAAA,CAGA,IAAAgsB,GAAAh/C,KAAAo4C,aAEAp4C,MAAAq4C,aAAA1jC,EAAAke,EAAAmsB,EACAh/C,KAAAq4C,aAAAz0C,MAAAmvB,EAAAF,EAAA,EAAAmsB,EAEAh/C,KAAAq4C,aAAAvgC,EAAAgb,EAAAksB,EACAh/C,KAAAq4C,aAAAx0C,OAAAmvB,EAAAF,EAAA,EAAAksB,GAwFAvH,EAAA50C,UAAA02C,UAAA,SAAAJ,GAEAn5C,KAAAi4C,aAGAj4C,KAAAi4C,YAAAkB,MAAAC,OAAAp4C,QAAA,GAEAhB,KAAA63C,aAAA59B,MAIAja,KAAAi4C,YAAA,IAEA,IAAA31C,GAAA,GAAAq2C,GAAA34C,KAAA23C,UAAA33C,KAAA43C,UAAA53C,KAAAk5C,UAAAl5C,KAAAg9C,UAAAh9C,KAAA03C,UAAA13C,KAAA+8C,QAAA5D,EAYA,OAVAn5C,MAAA63C,aAAAltC,KAAArI,GAEAA,EAAAD,OAAA0qC,EAAAkD,OAAAC,OAEA5tC,EAAA62C,MAAAG,OAAAh3C,EAAA62C,MAAAG,QAAAt5C,KAAA+8C,QACA/8C,KAAAi4C,YAAA31C,GAGAtC,KAAA+J,MAAA/J,KAAAu4C,aAAA,EAEAj2C,GAMAm1C,EAAA50C,UAAA0C,QAAA,WACAmrC,EAAA7tC,UAAA0C,QAAAqO,MAAA5T,KAAA6T,UAGA,KAAA,GAAAlT,GAAA,EAAAA,EAAAX,KAAA63C,aAAA72C,SAAAL,EACAX,KAAA63C,aAAAl3C,GAAA4E,SAIA,KAAA,GAAA+F,KAAAtL,MAAAi/C,OACA,IAAA,GAAAv1B,GAAA,EAAAA,EAAA1pB,KAAAi/C,OAAA3zC,GAAAhJ,KAAAtB,SAAA0oB,EACA1pB,KAAAi/C,OAAA3zC,GAAAhJ,KAAAonB,GAAAnkB,SAIAvF,MAAA63C,aAAA,KAEA73C,KAAAi4C,YAAA,KACAj4C,KAAAi/C,OAAA,KACAj/C,KAAAq4C,aAAA,QAGAxB,WAAA,GAAAqI,uBAAA,GAAAxK,UAAA,GAAAyK,yCAAA,GAAAC,2CAAA,GAAAC,sBAAA,IAAAC,iBAAA,KAAAC,IAAA,SAAA7+C,EAAAjB,EAAAD,GAcA,QAAAm5C,GAAAhB,EAAAC,EAAAsB,EAAA8D,EAAAtF,EAAAuF,EAAA9D,GAKAn5C,KAAA23C,UAAAA,EAKA33C,KAAA43C,UAAAA,EAIA53C,KAAAk5C,UAAAA,EAIAl5C,KAAAw/C,UAAA5H,EAKA53C,KAAAg9C,UAAAA,EAKAh9C,KAAA03C,UAAAA,EAKA13C,KAAAy/C,UAAAzC,EAKAh9C,KAAAi9C,KAAAA,EAKAj9C,KAAAm5C,MAAAA,EAKAn5C,KAAAqC,KAAA82C,EAAA92C,KAGAs2C,EAAA91C,UAAAmH,YAAA2uC,EACAl5C,EAAAD,QAAAm5C,EAOAA,EAAA91C,UAAAi2C,MAAA,WAEA,MAAA,IAAAH,GACA34C,KAAA23C,UACA33C,KAAA43C,UACA53C,KAAAk5C,UACAl5C,KAAAg9C,UACAh9C,KAAA03C,UACA13C,KAAAi9C,KACAj9C,KAAAm5C,QAOAR,EAAA91C,UAAA0C,QAAA,WACAvF,KAAAm5C,MAAA,WAGAuG,IAAA,SAAAh/C,EAAAjB,EAAAD,GA4BA,QAAAmgD,GAAA9W,GAEA+W,EAAA7+C,KAAAf,KAAA6oC,GAEA7oC,KAAA6/C,oBAEA7/C,KAAA8/C,gBAAA,KACA9/C,KAAA+/C,uBAAA,KAEA//C,KAAAoC,GAAAymC,EAAAzmC,GAMApC,KAAAggD,sBAAA,IA1CA,GAAAnV,GAAAnqC,EAAA,eAEAqsC,GADArsC,EAAA,cACAA,EAAA,gBACAk/C,EAAAl/C,EAAA,8CACA2rC,EAAA3rC,EAAA,uCACAu/C,EAAAv/C,EAAA,uBACAw/C,EAAAx/C,EAAA,6BAGAy/C,EAAAz/C,EAAA,oBACA0/C,WAAA1/C,EAAA,qBACA2/C,iBAAA3/C,EAAA,4BACA4/C,eAAA5/C,EAAA,0BACA6/C,sBAAA7/C,EAAA,iCACA8/C,YAAA9/C,EAAA,uBAEA2xB,OAAA3xB,EAAA,UA6BAi/C,EAAA98C,UAAA0M,OAAA/L,OAAAo8C,EAAA/8C,WACA88C,EAAA98C,UAAAmH,YAAA21C,EACAlgD,EAAAD,QAAAmgD,EAEAtT,EAAAC,eAAA,WAAAqT,GAQAA,EAAA98C,UAAA49C,gBAAA,WAEAzgD,KAAAoC,GAAApC,KAAA6oC,SAAAzmC,GACApC,KAAA8/C,gBAAA,GAAAI,GAAAlgD,KAAAoC,KAOAu9C,EAAA98C,UAAA0C,QAAA,WACAq6C,EAAA/8C,UAAA0C,QAAAxE,KAAAf,KAEA,KAAA,GAAAW,GAAA,EAAAA,EAAAX,KAAA6/C,iBAAA7+C,SAAAL,EACAX,KAAA6/C,iBAAAl/C,GAAA4E,SAGAvF,MAAA6/C,iBAAA,MAQAF,EAAA98C,UAAA6vC,OAAA,SAAAwL,GAEA,GAGAwC,GAHA7X,EAAA7oC,KAAA6oC,SACAzmC,EAAAymC,EAAAzmC,IAIA87C,EAAAn0C,QAAAm0C,EAAAhG,OAAA91C,EAAAkJ,MAEAtL,KAAA2gD,eAAAzC,EAGA,IAAA0C,GAAA1C,EAAAhG,OAAA91C,EAAAkJ,GAIAu9B,GAAAgY,iBAAAC,aAAA5C,EAAAlG,UAMA,KAAA,GAAAr3C,GAAA,EAAAP,EAAAwgD,EAAAt+C,KAAAtB,OAAAZ,EAAAO,EAAAA,IAEA+/C,EAAAE,EAAAt+C,KAAA3B,GAEA,IAAAigD,EAAAt+C,KAAA3B,GAAAogD,OAkBA1zC,OAAArN,KAAA8/C,gBAEAjX,EAAAmY,WAAA3zC,QAEAA,OAAA1G,SAAAs6C,kBAAA/C,EAAAhT,eAAAgW,SAAA,GACA7zC,OAAA1G,SAAAmxC,KAAAjN,EAAAsW,QAAAjD,EAAApG,MACAzqC,OAAA1G,SAAAksC,MAAAqL,EAAAtL,WAGAxwC,EAAAgB,WAAAhB,EAAAM,aAAAg+C,EAAAl+C,QAEA6K,OAAArN,KAAA8/C,gBAEAzyC,OAAA5G,WAAA26C,gBAAA/2C,QAAAjI,EAAA4F,OAAA,EAAA,GAAA,GACAqF,OAAA5G,WAAA46C,OAAAh3C,QAAAjI,EAAA4F,OAAA,EAAA,GAAA,GAEA5F,EAAAqI,wBAAA4C,OAAA5G,WAAA26C,gBAAAn5C,UACA7F,EAAAqI,wBAAA4C,OAAA5G,WAAA46C,OAAAp5C,UAGA7F,EAAAgB,WAAAhB,EAAAmB,qBAAAm9C,EAAA52C,aACA1H,EAAA4I,aAAA5I,EAAA8sC,eAAAwR,EAAAY,QAAAtgD,OAAAoB,EAAA6I,eAAA,IAGA49B,EAAA0Y,aAUA5B,EAAA98C,UAAA89C,eAAA,SAAAzC,GAEA,GAAA97C,GAAApC,KAAA6oC,SAAAzmC,GAGAw+C,EAAA1C,EAAAhG,OAAA91C,EAAAkJ,GAGAs1C,KAEAA,EAAA1C,EAAAhG,OAAA91C,EAAAkJ,KAAAk2C,UAAA,EAAAl/C,QAAAF,GAAAA,IAKA87C,EAAAn0C,OAAA,CAEA,IAAApJ,EAGA,IAAAu9C,EAAAP,WACA,CAIA,IAHAO,EAAAP,YAAA,EAGAh9C,EAAA,EAAAA,EAAAigD,EAAAt+C,KAAAtB,OAAAL,IACA,CACA,GAAAk3C,GAAA+I,EAAAt+C,KAAA3B,EACAk3C,GAAAhc,QACA77B,KAAA6/C,iBAAAl1C,KAAAktC,GAIA+I,EAAAt+C,QACAs+C,EAAAY,UAAA,EAGA,GAAAd,EAKA,KAAA//C,EAAAigD,EAAAY,UAAA7gD,EAAAu9C,EAAArG,aAAA72C,OAAAL,IACA,CACA,GAAA2B,GAAA47C,EAAArG,aAAAl3C,EAEA,IAAA2B,EAAAD,OAAA0qC,EAAAkD,OAAAC,KACA,CAaA,GAXA5tC,EAAA82C,OAAA92C,EAAA62C,MAAAC,OAAA56B,QACAlc,EAAA62C,MAAAG,SAGAh3C,EAAA82C,OAAA,KAAA92C,EAAA82C,OAAA92C,EAAA82C,OAAAp4C,OAAA,IAAAsB,EAAA82C,OAAA,KAAA92C,EAAA82C,OAAA92C,EAAA82C,OAAAp4C,OAAA,KAEAsB,EAAA82C,OAAAzuC,KAAArI,EAAA82C,OAAA,GAAA92C,EAAA82C,OAAA,IAKA92C,EAAA26C,MAEA36C,EAAA82C,OAAAp4C,QAAA,EAEA,GAAAsB,EAAA82C,OAAAp4C,OAAA,EAAAhB,KAAAggD,sBACA,CACAU,EAAA1gD,KAAAyhD,WAAAb,EAAA,EAEA,IAAAc,GAAAtB,UAAA99C,EAAAo+C,EAEAgB,KAEAhB,EAAA1gD,KAAAyhD,WAAAb,EAAA,GACAP,iBAAA/9C,EAAAo+C,QAMAA,GAAA1gD,KAAAyhD,WAAAb,EAAA,GACAP,iBAAA/9C,EAAAo+C,EAKAp+C,GAAAq1C,UAAA,IAEA+I,EAAA1gD,KAAAyhD,WAAAb,EAAA,GACAT,EAAA79C,EAAAo+C,QAKAA,GAAA1gD,KAAAyhD,WAAAb,EAAA,GAEAt+C,EAAAD,OAAA0qC,EAAAkD,OAAAE,KAEAmQ,eAAAh+C,EAAAo+C,GAEAp+C,EAAAD,OAAA0qC,EAAAkD,OAAAG,MAAA9tC,EAAAD,OAAA0qC,EAAAkD,OAAAI,KAEAmQ,YAAAl+C,EAAAo+C,GAEAp+C,EAAAD,OAAA0qC,EAAAkD,OAAAK,MAEAiQ,sBAAAj+C,EAAAo+C,EAIAE,GAAAY,YAIA,IAAA7gD,EAAA,EAAAA,EAAAigD,EAAAt+C,KAAAtB,OAAAL,IAEA+/C,EAAAE,EAAAt+C,KAAA3B,GAEA+/C,EAAA32C,OAEA22C,EAAA99C,UAYA+8C,EAAA98C,UAAA4+C,WAAA,SAAAb,EAAAv+C,GAEA,GAAAq+C,EAsBA,OApBAE,GAAAt+C,KAAAtB,QAQA0/C,EAAAE,EAAAt+C,KAAAs+C,EAAAt+C,KAAAtB,OAAA,IAEA0/C,EAAAtH,OAAAp4C,OAAA,MAAA0/C,EAAAK,OAAA1+C,GAAA,IAAAA,KAEAq+C,EAAA1gD,KAAA6/C,iBAAA5lC,OAAA,GAAAgmC,GAAAW,EAAAx+C,IACAs+C,EAAAK,KAAA1+C,EACAu+C,EAAAt+C,KAAAqI,KAAA+1C,MAZAA,EAAA1gD,KAAA6/C,iBAAA5lC,OAAA,GAAAgmC,GAAAW,EAAAx+C,IACAs+C,EAAAK,KAAA1+C,EACAu+C,EAAAt+C,KAAAqI,KAAA+1C,IAcAA,EAAA32C,OAAA,EAEA22C,KAIAiB,cAAA,GAAAC,aAAA,GAAAC,sCAAA,GAAAC,6CAAA,GAAAC,cAAA,IAAAC,sBAAA,GAAAC,4BAAA,GAAAC,sBAAA,GAAAC,2BAAA,GAAAC,oBAAA,GAAAC,oBAAA,GAAAC,yBAAA,GAAAC,gCAAA,GAAAlwB,OAAA,KAAAmwB,IAAA,SAAA9hD,EAAAjB,EAAAD,GASA,QAAAygD,GAAA79C,GAOApC,KAAAoC,GAAAA,EAOApC,KAAAi5C,OAAA,EAAA,EAAA,GAMAj5C,KAAAo5C,UAMAp5C,KAAAshD,WAKAthD,KAAAwC,OAAAJ,EAAAK,eAMAzC,KAAA8J,YAAA1H,EAAAK,eAMAzC,KAAA+gD,KAAA,EAMA/gD,KAAA6yC,MAAA,EAMA7yC,KAAA+J,OAAA,EAEA/J,KAAAyiD,SAAA,KACAziD,KAAA0iD,UAAA,KAGAzC,EAAAp9C,UAAAmH,YAAAi2C,EACAxgD,EAAAD,QAAAygD,EAKAA,EAAAp9C,UAAAg5B,MAAA,WACA77B,KAAAo5C,OAAAp4C,OAAA,EACAhB,KAAAshD,QAAAtgD,OAAA,GAMAi/C,EAAAp9C,UAAAD,OAAA,WACA,GAAAR,GAAApC,KAAAoC,EAGApC,MAAAyiD,SAAA,GAAA56C,cAAA7H,KAAAo5C,QAEAh3C,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAAwC,QACAJ,EAAAe,WAAAf,EAAAM,aAAA1C,KAAAyiD,SAAArgD,EAAAO,aAEA3C,KAAA0iD,UAAA,GAAAC,aAAA3iD,KAAAshD,SAEAl/C,EAAAgB,WAAAhB,EAAAmB,qBAAAvD,KAAA8J,aACA1H,EAAAe,WAAAf,EAAAmB,qBAAAvD,KAAA0iD,UAAAtgD,EAAAO,aAEA3C,KAAA+J,OAAA,GAGAk2C,EAAAp9C,UAAA0C,QAAA,WACAvF,KAAAi5C,MAAA,KACAj5C,KAAAo5C,OAAA,KACAp5C,KAAAshD,QAAA,KAEAthD,KAAAoC,GAAAwgD,aAAA5iD,KAAAwC,QACAxC,KAAAoC,GAAAwgD,aAAA5iD,KAAA8J,aAEA9J,KAAAoC,GAAA,KAEApC,KAAAwC,OAAA,KACAxC,KAAA8J,YAAA,KAEA9J,KAAAyiD,SAAA,KACAziD,KAAA0iD,UAAA,WAGAG,IAAA,SAAAniD,EAAAjB,EAAAD,GAWA,QAAA0gD,GAAA99C,GAEAiE,EAAAtF,KAAAf,KACAoC,GAGA,kCACA,yBAEA,kCACA,iCAEA,uBACA,uBACA,qBAEA,uBAEA,mBACA,2GACA,kDACA,KACAwO,KAAA,OAGA,2BAEA,uBAEA,mBACA,4BACA,KACAA,KAAA,OA1CA,GAAAvK,GAAA3F,EAAA,gBAAAY,QA8CA4+C,GAAAr9C,UAAA0M,OAAA/L,OAAA6C,EAAAxD,WACAq9C,EAAAr9C,UAAAmH,YAAAk2C,EAEAzgD,EAAAD,QAAA0gD,IAEApZ,eAAA,IAAAgc,IAAA,SAAApiD,EAAAjB,EAAAD,GACA,GAAA2gD,GAAAz/C,EAAA,eACAmqC,EAAAnqC,EAAA,kBASA8/C,EAAA,SAAA3I,EAAA6I,GAGA,GAGA98C,GACAC,EAJAk/C,EAAAlL,EAAAsB,MACAxkC,EAAAouC,EAAApuC,EACAmD,EAAAirC,EAAAjrC,CAKA+/B,GAAAx1C,OAAA0qC,MAAAkD,OAAAG,MAEAxsC,EAAAm/C,EAAA/H,OACAn3C,EAAAk/C,EAAA/H,SAIAp3C,EAAAm/C,EAAAn/C,MACAC,EAAAk/C,EAAAl/C,OAGA,IAAAm/C,GAAAxtC,KAAAyT,MAAA,GAAAzT,KAAA+lC,KAAAwH,EAAA/H,UAAAxlC,KAAAyT,MAAA,GAAAzT,KAAA+lC,KAAAwH,EAAAn/C,MAAAm/C,EAAAl/C,SACAo/C,EAAA,EAAAztC,KAAA03B,GAAA8V,EAEAriD,EAAA,CAEA,IAAAk3C,EAAAoF,KACA,CACA,GAAAhE,GAAApO,EAAAsW,QAAAtJ,EAAAmF,WACAnK,EAAAgF,EAAAH,UAEAr3C,EAAA44C,EAAA,GAAApG,EACAjzC,EAAAq5C,EAAA,GAAApG,EACA7tC,EAAAi0C,EAAA,GAAApG,EAEAqQ,EAAAxC,EAAAtH,OACAkI,EAAAZ,EAAAY,QAEA6B,EAAAD,EAAAliD,OAAA,CAIA,KAFAsgD,EAAA32C,KAAAw4C,GAEAxiD,EAAA,EAAAqiD,EAAA,EAAAriD,EAAAA,IAEAuiD,EAAAv4C,KAAAgK,EAAAmD,EAAAzX,EAAAT,EAAAoF,EAAA6tC,GAEAqQ,EAAAv4C,KAAAgK,EAAAa,KAAAmgC,IAAAsN,EAAAtiD,GAAAiD,EACAkU,EAAAtC,KAAAogC,IAAAqN,EAAAtiD,GAAAkD,EACAxD,EAAAT,EAAAoF,EAAA6tC,GAEAyO,EAAA32C,KAAAw4C,IAAAA,IAGA7B,GAAA32C,KAAAw4C,EAAA,GAGA,GAAAtL,EAAAF,UACA,CACA,GAAAyL,GAAAvL,EAAAuB,MAIA,KAFAvB,EAAAuB,UAEAz4C,EAAA,EAAAqiD,EAAA,EAAAriD,EAAAA,IAEAk3C,EAAAuB,OAAAzuC,KAAAgK,EAAAa,KAAAmgC,IAAAsN,EAAAtiD,GAAAiD,EACAkU,EAAAtC,KAAAogC,IAAAqN,EAAAtiD,GAAAkD,EAGAs8C,GAAAtI,EAAA6I,GAEA7I,EAAAuB,OAAAgK,GAKA3jD,GAAAD,QAAAghD,IACA6C,iBAAA,IAAAC,cAAA,KAAAC,IAAA,SAAA7iD,EAAAjB,EAAAD,GACA,GACAqrC,IADAnqC,EAAA,eACAA,EAAA,mBAWA2/C,EAAA,SAAAxI,EAAA6I,GAGA,GAAAtH,GAAAvB,EAAAuB,OAAA56B,OAEA,MAAA46B,EAAAp4C,OAAA,GAAA,CAMA,GAAAsgD,GAAAZ,EAAAY,OACAZ,GAAAtH,OAAAA,EACAsH,EAAA7N,MAAAgF,EAAAH,UACAgJ,EAAAzH,MAAApO,EAAAsW,QAAAtJ,EAAAmF,UAYA,KAAA,GAHAroC,GAAAmD,EANA+a,EAAAiD,EAAAA,EACA/C,IAAA+C,EAAAA,GAEAhD,EAAAgD,EAAAA,EACA9C,IAAA8C,EAAAA,GAKAn1B,EAAA,EAAAA,EAAAy4C,EAAAp4C,OAAAL,GAAA,EAEAgU,EAAAykC,EAAAz4C,GACAmX,EAAAshC,EAAAz4C,EAAA,GAEAkyB,EAAAA,EAAAle,EAAAA,EAAAke,EACAE,EAAApe,EAAAoe,EAAApe,EAAAoe,EAEAD,EAAAA,EAAAhb,EAAAA,EAAAgb,EACAE,EAAAlb,EAAAkb,EAAAlb,EAAAkb,CAIAomB,GAAAzuC,KAAAkoB,EAAAC,EACAC,EAAAD,EACAC,EAAAC,EACAH,EAAAG,EAKA,IAAAhyB,GAAAo4C,EAAAp4C,OAAA,CACA,KAAAL,EAAA,EAAAK,EAAAL,EAAAA,IAEA2gD,EAAA32C,KAAAhK,IAOAlB,GAAAD,QAAA6gD,IACAgD,iBAAA,IAAAC,cAAA,KAAAE,IAAA,SAAA9iD,EAAAjB,EAAAD,GACA,GAAAmxC,GAAAjwC,EAAA,iBACAmqC,EAAAnqC,EAAA,kBASAy/C,EAAA,SAAAtI,EAAA6I,GAGA,GAAA//C,GAAA,EACAy4C,EAAAvB,EAAAuB,MAEA,IAAA,IAAAA,EAAAp4C,OAAA,CAeA,GAAAyiD,GAAA,GAAA9S,GAAAkI,MAAAO,EAAA,GAAAA,EAAA,IACAsK,EAAA,GAAA/S,GAAAkI,MAAAO,EAAAA,EAAAp4C,OAAA,GAAAo4C,EAAAA,EAAAp4C,OAAA,GAGA,IAAAyiD,EAAA9uC,IAAA+uC,EAAA/uC,GAAA8uC,EAAA3rC,IAAA4rC,EAAA5rC,EACA,CAEAshC,EAAAA,EAAA56B,QAEA46B,EAAAn/B,MACAm/B,EAAAn/B,MAEAypC,EAAA,GAAA/S,GAAAkI,MAAAO,EAAAA,EAAAp4C,OAAA,GAAAo4C,EAAAA,EAAAp4C,OAAA,GAEA,IAAA2iD,GAAAD,EAAA/uC,EAAA,IAAA8uC,EAAA9uC,EAAA+uC,EAAA/uC,GACAivC,EAAAF,EAAA5rC,EAAA,IAAA2rC,EAAA3rC,EAAA4rC,EAAA5rC,EAEAshC,GAAAzgC,QAAAgrC,EAAAC,GACAxK,EAAAzuC,KAAAg5C,EAAAC,GAGA,GAgBA7sB,GAAAC,EAAA6sB,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACAhsB,EAAAyiB,EAAAwJ,EAAAjtB,EAAAE,EAAAgtB,EACAC,EAAAC,EAAAC,EAnBA3B,EAAAxC,EAAAtH,OACAkI,EAAAZ,EAAAY,QACAtgD,EAAAo4C,EAAAp4C,OAAA,EACA8jD,EAAA1L,EAAAp4C,OACA+jD,EAAA7B,EAAAliD,OAAA,EAGA4C,EAAAi0C,EAAAF,UAAA,EAGAsB,EAAApO,EAAAsW,QAAAtJ,EAAAD,WACA/E,EAAAgF,EAAAqB,UACA74C,EAAA44C,EAAA,GAAApG,EACAjzC,EAAAq5C,EAAA,GAAApG,EACA7tC,EAAAi0C,EAAA,GAAApG,CA8BA,KAvBAgR,EAAAzK,EAAA,GACA0K,EAAA1K,EAAA,GAEA2K,EAAA3K,EAAA,GACA4K,EAAA5K,EAAA,GAEA+K,IAAAL,EAAAE,GACAI,EAAAP,EAAAE,EAEAc,EAAArvC,KAAA+lC,KAAA4I,EAAAA,EAAAC,EAAAA,GAEAD,GAAAU,EACAT,GAAAS,EACAV,GAAAvgD,EACAwgD,GAAAxgD,EAGAs/C,EAAAv4C,KAAAk5C,EAAAM,EAAAL,EAAAM,EACA/jD,EAAAT,EAAAoF,EAAA6tC,GAEAqQ,EAAAv4C,KAAAk5C,EAAAM,EAAAL,EAAAM,EACA/jD,EAAAT,EAAAoF,EAAA6tC,GAEAlyC,EAAA,EAAAK,EAAA,EAAAL,EAAAA,IAEAkjD,EAAAzK,EAAA,GAAAz4C,EAAA,IACAmjD,EAAA1K,EAAA,GAAAz4C,EAAA,GAAA,GAEAojD,EAAA3K,EAAA,EAAA,GACA4K,EAAA5K,EAAA,EAAA,EAAA,GAEA6K,EAAA7K,EAAA,GAAAz4C,EAAA,IACAujD,EAAA9K,EAAA,GAAAz4C,EAAA,GAAA,GAEAwjD,IAAAL,EAAAE,GACAI,EAAAP,EAAAE,EAEAc,EAAArvC,KAAA+lC,KAAA4I,EAAAA,EAAAC,EAAAA,GACAD,GAAAU,EACAT,GAAAS,EACAV,GAAAvgD,EACAwgD,GAAAxgD,EAEAygD,IAAAL,EAAAE,GACAI,EAAAP,EAAAE,EAEAY,EAAArvC,KAAA+lC,KAAA8I,EAAAA,EAAAC,EAAAA,GACAD,GAAAQ,EACAP,GAAAO,EACAR,GAAAzgD,EACA0gD,GAAA1gD,EAEA40B,GAAA4rB,EAAAN,IAAAM,EAAAJ,GACA/I,GAAAkJ,EAAAJ,IAAAI,EAAAN,GACAY,IAAAN,EAAAN,KAAAO,EAAAJ,KAAAG,EAAAJ,KAAAK,EAAAN,GACAtsB,GAAA8sB,EAAAJ,IAAAI,EAAAN,GACAtsB,GAAA2sB,EAAAN,IAAAM,EAAAJ,GACAS,IAAAL,EAAAJ,KAAAK,EAAAN,KAAAK,EAAAN,KAAAO,EAAAJ,GAEAS,EAAAnsB,EAAAd,EAAAF,EAAAyjB,EAEAzlC,KAAAygB,IAAA0uB,GAAA,IAGAA,GAAA,KACAzB,EAAAv4C,KAAAo5C,EAAAI,EAAAH,EAAAI,EACA/jD,EAAAT,EAAAoF,EAAA6tC,GAEAqQ,EAAAv4C,KAAAo5C,EAAAI,EAAAH,EAAAI,EACA/jD,EAAAT,EAAAoF,EAAA6tC,KAKA9b,GAAAkkB,EAAAyJ,EAAAhtB,EAAA+sB,GAAAE,EACA3tB,GAAAQ,EAAAitB,EAAAjsB,EAAAksB,GAAAC,EAGAC,GAAA7tB,EAAAgtB,IAAAhtB,EAAAgtB,IAAA/sB,EAAAgtB,IAAAhtB,EAAAgtB,GAGAY,EAAA,OAEAL,EAAAJ,EAAAE,EACAG,EAAAJ,EAAAE,EAEAO,EAAArvC,KAAA+lC,KAAAgJ,EAAAA,EAAAC,EAAAA,GACAD,GAAAM,EACAL,GAAAK,EACAN,GAAA3gD,EACA4gD,GAAA5gD,EAEAs/C,EAAAv4C,KAAAo5C,EAAAQ,EAAAP,EAAAQ,GACAtB,EAAAv4C,KAAAtK,EAAAT,EAAAoF,EAAA6tC,GAEAqQ,EAAAv4C,KAAAo5C,EAAAQ,EAAAP,EAAAQ,GACAtB,EAAAv4C,KAAAtK,EAAAT,EAAAoF,EAAA6tC,GAEAqQ,EAAAv4C,KAAAo5C,EAAAQ,EAAAP,EAAAQ,GACAtB,EAAAv4C,KAAAtK,EAAAT,EAAAoF,EAAA6tC,GAEAiS,MAKA5B,EAAAv4C,KAAAosB,EAAAC,GACAksB,EAAAv4C,KAAAtK,EAAAT,EAAAoF,EAAA6tC,GAEAqQ,EAAAv4C,KAAAo5C,GAAAhtB,EAAAgtB,GAAAC,GAAAhtB,EAAAgtB,IACAd,EAAAv4C,KAAAtK,EAAAT,EAAAoF,EAAA6tC,IA2BA,KAvBAgR,EAAAzK,EAAA,GAAAp4C,EAAA,IACA8iD,EAAA1K,EAAA,GAAAp4C,EAAA,GAAA,GAEA+iD,EAAA3K,EAAA,GAAAp4C,EAAA,IACAgjD,EAAA5K,EAAA,GAAAp4C,EAAA,GAAA,GAEAmjD,IAAAL,EAAAE,GACAI,EAAAP,EAAAE,EAEAc,EAAArvC,KAAA+lC,KAAA4I,EAAAA,EAAAC,EAAAA,GACAD,GAAAU,EACAT,GAAAS,EACAV,GAAAvgD,EACAwgD,GAAAxgD,EAEAs/C,EAAAv4C,KAAAo5C,EAAAI,EAAAH,EAAAI,GACAlB,EAAAv4C,KAAAtK,EAAAT,EAAAoF,EAAA6tC,GAEAqQ,EAAAv4C,KAAAo5C,EAAAI,EAAAH,EAAAI,GACAlB,EAAAv4C,KAAAtK,EAAAT,EAAAoF,EAAA6tC,GAEAyO,EAAA32C,KAAAo6C,GAEApkD,EAAA,EAAAmkD,EAAAnkD,EAAAA,IAEA2gD,EAAA32C,KAAAo6C,IAGAzD,GAAA32C,KAAAo6C,EAAA,IAGAtlD,GAAAD,QAAA2gD,IACA6E,gBAAA,GAAA3B,iBAAA,MAAA4B,IAAA,SAAAvkD,EAAAjB,EAAAD,GACA,GAAAqrC,GAAAnqC,EAAA,kBASA0/C,EAAA,SAAAvI,EAAA6I,GAEA,GAAAtH,GAAAvB,EAAAuB,MAEA,MAAAA,EAAAp4C,OAAA,GAAA,CAMA,GAAAkiD,GAAAxC,EAAAtH,OACAkI,EAAAZ,EAAAY,QAEAtgD,EAAAo4C,EAAAp4C,OAAA,EAGAi4C,EAAApO,EAAAsW,QAAAtJ,EAAAmF,WACAnK,EAAAgF,EAAAH,UACAr3C,EAAA44C,EAAA,GAAApG,EACAjzC,EAAAq5C,EAAA,GAAApG,EACA7tC,EAAAi0C,EAAA,GAAApG,EAEAjgB,EAAAP,OAAA+mB,EAAA,KAAA,EAEA,KAAAxmB,EACA,OAAA,CAGA,IAAAsyB,GAAAhC,EAAAliD,OAAA,EAEAL,EAAA,CAEA,KAAAA,EAAA,EAAAA,EAAAiyB,EAAA5xB,OAAAL,GAAA,EAEA2gD,EAAA32C,KAAAioB,EAAAjyB,GAAAukD,GACA5D,EAAA32C,KAAAioB,EAAAjyB,GAAAukD,GACA5D,EAAA32C,KAAAioB,EAAAjyB,EAAA,GAAAukD,GACA5D,EAAA32C,KAAAioB,EAAAjyB,EAAA,GAAAukD,GACA5D,EAAA32C,KAAAioB,EAAAjyB,EAAA,GAAAukD,EAGA,KAAAvkD,EAAA,EAAAK,EAAAL,EAAAA,IAEAuiD,EAAAv4C,KAAAyuC,EAAA,EAAAz4C,GAAAy4C,EAAA,EAAAz4C,EAAA,GACAN,EAAAT,EAAAoF,EAAA6tC,EAGA,QAAA,GAIApzC,GAAAD,QAAA4gD,IAEAiD,iBAAA,MAAA8B,IAAA,SAAAzkD,EAAAjB,EAAAD,GACA,GAAA2gD,GAAAz/C,EAAA,eACAmqC,EAAAnqC,EAAA,kBASA4/C,EAAA,SAAAzI,EAAA6I,GAKA,GAAA0E,GAAAvN,EAAAsB,MACAxkC,EAAAywC,EAAAzwC,EACAmD,EAAAstC,EAAAttC,EACAlU,EAAAwhD,EAAAxhD,MACAC,EAAAuhD,EAAAvhD,MAEA,IAAAg0C,EAAAoF,KACA,CACA,GAAAhE,GAAApO,EAAAsW,QAAAtJ,EAAAmF,WACAnK,EAAAgF,EAAAH,UAEAr3C,EAAA44C,EAAA,GAAApG,EACAjzC,EAAAq5C,EAAA,GAAApG,EACA7tC,EAAAi0C,EAAA,GAAApG,EAEAqQ,EAAAxC,EAAAtH,OACAkI,EAAAZ,EAAAY,QAEA4D,EAAAhC,EAAAliD,OAAA,CAGAkiD,GAAAv4C,KAAAgK,EAAAmD,GACAorC,EAAAv4C,KAAAtK,EAAAT,EAAAoF,EAAA6tC,GAEAqQ,EAAAv4C,KAAAgK,EAAA/Q,EAAAkU,GACAorC,EAAAv4C,KAAAtK,EAAAT,EAAAoF,EAAA6tC,GAEAqQ,EAAAv4C,KAAAgK,EAAAmD,EAAAjU,GACAq/C,EAAAv4C,KAAAtK,EAAAT,EAAAoF,EAAA6tC,GAEAqQ,EAAAv4C,KAAAgK,EAAA/Q,EAAAkU,EAAAjU,GACAq/C,EAAAv4C,KAAAtK,EAAAT,EAAAoF,EAAA6tC,GAGAyO,EAAA32C,KAAAu6C,EAAAA,EAAAA,EAAA,EAAAA,EAAA,EAAAA,EAAA,EAAAA,EAAA,GAGA,GAAArN,EAAAF,UACA,CACA,GAAAyL,GAAAvL,EAAAuB,MAEAvB,GAAAuB,QAAAzkC,EAAAmD,EACAnD,EAAA/Q,EAAAkU,EACAnD,EAAA/Q,EAAAkU,EAAAjU,EACA8Q,EAAAmD,EAAAjU,EACA8Q,EAAAmD,GAGAqoC,EAAAtI,EAAA6I,GAEA7I,EAAAuB,OAAAgK,GAIA3jD,GAAAD,QAAA8gD,IACA+C,iBAAA,IAAAC,cAAA,KAAA+B,IAAA,SAAA3kD,EAAAjB,EAAAD,GACA,GACAqrC,IADAnqC,EAAA,eACAA,EAAA,kBASA6/C,uBAAA,SAAA1I,EAAA6I,GAEA,GAAA4E,GAAAzN,EAAAsB,MACAxkC,EAAA2wC,EAAA3wC,EACAmD,EAAAwtC,EAAAxtC,EACAlU,EAAA0hD,EAAA1hD,MACAC,EAAAyhD,EAAAzhD,OAEAm3C,EAAAsK,EAAAtK,OAEAuK,IAUA,IATAA,EAAA56C,KAAAgK,EAAAmD,EAAAkjC,GACAh7C,KAAAwlD,qBAAA7wC,EAAAmD,EAAAjU,EAAAm3C,EAAArmC,EAAAmD,EAAAjU,EAAA8Q,EAAAqmC,EAAAljC,EAAAjU,EAAA0hD,GACAvlD,KAAAwlD,qBAAA7wC,EAAA/Q,EAAAo3C,EAAAljC,EAAAjU,EAAA8Q,EAAA/Q,EAAAkU,EAAAjU,EAAA8Q,EAAA/Q,EAAAkU,EAAAjU,EAAAm3C,EAAAuK,GACAvlD,KAAAwlD,qBAAA7wC,EAAA/Q,EAAAkU,EAAAkjC,EAAArmC,EAAA/Q,EAAAkU,EAAAnD,EAAA/Q,EAAAo3C,EAAAljC,EAAAytC,GACAvlD,KAAAwlD,qBAAA7wC,EAAAqmC,EAAAljC,EAAAnD,EAAAmD,EAAAnD,EAAAmD,EAAAkjC,EAAA,MAAAuK,GAKA1N,EAAAoF,KACA,CACA,GAAAhE,GAAApO,EAAAsW,QAAAtJ,EAAAmF,WACAnK,EAAAgF,EAAAH,UAEAr3C,EAAA44C,EAAA,GAAApG,EACAjzC,EAAAq5C,EAAA,GAAApG,EACA7tC,EAAAi0C,EAAA,GAAApG,EAEAqQ,EAAAxC,EAAAtH,OACAkI,EAAAZ,EAAAY,QAEA6B,EAAAD,EAAAliD,OAAA,EAEA4xB,EAAAP,OAAAkzB,EAAA,KAAA,GAEA5kD,EAAA,CACA,KAAAA,EAAA,EAAAA,EAAAiyB,EAAA5xB,OAAAL,GAAA,EAEA2gD,EAAA32C,KAAAioB,EAAAjyB,GAAAwiD,GACA7B,EAAA32C,KAAAioB,EAAAjyB,GAAAwiD,GACA7B,EAAA32C,KAAAioB,EAAAjyB,EAAA,GAAAwiD,GACA7B,EAAA32C,KAAAioB,EAAAjyB,EAAA,GAAAwiD,GACA7B,EAAA32C,KAAAioB,EAAAjyB,EAAA,GAAAwiD,EAGA,KAAAxiD,EAAA,EAAAA,EAAA4kD,EAAAvkD,OAAAL,IAEAuiD,EAAAv4C,KAAA46C,EAAA5kD,GAAA4kD,IAAA5kD,GAAAN,EAAAT,EAAAoF,EAAA6tC,GAIA,GAAAgF,EAAAF,UACA,CACA,GAAAyL,GAAAvL,EAAAuB,MAEAvB,GAAAuB,OAAAmM,EAEAvlD,KAAAmgD,UAAAtI,EAAA6I,GAEA7I,EAAAuB,OAAAgK,IAkBAoC,qBAAA,SAAAvL,EAAAC,EAAAP,EAAAC,EAAAC,EAAAC,EAAAtwB,GAWA,QAAAi8B,GAAAC,EAAAC,EAAAC,GACA,GAAAC,GAAAF,EAAAD,CAEA,OAAAA,GAAAG,EAAAD,EAIA,IAAA,GAhBA7L,GACAC,EACA8L,EACAC,EACApxC,EACAmD,EACA1X,EAAA,GACAg5C,EAAA5vB,MAQAE,EAAA,EACA/oB,EAAA,EAAAP,GAAAO,EAAAA,IACA+oB,EAAA/oB,EAAAP,EAGA25C,EAAA0L,EAAAxL,EAAAN,EAAAjwB,GACAswB,EAAAyL,EAAAvL,EAAAN,EAAAlwB,GACAo8B,EAAAL,EAAA9L,EAAAE,EAAAnwB,GACAq8B,EAAAN,EAAA7L,EAAAE,EAAApwB,GAGA/U,EAAA8wC,EAAA1L,EAAA+L,EAAAp8B,GACA5R,EAAA2tC,EAAAzL,EAAA+L,EAAAr8B,GAEA0vB,EAAAzuC,KAAAgK,EAAAmD,EAGA,OAAAshC,IAIA35C,EAAAD,QAAA+gD,wBACA8C,iBAAA,IAAAC,cAAA,KAAA0C,IAAA,SAAAtlD,EAAAjB,EAAAD,GAYA,GAAAiqC,GAAAhqC,EAAAD,QAAA+P,OAAA4pB,OAAAz4B,EAAA,WAAAA,EAAA,WAEAmqC,MAAAnqC,EAAA,WACAulD,OAAAvlD,EAAA,YAGAgpC,cAAAhpC,EAAA,2BACAgwC,UAAAhwC,EAAA,uBAGAwlD,OAAAxlD,EAAA,oBACAylD,kBAAAzlD,EAAA,iCACA0lD,eAAA1lD,EAAA,kCACA2lD,iBAAA3lD,EAAA,sCAGA4lD,KAAA5lD,EAAA,eAGA+2C,SAAA/2C,EAAA,uBACAi4C,aAAAj4C,EAAA,2BACAi/C,iBAAAj/C,EAAA,qCAGAgD,QAAAhD,EAAA,sBACA6lD,YAAA7lD,EAAA,0BACAkwC,cAAAlwC,EAAA,4BACA8lD,kBAAA9lD,EAAA,gCACA+lD,iBAAA/lD,EAAA,+BACAgmD,WAAAhmD,EAAA,yBAGA6rC,eAAA7rC,EAAA,qCACAg4C,eAAAh4C,EAAA,2CACA+3C,aAAA/3C,EAAA,yCAGA2rC,cAAA3rC,EAAA,mCACAimD,aAAAjmD,EAAA,2CACAkmD,cAAAlmD,EAAA,4CACA2F,OAAA3F,EAAA,oCACAk/C,eAAAl/C,EAAA,0CACAmmD,aAAAnmD,EAAA,wCAGAomD,eAAApmD,EAAA,4CACAqmD,WAAArmD,EAAA,wCACAsmD,iBAAAtmD,EAAA,8CAEAumD,OAAAvmD,EAAA,gBAqBAwmD,mBAAA,SAAAtjD,EAAAC,EAAAgH,EAAAs8C,GAKA,MAHAvjD,GAAAA,GAAA,IACAC,EAAAA,GAAA,KAEAsjD,GAAA1d,EAAAoB,MAAAuc,mBAEA,GAAA3d,GAAA4C,cAAAzoC,EAAAC,EAAAgH,GAGA,GAAA4+B,GAAA8C,eAAA3oC,EAAAC,EAAAgH,QAIAw8C,UAAA,GAAAC,sBAAA,GAAAC,0BAAA,GAAAC,sBAAA,GAAAC,0BAAA,GAAAC,oCAAA,GAAAC,SAAA,GAAAC,gCAAA,GAAAC,qCAAA,GAAAC,oCAAA,GAAAC,wCAAA,GAAAC,0CAAA,GAAAC,kCAAA,GAAAC,2CAAA,GAAAC,uCAAA,GAAAC,6CAAA,GAAAC,2CAAA,GAAAC,0CAAA,GAAAC,mCAAA,GAAAC,yCAAA,GAAAC,uCAAA,GAAAC,mBAAA,GAAAC,iCAAA,GAAAC,cAAA,GAAAC,+BAAA,GAAAC,yBAAA,IAAAC,2BAAA,IAAAC,qBAAA,IAAAC,wBAAA,IAAAC,8BAAA,IAAAC,WAAA,IAAAC,UAAA,IAAAtiB,eAAA,IAAAuiB,IAAA,SAAA3oD,EAAAjB,EAAAD,GAiBA,QAAAsxC,KAMA9wC,KAAAS,EAAA,EAMAT,KAAAgF,EAAA,EAMAhF,KAAAq0B,EAAA,EAMAr0B,KAAAqrC,EAAA,EAMArrC,KAAAmrC,GAAA,EAMAnrC,KAAAorC,GAAA,EAhDA,GAAAyN,GAAAn4C,EAAA,UAmDAowC,GAAAjuC,UAAAmH,YAAA8mC,EACArxC,EAAAD,QAAAsxC,EAcAA,EAAAjuC,UAAAymD,UAAA,SAAAt7C,GAEAhO,KAAAS,EAAAuN,EAAA,GACAhO,KAAAgF,EAAAgJ,EAAA,GACAhO,KAAAq0B,EAAArmB,EAAA,GACAhO,KAAAqrC,EAAAr9B,EAAA,GACAhO,KAAAmrC,GAAAn9B,EAAA,GACAhO,KAAAorC,GAAAp9B,EAAA,IAgBA8iC,EAAAjuC,UAAAqN,IAAA,SAAAzP,EAAAuE,EAAAqvB,EAAAgX,EAAAF,EAAAC,GASA,MAPAprC,MAAAS,EAAAA,EACAT,KAAAgF,EAAAA,EACAhF,KAAAq0B,EAAAA,EACAr0B,KAAAqrC,EAAAA,EACArrC,KAAAmrC,GAAAA,EACAnrC,KAAAorC,GAAAA,EAEAprC,MAWA8wC,EAAAjuC,UAAAq+C,QAAA,SAAAqI,EAAA//B,GAEAxpB,KAAAgO,QAEAhO,KAAAgO,MAAA,GAAAnG,cAAA,GAGA,IAAAmG,GAAAwb,GAAAxpB,KAAAgO,KA2BA,OAzBAu7C,IAEAv7C,EAAA,GAAAhO,KAAAS,EACAuN,EAAA,GAAAhO,KAAAgF,EACAgJ,EAAA,GAAA,EACAA,EAAA,GAAAhO,KAAAq0B,EACArmB,EAAA,GAAAhO,KAAAqrC,EACAr9B,EAAA,GAAA,EACAA,EAAA,GAAAhO,KAAAmrC,GACAn9B,EAAA,GAAAhO,KAAAorC,GACAp9B,EAAA,GAAA,IAIAA,EAAA,GAAAhO,KAAAS,EACAuN,EAAA,GAAAhO,KAAAq0B,EACArmB,EAAA,GAAAhO,KAAAmrC,GACAn9B,EAAA,GAAAhO,KAAAgF,EACAgJ,EAAA,GAAAhO,KAAAqrC,EACAr9B,EAAA,GAAAhO,KAAAorC,GACAp9B,EAAA,GAAA,EACAA,EAAA,GAAA,EACAA,EAAA,GAAA,GAGAA,GAWA8iC,EAAAjuC,UAAA+Q,MAAA,SAAA0E,EAAAkxC,GAEAA,EAAAA,GAAA,GAAA3Q,EAEA,IAAAlkC,GAAA2D,EAAA3D,EACAmD,EAAAQ,EAAAR,CAKA,OAHA0xC,GAAA70C,EAAA3U,KAAAS,EAAAkU,EAAA3U,KAAAq0B,EAAAvc,EAAA9X,KAAAmrC,GACAqe,EAAA1xC,EAAA9X,KAAAgF,EAAA2P,EAAA3U,KAAAqrC,EAAAvzB,EAAA9X,KAAAorC,GAEAoe,GAWA1Y,EAAAjuC,UAAAwzC,aAAA,SAAA/9B,EAAAkxC,GAEAA,EAAAA,GAAA,GAAA3Q,EAEA,IAAAvtC,GAAA,GAAAtL,KAAAS,EAAAT,KAAAqrC,EAAArrC,KAAAq0B,GAAAr0B,KAAAgF,GAEA2P,EAAA2D,EAAA3D,EACAmD,EAAAQ,EAAAR,CAKA,OAHA0xC,GAAA70C,EAAA3U,KAAAqrC,EAAA//B,EAAAqJ,GAAA3U,KAAAq0B,EAAA/oB,EAAAwM,GAAA9X,KAAAorC,GAAAprC,KAAAq0B,EAAAr0B,KAAAmrC,GAAAnrC,KAAAqrC,GAAA//B,EACAk+C,EAAA1xC,EAAA9X,KAAAS,EAAA6K,EAAAwM,GAAA9X,KAAAgF,EAAAsG,EAAAqJ,IAAA3U,KAAAorC,GAAAprC,KAAAS,EAAAT,KAAAmrC,GAAAnrC,KAAAgF,GAAAsG,EAEAk+C,GAUA1Y,EAAAjuC,UAAAk7C,UAAA,SAAAppC,EAAAmD,GAKA,MAHA9X,MAAAmrC,IAAAx2B,EACA3U,KAAAorC,IAAAtzB,EAEA9X,MAUA8wC,EAAAjuC,UAAAmuC,MAAA,SAAAr8B,EAAAmD,GASA,MAPA9X,MAAAS,GAAAkU,EACA3U,KAAAqrC,GAAAvzB,EACA9X,KAAAq0B,GAAA1f,EACA3U,KAAAgF,GAAA8S,EACA9X,KAAAmrC,IAAAx2B,EACA3U,KAAAorC,IAAAtzB,EAEA9X,MAUA8wC,EAAAjuC,UAAA4mD,OAAA,SAAA5M,GAEA,GAAAjH,GAAApgC,KAAAogC,IAAAiH,GACAlH,EAAAngC,KAAAmgC,IAAAkH,GAEArkB,EAAAx4B,KAAAS,EACAgkD,EAAAzkD,KAAAq0B,EACAq1B,EAAA1pD,KAAAmrC,EASA,OAPAnrC,MAAAS,EAAA+3B,EAAAod,EAAA51C,KAAAgF,EAAA2wC,EACA31C,KAAAgF,EAAAwzB,EAAAmd,EAAA31C,KAAAgF,EAAA4wC,EACA51C,KAAAq0B,EAAAowB,EAAA7O,EAAA51C,KAAAqrC,EAAAsK,EACA31C,KAAAqrC,EAAAoZ,EAAA9O,EAAA31C,KAAAqrC,EAAAuK,EACA51C,KAAAmrC,GAAAue,EAAA9T,EAAA51C,KAAAorC,GAAAuK,EACA31C,KAAAorC,GAAAse,EAAA/T,EAAA31C,KAAAorC,GAAAwK,EAEA51C,MASA8wC,EAAAjuC,UAAA8mD,OAAA,SAAA1T,GAEA,GAAAzd,GAAAx4B,KAAAS,EACAw6C,EAAAj7C,KAAAgF,EACAy/C,EAAAzkD,KAAAq0B,EACAu1B,EAAA5pD,KAAAqrC,CAUA,OARArrC,MAAAS,EAAAw1C,EAAAx1C,EAAA+3B,EAAAyd,EAAAjxC,EAAAy/C,EACAzkD,KAAAgF,EAAAixC,EAAAx1C,EAAAw6C,EAAAhF,EAAAjxC,EAAA4kD,EACA5pD,KAAAq0B,EAAA4hB,EAAA5hB,EAAAmE,EAAAyd,EAAA5K,EAAAoZ,EACAzkD,KAAAqrC,EAAA4K,EAAA5hB,EAAA4mB,EAAAhF,EAAA5K,EAAAue,EAEA5pD,KAAAmrC,GAAA8K,EAAA9K,GAAA3S,EAAAyd,EAAA7K,GAAAqZ,EAAAzkD,KAAAmrC,GACAnrC,KAAAorC,GAAA6K,EAAA9K,GAAA8P,EAAAhF,EAAA7K,GAAAwe,EAAA5pD,KAAAorC,GAEAprC,MAkBA8wC,EAAAjuC,UAAA2zC,aAAA,SAAA7hC,EAAAmD,EAAA6+B,EAAAC,EAAApB,EAAAC,EAAAC,EAAAe,EAAAC,GAEA,GAAAj2C,GAAAuE,EAAAqvB,EAAAgX,EAAAwe,EAAAC,EAAAhzB,EAAA6T,EAAAof,EAAAlzB,CAsBA,OApBAgzB,GAAAr0C,KAAAmgC,IAAAD,GACAoU,EAAAt0C,KAAAogC,IAAAF,GACA5e,EAAAthB,KAAAogC,IAAAc,GACA/L,EAAAn1B,KAAAmgC,IAAAe,GACAqT,GAAAv0C,KAAAmgC,IAAAc,GACA5f,EAAArhB,KAAAogC,IAAAa,GAEAh2C,EAAAqpD,EAAAtU,EACAxwC,EAAA6kD,EAAArU,EACAnhB,GAAAw1B,EAAApU,EACApK,EAAAye,EAAArU,EAEAz1C,KAAAS,EAAAq2B,EAAAr2B,EAAAkqC,EAAAtW,EACAr0B,KAAAgF,EAAA8xB,EAAA9xB,EAAA2lC,EAAAU,EACArrC,KAAAq0B,EAAA01B,EAAAtpD,EAAAo2B,EAAAxC,EACAr0B,KAAAqrC,EAAA0e,EAAA/kD,EAAA6xB,EAAAwU,EAEArrC,KAAAmrC,GAAAx2B,GAAAgiC,EAAAl2C,EAAAm2C,EAAAviB,GACAr0B,KAAAorC,GAAAtzB,GAAA6+B,EAAA3xC,EAAA4xC,EAAAvL,GAEArrC,MASA8wC,EAAAjuC,UAAAmnD,QAAA,SAAA/T,GAEA,GAAAyT,GAAA1pD,KAAAmrC,EAEA,IAAA,IAAA8K,EAAAx1C,GAAA,IAAAw1C,EAAAjxC,GAAA,IAAAixC,EAAA5hB,GAAA,IAAA4hB,EAAA5K,EACA,CACA,GAAA7S,GAAAx4B,KAAAS,EACAgkD,EAAAzkD,KAAAq0B,CACAr0B,MAAAS,EAAA+3B,EAAAyd,EAAAx1C,EAAAT,KAAAgF,EAAAixC,EAAA5hB,EACAr0B,KAAAgF,EAAAwzB,EAAAyd,EAAAjxC,EAAAhF,KAAAgF,EAAAixC,EAAA5K,EACArrC,KAAAq0B,EAAAowB,EAAAxO,EAAAx1C,EAAAT,KAAAqrC,EAAA4K,EAAA5hB,EACAr0B,KAAAqrC,EAAAoZ,EAAAxO,EAAAjxC,EAAAhF,KAAAqrC,EAAA4K,EAAA5K,EAMA,MAHArrC,MAAAmrC,GAAAue,EAAAzT,EAAAx1C,EAAAT,KAAAorC,GAAA6K,EAAA5hB,EAAA4hB,EAAA9K,GACAnrC,KAAAorC,GAAAse,EAAAzT,EAAAjxC,EAAAhF,KAAAorC,GAAA6K,EAAA5K,EAAA4K,EAAA7K,GAEAprC,MAQA8wC,EAAAjuC,UAAAonD,OAAA,WAEA,GAAAzxB,GAAAx4B,KAAAS,EACAw6C,EAAAj7C,KAAAgF,EACAy/C,EAAAzkD,KAAAq0B,EACAu1B,EAAA5pD,KAAAqrC,EACAqe,EAAA1pD,KAAAmrC,GACA/qC,EAAAo4B,EAAAoxB,EAAA3O,EAAAwJ,CASA,OAPAzkD,MAAAS,EAAAmpD,EAAAxpD,EACAJ,KAAAgF,GAAAi2C,EAAA76C,EACAJ,KAAAq0B,GAAAowB,EAAArkD,EACAJ,KAAAqrC,EAAA7S,EAAAp4B,EACAJ,KAAAmrC,IAAAsZ,EAAAzkD,KAAAorC,GAAAwe,EAAAF,GAAAtpD,EACAJ,KAAAorC,KAAA5S,EAAAx4B,KAAAorC,GAAA6P,EAAAyO,GAAAtpD,EAEAJ,MASA8wC,EAAAjuC,UAAAyQ,SAAA,WASA,MAPAtT,MAAAS,EAAA,EACAT,KAAAgF,EAAA,EACAhF,KAAAq0B,EAAA,EACAr0B,KAAAqrC,EAAA,EACArrC,KAAAmrC,GAAA,EACAnrC,KAAAorC,GAAA,EAEAprC,MAQA8wC,EAAAjuC,UAAAi2C,MAAA,WAEA,GAAA7C,GAAA,GAAAnF,EAQA,OAPAmF,GAAAx1C,EAAAT,KAAAS,EACAw1C,EAAAjxC,EAAAhF,KAAAgF,EACAixC,EAAA5hB,EAAAr0B,KAAAq0B,EACA4hB,EAAA5K,EAAArrC,KAAAqrC,EACA4K,EAAA9K,GAAAnrC,KAAAmrC,GACA8K,EAAA7K,GAAAprC,KAAAorC,GAEA6K,GAQAnF,EAAAjuC,UAAAqnD,KAAA,SAAAjU,GASA,MAPAA,GAAAx1C,EAAAT,KAAAS,EACAw1C,EAAAjxC,EAAAhF,KAAAgF,EACAixC,EAAA5hB,EAAAr0B,KAAAq0B,EACA4hB,EAAA5K,EAAArrC,KAAAqrC,EACA4K,EAAA9K,GAAAnrC,KAAAmrC,GACA8K,EAAA7K,GAAAprC,KAAAorC,GAEA6K,GASAnF,EAAA2C,SAAA,GAAA3C,GAQAA,EAAAqZ,YAAA,GAAArZ,KAEAsZ,UAAA,KAAAC,IAAA,SAAA3pD,EAAAjB,EAAAD,GAUA,QAAAq5C,GAAAlkC,EAAAmD,GAMA9X,KAAA2U,EAAAA,GAAA,EAMA3U,KAAA8X,EAAAA,GAAA,EAGA+gC,EAAAh2C,UAAAmH,YAAA6uC,EACAp5C,EAAAD,QAAAq5C,EAOAA,EAAAh2C,UAAAi2C,MAAA,WAEA,MAAA,IAAAD,GAAA74C,KAAA2U,EAAA3U,KAAA8X,IAQA+gC,EAAAh2C,UAAAqnD,KAAA,SAAAvlC,GACA3kB,KAAAkQ,IAAAyU,EAAAhQ,EAAAgQ,EAAA7M,IASA+gC,EAAAh2C,UAAA4wB,OAAA,SAAA9O,GACA,MAAAA,GAAAhQ,IAAA3U,KAAA2U,GAAAgQ,EAAA7M,IAAA9X,KAAA8X,GAUA+gC,EAAAh2C,UAAAqN,IAAA,SAAAyE,EAAAmD,GAEA9X,KAAA2U,EAAAA,GAAA,EACA3U,KAAA8X,EAAAA,IAAA,IAAAA,EAAA9X,KAAA2U,EAAA,SAGA21C,IAAA,SAAA5pD,EAAAjB,EAAAD,GAMAC,EAAAD,SAMAq5C,MAAAn4C,EAAA,WACAowC,OAAApwC,EAAA,YAEA68C,OAAA78C,EAAA,mBACA+8C,QAAA/8C,EAAA,oBACA24C,QAAA34C,EAAA,oBACAsyC,UAAAtyC,EAAA,sBACA28C,iBAAA38C,EAAA,gCAGA6pD,WAAA,GAAAH,UAAA,GAAAI,kBAAA,GAAAC,mBAAA,GAAAC,mBAAA,GAAAC,qBAAA,GAAAC,4BAAA,KAAAC,IAAA,SAAAnqD,EAAAjB,EAAAD,GAaA,QAAA+9C,GAAA5oC,EAAAmD,EAAAkjC,GAMAh7C,KAAA2U,EAAAA,GAAA,EAMA3U,KAAA8X,EAAAA,GAAA,EAMA9X,KAAAg7C,OAAAA,GAAA,EAOAh7C,KAAAqC,KAAA0qC,EAAAkD,OAAAG,KArCA,GAAA4C,GAAAtyC,EAAA,eACAqsC,EAAArsC,EAAA,cAuCA68C,GAAA16C,UAAAmH,YAAAuzC,EACA99C,EAAAD,QAAA+9C,EAOAA,EAAA16C,UAAAi2C,MAAA,WAEA,MAAA,IAAAyE,GAAAv9C,KAAA2U,EAAA3U,KAAA8X,EAAA9X,KAAAg7C,SAUAuC,EAAA16C,UAAAk8C,SAAA,SAAApqC,EAAAmD,GAEA,GAAA9X,KAAAg7C,QAAA,EAEA,OAAA,CAGA,IAAA8P,GAAA9qD,KAAA2U,EAAAA,EACAo2C,EAAA/qD,KAAA8X,EAAAA,EACAkzC,EAAAhrD,KAAAg7C,OAAAh7C,KAAAg7C,MAKA,OAHA8P,IAAAA,EACAC,GAAAA,EAEAC,GAAAF,EAAAC,GAQAxN,EAAA16C,UAAAyoC,UAAA,WAEA,MAAA,IAAA0H,GAAAhzC,KAAA2U,EAAA3U,KAAAg7C,OAAAh7C,KAAA8X,EAAA9X,KAAAg7C,OAAA,EAAAh7C,KAAAg7C,OAAA,EAAAh7C,KAAAg7C,WAGA2G,cAAA,GAAAsJ,cAAA,KAAAC,IAAA,SAAAxqD,EAAAjB,EAAAD,GAcA,QAAAi+C,GAAA9oC,EAAAmD,EAAAlU,EAAAC,GAMA7D,KAAA2U,EAAAA,GAAA,EAMA3U,KAAA8X,EAAAA,GAAA,EAMA9X,KAAA4D,MAAAA,GAAA,EAMA5D,KAAA6D,OAAAA,GAAA,EAOA7D,KAAAqC,KAAA0qC,EAAAkD,OAAAI,KA5CA,GAAA2C,GAAAtyC,EAAA,eACAqsC,EAAArsC,EAAA,cA8CA+8C,GAAA56C,UAAAmH,YAAAyzC,EACAh+C,EAAAD,QAAAi+C,EAOAA,EAAA56C,UAAAi2C,MAAA,WAEA,MAAA,IAAA2E,GAAAz9C,KAAA2U,EAAA3U,KAAA8X,EAAA9X,KAAA4D,MAAA5D,KAAA6D,SAUA45C,EAAA56C,UAAAk8C,SAAA,SAAApqC,EAAAmD,GAEA,GAAA9X,KAAA4D,OAAA,GAAA5D,KAAA6D,QAAA,EAEA,OAAA,CAIA,IAAAsnD,IAAAx2C,EAAA3U,KAAA2U,GAAA3U,KAAA4D,MACAwnD,GAAAtzC,EAAA9X,KAAA8X,GAAA9X,KAAA6D,MAKA,OAHAsnD,IAAAA,EACAC,GAAAA,EAEA,GAAAD,EAAAC,GAQA3N,EAAA56C,UAAAyoC,UAAA,WAEA,MAAA,IAAA0H,GAAAhzC,KAAA2U,EAAA3U,KAAA4D,MAAA5D,KAAA8X,EAAA9X,KAAA6D,OAAA7D,KAAA4D,MAAA5D,KAAA6D,WAGA89C,cAAA,GAAAsJ,cAAA,KAAAI,IAAA,SAAA3qD,EAAAjB,EAAAD,GAaA,QAAA65C,GAAAiS,GAIA,GAAAlS,GAAAkS,CAGA,KAAAx/C,MAAA4O,QAAA0+B,GACA,CAGAA,EAAA,GAAAttC,OAAA+H,UAAA7S,OAEA,KAAA,GAAAP,GAAA,EAAAA,EAAA24C,EAAAp4C,SAAAP,EACA24C,EAAA34C,GAAAoT,UAAApT,GAKA,GAAA24C,EAAA,YAAAP,GACA,CAEA,IAAA,GADAl0B,MACAhkB,EAAA,EAAA4qD,EAAAnS,EAAAp4C,OAAAuqD,EAAA5qD,EAAAA,IAEAgkB,EAAAha,KAAAyuC,EAAAz4C,GAAAgU,EAAAykC,EAAAz4C,GAAAmX,EAGAshC,GAAAz0B,EAGA3kB,KAAAs5C,QAAA,EAOAt5C,KAAAo5C,OAAAA,EAOAp5C,KAAAqC,KAAA0qC,EAAAkD,OAAAC,KAxDA,GAAA2I,GAAAn4C,EAAA,YACAqsC,EAAArsC,EAAA,cA0DA24C,GAAAx2C,UAAAmH,YAAAqvC,EACA55C,EAAAD,QAAA65C,EAOAA,EAAAx2C,UAAAi2C,MAAA,WAEA,MAAA,IAAAO,GAAAr5C,KAAAo5C,OAAA56B,UAUA66B,EAAAx2C,UAAAk8C,SAAA,SAAApqC,EAAAmD,GAQA,IAAA,GANAyf,IAAA,EAIAv2B,EAAAhB,KAAAo5C,OAAAp4C,OAAA,EAEAL,EAAA,EAAA+oB,EAAA1oB,EAAA,EAAAA,EAAAL,EAAA+oB,EAAA/oB,IACA,CACA,GAAA6qD,GAAAxrD,KAAAo5C,OAAA,EAAAz4C,GAAA8qD,EAAAzrD,KAAAo5C,OAAA,EAAAz4C,EAAA,GACA+qD,EAAA1rD,KAAAo5C,OAAA,EAAA1vB,GAAAiiC,EAAA3rD,KAAAo5C,OAAA,EAAA1vB,EAAA,GACAkiC,EAAAH,EAAA3zC,GAAA6zC,EAAA7zC,IAAA4zC,EAAAF,IAAA1zC,EAAA2zC,IAAAE,EAAAF,GAAAD,EAAA72C,CAEAi3C,KAEAr0B,GAAAA,GAIA,MAAAA,MAGAoqB,cAAA,GAAAkK,WAAA,KAAAC,IAAA,SAAAprD,EAAAjB,EAAAD,GAaA,QAAAwzC,GAAAr+B,EAAAmD,EAAAlU,EAAAC,GAMA7D,KAAA2U,EAAAA,GAAA,EAMA3U,KAAA8X,EAAAA,GAAA,EAMA9X,KAAA4D,MAAAA,GAAA,EAMA5D,KAAA6D,OAAAA,GAAA,EAOA7D,KAAAqC,KAAA0qC,EAAAkD,OAAAE,KA3CA,GAAApD,GAAArsC,EAAA,cA8CAsyC,GAAAnwC,UAAAmH,YAAAgpC,EACAvzC,EAAAD,QAAAwzC,EAQAA,EAAAC,MAAA,GAAAD,GAAA,EAAA,EAAA,EAAA,GAQAA,EAAAnwC,UAAAi2C,MAAA,WAEA,MAAA,IAAA9F,GAAAhzC,KAAA2U,EAAA3U,KAAA8X,EAAA9X,KAAA4D,MAAA5D,KAAA6D,SAUAmvC,EAAAnwC,UAAAk8C,SAAA,SAAApqC,EAAAmD,GAEA,MAAA9X,MAAA4D,OAAA,GAAA5D,KAAA6D,QAAA,GAEA,EAGA8Q,GAAA3U,KAAA2U,GAAAA,EAAA3U,KAAA2U,EAAA3U,KAAA4D,OAEAkU,GAAA9X,KAAA8X,GAAAA,EAAA9X,KAAA8X,EAAA9X,KAAA6D,QAEA,GAIA,KAGA89C,cAAA,KAAAoK,IAAA,SAAArrD,EAAAjB,EAAAD,GAcA,QAAA69C,GAAA1oC,EAAAmD,EAAAlU,EAAAC,EAAAm3C,GAMAh7C,KAAA2U,EAAAA,GAAA,EAMA3U,KAAA8X,EAAAA,GAAA,EAMA9X,KAAA4D,MAAAA,GAAA,EAMA5D,KAAA6D,OAAAA,GAAA,EAMA7D,KAAAg7C,OAAAA,GAAA,GAOAh7C,KAAAqC,KAAA0qC,EAAAkD,OAAAK,KAlDA,GAAAvD,GAAArsC,EAAA,cAqDA28C,GAAAx6C,UAAAmH,YAAAqzC,EACA59C,EAAAD,QAAA69C,EAOAA,EAAAx6C,UAAAi2C,MAAA,WAEA,MAAA,IAAAuE,GAAAr9C,KAAA2U,EAAA3U,KAAA8X,EAAA9X,KAAA4D,MAAA5D,KAAA6D,OAAA7D,KAAAg7C,SAUAqC,EAAAx6C,UAAAk8C,SAAA,SAAApqC,EAAAmD,GAEA,MAAA9X,MAAA4D,OAAA,GAAA5D,KAAA6D,QAAA,GAEA,EAGA8Q,GAAA3U,KAAA2U,GAAAA,GAAA3U,KAAA2U,EAAA3U,KAAA4D,OAEAkU,GAAA9X,KAAA8X,GAAAA,GAAA9X,KAAA8X,EAAA9X,KAAA6D,QAEA,GAIA,KAGA89C,cAAA,KAAAqK,IAAA,SAAAtrD,EAAAjB,EAAAD,GAoCA,QAAA2mD,GAAA8F,EAAAC,EAAAC,GAEAzb,EAAA3vC,KAAAf,MAEAmsD,EAAAA,GAAA,KACAF,EAAAA,GAAA,IAKA,IAAAG,GAAA,KACAD,GAAAC,IACAD,EAAAC,GAGAD,EAAAF,IACAE,EAAAF,GASAjsD,KAAAqsD,cAAA,GAAA,GAAA,GAAA,GAAA,GAMArsD,KAAAssD,SAAAL,EAMAjsD,KAAAusD,WAAAJ,EAMAnsD,KAAAwsD,SAAA,KAMAxsD,KAAAysD,gBAAA,EAMAzsD,KAAA0sD,qBAAA,EASA1sD,KAAAg4C,UAAAjL,EAAAW,YAAAC,OAQA3tC,KAAAgwC,aAAA,EAEAhwC,KAAA2sD,cAAAT,GA7GA,GAAAxb,GAAAhwC,EAAA,wBACAqsC,EAAArsC,EAAA,WA+GAylD,GAAAtjD,UAAA0M,OAAA/L,OAAAktC,EAAA7tC,WACAsjD,EAAAtjD,UAAAmH,YAAAm8C,EACA1mD,EAAAD,QAAA2mD,EAOAA,EAAAtjD,UAAA8pD,cAAA,SAAAT,GAEAA,IACAlsD,KAAAqsD,YAAA,GAAA,SAAAH,KAAAA,EAAAlb,MAAAhxC,KAAAqsD,YAAA,GACArsD,KAAAqsD,YAAA,GAAA,YAAAH,KAAAA,EAAAnjB,SAAA/oC,KAAAqsD,YAAA,GACArsD,KAAAqsD,YAAA,GAAA,YAAAH,KAAAA,EAAAxW,SAAA11C,KAAAqsD,YAAA,GACArsD,KAAAqsD,YAAA,GAAA,OAAAH,KAAAA,EAAAU,IAAA5sD,KAAAqsD,YAAA,GACArsD,KAAAqsD,YAAA,GAAA,SAAAH,KAAAA,EAAArZ,MAAA7yC,KAAAqsD,YAAA,KASAlG,EAAAtjD,UAAA8vC,gBAAA,WAIA3yC,KAAAg2C,gCAUAmQ,EAAAtjD,UAAA6wC,YAAA,SAAA7K,GAEA7oC,KAAAkqC,WAAAlqC,KAAA4yC,YAAA,IAAA5yC,KAAAqpC,SAAAroC,QAAAhB,KAAA2zC,aAKA9K,EAAAoV,kBAAApV,EAAAmD,QAAA6gB,UACAhkB,EAAAmD,QAAA6gB,SAAAna,OAAA1yC,QAQAmmD,EAAAtjD,UAAAuuC,iBAAA,SAAA0b,GAEA,GAAAC,GAAAv3C,KAAAyT,MAAA6jC,EAAA9sD,KAAAusD,WACAQ,GAAA/sD,KAAAysD,kBACAzsD,KAAAysD,gBAAAM,IAUA5G,EAAAtjD,UAAA2xC,aAAA,SAAA3L,GAEA,GAAA7oC,KAAAkqC,WAAAlqC,KAAA4yC,YAAA,IAAA5yC,KAAAqpC,SAAAroC,QAAAhB,KAAA2zC,WAAA,CAKA,GAAA5b,GAAA8Q,EAAA9Q,QACAtb,EAAAzc,KAAAkrC,eACA8hB,GAAA,EAEAC,EAAA,EACAC,EAAA,EAEAC,EAAA,EACAC,EAAA,EAEAjP,EAAAtV,EAAAuV,WAAAp+C,KAAAg4C,UACAmG,KAAApmB,EAAAsmB,2BAEAtmB,EAAAsmB,yBAAAF,GAGApmB,EAAAs1B,YAAArtD,KAAA4yC,WAEA5yC,KAAAg2C,8BAEA,KAAA,GAAAr1C,GAAA,EAAAA,EAAAX,KAAAqpC,SAAAroC,SAAAL,EACA,CACA,GAAAiqC,GAAA5qC,KAAAqpC,SAAA1oC,EAEA,IAAAiqC,EAAAV,QAAA,CAKA,GAAAojB,GAAA1iB,EAAA3mC,QAAAqpD,KAIA,IAFAv1B,EAAAs1B,YAAArtD,KAAA4yC,WAAAhI,EAAAiI,MAEAjI,EAAA8K,UAAA,EAAAlgC,KAAA03B,MAAA,EAGA8f,IAEAj1B,EAAAye,aACA/5B,EAAAhc,EACAgc,EAAAzX,EACAyX,EAAA4X,EACA5X,EAAA4uB,EACA5uB,EAAA0uB,GACA1uB,EAAA2uB,IAGA4hB,GAAA,GAGAC,EAAAriB,EAAA2iB,OAAA,IAAAD,EAAA1pD,MAAAgnC,EAAAoG,MAAAr8B,GAAAi2B,EAAA7B,SAAAp0B,EAAA,GACAu4C,EAAAtiB,EAAA2iB,OAAA,IAAAD,EAAAzpD,OAAA+mC,EAAAoG,MAAAl5B,GAAA8yB,EAAA7B,SAAAjxB,EAAA,GAEAq1C,EAAAG,EAAA1pD,MAAAgnC,EAAAoG,MAAAr8B,EACAy4C,EAAAE,EAAAzpD,OAAA+mC,EAAAoG,MAAAl5B,MAIA,CACAk1C,IAEAA,GAAA,GAGApiB,EAAAoL,8BAEA,IAAAwX,GAAA5iB,EAAAM,cAEArC,GAAAmH,YAEAjY,EAAAye,aACAgX,EAAA/sD,EACA+sD,EAAAxoD,EACAwoD,EAAAn5B,EACAm5B,EAAAniB,EACA,EAAAmiB,EAAAriB,GACA,EAAAqiB,EAAApiB,IAKArT,EAAAye,aACAgX,EAAA/sD,EACA+sD,EAAAxoD,EACAwoD,EAAAn5B,EACAm5B,EAAAniB,EACAmiB,EAAAriB,GACAqiB,EAAApiB,IAIA6hB,EAAAriB,EAAA2iB,OAAA,GAAAD,EAAA1pD,MAAA,GACAspD,EAAAtiB,EAAA2iB,OAAA,GAAAD,EAAAzpD,OAAA,GAEAspD,EAAAG,EAAA1pD,MACAwpD,EAAAE,EAAAzpD,OAGAk0B,EAAA01B,UACA7iB,EAAA3mC,QAAA65C,YAAAt2C,OACA8lD,EAAA34C,EACA24C,EAAAx1C,EACAw1C,EAAA1pD,MACA0pD,EAAAzpD,OACAopD,EACAC,EACAC,EACAC,OAUAjH,EAAAtjD,UAAA0C,QAAA,WAGA,GAFAmrC,EAAA7tC,UAAA0C,QAAAqO,MAAA5T,KAAA6T,WAEA7T,KAAAwsD,SACA,IAAA,GAAA7rD,GAAA,EAAAA,EAAAX,KAAAwsD,SAAAxrD,SAAAL,EACAX,KAAAwsD,SAAA7rD,GAAA4E,SAIAvF,MAAAqsD,YAAA,KACArsD,KAAAwsD,SAAA,QAGA3V,WAAA,GAAAqI,uBAAA,KAAAwO,IAAA,SAAAhtD,EAAAjB,EAAAD,GAoBA,QAAAmuD,GAAAvrD,EAAA8pD,EAAA0B,EAAA7iD,GAOA/K,KAAAoC,GAAAA,EAOApC,KAAA6tD,SAAA,EAOA7tD,KAAA8tD,aAAA,EAAA9tD,KAAA6tD,SAOA7tD,KAAA+K,KAAAA,EAOA/K,KAAA+tD,qBAOA/tD,KAAAguD,mBAEA,KAAA,GAAArtD,GAAA,EAAAA,EAAAurD,EAAAlrD,OAAAL,IACA,CACA,GAAAstD,GAAA/B,EAAAvrD,EAEAitD,GAAAjtD,GAEAX,KAAA+tD,kBAAApjD,KAAAsjD,GAIAjuD,KAAAguD,iBAAArjD,KAAAsjD,GAIAjuD,KAAAkuD,aAAA,EACAluD,KAAAmuD,aAAA,KACAnuD,KAAAouD,WAAA,KAEApuD,KAAAquD,cAAA,EACAruD,KAAAsuD,cAAA,KACAtuD,KAAAuuD,YAAA,KAEAvuD,KAAAwuD,cAIAb,EAAA9qD,UAAAmH,YAAA2jD,EACAluD,EAAAD,QAAAmuD,EAOAA,EAAA9qD,UAAA2rD,YAAA,WAEA,GACA7tD,GACAstD,EAFA7rD,EAAApC,KAAAoC,GAIAqsD,EAAA,CAGA,KAFAzuD,KAAAquD,cAAA,EAEA1tD,EAAA,EAAAA,EAAAX,KAAA+tD,kBAAA/sD,OAAAL,IAEAstD,EAAAjuD,KAAA+tD,kBAAAptD,GAEAstD,EAAAnrD,OAAA2rD,EACAA,GAAAR,EAAAljD,KACA/K,KAAAquD,eAAAJ,EAAAljD,IAGA/K,MAAAuuD,YAAA,GAAA1mD,cAAA7H,KAAA+K,KAAA/K,KAAAquD,cAAA,GACAruD,KAAAsuD,cAAAlsD,EAAAK,eAEAL,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAAsuD,eACAlsD,EAAAe,WAAAf,EAAAM,aAAA1C,KAAAuuD,YAAAnsD,EAAAssD,aAIA,IAAAC,GAAA,CAGA,KAFA3uD,KAAAkuD,aAAA,EAEAvtD,EAAA,EAAAA,EAAAX,KAAAguD,iBAAAhtD,OAAAL,IAEAstD,EAAAjuD,KAAAguD,iBAAArtD,GAEAstD,EAAAnrD,OAAA6rD,EACAA,GAAAV,EAAAljD,KACA/K,KAAAkuD,cAAAD,EAAAljD,IAGA/K,MAAAouD,WAAA,GAAAvmD,cAAA7H,KAAA+K,KAAA/K,KAAAkuD,aAAA,GACAluD,KAAAmuD,aAAA/rD,EAAAK,eAEAL,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAAmuD,cACA/rD,EAAAe,WAAAf,EAAAM,aAAA1C,KAAAouD,WAAAhsD,EAAAssD,eAOAf,EAAA9qD,UAAA+rD,cAAA,SAAAvlB,EAAA9zB,EAAAs5C,GAIA,IAAA,GAFAzsD,GAAApC,KAAAoC,GAEAzB,EAAA,EAAAA,EAAAX,KAAA+tD,kBAAA/sD,OAAAL,IACA,CACA,GAAAstD,GAAAjuD,KAAA+tD,kBAAAptD,EACAstD,GAAAa,eAAAzlB,EAAA9zB,EAAAs5C,EAAA7uD,KAAAuuD,YAAAvuD,KAAAquD,cAAAJ,EAAAnrD,QAGAV,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAAsuD,eACAlsD,EAAAc,cAAAd,EAAAM,aAAA,EAAA1C,KAAAuuD,cAOAZ,EAAA9qD,UAAAksD,aAAA,SAAA1lB,EAAA9zB,EAAAs5C,GAIA,IAAA,GAFAzsD,GAAApC,KAAAoC,GAEAzB,EAAA,EAAAA,EAAAX,KAAAguD,iBAAAhtD,OAAAL,IACA,CACA,GAAAstD,GAAAjuD,KAAAguD,iBAAArtD,EACAstD,GAAAa,eAAAzlB,EAAA9zB,EAAAs5C,EAAA7uD,KAAAouD,WAAApuD,KAAAkuD,aAAAD,EAAAnrD,QAGAV,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAAmuD,cACA/rD,EAAAc,cAAAd,EAAAM,aAAA,EAAA1C,KAAAouD,aAOAT,EAAA9qD,UAAAG,KAAA,WAEA,GACArC,GAAAstD,EADA7rD,EAAApC,KAAAoC,EAKA,KAFAA,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAAsuD,eAEA3tD,EAAA,EAAAA,EAAAX,KAAA+tD,kBAAA/sD,OAAAL,IAEAstD,EAAAjuD,KAAA+tD,kBAAAptD,GACAyB,EAAAsM,oBAAAu/C,EAAA7jD,UAAA6jD,EAAAljD,KAAA3I,EAAA4F,OAAA,EAAA,EAAAhI,KAAAquD,cAAA,EAAAJ,EAAAnrD,OAKA,KAFAV,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAAmuD,cAEAxtD,EAAA,EAAAA,EAAAX,KAAAguD,iBAAAhtD,OAAAL,IAEAstD,EAAAjuD,KAAAguD,iBAAArtD,GACAyB,EAAAsM,oBAAAu/C,EAAA7jD,UAAA6jD,EAAAljD,KAAA3I,EAAA4F,OAAA,EAAA,EAAAhI,KAAAkuD,aAAA,EAAAD,EAAAnrD,SAQA6qD,EAAA9qD,UAAA0C,QAAA,WAEAvF,KAAA+tD,kBAAA,KACA/tD,KAAAuuD,YAAA,KACAvuD,KAAAoC,GAAAwgD,aAAA5iD,KAAAsuD,eAEAtuD,KAAAguD,iBAAA,KACAhuD,KAAAouD,WAAA,KACApuD,KAAAoC,GAAAwgD,aAAA5iD,KAAAmuD,oBAGAa,IAAA,SAAAtuD,EAAAjB,EAAAD,GAyBA,QAAA6mD,GAAAxd,GAEA+W,EAAA7+C,KAAAf,KAAA6oC,EAMA,IAAAomB,GAAA,KAOAjvD,MAAAshD,QAAA,GAAAqB,aAAAsM,EAEA,KAAA,GAAAtuD,GAAA,EAAA+oB,EAAA,EAAAulC,EAAAtuD,EAAAA,GAAA,EAAA+oB,GAAA,EAEA1pB,KAAAshD,QAAA3gD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAshD,QAAA3gD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAshD,QAAA3gD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAshD,QAAA3gD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAshD,QAAA3gD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAshD,QAAA3gD,EAAA,GAAA+oB,EAAA,CAQA1pB,MAAAqN,OAAA,KAEArN,KAAA8J,YAAA,KAEA9J,KAAAksD,WAAA,KAEAlsD,KAAAkvD,WAAA,GAAAve,GAAAG,OA9DA,GAAA8O,GAAAl/C,EAAA,8CACA2rC,EAAA3rC,EAAA,uCACAyuD,EAAAzuD,EAAA,oBACAitD,EAAAjtD,EAAA,oBACAiwC,EAAAjwC,EAAA,aA6DA2lD,GAAAxjD,UAAA0M,OAAA/L,OAAAo8C,EAAA/8C,WACAwjD,EAAAxjD,UAAAmH,YAAAq8C,EACA5mD,EAAAD,QAAA6mD,EAEAha,EAAAC,eAAA,WAAA+Z,GAOAA,EAAAxjD,UAAA49C,gBAAA,WAEA,GAAAr+C,GAAApC,KAAA6oC,SAAAzmC,EAGApC,MAAAqN,OAAA,GAAA8hD,GAAAnvD,KAAA6oC,SAAAumB,eAEApvD,KAAA8J,YAAA1H,EAAAK,eAKAL,EAAAgB,WAAAhB,EAAAmB,qBAAAvD,KAAA8J,aACA1H,EAAAe,WAAAf,EAAAmB,qBAAAvD,KAAAshD,QAAAl/C,EAAAO,aAEA3C,KAAAksD,aAGA9hD,UAAApK,KAAAqN,OAAA5G,WAAA26C,gBACAr2C,KAAA,EACA+jD,eAAA9uD,KAAAqvD,eACAvsD,OAAA,IAIAsH,UAAApK,KAAAqN,OAAA5G,WAAA6oD,eACAvkD,KAAA,EACA+jD,eAAA9uD,KAAAuvD,eACAzsD,OAAA,IAIAsH,UAAApK,KAAAqN,OAAA5G,WAAA+oD,UACAzkD,KAAA,EACA+jD,eAAA9uD,KAAAyvD,eACA3sD,OAAA,IAIAsH,UAAApK,KAAAqN,OAAA5G,WAAAipD,cACA3kD,KAAA,EACA+jD,eAAA9uD,KAAA2vD,UACA7sD,OAAA,IAIAsH,UAAApK,KAAAqN,OAAA5G,WAAA46C,OACAt2C,KAAA,EACA+jD,eAAA9uD,KAAA4vD,YACA9sD,OAAA,KASAujD,EAAAxjD,UAAA2H,MAAA,WAEA,GAAApI,GAAApC,KAAA6oC,SAAAzmC,EAGAA,GAAA+F,cAAA/F,EAAAgG,UAIAhG,EAAAgB,WAAAhB,EAAAmB,qBAAAvD,KAAA8J,YAEA,IAAAuD,GAAArN,KAAAqN,MAEArN,MAAA6oC,SAAAumB,cAAAS,UAAAxiD,IASAg5C,EAAAxjD,UAAA6vC,OAAA,SAAA6D,GAEA,GAAAlN,GAAAkN,EAAAlN,SACAymB,EAAAzmB,EAAAroC,OACAirD,EAAA1V,EAAA+V,SACAH,EAAA5V,EAAAgW,UAEA,IAAA,IAAAuD,EAAA,CAIAA,EAAA7D,IAEA6D,EAAA7D,GAGA1V,EAAAiW,WAEAjW,EAAAiW,SAAAxsD,KAAA+vD,gBAAAxZ,IAIAv2C,KAAA6oC,SAAAgY,iBAAAC,aAAAvK,EAAAyB,UAEA,IAAA51C,GAAApC,KAAA6oC,SAAAzmC,GAEAmoB,EAAAgsB,EAAArL,eAAAgf,KAAAlqD,KAAAkvD,WACA3kC,GAAAy/B,QAAAhqD,KAAA6oC,SAAAmnB,oBAAAC,kBACA7tD,EAAA8tD,iBAAAlwD,KAAAqN,OAAA1G,SAAAspD,iBAAAE,WAAA,EAAA5lC,EAAA22B,SAAA,IACA9+C,EAAAguD,UAAApwD,KAAAqN,OAAA1G,SAAA0pD,OAAAF,UAAA5Z,EAAA3D,WAIA,IAAAkL,GAAAzU,EAAA,GAAAinB,SAAAxS,WAEA,IAAAA,EAAAyS,YAAAnuD,EAAAkJ,IAeAlJ,EAAAiG,YAAAjG,EAAAkC,WAAAw5C,EAAAyS,YAAAnuD,EAAAkJ,SAdA,CAEA,IAAAtL,KAAA6oC,SAAA2nB,cAAA1S,GAEA,MAGAvH,GAAA8V,YAAA,IAAA9V,EAAA8V,YAAA,KAEA9V,EAAAkW,gBAAA,GASA,IAAA,GAAA9rD,GAAA,EAAA+oB,EAAA,EAAAomC,EAAAnvD,EAAAA,GAAAwrD,EAAAziC,GAAA,EACA,CACA,GAAAmlC,GAAAiB,EAAAnvD,CACAkuD,GAAA1C,IAEA0C,EAAA1C,EAGA,IAAA3pD,GAAA+zC,EAAAiW,SAAA9iC,EAGAlnB,GAAAosD,cAAAvlB,EAAA1oC,EAAAkuD,GAGAtY,EAAAkW,kBAAA/iC,IAEAlnB,EAAAusD,aAAA1lB,EAAA1oC,EAAAkuD,GACAtY,EAAAkW,gBAAA/iC,EAAA,GAIAlnB,EAAAQ,KAAAhD,KAAAqN,QAGAjL,EAAA4I,aAAA5I,EAAA6sC,UAAA,EAAA4f,EAAAzsD,EAAA6I,eAAA,GACAjL,KAAA6oC,SAAA0Y,eASA8E,EAAAxjD,UAAAktD,gBAAA,SAAAxZ,GAEA,GAKA51C,GALAyB,EAAApC,KAAA6oC,SAAAzmC,GACAquD,KACA1lD,EAAAwrC,EAAA+V,SACAH,EAAA5V,EAAAgW,WACAqB,EAAArX,EAAA8V,WAGA,KAAA1rD,EAAA,EAAAoK,EAAApK,EAAAA,GAAAwrD,EAEAsE,EAAA9lD,KAAA,GAAAgjD,GAAAvrD,EAAApC,KAAAksD,WAAA0B,EAAAzB,GAGA,OAAAsE,IAaApK,EAAAxjD,UAAAwsD,eAAA,SAAAhmB,EAAA9zB,EAAAs5C,EAAA7gD,EAAAzD,EAAAzH,GASA,IAAA,GAPA4tD,GACAzsD,EACAmhB,EACAslB,EACAC,EACA2T,EAAAC,EAAAC,EAAAC,EAEA99C,EAAA,EAAAkuD,EAAAluD,EAAAA,IAEA+vD,EAAArnB,EAAA9zB,EAAA5U,GACAsD,EAAAysD,EAAAJ,SACA5lB,EAAAgmB,EAAA1f,MAAAr8B,EACAg2B,EAAA+lB,EAAA1f,MAAAl5B,EAEA7T,EAAAmhB,MAGAA,EAAAnhB,EAAAmhB,KAEAm5B,EAAAn5B,EAAAzQ,EAAA+7C,EAAAnD,OAAA54C,EAAAyQ,EAAAxhB,MACA06C,EAAAC,EAAAt6C,EAAA0sD,KAAA/sD,MAEA66C,EAAAr5B,EAAAtN,EAAA44C,EAAAnD,OAAAz1C,EAAAsN,EAAAvhB,OACA26C,EAAAC,EAAAx6C,EAAA0sD,KAAA9sD,SAIAy6C,EAAAr6C,EAAA2sD,OAAA,OAAA,EAAAF,EAAAnD,OAAA54C,GACA4pC,EAAAt6C,EAAA2sD,OAAA,OAAAF,EAAAnD,OAAA54C,EAEA6pC,EAAAv6C,EAAA2sD,OAAA/sD,QAAA,EAAA6sD,EAAAnD,OAAAz1C,GACA2mC,EAAAx6C,EAAA2sD,OAAA/sD,QAAA6sD,EAAAnD,OAAAz1C,GAGA9J,EAAAlL,GAAAy7C,EAAA7T,EACA18B,EAAAlL,EAAA,GAAA27C,EAAA9T,EAEA38B,EAAAlL,EAAAyH,GAAA+zC,EAAA5T,EACA18B,EAAAlL,EAAAyH,EAAA,GAAAk0C,EAAA9T,EAEA38B,EAAAlL,EAAA,EAAAyH,GAAA+zC,EAAA5T,EACA18B,EAAAlL,EAAA,EAAAyH,EAAA,GAAAi0C,EAAA7T,EAEA38B,EAAAlL,EAAA,EAAAyH,GAAAg0C,EAAA7T,EACA18B,EAAAlL,EAAA,EAAAyH,EAAA,GAAAi0C,EAAA7T,EAEA7nC,GAAA,EAAAyH,GAcA87C,EAAAxjD,UAAA0sD,eAAA,SAAAlmB,EAAA9zB,EAAAs5C,EAAA7gD,EAAAzD,EAAAzH,GAEA,IAAA,GAAAnC,GAAA,EAAAkuD,EAAAluD,EAAAA,IACA,CACA,GAAAkwD,GAAAxnB,EAAA9zB,EAAA5U,GAAAooC,QAEA/6B,GAAAlL,GAAA+tD,EAAAl8C,EACA3G,EAAAlL,EAAA,GAAA+tD,EAAA/4C,EAEA9J,EAAAlL,EAAAyH,GAAAsmD,EAAAl8C,EACA3G,EAAAlL,EAAAyH,EAAA,GAAAsmD,EAAA/4C,EAEA9J,EAAAlL,EAAA,EAAAyH,GAAAsmD,EAAAl8C,EACA3G,EAAAlL,EAAA,EAAAyH,EAAA,GAAAsmD,EAAA/4C,EAEA9J,EAAAlL,EAAA,EAAAyH,GAAAsmD,EAAAl8C,EACA3G,EAAAlL,EAAA,EAAAyH,EAAA,GAAAsmD,EAAA/4C,EAEAhV,GAAA,EAAAyH,IAcA87C,EAAAxjD,UAAA4sD,eAAA,SAAApmB,EAAA9zB,EAAAs5C,EAAA7gD,EAAAzD,EAAAzH,GAEA,IAAA,GAAAnC,GAAA,EAAAkuD,EAAAluD,EAAAA,IACA,CACA,GAAAmwD,GAAAznB,EAAA9zB,EAAA5U,GAAA+0C,QAGA1nC,GAAAlL,GAAAguD,EACA9iD,EAAAlL,EAAAyH,GAAAumD,EACA9iD,EAAAlL,EAAA,EAAAyH,GAAAumD,EACA9iD,EAAAlL,EAAA,EAAAyH,GAAAumD,EAEAhuD,GAAA,EAAAyH,IAaA87C,EAAAxjD,UAAA8sD,UAAA,SAAAtmB,EAAA9zB,EAAAs5C,EAAA7gD,EAAAzD,EAAAzH,GAEA,IAAA,GAAAnC,GAAA,EAAAkuD,EAAAluD,EAAAA,IACA,CACA,GAAAowD,GAAA1nB,EAAA9zB,EAAA5U,GAAA2vD,SAAAU,IAEAD,IAEA/iD,EAAAlL,GAAAiuD,EAAAE,GACAjjD,EAAAlL,EAAA,GAAAiuD,EAAAG,GAEAljD,EAAAlL,EAAAyH,GAAAwmD,EAAAnW,GACA5sC,EAAAlL,EAAAyH,EAAA,GAAAwmD,EAAAlW,GAEA7sC,EAAAlL,EAAA,EAAAyH,GAAAwmD,EAAAjW,GACA9sC,EAAAlL,EAAA,EAAAyH,EAAA,GAAAwmD,EAAAhW,GAEA/sC,EAAAlL,EAAA,EAAAyH,GAAAwmD,EAAArS,GACA1wC,EAAAlL,EAAA,EAAAyH,EAAA,GAAAwmD,EAAApS,GAEA77C,GAAA,EAAAyH,IAKAyD,EAAAlL,GAAA,EACAkL,EAAAlL,EAAA,GAAA,EAEAkL,EAAAlL,EAAAyH,GAAA,EACAyD,EAAAlL,EAAAyH,EAAA,GAAA,EAEAyD,EAAAlL,EAAA,EAAAyH,GAAA,EACAyD,EAAAlL,EAAA,EAAAyH,EAAA,GAAA,EAEAyD,EAAAlL,EAAA,EAAAyH,GAAA,EACAyD,EAAAlL,EAAA,EAAAyH,EAAA,GAAA,EAEAzH,GAAA,EAAAyH,KAcA87C,EAAAxjD,UAAA+sD,YAAA,SAAAvmB,EAAA9zB,EAAAs5C,EAAA7gD,EAAAzD,EAAAzH,GAEA,IAAA,GAAAnC,GAAA,EAAAkuD,EAAAluD,EAAAA,IACA,CACA,GAAAwwD,GAAA9nB,EAAA9zB,EAAA5U,GAAAkyC,KAEA7kC,GAAAlL,GAAAquD,EACAnjD,EAAAlL,EAAAyH,GAAA4mD,EACAnjD,EAAAlL,EAAA,EAAAyH,GAAA4mD,EACAnjD,EAAAlL,EAAA,EAAAyH,GAAA4mD,EAEAruD,GAAA,EAAAyH,IASA87C,EAAAxjD,UAAA0C,QAAA,WAEAvF,KAAA6oC,SAAAzmC,IACApC,KAAA6oC,SAAAzmC,GAAAwgD,aAAA5iD,KAAA8J,aAGA81C,EAAA/8C,UAAA0C,QAAAqO,MAAA5T,KAAA6T,WAEA7T,KAAAqN,OAAA9H,UAEAvF,KAAAshD,QAAA,KACAthD,KAAAkvD,WAAA,QAGAtN,aAAA,GAAAC,sCAAA,GAAAC,6CAAA,GAAAsP,mBAAA,GAAAC,mBAAA,KAAAC,IAAA,SAAA5wD,EAAAjB,EAAAD,GASA,QAAA2vD,GAAAC,GAEAmC,EAAAxwD,KAAAf,KACAovD,GAGA,kCACA,gCACA,0BAEA,iCACA,yBACA,6BAEA,iCAEA,8BACA,wBAEA,mBACA,+BAEA,wFACA,wFACA,6BAEA,yEAEA,oCACA,sBACA,KACAx+C,KAAA,OAGA,wBAEA,8BACA,wBAEA,8BACA,wBAEA,mBACA,uEACA,iCACA,0BACA,KACAA,KAAA;AAGAy/C,QAAAhuD,KAAA,KAAA8M,MAAA,KAIAmgD,eAAA,EAEAE,UAAA,IAhEA,GAAA+B,GAAA7wD,EAAA,8CAwEAyuD,GAAAtsD,UAAA0M,OAAA/L,OAAA+tD,EAAA1uD,WACAssD,EAAAtsD,UAAAmH,YAAAmlD,EAEA1vD,EAAAD,QAAA2vD,IAEAqC,8CAAA,KAAAC,IAAA,SAAA/wD,EAAAjB,EAAAD,GA0BA,QAAAkyD,GAAAC,EAAA/tD,EAAAC,EAAAgH,GAOA,GALAmtB,EAAAj3B,KAAAf,MAEA6qC,EAAA+mB,SAAAD,GAGA9mD,EAEA,IAAA,GAAAlK,KAAAosC,GAAAyC,uBAEA,mBAAA3kC,GAAAlK,KAEAkK,EAAAlK,GAAAosC,EAAAyC,uBAAA7uC,QAMAkK,GAAAkiC,EAAAyC,sBAUAxvC,MAAAqC,KAAA0qC,EAAAO,cAAAC,QAQAvtC,KAAA4D,MAAAA,GAAA,IAQA5D,KAAA6D,OAAAA,GAAA,IAOA7D,KAAA4pC,KAAA/+B,EAAA++B,MAAA/J,SAAAC,cAAA,UAQA9/B,KAAAyvC,WAAA5kC,EAAA4kC,WAOAzvC,KAAA6vC,YAAAhlC,EAAAglC,YAOA7vC,KAAA4vC,WAAA/kC,EAAA+kC,aAAA,EAOA5vC,KAAAo+C,WAAA,KAOAp+C,KAAA+vC,sBAAAllC,EAAAklC,sBAWA/vC,KAAA8vC,kBAAAjlC,EAAAilC,kBAQA9vC,KAAAgwC,YAAAnlC,EAAAmlC,YAQAhwC,KAAA6xD,iBAAA,EAQA7xD,KAAA8xD,sBAAA,EAAA,EAAA,EAAA,GAQA9xD,KAAA+xD,uBAAA,UAEA/xD,KAAAwrC,gBAAA3gC,EAAA2gC,iBAAAxrC,KAAA6xD,iBAQA7xD,KAAAu1C,0BAAArK,eAAA,GAAAyF,GAAAG,OAAAr0B,WAAAyuB,eAAA,GAAAyF,GAAAG,QAAA8B,WAAA,EAAAvJ,aAQArpC,KAAAuqC,oBAAAvqC,KAAAu1C,yBA9KA,GAAA1K,GAAAnqC,EAAA,YACAiwC,EAAAjwC,EAAA,WACAqsC,EAAArsC,EAAA,YACAs3B,EAAAt3B,EAAA,gBA+KAgxD,GAAA7uD,UAAA0M,OAAA/L,OAAAw0B,EAAAn1B,WACA6uD,EAAA7uD,UAAAmH,YAAA0nD,EACAjyD,EAAAD,QAAAkyD,EAEAniD,OAAAwhC,iBAAA2gB,EAAA7uD,WAOA2oC,iBAEAx7B,IAAA,WAEA,MAAAhQ,MAAA6xD,kBAEA3hD,IAAA,SAAA8O,GAEAhf,KAAA6xD,iBAAA7yC,EACAhf,KAAA+xD,uBAAAlnB,EAAAmnB,WAAAhzC,GACA6rB,EAAAsW,QAAAniC,EAAAhf,KAAA8xD,0BAWAJ,EAAA7uD,UAAAwC,OAAA,SAAAzB,EAAAC,GACA7D,KAAA4D,MAAAA,EAAA5D,KAAAyvC,WACAzvC,KAAA6D,OAAAA,EAAA7D,KAAAyvC,WAEAzvC,KAAA4pC,KAAAhmC,MAAA5D,KAAA4D,MACA5D,KAAA4pC,KAAA/lC,OAAA7D,KAAA6D,OAEA7D,KAAA4vC,aAEA5vC,KAAA4pC,KAAAd,MAAAllC,MAAA5D,KAAA4D,MAAA5D,KAAAyvC,WAAA,KACAzvC,KAAA4pC,KAAAd,MAAAjlC,OAAA7D,KAAA6D,OAAA7D,KAAAyvC,WAAA,OASAiiB,EAAA7uD,UAAA0C,QAAA,SAAA0sD,GACAA,GAAAjyD,KAAA4pC,KAAAC,YAEA7pC,KAAA4pC,KAAAC,WAAAE,YAAA/pC,KAAA4pC,MAGA5pC,KAAAqC,KAAA0qC,EAAAO,cAAAC,QAEAvtC,KAAA4D,MAAA,EACA5D,KAAA6D,OAAA,EAEA7D,KAAA4pC,KAAA,KAEA5pC,KAAAyvC,WAAA,EAEAzvC,KAAA6vC,aAAA,EAEA7vC,KAAA4vC,YAAA,EAEA5vC,KAAAo+C,WAAA,KAEAp+C,KAAA+vC,uBAAA,EACA/vC,KAAA8vC,mBAAA,EAEA9vC,KAAAgwC,aAAA,EAEAhwC,KAAA6xD,iBAAA,EACA7xD,KAAA8xD,qBAAA,KACA9xD,KAAA+xD,uBAAA,QAGAlb,WAAA,GAAAnC,UAAA,GAAAE,WAAA,IAAApY,cAAA,KAAA01B,IAAA,SAAAxxD,EAAAjB,EAAAD,GA0BA,QAAA+sC,GAAA3oC,EAAAC,EAAAgH,GAEAA,EAAAA,MAEA6mD,EAAA3wD,KAAAf,KAAA,SAAA4D,EAAAC,EAAAgH,GAEA7K,KAAAqC,KAAA0qC,EAAAO,cAAAG,OAOAztC,KAAA+3B,QAAA/3B,KAAA4pC,KAAAv+B,WAAA,MAAAwnC,MAAA7yC,KAAA6vC,cAOA7vC,KAAAmyD,SAAA,EAOAnyD,KAAAk0C,YAAA,GAAAke,GAOApyD,KAAAqyD,eAAA,wBAEAryD,KAAA+3B,QAAAu6B,wBAEAtyD,KAAA+3B,QAAAw6B,4BAEAvyD,KAAAqyD,eAAA,8BAEAryD,KAAA+3B,QAAAy6B,yBAEAxyD,KAAAqyD,eAAA,2BAEAryD,KAAA+3B,QAAA06B,uBAEAzyD,KAAAqyD,eAAA,yBAEAryD,KAAA+3B,QAAA26B,0BAEA1yD,KAAAqyD,eAAA,4BAIAryD,KAAA2yD,cAEA3yD,KAAA4yD,iBAQA5yD,KAAAu1C,0BACArK,eAAA,GAAAyF,GAAAG,OACA8B,WAAA,GAIA5yC,KAAAqF,OAAAzB,EAAAC,GAjGA,GAAA6tD,GAAAhxD,EAAA,qBACA0xD,EAAA1xD,EAAA,6BACAmqC,EAAAnqC,EAAA,eACAiwC,EAAAjwC,EAAA,cACAqsC,EAAArsC,EAAA,cAiGA6rC,GAAA1pC,UAAA0M,OAAA/L,OAAAkuD,EAAA7uD,WACA0pC,EAAA1pC,UAAAmH,YAAAuiC,EACA9sC,EAAAD,QAAA+sC,EACA1B,EAAAgoB,aAAAC,MAAAvmB,GAOAA,EAAA1pC,UAAA6vC,OAAA,SAAA79B,GAEA7U,KAAAonB,KAAA,YAEA,IAAA2rC,GAAAl+C,EAAAy8B,MAEAtxC,MAAAuqC,oBAAA11B,EAEAA,EAAAy8B,OAAAtxC,KAAAu1C,yBAGA1gC,EAAA89B,kBAEA99B,EAAAy8B,OAAAyhB,EAEA/yD,KAAA+3B,QAAAye,aAAA,EAAA,EAAA,EAAA,EAAA,EAAA,GAEAx2C,KAAA+3B,QAAAs1B,YAAA,EAEArtD,KAAA+3B,QAAAsmB,yBAAAr+C,KAAAo+C,WAAArR,EAAAW,YAAAC,QAEA5N,UAAAC,YAAAhgC,KAAA4pC,KAAAopB,eAEAhzD,KAAA+3B,QAAAk7B,UAAA,QACAjzD,KAAA+3B,QAAAhzB,SAGA/E,KAAA8vC,oBAEA9vC,KAAA6vC,YAEA7vC,KAAA+3B,QAAAm7B,UAAA,EAAA,EAAAlzD,KAAA4D,MAAA5D,KAAA6D,SAIA7D,KAAA+3B,QAAAk7B,UAAAjzD,KAAA+xD,uBACA/xD,KAAA+3B,QAAAo7B,SAAA,EAAA,EAAAnzD,KAAA4D,MAAA5D,KAAA6D,UAIA7D,KAAAozD,oBAAAv+C,EAAA7U,KAAA+3B,SAEA/3B,KAAAonB,KAAA,eAQAmlB,EAAA1pC,UAAA0C,QAAA,SAAA0sD,GAEAjyD,KAAAqzD,iBAGA3B,EAAA7uD,UAAA0C,QAAAxE,KAAAf,KAAAiyD,GAEAjyD,KAAA+3B,QAAA,KAEA/3B,KAAAmyD,SAAA,EAEAnyD,KAAAk0C,YAAA3uC,UACAvF,KAAAk0C,YAAA,KAEAl0C,KAAAqyD,eAAA,MASA9lB,EAAA1pC,UAAAuwD,oBAAA,SAAAnpB,EAAAlS,GAEA,GAAAu7B,GAAAtzD,KAAA+3B,OAEA/3B,MAAA+3B,QAAAA,EACAkS,EAAAuK,aAAAx0C,MACAA,KAAA+3B,QAAAu7B,GASA/mB,EAAA1pC,UAAAwC,OAAA,SAAAoU,EAAA2X,GAEAsgC,EAAA7uD,UAAAwC,OAAAtE,KAAAf,KAAAyZ,EAAA2X,GAIApxB,KAAAqyD,iBAEAryD,KAAA+3B,QAAA/3B,KAAAqyD,gBAAAtlB,EAAAqC,YAAA/M,UAAA0K,EAAAqC,YAAAxmC,SAUA2jC,EAAA1pC,UAAA+vD,eAAA,WAEA5yD,KAAAo+C,aAEAp+C,KAAAo+C,cAEAvT,EAAA0oB,6BAEAvzD,KAAAo+C,WAAArR,EAAAW,YAAAC,QAAA,cACA3tC,KAAAo+C,WAAArR,EAAAW,YAAAE,KAAA,UACA5tC,KAAAo+C,WAAArR,EAAAW,YAAAG,UAAA,WACA7tC,KAAAo+C,WAAArR,EAAAW,YAAAI,QAAA,SACA9tC,KAAAo+C,WAAArR,EAAAW,YAAAK,SAAA,UACA/tC,KAAAo+C,WAAArR,EAAAW,YAAAM,QAAA,SACAhuC,KAAAo+C,WAAArR,EAAAW,YAAAO,SAAA,UACAjuC,KAAAo+C,WAAArR,EAAAW,YAAAQ,aAAA,cACAluC,KAAAo+C,WAAArR,EAAAW,YAAAS,YAAA,aACAnuC,KAAAo+C,WAAArR,EAAAW,YAAAU,YAAA,aACApuC,KAAAo+C,WAAArR,EAAAW,YAAAW,YAAA,aACAruC,KAAAo+C,WAAArR,EAAAW,YAAAY,YAAA,aACAtuC,KAAAo+C,WAAArR,EAAAW,YAAAa,WAAA,YACAvuC,KAAAo+C,WAAArR,EAAAW,YAAAc,KAAA,MACAxuC,KAAAo+C,WAAArR,EAAAW,YAAAe,YAAA,WACAzuC,KAAAo+C,WAAArR,EAAAW,YAAAgB,OAAA,QACA1uC,KAAAo+C,WAAArR,EAAAW,YAAAiB,YAAA,eAKA3uC,KAAAo+C,WAAArR,EAAAW,YAAAC,QAAA,cACA3tC,KAAAo+C,WAAArR,EAAAW,YAAAE,KAAA,UACA5tC,KAAAo+C,WAAArR,EAAAW,YAAAG,UAAA,cACA7tC,KAAAo+C,WAAArR,EAAAW,YAAAI,QAAA,cACA9tC,KAAAo+C,WAAArR,EAAAW,YAAAK,SAAA,cACA/tC,KAAAo+C,WAAArR,EAAAW,YAAAM,QAAA,cACAhuC,KAAAo+C,WAAArR,EAAAW,YAAAO,SAAA,cACAjuC,KAAAo+C,WAAArR,EAAAW,YAAAQ,aAAA,cACAluC,KAAAo+C,WAAArR,EAAAW,YAAAS,YAAA,cACAnuC,KAAAo+C,WAAArR,EAAAW,YAAAU,YAAA,cACApuC,KAAAo+C,WAAArR,EAAAW,YAAAW,YAAA,cACAruC,KAAAo+C,WAAArR,EAAAW,YAAAY,YAAA,cACAtuC,KAAAo+C,WAAArR,EAAAW,YAAAa,WAAA,cACAvuC,KAAAo+C,WAAArR,EAAAW,YAAAc,KAAA,cACAxuC,KAAAo+C,WAAArR,EAAAW,YAAAe,YAAA,cACAzuC,KAAAo+C,WAAArR,EAAAW,YAAAgB,OAAA,cACA1uC,KAAAo+C,WAAArR,EAAAW,YAAAiB,YAAA,mBAKAgT,cAAA,GAAAC,aAAA,GAAAG,cAAA,IAAAyR,oBAAA,GAAAC,4BAAA,KAAAC,IAAA,SAAAhzD,EAAAjB,EAAAD,GASA,QAAAi5C,GAAA70C,EAAAC,GAOA7D,KAAAoL,OAAAy0B,SAAAC,cAAA,UAOA9/B,KAAA+3B,QAAA/3B,KAAAoL,OAAAC,WAAA,MAEArL,KAAAoL,OAAAxH,MAAAA,EACA5D,KAAAoL,OAAAvH,OAAAA,EAGA40C,EAAA51C,UAAAmH,YAAAyuC,EACAh5C,EAAAD,QAAAi5C,EAEAlpC,OAAAwhC,iBAAA0H,EAAA51C,WAOAe,OACAoM,IAAA,WAEA,MAAAhQ,MAAAoL,OAAAxH,OAEAsM,IAAA,SAAA8O,GAEAhf,KAAAoL,OAAAxH,MAAAob,IASAnb,QACAmM,IAAA,WAEA,MAAAhQ,MAAAoL,OAAAvH,QAEAqM,IAAA,SAAA8O,GAEAhf,KAAAoL,OAAAvH,OAAAmb,MAUAy5B,EAAA51C,UAAAkC,MAAA,WAEA/E,KAAA+3B,QAAAye,aAAA,EAAA,EAAA,EAAA,EAAA,EAAA,GACAx2C,KAAA+3B,QAAAm7B,UAAA,EAAA,EAAAlzD,KAAAoL,OAAAxH,MAAA5D,KAAAoL,OAAAvH,SASA40C,EAAA51C,UAAAwC,OAAA,SAAAzB,EAAAC,GAEA7D,KAAAoL,OAAAxH,MAAAA,EACA5D,KAAAoL,OAAAvH,OAAAA,GAOA40C,EAAA51C,UAAA0C,QAAA,WAEAvF,KAAA+3B,QAAA,KACA/3B,KAAAoL,OAAA,WAGAuoD,IAAA,SAAAjzD,EAAAjB,EAAAD,GACA,GAAAutC,GAAArsC,EAAA,kBAQAg4C,IACAj5C,GAAAD,QAAAk5C,EAQAA,EAAAsF,eAAA,SAAAE,EAAAnmB,GAEA,GAAA6a,GAAAsL,EAAAtL,UAEAsL,GAAAn0C,QAEA/J,KAAA4zD,mBAAA1V,GACAA,EAAAn0C,OAAA,EAGA,KAAA,GAAApJ,GAAA,EAAAA,EAAAu9C,EAAArG,aAAA72C,OAAAL,IACA,CACA,GAAA2B,GAAA47C,EAAArG,aAAAl3C,GACAw4C,EAAA72C,EAAA62C,MAEA6D,EAAA16C,EAAAm9C,UACA7H,EAAAt1C,EAAAk9C,SAIA,IAFAznB,EAAA4f,UAAAr1C,EAAAq1C,UAEAr1C,EAAAD,OAAA0qC,EAAAkD,OAAAC,KACA,CACAnY,EAAA87B,WAEA,IAAAza,GAAAD,EAAAC,MAEArhB,GAAAyhB,OAAAJ,EAAA,GAAAA,EAAA,GAEA,KAAA,GAAA1vB,GAAA,EAAAA,EAAA0vB,EAAAp4C,OAAA,EAAA0oB,IAEAqO,EAAA0hB,OAAAL,EAAA,EAAA1vB,GAAA0vB,EAAA,EAAA1vB,EAAA,GAGAyvB,GAAAG,QAEAvhB,EAAA0hB,OAAAL,EAAA,GAAAA,EAAA,IAIAA,EAAA,KAAAA,EAAAA,EAAAp4C,OAAA,IAAAo4C,EAAA,KAAAA,EAAAA,EAAAp4C,OAAA,IAEA+2B,EAAA+7B,YAGAxxD,EAAA26C,OAEAllB,EAAAs1B,YAAA/qD,EAAAo1C,UAAA9E,EACA7a,EAAAk7B,UAAA,KAAA,SAAA,EAAAjW,GAAAviC,SAAA,KAAAsK,OAAA,IACAgT,EAAAklB,QAEA36C,EAAAq1C,YAEA5f,EAAAs1B,YAAA/qD,EAAA42C,UAAAtG,EACA7a,EAAAg8B,YAAA,KAAA,SAAA,EAAAnc,GAAAn9B,SAAA,KAAAsK,OAAA,IACAgT,EAAAi8B,cAGA,IAAA1xD,EAAAD,OAAA0qC,EAAAkD,OAAAE,MAGA7tC,EAAA06C,WAAA,IAAA16C,EAAA06C,aAEAjlB,EAAAs1B,YAAA/qD,EAAAo1C,UAAA9E,EACA7a,EAAAk7B,UAAA,KAAA,SAAA,EAAAjW,GAAAviC,SAAA,KAAAsK,OAAA,IACAgT,EAAAo7B,SAAAha,EAAAxkC,EAAAwkC,EAAArhC,EAAAqhC,EAAAv1C,MAAAu1C,EAAAt1C,SAGAvB,EAAAq1C,YAEA5f,EAAAs1B,YAAA/qD,EAAA42C,UAAAtG,EACA7a,EAAAg8B,YAAA,KAAA,SAAA,EAAAnc,GAAAn9B,SAAA,KAAAsK,OAAA,IACAgT,EAAAk8B,WAAA9a,EAAAxkC,EAAAwkC,EAAArhC,EAAAqhC,EAAAv1C,MAAAu1C,EAAAt1C,aAGA,IAAAvB,EAAAD,OAAA0qC,EAAAkD,OAAAG,KAGArY,EAAA87B,YACA97B,EAAAgkB,IAAA5C,EAAAxkC,EAAAwkC,EAAArhC,EAAAqhC,EAAA6B,OAAA,EAAA,EAAAxlC,KAAA03B,IACAnV,EAAA+7B,YAEAxxD,EAAA26C,OAEAllB,EAAAs1B,YAAA/qD,EAAAo1C,UAAA9E,EACA7a,EAAAk7B,UAAA,KAAA,SAAA,EAAAjW,GAAAviC,SAAA,KAAAsK,OAAA,IACAgT,EAAAklB,QAEA36C,EAAAq1C,YAEA5f,EAAAs1B,YAAA/qD,EAAA42C,UAAAtG,EACA7a,EAAAg8B,YAAA,KAAA,SAAA,EAAAnc,GAAAn9B,SAAA,KAAAsK,OAAA,IACAgT,EAAAi8B,cAGA,IAAA1xD,EAAAD,OAAA0qC,EAAAkD,OAAAI,KACA,CAGA,GAAA52B,GAAA,EAAA0/B,EAAAv1C,MACAwtB,EAAA,EAAA+nB,EAAAt1C,OAEA8Q,EAAAwkC,EAAAxkC,EAAA8E,EAAA,EACA3B,EAAAqhC,EAAArhC,EAAAsZ,EAAA,CAEA2G,GAAA87B,WAEA,IAAAK,GAAA,SACAC,EAAA16C,EAAA,EAAAy6C,EACAE,EAAAhjC,EAAA,EAAA8iC,EACAG,EAAA1/C,EAAA8E,EACA66C,EAAAx8C,EAAAsZ,EACAmjC,EAAA5/C,EAAA8E,EAAA,EACA+6C,EAAA18C,EAAAsZ,EAAA,CAEA2G,GAAAyhB,OAAA7kC,EAAA6/C,GACAz8B,EAAAoiB,cAAAxlC,EAAA6/C,EAAAJ,EAAAG,EAAAJ,EAAAr8C,EAAAy8C,EAAAz8C,GACAigB,EAAAoiB,cAAAoa,EAAAJ,EAAAr8C,EAAAu8C,EAAAG,EAAAJ,EAAAC,EAAAG,GACAz8B,EAAAoiB,cAAAka,EAAAG,EAAAJ,EAAAG,EAAAJ,EAAAG,EAAAC,EAAAD,GACAv8B,EAAAoiB,cAAAoa,EAAAJ,EAAAG,EAAA3/C,EAAA6/C,EAAAJ,EAAAz/C,EAAA6/C,GAEAz8B,EAAA+7B,YAEAxxD,EAAA26C,OAEAllB,EAAAs1B,YAAA/qD,EAAAo1C,UAAA9E,EACA7a,EAAAk7B,UAAA,KAAA,SAAA,EAAAjW,GAAAviC,SAAA,KAAAsK,OAAA,IACAgT,EAAAklB,QAEA36C,EAAAq1C,YAEA5f,EAAAs1B,YAAA/qD,EAAA42C,UAAAtG,EACA7a,EAAAg8B,YAAA,KAAA,SAAA,EAAAnc,GAAAn9B,SAAA,KAAAsK,OAAA,IACAgT,EAAAi8B,cAGA,IAAA1xD,EAAAD,OAAA0qC,EAAAkD,OAAAK,KACA,CACA,GAAAmkB,GAAAtb,EAAAxkC,EACA+/C,EAAAvb,EAAArhC,EACAlU,EAAAu1C,EAAAv1C,MACAC,EAAAs1C,EAAAt1C,OACAm3C,EAAA7B,EAAA6B,OAEA2Z,EAAAn/C,KAAAgE,IAAA5V,EAAAC,GAAA,EAAA,CACAm3C,GAAAA,EAAA2Z,EAAAA,EAAA3Z,EAEAjjB,EAAA87B,YACA97B,EAAAyhB,OAAAib,EAAAC,EAAA1Z,GACAjjB,EAAA0hB,OAAAgb,EAAAC,EAAA7wD,EAAAm3C,GACAjjB,EAAA2hB,iBAAA+a,EAAAC,EAAA7wD,EAAA4wD,EAAAzZ,EAAA0Z,EAAA7wD,GACAk0B,EAAA0hB,OAAAgb,EAAA7wD,EAAAo3C,EAAA0Z,EAAA7wD,GACAk0B,EAAA2hB,iBAAA+a,EAAA7wD,EAAA8wD,EAAA7wD,EAAA4wD,EAAA7wD,EAAA8wD,EAAA7wD,EAAAm3C,GACAjjB,EAAA0hB,OAAAgb,EAAA7wD,EAAA8wD,EAAA1Z,GACAjjB,EAAA2hB,iBAAA+a,EAAA7wD,EAAA8wD,EAAAD,EAAA7wD,EAAAo3C,EAAA0Z,GACA38B,EAAA0hB,OAAAgb,EAAAzZ,EAAA0Z,GACA38B,EAAA2hB,iBAAA+a,EAAAC,EAAAD,EAAAC,EAAA1Z,GACAjjB,EAAA+7B,aAEAxxD,EAAA06C,WAAA,IAAA16C,EAAA06C,aAEAjlB,EAAAs1B,YAAA/qD,EAAAo1C,UAAA9E,EACA7a,EAAAk7B,UAAA,KAAA,SAAA,EAAAjW,GAAAviC,SAAA,KAAAsK,OAAA,IACAgT,EAAAklB,QAGA36C,EAAAq1C,YAEA5f,EAAAs1B,YAAA/qD,EAAA42C,UAAAtG,EACA7a,EAAAg8B,YAAA,KAAA,SAAA,EAAAnc,GAAAn9B,SAAA,KAAAsK,OAAA,IACAgT,EAAAi8B,aAaAtb,EAAAkc,mBAAA,SAAA1W,EAAAnmB,GAEA,GAAA3iB,GAAA8oC,EAAArG,aAAA72C,MAEA,IAAA,IAAAoU,EAAA,CAKA2iB,EAAA87B,WAEA,KAAA,GAAAlzD,GAAA,EAAAyU,EAAAzU,EAAAA,IACA,CACA,GAAA2B,GAAA47C,EAAArG,aAAAl3C,GACAw4C,EAAA72C,EAAA62C,KAEA,IAAA72C,EAAAD,OAAA0qC,EAAAkD,OAAAC,KACA,CAEA,GAAAkJ,GAAAD,EAAAC,MAEArhB,GAAAyhB,OAAAJ,EAAA,GAAAA,EAAA,GAEA,KAAA,GAAA1vB,GAAA,EAAAA,EAAA0vB,EAAAp4C,OAAA,EAAA0oB,IAEAqO,EAAA0hB,OAAAL,EAAA,EAAA1vB,GAAA0vB,EAAA,EAAA1vB,EAAA,GAIA0vB,GAAA,KAAAA,EAAAA,EAAAp4C,OAAA,IAAAo4C,EAAA,KAAAA,EAAAA,EAAAp4C,OAAA,IAEA+2B,EAAA+7B,gBAIA,IAAAxxD,EAAAD,OAAA0qC,EAAAkD,OAAAE,KAEApY,EAAAyS,KAAA2O,EAAAxkC,EAAAwkC,EAAArhC,EAAAqhC,EAAAv1C,MAAAu1C,EAAAt1C,QACAk0B,EAAA+7B,gBAEA,IAAAxxD,EAAAD,OAAA0qC,EAAAkD,OAAAG,KAGArY,EAAAgkB,IAAA5C,EAAAxkC,EAAAwkC,EAAArhC,EAAAqhC,EAAA6B,OAAA,EAAA,EAAAxlC,KAAA03B,IACAnV,EAAA+7B,gBAEA,IAAAxxD,EAAAD,OAAA0qC,EAAAkD,OAAAI,KACA,CAIA,GAAA52B,GAAA,EAAA0/B,EAAAv1C,MACAwtB,EAAA,EAAA+nB,EAAAt1C,OAEA8Q,EAAAwkC,EAAAxkC,EAAA8E,EAAA,EACA3B,EAAAqhC,EAAArhC,EAAAsZ,EAAA,EAEA8iC,EAAA,SACAC,EAAA16C,EAAA,EAAAy6C,EACAE,EAAAhjC,EAAA,EAAA8iC,EACAG,EAAA1/C,EAAA8E,EACA66C,EAAAx8C,EAAAsZ,EACAmjC,EAAA5/C,EAAA8E,EAAA,EACA+6C,EAAA18C,EAAAsZ,EAAA,CAEA2G,GAAAyhB,OAAA7kC,EAAA6/C,GACAz8B,EAAAoiB,cAAAxlC,EAAA6/C,EAAAJ,EAAAG,EAAAJ,EAAAr8C,EAAAy8C,EAAAz8C,GACAigB,EAAAoiB,cAAAoa,EAAAJ,EAAAr8C,EAAAu8C,EAAAG,EAAAJ,EAAAC,EAAAG,GACAz8B,EAAAoiB,cAAAka,EAAAG,EAAAJ,EAAAG,EAAAJ,EAAAG,EAAAC,EAAAD,GACAv8B,EAAAoiB,cAAAoa,EAAAJ,EAAAG,EAAA3/C,EAAA6/C,EAAAJ,EAAAz/C,EAAA6/C,GACAz8B,EAAA+7B,gBAEA,IAAAxxD,EAAAD,OAAA0qC,EAAAkD,OAAAK,KACA,CAEA,GAAAmkB,GAAAtb,EAAAxkC,EACA+/C,EAAAvb,EAAArhC,EACAlU,EAAAu1C,EAAAv1C,MACAC,EAAAs1C,EAAAt1C,OACAm3C,EAAA7B,EAAA6B,OAEA2Z,EAAAn/C,KAAAgE,IAAA5V,EAAAC,GAAA,EAAA,CACAm3C,GAAAA,EAAA2Z,EAAAA,EAAA3Z,EAEAjjB,EAAAyhB,OAAAib,EAAAC,EAAA1Z,GACAjjB,EAAA0hB,OAAAgb,EAAAC,EAAA7wD,EAAAm3C,GACAjjB,EAAA2hB,iBAAA+a,EAAAC,EAAA7wD,EAAA4wD,EAAAzZ,EAAA0Z,EAAA7wD,GACAk0B,EAAA0hB,OAAAgb,EAAA7wD,EAAAo3C,EAAA0Z,EAAA7wD,GACAk0B,EAAA2hB,iBAAA+a,EAAA7wD,EAAA8wD,EAAA7wD,EAAA4wD,EAAA7wD,EAAA8wD,EAAA7wD,EAAAm3C,GACAjjB,EAAA0hB,OAAAgb,EAAA7wD,EAAA8wD,EAAA1Z,GACAjjB,EAAA2hB,iBAAA+a,EAAA7wD,EAAA8wD,EAAAD,EAAA7wD,EAAAo3C,EAAA0Z,GACA38B,EAAA0hB,OAAAgb,EAAAzZ,EAAA0Z,GACA38B,EAAA2hB,iBAAA+a,EAAAC,EAAAD,EAAAC,EAAA1Z,GACAjjB,EAAA+7B,gBAYApb,EAAAkb,mBAAA,SAAA1V,GAEA,GAAA,WAAAA,EAAApG,MAAAoG,EAAAnG,YAAAmG,EAAApG,KAAA,CAIAoG,EAAAnG,UAAAmG,EAAApG,IAMA,KAAA,GAJA+c,IAAA3W,EAAApG,MAAA,GAAA,KAAA,IACAgd,GAAA5W,EAAApG,MAAA,EAAA,KAAA,IACAid,GAAA,IAAA7W,EAAApG,MAAA,IAEAn3C,EAAA,EAAAA,EAAAu9C,EAAArG,aAAA72C,OAAAL,IACA,CACA,GAAA2B,GAAA47C,EAAArG,aAAAl3C,GAEAq8C,EAAA,EAAA16C,EAAA06C,UACApF,EAAA,EAAAt1C,EAAAs1C,SAyBAt1C,GAAAm9C,YAAAzC,GAAA,GAAA,KAAA,IAAA6X,EAAA,KAAA,MAAA7X,GAAA,EAAA,KAAA,IAAA8X,EAAA,KAAA,IAAA,IAAA9X,GAAA,IAAA+X,EAAA,IACAzyD,EAAAk9C,YAAA5H,GAAA,GAAA,KAAA,IAAAid,EAAA,KAAA,MAAAjd,GAAA,EAAA,KAAA,IAAAkd,EAAA,KAAA,IAAA,IAAAld,GAAA,IAAAmd,EAAA,SAMAC,iBAAA,KAAAC,IAAA,SAAAv0D,EAAAjB,EAAAD,GASA,QAAA4yD,MARA,GAAA1Z,GAAAh4C,EAAA,mBAWA0xD,GAAAvvD,UAAAmH,YAAAooD,EACA3yD,EAAAD,QAAA4yD,EAQAA,EAAAvvD,UAAAsxC,SAAA,SAAA+gB,EAAArsB,GAGAA,EAAA9Q,QAAAo9B,MAEA,IAAAC,GAAAF,EAAAriB,MACAp2B,EAAAy4C,EAAAhqB,eACAuE,EAAA5G,EAAA4G,UAEA5G,GAAA9Q,QAAAye,aACA/5B,EAAAhc,EAAAgvC,EACAhzB,EAAAzX,EAAAyqC,EACAhzB,EAAA4X,EAAAob,EACAhzB,EAAA4uB,EAAAoE,EACAhzB,EAAA0uB,GAAAsE,EACAhzB,EAAA2uB,GAAAqE,GAKAylB,EAAAjxD,UAEAy0C,EAAAkc,mBAAAM,EAAArsB,EAAA9Q,SACA8Q,EAAA9Q,QAAAs9B,QAGAH,EAAAtiB,WAAAwiB,GAQAhD,EAAAvvD,UAAAwxC,QAAA,SAAAxL,GAEAA,EAAA9Q,QAAAu9B,WAGAlD,EAAAvvD,UAAA0C,QAAA,eAEAgwD,mBAAA,KAAAC,IAAA,SAAA90D,EAAAjB,EAAAD,GACA,GAAAqrC,GAAAnqC,EAAA,kBAQA+0D,IACAh2D,GAAAD,QAAAi2D,EASAA,EAAAC,iBAAA,SAAAhF,EAAAzX,GAEA,GAAAh1C,GAAAysD,EAAAzsD,OAEAg1C,GAAAwc,EAAAE,WAAA1c,EAEA,IAAA2c,GAAA,KAAA,SAAA,EAAA3c,GAAAx+B,SAAA,KAAAsK,OAAA,GAIA,IAFA9gB,EAAA4xD,UAAA5xD,EAAA4xD,cAEA5xD,EAAA4xD,UAAAD,GAEA,MAAA3xD,GAAA4xD,UAAAD,EAIA,IAAAxqD,GAAAqqD,EAAArqD,QAAAy0B,SAAAC,cAAA,SAKA,IAFA21B,EAAAK,WAAA7xD,EAAAg1C,EAAA7tC,GAEAqqD,EAAAM,mBACA,CAEA,GAAAC,GAAA,GAAAt2B,MACAs2B,GAAA5oD,IAAAhC,EAAA6qD,YAEAhyD,EAAA4xD,UAAAD,GAAAI,MAIA/xD,GAAA4xD,UAAAD,GAAAxqD,EAEAqqD,EAAArqD,OAAA,IAGA,OAAAA,IAUAqqD,EAAAS,iBAAA,SAAAjyD,EAAAg1C,EAAA7tC,GAEA,GAAA2sB,GAAA3sB,EAAAC,WAAA,MAEAokC,EAAAxrC,EAAA65C,YAAArO,WAEAkhB,EAAA1sD,EAAA0sD,KAAA7X,OACA6X,GAAAh8C,GAAA86B,EACAkhB,EAAA74C,GAAA23B,EACAkhB,EAAA/sD,OAAA6rC,EACAkhB,EAAA9sD,QAAA4rC,EAEArkC,EAAAxH,MAAA+sD,EAAA/sD,MACAwH,EAAAvH,OAAA8sD,EAAA9sD,OAEAk0B,EAAAk7B,UAAA,KAAA,SAAA,EAAAha,GAAAx+B,SAAA,KAAAsK,OAAA,IAEAgT,EAAAo7B,SAAA,EAAA,EAAAxC,EAAA/sD,MAAA+sD,EAAA9sD,QAEAk0B,EAAAsmB,yBAAA,WAEAtmB,EAAA01B,UACAxpD,EAAA65C,YAAAt2C,OACAmpD,EAAAh8C,EACAg8C,EAAA74C,EACA64C,EAAA/sD,MACA+sD,EAAA9sD,OACA,EACA,EACA8sD,EAAA/sD,MACA+sD,EAAA9sD,QAGAk0B,EAAAsmB,yBAAA,mBAEAtmB,EAAA01B,UACAxpD,EAAA65C,YAAAt2C,OACAmpD,EAAAh8C,EACAg8C,EAAA74C,EACA64C,EAAA/sD,MACA+sD,EAAA9sD,OACA,EACA,EACA8sD,EAAA/sD,MACA+sD,EAAA9sD,SAWA4xD,EAAAU,gBAAA,SAAAlyD,EAAAg1C,EAAA7tC,GAEA,GAAA2sB,GAAA3sB,EAAAC,WAAA,MAEAokC,EAAAxrC,EAAA65C,YAAArO,WAEAkhB,EAAA1sD,EAAA0sD,KAAA7X,OACA6X,GAAAh8C,GAAA86B,EACAkhB,EAAA74C,GAAA23B,EACAkhB,EAAA/sD,OAAA6rC,EACAkhB,EAAA9sD,QAAA4rC,EAEArkC,EAAAxH,MAAA+sD,EAAA/sD,MACAwH,EAAAvH,OAAA8sD,EAAA9sD,OAEAk0B,EAAAsmB,yBAAA,OACAtmB,EAAAk7B,UAAA,KAAA,SAAA,EAAAha,GAAAx+B,SAAA,KAAAsK,OAAA,IACAgT,EAAAo7B,SAAA,EAAA,EAAAxC,EAAA/sD,MAAA+sD,EAAA9sD,QAEAk0B,EAAAsmB,yBAAA,mBACAtmB,EAAA01B,UACAxpD,EAAA65C,YAAAt2C,OACAmpD,EAAAh8C,EACAg8C,EAAA74C,EACA64C,EAAA/sD,MACA+sD,EAAA9sD,OACA,EACA,EACA8sD,EAAA/sD,MACA+sD,EAAA9sD,SAaA4xD,EAAAW,iBAAA,SAAAnyD,EAAAg1C,EAAA7tC,GAEA,GAAA2sB,GAAA3sB,EAAAC,WAAA,MAEAokC,EAAAxrC,EAAA65C,YAAArO,WAEAkhB,EAAA1sD,EAAA0sD,KAAA7X,OACA6X,GAAAh8C,GAAA86B,EACAkhB,EAAA74C,GAAA23B,EACAkhB,EAAA/sD,OAAA6rC,EACAkhB,EAAA9sD,QAAA4rC,EAEArkC,EAAAxH,MAAA+sD,EAAA/sD,MACAwH,EAAAvH,OAAA8sD,EAAA9sD,OAEAk0B,EAAAsmB,yBAAA,OACAtmB,EAAA01B,UACAxpD,EAAA65C,YAAAt2C,OACAmpD,EAAAh8C,EACAg8C,EAAA74C,EACA64C,EAAA/sD,MACA+sD,EAAA9sD,OACA,EACA,EACA8sD,EAAA/sD,MACA+sD,EAAA9sD,OAUA,KAAA,GAPAwyD,GAAAxrB,EAAAsW,QAAAlI,GACA54C,EAAAg2D,EAAA,GAAAz2D,EAAAy2D,EAAA,GAAArxD,EAAAqxD,EAAA,GAEAC,EAAAv+B,EAAAw+B,aAAA,EAAA,EAAA5F,EAAA/sD,MAAA+sD,EAAA9sD,QAEA2yD,EAAAF,EAAAh0D,KAEA3B,EAAA,EAAAA,EAAA61D,EAAAx1D,OAAAL,GAAA,EAEA61D,EAAA71D,EAAA,IAAAN,EACAm2D,EAAA71D,EAAA,IAAAf,EACA42D,EAAA71D,EAAA,IAAAqE,CAGA+yB,GAAA0+B,aAAAH,EAAA,EAAA,IAQAb,EAAAE,WAAA,SAAA1c,GAEA,GAAAyd,GAAAjB,EAAAkB,0BAEAN,EAAAxrB,EAAAsW,QAAAlI,EAMA,OAJAod,GAAA,GAAA7gD,KAAAgE,IAAA,IAAA68C,EAAA,GAAAK,EAAAA,GACAL,EAAA,GAAA7gD,KAAAgE,IAAA,IAAA68C,EAAA,GAAAK,EAAAA,GACAL,EAAA,GAAA7gD,KAAAgE,IAAA,IAAA68C,EAAA,GAAAK,EAAAA,GAEA7rB,EAAA+rB,QAAAP,IAQAZ,EAAAkB,0BAAA,EAOAlB,EAAAM,oBAAA,EAOAN,EAAAoB,eAAAhsB,EAAA0oB,4BAMAkC,EAAAK,WAAAL,EAAAoB,eAAApB,EAAAS,iBAAAT,EAAAW,mBAEA/S,iBAAA,MAAAyT,IAAA,SAAAp2D,EAAAjB,EAAAD,GACA,GAAA+B,GAAAb,EAAA,gBAAAa,UACAspC,EAAAnqC,EAAA,eAUAq2D,EAAA,SAAA30D,GAEApC,KAAAoC,GAAAA,EAGApC,KAAAg3D,oBACAh3D,KAAAi3D,cAIAF,GAAAl0D,UAAAwF,YAAA,SAAApE,KAMA8yD,EAAAl0D,UAAAq0D,WAAA,SAAAjzD,KAUA8yD,EAAAl0D,UAAA2tD,cAAA,SAAAvsD,GAIA,GAFAA,EAAAA,EAAA65C,aAAA75C,EAEAA,EAAAkzD,UAAA,CAMA,GAAA/0D,GAAApC,KAAAoC,GACAg1D,EAAAp3D,KAAAi3D,WAAAhzD,EAAAozD,IAyBA,OAvBAD,KAEAA,EAAA,GAAA71D,GAAAa,GACAg1D,EAAA/vD,kBAAA,EACApD,EAAAssD,YAAAnuD,EAAAkJ,IAAA8rD,EAIAnzD,EAAA+iB,GAAA,SAAAhnB,KAAAwwD,cAAAxwD,MACAiE,EAAA+iB,GAAA,UAAAhnB,KAAAs3D,eAAAt3D,MAEAA,KAAAg3D,iBAAArsD,KAAA1G,IAGAmzD,EAAAx0D,OAAAqB,EAAAuD,QAGA4vD,EAAAxxD,kBAIAwxD,EAAAluD,sBAEAjF,EAAAssD,YAAAnuD,EAAAkJ,MAQAyrD,EAAAl0D,UAAAy0D,eAAA,SAAArzD,EAAAszD,GAIA,GAFAtzD,EAAAA,EAAA65C,aAAA75C,EAEAA,EAAAkzD,WAKAlzD,EAAAssD,YAAAvwD,KAAAoC,GAAAkJ,MAEArH,EAAAssD,YAAAvwD,KAAAoC,GAAAkJ,IAAA/F,UACAtB,EAAAijB,IAAA,SAAAlnB,KAAAwwD,cAAAxwD,MACAiE,EAAAijB,IAAA,UAAAlnB,KAAAs3D,eAAAt3D,YAGAiE,GAAAssD,YAAAvwD,KAAAoC,GAAAkJ,KAEAisD,GACA,CACA,GAAA52D,GAAAX,KAAAg3D,iBAAA7qC,QAAAloB,EACA,MAAAtD,GACAkqC,EAAAC,YAAA9qC,KAAAg3D,iBAAAr2D,EAAA,KAMAo2D,EAAAl0D,UAAA20D,UAAA,WAGA,IAAA,GAAA72D,GAAA,EAAAA,EAAAX,KAAAg3D,iBAAAh2D,SAAAL,EACA,CACA,GAAAsD,GAAAjE,KAAAg3D,iBAAAr2D,EACAsD,GAAAssD,YAAAvwD,KAAAoC,GAAAkJ,WAEArH,GAAAssD,YAAAvwD,KAAAoC,GAAAkJ,MAKAyrD,EAAAl0D,UAAA0C,QAAA,WAGA,IAAA,GAAA5E,GAAA,EAAAA,EAAAX,KAAAg3D,iBAAAh2D,SAAAL,EACA,CACA,GAAAsD,GAAAjE,KAAAg3D,iBAAAr2D,EACAX,MAAAs3D,eAAArzD,GAAA,GACAA,EAAAijB,IAAA,SAAAlnB,KAAAwwD,cAAAxwD,MACAiE,EAAAijB,IAAA,UAAAlnB,KAAAs3D,eAAAt3D,MAGAA,KAAAg3D,iBAAA,MAGAv3D,EAAAD,QAAAu3D,IAGAhV,cAAA,IAAAjb,eAAA,IAAA2wB,IAAA,SAAA/2D,EAAAjB,EAAAD,GAyCA,QAAA6sC,GAAAzoC,EAAAC,EAAAgH,GAEAA,EAAAA,MAEA6mD,EAAA3wD,KAAAf,KAAA,QAAA4D,EAAAC,EAAAgH,GAQA7K,KAAAqC,KAAA0qC,EAAAO,cAAAE,MAEAxtC,KAAA03D,kBAAA13D,KAAA03D,kBAAA10D,KAAAhD,MACAA,KAAA23D,sBAAA33D,KAAA23D,sBAAA30D,KAAAhD,MAEAA,KAAA4pC,KAAAjK,iBAAA,mBAAA3/B,KAAA03D,mBAAA,GACA13D,KAAA4pC,KAAAjK,iBAAA,uBAAA3/B,KAAA23D,uBAAA,GAQA33D,KAAA43D,iBACA/kB,MAAA7yC,KAAA6vC,YACAH,UAAA7kC,EAAA6kC,UACAmoB,mBAAA73D,KAAA6vC,aAAA,kBAAA7vC,KAAA6vC,YACA7rC,SAAA,EACA+rC,sBAAAllC,EAAAklC,uBAGA/vC,KAAA8xD,qBAAA,GAAA9xD,KAAA6vC,YAAA,EAAA,EAOA7vC,KAAAovD,cAAA,GAAAxI,GAAA5mD,MAOAA,KAAAk0C,YAAA,GAAA4jB,GAAA93D,MAOAA,KAAA+3D,eAAA,GAAAC,GAAAh4D,MAOAA,KAAAg0C,cAAA,GAAAikB,GAAAj4D,MAOAA,KAAA6gD,iBAAA,GAAAqX,GAAAl4D,MAQAA,KAAA8zC,gBAAA,GAAA8L,GAAA5/C,MAEAA,KAAA2yD,cAGA3yD,KAAAoC,GAAAlB,EAAAlB,KAAA4pC,KAAA5pC,KAAA43D,iBAEA53D,KAAAm4D,eAGAn4D,KAAAo+C,WAAAga,EAAAh2D,IACApC,KAAAq4D,UAAAC,EAAAl2D,IAEApC,KAAAu4D,cAAA,KAOAv4D,KAAAw4D,oBAAA,KACAx4D,KAAAy4D,uBAAA,KACAz4D,KAAA04D,eAAA,KA3IA,GAAAhH,GAAAhxD,EAAA,qBACAkmD,EAAAlmD,EAAA,4BACAo3D,EAAAp3D,EAAA,0BACAs3D,EAAAt3D,EAAA,6BACAu3D,EAAAv3D,EAAA,4BACAw3D,EAAAx3D,EAAA,+BACAmmD,EAAAnmD,EAAA,wBACAk/C,EAAAl/C,EAAA,0BAEAq2D,GADAr2D,EAAA,wBACAA,EAAA,qBACAQ,EAAAR,EAAA,gBAAAQ,cACAk3D,EAAA13D,EAAA,oCACA43D,EAAA53D,EAAA,mCACAmqC,EAAAnqC,EAAA,eACAqsC,EAAArsC,EAAA,cAiIA2rC,GAAAxpC,UAAA0M,OAAA/L,OAAAkuD,EAAA7uD,WACAwpC,EAAAxpC,UAAAmH,YAAAqiC,EACA5sC,EAAAD,QAAA6sC,EACAxB,EAAAgoB,aAAAC,MAAAzmB,GAOAA,EAAAxpC,UAAAs1D,aAAA,WAEA,GAAA/1D,GAAApC,KAAAoC,EAGApC,MAAA24D,eAAA,GAAA5B,GAAA30D,GAGAA,EAAAw2D,QAAAx2D,EAAAy2D,YACAz2D,EAAAw2D,QAAAx2D,EAAA02D,WACA12D,EAAA22D,OAAA32D,EAAA42D,OAGAh5D,KAAAi5D,iBAAA,GAAApS,GAAAzkD,EAAApC,KAAA4D,MAAA5D,KAAA6D,OAAA,KAAA7D,KAAAyvC,YAAA,GACAzvC,KAAAi5D,iBAAAh0D,WAAAjF,KAAA8xD,qBAEA9xD,KAAAk5D,iBAAAl5D,KAAAi5D,kBAEAj5D,KAAAonB,KAAA,UAAAhlB,GAGApC,KAAAqF,OAAArF,KAAA4D,MAAA5D,KAAA6D,SAQAwoC,EAAAxpC,UAAA6vC,OAAA,SAAAzI,GAKA,GAHAjqC,KAAAonB,KAAA,cAGApnB,KAAAoC,GAAA+2D,gBAAA,CAKAn5D,KAAAuqC,oBAAAN,CAEA,IAAA8oB,GAAA9oB,EAAAqH,MACArH,GAAAqH,OAAAtxC,KAAAu1C,yBAEAtL,EAAA0I,kBACA1I,EAAAqH,OAAAyhB,EAEA/yD,KAAAozD,oBAAAnpB,EAAAjqC,KAAAi5D,iBAAAj5D,KAAA8vC,mBAEA9vC,KAAAonB,KAAA,gBAUAilB,EAAAxpC,UAAAuwD,oBAAA,SAAAnpB,EAAAmvB,EAAAr0D,GAEA/E,KAAAk5D,iBAAAE,GAEAr0D,GAEAq0D,EAAAr0D,QAIA/E,KAAAg0C,cAAAqlB,eAAAD,EAAAE,aAGArvB,EAAAyJ,YAAA1zC,MAGAA,KAAA8zC,gBAAAC,SAQA1H,EAAAxpC,UAAAo7C,kBAAA,SAAAsb,GAEAv5D,KAAA8zC,kBAAAylB,IAKAv5D,KAAA8zC,gBAAA9f,OACAh0B,KAAA8zC,gBAAAylB,EACAv5D,KAAA8zC,gBAAAtpC,UASA6hC,EAAAxpC,UAAAwC,OAAA,SAAAzB,EAAAC,GAEA6tD,EAAA7uD,UAAAwC,OAAAtE,KAAAf,KAAA4D,EAAAC,GAEA7D,KAAAg0C,cAAA3uC,OAAAzB,EAAAC,GACA7D,KAAAi5D,iBAAA5zD,OAAAzB,EAAAC,GAEA7D,KAAAgwD,sBAAAhwD,KAAAo5D,cAEAp5D,KAAAi5D,iBAAA/uD,YASAmiC,EAAAxpC,UAAAq2D,iBAAA,SAAAE,GAEAA,IAAAp5D,KAAAw4D,sBAEAx4D,KAAAw4D,oBAAAY,EAEAp5D,KAAAu4D,gBAEAv4D,KAAAu4D,cAAA5xD,SAAAspD,iBAAAmJ,EAAAnJ,iBAAA/O,SAAA,IAGAkY,EAAAlvD,WAEAlK,KAAA+3D,eAAAyB,aAAAJ,EAAAK,oBAIAptB,EAAAxpC,UAAAm+C,WAAA,SAAA3zC,GAGArN,KAAAu4D,gBAAAlrD,IAEArN,KAAAu4D,cAAAlrD,EACAA,EAAArK,OAGAqK,EAAA1G,SAAAspD,iBAAAjwD,KAAAw4D,oBAAAvI,iBAAA/O,SAAA,KAKA7U,EAAAxpC,UAAAwF,YAAA,SAAApE,EAAAgE,GAEA,GAAA7F,GAAApC,KAAAoC,EAGA6F,GAAAA,GAAA,EAEAjI,KAAAy4D,yBAAAxwD,IAEAjI,KAAAy4D,uBAAAxwD,EACA7F,EAAA+F,cAAA/F,EAAAgG,SAAAH,IAIAjI,KAAA04D,eAAAz0D,EAEAA,EAAAssD,YAAAnuD,EAAAkJ,IAQArH,EAAAssD,YAAAnuD,EAAAkJ,IAAAtI,OALAhD,KAAA24D,eAAAnI,cAAAvsD,IAeAooC,EAAAxpC,UAAA60D,kBAAA,SAAAv/B,GAEAA,EAAAuhC,kBAQArtB,EAAAxpC,UAAA80D,sBAAA,WAEA33D,KAAAm4D,eACAn4D,KAAA24D,eAAAnB,aAQAnrB,EAAAxpC,UAAA0C,QAAA,SAAA0sD,GAEAjyD,KAAAqzD,iBAGArzD,KAAA4pC,KAAAhL,oBAAA,mBAAA5+B,KAAA03D,mBACA13D,KAAA4pC,KAAAhL,oBAAA,uBAAA5+B,KAAA23D,uBAEA33D,KAAA24D,eAAAgB,aAGAjI,EAAA7uD,UAAA0C,QAAAxE,KAAAf,KAAAiyD,GAEAjyD,KAAAq3D,IAAA,EAGAr3D,KAAAovD,cAAA7pD,UACAvF,KAAAk0C,YAAA3uC,UACAvF,KAAA+3D,eAAAxyD,UACAvF,KAAAg0C,cAAAzuC,UACAvF,KAAA6gD,iBAAAt7C,UAEAvF,KAAAovD,cAAA,KACApvD,KAAAk0C,YAAA,KACAl0C,KAAAg0C,cAAA,KACAh0C,KAAA6gD,iBAAA,KACA7gD,KAAA8zC,gBAAA,KAEA9zC,KAAA03D,kBAAA,KACA13D,KAAA23D,sBAAA,KAEA33D,KAAA43D,gBAAA,KAEA53D,KAAAoC,GAAAwE,WAAA,MACA5G,KAAAoC,GAAA,QAIAu/C,cAAA,GAAAI,cAAA,IAAAyR,oBAAA,GAAAoG,mBAAA,GAAAC,uBAAA,GAAAC,8BAAA,GAAAC,2BAAA,GAAAC,yBAAA,GAAAC,2BAAA,GAAAC,4BAAA,GAAAC,yBAAA,GAAAC,uBAAA,GAAAC,mCAAA,GAAAC,kCAAA,GAAAxzB,eAAA,IAAAyzB,IAAA,SAAA75D,EAAAjB,EAAAD,GAaA,QAAAsnD,GAAAxgD,EAAAC,EAAAI,GAQA3G,KAAAw6D,WAMAx6D,KAAAg/C,QAAA,EAMAh/C,KAAA2G,SAAAA,MAQA3G,KAAAsG,UAAAA,GAAAm0D,EAAAC,iBAOA16D,KAAAuG,YAAAA,GAAAk0D,EAAAE,mBA/CA,GAAAF,GAAA/5D,EAAA,2BAuDAomD,GAAAjkD,UAAAmH,YAAA88C,EACArnD,EAAAD,QAAAsnD,EAOAA,EAAAjkD,UAAA+3D,UAAA,SAAA/xB,GAEA,GAAAzmC,GAAAymC,EAAAzmC,GAEAiL,EAAArN,KAAAw6D,QAAAp4D,EAAAkJ,GAcA,OAZA+B,KAEAA,EAAA,GAAAotD,GAAA5xB,EAAAumB,cACApvD,KAAAsG,UACAtG,KAAAuG,YACAvG,KAAA2G,SACA3G,KAAAyG,YAGAzG,KAAAw6D,QAAAp4D,EAAAkJ,IAAA+B,GAGAA,GAWAy5C,EAAAjkD,UAAAg4D,YAAA,SAAAhyB,EAAAtf,EAAArB,EAAAnjB,GAEA,GAAAsI,GAAArN,KAAA46D,UAAA/xB,EAEAA,GAAAmL,cAAA6mB,YAAAxtD,EAAAkc,EAAArB,EAAAnjB,IAOA+hD,EAAAjkD,UAAAi4D,YAAA,SAAAhrD,GAEA,IAAA,GAAAnP,GAAA,EAAA+oB,EAAA1pB,KAAAw6D,QAAAx5D,OAAA0oB,EAAA/oB,IAAAA,EAEAX,KAAAw6D,QAAA75D,GAAAm6D,YAAAhrD,MAIAirD,2BAAA,KAAAC,IAAA,SAAAt6D,EAAAjB,EAAAD,GAoBA,QAAAunD,KAEAD,EAAA/lD,KAAAf,KAEA,8zCAEA,66IAGAyvC,YAAAptC,KAAA,KAAA8M,OAAAwF,EAAA,EAAAmD,EAAA,MA5BA,GAAAgvC,GAAApmD,EAAA,mBAkCAqmD,GAAAlkD,UAAA0M,OAAA/L,OAAAsjD,EAAAjkD,WACAkkD,EAAAlkD,UAAAmH,YAAA+8C,EACAtnD,EAAAD,QAAAunD,EASAA,EAAAlkD,UAAAg4D,YAAA,SAAAhyB,EAAAtf,EAAArB,GAEA,GAAA8rB,GAAAnL,EAAAmL,cAEA3mC,EAAArN,KAAA46D,UAAA/xB,EAEAmL,GAAA6mB,YAAAxtD,EAAAkc,EAAArB,MAGA+yC,mBAAA,KAAAC,IAAA,SAAAx6D,EAAAjB,EAAAD,GAeA,QAAAwnD,GAAA0J,GAEA,GAAAyK,GAAA,GAAAxqB,GAAAG,MAEAgW,GAAA/lD,KAAAf,KACA,mfACA,wkBAEA81C,MAAAzzC,KAAA,YAAA8M,MAAAuhD,EAAAJ,UACAzd,OAAAxwC,KAAA,IAAA8M,MAAA,GACAisD,aAAA/4D,KAAA,OAAA8M,MAAAgsD,EAAAja,SAAA,MAIAlhD,KAAAq7D,WAAA3K,EACA1wD,KAAAm7D,WAAAA,EA7BA,GAAArU,GAAApmD,EAAA,oBACAiwC,EAAAjwC,EAAA,gBA+BAsmD,GAAAnkD,UAAA0M,OAAA/L,OAAAsjD,EAAAjkD,WACAmkD,EAAAnkD,UAAAmH,YAAAg9C,EACAvnD,EAAAD,QAAAwnD,EASAA,EAAAnkD,UAAAg4D,YAAA,SAAAhyB,EAAAtf,EAAArB,GAEA,GAAA8rB,GAAAnL,EAAAmL,aAEAh0C,MAAA2G,SAAAmvC,KAAA3mC,MAAAnP,KAAAq7D,WAAA/K,SAEAtc,EAAAsnB,sBAAA/xC,EAAA+jC,MAAAttD,KAAAq7D,WAAAr7D,KAAAm7D,YAEAn7D,KAAA2G,SAAAy0D,YAAAjsD,MAAAnP,KAAAm7D,WAAAja,SAAA,GACAlhD,KAAA2G,SAAAksC,MAAA1jC,MAAAnP,KAAAq7D,WAAAzoB,UAEA,IAAAvlC,GAAArN,KAAA46D,UAAA/xB,EAEAmL,GAAA6mB,YAAAxtD,EAAAkc,EAAArB,IAIA3Y,OAAAwhC,iBAAAiW,EAAAnkD,WAOAkZ,KACA/L,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAmvC,KAAA3mC,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAmvC,KAAA3mC,MAAAA,IAUArM,QACAkN,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA7D,OAAAqM,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA7D,OAAAqM,MAAAA,QAKA61C,gBAAA,GAAAiW,mBAAA,KAAAM,IAAA,SAAA76D,EAAAjB,EAAAD,GASA,QAAA04D,GAAArvB,GAEA8d,EAAA5lD,KAAAf,KAAA6oC,GAKA7oC,KAAAw7D,iBAAA,MAfA,GAAA7U,GAAAjmD,EAAA,iBAkBAw3D,GAAAr1D,UAAA0M,OAAA/L,OAAAmjD,EAAA9jD,WACAq1D,EAAAr1D,UAAAmH,YAAAkuD,EACAz4D,EAAAD,QAAA04D,EAQAA,EAAAr1D,UAAAi+C,aAAA,SAAA9I,GAEA,GAAAh4C,KAAAw7D,mBAAAxjB,EAEA,OAAA,CAGAh4C,MAAAw7D,iBAAAxjB,CAEA,IAAA+I,GAAA/gD,KAAA6oC,SAAAuV,WAAAp+C,KAAAw7D,iBAGA,OAFAx7D,MAAA6oC,SAAAzmC,GAAAq5D,UAAA1a,EAAA,GAAAA,EAAA,KAEA,KAGA2a,iBAAA,KAAAC,IAAA,SAAAj7D,EAAAjB,EAAAD,GAaA,QAAAy4D,GAAApvB,GAEA8d,EAAA5lD,KAAAf,KAAA6oC,GAKA7oC,KAAAs5D,eAEAt5D,KAAAs5D,YAAA3uD,MACAyuD,aAAAvwB,EAAAmnB,oBACArzC,UACA61B,OAAA,OAMAxyC,KAAA47D,eAUA57D,KAAA67D,YAAA,GAAAlrB,GAAAqC,UAAA,EAAA,EAAAnK,EAAAjlC,MAAAilC,EAAAhlC,QAOA7D,KAAA87D,aAAA,KA/CA,GAAAnV,GAAAjmD,EAAA,kBACAmmD,EAAAnmD,EAAA,yBACAqsC,EAAArsC,EAAA,kBACAq7D,EAAAr7D,EAAA,iBACAiwC,EAAAjwC,EAAA,gBA8CAu3D,GAAAp1D,UAAA0M,OAAA/L,OAAAmjD,EAAA9jD,WACAo1D,EAAAp1D,UAAAmH,YAAAiuD,EACAx4D,EAAAD,QAAAy4D,EAOAA,EAAAp1D,UAAA49C,gBAAA,WAEAzgD,KAAA47D,YAAA56D,OAAA,CAEA,IAAAoB,GAAApC,KAAA6oC,SAAAzmC,EACApC,MAAAg8D,KAAA,GAAAD,GAAA35D,IAOA61D,EAAAp1D,UAAAw2D,eAAA,SAAAC,GAEAt5D,KAAAs5D,YAAAA,GASArB,EAAAp1D,UAAAoxC,WAAA,SAAA7a,EAAA2c,GAIA,GAAAvD,GAAApZ,EAAA+b,WAAA/b,EAAA+b,WAAA2D,QAAA1f,EAAAkS,WAKAkH,GAAA79B,EAAA,EAAA69B,EAAA79B,EACA69B,EAAA16B,EAAA,EAAA06B,EAAA16B,EACA06B,EAAA5uC,MAAA,EAAA4uC,EAAA5uC,MACA4uC,EAAA3uC,OAAA,EAAA2uC,EAAA3uC,MAIA,IAAAm7C,GAAA,EAAAjJ,EAAA,GAAAiJ,OAOA,IANAxM,EAAA79B,GAAAqqC,EACAxM,EAAA16B,GAAAknC,EACAxM,EAAA5uC,OAAA,EAAAo7C,EACAxM,EAAA3uC,QAAA,EAAAm7C,EAGAh/C,KAAA6oC,SAAAmnB,oBAAAvzC,UACA,CAGA,GAAAA,GAAAzc,KAAA6oC,SAAAmnB,oBAAAvzC,SAEA+1B,GAAA79B,GAAA8H,EAAA0uB,GACAqH,EAAA16B,GAAA2E,EAAA2uB,GAEAprC,KAAAi8D,cAAAzpB,GAEAA,EAAA79B,GAAA8H,EAAA0uB,GACAqH,EAAA16B,GAAA2E,EAAA2uB,OAIAprC,MAAAi8D,cAAAzpB,EAGA,IAAAA,EAAA5uC,MAAA,GAAA4uC,EAAA3uC,OAAA,EACA,CACA7D,KAAA87D,aAAAtpB,CAEA,IAAAvuC,GAAAjE,KAAAk8D,iBAEAl8D,MAAA6oC,SAAAszB,gBAAAl4D,GAGAA,EAAAc,QAGA/E,KAAAs5D,YAAA3uD,MACAyuD,aAAAn1D,EACA0Y,OAAAo5B,QAOA/1C,MAAAs5D,YAAA3uD,MACAyuD,aAAA,KACAz8C,OAAAo5B,KAUAkiB,EAAAp1D,UAAAyxC,UAAA,WAEA,GAAA8nB,GAAAp8D,KAAAs5D,YAAAr/C,MACAoiD,EAAAr8D,KAAAs5D,YAAAt5D,KAAAs5D,YAAAt4D,OAAA,GAEAuoB,EAAA6yC,EAAAhD,YAGA,IAAAgD,EAAAhD,aAAA,CAKA,GAAAlxC,GAAAm0C,EAAAjD,aAGAh3D,EAAApC,KAAA6oC,SAAAzmC,EAGApC,MAAA87D,aAAAvyC,EAAA+jC,MAEAttD,KAAAg8D,KAAAjgD,IAAA/b,KAAA67D,YAAAtyC,EAAA+jC,OAIAlrD,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAAg8D,KAAAM,cACAl6D,EAAAgB,WAAAhB,EAAAmB,qBAAAvD,KAAAg8D,KAAAlyD,YAEA,IAAAisC,GAAAqmB,EAAAz/C,MAUA,IAPAva,EAAAsM,oBAAA1O,KAAA6oC,SAAAumB,cAAAmN,cAAA91D,WAAA26C,gBAAA,EAAAh/C,EAAA4F,OAAA,EAAA,EAAA,GACA5F,EAAAsM,oBAAA1O,KAAA6oC,SAAAumB,cAAAmN,cAAA91D,WAAAipD,cAAA,EAAAttD,EAAA4F,OAAA,EAAA,EAAA,IACA5F,EAAAsM,oBAAA1O,KAAA6oC,SAAAumB,cAAAmN,cAAA91D,WAAA46C,OAAA,EAAAj/C,EAAA4F,OAAA,EAAA,EAAA,IAGAhI,KAAA6oC,SAAAgY,iBAAAC,aAAA/T,EAAAW,YAAAC,QAEA,IAAAoI,EAAA/0C,OAGA+0C,EAAA,GAAApvC,SAAA61D,aAEAzmB,EAAA,GAAApvC,SAAA61D,WAAArtD,MAAA,GAAAnP,KAAA6oC,SAAAjlC,MACAmyC,EAAA,GAAApvC,SAAA61D,WAAArtD,MAAA,GAAAnP,KAAA6oC,SAAAhlC,OACAkyC,EAAA,GAAApvC,SAAA61D,WAAArtD,MAAA,GAAAnP,KAAAg8D,KAAAS,SAAA,GACA1mB,EAAA,GAAApvC,SAAA61D,WAAArtD,MAAA,GAAAnP,KAAAg8D,KAAAS,SAAA,IAGA1mB,EAAA,GAAA8kB,YAAA76D,KAAA6oC,SAAAtf,EAAArB,GACAloB,KAAA08D,mBAAAnzC,OAIA,CAIA,IAAA,GAHAozC,GAAApzC,EACAqzC,EAAA58D,KAAAk8D,iBAAA,GAEAv7D,EAAA,EAAAA,EAAAo1C,EAAA/0C,OAAA,EAAAL,IACA,CACA,GAAAgc,GAAAo5B,EAAAp1C,EAGAgc,GAAAhW,SAAA61D,aAEA7/C,EAAAhW,SAAA61D,WAAArtD,MAAA,GAAAnP,KAAA6oC,SAAAjlC,MACA+Y,EAAAhW,SAAA61D,WAAArtD,MAAA,GAAAnP,KAAA6oC,SAAAhlC,OACA8Y,EAAAhW,SAAA61D,WAAArtD,MAAA,GAAAnP,KAAAg8D,KAAAS,SAAA,GACA9/C,EAAAhW,SAAA61D,WAAArtD,MAAA,GAAAnP,KAAAg8D,KAAAS,SAAA,IAGA9/C,EAAAk+C,YAAA76D,KAAA6oC,SAAA8zB,EAAAC;AAEA,GAAAC,GAAAF,CACAA,GAAAC,EACAA,EAAAC,EAGA9mB,EAAAA,EAAA/0C,OAAA,GAAA65D,YAAA76D,KAAA6oC,SAAA8zB,EAAAz0C,GAEAloB,KAAA08D,mBAAAC,GACA38D,KAAA08D,mBAAAE,GAGA,MAAAR,GAAAz/C,SASAs7C,EAAAp1D,UAAAq5D,gBAAA,SAAAn3D,GAEA,GAAAq0D,GAAAp5D,KAAA47D,YAAA3hD,OAAA,GAAA4sC,GAAA7mD,KAAA6oC,SAAAzmC,GAAApC,KAAA67D,YAAAj4D,MAAA5D,KAAA67D,YAAAh4D,OAAAkpC,EAAAqC,YAAAxmC,OAAA5I,KAAA6oC,SAAA4G,WAAA1C,EAAAwC,kBAQA,OAPA6pB,GAAA9L,MAAAttD,KAAA87D,aAEA/2D,GAEAq0D,EAAAr0D,OAAA,GAGAq0D,GAOAnB,EAAAp1D,UAAA65D,mBAAA,SAAAtD,GAEAp5D,KAAA47D,YAAAjxD,KAAAyuD,IAUAnB,EAAAp1D,UAAAg4D,YAAA,SAAAxtD,EAAAyvD,EAAAC,EAAAh4D,GAEA,GAAA3C,GAAApC,KAAA6oC,SAAAzmC,EAEApC,MAAA6oC,SAAAszB,gBAAAY,GAEAh4D,GAEAg4D,EAAAh4D,QAIA/E,KAAA6oC,SAAAumB,cAAAS,UAAAxiD,GAGAA,EAAA1G,SAAAspD,iBAAA9gD,MAAAnP,KAAA6oC,SAAAmnB,oBAAAC,iBAAA/O,SAAA,GAGA7zC,EAAA2vD,eAOA56D,EAAA+F,cAAA/F,EAAAgG,UACAhG,EAAAiG,YAAAjG,EAAAkC,WAAAw4D,EAAA74D,SAEA7B,EAAA4I,aAAA5I,EAAA6sC,UAAA,EAAA7sC,EAAA6I,eAAA,GACAjL,KAAA6oC,SAAA0Y,aAUA0W,EAAAp1D,UAAAy4D,sBAAA,SAAAnmB,EAAAub,EAAAuM,GAEA,GAAA/xB,GAAAwlB,EAAAxlB,eAAAgf,KAAAvZ,EAAAG,OAAAqZ,aACAlmD,EAAAysD,EAAAJ,SAAAxS,YAEAof,EAAAD,EAAA3pD,WAGA6pD,EAAAn9D,KAAA67D,YAAAh4D,OAAA7D,KAAA67D,YAAAj4D,KAEAs5D,GAAAnf,UAAA5I,EAAAxgC,EAAA3U,KAAA67D,YAAAj4D,MAAAuxC,EAAAr9B,EAAA9X,KAAA67D,YAAAh4D,QAEAq5D,EAAAlsB,MAAA,EAAAmsB,EAEA,IAAAC,GAAAp9D,KAAA67D,YAAAj4D,MAAAK,EAAAL,MACAy5D,EAAAr9D,KAAA67D,YAAAh4D,OAAAI,EAAAJ,MAgBA,OAdAqnC,GAAAC,IAAAlnC,EAAAL,MAAAw5D,EACAlyB,EAAAE,IAAAnnC,EAAAL,MAAAw5D,EAEAlyB,EAAA+e,SAEAiT,EAAAlT,QAAA9e,GAGAgyB,EAAAlsB,MAAA,EAAA,EAAAmsB,GAEAD,EAAAlsB,MAAAosB,EAAAC,GAEAH,EAAAnf,UAAA2S,EAAAnD,OAAA54C,EAAA+7C,EAAAnD,OAAAz1C,GAEAolD,GAuCAjF,EAAAp1D,UAAAo5D,cAAA,SAAA9mB,GAEAA,EAAAxgC,EAAA,IAEAwgC,EAAAvxC,OAAAuxC,EAAAxgC,EACAwgC,EAAAxgC,EAAA,GAGAwgC,EAAAr9B,EAAA,IAEAq9B,EAAAtxC,QAAAsxC,EAAAr9B,EACAq9B,EAAAr9B,EAAA,GAGAq9B,EAAAxgC,EAAAwgC,EAAAvxC,MAAA5D,KAAA67D,YAAAj4D,QAEAuxC,EAAAvxC,MAAA5D,KAAA67D,YAAAj4D,MAAAuxC,EAAAxgC,GAGAwgC,EAAAr9B,EAAAq9B,EAAAtxC,OAAA7D,KAAA67D,YAAAh4D,SAEAsxC,EAAAtxC,OAAA7D,KAAA67D,YAAAh4D,OAAAsxC,EAAAr9B,IASAmgD,EAAAp1D,UAAAwC,OAAA,SAAAzB,EAAAC,GAEA7D,KAAA67D,YAAAj4D,MAAAA,EACA5D,KAAA67D,YAAAh4D,OAAAA,CAEA,KAAA,GAAAlD,GAAA,EAAAA,EAAAX,KAAA47D,YAAA56D,OAAAL,IAEAX,KAAA47D,YAAAj7D,GAAA0E,OAAAzB,EAAAC,IAQAo0D,EAAAp1D,UAAA0C,QAAA,WAEAvF,KAAAg8D,KAAAz2D,UAEAohD,EAAA9jD,UAAA0C,QAAAxE,KAAAf,MAEAA,KAAAs5D,YAAA,KACAt5D,KAAAs9D,QAAA,CAGA,KAAA,GAAA38D,GAAA,EAAAA,EAAAX,KAAA47D,YAAA56D,OAAAL,IAEAX,KAAA47D,YAAAj7D,GAAA4E,SAGAvF,MAAA47D,YAAA,QAGA5G,iBAAA,GAAAhQ,gBAAA,GAAAuY,gBAAA,GAAAC,wBAAA,GAAA9B,iBAAA,KAAA+B,IAAA,SAAA/8D,EAAAjB,EAAAD,GASA,QAAAs4D,GAAAjvB,GAEA8d,EAAA5lD,KAAAf,KAAA6oC,GAEA7oC,KAAA09D,gBACA19D,KAAAwc,SAAA,EACAxc,KAAAwU,MAAA,EAEAxU,KAAA29D,iBAhBA,GAAAhX,GAAAjmD,EAAA,kBACAk9D,EAAAl9D,EAAA,8BAkBAo3D,GAAAj1D,UAAA0M,OAAA/L,OAAAmjD,EAAA9jD,WACAi1D,EAAAj1D,UAAAmH,YAAA8tD,EACAr4D,EAAAD,QAAAs4D,EAQAA,EAAAj1D,UAAAsxC,SAAA,SAAA/a,EAAA87B,GAEAA,EAAAjxD,QAEAjE,KAAA69D,eAAAzkC,EAAA87B,GAIAl1D,KAAA89D,gBAAA1kC,EAAA87B,IAWA4C,EAAAj1D,UAAAwxC,QAAA,SAAAjb,EAAA87B,GAEAA,EAAAjxD,QAEAjE,KAAA+9D,cAAA3kC,EAAA87B,GAIAl1D,KAAAg+D,eAAA5kC,EAAA87B,IAUA4C,EAAAj1D,UAAAg7D,eAAA,SAAAzkC,EAAA87B,GAEA,GAAA+I,GAAAj+D,KAAA29D,cAAA1jD,KAEAgkD,KAEAA,GAAA,GAAAL,GAAA1I,KAGA+I,EAAA,GAAA5C,WAAAnG,EACAl1D,KAAA6oC,SAAAmL,cAAAC,WAAA7a,EAAA6kC,IAOAnG,EAAAj1D,UAAAk7D,cAAA,WAEA,GAAAhoB,GAAA/1C,KAAA6oC,SAAAmL,cAAAM,WAEAt0C,MAAA29D,cAAAhzD,KAAAorC,IAUA+hB,EAAAj1D,UAAAi7D,gBAAA,SAAA1kC,EAAA87B,GAEAl1D,KAAA6oC,SAAAkvB,eAAA5jB,SAAA+gB,IASA4C,EAAAj1D,UAAAm7D,eAAA,SAAA5kC,EAAA87B,GAEAl1D,KAAA6oC,SAAAkvB,eAAA1jB,QAAA6gB,MAIAgJ,8BAAA,GAAAxC,iBAAA,KAAAyC,IAAA,SAAAz9D,EAAAjB,EAAAD,GAaA,QAAAonD,GAAA/d,GAEA8d,EAAA5lD,KAAAf,KAAA6oC,GAKA7oC,KAAAo+D,UAAA,GAKAp+D,KAAA+L,eAKA/L,KAAA6L,kBAEA,KAAA,GAAAlL,GAAA,EAAAA,EAAAX,KAAAo+D,UAAAz9D,IAEAX,KAAA+L,YAAApL,IAAA,CAMAX,MAAAq+D,SAMAr+D,KAAAs+D,WAAA,GAMAt+D,KAAAu+D,cAAA,KAnDA,GAAA5X,GAAAjmD,EAAA,kBACA6wD,EAAA7wD,EAAA,4BACA89D,EAAA99D,EAAA,qCACAw/C,EAAAx/C,EAAA,8BACAmqC,EAAAnqC,EAAA,iBAoDAkmD,GAAA/jD,UAAA0M,OAAA/L,OAAAmjD,EAAA9jD,WACA+jD,EAAA/jD,UAAAmH,YAAA48C,EACA/b,EAAAgoB,aAAAC,MAAAlM,GAEAnnD,EAAAD,QAAAonD,EAMAA,EAAA/jD,UAAA49C,gBAAA,WAEAzgD,KAAA2yD,aAEA,IAAAvwD,GAAApC,KAAA6oC,SAAAzmC,EAGApC,MAAAo+D,UAAAh8D,EAAAuJ,aAAAvJ,EAAAwJ,oBAEA5L,KAAA+L,cAEA,KAAA,GAAApL,GAAA,EAAAA,EAAAX,KAAAo+D,UAAAz9D,IAEAX,KAAA+L,YAAApL,IAAA,CAIAX,MAAAu8D,cAAA,GAAAhL,GAAAvxD,MACAA,KAAA8/C,gBAAA,GAAAI,GAAAlgD,MACAA,KAAA+/C,uBAAA,GAAAye,GAAAx+D,OAQA4mD,EAAA/jD,UAAA47D,WAAA,SAAAhzD,GAGA,GAAA9K,EAEA,KAAAA,EAAA,EAAAA,EAAAX,KAAA6L,gBAAA7K,OAAAL,IAEAX,KAAA6L,gBAAAlL,IAAA,CAIA,KAAA,GAAAF,KAAAgL,GAEAzL,KAAA6L,gBAAAJ,EAAAhL,KAAA,CAGA,IAAA2B,GAAApC,KAAA6oC,SAAAzmC,EAEA,KAAAzB,EAAA,EAAAA,EAAAX,KAAA+L,YAAA/K,OAAAL,IAEAX,KAAA+L,YAAApL,KAAAX,KAAA6L,gBAAAlL,KAEAX,KAAA+L,YAAApL,GAAAX,KAAA6L,gBAAAlL,GAEAX,KAAA+L,YAAApL,GAEAyB,EAAAqI,wBAAA9J,GAIAyB,EAAA4J,yBAAArL,KAWAimD,EAAA/jD,UAAAgtD,UAAA,SAAAxiD,KAsBAu5C,EAAA/jD,UAAA0C,QAAA,WAEAvF,KAAA8/C,gBAAAv6C,UACAvF,KAAA+/C,uBAAAx6C,UACAohD,EAAA9jD,UAAA0C,QAAAxE,KAAAf,MAEAA,KAAAqzD,iBAEArzD,KAAA+L,YAAA,KAEA/L,KAAA6L,gBAAA,QAGAw3C,iBAAA,IAAAqb,oCAAA,GAAAC,6BAAA,GAAA5D,2BAAA,GAAAW,iBAAA,KAAAkD,IAAA,SAAAl+D,EAAAjB,EAAAD,GASA,QAAAq/D,GAAAh2B,GAEA8d,EAAA5lD,KAAAf,KAAA6oC,GACA7oC,KAAAy5D,iBAAA,KAXA,GAAA9S,GAAAjmD,EAAA,kBACAmqC,EAAAnqC,EAAA,iBAaAm+D,GAAAh8D,UAAA0M,OAAA/L,OAAAmjD,EAAA9jD,WACAg8D,EAAAh8D,UAAAmH,YAAA60D,EACAp/D,EAAAD,QAAAq/D,EAOAA,EAAAh8D,UAAA22D,aAAA,SAAAC,GAEAz5D,KAAAy5D,iBAAAA,CAEA,IAAAr3D,GAAApC,KAAA6oC,SAAAzmC,EAEA,KAAAq3D,EAAAiE,aAAA18D,OAEAoB,EAAAw2D,QAAAx2D,EAAA08D,cAIA18D,EAAA22D,OAAA32D,EAAA08D,eAUAD,EAAAh8D,UAAAk8D,YAAA,SAAA7gB,EAAAwC,GAEA1gD,KAAA6oC,SAAA2vB,oBAAAwG,qBAEA,IAAA58D,GAAApC,KAAA6oC,SAAAzmC,GACA68D,EAAAj/D,KAAAy5D,gBAEAz5D,MAAAk/D,aAAAhhB,EAAAwC,GAEA,IAAAue,EAAAvB,aAAA18D,SAEAoB,EAAA22D,OAAA32D,EAAA08D,cACA18D,EAAA2C,MAAA3C,EAAA+8D,oBACAF,EAAAziD,SAAA,EACAyiD,EAAAzqD,MAAA,GAGAyqD,EAAAvB,aAAA/yD,KAAA+1C,EAEA,IAAA0e,GAAAH,EAAAzqD,KAEApS,GAAAi9D,WAAA,GAAA,GAAA,GAAA,GAEAj9D,EAAAk9D,YAAAl9D,EAAAm9D,OAAA,EAAA,KACAn9D,EAAAo9D,UAAAp9D,EAAAq9D,KAAAr9D,EAAAq9D,KAAAr9D,EAAAs9D,QAIA,IAAAhf,EAAAK,MAEA3+C,EAAA4I,aAAA5I,EAAA+sC,aAAAuR,EAAAY,QAAAtgD,OAAA,EAAAoB,EAAA6I,eAAA,GAEAg0D,EAAAziD,SAEApa,EAAAk9D,YAAAl9D,EAAAu9D,MAAA,IAAAP,EAAA,KACAh9D,EAAAo9D,UAAAp9D,EAAAq9D,KAAAr9D,EAAAq9D,KAAAr9D,EAAAw9D,QAIAx9D,EAAAk9D,YAAAl9D,EAAAu9D,MAAAP,EAAA,KACAh9D,EAAAo9D,UAAAp9D,EAAAq9D,KAAAr9D,EAAAq9D,KAAAr9D,EAAAy9D,OAIAz9D,EAAA4I,aAAA5I,EAAA+sC,aAAA,EAAA/sC,EAAA6I,eAAA,GAAAy1C,EAAAY,QAAAtgD,OAAA,IAEAi+D,EAAAziD,QAEApa,EAAAk9D,YAAAl9D,EAAAu9D,MAAA,KAAAP,EAAA,GAAA,KAIAh9D,EAAAk9D,YAAAl9D,EAAAu9D,MAAAP,EAAA,EAAA,KAGAH,EAAAziD,SAAAyiD,EAAAziD,UAIAyiD,EAAAziD,SAOApa,EAAAk9D,YAAAl9D,EAAAu9D,MAAAP,EAAA,KACAh9D,EAAAo9D,UAAAp9D,EAAAq9D,KAAAr9D,EAAAq9D,KAAAr9D,EAAAy9D,QANAz9D,EAAAk9D,YAAAl9D,EAAAu9D,MAAA,IAAAP,EAAA,KACAh9D,EAAAo9D,UAAAp9D,EAAAq9D,KAAAr9D,EAAAq9D,KAAAr9D,EAAAw9D,OAQAx9D,EAAA4I,aAAA5I,EAAA8sC,eAAAwR,EAAAY,QAAAtgD,OAAAoB,EAAA6I,eAAA,GAEAg0D,EAAAziD,QAMApa,EAAAk9D,YAAAl9D,EAAAu9D,MAAAP,EAAA,EAAA,KAJAh9D,EAAAk9D,YAAAl9D,EAAAu9D,MAAA,KAAAP,EAAA,GAAA,MAQAh9D,EAAAi9D,WAAA,GAAA,GAAA,GAAA,GACAj9D,EAAAo9D,UAAAp9D,EAAAq9D,KAAAr9D,EAAAq9D,KAAAr9D,EAAAq9D,MAEAR,EAAAzqD,SASAqqD,EAAAh8D,UAAAq8D,aAAA,SAAAhhB,EAAAwC,GAGA,GAAAt+C,GAAApC,KAAA6oC,SAAAzmC,GAGAiL,EAAArN,KAAA6oC,SAAAmD,QAAAkS,SAAA4B,eAEA,KAAAY,EAAAK,OA+BA/gD,KAAA6oC,SAAAmY,WAAA3zC,GAEAA,EAAA1G,SAAAs6C,kBAAA/C,EAAAhT,eAAAgW,SAAA,GACA7zC,EAAA1G,SAAAmxC,KAAAjN,EAAAsW,QAAAjD,EAAApG,MACAzqC,EAAA1G,SAAAksC,MAAAqL,EAAAtL,WAGAxwC,EAAAgB,WAAAhB,EAAAM,aAAAg+C,EAAAl+C,QAGA6K,EAAA5G,WAAA26C,gBAAA/2C,QAAAjI,EAAA4F,OAAA,EAAA,GAAA,GACAqF,EAAA5G,WAAA46C,OAAAh3C,QAAAjI,EAAA4F,OAAA,EAAA,GAAA,GAEA5F,EAAAqI,wBAAA4C,EAAA5G,WAAA26C,gBAAAn5C,UACA7F,EAAAqI,wBAAA4C,EAAA5G,WAAA46C,OAAAp5C,UAGA7F,EAAAgB,WAAAhB,EAAAmB,qBAAAm9C,EAAA52C,eA6BA+0D,EAAAh8D,UAAAi9D,WAAA,SAAA5hB,EAAAwC,GAEA,GAAAt+C,GAAApC,KAAA6oC,SAAAzmC,GACA68D,EAAAj/D,KAAAy5D,gBAMA,IAJAwF,EAAAvB,aAAAzjD,MAEAglD,EAAAzqD,QAEA,IAAAyqD,EAAAvB,aAAA18D,OAGAoB,EAAAw2D,QAAAx2D,EAAA08D,kBAIA,CAEA,GAAAM,GAAAH,EAAAzqD,KAEAxU,MAAAk/D,aAAAhhB,EAAAwC,GAEAt+C,EAAAi9D,WAAA,GAAA,GAAA,GAAA,GAEA,IAAA3e,EAAAK,MAEAke,EAAAziD,SAAAyiD,EAAAziD,QAEAyiD,EAAAziD,SAEApa,EAAAk9D,YAAAl9D,EAAAu9D,MAAA,KAAAP,EAAA,GAAA,KACAh9D,EAAAo9D,UAAAp9D,EAAAq9D,KAAAr9D,EAAAq9D,KAAAr9D,EAAAy9D,QAIAz9D,EAAAk9D,YAAAl9D,EAAAu9D,MAAAP,EAAA,EAAA,KACAh9D,EAAAo9D,UAAAp9D,EAAAq9D,KAAAr9D,EAAAq9D,KAAAr9D,EAAAw9D,OAIAx9D,EAAA4I,aAAA5I,EAAA+sC,aAAA,EAAA/sC,EAAA6I,eAAA,GAAAy1C,EAAAY,QAAAtgD,OAAA,IAEAoB,EAAAk9D,YAAAl9D,EAAAm9D,OAAA,EAAA,KACAn9D,EAAAo9D,UAAAp9D,EAAAq9D,KAAAr9D,EAAAq9D,KAAAr9D,EAAAs9D,QAGAt9D,EAAA4I,aAAA5I,EAAA+sC,aAAAuR,EAAAY,QAAAtgD,OAAA,EAAAoB,EAAA6I,eAAA,GAEAjL,KAAA6oC,SAAA0Y,WAAA,EAEA0d,EAAAziD,QAMApa,EAAAk9D,YAAAl9D,EAAAu9D,MAAAP,EAAA,KAJAh9D,EAAAk9D,YAAAl9D,EAAAu9D,MAAA,IAAA,EAAA,OAWAV,EAAAziD,SAOApa,EAAAk9D,YAAAl9D,EAAAu9D,MAAAP,EAAA,EAAA,KACAh9D,EAAAo9D,UAAAp9D,EAAAq9D,KAAAr9D,EAAAq9D,KAAAr9D,EAAAw9D,QANAx9D,EAAAk9D,YAAAl9D,EAAAu9D,MAAA,KAAAP,EAAA,GAAA,KACAh9D,EAAAo9D,UAAAp9D,EAAAq9D,KAAAr9D,EAAAq9D,KAAAr9D,EAAAy9D,OAQAz9D,EAAA4I,aAAA5I,EAAA8sC,eAAAwR,EAAAY,QAAAtgD,OAAAoB,EAAA6I,eAAA,GAEAjL,KAAA6oC,SAAA0Y,YAEA0d,EAAAziD,QAMApa,EAAAk9D,YAAAl9D,EAAAu9D,MAAAP,EAAA,KAJAh9D,EAAAk9D,YAAAl9D,EAAAu9D,MAAA,IAAA,EAAA,MAQAv9D,EAAAi9D,WAAA,GAAA,GAAA,GAAA,GACAj9D,EAAAo9D,UAAAp9D,EAAAq9D,KAAAr9D,EAAAq9D,KAAAr9D,EAAAq9D,QAUAZ,EAAAh8D,UAAA0C,QAAA,WAEAohD,EAAA9jD,UAAA0C,QAAAxE,KAAAf,MAEAA,KAAAy5D,iBAAAiE,aAAA,MAQAmB,EAAAh8D,UAAAsxC,SAAA,SAAA+gB,GAEAl1D,KAAA6oC,SAAAoV,kBAAAj+C,KAAA6oC,SAAAmD,QAAAkS,UAGAgX,EAAAnrD,OAEA/J,KAAA6oC,SAAAmD,QAAAkS,SAAAyC,eAAAuU,EAAAl1D,KAAA6oC,SAAAzmC,IAGA8yD,EAAAhd,OAAAl4C,KAAA6oC,SAAAzmC,GAAAkJ,IAAAhJ,KAAAtB,QAKAhB,KAAA++D,YAAA7J,EAAAA,EAAAhd,OAAAl4C,KAAA6oC,SAAAzmC,GAAAkJ,IAAAhJ,KAAA,KAQAu8D,EAAAh8D,UAAAwxC,QAAA,SAAA6gB,GAEAl1D,KAAA6oC,SAAAoV,kBAAAj+C,KAAA6oC,SAAAmD,QAAAkS,UAEAl+C,KAAA8/D,WAAA5K,EAAAA,EAAAhd,OAAAl4C,KAAA6oC,SAAAzmC,GAAAkJ,IAAAhJ,KAAA,OAIA+gD,iBAAA,IAAAqY,iBAAA,KAAAqE,IAAA,SAAAr/D,EAAAjB,EAAAD,GAMA,QAAAmnD,GAAA9d,GAOA7oC,KAAA6oC,SAAAA,EAEA7oC,KAAA6oC,SAAA7hB,GAAA,UAAAhnB,KAAAygD,gBAAAzgD,MAGA2mD,EAAA9jD,UAAAmH,YAAA28C,EACAlnD,EAAAD,QAAAmnD,EAMAA,EAAA9jD,UAAA49C,gBAAA,aASAkG,EAAA9jD,UAAA0C,QAAA,WAEAvF,KAAA6oC,SAAA3hB,IAAA,UAAAlnB,KAAAygD,gBAAAzgD,MAEAA,KAAA6oC,SAAA,WAGAm3B,IAAA,SAAAt/D,EAAAjB,EAAAD,GAWA,QAAAg/D,GAAApP,GAEA/oD,EAAAtF,KAAAf,KACAovD,GAGA,kCAEA,kCACA,iCAEA,qBACA,uBACA,sBAEA,uBAEA,mBACA,2GACA,iDACA,KACAx+C,KAAA,OAGA,2BAEA,uBAEA,mBACA,4BACA,KACAA,KAAA,OAGAknC,MAAAz1C,KAAA,KAAA8M,OAAA,EAAA,EAAA,IACA0jC,OAAAxwC,KAAA,KAAA8M,MAAA,GACA8pC,OAAA52C,KAAA,KAAA8M,OAAA,EAAA,EAAA,IACA8xC,mBAAA5+C,KAAA,OAAA8M,MAAA,GAAAtH,cAAA,IACAooD,kBAAA5tD,KAAA,OAAA8M,MAAA,GAAAtH,cAAA,MAIAu5C,gBAAA,IApDA,GAAA/6C,GAAA3F,EAAA,WAyDA89D,GAAA37D,UAAA0M,OAAA/L,OAAA6C,EAAAxD,WACA27D,EAAA37D,UAAAmH,YAAAw0D,EACA/+D,EAAAD,QAAAg/D,IAEAyB,WAAA,KAAAC,IAAA,SAAAx/D,EAAAjB,EAAAD,GAWA,QAAA0gD,GAAAkP,GAEA/oD,EAAAtF,KAAAf,KACAovD,GAGA,kCACA,yBAEA,kCACA,iCAEA,uBACA,uBACA,qBAEA,uBAEA,mBACA,2GACA,kDACA,KACAx+C,KAAA,OAGA,2BAEA,uBAEA,mBACA,4BACA,KACAA,KAAA,OAGAknC,MAAAz1C,KAAA,KAAA8M,OAAA,EAAA,EAAA,IACA0jC,OAAAxwC,KAAA,KAAA8M,MAAA,GACA8xC,mBAAA5+C,KAAA,OAAA8M,MAAA,GAAAtH,cAAA,IACAooD,kBAAA5tD,KAAA,OAAA8M,MAAA,GAAAtH,cAAA,MAIAu5C,gBAAA,EACAC,OAAA,IArDA,GAAAh7C,GAAA3F,EAAA,WA0DAw/C,GAAAr9C,UAAA0M,OAAA/L,OAAA6C,EAAAxD,WACAq9C,EAAAr9C,UAAAmH,YAAAk2C,EACAzgD,EAAAD,QAAA0gD,IAEA+f,WAAA,KAAAE,IAAA,SAAAz/D,EAAAjB,EAAAD,GAeA,QAAA6G,GAAA+oD,EAAA9oD,EAAAC,EAAAI,EAAAF,GAEA,IAAAH,IAAAC,EAEA,KAAA,IAAA3F,OAAA,2DAQAZ,MAAAq3D,IAAAxsB,EAAAwsB,MAOAr3D,KAAAoC,GAAAgtD,EAAAvmB,SAAAzmC,GAGApC,KAAAovD,cAAAA,EAQApvD,KAAAwG,QAAA,KAOAxG,KAAA2G,SAAAA,MAOA3G,KAAAyG,WAAAA,MAOAzG,KAAAogE,aAAA,EAOApgE,KAAAsG,UAAAA,EAOAtG,KAAAuG,YAAAA,EAEAvG,KAAAqgE,OAhFA,GAAAx1B,GAAAnqC,EAAA,iBAmFA2F,GAAAxD,UAAAmH,YAAA3D,EACA5G,EAAAD,QAAA6G,EAMAA,EAAAxD,UAAAw9D,KAAA,WAEArgE,KAAAsgE,UAEAtgE,KAAAoC,GAAAwE,WAAA5G,KAAAwG,SAEAxG,KAAAugE,sBAAAhxD,OAAAC,KAAAxP,KAAA2G,WACA3G,KAAAwgE,wBAAAjxD,OAAAC,KAAAxP,KAAAyG,cAQAJ,EAAAxD,UAAA09D,sBAAA,SAAA/wD,GAEA,IAAA,GAAA7O,GAAA,EAAAA,EAAA6O,EAAAxO,SAAAL,EAEAX,KAAA2G,SAAA6I,EAAA7O,IAAAwvD,UAAAnwD,KAAAoC,GAAA8M,mBAAAlP,KAAAwG,QAAAgJ,EAAA7O,KASA0F,EAAAxD,UAAA29D,wBAAA,SAAAhxD,GAEA,IAAA,GAAA7O,GAAA,EAAAA,EAAA6O,EAAAxO,SAAAL,EAEAX,KAAAyG,WAAA+I,EAAA7O,IAAAX,KAAAoC,GAAAqM,kBAAAzO,KAAAwG,QAAAgJ,EAAA7O,KAuBA0F,EAAAxD,UAAAy9D,QAAA,WAEA,GAAAl+D,GAAApC,KAAAoC,GAEA8J,EAAAlM,KAAAygE,WAAAr+D,EAAAgK,cAAApM,KAAAsG,WACA+F,EAAArM,KAAAygE,WAAAr+D,EAAAkK,gBAAAtM,KAAAuG,aAEAC,EAAApE,EAAAmK,eA2BA,OAzBAnK,GAAAoK,aAAAhG,EAAA0F,GACA9J,EAAAoK,aAAAhG,EAAA6F,GACAjK,EAAAqK,YAAAjG,GAGApE,EAAAsK,oBAAAlG,EAAApE,EAAAuK,eAEAC,QAAAC,MAAA,+CACAD,QAAAC,MAAA,qBAAAzK,EAAAsK,oBAAAlG,EAAApE,EAAA0K,kBACAF,QAAAC,MAAA,gBAAAzK,EAAA2K,YAGA,KAAA3K,EAAA4K,kBAAAxG,IAEAoG,QAAAK,KAAA,0CAAA7K,EAAA4K,kBAAAxG,IAGApE,EAAA8K,cAAA1G,GACAA,EAAA,MAIApE,EAAA+K,aAAAjB,GACA9J,EAAA+K,aAAAd,GAEArM,KAAAwG,QAAAA,GAQAH,EAAAxD,UAAAi4D,YAAA,SAAAhrD,GAEA,GAGAnP,GAAA4qD,EAHAtjD,EAAA6H,EAAAqgD,UACAhhD,EAAAW,EAAAX,MACA/M,EAAApC,KAAAoC,EAGA,QAAA0N,EAAAzN,MAEA,IAAA,IACA,IAAA,OACA,IAAA,UACAD,EAAAs+D,UAAAz4D,EAAAkH,EAAA,EAAA,EACA,MAGA,KAAA,IACA,IAAA,KACA/M,EAAAs+D,UAAAz4D,EAAAkH,EACA,MAGA,KAAA,IACA,IAAA,KACA/M,EAAAguD,UAAAnoD,EAAAkH,EACA,MAGA,KAAA,KACA/M,EAAAu+D,UAAA14D,EAAAkH,EAAA,GAAAA,EAAA,GACA,MAGA,KAAA,KACA/M,EAAAw+D,UAAA34D,EAAAkH,EAAA,GAAAA,EAAA,GAAAA,EAAA,GACA,MAGA,KAAA,KACA/M,EAAAy+D,UAAA54D,EAAAkH,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GACA,MAGA,KAAA,KACA/M,EAAAu+D,UAAA14D,EAAAkH,EAAAwF,EAAAxF,EAAA2I,EACA,MAGA,KAAA,KACA1V,EAAAw+D,UAAA34D,EAAAkH,EAAAwF,EAAAxF,EAAA2I,EAAA3I,EAAA4lB,EACA,MAGA,KAAA,KACA3yB,EAAAy+D,UAAA54D,EAAAkH,EAAAwF,EAAAxF,EAAA2I,EAAA3I,EAAA4lB,EAAA5lB,EAAAsK,EACA,MAGA,KAAA,MACArX,EAAA0+D,WAAA74D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAA2+D,WAAA94D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAA4+D,WAAA/4D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAA6+D,WAAAh5D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAA8+D,WAAAj5D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAA++D,WAAAl5D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAAg/D,WAAAn5D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAAi/D,WAAAp5D,EAAAkH,EACA,MAGA,KAAA,KACA,IAAA,OACA,IAAA,YACA/M,EAAAk/D,iBAAAr5D,EAAA6H,EAAAy5C,UAAAp6C,EACA,MAGA,KAAA,KACA,IAAA,OACA,IAAA,YAEA/M,EAAA8tD,iBAAAjoD,EAAA6H,EAAAy5C,UAAAp6C,EACA,MAGA,KAAA,KACA,IAAA,OACA,IAAA,YACA/M,EAAAm/D,iBAAAt5D,EAAA6H,EAAAy5C,UAAAp6C,EACA,MAGA,KAAA,IACA,gBAAAA,KAEAA,EAAA07B,EAAAsW,QAAAhyC,IAGA/M,EAAAw+D,UAAA34D,EAAAkH,EAAA,GAAAA,EAAA,GAAAA,EAAA,GACA,MAGA,KAAA,MACA/M,EAAA0+D,WAAA74D,EAAAkH,EACA,MAGA,KAAA,KACA/M,EAAA4+D,WAAA/4D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAA8+D,WAAAj5D,EAAAkH,EACA,MAGA,KAAA,KACA/M,EAAAg/D,WAAAn5D,EAAAkH,EACA,MAGA,KAAA,MAMA,IALAW,EAAA0xD,SAEA1xD,EAAA0xD,OAAA,GAAA35D,cAAA,EAAAsH,EAAAnO,SAGAL,EAAA,EAAA4qD,EAAAp8C,EAAAnO,OAAAuqD,EAAA5qD,IAAAA,EAEAmP,EAAA0xD,OAAA,EAAA7gE,GAAAwO,EAAAxO,GAAAgU,EACA7E,EAAA0xD,OAAA,EAAA7gE,EAAA,GAAAwO,EAAAxO,GAAAmX,CAGA1V,GAAA++D,WAAAl5D,EAAA6H,EAAA0xD,OACA,MAGA,KAAA,MAMA,IALA1xD,EAAA0xD,SAEA1xD,EAAA0xD,OAAA,GAAA35D,cAAA,EAAAsH,EAAAnO,SAGAL,EAAA,EAAA4qD,EAAAp8C,EAAAnO,OAAAuqD,EAAA5qD,IAAAA,EAEAmP,EAAA0xD,OAAA,EAAA7gE,GAAAwO,EAAAxO,GAAAgU,EACA7E,EAAA0xD,OAAA,EAAA7gE,EAAA,GAAAwO,EAAAxO,GAAAmX,EACAhI,EAAA0xD,OAAA,EAAA7gE,EAAA,GAAAwO,EAAAxO,GAAAo0B,CAIA3yB,GAAAg/D,WAAAn5D,EAAA6H,EAAA0xD,OACA,MAGA,KAAA,MAMA,IALA1xD,EAAA0xD,SAEA1xD,EAAA0xD,OAAA,GAAA35D,cAAA,EAAAsH,EAAAnO,SAGAL,EAAA,EAAA4qD,EAAAp8C,EAAAnO,OAAAuqD,EAAA5qD,IAAAA,EAEAmP,EAAA0xD,OAAA,EAAA7gE,GAAAwO,EAAAxO,GAAAgU,EACA7E,EAAA0xD,OAAA,EAAA7gE,EAAA,GAAAwO,EAAAxO,GAAAmX,EACAhI,EAAA0xD,OAAA,EAAA7gE,EAAA,GAAAwO,EAAAxO,GAAAo0B,EACAjlB,EAAA0xD,OAAA,EAAA7gE,EAAA,GAAAwO,EAAAxO,GAAA8Y,CAIArX,GAAAi/D,WAAAp5D,EAAA6H,EAAA0xD,OACA,MAGA,KAAA,IACA,IAAA,YAEA,IAAA1xD,EAAAX,QAAAW,EAAAX,MAAA2uC,YAAAqZ,UAEA,KAIA/0D,GAAA+F,cAAA/F,EAAA,UAAApC,KAAAogE,cAEA,IAAAn8D,GAAA6L,EAAAX,MAAA2uC,YAAAyS,YAAAnuD,EAAAkJ,GAEArH,KAEAjE,KAAAyhE,cAAA3xD,GAGA7L,EAAA6L,EAAAX,MAAA2uC,YAAAyS,YAAAnuD,EAAAkJ,KAIAlJ,EAAAiG,YAAAjG,EAAAkC,WAAAL,GAGA7B,EAAAs+D,UAAA5wD,EAAAqgD,UAAAnwD,KAAAogE,cAGApgE,KAAAogE,cAEA,MAEA,SACAxzD,QAAAK,KAAA,iDAAA6C,EAAAzN,QAQAgE,EAAAxD,UAAAm6D,aAAA,WAEAh9D,KAAAogE,aAAA,CAEA,KAAA,GAAArrD,KAAA/U,MAAA2G,SAEA3G,KAAA86D,YAAA96D,KAAA2G,SAAAoO,KASA1O,EAAAxD,UAAA4+D,cAAA,SAAA3xD,GAEA,GAAA1N,GAAApC,KAAAoC,GAEA6B,EAAA6L,EAAAX,MAAA2uC,WAEA,IAAA75C,EAAAkzD,UAOA,GAAArnD,EAAA4xD,YACA,CAGA,GAAAp/D,GAAAwN,EAAA4xD,WAEAz9D,GAAAssD,YAAAnuD,EAAAkJ,IAAAlJ,EAAA+E,gBAEA/E,EAAAiG,YAAAjG,EAAAkC,WAAAL,EAAAssD,YAAAnuD,EAAAkJ,KAEAlJ,EAAAqF,YAAArF,EAAAsF,+BAAAzD,EAAA4zD,oBAWAz1D,EAAAuF,WAAAvF,EAAAkC,WAAA,EAAAhC,EAAAq/D,UAAAv/D,EAAAw/D,UAAAx/D,EAAAkF,KAAAlF,EAAAkF,KAAAlF,EAAAmF,cAAAtD,EAAAuD,QAEApF,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAA2G,mBAAAzG,EAAAwG,UAAAxG,EAAAwG,UAAA1G,EAAAwG,QACAxG,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAAqG,mBAAAnG,EAAAu/D,MAAAv/D,EAAAu/D,MAAAz/D,EAAAgH,eAEAhH,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAAiH,eAAA/G,EAAAu/D,MAAAv/D,EAAAu/D,MAAAz/D,EAAAgH,eACAhH,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAA+G,eAAA7G,EAAAw/D,MAAAx/D,EAAAw/D,MAAA1/D,EAAAgH,mBAIApJ,MAAAovD,cAAAvmB,SAAA2nB,cAAAvsD,IAQAoC,EAAAxD,UAAA0C,QAAA,WAEAvF,KAAAoC,GAAA8K,cAAAlN,KAAAwG,SAEAxG,KAAAoC,GAAA,KACApC,KAAA2G,SAAA,KACA3G,KAAAyG,WAAA,KAEAzG,KAAAsG,UAAA,KACAtG,KAAAuG,YAAA,MAGAF,EAAAxD,UAAA49D,WAAA,SAAAp+D,EAAA+K,GAEA,GAAAC,GAAArN,KAAAoC,GAAAkL,aAAAjL,EAKA,OAHArC,MAAAoC,GAAAmL,aAAAF,EAAAD,GACApN,KAAAoC,GAAA+J,cAAAkB,GAEArN,KAAAoC,GAAAoL,mBAAAH,EAAArN,KAAAoC,GAAAqL,gBAMAJ,GAJAT,QAAAc,IAAA1N,KAAAoC,GAAAuL,iBAAAN,IACA,SAMAg2C,iBAAA,MAAA0e,IAAA,SAAArhE,EAAAjB,EAAAD,GAaA,QAAA+xD,GAAAnC,EAAA9oD,EAAAC,EAAAy7D,EAAAC,GAEA,GAAAt7D,IAEAu7D,UAAA7/D,KAAA,YAAA8M,MAAA,GACA8gD,kBAAA5tD,KAAA,OAAA8M,MAAA,GAAAtH,eAAA,EAAA,EAAA,EACA,EAAA,EAAA,EACA,EAAA,EAAA,KAGA,IAAAm6D,EAEA,IAAA,GAAAxhE,KAAAwhE,GAEAr7D,EAAAnG,GAAAwhE,EAAAxhE,EAKA,IAAAiG,IACA26C,gBAAA,EACAsO,cAAA,EACArO,OAAA,EAGA,IAAA4gB,EAEA,IAAA,GAAAxhE,KAAAwhE,GAEAx7D,EAAAhG,GAAAwhE,EAAAxhE,EASA6F,GAAAA,GAAAirD,EAAAmJ,iBAOAn0D,EAAAA,GAAAgrD,EAAAoJ,mBAEAt0D,EAAAtF,KAAAf,KAAAovD,EAAA9oD,EAAAC,EAAAI,EAAAF,GA3DA,GAAAJ,GAAA3F,EAAA,WA+DA6wD,GAAA1uD,UAAA0M,OAAA/L,OAAA6C,EAAAxD,WACA0uD,EAAA1uD,UAAAmH,YAAAunD,EACA9xD,EAAAD,QAAA+xD,EAQAA,EAAAmJ,kBACA,wBACA,kCACA,gCACA,yBAEA,iCAEA,8BACA,uBAEA,mBACA,uFACA,oCACA,qDACA,KACA9pD,KAAA,MAQA2gD,EAAAoJ,oBACA,wBAEA,8BACA,uBAEA,8BAEA,mBACA,kEACA,KACA/pD,KAAA,QAEAqvD,WAAA,KAAAkC,IAAA,SAAAzhE,EAAAjB,EAAAD,GAaA,QAAA+xD,GAAAnvD,GAOAkE,UAAAirD,EAAAmJ,iBAOAn0D,YAAAgrD,EAAAoJ,mBAEAt0D,EAAAtF,KAAAf,KAAAoC,EAAAkE,UAAAC,aA5BA,GAAAF,GAAA3F,EAAA,gBAAAY,QAiCAiwD,GAAA1uD,UAAA0M,OAAA/L,OAAA6C,EAAAxD,WACA0uD,EAAA1uD,UAAAmH,YAAAunD,EACA9xD,EAAAD,QAAA+xD,EAQAA,EAAAmJ,kBACA,wBACA,kCACA,gCACA,yBAEA,iCAEA,8BACA,uBAEA,mBACA,uFACA,oCACA,qDACA,KACA9pD,KAAA,MAQA2gD,EAAAoJ,oBACA,wBAEA,8BACA,uBAEA,8BAEA,mBACA,kEACA,KACA/pD,KAAA,QAEAk2B,eAAA,IAAAs7B,IAAA,SAAA1hE,EAAAjB,EAAAD,GAWA,QAAAogD,GAAA/W,GAEA8d,EAAA5lD,KAAAf,KAAA6oC,GAZA,GAAA8d,GAAAjmD,EAAA,2BAgBAk/C,GAAA/8C,UAAA0M,OAAA/L,OAAAmjD,EAAA9jD,WACA+8C,EAAA/8C,UAAAmH,YAAA41C,EACAngD,EAAAD,QAAAogD,EAMAA,EAAA/8C,UAAA2H,MAAA,aASAo1C,EAAA/8C,UAAAmxB,KAAA,WAEAh0B,KAAA+zC,SAOA6L,EAAA/8C,UAAAkxC,MAAA,aAUA6L,EAAA/8C,UAAA6vC,OAAA,SAAA79B,OAKAwtD,2BAAA,KAAAC,IAAA,SAAA5hE,EAAAjB,EAAAD,GAQA,QAAAu8D,GAAA35D,GAOApC,KAAAoC,GAAAA,EASApC,KAAAy8D,SAAA,GAAA50D,eACA,EAAA,EACA,IAAA,EACA,IAAA,IACA,EAAA,MAQA7H,KAAA4sD,IAAA,GAAA/kD,eACA,EAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,IAUA7H,KAAAuiE,OAAA,GAAA16D,eACA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,IAMA7H,KAAAshD,QAAA,GAAAqB,cACA,EAAA,EAAA,EAAA,EAAA,EAAA,IAMA3iD,KAAAs8D,aAAAl6D,EAAAK,eAKAzC,KAAA8J,YAAA1H,EAAAK,eAEAL,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAAs8D,cACAl6D,EAAAe,WAAAf,EAAAM,aAAA,IAAAN,EAAAssD,cAEAtsD,EAAAgB,WAAAhB,EAAAmB,qBAAAvD,KAAA8J,aACA1H,EAAAe,WAAAf,EAAAmB,qBAAAvD,KAAAshD,QAAAl/C,EAAAO,aAEA3C,KAAA4C,SAGAm5D,EAAAl5D,UAAAmH,YAAA+xD,EAOAA,EAAAl5D,UAAAkZ,IAAA,SAAAyuB,EAAAg4B,GAEA,GAAA7tD,GAAA,EACAmD,EAAA,CAEA9X,MAAA4sD,IAAA,GAAAj4C,EACA3U,KAAA4sD,IAAA,GAAA90C,EAEA9X,KAAA4sD,IAAA,GAAAj4C,EAAA6tD,EAAA5+D,MAAA4mC,EAAA5mC,MACA5D,KAAA4sD,IAAA,GAAA90C,EAEA9X,KAAA4sD,IAAA,GAAAj4C,EAAA6tD,EAAA5+D,MAAA4mC,EAAA5mC,MACA5D,KAAA4sD,IAAA,GAAA90C,EAAA0qD,EAAA3+D,OAAA2mC,EAAA3mC,OAEA7D,KAAA4sD,IAAA,GAAAj4C,EACA3U,KAAA4sD,IAAA,GAAA90C,EAAA0qD,EAAA3+D,OAAA2mC,EAAA3mC,OAGA8Q,EAAA6tD,EAAA7tD,EACAmD,EAAA0qD,EAAA1qD,EAEA9X,KAAAy8D,SAAA,GAAA9nD,EACA3U,KAAAy8D,SAAA,GAAA3kD,EAEA9X,KAAAy8D,SAAA,GAAA9nD,EAAA6tD,EAAA5+D,MACA5D,KAAAy8D,SAAA,GAAA3kD,EAEA9X,KAAAy8D,SAAA,GAAA9nD,EAAA6tD,EAAA5+D,MACA5D,KAAAy8D,SAAA,GAAA3kD,EAAA0qD,EAAA3+D,OAEA7D,KAAAy8D,SAAA,GAAA9nD,EACA3U,KAAAy8D,SAAA,GAAA3kD,EAAA0qD,EAAA3+D,OAEA7D,KAAA4C,UAMAm5D,EAAAl5D,UAAAD,OAAA,WAEA,GAAAR,GAAApC,KAAAoC,EAGAA,GAAAgB,WAAAhB,EAAAM,aAAA1C,KAAAs8D,cAEAl6D,EAAAc,cAAAd,EAAAM,aAAA,EAAA1C,KAAAy8D,UAEAr6D,EAAAc,cAAAd,EAAAM,aAAA,GAAA1C,KAAA4sD,KAEAxqD,EAAAc,cAAAd,EAAAM,aAAA,GAAA1C,KAAAuiE,SAGAxG,EAAAl5D,UAAA0C,QAAA,WAEA,GAAAnD,GAAApC,KAAAoC,EAEAA,GAAAwgD,aAAA5iD,KAAAs8D,cACAl6D,EAAAwgD,aAAA5iD,KAAA8J,cAGArK,EAAAD,QAAAu8D,OAIA0G,IAAA,SAAA/hE,EAAAjB,EAAAD,GACA,GAAAmxC,GAAAjwC,EAAA,iBAEAqsC,GADArsC,EAAA,kBACAA,EAAA,mBAGAW,GADAX,EAAA,gBAAAa,UACAb,EAAA,gBAAAW,eAEAqhE,EAAAhiE,EAAA,sBAgBAmmD,EAAA,SAAAzkD,EAAAwB,EAAAC,EAAA0uC,EAAA9C,EAAAn1B,GASAta,KAAAoC,GAAAA,EASApC,KAAA2iE,YAAA,KAOA3iE,KAAAiE,QAAA,KAEAjE,KAAAiF,YAAA,EAAA,EAAA,EAAA,GAOAjF,KAAA+K,KAAA,GAAA4lC,GAAAqC,UAAA,EAAA,EAAA,EAAA,GAOAhzC,KAAAyvC,WAAAA,GAAA1C,EAAAuC,WAOAtvC,KAAAiwD,iBAAA,GAAAtf,GAAAG,OAOA9wC,KAAAyc,UAAA,KAOAzc,KAAAstD,MAAA,KAEAttD,KAAA4iE,aAAA,GAAA3iE,MAAA+yC,UACAhzC,KAAA6iE,iBAAA,KACA7iE,KAAA8iE,YAAA,KAOA9iE,KAAA+iE,cAAA,KAOA/iE,KAAAy5D,iBAAA,GAAAiJ,GAOA1iE,KAAAs5D,cAEAF,aAAAp5D,KACA2c,UACA61B,OAAAxyC,KAAA+K,OAYA/K,KAAAuyC,UAAAA,GAAAxF,EAAAqC,YAAA/M,QAOAriC,KAAAsa,KAAAA,EAEAta,KAAA2iE,YAAAthE,EAAAoE,WAAArD,EAAA,IAAA,KAEApC,KAAAsa,KAeAta,KAAA2iE,YAAA7+D,YAAA,KALA9D,KAAAiE,QAAAjE,KAAA2iE,YAAA1+D,QAQAjE,KAAAqF,OAAAzB,EAAAC,GAGAgjD,GAAAhkD,UAAAmH,YAAA68C,EACApnD,EAAAD,QAAAqnD,EAOAA,EAAAhkD,UAAAkC,MAAA,SAAAE,GAEA,GAAAm2C,GAAAn2C,GAAAjF,KAAAiF,UACAjF,MAAA2iE,YAAA59D,MAAAq2C,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,KAOAyL,EAAAhkD,UAAAm8D,oBAAA,WAOAh/D,KAAAsa,MAEAta,KAAA2iE,YAAAp+D,iBASAsiD,EAAAhkD,UAAAqH,SAAA,SAAA24D,EAAAC,GAGA,GAAA1gE,GAAApC,KAAAoC,EAEApC,MAAA2iE,YAAA3/D,OAEAhD,KAAA6iE,iBAAAA,GAAA7iE,KAAA6iE,kBAAA7iE,KAAA4iE,aACA5iE,KAAA8iE,YAAAA,GAAA9iE,KAAA8iE,aAAAD,EAEA7iE,KAAAgjE,oBAAAhjE,KAAA6iE,iBAAA7iE,KAAA8iE,aAEA9iE,KAAAyc,WAEAzc,KAAAiwD,iBAAAtG,OAAA3pD,KAAAyc,WAGAzc,KAAA6iE,mBAAA7iE,KAAA8iE,aAEA1gE,EAAA22D,OAAA32D,EAAA6gE,cACA7gE,EAAA8gE,QAAAljE,KAAA6iE,iBAAAluD,EAAA3U,KAAA6iE,iBAAA/qD,EAAA9X,KAAA6iE,iBAAAj/D,MAAA5D,KAAAyvC,WAAAzvC,KAAA6iE,iBAAAh/D,OAAA7D,KAAAyvC,aAIArtC,EAAAw2D,QAAAx2D,EAAA6gE,cAKA7gE,EAAA+gE,SAAAnjE,KAAA6iE,iBAAAluD,EAAA3U,KAAA6iE,iBAAA/qD,EAAA9X,KAAA6iE,iBAAAj/D,MAAA5D,KAAAyvC,WAAAzvC,KAAA6iE,iBAAAh/D,OAAA7D,KAAAyvC,aAUAoX,EAAAhkD,UAAAmgE,oBAAA,SAAAH,EAAAC,GAEA,GAAAM,GAAApjE,KAAAiwD,gBAEA6S,GAAAA,GAAAD,EAEAO,EAAA9vD,WAGAtT,KAAAsa,MAUA8oD,EAAA3iE,EAAA,EAAAoiE,EAAAj/D,MAAA,EACAw/D,EAAA/3B,EAAA,GAAAw3B,EAAAh/D,OAAA,EAEAu/D,EAAAj4B,GAAA,GAAA23B,EAAAnuD,EAAAyuD,EAAA3iE,EACA2iE,EAAAh4B,GAAA,EAAA03B,EAAAhrD,EAAAsrD,EAAA/3B,IAZA+3B,EAAA3iE,EAAA,EAAAoiE,EAAAj/D,MAAA,EACAw/D,EAAA/3B,EAAA,EAAAw3B,EAAAh/D,OAAA,EAEAu/D,EAAAj4B,GAAA,GAAA23B,EAAAnuD,EAAAyuD,EAAA3iE,EACA2iE,EAAAh4B,GAAA,GAAA03B,EAAAhrD,EAAAsrD,EAAA/3B,IAmBAwb,EAAAhkD,UAAAwC,OAAA,SAAAzB,EAAAC,GAKA,GAHAD,EAAA,EAAAA,EACAC,EAAA,EAAAA,EAEA7D,KAAA+K,KAAAnH,QAAAA,GAAA5D,KAAA+K,KAAAlH,SAAAA,EAAA,CAKA7D,KAAA+K,KAAAnH,MAAAA,EACA5D,KAAA+K,KAAAlH,OAAAA,EAEA7D,KAAA4iE,aAAAh/D,MAAAA,EACA5D,KAAA4iE,aAAA/+D,OAAAA,EAEA7D,KAAA2iE,YAAAt9D,OAAAzB,EAAA5D,KAAAyvC,WAAA5rC,EAAA7D,KAAAyvC,WAEA,IAAA4zB,GAAArjE,KAAAstD,OAAAttD,KAAA+K,IAEA/K,MAAAgjE,oBAAAK,KAOAxc,EAAAhkD,UAAA0C,QAAA,WAEAvF,KAAAoC,EAEApC,MAAA2iE,YAAAp9D,UAEAvF,KAAA2iE,YAAA,KACA3iE,KAAAiE,QAAA,QAGA+wD,iBAAA,GAAAhQ,gBAAA,GAAA3B,iBAAA,IAAAigB,qBAAA,GAAAx8B,eAAA,IAAAy8B,IAAA,SAAA7iE,EAAAjB,EAAAD,GAMA,QAAAkjE,KAOA1iE,KAAA09D,gBAOA19D,KAAAwc,SAAA,EAOAxc,KAAAwU,MAAA,EAGAkuD,EAAA7/D,UAAAmH,YAAA04D,EACAjjE,EAAAD,QAAAkjE,OAEAc,IAAA,SAAA9iE,EAAAjB,EAAAD,GAQA,QAAA44D,GAAAh2D,EAAAyS,GAwBA,MAtBAA,GAAAA,MAIAA,EAAAk4B,MAAAW,YAAAC,SAAAvrC,EAAAqhE,IAAArhE,EAAAshE,qBACA7uD,EAAAk4B,MAAAW,YAAAE,MAAAxrC,EAAAuhE,UAAAvhE,EAAAwhE,WACA/uD,EAAAk4B,MAAAW,YAAAG,WAAAzrC,EAAAyhE,UAAAzhE,EAAAshE,qBACA7uD,EAAAk4B,MAAAW,YAAAI,SAAA1rC,EAAAuhE,UAAAvhE,EAAAqhE,KACA5uD,EAAAk4B,MAAAW,YAAAK,UAAA3rC,EAAAqhE,IAAArhE,EAAAshE,qBACA7uD,EAAAk4B,MAAAW,YAAAM,SAAA5rC,EAAAqhE,IAAArhE,EAAAshE,qBACA7uD,EAAAk4B,MAAAW,YAAAO,UAAA7rC,EAAAqhE,IAAArhE,EAAAshE,qBACA7uD,EAAAk4B,MAAAW,YAAAQ,cAAA9rC,EAAAqhE,IAAArhE,EAAAshE,qBACA7uD,EAAAk4B,MAAAW,YAAAS,aAAA/rC,EAAAqhE,IAAArhE,EAAAshE,qBACA7uD,EAAAk4B,MAAAW,YAAAU,aAAAhsC,EAAAqhE,IAAArhE,EAAAshE,qBACA7uD,EAAAk4B,MAAAW,YAAAW,aAAAjsC,EAAAqhE,IAAArhE,EAAAshE,qBACA7uD,EAAAk4B,MAAAW,YAAAY,aAAAlsC,EAAAqhE,IAAArhE,EAAAshE,qBACA7uD,EAAAk4B,MAAAW,YAAAa,YAAAnsC,EAAAqhE,IAAArhE,EAAAshE,qBACA7uD,EAAAk4B,MAAAW,YAAAc,MAAApsC,EAAAqhE,IAAArhE,EAAAshE,qBACA7uD,EAAAk4B,MAAAW,YAAAe,aAAArsC,EAAAqhE,IAAArhE,EAAAshE,qBACA7uD,EAAAk4B,MAAAW,YAAAgB,QAAAtsC,EAAAqhE,IAAArhE,EAAAshE,qBACA7uD,EAAAk4B,MAAAW,YAAAiB,aAAAvsC,EAAAqhE,IAAArhE,EAAAshE,qBAEA7uD,EA/BAk4B,MAAArsC,EAAA,kBAkCAjB,EAAAD,QAAA44D,IAEApD,iBAAA,KAAA8O,IAAA,SAAApjE,EAAAjB,EAAAD,GAQA,QAAA84D,GAAAl2D,EAAAyS,GAEAA,EAAAA,MAEAA,EAAAk4B,MAAA6B,WAAAC,QAAAzsC,EAAAysC,OACAh6B,EAAAk4B,MAAA6B,WAAAE,OAAA1sC,EAAA0sC,MACAj6B,EAAAk4B,MAAA6B,WAAAG,WAAA3sC,EAAA2sC,UACAl6B,EAAAk4B,MAAA6B,WAAAI,YAAA5sC,EAAA4sC,WACAn6B,EAAAk4B,MAAA6B,WAAAK,WAAA7sC,EAAA6sC,UACAp6B,EAAAk4B,MAAA6B,WAAAM,gBAAA9sC,EAAA8sC,eACAr6B,EAAAk4B,MAAA6B,WAAAO,cAAA/sC,EAAA+sC,aAjBApC,MAAArsC,EAAA,kBAqBAjB,EAAAD,QAAA84D,IAEAtD,iBAAA,KAAA+O,IAAA,SAAArjE,EAAAjB,EAAAD,GAuBA,QAAA0mD,GAAAjiD,GAEAysC,EAAA3vC,KAAAf,MAUAA,KAAAutD,OAAA,GAAA5c,GAAAkI,MAQA74C,KAAAswD,SAAA,KAQAtwD,KAAAkxC,OAAA,EAQAlxC,KAAAmxC,QAAA,EAQAnxC,KAAA83C,KAAA,SASA93C,KAAAg4C,UAAAjL,EAAAW,YAAAC,OAOA3tC,KAAAqN,OAAA,KAQArN,KAAAgkE,WAAA,SAGAhkE,KAAAiE,QAAAA,GAAAP,EAAAuvC,MACAjzC,KAAAikE,cAAA,EACAjkE,KAAAkkE,aAAA,EACAlkE,KAAAmkE,WAAA,GAAAt8D,cAAA,GAhGA,GAAA8oC,GAAAjwC,EAAA,WACAgD,EAAAhD,EAAA,uBACAgwC,EAAAhwC,EAAA,wBACA+0D,EAAA/0D,EAAA,0CACAmqC,EAAAnqC,EAAA,YACAqsC,EAAArsC,EAAA,YACAk4C,EAAA,GAAAjI,GAAAkI,KA8FAqN,GAAArjD,UAAA0M,OAAA/L,OAAAktC,EAAA7tC,WACAqjD,EAAArjD,UAAAmH,YAAAk8C,EACAzmD,EAAAD,QAAA0mD,EAEA32C,OAAAwhC,iBAAAmV,EAAArjD,WAOAe,OACAoM,IAAA,WAEA,MAAAwF,MAAAygB,IAAAj2B,KAAAgxC,MAAAr8B,GAAA3U,KAAAiE,QAAA2sD,OAAAhtD,OAEAsM,IAAA,SAAAf,GAEA,GAAAi1D,GAAAv5B,EAAAu5B,KAAApkE,KAAAgxC,MAAAr8B,IAAA,CACA3U,MAAAgxC,MAAAr8B,EAAAyvD,EAAAj1D,EAAAnP,KAAAiE,QAAA2sD,OAAAhtD,MACA5D,KAAAkxC,OAAA/hC,IAUAtL,QACAmM,IAAA,WAEA,MAAAwF,MAAAygB,IAAAj2B,KAAAgxC,MAAAl5B,GAAA9X,KAAAiE,QAAA2sD,OAAA/sD,QAEAqM,IAAA,SAAAf,GAEA,GAAAi1D,GAAAv5B,EAAAu5B,KAAApkE,KAAAgxC,MAAAl5B,IAAA,CACA9X,MAAAgxC,MAAAl5B,EAAAssD,EAAAj1D,EAAAnP,KAAAiE,QAAA2sD,OAAA/sD,OACA7D,KAAAmxC,QAAAhiC,IAUAlL,SACA+L,IAAA,WAEA,MAAAhQ,MAAAswD,UAEApgD,IAAA,SAAAf,GAEAnP,KAAAswD,WAAAnhD,IAKAnP,KAAAswD,SAAAnhD,EACAnP,KAAAgkE,WAAA,SAEAhkE,KAAAikE,cAAA,EAEA90D,IAGAA,EAAA2uC,YAAAqZ,UAEAn3D,KAAAqkE,mBAIAl1D,EAAA8X,KAAA,SAAAjnB,KAAAqkE,iBAAArkE,YAYAkmD,EAAArjD,UAAAwhE,iBAAA,WAEArkE,KAAAikE,cAAA,EAGAjkE,KAAAkxC,SAEAlxC,KAAAgxC,MAAAr8B,EAAAk2B,EAAAu5B,KAAApkE,KAAAgxC,MAAAr8B,GAAA3U,KAAAkxC,OAAAlxC,KAAAiE,QAAAqpD,MAAA1pD,OAGA5D,KAAAmxC,UAEAnxC,KAAAgxC,MAAAl5B,EAAA+yB,EAAAu5B,KAAApkE,KAAAgxC,MAAAl5B,GAAA9X,KAAAmxC,QAAAnxC,KAAAiE,QAAAqpD,MAAAzpD,SAIAqiD,EAAArjD,UAAAyhE,kBAAA,WAGA,GAIAhmB,GAAAC,EAAAC,EAAAC,EAJAx6C,EAAAjE,KAAAswD,SACArlB,EAAAjrC,KAAAyc,UAAAyuB,eACAzqC,EAAAwqC,EAAAxqC,EAAAuE,EAAAimC,EAAAjmC,EAAAqvB,EAAA4W,EAAA5W,EAAAgX,EAAAJ,EAAAI,EAAAF,EAAAF,EAAAE,GAAAC,EAAAH,EAAAG,GACA+4B,EAAAnkE,KAAAmkE,WAEA/+C,EAAAnhB,EAAAmhB,IAEAA,IAGAm5B,EAAAn5B,EAAAzQ,EAAA3U,KAAAutD,OAAA54C,EAAAyQ,EAAAxhB,MACA06C,EAAAC,EAAAt6C,EAAA0sD,KAAA/sD,MAEA66C,EAAAr5B,EAAAtN,EAAA9X,KAAAutD,OAAAz1C,EAAAsN,EAAAvhB,OACA26C,EAAAC,EAAAx6C,EAAA0sD,KAAA9sD,SAKAy6C,EAAAr6C,EAAA2sD,OAAA,OAAA,EAAA5wD,KAAAutD,OAAA54C,GACA4pC,EAAAt6C,EAAA2sD,OAAA,OAAA5wD,KAAAutD,OAAA54C,EAEA6pC,EAAAv6C,EAAA2sD,OAAA/sD,QAAA,EAAA7D,KAAAutD,OAAAz1C,GACA2mC,EAAAx6C,EAAA2sD,OAAA/sD,QAAA7D,KAAAutD,OAAAz1C,GAIAqsD,EAAA,GAAA1jE,EAAA89C,EAAAlqB,EAAAoqB,EAAAtT,EACAg5B,EAAA,GAAA94B,EAAAoT,EAAAz5C,EAAAu5C,EAAAnT,EAGA+4B,EAAA,GAAA1jE,EAAA69C,EAAAjqB,EAAAoqB,EAAAtT,EACAg5B,EAAA,GAAA94B,EAAAoT,EAAAz5C,EAAAs5C,EAAAlT,EAGA+4B,EAAA,GAAA1jE,EAAA69C,EAAAjqB,EAAAmqB,EAAArT,EACAg5B,EAAA,GAAA94B,EAAAmT,EAAAx5C,EAAAs5C,EAAAlT,EAGA+4B,EAAA,GAAA1jE,EAAA89C,EAAAlqB,EAAAmqB,EAAArT,EACAg5B,EAAA,GAAA94B,EAAAmT,EAAAx5C,EAAAu5C,EAAAnT,GAYA8a,EAAArjD,UAAAuxC,aAAA,SAAAvL,GAEA7oC,KAAAikE,eAEAjkE,KAAAikE,cAAA,EAEAjkE,KAAAqkE,mBAEArkE,KAAAkkE,aAAA,GAGAlkE,KAAAkkE,cAEAlkE,KAAAkkE,aAAA,EAGAlkE,KAAAskE,qBAIAz7B,EAAAoV,kBAAApV,EAAAmD,QAAA0kB,QACA7nB,EAAAmD,QAAA0kB,OAAAhe,OAAA1yC,OASAkmD,EAAArjD,UAAAyoC,UAAA,SAAA2K,GAEA,IAAAj2C,KAAA+yC,eACA,CACA/yC,KAAAkkE,cAEAlkE,KAAAkkE,aAAA,EAGAlkE,KAAAskE,oBAIA,IAAAzxC,GACAE,EACAD,EACAE,EACAmxC,EAAAnkE,KAAAmkE,WAEAvpB,EAAAupB,EAAA,GACAtpB,EAAAspB,EAAA,GAEArpB,EAAAqpB,EAAA,GACAppB,EAAAopB,EAAA,GAEAzlB,EAAAylB,EAAA,GACAxlB,EAAAwlB,EAAA,GAEAvlB,EAAAulB,EAAA,GACAtlB,EAAAslB,EAAA,EAuBA,IArBAtxC,EAAA+nB,EACA/nB,EAAAA,EAAAioB,EAAAA,EAAAjoB,EACAA,EAAAA,EAAA6rB,EAAAA,EAAA7rB,EACAA,EAAAA,EAAA+rB,EAAAA,EAAA/rB,EAEAC,EAAA+nB,EACA/nB,EAAAA,EAAAioB,EAAAA,EAAAjoB,EACAA,EAAAA,EAAA6rB,EAAAA,EAAA7rB,EACAA,EAAAA,EAAA+rB,EAAAA,EAAA/rB,EAEAC,EAAA6nB,EACA7nB,EAAA+nB,EAAA/nB,EAAA+nB,EAAA/nB,EACAA,EAAA2rB,EAAA3rB,EAAA2rB,EAAA3rB,EACAA,EAAA6rB,EAAA7rB,EAAA6rB,EAAA7rB,EAEAC,EAAA6nB,EACA7nB,EAAA+nB,EAAA/nB,EAAA+nB,EAAA/nB,EACAA,EAAA2rB,EAAA3rB,EAAA2rB,EAAA3rB,EACAA,EAAA6rB,EAAA7rB,EAAA6rB,EAAA7rB,EAGAhzB,KAAAqpC,SAAAroC,OACA,CACA,GAAAkyC,GAAAlzC,KAAAuzC,oBAEA+K,IAAApL,EAAAv+B,EACA4pC,GAAArL,EAAAv+B,EAAAu+B,EAAAtvC,MACA46C,GAAAtL,EAAAp7B,EACA2mC,GAAAvL,EAAAp7B,EAAAo7B,EAAArvC,OAEAgvB,EAAAA,EAAAyrB,GAAAzrB,EAAAyrB,GACAxrB,EAAAA,EAAA0rB,GAAA1rB,EAAA0rB,GAEAzrB,EAAAA,EAAAwrB,GAAAxrB,EAAAwrB,GACAvrB,EAAAA,EAAAyrB,GAAAzrB,EAAAyrB,GAGA,GAAAjM,GAAAxyC,KAAAszC,OAEAd,GAAA79B,EAAAke,EACA2f,EAAA5uC,MAAAmvB,EAAAF,EAEA2f,EAAA16B,EAAAgb,EACA0f,EAAA3uC,OAAAmvB,EAAAF,EAGA9yB,KAAA+yC,eAAAP,EAGA,MAAAxyC,MAAA+yC,gBAOAmT,EAAArjD,UAAAouC,eAAA,WAMA,MAJAjxC,MAAAszC,QAAA3+B,GAAA3U,KAAAswD,SAAAM,OAAAhtD,MAAA5D,KAAAutD,OAAA54C,EACA3U,KAAAszC,QAAAx7B,GAAA9X,KAAAswD,SAAAM,OAAA/sD,OAAA7D,KAAAutD,OAAAz1C,EACA9X,KAAAszC,QAAA1vC,MAAA5D,KAAAswD,SAAAM,OAAAhtD,MACA5D,KAAAszC,QAAAzvC,OAAA7D,KAAAswD,SAAAM,OAAA/sD,OACA7D,KAAAszC,SASA4S,EAAArjD,UAAAi8C,cAAA,SAAA1I,GAEAp2C,KAAAkrC,eAAAmL,aAAAD,EAAAwC,EAEA,IAGAiC,GAHAj3C,EAAA5D,KAAAswD,SAAAM,OAAAhtD,MACAC,EAAA7D,KAAAswD,SAAAM,OAAA/sD,OACA+2C,GAAAh3C,EAAA5D,KAAAutD,OAAA54C,CAGA,OAAAikC,GAAAjkC,EAAAimC,GAAAhC,EAAAjkC,EAAAimC,EAAAh3C,IAEAi3C,GAAAh3C,EAAA7D,KAAAutD,OAAAz1C,EAEA8gC,EAAA9gC,EAAA+iC,GAAAjC,EAAA9gC,EAAA+iC,EAAAh3C,IAEA,GAIA,GASAqiD,EAAArjD,UAAA0xC,cAAA,SAAA1L,GAEA,KAAA7oC,KAAAiE,QAAA0sD,KAAA/sD,OAAA,GAAA5D,KAAAiE,QAAA0sD,KAAA9sD,QAAA,GAAA,CAKA,GAAAs6C,GAAAtV,EAAAuV,WAAAp+C,KAAAg4C,UAOA,IANAmG,IAAAtV,EAAA9Q,QAAAsmB,2BAEAxV,EAAA9Q,QAAAsmB,yBAAAF,GAIAn+C,KAAAiE,QAAAsgE,MACA,CACA,GAEAzZ,GACAC,EACAnnD,EACAC,EALAI,EAAAjE,KAAAswD,SACArlB,EAAAjrC,KAAAkrC,cAMArC,GAAA9Q,QAAAs1B,YAAArtD,KAAA4yC,UAGA,IAAA4xB,GAAAvgE,EAAA65C,YAAAvL,YAAAxF,EAAAqC,YAAAxmC,MAQA,IAPAigC,EAAAwpB,gBAAAxpB,EAAA9Q,QAAA8Q,EAAAwpB,kBAAAmS,IAEA37B,EAAA9Q,QAAA8Q,EAAAwpB,gBAAAmS,GAKAvgE,EAAAwlD,OACA,CACA7lD,EAAAK,EAAA0sD,KAAA9sD,OACAA,EAAAI,EAAA0sD,KAAA/sD,MAEAknD,EAAA7mD,EAAA,KAAAA,EAAAmhB,KAAAtN,EAAA9X,KAAAutD,OAAAz1C,EAAA7T,EAAAmhB,KAAAvhB,OAAA7D,KAAAutD,OAAAz1C,GAAA7T,EAAA2sD,OAAA/sD,OACAknD,EAAA9mD,EAAA,KAAAA,EAAAmhB,KAAAzQ,EAAA3U,KAAAutD,OAAA54C,EAAA1Q,EAAAmhB,KAAAxhB,MAAA5D,KAAAutD,OAAA54C,GAAA1Q,EAAA2sD,OAAAhtD,MAEAknD,GAAAlnD,EAEAqnC,EAAAE,GAAA4f,EAAA9f,EAAAxqC,EAAAqqD,EAAA7f,EAAA5W,EAAA4W,EAAAE,GACAF,EAAAG,GAAA2f,EAAA9f,EAAAjmC,EAAA8lD,EAAA7f,EAAAI,EAAAJ,EAAAG,EAEA,IAAAyxB,GAAA5xB,EAAAxqC,CACAwqC,GAAAxqC,GAAAwqC,EAAA5W,EACA4W,EAAA5W,EAAAwoC,EAEAA,EAAA5xB,EAAAjmC,EACAimC,EAAAjmC,GAAAimC,EAAAI,EACAJ,EAAAI,EAAAwxB,EAGA/R,EAAA,EACAC,EAAA,MAKAnnD,GAAAK,EAAA0sD,KAAA/sD,MACAC,EAAAI,EAAA0sD,KAAA9sD,OAEAinD,EAAA7mD,EAAA,KAAAA,EAAAmhB,KAAAzQ,EAAA3U,KAAAutD,OAAA54C,EAAA1Q,EAAAmhB,KAAAxhB,MAAA5D,KAAAutD,OAAA54C,GAAA1Q,EAAA2sD,OAAAhtD,MACAmnD,EAAA9mD,EAAA,KAAAA,EAAAmhB,KAAAtN,EAAA9X,KAAAutD,OAAAz1C,EAAA7T,EAAAmhB,KAAAvhB,OAAA7D,KAAAutD,OAAAz1C,GAAA7T,EAAA2sD,OAAA/sD,MAMAglC,GAAAmH,aAEAnH,EAAA9Q,QAAAye,aACAvL,EAAAxqC,EACAwqC,EAAAjmC,EACAimC,EAAA5W,EACA4W,EAAAI,EACAJ,EAAAE,GAAAtC,EAAA4G,WAAA,EACAxE,EAAAG,GAAAvC,EAAA4G,WAAA,GAGAqb,EAAA,EAAAA,EACAC,EAAA,EAAAA,GAKAliB,EAAA9Q,QAAAye,aACAvL,EAAAxqC,EACAwqC,EAAAjmC,EACAimC,EAAA5W,EACA4W,EAAAI,EACAJ,EAAAE,GAAAtC,EAAA4G,WACAxE,EAAAG,GAAAvC,EAAA4G,WAMA,IAAAA,GAAAxrC,EAAA65C,YAAArO,UAEA,YAAAzvC,KAAA83C,MAEA93C,KAAAgkE,aAAAhkE,KAAA83C,OAEA93C,KAAAgkE,WAAAhkE,KAAA83C,KAGA93C,KAAAykE,cAAAhP,EAAAC,iBAAA11D,KAAAA,KAAA83C,OAGAjP,EAAA9Q,QAAA01B,UACAztD,KAAAykE,cACA,EACA,EACA7gE,EAAA6rC,EACA5rC,EAAA4rC,EACAqb,EAAAjiB,EAAA4G,WACAsb,EAAAliB,EAAA4G,WACA7rC,EAAAilC,EAAA4G,WACA5rC,EAAAglC,EAAA4G,aAKA5G,EAAA9Q,QAAA01B,UACAxpD,EAAA65C,YAAAt2C,OACAvD,EAAA0sD,KAAAh8C,EAAA86B,EACAxrC,EAAA0sD,KAAA74C,EAAA23B,EACA7rC,EAAA6rC,EACA5rC,EAAA4rC,EACAqb,EAAAjiB,EAAA4G,WACAsb,EAAAliB,EAAA4G,WACA7rC,EAAAilC,EAAA4G,WACA5rC,EAAAglC,EAAA4G,eAYAyW,EAAArjD,UAAA0C,QAAA,SAAA+xD,EAAAoN,GAEAh0B,EAAA7tC,UAAA0C,QAAAxE,KAAAf,MAEAA,KAAAutD,OAAA,KAEA+J,GAEAt3D,KAAAswD,SAAA/qD,QAAAm/D,GAGA1kE,KAAAswD,SAAA,KACAtwD,KAAAqN,OAAA,MAeA64C,EAAAye,UAAA,SAAAC,GAEA,GAAA3gE,GAAA4mC,EAAAg6B,aAAAD,EAEA,KAAA3gE,EAEA,KAAA,IAAArD,OAAA,gBAAAgkE,EAAA,wCAGA,OAAA,IAAA1e,GAAAjiD,IAWAiiD,EAAA4e,UAAA,SAAAC,EAAAC,EAAAzyB,GAEA,MAAA,IAAA2T,GAAAxiD,EAAAohE,UAAAC,EAAAC,EAAAzyB,OAGAsE,WAAA,GAAAqI,uBAAA,GAAAxK,UAAA,GAAAuwB,yCAAA,GAAA5lB,sBAAA,IAAAzK,WAAA,MAAAswB,IAAA,SAAAxkE,EAAAjB,EAAAD,GA6BA,QAAA4mD,GAAAvd,GAEA+W,EAAA7+C,KAAAf,KAAA6oC,GAQA7oC,KAAA6tD,SAAA,EAOA7tD,KAAA8tD,aAAA,EAAA9tD,KAAA6tD,SAOA7tD,KAAA+K,KAAAgiC,EAAAwD,iBAGA,IAAA40B,GAAA,EAAAnlE,KAAA+K,KAAA/K,KAAA8tD,YAGA,GAAA9tD,KAAA+K,IAOA/K,MAAAy8D,SAAA,GAAAv6D,aAAAijE,GAOAnlE,KAAAolE,UAAA,GAAAv9D,cAAA7H,KAAAy8D,UAOAz8D,KAAA4sD,IAAA,GAAAyY,aAAArlE,KAAAy8D,UAOAz8D,KAAAuiE,OAAA,GAAA8C,aAAArlE,KAAAy8D,UAOAz8D,KAAAshD,QAAAgkB,EAAAtlE,KAAA+K,MAOA/K,KAAAqN,OAAA,KAEArN,KAAAogE,aAAA,EACApgE,KAAA8xC,aAAA,EAEA9xC,KAAAulE,WAAA,EACAvlE,KAAAwlE,SAGA,KAAA,GAAA7kE,GAAA,EAAAA,EAAAX,KAAA+K,KAAApK,IAEAX,KAAAwlE,OAAA7kE,IAAA8kE,YAAArF,aAAA,EAAAsF,OAAA36D,KAAA,EAAAP,MAAA,EAAAm7D,MAAA,EAGA3lE,MAAA4lE,aAAA5lE,KAAAwlE,OAAAxlE,KAAAulE,cAEAvlE,KAAA6lE,eAAA,KApHA,GAAAjmB,GAAAl/C,EAAA,8CACA2rC,EAAA3rC,EAAA,uCAEA4kE,GADA5kE,EAAA,gDACAA,EAAA,sCACAolE,EAAAplE,EAAA,gCACAqsC,EAAArsC,EAAA,eACAumD,EAAAvmD,EAAA,eAkHA0lD,GAAAvjD,UAAA0M,OAAA/L,OAAAo8C,EAAA/8C,WACAujD,EAAAvjD,UAAAmH,YAAAo8C,EACA3mD,EAAAD,QAAA4mD,EAEA/Z,EAAAC,eAAA,SAAA8Z,GAQAA,EAAAvjD,UAAA49C,gBAAA,WAEA,GAAAr+C,GAAApC,KAAA6oC,SAAAzmC,EAEApC,MAAA+lE,YAAA3jE,EAAAuJ,aAAAvJ,EAAA4jE,yBAEAhmE,KAAAimE,QAAAH,EAAA1jE,EAAApC,KAAA+lE,aAGA/lE,KAAAqN,OAAArN,KAAA6oC,SAAAumB,cAAAmN,cAGAv8D,KAAAs8D,aAAArV,EAAA7lD,SAAAiC,mBAAAjB,EAAA,KAAAA,EAAAssD,cACA1uD,KAAA8J,YAAAm9C,EAAA7lD,SAAAkC,kBAAAlB,EAAApC,KAAAshD,QAAAl/C,EAAAO,aAGA3C,KAAAkmE,IAAA,GAAAjf,GAAAzlD,kBAAAY,GAEApC,KAAAkmE,IAAAt7D,SAAA5K,KAAA8J,aACA9J,KAAAkmE,IAAAx7D,aAAA1K,KAAAs8D,aAAAt8D,KAAAimE,QAAAx/D,WAAA26C,gBAAAh/C,EAAA4F,OAAA,EAAAhI,KAAA8tD,aAAA,GACA9tD,KAAAkmE,IAAAx7D,aAAA1K,KAAAs8D,aAAAt8D,KAAAimE,QAAAx/D,WAAAipD,cAAAttD,EAAA6I,gBAAA,EAAAjL,KAAA8tD,aAAA,GACA9tD,KAAAkmE,IAAAx7D,aAAA1K,KAAAs8D,aAAAt8D,KAAAimE,QAAAx/D,WAAA46C,OAAAj/C,EAAAmF,eAAA,EAAAvH,KAAA8tD,aAAA,IACA9tD,KAAAkmE,IAAAx7D,aAAA1K,KAAAs8D,aAAAt8D,KAAAimE,QAAAx/D,WAAA0/D,WAAA/jE,EAAA4F,OAAA,EAAAhI,KAAA8tD,aAAA,IAEA9tD,KAAAw7D,iBAAA,OAQApV,EAAAvjD,UAAA6vC,OAAA,SAAAge,GAcA,GAVA1wD,KAAA8xC,cAAA9xC,KAAA+K,MAEA/K,KAAA+zC,QAQA2c,EAAAzsD,QAAA+sD,KAAA,CAOA,GAEArwD,GAFAylE,EAAA1V,EAAAzsD,QAAA65C,YACA8nB,EAAA5lE,KAAA4lE,YAGA,IAAA5lE,KAAA6lE,iBAAAO,EACA,CAGA,GAFApmE,KAAA6lE,eAAAO,GAEAA,EAAAC,SACA,CAIA,GAHAD,EAAAC,UAAA,EACAD,EAAAE,IAAAtmE,KAAAogE,aAEApgE,KAAAogE,eAAApgE,KAAA+lE,YACA,CACA,IAAAplE,EAAA,EAAAA,EAAAilE,EAAAxF,aAAAz/D,IAEAilE,EAAAH,SAAA9kE,GAAA0lE,UAAA,CAGArmE,MAAAogE,aAAA,EAEAwF,EAAA76D,KAAA/K,KAAA8xC,aAAA8zB,EAAAp7D,MAEAo7D,EAAA5lE,KAAA4lE,aAAA5lE,KAAAwlE,OAAAxlE,KAAAulE,cACAK,EAAAxF,aAAA,EACAwF,EAAAp7D,MAAAxK,KAAA8xC,aAIA8zB,EAAAH,SAAAG,EAAAxF,gBAAAgG,EAGApmE,KAAAogE,eAIA,GAAAhsD,GAAApU,KAAA8xC,aAAA9xC,KAAA8tD,YAEA9tD,MAAA8xC,cAIA,IAAAywB,GAAAviE,KAAAuiE,OACA6C,EAAAplE,KAAAolE,UACAjB,EAAAzT,EAAAyT,WACArsB,GAAA4Y,EAAA5Y,MAAA,KAAA,MAAA4Y,EAAA5Y,QAAA,IAAA4Y,EAAA5Y,OAAA,KAAA,IAAA4Y,EAAA9d,YAAA,IACAga,EAAA8D,EAAAzsD,QAAA+sD,KAAAuV,UAEAnB,GAAAhxD,KAAA+vD,EAAA,GACAiB,EAAAhxD,KAAA+vD,EAAA,GACAnkE,KAAA4sD,IAAAx4C,KAAAw4C,EAAA,GACA2V,EAAAnuD,KAAA0jC,EACAstB,EAAAhxD,KAAAgyD,EAAAE,IAGAlB,EAAAhxD,KAAA+vD,EAAA,GACAiB,EAAAhxD,KAAA+vD,EAAA,GACAnkE,KAAA4sD,IAAAx4C,KAAAw4C,EAAA,GACA2V,EAAAnuD,KAAA0jC,EACAstB,EAAAhxD,KAAAgyD,EAAAE,IAGAlB,EAAAhxD,KAAA+vD,EAAA,GACAiB,EAAAhxD,KAAA+vD,EAAA,GACAnkE,KAAA4sD,IAAAx4C,KAAAw4C,EAAA,GACA2V,EAAAnuD,KAAA0jC,EACAstB,EAAAhxD,KAAAgyD,EAAAE,IAGAlB,EAAAhxD,KAAA+vD,EAAA,GACAiB,EAAAhxD,KAAA+vD,EAAA,GACAnkE,KAAA4sD,IAAAx4C,KAAAw4C,EAAA,GACA2V,EAAAnuD,KAAA0jC,EACAstB,EAAAhxD,KAAAgyD,EAAAE,MAOAlgB,EAAAvjD,UAAAkxC,MAAA,WAEA,GAAA,IAAA/zC,KAAA8xC,aAAA,CAEA,GAAA1vC,GAAApC,KAAA6oC,SAAAzmC,EAGApC,MAAA4lE,aAAA76D,KAAA/K,KAAA8xC,aAAA9xC,KAAA4lE,aAAAp7D,KACA,KAAA,GAAA7J,GAAA,EAAAA,EAAAX,KAAA4lE,aAAAxF,aAAAz/D,IAEAX,KAAA4lE,aAAAH,SAAA9kE,GAAA0lE,UAAA,CAMA,IAAArmE,KAAAwmE,iBAAA,GAAAxmE,KAAA+K,KAEA/K,KAAAs8D,aAAA15D,OAAA5C,KAAAy8D,SAAA,GAAA,OAGA,CAEA,GAAA7yB,GAAA5pC,KAAAolE,UAAAqB,SAAA,EAAAzmE,KAAA8xC,aAAA9xC,KAAA8tD,aACA9tD,MAAAs8D,aAAA15D,OAAAgnC,EAAA,GAAA;CAQA,IAJA5pC,KAAA6oC,SAAAmY,WAAAhhD,KAAAimE,SACAjmE,KAAA6oC,SAAAgY,iBAAAC,aAAA,GAGAngD,EAAA,EAAAA,EAAAX,KAAAulE,WAAA5kE,IAAA,CAIA,IAAA,GAFA+lE,GAAA1mE,KAAAwlE,OAAA7kE,GAEA+oB,EAAA,EAAAA,EAAAg9C,EAAAtG,aAAA12C,IACA1pB,KAAA6oC,SAAAxgC,YAAAq+D,EAAAjB,SAAA/7C,GAAAA,EAGAtnB,GAAA4I,aAAA5I,EAAA6sC,UAAA,EAAAy3B,EAAA37D,KAAA3I,EAAA6I,eAAA,EAAAy7D,EAAAl8D,MAAA,GAIAxK,KAAA6lE,eAAA,KACA7lE,KAAA8xC,aAAA,EACA9xC,KAAAogE,aAAA,EACApgE,KAAAulE,WAAA,EAEAvlE,KAAA4lE,aAAA5lE,KAAAwlE,OAAAxlE,KAAAulE,cACAvlE,KAAA4lE,aAAAxF,aAAA,IAOAha,EAAAvjD,UAAA2H,MAAA,WAEAxK,KAAAkmE,IAAAljE,QAGAojD,EAAAvjD,UAAAmxB,KAAA,WAEAh0B,KAAA+zC,QACA/zC,KAAAkmE,IAAA9gE,UAMAghD,EAAAvjD,UAAA0C,QAAA,WAEAvF,KAAAs8D,aAAA/2D,UACAvF,KAAA8J,YAAAvE,UAEAq6C,EAAA/8C,UAAA0C,QAAAxE,KAAAf,MAEAA,KAAAqN,OAAA9H,UAEAvF,KAAA6oC,SAAA,KAEA7oC,KAAAy8D,SAAA,KACAz8D,KAAAolE,UAAA,KACAplE,KAAAuiE,OAAA,KACAviE,KAAAshD,QAAA,KAEAthD,KAAAs8D,aAAA,KACAt8D,KAAA8J,YAAA,KAEA9J,KAAA2mE,QAAA,KACA3mE,KAAAqN,OAAA,QAGAs0C,cAAA,GAAAE,sCAAA,GAAA+kB,+CAAA,GAAA9kB,6CAAA,GAAA+kB,oCAAA,IAAAC,+BAAA,GAAAhgC,eAAA,IAAAigC,IAAA,SAAArmE,EAAAjB,EAAAD,GAIA,QAAAsmE,GAAA1jE,EAAA4kE,GAEA,GAAA1gE,GAAA,geACAC,EAAA,4BAAA0gE,EAAAD,GAAA,OAAAE,CAEA3gE,GAAAA,EAAA0I,QAAA,SAAA,KAMA,KAAA,GAJA5B,GAAA,GAAAhH,GAAAjE,EAAAkE,EAAAC,GAGA4gE,KACAxmE,EAAA,EAAAqmE,EAAArmE,EAAAA,IACAwmE,EAAAxmE,GAAAA,CAMA,OAHA0M,GAAArK,OACAqK,EAAA1G,SAAAygE,UAAAD,EAEA95D,EAGA,QAAA45D,GAAAD,GAEA,GAAA55D,GAAA,oFAEAA,IAAA,KACAA,GAAA,IAEA,KAAA,GAAAzM,GAAA,EAAAqmE,EAAArmE,EAAAA,IAEAA,EAAA,IAAAyM,GAAA,WACA45D,EAAA,EAAArmE,IAAAyM,GAAA,aAAAzM,EAAA,KACAyM,GAAA,MACAA,GAAA,iCAAAzM,EAAA,UACAyM,GAAA,KAQA,OALAA,IAAA,KACAA,GAAA,KACAA,GAAA,gBACAA,GAAA,MA3CA,GAAA/G,GAAA3F,EAAA,gBAAAY,SAgDA4lE,GAEA,8BACA,uBACA,4BACA,mCAEA,mBACA,yFACA,KACAt2D,KAAA,KAEAnR,GAAAD,QAAAsmE,IAEAh/B,eAAA,IAAAugC,IAAA,SAAA3mE,EAAAjB,EAAAD,GA2CA,QAAA8mD,GAAA1iB,EAAAkF,EAAA2G,GAOAzvC,KAAAoL,OAAAy0B,SAAAC,cAAA,UAMA9/B,KAAA+3B,QAAA/3B,KAAAoL,OAAAC,WAAA,MAMArL,KAAAyvC,WAAAA,GAAA1C,EAAAuC,WAQAtvC,KAAAsnE,MAAA,KAQAtnE,KAAAunE,OAAA,IAEA,IAAAtjE,GAAAP,EAAAm6C,WAAA79C,KAAAoL,OACAnH,GAAAmhB,KAAA,GAAAurB,GAAAqC,UACAkT,EAAAnlD,KAAAf,KAAAiE,GAEAjE,KAAA4jC,KAAAA,EACA5jC,KAAA8oC,MAAAA,EApFA,GAAAod,GAAAxlD,EAAA,qBACAgD,EAAAhD,EAAA,uBACAiwC,EAAAjwC,EAAA,WACAmqC,EAAAnqC,EAAA,YACAqsC,EAAArsC,EAAA,WAoFA4lD,GAAAzjD,UAAA0M,OAAA/L,OAAA0iD,EAAArjD,WACAyjD,EAAAzjD,UAAAmH,YAAAs8C,EACA7mD,EAAAD,QAAA8mD,EAEAA,EAAAkhB,uBACAlhB,EAAAmhB,qBAAA5nC,SAAAC,cAAA,UACAwmB,EAAAohB,sBAAAphB,EAAAmhB,qBAAAp8D,WAAA,MAEAkE,OAAAwhC,iBAAAuV,EAAAzjD,WAOAe,OACAoM,IAAA,WAOA,MALAhQ,MAAA+J,OAEA/J,KAAA2nE,aAGA3nE,KAAAgxC,MAAAr8B,EAAA3U,KAAAswD,SAAAM,OAAAhtD,OAEAsM,IAAA,SAAAf,GAEAnP,KAAAgxC,MAAAr8B,EAAAxF,EAAAnP,KAAAswD,SAAAM,OAAAhtD,MACA5D,KAAAkxC,OAAA/hC,IAUAtL,QACAmM,IAAA,WAOA,MALAhQ,MAAA+J,OAEA/J,KAAA2nE,aAGA3nE,KAAAgxC,MAAAl5B,EAAA9X,KAAAswD,SAAAM,OAAA/sD,QAEAqM,IAAA,SAAAf,GAEAnP,KAAAgxC,MAAAl5B,EAAA3I,EAAAnP,KAAAswD,SAAAM,OAAA/sD,OACA7D,KAAAmxC,QAAAhiC,IA8BA25B,OACA94B,IAAA,WAEA,MAAAhQ,MAAAunE,QAEAr3D,IAAA,SAAA44B,GAEAA,EAAAA,MAEA,gBAAAA,GAAAmU,OACAnU,EAAAmU,KAAApS,EAAAmnB,WAAAlpB,EAAAmU,OAGA,gBAAAnU,GAAAkrB,SACAlrB,EAAAkrB,OAAAnpB,EAAAmnB,WAAAlpB,EAAAkrB,SAGA,gBAAAlrB,GAAA8+B,kBACA9+B,EAAA8+B,gBAAA/8B,EAAAmnB,WAAAlpB,EAAA8+B,kBAGA9+B,EAAA++B,KAAA/+B,EAAA++B,MAAA,kBACA/+B,EAAAmU,KAAAnU,EAAAmU,MAAA,QACAnU,EAAAg/B,MAAAh/B,EAAAg/B,OAAA,OACAh/B,EAAAkrB,OAAAlrB,EAAAkrB,QAAA,QACAlrB,EAAAi/B,gBAAAj/B,EAAAi/B,iBAAA,EACAj/B,EAAAk/B,SAAAl/B,EAAAk/B,WAAA,EACAl/B,EAAAm/B,cAAAn/B,EAAAm/B,eAAA,IAEAn/B,EAAAo/B,WAAAp/B,EAAAo/B,aAAA,EACAp/B,EAAA8+B,gBAAA9+B,EAAA8+B,iBAAA,UACA9+B,EAAAq/B,gBAAAjgE,SAAA4gC,EAAAq/B,gBAAAr/B,EAAAq/B,gBAAA3yD,KAAA03B,GAAA,EACApE,EAAAs/B,mBAAAlgE,SAAA4gC,EAAAs/B,mBAAAt/B,EAAAs/B,mBAAA,EACAt/B,EAAAu/B,eAAAngE,SAAA4gC,EAAAu/B,eAAAv/B,EAAAu/B,eAAA,EAEAv/B,EAAAkW,QAAAlW,EAAAkW,SAAA,EAEAlW,EAAAw/B,aAAAx/B,EAAAw/B,cAAA,aAEAx/B,EAAAy/B,SAAAz/B,EAAAy/B,UAAA,QACAz/B,EAAA0/B,WAAA1/B,EAAA0/B,YAAA,GAEAxoE,KAAAunE,OAAAz+B,EACA9oC,KAAA+J,OAAA,IAUA65B,MACA5zB,IAAA,WAEA,MAAAhQ,MAAAsnE,OAEAp3D,IAAA,SAAA0zB,GACAA,EAAAA,EAAAnpB,YAAA,IACAza,KAAAsnE,QAAA1jC,IAIA5jC,KAAAsnE,MAAA1jC,EACA5jC,KAAA+J,OAAA,OAUAu8C,EAAAzjD,UAAA8kE,WAAA,WAEA,GAAA7+B,GAAA9oC,KAAAunE,MACAvnE,MAAA+3B,QAAA8vC,KAAA/+B,EAAA++B,IAaA,KAAA,GATAY,GAAA3/B,EAAAk/B,SAAAhoE,KAAAgoE,SAAAhoE,KAAAsnE,OAAAtnE,KAAAsnE,MAGAoB,EAAAD,EAAA94D,MAAA,kBAGAg5D,EAAA,GAAA78D,OAAA48D,EAAA1nE,QACA4nE,EAAA,EACAC,EAAA7oE,KAAA8oE,wBAAAhgC,EAAA++B,MACAlnE,EAAA,EAAAA,EAAA+nE,EAAA1nE,OAAAL,IACA,CACA,GAAAg3C,GAAA33C,KAAA+3B,QAAAgxC,YAAAL,EAAA/nE,IAAAiD,KACA+kE,GAAAhoE,GAAAg3C,EACAixB,EAAApzD,KAAAC,IAAAmzD,EAAAjxB,GAGA,GAAA/zC,GAAAglE,EAAA9/B,EAAAi/B,eACAj/B,GAAAo/B,aAEAtkE,GAAAklC,EAAAs/B,oBAGApoE,KAAAoL,OAAAxH,OAAAA,EAAA5D,KAAA+3B,QAAA4f,WAAA33C,KAAAyvC,UAGA,IAAAu5B,GAAAhpE,KAAA8oC,MAAAkgC,YAAAH,EAAAI,SAAAngC,EAAAi/B,gBAEAlkE,EAAAmlE,EAAAN,EAAA1nE,MACA8nC,GAAAo/B,aAEArkE,GAAAilC,EAAAs/B,oBAGApoE,KAAAoL,OAAAvH,QAAAA,EAAA,EAAA7D,KAAAunE,OAAAvoB,SAAAh/C,KAAAyvC,WAEAzvC,KAAA+3B,QAAAiZ,MAAAhxC,KAAAyvC,WAAAzvC,KAAAyvC,YAEA1P,UAAAC,YAEAhgC,KAAA+3B,QAAAm7B,UAAA,EAAA,EAAAlzD,KAAAoL,OAAAxH,MAAA5D,KAAAoL,OAAAvH,QAOA7D,KAAA+3B,QAAA8vC,KAAA/+B,EAAA++B,KACA7nE,KAAA+3B,QAAAg8B,YAAAjrB,EAAAkrB,OACAh0D,KAAA+3B,QAAA4f,UAAA7O,EAAAi/B,gBACA/nE,KAAA+3B,QAAAuwC,aAAAx/B,EAAAw/B,aACAtoE,KAAA+3B,QAAAwwC,SAAAz/B,EAAAy/B,SACAvoE,KAAA+3B,QAAAywC,WAAA1/B,EAAA0/B,UAEA,IAAAU,GACAC,CAEA,IAAArgC,EAAAo/B,WACA,CACAp/B,EAAAu/B,eAAA,GACAroE,KAAA+3B,QAAAqxC,YAAAtgC,EAAA8+B,gBACA5nE,KAAA+3B,QAAAsxC,WAAAvgC,EAAAu/B,gBAEAroE,KAAA+3B,QAAAk7B,UAAAnqB,EAAA8+B,eAGA,IAAA0B,GAAA9zD,KAAAogC,IAAA9M,EAAAq/B,iBAAAr/B,EAAAs/B,mBACAmB,EAAA/zD,KAAAmgC,IAAA7M,EAAAq/B,iBAAAr/B,EAAAs/B,kBAEA,KAAAznE,EAAA,EAAAA,EAAA+nE,EAAA1nE,OAAAL,IAEAuoE,EAAApgC,EAAAi/B,gBAAA,EACAoB,EAAArgC,EAAAi/B,gBAAA,EAAApnE,EAAAqoE,EAAAH,EAAAW,OAEA,UAAA1gC,EAAAg/B,MAEAoB,GAAAN,EAAAD,EAAAhoE,GAEA,WAAAmoC,EAAAg/B,QAEAoB,IAAAN,EAAAD,EAAAhoE,IAAA,GAGAmoC,EAAAmU,MAEAj9C,KAAA+3B,QAAA0xC,SAAAf,EAAA/nE,GAAAuoE,EAAAI,EAAAH,EAAAI,EAAAvpE,KAAAunE,OAAAvoB,SASA,IAHAh/C,KAAA+3B,QAAAk7B,UAAAnqB,EAAAmU,KAGAt8C,EAAA,EAAAA,EAAA+nE,EAAA1nE,OAAAL,IAEAuoE,EAAApgC,EAAAi/B,gBAAA,EACAoB,EAAArgC,EAAAi/B,gBAAA,EAAApnE,EAAAqoE,EAAAH,EAAAW,OAEA,UAAA1gC,EAAAg/B,MAEAoB,GAAAN,EAAAD,EAAAhoE,GAEA,WAAAmoC,EAAAg/B,QAEAoB,IAAAN,EAAAD,EAAAhoE,IAAA,GAGAmoC,EAAAkrB,QAAAlrB,EAAAi/B,iBAEA/nE,KAAA+3B,QAAA2xC,WAAAhB,EAAA/nE,GAAAuoE,EAAAC,EAAAnpE,KAAAunE,OAAAvoB,SAGAlW,EAAAmU,MAEAj9C,KAAA+3B,QAAA0xC,SAAAf,EAAA/nE,GAAAuoE,EAAAC,EAAAnpE,KAAAunE,OAAAvoB,QAIAh/C,MAAAwwD,iBAQAlK,EAAAzjD,UAAA2tD,cAAA,WAEA,GAAAvsD,GAAAjE,KAAAswD,QAEArsD,GAAA65C,YAAAqZ,WAAA,EACAlzD,EAAA65C,YAAArO,WAAAzvC,KAAAyvC,WAEAxrC,EAAA65C,YAAAl6C,MAAA5D,KAAAoL,OAAAxH,MAAA5D,KAAAyvC,WACAxrC,EAAA65C,YAAAj6C,OAAA7D,KAAAoL,OAAAvH,OAAA7D,KAAAyvC,WACAxrC,EAAA0sD,KAAA/sD,MAAAK,EAAA2sD,OAAAhtD,MAAA5D,KAAAoL,OAAAxH,MAAA5D,KAAAyvC,WACAxrC,EAAA0sD,KAAA9sD,OAAAI,EAAA2sD,OAAA/sD,OAAA7D,KAAAoL,OAAAvH,OAAA7D,KAAAyvC,WAEAxrC,EAAAmhB,KAAAzQ,EAAA,EACA1Q,EAAAmhB,KAAAtN,GAAA9X,KAAAunE,OAAAvoB,QAEA/6C,EAAAmhB,KAAAxhB,MAAAK,EAAA2sD,OAAAhtD,MACAK,EAAAmhB,KAAAvhB,OAAAI,EAAA2sD,OAAA/sD,OAAA,EAAA7D,KAAAunE,OAAAvoB,QAEAh/C,KAAAkxC,OAAAlxC,KAAAoL,OAAAxH,MAAA5D,KAAAyvC,WACAzvC,KAAAmxC,QAAAnxC,KAAAoL,OAAAvH,OAAA7D,KAAAyvC,WAEAxrC,EAAA65C,YAAA12B,KAAA,SAAAnjB,EAAA65C,aAEA99C,KAAA+J,OAAA,GAQAu8C,EAAAzjD,UAAA6wC,YAAA,SAAA7K,GAEA7oC,KAAA+J,OAIA/J,KAAA2nE,aAGAzhB,EAAArjD,UAAA6wC,YAAA3yC,KAAAf,KAAA6oC,IASAyd,EAAAzjD,UAAA0xC,cAAA,SAAA1L,GAEA7oC,KAAA+J,OAIA/J,KAAA2nE,aAGAzhB,EAAArjD,UAAA0xC,cAAAxzC,KAAAf,KAAA6oC,IASAyd,EAAAzjD,UAAAimE,wBAAA,SAAAa,GAEA,GAAAzd,GAAA5F,EAAAkhB,oBAAAmC,EAEA,KAAAzd,EACA,CACAA,IAEA,IAAA9gD,GAAAk7C,EAAAmhB,qBACA1vC,EAAAuuB,EAAAohB,qBAEA3vC,GAAA8vC,KAAA8B,CAEA,IAAA/lE,GAAA4R,KAAA2mC,KAAApkB,EAAAgxC,YAAA,QAAAnlE,OACAgmE,EAAAp0D,KAAA2mC,KAAApkB,EAAAgxC,YAAA,KAAAnlE,OACAC,EAAA,EAAA+lE,CAEAA,GAAA,IAAAA,EAAA,EAEAx+D,EAAAxH,MAAAA,EACAwH,EAAAvH,OAAAA,EAEAk0B,EAAAk7B,UAAA,OACAl7B,EAAAo7B,SAAA,EAAA,EAAAvvD,EAAAC,GAEAk0B,EAAA8vC,KAAA8B,EAEA5xC,EAAAuwC,aAAA,aACAvwC,EAAAk7B,UAAA,OACAl7B,EAAA0xC,SAAA,OAAA,EAAAG,EAEA,IAIAjpE,GAAA+oB,EAJAmgD,EAAA9xC,EAAAw+B,aAAA,EAAA,EAAA3yD,EAAAC,GAAAvB,KACAk0D,EAAAqT,EAAA7oE,OACA8oE,EAAA,EAAAlmE,EAIAya,EAAA,EACA2V,GAAA,CAGA,KAAArzB,EAAA,EAAAipE,EAAAjpE,EAAAA,IACA,CACA,IAAA+oB,EAAA,EAAAogD,EAAApgD,EAAAA,GAAA,EAEA,GAAA,MAAAmgD,EAAAxrD,EAAAqL,GACA,CACAsK,GAAA,CACA,OAGA,GAAAA,EAMA,KAJA3V,IAAAyrD,EAcA,IANA5d,EAAAsd,OAAAI,EAAAjpE,EAEA0d,EAAAm4C,EAAAsT,EACA91C,GAAA,EAGArzB,EAAAkD,EAAAlD,EAAAipE,EAAAjpE,IACA,CACA,IAAA+oB,EAAA,EAAAogD,EAAApgD,EAAAA,GAAA,EAEA,GAAA,MAAAmgD,EAAAxrD,EAAAqL,GACA,CACAsK,GAAA,CACA,OAGA,GAAAA,EAMA,KAJA3V,IAAAyrD,EAQA5d,EAAA6d,QAAAppE,EAAAipE,EACA1d,EAAA+c,SAAA/c,EAAAsd,OAAAtd,EAAA6d,QAEAzjB,EAAAkhB,oBAAAmC,GAAAzd,EAGA,MAAAA,IAUA5F,EAAAzjD,UAAAmlE,SAAA,SAAApkC,GAOA,IAAA,GAHAtvB,GAAA,GACAo0D,EAAA9kC,EAAAj0B,MAAA,MACAs4D,EAAAjoE,KAAAunE,OAAAU,cACAtnE,EAAA,EAAAA,EAAA+nE,EAAA1nE,OAAAL,IACA,CAGA,IAAA,GAFAqpE,GAAA/B,EACAgC,EAAAvB,EAAA/nE,GAAAgP,MAAA,KACA+Z,EAAA,EAAAA,EAAAugD,EAAAjpE,OAAA0oB,IACA,CACA,GAAAwgD,GAAAlqE,KAAA+3B,QAAAgxC,YAAAkB,EAAAvgD,IAAA9lB,MACAumE,EAAAD,EAAAlqE,KAAA+3B,QAAAgxC,YAAA,KAAAnlE,KACA,KAAA8lB,GAAAygD,EAAAH,GAIAtgD,EAAA,IAEApV,GAAA,MAEAA,GAAA21D,EAAAvgD,GACAsgD,EAAA/B,EAAAiC,IAIAF,GAAAG,EACA71D,GAAA,IAAA21D,EAAAvgD,IAIA/oB,EAAA+nE,EAAA1nE,OAAA,IAEAsT,GAAA,MAGA,MAAAA,IASAgyC,EAAAzjD,UAAAyoC,UAAA,SAAA2K,GAOA,MALAj2C,MAAA+J,OAEA/J,KAAA2nE,aAGAzhB,EAAArjD,UAAAyoC,UAAAvqC,KAAAf,KAAAi2C,IAQAqQ,EAAAzjD,UAAA0C,QAAA,SAAAm/D,GAGA1kE,KAAA+3B,QAAA,KACA/3B,KAAAoL,OAAA,KAEApL,KAAAunE,OAAA,KAEAvnE,KAAAswD,SAAA/qD,QAAA2C,SAAAw8D,GAAA,EAAAA,MAGA7tB,WAAA,GAAAnC,UAAA,GAAA01B,oBAAA,GAAA/qB,sBAAA,IAAAzK,WAAA,MAAAy1B,IAAA,SAAA3pE,EAAAjB,EAAAD,GAqDA,QAAAgnD,GAAA3d,EAAAjlC,EAAAC,EAAA0uC,EAAA9C,GAEA,IAAA5G,EAEA,KAAA,IAAAjoC,OAAA,qFAuCA,IApCA2lD,EAAAxlD,KAAAf,KAAA,KAAAuyC,GAEAvyC,KAAA4D,MAAAA,GAAA,IACA5D,KAAA6D,OAAAA,GAAA,IAEA7D,KAAAyvC,WAAAA,GAAA1C,EAAAuC,WACAtvC,KAAAuyC,UAAAA,GAAAxF,EAAAqC,YAAA/M,QACAriC,KAAAm3D,WAAA,EAmBAn3D,KAAA0yC,OAAA,KAOA1yC,KAAA6oC,SAAAA,EAGA7oC,KAAA6oC,SAAAxmC,OAAA0qC,EAAAO,cAAAE,MACA,CACA,GAAAprC,GAAApC,KAAA6oC,SAAAzmC,EAEApC,MAAAsqE,cAAA,GAAAzjB,GAAAzkD,EAAApC,KAAA4D,MAAA5D,KAAA6D,OAAA7D,KAAAuyC,UAAAvyC,KAAAyvC,YACAzvC,KAAAuwD,YAAAnuD,EAAAkJ,IAAAtL,KAAAsqE,cAAArmE,QAGAjE,KAAAg0C,cAAA,GAAAikB,GAAAj4D,KAAA6oC,UACA7oC,KAAAg0C,cAAAyM,kBACAzgD,KAAAg0C,cAAA3uC,OAAAzB,EAAAC,GACA7D,KAAA0yC,OAAA1yC,KAAA0zC,YAGA1zC,KAAA6oC,SAAAiL,gBAAAtpC,QACAxK,KAAA6oC,SAAA2vB,qBAAAx4D,KAAA6oC,SAAA2vB,oBAAAtuD,eAKAlK,MAAA0yC,OAAA1yC,KAAAw0C,aACAx0C,KAAAsqE,cAAA,GAAA7xB,GAAAz4C,KAAA4D,MAAA5D,KAAAyvC,WAAAzvC,KAAA6D,OAAA7D,KAAAyvC,YACAzvC,KAAAwH,OAAAxH,KAAAsqE,cAAAl/D,MAMApL,MAAAukE,OAAA,EA3HA,GAAAhe,GAAA7lD,EAAA,iBACAgD,EAAAhD,EAAA,aACAmmD,EAAAnmD,EAAA,yCACAu3D,EAAAv3D,EAAA,6CACA+3C,EAAA/3C,EAAA,0CACAiwC,EAAAjwC,EAAA,WACAqsC,EAAArsC,EAAA,YACAwuD,EAAA,GAAAve,GAAAG,OACAy5B,EAAA,GAAA55B,GAAAqC,SAuHAwT,GAAA3jD,UAAA0M,OAAA/L,OAAA+iD,EAAA1jD,WACA2jD,EAAA3jD,UAAAmH,YAAAw8C,EACA/mD,EAAAD,QAAAgnD,EASAA,EAAA3jD,UAAAwC,OAAA,SAAAzB,EAAAC,IAEAD,IAAA5D,KAAA4D,OAAAC,IAAA7D,KAAA6D,UAKA7D,KAAAukE,MAAA3gE,EAAA,GAAAC,EAAA,EAEA7D,KAAA4D,MAAAA,EACA5D,KAAA6D,OAAAA,EAEA7D,KAAAukE,QAKAvkE,KAAAsqE,cAAAjlE,OAAArF,KAAA4D,MAAA5D,KAAA6D,QAEA7D,KAAAg0C,eAEAh0C,KAAAg0C,cAAA3uC,OAAArF,KAAA4D,MAAA5D,KAAA6D,WAQA2iD,EAAA3jD,UAAAkC,MAAA,SAAA89D,GAEA7iE,KAAAukE,QAKAvkE,KAAA6oC,SAAAxmC,OAAA0qC,EAAAO,cAAAE,OAEAxtC,KAAA6oC,SAAAzmC,GAAA+C,gBAAAnF,KAAA6oC,SAAAzmC,GAAAgC,YAAApE,KAAAsqE,cAAA3H,aAGA3iE,KAAAsqE,cAAAvlE,OAAA,EAAA89D,KAaArc,EAAA3jD,UAAA6wC,YAAA,SAAA4Z,EAAArjB,EAAAgM,EAAAlxC,EAAA4tC,GAEA,GAAA3yC,KAAAukE,MAAA,CAgBA,GAVA5xB,EAAAzqC,SAAAyqC,EAAAA,GAAA,EAEA3yC,KAAAsqE,cAAA7tD,UAAAw5B,EAGAj2C,KAAAsqE,cAAApgE,WAGA+/B,EAAA2I,WAAA,EAEAD,EACA,CAGA1I,EAAAiB,eAAA53B,WAEA22B,EAAAugC,cAAA,IAGA,IACA7pE,GAAA+oB,EADA2f,EAAAY,EAAAZ,QAGA,KAAA1oC,EAAA,EAAA+oB,EAAA2f,EAAAroC,OAAA0oB,EAAA/oB,IAAAA,EAEA0oC,EAAA1oC,GAAAgyC,kBAIA43B,EAAA3mE,MAAA0pD,EAAAzpD,OACA0mE,EAAA1mE,OAAAypD,EAAA1pD,KAGA,IAAAi5D,GAAA78D,KAAA6oC,SAAAmL,aAEAh0C,MAAA6oC,SAAAmL,cAAAh0C,KAAAg0C,cAGAh0C,KAAAsqE,cAAApgE,SAAAojD,EAAAid,GACA39D,QAAAc,IAAAu8B,GACAjqC,KAAA6oC,SAAAuqB,oBAAAnpB,EAAAjqC,KAAAsqE,cAAAvlE,GAGA/E,KAAA6oC,SAAAmL,cAAA6oB,IAYArW,EAAA3jD,UAAA2xC,aAAA,SAAA8Y,EAAArjB,EAAAgM,EAAAlxC,EAAA4tC,GAEA,GAAA3yC,KAAAukE,MAAA,CAKA5xB,IAAAA,CAEA,IAAA1H,GAAAikB,CAEAjkB,GAAA33B,WAEA2iC,GAEAhL,EAAA0e,OAAA1T,GAIAhL,EAAAE,IAAAmiB,EAAA34C,EACAs2B,EAAAG,IAAAkiB,EAAAx1C,CAEA,IAAA2yD,GAAAxgC,EAAAiB,cAEAjB,GAAAiB,eAAAD,EAGAhB,EAAA2I,WAAA,CAGA,IACAjyC,GAAA+oB,EADA2f,EAAAY,EAAAZ,QAGA,KAAA1oC,EAAA,EAAA+oB,EAAA2f,EAAAroC,OAAA0oB,EAAA/oB,IAAAA,EAEA0oC,EAAA1oC,GAAAgyC,iBAGA5tC,IAEA/E,KAAAsqE,cAAAvlE,OAKA,IAAAgzB,GAAA/3B,KAAAsqE,cAAAvyC,QAEA2yC,EAAA1qE,KAAA6oC,SAAA4G,UAEAzvC,MAAA6oC,SAAA4G,WAAAzvC,KAAAyvC,WAEAzvC,KAAA6oC,SAAAuqB,oBAAAnpB,EAAAlS,GAEA/3B,KAAA6oC,SAAA4G,WAAAi7B,EAEAzgC,EAAAiB,iBAAAD,IAGAhB,EAAAiB,eAAAu/B,KAUAjkB,EAAA3jD,UAAA0C,QAAA,WAEA7B,EAAAb,UAAA0C,QAAAxE,KAAAf,MAAA,GAEAA,KAAAsqE,cAAA/kE,UAGAvF,KAAAg0C,eAEAh0C,KAAAg0C,cAAAzuC,UAGAvF,KAAA6oC,SAAA,MAQA2d,EAAA3jD,UAAA8nE,SAAA,SAAArd,GAEA,GAAAsd,GAAA,GAAAlrC,MAEA,OADAkrC,GAAAx9D,IAAApN,KAAA6qE,UAAAvd,GACAsd,GAQApkB,EAAA3jD,UAAAgoE,UAAA,SAAAvd,GAEA,MAAAttD,MAAA8qE,UAAAxd,GAAA2I,aAQAzP,EAAA3jD,UAAAioE,UAAA,SAAAxd,GAIA,GAAAttD,KAAA6oC,SAAAxmC,OAAA0qC,EAAAO,cAAAE,MACA,CACA8f,IAEAA,EAAAid,EACAjd,EAAA1pD,MAAA5D,KAAAsqE,cAAAv/D,KAAAnH,MACA0pD,EAAAzpD,OAAA7D,KAAAsqE,cAAAv/D,KAAAlH,OAGA,IAAAD,GAAA0pD,EAAA1pD,MAAA5D,KAAAyvC,WACA5rC,EAAAypD,EAAAzpD,OAAA7D,KAAAyvC,WAEArtC,EAAApC,KAAA6oC,SAAAzmC,GAEA2oE,EAAA,GAAAC,YAAA,EAAApnE,EAAAC,EAEAzB,GAAA+C,gBAAA/C,EAAAgC,YAAApE,KAAAsqE,cAAA3H,aACAvgE,EAAA6oE,WAAA3d,EAAA34C,EAAA3U,KAAAyvC,WAAA6d,EAAAx1C,EAAA9X,KAAAyvC,WAAA7rC,EAAAC,EAAAzB,EAAAkF,KAAAlF,EAAAmF,cAAAwjE,GACA3oE,EAAA+C,gBAAA/C,EAAAgC,YAAA,KAEA,IAAA8mE,GAAA,GAAAzyB,GAAA70C,EAAAC,GACAsnE,EAAAD,EAAAnzC,QAAAw+B,aAAA,EAAA,EAAA3yD,EAAAC,EAKA,OAJAsnE,GAAA7oE,KAAA4N,IAAA66D,GAEAG,EAAAnzC,QAAA0+B,aAAA0U,EAAA,EAAA,GAEAD,EAAA9/D,OAWA,GAPAkiD,IAEAA,EAAAid,EACAjd,EAAA1pD,MAAA5D,KAAAsqE,cAAAl/D,OAAAxH,MACA0pD,EAAAzpD,OAAA7D,KAAAsqE,cAAAl/D,OAAAvH,QAGAypD,EAAA1pD,QAAA5D,KAAAsqE,cAAAl/D,OAAAxH,OACA0pD,EAAAzpD,SAAA7D,KAAAsqE,cAAAl/D,OAAAvH,OAEA,MAAA7D,MAAAsqE,cAAAl/D,MAKA,IAAAqkC,GAAAzvC,KAAAyvC,WAEAy7B,EAAA,GAAAzyB,GAAA6U,EAAA1pD,MAAA6rC,EAAA6d,EAAAzpD,OAAA4rC,GACA07B,EAAAnrE,KAAAsqE,cAAAvyC,QAAAw+B,aAAAjJ,EAAA34C,EAAA86B,EAAA6d,EAAAx1C,EAAA23B,EAAA6d,EAAA1pD,MAAA6rC,EAAA6d,EAAAzpD,OAAA4rC,EAIA,OAFAy7B,GAAAnzC,QAAA0+B,aAAA0U,EAAA,EAAA,GAEAD,EAAA9/D,QAUAo7C,EAAA3jD,UAAAuoE,UAAA,SAAA9d,GAEAA,IAEAA,EAAAid,EACAjd,EAAA1pD,MAAA5D,KAAAsqE,cAAAv/D,KAAAnH,MACA0pD,EAAAzpD,OAAA7D,KAAAsqE,cAAAv/D,KAAAlH,OAGA,IAAAD,GAAA0pD,EAAA1pD,MAAA5D,KAAAyvC,WACA5rC,EAAAypD,EAAAzpD,OAAA7D,KAAAyvC,UAEA,IAAAzvC,KAAA6oC,SAAAxmC,OAAA0qC,EAAAO,cAAAE,MACA,CACA,GAAAprC,GAAApC,KAAA6oC,SAAAzmC,GAEA2oE,EAAA,GAAAC,YAAA,EAAApnE,EAAAC,EAMA,OAJAzB,GAAA+C,gBAAA/C,EAAAgC,YAAApE,KAAAsqE,cAAA3H,aACAvgE,EAAA6oE,WAAA3d,EAAA34C,EAAA3U,KAAAyvC,WAAA6d,EAAAx1C,EAAA9X,KAAAyvC,WAAA7rC,EAAAC,EAAAzB,EAAAkF,KAAAlF,EAAAmF,cAAAwjE,GACA3oE,EAAA+C,gBAAA/C,EAAAgC,YAAA,MAEA2mE,EAIA,MAAA/qE,MAAAsqE,cAAAl/D,OAAAC,WAAA,MAAAkrD,aAAAjJ,EAAA34C,EAAA3U,KAAAyvC,WAAA6d,EAAAx1C,EAAA9X,KAAAyvC,WAAA7rC,EAAAC,GAAAvB,MAWAkkD,EAAA3jD,UAAAwoE,SAAA,SAAA/d,EAAA34C,EAAAmD,GAaA,MAXAyyD,GAAA51D,EAAAA,EACA41D,EAAAzyD,EAAAA,EACAyyD,EAAA3mE,MAAA,EAAA5D,KAAAyvC,WACA86B,EAAA1mE,OAAA,EAAA7D,KAAAyvC,WAEA6d,IAEAid,EAAA51D,GAAA24C,EAAA34C,EACA41D,EAAAzyD,GAAAw1C,EAAAx1C,GAGA9X,KAAAorE,UAAAb,MAGA1zB,WAAA,GAAAnC,UAAA,GAAAyK,yCAAA,GAAAmsB,4CAAA,GAAAC,wCAAA,GAAAC,gBAAA,IAAAC,YAAA,MAAAC,KAAA,SAAAhrE,EAAAjB,EAAAD,GAcA,QAAA+mD,GAAA/+C,EAAA+qC,EAAA9C,GAEAzX,EAAAj3B,KAAAf,MAEAA,KAAAq3D,IAAAxsB,EAAAwsB,MAOAr3D,KAAAyvC,WAAAA,GAAA,EAQAzvC,KAAA4D,MAAA,IAQA5D,KAAA6D,OAAA,IAUA7D,KAAA2rE,UAAA,IAOA3rE,KAAA4rE,WAAA,IASA5rE,KAAAuyC,UAAAA,GAAAxF,EAAAqC,YAAA/M,QAUAriC,KAAAm3D,WAAA,EAYAn3D,KAAA6rE,WAAA,EAUA7rE,KAAAwH,OAAA,KAQAxH,KAAA63D,oBAAA,EAKA73D,KAAA8rE,SAAA,KAOA9rE,KAAA+rE,cAAA,EAWA/rE,KAAAoH,QAAA,EAQApH,KAAAuwD,eACAvwD,KAAAgsE,SAAA,EACAhsE,KAAAsmE,IAAA,EAGA9+D,GAEAxH,KAAAisE,WAAAzkE,GAhJA,GAAAqjC,GAAAnqC,EAAA,YACAqsC,EAAArsC,EAAA,YACAs3B,EAAAt3B,EAAA,gBAkKA6lD,GAAA1jD,UAAA0M,OAAA/L,OAAAw0B,EAAAn1B,WACA0jD,EAAA1jD,UAAAmH,YAAAu8C,EACA9mD,EAAAD,QAAA+mD,EAOAA,EAAA1jD,UAAA8mC,OAAA,WAEA3pC,KAAA2rE,UAAA3rE,KAAAwH,OAAA0kE,cAAAlsE,KAAAwH,OAAA5D,MACA5D,KAAA4rE,WAAA5rE,KAAAwH,OAAA2kE,eAAAnsE,KAAAwH,OAAA3D,OAEA7D,KAAA4D,MAAA5D,KAAA2rE,UAAA3rE,KAAAyvC,WACAzvC,KAAA6D,OAAA7D,KAAA4rE,WAAA5rE,KAAAyvC,WAEAzvC,KAAA+rE,aAAAlhC,EAAAkhC,aAAA/rE,KAAA2rE,UAAA3rE,KAAA4rE,YAEA5rE,KAAAonB,KAAA,SAAApnB,OA0BAumD,EAAA1jD,UAAAopE,WAAA,SAAAzkE,GAEA,GAAA4kE,GAAApsE,KAAA6rE,SAaA,IAZA7rE,KAAAm3D,WAAA,EACAn3D,KAAA6rE,WAAA,EAEAO,GAAApsE,KAAAwH,SAEAxH,KAAAwH,OAAAw3B,OAAA,KACAh/B,KAAAwH,OAAAq3B,QAAA,MAGA7+B,KAAAwH,OAAAA,GAGAxH,KAAAwH,OAAA+1B,UAAAv9B,KAAAwH,OAAA6D,aAAArL,KAAAwH,OAAA5D,OAAA5D,KAAAwH,OAAA3D,OAEA7D,KAAAqsE,oBAEA,KAAA7kE,EAAA6D,WACA,CAGArL,KAAA6rE,WAAA,CAEA,IAAAS,GAAAtsE,IAEAwH,GAAAw3B,OAAA,WAEAx3B,EAAAw3B,OAAA,KACAx3B,EAAAq3B,QAAA,KAEAytC,EAAAT,YAKAS,EAAAT,WAAA,EACAS,EAAAD,gBAEAC,EAAAllD,KAAA,SAAAklD,KAGA9kE,EAAAq3B,QAAA,WAEAr3B,EAAAw3B,OAAA,KACAx3B,EAAAq3B,QAAA,KAEAytC,EAAAT,YAKAS,EAAAT,WAAA,EACAS,EAAAllD,KAAA,QAAAklD,KAOA9kE,EAAA+1B,UAAA/1B,EAAA4F,MAEApN,KAAA6rE,WAAA,EAGArkE,EAAAw3B,OAAA,KACAx3B,EAAAq3B,QAAA,KAEAr3B,EAAA5D,OAAA4D,EAAA3D,QAEA7D,KAAAqsE,gBAGAD,GAEApsE,KAAAonB,KAAA,SAAApnB,OAMAosE,GAEApsE,KAAAonB,KAAA,QAAApnB,SAaAumD,EAAA1jD,UAAAwpE,cAAA,WAEArsE,KAAAm3D,WAAA,EACAn3D,KAAA2pC,UAOA4c,EAAA1jD,UAAA0C,QAAA,WAEAvF,KAAA8rE,gBAEAjhC,GAAA0hC,iBAAAvsE,KAAA8rE,gBACAjhC,GAAAg6B,aAAA7kE,KAAA8rE,UAEA9rE,KAAA8rE,SAAA,KAEA/rC,UAAAC,aAEAhgC,KAAAwH,OAAA4F,IAAA,KAGApN,KAAAwH,QAAAxH,KAAAwH,OAAAglE,eAEA3hC,GAAA0hC,iBAAAvsE,KAAAwH,OAAAglE,SAGAxsE,KAAAwH,OAAA,KAEAxH,KAAAysE,WASAlmB,EAAA1jD,UAAA4pE,QAAA,WAEAzsE,KAAAonB,KAAA,UAAApnB,OAYAumD,EAAA1jD,UAAA6pE,kBAAA,SAAAC,GAEA3sE,KAAAwH,OAAA4F,IAAAu/D,EAEA3sE,KAAAisE,WAAAjsE,KAAAwH,SAaA++C,EAAAue,UAAA,SAAAgH,EAAA9G,EAAAzyB,GAEA,GAAAuL,GAAAjT,EAAA0hC,iBAAAT,EAOA,IALA5jE,SAAA88D,GAAA,IAAA8G,EAAA3/C,QAAA,WAEA64C,GAAA,IAGAlnB,EACA,CAGA,GAAA8sB,GAAA,GAAAlrC,MACAslC,KAEA4F,EAAAjuC,YAAA,IAGAmhB,EAAA,GAAAyI,GAAAqkB,EAAAr4B,GACAuL,EAAAguB,SAAAA,EAEAlB,EAAAx9D,IAAA0+D,EAEAjhC,EAAA0hC,iBAAAT,GAAAhuB,EAGAA,EAAArO,WAAA5E,EAAA+hC,mBAAAd,GAGA,MAAAhuB,IAWAyI,EAAA1I,WAAA,SAAAzyC,EAAAmnC,GAEAnnC,EAAAohE,UAEAphE,EAAAohE,QAAA,UAAA3hC,EAAAwsB,MAGA,IAAAvZ,GAAAjT,EAAA0hC,iBAAAnhE,EAAAohE,QAQA,OANA1uB,KAEAA,EAAA,GAAAyI,GAAAn7C,EAAAmnC,GACA1H,EAAA0hC,iBAAAnhE,EAAAohE,SAAA1uB,GAGAA,KAGAjH,WAAA,GAAAjC,WAAA,IAAApY,cAAA,KAAAqwC,KAAA,SAAAnsE,EAAAjB,EAAAD,GAiDA,QAAAoxC,GAAAk8B,EAAAxf,GAEA,IAAAzkB,SAEA,KAAA,IAAAjoC,OAAA,iFAQA8C,GAAA3C,KAAAf,KACA8sE,EACAxf,GAMAttD,KAAAukE,OAAA,EAEAvkE,KAAA+sE,aAtEA,GAAAvmB,GAAA9lD,EAAA,uBACAgD,EAAAhD,EAAA,aACAiwC,EAAAjwC,EAAA,UACAA,GAAA,YACA,GAAAiwC,GAAAG,MAqEAF,GAAA/tC,UAAA0M,OAAA/L,OAAAE,EAAAb,WACA+tC,EAAA/tC,UAAAmH,YAAA4mC,EACAnxC,EAAAD,QAAAoxC,EASAA,EAAA/tC,UAAAwC,OAAA,SAAAzB,EAAAC,EAAAmpE,GAIAhtE,KAAAukE,MAAA3gE,EAAA,GAAAC,EAAA,EAEA7D,KAAA4wD,OAAAhtD,MAAA5D,KAAA2wD,KAAA/sD,MAAAA,EACA5D,KAAA4wD,OAAA/sD,OAAA7D,KAAA2wD,KAAA9sD,OAAAA,EAEAmpE,GAEAhtE,KAAA89C,YAAAz4C,OAAAzB,EAAAC,GAGA7D,KAAA+sE,cAOAn8B,EAAA/tC,UAAAkC,MAAA,WAEA/E,KAAAukE,OAKAvkE,KAAA89C,YAAA/4C,MAAA/E,KAAAstD,QAcA1c,EAAA/tC,UAAA6vC,OAAA,SAAAzI,EAAAgM,EAAAlxC,EAAA4tC,GAEA3yC,KAAAukE,OAKAvkE,KAAA89C,YAAApL,OAAA1yC,KAAAstD,MAAArjB,EAAAgM,EAAAlxC,EAAA4tC,IAQA/B,EAAA/tC,UAAA8nE,SAAA,WAEA,MAAA3qE,MAAA89C,YAAA6sB,SAAA3qE,KAAAstD,QAQA1c,EAAA/tC,UAAAgoE,UAAA,WAEA,MAAA7qE,MAAA6qE,UAAAF,SAAA3qE,KAAAstD,QAQA1c,EAAA/tC,UAAAioE,UAAA,WAEA,MAAA9qE,MAAA89C,YAAAgtB,UAAA9qE,KAAAstD,QAQA1c,EAAA/tC,UAAAuoE,UAAA,WAEA,MAAAprE,MAAA89C,YAAAstB,UAAAprE,KAAAstD,QAUA1c,EAAA/tC,UAAAwoE,SAAA,SAAA12D,EAAAmD,GAEA,MAAA9X,MAAA89C,YAAAutB,SAAArrE,KAAAstD,MAAA34C,EAAAmD,IAGA84B,EAAAptC,OAAA,SAAAqlC,EAAAjlC,EAAAC,EAAA0uC,EAAA9C,GAEA,MAAA,IAAAmB,GAAA,GAAA4V,GAAA3d,EAAAjlC,EAAAC,EAAA0uC,EAAA9C,OAIAoH,WAAA,GAAAnC,UAAA,GAAAu4B,sBAAA,GAAAxB,YAAA,MAAAyB,KAAA,SAAAxsE,EAAAjB,EAAAD,GA4BA,QAAAkE,GAAAo6C,EAAAwP,EAAAqD,EAAAvrC,EAAAqkC,GAEAzxB,EAAAj3B,KAAAf,MAOAA,KAAAmtE,SAAA,EAEA7f,IAEAttD,KAAAmtE,SAAA,EACA7f,EAAA,GAAA3c,GAAAqC,UAAA,EAAA,EAAA,EAAA,IAGA8K,YAAAp6C,KAEAo6C,EAAAA,EAAAA,aAQA99C,KAAA89C,YAAAA,EAQA99C,KAAA4wD,OAAAtD,EAOAttD,KAAAolB,KAAAA,EAOAplB,KAAAukE,OAAA,EAOAvkE,KAAAotE,gBAAA,EAQAptE,KAAAgxD,KAAA,KAOAhxD,KAAA4D,MAAA,EAOA5D,KAAA6D,OAAA,EAQA7D,KAAA2wD,KAAAA,GAAArD,EAQAttD,KAAAypD,SAAAA,EAEA3L,EAAAqZ,WAEAn3D,KAAAmtE,UAEA7f,EAAA,GAAA3c,GAAAqC,UAAA,EAAA,EAAA8K,EAAAl6C,MAAAk6C,EAAAj6C,QAGAi6C,EAAA92B,GAAA,SAAAhnB,KAAAqtE,qBAAArtE,OAEAA,KAAAstD,MAAAA,GAIAxP,EAAA72B,KAAA,SAAAjnB,KAAAstE,oBAAAttE,MAxIA,GAAAumD,GAAA7lD,EAAA,iBACA+lD,EAAA/lD,EAAA,sBACAgmD,EAAAhmD,EAAA,gBACAs3B,EAAAt3B,EAAA,iBACAiwC,EAAAjwC,EAAA,WACAmqC,EAAAnqC,EAAA,WA+IAgD,GAAAb,UAAA0M,OAAA/L,OAAAw0B,EAAAn1B,WACAa,EAAAb,UAAAmH,YAAAtG,EACAjE,EAAAD,QAAAkE,EAEA6L,OAAAwhC,iBAAArtC,EAAAb,WAOAyqD,OACAt9C,IAAA,WAEA,MAAAhQ,MAAA4wD,QAEA1gD,IAAA,SAAAo9C,GASA,GAPAttD,KAAA4wD,OAAAtD,EAEAttD,KAAAmtE,SAAA,EAEAntE,KAAA4D,MAAA0pD,EAAA1pD,MACA5D,KAAA6D,OAAAypD,EAAAzpD,QAEA7D,KAAAolB,OAAAplB,KAAAypD,SAAA6D,EAAA34C,EAAA24C,EAAA1pD,MAAA5D,KAAA89C,YAAAl6C,OAAA0pD,EAAAx1C,EAAAw1C,EAAAzpD,OAAA7D,KAAA89C,YAAAj6C,QAEA,KAAA,IAAAjD,OAAA,wEAAAZ,KAIAA,MAAAukE,MAAAjX,GAAAA,EAAA1pD,OAAA0pD,EAAAzpD,QAAA7D,KAAA89C,YAAAqZ,UAEAn3D,KAAAolB,MAEAplB,KAAA4D,MAAA5D,KAAAolB,KAAAxhB,MACA5D,KAAA6D,OAAA7D,KAAAolB,KAAAvhB,OACA7D,KAAA4wD,OAAAhtD,MAAA5D,KAAAolB,KAAAxhB,MACA5D,KAAA4wD,OAAA/sD,OAAA7D,KAAAolB,KAAAvhB,QAIA7D,KAAA2wD,KAAArD,EAGAttD,KAAAukE,OAEAvkE,KAAA+sE,iBAUArpE,EAAAb,UAAA8mC,OAAA,WAEA3pC,KAAA89C,YAAAnU,UAQAjmC,EAAAb,UAAAyqE,oBAAA,SAAAxvB,GAGA99C,KAAAmtE,QAEAntE,KAAAstD,MAAA,GAAA3c,GAAAqC,UAAA,EAAA,EAAA8K,EAAAl6C,MAAAk6C,EAAAj6C,QAIA7D,KAAAstD,MAAAttD,KAAA4wD,OAGA5wD,KAAAonB,KAAA,SAAApnB,OAQA0D,EAAAb,UAAAwqE,qBAAA,SAAAvvB,GAEA99C,KAAA4wD,OAAAhtD,MAAAk6C,EAAAl6C,MACA5D,KAAA4wD,OAAA/sD,OAAAi6C,EAAAj6C,OAEA7D,KAAAonB,KAAA,SAAApnB,OAQA0D,EAAAb,UAAA0C,QAAA,SAAAgoE,GAEAvtE,KAAA89C,cAEAyvB,GAEAvtE,KAAA89C,YAAAv4C,UAGAvF,KAAA89C,YAAA52B,IAAA,SAAAlnB,KAAAqtE,qBAAArtE,MACAA,KAAA89C,YAAA52B,IAAA,SAAAlnB,KAAAstE,oBAAAttE,MAEAA,KAAA89C,YAAA,MAGA99C,KAAA4wD,OAAA,KACA5wD,KAAAgxD,KAAA,KACAhxD,KAAAolB,KAAA,KACAplB,KAAA2wD,KAAA,KAEA3wD,KAAAukE,OAAA,EAEAvkE,KAAAknB,IAAA,UAAAlnB,KAAAysE,QAAAzsE,MACAA,KAAAknB,IAAA,SAAAlnB,KAAA2pC,OAAA3pC,OAQA0D,EAAAb,UAAAi2C,MAAA,WAEA,MAAA,IAAAp1C,GAAA1D,KAAA89C,YAAA99C,KAAAstD,MAAAttD,KAAA2wD,KAAA3wD,KAAAolB,KAAAplB,KAAAypD,SAQA/lD,EAAAb,UAAAkqE,WAAA,WAEA/sE,KAAAgxD,OAEAhxD,KAAAgxD,KAAA,GAAAtK,IAGA1mD,KAAAgxD,KAAA9gD,IAAAlQ,KAAA2wD,KAAA3wD,KAAA89C,YAAA99C,KAAAypD,SAaA/lD,EAAAohE,UAAA,SAAAgH,EAAA9G,EAAAzyB,GAEA,GAAAtuC,GAAA4mC,EAAAg6B,aAAAiH,EAQA,OANA7nE,KAEAA,EAAA,GAAAP,GAAA6iD,EAAAue,UAAAgH,EAAA9G,EAAAzyB,IACA1H,EAAAg6B,aAAAiH,GAAA7nE,GAGAA,GAWAP,EAAAihE,UAAA,SAAAC,GAEA,GAAA3gE,GAAA4mC,EAAAg6B,aAAAD,EAEA,KAAA3gE,EAEA,KAAA,IAAArD,OAAA,gBAAAgkE,EAAA,wCAGA,OAAA3gE,IAWAP,EAAAm6C,WAAA,SAAAzyC,EAAAmnC,GAEA,MAAA,IAAA7uC,GAAA6iD,EAAA1I,WAAAzyC,EAAAmnC,KAWA7uC,EAAA8pE,UAAA,SAAAC,EAAAl7B,GAEA,MAAA,gBAAAk7B,GAEA/pE,EAAAgqE,aAAAD,EAAAl7B,GAIA,GAAA7uC,GAAA+iD,EAAA+mB,UAAAC,EAAAl7B,KAYA7uC,EAAAgqE,aAAA,SAAAC,EAAAp7B,GAEA,MAAA,IAAA7uC,GAAA+iD,EAAAmnB,QAAAD,EAAAp7B,KAUA7uC,EAAAmqE,kBAAA,SAAA5pE,EAAAqH,GAEAu/B,EAAAg6B,aAAAv5D,GAAArH,GAUAP,EAAAoqE,uBAAA,SAAAxiE,GAEA,GAAArH,GAAA4mC,EAAAg6B,aAAAv5D,EAKA,cAHAu/B,GAAAg6B,aAAAv5D,SACAu/B,GAAA0hC,iBAAAjhE,GAEArH,GASAP,EAAAuvC,MAAA,GAAAvvC,GAAA,GAAA6iD,MAEA7R,UAAA,GAAAE,WAAA,IAAA42B,gBAAA,IAAAuC,eAAA,IAAAC,qBAAA,IAAAxxC,cAAA,KAAAyxC,KAAA,SAAAvtE,EAAAjB,EAAAD,GASA,QAAAknD,KAEA1mD,KAAAixD,GAAA,EACAjxD,KAAAkxD,GAAA,EAEAlxD,KAAA46C,GAAA,EACA56C,KAAA66C,GAAA,EAEA76C,KAAA86C,GAAA,EACA96C,KAAA+6C,GAAA,EAEA/6C,KAAA0+C,GAAA,EACA1+C,KAAA2+C,GAAA,EAEA3+C,KAAAkuE,WAAA,EACAluE,KAAAmuE,WAAA,EACAnuE,KAAAouE,WAAA,EACApuE,KAAAquE,WAAA,EAEAruE,KAAAumE,WAAA,GAAAlB,aAAA,GAGA5lE,EAAAD,QAAAknD,EASAA,EAAA7jD,UAAAqN,IAAA,SAAAo9C,EAAAghB,EAAA7kB,GAEA,GAAA8kB,GAAAD,EAAA1qE,MACA4qE,EAAAF,EAAAzqE,MAEA4lD,IAEAzpD,KAAAixD,IAAA3D,EAAA34C,EAAA24C,EAAAzpD,QAAA0qE,EACAvuE,KAAAkxD,GAAA5D,EAAAx1C,EAAA02D,EAEAxuE,KAAA46C,IAAA0S,EAAA34C,EAAA24C,EAAAzpD,QAAA0qE,EACAvuE,KAAA66C,IAAAyS,EAAAx1C,EAAAw1C,EAAA1pD,OAAA4qE,EAEAxuE,KAAA86C,GAAAwS,EAAA34C,EAAA45D,EACAvuE,KAAA+6C,IAAAuS,EAAAx1C,EAAAw1C,EAAA1pD,OAAA4qE,EAEAxuE,KAAA0+C,GAAA4O,EAAA34C,EAAA45D,EACAvuE,KAAA2+C,GAAA2O,EAAAx1C,EAAA02D,IAKAxuE,KAAAixD,GAAA3D,EAAA34C,EAAA45D,EACAvuE,KAAAkxD,GAAA5D,EAAAx1C,EAAA02D,EAEAxuE,KAAA46C,IAAA0S,EAAA34C,EAAA24C,EAAA1pD,OAAA2qE,EACAvuE,KAAA66C,GAAAyS,EAAAx1C,EAAA02D,EAEAxuE,KAAA86C,IAAAwS,EAAA34C,EAAA24C,EAAA1pD,OAAA2qE,EACAvuE,KAAA+6C,IAAAuS,EAAAx1C,EAAAw1C,EAAAzpD,QAAA2qE,EAEAxuE,KAAA0+C,GAAA4O,EAAA34C,EAAA45D,EACAvuE,KAAA2+C,IAAA2O,EAAAx1C,EAAAw1C,EAAAzpD,QAAA2qE,GAGAxuE,KAAAumE,WAAA,IAAA,MAAAvmE,KAAAkxD,GAAA,QAAA,GAAA,MAAAlxD,KAAAixD,GAAA,MACAjxD,KAAAumE,WAAA,IAAA,MAAAvmE,KAAA66C,GAAA,QAAA,GAAA,MAAA76C,KAAA46C,GAAA,MACA56C,KAAAumE,WAAA,IAAA,MAAAvmE,KAAA+6C,GAAA,QAAA,GAAA,MAAA/6C,KAAA86C,GAAA,MACA96C,KAAAumE,WAAA,IAAA,MAAAvmE,KAAA2+C,GAAA,QAAA,GAAA,MAAA3+C,KAAA0+C,GAAA,YAGA+vB,KAAA,SAAA/tE,EAAAjB,EAAAD,GAgCA,QAAAinD,GAAAj/C,EAAA+qC,GAEA,IAAA/qC,EAEA,KAAA,IAAA5G,OAAA,uCAMA4G,EAAAknE,aAAAlnE,EAAAmnE,kBAAAnnE,EAAAknE,aAAAlnE,EAAAonE,mBAAApnE,EAAA5D,OAAA4D,EAAA3D,SAEA2D,EAAA+1B,UAAA,GAGAgpB,EAAAxlD,KAAAf,KAAAwH,EAAA+qC,GAQAvyC,KAAA6uE,YAAA,EAEA7uE,KAAA8uE,UAAA9uE,KAAA8uE,UAAA9rE,KAAAhD,MACAA,KAAA+uE,WAAA/uE,KAAA+uE,WAAA/rE,KAAAhD,MAEAwH,EAAA+1B,WAEA/1B,EAAAm4B,iBAAA,UAAA3/B,KAAA+uE,YACAvnE,EAAAm4B,iBAAA,iBAAA3/B,KAAA+uE,YAGAvnE,EAAAm4B,iBAAA,OAAA3/B,KAAAgvE,aAAAhsE,KAAAhD,OACAwH,EAAAm4B,iBAAA,QAAA3/B,KAAAivE,YAAAjsE,KAAAhD,QAGAA,KAAAkvE,UAAA,EAwJA,QAAAC,GAAA5qD,EAAAliB,GAEAA,IAEAA,EAAA,SAAAkiB,EAAAQ,OAAAR,EAAA0F,YAAA,KAAA,GAGA,IAAAziB,GAAAq4B,SAAAC,cAAA,SAKA,OAHAt4B,GAAA4F,IAAAmX,EACA/c,EAAAnF,KAAAA,EAEAmF,EAzOA,GAAA++C,GAAA7lD,EAAA,iBACAmqC,EAAAnqC,EAAA,WAuEA+lD,GAAA5jD,UAAA0M,OAAA/L,OAAA+iD,EAAA1jD,WACA4jD,EAAA5jD,UAAAmH,YAAAy8C,EACAhnD,EAAAD,QAAAinD,EAOAA,EAAA5jD,UAAAisE,UAAA,WAEA9uE,KAAA6uE,aAEAhvE,OAAAuvE,sBAAApvE,KAAA8uE,WACA9uE,KAAA2pC,WASA8c,EAAA5jD,UAAAmsE,aAAA,WAEAhvE,KAAA6uE,aAEAhvE,OAAAuvE,sBAAApvE,KAAA8uE,WACA9uE,KAAA6uE,YAAA,IASApoB,EAAA5jD,UAAAosE,YAAA,WAEAjvE,KAAA6uE,YAAA,GAQApoB,EAAA5jD,UAAAksE,WAAA,WAEA/uE,KAAAm3D,WAAA,EAEAn3D,KAAAwH,SAEAxH,KAAAwH,OAAAo3B,oBAAA,UAAA5+B,KAAA+uE,YACA/uE,KAAAwH,OAAAo3B,oBAAA,iBAAA5+B,KAAA+uE,YAEA/uE,KAAA4D,MAAA5D,KAAAwH,OAAA6nE,WACArvE,KAAA6D,OAAA7D,KAAAwH,OAAA8nE,YAEAtvE,KAAAwH,OAAA+nE,OAGAvvE,KAAAkvE,WAEAlvE,KAAAkvE,UAAA,EACAlvE,KAAAonB,KAAA,SAAApnB,SASAymD,EAAA5jD,UAAA0C,QAAA,WAEAvF,KAAAwH,QAAAxH,KAAAwH,OAAAglE,gBAEA3hC,GAAA0hC,iBAAAvsE,KAAAwH,OAAAglE,eACAxsE,MAAAwH,OAAAglE,SAGAjmB,EAAA1jD,UAAA0C,QAAAxE,KAAAf,OAWAymD,EAAA+mB,UAAA,SAAAC,EAAAl7B,GAEAk7B,EAAAjB,UAEAiB,EAAAjB,QAAA,SAAA3hC,EAAAwsB,MAGA,IAAAvZ,GAAAjT,EAAA0hC,iBAAAkB,EAAAjB,QAQA,OANA1uB,KAEAA,EAAA,GAAA2I,GAAAgnB,EAAAl7B,GACA1H,EAAA0hC,iBAAAkB,EAAAjB,SAAA1uB,GAGAA,GAeA2I,EAAAmnB,QAAA,SAAA4B,EAAAj9B,GAEA,GAAAk7B,GAAA5tC,SAAAC,cAAA,QAGA,IAAAh0B,MAAA4O,QAAA80D,GAEA,IAAA,GAAA7uE,GAAA,EAAAA,EAAA6uE,EAAAxuE,SAAAL,EAEA8sE,EAAAxtC,YAAAkvC,EAAAK,EAAA7uE,GAAAyM,KAAAoiE,EAAA7uE,GAAA6uE,EAAA7uE,GAAAigC,WAMA6sC,GAAAxtC,YAAAkvC,EAAAK,EAAApiE,KAAAoiE,EAAAA,EAAA5uC,MAMA,OAHA6sC,GAAA3xC,OACA2xC,EAAA8B,OAEA9oB,EAAA+mB,UAAAC,EAAAl7B,IAGAkU,EAAAgpB,SAAAhpB,EAAAmnB,UAiBAh5B,WAAA,IAAA42B,gBAAA,MAAAkE,KAAA,SAAAhvE,EAAAjB,EAAAD,GAgBA,QAAAmwE,KAEA,GAAAC,GAAA5vE,IAYAA,MAAA6vE,MAAA,SAAAC,GAEAF,EAAAG,WAAA,KAEAH,EAAAr3D,UAGAq3D,EAAAjmC,OAAAmmC,GAEAF,EAAAr3D,SAAA,OAAAq3D,EAAAG,YAAAH,EAAAI,SAAA7xD,UAAA8xD,GAAA,KAEAL,EAAAG,WAAAX,sBAAAQ,EAAAC,UASA7vE,KAAAgwE,SAAA,GAAAh4C,GAMAh4B,KAAA+vE,WAAA,KAOA/vE,KAAAkwE,cAAA,IAUAlwE,KAAAmwE,WAAA,EAWAnwE,KAAAowE,UAAA,EAYApwE,KAAAqwE,UAAA,EAAAtjC,EAAAM,YAYArtC,KAAAswE,SAAA,EAYAtwE,KAAAuwE,MAAA,EAaAvwE,KAAAuY,SAAA,EApIA,GAAAw0B,GAAArsC,EAAA,YACAs3B,EAAAt3B,EAAA,iBAEAuvE,EAAA,MAoIA1gE,QAAAwhC,iBAAA4+B,EAAA9sE,WAYA2tE,KACAxgE,IAAA,WAEA,MAAA,KAAAhQ,KAAAqwE,YAgBAI,QACAzgE,IAAA,WAEA,MAAA,KAAAhQ,KAAAkwE,eAEAhgE,IAAA,SAAAwgE,GAGA,GAAAC,GAAAn7D,KAAAgE,IAAAhE,KAAAC,IAAA,EAAAi7D,GAAA,IAAA3jC,EAAAM,YACArtC,MAAAkwE,cAAA,EAAAS,MAYAhB,EAAA9sE,UAAA+tE,iBAAA,WAEA,OAAA5wE,KAAA+vE,YAAA/vE,KAAAgwE,SAAA7xD,UAAA8xD,GAAA,KAGAjwE,KAAAswE,SAAAO,YAAAC,MACA9wE,KAAA+vE,WAAAX,sBAAApvE,KAAA6vE,SASAF,EAAA9sE,UAAAkuE,gBAAA,WAEA,OAAA/wE,KAAA+vE,aAEAiB,qBAAAhxE,KAAA+vE,YACA/vE,KAAA+vE,WAAA,OAcAJ,EAAA9sE,UAAAouE,iBAAA,WAEAjxE,KAAAuY,QAEAvY,KAAA4wE,mBAEA5wE,KAAAmwE,WAEAnwE,KAAAwK,SAaAmlE,EAAA9sE,UAAAu4B,IAAA,SAAAznB,EAAAokB,GAMA,MAJA/3B,MAAAgwE,SAAAhpD,GAAAipD,EAAAt8D,EAAAokB,GAEA/3B,KAAAixE,mBAEAjxE,MAYA2vE,EAAA9sE,UAAAquE,QAAA,SAAAv9D,EAAAokB,GAMA,MAJA/3B,MAAAgwE,SAAA/oD,KAAAgpD,EAAAt8D,EAAAokB,GAEA/3B,KAAAixE,mBAEAjxE,MAYA2vE,EAAA9sE,UAAAsuE,OAAA,SAAAx9D,EAAAokB,GASA,MAPA/3B,MAAAgwE,SAAA9oD,IAAA+oD,EAAAt8D,EAAAokB,GAEA/3B,KAAAgwE,SAAA7xD,UAAA8xD,GAAA,IAEAjwE,KAAA+wE,kBAGA/wE,MAOA2vE,EAAA9sE,UAAA2H,MAAA,WAEAxK,KAAAuY,UAEAvY,KAAAuY,SAAA,EACAvY,KAAA4wE,qBAQAjB,EAAA9sE,UAAAmxB,KAAA,WAEAh0B,KAAAuY,UAEAvY,KAAAuY,SAAA,EACAvY,KAAA+wE,oBAiBApB,EAAA9sE,UAAA8mC,OAAA,SAAAynC,GAEA,GAAAf,EAGAe,GAAAA,GAAAP,YAAAC,MAEAT,EAAArwE,KAAAqwE,UAAAe,EAAApxE,KAAAswE,SAGAD,EAAArwE,KAAAkwE,gBAEAG,EAAArwE,KAAAkwE,eAGAlwE,KAAAowE,UAAAC,EAAAtjC,EAAAM,YAAArtC,KAAAuwE,MAGAvwE,KAAAgwE,SAAA5oD,KAAA6oD,EAAAjwE,KAAAowE,WAEApwE,KAAAswE,SAAAc,GAGA3xE,EAAAD,QAAAmwE,IAEA94B,WAAA,GAAAra,cAAA,KAAA60C,KAAA,SAAA3wE,EAAAjB,EAAAD,GACA,GAAAmwE,GAAAjvE,EAAA,YA4CA4wE,EAAA,GAAA3B,EACA2B,GAAAnB,WAAA,EAKA1wE,EAAAD,SACA8xE,OAAAA,EACA3B,OAAAA,KAGA4B,WAAA,MAAAC,KAAA,SAAA9wE,EAAAjB,EAAAD,GAOA,GAGA8lE,GAAA,SAAAv6D,GASA,IAAA,GALA0mE,GAAA,EAAA1mE,EAEAu2C,EAAA,GAAAqB,aAAA8uB,GAGA9wE,EAAA,EAAA+oB,EAAA,EAAA+nD,EAAA9wE,EAAAA,GAAA,EAAA+oB,GAAA,EAEA43B,EAAA3gD,EAAA,GAAA+oB,EAAA,EACA43B,EAAA3gD,EAAA,GAAA+oB,EAAA,EACA43B,EAAA3gD,EAAA,GAAA+oB,EAAA,EACA43B,EAAA3gD,EAAA,GAAA+oB,EAAA,EACA43B,EAAA3gD,EAAA,GAAA+oB,EAAA,EACA43B,EAAA3gD,EAAA,GAAA+oB,EAAA,CAGA,OAAA43B,GAGA7hD,GAAAD,QAAA8lE,OACAoM,KAAA,SAAAhxE,EAAAjB,EAAAD,GACA,GAAAutC,GAAArsC,EAAA,YAKAmqC,EAAAprC,EAAAD,SACAmyE,KAAA,EACAC,YAAA,EAEA55C,aAAAt3B,EAAA,iBACAmyD,aAAAnyD,EAAA,kBACA6V,MAAA7V,EAAA,SAOA22D,IAAA,WAEA,QAAAxsB,EAAA8mC,MAUAxwB,QAAA,SAAA0wB,EAAAroD,GAQA,MANAA,GAAAA,MAEAA,EAAA,IAAAqoD,GAAA,GAAA,KAAA,IACAroD,EAAA,IAAAqoD,GAAA,EAAA,KAAA,IACAroD,EAAA,IAAA,IAAAqoD,GAAA,IAEAroD,GASAwoC,WAAA,SAAA6f,GAKA,MAHAA,GAAAA,EAAAp3D,SAAA,IACAo3D,EAAA,SAAA9sD,OAAA,EAAA,EAAA8sD,EAAA7wE,QAAA6wE,EAEA,IAAAA,GASAjb,QAAA,SAAAkb,GAEA,OAAA,IAAAA,EAAA,IAAA,KAAA,IAAAA,EAAA,IAAA,GAAA,IAAAA,EAAA,IAQAve,0BAAA,WAEA,GAAA,mBAAA1zB,UAEA,OAAA,CAGA,IAAAkyC,GAAA,iFACAC,EAAA,mDAEAC,EAAA,GAAAvyC,MACAuyC,GAAA7kE,IAAA2kE,EAAA,WAAAC,CAEA,IAAAE,GAAA,GAAAxyC,MACAwyC,GAAA9kE,IAAA2kE,EAAA,WAAAC,CAEA,IAAA5mE,GAAAy0B,SAAAC,cAAA,SACA10B,GAAAxH,MAAA,EACAwH,EAAAvH,OAAA,CAEA,IAAAk0B,GAAA3sB,EAAAC,WAAA,KACA0sB,GAAAsmB,yBAAA,WACAtmB,EAAA01B,UAAAwkB,EAAA,EAAA,GACAl6C,EAAA01B,UAAAykB,EAAA,EAAA,EAEA,IAAA5vE,GAAAy1B,EAAAw+B,aAAA,EAAA,EAAA,EAAA,GAAAj0D,IAEA,OAAA,OAAAA,EAAA,IAAA,IAAAA,EAAA,IAAA,IAAAA,EAAA,IAUA6vE,kBAAA,SAAAC,GAGA,GAAAA,EAAA,GAAA,KAAAA,EAAAA,EAAA,GAEA,MAAAA,EAMA,KAFA,GAAA99D,GAAA,EAEA89D,EAAA99D,GAEAA,IAAA,CAGA,OAAAA,IAWAy3D,aAAA,SAAAnoE,EAAAC,GAEA,MAAAD,GAAA,GAAA,KAAAA,EAAAA,EAAA,IAAAC,EAAA,GAAA,KAAAA,EAAAA,EAAA,IAUA+oE,mBAAA,SAAA9+C,GAEA,GAAA2hB,GAAA1C,EAAAsC,cAAAlrB,KAAA2J,EAEA,OAAA2hB,GAEA4iC,WAAA5iC,EAAA,IAGA,GAaAmiB,SAAA,SAAAvvD,GAEA,IAAAwoC,EAAA+mC,WAAA,CAKA,GAAA7xC,UAAAuyC,UAAAznD,cAAAsB,QAAA,UAAA,GACA,CACA,GAAAvU,IACA,uBAAAm1B,EAAAC,QAAA,QAAA3qC,EAAA,yDACA,sCACA,sCACA,sDACA,sCACA,sCACA,sCACA,mDACA,mDACA,mDAGAxC,QAAA+M,QAAAc,IAAAkG,MAAAhH,QAAAgL,OAEA/X,QAAA+M,SAEA/M,OAAA+M,QAAAc,IAAA,WAAAq/B,EAAAC,QAAA,MAAA3qC,EAAA,4BAGAwoC,GAAA+mC,YAAA,IAQAxqB,iBAAA,WAEA,GAAAmrB,IAAAvuE,SAAA,EACA,KAEA,IAAAnE,OAAA2yE,sBAEA,OAAA,CAGA,IAAApnE,GAAAy0B,SAAAC,cAAA,UACA19B,EAAAgJ,EAAAC,WAAA,QAAAknE,IAAAnnE,EAAAC,WAAA,qBAAAknE,EAEA,UAAAnwE,IAAAA,EAAAqwE,uBAAAzuE,SAEA,MAAA9D,GAEA,OAAA,IAUAkkE,KAAA,SAAAhkE,GAEA,MAAAA,GAAA,EAAAA,EAAA,GAAA,EAAA,GAUA0qC,YAAA,SAAA92B,EAAA0+D,EAAAC,GAEA,GAAA3xE,GAAAgT,EAAAhT,MAEA,MAAA0xE,GAAA1xE,GAAA,IAAA2xE,GAAA,CAKAA,EAAAD,EAAAC,EAAA3xE,EAAAA,EAAA0xE,EAAAC,CACA,KAAA,GAAAhyE,GAAA+xE,EAAAt9D,EAAApU,EAAA2xE,EAAAv9D,EAAAzU,IAAAA,EAEAqT,EAAArT,GAAAqT,EAAArT,EAAAgyE,EAGA3+D,GAAAhT,OAAAoU,IAOAyvD,gBAMA0H,uBAGA11B,WAAA,GAAA+7B,iBAAA,IAAAr8D,MAAA,GAAAimB,cAAA,KAAAq2C,KAAA,SAAAnyE,EAAAjB,EAAAD,GAYA,QAAAqzD,GAAA98C,GAEAA,EAAA+8D,aAQA/8D,EAAAu2B,eAAA,SAAAymC,EAAAC,GAEAj9D,EAAA+8D,UAAAC,GAAAC,GAOAj9D,EAAAlT,UAAA8vD,YAAA,WAEA3yD,KAAAgsC,QAAAhsC,KAAAgsC,WAEA,KAAA,GAAAzrC,KAAAwV,GAAA+8D,UAEA9yE,KAAAgsC,QAAAzrC,GAAA,GAAAwV,GAAA+8D,UAAAvyE,GAAAP,OAQA+V,EAAAlT,UAAAwwD,eAAA,WAEA,IAAA,GAAA9yD,KAAAP,MAAAgsC,QAEAhsC,KAAAgsC,QAAAzrC,GAAAgF,UACAvF,KAAAgsC,QAAAzrC,GAAA,IAGAP,MAAAgsC,QAAA,MAKAvsC,EAAAD,SAMAszD,MAAA,SAAA/8C,GAEA88C,EAAA98C,UAIAk9D,KAAA,SAAAvyE,EAAAjB,EAAAD,GAEA,GAAAiqC,GAAA/oC,EAAA,UACAwyE,EAAAxyE,EAAA,UACAyyE,EAAAzyE,EAAA,YACAq1C,EAAAr1C,EAAA,YAWA+oC,GAAA2pC,YAAA,WAEA,KAAA,IAAAC,gBAAA,uFAYA5pC,EAAA6pC,YAAA,WAEA,KAAA,IAAAD,gBAAA,+FAGA9jE,OAAAwhC,iBAAAtH,GAUA8pC,OACAvjE,IAAA,WAGA,MADApD,SAAAK,KAAA,sFACAw8B,EAAAiH,YAYA8iC,wBACAxjE,IAAA,WAGA,MADApD,SAAAK,KAAA,6FACAw8B,EAAAiH,YAYA+iC,OACAzjE,IAAA,WAGA,MADApD,SAAAK,KAAA,sGACAimE,EAAAQ,OAYAC,MACA3jE,IAAA,WAGA,MADApD,SAAAK,KAAA,iFACAimE,EAAAS,OAYAC,WACA5jE,IAAA,WAGA,MADApD,SAAAK,KAAA,oGACAkmE,EAAAS,YAYAC,cACA7jE,IAAA,WAGA,MADApD,SAAAK,KAAA,6GACAkmE,EAAAU,eAYAC,YACA9jE,IAAA,WAGA,MADApD,SAAAK,KAAA,uGACAkmE,EAAAW,aAYA11B,YACApuC,IAAA,WAGA,MADApD,SAAAK,KAAA,qFACAw8B,EAAAiE,cAYAqmC,YACA/jE,IAAA,WAGA,MADApD,SAAAK,KAAA,qFACAw8B,EAAA2F,cAYAm9B,kBACAv8D,IAAA,WAGA,MADApD,SAAAK,KAAA,uHACAw8B,EAAAoB,MAAA0hC,mBAYA1H,cACA70D,IAAA,WAGA,MADApD,SAAAK,KAAA,2GACAw8B,EAAAoB,MAAAg6B,eAYAl0B,MACA3gC,IAAA,WAGA,MADApD,SAAAK,KAAA,uFACAw8B,MAYAA,EAAAyc,OAAArjD,UAAAmxE,WAAA,SAAA/vE,GAEAjE,KAAAiE,QAAAA,EACA2I,QAAAK,KAAA,mGASAkmE,EAAAW,WAAAjxE,UAAAoxE,QAAA,SAAArwC,GAEA5jC,KAAA4jC,KAAAA,EACAh3B,QAAAK,KAAA,kGASAw8B,EAAA6c,KAAAzjD,UAAAoxE,QAAA,SAAArwC,GAEA5jC,KAAA4jC,KAAAA,EACAh3B,QAAAK,KAAA,4FASAw8B,EAAA6c,KAAAzjD,UAAAqxE,SAAA,SAAAprC,GAEA9oC,KAAA8oC,MAAAA,EACAl8B,QAAAK,KAAA,2FASAw8B,EAAA/lC,QAAAb,UAAAsxE,SAAA,SAAA7mB,GAEAttD,KAAAstD,MAAAA,EACA1gD,QAAAK,KAAA,8FAGAsC,OAAAwhC,iBAAAgF,GASA+Q,gBACA92C,IAAA,WAGA,MADApD,SAAAK,KAAA,2FACAw8B,EAAAqd,iBAWAC,YACA/2C,IAAA,WAGA,MADApD,SAAAK,KAAA,mFACAw8B,EAAAsd,aAWAC,kBACAh3C,IAAA,WAGA,MADApD,SAAAK,KAAA,+FACAw8B,EAAAud,qBAWAvd,EAAAoB,MAAAupC,KAAA,WAGA,MADAxnE,SAAAK,KAAA,mEACAw8B,EAAAoB,MAAAwsB,SAGAgd,SAAA;AAAAC,WAAA,IAAAC,YAAA,IAAAC,SAAA,MAAAC,KAAA,SAAA/zE,EAAAjB,EAAAD,GA+BA,QAAAs0E,GAAAlwC,EAAAkF,GAEAW,EAAAiH,UAAA3vC,KAAAf,MAEA8oC,EAAAA,MASA9oC,KAAA00E,UAAA,EASA10E,KAAA20E,WAAA,EAQA30E,KAAA40E,WAQA50E,KAAA60E,OACA/8B,KAAA5vC,SAAA4gC,EAAAgP,KAAAhP,EAAAgP,KAAA,SACAgwB,MAAAh/B,EAAAg/B,OAAA,OACAt5D,KAAA,KACAzD,KAAA,GASA/K,KAAA6nE,KAAA/+B,EAAA++B,KAQA7nE,KAAAsnE,MAAA1jC,EAQA5jC,KAAA80E,SAAA,EAOA90E,KAAA+0E,cAAA,EAOA/0E,KAAA+J,OAAA,EAEA/J,KAAA2nE,aAjHA,GAAAl+B,GAAA/oC,EAAA,UAqHAozE,GAAAjxE,UAAA0M,OAAA/L,OAAAimC,EAAAiH,UAAA7tC,WACAixE,EAAAjxE,UAAAmH,YAAA8pE,EACAr0E,EAAAD,QAAAs0E,EAEAvkE,OAAAwhC,iBAAA+iC,EAAAjxE,WAOAi1C,MACA9nC,IAAA,WAEA,MAAAhQ,MAAA60E,MAAA/8B,MAEA5nC,IAAA,SAAAf,GAEAnP,KAAA60E,MAAA/8B,KAAA,gBAAA3oC,IAAAA,GAAA,EAAAA,EAAA,SAEAnP,KAAA+J,OAAA,IAWA+9D,OACA93D,IAAA,WAEA,MAAAhQ,MAAA60E,MAAA/M,OAEA53D,IAAA,SAAAf,GAEAnP,KAAA60E,MAAA/M,MAAA34D,GAAA,OAEAnP,KAAA+J,OAAA,IAUA89D,MACA73D,IAAA,WAEA,MAAAhQ,MAAA60E,OAEA3kE,IAAA,SAAAf,GAEAA,IAIA,gBAAAA,IACAA,EAAAA,EAAAQ,MAAA,KAEA3P,KAAA60E,MAAArmE,KAAA,IAAAW,EAAAnO,OAAAmO,EAAA,GAAAA,EAAAqP,MAAA,GAAA5N,KAAA,KACA5Q,KAAA60E,MAAA9pE,KAAAoE,EAAAnO,QAAA,EAAAse,SAAAnQ,EAAA,GAAA,IAAA2kE,EAAAkB,MAAAh1E,KAAA60E,MAAArmE,MAAAzD,OAGA/K,KAAA60E,MAAArmE,KAAAW,EAAAX,KACAxO,KAAA60E,MAAA9pE,KAAA,gBAAAoE,GAAApE,KAAAoE,EAAApE,KAAAuU,SAAAnQ,EAAApE,KAAA,KAGA/K,KAAA+J,OAAA,KAUA65B,MACA5zB,IAAA,WAEA,MAAAhQ,MAAAsnE,OAEAp3D,IAAA,SAAAf,GAEAA,EAAAA,EAAAsL,YAAA,IACAza,KAAAsnE,QAAAn4D,IAIAnP,KAAAsnE,MAAAn4D,EACAnP,KAAA+J,OAAA,OAUA+pE,EAAAjxE,UAAA8kE,WAAA,WAcA,IAAA,GAZArlE,GAAAwxE,EAAAkB,MAAAh1E,KAAA60E,MAAArmE,MACA8J,EAAA,GAAAmxB,GAAAoP,MACAo8B,EAAA,KACAC,KACAC,EAAA,EACAvM,EAAA,EACAD,KACAmB,EAAA,EACA94B,EAAAhxC,KAAA60E,MAAA9pE,KAAAzI,EAAAyI,KACAqqE,EAAA,GACAL,EAAA,EAEAp0E,EAAA,EAAAA,EAAAX,KAAA4jC,KAAA5iC,OAAAL,IACA,CACA,GAAA00E,GAAAr1E,KAAA4jC,KAAAxb,WAAAznB,EAGA,IAFAy0E,EAAA,OAAAv0D,KAAA7gB,KAAA4jC,KAAAlf,OAAA/jB,IAAAA,EAAAy0E,EAEA,iBAAAv0D,KAAA7gB,KAAA4jC,KAAAlf,OAAA/jB,IAEAgoE,EAAAh+D,KAAAwqE,GACAvM,EAAApzD,KAAAC,IAAAmzD,EAAAuM,GACArL,IAEAxxD,EAAA3D,EAAA,EACA2D,EAAAR,GAAAxV,EAAA0mE,WACAiM,EAAA,SAIA,IAAA,KAAAG,GAAAp1E,KAAA80E,SAAA,GAAAx8D,EAAA3D,EAAAq8B,EAAAhxC,KAAA80E,SAEArrC,EAAAoB,MAAAC,YAAAoqC,EAAAE,EAAAz0E,EAAAy0E,GACAz0E,EAAAy0E,EACAA,EAAA,GAEAzM,EAAAh+D,KAAAwqE,GACAvM,EAAApzD,KAAAC,IAAAmzD,EAAAuM,GACArL,IAEAxxD,EAAA3D,EAAA,EACA2D,EAAAR,GAAAxV,EAAA0mE,WACAiM,EAAA,SAZA,CAgBA,GAAAK,GAAAhzE,EAAA4yE,MAAAG,EAEAC,KAKAL,GAAAK,EAAAC,QAAAN,KAEA38D,EAAA3D,GAAA2gE,EAAAC,QAAAN,IAGAC,EAAAvqE,MAAA1G,QAAAqxE,EAAArxE,QAAA6lE,KAAAA,EAAAuL,SAAAA,EAAAtsC,SAAA,GAAAU,GAAAoP,MAAAvgC,EAAA3D,EAAA2gE,EAAAE,QAAAl9D,EAAAR,EAAAw9D,EAAAG,WACAN,EAAA78D,EAAA3D,GAAA2gE,EAAArxE,QAAAL,MAAA0xE,EAAAE,SACAl9D,EAAA3D,GAAA2gE,EAAAI,SACAX,EAAAv/D,KAAAC,IAAAs/D,EAAAO,EAAAG,QAAAH,EAAArxE,QAAAJ,QACAoxE,EAAAI,IAGA1M,EAAAh+D,KAAAwqE,GACAvM,EAAApzD,KAAAC,IAAAmzD,EAAAuM,EAEA,IAAAQ,KAEA,KAAAh1E,EAAA,EAAAmpE,GAAAnpE,EAAAA,IACA,CACA,GAAAi1E,GAAA,CAEA,WAAA51E,KAAA60E,MAAA/M,MAEA8N,EAAAhN,EAAAD,EAAAhoE,GAEA,WAAAX,KAAA60E,MAAA/M,QAEA8N,GAAAhN,EAAAD,EAAAhoE,IAAA,GAGAg1E,EAAAhrE,KAAAirE,GAGA,GAAAC,GAAAX,EAAAl0E,OACA82C,EAAA93C,KAAA83C,IAEA,KAAAn3C,EAAA,EAAAk1E,EAAAl1E,EAAAA,IACA,CACA,GAAA0zB,GAAAr0B,KAAA40E,QAAAj0E,EAEA0zB,GAEAA,EAAApwB,QAAAixE,EAAAv0E,GAAAsD,SAIAowB,EAAA,GAAAoV,GAAAyc,OAAAgvB,EAAAv0E,GAAAsD,SACAjE,KAAA40E,QAAAjqE,KAAA0pB,IAGAA,EAAA0U,SAAAp0B,GAAAugE,EAAAv0E,GAAAooC,SAAAp0B,EAAAghE,EAAAT,EAAAv0E,GAAAmpE,OAAA94B,EACA3c,EAAA0U,SAAAjxB,EAAAo9D,EAAAv0E,GAAAooC,SAAAjxB,EAAAk5B,EACA3c,EAAA2c,MAAAr8B,EAAA0f,EAAA2c,MAAAl5B,EAAAk5B,EACA3c,EAAAyjB,KAAAA,EAEAzjB,EAAAid,QAEAtxC,KAAAsqC,SAAAjW,GAKA,IAAA1zB,EAAAk1E,EAAAl1E,EAAAX,KAAA40E,QAAA5zE,SAAAL,EAEAX,KAAA+pC,YAAA/pC,KAAA40E,QAAAj0E,GAGAX,MAAA00E,UAAA9L,EAAA53B,EACAhxC,KAAA20E,YAAAr8D,EAAAR,EAAAxV,EAAA0mE,YAAAh4B,EACAhxC,KAAA+0E,cAAAA,EAAA/jC,GAQA8iC,EAAAjxE,UAAA8vC,gBAAA,WAEA3yC,KAAA81E,WACA91E,KAAA8yC,4BASAghC,EAAAjxE,UAAAouC,eAAA,WAGA,MADAjxC,MAAA81E,WACArsC,EAAAiH,UAAA7tC,UAAAouC,eAAAlwC,KAAAf,OAQA8zE,EAAAjxE,UAAAizE,SAAA,WAEA91E,KAAA+J,QAEA/J,KAAA2nE,aACA3nE,KAAA+J,OAAA,IAIA+pE,EAAAkB,WAEAxoC,UAAA,KAAAupC,KAAA,SAAAr1E,EAAAjB,EAAAD,GA0BA,QAAAo0E,GAAAnO,GAEAh8B,EAAAyc,OAAAnlD,KAAAf,KAAAylE,EAAA,YAAAh8B,GAAA/lC,QAAA+hE,EAAA,GAAAA,EAAA,GAAAxhE,SAKAjE,KAAAg2E,UAAA,KAKAh2E,KAAAi2E,WAAA,KAEAj2E,KAAAylE,SAAAA,EAQAzlE,KAAAk2E,eAAA,EAQAl2E,KAAAm2E,MAAA,EAQAn2E,KAAAs7B,WAAA,KAQAt7B,KAAAo2E,aAAA,EAQAp2E,KAAAq2E,SAAA,EA/EA,GAAA5sC,GAAA/oC,EAAA,UAmFAkzE,GAAA/wE,UAAA0M,OAAA/L,OAAAimC,EAAAyc,OAAArjD,WACA+wE,EAAA/wE,UAAAmH,YAAA4pE,EACAn0E,EAAAD,QAAAo0E,EAEArkE,OAAAwhC,iBAAA6iC,EAAA/wE,WAUAyzE,aACAtmE,IAAA,WAEA,MAAAhQ,MAAAg2E,UAAAh1E,SAWAykE,UACAz1D,IAAA,WAEA,MAAAhQ,MAAAg2E,WAEA9lE,IAAA,SAAAf,GAEA,GAAAA,EAAA,YAAAs6B,GAAA/lC,QAEA1D,KAAAg2E,UAAA7mE,EACAnP,KAAAi2E,WAAA,SAGA,CACAj2E,KAAAg2E,aACAh2E,KAAAi2E,aACA,KAAA,GAAAt1E,GAAA,EAAAA,EAAAwO,EAAAnO,OAAAL,IAEAX,KAAAg2E,UAAArrE,KAAAwE,EAAAxO,GAAAsD,SACAjE,KAAAi2E,WAAAtrE,KAAAwE,EAAAxO,GAAAmvE,SAaAhU,cACA9rD,IAAA,WAEA,GAAA8rD,GAAAtmD,KAAAyT,MAAAjpB,KAAAo2E,cAAAp2E,KAAAg2E,UAAAh1E,MAKA,OAJA,GAAA86D,IAEAA,GAAA97D,KAAAg2E,UAAAh1E,QAEA86D,MAUA8X,EAAA/wE,UAAAmxB,KAAA,WAEAh0B,KAAAq2E,UAKAr2E,KAAAq2E,SAAA,EACA5sC,EAAAwc,OAAAqrB,OAAAH,OAAAnxE,KAAA2pC,OAAA3pC,QAOA4zE,EAAA/wE,UAAA0sE,KAAA,WAEAvvE,KAAAq2E,UAKAr2E,KAAAq2E,SAAA,EACA5sC,EAAAwc,OAAAqrB,OAAAl2C,IAAAp7B,KAAA2pC,OAAA3pC,QAQA4zE,EAAA/wE,UAAA0zE,YAAA,SAAAC,GAEAx2E,KAAAg0B,OAEAh0B,KAAAo2E,aAAAI,EAEAx2E,KAAAswD,SAAAtwD,KAAAg2E,UAAAh2E,KAAA87D,eAQA8X,EAAA/wE,UAAA4zE,YAAA,SAAAD,GAEAx2E,KAAAo2E,aAAAI,EAEAx2E,KAAAuvE,QAOAqE,EAAA/wE,UAAA8mC,OAAA,SAAAymC,GAEA,GAAAsG,GAAA12E,KAAAk2E,eAAA9F,CAEA,IAAA,OAAApwE,KAAAi2E,WACA,CACA,GAAAU,GAAA32E,KAAAo2E,aAAA,EAAAp2E,KAAAi2E,WAAAj2E,KAAA87D,aAIA,KAFA6a,GAAAD,EAAA,GAAA,IAEA,EAAAC,GAEA32E,KAAAo2E,eACAO,GAAA32E,KAAAi2E,WAAAj2E,KAAA87D,aAGA,IAAAsI,GAAA5uD,KAAA4uD,KAAApkE,KAAAk2E,eAAA9F,EAGA,KAFApwE,KAAAo2E,aAAA5gE,KAAAyT,MAAAjpB,KAAAo2E,cAEAO,GAAA32E,KAAAi2E,WAAAj2E,KAAA87D,eAEA6a,GAAA32E,KAAAi2E,WAAAj2E,KAAA87D,cAAAsI,EACApkE,KAAAo2E,cAAAhS,CAGApkE,MAAAo2E,cAAAO,EAAA32E,KAAAi2E,WAAAj2E,KAAA87D,kBAIA97D,MAAAo2E,cAAAM,CAGA12E,MAAAo2E,aAAA,IAAAp2E,KAAAm2E,MAEAn2E,KAAAu2E,YAAA,GAEAv2E,KAAAs7B,YAEAt7B,KAAAs7B,cAGAt7B,KAAAo2E,cAAAp2E,KAAAg2E,UAAAh1E,SAAAhB,KAAAm2E,MAEAn2E,KAAAu2E,YAAAv2E,KAAAg2E,UAAAh1E,OAAA,GAEAhB,KAAAs7B,YAEAt7B,KAAAs7B,cAKAt7B,KAAAswD,SAAAtwD,KAAAg2E,UAAAh2E,KAAA87D,eASA8X,EAAA/wE,UAAA0C,QAAA,WAEAvF,KAAAg0B,OACAyV,EAAAyc,OAAArjD,UAAA0C,QAAAxE,KAAAf,OASA4zE,EAAAgD,WAAA,SAAAC,GAIA,IAAA,GAFApR,MAEA9kE,EAAA,EAAAA,EAAAk2E,EAAA71E,SAAAL,EAEA8kE,EAAA96D,KAAA,GAAA8+B,GAAA/lC,QAAAihE,UAAAkS,EAAAl2E,IAGA,OAAA,IAAAizE,GAAAnO,IASAmO,EAAAkD,WAAA,SAAAC,GAIA,IAAA,GAFAtR,MAEA9kE,EAAA,EAAAA,EAAAo2E,EAAA/1E,SAAAL,EAEA8kE,EAAA96D,KAAA,GAAA8+B,GAAA/lC,QAAAohE,UAAAiS,EAAAp2E,IAGA,OAAA,IAAAizE,GAAAnO,MAEAj5B,UAAA,KAAAwqC,KAAA,SAAAt2E,EAAAjB,EAAAD,GAgBA,QAAAq0E,GAAA5vE,EAAAL,EAAAC,GAEA4lC,EAAAyc,OAAAnlD,KAAAf,KAAAiE,GAOAjE,KAAAi3E,UAAA,GAAAxtC,GAAAoP,MAAA,EAAA,GAQA74C,KAAAk3E,aAAA,GAAAztC,GAAAoP,MAAA,EAAA,GAUA74C,KAAAkxC,OAAAttC,GAAA,IAQA5D,KAAAmxC,QAAAttC,GAAA,IAQA7D,KAAAgxD,KAAA,GAAAvnB,GAAAid,WAEA1mD,KAAAm3E,eAAA,KAGAn3E,KAAAqN,OAAA,GAAAo8B,GAAAqd,gBAGA,wBACA,kCACA,gCACA,yBAEA,iCAEA,uBACA,2BAEA,8BACA,uBAEA,mBACA,uFAEA,iCACA,6BACA,6BACA,4BAEA,qDACA,KACAl2C,KAAA,OAEA,wBAEA,8BACA,uBAEA,8BACA,uBACA,2BAEA,mBAEA,iDACA,+DACA,yBAEA,2DACA,KACAA,KAAA,OAIAwmE,QAAA/0E,KAAA,MAAA8M,OAAA,EAAA,EAAA,EAAA,IACAkoE,YAAAh1E,KAAA,MAAA8M,OAAA,EAAA,EAAA,EAAA,IACAmoE,YAAAj1E,KAAA,MAAA8M,OAAA,EAAA,MAlHA,GAAAs6B,GAAA/oC,EAAA,WAEAk4C,EAAA,GAAAnP,GAAAoP,MACA4c,EAAA/0D,EAAA,8CAoHAmzE,GAAAhxE,UAAA0M,OAAA/L,OAAAimC,EAAAyc,OAAArjD,WACAgxE,EAAAhxE,UAAAmH,YAAA6pE,EACAp0E,EAAAD,QAAAq0E,EAGAtkE,OAAAwhC,iBAAA8iC,EAAAhxE,WAOAe,OACAoM,IAAA,WAEA,MAAAhQ,MAAAkxC,QAEAhhC,IAAA,SAAAf,GAEAnP,KAAAkxC,OAAA/hC,IAUAtL,QACAmM,IAAA,WAEA,MAAAhQ,MAAAmxC,SAEAjhC,IAAA,SAAAf,GAEAnP,KAAAmxC,QAAAhiC,MAKA0kE,EAAAhxE,UAAAwhE,iBAAA,aAYAwP,EAAAhxE,UAAAuxC,aAAA,SAAAvL,GAGA,GAAA5kC,GAAAjE,KAAAswD,QAEA,IAAArsD,GAAAA,EAAA+sD,KAAA,CAKA,GAAAumB,GAAAtzE,EAAA+sD,KACAwmB,EAAAvzE,EAAA2sD,OAAAhtD,MACA6zE,EAAAxzE,EAAA2sD,OAAA/sD,OACA0qE,EAAAtqE,EAAA65C,YAAAl6C,MACA4qE,EAAAvqE,EAAA65C,YAAAj6C,MAEAI,GAAA+sD,KAAAhxD,KAAAgxD,KACA/sD,EAAA2sD,OAAAhtD,MAAA5D,KAAA4D,MACAK,EAAA2sD,OAAA/sD,OAAA7D,KAAA6D,OAEA7D,KAAAqN,OAAA1G,SAAA2wE,WAAAnoE,MAAA,GAAA,EAAAo/D,EACAvuE,KAAAqN,OAAA1G,SAAA2wE,WAAAnoE,MAAA,GAAA,EAAAq/D,EAEAxuE,KAAAqN,OAAA1G,SAAAywE,OAAAjoE,MAAA,GAAAooE,EAAAtmB,GACAjxD,KAAAqN,OAAA1G,SAAAywE,OAAAjoE,MAAA,GAAAooE,EAAArmB,GACAlxD,KAAAqN,OAAA1G,SAAAywE,OAAAjoE,MAAA,GAAAooE,EAAA38B,GAAA28B,EAAAtmB,GACAjxD,KAAAqN,OAAA1G,SAAAywE,OAAAjoE,MAAA,GAAAooE,EAAAx8B,GAAAw8B,EAAArmB,GAEAlxD,KAAAqN,OAAA1G,SAAA0wE,WAAAloE,MAAA,GAAAnP,KAAAk3E,aAAAviE,GAAA6iE,EAAAx3E,KAAAi3E,UAAAtiE,GAAA3U,KAAAkxC,OACAlxC,KAAAqN,OAAA1G,SAAA0wE,WAAAloE,MAAA,GAAAnP,KAAAk3E,aAAAp/D,GAAA2/D,EAAAz3E,KAAAi3E,UAAAn/D,GAAA9X,KAAAmxC,QACAnxC,KAAAqN,OAAA1G,SAAA0wE,WAAAloE,MAAA,GAAAo/D,EAAAvuE,KAAAkxC,OAAAlxC,KAAAi3E,UAAAtiE,EACA3U,KAAAqN,OAAA1G,SAAA0wE,WAAAloE,MAAA,GAAAq/D,EAAAxuE,KAAAmxC,QAAAnxC,KAAAi3E,UAAAn/D,EAEA+wB,EAAAoV,kBAAApV,EAAAmD,QAAA0kB,QACA7nB,EAAAmD,QAAA0kB,OAAAhe,OAAA1yC,MAEAiE,EAAA+sD,KAAAumB,EACAtzE,EAAA2sD,OAAAhtD,MAAA4zE,EACAvzE,EAAA2sD,OAAA/sD,OAAA4zE,IASA5D,EAAAhxE,UAAA0xC,cAAA,SAAA1L,GAEA,GAAA5kC,GAAAjE,KAAAswD,QAEA,IAAArsD,EAAA65C,YAAAqZ,UAAA,CAKA,GAAAp/B,GAAA8Q,EAAA9Q,QACAtb,EAAAzc,KAAAkrC,eACAuE,EAAA5G,EAAA4G,WACAqO,EAAA75C,EAAA65C,YACA45B,EAAA13E,KAAAk3E,aAAAviE,EAAA3U,KAAAi3E,UAAAtiE,EAAA1Q,EAAA2sD,OAAAhtD,MACA+zE,EAAA33E,KAAAk3E,aAAAp/D,EAAA9X,KAAAi3E,UAAAn/D,EAAA7T,EAAA2sD,OAAA/sD,MAIA,KAAA7D,KAAAm3E,eACA,CAEA,GAAAjM,GAAA,GAAAzhC,GAAAgP,aAAAx0C,EAAA2sD,OAAAhtD,MAAAK,EAAA2sD,OAAA/sD,OAGA,YAAA7D,KAAA83C,MAEA93C,KAAAgkE,aAAAhkE,KAAA83C,OAEA93C,KAAAgkE,WAAAhkE,KAAA83C,KAEA93C,KAAAykE,cAAAhP,EAAAC,iBAAA11D,KAAAA,KAAA83C,OAEAozB,EAAAnzC,QAAA01B,UAAAztD,KAAAykE,cAAA,EAAA,IAIAyG,EAAAnzC,QAAA01B,UAAA3P,EAAAt2C,QAAAvD,EAAA2sD,OAAAj8C,GAAA1Q,EAAA2sD,OAAA94C,GAEA9X,KAAAm3E,eAAAjM,EAAAnzC,QAAA6/C,cAAA1M,EAAA9/D,OAAA,UAIA2sB,EAAAs1B,YAAArtD,KAAA4yC,WACA7a,EAAAye,aAAA/5B,EAAAhc,EAAAgvC,EACAhzB,EAAAzX,EAAAyqC,EACAhzB,EAAA4X,EAAAob,EACAhzB,EAAA4uB,EAAAoE,EACAhzB,EAAA0uB,GAAAsE,EACAhzB,EAAA2uB,GAAAqE,GAGA1X,EAAAiZ,MAAAhxC,KAAAi3E,UAAAtiE,EAAA3U,KAAAi3E,UAAAn/D,GAEAigB,EAAAgmB,UAAA25B,EAAA13E,KAAAutD,OAAA54C,GAAA3U,KAAAkxC,OACAymC,EAAA33E,KAAAutD,OAAAz1C,GAAA9X,KAAAmxC,QAGA,IAAAgN,GAAAtV,EAAAuV,WAAAp+C,KAAAg4C,UACAmG,KAAAtV,EAAA9Q,QAAAsmB,2BAEAtmB,EAAAsmB,yBAAAF,GAIApmB,EAAAk7B,UAAAjzD,KAAAm3E,eACAp/C,EAAAo7B,UAAAukB,GACAC,EACA33E,KAAAkxC,OAAAlxC,KAAAi3E,UAAAtiE,EACA3U,KAAAmxC,QAAAnxC,KAAAi3E,UAAAn/D,KAcA+7D,EAAAhxE,UAAAyoC,UAAA,WAEA,GA8BAzY,GACAE,EACAD,EACAE,EAjCApvB,EAAA5D,KAAAkxC,OACArtC,EAAA7D,KAAAmxC,QAEAmN,EAAA16C,GAAA,EAAA5D,KAAAutD,OAAA54C,GACA4pC,EAAA36C,GAAA5D,KAAAutD,OAAA54C,EAEA6pC,EAAA36C,GAAA,EAAA7D,KAAAutD,OAAAz1C,GACA2mC,EAAA56C,GAAA7D,KAAAutD,OAAAz1C,EAEAozB,EAAAlrC,KAAAkrC,eAEAzqC,EAAAyqC,EAAAzqC,EACAuE,EAAAkmC,EAAAlmC,EACAqvB,EAAA6W,EAAA7W,EACAgX,EAAAH,EAAAG,EACAF,EAAAD,EAAAC,GACAC,EAAAF,EAAAE,GAEAwP,EAAAn6C,EAAA89C,EAAAlqB,EAAAoqB,EAAAtT,EACA0P,EAAAxP,EAAAoT,EAAAz5C,EAAAu5C,EAAAnT,EAEA0P,EAAAr6C,EAAA69C,EAAAjqB,EAAAoqB,EAAAtT,EACA4P,EAAA1P,EAAAoT,EAAAz5C,EAAAs5C,EAAAlT,EAEAsT,EAAAj+C,EAAA69C,EAAAjqB,EAAAmqB,EAAArT,EACAwT,EAAAtT,EAAAmT,EAAAx5C,EAAAs5C,EAAAlT,EAEAwT,EAAAn+C,EAAA89C,EAAAlqB,EAAAmqB,EAAArT,EACA0T,EAAAxT,EAAAmT,EAAAx5C,EAAAu5C,EAAAnT,CAOAvY,GAAA+nB,EACA/nB,EAAAA,EAAAioB,EAAAA,EAAAjoB,EACAA,EAAAA,EAAA6rB,EAAAA,EAAA7rB,EACAA,EAAAA,EAAA+rB,EAAAA,EAAA/rB,EAEAC,EAAA+nB,EACA/nB,EAAAA,EAAAioB,EAAAA,EAAAjoB,EACAA,EAAAA,EAAA6rB,EAAAA,EAAA7rB,EACAA,EAAAA,EAAA+rB,EAAAA,EAAA/rB,EAEAC,EAAA6nB,EACA7nB,EAAA+nB,EAAA/nB,EAAA+nB,EAAA/nB,EACAA,EAAA2rB,EAAA3rB,EAAA2rB,EAAA3rB,EACAA,EAAA6rB,EAAA7rB,EAAA6rB,EAAA7rB,EAEAC,EAAA6nB,EACA7nB,EAAA+nB,EAAA/nB,EAAA+nB,EAAA/nB,EACAA,EAAA2rB,EAAA3rB,EAAA2rB,EAAA3rB,EACAA,EAAA6rB,EAAA7rB,EAAA6rB,EAAA7rB,CAEA,IAAAwf,GAAAxyC,KAAAszC,OAWA,OATAd,GAAA79B,EAAAke,EACA2f,EAAA5uC,MAAAmvB,EAAAF,EAEA2f,EAAA16B,EAAAgb,EACA0f,EAAA3uC,OAAAmvB,EAAAF,EAGA9yB,KAAA+yC,eAAAP,EAEAA,GAOAqhC,EAAAhxE,UAAAi8C,cAAA,SAAA1I,GAEAp2C,KAAAkrC,eAAAmL,aAAAD,EAAAwC,EAEA,IAGAiC,GAHAj3C,EAAA5D,KAAAkxC,OACArtC,EAAA7D,KAAAmxC,QACAyJ,GAAAh3C,EAAA5D,KAAAutD,OAAA54C,CAGA,OAAAikC,GAAAjkC,EAAAimC,GAAAhC,EAAAjkC,EAAAimC,EAAAh3C,IAEAi3C,GAAAh3C,EAAA7D,KAAAutD,OAAAz1C,EAEA8gC,EAAA9gC,EAAA+iC,GAAAjC,EAAA9gC,EAAA+iC,EAAAh3C,IAEA,GAIA,GAOAgwE,EAAAhxE,UAAA0C,QAAA,WACAkkC,EAAAyc,OAAArjD,UAAA0C,QAAAxE,KAAAf,MAEAA,KAAAi3E,UAAA,KACAj3E,KAAA63E,iBAAA,KACA73E,KAAAk3E,aAAA,KAEAl3E,KAAAgxD,KAAA,MAaA6iB,EAAAlP,UAAA,SAAAC,EAAAhhE,EAAAC,GAEA,GAAAI,GAAAwlC,EAAAoB,MAAAg6B,aAAAD,EAEA,KAAA3gE,EAEA,KAAA,IAAArD,OAAA,gBAAAgkE,EAAA,yCAAA5kE,KAGA,OAAA,IAAA6zE,GAAA5vE,EAAAL,EAAAC,IAeAgwE,EAAA/O,UAAA,SAAAC,EAAAnhE,EAAAC,EAAAmhE,EAAAzyB,GAEA,MAAA,IAAAshC,GAAApqC,EAAA/lC,QAAAohE,UAAAC,EAAAC,EAAAzyB,GAAA3uC,EAAAC,MAGA2oC,UAAA,GAAAsrC,8CAAA,KAAAC,KAAA,SAAAr3E,EAAAjB,EAAAD,GACA,GAAAiqC,GAAA/oC,EAAA,WACAgpC,EAAAD,EAAAC,cACAmH,EAAA,GAAApH,GAAAqH,MAEApH,GAAA7mC,UAAAm1E,gBAAA,EACAtuC,EAAA7mC,UAAAo1E,qBAAA,KACAvuC,EAAA7mC,UAAAq1E,sBAAA,KAEAxuC,EAAA7mC,UAAAs1E,yBAAA,KACAzuC,EAAA7mC,UAAAu1E,iBAAA,KACA1uC,EAAA7mC,UAAAw1E,iBAAA,KACA3uC,EAAA7mC,UAAAy1E,cAAA,KAEA/oE,OAAAwhC,iBAAArH,EAAA7mC,WAUA01E,eACAvoE,IAAA,WAEA,MAAAhQ,MAAAg4E,gBAEA9nE,IAAA,SAAAf,GAEAnP,KAAAg4E,iBAAA7oE,IAKAnP,KAAAg4E,eAAA7oE,EAEAA,GAEAnP,KAAAi4E,qBAAAj4E,KAAA0zC,YACA1zC,KAAAk4E,sBAAAl4E,KAAAw0C,aAEAx0C,KAAAm4E,yBAAAn4E,KAAA2yC,gBACA3yC,KAAAw4E,mBAAAx4E,KAAAsrC,UAEAtrC,KAAAq4E,iBAAAr4E,KAAAuF,QAEAvF,KAAAy4E,uBAAAz4E,KAAA8+C,cAEA9+C,KAAA0zC,YAAA1zC,KAAA04E,mBACA14E,KAAAw0C,aAAAx0C,KAAA24E,oBAEA34E,KAAAuF,QAAAvF,KAAA44E,wBAKA54E,KAAAs4E,eAEAt4E,KAAA64E,8BAGA74E,KAAA0zC,YAAA1zC,KAAAi4E,qBACAj4E,KAAAw0C,aAAAx0C,KAAAk4E,sBACAl4E,KAAAsrC,UAAAtrC,KAAAw4E,mBAEAx4E,KAAAuF,QAAAvF,KAAAq4E,iBAEAr4E,KAAA2yC,gBAAA3yC,KAAAm4E,yBACAn4E,KAAA8+C,cAAA9+C,KAAAy4E,6BAWA/uC,EAAA7mC,UAAA61E,mBAAA,SAAA7vC,IAEA7oC,KAAAkqC,SAAAlqC,KAAA4yC,YAAA,IAAA5yC,KAAA2zC,aAKA3zC,KAAA84E,yBAAAjwC,GAEA7oC,KAAAs4E,cAAA1lC,WAAA5yC,KAAA4yC,WAEA/J,EAAAoV,kBAAApV,EAAAmD,QAAA0kB,QACA7nB,EAAAmD,QAAA0kB,OAAAhe,OAAA1yC,KAAAs4E,iBASA5uC,EAAA7mC,UAAAi2E,yBAAA,SAAAjwC,GAEA,IAAA7oC,KAAAs4E,cAAA,CAMAzvC,EAAAiL,gBAAAC,OAKA,IAAAvB,GAAAxyC,KAAAixC,iBAAA6H,OAGA,IAAA94C,KAAA6zC,SACA,CACA,GAAAmL,GAAAh/C,KAAA6zC,SAAA,GAAAmL,OACAxM,GAAA79B,GAAAqqC,EACAxM,EAAA16B,GAAAknC,EAEAxM,EAAA5uC,OAAA,EAAAo7C,EACAxM,EAAA3uC,QAAA,EAAAm7C,EAKA,GAAA+5B,GAAAlwC,EAAAmnB,oBAEAqO,EAAAx1B,EAAAmL,cAAAslB,YAGA7mB,EAAA,GAAAhJ,GAAAmH,cAAA/H,EAAA,EAAA2J,EAAA5uC,MAAA,EAAA4uC,EAAA3uC,QAGA0mB,EAAAsmB,CAEAtmB,GAAA4gB,IAAAqH,EAAA79B,EACA4V,EAAA6gB,IAAAoH,EAAA16B,EAKA9X,KAAA0zC,YAAA1zC,KAAAi4E,qBAEAxlC,EAAAC,OAAA1yC,KAAAuqB,GAAA,GAAA,GAGAse,EAAAszB,gBAAA4c,GACAlwC,EAAAmL,cAAAslB,YAAA+E,EAEAr+D,KAAA0zC,YAAA1zC,KAAA04E,mBACA14E,KAAA2yC,gBAAA3yC,KAAAg2C,6BACAh2C,KAAAsrC,UAAAtrC,KAAAg5E,iBAIAh5E,KAAAs4E,cAAA,GAAA7uC,GAAAyc,OAAAzT,GACAzyC,KAAAs4E,cAAAptC,eAAAlrC,KAAAkrC,eACAlrC,KAAAs4E,cAAA/qB,OAAA54C,IAAA69B,EAAA79B,EAAA69B,EAAA5uC,OACA5D,KAAAs4E,cAAA/qB,OAAAz1C,IAAA06B,EAAA16B,EAAA06B,EAAA3uC,QAGA7D,KAAA2yC,kBAGA3yC,KAAA8+C,cAAA9+C,KAAAs4E,cAAAx5B,cAAA97C,KAAAhD,KAAAs4E,iBASA5uC,EAAA7mC,UAAA81E,oBAAA,SAAA9vC,IAEA7oC,KAAAkqC,SAAAlqC,KAAA4yC,YAAA,IAAA5yC,KAAA2zC,aAKA3zC,KAAAi5E,+BAAApwC,GAEA7oC,KAAAs4E,cAAA1lC,WAAA5yC,KAAA4yC,WAEA5yC,KAAAs4E,cAAA9jC,aAAA3L,KAUAa,EAAA7mC,UAAAo2E,+BAAA,SAAApwC,GAEA,IAAA7oC,KAAAs4E,cAAA,CAMA,GAAA9lC,GAAAxyC,KAAAixC,iBAEA8nC,EAAAlwC,EAAA9Q,QAEA0a,EAAA,GAAAhJ,GAAAmH,cAAA/H,EAAA,EAAA2J,EAAA5uC,MAAA,EAAA4uC,EAAA3uC,QAGA0mB,EAAAsmB,CAEAtmB,GAAA4gB,IAAAqH,EAAA79B,EACA4V,EAAA6gB,IAAAoH,EAAA16B,EAGA9X,KAAAw0C,aAAAx0C,KAAAk4E,sBAEAzlC,EAAAC,OAAA1yC,KAAAuqB,GAAA,GAGAse,EAAA9Q,QAAAghD,EAEA/4E,KAAAw0C,aAAAx0C,KAAA24E,oBACA34E,KAAA2yC,gBAAA3yC,KAAAg2C,6BACAh2C,KAAAsrC,UAAAtrC,KAAAg5E,iBAIAh5E,KAAAs4E,cAAA,GAAA7uC,GAAAyc,OAAAzT,GACAzyC,KAAAs4E,cAAAptC,eAAAlrC,KAAAkrC,eACAlrC,KAAAs4E,cAAA/qB,OAAA54C,IAAA69B,EAAA79B,EAAA69B,EAAA5uC,OACA5D,KAAAs4E,cAAA/qB,OAAAz1C,IAAA06B,EAAA16B,EAAA06B,EAAA3uC,QAEA7D,KAAA2yC,kBAEA3yC,KAAA8+C,cAAA9+C,KAAAs4E,cAAAx5B,cAAA97C,KAAAhD,KAAAs4E,iBAQA5uC,EAAA7mC,UAAAm2E,iBAAA,WAIA,MAFAh5E,MAAAs4E,cAAAvlC,eAAA,KAEA/yC,KAAAs4E,cAAAhtC,aAQA5B,EAAA7mC,UAAAg2E,4BAAA,WAEA74E,KAAAs4E,cAAAhoB,SAAA/qD,UACAvF,KAAAs4E,cAAA,MAGA5uC,EAAA7mC,UAAA+1E,sBAAA,WAEA54E,KAAAu4E,eAAA,EACAv4E,KAAAq4E,sBAGA7rC,UAAA,KAAA0sC,KAAA,SAAAx4E,EAAAjB,EAAAD,GACA,GAAAiqC,GAAA/oC,EAAA,UAQA+oC,GAAAC,cAAA7mC,UAAA2L,KAAA,KASAi7B,EAAAiH,UAAA7tC,UAAAs2E,eAAA,SAAA3qE,GAEA,IAAA,GAAA7N,GAAA,EAAAA,EAAAX,KAAAqpC,SAAAroC,OAAAL,IAEA,GAAAX,KAAAqpC,SAAA1oC,GAAA6N,OAAAA,EAEA,MAAAxO,MAAAqpC,SAAA1oC,EAGA,OAAA,SAGA6rC,UAAA,KAAA4sC,KAAA,SAAA14E,EAAAjB,EAAAD,GACA,GAAAiqC,GAAA/oC,EAAA,UASA+oC,GAAAC,cAAA7mC,UAAAw2E,kBAAA,SAAAjjC,GAiBA,MAfAA,GAAAA,GAAA,GAAA3M,GAAAoP,MAEA74C,KAAAsxC,QAEAtxC,KAAAg2C,+BAEAI,EAAAzhC,EAAA3U,KAAAkrC,eAAAC,GACAiL,EAAAt+B,EAAA9X,KAAAkrC,eAAAE,KAIAgL,EAAAzhC,EAAA3U,KAAA+oC,SAAAp0B,EACAyhC,EAAAt+B,EAAA9X,KAAA+oC,SAAAjxB,GAGAs+B,KAGA5J,UAAA,KAAA8sC,KAAA,SAAA54E,EAAAjB,EAAAD,GAQAkB,EAAA,mBACAA,EAAA,oBACAA,EAAA,uBAKAjB,EAAAD,SACAo0E,UAAAlzE,EAAA,eACAmzE,aAAAnzE,EAAA,kBACAozE,WAAApzE,EAAA,mBAGA64E,eAAA,IAAAC,cAAA,IAAAC,iBAAA,IAAAC,kBAAA,IAAAC,mBAAA,IAAAC,sBAAA,MAAAC,KAAA,SAAAn5E,EAAAjB,EAAAD,GAmBA,QAAAs6E,KAEArwC,EAAAqd,eAAA/lD,KAAAf,KAEA,KAEA,+gCAGAw8D,YAAAn6D,KAAA,MAAA8M,MAAA,GAAAtH,eAAA,EAAA,EAAA,EAAA,KACAkyE,WAAA13E,KAAA,KAAA8M,MAAA,KA5BA,GAAAs6B,GAAA/oC,EAAA,aAiCAo5E,GAAAj3E,UAAA0M,OAAA/L,OAAAimC,EAAAqd,eAAAjkD,WACAi3E,EAAAj3E,UAAAmH,YAAA8vE,EACAr6E,EAAAD,QAAAs6E,EAEAvqE,OAAAwhC,iBAAA+oC,EAAAj3E,WAOAkI,MACAiF,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAozE,UAAA5qE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAozE,UAAA5qE,MAAAA,QAKA6qE,aAAA,KAAAC,KAAA,SAAAv5E,EAAAjB,EAAAD,GAaA,QAAA06E,KAEAzwC,EAAAqd,eAAA/lD,KAAAf,MAEAA,KAAAm6E,YAAA,GAAAC,GACAp6E,KAAAq6E,YAAA,GAAAC,GAEAt6E,KAAAu6E,cAAA,GAAA9wC,GAAAqd,eAnBA,GAAArd,GAAA/oC,EAAA,cACA05E,EAAA15E,EAAA,uBACA45E,EAAA55E,EAAA,sBAoBAw5E,GAAAr3E,UAAA0M,OAAA/L,OAAAimC,EAAAqd,eAAAjkD,WACAq3E,EAAAr3E,UAAAmH,YAAAkwE,EACAz6E,EAAAD,QAAA06E,EAEAA,EAAAr3E,UAAAg4D,YAAA,SAAAhyB,EAAAtf,EAAArB,GAEA,GAAAkxC,GAAAvwB,EAAAmL,cAAAkoB,iBAAA,EAGAl8D,MAAAu6E,cAAA1f,YAAAhyB,EAAAtf,EAAArB,GAEAloB,KAAAm6E,YAAAtf,YAAAhyB,EAAAtf,EAAA6vC,GAEAvwB,EAAAgY,iBAAAC,aAAArX,EAAAiE,YAAAI,QAEA9tC,KAAAq6E,YAAAxf,YAAAhyB,EAAAuwB,EAAAlxC,GAEA2gB,EAAAgY,iBAAAC,aAAArX,EAAAiE,YAAAC,QAEA9E,EAAAmL,cAAA0oB,mBAAAtD,IAGA7pD,OAAAwhC,iBAAAmpC,EAAAr3E,WAQA23E,MACAxqE,IAAA,WAEA,MAAAhQ,MAAAm6E,YAAAK,MAEAtqE,IAAA,SAAAf,GAEAnP,KAAAm6E,YAAAK,KAAAx6E,KAAAq6E,YAAAG,KAAArrE,IAWAsrE,OACAzqE,IAAA,WAEA,MAAAhQ,MAAAm6E,YAAAK,MAEAtqE,IAAA,SAAAf,GAEAnP,KAAAm6E,YAAAK,KAAArrE,IAWAurE,OACA1qE,IAAA,WAEA,MAAAhQ,MAAAq6E,YAAAG,MAEAtqE,IAAA,SAAAf,GAEAnP,KAAAq6E,YAAAG,KAAArrE,QAKA6qE,aAAA,GAAAW,sBAAA,IAAAC,sBAAA,MAAAC,KAAA,SAAAn6E,EAAAjB,EAAAD,GAaA,QAAAs7E,GAAAC,EAAAC,GAEAvxC,EAAAqd,eAAA/lD,KAAAf,KAEA,0xBAEA,yhBAGAi7E,UAAA54E,KAAA,KAAA8M,MAAA,GACA4rE,MAAA14E,KAAA,KAAA8M,MAAA4rE,GAAA,GACAC,MAAA34E,KAAA,KAAA8M,MAAA6rE,GAAA,KAIAh7E,KAAAu6E,cAAA,GAAA9wC,GAAAqd,eAQA9mD,KAAAk7E,OAAA,EAQAl7E,KAAA+6E,KAAAA,GAAA,EAQA/6E,KAAAg7E,KAAAA,GAAA,EAEAh7E,KAAAi7E,SAAA,EArDA,GAAAxxC,GAAA/oC,EAAA,aAwDAo6E,GAAAj4E,UAAA0M,OAAA/L,OAAAimC,EAAAqd,eAAAjkD,WACAi4E,EAAAj4E,UAAAmH,YAAA8wE,EACAr7E,EAAAD,QAAAs7E,EAEAA,EAAAj4E,UAAAg4D,YAAA,SAAAhyB,EAAAtf,EAAArB,EAAAnjB,GAEA,GAAAsI,GAAArN,KAAA46D,UAAA/xB,EAIA,IAFA7oC,KAAA2G,SAAAs0E,SAAA9rE,MAAAnP,KAAAi7E,SAAA,EAAAj7E,KAAAk7E,QAAA3xD,EAAA+jC,MAAA1pD,MAAA2lB,EAAAxe,KAAAnH,OAEA,IAAA5D,KAAAk7E,OACAryC,EAAAmL,cAAA6mB,YAAAxtD,EAAAkc,EAAArB,EAAAnjB,OACA,CACA,GAAAq0D,GAAAvwB,EAAAmL,cAAAkoB,iBAAA,EAEArzB,GAAAmL,cAAA6mB,YAAAxtD,EAAAkc,EAAA6vC,EAAAr0D,EAEA,KAAA,GAAApE,GAAA,EAAAA,EAAAX,KAAAk7E,OAAA,EAAAv6E,IAGAkoC,EAAAmL,cAAA6mB,YAAAxtD,EAAA+rD,EAAAA,EAAAr0D,EAGA8jC,GAAAmL,cAAA6mB,YAAAxtD,EAAA+rD,EAAAlxC,EAAAnjB,GAEA8jC,EAAAmL,cAAA0oB,mBAAAtD,KAKA7pD,OAAAwhC,iBAAA+pC,EAAAj4E,WAQA23E,MACAxqE,IAAA,WAEA,MAAAhQ,MAAAi7E,UAEA/qE,IAAA,SAAAf,GAEAnP,KAAAg/C,QAAA,GAAA7vC,EACAnP,KAAAi7E,SAAA9rE,IAUA4rE,MACA/qE,IAAA,WAEA,MAAAhQ,MAAA+6E,MAEA7qE,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAo0E,KAAA5rE,MAAAA,IAUA6rE,MACAhrE,IAAA,WAEA,MAAAhQ,MAAAg7E,MAEA9qE,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAq0E,KAAA7rE,MAAAA,QAKA6qE,aAAA,KAAAmB,KAAA,SAAAz6E,EAAAjB,EAAAD,GAaA,QAAA47E,KAEA3xC,EAAAqd,eAAA/lD,KAAAf,MAEAA,KAAAm6E,YAAA,GAAAC,GACAp6E,KAAAq6E,YAAA,GAAAC,GAjBA,GAAA7wC,GAAA/oC,EAAA,cACA05E,EAAA15E,EAAA,iBACA45E,EAAA55E,EAAA,gBAkBA06E,GAAAv4E,UAAA0M,OAAA/L,OAAAimC,EAAAqd,eAAAjkD,WACAu4E,EAAAv4E,UAAAmH,YAAAoxE,EACA37E,EAAAD,QAAA47E,EAEAA,EAAAv4E,UAAAg4D,YAAA,SAAAhyB,EAAAtf,EAAArB,GAEA,GAAAkxC,GAAAvwB,EAAAmL,cAAAkoB,iBAAA,EAEAl8D,MAAAm6E,YAAAtf,YAAAhyB,EAAAtf,EAAA6vC,GACAp5D,KAAAq6E,YAAAxf,YAAAhyB,EAAAuwB,EAAAlxC,GAEA2gB,EAAAmL,cAAA0oB,mBAAAtD,IAGA7pD,OAAAwhC,iBAAAqqC,EAAAv4E,WAQA23E,MACAxqE,IAAA,WAEA,MAAAhQ,MAAAm6E,YAAAK,MAEAtqE,IAAA,SAAAf,GAEAnP,KAAAg/C,QAAA,GAAAxpC,KAAAygB,IAAA9mB,GACAnP,KAAAm6E,YAAAK,KAAAx6E,KAAAq6E,YAAAG,KAAArrE,IAWA+rE,QACAlrE,IAAA,WAEA,MAAAhQ,MAAAm6E,YAAAe,QAEAhrE,IAAA,SAAAf,GAEAnP,KAAAm6E,YAAAe,OAAAl7E,KAAAq6E,YAAAa,OAAA/rE,IAWAsrE,OACAzqE,IAAA,WAEA,MAAAhQ,MAAAm6E,YAAAK,MAEAtqE,IAAA,SAAAf,GAEAnP,KAAAm6E,YAAAK,KAAArrE,IAWAurE,OACA1qE,IAAA,WAEA,MAAAhQ,MAAAq6E,YAAAG,MAEAtqE,IAAA,SAAAf,GAEAnP,KAAAq6E,YAAAG,KAAArrE,QAKA6qE,aAAA,GAAAqB,gBAAA,IAAAC,gBAAA,MAAAC,KAAA,SAAA76E,EAAAjB,EAAAD,GAYA,QAAA46E,KAEA3wC,EAAAqd,eAAA/lD,KAAAf,KAEA,22BAEA,uwBAGAi7E,UAAA54E,KAAA,KAAA8M,MAAA,KAUAnP,KAAAk7E,OAAA,EAEAl7E,KAAAi7E,SAAA,EAhCA,GAAAxxC,GAAA/oC,EAAA,aAmCA05E,GAAAv3E,UAAA0M,OAAA/L,OAAAimC,EAAAqd,eAAAjkD,WACAu3E,EAAAv3E,UAAAmH,YAAAowE,EACA36E,EAAAD,QAAA46E,EAEAA,EAAAv3E,UAAAg4D,YAAA,SAAAhyB,EAAAtf,EAAArB,EAAAnjB,GAEA,GAAAsI,GAAArN,KAAA46D,UAAA/xB,EAIA,IAFA7oC,KAAA2G,SAAAs0E,SAAA9rE,MAAAnP,KAAAi7E,SAAA,EAAAj7E,KAAAk7E,QAAA3xD,EAAA+jC,MAAA1pD,MAAA2lB,EAAAxe,KAAAnH,OAEA,IAAA5D,KAAAk7E,OAEAryC,EAAAmL,cAAA6mB,YAAAxtD,EAAAkc,EAAArB,EAAAnjB,OAGA,CAKA,IAAA,GAJAq0D,GAAAvwB,EAAAmL,cAAAkoB,iBAAA,GACAsf,EAAAjyD,EACAkyD,EAAAriB,EAEAz4D,EAAA,EAAAA,EAAAX,KAAAk7E,OAAA,EAAAv6E,IACA,CACAkoC,EAAAmL,cAAA6mB,YAAAxtD,EAAAmuE,EAAAC,GAAA,EAEA,IAAA5e,GAAA4e,CACAA,GAAAD,EACAA,EAAA3e,EAGAh0B,EAAAmL,cAAA6mB,YAAAxtD,EAAAmuE,EAAAtzD,EAAAnjB,GAEA8jC,EAAAmL,cAAA0oB,mBAAAtD,KAKA7pD,OAAAwhC,iBAAAqpC,EAAAv3E,WAQA23E,MACAxqE,IAAA,WAEA,MAAAhQ,MAAAi7E,UAEA/qE,IAAA,SAAAf,GAEAnP,KAAAg/C,QAAA,GAAAxpC,KAAAygB,IAAA9mB,GACAnP,KAAAi7E,SAAA9rE,QAKA6qE,aAAA,KAAA0B,KAAA,SAAAh7E,EAAAjB,EAAAD,GAYA,QAAA86E,KAEA7wC,EAAAqd,eAAA/lD,KAAAf,KAEA,02BAEA,uwBAGAi7E,UAAA54E,KAAA,KAAA8M,MAAA,KAIAnP,KAAAk7E,OAAA,EACAl7E,KAAAi7E,SAAA,EAzBA,GAAAxxC,GAAA/oC,EAAA,aA4BA45E,GAAAz3E,UAAA0M,OAAA/L,OAAAimC,EAAAqd,eAAAjkD,WACAy3E,EAAAz3E,UAAAmH,YAAAswE,EACA76E,EAAAD,QAAA86E,EAEAA,EAAAz3E,UAAAg4D,YAAA,SAAAhyB,EAAAtf,EAAArB,EAAAnjB,GAEA,GAAAsI,GAAArN,KAAA46D,UAAA/xB,EAIA,IAFA7oC,KAAA2G,SAAAs0E,SAAA9rE,MAAAqG,KAAAygB,IAAAj2B,KAAAi7E,UAAA,EAAAj7E,KAAAk7E,QAAA3xD,EAAA+jC,MAAAzpD,OAAA0lB,EAAAxe,KAAAlH,QAEA,IAAA7D,KAAAk7E,OAEAryC,EAAAmL,cAAA6mB,YAAAxtD,EAAAkc,EAAArB,EAAAnjB,OAGA,CAKA,IAAA,GAJAq0D,GAAAvwB,EAAAmL,cAAAkoB,iBAAA,GACAsf,EAAAjyD,EACAkyD,EAAAriB,EAEAz4D,EAAA,EAAAA,EAAAX,KAAAk7E,OAAA,EAAAv6E,IACA,CACAkoC,EAAAmL,cAAA6mB,YAAAxtD,EAAAmuE,EAAAC,GAAA,EAEA,IAAA5e,GAAA4e,CACAA,GAAAD,EACAA,EAAA3e,EAGAh0B,EAAAmL,cAAA6mB,YAAAxtD,EAAAmuE,EAAAtzD,EAAAnjB,GAEA8jC,EAAAmL,cAAA0oB,mBAAAtD,KAKA7pD,OAAAwhC,iBAAAupC,EAAAz3E,WAQA23E,MACAxqE,IAAA,WAEA,MAAAhQ,MAAAi7E,UAEA/qE,IAAA,SAAAf,GAEAnP,KAAAg/C,QAAA,GAAAxpC,KAAAygB,IAAA9mB,GACAnP,KAAAi7E,SAAA9rE,QAKA6qE,aAAA,KAAA2B,KAAA,SAAAj7E,EAAAjB,EAAAD,GAYA,QAAAo8E,KAEAnyC,EAAAqd,eAAA/lD,KAAAf,KAEA,KAEA,gyBAGA8oB,OAAAzmB,KAAA,KAAA8M,OAAAwF,EAAA,GAAAmD,EAAA,MApBA,GAAA2xB,GAAA/oC,EAAA,aAyBAk7E,GAAA/4E,UAAA0M,OAAA/L,OAAAimC,EAAAqd,eAAAjkD,WACA+4E,EAAA/4E,UAAAmH,YAAA4xE,EACAn8E,EAAAD,QAAAo8E,IAEA5B,aAAA,KAAA6B,KAAA,SAAAn7E,EAAAjB,EAAAD,GAoBA,QAAAs8E,KAEAryC,EAAAqd,eAAA/lD,KAAAf,KAEA,KAEA,m9BAGAuqB,GACAloB,KAAA,MAAA8M,OACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,MAjCA,GAAAs6B,GAAA/oC,EAAA,aAwCAo7E,GAAAj5E,UAAA0M,OAAA/L,OAAAimC,EAAAqd,eAAAjkD,WACAi5E,EAAAj5E,UAAAmH,YAAA8xE,EACAr8E,EAAAD,QAAAs8E,EASAA,EAAAj5E,UAAAk5E,YAAA,SAAA9lC,EAAA+lC,GAEAA,IAAAA,CAEA,IAAAC,GAAAhmC,CAEA+lC,KACAh8E,KAAAk8E,UAAAD,EAAAj8E,KAAA2G,SAAA4jB,EAAApb,MAAA8mC,GACAgmC,EAAAj8E,KAAAm8E,aAAAF,IAIAj8E,KAAA2G,SAAA4jB,EAAApb,MAAA8sE,GAWAH,EAAAj5E,UAAAq5E,UAAA,SAAA1yD,EAAA/oB,EAAAuE,GA+BA,MA3BAwkB,GAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 64e912a..9199f9d 100644 --- a/src/core/display/Container.js +++ b/src/core/display/Container.js @@ -399,7 +399,7 @@ this.children[i].updateTransform(); } - this.dirtyTransform = false; + this.transform.dirty = false; }; // performance increase to avoid using call.. (10x faster) diff --git a/src/core/display/DisplayObject.js b/src/core/display/DisplayObject.js index 06bd523..3cc5c2f 100644 --- a/src/core/display/DisplayObject.js +++ b/src/core/display/DisplayObject.js @@ -2,7 +2,7 @@ RenderTexture = require('../textures/RenderTexture'), EventEmitter = require('eventemitter3'), CONST = require('../const'), - Transform = require('./Transform'), + Transform = require('./TransformStatic'), _tempMatrix = new math.Matrix(), _tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1, children:[]}; @@ -114,22 +114,6 @@ */ this.filterArea = null; - /**xww - * cached sin rotation - * - * @member {number} - * @private - */ - this._sr = 0; - - /** - * cached cos rotation - * - * @member {number} - * @private - */ - this._cr = 1; - /** * The original, cached bounds of the object * @@ -154,7 +138,7 @@ */ this._mask = null; - this.dirtyTransform = true; + // this.dirtyTransform = true; } // constructor @@ -238,9 +222,9 @@ set: function (value) { this._rotation = value; - this.dirtyTransform = true; - this._sr = Math.sin(value); - this._cr = Math.cos(value); + this.transform.dirty = true; + this.transform._sr = Math.sin(value); + this.transform._cr = Math.cos(value); } }, @@ -344,6 +328,7 @@ */ DisplayObject.prototype.updateTransform = function () { + //if(this.transform.dirty || parent.transform.dirty) this.transform.updateTransform(this.parent.transform); // multiply the alphas.. this.worldAlpha = this.alpha * this.parent.worldAlpha; diff --git a/src/core/display/ObservablePoint.js b/src/core/display/ObservablePoint.js new file mode 100644 index 0000000..fd7a04b --- /dev/null +++ b/src/core/display/ObservablePoint.js @@ -0,0 +1,68 @@ +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents + * the horizontal axis and y represents the vertical axis. + * + * @class + * @memberof PIXI + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +function ObservablePoint(transform, x, y) +{ + this._x = x || 0; + this._y = y || 0; + + this.transform = transform; +} + +ObservablePoint.prototype.constructor = ObservablePoint; +module.exports = ObservablePoint; + + + +Object.defineProperties(ObservablePoint.prototype, { + /** + * The position of the displayObject on the x axis relative to the local coordinates of the parent. + * + * @member {number} + * @memberof PIXI.DisplayObject# + */ + x: { + get: function () + { + return this._x; + }, + set: function (value) + { + this._x = value; + this.transform.dirty = true; + } + }, + + y: { + get: function () + { + return this._y; + }, + set: function (value) + { + this._y = value; + this.transform.dirty = true; + } + } +}); + +/** + * Sets the point to a new x and y position. + * If y is omitted, both x and y will be set to x. + * + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +ObservablePoint.prototype.set = function (x, y) +{ + this._x = x || 0; + this._y = y || ( (y !== 0) ? this._x : 0 ); + + this.transform.dirty = true; +}; diff --git a/src/core/display/Transform.js b/src/core/display/Transform.js index eefc915..d57503d 100644 --- a/src/core/display/Transform.js +++ b/src/core/display/Transform.js @@ -36,34 +36,21 @@ var wt = this.worldTransform; var lt = this.localTransform; + // get the matrix values of the displayobject based on its transform properties.. + lt.a = this._cr * this.scale.x; + lt.b = this._sr * this.scale.x; + lt.c = -this._sr * this.scale.y; + lt.d = this._cr * this.scale.y; + lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c); + lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d); + // concat the parent matrix with the objects transform. + wt.a = lt.a * pt.a + lt.b * pt.c; + wt.b = lt.a * pt.b + lt.b * pt.d; + wt.c = lt.c * pt.a + lt.d * pt.c; + wt.d = lt.c * pt.b + lt.d * pt.d; + wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; + wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; - if(this.dirty) - { - // get the matrix values of the displayobject based on its transform properties.. - lt.a = this._cr * this.scale.x; - lt.b = this._sr * this.scale.x; - lt.c = -this._sr * this.scale.y; - lt.d = this._cr * this.scale.y; - lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c); - lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d); - } - - if(this.dirty || parent.dirty) - { - // concat the parent matrix with the objects transform. - wt.a = lt.a * pt.a + lt.b * pt.c; - wt.b = lt.a * pt.b + lt.b * pt.d; - wt.c = lt.c * pt.a + lt.d * pt.c; - wt.d = lt.c * pt.b + lt.d * pt.d; - wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; - wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; - - // this.dirty = false; - // return true; - } - -// this.dirty = false; - // return false; } module.exports = Transform; diff --git a/bin/pixi.js b/bin/pixi.js index df52170..915f5c1 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -1,7 +1,7 @@ /** * @license * pixi.js - v3.0.10-dev - * Compiled 2016-01-18T21:33:26.540Z + * Compiled 2016-01-18T22:34:48.843Z * * pixi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -8072,7 +8072,7 @@ core.CanvasRenderer.registerPlugin('accessibility', AccessibilityManager); -},{"../core":53,"./accessibleTarget":36}],36:[function(require,module,exports){ +},{"../core":54,"./accessibleTarget":36}],36:[function(require,module,exports){ /** * Default property values of accessible objects * used by {@link PIXI.accessibility.AccessibilityManager}. @@ -8759,7 +8759,7 @@ this.children[i].updateTransform(); } - this.dirtyTransform = false; + this.transform.dirty = false; }; // performance increase to avoid using call.. (10x faster) @@ -9005,12 +9005,12 @@ this.children = null; }; -},{"../math":56,"../textures/RenderTexture":100,"../utils":107,"./DisplayObject":40}],40:[function(require,module,exports){ +},{"../math":57,"../textures/RenderTexture":101,"../utils":108,"./DisplayObject":40}],40:[function(require,module,exports){ var math = require('../math'), RenderTexture = require('../textures/RenderTexture'), EventEmitter = require('eventemitter3'), CONST = require('../const'), - Transform = require('./Transform'), + Transform = require('./TransformStatic'), _tempMatrix = new math.Matrix(), _tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1, children:[]}; @@ -9122,22 +9122,6 @@ */ this.filterArea = null; - /**xww - * cached sin rotation - * - * @member {number} - * @private - */ - this._sr = 0; - - /** - * cached cos rotation - * - * @member {number} - * @private - */ - this._cr = 1; - /** * The original, cached bounds of the object * @@ -9162,7 +9146,7 @@ */ this._mask = null; - this.dirtyTransform = true; + // this.dirtyTransform = true; } // constructor @@ -9246,9 +9230,9 @@ set: function (value) { this._rotation = value; - this.dirtyTransform = true; - this._sr = Math.sin(value); - this._cr = Math.cos(value); + this.transform.dirty = true; + this.transform._sr = Math.sin(value); + this.transform._cr = Math.cos(value); } }, @@ -9352,6 +9336,7 @@ */ DisplayObject.prototype.updateTransform = function () { + //if(this.transform.dirty || parent.transform.dirty) this.transform.updateTransform(this.parent.transform); // multiply the alphas.. this.worldAlpha = this.alpha * this.parent.worldAlpha; @@ -9554,9 +9539,79 @@ this.filterArea = null; }; -},{"../const":38,"../math":56,"../textures/RenderTexture":100,"./Transform":41,"eventemitter3":25}],41:[function(require,module,exports){ -var math = require('../math'); +},{"../const":38,"../math":57,"../textures/RenderTexture":101,"./TransformStatic":42,"eventemitter3":25}],41:[function(require,module,exports){ +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents + * the horizontal axis and y represents the vertical axis. + * + * @class + * @memberof PIXI + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +function ObservablePoint(transform, x, y) +{ + this._x = x || 0; + this._y = y || 0; + this.transform = transform; +} + +ObservablePoint.prototype.constructor = ObservablePoint; +module.exports = ObservablePoint; + + + +Object.defineProperties(ObservablePoint.prototype, { + /** + * The position of the displayObject on the x axis relative to the local coordinates of the parent. + * + * @member {number} + * @memberof PIXI.DisplayObject# + */ + x: { + get: function () + { + return this._x; + }, + set: function (value) + { + this._x = value; + this.transform.dirty = true; + } + }, + + y: { + get: function () + { + return this._y; + }, + set: function (value) + { + this._y = value; + this.transform.dirty = true; + } + } +}); + +/** + * Sets the point to a new x and y position. + * If y is omitted, both x and y will be set to x. + * + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +ObservablePoint.prototype.set = function (x, y) +{ + this._x = x || 0; + this._y = y || ( (y !== 0) ? this._x : 0 ); + + this.transform.dirty = true; +}; + +},{}],42:[function(require,module,exports){ +var math = require('../math'); +var ObservablePoint = require('./ObservablePoint'); /** * The Point object represents a location in a two-dimensional coordinate system, where x represents @@ -9572,17 +9627,19 @@ this.worldTransform = new math.Matrix(); this.localTransform = new math.Matrix(); - this.position = new math.Point(0.0); - this.scale = new math.Point(1,1); - this.pivot = new math.Point(0.0); - this.skew = new math.Point(0.0); + this.position = new ObservablePoint(this, 0); + this.scale = new ObservablePoint(this,1, 1); + this.pivot = new ObservablePoint(this, 0, 0); + this.skew = new ObservablePoint(this, 0,0); this.rotation = 0; this._sr = Math.sin(0); this._cr = Math.cos(0); - this.dirty = true; + + + this.updated = true; } Transform.prototype.constructor = Transform; @@ -9593,19 +9650,20 @@ var wt = this.worldTransform; var lt = this.localTransform; - if(this.dirty) { // get the matrix values of the displayobject based on its transform properties.. - lt.a = this._cr * this.scale.x; - lt.b = this._sr * this.scale.x; - lt.c = -this._sr * this.scale.y; - lt.d = this._cr * this.scale.y; - lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c); - lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d); + lt.a = this._cr * this.scale._x; + lt.b = this._sr * this.scale._x; + lt.c = -this._sr * this.scale._y; + lt.d = this._cr * this.scale._y; + lt.tx = this.position._x - (this.pivot._x * lt.a + this.pivot._y * lt.c); + lt.ty = this.position._y - (this.pivot._x * lt.b + this.pivot._y * lt.d); } - if(this.dirty || parent.dirty) + this.updated = this.dirty || parentTransform.dirty; + + if(this.updated) { // concat the parent matrix with the objects transform. wt.a = lt.a * pt.a + lt.b * pt.c; @@ -9613,21 +9671,16 @@ wt.c = lt.c * pt.a + lt.d * pt.c; wt.d = lt.c * pt.b + lt.d * pt.d; wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; - wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; - - // this.dirty = false; - // return true; + wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; } - -// this.dirty = false; - // return false; + } module.exports = Transform; -},{"../math":56}],42:[function(require,module,exports){ +},{"../math":57,"./ObservablePoint":41}],43:[function(require,module,exports){ var Container = require('../display/Container'), Texture = require('../textures/Texture'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), @@ -10787,7 +10840,7 @@ this._localBounds = null; }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/canvas/utils/CanvasGraphics":69,"../textures/Texture":101,"./GraphicsData":43}],43:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/canvas/utils/CanvasGraphics":70,"../textures/Texture":102,"./GraphicsData":44}],44:[function(require,module,exports){ /** * A GraphicsData object. * @@ -10880,7 +10933,7 @@ this.shape = null; }; -},{}],44:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ var utils = require('../../utils'), math = require('../../math'), CONST = require('../../const'), @@ -11200,7 +11253,7 @@ }; -},{"../../const":38,"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils":107,"./WebGLGraphicsData":45,"./shaders/PrimitiveShader":46,"./utils/buildCircle":47,"./utils/buildComplexPoly":48,"./utils/buildLine":49,"./utils/buildPoly":50,"./utils/buildRectangle":51,"./utils/buildRoundedRectangle":52,"earcut":24}],45:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils":108,"./WebGLGraphicsData":46,"./shaders/PrimitiveShader":47,"./utils/buildCircle":48,"./utils/buildComplexPoly":49,"./utils/buildLine":50,"./utils/buildPoly":51,"./utils/buildRectangle":52,"./utils/buildRoundedRectangle":53,"earcut":24}],46:[function(require,module,exports){ /** * An object containing WebGL specific properties to be used by the WebGL renderer * @@ -11318,7 +11371,7 @@ this.glIndices = null; }; -},{}],46:[function(require,module,exports){ +},{}],47:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -11370,7 +11423,7 @@ module.exports = PrimitiveShader; -},{"pixi-gl-core":1}],47:[function(require,module,exports){ +},{"pixi-gl-core":1}],48:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11457,7 +11510,7 @@ module.exports = buildCircle; -},{"../../../utils":107,"./buildLine":49}],48:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],49:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11528,7 +11581,7 @@ module.exports = buildComplexPoly; -},{"../../../utils":107,"./buildLine":49}],49:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],50:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'); @@ -11748,7 +11801,7 @@ }; module.exports = buildLine; -},{"../../../math":56,"../../../utils":107}],50:[function(require,module,exports){ +},{"../../../math":57,"../../../utils":108}],51:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -11811,7 +11864,7 @@ module.exports = buildPoly; -},{"../../../utils":107}],51:[function(require,module,exports){ +},{"../../../utils":108}],52:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11882,7 +11935,7 @@ }; module.exports = buildRectangle; -},{"../../../utils":107,"./buildLine":49}],52:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],53:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -12010,7 +12063,7 @@ module.exports = buildRoundedRectangle; -},{"../../../utils":107,"./buildLine":49}],53:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],54:[function(require,module,exports){ /** * @file Main export of the PIXI core library * @author Mat Groves @@ -12106,7 +12159,7 @@ } }); -},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":42,"./graphics/GraphicsData":43,"./graphics/webgl/GraphicsRenderer":44,"./math":56,"./particles/ParticleContainer":62,"./particles/webgl/ParticleRenderer":64,"./renderers/canvas/CanvasRenderer":67,"./renderers/canvas/utils/CanvasBuffer":68,"./renderers/canvas/utils/CanvasGraphics":69,"./renderers/webgl/WebGLRenderer":73,"./renderers/webgl/filters/AbstractFilter":74,"./renderers/webgl/filters/FXAAFilter":75,"./renderers/webgl/filters/SpriteMaskFilter":76,"./renderers/webgl/managers/ShaderManager":80,"./renderers/webgl/managers/WebGLManager":82,"./renderers/webgl/shaders/Shader":85,"./renderers/webgl/utils/ObjectRenderer":88,"./renderers/webgl/utils/RenderTarget":90,"./sprites/Sprite":94,"./sprites/webgl/SpriteRenderer":95,"./text/Text":97,"./textures/BaseRenderTexture":98,"./textures/BaseTexture":99,"./textures/RenderTexture":100,"./textures/Texture":101,"./textures/TextureUvs":102,"./textures/VideoBaseTexture":103,"./ticker":105,"./utils":107,"pixi-gl-core":1}],54:[function(require,module,exports){ +},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":43,"./graphics/GraphicsData":44,"./graphics/webgl/GraphicsRenderer":45,"./math":57,"./particles/ParticleContainer":63,"./particles/webgl/ParticleRenderer":65,"./renderers/canvas/CanvasRenderer":68,"./renderers/canvas/utils/CanvasBuffer":69,"./renderers/canvas/utils/CanvasGraphics":70,"./renderers/webgl/WebGLRenderer":74,"./renderers/webgl/filters/AbstractFilter":75,"./renderers/webgl/filters/FXAAFilter":76,"./renderers/webgl/filters/SpriteMaskFilter":77,"./renderers/webgl/managers/ShaderManager":81,"./renderers/webgl/managers/WebGLManager":83,"./renderers/webgl/shaders/Shader":86,"./renderers/webgl/utils/ObjectRenderer":89,"./renderers/webgl/utils/RenderTarget":91,"./sprites/Sprite":95,"./sprites/webgl/SpriteRenderer":96,"./text/Text":98,"./textures/BaseRenderTexture":99,"./textures/BaseTexture":100,"./textures/RenderTexture":101,"./textures/Texture":102,"./textures/TextureUvs":103,"./textures/VideoBaseTexture":104,"./ticker":106,"./utils":108,"pixi-gl-core":1}],55:[function(require,module,exports){ // @todo - ignore the too many parameters warning for now // should either fix it or change the jshint config // jshint -W072 @@ -12546,7 +12599,7 @@ */ Matrix.TEMP_MATRIX = new Matrix(); -},{"./Point":55}],55:[function(require,module,exports){ +},{"./Point":56}],56:[function(require,module,exports){ /** * The Point object represents a location in a two-dimensional coordinate system, where x represents * the horizontal axis and y represents the vertical axis. @@ -12616,7 +12669,7 @@ this.y = y || ( (y !== 0) ? this.x : 0 ) ; }; -},{}],56:[function(require,module,exports){ +},{}],57:[function(require,module,exports){ /** * Math classes and utilities mixed into PIXI namespace. * @@ -12638,7 +12691,7 @@ RoundedRectangle: require('./shapes/RoundedRectangle') }; -},{"./Matrix":54,"./Point":55,"./shapes/Circle":57,"./shapes/Ellipse":58,"./shapes/Polygon":59,"./shapes/Rectangle":60,"./shapes/RoundedRectangle":61}],57:[function(require,module,exports){ +},{"./Matrix":55,"./Point":56,"./shapes/Circle":58,"./shapes/Ellipse":59,"./shapes/Polygon":60,"./shapes/Rectangle":61,"./shapes/RoundedRectangle":62}],58:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12726,7 +12779,7 @@ return new Rectangle(this.x - this.radius, this.y - this.radius, this.radius * 2, this.radius * 2); }; -},{"../../const":38,"./Rectangle":60}],58:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],59:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12821,7 +12874,7 @@ return new Rectangle(this.x - this.width, this.y - this.height, this.width, this.height); }; -},{"../../const":38,"./Rectangle":60}],59:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],60:[function(require,module,exports){ var Point = require('../Point'), CONST = require('../../const'); @@ -12924,7 +12977,7 @@ return inside; }; -},{"../../const":38,"../Point":55}],60:[function(require,module,exports){ +},{"../../const":38,"../Point":56}],61:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13018,7 +13071,7 @@ return false; }; -},{"../../const":38}],61:[function(require,module,exports){ +},{"../../const":38}],62:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13110,7 +13163,7 @@ return false; }; -},{"../../const":38}],62:[function(require,module,exports){ +},{"../../const":38}],63:[function(require,module,exports){ var Container = require('../display/Container'), CONST = require('../const'); @@ -13429,7 +13482,7 @@ this._buffers = null; }; -},{"../const":38,"../display/Container":39}],63:[function(require,module,exports){ +},{"../const":38,"../display/Container":39}],64:[function(require,module,exports){ /** * @author Mat Groves @@ -13649,7 +13702,7 @@ this.gl.deleteBuffer(this.staticBuffer); }; -},{}],64:[function(require,module,exports){ +},{}],65:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), ParticleShader = require('./ParticleShader'), @@ -14125,7 +14178,7 @@ this.tempMatrix = null; }; -},{"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"./ParticleBuffer":63,"./ParticleShader":65}],65:[function(require,module,exports){ +},{"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"./ParticleBuffer":64,"./ParticleShader":66}],66:[function(require,module,exports){ var TextureShader = require('../../renderers/webgl/shaders/TextureShader'); /** @@ -14203,7 +14256,7 @@ module.exports = ParticleShader; -},{"../../renderers/webgl/shaders/TextureShader":86}],66:[function(require,module,exports){ +},{"../../renderers/webgl/shaders/TextureShader":87}],67:[function(require,module,exports){ var utils = require('../utils'), math = require('../math'), CONST = require('../const'), @@ -14464,7 +14517,7 @@ this._backgroundColorString = null; }; -},{"../const":38,"../math":56,"../utils":107,"eventemitter3":25}],67:[function(require,module,exports){ +},{"../const":38,"../math":57,"../utils":108,"eventemitter3":25}],68:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), CanvasMaskManager = require('./utils/CanvasMaskManager'), utils = require('../../utils'), @@ -14732,7 +14785,7 @@ } }; -},{"../../const":38,"../../math":56,"../../utils":107,"../SystemRenderer":66,"./utils/CanvasMaskManager":70}],68:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../utils":108,"../SystemRenderer":67,"./utils/CanvasMaskManager":71}],69:[function(require,module,exports){ /** * Creates a Canvas element of the given size. * @@ -14832,7 +14885,7 @@ this.canvas = null; }; -},{}],69:[function(require,module,exports){ +},{}],70:[function(require,module,exports){ var CONST = require('../../../const'); /** @@ -15186,7 +15239,7 @@ }; -},{"../../../const":38}],70:[function(require,module,exports){ +},{"../../../const":38}],71:[function(require,module,exports){ var CanvasGraphics = require('./CanvasGraphics'); /** @@ -15248,7 +15301,7 @@ CanvasMaskManager.prototype.destroy = function () {}; -},{"./CanvasGraphics":69}],71:[function(require,module,exports){ +},{"./CanvasGraphics":70}],72:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -15500,7 +15553,7 @@ */ CanvasTinter.tintMethod = CanvasTinter.canUseMultiply ? CanvasTinter.tintWithMultiply : CanvasTinter.tintWithPerPixel; -},{"../../../utils":107}],72:[function(require,module,exports){ +},{"../../../utils":108}],73:[function(require,module,exports){ var GLTexture = require('pixi-gl-core').GLTexture, utils = require('../../utils'); @@ -15640,7 +15693,7 @@ module.exports = TextureManager; -},{"../../utils":107,"pixi-gl-core":1}],73:[function(require,module,exports){ +},{"../../utils":108,"pixi-gl-core":1}],74:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), ShaderManager = require('./managers/ShaderManager'), MaskManager = require('./managers/MaskManager'), @@ -16037,7 +16090,7 @@ }; -},{"../../const":38,"../../utils":107,"../SystemRenderer":66,"./TextureManager":72,"./filters/FXAAFilter":75,"./managers/BlendModeManager":77,"./managers/FilterManager":78,"./managers/MaskManager":79,"./managers/ShaderManager":80,"./managers/StencilManager":81,"./utils/ObjectRenderer":88,"./utils/RenderTarget":90,"./utils/mapWebGLBlendModesToPixi":92,"./utils/mapWebGLDrawModesToPixi":93,"pixi-gl-core":1}],74:[function(require,module,exports){ +},{"../../const":38,"../../utils":108,"../SystemRenderer":67,"./TextureManager":73,"./filters/FXAAFilter":76,"./managers/BlendModeManager":78,"./managers/FilterManager":79,"./managers/MaskManager":80,"./managers/ShaderManager":81,"./managers/StencilManager":82,"./utils/ObjectRenderer":89,"./utils/RenderTarget":91,"./utils/mapWebGLBlendModesToPixi":93,"./utils/mapWebGLDrawModesToPixi":94,"pixi-gl-core":1}],75:[function(require,module,exports){ var DefaultShader = require('../shaders/TextureShader'); /** @@ -16149,7 +16202,7 @@ } }; -},{"../shaders/TextureShader":86}],75:[function(require,module,exports){ +},{"../shaders/TextureShader":87}],76:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'); // @see https://github.com/substack/brfs/issues/25 @@ -16204,7 +16257,7 @@ filterManager.applyFilter(shader, input, output); }; -},{"./AbstractFilter":74}],76:[function(require,module,exports){ +},{"./AbstractFilter":75}],77:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'), math = require('../../../math'); @@ -16301,7 +16354,7 @@ } }); -},{"../../../math":56,"./AbstractFilter":74}],77:[function(require,module,exports){ +},{"../../../math":57,"./AbstractFilter":75}],78:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'); /** @@ -16345,7 +16398,7 @@ return true; }; -},{"./WebGLManager":82}],78:[function(require,module,exports){ +},{"./WebGLManager":83}],79:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), RenderTarget = require('../utils/RenderTarget'), CONST = require('../../../const'), @@ -16797,7 +16850,7 @@ this.texturePool = null; }; -},{"../../../const":38,"../../../math":56,"../utils/Quad":89,"../utils/RenderTarget":90,"./WebGLManager":82}],79:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../utils/Quad":90,"../utils/RenderTarget":91,"./WebGLManager":83}],80:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), AlphaMaskFilter = require('../filters/SpriteMaskFilter'); @@ -16912,7 +16965,7 @@ }; -},{"../filters/SpriteMaskFilter":76,"./WebGLManager":82}],80:[function(require,module,exports){ +},{"../filters/SpriteMaskFilter":77,"./WebGLManager":83}],81:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), TextureShader = require('../shaders/TextureShader'), ComplexPrimitiveShader = require('../shaders/ComplexPrimitiveShader'), @@ -17082,7 +17135,7 @@ this.tempAttribState = null; }; -},{"../../../utils":107,"../shaders/ComplexPrimitiveShader":83,"../shaders/PrimitiveShader":84,"../shaders/TextureShader":86,"./WebGLManager":82}],81:[function(require,module,exports){ +},{"../../../utils":108,"../shaders/ComplexPrimitiveShader":84,"../shaders/PrimitiveShader":85,"../shaders/TextureShader":87,"./WebGLManager":83}],82:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), utils = require('../../../utils'); @@ -17449,7 +17502,7 @@ }; -},{"../../../utils":107,"./WebGLManager":82}],82:[function(require,module,exports){ +},{"../../../utils":108,"./WebGLManager":83}],83:[function(require,module,exports){ /** * @class * @memberof PIXI @@ -17490,7 +17543,7 @@ this.renderer = null; }; -},{}],83:[function(require,module,exports){ +},{}],84:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17552,7 +17605,7 @@ ComplexPrimitiveShader.prototype.constructor = ComplexPrimitiveShader; module.exports = ComplexPrimitiveShader; -},{"./Shader":85}],84:[function(require,module,exports){ +},{"./Shader":86}],85:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17615,7 +17668,7 @@ PrimitiveShader.prototype.constructor = PrimitiveShader; module.exports = PrimitiveShader; -},{"./Shader":85}],85:[function(require,module,exports){ +},{"./Shader":86}],86:[function(require,module,exports){ /*global console */ var utils = require('../../../utils'); @@ -18143,7 +18196,7 @@ return shader; }; -},{"../../../utils":107}],86:[function(require,module,exports){ +},{"../../../utils":108}],87:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -18254,7 +18307,7 @@ '}' ].join('\n'); -},{"./Shader":85}],87:[function(require,module,exports){ +},{"./Shader":86}],88:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -18335,7 +18388,7 @@ '}' ].join('\n'); -},{"pixi-gl-core":1}],88:[function(require,module,exports){ +},{"pixi-gl-core":1}],89:[function(require,module,exports){ var WebGLManager = require('../managers/WebGLManager'); /** @@ -18393,7 +18446,7 @@ // render the object }; -},{"../managers/WebGLManager":82}],89:[function(require,module,exports){ +},{"../managers/WebGLManager":83}],90:[function(require,module,exports){ /** * Helper class to create a quad * @@ -18548,7 +18601,7 @@ -},{}],90:[function(require,module,exports){ +},{}],91:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'), CONST = require('../../../const'), @@ -18853,7 +18906,7 @@ this.texture = null; }; -},{"../../../const":38,"../../../math":56,"../../../utils":107,"./StencilMaskStack":91,"pixi-gl-core":1}],91:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../../../utils":108,"./StencilMaskStack":92,"pixi-gl-core":1}],92:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -18886,7 +18939,7 @@ StencilMaskStack.prototype.constructor = StencilMaskStack; module.exports = StencilMaskStack; -},{}],92:[function(require,module,exports){ +},{}],93:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18923,7 +18976,7 @@ module.exports = mapWebGLBlendModesToPixi; -},{"../../../const":38}],93:[function(require,module,exports){ +},{"../../../const":38}],94:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18947,7 +19000,7 @@ module.exports = mapWebGLDrawModesToPixi; -},{"../../../const":38}],94:[function(require,module,exports){ +},{"../../../const":38}],95:[function(require,module,exports){ var math = require('../math'), Texture = require('../textures/Texture'), Container = require('../display/Container'), @@ -19043,7 +19096,6 @@ // call texture setter this.texture = texture || Texture.EMPTY; this.textureDirty = true - this.vertexDirty = true; this.vertexData = new Float32Array(8); } @@ -19153,7 +19205,6 @@ Sprite.prototype.caclulateVertices = function () { - var texture = this._texture, wt = this.transform.worldTransform, a = wt.a, b = wt.b, c = wt.c, d = wt.d, tx = wt.tx, ty = wt.ty, @@ -19208,22 +19259,11 @@ */ Sprite.prototype._renderWebGL = function (renderer) { - if(this.textureDirty) + if(this.transform.updated || this.textureDirty) { this.textureDirty = false; - - this._onTextureUpdate(); - - this.vertexDirty = true; - } - - if(this.vertexDirty) - { - this.vertexDirty = false; - // set the vertex data this.caclulateVertices(); - } renderer.setObjectRenderer(renderer.plugins.sprite); @@ -19566,7 +19606,7 @@ return new Sprite(Texture.fromImage(imageId, crossorigin, scaleMode)); }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasTinter":71,"../textures/Texture":101,"../utils":107}],95:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasTinter":72,"../textures/Texture":102,"../utils":108}],96:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), TextureShader = require('../../renderers/webgl/shaders/_TextureShader'), @@ -19927,7 +19967,7 @@ this.shader = null; }; -},{"../../const":38,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/shaders/_TextureShader":87,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils/createIndicesForQuads":106,"./generateMultiTextureShader":96,"pixi-gl-core":1}],96:[function(require,module,exports){ +},{"../../const":38,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/shaders/_TextureShader":88,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils/createIndicesForQuads":107,"./generateMultiTextureShader":97,"pixi-gl-core":1}],97:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; @@ -19990,7 +20030,7 @@ module.exports = generateMultiTextureShader; -},{"pixi-gl-core":1}],97:[function(require,module,exports){ +},{"pixi-gl-core":1}],98:[function(require,module,exports){ var Sprite = require('../sprites/Sprite'), Texture = require('../textures/Texture'), math = require('../math'), @@ -20611,7 +20651,7 @@ this._texture.destroy(destroyBaseTexture === undefined ? true : destroyBaseTexture); }; -},{"../const":38,"../math":56,"../sprites/Sprite":94,"../textures/Texture":101,"../utils":107}],98:[function(require,module,exports){ +},{"../const":38,"../math":57,"../sprites/Sprite":95,"../textures/Texture":102,"../utils":108}],99:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), Texture = require('./Texture'), RenderTarget = require('../renderers/webgl/utils/RenderTarget'), @@ -21095,7 +21135,7 @@ return this.getPixels(tempRect); }; -},{"../const":38,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/webgl/managers/FilterManager":78,"../renderers/webgl/utils/RenderTarget":90,"./BaseTexture":99,"./Texture":101}],99:[function(require,module,exports){ +},{"../const":38,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/webgl/managers/FilterManager":79,"../renderers/webgl/utils/RenderTarget":91,"./BaseTexture":100,"./Texture":102}],100:[function(require,module,exports){ var utils = require('../utils'), CONST = require('../const'), EventEmitter = require('eventemitter3'); @@ -21532,7 +21572,7 @@ return baseTexture; }; -},{"../const":38,"../utils":107,"eventemitter3":25}],100:[function(require,module,exports){ +},{"../const":38,"../utils":108,"eventemitter3":25}],101:[function(require,module,exports){ var BaseRenderTexture = require('./BaseRenderTexture'), Texture = require('./Texture'), math = require('../math'), @@ -21727,7 +21767,7 @@ } -},{"../const":38,"../math":56,"./BaseRenderTexture":98,"./Texture":101}],101:[function(require,module,exports){ +},{"../const":38,"../math":57,"./BaseRenderTexture":99,"./Texture":102}],102:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), VideoBaseTexture = require('./VideoBaseTexture'), TextureUvs = require('./TextureUvs'), @@ -22153,7 +22193,7 @@ */ Texture.EMPTY = new Texture(new BaseTexture()); -},{"../math":56,"../utils":107,"./BaseTexture":99,"./TextureUvs":102,"./VideoBaseTexture":103,"eventemitter3":25}],102:[function(require,module,exports){ +},{"../math":57,"../utils":108,"./BaseTexture":100,"./TextureUvs":103,"./VideoBaseTexture":104,"eventemitter3":25}],103:[function(require,module,exports){ /** * A standard object to store the Uvs of a texture @@ -22234,7 +22274,7 @@ this.uvs_uint32[3] = (((this.y3 * 65535) & 0xFFFF) << 16) | ((this.x3 * 65535) & 0xFFFF); }; -},{}],103:[function(require,module,exports){ +},{}],104:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), utils = require('../utils'); @@ -22471,7 +22511,7 @@ return source; } -},{"../utils":107,"./BaseTexture":99}],104:[function(require,module,exports){ +},{"../utils":108,"./BaseTexture":100}],105:[function(require,module,exports){ var CONST = require('../const'), EventEmitter = require('eventemitter3'), // Internal event used by composed emitter @@ -22826,7 +22866,7 @@ module.exports = Ticker; -},{"../const":38,"eventemitter3":25}],105:[function(require,module,exports){ +},{"../const":38,"eventemitter3":25}],106:[function(require,module,exports){ var Ticker = require('./Ticker'); /** @@ -22882,7 +22922,7 @@ Ticker: Ticker }; -},{"./Ticker":104}],106:[function(require,module,exports){ +},{"./Ticker":105}],107:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -22915,7 +22955,7 @@ }; module.exports = createIndicesForQuads; -},{}],107:[function(require,module,exports){ +},{}],108:[function(require,module,exports){ var CONST = require('../const'); /** @@ -23192,7 +23232,7 @@ BaseTextureCache: {} }; -},{"../const":38,"./pluginTarget":108,"async":16,"eventemitter3":25}],108:[function(require,module,exports){ +},{"../const":38,"./pluginTarget":109,"async":16,"eventemitter3":25}],109:[function(require,module,exports){ /** * Mixins functionality to make an object have "plugins". * @@ -23262,7 +23302,7 @@ } }; -},{}],109:[function(require,module,exports){ +},{}],110:[function(require,module,exports){ /*global console */ var core = require('./core'), mesh = require('./mesh'), @@ -23613,7 +23653,7 @@ return core.utils.uid(); }; -},{"./core":53,"./extras":116,"./filters":133,"./mesh":158}],110:[function(require,module,exports){ +},{"./core":54,"./extras":117,"./filters":134,"./mesh":159}],111:[function(require,module,exports){ var core = require('../core'); /** @@ -24001,7 +24041,7 @@ BitmapText.fonts = {}; -},{"../core":53}],111:[function(require,module,exports){ +},{"../core":54}],112:[function(require,module,exports){ var core = require('../core'); /** @@ -24321,7 +24361,7 @@ return new MovieClip(textures); }; -},{"../core":53}],112:[function(require,module,exports){ +},{"../core":54}],113:[function(require,module,exports){ var core = require('../core'), // a sprite use dfor rendering textures.. tempPoint = new core.Point(), @@ -24773,7 +24813,7 @@ return new TilingSprite(core.Texture.fromImage(imageId, crossorigin, scaleMode),width,height); }; -},{"../core":53,"../core/renderers/canvas/utils/CanvasTinter":71}],113:[function(require,module,exports){ +},{"../core":54,"../core/renderers/canvas/utils/CanvasTinter":72}],114:[function(require,module,exports){ var core = require('../core'), DisplayObject = core.DisplayObject, _tempMatrix = new core.Matrix(); @@ -25045,7 +25085,7 @@ this._originalDestroy(); }; -},{"../core":53}],114:[function(require,module,exports){ +},{"../core":54}],115:[function(require,module,exports){ var core = require('../core'); /** @@ -25075,7 +25115,7 @@ return null; }; -},{"../core":53}],115:[function(require,module,exports){ +},{"../core":54}],116:[function(require,module,exports){ var core = require('../core'); /** @@ -25105,7 +25145,7 @@ return point; }; -},{"../core":53}],116:[function(require,module,exports){ +},{"../core":54}],117:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -25126,7 +25166,7 @@ BitmapText: require('./BitmapText') }; -},{"./BitmapText":110,"./MovieClip":111,"./TilingSprite":112,"./cacheAsBitmap":113,"./getChildByName":114,"./getGlobalPosition":115}],117:[function(require,module,exports){ +},{"./BitmapText":111,"./MovieClip":112,"./TilingSprite":113,"./cacheAsBitmap":114,"./getChildByName":115,"./getGlobalPosition":116}],118:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25183,7 +25223,7 @@ } }); -},{"../../core":53}],118:[function(require,module,exports){ +},{"../../core":54}],119:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYFilter = require('../blur/BlurYFilter'); @@ -25284,7 +25324,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"../blur/BlurYFilter":122}],119:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"../blur/BlurYFilter":123}],120:[function(require,module,exports){ var core = require('../../core'); @@ -25426,7 +25466,7 @@ } }); -},{"../../core":53}],120:[function(require,module,exports){ +},{"../../core":54}],121:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('./BlurXFilter'), BlurYFilter = require('./BlurYFilter'); @@ -25536,7 +25576,7 @@ } }); -},{"../../core":53,"./BlurXFilter":121,"./BlurYFilter":122}],121:[function(require,module,exports){ +},{"../../core":54,"./BlurXFilter":122,"./BlurYFilter":123}],122:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25629,7 +25669,7 @@ } }); -},{"../../core":53}],122:[function(require,module,exports){ +},{"../../core":54}],123:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25715,7 +25755,7 @@ } }); -},{"../../core":53}],123:[function(require,module,exports){ +},{"../../core":54}],124:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25745,7 +25785,7 @@ SmartBlurFilter.prototype.constructor = SmartBlurFilter; module.exports = SmartBlurFilter; -},{"../../core":53}],124:[function(require,module,exports){ +},{"../../core":54}],125:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26281,7 +26321,7 @@ } }); -},{"../../core":53}],125:[function(require,module,exports){ +},{"../../core":54}],126:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26330,7 +26370,7 @@ } }); -},{"../../core":53}],126:[function(require,module,exports){ +},{"../../core":54}],127:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26421,7 +26461,7 @@ } }); -},{"../../core":53}],127:[function(require,module,exports){ +},{"../../core":54}],128:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26447,7 +26487,7 @@ CrossHatchFilter.prototype.constructor = CrossHatchFilter; module.exports = CrossHatchFilter; -},{"../../core":53}],128:[function(require,module,exports){ +},{"../../core":54}],129:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26531,7 +26571,7 @@ } }); -},{"../../core":53}],129:[function(require,module,exports){ +},{"../../core":54}],130:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26603,7 +26643,7 @@ } }); -},{"../../core":53}],130:[function(require,module,exports){ +},{"../../core":54}],131:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26694,7 +26734,7 @@ } }); -},{"../../core":53}],131:[function(require,module,exports){ +},{"../../core":54}],132:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYTintFilter = require('./BlurYTintFilter'); @@ -26887,7 +26927,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"./BlurYTintFilter":130}],132:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"./BlurYTintFilter":131}],133:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26936,7 +26976,7 @@ } }); -},{"../../core":53}],133:[function(require,module,exports){ +},{"../../core":54}],134:[function(require,module,exports){ /** * @file Main export of the PIXI filters library * @author Mat Groves @@ -26975,7 +27015,7 @@ TwistFilter: require('./twist/TwistFilter') }; -},{"./ascii/AsciiFilter":117,"./bloom/BloomFilter":118,"./blur/BlurDirFilter":119,"./blur/BlurFilter":120,"./blur/BlurXFilter":121,"./blur/BlurYFilter":122,"./blur/SmartBlurFilter":123,"./color/ColorMatrixFilter":124,"./color/ColorStepFilter":125,"./convolution/ConvolutionFilter":126,"./crosshatch/CrossHatchFilter":127,"./displacement/DisplacementFilter":128,"./dot/DotScreenFilter":129,"./dropshadow/DropShadowFilter":131,"./gray/GrayFilter":132,"./invert/InvertFilter":134,"./noise/NoiseFilter":135,"./pixelate/PixelateFilter":136,"./rgb/RGBSplitFilter":137,"./sepia/SepiaFilter":138,"./shockwave/ShockwaveFilter":139,"./tiltshift/TiltShiftFilter":141,"./tiltshift/TiltShiftXFilter":142,"./tiltshift/TiltShiftYFilter":143,"./twist/TwistFilter":144}],134:[function(require,module,exports){ +},{"./ascii/AsciiFilter":118,"./bloom/BloomFilter":119,"./blur/BlurDirFilter":120,"./blur/BlurFilter":121,"./blur/BlurXFilter":122,"./blur/BlurYFilter":123,"./blur/SmartBlurFilter":124,"./color/ColorMatrixFilter":125,"./color/ColorStepFilter":126,"./convolution/ConvolutionFilter":127,"./crosshatch/CrossHatchFilter":128,"./displacement/DisplacementFilter":129,"./dot/DotScreenFilter":130,"./dropshadow/DropShadowFilter":132,"./gray/GrayFilter":133,"./invert/InvertFilter":135,"./noise/NoiseFilter":136,"./pixelate/PixelateFilter":137,"./rgb/RGBSplitFilter":138,"./sepia/SepiaFilter":139,"./shockwave/ShockwaveFilter":140,"./tiltshift/TiltShiftFilter":142,"./tiltshift/TiltShiftXFilter":143,"./tiltshift/TiltShiftYFilter":144,"./twist/TwistFilter":145}],135:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27025,7 +27065,7 @@ } }); -},{"../../core":53}],135:[function(require,module,exports){ +},{"../../core":54}],136:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27080,7 +27120,7 @@ } }); -},{"../../core":53}],136:[function(require,module,exports){ +},{"../../core":54}],137:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27131,7 +27171,7 @@ } }); -},{"../../core":53}],137:[function(require,module,exports){ +},{"../../core":54}],138:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27217,7 +27257,7 @@ } }); -},{"../../core":53}],138:[function(require,module,exports){ +},{"../../core":54}],139:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27267,7 +27307,7 @@ } }); -},{"../../core":53}],139:[function(require,module,exports){ +},{"../../core":54}],140:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27355,7 +27395,7 @@ } }); -},{"../../core":53}],140:[function(require,module,exports){ +},{"../../core":54}],141:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27480,7 +27520,7 @@ } }); -},{"../../core":53}],141:[function(require,module,exports){ +},{"../../core":54}],142:[function(require,module,exports){ var core = require('../../core'), TiltShiftXFilter = require('./TiltShiftXFilter'), TiltShiftYFilter = require('./TiltShiftYFilter'); @@ -27590,7 +27630,7 @@ } }); -},{"../../core":53,"./TiltShiftXFilter":142,"./TiltShiftYFilter":143}],142:[function(require,module,exports){ +},{"../../core":54,"./TiltShiftXFilter":143,"./TiltShiftYFilter":144}],143:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27628,7 +27668,7 @@ this.uniforms.delta.value.y = dy / d; }; -},{"./TiltShiftAxisFilter":140}],143:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],144:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27666,7 +27706,7 @@ this.uniforms.delta.value.y = dx / d; }; -},{"./TiltShiftAxisFilter":140}],144:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],145:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27751,7 +27791,7 @@ } }); -},{"../../core":53}],145:[function(require,module,exports){ +},{"../../core":54}],146:[function(require,module,exports){ (function (global){ // run the polyfills require('./polyfill'); @@ -27784,7 +27824,7 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./accessibility":37,"./core":53,"./deprecation":109,"./extras":116,"./filters":133,"./interaction":148,"./loaders":151,"./mesh":158,"./polyfill":163}],146:[function(require,module,exports){ +},{"./accessibility":37,"./core":54,"./deprecation":110,"./extras":117,"./filters":134,"./interaction":149,"./loaders":152,"./mesh":159,"./polyfill":164}],147:[function(require,module,exports){ var core = require('../core'); /** @@ -27833,7 +27873,7 @@ return displayObject.worldTransform.applyInverse(globalPos || this.global, point); }; -},{"../core":53}],147:[function(require,module,exports){ +},{"../core":54}],148:[function(require,module,exports){ var core = require('../core'), InteractionData = require('./InteractionData'); @@ -28709,7 +28749,7 @@ core.WebGLRenderer.registerPlugin('interaction', InteractionManager); core.CanvasRenderer.registerPlugin('interaction', InteractionManager); -},{"../core":53,"./InteractionData":146,"./interactiveTarget":149}],148:[function(require,module,exports){ +},{"../core":54,"./InteractionData":147,"./interactiveTarget":150}],149:[function(require,module,exports){ /** * @file Main export of the PIXI interactions library * @author Mat Groves @@ -28726,7 +28766,7 @@ interactiveTarget: require('./interactiveTarget') }; -},{"./InteractionData":146,"./InteractionManager":147,"./interactiveTarget":149}],149:[function(require,module,exports){ +},{"./InteractionData":147,"./InteractionManager":148,"./interactiveTarget":150}],150:[function(require,module,exports){ /** * Default property values of interactive objects * used by {@link PIXI.interaction.InteractionManager}. @@ -28775,7 +28815,7 @@ module.exports = interactiveTarget; -},{}],150:[function(require,module,exports){ +},{}],151:[function(require,module,exports){ var Resource = require('resource-loader').Resource, core = require('../core'), extras = require('../extras'), @@ -28896,7 +28936,7 @@ }; }; -},{"../core":53,"../extras":116,"path":17,"resource-loader":31}],151:[function(require,module,exports){ +},{"../core":54,"../extras":117,"path":17,"resource-loader":31}],152:[function(require,module,exports){ /** * @file Main export of the PIXI loaders library * @author Mat Groves @@ -28917,7 +28957,7 @@ Resource: require('resource-loader').Resource }; -},{"./bitmapFontParser":150,"./loader":152,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],152:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./loader":153,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],153:[function(require,module,exports){ var ResourceLoader = require('resource-loader'), textureParser = require('./textureParser'), spritesheetParser = require('./spritesheetParser'), @@ -28979,7 +29019,7 @@ Resource.setExtensionXhrType('fnt', Resource.XHR_RESPONSE_TYPE.DOCUMENT); -},{"./bitmapFontParser":150,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],153:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],154:[function(require,module,exports){ var Resource = require('resource-loader').Resource, path = require('path'), core = require('../core'); @@ -29063,7 +29103,7 @@ }; }; -},{"../core":53,"path":17,"resource-loader":31}],154:[function(require,module,exports){ +},{"../core":54,"path":17,"resource-loader":31}],155:[function(require,module,exports){ var core = require('../core'); module.exports = function () @@ -29085,7 +29125,7 @@ }; }; -},{"../core":53}],155:[function(require,module,exports){ +},{"../core":54}],156:[function(require,module,exports){ var core = require('../core'), tempPoint = new core.Point(), tempPolygon = new core.Polygon(); @@ -29561,7 +29601,7 @@ TRIANGLES: 1 }; -},{"../core":53}],156:[function(require,module,exports){ +},{"../core":54}],157:[function(require,module,exports){ var Mesh = require('./Mesh'); /** @@ -29687,7 +29727,7 @@ } }; -},{"./Mesh":155}],157:[function(require,module,exports){ +},{"./Mesh":156}],158:[function(require,module,exports){ var Mesh = require('./Mesh'); var core = require('../core'); @@ -29900,7 +29940,7 @@ this.containerUpdateTransform(); }; -},{"../core":53,"./Mesh":155}],158:[function(require,module,exports){ +},{"../core":54,"./Mesh":156}],159:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -29919,7 +29959,7 @@ MeshShader: require('./webgl/MeshShader') }; -},{"./Mesh":155,"./Plane":156,"./Rope":157,"./webgl/MeshRenderer":159,"./webgl/MeshShader":160}],159:[function(require,module,exports){ +},{"./Mesh":156,"./Plane":157,"./Rope":158,"./webgl/MeshRenderer":160,"./webgl/MeshShader":161}],160:[function(require,module,exports){ var core = require('../../core'), Mesh = require('../Mesh'); @@ -30148,7 +30188,7 @@ core.ObjectRenderer.prototype.destroy.call(this); }; -},{"../../core":53,"../Mesh":155}],160:[function(require,module,exports){ +},{"../../core":54,"../Mesh":156}],161:[function(require,module,exports){ var core = require('../../core'); /** @@ -30209,7 +30249,7 @@ core.ShaderManager.registerPlugin('meshShader', MeshShader); -},{"../../core":53}],161:[function(require,module,exports){ +},{"../../core":54}],162:[function(require,module,exports){ // References: // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign @@ -30225,7 +30265,7 @@ }; } -},{}],162:[function(require,module,exports){ +},{}],163:[function(require,module,exports){ // References: // https://github.com/sindresorhus/object-assign // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign @@ -30235,12 +30275,12 @@ Object.assign = require('object-assign'); } -},{"object-assign":26}],163:[function(require,module,exports){ +},{"object-assign":26}],164:[function(require,module,exports){ require('./Object.assign'); require('./requestAnimationFrame'); require('./Math.sign'); -},{"./Math.sign":161,"./Object.assign":162,"./requestAnimationFrame":164}],164:[function(require,module,exports){ +},{"./Math.sign":162,"./Object.assign":163,"./requestAnimationFrame":165}],165:[function(require,module,exports){ (function (global){ // References: // http://paulirish.com/2011/requestanimationframe-for-smart-animating/ @@ -30311,8 +30351,8 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[145])(145) +},{}]},{},[146])(146) }); -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L1RyYW5zZm9ybS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL1dlYkdMR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZENpcmNsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ29tcGxleFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZExpbmUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9NYXRyaXguanMiLCJzcmMvY29yZS9tYXRoL1BvaW50LmpzIiwic3JjL2NvcmUvbWF0aC9pbmRleC5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0NpcmNsZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0VsbGlwc2UuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Qb2x5Z29uLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZUJ1ZmZlci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL1N5c3RlbVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcy5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9UZXh0dXJlTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9GWEFBRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1F1YWQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0LmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1N0ZW5jaWxNYXNrU3RhY2suanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvc3ByaXRlcy9TcHJpdGUuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL1Nwcml0ZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvc3ByaXRlcy93ZWJnbC9nZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3RleHQvVGV4dC5qcyIsInNyYy9jb3JlL3RleHR1cmVzL0Jhc2VSZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1RleHR1cmVVdnMuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGlja2VyL1RpY2tlci5qcyIsInNyYy9jb3JlL3RpY2tlci9pbmRleC5qcyIsInNyYy9jb3JlL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcy5qcyIsInNyYy9jb3JlL3V0aWxzL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvcGx1Z2luVGFyZ2V0LmpzIiwic3JjL2RlcHJlY2F0aW9uLmpzIiwic3JjL2V4dHJhcy9CaXRtYXBUZXh0LmpzIiwic3JjL2V4dHJhcy9Nb3ZpZUNsaXAuanMiLCJzcmMvZXh0cmFzL1RpbGluZ1Nwcml0ZS5qcyIsInNyYy9leHRyYXMvY2FjaGVBc0JpdG1hcC5qcyIsInNyYy9leHRyYXMvZ2V0Q2hpbGRCeU5hbWUuanMiLCJzcmMvZXh0cmFzL2dldEdsb2JhbFBvc2l0aW9uLmpzIiwic3JjL2V4dHJhcy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2FzY2lpL0FzY2lpRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmxvb20vQmxvb21GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJEaXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJYRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9CbHVyWUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvU21hcnRCbHVyRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvclN0ZXBGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kb3QvRG90U2NyZWVuRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZHJvcHNoYWRvdy9CbHVyWVRpbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ncmF5L0dyYXlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2ludmVydC9JbnZlcnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ub2lzZS9Ob2lzZUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcmdiL1JHQlNwbGl0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvc2VwaWEvU2VwaWFGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdEF4aXNGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3R3aXN0L1R3aXN0RmlsdGVyLmpzIiwic3JjL3NyYy9pbmRleC5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbkRhdGEuanMiLCJzcmMvaW50ZXJhY3Rpb24vSW50ZXJhY3Rpb25NYW5hZ2VyLmpzIiwic3JjL2ludGVyYWN0aW9uL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL2ludGVyYWN0aXZlVGFyZ2V0LmpzIiwic3JjL2xvYWRlcnMvYml0bWFwRm9udFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL2luZGV4LmpzIiwic3JjL2xvYWRlcnMvbG9hZGVyLmpzIiwic3JjL2xvYWRlcnMvc3ByaXRlc2hlZXRQYXJzZXIuanMiLCJzcmMvbG9hZGVycy90ZXh0dXJlUGFyc2VyLmpzIiwic3JjL21lc2gvTWVzaC5qcyIsInNyYy9tZXNoL1BsYW5lLmpzIiwic3JjL21lc2gvUm9wZS5qcyIsInNyYy9tZXNoL2luZGV4LmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFJlbmRlcmVyLmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFNoYWRlci5qcyIsInNyYy9wb2x5ZmlsbC9NYXRoLnNpZ24uanMiLCJzcmMvcG9seWZpbGwvT2JqZWN0LmFzc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9pbmRleC5qcyIsInNyYy9wb2x5ZmlsbC9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM1dUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbnNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25tQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0b0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6bUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIGNyZWF0ZUNvbnRleHQ6IFx0XHRcdHJlcXVpcmUoJy4vbGliL2NyZWF0ZUNvbnRleHQnKSxcbiAgICBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM6IFx0cmVxdWlyZSgnLi9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzJyksXG4gICAgXG4gICAgR0xCdWZmZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xCdWZmZXInKSxcbiAgICBHTEZyYW1lYnVmZmVyOiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9HTEZyYW1lYnVmZmVyJyksXG4gICAgR0xTaGFkZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xTaGFkZXInKSxcbiAgICBHTFRleHR1cmU6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xUZXh0dXJlJyksXG4gICAgXG4gICAgVmVydGV4QXJyYXlPYmplY3Q6IFx0XHRyZXF1aXJlKCcuL2xpYi9WZXJ0ZXhBcnJheU9iamVjdCcpXG5cbn07IiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRU1QVFlfQVJSQVlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xuXG52YXIgQnVmZmVyID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5BUlJBWV9CVUZGRVI7XG5cdHRoaXMuZHJhd1R5cGUgPSBkcmF3VHlwZSB8fCBnbC5TVEFUSUNfRFJBVztcblx0dGhpcy5kYXRhID0gRU1QVFlfQVJSQVlfQlVGRkVSO1xuXG5cdGlmKGRhdGEpXG5cdHtcblx0XHR0aGlzLnVwbG9hZChkYXRhKTtcblx0fVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKGRhdGEsIG9mZnNldCwgZG9udEJpbmQpXG57XG5cdC8vIHRvZG8gLSBuZWVkZWQ/XG5cdC8vaWYoIWRvbnRCaW5kKVxuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRcblx0ZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuXHRvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuXHRpZih0aGlzLmRhdGEuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpXG5cdHtcdFxuXHRcdGdsLmJ1ZmZlclN1YkRhdGEodGhpcy50eXBlLCBvZmZzZXQsIGRhdGEpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLCBkYXRhLCB0aGlzLmRyYXdUeXBlKTtcblx0fVxuXG5cdHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKTtcbn1cblxuQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIGdsLkFSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgdHlwZSwgZHJhd1R5cGUpO1xufVxuXG4vL1RPRE8gRGVzdHJveS4uXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyO1xuXG4iLCJcbnZhciBUZXh0dXJlID0gcmVxdWlyZSgnLi9HTFRleHR1cmUnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgRnJhbWVidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRnJhbWVidWZmZXIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcblx0dGhpcy5zdGVuY2lsID0gbnVsbDtcblx0dGhpcy50ZXh0dXJlID0gbnVsbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMTAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5lbmFibGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IG5ldyBUZXh0dXJlKGdsKTtcblxuXHR0aGlzLnRleHR1cmUuYmluZCgpO1xuXG5cdC8vZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlLnRleHR1cmUsIDApO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlU3RlbmNpbCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5zdGVuY2lsKXJldHVybjtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuc3RlbmNpbCA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgIFxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCB0aGlzLnN0ZW5jaWwpO1xuICAgIFxuICAgIC8vIFRPRE8uLiB0aGlzIGlzIGRlcHRoIEFORCBzdGVuY2lsP1xuICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTCwgIHRoaXMud2lkdGggICwgdGhpcy5oZWlnaHQgKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oIHIsIGcsIGIsIGEgKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIGdsLmNsZWFyQ29sb3IociwgZywgYiwgYSk7XG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZnJhbWVidWZmZXIgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdGlmICggdGhpcy50ZXh0dXJlIClcbiAgICB7XG4gICAgXHR0aGlzLnRleHR1cmUudXBsb2FkRGF0YShudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdGlmICggdGhpcy5zdGVuY2lsIClcbiAgICB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgc3RlbmNpbCBidWZmZXIgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlUkdCQSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHR2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbURhdGEoZ2wsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xuXHR0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSk7XG5cbiAgICBmYm8udW5iaW5kKCk7XG4gICAgXG4gICAgcmV0dXJuIGZibztcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlRmxvYXQzMiA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHQvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZS4uXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZS5mcm9tRGF0YShnbCwgZGF0YSwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpXG5cbiAgICBmYm8udW5iaW5kKCk7XG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lYnVmZmVyO1xuXG4iLCJcbnZhciBjb21waWxlUHJvZ3JhbSA9IHJlcXVpcmUoJy4vc2hhZGVyL2NvbXBpbGVQcm9ncmFtJyksXG5cdGV4dHJhY3RBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdEF0dHJpYnV0ZXMnKSxcblx0ZXh0cmFjdFVuaWZvcm1zID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdFVuaWZvcm1zJyksXG5cdGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IHJlcXVpcmUoJy4vc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCcpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBTaGFkZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xudmFyIFNoYWRlciA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0Ly8gRmlyc3QgY29tcGlsZSB0aGUgcHJvZ3JhbS4uXG5cdHRoaXMucHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXHQvLyBuZXh0IGV4dHJhY3QgdGhlIGF0dHJpYnV0ZXNcblx0dGhpcy5hdHRyaWJ1dGVzID0gZXh0cmFjdEF0dHJpYnV0ZXMoZ2wsIHRoaXMucHJvZ3JhbSk7IFxuXG4gICAgdmFyIHVuaWZvcm1EYXRhID0gZXh0cmFjdFVuaWZvcm1zKGdsLCB0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy51bmlmb3JtcyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCggZ2wsIHVuaWZvcm1EYXRhICk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgVGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBhIFdlYkdMIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gZm9ybWF0IHtudW1iZXJ9IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlJHQkFcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IHRoZSBnbCB0eXBlIG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5VTlNJR05FRF9CWVRFXG4gKi9cbnZhciBUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHQvLyBzb21lIHNldHRpbmdzLi5cblx0dGhpcy5taXBtYXAgPSBmYWxzZTtcblxuXHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdCB8fCBnbC5SR0JBO1xuXHR0aGlzLnR5cGUgPSB0eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7XG5cblxufVxuXG4vKipcbiAqIEBwYXJhbSB7UElYSS5nbENvcmUuVGV4dHVyZX0gW3Zhcm5hbWVdIFtkZXNjcmlwdGlvbl1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oc291cmNlKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblxuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgc291cmNlKTtcbn1cblxudmFyIEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IGZhbHNlO1xuXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWREYXRhID0gZnVuY3Rpb24oZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5iaW5kKCk7XG5cdFxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgdGhpcy53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG5cblx0aWYoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcblx0e1xuXHRcdGlmKCFGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUpXG5cdFx0e1xuXHRcdFx0dmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO1xuXHRcdFx0XG5cdFx0XHRpZihleHQpXG5cdFx0XHR7XG5cdFx0XHRcdEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHlwZSA9IGdsLkZMT0FUO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdC8vIFRPRE8gc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXNcblx0XHR0aGlzLnR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuXHR9XG5cblx0Ly8gd2hhdCB0eXBlIG9mIGRhdGE/XG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcblx0Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBkYXRhIHx8IG51bGwpO1xuXG59XG5cblRleHR1cmUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihsb2NhdGlvbilcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRpZihsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKVxuXHR7XG5cdFx0Z2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uKTtcblx0fVxuXG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1pbkZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGlmKHRoaXMubWlwbWFwKVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCk7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xuXHR9XHRcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWFnRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVNaXBtYXAgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHRoaXMubWlwbWFwID0gdHJ1ZTtcblx0Z2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZUxpbmVhclNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKHRydWUpO1xuXHR0aGlzLm1hZ0ZpbHRlcih0cnVlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTmVhcmVzdFNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKGZhbHNlKTtcblx0dGhpcy5tYWdGaWx0ZXIoZmFsc2UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwQ2xhbXAgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBSZXBlYXQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cdFxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5SRVBFQVQpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG59XG5cbi8vVGV4dHVyZS5cblRleHR1cmUuZnJvbVNvdXJjZSA9IGZ1bmN0aW9uKGdsLCBzb3VyY2UsIHByZW11bHRpcGx5QWxwaGEpXG57XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhIHx8IGZhbHNlO1xuXHR0ZXh0dXJlLnVwbG9hZChzb3VyY2UpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5UZXh0dXJlLmZyb21EYXRhID0gZnVuY3Rpb24oZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdC8vY29uc29sZS5sb2coZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnVwbG9hZERhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG4iLCJcbi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxuLy8gc3RhdGUgb2JqZWN0Ly9cblxuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChnbClcbntcblx0XG5cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gKFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpXG4gICAgKTtcblxuLy9cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gbnVsbDtcblxuXHRpZih0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbilcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvID0gdGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsgIFxuXHR9XG5cblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG5cdHRoaXMuZGlydHkgPSBmYWxzZTtcblxuXHRcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVydGV4QXJyYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFZlcnRleEFycmF5T2JqZWN0O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5uYXRpdmVWYW8pOyAgXG5cblx0XHRpZih0aGlzLmRpcnR5KVxuXHRcdHtcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0XHR9XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgXG5cdHtcblx0XHR2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW2ldO1xuXHRcdGF0dHJpYi5idWZmZXIuYmluZCgpO1x0XG5cblx0XHRhdHRyaWIuYXR0cmlidXRlLnBvaW50ZXIoYXR0cmliLnR5cGUsIGF0dHJpYi5ub3JtYWxpemVkLCBhdHRyaWIuc3RyaWRlLCBhdHRyaWIuc3RhcnQpOyBcblx0XHRcblx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWIuYXR0cmlidXRlLmxvY2F0aW9uKTtcblx0fTtcblxuXHR0aGlzLmluZGV4QnVmZmVyLmJpbmQoKTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgYXR0cmlidXRlLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXJ0KVxue1xuICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHtcbiAgICBcdGJ1ZmZlcjogXHRidWZmZXIsXG4gICAgXHRhdHRyaWJ1dGU6IFx0YXR0cmlidXRlLFxuXG4gICAgXHRsb2NhdGlvbjogXHRhdHRyaWJ1dGUubG9jYXRpb24sXG5cdCBcdHR5cGU6IFx0XHR0eXBlIHx8IHRoaXMuZ2wuRkxPQVQsXG5cdCBcdG5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWQgfHwgZmFsc2UsXG5cdCBcdHN0cmlkZTogXHRzdHJpZGUgfHwgMCxcblx0IFx0c3RhcnQ6IFx0XHRzdGFydCB8fCAwXG5cdH0pXG5cblx0dGhpcy5kaXJ0eSA9IHRydWU7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRpb25zKVxue1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBidWZmZXI7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHR5cGUsIHNpemUsIHN0YXJ0KVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5kcmF3RWxlbWVudHModHlwZSwgc2l6ZSwgZ2wuVU5TSUdORURfU0hPUlQsIHN0YXJ0KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBDb250ZXh0XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIENPTlRFWFRfVUlEID0gMDtcblxudmFyIGNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbihjYW52YXMsIG9wdGlvbnMpXG57XG4gICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRpb25zKSB8fCBcbiAgICBcdCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdsKVxuICAgIHtcbiAgICAgICAgLy8gZmFpbCwgbm90IGFibGUgdG8gZ2V0IGEgY29udGV4dFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHdlYkdMLiBUcnkgdXNpbmcgdGhlIGNhbnZhcyByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIC8vIG1pZ2h0IHdhbnQgdG8gcGhhc2UgdGhpcyBvdXQ/XG4gICAgZ2wuaWQgPSBDT05URVhUX1VJRCsrO1xuXG4gICAgcmV0dXJuIGdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbnRleHQ7XG5cbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBzZXRWZXJ0ZXhBdHRyaWJBcnJheXMgPSBmdW5jdGlvbiAoZ2wsIGF0dHJpYnMpXG57XHRcbiAgIC8vIGNvbnNvbGUubG9nKGdsLmlkKVxuICAgIHZhciBkYXRhID0gR0xfTUFQW2dsLmlkXTtcblxuICAgIGlmKCFkYXRhKVxuICAgIHtcblx0ICAgdmFyIG1heEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0XHRkYXRhID0gR0xfTUFQW2dsLmlkXSA9IHt0ZW1wQXR0cmliU3RhdGU6bmV3IEFycmF5KG1heEF0dHJpYnMpXG5cdFx0XHRcdCBcdCBcdFx0ICAgLGF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKX07XG5cdH1cblx0XG4gICAgdmFyIGksXG4gICAgXHR0ZW1wQXR0cmliU3RhdGUgPSBkYXRhLnRlbXBBdHRyaWJTdGF0ZSxcbiAgICBcdGF0dHJpYlN0YXRlID0gZGF0YS5hdHRyaWJTdGF0ZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wQXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yIChpIGluIGF0dHJpYnMpXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbYXR0cmlic1tpXS5sb2NhdGlvbl0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDE7IGkgPCBhdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChhdHRyaWJTdGF0ZVtpXSAhPT0gdGVtcEF0dHJpYlN0YXRlW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJTdGF0ZVtpXSA9IHRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM7IiwiXG5cblxuXG5jb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuICAgIHZhciBnbFZlcnRTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbnZhciBjb21waWxlU2hhZGVyID0gZnVuY3Rpb24gKGdsLCB0eXBlLCBzcmMpXG57XG4gICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuXG4gICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlUHJvZ3JhbTtcblxuIiwiXG5cbnZhciBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBzaXplKSBcbntcbiAgICBzd2l0Y2ggKHR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICBjYXNlICd2ZWMyJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjNCc6ICAgICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KDQgKiBzaXplKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnaXZlYzInOiAgIFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDIgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWM0JzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2wnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY2FzZSAnYnZlYzInOlxuXG4gICAgICAgICAgICByZXR1cm4gYm9vbGVhbkFycmF5KCAyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzQnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSg0ICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDFdKTtcblxuICAgICAgICBjYXNlICdtYXQzJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0NCc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMCwgMV0pO1xuICAgIH1cbn1cblxudmFyIGJvb2xlYW5BcnJheSA9IGZ1bmN0aW9uKHNpemUpXG57XG4gICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgXG4gICAge1xuICAgICAgICBhcnJheVtpXSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdFZhbHVlO1xuIiwiXG52YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIG1hcFNpemUgPSByZXF1aXJlKCcuL21hcFNpemUnKTtcblxudmFyIGV4dHJhY3RBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcblxuICAgIHZhciB0b3RhbEF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9BVFRSSUJVVEVTKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEF0dHJpYnV0ZXM7IGkrKykgXG4gICAge1xuICAgICAgICB2YXIgYXR0cmliRGF0YSA9IGdsLmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpKTtcbiAgICAgICAgdmFyIHR5cGUgPSBtYXBUeXBlKGdsLCBhdHRyaWJEYXRhLnR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNbYXR0cmliRGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgIHR5cGU6dHlwZSxcbiAgICAgICAgICAgIHNpemU6bWFwU2l6ZSh0eXBlKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOmdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGF0dHJpYkRhdGEubmFtZSksXG4gICAgICAgICAgICAvL1RPRE8gLSBtYWtlIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAgICAgICAgICAgIHBvaW50ZXI6ZnVuY3Rpb24odHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydCl7XG5cbiAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmxvY2F0aW9uLHRoaXMuc2l6ZSwgdHlwZSB8fCBnbC5GTE9BVCwgbm9ybWFsaXplZCB8fCBmYWxzZSwgc3RyaWRlIHx8IDAsIHN0YXJ0IHx8IDApOyBcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzOyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0cmFjdEF0dHJpYnV0ZXM7XG5cbiIsInZhciBtYXBUeXBlID0gcmVxdWlyZSgnLi9tYXBUeXBlJyk7XG52YXIgZGVmYXVsdFZhbHVlID0gcmVxdWlyZSgnLi9kZWZhdWx0VmFsdWUnKTtcblxuXG52YXIgZXh0cmFjdFVuaWZvcm1zID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG5cdHZhciB1bmlmb3JtcyA9IHt9O1xuXHRcbiAgICB2YXIgdG90YWxVbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbFVuaWZvcm1zOyBpKyspIFxuICAgIHtcbiAgICBcdHZhciB1bmlmb3JtRGF0YSA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSk7XG4gICAgXHR2YXIgbmFtZSA9IHVuaWZvcm1EYXRhLm5hbWUucmVwbGFjZSgvXFxbLio/XFxdLywgXCJcIik7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgdW5pZm9ybURhdGEudHlwZSApO1xuXG4gICAgXHR1bmlmb3Jtc1tuYW1lXSA9IHtcbiAgICBcdFx0dHlwZTp0eXBlLFxuICAgIFx0XHRzaXplOnVuaWZvcm1EYXRhLnNpemUsXG4gICAgXHRcdGxvY2F0aW9uOmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSxcbiAgICBcdFx0dmFsdWU6ZGVmYXVsdFZhbHVlKHR5cGUsIHVuaWZvcm1EYXRhLnNpemUpXG4gICAgXHR9XG4gICAgfTtcblx0XG5cdHJldHVybiB1bmlmb3JtcztcdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RVbmlmb3JtcztcblxuIiwiXG52YXIgZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gZnVuY3Rpb24oZ2wsIHVuaWZvcm1EYXRhKVxue1xuICAgIC8vIHRoaXMgaXMgdGhlIG9iamVjdCB3ZSB3aWxsIGJlIHNlbmRpbmcgYmFjay5cbiAgICAvLyBhbiBvYmplY3QgaGllcmFjaHkgd2lsbCBiZSBjcmVhdGVkIGZvciBzdHJ1Y3RzXG4gICAgdmFyIHVuaWZvcm1zID0ge2RhdGE6e319O1xuXG4gICAgdW5pZm9ybXMuZ2wgPSBnbDtcbiAgICBcbiAgICB2YXIgdW5pZm9ybUtleXM9IE9iamVjdC5rZXlzKHVuaWZvcm1EYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybUtleXMubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGZ1bGxOYW1lID0gdW5pZm9ybUtleXNbaV1cblxuICAgICAgICB2YXIgbmFtZVRva2VucyA9IGZ1bGxOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHZhciB1bmlmb3JtR3JvdXAgPSBnZXRVbmlmb3JtR3JvdXAobmFtZVRva2VucywgdW5pZm9ybXMpO1xuXG4gICAgICAgIHZhciB1bmlmb3JtID0gIHVuaWZvcm1EYXRhW2Z1bGxOYW1lXTtcbiAgICAgICAgdW5pZm9ybUdyb3VwLmRhdGFbbmFtZV0gPSB1bmlmb3JtO1xuXG4gICAgICAgIHVuaWZvcm1Hcm91cC5nbCA9IGdsO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bmlmb3JtR3JvdXAsIG5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2VuZXJhdGVHZXR0ZXIobmFtZSksXG4gICAgICAgICAgICBzZXQ6IGdlbmVyYXRlU2V0dGVyKG5hbWUsIHVuaWZvcm0pXG4gICAgICAgIH0pXG4gICAgfTtcblxuICAgIHJldHVybiB1bmlmb3Jtcztcbn1cblxudmFyIGdlbmVyYXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSlcbntcblx0dmFyIHRlbXBsYXRlID0gZ2V0dGVyVGVtcGxhdGUucmVwbGFjZSgnJSUnLCBuYW1lKTtcblx0cmV0dXJuIG5ldyBGdW5jdGlvbih0ZW1wbGF0ZSk7XG59XG5cbnZhciBnZW5lcmF0ZVNldHRlciA9IGZ1bmN0aW9uKG5hbWUsIHVuaWZvcm0pXG57XG4gICAgdmFyIHRlbXBsYXRlID0gc2V0dGVyVGVtcGxhdGUucmVwbGFjZSgvJSUvZywgbmFtZSk7XG4gICAgdmFyIHNldFRlbXBsYXRlXG4gICAgXG4gICAgaWYodW5pZm9ybS5zaXplID09PSAxKVxuICAgIHtcbiAgICAgICAgc2V0VGVtcGxhdGUgPSBHTFNMX1RPX1NJTkdMRV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19BUlJBWV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuXG4gICAgaWYoc2V0VGVtcGxhdGUpXG4gICAge1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIlxcbnRoaXMuZ2wuXCIgKyBzZXRUZW1wbGF0ZSArIFwiO1wiO1xuICAgIH1cblxuICBcdHJldHVybiBuZXcgRnVuY3Rpb24oJ3ZhbHVlJywgdGVtcGxhdGUpO1xufVxuXG52YXIgZ2V0VW5pZm9ybUdyb3VwID0gZnVuY3Rpb24obmFtZVRva2VucywgdW5pZm9ybSlcbntcbiAgICB2YXIgY3VyID0gdW5pZm9ybTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZVRva2Vucy5sZW5ndGggLSAxOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIG8gPSBjdXJbbmFtZVRva2Vuc1tpXV0gfHwge2RhdGE6e319O1xuICAgICAgICBjdXJbbmFtZVRva2Vuc1tpXV0gPSBvO1xuICAgICAgICBjdXIgPSBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gY3VyXG59XG5cbnZhciBnZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAncmV0dXJuIHRoaXMuZGF0YS4lJS52YWx1ZTsnLFxuXS5qb2luKCdcXG4nKTtcblxudmFyIHNldHRlclRlbXBsYXRlID0gW1xuICAgICd0aGlzLmRhdGEuJSUudmFsdWUgPSB2YWx1ZTsnLFxuICAgICd2YXIgbG9jYXRpb24gPSB0aGlzLmRhdGEuJSUubG9jYXRpb247J1xuXS5qb2luKCdcXG4nKTtcblxuXG52YXIgR0xTTF9UT19TSU5HTEVfU0VUVEVSUyA9IHtcblxuICAgICdmbG9hdCc6ICAgICd1bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ3ZlYzQnOiAgICAgJ3VuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdidmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdidmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ21hdDInOiAgICAgJ3VuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuICAgICdtYXQzJzogICAgICd1bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0NCc6ICAgICAndW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG5cbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbnZhciBHTFNMX1RPX0FSUkFZX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpJyxcblxuICAgICd2ZWMyJzogICAgICd1bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWMzJzogICAgICd1bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgIFx0XG4gICAgJ2ludCc6ICAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgIFxuICAgICdzYW1wbGVyMkQnOid1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0O1xuXG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbih0eXBlKSBcbnsgXG4gICAgcmV0dXJuIEdMU0xfVE9fU0laRVt0eXBlXTtcbn1cblxuXG52YXIgR0xTTF9UT19TSVpFID0ge1xuICAgICdmbG9hdCc6ICAgIDEsXG4gICAgJ3ZlYzInOiAgICAgMixcbiAgICAndmVjMyc6ICAgICAzLFxuICAgICd2ZWM0JzogICAgIDQsXG5cbiAgICAnaW50JzogICAgICAxLFxuICAgICdpdmVjMic6ICAgIDIsXG4gICAgJ2l2ZWMzJzogICAgMyxcbiAgICAnaXZlYzQnOiAgICA0LFxuXG4gICAgJ2Jvb2wnOiAgICAgMSxcbiAgICAnYnZlYzInOiAgICAyLFxuICAgICdidmVjMyc6ICAgIDMsXG4gICAgJ2J2ZWM0JzogICAgNCxcblxuICAgICdtYXQyJzogICAgIDQsXG4gICAgJ21hdDMnOiAgICAgOSxcbiAgICAnbWF0NCc6ICAgICAxNixcblxuICAgICdzYW1wbGVyMkQnOiAgMVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFNpemU7XG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbihnbCwgdHlwZSkgXG57XG4gICAgaWYoIUdMX1RBQkxFKSBcbiAgICB7XG4gICAgICAgIHZhciB0eXBlTmFtZXMgPSBPYmplY3Qua2V5cyhHTF9UT19HTFNMX1RZUEVTKTtcblxuICAgICAgICBHTF9UQUJMRSA9IHt9O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlTmFtZXMubGVuZ3RoOyArK2kpIFxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdG4gPSB0eXBlTmFtZXNbaV07XG4gICAgICAgICAgICBHTF9UQUJMRVsgZ2xbdG5dIF0gPSBHTF9UT19HTFNMX1RZUEVTW3RuXTtcbiAgICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gR0xfVEFCTEVbdHlwZV07XG59XG5cbnZhciBHTF9UQUJMRSA9IG51bGw7XG5cbnZhciBHTF9UT19HTFNMX1RZUEVTID0ge1xuICAnRkxPQVQnOiAgICAgICAnZmxvYXQnLFxuICAnRkxPQVRfVkVDMic6ICAndmVjMicsXG4gICdGTE9BVF9WRUMzJzogICd2ZWMzJyxcbiAgJ0ZMT0FUX1ZFQzQnOiAgJ3ZlYzQnLFxuXG4gICdJTlQnOiAgICAgICAgICdpbnQnLFxuICAnSU5UX1ZFQzInOiAgICAnaXZlYzInLFxuICAnSU5UX1ZFQzMnOiAgICAnaXZlYzMnLFxuICAnSU5UX1ZFQzQnOiAgICAnaXZlYzQnLFxuICBcbiAgJ0JPT0wnOiAgICAgICAgJ2Jvb2wnLFxuICAnQk9PTF9WRUMyJzogICAnYnZlYzInLFxuICAnQk9PTF9WRUMzJzogICAnYnZlYzMnLFxuICAnQk9PTF9WRUM0JzogICAnYnZlYzQnLFxuICBcbiAgJ0ZMT0FUX01BVDInOiAgJ21hdDInLFxuICAnRkxPQVRfTUFUMyc6ICAnbWF0MycsXG4gICdGTE9BVF9NQVQ0JzogICdtYXQ0JyxcbiAgXG4gICdTQU1QTEVSXzJEJzogICdzYW1wbGVyMkQnICBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiLyohXG4gKiBhc3luY1xuICogaHR0cHM6Ly9naXRodWIuY29tL2Nhb2xhbi9hc3luY1xuICpcbiAqIENvcHlyaWdodCAyMDEwLTIwMTQgQ2FvbGFuIE1jTWFob25cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9Cb29sKHYpIHtcbiAgICAgICAgcmV0dXJuICEhdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90SWQodikge1xuICAgICAgICByZXR1cm4gIXY7XG4gICAgfVxuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBwcmV2aW91c19hc3luYztcblxuICAgIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAgIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICAgIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsIHx8XG4gICAgICAgICAgICB0aGlzO1xuXG4gICAgaWYgKHJvb3QgIT0gbnVsbCkge1xuICAgICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsaXR5IGZ1bmN0aW9ucyAvLy8vXG5cbiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIHZhciBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xuXG4gICAgLy8gUG9ydGVkIGZyb20gdW5kZXJzY29yZS5qcyBpc09iamVjdFxuICAgIHZhciBfaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2lzQXJyYXlMaWtlKGFycikge1xuICAgICAgICByZXR1cm4gX2lzQXJyYXkoYXJyKSB8fCAoXG4gICAgICAgICAgICAvLyBoYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAgICAgICAgdHlwZW9mIGFyci5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgICAgYXJyLmxlbmd0aCAlIDEgPT09IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXJyYXlFYWNoKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaW5kZXhdLCBpbmRleCwgYXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IGFyci5sZW5ndGgsXG4gICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcmFuZ2UoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9tYXAoQXJyYXkoY291bnQpLCBmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gaTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZHVjZShhcnIsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgIF9hcnJheUVhY2goYXJyLCBmdW5jdGlvbiAoeCwgaSwgYSkge1xuICAgICAgICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHgsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZvckVhY2hPZihvYmplY3QsIGl0ZXJhdG9yKSB7XG4gICAgICAgIF9hcnJheUVhY2goX2tleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaXRlcmF0b3Iob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbmRleE9mKGFyciwgaXRlbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9rZXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW47XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBpZiAoX2lzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGkgOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBfa2V5cyhjb2xsKTtcbiAgICAgICAgICAgIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ga2V5c1tpXSA6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2ltaWxhciB0byBFUzYncyByZXN0IHBhcmFtIChodHRwOi8vYXJpeWEub2ZpbGFicy5jb20vMjAxMy8wMy9lczYtYW5kLXJlc3QtcGFyYW1ldGVyLmh0bWwpXG4gICAgLy8gVGhpcyBhY2N1bXVsYXRlcyB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGFuIGFycmF5LCBhZnRlciBhIGdpdmVuIGluZGV4LlxuICAgIC8vIEZyb20gdW5kZXJzY29yZS5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMjE0MCkuXG4gICAgZnVuY3Rpb24gX3Jlc3RQYXJhbShmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IHVudXNlZCBidXQgaGFuZGxlIGNhc2VzIG91dHNpZGUgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQ6XG4gICAgICAgICAgICAvLyB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgIC8vIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIC8vICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgICAgICAgIC8vIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IodmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG5cbiAgICAvLyBjYXB0dXJlIHRoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIGd1YXJkIGFnYWluc3QgZmFrZVRpbWVyIG1vY2tzXG4gICAgdmFyIF9zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcblxuICAgIHZhciBfZGVsYXkgPSBfc2V0SW1tZWRpYXRlID8gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgX3NldEltbWVkaWF0ZShmbik7XG4gICAgfSA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IF9kZWxheTtcbiAgICB9XG4gICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gX3NldEltbWVkaWF0ZSA/IF9kZWxheSA6IGFzeW5jLm5leHRUaWNrO1xuXG5cbiAgICBhc3luYy5mb3JFYWNoID1cbiAgICBhc3luYy5lYWNoID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2YoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID1cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cblxuICAgIGFzeW5jLmZvckVhY2hMaW1pdCA9XG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2VhY2hPZkxpbWl0KGxpbWl0KShhcnIsIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZiA9XG4gICAgYXN5bmMuZWFjaE9mID0gZnVuY3Rpb24gKG9iamVjdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdCB8fCBbXTtcblxuICAgICAgICB2YXIgaXRlciA9IF9rZXlJdGVyYXRvcihvYmplY3QpO1xuICAgICAgICB2YXIga2V5LCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgICAgIHdoaWxlICgoa2V5ID0gaXRlcigpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXksIG9ubHlfb25jZShkb25lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkID09PSAwKSBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgICAgY29tcGxldGVkLS07XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGtleSBpcyBudWxsIGluIGNhc2UgaXRlcmF0b3IgaXNuJ3QgZXhoYXVzdGVkXG4gICAgICAgICAgICAvLyBhbmQgZG9uZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBudWxsICYmIGNvbXBsZXRlZCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaE9mU2VyaWVzID1cbiAgICBhc3luYy5lYWNoT2ZTZXJpZXMgPSBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShpdGVyYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLmZvckVhY2hPZkxpbWl0ID1cbiAgICBhc3luYy5lYWNoT2ZMaW1pdCA9IGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgX2VhY2hPZkxpbWl0KGxpbWl0KShvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9lYWNoT2ZMaW1pdChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgICAgICBvYmogPSBvYmogfHwgW107XG4gICAgICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUgJiYgcnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmICFlcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBuZXh0S2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iob2JqW2tleV0sIGtleSwgb25seV9vbmNlKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZG9QYXJhbGxlbChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oYXN5bmMuZWFjaE9mLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWxMaW1pdChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKF9lYWNoT2ZMaW1pdChsaW1pdCksIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9TZXJpZXMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZlNlcmllcywgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UoYXJyKSA/IFtdIDoge307XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih2YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9hc3luY01hcCk7XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMuaW5qZWN0ID1cbiAgICBhc3luYy5mb2xkbCA9XG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hPZlNlcmllcyhhcnIsIGZ1bmN0aW9uICh4LCBpLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgeCwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBtZW1vKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvbGRyID1cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgaWRlbnRpdHkpLnJldmVyc2UoKTtcbiAgICAgICAgYXN5bmMucmVkdWNlKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0b3I7XG4gICAgICAgICAgICBpdGVyYXRvciA9IG1lbW87XG4gICAgICAgICAgICBtZW1vID0gX2lzQXJyYXkoYXJyKSA/IFtdIDoge307XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoT2YoYXJyLCBmdW5jdGlvbih2LCBrLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgdiwgaywgY2IpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4OiBpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5zZWxlY3QgPVxuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RMaW1pdCA9XG4gICAgYXN5bmMuZmlsdGVyTGltaXQgPSBkb1BhcmFsbGVsTGltaXQoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RTZXJpZXMgPVxuICAgIGFzeW5jLmZpbHRlclNlcmllcyA9IGRvU2VyaWVzKF9maWx0ZXIpO1xuXG4gICAgZnVuY3Rpb24gX3JlamVjdChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9maWx0ZXIoZWFjaGZuLCBhcnIsIGZ1bmN0aW9uKHZhbHVlLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBjYighdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBhc3luYy5yZWplY3QgPSBkb1BhcmFsbGVsKF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdFNlcmllcyA9IGRvU2VyaWVzKF9yZWplY3QpO1xuXG4gICAgZnVuY3Rpb24gX2NyZWF0ZVRlc3RlcihlYWNoZm4sIGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYikge1xuICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIGNiKGdldFJlc3VsdChmYWxzZSwgdm9pZCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZSh4LCBfLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYiAmJiBjaGVjayh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoZ2V0UmVzdWx0KHRydWUsIHgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgZWFjaGZuKGFyciwgbGltaXQsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2IgPSBpdGVyYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGxpbWl0O1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy5hbnkgPVxuICAgIGFzeW5jLnNvbWUgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5zb21lTGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCB0b0Jvb2wsIGlkZW50aXR5KTtcblxuICAgIGFzeW5jLmFsbCA9XG4gICAgYXN5bmMuZXZlcnkgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgbm90SWQsIG5vdElkKTtcblxuICAgIGFzeW5jLmV2ZXJ5TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBub3RJZCwgbm90SWQpO1xuXG4gICAgZnVuY3Rpb24gX2ZpbmRHZXRSZXN1bHQodiwgeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgYXN5bmMuZGV0ZWN0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0U2VyaWVzID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZTZXJpZXMsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuXG4gICAgYXN5bmMuc29ydEJ5ID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLm1hcChhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKGVyciwgY3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7dmFsdWU6IHgsIGNyaXRlcmlhOiBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChjb21wYXJhdG9yKSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNvbmN1cnJlbmN5LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gcmVtYWluaW5nVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBfaW5kZXhPZihsaXN0ZW5lcnMsIGZuKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRhc2tDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLS07XG4gICAgICAgICAgICBfYXJyYXlFYWNoKGxpc3RlbmVycy5zbGljZSgwKSwgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBfYXJyYXlFYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9mb3JFYWNoT2YocmVzdWx0cywgZnVuY3Rpb24odmFsLCBya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHRhc2tDb21wbGV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRlYWQtbG9ja3NcbiAgICAgICAgICAgIHZhciBsZW4gPSByZXF1aXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZGVwO1xuICAgICAgICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZGVwID0gdGFza3NbcmVxdWlyZXNbbGVuXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGluZXhpc3RhbnQgZGVwZW5kZW5jeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzQXJyYXkoZGVwKSAmJiBfaW5kZXhPZihkZXAsIGspID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXMgY3ljbGljIGRlcGVuZGVuY2llcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5uaW5nVGFza3MgPCBjb25jdXJyZW5jeSAmJiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzKys7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLnJldHJ5ID0gZnVuY3Rpb24odGltZXMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBERUZBVUxUX1RJTUVTID0gNTtcbiAgICAgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuXG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbDogREVGQVVMVF9JTlRFUlZBTFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KXtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0ID09PSAnbnVtYmVyJyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodCwgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYodHlwZW9mIHQgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBhY2MudGltZXMgPSBwYXJzZUludCh0LnRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgICAgICAgICBhY2MuaW50ZXJ2YWwgPSBwYXJzZUludCh0LmludGVydmFsLCAxMCkgfHwgREVGQVVMVF9JTlRFUlZBTDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGZvciBcXCd0aW1lc1xcJzogJyArIHR5cGVvZiB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgMSB8fCBsZW5ndGggPiAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIC0gbXVzdCBiZSBlaXRoZXIgKHRhc2spLCAodGFzaywgY2FsbGJhY2spLCAodGltZXMsIHRhc2spIG9yICh0aW1lcywgdGFzaywgY2FsbGJhY2spJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoIDw9IDIgJiYgdHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRzLCB0aW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBvcHRzLnRhc2sgPSB0YXNrO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRUYXNrKHdyYXBwZWRDYWxsYmFjaywgd3JhcHBlZFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCh0YXNrLCBmaW5hbEF0dGVtcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VyaWVzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayhmdW5jdGlvbihlcnIsIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXNDYWxsYmFjayghZXJyIHx8IGZpbmFsQXR0ZW1wdCwge2VycjogZXJyLCByZXN1bHQ6IHJlc3VsdH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVkUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmV0cnlJbnRlcnZhbChpbnRlcnZhbCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAob3B0cy50aW1lcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsQXR0ZW1wdCA9ICEob3B0cy50aW1lcy09MSk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQob3B0cy50YXNrLCBmaW5hbEF0dGVtcHQpKTtcbiAgICAgICAgICAgICAgICBpZighZmluYWxBdHRlbXB0ICYmIG9wdHMuaW50ZXJ2YWwgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUludGVydmFsKG9wdHMuaW50ZXJ2YWwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IG9wdHMuY2FsbGJhY2spKGRhdGEuZXJyLCBkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIG9wdHMuY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2s7XG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBJdGVyYXRvcihpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgW2Vycl0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuc3VyZUFzeW5jKGl0ZXJhdG9yKS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfcGFyYWxsZWwoZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IF9pc0FycmF5TGlrZSh0YXNrcykgPyBbXSA6IHt9O1xuXG4gICAgICAgIGVhY2hmbih0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGtleSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRhc2soX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2YsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChfZWFjaE9mTGltaXQobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKGFzeW5jLmVhY2hPZlNlcmllcywgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuaXRlcmF0b3IgPSBmdW5jdGlvbiAodGFza3MpIHtcbiAgICAgICAgZnVuY3Rpb24gbWFrZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm4ubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgdGFza3MubGVuZ3RoIC0gMSkgPyBtYWtlQ2FsbGJhY2soaW5kZXggKyAxKTogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIChmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoY2FsbEFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLCBhcmdzLmNvbmNhdChjYWxsQXJncylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gX2NvbmNhdChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoeSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG4gICAgICAgIGlmICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0LmFwcGx5KHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1doaWxzdCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiArK2NhbGxzIDw9IDEgfHwgdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZHVyaW5nID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG5cbiAgICAgICAgdmFyIG5leHQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjaGVjayk7XG4gICAgICAgICAgICAgICAgdGVzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24oZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRydXRoKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QoY2hlY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb0R1cmluZyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgYXN5bmMuZHVyaW5nKGZ1bmN0aW9uKG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjYWxscysrIDwgMSkge1xuICAgICAgICAgICAgICAgIG5leHQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3F1ZXVlKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHBvcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayB8fCBub29wXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9uZXh0KHEsIHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIF9hcnJheUVhY2godGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2god29ya2Vyc0xpc3QsIGZ1bmN0aW9uICh3b3JrZXIsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya2VyID09PSB0YXNrICYmICFyZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBub29wLFxuICAgICAgICAgICAgZW1wdHk6IG5vb3AsXG4gICAgICAgICAgICBkcmFpbjogbm9vcCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5kcmFpbiA9IG5vb3A7XG4gICAgICAgICAgICAgICAgcS50YXNrcyA9IFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnQ6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrcyA9IHEucGF5bG9hZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS5wYXlsb2FkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS50YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9tYXAodGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5wdXNoKHRhc2tzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShfbmV4dChxLCB0YXNrcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyKGRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtlcnNMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSBmYWxzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bWVDb3VudCA9IE1hdGgubWluKHEuY29uY3VycmVuY3ksIHEudGFza3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHJlc3VtZUNvdW50OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBxID0gX3F1ZXVlKGZ1bmN0aW9uIChpdGVtcywgY2IpIHtcbiAgICAgICAgICAgIHdvcmtlcihpdGVtc1swXSwgY2IpO1xuICAgICAgICB9LCBjb25jdXJyZW5jeSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLnByaW9yaXR5UXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuXG4gICAgICAgIGZ1bmN0aW9uIF9jb21wYXJlVGFza3MoYSwgYil7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgICB2YXIgYmVnID0gLTEsXG4gICAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgc2VxdWVuY2VbbWlkXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWcgPSBtaWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmVnO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBfcXVldWUod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2NvbnNvbGVfZm4obmFtZSkge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2goYXJncywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlW25hbWVdKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgaWRlbnRpdHk7XG4gICAgICAgIHZhciBtZW1vaXplZCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24gbWVtb2l6ZWQoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBtZW1vW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0gPSBbY2FsbGJhY2tdO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW9ba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH07XG5cbiAgICBhc3luYy51bm1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3RpbWVzKG1hcHBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG1hcHBlcihfcmFuZ2UoY291bnQpLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jLnRpbWVzID0gX3RpbWVzKGFzeW5jLm1hcCk7XG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBfdGltZXMoYXN5bmMubWFwU2VyaWVzKTtcbiAgICBhc3luYy50aW1lc0xpbWl0ID0gZnVuY3Rpb24gKGNvdW50LCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5tYXBMaW1pdChfcmFuZ2UoY291bnQpLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VxID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5vb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnJlZHVjZShmbnMsIGFyZ3MsIGZ1bmN0aW9uIChuZXdhcmdzLCBmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBuZXdhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBuZXh0YXJncykge1xuICAgICAgICAgICAgICAgICAgICBjYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY29tcG9zZSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIF9hcHBseUVhY2goZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uKGZucywgYXJncykge1xuICAgICAgICAgICAgdmFyIGdvID0gX3Jlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgXywgY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncy5jb25jYXQoW2NiXSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ28uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ287XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmFwcGx5RWFjaCA9IF9hcHBseUVhY2goYXN5bmMuZWFjaE9mKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZlNlcmllcyk7XG5cblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seV9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIgdGFzayA9IGVuc3VyZUFzeW5jKGZuKTtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmVuc3VyZUFzeW5jID0gZW5zdXJlQXN5bmM7XG5cbiAgICBhc3luYy5jb25zdGFudCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICAgIHZhciBhcmdzID0gW251bGxdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhc3luYy53cmFwU3luYyA9XG4gICAgYXN5bmMuYXN5bmNpZnkgPSBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChfaXNPYmplY3QocmVzdWx0KSAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIubWVzc2FnZSA/IGVyciA6IG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcblxuICAgIGRpbSA9IGRpbSB8fCAyO1xuXG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLFxuICAgICAgICBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcbiAgICAgICAgdHJpYW5nbGVzID0gW107XG5cbiAgICBpZiAoIW91dGVyTm9kZSkgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBzaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgc2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIHN1bSA9IDAsXG4gICAgICAgIGksIGosIGxhc3Q7XG5cbiAgICAvLyBjYWxjdWxhdGUgb3JpZ2luYWwgd2luZGluZyBvcmRlciBvZiBhIHBvbHlnb24gcmluZ1xuICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuXG4gICAgLy8gbGluayBwb2ludHMgaW50byBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHN1bSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG4gICAgaWYgKCFzdGFydCkgcmV0dXJuIHN0YXJ0O1xuICAgIGlmICghZW5kKSBlbmQgPSBzdGFydDtcblxuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcCA9IGVuZCA9IHAucHJldjtcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuICAgIHJldHVybiBlbmQ7XG59XG5cbi8vIG1haW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBhcyBhIGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIHBhc3MpIHtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuICAgIGlmICghcGFzcyAmJiBzaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICB2YXIgc3RvcCA9IGVhcixcbiAgICAgICAgcHJldiwgbmV4dDtcblxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuICAgIHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcbiAgICAgICAgcHJldiA9IGVhci5wcmV2O1xuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XG5cbiAgICAgICAgaWYgKHNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIHNpemUpIDogaXNFYXIoZWFyKSkge1xuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXG4gICAgICAgICAgICByZW1vdmVOb2RlKGVhcik7XG5cbiAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRpY2UgbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhlYXIsIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIHNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICAvLyBmaXJzdCBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBpbmNyZWFzaW5nIHotb3JkZXJcbiAgICB2YXIgcCA9IGVhci5uZXh0WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyB0aGVuIGxvb2sgZm9yIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICBwID0gZWFyLnByZXZaO1xuXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgLy8gYSBzZWxmLWludGVyc2VjdGlvbiB3aGVyZSBlZGdlICh2W2ktMV0sdltpXSkgaW50ZXJzZWN0cyAodltpKzFdLHZbaSsyXSlcbiAgICAgICAgaWYgKGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHA7XG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBsb29rIGZvciBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgICAgICAgICBhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiA9IGIubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBhID0gYS5uZXh0O1xuICAgIH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG4gICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuICAgICAgICBpZiAobGlzdCA9PT0gbGlzdC5uZXh0KSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuICAgICAgICBxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcbiAgICB9XG5cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0ZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlWChhLCBiKSB7XG4gICAgcmV0dXJuIGEueCAtIGIueDtcbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkge1xuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xuICAgICAgICBmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcbiAgICB9XG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBwID0gb3V0ZXJOb2RlLFxuICAgICAgICBoeCA9IGhvbGUueCxcbiAgICAgICAgaHkgPSBob2xlLnksXG4gICAgICAgIHF4ID0gLUluZmluaXR5LFxuICAgICAgICBtO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgdGFuO1xuXG4gICAgcCA9IG0ubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBzdG9wKSB7XG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG0ueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG0ueSA/IGh4IDogcXgsIGh5LCBtLngsIG0ueSwgaHkgPCBtLnkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuICAgICAgICAgICAgaWYgKCh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIHAueCA+IG0ueCkpICYmIGxvY2FsbHlJbnNpZGUocCwgaG9sZSkpIHtcbiAgICAgICAgICAgICAgICBtID0gcDtcbiAgICAgICAgICAgICAgICB0YW5NaW4gPSB0YW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBtO1xufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgIHAucHJldlogPSBwLnByZXY7XG4gICAgICAgIHAubmV4dFogPSBwLm5leHQ7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgcC5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKHApO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIGRvIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHFTaXplID09PSAwIHx8ICFxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAueiA8PSBxLnopIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuICAgICAgICBpblNpemUgKj0gMjtcblxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIHNpemUgb2YgdGhlIGRhdGEgYm91bmRpbmcgYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpIC8gc2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpIC8gc2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LngpIGxlZnRtb3N0ID0gcDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gbGVmdG1vc3Q7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcbiAgICByZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXF1YWxzKGEsIGIpIHx8IGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcbiAgICAgICAgICAgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKTtcbn1cblxuLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xufVxuXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXG4gICAgICAgICAgIGFyZWEocDIsIHEyLCBwMSkgPiAwICE9PSBhcmVhKHAyLCBxMiwgcTEpID4gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG4vLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG4gICAgICAgIGFuID0gYS5uZXh0LFxuICAgICAgICBicCA9IGIucHJldjtcblxuICAgIGEubmV4dCA9IGI7XG4gICAgYi5wcmV2ID0gYTtcblxuICAgIGEyLm5leHQgPSBhbjtcbiAgICBhbi5wcmV2ID0gYTI7XG5cbiAgICBiMi5uZXh0ID0gYTI7XG4gICAgYTIucHJldiA9IGIyO1xuXG4gICAgYnAubmV4dCA9IGIyO1xuICAgIGIyLnByZXYgPSBicDtcblxuICAgIHJldHVybiBiMjtcbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgcC5wcmV2ID0gcDtcbiAgICAgICAgcC5uZXh0ID0gcDtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHAubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgcC5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xuICAgICAgICBsYXN0Lm5leHQgPSBwO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XG4gICAgcC5uZXh0LnByZXYgPSBwLnByZXY7XG4gICAgcC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cbiAgICBpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG4gICAgaWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcbiAgICAvLyB2ZXJ0aWNlIGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRpY2Ugbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vXG4vLyBXZSBzdG9yZSBvdXIgRUUgb2JqZWN0cyBpbiBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBgfmAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Qgb3ZlcnJpZGRlbiBvclxuLy8gdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy8gV2UgYWxzbyBhc3N1bWUgdGhhdCBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV2ZW50IG5hbWVcbi8vIGlzIGFuIEVTNiBTeW1ib2wuXG4vL1xudmFyIHByZWZpeCA9IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nID8gJ34nIDogZmFsc2U7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgRXZlbnRFbWl0dGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBDb250ZXh0IGZvciBmdW5jdGlvbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSBlbWl0IG9uY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTWluaW1hbCBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIEV2ZW50RW1pdHRlciBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7IC8qIE5vdGhpbmcgdG8gc2V0ICovIH1cblxuLyoqXG4gKiBIb2xkcyB0aGUgYXNzaWduZWQgRXZlbnRFbWl0dGVycyBieSBuYW1lLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBhc3NpZ25lZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBleGlzdHMgV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtBcnJheXxCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQsIGV4aXN0cykge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgYXZhaWxhYmxlID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChleGlzdHMpIHJldHVybiAhIWF2YWlsYWJsZTtcbiAgaWYgKCFhdmFpbGFibGUpIHJldHVybiBbXTtcbiAgaWYgKGF2YWlsYWJsZS5mbikgcmV0dXJuIFthdmFpbGFibGUuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXZhaWxhYmxlLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGF2YWlsYWJsZVtpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB0byBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJbmRpY2F0aW9uIGlmIHdlJ3ZlIGVtaXR0ZWQgYW4gZXZlbnQuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IEV2ZW50TGlzdGVuZXIgZm9yIHRoZSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0b259IGZuIENhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGQgYW4gRXZlbnRMaXN0ZW5lciB0aGF0J3Mgb25seSBjYWxsZWQgb25jZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IHRoaXMsIHRydWUpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKSB0aGlzLl9ldmVudHMgPSBwcmVmaXggPyB7fSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHRoaXMuX2V2ZW50c1tldnRdID0gbGlzdGVuZXI7XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5fZXZlbnRzW2V2dF0uZm4pIHRoaXMuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIGVsc2UgdGhpcy5fZXZlbnRzW2V2dF0gPSBbXG4gICAgICB0aGlzLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3ZSB3YW50IHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciB0aGF0IHdlIG5lZWQgdG8gZmluZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgT25seSByZW1vdmUgbGlzdGVuZXJzIG1hdGNoaW5nIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmNlIGxpc3RlbmVycy5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGV2ZW50cyA9IFtdO1xuXG4gIGlmIChmbikge1xuICAgIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgICAgbGlzdGVuZXJzLmZuICE9PSBmblxuICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzLm9uY2UpXG4gICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVycy5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm5cbiAgICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpXG4gICAgICAgICAgfHwgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gIC8vXG4gIGlmIChldmVudHMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbZXZ0XTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycyBvciBvbmx5IHRoZSBsaXN0ZW5lcnMgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvci5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcztcblxuICBpZiAoZXZlbnQpIGRlbGV0ZSB0aGlzLl9ldmVudHNbcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudF07XG4gIGVsc2UgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYXBwbHkgYW55bW9yZS5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLypqc2hpbnQgb25ldmFyOiBmYWxzZSwgaW5kZW50OjQgKi9cbi8qZ2xvYmFsIHNldEltbWVkaWF0ZTogZmFsc2UsIHNldFRpbWVvdXQ6IGZhbHNlLCBjb25zb2xlOiBmYWxzZSAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciByb290LCBwcmV2aW91c19hc3luYztcblxuICAgIHJvb3QgPSB0aGlzO1xuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgIHByZXZpb3VzX2FzeW5jID0gcm9vdC5hc3luYztcbiAgICB9XG5cbiAgICBhc3luYy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmFzeW5jID0gcHJldmlvdXNfYXN5bmM7XG4gICAgICAgIHJldHVybiBhc3luYztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb25seV9vbmNlKGZuKSB7XG4gICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGNhbGxlZCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseShyb290LCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIHZhciBfZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaV0sIGksIGFycik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIF9tYXAgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBpZiAoYXJyLm1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5tYXAoaXRlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih4LCBpLCBhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgdmFyIF9yZWR1Y2UgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBpZiAoYXJyLnJlZHVjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8pO1xuICAgICAgICB9XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICB2YXIgX2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIC8vLy8gZXhwb3J0ZWQgYXN5bmMgbW9kdWxlIGZ1bmN0aW9ucyAvLy8vXG5cbiAgICAvLy8vIG5leHRUaWNrIGltcGxlbWVudGF0aW9uIHdpdGggYnJvd3Nlci1jb21wYXRpYmxlIGZhbGxiYWNrIC8vLy9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICEocHJvY2Vzcy5uZXh0VGljaykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgICBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAvLyBub3QgYSBkaXJlY3QgYWxpYXMgZm9yIElFMTAgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBvbmx5X29uY2UoZG9uZSkgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaCA9IGFzeW5jLmVhY2g7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmICghYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgIHZhciBpdGVyYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA+PSBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2hTZXJpZXMgPSBhc3luYy5lYWNoU2VyaWVzO1xuXG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZm4gPSBfZWFjaExpbWl0KGxpbWl0KTtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgW2FyciwgaXRlcmF0b3IsIGNhbGxiYWNrXSk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPSBhc3luYy5lYWNoTGltaXQ7XG5cbiAgICB2YXIgX2VhY2hMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBpZiAoIWFyci5sZW5ndGggfHwgbGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmIHN0YXJ0ZWQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihhcnJbc3RhcnRlZCAtIDFdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBkb1BhcmFsbGVsID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZG9QYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24obGltaXQsIGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW19lYWNoTGltaXQobGltaXQpXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvU2VyaWVzID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hTZXJpZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuXG4gICAgdmFyIF9hc3luY01hcCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW3guaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX21hcExpbWl0KGxpbWl0KShhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHZhciBfbWFwTGltaXQgPSBmdW5jdGlvbihsaW1pdCkge1xuICAgICAgICByZXR1cm4gZG9QYXJhbGxlbExpbWl0KGxpbWl0LCBfYXN5bmNNYXApO1xuICAgIH07XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gaW5qZWN0IGFsaWFzXG4gICAgYXN5bmMuaW5qZWN0ID0gYXN5bmMucmVkdWNlO1xuICAgIC8vIGZvbGRsIGFsaWFzXG4gICAgYXN5bmMuZm9sZGwgPSBhc3luYy5yZWR1Y2U7XG5cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIC8vIGZvbGRyIGFsaWFzXG4gICAgYXN5bmMuZm9sZHIgPSBhc3luYy5yZWR1Y2VSaWdodDtcblxuICAgIHZhciBfZmlsdGVyID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZmlsdGVyID0gZG9QYXJhbGxlbChfZmlsdGVyKTtcbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcbiAgICAvLyBzZWxlY3QgYWxpYXNcbiAgICBhc3luYy5zZWxlY3QgPSBhc3luYy5maWx0ZXI7XG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID0gYXN5bmMuZmlsdGVyU2VyaWVzO1xuXG4gICAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIHZhciBfZGV0ZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5kZXRlY3QgPSBkb1BhcmFsbGVsKF9kZXRlY3QpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IGRvU2VyaWVzKF9kZXRlY3QpO1xuXG4gICAgYXN5bmMuc29tZSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGFueSBhbGlhc1xuICAgIGFzeW5jLmFueSA9IGFzeW5jLnNvbWU7XG5cbiAgICBhc3luYy5ldmVyeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbGwgYWxpYXNcbiAgICBhc3luYy5hbGwgPSBhc3luYy5ldmVyeTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChmbiksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aFxuICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB2YXIgYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGZuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0YXNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tXG4gICAgICAgICAgICBfZWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudCBmaW5hbCBjYWxsYmFjayBmcm9tIGNhbGxpbmcgaXRzZWxmIGlmIGl0IGVycm9yc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICB0aGVDYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2VhY2goa2V5cywgZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gX2lzQXJyYXkodGFza3Nba10pID8gdGFza3Nba106IFt0YXNrc1trXV07XG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2FmZVJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgX2VhY2goX2tleXMocmVzdWx0cyksIGZ1bmN0aW9uKHJrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW3JrZXldID0gcmVzdWx0c1tya2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3Agc3Vic2VxdWVudCBlcnJvcnMgaGl0dGluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIE1hdGguYWJzKHRhc2subGVuZ3RoIC0gMSkpIHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuICAgICAgICAvLyBVc2UgZGVmYXVsdHMgaWYgdGltZXMgbm90IHBhc3NlZFxuICAgICAgICBpZiAodHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgICAgICB0aW1lcyA9IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRpbWVzIGlzIGEgbnVtYmVyXG4gICAgICAgIHRpbWVzID0gcGFyc2VJbnQodGltZXMsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICB2YXIgd3JhcHBlZFRhc2sgPSBmdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICB2YXIgcmV0cnlBdHRlbXB0ID0gZnVuY3Rpb24odGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2hpbGUgKHRpbWVzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQodGFzaywgISh0aW1lcy09MSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IGNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQsIHJ1biB0aGlzIGFzIGEgY29udHJvbGwgZmxvd1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2tcbiAgICB9O1xuXG4gICAgYXN5bmMud2F0ZXJmYWxsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIV9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd3JhcEl0ZXJhdG9yID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2god3JhcEl0ZXJhdG9yKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gZnVuY3Rpb24oZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKF9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgZWFjaGZuLm1hcCh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgZWFjaGZuLmVhY2goX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBhc3luYy5tYXAsIGVhY2g6IGFzeW5jLmVhY2ggfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKHRhc2tzLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBfbWFwTGltaXQobGltaXQpLCBlYWNoOiBfZWFjaExpbWl0KGxpbWl0KSB9LCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGFzeW5jLm1hcFNlcmllcyh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhfa2V5cyh0YXNrcyksIGZ1bmN0aW9uIChrLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRhc2tzW2tdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIHZhciBtYWtlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbWFrZUNhbGxiYWNrKDApO1xuICAgIH07XG5cbiAgICBhc3luYy5hcHBseSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBfY29uY2F0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNiKSB7XG4gICAgICAgICAgICBmbih4LCBmdW5jdGlvbiAoZXJyLCB5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMud2hpbHN0KHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICh0ZXN0LmFwcGx5KG51bGwsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0ZXN0KCkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3luYy51bnRpbCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvVW50aWwgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICghdGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvVW50aWwoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICBxLnRhc2tzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbnVsbCxcbiAgICAgICAgICAgIGVtcHR5OiBudWxsLFxuICAgICAgICAgICAgZHJhaW46IG51bGwsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcS5kcmFpbiA9IG51bGw7XG4gICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghcS5wYXVzZWQgJiYgd29ya2VycyA8IHEuY29uY3VycmVuY3kgJiYgcS50YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBxLnRhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLmVtcHR5ICYmIHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4gJiYgcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyKHRhc2suZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHEuY29uY3VycmVuY3k7IHcrKykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICBlbmQgPSBzZXF1ZW5jZS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciBtaWQgPSBiZWcgKyAoKGVuZCAtIGJlZyArIDEpID4+PiAxKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKF9iaW5hcnlTZWFyY2gocS50YXNrcywgaXRlbSwgX2NvbXBhcmVUYXNrcykgKyAxLCAwLCBpdGVtKTtcblxuICAgICAgICAgICAgICBpZiAocS5zYXR1cmF0ZWQgJiYgcS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvblxuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5jYXJnbyA9IGZ1bmN0aW9uICh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHdvcmtpbmcgICAgID0gZmFsc2UsXG4gICAgICAgICAgICB0YXNrcyAgICAgICA9IFtdO1xuXG4gICAgICAgIHZhciBjYXJnbyA9IHtcbiAgICAgICAgICAgIHRhc2tzOiB0YXNrcyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgZHJhaW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX2VhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXJnby5kcmFpbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXJnby5zYXR1cmF0ZWQgJiYgdGFza3MubGVuZ3RoID09PSBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnby5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShjYXJnby5wcm9jZXNzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICAgICAgICAgIGlmICh3b3JraW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZihjYXJnby5kcmFpbiAmJiAhY2FyZ28uZHJhaW5lZCkgY2FyZ28uZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdHMgPSB0eXBlb2YgcGF5bG9hZCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRhc2tzLnNwbGljZSgwLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza3Muc3BsaWNlKDAsIHRhc2tzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZHMgPSBfbWFwKHRzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFzay5kYXRhO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoY2FyZ28uZW1wdHkpIGNhcmdvLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgd29ya2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2VyKGRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgX2VhY2godHMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNhcmdvO1xuICAgIH07XG5cbiAgICB2YXIgX2NvbnNvbGVfZm4gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy50aW1lcyA9IGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb3VudGVyID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY291bnRlci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luYy5tYXAoY291bnRlciwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwU2VyaWVzKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGF0LCBbZXJyXS5jb25jYXQocmVzdWx0cykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICByZXR1cm4gYXN5bmMuc2VxLmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIHZhciBfYXBwbHlFYWNoID0gZnVuY3Rpb24gKGVhY2hmbiwgZm5zIC8qYXJncy4uLiovKSB7XG4gICAgICAgIHZhciBnbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgZnVuY3Rpb24gKGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5hcHBseUVhY2ggPSBkb1BhcmFsbGVsKF9hcHBseUVhY2gpO1xuICAgIGFzeW5jLmFwcGx5RWFjaFNlcmllcyA9IGRvU2VyaWVzKF9hcHBseUVhY2gpO1xuXG4gICAgYXN5bmMuZm9yZXZlciA9IGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xuXG4gICAgLy8gTm9kZS5qc1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwidmFyIGFzeW5jICAgICAgID0gcmVxdWlyZSgnYXN5bmMnKSxcbiAgICB1cmxQYXJzZXIgICA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIFJlc291cmNlICAgID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBtdWx0aXBsZSByZXNvdXJjZXMgdG8gbG9hZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIGNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvZ3Jlc3MgcGVyY2VudCBvZiB0aGUgbG9hZGVyIGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogTG9hZGluZyBzdGF0ZSBvZiB0aGUgbG9hZGVyLCB0cnVlIGlmIGl0IGlzIGN1cnJlbnRseSBsb2FkaW5nIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0b3RhbCBwcm9ncmVzcyB0aGF0IGEgc2luZ2xlIHJlc291cmNlIHJlcHJlc2VudHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWlkZGxld2FyZSB0byBydW4gYmVmb3JlIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGFmdGVyIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9sb2FkUmVzb3VyY2VgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRMb2FkUmVzb3VyY2UgPSB0aGlzLl9sb2FkUmVzb3VyY2UuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uTG9hZGAgZnVuY3Rpb24gYm91bmQgd2l0aCB0aGlzIG9iamVjdCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uTG9hZCA9IHRoaXMuX29uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlIGJ1ZmZlciB0aGF0IGZpbGxzIHVudGlsIGBsb2FkYCBpcyBjYWxsZWQgdG8gc3RhcnQgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlW119XG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyID0gW107XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHRyYWNrIGxvYWQgY29tcGxldGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb3VyY2VzIHdhaXRpbmcgdG8gYmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX3F1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fYm91bmRMb2FkUmVzb3VyY2UsIGNvbmN1cnJlbmN5KTtcblxuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGlzIGxvYWRlciBrZXllZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgUmVzb3VyY2U+fVxuICAgICAqL1xuICAgIHRoaXMucmVzb3VyY2VzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCBvciBlcnJvcmVkIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgb25jZSBwZXIgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbG9hZGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdGFydFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHF1ZXVlZCByZXNvdXJjZXMgYWxsIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY29tcGxldGVcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuLyoqXG4gKiBBZGRzIGEgcmVzb3VyY2UgKG9yIG11bHRpcGxlIHJlc291cmNlcykgdG8gdGhlIGxvYWRlciBxdWV1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGEgd2lkZSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwYXJhbWV0ZXJzLiBUaGUgb25seSB0aGluZyB0aGF0IGlzIGFsd2F5c1xuICogcmVxdWlyZWQgdGhlIHVybCB0byBsb2FkLiBBbGwgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6XG4gKlxuICogYGBganNcbiAqIGxvYWRlclxuICogICAgIC8vIG5vcm1hbCBwYXJhbSBzeW50YXhcbiAqICAgICAuYWRkKCdrZXknLCAnaHR0cDovLy4uLicsIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJylcbiAqXG4gKiAgICAgLy8gb2JqZWN0IHN5bnRheFxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MicsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIG5hbWU6ICdrZXkzJyxcbiAqICAgICAgICAgdXJsOiAnaHR0cDovLy4uLidcbiAqICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge31cbiAqICAgICB9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwczovLy4uLicsXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9LFxuICogICAgICAgICBjcm9zc09yaWdpbjogdHJ1ZVxuICogICAgIH0pXG4gKlxuICogICAgIC8vIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJscyBvciBib3RoXG4gKiAgICAgLmFkZChbXG4gKiAgICAgICAgIHsgbmFtZTogJ2tleTQnLCB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgeyB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgJ2h0dHA6Ly8uLi4nXG4gKiAgICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAYWxpYXMgZW5xdWV1ZVxuICogQHBhcmFtIFtuYW1lXSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZCwgaWYgbm90IHBhc3NlZCB0aGUgdXJsIGlzIHVzZWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIHJlbGF0aXZlIHRvIHRoZSBiYXNlVXJsIG9mIHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcGFyYW0gW29wdGlvbnMuY3Jvc3NPcmlnaW5dIHtib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5YSFJfTE9BRF9UWVBFfSBIb3cgc2hvdWxkIHRoaXMgcmVzb3VyY2UgYmUgbG9hZGVkP1xuICogQHBhcmFtIFtvcHRpb25zLnhoclR5cGU9UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVF0ge1Jlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFfSBIb3cgc2hvdWxkIHRoZSBkYXRhIGJlaW5nXG4gKiAgICAgIGxvYWRlZCBiZSBpbnRlcnByZXRlZCB3aGVuIHVzaW5nIFhIUj9cbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMgc3BlY2lmaWMgcmVzb3VyY2UgY29tcGxldGVzIGxvYWRpbmcuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWRkID0gTG9hZGVyLnByb3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgb3B0aW9ucywgY2IpIHtcbiAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciB1cmxzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChuYW1lW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGlmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW5zdGVhZCBvZiBwYXJhbXNcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNiID0gdXJsIHx8IG5hbWUuY2FsbGJhY2sgfHwgbmFtZS5vbkNvbXBsZXRlO1xuICAgICAgICBvcHRpb25zID0gbmFtZTtcbiAgICAgICAgdXJsID0gbmFtZS51cmw7XG4gICAgICAgIG5hbWUgPSBuYW1lLm5hbWUgfHwgbmFtZS5rZXkgfHwgbmFtZS51cmw7XG4gICAgfVxuXG4gICAgLy8gY2FzZSB3aGVyZSBubyBuYW1lIGlzIHBhc3NlZCBzaGlmdCBhbGwgYXJncyBvdmVyIGJ5IG9uZS5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdXJsO1xuICAgICAgICB1cmwgPSBuYW1lO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IHdlIHNoaWZ0ZWQgbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9wZXIgdXJsLlxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVybCBwYXNzZWQgdG8gYWRkIHJlc291cmNlIHRvIGxvYWRlci4nKTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zIGFyZSBvcHRpb25hbCBzbyBwZW9wbGUgbWlnaHQgcGFzcyBhIGZ1bmN0aW9uIGFuZCBubyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW25hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzb3VyY2Ugd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBleGlzdHMuJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJhc2UgdXJsIGlmIHRoaXMgaXNuJ3QgYW4gYWJzb2x1dGUgdXJsXG4gICAgdXJsID0gdGhpcy5faGFuZGxlQmFzZVVybCh1cmwpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBzdG9yZSB0aGUgcmVzb3VyY2VcbiAgICB0aGlzLnJlc291cmNlc1tuYW1lXSA9IG5ldyBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlc291cmNlc1tuYW1lXS5vbmNlKCdhZnRlck1pZGRsZXdhcmUnLCBjYik7XG4gICAgfVxuXG4gICAgdGhpcy5fbnVtVG9Mb2FkKys7XG5cbiAgICAvLyBpZiBhbHJlYWR5IGxvYWRpbmcgYWRkIGl0IHRvIHRoZSB3b3JrZXIgcXVldWVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9ICgxMDAgLSB0aGlzLnByb2dyZXNzKSAvICh0aGlzLl9xdWV1ZS5sZW5ndGgoKSArIHRoaXMuX3F1ZXVlLnJ1bm5pbmcoKSk7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBidWZmZXIgaXQgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlIGxhdGVyXG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDEwMCAvIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5Mb2FkZXIucHJvdG90eXBlLl9oYW5kbGVCYXNlVXJsID0gZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBwYXJzZWRVcmwgPSB1cmxQYXJzZXIucGFyc2UodXJsKTtcblxuICAgIC8vIGFic29sdXRlIHVybCwganVzdCB1c2UgaXQgYXMgaXMuXG4gICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCB8fCBwYXJzZWRVcmwucGF0aG5hbWUuaW5kZXhPZignLy8nKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIC8vIGlmIGJhc2VVcmwgZG9lc24ndCBlbmQgaW4gc2xhc2ggYW5kIHVybCBkb2Vzbid0IHN0YXJ0IHdpdGggc2xhc2gsIHRoZW4gYWRkIGEgc2xhc2ggaW5iZXR3ZWVuXG4gICAgaWYgKFxuICAgICAgICB0aGlzLmJhc2VVcmwubGVuZ3RoICYmXG4gICAgICAgIHRoaXMuYmFzZVVybC5sYXN0SW5kZXhPZignLycpICE9PSB0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSAmJlxuICAgICAgICB1cmwuY2hhckF0KDApICE9PSAnLydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybCArICcvJyArIHVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmJlZm9yZSogdGhlXG4gKiByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKlxuICogQGFsaWFzIHByZVxuICogQHBhcmFtIG1pZGRsZXdhcmUge2Z1bmN0aW9ufSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5iZWZvcmUgPSBMb2FkZXIucHJvdG90eXBlLnByZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB1cCBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gdGhhdCB3aWxsIHJ1biAqYWZ0ZXIqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyB1c2VcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWZ0ZXIgPSBMb2FkZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZS5wdXNoKGZuKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHF1ZXVlIG9mIHRoZSBsb2FkZXIgdG8gcHJlcGFyZSBmb3IgYSBuZXcgbG9hZC5cbiAqXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gdGhpcy5iYXNlVXJsID0gYmFzZVVybCB8fCAnJztcblxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9ncmVzc0NodW5rID0gMDtcblxuICAgIC8vIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUubGVuZ3RoID0gMDtcbiAgICAvLyB0aGlzLl9hZnRlck1pZGRsZXdhcmUubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fbnVtVG9Mb2FkID0gMDtcblxuICAgIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgICB0aGlzLl9xdWV1ZS5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBTdGFydHMgbG9hZGluZyB0aGUgcXVldWVkIHJlc291cmNlcy5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgY29tcGxldGVgIGV2ZW50LlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAvLyByZWdpc3RlciBjb21wbGV0ZSBjYWxsYmFjayBpZiB0aGV5IHBhc3Mgb25lXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBxdWV1ZSBoYXMgYWxyZWFkeSBzdGFydGVkIHdlIGFyZSBkb25lIGhlcmVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBub3RpZnkgb2Ygc3RhcnRcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBzdGFydCB0aGUgaW50ZXJuYWwgcXVldWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMuX2J1ZmZlcltpXSk7XG4gICAgfVxuXG4gICAgLy8gZW1wdHkgdGhlIGJ1ZmZlclxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIExvYWRzIGEgc2luZ2xlIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc291cmNlID0gZnVuY3Rpb24gKHJlc291cmNlLCBkZXF1ZXVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmVzb3VyY2UuX2RlcXVldWUgPSBkZXF1ZXVlO1xuXG4gICAgdGhpcy5fcnVuTWlkZGxld2FyZShyZXNvdXJjZSwgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXNvdXJjZS5vbigncHJvZ3Jlc3MnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAncHJvZ3Jlc3MnKSk7XG5cbiAgICAgICAgcmVzb3VyY2UubG9hZChzZWxmLl9ib3VuZE9uTG9hZCk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbmNlIGVhY2ggcmVzb3VyY2UgaGFzIGxvYWRlZC5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX29uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMsIHRoaXMucmVzb3VyY2VzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGVhY2ggdGltZSBhIHJlc291cmNlcyBpcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAZmlyZXMgZXJyb3JcbiAqIEBmaXJlcyBsb2FkXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICB0aGlzLnByb2dyZXNzICs9IHRoaXMuX3Byb2dyZXNzQ2h1bms7XG5cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgcmVzb3VyY2UpO1xuXG4gICAgLy8gcnVuIG1pZGRsZXdhcmUsIHRoaXMgKm11c3QqIGhhcHBlbiBiZWZvcmUgZGVxdWV1ZSBzbyBzdWItYXNzZXRzIGdldCBhZGRlZCBwcm9wZXJseVxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2FmdGVyTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvdXJjZS5lbWl0KCdhZnRlck1pZGRsZXdhcmUnLCByZXNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5fbnVtVG9Mb2FkLS07XG5cbiAgICAgICAgLy8gZG8gY29tcGxldGlvbiBjaGVja1xuICAgICAgICBpZiAodGhpcy5fbnVtVG9Mb2FkID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgdGhpcy5fb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzb3VyY2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCByZXNvdXJjZS5lcnJvciwgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkJywgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG5cblxuICAgIC8vIHJlbW92ZSB0aGlzIHJlc291cmNlIGZyb20gdGhlIGFzeW5jIHF1ZXVlXG4gICAgcmVzb3VyY2UuX2RlcXVldWUoKTtcbn07XG5cbi8qKlxuICogUnVuIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9uIGEgcmVzb3VyY2UuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fcnVuTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZm5zLCBjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGFzeW5jLmVhY2hTZXJpZXMoZm5zLCBmdW5jdGlvbiAoZm4sIG5leHQpIHtcbiAgICAgICAgZm4uY2FsbChzZWxmLCByZXNvdXJjZSwgbmV4dCk7XG4gICAgfSwgY2IuYmluZCh0aGlzLCByZXNvdXJjZSkpO1xufTtcblxuTG9hZGVyLkxPQURfVFlQRSA9IFJlc291cmNlLkxPQURfVFlQRTtcbkxvYWRlci5YSFJfUkVBRFlfU1RBVEUgPSBSZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEU7XG5Mb2FkZXIuWEhSX1JFU1BPTlNFX1RZUEUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRTtcbiIsInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgX3VybCA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIC8vIHRlc3RzIGlzIENPUlMgaXMgc3VwcG9ydGVkIGluIFhIUiwgaWYgbm90IHdlIG5lZWQgdG8gdXNlIFhEUlxuICAgIHVzZVhkciA9ICEhKHdpbmRvdy5YRG9tYWluUmVxdWVzdCAmJiAhKCd3aXRoQ3JlZGVudGlhbHMnIGluIChuZXcgWE1MSHR0cFJlcXVlc3QoKSkpKSxcbiAgICB0ZW1wQW5jaG9yID0gbnVsbDtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRlZCBieVxuICogYSBzaW5nbGUgVVJMLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIG5hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd8c3RyaW5nW119IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIGZvciBhdWRpby92aWRlbyBsb2FkcyB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7c3RyaW5nfGJvb2xlYW59IElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IERlZmF1bHQgaXMgdG8gZGV0ZXJtaW5lIGF1dG9tYXRpY2FsbHkuXG4gKiBAcGFyYW0gW29wdGlvbnMubG9hZFR5cGU9UmVzb3VyY2UuTE9BRF9UWVBFLlhIUl0ge1Jlc291cmNlLkxPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW29wdGlvbnMubWV0YWRhdGFdIHtvYmplY3R9IEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmUuXG4gKi9cbmZ1bmN0aW9uIFJlc291cmNlKG5hbWUsIHVybCwgb3B0aW9ucykge1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBuYW1lIGFuZCB1cmwgYXJlIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgYSByZXNvdXJjZS4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdXJsIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgdXJsIGlzIGEgZGF0YSB1cmwuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNEYXRhVXJsID0gdGhpcy51cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnl9XG4gICAgICovXG4gICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jcm9zc09yaWdpbiA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnYW5vbnltb3VzJyA6IG9wdGlvbnMuY3Jvc3NPcmlnaW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIG9mIGxvYWRpbmcgdG8gdXNlIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2UuTE9BRF9UWVBFfVxuICAgICAqL1xuICAgIHRoaXMubG9hZFR5cGUgPSBvcHRpb25zLmxvYWRUeXBlIHx8IHRoaXMuX2RldGVybWluZUxvYWRUeXBlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSB1c2VkIHRvIGxvYWQgdGhlIHJlc291cmNlIHZpYSBYSFIuIElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy54aHJUeXBlID0gb3B0aW9ucy54aHJUeXBlO1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgaW5mbyBmb3IgbWlkZGxld2FyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgd2hpbGUgbG9hZGluZyAoaWYgYW55KS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Vycm9yfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFhIUiBvYmplY3QgdGhhdCB3YXMgdXNlZCB0byBsb2FkIHRoaXMgcmVzb3VyY2UuIFRoaXMgaXMgb25seSBzZXRcbiAgICAgKiB3aGVuIGBsb2FkVHlwZWAgaXMgYFJlc291cmNlLkxPQURfVFlQRS5YSFJgLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7WE1MSHR0cFJlcXVlc3R9XG4gICAgICovXG4gICAgdGhpcy54aHIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBqc29uLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0pzb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgeG1sLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1htbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhbiBpbWFnZSB0YWcuIE9ubHkgdmFsaWQgYWZ0ZXIgdGhlIHJlc291cmNlXG4gICAgICogaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gYXVkaW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0F1ZGlvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGEgdmlkZW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1ZpZGVvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGRlcXVldWVgIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBhIHN0b3JhZ2UgcGxhY2UgZm9yIHRoZSBhc3luYyBxdWV1ZSBkZXF1ZXVlIG1ldGhvZFxuICAgICAqIHVzZWQgcHJpdmF0ZWx5IGJ5IHRoZSBsb2FkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2RlcXVldWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBjb21wbGV0ZWAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kQ29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkVycm9yYCBmdW5jdGlvbiBib3VuZCB0byB0aGlzIHJlc291cmNlJ3MgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25Qcm9ncmVzc2AgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyA9IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcblxuICAgIC8vIHhociBjYWxsYmFja3NcbiAgICB0aGlzLl9ib3VuZFhock9uRXJyb3IgPSB0aGlzLl94aHJPbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYaHJPbkFib3J0ID0gdGhpcy5feGhyT25BYm9ydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25Mb2FkID0gdGhpcy5feGhyT25Mb2FkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYZHJPblRpbWVvdXQgPSB0aGlzLl94ZHJPblRpbWVvdXQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcmVzb3VyY2UgYmVpbmdzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGVhY2ggdGltZSBwcm9ncmVzcyBvZiB0aGlzIHJlc291cmNlIGxvYWQgdXBkYXRlcy5cbiAgICAgKiBOb3QgYWxsIHJlc291cmNlcyB0eXBlcyBhbmQgbG9hZGVyIHN5c3RlbXMgY2FuIHN1cHBvcnQgdGhpcyBldmVudFxuICAgICAqIHNvIHNvbWV0aW1lcyBpdCBtYXkgbm90IGJlIGF2YWlsYWJsZS4gSWYgdGhlIHJlc291cmNlXG4gICAgICogaXMgYmVpbmcgbG9hZGVkIG9uIGEgbW9kZXJuIGJyb3dzZXIsIHVzaW5nIFhIUiwgYW5kIHRoZSByZW1vdGUgc2VydmVyXG4gICAgICogcHJvcGVybHkgc2V0cyBDb250ZW50LUxlbmd0aCBoZWFkZXJzLCB0aGVuIHRoaXMgd2lsbCBiZSBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcHJvZ3Jlc3NcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgdGhpcyByZXNvdXJjZSBoYXMgbG9hZGVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaXQgd2lsbFxuICAgICAqIGJlIGluIHRoZSBgZXJyb3JgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xufVxuXG5SZXNvdXJjZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVzb3VyY2U7XG5tb2R1bGUuZXhwb3J0cyA9IFJlc291cmNlO1xuXG4vKipcbiAqIE1hcmtzIHRoZSByZXNvdXJjZSBhcyBjb21wbGV0ZS5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgaW4gYSB3cmFwcGVyIG9yIHNvbWV0aGluZy4uLmdyb3NzLi4uLlxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICAgIGlmICh0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvcik7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIub25lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25wcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbmxvYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBLaWNrcyBvZmYgbG9hZGluZyBvZiB0aGlzIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBzdGFydFxuICogQHBhcmFtIFtjYWxsYmFja10ge2Z1bmN0aW9ufSBPcHRpb25hbCBjYWxsYmFjayB0byBjYWxsIG9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBpZiBhIGNhbGxiYWNrIGlzIHNldCwgbGlzdGVuIGZvciBjb21wbGV0ZSBldmVudFxuICAgIGlmIChjYikge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4gPT09IGZhbHNlIHx8IHR5cGVvZiB0aGlzLmNyb3NzT3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdGhpcy5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4odGhpcy51cmwpO1xuICAgIH1cblxuICAgIHN3aXRjaCh0aGlzLmxvYWRUeXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEltYWdlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5BVURJTzpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuVklERU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlhIUjpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh1c2VYZHIgJiYgdGhpcy5jcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYZHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYaHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gSW1hZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuc3JjID0gdGhpcy51cmw7XG5cbiAgICB0aGlzLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEhUTUxBdWRpb0VsZW1lbnQgb3IgSFRNTFZpZGVvRWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJyAmJiB0eXBlb2YgQXVkaW8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBBdWRpbygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgJyArIHR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBDb2Nvb25KUyBDYW52YXMrIHJ1bnRpbWUsIGxhY2tzIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zcmMgPSBBcnJheS5pc0FycmF5KHRoaXMudXJsKSA/IHRoaXMudXJsWzBdIDogdGhpcy51cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51cmwubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWydpcycgKyB0eXBlWzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKV0gPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuXG4gICAgdGhpcy5kYXRhLmxvYWQoKTtcbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gWE1MSHR0cFJlcXVlc3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGhyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIHNldCB0aGUgcmVxdWVzdCB0eXBlIGFuZCB1cmxcbiAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gbG9hZCBqc29uIGFzIHRleHQgYW5kIHBhcnNlIGl0IG91cnNlbHZlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHNvbWUgYnJvd3NlcnNcbiAgICAvLyAqY291Z2gqIHNhZmFyaSAqY291Z2gqIGNhbid0IGRlYWwgd2l0aCBpdC5cbiAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OIHx8IHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gdGhpcy54aHJUeXBlO1xuICAgIH1cblxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvciwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQsIGZhbHNlKTtcblxuICAgIHhoci5zZW5kKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhEb21haW5SZXF1ZXN0LiBUaGlzIGlzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHN1cHBvcnQgSUU5IChncm9zcykuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGRyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGRyID0gdGhpcy54aHIgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcblxuICAgIC8vIFhEb21haW5SZXF1ZXN0IGhhcyBhIGZldyBxdWlya3MuIE9jY2FzaW9uYWxseSBpdCB3aWxsIGFib3J0IHJlcXVlc3RzXG4gICAgLy8gQSB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBtYWtlIHN1cmUgQUxMIGNhbGxiYWNrcyBhcmUgc2V0IGV2ZW4gaWYgbm90IHVzZWRcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTc4Njk2Ni94ZG9tYWlucmVxdWVzdC1hYm9ydHMtcG9zdC1vbi1pZS05XG4gICAgeGRyLnRpbWVvdXQgPSA1MDAwO1xuXG4gICAgeGRyLm9uZXJyb3IgPSB0aGlzLl9ib3VuZFhock9uRXJyb3I7XG4gICAgeGRyLm9udGltZW91dCA9IHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0O1xuICAgIHhkci5vbnByb2dyZXNzID0gdGhpcy5fYm91bmRPblByb2dyZXNzO1xuICAgIHhkci5vbmxvYWQgPSB0aGlzLl9ib3VuZFhock9uTG9hZDtcblxuICAgIHhkci5vcGVuKCdHRVQnLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyAgTm90ZTogVGhlIHhkci5zZW5kKCkgY2FsbCBpcyB3cmFwcGVkIGluIGEgdGltZW91dCB0byBwcmV2ZW50IGFuIGlzc3VlIHdpdGggdGhlIGludGVyZmFjZSB3aGVyZSBzb21lIHJlcXVlc3RzIGFyZSBsb3N0XG4gICAgLy8gIGlmIG11bHRpcGxlIFhEb21haW5SZXF1ZXN0cyBhcmUgYmVpbmcgc2VudCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIC8vIFNvbWUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2lzc3Vlcy8xMjQ4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHhkci5zZW5kKCk7XG4gICAgfSwgMCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzb3VyY2UgdXNlZCBpbiBsb2FkaW5nIHZpYSBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB0eXBlIHtzdHJpbmd9IFRoZSBlbGVtZW50IHR5cGUgKHZpZGVvIG9yIGF1ZGlvKS5cbiAqIEBwYXJhbSB1cmwge3N0cmluZ30gVGhlIHNvdXJjZSBVUkwgdG8gbG9hZCBmcm9tLlxuICogQHBhcmFtIFttaW1lXSB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIG9mIHRoZSB2aWRlb1xuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9jcmVhdGVTb3VyY2UgPSBmdW5jdGlvbiAodHlwZSwgdXJsLCBtaW1lKSB7XG4gICAgaWYgKCFtaW1lKSB7XG4gICAgICAgIG1pbWUgPSB0eXBlICsgJy8nICsgdXJsLnN1YnN0cih1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSB1cmw7XG4gICAgc291cmNlLnR5cGUgPSBtaW1lO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBlcnJvcnMgb3V0LlxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBlcnJvciBldmVudCBmcm9tIHRoZSBlbGVtZW50IHRoYXQgZW1pdHMgaXQuXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX29uRXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBlbGVtZW50IHVzaW5nICcgKyBldmVudC50YXJnZXQubm9kZU5hbWUpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBwcm9ncmVzcyBldmVudCBmaXJlcyBmb3IgeGhyL3hkci5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vblByb2dyZXNzID0gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB0aGlzLCBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYW4gZXJyb3IgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEVycm9yRXZlbnR8RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgcmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgZmFpbGVkLiAnICtcbiAgICAgICAgJ1N0YXR1czogJyArIHRoaXMueGhyLnN0YXR1cyArICcsIHRleHQ6IFwiJyArIHRoaXMueGhyLnN0YXR1c1RleHQgKyAnXCInXG4gICAgKTtcblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGFib3J0IGV2ZW50IGZpcmVzIGZvciB4aHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEFib3J0RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB3YXMgYWJvcnRlZCBieSB0aGUgdXNlci4nKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIHRpbWVvdXQgZXZlbnQgZmlyZXMgZm9yIHhkci5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94ZHJPblRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB0aW1lZCBvdXQuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBkYXRhIHN1Y2Nlc3NmdWxseSBsb2FkcyBmcm9tIGFuIHhoci94ZHIgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0TG9hZEV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHhociA9IHRoaXMueGhyLFxuICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzICE9PSB1bmRlZmluZWQgPyB4aHIuc3RhdHVzIDogMjAwOyAvL1hEUiBoYXMgbm8gYC5zdGF0dXNgLCBhc3N1bWUgMjAwLlxuXG4gICAgLy8gc3RhdHVzIGNhbiBiZSAwIHdoZW4gdXNpbmcgdGhlIGZpbGU6Ly8gcHJvdG9jb2wsIGFsc28gY2hlY2sgaWYgYSByZXNwb25zZSB3YXMgZm91bmRcbiAgICBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDQgfHwgKHN0YXR1cyA9PT0gMCAmJiB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIC8vIGlmIHRleHQsIGp1c3QgcmV0dXJuIGl0XG4gICAgICAgIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYganNvbiwgcGFyc2UgaW50byBqc29uIG9iamVjdFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT04pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSnNvbiA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIGpzb246JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgeG1sLCBwYXJzZSBpbnRvIGFuIHhtbCBkb2N1bWVudCBvciBkaXYgZWxlbWVudFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkaXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNYbWwgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSBsb2FkZWQgeG1sOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyIHR5cGVzIGp1c3QgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdbJyArIHhoci5zdGF0dXMgKyAnXScgKyB4aHIuc3RhdHVzVGV4dCArICc6JyArIHhoci5yZXNwb25zZVVSTCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gcmVxVHlwZSh4aHIpIHtcbiAgICByZXR1cm4geGhyLnRvU3RyaW5nKCkucmVwbGFjZSgnb2JqZWN0ICcsICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGZvciB0aGlzIHJlc291cmNlIGJhc2VkIG9uIGlmIHRoZSB1cmxcbiAqIGZvciB0aGlzIHJlc291cmNlIGlzIGNyb3NzLW9yaWdpbi4gSWYgY3Jvc3NPcmlnaW4gd2FzIG1hbnVhbGx5IHNldCwgdGhpc1xuICogZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgdG8gdGVzdC5cbiAqIEBwYXJhbSBbbG9jYXRpb249d2luZG93LmxvY2F0aW9uXSB7b2JqZWN0fSBUaGUgbG9jYXRpb24gb2JqZWN0IHRvIHRlc3QgYWdhaW5zdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNyb3NzT3JpZ2luIHZhbHVlIHRvIHVzZSAob3IgZW1wdHkgc3RyaW5nIGZvciBub25lKS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVDcm9zc09yaWdpbiA9IGZ1bmN0aW9uICh1cmwsIGxvYykge1xuICAgIC8vIGRhdGE6IGFuZCBqYXZhc2NyaXB0OiB1cmxzIGFyZSBjb25zaWRlcmVkIHNhbWUtb3JpZ2luXG4gICAgaWYgKHVybC5pbmRleE9mKCdkYXRhOicpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGlzIHdpbmRvdy5sb2NhdGlvblxuICAgIGxvYyA9IGxvYyB8fCB3aW5kb3cubG9jYXRpb247XG5cbiAgICBpZiAoIXRlbXBBbmNob3IpIHtcbiAgICAgICAgdGVtcEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG5cbiAgICAvLyBsZXQgdGhlIGJyb3dzZXIgZGV0ZXJtaW5lIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSB1cmwgb2YgdGhpcyByZXNvdXJjZSBhbmQgdGhlblxuICAgIC8vIHBhcnNlIHdpdGggdGhlIG5vZGUgdXJsIGxpYiwgd2UgY2FuJ3QgdXNlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICAgIC8vIGJlY2F1c2UgdGhleSBkb24ndCB3b3JrIGluIElFOSA6KFxuICAgIHRlbXBBbmNob3IuaHJlZiA9IHVybDtcbiAgICB1cmwgPSBfdXJsLnBhcnNlKHRlbXBBbmNob3IuaHJlZik7XG5cbiAgICB2YXIgc2FtZVBvcnQgPSAoIXVybC5wb3J0ICYmIGxvYy5wb3J0ID09PSAnJykgfHwgKHVybC5wb3J0ID09PSBsb2MucG9ydCk7XG5cbiAgICAvLyBpZiBjcm9zcyBvcmlnaW5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9PSBsb2MuaG9zdG5hbWUgfHwgIXNhbWVQb3J0IHx8IHVybC5wcm90b2NvbCAhPT0gbG9jLnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiAnYW5vbnltb3VzJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlc3BvbnNlVHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZVxuICogcmVzb3VyY2UgYmVpbmcgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHJlc3BvbnNlVHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lWGhyVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX3hoclR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZUxvYWRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZXNvdXJjZS5fbG9hZFR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLkxPQURfVFlQRS5YSFI7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2dldEV4dGVuc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcy51cmwsXG4gICAgICAgIGV4dDtcblxuICAgIGlmICh0aGlzLmlzRGF0YVVybCkge1xuICAgICAgICB2YXIgc2xhc2hJbmRleCA9IHVybC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGV4dCA9IHVybC5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEsIHVybC5pbmRleE9mKCc7Jywgc2xhc2hJbmRleCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXJ5U3RhcnQgPSB1cmwuaW5kZXhPZignPycpO1xuICAgICAgICBpZiAocXVlcnlTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dDtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWltZSB0eXBlIG9mIGFuIFhIUiByZXF1ZXN0IGJhc2VkIG9uIHRoZSByZXNwb25zZVR5cGUgb2ZcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIHRvIHVzZS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRNaW1lRnJvbVhoclR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1iaW5hcnknO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vYmxvYic7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veG1sJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT046XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVDpcbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUOlxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcblxuICAgIH1cbn07XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxvYWRpbmcgYSByZXNvdXJjZSBjYW4gdXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IExPQURfVFlQRVxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5YSFIgLSBVc2VzIFhNTEh0dHBSZXF1ZXN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5JTUFHRSAtIFVzZXMgYW4gYEltYWdlYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLkFVRElPIC0gVXNlcyBhbiBgQXVkaW9gIG9iamVjdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuVklERU8gLSBVc2VzIGEgYFZpZGVvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlLkxPQURfVFlQRSA9IHtcbiAgICBYSFI6ICAgIDEsXG4gICAgSU1BR0U6ICAyLFxuICAgIEFVRElPOiAgMyxcbiAgICBWSURFTzogIDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVBRFlfU1RBVEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuVU5TRU5UIC0gb3BlbigpaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLk9QRU5FRCAtIHNlbmQoKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5IRUFERVJTX1JFQ0VJVkVEIC0gc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIGhlYWRlcnMgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5MT0FESU5HIC0gRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLkRPTkUgLSBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5SZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEUgPSB7XG4gICAgVU5TRU5UOiAwLFxuICAgIE9QRU5FRDogMSxcbiAgICBIRUFERVJTX1JFQ0VJVkVEOiAyLFxuICAgIExPQURJTkc6IDMsXG4gICAgRE9ORTogNFxufTtcblxuLyoqXG4gKiBUaGUgWEhSIHJlYWR5IHN0YXRlcywgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IFhIUl9SRVNQT05TRV9UWVBFXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVCAtIGRlZmF1bHRzIHRvIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVIgLSBBcnJheUJ1ZmZlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkJMT0IgLSBCbG9iXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQgLSBEb2N1bWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkpTT04gLSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5URVhUIC0gU3RyaW5nXG4gKi9cblJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFID0ge1xuICAgIERFRkFVTFQ6ICAgICd0ZXh0JyxcbiAgICBCVUZGRVI6ICAgICAnYXJyYXlidWZmZXInLFxuICAgIEJMT0I6ICAgICAgICdibG9iJyxcbiAgICBET0NVTUVOVDogICAnZG9jdW1lbnQnLFxuICAgIEpTT046ICAgICAgICdqc29uJyxcbiAgICBURVhUOiAgICAgICAndGV4dCdcbn07XG5cblJlc291cmNlLl9sb2FkVHlwZU1hcCA9IHtcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3BuZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZWcnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3dlYnAnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRVxufTtcblxuUmVzb3VyY2UuX3hoclR5cGVNYXAgPSB7XG4gICAgLy8geG1sXG4gICAgJ3hodG1sJzogICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bWwnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3htbCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RteCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RzeCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3N2Zyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG5cbiAgICAvLyBpbWFnZXNcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2JtcCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RnYSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcblxuICAgIC8vIGpzb25cbiAgICAnanNvbic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OLFxuXG4gICAgLy8gdGV4dFxuICAgICd0ZXh0JzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQsXG4gICAgJ3R4dCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsb2FkIHR5cGUgdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGV4dG5hbWUge3N0cmluZ30gVGhlIGV4dGVuc2lvbiB0byBzZXQgdGhlIHR5cGUgZm9yLCBlLmcuIFwicG5nXCIgb3IgXCJmbnRcIlxuICogQHBhcmFtIGxvYWRUeXBlIHtSZXNvdXJjZS5MT0FEX1RZUEV9IFRoZSBsb2FkIHR5cGUgdG8gc2V0IGl0IHRvLlxuICovXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25Mb2FkVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCBsb2FkVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5fbG9hZFR5cGVNYXAsIGV4dG5hbWUsIGxvYWRUeXBlKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSB4aHJUeXBlIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHhociB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCB4aHJUeXBlKSB7XG4gICAgc2V0RXh0TWFwKFJlc291cmNlLl94aHJUeXBlTWFwLCBleHRuYW1lLCB4aHJUeXBlKTtcbn07XG5cbmZ1bmN0aW9uIHNldEV4dE1hcChtYXAsIGV4dG5hbWUsIHZhbCkge1xuICAgIGlmIChleHRuYW1lICYmIGV4dG5hbWUuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgIGV4dG5hbWUgPSBleHRuYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dG5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hcFtleHRuYW1lXSA9IHZhbDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICAgIF9rZXlTdHI6IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIixcblxuICAgIGVuY29kZUJpbmFyeTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBcIlwiO1xuICAgICAgICB2YXIgYnl0ZWJ1ZmZlcjtcbiAgICAgICAgdmFyIGVuY29kZWRDaGFySW5kZXhlcyA9IG5ldyBBcnJheSg0KTtcbiAgICAgICAgdmFyIGlueCA9IDA7XG4gICAgICAgIHZhciBqbnggPSAwO1xuICAgICAgICB2YXIgcGFkZGluZ0J5dGVzID0gMDtcblxuICAgICAgICB3aGlsZSAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBGaWxsIGJ5dGUgYnVmZmVyIGFycmF5XG4gICAgICAgICAgICBieXRlYnVmZmVyID0gbmV3IEFycmF5KDMpO1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBieXRlYnVmZmVyLmxlbmd0aDsgam54KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGF3YXkgaGlnaC1vcmRlciBieXRlLCBhcyBkb2N1bWVudGVkIGF0OlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdCNIYW5kbGluZ19iaW5hcnlfZGF0YVxuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSBpbnB1dC5jaGFyQ29kZUF0KGlueCsrKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGVhY2ggZW5jb2RlZCBjaGFyYWN0ZXIsIDYgYml0cyBhdCBhIHRpbWVcbiAgICAgICAgICAgIC8vIGluZGV4IDE6IGZpcnN0IDYgYml0c1xuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzBdID0gYnl0ZWJ1ZmZlclswXSA+PiAyO1xuICAgICAgICAgICAgLy8gaW5kZXggMjogc2Vjb25kIDYgYml0cyAoMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAxICsgNCBtb3N0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBieXRlIDIpXG4gICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMV0gPSAoKGJ5dGVidWZmZXJbMF0gJiAweDMpIDw8IDQpIHwgKGJ5dGVidWZmZXJbMV0gPj4gNCk7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiB0aGlyZCA2IGJpdHMgKDQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMiArIDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gKChieXRlYnVmZmVyWzFdICYgMHgwZikgPDwgMikgfCAoYnl0ZWJ1ZmZlclsyXSA+PiA2KTtcbiAgICAgICAgICAgIC8vIGluZGV4IDM6IGZvcnRoIDYgYml0cyAoNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gYnl0ZWJ1ZmZlclsyXSAmIDB4M2Y7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHBhZGRpbmcgaGFwcGVuZWQsIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgIHBhZGRpbmdCeXRlcyA9IGlueCAtIChpbnB1dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFkZGluZ0J5dGVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCAyIGNoYXJhY3RlcnMgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMl0gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBsYXN0IGNoYXJhY3RlciB0byBwYWRkaW5nIGNoYXJcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vIHBhZGRpbmcgLSBwcm9jZWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vdyB3ZSB3aWxsIGdyYWIgZWFjaCBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgb3V0IG9mIG91ciBrZXlzdHJpbmdcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIG91ciBpbmRleCBhcnJheSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQgc3RyaW5nXG4gICAgICAgICAgICBmb3IgKGpueCA9IDA7IGpueCA8IGVuY29kZWRDaGFySW5kZXhlcy5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHRoaXMuX2tleVN0ci5jaGFyQXQoZW5jb2RlZENoYXJJbmRleGVzW2pueF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9Mb2FkZXInKTtcblxubW9kdWxlLmV4cG9ydHMuUmVzb3VyY2UgPSByZXF1aXJlKCcuL1Jlc291cmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzLm1pZGRsZXdhcmUgPSB7XG4gICAgY2FjaGluZzoge1xuICAgICAgICBtZW1vcnk6IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnknKVxuICAgIH0sXG4gICAgcGFyc2luZzoge1xuICAgICAgICBibG9iOiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL3BhcnNpbmcvYmxvYicpXG4gICAgfVxufTtcbiIsIi8vIGEgc2ltcGxlIGluLW1lbW9yeSBjYWNoZSBmb3IgcmVzb3VyY2VzXG52YXIgY2FjaGUgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICAvLyBpZiBjYWNoZWQsIHRoZW4gc2V0IGRhdGEgYW5kIGNvbXBsZXRlIHRoZSByZXNvdXJjZVxuICAgICAgICBpZiAoY2FjaGVbcmVzb3VyY2UudXJsXSkge1xuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IGNhY2hlW3Jlc291cmNlLnVybF07XG4gICAgICAgICAgICByZXNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIG5vdCBjYWNoZWQsIHdhaXQgZm9yIGNvbXBsZXRlIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb3VyY2Uub25jZSgnY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICBjYWNoZVt0aGlzLnVybF0gPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgnLi4vLi4vUmVzb3VyY2UnKSxcbiAgICBiNjQgPSByZXF1aXJlKCcuLi8uLi9iNjQnKTtcblxud2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblxuLy8gYSBtaWRkbGV3YXJlIGZvciB0cmFuc2Zvcm1pbmcgWEhSIGxvYWRlZCBCbG9icyBpbnRvIG1vcmUgdXNlZnVsIG9iamVjdHNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIHdhcyBhbiBYSFIgbG9hZCBvZiBhIGJsb2JcbiAgICAgICAgaWYgKHJlc291cmNlLnhociAmJiByZXNvdXJjZS54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBibG9iIHN1cHBvcnQgd2UgcHJvYmFibHkgZ290IGEgYmluYXJ5IHN0cmluZyBiYWNrXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5CbG9iIHx8IHR5cGVvZiByZXNvdXJjZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVzb3VyY2UueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaW1hZ2UsIGNvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgaW50byBhIGRhdGEgdXJsXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgdHlwZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5zcmMgPSAnZGF0YTonICsgdHlwZSArICc7YmFzZTY0LCcgKyBiNjQuZW5jb2RlQmluYXJ5KHJlc291cmNlLnhoci5yZXNwb25zZVRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGltYWdlIGxvYWRzIGFuZCB0aGVuIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5vbmxvYWQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY29udGVudCB0eXBlIHNheXMgdGhpcyBpcyBhbiBpbWFnZSwgdGhlbiB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBibG9iIGludG8gYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvdXJjZS5kYXRhLnR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlc291cmNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuYmxvYiA9IHJlc291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gc3JjO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuaXNJbWFnZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBubyBsb25nZXIgdXNlZCBibG9iIGFmdGVyIHRoZSBpbWFnZSBsb2Fkc1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJwaXhpLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMC4xMC1kZXZcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlBpeGkuanMgaXMgYSBmYXN0IGxpZ2h0d2VpZ2h0IDJEIGxpYnJhcnkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGRldmljZXMuXCIsXG4gIFwiYXV0aG9yXCI6IFwiTWF0IEdyb3Zlc1wiLFxuICBcImNvbnRyaWJ1dG9yc1wiOiBbXG4gICAgXCJDaGFkIEVuZ2xlciA8Y2hhZEBwYW50aGVyZGV2LmNvbT5cIixcbiAgICBcIlJpY2hhcmQgRGF2ZXkgPHJkYXZleUBnbWFpbC5jb20+XCJcbiAgXSxcbiAgXCJtYWluXCI6IFwiLi9zcmMvaW5kZXguanNcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHA6Ly9nb29kYm95ZGlnaXRhbC5jb20vXCIsXG4gIFwiYnVnc1wiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXNcIixcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiZ3VscCAmJiBndWxwIHdhdGNoXCIsXG4gICAgXCJ0ZXN0XCI6IFwiZ3VscCAmJiB0ZXN0ZW0gY2lcIixcbiAgICBcImJ1aWxkXCI6IFwiZ3VscFwiLFxuICAgIFwiZG9jc1wiOiBcImpzZG9jIC1jIC4vZ3VscC91dGlsL2pzZG9jLmNvbmYuanNvbiAtUiBSRUFETUUubWRcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpbi9cIixcbiAgICBcInNyYy9cIixcbiAgICBcIkNPTlRSSUJVVElORy5tZFwiLFxuICAgIFwiTElDRU5TRVwiLFxuICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgXCJSRUFETUUubWRcIlxuICBdLFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhc3luY1wiOiBcIl4xLjUuMFwiLFxuICAgIFwiYnJmc1wiOiBcIl4xLjQuMVwiLFxuICAgIFwiZWFyY3V0XCI6IFwiXjIuMC43XCIsXG4gICAgXCJldmVudGVtaXR0ZXIzXCI6IFwiXjEuMS4xXCIsXG4gICAgXCJnbC1tYXRyaXhcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL3RvamkvZ2wtbWF0cml4LmdpdFwiLFxuICAgIFwib2JqZWN0LWFzc2lnblwiOiBcIl40LjAuMVwiLFxuICAgIFwicGl4aS1nbC1jb3JlXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9Hb29kQm95RGlnaXRhbC9waXhpLWdsLWNvcmUuZ2l0XCIsXG4gICAgXCJyZXNvdXJjZS1sb2FkZXJcIjogXCJeMS42LjRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjExLjEuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4zLjIuMFwiLFxuICAgIFwiZGVsXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOS4wXCIsXG4gICAgXCJndWxwLWNhY2hlZFwiOiBcIl4xLjEuMFwiLFxuICAgIFwiZ3VscC1jb25jYXRcIjogXCJeMi42LjBcIixcbiAgICBcImd1bHAtZGVidWdcIjogXCJeMi4xLjBcIixcbiAgICBcImd1bHAtaGVhZGVyXCI6IFwiXjEuNy4xXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjExLjJcIixcbiAgICBcImd1bHAtbWlycm9yXCI6IFwiXjAuNC4wXCIsXG4gICAgXCJndWxwLXBsdW1iZXJcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtcmVuYW1lXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJndWxwLXNvdXJjZW1hcHNcIjogXCJeMS41LjJcIixcbiAgICBcImd1bHAtdWdsaWZ5XCI6IFwiXjEuNC4xXCIsXG4gICAgXCJndWxwLXV0aWxcIjogXCJeMy4wLjZcIixcbiAgICBcImphZ3VhcmpzLWpzZG9jXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZHNoaW1qcy9qYWd1YXJqcy1qc2RvYy5naXRcIixcbiAgICBcImpzZG9jXCI6IFwiXjMuMy4yXCIsXG4gICAgXCJqc2hpbnQtc3VtbWFyeVwiOiBcIl4wLjQuMFwiLFxuICAgIFwibWluaW1pc3RcIjogXCJeMS4yLjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMy4yXCIsXG4gICAgXCJyZXF1aXJlLWRpclwiOiBcIl4wLjMuMFwiLFxuICAgIFwicnVuLXNlcXVlbmNlXCI6IFwiXjEuMS4yXCIsXG4gICAgXCJ0ZXN0ZW1cIjogXCJeMC45LjRcIixcbiAgICBcInZpbnlsLWJ1ZmZlclwiOiBcIl4xLjAuMFwiLFxuICAgIFwidmlueWwtc291cmNlLXN0cmVhbVwiOiBcIl4xLjEuMFwiLFxuICAgIFwid2F0Y2hpZnlcIjogXCJeMy40LjBcIlxuICB9LFxuICBcImJyb3dzZXJpZnlcIjoge1xuICAgIFwidHJhbnNmb3JtXCI6IFtcbiAgICAgIFwiYnJmc1wiXG4gICAgXVxuICB9XG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLy8gYWRkIHNvbWUgZXh0cmEgdmFyaWFibGVzIHRvIHRoZSBjb250YWluZXIuLlxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpXG4pO1xuXG5cbi8qKlxuICogVGhlIEFjY2Vzc2liaWxpdHkgbWFuYWdlciByZWFjcmVhdGVzIHRoZSBhYmlsaXR5IHRvIHRhYiBhbmQgYW5kIGhhdmUgY29udGVudCByZWFkIGJ5IHNjcmVlbiByZWFkZXJzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGFzIGl0IGNhbiBwb3NzaWJseSBoZWxwIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyBhY2Nlc3MgcGl4aSBjb250ZW50LlxuICogTXVjaCBsaWtlIGludGVyYWN0aW9uIGFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBtYWRlIGFjY2Vzc2libGUuIFRoaXMgbWFuYWdlciB3aWxsIG1hcCB0aGUgZXZlbnRzIGFzIGlmIHRoZSBtb3VzZSB3YXMgYmVpbmcgdXNlZCwgbWluaW1pemluZyB0aGUgZWZmZXJvdCByZXF1aXJlZCB0byBpbXBsZW1lbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqL1xuZnVuY3Rpb24gQWNjZXNzaWJpbGl0eU1hbmFnZXIocmVuZGVyZXIpXG57XG5cdC8vIGZpcnN0IHdlIGNyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFxuICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUubGVmdCA9IDA7XG4gICAvL1xuICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuICAgXHRcbiAgIFx0LyoqXG4gICBcdCAqIFRoaXMgaXMgdGhlIGRvbSBlbGVtZW50IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gICBcdHRoaXMuZGl2ID0gZGl2O1xuXG4gICBcdC8qKlxuICAgXHQgKiBBIHNpbXBsZSBwb29sIGZvciBzdG9yaW5nIGRpdnMuXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7QXJyYXl9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuIFx0dGhpcy5wb29sID0gW107XG5cbiBcdC8qKlxuIFx0ICogVGhpcyBpcyBhIHRpY2sgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHJlbmRlcmVkLlxuIFx0ICogXG4gXHQgKiBAdHlwZSB7TnVtYmVyfVxuIFx0ICogQHByaXZhdGVcbiBcdCAqL1xuICAgXHR0aGlzLnJlbmRlcklkID0gMDtcblxuICAgXHQvKipcbiAgIFx0ICogU2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB2aXN1YWxseSBzaG93IHRoZSBkaXZzXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgIFx0ICovXG4gICBcdHRoaXMuZGVidWcgPSBmYWxzZTtcblxuICBcdC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGFjY2Vzc2liaWxpdHkgbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgIFx0LyoqXG4gICAgICogVGhlIGFycmF5IG9mIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzaWJsZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHByZSBiaW5kIHRoZSBmdW5jdGlvbnMuLlxuICAgICAqL1xuICAgXHR0aGlzLl9vbktleURvd24gPSB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKTtcbiAgIFx0dGhpcy5fb25Nb3VzZU1vdmUgPSB0aGlzLl9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogc3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFuYWdlci4gSWYgdGhlcmUgYXJlIG5vIGFjY2Vzc2libGUgb2JqZWN0cyBvciB0aGUgbW91c2UgaXMgbW92aW5nIHRoZSB3aWxsIGJlIGZhbHNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cbiAgIFx0Ly8gbGV0IGxpc3RlbiBmb3IgdGFiLi4gb25jZSBwcmVzc2VkIHdlIGNhbiBmaXJlIHVwIGFuZCBzaG93IHRoZSBhY2Nlc3NpYmlsaXR5IGxheWVyXG4gICBcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG59XG5cblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xuXG4vKipcbiAqIEFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBzaG93bi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgcHJlc2VzIHRoZSB0YWIga2V5XG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHRydWUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub24oJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cblx0dGhpcy5yZW5kZXJlci52aWV3LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5kaXYpO1x0XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIGhpZGRlbi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgbW92ZXMgdGhlIG1vdXNlXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYoIXRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9mZigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlKTtcblxuXHR0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcblxufTtcblxuLyoqXG4gKiBUaGlzIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aWxsIHJ1biB0aHJvdWdodCBoZSBzY2VuZSBncmFwaCBhbmQgYWRkIGFueSBuZXcgYWNjZXNzaWJsZSBvYmplY3RzIHRvIHRoZSBET00gbGF5ZXIuXG4gKiBAcGFyYW0gZWxlbWVudCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgRGlzcGxheU9iamVjdCB0byBjaGVjay5cbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG5cdGlmKCFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZihkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGUgJiYgZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcblx0e1xuXHRcdGlmKCFkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlKVxuXHRcdHtcblx0XHRcdHRoaXMuYWRkQ2hpbGQoZGlzcGxheU9iamVjdCk7XG5cdFx0fVxuXHQgICBcdFxuXHQgICBcdGRpc3BsYXlPYmplY3QucmVuZGVySWQgPSB0aGlzLnJlbmRlcklkO1xuXHR9XG5cblx0dmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcblxuXHRmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcblx0XHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKGNoaWxkcmVuW2ldKTtcblx0fVxufTtcblxuXG4vKipcbiAqIEJlZm9yZSBlYWNoIHJlbmRlciB0aGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGRpdnMgYXJlIG1hcHBlZCBjb3JyZWN0bHkgdG8gdGhlaXIgRGlzcGxheU9iamVjdHNcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpXG57XG5cblx0Ly8gdXBkYXRlIGNoaWxkcmVuLi4uXG5cdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHModGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkKTtcblxuXHR2YXIgcmVjdCA9IHRoaXMucmVuZGVyZXIudmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0dmFyIHN4ID0gcmVjdC53aWR0aCAgLyB0aGlzLnJlbmRlcmVyLndpZHRoO1xuXHR2YXIgc3kgPSByZWN0LmhlaWdodCAvIHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuXG5cdHZhciBkaXYgPSB0aGlzLmRpdjtcblxuXHRkaXYuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICdweCc7XG5cdGRpdi5zdHlsZS50b3AgPSByZWN0LnRvcCArICdweCc7XG5cdGRpdi5zdHlsZS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggKyAncHgnO1xuXHRkaXYuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgKyAncHgnO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuXHRcdGlmKGNoaWxkLnJlbmRlcklkICE9PSB0aGlzLnJlbmRlcklkKVxuXHRcdHtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaSwgMSk7XG5cdFx0XHR0aGlzLmRpdi5yZW1vdmVDaGlsZCggY2hpbGQuX2FjY2Vzc2libGVEaXYgKTtcblx0XHRcdHRoaXMucG9vbC5wdXNoKGNoaWxkLl9hY2Nlc3NpYmxlRGl2KTtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlRGl2ID0gbnVsbDtcblxuXHRcdFx0aS0tO1xuXG5cdFx0XHRpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBtYXAgZGl2IHRvIGRpc3BsYXkuLlxuXHRcdFx0ZGl2ID0gY2hpbGQuX2FjY2Vzc2libGVEaXY7XG5cdFx0XHR2YXIgaGl0QXJlYSA9IGNoaWxkLmhpdEFyZWE7XG5cdFx0XHR2YXIgd3QgPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuXHRcdFx0aWYoY2hpbGQuaGl0QXJlYSlcblx0XHRcdHtcblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoKHd0LnR4ICsgKGhpdEFyZWEueCAqIHd0LmEpKSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKCh3dC50eSArIChoaXRBcmVhLnkgKiB3dC5kKSkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHd0LmEgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogd3QuZCAqIHN5KSArICdweCc7XG5cdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0aGl0QXJlYSA9IGNoaWxkLmdldEJvdW5kcygpO1xuXG5cdFx0XHRcdHRoaXMuY2FwSGl0QXJlYShoaXRBcmVhKTtcblxuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9IChoaXRBcmVhLnggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gIChoaXRBcmVhLnkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiBzeSkgKyAncHgnO1xuXHRcdFx0fVx0XHRcblx0XHR9XG5cdH1cblxuXHQvLyBpbmNyZW1lbnQgdGhlIHJlbmRlciBpZC4uXG5cdHRoaXMucmVuZGVySWQrKztcbn07XG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYXBIaXRBcmVhID0gZnVuY3Rpb24gKGhpdEFyZWEpXG57XG4gICAgaWYgKGhpdEFyZWEueCA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoICs9IGhpdEFyZWEueDtcbiAgICAgICAgaGl0QXJlYS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaGl0QXJlYS55IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ICs9IGhpdEFyZWEueTtcbiAgICAgICAgaGl0QXJlYS55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueCArIGhpdEFyZWEud2lkdGggPiB0aGlzLnJlbmRlcmVyLndpZHRoIClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoIC0gaGl0QXJlYS54O1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS55ICsgaGl0QXJlYS5oZWlnaHQgPiB0aGlzLnJlbmRlcmVyLmhlaWdodCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0IC0gaGl0QXJlYS55O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBBZGRzIGEgRGlzcGxheU9iamVjdCB0byB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuLy9cdHRoaXMuYWN0aXZhdGUoKTtcblx0XG5cdHZhciBkaXYgPSB0aGlzLnBvb2wucG9wKCk7XG5cblx0aWYoIWRpdilcblx0e1xuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBcblxuXHQgICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGVidWcgPyAncmdiYSgyNTUsMCwwLDAuNSknIDogJ3RyYW5zcGFyZW50Jztcblx0ICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdCAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcblx0ICAgIGRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdub25lJztcblxuXHQgICAgXG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX29uRm9jdXNPdXQuYmluZCh0aGlzKSk7XG5cdH1cblx0ICAgXHRcblxuXG5cblx0ZGl2LnRpdGxlID0gZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlVGl0bGUgfHwgJ2Rpc3BsYXlPYmplY3QgJyArIHRoaXMudGFiSW5kZXg7XG5cblx0Ly9cblx0XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUgPSB0cnVlO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ID0gZGl2O1xuXHRkaXYuZGlzcGxheU9iamVjdCA9IGRpc3BsYXlPYmplY3Q7XG5cblxuXHR0aGlzLmNoaWxkcmVuLnB1c2goZGlzcGxheU9iamVjdCk7XG5cdHRoaXMuZGl2LmFwcGVuZENoaWxkKCBkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ICk7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYudGFiSW5kZXggPSBkaXNwbGF5T2JqZWN0LnRhYkluZGV4O1xufTtcblxuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBidXR0b24gcHJlc3MgdG8gcGl4aSdzIEludGVyYWN0aW9uTWFuYWdlciAoY2xpY2spXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnY2xpY2snLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3ZlcilcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1cyA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3V0KVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzT3V0ID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uS2V5RG93biA9IGZ1bmN0aW9uKGUpXG57XG5cdGlmKGUua2V5Q29kZSAhPT0gOSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuYWN0aXZhdGUoKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmUgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZGVhY3RpdmF0ZSgpO1xufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgXG57XG5cdHRoaXMuZGl2ID0gbnVsbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblx0XHR0aGlzLmNoaWxkcmVuW2ldLmRpdiA9IG51bGw7XG5cdH1cblxuXHRcblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuXHRcdFxuXHR0aGlzLnBvb2wgPSBudWxsO1xuXHR0aGlzLmNoaWxkcmVuID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5cbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYWNjZXNzaWJsZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmFjY2Vzc2liaWxpdHkuYWNjZXNzaWJsZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgYWNjZXNzaWJsZVRhcmdldCA9IHtcbiAgICBcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGVUaXRsZTpudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICB0YWJJbmRleDowLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZUFjdGl2ZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVEaXY6ZmFsc2VcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBhY2Nlc3NpYmxlVGFyZ2V0O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgYWNjZXNzaWJpbGl0eSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYWNjZXNzaWJsZVRhcmdldDogICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpLFxuICAgIEFjY2Vzc2liaWxpdHlNYW5hZ2VyOiByZXF1aXJlKCcuL0FjY2Vzc2liaWxpdHlNYW5hZ2VyJylcbn07XG4iLCIvKipcbiAqIENvbnN0YW50IHZhbHVlcyB1c2VkIGluIHBpeGlcbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG52YXIgQ09OU1QgPSB7XG4gICAgLyoqXG4gICAgICogU3RyaW5nIG9mIHRoZSBjdXJyZW50IFBJWEkgdmVyc2lvblxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBWRVJTSU9OXG4gICAgICovXG4gICAgVkVSU0lPTjogcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQSV8yIC0gVHdvIFBpXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFBJXzI6IE1hdGguUEkgKiAyLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJBRF9UT19ERUcgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyByYWRpYW5zIHRvIGRlZ3JlZXNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUkFEX1RPX0RFRzogMTgwIC8gTWF0aC5QSSxcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBERUdfVE9fUkFEIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgZGVncmVlcyB0byByYWRpYW5zXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIERFR19UT19SQUQ6IE1hdGguUEkgLyAxODAsXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgZnJhbWVzIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gVEFSR0VUX0ZQTVM9MC4wNlxuICAgICAqL1xuICAgIFRBUkdFVF9GUE1TOiAwLjA2LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgdG8gaWRlbnRpZnkgdGhlIFJlbmRlcmVyIFR5cGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFJFTkRFUkVSX1RZUEVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuV0VCR0xcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5DQU5WQVNcbiAgICAgKi9cbiAgICBSRU5ERVJFUl9UWVBFOiB7XG4gICAgICAgIFVOS05PV046ICAgIDAsXG4gICAgICAgIFdFQkdMOiAgICAgIDEsXG4gICAgICAgIENBTlZBUzogICAgIDJcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyBibGVuZCBtb2RlcyBzdXBwb3J0ZWQgYnkgUElYSS4gSU1QT1JUQU5UIC0gVGhlIFdlYkdMIHJlbmRlcmVyIG9ubHkgc3VwcG9ydHNcbiAgICAgKiB0aGUgTk9STUFMLCBBREQsIE1VTFRJUExZIGFuZCBTQ1JFRU4gYmxlbmQgbW9kZXMuIEFueXRoaW5nIGVsc2Ugd2lsbCBzaWxlbnRseSBhY3QgbGlrZVxuICAgICAqIE5PUk1BTC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gQkxFTkRfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkFERFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5NVUxUSVBMWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQ1JFRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuT1ZFUkxBWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5EQVJLRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTElHSFRFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9ET0RHRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9CVVJOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhBUkRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU09GVF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5ESUZGRVJFTkNFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkVYQ0xVU0lPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IVUVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0FUVVJBVElPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MVU1JTk9TSVRZXG4gICAgICovXG4gICAgQkxFTkRfTU9ERVM6IHtcbiAgICAgICAgTk9STUFMOiAgICAgICAgIDAsXG4gICAgICAgIEFERDogICAgICAgICAgICAxLFxuICAgICAgICBNVUxUSVBMWTogICAgICAgMixcbiAgICAgICAgU0NSRUVOOiAgICAgICAgIDMsXG4gICAgICAgIE9WRVJMQVk6ICAgICAgICA0LFxuICAgICAgICBEQVJLRU46ICAgICAgICAgNSxcbiAgICAgICAgTElHSFRFTjogICAgICAgIDYsXG4gICAgICAgIENPTE9SX0RPREdFOiAgICA3LFxuICAgICAgICBDT0xPUl9CVVJOOiAgICAgOCxcbiAgICAgICAgSEFSRF9MSUdIVDogICAgIDksXG4gICAgICAgIFNPRlRfTElHSFQ6ICAgICAxMCxcbiAgICAgICAgRElGRkVSRU5DRTogICAgIDExLFxuICAgICAgICBFWENMVVNJT046ICAgICAgMTIsXG4gICAgICAgIEhVRTogICAgICAgICAgICAxMyxcbiAgICAgICAgU0FUVVJBVElPTjogICAgIDE0LFxuICAgICAgICBDT0xPUjogICAgICAgICAgMTUsXG4gICAgICAgIExVTUlOT1NJVFk6ICAgICAxNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIHdlYmdsIGRyYXcgbW9kZXMuIFRoZXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggR0wgZHJhd01vZGUgdG8gdXNlXG4gICAgICogdW5kZXIgY2VydGFpbiBzaXR1YXRpb25zIGFuZCByZW5kZXJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5QT0lOVFNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfTE9PUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX0ZBTlxuICAgICAqL1xuICAgIERSQVdfTU9ERVM6IHtcbiAgICAgICAgUE9JTlRTOiAgICAgICAgIDAsXG4gICAgICAgIExJTkVTOiAgICAgICAgICAxLFxuICAgICAgICBMSU5FX0xPT1A6ICAgICAgMixcbiAgICAgICAgTElORV9TVFJJUDogICAgIDMsXG4gICAgICAgIFRSSUFOR0xFUzogICAgICA0LFxuICAgICAgICBUUklBTkdMRV9TVFJJUDogNSxcbiAgICAgICAgVFJJQU5HTEVfRkFOOiAgIDZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBwaXhpLlxuICAgICAqXG4gICAgICogVGhlIERFRkFVTFQgc2NhbGUgbW9kZSBhZmZlY3RzIHRoZSBkZWZhdWx0IHNjYWxpbmcgbW9kZSBvZiBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAgKiBJdCBjYW4gYmUgcmUtYXNzaWduZWQgdG8gZWl0aGVyIExJTkVBUiBvciBORUFSRVNULCBkZXBlbmRpbmcgdXBvbiBzdWl0YWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0NBTEVfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuREVGQVVMVD1MSU5FQVJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTElORUFSIFNtb290aCBzY2FsaW5nXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLk5FQVJFU1QgUGl4ZWxhdGluZyBzY2FsaW5nXG4gICAgICovXG4gICAgU0NBTEVfTU9ERVM6IHtcbiAgICAgICAgREVGQVVMVDogICAgMCxcbiAgICAgICAgTElORUFSOiAgICAgMCxcbiAgICAgICAgTkVBUkVTVDogICAgMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZml4IHRoYXQgZGVub3RlcyBhIFVSTCBpcyBmb3IgYSByZXRpbmEgYXNzZXRcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gUkVUSU5BX1BSRUZJWFxuICAgICAqL1xuICAgIC8vZXhhbXBsZTogJ0AyeCcsXG4gICAgUkVUSU5BX1BSRUZJWDogL0AoLispeC8sXG5cbiAgICBSRVNPTFVUSU9OOjEsXG5cbiAgICBGSUxURVJfUkVTT0xVVElPTjoxLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgcmVuZGVyIG9wdGlvbnMgaWYgbm9uZSBhcmUgc3VwcGxpZWQgdG8ge0BsaW5rIFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKiBvciB7QGxpbmsgUElYSS5DYW52YXNSZW5kZXJlcn0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERFRkFVTFRfUkVOREVSX09QVElPTlNcbiAgICAgKiBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnZpZXc9bnVsbFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy50cmFuc3BhcmVudD1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hbnRpYWxpYXM9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuZm9yY2VGWEFBPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnJlc29sdXRpb249MVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmF1dG9SZXNpemU9ZmFsc2VcbiAgICAgKi9cbiAgICBERUZBVUxUX1JFTkRFUl9PUFRJT05TOiB7XG4gICAgICAgIHZpZXc6IG51bGwsXG4gICAgICAgIHJlc29sdXRpb246IDEsXG4gICAgICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgICAgIGZvcmNlRlhBQTogZmFsc2UsXG4gICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgIGNsZWFyQmVmb3JlUmVuZGVyOiB0cnVlLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgICAgICByb3VuZFBpeGVsczogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnRzIHRoYXQgaWRlbnRpZnkgc2hhcGVzLCBtYWlubHkgdG8gcHJldmVudCBgaW5zdGFuY2VvZmAgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFU1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUE9MWT0wXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SRUNUPTFcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkNJUkM9MlxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuRUxJUD0zXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SUkVDPTRcbiAgICAgKi9cbiAgICBTSEFQRVM6IHtcbiAgICAgICAgUE9MWTogMCxcbiAgICAgICAgUkVDVDogMSxcbiAgICAgICAgQ0lSQzogMixcbiAgICAgICAgRUxJUDogMyxcbiAgICAgICAgUlJFQzogNFxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBtYXliZSBjaGFuZ2UgdG8gU1BSSVRFLkJBVENIX1NJWkU6IDIwMDBcbiAgICAvLyBUT0RPOiBtYXliZSBhZGQgUEFSVElDTEUuQkFUQ0hfU0laRTogMTUwMDBcbiAgICBTUFJJVEVfQkFUQ0hfU0laRTogMjAwMCAvL25pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSBhbmQgZGVza3RvcCBtYWNoaW5lc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDT05TVDtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gcmVxdWlyZSgnLi9EaXNwbGF5T2JqZWN0JyksXG4gICAgUmVuZGVyVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgQ29udGFpbmVyIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0cy5cbiAqIEl0IGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBkaXNwbGF5IG9iamVjdHMgdGhhdCBhY3QgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIG9iamVjdHMuXG4gKlxuICpgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiBgYGBcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5EaXNwbGF5T2JqZWN0XG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDb250YWluZXIoKVxue1xuICAgIERpc3BsYXlPYmplY3QuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdFtdfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERpc3BsYXlPYmplY3QucHJvdG90eXBlKTtcbkNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5lcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udGFpbmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gMTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIGhlaWdodCA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBPdmVycmlkYWJsZSBtZXRob2QgdGhhdCBjYW4gYmUgdXNlZCBieSBDb250YWluZXIgc3ViY2xhc3NlcyB3aGVuZXZlciB0aGUgY2hpbGRyZW4gYXJyYXkgaXMgbW9kaWZpZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7fTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lci5cbiAqIFxuICogWW91IGNhbiBhbHNvIGFkZCBtdWx0cGxlIGl0ZW1zIGxpa2Ugc286IG15Q29udGFpbmVyLmFkZENoaWxkKHRoaW5rT25lLCB0aGluZ1R3bywgdGhpbmdUaHJlZSlcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBhZGQgdG8gdGhlIGNvbnRhaW5lclxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57IFxuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaGFzIGEgcGFyZW50IHRoZW4gbGV0cyByZW1vdmUgaXQgYXMgUGl4aSBvYmplY3RzIGNhbiBvbmx5IGV4aXN0IGluIG9uZSBwbGFjZVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UodGhpcy5jaGlsZHJlbi5sZW5ndGgtMSk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lciBhdCBhIHNwZWNpZmllZCBpbmRleC4gSWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd25cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRvIGFkZFxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBwbGFjZSB0aGUgY2hpbGQgaW5cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkQXQgPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hpbGQgKyAnYWRkQ2hpbGRBdDogVGhlIGluZGV4ICcrIGluZGV4ICsnIHN1cHBsaWVkIGlzIG91dCBvZiBib3VuZHMgJyArIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiAyIERpc3BsYXkgT2JqZWN0cyB3aXRoaW4gdGhpcyBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKiBAcGFyYW0gY2hpbGQyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc3dhcENoaWxkcmVuID0gZnVuY3Rpb24gKGNoaWxkLCBjaGlsZDIpXG57XG4gICAgaWYgKGNoaWxkID09PSBjaGlsZDIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluZGV4MSA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG4gICAgdmFyIGluZGV4MiA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZDIpO1xuXG4gICAgaWYgKGluZGV4MSA8IDAgfHwgaW5kZXgyIDwgMClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3dhcENoaWxkcmVuOiBCb3RoIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0cyBtdXN0IGJlIGNoaWxkcmVuIG9mIHRoZSBjYWxsZXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDFdID0gY2hpbGQyO1xuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgyXSA9IGNoaWxkO1xuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleDEgPCBpbmRleDIgPyBpbmRleDEgOiBpbmRleDIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBwb3NpdGlvbiBvZiBhIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgdG8gaWRlbnRpZnlcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdCB0byBpZGVudGlmeVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiBhbiBleGlzdGluZyBjaGlsZCBpbiB0aGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIGZvciB3aGljaCB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGluZGV4IG51bWJlclxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSByZXN1bHRpbmcgaW5kZXggbnVtYmVyIGZvciB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuXG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgY3VycmVudEluZGV4LCAxKTsgLy8gcmVtb3ZlIGZyb20gb2xkIHBvc2l0aW9uXG4gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsgLy9hZGQgYXQgbmV3IHBvc2l0aW9uXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBhdFxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgYXQgdGhlIGdpdmVuIGluZGV4LCBpZiBhbnkuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDaGlsZEF0OiBTdXBwbGllZCBpbmRleCAnICsgaW5kZXggKyAnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjaGlsZCBsaXN0LCBvciB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baW5kZXhdO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW1vdmVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIHNwZWNpZmllZCBpbmRleCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgZnJvbVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIHZhciBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRBdChpbmRleCk7XG5cbiAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIGNvbnRhaW5lciB0aGF0IGFyZSB3aXRoaW4gdGhlIGJlZ2luIGFuZCBlbmQgaW5kZXhlcy5cbiAqXG4gKiBAcGFyYW0gYmVnaW5JbmRleCB7bnVtYmVyfSBUaGUgYmVnaW5uaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gKiBAcGFyYW0gZW5kSW5kZXgge251bWJlcn0gVGhlIGVuZGluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzaXplIG9mIHRoZSBjb250YWluZXIuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbiAoYmVnaW5JbmRleCwgZW5kSW5kZXgpXG57XG4gICAgdmFyIGJlZ2luID0gYmVnaW5JbmRleCB8fCAwO1xuICAgIHZhciBlbmQgPSB0eXBlb2YgZW5kSW5kZXggPT09ICdudW1iZXInID8gZW5kSW5kZXggOiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgcmFuZ2UgPSBlbmQgLSBiZWdpbjtcbiAgICB2YXIgcmVtb3ZlZCwgaTtcblxuICAgIGlmIChyYW5nZSA+IDAgJiYgcmFuZ2UgPD0gZW5kKVxuICAgIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGJlZ2luLCByYW5nZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0ucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShiZWdpbkluZGV4KTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZ2UgPT09IDAgJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyZW1vdmVDaGlsZHJlbjogbnVtZXJpYyB2YWx1ZXMgYXJlIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UuJyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIgZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSBmYWxzZTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkNvbnRhaW5lci5wcm90b3R5cGUuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtID0gQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIHRoZSBib3VuZHMgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCB0aGlzIHJlbmRlciBzZXNzaW9uIHNvIHJldHVybiB3aGF0IHdlIGhhdmVcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgY2hpbGRCb3VuZHM7XG4gICAgICAgIHZhciBjaGlsZE1heFg7XG4gICAgICAgIHZhciBjaGlsZE1heFk7XG5cbiAgICAgICAgdmFyIGNoaWxkVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgY2hpbGRCb3VuZHMgPSB0aGlzLmNoaWxkcmVuW2ldLmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBtaW5YID0gbWluWCA8IGNoaWxkQm91bmRzLnggPyBtaW5YIDogY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIG1pblkgPSBtaW5ZIDwgY2hpbGRCb3VuZHMueSA/IG1pblkgOiBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBjaGlsZE1heFggPSBjaGlsZEJvdW5kcy53aWR0aCArIGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICBjaGlsZE1heFkgPSBjaGlsZEJvdW5kcy5oZWlnaHQgKyBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBtYXhYID0gbWF4WCA+IGNoaWxkTWF4WCA/IG1heFggOiBjaGlsZE1heFg7XG4gICAgICAgICAgICBtYXhZID0gbWF4WSA+IGNoaWxkTWF4WSA/IG1heFkgOiBjaGlsZE1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkVmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJHZXRCb3VuZHMgPSBDb250YWluZXIucHJvdG90eXBlLmdldEJvdW5kcztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5vbi1nbG9iYWwgbG9jYWwgYm91bmRzIG9mIHRoZSBDb250YWluZXIgYXMgYSByZWN0YW5nbGUuXG4gKiBUaGUgY2FsY3VsYXRpb24gdGFrZXMgYWxsIHZpc2libGUgY2hpbGRyZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4Q2FjaGUgPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdGguTWF0cml4LklERU5USVRZO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdHJpeENhY2hlO1xuXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMoIG1hdGguTWF0cml4LklERU5USVRZICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICBcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpLCBqO1xuXG4gICAgLy8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyBlbGVtZW50IGhhcyBhIG1hc2sgb3IgYSBmaWx0ZXIuXG4gICAgaWYgKHRoaXMuX21hc2sgfHwgdGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuXG4gICAgICAgIC8vIHB1c2ggZmlsdGVyIGZpcnN0IGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyBjb3JyZWN0IGZvciBhbnkgbWFza2luZ1xuICAgICAgICBpZiAodGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRoaXMsIHRoaXMuX2ZpbHRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnB1c2hNYXNrKHRoaXMsIHRoaXMuX21hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgLy8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBiYXRjaCwgb25seSByZW5kZXJlZCBpZiBpdCBoYXMgYSB0ZXh0dXJlLlxuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIG1ha2Ugc3VyZSB0aGV5IGdldCByZW5kZXJlZFxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmlsdGVycylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gc2ltcGxlIHJlbmRlciBjaGlsZHJlbiFcbiAgICAgICAgZm9yIChpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnJlbmRlcldlYkdMKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3ViY2xhc3NcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyB0aGlzIGlzIHdoZXJlIGNvbnRlbnQgaXRzZWxmIGdldHMgcmVuZGVyZWQuLi5cbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpc1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMuYWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcy5fbWFzaywgcmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlckNhbnZhcyhyZW5kZXJlcik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFzaylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2socmVuZGVyZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcbntcbiAgICBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBpZiAoZGVzdHJveUNoaWxkcmVuKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KGRlc3Ryb3lDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9UcmFuc2Zvcm0nKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgIF90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgdGhhdCBhcmUgcmVuZGVyZWQgb24gdGhlIHNjcmVlbi5cbiAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvbiBpdHMgb3duIHJhdGhlciBpdCBzaG91bGQgYmUgZXh0ZW5kZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIERpc3BsYXlPYmplY3QoKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29vcmRpbmF0ZSBvZiB0aGUgb2JqZWN0IHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy50cmFuc2Zvcm0ucG9zaXRpb247XG4gICAvLyB0aGlzLl9wb3NpdGlvbiA9IG5ldyBDYWNoZVBvaW50KHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIGZhY3RvciBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlID0gdGhpcy50cmFuc2Zvcm0uc2NhbGVcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXZvdCBwb2ludCBvZiB0aGUgZGlzcGxheU9iamVjdCB0aGF0IGl0IHJvdGF0ZXMgYXJvdW5kXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucGl2b3QgPSB0aGlzLnRyYW5zZm9ybS5waXZvdFxuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2tldyBmYWN0b3IgZm9yIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5za2V3ID0gdGhpcy50cmFuc2Zvcm0uc2tld1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9yb3RhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BhY2l0eSBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpc2liaWxpdHkgb2YgdGhlIG9iamVjdC4gSWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biwgYW5kXG4gICAgICogdGhlIHVwZGF0ZVRyYW5zZm9ybSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDYW4gdGhpcyBvYmplY3QgYmUgcmVuZGVyZWQsIGlmIGZhbHNlIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgZHJhd24gYnV0IHRoZSB1cGRhdGVUcmFuc2Zvcm1cbiAgICAgKiBtZXRob2RzIHdpbGwgc3RpbGwgYmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmFibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIHRoaXMgZGlzcGxheSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNvbnRhaW5lcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbXVsdGlwbGllZCBhbHBoYSBvZiB0aGUgZGlzcGxheU9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRyYW5zZm9ybSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIHdvcmxkIChwYXJlbnQpIGZhY3RvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gdGhpcy50cmFuc2Zvcm0ubG9jYWxUcmFuc2Zvcm07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJlYSB0aGUgZmlsdGVyIGlzIGFwcGxpZWQgdG8uIFRoaXMgaXMgdXNlZCBhcyBtb3JlIG9mIGFuIG9wdGltaXNhdGlvblxuICAgICAqIHJhdGhlciB0aGFuIGZpZ3VyaW5nIG91dCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgZGlzcGxheU9iamVjdCBlYWNoIGZyYW1lIHlvdSBjYW4gc2V0IHRoaXMgcmVjdGFuZ2xlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xuXG4gICAgLyoqeHd3XG4gICAgICogY2FjaGVkIHNpbiByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3IgPSAwO1xuXG4gICAgLyoqXG4gICAgICogY2FjaGVkIGNvcyByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3IgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRzID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vc3QgdXAtdG8tZGF0ZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcmlnaW5hbCwgY2FjaGVkIG1hc2sgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXNrID0gbnVsbDtcblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGF5T2JqZWN0O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB4IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NhbGVYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByb3RhdGlvbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY3IgPSBNYXRoLmNvcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHNwcml0ZSBpcyBnbG9iYWxseSB2aXNpYmxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHdvcmxkVmlzaWJsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcztcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbWFzayBmb3IgdGhlIGRpc3BsYXlPYmplY3QuIEEgbWFzayBpcyBhbiBvYmplY3QgdGhhdCBsaW1pdHMgdGhlIHZpc2liaWxpdHkgb2YgYW4gb2JqZWN0IHRvIHRoZSBzaGFwZSBvZiB0aGUgbWFzayBhcHBsaWVkIHRvIGl0LlxuICAgICAqIEluIFBJWEkgYSByZWd1bGFyIG1hc2sgbXVzdCBiZSBhIFBJWEkuR3JhcGhpY3Mgb3IgYSBQSVhJLlNwcml0ZSBvYmplY3QuIFRoaXMgYWxsb3dzIGZvciBtdWNoIGZhc3RlciBtYXNraW5nIGluIGNhbnZhcyBhcyBpdCB1dGlsaXNlcyBzaGFwZSBjbGlwcGluZy5cbiAgICAgKiBUbyByZW1vdmUgYSBtYXNrLCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc3xQSVhJLlNwcml0ZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIG1hc2s6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFzaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX21hc2sgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFzay5yZW5kZXJhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVycyBmb3IgdGhlIGRpc3BsYXlPYmplY3QuXG4gICAgICogKiBJTVBPUlRBTlQ6IFRoaXMgaXMgYSB3ZWJHTCBvbmx5IGZlYXR1cmUgYW5kIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqIFRvIHJlbW92ZSBmaWx0ZXJzIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnbnVsbCdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGZpbHRlcnM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLnNsaWNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gdmFsdWUgJiYgdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBUT0RPIC0gT3B0aW1pemF0aW9uIHBhc3MhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgLy8gbXVsdGlwbHkgdGhlIGFscGhhcy4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG59O1xuXG4vLyBwZXJmb3JtYW5jZSBpbmNyZWFzZSB0byBhdm9pZCB1c2luZyBjYWxsLi4gKDEweCBmYXN0ZXIpXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtID0gRGlzcGxheU9iamVjdC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtO1xuXG4vKipcbiAqXG4gKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeCkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMobWF0aC5NYXRyaXguSURFTlRJVFkpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvR2xvYmFsID0gZnVuY3Rpb24gKHBvc2l0aW9uKVxue1xuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb3RcbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseShwb3NpdGlvbik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdCByZWxhdGl2ZSB0byBhbm90aGVyIHBvaW50XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcGFyYW0gW2Zyb21dIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgZ2xvYmFsIHBvc2l0aW9uIGZyb21cbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgUG9pbnQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvTG9jYWwgPSBmdW5jdGlvbiAocG9zaXRpb24sIGZyb20sIHBvaW50KVxue1xuICAgIGlmIChmcm9tKVxuICAgIHtcbiAgICAgICAgcG9zaXRpb24gPSBmcm9tLnRvR2xvYmFsKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBzaW1wbHkgYXBwbHkgdGhlIG1hdHJpeC4uXG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvc2l0aW9uLCBwb2ludCk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFyZW50IENvbnRhaW5lciBvZiB0aGlzIERpc3BsYXlPYmplY3RcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdG8gYWRkIHRoaXMgRGlzcGxheU9iamVjdCB0b1xuICogQHJldHVybiB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRoYXQgdGhpcyBEaXNwbGF5T2JqZWN0IHdhcyBhZGRlZCB0b1xuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXIuYWRkQ2hpbGQpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFBhcmVudDogQXJndW1lbnQgbXVzdCBiZSBhIENvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRDaGlsZCh0aGlzKTtcbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzZXQgdGhlIHBvc3Rpb24sIHNjYWxlLCBza2V3IGFuZCBwaXZvdCBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBUaGUgWCBwb3NpdGlvblxuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IFRoZSBZIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3NjYWxlWD0xXSB7bnVtYmVyfSBUaGUgWCBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtzY2FsZVk9MV0ge251bWJlcn0gVGhlIFkgc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbcm90YXRpb249MF0ge251bWJlcn0gVGhlIHJvdGF0aW9uXG4gKiBAcGFyYW0gW3NrZXdYPTBdIHtudW1iZXJ9IFRoZSBYIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbc2tld1k9MF0ge251bWJlcn0gVGhlIFkgc2tldyB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFg9MF0ge251bWJlcn0gVGhlIFggcGl2b3QgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RZPTBdIHtudW1iZXJ9IFRoZSBZIHBpdm90IHZhbHVlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKHgsIHksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZLCBwaXZvdFgsIHBpdm90WSkgLy9qc2hpbnQgaWdub3JlOmxpbmVcbntcbiAgICB0aGlzLnBvc2l0aW9uLnggPSB4IHx8IDA7XG4gICAgdGhpcy5wb3NpdGlvbi55ID0geSB8fCAwO1xuICAgIHRoaXMuc2NhbGUueCA9ICFzY2FsZVggPyAxIDogc2NhbGVYO1xuICAgIHRoaXMuc2NhbGUueSA9ICFzY2FsZVkgPyAxIDogc2NhbGVZO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgIHRoaXMuc2tldy54ID0gc2tld1ggfHwgMDtcbiAgICB0aGlzLnNrZXcueSA9IHNrZXdZIHx8IDA7XG4gICAgdGhpcy5waXZvdC54ID0gcGl2b3RYIHx8IDA7XG4gICAgdGhpcy5waXZvdC55ID0gcGl2b3RZIHx8IDA7XG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEJhc2UgZGVzdHJveSBtZXRob2QgZm9yIGdlbmVyaWMgZGlzcGxheSBvYmplY3RzXG4gKlxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcblxuICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2NhbGUgPSBudWxsO1xuICAgIHRoaXMucGl2b3QgPSBudWxsO1xuICAgIHRoaXMuc2tldyA9IG51bGw7XG5cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcblxuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IG1hdGguUG9pbnQoMSwxKTtcbiAgICB0aGlzLnBpdm90ID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNrZXcgPSBuZXcgbWF0aC5Qb2ludCgwLjApO1xuICAgIFxuICAgIHRoaXMucm90YXRpb24gPSAwO1xuICAgIHRoaXMuX3NyID0gTWF0aC5zaW4oMCk7XG4gICAgdGhpcy5fY3IgPSBNYXRoLmNvcygwKTtcbiAgICBcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufVxuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHJhbnNmb3JtO1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uIChwYXJlbnRUcmFuc2Zvcm0pXG57XG4gICAgdmFyIHB0ID0gcGFyZW50VHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGx0ID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcblxuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueDtcbiAgICAgICAgbHQuYiAgPSAgdGhpcy5fc3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmMgID0gLXRoaXMuX3NyICogdGhpcy5zY2FsZS55O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQudHggPSAgdGhpcy5wb3NpdGlvbi54IC0gKHRoaXMucGl2b3QueCAqIGx0LmEgKyB0aGlzLnBpdm90LnkgKiBsdC5jKTtcbiAgICAgICAgbHQudHkgPSAgdGhpcy5wb3NpdGlvbi55IC0gKHRoaXMucGl2b3QueCAqIGx0LmIgKyB0aGlzLnBpdm90LnkgKiBsdC5kKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmRpcnR5IHx8IHBhcmVudC5kaXJ0eSlcbiAgICB7ICAgICAgXG4gICAgICAgIC8vIGNvbmNhdCB0aGUgcGFyZW50IG1hdHJpeCB3aXRoIHRoZSBvYmplY3RzIHRyYW5zZm9ybS5cbiAgICAgICAgd3QuYSAgPSBsdC5hICAqIHB0LmEgKyBsdC5iICAqIHB0LmM7XG4gICAgICAgIHd0LmIgID0gbHQuYSAgKiBwdC5iICsgbHQuYiAgKiBwdC5kO1xuICAgICAgICB3dC5jICA9IGx0LmMgICogcHQuYSArIGx0LmQgICogcHQuYztcbiAgICAgICAgd3QuZCAgPSBsdC5jICAqIHB0LmIgKyBsdC5kICAqIHB0LmQ7XG4gICAgICAgIHd0LnR4ID0gbHQudHggKiBwdC5hICsgbHQudHkgKiBwdC5jICsgcHQudHg7XG4gICAgICAgIHd0LnR5ID0gbHQudHggKiBwdC5iICsgbHQudHkgKiBwdC5kICsgcHQudHk7ICAgICAgIFxuICAgIFxuICAgLy8gICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgLy8gICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbi8vICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgLy8gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm07XG5cblxuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vR3JhcGhpY3NEYXRhJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcFBvaW50ID0gbmV3IG1hdGguUG9pbnQoKTtcblxuLyoqXG4gKiBUaGUgR3JhcGhpY3MgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB1c2VkIHRvIGRyYXcgcHJpbWl0aXZlIHNoYXBlcyBzdWNoIGFzIGxpbmVzLCBjaXJjbGVzIGFuZFxuICogcmVjdGFuZ2xlcyB0byB0aGUgZGlzcGxheSwgYW5kIHRvIGNvbG9yIGFuZCBmaWxsIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3MoKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCAodGhpY2tuZXNzKSBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gMDtcblxuICAgIC8qKlxuICAgICAqIEdyYXBoaWNzIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQXBwbHkgYSB2YWx1ZSBvZiAweEZGRkZGRiB0byByZXNldCB0aGUgdGludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByZXZpb3VzIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVXNlZCB0byBjb21wYXJlIHRvIHRoZSBjdXJyZW50IHRpbnQgYW5kIGNoZWNrIGlmIHRoZXJlcyBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMuX3ByZXZUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUw7XG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHBhdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBjb250YWluaW5nIHNvbWUgV2ViR0wtcmVsYXRlZCBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgb2JqZWN0Pn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIFRPRE8gLSBfd2ViZ2wgc2hvdWxkIHVzZSBhIHByb3RvdHlwZSBvYmplY3QsIG5vdCBhIHJhbmRvbSB1bmRvY3VtZW50ZWQgb2JqZWN0Li4uXG4gICAgdGhpcy5fd2ViR0wgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBzaGFwZSBpcyBiZWluZyB1c2VkIGFzIGEgbWFzay5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc01hc2sgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBib3VuZHMnIHBhZGRpbmcgdXNlZCBmb3IgYm91bmRzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYm91bmRzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBsb2NhbCBib3VuZHMgdG8gcHJldmVudCByZWNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLDAsMSwxKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgV2ViR0wgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlXG4gICAgICogZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgY2FjaGVkIHNwcml0ZSBvYmplY3QgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGNhY2hlQXNCaXRtYXAgaXMgc2V0IHRvIHRydWUgdGhlIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIGFzIGlmIGl0IHdhcyBhIHNwcml0ZS5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGdyYXBoaWNzIGVsZW1lbnQgZG9lcyBub3QgY2hhbmdlIG9mdGVuLCBhcyBpdCB3aWxsIHNwZWVkIHVwIHRoZSByZW5kZXJpbmdcbiAgICAgKiBvZiB0aGUgb2JqZWN0IGluIGV4Y2hhbmdlIGZvciB0YWtpbmcgdXAgdGV4dHVyZSBtZW1vcnkuIEl0IGlzIGFsc28gdXNlZnVsIGlmIHlvdSBuZWVkIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB0byBiZSBhbnRpLWFsaWFzZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyBjYW52YXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGlmXG4gICAgICogeW91IGFyZSBjb25zdGFudGx5IHJlZHJhd2luZyB0aGUgZ3JhcGhpY3MgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhY2hlQXNCaXRtYXBcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkdyYXBoaWNzI1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5HcmFwaGljcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3M7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICogTm90ZSB0aGF0IHRoZSBvbmx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIGNsb25lZCwgbm90IGl0cyB0cmFuc2Zvcm0gKHBvc2l0aW9uLHNjYWxlLGV0YylcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjbG9uZSA9IG5ldyBHcmFwaGljcygpO1xuXG4gICAgY2xvbmUucmVuZGVyYWJsZSAgICA9IHRoaXMucmVuZGVyYWJsZTtcbiAgICBjbG9uZS5maWxsQWxwaGEgICAgID0gdGhpcy5maWxsQWxwaGE7XG4gICAgY2xvbmUubGluZVdpZHRoICAgICA9IHRoaXMubGluZVdpZHRoO1xuICAgIGNsb25lLmxpbmVDb2xvciAgICAgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICBjbG9uZS50aW50ICAgICAgICAgID0gdGhpcy50aW50O1xuICAgIGNsb25lLmJsZW5kTW9kZSAgICAgPSB0aGlzLmJsZW5kTW9kZTtcbiAgICBjbG9uZS5pc01hc2sgICAgICAgID0gdGhpcy5pc01hc2s7XG4gICAgY2xvbmUuYm91bmRzUGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcbiAgICBjbG9uZS5kaXJ0eSAgICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5nbERpcnR5ICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRoaXMuY2FjaGVkU3ByaXRlRGlydHk7XG5cbiAgICAvLyBjb3B5IGdyYXBoaWNzIGRhdGFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgY2xvbmUuZ3JhcGhpY3NEYXRhLnB1c2godGhpcy5ncmFwaGljc0RhdGFbaV0uY2xvbmUoKSk7XG4gICAgfVxuXG4gICAgY2xvbmUuY3VycmVudFBhdGggPSBjbG9uZS5ncmFwaGljc0RhdGFbY2xvbmUuZ3JhcGhpY3NEYXRhLmxlbmd0aCAtIDFdO1xuXG4gICAgY2xvbmUudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgIHJldHVybiBjbG9uZTtcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsaW5lIHN0eWxlIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gR3JhcGhpY3MgbWV0aG9kcyBzdWNoIGFzIHRoZSBsaW5lVG8oKSBtZXRob2Qgb3IgdGhlIGRyYXdDaXJjbGUoKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lU3R5bGUgPSBmdW5jdGlvbiAobGluZVdpZHRoLCBjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGggfHwgMDtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5saW5lQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGhhbGZ3YXkgdGhyb3VnaCBhIGxpbmU/IHN0YXJ0IGEgbmV3IG9uZSFcbiAgICAgICAgICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24odGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMuc2xpY2UoLTIpKTtcbiAgICAgICAgICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0cyBlbXB0eSBzbyBsZXRzIGp1c3Qgc2V0IHRoZSBsaW5lIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQWxwaGEgPSB0aGlzLmxpbmVBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBNb3ZlcyB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvIHgsIHkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gICovXG5HcmFwaGljcy5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihbeCx5XSk7XG4gICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgbGluZSB1c2luZyB0aGUgY3VycmVudCBsaW5lIHN0eWxlIGZyb20gdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byAoeCwgeSk7XG4gKiBUaGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIGlzIHRoZW4gc2V0IHRvICh4LCB5KS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeCwgeSk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsIDApO1xuICAgIH1cblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICB4YSA9IGZyb21YICsgKCAoY3BYIC0gZnJvbVgpICogaiApO1xuICAgICAgICB5YSA9IGZyb21ZICsgKCAoY3BZIC0gZnJvbVkpICogaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCB4YSArICggKChjcFggKyAoICh0b1ggLSBjcFgpICogaiApKSAtIHhhKSAqIGogKSxcbiAgICAgICAgICAgICAgICAgICAgIHlhICsgKCAoKGNwWSArICggKHRvWSAtIGNwWSkgKiBqICkpIC0geWEpICogaiApICk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSBjcFgyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgY3BYMiwgY3BZMiwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciBuID0gMjAsXG4gICAgICAgIGR0LFxuICAgICAgICBkdDIsXG4gICAgICAgIGR0MyxcbiAgICAgICAgdDIsXG4gICAgICAgIHQzLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIGR0ID0gKDEgLSBqKTtcbiAgICAgICAgZHQyID0gZHQgKiBkdDtcbiAgICAgICAgZHQzID0gZHQyICogZHQ7XG5cbiAgICAgICAgdDIgPSBqICogajtcbiAgICAgICAgdDMgPSB0MiAqIGo7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIGR0MyAqIGZyb21YICsgMyAqIGR0MiAqIGogKiBjcFggKyAzICogZHQgKiB0MiAqIGNwWDIgKyB0MyAqIHRvWCxcbiAgICAgICAgICAgICAgICAgICAgIGR0MyAqIGZyb21ZICsgMyAqIGR0MiAqIGogKiBjcFkgKyAzICogZHQgKiB0MiAqIGNwWTIgKyB0MyAqIHRvWSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmNUbygpIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSBiZXR3ZWVuIHR3byB0YW5nZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFwiYm9ycm93ZWRcIiBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZnhjYW52YXMvIC0gdGhhbmtzIGdvb2dsZSFcbiAqXG4gKiBAcGFyYW0geDEge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHgyIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTIge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjVG8gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIHJhZGl1cylcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyh4MSwgeTEpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyxcbiAgICAgICAgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSxcbiAgICAgICAgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSxcbiAgICAgICAgYTEgPSBmcm9tWSAtIHkxLFxuICAgICAgICBiMSA9IGZyb21YIC0geDEsXG4gICAgICAgIGEyID0geTIgICAtIHkxLFxuICAgICAgICBiMiA9IHgyICAgLSB4MSxcbiAgICAgICAgbW0gPSBNYXRoLmFicyhhMSAqIGIyIC0gYjEgKiBhMik7XG5cbiAgICBpZiAobW0gPCAxLjBlLTggfHwgcmFkaXVzID09PSAwKVxuICAgIHtcbiAgICAgICAgaWYgKHBvaW50c1twb2ludHMubGVuZ3RoLTJdICE9PSB4MSB8fCBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSAhPT0geTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIGRkID0gYTEgKiBhMSArIGIxICogYjEsXG4gICAgICAgICAgICBjYyA9IGEyICogYTIgKyBiMiAqIGIyLFxuICAgICAgICAgICAgdHQgPSBhMSAqIGEyICsgYjEgKiBiMixcbiAgICAgICAgICAgIGsxID0gcmFkaXVzICogTWF0aC5zcXJ0KGRkKSAvIG1tLFxuICAgICAgICAgICAgazIgPSByYWRpdXMgKiBNYXRoLnNxcnQoY2MpIC8gbW0sXG4gICAgICAgICAgICBqMSA9IGsxICogdHQgLyBkZCxcbiAgICAgICAgICAgIGoyID0gazIgKiB0dCAvIGNjLFxuICAgICAgICAgICAgY3ggPSBrMSAqIGIyICsgazIgKiBiMSxcbiAgICAgICAgICAgIGN5ID0gazEgKiBhMiArIGsyICogYTEsXG4gICAgICAgICAgICBweCA9IGIxICogKGsyICsgajEpLFxuICAgICAgICAgICAgcHkgPSBhMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHF4ID0gYjIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBxeSA9IGEyICogKGsxICsgajIpLFxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IE1hdGguYXRhbjIocHkgLSBjeSwgcHggLSBjeCksXG4gICAgICAgICAgICBlbmRBbmdsZSAgID0gTWF0aC5hdGFuMihxeSAtIGN5LCBxeCAtIGN4KTtcblxuICAgICAgICB0aGlzLmFyYyhjeCArIHgxLCBjeSArIHkxLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBiMSAqIGEyID4gYjIgKiBhMSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmMgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlICh1c2VkIHRvIGNyZWF0ZSBjaXJjbGVzLCBvciBwYXJ0cyBvZiBjaXJjbGVzKS5cbiAqXG4gKiBAcGFyYW0gY3gge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBjeSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBzdGFydEFuZ2xlIHtudW1iZXJ9IFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucyAoMCBpcyBhdCB0aGUgMyBvJ2Nsb2NrIHBvc2l0aW9uIG9mIHRoZSBhcmMncyBjaXJjbGUpXG4gKiBAcGFyYW0gZW5kQW5nbGUge251bWJlcn0gVGhlIGVuZGluZyBhbmdsZSwgaW4gcmFkaWFuc1xuICogQHBhcmFtIGFudGljbG9ja3dpc2Uge2Jvb2xlYW59IE9wdGlvbmFsLiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgY291bnRlcmNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuIEZhbHNlIGlzIGRlZmF1bHQsIGFuZCBpbmRpY2F0ZXMgY2xvY2t3aXNlLCB3aGlsZSB0cnVlIGluZGljYXRlcyBjb3VudGVyLWNsb2Nrd2lzZS5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmMgPSBmdW5jdGlvbihjeCwgY3ksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UpXG57XG4gICAgYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gZW5kQW5nbGUpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiggIWFudGljbG9ja3dpc2UgJiYgZW5kQW5nbGUgPD0gc3RhcnRBbmdsZSApXG4gICAge1xuICAgICAgICBlbmRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG4gICAgZWxzZSBpZiggYW50aWNsb2Nrd2lzZSAmJiBzdGFydEFuZ2xlIDw9IGVuZEFuZ2xlIClcbiAgICB7XG4gICAgICAgIHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuXG4gICAgdmFyIHN3ZWVwID0gYW50aWNsb2Nrd2lzZSA/IChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpICogLTEgOiAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKTtcbiAgICB2YXIgc2VncyA9ICBNYXRoLmNlaWwoTWF0aC5hYnMoc3dlZXApIC8gKE1hdGguUEkgKiAyKSkgKiA0MDtcblxuICAgIGlmKHN3ZWVwID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0WCA9IGN4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXM7XG4gICAgdmFyIHN0YXJ0WSA9IGN5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXM7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyhzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIHRoZXRhID0gc3dlZXAvKHNlZ3MqMik7XG4gICAgdmFyIHRoZXRhMiA9IHRoZXRhKjI7XG5cbiAgICB2YXIgY1RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgICB2YXIgc2VnTWludXMgPSBzZWdzIC0gMTtcblxuICAgIHZhciByZW1haW5kZXIgPSAoIHNlZ01pbnVzICUgMSApIC8gc2VnTWludXM7XG5cbiAgICBmb3IodmFyIGk9MDsgaTw9c2VnTWludXM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciByZWFsID0gIGkgKyByZW1haW5kZXIgKiBpO1xuXG5cbiAgICAgICAgdmFyIGFuZ2xlID0gKCh0aGV0YSkgKyBzdGFydEFuZ2xlICsgKHRoZXRhMiAqIHJlYWwpKTtcblxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgdmFyIHMgPSAtTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCggKGNUaGV0YSAqICBjKSArIChzVGhldGEgKiBzKSApICogcmFkaXVzICsgY3gsXG4gICAgICAgICAgICAgICAgICAgICggKGNUaGV0YSAqIC1zKSArIChzVGhldGEgKiBjKSApICogcmFkaXVzICsgY3kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSBzaW1wbGUgb25lLWNvbG9yIGZpbGwgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIG90aGVyIEdyYXBoaWNzIG1ldGhvZHNcbiAqIChzdWNoIGFzIGxpbmVUbygpIG9yIGRyYXdDaXJjbGUoKSkgdXNlIHdoZW4gZHJhd2luZy5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmVnaW5GaWxsID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmZpbGxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGwgPSB0aGlzLmZpbGxpbmc7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxDb2xvciA9IHRoaXMuZmlsbENvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQWxwaGEgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbGwgdG8gdGhlIGxpbmVzIGFuZCBzaGFwZXMgdGhhdCB3ZXJlIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhlIGJlZ2luRmlsbCgpIG1ldGhvZC5cbiAqXG4gKiBAcmV0dXJuIHtHcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmVuZEZpbGwgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gbnVsbDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5SZWN0YW5nbGUoeCx5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBSYWRpdXMgb2YgdGhlIHJlY3RhbmdsZSBjb3JuZXJzXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JvdW5kZWRSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdDaXJjbGUgPSBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkNpcmNsZSh4LHksIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhlIGVsbGlwc2VcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3RWxsaXBzZSA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgcG9seWdvbiB1c2luZyB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCB7bnVtYmVyW118UElYSS5Qb2ludFtdfSBUaGUgcGF0aCBkYXRhIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwb2x5Z29uLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24gKHBhdGgpXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBhdGg7XG5cbiAgICB2YXIgY2xvc2VkID0gdHJ1ZTtcblxuICAgIGlmIChwb2ludHMgaW5zdGFuY2VvZiBtYXRoLlBvbHlnb24pXG4gICAge1xuICAgICAgICBjbG9zZWQgPSBwb2ludHMuY2xvc2VkO1xuICAgICAgICBwb2ludHMgPSBwb2ludHMucG9pbnRzO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50c1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24ocG9pbnRzKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBjbG9zZWQ7XG5cbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBncmFwaGljcyB0aGF0IHdlcmUgZHJhd24gdG8gdGhpcyBHcmFwaGljcyBvYmplY3QsIGFuZCByZXNldHMgZmlsbCBhbmQgbGluZSBzdHlsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuY2xlYXJEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZ2VvbWV0cnkgaXMgY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2hvdWxkIGJlIG9uZSBvZiB0aGUgc2NhbGVNb2RlIGNvbnN0c1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdFxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG5cbiAgICByZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCAqIHJlc29sdXRpb24sIGJvdW5kcy5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY2FudmFzQnVmZmVyLmNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgdGhlIHNwcml0ZSBpcyBub3QgdmlzaWJsZSBvciB0aGUgYWxwaGEgaXMgMCB0aGVuIG5vIG5lZWQgdG8gcmVuZGVyIHRoaXMgZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuZ2xEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzLnJlbmRlcih0aGlzKTtcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmlzTWFzayA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdGludCBoYXMgY2hhbmdlZCwgc2V0IHRoZSBncmFwaGljcyBvYmplY3QgdG8gZGlydHkuXG4gICAgaWYgKHRoaXMuX3ByZXZUaW50ICE9PSB0aGlzLnRpbnQpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjb2RlIG1heSBzdGlsbCBiZSBuZWVkZWQgc28gbGVhdmluZyBmb3Igbm93Li5cbiAgICAvL1xuICAgIC8qXG4gICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXApXG4gICAge1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSB8fCB0aGlzLmNhY2hlZFNwcml0ZURpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSgpO1xuXG4gICAgICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xuXG4gICAgICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMuX2NhY2hlZFNwcml0ZSwgcmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb247XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjb250ZXh0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGdyYXBoaWMgc2hhcGUgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gVGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlLCBkZWZhdWx0cyB0byB0aGlzXG4gKiAgb2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuXG4gICAgICAgIC8vIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGl0ZW0gaXMgYSBtYXNrIVxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyYWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgICAgICAgICAgdGhpcy5nbERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2xvY2FsQm91bmRzO1xuXG4gICAgICAgIHZhciB3MCA9IGJvdW5kcy54O1xuICAgICAgICB2YXIgdzEgPSBib3VuZHMud2lkdGggKyBib3VuZHMueDtcblxuICAgICAgICB2YXIgaDAgPSBib3VuZHMueTtcbiAgICAgICAgdmFyIGgxID0gYm91bmRzLmhlaWdodCArIGJvdW5kcy55O1xuXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciBtYXhYID0geDE7XG4gICAgICAgIHZhciBtYXhZID0geTE7XG5cbiAgICAgICAgdmFyIG1pblggPSB4MTtcbiAgICAgICAgdmFyIG1pblkgPSB5MTtcblxuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy54ID0gbWluWDtcbiAgICAgICAgdGhpcy5fYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IHRoaXMuX2JvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIGdyYXBoaWNzIG9iamVjdFxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5HcmFwaGljcy5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIGdyYXBoaWNzRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoIWRhdGEuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGRlYWwgd2l0aCBmaWxscy4uXG4gICAgICAgIGlmIChkYXRhLnNoYXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIGRhdGEuc2hhcGUuY29udGFpbnMoIHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSApIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICpcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUxvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGlmICh0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB2YXIgc2hhcGUsIHBvaW50cywgeCwgeSwgdywgaDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG4gICAgICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVCB8fCB0eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueCAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gUE9MWVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSAyKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvaW50c1tqKzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblggPSB4LWxpbmVXaWR0aCA8IG1pblggPyB4LWxpbmVXaWR0aCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSB4K2xpbmVXaWR0aCA+IG1heFggPyB4K2xpbmVXaWR0aCA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IHktbGluZVdpZHRoIDwgbWluWSA/IHktbGluZVdpZHRoIDogbWluWTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IHkrbGluZVdpZHRoID4gbWF4WSA/IHkrbGluZVdpZHRoIDogbWF4WTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgbWluWCA9IDA7XG4gICAgICAgIG1heFggPSAwO1xuICAgICAgICBtaW5ZID0gMDtcbiAgICAgICAgbWF4WSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy54ID0gbWluWCAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMud2lkdGggPSAobWF4WCAtIG1pblgpICsgcGFkZGluZyAqIDI7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy55ID0gbWluWSAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMuaGVpZ2h0ID0gKG1heFkgLSBtaW5ZKSArIHBhZGRpbmcgKiAyO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNhY2hlZCBzcHJpdGUgd2hlbiB0aGUgc3ByaXRlIGhhcyBjYWNoZUFzQml0bWFwID0gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgaWYgKCF0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzKTtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgU3ByaXRlKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyID0gY2FudmFzQnVmZmVyO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIucmVzaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gbGV2ZXJhZ2UgdGhlIGFuY2hvciB0byBhY2NvdW50IGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC5zYXZlKCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGFscGhhIG9mIHRoZSBncmFwaGljcyB0byAxIGZvciB0aGUgcmVuZGVyLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gbm93IHJlbmRlciB0aGUgZ3JhcGhpYy4uXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0KTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG59O1xuKi9cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjYWNoZWRTcHJpdGUgPSB0aGlzLl9jYWNoZWRTcHJpdGU7XG4gICAgdmFyIHRleHR1cmUgPSBjYWNoZWRTcHJpdGUudGV4dHVyZTtcbiAgICB2YXIgY2FudmFzID0gY2FjaGVkU3ByaXRlLmJ1ZmZlci5jYW52YXM7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLmZyYW1lLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLmZyYW1lLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICBjYWNoZWRTcHJpdGUuX3dpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIGNhY2hlZFNwcml0ZS5faGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgZGlydHkgYmFzZSB0ZXh0dXJlc1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZGlydHkoKTtcbn07Ki9cblxuLyoqXG4gKiBEZXN0cm95cyBhIHByZXZpb3VzIGNhY2hlZCBzcHJpdGUuXG4gKlxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3lDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS50ZXh0dXJlLmRlc3Ryb3kodHJ1ZSk7XG5cbiAgICAvLyBsZXQgdGhlIGdjIGNvbGxlY3QgdGhlIHVudXNlZCBzcHJpdGVcbiAgICAvLyBUT0RPIGNvdWxkIGJlIG9iamVjdCBwb29sZWQhXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07Ki9cblxuLyoqXG4gKiBEcmF3cyB0aGUgZ2l2ZW4gc2hhcGUgdG8gdGhpcyBHcmFwaGljcyBvYmplY3QuIENhbiBiZSBhbnkgb2YgQ2lyY2xlLCBSZWN0YW5nbGUsIEVsbGlwc2UsIExpbmUgb3IgUG9seWdvbi5cbiAqXG4gKiBAcGFyYW0gc2hhcGUge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX0gVGhlIGdlbmVyYXRlZCBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24gKHNoYXBlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgLy8gY2hlY2sgY3VycmVudCBwYXRoIVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IG5ldyBHcmFwaGljc0RhdGEodGhpcy5saW5lV2lkdGgsIHRoaXMubGluZUNvbG9yLCB0aGlzLmxpbmVBbHBoYSwgdGhpcy5maWxsQ29sb3IsIHRoaXMuZmlsbEFscGhhLCB0aGlzLmZpbGxpbmcsIHNoYXBlKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnB1c2goZGF0YSk7XG5cbiAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICB7XG4gICAgICAgIGRhdGEuc2hhcGUuY2xvc2VkID0gZGF0YS5zaGFwZS5jbG9zZWQgfHwgdGhpcy5maWxsaW5nO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBkZXN0cm95IGVhY2ggb2YgdGhlIEdyYXBoaWNzRGF0YSBvYmplY3RzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggd2ViZ2wgZGF0YSBlbnRyeSwgZGVzdHJveSB0aGUgV2ViR0xHcmFwaGljc0RhdGFcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl93ZWJnbCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3dlYmdsW2lkXS5kYXRhLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJnbFtpZF0uZGF0YVtqXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl93ZWJnbCA9IG51bGw7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBudWxsO1xufTtcbiIsIi8qKlxuICogQSBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBmaWxsQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbEFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGwgICAgICB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gKiBAcGFyYW0gc2hhcGUgICAgIHtDaXJjbGV8UmVjdGFuZ2xlfEVsbGlwc2V8TGluZXxQb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzRGF0YShsaW5lV2lkdGgsIGxpbmVDb2xvciwgbGluZUFscGhhLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgZmlsbCwgc2hhcGUpXG57XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IGxpbmVDb2xvcjtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVBbHBoYSA9IGxpbmVBbHBoYTtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMuX2xpbmVUaW50ID0gbGluZUNvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5fZmlsbFRpbnQgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICAgICAqL1xuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gICAgICovXG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFRoZSB0eXBlIG9mIHRoZSBzaGFwZSwgc2VlIHRoZSBDb25zdC5TaGFwZXMgZmlsZSBmb3IgYWxsIHRoZSBleGlzdGluZyB0eXBlcyxcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBzaGFwZS50eXBlO1xufVxuXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljc0RhdGEgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfVxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEdyYXBoaWNzRGF0YShcbiAgICAgICAgdGhpcy5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMubGluZUNvbG9yLFxuICAgICAgICB0aGlzLmxpbmVBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuZmlsbEFscGhhLFxuICAgICAgICB0aGlzLmZpbGwsXG4gICAgICAgIHRoaXMuc2hhcGVcbiAgICApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3MgZGF0YS5cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2hhcGUgPSBudWxsO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vV2ViR0xHcmFwaGljc0RhdGEnKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyJyksXG5cbiAgICAvLyBzb21lIGRyYXdpbmcgZnVuY3Rpb25zLi5cbiAgICBidWlsZExpbmUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkTGluZScpO1xuICAgIGJ1aWxkUG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRQb2x5Jyk7XG4gICAgYnVpbGRDb21wbGV4UG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRDb21wbGV4UG9seScpO1xuICAgIGJ1aWxkUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlJyk7XG4gICAgYnVpbGRDaXJjbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ2lyY2xlJyk7XG5cbiAgICBlYXJjdXQgPSByZXF1aXJlKCdlYXJjdXQnKTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBHcmFwaGljc1JlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgdGhpcy5ncmFwaGljc0RhdGFQb29sID0gW107XG5cbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBvaW50cyBhIHBvbHkgY2FuIGNvbnRhaW4gYmVmb3JlIGl0IGlzIHJlbmRlcmVkIGFzIGEgY29tcGxleCBwb2x5Z29uICh1c2luZyB0aGUgc3RlbmNpbCBidWZmZXIpXG4gICAgICogQHR5cGUge051bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heGltdW1TaW1wbGVQb2x5U2l6ZSA9IDIwMDtcbn1cblxuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2dyYXBoaWNzJywgR3JhcGhpY3NSZW5kZXJlcik7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZVxuICpcbiAqIEBwcml2YXRlXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy5nbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBuZXcgUHJpbWl0aXZlU2hhZGVyKHRoaXMuZ2wpXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgcmVuZGVyZXIuXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2xbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcbiAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIHZhciB3ZWJHTERhdGE7XG4gIC8vICBjb25zb2xlLmxvZyhncmFwaGljcylcbiAgICBpZiAoZ3JhcGhpY3MuZGlydHkgfHwgIWdyYXBoaWNzLl93ZWJHTFtnbC5pZF0pXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZUdyYXBoaWNzKGdyYXBoaWNzKTtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gVGhpcyAgY291bGQgYmUgc3BlZWRlZCB1cCBmb3Igc3VyZSFcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCBncmFwaGljcy5ibGVuZE1vZGUgKTtcblxuLy8gICAgdmFyIG1hdHJpeCA9ICBncmFwaGljcy53b3JsZFRyYW5zZm9ybS5jbG9uZSgpO1xuLy8gICAgdmFyIG1hdHJpeCA9ICByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXguY2xvbmUoKTtcbi8vICAgIG1hdHJpeC5hcHBlbmQoZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0pO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB3ZWJHTC5kYXRhLmxlbmd0aDsgaSA8IG47IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMLmRhdGFbaV0ubW9kZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy9UT0RPIGZpeCB0aGlzIG9uZSFcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnB1c2hTdGVuY2lsKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICBnbC51bmlmb3JtMWYocmVuZGVyZXIuc2hhZGVyTWFuYWdlci5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSAqIHdlYkdMRGF0YS5hbHBoYSk7XG5cbiAgICAgICAgICAgIC8vIHJlbmRlciBxdWFkLi5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgcmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucG9wU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICovXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHNoYWRlciA9IHRoaXMucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgICAgICAgICByZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50aW50ID0gdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5kcmF3Q291bnQrKztcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gdXBkYXRlXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnVwZGF0ZUdyYXBoaWNzID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBnZXQgdGhlIGNvbnRleHRzIGdyYXBoaWNzIG9iamVjdFxuICAgIHZhciB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF07XG5cbiAgICAvLyBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGRvZXMgbm90IGV4aXN0IGluIHRoZSB3ZWJHTCBjb250ZXh0IHRpbWUgdG8gY3JlYXRlIGl0IVxuICAgIGlmICghd2ViR0wpXG4gICAge1xuICAgICAgICB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF0gPSB7bGFzdEluZGV4OjAsIGRhdGE6W10sIGdsOmdsfTtcbiAgICB9XG5cbiAgIFxuICAgIC8vIGZsYWcgdGhlIGdyYXBoaWNzIGFzIG5vdCBkaXJ0eSBhcyB3ZSBhcmUgYWJvdXQgdG8gdXBkYXRlIGl0Li4uXG4gICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcblxuICAgIHZhciBpO1xuXG4gICAgLy8gaWYgdGhlIHVzZXIgY2xlYXJlZCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHdlIHdpbGwgbmVlZCB0byBjbGVhciBldmVyeSBvYmplY3RcbiAgICBpZiAoZ3JhcGhpY3MuY2xlYXJEaXJ0eSlcbiAgICB7XG4gICAgICAgIGdyYXBoaWNzLmNsZWFyRGlydHkgPSBmYWxzZTtcblxuICAgICAgICAvLyBsb29wIHRocm91Z2ggYW5kIHJldHVybiBhbGwgdGhlIHdlYkdMRGF0YXMgdG8gdGhlIG9iamVjdCBwb29sIHNvIHRoYW4gY2FuIGJlIHJldXNlZCBsYXRlciBvblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGdyYXBoaWNzRGF0YSA9IHdlYkdMLmRhdGFbaV07XG4gICAgICAgICAgICBncmFwaGljc0RhdGEucmVzZXQoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wdXNoKCBncmFwaGljc0RhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIHRoZSBhcnJheSBhbmQgcmVzZXQgdGhlIGluZGV4Li5cbiAgICAgICAgd2ViR0wuZGF0YSA9IFtdO1xuICAgICAgICB3ZWJHTC5sYXN0SW5kZXggPSAwO1xuICAgIH1cblxuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICAvLyBsb29wIHRocm91Z2ggdGhlIGdyYXBoaWNzIGRhdGFzIGFuZCBjb25zdHJ1Y3QgZWFjaCBvbmUuLlxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgYSBjb21wbGV4IGZpbGwgdGhlbiB0aGUgbmV3IHN0ZW5jaWwgYnVmZmVyIHRlY2huaXF1ZSB3aWxsIGJlIHVzZWRcbiAgICAvLyBvdGhlciB3aXNlIGdyYXBoaWNzIG9iamVjdHMgd2lsbCBiZSBwdXNoZWQgaW50byBhIGJhdGNoLi5cbiAgICBmb3IgKGkgPSB3ZWJHTC5sYXN0SW5kZXg7IGkgPCBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gbmVlZCB0byBhZGQgdGhlIHBvaW50cyB0aGUgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgICAgICAgICBkYXRhLnBvaW50cyA9IGRhdGEuc2hhcGUucG9pbnRzLnNsaWNlKCk7XG4gICAgICAgICAgICBpZiAoZGF0YS5zaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gY2xvc2UgdGhlIHBvbHkgaWYgdGhlIHZhbHVlIGlzIHRydWUhXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzWzBdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMl0gfHwgZGF0YS5wb2ludHNbMV0gIT09IGRhdGEucG9pbnRzW2RhdGEucG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucG9pbnRzLnB1c2goZGF0YS5wb2ludHNbMF0sIGRhdGEucG9pbnRzWzFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1BS0UgU1VSRSBXRSBIQVZFIFRIRSBDT1JSRUNUIFRZUEUuLlxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoID49IDYpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoIDwgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgKiAyKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FuRHJhd1VzaW5nU2ltcGxlID0gYnVpbGRQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuRHJhd1VzaW5nU2ltcGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGggPiAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG4gICAgICAgICAgICAgICAgYnVpbGRMaW5lKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQyB8fCBkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5FTElQKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkQ2lyY2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2ViR0wubGFzdEluZGV4Kys7XG4gICAgfVxuXG4gICAgLy8gdXBsb2FkIGFsbCB0aGUgZGlydHkgZGF0YS4uLlxuICAgIGZvciAoaSA9IDA7IGkgPCB3ZWJHTC5kYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVtpXTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLmRpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEudXBsb2FkKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB3ZWJHTCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IFRPRE8gQEFsdmluXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnN3aXRjaE1vZGUgPSBmdW5jdGlvbiAod2ViR0wsIHR5cGUpXG57XG4gICAgdmFyIHdlYkdMRGF0YTtcblxuICAgIGlmICghd2ViR0wuZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgd2ViR0xEYXRhLm1vZGUgPSB0eXBlO1xuICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVt3ZWJHTC5kYXRhLmxlbmd0aC0xXTtcblxuICAgICAgICBpZiAoKHdlYkdMRGF0YS5wb2ludHMubGVuZ3RoID4gMzIwMDAwKSB8fCB3ZWJHTERhdGEubW9kZSAhPT0gdHlwZSB8fCB0eXBlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgICAgIHdlYkdMLmRhdGEucHVzaCh3ZWJHTERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd2ViR0xEYXRhLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB3ZWJHTERhdGE7XG59O1xuXG4iLCIvKipcbiAqIEFuIG9iamVjdCBjb250YWluaW5nIFdlYkdMIHNwZWNpZmljIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBXZWJHTEdyYXBoaWNzRGF0YShnbCkge1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLy9UT0RPIGRvZXMgdGhpcyBuZWVkIHRvIGJlIHNwbGl0IGJlZm9yZSB1cGxvZGluZz8/XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgY29sb3IgY29tcG9uZW50cyAocixnLGIpXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5jb2xvciA9IFswLDAsMF07IC8vIGNvbG9yIHNwbGl0IVxuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgcG9pbnRzIHRvIGRyYXdcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50W119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IFtdO1xuICAgIC8qKlxuICAgICAqIFRoZSBtYWluIGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggYnVmZmVyXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogdG9kbyBAYWx2aW5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tb2RlID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgZ3JhcGhpY3MgaXMgZGlydHkgb3Igbm90XG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn1cblxuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xHcmFwaGljc0RhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIFJlc2V0cyB0aGUgdmVydGljZXMgYW5kIHRoZSBpbmRpY2VzXG4gKi9cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnBvaW50cy5sZW5ndGggPSAwO1xuICAgIHRoaXMuaW5kaWNlcy5sZW5ndGggPSAwO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbi8vICAgIHRoaXMubGFzdEluZGV4ID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDtcbiAgICB0aGlzLmdsUG9pbnRzID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnBvaW50cyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5idWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmdsUG9pbnRzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmdsSW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmluZGljZXMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5nbEluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuY29sb3IgPSBudWxsO1xuICAgIHRoaXMucG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIFxuICAgIHRoaXMuZ2wgPSBudWxsO1xuXG4gICAgdGhpcy5idWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5nbFBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5nbEluZGljZXMgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihnbClcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBnbCxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgZmxpcFk7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIHZlYzMgdGludDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvciAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpXG4gICAgKTtcbn1cblxuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHJpbWl0aXZlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBjaXJjbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRyYXdcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDaXJjbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgdmFyIGNpcmNsZURhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSBjaXJjbGVEYXRhLng7XG4gICAgdmFyIHkgPSBjaXJjbGVEYXRhLnk7XG4gICAgdmFyIHdpZHRoO1xuICAgIHZhciBoZWlnaHQ7XG5cbiAgICAvLyBUT0RPIC0gYml0IGhhY2t5Pz9cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSBjaXJjbGVEYXRhLnJhZGl1cztcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS53aWR0aDtcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHRvdGFsU2VncyA9IE1hdGguZmxvb3IoMzAgKiBNYXRoLnNxcnQoY2lyY2xlRGF0YS5yYWRpdXMpKSB8fCBNYXRoLmZsb29yKDE1ICogTWF0aC5zcXJ0KGNpcmNsZURhdGEud2lkdGggKyBjaXJjbGVEYXRhLmhlaWdodCkpO1xuICAgIHZhciBzZWcgPSAoTWF0aC5QSSAqIDIpIC8gdG90YWxTZWdzIDtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTZWdzICsgMSA7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaCh4LHksIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgeSArIE1hdGguY29zKHNlZyAqIGkpICogaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MrKywgdmVjUG9zKyspO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcy0xKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cy5wdXNoKHggKyBNYXRoLnNpbihzZWcgKiBpKSAqIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBidWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENpcmNsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21wbGV4IHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENvbXBsZXhQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vVE9ETyAtIG5vIG5lZWQgdG8gY29weSB0aGlzIGFzIGl0IGdldHMgdHVybmVkIGludG8gYSBGTG9hdDMyQXJyYXkgYW55d2F5cy4uXG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHMuc2xpY2UoKTtcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB3ZWJHTERhdGEucG9pbnRzID0gcG9pbnRzO1xuICAgIHdlYkdMRGF0YS5hbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgd2ViR0xEYXRhLmNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcblxuICAgIC8vIGNhbGNsYXRlIHRoZSBib3VuZHMuLlxuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgdmFyIHgseTtcblxuICAgIC8vIGdldCBzaXplLi5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrPTIpXG4gICAge1xuICAgICAgICB4ID0gcG9pbnRzW2ldO1xuICAgICAgICB5ID0gcG9pbnRzW2krMV07XG5cbiAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBxdWFkIHRvIHRoZSBlbmQgY29zIHRoZXJlIGlzIG5vIHBvaW50IG1ha2luZyBhbm90aGVyIGJ1ZmZlciFcbiAgICBwb2ludHMucHVzaChtaW5YLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWF4WSxcbiAgICAgICAgICAgICAgICBtaW5YLCBtYXhZKTtcblxuICAgIC8vIHB1c2ggYSBxdWFkIG9udG8gdGhlIGVuZC4uXG5cbiAgICAvL1RPRE8gLSB0aGlzIGFpbnQgbmVlZGVkIVxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goIGkgKTtcbiAgICB9XG5cbn07XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29tcGxleFBvbHk7IiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZExpbmUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gVE9ETyBPUFRJTUlTRSFcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGxpbmUgd2lkdGggaXMgYW4gb2RkIG51bWJlciBhZGQgMC41IHRvIGFsaWduIHRvIGEgd2hvbGUgcGl4ZWxcbiAgICAvLyBjb21tZW50aW5nIHRoaXMgb3V0IGZpeGVzICM3MTEgYW5kICMxNjIwXG4gICAgLy8gaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGglMilcbiAgICAvLyB7XG4gICAgLy8gICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAgIHBvaW50c1tpXSArPSAwLjU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGZpcnN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgdmFyIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IHBvaW50IGlzIHRoZSBsYXN0IHBvaW50IC0gZ29ubmEgaGF2ZSBpc3N1ZXMgOilcbiAgICBpZiAoZmlyc3RQb2ludC54ID09PSBsYXN0UG9pbnQueCAmJiBmaXJzdFBvaW50LnkgPT09IGxhc3RQb2ludC55KVxuICAgIHtcbiAgICAgICAgLy8gbmVlZCB0byBjbG9uZSBhcyB3ZSBhcmUgZ29pbmcgdG8gc2xpZ2h0bHkgbW9kaWZ5IHRoZSBzaGFwZS4uXG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5zbGljZSgpO1xuXG4gICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHZhciBtaWRQb2ludFggPSBsYXN0UG9pbnQueCArIChmaXJzdFBvaW50LnggLSBsYXN0UG9pbnQueCkgKjAuNTtcbiAgICAgICAgdmFyIG1pZFBvaW50WSA9IGxhc3RQb2ludC55ICsgKGZpcnN0UG9pbnQueSAtIGxhc3RQb2ludC55KSAqMC41O1xuXG4gICAgICAgIHBvaW50cy51bnNoaWZ0KG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICAgICAgcG9pbnRzLnB1c2gobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgdmFyIGluZGV4Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIHZhciBpbmRleFN0YXJ0ID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAvLyBEUkFXIHRoZSBMaW5lXG4gICAgdmFyIHdpZHRoID0gZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEubGluZUNvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEubGluZUFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHB4LCBweSwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeTtcbiAgICB2YXIgcGVycHgsIHBlcnB5LCBwZXJwMngsIHBlcnAyeSwgcGVycDN4LCBwZXJwM3k7XG4gICAgdmFyIGExLCBiMSwgYzEsIGEyLCBiMiwgYzI7XG4gICAgdmFyIGRlbm9tLCBwZGlzdCwgZGlzdDtcblxuICAgIHAxeCA9IHBvaW50c1swXTtcbiAgICBwMXkgPSBwb2ludHNbMV07XG5cbiAgICBwMnggPSBwb2ludHNbMl07XG4gICAgcDJ5ID0gcG9pbnRzWzNdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSAgcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcblxuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIC8vIHN0YXJ0XG4gICAgdmVydHMucHVzaChwMXggLSBwZXJweCAsIHAxeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDF4ICsgcGVycHggLCBwMXkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoLTE7IGkrKylcbiAgICB7XG4gICAgICAgIHAxeCA9IHBvaW50c1soaS0xKSoyXTtcbiAgICAgICAgcDF5ID0gcG9pbnRzWyhpLTEpKjIgKyAxXTtcblxuICAgICAgICBwMnggPSBwb2ludHNbKGkpKjJdO1xuICAgICAgICBwMnkgPSBwb2ludHNbKGkpKjIgKyAxXTtcblxuICAgICAgICBwM3ggPSBwb2ludHNbKGkrMSkqMl07XG4gICAgICAgIHAzeSA9IHBvaW50c1soaSsxKSoyICsgMV07XG5cbiAgICAgICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgICAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgICAgICBwZXJwMnggPSAtKHAyeSAtIHAzeSk7XG4gICAgICAgIHBlcnAyeSA9IHAyeCAtIHAzeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAyeCpwZXJwMnggKyBwZXJwMnkqcGVycDJ5KTtcbiAgICAgICAgcGVycDJ4IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeSAvPSBkaXN0O1xuICAgICAgICBwZXJwMnggKj0gd2lkdGg7XG4gICAgICAgIHBlcnAyeSAqPSB3aWR0aDtcblxuICAgICAgICBhMSA9ICgtcGVycHkgKyBwMXkpIC0gKC1wZXJweSArIHAyeSk7XG4gICAgICAgIGIxID0gKC1wZXJweCArIHAyeCkgLSAoLXBlcnB4ICsgcDF4KTtcbiAgICAgICAgYzEgPSAoLXBlcnB4ICsgcDF4KSAqICgtcGVycHkgKyBwMnkpIC0gKC1wZXJweCArIHAyeCkgKiAoLXBlcnB5ICsgcDF5KTtcbiAgICAgICAgYTIgPSAoLXBlcnAyeSArIHAzeSkgLSAoLXBlcnAyeSArIHAyeSk7XG4gICAgICAgIGIyID0gKC1wZXJwMnggKyBwMngpIC0gKC1wZXJwMnggKyBwM3gpO1xuICAgICAgICBjMiA9ICgtcGVycDJ4ICsgcDN4KSAqICgtcGVycDJ5ICsgcDJ5KSAtICgtcGVycDJ4ICsgcDJ4KSAqICgtcGVycDJ5ICsgcDN5KTtcblxuICAgICAgICBkZW5vbSA9IGExKmIyIC0gYTIqYjE7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8IDAuMSApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgZGVub20rPTEwLjE7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4ID0gKGIxKmMyIC0gYjIqYzEpL2Rlbm9tO1xuICAgICAgICBweSA9IChhMipjMSAtIGExKmMyKS9kZW5vbTtcblxuXG4gICAgICAgIHBkaXN0ID0gKHB4IC1wMngpICogKHB4IC1wMngpICsgKHB5IC1wMnkpICogKHB5IC1wMnkpO1xuXG5cbiAgICAgICAgaWYgKHBkaXN0ID4gMTQwICogMTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICBwZXJwM3ggPSBwZXJweCAtIHBlcnAyeDtcbiAgICAgICAgICAgIHBlcnAzeSA9IHBlcnB5IC0gcGVycDJ5O1xuXG4gICAgICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAzeCpwZXJwM3ggKyBwZXJwM3kqcGVycDN5KTtcbiAgICAgICAgICAgIHBlcnAzeCAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN5IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3ggKj0gd2lkdGg7XG4gICAgICAgICAgICBwZXJwM3kgKj0gd2lkdGg7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJwM3gsIHAyeSArcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGV4Q291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmVydHMucHVzaChweCAsIHB5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIChweC1wMngpLCBwMnkgLSAocHkgLSBwMnkpKTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcDF4ID0gcG9pbnRzWyhsZW5ndGgtMikqMl07XG4gICAgcDF5ID0gcG9pbnRzWyhsZW5ndGgtMikqMiArIDFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWyhsZW5ndGgtMSkqMl07XG4gICAgcDJ5ID0gcG9pbnRzWyhsZW5ndGgtMSkqMiArIDFdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KyspO1xuICAgIH1cblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0LTEpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZExpbmU7IiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5XZWJHTEdyYXBoaWNzRGF0YX0gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChwb2ludHMsIG51bGwsIDIpO1xuXG4gICAgaWYgKCF0cmlhbmdsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoIC8gNjtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gK3ZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZXJ0UG9zKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2ZXJ0cy5wdXNoKHBvaW50c1tpICogMl0sIHBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFBvbHk7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gLS0tIC8vXG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgLy9cbiAgICB2YXIgcmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSByZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSByZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICAvLyBzdGFydFxuICAgICAgICB2ZXJ0cy5wdXNoKHgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCAsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIC8vIGluc2VydCAyIGRlYWQgdHJpYW5nbGVzLi5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRQb3MsIHZlcnRQb3MsIHZlcnRQb3MrMSwgdmVydFBvcysyLCB2ZXJ0UG9zKzMsIHZlcnRQb3MrMyk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFt4LCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHldO1xuXG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUmVjdGFuZ2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcbiAgICBcbi8qKlxuICogQnVpbGRzIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbmJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcnJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcnJlY3REYXRhLng7XG4gICAgdmFyIHkgPSBycmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSBycmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJyZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICB2YXIgcmFkaXVzID0gcnJlY3REYXRhLnJhZGl1cztcblxuICAgIHZhciByZWNQb2ludHMgPSBbXTtcbiAgICByZWNQb2ludHMucHVzaCh4LCB5ICsgcmFkaXVzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHgsIHkgKyBoZWlnaHQsIHggKyByYWRpdXMsIHkgKyBoZWlnaHQsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoLCB5ICsgcmFkaXVzLCB4ICsgd2lkdGgsIHksIHggKyB3aWR0aCAtIHJhZGl1cywgeSwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyByYWRpdXMsIHksIHgsIHksIHgsIHkgKyByYWRpdXMgKyAwLjAwMDAwMDAwMDEsIHJlY1BvaW50cyk7XG5cbiAgICAvLyB0aGlzIHRpbnkgbnVtYmVyIGRlYWxzIHdpdGggdGhlIGlzc3VlIHRoYXQgb2NjdXJzIHdoZW4gcG9pbnRzIG92ZXJsYXAgYW5kIGVhcmN1dCBmYWlscyB0byB0cmlhbmd1bGF0ZSB0aGUgaXRlbS5cbiAgICAvLyBUT0RPIC0gZml4IHRoaXMgcHJvcGVybHksIHRoaXMgaXMgbm90IHZlcnkgZWxlZ2FudC4uIGJ1dCBpdCB3b3JrcyBmb3Igbm93LlxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocmVjUG9pbnRzLCBudWxsLCAyKTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlY1BvaW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaChyZWNQb2ludHNbaV0sIHJlY1BvaW50c1srK2ldLCByLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gcmVjUG9pbnRzO1xuXG4gICAgICAgIHRoaXMuYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUuIChoZWxwZXIgZnVuY3Rpb24uLilcbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZyb21YIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gZnJvbVkge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEBwYXJhbSBbb3V0XSB7bnVtYmVyW119IFRoZSBvdXRwdXQgYXJyYXkgdG8gYWRkIHBvaW50cyBpbnRvLiBJZiBub3QgcGFzc2VkLCBhIG5ldyBhcnJheSBpcyBjcmVhdGVkLlxuICogQHJldHVybiB7bnVtYmVyW119IGFuIGFycmF5IG9mIHBvaW50c1xuICovXG5xdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IGZ1bmN0aW9uIChmcm9tWCwgZnJvbVksIGNwWCwgY3BZLCB0b1gsIHRvWSwgb3V0KVxue1xuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIHhiLFxuICAgICAgICB5YixcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSBvdXQgfHwgW107XG5cbiAgICBmdW5jdGlvbiBnZXRQdChuMSAsIG4yLCBwZXJjKSB7XG4gICAgICAgIHZhciBkaWZmID0gbjIgLSBuMTtcblxuICAgICAgICByZXR1cm4gbjEgKyAoIGRpZmYgKiBwZXJjICk7XG4gICAgfVxuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKyApIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIC8vIFRoZSBHcmVlbiBMaW5lXG4gICAgICAgIHhhID0gZ2V0UHQoIGZyb21YICwgY3BYICwgaiApO1xuICAgICAgICB5YSA9IGdldFB0KCBmcm9tWSAsIGNwWSAsIGogKTtcbiAgICAgICAgeGIgPSBnZXRQdCggY3BYICwgdG9YICwgaiApO1xuICAgICAgICB5YiA9IGdldFB0KCBjcFkgLCB0b1kgLCBqICk7XG5cbiAgICAgICAgLy8gVGhlIEJsYWNrIERvdFxuICAgICAgICB4ID0gZ2V0UHQoIHhhICwgeGIgLCBqICk7XG4gICAgICAgIHkgPSBnZXRQdCggeWEgLCB5YiAsIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUm91bmRlZFJlY3RhbmdsZTsiLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBjb3JlIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSVxuICovXG4vLyBleHBvcnQgY29yZSBhbmQgY29uc3QuIFdlIGFzc2lnbiBjb3JlIHRvIGNvbnN0IHNvIHRoYXQgdGhlIG5vbi1yZWZlcmVuY2UgdHlwZXMgaW4gY29uc3QgcmVtYWluIGluLXRhY3RcbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduKHJlcXVpcmUoJy4vY29uc3QnKSwgcmVxdWlyZSgnLi9tYXRoJyksIHtcbiAgICAvLyB1dGlsc1xuICAgIHV0aWxzOiByZXF1aXJlKCcuL3V0aWxzJyksXG4gICAgdGlja2VyOiByZXF1aXJlKCcuL3RpY2tlcicpLFxuXG4gICAgLy8gZGlzcGxheVxuICAgIERpc3BsYXlPYmplY3Q6ICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9EaXNwbGF5T2JqZWN0JyksXG4gICAgQ29udGFpbmVyOiAgICAgICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuXG4gICAgLy8gc3ByaXRlc1xuICAgIFNwcml0ZTogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBQYXJ0aWNsZUNvbnRhaW5lcjogICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lcicpLFxuICAgIFNwcml0ZVJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHRcbiAgICBUZXh0OiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHQvVGV4dCcpLFxuXG4gICAgLy8gcHJpbWl0aXZlc1xuICAgIEdyYXBoaWNzOiAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGE6ICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRGF0YScpLFxuICAgIEdyYXBoaWNzUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dHVyZXNcbiAgICBUZXh0dXJlOiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBCYXNlVGV4dHVyZTogICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL0Jhc2VUZXh0dXJlJyksXG4gICAgUmVuZGVyVGV4dHVyZTogICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgQmFzZVJlbmRlclRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmU6ICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnM6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVGV4dHVyZVV2cycpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gY2FudmFzXG4gICAgQ2FudmFzUmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyJyksXG4gICAgQ2FudmFzR3JhcGhpY3M6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzJyksXG4gICAgQ2FudmFzQnVmZmVyOiAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gd2ViZ2xcbiAgICBXZWJHTFJlbmRlcmVyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgU2hhZGVyOiAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXInKSxcbiAgICBPYmplY3RSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFJlbmRlclRhcmdldDogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuXG4gICAgLy8gZmlsdGVycyAtIHdlYmdsXG4gICAgQWJzdHJhY3RGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlcicpLFxuICAgIEZYQUFGaWx0ZXI6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFNwcml0ZU1hc2tGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlcicpLFxuXG4gICAgZ2xDb3JlOiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3Qgd2hpY2ggcmVuZGVyZXIgeW91IHNob3VsZCBiZSB1c2luZy5cbiAgICAgKiBXZWJHTCBpcyB0aGUgcHJlZmVycmVkIHJlbmRlcmVyIGFzIGl0IGlzIGEgbG90IGZhc3Rlci4gSWYgd2ViR0wgaXMgbm90IHN1cHBvcnRlZCBieVxuICAgICAqIHRoZSBicm93c2VyIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhIGNhbnZhcyByZW5kZXJlclxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAcGFyYW0gd2lkdGg9ODAwIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gaGVpZ2h0PTYwMCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSByZW5kZXJlcnMgdmlld1xuICAgICAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gICAgICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZV0ge2Jvb2xlYW59IGVuYWJsZXMgZHJhd2luZyBidWZmZXIgcHJlc2VydmF0aW9uLCBlbmFibGUgdGhpcyBpZiB5b3VcbiAgICAgKiAgICAgIG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIsIHJldGluYSB3b3VsZCBiZSAyXG4gICAgICogQHBhcmFtIFtub1dlYkdMPWZhbHNlXSB7Ym9vbGVhbn0gcHJldmVudHMgc2VsZWN0aW9uIG9mIFdlYkdMIHJlbmRlcmVyLCBldmVuIGlmIHN1Y2ggaXMgcHJlc2VudFxuICAgICAqXG4gICAgICogQHJldHVybiB7V2ViR0xSZW5kZXJlcnxDYW52YXNSZW5kZXJlcn0gUmV0dXJucyBXZWJHTCByZW5kZXJlciBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBDYW52YXNSZW5kZXJlclxuICAgICAqL1xuICAgIGF1dG9EZXRlY3RSZW5kZXJlcjogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMsIG5vV2ViR0wpXG4gICAge1xuICAgICAgICB3aWR0aCA9IHdpZHRoIHx8IDgwMDtcbiAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0IHx8IDYwMDtcblxuICAgICAgICBpZiAoIW5vV2ViR0wgJiYgY29yZS51dGlscy5pc1dlYkdMU3VwcG9ydGVkKCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgY29yZS5XZWJHTFJlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBjb3JlLkNhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgIH1cbn0pO1xuIiwiLy8gQHRvZG8gLSBpZ25vcmUgdGhlIHRvbyBtYW55IHBhcmFtZXRlcnMgd2FybmluZyBmb3Igbm93XG4vLyBzaG91bGQgZWl0aGVyIGZpeCBpdCBvciBjaGFuZ2UgdGhlIGpzaGludCBjb25maWdcbi8vIGpzaGludCAtVzA3MlxuXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuL1BvaW50Jyk7XG5cbi8qKlxuICogVGhlIHBpeGkgTWF0cml4IGNsYXNzIGFzIGFuIG9iamVjdCwgd2hpY2ggbWFrZXMgaXQgYSBsb3QgZmFzdGVyLFxuICogaGVyZSBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIGl0IDpcbiAqIHwgYSB8IGIgfCB0eHxcbiAqIHwgYyB8IGQgfCB0eXxcbiAqIHwgMCB8IDAgfCAxIHxcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIE1hdHJpeCgpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmIgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmMgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnR4ID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eSA9IDA7XG59XG5cbk1hdHJpeC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNYXRyaXg7XG5tb2R1bGUuZXhwb3J0cyA9IE1hdHJpeDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgTWF0cml4IG9iamVjdCBiYXNlZCBvbiB0aGUgZ2l2ZW4gYXJyYXkuIFRoZSBFbGVtZW50IHRvIE1hdHJpeCBtYXBwaW5nIG9yZGVyIGlzIGFzIGZvbGxvd3M6XG4gKlxuICogYSA9IGFycmF5WzBdXG4gKiBiID0gYXJyYXlbMV1cbiAqIGMgPSBhcnJheVszXVxuICogZCA9IGFycmF5WzRdXG4gKiB0eCA9IGFycmF5WzJdXG4gKiB0eSA9IGFycmF5WzVdXG4gKlxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX0gVGhlIGFycmF5IHRoYXQgdGhlIG1hdHJpeCB3aWxsIGJlIHBvcHVsYXRlZCBmcm9tLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJheSlcbntcbiAgICB0aGlzLmEgPSBhcnJheVswXTtcbiAgICB0aGlzLmIgPSBhcnJheVsxXTtcbiAgICB0aGlzLmMgPSBhcnJheVszXTtcbiAgICB0aGlzLmQgPSBhcnJheVs0XTtcbiAgICB0aGlzLnR4ID0gYXJyYXlbMl07XG4gICAgdGhpcy50eSA9IGFycmF5WzVdO1xufTtcblxuXG4vKipcbiAqIHNldHMgdGhlIG1hdHJpeCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gKiBAcGFyYW0ge251bWJlcn0gY1xuICogQHBhcmFtIHtudW1iZXJ9IGRcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eFxuICogQHBhcmFtIHtudW1iZXJ9IHR5XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHR4LCB0eSlcbntcbiAgICB0aGlzLmEgPSBhO1xuICAgIHRoaXMuYiA9IGI7XG4gICAgdGhpcy5jID0gYztcbiAgICB0aGlzLmQgPSBkO1xuICAgIHRoaXMudHggPSB0eDtcbiAgICB0aGlzLnR5ID0gdHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGZyb20gdGhlIGN1cnJlbnQgTWF0cml4IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3NlIHtib29sZWFufSBXaGV0aGVyIHdlIG5lZWQgdG8gdHJhbnNwb3NlIHRoZSBtYXRyaXggb3Igbm90XG4gKiBAcGFyYW0gW291dF0ge0FycmF5fSBJZiBwcm92aWRlZCB0aGUgYXJyYXkgd2lsbCBiZSBhc3NpZ25lZCB0byBvdXRcbiAqIEByZXR1cm4ge251bWJlcltdfSB0aGUgbmV3bHkgY3JlYXRlZCBhcnJheSB3aGljaCBjb250YWlucyB0aGUgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICh0cmFuc3Bvc2UsIG91dClcbntcbiAgICBpZiAoIXRoaXMuYXJyYXkpXG4gICAge1xuICAgICAgICB0aGlzLmFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg5KTtcbiAgICB9XG5cbiAgICB2YXIgYXJyYXkgPSBvdXQgfHwgdGhpcy5hcnJheTtcblxuICAgIGlmICh0cmFuc3Bvc2UpXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzJdID0gMDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IDA7XG4gICAgICAgIGFycmF5WzZdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbN10gPSB0aGlzLnR5O1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGFycmF5WzBdID0gdGhpcy5hO1xuICAgICAgICBhcnJheVsxXSA9IHRoaXMuYztcbiAgICAgICAgYXJyYXlbMl0gPSB0aGlzLnR4O1xuICAgICAgICBhcnJheVszXSA9IHRoaXMuYjtcbiAgICAgICAgYXJyYXlbNF0gPSB0aGlzLmQ7XG4gICAgICAgIGFycmF5WzVdID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbNl0gPSAwO1xuICAgICAgICBhcnJheVs3XSA9IDA7XG4gICAgICAgIGFycmF5WzhdID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59O1xuXG4vKipcbiAqIEdldCBhIG5ldyBwb3NpdGlvbiB3aXRoIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXG4gKiBDYW4gYmUgdXNlZCB0byBnbyBmcm9tIGEgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlIHRvIHRoZSB3b3JsZCBjb29yZGluYXRlIHNwYWNlLiAoZS5nLiByZW5kZXJpbmcpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCB0cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIHggPSBwb3MueDtcbiAgICB2YXIgeSA9IHBvcy55O1xuXG4gICAgbmV3UG9zLnggPSB0aGlzLmEgKiB4ICsgdGhpcy5jICogeSArIHRoaXMudHg7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmIgKiB4ICsgdGhpcy5kICogeSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gbmV3UG9zO1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgaW52ZXJzZSBvZiB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZSB0byBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gaW5wdXQpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCBpbnZlcnNlLXRyYW5zZm9ybWVkIHRocm91Z2ggdGhpcyBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBseUludmVyc2UgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIGlkID0gMSAvICh0aGlzLmEgKiB0aGlzLmQgKyB0aGlzLmMgKiAtdGhpcy5iKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5kICogaWQgKiB4ICsgLXRoaXMuYyAqIGlkICogeSArICh0aGlzLnR5ICogdGhpcy5jIC0gdGhpcy50eCAqIHRoaXMuZCkgKiBpZDtcbiAgICBuZXdQb3MueSA9IHRoaXMuYSAqIGlkICogeSArIC10aGlzLmIgKiBpZCAqIHggKyAoLXRoaXMudHkgKiB0aGlzLmEgKyB0aGlzLnR4ICogdGhpcy5iKSAqIGlkO1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogVHJhbnNsYXRlcyB0aGUgbWF0cml4IG9uIHRoZSB4IGFuZCB5LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudHJhbnNsYXRlID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy50eCArPSB4O1xuICAgIHRoaXMudHkgKz0geTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgc2NhbGUgdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geCBUaGUgYW1vdW50IHRvIHNjYWxlIGhvcml6b250YWxseVxuICogQHBhcmFtIHtudW1iZXJ9IHkgVGhlIGFtb3VudCB0byBzY2FsZSB2ZXJ0aWNhbGx5XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zY2FsZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuYSAqPSB4O1xuICAgIHRoaXMuZCAqPSB5O1xuICAgIHRoaXMuYyAqPSB4O1xuICAgIHRoaXMuYiAqPSB5O1xuICAgIHRoaXMudHggKj0geDtcbiAgICB0aGlzLnR5ICo9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBBcHBsaWVzIGEgcm90YXRpb24gdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgaW4gcmFkaWFucy5cbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZSA9IGZ1bmN0aW9uIChhbmdsZSlcbntcbiAgICB2YXIgY29zID0gTWF0aC5jb3MoIGFuZ2xlICk7XG4gICAgdmFyIHNpbiA9IE1hdGguc2luKCBhbmdsZSApO1xuXG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIHRoaXMuYSA9IGExICogY29zLXRoaXMuYiAqIHNpbjtcbiAgICB0aGlzLmIgPSBhMSAqIHNpbit0aGlzLmIgKiBjb3M7XG4gICAgdGhpcy5jID0gYzEgKiBjb3MtdGhpcy5kICogc2luO1xuICAgIHRoaXMuZCA9IGMxICogc2luK3RoaXMuZCAqIGNvcztcbiAgICB0aGlzLnR4ID0gdHgxICogY29zIC0gdGhpcy50eSAqIHNpbjtcbiAgICB0aGlzLnR5ID0gdHgxICogc2luICsgdGhpcy50eSAqIGNvcztcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcblxuICAgIHRoaXMuYSAgPSBtYXRyaXguYSAqIGExICsgbWF0cml4LmIgKiBjMTtcbiAgICB0aGlzLmIgID0gbWF0cml4LmEgKiBiMSArIG1hdHJpeC5iICogZDE7XG4gICAgdGhpcy5jICA9IG1hdHJpeC5jICogYTEgKyBtYXRyaXguZCAqIGMxO1xuICAgIHRoaXMuZCAgPSBtYXRyaXguYyAqIGIxICsgbWF0cml4LmQgKiBkMTtcblxuICAgIHRoaXMudHggPSBtYXRyaXgudHggKiBhMSArIG1hdHJpeC50eSAqIGMxICsgdGhpcy50eDtcbiAgICB0aGlzLnR5ID0gbWF0cml4LnR4ICogYjEgKyBtYXRyaXgudHkgKiBkMSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbWF0cml4IGJhc2VkIG9uIGFsbCB0aGUgYXZhaWxhYmxlIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFhcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFlcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVlcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3RhdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdYXG4gKiBAcGFyYW0ge251bWJlcn0gc2tld1lcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoeCwgeSwgcGl2b3RYLCBwaXZvdFksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZKVxue1xuICAgIHZhciBhLCBiLCBjLCBkLCBzciwgY3IsIGN5LCBzeSwgbnN4LCBjeDtcblxuICAgIHNyICA9IE1hdGguc2luKHJvdGF0aW9uKTtcbiAgICBjciAgPSBNYXRoLmNvcyhyb3RhdGlvbik7XG4gICAgY3kgID0gTWF0aC5jb3Moc2tld1kpO1xuICAgIHN5ICA9IE1hdGguc2luKHNrZXdZKTtcbiAgICBuc3ggPSAtTWF0aC5zaW4oc2tld1gpO1xuICAgIGN4ICA9ICBNYXRoLmNvcyhza2V3WCk7XG5cbiAgICBhICA9ICBjciAqIHNjYWxlWDtcbiAgICBiICA9ICBzciAqIHNjYWxlWDtcbiAgICBjICA9IC1zciAqIHNjYWxlWTtcbiAgICBkICA9ICBjciAqIHNjYWxlWTtcblxuICAgIHRoaXMuYSAgPSBjeSAqIGEgKyBzeSAqIGM7XG4gICAgdGhpcy5iICA9IGN5ICogYiArIHN5ICogZDtcbiAgICB0aGlzLmMgID0gbnN4ICogYSArIGN4ICogYztcbiAgICB0aGlzLmQgID0gbnN4ICogYiArIGN4ICogZDtcblxuICAgIHRoaXMudHggPSB4ICsgKCBwaXZvdFggKiBhICsgcGl2b3RZICogYyApO1xuICAgIHRoaXMudHkgPSB5ICsgKCBwaXZvdFggKiBiICsgcGl2b3RZICogZCApO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFByZXBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24obWF0cml4KVxue1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuXG4gICAgaWYgKG1hdHJpeC5hICE9PSAxIHx8IG1hdHJpeC5iICE9PSAwIHx8IG1hdHJpeC5jICE9PSAwIHx8IG1hdHJpeC5kICE9PSAxKVxuICAgIHtcbiAgICAgICAgdmFyIGExID0gdGhpcy5hO1xuICAgICAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgICAgIHRoaXMuYSAgPSBhMSptYXRyaXguYSt0aGlzLmIqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuYiAgPSBhMSptYXRyaXguYit0aGlzLmIqbWF0cml4LmQ7XG4gICAgICAgIHRoaXMuYyAgPSBjMSptYXRyaXguYSt0aGlzLmQqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuZCAgPSBjMSptYXRyaXguYit0aGlzLmQqbWF0cml4LmQ7XG4gICAgfVxuXG4gICAgdGhpcy50eCA9IHR4MSptYXRyaXguYSt0aGlzLnR5Km1hdHJpeC5jK21hdHJpeC50eDtcbiAgICB0aGlzLnR5ID0gdHgxKm1hdHJpeC5iK3RoaXMudHkqbWF0cml4LmQrbWF0cml4LnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEludmVydHMgdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5pbnZlcnQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBiMSA9IHRoaXMuYjtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIGQxID0gdGhpcy5kO1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuICAgIHZhciBuID0gYTEqZDEtYjEqYzE7XG5cbiAgICB0aGlzLmEgPSBkMS9uO1xuICAgIHRoaXMuYiA9IC1iMS9uO1xuICAgIHRoaXMuYyA9IC1jMS9uO1xuICAgIHRoaXMuZCA9IGExL247XG4gICAgdGhpcy50eCA9IChjMSp0aGlzLnR5LWQxKnR4MSkvbjtcbiAgICB0aGlzLnR5ID0gLShhMSp0aGlzLnR5LWIxKnR4MSkvbjtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIFJlc2V0cyB0aGlzIE1hdGl4IHRvIGFuIGlkZW50aXR5IChkZWZhdWx0KSBtYXRyaXguXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaWRlbnRpdHkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYSA9IDE7XG4gICAgdGhpcy5iID0gMDtcbiAgICB0aGlzLmMgPSAwO1xuICAgIHRoaXMuZCA9IDE7XG4gICAgdGhpcy50eCA9IDA7XG4gICAgdGhpcy50eSA9IDA7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBNYXRyaXggb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBBIGNvcHkgb2YgdGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1hdHJpeCA9IG5ldyBNYXRyaXgoKTtcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSB2YWx1ZXMgb2YgdGhlIGdpdmVuIG1hdHJpeCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgb25lcyBpbiB0aGlzIG1hdHJpeFxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGUgbWF0cml4IGdpdmVuIGluIHBhcmFtZXRlciB3aXRoIGl0cyB2YWx1ZXMgdXBkYXRlZC5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBBIGRlZmF1bHQgKGlkZW50aXR5KSBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LklERU5USVRZID0gbmV3IE1hdHJpeCgpO1xuXG4vKipcbiAqIEEgdGVtcCBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LlRFTVBfTUFUUklYID0gbmV3IE1hdHJpeCgpO1xuIiwiLyoqXG4gKiBUaGUgUG9pbnQgb2JqZWN0IHJlcHJlc2VudHMgYSBsb2NhdGlvbiBpbiBhIHR3by1kaW1lbnNpb25hbCBjb29yZGluYXRlIHN5c3RlbSwgd2hlcmUgeCByZXByZXNlbnRzXG4gKiB0aGUgaG9yaXpvbnRhbCBheGlzIGFuZCB5IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIGF4aXMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXNcbiAqL1xuZnVuY3Rpb24gUG9pbnQoeCwgeSlcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xufVxuXG5Qb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2ludDtcbm1vZHVsZS5leHBvcnRzID0gUG9pbnQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9pbnRcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBhIGNvcHkgb2YgdGhlIHBvaW50XG4gKi9cblBvaW50LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLngsIHRoaXMueSk7XG59O1xuXG4vKipcbiAqIENvcGllcyB4IGFuZCB5IGZyb20gdGhlIGdpdmVuIHBvaW50XG4gKlxuICogQHBhcmFtIHAge1BJWEkuUG9pbnR9XG4gKi9cblBvaW50LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKHApIHtcbiAgICB0aGlzLnNldChwLngsIHAueSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcG9pbnQgaXMgZXF1YWwgdG8gdGhpcyBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cblBvaW50LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiAocC54ID09PSB0aGlzLngpICYmIChwLnkgPT09IHRoaXMueSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIHBvaW50IHRvIGEgbmV3IHggYW5kIHkgcG9zaXRpb24uXG4gKiBJZiB5IGlzIG9taXR0ZWQsIGJvdGggeCBhbmQgeSB3aWxsIGJlIHNldCB0byB4LlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cblBvaW50LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLnggPSB4IHx8IDA7XG4gICAgdGhpcy55ID0geSB8fCAoICh5ICE9PSAwKSA/IHRoaXMueCA6IDAgKSA7XG59O1xuIiwiLyoqXG4gKiBNYXRoIGNsYXNzZXMgYW5kIHV0aWxpdGllcyBtaXhlZCBpbnRvIFBJWEkgbmFtZXNwYWNlLlxuICpcbiAqIEBsZW5kcyBQSVhJXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8vIFRoZXNlIHdpbGwgYmUgbWl4ZWQgdG8gYmUgbWFkZSBwdWJsaWNseSBhdmFpbGFibGUsXG4gICAgLy8gd2hpbGUgdGhpcyBtb2R1bGUgaXMgdXNlZCBpbnRlcm5hbGx5IGluIGNvcmVcbiAgICAvLyB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYW5kIGN1dCBkb3duIG9uXG4gICAgLy8gaW50ZXJuYWwgbW9kdWxlIHJlcXVpcmVzLlxuXG4gICAgUG9pbnQ6ICAgICAgcmVxdWlyZSgnLi9Qb2ludCcpLFxuICAgIE1hdHJpeDogICAgIHJlcXVpcmUoJy4vTWF0cml4JyksXG5cbiAgICBDaXJjbGU6ICAgICByZXF1aXJlKCcuL3NoYXBlcy9DaXJjbGUnKSxcbiAgICBFbGxpcHNlOiAgICByZXF1aXJlKCcuL3NoYXBlcy9FbGxpcHNlJyksXG4gICAgUG9seWdvbjogICAgcmVxdWlyZSgnLi9zaGFwZXMvUG9seWdvbicpLFxuICAgIFJlY3RhbmdsZTogIHJlcXVpcmUoJy4vc2hhcGVzL1JlY3RhbmdsZScpLFxuICAgIFJvdW5kZWRSZWN0YW5nbGU6IHJlcXVpcmUoJy4vc2hhcGVzL1JvdW5kZWRSZWN0YW5nbGUnKVxufTtcbiIsInZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2lyY2xlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKi9cbmZ1bmN0aW9uIENpcmNsZSh4LCB5LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuQ0lSQztcbn1cblxuQ2lyY2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENpcmNsZTtcbm1vZHVsZS5leHBvcnRzID0gQ2lyY2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIENpcmNsZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuQ2lyY2xlfSBhIGNvcHkgb2YgdGhlIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IENpcmNsZSh0aGlzLngsIHRoaXMueSwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGNpcmNsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgQ2lyY2xlXG4gKi9cbkNpcmNsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy5yYWRpdXMgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgZHggPSAodGhpcy54IC0geCksXG4gICAgICAgIGR5ID0gKHRoaXMueSAtIHkpLFxuICAgICAgICByMiA9IHRoaXMucmFkaXVzICogdGhpcy5yYWRpdXM7XG5cbiAgICBkeCAqPSBkeDtcbiAgICBkeSAqPSBkeTtcblxuICAgIHJldHVybiAoZHggKyBkeSA8PSByMik7XG59O1xuXG4vKipcbiogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIGNpcmNsZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuKi9cbkNpcmNsZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLnJhZGl1cywgdGhpcy55IC0gdGhpcy5yYWRpdXMsIHRoaXMucmFkaXVzICogMiwgdGhpcy5yYWRpdXMgKiAyKTtcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIEVsbGlwc2Ugb2JqZWN0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBoaXQgYXJlYSBmb3IgZGlzcGxheU9iamVjdHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBoYWxmIHdpZHRoIG9mIHRoaXMgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhpcyBlbGxpcHNlXG4gKi9cbmZ1bmN0aW9uIEVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuRUxJUDtcbn1cblxuRWxsaXBzZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFbGxpcHNlO1xubW9kdWxlLmV4cG9ydHMgPSBFbGxpcHNlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIEVsbGlwc2UgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkVsbGlwc2V9IGEgY29weSBvZiB0aGUgZWxsaXBzZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBFbGxpcHNlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgZWxsaXBzZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZHMgYXJlIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy9ub3JtYWxpemUgdGhlIGNvb3JkcyB0byBhbiBlbGxpcHNlIHdpdGggY2VudGVyIDAsMFxuICAgIHZhciBub3JteCA9ICgoeCAtIHRoaXMueCkgLyB0aGlzLndpZHRoKSxcbiAgICAgICAgbm9ybXkgPSAoKHkgLSB0aGlzLnkpIC8gdGhpcy5oZWlnaHQpO1xuXG4gICAgbm9ybXggKj0gbm9ybXg7XG4gICAgbm9ybXkgKj0gbm9ybXk7XG5cbiAgICByZXR1cm4gKG5vcm14ICsgbm9ybXkgPD0gMSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBlbGxpcHNlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLndpZHRoLCB0aGlzLnkgLSB0aGlzLmhlaWdodCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcbiIsInZhciBQb2ludCA9IHJlcXVpcmUoJy4uL1BvaW50JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBwb2ludHMge1BJWEkuUG9pbnRbXXxudW1iZXJbXXwuLi5QSVhJLlBvaW50fC4uLm51bWJlcn0gVGhpcyBjYW4gYmUgYW4gYXJyYXkgb2YgUG9pbnRzIHRoYXQgZm9ybSB0aGUgcG9seWdvbixcbiAqICAgICAgYSBmbGF0IGFycmF5IG9mIG51bWJlcnMgdGhhdCB3aWxsIGJlIGludGVycHJldGVkIGFzIFt4LHksIHgseSwgLi4uXSwgb3IgdGhlIGFyZ3VtZW50cyBwYXNzZWQgY2FuIGJlXG4gKiAgICAgIGFsbCB0aGUgcG9pbnRzIG9mIHRoZSBwb2x5Z29uIGUuZy4gYG5ldyBQSVhJLlBvbHlnb24obmV3IFBJWEkuUG9pbnQoKSwgbmV3IFBJWEkuUG9pbnQoKSwgLi4uKWAsIG9yIHRoZVxuICogICAgICBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZSBmbGF0IHgseSB2YWx1ZXMgZS5nLiBgbmV3IFBvbHlnb24oeCx5LCB4LHksIHgseSwgLi4uKWAgd2hlcmUgYHhgIGFuZCBgeWAgYXJlXG4gKiAgICAgIE51bWJlcnMuXG4gKi9cbmZ1bmN0aW9uIFBvbHlnb24ocG9pbnRzXylcbntcbiAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBhc3NpZ25tZW50IGRlb3B0XG4gICAgLy8gc2VlIHNlY3Rpb24gMy4xOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICB2YXIgcG9pbnRzID0gcG9pbnRzXztcblxuICAgIC8vaWYgcG9pbnRzIGlzbid0IGFuIGFycmF5LCB1c2UgYXJndW1lbnRzIGFzIHRoZSBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBwb2ludHMubGVuZ3RoOyArK2EpIHtcbiAgICAgICAgICAgIHBvaW50c1thXSA9IGFyZ3VtZW50c1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHRoaXMgaXMgYW4gYXJyYXkgb2YgcG9pbnRzLCBjb252ZXJ0IGl0IHRvIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzXG4gICAgaWYgKHBvaW50c1swXSBpbnN0YW5jZW9mIFBvaW50KVxuICAgIHtcbiAgICAgICAgdmFyIHAgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHAucHVzaChwb2ludHNbaV0ueCwgcG9pbnRzW2ldLnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9pbnRzID0gcDtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB0aGUgcG9pbnRzIG9mIHRoaXMgcG9seWdvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlBPTFk7XG59XG5cblBvbHlnb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9seWdvbjtcbm1vZHVsZS5leHBvcnRzID0gUG9seWdvbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBwb2x5Z29uXG4gKlxuICogQHJldHVybiB7UElYSS5Qb2x5Z29ufSBhIGNvcHkgb2YgdGhlIHBvbHlnb25cbiAqL1xuUG9seWdvbi5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9seWdvbih0aGlzLnBvaW50cy5zbGljZSgpKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIGluc2lkZSA9IGZhbHNlO1xuXG4gICAgLy8gdXNlIHNvbWUgcmF5Y2FzdGluZyB0byB0ZXN0IGhpdHNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svcG9pbnQtaW4tcG9seWdvbi9ibG9iL21hc3Rlci9pbmRleC5qc1xuICAgIHZhciBsZW5ndGggPSB0aGlzLnBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBsZW5ndGggLSAxOyBpIDwgbGVuZ3RoOyBqID0gaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHhpID0gdGhpcy5wb2ludHNbaSAqIDJdLCB5aSA9IHRoaXMucG9pbnRzW2kgKiAyICsgMV0sXG4gICAgICAgICAgICB4aiA9IHRoaXMucG9pbnRzW2ogKiAyXSwgeWogPSB0aGlzLnBvaW50c1tqICogMiArIDFdLFxuICAgICAgICAgICAgaW50ZXJzZWN0ID0gKCh5aSA+IHkpICE9PSAoeWogPiB5KSkgJiYgKHggPCAoeGogLSB4aSkgKiAoeSAtIHlpKSAvICh5aiAtIHlpKSArIHhpKTtcblxuICAgICAgICBpZiAoaW50ZXJzZWN0KVxuICAgICAgICB7XG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc2lkZTtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIHRoZSBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgZGVmaW5lZCBieSBpdHMgcG9zaXRpb24sIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCB3aWR0aCBvZiB0aGlzIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByZWN0YW5nbGVcbiAqL1xuZnVuY3Rpb24gUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJFQ1Q7XG59XG5cblJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZWN0YW5nbGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlY3RhbmdsZTtcblxuLyoqXG4gKiBBIGNvbnN0YW50IGVtcHR5IHJlY3RhbmdsZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuUmVjdGFuZ2xlLkVNUFRZID0gbmV3IFJlY3RhbmdsZSgwLCAwLCAwLCAwKTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgUmVjdGFuZ2xlXG4gKi9cblJlY3RhbmdsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHggPj0gdGhpcy54ICYmIHggPCB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPCB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUm91bmRlZCBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgdGhhdCBoYXMgbmljZSByb3VuZGVkIGNvcm5lcnMsIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0IGFuZCBpdHMgcmFkaXVzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBDb250cm9scyB0aGUgcmFkaXVzIG9mIHRoZSByb3VuZGVkIGNvcm5lcnNcbiAqL1xuZnVuY3Rpb24gUm91bmRlZFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMjBcbiAgICAgKi9cbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCAyMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUlJFQztcbn1cblxuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3VuZGVkUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3VuZGVkUmVjdGFuZ2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHJldHVybiB7UElYSS5Sb3VuZGVkUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJvdW5kZWRSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnJhZGl1cyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDw9IHRoaXMueCArIHRoaXMud2lkdGgpXG4gICAge1xuICAgICAgICBpZiAoeSA+PSB0aGlzLnkgJiYgeSA8PSB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBQYXJ0aWNsZUNvbnRhaW5lciBjbGFzcyBpcyBhIHJlYWxseSBmYXN0IHZlcnNpb24gb2YgdGhlIENvbnRhaW5lciBidWlsdCBzb2xlbHkgZm9yIHNwZWVkLFxuICogc28gdXNlIHdoZW4geW91IG5lZWQgYSBsb3Qgb2Ygc3ByaXRlcyBvciBwYXJ0aWNsZXMuIFRoZSB0cmFkZW9mZiBvZiB0aGUgUGFydGljbGVDb250YWluZXIgaXMgdGhhdCBhZHZhbmNlZFxuICogZnVuY3Rpb25hbGl0eSB3aWxsIG5vdCB3b3JrLiBQYXJ0aWNsZUNvbnRhaW5lciBpbXBsZW1lbnRzIG9ubHkgdGhlIGJhc2ljIG9iamVjdCB0cmFuc2Zvcm0gKHBvc2l0aW9uLCBzY2FsZSwgcm90YXRpb24pLlxuICogQW55IG90aGVyIGZ1bmN0aW9uYWxpdHkgbGlrZSB0aW50aW5nLCBtYXNraW5nLCBldGMgd2lsbCBub3Qgd29yayBvbiBzcHJpdGVzIGluIHRoaXMgYmF0Y2guXG4gKlxuICogSXQncyBleHRyZW1lbHkgZWFzeSB0byB1c2UgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgY29udGFpbmVyID0gbmV3IFBhcnRpY2xlQ29udGFpbmVyKCk7XG4gKlxuICogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSlcbiAqIHtcbiAqICAgICB2YXIgc3ByaXRlID0gbmV3IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcIm15SW1hZ2UucG5nXCIpO1xuICogICAgIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogfVxuICogYGBgXG4gKlxuICogQW5kIGhlcmUgeW91IGhhdmUgYSBodW5kcmVkIHNwcml0ZXMgdGhhdCB3aWxsIGJlIHJlbmRlcmVyIGF0IHRoZSBzcGVlZCBvZiBsaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFttYXhTaXplPTE1MDAwXSB7bnVtYmVyfSBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFydGljbGVzIHRoYXQgY2FuIGJlIHJlbmRlcmVyIGJ5IHRoZSBjb250YWluZXIuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXNdIHtvYmplY3R9IFRoZSBwcm9wZXJ0aWVzIG9mIGNoaWxkcmVuIHRoYXQgc2hvdWxkIGJlIHVwbG9hZGVkIHRvIHRoZSBncHUgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuc2NhbGU9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHNjYWxlIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnBvc2l0aW9uPXRydWVdIHtib29sZWFufSBXaGVuIHRydWUsIHBvc2l0aW9uIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnJvdGF0aW9uPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCByb3RhdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy51dnM9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHV2cyBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5hbHBoYT1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgYWxwaGEgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW2JhdGNoU2l6ZT0xNTAwMF0ge251bWJlcn0gTnVtYmVyIG9mIHBhcnRpY2xlcyBwZXIgYmF0Y2guXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQ29udGFpbmVyKG1heFNpemUsIHByb3BlcnRpZXMsIGJhdGNoU2l6ZSlcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIGJhdGNoU2l6ZSA9IGJhdGNoU2l6ZSB8fCAxNTAwMDsgLy9DT05TVC5TUFJJVEVfQkFUQ0hfU0laRTsgLy8gMjAwMCBpcyBhIG5pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSAvIGRlc2t0b3BcbiAgICBtYXhTaXplID0gbWF4U2l6ZSB8fCAxNTAwMDtcblxuICAgIC8vIE1ha2luZyBzdXJlIHRoZSBiYXRjaCBzaXplIGlzIHZhbGlkXG4gICAgLy8gNjU1MzUgaXMgbWF4IHZlcnRleCBpbmRleCBpbiB0aGUgaW5kZXggYnVmZmVyIChzZWUgUGFydGljbGVSZW5kZXJlcilcbiAgICAvLyBzbyBtYXggbnVtYmVyIG9mIHBhcnRpY2xlcyBpcyA2NTUzNiAvIDQgPSAxNjM4NFxuICAgIHZhciBtYXhCYXRjaFNpemUgPSAxNjM4NDtcbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4QmF0Y2hTaXplKSB7XG4gICAgICAgIGJhdGNoU2l6ZSA9IG1heEJhdGNoU2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4U2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhTaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBwcm9wZXJ0aWVzIHRvIGJlIGR5bmFtaWMgKHRydWUpIC8gc3RhdGljIChmYWxzZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW5bXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4U2l6ZSA9IG1heFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYXRjaFNpemUgPSBiYXRjaFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVDaGlsZHJlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGNhbnZhcyByZW5kZXJlcmluZy4gSWYgdHJ1ZSB0aGVuIHRoZSBlbGVtZW50cyB3aWxsIGJlIHBvc2l0aW9uZWQgYXQgdGhlIG5lYXJlc3QgcGl4ZWwuIFRoaXMgcHJvdmlkZXMgYSBuaWNlIHNwZWVkIGJvb3N0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlO1xuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSB0cnVlO1xuXG4gICAgdGhpcy5zZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xufVxuXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQ29udGFpbmVyO1xuXG4vKipcbiAqIFNldHMgdGhlIHByaXZhdGUgcHJvcGVydGllcyBhcnJheSB0byBkeW5hbWljIC8gc3RhdGljIGJhc2VkIG9uIHRoZSBwYXNzZWQgcHJvcGVydGllcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcHJvcGVydGllcyB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyB0byBiZSB1cGxvYWRlZFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuc2V0UHJvcGVydGllcyA9IGZ1bmN0aW9uKHByb3BlcnRpZXMpXG57XG4gICAgaWYgKCBwcm9wZXJ0aWVzICkge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzBdID0gJ3NjYWxlJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnNjYWxlIDogdGhpcy5fcHJvcGVydGllc1swXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1sxXSA9ICdwb3NpdGlvbicgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5wb3NpdGlvbiA6IHRoaXMuX3Byb3BlcnRpZXNbMV07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMl0gPSAncm90YXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucm90YXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzJdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzNdID0gJ3V2cycgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy51dnMgOiB0aGlzLl9wcm9wZXJ0aWVzWzNdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzRdID0gJ2FscGhhJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLmFscGhhIDogdGhpcy5fcHJvcGVydGllc1s0XTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgLy8gVE9ETyBkb24ndCBuZWVkIHRvIVxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIC8vICBQSVhJLkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtLmNhbGwoIHRoaXMgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGFpbmVyIHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgd2ViZ2wgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlciggcmVuZGVyZXIucGx1Z2lucy5wYXJ0aWNsZSApO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUucmVuZGVyKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgZmxhZyB0aGF0IHN0YXRpYyBkYXRhIHNob3VsZCBiZSB1cGRhdGVkIHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUub25DaGlsZHJlbkNoYW5nZSA9IGZ1bmN0aW9uIChzbWFsbGVzdENoaWxkSW5kZXgpXG57XG4gICAgdmFyIGJ1ZmZlckluZGV4ID0gTWF0aC5mbG9vcihzbWFsbGVzdENoaWxkSW5kZXggLyB0aGlzLl9iYXRjaFNpemUpO1xuICAgIGlmIChidWZmZXJJbmRleCA8IHRoaXMuX2J1ZmZlclRvVXBkYXRlKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gYnVmZmVySW5kZXg7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIGNhbnZhcyByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGlzUm90YXRlZCA9IHRydWU7XG5cbiAgICB2YXIgcG9zaXRpb25YID0gMDtcbiAgICB2YXIgcG9zaXRpb25ZID0gMDtcblxuICAgIHZhciBmaW5hbFdpZHRoID0gMDtcbiAgICB2YXIgZmluYWxIZWlnaHQgPSAwO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICBpZiAoIWNoaWxkLnZpc2libGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZyYW1lID0gY2hpbGQudGV4dHVyZS5mcmFtZTtcblxuICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhICogY2hpbGQuYWxwaGE7XG5cbiAgICAgICAgaWYgKGNoaWxkLnJvdGF0aW9uICUgKE1hdGguUEkgKiAyKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgZmFzdGVzdCAgd2F5IHRvIG9wdGltaXNlISAtIGlmIHJvdGF0aW9uIGlzIDAgdGhlbiB3ZSBjYW4gYXZvaWQgYW55IGtpbmQgb2Ygc2V0VHJhbnNmb3JtIGNhbGxcbiAgICAgICAgICAgIGlmIChpc1JvdGF0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoICogY2hpbGQuc2NhbGUueCkgKyBjaGlsZC5wb3NpdGlvbi54ICArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0ICogY2hpbGQuc2NhbGUueSkgKyBjaGlsZC5wb3NpdGlvbi55ICArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLng7XG4gICAgICAgICAgICBmaW5hbEhlaWdodCA9IGZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnk7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzUm90YXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoaWxkLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICAgICAgdmFyIGNoaWxkVHJhbnNmb3JtID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHggfCAwLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eSB8IDBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvblggPSAoKGNoaWxkLmFuY2hvci54KSAqICgtZnJhbWUud2lkdGgpICsgMC41KTtcbiAgICAgICAgICAgIHBvc2l0aW9uWSA9ICgoY2hpbGQuYW5jaG9yLnkpICogKC1mcmFtZS5oZWlnaHQpICsgMC41KTtcblxuICAgICAgICAgICAgZmluYWxXaWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgIGNoaWxkLnRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgZnJhbWUueCxcbiAgICAgICAgICAgIGZyYW1lLnksXG4gICAgICAgICAgICBmcmFtZS53aWR0aCxcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCxcbiAgICAgICAgICAgIHBvc2l0aW9uWCxcbiAgICAgICAgICAgIHBvc2l0aW9uWSxcbiAgICAgICAgICAgIGZpbmFsV2lkdGgsXG4gICAgICAgICAgICBmaW5hbEhlaWdodFxuICAgICAgICApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUNoaWxkcmVuPWZhbHNlXSB7Ym9vbGVhbn0gaWYgc2V0IHRvIHRydWUsIGFsbCB0aGUgY2hpbGRyZW4gd2lsbCBoYXZlIHRoZWlyIGRlc3Ryb3kgbWV0aG9kIGNhbGxlZCBhcyB3ZWxsXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgaWYgKHRoaXMuX2J1ZmZlcnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLl9idWZmZXJzW2ldLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xufTtcbiIsIlxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZUJ1ZmZlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvUGFydGljbGVCdWZmZXIuamF2YVxuICovXG5cbi8qKlxuICogVGhlIHBhcnRpY2xlIGJ1ZmZlciBtYW5hZ2VzIHRoZSBzdGF0aWMgYW5kIGR5bmFtaWMgYnVmZmVycyBmb3IgYSBwYXJ0aWNsZSBjb250YWluZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gUGFydGljbGVCdWZmZXIoZ2wsIHByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBzaXplKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRTaXplID0gMjtcblxuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYSBzaW5nbGUgdmVydGV4IGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGUgYnVmZmVyIGNhbiBob2xkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gc2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBkeW5hbWljLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIHN0YXRpYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcblxuICAgICAgICBpZihkeW5hbWljUHJvcGVydHlGbGFnc1tpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5keW5hbWljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuZHluYW1pY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW5pdEJ1ZmZlcnMoKTtcblxufVxuXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZUJ1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVCdWZmZXI7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmluaXRCdWZmZXJzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpO1xuICAgIHZhciBwcm9wZXJ0eTtcblxuICAgIHZhciBkeW5hbWljT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG5cbiAgICAgICAgcHJvcGVydHkub2Zmc2V0ID0gZHluYW1pY09mZnNldDtcbiAgICAgICAgZHluYW1pY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLmR5bmFtaWNTdHJpZGUgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5keW5hbWljU3RyaWRlICogNCk7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcblxuXG4gICAgLy8gc3RhdGljIC8vXG4gICAgdmFyIHN0YXRpY09mZnNldCA9IDA7XG4gICAgdGhpcy5zdGF0aWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IHN0YXRpY09mZnNldDtcbiAgICAgICAgc3RhdGljT2Zmc2V0ICs9IHByb3BlcnR5LnNpemU7XG4gICAgICAgIHRoaXMuc3RhdGljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5zdGF0aWNTdHJpZGUgKiA0KTtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNEYXRhLCBnbC5EWU5BTUlDX0RSQVcpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBkeW5hbWljIHByb3BlcnRpZXMuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUudXBsb2FkRHluYW1pYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIHByb3BlcnR5LnVwbG9hZEZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIHRoaXMuZHluYW1pY0RhdGEsIHRoaXMuZHluYW1pY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy5keW5hbWljRGF0YSk7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHN0YXRpYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZFN0YXRpYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLnN0YXRpY0RhdGEsIHRoaXMuc3RhdGljU3RyaWRlLCBwcm9wZXJ0eS5vZmZzZXQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuc3RhdGljRGF0YSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIHRvIHRoZSBHUFVcbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpLCBwcm9wZXJ0eTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuc3RhdGljU3RyaWRlICogNCwgcHJvcGVydHkub2Zmc2V0ICogNCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVCdWZmZXIuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLnN0YXRpY0J1ZmZlcik7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgUGFydGljbGVTaGFkZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlU2hhZGVyJyksXG4gICAgUGFydGljbGVCdWZmZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlQnVmZmVyJyksXG4gICAgbWF0aCAgICAgICAgICAgID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFBhcnRpY2xlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICAvLyBhbmQgbWF4IG51bWJlciBvZiBlbGVtZW50IGluIHRoZSBpbmRleCBidWZmZXIgaXMgMTYzODQgKiA2ID0gOTgzMDRcbiAgICAvLyBDcmVhdGluZyBhIGZ1bGwgaW5kZXggYnVmZmVyLCBvdmVyaGVhZCBpcyA5ODMwNCAqIDIgPSAxOTZLb1xuICAgIHZhciBudW1JbmRpY2VzID0gOTgzMDQ7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KG51bUluZGljZXMpO1xuXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCBudW1JbmRpY2VzOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gbnVsbDtcblxuICAgIHRoaXMudGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xufVxuXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbigncGFydGljbGUnLCBQYXJ0aWNsZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBXaGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gbmV3IFBhcnRpY2xlU2hhZGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlcik7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggaW5kZXgsIHNvIDY1NTM1IC8gNiA9IDEwOTIyLlxuXG4gICAgLy91cGxvYWQgdGhlIGluZGV4IGRhdGFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IFtcbiAgICAgICAgLy8gdmVydGljZXNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbixcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkVmVydGljZXMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBwb3NpdGlvbkRhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFBvc2l0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcm90YXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFSb3RhdGlvbixcbiAgICAgICAgICAgIHNpemU6MSxcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkUm90YXRpb24sXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyB1dnNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFV2cyxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIGFscGhhRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZEFscGhhLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfVxuICAgIF07XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBwYXJ0aWNsZSBiYXRjaC5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gYmluZCB0aGUgbWFpbiB0ZXh0dXJlXG4gICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAvLyBiaW5kIHRoZSBidWZmZXJzXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnNoYWRlcjtcblxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBwYXJ0aWNsZSBjb250YWluZXIgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBjaGlsZHJlbiA9IGNvbnRhaW5lci5jaGlsZHJlbixcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aCxcbiAgICAgICAgbWF4U2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemU7XG5cbiAgICBpZih0b3RhbENoaWxkcmVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIGlmKHRvdGFsQ2hpbGRyZW4gPiBtYXhTaXplKVxuICAgIHtcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IG1heFNpemU7XG4gICAgfVxuXG4gICAgaWYoIWNvbnRhaW5lci5fYnVmZmVycylcbiAgICB7XG4gICAgICAgIGNvbnRhaW5lci5fYnVmZmVycyA9IHRoaXMuZ2VuZXJhdGVCdWZmZXJzKCBjb250YWluZXIgKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXZzIGhhdmUgbm90IHVwZGF0ZWQgdGhlbiBubyBwb2ludCByZW5kZXJpbmcganVzdCB5ZXQhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb250YWluZXIuYmxlbmRNb2RlKTtcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgbSA9ICBjb250YWluZXIud29ybGRUcmFuc2Zvcm0uY29weSggdGhpcy50ZW1wTWF0cml4ICk7XG4gICAgbS5wcmVwZW5kKCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeCApO1xuICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5zaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCBtLnRvQXJyYXkodHJ1ZSkpO1xuICAgIGdsLnVuaWZvcm0xZih0aGlzLnNoYWRlci51bmlmb3Jtcy51QWxwaGEuX2xvY2F0aW9uLCBjb250YWluZXIud29ybGRBbHBoYSk7XG5cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgdGV4dHVyZSBpcyBib3VuZC4uXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gY2hpbGRyZW5bMF0uX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSB0ZXh0dXJlIGhhcyBub3QgdXBkYXRlZCB0aGVuIGxldHMgbm90IHVwbG9hZCBhbnkgc3RhdGljIHByb3BlcnRpZXNcbiAgICAgICAgaWYoIXRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZShiYXNlVGV4dHVyZSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFjb250YWluZXIuX3Byb3BlcnRpZXNbMF0gfHwgIWNvbnRhaW5lci5fcHJvcGVydGllc1szXSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICB9XG5cbiAgICAvLyBub3cgbGV0cyB1cGxvYWQgYW5kIHJlbmRlciB0aGUgYnVmZmVycy4uXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgdG90YWxDaGlsZHJlbjsgaSArPSBiYXRjaFNpemUsIGogKz0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhbW91bnQgPSAoIHRvdGFsQ2hpbGRyZW4gLSBpKTtcbiAgICAgICAgaWYoYW1vdW50ID4gYmF0Y2hTaXplKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbW91bnQgPSBiYXRjaFNpemU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYnVmZmVyID0gY29udGFpbmVyLl9idWZmZXJzW2pdO1xuXG4gICAgICAgIC8vIHdlIGFsd2F5cyB1cGxvYWQgdGhlIGR5bmFtaWNcbiAgICAgICAgYnVmZmVyLnVwbG9hZER5bmFtaWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG5cbiAgICAgICAgLy8gd2Ugb25seSB1cGxvYWQgdGhlIHN0YXRpYyBjb250ZW50IHdoZW4gd2UgaGF2ZSB0byFcbiAgICAgICAgaWYoY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9PT0gailcbiAgICAgICAge1xuICAgICAgICAgICAgYnVmZmVyLnVwbG9hZFN0YXRpYyhjaGlsZHJlbiwgaSwgYW1vdW50KTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSBqICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJpbmQgdGhlIGJ1ZmZlclxuICAgICAgICBidWZmZXIuYmluZCggdGhpcy5zaGFkZXIgKTtcblxuICAgICAgICAgLy8gbm93IGRyYXcgdGhvc2Ugc3Vja2FzIVxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBhbW91bnQgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIG9uZSBwYXJ0aWNsZSBidWZmZXIgZm9yIGVhY2ggY2hpbGQgaW4gdGhlIGNvbnRhaW5lciB3ZSB3YW50IHRvIHJlbmRlciBhbmQgdXBkYXRlcyBpbnRlcm5hbCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7UElYSS5QYXJ0aWNsZUNvbnRhaW5lcn0gVGhlIGNvbnRhaW5lciB0byByZW5kZXIgdXNpbmcgdGhpcyBQYXJ0aWNsZVJlbmRlcmVyXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmdlbmVyYXRlQnVmZmVycyA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgYnVmZmVycyA9IFtdLFxuICAgICAgICBzaXplID0gY29udGFpbmVyLl9tYXhTaXplLFxuICAgICAgICBiYXRjaFNpemUgPSBjb250YWluZXIuX2JhdGNoU2l6ZSxcbiAgICAgICAgZHluYW1pY1Byb3BlcnR5RmxhZ3MgPSBjb250YWluZXIuX3Byb3BlcnRpZXMsXG4gICAgICAgIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBiYXRjaFNpemUpXG4gICAge1xuICAgICAgICBidWZmZXJzLnB1c2gobmV3IFBhcnRpY2xlQnVmZmVyKGdsLCB0aGlzLnByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBiYXRjaFNpemUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVycztcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgdmVydGljaWVzLlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciB2ZXJ0aWNlcyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkVmVydGljZXMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIHZhciBzcHJpdGUsXG4gICAgICAgIHRleHR1cmUsXG4gICAgICAgIHRyaW0sXG4gICAgICAgIHN4LFxuICAgICAgICBzeSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKSB7XG5cbiAgICAgICAgc3ByaXRlID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldO1xuICAgICAgICB0ZXh0dXJlID0gc3ByaXRlLl90ZXh0dXJlO1xuICAgICAgICBzeCA9IHNwcml0ZS5zY2FsZS54O1xuICAgICAgICBzeSA9IHNwcml0ZS5zY2FsZS55O1xuXG4gICAgICAgIGlmICh0ZXh0dXJlLnRyaW0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZCB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG5cbiAgICAgICAgICAgIHcxID0gdHJpbS54IC0gc3ByaXRlLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGgxID0gdHJpbS55IC0gc3ByaXRlLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICBoMCA9IGgxICsgdGV4dHVyZS5jcm9wLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS1zcHJpdGUuYW5jaG9yLngpO1xuICAgICAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC1zcHJpdGUuYW5jaG9yLng7XG5cbiAgICAgICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtc3ByaXRlLmFuY2hvci55KTtcbiAgICAgICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXNwcml0ZS5hbmNob3IueTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gaDEgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IGgwICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHBvc2l0aW9ucyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUG9zaXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVQb3NpdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5wb3NpdGlvbjtcblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciByb3RhdGlvbiB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUm90YXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVSb3RhdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5yb3RhdGlvbjtcblxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVJvdGF0aW9uO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBVdnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFV2cyA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmVVdnMgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uX3RleHR1cmUuX3V2cztcblxuICAgICAgICBpZiAodGV4dHVyZVV2cylcbiAgICAgICAge1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHRleHR1cmVVdnMueDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IHRleHR1cmVVdnMueTA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB0ZXh0dXJlVXZzLngxO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSB0ZXh0dXJlVXZzLnkxO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHRleHR1cmVVdnMueDI7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSB0ZXh0dXJlVXZzLnkyO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHRleHR1cmVVdnMueDM7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSB0ZXh0dXJlVXZzLnkzO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyB5b3Uga25vdyB0aGlzIGNhbiBiZSBlYXNpZXIhXG4gICAgICAgICAgICBhcnJheVtvZmZzZXRdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIGFscGhhIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRBbHBoYSA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICAge1xuICAgICAgICB2YXIgc3ByaXRlQWxwaGEgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uYWxwaGE7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlQWxwaGE7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBQYXJ0aWNsZVJlbmRlcmVyLlxuICpcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIuZ2wpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5nbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgfVxuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG4gICAgdGhpcy50ZW1wTWF0cml4ID0gbnVsbDtcbn07XG4iLCJ2YXIgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1RleHR1cmVTaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVNoYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFRleHR1cmVTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVBvc2l0aW9uQ29vcmQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhU2NhbGU7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgZmxvYXQgYVJvdGF0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgdmVjMiB2ID0gYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICcgICB2LnggPSAoYVZlcnRleFBvc2l0aW9uLngpICogY29zKGFSb3RhdGlvbikgLSAoYVZlcnRleFBvc2l0aW9uLnkpICogc2luKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2LnkgPSAoYVZlcnRleFBvc2l0aW9uLngpICogc2luKGFSb3RhdGlvbikgKyAoYVZlcnRleFBvc2l0aW9uLnkpICogY29zKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2ID0gdiArIGFQb3NpdGlvbkNvb3JkOycsXG5cbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKHYsIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gaGVsbG9cbiAgICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IHVBbHBoYTsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciAqIHVBbHBoYTsnLFxuICAgICAgICAgICAgJyAgaWYgKGNvbG9yLmEgPT0gMC4wKSBkaXNjYXJkOycsXG4gICAgICAgICAgICAnICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB1QWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVBvc2l0aW9uQ29vcmQ6IDAsXG4gICAgICAgICAgIC8vIGFTY2FsZTogICAgICAgICAwLFxuICAgICAgICAgICAgYVJvdGF0aW9uOiAgICAgIDBcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBURU1QIEhBQ0tcblxufVxuXG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmVTaGFkZXIucHJvdG90eXBlKTtcblBhcnRpY2xlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlU2hhZGVyO1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogVGhlIENhbnZhc1JlbmRlcmVyIGRyYXdzIHRoZSBzY2VuZSBhbmQgYWxsIGl0cyBjb250ZW50IG9udG8gYSAyZCBjYW52YXMuIFRoaXMgcmVuZGVyZXIgc2hvdWxkIGJlIHVzZWQgZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgd2ViR0wuXG4gKiBEb24ndCBmb3JnZXQgdG8gYWRkIHRoZSBDYW52YXNSZW5kZXJlci52aWV3IHRvIHlvdXIgRE9NIG9yIHlvdSB3aWxsIG5vdCBzZWUgYW55dGhpbmcgOilcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc3lzdGVtIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSBzeXN0ZW0gdGhpcyByZW5kZXJlciBpcyBmb3IuXG4gKiBAcGFyYW0gW3dpZHRoPTgwMF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9NjAwXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBdIHtudW1iZXJ9IFRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSByZW5kZXJlZCBhcmVhIChzaG93biBpZiBub3QgdHJhbnNwYXJlbnQpLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFN5c3RlbVJlbmRlcmVyKHN5c3RlbSwgd2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHV0aWxzLnNheUhlbGxvKHN5c3RlbSk7XG5cbiAgICAvLyBwcmVwYXJlIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zW2ldID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zW2ldID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OU1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBvcHRpb25zID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5SRU5ERVJFUl9UWVBFLlVOS05PV05cbiAgICAgKiBAc2VlIFBJWEkuUkVOREVSRVJfVFlQRVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuVU5LTk9XTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA4MDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgODAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA2MDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHRvXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLnZpZXcgPSBvcHRpb25zLnZpZXcgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gb3B0aW9ucy5yZXNvbHV0aW9uO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy50cmFuc3BhcmVudCA9IG9wdGlvbnMudHJhbnNwYXJlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByZW5kZXIgdmlldyBzaG91bGQgYmUgcmVzaXplZCBhdXRvbWF0aWNhbGx5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IG9wdGlvbnMuYXV0b1Jlc2l6ZSB8fCBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrcyB0aGUgYmxlbmQgbW9kZXMgdXNlZnVsIGZvciB0aGlzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbWl4ZWQ+fVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIHByZXNlcnZlRHJhd2luZ0J1ZmZlciBmbGFnIGFmZmVjdHMgd2hldGhlciBvciBub3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyByZXRhaW5lZCBhZnRlciByZW5kZXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvciBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gICAgICogSWYgdGhlIHNjZW5lIGlzIE5PVCB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGEgY2FudmFzIHNpemVkIGZpbGxSZWN0IG9wZXJhdGlvbiBldmVyeSBmcmFtZSB0byBzZXQgdGhlIGNhbnZhcyBiYWNrZ3JvdW5kIGNvbG9yLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGNsZWFyUmVjdCB0byBjbGVhciB0aGUgY2FudmFzIGV2ZXJ5IGZyYW1lLlxuICAgICAqIERpc2FibGUgdGhpcyBieSBzZXR0aW5nIHRoaXMgdG8gZmFsc2UuIEZvciBleGFtcGxlIGlmIHlvdXIgZ2FtZSBoYXMgYSBjYW52YXMgZmlsbGluZyBiYWNrZ3JvdW5kIGltYWdlIHlvdSBvZnRlbiBkb24ndCBuZWVkIHRoaXMgc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdFxuICAgICAqL1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyO1xuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gICAgICogSGFuZHkgZm9yIGNyaXNwIHBpeGVsIGFydCBhbmQgc3BlZWQgb24gbGVnYWN5IGRldmljZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSBvcHRpb25zLnJvdW5kUGl4ZWxzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSAweDAwMDAwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGFuIFtSLCBHLCBCXSBhcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gJyMwMDAwMDAnO1xuXG4gICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBvcHRpb25zLmJhY2tncm91bmRDb2xvciB8fCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3I7IC8vIHJ1biBiZyBjb2xvciBzZXR0ZXJcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB0cmFuc2Zvcm06e3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpfSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCByb290IG9iamVjdCB0aGF0IHRoZSByZW5kZXJlciB0cmllZCB0byByZW5kZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbn1cblxuLy8gY29uc3RydWN0b3JcblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeXN0ZW1SZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3lzdGVtUmVuZGVyZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZpbGwgaWYgbm90IHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3lzdGVtUmVuZGVyZXIjXG4gICAgICovXG4gICAgYmFja2dyb3VuZENvbG9yOlxuICAgIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9IHV0aWxzLmhleDJzdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHV0aWxzLmhleDJyZ2IodmFsLCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB2aWV3IHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy52aWV3LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0aGlzLnZpZXcuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5hdXRvUmVzaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgYW5kIG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgQ2FudmFzIERPTSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldykge1xuICAgIGlmIChyZW1vdmVWaWV3ICYmIHRoaXMudmlldy5wYXJlbnROb2RlKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy52aWV3KTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICB0aGlzLnZpZXcgPSBudWxsO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMDtcblxuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gbnVsbDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSBudWxsO1xufTtcbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgQ2FudmFzTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ0NhbnZhcycsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5DQU5WQVM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy52aWV3LmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogdGhpcy50cmFuc3BhcmVudCB9KTtcblxuICAgIC8qKlxuICAgICAqIEJvb2xlYW4gZmxhZyBjb250cm9sbGluZyBjYW52YXMgcmVmcmVzaC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIGEgQ2FudmFzTWFza01hbmFnZXIsIGhhbmRsZXMgbWFza2luZyB3aGVuIHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc01hc2tNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBuZXcgQ2FudmFzTWFza01hbmFnZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgcHJvcGVydHkgdXNlZCB0byBzZXQgdGhlIGNhbnZhcyBzbW9vdGhpbmcgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdpbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnd2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21vekltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnb0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21zSW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIHRoaXMuX21hcEJsZW5kTW9kZXMoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge1xuICAgICAgICB3b3JsZFRyYW5zZm9ybTogbmV3IG1hdGguTWF0cml4KCksXG4gICAgICAgIHdvcmxkQWxwaGE6IDFcbiAgICB9O1xuXG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihDYW52YXNSZW5kZXJlcik7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIHRoaXMgY2FudmFzIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IG9iamVjdC5wYXJlbnQ7XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBvYmplY3Q7XG5cbiAgICBvYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgb2JqZWN0LnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIHRoaXMuY29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF07XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMgJiYgdGhpcy52aWV3LnNjcmVlbmNhbnZhcylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGVhckJlZm9yZVJlbmRlcilcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy53aWR0aCAsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChvYmplY3QsIHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGlzLmVtaXQoJ3Bvc3RyZW5kZXInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpXG57XG4gICAgdGhpcy5kZXN0cm95UGx1Z2lucygpO1xuXG4gICAgLy8gY2FsbCB0aGUgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLnJlZnJlc2ggPSB0cnVlO1xuXG4gICAgdGhpcy5tYXNrTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG5cbiAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KVxue1xuICAgIHZhciB0ZW1wQ29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJDYW52YXModGhpcyk7XG4gICAgdGhpcy5jb250ZXh0ID0gdGVtcENvbnRleHQ7XG59O1xuXG4vKipcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXIjcmVzaXplXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAodywgaClcbntcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcywgdywgaCk7XG5cbiAgICAvL3Jlc2V0IHRoZSBzY2FsZSBtb2RlLi4gb2RkbHkgdGhpcyBzZWVtcyB0byBiZSByZXNldCB3aGVuIHRoZSBjYW52YXMgaXMgcmVzaXplZC5cbiAgICAvL3N1cmVseSBhIGJyb3dzZXIgYnVnPz8gTGV0IHBpeGkgZml4IHRoYXQgZm9yIHlvdS4uXG4gICAgaWYodGhpcy5zbW9vdGhQcm9wZXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dFt0aGlzLnNtb290aFByb3BlcnR5XSA9IChDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBNYXBzIFBpeGkgYmxlbmQgbW9kZXMgdG8gY2FudmFzIGJsZW5kIG1vZGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fbWFwQmxlbmRNb2RlcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmJsZW5kTW9kZXMpXG4gICAge1xuICAgICAgICB0aGlzLmJsZW5kTW9kZXMgPSB7fTtcblxuICAgICAgICBpZiAodXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdtdWx0aXBseSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc2NyZWVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdvdmVybGF5JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdkYXJrZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ2xpZ2h0ZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ2NvbG9yLWRvZGdlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdjb2xvci1idXJuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IQVJEX0xJR0hUXSAgICA9ICdoYXJkLWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb2Z0LWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdkaWZmZXJlbmNlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5FWENMVVNJT05dICAgICA9ICdleGNsdXNpb24nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ2h1ZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc2F0dXJhdGUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ2NvbG9yJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdsdW1pbm9zaXR5JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb29sIG5ldyBibGVuZCBtb2RlcyBpbiBjYW52YXMgJ2NvdWdoJyBpZSAnY291Z2gnXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TQVRVUkFUSU9OXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBjYW52YXNcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKi9cbmZ1bmN0aW9uIENhbnZhc0J1ZmZlcih3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBDYW52YXMgb2JqZWN0IHRoYXQgYmVsb25ncyB0byB0aGlzIENhbnZhc0J1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBBIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHdvLWRpbWVuc2lvbmFsIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn1cblxuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc0J1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzQnVmZmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYW52YXNCdWZmZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB2YWw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyBidWZmZXIgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNhbnZhc0J1ZmZlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENsZWFycyB0aGUgY2FudmFzIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIENhbnZhc0J1ZmZlciBjbGFzcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgY2FudmFzIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBjYW52YXMuXG4gKlxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlciB0byBkcmF3IHRoZSBwcmltaXRpdmUgZ3JhcGhpY3MgZGF0YS5cbiAqIEBzdGF0aWNcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xudmFyIENhbnZhc0dyYXBoaWNzID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0dyYXBoaWNzO1xuXG4vKlxuICogUmVuZGVycyBhIEdyYXBoaWNzIG9iamVjdCB0byBhIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBhY3R1YWwgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIDJkIGRyYXdpbmcgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIHdvcmxkQWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljc1RpbnQoZ3JhcGhpY3MpO1xuICAgICAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuX2ZpbGxUaW50O1xuICAgICAgICB2YXIgbGluZUNvbG9yID0gZGF0YS5fbGluZVRpbnQ7XG5cbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRPRE8gLSBuZWVkIHRvIGJlIFVuZGVmaW5lZCFcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsMCwyKk1hdGguUEkpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcblxuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJ4ID0gc2hhcGUueDtcbiAgICAgICAgICAgIHZhciByeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBzaGFwZS53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgcmFkaXVzID0gc2hhcGUucmFkaXVzO1xuXG4gICAgICAgICAgICB2YXIgbWF4UmFkaXVzID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyIHwgMDtcbiAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1cyA+IG1heFJhZGl1cyA/IG1heFJhZGl1cyA6IHJhZGl1cztcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGxDb2xvciB8fCBkYXRhLmZpbGxDb2xvciA9PT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3MgbWFza1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBtYXNrXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY29udGV4dCAyZCBtZXRob2Qgb2YgdGhlIGNhbnZhc1xuICovXG5DYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIGxlbiA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG5cbiAgICBpZiAobGVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludCBhcmUgdGhlIHNhbWUgY2xvc2UgdGhlIHBhdGggLSBtdWNoIG5lYXRlciA6KVxuICAgICAgICAgICAgaWYgKHBvaW50c1swXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gJiYgcG9pbnRzWzFdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5yZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuXG4gICAgICAgICAgICAvLyBlbGxpcHNlIGNvZGUgdGFrZW4gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG5cbiAgICAgICAgICAgIHZhciB3ID0gc2hhcGUud2lkdGggKiAyO1xuICAgICAgICAgICAgdmFyIGggPSBzaGFwZS5oZWlnaHQgKiAyO1xuXG4gICAgICAgICAgICB2YXIgeCA9IHNoYXBlLnggLSB3LzI7XG4gICAgICAgICAgICB2YXIgeSA9IHNoYXBlLnkgLSBoLzI7XG5cbiAgICAgICAgICAgIHZhciBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICAgICAgICAgICAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgIHhlID0geCArIHcsICAgICAgICAgICAvLyB4LWVuZFxuICAgICAgICAgICAgICAgIHllID0geSArIGgsICAgICAgICAgICAvLyB5LWVuZFxuICAgICAgICAgICAgICAgIHhtID0geCArIHcgLyAyLCAgICAgICAvLyB4LW1pZGRsZVxuICAgICAgICAgICAgICAgIHltID0geSArIGggLyAyOyAgICAgICAvLyB5LW1pZGRsZVxuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhlLCB5bSArIG95LCB4bSArIG94LCB5ZSwgeG0sIHllKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdGludCBvZiBhIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB0aGF0IHdpbGwgaGF2ZSBpdHMgdGludCB1cGRhdGVkXG4gKlxuICovXG5DYW52YXNHcmFwaGljcy51cGRhdGVHcmFwaGljc1RpbnQgPSBmdW5jdGlvbiAoZ3JhcGhpY3MpXG57XG4gICAgaWYgKGdyYXBoaWNzLnRpbnQgPT09IDB4RkZGRkZGICYmIGdyYXBoaWNzLl9wcmV2VGludCA9PT0gZ3JhcGhpY3MudGludClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGhpY3MuX3ByZXZUaW50ID0gZ3JhcGhpY3MudGludDtcblxuICAgIHZhciB0aW50UiA9IChncmFwaGljcy50aW50ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIHRpbnRHID0gKGdyYXBoaWNzLnRpbnQgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50QiA9IChncmFwaGljcy50aW50ICYgMHhGRikvIDI1NTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuZmlsbENvbG9yIHwgMDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEubGluZUNvbG9yIHwgMDtcblxuICAgICAgICAvKlxuICAgICAgICB2YXIgY29sb3JSID0gKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JHID0gKGZpbGxDb2xvciA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIHZhciBjb2xvckIgPSAoZmlsbENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBmaWxsQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcblxuICAgICAgICBjb2xvclIgPSAobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIGNvbG9yRyA9IChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckIgPSAobGluZUNvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBsaW5lQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcbiAgICAgICAgKi9cblxuICAgICAgICAvLyBzdXBlciBpbmxpbmUgY29zIGltIGFuIG9wdGltaXphdGlvbiBOQVpJIDopXG4gICAgICAgIGRhdGEuX2ZpbGxUaW50ID0gKCgoZmlsbENvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChmaWxsQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG4gICAgICAgIGRhdGEuX2xpbmVUaW50ID0gKCgobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChsaW5lQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG5cbiAgICB9XG59O1xuXG4iLCJ2YXIgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuL0NhbnZhc0dyYXBoaWNzJyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgdG8gaGFuZGxlIG1hc2tpbmcuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDYW52YXNNYXNrTWFuYWdlcigpXG57fVxuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzTWFza01hbmFnZXI7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgYWRkcyBpdCB0byB0aGUgY3VycmVudCBzdGFjayBvZiBtYXNrcy5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge29iamVjdH0gdGhlIG1hc2tEYXRhIHRoYXQgd2lsbCBiZSBwdXNoZWRcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhLCByZW5kZXJlcilcbntcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2F2ZSgpO1xuXG4gICAgdmFyIGNhY2hlQWxwaGEgPSBtYXNrRGF0YS5hbHBoYTtcbiAgICB2YXIgdHJhbnNmb3JtID0gbWFza0RhdGEud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICAvL1RPRE8gc3Vwb3J0IHNwcml0ZSBhbHBoYSBtYXNrcz8/XG4gICAgLy9sb3RzIG9mIGVmZm9ydCByZXF1aXJlZC4gSWYgZGVtYW5kIGlzIGdyZWF0IGVub3VnaC4uXG4gICAgaWYoIW1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sobWFza0RhdGEsIHJlbmRlcmVyLmNvbnRleHQpO1xuICAgICAgICByZW5kZXJlci5jb250ZXh0LmNsaXAoKTtcbiAgICB9XG5cbiAgICBtYXNrRGF0YS53b3JsZEFscGhhID0gY2FjaGVBbHBoYTtcbn07XG5cbi8qKlxuICogUmVzdG9yZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlIHRoZSBtYXNrIHdhcyBhcHBsaWVkLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIFNwcml0ZS9UZXh0dXJlIHRpbnRpbmcuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNUaW50ZXIgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzVGludGVyO1xuXG4vKipcbiAqIEJhc2ljYWxseSB0aGlzIG1ldGhvZCBqdXN0IG5lZWRzIGEgc3ByaXRlIGFuZCBhIGNvbG9yIGFuZCB0aW50cyB0aGUgc3ByaXRlIHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIHRpbnRlZCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUgPSBmdW5jdGlvbiAoc3ByaXRlLCBjb2xvcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHNwcml0ZS50ZXh0dXJlO1xuXG4gICAgY29sb3IgPSBDYW52YXNUaW50ZXIucm91bmRDb2xvcihjb2xvcik7XG5cbiAgICB2YXIgc3RyaW5nQ29sb3IgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG5cbiAgICB0ZXh0dXJlLnRpbnRDYWNoZSA9IHRleHR1cmUudGludENhY2hlIHx8IHt9O1xuXG4gICAgaWYgKHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl07XG4gICAgfVxuXG4gICAgIC8vIGNsb25lIHRleHR1cmUuLlxuICAgIHZhciBjYW52YXMgPSBDYW52YXNUaW50ZXIuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLy9DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCh0ZXh0dXJlLCBzdHJpbmdDb2xvciwgY2FudmFzKTtcbiAgICBDYW52YXNUaW50ZXIudGludE1ldGhvZCh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKTtcblxuICAgIGlmIChDYW52YXNUaW50ZXIuY29udmVydFRpbnRUb0ltYWdlKVxuICAgIHtcbiAgICAgICAgLy8gaXMgdGhpcyBiZXR0ZXI/XG4gICAgICAgIHZhciB0aW50SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgdGludEltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcblxuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSB0aW50SW1hZ2U7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSA9IGNhbnZhcztcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCBjb252ZXJ0aW5nIHRoZSB0ZXh0dXJlIHRvIGFuIGltYWdlIHRoZW4gd2UgbmVlZCB0byBsb3NlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhc1xuICAgICAgICBDYW52YXNUaW50ZXIuY2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ211bHRpcGx5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgPSBmdW5jdGlvbiAodGV4dHVyZSwgY29sb3IsIGNhbnZhcylcbntcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgIHZhciBjcm9wID0gdGV4dHVyZS5jcm9wLmNsb25lKCk7XG4gICAgY3JvcC54ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC55ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC53aWR0aCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AuaGVpZ2h0ICo9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXMud2lkdGggPSBjcm9wLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wLmhlaWdodDtcblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tYXRvcCc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ292ZXJsYXknIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhPdmVybGF5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgY3JvcC54LFxuICAgICAgICBjcm9wLnksXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodFxuICAgICk7XG5cbiAgICAvLyBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5Jztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgcGl4ZWwgcGVyIHBpeGVsLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuICAgIHZhciByID0gcmdiVmFsdWVzWzBdLCBnID0gcmdiVmFsdWVzWzFdLCBiID0gcmdiVmFsdWVzWzJdO1xuXG4gICAgdmFyIHBpeGVsRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIHZhciBwaXhlbHMgPSBwaXhlbERhdGEuZGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGl4ZWxzLmxlbmd0aDsgaSArPSA0KVxuICAgIHtcbiAgICAgICAgcGl4ZWxzW2krMF0gKj0gcjtcbiAgICAgICAgcGl4ZWxzW2krMV0gKj0gZztcbiAgICAgICAgcGl4ZWxzW2krMl0gKj0gYjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnB1dEltYWdlRGF0YShwaXhlbERhdGEsIDAsIDApO1xufTtcblxuLyoqXG4gKiBSb3VuZHMgdGhlIHNwZWNpZmllZCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gcm91bmQsIHNob3VsZCBiZSBhIGhleCBjb2xvclxuICovXG5DYW52YXNUaW50ZXIucm91bmRDb2xvciA9IGZ1bmN0aW9uIChjb2xvcilcbntcbiAgICB2YXIgc3RlcCA9IENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuXG4gICAgcmdiVmFsdWVzWzBdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzBdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMV0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMV0gLyBzdGVwKSAqIHN0ZXApO1xuICAgIHJnYlZhbHVlc1syXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1syXSAvIHN0ZXApICogc3RlcCk7XG5cbiAgICByZXR1cm4gdXRpbHMucmdiMmhleChyZ2JWYWx1ZXMpO1xufTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygc3RlcHMgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgY2FwIHdoZW4gcm91bmRpbmcgY29sb3JzLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhY2hlU3RlcHNQZXJDb2xvckNoYW5uZWwgPSA4O1xuXG4vKipcbiAqIFRpbnQgY2FjaGUgYm9vbGVhbiBmbGFnLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSA9IGZhbHNlO1xuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkLCBjb25zZXF1ZW50bHkgdGhlIGFiaWxpdHkgdG8gdGludCB1c2luZyB0aGUgbXVsdGlwbHkgbWV0aG9kLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID0gdXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpO1xuXG4vKipcbiAqIFRoZSB0aW50aW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKi9cbkNhbnZhc1RpbnRlci50aW50TWV0aG9kID0gQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID8gQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgOiAgQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWw7XG4iLCJ2YXIgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuXHR1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgVGV4dHVyZU1hbmFnZXIgPSBmdW5jdGlvbihnbClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIHRyYWNrIHRleHR1cmVzIGluIHRoZSByZW5kZXJlciBzbyB3ZSBjYW4gbm8gbG9uZ2VyIGxpc3RlbiB0byB0aGVtIG9uIGRlc3RydWN0aW9uLlxuXHR0aGlzLl9tYW5hZ2VkVGV4dHVyZXMgPSBbXTtcbiAgICB0aGlzLmdsVGV4dHVyZXMgPSB7fTtcblxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmdldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cbi8qKlxuICogVXBkYXRlcyBhbmQvb3IgQ3JlYXRlcyBhIFdlYkdMIHRleHR1cmUgZm9yIHRoZSByZW5kZXJlcidzIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB1cGRhdGVcbiAqL1xuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG5cdGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXS8vdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG5cbiAgICBpZiAoIWdsVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGdsVGV4dHVyZSA9IG5ldyBHTFRleHR1cmUoZ2wpO1xuICAgICAgICBnbFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHRydWVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbFRleHR1cmU7XG5cbiAgICAgICAvLyB0aGlzLmdsVGV4dHVyZXNbdGV4dHVyZS51aWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgIHRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub24oJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xuICAgIH1cblxuICAgIGdsVGV4dHVyZS51cGxvYWQodGV4dHVyZS5zb3VyY2UpO1xuICAgIFxuICAgIC8vVE9ETyBjaGVjayBpcyBwb3dlciBvZiB0d28uLlxuICAgIGdsVGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuXG4gICAgLy8gVE9ETyBjaGVjayBmb3Igc2NhbGluZyB0eXBlXG4gICAgZ2xUZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKTtcblxuICAgIHJldHVybiAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG59XG5cbi8qKlxuICogRGVsZXRlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byBkZXN0cm95XG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUsIF9za2lwUmVtb3ZlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0uZGVzdHJveSgpO1xuICAgICAgICB0ZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGVUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcblxuXG4gICAgICAgIGRlbGV0ZSB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdO1xuXG4gICAgICAgIGlmICghX3NraXBSZW1vdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzLmluZGV4T2YodGV4dHVyZSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLl9tYW5hZ2VkVGV4dHVyZXMsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24oKVxue1xuXHQvLyBlbXB0eSBhbGwgdGhlIG9sZCBnbCB0ZXh0dXJlcyBhcyB0aGV5IGFyZSB1c2VsZXNzIG5vd1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIGlmICh0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgLy8gZGVzdHJveSBtYW5hZ2VkIHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgdGhpcy5kZXN0cm95VGV4dHVyZSh0ZXh0dXJlLCB0cnVlKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFuYWdlZFRleHR1cmVzID0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlTWFuYWdlcjtcblxuIiwidmFyIFN5c3RlbVJlbmRlcmVyID0gcmVxdWlyZSgnLi4vU3lzdGVtUmVuZGVyZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL01hc2tNYW5hZ2VyJyksXG4gICAgU3RlbmNpbE1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyJyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIEJsZW5kTW9kZU1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIEZYQUFGaWx0ZXIgPSByZXF1aXJlKCcuL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi9UZXh0dXJlTWFuYWdlcicpLFxuICAgIGNyZWF0ZUNvbnRleHQgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5jcmVhdGVDb250ZXh0LFxuICAgIG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aSA9IHJlcXVpcmUoJy4vdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpJyksXG4gICAgbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgV2ViR0xSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgd2ViR0wgZW5hYmxlZCBjYW52YXMuIFRoaXMgcmVuZGVyZXJcbiAqIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wuIFRoaXMgUmVuZGVyIHdvcmtzIGJ5IGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgd2ViR0xCYXRjaHMuXG4gKiBTbyBubyBuZWVkIGZvciBTcHJpdGUgQmF0Y2hlcyBvciBTcHJpdGUgQ2xvdWRzLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgdmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD0wXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD0wXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcy4gSWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseSB0aGVuIEZYQUEgYW50aWFsaWFzaW5nIGlzIHVzZWRcbiAqIEBwYXJhbSBbb3B0aW9ucy5mb3JjZUZYQUE9ZmFsc2VdIHtib29sZWFufSBmb3JjZXMgRlhBQSBhbnRpYWxpYXNpbmcgdG8gYmUgdXNlZCBvdmVyIG5hdGl2ZS4gRlhBQSBpcyBmYXN0ZXIsIGJ1dCBtYXkgbm90IGFsd2F5cyBsb29rIGFzIGdyZWF0XG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLiBJZiB5b3Ugd2lzaCB0byBzZXQgdGhpcyB0byBmYWxzZSwgeW91ICptdXN0KiBzZXQgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHRvIGB0cnVlYC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWZcbiAqICAgICAgeW91IG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHQuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgU3lzdGVtUmVuZGVyZXIuY2FsbCh0aGlzLCAnV2ViR0wnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgcmVuZGVyZXIgYXMgYSBzdGFuZGFyZGlzZWQgY29uc3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0vL1xuICAgICAqXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQgPSB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHBhc3NlZCBpbiB0byBjcmVhdGUgYSBuZXcgd2ViZ2wgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0ge1xuICAgICAgICBhbHBoYTogdGhpcy50cmFuc3BhcmVudCxcbiAgICAgICAgYW50aWFsaWFzOiBvcHRpb25zLmFudGlhbGlhcyxcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnRyYW5zcGFyZW50ICYmIHRoaXMudHJhbnNwYXJlbnQgIT09ICdub3RNdWx0aXBsaWVkJyxcbiAgICAgICAgc3RlbmNpbDogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgIH07XG5cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhWzNdID0gdGhpcy50cmFuc3BhcmVudCA/IDAgOiAxO1xuXG4gICAgLyoqXG4gICAgICogRGVhbHMgd2l0aCBtYW5hZ2luZyB0aGUgc2hhZGVyIHByb2dyYW1zIGFuZCB0aGVpciBhdHRyaWJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG5ldyBTaGFkZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWFza3MgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IE1hc2tNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIgPSBuZXcgU3RlbmNpbE1hbmFnZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5GaWx0ZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgYmxlbmRNb2Rlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CbGVuZE1vZGVNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlciA9IG5ldyBCbGVuZE1vZGVNYW5hZ2VyKHRoaXMpO1xuXG4gICAgXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgT2JqZWN0UmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk9iamVjdFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbmV3IE9iamVjdFJlbmRlcmVyKHRoaXMpO1xuXG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBzbyBpdCBpcyByZWFkeSBmb3IgdGhlIG1hbmFnZXJzLlxuICAgIHRoaXMuZ2wgPSBjcmVhdGVDb250ZXh0KHRoaXMudmlldywgdGhpcy5fY29udGV4dE9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcblxuICAgIC8vIG1hcCBzb21lIHdlYkdMIGJsZW5kIGFuZCBkcmF3bW9kZXMuLlxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aShnbCk7XG4gICAgdGhpcy5kcmF3TW9kZXMgPSBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbClcblxuICAgIHRoaXMuX2FjdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldH1cbiAgICAgKi9cbiAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihXZWJHTFJlbmRlcmVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBXZWJHTCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuX2luaXRDb250ZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgLy8gY3JlYXRlIGEgdGV4dHVyZSBtYW5hZ2VyLi4uXG4gICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG5ldyBUZXh0dXJlTWFuYWdlcihnbCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIGRlZmF1bHQgcGl4aSBzZXR0aW5ncy4uXG4gICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcblxuXG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG51bGwsIHRoaXMucmVzb2x1dGlvbiwgdHJ1ZSk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LmNsZWFyQ29sb3IgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhO1xuICAgIFxuICAgIHRoaXMuYmluZFJlbmRlclRhcmdldCh0aGlzLnJvb3RSZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy5lbWl0KCdjb250ZXh0JywgZ2wpO1xuXG4gICAgLy8gc2V0dXAgdGhlIHdpZHRoL2hlaWdodCBwcm9wZXJ0aWVzIGFuZCBnbCB2aWV3cG9ydFxuICAgIHRoaXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsgICAgXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBpdHMgd2ViR0wgdmlld1xuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gdGhlIG9iamVjdCB0byBiZSByZW5kZXJlZFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdClcbntcbiAgICB0aGlzLmVtaXQoJ3ByZXJlbmRlcicpO1xuXG4gICAgLy8gbm8gcG9pbnQgcmVuZGVyaW5nIGlmIG91ciBjb250ZXh0IGhhcyBiZWVuIGJsb3duIHVwIVxuICAgIGlmICh0aGlzLmdsLmlzQ29udGV4dExvc3QoKSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBkaXNwbGF5T2JqZWN0O1xuXG4gICAgdmFyIGNhY2hlUGFyZW50ID0gZGlzcGxheU9iamVjdC5wYXJlbnQ7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgZGlzcGxheU9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICBkaXNwbGF5T2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIHRoaXMucm9vdFJlbmRlclRhcmdldCwgdGhpcy5jbGVhckJlZm9yZVJlbmRlcik7Ly90aGlzLnByb2plY3Rpb24pO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBEaXNwbGF5IE9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSBUaGUgcmVuZGVyIHRhcmdldCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgZGlzcGxheSBvYmplY3RcbiAqXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcmVuZGVyVGFyZ2V0LCBjbGVhcikvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblxuICAgIGlmKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIGZpbHRlciBtYW5hZ2VyXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnNldEZpbHRlclN0YWNrKCByZW5kZXJUYXJnZXQuZmlsdGVyU3RhY2sgKTtcblxuICAgIC8vIHJlbmRlciB0aGUgc2NlbmUhXG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJXZWJHTCh0aGlzKTtcblxuICAgIC8vIGZpbmlzaCB0aGUgY3VycmVudCByZW5kZXJlci4uXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXJlciB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSBvYmplY3RSZW5kZXJlciB7UElYSS5PYmplY3RSZW5kZXJlcn0gVGhlIG9iamVjdCByZW5kZXJlciB0byB1c2UuXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldE9iamVjdFJlbmRlcmVyID0gZnVuY3Rpb24gKG9iamVjdFJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRSZW5kZXJlciA9PT0gb2JqZWN0UmVuZGVyZXIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RvcCgpO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gb2JqZWN0UmVuZGVyZXI7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgd2ViR0wgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHdlYkdMIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHdlYkdMIHZpZXdcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSB0aGlzLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRvIHRoZSBvbmUgZ2l2ZW4gaW4gcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9IHRoZSBuZXcgcmVuZGVyIHRhcmdldFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5iaW5kUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICBpZihyZW5kZXJUYXJnZXQgIT09IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBpZih0aGlzLl9hY3RpdmVTaGFkZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gcmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuc2V0TWFza1N0YWNrKCByZW5kZXJUYXJnZXQuc3RlbmNpbE1hc2tTdGFjayApO1xuICAgIH1cbn1cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFNoYWRlciA9IGZ1bmN0aW9uIChzaGFkZXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgLy9UT0RPIGNhY2hlXG4gICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyICE9PSBzaGFkZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBzaGFkZXI7XG4gICAgICAgIHNoYWRlci5iaW5kKCk7XG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB9XG59XG5cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgbG9jYXRpb24pXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vVE9ETyB0ZXN0IHBlcmYgb2YgY2FjaGU/XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCAwO1xuXG4gICAgaWYodGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uICE9PSBsb2NhdGlvbikvL1xuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uID0gbG9jYXRpb25cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uICk7XG4gICAgfVxuXG4gICAgLy9UT0RPIC0gY2FuIHdlIGNhY2hlIHRoaXMgdGV4dHVyZSB0b28/XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7ICAgICAgXG4gICAgXG4gICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIGJpbmQgdGhlIHRleHR1cmUuLlxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXS5iaW5kKCk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogSGFuZGxlcyBhIGxvc3Qgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRMb3N0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgYSByZXN0b3JlZCB3ZWJnbCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9pbml0Q29udGV4dCgpO1xuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIucmVtb3ZlQWxsKCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciAoZXZlbnQgbGlzdGVuZXJzLCBzcHJpdGViYXRjaCwgZXRjLi4uKVxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIHJlbW92ZSBsaXN0ZW5lcnNcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuaGFuZGxlQ29udGV4dExvc3QpO1xuICAgIHRoaXMudmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkKTtcblxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIuZGVzdHJveUFsbCgpO1xuXG4gICAgLy8gY2FsbCBiYXNlIGRlc3Ryb3lcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHJlbW92ZVZpZXcpO1xuXG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgLy8gZGVzdHJveSB0aGUgbWFuYWdlcnNcbiAgICB0aGlzLnNoYWRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSBudWxsO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0gbnVsbDtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICB0aGlzLmdsID0gbnVsbDtcbn07XG5cbiIsInZhciBEZWZhdWx0U2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBQSVhJIGZpbHRlci4gQ3VycmVudGx5IG9ubHkgV2ViR0wgc3VwcG9ydHMgZmlsdGVycy5cbiAqIElmIHlvdSB3YW50IHRvIG1ha2UgYSBjdXN0b20gZmlsdGVyIHRoaXMgc2hvdWxkIGJlIHlvdXIgYmFzZSBjbGFzcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdmVydGV4U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIGZyYWdtZW50U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlIGFzIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gdW5pZm9ybXMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuaWZvcm1zIGZvciB0aGlzIGZpbHRlci5cbiAqL1xuZnVuY3Rpb24gQWJzdHJhY3RGaWx0ZXIodmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMpXG57XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBzaGFkZXJzXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVycyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4dHJhIHBhZGRpbmcgdGhhdCB0aGUgZmlsdGVyIG1pZ2h0IG5lZWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmlmb3JtcyBhcyBhbiBvYmplY3RcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29kZSBvZiB0aGUgdmVydGV4IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIGZyYW1lbnQgc2hhZGVyXG4gICAgICogQG1lbWJlciB7c3RyaW5nW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICAvL1RPRE8gYSByZW1pbmRlciAtIHdvdWxkIGJlIGNvb2wgdG8gaGF2ZSBsb3dlciByZXMgZmlsdGVycyBhcyB0aGlzIHdvdWxkIGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlLlxuXG4gICAgLy90eXBlb2YgZnJhZ21lbnRTcmMgPT09ICdzdHJpbmcnID8gZnJhZ21lbnRTcmMuc3BsaXQoJycpIDogKGZyYWdtZW50U3JjIHx8IFtdKTtcblxufVxuXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RGaWx0ZXI7XG5cbi8qKlxuICogR3JhYnMgYSBzaGFkZXIgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIHNoYWRlciBmcm9tXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5nZXRTaGFkZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXJzW2dsLmlkXTtcblxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gbmV3IERlZmF1bHRTaGFkZXIocmVuZGVyZXIuc2hhZGVyTWFuYWdlcixcbiAgICAgICAgICAgIHRoaXMudmVydGV4U3JjLFxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudFNyYyxcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNoYWRlcnNbZ2wuaWRdID0gc2hhZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8gY2xlYXIgdGhlIG91dHB1dFRhcmdldFxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xufTtcblxuLyoqXG4gKiBTeW5jcyBhIHVuaWZvcm0gYmV0d2VlbiB0aGUgY2xhc3Mgb2JqZWN0IGFuZCB0aGUgc2hhZGVycy5cbiAqXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5zaGFkZXJzLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyc1tpXS5zeW5jVW5pZm9ybSh1bmlmb3JtKTtcbiAgICB9XG59O1xuIiwidmFyIEFic3RyYWN0RmlsdGVyID0gcmVxdWlyZSgnLi9BYnN0cmFjdEZpbHRlcicpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqXG4gKiBCYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXG4gKiBtb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcbiAqIHVuc3VwcG9ydGVkIGJ5IFdlYkdMLlxuICpcbiAqIC0tXG4gKiBGcm9tOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKlxuICovXG5mdW5jdGlvbiBGWEFBRmlsdGVyKClcbntcbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG5cXG52b2lkIHRleGNvb3Jkcyh2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTlcsIG91dCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JTVywgb3V0IHZlYzIgdl9yZ2JTRSxcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjMiBpbnZlcnNlVlAgPSAxLjAgLyByZXNvbHV0aW9uLnh5O1xcbiAgICB2X3JnYk5XID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk5FID0gKGZyYWdDb29yZCArIHZlYzIoMS4wLCAtMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU1cgPSAoZnJhZ0Nvb3JkICsgdmVjMigtMS4wLCAxLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JTRSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiTSA9IHZlYzIoZnJhZ0Nvb3JkICogaW52ZXJzZVZQKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxuICAgdlJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xcblxcbiAgIC8vY29tcHV0ZSB0aGUgdGV4dHVyZSBjb29yZHMgYW5kIHNlbmQgdGhlbSB0byB2YXJ5aW5nc1xcbiAgIHRleGNvb3JkcyhhVGV4dHVyZUNvb3JkICogcmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgdl9yZ2JOVywgdl9yZ2JORSwgdl9yZ2JTVywgdl9yZ2JTRSwgdl9yZ2JNKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcblxcbi8qKlxcbkJhc2ljIEZYQUEgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGNvZGUgb24gZ2Vla3MzZC5jb20gd2l0aCB0aGVcXG5tb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcXG51bnN1cHBvcnRlZCBieSBXZWJHTC5cXG5cXG4tLVxcblxcbkZyb206XFxuaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcXG5cXG5Db3B5cmlnaHQgKGMpIDIwMTEgYnkgQXJtaW4gUm9uYWNoZXIuXFxuXFxuU29tZSByaWdodHMgcmVzZXJ2ZWQuXFxuXFxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxcbm1ldDpcXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXFxuICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcXG4gICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcXG4gICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXFxuXFxuICAgICogVGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3JcXG4gICAgICBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWNcXG4gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXFxuXFxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xcblxcXCJBUyBJU1xcXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXFxuQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcXG5PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcXG5TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXFxuVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXFxuKi9cXG5cXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01JTlxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvIDEyOC4wKVxcbiNlbmRpZlxcbiNpZm5kZWYgRlhBQV9SRURVQ0VfTVVMXFxuICAgICNkZWZpbmUgRlhBQV9SRURVQ0VfTVVMICAgKDEuMCAvIDguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfU1BBTl9NQVhcXG4gICAgI2RlZmluZSBGWEFBX1NQQU5fTUFYICAgICA4LjBcXG4jZW5kaWZcXG5cXG4vL29wdGltaXplZCB2ZXJzaW9uIGZvciBtb2JpbGUsIHdoZXJlIGRlcGVuZGVudFxcbi8vdGV4dHVyZSByZWFkcyBjYW4gYmUgYSBib3R0bGVuZWNrXFxudmVjNCBmeGFhKHNhbXBsZXIyRCB0ZXgsIHZlYzIgZnJhZ0Nvb3JkLCB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk5XLCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYlNXLCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjNCBjb2xvcjtcXG4gICAgbWVkaXVtcCB2ZWMyIGludmVyc2VWUCA9IHZlYzIoMS4wIC8gcmVzb2x1dGlvbi54LCAxLjAgLyByZXNvbHV0aW9uLnkpO1xcbiAgICB2ZWMzIHJnYk5XID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JOVykueHl6O1xcbiAgICB2ZWMzIHJnYk5FID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JORSkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTVykueHl6O1xcbiAgICB2ZWMzIHJnYlNFID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTRSkueHl6O1xcbiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JNKTtcXG4gICAgdmVjMyByZ2JNICA9IHRleENvbG9yLnh5ejtcXG4gICAgdmVjMyBsdW1hID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTtcXG4gICAgZmxvYXQgbHVtYU5XID0gZG90KHJnYk5XLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KHJnYk5FLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gZG90KHJnYlNXLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNFID0gZG90KHJnYlNFLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KHJnYk0sICBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU1pbiA9IG1pbihsdW1hTSwgbWluKG1pbihsdW1hTlcsIGx1bWFORSksIG1pbihsdW1hU1csIGx1bWFTRSkpKTtcXG4gICAgZmxvYXQgbHVtYU1heCA9IG1heChsdW1hTSwgbWF4KG1heChsdW1hTlcsIGx1bWFORSksIG1heChsdW1hU1csIGx1bWFTRSkpKTtcXG5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpcjtcXG4gICAgZGlyLnggPSAtKChsdW1hTlcgKyBsdW1hTkUpIC0gKGx1bWFTVyArIGx1bWFTRSkpO1xcbiAgICBkaXIueSA9ICAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuXFxuICAgIGZsb2F0IGRpclJlZHVjZSA9IG1heCgobHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFKSAqXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNSAqIEZYQUFfUkVEVUNFX01VTCksIEZYQUFfUkVEVUNFX01JTik7XFxuXFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvIChtaW4oYWJzKGRpci54KSwgYWJzKGRpci55KSkgKyBkaXJSZWR1Y2UpO1xcbiAgICBkaXIgPSBtaW4odmVjMihGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgIG1heCh2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBkaXIgKiByY3BEaXJNaW4pKSAqIGludmVyc2VWUDtcXG5cXG4gICAgdmVjMyByZ2JBID0gMC41ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDEuMCAvIDMuMCAtIDAuNSkpLnh5eiArXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMi4wIC8gMy4wIC0gMC41KSkueHl6KTtcXG4gICAgdmVjMyByZ2JCID0gcmdiQSAqIDAuNSArIDAuMjUgKiAoXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAtMC41KS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogMC41KS54eXopO1xcblxcbiAgICBmbG9hdCBsdW1hQiA9IGRvdChyZ2JCLCBsdW1hKTtcXG4gICAgaWYgKChsdW1hQiA8IGx1bWFNaW4pIHx8IChsdW1hQiA+IGx1bWFNYXgpKVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkEsIHRleENvbG9yLmEpO1xcbiAgICBlbHNlXFxuICAgICAgICBjb2xvciA9IHZlYzQocmdiQiwgdGV4Q29sb3IuYSk7XFxuICAgIHJldHVybiBjb2xvcjtcXG59XFxuXFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGZ4YWEodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKiB2UmVzb2x1dGlvbiwgdlJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxuXFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG59XG5cbkZYQUFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRlhBQUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGWEFBRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBGWEFBRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cbkZYQUFGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlciggcmVuZGVyZXIgKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBTcHJpdGVNYXNrRmlsdGVyIGNsYXNzXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSB0YXJnZXQgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZU1hc2tGaWx0ZXIoc3ByaXRlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgICB2TWFza0Nvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFza0Nvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgLy8gY2hlY2sgY2xpcCEgdGhpcyB3aWxsIHN0b3AgdGhlIG1hc2sgYmxlZWRpbmcgb3V0IGZyb20gdGhlIGVkZ2VzXFxuICAgIHZlYzIgdGV4dCA9IGFicyggdk1hc2tDb29yZCAtIDAuNSApO1xcbiAgICB0ZXh0ID0gc3RlcCgwLjUsIHRleHQpO1xcbiAgICBmbG9hdCBjbGlwID0gMS4wIC0gbWF4KHRleHQueSwgdGV4dC54KTtcXG4gICAgdmVjNCBvcmlnaW5hbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgIHZlYzQgbWFza3kgPSB0ZXh0dXJlMkQobWFzaywgdk1hc2tDb29yZCk7XFxuICAgIG9yaWdpbmFsICo9IChtYXNreS5yICogbWFza3kuYSAqIGFscGhhICogY2xpcCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG9yaWdpbmFsO1xcbn1cXG5cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbWFzazogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUuX3RleHR1cmUgfSxcbiAgICAgICAgICAgIGFscGhhOiAgICAgICAgICB7IHR5cGU6ICdmJywgdmFsdWU6IDF9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcbn1cblxuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0byByZXRyaWV2ZSB0aGUgZmlsdGVyIGZyb21cbiAqIEBwYXJhbSBpbnB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gb3V0cHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqL1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5tYXNrLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLl90ZXh0dXJlO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLndvcmxkQWxwaGE7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZU1hc2tGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgdXNlZCB0byBtb3ZlIHRoZSBkaXNwbGFjZW1lbnQgbWFwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdsTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBCbGVuZE1vZGVNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn1cblxuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZE1vZGVNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGVNYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMtdXAgdGhlIGdpdmVuIGJsZW5kTW9kZSBmcm9tIFdlYkdMJ3MgcG9pbnQgb2Ygdmlldy5cbiAqXG4gKiBAcGFyYW0gYmxlbmRNb2RlIHtudW1iZXJ9IHRoZSBibGVuZE1vZGUsIHNob3VsZCBiZSBhIFBpeGkgY29uc3QsIHN1Y2ggYXMgYFBJWEkuQkxFTkRfTU9ERVMuQUREYC4gU2VlXG4gKiAge0BsaW5rIFBJWEkuQkxFTkRfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLnNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChibGVuZE1vZGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblxuICAgIHZhciBtb2RlID0gdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuY3VycmVudEJsZW5kTW9kZV07XG4gICAgdGhpcy5yZW5kZXJlci5nbC5ibGVuZEZ1bmMobW9kZVswXSwgbW9kZVsxXSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgUXVhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL1F1YWQnKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXTtcblxuICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgIHJlbmRlclRhcmdldDpyZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LFxuICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgIGJvdW5kczpudWxsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldFtdfVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICAvLyBsaXN0ZW4gZm9yIGNvbnRleHQgYW5kIHVwZGF0ZSBuZWNlc3NhcnkgYnVmZmVyc1xuICAgIC8vVE9ETyBtYWtlIHRoaXMgZHluYW1pYyFcbiAgICAvL1RPRE8gdGVzdCB0aGlzIG91dCBieSBmb3JjZXMgcG93ZXIgb2YgdHdvP1xuICAgIHRoaXMudGV4dHVyZVNpemUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgcmVuZGVyZXIud2lkdGgsIHJlbmRlcmVyLmhlaWdodCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmcmFtZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBudWxsO1xufVxuXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbHRlck1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlck1hbmFnZXI7XG5cblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVQb29sLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucXVhZCA9IG5ldyBRdWFkKGdsKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcGFyYW0gYnVmZmVyIHtBcnJheUJ1ZmZlcn1cbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuc2V0RmlsdGVyU3RhY2sgPSBmdW5jdGlvbiAoIGZpbHRlclN0YWNrIClcbntcbiAgICB0aGlzLmZpbHRlclN0YWNrID0gZmlsdGVyU3RhY2s7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlciBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGZpbHRlcnMge1BJWEkuQWJzdHJhY3RGaWxlcltdfSB0aGUgZmlsdGVycyB0aGF0IHdpbGwgYmUgcHVzaGVkIHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFja1xuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5wdXNoRmlsdGVyID0gZnVuY3Rpb24gKHRhcmdldCwgZmlsdGVycylcbntcbiAgICAvLyBnZXQgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0Li5cbiAgICAvLyBUT0RPIHJlcGxhY2UgY2xvbmUgd2l0aCBhIGNvcHkgdG8gc2F2ZSBvYmplY3QgY3JlYXRpb25cbiAgICB2YXIgYm91bmRzID0gdGFyZ2V0LmZpbHRlckFyZWEgPyB0YXJnZXQuZmlsdGVyQXJlYS5jbG9uZSgpIDogdGFyZ2V0LmdldEJvdW5kcygpO1xuXG4gICAgLy9ib3VuZHMgPSBib3VuZHMuY2xvbmUoKTtcblxuICAgIC8vIHJvdW5kIG9mZiB0aGUgcmVjdGFuZ2xlIHRvIGdldCBhIG5pY2Ugc21vb29vb29vdGggZmlsdGVyIDopXG4gICAgYm91bmRzLnggPSBib3VuZHMueCB8IDA7XG4gICAgYm91bmRzLnkgPSBib3VuZHMueSB8IDA7XG4gICAgYm91bmRzLndpZHRoID0gYm91bmRzLndpZHRoIHwgMDtcbiAgICBib3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCB8IDA7XG5cblxuICAgIC8vIHBhZGRpbmchXG4gICAgdmFyIHBhZGRpbmcgPSBmaWx0ZXJzWzBdLnBhZGRpbmcgfCAwO1xuICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLnkgLT0gcGFkZGluZztcbiAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcblxuXG4gICAgaWYodGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vVE9ETyB0aGlzIHdpbGwgYnJlYWsgaWYgdGhlIHJlbmRlclRleHR1cmUgdHJhbnNmb3JtIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYSB0cmFuc2xhdGlvbi5cbiAgICAgICAgLy9XaWxsIG5lZWQgdG8gdGFrZSB0aGUgZnVsbCBtYXRyaXggdHJhbnNmb3JtIGludG8gYWNvdW50Li5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm07XG5cbiAgICAgICAgYm91bmRzLnggKz0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSArPSB0cmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdGhpcy5jYXBGaWx0ZXJBcmVhKCBib3VuZHMgKTtcblxuICAgICAgICBib3VuZHMueCAtPSB0cmFuc2Zvcm0udHg7XG4gICAgICAgIGJvdW5kcy55IC09IHRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG4gICAgfVxuXG4gICAgaWYoYm91bmRzLndpZHRoID4gMCAmJiBib3VuZHMuaGVpZ2h0ID4gMClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gYm91bmRzO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBjbGVhciB0aGUgdGV4dHVyZS4uXG4gICAgICAgIHRleHR1cmUuY2xlYXIoKTtcblxuICAgICAgICAvLyBUT0RPIGdldCByaWQgb2Ygb2JqZWN0IGNyZWF0aW9uIVxuICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OiB0ZXh0dXJlLFxuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJzXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIHB1c2ggc29tdGhpbmcgb24gdG8gdGhlIHN0YWNrIHRoYXQgaXMgZW1wdHlcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucG9wRmlsdGVyID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2sucG9wKCk7XG4gICAgdmFyIHByZXZpb3VzRmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2tbdGhpcy5maWx0ZXJTdGFjay5sZW5ndGgtMV07XG5cbiAgICB2YXIgaW5wdXQgPSBmaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIGlmIHRoZSByZW5kZXJUYXJnZXQgaXMgbnVsbCB0aGVuIHdlIGRvbid0IGFwcGx5IHRoZSBmaWx0ZXIgYXMgaXRzIG9mZnNjcmVlblxuICAgIGlmKCFmaWx0ZXJEYXRhLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gcHJldmlvdXNGaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIHVzZSBwcm9ncmFtXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpbnB1dC5mcmFtZTtcblxuICAgIHRoaXMucXVhZC5tYXAodGhpcy50ZXh0dXJlU2l6ZSwgaW5wdXQuZnJhbWUpO1xuXG5cbiAgICAvLyBUT0RPLi4gdGhpcyBwcm9iYWJseSBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBmaWx0ZXJzID0gZmlsdGVyRGF0YS5maWx0ZXI7XG5cbiAgICAvLyBhc3N1bWluZyBhbGwgZmlsdGVycyBmb2xsb3cgdGhlIGNvcnJlY3QgZm9ybWF0Pz9cbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgbm9ybWFsIGJsZW5kbW9kZSFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKENPTlNULkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDEpXG4gICAge1xuICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICBpZiAoZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJzWzBdLmFwcGx5RmlsdGVyKCB0aGlzLnJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0ICk7XG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBpbnB1dCApO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBmbGlwVGV4dHVyZSA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcFRleHR1cmUgPSB0aGlzLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGZpbHRlcnNbaV07XG5cbiAgICAgICAgICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSB0aGVuIHNldHRpbmcgdGhpcyBlYWNoIHRpbWU/XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlci5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIGZsb3BUZXh0dXJlICk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gZmxpcFRleHR1cmU7XG4gICAgICAgICAgICBmbGlwVGV4dHVyZSA9IGZsb3BUZXh0dXJlO1xuICAgICAgICAgICAgZmxvcFRleHR1cmUgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aC0xXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIG91dHB1dCApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBmbGlwVGV4dHVyZSApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxvcFRleHR1cmUgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyRGF0YS5maWx0ZXI7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgUmVuZGVyVGFyZ2V0XG4gKiBAcmV0dXJuIHtSZW5kZXJUYXJnZXR9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICggY2xlYXIgKVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSB0aGlzLnRleHR1cmVQb29sLnBvcCgpIHx8IG5ldyBSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJlci5nbCwgdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQsIENPTlNULlNDQUxFX01PREVTLkxJTkVBUiwgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uICogQ09OU1QuRklMVEVSX1JFU09MVVRJT04pO1xuICAgIHJlbmRlclRhcmdldC5mcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJUYXJnZXQ7XG59O1xuXG4vKlxuICogUmV0dXJucyBhIFJlbmRlclRhcmdldCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UmVuZGVyVGFyZ2V0fSBUaGUgUmVuZGVyVGFyZ2V0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnJldHVyblJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5wdXNoKCByZW5kZXJUYXJnZXQgKTtcbn07XG5cbi8qXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBzaGFkZXIge1NoYWRlcn0gVGhlIHNoYWRlciB0byB1cGxvYWRcbiAqIEBwYXJhbSBpbnB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAoc2hhZGVyLCBpbnB1dFRhcmdldCwgb3V0cHV0VGFyZ2V0LCBjbGVhcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQob3V0cHV0VGFyZ2V0KTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIG91dHB1dFRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2hhZGVyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBDYW4gdGhpcyBiZSBjYWNoZWQgYW5kIG5vdCBgdG9BcnJheWBlZCBlYWNoIGZyYW1lP1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcblxuICAgIC8vVE9ETyBjYW4gdGhpcyBiZSBvcHRpbWlzZWQ/XG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuLypcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMiAqIDQgKiA0KTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuKi9cblxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGlucHV0VGFyZ2V0LnRleHR1cmUpO1xuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIG1hcHBlZCBtYXRyaXhcbiAqIEBwYXJhbSBmaWx0ZXJBcmVhIHtSZWN0YW5nbGV9IFRoZSBmaWx0ZXIgYXJlYVxuICogQHBhcmFtIHNwcml0ZSB7U3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICogQHBhcmFtIG91dHB1dE1hdHJpeCB7TWF0cml4fSBAYWx2aW5cbiAqL1xuLy8gVE9ETyBwbGF5aW5nIGFyb3VuZCBoZXJlLi4gdGhpcyBpcyB0ZW1wb3JhcnkgLSAod2lsbCBlbmQgdXAgaW4gdGhlIHNoYWRlcilcbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeCA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhLCBzcHJpdGUsIG91dHB1dE1hdHJpeClcbntcbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBzcHJpdGUud29ybGRUcmFuc2Zvcm0uY29weShtYXRoLk1hdHJpeC5URU1QX01BVFJJWCksXG4gICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIHZhciBtYXBwZWRNYXRyaXggPSBvdXRwdXRNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIC8vIHNjYWxlLi5cbiAgICB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICBtYXBwZWRNYXRyaXgudHJhbnNsYXRlKGZpbHRlckFyZWEueCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIGZpbHRlckFyZWEueSAvIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0ICk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIHJhdGlvKTtcblxuICAgIHZhciB0cmFuc2xhdGVTY2FsZVggPSAodGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAvIHRleHR1cmUud2lkdGgpO1xuICAgIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0ZXh0dXJlLmhlaWdodCk7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS50eCAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuICAgIHdvcmxkVHJhbnNmb3JtLnR5IC89IHRleHR1cmUud2lkdGggKiB0cmFuc2xhdGVTY2FsZVg7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIG1hcHBlZE1hdHJpeC5wcmVwZW5kKHdvcmxkVHJhbnNmb3JtKTtcblxuICAgIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIG1hcHBlZE1hdHJpeC5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShzcHJpdGUuYW5jaG9yLngsIHNwcml0ZS5hbmNob3IueSk7XG5cbiAgICByZXR1cm4gbWFwcGVkTWF0cml4O1xuXG4gICAgLy8gS2VlcGluZyB0aGUgb3JnaW5hbCBhcyBhIHJlbWluZGVyIHRvIG1lIG9uIGhvdyB0aGlzIHdvcmtzIVxuICAgIC8vXG4gICAgLy8gdmFyIG0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuICAgIC8vIC8vIHNjYWxlLi5cbiAgICAvLyB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICAvLyBtLnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCk7XG5cblxuICAgIC8vIG0uc2NhbGUoMSAsIHJhdGlvKTtcblxuXG4gICAgLy8gdmFyIHRyYW5zZm9ybSA9IHd0LmNsb25lKCk7XG5cbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyA2MjApO1xuICAgIC8vIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyAzODApO1xuXG4gICAgLy8gdHJhbnNmb3JtLnR4IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICAvLyB0cmFuc2Zvcm0udHkgLz0gNjIwICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgLy8gdHJhbnNmb3JtLmludmVydCgpO1xuXG4gICAgLy8gdHJhbnNmb3JtLmFwcGVuZChtKTtcblxuICAgIC8vIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIC8vIHRyYW5zZm9ybS5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgLy8gcmV0dXJuIHRyYW5zZm9ybTtcbn07XG5cbi8qXG4gKiBDb25zdHJhaW5zIHRoZSBmaWx0ZXIgYXJlYSB0byB0aGUgdGV4dHVyZSBzaXplXG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWEgd2Ugd2FudCB0byBjYXBcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY2FwRmlsdGVyQXJlYSA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhKVxue1xuICAgIGlmIChmaWx0ZXJBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCArPSBmaWx0ZXJBcmVhLng7XG4gICAgICAgIGZpbHRlckFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlckFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLmhlaWdodCArPSBmaWx0ZXJBcmVhLnk7XG4gICAgICAgIGZpbHRlckFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnggKyBmaWx0ZXJBcmVhLndpZHRoID4gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLndpZHRoID0gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAtIGZpbHRlckFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGZpbHRlckFyZWEueSArIGZpbHRlckFyZWEuaGVpZ2h0ID4gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAtIGZpbHRlckFyZWEueTtcbiAgICB9XG59O1xuXG4vKlxuICogUmVzaXplcyBhbGwgdGhlIHJlbmRlciB0YXJnZXRzIGluIHRoZSBwb29sXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMudGV4dHVyZVNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZVBvb2xbaV0ucmVzaXplKCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgZmlsdGVyIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGZpbHRlciBzdGFjay5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucXVhZC5kZXN0cm95KCk7XG4gICAgXG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG4gICAgXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IG51bGw7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGV4dHVyZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVQb29sID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBBbHBoYU1hc2tGaWx0ZXIgPSByZXF1aXJlKCcuLi9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuc3RlbmNpbFN0YWNrID0gW107XG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ID0gMDtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbCA9IFtdO1xufVxuXG5NYXNrTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFNwcml0ZU1hc2sodGFyZ2V0LCBtYXNrRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IG1hc2sgZnJvbSB0aGUgbWFzayBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIGlmIChtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnBvcFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB2YXIgYWxwaGFNYXNrRmlsdGVyID0gdGhpcy5hbHBoYU1hc2tQb29sLnBvcCgpO1xuXG4gICAgaWYgKCFhbHBoYU1hc2tGaWx0ZXIpXG4gICAge1xuICAgICAgICBhbHBoYU1hc2tGaWx0ZXIgPSBbbmV3IEFscGhhTWFza0ZpbHRlcihtYXNrRGF0YSldO1xuICAgIH1cblxuICAgIGFscGhhTWFza0ZpbHRlclswXS5tYXNrU3ByaXRlID0gbWFza0RhdGE7XG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGFyZ2V0LCBhbHBoYU1hc2tGaWx0ZXIpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBmaWx0ZXJzID0gdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgdGhpcy5hbHBoYU1hc2tQb29sLnB1c2goZmlsdGVycyk7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoTWFzayhtYXNrRGF0YSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcE1hc2sobWFza0RhdGEpO1xufTtcblxuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpLFxuICAgIENvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXInKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTaGFkZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heEF0dGlicyA9IDEwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXhBdHRpYnM7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YWNrID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcblxuLy8gICAgdGhpcy5pbml0UGx1Z2lucygpO1xufVxuXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hbmFnZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oU2hhZGVyTWFuYWdlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyTWFuYWdlcjtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRyaWJ1dGUgY29ycmVjdGx5IGFzIHRoaXMgdGVuZHMgdG8gdmFyeVxuICAgIHRoaXMubWF4QXR0aWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVE9ETyAtIFdoeSBhcmUgdGhlc2Ugbm90IHBsdWdpbnM/IFdlIGNhbid0IGRlY291cGxlIHByaW1pdGl2ZXMgdW5sZXNzIHRoZXkgYXJlLi4uLlxuICAgIHRoaXMuZGVmYXVsdFNoYWRlciA9IG5ldyBUZXh0dXJlU2hhZGVyKHRoaXMpO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBuZXcgQ29tcGxleFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogVGFrZXMgdGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gaW4gcGFyYW1ldGVycyBhbmQgdXBsb2FkcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJzIHthbnlbXX0gYXR0cmlic1xuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRBdHRyaWJzID0gZnVuY3Rpb24gKGF0dHJpYnMpXG57XG4gICAgLy8gcmVzZXQgdGVtcCBzdGF0ZVxuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMudGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yICh2YXIgYSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbYXR0cmlic1thXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYlN0YXRlW2ldICE9PSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgc2hhZGVyLlxuICpcbiAqIEBwYXJhbSBzaGFkZXIge1BJWEkuU2hhZGVyfSB0aGUgc2hhZGVyIHRvIHVwbG9hZFxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKVxue1xuICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5fY3VycmVudElkID09PSBzaGFkZXIudWlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IHNoYWRlci51aWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBzaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmdsLnVzZVByb2dyYW0oc2hhZGVyLnByb2dyYW0pO1xuICAgIHRoaXMuc2V0QXR0cmlicyhzaGFkZXIuYXR0cmlidXRlcyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBvYmplY3QuXG4gKlxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLmRlc3Ryb3koKTtcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBudWxsO1xufTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFza01hbmFnZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG51bGw7XG59XG5cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBtYXNrIHN0YWNrIHRoYXQgaXMgdXNlZCBieSB0aGlzIG1hbmFnZXIuXG4gKlxuICogQHBhcmFtIHN0ZW5jaWxNYXNrU3RhY2sge1BJWEkuU3RlbmNpbE1hc2tTdGFja30gVGhlIG1hc2sgc3RhY2tcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuc2V0TWFza1N0YWNrID0gZnVuY3Rpb24gKCBzdGVuY2lsTWFza1N0YWNrIClcbntcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBzdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIGlmIChzdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suIEBhbHZpblxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hdHRhY2hTdGVuY2lsQnVmZmVyKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBzbXMgPSB0aGlzLnN0ZW5jaWxNYXNrU3RhY2s7XG5cbiAgICB0aGlzLmJpbmRHcmFwaGljcyhncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xuICAgICAgICBzbXMucmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIHNtcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wdXNoKHdlYkdMRGF0YSk7XG5cbiAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgLy8gZHJhdyB0aGUgdHJpYW5nbGUgc3RyaXAhXG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IGEgcXVhZCB0byBpbmNyZW1lbnQuLlxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cbiAgICBzbXMuY291bnQrKztcbn07XG5cbi8qKlxuICogVE9ETyB0aGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIVxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5iaW5kR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICAvL2lmICh0aGlzLl9jdXJyZW50R3JhcGhpY3MgPT09IGdyYXBoaWNzKXJldHVybjtcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGJpbmQgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgdmFyIHNoYWRlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICAvKlxuICAgICAgICBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMuY29sb3IuX2xvY2F0aW9uLCB3ZWJHTERhdGEuY29sb3IpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDIsIDApO1xuXG4gICAgICAgIC8vIG5vdyBkbyB0aGUgcmVzdC4uXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICovXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmFjdGl2YXRlUHJpbWl0aXZlU2hhZGVyKCk7XG4vLyAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnByaW1pdGl2ZVNoYWRlcjtcbiAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cblxuICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4vLyAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG5cbiAgICAgIC8qICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTFmKHNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEpO1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCA0LCBnbC5GTE9BVCwgZmFsc2UsNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTsqL1xuICAgIH1cbn07XG5cbi8qKlxuICogVE9ETyBAYWx2aW5cbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTdGVuY2lsID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wb3AoKTtcblxuICAgIHNtcy5jb3VudC0tO1xuXG4gICAgaWYgKHNtcy5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgLy8gdGhlIHN0YWNrIGlzIGVtcHR5IVxuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICAgICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuXG4gICAgICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSAobGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOVkVSVCk7XG5cbiAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50ICs9IDI7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAvLyAgY29uc29sZS5sb2coXCI8PD4+XCIpXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcblxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCksIDB4RkYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5LRUVQKTtcblxuXG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgbWFzayBzdGFjay5cbiAqXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjayA9IG51bGw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119IFRoZSBtYXNrIGRhdGEgc3RydWN0dXJlIHRvIHVzZVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgXG4gICAgLy9UT0RPIEZJWFxuICAgIGlmIChtYXNrRGF0YS5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy51cGRhdGVHcmFwaGljcyhtYXNrRGF0YSwgdGhpcy5yZW5kZXJlci5nbCk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119XG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuXG4gICAgdGhpcy5wb3BTdGVuY2lsKG1hc2tEYXRhLCBtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YVswXSk7XG59O1xuXG4iLCIvKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gV2ViR0xNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMucmVuZGVyZXIub24oJ2NvbnRleHQnLCB0aGlzLm9uQ29udGV4dENoYW5nZSwgdGhpcyk7XG59XG5cbldlYkdMTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFuYWdlcjtcblxuLyoqXG4gKiBHZW5lcmljIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXHQvLyBkbyBzb21lIGNvZGVzIGluaXQhXG59O1xuXG4vKipcbiAqIEdlbmVyaWMgZGVzdHJveSBtZXRob2RzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICovXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVuZGVyZXIub2ZmKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IGNvbXBsZXggcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBDb21wbGV4UHJpbWl0aXZlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gdmVjNChjb2xvciAqIGFscGhhICogdGludCwgYWxwaGEpOycsLy9cIiAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdGludDogICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwgMCwgMF0gfSxcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgY29sb3I6ICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwwLDBdIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYUNvbG9yOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCYXNlIHNoYWRlciBjbGFzcyBmb3IgUElYSSBtYW5hZ2VkIHNoYWRlcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFt1bmlmb3Jtc10ge29iamVjdH0gVW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxuICogQHBhcmFtIFthdHRyaWJ1dGVzXSB7b2JqZWN0fSBBdHRyaWJ1dGVzIGZvciB0aGlzIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKVxue1xuICAgIGlmICghdmVydGV4U3JjIHx8ICFmcmFnbWVudFNyYylcbiAgICB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpeGkuanMgRXJyb3IuIFNoYWRlciByZXF1aXJlcyB2ZXJ0ZXhTcmMgYW5kIGZyYWdtZW50U3JjJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmdsID0gc2hhZGVyTWFuYWdlci5yZW5kZXJlci5nbDtcblxuICAgIC8vVE9ETyBtYXliZSB3ZSBzaG91bGQgcGFzcyByZW5kZXJlciByYXRoZXIgdGhhbiBzaGFkZXIgbWFuZ2VyPz8gZm9vZCBmb3IgdGhvdWdodC4uXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyID0gc2hhZGVyTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBwcm9ncmFtLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xQcm9ncmFtfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF0dHJpYnV0ZXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRleHR1cmUgY291bnRlclxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYztcblxuICAgIHRoaXMuaW5pdCgpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc2hhZGVyIGFuZCB1c2VzIGl0XG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29tcGlsZSgpO1xuXG4gICAgdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLnVuaWZvcm1zKSk7XG4gICAgdGhpcy5jYWNoZUF0dHJpYnV0ZUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpKTtcbn07XG5cbi8qKlxuICogQ2FjaGVzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHVuaWZvcm0gZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSB1bmlmb3JtcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyA9IGZ1bmN0aW9uIChrZXlzKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMudW5pZm9ybXNba2V5c1tpXV0uX2xvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBrZXlzW2ldKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSBhdHRyaWJ1dGVzIHRvIGNhY2hlXG4gKi9cblNoYWRlci5wcm90b3R5cGUuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNba2V5c1tpXV0gPSB0aGlzLmdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4uLlxuXG4gICAgLy8gQmVnaW4gd29yc3QgaGFjayBldmEgLy9cblxuICAgIC8vIFdIWT8/PyBPTkxZIG9uIG15IGNocm9tZSBwaXhlbCB0aGUgbGluZSBhYm92ZSByZXR1cm5zIC0xIHdoZW4gdXNpbmcgZmlsdGVycz9cbiAgICAvLyBtYXliZSBpdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdsIGNvbnRleHQuXG4gICAgLy8gSSdtIGNvbnZpbmNlZCB0aGlzIGlzIGEgYnVnIGluIHRoZSBjaHJvbWUgYnJvd3NlciBhcyB0aGVyZSBpcyBOTyByZWFzb24gd2h5IHRoaXMgc2hvdWxkIGJlIHJldHVybmluZyAtMSBlc3BlY2lhbGx5IGFzIGl0IG9ubHkgbWFuaWZlc3RzIG9uIG15IGNocm9tZSBwaXhlbFxuICAgIC8vIElmIHRoZXJlcyBhbnkgd2ViR0wgcGVvcGxlIHRoYXQga25vdyB3aHkgY291bGQgaGFwcGVuIHBsZWFzZSBoZWxwIDopXG4gICAgLy8gaWYgKHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPT09IC0xKXtcbiAgICAvLyAgICAgdGhpcy5hdHRyaWJ1dGVzLmFDb2xvciA9IDI7XG4gICAgLy8gfVxuXG4gICAgLy8gRW5kIHdvcnN0IGhhY2sgZXZhIC8vXG59O1xuXG4vKipcbiAqIEF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZCBjcmVhdGVzIHRoZSBwcm9ncmFtLlxuICpcbiAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX1cbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIGdsVmVydFNoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5WRVJURVhfU0hBREVSLCB0aGlzLnZlcnRleFNyYyk7XG4gICAgdmFyIGdsRnJhZ1NoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuZnJhZ21lbnRTcmMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xGcmFnU2hhZGVyKTtcbiAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcblxuICAgIC8vIGlmIGxpbmtpbmcgZmFpbHMsIHRoZW4gbG9nIGFuZCBjbGVhbnVwXG4gICAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BpeGkuanMgRXJyb3I6IENvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlci4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuVkFMSURBVEVfU1RBVFVTJywgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuZ2V0RXJyb3IoKScsIGdsLmdldEVycm9yKCkpO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcHJvZ3JhbSBpbmZvIGxvZywgbG9nIGl0XG4gICAgICAgIGlmIChnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSAhPT0gJycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBXYXJuaW5nOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpJywgZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgcHJvZ3JhbSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgc29tZSBzaGFkZXJzXG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsVmVydFNoYWRlcik7XG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsRnJhZ1NoYWRlcik7XG5cbiAgICByZXR1cm4gKHRoaXMucHJvZ3JhbSA9IHByb2dyYW0pO1xufTtcblxuLyoqXG4qIEFkZHMgYSBuZXcgdW5pZm9ybVxuKlxuKiBAcGFyYW0gdW5pZm9ybSB7b2JqZWN0fSB0aGUgbmV3IHVuaWZvcm0gdG8gYXR0YWNoXG4qL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBsb2NhdGlvbiA9IHVuaWZvcm0uX2xvY2F0aW9uLFxuICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWUsXG4gICAgICAgIGdsID0gdGhpcy5nbCxcbiAgICAgICAgaSwgaWw7XG5cbiAgICBzd2l0Y2ggKHVuaWZvcm0udHlwZSlcbiAgICB7XG4gICAgICAgIGNhc2UgJ2InOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlID8gMSA6IDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGludCB2YWx1ZVxuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBzaW5nbGUgZmxvYXQgdmFsdWVcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDIpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoMykgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoNCkgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzRmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSAyRCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjInOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgM0QgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YzJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDREIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2NCc6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzFmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzRmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTInOlxuICAgICAgICBjYXNlICdtYXQyJzpcbiAgICAgICAgY2FzZSAnTWF0cml4MmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICBjYXNlICdtYXQzJzpcbiAgICAgICAgY2FzZSAnTWF0cml4M2Z2JzpcblxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICdtNCc6XG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICBjYXNlICdNYXRyaXg0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgQ29sb3IgVmFsdWVcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGludGVnZXJzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIChKUyBvciB0eXBlZCBhcnJheSlcbiAgICAgICAgY2FzZSAnZnYxJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDJEIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjJ2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDIgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDJdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMiArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAzRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yzdic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgzICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMyArIDJdICAgPSB2YWx1ZVtpXS56O1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHVuaWZvcm0uX2FycmF5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDREIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjR2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDRdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgMl0gICA9IHZhbHVlW2ldLno7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAzXSAgID0gdmFsdWVbaV0udztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBQSVhJLlRleHR1cmVcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgIGNhc2UgJ3NhbXBsZXIyRCc6XG5cbiAgICAgICAgICAgIGlmICghdW5pZm9ybS52YWx1ZSB8fCAhdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFjdGl2YXRlIHRoaXMgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0aGlzLnRleHR1cmVDb3VudF0pO1xuXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgICAgICAgICBpZiAoIXRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2FtcGxlcjJEKHVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSB0ZXh0dXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb25lLi5cbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gICAgICAgICAgICAvLyBzZXQgdW5pZm9ybSB0byB0ZXh0dXJlIGluZGV4XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkodW5pZm9ybS5fbG9jYXRpb24sIHRoaXMudGV4dHVyZUNvdW50KTtcblxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IG5leHQgdGV4dHVyZSBpZFxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBTaGFkZXIgV2FybmluZzogVW5rbm93biB1bmlmb3JtIHR5cGU6ICcgKyB1bmlmb3JtLnR5cGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnVuaWZvcm1zKVxuICAgIHtcbiAgICAgICAgdGhpcy5zeW5jVW5pZm9ybSh0aGlzLnVuaWZvcm1zW2tleV0pO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJbml0aWFsaXNlcyBhIFNhbXBsZXIyRCB1bmlmb3JtICh3aGljaCBtYXkgb25seSBiZSBhdmFpbGFibGUgbGF0ZXIgb24gYWZ0ZXIgaW5pdFVuaWZvcm1zIG9uY2UgdGhlIHRleHR1cmUgaGFzIGxvYWRlZClcbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuaW5pdFNhbXBsZXIyRCA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGlmICh1bmlmb3JtLnRleHR1cmVEYXRhKVxuICAgIHtcblxuICAgICAgICAvL1RPRE8gbW92ZSB0aGlzLi4uXG4gICAgICAgIHZhciBkYXRhID0gdW5pZm9ybS50ZXh0dXJlRGF0YTtcblxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG5cbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGxpZWRBbHBoYSk7XG4gICAgICAgIC8vIEdMVGV4dHVyZSA9IG1hZyBsaW5lYXIsIG1pbiBsaW5lYXJfbWlwbWFwX2xpbmVhciwgd3JhcCByZXBlYXQgKyBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgLy8gR0xUZXh0dXJlTGluZWFyID0gbWFnL21pbiBsaW5lYXIsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdFJlcGVhdCA9IG1hZy9taW4gTkVBUkVTVCwgd3JhcCByZXBlYXRcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdCA9IG1hZy9taW4gbmVhcmVzdCwgd3JhcCBjbGFtcFxuICAgICAgICAvLyBBdWRpb1RleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDUxMiwgaGVpZ2h0IDIsIGJvcmRlciAwXG4gICAgICAgIC8vIEtleVRleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDI1NiwgaGVpZ2h0IDIsIGJvcmRlciAwXG5cbiAgICAgICAgLy8gIG1hZ0ZpbHRlciBjYW4gYmU6IGdsLkxJTkVBUiwgZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgb3IgZ2wuTkVBUkVTVFxuICAgICAgICAvLyAgd3JhcFMvVCBjYW4gYmU6IGdsLkNMQU1QX1RPX0VER0Ugb3IgZ2wuUkVQRUFUXG5cbiAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBkYXRhLmx1bWluYW5jZSA/IGdsLkxVTUlOQU5DRSA6IGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRleHR1cmUuc291cmNlKTtcblxuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZGF0YS5tYWdGaWx0ZXIgPyBkYXRhLm1hZ0ZpbHRlciA6IGdsLkxJTkVBUiApO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFICk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZGF0YS53cmFwVCA/IGRhdGEud3JhcFQgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5zaGFkZXJNYW5hZ2VyLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgc2hhZGVyLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmdsLmRlbGV0ZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgIHRoaXMudW5pZm9ybXMgPSBudWxsO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleFNyYyA9IG51bGw7XG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IG51bGw7XG59O1xuXG5TaGFkZXIucHJvdG90eXBlLl9nbENvbXBpbGUgPSBmdW5jdGlvbiAodHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIHRoaXMuZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc3JjKTtcbiAgICB0aGlzLmdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghdGhpcy5nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCB0aGlzLmdsLkNPTVBJTEVfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIGN1c3RvbVVuaWZvcm1zLCBjdXN0b21BdHRyaWJ1dGVzKVxue1xuICAgIHZhciB1bmlmb3JtcyA9IHtcblxuICAgICAgICB1U2FtcGxlcjogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiAwIH0sXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6ICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDFdKSB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21Vbmlmb3JtcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIHUgaW4gY3VzdG9tVW5pZm9ybXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVuaWZvcm1zW3VdID0gY3VzdG9tVW5pZm9ybXNbdV07XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBhVmVydGV4UG9zaXRpb246ICAgIDAsXG4gICAgICAgIGFUZXh0dXJlQ29vcmQ6ICAgICAgMCxcbiAgICAgICAgYUNvbG9yOiAgICAgICAgICAgICAwXG4gICAgfTtcblxuICAgIGlmIChjdXN0b21BdHRyaWJ1dGVzKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgYSBpbiBjdXN0b21BdHRyaWJ1dGVzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2FdID0gY3VzdG9tQXR0cmlidXRlc1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IHZlcnRleFNyYyB8fCBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcyk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKGdsKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IFRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgZnJhZ21lbnRTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYztcblxuICAgIFNoYWRlci5jYWxsKHRoaXMsIGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTsvLywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xuXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuLi9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBCYXNlIGZvciBhIGNvbW1vbiBvYmplY3QgcmVuZGVyZXIgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHN5c3RlbSByZW5kZXJlciBwbHVnaW4uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBPYmplY3RSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59XG5cblxuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9iamVjdFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RSZW5kZXJlcjtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHJlbmRlcmVyIGFuZCBzZXRzIHRoZSBzaGFkZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gc2V0IHRoZSBzaGFkZXIuLlxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgcmVuZGVyZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIGZsdXNoZXNcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gZmx1c2ghXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyByZW5kZXIgdGhlIG9iamVjdFxufTtcbiIsIi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHF1YWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gVGhlIGdsIGNvbnRleHQgZm9yIHRoaXMgcXVhZCB0byB1c2UuXG4gKi9cbmZ1bmN0aW9uIFF1YWQoZ2wpXG57XG4gICAgLypcbiAgICAgKiB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbi8vICAgIHRoaXMudGV4dHVyZXMgPSBuZXcgVGV4dHVyZVV2cygpO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMjAwLDAsXG4gICAgICAgIDIwMCwyMDAsXG4gICAgICAgIDAsMjAwXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBxdWFkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KFtcbiAgICAgICAgMCwwLFxuICAgICAgICAxLDAsXG4gICAgICAgIDEsMSxcbiAgICAgICAgMCwxXG4gICAgXSk7XG5cbi8vICAgIHZhciB3aGl0ZSA9ICgweEZGRkZGRiA+PiAxNikgKyAoMHhGRkZGRkYgJiAweGZmMDApICsgKCgweEZGRkZGRiAmIDB4ZmYpIDw8IDE2KSArICgxICogMjU1IDw8IDI0KTtcbiAgICAvL1RPRE8gY29udmVydCB0aGlzIHRvIGEgMzIgdW5zaWduZWQgaW50IGFycmF5XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIGNvbXBvbmVudHMgb2YgdGhlIHRyaWFuZ2xlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDFcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KFtcbiAgICAgICAgMCwgMSwgMiwgMCwgMywgMlxuICAgIF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIHZlcnRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICg4ICsgOCArIDE2KSAqIDQsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59XG5cblF1YWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUXVhZDtcblxuLyoqXG4gKiBNYXBzIHR3byBSZWN0YW5nbGUgdG8gdGhlIHF1YWRcbiAqIEBwYXJhbSByZWN0IHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZpcnN0IHJlY3RhbmdsZVxuICogQHBhcmFtIHJlY3QyIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHNlY29uZCByZWN0YW5nbGVcbiAqL1xuUXVhZC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24ocmVjdCwgcmVjdDIpXG57XG4gICAgdmFyIHggPSAwOyAvL3JlY3QyLnggLyByZWN0LndpZHRoO1xuICAgIHZhciB5ID0gMDsgLy9yZWN0Mi55IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1swXSA9IHg7XG4gICAgdGhpcy51dnNbMV0gPSB5O1xuXG4gICAgdGhpcy51dnNbMl0gPSB4ICsgcmVjdDIud2lkdGggLyByZWN0LndpZHRoO1xuICAgIHRoaXMudXZzWzNdID0geTtcblxuICAgIHRoaXMudXZzWzRdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIHRoaXMudXZzWzZdID0geDtcbiAgICB0aGlzLnV2c1s3XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIC8vLyAtLS0tLVxuICAgIHggPSByZWN0Mi54O1xuICAgIHkgPSByZWN0Mi55O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1swXSA9IHg7XG4gICAgdGhpcy52ZXJ0aWNlc1sxXSA9IHk7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzJdID0geCArIHJlY3QyLndpZHRoO1xuICAgIHRoaXMudmVydGljZXNbM10gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1s0XSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzVdID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudmVydGljZXNbNl0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0O1xuXG4gICAgdGhpcy51cGxvYWQoKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlciBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5RdWFkLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIFRPRE8gY291bGQgcHJvYmFibHkgYmUgcHVzaGVkIGludG8gb25lIHVwbG9hZCFcbiAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHRoaXMudmVydGV4QnVmZmVyICk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy52ZXJ0aWNlcyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgOCAqIDQsIHRoaXMudXZzKTtcblxuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDgpICogNCwgdGhpcy5jb2xvcnMpO1xufTtcblxuUXVhZC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWQ7XG5cblxuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKSxcbiAgICAgICAgXG4gICAgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuICAgIEdMRnJhbWVidWZmZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTEZyYW1lYnVmZmVyLFxuICAgIFxuICAgIFN0ZW5jaWxNYXNrU3RhY2sgPSByZXF1aXJlKCcuL1N0ZW5jaWxNYXNrU3RhY2snKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqL1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgaG9yaXpvbnRhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSB2ZXJ0aWNhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICogQHBhcmFtIHJvb3Qge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAqL1xudmFyIFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24sIHJvb3QpXG57XG4gICAgLy9UT0RPIFJlc29sdXRpb24gY291bGQgZ28gaGVyZSAoIGVnIGxvdyByZXMgYmx1cnMgKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vIG5leHQgdGltZSB0byBjcmVhdGUgYSBmcmFtZSBidWZmZXIgYW5kIHRleHR1cmVcblxuICAgIC8qKlxuICAgICAqIEEgZnJhbWUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEZyYW1lQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuXG4gICAgdGhpcy5jbGVhckNvbG9yID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIG9iamVjdCBhcyBhIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2JqZWN0J3MgdHJhbnNmb3JtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk1hdHJpeH1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lID0gbnVsbDtcbiAgICBcbiAgICB0aGlzLmRlZmF1bHRGcmFtZSA9IG5ldyBQSVhJLlJlY3RhbmdsZSgpO1xuICAgIHRoaXMuZGVzdGluYXRpb25GcmFtZSA9IG51bGw7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgc3RvcmVzIG1hc2tpbmcgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbEJ1ZmZlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzdGVuY2lsIG1hc2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gbmV3IFN0ZW5jaWxNYXNrU3RhY2soKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyBmaWx0ZXIgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDp0aGlzLFxuICAgICAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICAgICAgYm91bmRzOnRoaXMuc2l6ZVxuICAgICAgICB9XG4gICAgXTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEEgZnJhbWUgYnVmZmVyIG5lZWRzIGEgdGFyZ2V0IHRvIHJlbmRlciB0by4uXG4gICAgICAgICAgICBjcmVhdGUgYSB0ZXh0dXJlIGFuZCBiaW5kIGl0IGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAgICAgKi9cbiAgICAgICAgXG5cbiAgICAgICAvLyBUT0RPIGNoYW5nZSFcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGJ5IHRoZSBiYXNlIHRleHR1cmVcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGhpcy5mcmFtZUJ1ZmZlci50ZXh0dXJlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBtYWtlIGl0IGEgbnVsbCBmcmFtZWJ1ZmZlci4uXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZnJhbWVidWZmZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xufTtcblxuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRhcmdldDtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGFyZ2V0O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZmlsdGVyIHRleHR1cmUuXG4gKlxuICogQHBhcmFtIFtiaW5kPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIHdlIGJpbmQgb3VyIGZyYW1lYnVmZmVyIGJlZm9yZSBjbGVhcmluZz9cbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGNsZWFyQ29sb3IpXG57XG4gICAgdmFyIGNjID0gY2xlYXJDb2xvciB8fCB0aGlzLmNsZWFyQ29sb3JcbiAgICB0aGlzLmZyYW1lQnVmZmVyLmNsZWFyKGNjWzBdLGNjWzFdLGNjWzJdLGNjWzNdKS8vcixnLGIsYSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuYXR0YWNoU3RlbmNpbEJ1ZmZlciA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPRE8gY2hlY2sgaWYgc3RlbmNpbCBpcyBkb25lP1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBpcyB1c2VkIGZvciBtYXNraW5nIGluIHBpeGlcbiAgICAgKiBsZXRzIGNyZWF0ZSBvbmUgYW5kIHRoZW4gYWRkIGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVTdGVuY2lsKCk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCBpbml0aWFsaXNlcyB0aGUgdmlld3BvcnQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oZGVzdGluYXRpb25GcmFtZSwgc291cmNlRnJhbWUpXG57XG4gICAgLy9UT09EIHJlZmFjdG9yIHVzYWdlIG9mIGZyYW1lLi5cbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5iaW5kKCk7XG5cbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBkZXN0aW5hdGlvbkZyYW1lIHx8IHRoaXMuZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlZmF1bHRGcmFtZTtcbiAgICB0aGlzLnNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgdGhpcy5zb3VyY2VGcmFtZSB8fCBkZXN0aW5hdGlvbkZyYW1lO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUsIHRoaXMuc291cmNlRnJhbWUgKTtcblxuICAgIGlmKHRoaXMudHJhbnNmb3JtKVxuICAgIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFwcGVuZCh0aGlzLnRyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5kZXN0aW5hdGlvbkZyYW1lICE9PSB0aGlzLnNvdXJjZUZyYW1lKVxuICAgIHtcbiAgICAgICAgZ2wuZW5hYmxlKGdsLlNDSVNTT1JfVEVTVCk7XG4gICAgICAgIGdsLnNjaXNzb3IodGhpcy5kZXN0aW5hdGlvbkZyYW1lLngsIHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGgqIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgIH1cblxuXG4gICAgLy8gVE9ETyAtIGRvZXMgbm90IG5lZWQgdG8gYmUgdXBkYXRlZCBhbGwgdGhlIHRpbWU/P1xuICAgIGdsLnZpZXdwb3J0KHRoaXMuZGVzdGluYXRpb25GcmFtZS54LHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuXG5cbn07XG5cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBwcm9qZWN0aW9uIG1hdHJpeCBiYXNlZCBvbiBhIHByb2plY3Rpb24gZnJhbWUgKHdoaWNoIGlzIGEgcmVjdGFuZ2xlKVxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jYWxjdWxhdGVQcm9qZWN0aW9uID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcblxuICAgIHNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHBtLmlkZW50aXR5KCk7XG5cbiAgICAvLyBUT0RPOiBtYWtlIGRlc3Qgc2NhbGUgc291cmNlXG4gICAgaWYgKCF0aGlzLnJvb3QpXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBzb3VyY2VGcmFtZS54ICogcG0uYTtcbiAgICAgICAgcG0udHkgPSAtMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IC0xIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBSZXNpemVzIHRoZSB0ZXh0dXJlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7TnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gaGVpZ2h0IHtOdW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgd2lkdGggPSB3aWR0aCB8IDA7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDtcblxuICAgIGlmICh0aGlzLnNpemUud2lkdGggPT09IHdpZHRoICYmIHRoaXMuc2l6ZS5oZWlnaHQgPT09IGhlaWdodCkgXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZGVmYXVsdEZyYW1lLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5kZWZhdWx0RnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5yZXNpemUod2lkdGggKiB0aGlzLnJlc29sdXRpb24sIGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCBwcm9qZWN0aW9uRnJhbWUgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHJlbmRlciB0YXJnZXQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFN0ZW5jaWxNYXNrU3RhY2soKVxue1xuXHQvKipcbiAgICAgKiBUaGUgYWN0dWFsIHN0YWNrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVE9ETyBAYWx2aW5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvdW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb3VudCA9IDA7XG59XG5cblN0ZW5jaWxNYXNrU3RhY2sucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RlbmNpbE1hc2tTdGFjaztcbm1vZHVsZS5leHBvcnRzID0gU3RlbmNpbE1hc2tTdGFjaztcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBNYXBzIGdsIGJsZW5kIGNvbWJpbmF0aW9ucyB0byBXZWJHTFxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcbiAgICBvYmplY3QgPSBvYmplY3QgfHwge307XG5cbiAgICAvL1RPRE8gLSBwcmVtdWx0aXBseSBhbHBoYSB3b3VsZCBiZSBkaWZmZXJlbnQuXG4gICAgLy9hZGQgYSBib29sZWFuIGZvciB0aGF0IVxuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdICAgICAgICA9IFtnbC5PTkUsICAgICAgIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLkRTVF9BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk1VTFRJUExZXSAgICAgID0gW2dsLkRTVF9DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gW2dsLlNSQ19BTFBIQSwgZ2wuT05FXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VdICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSFVFXSAgICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcblxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpO1xuIiwiQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbCwgb2JqZWN0KVxue1xuXHRvYmplY3Q9IG9iamVjdCB8fCB7fTtcblxuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlBPSU5UU10gICAgICAgICA9IGdsLlBPSU5UUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FU10gICAgICAgICAgPSBnbC5MSU5FUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FX0xPT1BdICAgICAgPSBnbC5MSU5FX0xPT1A7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9TVFJJUF0gICAgID0gZ2wuTElORV9TVFJJUDtcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5UUklBTkdMRVNdICAgICAgPSBnbC5UUklBTkdMRVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBdID0gZ2wuVFJJQU5HTEVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXSAgID0gZ2wuVFJJQU5HTEVfRkFOO1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGk7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIFNwcml0ZSBvYmplY3QgaXMgdGhlIGJhc2UgZm9yIGFsbCB0ZXh0dXJlZCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIHRvIHRoZSBzY3JlZW5cbiAqXG4gKiBBIHNwcml0ZSBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGFuIGltYWdlIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSBmb3IgdGhpcyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gU3ByaXRlKHRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW5jaG9yIHNldHMgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLDAgdGhpcyBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMC41LDAuNSBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyBjZW50ZXJlZFxuICAgICAqIFNldHRpbmcgdGhlIGFuY2hvciB0byAxLDEgd291bGQgbWVhbiB0aGUgdGV4dHVyZSdzIG9yaWdpbiBwb2ludCB3aWxsIGJlIHRoZSBib3R0b20gcmlnaHQgY29ybmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuYW5jaG9yID0gbmV3IG1hdGguUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgc3ByaXRlICh0aGlzIGlzIGluaXRpYWxseSBzZXQgYnkgdGhlIHRleHR1cmUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBIHZhbHVlIG9mIDB4RkZGRkZGIHdpbGwgcmVtb3ZlIGFueSB0aW50IGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaGFkZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBzcHJpdGUuIFNldCB0byBudWxsIHRvIHJlbW92ZSBhIGN1cnJlbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5BYnN0cmFjdEZpbHRlcnxQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBjYWNoZWQgdmFsdWUgb2YgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8vIGNhbGwgdGV4dHVyZSBzZXR0ZXJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG4gICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlXG4gICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy52ZXJ0ZXhEYXRhID0gbmV3IEZsb2F0MzJBcnJheSg4KTtcbn1cblxuLy8gY29uc3RydWN0b3JcblNwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuc2NhbGUueCkgKiB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBNYXRoLmFicyh0aGlzLnNjYWxlLnkpICogdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc2lnbiA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS55KSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gc2lnbiAqIHZhbHVlIC8gdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5TcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIHNvIGlmIF93aWR0aCBpcyAwIHRoZW4gd2lkdGggd2FzIG5vdCBzZXQuLlxuICAgIGlmICh0aGlzLl93aWR0aClcbiAgICB7XG4gICAgICAgIHRoaXMuc2NhbGUueCA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS54KSAqIHRoaXMuX3dpZHRoIC8gdGhpcy50ZXh0dXJlLmZyYW1lLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnkgPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgKiB0aGlzLl9oZWlnaHQgLyB0aGlzLnRleHR1cmUuZnJhbWUuaGVpZ2h0O1xuICAgIH1cbn07XG5cblNwcml0ZS5wcm90b3R5cGUuY2FjbHVsYXRlVmVydGljZXMgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICB3dCA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICBhID0gd3QuYSwgYiA9IHd0LmIsIGMgPSB3dC5jLCBkID0gd3QuZCwgdHggPSB3dC50eCwgdHkgPSB3dC50eSxcbiAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDEsXG4gICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG4gICAgICAgIFxuICAgIGlmICh0cmltKVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkIGFuZCBpcyBub3QgYSB0aWxpbmdzcHJpdGUgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgIHcxID0gdHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgaDEgPSB0cmltLnkgLSB0aGlzLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgIGgwID0gaDEgKyB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG4gICAgfVxuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzBdID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVsxXSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzJdID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVszXSA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs0XSA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbNV0gPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs2XSA9IGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbN10gPSBkICogaDAgKyBiICogdzEgKyB0eTtcblxuXG59XG5cbi8qKlxuKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMudGV4dHVyZURpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMudmVydGV4RGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICB9XG4gICAgXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBTcHJpdGUgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgc3ByaXRlXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG4gICAgICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudmVydGV4RGlydHkgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWluWCxcbiAgICAgICAgICAgIG1heFgsXG4gICAgICAgICAgICBtaW5ZLFxuICAgICAgICAgICAgbWF4WSxcbiAgICAgICAgICAgIHZlcnRleERhdGEgPSB0aGlzLnZlcnRleERhdGE7XG5cbiAgICAgICAgdmFyIHgxID0gdmVydGV4RGF0YVswXVxuICAgICAgICB2YXIgeTEgPSB2ZXJ0ZXhEYXRhWzFdXG5cbiAgICAgICAgdmFyIHgyID0gdmVydGV4RGF0YVsyXVxuICAgICAgICB2YXIgeTIgPSB2ZXJ0ZXhEYXRhWzNdXG5cbiAgICAgICAgdmFyIHgzID0gdmVydGV4RGF0YVs0XVxuICAgICAgICB2YXIgeTMgPSB2ZXJ0ZXhEYXRhWzVdXG5cbiAgICAgICAgdmFyIHg0ID0gdmVydGV4RGF0YVs2XVxuICAgICAgICB2YXIgeTQgPSB2ZXJ0ZXhEYXRhWzddXG5cbiAgICAgICAgbWluWCA9IHgxO1xuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MTtcbiAgICAgICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICAgICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICAgICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgICAgICBtYXhYID0geDE7XG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkxO1xuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIC8vIGNoZWNrIGZvciBjaGlsZHJlblxuICAgICAgICBpZih0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkQm91bmRzID0gdGhpcy5jb250YWluZXJHZXRCb3VuZHMoKTtcblxuICAgICAgICAgICAgdzAgPSBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgdzEgPSBjaGlsZEJvdW5kcy54ICsgY2hpbGRCb3VuZHMud2lkdGg7XG4gICAgICAgICAgICBoMCA9IGNoaWxkQm91bmRzLnk7XG4gICAgICAgICAgICBoMSA9IGNoaWxkQm91bmRzLnkgKyBjaGlsZEJvdW5kcy5oZWlnaHQ7XG5cbiAgICAgICAgICAgIG1pblggPSAobWluWCA8IHcwKSA/IG1pblggOiB3MDtcbiAgICAgICAgICAgIG1pblkgPSAobWluWSA8IGgwKSA/IG1pblkgOiBoMDtcblxuICAgICAgICAgICAgbWF4WCA9IChtYXhYID4gdzEpID8gbWF4WCA6IHcxO1xuICAgICAgICAgICAgbWF4WSA9IChtYXhZID4gaDEpID8gbWF4WSA6IGgxO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2JvdW5kcy54ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB0aGlzLl9ib3VuZHMueSA9IC10aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRoaXMuX2JvdW5kcy5oZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgcmV0dXJuIHRoaXMuX2JvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHNwcml0ZVxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5TcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy50ZXh0dXJlLmNyb3Aud2lkdGggPD0gMCB8fCB0aGlzLnRleHR1cmUuY3JvcC5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyAgSWdub3JlIG51bGwgc291cmNlc1xuICAgIGlmICh0aGlzLnRleHR1cmUudmFsaWQpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgICAgICB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgICAgICBkeCxcbiAgICAgICAgICAgIGR5LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ7XG5cbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgICAgICAvLyBJZiBzbW9vdGhpbmdFbmFibGVkIGlzIHN1cHBvcnRlZCBhbmQgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIHNtb290aGluZyBwcm9wZXJ0eSBmb3IgdGhpcyB0ZXh0dXJlXG4gICAgICAgIHZhciBzbW9vdGhpbmdFbmFibGVkID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5zY2FsZU1vZGUgPT09IENPTlNULlNDQUxFX01PREVTLkxJTkVBUjtcbiAgICAgICAgaWYgKHJlbmRlcmVyLnNtb290aFByb3BlcnR5ICYmIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldICE9PSBzbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0W3JlbmRlcmVyLnNtb290aFByb3BlcnR5XSA9IHNtb290aGluZ0VuYWJsZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgdGV4dHVyZSBpcyB0cmltbWVkIHdlIG9mZnNldCBieSB0aGUgdHJpbSB4L3ksIG90aGVyd2lzZSB3ZSB1c2UgdGhlIGZyYW1lIGRpbWVuc2lvbnNcblxuICAgICAgICBpZih0ZXh0dXJlLnJvdGF0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2lkdGggPSB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBkeCA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgXG4gICAgICAgICAgICBkeCArPSB3aWR0aDtcblxuICAgICAgICAgICAgd3QudHggPSBkeSAqIHd0LmEgKyBkeCAqIHd0LmMgKyB3dC50eDtcbiAgICAgICAgICAgIHd0LnR5ID0gZHkgKiB3dC5iICsgZHggKiB3dC5kICsgd3QudHk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gd3QuYTtcbiAgICAgICAgICAgIHd0LmEgID0gLXd0LmM7XG4gICAgICAgICAgICB3dC5jICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICB0ZW1wID0gd3QuYjtcbiAgICAgICAgICAgIHd0LmIgID0gLXd0LmQ7XG4gICAgICAgICAgICB3dC5kICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICAvLyB0aGUgYW5jaG9yIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCBhYm92ZSwgc28gbGV0cyBzZXQgaXQgdG8gemVyb1xuICAgICAgICAgICAgZHggPSAwO1xuICAgICAgICAgICAgZHkgPSAwO1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC53aWR0aDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0ZXh0dXJlLnRyaW0ud2lkdGggOiB0aGlzLmFuY2hvci54ICogLXRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRleHR1cmUudHJpbS5oZWlnaHQgOiB0aGlzLmFuY2hvci55ICogLXRleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfVxuXG5cblxuICAgICAgICAvLyBBbGxvdyBmb3IgcGl4ZWwgcm91bmRpbmdcbiAgICAgICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB3dC5hLFxuICAgICAgICAgICAgICAgIHd0LmIsXG4gICAgICAgICAgICAgICAgd3QuYyxcbiAgICAgICAgICAgICAgICB3dC5kLFxuICAgICAgICAgICAgICAgICh3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMCxcbiAgICAgICAgICAgICAgICAod3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uKSB8IDBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGR4ID0gZHggfCAwO1xuICAgICAgICAgICAgZHkgPSBkeSB8IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgd3QudHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHd0LnR5ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcblxuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIC8vIFRPRE8gY2xlYW4gdXAgY2FjaGluZyAtIGhvdyB0byBjbGVhbiB1cCB0aGUgY2FjaGVzP1xuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC54ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmNyb3AueSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeSAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHNwcml0ZSBhbmQgb3B0aW9uYWxseSBpdHMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBbZGVzdHJveVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgY3VycmVudCB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICovXG5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveVRleHR1cmUsIGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYW5jaG9yID0gbnVsbDtcblxuICAgIGlmIChkZXN0cm95VGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUuZGVzdHJveShkZXN0cm95QmFzZVRleHR1cmUpO1xuICAgIH1cblxuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn07XG5cbi8vIHNvbWUgaGVscGVyIGZ1bmN0aW9ucy4uXG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgY3Jvc3Mtb3JpZ2luIHBhcmFtZXRlclxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBzY2FsZSBtb2RlLCBzZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGZyYW1lSWRcbiAqL1xuU3ByaXRlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTcHJpdGUodGV4dHVyZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGJhc2VkIG9uIGFuIGltYWdlIHVybFxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZUlkIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblNwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFNwcml0ZShUZXh0dXJlLmZyb21JbWFnZShpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSk7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyJyksXG4gICAgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzJyksXG4gICAgZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIGdsQ29yZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFNwcml0ZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9TcHJpdGVSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKiBSZW5kZXJlciBkZWRpY2F0ZWQgdG8gZHJhd2luZyBhbmQgYmF0Y2hpbmcgc3ByaXRlcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZVJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIHZhbHVlcyBzZW50IGluIHRoZSB2ZXJ0ZXggYnVmZmVyLlxuICAgICAqIHBvc2l0aW9uWCwgcG9zaXRpb25ZLCBjb2xvclIsIGNvbG9yRywgY29sb3JCID0gNVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydFNpemUgPSA1O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIHZlcnRleCBpbmZvcm1hdGlvbiBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBpbWFnZXMgaW4gdGhlIFNwcml0ZUJhdGNoIGJlZm9yZSBpdCBmbHVzaGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IENPTlNULlNQUklURV9CQVRDSF9TSVpFOyAvLyAyMDAwIGlzIGEgbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIC8gZGVza3RvcFxuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBpbiBvdXIgYmF0Y2hcbiAgICB2YXIgbnVtVmVydHMgPSAodGhpcy5zaXplICogNCkgKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYmF0Y2gsIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgICB2YXIgbnVtSW5kaWNlcyA9IHRoaXMuc2l6ZSAqIDY7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgdmVydGV4IGRhdGEgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdGhlIHZlcnRleCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEFycmF5QnVmZmVyKG51bVZlcnRzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgRmxvYXQzMkFycmF5IGZvciBwb3NpdGlvbnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG4gICAgXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBVaW50MzJBcnJheSBmb3IgdXZzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciBjb2xvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXMgb2YgdGhlIGdlb21ldHJ5IChxdWFkcykgdG8gZHJhd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzKHRoaXMuc2l6ZSlcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICBcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIHRoaXMuZ3JvdXBzID0gW107XG4gICAgXG4gICAgLy9UT0RPIC0gMzAwIGlzIGEgYml0IG1hZ2ljLCBmaWd1cmUgb3V0IGEgbmljZXIgYW1vdW50IVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zaXplOyBpKyspIFxuICAgIHtcbiAgICAgICAgdGhpcy5ncm91cHNbaV0gPSB7dGV4dHVyZXM6W10sIHRleHR1cmVDb3VudDowLCBpZHM6W10sIHNpemU6MCwgc3RhcnQ6MCwgYmxlbmQ6MH07IFxuICAgIH07XG4gICAgXG4gICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG5cbiAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbnVsbDsgICAgXG59XG5cblxuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ByaXRlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZVJlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdzcHJpdGUnLCBTcHJpdGVSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMuTUFYX1RFWFRVRVMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpO1xuXG4gICAgdGhpcy5fc2hhZGVyID0gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIoZ2wsIHRoaXMuTUFYX1RFWFRVRVMpLy9uZXcgVGV4dHVyZVNoYWRlcihnbCk7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXI7XG5cbiAgICAvLyBjcmVhdGUgYSBjb3VwbGUgb2YgYnVmZmVyc1xuICAgIHRoaXMudmVydGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlcihnbCwgbnVsbCwgZ2wuRFlOQU1JQ19EUkFXKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyKGdsLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIC8vIGJ1aWxkIHRoZSB2YW8gb2JqZWN0IHRoYXQgd2lsbCByZW5kZXIuLlxuICAgIHRoaXMudmFvID0gbmV3IGdsQ29yZS5WZXJ0ZXhBcnJheU9iamVjdChnbCk7XG5cbiAgICB0aGlzLnZhby5hZGRJbmRleCh0aGlzLmluZGV4QnVmZmVyKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCBnbC5VTlNJR05FRF9TSE9SVCwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDIgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgZ2wuVU5TSUdORURfQllURSwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDMgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlSWQsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDQgKiA0KTtcblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IDk5OTk5O1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHJlbmRlciB3aGVuIHVzaW5nIHRoaXMgc3ByaXRlYmF0Y2hcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChzcHJpdGUpXG57XG4gICAgLy9UT0RPIHNldCBibGVuZCBtb2Rlcy4uXG4gICAgLy8gY2hlY2sgdGV4dHVyZS4uXG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID49IHRoaXMuc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICB9XG5cbiAgXG4gICAgLy8gZ2V0IHRoZSB1dnMgZm9yIHRoZSB0ZXh0dXJlXG4gICBcblxuICAgIC8vIGlmIHRoZSB1dnMgaGF2ZSBub3QgdXBkYXRlZCB0aGVuIG5vIHBvaW50IHJlbmRlcmluZyBqdXN0IHlldCFcbiAgICBpZiAoIXNwcml0ZS50ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgIC8vIHB1c2ggYSB0ZXh0dXJlLlxuICAgIC8vIGluY3JlbWVudCB0aGUgYmF0Y2hzaXplXG4gICAgdmFyIG5leHRUZXh0dXJlID0gIHNwcml0ZS50ZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIHZhciBjdXJyZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRHcm91cDtcbiAgICB2YXIgaTtcblxuICAgIGlmKHRoaXMuY3VycmVudFRleHR1cmUgIT09IG5leHRUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG5leHRUZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgaWYoIW5leHRUZXh0dXJlLl9lbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5fZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5faWQgPSB0aGlzLnRleHR1cmVDb3VudDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy50ZXh0dXJlQ291bnQgPT09IHRoaXMuTUFYX1RFWFRVRVMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50OyBpKyspIFxuICAgICAgICAgICAgICAgIHsgICAgIFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnNpemUgPSB0aGlzLmN1cnJlbnRJbmRleCAtIGN1cnJlbnRHcm91cC5zdGFydDtcbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC5zdGFydCA9IHRoaXMuY3VycmVudEluZGV4O1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCsrXSA9IG5leHRUZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcbiAgICB9XG5cbiAgICAvLyBUT0RPIHRyaW0/P1xuICAgIHZhciBpbmRleCA9IHRoaXMuY3VycmVudEluZGV4ICogdGhpcy52ZXJ0Qnl0ZVNpemU7XG5cbiAgICB0aGlzLmN1cnJlbnRJbmRleCsrO1xuXG4gICAgLy8gdXBsb2FkIHRoZSBzcHJpdGUgZWxlbWV0bnMuLi5cbiAgICAvLyB0aGV5IGhhdmUgYWxsIHJlYWR5IGJlZW4gY2FsY3VsYXRlZCBzbyB3ZSBqdXN0IG5lZWQgdG8gcHVzaCB0aGVtIGludG8gdGhlIGJ1ZmZlci5cbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG4gICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMucG9zaXRpb25zO1xuICAgIHZhciB2ZXJ0ZXhEYXRhID0gc3ByaXRlLnZlcnRleERhdGFcbiAgICB2YXIgdGludCA9IChzcHJpdGUudGludCA+PiAxNikgKyAoc3ByaXRlLnRpbnQgJiAweGZmMDApICsgKChzcHJpdGUudGludCAmIDB4ZmYpIDw8IDE2KSArIChzcHJpdGUud29ybGRBbHBoYSAqIDI1NSA8PCAyNCk7XG4gICAgdmFyIHV2cyA9IHNwcml0ZS50ZXh0dXJlLl91dnMudXZzX3VpbnQzMjtcbiAgICAvL3h5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVswXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzFdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzBdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkOyBcbiAgICBcbiAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMl07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVszXTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1sxXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNF07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs1XTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1syXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs2XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzddO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzNdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb250ZW50IGFuZCBlbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPT09IDApcmV0dXJuO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gdGhpcy5jdXJyZW50R3JvdXAuc3RhcnQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgeyAgICAgXG4gICAgICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVzW2ldLl9lbmFibGVkID0gZmFsc2U7XG4gICAgfTtcbiAgIFxuICAgIC8vIGRvIHNvbWUgc21hcnQgYXJyYXkgc3R1ZmYuLlxuICAgIC8vIGRvdWJsZSBzaXplIHNvIHdlIGRvbnQgYWx3YXkgc3ViYXJyYXkgdGhlIGVsZW1lbnRzLi5cbiAgICAvLyB1cGxvYWQgdGhlIHZlcnRzIHRvIHRoZSBidWZmZXJcbiAgICBpZiAodGhpcy5jdXJyZW50QmF0Y2hTaXplID4gKCB0aGlzLnNpemUgKiAwLjUgKSApXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlci51cGxvYWQodGhpcy52ZXJ0aWNlcywgMCwgdHJ1ZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIG8gayAuLiBzdWIgYXJyYXkgaXMgU0xPVz4/XG4gICAgICAgIHZhciB2aWV3ID0gdGhpcy5wb3NpdGlvbnMuc3ViYXJyYXkoMCwgdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZSk7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh2aWV3LCAwLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBiaW5kIHNoYWRlci4uXG4gICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHRoaXMuX3NoYWRlcik7XG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggMCApO1xuXG4gICAgLy8vIHJlbmRlciB0aGUgZ3JvdXBzLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5ncm91cENvdW50OyBpKyspIHtcbiAgICAgICAgXG4gICAgICAgIHZhciBncm91cCA9IHRoaXMuZ3JvdXBzW2ldO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ3JvdXAudGV4dHVyZUNvdW50OyBqKyspIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFRleHR1cmUoZ3JvdXAudGV4dHVyZXNbal0sIGopO1xuICAgICAgICB9O1xuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGdyb3VwLnNpemUgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgZ3JvdXAuc3RhcnQgKiA2ICogMik7XG4gICAgfTtcblxuICAgIC8vIHJlc2V0IGVsZW1lbnRzIGZvciB0aGUgbmV4dCBmbHVzaFxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cENvdW50ID0gMDtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcbiAgICB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgc3ByaXRlIGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZhby5iaW5kKCk7XG59O1xuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xuICAgIHRoaXMudmFvLnVuYmluZCgpO1xufTtcbi8qKlxuICogRGVzdHJveXMgdGhlIFNwcml0ZUJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMudmVydGljZXMgPSBudWxsO1xuICAgIHRoaXMucG9zaXRpb25zID0gbnVsbDtcbiAgICB0aGlzLmNvbG9ycyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMudmVydGV4QnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuc3ByaXRlcyA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuXG5mdW5jdGlvbiBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgbWF4VGV4dHVyZXMpXG57XG4gICAgdmFyIHZlcnRleFNyYyA9IFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcbmF0dHJpYnV0ZSBmbG9hdCBhVGV4dHVyZUlkO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyBmbG9hdCB2VGV4dHVyZUlkO1xcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2VGV4dHVyZUlkID0gYVRleHR1cmVJZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cIjtcbiAgICB2YXIgZnJhZ21lbnRTcmMgPSAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxuJyArIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKSArIFwiXFxuXFxuXCIgKyBmcmFnVGVtcGxhdGVcblxuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMucmVwbGFjZSgvXFwlXFwlL2dpLCAnMTYnKTtcblxuICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXG4gICAgdmFyIHNhbXBsZVZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkrKykge1xuICAgICAgICBzYW1wbGVWYWx1ZXNbaV0gPSBpO1xuICAgIH07XG5cbiAgICBzaGFkZXIuYmluZCgpO1xuICAgIHNoYWRlci51bmlmb3Jtcy51U2FtcGxlcnMgPSBzYW1wbGVWYWx1ZXM7XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVNhbXBsZVNyYyhtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgc3JjID0gJ3ZlYzQgZ2V0U2FtcGxlRnJvbUFycmF5KHNhbXBsZXIyRCB0ZXh0dXJlc1slJV0sIGludCBuZHgsIHZlYzIgdXYpIHtcXG5cXG52ZWM0IGNvbG9yOydcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSBcbiAgICB7XG4gICAgICAgIGlmKGkgPiAwKXNyYyArPSAnXFxuZWxzZSAnO1xuICAgICAgICBpZihpIDwgbWF4VGV4dHVyZXMtMSlzcmMgKz0gJ2lmKG5keCA9PSAnICsgaSArICcpJztcbiAgICAgICAgc3JjICs9ICdcXG57JztcbiAgICAgICAgc3JjICs9ICdcXG5cXHRjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlc1snK2krJ10sIHV2KTsnO1xuICAgICAgICBzcmMgKz0gJ1xcbn0nO1xuICAgIH07XG5cbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAncmV0dXJuIGNvbG9yOyc7XG4gICAgc3JjICs9ICdcXG59JztcblxuICAgIHJldHVybiBzcmM7XG59XG5cbnZhciBmcmFnVGVtcGxhdGUgPSBbXG5cbiAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuICAgICd2YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7JyxcbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJzWyUlXTsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnZ2xfRnJhZ0NvbG9yID0gZ2V0U2FtcGxlRnJvbUFycmF5KHVTYW1wbGVycywgaW50KHZUZXh0dXJlSWQpLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvcjsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcjtcbiIsInZhciBTcHJpdGUgPSByZXF1aXJlKCcuLi9zcHJpdGVzL1Nwcml0ZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgVGV4dCBPYmplY3Qgd2lsbCBjcmVhdGUgYSBsaW5lIG9yIG11bHRpcGxlIGxpbmVzIG9mIHRleHQuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJyBpbiB5b3VyIHRleHQgc3RyaW5nLFxuICogb3IgYWRkIGEgd29yZFdyYXAgcHJvcGVydHkgc2V0IHRvIHRydWUgYW5kIGFuZCB3b3JkV3JhcFdpZHRoIHByb3BlcnR5IHdpdGggYSB2YWx1ZSBpbiB0aGUgc3R5bGUgb2JqZWN0LlxuICpcbiAqIEEgVGV4dCBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGEgc3RyaW5nIGFuZCBhIHN0eWxlIG9iamVjdFxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dCA9IG5ldyBQSVhJLlRleHQoJ1RoaXMgaXMgYSBwaXhpIHRleHQnLHtmb250IDogJzI0cHggQXJpYWwnLCBmaWxsIDogMHhmZjEwMTAsIGFsaWduIDogJ2NlbnRlcid9KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBbc3R5bGVdIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnRdIHtzdHJpbmd9IGRlZmF1bHQgJ2JvbGQgMjBweCBBcmlhbCcgVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gKiBAcGFyYW0gW3N0eWxlLmZpbGw9J2JsYWNrJ10ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdCBzaW5nbGUgbGluZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZV0ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBzdHJva2UgZS5nICdibHVlJywgJyNGQ0ZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZVRoaWNrbmVzcz0wXSB7bnVtYmVyfSBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgc3Ryb2tlLiBEZWZhdWx0IGlzIDAgKG5vIHN0cm9rZSlcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXAsIGl0IG5lZWRzIHdvcmRXcmFwIHRvIGJlIHNldCB0byB0cnVlXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvdz1mYWxzZV0ge2Jvb2xlYW59IFNldCBhIGRyb3Agc2hhZG93IGZvciB0aGUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93QW5nbGU9TWF0aC5QSS80XSB7bnVtYmVyfSBTZXQgYSBhbmdsZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAqIEBwYXJhbSBbc3R5bGUucGFkZGluZz0wXSB7bnVtYmVyfSBPY2Nhc2lvbmFsbHkgc29tZSBmb250cyBhcmUgY3JvcHBlZCBvbiB0b3Agb3IgYm90dG9tLiBBZGRpbmcgc29tZSBwYWRkaW5nIHdpbGxcbiAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVKb2luPSdtaXRlciddIHtzdHJpbmd9IFRoZSBsaW5lSm9pbiBwcm9wZXJ0eSBzZXRzIHRoZSB0eXBlIG9mIGNvcm5lciBjcmVhdGVkLCBpdCBjYW4gcmVzb2x2ZVxuICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAqICAgICAgb3IgaW5jcmVhc2UgdGhlIHNwaWtpbmVzcyBvZiByZW5kZXJlZCB0ZXh0LlxuICovXG5mdW5jdGlvbiBUZXh0KHRleHQsIHN0eWxlLCByZXNvbHV0aW9uKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgZWxlbWVudCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gdG9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGhcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIGNhbnZhcy5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXModGhpcy5jYW52YXMpO1xuICAgIHRleHR1cmUudHJpbSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuICAgIFNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3ByaXRlLnByb3RvdHlwZSk7XG5UZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHQ7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHQ7XG5cblRleHQuZm9udFByb3BlcnRpZXNDYWNoZSA9IHt9O1xuVGV4dC5mb250UHJvcGVydGllc0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuVGV4dC5mb250UHJvcGVydGllc0NvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHQucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueCAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dCwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc2NhbGUueSAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlIC8gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBzdHlsZSBvZiB0aGUgdGV4dFxuICAgICAqXG4gICAgICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmZvbnQ9J2JvbGQgMjBwdCBBcmlhbCddIHtzdHJpbmd9IFRoZSBzdHlsZSBhbmQgc2l6ZSBvZiB0aGUgZm9udFxuICAgICAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGVnICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnN0cm9rZT0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlZyAnYmx1ZScsICcjRkNGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICAgICAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcFdpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIGF0IHdoaWNoIHRleHQgd2lsbCB3cmFwXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSGVpZ2h0XSB7bnVtYmVyfSBUaGUgbGluZSBoZWlnaHQsIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgc3BhY2UgdGhhdCBhIGxldHRlciB1c2VzXG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfG51bWJlcn0gQSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgb24gdGhlIGRyb3BzaGFkb3cgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzZdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0JsdXI9MF0ge251bWJlcn0gU2V0IGEgc2hhZG93IGJsdXIgcmFkaXVzXG4gICAgICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICAgICAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLnRleHRCYXNlbGluZT0nYWxwaGFiZXRpYyddIHtzdHJpbmd9IFRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dCB0aGF0IGlzIHJlbmRlcmVkLlxuICAgICAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gICAgICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gICAgICogQHBhcmFtIFtzdHlsZS5taXRlckxpbWl0PTEwXSB7bnVtYmVyfSBUaGUgbWl0ZXIgbGltaXQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdtaXRlcicgbGluZUpvaW4gbW9kZS4gVGhpcyBjYW4gcmVkdWNlXG4gICAgICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICBzdHlsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdHlsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3R5bGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZmlsbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5maWxsID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5maWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5zdHJva2UgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5zdHJva2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmRyb3BTaGFkb3dDb2xvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlLmZvbnQgPSBzdHlsZS5mb250IHx8ICdib2xkIDIwcHQgQXJpYWwnO1xuICAgICAgICAgICAgc3R5bGUuZmlsbCA9IHN0eWxlLmZpbGwgfHwgJ2JsYWNrJztcbiAgICAgICAgICAgIHN0eWxlLmFsaWduID0gc3R5bGUuYWxpZ24gfHwgJ2xlZnQnO1xuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gc3R5bGUuc3Ryb2tlIHx8ICdibGFjayc7IC8vcHJvdmlkZSBhIGRlZmF1bHQsIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2lzc3Vlcy8xMzZcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZVRoaWNrbmVzcyA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyB8fCAwO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXAgPSBzdHlsZS53b3JkV3JhcCB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLndvcmRXcmFwV2lkdGggPSBzdHlsZS53b3JkV3JhcFdpZHRoIHx8IDEwMDtcblxuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvdyA9IHN0eWxlLmRyb3BTaGFkb3cgfHwgZmFsc2U7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3IgfHwgJyMwMDAwMDAnO1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0FuZ2xlID0gc3R5bGUuZHJvcFNoYWRvd0FuZ2xlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93QW5nbGUgOiBNYXRoLlBJIC8gNjtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSA9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlIDogNTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXIgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dCbHVyIDogMDsgLy9zaGFkb3dCbHVyIGlzICcwJyBieSBkZWZhdWx0IGFjY29yZGluZyB0byBIVE1MXG5cbiAgICAgICAgICAgIHN0eWxlLnBhZGRpbmcgPSBzdHlsZS5wYWRkaW5nIHx8IDA7XG5cbiAgICAgICAgICAgIHN0eWxlLnRleHRCYXNlbGluZSA9IHN0eWxlLnRleHRCYXNlbGluZSB8fCAnYWxwaGFiZXRpYyc7XG5cbiAgICAgICAgICAgIHN0eWxlLmxpbmVKb2luID0gc3R5bGUubGluZUpvaW4gfHwgJ21pdGVyJztcbiAgICAgICAgICAgIHN0eWxlLm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0IHx8IDEwO1xuXG4gICAgICAgICAgICB0aGlzLl9zdHlsZSA9IHN0eWxlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjb3B5IGZvciB0aGUgdGV4dCBvYmplY3QuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHRleHQpe1xuICAgICAgICAgICAgdGV4dCA9IHRleHQudG9TdHJpbmcoKSB8fCAnICc7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dCA9PT0gdGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdGV4dDtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHN0eWxlID0gdGhpcy5fc3R5bGU7XG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuXG4gICAgLy8gd29yZCB3cmFwXG4gICAgLy8gcHJlc2VydmUgb3JpZ2luYWwgdGV4dFxuICAgIHZhciBvdXRwdXRUZXh0ID0gc3R5bGUud29yZFdyYXAgPyB0aGlzLndvcmRXcmFwKHRoaXMuX3RleHQpIDogdGhpcy5fdGV4dDtcblxuICAgIC8vIHNwbGl0IHRleHQgaW50byBsaW5lc1xuICAgIHZhciBsaW5lcyA9IG91dHB1dFRleHQuc3BsaXQoLyg/OlxcclxcbnxcXHJ8XFxuKS8pO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgd2lkdGhcbiAgICB2YXIgbGluZVdpZHRocyA9IG5ldyBBcnJheShsaW5lcy5sZW5ndGgpO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBmb250UHJvcGVydGllcyA9IHRoaXMuZGV0ZXJtaW5lRm9udFByb3BlcnRpZXMoc3R5bGUuZm9udCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBsaW5lV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQobGluZXNbaV0pLndpZHRoO1xuICAgICAgICBsaW5lV2lkdGhzW2ldID0gbGluZVdpZHRoO1xuICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxpbmVXaWR0aCk7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gbWF4TGluZVdpZHRoICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgd2lkdGggKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gKCB3aWR0aCArIHRoaXMuY29udGV4dC5saW5lV2lkdGggKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIC8vIGNhbGN1bGF0ZSB0ZXh0IGhlaWdodFxuICAgIHZhciBsaW5lSGVpZ2h0ID0gdGhpcy5zdHlsZS5saW5lSGVpZ2h0IHx8IGZvbnRQcm9wZXJ0aWVzLmZvbnRTaXplICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuXG4gICAgdmFyIGhlaWdodCA9IGxpbmVIZWlnaHQgKiBsaW5lcy5sZW5ndGg7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBoZWlnaHQgKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9ICggaGVpZ2h0ICsgdGhpcy5fc3R5bGUucGFkZGluZyAqIDIgKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMuY29udGV4dC5zY2FsZSggdGhpcy5yZXNvbHV0aW9uLCB0aGlzLnJlc29sdXRpb24pO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIH1cblxuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxTdHlsZT1cIiNGRjAwMDBcIjtcbiAgICAvL3RoaXMuY29udGV4dC5maWxsUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIHRoaXMuY29udGV4dC5mb250ID0gc3R5bGUuZm9udDtcbiAgICB0aGlzLmNvbnRleHQuc3Ryb2tlU3R5bGUgPSBzdHlsZS5zdHJva2U7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcbiAgICB0aGlzLmNvbnRleHQudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lO1xuICAgIHRoaXMuY29udGV4dC5saW5lSm9pbiA9IHN0eWxlLmxpbmVKb2luO1xuICAgIHRoaXMuY29udGV4dC5taXRlckxpbWl0ID0gc3R5bGUubWl0ZXJMaW1pdDtcblxuICAgIHZhciBsaW5lUG9zaXRpb25YO1xuICAgIHZhciBsaW5lUG9zaXRpb25ZO1xuXG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBpZiAoc3R5bGUuZHJvcFNoYWRvd0JsdXIgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3I7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Qmx1ciA9IHN0eWxlLmRyb3BTaGFkb3dCbHVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4U2hhZG93T2Zmc2V0ID0gTWF0aC5jb3Moc3R5bGUuZHJvcFNoYWRvd0FuZ2xlKSAqIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICAgICAgdmFyIHlTaGFkb3dPZmZzZXQgPSBNYXRoLnNpbihzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogbGluZUhlaWdodCkgKyBmb250UHJvcGVydGllcy5hc2NlbnQ7XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblggKyB4U2hhZG93T2Zmc2V0LCBsaW5lUG9zaXRpb25ZICsgeVNoYWRvd09mZnNldCArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9zZXQgY2FudmFzIHRleHQgc3R5bGVzXG4gICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmZpbGw7XG5cbiAgICAvL2RyYXcgbGluZXMgbGluZSBieSBsaW5lXG4gICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICBpZiAoc3R5bGUuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHlsZS5zdHJva2UgJiYgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVUZXh0dXJlKCk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLnRyaW0ueCA9IDA7XG4gICAgdGV4dHVyZS50cmltLnkgPSAtdGhpcy5fc3R5bGUucGFkZGluZztcblxuICAgIHRleHR1cmUudHJpbS53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRleHR1cmUudHJpbS5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgLSB0aGlzLl9zdHlsZS5wYWRkaW5nKjI7XG5cbiAgICB0aGlzLl93aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuX2hlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZW1pdCgndXBkYXRlJywgIHRleHR1cmUuYmFzZVRleHR1cmUpO1xuXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKi9cblRleHQucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgLy90aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUucmVuZGVyV2ViR0wuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgIC8vICAgdGhpcy5yZXNvbHV0aW9uID0gMS8vcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGFzY2VudCwgZGVzY2VudCBhbmQgZm9udFNpemUgb2YgYSBnaXZlbiBmb250U3R5bGVcbiAqXG4gKiBAcGFyYW0gZm9udFN0eWxlIHtvYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5kZXRlcm1pbmVGb250UHJvcGVydGllcyA9IGZ1bmN0aW9uIChmb250U3R5bGUpXG57XG4gICAgdmFyIHByb3BlcnRpZXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXTtcblxuICAgIGlmICghcHJvcGVydGllcylcbiAgICB7XG4gICAgICAgIHByb3BlcnRpZXMgPSB7fTtcblxuICAgICAgICB2YXIgY2FudmFzID0gVGV4dC5mb250UHJvcGVydGllc0NhbnZhcztcbiAgICAgICAgdmFyIGNvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dDtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgdmFyIHdpZHRoID0gTWF0aC5jZWlsKGNvbnRleHQubWVhc3VyZVRleHQoJ3xNw4lxJykud2lkdGgpO1xuICAgICAgICB2YXIgYmFzZWxpbmUgPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnTScpLndpZHRoKTtcbiAgICAgICAgdmFyIGhlaWdodCA9IDIgKiBiYXNlbGluZTtcblxuICAgICAgICBiYXNlbGluZSA9IGJhc2VsaW5lICogMS40IHwgMDtcblxuICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjZjAwJztcbiAgICAgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgY29udGV4dC50ZXh0QmFzZWxpbmUgPSAnYWxwaGFiZXRpYyc7XG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMwMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxUZXh0KCd8TcOJcScsIDAsIGJhc2VsaW5lKTtcblxuICAgICAgICB2YXIgaW1hZ2VkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCkuZGF0YTtcbiAgICAgICAgdmFyIHBpeGVscyA9IGltYWdlZGF0YS5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lID0gd2lkdGggKiA0O1xuXG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIHZhciBpZHggPSAwO1xuICAgICAgICB2YXIgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGFzY2VudC4gc2NhbiBmcm9tIHRvcCB0byBib3R0b20gdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGJhc2VsaW5lOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggKz0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuYXNjZW50ID0gYmFzZWxpbmUgLSBpO1xuXG4gICAgICAgIGlkeCA9IHBpeGVscyAtIGxpbmU7XG4gICAgICAgIHN0b3AgPSBmYWxzZTtcblxuICAgICAgICAvLyBkZXNjZW50LiBzY2FuIGZyb20gYm90dG9tIHRvIHRvcCB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSBoZWlnaHQ7IGkgPiBiYXNlbGluZTsgaS0tKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGluZTsgaiArPSA0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0b3ApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWR4IC09IGxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLmRlc2NlbnQgPSBpIC0gYmFzZWxpbmU7XG4gICAgICAgIHByb3BlcnRpZXMuZm9udFNpemUgPSBwcm9wZXJ0aWVzLmFzY2VudCArIHByb3BlcnRpZXMuZGVzY2VudDtcblxuICAgICAgICBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXSA9IHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgbmV3bGluZXMgdG8gYSBzdHJpbmcgdG8gaGF2ZSBpdCBvcHRpbWFsbHkgZml0IGludG8gdGhlIGhvcml6b250YWxcbiAqIGJvdW5kcyBzZXQgYnkgdGhlIFRleHQgb2JqZWN0J3Mgd29yZFdyYXBXaWR0aCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUud29yZFdyYXAgPSBmdW5jdGlvbiAodGV4dClcbntcbiAgICAvLyBHcmVlZHkgd3JhcHBpbmcgYWxnb3JpdGhtIHRoYXQgd2lsbCB3cmFwIHdvcmRzIGFzIHRoZSBsaW5lIGdyb3dzIGxvbmdlclxuICAgIC8vIHRoYW4gaXRzIGhvcml6b250YWwgYm91bmRzLlxuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgICB2YXIgd29yZFdyYXBXaWR0aCA9IHRoaXMuX3N0eWxlLndvcmRXcmFwV2lkdGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcGFjZUxlZnQgPSB3b3JkV3JhcFdpZHRoO1xuICAgICAgICB2YXIgd29yZHMgPSBsaW5lc1tpXS5zcGxpdCgnICcpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdvcmRzLmxlbmd0aDsgaisrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgd29yZFdpZHRoID0gdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KHdvcmRzW2pdKS53aWR0aDtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGhXaXRoU3BhY2UgPSB3b3JkV2lkdGggKyB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQoJyAnKS53aWR0aDtcbiAgICAgICAgICAgIGlmIChqID09PSAwIHx8IHdvcmRXaWR0aFdpdGhTcGFjZSA+IHNwYWNlTGVmdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHByaW50aW5nIHRoZSBuZXdsaW5lIGlmIGl0J3MgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxpbmUgdGhhdCBpc1xuICAgICAgICAgICAgICAgIC8vIGdyZWF0ZXIgdGhhbiB0aGUgd29yZCB3cmFwIHdpZHRoLlxuICAgICAgICAgICAgICAgIGlmIChqID4gMClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdvcmRzW2pdO1xuICAgICAgICAgICAgICAgIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGggLSB3b3JkV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0IC09IHdvcmRXaWR0aFdpdGhTcGFjZTtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyAnICsgd29yZHNbal07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaSA8IGxpbmVzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBUZXh0IGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIFRleHRcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIHJldHVybiBTcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcy5jYWxsKHRoaXMsIG1hdHJpeCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dCBvYmplY3QuXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9dHJ1ZV0ge2Jvb2xlYW59IHdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZVRleHR1cmUpXG57XG4gICAgLy8gbWFrZSBzdXJlIHRvIHJlc2V0IHRoZSB0aGUgY29udGV4dCBhbmQgY2FudmFzLi4gZG9udCB3YW50IHRoaXMgaGFuZ2luZyBhcm91bmQgaW4gbWVtb3J5IVxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xuXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG59O1xuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9GaWx0ZXJNYW5hZ2VyJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgdGVtcFJlY3QgPSBuZXcgbWF0aC5SZWN0YW5nbGUoKTtcblxuLyoqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBCYXNlUmVuZGVyVGV4dHVyZSBzaG91bGQgYmUgcHJlbG9hZGVkXG4gKiBvdGhlcndpc2UgYmxhY2sgcmVjdGFuZ2xlcyB3aWxsIGJlIGRyYXduIGluc3RlYWQuXG4gKlxuICogQSBCYXNlUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIEJhc2VyZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIDgwMCwgNjAwKTtcbiAqIHZhciBzcHJpdGUgPSBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJzcGluT2JqXzAxLnBuZ1wiKTtcbiAqXG4gKiBzcHJpdGUucG9zaXRpb24ueCA9IDgwMC8yO1xuICogc3ByaXRlLnBvc2l0aW9uLnkgPSA2MDAvMjtcbiAqIHNwcml0ZS5hbmNob3IueCA9IDAuNTtcbiAqIHNwcml0ZS5hbmNob3IueSA9IDAuNTtcbiAqXG4gKiBCYXNlcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgQmFzZXJlbmRlclRleHR1cmVcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgZm9yIHRoaXMgQmFzZVJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgaWYgKCFyZW5kZXJlcilcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNyZWF0ZSBCYXNlUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgbnVsbCwgc2NhbGVNb2RlKTtcbiAgIFxuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAxMDA7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OOztcbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIERyYXcvcmVuZGVyIHRoZSBnaXZlbiBEaXNwbGF5T2JqZWN0IG9udG8gdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheU9iamVjdCBhbmQgZGVzY2VuZGVudHMgYXJlIHRyYW5zZm9ybWVkIGR1cmluZyB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBJZiBgdXBkYXRlVHJhbnNmb3JtYCBpcyB0cnVlIHRoZW4gdGhlIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkIGJlZm9yZSB0aGVcbiAgICAgKiBtZXRob2QgcmV0dXJucy4gT3RoZXJ3aXNlIGl0IGlzIHVwIHRvIHRoZSBjYWxsaW5nIGNvZGUgdG8gY29ycmVjdGx5IHVzZSBvciByZXNldFxuICAgICAqIHRoZSB0cmFuc2Zvcm1lZCBkaXNwbGF5IG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgaXMgYWx3YXlzIHJlbmRlcmVkIHdpdGggYSB3b3JsZEFscGhhIHZhbHVlIG9mIDEuXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAgICAgKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBPcHRpb25hbCBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIGRpc3BsYXkgb2JqZWN0IGJlZm9yZSByZW5kZXJpbmcuXG4gICAgICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICAgICAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gICAgICogIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkLiBOb3QgcmVzdG9yaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBhIGxpdHRsZSBmYXN0ZXIuXG4gICAgICovXG4gICAgdGhpcy5yZW5kZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgQmFzZVJlbmRlclRleHR1cmUgdXNlcy4gQSBCYXNlUmVuZGVyVGV4dHVyZSBjYW4gb25seSBiZWxvbmcgdG8gb25lIHJlbmRlcmVyIGF0IHRoZSBtb21lbnQgaWYgaXRzIHdlYkdMLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgUmVuZGVyVGFyZ2V0KGdsLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5zY2FsZU1vZGUsIHRoaXMucmVzb2x1dGlvbik7Ly8sIHRoaXMudGhpcy5zY2FsZU1vZGUpO1xuICAgICAgICB0aGlzLl9nbFRleHR1cmVzW2dsLmlkXSA9ICB0aGlzLnRleHR1cmVCdWZmZXIudGV4dHVyZTtcbiAgICAgICAgXG4gICAgICAgIC8vVE9ETyByZWZhY3RvciBmaWx0ZXIgbWFuYWdlci4uIGFzIHJlYWxseSBpdHMgbm8gbG9uZ2VyIGEgbWFuYWdlciBpZiB3ZSB1c2UgaXQgaGVyZS4uXG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJXZWJHTDtcblxuICAgICAgICAvLyB0aGUgY3JlYXRpb24gb2YgYSBmaWx0ZXIgbWFuYWdlciB1bmJpbmRzIHRoZSBidWZmZXJzLi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbiAgICAgICAgaWYodGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0KXRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJDYW52YXM7XG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIodGhpcy53aWR0aCogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbn1cblxuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlVGV4dHVyZS5wcm90b3R5cGUpO1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzZVJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VSZW5kZXJUZXh0dXJlO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGlmICh3aWR0aCA9PT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT09IHRoaXMuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5maWx0ZXJNYW5hZ2VyKVxuICAgIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLnJlbmRlcmVyLmdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcihmYWxzZSwgZGVzdGluYXRpb25GcmFtZSk7XG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gKHVwZGF0ZVRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSA/IHVwZGF0ZVRyYW5zZm9ybSA6IHRydWU7Ly8hdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnRyYW5zZm9ybSA9IG1hdHJpeDtcblxuICAgIC8vVE9ETyBub3QgYSBmYW4gdGhhdCB0aGlzIGlzIGhlcmUuLi4gaXQgd2lsbCBtb3ZlIVxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5hY3RpdmF0ZSgpO1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgaWYgKHVwZGF0ZVRyYW5zZm9ybSlcbiAgICB7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIG1hdHJpeCBvZiB0aGUgZGlzcGxhdHlPYmplY3QuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmlkZW50aXR5KCk7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgICAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRlbXBSZWN0LndpZHRoID0gZnJhbWUuaGVpZ2h0O1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IGZyYW1lLndpZHRoO1xuICAgXG4gICAgLy9UT0RPIHJlbmFtZSB0ZXh0dXJlQnVmZmVyIHRvIHJlbmRlclRhcmdldC4uXG4gICAgdmFyIHRlbXAgPSAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyID0gdGhpcy5maWx0ZXJNYW5hZ2VyO1xuICAgIFxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKGZyYW1lLCB0ZW1wUmVjdCk7XG4gICAgY29uc29sZS5sb2coZGlzcGxheU9iamVjdClcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgdGhpcy50ZXh0dXJlQnVmZmVyLCBjbGVhcik7XG5cbiAgIC8vIGNvbnNvbGUubG9nKFwiUkVOREVSSU5HIFwiKTtcbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0ZW1wO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXJdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChmcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAhIXVwZGF0ZVRyYW5zZm9ybTtcblxuICAgIHZhciB3dCA9IHRlbXBNYXRyaXg7XG5cbiAgICB3dC5pZGVudGl0eSgpO1xuXG4gICAgaWYgKG1hdHJpeClcbiAgICB7XG4gICAgICAgIHd0LmFwcGVuZChtYXRyaXgpO1xuICAgIH1cblxuXG4gICAgd3QudHggKz0gZnJhbWUueDtcbiAgICB3dC50eSArPSBmcmFtZS55O1xuXG4gICAgdmFyIGNhY2hlZFd0ID0gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybTtcbiAgICBcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gd3Q7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgdmFyIGksIGo7XG5cbiAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgXG4vLyAgICB0aGlzLnRleHR1cmVCdWZmZXIuXG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dDtcblxuICAgIHZhciByZWFsUmVzb2x1dGlvbiA9IHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHJlYWxSZXNvbHV0aW9uO1xuXG4gICAgaWYoZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9PT0gd3QpXG4gICAge1xuICAgICAgICAvLyBmaXhlcyBjYWNoZUFzQml0bWFwIEhhcHBlbmluZyBkdXJpbmcgdGhlIGFib3ZlLi5cbiAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IGNhY2hlZFd0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gZGVzdHJveUJhc2Uge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCB0cnVlKTtcblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICAvLyBkZXN0cm95IHRoZSBmaWx0ZXJtYW5hZ2VyLi5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEltYWdlID0gZnVuY3Rpb24gKGZyYW1lKVxue1xuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLnNyYyA9IHRoaXMuZ2V0QmFzZTY0KGZyYW1lKTtcbiAgICByZXR1cm4gaW1hZ2U7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIEJhc2VSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRCYXNlNjQgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRDYW52YXMoZnJhbWUpLnRvRGF0YVVSTCgpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB0byBpdCBhbmQgdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBBIENhbnZhcyBlbGVtZW50IHdpdGggdGhlIHRleHR1cmUgcmVuZGVyZWQgb24uXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgIFxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgQ2FudmFzQnVmZmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHRlbXBDYW52YXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0RhdGEuZGF0YS5zZXQod2ViR0xQaXhlbHMpO1xuXG4gICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGZyYW1lLndpZHRoID09PSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLndpZHRoICYmIFxuICAgICAgICAgICBmcmFtZS5oZWlnaHQgPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIoZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcbiAgICAgICAgICAgIHZhciBjYW52YXNEYXRhID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNvbnRleHQuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggICogcmVzb2x1dGlvbiwgZnJhbWUueSAqIHJlc29sdXRpb24sIGZyYW1lLndpZHRoICogcmVzb2x1dGlvbiwgZnJhbWUuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0ZW1wQ2FudmFzLmNhbnZhcztcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKCBmcmFtZSApXG57XG4gICAgaWYoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgZnJhbWUud2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS53aWR0aDtcbiAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IGZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YShmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoZnJhbWUsIHgsIHkpXG57XG4gICAgdGVtcFJlY3QueCA9IHg7XG4gICAgdGVtcFJlY3QueSA9IHk7XG4gICAgdGVtcFJlY3Qud2lkdGggPSAxIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZihmcmFtZSlcbiAgICB7XG4gICAgICAgIHRlbXBSZWN0LnggKz0gZnJhbWUueDtcbiAgICAgICAgdGVtcFJlY3QueSArPSBmcmFtZS55O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFBpeGVscyh0ZW1wUmVjdCk7XG59O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZS4gQWxsIHRleHR1cmVzIGhhdmUgYSBiYXNlIHRleHR1cmUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBmb3IgZGV2aWNlcyB3aXRoIGRpZmZlcmVudCBwaXhlbCByYXRpb3NcbiAqL1xuZnVuY3Rpb24gQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnVpZCA9IHV0aWxzLnVpZCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgYmFzZSB0ZXh0dXJlIHNldCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAxMDA7XG5cbiAgICAvLyBUT0RPIGRvY3NcbiAgICAvLyB1c2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgZGltZW5zaW9ucyBvZiB0aGUgc291cmNlXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIHdpZHRoIG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsV2lkdGggPSAxMDA7XG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIGhlaWdodCBvZiB0aGUgc291cmNlIG9mIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucmVhbEhlaWdodCA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlIHRvIGFwcGx5IHdoZW4gc2NhbGluZyB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlNDQUxFX01PREVTLkxJTkVBUlxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSBvbmNlIHRoZSBiYXNlIHRleHR1cmUgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG5ldmVyIHRydWUgaWYgdGhlIHVuZGVybHlpbmcgc291cmNlIGZhaWxzIHRvIGxvYWQgb3IgaGFzIG5vIHRleHR1cmUgZGF0YS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIGlmIHRoZSBzb3VyY2UgaXMgY3VycmVudGx5IGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBJZiBhbiBJbWFnZSBzb3VyY2UgaXMgbG9hZGluZyB0aGUgJ2xvYWRlZCcgb3IgJ2Vycm9yJyBldmVudCB3aWxsIGJlXG4gICAgICogZGlzcGF0Y2hlZCB3aGVuIHRoZSBvcGVyYXRpb24gZW5kcy4gQW4gdW5kZXJ5bGluZyBzb3VyY2UgdGhhdCBpc1xuICAgICAqIGltbWVkaWF0ZWx5LWF2YWlsYWJsZSBieXBhc3NlcyBsb2FkaW5nIGVudGlyZWx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGltYWdlIHNvdXJjZSB0aGF0IGlzIHVzZWQgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogVE9ETzogTWFrZSB0aGlzIGEgc2V0dGVyIHRoYXQgY2FsbHMgbG9hZFNvdXJjZSgpO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SW1hZ2V8Q2FudmFzfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuc291cmNlID0gbnVsbDsgLy8gc2V0IGluIGxvYWRTb3VyY2UsIGlmIGF0IGFsbFxuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgaWYgUkdCIGNoYW5uZWxzIHNob3VsZCBiZSBwcmUtbXVsdGlwbGllZCBieSBBbHBoYSAgKFdlYkdMIG9ubHkpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgb3Igbm90IHRoZSB0ZXh0dXJlIGlzIGEgcG93ZXIgb2YgdHdvLCB0cnkgdG8gdXNlIHBvd2VyIG9mIHR3byB0ZXh0dXJlcyBhcyBtdWNoIGFzIHlvdSBjYW5cbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSBmYWxzZTtcblxuICAgIC8vIHVzZWQgZm9yIHdlYkdMXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgYSBtaXBtYXAgb2YgdGhpcyB0ZXh0dXJlIG5lZWRzIHRvIGJlIGdlbmVyYXRlZC4gVGhpcyB2YWx1ZSBuZWVkcyB0byBiZSBzZXQgYmVmb3JlIHRoZSB0ZXh0dXJlIGlzIHVzZWRcbiAgICAgKiBBbHNvIHRoZSB0ZXh0dXJlIG11c3QgYmUgYSBwb3dlciBvZiB0d28gc2l6ZSB0byB3b3JrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubWlwbWFwID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBBIG1hcCBvZiByZW5kZXJlciBJRHMgdG8gd2ViZ2wgdGV4dHVyZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIFdlYkdMVGV4dHVyZT59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbFRleHR1cmVzID0ge307XG4gICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5faWQgPSAwO1xuICAgIFxuICAgIC8vIGlmIG5vIHNvdXJjZSBwYXNzZWQgZG9uJ3QgdHJ5IHRvIGxvYWRcbiAgICBpZiAoc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5sb2FkU291cmNlKHNvdXJjZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZpbmlzaGVzIGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZGVkXG4gICAgICogQG1lbWJlcm9mIFBJWEkuQmFzZVRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZhaWxzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG59XG5cbkJhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdGV4dHVyZSBvbiBhbGwgdGhlIHdlYmdsIHJlbmRlcmVycywgdGhpcyBhbHNvIGFzc3VtZXMgdGhlIHNyYyBoYXMgY2hhbmdlZC5cbiAqXG4gKiBAZmlyZXMgdXBkYXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVhbFdpZHRoID0gdGhpcy5zb3VyY2UubmF0dXJhbFdpZHRoIHx8IHRoaXMuc291cmNlLndpZHRoO1xuICAgIHRoaXMucmVhbEhlaWdodCA9IHRoaXMuc291cmNlLm5hdHVyYWxIZWlnaHQgfHwgdGhpcy5zb3VyY2UuaGVpZ2h0O1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMucmVhbFdpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5yZWFsSGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSB1dGlscy5pc1Bvd2VyT2ZUd28odGhpcy5yZWFsV2lkdGgsIHRoaXMucmVhbEhlaWdodCk7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBMb2FkIGEgc291cmNlLlxuICpcbiAqIElmIHRoZSBzb3VyY2UgaXMgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSwgc3VjaCBhcyBhbiBpbWFnZSB0aGF0IG5lZWRzIHRvIGJlXG4gKiBkb3dubG9hZGVkLCB0aGVuIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmUgZGlzcGF0Y2hlZCBpbiB0aGUgZnV0dXJlXG4gKiBhbmQgYGhhc0xvYWRlZGAgd2lsbCByZW1haW4gZmFsc2UgYWZ0ZXIgdGhpcyBjYWxsLlxuICpcbiAqIFRoZSBsb2dpYyBzdGF0ZSBhZnRlciBjYWxsaW5nIGBsb2FkU291cmNlYCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IChlZy4gYGZyb21JbWFnZWAsIGBuZXcgQmFzZVRleHR1cmVgKSBpczpcbiAqXG4gKiAgICAgaWYgKHRleHR1cmUuaGFzTG9hZGVkKVxuIHtcbiAqICAgICAgICAvLyB0ZXh0dXJlIHJlYWR5IGZvciB1c2VcbiAqICAgICB9IGVsc2UgaWYgKHRleHR1cmUuaXNMb2FkaW5nKVxuIHtcbiAqICAgICAgICAvLyBsaXN0ZW4gdG8gJ2xvYWRlZCcgYW5kL29yICdlcnJvcicgZXZlbnRzIG9uIHRleHR1cmVcbiAqICAgICB9IGVsc2Uge1xuICogICAgICAgIC8vIG5vdCBsb2FkaW5nLCBub3QgZ29pbmcgdG8gbG9hZCBVTkxFU1MgdGhlIHNvdXJjZSBpcyByZWxvYWRlZFxuICogICAgICAgIC8vIChpdCBtYXkgc3RpbGwgbWFrZSBzZW5zZSB0byBsaXN0ZW4gdG8gdGhlIGV2ZW50cylcbiAqICAgICB9XG4gKlxuICogQHByb3RlY3RlZFxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmxvYWRTb3VyY2UgPSBmdW5jdGlvbiAoc291cmNlKVxue1xuICAgIHZhciB3YXNMb2FkaW5nID0gdGhpcy5pc0xvYWRpbmc7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKHdhc0xvYWRpbmcgJiYgdGhpcy5zb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmVycm9yID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcblxuICAgIC8vIEFwcGx5IHNvdXJjZSBpZiBsb2FkZWQuIE90aGVyd2lzZSBzZXR1cCBhcHByb3ByaWF0ZSBsb2FkaW5nIG1vbml0b3JzLlxuICAgIGlmICgodGhpcy5zb3VyY2UuY29tcGxldGUgfHwgdGhpcy5zb3VyY2UuZ2V0Q29udGV4dCkgJiYgdGhpcy5zb3VyY2Uud2lkdGggJiYgdGhpcy5zb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFzb3VyY2UuZ2V0Q29udGV4dClcbiAgICB7XG5cbiAgICAgICAgLy8gSW1hZ2UgZmFpbCAvIG5vdCByZWFkeVxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgdmFyIHNjb3BlID0gdGhpcztcblxuICAgICAgICBzb3VyY2Uub25sb2FkID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgIHNjb3BlLmVtaXQoJ2xvYWRlZCcsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzb3VyY2Uub25lcnJvciA9IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXNjb3BlLmlzTG9hZGluZylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuZW1pdCgnZXJyb3InLCBzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUGVyIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI3RoZS1pbWctZWxlbWVudFxuICAgICAgICAvLyAgIFwiVGhlIHZhbHVlIG9mIGBjb21wbGV0ZWAgY2FuIHRodXMgY2hhbmdlIHdoaWxlIGEgc2NyaXB0IGlzIGV4ZWN1dGluZy5cIlxuICAgICAgICAvLyBTbyBjb21wbGV0ZSBuZWVkcyB0byBiZSByZS1jaGVja2VkIGFmdGVyIHRoZSBjYWxsYmFja3MgaGF2ZSBiZWVuIGFkZGVkLi5cbiAgICAgICAgLy8gTk9URTogY29tcGxldGUgd2lsbCBiZSB0cnVlIGlmIHRoZSBpbWFnZSBoYXMgbm8gc3JjIHNvIGJlc3QgdG8gY2hlY2sgaWYgdGhlIHNyYyBpcyBzZXQuXG4gICAgICAgIGlmIChzb3VyY2UuY29tcGxldGUgJiYgc291cmNlLnNyYylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gLi5hbmQgaWYgd2UncmUgY29tcGxldGUgbm93LCBubyBuZWVkIGZvciBjYWxsYmFja3NcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiBhbnkgcHJldmlvdXMgc3Vic2NyaWJlcnMgcG9zc2libGVcbiAgICAgICAgICAgICAgICBpZiAod2FzTG9hZGluZylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZCBpbnRlcm5hbGx5IHRvIHVwZGF0ZSB0aGUgd2lkdGgsIGhlaWdodCwgYW5kIHNvbWUgb3RoZXIgdHJhY2tpbmcgdmFycyBvbmNlXG4gKiBhIHNvdXJjZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuX3NvdXJjZUxvYWRlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgYmFzZSB0ZXh0dXJlXG4gKlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuaW1hZ2VVcmwpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcbiAgICAgICAgZGVsZXRlIHV0aWxzLlRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcblxuICAgICAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgICAgICBpZiAoIW5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZS5zcmMgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdGhpcy5zb3VyY2UuX3BpeGlJZF07XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsO1xuXG4gICAgdGhpcy5kaXNwb3NlKCk7XG59O1xuXG4vKipcbiAqIEZyZWVzIHRoZSB0ZXh0dXJlIGZyb20gV2ViR0wgbWVtb3J5IHdpdGhvdXQgZGVzdHJveWluZyB0aGlzIHRleHR1cmUgb2JqZWN0LlxuICogVGhpcyBtZWFucyB5b3UgY2FuIHN0aWxsIHVzZSB0aGUgdGV4dHVyZSBsYXRlciB3aGljaCB3aWxsIHVwbG9hZCBpdCB0byBHUFVcbiAqIG1lbW9yeSBhZ2Fpbi5cbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmVtaXQoJ2Rpc3Bvc2UnLCB0aGlzKTtcblxuICAgIC8vIHRoaXMgc2hvdWxkIG5vIGxvbmdlciBiZSBuZWVkZWQsIHRoZSByZW5kZXJlcnMgc2hvdWxkIGNsZWFudXAgYWxsIHRoZSBnbCB0ZXh0dXJlcy5cbiAgICAvLyB0aGlzLl9nbFRleHR1cmVzID0ge307XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHNvdXJjZSBpbWFnZSBvZiB0aGUgdGV4dHVyZS5cbiAqIFRoZSBvcmlnaW5hbCBzb3VyY2UgbXVzdCBiZSBhbiBJbWFnZSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBuZXdTcmMge3N0cmluZ30gdGhlIHBhdGggb2YgdGhlIGltYWdlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGVTb3VyY2VJbWFnZSA9IGZ1bmN0aW9uIChuZXdTcmMpXG57XG4gICAgdGhpcy5zb3VyY2Uuc3JjID0gbmV3U3JjO1xuXG4gICAgdGhpcy5sb2FkU291cmNlKHRoaXMuc291cmNlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGJhc2UgdGV4dHVyZSBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSBiYXNlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBjcmVhdGVkIGFuZCBsb2FkZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlVXJsIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gU2hvdWxkIHVzZSBhbm9ueW1vdXMgQ09SUz8gRGVmYXVsdHMgdG8gdHJ1ZSBpZiB0aGUgVVJMIGlzIG5vdCBhIGRhdGEtVVJJLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF07XG5cbiAgICBpZiAoY3Jvc3NvcmlnaW4gPT09IHVuZGVmaW5lZCAmJiBpbWFnZVVybC5pbmRleE9mKCdkYXRhOicpICE9PSAwKVxuICAgIHtcbiAgICAgICAgY3Jvc3NvcmlnaW4gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICAvLyBuZXcgSW1hZ2UoKSBicmVha3MgdGV4IGxvYWRpbmcgaW4gc29tZSB2ZXJzaW9ucyBvZiBDaHJvbWUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjM4MDcxXG4gICAgICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpOy8vZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgICAgIGlmIChjcm9zc29yaWdpbilcbiAgICAgICAge1xuICAgICAgICAgICAgaW1hZ2UuY3Jvc3NPcmlnaW4gPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGltYWdlLCBzY2FsZU1vZGUpO1xuICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IGltYWdlVXJsO1xuXG4gICAgICAgIGltYWdlLnNyYyA9IGltYWdlVXJsO1xuXG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gYmFzZVRleHR1cmU7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4gQDJ4IGF0IHRoZSBlbmQgb2YgdGhlIHVybCB3ZSBhcmUgZ29pbmcgdG8gYXNzdW1lIGl0cyBhIGhpZ2hyZXMgaW1hZ2VcbiAgICAgICAgYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHV0aWxzLmdldFJlc29sdXRpb25PZlVybChpbWFnZVVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIGlmICghY2FudmFzLl9waXhpSWQpXG4gICAge1xuICAgICAgICBjYW52YXMuX3BpeGlJZCA9ICdjYW52YXNfJyArIHV0aWxzLnVpZCgpO1xuICAgIH1cblxuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbY2FudmFzLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGNhbnZhcywgc2NhbGVNb2RlKTtcbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuIiwidmFyIEJhc2VSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbi8qKlxuICogQSBSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIFJlbmRlclRleHR1cmUgdGFrZXMgYSBzbmFwc2hvdCBvZiBhbnkgRGlzcGxheSBPYmplY3QgZ2l2ZW4gdG8gaXRzIHJlbmRlciBtZXRob2QuIFRoZSBwb3NpdGlvblxuICogYW5kIHJvdGF0aW9uIG9mIHRoZSBnaXZlbiBEaXNwbGF5IE9iamVjdHMgaXMgaWdub3JlZC4gRm9yIGV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDEwMjQsIDEwMjQsIHsgdmlldzogY2FudmFzLCByYXRpbzogMSB9KTtcbiAqIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKHNwcml0ZSk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgU3ByaXRlIGluIHRoaXMgY2FzZSB3aWxsIGJlIHJlbmRlcmVkIHRvIGEgcG9zaXRpb24gb2YgMCwwLiBUbyByZW5kZXIgdGhpcyBzcHJpdGUgYXQgaXRzIGFjdHVhbFxuICogcG9zaXRpb24gYSBDb250YWluZXIgc2hvdWxkIGJlIHVzZWQ6XG4gKlxuICogYGBganNcbiAqIHZhciBkb2MgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqXG4gKiBkb2MuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqXG4gKiByZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBSZW5kZXJUZXh0dXJlXG4gKiBAcGFyYW0gW3dpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtoZWlnaHQ9MTAwXSB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtzY2FsZU1vZGVdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIFtyZXNvbHV0aW9uPTFdIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICovXG5mdW5jdGlvbiBSZW5kZXJUZXh0dXJlKGJhc2VSZW5kZXJUZXh0dXJlLCBmcmFtZSlcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIFJlbmRlclRleHR1cmUsIHlvdSBtdXN0IHBhc3MgYSByZW5kZXJlciBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIG9iamVjdCB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtCYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICBUZXh0dXJlLmNhbGwodGhpcyxcbiAgICAgICAgYmFzZVJlbmRlclRleHR1cmUsXG4gICAgICAgIGZyYW1lIFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fdXBkYXRlVXZzKCk7XG59XG5cblJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlLnByb3RvdHlwZSk7XG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgUmVuZGVyVGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gdXBkYXRlQmFzZSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBiYXNlVGV4dHVyZS53aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBiZSByZXNpemVkIGFzIHdlbGw/XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB1cGRhdGVCYXNlKVxue1xuICAgXG4gICAgLy9UT0RPIC0gY291bGQgYmUgbm90IHJlcXVpcmVkLi5cbiAgICB0aGlzLnZhbGlkID0gKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTtcblxuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy5jcm9wLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jcm9wLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh1cGRhdGVCYXNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5yZXNpemUod2lkdGgsIGhlaWdodClcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLmNsZWFyKHRoaXMuZnJhbWUpXG4gICAgXG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5iYXNlVGV4dHVyZS5yZW5kZXIodGhpcy5mcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIHRoaXMgdGV4dHVyZS4gSXQgd29ya3MgYnkgY2FsbGluZyBSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0QmFzZTY0LmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0Q2FudmFzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRDYW52YXModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgdGhlIGVudGlyZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbHModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgYSBwaXhlbCB3aXRoaW4gdGhlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbCh0aGlzLmZyYW1lLCB4LCB5KTtcbn07XG5cblJlbmRlclRleHR1cmUuY3JlYXRlID0gZnVuY3Rpb24ocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICByZXR1cm4gbmV3IFJlbmRlclRleHR1cmUobmV3IEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pKTtcbn1cblxuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzID0gcmVxdWlyZSgnLi9UZXh0dXJlVXZzJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZSBvciBwYXJ0IG9mIGFuIGltYWdlLiBJdCBjYW5ub3QgYmUgYWRkZWRcbiAqIHRvIHRoZSBkaXNwbGF5IGxpc3QgZGlyZWN0bHkuIEluc3RlYWQgdXNlIGl0IGFzIHRoZSB0ZXh0dXJlIGZvciBhIFNwcml0ZS4gSWYgbm8gZnJhbWUgaXMgcHJvdmlkZWQgdGhlbiB0aGUgd2hvbGUgaW1hZ2UgaXMgdXNlZC5cbiAqXG4gKiBZb3UgY2FuIGRpcmVjdGx5IGNyZWF0ZSBhIHRleHR1cmUgZnJvbSBhbiBpbWFnZSBhbmQgdGhlbiByZXVzZSBpdCBtdWx0aXBsZSB0aW1lcyBsaWtlIHRoaXMgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIHZhciBzcHJpdGUxID0gbmV3IFBJWEkuU3ByaXRlKHRleHR1cmUpO1xuICogdmFyIHNwcml0ZTIgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gYmFzZVRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV9IFRoZSBiYXNlIHRleHR1cmUgc291cmNlIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZSBmcm9tXG4gKiBAcGFyYW0gW2ZyYW1lXSB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5nbGUgZnJhbWUgb2YgdGhlIHRleHR1cmUgdG8gc2hvd1xuICogQHBhcmFtIFtjcm9wXSB7UElYSS5SZWN0YW5nbGV9IFRoZSBhcmVhIG9mIG9yaWdpbmFsIHRleHR1cmVcbiAqIEBwYXJhbSBbdHJpbV0ge1BJWEkuUmVjdGFuZ2xlfSBUcmltbWVkIHRleHR1cmUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gW3JvdGF0ZV0ge2Jvb2xlYW59IGluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXMgKCB1c2VkIGJ5IHRleHR1cmUgcGFja2VyIClcbiAqL1xuZnVuY3Rpb24gVGV4dHVyZShiYXNlVGV4dHVyZSwgZnJhbWUsIGNyb3AsIHRyaW0sIHJvdGF0ZSlcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIERvZXMgdGhpcyBUZXh0dXJlIGhhdmUgYW55IGZyYW1lIGRhdGEgYXNzaWduZWQgdG8gaXQ/XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubm9GcmFtZSA9IGZhbHNlO1xuXG4gICAgaWYgKCFmcmFtZSlcbiAgICB7XG4gICAgICAgIHRoaXMubm9GcmFtZSA9IHRydWU7XG4gICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuICAgIH1cblxuICAgIGlmIChiYXNlVGV4dHVyZSBpbnN0YW5jZW9mIFRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmFzZVRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy5iYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdHJpbSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy50cmltID0gdHJpbTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgdGhlIHJlbmRlcmVyIGtub3cgaWYgdGhlIHRleHR1cmUgaXMgdmFsaWQuIElmIGl0J3Mgbm90IHRoZW4gaXQgY2Fubm90IGJlIHJlbmRlcmVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHdpbGwgbGV0IGEgcmVuZGVyZXIga25vdyB0aGF0IGEgdGV4dHVyZSBoYXMgYmVlbiB1cGRhdGVkICh1c2VkIG1haW5seSBmb3Igd2ViR0wgdXYgdXBkYXRlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXF1aXJlc1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFdlYkdMIFVWIGRhdGEgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0dXJlIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIGFyZWEgb2YgdGhlIEJhc2VUZXh0dXJlIGltYWdlIHRvIGFjdHVhbGx5IGNvcHkgdG8gdGhlIENhbnZhcyAvIFdlYkdMIHdoZW4gcmVuZGVyaW5nLFxuICAgICAqIGlycmVzcGVjdGl2ZSBvZiB0aGUgYWN0dWFsIGZyYW1lIHNpemUgb3IgcGxhY2VtZW50ICh3aGljaCBjYW4gYmUgaW5mbHVlbmNlZCBieSB0cmltbWVkIHRleHR1cmUgYXRsYXNlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3JvcCA9IGNyb3AgfHwgZnJhbWU7Ly9uZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgcm90YXRlZCBieSA5MCBkZWdyZWVzXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb3RhdGUgPSAhIXJvdGF0ZTtcblxuICAgIGlmIChiYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICBmcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gZnJhbWUgd2Ugc2hvdWxkIG1vbml0b3IgZm9yIGFueSBiYXNlIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5vbigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZS5vbmNlKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZC4gVGhpcyBoYXBwZW5zIGlmIHRoZSBmcmFtZSBvciB0aGUgYmFzZVRleHR1cmUgaXMgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBldmVudCB1cGRhdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0dXJlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqL1xuICAgIGZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBmcmFtZTtcblxuICAgICAgICAgICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHRoaXMud2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMudHJpbSAmJiAhdGhpcy5yb3RhdGUgJiYgKGZyYW1lLnggKyBmcmFtZS53aWR0aCA+IHRoaXMuYmFzZVRleHR1cmUud2lkdGggfHwgZnJhbWUueSArIGZyYW1lLmhlaWdodCA+IHRoaXMuYmFzZVRleHR1cmUuaGVpZ2h0KSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHR1cmUgRXJyb3I6IGZyYW1lIGRvZXMgbm90IGZpdCBpbnNpZGUgdGhlIGJhc2UgVGV4dHVyZSBkaW1lbnNpb25zICcgKyB0aGlzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy90aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuc291cmNlICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuICAgICAgICAgICAgdGhpcy52YWxpZCA9IGZyYW1lICYmIGZyYW1lLndpZHRoICYmIGZyYW1lLmhlaWdodCAmJiB0aGlzLmJhc2VUZXh0dXJlLmhhc0xvYWRlZDtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJpbSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy50cmltLmhlaWdodDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS53aWR0aCA9IHRoaXMudHJpbS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JvcCA9IGZyYW1lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy52YWxpZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVVdnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhpcyB0ZXh0dXJlIG9uIHRoZSBncHUuXG4gKlxuICovXG5UZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYmFzZVRleHR1cmUudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgbG9hZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZUxvYWRlZCA9IGZ1bmN0aW9uIChiYXNlVGV4dHVyZSlcbntcbiAgICAvLyBUT0RPIHRoaXMgY29kZSBsb29rcyBjb25mdXNpbmcuLiBib28gdG8gYWJ1c2luZyBnZXR0ZXJzIGFuZCBzZXR0ZXJzcyFcbiAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMuX2ZyYW1lO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgdXBkYXRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLm9uQmFzZVRleHR1cmVVcGRhdGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZT1mYWxzZV0ge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZSlcbntcbiAgICBpZiAodGhpcy5iYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGlmIChkZXN0cm95QmFzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2ZyYW1lID0gbnVsbDtcbiAgICB0aGlzLl91dnMgPSBudWxsO1xuICAgIHRoaXMudHJpbSA9IG51bGw7XG4gICAgdGhpcy5jcm9wID0gbnVsbDtcblxuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIHRoaXMub2ZmKCdkaXNwb3NlJywgdGhpcy5kaXNwb3NlLCB0aGlzKTtcbiAgICB0aGlzLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRleHR1cmUgb2JqZWN0IHRoYXQgYWN0cyB0aGUgc2FtZSBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9XG4gKi9cblRleHR1cmUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUodGhpcy5iYXNlVGV4dHVyZSwgdGhpcy5mcmFtZSwgdGhpcy5jcm9wLCB0aGlzLnRyaW0sIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuX3VwZGF0ZVV2cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLl91dnMpXG4gICAge1xuICAgICAgICB0aGlzLl91dnMgPSBuZXcgVGV4dHVyZVV2cygpO1xuICAgIH1cblxuICAgIHRoaXMuX3V2cy5zZXQodGhpcy5jcm9wLCB0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLnJvdGF0ZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBUZXh0dXJlIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGNyb3Nzb3JpZ2luIHtib29sZWFufSBXaGV0aGVyIHJlcXVlc3RzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGNyb3Nzb3JpZ2luXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbiAgICAgICAgdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXSA9IHRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZScpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhcywgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW8ge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAodHlwZW9mIHZpZGVvID09PSAnc3RyaW5nJylcbiAgICB7XG4gICAgICAgIHJldHVybiBUZXh0dXJlLmZyb21WaWRlb1VybCh2aWRlbywgc2NhbGVNb2RlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgdmlkZW8gdXJsLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1VybCB7c3RyaW5nfVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gQSBUZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbVZpZGVvVXJsID0gZnVuY3Rpb24gKHZpZGVvVXJsLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh2aWRlb1VybCwgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEFkZHMgYSB0ZXh0dXJlIHRvIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLiBUaGlzIGNhY2hlIGlzIHNoYXJlZCBhY3Jvc3MgdGhlIHdob2xlIFBJWEkgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSBUZXh0dXJlIHRvIGFkZCB0byB0aGUgY2FjaGUuXG4gKiBAcGFyYW0gaWQge3N0cmluZ30gVGhlIGlkIHRoYXQgdGhlIHRleHR1cmUgd2lsbCBiZSBzdG9yZWQgYWdhaW5zdC5cbiAqL1xuVGV4dHVyZS5hZGRUZXh0dXJlVG9DYWNoZSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBpZClcbntcbiAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdID0gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgdGV4dHVyZSBmcm9tIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgb2YgdGhlIHRleHR1cmUgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0aGF0IHdhcyByZW1vdmVkXG4gKi9cblRleHR1cmUucmVtb3ZlVGV4dHVyZUZyb21DYWNoZSA9IGZ1bmN0aW9uIChpZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtpZF07XG5cbiAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcbiAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpZF07XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogQW4gZW1wdHkgdGV4dHVyZSwgdXNlZCBvZnRlbiB0byBub3QgaGF2ZSB0byBjcmVhdGUgbXVsdGlwbGUgZW1wdHkgdGV4dHVyZXMuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmUuRU1QVFkgPSBuZXcgVGV4dHVyZShuZXcgQmFzZVRleHR1cmUoKSk7XG4iLCJcbi8qKlxuICogQSBzdGFuZGFyZCBvYmplY3QgdG8gc3RvcmUgdGhlIFV2cyBvZiBhIHRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBUZXh0dXJlVXZzKClcbntcbiAgICB0aGlzLngwID0gMDtcbiAgICB0aGlzLnkwID0gMDtcblxuICAgIHRoaXMueDEgPSAxO1xuICAgIHRoaXMueTEgPSAwO1xuXG4gICAgdGhpcy54MiA9IDE7XG4gICAgdGhpcy55MiA9IDE7XG5cbiAgICB0aGlzLngzID0gMDtcbiAgICB0aGlzLnkzID0gMTtcblxuICAgIHRoaXMueHkwX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTFfdWludDMyID0gMDtcbiAgICB0aGlzLnh5Ml91aW50MzIgPSAwO1xuICAgIHRoaXMueHkzX3VpbnQzMiA9IDA7XG5cbiAgICB0aGlzLnV2c191aW50MzIgPSBuZXcgVWludDMyQXJyYXkoNClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlVXZzO1xuXG4vKipcbiAqIFNldHMgdGhlIHRleHR1cmUgVXZzIGJhc2VkIG9uIHRoZSBnaXZlbiBmcmFtZSBpbmZvcm1hdGlvblxuICogQHBhcmFtIGZyYW1lIHtQSVhJLlJlY3RhbmdsZX1cbiAqIEBwYXJhbSBiYXNlRnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIHJvdGF0ZSB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIGZyYW1lIGlzIHJvdGF0ZWRcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmVVdnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChmcmFtZSwgYmFzZUZyYW1lLCByb3RhdGUpXG57XG4gICAgdmFyIHR3ID0gYmFzZUZyYW1lLndpZHRoO1xuICAgIHZhciB0aCA9IGJhc2VGcmFtZS5oZWlnaHQ7XG5cbiAgICBpZihyb3RhdGUpXG4gICAge1xuICAgICAgICB0aGlzLngwID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUuaGVpZ2h0KSAvIHR3O1xuICAgICAgICB0aGlzLnkxID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkyID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gZnJhbWUueSAvIHRoO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMueDAgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MiA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gKGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQpIC8gdGg7XG4gICAgfVxuXG4gICAgdGhpcy51dnNfdWludDMyWzBdID0gKCgodGhpcy55MCAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngwICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbMV0gPSAoKCh0aGlzLnkxICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDEgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsyXSA9ICgoKHRoaXMueTIgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MiAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzNdID0gKCgodGhpcy55MyAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngzICogNjU1MzUpICYgMHhGRkZGKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBvZiBhIFtwbGF5aW5nXSBWaWRlby5cbiAqXG4gKiBWaWRlbyBiYXNlIHRleHR1cmVzIG1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kIGluIHRoZWlyIGNyZWF0aW9uIHByb2Nlc3MuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZCBpbiBzZXZlcmFsIHdheXMsIHN1Y2ggYXM6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwoJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0Jyk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh7IHNyYzogJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoWycvdmlkZW8ud2VibScsICcvdmlkZW8ubXA0J10pO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzKFtcbiAqICAgICB7IHNyYzogJy92aWRlby53ZWJtJywgbWltZTogJ3ZpZGVvL3dlYm0nIH0sXG4gKiAgICAgeyBzcmM6ICcvdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfVxuICogXSk7XG4gKiBgYGBcbiAqXG4gKiBTZWUgdGhlIFtcImRldXNcIiBkZW1vXShodHRwOi8vd3d3Lmdvb2Rib3lkaWdpdGFsLmNvbS9waXhpanMvZXhhbXBsZXMvZGV1cy8pLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5CYXNlVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzb3VyY2Uge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIFZpZGVvQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFzb3VyY2UpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHZpZGVvIHNvdXJjZSBlbGVtZW50IHNwZWNpZmllZC4nKTtcbiAgICB9XG5cbiAgICAvLyBob29rIGluIGhlcmUgdG8gY2hlY2sgaWYgdmlkZW8gaXMgYWxyZWFkeSBhdmFpbGFibGUuXG4gICAgLy8gQmFzZVRleHR1cmUgbG9va3MgZm9yIGEgc291cmNlLmNvbXBsZXRlIGJvb2xlYW4sIHBsdXMgd2lkdGggJiBoZWlnaHQuXG5cbiAgICBpZiAoKHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9FTk9VR0hfREFUQSB8fCBzb3VyY2UucmVhZHlTdGF0ZSA9PT0gc291cmNlLkhBVkVfRlVUVVJFX0RBVEEpICYmIHNvdXJjZS53aWR0aCAmJiBzb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgc291cmNlLmNvbXBsZXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBCYXNlVGV4dHVyZS5jYWxsKHRoaXMsIHNvdXJjZSwgc2NhbGVNb2RlKTtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCB0aGUgYmFzZSB0ZXh0dXJlIGF1dG9tYXRpY2FsbHkgdXBkYXRlIGl0c2VsZiwgc2V0IHRvIHRydWUgYnkgZGVmYXVsdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG5cbiAgICB0aGlzLl9vblVwZGF0ZSA9IHRoaXMuX29uVXBkYXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fb25DYW5QbGF5ID0gdGhpcy5fb25DYW5QbGF5LmJpbmQodGhpcyk7XG5cbiAgICBpZiAoIXNvdXJjZS5jb21wbGV0ZSlcbiAgICB7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgdGhpcy5fb25DYW5QbGF5KTtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICAvLyBzdGFydGVkIHBsYXlpbmcuLlxuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX29uUGxheVN0YXJ0LmJpbmQodGhpcykpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9vblBsYXlTdG9wLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHRoaXMuX19sb2FkZWQgPSBmYWxzZTtcbn1cblxuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZpZGVvQmFzZVRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFZpZGVvQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVGhlIGludGVybmFsIHVwZGF0ZSBsb29wIG9mIHRoZSB2aWRlbyBiYXNlIHRleHR1cmUsIG9ubHkgcnVucyB3aGVuIGF1dG9VcGRhdGUgaXMgc2V0IHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25VcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJ1bnMgdGhlIHVwZGF0ZSBsb29wIHdoZW4gdGhlIHZpZGVvIGlzIHJlYWR5IHRvIHBsYXlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5hdXRvVXBkYXRlKVxuICAgIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9vblVwZGF0ZSk7XG4gICAgICAgIHRoaXMuYXV0b1VwZGF0ZSA9IHRydWU7XG4gICAgfVxufTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIGEgcGF1c2UgZXZlbnQgaXMgdHJpZ2dlcmVkLCBzdG9wcyB0aGUgdXBkYXRlIGxvb3BcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gdGhlIHZpZGVvIGlzIGxvYWRlZCBhbmQgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vbkNhblBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX29uQ2FuUGxheSk7XG5cbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuc291cmNlLnZpZGVvV2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5zb3VyY2UudmlkZW9IZWlnaHQ7XG5cbiAgICAgICAgdGhpcy5zb3VyY2UucGxheSgpO1xuXG4gICAgICAgIC8vIHByZXZlbnQgbXVsdGlwbGUgbG9hZGVkIGRpc3BhdGNoZXMuLlxuICAgICAgICBpZiAoIXRoaXMuX19sb2FkZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX19sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5zb3VyY2UuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB0aGlzLnNvdXJjZS5fcGl4aUlkIF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNvdXJjZS5fcGl4aUlkO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIE1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlZpZGVvQmFzZVRleHR1cmV9XG4gKi9cblZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvID0gZnVuY3Rpb24gKHZpZGVvLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCF2aWRlby5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgdmlkZW8uX3BpeGlJZCA9ICd2aWRlb18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt2aWRlby5fcGl4aUlkXTtcblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBWaWRlb0Jhc2VUZXh0dXJlKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB2aWRlby5fcGl4aUlkIF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgQmFzZVRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIHZpZGVvIGVsZW1lbnQuXG4gKiBUaGlzIEJhc2VUZXh0dXJlIGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIGEgdGV4dHVyZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1NyYyB7c3RyaW5nfG9iamVjdHxzdHJpbmdbXXxvYmplY3RbXX0gVGhlIFVSTChzKSBmb3IgdGhlIHZpZGVvLlxuICogQHBhcmFtIFt2aWRlb1NyYy5zcmNdIHtzdHJpbmd9IE9uZSBvZiB0aGUgc291cmNlIHVybHMgZm9yIHRoZSB2aWRlb1xuICogQHBhcmFtIFt2aWRlb1NyYy5taW1lXSB7c3RyaW5nfSBUaGUgbWltZXR5cGUgb2YgdGhlIHZpZGVvIChlLmcuICd2aWRlby9tcDQnKS4gSWYgbm90IHNwZWNpZmllZFxuICogIHRoZSB1cmwncyBleHRlbnNpb24gd2lsbCBiZSB1c2VkIGFzIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgbWltZSB0eXBlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsID0gZnVuY3Rpb24gKHZpZGVvU3JjLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcblxuICAgIC8vIGFycmF5IG9mIG9iamVjdHMgb3Igc3RyaW5nc1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZpZGVvU3JjKSlcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlkZW9TcmMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyY1tpXS5zcmMgfHwgdmlkZW9TcmNbaV0sIHZpZGVvU3JjW2ldLm1pbWUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzaW5nbGUgb2JqZWN0IG9yIHN0cmluZ1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyYy5zcmMgfHwgdmlkZW9TcmMsIHZpZGVvU3JjLm1pbWUpKTtcbiAgICB9XG5cbiAgICB2aWRlby5sb2FkKCk7XG4gICAgdmlkZW8ucGxheSgpO1xuXG4gICAgcmV0dXJuIFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpO1xufTtcblxuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyA9IFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybDtcblxuZnVuY3Rpb24gY3JlYXRlU291cmNlKHBhdGgsIHR5cGUpXG57XG4gICAgaWYgKCF0eXBlKVxuICAgIHtcbiAgICAgICAgdHlwZSA9ICd2aWRlby8nICsgcGF0aC5zdWJzdHIocGF0aC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpO1xuXG4gICAgc291cmNlLnNyYyA9IHBhdGg7XG4gICAgc291cmNlLnR5cGUgPSB0eXBlO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn1cbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIC8vIEludGVybmFsIGV2ZW50IHVzZWQgYnkgY29tcG9zZWQgZW1pdHRlclxuICAgIFRJQ0sgPSAndGljayc7XG5cbi8qKlxuICogQSBUaWNrZXIgY2xhc3MgdGhhdCBydW5zIGFuIHVwZGF0ZSBsb29wIHRoYXQgb3RoZXIgb2JqZWN0cyBsaXN0ZW4gdG8uXG4gKiBUaGlzIGNsYXNzIGlzIGNvbXBvc2VkIGFyb3VuZCBhbiBFdmVudEVtaXR0ZXIgb2JqZWN0IHRvIGFkZCBsaXN0ZW5lcnNcbiAqIG1lYW50IGZvciBleGVjdXRpb24gb24gdGhlIG5leHQgcmVxdWVzdGVkIGFuaW1hdGlvbiBmcmFtZS5cbiAqIEFuaW1hdGlvbiBmcmFtZXMgYXJlIHJlcXVlc3RlZCBvbmx5IHdoZW4gbmVjZXNzYXJ5LFxuICogZS5nLiBXaGVuIHRoZSB0aWNrZXIgaXMgc3RhcnRlZCBhbmQgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlclxuICovXG5mdW5jdGlvbiBUaWNrZXIoKVxue1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0aWNrIG1ldGhvZCBib3VuZCB0byB0aWNrZXIgaW5zdGFuY2UuXG4gICAgICogVGhpcyBpcyBiZWNhdXNlIGluIGVhcmx5IDIwMTUsIEZ1bmN0aW9uLmJpbmRcbiAgICAgKiBpcyBzdGlsbCA2MCUgc2xvd2VyIGluIGhpZ2ggcGVyZm9ybWFuY2Ugc2NlbmFyaW9zLlxuICAgICAqIEFsc28gc2VwYXJhdGluZyBmcmFtZSByZXF1ZXN0cyBmcm9tIHVwZGF0ZSBtZXRob2RcbiAgICAgKiBzbyBsaXN0ZW5lcnMgbWF5IGJlIGNhbGxlZCBhdCBhbnkgdGltZSBhbmQgd2l0aFxuICAgICAqIGFueSBhbmltYXRpb24gQVBJLCBqdXN0IGludm9rZSB0aWNrZXIudXBkYXRlKHRpbWUpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90aWNrID0gZnVuY3Rpb24gX3RpY2sodGltZSkge1xuXG4gICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgICAgIGlmIChfdGhpcy5zdGFydGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBJbnZva2UgbGlzdGVuZXJzIG5vd1xuICAgICAgICAgICAgX3RoaXMudXBkYXRlKHRpbWUpO1xuICAgICAgICAgICAgLy8gTGlzdGVuZXIgc2lkZSBlZmZlY3RzIG1heSBoYXZlIG1vZGlmaWVkIHRpY2tlciBzdGF0ZS5cbiAgICAgICAgICAgIGlmIChfdGhpcy5zdGFydGVkICYmIF90aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgX3RoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMuX3RpY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGVtaXR0ZXIgdXNlZCB0byBmaXJlICd0aWNrJyBldmVudFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGN1cnJlbnQgZnJhbWUgcmVxdWVzdCBJRFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHZhbHVlIG1hbmFnZWQgYnkgbWluRlBTIHByb3BlcnR5IHNldHRlciBhbmQgZ2V0dGVyLlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gYWxsb3dlZCBtaWxsaXNlY29uZHMgYmV0d2VlbiB1cGRhdGVzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4RWxhcHNlZE1TID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhpcyB0aWNrZXIgc2hvdWxkIGludm9rZSB0aGUgbWV0aG9kXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdGFydH0gYXV0b21hdGljYWxseVxuICAgICAqIHdoZW4gYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9TdGFydCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2NhbGFyIHRpbWUgdmFsdWUgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgc2V0dGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI21pbkZQU31cbiAgICAgKiBhbmQgaXMgc2NhbGVkIHdpdGgge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0uXG4gICAgICogKipOb3RlOioqIFRoZSBjYXAgbWF5IGJlIGV4Y2VlZGVkIGJ5IHNjYWxpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZGVsdGFUaW1lID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRpbWUgZWxhcHNlZCBpbiBtaWxsaXNlY29uZHMgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogT3Bwb3NlZCB0byB3aGF0IHRoZSBzY2FsYXIge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9XG4gICAgICogaXMgYmFzZWQsIHRoaXMgdmFsdWUgaXMgbmVpdGhlciBjYXBwZWQgbm9yIHNjYWxlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEgLyBUQVJHRVRfRlBNU1xuICAgICAqL1xuICAgIHRoaXMuZWxhcHNlZE1TID0gMSAvIENPTlNULlRBUkdFVF9GUE1TOyAvLyBkZWZhdWx0IHRvIHRhcmdldCBmcmFtZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCB0aW1lIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjdXBkYXRlfSB3YXMgaW52b2tlZC5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGFsc28gcmVzZXQgaW50ZXJuYWxseSBvdXRzaWRlIG9mIGludm9raW5nXG4gICAgICogdXBkYXRlLCBidXQgb25seSB3aGVuIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gICAgICogSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERPTUhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgICogdGhpcyB2YWx1ZSB3aWxsIGhhdmUgYSBwcmVjaXNpb24gb2YgMSDCtXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5sYXN0VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBGYWN0b3Igb2YgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBTY2FsZXMgdGlja2VyLmRlbHRhVGltZSB0byB3aGF0IHdvdWxkIGJlXG4gICAgICogLy8gdGhlIGVxdWl2YWxlbnQgb2YgYXBwcm94aW1hdGVseSAxMjAgRlBTXG4gICAgICogdGlja2VyLnNwZWVkID0gMjtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5zcGVlZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBoYXMgYmVlbiBzdGFydGVkLlxuICAgICAqIGB0cnVlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogYGZhbHNlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0b3B9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBXaGlsZSBgZmFsc2VgLCB0aGlzIHZhbHVlIG1heSBjaGFuZ2UgdG8gYHRydWVgIGluIHRoZVxuICAgICAqIGV2ZW50IG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBiZWluZyBgdHJ1ZWBcbiAgICAgKiBhbmQgYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlja2VyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZXMgcGVyIHNlY29uZCBhdCB3aGljaCB0aGlzIHRpY2tlciBpcyBydW5uaW5nLlxuICAgICAqIFRoZSBkZWZhdWx0IGlzIGFwcHJveGltYXRlbHkgNjAgaW4gbW9zdCBtb2Rlcm4gYnJvd3NlcnMuXG4gICAgICogKipOb3RlOioqIFRoaXMgZG9lcyBub3QgZmFjdG9yIGluIHRoZSB2YWx1ZSBvZlxuICAgICAqIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3BlZWR9LCB3aGljaCBpcyBzcGVjaWZpY1xuICAgICAqIHRvIHNjYWxpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuZWxhcHNlZE1TO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIG1pbGxpc2Vjb25kcyBhbGxvd2VkIHRvXG4gICAgICogZWxhcHNlIGJldHdlZW4gaW52b2tpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9LlxuICAgICAqIFRoaXMgdmFsdWUgaXMgdXNlZCB0byBjYXAge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICAgICAqIGJ1dCBkb2VzIG5vdCBlZmZlY3QgdGhlIG1lYXN1cmVkIHZhbHVlIG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjRlBTfS5cbiAgICAgKiBXaGVuIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSBpdCBpcyBjbGFtcGVkIHRvIGEgdmFsdWUgYmV0d2VlblxuICAgICAqIGAwYCBhbmQgYFBJWEkuVEFSR0VUX0ZQTVMgKiAxMDAwYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSS50aWNrZXIuVGlja2VyI1xuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgbWluRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuX21heEVsYXBzZWRNUztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbihmcHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIENsYW1wOiAwIHRvIFRBUkdFVF9GUE1TXG4gICAgICAgICAgICB2YXIgbWluRlBNUyA9IE1hdGgubWluKE1hdGgubWF4KDAsIGZwcykgLyAxMDAwLCBDT05TVC5UQVJHRVRfRlBNUyk7XG4gICAgICAgICAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxIC8gbWluRlBNUztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lLlxuICogSWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHkgYmVlbiByZXF1ZXN0ZWQsIGFuZCBpZiB0aGUgaW50ZXJuYWxcbiAqIGVtaXR0ZXIgaGFzIGxpc3RlbmVycywgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3JlcXVlc3RJZk5lZWRlZCA9IGZ1bmN0aW9uIF9yZXF1ZXN0SWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICAvLyBlbnN1cmUgY2FsbGJhY2tzIGdldCBjb3JyZWN0IGRlbHRhXG4gICAgICAgIHRoaXMubGFzdFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX3RpY2spO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSBjYW5jZWxzIGEgcGVuZGluZyBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fY2FuY2VsSWZOZWVkZWQgPSBmdW5jdGlvbiBfY2FuY2VsSWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgIT09IG51bGwpXG4gICAge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZXF1ZXN0SWQpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiB0aGUgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQgaXQgY2hlY2tzIGlmIGEgZnJhbWUgaGFzIG5vdCBhbHJlYWR5XG4gKiBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbCBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMuIElmIHRoZXNlXG4gKiBjb25kaXRpb25zIGFyZSBtZXQsIGEgbmV3IGZyYW1lIGlzIHJlcXVlc3RlZC4gSWYgdGhlIHRpY2tlciBoYXMgbm90XG4gKiBiZWVuIHN0YXJ0ZWQsIGJ1dCBhdXRvU3RhcnQgaXMgYHRydWVgLCB0aGVuIHRoZSB0aWNrZXIgc3RhcnRzIG5vdyxcbiAqIGFuZCBjb250aW51ZXMgd2l0aCB0aGUgcHJldmlvdXMgY29uZGl0aW9ucyB0byByZXF1ZXN0IGEgbmV3IGZyYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3N0YXJ0SWZQb3NzaWJsZSA9IGZ1bmN0aW9uIF9zdGFydElmUG9zc2libGUoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5hdXRvU3RhcnQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29ufSBpbnRlcm5hbGx5IGZvciB0aGVcbiAqIGludGVybmFsICd0aWNrJyBldmVudC4gSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsXG4gKiBhbmQgaWYgc28gaXQgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGF0IHRoaXMgcG9pbnQuXG4gKlxuICogQHBhcmFtIGZuIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGFkZGVkIGZvciB1cGRhdGVzXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbihUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29uY2V9IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIG9uZSB1cGRhdGVcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZE9uY2UgPSBmdW5jdGlvbiBhZGRPbmNlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub25jZShUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29mZn0gaW50ZXJuYWxseSBmb3IgJ3RpY2snIGV2ZW50LlxuICogSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMgZm9yICd0aWNrJyBldmVudC5cbiAqIElmIGl0IGRvZXMsIHRoZW4gaXQgY2FuY2VscyB0aGUgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwYXJhbSBbZm5dIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIHJlbW92ZWRcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dCB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub2ZmKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIGlmICghdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgbGlzdGVuZXJzXG4gKiBhIG5ldyBhbmltYXRpb24gZnJhbWUgaXMgcmVxdWVzdGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiBzdGFydCgpXG57XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSB0aWNrZXIuIElmIHRoZSB0aWNrZXIgaGFzIHJlcXVlc3RlZFxuICogYW4gYW5pbWF0aW9uIGZyYW1lIGl0IGlzIGNhbmNlbGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uIHN0b3AoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2FuY2VsSWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRyaWdnZXJzIGFuIHVwZGF0ZS4gQW4gdXBkYXRlIGVudGFpbHMgc2V0dGluZyB0aGVcbiAqIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNlbGFwc2VkTVN9LFxuICogdGhlIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICogaW52b2tpbmcgYWxsIGxpc3RlbmVycyB3aXRoIGN1cnJlbnQgZGVsdGFUaW1lLFxuICogYW5kIHRoZW4gZmluYWxseSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbGFzdFRpbWV9XG4gKiB3aXRoIHRoZSB2YWx1ZSBvZiBjdXJyZW50VGltZSB0aGF0IHdhcyBwcm92aWRlZC5cbiAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgYW5pbWF0aW9uXG4gKiBmcmFtZSBjYWxsYmFja3MgaWYgdGhlIHRpY2tlciBpbnN0YW5jZSBoYXMgYmVlbiBzdGFydGVkXG4gKiBhbmQgbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqXG4gKiBAcGFyYW0gW2N1cnJlbnRUaW1lPXBlcmZvcm1hbmNlLm5vdygpXSB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9IHRoZSBjdXJyZW50IHRpbWUgb2YgZXhlY3V0aW9uXG4gKi9cblRpY2tlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKGN1cnJlbnRUaW1lKVxue1xuICAgIHZhciBlbGFwc2VkTVM7XG5cbiAgICAvLyBBbGxvdyBjYWxsaW5nIHVwZGF0ZSBkaXJlY3RseSB3aXRoIGRlZmF1bHQgY3VycmVudFRpbWUuXG4gICAgY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSB8fCBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAvLyBTYXZlIHVuY2FwcGVkIGVsYXBzZWRNUyBmb3IgbWVhc3VyZW1lbnRcbiAgICBlbGFwc2VkTVMgPSB0aGlzLmVsYXBzZWRNUyA9IGN1cnJlbnRUaW1lIC0gdGhpcy5sYXN0VGltZTtcblxuICAgIC8vIGNhcCB0aGUgbWlsbGlzZWNvbmRzIGVsYXBzZWQgdXNlZCBmb3IgZGVsdGFUaW1lXG4gICAgaWYgKGVsYXBzZWRNUyA+IHRoaXMuX21heEVsYXBzZWRNUylcbiAgICB7XG4gICAgICAgIGVsYXBzZWRNUyA9IHRoaXMuX21heEVsYXBzZWRNUztcbiAgICB9XG5cbiAgICB0aGlzLmRlbHRhVGltZSA9IGVsYXBzZWRNUyAqIENPTlNULlRBUkdFVF9GUE1TICogdGhpcy5zcGVlZDtcblxuICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgYWRkZWQgdG8gaW50ZXJuYWwgZW1pdHRlclxuICAgIHRoaXMuX2VtaXR0ZXIuZW1pdChUSUNLLCB0aGlzLmRlbHRhVGltZSk7XG5cbiAgICB0aGlzLmxhc3RUaW1lID0gY3VycmVudFRpbWU7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRpY2tlcjtcbiIsInZhciBUaWNrZXIgPSByZXF1aXJlKCcuL1RpY2tlcicpO1xuXG4vKipcbiAqIFRoZSBzaGFyZWQgdGlja2VyIGluc3RhbmNlIHVzZWQgYnkge0BsaW5rIFBJWEkuZXh0cmFzLk1vdmllQ2xpcH0uXG4gKiBhbmQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqIFRoZSBwcm9wZXJ0eSB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2F1dG9TdGFydH0gaXMgc2V0IHRvIGB0cnVlYFxuICogZm9yIHRoaXMgaW5zdGFuY2UuIFBsZWFzZSBmb2xsb3cgdGhlIGV4YW1wbGVzIGZvciB1c2FnZSwgaW5jbHVkaW5nXG4gKiBob3cgdG8gb3B0LW91dCBvZiBhdXRvLXN0YXJ0aW5nIHRoZSBzaGFyZWQgdGlja2VyLlxuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgdGlja2VyID0gUElYSS50aWNrZXIuc2hhcmVkO1xuICogLy8gU2V0IHRoaXMgdG8gcHJldmVudCBzdGFydGluZyB0aGlzIHRpY2tlciB3aGVuIGxpc3RlbmVycyBhcmUgYWRkZWQuXG4gKiAvLyBCeSBkZWZhdWx0IHRoaXMgaXMgdHJ1ZSBvbmx5IGZvciB0aGUgUElYSS50aWNrZXIuc2hhcmVkIGluc3RhbmNlLlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogLy8gRllJLCBjYWxsIHRoaXMgdG8gZW5zdXJlIHRoZSB0aWNrZXIgaXMgc3RvcHBlZC4gSXQgc2hvdWxkIGJlIHN0b3BwZWRcbiAqIC8vIGlmIHlvdSBoYXZlIG5vdCBhdHRlbXB0ZWQgdG8gcmVuZGVyIGFueXRoaW5nIHlldC5cbiAqIHRpY2tlci5zdG9wKCk7XG4gKiAvLyBDYWxsIHRoaXMgd2hlbiB5b3UgYXJlIHJlYWR5IGZvciBhIHJ1bm5pbmcgc2hhcmVkIHRpY2tlci5cbiAqIHRpY2tlci5zdGFydCgpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBZb3UgbWF5IHVzZSB0aGUgc2hhcmVkIHRpY2tlciB0byByZW5kZXIuLi5cbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDgwMCwgNjAwKTtcbiAqIHZhciBzdGFnZSA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogdmFyIGludGVyYWN0aW9uTWFuYWdlciA9IFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyKTtcbiAqIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocmVuZGVyZXIudmlldyk7XG4gKiB0aWNrZXIuYWRkKGZ1bmN0aW9uICh0aW1lKSB7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBPciB5b3UgY2FuIGp1c3QgdXBkYXRlIGl0IG1hbnVhbGx5LlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogdGlja2VyLnN0b3AoKTtcbiAqIGZ1bmN0aW9uIGFuaW1hdGUodGltZSkge1xuICogICAgIHRpY2tlci51cGRhdGUodGltZSk7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XG4gKiB9XG4gKiBhbmltYXRlKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAqXG4gKiBAdHlwZSB7UElYSS50aWNrZXIuVGlja2VyfVxuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbnZhciBzaGFyZWQgPSBuZXcgVGlja2VyKCk7XG5zaGFyZWQuYXV0b1N0YXJ0ID0gdHJ1ZTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudGlja2VyXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIHNoYXJlZDogc2hhcmVkLFxuICAgIFRpY2tlcjogVGlja2VyXG59O1xuIiwiLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuXG52YXIgR0xfTUFQID0ge307XG5cblxudmFyIGNyZWF0ZUluZGljZXNGb3JRdWFkcyA9IGZ1bmN0aW9uIChzaXplKVxue1xuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYXJyYXksIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgIFxuICAgIHZhciB0b3RhbEluZGljZXMgPSBzaXplICogNjtcblxuICAgIHZhciBpbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHRvdGFsSW5kaWNlcyk7XG5cblx0Ly8gZmlsbCB0aGUgaW5kaWNlcyB3aXRoIHRoZSBxdWFkcyB0byBkcmF3XG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCB0b3RhbEluZGljZXM7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kaWNlcztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzOyIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLnV0aWxzXG4gKi9cbnZhciB1dGlscyA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIF91aWQ6IDAsXG4gICAgX3NhaWRIZWxsbzogZmFsc2UsXG5cbiAgICBFdmVudEVtaXR0ZXI6ICAgcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIHBsdWdpblRhcmdldDogICByZXF1aXJlKCcuL3BsdWdpblRhcmdldCcpLFxuICAgIGFzeW5jOiAgICAgICAgICByZXF1aXJlKCdhc3luYycpLFxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllclxuICAgICAqXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllciB0byB1c2UuXG4gICAgICovXG4gICAgdWlkOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICsrdXRpbHMuX3VpZDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBoZXggY29sb3IgbnVtYmVyIHRvIGFuIFtSLCBHLCBCXSBhcnJheVxuICAgICAqXG4gICAgICogQHBhcmFtIGhleCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSAge251bWJlcltdfSBbb3V0PVtdXVxuICAgICAqIEByZXR1cm4ge251bWJlcltdfSBBbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIFtSLCBHLCBCXSBvZiB0aGUgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnJnYjogZnVuY3Rpb24gKGhleCwgb3V0KVxuICAgIHtcbiAgICAgICAgb3V0ID0gb3V0IHx8IFtdO1xuXG4gICAgICAgIG91dFswXSA9IChoZXggPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzFdID0gKGhleCA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIG91dFsyXSA9IChoZXggJiAweEZGKSAvIDI1NTtcblxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5nIGNvbG9yLlxuICAgICAqL1xuICAgIGhleDJzdHJpbmc6IGZ1bmN0aW9uIChoZXgpXG4gICAge1xuICAgICAgICBoZXggPSBoZXgudG9TdHJpbmcoMTYpO1xuICAgICAgICBoZXggPSAnMDAwMDAwJy5zdWJzdHIoMCwgNiAtIGhleC5sZW5ndGgpICsgaGV4O1xuXG4gICAgICAgIHJldHVybiAnIycgKyBoZXg7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgY29sb3IgYXMgYW4gW1IsIEcsIEJdIGFycmF5IHRvIGEgaGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIHJnYiB7bnVtYmVyW119XG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgY29sb3IgbnVtYmVyXG4gICAgICovXG4gICAgcmdiMmhleDogZnVuY3Rpb24gKHJnYilcbiAgICB7XG4gICAgICAgIHJldHVybiAoKHJnYlswXSoyNTUgPDwgMTYpICsgKHJnYlsxXSoyNTUgPDwgOCkgKyByZ2JbMl0qMjU1KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIENhbnZhcyBCbGVuZE1vZGVzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnJvd3NlclxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciB0aGV5IGFyZSBzdXBwb3J0ZWRcbiAgICAgKi9cbiAgICBjYW5Vc2VOZXdDYW52YXNCbGVuZE1vZGVzOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwbmdIZWFkID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVFBQUFBQkFRTUFBQUREOHAyT0FBQUFBMUJNVkVYLyc7XG4gICAgICAgIHZhciBwbmdFbmQgPSAnQUFBQUNrbEVRVlFJMTJOZ0FBQUFBZ0FCNGlHOE13QUFBQUJKUlU1RXJrSmdnZz09JztcblxuICAgICAgICB2YXIgbWFnZW50YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBtYWdlbnRhLnNyYyA9IHBuZ0hlYWQgKyAnQVA4MDRPYTYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciB5ZWxsb3cgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgeWVsbG93LnNyYyA9IHBuZ0hlYWQgKyAnL3dDS3h2UkYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY2FudmFzLndpZHRoID0gNjtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IDE7XG5cbiAgICAgICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShtYWdlbnRhLCAwLCAwKTtcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoeWVsbG93LCAyLCAwKTtcblxuICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDIsMCwxLDEpLmRhdGE7XG5cbiAgICAgICAgcmV0dXJuIChkYXRhWzBdID09PSAyNTUgJiYgZGF0YVsxXSA9PT0gMCAmJiBkYXRhWzJdID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBudW1iZXIsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgdGFrZW4gZnJvbSBTdGFybGluZyBGcmFtZXdvcmsgYXMgaXRzIHByZXR0eSBuZWF0IDspXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbnVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7bnVtYmVyfSB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqL1xuICAgIGdldE5leHRQb3dlck9mVHdvOiBmdW5jdGlvbiAobnVtYmVyKVxuICAgIHtcbiAgICAgICAgLy8gc2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Bvd2VyX29mX3R3byNGYXN0X2FsZ29yaXRobV90b19jaGVja19pZl9hX3Bvc2l0aXZlX251bWJlcl9pc19hX3Bvd2VyX29mX3R3b1xuICAgICAgICBpZiAobnVtYmVyID4gMCAmJiAobnVtYmVyICYgKG51bWJlciAtIDEpKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSAxO1xuXG4gICAgICAgICAgICB3aGlsZSAocmVzdWx0IDwgbnVtYmVyKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA8PD0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBjaGVja3MgaWYgdGhlIGdpdmVuIHdpZHRoIGFuZCBoZWlnaHQgbWFrZSBhIHBvd2VyIG9mIHR3byByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSBoZWlnaHQge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzUG93ZXJPZlR3bzogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm4gKHdpZHRoID4gMCAmJiAod2lkdGggJiAod2lkdGggLSAxKSkgPT09IDAgJiYgaGVpZ2h0ID4gMCAmJiAoaGVpZ2h0ICYgKGhlaWdodCAtIDEpKSA9PT0gMCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGdldCB0aGUgcmVzb2x1dGlvbiBvZiBhbiBhc3NldCBieSBsb29raW5nIGZvciB0aGUgcHJlZml4XG4gICAgICogdXNlZCBieSBzcHJpdGVzaGVldHMgYW5kIGltYWdlIHVybHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwge3N0cmluZ30gdGhlIGltYWdlIHBhdGhcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0UmVzb2x1dGlvbk9mVXJsOiBmdW5jdGlvbiAodXJsKVxuICAgIHtcbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBDT05TVC5SRVRJTkFfUFJFRklYLmV4ZWModXJsKTtcblxuICAgICAgICBpZiAocmVzb2x1dGlvbilcbiAgICAgICAge1xuICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChyZXNvbHV0aW9uWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAxO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBMb2dzIG91dCB0aGUgdmVyc2lvbiBhbmQgcmVuZGVyZXIgaW5mb3JtYXRpb24gZm9yIHRoaXMgcnVubmluZyBpbnN0YW5jZSBvZiBQSVhJLlxuICAgICAqIElmIHlvdSBkb24ndCB3YW50IHRvIHNlZSB0aGlzIG1lc3NhZ2UgeW91IGNhbiBzZXQgYFBJWEkudXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7YFxuICAgICAqIHNvIHRoZSBsaWJyYXJ5IHRoaW5rcyBpdCBhbHJlYWR5IHNhaWQgaXQuIEtlZXAgaW4gbWluZCB0aGF0IGRvaW5nIHRoYXQgd2lsbCBmb3JldmVyXG4gICAgICogbWFrZXMgeW91IGEgamVyayBmYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBUaGUgc3RyaW5nIHJlbmRlcmVyIHR5cGUgdG8gbG9nLlxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBzYXlIZWxsbzogZnVuY3Rpb24gKHR5cGUpXG4gICAge1xuICAgICAgICBpZiAodXRpbHMuX3NhaWRIZWxsbylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjaHJvbWUnKSA+IC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtcbiAgICAgICAgICAgICAgICAnXFxuICVjICVjICVjIFBpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0g4pywICcgKyB0eXBlICsgJyDinLAgICVjICcgKyAnICVjICcgKyAnIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8gICVjICVjIOKZpSVj4pmlJWPimaUgXFxuXFxuJyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmY2NmE1OyBiYWNrZ3JvdW5kOiAjMDMwMzA3OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmYzNkYzsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOydcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBhcmdzKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3aW5kb3cuY29uc29sZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nKCdQaXhpLmpzICcgKyBDT05TVC5WRVJTSU9OICsgJyAtICcgKyB0eXBlICsgJyAtIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8nKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuXG4gICAgICAgIHV0aWxzLl9zYWlkSGVsbG8gPSB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgZm9yIGNoZWNraW5nIGZvciB3ZWJnbCBzdXBwb3J0XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzV2ViR0xTdXBwb3J0ZWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB2YXIgY29udGV4dE9wdGlvbnMgPSB7IHN0ZW5jaWw6IHRydWUgfTtcbiAgICAgICAgdHJ5XG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghd2luZG93LldlYkdMUmVuZGVyaW5nQ29udGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSxcbiAgICAgICAgICAgICAgICBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIGNvbnRleHRPcHRpb25zKSB8fCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgY29udGV4dE9wdGlvbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gISEoZ2wgJiYgZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5zdGVuY2lsKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgc2lnbiBvZiBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBuIHtudW1iZXJ9XG4gICAgICogQHJldHVybnMge251bWJlcn0gMCBpZiBuIGlzIDAsIC0xIGlmIG4gaXMgbmVnYXRpdmUsIDEgaWYgbiBpIHBvc2l0aXZlXG4gICAgICovXG4gICAgc2lnbjogZnVuY3Rpb24gKG4pXG4gICAge1xuICAgICAgICByZXR1cm4gbiA/IChuIDwgMCA/IC0xIDogMSkgOiAwO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZW1vdmVJdGVtc1xuICAgICAqXG4gICAgICogQHBhcmFtIHthcnJheX0gYXJyIFRoZSB0YXJnZXQgYXJyYXlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRJZHggVGhlIGluZGV4IHRvIGJlZ2luIHJlbW92aW5nIGZyb20gKGluY2x1c2l2ZSlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmVtb3ZlQ291bnQgSG93IG1hbnkgaXRlbXMgdG8gcmVtb3ZlXG4gICAgICovXG4gICAgcmVtb3ZlSXRlbXM6IGZ1bmN0aW9uIChhcnIsIHN0YXJ0SWR4LCByZW1vdmVDb3VudClcbiAgICB7XG4gICAgICAgIHZhciBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIGlmIChzdGFydElkeCA+PSBsZW5ndGggfHwgcmVtb3ZlQ291bnQgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbW92ZUNvdW50ID0gKHN0YXJ0SWR4K3JlbW92ZUNvdW50ID4gbGVuZ3RoID8gbGVuZ3RoLXN0YXJ0SWR4IDogcmVtb3ZlQ291bnQpO1xuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJZHgsIGxlbiA9IGxlbmd0aC1yZW1vdmVDb3VudDsgaSA8IGxlbjsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBhcnJbaV0gPSBhcnJbaSArIHJlbW92ZUNvdW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyci5sZW5ndGggPSBsZW47XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIERlc2NyaWJlIHByb3BlcnR5IHVzYWdlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBUZXh0dXJlQ2FjaGU6IHt9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHt9XG59O1xuIiwiLyoqXG4gKiBNaXhpbnMgZnVuY3Rpb25hbGl0eSB0byBtYWtlIGFuIG9iamVjdCBoYXZlIFwicGx1Z2luc1wiLlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkudXRpbHNcbiAqIEBwYXJhbSBvYmoge29iamVjdH0gVGhlIG9iamVjdCB0byBtaXggaW50by5cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIHBsdWdpblRhcmdldC5taXhpbihNeU9iamVjdCk7XG4gKi9cbmZ1bmN0aW9uIHBsdWdpblRhcmdldChvYmopXG57XG4gICAgb2JqLl9fcGx1Z2lucyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHBsdWdpbiB0byBhbiBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwbHVnaW5OYW1lIHtzdHJpbmd9IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICAgICAqIEBwYXJhbSBjdG9yIHtGdW5jdGlvbn0gVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciB0aGUgcGx1Z2luLlxuICAgICAqL1xuICAgIG9iai5yZWdpc3RlclBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW5OYW1lLCBjdG9yKVxuICAgIHtcbiAgICAgICAgb2JqLl9fcGx1Z2luc1twbHVnaW5OYW1lXSA9IGN0b3I7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlcyBhbGwgdGhlIHBsdWdpbnMgb2YgdGhpcyBvYmplY3RcbiAgICAgKlxuICAgICAqL1xuICAgIG9iai5wcm90b3R5cGUuaW5pdFBsdWdpbnMgPSBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zID0gdGhpcy5wbHVnaW5zIHx8IHt9O1xuXG4gICAgICAgIGZvciAodmFyIG8gaW4gb2JqLl9fcGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbmV3IChvYmouX19wbHVnaW5zW29dKSh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5kZXN0cm95UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBvIGluIHRoaXMucGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBsdWdpbnMgPSBudWxsO1xuICAgIH07XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLyoqXG4gICAgICogTWl4ZXMgaW4gdGhlIHByb3BlcnRpZXMgb2YgdGhlIHBsdWdpblRhcmdldCBpbnRvIGFub3RoZXIgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0IHtvYmplY3R9IFRoZSBvYmogdG8gbWl4IGludG9cbiAgICAgKi9cbiAgICBtaXhpbjogZnVuY3Rpb24gbWl4aW4ob2JqKVxuICAgIHtcbiAgICAgICAgcGx1Z2luVGFyZ2V0KG9iaik7XG4gICAgfVxufTtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciBjb3JlID0gcmVxdWlyZSgnLi9jb3JlJyksXG4gICAgbWVzaCA9IHJlcXVpcmUoJy4vbWVzaCcpLFxuICAgIGV4dHJhcyA9IHJlcXVpcmUoJy4vZXh0cmFzJyksXG4gICAgZmlsdGVycyA9IHJlcXVpcmUoJy4vZmlsdGVycycpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIFNwcml0ZUJhdGNoXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLlBhcnRpY2xlQ29udGFpbmVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlNwcml0ZUJhdGNoID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLicpO1xufTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBBc3NldExvYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBzZWUgUElYSS5sb2FkZXJzLkxvYWRlclxuICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IFRoZSBsb2FkZXIgc3lzdGVtIHdhcyBvdmVyaGF1bGVkIGluIHBpeGkgdjMsIHBsZWFzZSBzZWUgdGhlIG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyIGNsYXNzLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLkFzc2V0TG9hZGVyID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuJyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb3JlLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFN0YWdlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQ29udGFpbmVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFN0YWdlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1lvdSBkbyBub3QgbmVlZCB0byB1c2UgYSBQSVhJIFN0YWdlIGFueSBtb3JlLCB5b3UgY2FuIHNpbXBseSByZW5kZXIgYW55IGNvbnRhaW5lci4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIERpc3BsYXlPYmplY3RDb250YWluZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgRGlzcGxheU9iamVjdENvbnRhaW5lcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEaXNwbGF5T2JqZWN0Q29udGFpbmVyIGhhcyBiZWVuIHNob3J0ZW5lZCB0byBDb250YWluZXIsIHBsZWFzZSB1c2UgQ29udGFpbmVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RyaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2hcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RyaXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFN0cmlwIGNsYXNzIGhhcyBiZWVuIHJlbmFtZWQgdG8gTWVzaCBhbmQgbW92ZWQgdG8gbWVzaC5NZXNoLCBwbGVhc2UgdXNlIG1lc2guTWVzaCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLk1lc2g7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBSb3BlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkubWVzaC5Sb3BlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFJvcGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFJvcGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gbWVzaC5Sb3BlLCBwbGVhc2UgdXNlIG1lc2guUm9wZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLlJvcGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBNb3ZpZUNsaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuTW92aWVDbGlwXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIE1vdmllQ2xpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgTW92aWVDbGlwIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5Nb3ZpZUNsaXAsIHBsZWFzZSB1c2UgZXh0cmFzLk1vdmllQ2xpcCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuTW92aWVDbGlwO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGlsaW5nU3ByaXRlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBUaWxpbmdTcHJpdGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRpbGluZ1Nwcml0ZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuVGlsaW5nU3ByaXRlLCBwbGVhc2UgdXNlIGV4dHJhcy5UaWxpbmdTcHJpdGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLlRpbGluZ1Nwcml0ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJpdG1hcFRleHRcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCaXRtYXBUZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCaXRtYXBUZXh0IGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5CaXRtYXBUZXh0LCBwbGVhc2UgdXNlIGV4dHJhcy5CaXRtYXBUZXh0IGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5CaXRtYXBUZXh0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgYmxlbmRNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIGJsZW5kTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGJsZW5kTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gQkxFTkRfTU9ERVMsIHBsZWFzZSB1c2UgQkxFTkRfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5CTEVORF9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNjYWxlTW9kZXNcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBzY2FsZU1vZGVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBzY2FsZU1vZGVzIGhhcyBiZWVuIG1vdmVkIHRvIFNDQUxFX01PREVTLCBwbGVhc2UgdXNlIFNDQUxFX01PREVTIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU0NBTEVfTU9ERVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBCYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuQmFzZVRleHR1cmVDYWNoZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCYXNlVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgQmFzZVRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5CYXNlVGV4dHVyZUNhY2hlLCBwbGVhc2UgdXNlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5UZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuVGV4dHVyZUNhY2hlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIG1hdGhcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBtYXRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgbWF0aCBuYW1lc3BhY2UgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIGFjY2VzcyBtZW1iZXJzIGFscmVhZHkgYWNjZXNzaWJsZSBvbiBQSVhJLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgUElYSS5TcHJpdGUjc2V0VGV4dHVyZVxuICogQHNlZSBQSVhJLlNwcml0ZSN0ZXh0dXJlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlLnByb3RvdHlwZS5zZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dHVyZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dHVyZSBwcm9wZXJ0eSwgZS5nIDogc3ByaXRlLnRleHR1cmUgPSB0ZXh0dXJlOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3NldFRleHRcbiAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmV4dHJhcy5CaXRtYXBUZXh0LnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dClcbntcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dCBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dCBwcm9wZXJ0eSwgZS5nIDogbXlCaXRtYXBUZXh0LnRleHQgPSBcXCdteSB0ZXh0XFwnOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLlRleHQjdGV4dFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteVRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRTdHlsZVxuICogQHNlZSBQSVhJLlRleHQjc3R5bGVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0LnByb3RvdHlwZS5zZXRTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlKVxue1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldFN0eWxlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBzdHlsZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0LnN0eWxlID0gc3R5bGU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQHNlZSBQSVhJLlRleHR1cmUjc2V0RnJhbWVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0dXJlLnByb3RvdHlwZS5zZXRGcmFtZSA9IGZ1bmN0aW9uKGZyYW1lKVxue1xuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldEZyYW1lIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBmcmFtZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0dXJlLmZyYW1lID0gZnJhbWU7Jyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhmaWx0ZXJzLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBzZWUgUElYSS5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBBYnN0cmFjdEZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLkFic3RyYWN0RmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBBYnN0cmFjdEZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkFic3RyYWN0RmlsdGVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkZYQUFGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuRlhBQUZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBGWEFBRmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuRlhBQUZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgRlhBQUZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkZYQUFGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuU3ByaXRlTWFza0ZpbHRlclxuICAgICAqIEBzZWUgUElYSS5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIFNwcml0ZU1hc2tGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBTcHJpdGVNYXNrRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU3ByaXRlTWFza0ZpbHRlcjtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkudXRpbHMudXVpZFxuICogQHNlZSBQSVhJLnV0aWxzLnVpZFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICovXG5jb3JlLnV0aWxzLnV1aWQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvbnNvbGUud2FybigndXRpbHMudXVpZCgpIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdXRpbHMudWlkKCkgZnJvbSBub3cgb24uJyk7XG4gICAgcmV0dXJuIGNvcmUudXRpbHMudWlkKCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogQSBCaXRtYXBUZXh0IG9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dCB1c2luZyBiaXRtYXAgZm9udC4gVG9cbiAqIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJywgJ1xccicgb3IgJ1xcclxcbicgaW4geW91ciBzdHJpbmcuIFlvdSBjYW4gZ2VuZXJhdGUgdGhlIGZudCBmaWxlcyB1c2luZzpcbiAqXG4gKiBBIEJpdG1hcFRleHQgY2FuIG9ubHkgYmUgY3JlYXRlZCB3aGVuIHRoZSBmb250IGlzIGxvYWRlZFxuICpcbiAqIGBgYGpzXG4gKiAvLyBpbiB0aGlzIGNhc2UgdGhlIGZvbnQgaXMgaW4gYSBmaWxlIGNhbGxlZCAnZGVzeXJlbC5mbnQnXG4gKiB2YXIgYml0bWFwVGV4dCA9IG5ldyBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0KFwidGV4dCB1c2luZyBhIGZhbmN5IGZvbnQhXCIsIHtmb250OiBcIjM1cHggRGVzeXJlbFwiLCBhbGlnbjogXCJyaWdodFwifSk7XG4gKiBgYGBcbiAqXG4gKlxuICogaHR0cDovL3d3dy5hbmdlbGNvZGUuY29tL3Byb2R1Y3RzL2JtZm9udC8gZm9yIHdpbmRvd3Mgb3JcbiAqIGh0dHA6Ly93d3cuYm1nbHlwaC5jb20vIGZvciBtYWMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBzdHlsZSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIHN0eWxlLmZvbnQge3N0cmluZ3xvYmplY3R9IFRoZSBmb250IGRlc2NyaXB0b3IgZm9yIHRoZSBvYmplY3QsIGNhbiBiZSBwYXNzZWQgYXMgYSBzdHJpbmcgb2YgZm9ybVxuICogICAgICBcIjI0cHggRm9udE5hbWVcIiBvciBcIkZvbnROYW1lXCIgb3IgYXMgYW4gb2JqZWN0IHdpdGggZXhwbGljaXQgbmFtZS9zaXplIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQubmFtZV0ge3N0cmluZ30gVGhlIGJpdG1hcCBmb250IGlkXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQuc2l6ZV0ge251bWJlcn0gVGhlIHNpemUgb2YgdGhlIGZvbnQgaW4gcGl4ZWxzLCBlLmcuIDI0XG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0XG4gKiAgICAgIHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUudGludD0weEZGRkZGRl0ge251bWJlcn0gVGhlIHRpbnQgY29sb3JcbiAqL1xuZnVuY3Rpb24gQml0bWFwVGV4dCh0ZXh0LCBzdHlsZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgb3ZlcmFsbCB0ZXh0LCBkaWZmZXJlbnQgZnJvbSBmb250U2l6ZSxcbiAgICAgKiB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBzdHlsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRleHRXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dEhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBsZXR0ZXIgc3ByaXRlIHBvb2wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZ2x5cGhzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZm9udCA9IHtcbiAgICAgICAgdGludDogc3R5bGUudGludCAhPT0gdW5kZWZpbmVkID8gc3R5bGUudGludCA6IDB4RkZGRkZGLFxuICAgICAgICBhbGlnbjogc3R5bGUuYWxpZ24gfHwgJ2xlZnQnLFxuICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICBzaXplOiAwXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgZm9udC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZm9udCA9IHN0eWxlLmZvbnQ7IC8vIHJ1biBmb250IHNldHRlclxuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IHRleHQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IHdpZHRoIG9mIHRoaXMgYml0bWFwIHRleHQgaW4gcGl4ZWxzLiBJZiB0aGUgdGV4dCBwcm92aWRlZCBpcyBsb25nZXIgdGhhbiB0aGUgdmFsdWUgcHJvdmlkZWQsIGxpbmUgYnJlYWtzIHdpbGwgYmUgYXV0b21hdGljYWxseSBpbnNlcnRlZCBpbiB0aGUgbGFzdCB3aGl0ZXNwYWNlLlxuICAgICAqIERpc2FibGUgYnkgc2V0dGluZyB2YWx1ZSB0byAwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IGxpbmUgaGVpZ2h0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRyeWluZyB0byB1c2UgdGhlIHRvdGFsIGhlaWdodCBvZiB0aGUgVGV4dCwgaWU6IHdoZW4gdHJ5aW5nIHRvIHZlcnRpY2FsbHkgYWxpZ24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkaXJ0eSBzdGF0ZSBvZiB0aGlzIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy51cGRhdGVUZXh0KCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5CaXRtYXBUZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5Db250YWluZXIucHJvdG90eXBlKTtcbkJpdG1hcFRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQml0bWFwVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gQml0bWFwVGV4dDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQml0bWFwVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGludCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0aW50OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQudGludDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQudGludCA9ICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlID49IDApID8gdmFsdWUgOiAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFsaWdubWVudCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbGVmdCdcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBhbGlnbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250LmFsaWduO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC5hbGlnbiA9IHZhbHVlIHx8ICdsZWZ0JztcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZvbnQgZGVzY3JpcHRvciBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0ZvbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgZm9udDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcgJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9mb250Lm5hbWUgPSB2YWx1ZS5sZW5ndGggPT09IDEgPyB2YWx1ZVswXSA6IHZhbHVlLnNsaWNlKDEpLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB2YWx1ZS5sZW5ndGggPj0gMiA/IHBhcnNlSW50KHZhbHVlWzBdLCAxMCkgOiBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV0uc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5zaXplID0gdHlwZW9mIHZhbHVlLnNpemUgPT09ICdudW1iZXInID8gdmFsdWUuc2l6ZSA6IHBhcnNlSW50KHZhbHVlLnNpemUsIDEwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGV4dCBhbmQgdXBkYXRlcyBpdCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkYXRhID0gQml0bWFwVGV4dC5mb250c1t0aGlzLl9mb250Lm5hbWVdO1xuICAgIHZhciBwb3MgPSBuZXcgY29yZS5Qb2ludCgpO1xuICAgIHZhciBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgIHZhciBjaGFycyA9IFtdO1xuICAgIHZhciBsYXN0TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbGluZVdpZHRocyA9IFtdO1xuICAgIHZhciBsaW5lID0gMDtcbiAgICB2YXIgc2NhbGUgPSB0aGlzLl9mb250LnNpemUgLyBkYXRhLnNpemU7XG4gICAgdmFyIGxhc3RTcGFjZSA9IC0xO1xuICAgIHZhciBtYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0Lmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gdGhpcy50ZXh0LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGxhc3RTcGFjZSA9IC8oXFxzKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSA/IGkgOiBsYXN0U3BhY2U7XG5cbiAgICAgICAgaWYgKC8oPzpcXHJcXG58XFxyfFxcbikvLnRlc3QodGhpcy50ZXh0LmNoYXJBdChpKSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXN0U3BhY2UgIT09IC0xICYmIHRoaXMubWF4V2lkdGggPiAwICYmIHBvcy54ICogc2NhbGUgPiB0aGlzLm1heFdpZHRoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKGNoYXJzLCBsYXN0U3BhY2UsIGkgLSBsYXN0U3BhY2UpO1xuICAgICAgICAgICAgaSA9IGxhc3RTcGFjZTtcbiAgICAgICAgICAgIGxhc3RTcGFjZSA9IC0xO1xuXG4gICAgICAgICAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbGluZSsrO1xuXG4gICAgICAgICAgICBwb3MueCA9IDA7XG4gICAgICAgICAgICBwb3MueSArPSBkYXRhLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hhckRhdGEgPSBkYXRhLmNoYXJzW2NoYXJDb2RlXTtcblxuICAgICAgICBpZiAoIWNoYXJEYXRhKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmV2Q2hhckNvZGUgJiYgY2hhckRhdGEua2VybmluZ1twcmV2Q2hhckNvZGVdKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb3MueCArPSBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV07XG4gICAgICAgIH1cblxuICAgICAgICBjaGFycy5wdXNoKHt0ZXh0dXJlOmNoYXJEYXRhLnRleHR1cmUsIGxpbmU6IGxpbmUsIGNoYXJDb2RlOiBjaGFyQ29kZSwgcG9zaXRpb246IG5ldyBjb3JlLlBvaW50KHBvcy54ICsgY2hhckRhdGEueE9mZnNldCwgcG9zLnkgKyBjaGFyRGF0YS55T2Zmc2V0KX0pO1xuICAgICAgICBsYXN0TGluZVdpZHRoID0gcG9zLnggKyAoY2hhckRhdGEudGV4dHVyZS53aWR0aCArIGNoYXJEYXRhLnhPZmZzZXQpO1xuICAgICAgICBwb3MueCArPSBjaGFyRGF0YS54QWR2YW5jZTtcbiAgICAgICAgbWF4TGluZUhlaWdodCA9IE1hdGgubWF4KG1heExpbmVIZWlnaHQsIChjaGFyRGF0YS55T2Zmc2V0ICsgY2hhckRhdGEudGV4dHVyZS5oZWlnaHQpKTtcbiAgICAgICAgcHJldkNoYXJDb2RlID0gY2hhckNvZGU7XG4gICAgfVxuXG4gICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG5cbiAgICB2YXIgbGluZUFsaWduT2Zmc2V0cyA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8PSBsaW5lOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYWxpZ25PZmZzZXQgPSAwO1xuXG4gICAgICAgIGlmICh0aGlzLl9mb250LmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbGlnbk9mZnNldCA9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5fZm9udC5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpbmVBbGlnbk9mZnNldHMucHVzaChhbGlnbk9mZnNldCk7XG4gICAgfVxuXG4gICAgdmFyIGxlbkNoYXJzID0gY2hhcnMubGVuZ3RoO1xuICAgIHZhciB0aW50ID0gdGhpcy50aW50O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbkNoYXJzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYyA9IHRoaXMuX2dseXBoc1tpXTsgLy8gZ2V0IHRoZSBuZXh0IGdseXBoIHNwcml0ZVxuXG4gICAgICAgIGlmIChjKVxuICAgICAgICB7XG4gICAgICAgICAgICBjLnRleHR1cmUgPSBjaGFyc1tpXS50ZXh0dXJlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgYyA9IG5ldyBjb3JlLlNwcml0ZShjaGFyc1tpXS50ZXh0dXJlKTtcbiAgICAgICAgICAgIHRoaXMuX2dseXBocy5wdXNoKGMpO1xuICAgICAgICB9XG5cbiAgICAgICAgYy5wb3NpdGlvbi54ID0gKGNoYXJzW2ldLnBvc2l0aW9uLnggKyBsaW5lQWxpZ25PZmZzZXRzW2NoYXJzW2ldLmxpbmVdKSAqIHNjYWxlO1xuICAgICAgICBjLnBvc2l0aW9uLnkgPSBjaGFyc1tpXS5wb3NpdGlvbi55ICogc2NhbGU7XG4gICAgICAgIGMuc2NhbGUueCA9IGMuc2NhbGUueSA9IHNjYWxlO1xuICAgICAgICBjLnRpbnQgPSB0aW50O1xuXG4gICAgICAgIGlmICghYy5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoYyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZW1vdmUgdW5uZWNlc3NhcnkgY2hpbGRyZW4uXG4gICAgZm9yIChpID0gbGVuQ2hhcnM7IGkgPCB0aGlzLl9nbHlwaHMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKHRoaXMuX2dseXBoc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0V2lkdGggPSBtYXhMaW5lV2lkdGggKiBzY2FsZTtcbiAgICB0aGlzLnRleHRIZWlnaHQgPSAocG9zLnkgKyBkYXRhLmxpbmVIZWlnaHQpICogc2NhbGU7XG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gbWF4TGluZUhlaWdodCAqIHNjYWxlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb2YgdGhpcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGV4dCBiZWZvcmUgY2FsbGluZyBwYXJlbnQncyBnZXRMb2NhbEJvdW5kc1xuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5cbkJpdG1hcFRleHQucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICByZXR1cm4gY29yZS5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzLmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59O1xuXG5CaXRtYXBUZXh0LmZvbnRzID0ge307XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIE1vdmllQ2xpcCBpcyBhIHNpbXBsZSB3YXkgdG8gZGlzcGxheSBhbiBhbmltYXRpb24gZGVwaWN0ZWQgYnkgYSBsaXN0IG9mIHRleHR1cmVzLlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgYWxpZW5JbWFnZXMgPSBbXCJpbWFnZV9zZXF1ZW5jZV8wMS5wbmdcIixcImltYWdlX3NlcXVlbmNlXzAyLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDMucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wNC5wbmdcIl07XG4gKiB2YXIgdGV4dHVyZUFycmF5ID0gW107XG4gKlxuICogZm9yICh2YXIgaT0wOyBpIDwgNDsgaSsrKVxuICoge1xuICogICAgICB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoYWxpZW5JbWFnZXNbaV0pO1xuICogICAgICB0ZXh0dXJlQXJyYXkucHVzaCh0ZXh0dXJlKTtcbiAqIH07XG4gKlxuICogdmFyIG1jID0gbmV3IFBJWEkuTW92aWVDbGlwKHRleHR1cmVBcnJheSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0dXJlcyB7UElYSS5UZXh0dXJlW118T2JqZWN0W119IGFuIGFycmF5IG9mIHtAbGluayBQSVhJLlRleHR1cmV9IG9yIGZyYW1lIG9iamVjdHMgdGhhdCBtYWtlIHVwIHRoZSBhbmltYXRpb25cbiAqIEBwYXJhbSB0ZXh0dXJlc1tdLnRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHtAbGluayBQSVhJLlRleHR1cmV9IG9mIHRoZSBmcmFtZVxuICogQHBhcmFtIHRleHR1cmVzW10udGltZSB7bnVtYmVyfSB0aGUgZHVyYXRpb24gb2YgdGhlIGZyYW1lIGluIG1zXG4gKi9cbmZ1bmN0aW9uIE1vdmllQ2xpcCh0ZXh0dXJlcylcbntcbiAgICBjb3JlLlNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmVzWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlID8gdGV4dHVyZXNbMF0gOiB0ZXh0dXJlc1swXS50ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kdXJhdGlvbnMgPSBudWxsO1xuXG4gICAgdGhpcy50ZXh0dXJlcyA9IHRleHR1cmVzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNwZWVkIHRoYXQgdGhlIE1vdmllQ2xpcCB3aWxsIHBsYXkgYXQuIEhpZ2hlciBpcyBmYXN0ZXIsIGxvd2VyIGlzIHNsb3dlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmFuaW1hdGlvblNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBtb3ZpZSBjbGlwIHJlcGVhdHMgYWZ0ZXIgcGxheWluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMubG9vcCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gYSBNb3ZpZUNsaXAgZmluaXNoZXMgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICovXG4gICAgdGhpcy5vbkNvbXBsZXRlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEVsYXBzZWQgdGltZSBzaW5jZSBhbmltYXRpb24gaGFzIGJlZW4gc3RhcnRlZCwgdXNlZCBpbnRlcm5hbGx5IHRvIGRpc3BsYXkgY3VycmVudCB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIE1vdmllQ2xpcCBpcyBjdXJyZW50bHkgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1vdmllQ2xpcC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5Nb3ZpZUNsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTW92aWVDbGlwO1xubW9kdWxlLmV4cG9ydHMgPSBNb3ZpZUNsaXA7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1vdmllQ2xpcC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiB0b3RhbEZyYW1lcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIGZyYW1lcyBpbiB0aGUgTW92aWVDbGlwLiBUaGlzIGlzIHRoZSBzYW1lIGFzIG51bWJlciBvZiB0ZXh0dXJlc1xuICAgICAqIGFzc2lnbmVkIHRvIHRoZSBNb3ZpZUNsaXAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdG90YWxGcmFtZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIHRleHR1cmVzIHVzZWQgZm9yIHRoaXMgTW92aWVDbGlwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqXG4gICAgICovXG4gICAgdGV4dHVyZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZih2YWx1ZVswXSBpbnN0YW5jZW9mIGNvcmUuVGV4dHVyZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcy5wdXNoKHZhbHVlW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMucHVzaCh2YWx1ZVtpXS50aW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgKiBUaGUgTW92aWVDbGlwcyBjdXJyZW50IGZyYW1lIGluZGV4XG4gICAgKlxuICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAqIEByZWFkb25seVxuICAgICovXG4gICAgY3VycmVudEZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRGcmFtZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpICUgdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRGcmFtZSA8IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY3VycmVudEZyYW1lICs9IHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RnJhbWU7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKipcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYoIXRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogUGxheXMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZih0aGlzLnBsYXlpbmcpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5aW5nID0gdHJ1ZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZ29lcyB0byBhIHNwZWNpZmljIGZyYW1lXG4gKlxuICogQHBhcmFtIGZyYW1lTnVtYmVyIHtudW1iZXJ9IGZyYW1lIGluZGV4IHRvIHN0b3AgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kU3RvcCA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLnN0b3AoKTtcblxuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbdGhpcy5jdXJyZW50RnJhbWVdO1xufTtcblxuLyoqXG4gKiBHb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWUgYW5kIGJlZ2lucyBwbGF5aW5nIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RhcnQgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kUGxheSA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IGZyYW1lTnVtYmVyO1xuXG4gICAgdGhpcy5wbGF5KCk7XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKiBAcHJpdmF0ZVxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWQgPSB0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2R1cmF0aW9ucyAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIHZhciBsYWcgPSB0aGlzLl9jdXJyZW50VGltZSAlIDEgKiB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuXG4gICAgICAgIGxhZyArPSBlbGFwc2VkIC8gNjAgKiAxMDAwO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPCAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZS0tO1xuICAgICAgICAgICAgbGFnICs9IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2lnbiA9IE1hdGguc2lnbih0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lKTtcbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgPSBNYXRoLmZsb29yKHRoaXMuX2N1cnJlbnRUaW1lKTtcblxuICAgICAgICB3aGlsZSAobGFnID49IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhZyAtPSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdICogc2lnbjtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IHNpZ247XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBsYWcgLyB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBlbGFwc2VkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jdXJyZW50VGltZSA8IDAgJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AoMCk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5fY3VycmVudFRpbWUgPj0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoICYmICF0aGlzLmxvb3ApXG4gICAge1xuICAgICAgICB0aGlzLmdvdG9BbmRTdG9wKHRoaXMuX3RleHR1cmVzLmxlbmd0aCAtIDEpO1xuXG4gICAgICAgIGlmICh0aGlzLm9uQ29tcGxldGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuXG59O1xuXG4vKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZGVzdHJveXMgaXRcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICggKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuICAgIGNvcmUuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIEEgc2hvcnQgaGFuZCB3YXkgb2YgY3JlYXRpbmcgYSBtb3ZpZWNsaXAgZnJvbSBhbiBhcnJheSBvZiBmcmFtZSBpZHNcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVzIHtzdHJpbmdbXX0gdGhlIGFycmF5IG9mIGZyYW1lcyBpZHMgdGhlIG1vdmllY2xpcCB3aWxsIHVzZSBhcyBpdHMgdGV4dHVyZSBmcmFtZXNcbiAqL1xuTW92aWVDbGlwLmZyb21GcmFtZXMgPSBmdW5jdGlvbiAoZnJhbWVzKVxue1xuICAgIHZhciB0ZXh0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0ZXh0dXJlcy5wdXNoKG5ldyBjb3JlLlRleHR1cmUuZnJvbUZyYW1lKGZyYW1lc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW92aWVDbGlwKHRleHR1cmVzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGltYWdlIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgaW1hZ2UgdXJscyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUltYWdlcyA9IGZ1bmN0aW9uIChpbWFnZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTsiLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICAvLyBhIHNwcml0ZSB1c2UgZGZvciByZW5kZXJpbmcgdGV4dHVyZXMuLlxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlcicpO1xuXG4vKipcbiAqIEEgdGlsaW5nIHNwcml0ZSBpcyBhIGZhc3Qgd2F5IG9mIHJlbmRlcmluZyBhIHRpbGluZyBpbWFnZVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmUge1RleHR1cmV9IHRoZSB0ZXh0dXJlIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFRpbGluZ1Nwcml0ZSh0ZXh0dXJlLCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGluZyBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVTY2FsZSA9IG5ldyBjb3JlLlBvaW50KDEsMSk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgcG9zaXRpb24gb2YgdGhlIGltYWdlIHRoYXQgaXMgYmVpbmcgdGlsZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBuZXcgY29yZS5Qb2ludCgwLDApO1xuXG4gICAgLy8vLy8gcHJpdmF0ZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHdpdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gd2lkdGggfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0IHx8IDEwMDtcblxuICAgIC8qKlxuICAgICAqIEFuIGludGVybmFsIFdlYkdMIFVWIGNhY2hlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlVXZzfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdXZzID0gbmV3IGNvcmUuVGV4dHVyZVV2cygpO1xuXG4gICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IG51bGw7XG5cbiAgICAvL1RPRE8gbW92ZS4uXG4gICAgdGhpcy5zaGFkZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcihcblxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1VHJhbnNmb3JtOycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJyAgIGNvb3JkIC09IHVUcmFuc2Zvcm0ueHk7JyxcbiAgICAgICAgJyAgIGNvb3JkIC89IHVUcmFuc2Zvcm0uenc7JyxcbiAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBjb29yZDsnLFxuXG4gICAgICAgICcgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpOycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgIFtcbiAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdUZyYW1lOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzIgdVBpeGVsU2l6ZTsnLFxuXG4gICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IG1vZCh2VGV4dHVyZUNvb3JkLCB1RnJhbWUuencpOycsXG4gICAgICAgICcgICBjb29yZCA9IGNsYW1wKGNvb3JkLCB1UGl4ZWxTaXplLCB1RnJhbWUuencgLSB1UGl4ZWxTaXplKTsnLFxuICAgICAgICAnICAgY29vcmQgKz0gdUZyYW1lLnh5OycsXG5cbiAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9ICB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdUZyYW1lOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVRyYW5zZm9ybTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLDAsMSwxXSB9LFxuICAgICAgICAgICAgICAgIHVQaXhlbFNpemUgOiB7IHR5cGUgOiAnMmZ2JywgdmFsdWU6IFsxLCAxXX1cbiAgICAgICAgICAgIH1cbiAgICAgICk7XG59XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsaW5nU3ByaXRlO1xubW9kdWxlLmV4cG9ydHMgPSBUaWxpbmdTcHJpdGU7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsaW5nU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRpbGluZ1Nwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybjtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICAvLyB0d2VhayBvdXIgdGV4dHVyZSB0ZW1wb3JhcmlseS4uXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUgfHwgIXRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGVtcFV2cyA9IHRleHR1cmUuX3V2cyxcbiAgICAgICAgdGVtcFdpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIHRlbXBIZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQsXG4gICAgICAgIHR3ID0gdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCxcbiAgICAgICAgdGggPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRoaXMuX3V2cztcbiAgICB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51UGl4ZWxTaXplLnZhbHVlWzBdID0gMS4wL3R3O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMV0gPSAxLjAvdGg7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMF0gPSB0ZW1wVXZzLngwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVsxXSA9IHRlbXBVdnMueTA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzJdID0gdGVtcFV2cy54MSAtIHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzNdID0gdGVtcFV2cy55MiAtIHRlbXBVdnMueTA7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzBdID0gKHRoaXMudGlsZVBvc2l0aW9uLnggJSAodGVtcFdpZHRoICogdGhpcy50aWxlU2NhbGUueCkpIC8gdGhpcy5fd2lkdGg7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsxXSA9ICh0aGlzLnRpbGVQb3NpdGlvbi55ICUgKHRlbXBIZWlnaHQgKiB0aGlzLnRpbGVTY2FsZS55KSkgLyB0aGlzLl9oZWlnaHQ7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsyXSA9ICggdHcgLyB0aGlzLl93aWR0aCApICogdGhpcy50aWxlU2NhbGUueDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzNdID0gKCB0aCAvIHRoaXMuX2hlaWdodCApICogdGhpcy50aWxlU2NhbGUueTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIodGhpcyk7XG5cbiAgICB0ZXh0dXJlLl91dnMgPSB0ZW1wVXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGVtcFdpZHRoO1xuICAgIHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRlbXBIZWlnaHQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBhIHJlZmVyZW5jZSB0byB0aGUgY2FudmFzIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0LFxuICAgICAgICB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgYmFzZVRleHR1cmUgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBtb2RYID0gKHRoaXMudGlsZVBvc2l0aW9uLnggLyB0aGlzLnRpbGVTY2FsZS54KSAlIHRleHR1cmUuX2ZyYW1lLndpZHRoLFxuICAgICAgICBtb2RZID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgLyB0aGlzLnRpbGVTY2FsZS55KSAlIHRleHR1cmUuX2ZyYW1lLmhlaWdodDtcblxuICAgIC8vIGNyZWF0ZSBhIG5pY2Ugc2hpbnkgcGF0dGVybiFcbiAgICAvLyBUT0RPIHRoaXMgbmVlZHMgdG8gYmUgcmVmcmVzaGVkIGlmIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgaWYoIXRoaXMuX2NhbnZhc1BhdHRlcm4pXG4gICAge1xuICAgICAgICAvLyBjdXQgYW4gb2JqZWN0IGZyb20gYSBzcHJpdGVzaGVldC4uXG4gICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IGNvcmUuQ2FudmFzQnVmZmVyKHRleHR1cmUuX2ZyYW1lLndpZHRoLCB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQpO1xuXG4gICAgICAgIC8vIFRpbnQgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgICAgaWYgKHRoaXMudGludCAhPT0gMHhGRkZGRkYpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlZFRpbnQgIT09IHRoaXMudGludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUgPSBDYW52YXNUaW50ZXIuZ2V0VGludGVkVGV4dHVyZSh0aGlzLCB0aGlzLnRpbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZSh0aGlzLnRpbnRlZFRleHR1cmUsIDAsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZShiYXNlVGV4dHVyZS5zb3VyY2UsIC10ZXh0dXJlLl9mcmFtZS54LCAtdGV4dHVyZS5fZnJhbWUueSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IHRlbXBDYW52YXMuY29udGV4dC5jcmVhdGVQYXR0ZXJuKCB0ZW1wQ2FudmFzLmNhbnZhcywgJ3JlcGVhdCcgKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgY29udGV4dCBzdGF0ZS4uXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb24pO1xuXG4gICAgLy8gVE9ETyAtIHRoaXMgc2hvdWxkIGJlIHJvbGxlZCBpbnRvIHRoZSBzZXRUcmFuc2Zvcm0gYWJvdmUuLlxuICAgIGNvbnRleHQuc2NhbGUodGhpcy50aWxlU2NhbGUueCx0aGlzLnRpbGVTY2FsZS55KTtcblxuICAgIGNvbnRleHQudHJhbnNsYXRlKG1vZFggKyAodGhpcy5hbmNob3IueCAqIC10aGlzLl93aWR0aCApLFxuICAgICAgICAgICAgICAgICAgICAgIG1vZFkgKyAodGhpcy5hbmNob3IueSAqIC10aGlzLl9oZWlnaHQpKTtcblxuICAgIC8vIGNoZWNrIGJsZW5kIG1vZGVcbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyBmaWxsIHRoZSBwYXR0ZXJuIVxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fY2FudmFzUGF0dGVybjtcbiAgICBjb250ZXh0LmZpbGxSZWN0KC1tb2RYLFxuICAgICAgICAgICAgICAgICAgICAgLW1vZFksXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl93aWR0aCAvIHRoaXMudGlsZVNjYWxlLngsXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWlnaHQgLyB0aGlzLnRpbGVTY2FsZS55KTtcblxuXG4gICAgLy9UT0RPIC0gcHJldHR5IHN1cmUgdGhpcyBjYW4gYmUgZGVsZXRlZC4uLlxuICAgIC8vY29udGV4dC50cmFuc2xhdGUoLXRoaXMudGlsZVBvc2l0aW9uLnggKyAodGhpcy5hbmNob3IueCAqIHRoaXMuX3dpZHRoKSwgLXRoaXMudGlsZVBvc2l0aW9uLnkgKyAodGhpcy5hbmNob3IueSAqIHRoaXMuX2hlaWdodCkpO1xuICAgIC8vY29udGV4dC5zY2FsZSgxIC8gdGhpcy50aWxlU2NhbGUueCwgMSAvIHRoaXMudGlsZVNjYWxlLnkpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBzcHJpdGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xuXG4gICAgdmFyIHcwID0gd2lkdGggKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICB2YXIgdzEgPSB3aWR0aCAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgdmFyIGgwID0gaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgdmFyIGgxID0gaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG5cbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgdmFyIHgxID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTIgPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHg0ID0gIGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciBtaW5YLFxuICAgICAgICBtYXhYLFxuICAgICAgICBtaW5ZLFxuICAgICAgICBtYXhZO1xuXG4gICAgbWluWCA9IHgxO1xuICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgbWluWSA9IHkxO1xuICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgbWF4WCA9IHgxO1xuICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgbWF4WSA9IHkxO1xuICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG5cbiAgICByZXR1cm4gYm91bmRzO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byBjaGVja1xuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKlxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsZVNjYWxlID0gbnVsbDtcbiAgICB0aGlzLl90aWxlU2NhbGVPZmZzZXQgPSBudWxsO1xuICAgIHRoaXMudGlsZVBvc2l0aW9uID0gbnVsbDtcblxuICAgIHRoaXMuX3V2cyA9IG51bGw7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSB0aWxpbmcgc3ByaXRlIHRoYXQgd2lsbCB1c2UgYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICovXG5UaWxpbmdTcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQsd2lkdGgsaGVpZ2h0KVxue1xuICAgIHZhciB0ZXh0dXJlID0gY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgJyArIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKHRleHR1cmUsd2lkdGgsaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBBIG5ldyBUaWxpbmdTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgd2lkdGgsIGhlaWdodCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRpbGluZ1Nwcml0ZShjb3JlLlRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpLHdpZHRoLGhlaWdodCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgRGlzcGxheU9iamVjdCA9IGNvcmUuRGlzcGxheU9iamVjdCxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gbnVsbDtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbEhpdFRlc3QgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsRGVzdHJveSA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVkU3ByaXRlID0gbnVsbDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGlzcGxheU9iamVjdC5wcm90b3R5cGUsIHtcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgeW91IHdhbnQgdGhpcyBkaXNwbGF5IG9iamVjdCB0byBiZSBjYWNoZWQgYXMgYSBiaXRtYXAuXG4gICAgICogVGhpcyBiYXNpY2FsbHkgdGFrZXMgYSBzbmFwIHNob3Qgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IGFzIGl0IGlzIGF0IHRoYXQgbW9tZW50LiBJdCBjYW4gcHJvdmlkZSBhIHBlcmZvcm1hbmNlIGJlbmVmaXQgZm9yIGNvbXBsZXggc3RhdGljIGRpc3BsYXlPYmplY3RzLlxuICAgICAqIFRvIHJlbW92ZSBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ2ZhbHNlJ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGNhY2hlQXNCaXRtYXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVBc0JpdG1hcDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NhY2hlQXNCaXRtYXAgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSB0aGlzLnJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gdGhpcy5yZW5kZXJDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMudXBkYXRlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzID0gdGhpcy5nZXRCb3VuZHM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbERlc3Ryb3kgPSB0aGlzLmRlc3Ryb3k7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQgPSB0aGlzLmNvbnRhaW5zUG9pbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSB0aGlzLl9jYWNoZUFzQml0bWFwRGVzdHJveTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXN0cm95Q2FjaGVkRGlzcGxheU9iamVjdCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXM7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRCb3VuZHMgPSB0aGlzLl9vcmlnaW5hbEdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX29yaWdpbmFsRGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fb3JpZ2luYWxDb250YWluc1BvaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBXZWJHTFxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gdGhlIFdlYkdMIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZFdlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENhY2hlZERpc3BsYXlPYmplY3QoIHJlbmRlcmVyICk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIoIHRoaXMuX2NhY2hlZFNwcml0ZSApO1xufTtcblxuLyoqXG4qIFByZXBhcmVzIHRoZSBXZWJHTCByZW5kZXJlciB0byBjYWNoZSB0aGUgc3ByaXRlXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGZpcnN0IHdlIGZsdXNoIGFueXRoaW5nIGxlZnQgaW4gdGhlIHJlbmRlcmVyIChvdGhlcndpc2UgaXQgd291bGQgZ2V0IHJlbmRlcmVkIHRvIHRoZSBjYWNoZWQgdGV4dHVyZSlcbiAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbiAgICAvL3RoaXMuZmlsdGVycz0gW107XG4gICAgLy8gbmV4dCB3ZSBmaW5kIHRoZSBkaW1lbnNpb25zIG9mIHRoZSB1bnRyYW5zZm9ybWVkIG9iamVjdFxuICAgIC8vIHRoaXMgZnVuY3Rpb24gYWxzbyBjYWxscyB1cGRhdGV0cmFuc2Zvcm0gb24gYWxsIGl0cyBjaGlsZHJlbiBhcyBwYXJ0IG9mIHRoZSBtZWFzdXJpbmcuIFRoaXMgbWVhbnMgd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIHRyYW5zZm9ybSBhZ2FpbiBpbiB0aGlzIGZ1bmN0aW9uXG4gICAgLy8gVE9ETyBwYXNzIGFuIG9iamVjdCB0byBjbG9uZSB0b28/IHNhdmVzIGhhdmluZyB0byBjcmVhdGUgYSBuZXcgb25lIGVhY2ggdGltZSFcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmNsb25lKCk7XG5cbiAgICAvLyBhZGQgc29tZSBwYWRkaW5nIVxuICAgIGlmKHRoaXMuX2ZpbHRlcnMpXG4gICAge1xuICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuX2ZpbHRlcnNbMF0ucGFkZGluZztcbiAgICAgICAgYm91bmRzLnggLT0gcGFkZGluZztcbiAgICAgICAgYm91bmRzLnkgLT0gcGFkZGluZztcblxuICAgICAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG4gICAgfVxuXG4gICAgLy8gZm9yIG5vdyB3ZSBjYWNoZSB0aGUgY3VycmVudCByZW5kZXJUYXJnZXQgdGhhdCB0aGUgd2ViR0wgcmVuZGVyZXIgaXMgY3VycmVudGx5IHVzaW5nLlxuICAgIC8vIHRoaXMgY291bGQgYmUgbW9yZSBlbGVnZW50Li5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldDtcbiAgICAvLyBXZSBhbHNvIHN0b3JlIHRoZSBmaWx0ZXIgc3RhY2sgLSBJIHdpbGwgZGVmaW5pdGVseSBsb29rIHRvIGNoYW5nZSBob3cgdGhpcyB3b3JrcyBhIGxpdHRsZSBsYXRlciBkb3duIHRoZSBsaW5lLlxuICAgIHZhciBzdGFjayA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2s7XG5cbiAgICAvLyB0aGlzIHJlbmRlclRleHR1cmUgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBjYWNoZWQgRGlzcGxheU9iamVjdFxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG5cblxuICAgIC8vIHNldCBhbGwgcHJvcGVydGllcyB0byB0aGVyZSBvcmlnaW5hbCBzbyB3ZSBjYW4gcmVuZGVyIHRvIGEgdGV4dHVyZVxuICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoY2FjaGVkUmVuZGVyVGFyZ2V0KTtcbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmZpbHRlclN0YWNrID0gc3RhY2s7XG5cbiAgICB0aGlzLnJlbmRlcldlYkdMICAgICA9IHRoaXMuX3JlbmRlckNhY2hlZFdlYkdMO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICAgICAgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgdHJhbnNmb3JtIG9mIHRoZSBjYWNoZWQgc3ByaXRlIHRvIGF2b2lkIHRoZSBuYXN0eSBmbGlja2VyLi5cbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgLy8gbWFwIHRoZSBoaXQgdGVzdC4uXG4gICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fY2FjaGVkU3ByaXRlLmNvbnRhaW5zUG9pbnQuYmluZCh0aGlzLl9jYWNoZWRTcHJpdGUpO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgc3ByaXRlIHdpdGggY2FudmFzXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gdGhlIENhbnZhcyByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9yZW5kZXJDYWNoZWRDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdENhbnZhcyggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLnJlbmRlckNhbnZhcyhyZW5kZXJlcik7XG59O1xuXG4vL1RPRE8gdGhpcyBjYW4gYmUgdGhlIHNhbWUgYXMgdGhlIHdlYkdMIHZlcmlzb24uLiB3aWxsIG5lZWQgdG8gZG8gYSBsaXR0bGUgdHdlYWtpbmcgZmlyc3QgdGhvdWdoLi5cbi8qKlxuKiBQcmVwYXJlcyB0aGUgQ2FudmFzIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvL2dldCBib3VuZHMgYWN0dWFsbHkgdHJhbnNmb3JtcyB0aGUgb2JqZWN0IGZvciB1cyBhbHJlYWR5IVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIG0sIHRydWUpO1xuXG4gICAgLy8gbm93IHJlc3RvcmUgdGhlIHN0YXRlIGJlIHNldHRpbmcgdGhlIG5ldyBwcm9wZXJ0aWVzXG4gICAgcmVuZGVyZXIuY29udGV4dCA9IGNhY2hlZFJlbmRlclRhcmdldDtcblxuICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fcmVuZGVyQ2FjaGVkQ2FudmFzO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICA9IHRoaXMuX2dldENhY2hlZEJvdW5kcztcblxuXG4gICAgLy8gY3JlYXRlIG91ciBjYWNoZWQgc3ByaXRlXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IGNvcmUuU3ByaXRlKHJlbmRlclRleHR1cmUpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogQ2FsY3VsYXRlcyB0aGUgYm91bmRzIG9mIHRoZSBjYWNoZWQgc3ByaXRlXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2dldENhY2hlZEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLl9jYWNoZWRTcHJpdGUuZ2V0Qm91bmRzKCk7XG59O1xuXG4vKipcbiogRGVzdHJveXMgdGhlIGNhY2hlZCBzcHJpdGUuXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX3RleHR1cmUuZGVzdHJveSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59O1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcERlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSgpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSBpbnN0YW5jZSBuYW1lIG9mIHRoZSBvYmplY3QuXG4gKlxuICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAqIEBtZW1iZXIge3N0cmluZ31cbiAqL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5uYW1lID0gbnVsbDtcblxuLyoqXG4qIFJldHVybnMgdGhlIGRpc3BsYXkgb2JqZWN0IGluIHRoZSBjb250YWluZXJcbipcbiogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuKiBAcGFyYW0gbmFtZSB7c3RyaW5nfSBpbnN0YW5jZSBuYW1lXG4qIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiovXG5jb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWUgPSBmdW5jdGlvbiAobmFtZSlcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbltpXS5uYW1lID09PSBuYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdFxuKlxuKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuKiBAcGFyYW0gcG9pbnQge1BvaW50fSB0aGUgcG9pbnQgdG8gd3JpdGUgdGhlIGdsb2JhbCB2YWx1ZSB0by4gSWYgbnVsbCBhIG5ldyBwb2ludCB3aWxsIGJlIHJldHVybmVkXG4qIEByZXR1cm4ge1BvaW50fVxuKi9cbmNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0R2xvYmFsUG9zaXRpb24gPSBmdW5jdGlvbiAocG9pbnQpXG57XG4gICAgcG9pbnQgPSBwb2ludCB8fCBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgaWYodGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICBwb2ludC54ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMud29ybGRUcmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHBvaW50LnggPSB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIHBvaW50LnkgPSB0aGlzLnBvc2l0aW9uLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxucmVxdWlyZSgnLi9jYWNoZUFzQml0bWFwJyk7XG5yZXF1aXJlKCcuL2dldENoaWxkQnlOYW1lJyk7XG5yZXF1aXJlKCcuL2dldEdsb2JhbFBvc2l0aW9uJyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmV4dHJhc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNb3ZpZUNsaXA6ICAgICAgcmVxdWlyZSgnLi9Nb3ZpZUNsaXAnKSxcbiAgICBUaWxpbmdTcHJpdGU6ICAgcmVxdWlyZSgnLi9UaWxpbmdTcHJpdGUnKSxcbiAgICBCaXRtYXBUZXh0OiAgICAgcmVxdWlyZSgnLi9CaXRtYXBUZXh0Jylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGUgWSBpcyBmbGlwcGVkIGluIHRoaXMgc2hhZGVyIGZvciBzb21lIHJlYXNvbi5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgc2hhZGVyIDogaHR0cHM6Ly93d3cuc2hhZGVydG95LmNvbS92aWV3L2xzc0dEaiBieSBAbW92QVgxM2hcbiAqL1xuXG4vKipcbiAqIEFuIEFTQ0lJIGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQXNjaWlGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gZmxvYXQgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IGNoYXJhY3RlcihmbG9hdCBuLCB2ZWMyIHApXFxue1xcbiAgICBwID0gZmxvb3IocCp2ZWMyKDQuMCwgLTQuMCkgKyAyLjUpO1xcbiAgICBpZiAoY2xhbXAocC54LCAwLjAsIDQuMCkgPT0gcC54ICYmIGNsYW1wKHAueSwgMC4wLCA0LjApID09IHAueSlcXG4gICAge1xcbiAgICAgICAgaWYgKGludChtb2Qobi9leHAyKHAueCArIDUuMCpwLnkpLCAyLjApKSA9PSAxKSByZXR1cm4gMS4wO1xcbiAgICB9XFxuICAgIHJldHVybiAwLjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5O1xcblxcbiAgICB2ZWMzIGNvbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgZmxvb3IoIHV2IC8gcGl4ZWxTaXplICkgKiBwaXhlbFNpemUgLyBkaW1lbnNpb25zLnh5KS5yZ2I7XFxuXFxuICAgIGZsb2F0IGdyYXkgPSAoY29sLnIgKyBjb2wuZyArIGNvbC5iKSAvIDMuMDtcXG5cXG4gICAgZmxvYXQgbiA9ICA2NTUzNi4wOyAgICAgICAgICAgICAvLyAuXFxuICAgIGlmIChncmF5ID4gMC4yKSBuID0gNjU2MDAuMDsgICAgLy8gOlxcbiAgICBpZiAoZ3JheSA+IDAuMykgbiA9IDMzMjc3Mi4wOyAgIC8vICpcXG4gICAgaWYgKGdyYXkgPiAwLjQpIG4gPSAxNTI1NTA4Ni4wOyAvLyBvXFxuICAgIGlmIChncmF5ID4gMC41KSBuID0gMjMzODUxNjQuMDsgLy8gJlxcbiAgICBpZiAoZ3JheSA+IDAuNikgbiA9IDE1MjUyMDE0LjA7IC8vIDhcXG4gICAgaWYgKGdyYXkgPiAwLjcpIG4gPSAxMzE5OTQ1Mi4wOyAvLyBAXFxuICAgIGlmIChncmF5ID4gMC44KSBuID0gMTE1MTI4MTAuMDsgLy8gI1xcblxcbiAgICB2ZWMyIHAgPSBtb2QoIHV2IC8gKCBwaXhlbFNpemUgKiAwLjUgKSwgMi4wKSAtIHZlYzIoMS4wKTtcXG4gICAgY29sID0gY29sICogY2hhcmFjdGVyKG4sIHApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbCwgMS4wKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiA4IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkFzY2lpRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQXNjaWlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXNjaWlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFzY2lpRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBc2NpaUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGl4ZWwgc2l6ZSB1c2VkIGJ5IHRoZSBmaWx0ZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Bc2NpaUZpbHRlciNcbiAgICAgKi9cbiAgICBzaXplOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsb29tRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsb29tRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlciA9IG5ldyBCbHVyWUZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcbn1cblxuQmxvb21GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbG9vbUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbG9vbUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxvb21GaWx0ZXI7XG5cbkJsb29tRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAvL1RPRE8gLSBjb3B5VGV4U3ViSW1hZ2UyRCBjb3VsZCBiZSB1c2VkIGhlcmU/XG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5TQ1JFRU4pO1xuXG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsb29tRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cblxuLyoqXG4gKiBUaGUgQmx1ckRpckZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0b3dhcmQgYSBkaXJlY3Rpb24gdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpclhcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJZXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJEaXJGaWx0ZXIoZGlyWCwgZGlyWSlcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gZmxvYXQgZGlyWDtcXG51bmlmb3JtIGZsb2F0IGRpclk7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbM107XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWSApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApICogMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pICogMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pICogMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSAqIDAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgZGlyWDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogZGlyWCB8fCAwIH0sXG4gICAgICAgICAgICBkaXJZOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJZIHx8IDAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWCBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJYID0gZGlyWCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWSBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJZID0gZGlyWSB8fCAwO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJEaXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJEaXJGaWx0ZXI7XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcikge1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZiAodGhpcy5wYXNzZXMgPT09IDEpIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCByZW5kZXJUYXJnZXQsIGNsZWFyKTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMjsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL3RoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvICh0aGlzLnBhc3NlcysoaSoyKSkgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCByZW5kZXJUYXJnZXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IHZhbHVlICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBkaXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyWDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZGlyWC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJZO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJZLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWUZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBCbHVyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG59XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJGaWx0ZXI7XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHBhc3Nlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5ibHVyWEZpbHRlci5wYXNzZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcyA9IHRoaXMuYmx1cllGaWx0ZXIucGFzc2VzID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1clhGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJYRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAxMiAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwNCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuXFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1clhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1clhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJYRmlsdGVyO1xuXG5CbHVyWEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1clhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJYRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gIE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJZRmlsdGVyIGFwcGxpZXMgYSBob3Jpem9udGFsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAxMiAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDEyICogc3RyZW5ndGgpO1xcblxcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJZRmlsdGVyO1xuXG5CbHVyWUZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gTWF0aC5hYnModGhpcy5zdHJlbmd0aCkgLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIFNtYXJ0IEJsdXIgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTbWFydEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgKiBwZXJjZW50KTtcXG4gICAgICAgIHNhbXBsZS5yZ2IgKj0gc2FtcGxlLmE7XFxuICAgICAgICBjb2xvciArPSBzYW1wbGUgKiB3ZWlnaHQ7XFxuICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgLyB0b3RhbDtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAvPSBnbF9GcmFnQ29sb3IuYSArIDAuMDAwMDE7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgZGVsdGE6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC4xLCB5OiAwLjAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU21hcnRCbHVyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTbWFydEJsdXJGaWx0ZXI7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA1eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIGBgYGpzXG4gKiAgdmFyIGNvbG9yTWF0cml4ID0gbmV3IFBJWEkuQ29sb3JNYXRyaXhGaWx0ZXIoKTtcbiAqICBjb250YWluZXIuZmlsdGVycyA9IFtjb2xvck1hdHJpeF07XG4gKiAgY29sb3JNYXRyaXguY29udHJhc3QoMik7XG4gKiBgYGBcbiAqIEBhdXRob3IgQ2zDqW1lbnQgQ2hlbmViYXVsdCA8Y2xlbWVudEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ29sb3JNYXRyaXhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgbVsyNV07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcblxcbiAgICB2ZWM0IGMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IuciA9IChtWzBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzJdICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IG1bNF07XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5nID0gKG1bNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bN10gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gbVs5XTtcXG5cXG4gICAgIGdsX0ZyYWdDb2xvci5iID0gKG1bMTBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzExXSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IG1bMTRdO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmEgPSAobVsxNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTZdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gbVsxOV07XFxuXFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICcxZnYnLCB2YWx1ZTogW1xuICAgICAgICAgICAgICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvck1hdHJpeEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JNYXRyaXhGaWx0ZXI7XG5cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGN1cnJlbnQgbWF0cml4IGFuZCBzZXQgdGhlIG5ldyBvbmVcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IGlmIHRydWUsIGN1cnJlbnQgbWF0cml4IGFuZCBtYXRyaXggYXJlIG11bHRpcGxpZWQuIElmIGZhbHNlLCBqdXN0IHNldCB0aGUgY3VycmVudCBtYXRyaXggd2l0aCBAcGFyYW0gbWF0cml4XG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fbG9hZE1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgsIG11bHRpcGx5KVxue1xuICAgIG11bHRpcGx5ID0gISFtdWx0aXBseTtcblxuICAgIHZhciBuZXdNYXRyaXggPSBtYXRyaXg7XG5cbiAgICBpZiAobXVsdGlwbHkpIHtcbiAgICAgICAgdGhpcy5fbXVsdGlwbHkobmV3TWF0cml4LCB0aGlzLnVuaWZvcm1zLm0udmFsdWUsIG1hdHJpeCk7XG4gICAgICAgIG5ld01hdHJpeCA9IHRoaXMuX2NvbG9yTWF0cml4KG5ld01hdHJpeCk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgbWF0cml4XG4gICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gbmV3TWF0cml4O1xufTtcblxuLyoqXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQ1J3NcbiAqXG4gKiBAcGFyYW0gb3V0IHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0gYSB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIGIge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyBvdXQge251bWJlcltdfSAobWF0IDV4NClcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpXG57XG5cbiAgICAvLyBSZWQgQ2hhbm5lbFxuICAgIG91dFswXSA9IChhWzBdICogYlswXSkgKyAoYVsxXSAqIGJbNV0pICsgKGFbMl0gKiBiWzEwXSkgKyAoYVszXSAqIGJbMTVdKTtcbiAgICBvdXRbMV0gPSAoYVswXSAqIGJbMV0pICsgKGFbMV0gKiBiWzZdKSArIChhWzJdICogYlsxMV0pICsgKGFbM10gKiBiWzE2XSk7XG4gICAgb3V0WzJdID0gKGFbMF0gKiBiWzJdKSArIChhWzFdICogYls3XSkgKyAoYVsyXSAqIGJbMTJdKSArIChhWzNdICogYlsxN10pO1xuICAgIG91dFszXSA9IChhWzBdICogYlszXSkgKyAoYVsxXSAqIGJbOF0pICsgKGFbMl0gKiBiWzEzXSkgKyAoYVszXSAqIGJbMThdKTtcbiAgICBvdXRbNF0gPSAoYVswXSAqIGJbNF0pICsgKGFbMV0gKiBiWzldKSArIChhWzJdICogYlsxNF0pICsgKGFbM10gKiBiWzE5XSk7XG5cbiAgICAvLyBHcmVlbiBDaGFubmVsXG4gICAgb3V0WzVdID0gKGFbNV0gKiBiWzBdKSArIChhWzZdICogYls1XSkgKyAoYVs3XSAqIGJbMTBdKSArIChhWzhdICogYlsxNV0pO1xuICAgIG91dFs2XSA9IChhWzVdICogYlsxXSkgKyAoYVs2XSAqIGJbNl0pICsgKGFbN10gKiBiWzExXSkgKyAoYVs4XSAqIGJbMTZdKTtcbiAgICBvdXRbN10gPSAoYVs1XSAqIGJbMl0pICsgKGFbNl0gKiBiWzddKSArIChhWzddICogYlsxMl0pICsgKGFbOF0gKiBiWzE3XSk7XG4gICAgb3V0WzhdID0gKGFbNV0gKiBiWzNdKSArIChhWzZdICogYls4XSkgKyAoYVs3XSAqIGJbMTNdKSArIChhWzhdICogYlsxOF0pO1xuICAgIG91dFs5XSA9IChhWzVdICogYls0XSkgKyAoYVs2XSAqIGJbOV0pICsgKGFbN10gKiBiWzE0XSkgKyAoYVs4XSAqIGJbMTldKTtcblxuICAgIC8vIEJsdWUgQ2hhbm5lbFxuICAgIG91dFsxMF0gPSAoYVsxMF0gKiBiWzBdKSArIChhWzExXSAqIGJbNV0pICsgKGFbMTJdICogYlsxMF0pICsgKGFbMTNdICogYlsxNV0pO1xuICAgIG91dFsxMV0gPSAoYVsxMF0gKiBiWzFdKSArIChhWzExXSAqIGJbNl0pICsgKGFbMTJdICogYlsxMV0pICsgKGFbMTNdICogYlsxNl0pO1xuICAgIG91dFsxMl0gPSAoYVsxMF0gKiBiWzJdKSArIChhWzExXSAqIGJbN10pICsgKGFbMTJdICogYlsxMl0pICsgKGFbMTNdICogYlsxN10pO1xuICAgIG91dFsxM10gPSAoYVsxMF0gKiBiWzNdKSArIChhWzExXSAqIGJbOF0pICsgKGFbMTJdICogYlsxM10pICsgKGFbMTNdICogYlsxOF0pO1xuICAgIG91dFsxNF0gPSAoYVsxMF0gKiBiWzRdKSArIChhWzExXSAqIGJbOV0pICsgKGFbMTJdICogYlsxNF0pICsgKGFbMTNdICogYlsxOV0pO1xuXG4gICAgLy8gQWxwaGEgQ2hhbm5lbFxuICAgIG91dFsxNV0gPSAoYVsxNV0gKiBiWzBdKSArIChhWzE2XSAqIGJbNV0pICsgKGFbMTddICogYlsxMF0pICsgKGFbMThdICogYlsxNV0pO1xuICAgIG91dFsxNl0gPSAoYVsxNV0gKiBiWzFdKSArIChhWzE2XSAqIGJbNl0pICsgKGFbMTddICogYlsxMV0pICsgKGFbMThdICogYlsxNl0pO1xuICAgIG91dFsxN10gPSAoYVsxNV0gKiBiWzJdKSArIChhWzE2XSAqIGJbN10pICsgKGFbMTddICogYlsxMl0pICsgKGFbMThdICogYlsxN10pO1xuICAgIG91dFsxOF0gPSAoYVsxNV0gKiBiWzNdKSArIChhWzE2XSAqIGJbOF0pICsgKGFbMTddICogYlsxM10pICsgKGFbMThdICogYlsxOF0pO1xuICAgIG91dFsxOV0gPSAoYVsxNV0gKiBiWzRdKSArIChhWzE2XSAqIGJbOV0pICsgKGFbMTddICogYlsxNF0pICsgKGFbMThdICogYlsxOV0pO1xuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEByZXR1cm4gbSB7bnVtYmVyW119IChtYXQgNXg0KSB3aXRoIGFsbCB2YWx1ZXMgYmV0d2VlbiAwLTFcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9jb2xvck1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgLy8gQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICAgIHZhciBtID0gbmV3IEZsb2F0MzJBcnJheShtYXRyaXgpO1xuICAgIG1bNF0gLz0gMjU1O1xuICAgIG1bOV0gLz0gMjU1O1xuICAgIG1bMTRdIC89IDI1NTtcbiAgICBtWzE5XSAvPSAyNTU7XG5cbiAgICByZXR1cm4gbTtcbn07XG5cbi8qKlxuICogQWRqdXN0cyBicmlnaHRuZXNzXG4gKlxuICogQHBhcmFtIGIge251bWJlcn0gdmFsdWUgb2YgdGhlIGJyaWd0aG5lc3MgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJpZ2h0bmVzcyA9IGZ1bmN0aW9uIChiLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBiLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCBiLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCBiLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgbWF0cmljZXMgaW4gZ3JleSBzY2FsZXNcbiAqXG4gKiBAcGFyYW0gc2NhbGUge251bWJlcn0gdmFsdWUgb2YgdGhlIGdyZXkgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlID0gZnVuY3Rpb24gKHNjYWxlLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuLy9BbWVyaWNhbml6ZWQgYWxpYXNcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmF5c2NhbGUgPSBDb2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlO1xuXG4vKipcbiAqIFNldCB0aGUgYmxhY2sgYW5kIHdoaXRlIG1hdHJpY2VcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ibGFja0FuZFdoaXRlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBodWUgcHJvcGVydHkgb2YgdGhlIGNvbG9yXG4gKlxuICogQHBhcmFtIHJvdGF0aW9uIHtudW1iZXJ9IGluIGRlZ3JlZXNcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5odWUgPSBmdW5jdGlvbiAocm90YXRpb24sIG11bHRpcGx5KVxue1xuICAgIHJvdGF0aW9uID0gKHJvdGF0aW9uIHx8IDApIC8gMTgwICogTWF0aC5QSTtcbiAgICB2YXIgY29zID0gTWF0aC5jb3Mocm90YXRpb24pLFxuICAgICAgICBzaW4gPSBNYXRoLnNpbihyb3RhdGlvbik7XG5cbiAgICAvLyBsdW1pbmFuY2VSZWQsIGx1bWluYW5jZUdyZWVuLCBsdW1pbmFuY2VCbHVlXG4gICAgdmFyIGx1bVIgPSAwLjIxMywgLy8gb3IgMC4zMDg2XG4gICAgICAgIGx1bUcgPSAwLjcxNSwgLy8gb3IgMC42MDk0XG4gICAgICAgIGx1bUIgPSAwLjA3MjsgLy8gb3IgMC4wODIwXG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBsdW1SICsgY29zICogKDEgLSBsdW1SKSArIHNpbiAqICgtbHVtUiksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKC1sdW1HKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoMSAtIGx1bUIpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgwLjE0MyksIGx1bUcgKyBjb3MgKiAoMSAtIGx1bUcpICsgc2luICogKDAuMTQwKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoLTAuMjgzKSwgMCwgMCxcbiAgICAgICAgbHVtUiArIGNvcyAqICgtbHVtUikgKyBzaW4gKiAoLSgxIC0gbHVtUikpLCBsdW1HICsgY29zICogKC1sdW1HKSArIHNpbiAqIChsdW1HKSwgbHVtQiArIGNvcyAqICgxIC0gbHVtQikgKyBzaW4gKiAobHVtQiksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLyoqXG4gKiBTZXQgdGhlIGNvbnRyYXN0IG1hdHJpeCwgaW5jcmVhc2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBkYXJrIGFuZCBicmlnaHRcbiAqIEluY3JlYXNlIGNvbnRyYXN0IDogc2hhZG93cyBkYXJrZXIgYW5kIGhpZ2hsaWdodHMgYnJpZ2h0ZXJcbiAqIERlY3JlYXNlIGNvbnRyYXN0IDogYnJpbmcgdGhlIHNoYWRvd3MgdXAgYW5kIHRoZSBoaWdobGlnaHRzIGRvd25cbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBjb250cmFzdFxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbnRyYXN0ID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHYgPSAoYW1vdW50IHx8IDApICsgMTtcbiAgICB2YXIgbyA9IC0xMjggKiAodiAtIDEpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgdiwgMCwgMCwgMCwgbyxcbiAgICAgICAgMCwgdiwgMCwgMCwgbyxcbiAgICAgICAgMCwgMCwgdiwgMCwgbyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHNhdHVyYXRpb24gbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGNvbG9yc1xuICogSW5jcmVhc2Ugc2F0dXJhdGlvbiA6IGluY3JlYXNlIGNvbnRyYXN0LCBicmlnaHRuZXNzLCBhbmQgc2hhcnBuZXNzXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNhdHVyYXRlID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHggPSAoYW1vdW50IHx8IDApICogMiAvIDMgKyAxO1xuICAgIHZhciB5ID0gKCh4IC0gMSkgKiAtMC41KTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHgsIHksIHksIDAsIDAsXG4gICAgICAgIHksIHgsIHksIDAsIDAsXG4gICAgICAgIHksIHksIHgsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRGVzYXR1cmF0ZSBpbWFnZSAocmVtb3ZlIGNvbG9yKVxuICpcbiAqIENhbGwgdGhlIHNhdHVyYXRlIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmRlc2F0dXJhdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICB0aGlzLnNhdHVyYXRlKC0xKTtcbn07XG5cbi8qKlxuICogTmVnYXRpdmUgaW1hZ2UgKGludmVyc2Ugb2YgY2xhc3NpYyByZ2IgbWF0cml4KVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uZWdhdGl2ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAxLCAxLCAwLCAwLFxuICAgICAgICAxLCAwLCAxLCAwLCAwLFxuICAgICAgICAxLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNlcGlhIGltYWdlXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNlcGlhID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMzkzLCAwLjc2ODk5OTksIDAuMTg4OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMzQ5LCAwLjY4NTk5OTksIDAuMTY3OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMjcyLCAwLjUzMzk5OTksIDAuMTMwOTk5OTksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgbW90aW9uIHBpY3R1cmUgcHJvY2VzcyBpbnZlbnRlZCBpbiAxOTE2ICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50ZWNobmljb2xvciA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjkxMjUyNzc4OTE0NTYwODMsIC0wLjg1NDUzNDQ5NzY5NTE2NDUsIC0wLjA5MTU1NTA4NDgyNzU1NTg1LCAwLCAxMS43OTM2MDM0MzQzNzczMzcsXG4gICAgICAgIC0wLjMwODc4MzMzODU5MjgwOTcsIDEuNzY1ODkwODU1NTQ1ODQyOCwgLTAuMTA2MDE3NDMwNzQ3MjIyNDUsIDAsIC03MC4zNTIwNTE2MTQ2MTM5OCxcbiAgICAgICAgLTAuMjMxMTAzMzc3NTQ4NjE2LCAtMC43NTAxODk5MTk3NDQwMjEyLCAxLjg0NzU5NzgxNjEwODE4OSwgMCwgMzAuOTUwOTQwODY5NDkxMTM4LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFBvbGFyb2lkIGZpbHRlclxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wb2xhcm9pZCA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjQzOCwgLTAuMDYyLCAtMC4wNjIsIDAsIDAsXG4gICAgICAgIC0wLjEyMiwgMS4zNzgsIC0wLjEyMiwgMCwgMCxcbiAgICAgICAgLTAuMDE2LCAtMC4wMTYsIDEuNDgzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEZpbHRlciB3aG8gdHJhbnNmb3JtcyA6IFJlZCAtPiBCbHVlIGFuZCBCbHVlIC0+IFJlZFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50b0JHUiA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIENvbG9yIHJldmVyc2FsIGZpbG0gaW50cm9kdWNlZCBieSBFYXN0bWFuIEtvZGFrIGluIDE5MzUuICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5rb2RhY2hyb21lID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuMTI4NTU4MjM5NjU5MzUyNSwgLTAuMzk2NzM4MjI4MzYwMTM0OCwgLTAuMDM5OTI1NTkxNzI5MjE3OTMsIDAsIDYzLjcyOTU4NzYyMTk2NTAyLFxuICAgICAgICAtMC4xNjQwNDMzOTk2MjI0NDYxNiwgMS4wODM1MjUxNTY2MjkxMzA0LCAtMC4wNTQ5ODgwNTExNTYzMzEzMiwgMCwgMjQuNzMyNDA3ODk2NzA2MjAzLFxuICAgICAgICAtMC4xNjc4NjAxMDcwNjE1NTc2MywgLTAuNTYwMzQxNjI3NzY5NTI0OCwgMS42MDE0ODUwNzYxOTY0OTQzLCAwLCAzNS42Mjk4MjgwNzQ2MDk0NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBCcm93biBkZWxpY2lvdXMgYnJvd25pIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJvd25pID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNTk5NzAyMzQ5ODE1OTcxNSwgMC4zNDU1MzI0MzA0ODM5MTI2MywgLTAuMjcwODI5ODY3NDUzODA0MiwgMCwgNDcuNDMxOTI4NTU2MDA4NzMsXG4gICAgICAgIC0wLjAzNzcwMzI0OTgzNzc4MzE1NywgMC44NjA5NTc3NTg3OTkyNjQxLCAwLjE1MDU5NTUyMzg4NDU5OTEzLCAwLCAtMzYuOTY4NDE0OTgzMTkxMjcsXG4gICAgICAgIDAuMjQxMTM2MzUxMjgxNTMzMzUsIC0wLjA3NDQxMDM3OTA4NDIyNDkyLCAwLjQ0OTcyMTgyMDY0ODc3MTUzLCAwLCAtNy41NjIwNzUyNzc1OTEyODMsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBWaW50YWdlIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudmludGFnZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjYyNzkzNDU2MzU2MDU5OTQsIDAuMzIwMjE4MzQyMDgxOTM2NywgLTAuMDM5NjU0MDgyMTEzMTI0NTMsIDAsIDkuNjUxMjg1ODM1Mjk0MTIzLFxuICAgICAgICAwLjAyNTc4Mzk3NzA0ODA4ODY4LCAwLjY0NDExODg2NDQzNzQ3NzEsIDAuMDMyNTkxMjc2MTYxNDkyOTQsIDAsIDcuNDYyODI5MTc2NDcwNTkxLFxuICAgICAgICAwLjA0NjYwNTU1NTY3ODI3MTksIC0wLjA4NTEyMzI5ODcyNDc4OTEsIDAuNTI0MTY0ODAxODcwMDQ2NSwgMCwgNS4xNTkxOTA1ODgyMzUyOTYsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBXZSBkb24ndCBrbm93IGV4YWN0bHkgd2hhdCBpdCBkb2VzLCBraW5kIG9mIGdyYWRpZW50IG1hcCwgYnV0IGZ1bm55IHRvIHBsYXkgd2l0aCFcbiAqXG4gKiBAcGFyYW0gZGVzYXR1cmF0aW9uIHtudW1iZXJ9XG4gKiBAcGFyYW0gdG9uZWQge251bWJlcn1cbiAqIEBwYXJhbSBsaWdodENvbG9yIHtzdHJpbmd9IChleGFtcGxlIDogXCIweEZGRTU4MFwiKVxuICogQHBhcmFtIGRhcmtDb2xvciB7c3RyaW5nfSAgKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbG9yVG9uZSA9IGZ1bmN0aW9uIChkZXNhdHVyYXRpb24sIHRvbmVkLCBsaWdodENvbG9yLCBkYXJrQ29sb3IsIG11bHRpcGx5KVxue1xuICAgIGRlc2F0dXJhdGlvbiA9IGRlc2F0dXJhdGlvbiB8fCAwLjI7XG4gICAgdG9uZWQgPSB0b25lZCB8fCAwLjE1O1xuICAgIGxpZ2h0Q29sb3IgPSBsaWdodENvbG9yIHx8IDB4RkZFNTgwO1xuICAgIGRhcmtDb2xvciA9IGRhcmtDb2xvciB8fCAweDMzODAwMDtcblxuICAgIHZhciBsUiA9ICgobGlnaHRDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEcgPSAoKGxpZ2h0Q29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEIgPSAobGlnaHRDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgdmFyIGRSID0gKChkYXJrQ29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGRHID0gKChkYXJrQ29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEIgPSAoZGFya0NvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjMsIDAuNTksIDAuMTEsIDAsIDAsXG4gICAgICAgIGxSLCBsRywgbEIsIGRlc2F0dXJhdGlvbiwgMCxcbiAgICAgICAgZFIsIGRHLCBkQiwgdG9uZWQsIDAsXG4gICAgICAgIGxSIC0gZFIsIGxHIC0gZEcsIGxCIC0gZEIsIDAsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBOaWdodCBlZmZlY3RcbiAqXG4gKiBAcGFyYW0gaW50ZW5zaXR5IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubmlnaHQgPSBmdW5jdGlvbiAoaW50ZW5zaXR5LCBtdWx0aXBseSlcbntcbiAgICBpbnRlbnNpdHkgPSBpbnRlbnNpdHkgfHwgMC4xO1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGludGVuc2l0eSAqICggLTIuMCksIC1pbnRlbnNpdHksIDAsIDAsIDAsXG4gICAgICAgIC1pbnRlbnNpdHksIDAsIGludGVuc2l0eSwgMCwgMCxcbiAgICAgICAgMCwgaW50ZW5zaXR5LCBpbnRlbnNpdHkgKiAyLjAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLypcbiAqIFByZWRhdG9yIGVmZmVjdFxuICpcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIGEgbmV3IGluZGVwZW50IG9uZVxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gaG93IG11Y2ggdGhlIHByZWRhdG9yIGZlZWxzIGhpcyBmdXR1cmUgdmljdGltXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucHJlZGF0b3IgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxMS4yMjQxMzA2MzA0OTMxNjQgKiBhbW91bnQsIC00Ljc5NDQ4Njk5OTUxMTcxOSAqIGFtb3VudCwgLTIuODc0NjExODU0NTUzMjIyNyAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC40MDM0MjQzODIyMDk3Nzc4MyAqIGFtb3VudCxcbiAgICAgICAgLTMuNjMzMDY5NzUzNjQ2ODUwNiAqIGFtb3VudCwgOS4xOTMxNTcxOTYwNDQ5MjIgKiBhbW91bnQsIC0yLjk1MTgxMDgzNjc5MTk5MiAqIGFtb3VudCwgMCAqIGFtb3VudCwgLTEuMzE2MTM1MDQ4ODY2MjcyICogYW1vdW50LFxuICAgICAgICAtMy4yMTg0MTk3OTAyNjc5NDQzICogYW1vdW50LCAtNC4yMzc1MDMwNTE3NTc4MTI1ICogYW1vdW50LCA3LjQ3NjQ0ODA1OTA4MjAzMSAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC44MDQ0NDU5MjIzNzQ3MjUzICogYW1vdW50LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogTFNEIGVmZmVjdFxuICpcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gSG93IGNyYXp5IGlzIHlvdXIgZWZmZWN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubHNkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDIsIC0wLjQsIDAuNSwgMCwgMCxcbiAgICAgICAgLTAuNSwgMiwgLTAuNCwgMCwgMCxcbiAgICAgICAgLTAuNCwgLTAuNSwgMywgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIHRoZSBkZWZhdWx0IG9uZVxuICpcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBmYWxzZSk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hdHJpeCBvZiB0aGUgY29sb3IgbWF0cml4IGZpbHRlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvck1hdHJpeEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCBbMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMF1cbiAgICAgKi9cbiAgICBtYXRyaXg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgbG93ZXJzIHRoZSBjb2xvciBkZXB0aCBvZiB5b3VyIGltYWdlIGJ5IHRoZSBnaXZlbiBhbW91bnQsIHByb2R1Y2luZyBhbiBpbWFnZSB3aXRoIGEgc21hbGxlciBwYWxldHRlLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvclN0ZXBGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc3RlcDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBjb2xvciA9IGZsb29yKGNvbG9yICogc3RlcCkgLyBzdGVwO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdGVwOiB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvclN0ZXBGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yU3RlcEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2Ygc3RlcHMgdG8gcmVkdWNlIHRoZSBwYWxldHRlIGJ5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29sb3JTdGVwRmlsdGVyI1xuICAgICAqL1xuICAgIHN0ZXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb252b2x1dGlvbkZpbHRlciBjbGFzcyBhcHBsaWVzIGEgbWF0cml4IGNvbnZvbHV0aW9uIGZpbHRlciBlZmZlY3QuXG4gKiBBIGNvbnZvbHV0aW9uIGNvbWJpbmVzIHBpeGVscyBpbiB0aGUgaW5wdXQgaW1hZ2Ugd2l0aCBuZWlnaGJvcmluZyBwaXhlbHMgdG8gcHJvZHVjZSBhIG5ldyBpbWFnZS5cbiAqIEEgd2lkZSB2YXJpZXR5IG9mIGltYWdlIGVmZmVjdHMgY2FuIGJlIGFjaGlldmVkIHRocm91Z2ggY29udm9sdXRpb25zLCBpbmNsdWRpbmcgYmx1cnJpbmcsIGVkZ2VcbiAqIGRldGVjdGlvbiwgc2hhcnBlbmluZywgZW1ib3NzaW5nLCBhbmQgYmV2ZWxpbmcuIFRoZSBtYXRyaXggc2hvdWxkIGJlIHNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBTZWUgaHR0cDovL2RvY3MuZ2ltcC5vcmcvZW4vcGx1Zy1pbi1jb252bWF0cml4Lmh0bWwgZm9yIG1vcmUgaW5mby5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSBBbiBhcnJheSBvZiB2YWx1ZXMgdXNlZCBmb3IgbWF0cml4IHRyYW5zZm9ybWF0aW9uLiBTcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFdpZHRoIG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqL1xuZnVuY3Rpb24gQ29udm9sdXRpb25GaWx0ZXIobWF0cml4LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgbWVkaXVtcCB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTtcXG51bmlmb3JtIGZsb2F0IG1hdHJpeFs5XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjNCBjMTEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgLSB0ZXhlbFNpemUpOyAvLyB0b3AgbGVmdFxcbiAgIHZlYzQgYzEyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55IC0gdGV4ZWxTaXplLnkpKTsgLy8gdG9wIGNlbnRlclxcbiAgIHZlYzQgYzEzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgcmlnaHRcXG5cXG4gICB2ZWM0IGMyMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCBsZWZ0XFxuICAgdmVjNCBjMjIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpOyAvLyBtaWQgY2VudGVyXFxuICAgdmVjNCBjMjMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSkpOyAvLyBtaWQgcmlnaHRcXG5cXG4gICB2ZWM0IGMzMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGxlZnRcXG4gICB2ZWM0IGMzMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLngsIHZUZXh0dXJlQ29vcmQueSArIHRleGVsU2l6ZS55KSk7IC8vIGJvdHRvbSBjZW50ZXJcXG4gICB2ZWM0IGMzMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIHRleGVsU2l6ZSk7IC8vIGJvdHRvbSByaWdodFxcblxcbiAgIGdsX0ZyYWdDb2xvciA9XFxuICAgICAgIGMxMSAqIG1hdHJpeFswXSArIGMxMiAqIG1hdHJpeFsxXSArIGMxMyAqIG1hdHJpeFsyXSArXFxuICAgICAgIGMyMSAqIG1hdHJpeFszXSArIGMyMiAqIG1hdHJpeFs0XSArIGMyMyAqIG1hdHJpeFs1XSArXFxuICAgICAgIGMzMSAqIG1hdHJpeFs2XSArIGMzMiAqIG1hdHJpeFs3XSArIGMzMyAqIG1hdHJpeFs4XTtcXG5cXG4gICBnbF9GcmFnQ29sb3IuYSA9IGMyMi5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hdHJpeDogICAgIHsgdHlwZTogJzFmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCkgfSxcbiAgICAgICAgICAgIHRleGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSAvIHdpZHRoLCB5OiAxIC8gaGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb252b2x1dGlvbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29udm9sdXRpb25GaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hdHJpeC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMS90aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueCA9IDEvdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS55ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQSBDcm9zcyBIYXRjaCBlZmZlY3QgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDcm9zc0hhdGNoRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGZsb2F0IGx1bSA9IGxlbmd0aCh0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQueHkpLnJnYik7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wLCAxLjAsIDEuMCwgMS4wKTtcXG5cXG4gICAgaWYgKGx1bSA8IDEuMDApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC43NSlcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjUwKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54ICsgZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuMylcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55IC0gNS4wLCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblwiXG4gICAgKTtcbn1cblxuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNyb3NzSGF0Y2hGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBEaXNwbGFjZW1lbnRGaWx0ZXIgY2xhc3MgdXNlcyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20gdGhlIHNwZWNpZmllZCB0ZXh0dXJlIChjYWxsZWQgdGhlIGRpc3BsYWNlbWVudCBtYXApIHRvIHBlcmZvcm0gYSBkaXNwbGFjZW1lbnQgb2YgYW4gb2JqZWN0LlxuICogWW91IGNhbiB1c2UgdGhpcyBmaWx0ZXIgdG8gYXBwbHkgYWxsIG1hbm9yIG9mIGNyYXp5IHdhcnBpbmcgZWZmZWN0c1xuICogQ3VycmVudGx5IHRoZSByIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB4IGFuZCB0aGUgZyBwcm9wZXJ0eSBvZiB0aGUgdGV4dHVyZSBpcyB1c2VkIHRvIG9mZnNldCB0aGUgeS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiAobWFrZSBzdXJlIGl0cyBhZGRlZCB0byB0aGUgc2NlbmUhKVxuICovXG5mdW5jdGlvbiBEaXNwbGFjZW1lbnRGaWx0ZXIoc3ByaXRlLCBzY2FsZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuICAgIHNwcml0ZS5yZW5kZXJhYmxlID0gZmFsc2U7XG5cbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2TWFwQ29vcmQgPSAoIG90aGVyTWF0cml4ICogdmVjMyggYVRleHR1cmVDb29yZCwgMS4wKSAgKS54eTtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMiBzY2FsZTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXBTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IG1hcCA9ICB0ZXh0dXJlMkQobWFwU2FtcGxlciwgdk1hcENvb3JkKTtcXG5cXG4gICBtYXAgLT0gMC41O1xcbiAgIG1hcC54eSAqPSBzY2FsZTtcXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgbWFwLngsIHZUZXh0dXJlQ29vcmQueSArIG1hcC55KSk7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtYXBTYW1wbGVyOiAgICAgeyB0eXBlOiAnc2FtcGxlcjJEJywgdmFsdWU6IHNwcml0ZS50ZXh0dXJlIH0sXG4gICAgICAgICAgICBvdGhlck1hdHJpeDogICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBtYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSkgfSxcbiAgICAgICAgICAgIHNjYWxlOiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG5cbiAgICBpZiAoc2NhbGUgPT09IG51bGwgfHwgc2NhbGUgPT09IHVuZGVmaW5lZClcbiAgICB7XG4gICAgICAgIHNjYWxlID0gMjA7XG4gICAgfVxuXG4gICAgdGhpcy5zY2FsZSA9IG5ldyBjb3JlLlBvaW50KHNjYWxlLCBzY2FsZSk7XG59XG5cbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGFjZW1lbnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERpc3BsYWNlbWVudEZpbHRlcjtcblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICBmaWx0ZXJNYW5hZ2VyLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeChpbnB1dC5mcmFtZSwgdGhpcy5tYXNrU3ByaXRlLCB0aGlzLm1hc2tNYXRyaXgpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5vdGhlck1hdHJpeC52YWx1ZSA9IHRoaXMubWFza01hdHJpeC50b0FycmF5KHRydWUpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueCA9IHRoaXMuc2NhbGUueCAqICgxL2lucHV0LmZyYW1lLndpZHRoKTtcbiAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlLnkgPSB0aGlzLnNjYWxlLnkgKiAoMS9pbnB1dC5mcmFtZS5oZWlnaHQpO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRGlzcGxhY2VtZW50RmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvZnVuL2RvdHNjcmVlbi5qc1xuICovXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIGRvdHNjcmVlbiBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgdG8gYmUgbWFkZSBvdXQgb2ZcbiAqIGJsYWNrIGFuZCB3aGl0ZSBoYWxmdG9uZSBkb3RzIGxpa2UgYW4gb2xkIHByaW50ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIERvdFNjcmVlbkZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XFxuXFxuZmxvYXQgcGF0dGVybigpXFxue1xcbiAgIGZsb2F0IHMgPSBzaW4oYW5nbGUpLCBjID0gY29zKGFuZ2xlKTtcXG4gICB2ZWMyIHRleCA9IHZUZXh0dXJlQ29vcmQgKiBkaW1lbnNpb25zLnh5O1xcbiAgIHZlYzIgcG9pbnQgPSB2ZWMyKFxcbiAgICAgICBjICogdGV4LnggLSBzICogdGV4LnksXFxuICAgICAgIHMgKiB0ZXgueCArIGMgKiB0ZXgueVxcbiAgICkgKiBzY2FsZTtcXG4gICByZXR1cm4gKHNpbihwb2ludC54KSAqIHNpbihwb2ludC55KSkgKiA0LjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGZsb2F0IGF2ZXJhZ2UgPSAoY29sb3IuciArIGNvbG9yLmcgKyBjb2xvci5iKSAvIDMuMDtcXG4gICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzMoYXZlcmFnZSAqIDEwLjAgLSA1LjAgKyBwYXR0ZXJuKCkpLCBjb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzY2FsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEb3RTY3JlZW5GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERvdFNjcmVlbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBzY2FsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSByYWRpdXMgb2YgdGhlIGVmZmVjdC5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Eb3RTY3JlZW5GaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllUaW50RmlsdGVyIGFwcGxpZXMgYSB2ZXJ0aWNhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1cllUaW50RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24rb2Zmc2V0KSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMyBjb2xvcjtcXG51bmlmb3JtIGZsb2F0IGFscGhhO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBzdW0gPSB2ZWM0KDAuMCk7XFxuXFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KCBjb2xvci5yZ2IgKiBzdW0uYSAqIGFscGhhLCBzdW0uYSAqIGFscGhhICk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgLyA1MTIgfSxcbiAgICAgICAgICAgIGNvbG9yOiB7IHR5cGU6ICdjJywgdmFsdWU6IFswLDAsMF19LFxuICAgICAgICAgICAgYWxwaGE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNyB9LFxuICAgICAgICAgICAgb2Zmc2V0OiB7IHR5cGU6ICcyZicsIHZhbHVlOls1LCA1XX0sXG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZToxfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJZVGludEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllUaW50RmlsdGVyO1xuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCBjbGVhcik7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJZVGludEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllUaW50RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZVGludEZpbHRlciA9IHJlcXVpcmUoJy4vQmx1cllUaW50RmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIERyb3BTaGFkb3dGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRHJvcFNoYWRvd0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyID0gbmV3IEJsdXJZVGludEZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIHRoaXMucGFkZGluZyA9IDMwO1xuXG4gICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgdGhpcy5fYW5nbGUgPSA0NSAqIE1hdGguUEkgLyAxODA7XG4gICAgdGhpcy5fZGlzdGFuY2UgPSAxMDtcbiAgICB0aGlzLmFscGhhID0gMC43NTtcbiAgICB0aGlzLmhpZGVPYmplY3QgPSBmYWxzZTtcbiAgICB0aGlzLmJsZW5kTW9kZSA9IGNvcmUuQkxFTkRfTU9ERVMuTVVMVElQTFk7XG59XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERyb3BTaGFkb3dGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERyb3BTaGFkb3dGaWx0ZXI7XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICBpZih0aGlzLl9kaXJ0eVBvc2l0aW9uKVxuICAgIHtcbiAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVswXSA9IE1hdGguc2luKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5vZmZzZXQudmFsdWVbMV0gPSBNYXRoLmNvcyh0aGlzLl9hbmdsZSkgKiB0aGlzLl9kaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKHRoaXMuYmxlbmRNb2RlKTtcblxuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZighdGhpcy5oaWRlT2JqZWN0KVxuICAgIHtcblxuICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuICAgIH1cblxuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNvbG9yIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgY29sb3I6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIGNvcmUudXRpbHMucmdiMmhleCggdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmNvbG9yLnZhbHVlID0gY29yZS51dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbHBoYSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFscGhhOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzdGFuY2Ugb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBkaXN0YW5jZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3RhbmNlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYW5nbGUgb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fYW5nbGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2FuZ2xlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZ3JleXNjYWxlcyB0aGUgcGFsZXR0ZSBvZiB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gR3JheUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGdyYXk7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peChnbF9GcmFnQ29sb3IucmdiLCB2ZWMzKDAuMjEyNipnbF9GcmFnQ29sb3IuciArIDAuNzE1MipnbF9GcmFnQ29sb3IuZyArIDAuMDcyMipnbF9GcmFnQ29sb3IuYiksIGdyYXkpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBncmF5OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkdyYXlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5HcmF5RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEdyYXlGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmF5LiAxIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGJsYWNrIGFuZCB3aGl0ZSwgMCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuR3JheUZpbHRlciNcbiAgICAgKi9cbiAgICBncmF5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBmaWx0ZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5maWx0ZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEFzY2lpRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9hc2NpaS9Bc2NpaUZpbHRlcicpLFxuICAgIEJsb29tRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibG9vbS9CbG9vbUZpbHRlcicpLFxuICAgIEJsdXJGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJGaWx0ZXInKSxcbiAgICBCbHVyWEZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJZRmlsdGVyJyksXG4gICAgQmx1ckRpckZpbHRlcjogICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckRpckZpbHRlcicpLFxuICAgIENvbG9yTWF0cml4RmlsdGVyOiAgcmVxdWlyZSgnLi9jb2xvci9Db2xvck1hdHJpeEZpbHRlcicpLFxuICAgIENvbG9yU3RlcEZpbHRlcjogICAgcmVxdWlyZSgnLi9jb2xvci9Db2xvclN0ZXBGaWx0ZXInKSxcbiAgICBDb252b2x1dGlvbkZpbHRlcjogIHJlcXVpcmUoJy4vY29udm9sdXRpb24vQ29udm9sdXRpb25GaWx0ZXInKSxcbiAgICBDcm9zc0hhdGNoRmlsdGVyOiAgIHJlcXVpcmUoJy4vY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyJyksXG4gICAgRGlzcGxhY2VtZW50RmlsdGVyOiByZXF1aXJlKCcuL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXInKSxcbiAgICBEb3RTY3JlZW5GaWx0ZXI6ICAgIHJlcXVpcmUoJy4vZG90L0RvdFNjcmVlbkZpbHRlcicpLFxuICAgIEdyYXlGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ncmF5L0dyYXlGaWx0ZXInKSxcbiAgICBEcm9wU2hhZG93RmlsdGVyOiAgIHJlcXVpcmUoJy4vZHJvcHNoYWRvdy9Ecm9wU2hhZG93RmlsdGVyJyksXG4gICAgSW52ZXJ0RmlsdGVyOiAgICAgICByZXF1aXJlKCcuL2ludmVydC9JbnZlcnRGaWx0ZXInKSxcbiAgICBOb2lzZUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vbm9pc2UvTm9pc2VGaWx0ZXInKSxcbiAgICBQaXhlbGF0ZUZpbHRlcjogICAgIHJlcXVpcmUoJy4vcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXInKSxcbiAgICBSR0JTcGxpdEZpbHRlcjogICAgIHJlcXVpcmUoJy4vcmdiL1JHQlNwbGl0RmlsdGVyJyksXG4gICAgU2hvY2t3YXZlRmlsdGVyOiAgICByZXF1aXJlKCcuL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXInKSxcbiAgICBTZXBpYUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vc2VwaWEvU2VwaWFGaWx0ZXInKSxcbiAgICBTbWFydEJsdXJGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vYmx1ci9TbWFydEJsdXJGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFhGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlcicpLFxuICAgIFR3aXN0RmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi90d2lzdC9Ud2lzdEZpbHRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBpbnZlcnRzIHlvdXIgRGlzcGxheSBPYmplY3RzIGNvbG9ycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gSW52ZXJ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIGZsb2F0IGludmVydDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoICh2ZWMzKDEpLWdsX0ZyYWdDb2xvci5yZ2IpICogZ2xfRnJhZ0NvbG9yLmEsIGdsX0ZyYWdDb2xvci5yZ2IsIDEuMCAtIGludmVydCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgaW52ZXJ0OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkludmVydEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkludmVydEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnZlcnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludmVydEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgaW52ZXJ0LiBgMWAgd2lsbCBmdWxseSBpbnZlcnQgdGhlIGNvbG9ycywgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5JbnZlcnRGaWx0ZXIjXG4gICAgICovXG4gICAgaW52ZXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuaW52ZXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYWRqdXN0L25vaXNlLmpzXG4gKi9cblxuLyoqXG4gKiBBIE5vaXNlIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIE5vaXNlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IG5vaXNlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IHJhbmQodmVjMiBjbylcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGNvLnh5LCB2ZWMyKDEyLjk4OTgsIDc4LjIzMykpKSAqIDQzNzU4LjU0NTMpO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGZsb2F0IGRpZmYgPSAocmFuZCh2VGV4dHVyZUNvb3JkKSAtIDAuNSkgKiBub2lzZTtcXG5cXG4gICAgY29sb3IuciArPSBkaWZmO1xcbiAgICBjb2xvci5nICs9IGRpZmY7XFxuICAgIGNvbG9yLmIgKz0gZGlmZjtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbm9pc2U6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Ob2lzZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbk5vaXNlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE5vaXNlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBOb2lzZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTm9pc2VGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGFtb3VudCBvZiBub2lzZSB0byBhcHBseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLk5vaXNlRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDAuNVxuICAgICAqL1xuICAgIG5vaXNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm5vaXNlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSBwaXhlbGF0ZSBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgJ2Jsb2NreScuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFBpeGVsYXRlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZlYzIgc2l6ZSA9IGRpbWVuc2lvbnMueHkgLyBwaXhlbFNpemU7XFxuXFxuICAgIHZlYzIgY29sb3IgPSBmbG9vciggKCB2VGV4dHVyZUNvb3JkICogc2l6ZSApICkgLyBzaXplICsgcGl4ZWxTaXplL2RpbWVuc2lvbnMueHkgKiAwLjU7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgY29sb3IpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsICB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICd2MicsICAgdmFsdWU6IHsgeDogMTAsIHk6IDEwIH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQaXhlbGF0ZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gUGl4ZWxhdGVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgYSBwb2ludCB0aGF0IGRlc2NyaWJlcyB0aGUgc2l6ZSBvZiB0aGUgYmxvY2tzLlxuICAgICAqIHggaXMgdGhlIHdpZHRoIG9mIHRoZSBibG9jayBhbmQgeSBpcyB0aGUgaGVpZ2h0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlBpeGVsYXRlRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBbiBSR0IgU3BsaXQgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBSR0JTcGxpdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSB2ZWMyIHJlZDtcXG51bmlmb3JtIHZlYzIgZ3JlZW47XFxudW5pZm9ybSB2ZWMyIGJsdWU7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvci5yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgcmVkL2RpbWVuc2lvbnMueHkpLnI7XFxuICAgZ2xfRnJhZ0NvbG9yLmcgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBncmVlbi9kaW1lbnNpb25zLnh5KS5nO1xcbiAgIGdsX0ZyYWdDb2xvci5iID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgYmx1ZS9kaW1lbnNpb25zLnh5KS5iO1xcbiAgIGdsX0ZyYWdDb2xvci5hID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKS5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZDogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGdyZWVuOiAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogLTIwLCB5OiAyMCB9IH0sXG4gICAgICAgICAgICBibHVlOiAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDIwLCB5OiAtMjAgfSB9LFxuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLCAwLCAwLCAwXSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5SR0JTcGxpdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJHQlNwbGl0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBSR0JTcGxpdEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogUmVkIGNoYW5uZWwgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIHJlZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJlZC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR3JlZW4gY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JlZW46IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JlZW4udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBCbHVlIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGFwcGxpZXMgYSBzZXBpYSBlZmZlY3QgdG8geW91ciBEaXNwbGF5IE9iamVjdHMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNlcGlhRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHNlcGlhO1xcblxcbmNvbnN0IG1hdDMgc2VwaWFNYXRyaXggPSBtYXQzKDAuMzU4OCwgMC43MDQ0LCAwLjEzNjgsIDAuMjk5MCwgMC41ODcwLCAwLjExNDAsIDAuMjM5MiwgMC40Njk2LCAwLjA5MTIpO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGdsX0ZyYWdDb2xvci5yZ2IgKiBzZXBpYU1hdHJpeCwgc2VwaWEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNlcGlhOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNlcGlhRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU2VwaWFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2VwaWFGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNlcGlhRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTZXBpYUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIHNlcGlhLiBgMWAgd2lsbCBhcHBseSB0aGUgZnVsbCBzZXBpYSBlZmZlY3QsIGFuZFxuICAgICAqIGAwYCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2VwaWFGaWx0ZXIjXG4gICAgICovXG4gICAgc2VwaWE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc2VwaWEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbG9yTWF0cml4RmlsdGVyIGNsYXNzIGxldHMgeW91IGFwcGx5IGEgNHg0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgUkdCQVxuICogY29sb3IgYW5kIGFscGhhIHZhbHVlcyBvZiBldmVyeSBwaXhlbCBvbiB5b3VyIGRpc3BsYXlPYmplY3QgdG8gcHJvZHVjZSBhIHJlc3VsdFxuICogd2l0aCBhIG5ldyBzZXQgb2YgUkdCQSBjb2xvciBhbmQgYWxwaGEgdmFsdWVzLiBJdCdzIHByZXR0eSBwb3dlcmZ1bCFcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2hvY2t3YXZlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIHZlYzIgY2VudGVyO1xcbnVuaWZvcm0gdmVjMyBwYXJhbXM7IC8vIDEwLjAsIDAuOCwgMC4xXFxudW5pZm9ybSBmbG9hdCB0aW1lO1xcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gdlRleHR1cmVDb29yZDtcXG4gICAgdmVjMiB0ZXhDb29yZCA9IHV2O1xcblxcbiAgICBmbG9hdCBkaXN0ID0gZGlzdGFuY2UodXYsIGNlbnRlcik7XFxuXFxuICAgIGlmICggKGRpc3QgPD0gKHRpbWUgKyBwYXJhbXMueikpICYmIChkaXN0ID49ICh0aW1lIC0gcGFyYW1zLnopKSApXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IGRpZmYgPSAoZGlzdCAtIHRpbWUpO1xcbiAgICAgICAgZmxvYXQgcG93RGlmZiA9IDEuMCAtIHBvdyhhYnMoZGlmZipwYXJhbXMueCksIHBhcmFtcy55KTtcXG5cXG4gICAgICAgIGZsb2F0IGRpZmZUaW1lID0gZGlmZiAgKiBwb3dEaWZmO1xcbiAgICAgICAgdmVjMiBkaWZmVVYgPSBub3JtYWxpemUodXYgLSBjZW50ZXIpO1xcbiAgICAgICAgdGV4Q29vcmQgPSB1diArIChkaWZmVVYgKiBkaWZmVGltZSk7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB0ZXhDb29yZCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgY2VudGVyOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfSxcbiAgICAgICAgICAgIHBhcmFtczogeyB0eXBlOiAndjMnLCB2YWx1ZTogeyB4OiAxMCwgeTogMC44LCB6OiAwLjEgfSB9LFxuICAgICAgICAgICAgdGltZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hvY2t3YXZlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaG9ja3dhdmVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjZW50ZXIgb2YgdGhlIHNob2Nrd2F2ZSBpbiBub3JtYWxpemVkIHNjcmVlbiBjb29yZHMuIFRoYXQgaXNcbiAgICAgKiAoMCwwKSBpcyB0aGUgdG9wLWxlZnQgYW5kICgxLDEpIGlzIHRoZSBib3R0b20gcmlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBudW1iZXI+fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIGNlbnRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmNlbnRlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBhcmFtcyBvZiB0aGUgc2hvY2t3YXZlLiBUaGVzZSBtb2RpZnkgdGhlIGxvb2sgYW5kIGJlaGF2aW9yIG9mXG4gICAgICogdGhlIHNob2Nrd2F2ZSBhcyBpdCByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgcGFyYW1zOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGFyYW1zLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZWxhcHNlZCB0aW1lIG9mIHRoZSBzaG9ja3dhdmUuIFRoaXMgY29udHJvbHMgdGhlIHNwZWVkIGF0IHdoaWNoXG4gICAgICogdGhlIHNob2Nrd2F2ZSByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICB0aW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0QXhpc0ZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0QXhpc0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBibHVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JhZGllbnRCbHVyO1xcbnVuaWZvcm0gdmVjMiBzdGFydDtcXG51bmlmb3JtIHZlYzIgZW5kO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG51bmlmb3JtIHZlYzIgdGV4U2l6ZTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG4gICAgdmVjMiBub3JtYWwgPSBub3JtYWxpemUodmVjMihzdGFydC55IC0gZW5kLnksIGVuZC54IC0gc3RhcnQueCkpO1xcbiAgICBmbG9hdCByYWRpdXMgPSBzbW9vdGhzdGVwKDAuMCwgMS4wLCBhYnMoZG90KHZUZXh0dXJlQ29vcmQgKiB0ZXhTaXplIC0gc3RhcnQsIG5vcm1hbCkpIC8gZ3JhZGllbnRCbHVyKSAqIGJsdXI7XFxuXFxuICAgIGZvciAoZmxvYXQgdCA9IC0zMC4wOyB0IDw9IDMwLjA7IHQrKylcXG4gICAge1xcbiAgICAgICAgZmxvYXQgcGVyY2VudCA9ICh0ICsgb2Zmc2V0IC0gMC41KSAvIDMwLjA7XFxuICAgICAgICBmbG9hdCB3ZWlnaHQgPSAxLjAgLSBhYnMocGVyY2VudCk7XFxuICAgICAgICB2ZWM0IHNhbXBsZSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGRlbHRhIC8gdGV4U2l6ZSAqIHBlcmNlbnQgKiByYWRpdXMpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBibHVyOiAgICAgICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMTAwIH0sXG4gICAgICAgICAgICBncmFkaWVudEJsdXI6ICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNjAwIH0sXG4gICAgICAgICAgICBzdGFydDogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLCAgICB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIH0gfSxcbiAgICAgICAgICAgIGVuZDogICAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDYwMCwgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZGVsdGE6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMzAsICAgeTogMzAgfSB9LFxuICAgICAgICAgICAgdGV4U2l6ZTogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogd2luZG93LmlubmVyV2lkdGgsIHk6IHdpbmRvdy5pbm5lckhlaWdodCB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG59XG5cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiB0aGUgWCBhbmQgWSBmaWx0ZXJzLCBkb2VzIG5vdGhpbmcgZm9yIHRoaXMgY2xhc3MuXG4gKlxuICovXG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gMDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSAwO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmFkaWVudEJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIHN0YXJ0IHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgZW5kOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdFlGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0IEZpbHRlci4gTWFuYWdlcyB0aGUgcGFzcyBvZiBib3RoIGEgVGlsdFNoaWZ0WEZpbHRlciBhbmQgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIgPSBuZXcgVGlsdFNoaWZ0WEZpbHRlcigpO1xuICAgIHRoaXMudGlsdFNoaWZ0WUZpbHRlciA9IG5ldyBUaWx0U2hpZnRZRmlsdGVyKCk7XG59XG5cblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEZpbHRlcjtcblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JhZGllbnQgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ncmFkaWVudEJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZ3JhZGllbnRCbHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFkgdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuc3RhcnQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBlbmQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5lbmQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZW5kID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBUaWx0U2hpZnRBeGlzRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRBeGlzRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdFhGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRpbHRTaGlmdEF4aXNGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0WEZpbHRlcigpXG57XG4gICAgVGlsdFNoaWZ0QXhpc0ZpbHRlci5jYWxsKHRoaXMpO1xufVxuXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRYRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRYRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKlxuICovXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGR4ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueCAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueDtcbiAgICB2YXIgZHkgPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS55IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS55O1xuICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IGR4IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeSAvIGQ7XG59O1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRZRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gLWR5IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeCAvIGQ7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHR3aXN0IGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0d2lzdGVkIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFR3aXN0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHJhZGl1cztcXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzIgY29vcmQgPSB2VGV4dHVyZUNvb3JkIC0gb2Zmc2V0O1xcbiAgIGZsb2F0IGRpc3QgPSBsZW5ndGgoY29vcmQpO1xcblxcbiAgIGlmIChkaXN0IDwgcmFkaXVzKVxcbiAgIHtcXG4gICAgICAgZmxvYXQgcmF0aW8gPSAocmFkaXVzIC0gZGlzdCkgLyByYWRpdXM7XFxuICAgICAgIGZsb2F0IGFuZ2xlTW9kID0gcmF0aW8gKiByYXRpbyAqIGFuZ2xlO1xcbiAgICAgICBmbG9hdCBzID0gc2luKGFuZ2xlTW9kKTtcXG4gICAgICAgZmxvYXQgYyA9IGNvcyhhbmdsZU1vZCk7XFxuICAgICAgIGNvb3JkID0gdmVjMihjb29yZC54ICogYyAtIGNvb3JkLnkgKiBzLCBjb29yZC54ICogcyArIGNvb3JkLnkgKiBjKTtcXG4gICB9XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCtvZmZzZXQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhZGl1czogICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9LFxuICAgICAgICAgICAgYW5nbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9LFxuICAgICAgICAgICAgb2Zmc2V0OiAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjUsIHk6IDAuNSB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblR3aXN0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVHdpc3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHdpc3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFR3aXN0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUd2lzdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IGRlc2NyaWJlcyB0aGUgdGhlIG9mZnNldCBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgb2Zmc2V0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHJhZGl1cyBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICByYWRpdXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5yYWRpdXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgYW5nbGUgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiLy8gcnVuIHRoZSBwb2x5ZmlsbHNcbnJlcXVpcmUoJy4vcG9seWZpbGwnKTtcblxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29yZScpO1xuXG4vLyBhZGQgY29yZSBwbHVnaW5zLlxuY29yZS5leHRyYXMgICAgICAgICA9IHJlcXVpcmUoJy4vZXh0cmFzJyk7XG5jb3JlLmZpbHRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5jb3JlLmludGVyYWN0aW9uICAgID0gcmVxdWlyZSgnLi9pbnRlcmFjdGlvbicpO1xuY29yZS5sb2FkZXJzICAgICAgICA9IHJlcXVpcmUoJy4vbG9hZGVycycpO1xuY29yZS5tZXNoICAgICAgICAgICA9IHJlcXVpcmUoJy4vbWVzaCcpO1xuY29yZS5hY2Nlc3NpYmlsaXR5ICA9IHJlcXVpcmUoJy4vYWNjZXNzaWJpbGl0eScpO1xuXG4vLyBleHBvcnQgYSBwcmVtYWRlIGxvYWRlciBpbnN0YW5jZVxuLyoqXG4gKiBBIHByZW1hZGUgaW5zdGFuY2Ugb2YgdGhlIGxvYWRlciB0aGF0IGNhbiBiZSB1c2VkIHRvIGxvYWRlciByZXNvdXJjZXMuXG4gKlxuICogQG5hbWUgbG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHByb3BlcnR5IHtQSVhJLmxvYWRlcnMuTG9hZGVyfVxuICovXG5jb3JlLmxvYWRlciA9IG5ldyBjb3JlLmxvYWRlcnMuTG9hZGVyKCk7XG5cbi8vIG1peGluIHRoZSBkZXByZWNhdGlvbiBmZWF0dXJlcy5cbk9iamVjdC5hc3NpZ24oY29yZSwgcmVxdWlyZSgnLi9kZXByZWNhdGlvbicpKTtcblxuLy8gQWx3YXlzIGV4cG9ydCBwaXhpIGdsb2JhbGx5LlxuZ2xvYmFsLlBJWEkgPSBjb3JlO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogSG9sZHMgYWxsIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gYW4gSW50ZXJhY3Rpb24gZXZlbnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uRGF0YSgpXG57XG4gICAgLyoqXG4gICAgICogVGhpcyBwb2ludCBzdG9yZXMgdGhlIGdsb2JhbCBjb29yZHMgb2Ygd2hlcmUgdGhlIHRvdWNoL21vdXNlIGV2ZW50IGhhcHBlbmVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuZ2xvYmFsID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgU3ByaXRlIHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TcHJpdGV9XG4gICAgICovXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBwYXNzZWQgdG8gYW4gZXZlbnQgaGFuZGxlciwgdGhpcyB3aWxsIGJlIHRoZSBvcmlnaW5hbCBET00gRXZlbnQgdGhhdCB3YXMgY2FwdHVyZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0V2ZW50fVxuICAgICAqL1xuICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IG51bGw7XG59XG5cbkludGVyYWN0aW9uRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbkRhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uRGF0YTtcblxuLyoqXG4gKiBUaGlzIHdpbGwgcmV0dXJuIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgc3BlY2lmaWVkIGRpc3BsYXlPYmplY3QgZm9yIHRoaXMgSW50ZXJhY3Rpb25EYXRhXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgbG9jYWwgY29vcmRzIG9mZlxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBwb2ludClcbiAqIEBwYXJhbSBbZ2xvYmFsUG9zXSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgY29udGFpbmluZyB5b3VyIGN1c3RvbSBnbG9iYWwgY29vcmRzLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgdXNlIHRoZSBjdXJyZW50IGdsb2JhbCBjb29yZHMpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBJbnRlcmFjdGlvbkRhdGEgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIERpc3BsYXlPYmplY3RcbiAqL1xuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5nZXRMb2NhbFBvc2l0aW9uID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHBvaW50LCBnbG9iYWxQb3MpXG57XG4gICAgcmV0dXJuIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKGdsb2JhbFBvcyB8fCB0aGlzLmdsb2JhbCwgcG9pbnQpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIEludGVyYWN0aW9uRGF0YSA9IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25EYXRhJyk7XG5cbi8vIE1peCBpbnRlcmFjdGl2ZVRhcmdldCBpbnRvIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGVcbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbik7XG5cbi8qKlxuICogVGhlIGludGVyYWN0aW9uIG1hbmFnZXIgZGVhbHMgd2l0aCBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzLiBBbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgaW50ZXJhY3RpdmVcbiAqIGlmIGl0cyBpbnRlcmFjdGl2ZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIHRydWVcbiAqIFRoaXMgbWFuYWdlciBhbHNvIHN1cHBvcnRzIG11bHRpdG91Y2guXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH1cbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQ9dHJ1ZV0ge2Jvb2xlYW59IFNob3VsZCB0aGUgbWFuYWdlciBhdXRvbWF0aWNhbGx5IHByZXZlbnQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMuXG4gKiBAcGFyYW0gW29wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3k9MTBdIHtudW1iZXJ9IEZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQuXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uTWFuYWdlcihyZW5kZXJlciwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGludGVyYWN0aW9uIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMgYXV0b21hdGljYWxseSBiZSBwcmV2ZW50ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdCA9IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdCA6IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBcyB0aGlzIGZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQgbW9yZSBvZnRlbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgPSBvcHRpb25zLmludGVyYWN0aW9uRnJlcXVlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vdXNlIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhfVxuICAgICAqL1xuICAgIHRoaXMubW91c2UgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCBkYXRhIG9iamVjdCB0byBoYW5kbGUgYWxsIHRoZSBldmVudCB0cmFja2luZy9kaXNwYXRjaGluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnREYXRhID0ge1xuICAgICAgICBzdG9wcGVkOiBmYWxzZSxcbiAgICAgICAgdGFyZ2V0OiBudWxsLFxuICAgICAgICB0eXBlOiBudWxsLFxuICAgICAgICBkYXRhOiB0aGlzLm1vdXNlLFxuICAgICAgICBzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGlueSBsaXR0bGUgaW50ZXJhY3RpdmVEYXRhIHBvb2wgIVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGFbXX1cbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBET00gZWxlbWVudCB0byBiaW5kIHRvLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTEVsZW1lbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIYXZlIGV2ZW50cyBiZWVuIGF0dGFjaGVkIHRvIHRoZSBkb20gZWxlbWVudD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gZmFsc2U7XG5cbiAgICAvL3RoaXMgd2lsbCBtYWtlIGl0IHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gY2FsbCBiaW5kIGFsbCB0aGUgdGltZVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlVXAgPSB0aGlzLm9uTW91c2VVcC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlVXAgPSB0aGlzLnByb2Nlc3NNb3VzZVVwLmJpbmQoIHRoaXMgKTtcblxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IHRoaXMub25Nb3VzZURvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZURvd24gPSB0aGlzLnByb2Nlc3NNb3VzZURvd24uYmluZCggdGhpcyApO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IHRoaXMub25Nb3VzZU1vdmUuYmluZCggdGhpcyApO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IHRoaXMucHJvY2Vzc01vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VPdXQgPSB0aGlzLm9uTW91c2VPdXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IHRoaXMub25Ub3VjaFN0YXJ0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaEVuZCA9IHRoaXMub25Ub3VjaEVuZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gdGhpcy5wcm9jZXNzVG91Y2hFbmQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaE1vdmUgPSB0aGlzLm9uVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sYXN0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjc3Mgc3R5bGUgb2YgdGhlIGN1cnNvciB0aGF0IGlzIGJlaW5nIHVzZWRcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSAnaW5oZXJpdCc7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjYWNoZWQgdmFyXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCByZXNvbHV0aW9uXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IDE7XG5cbiAgICB0aGlzLnNldFRhcmdldEVsZW1lbnQodGhpcy5yZW5kZXJlci52aWV3LCB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24pO1xufVxuXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJhY3Rpb25NYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5cbi8qKlxuICogU2V0cyB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlL3RvdWNoIGV2ZW50cy4gVGhpcyBpcyB1c2VmdWwgZm9yIHdoZW4geW91IGhhdmVcbiAqIG90aGVyIERPTSBlbGVtZW50cyBvbiB0b3Agb2YgdGhlIHJlbmRlcmVycyBDYW52YXMgZWxlbWVudC4gV2l0aCB0aGlzIHlvdSdsbCBiZSBiYWxlIHRvIGRlbGV0ZWdhdGVcbiAqIGFub3RoZXIgRE9NIGVsZW1lbnQgdG8gcmVjZWl2ZSB0aG9zZSBldmVudHMuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQge0hUTUxFbGVtZW50fSB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVEhlIHJlc29sdXRpb24gb2YgdGhlIG5ldyBlbGVtZW50IChyZWxhdGl2ZSB0byB0aGUgY2FudmFzKS5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuc2V0VGFyZ2V0RWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCByZXNvbHV0aW9uKVxue1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICB0aGlzLmFkZEV2ZW50cygpO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYWxsIHRoZSBET00gZXZlbnRzXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5hZGRFdmVudHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29yZS50aWNrZXIuc2hhcmVkLmFkZCh0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy1jb250ZW50LXpvb21pbmcnXSA9ICdub25lJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICdub25lJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgICAgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgICAgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgICAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCAgIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICAgICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsICAgIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIHRoZSBET00gZXZlbnRzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHJlZ2lzdGVyZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJyc7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAgdGhpcy5vblRvdWNoRW5kLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlLCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgIHRoaXMub25Nb3VzZVVwLCB0cnVlKTtcblxuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc3RhdGUgb2YgaW50ZXJhY3RpdmUgb2JqZWN0cy5cbiAqIEludm9rZWQgYnkgYSB0aHJvdHRsZWQgdGlja2VyIHVwZGF0ZSBmcm9tXG4gKiB7QGxpbmsgUElYSS50aWNrZXIuc2hhcmVkfS5cbiAqXG4gKiBAcGFyYW0gZGVsdGFUaW1lIHtudW1iZXJ9XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB0aGlzLl9kZWx0YVRpbWUgKz0gZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2RlbHRhVGltZSA8IHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGVsdGFUaW1lID0gMDtcblxuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHVzZXIgbW92ZSB0aGUgbW91c2UgdGhpcyBjaGVjayBoYXMgYWxyZWFkeSBiZWVuIGRmb25lIHVzaW5nIHRoZSBtb3VzZSBtb3ZlIVxuICAgIGlmKHRoaXMuZGlkTW92ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlkTW92ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE9cbn07XG5cbi8qKlxuICogRGlzcGF0Y2hlcyBhbiBldmVudCBvbiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIGRpc3BsYXkgb2JqZWN0IGluIHF1ZXN0aW9uXG4gKiBAcGFyYW0gZXZlbnRTdHJpbmcge3N0cmluZ30gdGhlIG5hbWUgb2YgdGhlIGV2ZW50IChlLmcsIG1vdXNlZG93bilcbiAqIEBwYXJhbSBldmVudERhdGEge29iamVjdH0gdGhlIGV2ZW50IGRhdGEgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGV2ZW50U3RyaW5nLCBldmVudERhdGEgKVxue1xuICAgIGlmKCFldmVudERhdGEuc3RvcHBlZClcbiAgICB7XG4gICAgICAgIGV2ZW50RGF0YS50YXJnZXQgPSBkaXNwbGF5T2JqZWN0O1xuICAgICAgICBldmVudERhdGEudHlwZSA9IGV2ZW50U3RyaW5nO1xuXG4gICAgICAgIGRpc3BsYXlPYmplY3QuZW1pdCggZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0W2V2ZW50U3RyaW5nXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddKCBldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogTWFwcyB4IGFuZCB5IGNvb3JkcyBmcm9tIGEgRE9NIG9iamVjdCBhbmQgbWFwcyB0aGVtIGNvcnJlY3RseSB0byB0aGUgcGl4aSB2aWV3LiBUaGUgcmVzdWx0aW5nIHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUgcG9pbnQuXG4gKiBUaGlzIHRha2VzIGludG8gYWNjb3VudCB0aGUgZmFjdCB0aGF0IHRoZSBET00gZWxlbWVudCBjb3VsZCBiZSBzY2FsZWQgYW5kIHBvc2l0aW9uZWQgYW55d2hlcmUgb24gdGhlIHNjcmVlbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCB0aGUgcmVzdWx0IHdpbGwgYmUgc3RvcmVkIGluXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHggICAgIHRoZSB4IGNvb3JkIG9mIHRoZSBwb3NpdGlvbiB0byBtYXBcbiAqIEBwYXJhbSAge251bWJlcn0geSAgICAgdGhlIHkgY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm1hcFBvc2l0aW9uVG9Qb2ludCA9IGZ1bmN0aW9uICggcG9pbnQsIHgsIHkgKVxue1xuICAgIHZhciByZWN0ID0gdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcG9pbnQueCA9ICggKCB4IC0gcmVjdC5sZWZ0ICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQud2lkdGggIC8gcmVjdC53aWR0aCAgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHBvaW50LnkgPSAoICggeSAtIHJlY3QudG9wICApICogKHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmhlaWdodCAvIHJlY3QuaGVpZ2h0ICkgKSAvIHRoaXMucmVzb2x1dGlvbjtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlcyBhIG5lYXQgd2F5IG9mIGNyYXdsaW5nIHRocm91Z2ggdGhlIHNjZW5lIGdyYXBoIGFuZCBydW5uaW5nIGEgc3BlY2lmaWVkIGZ1bmN0aW9uIG9uIGFsbCBpbnRlcmFjdGl2ZSBvYmplY3RzIGl0IGZpbmRzLlxuICogSXQgd2lsbCBhbHNvIHRha2UgY2FyZSBvZiBoaXQgdGVzdGluZyB0aGUgaW50ZXJhY3RpdmUgb2JqZWN0cyBhbmQgcGFzc2VzIHRoZSBoaXQgYWNyb3NzIGluIHRoZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCBpcyB0ZXN0ZWQgZm9yIGNvbGxpc2lvblxuICogQHBhcmFtICB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBkaXNwbGF5T2JqZWN0IHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgd2lsbCBiZSBoaXQgdGVzdCAocmVjdXJjc2l2bHkgY3Jhd2xzIGl0cyBjaGlsZHJlbilcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmdW5jIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggaW50ZXJhY3RpdmUgb2JqZWN0LiBUaGUgZGlzcGxheU9iamVjdCBhbmQgaGl0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvblxuICogQHBhcmFtICB7Ym9vbGVhbn0gaGl0VGVzdCB0aGlzIGluZGljYXRlcyBpZiB0aGUgb2JqZWN0cyBpbnNpZGUgc2hvdWxkIGJlIGhpdCB0ZXN0IGFnYWluc3QgdGhlIHBvaW50XG4gKiBAcmV0dXJuIHtib29sZWFufSByZXR1cm5zIHRydWUgaWYgdGhlIGRpc3BsYXlPYmplY3QgaGl0IHRoZSBwb2ludFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NJbnRlcmFjdGl2ZSA9IGZ1bmN0aW9uIChwb2ludCwgZGlzcGxheU9iamVjdCwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmUpXG57XG4gICAgaWYoIWRpc3BsYXlPYmplY3QgfHwgIWRpc3BsYXlPYmplY3QudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUb29rIGEgbGl0dGxlIHdoaWxlIHRvIHJld29yayB0aGlzIGZ1bmN0aW9uIGNvcnJlY3RseSEgQnV0IG5vdyBpdCBpcyBkb25lIGFuZCBuaWNlIGFuZCBvcHRpbWlzZWQuIF5fXlxuICAgIC8vIFxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBub3cgbG9vcCB0aHJvdWdoIGFsbCBvYmplY3RzIGFuZCB0aGVuIG9ubHkgaGl0IHRlc3QgdGhlIG9iamVjdHMgaXQgSEFTIHRvLCBub3QgYWxsIG9mIHRoZW0uIE1VQ0ggZmFzdGVyLi5cbiAgICAvLyBBbiBvYmplY3Qgd2lsbCBiZSBoaXQgdGVzdCBpZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gICAgLy8gXG4gICAgLy8gMTogSXQgaXMgaW50ZXJhY3RpdmUuXG4gICAgLy8gMjogSXQgYmVsb25ncyB0byBhIHBhcmVudCB0aGF0IGlzIGludGVyYWN0aXZlIEFORCBvbmUgb2YgdGhlIHBhcmVudHMgY2hpbGRyZW4gaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICAvLyBcbiAgICAvLyBBcyBhbm90aGVyIGxpdHRsZSBvcHRpbWlzYXRpb24gb25jZSBhbiBpbnRlcmFjdGl2ZSBvYmplY3QgaGFzIGJlZW4gaGl0IHdlIGNhbiBjYXJyeSBvbiB0aHJvdWdoIHRoZSBzY2VuZWdyYXBoLCBidXQgd2Uga25vdyB0aGF0IHRoZXJlIHdpbGwgYmUgbm8gbW9yZSBoaXRzISBTbyB3ZSBjYW4gYXZvaWQgZXh0cmEgaGl0IHRlc3RzXG4gICAgLy8gQSBmaW5hbCBvcHRpbWlzYXRpb24gaXMgdGhhdCBhbiBvYmplY3QgaXMgbm90IGhpdCB0ZXN0IGRpcmVjdGx5IGlmIGEgY2hpbGQgaGFzIGFscmVhZHkgYmVlbiBoaXQuXG4gICAgXG4gICAgdmFyIGhpdCA9IGZhbHNlLFxuICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGludGVyYWN0aXZlID0gZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSB8fCBpbnRlcmFjdGl2ZTtcblxuICAgIC8vIGlmIHRoZSBkaXNwbGF5b2JqZWN0IGhhcyBhIGhpdEFyZWEsIHRoZW4gaXQgZG9lcyBub3QgbmVlZCB0byBoaXRUZXN0IGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaGl0QXJlYSlcbiAgICB7XG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gKiogRlJFRSBUSVAgKiohIElmIGFuIG9iamVjdCBpcyBub3QgaW50ZXJhY3R0aXZlIG9yIGhhcyBubyBidXR0b25zIGluIGl0IChzdWNoIGFzIGEgZ2FtZSBzY2VuZSEpIHNldCBpbnRlcmFjdGl2ZUNoaWxkcmVuIHRvIGZhbHNlIGZvciB0aGF0IGRpc3BsYXlPYmplY3QuXG4gICAgLy8gVGhpcyB3aWxsIGFsbG93IHBpeGkgdG8gY29tcGxldGx5IGlnbm9yZSBhbmQgYnlwYXNzIGNoZWNraW5nIHRoZSBkaXNwbGF5T2JqZWN0cyBjaGlsZHJlbi5cbiAgICBpZihkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlQ2hpbGRyZW4pXG4gICAgeyAgICAgICBcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICAgICAgXG4gICAgICAgIGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRpbWUgdG8gZ2V0IHJlY3Vyc2l2ZS4uIGlmIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gaWYgc29tdGhpbmcgaXMgaGl0Li5cbiAgICAgICAgICAgIGlmKCB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZShwb2ludCwgY2hpbGRyZW5baV0sIGZ1bmMsIGhpdFRlc3QsIGludGVyYWN0aXZlUGFyZW50KSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIHdlIG5vIGxvbmdlciBuZWVkIHRvIGhpdCB0ZXN0IGFueSBtb3JlIG9iamVjdHMgaW4gdGhpcyBjb250YWluZXIgYXMgd2Ugd2Ugbm93IGtub3cgdGhlIHBhcmVudCBoYXMgYmVlbiBoaXRcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBpcyBpbnRlcmFjdGl2ZSAsIHRoYXQgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhpdCB3YXMgYWN0dWFsbHkgaW50ZXJhY3RpdmUgYW5kIG5vdCBqdXN0IHRoZSBjaGlsZCBvZiBhbiBpbnRlcmFjdGl2ZSBvYmplY3QuIFxuICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55dGhpbmcgZWxzZS4gV2Ugc3RpbGwgbmVlZCB0byBydW4gdGhyb3VnaCBhbGwgb2JqZWN0cywgYnV0IHdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhbnkgaGl0IHRlc3RzLlxuICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuW2ldLmludGVyYWN0aXZlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGl0VGVzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIG5vIHBvaW50IHJ1bm5pbmcgdGhpcyBpZiB0aGUgaXRlbSBpcyBub3QgaW50ZXJhY3RpdmUgb3IgZG9lcyBub3QgaGF2ZSBhbiBpbnRlcmFjdGl2ZSBwYXJlbnQuXG4gICAgaWYoaW50ZXJhY3RpdmUpXG4gICAge1xuICAgICAgICAvLyBpZiB3ZSBhcmUgaGl0IHRlc3RpbmcgKGFzIGluIHdlIGhhdmUgbm8gaGl0IGFueSBvYmplY3RzIHlldClcbiAgICAgICAgLy8gV2UgYWxzbyBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGhpdCB0ZXN0aW5nIGlmIG9uY2Ugb2YgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuIGhhcyBhbHJlYWR5IGJlZW4gaGl0IVxuICAgICAgICBpZihoaXRUZXN0ICYmICFoaXQpXG4gICAgICAgIHsgIFxuICAgICAgICAgICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGhpcy5fdGVtcFBvaW50KTtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmhpdEFyZWEuY29udGFpbnMoIHRoaXMuX3RlbXBQb2ludC54LCB0aGlzLl90ZW1wUG9pbnQueSApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZihkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gZGlzcGxheU9iamVjdC5jb250YWluc1BvaW50KHBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmMoZGlzcGxheU9iamVjdCwgaGl0KTsgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGl0O1xuICBcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgZG93biBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcHJlc3NlZCBkb3duXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VEb3duLCB0cnVlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBkb3duIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlRG93biA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB2YXIgZSA9IHRoaXMubW91c2Uub3JpZ2luYWxFdmVudDtcbiAgICBcbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG5cbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nIF0gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRkb3duJyA6ICdtb3VzZWRvd24nLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcmVsZWFzZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYnV0dG9uIGJlaW5nIHJlbGVhc2VkXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VVcCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlVXAsIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIHVwIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZVVwID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuXG4gICAgdmFyIGlzUmlnaHRCdXR0b24gPSBlLmJ1dHRvbiA9PT0gMiB8fCBlLndoaWNoID09PSAzO1xuICAgIHZhciBpc0Rvd24gPSAgaXNSaWdodEJ1dHRvbiA/ICdfaXNSaWdodERvd24nIDogJ19pc0xlZnREb3duJztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodHVwJyA6ICdtb3VzZXVwJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0Y2xpY2snIDogJ2NsaWNrJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXBvdXRzaWRlJyA6ICdtb3VzZXVwb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgdGhlIG1vdXNlIG1vdmluZ1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5kaWRNb3ZlID0gdHJ1ZTtcblxuICAgIHRoaXMuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VNb3ZlLCB0cnVlICk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgIT09IHRoaXMuY3Vyc29yKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gdGhpcy5jdXJzb3I7XG4gICAgfVxuXG4gICAgLy9UT0RPIEJVRyBmb3IgcGFyZW50cyBpbmVyYWN0aXZlIG9iamVjdCAoYm9yZGVyIG9yZGVyIGlzc3VlKVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlbW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQoZGlzcGxheU9iamVjdCwgaGl0KTtcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgaXMgbW92ZWQgb3V0IG9mIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJlaW5nIG1vdmVkIG91dFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlT3V0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgLy8gVE9ETyBvcHRpbWl6ZSBieSBub3QgY2hlY2sgRVZFUlkgVElNRSEgbWF5YmUgaGFsZiBhcyBvZnRlbj8gLy9cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkgKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIGZhbHNlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBvdmVyL291dCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VPdmVyT3V0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGlmKCFkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3ZlcicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlzcGxheU9iamVjdC5idXR0b25Nb2RlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnNvciA9IGRpc3BsYXlPYmplY3QuZGVmYXVsdEN1cnNvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZihkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIHRoaXMuZXZlbnREYXRhKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIHN0YXJ0ZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggc3RhcnRpbmcgb24gdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaFN0YXJ0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuICAgICAgICAvL1RPRE8gUE9PTFxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0LCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hTdGFydCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaHN0YXJ0JywgdGhpcy5ldmVudERhdGEgKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBlbmRzIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIGVuZGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICAvL1RPRE8gdGhpcyBzaG91bGQgYmUgcGFzc2VkIGFsb25nLi4gbm8gc2V0XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoRW5kLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIGVuZCBvZiBhIHRvdWNoIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaEVuZCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZCcsIHRoaXMuZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndGFwJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZG91dHNpZGUnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIG1vdmVkIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBtb3ZpbmcgYWNyb3NzIHRoZSByZW5kZXJlciB2aWV3XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIGEgdG91Y2ggbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGhpdCA9IGhpdDtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaG1vdmUnLCB0aGlzLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hFdmVudCB7RXZlbnREYXRhfSBUaGUgdG91Y2ggZXZlbnQgd2UgbmVlZCB0byBwYWlyIHdpdGggYW4gaW50ZXJhY3Rpb25EYXRhIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZ2V0VG91Y2hEYXRhID0gZnVuY3Rpb24gKHRvdWNoRXZlbnQpXG57XG4gICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wb3AoKTtcblxuICAgIGlmKCF0b3VjaERhdGEpXG4gICAge1xuICAgICAgICB0b3VjaERhdGEgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG4gICAgfVxuXG4gICAgdG91Y2hEYXRhLmlkZW50aWZpZXIgPSB0b3VjaEV2ZW50LmlkZW50aWZpZXI7XG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRvdWNoRGF0YS5nbG9iYWwsIHRvdWNoRXZlbnQuY2xpZW50WCwgdG91Y2hFdmVudC5jbGllbnRZICk7XG5cbiAgICBpZihuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YS5nbG9iYWwueCA9IHRvdWNoRGF0YS5nbG9iYWwueCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC55ID0gdG91Y2hEYXRhLmdsb2JhbC55IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIH1cblxuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWCA9IHRvdWNoRGF0YS5nbG9iYWwueDtcbiAgICB0b3VjaEV2ZW50Lmdsb2JhbFkgPSB0b3VjaERhdGEuZ2xvYmFsLnk7XG5cbiAgICByZXR1cm4gdG91Y2hEYXRhO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IHRvIHRoZSBpbnRlcm5hbCBwb29sXG4gKlxuICogQHBhcmFtIHRvdWNoRGF0YSB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9IFRoZSB0b3VjaCBkYXRhIG9iamVjdCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmV0dXJuVG91Y2hEYXRhID0gZnVuY3Rpb24gKCB0b3VjaERhdGEgKVxue1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wdXNoKCB0b3VjaERhdGEgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGludGVyYWN0aW9uIG1hbmFnZXJcbiAqXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLm1vdXNlID0gbnVsbDtcblxuICAgIHRoaXMuZXZlbnREYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IG51bGw7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VVcCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Nb3VzZURvd24gPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUgPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlT3V0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBudWxsO1xuXG5cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IG51bGw7XG5cbiAgICB0aGlzLm9uVG91Y2hFbmQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaE1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZW1wUG9pbnQgPSBudWxsO1xufTtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBpbnRlcmFjdGlvbnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEludGVyYWN0aW9uRGF0YTogICAgcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKSxcbiAgICBJbnRlcmFjdGlvbk1hbmFnZXI6IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25NYW5hZ2VyJyksXG4gICAgaW50ZXJhY3RpdmVUYXJnZXQ6ICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbn07XG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGludGVyYWN0aXZlIG9iamVjdHNcbiAqIHVzZWQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5pbnRlcmFjdGlvbi5pbnRlcmFjdGl2ZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgaW50ZXJhY3RpdmVUYXJnZXQgPSB7XG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBidXR0b25Nb2RlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlQ2hpbGRyZW46IHRydWUsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBkZWZhdWx0Q3Vyc29yOiAncG9pbnRlcicsXG5cbiAgICAvLyBzb21lIGludGVybmFsIGNoZWNrcy4uXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX292ZXI6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdG91Y2hEb3duOiBmYWxzZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnRlcmFjdGl2ZVRhcmdldDtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi4vZXh0cmFzJyksXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxuXG5mdW5jdGlvbiBwYXJzZShyZXNvdXJjZSwgdGV4dHVyZSkge1xuICAgIHZhciBkYXRhID0ge307XG4gICAgdmFyIGluZm8gPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF07XG4gICAgdmFyIGNvbW1vbiA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NvbW1vbicpWzBdO1xuXG4gICAgZGF0YS5mb250ID0gaW5mby5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKTtcbiAgICBkYXRhLnNpemUgPSBwYXJzZUludChpbmZvLmdldEF0dHJpYnV0ZSgnc2l6ZScpLCAxMCk7XG4gICAgZGF0YS5saW5lSGVpZ2h0ID0gcGFyc2VJbnQoY29tbW9uLmdldEF0dHJpYnV0ZSgnbGluZUhlaWdodCcpLCAxMCk7XG4gICAgZGF0YS5jaGFycyA9IHt9O1xuXG4gICAgLy9wYXJzZSBsZXR0ZXJzXG4gICAgdmFyIGxldHRlcnMgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjaGFyJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxldHRlcnMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaWQnKSwgMTApO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlUmVjdCA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4JyksIDEwKSArIHRleHR1cmUuZnJhbWUueCxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd5JyksIDEwKSArIHRleHR1cmUuZnJhbWUueSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd3aWR0aCcpLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaGVpZ2h0JyksIDEwKVxuICAgICAgICApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbY2hhckNvZGVdID0ge1xuICAgICAgICAgICAgeE9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeU9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3lvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeEFkdmFuY2U6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4YWR2YW5jZScpLCAxMCksXG4gICAgICAgICAgICBrZXJuaW5nOiB7fSxcbiAgICAgICAgICAgIHRleHR1cmU6IG5ldyBjb3JlLlRleHR1cmUodGV4dHVyZS5iYXNlVGV4dHVyZSwgdGV4dHVyZVJlY3QpXG5cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvL3BhcnNlIGtlcm5pbmdzXG4gICAgdmFyIGtlcm5pbmdzID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgna2VybmluZycpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBrZXJuaW5ncy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBmaXJzdCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnZmlyc3QnKSwgMTApO1xuICAgICAgICB2YXIgc2Vjb25kID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdzZWNvbmQnKSwgMTApO1xuICAgICAgICB2YXIgYW1vdW50ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdhbW91bnQnKSwgMTApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbc2Vjb25kXS5rZXJuaW5nW2ZpcnN0XSA9IGFtb3VudDtcbiAgICB9XG5cbiAgICByZXNvdXJjZS5iaXRtYXBGb250ID0gZGF0YTtcblxuICAgIC8vIEknbSBsZWF2aW5nIHRoaXMgYXMgYSB0ZW1wb3JhcnkgZml4IHNvIHdlIGNhbiB0ZXN0IHRoZSBiaXRtYXAgZm9udHMgaW4gdjNcbiAgICAvLyBidXQgaXQncyB2ZXJ5IGxpa2VseSB0byBjaGFuZ2VcbiAgICBleHRyYXMuQml0bWFwVGV4dC5mb250c1tkYXRhLmZvbnRdID0gZGF0YTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSBvciBub3QgeG1sIGRhdGFcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhIHx8ICFyZXNvdXJjZS5pc1htbClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNraXAgaWYgbm90IGJpdG1hcCBmb250IGRhdGEsIHVzaW5nIHNvbWUgc2lsbHkgZHVjay10eXBpbmdcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGFnZScpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdLmdldEF0dHJpYnV0ZSgnZmFjZScpID09PSBudWxsXG4gICAgICAgICAgICApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeG1sVXJsID0gcGF0aC5kaXJuYW1lKHJlc291cmNlLnVybCk7XG5cbiAgICAgICAgaWYgKHhtbFVybCA9PT0gJy4nKSB7XG4gICAgICAgICAgICB4bWxVcmwgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJhc2VVcmwgJiYgeG1sVXJsKSB7XG4gICAgICAgICAgICAvLyBpZiBiYXNldXJsIGhhcyBhIHRyYWlsaW5nIHNsYXNoIHRoZW4gYWRkIG9uZSB0byB4bWxVcmwgc28gdGhlIHJlcGxhY2Ugd29ya3MgYmVsb3dcbiAgICAgICAgICAgIGlmICh0aGlzLmJhc2VVcmwuY2hhckF0KHRoaXMuYmFzZVVybC5sZW5ndGggLSAxKSA9PT0gJy8nKSB7XG4gICAgICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcmVtb3ZlIGJhc2VVcmwgZnJvbSB4bWxVcmxcbiAgICAgICAgICAgIHhtbFVybCA9IHhtbFVybC5yZXBsYWNlKHRoaXMuYmFzZVVybCwgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4geG1sVXJsIG5vdywgaXQgbmVlZHMgYSB0cmFpbGluZyBzbGFzaC4gRW5zdXJlIHRoYXQgaXQgZG9lcyBpZiB0aGUgc3RyaW5nIGlzbid0IGVtcHR5LlxuICAgICAgICBpZiAoeG1sVXJsICYmIHhtbFVybC5jaGFyQXQoeG1sVXJsLmxlbmd0aCAtIDEpICE9PSAnLycpIHtcbiAgICAgICAgICAgIHhtbFVybCArPSAnLyc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRleHR1cmVVcmwgPSB4bWxVcmwgKyByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJylbMF0uZ2V0QXR0cmlidXRlKCdmaWxlJyk7XG4gICAgICAgIGlmIChjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSkge1xuICAgICAgICAgICAgLy9yZXVzZSBleGlzdGluZyB0ZXh0dXJlXG4gICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbdGV4dHVyZVVybF0pO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGxvYWRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiByZXNvdXJjZS5tZXRhZGF0YS5pbWFnZU1ldGFkYXRhXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gbG9hZCB0aGUgdGV4dHVyZSBmb3IgdGhlIGZvbnRcbiAgICAgICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgdGV4dHVyZVVybCwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgcmVzLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBsb2FkZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5sb2FkZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIExvYWRlcjogICAgICAgICAgICAgcmVxdWlyZSgnLi9sb2FkZXInKSxcblxuICAgIC8vIHBhcnNlcnNcbiAgICBiaXRtYXBGb250UGFyc2VyOiAgIHJlcXVpcmUoJy4vYml0bWFwRm9udFBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyOiAgcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIHRleHR1cmVQYXJzZXI6ICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlUGFyc2VyJyksXG4gICAgUmVzb3VyY2U6ICAgICAgICAgICByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZVxufTtcbiIsInZhciBSZXNvdXJjZUxvYWRlciA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLFxuICAgIHRleHR1cmVQYXJzZXIgPSByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBzcHJpdGVzaGVldFBhcnNlciA9IHJlcXVpcmUoJy4vc3ByaXRlc2hlZXRQYXJzZXInKSxcbiAgICBiaXRtYXBGb250UGFyc2VyID0gcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyk7XG5cbi8qKlxuICpcbiAqIFRoZSBuZXcgbG9hZGVyLCBleHRlbmRzIFJlc291cmNlIExvYWRlciBieSBDaGFkIEVuZ2xlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9lbmdsZXJjai9yZXNvdXJjZS1sb2FkZXJcbiAqXG4gKiBgYGBqc1xuICogdmFyIGxvYWRlciA9IFBJWEkubG9hZGVyOyAvLyBwaXhpIGV4cG9zZXMgYSBwcmVtYWRlIGluc3RhbmNlIGZvciB5b3UgdG8gdXNlLlxuICogLy9vclxuICogdmFyIGxvYWRlciA9IG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyKCk7IC8vIHlvdSBjYW4gYWxzbyBjcmVhdGUgeW91ciBvd24gaWYgeW91IHdhbnRcbiAqXG4gKiBsb2FkZXIuYWRkKCdidW5ueScsXCJkYXRhL2J1bm55LnBuZ1wiKTtcbiAqXG4gKiBsb2FkZXIub25jZSgnY29tcGxldGUnLG9uQXNzZXRzTG9hZGVkKTtcbiAqXG4gKiBsb2FkZXIubG9hZCgpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlJlc291cmNlTG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5sb2FkZXJzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KVxue1xuICAgIFJlc291cmNlTG9hZGVyLmNhbGwodGhpcywgYmFzZVVybCwgY29uY3VycmVuY3kpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMudXNlKExvYWRlci5fcGl4aU1pZGRsZXdhcmVbaV0oKSk7XG4gICAgfVxufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZXNvdXJjZUxvYWRlci5wcm90b3R5cGUpO1xuTG9hZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbkxvYWRlci5fcGl4aU1pZGRsZXdhcmUgPSBbXG4gICAgLy8gcGFyc2UgYW55IGJsb2IgaW50byBtb3JlIHVzYWJsZSBvYmplY3RzIChlLmcuIEltYWdlKVxuICAgIFJlc291cmNlTG9hZGVyLm1pZGRsZXdhcmUucGFyc2luZy5ibG9iLFxuICAgIC8vIHBhcnNlIGFueSBJbWFnZSBvYmplY3RzIGludG8gdGV4dHVyZXNcbiAgICB0ZXh0dXJlUGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBzcHJpdGVzaGVldFBhcnNlcixcbiAgICAvLyBwYXJzZSBhbnkgc3ByaXRlc2hlZXQgZGF0YSBpbnRvIG11bHRpcGxlIHRleHR1cmVzXG4gICAgYml0bWFwRm9udFBhcnNlclxuXTtcblxuTG9hZGVyLmFkZFBpeGlNaWRkbGV3YXJlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgTG9hZGVyLl9waXhpTWlkZGxld2FyZS5wdXNoKGZuKTtcbn07XG5cbi8vIEFkZCBjdXN0b20gZXh0ZW50aW9uc1xudmFyIFJlc291cmNlID0gUmVzb3VyY2VMb2FkZXIuUmVzb3VyY2U7XG5cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUoJ2ZudCcsIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIHBhdGggPSByZXF1aXJlKCdwYXRoJyksXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBza2lwIGlmIG5vIGRhdGEsIGl0cyBub3QganNvbiwgb3IgaXQgaXNuJ3Qgc3ByaXRlc2hlZXQgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzSnNvbiB8fCAhcmVzb3VyY2UuZGF0YS5mcmFtZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzb3VyY2UuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcm91dGUgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJykpO1xuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwoIHJlc291cmNlLnVybCApO1xuXG4gICAgICAgIC8vIGxvYWQgdGhlIGltYWdlIGZvciB0aGlzIHNoZWV0XG4gICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgcm91dGUgKyAnLycgKyByZXNvdXJjZS5kYXRhLm1ldGEuaW1hZ2UsIGxvYWRPcHRpb25zLCBmdW5jdGlvbiAocmVzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlcyA9IHt9O1xuXG4gICAgICAgICAgICB2YXIgZnJhbWVzID0gcmVzb3VyY2UuZGF0YS5mcmFtZXM7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gZnJhbWVzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gZnJhbWVzW2ldLmZyYW1lO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlY3QpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0cmltID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QuaCwgcmVjdC53KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QudywgcmVjdC5oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vICBDaGVjayB0byBzZWUgaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0udHJpbW1lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpbSA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS54IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS55IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS53IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS5oIC8gcmVzb2x1dGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBmbGlwIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IVxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gc2l6ZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggPSBzaXplLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0ID0gdGVtcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNpemUueCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLnkgLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLmhlaWdodCAvPSByZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzW2ldID0gbmV3IGNvcmUuVGV4dHVyZShyZXMudGV4dHVyZS5iYXNlVGV4dHVyZSwgc2l6ZSwgc2l6ZS5jbG9uZSgpLCB0cmltLCBmcmFtZXNbaV0ucm90YXRlZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0cyBhbHNvIGFkZCB0aGUgZnJhbWUgdG8gcGl4aSdzIGdsb2JhbCBjYWNoZSBmb3IgZnJvbUZyYW1lIGFuZCBmcm9tSW1hZ2UgZnVuY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW2ldID0gcmVzb3VyY2UudGV4dHVyZXNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH0pO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gY3JlYXRlIGEgbmV3IHRleHR1cmUgaWYgdGhlIGRhdGEgaXMgYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgIGlmIChyZXNvdXJjZS5kYXRhICYmIHJlc291cmNlLmlzSW1hZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBiYXNlVGV4dHVyZSA9IG5ldyBjb3JlLkJhc2VUZXh0dXJlKHJlc291cmNlLmRhdGEsIG51bGwsIGNvcmUudXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKHJlc291cmNlLnVybCkpO1xuICAgICAgICAgICAgYmFzZVRleHR1cmUuaW1hZ2VVcmwgPSByZXNvdXJjZS51cmw7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlID0gbmV3IGNvcmUuVGV4dHVyZShiYXNlVGV4dHVyZSk7XG4gICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdWNudGlvbnNcbiAgICAgICAgICAgIGNvcmUudXRpbHMuQmFzZVRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gYmFzZVRleHR1cmU7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gcmVzb3VyY2UudGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgdGVtcFBvbHlnb24gPSBuZXcgY29yZS5Qb2x5Z29uKCk7XG5cbi8qKlxuICogQmFzZSBtZXNoIGNsYXNzXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0byB1c2VcbiAqIEBwYXJhbSBbdmVydGljZXNdIHtGbG9hdDMyQXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHZlcnRpY2VzXG4gKiBAcGFyYW0gW3V2c10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdXZzXG4gKiBAcGFyYW0gW2luZGljZXNdIHtVaW50MTZBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgaW5kaWNlc1xuICogQHBhcmFtIFtkcmF3TW9kZV0ge251bWJlcn0gdGhlIGRyYXdNb2RlLCBjYW4gYmUgYW55IG9mIHRoZSBNZXNoLkRSQVdfTU9ERVMgY29uc3RzXG4gKi9cbmZ1bmN0aW9uIE1lc2godGV4dHVyZSwgdmVydGljZXMsIHV2cywgaW5kaWNlcywgZHJhd01vZGUpXG57XG4gICAgY29yZS5Db250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIG9mIHRoZSBNZXNoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBVdnMgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IHV2cyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxLCAwLFxuICAgICAgICAxLCAxLFxuICAgICAgICAwLCAxXSk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB2ZXJ0aWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSB2ZXJ0aWNlcyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxMDAsIDAsXG4gICAgICAgIDEwMCwgMTAwLFxuICAgICAgICAwLCAxMDBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgLy8gIFRPRE8gYXV0byBnZW5lcmF0ZSB0aGlzIGJhc2VkIG9uIGRyYXcgbW9kZSFcbiAgICB0aGlzLmluZGljZXMgPSBpbmRpY2VzIHx8IG5ldyBVaW50MTZBcnJheShbMCwgMSwgMywgMl0pO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgTWVzaCBpcyBkaXJ0eSBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzcHJpdGUuIFNldCB0byBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlbW92ZSBhbnkgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUcmlhbmdsZXMgaW4gY2FudmFzIG1vZGUgYXJlIGF1dG9tYXRpY2FsbHkgYW50aWFsaWFzZWQsIHVzZSB0aGlzIHZhbHVlIHRvIGZvcmNlIHRyaWFuZ2xlcyB0byBvdmVybGFwIGEgYml0IHdpdGggZWFjaCBvdGhlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdheSB0aGUgTWVzaCBzaG91bGQgYmUgZHJhd24sIGNhbiBiZSBhbnkgb2YgdGhlIHtAbGluayBQSVhJLm1lc2guTWVzaC5EUkFXX01PREVTfSBjb25zdHNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAc2VlIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmRyYXdNb2RlID0gZHJhd01vZGUgfHwgTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0g7XG5cbiAgICAvLyBydW4gdGV4dHVyZSBzZXR0ZXI7XG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcblxuICAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgbWVzaCBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1lc2gucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuTWVzaC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNZXNoLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLm1lc2guTWVzaCNcbiAgICAgKi9cbiAgICB0ZXh0dXJlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl90ZXh0dXJlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBXZWJHTCByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMubWVzaCk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5tZXNoLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEsIHRyYW5zZm9ybS5iLCB0cmFuc2Zvcm0uYywgdHJhbnNmb3JtLmQsIHRyYW5zZm9ybS50eCB8IDAsIHRyYW5zZm9ybS50eSB8IDApO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4LCB0cmFuc2Zvcm0udHkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc1RyaWFuZ2xlTWVzaChjb250ZXh0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzKGNvbnRleHQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiBUcmlhbmdsZSBNZXNoIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aCAvIDI7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGggLSAyOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4LCAoaW5kZXggKyAyKSwgKGluZGV4ICsgNCkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiB0cmlhbmdsZSBtb2RlIHVzaW5nIGNhbnZhc1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc1RyaWFuZ2xlcyA9IGZ1bmN0aW9uIChjb250ZXh0KVxue1xuICAgIC8vIGRyYXcgdHJpYW5nbGVzISFcbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcblxuICAgIHZhciBsZW5ndGggPSBpbmRpY2VzLmxlbmd0aDtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAzKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4MCA9IGluZGljZXNbaV0gKiAyLCBpbmRleDEgPSBpbmRpY2VzW2kgKyAxXSAqIDIsIGluZGV4MiA9IGluZGljZXNbaSArIDJdICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3Mgb25lIG9mIHRoZSB0cmlhbmdsZXMgdGhhdCBmb3JtIHRoaXMgTWVzaFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHBhcmFtIHZlcnRpY2VzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgTWVzaFxuICogQHBhcmFtIHV2cyB7RmxvYXQzMkFycmF5fSBhIHJlZmVyZW5jZSB0byB0aGUgdXZzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gaW5kZXgwIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgxIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgc2Vjb25kIHZlcnRleFxuICogQHBhcmFtIGluZGV4MiB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIHRoaXJkIHZlcnRleFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZSA9IGZ1bmN0aW9uIChjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleDAsIGluZGV4MSwgaW5kZXgyKVxue1xuICAgIHZhciB0ZXh0dXJlU291cmNlID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2U7XG4gICAgdmFyIHRleHR1cmVXaWR0aCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdmFyIHRleHR1cmVIZWlnaHQgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHZhciB4MCA9IHZlcnRpY2VzW2luZGV4MF0sIHgxID0gdmVydGljZXNbaW5kZXgxXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleDJdO1xuICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4MCArIDFdLCB5MSA9IHZlcnRpY2VzW2luZGV4MSArIDFdLCB5MiA9IHZlcnRpY2VzW2luZGV4MiArIDFdO1xuXG4gICAgdmFyIHUwID0gdXZzW2luZGV4MF0gKiB0ZXh0dXJlV2lkdGgsIHUxID0gdXZzW2luZGV4MV0gKiB0ZXh0dXJlV2lkdGgsIHUyID0gdXZzW2luZGV4Ml0gKiB0ZXh0dXJlV2lkdGg7XG4gICAgdmFyIHYwID0gdXZzW2luZGV4MCArIDFdICogdGV4dHVyZUhlaWdodCwgdjEgPSB1dnNbaW5kZXgxICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MiA9IHV2c1tpbmRleDIgKyAxXSAqIHRleHR1cmVIZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5jYW52YXNQYWRkaW5nID4gMClcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nWCA9IHRoaXMuY2FudmFzUGFkZGluZyAvIHRoaXMud29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIHBhZGRpbmdZID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgY2VudGVyWCA9ICh4MCArIHgxICsgeDIpIC8gMztcbiAgICAgICAgdmFyIGNlbnRlclkgPSAoeTAgKyB5MSArIHkyKSAvIDM7XG5cbiAgICAgICAgdmFyIG5vcm1YID0geDAgLSBjZW50ZXJYO1xuICAgICAgICB2YXIgbm9ybVkgPSB5MCAtIGNlbnRlclk7XG5cbiAgICAgICAgdmFyIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MCA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MCA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIC8vXG5cbiAgICAgICAgbm9ybVggPSB4MSAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTEgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MSA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MSA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIG5vcm1YID0geDIgLSBjZW50ZXJYO1xuICAgICAgICBub3JtWSA9IHkyIC0gY2VudGVyWTtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDIgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTIgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LnNhdmUoKTtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG5cbiAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcblxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICBjb250ZXh0LmNsaXAoKTtcblxuICAgIC8vIENvbXB1dGUgbWF0cml4IHRyYW5zZm9ybVxuICAgIHZhciBkZWx0YSA9ICAodTAgKiB2MSkgICAgICArICh2MCAqIHUyKSAgICAgICsgKHUxICogdjIpICAgICAgLSAodjEgKiB1MikgICAgICAtICh2MCAqIHUxKSAgICAgIC0gKHUwICogdjIpO1xuICAgIHZhciBkZWx0YUEgPSAoeDAgKiB2MSkgICAgICArICh2MCAqIHgyKSAgICAgICsgKHgxICogdjIpICAgICAgLSAodjEgKiB4MikgICAgICAtICh2MCAqIHgxKSAgICAgIC0gKHgwICogdjIpO1xuICAgIHZhciBkZWx0YUIgPSAodTAgKiB4MSkgICAgICArICh4MCAqIHUyKSAgICAgICsgKHUxICogeDIpICAgICAgLSAoeDEgKiB1MikgICAgICAtICh4MCAqIHUxKSAgICAgIC0gKHUwICogeDIpO1xuICAgIHZhciBkZWx0YUMgPSAodTAgKiB2MSAqIHgyKSArICh2MCAqIHgxICogdTIpICsgKHgwICogdTEgKiB2MikgLSAoeDAgKiB2MSAqIHUyKSAtICh2MCAqIHUxICogeDIpIC0gKHUwICogeDEgKiB2Mik7XG4gICAgdmFyIGRlbHRhRCA9ICh5MCAqIHYxKSAgICAgICsgKHYwICogeTIpICAgICAgKyAoeTEgKiB2MikgICAgICAtICh2MSAqIHkyKSAgICAgIC0gKHYwICogeTEpICAgICAgLSAoeTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhRSA9ICh1MCAqIHkxKSAgICAgICsgKHkwICogdTIpICAgICAgKyAodTEgKiB5MikgICAgICAtICh5MSAqIHUyKSAgICAgIC0gKHkwICogdTEpICAgICAgLSAodTAgKiB5Mik7XG4gICAgdmFyIGRlbHRhRiA9ICh1MCAqIHYxICogeTIpICsgKHYwICogeTEgKiB1MikgKyAoeTAgKiB1MSAqIHYyKSAtICh5MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB5MikgLSAodTAgKiB5MSAqIHYyKTtcblxuICAgIGNvbnRleHQudHJhbnNmb3JtKGRlbHRhQSAvIGRlbHRhLCBkZWx0YUQgLyBkZWx0YSxcbiAgICAgICAgZGVsdGFCIC8gZGVsdGEsIGRlbHRhRSAvIGRlbHRhLFxuICAgICAgICBkZWx0YUMgLyBkZWx0YSwgZGVsdGFGIC8gZGVsdGEpO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UodGV4dHVyZVNvdXJjZSwgMCwgMCk7XG4gICAgY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5cblxuLyoqXG4gKiBSZW5kZXJzIGEgZmxhdCBNZXNoXG4gKlxuICogQHBhcmFtIE1lc2gge1BJWEkubWVzaC5NZXNofSBUaGUgTWVzaCB0byByZW5kZXJcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLnJlbmRlck1lc2hGbGF0ID0gZnVuY3Rpb24gKE1lc2gpXG57XG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgdmFyIHZlcnRpY2VzID0gTWVzaC52ZXJ0aWNlcztcblxuICAgIHZhciBsZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGgvMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgIGZvciAodmFyIGk9MTsgaSA8IGxlbmd0aC0yOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpKjI7XG5cbiAgICAgICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXhdLCAgIHgxID0gdmVydGljZXNbaW5kZXgrMl0sIHgyID0gdmVydGljZXNbaW5kZXgrNF07XG4gICAgICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4KzFdLCB5MSA9IHZlcnRpY2VzW2luZGV4KzNdLCB5MiA9IHZlcnRpY2VzW2luZGV4KzVdO1xuXG4gICAgICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgyLCB5Mik7XG4gICAgfVxuXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnI0ZGMDAwMCc7XG4gICAgY29udGV4dC5maWxsKCk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbn07XG5cbi8qKlxuICogV2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLCB0aGlzIGV2ZW50IHdpbGwgZmlyZSB0byB1cGRhdGUgdGhlIHNjYWxlIGFuZCBmcmFtZVxuICpcbiAqIEBwYXJhbSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51cGRhdGVGcmFtZSA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgbWVzaCBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAoIXRoaXMuX2N1cnJlbnRCb3VuZHMpIHtcbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gbWF0cml4IHx8IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICAgICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSB2ZXJ0aWNlcy5sZW5ndGg7IGkgPCBuOyBpICs9IDIpIHtcbiAgICAgICAgICAgIHZhciByYXdYID0gdmVydGljZXNbaV0sIHJhd1kgPSB2ZXJ0aWNlc1tpICsgMV07XG4gICAgICAgICAgICB2YXIgeCA9IChhICogcmF3WCkgKyAoYyAqIHJhd1kpICsgdHg7XG4gICAgICAgICAgICB2YXIgeSA9IChkICogcmF3WSkgKyAoYiAqIHJhd1gpICsgdHk7XG5cbiAgICAgICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG5cbiAgICAgICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuICAgICAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWluWCA9PT0gLUluZmluaXR5IHx8IG1heFkgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBtZXNoLiBXb3JrcyBvbmx5IGZvciBUUklBTkdMRV9NRVNIXG4gKlxuICogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuICovXG5NZXNoLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50ICkge1xuICAgIGlmICghdGhpcy5nZXRCb3VuZHMoKS5jb250YWlucyhwb2ludC54LCBwb2ludC55KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHBvaW50cyA9IHRlbXBQb2x5Z29uLnBvaW50cztcbiAgICB2YXIgaSwgbGVuO1xuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVMpIHtcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgICAgIGxlbiA9IHRoaXMuaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgIC8vVE9ETzogaW5saW5lIHRoaXMuXG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTMpIHtcbiAgICAgICAgICAgIHZhciBpbmQwID0gaW5kaWNlc1tpXSoyLCBpbmQxID0gaW5kaWNlc1tpKzFdKjIsIGluZDIgPSBpbmRpY2VzW2krMl0qMjtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2luZDBdO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaW5kMCsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2luZDFdO1xuICAgICAgICAgICAgcG9pbnRzWzNdID0gdmVydGljZXNbaW5kMSsxXTtcbiAgICAgICAgICAgIHBvaW50c1s0XSA9IHZlcnRpY2VzW2luZDJdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaW5kMisxXTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBsZW4gPSB2ZXJ0aWNlcy5sZW5ndGg7XG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTYpIHtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2ldO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaSsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2krMl07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpKzNdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaSs0XTtcbiAgICAgICAgICAgIHBvaW50c1s1XSA9IHZlcnRpY2VzW2krNV07XG4gICAgICAgICAgICBpZiAodGVtcFBvbHlnb24uY29udGFpbnModGVtcFBvaW50LngsIHRlbXBQb2ludC55KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGlmZmVyZW50IGRyYXdpbmcgYnVmZmVyIG1vZGVzIHN1cHBvcnRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX01FU0hcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFU1xuICovXG5NZXNoLkRSQVdfTU9ERVMgPSB7XG4gICAgVFJJQU5HTEVfTUVTSDogMCxcbiAgICBUUklBTkdMRVM6IDFcbn07XG4iLCJ2YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xuXG4vKipcbiAqIFRoZSBQbGFuZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciBQbGFuZSA9IG5ldyBQSVhJLlBsYW5lKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIFBsYW5lLlxuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWCAtIFRoZSBudW1iZXIgb3ggeCBzZWdtZW50c1xuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWSAtIFRoZSBudW1iZXIgb2YgeSBzZWdtZW50c1xuICpcbiAqL1xuZnVuY3Rpb24gUGxhbmUodGV4dHVyZSwgc2VnbWVudHNYLCBzZWdtZW50c1kpXG57XG4gICAgTWVzaC5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tlciBmb3IgaWYgdGhlIFBsYW5lIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuc2VnbWVudHNYID0gIHNlZ21lbnRzWCB8fCAxMDtcbiAgICB0aGlzLnNlZ21lbnRzWSA9IHNlZ21lbnRzWSB8fCAxMDtcblxuICAgIHRoaXMuZHJhd01vZGUgPSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVTO1xuICAgIHRoaXMucmVmcmVzaCgpO1xuXG59XG5cblxuLy8gY29uc3RydWN0b3JcblBsYW5lLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIE1lc2gucHJvdG90eXBlICk7XG5QbGFuZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQbGFuZTtcbm1vZHVsZS5leHBvcnRzID0gUGxhbmU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5QbGFuZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgdG90YWwgPSB0aGlzLnNlZ21lbnRzWCAqIHRoaXMuc2VnbWVudHNZO1xuICAgIHZhciB2ZXJ0cyA9IFtdO1xuICAgIHZhciBjb2xvcnMgPSBbXTtcbiAgICB2YXIgdXZzID0gW107XG4gICAgdmFyIGluZGljZXMgPSBbXTtcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMudGV4dHVyZTtcblxuICAvLyAgdGV4dHVyZS53aWR0aCA9IDgwMCB0ZXh0dXJlLndpZHRoIHx8IDgwMDtcbiAvLyAgIHRleHR1cmUuaGVpZ2h0ID0gODAwLy90ZXh0dXJlLmhlaWdodCB8fCA4MDA7XG5cbiAgICB2YXIgc2VnbWVudHNYU3ViID0gdGhpcy5zZWdtZW50c1ggLSAxO1xuICAgIHZhciBzZWdtZW50c1lTdWIgPSB0aGlzLnNlZ21lbnRzWSAtIDE7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgdmFyIHNpemVYID0gdGV4dHVyZS53aWR0aCAvIHNlZ21lbnRzWFN1YjtcbiAgICB2YXIgc2l6ZVkgPSB0ZXh0dXJlLmhlaWdodCAvIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbDsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHggPSAoaSAlIHRoaXMuc2VnbWVudHNYKTtcbiAgICAgICAgdmFyIHkgPSAoIChpIC8gdGhpcy5zZWdtZW50c1ggKSB8IDAgKTtcblxuXG4gICAgICAgIHZlcnRzLnB1c2goKHggKiBzaXplWCksXG4gICAgICAgICAgICAgICAgICAgKHkgKiBzaXplWSkpO1xuXG4gICAgICAgIC8vIHRoaXMgd29ya3MgZm9yIHJlY3Rhbmd1bGFyIHRleHR1cmVzLiBcbiAgICAgICAgdXZzLnB1c2godGV4dHVyZS5fdXZzLngwICsgKHRleHR1cmUuX3V2cy54MSAtIHRleHR1cmUuX3V2cy54MCkgKiAoeCAvICh0aGlzLnNlZ21lbnRzWC0xKSksIHRleHR1cmUuX3V2cy55MCArICh0ZXh0dXJlLl91dnMueTMtdGV4dHVyZS5fdXZzLnkwKSAqICh5LyAodGhpcy5zZWdtZW50c1ktMSkpKTtcbiAgICAgIH1cblxuICAgIC8vICBjb25zXG5cbiAgICB2YXIgdG90YWxTdWIgPSBzZWdtZW50c1hTdWIgKiBzZWdtZW50c1lTdWI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTdWI7IGkrKykge1xuXG4gICAgICAgIHZhciB4cG9zID0gaSAlIHNlZ21lbnRzWFN1YjtcbiAgICAgICAgdmFyIHlwb3MgPSAoaSAvIHNlZ21lbnRzWFN1YiApIHwgMDtcblxuXG4gICAgICAgIHZhciAgdmFsdWUgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWUyID0gKHlwb3MgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zICsgMTtcbiAgICAgICAgdmFyICB2YWx1ZTMgPSAoKHlwb3MrMSkgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zO1xuICAgICAgICB2YXIgIHZhbHVlNCA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuXG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZSwgdmFsdWUyLCB2YWx1ZTMpO1xuICAgICAgICBpbmRpY2VzLnB1c2godmFsdWUyLCB2YWx1ZTQsIHZhbHVlMyk7XG4gICAgfVxuXG5cbiAgICAvL2NvbnNvbGUubG9nKGluZGljZXMpXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkodmVydHMpO1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheSh1dnMpO1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShjb2xvcnMpO1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShpbmRpY2VzKTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGV4dHVyZSBVVnMgd2hlbiBuZXcgdGV4dHVyZSBpcyBzZXRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QbGFuZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFBsYW5lIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBUaGUgcm9wZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciByb3BlID0gbmV3IFBJWEkuUm9wZShQSVhJLlRleHR1cmUuZnJvbUltYWdlKFwic25ha2UucG5nXCIpLCBwb2ludHMpO1xuICogIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5tZXNoLk1lc2hcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB7UElYSS5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIHRleHR1cmUgdG8gdXNlIG9uIHRoZSByb3BlLlxuICogQHBhcmFtIHtQSVhJLlBvaW50W119IHBvaW50cyAtIEFuIGFycmF5IG9mIHtAbGluayBQSVhJLlBvaW50fSBvYmplY3RzIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gKlxuICovXG5mdW5jdGlvbiBSb3BlKHRleHR1cmUsIHBvaW50cylcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnRbXX0gQW4gYXJyYXkgb2YgcG9pbnRzIHRoYXQgZGV0ZXJtaW5lIHRoZSByb3BlXG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgb2YgdmVydGljZXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhpcyByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBUaGUgV2ViR0wgVXZzIG9mIHRoZSByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogNCk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgY29sb3IgY29tcG9uZW50c1xuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgcm9wZSBpcyByZWFkeSB0byBiZSBkcmF3bi4gTmVlZGVkIGJlY2F1c2UgTWVzaCBjdG9yIGNhblxuICAgICAqIGNhbGwgX29uVGV4dHVyZVVwZGF0ZWQgd2hpY2ggY291bGQgY2FsbCByZWZyZXNoIHRvbyBlYXJseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgIHRoaXMucmVmcmVzaCgpO1xufVxuXG5cbi8vIGNvbnN0cnVjdG9yXG5Sb3BlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTWVzaC5wcm90b3R5cGUpO1xuUm9wZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3BlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3BlO1xuXG4vKipcbiAqIFJlZnJlc2hlc1xuICpcbiAqL1xuUm9wZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgLy8gaWYgdG9vIGxpdHRsZSBwb2ludHMsIG9yIHRleHR1cmUgaGFzbid0IGdvdCBVVnMgc2V0IHlldCBqdXN0IG1vdmUgb24uXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxIHx8ICF0aGlzLl90ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuXG4gICAgdmFyIHRleHR1cmVVdnMgPSB0aGlzLl90ZXh0dXJlLl91dnM7XG4gICAgdmFyIG9mZnNldCA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDAsIHRleHR1cmVVdnMueTApO1xuICAgIHZhciBmYWN0b3IgPSBuZXcgY29yZS5Qb2ludCh0ZXh0dXJlVXZzLngyIC0gdGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MiAtIHRleHR1cmVVdnMueTApO1xuXG4gICAgdXZzWzBdID0gMCArIG9mZnNldC54O1xuICAgIHV2c1sxXSA9IDAgKyBvZmZzZXQueTtcbiAgICB1dnNbMl0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICBjb2xvcnNbMF0gPSAxO1xuICAgIGNvbG9yc1sxXSA9IDE7XG5cbiAgICBpbmRpY2VzWzBdID0gMDtcbiAgICBpbmRpY2VzWzFdID0gMTtcblxuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgYW1vdW50O1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG4gICAgICAgIC8vIHRpbWUgdG8gZG8gc29tZSBzbWFydCBkcmF3aW5nIVxuICAgICAgICBhbW91bnQgPSBpIC8gKHRvdGFsLTEpO1xuXG4gICAgICAgIHV2c1tpbmRleF0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrMV0gPSAwICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgdXZzW2luZGV4KzJdID0gYW1vdW50ICogZmFjdG9yLnggKyBvZmZzZXQueDtcbiAgICAgICAgdXZzW2luZGV4KzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgY29sb3JzW2luZGV4XSA9IDE7XG4gICAgICAgIGNvbG9yc1tpbmRleCsxXSA9IDE7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgaW5kaWNlc1tpbmRleF0gPSBpbmRleDtcbiAgICAgICAgaW5kaWNlc1tpbmRleCArIDFdID0gaW5kZXggKyAxO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIE1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUuY2FsbCh0aGlzKTtcblxuICAgIC8vIHdhaXQgZm9yIHRoZSBSb3BlIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Sb3BlLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbGFzdFBvaW50ID0gcG9pbnRzWzBdO1xuICAgIHZhciBuZXh0UG9pbnQ7XG4gICAgdmFyIHBlcnBYID0gMDtcbiAgICB2YXIgcGVycFkgPSAwO1xuXG4gICAgLy8gdGhpcy5jb3VudCAtPSAwLjI7XG5cbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgcmF0aW8sIHBlcnBMZW5ndGgsIG51bTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWw7IGkrKylcbiAgICB7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBpbmRleCA9IGkgKiA0O1xuXG4gICAgICAgIGlmIChpIDwgcG9pbnRzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0UG9pbnQgPSBwb2ludHNbaSsxXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcGVycFkgPSAtKG5leHRQb2ludC54IC0gbGFzdFBvaW50LngpO1xuICAgICAgICBwZXJwWCA9IG5leHRQb2ludC55IC0gbGFzdFBvaW50Lnk7XG5cbiAgICAgICAgcmF0aW8gPSAoMSAtIChpIC8gKHRvdGFsLTEpKSkgKiAxMDtcblxuICAgICAgICBpZiAocmF0aW8gPiAxKVxuICAgICAgICB7XG4gICAgICAgICAgICByYXRpbyA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwTGVuZ3RoID0gTWF0aC5zcXJ0KHBlcnBYICogcGVycFggKyBwZXJwWSAqIHBlcnBZKTtcbiAgICAgICAgbnVtID0gdGhpcy5fdGV4dHVyZS5oZWlnaHQgLyAyOyAvLygyMCArIE1hdGguYWJzKE1hdGguc2luKChpICsgdGhpcy5jb3VudCkgKiAwLjMpICogNTApICkqIHJhdGlvO1xuICAgICAgICBwZXJwWCAvPSBwZXJwTGVuZ3RoO1xuICAgICAgICBwZXJwWSAvPSBwZXJwTGVuZ3RoO1xuXG4gICAgICAgIHBlcnBYICo9IG51bTtcbiAgICAgICAgcGVycFkgKj0gbnVtO1xuXG4gICAgICAgIHZlcnRpY2VzW2luZGV4XSA9IHBvaW50LnggKyBwZXJwWDtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMV0gPSBwb2ludC55ICsgcGVycFk7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzJdID0gcG9pbnQueCAtIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCszXSA9IHBvaW50LnkgLSBwZXJwWTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBwb2ludDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkubWVzaFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNZXNoOiAgICAgICAgICAgcmVxdWlyZSgnLi9NZXNoJyksXG4gICAgUGxhbmU6ICAgICAgICAgICByZXF1aXJlKCcuL1BsYW5lJyksXG4gICAgUm9wZTogICAgICAgICAgIHJlcXVpcmUoJy4vUm9wZScpLFxuICAgIE1lc2hSZW5kZXJlcjogICByZXF1aXJlKCcuL3dlYmdsL01lc2hSZW5kZXJlcicpLFxuICAgIE1lc2hTaGFkZXI6ICAgICByZXF1aXJlKCcuL3dlYmdsL01lc2hTaGFkZXInKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIE1lc2ggPSByZXF1aXJlKCcuLi9NZXNoJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgTWVzaFJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9NZXNoUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgY29yZS5PYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIFxuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSgxNTAwMCk7XG5cbiAgICAvL1RPRE8gdGhpcyBjb3VsZCBiZSBhIHNpbmdsZSBidWZmZXIgc2hhcmVkIGFtb25nc3QgYWxsIHJlbmRlcmVycyBhcyB3ZSByZXVzZSB0aGlzIHNldCB1cCBpbiBtb3N0IHJlbmRlcmVyc1xuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgMTUwMDA7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufVxuXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoUmVuZGVyZXI7XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignbWVzaCcsIE1lc2hSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIG1lc2gge1BJWEkubWVzaC5NZXNofSB0aGUgbWVzaCB0byByZW5kZXJcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICBpZighbWVzaC5fdmVydGV4QnVmZmVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5faW5pdFdlYkdMKG1lc2gpO1xuICAgIH1cblxuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXIsXG4gICAgICAgIGdsID0gcmVuZGVyZXIuZ2wsXG4gICAgICAgIHRleHR1cmUgPSBtZXNoLl90ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBzaGFkZXIgPSBtZXNoLnNoYWRlcjsvLyB8fCByZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnBsdWdpbnMubWVzaFNoYWRlcjtcblxuICAgIHZhciBkcmF3TW9kZSA9IG1lc2guZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIID8gZ2wuVFJJQU5HTEVfU1RSSVAgOiBnbC5UUklBTkdMRVM7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShtZXNoLmJsZW5kTW9kZSk7XG5cbiAgICAvL1RPRE8gY2FjaGUgY3VzdG9tIHN0YXRlLi5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzaGFkZXIgPSBzaGFkZXIuc2hhZGVyc1tnbC5pZF0gfHwgc2hhZGVyLmdldFNoYWRlcihyZW5kZXJlcik7Ly8gOiBzaGFkZXI7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4LnZhbHVlID0gbWVzaC53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gbWVzaC53b3JsZEFscGhhO1xuXG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuXG4gICAgaWYgKCFtZXNoLmRpcnR5KVxuICAgIHtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIG1lc2gudmVydGljZXMpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIHV2c1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cblxuICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCAwLCBtZXNoLmluZGljZXMpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIG1lc2guZGlydHkgPSBmYWxzZTtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZG9udCBuZWVkIHRvIHVwbG9hZCFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIH1cblxuICAgIGdsLmRyYXdFbGVtZW50cyhkcmF3TW9kZSwgbWVzaC5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuXG59O1xuXG4vKipcbiAqIFByZXBhcmVzIGFsbCB0aGUgYnVmZmVycyB0byByZW5kZXIgdGhpcyBtZXNoXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLl9pbml0V2ViR0wgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICAvLyBidWlsZCB0aGUgc3RyaXAhXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIG1lc2guX3ZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIG1lc2guX2luZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5fdXZCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC52ZXJ0aWNlcywgZ2wuRFlOQU1JQ19EUkFXKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgaWYobWVzaC5jb2xvcnMpe1xuICAgICAgICBtZXNoLl9jb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fY29sb3JCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5jb2xvcnMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG59O1xuXG5cbi8qKlxuICogRW1wdGllcyB0aGUgY3VycmVudCBiYXRjaC5cbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBtZXNoIHJlbmRlcmVyLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgXG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgTWVzaCByZW5kZXJlclxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIFdlYkdMIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gTWVzaFNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIGNvcmUuU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIGFscGhhIDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYVRleHR1cmVDb29yZDowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5NZXNoU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TaGFkZXIucHJvdG90eXBlKTtcbk1lc2hTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gTWVzaFNoYWRlcjtcblxuY29yZS5TaGFkZXJNYW5hZ2VyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoU2hhZGVyJywgTWVzaFNoYWRlcik7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9zaWduXG5cbmlmICghTWF0aC5zaWduKVxue1xuICAgIE1hdGguc2lnbiA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHggPSAreDtcbiAgICAgICAgaWYgKHggPT09IDAgfHwgaXNOYU4oeCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4ID4gMCA/IDEgOiAtMTtcbiAgICB9O1xufVxuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvb2JqZWN0LWFzc2lnblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnblxuXG5pZiAoIU9iamVjdC5hc3NpZ24pXG57XG4gICAgT2JqZWN0LmFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcbn1cbiIsInJlcXVpcmUoJy4vT2JqZWN0LmFzc2lnbicpO1xucmVxdWlyZSgnLi9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUnKTtcbnJlcXVpcmUoJy4vTWF0aC5zaWduJyk7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cDovL3BhdWxpcmlzaC5jb20vMjAxMS9yZXF1ZXN0YW5pbWF0aW9uZnJhbWUtZm9yLXNtYXJ0LWFuaW1hdGluZy9cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzE1Nzk2NzFcbi8vIGh0dHA6Ly91cGRhdGVzLmh0bWw1cm9ja3MuY29tLzIwMTIvMDUvcmVxdWVzdEFuaW1hdGlvbkZyYW1lLUFQSS1ub3ctd2l0aC1zdWItbWlsbGlzZWNvbmQtcHJlY2lzaW9uXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90aW1oYWxsLzQwNzg2MTRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9GaW5hbmNpYWwtVGltZXMvcG9seWZpbGwtc2VydmljZS90cmVlL21hc3Rlci9wb2x5ZmlsbHMvcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG5cbi8vIEV4cGVjdGVkIHRvIGJlIHVzZWQgd2l0aCBCcm93c2VyZml5XG4vLyBCcm93c2VyaWZ5IGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB0aGUgdXNlIG9mIGBnbG9iYWxgIGFuZCBwYXNzZXMgdGhlXG4vLyBjb3JyZWN0IHJlZmVyZW5jZSBvZiBgZ2xvYmFsYCwgYHNlbGZgLCBhbmQgZmluYWxseSBgd2luZG93YFxuXG4vLyBEYXRlLm5vd1xuaWYgKCEoRGF0ZS5ub3cgJiYgRGF0ZS5wcm90b3R5cGUuZ2V0VGltZSkpIHtcbiAgICBEYXRlLm5vdyA9IGZ1bmN0aW9uIG5vdygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIH07XG59XG5cbi8vIHBlcmZvcm1hbmNlLm5vd1xuaWYgKCEoZ2xvYmFsLnBlcmZvcm1hbmNlICYmIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cpKSB7XG4gICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgaWYgKCFnbG9iYWwucGVyZm9ybWFuY2UpIHtcbiAgICAgICAgZ2xvYmFsLnBlcmZvcm1hbmNlID0ge307XG4gICAgfVxuICAgIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIH07XG59XG5cbi8vIHJlcXVlc3RBbmltYXRpb25GcmFtZVxudmFyIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbnZhciB2ZW5kb3JzID0gWydtcycsICdtb3onLCAnd2Via2l0JywgJ28nXTtcblxuZm9yKHZhciB4ID0gMDsgeCA8IHZlbmRvcnMubGVuZ3RoICYmICFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lOyArK3gpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnQ2FuY2VsQW5pbWF0aW9uRnJhbWUnXSB8fFxuICAgICAgICBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbn1cblxuaWYgKCFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZGVsYXkgPSAxNiArIGxhc3RUaW1lIC0gY3VycmVudFRpbWU7XG5cbiAgICAgICAgaWYgKGRlbGF5IDwgMCkge1xuICAgICAgICAgICAgZGVsYXkgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFRpbWUgPSBjdXJyZW50VGltZTtcblxuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsYXN0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBjYWxsYmFjayhwZXJmb3JtYW5jZS5ub3coKSk7XG4gICAgICAgIH0sIGRlbGF5KTtcbiAgICB9O1xufVxuXG5pZiAoIWdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSkge1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgfTtcbn1cbiJdfQ== +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L09ic2VydmFibGVQb2ludC5qcyIsInNyYy9jb3JlL2Rpc3BsYXkvVHJhbnNmb3JtU3RhdGljLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3MuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9HcmFwaGljc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvV2ViR0xHcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ2lyY2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRDb21wbGV4UG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkTGluZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL01hdHJpeC5qcyIsInNyYy9jb3JlL21hdGgvUG9pbnQuanMiLCJzcmMvY29yZS9tYXRoL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvQ2lyY2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvRWxsaXBzZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1BvbHlnb24uanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9SZWN0YW5nbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlQnVmZmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvU3lzdGVtUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNNYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1RleHR1cmVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9NYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUXVhZC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvU3RlbmNpbE1hc2tTdGFjay5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9zcHJpdGVzL1Nwcml0ZS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvdGV4dC9UZXh0LmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9CYXNlVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1JlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9UZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZVV2cy5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90aWNrZXIvVGlja2VyLmpzIiwic3JjL2NvcmUvdGlja2VyL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzLmpzIiwic3JjL2NvcmUvdXRpbHMvaW5kZXguanMiLCJzcmMvY29yZS91dGlscy9wbHVnaW5UYXJnZXQuanMiLCJzcmMvZGVwcmVjYXRpb24uanMiLCJzcmMvZXh0cmFzL0JpdG1hcFRleHQuanMiLCJzcmMvZXh0cmFzL01vdmllQ2xpcC5qcyIsInNyYy9leHRyYXMvVGlsaW5nU3ByaXRlLmpzIiwic3JjL2V4dHJhcy9jYWNoZUFzQml0bWFwLmpzIiwic3JjL2V4dHJhcy9nZXRDaGlsZEJ5TmFtZS5qcyIsInNyYy9leHRyYXMvZ2V0R2xvYmFsUG9zaXRpb24uanMiLCJzcmMvZXh0cmFzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvYXNjaWkvQXNjaWlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibG9vbS9CbG9vbUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckRpckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1clhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9TbWFydEJsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvck1hdHJpeEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbG9yL0NvbG9yU3RlcEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2RvdC9Eb3RTY3JlZW5GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0JsdXJZVGludEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2dyYXkvR3JheUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvaW52ZXJ0L0ludmVydEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL25vaXNlL05vaXNlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9yZ2IvUkdCU3BsaXRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zZXBpYS9TZXBpYUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0QXhpc0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdHdpc3QvVHdpc3RGaWx0ZXIuanMiLCJzcmMvc3JjL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL0ludGVyYWN0aW9uRGF0YS5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbk1hbmFnZXIuanMiLCJzcmMvaW50ZXJhY3Rpb24vaW5kZXguanMiLCJzcmMvaW50ZXJhY3Rpb24vaW50ZXJhY3RpdmVUYXJnZXQuanMiLCJzcmMvbG9hZGVycy9iaXRtYXBGb250UGFyc2VyLmpzIiwic3JjL2xvYWRlcnMvaW5kZXguanMiLCJzcmMvbG9hZGVycy9sb2FkZXIuanMiLCJzcmMvbG9hZGVycy9zcHJpdGVzaGVldFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL3RleHR1cmVQYXJzZXIuanMiLCJzcmMvbWVzaC9NZXNoLmpzIiwic3JjL21lc2gvUGxhbmUuanMiLCJzcmMvbWVzaC9Sb3BlLmpzIiwic3JjL21lc2gvaW5kZXguanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoUmVuZGVyZXIuanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoU2hhZGVyLmpzIiwic3JjL3BvbHlmaWxsL01hdGguc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9PYmplY3QuYXNzaWduLmpzIiwic3JjL3BvbHlmaWxsL2luZGV4LmpzIiwic3JjL3BvbHlmaWxsL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzV1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNyaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbm1DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Y0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2h5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNWxCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM21CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25iQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICBjcmVhdGVDb250ZXh0OiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9jcmVhdGVDb250ZXh0JyksXG4gICAgc2V0VmVydGV4QXR0cmliQXJyYXlzOiBcdHJlcXVpcmUoJy4vbGliL3NldFZlcnRleEF0dHJpYkFycmF5cycpLFxuICAgIFxuICAgIEdMQnVmZmVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMQnVmZmVyJyksXG4gICAgR0xGcmFtZWJ1ZmZlcjogXHRcdFx0cmVxdWlyZSgnLi9saWIvR0xGcmFtZWJ1ZmZlcicpLFxuICAgIEdMU2hhZGVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMU2hhZGVyJyksXG4gICAgR0xUZXh0dXJlOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMVGV4dHVyZScpLFxuICAgIFxuICAgIFZlcnRleEFycmF5T2JqZWN0OiBcdFx0cmVxdWlyZSgnLi9saWIvVmVydGV4QXJyYXlPYmplY3QnKVxuXG59OyIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEVNUFRZX0FSUkFZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcblxudmFyIEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuQVJSQVlfQlVGRkVSO1xuXHR0aGlzLmRyYXdUeXBlID0gZHJhd1R5cGUgfHwgZ2wuU1RBVElDX0RSQVc7XG5cdHRoaXMuZGF0YSA9IEVNUFRZX0FSUkFZX0JVRkZFUjtcblxuXHRpZihkYXRhKVxuXHR7XG5cdFx0dGhpcy51cGxvYWQoZGF0YSk7XG5cdH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihkYXRhLCBvZmZzZXQsIGRvbnRCaW5kKVxue1xuXHQvLyB0b2RvIC0gbmVlZGVkP1xuXHQvL2lmKCFkb250QmluZClcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblx0XG5cdGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcblx0b2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cblx0aWYodGhpcy5kYXRhLmJ5dGVMZW5ndGggPj0gZGF0YS5ieXRlTGVuZ3RoKVxuXHR7XHRcblx0XHRnbC5idWZmZXJTdWJEYXRhKHRoaXMudHlwZSwgb2Zmc2V0LCBkYXRhKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC5idWZmZXJEYXRhKHRoaXMudHlwZSwgZGF0YSwgdGhpcy5kcmF3VHlwZSk7XG5cdH1cblxuXHR0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRCdWZmZXIodGhpcy50eXBlLCB0aGlzLmJ1ZmZlcik7XG59XG5cbkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24oZ2wsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZSA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIHR5cGUsIGRyYXdUeXBlKTtcbn1cblxuLy9UT0RPIERlc3Ryb3kuLlxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcjtcblxuIiwiXG52YXIgVGV4dHVyZSA9IHJlcXVpcmUoJy4vR0xUZXh0dXJlJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIEZyYW1lYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEZyYW1lYnVmZmVyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblx0XG5cdHRoaXMuc3RlbmNpbCA9IG51bGw7XG5cdHRoaXMudGV4dHVyZSA9IG51bGw7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlVGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBuZXcgVGV4dHVyZShnbCk7XG5cblx0dGhpcy50ZXh0dXJlLmJpbmQoKTtcblxuXHQvL2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZS50ZXh0dXJlLCAwKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmVuYWJsZVN0ZW5jaWwgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuc3RlbmNpbClyZXR1cm47XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnN0ZW5jaWwgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcbiAgICBcbiAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBcbiAgICAvLyBUT0RPLi4gdGhpcyBpcyBkZXB0aCBBTkQgc3RlbmNpbD9cbiAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsICB0aGlzLndpZHRoICAsIHRoaXMuaGVpZ2h0ICk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCByLCBnLCBiLCBhIClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICBnbC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpO1xuICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLmZyYW1lYnVmZmVyICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuXHRpZiAoIHRoaXMudGV4dHVyZSApXG4gICAge1xuICAgIFx0dGhpcy50ZXh0dXJlLnVwbG9hZERhdGEobnVsbCwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRpZiAoIHRoaXMuc3RlbmNpbCApXG4gICAge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0ZW5jaWwgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0dmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21EYXRhKGdsLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0dGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgZmJvLnVuYmluZCgpO1xuICAgIFxuICAgIHJldHVybiBmYm87XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZUZsb2F0MzIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0Ly8gY3JlYXRlIGEgbmV3IHRleHR1cmUuLlxuICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUuZnJvbURhdGEoZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuICAgIHRleHR1cmUuZW5hYmxlTmVhcmVzdFNjYWxpbmcoKTtcbiAgICB0ZXh0dXJlLmVuYWJsZVdyYXBDbGFtcCgpO1xuXG4gICAgLy9ub3cgY3JlYXRlIHRoZSBmcmFtZWJ1ZmZlciBvYmplY3QgYW5kIGF0dGFjaCB0aGUgdGV4dHVyZSB0byBpdC5cbiAgICB2YXIgZmJvID0gbmV3IEZyYW1lYnVmZmVyKGdsLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICBmYm8uZW5hYmxlVGV4dHVyZSh0ZXh0dXJlKVxuXG4gICAgZmJvLnVuYmluZCgpO1xuXG4gICAgcmV0dXJuIGZibztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGcmFtZWJ1ZmZlcjtcblxuIiwiXG52YXIgY29tcGlsZVByb2dyYW0gPSByZXF1aXJlKCcuL3NoYWRlci9jb21waWxlUHJvZ3JhbScpLFxuXHRleHRyYWN0QXR0cmlidXRlcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RBdHRyaWJ1dGVzJyksXG5cdGV4dHJhY3RVbmlmb3JtcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RVbmlmb3JtcycpLFxuXHRnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QgPSByZXF1aXJlKCcuL3NoYWRlci9nZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgU2hhZGVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cbnZhciBTaGFkZXIgPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIEZpcnN0IGNvbXBpbGUgdGhlIHByb2dyYW0uLlxuXHR0aGlzLnByb2dyYW0gPSBjb21waWxlUHJvZ3JhbShnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7XG5cblx0Ly8gbmV4dCBleHRyYWN0IHRoZSBhdHRyaWJ1dGVzXG5cdHRoaXMuYXR0cmlidXRlcyA9IGV4dHJhY3RBdHRyaWJ1dGVzKGdsLCB0aGlzLnByb2dyYW0pOyBcblxuICAgIHZhciB1bmlmb3JtRGF0YSA9IGV4dHJhY3RVbmlmb3JtcyhnbCwgdGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMudW5pZm9ybXMgPSBnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QoIGdsLCB1bmlmb3JtRGF0YSApO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4iLCJcbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gYSBXZWJHTCBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGZvcm1hdCB7bnVtYmVyfSB0aGUgcGl4ZWwgZm9ybWF0IG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5SR0JBXG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSB0aGUgZ2wgdHlwZSBvZiB0aGUgdGV4dHVyZS4gZGVmYXVsdHMgdG8gZ2wuVU5TSUdORURfQllURVxuICovXG52YXIgVGV4dHVyZSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLnRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cblx0Ly8gc29tZSBzZXR0aW5ncy4uXG5cdHRoaXMubWlwbWFwID0gZmFsc2U7XG5cblx0dGhpcy5wcmVtdWx0aXBseUFscGhhID0gZmFsc2U7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cblx0dGhpcy5mb3JtYXQgPSBmb3JtYXQgfHwgZ2wuUkdCQTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5VTlNJR05FRF9CWVRFO1xuXG5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge1BJWEkuZ2xDb3JlLlRleHR1cmV9IFt2YXJuYW1lXSBbZGVzY3JpcHRpb25dXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKHNvdXJjZSlcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gc291cmNlLndpZHRoO1xuXHR0aGlzLmhlaWdodCA9IHNvdXJjZS5oZWlnaHQ7XG5cblx0Z2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xuICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMuZm9ybWF0LCB0aGlzLnR5cGUsIHNvdXJjZSk7XG59XG5cbnZhciBGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSBmYWxzZTtcblxuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkRGF0YSA9IGZ1bmN0aW9uKGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuYmluZCgpO1xuXHRcblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IHRoaXMud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IHRoaXMuaGVpZ2h0O1xuXG5cdGlmKGRhdGEgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpXG5cdHtcblx0XHRpZighRkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFKVxuXHRcdHtcblx0XHRcdHZhciBleHQgPSBnbC5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9mbG9hdFwiKTtcblx0XHRcdFxuXHRcdFx0aWYoZXh0KVxuXHRcdFx0e1xuXHRcdFx0XHRGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2Zsb2F0aW5nIHBvaW50IHRleHR1cmVzIG5vdCBhdmFpbGFibGUnKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnR5cGUgPSBnbC5GTE9BVDtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHQvLyBUT0RPIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzXG5cdFx0dGhpcy50eXBlID0gZ2wuVU5TSUdORURfQllURTtcblx0fVxuXG5cdC8vIHdoYXQgdHlwZSBvZiBkYXRhP1xuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG5cdGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsICB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgZGF0YSB8fCBudWxsKTtcblxufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24obG9jYXRpb24pXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0aWYobG9jYXRpb24gIT09IHVuZGVmaW5lZClcblx0e1xuXHRcdGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbik7XG5cdH1cblxuXHRnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0aGlzLnRleHR1cmUpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIG51bGwpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5taW5GaWx0ZXIgPSBmdW5jdGlvbiggbGluZWFyIClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRpZih0aGlzLm1pcG1hcClcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVJfTUlQTUFQX0xJTkVBUiA6IGdsLk5FQVJFU1RfTUlQTUFQX05FQVJFU1QpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcblx0fVx0XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1hZ0ZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTWlwbWFwID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR0aGlzLm1pcG1hcCA9IHRydWU7XG5cdGdsLmdlbmVyYXRlTWlwbWFwKGdsLlRFWFRVUkVfMkQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVMaW5lYXJTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcih0cnVlKTtcblx0dGhpcy5tYWdGaWx0ZXIodHJ1ZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZU5lYXJlc3RTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcihmYWxzZSk7XG5cdHRoaXMubWFnRmlsdGVyKGZhbHNlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlV3JhcENsYW1wID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwUmVwZWF0ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXHRcblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuUkVQRUFUKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5SRVBFQVQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlVGV4dHVyZSh0aGlzLnRleHR1cmUpO1xufVxuXG4vL1RleHR1cmUuXG5UZXh0dXJlLmZyb21Tb3VyY2UgPSBmdW5jdGlvbihnbCwgc291cmNlLCBwcmVtdWx0aXBseUFscGhhKVxue1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS5wcmVtdWx0aXBseUFscGhhID0gcHJlbXVsdGlwbHlBbHBoYSB8fCBmYWxzZTtcblx0dGV4dHVyZS51cGxvYWQoc291cmNlKTtcblxuXHRyZXR1cm4gdGV4dHVyZTtcbn1cblxuVGV4dHVyZS5mcm9tRGF0YSA9IGZ1bmN0aW9uKGdsLCBkYXRhLCB3aWR0aCwgaGVpZ2h0KVxue1xuXHQvL2NvbnNvbGUubG9nKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS51cGxvYWREYXRhKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZTtcblxuIiwiXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbi8vIHN0YXRlIG9iamVjdC8vXG5cblxuZnVuY3Rpb24gVmVydGV4QXJyYXlPYmplY3QoZ2wpXG57XG5cdFxuXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IChcbiAgICAgIGdsLmdldEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKVxuICAgICk7XG5cbi8vXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IG51bGw7XG5cblx0aWYodGhpcy5uYXRpdmVWYW9FeHRlbnNpb24pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhbyA9IHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7ICBcblx0fVxuXG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcblxuXHR0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuXHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cblx0XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZlcnRleEFycmF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBWZXJ0ZXhBcnJheU9iamVjdDtcblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKHRoaXMubmF0aXZlVmFvKTsgIFxuXG5cdFx0aWYodGhpcy5kaXJ0eSlcblx0XHR7XG5cdFx0XHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cdFx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdFx0fVxuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLm5hdGl2ZVZhbylcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIFxuXHR7XG5cdFx0dmFyIGF0dHJpYiA9IHRoaXMuYXR0cmlidXRlc1tpXTtcblx0XHRhdHRyaWIuYnVmZmVyLmJpbmQoKTtcdFxuXG5cdFx0YXR0cmliLmF0dHJpYnV0ZS5wb2ludGVyKGF0dHJpYi50eXBlLCBhdHRyaWIubm9ybWFsaXplZCwgYXR0cmliLnN0cmlkZSwgYXR0cmliLnN0YXJ0KTsgXG5cdFx0XG5cdFx0Z2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYXR0cmliLmF0dHJpYnV0ZS5sb2NhdGlvbik7XG5cdH07XG5cblx0dGhpcy5pbmRleEJ1ZmZlci5iaW5kKCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRBdHRyaWJ1dGUgPSBmdW5jdGlvbihidWZmZXIsIGF0dHJpYnV0ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydClcbntcbiAgICB0aGlzLmF0dHJpYnV0ZXMucHVzaCh7XG4gICAgXHRidWZmZXI6IFx0YnVmZmVyLFxuICAgIFx0YXR0cmlidXRlOiBcdGF0dHJpYnV0ZSxcblxuICAgIFx0bG9jYXRpb246IFx0YXR0cmlidXRlLmxvY2F0aW9uLFxuXHQgXHR0eXBlOiBcdFx0dHlwZSB8fCB0aGlzLmdsLkZMT0FULFxuXHQgXHRub3JtYWxpemVkOiBub3JtYWxpemVkIHx8IGZhbHNlLFxuXHQgXHRzdHJpZGU6IFx0c3RyaWRlIHx8IDAsXG5cdCBcdHN0YXJ0OiBcdFx0c3RhcnQgfHwgMFxuXHR9KVxuXG5cdHRoaXMuZGlydHkgPSB0cnVlO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRJbmRleCA9IGZ1bmN0aW9uKGJ1ZmZlciwgb3B0aW9ucylcbntcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gYnVmZmVyO1xuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBzdGFydClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuZHJhd0VsZW1lbnRzKHR5cGUsIHNpemUsIGdsLlVOU0lHTkVEX1NIT1JULCBzdGFydCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgQ29udGV4dFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG5cbnZhciBDT05URVhUX1VJRCA9IDA7XG5cbnZhciBjcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24oY2FudmFzLCBvcHRpb25zKVxue1xuICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgb3B0aW9ucykgfHwgXG4gICAgXHQgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFnbClcbiAgICB7XG4gICAgICAgIC8vIGZhaWwsIG5vdCBhYmxlIHRvIGdldCBhIGNvbnRleHRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB3ZWJHTC4gVHJ5IHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXInKTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCB3YW50IHRvIHBoYXNlIHRoaXMgb3V0P1xuICAgIGdsLmlkID0gQ09OVEVYVF9VSUQrKztcblxuICAgIHJldHVybiBnbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb250ZXh0O1xuXG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgc2V0VmVydGV4QXR0cmliQXJyYXlzID0gZnVuY3Rpb24gKGdsLCBhdHRyaWJzKVxue1x0XG4gICAvLyBjb25zb2xlLmxvZyhnbC5pZClcbiAgICB2YXIgZGF0YSA9IEdMX01BUFtnbC5pZF07XG5cbiAgICBpZighZGF0YSlcbiAgICB7XG5cdCAgIHZhciBtYXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cdFx0ZGF0YSA9IEdMX01BUFtnbC5pZF0gPSB7dGVtcEF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKVxuXHRcdFx0XHQgXHQgXHRcdCAgICxhdHRyaWJTdGF0ZTpuZXcgQXJyYXkobWF4QXR0cmlicyl9O1xuXHR9XG5cdFxuICAgIHZhciBpLFxuICAgIFx0dGVtcEF0dHJpYlN0YXRlID0gZGF0YS50ZW1wQXR0cmliU3RhdGUsXG4gICAgXHRhdHRyaWJTdGF0ZSA9IGRhdGEuYXR0cmliU3RhdGU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAoaSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbaV0ubG9jYXRpb25dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAoYXR0cmliU3RhdGVbaV0gIT09IHRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmliU3RhdGVbaV0gPSB0ZW1wQXR0cmliU3RhdGVbaV07XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmF0dHJpYlN0YXRlW2ldKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VmVydGV4QXR0cmliQXJyYXlzOyIsIlxuXG5cblxuY29tcGlsZVByb2dyYW0gPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcbiAgICB2YXIgZ2xWZXJ0U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuVkVSVEVYX1NIQURFUiwgdmVydGV4U3JjKTtcbiAgICB2YXIgZ2xGcmFnU2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNyYyk7XG5cbiAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbEZyYWdTaGFkZXIpO1xuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgLy8gaWYgbGlua2luZyBmYWlscywgdGhlbiBsb2cgYW5kIGNsZWFudXBcbiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUGl4aS5qcyBFcnJvcjogQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVyLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5WQUxJREFURV9TVEFUVVMnLCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLlZBTElEQVRFX1NUQVRVUykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5nZXRFcnJvcigpJywgZ2wuZ2V0RXJyb3IoKSk7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBwcm9ncmFtIGluZm8gbG9nLCBsb2cgaXRcbiAgICAgICAgaWYgKGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pICE9PSAnJylcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaXhpLmpzIFdhcm5pbmc6IGdsLmdldFByb2dyYW1JbmZvTG9nKCknLCBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICBwcm9ncmFtID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBzb21lIHNoYWRlcnNcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xGcmFnU2hhZGVyKTtcblxuICAgIHJldHVybiBwcm9ncmFtO1xufVxuXG52YXIgY29tcGlsZVNoYWRlciA9IGZ1bmN0aW9uIChnbCwgdHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzcmMpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZVByb2dyYW07XG5cbiIsIlxuXG52YXIgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkgXG57XG4gICAgc3dpdGNoICh0eXBlKVxuICAgIHtcbiAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAndmVjMic6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzQnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSg0ICogc2l6ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgY2FzZSAnc2FtcGxlcjJEJzpcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWMyJzogICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnaXZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDMgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjNCc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDQgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdib29sJzogICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMyJzpcblxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSggMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMzJzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWM0JzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ21hdDInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Myc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMV0pO1xuXG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDAsIDAsIDFdKTtcbiAgICB9XG59XG5cbnZhciBib29sZWFuQXJyYXkgPSBmdW5jdGlvbihzaXplKVxue1xuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgYXJyYXlbaV0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRWYWx1ZTtcbiIsIlxudmFyIG1hcFR5cGUgPSByZXF1aXJlKCcuL21hcFR5cGUnKTtcbnZhciBtYXBTaXplID0gcmVxdWlyZSgnLi9tYXBTaXplJyk7XG5cbnZhciBleHRyYWN0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICB2YXIgdG90YWxBdHRyaWJ1dGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxBdHRyaWJ1dGVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGF0dHJpYkRhdGEgPSBnbC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaSk7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgYXR0cmliRGF0YS50eXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYkRhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOnR5cGUsXG4gICAgICAgICAgICBzaXplOm1hcFNpemUodHlwZSksXG4gICAgICAgICAgICBsb2NhdGlvbjpnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBhdHRyaWJEYXRhLm5hbWUpLFxuICAgICAgICAgICAgLy9UT0RPIC0gbWFrZSBhbiBhdHRyaWJ1dGUgb2JqZWN0XG4gICAgICAgICAgICBwb2ludGVyOmZ1bmN0aW9uKHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpe1xuXG4gICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5sb2NhdGlvbix0aGlzLnNpemUsIHR5cGUgfHwgZ2wuRkxPQVQsIG5vcm1hbGl6ZWQgfHwgZmFsc2UsIHN0cmlkZSB8fCAwLCBzdGFydCB8fCAwKTsgXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYXR0cmlidXRlczsgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RBdHRyaWJ1dGVzO1xuXG4iLCJ2YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIGRlZmF1bHRWYWx1ZSA9IHJlcXVpcmUoJy4vZGVmYXVsdFZhbHVlJyk7XG5cblxudmFyIGV4dHJhY3RVbmlmb3JtcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuXHR2YXIgdW5pZm9ybXMgPSB7fTtcblx0XG4gICAgdmFyIHRvdGFsVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxVbmlmb3JtczsgaSsrKSBcbiAgICB7XG4gICAgXHR2YXIgdW5pZm9ybURhdGEgPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpO1xuICAgIFx0dmFyIG5hbWUgPSB1bmlmb3JtRGF0YS5uYW1lLnJlcGxhY2UoL1xcWy4qP1xcXS8sIFwiXCIpO1xuICAgICAgICB2YXIgdHlwZSA9IG1hcFR5cGUoZ2wsIHVuaWZvcm1EYXRhLnR5cGUgKTtcblxuICAgIFx0dW5pZm9ybXNbbmFtZV0gPSB7XG4gICAgXHRcdHR5cGU6dHlwZSxcbiAgICBcdFx0c2l6ZTp1bmlmb3JtRGF0YS5zaXplLFxuICAgIFx0XHRsb2NhdGlvbjpnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksXG4gICAgXHRcdHZhbHVlOmRlZmF1bHRWYWx1ZSh0eXBlLCB1bmlmb3JtRGF0YS5zaXplKVxuICAgIFx0fVxuICAgIH07XG5cdFxuXHRyZXR1cm4gdW5pZm9ybXM7XHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHRyYWN0VW5pZm9ybXM7XG5cbiIsIlxudmFyIGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IGZ1bmN0aW9uKGdsLCB1bmlmb3JtRGF0YSlcbntcbiAgICAvLyB0aGlzIGlzIHRoZSBvYmplY3Qgd2Ugd2lsbCBiZSBzZW5kaW5nIGJhY2suXG4gICAgLy8gYW4gb2JqZWN0IGhpZXJhY2h5IHdpbGwgYmUgY3JlYXRlZCBmb3Igc3RydWN0c1xuICAgIHZhciB1bmlmb3JtcyA9IHtkYXRhOnt9fTtcblxuICAgIHVuaWZvcm1zLmdsID0gZ2w7XG4gICAgXG4gICAgdmFyIHVuaWZvcm1LZXlzPSBPYmplY3Qua2V5cyh1bmlmb3JtRGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1LZXlzLmxlbmd0aDsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBmdWxsTmFtZSA9IHVuaWZvcm1LZXlzW2ldXG5cbiAgICAgICAgdmFyIG5hbWVUb2tlbnMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAxXTtcblxuICAgICAgICB2YXIgdW5pZm9ybUdyb3VwID0gZ2V0VW5pZm9ybUdyb3VwKG5hbWVUb2tlbnMsIHVuaWZvcm1zKTtcblxuICAgICAgICB2YXIgdW5pZm9ybSA9ICB1bmlmb3JtRGF0YVtmdWxsTmFtZV07XG4gICAgICAgIHVuaWZvcm1Hcm91cC5kYXRhW25hbWVdID0gdW5pZm9ybTtcblxuICAgICAgICB1bmlmb3JtR3JvdXAuZ2wgPSBnbDtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5pZm9ybUdyb3VwLCBuYW1lLCB7XG4gICAgICAgICAgICBnZXQ6IGdlbmVyYXRlR2V0dGVyKG5hbWUpLFxuICAgICAgICAgICAgc2V0OiBnZW5lcmF0ZVNldHRlcihuYW1lLCB1bmlmb3JtKVxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdW5pZm9ybXM7XG59XG5cbnZhciBnZW5lcmF0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpXG57XG5cdHZhciB0ZW1wbGF0ZSA9IGdldHRlclRlbXBsYXRlLnJlcGxhY2UoJyUlJywgbmFtZSk7XG5cdHJldHVybiBuZXcgRnVuY3Rpb24odGVtcGxhdGUpO1xufVxuXG52YXIgZ2VuZXJhdGVTZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCB1bmlmb3JtKVxue1xuICAgIHZhciB0ZW1wbGF0ZSA9IHNldHRlclRlbXBsYXRlLnJlcGxhY2UoLyUlL2csIG5hbWUpO1xuICAgIHZhciBzZXRUZW1wbGF0ZVxuICAgIFxuICAgIGlmKHVuaWZvcm0uc2l6ZSA9PT0gMSlcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19TSU5HTEVfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzZXRUZW1wbGF0ZSA9IEdMU0xfVE9fQVJSQVlfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cblxuICAgIGlmKHNldFRlbXBsYXRlKVxuICAgIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gXCJcXG50aGlzLmdsLlwiICsgc2V0VGVtcGxhdGUgKyBcIjtcIjtcbiAgICB9XG5cbiAgXHRyZXR1cm4gbmV3IEZ1bmN0aW9uKCd2YWx1ZScsIHRlbXBsYXRlKTtcbn1cblxudmFyIGdldFVuaWZvcm1Hcm91cCA9IGZ1bmN0aW9uKG5hbWVUb2tlbnMsIHVuaWZvcm0pXG57XG4gICAgdmFyIGN1ciA9IHVuaWZvcm07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVUb2tlbnMubGVuZ3RoIC0gMTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBvID0gY3VyW25hbWVUb2tlbnNbaV1dIHx8IHtkYXRhOnt9fTtcbiAgICAgICAgY3VyW25hbWVUb2tlbnNbaV1dID0gbztcbiAgICAgICAgY3VyID0gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGN1clxufVxuXG52YXIgZ2V0dGVyVGVtcGxhdGUgPSBbXG4gICAgJ3JldHVybiB0aGlzLmRhdGEuJSUudmFsdWU7Jyxcbl0uam9pbignXFxuJyk7XG5cbnZhciBzZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAndGhpcy5kYXRhLiUlLnZhbHVlID0gdmFsdWU7JyxcbiAgICAndmFyIGxvY2F0aW9uID0gdGhpcy5kYXRhLiUlLmxvY2F0aW9uOydcbl0uam9pbignXFxuJyk7XG5cblxudmFyIEdMU0xfVE9fU0lOR0xFX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ3ZlYzInOiAgICAgJ3VuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ3ZlYzMnOiAgICAgJ3VuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG4gICAgXHRcbiAgICAnaW50JzogICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnaXZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcblxuICAgICdtYXQyJzogICAgICd1bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0Myc6ICAgICAndW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG4gICAgJ21hdDQnOiAgICAgJ3VuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuXG4gICAgJ3NhbXBsZXIyRCc6J3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG52YXIgR0xTTF9UT19BUlJBWV9TRVRURVJTID0ge1xuXG4gICAgJ2Zsb2F0JzogICAgJ3VuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjNCc6ICAgICAndW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG4gICBcbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdDtcblxuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24odHlwZSkgXG57IFxuICAgIHJldHVybiBHTFNMX1RPX1NJWkVbdHlwZV07XG59XG5cblxudmFyIEdMU0xfVE9fU0laRSA9IHtcbiAgICAnZmxvYXQnOiAgICAxLFxuICAgICd2ZWMyJzogICAgIDIsXG4gICAgJ3ZlYzMnOiAgICAgMyxcbiAgICAndmVjNCc6ICAgICA0LFxuXG4gICAgJ2ludCc6ICAgICAgMSxcbiAgICAnaXZlYzInOiAgICAyLFxuICAgICdpdmVjMyc6ICAgIDMsXG4gICAgJ2l2ZWM0JzogICAgNCxcblxuICAgICdib29sJzogICAgIDEsXG4gICAgJ2J2ZWMyJzogICAgMixcbiAgICAnYnZlYzMnOiAgICAzLFxuICAgICdidmVjNCc6ICAgIDQsXG5cbiAgICAnbWF0Mic6ICAgICA0LFxuICAgICdtYXQzJzogICAgIDksXG4gICAgJ21hdDQnOiAgICAgMTYsXG5cbiAgICAnc2FtcGxlcjJEJzogIDFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24oZ2wsIHR5cGUpIFxue1xuICAgIGlmKCFHTF9UQUJMRSkgXG4gICAge1xuICAgICAgICB2YXIgdHlwZU5hbWVzID0gT2JqZWN0LmtleXMoR0xfVE9fR0xTTF9UWVBFUyk7XG5cbiAgICAgICAgR0xfVEFCTEUgPSB7fTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdHlwZU5hbWVzLmxlbmd0aDsgKytpKSBcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHRuID0gdHlwZU5hbWVzW2ldO1xuICAgICAgICAgICAgR0xfVEFCTEVbIGdsW3RuXSBdID0gR0xfVE9fR0xTTF9UWVBFU1t0bl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIEdMX1RBQkxFW3R5cGVdO1xufVxuXG52YXIgR0xfVEFCTEUgPSBudWxsO1xuXG52YXIgR0xfVE9fR0xTTF9UWVBFUyA9IHtcbiAgJ0ZMT0FUJzogICAgICAgJ2Zsb2F0JyxcbiAgJ0ZMT0FUX1ZFQzInOiAgJ3ZlYzInLFxuICAnRkxPQVRfVkVDMyc6ICAndmVjMycsXG4gICdGTE9BVF9WRUM0JzogICd2ZWM0JyxcblxuICAnSU5UJzogICAgICAgICAnaW50JyxcbiAgJ0lOVF9WRUMyJzogICAgJ2l2ZWMyJyxcbiAgJ0lOVF9WRUMzJzogICAgJ2l2ZWMzJyxcbiAgJ0lOVF9WRUM0JzogICAgJ2l2ZWM0JyxcbiAgXG4gICdCT09MJzogICAgICAgICdib29sJyxcbiAgJ0JPT0xfVkVDMic6ICAgJ2J2ZWMyJyxcbiAgJ0JPT0xfVkVDMyc6ICAgJ2J2ZWMzJyxcbiAgJ0JPT0xfVkVDNCc6ICAgJ2J2ZWM0JyxcbiAgXG4gICdGTE9BVF9NQVQyJzogICdtYXQyJyxcbiAgJ0ZMT0FUX01BVDMnOiAgJ21hdDMnLFxuICAnRkxPQVRfTUFUNCc6ICAnbWF0NCcsXG4gIFxuICAnU0FNUExFUl8yRCc6ICAnc2FtcGxlcjJEJyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwU2l6ZTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvQm9vbCh2KSB7XG4gICAgICAgIHJldHVybiAhIXY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vdElkKHYpIHtcbiAgICAgICAgcmV0dXJuICF2O1xuICAgIH1cblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcHJldmlvdXNfYXN5bmM7XG5cbiAgICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gICAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZiB8fFxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgdGhpcztcblxuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgICAgcHJldmlvdXNfYXN5bmMgPSByb290LmFzeW5jO1xuICAgIH1cblxuICAgIGFzeW5jLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBwcmV2aW91c19hc3luYztcbiAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbmx5X29uY2UoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIC8vIFBvcnRlZCBmcm9tIHVuZGVyc2NvcmUuanMgaXNPYmplY3RcbiAgICB2YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9pc0FycmF5TGlrZShhcnIpIHtcbiAgICAgICAgcmV0dXJuIF9pc0FycmF5KGFycikgfHwgKFxuICAgICAgICAgICAgLy8gaGFzIGEgcG9zaXRpdmUgaW50ZWdlciBsZW5ndGggcHJvcGVydHlcbiAgICAgICAgICAgIHR5cGVvZiBhcnIubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICBhcnIubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggJSAxID09PSAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2FycmF5RWFjaChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfbWFwKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdG9yKGFycltpbmRleF0sIGluZGV4LCBhcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JhbmdlKGNvdW50KSB7XG4gICAgICAgIHJldHVybiBfbWFwKEFycmF5KGNvdW50KSwgZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGk7IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9yZWR1Y2UoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBfYXJyYXlFYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9mb3JFYWNoT2Yob2JqZWN0LCBpdGVyYXRvcikge1xuICAgICAgICBfYXJyYXlFYWNoKF9rZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnIsIGl0ZW0pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfa2V5SXRlcmF0b3IoY29sbCkge1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB2YXIgbGVuO1xuICAgICAgICB2YXIga2V5cztcbiAgICAgICAgaWYgKF9pc0FycmF5TGlrZShjb2xsKSkge1xuICAgICAgICAgICAgbGVuID0gY29sbC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBsZW4gPyBpIDogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXlzID0gX2tleXMoY29sbCk7XG4gICAgICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGtleXNbaV0gOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpbWlsYXIgdG8gRVM2J3MgcmVzdCBwYXJhbSAoaHR0cDovL2FyaXlhLm9maWxhYnMuY29tLzIwMTMvMDMvZXM2LWFuZC1yZXN0LXBhcmFtZXRlci5odG1sKVxuICAgIC8vIFRoaXMgYWNjdW11bGF0ZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byBhbiBhcnJheSwgYWZ0ZXIgYSBnaXZlbiBpbmRleC5cbiAgICAvLyBGcm9tIHVuZGVyc2NvcmUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzIxNDApLlxuICAgIGZ1bmN0aW9uIF9yZXN0UGFyYW0oZnVuYywgc3RhcnRJbmRleCkge1xuICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCk7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSB1bnVzZWQgYnV0IGhhbmRsZSBjYXNlcyBvdXRzaWRlIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50OlxuICAgICAgICAgICAgLy8gdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICAgICAgICAvLyBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAvLyAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICAgICAgICAvLyByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBleHBvcnRlZCBhc3luYyBtb2R1bGUgZnVuY3Rpb25zIC8vLy9cblxuICAgIC8vLy8gbmV4dFRpY2sgaW1wbGVtZW50YXRpb24gd2l0aCBicm93c2VyLWNvbXBhdGlibGUgZmFsbGJhY2sgLy8vL1xuXG4gICAgLy8gY2FwdHVyZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZSB0byBndWFyZCBhZ2FpbnN0IGZha2VUaW1lciBtb2Nrc1xuICAgIHZhciBfc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzZXRJbW1lZGlhdGU7XG5cbiAgICB2YXIgX2RlbGF5ID0gX3NldEltbWVkaWF0ZSA/IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgIF9zZXRJbW1lZGlhdGUoZm4pO1xuICAgIH0gOiBmdW5jdGlvbihmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBfZGVsYXk7XG4gICAgfVxuICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IF9zZXRJbW1lZGlhdGUgPyBfZGVsYXkgOiBhc3luYy5uZXh0VGljaztcblxuXG4gICAgYXN5bmMuZm9yRWFjaCA9XG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9XG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mU2VyaWVzKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG5cbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPVxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9lYWNoT2ZMaW1pdChsaW1pdCkoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoT2YgPVxuICAgIGFzeW5jLmVhY2hPZiA9IGZ1bmN0aW9uIChvYmplY3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBvYmplY3QgPSBvYmplY3QgfHwgW107XG5cbiAgICAgICAgdmFyIGl0ZXIgPSBfa2V5SXRlcmF0b3Iob2JqZWN0KTtcbiAgICAgICAgdmFyIGtleSwgY29tcGxldGVkID0gMDtcblxuICAgICAgICB3aGlsZSAoKGtleSA9IGl0ZXIoKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpdGVyYXRvcihvYmplY3Rba2V5XSwga2V5LCBvbmx5X29uY2UoZG9uZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gMCkgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZC0tO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBrZXkgaXMgbnVsbCBpbiBjYXNlIGl0ZXJhdG9yIGlzbid0IGV4aGF1c3RlZFxuICAgICAgICAgICAgLy8gYW5kIGRvbmUgcmVzb2x2ZWQgc3luY2hyb25vdXNseS5cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gbnVsbCAmJiBjb21wbGV0ZWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZlNlcmllcyA9XG4gICAgYXN5bmMuZWFjaE9mU2VyaWVzID0gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iaiA9IG9iaiB8fCBbXTtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgdmFyIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRvcihvYmpba2V5XSwga2V5LCBvbmx5X29uY2UoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoaXRlcmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5mb3JFYWNoT2ZMaW1pdCA9XG4gICAgYXN5bmMuZWFjaE9mTGltaXQgPSBmdW5jdGlvbiAob2JqLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9lYWNoT2ZMaW1pdChsaW1pdCkob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZWFjaE9mTGltaXQobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBydW5uaW5nID0gMDtcbiAgICAgICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChkb25lICYmIHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWwoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZiwgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb1BhcmFsbGVsTGltaXQoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihfZWFjaE9mTGltaXQobGltaXQpLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvU2VyaWVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihhc3luYy5lYWNoT2ZTZXJpZXMsIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gX2lzQXJyYXlMaWtlKGFycikgPyBbXSA6IHt9O1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfYXN5bmNNYXApO1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLmluamVjdCA9XG4gICAgYXN5bmMuZm9sZGwgPVxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgaSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5mb2xkciA9XG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGlkZW50aXR5KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudHJhbnNmb3JtID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGl0ZXJhdG9yO1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBtZW1vO1xuICAgICAgICAgICAgbWVtbyA9IF9pc0FycmF5KGFycikgPyBbXSA6IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuZWFjaE9mKGFyciwgZnVuY3Rpb24odiwgaywgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHYsIGssIGNiKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleDogaW5kZXgsIHZhbHVlOiB4fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soX21hcChyZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICB9KSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMuc2VsZWN0ID1cbiAgICBhc3luYy5maWx0ZXIgPSBkb1BhcmFsbGVsKF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0TGltaXQgPVxuICAgIGFzeW5jLmZpbHRlckxpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID1cbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcblxuICAgIGZ1bmN0aW9uIF9yZWplY3QoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBfZmlsdGVyKGVhY2hmbiwgYXJyLCBmdW5jdGlvbih2YWx1ZSwgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgY2IoIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoZWFjaGZuLCBjaGVjaywgZ2V0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2IpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSBjYihnZXRSZXN1bHQoZmFsc2UsIHZvaWQgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWUoeCwgXywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNiKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2IgJiYgY2hlY2sodikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGdldFJlc3VsdCh0cnVlLCB4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGl0ZXJhdG9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGxpbWl0LCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBsaW1pdDtcbiAgICAgICAgICAgICAgICBlYWNoZm4oYXJyLCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMuYW55ID1cbiAgICBhc3luYy5zb21lID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIHRvQm9vbCwgaWRlbnRpdHkpO1xuXG4gICAgYXN5bmMuc29tZUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5hbGwgPVxuICAgIGFzeW5jLmV2ZXJ5ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIG5vdElkLCBub3RJZCk7XG5cbiAgICBhc3luYy5ldmVyeUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgbm90SWQsIG5vdElkKTtcblxuICAgIGZ1bmN0aW9uIF9maW5kR2V0UmVzdWx0KHYsIHgpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIGFzeW5jLmRldGVjdCA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mU2VyaWVzLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdExpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgaWRlbnRpdHksIF9maW5kR2V0UmVzdWx0KTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoY29tcGFyYXRvciksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgb3B0aW9uYWwsIHNoaWZ0IHRoZSBhcmdzLlxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHJlbWFpbmluZ1Rhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoZm4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gX2luZGV4T2YobGlzdGVuZXJzLCBmbik7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgX2FycmF5RWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2FycmF5RWFjaChrZXlzLCBmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSBfaXNBcnJheSh0YXNrc1trXSkgPyB0YXNrc1trXTogW3Rhc2tzW2tdXTtcbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBfZm9yRWFjaE9mKHJlc3VsdHMsIGZ1bmN0aW9uKHZhbCwgcmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCB0YXNrLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWFkLWxvY2tzXG4gICAgICAgICAgICB2YXIgbGVuID0gcmVxdWlyZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGRlcDtcbiAgICAgICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgICAgICAgIGlmICghKGRlcCA9IHRhc2tzW3JlcXVpcmVzW2xlbl1dKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhcyBpbmV4aXN0YW50IGRlcGVuZGVuY3knKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc0FycmF5KGRlcCkgJiYgX2luZGV4T2YoZGVwLCBrKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGN5Y2xpYyBkZXBlbmRlbmNpZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kgJiYgX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcblxuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHRpbWVzOiBERUZBVUxUX1RJTUVTLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IERFRkFVTFRfSU5URVJWQUxcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgdCA9PT0gJ251bWJlcicpe1xuICAgICAgICAgICAgICAgIGFjYy50aW1lcyA9IHBhcnNlSW50KHQsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiB0ID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodC50aW1lcywgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICAgICAgYWNjLmludGVydmFsID0gcGFyc2VJbnQodC5pbnRlcnZhbCwgMTApIHx8IERFRkFVTFRfSU5URVJWQUw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYXJndW1lbnQgdHlwZSBmb3IgXFwndGltZXNcXCc6ICcgKyB0eXBlb2YgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDEgfHwgbGVuZ3RoID4gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyAtIG11c3QgYmUgZWl0aGVyICh0YXNrKSwgKHRhc2ssIGNhbGxiYWNrKSwgKHRpbWVzLCB0YXNrKSBvciAodGltZXMsIHRhc2ssIGNhbGxiYWNrKScpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA8PSAyICYmIHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGltZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0cywgdGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgb3B0cy50YXNrID0gdGFzaztcblxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVkVGFzayh3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQodGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5SW50ZXJ2YWwoaW50ZXJ2YWwpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKG9wdHMudGltZXMpIHtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5hbEF0dGVtcHQgPSAhKG9wdHMudGltZXMtPTEpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KG9wdHMudGFzaywgZmluYWxBdHRlbXB0KSk7XG4gICAgICAgICAgICAgICAgaWYoIWZpbmFsQXR0ZW1wdCAmJiBvcHRzLmludGVydmFsID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlJbnRlcnZhbChvcHRzLmludGVydmFsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBvcHRzLmNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNhbGxiYWNrIGlzIHBhc3NlZCwgcnVuIHRoaXMgYXMgYSBjb250cm9sbCBmbG93XG4gICAgICAgIHJldHVybiBvcHRzLmNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrO1xuICAgIH07XG5cbiAgICBhc3luYy53YXRlcmZhbGwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGlmICghX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3cmFwSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCh3cmFwSXRlcmF0b3IobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbnN1cmVBc3luYyhpdGVyYXRvcikuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3BhcmFsbGVsKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgbm9vcDtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsIGZ1bmN0aW9uICh0YXNrLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0YXNrKF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLnBhcmFsbGVsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoYXN5bmMuZWFjaE9mLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24odGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoX2VhY2hPZkxpbWl0KGxpbWl0KSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2ZTZXJpZXMsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VDYWxsYmFjayhpbmRleCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYWtlQ2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIGFzeW5jLmFwcGx5ID0gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGNhbGxBcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoY2FsbEFyZ3MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb25jYXQoZWFjaGZuLCBhcnIsIGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIGZuKHgsIGZ1bmN0aW9uIChlcnIsIHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICB2YXIgbmV4dCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdC5hcHBseSh0aGlzLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihuZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gKytjYWxscyA8PSAxIHx8IHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9VbnRpbCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmR1cmluZyA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hlY2spO1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cnV0aCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0KGNoZWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9EdXJpbmcgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIGFzeW5jLmR1cmluZyhmdW5jdGlvbihuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY2FsbHMrKyA8IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBtdXN0IG5vdCBiZSB6ZXJvJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sgfHwgbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBxLnRhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfbmV4dChxLCB0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgd29ya2VycyAtPSAxO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHdvcmtlcnNMaXN0LCBmdW5jdGlvbiAod29ya2VyLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtlciA9PT0gdGFzayAmJiAhcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgdGFza3M6IFtdLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IGNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbm9vcCxcbiAgICAgICAgICAgIGVtcHR5OiBub29wLFxuICAgICAgICAgICAgZHJhaW46IG5vb3AsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHEuZHJhaW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHRydWUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFxLnBhdXNlZCAmJiB3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSh3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBxLnBheWxvYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEucGF5bG9hZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEudGFza3MubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfbWFwKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaCh0YXNrc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UoX25leHQocSwgdGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdW1lQ291bnQgPSBNYXRoLm1pbihxLmNvbmN1cnJlbmN5LCBxLnRhc2tzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSByZXN1bWVDb3VudDsgdysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgcSA9IF9xdWV1ZShmdW5jdGlvbiAoaXRlbXMsIGNiKSB7XG4gICAgICAgICAgICB3b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICAgIGVuZCA9IHNlcXVlbmNlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGJlZyArICgoZW5kIC0gYmVnICsgMSkgPj4+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3BcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoX2JpbmFyeVNlYXJjaChxLnRhc2tzLCBpdGVtLCBfY29tcGFyZVRhc2tzKSArIDEsIDAsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBxLnVuc2hpZnQ7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLmNhcmdvID0gZnVuY3Rpb24gKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gX3F1ZXVlKHdvcmtlciwgMSwgcGF5bG9hZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9jb25zb2xlX2ZuKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGlkZW50aXR5O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIG1lbW9pemVkKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGtleSBpbiBtZW1vKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF90aW1lcyhtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBtYXBwZXIoX3JhbmdlKGNvdW50KSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy50aW1lcyA9IF90aW1lcyhhc3luYy5tYXApO1xuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gX3RpbWVzKGFzeW5jLm1hcFNlcmllcyk7XG4gICAgYXN5bmMudGltZXNMaW1pdCA9IGZ1bmN0aW9uIChjb3VudCwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMubWFwTGltaXQoX3JhbmdlKGNvdW50KSwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBub29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW19yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgbmV4dGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfSldKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoYXQsIFtlcnJdLmNvbmNhdChyZXN1bHRzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5zZXEuYXBwbHkobnVsbCwgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBfYXBwbHlFYWNoKGVhY2hmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbihmbnMsIGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBnbyA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlYWNoZm4oZm5zLCBmdW5jdGlvbiAoZm4sIF8sIGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5hcHBseUVhY2ggPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZik7XG4gICAgYXN5bmMuYXBwbHlFYWNoU2VyaWVzID0gX2FwcGx5RWFjaChhc3luYy5lYWNoT2ZTZXJpZXMpO1xuXG5cbiAgICBhc3luYy5mb3JldmVyID0gZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZG9uZSA9IG9ubHlfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgdmFyIHRhc2sgPSBlbnN1cmVBc3luYyhmbik7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVBc3luYyhmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuXG4gICAgYXN5bmMuY29uc3RhbnQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICB2YXIgYXJncyA9IFtudWxsXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXN5bmMud3JhcFN5bmMgPVxuICAgIGFzeW5jLmFzeW5jaWZ5ID0gZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAoX2lzT2JqZWN0KHJlc3VsdCkgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLm1lc3NhZ2UgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBOb2RlLmpzXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG4gICAgfVxuICAgIC8vIEFNRCAvIFJlcXVpcmVKU1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG5cdCAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXG5cdCAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cblx0ICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSlcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cblx0ICogQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuXHQgKiBVbmljb2RlIHN0cmluZy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gJ3huLS0nICsgZW5jb2RlKHN0cmluZylcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG5cdHB1bnljb2RlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHQndmVyc2lvbic6ICcxLjMuMicsXG5cdFx0LyoqXG5cdFx0ICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHRcdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMpIHtcblx0XHRcdC8vIGluIE5vZGUuanMsIGlvLmpzLCBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IHB1bnljb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5wdW55Y29kZSA9IHB1bnljb2RlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUpIHJldHVybiB0cmlhbmdsZXM7XG5cbiAgICB2YXIgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgc2l6ZTtcblxuICAgIGlmIChoYXNIb2xlcykgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKTtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG4gICAgICAgIG1pblggPSBtYXhYID0gZGF0YVswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xuICAgICAgICAgICAgeSA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIHNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIHNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgICAgICBpLCBqLCBsYXN0O1xuXG4gICAgLy8gY2FsY3VsYXRlIG9yaWdpbmFsIHdpbmRpbmcgb3JkZXIgb2YgYSBwb2x5Z29uIHJpbmdcbiAgICBmb3IgKGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cblxuICAgIC8vIGxpbmsgcG9pbnRzIGludG8gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuICAgIGlmIChjbG9ja3dpc2UgPT09IChzdW0gPiAwKSkge1xuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgc2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChzaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0aWNlIGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZWFyLCB0cmlhbmdsZXMsIGRpbSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDIpO1xuXG4gICAgICAgICAgICAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgd2hpbGUgKHAgIT09IGVhci5wcmV2KSB7XG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG4gICAgdmFyIG1pblRYID0gYS54IDwgYi54ID8gKGEueCA8IGMueCA/IGEueCA6IGMueCkgOiAoYi54IDwgYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoYS55IDwgYy55ID8gYS55IDogYy55KSA6IChiLnkgPCBjLnkgPyBiLnkgOiBjLnkpLFxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1heFRZID0gYS55ID4gYi55ID8gKGEueSA+IGMueSA/IGEueSA6IGMueSkgOiAoYi55ID4gYy55ID8gYi55IDogYy55KTtcblxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgdmFyIG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBzaXplKSxcbiAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgdmFyIHAgPSBlYXIubmV4dFo7XG5cbiAgICB3aGlsZSAocCAmJiBwLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgcCA9IGVhci5wcmV2WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIC8vIGEgc2VsZi1pbnRlcnNlY3Rpb24gd2hlcmUgZWRnZSAodltpLTFdLHZbaV0pIGludGVyc2VjdHMgKHZbaSsxXSx2W2krMl0pXG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcblxuICAgICAgICAgICAgcCA9IHN0YXJ0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBwO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBzdG9wID0gbSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtLm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBtLnggJiZcbiAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoaHkgPCBtLnkgPyBoeCA6IHF4LCBoeSwgbS54LCBtLnksIGh5IDwgbS55ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxU2l6ZSA9PT0gMCB8fCAhcSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwLnogPD0gcS56KSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBzaXplIG9mIHRoZSBkYXRhIGJvdW5kaW5nIGJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlXG4gICAgeCA9IDMyNzY3ICogKHggLSBtaW5YKSAvIHNpemU7XG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAvIHNpemU7XG5cbiAgICB4ID0gKHggfCAoeCA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB4ID0gKHggfCAoeCA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnggPCBsZWZ0bW9zdC54KSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGVxdWFscyhhLCBiKSB8fCBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmXG4gICAgICAgICAgIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYik7XG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgcmV0dXJuIGFyZWEocDEsIHExLCBwMikgPiAwICE9PSBhcmVhKHAxLCBxMSwgcTIpID4gMCAmJlxuICAgICAgICAgICBhcmVhKHAyLCBxMiwgcDEpID4gMCAhPT0gYXJlYShwMiwgcTIsIHExKSA+IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGljZSBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0aWNlIG5vZGVzIGluIGEgcG9seWdvbiByaW5nXG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZVxuICAgIHRoaXMueiA9IG51bGw7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG5cbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuICAgIHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1xuLy8gV2Ugc3RvcmUgb3VyIEVFIG9iamVjdHMgaW4gYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gYH5gIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IG92ZXJyaWRkZW4gb3Jcbi8vIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vIFdlIGFsc28gYXNzdW1lIHRoYXQgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBldmVudCBuYW1lXG4vLyBpcyBhbiBFUzYgU3ltYm9sLlxuLy9cbnZhciBwcmVmaXggPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJyA/ICd+JyA6IGZhbHNlO1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIEV2ZW50RW1pdHRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgQ29udGV4dCBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgZW1pdCBvbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIE1pbmltYWwgRXZlbnRFbWl0dGVyIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkgeyAvKiBOb3RoaW5nIHRvIHNldCAqLyB9XG5cbi8qKlxuICogSG9sZHMgdGhlIGFzc2lnbmVkIEV2ZW50RW1pdHRlcnMgYnkgbmFtZS5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiBhIGxpc3Qgb2YgYXNzaWduZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZXhpc3RzIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7QXJyYXl8Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50LCBleGlzdHMpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGF2YWlsYWJsZSA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoZXhpc3RzKSByZXR1cm4gISFhdmFpbGFibGU7XG4gIGlmICghYXZhaWxhYmxlKSByZXR1cm4gW107XG4gIGlmIChhdmFpbGFibGUuZm4pIHJldHVybiBbYXZhaWxhYmxlLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGF2YWlsYWJsZS5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBhdmFpbGFibGVbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIEVtaXQgYW4gZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSW5kaWNhdGlvbiBpZiB3ZSd2ZSBlbWl0dGVkIGFuIGV2ZW50LlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyBFdmVudExpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdG9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgdGhpcylcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgdGhpcy5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lcjtcbiAgZWxzZSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XS5mbikgdGhpcy5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gICAgZWxzZSB0aGlzLl9ldmVudHNbZXZ0XSA9IFtcbiAgICAgIHRoaXMuX2V2ZW50c1tldnRdLCBsaXN0ZW5lclxuICAgIF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGFuIEV2ZW50TGlzdGVuZXIgdGhhdCdzIG9ubHkgY2FsbGVkIG9uY2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzLCB0cnVlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2Ugd2FudCB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgdGhhdCB3ZSBuZWVkIHRvIGZpbmQuXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IE9ubHkgcmVtb3ZlIGxpc3RlbmVycyBtYXRjaGluZyB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25jZSBsaXN0ZW5lcnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBldmVudHMgPSBbXTtcblxuICBpZiAoZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgIGxpc3RlbmVycy5mbiAhPT0gZm5cbiAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVycy5vbmNlKVxuICAgICAgICB8fCAoY29udGV4dCAmJiBsaXN0ZW5lcnMuY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuXG4gICAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKVxuICAgICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAvL1xuICBpZiAoZXZlbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW2V2dF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgb3Igb25seSB0aGUgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmVycyBmb3IuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKGV2ZW50KSBkZWxldGUgdGhpcy5fZXZlbnRzW3ByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRdO1xuICBlbHNlIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFwcGx5IGFueW1vcmUuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4ndXNlIHN0cmljdCc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiFcbiAqIGFzeW5jXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jXG4gKlxuICogQ29weXJpZ2h0IDIwMTAtMjAxNCBDYW9sYW4gTWNNYWhvblxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbi8qanNoaW50IG9uZXZhcjogZmFsc2UsIGluZGVudDo0ICovXG4vKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cbihmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXN5bmMgPSB7fTtcblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcm9vdCwgcHJldmlvdXNfYXN5bmM7XG5cbiAgICByb290ID0gdGhpcztcbiAgICBpZiAocm9vdCAhPSBudWxsKSB7XG4gICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWQpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkocm9vdCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8gY3Jvc3MtYnJvd3NlciBjb21wYXRpYmxpdHkgZnVuY3Rpb25zIC8vLy9cblxuICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgdmFyIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG5cbiAgICB2YXIgX2VhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBfbWFwID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgaWYgKGFyci5tYXApIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIubWFwKGl0ZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IoeCwgaSwgYSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHZhciBfcmVkdWNlID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIG1lbW8pIHtcbiAgICAgICAgaWYgKGFyci5yZWR1Y2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGl0ZXJhdG9yLCBtZW1vKTtcbiAgICAgICAgfVxuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICBtZW1vID0gaXRlcmF0b3IobWVtbywgeCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuXG4gICAgdmFyIF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgX2VhY2goYXJyLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgb25seV9vbmNlKGRvbmUpICk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2ggPSBhc3luYy5lYWNoO1xuXG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICB2YXIgaXRlcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGFycltjb21wbGV0ZWRdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID0gYXN5bmMuZWFjaFNlcmllcztcblxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZuID0gX2VhY2hMaW1pdChsaW1pdCk7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIFthcnIsIGl0ZXJhdG9yLCBjYWxsYmFja10pO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaExpbWl0ID0gYXN5bmMuZWFjaExpbWl0O1xuXG4gICAgdmFyIF9lYWNoTGltaXQgPSBmdW5jdGlvbiAobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgaWYgKCFhcnIubGVuZ3RoIHx8IGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVwbGVuaXNoICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiBzdGFydGVkIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoYXJyW3N0YXJ0ZWQgLSAxXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB2YXIgZG9QYXJhbGxlbCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvUGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKGxpbWl0LCBmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFtfZWFjaExpbWl0KGxpbWl0KV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBkb1NlcmllcyA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoU2VyaWVzXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBfYXN5bmNNYXAgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1t4LmluZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9tYXBMaW1pdChsaW1pdCkoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB2YXIgX21hcExpbWl0ID0gZnVuY3Rpb24obGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGRvUGFyYWxsZWxMaW1pdChsaW1pdCwgX2FzeW5jTWFwKTtcbiAgICB9O1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihtZW1vLCB4LCBmdW5jdGlvbiAoZXJyLCB2KSB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGluamVjdCBhbGlhc1xuICAgIGFzeW5jLmluamVjdCA9IGFzeW5jLnJlZHVjZTtcbiAgICAvLyBmb2xkbCBhbGlhc1xuICAgIGFzeW5jLmZvbGRsID0gYXN5bmMucmVkdWNlO1xuXG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSkucmV2ZXJzZSgpO1xuICAgICAgICBhc3luYy5yZWR1Y2UocmV2ZXJzZWQsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICAvLyBmb2xkciBhbGlhc1xuICAgIGFzeW5jLmZvbGRyID0gYXN5bmMucmVkdWNlUmlnaHQ7XG5cbiAgICB2YXIgX2ZpbHRlciA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LnZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG4gICAgYXN5bmMuZmlsdGVyU2VyaWVzID0gZG9TZXJpZXMoX2ZpbHRlcik7XG4gICAgLy8gc2VsZWN0IGFsaWFzXG4gICAgYXN5bmMuc2VsZWN0ID0gYXN5bmMuZmlsdGVyO1xuICAgIGFzeW5jLnNlbGVjdFNlcmllcyA9IGFzeW5jLmZpbHRlclNlcmllcztcblxuICAgIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLnJlamVjdCA9IGRvUGFyYWxsZWwoX3JlamVjdCk7XG4gICAgYXN5bmMucmVqZWN0U2VyaWVzID0gZG9TZXJpZXMoX3JlamVjdCk7XG5cbiAgICB2YXIgX2RldGVjdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIG1haW5fY2FsbGJhY2spIHtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKHgpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZGV0ZWN0ID0gZG9QYXJhbGxlbChfZGV0ZWN0KTtcbiAgICBhc3luYy5kZXRlY3RTZXJpZXMgPSBkb1NlcmllcyhfZGV0ZWN0KTtcblxuICAgIGFzeW5jLnNvbWUgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbnkgYWxpYXNcbiAgICBhc3luYy5hbnkgPSBhc3luYy5zb21lO1xuXG4gICAgYXN5bmMuZXZlcnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghdikge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gYWxsIGFsaWFzXG4gICAgYXN5bmMuYWxsID0gYXN5bmMuZXZlcnk7XG5cbiAgICBhc3luYy5zb3J0QnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgYXN5bmMubWFwKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAoZXJyLCBjcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHt2YWx1ZTogeCwgY3JpdGVyaWE6IGNyaXRlcmlhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoZm4pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGhcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldID09PSBmbikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdGFza0NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtYWluaW5nVGFza3MtLVxuICAgICAgICAgICAgX2VhY2gobGlzdGVuZXJzLnNsaWNlKDApLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIHZhciB0aGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZmluYWwgY2FsbGJhY2sgZnJvbSBjYWxsaW5nIGl0c2VsZiBpZiBpdCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdGhlQ2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9lYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKF9rZXlzKHJlc3VsdHMpLCBmdW5jdGlvbihya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIHN1YnNlcXVlbnQgZXJyb3JzIGhpdHRpbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUodGFza0NvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCBNYXRoLmFicyh0YXNrLmxlbmd0aCAtIDEpKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucmV0cnkgPSBmdW5jdGlvbih0aW1lcywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIERFRkFVTFRfVElNRVMgPSA1O1xuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcbiAgICAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHRpbWVzIG5vdCBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICAgICAgdGltZXMgPSBERUZBVUxUX1RJTUVTO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lcyBpcyBhIG51bWJlclxuICAgICAgICB0aW1lcyA9IHBhcnNlSW50KHRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgdmFyIHdyYXBwZWRUYXNrID0gZnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkUmVzdWx0cykge1xuICAgICAgICAgICAgdmFyIHJldHJ5QXR0ZW1wdCA9IGZ1bmN0aW9uKHRhc2ssIGZpbmFsQXR0ZW1wdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKGZ1bmN0aW9uKGVyciwgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKCFlcnIgfHwgZmluYWxBdHRlbXB0LCB7ZXJyOiBlcnIsIHJlc3VsdDogcmVzdWx0fSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXBwZWRSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcykge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KHRhc2ssICEodGltZXMtPTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBjYWxsYmFjaykoZGF0YS5lcnIsIGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrXG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJdGVyYXRvciA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGZ1bmN0aW9uKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGVhY2hmbi5tYXAodGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGVhY2hmbi5lYWNoKF9rZXlzKHRhc2tzKSwgZnVuY3Rpb24gKGssIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGFza3Nba10oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogYXN5bmMubWFwLCBlYWNoOiBhc3luYy5lYWNoIH0sIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogX21hcExpbWl0KGxpbWl0KSwgZWFjaDogX2VhY2hMaW1pdChsaW1pdCkgfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICBhc3luYy5tYXBTZXJpZXModGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5pdGVyYXRvciA9IGZ1bmN0aW9uICh0YXNrcykge1xuICAgICAgICB2YXIgbWFrZUNhbGxiYWNrID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmbi5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCB0YXNrcy5sZW5ndGggLSAxKSA/IG1ha2VDYWxsYmFjayhpbmRleCArIDEpOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KFxuICAgICAgICAgICAgICAgIG51bGwsIGFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgX2NvbmNhdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHIgPSByLmNvbmNhdCh5IHx8IFtdKTtcbiAgICAgICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRlc3QoKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLndoaWxzdCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvV2hpbHN0ID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAodGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMudW50aWwodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAoIXRlc3QuYXBwbHkobnVsbCwgYXJncykpIHtcbiAgICAgICAgICAgICAgICBhc3luYy5kb1VudGlsKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcG9zLCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxLnNhdHVyYXRlZCAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHEuZHJhaW4gPSBudWxsO1xuICAgICAgICAgICAgICBxLnRhc2tzID0gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gcS50YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocS5lbXB0eSAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLmRyYWluICYmIHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UobmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcih0YXNrLmRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSB0cnVlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSBxLmNvbmN1cnJlbmN5OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMucHJpb3JpdHlRdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG5cbiAgICAgICAgZnVuY3Rpb24gX2NvbXBhcmVUYXNrcyhhLCBiKXtcbiAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgIHZhciBiZWcgPSAtMSxcbiAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBzZXF1ZW5jZVttaWRdKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGJlZyA9IG1pZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiZWc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG5vcm1hbCBxdWV1ZVxuICAgICAgICB2YXIgcSA9IGFzeW5jLnF1ZXVlKHdvcmtlciwgY29uY3VycmVuY3kpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciB3b3JraW5nICAgICA9IGZhbHNlLFxuICAgICAgICAgICAgdGFza3MgICAgICAgPSBbXTtcblxuICAgICAgICB2YXIgY2FyZ28gPSB7XG4gICAgICAgICAgICB0YXNrczogdGFza3MsXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBudWxsLFxuICAgICAgICAgICAgZW1wdHk6IG51bGwsXG4gICAgICAgICAgICBkcmFpbjogbnVsbCxcbiAgICAgICAgICAgIGRyYWluZWQ6IHRydWUsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZ28uc2F0dXJhdGVkICYmIHRhc2tzLmxlbmd0aCA9PT0gcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ28uc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoY2FyZ28ucHJvY2Vzcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcygpIHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2luZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2FyZ28uZHJhaW4gJiYgIWNhcmdvLmRyYWluZWQpIGNhcmdvLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvLmRyYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRzID0gdHlwZW9mIHBheWxvYWQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0YXNrcy5zcGxpY2UoMCwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tzLnNwbGljZSgwLCB0YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRzID0gX21hcCh0cywgZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmKGNhcmdvLmVtcHR5KSBjYXJnby5lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHdvcmtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtlcihkcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JraW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKHRzLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjYXJnbztcbiAgICB9O1xuXG4gICAgdmFyIF9jb25zb2xlX2ZuID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZWFjaChhcmdzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbmFtZV0oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIG1lbW9ba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICBxW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfTtcblxuICAgIGFzeW5jLnVubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb3VudGVyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jLm1hcFNlcmllcyhjb3VudGVyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXEgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXN5bmMucmVkdWNlKGZucywgYXJncywgZnVuY3Rpb24gKG5ld2FyZ3MsIGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KFtmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1dKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy5jb21wb3NlID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICB2YXIgX2FwcGx5RWFjaCA9IGZ1bmN0aW9uIChlYWNoZm4sIGZucyAvKmFyZ3MuLi4qLykge1xuICAgICAgICB2YXIgZ28gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzLmNvbmNhdChbY2JdKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgICAgIHJldHVybiBnby5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuYXBwbHlFYWNoID0gZG9QYXJhbGxlbChfYXBwbHlFYWNoKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBkb1NlcmllcyhfYXBwbHlFYWNoKTtcblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbihuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsInZhciBhc3luYyAgICAgICA9IHJlcXVpcmUoJ2FzeW5jJyksXG4gICAgdXJsUGFyc2VyICAgPSByZXF1aXJlKCd1cmwnKSxcbiAgICBSZXNvdXJjZSAgICA9IHJlcXVpcmUoJy4vUmVzb3VyY2UnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgbXVsdGlwbGUgcmVzb3VyY2VzIHRvIGxvYWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KSB7XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICBjb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByb2dyZXNzIHBlcmNlbnQgb2YgdGhlIGxvYWRlciBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRpbmcgc3RhdGUgb2YgdGhlIGxvYWRlciwgdHJ1ZSBpZiBpdCBpcyBjdXJyZW50bHkgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdG90YWwgcHJvZ3Jlc3MgdGhhdCBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGJlZm9yZSBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaWRkbGV3YXJlIHRvIHJ1biBhZnRlciBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfbG9hZFJlc291cmNlYCBmdW5jdGlvbiBib3VuZCB3aXRoIHRoaXMgb2JqZWN0IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kTG9hZFJlc291cmNlID0gdGhpcy5fbG9hZFJlc291cmNlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkxvYWRgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkxvYWQgPSB0aGlzLl9vbkxvYWQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvdXJjZSBidWZmZXIgdGhhdCBmaWxscyB1bnRpbCBgbG9hZGAgaXMgY2FsbGVkIHRvIHN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB0cmFjayBsb2FkIGNvbXBsZXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9udW1Ub0xvYWQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlcyB3YWl0aW5nIHRvIGJlIGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2VbXX1cbiAgICAgKi9cbiAgICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX2JvdW5kTG9hZFJlc291cmNlLCBjb25jdXJyZW5jeSk7XG5cbiAgICAvKipcbiAgICAgKiBBbGwgdGhlIHJlc291cmNlcyBmb3IgdGhpcyBsb2FkZXIga2V5ZWQgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIFJlc291cmNlPn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgb3IgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwcm9ncmVzc1xuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGVycm9yZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGxvYWRlciBiZWdpbnMgdG8gcHJvY2VzcyB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBxdWV1ZWQgcmVzb3VyY2VzIGFsbCBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbi8qKlxuICogQWRkcyBhIHJlc291cmNlIChvciBtdWx0aXBsZSByZXNvdXJjZXMpIHRvIHRoZSBsb2FkZXIgcXVldWUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gdGFrZSBhIHdpZGUgdmFyaWV0eSBvZiBkaWZmZXJlbnQgcGFyYW1ldGVycy4gVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBhbHdheXNcbiAqIHJlcXVpcmVkIHRoZSB1cmwgdG8gbG9hZC4gQWxsIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOlxuICpcbiAqIGBgYGpzXG4gKiBsb2FkZXJcbiAqICAgICAvLyBub3JtYWwgcGFyYW0gc3ludGF4XG4gKiAgICAgLmFkZCgna2V5JywgJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJywgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCgnaHR0cDovLy4uLicpXG4gKlxuICogICAgIC8vIG9iamVjdCBzeW50YXhcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgbmFtZTogJ2tleTInLFxuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MycsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9XG4gKiAgICAgfSlcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgdXJsOiAnaHR0cHM6Ly8uLi4nLFxuICogICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7fSxcbiAqICAgICAgICAgY3Jvc3NPcmlnaW46IHRydWVcbiAqICAgICB9KVxuICpcbiAqICAgICAvLyB5b3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBvYmplY3RzIG9yIHVybHMgb3IgYm90aFxuICogICAgIC5hZGQoW1xuICogICAgICAgICB7IG5hbWU6ICdrZXk0JywgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgIHsgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgICdodHRwOi8vLi4uJ1xuICogICAgIF0pO1xuICogYGBgXG4gKlxuICogQGFsaWFzIGVucXVldWVcbiAqIEBwYXJhbSBbbmFtZV0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQsIGlmIG5vdCBwYXNzZWQgdGhlIHVybCBpcyB1c2VkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCByZWxhdGl2ZSB0byB0aGUgYmFzZVVybCBvZiB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7Ym9vbGVhbn0gSXMgdGhpcyByZXF1ZXN0IGNyb3NzLW9yaWdpbj8gRGVmYXVsdCBpcyB0byBkZXRlcm1pbmUgYXV0b21hdGljYWxseS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5sb2FkVHlwZT1SZXNvdXJjZS5MT0FEX1RZUEUuWEhSXSB7UmVzb3VyY2UuWEhSX0xPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGlzIHNwZWNpZmljIHJlc291cmNlIGNvbXBsZXRlcyBsb2FkaW5nLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFkZCA9IExvYWRlci5wcm90b3R5cGUuZW5xdWV1ZSA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIGNiKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIG9mIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hZGQobmFtZVtpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBpZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluc3RlYWQgb2YgcGFyYW1zXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYiA9IHVybCB8fCBuYW1lLmNhbGxiYWNrIHx8IG5hbWUub25Db21wbGV0ZTtcbiAgICAgICAgb3B0aW9ucyA9IG5hbWU7XG4gICAgICAgIHVybCA9IG5hbWUudXJsO1xuICAgICAgICBuYW1lID0gbmFtZS5uYW1lIHx8IG5hbWUua2V5IHx8IG5hbWUudXJsO1xuICAgIH1cblxuICAgIC8vIGNhc2Ugd2hlcmUgbm8gbmFtZSBpcyBwYXNzZWQgc2hpZnQgYWxsIGFyZ3Mgb3ZlciBieSBvbmUuXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHVybDtcbiAgICAgICAgdXJsID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBzaGlmdGVkIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIHVybC5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB1cmwgcGFzc2VkIHRvIGFkZCByZXNvdXJjZSB0byBsb2FkZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gb3B0aW9ucyBhcmUgb3B0aW9uYWwgc28gcGVvcGxlIG1pZ2h0IHBhc3MgYSBmdW5jdGlvbiBhbmQgbm8gb3B0aW9uc1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHJlc291cmNlIGFscmVhZHkgZXhpc3RzLlxuICAgIGlmICh0aGlzLnJlc291cmNlc1tuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc291cmNlIHdpdGggbmFtZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgIH1cblxuICAgIC8vIGFkZCBiYXNlIHVybCBpZiB0aGlzIGlzbid0IGFuIGFic29sdXRlIHVybFxuICAgIHVybCA9IHRoaXMuX2hhbmRsZUJhc2VVcmwodXJsKTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgc3RvcmUgdGhlIHJlc291cmNlXG4gICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0gPSBuZXcgUmVzb3VyY2UobmFtZSwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0ub25jZSgnYWZ0ZXJNaWRkbGV3YXJlJywgY2IpO1xuICAgIH1cblxuICAgIHRoaXMuX251bVRvTG9hZCsrO1xuXG4gICAgLy8gaWYgYWxyZWFkeSBsb2FkaW5nIGFkZCBpdCB0byB0aGUgd29ya2VyIHF1ZXVlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAoMTAwIC0gdGhpcy5wcm9ncmVzcykgLyAodGhpcy5fcXVldWUubGVuZ3RoKCkgKyB0aGlzLl9xdWV1ZS5ydW5uaW5nKCkpO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgYnVmZmVyIGl0IHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSBsYXRlclxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9idWZmZXIucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAxMDAgLyB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuTG9hZGVyLnByb3RvdHlwZS5faGFuZGxlQmFzZVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFyc2VkVXJsID0gdXJsUGFyc2VyLnBhcnNlKHVybCk7XG5cbiAgICAvLyBhYnNvbHV0ZSB1cmwsIGp1c3QgdXNlIGl0IGFzIGlzLlxuICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgfHwgcGFyc2VkVXJsLnBhdGhuYW1lLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBpZiBiYXNlVXJsIGRvZXNuJ3QgZW5kIGluIHNsYXNoIGFuZCB1cmwgZG9lc24ndCBzdGFydCB3aXRoIHNsYXNoLCB0aGVuIGFkZCBhIHNsYXNoIGluYmV0d2VlblxuICAgIGlmIChcbiAgICAgICAgdGhpcy5iYXNlVXJsLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmJhc2VVcmwubGFzdEluZGV4T2YoJy8nKSAhPT0gdGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgdXJsLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyAnLycgKyB1cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsICsgdXJsO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBTZXRzIHVwIGEgbWlkZGxld2FyZSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuICpiZWZvcmUqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyBwcmVcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYmVmb3JlID0gTG9hZGVyLnByb3RvdHlwZS5wcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLnB1c2goZm4pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmFmdGVyKiB0aGVcbiAqIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqXG4gKiBAYWxpYXMgdXNlXG4gKiBAcGFyYW0gbWlkZGxld2FyZSB7ZnVuY3Rpb259IFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFmdGVyID0gTG9hZGVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9hZnRlck1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoZSBxdWV1ZSBvZiB0aGUgbG9hZGVyIHRvIHByZXBhcmUgZm9yIGEgbmV3IGxvYWQuXG4gKlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvLyB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG4gICAgLy8gdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gICAgdGhpcy5fcXVldWUuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGxvYWRpbmcgdGhlIHF1ZXVlZCByZXNvdXJjZXMuXG4gKlxuICogQGZpcmVzIHN0YXJ0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgYGNvbXBsZXRlYCBldmVudC5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgLy8gcmVnaXN0ZXIgY29tcGxldGUgY2FsbGJhY2sgaWYgdGhleSBwYXNzIG9uZVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcXVldWUgaGFzIGFscmVhZHkgc3RhcnRlZCB3ZSBhcmUgZG9uZSBoZXJlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm90aWZ5IG9mIHN0YXJ0XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gc3RhcnQgdGhlIGludGVybmFsIHF1ZXVlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLl9idWZmZXJbaV0pO1xuICAgIH1cblxuICAgIC8vIGVtcHR5IHRoZSBidWZmZXJcbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBMb2FkcyBhIHNpbmdsZSByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX2xvYWRSZXNvdXJjZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZGVxdWV1ZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHJlc291cmNlLl9kZXF1ZXVlID0gZGVxdWV1ZTtcblxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gcmVzb3VyY2Uub24oJ3Byb2dyZXNzJywgc2VsZi5lbWl0LmJpbmQoc2VsZiwgJ3Byb2dyZXNzJykpO1xuXG4gICAgICAgIHJlc291cmNlLmxvYWQoc2VsZi5fYm91bmRPbkxvYWQpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgb25jZSBlYWNoIHJlc291cmNlIGhhcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzLCB0aGlzLnJlc291cmNlcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBlYWNoIHRpbWUgYSByZXNvdXJjZXMgaXMgbG9hZGVkLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQGZpcmVzIGVycm9yXG4gKiBAZmlyZXMgbG9hZFxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgdGhpcy5wcm9ncmVzcyArPSB0aGlzLl9wcm9ncmVzc0NodW5rO1xuXG4gICAgdGhpcy5lbWl0KCdwcm9ncmVzcycsIHRoaXMsIHJlc291cmNlKTtcblxuICAgIC8vIHJ1biBtaWRkbGV3YXJlLCB0aGlzICptdXN0KiBoYXBwZW4gYmVmb3JlIGRlcXVldWUgc28gc3ViLWFzc2V0cyBnZXQgYWRkZWQgcHJvcGVybHlcbiAgICB0aGlzLl9ydW5NaWRkbGV3YXJlKHJlc291cmNlLCB0aGlzLl9hZnRlck1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzb3VyY2UuZW1pdCgnYWZ0ZXJNaWRkbGV3YXJlJywgcmVzb3VyY2UpO1xuXG4gICAgICAgIHRoaXMuX251bVRvTG9hZC0tO1xuXG4gICAgICAgIC8vIGRvIGNvbXBsZXRpb24gY2hlY2tcbiAgICAgICAgaWYgKHRoaXMuX251bVRvTG9hZCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgIHRoaXMuX29uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc291cmNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgcmVzb3VyY2UuZXJyb3IsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZCcsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuXG5cbiAgICAvLyByZW1vdmUgdGhpcyByZXNvdXJjZSBmcm9tIHRoZSBhc3luYyBxdWV1ZVxuICAgIHJlc291cmNlLl9kZXF1ZXVlKCk7XG59O1xuXG4vKipcbiAqIFJ1biBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvbiBhIHJlc291cmNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX3J1bk1pZGRsZXdhcmUgPSBmdW5jdGlvbiAocmVzb3VyY2UsIGZucywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzKGZucywgZnVuY3Rpb24gKGZuLCBuZXh0KSB7XG4gICAgICAgIGZuLmNhbGwoc2VsZiwgcmVzb3VyY2UsIG5leHQpO1xuICAgIH0sIGNiLmJpbmQodGhpcywgcmVzb3VyY2UpKTtcbn07XG5cbkxvYWRlci5MT0FEX1RZUEUgPSBSZXNvdXJjZS5MT0FEX1RZUEU7XG5Mb2FkZXIuWEhSX1JFQURZX1NUQVRFID0gUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFO1xuTG9hZGVyLlhIUl9SRVNQT05TRV9UWVBFID0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEU7XG4iLCJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIF91cmwgPSByZXF1aXJlKCd1cmwnKSxcbiAgICAvLyB0ZXN0cyBpcyBDT1JTIGlzIHN1cHBvcnRlZCBpbiBYSFIsIGlmIG5vdCB3ZSBuZWVkIHRvIHVzZSBYRFJcbiAgICB1c2VYZHIgPSAhISh3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiAobmV3IFhNTEh0dHBSZXF1ZXN0KCkpKSksXG4gICAgdGVtcEFuY2hvciA9IG51bGw7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgYSBzaW5nbGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnlcbiAqIGEgc2luZ2xlIFVSTC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBuYW1lIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCBmb3IgYXVkaW8vdmlkZW8gbG9hZHMgeW91IGNhbiBwYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMuXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5jcm9zc09yaWdpbl0ge3N0cmluZ3xib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5MT0FEX1RZUEV9IEhvdyBzaG91bGQgdGhpcyByZXNvdXJjZSBiZSBsb2FkZWQ/XG4gKiBAcGFyYW0gW29wdGlvbnMueGhyVHlwZT1SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ERUZBVUxUXSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IEhvdyBzaG91bGQgdGhlIGRhdGEgYmVpbmdcbiAqICAgICAgbG9hZGVkIGJlIGludGVycHJldGVkIHdoZW4gdXNpbmcgWEhSP1xuICogQHBhcmFtIFtvcHRpb25zLm1ldGFkYXRhXSB7b2JqZWN0fSBFeHRyYSBpbmZvIGZvciBtaWRkbGV3YXJlLlxuICovXG5mdW5jdGlvbiBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggbmFtZSBhbmQgdXJsIGFyZSByZXF1aXJlZCBmb3IgY29uc3RydWN0aW5nIGEgcmVzb3VyY2UuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVybCB1c2VkIHRvIGxvYWQgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHVybCBpcyBhIGRhdGEgdXJsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzRGF0YVVybCA9IHRoaXMudXJsLmluZGV4T2YoJ2RhdGE6JykgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSB0aGF0IHdhcyBsb2FkZWQgYnkgdGhlIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55fVxuICAgICAqL1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBvcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJ2Fub255bW91cycgOiBvcHRpb25zLmNyb3NzT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCBvZiBsb2FkaW5nIHRvIHVzZSBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlLkxPQURfVFlQRX1cbiAgICAgKi9cbiAgICB0aGlzLmxvYWRUeXBlID0gb3B0aW9ucy5sb2FkVHlwZSB8fCB0aGlzLl9kZXRlcm1pbmVMb2FkVHlwZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgdXNlZCB0byBsb2FkIHRoZSByZXNvdXJjZSB2aWEgWEhSLiBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMueGhyVHlwZSA9IG9wdGlvbnMueGhyVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgKGlmIGFueSkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFcnJvcn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBYSFIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLiBUaGlzIGlzIG9ubHkgc2V0XG4gICAgICogd2hlbiBgbG9hZFR5cGVgIGlzIGBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1hNTEh0dHBSZXF1ZXN0fVxuICAgICAqL1xuICAgIHRoaXMueGhyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMganNvbi4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNKc29uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIHhtbC4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNYbWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gaW1hZ2UgdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0ltYWdlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGFuIGF1ZGlvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNBdWRpbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhIHZpZGVvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNWaWRlbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBkZXF1ZXVlYCBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgYSBzdG9yYWdlIHBsYWNlIGZvciB0aGUgYXN5bmMgcXVldWUgZGVxdWV1ZSBtZXRob2RcbiAgICAgKiB1c2VkIHByaXZhdGVseSBieSB0aGUgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kZXF1ZXVlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tcGxldGVgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZENvbXBsZXRlID0gdGhpcy5jb21wbGV0ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25FcnJvcmAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25FcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uUHJvZ3Jlc3NgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MgPSB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyk7XG5cbiAgICAvLyB4aHIgY2FsbGJhY2tzXG4gICAgdGhpcy5fYm91bmRYaHJPbkVycm9yID0gdGhpcy5feGhyT25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25BYm9ydCA9IHRoaXMuX3hock9uQWJvcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9ib3VuZFhock9uTG9hZCA9IHRoaXMuX3hock9uTG9hZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0ID0gdGhpcy5feGRyT25UaW1lb3V0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJlc291cmNlIGJlaW5ncyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBlYWNoIHRpbWUgcHJvZ3Jlc3Mgb2YgdGhpcyByZXNvdXJjZSBsb2FkIHVwZGF0ZXMuXG4gICAgICogTm90IGFsbCByZXNvdXJjZXMgdHlwZXMgYW5kIGxvYWRlciBzeXN0ZW1zIGNhbiBzdXBwb3J0IHRoaXMgZXZlbnRcbiAgICAgKiBzbyBzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIElmIHRoZSByZXNvdXJjZVxuICAgICAqIGlzIGJlaW5nIGxvYWRlZCBvbiBhIG1vZGVybiBicm93c2VyLCB1c2luZyBYSFIsIGFuZCB0aGUgcmVtb3RlIHNlcnZlclxuICAgICAqIHByb3Blcmx5IHNldHMgQ29udGVudC1MZW5ndGggaGVhZGVycywgdGhlbiB0aGlzIHdpbGwgYmUgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHRoaXMgcmVzb3VyY2UgaGFzIGxvYWRlZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGl0IHdpbGxcbiAgICAgKiBiZSBpbiB0aGUgYGVycm9yYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb21wbGV0ZVxuICAgICAqIEBtZW1iZXJvZiBSZXNvdXJjZSNcbiAgICAgKi9cbn1cblxuUmVzb3VyY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblJlc291cmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlc291cmNlO1xubW9kdWxlLmV4cG9ydHMgPSBSZXNvdXJjZTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgcmVzb3VyY2UgYXMgY29tcGxldGUuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIGluIGEgd3JhcHBlciBvciBzb21ldGhpbmcuLi5ncm9zcy4uLi5cbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvcik7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgICBpZiAodGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGhyLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub250aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMueGhyLm9ucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25sb2FkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogS2lja3Mgb2ZmIGxvYWRpbmcgb2YgdGhpcyByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gaWYgYSBjYWxsYmFjayBpcyBzZXQsIGxpc3RlbiBmb3IgY29tcGxldGUgZXZlbnRcbiAgICBpZiAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luID09PSBmYWxzZSB8fCB0eXBlb2YgdGhpcy5jcm9zc09yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHRoaXMuX2RldGVybWluZUNyb3NzT3JpZ2luKHRoaXMudXJsKTtcbiAgICB9XG5cbiAgICBzd2l0Y2godGhpcy5sb2FkVHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRTpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRJbWFnZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuQVVESU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlZJREVPOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5YSFI6XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodXNlWGRyICYmIHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGRyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGhyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEltYWdlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLnNyYyA9IHRoaXMudXJsO1xuXG4gICAgdGhpcy5pc0ltYWdlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBIVE1MQXVkaW9FbGVtZW50IG9yIEhUTUxWaWRlb0VsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdhdWRpbycgJiYgdHlwZW9mIEF1ZGlvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQXVkaW8oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBlbGVtZW50ICcgKyB0eXBlKTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBmb3IgQ29jb29uSlMgQ2FudmFzKyBydW50aW1lLCBsYWNrcyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKVxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUykge1xuICAgICAgICB0aGlzLmRhdGEuc3JjID0gQXJyYXkuaXNBcnJheSh0aGlzLnVybCkgPyB0aGlzLnVybFswXSA6IHRoaXMudXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51cmwpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXJsLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybFtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1snaXMnICsgdHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSldID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUsIGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YS5sb2FkKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhNTEh0dHBSZXF1ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBzZXQgdGhlIHJlcXVlc3QgdHlwZSBhbmQgdXJsXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsLCB0cnVlKTtcblxuICAgIC8vIGxvYWQganNvbiBhcyB0ZXh0IGFuZCBwYXJzZSBpdCBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgLy8gKmNvdWdoKiBzYWZhcmkgKmNvdWdoKiBjYW4ndCBkZWFsIHdpdGggaXQuXG4gICAgaWYgKHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTiB8fCB0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHRoaXMueGhyVHlwZTtcbiAgICB9XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkLCBmYWxzZSk7XG5cbiAgICB4aHIuc2VuZCgpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBYRG9tYWluUmVxdWVzdC4gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdXBwb3J0IElFOSAoZ3Jvc3MpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhkciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhkciA9IHRoaXMueGhyID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7XG5cbiAgICAvLyBYRG9tYWluUmVxdWVzdCBoYXMgYSBmZXcgcXVpcmtzLiBPY2Nhc2lvbmFsbHkgaXQgd2lsbCBhYm9ydCByZXF1ZXN0c1xuICAgIC8vIEEgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbWFrZSBzdXJlIEFMTCBjYWxsYmFja3MgYXJlIHNldCBldmVuIGlmIG5vdCB1c2VkXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU3ODY5NjYveGRvbWFpbnJlcXVlc3QtYWJvcnRzLXBvc3Qtb24taWUtOVxuICAgIHhkci50aW1lb3V0ID0gNTAwMDtcblxuICAgIHhkci5vbmVycm9yID0gdGhpcy5fYm91bmRYaHJPbkVycm9yO1xuICAgIHhkci5vbnRpbWVvdXQgPSB0aGlzLl9ib3VuZFhkck9uVGltZW91dDtcbiAgICB4ZHIub25wcm9ncmVzcyA9IHRoaXMuX2JvdW5kT25Qcm9ncmVzcztcbiAgICB4ZHIub25sb2FkID0gdGhpcy5fYm91bmRYaHJPbkxvYWQ7XG5cbiAgICB4ZHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gIE5vdGU6IFRoZSB4ZHIuc2VuZCgpIGNhbGwgaXMgd3JhcHBlZCBpbiBhIHRpbWVvdXQgdG8gcHJldmVudCBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmZhY2Ugd2hlcmUgc29tZSByZXF1ZXN0cyBhcmUgbG9zdFxuICAgIC8vICBpZiBtdWx0aXBsZSBYRG9tYWluUmVxdWVzdHMgYXJlIGJlaW5nIHNlbnQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAvLyBTb21lIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9pc3N1ZXMvMTI0OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB4ZHIuc2VuZCgpO1xuICAgIH0sIDApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc291cmNlIHVzZWQgaW4gbG9hZGluZyB2aWEgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSBUaGUgZWxlbWVudCB0eXBlICh2aWRlbyBvciBhdWRpbykuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSBzb3VyY2UgVVJMIHRvIGxvYWQgZnJvbS5cbiAqIEBwYXJhbSBbbWltZV0ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSBvZiB0aGUgdmlkZW9cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fY3JlYXRlU291cmNlID0gZnVuY3Rpb24gKHR5cGUsIHVybCwgbWltZSkge1xuICAgIGlmICghbWltZSkge1xuICAgICAgICBtaW1lID0gdHlwZSArICcvJyArIHVybC5zdWJzdHIodXJsLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gdXJsO1xuICAgIHNvdXJjZS50eXBlID0gbWltZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgZXJyb3JzIG91dC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgZXJyb3IgZXZlbnQgZnJvbSB0aGUgZWxlbWVudCB0aGF0IGVtaXRzIGl0LlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgZWxlbWVudCB1c2luZyAnICsgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgcHJvZ3Jlc3MgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fb25Qcm9ncmVzcyA9ICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGVycm9yIGV2ZW50IGZpcmVzIGZvciB4aHIveGRyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RFcnJvckV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIHJlcVR5cGUodGhpcy54aHIpICsgJyBSZXF1ZXN0IGZhaWxlZC4gJyArXG4gICAgICAgICdTdGF0dXM6ICcgKyB0aGlzLnhoci5zdGF0dXMgKyAnLCB0ZXh0OiBcIicgKyB0aGlzLnhoci5zdGF0dXNUZXh0ICsgJ1wiJ1xuICAgICk7XG5cbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhbiBhYm9ydCBldmVudCBmaXJlcyBmb3IgeGhyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RBYm9ydEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3Qgd2FzIGFib3J0ZWQgYnkgdGhlIHVzZXIuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYSB0aW1lb3V0IGV2ZW50IGZpcmVzIGZvciB4ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGRyT25UaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgdGltZWQgb3V0LicpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gZGF0YSBzdWNjZXNzZnVsbHkgbG9hZHMgZnJvbSBhbiB4aHIveGRyIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdExvYWRFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGhyT25Mb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB4aHIgPSB0aGlzLnhocixcbiAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1cyAhPT0gdW5kZWZpbmVkID8geGhyLnN0YXR1cyA6IDIwMDsgLy9YRFIgaGFzIG5vIGAuc3RhdHVzYCwgYXNzdW1lIDIwMC5cblxuICAgIC8vIHN0YXR1cyBjYW4gYmUgMCB3aGVuIHVzaW5nIHRoZSBmaWxlOi8vIHByb3RvY29sLCBhbHNvIGNoZWNrIGlmIGEgcmVzcG9uc2Ugd2FzIGZvdW5kXG4gICAgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA0IHx8IChzdGF0dXMgPT09IDAgJiYgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkge1xuICAgICAgICAvLyBpZiB0ZXh0LCBqdXN0IHJldHVybiBpdFxuICAgICAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGpzb24sIHBhcnNlIGludG8ganNvbiBvYmplY3RcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0pzb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGxvYWRlZCBqc29uOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHhtbCwgcGFyc2UgaW50byBhbiB4bWwgZG9jdW1lbnQgb3IgZGl2IGVsZW1lbnRcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LkRPTVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhoci5yZXNwb25zZVRleHQsICd0ZXh0L3htbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZGl2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzWG1sID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIHhtbDonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlciB0eXBlcyBqdXN0IHJldHVybiB0aGUgcmVzcG9uc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2UgfHwgeGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignWycgKyB4aHIuc3RhdHVzICsgJ10nICsgeGhyLnN0YXR1c1RleHQgKyAnOicgKyB4aHIucmVzcG9uc2VVUkwpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbmZ1bmN0aW9uIHJlcVR5cGUoeGhyKSB7XG4gICAgcmV0dXJuIHhoci50b1N0cmluZygpLnJlcGxhY2UoJ29iamVjdCAnLCAnJyk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYGNyb3NzT3JpZ2luYCBwcm9wZXJ0eSBmb3IgdGhpcyByZXNvdXJjZSBiYXNlZCBvbiBpZiB0aGUgdXJsXG4gKiBmb3IgdGhpcyByZXNvdXJjZSBpcyBjcm9zcy1vcmlnaW4uIElmIGNyb3NzT3JpZ2luIHdhcyBtYW51YWxseSBzZXQsIHRoaXNcbiAqIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIHRvIHRlc3QuXG4gKiBAcGFyYW0gW2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbl0ge29iamVjdH0gVGhlIGxvY2F0aW9uIG9iamVjdCB0byB0ZXN0IGFnYWluc3QuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjcm9zc09yaWdpbiB2YWx1ZSB0byB1c2UgKG9yIGVtcHR5IHN0cmluZyBmb3Igbm9uZSkuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbiAodXJsLCBsb2MpIHtcbiAgICAvLyBkYXRhOiBhbmQgamF2YXNjcmlwdDogdXJscyBhcmUgY29uc2lkZXJlZCBzYW1lLW9yaWdpblxuICAgIGlmICh1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBpcyB3aW5kb3cubG9jYXRpb25cbiAgICBsb2MgPSBsb2MgfHwgd2luZG93LmxvY2F0aW9uO1xuXG4gICAgaWYgKCF0ZW1wQW5jaG9yKSB7XG4gICAgICAgIHRlbXBBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgfVxuXG4gICAgLy8gbGV0IHRoZSBicm93c2VyIGRldGVybWluZSB0aGUgZnVsbCBocmVmIGZvciB0aGUgdXJsIG9mIHRoaXMgcmVzb3VyY2UgYW5kIHRoZW5cbiAgICAvLyBwYXJzZSB3aXRoIHRoZSBub2RlIHVybCBsaWIsIHdlIGNhbid0IHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgICAvLyBiZWNhdXNlIHRoZXkgZG9uJ3Qgd29yayBpbiBJRTkgOihcbiAgICB0ZW1wQW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgdXJsID0gX3VybC5wYXJzZSh0ZW1wQW5jaG9yLmhyZWYpO1xuXG4gICAgdmFyIHNhbWVQb3J0ID0gKCF1cmwucG9ydCAmJiBsb2MucG9ydCA9PT0gJycpIHx8ICh1cmwucG9ydCA9PT0gbG9jLnBvcnQpO1xuXG4gICAgLy8gaWYgY3Jvc3Mgb3JpZ2luXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gbG9jLmhvc3RuYW1lIHx8ICFzYW1lUG9ydCB8fCB1cmwucHJvdG9jb2wgIT09IGxvYy5wcm90b2NvbCkge1xuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZXNwb25zZVR5cGUgb2YgYW4gWEhSIHJlcXVlc3QgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGVcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSByZXNwb25zZVR5cGUgdG8gdXNlLlxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZVhoclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlc291cmNlLl94aHJUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVMb2FkVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX2xvYWRUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXMudXJsLFxuICAgICAgICBleHQ7XG5cbiAgICBpZiAodGhpcy5pc0RhdGFVcmwpIHtcbiAgICAgICAgdmFyIHNsYXNoSW5kZXggPSB1cmwuaW5kZXhPZignLycpO1xuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHNsYXNoSW5kZXggKyAxLCB1cmwuaW5kZXhPZignOycsIHNsYXNoSW5kZXgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBxdWVyeVN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXh0ID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQ7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG1pbWUgdHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgcmVzcG9uc2VUeXBlIG9mXG4gKiByZXNvdXJjZSBiZWluZyBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZ2V0TWltZUZyb21YaHJUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5JztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0I6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2Jsb2InO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQ6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCc7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQ6XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVDpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG5cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsb2FkaW5nIGEgcmVzb3VyY2UgY2FuIHVzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBMT0FEX1RZUEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuWEhSIC0gVXNlcyBYTUxIdHRwUmVxdWVzdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuSU1BR0UgLSBVc2VzIGFuIGBJbWFnZWAgb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5BVURJTyAtIFVzZXMgYW4gYEF1ZGlvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLlZJREVPIC0gVXNlcyBhIGBWaWRlb2Agb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICovXG5SZXNvdXJjZS5MT0FEX1RZUEUgPSB7XG4gICAgWEhSOiAgICAxLFxuICAgIElNQUdFOiAgMixcbiAgICBBVURJTzogIDMsXG4gICAgVklERU86ICA0XG59O1xuXG4vKipcbiAqIFRoZSBYSFIgcmVhZHkgc3RhdGVzLCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gWEhSX1JFQURZX1NUQVRFXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLlVOU0VOVCAtIG9wZW4oKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5PUEVORUQgLSBzZW5kKCloYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuSEVBREVSU19SRUNFSVZFRCAtIHNlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuTE9BRElORyAtIERvd25sb2FkaW5nOyByZXNwb25zZVRleHQgaG9sZHMgcGFydGlhbCBkYXRhLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5ET05FIC0gVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFID0ge1xuICAgIFVOU0VOVDogMCxcbiAgICBPUEVORUQ6IDEsXG4gICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICBMT0FESU5HOiAzLFxuICAgIERPTkU6IDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVTUE9OU0VfVFlQRVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQgLSBkZWZhdWx0cyB0byB0ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSIC0gQXJyYXlCdWZmZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CTE9CIC0gQmxvYlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UIC0gRG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5KU09OIC0gT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCAtIFN0cmluZ1xuICovXG5SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRSA9IHtcbiAgICBERUZBVUxUOiAgICAndGV4dCcsXG4gICAgQlVGRkVSOiAgICAgJ2FycmF5YnVmZmVyJyxcbiAgICBCTE9COiAgICAgICAnYmxvYicsXG4gICAgRE9DVU1FTlQ6ICAgJ2RvY3VtZW50JyxcbiAgICBKU09OOiAgICAgICAnanNvbicsXG4gICAgVEVYVDogICAgICAgJ3RleHQnXG59O1xuXG5SZXNvdXJjZS5fbG9hZFR5cGVNYXAgPSB7XG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnYm1wJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGdhJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0Vcbn07XG5cblJlc291cmNlLl94aHJUeXBlTWFwID0ge1xuICAgIC8vIHhtbFxuICAgICd4aHRtbCc6ICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG1sJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG0nOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd4bWwnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0bXgnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0c3gnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdzdmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuXG4gICAgLy8gaW1hZ2VzXG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAncG5nJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBlZyc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnd2VicCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG5cbiAgICAvLyBqc29uXG4gICAgJ2pzb24nOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTixcblxuICAgIC8vIHRleHRcbiAgICAndGV4dCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhULFxuICAgICd0eHQnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFRcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSBsb2FkVHlwZSB7UmVzb3VyY2UuTE9BRF9UWVBFfSBUaGUgbG9hZCB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uTG9hZFR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgbG9hZFR5cGUpIHtcbiAgICBzZXRFeHRNYXAoUmVzb3VyY2UuX2xvYWRUeXBlTWFwLCBleHRuYW1lLCBsb2FkVHlwZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGxvYWQgdHlwZSB0byBiZSB1c2VkIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZXh0bmFtZSB7c3RyaW5nfSBUaGUgZXh0ZW5zaW9uIHRvIHNldCB0aGUgdHlwZSBmb3IsIGUuZy4gXCJwbmdcIiBvciBcImZudFwiXG4gKiBAcGFyYW0geGhyVHlwZSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSB4aHIgdHlwZSB0byBzZXQgaXQgdG8uXG4gKi9cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgeGhyVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5feGhyVHlwZU1hcCwgZXh0bmFtZSwgeGhyVHlwZSk7XG59O1xuXG5mdW5jdGlvbiBzZXRFeHRNYXAobWFwLCBleHRuYW1lLCB2YWwpIHtcbiAgICBpZiAoZXh0bmFtZSAmJiBleHRuYW1lLmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICBleHRuYW1lID0gZXh0bmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRuYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYXBbZXh0bmFtZV0gPSB2YWw7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIHByaXZhdGUgcHJvcGVydHlcbiAgICBfa2V5U3RyOiBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIsXG5cbiAgICBlbmNvZGVCaW5hcnk6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICAgICAgdmFyIGJ5dGVidWZmZXI7XG4gICAgICAgIHZhciBlbmNvZGVkQ2hhckluZGV4ZXMgPSBuZXcgQXJyYXkoNCk7XG4gICAgICAgIHZhciBpbnggPSAwO1xuICAgICAgICB2YXIgam54ID0gMDtcbiAgICAgICAgdmFyIHBhZGRpbmdCeXRlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmlsbCBieXRlIGJ1ZmZlciBhcnJheVxuICAgICAgICAgICAgYnl0ZWJ1ZmZlciA9IG5ldyBBcnJheSgzKTtcbiAgICAgICAgICAgIGZvciAoam54ID0gMDsgam54IDwgYnl0ZWJ1ZmZlci5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhd2F5IGhpZ2gtb3JkZXIgYnl0ZSwgYXMgZG9jdW1lbnRlZCBhdDpcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1MSHR0cFJlcXVlc3QjSGFuZGxpbmdfYmluYXJ5X2RhdGFcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gaW5wdXQuY2hhckNvZGVBdChpbngrKykgJiAweGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCBlYWNoIGVuY29kZWQgY2hhcmFjdGVyLCA2IGJpdHMgYXQgYSB0aW1lXG4gICAgICAgICAgICAvLyBpbmRleCAxOiBmaXJzdCA2IGJpdHNcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1swXSA9IGJ5dGVidWZmZXJbMF0gPj4gMjtcbiAgICAgICAgICAgIC8vIGluZGV4IDI6IHNlY29uZCA2IGJpdHMgKDIgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMSArIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAyKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzFdID0gKChieXRlYnVmZmVyWzBdICYgMHgzKSA8PCA0KSB8IChieXRlYnVmZmVyWzFdID4+IDQpO1xuICAgICAgICAgICAgLy8gaW5kZXggMzogdGhpcmQgNiBiaXRzICg0IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBpbnB1dCBieXRlIDIgKyAyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1syXSA9ICgoYnl0ZWJ1ZmZlclsxXSAmIDB4MGYpIDw8IDIpIHwgKGJ5dGVidWZmZXJbMl0gPj4gNik7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiBmb3J0aCA2IGJpdHMgKDYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IGJ5dGVidWZmZXJbMl0gJiAweDNmO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBwYWRkaW5nIGhhcHBlbmVkLCBhbmQgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBwYWRkaW5nQnl0ZXMgPSBpbnggLSAoaW5wdXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhZGRpbmdCeXRlcykge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxhc3QgMiBjaGFyYWN0ZXJzIHRvIHBhZGRpbmcgY2hhclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbM10gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCBjaGFyYWN0ZXIgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBObyBwYWRkaW5nIC0gcHJvY2VlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb3cgd2Ugd2lsbCBncmFiIGVhY2ggYXBwcm9wcmlhdGUgY2hhcmFjdGVyIG91dCBvZiBvdXIga2V5c3RyaW5nXG4gICAgICAgICAgICAvLyBiYXNlZCBvbiBvdXIgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCBpdCB0byB0aGUgb3V0cHV0IHN0cmluZ1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBlbmNvZGVkQ2hhckluZGV4ZXMubGVuZ3RoOyBqbngrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSB0aGlzLl9rZXlTdHIuY2hhckF0KGVuY29kZWRDaGFySW5kZXhlc1tqbnhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vTG9hZGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJlc291cmNlID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5taWRkbGV3YXJlID0ge1xuICAgIGNhY2hpbmc6IHtcbiAgICAgICAgbWVtb3J5OiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL2NhY2hpbmcvbWVtb3J5JylcbiAgICB9LFxuICAgIHBhcnNpbmc6IHtcbiAgICAgICAgYmxvYjogcmVxdWlyZSgnLi9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2InKVxuICAgIH1cbn07XG4iLCIvLyBhIHNpbXBsZSBpbi1tZW1vcnkgY2FjaGUgZm9yIHJlc291cmNlc1xudmFyIGNhY2hlID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgLy8gaWYgY2FjaGVkLCB0aGVuIHNldCBkYXRhIGFuZCBjb21wbGV0ZSB0aGUgcmVzb3VyY2VcbiAgICAgICAgaWYgKGNhY2hlW3Jlc291cmNlLnVybF0pIHtcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBjYWNoZVtyZXNvdXJjZS51cmxdO1xuICAgICAgICAgICAgcmVzb3VyY2UuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBub3QgY2FjaGVkLCB3YWl0IGZvciBjb21wbGV0ZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlLm9uY2UoJ2NvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgY2FjaGVbdGhpcy51cmxdID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJy4uLy4uL1Jlc291cmNlJyksXG4gICAgYjY0ID0gcmVxdWlyZSgnLi4vLi4vYjY0Jyk7XG5cbndpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cbi8vIGEgbWlkZGxld2FyZSBmb3IgdHJhbnNmb3JtaW5nIFhIUiBsb2FkZWQgQmxvYnMgaW50byBtb3JlIHVzZWZ1bCBvYmplY3RzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgYW4gWEhSIGxvYWQgb2YgYSBibG9iXG4gICAgICAgIGlmIChyZXNvdXJjZS54aHIgJiYgcmVzb3VyY2UueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQikge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYmxvYiBzdXBwb3J0IHdlIHByb2JhYmx5IGdvdCBhIGJpbmFyeSBzdHJpbmcgYmFja1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuQmxvYiB8fCB0eXBlb2YgcmVzb3VyY2UuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlc291cmNlLnhoci5nZXRSZXNwb25zZUhlYWRlcignY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGltYWdlLCBjb252ZXJ0IHRoZSBiaW5hcnkgc3RyaW5nIGludG8gYSBkYXRhIHVybFxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIHR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gJ2RhdGE6JyArIHR5cGUgKyAnO2Jhc2U2NCwnICsgYjY0LmVuY29kZUJpbmFyeShyZXNvdXJjZS54aHIucmVzcG9uc2VUZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5pc0ltYWdlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IHVudGlsIHRoZSBpbWFnZSBsb2FkcyBhbmQgdGhlbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnQgdHlwZSBzYXlzIHRoaXMgaXMgYW4gaW1hZ2UsIHRoZW4gd2Ugc2hvdWxkIHRyYW5zZm9ybSB0aGUgYmxvYiBpbnRvIGFuIEltYWdlIG9iamVjdFxuICAgICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UuZGF0YS50eXBlLmluZGV4T2YoJ2ltYWdlJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXNvdXJjZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmJsb2IgPSByZXNvdXJjZS5kYXRhO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLnNyYyA9IHNyYztcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCB0aGUgbm8gbG9uZ2VyIHVzZWQgYmxvYiBhZnRlciB0aGUgaW1hZ2UgbG9hZHNcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChzcmMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwicGl4aS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIzLjAuMTAtZGV2XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJQaXhpLmpzIGlzIGEgZmFzdCBsaWdodHdlaWdodCAyRCBsaWJyYXJ5IHRoYXQgd29ya3MgYWNyb3NzIGFsbCBkZXZpY2VzLlwiLFxuICBcImF1dGhvclwiOiBcIk1hdCBHcm92ZXNcIixcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIFwiQ2hhZCBFbmdsZXIgPGNoYWRAcGFudGhlcmRldi5jb20+XCIsXG4gICAgXCJSaWNoYXJkIERhdmV5IDxyZGF2ZXlAZ21haWwuY29tPlwiXG4gIF0sXG4gIFwibWFpblwiOiBcIi4vc3JjL2luZGV4LmpzXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ29vZGJveWRpZ2l0YWwuY29tL1wiLFxuICBcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzXCIsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJzdGFydFwiOiBcImd1bHAgJiYgZ3VscCB3YXRjaFwiLFxuICAgIFwidGVzdFwiOiBcImd1bHAgJiYgdGVzdGVtIGNpXCIsXG4gICAgXCJidWlsZFwiOiBcImd1bHBcIixcbiAgICBcImRvY3NcIjogXCJqc2RvYyAtYyAuL2d1bHAvdXRpbC9qc2RvYy5jb25mLmpzb24gLVIgUkVBRE1FLm1kXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW4vXCIsXG4gICAgXCJzcmMvXCIsXG4gICAgXCJDT05UUklCVVRJTkcubWRcIixcbiAgICBcIkxJQ0VOU0VcIixcbiAgICBcInBhY2thZ2UuanNvblwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYXN5bmNcIjogXCJeMS41LjBcIixcbiAgICBcImJyZnNcIjogXCJeMS40LjFcIixcbiAgICBcImVhcmN1dFwiOiBcIl4yLjAuN1wiLFxuICAgIFwiZXZlbnRlbWl0dGVyM1wiOiBcIl4xLjEuMVwiLFxuICAgIFwiZ2wtbWF0cml4XCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS90b2ppL2dsLW1hdHJpeC5naXRcIixcbiAgICBcIm9iamVjdC1hc3NpZ25cIjogXCJeNC4wLjFcIixcbiAgICBcInBpeGktZ2wtY29yZVwiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vR29vZEJveURpZ2l0YWwvcGl4aS1nbC1jb3JlLmdpdFwiLFxuICAgIFwicmVzb3VyY2UtbG9hZGVyXCI6IFwiXjEuNi40XCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYnJvd3NlcmlmeVwiOiBcIl4xMS4xLjBcIixcbiAgICBcImNoYWlcIjogXCJeMy4yLjBcIixcbiAgICBcImRlbFwiOiBcIl4yLjAuMlwiLFxuICAgIFwiZ3VscFwiOiBcIl4zLjkuMFwiLFxuICAgIFwiZ3VscC1jYWNoZWRcIjogXCJeMS4xLjBcIixcbiAgICBcImd1bHAtY29uY2F0XCI6IFwiXjIuNi4wXCIsXG4gICAgXCJndWxwLWRlYnVnXCI6IFwiXjIuMS4wXCIsXG4gICAgXCJndWxwLWhlYWRlclwiOiBcIl4xLjcuMVwiLFxuICAgIFwiZ3VscC1qc2hpbnRcIjogXCJeMS4xMS4yXCIsXG4gICAgXCJndWxwLW1pcnJvclwiOiBcIl4wLjQuMFwiLFxuICAgIFwiZ3VscC1wbHVtYmVyXCI6IFwiXjEuMC4xXCIsXG4gICAgXCJndWxwLXJlbmFtZVwiOiBcIl4xLjIuMlwiLFxuICAgIFwiZ3VscC1zb3VyY2VtYXBzXCI6IFwiXjEuNS4yXCIsXG4gICAgXCJndWxwLXVnbGlmeVwiOiBcIl4xLjQuMVwiLFxuICAgIFwiZ3VscC11dGlsXCI6IFwiXjMuMC42XCIsXG4gICAgXCJqYWd1YXJqcy1qc2RvY1wiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vZGF2aWRzaGltanMvamFndWFyanMtanNkb2MuZ2l0XCIsXG4gICAgXCJqc2RvY1wiOiBcIl4zLjMuMlwiLFxuICAgIFwianNoaW50LXN1bW1hcnlcIjogXCJeMC40LjBcIixcbiAgICBcIm1pbmltaXN0XCI6IFwiXjEuMi4wXCIsXG4gICAgXCJtb2NoYVwiOiBcIl4yLjMuMlwiLFxuICAgIFwicmVxdWlyZS1kaXJcIjogXCJeMC4zLjBcIixcbiAgICBcInJ1bi1zZXF1ZW5jZVwiOiBcIl4xLjEuMlwiLFxuICAgIFwidGVzdGVtXCI6IFwiXjAuOS40XCIsXG4gICAgXCJ2aW55bC1idWZmZXJcIjogXCJeMS4wLjBcIixcbiAgICBcInZpbnlsLXNvdXJjZS1zdHJlYW1cIjogXCJeMS4xLjBcIixcbiAgICBcIndhdGNoaWZ5XCI6IFwiXjMuNC4wXCJcbiAgfSxcbiAgXCJicm93c2VyaWZ5XCI6IHtcbiAgICBcInRyYW5zZm9ybVwiOiBbXG4gICAgICBcImJyZnNcIlxuICAgIF1cbiAgfVxufVxuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8vIGFkZCBzb21lIGV4dHJhIHZhcmlhYmxlcyB0byB0aGUgY29udGFpbmVyLi5cbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKVxuKTtcblxuXG4vKipcbiAqIFRoZSBBY2Nlc3NpYmlsaXR5IG1hbmFnZXIgcmVhY3JlYXRlcyB0aGUgYWJpbGl0eSB0byB0YWIgYW5kIGFuZCBoYXZlIGNvbnRlbnQgcmVhZCBieSBzY3JlZW4gcmVhZGVycy4gVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCBhcyBpdCBjYW4gcG9zc2libHkgaGVscCBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMgYWNjZXNzIHBpeGkgY29udGVudC5cbiAqIE11Y2ggbGlrZSBpbnRlcmFjdGlvbiBhbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgbWFkZSBhY2Nlc3NpYmxlLiBUaGlzIG1hbmFnZXIgd2lsbCBtYXAgdGhlIGV2ZW50cyBhcyBpZiB0aGUgbW91c2Ugd2FzIGJlaW5nIHVzZWQsIG1pbmltaXppbmcgdGhlIGVmZmVyb3QgcmVxdWlyZWQgdG8gaW1wbGVtZW50LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyXG4gKi9cbmZ1bmN0aW9uIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKHJlbmRlcmVyKVxue1xuXHQvLyBmaXJzdCB3ZSBjcmVhdGUgYSBkaXYgdGhhdCB3aWxsIHNpdCBvdmVyIHRoZSBwaXhpIGVsZW1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGRpdiBvdmVybGF5cyB3aWxsIGdvLlxuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBcbiAgICBkaXYuc3R5bGUud2lkdGggPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgZGl2LnN0eWxlLnRvcCA9IDA7XG4gICAgZGl2LnN0eWxlLmxlZnQgPSAwO1xuICAgLy9cbiAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcbiAgIFx0XG4gICBcdC8qKlxuICAgXHQgKiBUaGlzIGlzIHRoZSBkb20gZWxlbWVudCB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuICAgXHR0aGlzLmRpdiA9IGRpdjtcblxuICAgXHQvKipcbiAgIFx0ICogQSBzaW1wbGUgcG9vbCBmb3Igc3RvcmluZyBkaXZzLlxuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0FycmF5fVxuICAgXHQgKiBAcHJpdmF0ZVxuICAgXHQgKi9cbiBcdHRoaXMucG9vbCA9IFtdO1xuXG4gXHQvKipcbiBcdCAqIFRoaXMgaXMgYSB0aWNrIHVzZWQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIG5vIGxvbmdlciBiZWluZyByZW5kZXJlZC5cbiBcdCAqIFxuIFx0ICogQHR5cGUge051bWJlcn1cbiBcdCAqIEBwcml2YXRlXG4gXHQgKi9cbiAgIFx0dGhpcy5yZW5kZXJJZCA9IDA7XG5cbiAgIFx0LyoqXG4gICBcdCAqIFNldHRpbmcgdGhpcyB0byB0cnVlIHdpbGwgdmlzdWFsbHkgc2hvdyB0aGUgZGl2c1xuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0Jvb2xlYW59XG4gICBcdCAqL1xuICAgXHR0aGlzLmRlYnVnID0gZmFsc2U7XG5cbiAgXHQvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBhY2Nlc3NpYmlsaXR5IG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgIFx0dGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICBcdC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjdXJyZW50bHkgYWN0aXZlIGFjY2Vzc2libGUgaXRlbXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgXHR0aGlzLmNoaWxkcmVuID0gW107XG4gICBcdFxuICAgXHQvKipcbiAgICAgKiBwcmUgYmluZCB0aGUgZnVuY3Rpb25zLi5cbiAgICAgKi9cbiAgIFx0dGhpcy5fb25LZXlEb3duID0gdGhpcy5fb25LZXlEb3duLmJpbmQodGhpcyk7XG4gICBcdHRoaXMuX29uTW91c2VNb3ZlID0gdGhpcy5fb25Nb3VzZU1vdmUuYmluZCh0aGlzKTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHN0b3JlcyB0aGUgc3RhdGUgb2YgdGhlIG1hbmFnZXIuIElmIHRoZXJlIGFyZSBubyBhY2Nlc3NpYmxlIG9iamVjdHMgb3IgdGhlIG1vdXNlIGlzIG1vdmluZyB0aGUgd2lsbCBiZSBmYWxzZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcblxuXG4gICBcdC8vIGxldCBsaXN0ZW4gZm9yIHRhYi4uIG9uY2UgcHJlc3NlZCB3ZSBjYW4gZmlyZSB1cCBhbmQgc2hvdyB0aGUgYWNjZXNzaWJpbGl0eSBsYXllclxuICAgXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xufVxuXG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBBY2Nlc3NpYmlsaXR5TWFuYWdlcjtcblxuLyoqXG4gKiBBY3RpdmF0aW5nIHdpbGwgY2F1c2UgdGhlIEFjY2Vzc2liaWxpdHkgbGF5ZXIgdG8gYmUgc2hvd24uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIHByZXNlcyB0aGUgdGFiIGtleVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IHRydWU7XG5cblx0d2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCB0cnVlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9uKCdwb3N0cmVuZGVyJywgdGhpcy51cGRhdGUsIHRoaXMpO1xuXG5cdHRoaXMucmVuZGVyZXIudmlldy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuZGl2KTtcdFxufTtcblxuLyoqXG4gKiBEZWFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBoaWRkZW4uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIG1vdmVzIHRoZSBtb3VzZVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmRlYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKCF0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG5cblx0dGhpcy5yZW5kZXJlci5vZmYoJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSk7XG5cblx0dGhpcy5kaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmRpdik7XG5cbn07XG5cbi8qKlxuICogVGhpcyByZWN1cnNpdmUgZnVuY3Rpb24gd2lsbCBydW4gdGhyb3VnaHQgaGUgc2NlbmUgZ3JhcGggYW5kIGFkZCBhbnkgbmV3IGFjY2Vzc2libGUgb2JqZWN0cyB0byB0aGUgRE9NIGxheWVyLlxuICogQHBhcmFtIGVsZW1lbnQge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIERpc3BsYXlPYmplY3QgdG8gY2hlY2suXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlQWNjZXNzaWJsZU9iamVjdHMgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuXHRpZighZGlzcGxheU9iamVjdC52aXNpYmxlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYoZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlICYmIGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG5cdHtcblx0XHRpZighZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZUFjdGl2ZSlcblx0XHR7XG5cdFx0XHR0aGlzLmFkZENoaWxkKGRpc3BsYXlPYmplY3QpO1xuXHRcdH1cblx0ICAgXHRcblx0ICAgXHRkaXNwbGF5T2JqZWN0LnJlbmRlcklkID0gdGhpcy5yZW5kZXJJZDtcblx0fVxuXG5cdHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG5cblx0Zm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XG5cdFx0dGhpcy51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyhjaGlsZHJlbltpXSk7XG5cdH1cbn07XG5cblxuLyoqXG4gKiBCZWZvcmUgZWFjaCByZW5kZXIgdGhpcyBmdW5jdGlvbiB3aWxsIGVuc3VyZSB0aGF0IGFsbCBkaXZzIGFyZSBtYXBwZWQgY29ycmVjdGx5IHRvIHRoZWlyIERpc3BsYXlPYmplY3RzXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oKVxue1xuXG5cdC8vIHVwZGF0ZSBjaGlsZHJlbi4uLlxuXHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCk7XG5cblx0dmFyIHJlY3QgPSB0aGlzLnJlbmRlcmVyLnZpZXcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdHZhciBzeCA9IHJlY3Qud2lkdGggIC8gdGhpcy5yZW5kZXJlci53aWR0aDtcblx0dmFyIHN5ID0gcmVjdC5oZWlnaHQgLyB0aGlzLnJlbmRlcmVyLmhlaWdodDtcblxuXHR2YXIgZGl2ID0gdGhpcy5kaXY7XG5cblx0ZGl2LnN0eWxlLmxlZnQgPSByZWN0LmxlZnQgKyAncHgnO1xuXHRkaXYuc3R5bGUudG9wID0gcmVjdC50b3AgKyAncHgnO1xuXHRkaXYuc3R5bGUud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoICsgJ3B4Jztcblx0ZGl2LnN0eWxlLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0ICsgJ3B4JztcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblxuXHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cblx0XHRpZihjaGlsZC5yZW5kZXJJZCAhPT0gdGhpcy5yZW5kZXJJZClcblx0XHR7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGksIDEpO1xuXHRcdFx0dGhpcy5kaXYucmVtb3ZlQ2hpbGQoIGNoaWxkLl9hY2Nlc3NpYmxlRGl2ICk7XG5cdFx0XHR0aGlzLnBvb2wucHVzaChjaGlsZC5fYWNjZXNzaWJsZURpdik7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZURpdiA9IG51bGw7XG5cblx0XHRcdGktLTtcblxuXHRcdFx0aWYodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0Ly8gbWFwIGRpdiB0byBkaXNwbGF5Li5cblx0XHRcdGRpdiA9IGNoaWxkLl9hY2Nlc3NpYmxlRGl2O1xuXHRcdFx0dmFyIGhpdEFyZWEgPSBjaGlsZC5oaXRBcmVhO1xuXHRcdFx0dmFyIHd0ID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cblx0XHRcdGlmKGNoaWxkLmhpdEFyZWEpXG5cdFx0XHR7XG5cdFx0XHRcdGRpdi5zdHlsZS5sZWZ0ID0gKCh3dC50eCArIChoaXRBcmVhLnggKiB3dC5hKSkgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gICgod3QudHkgKyAoaGl0QXJlYS55ICogd3QuZCkpICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiB3dC5hICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLmhlaWdodCA9IChoaXRBcmVhLmhlaWdodCAqIHd0LmQgKiBzeSkgKyAncHgnO1xuXHRcdFx0XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdGhpdEFyZWEgPSBjaGlsZC5nZXRCb3VuZHMoKTtcblxuXHRcdFx0XHR0aGlzLmNhcEhpdEFyZWEoaGl0QXJlYSk7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoaGl0QXJlYS54ICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLnRvcCA9ICAoaGl0QXJlYS55ICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogc3kpICsgJ3B4Jztcblx0XHRcdH1cdFx0XG5cdFx0fVxuXHR9XG5cblx0Ly8gaW5jcmVtZW50IHRoZSByZW5kZXIgaWQuLlxuXHR0aGlzLnJlbmRlcklkKys7XG59O1xuXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuY2FwSGl0QXJlYSA9IGZ1bmN0aW9uIChoaXRBcmVhKVxue1xuICAgIGlmIChoaXRBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS53aWR0aCArPSBoaXRBcmVhLng7XG4gICAgICAgIGhpdEFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGhpdEFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCArPSBoaXRBcmVhLnk7XG4gICAgICAgIGhpdEFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBoaXRBcmVhLnggKyBoaXRBcmVhLndpZHRoID4gdGhpcy5yZW5kZXJlci53aWR0aCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoID0gdGhpcy5yZW5kZXJlci53aWR0aCAtIGhpdEFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueSArIGhpdEFyZWEuaGVpZ2h0ID4gdGhpcy5yZW5kZXJlci5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmhlaWdodCAtIGhpdEFyZWEueTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogQWRkcyBhIERpc3BsYXlPYmplY3QgdG8gdGhlIGFjY2Vzc2liaWxpdHkgbWFuYWdlclxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24oZGlzcGxheU9iamVjdClcbntcbi8vXHR0aGlzLmFjdGl2YXRlKCk7XG5cdFxuXHR2YXIgZGl2ID0gdGhpcy5wb29sLnBvcCgpO1xuXG5cdGlmKCFkaXYpXG5cdHtcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgXG5cblx0ICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG5cdCAgICBkaXYuc3R5bGUuaGVpZ2h0ID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmRlYnVnID8gJ3JnYmEoMjU1LDAsMCwwLjUpJyA6ICd0cmFuc3BhcmVudCc7XG5cdCAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXHQgICAgZGl2LnN0eWxlLnpJbmRleCA9IDI7XG5cdCAgICBkaXYuc3R5bGUuYm9yZGVyU3R5bGUgPSAnbm9uZSc7XG5cblx0ICAgIFxuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGljay5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKSk7XG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCB0aGlzLl9vbkZvY3VzT3V0LmJpbmQodGhpcykpO1xuXHR9XG5cdCAgIFx0XG5cblxuXG5cdGRpdi50aXRsZSA9IGRpc3BsYXlPYmplY3QuYWNjZXNzaWJsZVRpdGxlIHx8ICdkaXNwbGF5T2JqZWN0ICcgKyB0aGlzLnRhYkluZGV4O1xuXG5cdC8vXG5cdFxuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlID0gdHJ1ZTtcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiA9IGRpdjtcblx0ZGl2LmRpc3BsYXlPYmplY3QgPSBkaXNwbGF5T2JqZWN0O1xuXG5cblx0dGhpcy5jaGlsZHJlbi5wdXNoKGRpc3BsYXlPYmplY3QpO1xuXHR0aGlzLmRpdi5hcHBlbmRDaGlsZCggZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiApO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2LnRhYkluZGV4ID0gZGlzcGxheU9iamVjdC50YWJJbmRleDtcbn07XG5cblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgYnV0dG9uIHByZXNzIHRvIHBpeGkncyBJbnRlcmFjdGlvbk1hbmFnZXIgKGNsaWNrKVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkNsaWNrID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ2NsaWNrJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW92ZXIpXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uRm9jdXMgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW91dClcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1c091dCA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIGtleSBpcyBwcmVzc2VkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbktleURvd24gPSBmdW5jdGlvbihlKVxue1xuXHRpZihlLmtleUNvZGUgIT09IDkpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmFjdGl2YXRlKCk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uTW91c2VNb3ZlID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmRlYWN0aXZhdGUoKTtcbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKlxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIFxue1xuXHR0aGlzLmRpdiA9IG51bGw7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHR7XG5cdFx0dGhpcy5jaGlsZHJlbltpXS5kaXYgPSBudWxsO1xuXHR9XG5cblx0XG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duKTtcblx0XHRcblx0dGhpcy5wb29sID0gbnVsbDtcblx0dGhpcy5jaGlsZHJlbiA9IG51bGw7XG5cdHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdhY2Nlc3NpYmlsaXR5JywgQWNjZXNzaWJpbGl0eU1hbmFnZXIpO1xuXG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGFjY2Vzc2libGUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlNYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5hY2Nlc3NpYmlsaXR5LmFjY2Vzc2libGVUYXJnZXRcbiAqICAgICAgKTtcbiAqL1xudmFyIGFjY2Vzc2libGVUYXJnZXQgPSB7XG4gICAgXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlOmZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlVGl0bGU6bnVsbCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgdGFiSW5kZXg6MCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVBY3RpdmU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIF9hY2Nlc3NpYmxlRGl2OmZhbHNlXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYWNjZXNzaWJsZVRhcmdldDtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGFjY2Vzc2liaWxpdHkgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGFjY2Vzc2libGVUYXJnZXQ6ICAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKSxcbiAgICBBY2Nlc3NpYmlsaXR5TWFuYWdlcjogcmVxdWlyZSgnLi9BY2Nlc3NpYmlsaXR5TWFuYWdlcicpXG59O1xuIiwiLyoqXG4gKiBDb25zdGFudCB2YWx1ZXMgdXNlZCBpbiBwaXhpXG4gKlxuICogQGxlbmRzIFBJWElcbiAqL1xudmFyIENPTlNUID0ge1xuICAgIC8qKlxuICAgICAqIFN0cmluZyBvZiB0aGUgY3VycmVudCBQSVhJIHZlcnNpb25cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gVkVSU0lPTlxuICAgICAqL1xuICAgIFZFUlNJT046IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb24sXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUElfMiAtIFR3byBQaVxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBQSV8yOiBNYXRoLlBJICogMixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSQURfVE9fREVHIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgcmFkaWFucyB0byBkZWdyZWVzXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFJBRF9UT19ERUc6IDE4MCAvIE1hdGguUEksXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge051bWJlcn0gREVHX1RPX1JBRCAtIENvbnN0YW50IGNvbnZlcnNpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIGRlZ3JlZXMgdG8gcmFkaWFuc1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBERUdfVE9fUkFEOiBNYXRoLlBJIC8gMTgwLFxuXG4gICAgLyoqXG4gICAgICogVGFyZ2V0IGZyYW1lcyBwZXIgbWlsbGlzZWNvbmQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFRBUkdFVF9GUE1TPTAuMDZcbiAgICAgKi9cbiAgICBUQVJHRVRfRlBNUzogMC4wNixcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IHRvIGlkZW50aWZ5IHRoZSBSZW5kZXJlciBUeXBlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBSRU5ERVJFUl9UWVBFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuVU5LTk9XTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLldFQkdMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuQ0FOVkFTXG4gICAgICovXG4gICAgUkVOREVSRVJfVFlQRToge1xuICAgICAgICBVTktOT1dOOiAgICAwLFxuICAgICAgICBXRUJHTDogICAgICAxLFxuICAgICAgICBDQU5WQVM6ICAgICAyXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFZhcmlvdXMgYmxlbmQgbW9kZXMgc3VwcG9ydGVkIGJ5IFBJWEkuIElNUE9SVEFOVCAtIFRoZSBXZWJHTCByZW5kZXJlciBvbmx5IHN1cHBvcnRzXG4gICAgICogdGhlIE5PUk1BTCwgQURELCBNVUxUSVBMWSBhbmQgU0NSRUVOIGJsZW5kIG1vZGVzLiBBbnl0aGluZyBlbHNlIHdpbGwgc2lsZW50bHkgYWN0IGxpa2VcbiAgICAgKiBOT1JNQUwuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IEJMRU5EX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5BRERcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTVVMVElQTFlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0NSRUVOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk9WRVJMQVlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuREFSS0VOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkxJR0hURU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfQlVSTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IQVJEX0xJR0hUXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNPRlRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuRElGRkVSRU5DRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5FWENMVVNJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuSFVFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNBVFVSQVRJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTFVNSU5PU0lUWVxuICAgICAqL1xuICAgIEJMRU5EX01PREVTOiB7XG4gICAgICAgIE5PUk1BTDogICAgICAgICAwLFxuICAgICAgICBBREQ6ICAgICAgICAgICAgMSxcbiAgICAgICAgTVVMVElQTFk6ICAgICAgIDIsXG4gICAgICAgIFNDUkVFTjogICAgICAgICAzLFxuICAgICAgICBPVkVSTEFZOiAgICAgICAgNCxcbiAgICAgICAgREFSS0VOOiAgICAgICAgIDUsXG4gICAgICAgIExJR0hURU46ICAgICAgICA2LFxuICAgICAgICBDT0xPUl9ET0RHRTogICAgNyxcbiAgICAgICAgQ09MT1JfQlVSTjogICAgIDgsXG4gICAgICAgIEhBUkRfTElHSFQ6ICAgICA5LFxuICAgICAgICBTT0ZUX0xJR0hUOiAgICAgMTAsXG4gICAgICAgIERJRkZFUkVOQ0U6ICAgICAxMSxcbiAgICAgICAgRVhDTFVTSU9OOiAgICAgIDEyLFxuICAgICAgICBIVUU6ICAgICAgICAgICAgMTMsXG4gICAgICAgIFNBVFVSQVRJT046ICAgICAxNCxcbiAgICAgICAgQ09MT1I6ICAgICAgICAgIDE1LFxuICAgICAgICBMVU1JTk9TSVRZOiAgICAgMTZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyB3ZWJnbCBkcmF3IG1vZGVzLiBUaGVzZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIEdMIGRyYXdNb2RlIHRvIHVzZVxuICAgICAqIHVuZGVyIGNlcnRhaW4gc2l0dWF0aW9ucyBhbmQgcmVuZGVyZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBEUkFXX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuUE9JTlRTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX0xPT1BcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX1NUUklQXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9GQU5cbiAgICAgKi9cbiAgICBEUkFXX01PREVTOiB7XG4gICAgICAgIFBPSU5UUzogICAgICAgICAwLFxuICAgICAgICBMSU5FUzogICAgICAgICAgMSxcbiAgICAgICAgTElORV9MT09QOiAgICAgIDIsXG4gICAgICAgIExJTkVfU1RSSVA6ICAgICAzLFxuICAgICAgICBUUklBTkdMRVM6ICAgICAgNCxcbiAgICAgICAgVFJJQU5HTEVfU1RSSVA6IDUsXG4gICAgICAgIFRSSUFOR0xFX0ZBTjogICA2XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgcGl4aS5cbiAgICAgKlxuICAgICAqIFRoZSBERUZBVUxUIHNjYWxlIG1vZGUgYWZmZWN0cyB0aGUgZGVmYXVsdCBzY2FsaW5nIG1vZGUgb2YgZnV0dXJlIG9wZXJhdGlvbnMuXG4gICAgICogSXQgY2FuIGJlIHJlLWFzc2lnbmVkIHRvIGVpdGhlciBMSU5FQVIgb3IgTkVBUkVTVCwgZGVwZW5kaW5nIHVwb24gc3VpdGFiaWxpdHkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNDQUxFX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkRFRkFVTFQ9TElORUFSXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkxJTkVBUiBTbW9vdGggc2NhbGluZ1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5ORUFSRVNUIFBpeGVsYXRpbmcgc2NhbGluZ1xuICAgICAqL1xuICAgIFNDQUxFX01PREVTOiB7XG4gICAgICAgIERFRkFVTFQ6ICAgIDAsXG4gICAgICAgIExJTkVBUjogICAgIDAsXG4gICAgICAgIE5FQVJFU1Q6ICAgIDFcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHByZWZpeCB0aGF0IGRlbm90ZXMgYSBVUkwgaXMgZm9yIGEgcmV0aW5hIGFzc2V0XG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFJFVElOQV9QUkVGSVhcbiAgICAgKi9cbiAgICAvL2V4YW1wbGU6ICdAMngnLFxuICAgIFJFVElOQV9QUkVGSVg6IC9AKC4rKXgvLFxuXG4gICAgUkVTT0xVVElPTjoxLFxuXG4gICAgRklMVEVSX1JFU09MVVRJT046MSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHJlbmRlciBvcHRpb25zIGlmIG5vbmUgYXJlIHN1cHBsaWVkIHRvIHtAbGluayBQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICogb3Ige0BsaW5rIFBJWEkuQ2FudmFzUmVuZGVyZXJ9LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TXG4gICAgICogQHByb3BlcnR5IHtIVE1MQ2FudmFzRWxlbWVudH0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy52aWV3PW51bGxcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMudHJhbnNwYXJlbnQ9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuYW50aWFsaWFzPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmZvcmNlRlhBQT1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5yZXNvbHV0aW9uPTFcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hdXRvUmVzaXplPWZhbHNlXG4gICAgICovXG4gICAgREVGQVVMVF9SRU5ERVJfT1BUSU9OUzoge1xuICAgICAgICB2aWV3OiBudWxsLFxuICAgICAgICByZXNvbHV0aW9uOiAxLFxuICAgICAgICBhbnRpYWxpYXM6IGZhbHNlLFxuICAgICAgICBmb3JjZUZYQUE6IGZhbHNlLFxuICAgICAgICBhdXRvUmVzaXplOiBmYWxzZSxcbiAgICAgICAgdHJhbnNwYXJlbnQ6IGZhbHNlLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IDB4MDAwMDAwLFxuICAgICAgICBjbGVhckJlZm9yZVJlbmRlcjogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBmYWxzZSxcbiAgICAgICAgcm91bmRQaXhlbHM6IGZhbHNlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50cyB0aGF0IGlkZW50aWZ5IHNoYXBlcywgbWFpbmx5IHRvIHByZXZlbnQgYGluc3RhbmNlb2ZgIGNhbGxzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVNcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlBPTFk9MFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUkVDVD0xXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5DSVJDPTJcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkVMSVA9M1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUlJFQz00XG4gICAgICovXG4gICAgU0hBUEVTOiB7XG4gICAgICAgIFBPTFk6IDAsXG4gICAgICAgIFJFQ1Q6IDEsXG4gICAgICAgIENJUkM6IDIsXG4gICAgICAgIEVMSVA6IDMsXG4gICAgICAgIFJSRUM6IDRcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogbWF5YmUgY2hhbmdlIHRvIFNQUklURS5CQVRDSF9TSVpFOiAyMDAwXG4gICAgLy8gVE9ETzogbWF5YmUgYWRkIFBBUlRJQ0xFLkJBVENIX1NJWkU6IDE1MDAwXG4gICAgU1BSSVRFX0JBVENIX1NJWkU6IDIwMDAgLy9uaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgYW5kIGRlc2t0b3AgbWFjaGluZXNcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ09OU1Q7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgRGlzcGxheU9iamVjdCA9IHJlcXVpcmUoJy4vRGlzcGxheU9iamVjdCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIENvbnRhaW5lciByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBkaXNwbGF5IG9iamVjdHMuXG4gKiBJdCBpcyB0aGUgYmFzZSBjbGFzcyBvZiBhbGwgZGlzcGxheSBvYmplY3RzIHRoYXQgYWN0IGFzIGEgY29udGFpbmVyIGZvciBvdGhlciBvYmplY3RzLlxuICpcbiAqYGBganNcbiAqIHZhciBjb250YWluZXIgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogYGBgXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuRGlzcGxheU9iamVjdFxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ29udGFpbmVyKClcbntcbiAgICBEaXNwbGF5T2JqZWN0LmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3RbXX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5Db250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSk7XG5Db250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb250YWluZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnRhaW5lci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG5cbiAgICAgICAgICAgIGlmICh3aWR0aCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IDE7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmIChoZWlnaHQgIT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyBoZWlnaHQgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogT3ZlcnJpZGFibGUgbWV0aG9kIHRoYXQgY2FuIGJlIHVzZWQgYnkgQ29udGFpbmVyIHN1YmNsYXNzZXMgd2hlbmV2ZXIgdGhlIGNoaWxkcmVuIGFycmF5IGlzIG1vZGlmaWVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5vbkNoaWxkcmVuQ2hhbmdlID0gZnVuY3Rpb24gKCkge307XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIuXG4gKiBcbiAqIFlvdSBjYW4gYWxzbyBhZGQgbXVsdHBsZSBpdGVtcyBsaWtlIHNvOiBteUNvbnRhaW5lci5hZGRDaGlsZCh0aGlua09uZSwgdGhpbmdUd28sIHRoaW5nVGhyZWUpXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gYWRkIHRvIHRoZSBjb250YWluZXJcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxueyBcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IHdlIGNhbiBieXBhc3MgbG9vcGluZyB0aHJvdWdoIHRoZSB0aGVtXG4gICAgaWYoYXJndW1lbnRzTGVuZ3RoID4gMSlcbiAgICB7XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgYXJndW1lbnRzIHByb3BlcnR5IGFuZCBhZGQgYWxsIGNoaWxkcmVuXG4gICAgICAgIC8vIHVzZSBpdCB0aGUgcmlnaHQgd2F5ICgubGVuZ3RoIGFuZCBbaV0pIHNvIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc3RpbGwgYmUgb3B0aW1pc2VkIGJ5IEpTIHJ1bnRpbWVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoIGFyZ3VtZW50c1tpXSApO1xuICAgICAgICB9XG4gICAgfSAgICAgXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIGNoaWxkIGhhcyBhIHBhcmVudCB0aGVuIGxldHMgcmVtb3ZlIGl0IGFzIFBpeGkgb2JqZWN0cyBjYW4gb25seSBleGlzdCBpbiBvbmUgcGxhY2VcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKHRoaXMuY2hpbGRyZW4ubGVuZ3RoLTEpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIgYXQgYSBzcGVjaWZpZWQgaW5kZXguIElmIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0byBhZGRcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gcGxhY2UgdGhlIGNoaWxkIGluXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyBhZGRlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5hZGRDaGlsZEF0ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuXG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNoaWxkICsgJ2FkZENoaWxkQXQ6IFRoZSBpbmRleCAnKyBpbmRleCArJyBzdXBwbGllZCBpcyBvdXQgb2YgYm91bmRzICcgKyB0aGlzLmNoaWxkcmVuLmxlbmd0aCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBTd2FwcyB0aGUgcG9zaXRpb24gb2YgMiBEaXNwbGF5IE9iamVjdHMgd2l0aGluIHRoaXMgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGNoaWxkMiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnN3YXBDaGlsZHJlbiA9IGZ1bmN0aW9uIChjaGlsZCwgY2hpbGQyKVxue1xuICAgIGlmIChjaGlsZCA9PT0gY2hpbGQyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbmRleDEgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuICAgIHZhciBpbmRleDIgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQyKTtcblxuICAgIGlmIChpbmRleDEgPCAwIHx8IGluZGV4MiA8IDApXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N3YXBDaGlsZHJlbjogQm90aCB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdHMgbXVzdCBiZSBjaGlsZHJlbiBvZiB0aGUgY2FsbGVyLicpO1xuICAgIH1cblxuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgxXSA9IGNoaWxkMjtcbiAgICB0aGlzLmNoaWxkcmVuW2luZGV4Ml0gPSBjaGlsZDtcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgxIDwgaW5kZXgyID8gaW5kZXgxIDogaW5kZXgyKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW5kZXggcG9zaXRpb24gb2YgYSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIHRvIGlkZW50aWZ5XG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3QgdG8gaWRlbnRpZnlcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBtdXN0IGJlIGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgcG9zaXRpb24gb2YgYW4gZXhpc3RpbmcgY2hpbGQgaW4gdGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgRGlzcGxheU9iamVjdCBpbnN0YW5jZSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBpbmRleCBudW1iZXJcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgcmVzdWx0aW5nIGluZGV4IG51bWJlciBmb3IgdGhlIGNoaWxkIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc2V0Q2hpbGRJbmRleCA9IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN1cHBsaWVkIGluZGV4IGlzIG91dCBvZiBib3VuZHMnKTtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudEluZGV4ID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkKTtcblxuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGN1cnJlbnRJbmRleCwgMSk7IC8vIHJlbW92ZSBmcm9tIG9sZCBwb3NpdGlvblxuICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7IC8vYWRkIGF0IG5ldyBwb3NpdGlvblxuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNoaWxkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhcbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgYXRcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIGF0IHRoZSBnaXZlbiBpbmRleCwgaWYgYW55LlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkQXQgPSBmdW5jdGlvbiAoaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0Q2hpbGRBdDogU3VwcGxpZWQgaW5kZXggJyArIGluZGV4ICsgJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY2hpbGQgbGlzdCwgb3IgdGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3QgaXMgbm90IGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2luZGV4XTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVtb3ZlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyByZW1vdmVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuXG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYSBjaGlsZCBmcm9tIHRoZSBzcGVjaWZpZWQgaW5kZXggcG9zaXRpb24uXG4gKlxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBnZXQgdGhlIGNoaWxkIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICB2YXIgY2hpbGQgPSB0aGlzLmdldENoaWxkQXQoaW5kZXgpO1xuXG4gICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpbmRleCwgMSk7XG5cbiAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICBjaGlsZC5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGNoaWxkcmVuIGZyb20gdGhpcyBjb250YWluZXIgdGhhdCBhcmUgd2l0aGluIHRoZSBiZWdpbiBhbmQgZW5kIGluZGV4ZXMuXG4gKlxuICogQHBhcmFtIGJlZ2luSW5kZXgge251bWJlcn0gVGhlIGJlZ2lubmluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyAwLlxuICogQHBhcmFtIGVuZEluZGV4IHtudW1iZXJ9IFRoZSBlbmRpbmcgcG9zaXRpb24uIERlZmF1bHQgdmFsdWUgaXMgc2l6ZSBvZiB0aGUgY29udGFpbmVyLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkcmVuID0gZnVuY3Rpb24gKGJlZ2luSW5kZXgsIGVuZEluZGV4KVxue1xuICAgIHZhciBiZWdpbiA9IGJlZ2luSW5kZXggfHwgMDtcbiAgICB2YXIgZW5kID0gdHlwZW9mIGVuZEluZGV4ID09PSAnbnVtYmVyJyA/IGVuZEluZGV4IDogdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgdmFyIHJhbmdlID0gZW5kIC0gYmVnaW47XG4gICAgdmFyIHJlbW92ZWQsIGk7XG5cbiAgICBpZiAocmFuZ2UgPiAwICYmIHJhbmdlIDw9IGVuZClcbiAgICB7XG4gICAgICAgIHJlbW92ZWQgPSB0aGlzLmNoaWxkcmVuLnNwbGljZShiZWdpbiwgcmFuZ2UpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW1vdmVkW2ldLnBhcmVudCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoYmVnaW5JbmRleCk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0uZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbW92ZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJhbmdlID09PSAwICYmIHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigncmVtb3ZlQ2hpbGRyZW46IG51bWVyaWMgdmFsdWVzIGFyZSBvdXRzaWRlIHRoZSBhY2NlcHRhYmxlIHJhbmdlLicpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb24gYWxsIGNoaWxkcmVuIG9mIHRoaXMgY29udGFpbmVyIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0gPSBDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgQ29udGFpbmVyIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIGFsbCB2aXNpYmxlIGNoaWxkcmVuIGludG8gY29uc2lkZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE8gdGhlIGJvdW5kcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHRoaXMgcmVuZGVyIHNlc3Npb24gc28gcmV0dXJuIHdoYXQgd2UgaGF2ZVxuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBjaGlsZEJvdW5kcztcbiAgICAgICAgdmFyIGNoaWxkTWF4WDtcbiAgICAgICAgdmFyIGNoaWxkTWF4WTtcblxuICAgICAgICB2YXIgY2hpbGRWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZFZpc2libGUgPSB0cnVlO1xuXG4gICAgICAgICAgICBjaGlsZEJvdW5kcyA9IHRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIG1pblggPSBtaW5YIDwgY2hpbGRCb3VuZHMueCA/IG1pblggOiBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgbWluWSA9IG1pblkgPCBjaGlsZEJvdW5kcy55ID8gbWluWSA6IGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIGNoaWxkTWF4WCA9IGNoaWxkQm91bmRzLndpZHRoICsgY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIGNoaWxkTWF4WSA9IGNoaWxkQm91bmRzLmhlaWdodCArIGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIG1heFggPSBtYXhYID4gY2hpbGRNYXhYID8gbWF4WCA6IGNoaWxkTWF4WDtcbiAgICAgICAgICAgIG1heFkgPSBtYXhZID4gY2hpbGRNYXhZID8gbWF4WSA6IGNoaWxkTWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGRWaXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG5Db250YWluZXIucHJvdG90eXBlLmNvbnRhaW5lckdldEJvdW5kcyA9IENvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbm9uLWdsb2JhbCBsb2NhbCBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS5cbiAqIFRoZSBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXhDYWNoZSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0aC5NYXRyaXguSURFTlRJVFk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0cml4Q2FjaGU7XG5cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyggbWF0aC5NYXRyaXguSURFTlRJVFkgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcblxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGksIGo7XG5cbiAgICAvLyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgbWFzayBvciBhIGZpbHRlci5cbiAgICBpZiAodGhpcy5fbWFzayB8fCB0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgLy8gcHVzaCBmaWx0ZXIgZmlyc3QgYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIGNvcnJlY3QgZm9yIGFueSBtYXNraW5nXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzICYmIHRoaXMuX2ZpbHRlcnMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGhpcywgdGhpcy5fZmlsdGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcblxuICAgICAgICAvLyBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIGJhdGNoLCBvbmx5IHJlbmRlcmVkIGlmIGl0IGhhcyBhIHRleHR1cmUuXG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgbWFrZSBzdXJlIHRoZXkgZ2V0IHJlbmRlcmVkXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJXZWJHTChyZW5kZXJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayh0aGlzLCB0aGlzLl9tYXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBzaW1wbGUgcmVuZGVyIGNoaWxkcmVuIVxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gdGhpcyBpcyB3aGVyZSBjb250ZW50IGl0c2VsZiBnZXRzIHJlbmRlcmVkLi4uXG59O1xuXG4vKipcbiAqIFRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzXG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy5hbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hc2spXG4gICAge1xuICAgICAgICByZW5kZXJlci5tYXNrTWFuYWdlci5wdXNoTWFzayh0aGlzLl9tYXNrLCByZW5kZXJlcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayhyZW5kZXJlcik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUNoaWxkcmVuKVxue1xuICAgIERpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGlmIChkZXN0cm95Q2hpbGRyZW4pXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLmRlc3Ryb3koZGVzdHJveUNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xufTtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBUcmFuc2Zvcm0gPSByZXF1aXJlKCcuL1RyYW5zZm9ybVN0YXRpYycpLFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB3b3JsZEFscGhhOjEsIGNoaWxkcmVuOltdfTtcblxuXG4vKipcbiAqIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCBvbiB0aGUgc2NyZWVuLlxuICogVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIG9uIGl0cyBvd24gcmF0aGVyIGl0IHNob3VsZCBiZSBleHRlbmRlZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIEV2ZW50RW1pdHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gRGlzcGxheU9iamVjdCgpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb29yZGluYXRlIG9mIHRoZSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLnRyYW5zZm9ybS5wb3NpdGlvbjtcbiAgIC8vIHRoaXMuX3Bvc2l0aW9uID0gbmV3IENhY2hlUG9pbnQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHBpdm90IHBvaW50IG9mIHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgaXQgcm90YXRlcyBhcm91bmRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5waXZvdCA9IHRoaXMudHJhbnNmb3JtLnBpdm90XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBza2V3IGZhY3RvciBmb3IgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNrZXcgPSB0aGlzLnRyYW5zZm9ybS5za2V3XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3JvdGF0aW9uID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcGFjaXR5IG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgb2JqZWN0LiBJZiBmYWxzZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGRyYXduLCBhbmRcbiAgICAgKiB0aGUgdXBkYXRlVHJhbnNmb3JtIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENhbiB0aGlzIG9iamVjdCBiZSByZW5kZXJlZCwgaWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biBidXQgdGhlIHVwZGF0ZVRyYW5zZm9ybVxuICAgICAqIG1ldGhvZHMgd2lsbCBzdGlsbCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyIHRoYXQgY29udGFpbnMgdGhpcyBkaXNwbGF5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ29udGFpbmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtdWx0aXBsaWVkIGFscGhhIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgdHJhbnNmb3JtIG9mIHRoZSBvYmplY3QgYmFzZWQgb24gd29ybGQgKHBhcmVudCkgZmFjdG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS5sb2NhbFRyYW5zZm9ybTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcmVhIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0by4gVGhpcyBpcyB1c2VkIGFzIG1vcmUgb2YgYW4gb3B0aW1pc2F0aW9uXG4gICAgICogcmF0aGVyIHRoYW4gZmlndXJpbmcgb3V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGVhY2ggZnJhbWUgeW91IGNhbiBzZXQgdGhpcyByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW9zdCB1cC10by1kYXRlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgbWFzayBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gIC8vICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxheU9iamVjdDtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNjYWxlWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcm90YXRpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uZGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX2NyID0gTWF0aC5jb3ModmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBzcHJpdGUgaXMgZ2xvYmFsbHkgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB3b3JsZFZpc2libGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udmlzaWJsZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICB9IHdoaWxlIChpdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIG1hc2sgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LiBBIG1hc2sgaXMgYW4gb2JqZWN0IHRoYXQgbGltaXRzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIG9iamVjdCB0byB0aGUgc2hhcGUgb2YgdGhlIG1hc2sgYXBwbGllZCB0byBpdC5cbiAgICAgKiBJbiBQSVhJIGEgcmVndWxhciBtYXNrIG11c3QgYmUgYSBQSVhJLkdyYXBoaWNzIG9yIGEgUElYSS5TcHJpdGUgb2JqZWN0LiBUaGlzIGFsbG93cyBmb3IgbXVjaCBmYXN0ZXIgbWFza2luZyBpbiBjYW52YXMgYXMgaXQgdXRpbGlzZXMgc2hhcGUgY2xpcHBpbmcuXG4gICAgICogVG8gcmVtb3ZlIGEgbWFzaywgc2V0IHRoaXMgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3N8UElYSS5TcHJpdGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBtYXNrOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrLnJlbmRlcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXNrID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LlxuICAgICAqICogSU1QT1JUQU5UOiBUaGlzIGlzIGEgd2ViR0wgb25seSBmZWF0dXJlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlci5cbiAgICAgKiBUbyByZW1vdmUgZmlsdGVycyBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ251bGwnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkFic3RyYWN0RmlsdGVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMgJiYgdGhpcy5fZmlsdGVycy5zbGljZSgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlICYmIHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogVE9ETyAtIE9wdGltaXphdGlvbiBwYXNzIVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vaWYodGhpcy50cmFuc2Zvcm0uZGlydHkgfHwgcGFyZW50LnRyYW5zZm9ybS5kaXJ0eSlcbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICAvLyBtdWx0aXBseSB0aGUgYWxwaGFzLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gPSBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICpcbiAqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH1cbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyhtYXRoLk1hdHJpeC5JREVOVElUWSk7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9HbG9iYWwgPSBmdW5jdGlvbiAocG9zaXRpb24pXG57XG4gICAgLy8gdGhpcyBwYXJlbnQgY2hlY2sgaXMgZm9yIGp1c3QgaW4gY2FzZSB0aGUgaXRlbSBpcyBhIHJvb3Qgb2JqZWN0LlxuICAgIC8vIElmIGl0IGlzIHdlIG5lZWQgdG8gZ2l2ZSBpdCBhIHRlbXBvcmFyeSBwYXJlbnQgc28gdGhhdCBkaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtIHdvcmtzIGNvcnJlY3RseVxuICAgIC8vIHRoaXMgaXMgbWFpbmx5IHRvIGF2b2lkIGEgcGFyZW50IGNoZWNrIGluIHRoZSBtYWluIGxvb3AuIEV2ZXJ5IGxpdHRsZSBoZWxwcyBmb3IgcGVyZm9ybWFuY2UgOilcbiAgICBpZighdGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLnBhcmVudCA9IF90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIGxvdFxuICAgIHJldHVybiB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5KHBvc2l0aW9uKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgbG9jYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHJlbGF0aXZlIHRvIGFub3RoZXIgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEBwYXJhbSBbZnJvbV0ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gY2FsY3VsYXRlIHRoZSBnbG9iYWwgcG9zaXRpb24gZnJvbVxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBQb2ludClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9Mb2NhbCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgZnJvbSwgcG9pbnQpXG57XG4gICAgaWYgKGZyb20pXG4gICAge1xuICAgICAgICBwb3NpdGlvbiA9IGZyb20udG9HbG9iYWwocG9zaXRpb24pO1xuICAgIH1cblxuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIHNpbXBseSBhcHBseSB0aGUgbWF0cml4Li5cbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9zaXRpb24sIHBvaW50KTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyBPVkVSV1JJVEU7XG59O1xuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBwYXJlbnQgQ29udGFpbmVyIG9mIHRoaXMgRGlzcGxheU9iamVjdFxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge0NvbnRhaW5lcn0gVGhlIENvbnRhaW5lciB0byBhZGQgdGhpcyBEaXNwbGF5T2JqZWN0IHRvXG4gKiBAcmV0dXJuIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdGhhdCB0aGlzIERpc3BsYXlPYmplY3Qgd2FzIGFkZGVkIHRvXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFBhcmVudCA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWNvbnRhaW5lci5hZGRDaGlsZClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0UGFyZW50OiBBcmd1bWVudCBtdXN0IGJlIGEgQ29udGFpbmVyJyk7XG4gICAgfVxuXG4gICAgY29udGFpbmVyLmFkZENoaWxkKHRoaXMpO1xuICAgIHJldHVybiBjb250YWluZXI7XG59O1xuXG4vKipcbiAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHNldCB0aGUgcG9zdGlvbiwgc2NhbGUsIHNrZXcgYW5kIHBpdm90IGF0IG9uY2UuXG4gKlxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IFRoZSBYIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gVGhlIFkgcG9zaXRpb25cbiAqIEBwYXJhbSBbc2NhbGVYPTFdIHtudW1iZXJ9IFRoZSBYIHNjYWxlIHZhbHVlXG4gKiBAcGFyYW0gW3NjYWxlWT0xXSB7bnVtYmVyfSBUaGUgWSBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtyb3RhdGlvbj0wXSB7bnVtYmVyfSBUaGUgcm90YXRpb25cbiAqIEBwYXJhbSBbc2tld1g9MF0ge251bWJlcn0gVGhlIFggc2tldyB2YWx1ZVxuICogQHBhcmFtIFtza2V3WT0wXSB7bnVtYmVyfSBUaGUgWSBza2V3IHZhbHVlXG4gKiBAcGFyYW0gW3Bpdm90WD0wXSB7bnVtYmVyfSBUaGUgWCBwaXZvdCB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFk9MF0ge251bWJlcn0gVGhlIFkgcGl2b3QgdmFsdWVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24oeCwgeSwgc2NhbGVYLCBzY2FsZVksIHJvdGF0aW9uLCBza2V3WCwgc2tld1ksIHBpdm90WCwgcGl2b3RZKSAvL2pzaGludCBpZ25vcmU6bGluZVxue1xuICAgIHRoaXMucG9zaXRpb24ueCA9IHggfHwgMDtcbiAgICB0aGlzLnBvc2l0aW9uLnkgPSB5IHx8IDA7XG4gICAgdGhpcy5zY2FsZS54ID0gIXNjYWxlWCA/IDEgOiBzY2FsZVg7XG4gICAgdGhpcy5zY2FsZS55ID0gIXNjYWxlWSA/IDEgOiBzY2FsZVk7XG4gICAgdGhpcy5yb3RhdGlvbiA9IHJvdGF0aW9uIHx8IDA7XG4gICAgdGhpcy5za2V3LnggPSBza2V3WCB8fCAwO1xuICAgIHRoaXMuc2tldy55ID0gc2tld1kgfHwgMDtcbiAgICB0aGlzLnBpdm90LnggPSBwaXZvdFggfHwgMDtcbiAgICB0aGlzLnBpdm90LnkgPSBwaXZvdFkgfHwgMDtcbiAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQmFzZSBkZXN0cm95IG1ldGhvZCBmb3IgZ2VuZXJpYyBkaXNwbGF5IG9iamVjdHNcbiAqXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdGhpcy5wb3NpdGlvbiA9IG51bGw7XG4gICAgdGhpcy5zY2FsZSA9IG51bGw7XG4gICAgdGhpcy5waXZvdCA9IG51bGw7XG4gICAgdGhpcy5za2V3ID0gbnVsbDtcblxuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIHRoaXMuX2JvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fbWFzayA9IG51bGw7XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xufTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIE9ic2VydmFibGVQb2ludCh0cmFuc2Zvcm0sIHgsIHkpXG57XG4gICAgdGhpcy5feCA9IHggfHwgMDtcbiAgICB0aGlzLl95ID0geSB8fCAwO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG59XG5cbk9ic2VydmFibGVQb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYnNlcnZhYmxlUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IE9ic2VydmFibGVQb2ludDtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE9ic2VydmFibGVQb2ludC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3Qgb24gdGhlIHggYXhpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIHg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5feDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3ggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3k7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl95ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5PYnNlcnZhYmxlUG9pbnQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuX3ggPSB4IHx8IDA7XG4gICAgdGhpcy5feSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLl94IDogMCApO1xuICAgIFxuICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcbnZhciBPYnNlcnZhYmxlUG9pbnQgPSByZXF1aXJlKCcuL09ic2VydmFibGVQb2ludCcpO1xuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLCAwKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLDEsIDEpO1xuICAgIHRoaXMucGl2b3QgPSBuZXcgT2JzZXJ2YWJsZVBvaW50KHRoaXMsIDAsIDApO1xuICAgIHRoaXMuc2tldyA9IG5ldyBPYnNlcnZhYmxlUG9pbnQodGhpcywgMCwwKTtcbiAgICBcbiAgICB0aGlzLnJvdGF0aW9uID0gMDtcbiAgICB0aGlzLl9zciA9IE1hdGguc2luKDApO1xuICAgIHRoaXMuX2NyID0gTWF0aC5jb3MoMCk7XG4gICAgXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cblxuICAgIHRoaXMudXBkYXRlZCA9IHRydWU7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUcmFuc2Zvcm07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKHBhcmVudFRyYW5zZm9ybSlcbntcbiAgICB2YXIgcHQgPSBwYXJlbnRUcmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgbHQgPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3g7XG4gICAgICAgIGx0LmIgID0gIHRoaXMuX3NyICogdGhpcy5zY2FsZS5feDtcbiAgICAgICAgbHQuYyAgPSAtdGhpcy5fc3IgKiB0aGlzLnNjYWxlLl95O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3k7XG4gICAgICAgIGx0LnR4ID0gIHRoaXMucG9zaXRpb24uX3ggLSAodGhpcy5waXZvdC5feCAqIGx0LmEgKyB0aGlzLnBpdm90Ll95ICogbHQuYyk7XG4gICAgICAgIGx0LnR5ID0gIHRoaXMucG9zaXRpb24uX3kgLSAodGhpcy5waXZvdC5feCAqIGx0LmIgKyB0aGlzLnBpdm90Ll95ICogbHQuZCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVkID0gdGhpcy5kaXJ0eSB8fCBwYXJlbnRUcmFuc2Zvcm0uZGlydHk7XG5cbiAgICBpZih0aGlzLnVwZGF0ZWQpXG4gICAgeyAgICAgIFxuICAgICAgICAvLyBjb25jYXQgdGhlIHBhcmVudCBtYXRyaXggd2l0aCB0aGUgb2JqZWN0cyB0cmFuc2Zvcm0uXG4gICAgICAgIHd0LmEgID0gbHQuYSAgKiBwdC5hICsgbHQuYiAgKiBwdC5jO1xuICAgICAgICB3dC5iICA9IGx0LmEgICogcHQuYiArIGx0LmIgICogcHQuZDtcbiAgICAgICAgd3QuYyAgPSBsdC5jICAqIHB0LmEgKyBsdC5kICAqIHB0LmM7XG4gICAgICAgIHd0LmQgID0gbHQuYyAgKiBwdC5iICsgbHQuZCAgKiBwdC5kO1xuICAgICAgICB3dC50eCA9IGx0LnR4ICogcHQuYSArIGx0LnR5ICogcHQuYyArIHB0LnR4O1xuICAgICAgICB3dC50eSA9IGx0LnR4ICogcHQuYiArIGx0LnR5ICogcHQuZCArIHB0LnR5O1xuICAgIH1cbiAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhbnNmb3JtO1xuXG5cbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBDYW52YXNHcmFwaGljcyA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL0dyYXBoaWNzRGF0YScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIEdyYXBoaWNzIGNsYXNzIGNvbnRhaW5zIG1ldGhvZHMgdXNlZCB0byBkcmF3IHByaW1pdGl2ZSBzaGFwZXMgc3VjaCBhcyBsaW5lcywgY2lyY2xlcyBhbmRcbiAqIHJlY3RhbmdsZXMgdG8gdGhlIGRpc3BsYXksIGFuZCB0byBjb2xvciBhbmQgZmlsbCB0aGVtLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzKClcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSB2YWx1ZSB1c2VkIHdoZW4gZmlsbGluZyB0aGUgR3JhcGhpY3Mgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggKHRoaWNrbmVzcykgb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29sb3Igb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBHcmFwaGljcyBkYXRhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFRoaXMgaXMgYSBoZXggdmFsdWUuIEFwcGx5IGEgdmFsdWUgb2YgMHhGRkZGRkYgdG8gcmVzZXQgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmV2aW91cyB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFVzZWQgdG8gY29tcGFyZSB0byB0aGUgY3VycmVudCB0aW50IGFuZCBjaGVjayBpZiB0aGVyZXMgY2hhbmdlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLl9wcmV2VGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMO1xuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCBwYXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgY29udGFpbmluZyBzb21lIFdlYkdMLXJlbGF0ZWQgcHJvcGVydGllcyB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIG9iamVjdD59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAvLyBUT0RPIC0gX3dlYmdsIHNob3VsZCB1c2UgYSBwcm90b3R5cGUgb2JqZWN0LCBub3QgYSByYW5kb20gdW5kb2N1bWVudGVkIG9iamVjdC4uLlxuICAgIHRoaXMuX3dlYkdMID0ge307XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgc2hhcGUgaXMgYmVpbmcgdXNlZCBhcyBhIG1hc2suXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNNYXNrID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYm91bmRzJyBwYWRkaW5nIHVzZWQgZm9yIGJvdW5kcyBjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJvdW5kc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQSBjYWNoZSBvZiB0aGUgbG9jYWwgYm91bmRzIHRvIHByZXZlbnQgcmVjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwwLDEsMSk7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlIGdyYXBoaWNzXG4gICAgICogb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIFdlYkdMIGdyYXBoaWNzIG9iamVjdCBoYXMgY2hhbmdlZC4gSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZVxuICAgICAqIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlY2FsY3VsYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcblxuICAgIHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIGNhY2hlZCBzcHJpdGUgb2JqZWN0IG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBjYWNoZUFzQml0bWFwIGlzIHNldCB0byB0cnVlIHRoZSBncmFwaGljcyBvYmplY3Qgd2lsbCBiZSByZW5kZXJlZCBhcyBpZiBpdCB3YXMgYSBzcHJpdGUuXG4gICAgICogVGhpcyBpcyB1c2VmdWwgaWYgeW91ciBncmFwaGljcyBlbGVtZW50IGRvZXMgbm90IGNoYW5nZSBvZnRlbiwgYXMgaXQgd2lsbCBzcGVlZCB1cCB0aGUgcmVuZGVyaW5nXG4gICAgICogb2YgdGhlIG9iamVjdCBpbiBleGNoYW5nZSBmb3IgdGFraW5nIHVwIHRleHR1cmUgbWVtb3J5LiBJdCBpcyBhbHNvIHVzZWZ1bCBpZiB5b3UgbmVlZCB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3QgdG8gYmUgYW50aS1hbGlhc2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVuZGVyZWQgdXNpbmcgY2FudmFzLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCBpZlxuICAgICAqIHlvdSBhcmUgY29uc3RhbnRseSByZWRyYXdpbmcgdGhlIGdyYXBoaWNzIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBjYWNoZUFzQml0bWFwXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5HcmFwaGljcyNcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuR3JhcGhpY3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcbkdyYXBoaWNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljcztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEdyYXBoaWNzIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqIE5vdGUgdGhhdCB0aGUgb25seSB0aGUgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IGFyZSBjbG9uZWQsIG5vdCBpdHMgdHJhbnNmb3JtIChwb3NpdGlvbixzY2FsZSxldGMpXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2xvbmUgPSBuZXcgR3JhcGhpY3MoKTtcblxuICAgIGNsb25lLnJlbmRlcmFibGUgICAgPSB0aGlzLnJlbmRlcmFibGU7XG4gICAgY2xvbmUuZmlsbEFscGhhICAgICA9IHRoaXMuZmlsbEFscGhhO1xuICAgIGNsb25lLmxpbmVXaWR0aCAgICAgPSB0aGlzLmxpbmVXaWR0aDtcbiAgICBjbG9uZS5saW5lQ29sb3IgICAgID0gdGhpcy5saW5lQ29sb3I7XG4gICAgY2xvbmUudGludCAgICAgICAgICA9IHRoaXMudGludDtcbiAgICBjbG9uZS5ibGVuZE1vZGUgICAgID0gdGhpcy5ibGVuZE1vZGU7XG4gICAgY2xvbmUuaXNNYXNrICAgICAgICA9IHRoaXMuaXNNYXNrO1xuICAgIGNsb25lLmJvdW5kc1BhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG4gICAgY2xvbmUuZGlydHkgICAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuZ2xEaXJ0eSAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuY2FjaGVkU3ByaXRlRGlydHkgPSB0aGlzLmNhY2hlZFNwcml0ZURpcnR5O1xuXG4gICAgLy8gY29weSBncmFwaGljcyBkYXRhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIGNsb25lLmdyYXBoaWNzRGF0YS5wdXNoKHRoaXMuZ3JhcGhpY3NEYXRhW2ldLmNsb25lKCkpO1xuICAgIH1cblxuICAgIGNsb25lLmN1cnJlbnRQYXRoID0gY2xvbmUuZ3JhcGhpY3NEYXRhW2Nsb25lLmdyYXBoaWNzRGF0YS5sZW5ndGggLSAxXTtcblxuICAgIGNsb25lLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICByZXR1cm4gY2xvbmU7XG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgbGluZSBzdHlsZSB1c2VkIGZvciBzdWJzZXF1ZW50IGNhbGxzIHRvIEdyYXBoaWNzIG1ldGhvZHMgc3VjaCBhcyB0aGUgbGluZVRvKCkgbWV0aG9kIG9yIHRoZSBkcmF3Q2lyY2xlKCkgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUubGluZVN0eWxlID0gZnVuY3Rpb24gKGxpbmVXaWR0aCwgY29sb3IsIGFscGhhKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoIHx8IDA7XG4gICAgdGhpcy5saW5lQ29sb3IgPSBjb2xvciB8fCAwO1xuICAgIHRoaXMubGluZUFscGhhID0gKGFscGhhID09PSB1bmRlZmluZWQpID8gMSA6IGFscGhhO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBoYWxmd2F5IHRocm91Z2ggYSBsaW5lPyBzdGFydCBhIG5ldyBvbmUhXG4gICAgICAgICAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnNsaWNlKC0yKSk7XG4gICAgICAgICAgICBzaGFwZS5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSBpdHMgZW1wdHkgc28gbGV0cyBqdXN0IHNldCB0aGUgbGluZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVXaWR0aCA9IHRoaXMubGluZVdpZHRoO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZUFscGhhID0gdGhpcy5saW5lQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogTW92ZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byB4LCB5LlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IHRoZSBYIGNvb3JkaW5hdGUgdG8gbW92ZSB0b1xuICogQHBhcmFtIHkge251bWJlcn0gdGhlIFkgY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICAqL1xuR3JhcGhpY3MucHJvdG90eXBlLm1vdmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24oW3gseV0pO1xuICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIGxpbmUgdXNpbmcgdGhlIGN1cnJlbnQgbGluZSBzdHlsZSBmcm9tIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8gKHgsIHkpO1xuICogVGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiBpcyB0aGVuIHNldCB0byAoeCwgeSkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBkcmF3IHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lVG8gPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgsIHkpO1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnF1YWRyYXRpY0N1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICBuID0gMjAsXG4gICAgICAgIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLCAwKTtcbiAgICB9XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBuOyArK2kpXG4gICAge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgeGEgPSBmcm9tWCArICggKGNwWCAtIGZyb21YKSAqIGogKTtcbiAgICAgICAgeWEgPSBmcm9tWSArICggKGNwWSAtIGZyb21ZKSAqIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCggeGEgKyAoICgoY3BYICsgKCAodG9YIC0gY3BYKSAqIGogKSkgLSB4YSkgKiBqICksXG4gICAgICAgICAgICAgICAgICAgICB5YSArICggKChjcFkgKyAoICh0b1kgLSBjcFkpICogaiApKSAtIHlhKSAqIGogKSApO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gY3BYMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlemllckN1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIGNwWDIsIGNwWTIsIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgbiA9IDIwLFxuICAgICAgICBkdCxcbiAgICAgICAgZHQyLFxuICAgICAgICBkdDMsXG4gICAgICAgIHQyLFxuICAgICAgICB0MyxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICBkdCA9ICgxIC0gaik7XG4gICAgICAgIGR0MiA9IGR0ICogZHQ7XG4gICAgICAgIGR0MyA9IGR0MiAqIGR0O1xuXG4gICAgICAgIHQyID0gaiAqIGo7XG4gICAgICAgIHQzID0gdDIgKiBqO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCBkdDMgKiBmcm9tWCArIDMgKiBkdDIgKiBqICogY3BYICsgMyAqIGR0ICogdDIgKiBjcFgyICsgdDMgKiB0b1gsXG4gICAgICAgICAgICAgICAgICAgICBkdDMgKiBmcm9tWSArIDMgKiBkdDIgKiBqICogY3BZICsgMyAqIGR0ICogdDIgKiBjcFkyICsgdDMgKiB0b1kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjVG8oKSBtZXRob2QgY3JlYXRlcyBhbiBhcmMvY3VydmUgYmV0d2VlbiB0d28gdGFuZ2VudHMgb24gdGhlIGNhbnZhcy5cbiAqXG4gKiBcImJvcnJvd2VkXCIgZnJvbSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Z4Y2FudmFzLyAtIHRoYW5rcyBnb29nbGUhXG4gKlxuICogQHBhcmFtIHgxIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTEge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB4MiB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGFyY1xuICogQHBhcmFtIHkyIHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGFyY1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmFyY1RvID0gZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyLCByYWRpdXMpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oeDEsIHkxKTtcbiAgICB9XG5cbiAgICB2YXIgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMsXG4gICAgICAgIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0sXG4gICAgICAgIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0sXG4gICAgICAgIGExID0gZnJvbVkgLSB5MSxcbiAgICAgICAgYjEgPSBmcm9tWCAtIHgxLFxuICAgICAgICBhMiA9IHkyICAgLSB5MSxcbiAgICAgICAgYjIgPSB4MiAgIC0geDEsXG4gICAgICAgIG1tID0gTWF0aC5hYnMoYTEgKiBiMiAtIGIxICogYTIpO1xuXG4gICAgaWYgKG1tIDwgMS4wZS04IHx8IHJhZGl1cyA9PT0gMClcbiAgICB7XG4gICAgICAgIGlmIChwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAhPT0geDEgfHwgcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0gIT09IHkxKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHMucHVzaCh4MSwgeTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBkZCA9IGExICogYTEgKyBiMSAqIGIxLFxuICAgICAgICAgICAgY2MgPSBhMiAqIGEyICsgYjIgKiBiMixcbiAgICAgICAgICAgIHR0ID0gYTEgKiBhMiArIGIxICogYjIsXG4gICAgICAgICAgICBrMSA9IHJhZGl1cyAqIE1hdGguc3FydChkZCkgLyBtbSxcbiAgICAgICAgICAgIGsyID0gcmFkaXVzICogTWF0aC5zcXJ0KGNjKSAvIG1tLFxuICAgICAgICAgICAgajEgPSBrMSAqIHR0IC8gZGQsXG4gICAgICAgICAgICBqMiA9IGsyICogdHQgLyBjYyxcbiAgICAgICAgICAgIGN4ID0gazEgKiBiMiArIGsyICogYjEsXG4gICAgICAgICAgICBjeSA9IGsxICogYTIgKyBrMiAqIGExLFxuICAgICAgICAgICAgcHggPSBiMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHB5ID0gYTEgKiAoazIgKyBqMSksXG4gICAgICAgICAgICBxeCA9IGIyICogKGsxICsgajIpLFxuICAgICAgICAgICAgcXkgPSBhMiAqIChrMSArIGoyKSxcbiAgICAgICAgICAgIHN0YXJ0QW5nbGUgPSBNYXRoLmF0YW4yKHB5IC0gY3ksIHB4IC0gY3gpLFxuICAgICAgICAgICAgZW5kQW5nbGUgICA9IE1hdGguYXRhbjIocXkgLSBjeSwgcXggLSBjeCk7XG5cbiAgICAgICAgdGhpcy5hcmMoY3ggKyB4MSwgY3kgKyB5MSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYjEgKiBhMiA+IGIyICogYTEpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSAodXNlZCB0byBjcmVhdGUgY2lyY2xlcywgb3IgcGFydHMgb2YgY2lyY2xlcykuXG4gKlxuICogQHBhcmFtIGN4IHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gY3kge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gc3RhcnRBbmdsZSB7bnVtYmVyfSBUaGUgc3RhcnRpbmcgYW5nbGUsIGluIHJhZGlhbnMgKDAgaXMgYXQgdGhlIDMgbydjbG9jayBwb3NpdGlvbiBvZiB0aGUgYXJjJ3MgY2lyY2xlKVxuICogQHBhcmFtIGVuZEFuZ2xlIHtudW1iZXJ9IFRoZSBlbmRpbmcgYW5nbGUsIGluIHJhZGlhbnNcbiAqIEBwYXJhbSBhbnRpY2xvY2t3aXNlIHtib29sZWFufSBPcHRpb25hbC4gU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGRyYXdpbmcgc2hvdWxkIGJlIGNvdW50ZXJjbG9ja3dpc2Ugb3IgY2xvY2t3aXNlLiBGYWxzZSBpcyBkZWZhdWx0LCBhbmQgaW5kaWNhdGVzIGNsb2Nrd2lzZSwgd2hpbGUgdHJ1ZSBpbmRpY2F0ZXMgY291bnRlci1jbG9ja3dpc2UuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjID0gZnVuY3Rpb24oY3gsIGN5LCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBhbnRpY2xvY2t3aXNlKVxue1xuICAgIGFudGljbG9ja3dpc2UgPSBhbnRpY2xvY2t3aXNlIHx8IGZhbHNlO1xuXG4gICAgaWYgKHN0YXJ0QW5nbGUgPT09IGVuZEFuZ2xlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYoICFhbnRpY2xvY2t3aXNlICYmIGVuZEFuZ2xlIDw9IHN0YXJ0QW5nbGUgKVxuICAgIHtcbiAgICAgICAgZW5kQW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuICAgIGVsc2UgaWYoIGFudGljbG9ja3dpc2UgJiYgc3RhcnRBbmdsZSA8PSBlbmRBbmdsZSApXG4gICAge1xuICAgICAgICBzdGFydEFuZ2xlICs9IE1hdGguUEkgKiAyO1xuICAgIH1cblxuICAgIHZhciBzd2VlcCA9IGFudGljbG9ja3dpc2UgPyAoc3RhcnRBbmdsZSAtIGVuZEFuZ2xlKSAqIC0xIDogKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSk7XG4gICAgdmFyIHNlZ3MgPSAgTWF0aC5jZWlsKE1hdGguYWJzKHN3ZWVwKSAvIChNYXRoLlBJICogMikpICogNDA7XG5cbiAgICBpZihzd2VlcCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBzdGFydFggPSBjeCArIE1hdGguY29zKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuICAgIHZhciBzdGFydFkgPSBjeSArIE1hdGguc2luKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHN0YXJ0WCwgc3RhcnRZKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciB0aGV0YSA9IHN3ZWVwLyhzZWdzKjIpO1xuICAgIHZhciB0aGV0YTIgPSB0aGV0YSoyO1xuXG4gICAgdmFyIGNUaGV0YSA9IE1hdGguY29zKHRoZXRhKTtcbiAgICB2YXIgc1RoZXRhID0gTWF0aC5zaW4odGhldGEpO1xuXG4gICAgdmFyIHNlZ01pbnVzID0gc2VncyAtIDE7XG5cbiAgICB2YXIgcmVtYWluZGVyID0gKCBzZWdNaW51cyAlIDEgKSAvIHNlZ01pbnVzO1xuXG4gICAgZm9yKHZhciBpPTA7IGk8PXNlZ01pbnVzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcmVhbCA9ICBpICsgcmVtYWluZGVyICogaTtcblxuXG4gICAgICAgIHZhciBhbmdsZSA9ICgodGhldGEpICsgc3RhcnRBbmdsZSArICh0aGV0YTIgKiByZWFsKSk7XG5cbiAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgIHZhciBzID0gLU1hdGguc2luKGFuZ2xlKTtcblxuICAgICAgICBwb2ludHMucHVzaCgoIChjVGhldGEgKiAgYykgKyAoc1RoZXRhICogcykgKSAqIHJhZGl1cyArIGN4LFxuICAgICAgICAgICAgICAgICAgICAoIChjVGhldGEgKiAtcykgKyAoc1RoZXRhICogYykgKSAqIHJhZGl1cyArIGN5KTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIGEgc2ltcGxlIG9uZS1jb2xvciBmaWxsIHRoYXQgc3Vic2VxdWVudCBjYWxscyB0byBvdGhlciBHcmFwaGljcyBtZXRob2RzXG4gKiAoc3VjaCBhcyBsaW5lVG8oKSBvciBkcmF3Q2lyY2xlKCkpIHVzZSB3aGVuIGRyYXdpbmcuXG4gKlxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlZ2luRmlsbCA9IGZ1bmN0aW9uIChjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5maWxsaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPD0gMilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsID0gdGhpcy5maWxsaW5nO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQ29sb3IgPSB0aGlzLmZpbGxDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbEFscGhhID0gdGhpcy5maWxsQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBmaWxsIHRvIHRoZSBsaW5lcyBhbmQgc2hhcGVzIHRoYXQgd2VyZSBhZGRlZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHRoZSBiZWdpbkZpbGwoKSBtZXRob2QuXG4gKlxuICogQHJldHVybiB7R3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5lbmRGaWxsID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IG51bGw7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCApXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguUmVjdGFuZ2xlKHgseSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gUmFkaXVzIG9mIHRoZSByZWN0YW5nbGUgY29ybmVyc1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSb3VuZGVkUmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzIClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5Sb3VuZGVkUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgY2lyY2xlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3Q2lyY2xlID0gZnVuY3Rpb24gKHgsIHksIHJhZGl1cylcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5DaXJjbGUoeCx5LCByYWRpdXMpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhbiBlbGxpcHNlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIGhhbGYgd2lkdGggb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd0VsbGlwc2UgPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5FbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIHBvbHlnb24gdXNpbmcgdGhlIGdpdmVuIHBhdGguXG4gKlxuICogQHBhcmFtIHBhdGgge251bWJlcltdfFBJWEkuUG9pbnRbXX0gVGhlIHBhdGggZGF0YSB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgcG9seWdvbi5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UG9seWdvbiA9IGZ1bmN0aW9uIChwYXRoKVxue1xuICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGFzc2lnbm1lbnQgZGVvcHRcbiAgICAvLyBzZWUgc2VjdGlvbiAzLjE6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgIHZhciBwb2ludHMgPSBwYXRoO1xuXG4gICAgdmFyIGNsb3NlZCA9IHRydWU7XG5cbiAgICBpZiAocG9pbnRzIGluc3RhbmNlb2YgbWF0aC5Qb2x5Z29uKVxuICAgIHtcbiAgICAgICAgY2xvc2VkID0gcG9pbnRzLmNsb3NlZDtcbiAgICAgICAgcG9pbnRzID0gcG9pbnRzLnBvaW50cztcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHNbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHBvaW50cyk7XG4gICAgc2hhcGUuY2xvc2VkID0gY2xvc2VkO1xuXG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZ3JhcGhpY3MgdGhhdCB3ZXJlIGRyYXduIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LCBhbmQgcmVzZXRzIGZpbGwgYW5kIGxpbmUgc3R5bGUgc2V0dGluZ3MuXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG4gICAgdGhpcy5maWxsaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmNsZWFyRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gW107XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGdlb21ldHJ5IGlzIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNob3VsZCBiZSBvbmUgb2YgdGhlIHNjYWxlTW9kZSBjb25zdHNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBncmFwaGljcyBvYmplY3RcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVzb2x1dGlvbiwgc2NhbGVNb2RlKVxue1xuXG4gICAgcmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGggKiByZXNvbHV0aW9uLCBib3VuZHMuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXNCdWZmZXIuY29udGV4dC5zY2FsZShyZXNvbHV0aW9uLCByZXNvbHV0aW9uKTtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIGNhbnZhc0J1ZmZlci5jb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcblxuICAgIGlmICh0aGlzLmdsRGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5nbERpcnR5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5yZW5kZXIodGhpcyk7XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5pc01hc2sgPT09IHRydWUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHRpbnQgaGFzIGNoYW5nZWQsIHNldCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRpcnR5LlxuICAgIGlmICh0aGlzLl9wcmV2VGludCAhPT0gdGhpcy50aW50KSB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIHRoaXMgY29kZSBtYXkgc3RpbGwgYmUgbmVlZGVkIHNvIGxlYXZpbmcgZm9yIG5vdy4uXG4gICAgLy9cbiAgICAvKlxuICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuZGlydHkgfHwgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVDYWNoZWRTcHJpdGUoKTtcblxuICAgICAgICAgICAgLy8gd2Ugd2lsbCBhbHNvIG5lZWQgdG8gdXBkYXRlIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUoKTtcblxuICAgICAgICAgICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFscGhhID0gdGhpcy5hbHBoYTtcblxuICAgICAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLl9jYWNoZWRTcHJpdGUsIHJlbmRlcmVyKTtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgICovXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY29udGV4dCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYm91bmRzIG9mIHRoZSBncmFwaGljIHNoYXBlIGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IFRoZSB3b3JsZCB0cmFuc2Zvcm0gbWF0cml4IHRvIHVzZSwgZGVmYXVsdHMgdG8gdGhpc1xuICogIG9iamVjdCdzIHdvcmxkVHJhbnNmb3JtLlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICAvLyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBpdGVtIGlzIGEgbWFzayFcbiAgICAgICAgaWYgKCF0aGlzLnJlbmRlcmFibGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJvdW5kc0RpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICAgICAgICAgIHRoaXMuZ2xEaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYm91bmRzRGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9sb2NhbEJvdW5kcztcblxuICAgICAgICB2YXIgdzAgPSBib3VuZHMueDtcbiAgICAgICAgdmFyIHcxID0gYm91bmRzLndpZHRoICsgYm91bmRzLng7XG5cbiAgICAgICAgdmFyIGgwID0gYm91bmRzLnk7XG4gICAgICAgIHZhciBoMSA9IGJvdW5kcy5oZWlnaHQgKyBib3VuZHMueTtcblxuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAgICAgdmFyIHgyID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgICAgICB2YXIgeTMgPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgICAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgbWF4WCA9IHgxO1xuICAgICAgICB2YXIgbWF4WSA9IHkxO1xuXG4gICAgICAgIHZhciBtaW5YID0geDE7XG4gICAgICAgIHZhciBtaW5ZID0geTE7XG5cbiAgICAgICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICAgICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICAgICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgICAgICB0aGlzLl9ib3VuZHMueCA9IG1pblg7XG4gICAgICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy55ID0gbWluWTtcbiAgICAgICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSB0aGlzLl9ib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBncmFwaGljcyBvYmplY3RcbipcbiogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4qL1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciBncmFwaGljc0RhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKCFkYXRhLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gb25seSBkZWFsIHdpdGggZmlsbHMuLlxuICAgICAgICBpZiAoZGF0YS5zaGFwZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCBkYXRhLnNoYXBlLmNvbnRhaW5zKCB0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkgKSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAqXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcblxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICBpZiAodGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdmFyIHNoYXBlLCBwb2ludHMsIHgsIHksIHcsIGg7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVtpXTtcbiAgICAgICAgICAgIHZhciB0eXBlID0gZGF0YS50eXBlO1xuICAgICAgICAgICAgdmFyIGxpbmVXaWR0aCA9IGRhdGEubGluZVdpZHRoO1xuICAgICAgICAgICAgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QgfHwgdHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLnggLSBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueSAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS53aWR0aCArIGxpbmVXaWR0aDtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLnJhZGl1cyArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLng7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLmhlaWdodCArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFBPTFlcbiAgICAgICAgICAgICAgICBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBvaW50cy5sZW5ndGg7IGogKz0gMilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHggPSBwb2ludHNbal07XG4gICAgICAgICAgICAgICAgICAgIHkgPSBwb2ludHNbaisxXTtcblxuICAgICAgICAgICAgICAgICAgICBtaW5YID0geC1saW5lV2lkdGggPCBtaW5YID8geC1saW5lV2lkdGggOiBtaW5YO1xuICAgICAgICAgICAgICAgICAgICBtYXhYID0geCtsaW5lV2lkdGggPiBtYXhYID8geCtsaW5lV2lkdGggOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblkgPSB5LWxpbmVXaWR0aCA8IG1pblkgPyB5LWxpbmVXaWR0aCA6IG1pblk7XG4gICAgICAgICAgICAgICAgICAgIG1heFkgPSB5K2xpbmVXaWR0aCA+IG1heFkgPyB5K2xpbmVXaWR0aCA6IG1heFk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIG1pblggPSAwO1xuICAgICAgICBtYXhYID0gMDtcbiAgICAgICAgbWluWSA9IDA7XG4gICAgICAgIG1heFkgPSAwO1xuICAgIH1cblxuICAgIHZhciBwYWRkaW5nID0gdGhpcy5ib3VuZHNQYWRkaW5nO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueCA9IG1pblggLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLndpZHRoID0gKG1heFggLSBtaW5YKSArIHBhZGRpbmcgKiAyO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueSA9IG1pblkgLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLmhlaWdodCA9IChtYXhZIC0gbWluWSkgKyBwYWRkaW5nICogMjtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjYWNoZWQgc3ByaXRlIHdoZW4gdGhlIHNwcml0ZSBoYXMgY2FjaGVBc0JpdG1hcCA9IHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIGlmICghdGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgdmFyIGNhbnZhc0J1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcbiAgICAgICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzQnVmZmVyLmNhbnZhcyk7XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlciA9IGNhbnZhc0J1ZmZlcjtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLnJlc2l6ZShib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIC8vIGxldmVyYWdlIHRoZSBhbmNob3IgdG8gYWNjb3VudCBmb3IgdGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudFxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQuc2F2ZSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC50cmFuc2xhdGUoLWJvdW5kcy54LC1ib3VuZHMueSk7XG5cbiAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3MgdG8gMSBmb3IgdGhlIHJlbmRlci4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIG5vdyByZW5kZXIgdGhlIGdyYXBoaWMuLlxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dCk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xufTtcbiovXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVDYWNoZWRTcHJpdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2FjaGVkU3ByaXRlID0gdGhpcy5fY2FjaGVkU3ByaXRlO1xuICAgIHZhciB0ZXh0dXJlID0gY2FjaGVkU3ByaXRlLnRleHR1cmU7XG4gICAgdmFyIGNhbnZhcyA9IGNhY2hlZFNwcml0ZS5idWZmZXIuY2FudmFzO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG4gICAgdGV4dHVyZS5jcm9wLndpZHRoID0gdGV4dHVyZS5mcmFtZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmNyb3AuaGVpZ2h0ID0gdGV4dHVyZS5mcmFtZS5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgY2FjaGVkU3ByaXRlLl93aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICBjYWNoZWRTcHJpdGUuX2hlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIGRpcnR5IGJhc2UgdGV4dHVyZXNcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmRpcnR5KCk7XG59OyovXG5cbi8qKlxuICogRGVzdHJveXMgYSBwcmV2aW91cyBjYWNoZWQgc3ByaXRlLlxuICpcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95Q2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUudGV4dHVyZS5kZXN0cm95KHRydWUpO1xuXG4gICAgLy8gbGV0IHRoZSBnYyBjb2xsZWN0IHRoZSB1bnVzZWQgc3ByaXRlXG4gICAgLy8gVE9ETyBjb3VsZCBiZSBvYmplY3QgcG9vbGVkIVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59OyovXG5cbi8qKlxuICogRHJhd3MgdGhlIGdpdmVuIHNoYXBlIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LiBDYW4gYmUgYW55IG9mIENpcmNsZSwgUmVjdGFuZ2xlLCBFbGxpcHNlLCBMaW5lIG9yIFBvbHlnb24uXG4gKlxuICogQHBhcmFtIHNoYXBlIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc0RhdGF9IFRoZSBnZW5lcmF0ZWQgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdTaGFwZSA9IGZ1bmN0aW9uIChzaGFwZSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIC8vIGNoZWNrIGN1cnJlbnQgcGF0aCFcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YS5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgdmFyIGRhdGEgPSBuZXcgR3JhcGhpY3NEYXRhKHRoaXMubGluZVdpZHRoLCB0aGlzLmxpbmVDb2xvciwgdGhpcy5saW5lQWxwaGEsIHRoaXMuZmlsbENvbG9yLCB0aGlzLmZpbGxBbHBoYSwgdGhpcy5maWxsaW5nLCBzaGFwZSk7XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YS5wdXNoKGRhdGEpO1xuXG4gICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAge1xuICAgICAgICBkYXRhLnNoYXBlLmNsb3NlZCA9IGRhdGEuc2hhcGUuY2xvc2VkIHx8IHRoaXMuZmlsbGluZztcbiAgICAgICAgdGhpcy5jdXJyZW50UGF0aCA9IGRhdGE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGRhdGE7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgLy8gZGVzdHJveSBlYWNoIG9mIHRoZSBHcmFwaGljc0RhdGEgb2JqZWN0c1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8vIGZvciBlYWNoIHdlYmdsIGRhdGEgZW50cnksIGRlc3Ryb3kgdGhlIFdlYkdMR3JhcGhpY3NEYXRhXG4gICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fd2ViZ2wpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl93ZWJnbFtpZF0uZGF0YS5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgdGhpcy5fd2ViZ2xbaWRdLmRhdGFbal0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG4gICAgdGhpcy5fd2ViZ2wgPSBudWxsO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEEgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gbGluZVdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gZmlsbENvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGxBbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBmaWxsICAgICAge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICogQHBhcmFtIHNoYXBlICAgICB7Q2lyY2xlfFJlY3RhbmdsZXxFbGxpcHNlfExpbmV8UG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICovXG5mdW5jdGlvbiBHcmFwaGljc0RhdGEobGluZVdpZHRoLCBsaW5lQ29sb3IsIGxpbmVBbHBoYSwgZmlsbENvbG9yLCBmaWxsQWxwaGEsIGZpbGwsIHNoYXBlKVxue1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQ29sb3IgPSBsaW5lQ29sb3I7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQWxwaGEgPSBsaW5lQWxwaGE7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLl9saW5lVGludCA9IGxpbmVDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxDb2xvciA9IGZpbGxDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IGZpbGxBbHBoYTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBjYWNoZWQgdGludCBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuX2ZpbGxUaW50ID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhcGUgaXMgZmlsbGVkIHdpdGggYSBjb2xvdXJcbiAgICAgKi9cbiAgICB0aGlzLmZpbGwgPSBmaWxsO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICAgICAqL1xuICAgIHRoaXMuc2hhcGUgPSBzaGFwZTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBUaGUgdHlwZSBvZiB0aGUgc2hhcGUsIHNlZSB0aGUgQ29uc3QuU2hhcGVzIGZpbGUgZm9yIGFsbCB0aGUgZXhpc3RpbmcgdHlwZXMsXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gc2hhcGUudHlwZTtcbn1cblxuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3NEYXRhIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBHcmFwaGljc0RhdGEoXG4gICAgICAgIHRoaXMubGluZVdpZHRoLFxuICAgICAgICB0aGlzLmxpbmVDb2xvcixcbiAgICAgICAgdGhpcy5saW5lQWxwaGEsXG4gICAgICAgIHRoaXMuZmlsbENvbG9yLFxuICAgICAgICB0aGlzLmZpbGxBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsLFxuICAgICAgICB0aGlzLnNoYXBlXG4gICAgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIGRhdGEuXG4gKi9cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnNoYXBlID0gbnVsbDtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL1dlYkdMR3JhcGhpY3NEYXRhJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuXG4gICAgLy8gc29tZSBkcmF3aW5nIGZ1bmN0aW9ucy4uXG4gICAgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi91dGlscy9idWlsZExpbmUnKTtcbiAgICBidWlsZFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUG9seScpO1xuICAgIGJ1aWxkQ29tcGxleFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ29tcGxleFBvbHknKTtcbiAgICBidWlsZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSZWN0YW5nbGUnKTtcbiAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkQ2lyY2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZENpcmNsZScpO1xuXG4gICAgZWFyY3V0ID0gcmVxdWlyZSgnZWFyY3V0Jyk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IFtdO1xuXG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgYSBwb2x5IGNhbiBjb250YWluIGJlZm9yZSBpdCBpcyByZW5kZXJlZCBhcyBhIGNvbXBsZXggcG9seWdvbiAodXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyKVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgPSAyMDA7XG59XG5cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc1JlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdncmFwaGljcycsIEdyYXBoaWNzUmVuZGVyZXIpO1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMuZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzLmdsKVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHJlbmRlcmVyLlxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YVBvb2wubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBudWxsO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuICAvLyAgY29uc29sZS5sb2coZ3JhcGhpY3MpXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5IHx8ICFncmFwaGljcy5fd2ViR0xbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljcyhncmFwaGljcyk7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIFRoaXMgIGNvdWxkIGJlIHNwZWVkZWQgdXAgZm9yIHN1cmUhXG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggZ3JhcGhpY3MuYmxlbmRNb2RlICk7XG5cbi8vICAgIHZhciBtYXRyaXggPSAgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0uY2xvbmUoKTtcbi8vICAgIHZhciBtYXRyaXggPSAgcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7XG4vLyAgICBtYXRyaXguYXBwZW5kKGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gd2ViR0wuZGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTC5kYXRhW2ldLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyBmaXggdGhpcyBvbmUhXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEgKiB3ZWJHTERhdGEuYWxwaGEpO1xuXG4gICAgICAgICAgICAvLyByZW5kZXIgcXVhZC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgcmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeCA9IGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLmxvY2F0aW9uKTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHVwZGF0ZVxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgLy8gZ2V0IHRoZSBjb250ZXh0cyBncmFwaGljcyBvYmplY3RcbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd2ViR0wgY29udGV4dCB0aW1lIHRvIGNyZWF0ZSBpdCFcbiAgICBpZiAoIXdlYkdMKVxuICAgIHtcbiAgICAgICAgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdID0ge2xhc3RJbmRleDowLCBkYXRhOltdLCBnbDpnbH07XG4gICAgfVxuXG4gICBcbiAgICAvLyBmbGFnIHRoZSBncmFwaGljcyBhcyBub3QgZGlydHkgYXMgd2UgYXJlIGFib3V0IHRvIHVwZGF0ZSBpdC4uLlxuICAgIGdyYXBoaWNzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB2YXIgaTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGNsZWFyZWQgdGhlIGdyYXBoaWNzIG9iamVjdCB3ZSB3aWxsIG5lZWQgdG8gY2xlYXIgZXZlcnkgb2JqZWN0XG4gICAgaWYgKGdyYXBoaWNzLmNsZWFyRGlydHkpXG4gICAge1xuICAgICAgICBncmFwaGljcy5jbGVhckRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuZCByZXR1cm4gYWxsIHRoZSB3ZWJHTERhdGFzIHRvIHRoZSBvYmplY3QgcG9vbCBzbyB0aGFuIGNhbiBiZSByZXVzZWQgbGF0ZXIgb25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBncmFwaGljc0RhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucHVzaCggZ3JhcGhpY3NEYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgYXJyYXkgYW5kIHJlc2V0IHRoZSBpbmRleC4uXG4gICAgICAgIHdlYkdMLmRhdGEgPSBbXTtcbiAgICAgICAgd2ViR0wubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBncmFwaGljcyBkYXRhcyBhbmQgY29uc3RydWN0IGVhY2ggb25lLi5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGEgY29tcGxleCBmaWxsIHRoZW4gdGhlIG5ldyBzdGVuY2lsIGJ1ZmZlciB0ZWNobmlxdWUgd2lsbCBiZSB1c2VkXG4gICAgLy8gb3RoZXIgd2lzZSBncmFwaGljcyBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIGludG8gYSBiYXRjaC4uXG4gICAgZm9yIChpID0gd2ViR0wubGFzdEluZGV4OyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBwb2ludHMgdGhlIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgICAgICAgICAgZGF0YS5wb2ludHMgPSBkYXRhLnNoYXBlLnBvaW50cy5zbGljZSgpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBwb2x5IGlmIHRoZSB2YWx1ZSBpcyB0cnVlIVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50c1swXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTJdIHx8IGRhdGEucG9pbnRzWzFdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKGRhdGEucG9pbnRzWzBdLCBkYXRhLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNQUtFIFNVUkUgV0UgSEFWRSBUSEUgQ09SUkVDVCBUWVBFLi5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA+PSA2KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA8IHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplICogMilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkRyYXdVc2luZ1NpbXBsZSA9IGJ1aWxkUG9seShkYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkRyYXdVc2luZ1NpbXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoID4gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuICAgICAgICAgICAgICAgIGJ1aWxkTGluZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMgfHwgZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZENpcmNsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCsrO1xuICAgIH1cblxuICAgIC8vIHVwbG9hZCBhbGwgdGhlIGRpcnR5IGRhdGEuLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5kaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhLnVwbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gd2ViR0wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSBUT0RPIEBBbHZpblxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5zd2l0Y2hNb2RlID0gZnVuY3Rpb24gKHdlYkdMLCB0eXBlKVxue1xuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICBpZiAoIXdlYkdMLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbd2ViR0wuZGF0YS5sZW5ndGgtMV07XG5cbiAgICAgICAgaWYgKCh3ZWJHTERhdGEucG9pbnRzLmxlbmd0aCA+IDMyMDAwMCkgfHwgd2ViR0xEYXRhLm1vZGUgIT09IHR5cGUgfHwgdHlwZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdlYkdMRGF0YS5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gd2ViR0xEYXRhO1xufTtcblxuIiwiLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyBXZWJHTCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gV2ViR0xHcmFwaGljc0RhdGEoZ2wpIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vVE9ETyBkb2VzIHRoaXMgbmVlZCB0byBiZSBzcGxpdCBiZWZvcmUgdXBsb2Rpbmc/P1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvbG9yIGNvbXBvbmVudHMgKHIsZyxiKVxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3IgPSBbMCwwLDBdOyAvLyBjb2xvciBzcGxpdCFcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBvaW50cyB0byBkcmF3XG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIHRvZG8gQGFsdmluXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubW9kZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGdyYXBoaWNzIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHZlcnRpY2VzIGFuZCB0aGUgaW5kaWNlc1xuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb2ludHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmluZGljZXMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4vLyAgICB0aGlzLmxhc3RJbmRleCA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5nbFBvaW50cyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5wb2ludHMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuYnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5nbFBvaW50cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5nbEluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuZ2xJbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLnBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBcbiAgICB0aGlzLmdsID0gbnVsbDtcblxuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoZ2wpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgZ2wsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgY2lyY2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byBkcmF3XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ2lyY2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIHZhciBjaXJjbGVEYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gY2lyY2xlRGF0YS54O1xuICAgIHZhciB5ID0gY2lyY2xlRGF0YS55O1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuXG4gICAgLy8gVE9ETyAtIGJpdCBoYWNreT8/XG4gICAgaWYgKGdyYXBoaWNzRGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB0b3RhbFNlZ3MgPSBNYXRoLmZsb29yKDMwICogTWF0aC5zcXJ0KGNpcmNsZURhdGEucmFkaXVzKSkgfHwgTWF0aC5mbG9vcigxNSAqIE1hdGguc3FydChjaXJjbGVEYXRhLndpZHRoICsgY2lyY2xlRGF0YS5oZWlnaHQpKTtcbiAgICB2YXIgc2VnID0gKE1hdGguUEkgKiAyKSAvIHRvdGFsU2VncyA7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcyk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDEgOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCx5LCByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKyssIHZlY1BvcysrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MtMSk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDaXJjbGU7IiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuICAgIFxuXG5cbi8qKlxuICogQnVpbGRzIGEgY29tcGxleCBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDb21wbGV4UG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvL1RPRE8gLSBubyBuZWVkIHRvIGNvcHkgdGhpcyBhcyBpdCBnZXRzIHR1cm5lZCBpbnRvIGEgRkxvYXQzMkFycmF5IGFueXdheXMuLlxuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzLnNsaWNlKCk7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDYpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgd2ViR0xEYXRhLnBvaW50cyA9IHBvaW50cztcbiAgICB3ZWJHTERhdGEuYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHdlYkdMRGF0YS5jb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG5cbiAgICAvLyBjYWxjbGF0ZSB0aGUgYm91bmRzLi5cbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIHZhciB4LHk7XG5cbiAgICAvLyBnZXQgc2l6ZS4uXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKz0yKVxuICAgIHtcbiAgICAgICAgeCA9IHBvaW50c1tpXTtcbiAgICAgICAgeSA9IHBvaW50c1tpKzFdO1xuXG4gICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICBtYXhYID0geCA+IG1heFggPyB4IDogbWF4WDtcblxuICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcbiAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgcXVhZCB0byB0aGUgZW5kIGNvcyB0aGVyZSBpcyBubyBwb2ludCBtYWtpbmcgYW5vdGhlciBidWZmZXIhXG4gICAgcG9pbnRzLnB1c2gobWluWCwgbWluWSxcbiAgICAgICAgICAgICAgICBtYXhYLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1heFksXG4gICAgICAgICAgICAgICAgbWluWCwgbWF4WSk7XG5cbiAgICAvLyBwdXNoIGEgcXVhZCBvbnRvIHRoZSBlbmQuLlxuXG4gICAgLy9UT0RPIC0gdGhpcyBhaW50IG5lZWRlZCFcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKCBpICk7XG4gICAgfVxuXG59O1xuXG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENvbXBsZXhQb2x5OyIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBsaW5lIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRMaW5lID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIFRPRE8gT1BUSU1JU0UhXG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGlmIHRoZSBsaW5lIHdpZHRoIGlzIGFuIG9kZCBudW1iZXIgYWRkIDAuNSB0byBhbGlnbiB0byBhIHdob2xlIHBpeGVsXG4gICAgLy8gY29tbWVudGluZyB0aGlzIG91dCBmaXhlcyAjNzExIGFuZCAjMTYyMFxuICAgIC8vIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoJTIpXG4gICAgLy8ge1xuICAgIC8vICAgICBmb3IgKGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKVxuICAgIC8vICAgICB7XG4gICAgLy8gICAgICAgICBwb2ludHNbaV0gKz0gMC41O1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBmaXJzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgIHZhciBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgIC8vIGlmIHRoZSBmaXJzdCBwb2ludCBpcyB0aGUgbGFzdCBwb2ludCAtIGdvbm5hIGhhdmUgaXNzdWVzIDopXG4gICAgaWYgKGZpcnN0UG9pbnQueCA9PT0gbGFzdFBvaW50LnggJiYgZmlyc3RQb2ludC55ID09PSBsYXN0UG9pbnQueSlcbiAgICB7XG4gICAgICAgIC8vIG5lZWQgdG8gY2xvbmUgYXMgd2UgYXJlIGdvaW5nIHRvIHNsaWdodGx5IG1vZGlmeSB0aGUgc2hhcGUuLlxuICAgICAgICBwb2ludHMgPSBwb2ludHMuc2xpY2UoKTtcblxuICAgICAgICBwb2ludHMucG9wKCk7XG4gICAgICAgIHBvaW50cy5wb3AoKTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgICAgICB2YXIgbWlkUG9pbnRYID0gbGFzdFBvaW50LnggKyAoZmlyc3RQb2ludC54IC0gbGFzdFBvaW50LngpICowLjU7XG4gICAgICAgIHZhciBtaWRQb2ludFkgPSBsYXN0UG9pbnQueSArIChmaXJzdFBvaW50LnkgLSBsYXN0UG9pbnQueSkgKjAuNTtcblxuICAgICAgICBwb2ludHMudW5zaGlmdChtaWRQb2ludFgsIG1pZFBvaW50WSk7XG4gICAgICAgIHBvaW50cy5wdXNoKG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICB9XG5cbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgIHZhciBpbmRleENvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICB2YXIgaW5kZXhTdGFydCA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgLy8gRFJBVyB0aGUgTGluZVxuICAgIHZhciB3aWR0aCA9IGdyYXBoaWNzRGF0YS5saW5lV2lkdGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmxpbmVDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmxpbmVBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciBweCwgcHksIHAxeCwgcDF5LCBwMngsIHAyeSwgcDN4LCBwM3k7XG4gICAgdmFyIHBlcnB4LCBwZXJweSwgcGVycDJ4LCBwZXJwMnksIHBlcnAzeCwgcGVycDN5O1xuICAgIHZhciBhMSwgYjEsIGMxLCBhMiwgYjIsIGMyO1xuICAgIHZhciBkZW5vbSwgcGRpc3QsIGRpc3Q7XG5cbiAgICBwMXggPSBwb2ludHNbMF07XG4gICAgcDF5ID0gcG9pbnRzWzFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWzJdO1xuICAgIHAyeSA9IHBvaW50c1szXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gIHAxeCAtIHAyeDtcblxuICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG5cbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAvLyBzdGFydFxuICAgIHZlcnRzLnB1c2gocDF4IC0gcGVycHggLCBwMXkgLSBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAxeCArIHBlcnB4ICwgcDF5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgZm9yIChpID0gMTsgaSA8IGxlbmd0aC0xOyBpKyspXG4gICAge1xuICAgICAgICBwMXggPSBwb2ludHNbKGktMSkqMl07XG4gICAgICAgIHAxeSA9IHBvaW50c1soaS0xKSoyICsgMV07XG5cbiAgICAgICAgcDJ4ID0gcG9pbnRzWyhpKSoyXTtcbiAgICAgICAgcDJ5ID0gcG9pbnRzWyhpKSoyICsgMV07XG5cbiAgICAgICAgcDN4ID0gcG9pbnRzWyhpKzEpKjJdO1xuICAgICAgICBwM3kgPSBwb2ludHNbKGkrMSkqMiArIDFdO1xuXG4gICAgICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgICAgICBwZXJweSA9IHAxeCAtIHAyeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgICAgICBwZXJweCAvPSBkaXN0O1xuICAgICAgICBwZXJweSAvPSBkaXN0O1xuICAgICAgICBwZXJweCAqPSB3aWR0aDtcbiAgICAgICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAgICAgcGVycDJ4ID0gLShwMnkgLSBwM3kpO1xuICAgICAgICBwZXJwMnkgPSBwMnggLSBwM3g7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwMngqcGVycDJ4ICsgcGVycDJ5KnBlcnAyeSk7XG4gICAgICAgIHBlcnAyeCAvPSBkaXN0O1xuICAgICAgICBwZXJwMnkgLz0gZGlzdDtcbiAgICAgICAgcGVycDJ4ICo9IHdpZHRoO1xuICAgICAgICBwZXJwMnkgKj0gd2lkdGg7XG5cbiAgICAgICAgYTEgPSAoLXBlcnB5ICsgcDF5KSAtICgtcGVycHkgKyBwMnkpO1xuICAgICAgICBiMSA9ICgtcGVycHggKyBwMngpIC0gKC1wZXJweCArIHAxeCk7XG4gICAgICAgIGMxID0gKC1wZXJweCArIHAxeCkgKiAoLXBlcnB5ICsgcDJ5KSAtICgtcGVycHggKyBwMngpICogKC1wZXJweSArIHAxeSk7XG4gICAgICAgIGEyID0gKC1wZXJwMnkgKyBwM3kpIC0gKC1wZXJwMnkgKyBwMnkpO1xuICAgICAgICBiMiA9ICgtcGVycDJ4ICsgcDJ4KSAtICgtcGVycDJ4ICsgcDN4KTtcbiAgICAgICAgYzIgPSAoLXBlcnAyeCArIHAzeCkgKiAoLXBlcnAyeSArIHAyeSkgLSAoLXBlcnAyeCArIHAyeCkgKiAoLXBlcnAyeSArIHAzeSk7XG5cbiAgICAgICAgZGVub20gPSBhMSpiMiAtIGEyKmIxO1xuXG4gICAgICAgIGlmIChNYXRoLmFicyhkZW5vbSkgPCAwLjEgKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIGRlbm9tKz0xMC4xO1xuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJweCAsIHAyeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBweCA9IChiMSpjMiAtIGIyKmMxKS9kZW5vbTtcbiAgICAgICAgcHkgPSAoYTIqYzEgLSBhMSpjMikvZGVub207XG5cblxuICAgICAgICBwZGlzdCA9IChweCAtcDJ4KSAqIChweCAtcDJ4KSArIChweSAtcDJ5KSAqIChweSAtcDJ5KTtcblxuXG4gICAgICAgIGlmIChwZGlzdCA+IDE0MCAqIDE0MClcbiAgICAgICAge1xuICAgICAgICAgICAgcGVycDN4ID0gcGVycHggLSBwZXJwMng7XG4gICAgICAgICAgICBwZXJwM3kgPSBwZXJweSAtIHBlcnAyeTtcblxuICAgICAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwM3gqcGVycDN4ICsgcGVycDN5KnBlcnAzeSk7XG4gICAgICAgICAgICBwZXJwM3ggLz0gZGlzdDtcbiAgICAgICAgICAgIHBlcnAzeSAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN4ICo9IHdpZHRoO1xuICAgICAgICAgICAgcGVycDN5ICo9IHdpZHRoO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycDN4LCBwMnkgK3BlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJwM3gsIHAyeSAtcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRleENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocHggLCBweSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSAocHgtcDJ4KSwgcDJ5IC0gKHB5IC0gcDJ5KSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHAxeCA9IHBvaW50c1sobGVuZ3RoLTIpKjJdO1xuICAgIHAxeSA9IHBvaW50c1sobGVuZ3RoLTIpKjIgKyAxXTtcblxuICAgIHAyeCA9IHBvaW50c1sobGVuZ3RoLTEpKjJdO1xuICAgIHAyeSA9IHBvaW50c1sobGVuZ3RoLTEpKjIgKyAxXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5KTtcbiAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBpbmRleENvdW50OyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydCsrKTtcbiAgICB9XG5cbiAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydC0xKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRMaW5lOyIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcG9seWdvbiB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuV2ViR0xHcmFwaGljc0RhdGF9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocG9pbnRzLCBudWxsLCAyKTtcblxuICAgIGlmICghdHJpYW5nbGVzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgdmVydFBvcyA9IHZlcnRzLmxlbmd0aCAvIDY7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICt2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVydFBvcyk7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmVydHMucHVzaChwb2ludHNbaSAqIDJdLCBwb2ludHNbaSAqIDIgKyAxXSxcbiAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRQb2x5O1xuIiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHJlY3RhbmdsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIC0tLSAvL1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIC8vXG4gICAgdmFyIHJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcmVjdERhdGEueDtcbiAgICB2YXIgeSA9IHJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJlY3REYXRhLmhlaWdodDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgLy8gc3RhcnRcbiAgICAgICAgdmVydHMucHVzaCh4LCB5KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAvLyBpbnNlcnQgMiBkZWFkIHRyaWFuZ2xlcy4uXG4gICAgICAgIGluZGljZXMucHVzaCh2ZXJ0UG9zLCB2ZXJ0UG9zLCB2ZXJ0UG9zKzEsIHZlcnRQb3MrMiwgdmVydFBvcyszLCB2ZXJ0UG9zKzMpO1xuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSBbeCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHkgKyBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICB4LCB5XTtcblxuXG4gICAgICAgIGJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJlY3RhbmdsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG4vKipcbiAqIEJ1aWxkcyBhIHJvdW5kZWQgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG5idWlsZFJvdW5kZWRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIHJyZWN0RGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IHJyZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcnJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcnJlY3REYXRhLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSBycmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgdmFyIHJhZGl1cyA9IHJyZWN0RGF0YS5yYWRpdXM7XG5cbiAgICB2YXIgcmVjUG9pbnRzID0gW107XG4gICAgcmVjUG9pbnRzLnB1c2goeCwgeSArIHJhZGl1cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4LCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCB4LCB5ICsgaGVpZ2h0LCB4ICsgcmFkaXVzLCB5ICsgaGVpZ2h0LCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoIC0gcmFkaXVzLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCAtIHJhZGl1cywgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyB3aWR0aCwgeSArIHJhZGl1cywgeCArIHdpZHRoLCB5LCB4ICsgd2lkdGggLSByYWRpdXMsIHksIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgcmFkaXVzLCB5LCB4LCB5LCB4LCB5ICsgcmFkaXVzICsgMC4wMDAwMDAwMDAxLCByZWNQb2ludHMpO1xuXG4gICAgLy8gdGhpcyB0aW55IG51bWJlciBkZWFscyB3aXRoIHRoZSBpc3N1ZSB0aGF0IG9jY3VycyB3aGVuIHBvaW50cyBvdmVybGFwIGFuZCBlYXJjdXQgZmFpbHMgdG8gdHJpYW5ndWxhdGUgdGhlIGl0ZW0uXG4gICAgLy8gVE9ETyAtIGZpeCB0aGlzIHByb3Blcmx5LCB0aGlzIGlzIG5vdCB2ZXJ5IGVsZWdhbnQuLiBidXQgaXQgd29ya3MgZm9yIG5vdy5cblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICB2YXIgdHJpYW5nbGVzID0gZWFyY3V0KHJlY1BvaW50cywgbnVsbCwgMik7XG5cbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICAgICAge1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVjUG9zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZWNQb2ludHMubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gocmVjUG9pbnRzW2ldLCByZWNQb2ludHNbKytpXSwgciwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHJlY1BvaW50cztcblxuICAgICAgICB0aGlzLmJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlLiAoaGVscGVyIGZ1bmN0aW9uLi4pXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBmcm9tWCB7bnVtYmVyfSBPcmlnaW4gcG9pbnQgeFxuICogQHBhcmFtIGZyb21ZIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcGFyYW0gW291dF0ge251bWJlcltdfSBUaGUgb3V0cHV0IGFycmF5IHRvIGFkZCBwb2ludHMgaW50by4gSWYgbm90IHBhc3NlZCwgYSBuZXcgYXJyYXkgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm4ge251bWJlcltdfSBhbiBhcnJheSBvZiBwb2ludHNcbiAqL1xucXVhZHJhdGljQmV6aWVyQ3VydmUgPSBmdW5jdGlvbiAoZnJvbVgsIGZyb21ZLCBjcFgsIGNwWSwgdG9YLCB0b1ksIG91dClcbntcbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICB4YixcbiAgICAgICAgeWIsXG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gb3V0IHx8IFtdO1xuXG4gICAgZnVuY3Rpb24gZ2V0UHQobjEgLCBuMiwgcGVyYykge1xuICAgICAgICB2YXIgZGlmZiA9IG4yIC0gbjE7XG5cbiAgICAgICAgcmV0dXJuIG4xICsgKCBkaWZmICogcGVyYyApO1xuICAgIH1cblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBuOyBpKysgKSB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICAvLyBUaGUgR3JlZW4gTGluZVxuICAgICAgICB4YSA9IGdldFB0KCBmcm9tWCAsIGNwWCAsIGogKTtcbiAgICAgICAgeWEgPSBnZXRQdCggZnJvbVkgLCBjcFkgLCBqICk7XG4gICAgICAgIHhiID0gZ2V0UHQoIGNwWCAsIHRvWCAsIGogKTtcbiAgICAgICAgeWIgPSBnZXRQdCggY3BZICwgdG9ZICwgaiApO1xuXG4gICAgICAgIC8vIFRoZSBCbGFjayBEb3RcbiAgICAgICAgeCA9IGdldFB0KCB4YSAsIHhiICwgaiApO1xuICAgICAgICB5ID0gZ2V0UHQoIHlhICwgeWIgLCBqICk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goeCwgeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50cztcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJvdW5kZWRSZWN0YW5nbGU7IiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgY29yZSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWElcbiAqL1xuLy8gZXhwb3J0IGNvcmUgYW5kIGNvbnN0LiBXZSBhc3NpZ24gY29yZSB0byBjb25zdCBzbyB0aGF0IHRoZSBub24tcmVmZXJlbmNlIHR5cGVzIGluIGNvbnN0IHJlbWFpbiBpbi10YWN0XG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihyZXF1aXJlKCcuL2NvbnN0JyksIHJlcXVpcmUoJy4vbWF0aCcpLCB7XG4gICAgLy8gdXRpbHNcbiAgICB1dGlsczogcmVxdWlyZSgnLi91dGlscycpLFxuICAgIHRpY2tlcjogcmVxdWlyZSgnLi90aWNrZXInKSxcblxuICAgIC8vIGRpc3BsYXlcbiAgICBEaXNwbGF5T2JqZWN0OiAgICAgICAgICByZXF1aXJlKCcuL2Rpc3BsYXkvRGlzcGxheU9iamVjdCcpLFxuICAgIENvbnRhaW5lcjogICAgICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9Db250YWluZXInKSxcblxuICAgIC8vIHNwcml0ZXNcbiAgICBTcHJpdGU6ICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgUGFydGljbGVDb250YWluZXI6ICAgICAgcmVxdWlyZSgnLi9wYXJ0aWNsZXMvUGFydGljbGVDb250YWluZXInKSxcbiAgICBTcHJpdGVSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXInKSxcbiAgICBQYXJ0aWNsZVJlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyJyksXG5cbiAgICAvLyB0ZXh0XG4gICAgVGV4dDogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0L1RleHQnKSxcblxuICAgIC8vIHByaW1pdGl2ZXNcbiAgICBHcmFwaGljczogICAgICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzJyksXG4gICAgR3JhcGhpY3NEYXRhOiAgICAgICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljc0RhdGEnKSxcbiAgICBHcmFwaGljc1JlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHR1cmVzXG4gICAgVGV4dHVyZTogICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQmFzZVRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlVGV4dHVyZScpLFxuICAgIFJlbmRlclRleHR1cmU6ICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEJhc2VSZW5kZXJUZXh0dXJlOiAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlOiAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzOiAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmVVdnMnKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIGNhbnZhc1xuICAgIENhbnZhc1JlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIENhbnZhc0J1ZmZlcjogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIHdlYmdsXG4gICAgV2ViR0xSZW5kZXJlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyksXG4gICAgU2hhZGVyTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIFNoYWRlcjogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyJyksXG4gICAgT2JqZWN0UmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBSZW5kZXJUYXJnZXQ6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcblxuICAgIC8vIGZpbHRlcnMgLSB3ZWJnbFxuICAgIEFic3RyYWN0RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBGWEFBRmlsdGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBTcHJpdGVNYXNrRmlsdGVyOiAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKSxcblxuICAgIGdsQ29yZTogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncGl4aS1nbC1jb3JlJyksXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoaWNoIHJlbmRlcmVyIHlvdSBzaG91bGQgYmUgdXNpbmcuXG4gICAgICogV2ViR0wgaXMgdGhlIHByZWZlcnJlZCByZW5kZXJlciBhcyBpdCBpcyBhIGxvdCBmYXN0ZXIuIElmIHdlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnlcbiAgICAgKiB0aGUgYnJvd3NlciB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBjYW52YXMgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHBhcmFtIHdpZHRoPTgwMCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIGhlaWdodD02MDAge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWYgeW91XG4gICAgICogICAgICBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0XG4gICAgICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyLCByZXRpbmEgd291bGQgYmUgMlxuICAgICAqIEBwYXJhbSBbbm9XZWJHTD1mYWxzZV0ge2Jvb2xlYW59IHByZXZlbnRzIHNlbGVjdGlvbiBvZiBXZWJHTCByZW5kZXJlciwgZXZlbiBpZiBzdWNoIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyZXJ8Q2FudmFzUmVuZGVyZXJ9IFJldHVybnMgV2ViR0wgcmVuZGVyZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgQ2FudmFzUmVuZGVyZXJcbiAgICAgKi9cbiAgICBhdXRvRGV0ZWN0UmVuZGVyZXI6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCBub1dlYkdMKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB3aWR0aCB8fCA4MDA7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAgICAgaWYgKCFub1dlYkdMICYmIGNvcmUudXRpbHMuaXNXZWJHTFN1cHBvcnRlZCgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGNvcmUuV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgY29yZS5DYW52YXNSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB9XG59KTtcbiIsIi8vIEB0b2RvIC0gaWdub3JlIHRoZSB0b28gbWFueSBwYXJhbWV0ZXJzIHdhcm5pbmcgZm9yIG5vd1xuLy8gc2hvdWxkIGVpdGhlciBmaXggaXQgb3IgY2hhbmdlIHRoZSBqc2hpbnQgY29uZmlnXG4vLyBqc2hpbnQgLVcwNzJcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xuXG4vKipcbiAqIFRoZSBwaXhpIE1hdHJpeCBjbGFzcyBhcyBhbiBvYmplY3QsIHdoaWNoIG1ha2VzIGl0IGEgbG90IGZhc3RlcixcbiAqIGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBpdCA6XG4gKiB8IGEgfCBiIHwgdHh8XG4gKiB8IGMgfCBkIHwgdHl8XG4gKiB8IDAgfCAwIHwgMSB8XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBNYXRyaXgoKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5iID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5jID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHkgPSAwO1xufVxuXG5NYXRyaXgucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWF0cml4O1xubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1hdHJpeCBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5LiBUaGUgRWxlbWVudCB0byBNYXRyaXggbWFwcGluZyBvcmRlciBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIGEgPSBhcnJheVswXVxuICogYiA9IGFycmF5WzFdXG4gKiBjID0gYXJyYXlbM11cbiAqIGQgPSBhcnJheVs0XVxuICogdHggPSBhcnJheVsyXVxuICogdHkgPSBhcnJheVs1XVxuICpcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119IFRoZSBhcnJheSB0aGF0IHRoZSBtYXRyaXggd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbS5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpXG57XG4gICAgdGhpcy5hID0gYXJyYXlbMF07XG4gICAgdGhpcy5iID0gYXJyYXlbMV07XG4gICAgdGhpcy5jID0gYXJyYXlbM107XG4gICAgdGhpcy5kID0gYXJyYXlbNF07XG4gICAgdGhpcy50eCA9IGFycmF5WzJdO1xuICAgIHRoaXMudHkgPSBhcnJheVs1XTtcbn07XG5cblxuLyoqXG4gKiBzZXRzIHRoZSBtYXRyaXggcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkXG4gKiBAcGFyYW0ge251bWJlcn0gdHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXG57XG4gICAgdGhpcy5hID0gYTtcbiAgICB0aGlzLmIgPSBiO1xuICAgIHRoaXMuYyA9IGM7XG4gICAgdGhpcy5kID0gZDtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy50eSA9IHR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmcm9tIHRoZSBjdXJyZW50IE1hdHJpeCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9zZSB7Ym9vbGVhbn0gV2hldGhlciB3ZSBuZWVkIHRvIHRyYW5zcG9zZSB0aGUgbWF0cml4IG9yIG5vdFxuICogQHBhcmFtIFtvdXRdIHtBcnJheX0gSWYgcHJvdmlkZWQgdGhlIGFycmF5IHdpbGwgYmUgYXNzaWduZWQgdG8gb3V0XG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gdGhlIG5ld2x5IGNyZWF0ZWQgYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAodHJhbnNwb3NlLCBvdXQpXG57XG4gICAgaWYgKCF0aGlzLmFycmF5KVxuICAgIHtcbiAgICAgICAgdGhpcy5hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gb3V0IHx8IHRoaXMuYXJyYXk7XG5cbiAgICBpZiAodHJhbnNwb3NlKVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVsyXSA9IDA7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSAwO1xuICAgICAgICBhcnJheVs2XSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzddID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzJdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzZdID0gMDtcbiAgICAgICAgYXJyYXlbN10gPSAwO1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZSB0byB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gcmVuZGVyaW5nKVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5hICogeCArIHRoaXMuYyAqIHkgKyB0aGlzLnR4O1xuICAgIG5ld1Bvcy55ID0gdGhpcy5iICogeCArIHRoaXMuZCAqIHkgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGludmVyc2Ugb2YgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UgdG8gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIGlucHV0KVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHlJbnZlcnNlID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciBpZCA9IDEgLyAodGhpcy5hICogdGhpcy5kICsgdGhpcy5jICogLXRoaXMuYik7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuZCAqIGlkICogeCArIC10aGlzLmMgKiBpZCAqIHkgKyAodGhpcy50eSAqIHRoaXMuYyAtIHRoaXMudHggKiB0aGlzLmQpICogaWQ7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmEgKiBpZCAqIHkgKyAtdGhpcy5iICogaWQgKiB4ICsgKC10aGlzLnR5ICogdGhpcy5hICsgdGhpcy50eCAqIHRoaXMuYikgKiBpZDtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdHJpeCBvbiB0aGUgeCBhbmQgeS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMudHggKz0geDtcbiAgICB0aGlzLnR5ICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIHNjYWxlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIGFtb3VudCB0byBzY2FsZSBob3Jpem9udGFsbHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSBhbW91bnQgdG8gc2NhbGUgdmVydGljYWxseVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2NhbGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmEgKj0geDtcbiAgICB0aGlzLmQgKj0geTtcbiAgICB0aGlzLmMgKj0geDtcbiAgICB0aGlzLmIgKj0geTtcbiAgICB0aGlzLnR4ICo9IHg7XG4gICAgdGhpcy50eSAqPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyBhIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpXG57XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKCBhbmdsZSApO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbiggYW5nbGUgKTtcblxuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICB0aGlzLmEgPSBhMSAqIGNvcy10aGlzLmIgKiBzaW47XG4gICAgdGhpcy5iID0gYTEgKiBzaW4rdGhpcy5iICogY29zO1xuICAgIHRoaXMuYyA9IGMxICogY29zLXRoaXMuZCAqIHNpbjtcbiAgICB0aGlzLmQgPSBjMSAqIHNpbit0aGlzLmQgKiBjb3M7XG4gICAgdGhpcy50eCA9IHR4MSAqIGNvcyAtIHRoaXMudHkgKiBzaW47XG4gICAgdGhpcy50eSA9IHR4MSAqIHNpbiArIHRoaXMudHkgKiBjb3M7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG5cbiAgICB0aGlzLmEgID0gbWF0cml4LmEgKiBhMSArIG1hdHJpeC5iICogYzE7XG4gICAgdGhpcy5iICA9IG1hdHJpeC5hICogYjEgKyBtYXRyaXguYiAqIGQxO1xuICAgIHRoaXMuYyAgPSBtYXRyaXguYyAqIGExICsgbWF0cml4LmQgKiBjMTtcbiAgICB0aGlzLmQgID0gbWF0cml4LmMgKiBiMSArIG1hdHJpeC5kICogZDE7XG5cbiAgICB0aGlzLnR4ID0gbWF0cml4LnR4ICogYTEgKyBtYXRyaXgudHkgKiBjMSArIHRoaXMudHg7XG4gICAgdGhpcy50eSA9IG1hdHJpeC50eCAqIGIxICsgbWF0cml4LnR5ICogZDEgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1hdHJpeCBiYXNlZCBvbiBhbGwgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RYXG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RZXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXG4gKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WFxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdZXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKHgsIHksIHBpdm90WCwgcGl2b3RZLCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSlcbntcbiAgICB2YXIgYSwgYiwgYywgZCwgc3IsIGNyLCBjeSwgc3ksIG5zeCwgY3g7XG5cbiAgICBzciAgPSBNYXRoLnNpbihyb3RhdGlvbik7XG4gICAgY3IgID0gTWF0aC5jb3Mocm90YXRpb24pO1xuICAgIGN5ICA9IE1hdGguY29zKHNrZXdZKTtcbiAgICBzeSAgPSBNYXRoLnNpbihza2V3WSk7XG4gICAgbnN4ID0gLU1hdGguc2luKHNrZXdYKTtcbiAgICBjeCAgPSAgTWF0aC5jb3Moc2tld1gpO1xuXG4gICAgYSAgPSAgY3IgKiBzY2FsZVg7XG4gICAgYiAgPSAgc3IgKiBzY2FsZVg7XG4gICAgYyAgPSAtc3IgKiBzY2FsZVk7XG4gICAgZCAgPSAgY3IgKiBzY2FsZVk7XG5cbiAgICB0aGlzLmEgID0gY3kgKiBhICsgc3kgKiBjO1xuICAgIHRoaXMuYiAgPSBjeSAqIGIgKyBzeSAqIGQ7XG4gICAgdGhpcy5jICA9IG5zeCAqIGEgKyBjeCAqIGM7XG4gICAgdGhpcy5kICA9IG5zeCAqIGIgKyBjeCAqIGQ7XG5cbiAgICB0aGlzLnR4ID0geCArICggcGl2b3RYICogYSArIHBpdm90WSAqIGMgKTtcbiAgICB0aGlzLnR5ID0geSArICggcGl2b3RYICogYiArIHBpdm90WSAqIGQgKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQcmVwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uKG1hdHJpeClcbntcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIGlmIChtYXRyaXguYSAhPT0gMSB8fCBtYXRyaXguYiAhPT0gMCB8fCBtYXRyaXguYyAhPT0gMCB8fCBtYXRyaXguZCAhPT0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICAgICAgdmFyIGMxID0gdGhpcy5jO1xuICAgICAgICB0aGlzLmEgID0gYTEqbWF0cml4LmErdGhpcy5iKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmIgID0gYTEqbWF0cml4LmIrdGhpcy5iKm1hdHJpeC5kO1xuICAgICAgICB0aGlzLmMgID0gYzEqbWF0cml4LmErdGhpcy5kKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmQgID0gYzEqbWF0cml4LmIrdGhpcy5kKm1hdHJpeC5kO1xuICAgIH1cblxuICAgIHRoaXMudHggPSB0eDEqbWF0cml4LmErdGhpcy50eSptYXRyaXguYyttYXRyaXgudHg7XG4gICAgdGhpcy50eSA9IHR4MSptYXRyaXguYit0aGlzLnR5Km1hdHJpeC5kK21hdHJpeC50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0ID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcbiAgICB2YXIgbiA9IGExKmQxLWIxKmMxO1xuXG4gICAgdGhpcy5hID0gZDEvbjtcbiAgICB0aGlzLmIgPSAtYjEvbjtcbiAgICB0aGlzLmMgPSAtYzEvbjtcbiAgICB0aGlzLmQgPSBhMS9uO1xuICAgIHRoaXMudHggPSAoYzEqdGhpcy50eS1kMSp0eDEpL247XG4gICAgdGhpcy50eSA9IC0oYTEqdGhpcy50eS1iMSp0eDEpL247XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBSZXNldHMgdGhpcyBNYXRpeCB0byBhbiBpZGVudGl0eSAoZGVmYXVsdCkgbWF0cml4LlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmlkZW50aXR5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmEgPSAxO1xuICAgIHRoaXMuYiA9IDA7XG4gICAgdGhpcy5jID0gMDtcbiAgICB0aGlzLmQgPSAxO1xuICAgIHRoaXMudHggPSAwO1xuICAgIHRoaXMudHkgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgTWF0cml4IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gQSBjb3B5IG9mIHRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgdmFsdWVzIG9mIHRoZSBnaXZlbiBtYXRyaXggdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZXMgaW4gdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhlIG1hdHJpeCBnaXZlbiBpbiBwYXJhbWV0ZXIgd2l0aCBpdHMgdmFsdWVzIHVwZGF0ZWQuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQSBkZWZhdWx0IChpZGVudGl0eSkgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5JREVOVElUWSA9IG5ldyBNYXRyaXgoKTtcblxuLyoqXG4gKiBBIHRlbXAgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5URU1QX01BVFJJWCA9IG5ldyBNYXRyaXgoKTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcbn1cblxuUG9pbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvaW50XG4gKlxuICogQHJldHVybiB7UElYSS5Qb2ludH0gYSBjb3B5IG9mIHRoZSBwb2ludFxuICovXG5Qb2ludC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBDb3BpZXMgeCBhbmQgeSBmcm9tIHRoZSBnaXZlbiBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICovXG5Qb2ludC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgdGhpcy5zZXQocC54LCBwLnkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGVxdWFsIHRvIHRoaXMgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gKHAueCA9PT0gdGhpcy54KSAmJiAocC55ID09PSB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5Qb2ludC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy54ID0geCB8fCAwO1xuICAgIHRoaXMueSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLnggOiAwICkgO1xufTtcbiIsIi8qKlxuICogTWF0aCBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgbWl4ZWQgaW50byBQSVhJIG5hbWVzcGFjZS5cbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBUaGVzZSB3aWxsIGJlIG1peGVkIHRvIGJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLFxuICAgIC8vIHdoaWxlIHRoaXMgbW9kdWxlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBjb3JlXG4gICAgLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBjdXQgZG93biBvblxuICAgIC8vIGludGVybmFsIG1vZHVsZSByZXF1aXJlcy5cblxuICAgIFBvaW50OiAgICAgIHJlcXVpcmUoJy4vUG9pbnQnKSxcbiAgICBNYXRyaXg6ICAgICByZXF1aXJlKCcuL01hdHJpeCcpLFxuXG4gICAgQ2lyY2xlOiAgICAgcmVxdWlyZSgnLi9zaGFwZXMvQ2lyY2xlJyksXG4gICAgRWxsaXBzZTogICAgcmVxdWlyZSgnLi9zaGFwZXMvRWxsaXBzZScpLFxuICAgIFBvbHlnb246ICAgIHJlcXVpcmUoJy4vc2hhcGVzL1BvbHlnb24nKSxcbiAgICBSZWN0YW5nbGU6ICByZXF1aXJlKCcuL3NoYXBlcy9SZWN0YW5nbGUnKSxcbiAgICBSb3VuZGVkUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlJylcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIENpcmNsZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICovXG5mdW5jdGlvbiBDaXJjbGUoeCwgeSwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkNJUkM7XG59XG5cbkNpcmNsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaXJjbGU7XG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBDaXJjbGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkNpcmNsZX0gYSBjb3B5IG9mIHRoZSBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBDaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBjaXJjbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmFkaXVzIDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGR4ID0gKHRoaXMueCAtIHgpLFxuICAgICAgICBkeSA9ICh0aGlzLnkgLSB5KSxcbiAgICAgICAgcjIgPSB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzO1xuXG4gICAgZHggKj0gZHg7XG4gICAgZHkgKj0gZHk7XG5cbiAgICByZXR1cm4gKGR4ICsgZHkgPD0gcjIpO1xufTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBjaXJjbGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4qIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiovXG5DaXJjbGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy5yYWRpdXMsIHRoaXMueSAtIHRoaXMucmFkaXVzLCB0aGlzLnJhZGl1cyAqIDIsIHRoaXMucmFkaXVzICogMik7XG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBFbGxpcHNlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGlzIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZVxuICovXG5mdW5jdGlvbiBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkVMSVA7XG59XG5cbkVsbGlwc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRWxsaXBzZTtcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBFbGxpcHNlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5FbGxpcHNlfSBhIGNvcHkgb2YgdGhlIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgRWxsaXBzZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRzIGFyZSB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vbm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDBcbiAgICB2YXIgbm9ybXggPSAoKHggLSB0aGlzLngpIC8gdGhpcy53aWR0aCksXG4gICAgICAgIG5vcm15ID0gKCh5IC0gdGhpcy55KSAvIHRoaXMuaGVpZ2h0KTtcblxuICAgIG5vcm14ICo9IG5vcm14O1xuICAgIG5vcm15ICo9IG5vcm15O1xuXG4gICAgcmV0dXJuIChub3JteCArIG5vcm15IDw9IDEpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgZWxsaXBzZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy53aWR0aCwgdGhpcy55IC0gdGhpcy5oZWlnaHQsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG4iLCJ2YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9Qb2ludCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcG9pbnRzIHtQSVhJLlBvaW50W118bnVtYmVyW118Li4uUElYSS5Qb2ludHwuLi5udW1iZXJ9IFRoaXMgY2FuIGJlIGFuIGFycmF5IG9mIFBvaW50cyB0aGF0IGZvcm0gdGhlIHBvbHlnb24sXG4gKiAgICAgIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIHRoYXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBbeCx5LCB4LHksIC4uLl0sIG9yIHRoZSBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZVxuICogICAgICBhbGwgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvbiBlLmcuIGBuZXcgUElYSS5Qb2x5Z29uKG5ldyBQSVhJLlBvaW50KCksIG5ldyBQSVhJLlBvaW50KCksIC4uLilgLCBvciB0aGVcbiAqICAgICAgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmUgZmxhdCB4LHkgdmFsdWVzIGUuZy4gYG5ldyBQb2x5Z29uKHgseSwgeCx5LCB4LHksIC4uLilgIHdoZXJlIGB4YCBhbmQgYHlgIGFyZVxuICogICAgICBOdW1iZXJzLlxuICovXG5mdW5jdGlvbiBQb2x5Z29uKHBvaW50c18pXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBvaW50c187XG5cbiAgICAvL2lmIHBvaW50cyBpc24ndCBhbiBhcnJheSwgdXNlIGFyZ3VtZW50cyBhcyB0aGUgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgcG9pbnRzLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICBwb2ludHNbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IG9mIHBvaW50cywgY29udmVydCBpdCB0byBhIGZsYXQgYXJyYXkgb2YgbnVtYmVyc1xuICAgIGlmIChwb2ludHNbMF0gaW5zdGFuY2VvZiBQb2ludClcbiAgICB7XG4gICAgICAgIHZhciBwID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBwLnB1c2gocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50cyA9IHA7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5QT0xZO1xufVxuXG5Qb2x5Z29uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvbHlnb247XG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9seWdvblxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9seWdvbn0gYSBjb3B5IG9mIHRoZSBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvbHlnb24odGhpcy5wb2ludHMuc2xpY2UoKSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcG9seWdvblxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBpbnNpZGUgPSBmYWxzZTtcblxuICAgIC8vIHVzZSBzb21lIHJheWNhc3RpbmcgdG8gdGVzdCBoaXRzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL3BvaW50LWluLXBvbHlnb24vYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5wb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbGVuZ3RoIC0gMTsgaSA8IGxlbmd0aDsgaiA9IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB4aSA9IHRoaXMucG9pbnRzW2kgKiAyXSwgeWkgPSB0aGlzLnBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgeGogPSB0aGlzLnBvaW50c1tqICogMl0sIHlqID0gdGhpcy5wb2ludHNbaiAqIDIgKyAxXSxcbiAgICAgICAgICAgIGludGVyc2VjdCA9ICgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICh4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aSk7XG5cbiAgICAgICAgaWYgKGludGVyc2VjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiB0aGUgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcmVjdGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SRUNUO1xufVxuXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XG5cbi8qKlxuICogQSBjb25zdGFudCBlbXB0eSByZWN0YW5nbGUuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblJlY3RhbmdsZS5FTVBUWSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDwgdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDwgdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFJvdW5kZWQgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIHRoYXQgaGFzIG5pY2Ugcm91bmRlZCBjb3JuZXJzLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodCBhbmQgaXRzIHJhZGl1cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gQ29udHJvbHMgdGhlIHJhZGl1cyBvZiB0aGUgcm91bmRlZCBjb3JuZXJzXG4gKi9cbmZ1bmN0aW9uIFJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJSRUM7XG59XG5cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm91bmRlZFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUm91bmRlZFJlY3RhbmdsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUm91bmRlZFJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSb3VuZGVkUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8PSB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUGFydGljbGVDb250YWluZXIgY2xhc3MgaXMgYSByZWFsbHkgZmFzdCB2ZXJzaW9uIG9mIHRoZSBDb250YWluZXIgYnVpbHQgc29sZWx5IGZvciBzcGVlZCxcbiAqIHNvIHVzZSB3aGVuIHlvdSBuZWVkIGEgbG90IG9mIHNwcml0ZXMgb3IgcGFydGljbGVzLiBUaGUgdHJhZGVvZmYgb2YgdGhlIFBhcnRpY2xlQ29udGFpbmVyIGlzIHRoYXQgYWR2YW5jZWRcbiAqIGZ1bmN0aW9uYWxpdHkgd2lsbCBub3Qgd29yay4gUGFydGljbGVDb250YWluZXIgaW1wbGVtZW50cyBvbmx5IHRoZSBiYXNpYyBvYmplY3QgdHJhbnNmb3JtIChwb3NpdGlvbiwgc2NhbGUsIHJvdGF0aW9uKS5cbiAqIEFueSBvdGhlciBmdW5jdGlvbmFsaXR5IGxpa2UgdGludGluZywgbWFza2luZywgZXRjIHdpbGwgbm90IHdvcmsgb24gc3ByaXRlcyBpbiB0aGlzIGJhdGNoLlxuICpcbiAqIEl0J3MgZXh0cmVtZWx5IGVhc3kgdG8gdXNlIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQYXJ0aWNsZUNvbnRhaW5lcigpO1xuICpcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpXG4gKiB7XG4gKiAgICAgdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJteUltYWdlLnBuZ1wiKTtcbiAqICAgICBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEFuZCBoZXJlIHlvdSBoYXZlIGEgaHVuZHJlZCBzcHJpdGVzIHRoYXQgd2lsbCBiZSByZW5kZXJlciBhdCB0aGUgc3BlZWQgb2YgbGlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbbWF4U2l6ZT0xNTAwMF0ge251bWJlcn0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGF0IGNhbiBiZSByZW5kZXJlciBieSB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzXSB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyBvZiBjaGlsZHJlbiB0aGF0IHNob3VsZCBiZSB1cGxvYWRlZCB0byB0aGUgZ3B1IGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnNjYWxlPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBzY2FsZSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5wb3NpdGlvbj10cnVlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBwb3NpdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5yb3RhdGlvbj1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcm90YXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMudXZzPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCB1dnMgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuYWxwaGE9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIGFscGhhIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtiYXRjaFNpemU9MTUwMDBdIHtudW1iZXJ9IE51bWJlciBvZiBwYXJ0aWNsZXMgcGVyIGJhdGNoLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUNvbnRhaW5lcihtYXhTaXplLCBwcm9wZXJ0aWVzLCBiYXRjaFNpemUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBiYXRjaFNpemUgPSBiYXRjaFNpemUgfHwgMTUwMDA7IC8vQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG4gICAgbWF4U2l6ZSA9IG1heFNpemUgfHwgMTUwMDA7XG5cbiAgICAvLyBNYWtpbmcgc3VyZSB0aGUgYmF0Y2ggc2l6ZSBpcyB2YWxpZFxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICB2YXIgbWF4QmF0Y2hTaXplID0gMTYzODQ7XG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhCYXRjaFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgcHJvcGVydGllcyB0byBiZSBkeW5hbWljICh0cnVlKSAvIHN0YXRpYyAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFuW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmF0Y2hTaXplID0gYmF0Y2hTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICpcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlQ2hpbGRyZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBjYW52YXMgcmVuZGVyZXJpbmcuIElmIHRydWUgdGhlbiB0aGUgZWxlbWVudHMgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBuZWFyZXN0IHBpeGVsLiBUaGlzIHByb3ZpZGVzIGEgbmljZSBzcGVlZCBib29zdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZTtcbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbn1cblxuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBwcml2YXRlIHByb3BlcnRpZXMgYXJyYXkgdG8gZHluYW1pYyAvIHN0YXRpYyBiYXNlZCBvbiB0aGUgcGFzc2VkIHByb3BlcnRpZXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMge29iamVjdH0gVGhlIHByb3BlcnRpZXMgdG8gYmUgdXBsb2FkZWRcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnNldFByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKVxue1xuICAgIGlmICggcHJvcGVydGllcyApIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1swXSA9ICdzY2FsZScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5zY2FsZSA6IHRoaXMuX3Byb3BlcnRpZXNbMF07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMV0gPSAncG9zaXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucG9zaXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzFdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzJdID0gJ3JvdGF0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnJvdGF0aW9uIDogdGhpcy5fcHJvcGVydGllc1syXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1szXSA9ICd1dnMnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMudXZzIDogdGhpcy5fcHJvcGVydGllc1szXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1s0XSA9ICdhbHBoYScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5hbHBoYSA6IHRoaXMuX3Byb3BlcnRpZXNbNF07XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcblxuICAgIC8vIFRPRE8gZG9uJ3QgbmVlZCB0byFcbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAvLyAgUElYSS5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybS5jYWxsKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRhaW5lciB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHdlYmdsIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIoIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUgKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlLnJlbmRlciggdGhpcyApO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGZsYWcgdGhhdCBzdGF0aWMgZGF0YSBzaG91bGQgYmUgdXBkYXRlZCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoc21hbGxlc3RDaGlsZEluZGV4KVxue1xuICAgIHZhciBidWZmZXJJbmRleCA9IE1hdGguZmxvb3Ioc21hbGxlc3RDaGlsZEluZGV4IC8gdGhpcy5fYmF0Y2hTaXplKTtcbiAgICBpZiAoYnVmZmVySW5kZXggPCB0aGlzLl9idWZmZXJUb1VwZGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IGJ1ZmZlckluZGV4O1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciBpc1JvdGF0ZWQgPSB0cnVlO1xuXG4gICAgdmFyIHBvc2l0aW9uWCA9IDA7XG4gICAgdmFyIHBvc2l0aW9uWSA9IDA7XG5cbiAgICB2YXIgZmluYWxXaWR0aCA9IDA7XG4gICAgdmFyIGZpbmFsSGVpZ2h0ID0gMDtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZSA9IGNoaWxkLnRleHR1cmUuZnJhbWU7XG5cbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYSAqIGNoaWxkLmFscGhhO1xuXG4gICAgICAgIGlmIChjaGlsZC5yb3RhdGlvbiAlIChNYXRoLlBJICogMikgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZhc3Rlc3QgIHdheSB0byBvcHRpbWlzZSEgLSBpZiByb3RhdGlvbiBpcyAwIHRoZW4gd2UgY2FuIGF2b2lkIGFueSBraW5kIG9mIHNldFRyYW5zZm9ybSBjYWxsXG4gICAgICAgICAgICBpZiAoaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLngpICsgY2hpbGQucG9zaXRpb24ueCAgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnkpICsgY2hpbGQucG9zaXRpb24ueSAgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54O1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55O1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZC5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZFRyYW5zZm9ybSA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHkgfCAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoKSArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0KSArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICBjaGlsZC50ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgIGZyYW1lLngsXG4gICAgICAgICAgICBmcmFtZS55LFxuICAgICAgICAgICAgZnJhbWUud2lkdGgsXG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQsXG4gICAgICAgICAgICBwb3NpdGlvblgsXG4gICAgICAgICAgICBwb3NpdGlvblksXG4gICAgICAgICAgICBmaW5hbFdpZHRoLFxuICAgICAgICAgICAgZmluYWxIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIGlmICh0aGlzLl9idWZmZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcbn07XG4iLCJcbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVCdWZmZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlQnVmZmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFRoZSBwYXJ0aWNsZSBidWZmZXIgbWFuYWdlcyB0aGUgc3RhdGljIGFuZCBkeW5hbWljIGJ1ZmZlcnMgZm9yIGEgcGFydGljbGUgY29udGFpbmVyLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQnVmZmVyKGdsLCBwcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgc2l6ZSlcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleCBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhlIGJ1ZmZlciBjYW4gaG9sZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgZHluYW1pYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBzdGF0aWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgaWYoZHluYW1pY1Byb3BlcnR5RmxhZ3NbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRCdWZmZXJzKCk7XG5cbn1cblxuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQnVmZmVyO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5pbml0QnVmZmVycyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcHJvcGVydHk7XG5cbiAgICB2YXIgZHluYW1pY09mZnNldCA9IDA7XG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IGR5bmFtaWNPZmZzZXQ7XG4gICAgICAgIGR5bmFtaWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5keW5hbWljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG5cblxuICAgIC8vIHN0YXRpYyAvL1xuICAgIHZhciBzdGF0aWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBzdGF0aWNPZmZzZXQ7XG4gICAgICAgIHN0YXRpY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLnN0YXRpY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuc3RhdGljU3RyaWRlICogNCk7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZHluYW1pYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZER5bmFtaWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLmR5bmFtaWNEYXRhLCB0aGlzLmR5bmFtaWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuZHluYW1pY0RhdGEpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBzdGF0aWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWRTdGF0aWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5zdGF0aWNEYXRhLCB0aGlzLnN0YXRpY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLnN0YXRpY0RhdGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyB0byB0aGUgR1BVXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaSwgcHJvcGVydHk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnN0YXRpY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlQnVmZmVyLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5zdGF0aWNCdWZmZXIpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlU2hhZGVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZVNoYWRlcicpLFxuICAgIFBhcnRpY2xlQnVmZmVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUJ1ZmZlcicpLFxuICAgIG1hdGggICAgICAgICAgICA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgLy8gYW5kIG1heCBudW1iZXIgb2YgZWxlbWVudCBpbiB0aGUgaW5kZXggYnVmZmVyIGlzIDE2Mzg0ICogNiA9IDk4MzA0XG4gICAgLy8gQ3JlYXRpbmcgYSBmdWxsIGluZGV4IGJ1ZmZlciwgb3ZlcmhlYWQgaXMgOTgzMDQgKiAyID0gMTk2S29cbiAgICB2YXIgbnVtSW5kaWNlcyA9IDk4MzA0O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShudW1JbmRpY2VzKTtcblxuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgbnVtSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IG51bGw7XG5cbiAgICB0aGlzLnRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcbn1cblxuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3BhcnRpY2xlJywgUGFydGljbGVSZW5kZXJlcik7XG5cbi8qKlxuICogV2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IG5ldyBQYXJ0aWNsZVNoYWRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIpO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IGluZGV4LCBzbyA2NTUzNSAvIDYgPSAxMDkyMi5cblxuICAgIC8vdXBsb2FkIHRoZSBpbmRleCBkYXRhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBbXG4gICAgICAgIC8vIHZlcnRpY2VzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFZlcnRpY2VzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcG9zaXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbkNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRQb3NpdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJvdGF0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUm90YXRpb24sXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFJvdGF0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdXZzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRVdnMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBhbHBoYURhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRBbHBoYSxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgcGFydGljbGUgYmF0Y2guXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGJpbmQgdGhlIG1haW4gdGV4dHVyZVxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgLy8gYmluZCB0aGUgYnVmZmVyc1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgcGFydGljbGUgY29udGFpbmVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgY2hpbGRyZW4gPSBjb250YWluZXIuY2hpbGRyZW4sXG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIG1heFNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplO1xuXG4gICAgaWYodG90YWxDaGlsZHJlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZih0b3RhbENoaWxkcmVuID4gbWF4U2l6ZSlcbiAgICB7XG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBtYXhTaXplO1xuICAgIH1cblxuICAgIGlmKCFjb250YWluZXIuX2J1ZmZlcnMpXG4gICAge1xuICAgICAgICBjb250YWluZXIuX2J1ZmZlcnMgPSB0aGlzLmdlbmVyYXRlQnVmZmVycyggY29udGFpbmVyICk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29udGFpbmVyLmJsZW5kTW9kZSk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIG0gPSAgY29udGFpbmVyLndvcmxkVHJhbnNmb3JtLmNvcHkoIHRoaXMudGVtcE1hdHJpeCApO1xuICAgIG0ucHJlcGVuZCggdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXggKTtcbiAgICBnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgbS50b0FycmF5KHRydWUpKTtcbiAgICBnbC51bmlmb3JtMWYodGhpcy5zaGFkZXIudW5pZm9ybXMudUFscGhhLl9sb2NhdGlvbiwgY29udGFpbmVyLndvcmxkQWxwaGEpO1xuXG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHRleHR1cmUgaXMgYm91bmQuLlxuICAgIHZhciBiYXNlVGV4dHVyZSA9IGNoaWxkcmVuWzBdLl90ZXh0dXJlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgdGV4dHVyZSBoYXMgbm90IHVwZGF0ZWQgdGhlbiBsZXRzIG5vdCB1cGxvYWQgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmKCF0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUoYmFzZVRleHR1cmUpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZighY29udGFpbmVyLl9wcm9wZXJ0aWVzWzBdIHx8ICFjb250YWluZXIuX3Byb3BlcnRpZXNbM10pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgfVxuXG4gICAgLy8gbm93IGxldHMgdXBsb2FkIGFuZCByZW5kZXIgdGhlIGJ1ZmZlcnMuLlxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IHRvdGFsQ2hpbGRyZW47IGkgKz0gYmF0Y2hTaXplLCBqICs9IDEpXG4gICAge1xuICAgICAgICB2YXIgYW1vdW50ID0gKCB0b3RhbENoaWxkcmVuIC0gaSk7XG4gICAgICAgIGlmKGFtb3VudCA+IGJhdGNoU2l6ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50ID0gYmF0Y2hTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRhaW5lci5fYnVmZmVyc1tqXTtcblxuICAgICAgICAvLyB3ZSBhbHdheXMgdXBsb2FkIHRoZSBkeW5hbWljXG4gICAgICAgIGJ1ZmZlci51cGxvYWREeW5hbWljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuXG4gICAgICAgIC8vIHdlIG9ubHkgdXBsb2FkIHRoZSBzdGF0aWMgY29udGVudCB3aGVuIHdlIGhhdmUgdG8hXG4gICAgICAgIGlmKGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPT09IGopXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJ1ZmZlci51cGxvYWRTdGF0aWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gaiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5kIHRoZSBidWZmZXJcbiAgICAgICAgYnVmZmVyLmJpbmQoIHRoaXMuc2hhZGVyICk7XG5cbiAgICAgICAgIC8vIG5vdyBkcmF3IHRob3NlIHN1Y2thcyFcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgYW1vdW50ICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBvbmUgcGFydGljbGUgYnVmZmVyIGZvciBlYWNoIGNoaWxkIGluIHRoZSBjb250YWluZXIgd2Ugd2FudCB0byByZW5kZXIgYW5kIHVwZGF0ZXMgaW50ZXJuYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5nZW5lcmF0ZUJ1ZmZlcnMgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIGJ1ZmZlcnMgPSBbXSxcbiAgICAgICAgc2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemUsXG4gICAgICAgIGR5bmFtaWNQcm9wZXJ0eUZsYWdzID0gY29udGFpbmVyLl9wcm9wZXJ0aWVzLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gYmF0Y2hTaXplKVxuICAgIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKG5ldyBQYXJ0aWNsZUJ1ZmZlcihnbCwgdGhpcy5wcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgYmF0Y2hTaXplKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHZlcnRpY2llcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgdmVydGljZXMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFZlcnRpY2VzID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICB2YXIgc3ByaXRlLFxuICAgICAgICB0ZXh0dXJlLFxuICAgICAgICB0cmltLFxuICAgICAgICBzeCxcbiAgICAgICAgc3ksXG4gICAgICAgIHcwLCB3MSwgaDAsIGgxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xuXG4gICAgICAgIHNwcml0ZSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXTtcbiAgICAgICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZTtcbiAgICAgICAgc3ggPSBzcHJpdGUuc2NhbGUueDtcbiAgICAgICAgc3kgPSBzcHJpdGUuc2NhbGUueTtcblxuICAgICAgICBpZiAodGV4dHVyZS50cmltKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgICAgICB0cmltID0gdGV4dHVyZS50cmltO1xuXG4gICAgICAgICAgICB3MSA9IHRyaW0ueCAtIHNwcml0ZS5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBoMSA9IHRyaW0ueSAtIHNwcml0ZS5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtc3ByaXRlLmFuY2hvci54KTtcbiAgICAgICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtc3ByaXRlLmFuY2hvci54O1xuXG4gICAgICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXNwcml0ZS5hbmNob3IueSk7XG4gICAgICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC1zcHJpdGUuYW5jaG9yLnk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBwb3NpdGlvbnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFBvc2l0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUG9zaXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucG9zaXRpb247XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcm90YXRpb24gdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFJvdGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUm90YXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucm90YXRpb247XG5cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVSb3RhdGlvbjtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgVXZzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRVdnMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlVXZzID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLl90ZXh0dXJlLl91dnM7XG5cbiAgICAgICAgaWYgKHRleHR1cmVVdnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSB0ZXh0dXJlVXZzLngwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZXh0dXJlVXZzLnkwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdGV4dHVyZVV2cy54MTtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gdGV4dHVyZVV2cy55MTtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB0ZXh0dXJlVXZzLngyO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gdGV4dHVyZVV2cy55MjtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB0ZXh0dXJlVXZzLngzO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gdGV4dHVyZVV2cy55MztcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8geW91IGtub3cgdGhpcyBjYW4gYmUgZWFzaWVyIVxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBhbHBoYSB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkQWxwaGEgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZUFscGhhID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLmFscGhhO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZUFscGhhO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVSZW5kZXJlci5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuICAgIHRoaXMudGVtcE1hdHJpeCA9IG51bGw7XG59O1xuIiwidmFyIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVTaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBUZXh0dXJlU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFQb3NpdGlvbkNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVNjYWxlOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFSb3RhdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIHZlYzIgdiA9IGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAnICAgdi54ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIGNvcyhhUm90YXRpb24pIC0gKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIHNpbihhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdi55ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIHNpbihhUm90YXRpb24pICsgKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIGNvcyhhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdiA9IHYgKyBhUG9zaXRpb25Db29yZDsnLFxuXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyh2LCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGhlbGxvXG4gICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCB1QWxwaGE7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3IgKiB1QWxwaGE7JyxcbiAgICAgICAgICAgICcgIGlmIChjb2xvci5hID09IDAuMCkgZGlzY2FyZDsnLFxuICAgICAgICAgICAgJyAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdUFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFQb3NpdGlvbkNvb3JkOiAwLFxuICAgICAgICAgICAvLyBhU2NhbGU6ICAgICAgICAgMCxcbiAgICAgICAgICAgIGFSb3RhdGlvbjogICAgICAwXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVEVNUCBIQUNLXG5cbn1cblxuUGFydGljbGVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlU2hhZGVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVNoYWRlcjtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHN5c3RlbSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgc3lzdGVtIHRoaXMgcmVuZGVyZXIgaXMgZm9yLlxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXSB7bnVtYmVyfSBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcmVuZGVyZWQgYXJlYSAoc2hvd24gaWYgbm90IHRyYW5zcGFyZW50KS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5yb3VuZFBpeGVscz1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBTeXN0ZW1SZW5kZXJlcihzeXN0ZW0sIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB1dGlscy5zYXlIZWxsbyhzeXN0ZW0pO1xuXG4gICAgLy8gcHJlcGFyZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpIGluIENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tpXSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgb3B0aW9ucyA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHNlZSBQSVhJLlJFTkRFUkVSX1RZUEVcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgODAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDgwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgNjAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy52aWV3ID0gb3B0aW9ucy52aWV3IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG9wdGlvbnMucmVzb2x1dGlvbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBvcHRpb25zLnRyYW5zcGFyZW50O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgc2hvdWxkIGJlIHJlc2l6ZWQgYXV0b21hdGljYWxseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvcHRpb25zLmF1dG9SZXNpemUgfHwgZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIGJsZW5kIG1vZGVzIHVzZWZ1bCBmb3IgdGhpcyByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG1peGVkPn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgZmxhZyBhZmZlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50cyBvZiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgcmV0YWluZWQgYWZ0ZXIgcmVuZGVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3Igbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyBOT1QgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBhIGNhbnZhcyBzaXplZCBmaWxsUmVjdCBvcGVyYXRpb24gZXZlcnkgZnJhbWUgdG8gc2V0IHRoZSBjYW52YXMgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBjbGVhclJlY3QgdG8gY2xlYXIgdGhlIGNhbnZhcyBldmVyeSBmcmFtZS5cbiAgICAgKiBEaXNhYmxlIHRoaXMgYnkgc2V0dGluZyB0aGlzIHRvIGZhbHNlLiBGb3IgZXhhbXBsZSBpZiB5b3VyIGdhbWUgaGFzIGEgY2FudmFzIGZpbGxpbmcgYmFja2dyb3VuZCBpbWFnZSB5b3Ugb2Z0ZW4gZG9uJ3QgbmVlZCB0aGlzIHNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHRcbiAgICAgKi9cbiAgICB0aGlzLmNsZWFyQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICAgICAqIEhhbmR5IGZvciBjcmlzcCBwaXhlbCBhcnQgYW5kIHNwZWVkIG9uIGxlZ2FjeSBkZXZpY2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gb3B0aW9ucy5yb3VuZFBpeGVscztcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmEgPSBbMCwgMCwgMCwgMF07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9ICcjMDAwMDAwJztcblxuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yOyAvLyBydW4gYmcgY29sb3Igc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgdHJhbnNmb3JtOnt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKX0sIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3Qgcm9vdCBvYmplY3QgdGhhdCB0aGUgcmVuZGVyZXIgdHJpZWQgdG8gcmVuZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3lzdGVtUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFN5c3RlbVJlbmRlcmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciB0byBmaWxsIGlmIG5vdCB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlN5c3RlbVJlbmRlcmVyI1xuICAgICAqL1xuICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSB1dGlscy5oZXgyc3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB1dGlscy5oZXgycmdiKHZhbCwgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBjYW52YXMgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMudmlldy53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGhpcy52aWV3LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgICAgICB0aGlzLnZpZXcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpIHtcbiAgICBpZiAocmVtb3ZlVmlldyAmJiB0aGlzLnZpZXcucGFyZW50Tm9kZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMudmlldyk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgdGhpcy52aWV3ID0gbnVsbDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IDA7XG5cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBmYWxzZTtcblxuICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcblxuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDA7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IG51bGw7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gbnVsbDtcbn07XG4iLCJ2YXIgU3lzdGVtUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9TeXN0ZW1SZW5kZXJlcicpLFxuICAgIENhbnZhc01hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi91dGlscy9DYW52YXNNYXNrTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBTeXN0ZW1SZW5kZXJlci5jYWxsKHRoaXMsICdDYW52YXMnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuQ0FOVkFTO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMudmlldy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIGZsYWcgY29udHJvbGxpbmcgY2FudmFzIHJlZnJlc2guXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVmcmVzaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBhIENhbnZhc01hc2tNYW5hZ2VyLCBoYW5kbGVzIG1hc2tpbmcgd2hlbiB1c2luZyB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNNYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IENhbnZhc01hc2tNYW5hZ2VyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIHByb3BlcnR5IHVzZWQgdG8gc2V0IHRoZSBjYW52YXMgc21vb3RoaW5nIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnaW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcblxuICAgIGlmICghdGhpcy5jb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ3dlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ29JbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB0aGlzLl9tYXBCbGVuZE1vZGVzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHtcbiAgICAgICAgd29ybGRUcmFuc2Zvcm06IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgICAgICB3b3JsZEFscGhhOiAxXG4gICAgfTtcblxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oQ2FudmFzUmVuZGVyZXIpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byB0aGlzIGNhbnZhcyB2aWV3XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSB0aGUgb2JqZWN0IHRvIGJlIHJlbmRlcmVkXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KVxue1xuICAgIHRoaXMuZW1pdCgncHJlcmVuZGVyJyk7XG5cbiAgICB2YXIgY2FjaGVQYXJlbnQgPSBvYmplY3QucGFyZW50O1xuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gb2JqZWN0O1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIG9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIG9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTICYmIHRoaXMudmlldy5zY3JlZW5jYW52YXMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpXG4gICAge1xuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGggLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlckRpc3BsYXlPYmplY3Qob2JqZWN0LCB0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciBhbmQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSBDYW52YXMgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIFtyZW1vdmVWaWV3PWZhbHNlXSB7Ym9vbGVhbn0gUmVtb3ZlcyB0aGUgQ2FudmFzIGVsZW1lbnQgZnJvbSB0aGUgRE9NLlxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIGNhbGwgdGhlIGJhc2UgZGVzdHJveVxuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcywgcmVtb3ZlVmlldyk7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5T2JqZWN0IHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgY29udGV4dClcbntcbiAgICB2YXIgdGVtcENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyQ2FudmFzKHRoaXMpO1xuICAgIHRoaXMuY29udGV4dCA9IHRlbXBDb250ZXh0O1xufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBQSVhJLlN5c3RlbVJlbmRlcmVyI3Jlc2l6ZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKiBAcGFyYW0ge251bWJlcn0gaFxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHcsIGgpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xuXG4gICAgLy9yZXNldCB0aGUgc2NhbGUgbW9kZS4uIG9kZGx5IHRoaXMgc2VlbXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgY2FudmFzIGlzIHJlc2l6ZWQuXG4gICAgLy9zdXJlbHkgYSBicm93c2VyIGJ1Zz8/IExldCBwaXhpIGZpeCB0aGF0IGZvciB5b3UuLlxuICAgIGlmKHRoaXMuc21vb3RoUHJvcGVydHkpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHRbdGhpcy5zbW9vdGhQcm9wZXJ0eV0gPSAoQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVCA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogTWFwcyBQaXhpIGJsZW5kIG1vZGVzIHRvIGNhbnZhcyBibGVuZCBtb2Rlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX21hcEJsZW5kTW9kZXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5ibGVuZE1vZGVzKVxuICAgIHtcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzID0ge307XG5cbiAgICAgICAgaWYgKHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnbXVsdGlwbHknO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NjcmVlbic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSAnb3ZlcmxheSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnZGFya2VuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MSUdIVEVOXSAgICAgICA9ICdsaWdodGVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdjb2xvci1kb2RnZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnY29sb3ItYnVybic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnaGFyZC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSAnc29mdC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnZGlmZmVyZW5jZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnZXhjbHVzaW9uJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdodWUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gJ3NhdHVyYXRlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl0gICAgICAgICA9ICdjb2xvcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSAnbHVtaW5vc2l0eSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29vbCBuZXcgYmxlbmQgbW9kZXMgaW4gY2FudmFzICdjb3VnaCcgaWUgJ2NvdWdoJ1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNpemUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGNhbnZhc1xuICovXG5mdW5jdGlvbiBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgQ2FudmFzIG9iamVjdCB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBDYW52YXNCdWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogQSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHR3by1kaW1lbnNpb25hbCByZW5kZXJpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59XG5cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0J1ZmZlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FudmFzQnVmZmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIGJ1ZmZlciBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ2FudmFzQnVmZmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdmFsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGNhbnZhcyB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZSBDYW52YXNCdWZmZXIgY2xhc3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbnZhc1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgY2FudmFzLlxuICpcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBjYW52YXMgcmVuZGVyZXIgdG8gZHJhdyB0aGUgcHJpbWl0aXZlIGdyYXBoaWNzIGRhdGEuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNHcmFwaGljcyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNHcmFwaGljcztcblxuLypcbiAqIFJlbmRlcnMgYSBHcmFwaGljcyBvYmplY3QgdG8gYSBjYW52YXMuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgYWN0dWFsIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSAyZCBkcmF3aW5nIG1ldGhvZCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciB3b3JsZEFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuICAgIGlmIChncmFwaGljcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3NUaW50KGdyYXBoaWNzKTtcbiAgICAgICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLl9maWxsVGludDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEuX2xpbmVUaW50O1xuXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZSBjbG9zZSB0aGUgcGF0aCAtIG11Y2ggbmVhdGVyIDopXG4gICAgICAgICAgICBpZiAocG9pbnRzWzBdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAmJiBwb2ludHNbMV0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbENvbG9yIHx8IGRhdGEuZmlsbENvbG9yID09PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmZpbGxBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggZmlsbENvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUud2lkdGgsIHNoYXBlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLDAsMipNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVsbGlwc2UgY29kZSB0YWtlbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcblxuICAgICAgICAgICAgdmFyIHcgPSBzaGFwZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB2YXIgaCA9IHNoYXBlLmhlaWdodCAqIDI7XG5cbiAgICAgICAgICAgIHZhciB4ID0gc2hhcGUueCAtIHcvMjtcbiAgICAgICAgICAgIHZhciB5ID0gc2hhcGUueSAtIGgvMjtcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIGthcHBhID0gMC41NTIyODQ4LFxuICAgICAgICAgICAgICAgIG94ID0gKHcgLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgb3kgPSAoaCAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgeGUgPSB4ICsgdywgICAgICAgICAgIC8vIHgtZW5kXG4gICAgICAgICAgICAgICAgeWUgPSB5ICsgaCwgICAgICAgICAgIC8vIHktZW5kXG4gICAgICAgICAgICAgICAgeG0gPSB4ICsgdyAvIDIsICAgICAgIC8vIHgtbWlkZGxlXG4gICAgICAgICAgICAgICAgeW0gPSB5ICsgaCAvIDI7ICAgICAgIC8vIHktbWlkZGxlXG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG1hc2tcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3Mgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgbWFza1xuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGNvbnRleHQgMmQgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciBsZW4gPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gVE9ETyAtIG5lZWQgdG8gYmUgVW5kZWZpbmVkIVxuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgcnggPSBzaGFwZS54O1xuICAgICAgICAgICAgdmFyIHJ5ID0gc2hhcGUueTtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcbiAgICAgICAgICAgIHZhciByYWRpdXMgPSBzaGFwZS5yYWRpdXM7XG5cbiAgICAgICAgICAgIHZhciBtYXhSYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDIgfCAwO1xuICAgICAgICAgICAgcmFkaXVzID0gcmFkaXVzID4gbWF4UmFkaXVzID8gbWF4UmFkaXVzIDogcmFkaXVzO1xuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRpbnQgb2YgYSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3MgdGhhdCB3aWxsIGhhdmUgaXRzIHRpbnQgdXBkYXRlZFxuICpcbiAqL1xuQ2FudmFzR3JhcGhpY3MudXBkYXRlR3JhcGhpY3NUaW50ID0gZnVuY3Rpb24gKGdyYXBoaWNzKVxue1xuICAgIGlmIChncmFwaGljcy50aW50ID09PSAweEZGRkZGRiAmJiBncmFwaGljcy5fcHJldlRpbnQgPT09IGdyYXBoaWNzLnRpbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyYXBoaWNzLl9wcmV2VGludCA9IGdyYXBoaWNzLnRpbnQ7XG5cbiAgICB2YXIgdGludFIgPSAoZ3JhcGhpY3MudGludCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50RyA9IChncmFwaGljcy50aW50ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgdGludEIgPSAoZ3JhcGhpY3MudGludCAmIDB4RkYpLyAyNTU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLmZpbGxDb2xvciB8IDA7XG4gICAgICAgIHZhciBsaW5lQ29sb3IgPSBkYXRhLmxpbmVDb2xvciB8IDA7XG5cbiAgICAgICAgLypcbiAgICAgICAgdmFyIGNvbG9yUiA9IChmaWxsQ29sb3IgPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgdmFyIGNvbG9yRyA9IChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JCID0gKGZpbGxDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgZmlsbENvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG5cbiAgICAgICAgY29sb3JSID0gKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckcgPSAobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgY29sb3JCID0gKGxpbmVDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgbGluZUNvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG4gICAgICAgICovXG5cbiAgICAgICAgLy8gc3VwZXIgaW5saW5lIGNvcyBpbSBhbiBvcHRpbWl6YXRpb24gTkFaSSA6KVxuICAgICAgICBkYXRhLl9maWxsVGludCA9ICgoKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgoZmlsbENvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAoZmlsbENvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuICAgICAgICBkYXRhLl9saW5lVGludCA9ICgoKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAobGluZUNvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuXG4gICAgfVxufTtcblxuIiwidmFyIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi9DYW52YXNHcmFwaGljcycpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBtYXNraW5nLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ2FudmFzTWFza01hbmFnZXIoKVxue31cblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FudmFzTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc01hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgc3RhY2sgb2YgbWFza3MuXG4gKlxuICogQHBhcmFtIG1hc2tEYXRhIHtvYmplY3R9IHRoZSBtYXNrRGF0YSB0aGF0IHdpbGwgYmUgcHVzaGVkXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSwgcmVuZGVyZXIpXG57XG5cbiAgICByZW5kZXJlci5jb250ZXh0LnNhdmUoKTtcblxuICAgIHZhciBjYWNoZUFscGhhID0gbWFza0RhdGEuYWxwaGE7XG4gICAgdmFyIHRyYW5zZm9ybSA9IG1hc2tEYXRhLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgLy9UT0RPIHN1cG9ydCBzcHJpdGUgYWxwaGEgbWFza3M/P1xuICAgIC8vbG90cyBvZiBlZmZvcnQgcmVxdWlyZWQuIElmIGRlbWFuZCBpcyBncmVhdCBlbm91Z2guLlxuICAgIGlmKCFtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrKG1hc2tEYXRhLCByZW5kZXJlci5jb250ZXh0KTtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5jbGlwKCk7XG4gICAgfVxuXG4gICAgbWFza0RhdGEud29ybGRBbHBoYSA9IGNhY2hlQWxwaGE7XG59O1xuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dCB0byB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZSB0aGUgbWFzayB3YXMgYXBwbGllZC5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLmNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7fTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2RzIGZvciBTcHJpdGUvVGV4dHVyZSB0aW50aW5nLlxuICogQHN0YXRpY1xuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG52YXIgQ2FudmFzVGludGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1RpbnRlcjtcblxuLyoqXG4gKiBCYXNpY2FsbHkgdGhpcyBtZXRob2QganVzdCBuZWVkcyBhIHNwcml0ZSBhbmQgYSBjb2xvciBhbmQgdGludHMgdGhlIHNwcml0ZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSB0aW50ZWQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlID0gZnVuY3Rpb24gKHNwcml0ZSwgY29sb3IpXG57XG4gICAgdmFyIHRleHR1cmUgPSBzcHJpdGUudGV4dHVyZTtcblxuICAgIGNvbG9yID0gQ2FudmFzVGludGVyLnJvdW5kQ29sb3IoY29sb3IpO1xuXG4gICAgdmFyIHN0cmluZ0NvbG9yID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgdGV4dHVyZS50aW50Q2FjaGUgPSB0ZXh0dXJlLnRpbnRDYWNoZSB8fCB7fTtcblxuICAgIGlmICh0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0pXG4gICAge1xuICAgICAgICByZXR1cm4gdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdO1xuICAgIH1cblxuICAgICAvLyBjbG9uZSB0ZXh0dXJlLi5cbiAgICB2YXIgY2FudmFzID0gQ2FudmFzVGludGVyLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8vQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWwodGV4dHVyZSwgc3RyaW5nQ29sb3IsIGNhbnZhcyk7XG4gICAgQ2FudmFzVGludGVyLnRpbnRNZXRob2QodGV4dHVyZSwgY29sb3IsIGNhbnZhcyk7XG5cbiAgICBpZiAoQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSlcbiAgICB7XG4gICAgICAgIC8vIGlzIHRoaXMgYmV0dGVyP1xuICAgICAgICB2YXIgdGludEltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHRpbnRJbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKCk7XG5cbiAgICAgICAgdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdID0gdGludEltYWdlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSBjYW52YXM7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBub3QgY29udmVydGluZyB0aGUgdGV4dHVyZSB0byBhbiBpbWFnZSB0aGVuIHdlIG5lZWQgdG8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXNcbiAgICAgICAgQ2FudmFzVGludGVyLmNhbnZhcyA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdtdWx0aXBseScgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcblxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdvdmVybGF5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoT3ZlcmxheSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1hdG9wJztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgLy8gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG59O1xuXG4vKipcbiAqIFRpbnQgYSB0ZXh0dXJlIHBpeGVsIHBlciBwaXhlbC5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcbiAgICB2YXIgciA9IHJnYlZhbHVlc1swXSwgZyA9IHJnYlZhbHVlc1sxXSwgYiA9IHJnYlZhbHVlc1syXTtcblxuICAgIHZhciBwaXhlbERhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICB2YXIgcGl4ZWxzID0gcGl4ZWxEYXRhLmRhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBpeGVscy5sZW5ndGg7IGkgKz0gNClcbiAgICB7XG4gICAgICAgIHBpeGVsc1tpKzBdICo9IHI7XG4gICAgICAgIHBpeGVsc1tpKzFdICo9IGc7XG4gICAgICAgIHBpeGVsc1tpKzJdICo9IGI7XG4gICAgfVxuXG4gICAgY29udGV4dC5wdXRJbWFnZURhdGEocGl4ZWxEYXRhLCAwLCAwKTtcbn07XG5cbi8qKlxuICogUm91bmRzIHRoZSBzcGVjaWZpZWQgY29sb3IgYWNjb3JkaW5nIHRvIHRoZSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbC5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHJvdW5kLCBzaG91bGQgYmUgYSBoZXggY29sb3JcbiAqL1xuQ2FudmFzVGludGVyLnJvdW5kQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IpXG57XG4gICAgdmFyIHN0ZXAgPSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbDtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcblxuICAgIHJnYlZhbHVlc1swXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1swXSAvIHN0ZXApICogc3RlcCk7XG4gICAgcmdiVmFsdWVzWzFdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzFdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMl0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMl0gLyBzdGVwKSAqIHN0ZXApO1xuXG4gICAgcmV0dXJuIHV0aWxzLnJnYjJoZXgocmdiVmFsdWVzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGNhcCB3aGVuIHJvdW5kaW5nIGNvbG9ycy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsID0gODtcblxuLyoqXG4gKiBUaW50IGNhY2hlIGJvb2xlYW4gZmxhZy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jb252ZXJ0VGludFRvSW1hZ2UgPSBmYWxzZTtcblxuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCwgY29uc2VxdWVudGx5IHRoZSBhYmlsaXR5IHRvIHRpbnQgdXNpbmcgdGhlIG11bHRpcGx5IG1ldGhvZC5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA9IHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKTtcblxuLyoqXG4gKiBUaGUgdGludGluZyBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQuXG4gKlxuICovXG5DYW52YXNUaW50ZXIudGludE1ldGhvZCA9IENhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA/IENhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5IDogIENhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsO1xuIiwidmFyIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcblx0dXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIFRleHR1cmVNYW5hZ2VyID0gZnVuY3Rpb24oZ2wpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyB0cmFjayB0ZXh0dXJlcyBpbiB0aGUgcmVuZGVyZXIgc28gd2UgY2FuIG5vIGxvbmdlciBsaXN0ZW4gdG8gdGhlbSBvbiBkZXN0cnVjdGlvbi5cblx0dGhpcy5fbWFuYWdlZFRleHR1cmVzID0gW107XG4gICAgdGhpcy5nbFRleHR1cmVzID0ge307XG5cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5nZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW5kL29yIENyZWF0ZXMgYSBXZWJHTCB0ZXh0dXJlIGZvciB0aGUgcmVuZGVyZXIncyBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdXBkYXRlXG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuXHRpZiAoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGdsVGV4dHVyZSA9IHRoaXMuZ2xUZXh0dXJlc1t0ZXh0dXJlLnVpZF0vL3RleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgaWYgKCFnbFRleHR1cmUpXG4gICAge1xuICAgICAgICBnbFRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcbiAgICAgICAgZ2xUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSB0cnVlXG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgLy8gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXSA9IGdsVGV4dHVyZTtcblxuICAgICAgICB0ZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9uKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICBnbFRleHR1cmUudXBsb2FkKHRleHR1cmUuc291cmNlKTtcbiAgICBcbiAgICAvL1RPRE8gY2hlY2sgaXMgcG93ZXIgb2YgdHdvLi5cbiAgICBnbFRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cblxuICAgIC8vIFRPRE8gY2hlY2sgZm9yIHNjYWxpbmcgdHlwZVxuICAgIGdsVGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKCk7XG5cbiAgICByZXR1cm4gIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTFxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gZGVzdHJveVxuICovXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlLCBfc2tpcFJlbW92ZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0pXG4gICAge1xuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG5cblxuICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcblxuICAgICAgICBpZiAoIV9za2lwUmVtb3ZlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5pbmRleE9mKHRleHR1cmUpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5fbWFuYWdlZFRleHR1cmVzLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKClcbntcblx0Ly8gZW1wdHkgYWxsIHRoZSBvbGQgZ2wgdGV4dHVyZXMgYXMgdGhleSBhcmUgdXNlbGVzcyBub3dcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzW2ldO1xuICAgICAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuICAgIC8vIGRlc3Ryb3kgbWFuYWdlZCB0ZXh0dXJlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIHRoaXMuZGVzdHJveVRleHR1cmUodGV4dHVyZSwgdHJ1ZSk7XG4gICAgICAgIHRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9mZignZGlzcG9zZScsIHRoaXMuZGVzdHJveVRleHR1cmUsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcyA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZU1hbmFnZXI7XG5cbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgU2hhZGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIE1hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9NYXNrTWFuYWdlcicpLFxuICAgIFN0ZW5jaWxNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlcicpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBCbGVuZE1vZGVNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4vdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBGWEFBRmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBUZXh0dXJlTWFuYWdlciA9IHJlcXVpcmUoJy4vVGV4dHVyZU1hbmFnZXInKSxcbiAgICBjcmVhdGVDb250ZXh0ID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuY3JlYXRlQ29udGV4dCxcbiAgICBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aScpLFxuICAgIG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpID0gcmVxdWlyZSgnLi91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFdlYkdMUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIHdlYkdMIGVuYWJsZWQgY2FudmFzLiBUaGlzIHJlbmRlcmVyXG4gKiBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMLiBUaGlzIFJlbmRlciB3b3JrcyBieSBhdXRvbWF0aWNhbGx5IG1hbmFnaW5nIHdlYkdMQmF0Y2hzLlxuICogU28gbm8gbmVlZCBmb3IgU3ByaXRlIEJhdGNoZXMgb3IgU3ByaXRlIENsb3Vkcy5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIHZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9MF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9MF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMuIElmIG5vdCBhdmFpbGFibGUgbmF0aXZlbHkgdGhlbiBGWEFBIGFudGlhbGlhc2luZyBpcyB1c2VkXG4gKiBAcGFyYW0gW29wdGlvbnMuZm9yY2VGWEFBPWZhbHNlXSB7Ym9vbGVhbn0gZm9yY2VzIEZYQUEgYW50aWFsaWFzaW5nIHRvIGJlIHVzZWQgb3ZlciBuYXRpdmUuIEZYQUEgaXMgZmFzdGVyLCBidXQgbWF5IG5vdCBhbHdheXMgbG9vayBhcyBncmVhdFxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy4gSWYgeW91IHdpc2ggdG8gc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSAqbXVzdCogc2V0IHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byBgdHJ1ZWAuXG4gKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmXG4gKiAgICAgIHlvdSBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0LlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ1dlYkdMJywgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIHJlbmRlcmVyIGFzIGEgc3RhbmRhcmRpc2VkIGNvbnN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9Ly9cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0w7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gdGhpcy5oYW5kbGVDb250ZXh0TG9zdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5oYW5kbGVDb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gY3JlYXRlIGEgbmV3IHdlYmdsIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgICAgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQsXG4gICAgICAgIGFudGlhbGlhczogb3B0aW9ucy5hbnRpYWxpYXMsXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnRyYW5zcGFyZW50ICE9PSAnbm90TXVsdGlwbGllZCcsXG4gICAgICAgIHN0ZW5jaWw6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICB9O1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYVszXSA9IHRoaXMudHJhbnNwYXJlbnQgPyAwIDogMTtcblxuICAgIC8qKlxuICAgICAqIERlYWxzIHdpdGggbWFuYWdpbmcgdGhlIHNoYWRlciBwcm9ncmFtcyBhbmQgdGhlaXIgYXR0cmlicy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBuZXcgU2hhZGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1hc2tzIHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWFza01hbmFnZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG5ldyBNYXNrTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyID0gbmV3IFN0ZW5jaWxNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRmlsdGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlck1hbmFnZXIgPSBuZXcgRmlsdGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIGJsZW5kTW9kZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmxlbmRNb2RlTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBuZXcgQmxlbmRNb2RlTWFuYWdlcih0aGlzKTtcblxuICAgIFxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIE9iamVjdFJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5PYmplY3RSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG5ldyBPYmplY3RSZW5kZXJlcih0aGlzKTtcblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIGNvbnRleHQgc28gaXQgaXMgcmVhZHkgZm9yIHRoZSBtYW5hZ2Vycy5cbiAgICB0aGlzLmdsID0gY3JlYXRlQ29udGV4dCh0aGlzLnZpZXcsIHRoaXMuX2NvbnRleHRPcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXRDb250ZXh0KCk7XG5cbiAgICAvLyBtYXAgc29tZSB3ZWJHTCBibGVuZCBhbmQgZHJhd21vZGVzLi5cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wpO1xuICAgIHRoaXMuZHJhd01vZGVzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wpXG5cbiAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXR9XG4gICAgICovXG4gICAgdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUZXh0dXJlTG9jYXRpb24gPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oV2ViR0xSZW5kZXJlcik7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgV2ViR0wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLl9pbml0Q29udGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgbWFuYWdlci4uLlxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hbmFnZXIoZ2wpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBkZWZhdWx0IHBpeGkgc2V0dGluZ3MuLlxuICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG5cblxuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBudWxsLCB0aGlzLnJlc29sdXRpb24sIHRydWUpO1xuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5jbGVhckNvbG9yID0gdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYTtcbiAgICBcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQodGhpcy5yb290UmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMuZW1pdCgnY29udGV4dCcsIGdsKTtcblxuICAgIC8vIHNldHVwIHRoZSB3aWR0aC9oZWlnaHQgcHJvcGVydGllcyBhbmQgZ2wgdmlld3BvcnRcbiAgICB0aGlzLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7ICAgIFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gaXRzIHdlYkdMIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIC8vIG5vIHBvaW50IHJlbmRlcmluZyBpZiBvdXIgY29udGV4dCBoYXMgYmVlbiBibG93biB1cCFcbiAgICBpZiAodGhpcy5nbC5pc0NvbnRleHRMb3N0KCkpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gZGlzcGxheU9iamVjdDtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IGRpc3BsYXlPYmplY3QucGFyZW50O1xuICAgIGRpc3BsYXlPYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIGRpc3BsYXlPYmplY3QudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnJvb3RSZW5kZXJUYXJnZXQsIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpOy8vdGhpcy5wcm9qZWN0aW9uKTtcblxuICAgIHRoaXMuZW1pdCgncG9zdHJlbmRlcicpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgRGlzcGxheSBPYmplY3QuXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0gcmVuZGVyVGFyZ2V0IHtQSVhJLlJlbmRlclRhcmdldH0gVGhlIHJlbmRlciB0YXJnZXQgdG8gdXNlIHRvIHJlbmRlciB0aGlzIGRpc3BsYXkgb2JqZWN0XG4gKlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJEaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHJlbmRlclRhcmdldCwgY2xlYXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgdGhpcy5iaW5kUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG5cbiAgICBpZihjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IHRoZSBmaWx0ZXIgbWFuYWdlclxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5zZXRGaWx0ZXJTdGFjayggcmVuZGVyVGFyZ2V0LmZpbHRlclN0YWNrICk7XG5cbiAgICAvLyByZW5kZXIgdGhlIHNjZW5lIVxuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyV2ViR0wodGhpcyk7XG5cbiAgICAvLyBmaW5pc2ggdGhlIGN1cnJlbnQgcmVuZGVyZXIuLlxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdGhlIG9uZSBnaXZlbiBpbiBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gb2JqZWN0UmVuZGVyZXIge1BJWEkuT2JqZWN0UmVuZGVyZXJ9IFRoZSBvYmplY3QgcmVuZGVyZXIgdG8gdXNlLlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRPYmplY3RSZW5kZXJlciA9IGZ1bmN0aW9uIChvYmplY3RSZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyZXIgPT09IG9iamVjdFJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0b3AoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG9iamVjdFJlbmRlcmVyO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHdlYkdMIHZpZXcgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB3ZWJHTCB2aWV3XG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB3ZWJHTCB2aWV3XG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9PT0gdGhpcy5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSB0aGUgbmV3IHJlbmRlciB0YXJnZXRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgaWYocmVuZGVyVGFyZ2V0ICE9PSB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcblxuICAgICAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLnNldE1hc2tTdGFjayggcmVuZGVyVGFyZ2V0LnN0ZW5jaWxNYXNrU3RhY2sgKTtcbiAgICB9XG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKS8vcHJvamVjdGlvbiwgYnVmZmVyKVxue1xuICAgIC8vVE9ETyBjYWNoZVxuICAgIGlmKHRoaXMuX2FjdGl2ZVNoYWRlciAhPT0gc2hhZGVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlU2hhZGVyID0gc2hhZGVyO1xuICAgICAgICBzaGFkZXIuYmluZCgpO1xuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgfVxufVxuXG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvY2F0aW9uKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvL1RPRE8gdGVzdCBwZXJmIG9mIGNhY2hlP1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gfHwgMDtcblxuICAgIGlmKHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiAhPT0gbG9jYXRpb24pLy9cbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbiApO1xuICAgIH1cblxuICAgIC8vVE9ETyAtIGNhbiB3ZSBjYWNoZSB0aGlzIHRleHR1cmUgdG9vP1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOyAgICAgIFxuICAgIFxuICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBiaW5kIHRoZSB0ZXh0dXJlLi5cbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0uYmluZCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEhhbmRsZXMgYSBsb3N0IHdlYmdsIGNvbnRleHRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5oYW5kbGVDb250ZXh0TG9zdCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGEgcmVzdG9yZWQgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnJlbW92ZUFsbCgpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgKGV2ZW50IGxpc3RlbmVycywgc3ByaXRlYmF0Y2gsIGV0Yy4uLilcbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldylcbntcbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICAvLyByZW1vdmUgbGlzdGVuZXJzXG4gICAgdGhpcy52aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0KTtcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCk7XG5cbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLmRlc3Ryb3lBbGwoKTtcblxuICAgIC8vIGNhbGwgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMudWlkID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIG1hbmFnZXJzXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLm1hc2tNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gbnVsbDtcbiAgICB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLnVzZVByb2dyYW0obnVsbCk7XG4gICAgdGhpcy5nbCA9IG51bGw7XG59O1xuXG4iLCJ2YXIgRGVmYXVsdFNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgUElYSSBmaWx0ZXIuIEN1cnJlbnRseSBvbmx5IFdlYkdMIHN1cHBvcnRzIGZpbHRlcnMuXG4gKiBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIGZpbHRlciB0aGlzIHNob3VsZCBiZSB5b3VyIGJhc2UgY2xhc3MuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHZlcnRleFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdmVydGV4IHNoYWRlciBzb3VyY2UgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBmcmFnbWVudFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIHVuaWZvcm1zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1bmlmb3JtcyBmb3IgdGhpcyBmaWx0ZXIuXG4gKi9cbmZ1bmN0aW9uIEFic3RyYWN0RmlsdGVyKHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zKVxue1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygc2hhZGVyc1xuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlcnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHRyYSBwYWRkaW5nIHRoYXQgdGhlIGZpbHRlciBtaWdodCBuZWVkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIHZlcnRleCBzaGFkZXJcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmdbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmVydGV4U3JjID0gdmVydGV4U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIG9mIHRoZSBmcmFtZW50IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgLy9UT0RPIGEgcmVtaW5kZXIgLSB3b3VsZCBiZSBjb29sIHRvIGhhdmUgbG93ZXIgcmVzIGZpbHRlcnMgYXMgdGhpcyB3b3VsZCBnaXZlIGJldHRlciBwZXJmb3JtYW5jZS5cblxuICAgIC8vdHlwZW9mIGZyYWdtZW50U3JjID09PSAnc3RyaW5nJyA/IGZyYWdtZW50U3JjLnNwbGl0KCcnKSA6IChmcmFnbWVudFNyYyB8fCBbXSk7XG5cbn1cblxuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RmlsdGVyO1xuXG4vKipcbiAqIEdyYWJzIGEgc2hhZGVyIGZyb20gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBzaGFkZXIgZnJvbVxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuZ2V0U2hhZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyc1tnbC5pZF07XG5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IG5ldyBEZWZhdWx0U2hhZGVyKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIsXG4gICAgICAgICAgICB0aGlzLnZlcnRleFNyYyxcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRTcmMsXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaGFkZXJzW2dsLmlkXSA9IHNoYWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbn07XG5cbi8qKlxuICogU3luY3MgYSB1bmlmb3JtIGJldHdlZW4gdGhlIGNsYXNzIG9iamVjdCBhbmQgdGhlIHNoYWRlcnMuXG4gKlxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuc2hhZGVycy5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnNoYWRlcnNbaV0uc3luY1VuaWZvcm0odW5pZm9ybSk7XG4gICAgfVxufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKlxuICogQmFzaWMgRlhBQSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgY29kZSBvbiBnZWVrczNkLmNvbSB3aXRoIHRoZVxuICogbW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXG4gKiB1bnN1cHBvcnRlZCBieSBXZWJHTC5cbiAqXG4gKiAtLVxuICogRnJvbTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICpcbiAqL1xuZnVuY3Rpb24gRlhBQUZpbHRlcigpXG57XG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxuXFxudm9pZCB0ZXhjb29yZHModmVjMiBmcmFnQ29vcmQsIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk5XLCBvdXQgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiU1csIG91dCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzIgaW52ZXJzZVZQID0gMS4wIC8gcmVzb2x1dGlvbi54eTtcXG4gICAgdl9yZ2JOVyA9IChmcmFnQ29vcmQgKyB2ZWMyKC0xLjAsIC0xLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JORSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYlNXID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU0UgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIDEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk0gPSB2ZWMyKGZyYWdDb29yZCAqIGludmVyc2VWUCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbiAgIHZSZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcXG5cXG4gICAvL2NvbXB1dGUgdGhlIHRleHR1cmUgY29vcmRzIGFuZCBzZW5kIHRoZW0gdG8gdmFyeWluZ3NcXG4gICB0ZXhjb29yZHMoYVRleHR1cmVDb29yZCAqIHJlc29sdXRpb24sIHJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG5cXG4vKipcXG5CYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXFxubW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXFxudW5zdXBwb3J0ZWQgYnkgV2ViR0wuXFxuXFxuLS1cXG5cXG5Gcm9tOlxcbmh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XFxuXFxuQ29weXJpZ2h0IChjKSAyMDExIGJ5IEFybWluIFJvbmFjaGVyLlxcblxcblNvbWUgcmlnaHRzIHJlc2VydmVkLlxcblxcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcXG5tZXQ6XFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcXG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxcbiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXFxuICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXFxuICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxcblxcbiAgICAqIFRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yXFxuICAgICAgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljXFxuICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxcblxcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcXG5cXFwiQVMgSVNcXFwiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxcbkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXFxuT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXFxuU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxcblRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxcbiovXFxuXFxuI2lmbmRlZiBGWEFBX1JFRFVDRV9NSU5cXG4gICAgI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gICAoMS4wLyAxMjguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01VTFxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAgICgxLjAgLyA4LjApXFxuI2VuZGlmXFxuI2lmbmRlZiBGWEFBX1NQQU5fTUFYXFxuICAgICNkZWZpbmUgRlhBQV9TUEFOX01BWCAgICAgOC4wXFxuI2VuZGlmXFxuXFxuLy9vcHRpbWl6ZWQgdmVyc2lvbiBmb3IgbW9iaWxlLCB3aGVyZSBkZXBlbmRlbnRcXG4vL3RleHR1cmUgcmVhZHMgY2FuIGJlIGEgYm90dGxlbmVja1xcbnZlYzQgZnhhYShzYW1wbGVyMkQgdGV4LCB2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JOVywgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JTVywgdmVjMiB2X3JnYlNFLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzQgY29sb3I7XFxuICAgIG1lZGl1bXAgdmVjMiBpbnZlcnNlVlAgPSB2ZWMyKDEuMCAvIHJlc29sdXRpb24ueCwgMS4wIC8gcmVzb2x1dGlvbi55KTtcXG4gICAgdmVjMyByZ2JOVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTlcpLnh5ejtcXG4gICAgdmVjMyByZ2JORSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTkUpLnh5ejtcXG4gICAgdmVjMyByZ2JTVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU1cpLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU0UpLnh5ejtcXG4gICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTSk7XFxuICAgIHZlYzMgcmdiTSAgPSB0ZXhDb2xvci54eXo7XFxuICAgIHZlYzMgbHVtYSA9IHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdChyZ2JOVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFORSA9IGRvdChyZ2JORSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTVyA9IGRvdChyZ2JTVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdChyZ2JTRSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNICA9IGRvdChyZ2JNLCAgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNaW4gPSBtaW4obHVtYU0sIG1pbihtaW4obHVtYU5XLCBsdW1hTkUpLCBtaW4obHVtYVNXLCBsdW1hU0UpKSk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgobHVtYU0sIG1heChtYXgobHVtYU5XLCBsdW1hTkUpLCBtYXgobHVtYVNXLCBsdW1hU0UpKSk7XFxuXFxuICAgIG1lZGl1bXAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcblxcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoKGx1bWFOVyArIGx1bWFORSArIGx1bWFTVyArIGx1bWFTRSkgKlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwpLCBGWEFBX1JFRFVDRV9NSU4pO1xcblxcbiAgICBmbG9hdCByY3BEaXJNaW4gPSAxLjAgLyAobWluKGFicyhkaXIueCksIGFicyhkaXIueSkpICsgZGlyUmVkdWNlKTtcXG4gICAgZGlyID0gbWluKHZlYzIoRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBtYXgodmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiBpbnZlcnNlVlA7XFxuXFxuICAgIHZlYzMgcmdiQSA9IDAuNSAqIChcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqICgxLjAgLyAzLjAgLSAwLjUpKS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDIuMCAvIDMuMCAtIDAuNSkpLnh5eik7XFxuICAgIHZlYzMgcmdiQiA9IHJnYkEgKiAwLjUgKyAwLjI1ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogLTAuNSkueHl6ICtcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqIDAuNSkueHl6KTtcXG5cXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QocmdiQiwgbHVtYSk7XFxuICAgIGlmICgobHVtYUIgPCBsdW1hTWluKSB8fCAobHVtYUIgPiBsdW1hTWF4KSlcXG4gICAgICAgIGNvbG9yID0gdmVjNChyZ2JBLCB0ZXhDb2xvci5hKTtcXG4gICAgZWxzZVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkIsIHRleENvbG9yLmEpO1xcbiAgICByZXR1cm4gY29sb3I7XFxufVxcblxcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBmeGFhKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICogdlJlc29sdXRpb24sIHZSZXNvbHV0aW9uLCB2X3JnYk5XLCB2X3JnYk5FLCB2X3JnYlNXLCB2X3JnYlNFLCB2X3JnYk0pO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxufVxuXG5GWEFBRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkZYQUFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRlhBQUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRlhBQUZpbHRlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICovXG5GWEFBRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIoIHJlbmRlcmVyICk7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG4iLCJ2YXIgQWJzdHJhY3RGaWx0ZXIgPSByZXF1aXJlKCcuL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgU3ByaXRlTWFza0ZpbHRlciBjbGFzc1xuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICovXG5mdW5jdGlvbiBTcHJpdGVNYXNrRmlsdGVyKHNwcml0ZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXNrQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICAgdk1hc2tDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIC8vIGNoZWNrIGNsaXAhIHRoaXMgd2lsbCBzdG9wIHRoZSBtYXNrIGJsZWVkaW5nIG91dCBmcm9tIHRoZSBlZGdlc1xcbiAgICB2ZWMyIHRleHQgPSBhYnMoIHZNYXNrQ29vcmQgLSAwLjUgKTtcXG4gICAgdGV4dCA9IHN0ZXAoMC41LCB0ZXh0KTtcXG4gICAgZmxvYXQgY2xpcCA9IDEuMCAtIG1heCh0ZXh0LnksIHRleHQueCk7XFxuICAgIHZlYzQgb3JpZ2luYWwgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgICB2ZWM0IG1hc2t5ID0gdGV4dHVyZTJEKG1hc2ssIHZNYXNrQ29vcmQpO1xcbiAgICBvcmlnaW5hbCAqPSAobWFza3kuciAqIG1hc2t5LmEgKiBhbHBoYSAqIGNsaXApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBvcmlnaW5hbDtcXG59XFxuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hc2s6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLl90ZXh0dXJlIH0sXG4gICAgICAgICAgICBhbHBoYTogICAgICAgICAgeyB0eXBlOiAnZicsIHZhbHVlOiAxfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG59XG5cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVNYXNrRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVNYXNrRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS5fdGV4dHVyZTtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS53b3JsZEFscGhhO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHVzZWQgdG8gbW92ZSB0aGUgZGlzcGxhY2VtZW50IG1hcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlTWFza0ZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHbE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQmxlbmRNb2RlTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59XG5cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmRNb2RlTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxlbmRNb2RlTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzLXVwIHRoZSBnaXZlbiBibGVuZE1vZGUgZnJvbSBXZWJHTCdzIHBvaW50IG9mIHZpZXcuXG4gKlxuICogQHBhcmFtIGJsZW5kTW9kZSB7bnVtYmVyfSB0aGUgYmxlbmRNb2RlLCBzaG91bGQgYmUgYSBQaXhpIGNvbnN0LCBzdWNoIGFzIGBQSVhJLkJMRU5EX01PREVTLkFERGAuIFNlZVxuICogIHtAbGluayBQSVhJLkJMRU5EX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICovXG5CbGVuZE1vZGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRCbGVuZE1vZGUgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPT09IGJsZW5kTW9kZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMucmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmN1cnJlbnRCbGVuZE1vZGVdO1xuICAgIHRoaXMucmVuZGVyZXIuZ2wuYmxlbmRGdW5jKG1vZGVbMF0sIG1vZGVbMV0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpLFxuICAgIFF1YWQgPSByZXF1aXJlKCcuLi91dGlscy9RdWFkJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gRmlsdGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW107XG5cbiAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICByZW5kZXJUYXJnZXQ6cmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldCxcbiAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICBib3VuZHM6bnVsbFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgLy8gbGlzdGVuIGZvciBjb250ZXh0IGFuZCB1cGRhdGUgbmVjZXNzYXJ5IGJ1ZmZlcnNcbiAgICAvL1RPRE8gbWFrZSB0aGlzIGR5bmFtaWMhXG4gICAgLy9UT0RPIHRlc3QgdGhpcyBvdXQgYnkgZm9yY2VzIHBvd2VyIG9mIHR3bz9cbiAgICB0aGlzLnRleHR1cmVTaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZnJhbWVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcbn1cblxuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWx0ZXJNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBGaWx0ZXJNYW5hZ2VyO1xuXG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnF1YWQgPSBuZXcgUXVhZChnbCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHBhcmFtIGJ1ZmZlciB7QXJyYXlCdWZmZXJ9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnNldEZpbHRlclN0YWNrID0gZnVuY3Rpb24gKCBmaWx0ZXJTdGFjayApXG57XG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IGZpbHRlclN0YWNrO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXIgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBmaWx0ZXJzIHtQSVhJLkFic3RyYWN0RmlsZXJbXX0gdGhlIGZpbHRlcnMgdGhhdCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2tcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucHVzaEZpbHRlciA9IGZ1bmN0aW9uICh0YXJnZXQsIGZpbHRlcnMpXG57XG4gICAgLy8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdC4uXG4gICAgLy8gVE9ETyByZXBsYWNlIGNsb25lIHdpdGggYSBjb3B5IHRvIHNhdmUgb2JqZWN0IGNyZWF0aW9uXG4gICAgdmFyIGJvdW5kcyA9IHRhcmdldC5maWx0ZXJBcmVhID8gdGFyZ2V0LmZpbHRlckFyZWEuY2xvbmUoKSA6IHRhcmdldC5nZXRCb3VuZHMoKTtcblxuICAgIC8vYm91bmRzID0gYm91bmRzLmNsb25lKCk7XG5cbiAgICAvLyByb3VuZCBvZmYgdGhlIHJlY3RhbmdsZSB0byBnZXQgYSBuaWNlIHNtb29vb29vb3RoIGZpbHRlciA6KVxuICAgIGJvdW5kcy54ID0gYm91bmRzLnggfCAwO1xuICAgIGJvdW5kcy55ID0gYm91bmRzLnkgfCAwO1xuICAgIGJvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCB8IDA7XG4gICAgYm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgfCAwO1xuXG5cbiAgICAvLyBwYWRkaW5nIVxuICAgIHZhciBwYWRkaW5nID0gZmlsdGVyc1swXS5wYWRkaW5nIHwgMDtcbiAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG5cblxuICAgIGlmKHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvL1RPRE8gdGhpcyB3aWxsIGJyZWFrIGlmIHRoZSByZW5kZXJUZXh0dXJlIHRyYW5zZm9ybSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgdHJhbnNsYXRpb24uXG4gICAgICAgIC8vV2lsbCBuZWVkIHRvIHRha2UgdGhlIGZ1bGwgbWF0cml4IHRyYW5zZm9ybSBpbnRvIGFjb3VudC4uXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQudHJhbnNmb3JtO1xuXG4gICAgICAgIGJvdW5kcy54ICs9IHRyYW5zZm9ybS50eDtcbiAgICAgICAgYm91bmRzLnkgKz0gdHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG5cbiAgICAgICAgYm91bmRzLnggLT0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSAtPSB0cmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgICB0aGlzLmNhcEZpbHRlckFyZWEoIGJvdW5kcyApO1xuICAgIH1cblxuICAgIGlmKGJvdW5kcy53aWR0aCA+IDAgJiYgYm91bmRzLmhlaWdodCA+IDApXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGJvdW5kcztcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGV4dHVyZSk7XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRleHR1cmUuLlxuICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gVE9ETyBnZXQgcmlkIG9mIG9iamVjdCBjcmVhdGlvbiFcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogdGV4dHVyZSxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBwdXNoIHNvbXRoaW5nIG9uIHRvIHRoZSBzdGFjayB0aGF0IGlzIGVtcHR5XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcnNcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnBvcEZpbHRlciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrLnBvcCgpO1xuICAgIHZhciBwcmV2aW91c0ZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrW3RoaXMuZmlsdGVyU3RhY2subGVuZ3RoLTFdO1xuXG4gICAgdmFyIGlucHV0ID0gZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyBpZiB0aGUgcmVuZGVyVGFyZ2V0IGlzIG51bGwgdGhlbiB3ZSBkb24ndCBhcHBseSB0aGUgZmlsdGVyIGFzIGl0cyBvZmZzY3JlZW5cbiAgICBpZighZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IHByZXZpb3VzRmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyB1c2UgcHJvZ3JhbVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaW5wdXQuZnJhbWU7XG5cbiAgICB0aGlzLnF1YWQubWFwKHRoaXMudGV4dHVyZVNpemUsIGlucHV0LmZyYW1lKTtcblxuXG4gICAgLy8gVE9ETy4uIHRoaXMgcHJvYmFibHkgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgZmlsdGVycyA9IGZpbHRlckRhdGEuZmlsdGVyO1xuXG4gICAgLy8gYXNzdW1pbmcgYWxsIGZpbHRlcnMgZm9sbG93IHRoZSBjb3JyZWN0IGZvcm1hdD8/XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAyICogNCAqIDQpO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIG5vcm1hbCBibGVuZG1vZGUhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShDT05TVC5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAxKVxuICAgIHtcbiAgICAgICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoZW4gc2V0dGluZyB0aGlzIGVhY2ggdGltZT9cbiAgICAgICAgaWYgKGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgIGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1swXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgaW5wdXQsIG91dHB1dCApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggaW5wdXQgKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZmxpcFRleHR1cmUgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3BUZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aC0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICAgICAgaWYgKGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBmbG9wVGV4dHVyZSApO1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGZsaXBUZXh0dXJlO1xuICAgICAgICAgICAgZmxpcFRleHR1cmUgPSBmbG9wVGV4dHVyZTtcbiAgICAgICAgICAgIGZsb3BUZXh0dXJlID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlcnNbZmlsdGVycy5sZW5ndGgtMV0uYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBvdXRwdXQgKTtcblxuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxpcFRleHR1cmUgKTtcbiAgICAgICAgdGhpcy5yZXR1cm5SZW5kZXJUYXJnZXQoIGZsb3BUZXh0dXJlICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckRhdGEuZmlsdGVyO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY2xlYXIgdGhlIFJlbmRlclRhcmdldFxuICogQHJldHVybiB7UmVuZGVyVGFyZ2V0fVxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIGNsZWFyIClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy50ZXh0dXJlUG9vbC5wb3AoKSB8fCBuZXcgUmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyZXIuZ2wsIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0LCBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiAqIENPTlNULkZJTFRFUl9SRVNPTFVUSU9OKTtcbiAgICByZW5kZXJUYXJnZXQuZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcih0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyVGFyZ2V0O1xufTtcblxuLypcbiAqIFJldHVybnMgYSBSZW5kZXJUYXJnZXQgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1JlbmRlclRhcmdldH0gVGhlIFJlbmRlclRhcmdldCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5SZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0KVxue1xuICAgIHRoaXMudGV4dHVyZVBvb2wucHVzaCggcmVuZGVyVGFyZ2V0ICk7XG59O1xuXG4vKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2hhZGVyIHtTaGFkZXJ9IFRoZSBzaGFkZXIgdG8gdXBsb2FkXG4gKiBAcGFyYW0gaW5wdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBjbGVhciB0aGUgb3V0cHV0VGFyZ2V0XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHNoYWRlciwgaW5wdXRUYXJnZXQsIG91dHB1dFRhcmdldCwgY2xlYXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG91dHB1dFRhcmdldCk7XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICBvdXRwdXRUYXJnZXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHNoYWRlclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gQ2FuIHRoaXMgYmUgY2FjaGVkIGFuZCBub3QgYHRvQXJyYXlgZWQgZWFjaCBmcmFtZT9cbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG5cbiAgICAvL1RPRE8gY2FuIHRoaXMgYmUgb3B0aW1pc2VkP1xuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcbi8qXG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcbiovXG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBpbnB1dFRhcmdldC50ZXh0dXJlKTtcblxuICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbn07XG5cbi8qXG4gKiBDYWxjdWxhdGVzIHRoZSBtYXBwZWQgbWF0cml4XG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWFcbiAqIEBwYXJhbSBzcHJpdGUge1Nwcml0ZX0gdGhlIHRhcmdldCBzcHJpdGVcbiAqIEBwYXJhbSBvdXRwdXRNYXRyaXgge01hdHJpeH0gQGFsdmluXG4gKi9cbi8vIFRPRE8gcGxheWluZyBhcm91bmQgaGVyZS4uIHRoaXMgaXMgdGVtcG9yYXJ5IC0gKHdpbGwgZW5kIHVwIGluIHRoZSBzaGFkZXIpXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jYWxjdWxhdGVNYXBwZWRNYXRyaXggPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSwgc3ByaXRlLCBvdXRwdXRNYXRyaXgpXG57XG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gc3ByaXRlLndvcmxkVHJhbnNmb3JtLmNvcHkobWF0aC5NYXRyaXguVEVNUF9NQVRSSVgpLFxuICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICB2YXIgbWFwcGVkTWF0cml4ID0gb3V0cHV0TWF0cml4LmlkZW50aXR5KCk7XG5cbiAgICAvLyBzY2FsZS4uXG4gICAgdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCApO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKDEgLCByYXRpbyk7XG5cbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyB0ZXh0dXJlLndpZHRoKTtcbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gdGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0udHggLz0gdGV4dHVyZS53aWR0aCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICB3b3JsZFRyYW5zZm9ybS50eSAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0uaW52ZXJ0KCk7XG5cbiAgICBtYXBwZWRNYXRyaXgucHJlcGVuZCh3b3JsZFRyYW5zZm9ybSk7XG5cbiAgICAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIG1hcHBlZE1hdHJpeC50cmFuc2xhdGUoc3ByaXRlLmFuY2hvci54LCBzcHJpdGUuYW5jaG9yLnkpO1xuXG4gICAgcmV0dXJuIG1hcHBlZE1hdHJpeDtcblxuICAgIC8vIEtlZXBpbmcgdGhlIG9yZ2luYWwgYXMgYSByZW1pbmRlciB0byBtZSBvbiBob3cgdGhpcyB3b3JrcyFcbiAgICAvL1xuICAgIC8vIHZhciBtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvLyAvLyBzY2FsZS4uXG4gICAgLy8gdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgLy8gbS50cmFuc2xhdGUoZmlsdGVyQXJlYS54IC8gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgZmlsdGVyQXJlYS55IC8gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQpO1xuXG5cbiAgICAvLyBtLnNjYWxlKDEgLCByYXRpbyk7XG5cblxuICAgIC8vIHZhciB0cmFuc2Zvcm0gPSB3dC5jbG9uZSgpO1xuXG4gICAgLy8gdmFyIHRyYW5zbGF0ZVNjYWxlWCA9ICh0aGlzLnRleHR1cmVTaXplLndpZHRoIC8gNjIwKTtcbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gMzgwKTtcblxuICAgIC8vIHRyYW5zZm9ybS50eCAvPSA2MjAgKiB0cmFuc2xhdGVTY2FsZVg7XG4gICAgLy8gdHJhbnNmb3JtLnR5IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcblxuICAgIC8vIHRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIC8vIHRyYW5zZm9ybS5hcHBlbmQobSk7XG5cbiAgICAvLyAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgLy8gdHJhbnNmb3JtLnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIC8vIHJldHVybiB0cmFuc2Zvcm07XG59O1xuXG4vKlxuICogQ29uc3RyYWlucyB0aGUgZmlsdGVyIGFyZWEgdG8gdGhlIHRleHR1cmUgc2l6ZVxuICogQHBhcmFtIGZpbHRlckFyZWEge1JlY3RhbmdsZX0gVGhlIGZpbHRlciBhcmVhIHdlIHdhbnQgdG8gY2FwXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhcEZpbHRlckFyZWEgPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSlcbntcbiAgICBpZiAoZmlsdGVyQXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEud2lkdGggKz0gZmlsdGVyQXJlYS54O1xuICAgICAgICBmaWx0ZXJBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgKz0gZmlsdGVyQXJlYS55O1xuICAgICAgICBmaWx0ZXJBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggZmlsdGVyQXJlYS54ICsgZmlsdGVyQXJlYS53aWR0aCA+IHRoaXMudGV4dHVyZVNpemUud2lkdGggKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCA9IHRoaXMudGV4dHVyZVNpemUud2lkdGggLSBmaWx0ZXJBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnkgKyBmaWx0ZXJBcmVhLmhlaWdodCA+IHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLSBmaWx0ZXJBcmVhLnk7XG4gICAgfVxufTtcblxuLypcbiAqIFJlc2l6ZXMgYWxsIHRoZSByZW5kZXIgdGFyZ2V0cyBpbiB0aGUgcG9vbFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLnRleHR1cmVTaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLnJlc2l6ZSggd2lkdGgsIGhlaWdodCApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGZpbHRlciBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBmaWx0ZXIgc3RhY2suXG4gKlxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnF1YWQuZGVzdHJveSgpO1xuICAgIFxuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBudWxsO1xuICAgIHRoaXMub2Zmc2V0WSA9IDA7XG5cbiAgICAvLyBkZXN0cm95IHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHR1cmVQb29sLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlUG9vbCA9IG51bGw7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgQWxwaGFNYXNrRmlsdGVyID0gcmVxdWlyZSgnLi4vZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNYXNrTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICB0aGlzLmFscGhhTWFza1Bvb2wgPSBbXTtcbn1cblxuTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hc2tNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgaWYgKG1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBtYXNrIGZyb20gdGhlIG1hc2sgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucG9wU3ByaXRlTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTcHJpdGVNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdmFyIGFscGhhTWFza0ZpbHRlciA9IHRoaXMuYWxwaGFNYXNrUG9vbC5wb3AoKTtcblxuICAgIGlmICghYWxwaGFNYXNrRmlsdGVyKVxuICAgIHtcbiAgICAgICAgYWxwaGFNYXNrRmlsdGVyID0gW25ldyBBbHBoYU1hc2tGaWx0ZXIobWFza0RhdGEpXTtcbiAgICB9XG5cbiAgICBhbHBoYU1hc2tGaWx0ZXJbMF0ubWFza1Nwcml0ZSA9IG1hc2tEYXRhO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRhcmdldCwgYWxwaGFNYXNrRmlsdGVyKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKi9cbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTcHJpdGVNYXNrID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVycyA9IHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbC5wdXNoKGZpbHRlcnMpO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTdGVuY2lsTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaE1hc2sobWFza0RhdGEpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BNYXNrKG1hc2tEYXRhKTtcbn07XG5cbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1RleHR1cmVTaGFkZXInKSxcbiAgICBDb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhBdHRpYnMgPSAxMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG5cbi8vICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcbn1cblxuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaGFkZXJNYW5hZ2VyO1xudXRpbHMucGx1Z2luVGFyZ2V0Lm1peGluKFNoYWRlck1hbmFnZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlck1hbmFnZXI7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cblNoYWRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlIGNvcnJlY3RseSBhcyB0aGlzIHRlbmRzIHRvIHZhcnlcbiAgICB0aGlzLm1heEF0dGlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xuXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1heEF0dGliczsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRPRE8gLSBXaHkgYXJlIHRoZXNlIG5vdCBwbHVnaW5zPyBXZSBjYW4ndCBkZWNvdXBsZSBwcmltaXRpdmVzIHVubGVzcyB0aGV5IGFyZS4uLi5cbiAgICB0aGlzLmRlZmF1bHRTaGFkZXIgPSBuZXcgVGV4dHVyZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcyk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbmV3IENvbXBsZXhQcmltaXRpdmVTaGFkZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFRha2VzIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHBhcmFtZXRlcnMgYW5kIHVwbG9hZHMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXR0cmlicyB7YW55W119IGF0dHJpYnNcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0QXR0cmlicyA9IGZ1bmN0aW9uIChhdHRyaWJzKVxue1xuICAgIC8vIHJlc2V0IHRlbXAgc3RhdGVcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRlbXBBdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAodmFyIGEgaW4gYXR0cmlicylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbYV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSAhPT0gdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHNoYWRlci5cbiAqXG4gKiBAcGFyYW0gc2hhZGVyIHtQSVhJLlNoYWRlcn0gdGhlIHNoYWRlciB0byB1cGxvYWRcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0U2hhZGVyID0gZnVuY3Rpb24gKHNoYWRlcilcbntcbiAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRJZCA9PT0gc2hhZGVyLnVpZClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50SWQgPSBzaGFkZXIudWlkO1xuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5nbC51c2VQcm9ncmFtKHNoYWRlci5wcm9ncmFtKTtcbiAgICB0aGlzLnNldEF0dHJpYnMoc2hhZGVyLmF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0LlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBXZWJHTE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBudWxsO1xufVxuXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFza01hbmFnZXI7XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgbWFzayBzdGFjayB0aGF0IGlzIHVzZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICpcbiAqIEBwYXJhbSBzdGVuY2lsTWFza1N0YWNrIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9IFRoZSBtYXNrIHN0YWNrXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnNldE1hc2tTdGFjayA9IGZ1bmN0aW9uICggc3RlbmNpbE1hc2tTdGFjayApXG57XG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBpZiAoc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLiBAYWx2aW5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWwgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQuYXR0YWNoU3RlbmNpbEJ1ZmZlcigpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICBpZiAoc21zLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgZ2wuY2xlYXIoZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTtcbiAgICAgICAgc21zLnJldmVyc2UgPSB0cnVlO1xuICAgICAgICBzbXMuY291bnQgPSAwO1xuICAgIH1cblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucHVzaCh3ZWJHTERhdGEpO1xuXG4gICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5WRVJUKTtcblxuICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgIGlmIChzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgIH1cblxuICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSBsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLktFRVApO1xuXG4gICAgc21zLmNvdW50Kys7XG59O1xuXG4vKipcbiAqIFRPRE8gdGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSFcbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuYmluZEdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgLy9pZiAodGhpcy5fY3VycmVudEdyYXBoaWNzID09PSBncmFwaGljcylyZXR1cm47XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBiaW5kIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0zZnYoc2hhZGVyLnVuaWZvcm1zLmNvbG9yLl9sb2NhdGlvbiwgd2ViR0xEYXRhLmNvbG9yKTtcblxuICAgICAgICBnbC51bmlmb3JtMWYoc2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSk7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDQgKiAyLCAwKTtcblxuICAgICAgICAvLyBub3cgZG8gdGhlIHJlc3QuLlxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAqL1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvL3RoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5hY3RpdmF0ZVByaW1pdGl2ZVNoYWRlcigpO1xuLy8gICAgICAgIHNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wcmltaXRpdmVTaGFkZXI7XG4gICAgICAgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG5cbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuLy8gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuXG4gICAgICAvKiAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7Ki9cbiAgICB9XG59O1xuXG4vKipcbiAqIFRPRE8gQGFsdmluXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIHNtcyA9IHRoaXMuc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucG9wKCk7XG5cbiAgICBzbXMuY291bnQtLTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIC8vIHRoZSBzdGFjayBpcyBlbXB0eSFcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgICAgIHRoaXMuYmluZEdyYXBoaWNzKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcblxuICAgICAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRyYXcgYSBxdWFkIHRvIGluY3JlbWVudC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgICAgICAgICAvLyBkcmF3IHRoZSB0cmlhbmdsZSBzdHJpcCFcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCArPSAyO1xuXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKSwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgLy8gIGNvbnNvbGUubG9nKFwiPDw+PlwiKVxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIChsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cblxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIG1hc2sgc3RhY2suXG4gKlxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2sgPSBudWxsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfSBUaGUgbWFzayBkYXRhIHN0cnVjdHVyZSB0byB1c2VcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIFxuICAgIC8vVE9ETyBGSVhcbiAgICBpZiAobWFza0RhdGEuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MudXBkYXRlR3JhcGhpY3MobWFza0RhdGEsIHRoaXMucmVuZGVyZXIuZ2wpO1xuICAgIH1cblxuICAgIGlmICghbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFN0ZW5jaWwobWFza0RhdGEsIG1hc2tEYXRhLl93ZWJHTFt0aGlzLnJlbmRlcmVyLmdsLmlkXS5kYXRhWzBdKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIodGhpcy5yZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcblxuICAgIHRoaXMucG9wU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuIiwiLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLm9uKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xufVxuXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTE1hbmFnZXI7XG5cbi8qKlxuICogR2VuZXJpYyBtZXRob2QgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbldlYkdMTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblx0Ly8gZG8gc29tZSBjb2RlcyBpbml0IVxufTtcblxuLyoqXG4gKiBHZW5lcmljIGRlc3Ryb3kgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlbmRlcmVyLm9mZignY29udGV4dCcsIHRoaXMub25Db250ZXh0Q2hhbmdlLCB0aGlzKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCcuL1NoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBjb21wbGV4IHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQ29tcGxleFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyBjb2xvcjsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoY29sb3IgKiBhbHBoYSAqIHRpbnQsIGFscGhhKTsnLC8vXCIgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIGNvbG9yOiAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsMCwwXSB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB0aW50OiAgIHsgdHlwZTogJzNmJywgdmFsdWU6IFswLCAwLCAwXSB9LFxuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFDb2xvcjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQmFzZSBzaGFkZXIgY2xhc3MgZm9yIFBJWEkgbWFuYWdlZCBzaGFkZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbdW5pZm9ybXNdIHtvYmplY3R9IFVuaWZvcm1zIGZvciB0aGlzIHNoYWRlci5cbiAqIEBwYXJhbSBbYXR0cmlidXRlc10ge29iamVjdH0gQXR0cmlidXRlcyBmb3IgdGhpcyBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIFNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcylcbntcbiAgICBpZiAoIXZlcnRleFNyYyB8fCAhZnJhZ21lbnRTcmMpXG4gICAge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXhpLmpzIEVycm9yLiBTaGFkZXIgcmVxdWlyZXMgdmVydGV4U3JjIGFuZCBmcmFnbWVudFNyYycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5nbCA9IHNoYWRlck1hbmFnZXIucmVuZGVyZXIuZ2w7XG5cbiAgICAvL1RPRE8gbWF5YmUgd2Ugc2hvdWxkIHBhc3MgcmVuZGVyZXIgcmF0aGVyIHRoYW4gc2hhZGVyIG1hbmdlcj8/IGZvb2QgZm9yIHRob3VnaHQuLlxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IHNoYWRlck1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgcHJvZ3JhbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUHJvZ3JhbX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaWZvcm1zIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhdHRyaWJ1dGVzIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50ZXJcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlciBhcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmM7XG5cbiAgICB0aGlzLmluaXQoKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHNoYWRlciBhbmQgdXNlcyBpdFxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbXBpbGUoKTtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy51bmlmb3JtcykpO1xuICAgIHRoaXMuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKSk7XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSB1bmlmb3JtIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgdW5pZm9ybXMgdG8gY2FjaGVcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnVuaWZvcm1zW2tleXNbaV1dLl9sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWNoZXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgYXR0cmlidXRlIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgYXR0cmlidXRlcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlQXR0cmlidXRlTG9jYXRpb25zID0gZnVuY3Rpb24gKGtleXMpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleXNbaV1dID0gdGhpcy5nbC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGtleXNbaV0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgbmVlZGVkIGFueW1vcmUuLi5cblxuICAgIC8vIEJlZ2luIHdvcnN0IGhhY2sgZXZhIC8vXG5cbiAgICAvLyBXSFk/Pz8gT05MWSBvbiBteSBjaHJvbWUgcGl4ZWwgdGhlIGxpbmUgYWJvdmUgcmV0dXJucyAtMSB3aGVuIHVzaW5nIGZpbHRlcnM/XG4gICAgLy8gbWF5YmUgaXRzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnbCBjb250ZXh0LlxuICAgIC8vIEknbSBjb252aW5jZWQgdGhpcyBpcyBhIGJ1ZyBpbiB0aGUgY2hyb21lIGJyb3dzZXIgYXMgdGhlcmUgaXMgTk8gcmVhc29uIHdoeSB0aGlzIHNob3VsZCBiZSByZXR1cm5pbmcgLTEgZXNwZWNpYWxseSBhcyBpdCBvbmx5IG1hbmlmZXN0cyBvbiBteSBjaHJvbWUgcGl4ZWxcbiAgICAvLyBJZiB0aGVyZXMgYW55IHdlYkdMIHBlb3BsZSB0aGF0IGtub3cgd2h5IGNvdWxkIGhhcHBlbiBwbGVhc2UgaGVscCA6KVxuICAgIC8vIGlmICh0aGlzLmF0dHJpYnV0ZXMuYUNvbG9yID09PSAtMSl7XG4gICAgLy8gICAgIHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPSAyO1xuICAgIC8vIH1cblxuICAgIC8vIEVuZCB3b3JzdCBoYWNrIGV2YSAvL1xufTtcblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQgY3JlYXRlcyB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19XG4gKi9cblNoYWRlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHZhciBnbFZlcnRTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuVkVSVEVYX1NIQURFUiwgdGhpcy52ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuRlJBR01FTlRfU0hBREVSLCB0aGlzLmZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuICh0aGlzLnByb2dyYW0gPSBwcm9ncmFtKTtcbn07XG5cbi8qKlxuKiBBZGRzIGEgbmV3IHVuaWZvcm1cbipcbiogQHBhcmFtIHVuaWZvcm0ge29iamVjdH0gdGhlIG5ldyB1bmlmb3JtIHRvIGF0dGFjaFxuKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgbG9jYXRpb24gPSB1bmlmb3JtLl9sb2NhdGlvbixcbiAgICAgICAgdmFsdWUgPSB1bmlmb3JtLnZhbHVlLFxuICAgICAgICBnbCA9IHRoaXMuZ2wsXG4gICAgICAgIGksIGlsO1xuXG4gICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIHNpbmdsZSBpbnQgdmFsdWVcbiAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGZsb2F0IHZhbHVlXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBjYXNlICcxZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSgyKSBvciBKUyBBcnJyYXlcbiAgICAgICAgY2FzZSAnMmYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDMpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICczZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDQpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgMkQgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YyJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDNEIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2Myc6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSA0RCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjQnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMWl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMml2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnNGl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20yJzpcbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgIGNhc2UgJ01hdHJpeDJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB1bmlmb3JtLnRyYW5zcG9zZSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20zJzpcbiAgICAgICAgY2FzZSAnbWF0Myc6XG4gICAgICAgIGNhc2UgJ01hdHJpeDNmdic6XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICBjYXNlICdtYXQ0JzpcbiAgICAgICAgY2FzZSAnTWF0cml4NGZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIENvbG9yIFZhbHVlXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgaW50ZWdlcnMgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdjEnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAyRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yydic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgyICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAyXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDIgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYXJyYXkgb2YgM0QgUG9pbnQgb2JqZWN0c1xuICAgICAgICBjYXNlICd2M3YnOlxuICAgICAgICAgICAgaWYgKCF1bmlmb3JtLl9hcnJheSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMyAqIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlsID0gdmFsdWUubGVuZ3RoOyBpIDwgaWw7ICsraSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogM10gICAgICAgPSB2YWx1ZVtpXS54O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzICsgMV0gICA9IHZhbHVlW2ldLnk7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAyXSAgID0gdmFsdWVbaV0uejtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiA0RCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Y0dic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg0ICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0XSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDJdICAgPSB2YWx1ZVtpXS56O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgM10gICA9IHZhbHVlW2ldLnc7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gUElYSS5UZXh0dXJlXG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuXG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUgfHwgIXVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGlzIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xbJ1RFWFRVUkUnICsgdGhpcy50ZXh0dXJlQ291bnRdKTtcblxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXTtcblxuICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdGV4dHVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9uZS4uXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgICAgICAgICAgLy8gc2V0IHVuaWZvcm0gdG8gdGV4dHVyZSBpbmRleFxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0uX2xvY2F0aW9uLCB0aGlzLnRleHR1cmVDb3VudCk7XG5cbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBuZXh0IHRleHR1cmUgaWRcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgU2hhZGVyIFdhcm5pbmc6IFVua25vd24gdW5pZm9ybSB0eXBlOiAnICsgdW5pZm9ybS50eXBlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNoYWRlciB1bmlmb3JtIHZhbHVlcy5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm1zID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy51bmlmb3JtcylcbiAgICB7XG4gICAgICAgIHRoaXMuc3luY1VuaWZvcm0odGhpcy51bmlmb3Jtc1trZXldKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSW5pdGlhbGlzZXMgYSBTYW1wbGVyMkQgdW5pZm9ybSAod2hpY2ggbWF5IG9ubHkgYmUgYXZhaWxhYmxlIGxhdGVyIG9uIGFmdGVyIGluaXRVbmlmb3JtcyBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBsb2FkZWQpXG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXRTYW1wbGVyMkQgPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbiAgICBpZiAodW5pZm9ybS50ZXh0dXJlRGF0YSlcbiAgICB7XG5cbiAgICAgICAgLy9UT0RPIG1vdmUgdGhpcy4uLlxuICAgICAgICB2YXIgZGF0YSA9IHVuaWZvcm0udGV4dHVyZURhdGE7XG5cbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuXG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBsaWVkQWxwaGEpO1xuICAgICAgICAvLyBHTFRleHR1cmUgPSBtYWcgbGluZWFyLCBtaW4gbGluZWFyX21pcG1hcF9saW5lYXIsIHdyYXAgcmVwZWF0ICsgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIC8vIEdMVGV4dHVyZUxpbmVhciA9IG1hZy9taW4gbGluZWFyLCB3cmFwIGNsYW1wXG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3RSZXBlYXQgPSBtYWcvbWluIE5FQVJFU1QsIHdyYXAgcmVwZWF0XG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3QgPSBtYWcvbWluIG5lYXJlc3QsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gQXVkaW9UZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCA1MTIsIGhlaWdodCAyLCBib3JkZXIgMFxuICAgICAgICAvLyBLZXlUZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCAyNTYsIGhlaWdodCAyLCBib3JkZXIgMFxuXG4gICAgICAgIC8vICBtYWdGaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcbiAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxuXG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZGF0YS5sdW1pbmFuY2UgPyBnbC5MVU1JTkFOQ0UgOiBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLnNvdXJjZSk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGRhdGEubWFnRmlsdGVyID8gZGF0YS5tYWdGaWx0ZXIgOiBnbC5MSU5FQVIgKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSApO1xuXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGRhdGEud3JhcFQgPyBkYXRhLndyYXBUIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyTWFuYWdlci5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHNoYWRlci5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5nbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmdsID0gbnVsbDtcbiAgICB0aGlzLnVuaWZvcm1zID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSBudWxsO1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBudWxsO1xufTtcblxuU2hhZGVyLnByb3RvdHlwZS5fZ2xDb21waWxlID0gZnVuY3Rpb24gKHR5cGUsIHNyYylcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICB0aGlzLmdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgdGhpcy5nbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cbiAgICBpZiAoIXRoaXMuZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgdGhpcy5nbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCBjdXN0b21Vbmlmb3JtcywgY3VzdG9tQXR0cmlidXRlcylcbntcbiAgICB2YXIgdW5pZm9ybXMgPSB7XG5cbiAgICAgICAgdVNhbXBsZXI6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogMCB9LFxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxXSkgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVW5pZm9ybXMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciB1IGluIGN1c3RvbVVuaWZvcm1zKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bmlmb3Jtc1t1XSA9IGN1c3RvbVVuaWZvcm1zW3VdO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgYVZlcnRleFBvc2l0aW9uOiAgICAwLFxuICAgICAgICBhVGV4dHVyZUNvb3JkOiAgICAgIDAsXG4gICAgICAgIGFDb2xvcjogICAgICAgICAgICAgMFxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tQXR0cmlidXRlcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGEgaW4gY3VzdG9tQXR0cmlidXRlcylcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlc1thXSA9IGN1c3RvbUF0dHJpYnV0ZXNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYWdtZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IFRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgU2hhZGVyLmNhbGwodGhpcywgc2hhZGVyTWFuYWdlciwgdmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihnbClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7Ly8sIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKTtcblxufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi4vbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQmFzZSBmb3IgYSBjb21tb24gb2JqZWN0IHJlbmRlcmVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzeXN0ZW0gcmVuZGVyZXIgcGx1Z2luLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gT2JqZWN0UmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufVxuXG5cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYmplY3RSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0UmVuZGVyZXI7XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZW5kZXJlciBhbmQgc2V0cyB0aGUgc2hhZGVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIHNldCB0aGUgc2hhZGVyLi5cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHJlbmRlcmVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xufTtcblxuLyoqXG4gKiBmbHVzaGVzXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIGZsdXNoIVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gcmVuZGVyIHRoZSBvYmplY3Rcbn07XG4iLCIvKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSBxdWFkXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFRoZSBnbCBjb250ZXh0IGZvciB0aGlzIHF1YWQgdG8gdXNlLlxuICovXG5mdW5jdGlvbiBRdWFkKGdsKVxue1xuICAgIC8qXG4gICAgICogdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4vLyAgICB0aGlzLnRleHR1cmVzID0gbmV3IFRleHR1cmVVdnMoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAwLDAsXG4gICAgICAgIDIwMCwwLFxuICAgICAgICAyMDAsMjAwLFxuICAgICAgICAwLDIwMFxuICAgIF0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgcXVhZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMSwwLFxuICAgICAgICAxLDEsXG4gICAgICAgIDAsMVxuICAgIF0pO1xuXG4vLyAgICB2YXIgd2hpdGUgPSAoMHhGRkZGRkYgPj4gMTYpICsgKDB4RkZGRkZGICYgMHhmZjAwKSArICgoMHhGRkZGRkYgJiAweGZmKSA8PCAxNikgKyAoMSAqIDI1NSA8PCAyNCk7XG4gICAgLy9UT0RPIGNvbnZlcnQgdGhpcyB0byBhIDMyIHVuc2lnbmVkIGludCBhcnJheVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBjb21wb25lbnRzIG9mIHRoZSB0cmlhbmdsZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxXG4gICAgXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbXG4gICAgICAgIDAsIDEsIDIsIDAsIDMsIDJcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSB2ZXJ0ZXggYnVmZmVyXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSBpbmRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDggKyAxNikgKiA0LCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnVwbG9hZCgpO1xufVxuXG5RdWFkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFF1YWQ7XG5cbi8qKlxuICogTWFwcyB0d28gUmVjdGFuZ2xlIHRvIHRoZSBxdWFkXG4gKiBAcGFyYW0gcmVjdCB7UElYSS5SZWN0YW5nbGV9IHRoZSBmaXJzdCByZWN0YW5nbGVcbiAqIEBwYXJhbSByZWN0MiB7UElYSS5SZWN0YW5nbGV9IHRoZSBzZWNvbmQgcmVjdGFuZ2xlXG4gKi9cblF1YWQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKHJlY3QsIHJlY3QyKVxue1xuICAgIHZhciB4ID0gMDsgLy9yZWN0Mi54IC8gcmVjdC53aWR0aDtcbiAgICB2YXIgeSA9IDA7IC8vcmVjdDIueSAvIHJlY3QuaGVpZ2h0O1xuXG4gICAgdGhpcy51dnNbMF0gPSB4O1xuICAgIHRoaXMudXZzWzFdID0geTtcblxuICAgIHRoaXMudXZzWzJdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1szXSA9IHk7XG5cbiAgICB0aGlzLnV2c1s0XSA9IHggKyByZWN0Mi53aWR0aCAvIHJlY3Qud2lkdGg7XG4gICAgdGhpcy51dnNbNV0gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1s2XSA9IHg7XG4gICAgdGhpcy51dnNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICAvLy8gLS0tLS1cbiAgICB4ID0gcmVjdDIueDtcbiAgICB5ID0gcmVjdDIueTtcblxuICAgIHRoaXMudmVydGljZXNbMF0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbMV0gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1syXSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzNdID0geTtcblxuICAgIHRoaXMudmVydGljZXNbNF0gPSB4ICsgcmVjdDIud2lkdGg7XG4gICAgdGhpcy52ZXJ0aWNlc1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQ7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzZdID0geDtcbiAgICB0aGlzLnZlcnRpY2VzWzddID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXIgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuUXVhZC5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvLyBUT0RPIGNvdWxkIHByb2JhYmx5IGJlIHB1c2hlZCBpbnRvIG9uZSB1cGxvYWQhXG4gICAgZ2wuYmluZEJ1ZmZlciggZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlciApO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMudmVydGljZXMpO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDggKiA0LCB0aGlzLnV2cyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgKDggKyA4KSAqIDQsIHRoaXMuY29sb3JzKTtcbn07XG5cblF1YWQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xuXG5cbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgICAgIFxuICAgIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcbiAgICBHTEZyYW1lYnVmZmVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xGcmFtZWJ1ZmZlcixcbiAgICBcbiAgICBTdGVuY2lsTWFza1N0YWNrID0gcmVxdWlyZSgnLi9TdGVuY2lsTWFza1N0YWNrJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIGhvcml6b250YWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgdmVydGljYWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAqIEBwYXJhbSByb290IHtib29sZWFufSBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gKi9cbnZhciBSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uLCByb290KVxue1xuICAgIC8vVE9ETyBSZXNvbHV0aW9uIGNvdWxkIGdvIGhlcmUgKCBlZyBsb3cgcmVzIGJsdXJzIClcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvLyBuZXh0IHRpbWUgdG8gY3JlYXRlIGEgZnJhbWUgYnVmZmVyIGFuZCB0ZXh0dXJlXG5cbiAgICAvKipcbiAgICAgKiBBIGZyYW1lIGJ1ZmZlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xGcmFtZUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJDb2xvciA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBvYmplY3QgYXMgYSByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9iamVjdCdzIHRyYW5zZm9ybVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5mcmFtZSA9IG51bGw7XG4gICAgXG4gICAgdGhpcy5kZWZhdWx0RnJhbWUgPSBuZXcgUElYSS5SZWN0YW5nbGUoKTtcbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBudWxsO1xuICAgIHRoaXMuc291cmNlRnJhbWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHN0ZW5jaWwgYnVmZmVyIHN0b3JlcyBtYXNraW5nIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlckJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgc3RlbmNpbCBtYXNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFza1N0YWNrfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG5ldyBTdGVuY2lsTWFza1N0YWNrKCk7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZXMgZmlsdGVyIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6dGhpcyxcbiAgICAgICAgICAgIGZpbHRlcjpbXSxcbiAgICAgICAgICAgIGJvdW5kczp0aGlzLnNpemVcbiAgICAgICAgfVxuICAgIF07XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVFxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gR0xGcmFtZWJ1ZmZlci5jcmVhdGVSR0JBKGdsLCAxMDAsIDEwMCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBBIGZyYW1lIGJ1ZmZlciBuZWVkcyBhIHRhcmdldCB0byByZW5kZXIgdG8uLlxuICAgICAgICAgICAgY3JlYXRlIGEgdGV4dHVyZSBhbmQgYmluZCBpdCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgICovXG4gICAgICAgIFxuXG4gICAgICAgLy8gVE9ETyBjaGFuZ2UhXG4gICAgICAgIC8vIHRoaXMgaXMgdXNlZCBieSB0aGUgYmFzZSB0ZXh0dXJlXG4gICAgICAgIHRoaXMudGV4dHVyZSA9IHRoaXMuZnJhbWVCdWZmZXIudGV4dHVyZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbWFrZSBpdCBhIG51bGwgZnJhbWVidWZmZXIuLlxuICAgICAgICB0aGlzLmZyYW1lQnVmZmVyLmZyYW1lYnVmZmVyID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn07XG5cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZW5kZXJUYXJnZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRhcmdldDtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpbHRlciB0ZXh0dXJlLlxuICpcbiAqIEBwYXJhbSBbYmluZD1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCB3ZSBiaW5kIG91ciBmcmFtZWJ1ZmZlciBiZWZvcmUgY2xlYXJpbmc/XG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbihjbGVhckNvbG9yKVxue1xuICAgIHZhciBjYyA9IGNsZWFyQ29sb3IgfHwgdGhpcy5jbGVhckNvbG9yXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5jbGVhcihjY1swXSxjY1sxXSxjY1syXSxjY1szXSkvL3IsZyxiLGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmF0dGFjaFN0ZW5jaWxCdWZmZXIgPSBmdW5jdGlvbigpXG57XG4gICAgLy9UT0RPIGNoZWNrIGlmIHN0ZW5jaWwgaXMgZG9uZT9cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgaXMgdXNlZCBmb3IgbWFza2luZyBpbiBwaXhpXG4gICAgICogbGV0cyBjcmVhdGUgb25lIGFuZCB0aGVuIGFkZCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgKi9cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZW5hYmxlU3RlbmNpbCgpO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXdwb3J0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIC8vVE9PRCByZWZhY3RvciB1c2FnZSBvZiBmcmFtZS4uXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIuYmluZCgpO1xuXG4gICAgdGhpcy5kZXN0aW5hdGlvbkZyYW1lID0gZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgfHwgdGhpcy5kZWZhdWx0RnJhbWU7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IHRoaXMuc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggdGhpcy5kZXN0aW5hdGlvbkZyYW1lLCB0aGlzLnNvdXJjZUZyYW1lICk7XG5cbiAgICBpZih0aGlzLnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5hcHBlbmQodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIGlmKHRoaXMuZGVzdGluYXRpb25GcmFtZSAhPT0gdGhpcy5zb3VyY2VGcmFtZSlcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgICAgICBnbC5zY2lzc29yKHRoaXMuZGVzdGluYXRpb25GcmFtZS54LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmRpc2FibGUoZ2wuU0NJU1NPUl9URVNUKTtcbiAgICB9XG5cblxuICAgIC8vIFRPRE8gLSBkb2VzIG5vdCBuZWVkIHRvIGJlIHVwZGF0ZWQgYWxsIHRoZSB0aW1lPz9cbiAgICBnbC52aWV3cG9ydCh0aGlzLmRlc3RpbmF0aW9uRnJhbWUueCx0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uKTtcblxuXG59O1xuXG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmFzZWQgb24gYSBwcm9qZWN0aW9uIGZyYW1lICh3aGljaCBpcyBhIHJlY3RhbmdsZSlcbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2FsY3VsYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbkZyYW1lLCBzb3VyY2VGcmFtZSlcbntcbiAgICB2YXIgcG0gPSB0aGlzLnByb2plY3Rpb25NYXRyaXg7XG5cbiAgICBzb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IGRlc3RpbmF0aW9uRnJhbWU7XG5cbiAgICBwbS5pZGVudGl0eSgpO1xuXG4gICAgLy8gVE9ETzogbWFrZSBkZXN0IHNjYWxlIHNvdXJjZVxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAxIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gLTEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAtMSAvIGRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0KjI7XG5cbiAgICAgICAgcG0udHggPSAtMSAtIHNvdXJjZUZyYW1lLnggKiBwbS5hO1xuICAgICAgICBwbS50eSA9IDEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVzaXplcyB0aGUgdGV4dHVyZSB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge051bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGhlaWdodCB7TnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgdGV4dHVyZVxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHdpZHRoID0gd2lkdGggfCAwO1xuICAgIGhlaWdodCA9IGhlaWdodCB8IDA7XG5cbiAgICBpZiAodGhpcy5zaXplLndpZHRoID09PSB3aWR0aCAmJiB0aGlzLnNpemUuaGVpZ2h0ID09PSBoZWlnaHQpIFxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2l6ZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuc2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICB0aGlzLmRlZmF1bHRGcmFtZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuZGVmYXVsdEZyYW1lLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIucmVzaXplKHdpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBoZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuICAgIFxuICAgIHZhciBwcm9qZWN0aW9uRnJhbWUgPSB0aGlzLmZyYW1lIHx8IHRoaXMuc2l6ZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSByZW5kZXIgdGFyZ2V0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIHRoaXMuZnJhbWVCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBTdGVuY2lsTWFza1N0YWNrKClcbntcblx0LyoqXG4gICAgICogVGhlIGFjdHVhbCBzdGFja1xuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsU3RhY2sgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQGFsdmluXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb3VudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY291bnQgPSAwO1xufVxuXG5TdGVuY2lsTWFza1N0YWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0ZW5jaWxNYXNrU3RhY2s7XG5tb2R1bGUuZXhwb3J0cyA9IFN0ZW5jaWxNYXNrU3RhY2s7XG4iLCJDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogTWFwcyBnbCBibGVuZCBjb21iaW5hdGlvbnMgdG8gV2ViR0xcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpKGdsLCBvYmplY3QpXG57XG4gICAgb2JqZWN0ID0gb2JqZWN0IHx8IHt9O1xuXG4gICAgLy9UT0RPIC0gcHJlbXVsdGlwbHkgYWxwaGEgd291bGQgYmUgZGlmZmVyZW50LlxuICAgIC8vYWRkIGEgYm9vbGVhbiBmb3IgdGhhdCFcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQUREXSAgICAgICAgICAgPSBbZ2wuU1JDX0FMUEhBLCBnbC5EU1RfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9IFtnbC5EU1RfQ09MT1IsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5TQ1JFRU5dICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLk9ORV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRBUktFTl0gICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0JVUk5dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRJRkZFUkVOQ0VdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aTtcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcblx0b2JqZWN0PSBvYmplY3QgfHwge307XG5cbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5QT0lOVFNdICAgICAgICAgPSBnbC5QT0lOVFM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORVNdICAgICAgICAgID0gZ2wuTElORVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9MT09QXSAgICAgID0gZ2wuTElORV9MT09QO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLkxJTkVfU1RSSVBdICAgICA9IGdsLkxJTkVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVTXSAgICAgID0gZ2wuVFJJQU5HTEVTO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXSA9IGdsLlRSSUFOR0xFX1NUUklQO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX0ZBTl0gICA9IGdsLlRSSUFOR0xFX0ZBTjtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBTcHJpdGUgb2JqZWN0IGlzIHRoZSBiYXNlIGZvciBhbGwgdGV4dHVyZWQgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCB0byB0aGUgc2NyZWVuXG4gKlxuICogQSBzcHJpdGUgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhbiBpbWFnZSBsaWtlIHRoaXM6XG4gKlxuICogYGBganNcbiAqIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgZm9yIHRoaXMgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZSh0ZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFuY2hvciBzZXRzIHRoZSBvcmlnaW4gcG9pbnQgb2YgdGhlIHRleHR1cmUuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgMCwwIHRoaXMgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0XG4gICAgICogU2V0dGluZyB0aGUgYW5jaG9yIHRvIDAuNSwwLjUgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgY2VudGVyZWRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMSwxIHdvdWxkIG1lYW4gdGhlIHRleHR1cmUncyBvcmlnaW4gcG9pbnQgd2lsbCBiZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmFuY2hvciA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUgKHRoaXMgaXMgaW5pdGlhbGx5IHNldCBieSB0aGUgdGV4dHVyZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQSB2YWx1ZSBvZiAweEZGRkZGRiB3aWxsIHJlbW92ZSBhbnkgdGludCBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2hhZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgc3ByaXRlLiBTZXQgdG8gbnVsbCB0byByZW1vdmUgYSBjdXJyZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJ8UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgY2FjaGVkIHZhbHVlIG9mIHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvLyBjYWxsIHRleHR1cmUgc2V0dGVyXG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBUZXh0dXJlLkVNUFRZO1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZVxuICAgIHRoaXMudmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblNwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLngpICogdGhpcy50ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzaWduID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLngpIHx8IDE7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBzaWduICogdmFsdWUgLyB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgTWF0aC5hYnModGhpcy5zY2FsZS55KSAqIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHByaXZhdGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBzbyBpZiBfd2lkdGggaXMgMCB0aGVuIHdpZHRoIHdhcyBub3Qgc2V0Li5cbiAgICBpZiAodGhpcy5fd2lkdGgpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnggPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgKiB0aGlzLl93aWR0aCAvIHRoaXMudGV4dHVyZS5mcmFtZS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zY2FsZS55ID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLnkpICogdGhpcy5faGVpZ2h0IC8gdGhpcy50ZXh0dXJlLmZyYW1lLmhlaWdodDtcbiAgICB9XG59O1xuXG5TcHJpdGUucHJvdG90eXBlLmNhY2x1bGF0ZVZlcnRpY2VzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgIHd0ID0gdGhpcy50cmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIGEgPSB3dC5hLCBiID0gd3QuYiwgYyA9IHd0LmMsIGQgPSB3dC5kLCB0eCA9IHd0LnR4LCB0eSA9IHd0LnR5LFxuICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhLFxuICAgICAgICB3MCwgdzEsIGgwLCBoMSxcbiAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcbiAgICAgICAgXG4gICAgaWYgKHRyaW0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgYW5kIGlzIG5vdCBhIHRpbGluZ3Nwcml0ZSB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgdzEgPSB0cmltLnggLSB0aGlzLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICBoMSA9IHRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcbiAgICB9XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMF0gPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzFdID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMl0gPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzNdID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzRdID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs1XSA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzZdID0gYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs3XSA9IGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG5cbn1cblxuLyoqXG4qXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy50cmFuc2Zvcm0udXBkYXRlZCB8fCB0aGlzLnRleHR1cmVEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZURpcnR5ID0gZmFsc2U7XG4gICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuICAgIH1cbiAgICBcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFNwcml0ZSBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcbiAgICAgICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5YLFxuICAgICAgICAgICAgbWF4WCxcbiAgICAgICAgICAgIG1pblksXG4gICAgICAgICAgICBtYXhZLFxuICAgICAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YTtcblxuICAgICAgICB2YXIgeDEgPSB2ZXJ0ZXhEYXRhWzBdXG4gICAgICAgIHZhciB5MSA9IHZlcnRleERhdGFbMV1cblxuICAgICAgICB2YXIgeDIgPSB2ZXJ0ZXhEYXRhWzJdXG4gICAgICAgIHZhciB5MiA9IHZlcnRleERhdGFbM11cblxuICAgICAgICB2YXIgeDMgPSB2ZXJ0ZXhEYXRhWzRdXG4gICAgICAgIHZhciB5MyA9IHZlcnRleERhdGFbNV1cblxuICAgICAgICB2YXIgeDQgPSB2ZXJ0ZXhEYXRhWzZdXG4gICAgICAgIHZhciB5NCA9IHZlcnRleERhdGFbN11cblxuICAgICAgICBtaW5YID0geDE7XG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkxO1xuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MTtcbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTE7XG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoaWxkcmVuXG4gICAgICAgIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGRCb3VuZHMgPSB0aGlzLmNvbnRhaW5lckdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICB3MCA9IGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICB3MSA9IGNoaWxkQm91bmRzLnggKyBjaGlsZEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGgwID0gY2hpbGRCb3VuZHMueTtcbiAgICAgICAgICAgIGgxID0gY2hpbGRCb3VuZHMueSArIGNoaWxkQm91bmRzLmhlaWdodDtcblxuICAgICAgICAgICAgbWluWCA9IChtaW5YIDwgdzApID8gbWluWCA6IHcwO1xuICAgICAgICAgICAgbWluWSA9IChtaW5ZIDwgaDApID8gbWluWSA6IGgwO1xuXG4gICAgICAgICAgICBtYXhYID0gKG1heFggPiB3MSkgPyBtYXhYIDogdzE7XG4gICAgICAgICAgICBtYXhZID0gKG1heFkgPiBoMSkgPyBtYXhZIDogaDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fYm91bmRzLnggPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHRoaXMuX2JvdW5kcy55ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG4gICAgdGhpcy5fYm91bmRzLndpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICByZXR1cm4gdGhpcy5fYm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgc3ByaXRlXG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cblNwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLnRleHR1cmUuY3JvcC53aWR0aCA8PSAwIHx8IHRoaXMudGV4dHVyZS5jcm9wLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vICBJZ25vcmUgbnVsbCBzb3VyY2VzXG4gICAgaWYgKHRoaXMudGV4dHVyZS52YWxpZClcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgICAgIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgIGR4LFxuICAgICAgICAgICAgZHksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDtcblxuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgICAgIC8vIElmIHNtb290aGluZ0VuYWJsZWQgaXMgc3VwcG9ydGVkIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgc21vb3RoaW5nIHByb3BlcnR5IGZvciB0aGlzIHRleHR1cmVcbiAgICAgICAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSO1xuICAgICAgICBpZiAocmVuZGVyZXIuc21vb3RoUHJvcGVydHkgJiYgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gIT09IHNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldID0gc21vb3RoaW5nRW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHRyaW1tZWQgd2Ugb2Zmc2V0IGJ5IHRoZSB0cmltIHgveSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgZnJhbWUgZGltZW5zaW9uc1xuXG4gICAgICAgIGlmKHRleHR1cmUucm90YXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICBcbiAgICAgICAgICAgIGR4ICs9IHdpZHRoO1xuXG4gICAgICAgICAgICB3dC50eCA9IGR5ICogd3QuYSArIGR4ICogd3QuYyArIHd0LnR4O1xuICAgICAgICAgICAgd3QudHkgPSBkeSAqIHd0LmIgKyBkeCAqIHd0LmQgKyB3dC50eTtcblxuICAgICAgICAgICAgdmFyIHRlbXAgPSB3dC5hO1xuICAgICAgICAgICAgd3QuYSAgPSAtd3QuYztcbiAgICAgICAgICAgIHd0LmMgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIHRlbXAgPSB3dC5iO1xuICAgICAgICAgICAgd3QuYiAgPSAtd3QuZDtcbiAgICAgICAgICAgIHd0LmQgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIC8vIHRoZSBhbmNob3IgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFib3ZlLCBzbyBsZXRzIHNldCBpdCB0byB6ZXJvXG4gICAgICAgICAgICBkeCA9IDA7XG4gICAgICAgICAgICBkeSA9IDA7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIC8vIEFsbG93IGZvciBwaXhlbCByb3VuZGluZ1xuICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgKHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwLFxuICAgICAgICAgICAgICAgICh3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHggPSBkeCB8IDA7XG4gICAgICAgICAgICBkeSA9IGR5IHwgMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICB3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjbGVhbiB1cCBjYWNoaW5nIC0gaG93IHRvIGNsZWFuIHVwIHRoZSBjYWNoZXM/XG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC55ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgc3ByaXRlIGFuZCBvcHRpb25hbGx5IGl0cyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95VGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95VGV4dHVyZSwgZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5hbmNob3IgPSBudWxsO1xuXG4gICAgaWYgKGRlc3Ryb3lUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcblxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zLi5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICovXG5TcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgU3ByaXRlKFRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXInKSxcbiAgICBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9jcmVhdGVJbmRpY2VzRm9yUXVhZHMnKSxcbiAgICBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4vZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgZ2xDb3JlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgU3ByaXRlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1Nwcml0ZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFJlbmRlcmVyIGRlZGljYXRlZCB0byBkcmF3aW5nIGFuZCBiYXRjaGluZyBzcHJpdGVzLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU3ByaXRlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgdmFsdWVzIHNlbnQgaW4gdGhlIHZlcnRleCBidWZmZXIuXG4gICAgICogcG9zaXRpb25YLCBwb3NpdGlvblksIGNvbG9yUiwgY29sb3JHLCBjb2xvckIgPSA1XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdmVydGV4IGluZm9ybWF0aW9uIGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgU3ByaXRlQmF0Y2ggYmVmb3JlIGl0IGZsdXNoZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIG91ciBiYXRjaFxuICAgIHZhciBudW1WZXJ0cyA9ICh0aGlzLnNpemUgKiA0KSAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBiYXRjaCwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgIHZhciBudW1JbmRpY2VzID0gdGhpcy5zaXplICogNjtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSB2ZXJ0ZXggZGF0YSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5QnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgQXJyYXlCdWZmZXIobnVtVmVydHMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBGbG9hdDMyQXJyYXkgZm9yIHBvc2l0aW9uc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciB1dnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIGNvbG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlcyBvZiB0aGUgZ2VvbWV0cnkgKHF1YWRzKSB0byBkcmF3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHModGhpcy5zaXplKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIFxuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICBcbiAgICAvL1RPRE8gLSAzMDAgaXMgYSBiaXQgbWFnaWMsIGZpZ3VyZSBvdXQgYSBuaWNlciBhbW91bnQhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykgXG4gICAge1xuICAgICAgICB0aGlzLmdyb3Vwc1tpXSA9IHt0ZXh0dXJlczpbXSwgdGV4dHVyZUNvdW50OjAsIGlkczpbXSwgc2l6ZTowLCBzdGFydDowLCBibGVuZDowfTsgXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcblxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsOyAgICBcbn1cblxuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3Nwcml0ZScsIFNwcml0ZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5NQVhfVEVYVFVFUyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cbiAgICB0aGlzLl9zaGFkZXIgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgdGhpcy5NQVhfVEVYVFVFUykvL25ldyBUZXh0dXJlU2hhZGVyKGdsKTtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlcjtcblxuICAgIC8vIGNyZWF0ZSBhIGNvdXBsZSBvZiBidWZmZXJzXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKGdsLCBudWxsLCBnbC5EWU5BTUlDX0RSQVcpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoZ2wsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgLy8gYnVpbGQgdGhlIHZhbyBvYmplY3QgdGhhdCB3aWxsIHJlbmRlci4uXG4gICAgdGhpcy52YW8gPSBuZXcgZ2xDb3JlLlZlcnRleEFycmF5T2JqZWN0KGdsKTtcblxuICAgIHRoaXMudmFvLmFkZEluZGV4KHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCAwKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIGdsLlVOU0lHTkVEX1NIT1JULCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMiAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMyAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVJZCwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgNCAqIDQpO1xuXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdG8gcmVuZGVyIHdoZW4gdXNpbmcgdGhpcyBzcHJpdGViYXRjaFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHNwcml0ZSlcbntcbiAgICAvL1RPRE8gc2V0IGJsZW5kIG1vZGVzLi5cbiAgICAvLyBjaGVjayB0ZXh0dXJlLi5cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPj0gdGhpcy5zaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICBcbiAgICAvLyBnZXQgdGhlIHV2cyBmb3IgdGhlIHRleHR1cmVcbiAgIFxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIGlmICghc3ByaXRlLnRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgLy8gcHVzaCBhIHRleHR1cmUuXG4gICAgLy8gaW5jcmVtZW50IHRoZSBiYXRjaHNpemVcbiAgICB2YXIgbmV4dFRleHR1cmUgPSAgc3ByaXRlLnRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgdmFyIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwO1xuICAgIHZhciBpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50VGV4dHVyZSAhPT0gbmV4dFRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbmV4dFRleHR1cmU7XG4gICAgICAgIFxuICAgICAgICBpZighbmV4dFRleHR1cmUuX2VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9pZCA9IHRoaXMudGV4dHVyZUNvdW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLnRleHR1cmVDb3VudCA9PT0gdGhpcy5NQVhfVEVYVFVFUylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgICAgICAgICAgICAgeyAgICAgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnN0YXJ0ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50KytdID0gbmV4dFRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHR1cmVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdHJpbT8/XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG5cbiAgICAvLyB1cGxvYWQgdGhlIHNwcml0ZSBlbGVtZXRucy4uLlxuICAgIC8vIHRoZXkgaGF2ZSBhbGwgcmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIHdlIGp1c3QgbmVlZCB0byBwdXNoIHRoZW0gaW50byB0aGUgYnVmZmVyLlxuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7XG4gICAgdmFyIHZlcnRleERhdGEgPSBzcHJpdGUudmVydGV4RGF0YVxuICAgIHZhciB0aW50ID0gKHNwcml0ZS50aW50ID4+IDE2KSArIChzcHJpdGUudGludCAmIDB4ZmYwMCkgKyAoKHNwcml0ZS50aW50ICYgMHhmZikgPDwgMTYpICsgKHNwcml0ZS53b3JsZEFscGhhICogMjU1IDw8IDI0KTtcbiAgICB2YXIgdXZzID0gc3ByaXRlLnRleHR1cmUuX3V2cy51dnNfdWludDMyO1xuICAgIC8veHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzBdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMF07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7IFxuICAgIFxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsyXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzNdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzFdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs0XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzVdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzJdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzZdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbN107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbM107XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgYW5kIGVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA9PT0gMClyZXR1cm47XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG5cbiAgICB0aGlzLmN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSB0aGlzLmN1cnJlbnRHcm91cC5zdGFydDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICB7ICAgICBcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgXG4gICAgLy8gZG8gc29tZSBzbWFydCBhcnJheSBzdHVmZi4uXG4gICAgLy8gZG91YmxlIHNpemUgc28gd2UgZG9udCBhbHdheSBzdWJhcnJheSB0aGUgZWxlbWVudHMuLlxuICAgIC8vIHVwbG9hZCB0aGUgdmVydHMgdG8gdGhlIGJ1ZmZlclxuICAgIGlmICh0aGlzLmN1cnJlbnRCYXRjaFNpemUgPiAoIHRoaXMuc2l6ZSAqIDAuNSApIClcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh0aGlzLnZlcnRpY2VzLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbyBrIC4uIHN1YiBhcnJheSBpcyBTTE9XPj9cbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnBvc2l0aW9ucy5zdWJhcnJheSgwLCB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplKTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHZpZXcsIDAsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgc2hhZGVyLi5cbiAgICB0aGlzLnJlbmRlcmVyLmJpbmRTaGFkZXIodGhpcy5fc2hhZGVyKTtcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCAwICk7XG5cbiAgICAvLy8gcmVuZGVyIHRoZSBncm91cHMuLlxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdyb3VwQ291bnQ7IGkrKykge1xuICAgICAgICBcbiAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5ncm91cHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC50ZXh0dXJlQ291bnQ7IGorKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kVGV4dHVyZShncm91cC50ZXh0dXJlc1tqXSwgaik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgZ3JvdXAuc2l6ZSAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCBncm91cC5zdGFydCAqIDYgKiAyKTtcbiAgICB9O1xuXG4gICAgLy8gcmVzZXQgZWxlbWVudHMgZm9yIHRoZSBuZXh0IGZsdXNoXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBzcHJpdGUgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFvLmJpbmQoKTtcbn07XG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgdGhpcy52YW8udW5iaW5kKCk7XG59O1xuLyoqXG4gKiBEZXN0cm95cyB0aGUgU3ByaXRlQmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuY29sb3JzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zcHJpdGVzID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCBtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgdmVydGV4U3JjID0gXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGFUZXh0dXJlSWQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZUZXh0dXJlSWQgPSBhVGV4dHVyZUlkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVwiO1xuICAgIHZhciBmcmFnbWVudFNyYyA9ICdwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG4nICsgZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpICsgXCJcXG5cXG5cIiArIGZyYWdUZW1wbGF0ZVxuXG4gICAgZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYy5yZXBsYWNlKC9cXCVcXCUvZ2ksICcxNicpO1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cbiAgICB2YXIgc2FtcGxlVmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSB7XG4gICAgICAgIHNhbXBsZVZhbHVlc1tpXSA9IGk7XG4gICAgfTtcblxuICAgIHNoYWRlci5iaW5kKCk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnVTYW1wbGVycyA9IHNhbXBsZVZhbHVlcztcblxuICAgIHJldHVybiBzaGFkZXI7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKVxue1xuICAgIHZhciBzcmMgPSAndmVjNCBnZXRTYW1wbGVGcm9tQXJyYXkoc2FtcGxlcjJEIHRleHR1cmVzWyUlXSwgaW50IG5keCwgdmVjMiB1dikge1xcblxcbnZlYzQgY29sb3I7J1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgaWYoaSA+IDApc3JjICs9ICdcXG5lbHNlICc7XG4gICAgICAgIGlmKGkgPCBtYXhUZXh0dXJlcy0xKXNyYyArPSAnaWYobmR4ID09ICcgKyBpICsgJyknO1xuICAgICAgICBzcmMgKz0gJ1xcbnsnO1xuICAgICAgICBzcmMgKz0gJ1xcblxcdGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmVzWycraSsnXSwgdXYpOyc7XG4gICAgICAgIHNyYyArPSAnXFxufSc7XG4gICAgfTtcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdyZXR1cm4gY29sb3I7JztcbiAgICBzcmMgKz0gJ1xcbn0nO1xuXG4gICAgcmV0dXJuIHNyYztcbn1cblxudmFyIGZyYWdUZW1wbGF0ZSA9IFtcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG4gICAgJ3ZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsnLFxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcnNbJSVdOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICdnbF9GcmFnQ29sb3IgPSBnZXRTYW1wbGVGcm9tQXJyYXkodVNhbXBsZXJzLCBpbnQodlRleHR1cmVJZCksIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yOycsXG4gICAgJ30nXG5dLmpvaW4oJ1xcbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyO1xuIiwidmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBUZXh0IE9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nIGluIHlvdXIgdGV4dCBzdHJpbmcsXG4gKiBvciBhZGQgYSB3b3JkV3JhcCBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSBhbmQgYW5kIHdvcmRXcmFwV2lkdGggcHJvcGVydHkgd2l0aCBhIHZhbHVlIGluIHRoZSBzdHlsZSBvYmplY3QuXG4gKlxuICogQSBUZXh0IGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBzdHJpbmcgYW5kIGEgc3R5bGUgb2JqZWN0XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0ID0gbmV3IFBJWEkuVGV4dCgnVGhpcyBpcyBhIHBpeGkgdGV4dCcse2ZvbnQgOiAnMjRweCBBcmlhbCcsIGZpbGwgOiAweGZmMTAxMCwgYWxpZ24gOiAnY2VudGVyJ30pO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbc3R5bGUuZm9udF0ge3N0cmluZ30gZGVmYXVsdCAnYm9sZCAyMHB4IEFyaWFsJyBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlLmcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcCwgaXQgbmVlZHMgd29yZFdyYXAgdG8gYmUgc2V0IHRvIHRydWVcbiAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzRdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gKi9cbmZ1bmN0aW9uIFRleHQodGV4dCwgc3R5bGUsIHJlc29sdXRpb24pXG57XG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgMmQgY29udGV4dCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gd2l0aFxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY2FudmFzLlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyh0aGlzLmNhbnZhcyk7XG4gICAgdGV4dHVyZS50cmltID0gbmV3IG1hdGguUmVjdGFuZ2xlKCk7XG4gICAgU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbn1cblxuLy8gY29uc3RydWN0b3JcblRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTcHJpdGUucHJvdG90eXBlKTtcblRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gVGV4dDtcblxuVGV4dC5mb250UHJvcGVydGllc0NhY2hlID0ge307XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZm9udD0nYm9sZCAyMHB0IEFyaWFsJ10ge3N0cmluZ30gVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gICAgICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZWcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGVnICdibHVlJywgJyNGQ0ZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXBcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd8bnVtYmVyfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNl0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gICAgICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAgICAgKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAgICAgKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHN0eWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdHlsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5maWxsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpbGwgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmZpbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLnN0cm9rZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zdHJva2UgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLnN0cm9rZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZHJvcFNoYWRvd0NvbG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZHJvcFNoYWRvd0NvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGUuZm9udCA9IHN0eWxlLmZvbnQgfHwgJ2JvbGQgMjBwdCBBcmlhbCc7XG4gICAgICAgICAgICBzdHlsZS5maWxsID0gc3R5bGUuZmlsbCB8fCAnYmxhY2snO1xuICAgICAgICAgICAgc3R5bGUuYWxpZ24gPSBzdHlsZS5hbGlnbiB8fCAnbGVmdCc7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2UgPSBzdHlsZS5zdHJva2UgfHwgJ2JsYWNrJzsgLy9wcm92aWRlIGEgZGVmYXVsdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzLzEzNlxuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIHx8IDA7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcCA9IHN0eWxlLndvcmRXcmFwIHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXBXaWR0aCA9IHN0eWxlLndvcmRXcmFwV2lkdGggfHwgMTAwO1xuXG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93ID0gc3R5bGUuZHJvcFNoYWRvdyB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvciB8fCAnIzAwMDAwMCc7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93QW5nbGUgPSBzdHlsZS5kcm9wU2hhZG93QW5nbGUgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA6IE1hdGguUEkgLyA2O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlID0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgOiA1O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0JsdXIgOiAwOyAvL3NoYWRvd0JsdXIgaXMgJzAnIGJ5IGRlZmF1bHQgYWNjb3JkaW5nIHRvIEhUTUxcblxuICAgICAgICAgICAgc3R5bGUucGFkZGluZyA9IHN0eWxlLnBhZGRpbmcgfHwgMDtcblxuICAgICAgICAgICAgc3R5bGUudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lIHx8ICdhbHBoYWJldGljJztcblxuICAgICAgICAgICAgc3R5bGUubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbiB8fCAnbWl0ZXInO1xuICAgICAgICAgICAgc3R5bGUubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQgfHwgMTA7XG5cbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gc3R5bGU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNvcHkgZm9yIHRoZSB0ZXh0IG9iamVjdC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCl7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgc3R5bGUgPSB0aGlzLl9zdHlsZTtcbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG5cbiAgICAvLyB3b3JkIHdyYXBcbiAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbCB0ZXh0XG4gICAgdmFyIG91dHB1dFRleHQgPSBzdHlsZS53b3JkV3JhcCA/IHRoaXMud29yZFdyYXAodGhpcy5fdGV4dCkgOiB0aGlzLl90ZXh0O1xuXG4gICAgLy8gc3BsaXQgdGV4dCBpbnRvIGxpbmVzXG4gICAgdmFyIGxpbmVzID0gb3V0cHV0VGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCB3aWR0aFxuICAgIHZhciBsaW5lV2lkdGhzID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aCk7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGZvbnRQcm9wZXJ0aWVzID0gdGhpcy5kZXRlcm1pbmVGb250UHJvcGVydGllcyhzdHlsZS5mb250KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBsaW5lV2lkdGg7XG4gICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICB2YXIgd2lkdGggPSBtYXhMaW5lV2lkdGggKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICB3aWR0aCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSAoIHdpZHRoICsgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgaGVpZ2h0XG4gICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLnN0eWxlLmxpbmVIZWlnaHQgfHwgZm9udFByb3BlcnRpZXMuZm9udFNpemUgKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG5cbiAgICB2YXIgaGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aDtcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGhlaWdodCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gKCBoZWlnaHQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nICogMiApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5jb250ZXh0LnNjYWxlKCB0aGlzLnJlc29sdXRpb24sIHRoaXMucmVzb2x1dGlvbik7XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgfVxuXG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFN0eWxlPVwiI0ZGMDAwMFwiO1xuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuICAgIHRoaXMuY29udGV4dC5zdHJva2VTdHlsZSA9IHN0eWxlLnN0cm9rZTtcbiAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIHRoaXMuY29udGV4dC50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmU7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVKb2luID0gc3R5bGUubGluZUpvaW47XG4gICAgdGhpcy5jb250ZXh0Lm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0O1xuXG4gICAgdmFyIGxpbmVQb3NpdGlvblg7XG4gICAgdmFyIGxpbmVQb3NpdGlvblk7XG5cbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGlmIChzdHlsZS5kcm9wU2hhZG93Qmx1ciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhTaGFkb3dPZmZzZXQgPSBNYXRoLmNvcyhzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgICAgICB2YXIgeVNoYWRvd09mZnNldCA9IE1hdGguc2luKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCArIHhTaGFkb3dPZmZzZXQsIGxpbmVQb3NpdGlvblkgKyB5U2hhZG93T2Zmc2V0ICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL3NldCBjYW52YXMgdGV4dCBzdHlsZXNcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZmlsbDtcblxuICAgIC8vZHJhdyBsaW5lcyBsaW5lIGJ5IGxpbmVcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0cm9rZSAmJiBzdHlsZS5zdHJva2VUaGlja25lc3MpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJva2VUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUudHJpbS54ID0gMDtcbiAgICB0ZXh0dXJlLnRyaW0ueSA9IC10aGlzLl9zdHlsZS5wYWRkaW5nO1xuXG4gICAgdGV4dHVyZS50cmltLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGV4dHVyZS50cmltLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAtIHRoaXMuX3N0eWxlLnBhZGRpbmcqMjtcblxuICAgIHRoaXMuX3dpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5lbWl0KCd1cGRhdGUnLCAgdGV4dHVyZS5iYXNlVGV4dHVyZSk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqL1xuVGV4dC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICAvL3RoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5yZW5kZXJXZWJHTC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgLy8gICB0aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYXNjZW50LCBkZXNjZW50IGFuZCBmb250U2l6ZSBvZiBhIGdpdmVuIGZvbnRTdHlsZVxuICpcbiAqIEBwYXJhbSBmb250U3R5bGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGZvbnRTdHlsZSlcbntcbiAgICB2YXIgcHJvcGVydGllcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdO1xuXG4gICAgaWYgKCFwcm9wZXJ0aWVzKVxuICAgIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzO1xuICAgICAgICB2YXIgY29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnfE3DiXEnKS53aWR0aCk7XG4gICAgICAgIHZhciBiYXNlbGluZSA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCdNJykud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xuXG4gICAgICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiAxLjQgfCAwO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNmMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQoJ3xNw4lxJywgMCwgYmFzZWxpbmUpO1xuXG4gICAgICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgICB2YXIgcGl4ZWxzID0gaW1hZ2VkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmUgPSB3aWR0aCAqIDQ7XG5cbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgIHZhciBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZWxpbmU7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCArPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnQgPSBiYXNlbGluZSAtIGk7XG5cbiAgICAgICAgaWR4ID0gcGl4ZWxzIC0gbGluZTtcbiAgICAgICAgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGRlc2NlbnQuIHNjYW4gZnJvbSBib3R0b20gdG8gdG9wIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggLT0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IGkgLSBiYXNlbGluZTtcbiAgICAgICAgcHJvcGVydGllcy5mb250U2l6ZSA9IHByb3BlcnRpZXMuYXNjZW50ICsgcHJvcGVydGllcy5kZXNjZW50O1xuXG4gICAgICAgIFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBuZXdsaW5lcyB0byBhIHN0cmluZyB0byBoYXZlIGl0IG9wdGltYWxseSBmaXQgaW50byB0aGUgaG9yaXpvbnRhbFxuICogYm91bmRzIHNldCBieSB0aGUgVGV4dCBvYmplY3QncyB3b3JkV3JhcFdpZHRoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS53b3JkV3JhcCA9IGZ1bmN0aW9uICh0ZXh0KVxue1xuICAgIC8vIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyXG4gICAgLy8gdGhhbiBpdHMgaG9yaXpvbnRhbCBib3VuZHMuXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICAgIHZhciB3b3JkV3JhcFdpZHRoID0gdGhpcy5fc3R5bGUud29yZFdyYXBXaWR0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XG4gICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQod29yZHNbal0pLndpZHRoO1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aFdpdGhTcGFjZSA9IHdvcmRXaWR0aCArIHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xuICAgICAgICAgICAgaWYgKGogPT09IDAgfHwgd29yZFdpZHRoV2l0aFNwYWNlID4gc3BhY2VMZWZ0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcHJpbnRpbmcgdGhlIG5ld2xpbmUgaWYgaXQncyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZSB0aGF0IGlzXG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSB3b3JkIHdyYXAgd2lkdGguXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal07XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB3b3Jkc1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgbGluZXMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFRleHQgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgVGV4dFxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UZXh0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzLmNhbGwodGhpcywgbWF0cml4KTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT10cnVlXSB7Ym9vbGVhbn0gd2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICAvLyBtYWtlIHN1cmUgdG8gcmVzZXQgdGhlIHRoZSBjb250ZXh0IGFuZCBjYW52YXMuLiBkb250IHdhbnQgdGhpcyBoYW5naW5nIGFyb3VuZCBpbiBtZW1vcnkhXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG5cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGVzdHJveUJhc2VUZXh0dXJlKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIFJlbmRlclRhcmdldCA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBGaWx0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKSxcbiAgICB0ZW1wUmVjdCA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuXG4vKipcbiAqIEEgQmFzZVJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIEJhc2VSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIHRha2VzIGEgc25hcHNob3Qgb2YgYW55IERpc3BsYXkgT2JqZWN0IGdpdmVuIHRvIGl0cyByZW5kZXIgbWV0aG9kLiBUaGUgcG9zaXRpb25cbiAqIGFuZCByb3RhdGlvbiBvZiB0aGUgZ2l2ZW4gRGlzcGxheSBPYmplY3RzIGlzIGlnbm9yZWQuIEZvciBleGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcigxMDI0LCAxMDI0LCB7IHZpZXc6IGNhbnZhcywgcmF0aW86IDEgfSk7XG4gKiB2YXIgQmFzZXJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5CYXNlUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihzcHJpdGUpO1xuICogYGBgXG4gKlxuICogVGhlIFNwcml0ZSBpbiB0aGlzIGNhc2Ugd2lsbCBiZSByZW5kZXJlZCB0byBhIHBvc2l0aW9uIG9mIDAsMC4gVG8gcmVuZGVyIHRoaXMgc3ByaXRlIGF0IGl0cyBhY3R1YWxcbiAqIHBvc2l0aW9uIGEgQ29udGFpbmVyIHNob3VsZCBiZSB1c2VkOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZG9jID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKlxuICogZG9jLmFkZENoaWxkKHNwcml0ZSk7XG4gKlxuICogQmFzZXJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiBCYXNlcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZVxuICogQHBhcmFtIFt3aWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbaGVpZ2h0PTEwMF0ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIEJhc2VSZW5kZXJUZXh0dXJlLCB5b3UgbXVzdCBwYXNzIGEgcmVuZGVyZXIgaW50byB0aGUgY29uc3RydWN0b3IuJyk7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUuY2FsbCh0aGlzLCBudWxsLCBzY2FsZU1vZGUpO1xuICAgXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047O1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRHJhdy9yZW5kZXIgdGhlIGdpdmVuIERpc3BsYXlPYmplY3Qgb250byB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBkZXNjZW5kZW50cyBhcmUgdHJhbnNmb3JtZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIElmIGB1cGRhdGVUcmFuc2Zvcm1gIGlzIHRydWUgdGhlbiB0aGUgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQgYmVmb3JlIHRoZVxuICAgICAqIG1ldGhvZCByZXR1cm5zLiBPdGhlcndpc2UgaXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcgY29kZSB0byBjb3JyZWN0bHkgdXNlIG9yIHJlc2V0XG4gICAgICogdGhlIHRyYW5zZm9ybWVkIGRpc3BsYXkgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5IG9iamVjdCBpcyBhbHdheXMgcmVuZGVyZWQgd2l0aCBhIHdvcmxkQWxwaGEgdmFsdWUgb2YgMS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICAgICAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gICAgICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAgICAgKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB1c2VzLiBBIEJhc2VSZW5kZXJUZXh0dXJlIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgcmVuZGVyZXIgYXQgdGhlIG1vbWVudCBpZiBpdHMgd2ViR0wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnNjYWxlTW9kZSwgdGhpcy5yZXNvbHV0aW9uKTsvLywgdGhpcy50aGlzLnNjYWxlTW9kZSk7XG4gICAgICAgIHRoaXMuX2dsVGV4dHVyZXNbZ2wuaWRdID0gIHRoaXMudGV4dHVyZUJ1ZmZlci50ZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgLy9UT0RPIHJlZmFjdG9yIGZpbHRlciBtYW5hZ2VyLi4gYXMgcmVhbGx5IGl0cyBubyBsb25nZXIgYSBtYW5hZ2VyIGlmIHdlIHVzZSBpdCBoZXJlLi5cbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbmV3IEZpbHRlck1hbmFnZXIodGhpcy5yZW5kZXJlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlcldlYkdMO1xuXG4gICAgICAgIC8vIHRoZSBjcmVhdGlvbiBvZiBhIGZpbHRlciBtYW5hZ2VyIHVuYmluZHMgdGhlIGJ1ZmZlcnMuLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgICAgICBpZih0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQpdGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlckNhbnZhcztcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcih0aGlzLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuaGVpZ2h0KiB0aGlzLnJlc29sdXRpb24pO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcblxufVxuXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIHVwZGF0ZUJhc2Uge2Jvb2xlYW59IFNob3VsZCB0aGUgYmFzZVRleHR1cmUud2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYmUgcmVzaXplZCBhcyB3ZWxsP1xuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgaWYgKHdpZHRoID09PSB0aGlzLndpZHRoICYmIGhlaWdodCA9PT0gdGhpcy5oZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZCA9ICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7XG5cbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoZGVzdGluYXRpb25GcmFtZSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuYmluZEZyYW1lYnVmZmVyKHRoaXMucmVuZGVyZXIuZ2wuRlJBTUVCVUZGRVIsIHRoaXMudGV4dHVyZUJ1ZmZlci5mcmFtZUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKGZhbHNlLCBkZXN0aW5hdGlvbkZyYW1lKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAoZnJhbWUsIGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAodXBkYXRlVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpID8gdXBkYXRlVHJhbnNmb3JtIDogdHJ1ZTsvLyF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIudHJhbnNmb3JtID0gbWF0cml4O1xuXG4gICAgLy9UT0RPIG5vdCBhIGZhbiB0aGF0IHRoaXMgaXMgaGVyZS4uLiBpdCB3aWxsIG1vdmUhXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKCk7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICBpZiAodXBkYXRlVHJhbnNmb3JtKVxuICAgIHtcblxuICAgICAgICAvLyByZXNldCB0aGUgbWF0cml4IG9mIHRoZSBkaXNwbGF0eU9iamVjdC4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uaWRlbnRpdHkoKTtcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmN1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGVtcFJlY3Qud2lkdGggPSBmcmFtZS5oZWlnaHQ7XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gZnJhbWUud2lkdGg7XG4gICBcbiAgICAvL1RPRE8gcmVuYW1lIHRleHR1cmVCdWZmZXIgdG8gcmVuZGVyVGFyZ2V0Li5cbiAgICB2YXIgdGVtcCA9ICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0aGlzLmZpbHRlck1hbmFnZXI7XG4gICAgXG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIuYWN0aXZhdGUoZnJhbWUsIHRlbXBSZWN0KTtcbiAgICBjb25zb2xlLmxvZyhkaXNwbGF5T2JqZWN0KVxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnRleHR1cmVCdWZmZXIsIGNsZWFyKTtcblxuICAgLy8gY29uc29sZS5sb2coXCJSRU5ERVJJTkcgXCIpO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRlbXA7XG59O1xuXG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcl0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVwZGF0ZVRyYW5zZm9ybSA9ICEhdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdmFyIHd0ID0gdGVtcE1hdHJpeDtcblxuICAgIHd0LmlkZW50aXR5KCk7XG5cbiAgICBpZiAobWF0cml4KVxuICAgIHtcbiAgICAgICAgd3QuYXBwZW5kKG1hdHJpeCk7XG4gICAgfVxuXG5cbiAgICB3dC50eCArPSBmcmFtZS54O1xuICAgIHd0LnR5ICs9IGZyYW1lLnk7XG5cbiAgICB2YXIgY2FjaGVkV3QgPSBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtO1xuICAgIFxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSB3dDtcblxuICAgIC8vIHNldFdvcmxkIEFscGhhIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgcmVuZGVyZXIgYXQgZnVsbCBvcGFjaXR5XG4gICAgZGlzcGxheU9iamVjdC53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICB2YXIgaSwgajtcblxuICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBcbi8vICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5cbiAgICB2YXIgY29udGV4dCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlYWxSZXNvbHV0aW9uID0gdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIGNvbnRleHQpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gcmVhbFJlc29sdXRpb247XG5cbiAgICBpZihkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID09PSB3dClcbiAgICB7XG4gICAgICAgIC8vIGZpeGVzIGNhY2hlQXNCaXRtYXAgSGFwcGVuaW5nIGR1cmluZyB0aGUgYWJvdmUuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gY2FjaGVkV3Q7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBkZXN0cm95QmFzZSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIGZpbHRlcm1hbmFnZXIuLlxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoZnJhbWUpXG57XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uuc3JjID0gdGhpcy5nZXRCYXNlNjQoZnJhbWUpO1xuICAgIHJldHVybiBpbWFnZTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGlzIHRleHR1cmUuIEl0IHdvcmtzIGJ5IGNhbGxpbmcgQmFzZVJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgIHJldHVybiB0aGlzLmdldENhbnZhcyhmcmFtZSkudG9EYXRhVVJMKCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIEJhc2VSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldENhbnZhcyA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2lkdGggPSBmcmFtZS53aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBjYW52YXNEYXRhID0gdGVtcENhbnZhcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2FudmFzRGF0YS5kYXRhLnNldCh3ZWJHTFBpeGVscyk7XG5cbiAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICByZXR1cm4gdGVtcENhbnZhcy5jYW52YXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy53aWR0aDtcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoZnJhbWUud2lkdGggPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGggJiYgXG4gICAgICAgICAgIGZyYW1lLmhlaWdodCA9PT0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5oZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IENhbnZhc0J1ZmZlcihmcmFtZS53aWR0aCAqIHJlc29sdXRpb24sIGZyYW1lLmhlaWdodCAqIHJlc29sdXRpb24pO1xuICAgICAgICAgICAgdmFyIGNhbnZhc0RhdGEgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dC5nZXRJbWFnZURhdGEoZnJhbWUueCAgKiByZXNvbHV0aW9uLCBmcmFtZS55ICogcmVzb2x1dGlvbiwgZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIHRoZSBlbnRpcmUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICBpZighZnJhbWUpXG4gICAge1xuICAgICAgICBmcmFtZSA9IHRlbXBSZWN0O1xuICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICByZXR1cm4gd2ViR0xQaXhlbHM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIGEgcGl4ZWwgd2l0aGluIHRoZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uIChmcmFtZSwgeCwgeSlcbntcbiAgICB0ZW1wUmVjdC54ID0geDtcbiAgICB0ZW1wUmVjdC55ID0geTtcbiAgICB0ZW1wUmVjdC53aWR0aCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gMSAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmKGZyYW1lKVxuICAgIHtcbiAgICAgICAgdGVtcFJlY3QueCArPSBmcmFtZS54O1xuICAgICAgICB0ZW1wUmVjdC55ICs9IGZyYW1lLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UGl4ZWxzKHRlbXBSZWN0KTtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlLiBBbGwgdGV4dHVyZXMgaGF2ZSBhIGJhc2UgdGV4dHVyZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50IHBpeGVsIHJhdGlvc1xuICovXG5mdW5jdGlvbiBCYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDEwMDtcblxuICAgIC8vIFRPRE8gZG9jc1xuICAgIC8vIHVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2VcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxXaWR0aCA9IDEwMDtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgaGVpZ2h0IG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUgdG8gYXBwbHkgd2hlbiBzY2FsaW5nIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuTElORUFSXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIG9uY2UgdGhlIGJhc2UgdGV4dHVyZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbmV2ZXIgdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmFpbHMgdG8gbG9hZCBvciBoYXMgbm8gdGV4dHVyZSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgaWYgdGhlIHNvdXJjZSBpcyBjdXJyZW50bHkgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIElmIGFuIEltYWdlIHNvdXJjZSBpcyBsb2FkaW5nIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmVcbiAgICAgKiBkaXNwYXRjaGVkIHdoZW4gdGhlIG9wZXJhdGlvbiBlbmRzLiBBbiB1bmRlcnlsaW5nIHNvdXJjZSB0aGF0IGlzXG4gICAgICogaW1tZWRpYXRlbHktYXZhaWxhYmxlIGJ5cGFzc2VzIGxvYWRpbmcgZW50aXJlbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW1hZ2Ugc291cmNlIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUT0RPOiBNYWtlIHRoaXMgYSBzZXR0ZXIgdGhhdCBjYWxscyBsb2FkU291cmNlKCk7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtJbWFnZXxDYW52YXN9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsOyAvLyBzZXQgaW4gbG9hZFNvdXJjZSwgaWYgYXQgYWxsXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiBSR0IgY2hhbm5lbHMgc2hvdWxkIGJlIHByZS1tdWx0aXBsaWVkIGJ5IEFscGhhICAoV2ViR0wgb25seSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBvciBub3QgdGhlIHRleHR1cmUgaXMgYSBwb3dlciBvZiB0d28sIHRyeSB0byB1c2UgcG93ZXIgb2YgdHdvIHRleHR1cmVzIGFzIG11Y2ggYXMgeW91IGNhblxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IGZhbHNlO1xuXG4gICAgLy8gdXNlZCBmb3Igd2ViR0xcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiBhIG1pcG1hcCBvZiB0aGlzIHRleHR1cmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLiBUaGlzIHZhbHVlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIHRleHR1cmUgaXMgdXNlZFxuICAgICAqIEFsc28gdGhlIHRleHR1cmUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBzaXplIHRvIHdvcmtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5taXBtYXAgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHJlbmRlcmVyIElEcyB0byB3ZWJnbCB0ZXh0dXJlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgV2ViR0xUZXh0dXJlPn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9pZCA9IDA7XG4gICAgXG4gICAgLy8gaWYgbm8gc291cmNlIHBhc3NlZCBkb24ndCB0cnkgdG8gbG9hZFxuICAgIGlmIChzb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmluaXNoZXMgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkZWRcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmFpbHMgdG8gbG9hZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBCYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0ZXh0dXJlIG9uIGFsbCB0aGUgd2ViZ2wgcmVuZGVyZXJzLCB0aGlzIGFsc28gYXNzdW1lcyB0aGUgc3JjIGhhcyBjaGFuZ2VkLlxuICpcbiAqIEBmaXJlcyB1cGRhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5yZWFsV2lkdGggPSB0aGlzLnNvdXJjZS5uYXR1cmFsV2lkdGggfHwgdGhpcy5zb3VyY2Uud2lkdGg7XG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gdGhpcy5zb3VyY2UubmF0dXJhbEhlaWdodCB8fCB0aGlzLnNvdXJjZS5oZWlnaHQ7XG5cbiAgICB0aGlzLndpZHRoID0gdGhpcy5yZWFsV2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlYWxIZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IHV0aWxzLmlzUG93ZXJPZlR3byh0aGlzLnJlYWxXaWR0aCwgdGhpcy5yZWFsSGVpZ2h0KTtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIExvYWQgYSBzb3VyY2UuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBpcyBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlLCBzdWNoIGFzIGFuIGltYWdlIHRoYXQgbmVlZHMgdG8gYmVcbiAqIGRvd25sb2FkZWQsIHRoZW4gdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIGluIHRoZSBmdXR1cmVcbiAqIGFuZCBgaGFzTG9hZGVkYCB3aWxsIHJlbWFpbiBmYWxzZSBhZnRlciB0aGlzIGNhbGwuXG4gKlxuICogVGhlIGxvZ2ljIHN0YXRlIGFmdGVyIGNhbGxpbmcgYGxvYWRTb3VyY2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGVnLiBgZnJvbUltYWdlYCwgYG5ldyBCYXNlVGV4dHVyZWApIGlzOlxuICpcbiAqICAgICBpZiAodGV4dHVyZS5oYXNMb2FkZWQpXG4ge1xuICogICAgICAgIC8vIHRleHR1cmUgcmVhZHkgZm9yIHVzZVxuICogICAgIH0gZWxzZSBpZiAodGV4dHVyZS5pc0xvYWRpbmcpXG4ge1xuICogICAgICAgIC8vIGxpc3RlbiB0byAnbG9hZGVkJyBhbmQvb3IgJ2Vycm9yJyBldmVudHMgb24gdGV4dHVyZVxuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAgLy8gbm90IGxvYWRpbmcsIG5vdCBnb2luZyB0byBsb2FkIFVOTEVTUyB0aGUgc291cmNlIGlzIHJlbG9hZGVkXG4gKiAgICAgICAgLy8gKGl0IG1heSBzdGlsbCBtYWtlIHNlbnNlIHRvIGxpc3RlbiB0byB0aGUgZXZlbnRzKVxuICogICAgIH1cbiAqXG4gKiBAcHJvdGVjdGVkXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUubG9hZFNvdXJjZSA9IGZ1bmN0aW9uIChzb3VyY2UpXG57XG4gICAgdmFyIHdhc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZztcbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAod2FzTG9hZGluZyAmJiB0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc291cmNlLm9uZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgLy8gQXBwbHkgc291cmNlIGlmIGxvYWRlZC4gT3RoZXJ3aXNlIHNldHVwIGFwcHJvcHJpYXRlIGxvYWRpbmcgbW9uaXRvcnMuXG4gICAgaWYgKCh0aGlzLnNvdXJjZS5jb21wbGV0ZSB8fCB0aGlzLnNvdXJjZS5nZXRDb250ZXh0KSAmJiB0aGlzLnNvdXJjZS53aWR0aCAmJiB0aGlzLnNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNvdXJjZS5nZXRDb250ZXh0KVxuICAgIHtcblxuICAgICAgICAvLyBJbWFnZSBmYWlsIC8gbm90IHJlYWR5XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuXG4gICAgICAgIHNvdXJjZS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgc2NvcGUuZW1pdCgnbG9hZGVkJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvdXJjZS5vbmVycm9yID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5lbWl0KCdlcnJvcicsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQZXIgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjdGhlLWltZy1lbGVtZW50XG4gICAgICAgIC8vICAgXCJUaGUgdmFsdWUgb2YgYGNvbXBsZXRlYCBjYW4gdGh1cyBjaGFuZ2Ugd2hpbGUgYSBzY3JpcHQgaXMgZXhlY3V0aW5nLlwiXG4gICAgICAgIC8vIFNvIGNvbXBsZXRlIG5lZWRzIHRvIGJlIHJlLWNoZWNrZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gYWRkZWQuLlxuICAgICAgICAvLyBOT1RFOiBjb21wbGV0ZSB3aWxsIGJlIHRydWUgaWYgdGhlIGltYWdlIGhhcyBubyBzcmMgc28gYmVzdCB0byBjaGVjayBpZiB0aGUgc3JjIGlzIHNldC5cbiAgICAgICAgaWYgKHNvdXJjZS5jb21wbGV0ZSAmJiBzb3VyY2Uuc3JjKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyAuLmFuZCBpZiB3ZSdyZSBjb21wbGV0ZSBub3csIG5vIG5lZWQgZm9yIGNhbGxiYWNrc1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgc29tZSBvdGhlciB0cmFja2luZyB2YXJzIG9uY2VcbiAqIGEgc291cmNlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5fc291cmNlTG9hZGVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBiYXNlIHRleHR1cmVcbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5pbWFnZVVybClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuICAgICAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlLnNyYyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLnNvdXJjZS5fcGl4aUlkXTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG5cbiAgICB0aGlzLmRpc3Bvc2UoKTtcbn07XG5cbi8qKlxuICogRnJlZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTCBtZW1vcnkgd2l0aG91dCBkZXN0cm95aW5nIHRoaXMgdGV4dHVyZSBvYmplY3QuXG4gKiBUaGlzIG1lYW5zIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSB0ZXh0dXJlIGxhdGVyIHdoaWNoIHdpbGwgdXBsb2FkIGl0IHRvIEdQVVxuICogbWVtb3J5IGFnYWluLlxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIHRoaXMpO1xuXG4gICAgLy8gdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lZWRlZCwgdGhlIHJlbmRlcmVycyBzaG91bGQgY2xlYW51cCBhbGwgdGhlIGdsIHRleHR1cmVzLlxuICAgIC8vIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgc291cmNlIGltYWdlIG9mIHRoZSB0ZXh0dXJlLlxuICogVGhlIG9yaWdpbmFsIHNvdXJjZSBtdXN0IGJlIGFuIEltYWdlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5ld1NyYyB7c3RyaW5nfSB0aGUgcGF0aCBvZiB0aGUgaW1hZ2VcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNvdXJjZUltYWdlID0gZnVuY3Rpb24gKG5ld1NyYylcbntcbiAgICB0aGlzLnNvdXJjZS5zcmMgPSBuZXdTcmM7XG5cbiAgICB0aGlzLmxvYWRTb3VyY2UodGhpcy5zb3VyY2UpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIGJhc2UgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBTaG91bGQgdXNlIGFub255bW91cyBDT1JTPyBEZWZhdWx0cyB0byB0cnVlIGlmIHRoZSBVUkwgaXMgbm90IGEgZGF0YS1VUkkuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmIChjcm9zc29yaWdpbiA9PT0gdW5kZWZpbmVkICYmIGltYWdlVXJsLmluZGV4T2YoJ2RhdGE6JykgIT09IDApXG4gICAge1xuICAgICAgICBjcm9zc29yaWdpbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIC8vIG5ldyBJbWFnZSgpIGJyZWFrcyB0ZXggbG9hZGluZyBpbiBzb21lIHZlcnNpb25zIG9mIENocm9tZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMzgwNzFcbiAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgaWYgKGNyb3Nzb3JpZ2luKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoaW1hZ2UsIHNjYWxlTW9kZSk7XG4gICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgaW1hZ2Uuc3JjID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSBiYXNlVGV4dHVyZTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBAMnggYXQgdGhlIGVuZCBvZiB0aGUgdXJsIHdlIGFyZSBnb2luZyB0byBhc3N1bWUgaXRzIGEgaGlnaHJlcyBpbWFnZVxuICAgICAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKGltYWdlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFjYW52YXMuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGNhbnZhcy5fcGl4aUlkID0gJ2NhbnZhc18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG4iLCJ2YXIgQmFzZVJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VSZW5kZXJUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIFJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIFJlbmRlclRleHR1cmUgc2hvdWxkIGJlIHByZWxvYWRlZFxuICogb3RoZXJ3aXNlIGJsYWNrIHJlY3RhbmdsZXMgd2lsbCBiZSBkcmF3biBpbnN0ZWFkLlxuICpcbiAqIEEgUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCA4MDAsIDYwMCk7XG4gKiB2YXIgc3ByaXRlID0gUElYSS5TcHJpdGUuZnJvbUltYWdlKFwic3Bpbk9ial8wMS5wbmdcIik7XG4gKlxuICogc3ByaXRlLnBvc2l0aW9uLnggPSA4MDAvMjtcbiAqIHNwcml0ZS5wb3NpdGlvbi55ID0gNjAwLzI7XG4gKiBzcHJpdGUuYW5jaG9yLnggPSAwLjU7XG4gKiBzcHJpdGUuYW5jaG9yLnkgPSAwLjU7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiByZW5kZXJUZXh0dXJlXG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIGZvciB0aGlzIFJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIFJlbmRlclRleHR1cmUoYmFzZVJlbmRlclRleHR1cmUsIGZyYW1lKVxue1xuICAgIGlmICghcmVuZGVyZXIpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgb2JqZWN0IHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Jhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIFRleHR1cmUuY2FsbCh0aGlzLFxuICAgICAgICBiYXNlUmVuZGVyVGV4dHVyZSxcbiAgICAgICAgZnJhbWUgXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn1cblxuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmUucHJvdG90eXBlKTtcblJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGV4dHVyZTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIHVwZGF0ZUJhc2UpXG57XG4gICBcbiAgICAvL1RPRE8gLSBjb3VsZCBiZSBub3QgcmVxdWlyZWQuLlxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSB0aGlzLmNyb3Aud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNyb3AuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKHVwZGF0ZUJhc2UpXG4gICAge1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYmFzZVRleHR1cmUuY2xlYXIodGhpcy5mcmFtZSlcbiAgICBcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLnJlbmRlcih0aGlzLmZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRJbWFnZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuYmFzZVRleHR1cmUuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIFJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0QmFzZTY0ID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNlNjQuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIFJlbmRlclRleHR1cmUgdG8gaXQgYW5kIHRoZW4gcmV0dXJucyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gQSBDYW52YXMgZWxlbWVudCB3aXRoIHRoZSB0ZXh0dXJlIHJlbmRlcmVkIG9uLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldENhbnZhcyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVscyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVsKHRoaXMuZnJhbWUsIHgsIHkpO1xufTtcblxuUmVuZGVyVGV4dHVyZS5jcmVhdGUgPSBmdW5jdGlvbihyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHJldHVybiBuZXcgUmVuZGVyVGV4dHVyZShuZXcgQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbikpO1xufVxuXG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnMgPSByZXF1aXJlKCcuL1RleHR1cmVVdnMnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlIG9yIHBhcnQgb2YgYW4gaW1hZ2UuIEl0IGNhbm5vdCBiZSBhZGRlZFxuICogdG8gdGhlIGRpc3BsYXkgbGlzdCBkaXJlY3RseS4gSW5zdGVhZCB1c2UgaXQgYXMgdGhlIHRleHR1cmUgZm9yIGEgU3ByaXRlLiBJZiBubyBmcmFtZSBpcyBwcm92aWRlZCB0aGVuIHRoZSB3aG9sZSBpbWFnZSBpcyB1c2VkLlxuICpcbiAqIFlvdSBjYW4gZGlyZWN0bHkgY3JlYXRlIGEgdGV4dHVyZSBmcm9tIGFuIGltYWdlIGFuZCB0aGVuIHJldXNlIGl0IG11bHRpcGxlIHRpbWVzIGxpa2UgdGhpcyA6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZSgnYXNzZXRzL2ltYWdlLnBuZycpO1xuICogdmFyIHNwcml0ZTEgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiB2YXIgc3ByaXRlMiA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBiYXNlVGV4dHVyZSB7UElYSS5CYXNlVGV4dHVyZX0gVGhlIGJhc2UgdGV4dHVyZSBzb3VyY2UgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlIGZyb21cbiAqIEBwYXJhbSBbZnJhbWVdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3RhbmdsZSBmcmFtZSBvZiB0aGUgdGV4dHVyZSB0byBzaG93XG4gKiBAcGFyYW0gW2Nyb3BdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIGFyZWEgb2Ygb3JpZ2luYWwgdGV4dHVyZVxuICogQHBhcmFtIFt0cmltXSB7UElYSS5SZWN0YW5nbGV9IFRyaW1tZWQgdGV4dHVyZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBbcm90YXRlXSB7Ym9vbGVhbn0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlcyAoIHVzZWQgYnkgdGV4dHVyZSBwYWNrZXIgKVxuICovXG5mdW5jdGlvbiBUZXh0dXJlKGJhc2VUZXh0dXJlLCBmcmFtZSwgY3JvcCwgdHJpbSwgcm90YXRlKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogRG9lcyB0aGlzIFRleHR1cmUgaGF2ZSBhbnkgZnJhbWUgZGF0YSBhc3NpZ25lZCB0byBpdD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5ub0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VUZXh0dXJlIGluc3RhbmNlb2YgVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0cmltIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLnRyaW0gPSB0cmltO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCB0aGUgcmVuZGVyZXIga25vdyBpZiB0aGUgdGV4dHVyZSBpcyB2YWxpZC4gSWYgaXQncyBub3QgdGhlbiBpdCBjYW5ub3QgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgYSByZW5kZXJlciBrbm93IHRoYXQgYSB0ZXh0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgKHVzZWQgbWFpbmx5IGZvciB3ZWJHTCB1diB1cGRhdGVzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVpcmVzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgVVYgZGF0YSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgYXJlYSBvZiB0aGUgQmFzZVRleHR1cmUgaW1hZ2UgdG8gYWN0dWFsbHkgY29weSB0byB0aGUgQ2FudmFzIC8gV2ViR0wgd2hlbiByZW5kZXJpbmcsXG4gICAgICogaXJyZXNwZWN0aXZlIG9mIHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBvciBwbGFjZW1lbnQgKHdoaWNoIGNhbiBiZSBpbmZsdWVuY2VkIGJ5IHRyaW1tZWQgdGV4dHVyZSBhdGxhc2VzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jcm9wID0gY3JvcCB8fCBmcmFtZTsvL25ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdGF0ZSA9ICEhcm90YXRlO1xuXG4gICAgaWYgKGJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBmcmFtZSB3ZSBzaG91bGQgbW9uaXRvciBmb3IgYW55IGJhc2UgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlLm9uY2UoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZyYW1lIG9yIHRoZSBiYXNlVGV4dHVyZSBpcyB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICovXG4gICAgZnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgICAgICAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50cmltICYmICF0aGlzLnJvdGF0ZSAmJiAoZnJhbWUueCArIGZyYW1lLndpZHRoID4gdGhpcy5iYXNlVGV4dHVyZS53aWR0aCB8fCBmcmFtZS55ICsgZnJhbWUuaGVpZ2h0ID4gdGhpcy5iYXNlVGV4dHVyZS5oZWlnaHQpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dHVyZSBFcnJvcjogZnJhbWUgZG9lcyBub3QgZml0IGluc2lkZSB0aGUgYmFzZSBUZXh0dXJlIGRpbWVuc2lvbnMgJyArIHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5zb3VyY2UgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50cmltKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wID0gZnJhbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlcyB0aGlzIHRleHR1cmUgb24gdGhlIGdwdS5cbiAqXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5iYXNlVGV4dHVyZS51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyBsb2FkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlTG9hZGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIC8vIFRPRE8gdGhpcyBjb2RlIGxvb2tzIGNvbmZ1c2luZy4uIGJvbyB0byBhYnVzaW5nIGdldHRlcnMgYW5kIHNldHRlcnNzIVxuICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy5fZnJhbWU7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyB1cGRhdGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZVVwZGF0ZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSBiYXNlVGV4dHVyZS53aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSBiYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlPWZhbHNlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlKVxue1xuICAgIGlmICh0aGlzLmJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGRlc3Ryb3lCYXNlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG4gICAgdGhpcy50cmltID0gbnVsbDtcbiAgICB0aGlzLmNyb3AgPSBudWxsO1xuXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UsIHRoaXMpO1xuICAgIHRoaXMub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGV4dHVyZSBvYmplY3QgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLmZyYW1lLCB0aGlzLmNyb3AsIHRoaXMudHJpbSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5fdXBkYXRlVXZzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuX3V2cylcbiAgICB7XG4gICAgICAgIHRoaXMuX3V2cyA9IG5ldyBUZXh0dXJlVXZzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXZzLnNldCh0aGlzLmNyb3AsIHRoaXMuYmFzZVRleHR1cmUsIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFRleHR1cmUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSAgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gY3Jvc3NvcmlnaW4ge2Jvb2xlYW59IFdoZXRoZXIgcmVxdWVzdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY3Jvc3NvcmlnaW5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21JbWFnZShpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xuICAgICAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gdGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICh0eXBlb2YgdmlkZW8gPT09ICdzdHJpbmcnKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFRleHR1cmUuZnJvbVZpZGVvVXJsKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSB2aWRlbyB1cmwuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvVXJsIHtzdHJpbmd9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW9VcmwgPSBmdW5jdGlvbiAodmlkZW9VcmwsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHZpZGVvVXJsLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIHRleHR1cmUgdG8gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuIFRoaXMgY2FjaGUgaXMgc2hhcmVkIGFjcm9zcyB0aGUgd2hvbGUgUElYSSBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIFRleHR1cmUgdG8gYWRkIHRvIHRoZSBjYWNoZS5cbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIGJlIHN0b3JlZCBhZ2FpbnN0LlxuICovXG5UZXh0dXJlLmFkZFRleHR1cmVUb0NhY2hlID0gZnVuY3Rpb24gKHRleHR1cmUsIGlkKVxue1xuICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpZF0gPSB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB0ZXh0dXJlIGZyb20gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCBvZiB0aGUgdGV4dHVyZSB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRoYXQgd2FzIHJlbW92ZWRcbiAqL1xuVGV4dHVyZS5yZW1vdmVUZXh0dXJlRnJvbUNhY2hlID0gZnVuY3Rpb24gKGlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBBbiBlbXB0eSB0ZXh0dXJlLCB1c2VkIG9mdGVuIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBtdWx0aXBsZSBlbXB0eSB0ZXh0dXJlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZS5FTVBUWSA9IG5ldyBUZXh0dXJlKG5ldyBCYXNlVGV4dHVyZSgpKTtcbiIsIlxuLyoqXG4gKiBBIHN0YW5kYXJkIG9iamVjdCB0byBzdG9yZSB0aGUgVXZzIG9mIGEgdGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmVVdnMoKVxue1xuICAgIHRoaXMueDAgPSAwO1xuICAgIHRoaXMueTAgPSAwO1xuXG4gICAgdGhpcy54MSA9IDE7XG4gICAgdGhpcy55MSA9IDA7XG5cbiAgICB0aGlzLngyID0gMTtcbiAgICB0aGlzLnkyID0gMTtcblxuICAgIHRoaXMueDMgPSAwO1xuICAgIHRoaXMueTMgPSAxO1xuXG4gICAgdGhpcy54eTBfdWludDMyID0gMDtcbiAgICB0aGlzLnh5MV91aW50MzIgPSAwO1xuICAgIHRoaXMueHkyX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTNfdWludDMyID0gMDtcblxuICAgIHRoaXMudXZzX3VpbnQzMiA9IG5ldyBVaW50MzJBcnJheSg0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVVdnM7XG5cbi8qKlxuICogU2V0cyB0aGUgdGV4dHVyZSBVdnMgYmFzZWQgb24gdGhlIGdpdmVuIGZyYW1lIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gZnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIGJhc2VGcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gcm90YXRlIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgcm90YXRlZFxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZVV2cy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZyYW1lLCBiYXNlRnJhbWUsIHJvdGF0ZSlcbntcbiAgICB2YXIgdHcgPSBiYXNlRnJhbWUud2lkdGg7XG4gICAgdmFyIHRoID0gYmFzZUZyYW1lLmhlaWdodDtcblxuICAgIGlmKHJvdGF0ZSlcbiAgICB7XG4gICAgICAgIHRoaXMueDAgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSBmcmFtZS55IC8gdGg7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy54MCA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcbiAgICB9XG5cbiAgICB0aGlzLnV2c191aW50MzJbMF0gPSAoKCh0aGlzLnkwICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDAgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsxXSA9ICgoKHRoaXMueTEgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MSAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzJdID0gKCgodGhpcy55MiAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngyICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbM10gPSAoKCh0aGlzLnkzICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDMgKiA2NTUzNSkgJiAweEZGRkYpO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIG9mIGEgW3BsYXlpbmddIFZpZGVvLlxuICpcbiAqIFZpZGVvIGJhc2UgdGV4dHVyZXMgbWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QgaW4gdGhlaXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNldmVyYWwgd2F5cywgc3VjaCBhczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCgnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHsgc3JjOiAnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9KTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbJy92aWRlby53ZWJtJywgJy92aWRlby5tcDQnXSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoW1xuICogICAgIHsgc3JjOiAnL3ZpZGVvLndlYm0nLCBtaW1lOiAndmlkZW8vd2VibScgfSxcbiAqICAgICB7IHNyYzogJy92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9XG4gKiBdKTtcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgW1wiZGV1c1wiIGRlbW9dKGh0dHA6Ly93d3cuZ29vZGJveWRpZ2l0YWwuY29tL3BpeGlqcy9leGFtcGxlcy9kZXVzLykuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkJhc2VUZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gVmlkZW9CYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmlkZW8gc291cmNlIGVsZW1lbnQgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIC8vIGhvb2sgaW4gaGVyZSB0byBjaGVjayBpZiB2aWRlbyBpcyBhbHJlYWR5IGF2YWlsYWJsZS5cbiAgICAvLyBCYXNlVGV4dHVyZSBsb29rcyBmb3IgYSBzb3VyY2UuY29tcGxldGUgYm9vbGVhbiwgcGx1cyB3aWR0aCAmIGhlaWdodC5cblxuICAgIGlmICgoc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0VOT1VHSF9EQVRBIHx8IHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9GVVRVUkVfREFUQSkgJiYgc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICBzb3VyY2UuY29tcGxldGUgPSB0cnVlO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgc291cmNlLCBzY2FsZU1vZGUpO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBiYXNlIHRleHR1cmUgYXV0b21hdGljYWxseSB1cGRhdGUgaXRzZWxmLCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX29uVXBkYXRlID0gdGhpcy5fb25VcGRhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkNhblBsYXkgPSB0aGlzLl9vbkNhblBsYXkuYmluZCh0aGlzKTtcblxuICAgIGlmICghc291cmNlLmNvbXBsZXRlKVxuICAgIHtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIC8vIHN0YXJ0ZWQgcGxheWluZy4uXG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fb25QbGF5U3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX29uUGxheVN0b3AuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fX2xvYWRlZCA9IGZhbHNlO1xufVxuXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZVRleHR1cmUucHJvdG90eXBlKTtcblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmlkZW9CYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9CYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3Agb2YgdGhlIHZpZGVvIGJhc2UgdGV4dHVyZSwgb25seSBydW5zIHdoZW4gYXV0b1VwZGF0ZSBpcyBzZXQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUnVucyB0aGUgdXBkYXRlIGxvb3Agd2hlbiB0aGUgdmlkZW8gaXMgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBwYXVzZSBldmVudCBpcyB0cmlnZ2VyZWQsIHN0b3BzIHRoZSB1cGRhdGUgbG9vcFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgdmlkZW8gaXMgbG9hZGVkIGFuZCByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uQ2FuUGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2UudmlkZW9XaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnNvdXJjZS52aWRlb0hlaWdodDtcblxuICAgICAgICB0aGlzLnNvdXJjZS5wbGF5KCk7XG5cbiAgICAgICAgLy8gcHJldmVudCBtdWx0aXBsZSBsb2FkZWQgZGlzcGF0Y2hlcy4uXG4gICAgICAgIGlmICghdGhpcy5fX2xvYWRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHRoaXMuc291cmNlLl9waXhpSWQgXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlLl9waXhpSWQ7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogTWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXZpZGVvLl9waXhpSWQpXG4gICAge1xuICAgICAgICB2aWRlby5fcGl4aUlkID0gJ3ZpZGVvXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3ZpZGVvLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IFZpZGVvQmFzZVRleHR1cmUodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHZpZGVvLl9waXhpSWQgXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBCYXNlVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqIFRoaXMgQmFzZVRleHR1cmUgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYSB0ZXh0dXJlXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvU3JjIHtzdHJpbmd8b2JqZWN0fHN0cmluZ1tdfG9iamVjdFtdfSBUaGUgVVJMKHMpIGZvciB0aGUgdmlkZW8uXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLnNyY10ge3N0cmluZ30gT25lIG9mIHRoZSBzb3VyY2UgdXJscyBmb3IgdGhlIHZpZGVvXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLm1pbWVdIHtzdHJpbmd9IFRoZSBtaW1ldHlwZSBvZiB0aGUgdmlkZW8gKGUuZy4gJ3ZpZGVvL21wNCcpLiBJZiBub3Qgc3BlY2lmaWVkXG4gKiAgdGhlIHVybCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBtaW1lIHR5cGUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwgPSBmdW5jdGlvbiAodmlkZW9TcmMsIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXG4gICAgLy8gYXJyYXkgb2Ygb2JqZWN0cyBvciBzdHJpbmdzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW9TcmMpKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWRlb1NyYy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjW2ldLnNyYyB8fCB2aWRlb1NyY1tpXSwgdmlkZW9TcmNbaV0ubWltZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNpbmdsZSBvYmplY3Qgb3Igc3RyaW5nXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjLnNyYyB8fCB2aWRlb1NyYywgdmlkZW9TcmMubWltZSkpO1xuICAgIH1cblxuICAgIHZpZGVvLmxvYWQoKTtcbiAgICB2aWRlby5wbGF5KCk7XG5cbiAgICByZXR1cm4gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSk7XG59O1xuXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzID0gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsO1xuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2UocGF0aCwgdHlwZSlcbntcbiAgICBpZiAoIXR5cGUpXG4gICAge1xuICAgICAgICB0eXBlID0gJ3ZpZGVvLycgKyBwYXRoLnN1YnN0cihwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gcGF0aDtcbiAgICBzb3VyY2UudHlwZSA9IHR5cGU7XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgLy8gSW50ZXJuYWwgZXZlbnQgdXNlZCBieSBjb21wb3NlZCBlbWl0dGVyXG4gICAgVElDSyA9ICd0aWNrJztcblxuLyoqXG4gKiBBIFRpY2tlciBjbGFzcyB0aGF0IHJ1bnMgYW4gdXBkYXRlIGxvb3AgdGhhdCBvdGhlciBvYmplY3RzIGxpc3RlbiB0by5cbiAqIFRoaXMgY2xhc3MgaXMgY29tcG9zZWQgYXJvdW5kIGFuIEV2ZW50RW1pdHRlciBvYmplY3QgdG8gYWRkIGxpc3RlbmVyc1xuICogbWVhbnQgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lLlxuICogQW5pbWF0aW9uIGZyYW1lcyBhcmUgcmVxdWVzdGVkIG9ubHkgd2hlbiBuZWNlc3NhcnksXG4gKiBlLmcuIFdoZW4gdGhlIHRpY2tlciBpcyBzdGFydGVkIGFuZCB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbmZ1bmN0aW9uIFRpY2tlcigpXG57XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRpY2sgbWV0aG9kIGJvdW5kIHRvIHRpY2tlciBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaW4gZWFybHkgMjAxNSwgRnVuY3Rpb24uYmluZFxuICAgICAqIGlzIHN0aWxsIDYwJSBzbG93ZXIgaW4gaGlnaCBwZXJmb3JtYW5jZSBzY2VuYXJpb3MuXG4gICAgICogQWxzbyBzZXBhcmF0aW5nIGZyYW1lIHJlcXVlc3RzIGZyb20gdXBkYXRlIG1ldGhvZFxuICAgICAqIHNvIGxpc3RlbmVycyBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGFuZCB3aXRoXG4gICAgICogYW55IGFuaW1hdGlvbiBBUEksIGp1c3QgaW52b2tlIHRpY2tlci51cGRhdGUodGltZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RpY2sgPSBmdW5jdGlvbiBfdGljayh0aW1lKSB7XG5cbiAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgbm93XG4gICAgICAgICAgICBfdGhpcy51cGRhdGUodGltZSk7XG4gICAgICAgICAgICAvLyBMaXN0ZW5lciBzaWRlIGVmZmVjdHMgbWF5IGhhdmUgbW9kaWZpZWQgdGlja2VyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQgJiYgX3RoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiBfdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fdGljayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZW1pdHRlciB1c2VkIHRvIGZpcmUgJ3RpY2snIGV2ZW50XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9lbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY3VycmVudCBmcmFtZSByZXF1ZXN0IElEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdmFsdWUgbWFuYWdlZCBieSBtaW5GUFMgcHJvcGVydHkgc2V0dGVyIGFuZCBnZXR0ZXIuXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHVwZGF0ZXMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBzaG91bGQgaW52b2tlIHRoZSBtZXRob2RcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBhdXRvbWF0aWNhbGx5XG4gICAgICogd2hlbiBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1N0YXJ0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTY2FsYXIgdGltZSB2YWx1ZSBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbWluRlBTfVxuICAgICAqIGFuZCBpcyBzY2FsZWQgd2l0aCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfS5cbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhcCBtYXkgYmUgZXhjZWVkZWQgYnkgc2NhbGluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kZWx0YVRpbWUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGltZSBlbGFwc2VkIGluIG1pbGxpc2Vjb25kcyBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBPcHBvc2VkIHRvIHdoYXQgdGhlIHNjYWxhciB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX1cbiAgICAgKiBpcyBiYXNlZCwgdGhpcyB2YWx1ZSBpcyBuZWl0aGVyIGNhcHBlZCBub3Igc2NhbGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMSAvIFRBUkdFVF9GUE1TXG4gICAgICovXG4gICAgdGhpcy5lbGFwc2VkTVMgPSAxIC8gQ09OU1QuVEFSR0VUX0ZQTVM7IC8vIGRlZmF1bHQgdG8gdGFyZ2V0IGZyYW1lIHRpbWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBsYXN0IHRpbWUge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9IHdhcyBpbnZva2VkLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgYWxzbyByZXNldCBpbnRlcm5hbGx5IG91dHNpZGUgb2YgaW52b2tpbmdcbiAgICAgKiB1cGRhdGUsIGJ1dCBvbmx5IHdoZW4gYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxhc3RUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEZhY3RvciBvZiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNjYWxlcyB0aWNrZXIuZGVsdGFUaW1lIHRvIHdoYXQgd291bGQgYmVcbiAgICAgKiAvLyB0aGUgZXF1aXZhbGVudCBvZiBhcHByb3hpbWF0ZWx5IDEyMCBGUFNcbiAgICAgKiB0aWNrZXIuc3BlZWQgPSAyO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICogYHRydWVgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBgZmFsc2VgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RvcH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIFdoaWxlIGBmYWxzZWAsIHRoaXMgdmFsdWUgbWF5IGNoYW5nZSB0byBgdHJ1ZWAgaW4gdGhlXG4gICAgICogZXZlbnQgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGJlaW5nIGB0cnVlYFxuICAgICAqIGFuZCBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWNrZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lcyBwZXIgc2Vjb25kIGF0IHdoaWNoIHRoaXMgdGlja2VyIGlzIHJ1bm5pbmcuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgYXBwcm94aW1hdGVseSA2MCBpbiBtb3N0IG1vZGVybiBicm93c2Vycy5cbiAgICAgKiAqKk5vdGU6KiogVGhpcyBkb2VzIG5vdCBmYWN0b3IgaW4gdGhlIHZhbHVlIG9mXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0sIHdoaWNoIGlzIHNwZWNpZmljXG4gICAgICogdG8gc2NhbGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBGUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5lbGFwc2VkTVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGFsbG93ZWQgdG9cbiAgICAgKiBlbGFwc2UgYmV0d2VlbiBpbnZva2luZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0uXG4gICAgICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNhcCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gICAgICogYnV0IGRvZXMgbm90IGVmZmVjdCB0aGUgbWVhc3VyZWQgdmFsdWUgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNGUFN9LlxuICAgICAqIFdoZW4gc2V0dGluZyB0aGlzIHByb3BlcnR5IGl0IGlzIGNsYW1wZWQgdG8gYSB2YWx1ZSBiZXR3ZWVuXG4gICAgICogYDBgIGFuZCBgUElYSS5UQVJHRVRfRlBNUyAqIDEwMDBgLlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICBtaW5GUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZwcylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gQ2xhbXA6IDAgdG8gVEFSR0VUX0ZQTVNcbiAgICAgICAgICAgIHZhciBtaW5GUE1TID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZnBzKSAvIDEwMDAsIENPTlNULlRBUkdFVF9GUE1TKTtcbiAgICAgICAgICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEgLyBtaW5GUE1TO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbFxuICogZW1pdHRlciBoYXMgbGlzdGVuZXJzLCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fcmVxdWVzdElmTmVlZGVkID0gZnVuY3Rpb24gX3JlcXVlc3RJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiB0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIC8vIGVuc3VyZSBjYWxsYmFja3MgZ2V0IGNvcnJlY3QgZGVsdGFcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fdGljayk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IGNhbmNlbHMgYSBwZW5kaW5nIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9jYW5jZWxJZk5lZWRlZCA9IGZ1bmN0aW9uIF9jYW5jZWxJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIHRoZSB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZCBpdCBjaGVja3MgaWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHlcbiAqIGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy4gSWYgdGhlc2VcbiAqIGNvbmRpdGlvbnMgYXJlIG1ldCwgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgdGlja2VyIGhhcyBub3RcbiAqIGJlZW4gc3RhcnRlZCwgYnV0IGF1dG9TdGFydCBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHRpY2tlciBzdGFydHMgbm93LFxuICogYW5kIGNvbnRpbnVlcyB3aXRoIHRoZSBwcmV2aW91cyBjb25kaXRpb25zIHRvIHJlcXVlc3QgYSBuZXcgZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fc3RhcnRJZlBvc3NpYmxlID0gZnVuY3Rpb24gX3N0YXJ0SWZQb3NzaWJsZSgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmF1dG9TdGFydClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb259IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIHVwZGF0ZXNcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb25jZX0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3Igb25lIHVwZGF0ZVxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIGFkZE9uY2UoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbmNlKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb2ZmfSBpbnRlcm5hbGx5IGZvciAndGljaycgZXZlbnQuXG4gKiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyBmb3IgJ3RpY2snIGV2ZW50LlxuICogSWYgaXQgZG9lcywgdGhlbiBpdCBjYW5jZWxzIHRoZSBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHBhcmFtIFtmbl0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZFxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0IHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vZmYoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgaWYgKCF0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyBsaXN0ZW5lcnNcbiAqIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIHN0YXJ0KClcbntcbiAgICBpZiAoIXRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgcmVxdWVzdGVkXG4gKiBhbiBhbmltYXRpb24gZnJhbWUgaXQgaXMgY2FuY2VsZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcCgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVHJpZ2dlcnMgYW4gdXBkYXRlLiBBbiB1cGRhdGUgZW50YWlscyBzZXR0aW5nIHRoZVxuICogY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2VsYXBzZWRNU30sXG4gKiB0aGUgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gKiBpbnZva2luZyBhbGwgbGlzdGVuZXJzIHdpdGggY3VycmVudCBkZWx0YVRpbWUsXG4gKiBhbmQgdGhlbiBmaW5hbGx5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNsYXN0VGltZX1cbiAqIHdpdGggdGhlIHZhbHVlIG9mIGN1cnJlbnRUaW1lIHRoYXQgd2FzIHByb3ZpZGVkLlxuICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBieSBhbmltYXRpb25cbiAqIGZyYW1lIGNhbGxiYWNrcyBpZiB0aGUgdGlja2VyIGluc3RhbmNlIGhhcyBiZWVuIHN0YXJ0ZWRcbiAqIGFuZCBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSBbY3VycmVudFRpbWU9cGVyZm9ybWFuY2Uubm93KCldIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn0gdGhlIGN1cnJlbnQgdGltZSBvZiBleGVjdXRpb25cbiAqL1xuVGlja2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoY3VycmVudFRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWRNUztcblxuICAgIC8vIEFsbG93IGNhbGxpbmcgdXBkYXRlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBjdXJyZW50VGltZS5cbiAgICBjdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIHx8IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIC8vIFNhdmUgdW5jYXBwZWQgZWxhcHNlZE1TIGZvciBtZWFzdXJlbWVudFxuICAgIGVsYXBzZWRNUyA9IHRoaXMuZWxhcHNlZE1TID0gY3VycmVudFRpbWUgLSB0aGlzLmxhc3RUaW1lO1xuXG4gICAgLy8gY2FwIHRoZSBtaWxsaXNlY29uZHMgZWxhcHNlZCB1c2VkIGZvciBkZWx0YVRpbWVcbiAgICBpZiAoZWxhcHNlZE1TID4gdGhpcy5fbWF4RWxhcHNlZE1TKVxuICAgIHtcbiAgICAgICAgZWxhcHNlZE1TID0gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgIH1cblxuICAgIHRoaXMuZGVsdGFUaW1lID0gZWxhcHNlZE1TICogQ09OU1QuVEFSR0VUX0ZQTVMgKiB0aGlzLnNwZWVkO1xuXG4gICAgLy8gSW52b2tlIGxpc3RlbmVycyBhZGRlZCB0byBpbnRlcm5hbCBlbWl0dGVyXG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KFRJQ0ssIHRoaXMuZGVsdGFUaW1lKTtcblxuICAgIHRoaXMubGFzdFRpbWUgPSBjdXJyZW50VGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGlja2VyO1xuIiwidmFyIFRpY2tlciA9IHJlcXVpcmUoJy4vVGlja2VyJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZCB0aWNrZXIgaW5zdGFuY2UgdXNlZCBieSB7QGxpbmsgUElYSS5leHRyYXMuTW92aWVDbGlwfS5cbiAqIGFuZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICogVGhlIHByb3BlcnR5IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBpcyBzZXQgdG8gYHRydWVgXG4gKiBmb3IgdGhpcyBpbnN0YW5jZS4gUGxlYXNlIGZvbGxvdyB0aGUgZXhhbXBsZXMgZm9yIHVzYWdlLCBpbmNsdWRpbmdcbiAqIGhvdyB0byBvcHQtb3V0IG9mIGF1dG8tc3RhcnRpbmcgdGhlIHNoYXJlZCB0aWNrZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciB0aWNrZXIgPSBQSVhJLnRpY2tlci5zaGFyZWQ7XG4gKiAvLyBTZXQgdGhpcyB0byBwcmV2ZW50IHN0YXJ0aW5nIHRoaXMgdGlja2VyIHdoZW4gbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqIC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyB0cnVlIG9ubHkgZm9yIHRoZSBQSVhJLnRpY2tlci5zaGFyZWQgaW5zdGFuY2UuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiAvLyBGWUksIGNhbGwgdGhpcyB0byBlbnN1cmUgdGhlIHRpY2tlciBpcyBzdG9wcGVkLiBJdCBzaG91bGQgYmUgc3RvcHBlZFxuICogLy8gaWYgeW91IGhhdmUgbm90IGF0dGVtcHRlZCB0byByZW5kZXIgYW55dGhpbmcgeWV0LlxuICogdGlja2VyLnN0b3AoKTtcbiAqIC8vIENhbGwgdGhpcyB3aGVuIHlvdSBhcmUgcmVhZHkgZm9yIGEgcnVubmluZyBzaGFyZWQgdGlja2VyLlxuICogdGlja2VyLnN0YXJ0KCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFlvdSBtYXkgdXNlIHRoZSBzaGFyZWQgdGlja2VyIHRvIHJlbmRlci4uLlxuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoODAwLCA2MDApO1xuICogdmFyIHN0YWdlID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiB2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIpO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZW5kZXJlci52aWV3KTtcbiAqIHRpY2tlci5hZGQoZnVuY3Rpb24gKHRpbWUpIHtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE9yIHlvdSBjYW4ganVzdCB1cGRhdGUgaXQgbWFudWFsbHkuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiB0aWNrZXIuc3RvcCgpO1xuICogZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XG4gKiAgICAgdGlja2VyLnVwZGF0ZSh0aW1lKTtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAqIH1cbiAqIGFuaW1hdGUocGVyZm9ybWFuY2Uubm93KCkpO1xuICpcbiAqIEB0eXBlIHtQSVhJLnRpY2tlci5UaWNrZXJ9XG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xudmFyIHNoYXJlZCA9IG5ldyBUaWNrZXIoKTtcbnNoYXJlZC5hdXRvU3RhcnQgPSB0cnVlO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS50aWNrZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc2hhcmVkOiBzaGFyZWQsXG4gICAgVGlja2VyOiBUaWNrZXJcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gZnVuY3Rpb24gKHNpemUpXG57XG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBhcnJheSwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgXG4gICAgdmFyIHRvdGFsSW5kaWNlcyA9IHNpemUgKiA2O1xuXG4gICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodG90YWxJbmRpY2VzKTtcblxuXHQvLyBmaWxsIHRoZSBpbmRpY2VzIHdpdGggdGhlIHF1YWRzIHRvIGRyYXdcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IHRvdGFsSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICBpbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICBpbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHM7IiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudXRpbHNcbiAqL1xudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgX3VpZDogMCxcbiAgICBfc2FpZEhlbGxvOiBmYWxzZSxcblxuICAgIEV2ZW50RW1pdHRlcjogICByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgcGx1Z2luVGFyZ2V0OiAgIHJlcXVpcmUoJy4vcGx1Z2luVGFyZ2V0JyksXG4gICAgYXN5bmM6ICAgICAgICAgIHJlcXVpcmUoJ2FzeW5jJyksXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZS5cbiAgICAgKi9cbiAgICB1aWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICByZXR1cm4gKyt1dGlscy5fdWlkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYW4gW1IsIEcsIEJdIGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHBhcmFtICB7bnVtYmVyW119IFtvdXQ9W11dXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgW1IsIEcsIEJdIG9mIHRoZSBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgycmdiOiBmdW5jdGlvbiAoaGV4LCBvdXQpXG4gICAge1xuICAgICAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICAgICAgb3V0WzBdID0gKGhleCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMV0gPSAoaGV4ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzJdID0gKGhleCAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnN0cmluZzogZnVuY3Rpb24gKGhleClcbiAgICB7XG4gICAgICAgIGhleCA9IGhleC50b1N0cmluZygxNik7XG4gICAgICAgIGhleCA9ICcwMDAwMDAnLnN1YnN0cigwLCA2IC0gaGV4Lmxlbmd0aCkgKyBoZXg7XG5cbiAgICAgICAgcmV0dXJuICcjJyArIGhleDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkgdG8gYSBoZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmdiIHtudW1iZXJbXX1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb2xvciBudW1iZXJcbiAgICAgKi9cbiAgICByZ2IyaGV4OiBmdW5jdGlvbiAocmdiKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgocmdiWzBdKjI1NSA8PCAxNikgKyAocmdiWzFdKjI1NSA8PCA4KSArIHJnYlsyXSoyNTUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZFxuICAgICAqL1xuICAgIGNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXM6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBuZ0hlYWQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFCQVFNQUFBREQ4cDJPQUFBQUExQk1WRVgvJztcbiAgICAgICAgdmFyIHBuZ0VuZCA9ICdBQUFBQ2tsRVFWUUkxMk5nQUFBQUFnQUI0aUc4TXdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG4gICAgICAgIHZhciBtYWdlbnRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSA2O1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcblxuICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1hZ2VudGEsIDAsIDApO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh5ZWxsb3csIDIsIDApO1xuXG4gICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwwLDEsMSkuZGF0YTtcblxuICAgICAgICByZXR1cm4gKGRhdGFbMF0gPT09IDI1NSAmJiBkYXRhWzFdID09PSAwICYmIGRhdGFbMl0gPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIG51bWJlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICogdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIFN0YXJsaW5nIEZyYW1ld29yayBhcyBpdHMgcHJldHR5IG5lYXQgOylcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICovXG4gICAgZ2V0TmV4dFBvd2VyT2ZUd286IGZ1bmN0aW9uIChudW1iZXIpXG4gICAge1xuICAgICAgICAvLyBzZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG93ZXJfb2ZfdHdvI0Zhc3RfYWxnb3JpdGhtX3RvX2NoZWNrX2lmX2FfcG9zaXRpdmVfbnVtYmVyX2lzX2FfcG93ZXJfb2ZfdHdvXG4gICAgICAgIGlmIChudW1iZXIgPiAwICYmIChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDE7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPCBudW1iZXIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzdWx0IDw8PSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBtYWtlIGEgcG93ZXIgb2YgdHdvIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9XG4gICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybiAod2lkdGggPiAwICYmICh3aWR0aCAmICh3aWR0aCAtIDEpKSA9PT0gMCAmJiBoZWlnaHQgPiAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIGFuIGFzc2V0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwcmVmaXhcbiAgICAgKiB1c2VkIGJ5IHNwcml0ZXNoZWV0cyBhbmQgaW1hZ2UgdXJsc1xuICAgICAqXG4gICAgICogQHBhcmFtIHVybCB7c3RyaW5nfSB0aGUgaW1hZ2UgcGF0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRSZXNvbHV0aW9uT2ZVcmw6IGZ1bmN0aW9uICh1cmwpXG4gICAge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IENPTlNULlJFVElOQV9QUkVGSVguZXhlYyh1cmwpO1xuXG4gICAgICAgIGlmIChyZXNvbHV0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlc29sdXRpb25bMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvZ3Mgb3V0IHRoZSB2ZXJzaW9uIGFuZCByZW5kZXJlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBydW5uaW5nIGluc3RhbmNlIG9mIFBJWEkuXG4gICAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoaXMgbWVzc2FnZSB5b3UgY2FuIHNldCBgUElYSS51dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtgXG4gICAgICogc28gdGhlIGxpYnJhcnkgdGhpbmtzIGl0IGFscmVhZHkgc2FpZCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgZG9pbmcgdGhhdCB3aWxsIGZvcmV2ZXJcbiAgICAgKiBtYWtlcyB5b3UgYSBqZXJrIGZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBzdHJpbmcgcmVuZGVyZXIgdHlwZSB0byBsb2cuXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIHNheUhlbGxvOiBmdW5jdGlvbiAodHlwZSlcbiAgICB7XG4gICAgICAgIGlmICh1dGlscy5fc2FpZEhlbGxvKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZScpID4gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW1xuICAgICAgICAgICAgICAgICdcXG4gJWMgJWMgJWMgUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSDinLAgJyArIHR5cGUgKyAnIOKcsCAgJWMgJyArICcgJWMgJyArICcgaHR0cDovL3d3dy5waXhpanMuY29tLyAgJWMgJWMg4pmlJWPimaUlY+KZpSBcXG5cXG4nLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjY2YTU7IGJhY2tncm91bmQ6ICMwMzAzMDc7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmZjM2RjOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7J1xuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3MpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1BpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0gJyArIHR5cGUgKyAnIC0gaHR0cDovL3d3dy5waXhpanMuY29tLycpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmb3IgY2hlY2tpbmcgZm9yIHdlYmdsIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNXZWJHTFN1cHBvcnRlZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHZhciBjb250ZXh0T3B0aW9ucyA9IHsgc3RlbmNpbDogdHJ1ZSB9O1xuICAgICAgICB0cnlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgY29udGV4dE9wdGlvbnMpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBjb250ZXh0T3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIShnbCAmJiBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnN0ZW5jaWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzaWduIG9mIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIG4ge251bWJlcn1cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIG4gaXMgMCwgLTEgaWYgbiBpcyBuZWdhdGl2ZSwgMSBpZiBuIGkgcG9zaXRpdmVcbiAgICAgKi9cbiAgICBzaWduOiBmdW5jdGlvbiAobilcbiAgICB7XG4gICAgICAgIHJldHVybiBuID8gKG4gPCAwID8gLTEgOiAxKSA6IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZUl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydElkeCBUaGUgaW5kZXggdG8gYmVnaW4gcmVtb3ZpbmcgZnJvbSAoaW5jbHVzaXZlKVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVJdGVtczogZnVuY3Rpb24gKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KVxuICAgIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN0YXJ0SWR4ID49IGxlbmd0aCB8fCByZW1vdmVDb3VudCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVtb3ZlQ291bnQgPSAoc3RhcnRJZHgrcmVtb3ZlQ291bnQgPiBsZW5ndGggPyBsZW5ndGgtc3RhcnRJZHggOiByZW1vdmVDb3VudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydElkeCwgbGVuID0gbGVuZ3RoLXJlbW92ZUNvdW50OyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyLmxlbmd0aCA9IGxlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge30sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge31cbn07XG4iLCIvKipcbiAqIE1peGlucyBmdW5jdGlvbmFsaXR5IHRvIG1ha2UgYW4gb2JqZWN0IGhhdmUgXCJwbHVnaW5zXCIuXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS51dGlsc1xuICogQHBhcmFtIG9iaiB7b2JqZWN0fSBUaGUgb2JqZWN0IHRvIG1peCBpbnRvLlxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgcGx1Z2luVGFyZ2V0Lm1peGluKE15T2JqZWN0KTtcbiAqL1xuZnVuY3Rpb24gcGx1Z2luVGFyZ2V0KG9iailcbntcbiAgICBvYmouX19wbHVnaW5zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcGx1Z2luIHRvIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHBsdWdpbk5hbWUge3N0cmluZ30gVGhlIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQuXG4gICAgICogQHBhcmFtIGN0b3Ige0Z1bmN0aW9ufSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBwbHVnaW4uXG4gICAgICovXG4gICAgb2JqLnJlZ2lzdGVyUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGN0b3IpXG4gICAge1xuICAgICAgICBvYmouX19wbHVnaW5zW3BsdWdpbk5hbWVdID0gY3RvcjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5pbml0UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLnBsdWdpbnMgfHwge307XG5cbiAgICAgICAgZm9yICh2YXIgbyBpbiBvYmouX19wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBuZXcgKG9iai5fX3BsdWdpbnNbb10pKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmRlc3Ryb3lQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGZvciAodmFyIG8gaW4gdGhpcy5wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG51bGw7XG4gICAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvKipcbiAgICAgKiBNaXhlcyBpbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGx1Z2luVGFyZ2V0IGludG8gYW5vdGhlciBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3Qge29iamVjdH0gVGhlIG9iaiB0byBtaXggaW50b1xuICAgICAqL1xuICAgIG1peGluOiBmdW5jdGlvbiBtaXhpbihvYmopXG4gICAge1xuICAgICAgICBwbHVnaW5UYXJnZXQob2JqKTtcbiAgICB9XG59O1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKSxcbiAgICBtZXNoID0gcmVxdWlyZSgnLi9tZXNoJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi9leHRyYXMnKSxcbiAgICBmaWx0ZXJzID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgU3ByaXRlQmF0Y2hcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkuUGFydGljbGVDb250YWluZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlQmF0Y2ggPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuJyk7XG59O1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIEFzc2V0TG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLmxvYWRlcnMuTG9hZGVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuQXNzZXRMb2FkZXIgPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy4nKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvcmUsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RhZ2VcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RhZ2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignWW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIFBJWEkgU3RhZ2UgYW55IG1vcmUsIHlvdSBjYW4gc2ltcGx5IHJlbmRlciBhbnkgY29udGFpbmVyLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgRGlzcGxheU9iamVjdENvbnRhaW5lclxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBEaXNwbGF5T2JqZWN0Q29udGFpbmVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Rpc3BsYXlPYmplY3RDb250YWluZXIgaGFzIGJlZW4gc2hvcnRlbmVkIHRvIENvbnRhaW5lciwgcGxlYXNlIHVzZSBDb250YWluZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdHJpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdHJpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgU3RyaXAgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBNZXNoIGFuZCBtb3ZlZCB0byBtZXNoLk1lc2gsIHBsZWFzZSB1c2UgbWVzaC5NZXNoIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guTWVzaDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFJvcGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLlJvcGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgUm9wZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgUm9wZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBtZXNoLlJvcGUsIHBsZWFzZSB1c2UgbWVzaC5Sb3BlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guUm9wZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIE1vdmllQ2xpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXBcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgTW92aWVDbGlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBNb3ZpZUNsaXAgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLk1vdmllQ2xpcCwgcGxlYXNlIHVzZSBleHRyYXMuTW92aWVDbGlwIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5Nb3ZpZUNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUaWxpbmdTcHJpdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRpbGluZ1Nwcml0ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGlsaW5nU3ByaXRlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5UaWxpbmdTcHJpdGUsIHBsZWFzZSB1c2UgZXh0cmFzLlRpbGluZ1Nwcml0ZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuVGlsaW5nU3ByaXRlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQml0bWFwVGV4dFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJpdG1hcFRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJpdG1hcFRleHQgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLkJpdG1hcFRleHQsIHBsZWFzZSB1c2UgZXh0cmFzLkJpdG1hcFRleHQgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLkJpdG1hcFRleHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBibGVuZE1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgYmxlbmRNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYmxlbmRNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBCTEVORF9NT0RFUywgcGxlYXNlIHVzZSBCTEVORF9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkJMRU5EX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2NhbGVNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIHNjYWxlTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHNjYWxlTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gU0NBTEVfTU9ERVMsIHBsZWFzZSB1c2UgU0NBTEVfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TQ0FMRV9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5CYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCYXNlVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuQmFzZVRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5UZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLlRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5UZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5UZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgbWF0aFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIG1hdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBtYXRoIG5hbWVzcGFjZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgYWNjZXNzIG1lbWJlcnMgYWxyZWFkeSBhY2Nlc3NpYmxlIG9uIFBJWEkuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBQSVhJLlNwcml0ZSNzZXRUZXh0dXJlXG4gKiBAc2VlIFBJWEkuU3ByaXRlI3RleHR1cmVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0dXJlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0dXJlIHByb3BlcnR5LCBlLmcgOiBzcHJpdGUudGV4dHVyZSA9IHRleHR1cmU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuZXh0cmFzLkJpdG1hcFRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteUJpdG1hcFRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15VGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFN0eWxlXG4gKiBAc2VlIFBJWEkuVGV4dCNzdHlsZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpXG57XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgIGNvbnNvbGUud2Fybignc2V0U3R5bGUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5LCBlLmcgOiBteVRleHQuc3R5bGUgPSBzdHlsZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAc2VlIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHR1cmUucHJvdG90eXBlLnNldEZyYW1lID0gZnVuY3Rpb24oZnJhbWUpXG57XG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIGNvbnNvbGUud2Fybignc2V0RnJhbWUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIGZyYW1lIHByb3BlcnR5LCBlLmcgOiBteVRleHR1cmUuZnJhbWUgPSBmcmFtZTsnKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpbHRlcnMsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkFic3RyYWN0RmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkFic3RyYWN0RmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEFic3RyYWN0RmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuQWJzdHJhY3RGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEFic3RyYWN0RmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQWJzdHJhY3RGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuRlhBQUZpbHRlclxuICAgICAqIEBzZWUgUElYSS5GWEFBRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEZYQUFGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5GWEFBRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBGWEFBRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuRlhBQUZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgU3ByaXRlTWFza0ZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIFNwcml0ZU1hc2tGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TcHJpdGVNYXNrRmlsdGVyO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS51dGlscy51dWlkXG4gKiBAc2VlIFBJWEkudXRpbHMudWlkXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gKi9cbmNvcmUudXRpbHMudXVpZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29uc29sZS53YXJuKCd1dGlscy51dWlkKCkgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB1dGlscy51aWQoKSBmcm9tIG5vdyBvbi4nKTtcbiAgICByZXR1cm4gY29yZS51dGlscy51aWQoKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIEJpdG1hcFRleHQgb2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0IHVzaW5nIGJpdG1hcCBmb250LiBUb1xuICogc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLCAnXFxyJyBvciAnXFxyXFxuJyBpbiB5b3VyIHN0cmluZy4gWW91IGNhbiBnZW5lcmF0ZSB0aGUgZm50IGZpbGVzIHVzaW5nOlxuICpcbiAqIEEgQml0bWFwVGV4dCBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGZvbnQgaXMgbG9hZGVkXG4gKlxuICogYGBganNcbiAqIC8vIGluIHRoaXMgY2FzZSB0aGUgZm9udCBpcyBpbiBhIGZpbGUgY2FsbGVkICdkZXN5cmVsLmZudCdcbiAqIHZhciBiaXRtYXBUZXh0ID0gbmV3IFBJWEkuZXh0cmFzLkJpdG1hcFRleHQoXCJ0ZXh0IHVzaW5nIGEgZmFuY3kgZm9udCFcIiwge2ZvbnQ6IFwiMzVweCBEZXN5cmVsXCIsIGFsaWduOiBcInJpZ2h0XCJ9KTtcbiAqIGBgYFxuICpcbiAqXG4gKiBodHRwOi8vd3d3LmFuZ2VsY29kZS5jb20vcHJvZHVjdHMvYm1mb250LyBmb3Igd2luZG93cyBvclxuICogaHR0cDovL3d3dy5ibWdseXBoLmNvbS8gZm9yIG1hYy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIHN0eWxlIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gc3R5bGUuZm9udCB7c3RyaW5nfG9iamVjdH0gVGhlIGZvbnQgZGVzY3JpcHRvciBmb3IgdGhlIG9iamVjdCwgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZyBvZiBmb3JtXG4gKiAgICAgIFwiMjRweCBGb250TmFtZVwiIG9yIFwiRm9udE5hbWVcIiBvciBhcyBhbiBvYmplY3Qgd2l0aCBleHBsaWNpdCBuYW1lL3NpemUgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5uYW1lXSB7c3RyaW5nfSBUaGUgYml0bWFwIGZvbnQgaWRcbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5zaXplXSB7bnVtYmVyfSBUaGUgc2l6ZSBvZiB0aGUgZm9udCBpbiBwaXhlbHMsIGUuZy4gMjRcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3RcbiAqICAgICAgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS50aW50PTB4RkZGRkZGXSB7bnVtYmVyfSBUaGUgdGludCBjb2xvclxuICovXG5mdW5jdGlvbiBCaXRtYXBUZXh0KHRleHQsIHN0eWxlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGxldHRlciBzcHJpdGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbHlwaHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mb250ID0ge1xuICAgICAgICB0aW50OiBzdHlsZS50aW50ICE9PSB1bmRlZmluZWQgPyBzdHlsZS50aW50IDogMHhGRkZGRkYsXG4gICAgICAgIGFsaWduOiBzdHlsZS5hbGlnbiB8fCAnbGVmdCcsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIHNpemU6IDBcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBmb250LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mb250ID0gc3R5bGUuZm9udDsgLy8gcnVuIGZvbnQgc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggd2lkdGggb2YgdGhpcyBiaXRtYXAgdGV4dCBpbiBwaXhlbHMuIElmIHRoZSB0ZXh0IHByb3ZpZGVkIGlzIGxvbmdlciB0aGFuIHRoZSB2YWx1ZSBwcm92aWRlZCwgbGluZSBicmVha3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoZSBsYXN0IHdoaXRlc3BhY2UuXG4gICAgICogRGlzYWJsZSBieSBzZXR0aW5nIHZhbHVlIHRvIDBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggbGluZSBoZWlnaHQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBUZXh0LCBpZTogd2hlbiB0cnlpbmcgdG8gdmVydGljYWxseSBhbGlnbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpcnR5IHN0YXRlIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkJpdG1hcFRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuQml0bWFwVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCaXRtYXBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCaXRtYXBUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRpbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC50aW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC50aW50ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCkgPyB2YWx1ZSA6IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdsZWZ0J1xuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGFsaWduOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQuYWxpZ247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LmFsaWduID0gdmFsdWUgfHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9udCBkZXNjcmlwdG9yIG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Rm9udH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBmb250OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWUuc2xpY2UoMSkuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gcGFyc2VJbnQodmFsdWVbMF0sIDEwKSA6IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicgPyB2YWx1ZS5zaXplIDogcGFyc2VJbnQodmFsdWUuc2l6ZSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGRhdGEgPSBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV07XG4gICAgdmFyIHBvcyA9IG5ldyBjb3JlLlBvaW50KCk7XG4gICAgdmFyIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgdmFyIGNoYXJzID0gW107XG4gICAgdmFyIGxhc3RMaW5lV2lkdGggPSAwO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBsaW5lV2lkdGhzID0gW107XG4gICAgdmFyIGxpbmUgPSAwO1xuICAgIHZhciBzY2FsZSA9IHRoaXMuX2ZvbnQuc2l6ZSAvIGRhdGEuc2l6ZTtcbiAgICB2YXIgbGFzdFNwYWNlID0gLTE7XG4gICAgdmFyIG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHQubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSB0aGlzLnRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgbGFzdFNwYWNlID0gLyhcXHMpLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpID8gaSA6IGxhc3RTcGFjZTtcblxuICAgICAgICBpZiAoLyg/OlxcclxcbnxcXHJ8XFxuKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RTcGFjZSAhPT0gLTEgJiYgdGhpcy5tYXhXaWR0aCA+IDAgJiYgcG9zLnggKiBzY2FsZSA+IHRoaXMubWF4V2lkdGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXMoY2hhcnMsIGxhc3RTcGFjZSwgaSAtIGxhc3RTcGFjZSk7XG4gICAgICAgICAgICBpID0gbGFzdFNwYWNlO1xuICAgICAgICAgICAgbGFzdFNwYWNlID0gLTE7XG5cbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFyRGF0YSA9IGRhdGEuY2hhcnNbY2hhckNvZGVdO1xuXG4gICAgICAgIGlmICghY2hhckRhdGEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZDaGFyQ29kZSAmJiBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJzLnB1c2goe3RleHR1cmU6Y2hhckRhdGEudGV4dHVyZSwgbGluZTogbGluZSwgY2hhckNvZGU6IGNoYXJDb2RlLCBwb3NpdGlvbjogbmV3IGNvcmUuUG9pbnQocG9zLnggKyBjaGFyRGF0YS54T2Zmc2V0LCBwb3MueSArIGNoYXJEYXRhLnlPZmZzZXQpfSk7XG4gICAgICAgIGxhc3RMaW5lV2lkdGggPSBwb3MueCArIChjaGFyRGF0YS50ZXh0dXJlLndpZHRoICsgY2hhckRhdGEueE9mZnNldCk7XG4gICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLnhBZHZhbmNlO1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgKGNoYXJEYXRhLnlPZmZzZXQgKyBjaGFyRGF0YS50ZXh0dXJlLmhlaWdodCkpO1xuICAgICAgICBwcmV2Q2hhckNvZGUgPSBjaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcblxuICAgIHZhciBsaW5lQWxpZ25PZmZzZXRzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IGxpbmU7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBhbGlnbk9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9mb250LmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZUFsaWduT2Zmc2V0cy5wdXNoKGFsaWduT2Zmc2V0KTtcbiAgICB9XG5cbiAgICB2YXIgbGVuQ2hhcnMgPSBjaGFycy5sZW5ndGg7XG4gICAgdmFyIHRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuQ2hhcnM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjID0gdGhpcy5fZ2x5cGhzW2ldOyAvLyBnZXQgdGhlIG5leHQgZ2x5cGggc3ByaXRlXG5cbiAgICAgICAgaWYgKGMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMudGV4dHVyZSA9IGNoYXJzW2ldLnRleHR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjID0gbmV3IGNvcmUuU3ByaXRlKGNoYXJzW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZ2x5cGhzLnB1c2goYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjLnBvc2l0aW9uLnggPSAoY2hhcnNbaV0ucG9zaXRpb24ueCArIGxpbmVBbGlnbk9mZnNldHNbY2hhcnNbaV0ubGluZV0pICogc2NhbGU7XG4gICAgICAgIGMucG9zaXRpb24ueSA9IGNoYXJzW2ldLnBvc2l0aW9uLnkgKiBzY2FsZTtcbiAgICAgICAgYy5zY2FsZS54ID0gYy5zY2FsZS55ID0gc2NhbGU7XG4gICAgICAgIGMudGludCA9IHRpbnQ7XG5cbiAgICAgICAgaWYgKCFjLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBjaGlsZHJlbi5cbiAgICBmb3IgKGkgPSBsZW5DaGFyczsgaSA8IHRoaXMuX2dseXBocy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5fZ2x5cGhzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHRXaWR0aCA9IG1heExpbmVXaWR0aCAqIHNjYWxlO1xuICAgIHRoaXMudGV4dEhlaWdodCA9IChwb3MueSArIGRhdGEubGluZUhlaWdodCkgKiBzY2FsZTtcbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSBtYXhMaW5lSGVpZ2h0ICogc2NhbGU7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvZiB0aGlzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0ZXh0IGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGdldExvY2FsQm91bmRzXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cblxuQml0bWFwVGV4dC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHJldHVybiBjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn07XG5cbkJpdG1hcFRleHQuZm9udHMgPSB7fTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgTW92aWVDbGlwIGlzIGEgc2ltcGxlIHdheSB0byBkaXNwbGF5IGFuIGFuaW1hdGlvbiBkZXBpY3RlZCBieSBhIGxpc3Qgb2YgdGV4dHVyZXMuXG4gKlxuICogYGBganNcbiAqIHZhciBhbGllbkltYWdlcyA9IFtcImltYWdlX3NlcXVlbmNlXzAxLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDIucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMy5wbmdcIixcImltYWdlX3NlcXVlbmNlXzA0LnBuZ1wiXTtcbiAqIHZhciB0ZXh0dXJlQXJyYXkgPSBbXTtcbiAqXG4gKiBmb3IgKHZhciBpPTA7IGkgPCA0OyBpKyspXG4gKiB7XG4gKiAgICAgIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZShhbGllbkltYWdlc1tpXSk7XG4gKiAgICAgIHRleHR1cmVBcnJheS5wdXNoKHRleHR1cmUpO1xuICogfTtcbiAqXG4gKiB2YXIgbWMgPSBuZXcgUElYSS5Nb3ZpZUNsaXAodGV4dHVyZUFycmF5KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmVzIHtQSVhJLlRleHR1cmVbXXxPYmplY3RbXX0gYW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuVGV4dHVyZX0gb3IgZnJhbWUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIGFuaW1hdGlvblxuICogQHBhcmFtIHRleHR1cmVzW10udGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUge0BsaW5rIFBJWEkuVGV4dHVyZX0gb2YgdGhlIGZyYW1lXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50aW1lIHtudW1iZXJ9IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWUgaW4gbXNcbiAqL1xuZnVuY3Rpb24gTW92aWVDbGlwKHRleHR1cmVzKVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZXNbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUgPyB0ZXh0dXJlc1swXSA6IHRleHR1cmVzWzBdLnRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVzID0gdGV4dHVyZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3BlZWQgdGhhdCB0aGUgTW92aWVDbGlwIHdpbGwgcGxheSBhdC4gSGlnaGVyIGlzIGZhc3RlciwgbG93ZXIgaXMgc2xvd2VyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIG1vdmllIGNsaXAgcmVwZWF0cyBhZnRlciBwbGF5aW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5sb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIE1vdmllQ2xpcCBmaW5pc2hlcyBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKi9cbiAgICB0aGlzLm9uQ29tcGxldGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRWxhcHNlZCB0aW1lIHNpbmNlIGFuaW1hdGlvbiBoYXMgYmVlbiBzdGFydGVkLCB1c2VkIGludGVybmFsbHkgdG8gZGlzcGxheSBjdXJyZW50IHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgTW92aWVDbGlwIGlzIGN1cnJlbnRseSBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTW92aWVDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcbk1vdmllQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNb3ZpZUNsaXA7XG5tb2R1bGUuZXhwb3J0cyA9IE1vdmllQ2xpcDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTW92aWVDbGlwLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIHRvdGFsRnJhbWVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBNb3ZpZUNsaXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbnVtYmVyIG9mIHRleHR1cmVzXG4gICAgICogYXNzaWduZWQgdG8gdGhlIE1vdmllQ2xpcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0b3RhbEZyYW1lczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgdGV4dHVyZXMgdXNlZCBmb3IgdGhpcyBNb3ZpZUNsaXBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVtdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICpcbiAgICAgKi9cbiAgICB0ZXh0dXJlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzLnB1c2godmFsdWVbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucy5wdXNoKHZhbHVlW2ldLnRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAqIFRoZSBNb3ZpZUNsaXBzIGN1cnJlbnQgZnJhbWUgaW5kZXhcbiAgICAqXG4gICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICogQHJlYWRvbmx5XG4gICAgKi9cbiAgICBjdXJyZW50RnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSkgJSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lIDwgMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUgKz0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGcmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBQbGF5cyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKHRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBnb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RvcCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRTdG9wID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG59O1xuXG4vKipcbiAqIEdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZSBhbmQgYmVnaW5zIHBsYXlpbmcgdGhlIE1vdmllQ2xpcFxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdGFydCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRQbGF5ID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLnBsYXkoKTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqIEBwcml2YXRlXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB2YXIgZWxhcHNlZCA9IHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZHVyYXRpb25zICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGxhZyA9IHRoaXMuX2N1cnJlbnRUaW1lICUgMSAqIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG5cbiAgICAgICAgbGFnICs9IGVsYXBzZWQgLyA2MCAqIDEwMDA7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA8IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lLS07XG4gICAgICAgICAgICBsYWcgKz0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWduID0gTWF0aC5zaWduKHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPj0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGFnIC09IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0gKiBzaWduO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gc2lnbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGxhZyAvIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGVsYXBzZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lIDwgMCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCgwKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VGltZSA+PSB0aGlzLl90ZXh0dXJlcy5sZW5ndGggJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AodGhpcy5fdGV4dHVyZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG5cbn07XG5cbi8qXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBkZXN0cm95cyBpdFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCApXG57XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGZyYW1lIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgZnJhbWVzIGlkcyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUZyYW1lcyA9IGZ1bmN0aW9uIChmcmFtZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tRnJhbWUoZnJhbWVzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBpbWFnZSB1cmxzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tSW1hZ2VzID0gZnVuY3Rpb24gKGltYWdlcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59OyIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIC8vIGEgc3ByaXRlIHVzZSBkZm9yIHJlbmRlcmluZyB0ZXh0dXJlcy4uXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICBDYW52YXNUaW50ZXIgPSByZXF1aXJlKCcuLi9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyk7XG5cbi8qKlxuICogQSB0aWxpbmcgc3ByaXRlIGlzIGEgZmFzdCB3YXkgb2YgcmVuZGVyaW5nIGEgdGlsaW5nIGltYWdlXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZSB7VGV4dHVyZX0gdGhlIHRleHR1cmUgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gVGlsaW5nU3ByaXRlKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsaW5nIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVNjYWxlID0gbmV3IGNvcmUuUG9pbnQoMSwxKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIG9mZnNldCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG5ldyBjb3JlLlBvaW50KDAsMCk7XG5cbiAgICAvLy8vLyBwcml2YXRlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2l0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBuZXcgY29yZS5UZXh0dXJlVXZzKCk7XG5cbiAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gbnVsbDtcblxuICAgIC8vVE9ETyBtb3ZlLi5cbiAgICB0aGlzLnNoYWRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKFxuXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVUcmFuc2Zvcm07JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnICAgY29vcmQgLT0gdVRyYW5zZm9ybS54eTsnLFxuICAgICAgICAnICAgY29vcmQgLz0gdVRyYW5zZm9ybS56dzsnLFxuICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGNvb3JkOycsXG5cbiAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjMiB1UGl4ZWxTaXplOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gbW9kKHZUZXh0dXJlQ29vcmQsIHVGcmFtZS56dyk7JyxcbiAgICAgICAgJyAgIGNvb3JkID0gY2xhbXAoY29vcmQsIHVQaXhlbFNpemUsIHVGcmFtZS56dyAtIHVQaXhlbFNpemUpOycsXG4gICAgICAgICcgICBjb29yZCArPSB1RnJhbWUueHk7JyxcblxuICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gIHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQpICogdkNvbG9yIDsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1RnJhbWU6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1VHJhbnNmb3JtOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVBpeGVsU2l6ZSA6IHsgdHlwZSA6ICcyZnYnLCB2YWx1ZTogWzEsIDFdfVxuICAgICAgICAgICAgfVxuICAgICAgKTtcbn1cblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWxpbmdTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbGluZ1Nwcml0ZTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWxpbmdTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGlsaW5nU3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIHR3ZWFrIG91ciB0ZXh0dXJlIHRlbXBvcmFyaWx5Li5cbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZSB8fCAhdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZW1wVXZzID0gdGV4dHVyZS5fdXZzLFxuICAgICAgICB0ZW1wV2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgdGVtcEhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCxcbiAgICAgICAgdHcgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoLFxuICAgICAgICB0aCA9IHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGhpcy5fdXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMF0gPSAxLjAvdHc7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVsxXSA9IDEuMC90aDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVswXSA9IHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzFdID0gdGVtcFV2cy55MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMl0gPSB0ZW1wVXZzLngxIC0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbM10gPSB0ZW1wVXZzLnkyIC0gdGVtcFV2cy55MDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMF0gPSAodGhpcy50aWxlUG9zaXRpb24ueCAlICh0ZW1wV2lkdGggKiB0aGlzLnRpbGVTY2FsZS54KSkgLyB0aGlzLl93aWR0aDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzFdID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgJSAodGVtcEhlaWdodCAqIHRoaXMudGlsZVNjYWxlLnkpKSAvIHRoaXMuX2hlaWdodDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzJdID0gKCB0dyAvIHRoaXMuX3dpZHRoICkgKiB0aGlzLnRpbGVTY2FsZS54O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbM10gPSAoIHRoIC8gdGhpcy5faGVpZ2h0ICkgKiB0aGlzLnRpbGVTY2FsZS55O1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRlbXBVdnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0ZW1wV2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGVtcEhlaWdodDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZiAoIXRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQsXG4gICAgICAgIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICBiYXNlVGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIG1vZFggPSAodGhpcy50aWxlUG9zaXRpb24ueCAvIHRoaXMudGlsZVNjYWxlLngpICUgdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIG1vZFkgPSAodGhpcy50aWxlUG9zaXRpb24ueSAvIHRoaXMudGlsZVNjYWxlLnkpICUgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuXG4gICAgLy8gY3JlYXRlIGEgbmljZSBzaGlueSBwYXR0ZXJuIVxuICAgIC8vIFRPRE8gdGhpcyBuZWVkcyB0byBiZSByZWZyZXNoZWQgaWYgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICBpZighdGhpcy5fY2FudmFzUGF0dGVybilcbiAgICB7XG4gICAgICAgIC8vIGN1dCBhbiBvYmplY3QgZnJvbSBhIHNwcml0ZXNoZWV0Li5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgY29yZS5DYW52YXNCdWZmZXIodGV4dHVyZS5fZnJhbWUud2lkdGgsIHRleHR1cmUuX2ZyYW1lLmhlaWdodCk7XG5cbiAgICAgICAgLy8gVGludCB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMudGludGVkVGV4dHVyZSwgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKGJhc2VUZXh0dXJlLnNvdXJjZSwgLXRleHR1cmUuX2ZyYW1lLngsIC10ZXh0dXJlLl9mcmFtZS55KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gdGVtcENhbnZhcy5jb250ZXh0LmNyZWF0ZVBhdHRlcm4oIHRlbXBDYW52YXMuY2FudmFzLCAncmVwZWF0JyApO1xuICAgIH1cblxuICAgIC8vIHNldCBjb250ZXh0IHN0YXRlLi5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvbik7XG5cbiAgICAvLyBUT0RPIC0gdGhpcyBzaG91bGQgYmUgcm9sbGVkIGludG8gdGhlIHNldFRyYW5zZm9ybSBhYm92ZS4uXG4gICAgY29udGV4dC5zY2FsZSh0aGlzLnRpbGVTY2FsZS54LHRoaXMudGlsZVNjYWxlLnkpO1xuXG4gICAgY29udGV4dC50cmFuc2xhdGUobW9kWCArICh0aGlzLmFuY2hvci54ICogLXRoaXMuX3dpZHRoICksXG4gICAgICAgICAgICAgICAgICAgICAgbW9kWSArICh0aGlzLmFuY2hvci55ICogLXRoaXMuX2hlaWdodCkpO1xuXG4gICAgLy8gY2hlY2sgYmxlbmQgbW9kZVxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vIGZpbGwgdGhlIHBhdHRlcm4hXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9jYW52YXNQYXR0ZXJuO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoLW1vZFgsXG4gICAgICAgICAgICAgICAgICAgICAtbW9kWSxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoIC8gdGhpcy50aWxlU2NhbGUueCxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCAvIHRoaXMudGlsZVNjYWxlLnkpO1xuXG5cbiAgICAvL1RPRE8gLSBwcmV0dHkgc3VyZSB0aGlzIGNhbiBiZSBkZWxldGVkLi4uXG4gICAgLy9jb250ZXh0LnRyYW5zbGF0ZSgtdGhpcy50aWxlUG9zaXRpb24ueCArICh0aGlzLmFuY2hvci54ICogdGhpcy5fd2lkdGgpLCAtdGhpcy50aWxlUG9zaXRpb24ueSArICh0aGlzLmFuY2hvci55ICogdGhpcy5faGVpZ2h0KSk7XG4gICAgLy9jb250ZXh0LnNjYWxlKDEgLyB0aGlzLnRpbGVTY2FsZS54LCAxIC8gdGhpcy50aWxlU2NhbGUueSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIHNwcml0ZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG5cbiAgICB2YXIgdzAgPSB3aWR0aCAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgIHZhciB3MSA9IHdpZHRoICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICB2YXIgaDAgPSBoZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICB2YXIgaDEgPSBoZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcblxuICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIG1pblgsXG4gICAgICAgIG1heFgsXG4gICAgICAgIG1pblksXG4gICAgICAgIG1heFk7XG5cbiAgICBtaW5YID0geDE7XG4gICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICBtaW5ZID0geTE7XG4gICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICBtYXhYID0geDE7XG4gICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICBtYXhZID0geTE7XG4gICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgYm91bmRzLnggPSBtaW5YO1xuICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcblxuICAgIHJldHVybiBib3VuZHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIGNoZWNrXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRpbGluZyBzcHJpdGVcbiAqXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWxlU2NhbGUgPSBudWxsO1xuICAgIHRoaXMuX3RpbGVTY2FsZU9mZnNldCA9IG51bGw7XG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHRpbGluZyBzcHJpdGUgdGhhdCB3aWxsIHVzZSBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZCx3aWR0aCxoZWlnaHQpXG57XG4gICAgdmFyIHRleHR1cmUgPSBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSAnICsgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUodGV4dHVyZSx3aWR0aCxoZWlnaHQpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCB3aWR0aCwgaGVpZ2h0LCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSksd2lkdGgsaGVpZ2h0KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gY29yZS5EaXNwbGF5T2JqZWN0LFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwID0gZmFsc2U7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSBudWxsO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsSGl0VGVzdCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxEZXN0cm95ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGlzIGRpc3BsYXkgb2JqZWN0IHRvIGJlIGNhY2hlZCBhcyBhIGJpdG1hcC5cbiAgICAgKiBUaGlzIGJhc2ljYWxseSB0YWtlcyBhIHNuYXAgc2hvdCBvZiB0aGUgZGlzcGxheSBvYmplY3QgYXMgaXQgaXMgYXQgdGhhdCBtb21lbnQuIEl0IGNhbiBwcm92aWRlIGEgcGVyZm9ybWFuY2UgYmVuZWZpdCBmb3IgY29tcGxleCBzdGF0aWMgZGlzcGxheU9iamVjdHMuXG4gICAgICogVG8gcmVtb3ZlIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnZmFsc2UnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgY2FjaGVBc0JpdG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZUFzQml0bWFwO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXAgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVBc0JpdG1hcCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IHRoaXMucmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSB0aGlzLnJlbmRlckNhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gdGhpcy51cGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHMgPSB0aGlzLmdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSA9IHRoaXMuZGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludCA9IHRoaXMuY29udGFpbnNQb2ludDtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX2NhY2hlQXNCaXRtYXBEZXN0cm95O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJvdW5kcyA9IHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fb3JpZ2luYWxEZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIFdlYkdMXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlciggdGhpcy5fY2FjaGVkU3ByaXRlICk7XG59O1xuXG4vKipcbiogUHJlcGFyZXMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZmlyc3Qgd2UgZmx1c2ggYW55dGhpbmcgbGVmdCBpbiB0aGUgcmVuZGVyZXIgKG90aGVyd2lzZSBpdCB3b3VsZCBnZXQgcmVuZGVyZWQgdG8gdGhlIGNhY2hlZCB0ZXh0dXJlKVxuICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuICAgIC8vdGhpcy5maWx0ZXJzPSBbXTtcbiAgICAvLyBuZXh0IHdlIGZpbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHVudHJhbnNmb3JtZWQgb2JqZWN0XG4gICAgLy8gdGhpcyBmdW5jdGlvbiBhbHNvIGNhbGxzIHVwZGF0ZXRyYW5zZm9ybSBvbiBhbGwgaXRzIGNoaWxkcmVuIGFzIHBhcnQgb2YgdGhlIG1lYXN1cmluZy4gVGhpcyBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgdHJhbnNmb3JtIGFnYWluIGluIHRoaXMgZnVuY3Rpb25cbiAgICAvLyBUT0RPIHBhc3MgYW4gb2JqZWN0IHRvIGNsb25lIHRvbz8gc2F2ZXMgaGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBvbmUgZWFjaCB0aW1lIVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuY2xvbmUoKTtcblxuICAgIC8vIGFkZCBzb21lIHBhZGRpbmchXG4gICAgaWYodGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5fZmlsdGVyc1swXS5wYWRkaW5nO1xuICAgICAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgICAgICBib3VuZHMueSAtPSBwYWRkaW5nO1xuXG4gICAgICAgIGJvdW5kcy53aWR0aCArPSBwYWRkaW5nICogMjtcbiAgICAgICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcbiAgICB9XG5cbiAgICAvLyBmb3Igbm93IHdlIGNhY2hlIHRoZSBjdXJyZW50IHJlbmRlclRhcmdldCB0aGF0IHRoZSB3ZWJHTCByZW5kZXJlciBpcyBjdXJyZW50bHkgdXNpbmcuXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBtb3JlIGVsZWdlbnQuLlxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0O1xuICAgIC8vIFdlIGFsc28gc3RvcmUgdGhlIGZpbHRlciBzdGFjayAtIEkgd2lsbCBkZWZpbml0ZWx5IGxvb2sgdG8gY2hhbmdlIGhvdyB0aGlzIHdvcmtzIGEgbGl0dGxlIGxhdGVyIGRvd24gdGhlIGxpbmUuXG4gICAgdmFyIHN0YWNrID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjaztcblxuICAgIC8vIHRoaXMgcmVuZGVyVGV4dHVyZSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlZCBEaXNwbGF5T2JqZWN0XG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cblxuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjYWNoZWRSZW5kZXJUYXJnZXQpO1xuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2sgPSBzdGFjaztcblxuICAgIHRoaXMucmVuZGVyV2ViR0wgICAgID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgICAgICAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyByZXN0b3JlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIGNhY2hlZCBzcHJpdGUgdG8gYXZvaWQgdGhlIG5hc3R5IGZsaWNrZXIuLlxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAvLyBtYXAgdGhlIGhpdCB0ZXN0Li5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBjYW52YXNcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzKCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbn07XG5cbi8vVE9ETyB0aGlzIGNhbiBiZSB0aGUgc2FtZSBhcyB0aGUgd2ViR0wgdmVyaXNvbi4uIHdpbGwgbmVlZCB0byBkbyBhIGxpdHRsZSB0d2Vha2luZyBmaXJzdCB0aG91Z2guLlxuLyoqXG4qIFByZXBhcmVzIHRoZSBDYW52YXMgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vZ2V0IGJvdW5kcyBhY3R1YWxseSB0cmFuc2Zvcm1zIHRoZSBvYmplY3QgZm9yIHVzIGFscmVhZHkhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5jb250ZXh0ID0gY2FjaGVkUmVuZGVyVGFyZ2V0O1xuXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBDYWxjdWxhdGVzIHRoZSBib3VuZHMgb2YgdGhlIGNhY2hlZCBzcHJpdGVcbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZ2V0Q2FjaGVkQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNwcml0ZS5nZXRCb3VuZHMoKTtcbn07XG5cbi8qKlxuKiBEZXN0cm95cyB0aGUgY2FjaGVkIHNwcml0ZS5cbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fdGV4dHVyZS5kZXN0cm95KCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwRGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jYWNoZUFzQml0bWFwID0gZmFsc2U7XG4gICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95KCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIG9iamVjdC5cbiAqXG4gKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICogQG1lbWJlciB7c3RyaW5nfVxuICovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZGlzcGxheSBvYmplY3QgaW4gdGhlIGNvbnRhaW5lclxuKlxuKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4qIEBwYXJhbSBuYW1lIHtzdHJpbmd9IGluc3RhbmNlIG5hbWVcbiogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuKi9cbmNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4qXG4qIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4qIEBwYXJhbSBwb2ludCB7UG9pbnR9IHRoZSBwb2ludCB0byB3cml0ZSB0aGUgZ2xvYmFsIHZhbHVlIHRvLiBJZiBudWxsIGEgbmV3IHBvaW50IHdpbGwgYmUgcmV0dXJuZWRcbiogQHJldHVybiB7UG9pbnR9XG4qL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRHbG9iYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb2ludClcbntcbiAgICBwb2ludCA9IHBvaW50IHx8IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICBpZih0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHBvaW50LnggPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICBwb2ludC55ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG9pbnQueCA9IHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMucG9zaXRpb24ueTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG5yZXF1aXJlKCcuL2NhY2hlQXNCaXRtYXAnKTtcbnJlcXVpcmUoJy4vZ2V0Q2hpbGRCeU5hbWUnKTtcbnJlcXVpcmUoJy4vZ2V0R2xvYmFsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZXh0cmFzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1vdmllQ2xpcDogICAgICByZXF1aXJlKCcuL01vdmllQ2xpcCcpLFxuICAgIFRpbGluZ1Nwcml0ZTogICByZXF1aXJlKCcuL1RpbGluZ1Nwcml0ZScpLFxuICAgIEJpdG1hcFRleHQ6ICAgICByZXF1aXJlKCcuL0JpdG1hcFRleHQnKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vLyBUT0RPIChjZW5nbGVyKSAtIFRoZSBZIGlzIGZsaXBwZWQgaW4gdGhpcyBzaGFkZXIgZm9yIHNvbWUgcmVhc29uLlxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBzaGFkZXIgOiBodHRwczovL3d3dy5zaGFkZXJ0b3kuY29tL3ZpZXcvbHNzR0RqIGJ5IEBtb3ZBWDEzaFxuICovXG5cbi8qKlxuICogQW4gQVNDSUkgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBBc2NpaUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgY2hhcmFjdGVyKGZsb2F0IG4sIHZlYzIgcClcXG57XFxuICAgIHAgPSBmbG9vcihwKnZlYzIoNC4wLCAtNC4wKSArIDIuNSk7XFxuICAgIGlmIChjbGFtcChwLngsIDAuMCwgNC4wKSA9PSBwLnggJiYgY2xhbXAocC55LCAwLjAsIDQuMCkgPT0gcC55KVxcbiAgICB7XFxuICAgICAgICBpZiAoaW50KG1vZChuL2V4cDIocC54ICsgNS4wKnAueSksIDIuMCkpID09IDEpIHJldHVybiAxLjA7XFxuICAgIH1cXG4gICAgcmV0dXJuIDAuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHk7XFxuXFxuICAgIHZlYzMgY29sID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBmbG9vciggdXYgLyBwaXhlbFNpemUgKSAqIHBpeGVsU2l6ZSAvIGRpbWVuc2lvbnMueHkpLnJnYjtcXG5cXG4gICAgZmxvYXQgZ3JheSA9IChjb2wuciArIGNvbC5nICsgY29sLmIpIC8gMy4wO1xcblxcbiAgICBmbG9hdCBuID0gIDY1NTM2LjA7ICAgICAgICAgICAgIC8vIC5cXG4gICAgaWYgKGdyYXkgPiAwLjIpIG4gPSA2NTYwMC4wOyAgICAvLyA6XFxuICAgIGlmIChncmF5ID4gMC4zKSBuID0gMzMyNzcyLjA7ICAgLy8gKlxcbiAgICBpZiAoZ3JheSA+IDAuNCkgbiA9IDE1MjU1MDg2LjA7IC8vIG9cXG4gICAgaWYgKGdyYXkgPiAwLjUpIG4gPSAyMzM4NTE2NC4wOyAvLyAmXFxuICAgIGlmIChncmF5ID4gMC42KSBuID0gMTUyNTIwMTQuMDsgLy8gOFxcbiAgICBpZiAoZ3JheSA+IDAuNykgbiA9IDEzMTk5NDUyLjA7IC8vIEBcXG4gICAgaWYgKGdyYXkgPiAwLjgpIG4gPSAxMTUxMjgxMC4wOyAvLyAjXFxuXFxuICAgIHZlYzIgcCA9IG1vZCggdXYgLyAoIHBpeGVsU2l6ZSAqIDAuNSApLCAyLjApIC0gdmVjMigxLjApO1xcbiAgICBjb2wgPSBjb2wgKiBjaGFyYWN0ZXIobiwgcCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sLCAxLjApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDggfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQXNjaWlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Bc2NpaUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc2NpaUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQXNjaWlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFzY2lpRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBzaXplIHVzZWQgYnkgdGhlIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkFzY2lpRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmxvb21GaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmxvb21GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xufVxuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsb29tRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb29tRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbG9vbUZpbHRlcjtcblxuQmxvb21GaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLlNDUkVFTik7XG5cbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvb21GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuXG4vKipcbiAqIFRoZSBCbHVyRGlyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvd2FyZCBhIGRpcmVjdGlvbiB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWFxuICogQHBhcmFtIHtudW1iZXJ9IGRpcllcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckRpckZpbHRlcihkaXJYLCBkaXJZKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBmbG9hdCBkaXJYO1xcbnVuaWZvcm0gZmxvYXQgZGlyWTtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1swXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDEyICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDEyICogc3RyZW5ndGgpICogZGlyWSApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkgKiAwLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkgKiAwLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkgKiAwLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pICogMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBkaXJYOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJYIHx8IDAgfSxcbiAgICAgICAgICAgIGRpclk6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclkgfHwgMCB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclggPSBkaXJYIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclkgPSBkaXJZIHx8IDA7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckRpckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckRpckZpbHRlcjtcblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKSB7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmICh0aGlzLnBhc3NlcyA9PT0gMSkge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0yOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gKHRoaXMucGFzc2VzKyhpKjIpKSAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckRpckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJYO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJYLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsdXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcbn1cblxuQmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckZpbHRlcjtcblxuQmx1ckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcGFzc2VzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzID0gdGhpcy5ibHVyWUZpbHRlci5wYXNzZXMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWEZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1clhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1clhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1clhGaWx0ZXI7XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1clhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSAgTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllGaWx0ZXI7XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSBNYXRoLmFicyh0aGlzLnN0cmVuZ3RoKSAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgU21hcnQgQmx1ciBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNtYXJ0Qmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAqIHBlcmNlbnQpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICBkZWx0YTogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjEsIHk6IDAuMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTbWFydEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNtYXJ0Qmx1ckZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDV4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogYGBganNcbiAqICB2YXIgY29sb3JNYXRyaXggPSBuZXcgUElYSS5Db2xvck1hdHJpeEZpbHRlcigpO1xuICogIGNvbnRhaW5lci5maWx0ZXJzID0gW2NvbG9yTWF0cml4XTtcbiAqICBjb2xvck1hdHJpeC5jb250cmFzdCgyKTtcbiAqIGBgYFxuICogQGF1dGhvciBDbMOpbWVudCBDaGVuZWJhdWx0IDxjbGVtZW50QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvck1hdHJpeEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBtWzI1XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuXFxuICAgIHZlYzQgYyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yID0gKG1bMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gbVs0XTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLmcgPSAobVs1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSBtWzldO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmIgPSAobVsxMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gbVsxNF07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYSA9IChtWzE1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSBtWzE5XTtcXG5cXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJzFmdicsIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yTWF0cml4RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvck1hdHJpeEZpbHRlcjtcblxuXG4vKipcbiAqIFRyYW5zZm9ybXMgY3VycmVudCBtYXRyaXggYW5kIHNldCB0aGUgbmV3IG9uZVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gaWYgdHJ1ZSwgY3VycmVudCBtYXRyaXggYW5kIG1hdHJpeCBhcmUgbXVsdGlwbGllZC4gSWYgZmFsc2UsIGp1c3Qgc2V0IHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIEBwYXJhbSBtYXRyaXhcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9sb2FkTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgbXVsdGlwbHkpXG57XG4gICAgbXVsdGlwbHkgPSAhIW11bHRpcGx5O1xuXG4gICAgdmFyIG5ld01hdHJpeCA9IG1hdHJpeDtcblxuICAgIGlmIChtdWx0aXBseSkge1xuICAgICAgICB0aGlzLl9tdWx0aXBseShuZXdNYXRyaXgsIHRoaXMudW5pZm9ybXMubS52YWx1ZSwgbWF0cml4KTtcbiAgICAgICAgbmV3TWF0cml4ID0gdGhpcy5fY29sb3JNYXRyaXgobmV3TWF0cml4KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBtYXRyaXhcbiAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSBuZXdNYXRyaXg7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDUnc1xuICpcbiAqIEBwYXJhbSBvdXQge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSBhIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0gYiB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIG91dCB7bnVtYmVyW119IChtYXQgNXg0KVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYilcbntcblxuICAgIC8vIFJlZCBDaGFubmVsXG4gICAgb3V0WzBdID0gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYls1XSkgKyAoYVsyXSAqIGJbMTBdKSArIChhWzNdICogYlsxNV0pO1xuICAgIG91dFsxXSA9IChhWzBdICogYlsxXSkgKyAoYVsxXSAqIGJbNl0pICsgKGFbMl0gKiBiWzExXSkgKyAoYVszXSAqIGJbMTZdKTtcbiAgICBvdXRbMl0gPSAoYVswXSAqIGJbMl0pICsgKGFbMV0gKiBiWzddKSArIChhWzJdICogYlsxMl0pICsgKGFbM10gKiBiWzE3XSk7XG4gICAgb3V0WzNdID0gKGFbMF0gKiBiWzNdKSArIChhWzFdICogYls4XSkgKyAoYVsyXSAqIGJbMTNdKSArIChhWzNdICogYlsxOF0pO1xuICAgIG91dFs0XSA9IChhWzBdICogYls0XSkgKyAoYVsxXSAqIGJbOV0pICsgKGFbMl0gKiBiWzE0XSkgKyAoYVszXSAqIGJbMTldKTtcblxuICAgIC8vIEdyZWVuIENoYW5uZWxcbiAgICBvdXRbNV0gPSAoYVs1XSAqIGJbMF0pICsgKGFbNl0gKiBiWzVdKSArIChhWzddICogYlsxMF0pICsgKGFbOF0gKiBiWzE1XSk7XG4gICAgb3V0WzZdID0gKGFbNV0gKiBiWzFdKSArIChhWzZdICogYls2XSkgKyAoYVs3XSAqIGJbMTFdKSArIChhWzhdICogYlsxNl0pO1xuICAgIG91dFs3XSA9IChhWzVdICogYlsyXSkgKyAoYVs2XSAqIGJbN10pICsgKGFbN10gKiBiWzEyXSkgKyAoYVs4XSAqIGJbMTddKTtcbiAgICBvdXRbOF0gPSAoYVs1XSAqIGJbM10pICsgKGFbNl0gKiBiWzhdKSArIChhWzddICogYlsxM10pICsgKGFbOF0gKiBiWzE4XSk7XG4gICAgb3V0WzldID0gKGFbNV0gKiBiWzRdKSArIChhWzZdICogYls5XSkgKyAoYVs3XSAqIGJbMTRdKSArIChhWzhdICogYlsxOV0pO1xuXG4gICAgLy8gQmx1ZSBDaGFubmVsXG4gICAgb3V0WzEwXSA9IChhWzEwXSAqIGJbMF0pICsgKGFbMTFdICogYls1XSkgKyAoYVsxMl0gKiBiWzEwXSkgKyAoYVsxM10gKiBiWzE1XSk7XG4gICAgb3V0WzExXSA9IChhWzEwXSAqIGJbMV0pICsgKGFbMTFdICogYls2XSkgKyAoYVsxMl0gKiBiWzExXSkgKyAoYVsxM10gKiBiWzE2XSk7XG4gICAgb3V0WzEyXSA9IChhWzEwXSAqIGJbMl0pICsgKGFbMTFdICogYls3XSkgKyAoYVsxMl0gKiBiWzEyXSkgKyAoYVsxM10gKiBiWzE3XSk7XG4gICAgb3V0WzEzXSA9IChhWzEwXSAqIGJbM10pICsgKGFbMTFdICogYls4XSkgKyAoYVsxMl0gKiBiWzEzXSkgKyAoYVsxM10gKiBiWzE4XSk7XG4gICAgb3V0WzE0XSA9IChhWzEwXSAqIGJbNF0pICsgKGFbMTFdICogYls5XSkgKyAoYVsxMl0gKiBiWzE0XSkgKyAoYVsxM10gKiBiWzE5XSk7XG5cbiAgICAvLyBBbHBoYSBDaGFubmVsXG4gICAgb3V0WzE1XSA9IChhWzE1XSAqIGJbMF0pICsgKGFbMTZdICogYls1XSkgKyAoYVsxN10gKiBiWzEwXSkgKyAoYVsxOF0gKiBiWzE1XSk7XG4gICAgb3V0WzE2XSA9IChhWzE1XSAqIGJbMV0pICsgKGFbMTZdICogYls2XSkgKyAoYVsxN10gKiBiWzExXSkgKyAoYVsxOF0gKiBiWzE2XSk7XG4gICAgb3V0WzE3XSA9IChhWzE1XSAqIGJbMl0pICsgKGFbMTZdICogYls3XSkgKyAoYVsxN10gKiBiWzEyXSkgKyAoYVsxOF0gKiBiWzE3XSk7XG4gICAgb3V0WzE4XSA9IChhWzE1XSAqIGJbM10pICsgKGFbMTZdICogYls4XSkgKyAoYVsxN10gKiBiWzEzXSkgKyAoYVsxOF0gKiBiWzE4XSk7XG4gICAgb3V0WzE5XSA9IChhWzE1XSAqIGJbNF0pICsgKGFbMTZdICogYls5XSkgKyAoYVsxN10gKiBiWzE0XSkgKyAoYVsxOF0gKiBiWzE5XSk7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHJldHVybiBtIHtudW1iZXJbXX0gKG1hdCA1eDQpIHdpdGggYWxsIHZhbHVlcyBiZXR3ZWVuIDAtMVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2NvbG9yTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICAvLyBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gICAgdmFyIG0gPSBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCk7XG4gICAgbVs0XSAvPSAyNTU7XG4gICAgbVs5XSAvPSAyNTU7XG4gICAgbVsxNF0gLz0gMjU1O1xuICAgIG1bMTldIC89IDI1NTtcblxuICAgIHJldHVybiBtO1xufTtcblxuLyoqXG4gKiBBZGp1c3RzIGJyaWdodG5lc3NcbiAqXG4gKiBAcGFyYW0gYiB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgYnJpZ3RobmVzcyAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icmlnaHRuZXNzID0gZnVuY3Rpb24gKGIsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGIsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIGIsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIGIsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXRyaWNlcyBpbiBncmV5IHNjYWxlc1xuICpcbiAqIEBwYXJhbSBzY2FsZSB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgZ3JleSAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG4vL0FtZXJpY2FuaXplZCBhbGlhc1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyYXlzY2FsZSA9IENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGU7XG5cbi8qKlxuICogU2V0IHRoZSBibGFjayBhbmQgd2hpdGUgbWF0cmljZVxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJsYWNrQW5kV2hpdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGh1ZSBwcm9wZXJ0eSBvZiB0aGUgY29sb3JcbiAqXG4gKiBAcGFyYW0gcm90YXRpb24ge251bWJlcn0gaW4gZGVncmVlc1xuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmh1ZSA9IGZ1bmN0aW9uIChyb3RhdGlvbiwgbXVsdGlwbHkpXG57XG4gICAgcm90YXRpb24gPSAocm90YXRpb24gfHwgMCkgLyAxODAgKiBNYXRoLlBJO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyhyb3RhdGlvbiksXG4gICAgICAgIHNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcblxuICAgIC8vIGx1bWluYW5jZVJlZCwgbHVtaW5hbmNlR3JlZW4sIGx1bWluYW5jZUJsdWVcbiAgICB2YXIgbHVtUiA9IDAuMjEzLCAvLyBvciAwLjMwODZcbiAgICAgICAgbHVtRyA9IDAuNzE1LCAvLyBvciAwLjYwOTRcbiAgICAgICAgbHVtQiA9IDAuMDcyOyAvLyBvciAwLjA4MjBcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoMSAtIGx1bVIpICsgc2luICogKC1sdW1SKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAoLWx1bUcpLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgxIC0gbHVtQiksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKDAuMTQzKSwgbHVtRyArIGNvcyAqICgxIC0gbHVtRykgKyBzaW4gKiAoMC4xNDApLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgtMC4yODMpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgtKDEgLSBsdW1SKSksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKGx1bUcpLCBsdW1CICsgY29zICogKDEgLSBsdW1CKSArIHNpbiAqIChsdW1CKSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKipcbiAqIFNldCB0aGUgY29udHJhc3QgbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGRhcmsgYW5kIGJyaWdodFxuICogSW5jcmVhc2UgY29udHJhc3QgOiBzaGFkb3dzIGRhcmtlciBhbmQgaGlnaGxpZ2h0cyBicmlnaHRlclxuICogRGVjcmVhc2UgY29udHJhc3QgOiBicmluZyB0aGUgc2hhZG93cyB1cCBhbmQgdGhlIGhpZ2hsaWdodHMgZG93blxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdmFsdWUgb2YgdGhlIGNvbnRyYXN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29udHJhc3QgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgdiA9IChhbW91bnQgfHwgMCkgKyAxO1xuICAgIHZhciBvID0gLTEyOCAqICh2IC0gMSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB2LCAwLCAwLCAwLCBvLFxuICAgICAgICAwLCB2LCAwLCAwLCBvLFxuICAgICAgICAwLCAwLCB2LCAwLCBvLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc2F0dXJhdGlvbiBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gY29sb3JzXG4gKiBJbmNyZWFzZSBzYXR1cmF0aW9uIDogaW5jcmVhc2UgY29udHJhc3QsIGJyaWdodG5lc3MsIGFuZCBzaGFycG5lc3NcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgeCA9IChhbW91bnQgfHwgMCkgKiAyIC8gMyArIDE7XG4gICAgdmFyIHkgPSAoKHggLSAxKSAqIC0wLjUpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgeCwgeSwgeSwgMCwgMCxcbiAgICAgICAgeSwgeCwgeSwgMCwgMCxcbiAgICAgICAgeSwgeSwgeCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBEZXNhdHVyYXRlIGltYWdlIChyZW1vdmUgY29sb3IpXG4gKlxuICogQ2FsbCB0aGUgc2F0dXJhdGUgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHRoaXMuc2F0dXJhdGUoLTEpO1xufTtcblxuLyoqXG4gKiBOZWdhdGl2ZSBpbWFnZSAoaW52ZXJzZSBvZiBjbGFzc2ljIHJnYiBtYXRyaXgpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5lZ2F0aXZlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDEsIDEsIDAsIDAsXG4gICAgICAgIDEsIDAsIDEsIDAsIDAsXG4gICAgICAgIDEsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2VwaWEgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2VwaWEgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zOTMsIDAuNzY4OTk5OSwgMC4xODg5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4zNDksIDAuNjg1OTk5OSwgMC4xNjc5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4yNzIsIDAuNTMzOTk5OSwgMC4xMzA5OTk5OSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciBtb3Rpb24gcGljdHVyZSBwcm9jZXNzIGludmVudGVkIGluIDE5MTYgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRlY2huaWNvbG9yID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuOTEyNTI3Nzg5MTQ1NjA4MywgLTAuODU0NTM0NDk3Njk1MTY0NSwgLTAuMDkxNTU1MDg0ODI3NTU1ODUsIDAsIDExLjc5MzYwMzQzNDM3NzMzNyxcbiAgICAgICAgLTAuMzA4NzgzMzM4NTkyODA5NywgMS43NjU4OTA4NTU1NDU4NDI4LCAtMC4xMDYwMTc0MzA3NDcyMjI0NSwgMCwgLTcwLjM1MjA1MTYxNDYxMzk4LFxuICAgICAgICAtMC4yMzExMDMzNzc1NDg2MTYsIC0wLjc1MDE4OTkxOTc0NDAyMTIsIDEuODQ3NTk3ODE2MTA4MTg5LCAwLCAzMC45NTA5NDA4Njk0OTExMzgsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogUG9sYXJvaWQgZmlsdGVyXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnBvbGFyb2lkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuNDM4LCAtMC4wNjIsIC0wLjA2MiwgMCwgMCxcbiAgICAgICAgLTAuMTIyLCAxLjM3OCwgLTAuMTIyLCAwLCAwLFxuICAgICAgICAtMC4wMTYsIC0wLjAxNiwgMS40ODMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRmlsdGVyIHdobyB0cmFuc2Zvcm1zIDogUmVkIC0+IEJsdWUgYW5kIEJsdWUgLT4gUmVkXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRvQkdSID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgcmV2ZXJzYWwgZmlsbSBpbnRyb2R1Y2VkIGJ5IEVhc3RtYW4gS29kYWsgaW4gMTkzNS4gKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmtvZGFjaHJvbWUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS4xMjg1NTgyMzk2NTkzNTI1LCAtMC4zOTY3MzgyMjgzNjAxMzQ4LCAtMC4wMzk5MjU1OTE3MjkyMTc5MywgMCwgNjMuNzI5NTg3NjIxOTY1MDIsXG4gICAgICAgIC0wLjE2NDA0MzM5OTYyMjQ0NjE2LCAxLjA4MzUyNTE1NjYyOTEzMDQsIC0wLjA1NDk4ODA1MTE1NjMzMTMyLCAwLCAyNC43MzI0MDc4OTY3MDYyMDMsXG4gICAgICAgIC0wLjE2Nzg2MDEwNzA2MTU1NzYzLCAtMC41NjAzNDE2Mjc3Njk1MjQ4LCAxLjYwMTQ4NTA3NjE5NjQ5NDMsIDAsIDM1LjYyOTgyODA3NDYwOTQ2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEJyb3duIGRlbGljaW91cyBicm93bmkgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icm93bmkgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC41OTk3MDIzNDk4MTU5NzE1LCAwLjM0NTUzMjQzMDQ4MzkxMjYzLCAtMC4yNzA4Mjk4Njc0NTM4MDQyLCAwLCA0Ny40MzE5Mjg1NTYwMDg3MyxcbiAgICAgICAgLTAuMDM3NzAzMjQ5ODM3NzgzMTU3LCAwLjg2MDk1Nzc1ODc5OTI2NDEsIDAuMTUwNTk1NTIzODg0NTk5MTMsIDAsIC0zNi45Njg0MTQ5ODMxOTEyNyxcbiAgICAgICAgMC4yNDExMzYzNTEyODE1MzMzNSwgLTAuMDc0NDEwMzc5MDg0MjI0OTIsIDAuNDQ5NzIxODIwNjQ4NzcxNTMsIDAsIC03LjU2MjA3NTI3NzU5MTI4MyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFZpbnRhZ2UgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS52aW50YWdlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNjI3OTM0NTYzNTYwNTk5NCwgMC4zMjAyMTgzNDIwODE5MzY3LCAtMC4wMzk2NTQwODIxMTMxMjQ1MywgMCwgOS42NTEyODU4MzUyOTQxMjMsXG4gICAgICAgIDAuMDI1NzgzOTc3MDQ4MDg4NjgsIDAuNjQ0MTE4ODY0NDM3NDc3MSwgMC4wMzI1OTEyNzYxNjE0OTI5NCwgMCwgNy40NjI4MjkxNzY0NzA1OTEsXG4gICAgICAgIDAuMDQ2NjA1NTU1Njc4MjcxOSwgLTAuMDg1MTIzMjk4NzI0Nzg5MSwgMC41MjQxNjQ4MDE4NzAwNDY1LCAwLCA1LjE1OTE5MDU4ODIzNTI5NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGtpbmQgb2YgZ3JhZGllbnQgbWFwLCBidXQgZnVubnkgdG8gcGxheSB3aXRoIVxuICpcbiAqIEBwYXJhbSBkZXNhdHVyYXRpb24ge251bWJlcn1cbiAqIEBwYXJhbSB0b25lZCB7bnVtYmVyfVxuICogQHBhcmFtIGxpZ2h0Q29sb3Ige3N0cmluZ30gKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKiBAcGFyYW0gZGFya0NvbG9yIHtzdHJpbmd9ICAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29sb3JUb25lID0gZnVuY3Rpb24gKGRlc2F0dXJhdGlvbiwgdG9uZWQsIGxpZ2h0Q29sb3IsIGRhcmtDb2xvciwgbXVsdGlwbHkpXG57XG4gICAgZGVzYXR1cmF0aW9uID0gZGVzYXR1cmF0aW9uIHx8IDAuMjtcbiAgICB0b25lZCA9IHRvbmVkIHx8IDAuMTU7XG4gICAgbGlnaHRDb2xvciA9IGxpZ2h0Q29sb3IgfHwgMHhGRkU1ODA7XG4gICAgZGFya0NvbG9yID0gZGFya0NvbG9yIHx8IDB4MzM4MDAwO1xuXG4gICAgdmFyIGxSID0gKChsaWdodENvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsRyA9ICgobGlnaHRDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsQiA9IChsaWdodENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgZFIgPSAoKGRhcmtDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEcgPSAoKGRhcmtDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkQiA9IChkYXJrQ29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC41OSwgMC4xMSwgMCwgMCxcbiAgICAgICAgbFIsIGxHLCBsQiwgZGVzYXR1cmF0aW9uLCAwLFxuICAgICAgICBkUiwgZEcsIGRCLCB0b25lZCwgMCxcbiAgICAgICAgbFIgLSBkUiwgbEcgLSBkRywgbEIgLSBkQiwgMCwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIE5pZ2h0IGVmZmVjdFxuICpcbiAqIEBwYXJhbSBpbnRlbnNpdHkge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uaWdodCA9IGZ1bmN0aW9uIChpbnRlbnNpdHksIG11bHRpcGx5KVxue1xuICAgIGludGVuc2l0eSA9IGludGVuc2l0eSB8fCAwLjE7XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgaW50ZW5zaXR5ICogKCAtMi4wKSwgLWludGVuc2l0eSwgMCwgMCwgMCxcbiAgICAgICAgLWludGVuc2l0eSwgMCwgaW50ZW5zaXR5LCAwLCAwLFxuICAgICAgICAwLCBpbnRlbnNpdHksIGludGVuc2l0eSAqIDIuMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKlxuICogUHJlZGF0b3IgZWZmZWN0XG4gKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgYSBuZXcgaW5kZXBlbnQgb25lXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBob3cgbXVjaCB0aGUgcHJlZGF0b3IgZmVlbHMgaGlzIGZ1dHVyZSB2aWN0aW1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wcmVkYXRvciA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDExLjIyNDEzMDYzMDQ5MzE2NCAqIGFtb3VudCwgLTQuNzk0NDg2OTk5NTExNzE5ICogYW1vdW50LCAtMi44NzQ2MTE4NTQ1NTMyMjI3ICogYW1vdW50LCAwICogYW1vdW50LCAwLjQwMzQyNDM4MjIwOTc3NzgzICogYW1vdW50LFxuICAgICAgICAtMy42MzMwNjk3NTM2NDY4NTA2ICogYW1vdW50LCA5LjE5MzE1NzE5NjA0NDkyMiAqIGFtb3VudCwgLTIuOTUxODEwODM2NzkxOTkyICogYW1vdW50LCAwICogYW1vdW50LCAtMS4zMTYxMzUwNDg4NjYyNzIgKiBhbW91bnQsXG4gICAgICAgIC0zLjIxODQxOTc5MDI2Nzk0NDMgKiBhbW91bnQsIC00LjIzNzUwMzA1MTc1NzgxMjUgKiBhbW91bnQsIDcuNDc2NDQ4MDU5MDgyMDMxICogYW1vdW50LCAwICogYW1vdW50LCAwLjgwNDQ0NTkyMjM3NDcyNTMgKiBhbW91bnQsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBMU0QgZWZmZWN0XG4gKlxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBIb3cgY3JhenkgaXMgeW91ciBlZmZlY3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5sc2QgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMiwgLTAuNCwgMC41LCAwLCAwLFxuICAgICAgICAtMC41LCAyLCAtMC40LCAwLCAwLFxuICAgICAgICAtMC40LCAtMC41LCAzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgb25lXG4gKlxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIGZhbHNlKTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF0cml4IG9mIHRoZSBjb2xvciBtYXRyaXggZmlsdGVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yTWF0cml4RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IFsxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwXVxuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm0udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBsb3dlcnMgdGhlIGNvbG9yIGRlcHRoIG9mIHlvdXIgaW1hZ2UgYnkgdGhlIGdpdmVuIGFtb3VudCwgcHJvZHVjaW5nIGFuIGltYWdlIHdpdGggYSBzbWFsbGVyIHBhbGV0dGUuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yU3RlcEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzdGVwO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGNvbG9yID0gZmxvb3IoY29sb3IgKiBzdGVwKSAvIHN0ZXA7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXA6IHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yU3RlcEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JTdGVwRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBzdGVwcyB0byByZWR1Y2UgdGhlIHBhbGV0dGUgYnkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvclN0ZXBGaWx0ZXIjXG4gICAgICovXG4gICAgc3RlcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbnZvbHV0aW9uRmlsdGVyIGNsYXNzIGFwcGxpZXMgYSBtYXRyaXggY29udm9sdXRpb24gZmlsdGVyIGVmZmVjdC5cbiAqIEEgY29udm9sdXRpb24gY29tYmluZXMgcGl4ZWxzIGluIHRoZSBpbnB1dCBpbWFnZSB3aXRoIG5laWdoYm9yaW5nIHBpeGVscyB0byBwcm9kdWNlIGEgbmV3IGltYWdlLlxuICogQSB3aWRlIHZhcmlldHkgb2YgaW1hZ2UgZWZmZWN0cyBjYW4gYmUgYWNoaWV2ZWQgdGhyb3VnaCBjb252b2x1dGlvbnMsIGluY2x1ZGluZyBibHVycmluZywgZWRnZVxuICogZGV0ZWN0aW9uLCBzaGFycGVuaW5nLCBlbWJvc3NpbmcsIGFuZCBiZXZlbGluZy4gVGhlIG1hdHJpeCBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIFNlZSBodHRwOi8vZG9jcy5naW1wLm9yZy9lbi9wbHVnLWluLWNvbnZtYXRyaXguaHRtbCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICovXG5mdW5jdGlvbiBDb252b2x1dGlvbkZpbHRlcihtYXRyaXgsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyBtZWRpdW1wIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xcbnVuaWZvcm0gZmxvYXQgbWF0cml4WzldO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IGMxMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAtIHRleGVsU2l6ZSk7IC8vIHRvcCBsZWZ0XFxuICAgdmVjNCBjMTIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgY2VudGVyXFxuICAgdmVjNCBjMTMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCByaWdodFxcblxcbiAgIHZlYzQgYzIxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIGxlZnRcXG4gICB2ZWM0IGMyMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7IC8vIG1pZCBjZW50ZXJcXG4gICB2ZWM0IGMyMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCByaWdodFxcblxcbiAgIHZlYzQgYzMxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gbGVmdFxcbiAgIHZlYzQgYzMyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGNlbnRlclxcbiAgIHZlYzQgYzMzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgdGV4ZWxTaXplKTsgLy8gYm90dG9tIHJpZ2h0XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID1cXG4gICAgICAgYzExICogbWF0cml4WzBdICsgYzEyICogbWF0cml4WzFdICsgYzEzICogbWF0cml4WzJdICtcXG4gICAgICAgYzIxICogbWF0cml4WzNdICsgYzIyICogbWF0cml4WzRdICsgYzIzICogbWF0cml4WzVdICtcXG4gICAgICAgYzMxICogbWF0cml4WzZdICsgYzMyICogbWF0cml4WzddICsgYzMzICogbWF0cml4WzhdO1xcblxcbiAgIGdsX0ZyYWdDb2xvci5hID0gYzIyLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWF0cml4OiAgICAgeyB0eXBlOiAnMWZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KSB9LFxuICAgICAgICAgICAgdGV4ZWxTaXplOiAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxIC8gd2lkdGgsIHk6IDEgLyBoZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnZvbHV0aW9uRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb252b2x1dGlvbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnkgPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIENyb3NzIEhhdGNoIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENyb3NzSGF0Y2hGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZmxvYXQgbHVtID0gbGVuZ3RoKHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZC54eSkucmdiKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDEuMCwgMS4wLCAxLjApO1xcblxcbiAgICBpZiAobHVtIDwgMS4wMClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjc1KVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNTApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC4zKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXCJcbiAgICApO1xufVxuXG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDcm9zc0hhdGNoRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDcm9zc0hhdGNoRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIERpc3BsYWNlbWVudEZpbHRlciBjbGFzcyB1c2VzIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHRleHR1cmUgKGNhbGxlZCB0aGUgZGlzcGxhY2VtZW50IG1hcCkgdG8gcGVyZm9ybSBhIGRpc3BsYWNlbWVudCBvZiBhbiBvYmplY3QuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGZpbHRlciB0byBhcHBseSBhbGwgbWFub3Igb2YgY3Jhenkgd2FycGluZyBlZmZlY3RzXG4gKiBDdXJyZW50bHkgdGhlIHIgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHggYW5kIHRoZSBnIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIChtYWtlIHN1cmUgaXRzIGFkZGVkIHRvIHRoZSBzY2VuZSEpXG4gKi9cbmZ1bmN0aW9uIERpc3BsYWNlbWVudEZpbHRlcihzcHJpdGUsIHNjYWxlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG4gICAgc3ByaXRlLnJlbmRlcmFibGUgPSBmYWxzZTtcblxuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZNYXBDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcFNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgbWFwID0gIHRleHR1cmUyRChtYXBTYW1wbGVyLCB2TWFwQ29vcmQpO1xcblxcbiAgIG1hcCAtPSAwLjU7XFxuICAgbWFwLnh5ICo9IHNjYWxlO1xcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyBtYXAueCwgdlRleHR1cmVDb29yZC55ICsgbWFwLnkpKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcFNhbXBsZXI6ICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLnRleHR1cmUgfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9LFxuICAgICAgICAgICAgc2NhbGU6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSwgeTogMSB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcblxuICAgIGlmIChzY2FsZSA9PT0gbnVsbCB8fCBzY2FsZSA9PT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgICAgc2NhbGUgPSAyMDtcbiAgICB9XG5cbiAgICB0aGlzLnNjYWxlID0gbmV3IGNvcmUuUG9pbnQoc2NhbGUsIHNjYWxlKTtcbn1cblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYWNlbWVudEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxhY2VtZW50RmlsdGVyO1xuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS54ID0gdGhpcy5zY2FsZS54ICogKDEvaW5wdXQuZnJhbWUud2lkdGgpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueSA9IHRoaXMuc2NhbGUueSAqICgxL2lucHV0LmZyYW1lLmhlaWdodCk7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gTXVzdCBiZSBwb3dlciBvZiAyIHNpemVkIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5EaXNwbGFjZW1lbnRGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3ZlcyBodHRwOi8vbWF0Z3JvdmVzLmNvbS8gQERvb3JtYXQyM1xuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9mdW4vZG90c2NyZWVuLmpzXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgZG90c2NyZWVuIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0byBiZSBtYWRlIG91dCBvZlxuICogYmxhY2sgYW5kIHdoaXRlIGhhbGZ0b25lIGRvdHMgbGlrZSBhbiBvbGQgcHJpbnRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRG90U2NyZWVuRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG5cXG5mbG9hdCBwYXR0ZXJuKClcXG57XFxuICAgZmxvYXQgcyA9IHNpbihhbmdsZSksIGMgPSBjb3MoYW5nbGUpO1xcbiAgIHZlYzIgdGV4ID0gdlRleHR1cmVDb29yZCAqIGRpbWVuc2lvbnMueHk7XFxuICAgdmVjMiBwb2ludCA9IHZlYzIoXFxuICAgICAgIGMgKiB0ZXgueCAtIHMgKiB0ZXgueSxcXG4gICAgICAgcyAqIHRleC54ICsgYyAqIHRleC55XFxuICAgKSAqIHNjYWxlO1xcbiAgIHJldHVybiAoc2luKHBvaW50LngpICogc2luKHBvaW50LnkpKSAqIDQuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhhdmVyYWdlICogMTAuMCAtIDUuMCArIHBhdHRlcm4oKSksIGNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNjYWxlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvdFNjcmVlbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRG90U2NyZWVuRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIHNjYWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHJhZGl1cyBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWVRpbnRGaWx0ZXIgYXBwbGllcyBhIHZlcnRpY2FsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWVRpbnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbitvZmZzZXQpLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IHN1bSA9IHZlYzQoMC4wKTtcXG5cXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLnJnYiAqIHN1bS5hICogYWxwaGEsIHN1bS5hICogYWxwaGEgKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSAvIDUxMiB9LFxuICAgICAgICAgICAgY29sb3I6IHsgdHlwZTogJ2MnLCB2YWx1ZTogWzAsMCwwXX0sXG4gICAgICAgICAgICBhbHBoYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC43IH0sXG4gICAgICAgICAgICBvZmZzZXQ6IHsgdHlwZTogJzJmJywgdmFsdWU6WzUsIDVdfSxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOjF9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllUaW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWVRpbnRGaWx0ZXI7XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIGNsZWFyKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWVRpbnRGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllUaW50RmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWVRpbnRGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgRHJvcFNoYWRvd0ZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEcm9wU2hhZG93RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIgPSBuZXcgQmx1cllUaW50RmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgdGhpcy5wYWRkaW5nID0gMzA7XG5cbiAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9hbmdsZSA9IDQ1ICogTWF0aC5QSSAvIDE4MDtcbiAgICB0aGlzLl9kaXN0YW5jZSA9IDEwO1xuICAgIHRoaXMuYWxwaGEgPSAwLjc1O1xuICAgIHRoaXMuaGlkZU9iamVjdCA9IGZhbHNlO1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5NVUxUSVBMWTtcbn1cblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRHJvcFNoYWRvd0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRHJvcFNoYWRvd0ZpbHRlcjtcblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIGlmKHRoaXMuX2RpcnR5UG9zaXRpb24pXG4gICAge1xuICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzBdID0gTWF0aC5zaW4odGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVsxXSA9IE1hdGguY29zKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUodGhpcy5ibGVuZE1vZGUpO1xuXG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIGlmKCF0aGlzLmhpZGVPYmplY3QpXG4gICAge1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG4gICAgfVxuXG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBjb2xvcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgY29yZS51dGlscy5yZ2IyaGV4KCB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgPSBjb3JlLnV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYWxwaGE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXN0YW5jZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGRpc3RhbmNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9hbmdsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fYW5nbGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBncmV5c2NhbGVzIHRoZSBwYWxldHRlIG9mIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBHcmF5RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JheTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIHZlYzMoMC4yMTI2KmdsX0ZyYWdDb2xvci5yICsgMC43MTUyKmdsX0ZyYWdDb2xvci5nICsgMC4wNzIyKmdsX0ZyYWdDb2xvci5iKSwgZ3JheSk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXk6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuR3JheUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkdyYXlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JheUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JheUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR3JheUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXkuIDEgd2lsbCBtYWtlIHRoZSBvYmplY3QgYmxhY2sgYW5kIHdoaXRlLCAwIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5HcmF5RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYXk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGZpbHRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmZpbHRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXNjaWlGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2FzY2lpL0FzY2lpRmlsdGVyJyksXG4gICAgQmxvb21GaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2Jsb29tL0Jsb29tRmlsdGVyJyksXG4gICAgQmx1ckZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckZpbHRlcicpLFxuICAgIEJsdXJYRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1cllGaWx0ZXInKSxcbiAgICBCbHVyRGlyRmlsdGVyOiAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRGlyRmlsdGVyJyksXG4gICAgQ29sb3JNYXRyaXhGaWx0ZXI6ICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yTWF0cml4RmlsdGVyJyksXG4gICAgQ29sb3JTdGVwRmlsdGVyOiAgICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yU3RlcEZpbHRlcicpLFxuICAgIENvbnZvbHV0aW9uRmlsdGVyOiAgcmVxdWlyZSgnLi9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlcicpLFxuICAgIENyb3NzSGF0Y2hGaWx0ZXI6ICAgcmVxdWlyZSgnLi9jcm9zc2hhdGNoL0Nyb3NzSGF0Y2hGaWx0ZXInKSxcbiAgICBEaXNwbGFjZW1lbnRGaWx0ZXI6IHJlcXVpcmUoJy4vZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlcicpLFxuICAgIERvdFNjcmVlbkZpbHRlcjogICAgcmVxdWlyZSgnLi9kb3QvRG90U2NyZWVuRmlsdGVyJyksXG4gICAgR3JheUZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2dyYXkvR3JheUZpbHRlcicpLFxuICAgIERyb3BTaGFkb3dGaWx0ZXI6ICAgcmVxdWlyZSgnLi9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXInKSxcbiAgICBJbnZlcnRGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vaW52ZXJ0L0ludmVydEZpbHRlcicpLFxuICAgIE5vaXNlRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ub2lzZS9Ob2lzZUZpbHRlcicpLFxuICAgIFBpeGVsYXRlRmlsdGVyOiAgICAgcmVxdWlyZSgnLi9waXhlbGF0ZS9QaXhlbGF0ZUZpbHRlcicpLFxuICAgIFJHQlNwbGl0RmlsdGVyOiAgICAgcmVxdWlyZSgnLi9yZ2IvUkdCU3BsaXRGaWx0ZXInKSxcbiAgICBTaG9ja3dhdmVGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vc2hvY2t3YXZlL1Nob2Nrd2F2ZUZpbHRlcicpLFxuICAgIFNlcGlhRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9zZXBpYS9TZXBpYUZpbHRlcicpLFxuICAgIFNtYXJ0Qmx1ckZpbHRlcjogICAgcmVxdWlyZSgnLi9ibHVyL1NtYXJ0Qmx1ckZpbHRlcicpLFxuICAgIFRpbHRTaGlmdEZpbHRlcjogICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyJyksXG4gICAgVHdpc3RGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3R3aXN0L1R3aXN0RmlsdGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGludmVydHMgeW91ciBEaXNwbGF5IE9iamVjdHMgY29sb3JzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBJbnZlcnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gZmxvYXQgaW52ZXJ0O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggKHZlYzMoMSktZ2xfRnJhZ0NvbG9yLnJnYikgKiBnbF9GcmFnQ29sb3IuYSwgZ2xfRnJhZ0NvbG9yLnJnYiwgMS4wIC0gaW52ZXJ0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBpbnZlcnQ6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludmVydEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gSW52ZXJ0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhJbnZlcnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBpbnZlcnQuIGAxYCB3aWxsIGZ1bGx5IGludmVydCB0aGUgY29sb3JzLCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkludmVydEZpbHRlciNcbiAgICAgKi9cbiAgICBpbnZlcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9hZGp1c3Qvbm9pc2UuanNcbiAqL1xuXG4vKipcbiAqIEEgTm9pc2UgZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gTm9pc2VGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgbm9pc2U7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgcmFuZCh2ZWMyIGNvKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoY28ueHksIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZmxvYXQgZGlmZiA9IChyYW5kKHZUZXh0dXJlQ29vcmQpIC0gMC41KSAqIG5vaXNlO1xcblxcbiAgICBjb2xvci5yICs9IGRpZmY7XFxuICAgIGNvbG9yLmcgKz0gZGlmZjtcXG4gICAgY29sb3IuYiArPSBkaWZmO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBub2lzZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbk5vaXNlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuTm9pc2VGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTm9pc2VGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE5vaXNlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2lzZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIG5vaXNlIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuTm9pc2VGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMC41XG4gICAgICovXG4gICAgbm9pc2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHBpeGVsYXRlIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciAnYmxvY2t5Jy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUGl4ZWxhdGVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZDtcXG5cXG4gICAgdmVjMiBzaXplID0gZGltZW5zaW9ucy54eSAvIHBpeGVsU2l6ZTtcXG5cXG4gICAgdmVjMiBjb2xvciA9IGZsb29yKCAoIHZUZXh0dXJlQ29vcmQgKiBzaXplICkgKSAvIHNpemUgKyBwaXhlbFNpemUvZGltZW5zaW9ucy54eSAqIDAuNTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb2xvcik7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgICB2YWx1ZTogeyB4OiAxMCwgeTogMTAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBpeGVsYXRlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBQaXhlbGF0ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBhIHBvaW50IHRoYXQgZGVzY3JpYmVzIHRoZSBzaXplIG9mIHRoZSBibG9ja3MuXG4gICAgICogeCBpcyB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGFuZCB5IGlzIHRoZSBoZWlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUGl4ZWxhdGVGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEFuIFJHQiBTcGxpdCBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFJHQlNwbGl0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcmVkO1xcbnVuaWZvcm0gdmVjMiBncmVlbjtcXG51bmlmb3JtIHZlYzIgYmx1ZTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yLnIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyByZWQvZGltZW5zaW9ucy54eSkucjtcXG4gICBnbF9GcmFnQ29sb3IuZyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGdyZWVuL2RpbWVuc2lvbnMueHkpLmc7XFxuICAgZ2xfRnJhZ0NvbG9yLmIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBibHVlL2RpbWVuc2lvbnMueHkpLmI7XFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgZ3JlZW46ICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAtMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGJsdWU6ICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IC0yMCB9IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUkdCU3BsaXRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFJHQlNwbGl0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSR0JTcGxpdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBSZWQgY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgcmVkOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yZWQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmVlbiBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmVlbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEJsdWUgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgYXBwbGllcyBhIHNlcGlhIGVmZmVjdCB0byB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2VwaWFGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc2VwaWE7XFxuXFxuY29uc3QgbWF0MyBzZXBpYU1hdHJpeCA9IG1hdDMoMC4zNTg4LCAwLjcwNDQsIDAuMTM2OCwgMC4yOTkwLCAwLjU4NzAsIDAuMTE0MCwgMC4yMzkyLCAwLjQ2OTYsIDAuMDkxMik7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZ2xfRnJhZ0NvbG9yLnJnYiAqIHNlcGlhTWF0cml4LCBzZXBpYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2VwaWE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2VwaWFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TZXBpYUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXBpYUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2VwaWFGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNlcGlhRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgc2VwaWEuIGAxYCB3aWxsIGFwcGx5IHRoZSBmdWxsIHNlcGlhIGVmZmVjdCwgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TZXBpYUZpbHRlciNcbiAgICAgKi9cbiAgICBzZXBpYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA0eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTaG9ja3dhdmVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XFxudW5pZm9ybSB2ZWMzIHBhcmFtczsgLy8gMTAuMCwgMC44LCAwLjFcXG51bmlmb3JtIGZsb2F0IHRpbWU7XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSB2VGV4dHVyZUNvb3JkO1xcbiAgICB2ZWMyIHRleENvb3JkID0gdXY7XFxuXFxuICAgIGZsb2F0IGRpc3QgPSBkaXN0YW5jZSh1diwgY2VudGVyKTtcXG5cXG4gICAgaWYgKCAoZGlzdCA8PSAodGltZSArIHBhcmFtcy56KSkgJiYgKGRpc3QgPj0gKHRpbWUgLSBwYXJhbXMueikpIClcXG4gICAge1xcbiAgICAgICAgZmxvYXQgZGlmZiA9IChkaXN0IC0gdGltZSk7XFxuICAgICAgICBmbG9hdCBwb3dEaWZmID0gMS4wIC0gcG93KGFicyhkaWZmKnBhcmFtcy54KSwgcGFyYW1zLnkpO1xcblxcbiAgICAgICAgZmxvYXQgZGlmZlRpbWUgPSBkaWZmICAqIHBvd0RpZmY7XFxuICAgICAgICB2ZWMyIGRpZmZVViA9IG5vcm1hbGl6ZSh1diAtIGNlbnRlcik7XFxuICAgICAgICB0ZXhDb29yZCA9IHV2ICsgKGRpZmZVViAqIGRpZmZUaW1lKTtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHRleENvb3JkKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBjZW50ZXI6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9LFxuICAgICAgICAgICAgcGFyYW1zOiB7IHR5cGU6ICd2MycsIHZhbHVlOiB7IHg6IDEwLCB5OiAwLjgsIHo6IDAuMSB9IH0sXG4gICAgICAgICAgICB0aW1lOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaG9ja3dhdmVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNob2Nrd2F2ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNlbnRlciBvZiB0aGUgc2hvY2t3YXZlIGluIG5vcm1hbGl6ZWQgc2NyZWVuIGNvb3Jkcy4gVGhhdCBpc1xuICAgICAqICgwLDApIGlzIHRoZSB0b3AtbGVmdCBhbmQgKDEsMSkgaXMgdGhlIGJvdHRvbSByaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgY2VudGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGFyYW1zIG9mIHRoZSBzaG9ja3dhdmUuIFRoZXNlIG1vZGlmeSB0aGUgbG9vayBhbmQgYmVoYXZpb3Igb2ZcbiAgICAgKiB0aGUgc2hvY2t3YXZlIGFzIGl0IHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIHNob2Nrd2F2ZS4gVGhpcyBjb250cm9scyB0aGUgc3BlZWQgYXQgd2hpY2hcbiAgICAgKiB0aGUgc2hvY2t3YXZlIHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHRpbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRBeGlzRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRBeGlzRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGJsdXI7XFxudW5pZm9ybSBmbG9hdCBncmFkaWVudEJsdXI7XFxudW5pZm9ybSB2ZWMyIHN0YXJ0O1xcbnVuaWZvcm0gdmVjMiBlbmQ7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcbnVuaWZvcm0gdmVjMiB0ZXhTaXplO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcbiAgICB2ZWMyIG5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMyKHN0YXJ0LnkgLSBlbmQueSwgZW5kLnggLSBzdGFydC54KSk7XFxuICAgIGZsb2F0IHJhZGl1cyA9IHNtb290aHN0ZXAoMC4wLCAxLjAsIGFicyhkb3QodlRleHR1cmVDb29yZCAqIHRleFNpemUgLSBzdGFydCwgbm9ybWFsKSkgLyBncmFkaWVudEJsdXIpICogYmx1cjtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgLyB0ZXhTaXplICogcGVyY2VudCAqIHJhZGl1cyk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6ICAgICAgICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxMDAgfSxcbiAgICAgICAgICAgIGdyYWRpZW50Qmx1cjogICB7IHR5cGU6ICcxZicsIHZhbHVlOiA2MDAgfSxcbiAgICAgICAgICAgIHN0YXJ0OiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAsICAgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZW5kOiAgICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogNjAwLCAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBkZWx0YTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAzMCwgICB5OiAzMCB9IH0sXG4gICAgICAgICAgICB0ZXhTaXplOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiB3aW5kb3cuaW5uZXJXaWR0aCwgeTogd2luZG93LmlubmVySGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbn1cblxuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICogVGhpcyBpcyBvdmVycmlkZGVuIGluIHRoZSBYIGFuZCBZIGZpbHRlcnMsIGRvZXMgbm90aGluZyBmb3IgdGhpcyBjbGFzcy5cbiAqXG4gKi9cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAwO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IDA7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WUZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnQgRmlsdGVyLiBNYW5hZ2VzIHRoZSBwYXNzIG9mIGJvdGggYSBUaWx0U2hpZnRYRmlsdGVyIGFuZCBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlciA9IG5ldyBUaWx0U2hpZnRYRmlsdGVyKCk7XG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyID0gbmV3IFRpbHRTaGlmdFlGaWx0ZXIoKTtcbn1cblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0RmlsdGVyO1xuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ncmFkaWVudEJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5zdGFydCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5lbmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRYRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gZHggLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR5IC8gZDtcbn07XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFlGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WUZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAtZHkgLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR4IC8gZDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgdHdpc3QgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHR3aXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVHdpc3RGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgLSBvZmZzZXQ7XFxuICAgZmxvYXQgZGlzdCA9IGxlbmd0aChjb29yZCk7XFxuXFxuICAgaWYgKGRpc3QgPCByYWRpdXMpXFxuICAge1xcbiAgICAgICBmbG9hdCByYXRpbyA9IChyYWRpdXMgLSBkaXN0KSAvIHJhZGl1cztcXG4gICAgICAgZmxvYXQgYW5nbGVNb2QgPSByYXRpbyAqIHJhdGlvICogYW5nbGU7XFxuICAgICAgIGZsb2F0IHMgPSBzaW4oYW5nbGVNb2QpO1xcbiAgICAgICBmbG9hdCBjID0gY29zKGFuZ2xlTW9kKTtcXG4gICAgICAgY29vcmQgPSB2ZWMyKGNvb3JkLnggKiBjIC0gY29vcmQueSAqIHMsIGNvb3JkLnggKiBzICsgY29vcmQueSAqIGMpO1xcbiAgIH1cXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkK29mZnNldCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBvZmZzZXQ6ICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuVHdpc3RGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ud2lzdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUd2lzdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVHdpc3RGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFR3aXN0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgZGVzY3JpYmVzIHRoZSB0aGUgb2Zmc2V0IG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcmFkaXVzIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIHJhZGl1czoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBhbmdsZSBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvLyBydW4gdGhlIHBvbHlmaWxsc1xucmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbi8vIGFkZCBjb3JlIHBsdWdpbnMuXG5jb3JlLmV4dHJhcyAgICAgICAgID0gcmVxdWlyZSgnLi9leHRyYXMnKTtcbmNvcmUuZmlsdGVycyAgICAgICAgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcbmNvcmUuaW50ZXJhY3Rpb24gICAgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9uJyk7XG5jb3JlLmxvYWRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9sb2FkZXJzJyk7XG5jb3JlLm1lc2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9tZXNoJyk7XG5jb3JlLmFjY2Vzc2liaWxpdHkgID0gcmVxdWlyZSgnLi9hY2Nlc3NpYmlsaXR5Jyk7XG5cbi8vIGV4cG9ydCBhIHByZW1hZGUgbG9hZGVyIGluc3RhbmNlXG4vKipcbiAqIEEgcHJlbWFkZSBpbnN0YW5jZSBvZiB0aGUgbG9hZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZGVyIHJlc291cmNlcy5cbiAqXG4gKiBAbmFtZSBsb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcHJvcGVydHkge1BJWEkubG9hZGVycy5Mb2FkZXJ9XG4gKi9cbmNvcmUubG9hZGVyID0gbmV3IGNvcmUubG9hZGVycy5Mb2FkZXIoKTtcblxuLy8gbWl4aW4gdGhlIGRlcHJlY2F0aW9uIGZlYXR1cmVzLlxuT2JqZWN0LmFzc2lnbihjb3JlLCByZXF1aXJlKCcuL2RlcHJlY2F0aW9uJykpO1xuXG4vLyBBbHdheXMgZXhwb3J0IHBpeGkgZ2xvYmFsbHkuXG5nbG9iYWwuUElYSSA9IGNvcmU7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBIb2xkcyBhbGwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhbiBJbnRlcmFjdGlvbiBldmVudFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25EYXRhKClcbntcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IHN0b3JlcyB0aGUgZ2xvYmFsIGNvb3JkcyBvZiB3aGVyZSB0aGUgdG91Y2gvbW91c2UgZXZlbnQgaGFwcGVuZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5nbG9iYWwgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBTcHJpdGUgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBhc3NlZCB0byBhbiBldmVudCBoYW5kbGVyLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbmFsIERPTSBFdmVudCB0aGF0IHdhcyBjYXB0dXJlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gbnVsbDtcbn1cblxuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25EYXRhO1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBzcGVjaWZpZWQgZGlzcGxheU9iamVjdCBmb3IgdGhpcyBJbnRlcmFjdGlvbkRhdGFcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSBsb2NhbCBjb29yZHMgb2ZmXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IHBvaW50KVxuICogQHBhcmFtIFtnbG9iYWxQb3NdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHlvdXIgY3VzdG9tIGdsb2JhbCBjb29yZHMsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCB1c2UgdGhlIGN1cnJlbnQgZ2xvYmFsIGNvb3JkcylcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEludGVyYWN0aW9uRGF0YSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgRGlzcGxheU9iamVjdFxuICovXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmdldExvY2FsUG9zaXRpb24gPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcG9pbnQsIGdsb2JhbFBvcylcbntcbiAgICByZXR1cm4gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UoZ2xvYmFsUG9zIHx8IHRoaXMuZ2xvYmFsLCBwb2ludCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgSW50ZXJhY3Rpb25EYXRhID0gcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKTtcblxuLy8gTWl4IGludGVyYWN0aXZlVGFyZ2V0IGludG8gY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZVxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxuKTtcblxuLyoqXG4gKiBUaGUgaW50ZXJhY3Rpb24gbWFuYWdlciBkZWFscyB3aXRoIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuIEFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBpbnRlcmFjdGl2ZVxuICogaWYgaXRzIGludGVyYWN0aXZlIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZVxuICogVGhpcyBtYW5hZ2VyIGFsc28gc3VwcG9ydHMgbXVsdGl0b3VjaC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdD10cnVlXSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBtYW5hZ2VyIGF1dG9tYXRpY2FsbHkgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeT0xMF0ge251bWJlcn0gRnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyLCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgaW50ZXJhY3Rpb24gbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGJlIHByZXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0ID0gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0IDogdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFzIHRoaXMgZnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZCBtb3JlIG9mdGVuLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSA9IG9wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW91c2UgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9XG4gICAgICovXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IGRhdGEgb2JqZWN0IHRvIGhhbmRsZSBhbGwgdGhlIGV2ZW50IHRyYWNraW5nL2Rpc3BhdGNoaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5ldmVudERhdGEgPSB7XG4gICAgICAgIHN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgIGRhdGE6IHRoaXMubW91c2UsXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGxpdHRsZSBpbnRlcmFjdGl2ZURhdGEgcG9vbCAhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YVtdfVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBlbGVtZW50IHRvIGJpbmQgdG8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhhdmUgZXZlbnRzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGRvbSBlbGVtZW50P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcblxuICAgIC8vdGhpcyB3aWxsIG1ha2UgaXQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGJpbmQgYWxsIHRoZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VVcCA9IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IHRoaXMucHJvY2Vzc01vdXNlVXAuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IHRoaXMucHJvY2Vzc01vdXNlRG93bi5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gdGhpcy5wcm9jZXNzTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU91dCA9IHRoaXMub25Nb3VzZU91dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gdGhpcy5vblRvdWNoU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gdGhpcy5wcm9jZXNzVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoRW5kID0gdGhpcy5vblRvdWNoRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSB0aGlzLnByb2Nlc3NUb3VjaEVuZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IHRoaXMub25Ub3VjaE1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSB0aGlzLnByb2Nlc3NUb3VjaE1vdmUuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxhc3QgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNzcyBzdHlsZSBvZiB0aGUgY3Vyc29yIHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9ICdpbmhlcml0JztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNhY2hlZCB2YXJcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcblxuICAgIHRoaXMuc2V0VGFyZ2V0RWxlbWVudCh0aGlzLnJlbmRlcmVyLnZpZXcsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbik7XG59XG5cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UvdG91Y2ggZXZlbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZVxuICogb3RoZXIgRE9NIGVsZW1lbnRzIG9uIHRvcCBvZiB0aGUgcmVuZGVyZXJzIENhbnZhcyBlbGVtZW50LiBXaXRoIHRoaXMgeW91J2xsIGJlIGJhbGUgdG8gZGVsZXRlZ2F0ZVxuICogYW5vdGhlciBET00gZWxlbWVudCB0byByZWNlaXZlIHRob3NlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9IHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUSGUgcmVzb2x1dGlvbiBvZiB0aGUgbmV3IGVsZW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBjYW52YXMpLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXRUYXJnZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJlc29sdXRpb24pXG57XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgdGhlIERPTSBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAgICB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgICB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICAgICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICAgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgICAgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgICAgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgdGhlIERPTSBldmVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICcnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzLlxuICogSW52b2tlZCBieSBhIHRocm90dGxlZCB0aWNrZXIgdXBkYXRlIGZyb21cbiAqIHtAbGluayBQSVhJLnRpY2tlci5zaGFyZWR9LlxuICpcbiAqIEBwYXJhbSBkZWx0YVRpbWUge251bWJlcn1cbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHRoaXMuX2RlbHRhVGltZSArPSBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZGVsdGFUaW1lIDwgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWx0YVRpbWUgPSAwO1xuXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBtb3ZlIHRoZSBtb3VzZSB0aGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gZGZvbmUgdXNpbmcgdGhlIG1vdXNlIG1vdmUhXG4gICAgaWYodGhpcy5kaWRNb3ZlKVxuICAgIHtcbiAgICAgICAgdGhpcy5kaWRNb3ZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ET1xufTtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgZGlzcGxheSBvYmplY3QgaW4gcXVlc3Rpb25cbiAqIEBwYXJhbSBldmVudFN0cmluZyB7c3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGUuZywgbW91c2Vkb3duKVxuICogQHBhcmFtIGV2ZW50RGF0YSB7b2JqZWN0fSB0aGUgZXZlbnQgZGF0YSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApXG57XG4gICAgaWYoIWV2ZW50RGF0YS5zdG9wcGVkKVxuICAgIHtcbiAgICAgICAgZXZlbnREYXRhLnRhcmdldCA9IGRpc3BsYXlPYmplY3Q7XG4gICAgICAgIGV2ZW50RGF0YS50eXBlID0gZXZlbnRTdHJpbmc7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5lbWl0KCBldmVudFN0cmluZywgZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10oIGV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXBzIHggYW5kIHkgY29vcmRzIGZyb20gYSBET00gb2JqZWN0IGFuZCBtYXBzIHRoZW0gY29ycmVjdGx5IHRvIHRoZSBwaXhpIHZpZXcuIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBwb2ludC5cbiAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgdGhlIERPTSBlbGVtZW50IGNvdWxkIGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCBhbnl3aGVyZSBvbiB0aGUgc2NyZWVuLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW5cbiAqIEBwYXJhbSAge251bWJlcn0geCAgICAgdGhlIHggY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICogQHBhcmFtICB7bnVtYmVyfSB5ICAgICB0aGUgeSBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUubWFwUG9zaXRpb25Ub1BvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgeCwgeSApXG57XG4gICAgdmFyIHJlY3QgPSB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBwb2ludC54ID0gKCAoIHggLSByZWN0LmxlZnQgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC53aWR0aCAgLyByZWN0LndpZHRoICApICkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgcG9pbnQueSA9ICggKCB5IC0gcmVjdC50b3AgICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuaGVpZ2h0IC8gcmVjdC5oZWlnaHQgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVzIGEgbmVhdCB3YXkgb2YgY3Jhd2xpbmcgdGhyb3VnaCB0aGUgc2NlbmUgZ3JhcGggYW5kIHJ1bm5pbmcgYSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gYWxsIGludGVyYWN0aXZlIG9iamVjdHMgaXQgZmluZHMuXG4gKiBJdCB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIGhpdCB0ZXN0aW5nIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlIGhpdCBhY3Jvc3MgaW4gdGhlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IGlzIHRlc3RlZCBmb3IgY29sbGlzaW9uXG4gKiBAcGFyYW0gIHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IGRpc3BsYXlPYmplY3QgdGhlIGRpc3BsYXlPYmplY3QgdGhhdCB3aWxsIGJlIGhpdCB0ZXN0IChyZWN1cmNzaXZseSBjcmF3bHMgaXRzIGNoaWxkcmVuKVxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBpbnRlcmFjdGl2ZSBvYmplY3QuIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBoaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtib29sZWFufSBoaXRUZXN0IHRoaXMgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3RzIGluc2lkZSBzaG91bGQgYmUgaGl0IHRlc3QgYWdhaW5zdCB0aGUgcG9pbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiB0aGUgZGlzcGxheU9iamVjdCBoaXQgdGhlIHBvaW50XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0ludGVyYWN0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBkaXNwbGF5T2JqZWN0LCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZSlcbntcbiAgICBpZighZGlzcGxheU9iamVjdCB8fCAhZGlzcGxheU9iamVjdC52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRvb2sgYSBsaXR0bGUgd2hpbGUgdG8gcmV3b3JrIHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5ISBCdXQgbm93IGl0IGlzIGRvbmUgYW5kIG5pY2UgYW5kIG9wdGltaXNlZC4gXl9eXG4gICAgLy8gXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdyBsb29wIHRocm91Z2ggYWxsIG9iamVjdHMgYW5kIHRoZW4gb25seSBoaXQgdGVzdCB0aGUgb2JqZWN0cyBpdCBIQVMgdG8sIG5vdCBhbGwgb2YgdGhlbS4gTVVDSCBmYXN0ZXIuLlxuICAgIC8vIEFuIG9iamVjdCB3aWxsIGJlIGhpdCB0ZXN0IGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICAvLyBcbiAgICAvLyAxOiBJdCBpcyBpbnRlcmFjdGl2ZS5cbiAgICAvLyAyOiBJdCBiZWxvbmdzIHRvIGEgcGFyZW50IHRoYXQgaXMgaW50ZXJhY3RpdmUgQU5EIG9uZSBvZiB0aGUgcGFyZW50cyBjaGlsZHJlbiBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIC8vIFxuICAgIC8vIEFzIGFub3RoZXIgbGl0dGxlIG9wdGltaXNhdGlvbiBvbmNlIGFuIGludGVyYWN0aXZlIG9iamVjdCBoYXMgYmVlbiBoaXQgd2UgY2FuIGNhcnJ5IG9uIHRocm91Z2ggdGhlIHNjZW5lZ3JhcGgsIGJ1dCB3ZSBrbm93IHRoYXQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGhpdHMhIFNvIHdlIGNhbiBhdm9pZCBleHRyYSBoaXQgdGVzdHNcbiAgICAvLyBBIGZpbmFsIG9wdGltaXNhdGlvbiBpcyB0aGF0IGFuIG9iamVjdCBpcyBub3QgaGl0IHRlc3QgZGlyZWN0bHkgaWYgYSBjaGlsZCBoYXMgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICBcbiAgICB2YXIgaGl0ID0gZmFsc2UsXG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gaW50ZXJhY3RpdmUgPSBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlIHx8IGludGVyYWN0aXZlO1xuXG4gICAgLy8gaWYgdGhlIGRpc3BsYXlvYmplY3QgaGFzIGEgaGl0QXJlYSwgdGhlbiBpdCBkb2VzIG5vdCBuZWVkIHRvIGhpdFRlc3QgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAqKiBGUkVFIFRJUCAqKiEgSWYgYW4gb2JqZWN0IGlzIG5vdCBpbnRlcmFjdHRpdmUgb3IgaGFzIG5vIGJ1dHRvbnMgaW4gaXQgKHN1Y2ggYXMgYSBnYW1lIHNjZW5lISkgc2V0IGludGVyYWN0aXZlQ2hpbGRyZW4gdG8gZmFsc2UgZm9yIHRoYXQgZGlzcGxheU9iamVjdC5cbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgcGl4aSB0byBjb21wbGV0bHkgaWdub3JlIGFuZCBieXBhc3MgY2hlY2tpbmcgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmVDaGlsZHJlbilcbiAgICB7ICAgICAgIFxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aC0xOyBpID49IDA7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGltZSB0byBnZXQgcmVjdXJzaXZlLi4gaWYgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpZiBzb210aGluZyBpcyBoaXQuLlxuICAgICAgICAgICAgaWYoIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHBvaW50LCBjaGlsZHJlbltpXSwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmVQYXJlbnQpIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55IG1vcmUgb2JqZWN0cyBpbiB0aGlzIGNvbnRhaW5lciBhcyB3ZSB3ZSBub3cga25vdyB0aGUgcGFyZW50IGhhcyBiZWVuIGhpdFxuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGludGVyYWN0aXZlICwgdGhhdCBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGl0IHdhcyBhY3R1YWxseSBpbnRlcmFjdGl2ZSBhbmQgbm90IGp1c3QgdGhlIGNoaWxkIG9mIGFuIGludGVyYWN0aXZlIG9iamVjdC4gXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnl0aGluZyBlbHNlLiBXZSBzdGlsbCBuZWVkIHRvIHJ1biB0aHJvdWdoIGFsbCBvYmplY3RzLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBoaXQgdGVzdHMuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uaW50ZXJhY3RpdmUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoaXRUZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm8gcG9pbnQgcnVubmluZyB0aGlzIGlmIHRoZSBpdGVtIGlzIG5vdCBpbnRlcmFjdGl2ZSBvciBkb2VzIG5vdCBoYXZlIGFuIGludGVyYWN0aXZlIHBhcmVudC5cbiAgICBpZihpbnRlcmFjdGl2ZSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBoaXQgdGVzdGluZyAoYXMgaW4gd2UgaGF2ZSBubyBoaXQgYW55IG9iamVjdHMgeWV0KVxuICAgICAgICAvLyBXZSBhbHNvIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGl0IHRlc3RpbmcgaWYgb25jZSBvZiB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4gaGFzIGFscmVhZHkgYmVlbiBoaXQhXG4gICAgICAgIGlmKGhpdFRlc3QgJiYgIWhpdClcbiAgICAgICAgeyAgXG4gICAgICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0aGlzLl90ZW1wUG9pbnQpO1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuaGl0QXJlYS5jb250YWlucyggdGhpcy5fdGVtcFBvaW50LngsIHRoaXMuX3RlbXBQb2ludC55ICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnVuYyhkaXNwbGF5T2JqZWN0LCBoaXQpOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIFxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyBwcmVzc2VkIGRvd25cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZURvd24sIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIGRvd24gY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VEb3duID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuICAgIFxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3RbIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bicgXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGRvd24nIDogJ21vdXNlZG93bicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcmVsZWFzZWRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VVcCwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgdXAgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlVXAgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG4gICAgdmFyIGlzRG93biA9ICBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXAnIDogJ21vdXNldXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRjbGljaycgOiAnY2xpY2snLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cG91dHNpZGUnIDogJ21vdXNldXBvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiB0aGUgbW91c2UgbW92aW5nXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmRpZE1vdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU1vdmUsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE8gQlVHIGZvciBwYXJlbnRzIGluZXJhY3RpdmUgb2JqZWN0IChib3JkZXIgb3JkZXIgaXNzdWUpXG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2Vtb3ZlJywgdGhpcy5ldmVudERhdGEpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dChkaXNwbGF5T2JqZWN0LCBoaXQpO1xufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYmVpbmcgbW92ZWQgb3V0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICAvLyBUT0RPIG9wdGltaXplIGJ5IG5vdCBjaGVjayBFVkVSWSBUSU1FISBtYXliZSBoYWxmIGFzIG9mdGVuPyAvL1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgZmFsc2UgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG92ZXIvb3V0IGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgaWYoIWRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5T2JqZWN0LmJ1dHRvbk1vZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gZGlzcGxheU9iamVjdC5kZWZhdWx0Q3Vyc29yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgdGhpcy5ldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgc3RhcnRlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBzdGFydGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG4gICAgICAgIC8vVE9ETyBQT09MXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaFN0YXJ0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoc3RhcnQnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGVuZHMgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggZW5kaW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIC8vVE9ETyB0aGlzIHNob3VsZCBiZSBwYXNzZWQgYWxvbmcuLiBubyBzZXRcbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hFbmQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgZW5kIG9mIGEgdG91Y2ggYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoRW5kID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0YXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgbW92ZWQgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIG1vdmluZyBhY3Jvc3MgdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaE1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaGl0ID0gaGl0O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNobW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogR3JhYnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaEV2ZW50IHtFdmVudERhdGF9IFRoZSB0b3VjaCBldmVudCB3ZSBuZWVkIHRvIHBhaXIgd2l0aCBhbiBpbnRlcmFjdGlvbkRhdGEgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRUb3VjaERhdGEgPSBmdW5jdGlvbiAodG91Y2hFdmVudClcbntcbiAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnBvcCgpO1xuXG4gICAgaWYoIXRvdWNoRGF0YSlcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcbiAgICB9XG5cbiAgICB0b3VjaERhdGEuaWRlbnRpZmllciA9IHRvdWNoRXZlbnQuaWRlbnRpZmllcjtcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdG91Y2hEYXRhLmdsb2JhbCwgdG91Y2hFdmVudC5jbGllbnRYLCB0b3VjaEV2ZW50LmNsaWVudFkgKTtcblxuICAgIGlmKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC54ID0gdG91Y2hEYXRhLmdsb2JhbC54IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnkgPSB0b3VjaERhdGEuZ2xvYmFsLnkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgfVxuXG4gICAgdG91Y2hFdmVudC5nbG9iYWxYID0gdG91Y2hEYXRhLmdsb2JhbC54O1xuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWSA9IHRvdWNoRGF0YS5nbG9iYWwueTtcblxuICAgIHJldHVybiB0b3VjaERhdGE7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hEYXRhIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX0gVGhlIHRvdWNoIGRhdGEgb2JqZWN0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5Ub3VjaERhdGEgPSBmdW5jdGlvbiAoIHRvdWNoRGF0YSApXG57XG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnB1c2goIHRvdWNoRGF0YSApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgaW50ZXJhY3Rpb24gbWFuYWdlclxuICpcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMubW91c2UgPSBudWxsO1xuXG4gICAgdGhpcy5ldmVudERhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZVVwID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gbnVsbDtcblxuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaEVuZCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMuX3RlbXBQb2ludCA9IG51bGw7XG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGludGVyYWN0aW9ucyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSW50ZXJhY3Rpb25EYXRhOiAgICByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpLFxuICAgIEludGVyYWN0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9JbnRlcmFjdGlvbk1hbmFnZXInKSxcbiAgICBpbnRlcmFjdGl2ZVRhcmdldDogIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxufTtcbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgaW50ZXJhY3RpdmUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmludGVyYWN0aW9uLmludGVyYWN0aXZlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBpbnRlcmFjdGl2ZVRhcmdldCA9IHtcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGJ1dHRvbk1vZGU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmVDaGlsZHJlbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGRlZmF1bHRDdXJzb3I6ICdwb2ludGVyJyxcblxuICAgIC8vIHNvbWUgaW50ZXJuYWwgY2hlY2tzLi5cblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb3ZlcjogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90b3VjaERvd246IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyYWN0aXZlVGFyZ2V0O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuLi9leHRyYXMnKSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5cbmZ1bmN0aW9uIHBhcnNlKHJlc291cmNlLCB0ZXh0dXJlKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgaW5mbyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXTtcbiAgICB2YXIgY29tbW9uID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XG5cbiAgICBkYXRhLmZvbnQgPSBpbmZvLmdldEF0dHJpYnV0ZSgnZmFjZScpO1xuICAgIGRhdGEuc2l6ZSA9IHBhcnNlSW50KGluZm8uZ2V0QXR0cmlidXRlKCdzaXplJyksIDEwKTtcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBwYXJzZUludChjb21tb24uZ2V0QXR0cmlidXRlKCdsaW5lSGVpZ2h0JyksIDEwKTtcbiAgICBkYXRhLmNoYXJzID0ge307XG5cbiAgICAvL3BhcnNlIGxldHRlcnNcbiAgICB2YXIgbGV0dGVycyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NoYXInKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdpZCcpLCAxMCk7XG5cbiAgICAgICAgdmFyIHRleHR1cmVSZWN0ID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3gnKSwgMTApICsgdGV4dHVyZS5mcmFtZS54LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3knKSwgMTApICsgdGV4dHVyZS5mcmFtZS55LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSwgMTApXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICB4T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneG9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB5T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneW9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB4QWR2YW5jZTogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hhZHZhbmNlJyksIDEwKSxcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9LFxuICAgICAgICAgICAgdGV4dHVyZTogbmV3IGNvcmUuVGV4dHVyZSh0ZXh0dXJlLmJhc2VUZXh0dXJlLCB0ZXh0dXJlUmVjdClcblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vcGFyc2Uga2VybmluZ3NcbiAgICB2YXIga2VybmluZ3MgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXJuaW5nJyk7XG4gICAgZm9yIChpID0gMDsgaSA8IGtlcm5pbmdzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdmaXJzdCcpLCAxMCk7XG4gICAgICAgIHZhciBzZWNvbmQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ3NlY29uZCcpLCAxMCk7XG4gICAgICAgIHZhciBhbW91bnQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2Ftb3VudCcpLCAxMCk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tzZWNvbmRdLmtlcm5pbmdbZmlyc3RdID0gYW1vdW50O1xuICAgIH1cblxuICAgIHJlc291cmNlLmJpdG1hcEZvbnQgPSBkYXRhO1xuXG4gICAgLy8gSSdtIGxlYXZpbmcgdGhpcyBhcyBhIHRlbXBvcmFyeSBmaXggc28gd2UgY2FuIHRlc3QgdGhlIGJpdG1hcCBmb250cyBpbiB2M1xuICAgIC8vIGJ1dCBpdCdzIHZlcnkgbGlrZWx5IHRvIGNoYW5nZVxuICAgIGV4dHJhcy5CaXRtYXBUZXh0LmZvbnRzW2RhdGEuZm9udF0gPSBkYXRhO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhIG9yIG5vdCB4bWwgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzWG1sKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBpZiBub3QgYml0bWFwIGZvbnQgZGF0YSwgdXNpbmcgc29tZSBzaWxseSBkdWNrLXR5cGluZ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF0uZ2V0QXR0cmlidXRlKCdmYWNlJykgPT09IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4bWxVcmwgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsKTtcblxuICAgICAgICBpZiAoeG1sVXJsID09PSAnLicpIHtcbiAgICAgICAgICAgIHhtbFVybCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmFzZVVybCAmJiB4bWxVcmwpIHtcbiAgICAgICAgICAgIC8vIGlmIGJhc2V1cmwgaGFzIGEgdHJhaWxpbmcgc2xhc2ggdGhlbiBhZGQgb25lIHRvIHhtbFVybCBzbyB0aGUgcmVwbGFjZSB3b3JrcyBiZWxvd1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVVybC5jaGFyQXQodGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEpID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYmFzZVVybCBmcm9tIHhtbFVybFxuICAgICAgICAgICAgeG1sVXJsID0geG1sVXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiB4bWxVcmwgbm93LCBpdCBuZWVkcyBhIHRyYWlsaW5nIHNsYXNoLiBFbnN1cmUgdGhhdCBpdCBkb2VzIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZW1wdHkuXG4gICAgICAgIGlmICh4bWxVcmwgJiYgeG1sVXJsLmNoYXJBdCh4bWxVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4dHVyZVVybCA9IHhtbFVybCArIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKVswXS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKTtcbiAgICAgICAgaWYgKGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKSB7XG4gICAgICAgICAgICAvL3JldXNlIGV4aXN0aW5nIHRleHR1cmVcbiAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBsb2FkIHRoZSB0ZXh0dXJlIGZvciB0aGUgZm9udFxuICAgICAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCB0ZXh0dXJlVXJsLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCByZXMudGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGxvYWRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmxvYWRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTG9hZGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlcicpLFxuXG4gICAgLy8gcGFyc2Vyc1xuICAgIGJpdG1hcEZvbnRQYXJzZXI6ICAgcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXI6ICByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgdGV4dHVyZVBhcnNlcjogICAgICByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBSZXNvdXJjZTogICAgICAgICAgIHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlXG59O1xuIiwidmFyIFJlc291cmNlTG9hZGVyID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJyksXG4gICAgdGV4dHVyZVBhcnNlciA9IHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyID0gcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIGJpdG1hcEZvbnRQYXJzZXIgPSByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKTtcblxuLyoqXG4gKlxuICogVGhlIG5ldyBsb2FkZXIsIGV4dGVuZHMgUmVzb3VyY2UgTG9hZGVyIGJ5IENoYWQgRW5nbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2VuZ2xlcmNqL3Jlc291cmNlLWxvYWRlclxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbG9hZGVyID0gUElYSS5sb2FkZXI7IC8vIHBpeGkgZXhwb3NlcyBhIHByZW1hZGUgaW5zdGFuY2UgZm9yIHlvdSB0byB1c2UuXG4gKiAvL29yXG4gKiB2YXIgbG9hZGVyID0gbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIoKTsgLy8geW91IGNhbiBhbHNvIGNyZWF0ZSB5b3VyIG93biBpZiB5b3Ugd2FudFxuICpcbiAqIGxvYWRlci5hZGQoJ2J1bm55JyxcImRhdGEvYnVubnkucG5nXCIpO1xuICpcbiAqIGxvYWRlci5vbmNlKCdjb21wbGV0ZScsb25Bc3NldHNMb2FkZWQpO1xuICpcbiAqIGxvYWRlci5sb2FkKCk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuUmVzb3VyY2VMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmxvYWRlcnNcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpXG57XG4gICAgUmVzb3VyY2VMb2FkZXIuY2FsbCh0aGlzLCBiYXNlVXJsLCBjb25jdXJyZW5jeSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IExvYWRlci5fcGl4aU1pZGRsZXdhcmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy51c2UoTG9hZGVyLl9waXhpTWlkZGxld2FyZVtpXSgpKTtcbiAgICB9XG59XG5cbkxvYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuTG9hZGVyLl9waXhpTWlkZGxld2FyZSA9IFtcbiAgICAvLyBwYXJzZSBhbnkgYmxvYiBpbnRvIG1vcmUgdXNhYmxlIG9iamVjdHMgKGUuZy4gSW1hZ2UpXG4gICAgUmVzb3VyY2VMb2FkZXIubWlkZGxld2FyZS5wYXJzaW5nLmJsb2IsXG4gICAgLy8gcGFyc2UgYW55IEltYWdlIG9iamVjdHMgaW50byB0ZXh0dXJlc1xuICAgIHRleHR1cmVQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIHNwcml0ZXNoZWV0UGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBiaXRtYXBGb250UGFyc2VyXG5dO1xuXG5Mb2FkZXIuYWRkUGl4aU1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLnB1c2goZm4pO1xufTtcblxuLy8gQWRkIGN1c3RvbSBleHRlbnRpb25zXG52YXIgUmVzb3VyY2UgPSBSZXNvdXJjZUxvYWRlci5SZXNvdXJjZTtcblxuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSgnZm50JywgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpO1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSwgaXRzIG5vdCBqc29uLCBvciBpdCBpc24ndCBzcHJpdGVzaGVldCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNKc29uIHx8ICFyZXNvdXJjZS5kYXRhLmZyYW1lcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByb3V0ZSA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKSk7XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybCggcmVzb3VyY2UudXJsICk7XG5cbiAgICAgICAgLy8gbG9hZCB0aGUgaW1hZ2UgZm9yIHRoaXMgc2hlZXRcbiAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCByb3V0ZSArICcvJyArIHJlc291cmNlLmRhdGEubWV0YS5pbWFnZSwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzID0ge307XG5cbiAgICAgICAgICAgIHZhciBmcmFtZXMgPSByZXNvdXJjZS5kYXRhLmZyYW1lcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmcmFtZXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBmcmFtZXNbaV0uZnJhbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVjdClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaW0gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC5oLCByZWN0LncpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC53LCByZWN0LmgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS50cmltbWVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmltID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnggLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnkgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLncgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLmggLyByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsaXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQhXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBzaXplLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUueSAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoIC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0IC89IHJlc29sdXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXNbaV0gPSBuZXcgY29yZS5UZXh0dXJlKHJlcy50ZXh0dXJlLmJhc2VUZXh0dXJlLCBzaXplLCBzaXplLmNsb25lKCksIHRyaW0sIGZyYW1lc1tpXS5yb3RhdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbaV0gPSByZXNvdXJjZS50ZXh0dXJlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZSBpZiB0aGUgZGF0YSBpcyBhbiBJbWFnZSBvYmplY3RcbiAgICAgICAgaWYgKHJlc291cmNlLmRhdGEgJiYgcmVzb3VyY2UuaXNJbWFnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGJhc2VUZXh0dXJlID0gbmV3IGNvcmUuQmFzZVRleHR1cmUocmVzb3VyY2UuZGF0YSwgbnVsbCwgY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwocmVzb3VyY2UudXJsKSk7XG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IHJlc291cmNlLnVybDtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmUgPSBuZXcgY29yZS5UZXh0dXJlKGJhc2VUZXh0dXJlKTtcbiAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1Y250aW9uc1xuICAgICAgICAgICAgY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSBiYXNlVGV4dHVyZTtcbiAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSByZXNvdXJjZS50ZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICB0ZW1wUG9seWdvbiA9IG5ldyBjb3JlLlBvbHlnb24oKTtcblxuLyoqXG4gKiBCYXNlIG1lc2ggY2xhc3NcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRvIHVzZVxuICogQHBhcmFtIFt2ZXJ0aWNlc10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdmVydGljZXNcbiAqIEBwYXJhbSBbdXZzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB1dnNcbiAqIEBwYXJhbSBbaW5kaWNlc10ge1VpbnQxNkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBpbmRpY2VzXG4gKiBAcGFyYW0gW2RyYXdNb2RlXSB7bnVtYmVyfSB0aGUgZHJhd01vZGUsIGNhbiBiZSBhbnkgb2YgdGhlIE1lc2guRFJBV19NT0RFUyBjb25zdHNcbiAqL1xuZnVuY3Rpb24gTWVzaCh0ZXh0dXJlLCB2ZXJ0aWNlcywgdXZzLCBpbmRpY2VzLCBkcmF3TW9kZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gdXZzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEsIDAsXG4gICAgICAgIDEsIDEsXG4gICAgICAgIDAsIDFdKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEwMCwgMCxcbiAgICAgICAgMTAwLCAxMDAsXG4gICAgICAgIDAsIDEwMF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICAvLyAgVE9ETyBhdXRvIGdlbmVyYXRlIHRoaXMgYmFzZWQgb24gZHJhdyBtb2RlIVxuICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXMgfHwgbmV3IFVpbnQxNkFycmF5KFswLCAxLCAzLCAyXSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBNZXNoIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gU2V0IHRvIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVtb3ZlIGFueSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRyaWFuZ2xlcyBpbiBjYW52YXMgbW9kZSBhcmUgYXV0b21hdGljYWxseSBhbnRpYWxpYXNlZCwgdXNlIHRoaXMgdmFsdWUgdG8gZm9yY2UgdHJpYW5nbGVzIHRvIG92ZXJsYXAgYSBiaXQgd2l0aCBlYWNoIG90aGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2F5IHRoZSBNZXNoIHNob3VsZCBiZSBkcmF3biwgY2FuIGJlIGFueSBvZiB0aGUge0BsaW5rIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVN9IGNvbnN0c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuZHJhd01vZGUgPSBkcmF3TW9kZSB8fCBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSDtcblxuICAgIC8vIHJ1biB0ZXh0dXJlIHNldHRlcjtcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBtZXNoIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5NZXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2g7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2g7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc2gucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkubWVzaC5NZXNoI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5tZXNoKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLm1lc2gucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4IHwgMCwgdHJhbnNmb3JtLnR5IHwgMCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHgsIHRyYW5zZm9ybS50eSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoKGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMoY29udGV4dCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIFRyaWFuZ2xlIE1lc2ggbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2ggPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoIC8gMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkgKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgsIChpbmRleCArIDIpLCAoaW5kZXggKyA0KSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIHRyaWFuZ2xlIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDMpXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXgwID0gaW5kaWNlc1tpXSAqIDIsIGluZGV4MSA9IGluZGljZXNbaSArIDFdICogMiwgaW5kZXgyID0gaW5kaWNlc1tpICsgMl0gKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4Mik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyBvbmUgb2YgdGhlIHRyaWFuZ2xlcyB0aGF0IGZvcm0gdGhpcyBNZXNoXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdmVydGljZXMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHZlcnRpY2VzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gdXZzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB1dnMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSBpbmRleDAge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDEge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgyIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlID0gZnVuY3Rpb24gKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpXG57XG4gICAgdmFyIHRleHR1cmVTb3VyY2UgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZTtcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aDtcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXgwXSwgeDEgPSB2ZXJ0aWNlc1tpbmRleDFdLCB4MiA9IHZlcnRpY2VzW2luZGV4Ml07XG4gICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgwICsgMV0sIHkxID0gdmVydGljZXNbaW5kZXgxICsgMV0sIHkyID0gdmVydGljZXNbaW5kZXgyICsgMV07XG5cbiAgICB2YXIgdTAgPSB1dnNbaW5kZXgwXSAqIHRleHR1cmVXaWR0aCwgdTEgPSB1dnNbaW5kZXgxXSAqIHRleHR1cmVXaWR0aCwgdTIgPSB1dnNbaW5kZXgyXSAqIHRleHR1cmVXaWR0aDtcbiAgICB2YXIgdjAgPSB1dnNbaW5kZXgwICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MSA9IHV2c1tpbmRleDEgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYyID0gdXZzW2luZGV4MiArIDFdICogdGV4dHVyZUhlaWdodDtcblxuICAgIGlmICh0aGlzLmNhbnZhc1BhZGRpbmcgPiAwKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmdYID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgcGFkZGluZ1kgPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciBjZW50ZXJYID0gKHgwICsgeDEgKyB4MikgLyAzO1xuICAgICAgICB2YXIgY2VudGVyWSA9ICh5MCArIHkxICsgeTIpIC8gMztcblxuICAgICAgICB2YXIgbm9ybVggPSB4MCAtIGNlbnRlclg7XG4gICAgICAgIHZhciBub3JtWSA9IHkwIC0gY2VudGVyWTtcblxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgwID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkwID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgLy9cblxuICAgICAgICBub3JtWCA9IHgxIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MSAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgxID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkxID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgbm9ybVggPSB4MiAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTIgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MiA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MiA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cblxuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGNvbnRleHQuY2xpcCgpO1xuXG4gICAgLy8gQ29tcHV0ZSBtYXRyaXggdHJhbnNmb3JtXG4gICAgdmFyIGRlbHRhID0gICh1MCAqIHYxKSAgICAgICsgKHYwICogdTIpICAgICAgKyAodTEgKiB2MikgICAgICAtICh2MSAqIHUyKSAgICAgIC0gKHYwICogdTEpICAgICAgLSAodTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQSA9ICh4MCAqIHYxKSAgICAgICsgKHYwICogeDIpICAgICAgKyAoeDEgKiB2MikgICAgICAtICh2MSAqIHgyKSAgICAgIC0gKHYwICogeDEpICAgICAgLSAoeDAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQiA9ICh1MCAqIHgxKSAgICAgICsgKHgwICogdTIpICAgICAgKyAodTEgKiB4MikgICAgICAtICh4MSAqIHUyKSAgICAgIC0gKHgwICogdTEpICAgICAgLSAodTAgKiB4Mik7XG4gICAgdmFyIGRlbHRhQyA9ICh1MCAqIHYxICogeDIpICsgKHYwICogeDEgKiB1MikgKyAoeDAgKiB1MSAqIHYyKSAtICh4MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB4MikgLSAodTAgKiB4MSAqIHYyKTtcbiAgICB2YXIgZGVsdGFEID0gKHkwICogdjEpICAgICAgKyAodjAgKiB5MikgICAgICArICh5MSAqIHYyKSAgICAgIC0gKHYxICogeTIpICAgICAgLSAodjAgKiB5MSkgICAgICAtICh5MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFFID0gKHUwICogeTEpICAgICAgKyAoeTAgKiB1MikgICAgICArICh1MSAqIHkyKSAgICAgIC0gKHkxICogdTIpICAgICAgLSAoeTAgKiB1MSkgICAgICAtICh1MCAqIHkyKTtcbiAgICB2YXIgZGVsdGFGID0gKHUwICogdjEgKiB5MikgKyAodjAgKiB5MSAqIHUyKSArICh5MCAqIHUxICogdjIpIC0gKHkwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHkyKSAtICh1MCAqIHkxICogdjIpO1xuXG4gICAgY29udGV4dC50cmFuc2Zvcm0oZGVsdGFBIC8gZGVsdGEsIGRlbHRhRCAvIGRlbHRhLFxuICAgICAgICBkZWx0YUIgLyBkZWx0YSwgZGVsdGFFIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQyAvIGRlbHRhLCBkZWx0YUYgLyBkZWx0YSk7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlU291cmNlLCAwLCAwKTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBmbGF0IE1lc2hcbiAqXG4gKiBAcGFyYW0gTWVzaCB7UElYSS5tZXNoLk1lc2h9IFRoZSBNZXNoIHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUucmVuZGVyTWVzaEZsYXQgPSBmdW5jdGlvbiAoTWVzaClcbntcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICB2YXIgdmVydGljZXMgPSBNZXNoLnZlcnRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aC8yO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgZm9yICh2YXIgaT0xOyBpIDwgbGVuZ3RoLTI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkqMjtcblxuICAgICAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleF0sICAgeDEgPSB2ZXJ0aWNlc1tpbmRleCsyXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleCs0XTtcbiAgICAgICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgrMV0sIHkxID0gdmVydGljZXNbaW5kZXgrM10sIHkyID0gdmVydGljZXNbaW5kZXgrNV07XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVwZGF0ZUZyYW1lID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBtZXNoIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5NZXNoLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICghdGhpcy5fY3VycmVudEJvdW5kcykge1xuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1pblkgPSBJbmZpbml0eTtcblxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IG47IGkgKz0gMikge1xuICAgICAgICAgICAgdmFyIHJhd1ggPSB2ZXJ0aWNlc1tpXSwgcmF3WSA9IHZlcnRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciB4ID0gKGEgKiByYXdYKSArIChjICogcmF3WSkgKyB0eDtcbiAgICAgICAgICAgIHZhciB5ID0gKGQgKiByYXdZKSArIChiICogcmF3WCkgKyB0eTtcblxuICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcblxuICAgICAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG4gICAgICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5YID09PSAtSW5maW5pdHkgfHwgbWF4WSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIG1lc2guIFdvcmtzIG9ubHkgZm9yIFRSSUFOR0xFX01FU0hcbiAqXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4gKi9cbk1lc2gucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKSB7XG4gICAgaWYgKCF0aGlzLmdldEJvdW5kcygpLmNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgcG9pbnRzID0gdGVtcFBvbHlnb24ucG9pbnRzO1xuICAgIHZhciBpLCBsZW47XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUykge1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICAgICAgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgLy9UT0RPOiBpbmxpbmUgdGhpcy5cbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Mykge1xuICAgICAgICAgICAgdmFyIGluZDAgPSBpbmRpY2VzW2ldKjIsIGluZDEgPSBpbmRpY2VzW2krMV0qMiwgaW5kMiA9IGluZGljZXNbaSsyXSoyO1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaW5kMF07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpbmQwKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaW5kMV07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpbmQxKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaW5kMl07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpbmQyKzFdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Nikge1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaSsyXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2krM107XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpKzRdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaSs1XTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEaWZmZXJlbnQgZHJhd2luZyBidWZmZXIgbW9kZXMgc3VwcG9ydGVkXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSFxuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gKi9cbk1lc2guRFJBV19NT0RFUyA9IHtcbiAgICBUUklBTkdMRV9NRVNIOiAwLFxuICAgIFRSSUFOR0xFUzogMVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG5cbi8qKlxuICogVGhlIFBsYW5lIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIFBsYW5lID0gbmV3IFBJWEkuUGxhbmUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgUGxhbmUuXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNYIC0gVGhlIG51bWJlciBveCB4IHNlZ21lbnRzXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNZIC0gVGhlIG51bWJlciBvZiB5IHNlZ21lbnRzXG4gKlxuICovXG5mdW5jdGlvbiBQbGFuZSh0ZXh0dXJlLCBzZWdtZW50c1gsIHNlZ21lbnRzWSlcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgUGxhbmUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWdtZW50c1ggPSAgc2VnbWVudHNYIHx8IDEwO1xuICAgIHRoaXMuc2VnbWVudHNZID0gc2VnbWVudHNZIHx8IDEwO1xuXG4gICAgdGhpcy5kcmF3TW9kZSA9IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVM7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUGxhbmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKTtcblBsYW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsYW5lO1xubW9kdWxlLmV4cG9ydHMgPSBQbGFuZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblBsYW5lLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciB0b3RhbCA9IHRoaXMuc2VnbWVudHNYICogdGhpcy5zZWdtZW50c1k7XG4gICAgdmFyIHZlcnRzID0gW107XG4gICAgdmFyIGNvbG9ycyA9IFtdO1xuICAgIHZhciB1dnMgPSBbXTtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuXG4gIC8vICB0ZXh0dXJlLndpZHRoID0gODAwIHRleHR1cmUud2lkdGggfHwgODAwO1xuIC8vICAgdGV4dHVyZS5oZWlnaHQgPSA4MDAvL3RleHR1cmUuaGVpZ2h0IHx8IDgwMDtcblxuICAgIHZhciBzZWdtZW50c1hTdWIgPSB0aGlzLnNlZ21lbnRzWCAtIDE7XG4gICAgdmFyIHNlZ21lbnRzWVN1YiA9IHRoaXMuc2VnbWVudHNZIC0gMTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB2YXIgc2l6ZVggPSB0ZXh0dXJlLndpZHRoIC8gc2VnbWVudHNYU3ViO1xuICAgIHZhciBzaXplWSA9IHRleHR1cmUuaGVpZ2h0IC8gc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcblxuICAgICAgICB2YXIgeCA9IChpICUgdGhpcy5zZWdtZW50c1gpO1xuICAgICAgICB2YXIgeSA9ICggKGkgLyB0aGlzLnNlZ21lbnRzWCApIHwgMCApO1xuXG5cbiAgICAgICAgdmVydHMucHVzaCgoeCAqIHNpemVYKSxcbiAgICAgICAgICAgICAgICAgICAoeSAqIHNpemVZKSk7XG5cbiAgICAgICAgLy8gdGhpcyB3b3JrcyBmb3IgcmVjdGFuZ3VsYXIgdGV4dHVyZXMuIFxuICAgICAgICB1dnMucHVzaCh0ZXh0dXJlLl91dnMueDAgKyAodGV4dHVyZS5fdXZzLngxIC0gdGV4dHVyZS5fdXZzLngwKSAqICh4IC8gKHRoaXMuc2VnbWVudHNYLTEpKSwgdGV4dHVyZS5fdXZzLnkwICsgKHRleHR1cmUuX3V2cy55My10ZXh0dXJlLl91dnMueTApICogKHkvICh0aGlzLnNlZ21lbnRzWS0xKSkpO1xuICAgICAgfVxuXG4gICAgLy8gIGNvbnNcblxuICAgIHZhciB0b3RhbFN1YiA9IHNlZ21lbnRzWFN1YiAqIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFN1YjsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHhwb3MgPSBpICUgc2VnbWVudHNYU3ViO1xuICAgICAgICB2YXIgeXBvcyA9IChpIC8gc2VnbWVudHNYU3ViICkgfCAwO1xuXG5cbiAgICAgICAgdmFyICB2YWx1ZSA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTIgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuICAgICAgICB2YXIgIHZhbHVlMyA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWU0ID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMyk7XG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZTIsIHZhbHVlNCwgdmFsdWUzKTtcbiAgICB9XG5cblxuICAgIC8vY29uc29sZS5sb2coaW5kaWNlcylcbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0cyk7XG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHV2cyk7XG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvbG9ycyk7XG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBsYW5lLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUGxhbmUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSByb3BlIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIHJvcGUgPSBuZXcgUElYSS5Sb3BlKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIHJvcGUuXG4gKiBAcGFyYW0ge1BJWEkuUG9pbnRbXX0gcG9pbnRzIC0gQW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuUG9pbnR9IG9iamVjdHMgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAqXG4gKi9cbmZ1bmN0aW9uIFJvcGUodGV4dHVyZSwgcG9pbnRzKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfSBBbiBhcnJheSBvZiBwb2ludHMgdGhhdCBkZXRlcm1pbmUgdGhlIHJvcGVcbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBvZiB2ZXJ0aWNlcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IFRoZSBXZWJHTCBVdnMgb2YgdGhlIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBjb21wb25lbnRzXG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSByb3BlIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICAgdGhpcy5yZWZyZXNoKCk7XG59XG5cblxuLy8gY29uc3RydWN0b3JcblJvcGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNZXNoLnByb3RvdHlwZSk7XG5Sb3BlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvcGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvcGU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5Sb3BlLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICAvLyBpZiB0b28gbGl0dGxlIHBvaW50cywgb3IgdGV4dHVyZSBoYXNuJ3QgZ290IFVWcyBzZXQgeWV0IGp1c3QgbW92ZSBvbi5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEgfHwgIXRoaXMuX3RleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cbiAgICB2YXIgdGV4dHVyZVV2cyA9IHRoaXMuX3RleHR1cmUuX3V2cztcbiAgICB2YXIgb2Zmc2V0ID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MCk7XG4gICAgdmFyIGZhY3RvciA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDIgLSB0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkyIC0gdGV4dHVyZVV2cy55MCk7XG5cbiAgICB1dnNbMF0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzFdID0gMCArIG9mZnNldC55O1xuICAgIHV2c1syXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgIGNvbG9yc1swXSA9IDE7XG4gICAgY29sb3JzWzFdID0gMTtcblxuICAgIGluZGljZXNbMF0gPSAwO1xuICAgIGluZGljZXNbMV0gPSAxO1xuXG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCBhbW91bnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcbiAgICAgICAgLy8gdGltZSB0byBkbyBzb21lIHNtYXJ0IGRyYXdpbmchXG4gICAgICAgIGFtb3VudCA9IGkgLyAodG90YWwtMSk7XG5cbiAgICAgICAgdXZzW2luZGV4XSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCsxXSA9IDAgKyBvZmZzZXQueTtcblxuICAgICAgICB1dnNbaW5kZXgrMl0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBjb2xvcnNbaW5kZXhdID0gMTtcbiAgICAgICAgY29sb3JzW2luZGV4KzFdID0gMTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGluZGV4O1xuICAgICAgICBpbmRpY2VzW2luZGV4ICsgMV0gPSBpbmRleCArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFJvcGUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9pbnQgPSBwb2ludHNbMF07XG4gICAgdmFyIG5leHRQb2ludDtcbiAgICB2YXIgcGVycFggPSAwO1xuICAgIHZhciBwZXJwWSA9IDA7XG5cbiAgICAvLyB0aGlzLmNvdW50IC09IDAuMjtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCByYXRpbywgcGVycExlbmd0aCwgbnVtO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG5cbiAgICAgICAgaWYgKGkgPCBwb2ludHMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50c1tpKzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwWSA9IC0obmV4dFBvaW50LnggLSBsYXN0UG9pbnQueCk7XG4gICAgICAgIHBlcnBYID0gbmV4dFBvaW50LnkgLSBsYXN0UG9pbnQueTtcblxuICAgICAgICByYXRpbyA9ICgxIC0gKGkgLyAodG90YWwtMSkpKSAqIDEwO1xuXG4gICAgICAgIGlmIChyYXRpbyA+IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhdGlvID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBMZW5ndGggPSBNYXRoLnNxcnQocGVycFggKiBwZXJwWCArIHBlcnBZICogcGVycFkpO1xuICAgICAgICBudW0gPSB0aGlzLl90ZXh0dXJlLmhlaWdodCAvIDI7IC8vKDIwICsgTWF0aC5hYnMoTWF0aC5zaW4oKGkgKyB0aGlzLmNvdW50KSAqIDAuMykgKiA1MCkgKSogcmF0aW87XG4gICAgICAgIHBlcnBYIC89IHBlcnBMZW5ndGg7XG4gICAgICAgIHBlcnBZIC89IHBlcnBMZW5ndGg7XG5cbiAgICAgICAgcGVycFggKj0gbnVtO1xuICAgICAgICBwZXJwWSAqPSBudW07XG5cbiAgICAgICAgdmVydGljZXNbaW5kZXhdID0gcG9pbnQueCArIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsxXSA9IHBvaW50LnkgKyBwZXJwWTtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMl0gPSBwb2ludC54IC0gcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzNdID0gcG9pbnQueSAtIHBlcnBZO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IHBvaW50O1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5tZXNoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1lc2g6ICAgICAgICAgICByZXF1aXJlKCcuL01lc2gnKSxcbiAgICBQbGFuZTogICAgICAgICAgIHJlcXVpcmUoJy4vUGxhbmUnKSxcbiAgICBSb3BlOiAgICAgICAgICAgcmVxdWlyZSgnLi9Sb3BlJyksXG4gICAgTWVzaFJlbmRlcmVyOiAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFJlbmRlcmVyJyksXG4gICAgTWVzaFNoYWRlcjogICAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFNoYWRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgTWVzaCA9IHJlcXVpcmUoJy4uL01lc2gnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBNZXNoUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL01lc2hSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDE1MDAwKTtcblxuICAgIC8vVE9ETyB0aGlzIGNvdWxkIGJlIGEgc2luZ2xlIGJ1ZmZlciBzaGFyZWQgYW1vbmdzdCBhbGwgcmVuZGVyZXJzIGFzIHdlIHJldXNlIHRoaXMgc2V0IHVwIGluIG1vc3QgcmVuZGVyZXJzXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCAxNTAwMDsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59XG5cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hSZW5kZXJlcjtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoJywgTWVzaFJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIGlmKCFtZXNoLl92ZXJ0ZXhCdWZmZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9pbml0V2ViR0wobWVzaCk7XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcixcbiAgICAgICAgZ2wgPSByZW5kZXJlci5nbCxcbiAgICAgICAgdGV4dHVyZSA9IG1lc2guX3RleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIHNoYWRlciA9IG1lc2guc2hhZGVyOy8vIHx8IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuXG4gICAgdmFyIGRyYXdNb2RlID0gbWVzaC5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0ggPyBnbC5UUklBTkdMRV9TVFJJUCA6IGdsLlRSSUFOR0xFUztcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKG1lc2guYmxlbmRNb2RlKTtcblxuICAgIC8vVE9ETyBjYWNoZSBjdXN0b20gc3RhdGUuLlxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHNoYWRlci5zaGFkZXJzW2dsLmlkXSB8fCBzaGFkZXIuZ2V0U2hhZGVyKHJlbmRlcmVyKTsvLyA6IHNoYWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXgudmFsdWUgPSBtZXNoLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXgudmFsdWUgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSBtZXNoLndvcmxkQWxwaGE7XG5cbiAgICBzaGFkZXIuc3luY1VuaWZvcm1zKCk7XG5cbiAgICBpZiAoIW1lc2guZGlydHkpXG4gICAge1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgbWVzaC52ZXJ0aWNlcyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG1lc2guaW5kaWNlcyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgbWVzaC5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb250IG5lZWQgdG8gdXBsb2FkIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgfVxuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGRyYXdNb2RlLCBtZXNoLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG5cbn07XG5cbi8qKlxuICogUHJlcGFyZXMgYWxsIHRoZSBidWZmZXJzIHRvIHJlbmRlciB0aGlzIG1lc2hcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuX2luaXRXZWJHTCA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIC8vIGJ1aWxkIHRoZSBzdHJpcCFcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgbWVzaC5fdmVydGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5faW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl91dkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG5cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICBpZihtZXNoLmNvbG9ycyl7XG4gICAgICAgIG1lc2guX2NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl9jb2xvckJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLmNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbn07XG5cblxuLyoqXG4gKiBFbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IG1lc2ggcmVuZGVyZXIuXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBcblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBNZXNoIHJlbmRlcmVyXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgV2ViR0wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgY29yZS5TaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogYWxwaGEgOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVZlcnRleFBvc2l0aW9uOjAsXG4gICAgICAgICAgICBhVGV4dHVyZUNvb3JkOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cbk1lc2hTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNoYWRlci5wcm90b3R5cGUpO1xuTWVzaFNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoU2hhZGVyO1xuXG5jb3JlLlNoYWRlck1hbmFnZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2hTaGFkZXInLCBNZXNoU2hhZGVyKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3NpZ25cblxuaWYgKCFNYXRoLnNpZ24pXG57XG4gICAgTWF0aC5zaWduID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCA9ICt4O1xuICAgICAgICBpZiAoeCA9PT0gMCB8fCBpc05hTih4KSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPiAwID8gMSA6IC0xO1xuICAgIH07XG59XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9vYmplY3QtYXNzaWduXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5cbmlmICghT2JqZWN0LmFzc2lnbilcbntcbiAgICBPYmplY3QuYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xufVxuIiwicmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL3JlcXVlc3RBbmltYXRpb25GcmFtZScpO1xucmVxdWlyZSgnLi9NYXRoLnNpZ24nKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTU3OTY3MVxuLy8gaHR0cDovL3VwZGF0ZXMuaHRtbDVyb2Nrcy5jb20vMjAxMi8wNS9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUtQVBJLW5vdy13aXRoLXN1Yi1taWxsaXNlY29uZC1wcmVjaXNpb25cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RpbWhhbGwvNDA3ODYxNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0ZpbmFuY2lhbC1UaW1lcy9wb2x5ZmlsbC1zZXJ2aWNlL3RyZWUvbWFzdGVyL3BvbHlmaWxscy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcblxuLy8gRXhwZWN0ZWQgdG8gYmUgdXNlZCB3aXRoIEJyb3dzZXJmaXlcbi8vIEJyb3dzZXJpZnkgYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZSB1c2Ugb2YgYGdsb2JhbGAgYW5kIHBhc3NlcyB0aGVcbi8vIGNvcnJlY3QgcmVmZXJlbmNlIG9mIGBnbG9iYWxgLCBgc2VsZmAsIGFuZCBmaW5hbGx5IGB3aW5kb3dgXG5cbi8vIERhdGUubm93XG5pZiAoIShEYXRlLm5vdyAmJiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lKSkge1xuICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcbn1cblxuLy8gcGVyZm9ybWFuY2Uubm93XG5pZiAoIShnbG9iYWwucGVyZm9ybWFuY2UgJiYgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdykpIHtcbiAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIWdsb2JhbC5wZXJmb3JtYW5jZSkge1xuICAgICAgICBnbG9iYWwucGVyZm9ybWFuY2UgPSB7fTtcbiAgICB9XG4gICAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgfTtcbn1cblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xudmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xuXG5mb3IodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8XG4gICAgICAgIGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xufVxuXG5pZiAoIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCksXG4gICAgICAgICAgICBkZWxheSA9IDE2ICsgbGFzdFRpbWUgLSBjdXJyZW50VGltZTtcblxuICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgIH07XG59XG5cbmlmICghZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xufVxuIl19 //# sourceMappingURL=pixi.js.map diff --git a/bin/pixi.js.map b/bin/pixi.js.map index 1d72f43..3256814 100644 --- a/bin/pixi.js.map +++ b/bin/pixi.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi.js","sourceRoot":"./","sourcesContent":[]} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi.js","sourceRoot":"./","sourcesContent":[]} \ No newline at end of file diff --git a/bin/pixi.min.js b/bin/pixi.min.js index db31e4a..ee1b45b 100644 --- a/bin/pixi.min.js +++ b/bin/pixi.min.js @@ -1,11 +1,11 @@ !function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&this.texture.uploadData(null,t,e),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=i.fromData(t,null,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a.unbind(),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a.unbind(),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t||null)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){return this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate(),this},i.prototype.unbind=function(){return this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null),this},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=X(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function P(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function D(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},X=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},Y="function"==typeof setImmediate&&setImmediate,z=Y?function(t){Y(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=Y?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=X(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return P(t,1,e)},N.log=D("log"),N.dir=D("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return P.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return D.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",P=/^xn--/,D=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r); g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v,p=""),d=decodeURIComponent(c),f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,P=M.length;P>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var D=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(D.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=D.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var X=i.indexOf("#");-1!==X&&(this.hash=i.substr(X),i=i.slice(0,X));var Y=i.indexOf("?");if(-1!==Y?(this.search=i.substr(Y),this.query=i.substr(Y+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,Y)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","gl-matrix":"git+https://github.com/toji/gl-matrix.git","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirtyTransform=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":56,"../textures/RenderTexture":100,"../utils":107,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.transform=new a,this.position=this.transform.position,this.scale=this.transform.scale,this.pivot=this.transform.pivot,this.skew=this.transform.skew,this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),t("./Transform")),h=new n.Matrix,u={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i;var l=function(t){this.doc=t,this.x=0,this.y=0};Object.defineProperties(l.prototype,{x:{get:function(){return this.doc.position.x},set:function(t){this.doc.position.x=t,this.doc.dirtyTransform=!0}},y:{get:function(){return this.doc.posiiton.y},set:function(t){this.doc.position.y=t,this.doc.dirtyTransform=!0}}}),Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return h.tx=-i.x,h.ty=-i.y,n.render(this,h),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":56,"../textures/RenderTexture":100,"./Transform":41,eventemitter3:25}],41:[function(t,e,r){function i(){this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.position=new n.Point(0),this.scale=new n.Point(1,1),this.pivot=new n.Point(0),this.skew=new n.Point(0),this.rotation=0,this.dirty=!0}var n=t("../math");i.prototype.constructor=i,i.prototype.updateTransform=function(t){var e=t.worldTransform,r=this.worldTransform,i=this.localTransform;return i.a=this._cr*this.scale.x,i.b=this._sr*this.scale.x,i.c=-this._sr*this.scale.y,i.d=this._cr*this.scale.y,i.tx=this.position.x-(this.pivot.x*i.a+this.pivot.y*i.c),i.ty=this.position.y-(this.pivot.x*i.b+this.pivot.y*i.d),r.a=i.a*e.a+i.b*e.c,r.b=i.a*e.b+i.b*e.d,r.c=i.c*e.a+i.d*e.c,r.d=i.c*e.b+i.d*e.d,r.tx=i.tx*e.a+i.ty*e.c+e.tx,r.ty=i.tx*e.b+i.ty*e.d+e.ty,this.dirty=!1,!0},e.exports=i},{"../math":56}],42:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils":107,"./WebGLGraphicsData":45,"./shaders/PrimitiveShader":46,"./utils/buildCircle":47,"./utils/buildComplexPoly":48,"./utils/buildLine":49,"./utils/buildPoly":50,"./utils/buildRectangle":51,"./utils/buildRoundedRectangle":52,earcut:24}],45:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],46:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],47:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":107,"./buildLine":49}],48:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":107,"./buildLine":49}],49:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":56,"../../../utils":107}],50:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":107}],51:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":107,"./buildLine":49}],52:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":107,"./buildLine":49}],53:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),BaseRenderTexture:t("./textures/BaseRenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":42,"./graphics/GraphicsData":43,"./graphics/webgl/GraphicsRenderer":44,"./math":56,"./particles/ParticleContainer":62,"./particles/webgl/ParticleRenderer":64,"./renderers/canvas/CanvasRenderer":67,"./renderers/canvas/utils/CanvasBuffer":68,"./renderers/canvas/utils/CanvasGraphics":69,"./renderers/webgl/WebGLRenderer":73,"./renderers/webgl/filters/AbstractFilter":74,"./renderers/webgl/filters/FXAAFilter":75,"./renderers/webgl/filters/SpriteMaskFilter":76,"./renderers/webgl/managers/ShaderManager":80,"./renderers/webgl/managers/WebGLManager":82,"./renderers/webgl/shaders/Shader":85,"./renderers/webgl/utils/ObjectRenderer":88,"./renderers/webgl/utils/RenderTarget":90,"./sprites/Sprite":94,"./sprites/webgl/SpriteRenderer":95,"./text/Text":97,"./textures/BaseRenderTexture":98,"./textures/BaseTexture":99,"./textures/RenderTexture":100,"./textures/Texture":101,"./textures/TextureUvs":102,"./textures/VideoBaseTexture":103,"./ticker":105,"./utils":107,"pixi-gl-core":1}],54:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":55}],55:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],56:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":54,"./Point":55,"./shapes/Circle":57,"./shapes/Ellipse":58,"./shapes/Polygon":59,"./shapes/Rectangle":60,"./shapes/RoundedRectangle":61}],57:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":60}],58:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":60}],59:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":55}],60:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],62:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"./ParticleBuffer":63,"./ParticleShader":65}],65:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{ -uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":86}],66:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,transform:{worldTransform:new o.Matrix},worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":56,"../utils":107,eventemitter3:25}],67:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":56,"../../utils":107,"../SystemRenderer":66,"./utils/CanvasMaskManager":70}],68:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],69:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],70:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":69}],71:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":86}],75:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\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\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\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)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":74}],76:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":56,"./AbstractFilter":74}],77:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":82}],78:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":107}],86:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":85}],87:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],88:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":82}],89:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],90:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=(t("pixi-gl-core").GLTexture,t("pixi-gl-core").GLFramebuffer),s=t("./StencilMaskStack"),a=function(t,e,r,a,h,u){this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=h||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.defaultFrame=new PIXI.Rectangle,this.destinationFrame=null,this.sourceFrame=null,this.stencilBuffer=null,this.stencilMaskStack=new s,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=a||n.SCALE_MODES.DEFAULT,this.root=u,this.frameBuffer=o.createRGBA(t,100,100),this.root?this.frameBuffer.framebuffer=null:this.texture=this.frameBuffer.texture,this.resize(e,r)};a.prototype.constructor=a,e.exports=a,a.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},a.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},a.prototype.activate=function(t,e){var r=this.gl;this.frameBuffer.bind(),this.destinationFrame=t||this.destinationFrame||this.defaultFrame,this.sourceFrame=e||this.sourceFrame||t,this.calculateProjection(this.destinationFrame,this.sourceFrame),this.transform&&this.projectionMatrix.append(this.transform),this.destinationFrame!==this.sourceFrame?(r.enable(r.SCISSOR_TEST),r.scissor(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)):r.disable(r.SCISSOR_TEST),r.viewport(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)},a.prototype.calculateProjection=function(t,e){var r=this.projectionMatrix;e=e||t,r.identity(),this.root?(r.a=1/t.width*2,r.d=-1/t.height*2,r.tx=-1-e.x*r.a,r.ty=1-e.y*r.d):(r.a=1/t.width*2,r.d=1/t.height*2,r.tx=-1-e.x*r.a,r.ty=-1-e.y*r.d)},a.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.defaultFrame.width=t,this.defaultFrame.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},a.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":56,"../../../utils":107,"./StencilMaskStack":91,"pixi-gl-core":1}],91:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],92:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],93:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],94:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.transform.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0); -}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],97:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=t,this.height=e,this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(t){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear(!1,t))},i.prototype.renderWebGL=function(t,e,r,i,n){if(this.valid){if(n=void 0!==n?n:!0,this.textureBuffer.transform=r,this.textureBuffer.activate(),e.worldAlpha=1,n){e.worldTransform.identity(),e.currentBounds=null;var o,s,a=e.children;for(o=0,s=a.length;s>o;++o)a[o].updateTransform()}p.width=t.height,p.height=t.width;var h=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.textureBuffer.activate(t,p),console.log(e),this.renderer.renderDisplayObject(e,this.textureBuffer,i),this.renderer.filterManager=h}},i.prototype.renderCanvas=function(t,e,r,i,n){if(this.valid){n=!!n;var o=c;o.identity(),r&&o.append(r),o.tx+=t.x,o.ty+=t.y;var s=e.worldTransform;e.worldTransform=o,e.worldAlpha=1;var a,h,u=e.children;for(a=0,h=u.length;h>a;++a)u[a].updateTransform();i&&this.textureBuffer.clear();var l=this.textureBuffer.context,p=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(e,l),this.renderer.resolution=p,e.worldTransform===o&&(e.worldTransform=s)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(t){var e=new Image;return e.src=this.getBase64(t),e},i.prototype.getBase64=function(t){return this.getCanvas(t).toDataURL()},i.prototype.getCanvas=function(t){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution,i=this.renderer.gl,n=new Uint8Array(4*e*r);i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null);var o=new h(e,r),s=o.context.getImageData(0,0,e,r);return s.data.set(n),o.context.putImageData(s,0,0),o.canvas}if(t||(t=p,t.width=this.textureBuffer.canvas.width,t.height=this.textureBuffer.canvas.height),t.width===this.textureBuffer.canvas.width&&t.height===this.textureBuffer.canvas.height)return this.textureBuffer.canvas;var a=this.resolution,o=new h(t.width*a,t.height*a),s=this.textureBuffer.context.getImageData(t.x*a,t.y*a,t.width*a,t.height*a);return o.context.putImageData(s,0,0),o.canvas},i.prototype.getPixels=function(t){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var i=this.renderer.gl,n=new Uint8Array(4*e*r);return i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null),n}return this.textureBuffer.canvas.getContext("2d").getImageData(t.x*this.resolution,t.y*this.resolution,e,r).data},i.prototype.getPixel=function(t,e,r){return p.x=e,p.y=r,p.width=1/this.resolution,p.height=1/this.resolution,t&&(p.x+=t.x,p.y+=t.y),this.getPixels(p)}},{"../const":38,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/webgl/managers/FilterManager":78,"../renderers/webgl/utils/RenderTarget":90,"./BaseTexture":99,"./Texture":101}],99:[function(t,e,r){function i(t,e,r){s.call(this),this.uid=n.uid(),this.resolution=r||1,this.width=100,this.height=100,this.realWidth=100,this.realHeight=100,this.scaleMode=e||o.SCALE_MODES.DEFAULT,this.hasLoaded=!1,this.isLoading=!1,this.source=null,this.premultipliedAlpha=!0,this.imageUrl=null,this.isPowerOfTwo=!1,this.mipmap=!1,this._glTextures={},this._active=!1,this._id=0,t&&this.loadSource(t)}var n=t("../utils"),o=t("../const"),s=t("eventemitter3");i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.update=function(){this.realWidth=this.source.naturalWidth||this.source.width,this.realHeight=this.source.naturalHeight||this.source.height,this.width=this.realWidth/this.resolution,this.height=this.realHeight/this.resolution,this.isPowerOfTwo=n.isPowerOfTwo(this.realWidth,this.realHeight),this.emit("update",this)},i.prototype.loadSource=function(t){var e=this.isLoading;if(this.hasLoaded=!1,this.isLoading=!1,e&&this.source&&(this.source.onload=null,this.source.onerror=null),this.source=t,(this.source.complete||this.source.getContext)&&this.source.width&&this.source.height)this._sourceLoaded();else if(!t.getContext){this.isLoading=!0;var r=this;t.onload=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r._sourceLoaded(),r.emit("loaded",r))},t.onerror=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r.emit("error",r))},t.complete&&t.src&&(this.isLoading=!1,t.onload=null,t.onerror=null,t.width&&t.height?(this._sourceLoaded(),e&&this.emit("loaded",this)):e&&this.emit("error",this))}},i.prototype._sourceLoaded=function(){this.hasLoaded=!0,this.update()},i.prototype.destroy=function(){this.imageUrl?(delete n.BaseTextureCache[this.imageUrl],delete n.TextureCache[this.imageUrl],this.imageUrl=null,navigator.isCocoonJS||(this.source.src="")):this.source&&this.source._pixiId&&delete n.BaseTextureCache[this.source._pixiId],this.source=null,this.dispose()},i.prototype.dispose=function(){this.emit("dispose",this)},i.prototype.updateSourceImage=function(t){this.source.src=t,this.loadSource(this.source)},i.fromImage=function(t,e,r){var o=n.BaseTextureCache[t];if(void 0===e&&0!==t.indexOf("data:")&&(e=!0),!o){var s=new Image;e&&(s.crossOrigin=""),o=new i(s,r),o.imageUrl=t,s.src=t,n.BaseTextureCache[t]=o,o.resolution=n.getResolutionOfUrl(t)}return o},i.fromCanvas=function(t,e){t._pixiId||(t._pixiId="canvas_"+n.uid());var r=n.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),n.BaseTextureCache[t._pixiId]=r),r}},{"../const":38,"../utils":107,eventemitter3:25}],100:[function(t,e,r){function i(t,e){if(!renderer)throw new Error("Unable to create RenderTexture, you must pass a renderer into the constructor.");o.call(this,t,e),this.valid=!0,this._updateUvs()}var n=t("./BaseRenderTexture"),o=t("./Texture"),s=t("../math");t("../const"),new s.Matrix;i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.resize=function(t,e,r){this.valid=t>0&&e>0,this._frame.width=this.crop.width=t,this._frame.height=this.crop.height=e,r&&this.baseTexture.resize(t,e),this._updateUvs()},i.prototype.clear=function(){this.valid&&this.baseTexture.clear(this.frame)},i.prototype.render=function(t,e,r,i){this.valid&&this.baseTexture.render(this.frame,t,e,r,i)},i.prototype.getImage=function(){return this.baseTexture.getImage(this.frame)},i.prototype.getBase64=function(){return this.getBase64.getImage(this.frame)},i.prototype.getCanvas=function(){return this.baseTexture.getCanvas(this.frame)},i.prototype.getPixels=function(){return this.baseTexture.getPixels(this.frame)},i.prototype.getPixel=function(t,e){return this.baseTexture.getPixel(this.frame,t,e)},i.create=function(t,e,r,o,s){return new i(new n(t,e,r,o,s))}},{"../const":38,"../math":56,"./BaseRenderTexture":98,"./Texture":101}],101:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":56,"../utils":107,"./BaseTexture":99,"./TextureUvs":102,"./VideoBaseTexture":103,eventemitter3:25}],102:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],103:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],105:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":104}],106:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],107:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":108,async:16,eventemitter3:25}],108:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],109:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":53, -"./extras":116,"./filters":133,"./mesh":158}],110:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":53}],118:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":53,"../blur/BlurXFilter":121,"../blur/BlurYFilter":122}],119:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){ -t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":53}],125:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":53}],126:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":53}],127:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":53}],128:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":53}],129:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":53}],130:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":53}],140:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":53}],141:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":53,"./TiltShiftXFilter":142,"./TiltShiftYFilter":143}],142:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":140}],143:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":140}],144:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":53}],145:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":53,"./deprecation":109,"./extras":116,"./filters":133,"./interaction":148,"./loaders":151,"./mesh":158,"./polyfill":163}],146:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":53}],147:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){ -var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":53,"./InteractionData":146,"./interactiveTarget":149}],148:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":146,"./InteractionManager":147,"./interactiveTarget":149}],149:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],150:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":53}],156:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":155}],157:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":53,"./Mesh":155}],158:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":155,"./Plane":156,"./Rope":157,"./webgl/MeshRenderer":159,"./webgl/MeshShader":160}],159:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":53,"../Mesh":155}],160:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":53}],161:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],162:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],163:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":161,"./Object.assign":162,"./requestAnimationFrame":164}],164:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[145])(145)}); +i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.complete=function(){this.data&&this.data.removeEventListener&&(this.data.removeEventListener("error",this._boundOnError),this.data.removeEventListener("load",this._boundComplete),this.data.removeEventListener("progress",this._boundOnProgress),this.data.removeEventListener("canplaythrough",this._boundComplete)),this.xhr&&(this.xhr.removeEventListener?(this.xhr.removeEventListener("error",this._boundXhrOnError),this.xhr.removeEventListener("abort",this._boundXhrOnAbort),this.xhr.removeEventListener("progress",this._boundOnProgress),this.xhr.removeEventListener("load",this._boundXhrOnLoad)):(this.xhr.onerror=null,this.xhr.ontimeout=null,this.xhr.onprogress=null,this.xhr.onload=null)),this.emit("complete",this)},i.prototype.load=function(t){switch(this.emit("start",this),t&&this.once("complete",t),(this.crossOrigin===!1||"string"!=typeof this.crossOrigin)&&(this.crossOrigin=this._determineCrossOrigin(this.url)),this.loadType){case i.LOAD_TYPE.IMAGE:this._loadImage();break;case i.LOAD_TYPE.AUDIO:this._loadElement("audio");break;case i.LOAD_TYPE.VIDEO:this._loadElement("video");break;case i.LOAD_TYPE.XHR:default:h&&this.crossOrigin?this._loadXdr():this._loadXhr()}},i.prototype._loadImage=function(){this.data=new Image,this.crossOrigin&&(this.data.crossOrigin=this.crossOrigin),this.data.src=this.url,this.isImage=!0,this.data.addEventListener("error",this._boundOnError,!1),this.data.addEventListener("load",this._boundComplete,!1),this.data.addEventListener("progress",this._boundOnProgress,!1)},i.prototype._loadElement=function(t){if("audio"===t&&"undefined"!=typeof Audio?this.data=new Audio:this.data=document.createElement(t),null===this.data)return this.error=new Error("Unsupported element "+t),void this.complete();if(navigator.isCocoonJS)this.data.src=Array.isArray(this.url)?this.url[0]:this.url;else if(Array.isArray(this.url))for(var e=0;e0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","gl-matrix":"git+https://github.com/toji/gl-matrix.git","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.transform.dirty=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":57,"../textures/RenderTexture":101,"../utils":108,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.transform=new a,this.position=this.transform.position,this.scale=this.transform.scale,this.pivot=this.transform.pivot,this.skew=this.transform.skew,this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=this.transform.worldTransform,this.localTransform=this.transform.localTransform,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),t("./TransformStatic")),h=new n.Matrix,u={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return h.tx=-i.x,h.ty=-i.y,n.render(this,h),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":57,"../textures/RenderTexture":101,"./TransformStatic":42,eventemitter3:25}],41:[function(t,e,r){function i(t,e,r){this._x=e||0,this._y=r||0,this.transform=t}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this._x},set:function(t){this._x=t,this.transform.dirty=!0}},y:{get:function(){return this._y},set:function(t){this._y=t,this.transform.dirty=!0}}}),i.prototype.set=function(t,e){this._x=t||0,this._y=e||(0!==e?this._x:0),this.transform.dirty=!0}},{}],42:[function(t,e,r){function i(){this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.position=new o(this,0),this.scale=new o(this,1,1),this.pivot=new o(this,0,0),this.skew=new o(this,0,0),this.rotation=0,this._sr=Math.sin(0),this._cr=Math.cos(0),this.dirty=!0}var n=t("../math"),o=t("./ObservablePoint");i.prototype.constructor=i,i.prototype.updateTransform=function(t){var e=t.worldTransform,r=this.worldTransform,i=this.localTransform;console.log("DIRTY"),this.dirty&&(i.a=this._cr*this.scale._x,i.b=this._sr*this.scale._x,i.c=-this._sr*this.scale._y,i.d=this._cr*this.scale._y,i.tx=this.position._x-(this.pivot._x*i.a+this.pivot._y*i.c),i.ty=this.position._y-(this.pivot._x*i.b+this.pivot._y*i.d)),(this.dirty||parent.dirty)&&(r.a=i.a*e.a+i.b*e.c,r.b=i.a*e.b+i.b*e.d,r.c=i.c*e.a+i.d*e.c,r.d=i.c*e.b+i.d*e.d,r.tx=i.tx*e.a+i.ty*e.c+e.tx,r.ty=i.tx*e.b+i.ty*e.d+e.ty)},e.exports=i},{"../math":57,"./ObservablePoint":41}],43:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils":108,"./WebGLGraphicsData":46,"./shaders/PrimitiveShader":47,"./utils/buildCircle":48,"./utils/buildComplexPoly":49,"./utils/buildLine":50,"./utils/buildPoly":51,"./utils/buildRectangle":52,"./utils/buildRoundedRectangle":53,earcut:24}],46:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],47:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],48:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":108,"./buildLine":50}],49:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":108,"./buildLine":50}],50:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":57,"../../../utils":108}],51:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":108}],52:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":108,"./buildLine":50}],53:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":108,"./buildLine":50}],54:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),BaseRenderTexture:t("./textures/BaseRenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":43,"./graphics/GraphicsData":44,"./graphics/webgl/GraphicsRenderer":45,"./math":57,"./particles/ParticleContainer":63,"./particles/webgl/ParticleRenderer":65,"./renderers/canvas/CanvasRenderer":68,"./renderers/canvas/utils/CanvasBuffer":69,"./renderers/canvas/utils/CanvasGraphics":70,"./renderers/webgl/WebGLRenderer":74,"./renderers/webgl/filters/AbstractFilter":75,"./renderers/webgl/filters/FXAAFilter":76,"./renderers/webgl/filters/SpriteMaskFilter":77,"./renderers/webgl/managers/ShaderManager":81,"./renderers/webgl/managers/WebGLManager":83,"./renderers/webgl/shaders/Shader":86,"./renderers/webgl/utils/ObjectRenderer":89,"./renderers/webgl/utils/RenderTarget":91,"./sprites/Sprite":95,"./sprites/webgl/SpriteRenderer":96,"./text/Text":98,"./textures/BaseRenderTexture":99,"./textures/BaseTexture":100,"./textures/RenderTexture":101,"./textures/Texture":102,"./textures/TextureUvs":103,"./textures/VideoBaseTexture":104,"./ticker":106,"./utils":108,"pixi-gl-core":1}],55:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":56}],56:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],57:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":55,"./Point":56,"./shapes/Circle":58,"./shapes/Ellipse":59,"./shapes/Polygon":60,"./shapes/Rectangle":61,"./shapes/RoundedRectangle":62}],58:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":61}],59:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":61}],60:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":56}],61:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],63:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"./ParticleBuffer":64,"./ParticleShader":66}],66:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{ +uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":87}],67:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,transform:{worldTransform:new o.Matrix},worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":57,"../utils":108,eventemitter3:25}],68:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":57,"../../utils":108,"../SystemRenderer":67,"./utils/CanvasMaskManager":71}],69:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],70:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],71:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":70}],72:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":87}],76:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\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\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\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)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":75}],77:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":57,"./AbstractFilter":75}],78:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":83}],79:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":108}],87:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":86}],88:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],89:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":83}],90:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],91:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=(t("pixi-gl-core").GLTexture,t("pixi-gl-core").GLFramebuffer),s=t("./StencilMaskStack"),a=function(t,e,r,a,h,u){this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=h||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.defaultFrame=new PIXI.Rectangle,this.destinationFrame=null,this.sourceFrame=null,this.stencilBuffer=null,this.stencilMaskStack=new s,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=a||n.SCALE_MODES.DEFAULT,this.root=u,this.frameBuffer=o.createRGBA(t,100,100),this.root?this.frameBuffer.framebuffer=null:this.texture=this.frameBuffer.texture,this.resize(e,r)};a.prototype.constructor=a,e.exports=a,a.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},a.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},a.prototype.activate=function(t,e){var r=this.gl;this.frameBuffer.bind(),this.destinationFrame=t||this.destinationFrame||this.defaultFrame,this.sourceFrame=e||this.sourceFrame||t,this.calculateProjection(this.destinationFrame,this.sourceFrame),this.transform&&this.projectionMatrix.append(this.transform),this.destinationFrame!==this.sourceFrame?(r.enable(r.SCISSOR_TEST),r.scissor(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)):r.disable(r.SCISSOR_TEST),r.viewport(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)},a.prototype.calculateProjection=function(t,e){var r=this.projectionMatrix;e=e||t,r.identity(),this.root?(r.a=1/t.width*2,r.d=-1/t.height*2,r.tx=-1-e.x*r.a,r.ty=1-e.y*r.d):(r.a=1/t.width*2,r.d=1/t.height*2,r.tx=-1-e.x*r.a,r.ty=-1-e.y*r.d)},a.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.defaultFrame.width=t,this.defaultFrame.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},a.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":57,"../../../utils":108,"./StencilMaskStack":92,"pixi-gl-core":1}],92:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],93:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],94:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],95:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.transform.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0); +}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],98:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=t,this.height=e,this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(t){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear(!1,t))},i.prototype.renderWebGL=function(t,e,r,i,n){if(this.valid){if(n=void 0!==n?n:!0,this.textureBuffer.transform=r,this.textureBuffer.activate(),e.worldAlpha=1,n){e.worldTransform.identity(),e.currentBounds=null;var o,s,a=e.children;for(o=0,s=a.length;s>o;++o)a[o].updateTransform()}p.width=t.height,p.height=t.width;var h=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.textureBuffer.activate(t,p),console.log(e),this.renderer.renderDisplayObject(e,this.textureBuffer,i),this.renderer.filterManager=h}},i.prototype.renderCanvas=function(t,e,r,i,n){if(this.valid){n=!!n;var o=c;o.identity(),r&&o.append(r),o.tx+=t.x,o.ty+=t.y;var s=e.worldTransform;e.worldTransform=o,e.worldAlpha=1;var a,h,u=e.children;for(a=0,h=u.length;h>a;++a)u[a].updateTransform();i&&this.textureBuffer.clear();var l=this.textureBuffer.context,p=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(e,l),this.renderer.resolution=p,e.worldTransform===o&&(e.worldTransform=s)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(t){var e=new Image;return e.src=this.getBase64(t),e},i.prototype.getBase64=function(t){return this.getCanvas(t).toDataURL()},i.prototype.getCanvas=function(t){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution,i=this.renderer.gl,n=new Uint8Array(4*e*r);i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null);var o=new h(e,r),s=o.context.getImageData(0,0,e,r);return s.data.set(n),o.context.putImageData(s,0,0),o.canvas}if(t||(t=p,t.width=this.textureBuffer.canvas.width,t.height=this.textureBuffer.canvas.height),t.width===this.textureBuffer.canvas.width&&t.height===this.textureBuffer.canvas.height)return this.textureBuffer.canvas;var a=this.resolution,o=new h(t.width*a,t.height*a),s=this.textureBuffer.context.getImageData(t.x*a,t.y*a,t.width*a,t.height*a);return o.context.putImageData(s,0,0),o.canvas},i.prototype.getPixels=function(t){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var i=this.renderer.gl,n=new Uint8Array(4*e*r);return i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null),n}return this.textureBuffer.canvas.getContext("2d").getImageData(t.x*this.resolution,t.y*this.resolution,e,r).data},i.prototype.getPixel=function(t,e,r){return p.x=e,p.y=r,p.width=1/this.resolution,p.height=1/this.resolution,t&&(p.x+=t.x,p.y+=t.y),this.getPixels(p)}},{"../const":38,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/webgl/managers/FilterManager":79,"../renderers/webgl/utils/RenderTarget":91,"./BaseTexture":100,"./Texture":102}],100:[function(t,e,r){function i(t,e,r){s.call(this),this.uid=n.uid(),this.resolution=r||1,this.width=100,this.height=100,this.realWidth=100,this.realHeight=100,this.scaleMode=e||o.SCALE_MODES.DEFAULT,this.hasLoaded=!1,this.isLoading=!1,this.source=null,this.premultipliedAlpha=!0,this.imageUrl=null,this.isPowerOfTwo=!1,this.mipmap=!1,this._glTextures={},this._active=!1,this._id=0,t&&this.loadSource(t)}var n=t("../utils"),o=t("../const"),s=t("eventemitter3");i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.update=function(){this.realWidth=this.source.naturalWidth||this.source.width,this.realHeight=this.source.naturalHeight||this.source.height,this.width=this.realWidth/this.resolution,this.height=this.realHeight/this.resolution,this.isPowerOfTwo=n.isPowerOfTwo(this.realWidth,this.realHeight),this.emit("update",this)},i.prototype.loadSource=function(t){var e=this.isLoading;if(this.hasLoaded=!1,this.isLoading=!1,e&&this.source&&(this.source.onload=null,this.source.onerror=null),this.source=t,(this.source.complete||this.source.getContext)&&this.source.width&&this.source.height)this._sourceLoaded();else if(!t.getContext){this.isLoading=!0;var r=this;t.onload=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r._sourceLoaded(),r.emit("loaded",r))},t.onerror=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r.emit("error",r))},t.complete&&t.src&&(this.isLoading=!1,t.onload=null,t.onerror=null,t.width&&t.height?(this._sourceLoaded(),e&&this.emit("loaded",this)):e&&this.emit("error",this))}},i.prototype._sourceLoaded=function(){this.hasLoaded=!0,this.update()},i.prototype.destroy=function(){this.imageUrl?(delete n.BaseTextureCache[this.imageUrl],delete n.TextureCache[this.imageUrl],this.imageUrl=null,navigator.isCocoonJS||(this.source.src="")):this.source&&this.source._pixiId&&delete n.BaseTextureCache[this.source._pixiId],this.source=null,this.dispose()},i.prototype.dispose=function(){this.emit("dispose",this)},i.prototype.updateSourceImage=function(t){this.source.src=t,this.loadSource(this.source)},i.fromImage=function(t,e,r){var o=n.BaseTextureCache[t];if(void 0===e&&0!==t.indexOf("data:")&&(e=!0),!o){var s=new Image;e&&(s.crossOrigin=""),o=new i(s,r),o.imageUrl=t,s.src=t,n.BaseTextureCache[t]=o,o.resolution=n.getResolutionOfUrl(t)}return o},i.fromCanvas=function(t,e){t._pixiId||(t._pixiId="canvas_"+n.uid());var r=n.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),n.BaseTextureCache[t._pixiId]=r),r}},{"../const":38,"../utils":108,eventemitter3:25}],101:[function(t,e,r){function i(t,e){if(!renderer)throw new Error("Unable to create RenderTexture, you must pass a renderer into the constructor.");o.call(this,t,e),this.valid=!0,this._updateUvs()}var n=t("./BaseRenderTexture"),o=t("./Texture"),s=t("../math");t("../const"),new s.Matrix;i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.resize=function(t,e,r){this.valid=t>0&&e>0,this._frame.width=this.crop.width=t,this._frame.height=this.crop.height=e,r&&this.baseTexture.resize(t,e),this._updateUvs()},i.prototype.clear=function(){this.valid&&this.baseTexture.clear(this.frame)},i.prototype.render=function(t,e,r,i){this.valid&&this.baseTexture.render(this.frame,t,e,r,i)},i.prototype.getImage=function(){return this.baseTexture.getImage(this.frame)},i.prototype.getBase64=function(){return this.getBase64.getImage(this.frame)},i.prototype.getCanvas=function(){return this.baseTexture.getCanvas(this.frame)},i.prototype.getPixels=function(){return this.baseTexture.getPixels(this.frame)},i.prototype.getPixel=function(t,e){return this.baseTexture.getPixel(this.frame,t,e)},i.create=function(t,e,r,o,s){return new i(new n(t,e,r,o,s))}},{"../const":38,"../math":57,"./BaseRenderTexture":99,"./Texture":102}],102:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":57,"../utils":108,"./BaseTexture":100,"./TextureUvs":103,"./VideoBaseTexture":104,eventemitter3:25}],103:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],104:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],106:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":105}],107:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],108:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":109,async:16,eventemitter3:25}],109:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],110:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":54, +"./extras":117,"./filters":134,"./mesh":159}],111:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":54}],119:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":54,"../blur/BlurXFilter":122,"../blur/BlurYFilter":123}],120:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){ +t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":54}],126:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":54}],127:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":54}],128:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":54}],129:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":54}],130:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":54}],131:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":54}],141:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":54}],142:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":54,"./TiltShiftXFilter":143,"./TiltShiftYFilter":144}],143:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":141}],144:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":141}],145:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":54}],146:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":54,"./deprecation":110,"./extras":117,"./filters":134,"./interaction":149,"./loaders":152,"./mesh":159,"./polyfill":164}],147:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":54}],148:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){ +var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":54,"./InteractionData":147,"./interactiveTarget":150}],149:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":147,"./InteractionManager":148,"./interactiveTarget":150}],150:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],151:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":54}],157:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":156}],158:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":54,"./Mesh":156}],159:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":156,"./Plane":157,"./Rope":158,"./webgl/MeshRenderer":160,"./webgl/MeshShader":161}],160:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":54,"../Mesh":156}],161:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":54}],162:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],163:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],164:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":162,"./Object.assign":163,"./requestAnimationFrame":165}],165:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[146])(146)}); //# sourceMappingURL=pixi.min.js.map diff --git a/bin/pixi.min.js.map b/bin/pixi.min.js.map index 102b3e1..c95a532 100644 --- a/bin/pixi.min.js.map +++ b/bin/pixi.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","gl-matrix","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","dirtyTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Transform","pivot","_rotation","filterArea","_sr","_cr","_tempDisplayObjectParent","CachePoint","doc","posiiton","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const","./Transform",41,"localTransform","Point","parentTransform","pt","lt",42,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",43,"_lineTint","_fillTint",44,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",45,"glPoints","glIndices","Uint16Array","deleteBuffer",46,47,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",48,49,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",50,"vertPos",51,"rectData",52,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",53,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","BaseRenderTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseRenderTexture","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",54,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",55,56,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",57,"dx","dy","r2","./Rectangle",58,"normx","normy",59,"points_","il","xi","yi","xj","yj","intersect","../Point",60,61,62,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",63,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",64,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",65,"TextureShader","../../renderers/webgl/shaders/TextureShader",66,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",67,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",68,69,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",70,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",71,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",72,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",73,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",74,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",75,"./AbstractFilter",76,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",77,"currentBlendMode","blendFunc","./WebGLManager",78,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",79,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",80,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",81,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",82,83,"./Shader",84,85,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",86,"customUniforms","customAttributes","uSampler",87,88,"../managers/WebGLManager",89,"colors","rect2",90,"StencilMaskStack","frameBuffer","defaultFrame","destinationFrame","sourceFrame","stencilBuffer","calculateProjection","SCISSOR_TEST","scissor","viewport","pm","projectionFrame","./StencilMaskStack",91,92,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",93,94,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",95,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",96,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",97,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",98,"textureBuffer","tempRect","currentBounds","cachedWt","realResolution","getImage","image","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",99,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","getResolutionOfUrl",100,"baseRenderTexture","_updateUvs","updateBase","./BaseRenderTexture",101,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",102,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",103,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",104,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",105,"shared","./Ticker",106,"totalIndices",107,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",108,"__plugins","pluginName","ctor",109,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",110,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",111,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",112,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",113,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",114,"getChildByName",115,"getGlobalPosition",116,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",117,"AsciiFilter","pixelSize","../../core",118,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",119,"BlurDirFilter","dirX","dirY","strength","passes",120,"BlurFilter","./BlurXFilter","./BlurYFilter",121,"flip","flop",122,123,"SmartBlurFilter",124,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",125,"ColorStepFilter",126,"ConvolutionFilter","texelSize",127,"CrossHatchFilter",128,"DisplacementFilter","mapSampler",129,"DotScreenFilter",130,"BlurYTintFilter",131,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",132,"GrayFilter","gray",133,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",134,135,"noise",136,137,"red","green","blue",138,139,"center","params",140,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",141,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",142,"./TiltShiftAxisFilter",143,144,145,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",146,"InteractionData","originalEvent","getLocalPosition","globalPos",147,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",148,"interactiveTarget","./InteractionManager",149,150,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",151,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",152,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",153,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",154,155,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",156,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",157,"factor","nextPoint","perpLength","num","perpX","perpY",158,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",159,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",160,161,"isNaN",162,163,"./Math.sign","./Object.assign","./requestAnimationFrame",164,"Date","getTime","startTime","vendors","delay"],"mappings":"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AA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IAEAwkB,GASAoyD,EAAA/4E,UAAAo5E,aAAA,SAAA9lC,GAGA,GAAA5rB,GAAA,GAAA1iB,cAAAsuC,EAMA,OALA5rB,GAAA,IAAA,IACAA,EAAA,IAAA,IACAA,EAAA,KAAA,IACAA,EAAA,KAAA,IAEAA,GASAqxD,EAAA/4E,UAAAq5E,WAAA,SAAAl3E,EAAA82E,GAEA,GAAA3lC,IACAnxC,EAAA,EAAA,EAAA,EAAA,EACA,EAAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGAhF,MAAA67E,YAAA1lC,EAAA2lC,IASAF,EAAA/4E,UAAAs5E,UAAA,SAAAnrC,EAAA8qC,GAEA,GAAA3lC,IACAnF,EAAAA,EAAAA,EAAA,EAAA,EACAA,EAAAA,EAAAA,EAAA,EAAA,EACAA,EAAAA,EAAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGAhxC,MAAA67E,YAAA1lC,EAAA2lC,IAGAF,EAAA/4E,UAAAu5E,UAAAR,EAAA/4E,UAAAs5E,UAQAP,EAAA/4E,UAAAw5E,cAAA,SAAAP,GAEA,GAAA3lC,IACA,GAAA,GAAA,GAAA,EAAA,EACA,GAAA,GAAA,GAAA,EAAA,EACA,GAAA,GAAA,GAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGAn2C,MAAA67E,YAAA1lC,EAAA2lC,IASAF,EAAA/4E,UAAAy5E,IAAA,SAAAzmC,EAAAimC,GAEAjmC,GAAAA,GAAA,GAAA,IAAArgC,KAAA03B,EACA,IAAA6I,GAAAvgC,KAAAugC,IAAAF,GACAC,EAAAtgC,KAAAsgC,IAAAD,GAGA0mC,EAAA,KACAC,EAAA,KACAC,EAAA,KAEAtmC,GACAomC,EAAAxmC,GAAA,EAAAwmC,GAAAzmC,GAAAymC,EAAAC,EAAAzmC,GAAAymC,EAAA1mC,GAAA0mC,EAAAC,EAAA1mC,GAAA0mC,EAAA3mC,GAAA,EAAA2mC,GAAA,EAAA,EACAF,EAAAxmC,GAAAwmC,EAAA,KAAAzmC,EAAA0mC,EAAAzmC,GAAA,EAAAymC,GAAA,IAAA1mC,EAAA2mC,EAAA1mC,GAAA0mC,EAAA3mC,GAAA,KAAA,EAAA,EACAymC,EAAAxmC,GAAAwmC,EAAAzmC,IAAA,EAAAymC,GAAAC,EAAAzmC,GAAAymC,EAAA1mC,EAAA,EAAA2mC,EAAA1mC,GAAA,EAAA0mC,GAAA3mC,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGA91C,MAAA67E,YAAA1lC,EAAA2lC,IAYAF,EAAA/4E,UAAA65E,SAAA,SAAA/tB,EAAAmtB,GAEA,GAAAvoE,IAAAo7C,GAAA,GAAA,EACApuD,EAAA,MAAAgT,EAAA,GAEA4iC,GACA5iC,EAAA,EAAA,EAAA,EAAAhT,EACA,EAAAgT,EAAA,EAAA,EAAAhT,EACA,EAAA,EAAAgT,EAAA,EAAAhT,EACA,EAAA,EAAA,EAAA,EAAA,EAGAP,MAAA67E,YAAA1lC,EAAA2lC,IAUAF,EAAA/4E,UAAA85E,SAAA,SAAAhuB,EAAAmtB,GAEA,GAAAnnE,GAAA,GAAAg6C,GAAA,GAAA,EAAA,EACA72C,GAAAnD,EAAA,IAAA,GAEAwhC,GACAxhC,EAAAmD,EAAAA,EAAA,EAAA,EACAA,EAAAnD,EAAAmD,EAAA,EAAA,EACAA,EAAAA,EAAAnD,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGA3U,MAAA67E,YAAA1lC,EAAA2lC,IAUAF,EAAA/4E,UAAA+5E,WAAA,SAAAd,GAEA97E,KAAA28E,SAAA,KAQAf,EAAA/4E,UAAAg6E,SAAA,SAAAf,GAEA,GAAA3lC,IACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGAn2C,MAAA67E,YAAA1lC,EAAA2lC,IAQAF,EAAA/4E,UAAAi6E,MAAA,SAAAhB,GAEA,GAAA3lC,IACA,KAAA,SAAA,UAAA,EAAA,EACA,KAAA,SAAA,UAAA,EAAA,EACA,KAAA,SAAA,UAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGAn2C,MAAA67E,YAAA1lC,EAAA2lC,IAQAF,EAAA/4E,UAAAk6E,YAAA,SAAAjB,GAEA,GAAA3lC,IACA,oBAAA,mBAAA,mBAAA,EAAA,oBACA,kBAAA,oBAAA,mBAAA,EAAA,oBACA,kBAAA,kBAAA,kBAAA,EAAA,mBACA,EAAA,EAAA,EAAA,EAAA,EAGAn2C,MAAA67E,YAAA1lC,EAAA2lC,IAQAF,EAAA/4E,UAAAm6E,SAAA,SAAAlB,GAEA,GAAA3lC,IACA,OAAA,MAAA,KAAA,EAAA,GACA,KAAA,OAAA,KAAA,EAAA,GACA,MAAA,KAAA,MAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGAn2C,MAAA67E,YAAA1lC,EAAA2lC,IAQAF,EAAA/4E,UAAAo6E,MAAA,SAAAnB,GAEA,GAAA3lC,IACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGAn2C,MAAA67E,YAAA1lC,EAAA2lC,IAQAF,EAAA/4E,UAAAq6E,WAAA,SAAApB,GAEA,GAAA3lC,IACA,oBAAA,mBAAA,mBAAA,EAAA,mBACA,mBAAA,oBAAA,mBAAA,EAAA,oBACA,oBAAA,kBAAA,mBAAA,EAAA,kBACA,EAAA,EAAA,EAAA,EAAA,EAGAn2C,MAAA67E,YAAA1lC,EAAA2lC,IAQAF,EAAA/4E,UAAAs6E,OAAA,SAAArB,GAEA,GAAA3lC,IACA,kBAAA,oBAAA,kBAAA,EAAA,mBACA,oBAAA,kBAAA,mBAAA,EAAA,mBACA,oBAAA,mBAAA,mBAAA,EAAA,mBACA,EAAA,EAAA,EAAA,EAAA,EAGAn2C,MAAA67E,YAAA1lC,EAAA2lC,IAQAF,EAAA/4E,UAAAu6E,QAAA,SAAAtB,GAEA,GAAA3lC,IACA,kBAAA,mBAAA,mBAAA,EAAA,kBACA,mBAAA,kBAAA,mBAAA,EAAA,kBACA,mBAAA,kBAAA,kBAAA,EAAA,kBACA,EAAA,EAAA,EAAA,EAAA,EAGAn2C,MAAA67E,YAAA1lC,EAAA2lC,IAaAF,EAAA/4E,UAAAw6E,UAAA,SAAAC,EAAAC,EAAAC,EAAAC,EAAA3B,GAEAwB,EAAAA,GAAA,GACAC,EAAAA,GAAA,IACAC,EAAAA,GAAA,SACAC,EAAAA,GAAA,OAEA,IAAAC,IAAAF,GAAA,GAAA,KAAA,IACAG,GAAAH,GAAA,EAAA,KAAA,IACAI,GAAA,IAAAJ,GAAA,IAEAK,GAAAJ,GAAA,GAAA,KAAA,IACAK,GAAAL,GAAA,EAAA,KAAA,IACAM,GAAA,IAAAN,GAAA,IAEAtnC,GACA,GAAA,IAAA,IAAA,EAAA,EACAunC,EAAAC,EAAAC,EAAAN,EAAA,EACAO,EAAAC,EAAAC,EAAAR,EAAA,EACAG,EAAAG,EAAAF,EAAAG,EAAAF,EAAAG,EAAA,EAAA,EAGA/9E,MAAA67E,YAAA1lC,EAAA2lC,IASAF,EAAA/4E,UAAAm7E,MAAA,SAAAC,EAAAnC;AAEAmC,EAAAA,GAAA,EACA,IAAA9nC,IACA,GAAA8nC,GAAAA,EAAA,EAAA,EAAA,GACAA,EAAA,EAAAA,EAAA,EAAA,EACA,EAAAA,EAAA,EAAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGAj+E,MAAA67E,YAAA1lC,EAAA2lC,IAYAF,EAAA/4E,UAAAq7E,SAAA,SAAAvvB,EAAAmtB,GAEA,GAAA3lC,IACA,mBAAAwY,EAAA,mBAAAA,EAAA,oBAAAA,EAAA,EAAAA,EAAA,mBAAAA,EACA,oBAAAA,EAAA,kBAAAA,EAAA,mBAAAA,EAAA,EAAAA,EAAA,mBAAAA,EACA,oBAAAA,EAAA,oBAAAA,EAAA,kBAAAA,EAAA,EAAAA,EAAA,kBAAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGA3uD,MAAA67E,YAAA1lC,EAAA2lC,IAWAF,EAAA/4E,UAAAs7E,IAAA,SAAArC,GAEA,GAAA3lC,IACA,GAAA,GAAA,GAAA,EAAA,GACA,GAAA,GAAA,GAAA,EAAA,GACA,IAAA,GAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGAn2C,MAAA67E,YAAA1lC,EAAA2lC,IAOAF,EAAA/4E,UAAAg5B,MAAA,WAEA,GAAAsa,IACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGAn2C,MAAA67E,YAAA1lC,GAAA,IAIA5mC,OAAAwhC,iBAAA6qC,EAAA/4E,WAQAszC,QACAnmC,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA4jB,EAAApb,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA4jB,EAAApb,MAAAA,QAKA2qE,aAAA,KAAAsE,KAAA,SAAA19E,EAAAjB,EAAAD,GAYA,QAAA6+E,KAEA50C,EAAAmd,eAAA7lD,KAAAf,KAEA,KAEA,wQAGAw2D,MAAAn0D,KAAA,KAAA8M,MAAA,KApBA,GAAAs6B,GAAA/oC,EAAA,aAyBA29E,GAAAx7E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACAw7E,EAAAx7E,UAAAmH,YAAAq0E,EACA5+E,EAAAD,QAAA6+E,EAEA9uE,OAAAwhC,iBAAAstC,EAAAx7E,WAOA2zD,MACAxmD,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA6vD,KAAArnD,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA6vD,KAAArnD,MAAAA,QAKA2qE,aAAA,KAAAwE,KAAA,SAAA59E,EAAAjB,EAAAD,GAmBA,QAAA++E,GAAApoC,EAAAvyC,EAAAC,GAEA4lC,EAAAmd,eAAA7lD,KAAAf,KAEA,KAEA,uwCAGAm2C,QAAA9zC,KAAA,MAAA8M,MAAA,GAAAtH,cAAAsuC,IACAqoC,WAAAn8E,KAAA,KAAA8M,OAAAwF,EAAA,EAAA/Q,EAAAkU,EAAA,EAAAjU,MA5BA,GAAA4lC,GAAA/oC,EAAA,aAiCA69E,GAAA17E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACA07E,EAAA17E,UAAAmH,YAAAu0E,EACA9+E,EAAAD,QAAA++E,EAEAhvE,OAAAwhC,iBAAAwtC,EAAA17E,WAOAszC,QACAnmC,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAwvC,OAAAhnC,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAwvC,OAAAhnC,MAAA,GAAAtH,cAAAsH,KAUAvL,OACAoM,IAAA,WAEA,MAAA,GAAAhQ,KAAA2G,SAAA63E,UAAArvE,MAAAwF,GAEAzE,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA63E,UAAArvE,MAAAwF,EAAA,EAAAxF,IAUAtL,QACAmM,IAAA,WAEA,MAAA,GAAAhQ,KAAA2G,SAAA63E,UAAArvE,MAAA2I,GAEA5H,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA63E,UAAArvE,MAAA2I,EAAA,EAAA3I,QAKA2qE,aAAA,KAAA2E,KAAA,SAAA/9E,EAAAjB,EAAAD,GAYA,QAAAk/E,KAEAj1C,EAAAmd,eAAA7lD,KAAAf,KAEA,KAEA,w7BAjBA,GAAAypC,GAAA/oC,EAAA,aAqBAg+E,GAAA77E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACA67E,EAAA77E,UAAAmH,YAAA00E,EACAj/E,EAAAD,QAAAk/E,IAEA5E,aAAA,KAAA6E,KAAA,SAAAj+E,EAAAjB,EAAAD,GAeA,QAAAo/E,GAAApuB,EAAAxf,GAEA,GAAAiqB,GAAA,GAAAxxB,GAAAqH,MACA0f,GAAA5c,YAAA,EAEAnK,EAAAmd,eAAA7lD,KAAAf,KAEA,6eAEA,qZAGA6+E,YAAAx8E,KAAA,YAAA8M,MAAAqhD,EAAAvsD,SACAi3D,aAAA74D,KAAA,OAAA8M,MAAA8rD,EAAAja,SAAA,IACAhQ,OAAA3uC,KAAA,KAAA8M,OAAAwF,EAAA,EAAAmD,EAAA,MAIA9X,KAAAm7D,WAAA3K,EACAxwD,KAAAi7D,WAAAA,GAEA,OAAAjqB,GAAA9oC,SAAA8oC,KAEAA,EAAA,IAGAhxC,KAAAgxC,MAAA,GAAAvH,GAAA0N,MAAAnG,EAAAA,GAxCA,GAAAvH,GAAA/oC,EAAA,aA2CAk+E,GAAA/7E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACA+7E,EAAA/7E,UAAAmH,YAAA40E,EACAn/E,EAAAD,QAAAo/E,EAEAA,EAAA/7E,UAAA83D,YAAA,SAAA9xB,EAAAtf,EAAArB,GAEA,GAAA+rB,GAAApL,EAAAoL,aAEAA,GAAAmnB,sBAAA7xC,EAAA6jC,MAAAptD,KAAAm7D,WAAAn7D,KAAAi7D,YAEAj7D,KAAA2G,SAAAu0D,YAAA/rD,MAAAnP,KAAAi7D,WAAAja,SAAA,GACAhhD,KAAA2G,SAAAqqC,MAAA7hC,MAAAwF,EAAA3U,KAAAgxC,MAAAr8B,GAAA,EAAA4U,EAAA6jC,MAAAxpD,OACA5D,KAAA2G,SAAAqqC,MAAA7hC,MAAA2I,EAAA9X,KAAAgxC,MAAAl5B,GAAA,EAAAyR,EAAA6jC,MAAAvpD,OAEA,IAAAwJ,GAAArN,KAAA06D,UAAA7xB,EAEAoL,GAAA0mB,YAAAttD,EAAAkc,EAAArB,IAIA3Y,OAAAwhC,iBAAA6tC,EAAA/7E,WAOAkZ,KACA/L,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAk4E,WAAA1vE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAk4E,WAAA1vE,MAAAA,QAMA2qE,aAAA,KAAAgF,KAAA,SAAAp+E,EAAAjB,EAAAD,GAkBA,QAAAu/E,KAEAt1C,EAAAmd,eAAA7lD,KAAAf,KAEA,KAEA,2oBAGAgxC,OAAA3uC,KAAA,KAAA8M,MAAA,GACAwtC,OAAAt6C,KAAA,KAAA8M,MAAA,GACAmtD,YAAAj6D,KAAA,MAAA8M,OAAA,EAAA,EAAA,EAAA,MA5BA,GAAAs6B,GAAA/oC,EAAA,aAiCAq+E,GAAAl8E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACAk8E,EAAAl8E,UAAAmH,YAAA+0E,EACAt/E,EAAAD,QAAAu/E,EAEAxvE,OAAAwhC,iBAAAguC,EAAAl8E,WAMAmuC,OACAhhC,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAqqC,MAAA7hC,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAqqC,MAAA7hC,MAAAA,IASAwtC,OACA3sC,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAg2C,MAAAxtC,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAg2C,MAAAxtC,MAAAA,QAKA2qE,aAAA,KAAAkF,KAAA,SAAAt+E,EAAAjB,EAAAD,GAaA,QAAAy/E,KAEAx1C,EAAAmd,eAAA7lD,KAAAf,KAEA,y4BAEA,yzBAGAs6E,MAAAj4E,KAAA,KAAA8M,MAAA,EAAA,KACA4pC,OAAA12C,KAAA,IAAA8M,OAAA,EAAA,EAAA,IACAulC,OAAAryC,KAAA,KAAA8M,MAAA,IACArM,QAAAT,KAAA,KAAA8M,OAAA,EAAA,IACA4rE,UAAA14E,KAAA,KAAA8M,MAAA,KAIAnP,KAAAg7E,OAAA,EACAh7E,KAAA+6E,SAAA,EA9BA,GAAAtxC,GAAA/oC,EAAA,aAiCAu+E,GAAAp8E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACAo8E,EAAAp8E,UAAAmH,YAAAi1E,EACAx/E,EAAAD,QAAAy/E,EAEAA,EAAAp8E,UAAA83D,YAAA,SAAA9xB,EAAAtf,EAAArB,EAAAnjB,GAEA,GAAAsI,GAAArN,KAAA06D,UAAA7xB,EAIA,IAFA7oC,KAAA2G,SAAAo0E,SAAA5rE,MAAAnP,KAAA+6E,SAAA,EAAA/6E,KAAAg7E,QAAAzxD,EAAA6jC,MAAAvpD,OAAA0lB,EAAAxe,KAAAlH,QAEA,IAAA7D,KAAAg7E,OAEAnyC,EAAAoL,cAAA0mB,YAAAttD,EAAAkc,EAAArB,EAAAnjB,OAGA,CAKA,IAAA,GAJAm0D,GAAArwB,EAAAoL,cAAA+nB,iBAAA,GACAsf,EAAA/xD,EACAgyD,EAAAriB,EAEAv4D,EAAA,EAAAA,EAAAX,KAAAg7E,OAAA,EAAAr6E,IACA,CACAkoC,EAAAoL,cAAA0mB,YAAAttD,EAAAiuE,EAAAC,EAAAx2E,EAEA,IAAA43D,GAAA4e,CACAA,GAAAD,EACAA,EAAA3e,EAGA9zB,EAAAoL,cAAA0mB,YAAAttD,EAAAiuE,EAAApzD,EAAAnjB,GAEA8jC,EAAAoL,cAAAuoB,mBAAAtD,KAKA3pD,OAAAwhC,iBAAAkuC,EAAAp8E,WAQAy3E,MACAtqE,IAAA,WAEA,MAAAhQ,MAAA+6E,UAEA7qE,IAAA,SAAAf,GAEAnP,KAAA8+C,QAAA,GAAA3vC,EACAnP,KAAA+6E,SAAA5rE,QAKA2qE,aAAA,KAAAoF,KAAA,SAAAx+E,EAAAjB,EAAAD,GAaA,QAAA2/E,KAEA11C,EAAAmd,eAAA7lD,KAAAf,MAEAA,KAAAi6E,YAAA,GAAAC,GACAl6E,KAAAo/E,gBAAA,GAAAH,GAEAj/E,KAAAq6E,cAAA,GAAA5wC,GAAAmd,eAEA5mD,KAAA8+C,QAAA,GAEA9+C,KAAAq/E,gBAAA,EACAr/E,KAAAs/E,OAAA,GAAA9pE,KAAA03B,GAAA,IACAltC,KAAAu/E,UAAA,GACAv/E,KAAA00C,MAAA,IACA10C,KAAAw/E,YAAA,EACAx/E,KAAA+3C,UAAAtO,EAAAiE,YAAAG,SA5BA,GAAApE,GAAA/oC,EAAA,cACAw5E,EAAAx5E,EAAA,uBACAu+E,EAAAv+E,EAAA,oBA6BAy+E,GAAAt8E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACAs8E,EAAAt8E,UAAAmH,YAAAm1E,EACA1/E,EAAAD,QAAA2/E,EAEAA,EAAAt8E,UAAA83D,YAAA,SAAA9xB,EAAAtf,EAAArB,GAEA,GAAAgxC,GAAArwB,EAAAoL,cAAA+nB,iBAAA,EAGAh8D,MAAAq/E,iBAEAr/E,KAAAq/E,gBAAA,EAEAr/E,KAAAo/E,gBAAAz4E,SAAA7D,OAAAqM,MAAA,GAAAqG,KAAAsgC,IAAA91C,KAAAs/E,QAAAt/E,KAAAu/E,UACAv/E,KAAAo/E,gBAAAz4E,SAAA7D,OAAAqM,MAAA,GAAAqG,KAAAugC,IAAA/1C,KAAAs/E,QAAAt/E,KAAAu/E,WAGAv/E,KAAAi6E,YAAAtf,YAAA9xB,EAAAtf,EAAA2vC,GAEArwB,EAAA8X,iBAAAC,aAAA5gD,KAAA+3C,WAEA/3C,KAAAo/E,gBAAAzkB,YAAA9xB,EAAAqwB,EAAAhxC,GAEA2gB,EAAA8X,iBAAAC,aAAAnX,EAAAiE,YAAAC,QAEA3tC,KAAAw/E,YAGAx/E,KAAAq6E,cAAA1f,YAAA9xB,EAAAtf,EAAArB,GAIA2gB,EAAAoL,cAAAuoB,mBAAAtD,IAGA3pD,OAAAwhC,iBAAAouC,EAAAt8E,WAQAy3E,MACAtqE,IAAA,WAEA,MAAAhQ,MAAAi6E,YAAAK,MAEApqE,IAAA,SAAAf,GAEAnP,KAAAi6E,YAAAK,KAAAt6E,KAAAo/E,gBAAA9E,KAAAnrE,IAWAorE,OACAvqE,IAAA,WAEA,MAAAhQ,MAAAi6E,YAAAK,MAEApqE,IAAA,SAAAf,GAEAnP,KAAAi6E,YAAAK,KAAAnrE,IAWAqrE,OACAxqE,IAAA,WAEA,MAAAhQ,MAAAo/E,gBAAA9E,MAEApqE,IAAA,SAAAf,GAEAnP,KAAAo/E,gBAAA9E,KAAAnrE,IAUA4pC,OACA/oC,IAAA,WAEA,MAAAy5B,GAAAoB,MAAA6rB,QAAA12D,KAAAo/E,gBAAAz4E,SAAAoyC,MAAA5pC,QAEAe,IAAA,SAAAf,GAEAnP,KAAAo/E,gBAAAz4E,SAAAoyC,MAAA5pC,MAAAs6B,EAAAoB,MAAAoW,QAAA9xC,KAUAulC,OACA1kC,IAAA,WAEA,MAAAhQ,MAAAo/E,gBAAAz4E,SAAA+tC,MAAAvlC,OAEAe,IAAA,SAAAf,GAEAnP,KAAAo/E,gBAAAz4E,SAAA+tC,MAAAvlC,MAAAA,IAUAswE,UACAzvE,IAAA,WAEA,MAAAhQ,MAAAu/E,WAEArvE,IAAA,SAAAf,GAEAnP,KAAAq/E,gBAAA,EACAr/E,KAAAu/E,UAAApwE,IAUAwtC,OACA3sC,IAAA,WAEA,MAAAhQ,MAAAs/E,QAEApvE,IAAA,SAAAf,GAEAnP,KAAAq/E,gBAAA,EACAr/E,KAAAs/E,OAAAnwE,QAKA2qE,aAAA,GAAAW,sBAAA,IAAAiF,oBAAA,MAAAC,KAAA,SAAAj/E,EAAAjB,EAAAD,GAYA,QAAAogF,KAEAn2C,EAAAmd,eAAA7lD,KAAAf,KAEA,KAEA,wVAGA6/E,MAAAx9E,KAAA,KAAA8M,MAAA,KApBA,GAAAs6B,GAAA/oC,EAAA,aAyBAk/E,GAAA/8E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACA+8E,EAAA/8E,UAAAmH,YAAA41E,EACAngF,EAAAD,QAAAogF,EAEArwE,OAAAwhC,iBAAA6uC,EAAA/8E,WAOAg9E,MACA7vE,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAk5E,KAAA1wE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAk5E,KAAA1wE,MAAAA,QAKA2qE,aAAA,KAAAgG,KAAA,SAAAp/E,EAAAjB,EAAAD,GAWAC,EAAAD,SACAo6E,YAAAl5E,EAAA,uBACAs5E,YAAAt5E,EAAA,uBACAw6E,WAAAx6E,EAAA,qBACAw5E,YAAAx5E,EAAA,sBACA05E,YAAA15E,EAAA,sBACAk6E,cAAAl6E,EAAA,wBACAk7E,kBAAAl7E,EAAA,6BACA29E,gBAAA39E,EAAA,2BACA69E,kBAAA79E,EAAA,mCACAg+E,iBAAAh+E,EAAA,iCACAk+E,mBAAAl+E,EAAA,qCACAq+E,gBAAAr+E,EAAA,yBACAk/E,WAAAl/E,EAAA,qBACAy+E,iBAAAz+E,EAAA,iCACAq/E,aAAAr/E,EAAA,yBACAs/E,YAAAt/E,EAAA,uBACAu/E,eAAAv/E,EAAA,6BACAw/E,eAAAx/E,EAAA,wBACAy/E,gBAAAz/E,EAAA,+BACA0/E,YAAA1/E,EAAA,uBACAg7E,gBAAAh7E,EAAA,0BACA2/E,gBAAA3/E,EAAA,+BACA4/E,iBAAA5/E,EAAA,gCACA6/E,iBAAA7/E,EAAA,gCACA8/E,YAAA9/E,EAAA,0BAGA+/E,sBAAA,IAAAC,sBAAA,IAAAC,uBAAA,IAAAC,oBAAA,IAAAC,qBAAA,IAAAC,qBAAA,IAAAC,yBAAA,IAAAC,4BAAA,IAAAC,0BAAA,IAAAC,kCAAA,IAAAC,gCAAA,IAAAC,oCAAA,IAAAC,wBAAA,IAAAC,gCAAA,IAAAC,oBAAA,IAAAC,wBAAA,IAAAC,sBAAA,IAAAC,4BAAA,IAAAC,uBAAA,IAAAC,sBAAA,IAAAC,8BAAA,IAAAC,8BAAA,IAAAC,+BAAA,IAAAC,+BAAA,IAAAC,sBAAA,MAAAC,KAAA,SAAAxhF,EAAAjB,EAAAD,GAYA,QAAAugF,KAEAt2C,EAAAmd,eAAA7lD,KAAAf,KAEA,KAEA,iTAGA+pD,QAAA1nD,KAAA,KAAA8M,MAAA,KApBA,GAAAs6B,GAAA/oC,EAAA,aAyBAq/E,GAAAl9E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACAk9E,EAAAl9E,UAAAmH,YAAA+1E,EACAtgF,EAAAD,QAAAugF,EAEAxwE,OAAAwhC,iBAAAgvC,EAAAl9E,WAQAknD,QACA/5C,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAojD,OAAA56C,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAojD,OAAA56C,MAAAA,QAKA2qE,aAAA,KAAAqI,KAAA,SAAAzhF,EAAAjB,EAAAD,GAiBA,QAAAwgF,KAEAv2C,EAAAmd,eAAA7lD,KAAAf,KAEA,KAEA,gdAGAoiF,OAAA//E,KAAA,KAAA8M,MAAA,MAzBA,GAAAs6B,GAAA/oC,EAAA,aA8BAs/E,GAAAn9E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACAm9E,EAAAn9E,UAAAmH,YAAAg2E,EACAvgF,EAAAD,QAAAwgF,EAEAzwE,OAAAwhC,iBAAAivC,EAAAn9E,WAQAu/E,OACApyE,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAy7E,MAAAjzE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAy7E,MAAAjzE,MAAAA,QAKA2qE,aAAA,KAAAuI,KAAA,SAAA3hF,EAAAjB,EAAAD,GAYA,QAAAygF,KAEAx2C,EAAAmd,eAAA7lD,KAAAf,KAEA,KAEA,uYAGAs8D,YAAAj6D,KAAA,MAAA8M,MAAA,GAAAtH,eAAA,EAAA,EAAA,EAAA,KACAgyE,WAAAx3E,KAAA,KAAA8M,OAAAwF,EAAA,GAAAmD,EAAA,OArBA,GAAA2xB,GAAA/oC,EAAA,aA0BAu/E,GAAAp9E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACAo9E,EAAAp9E,UAAAmH,YAAAi2E,EACAxgF,EAAAD,QAAAygF,EAEA1wE,OAAAwhC,iBAAAkvC,EAAAp9E,WAQAkI,MACAiF,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAkzE,UAAA1qE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAkzE,UAAA1qE,MAAAA,QAKA2qE,aAAA,KAAAwI,KAAA,SAAA5hF,EAAAjB,EAAAD,GAYA,QAAA0gF,KAEAz2C,EAAAmd,eAAA7lD,KAAAf,KAEA,KAEA,sfAGAuiF,KAAAlgF,KAAA,KAAA8M,OAAAwF,EAAA,GAAAmD,EAAA,KACA0qE,OAAAngF,KAAA,KAAA8M,OAAAwF,EAAA,IAAAmD,EAAA,KACA2qE,MAAApgF,KAAA,KAAA8M,OAAAwF,EAAA,GAAAmD,EAAA,MACAwkD,YAAAj6D,KAAA,MAAA8M,OAAA,EAAA,EAAA,EAAA,MAvBA,GAAAs6B,GAAA/oC,EAAA,aA4BAw/E,GAAAr9E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACAq9E,EAAAr9E,UAAAmH,YAAAk2E,EACAzgF,EAAAD,QAAA0gF,EAEA3wE,OAAAwhC,iBAAAmvC,EAAAr9E,WAOA0/E,KACAvyE,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA47E,IAAApzE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA47E,IAAApzE,MAAAA,IAUAqzE,OACAxyE,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA67E,MAAArzE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA67E,MAAArzE,MAAAA,IAUAszE,MACAzyE,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA87E,KAAAtzE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA87E,KAAAtzE,MAAAA,QAKA2qE,aAAA,KAAA4I,KAAA,SAAAhiF,EAAAjB,EAAAD,GAYA,QAAA4gF,KAEA32C,EAAAmd,eAAA7lD,KAAAf,KAEA,KAEA,kYAGA88E,OAAAz6E,KAAA,KAAA8M,MAAA,KApBA,GAAAs6B,GAAA/oC,EAAA,aAyBA0/E,GAAAv9E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACAu9E,EAAAv9E,UAAAmH,YAAAo2E,EACA3gF,EAAAD,QAAA4gF,EAEA7wE,OAAAwhC,iBAAAqvC,EAAAv9E,WAQAi6E,OACA9sE,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAm2E,MAAA3tE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAm2E,MAAA3tE,MAAAA,QAKA2qE,aAAA,KAAA6I,KAAA,SAAAjiF,EAAAjB,EAAAD,GAcA,QAAA2gF,KAEA12C,EAAAmd,eAAA7lD,KAAAf,KAEA,KAEA,iqBAGA4iF,QAAAvgF,KAAA,KAAA8M,OAAAwF,EAAA,GAAAmD,EAAA,KACA+qE,QAAAxgF,KAAA,KAAA8M,OAAAwF,EAAA,GAAAmD,EAAA,GAAAid,EAAA,KACA66C,MAAAvtE,KAAA,KAAA8M,MAAA,KAxBA,GAAAs6B,GAAA/oC,EAAA,aA6BAy/E,GAAAt9E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACAs9E,EAAAt9E,UAAAmH,YAAAm2E,EACA1gF,EAAAD,QAAA2gF,EAEA5wE,OAAAwhC,iBAAAovC,EAAAt9E,WAQA+/E,QACA5yE,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAi8E,OAAAzzE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAi8E,OAAAzzE,MAAAA,IAUA0zE,QACA7yE,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAk8E,OAAA1zE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAk8E,OAAA1zE,MAAAA,IAUAygE,MACA5/D,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAipE,KAAAzgE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAipE,KAAAzgE,MAAAA,QAKA2qE,aAAA,KAAAgJ,KAAA,SAAApiF,EAAAjB,EAAAD,GAiBA,QAAAujF,KAEAt5C,EAAAmd,eAAA7lD,KAAAf,KAEA,KAEA,6lCAGAs6E,MAAAj4E,KAAA,KAAA8M,MAAA,KACA6zE,cAAA3gF,KAAA,KAAA8M,MAAA,KACA3E,OAAAnI,KAAA,KAAA8M,OAAAwF,EAAA,EAAAmD,EAAAjY,OAAAojF,YAAA,IACAnhE,KAAAzf,KAAA,KAAA8M,OAAAwF,EAAA,IAAAmD,EAAAjY,OAAAojF,YAAA,IACAn6D,OAAAzmB,KAAA,KAAA8M,OAAAwF,EAAA,GAAAmD,EAAA,KACAorE,SAAA7gF,KAAA,KAAA8M,OAAAwF,EAAA9U,OAAAsjF,WAAArrE,EAAAjY,OAAAojF,gBAIAjjF,KAAAojF,cAlCA,GAAA35C,GAAA/oC,EAAA,aAqCAqiF,GAAAlgF,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACAkgF,EAAAlgF,UAAAmH,YAAA+4E,EACAtjF,EAAAD,QAAAujF,EAOAA,EAAAlgF,UAAAugF,YAAA,WAEApjF,KAAA2G,SAAAmiB,MAAA3Z,MAAAwF,EAAA,EACA3U,KAAA2G,SAAAmiB,MAAA3Z,MAAA2I,EAAA,GAGAvI,OAAAwhC,iBAAAgyC,EAAAlgF,WAOAy3E,MACAtqE,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA2zE,KAAAnrE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA2zE,KAAAnrE,MAAAA,IAUA6zE,cACAhzE,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAq8E,aAAA7zE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAq8E,aAAA7zE,MAAAA,IAUA3E,OACAwF,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA6D,MAAA2E,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA6D,MAAA2E,MAAAA,EACAnP,KAAAojF,gBAUAthE,KACA9R,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAmb,IAAA3S,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAmb,IAAA3S,MAAAA,EACAnP,KAAAojF,oBAKAtJ,aAAA,KAAAuJ,KAAA,SAAA3iF,EAAAjB,EAAAD,GAiBA,QAAA6gF,KAEA52C,EAAAmd,eAAA7lD,KAAAf,MAEAA,KAAAsjF,iBAAA,GAAAhD,GACAtgF,KAAAujF,iBAAA,GAAAhD,GArBA,GAAA92C,GAAA/oC,EAAA,cACA4/E,EAAA5/E,EAAA,sBACA6/E,EAAA7/E,EAAA,qBAsBA2/E,GAAAx9E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACAw9E,EAAAx9E,UAAAmH,YAAAq2E,EACA5gF,EAAAD,QAAA6gF,EAEAA,EAAAx9E,UAAA83D,YAAA,SAAA9xB,EAAAtf,EAAArB,GAEA,GAAAgxC,GAAArwB,EAAAoL,cAAA+nB,iBAAA,EAEAh8D,MAAAsjF,iBAAA3oB,YAAA9xB,EAAAtf,EAAA2vC,GAEAl5D,KAAAujF,iBAAA5oB,YAAA9xB,EAAAqwB,EAAAhxC,GAEA2gB,EAAAoL,cAAAuoB,mBAAAtD,IAGA3pD,OAAAwhC,iBAAAsvC,EAAAx9E,WAOAy3E,MACAtqE,IAAA,WAEA,MAAAhQ,MAAAsjF,iBAAAhJ,MAEApqE,IAAA,SAAAf,GAEAnP,KAAAsjF,iBAAAhJ,KAAAt6E,KAAAujF,iBAAAjJ,KAAAnrE,IAUA6zE,cACAhzE,IAAA,WAEA,MAAAhQ,MAAAsjF,iBAAAN,cAEA9yE,IAAA,SAAAf,GAEAnP,KAAAsjF,iBAAAN,aAAAhjF,KAAAujF,iBAAAP,aAAA7zE,IAUA3E,OACAwF,IAAA,WAEA,MAAAhQ,MAAAsjF,iBAAA94E,OAEA0F,IAAA,SAAAf,GAEAnP,KAAAsjF,iBAAA94E,MAAAxK,KAAAujF,iBAAA/4E,MAAA2E,IAUA2S,KACA9R,IAAA,WAEA,MAAAhQ,MAAAsjF,iBAAAxhE,KAEA5R,IAAA,SAAAf,GAEAnP,KAAAsjF,iBAAAxhE,IAAA9hB,KAAAujF,iBAAAzhE,IAAA3S,QAKA2qE,aAAA,GAAA0J,qBAAA,IAAAC,qBAAA,MAAAC,KAAA,SAAAhjF,EAAAjB,EAAAD,GAeA,QAAA8gF,KAEAyC,EAAAhiF,KAAAf,MAhBA,GAAA+iF,GAAAriF,EAAA,wBAmBA4/E,GAAAz9E,UAAA0M,OAAA/L,OAAAu/E,EAAAlgF,WACAy9E,EAAAz9E,UAAAmH,YAAAs2E,EACA7gF,EAAAD,QAAA8gF,EAMAA,EAAAz9E,UAAAugF,YAAA,WAEA,GAAAx4B,GAAA5qD,KAAA2G,SAAAmb,IAAA3S,MAAAwF,EAAA3U,KAAA2G,SAAA6D,MAAA2E,MAAAwF,EACAk2C,EAAA7qD,KAAA2G,SAAAmb,IAAA3S,MAAA2I,EAAA9X,KAAA2G,SAAA6D,MAAA2E,MAAA2I,EACAuzB,EAAA71B,KAAA6lC,KAAAuP,EAAAA,EAAAC,EAAAA,EAEA7qD,MAAA2G,SAAAmiB,MAAA3Z,MAAAwF,EAAAi2C,EAAAvf,EACArrC,KAAA2G,SAAAmiB,MAAA3Z,MAAA2I,EAAA+yC,EAAAxf,KAGAs4C,wBAAA,MAAAC,KAAA,SAAAljF,EAAAjB,EAAAD,GAeA,QAAA+gF,KAEAwC,EAAAhiF,KAAAf,MAhBA,GAAA+iF,GAAAriF,EAAA,wBAmBA6/E,GAAA19E,UAAA0M,OAAA/L,OAAAu/E,EAAAlgF,WACA09E,EAAA19E,UAAAmH,YAAAu2E,EACA9gF,EAAAD,QAAA+gF,EAMAA,EAAA19E,UAAAugF,YAAA,WAEA,GAAAx4B,GAAA5qD,KAAA2G,SAAAmb,IAAA3S,MAAAwF,EAAA3U,KAAA2G,SAAA6D,MAAA2E,MAAAwF,EACAk2C,EAAA7qD,KAAA2G,SAAAmb,IAAA3S,MAAA2I,EAAA9X,KAAA2G,SAAA6D,MAAA2E,MAAA2I,EACAuzB,EAAA71B,KAAA6lC,KAAAuP,EAAAA,EAAAC,EAAAA,EAEA7qD,MAAA2G,SAAAmiB,MAAA3Z,MAAAwF,GAAAk2C,EAAAxf,EACArrC,KAAA2G,SAAAmiB,MAAA3Z,MAAA2I,EAAA8yC,EAAAvf,KAGAs4C,wBAAA,MAAAE,KAAA,SAAAnjF,EAAAjB,EAAAD,GAYA,QAAAghF,KAEA/2C,EAAAmd,eAAA7lD,KAAAf,KAEA,KAEA,4kBAGA86C,QAAAz4C,KAAA,KAAA8M,MAAA,IACAwtC,OAAAt6C,KAAA,KAAA8M,MAAA,GACArM,QAAAT,KAAA,KAAA8M,OAAAwF,EAAA,GAAAmD,EAAA,OAtBA,GAAA2xB,GAAA/oC,EAAA,aA2BA8/E,GAAA39E,UAAA0M,OAAA/L,OAAAimC,EAAAmd,eAAA/jD,WACA29E,EAAA39E,UAAAmH,YAAAw2E,EACA/gF,EAAAD,QAAAghF,EAEAjxE,OAAAwhC,iBAAAyvC,EAAA39E,WAOAC,QACAkN,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA7D,OAAAqM,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA7D,OAAAqM,MAAAA,IAUA2rC,QACA9qC,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAm0C,OAAA3rC,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAm0C,OAAA3rC,MAAAA,IAUAwtC,OACA3sC,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAg2C,MAAAxtC,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAg2C,MAAAxtC,MAAAA,QAKA2qE,aAAA,KAAAgK,KAAA,SAAApjF,EAAAjB,EAAAD,IACA,SAAAM,GAEAY,EAAA,aAEA,IAAA+oC,GAAAhqC,EAAAD,QAAAkB,EAAA,SAGA+oC,GAAAwpC,OAAAvyE,EAAA,YACA+oC,EAAAyM,QAAAx1C,EAAA,aACA+oC,EAAAwC,YAAAvrC,EAAA,iBACA+oC,EAAAs6C,QAAArjF,EAAA,aACA+oC,EAAAupC,KAAAtyE,EAAA,UACA+oC,EAAAu6C,cAAAtjF,EAAA,mBAUA+oC,EAAAw6C,OAAA,GAAAx6C,GAAAs6C,QAAA3pD,OAGA7qB,OAAA4pB,OAAAsQ,EAAA/oC,EAAA,kBAGAZ,EAAAG,KAAAwpC,IAEA1oC,KAAAf,KAAA,mBAAAF,QAAAA,OAAA,mBAAAC,MAAAA,KAAA,mBAAAF,QAAAA,aAEAqkF,kBAAA,GAAA/P,SAAA,GAAAgQ,gBAAA,IAAA/P,WAAA,IAAAC,YAAA,IAAA+P,gBAAA,IAAAC,YAAA,IAAA/P,SAAA,IAAAgQ,aAAA,MAAAC,KAAA,SAAA7jF,EAAAjB,EAAAD,GASA,QAAAglF,KAOAxkF,KAAAF,OAAA,GAAA2pC,GAAA0N,MAOAn3C,KAAAo5B,OAAA,KAOAp5B,KAAAykF,cAAA,KA7BA,GAAAh7C,GAAA/oC,EAAA,UAgCA8jF,GAAA3hF,UAAAmH,YAAAw6E,EACA/kF,EAAAD,QAAAglF,EAUAA,EAAA3hF,UAAA6hF,iBAAA,SAAAz6C,EAAAqM,EAAAquC,GAEA,MAAA16C,GAAAiB,eAAAqL,aAAAouC,GAAA3kF,KAAAF,OAAAw2C,MAGA9J,UAAA,KAAAo4C,KAAA,SAAAlkF,EAAAjB,EAAAD,GAsBA,QAAAqlF,GAAAh8C,EAAAh+B,GAEAA,EAAAA,MAOA7K,KAAA6oC,SAAAA,EAQA7oC,KAAA8kF,mBAAA58E,SAAA2C,EAAAi6E,mBAAAj6E,EAAAi6E,oBAAA,EAQA9kF,KAAA+kF,qBAAAl6E,EAAAk6E,sBAAA,GAOA/kF,KAAAglF,MAAA,GAAAR,GAOAxkF,KAAAmsC,WACA84C,SAAA,EACA7rD,OAAA,KACA/2B,KAAA,KACAC,KAAAtC,KAAAglF,MACAE,gBAAA,WACAllF,KAAAilF,SAAA,IASAjlF,KAAAmlF,uBAQAnlF,KAAAolF,sBAAA,KAQAplF,KAAAqlF,aAAA,EAOArlF,KAAAslF,UAAAtlF,KAAAslF,UAAAtiF,KAAAhD,MACAA,KAAAulF,eAAAvlF,KAAAulF,eAAAviF,KAAAhD,MAMAA,KAAAwlF,YAAAxlF,KAAAwlF,YAAAxiF,KAAAhD,MACAA,KAAAylF,iBAAAzlF,KAAAylF,iBAAAziF,KAAAhD,MAKAA,KAAA0lF,YAAA1lF,KAAA0lF,YAAA1iF,KAAAhD,MACAA,KAAA2lF,iBAAA3lF,KAAA2lF,iBAAA3iF,KAAAhD,MAKAA,KAAA4lF,WAAA5lF,KAAA4lF,WAAA5iF,KAAAhD,MACAA,KAAA6lF,oBAAA7lF,KAAA6lF,oBAAA7iF,KAAAhD,MAMAA,KAAA8lF,aAAA9lF,KAAA8lF,aAAA9iF,KAAAhD,MACAA,KAAA+lF,kBAAA/lF,KAAA+lF,kBAAA/iF,KAAAhD,MAKAA,KAAAgmF,WAAAhmF,KAAAgmF,WAAAhjF,KAAAhD,MACAA,KAAAimF,gBAAAjmF,KAAAimF,gBAAAjjF,KAAAhD,MAKAA,KAAAkmF,YAAAlmF,KAAAkmF,YAAAljF,KAAAhD,MACAA,KAAAmmF,iBAAAnmF,KAAAmmF,iBAAAnjF,KAAAhD,MAKAA,KAAA6jB,KAAA,EAMA7jB,KAAAomF,mBAAA,UAOApmF,KAAAqmF,WAAA,GAAA58C,GAAA0N,MAMAn3C,KAAAyvC,WAAA,EAEAzvC,KAAAsmF,iBAAAtmF,KAAA6oC,SAAAe,KAAA5pC,KAAA6oC,SAAA4G,YAnKA,GAAAhG,GAAA/oC,EAAA,WACA8jF,EAAA9jF,EAAA,oBAGA6O,QAAA4pB,OACAsQ,EAAAC,cAAA7mC,UACAnC,EAAA,wBAgKAmkF,EAAAhiF,UAAAmH,YAAA66E,EACAplF,EAAAD,QAAAqlF,EAWAA,EAAAhiF,UAAAyjF,iBAAA,SAAAC,EAAA92C,GAEAzvC,KAAAwmF,eAEAxmF,KAAAolF,sBAAAmB,EAEAvmF,KAAAyvC,WAAAA,GAAA,EAEAzvC,KAAAymF,aAQA5B,EAAAhiF,UAAA4jF,UAAA,WAEAzmF,KAAAolF,wBAKA37C,EAAAsc,OAAAqrB,OAAAh2C,IAAAp7B,KAAA2pC,OAAA3pC,MAEAH,OAAAkgC,UAAA2mD,mBAEA1mF,KAAAolF,sBAAAt8C,MAAA,uBAAA,OACA9oC,KAAAolF,sBAAAt8C,MAAA,oBAAA,QAGAjpC,OAAAggC,SAAAF,iBAAA,YAAA3/B,KAAA0lF,aAAA,GACA1lF,KAAAolF,sBAAAzlD,iBAAA,YAAA3/B,KAAAwlF,aAAA,GACAxlF,KAAAolF,sBAAAzlD,iBAAA,WAAA3/B,KAAA4lF,YAAA,GAEA5lF,KAAAolF,sBAAAzlD,iBAAA,aAAA3/B,KAAA8lF,cAAA,GACA9lF,KAAAolF,sBAAAzlD,iBAAA,WAAA3/B,KAAAgmF,YAAA,GACAhmF,KAAAolF,sBAAAzlD,iBAAA,YAAA3/B,KAAAkmF,aAAA,GAEArmF,OAAA8/B,iBAAA,UAAA3/B,KAAAslF,WAAA,GAEAtlF,KAAAqlF,aAAA,IAQAR,EAAAhiF,UAAA2jF,aAAA,WAEAxmF,KAAAolF,wBAKA37C,EAAAsc,OAAAqrB,OAAAH,OAAAjxE,KAAA2pC,QAEA9pC,OAAAkgC,UAAA2mD,mBAEA1mF,KAAAolF,sBAAAt8C,MAAA,uBAAA,GACA9oC,KAAAolF,sBAAAt8C,MAAA,oBAAA,IAGAjpC,OAAAggC,SAAAjB,oBAAA,YAAA5+B,KAAA0lF,aAAA,GACA1lF,KAAAolF,sBAAAxmD,oBAAA,YAAA5+B,KAAAwlF,aAAA,GACAxlF,KAAAolF,sBAAAxmD,oBAAA,WAAA5+B,KAAA4lF,YAAA,GAEA5lF,KAAAolF,sBAAAxmD,oBAAA,aAAA5+B,KAAA8lF,cAAA,GACA9lF,KAAAolF,sBAAAxmD,oBAAA,WAAA5+B,KAAAgmF,YAAA,GACAhmF,KAAAolF,sBAAAxmD,oBAAA,YAAA5+B,KAAAkmF,aAAA,GAEAlmF,KAAAolF,sBAAA,KAEAvlF,OAAA++B,oBAAA,UAAA5+B,KAAAslF,WAAA,GAEAtlF,KAAAqlF,aAAA,IAUAR,EAAAhiF,UAAA8mC,OAAA,SAAAumC,GAIA,GAFAlwE,KAAA2mF,YAAAzW,IAEAlwE,KAAA2mF,WAAA3mF,KAAA+kF,wBAKA/kF,KAAA2mF,WAAA,EAEA3mF,KAAAolF,uBAAA,CAMA,GAAAplF,KAAA4mF,QAGA,YADA5mF,KAAA4mF,SAAA,EAIA5mF,MAAA6mF,OAAA,UAEA7mF,KAAA8mF,mBAAA9mF,KAAAglF,MAAAllF,OAAAE,KAAA6oC,SAAA0B,oBAAAvqC,KAAA6lF,qBAAA,GAEA7lF,KAAAomF,qBAAApmF,KAAA6mF,SAEA7mF,KAAAomF,mBAAApmF,KAAA6mF,OACA7mF,KAAAolF,sBAAAt8C,MAAA+9C,OAAA7mF,KAAA6mF,UAcAhC,EAAAhiF,UAAAqpC,cAAA,SAAAjC,EAAA88C,EAAA56C,GAEAA,EAAA84C,UAEA94C,EAAA/S,OAAA6Q,EACAkC,EAAA9pC,KAAA0kF,EAEA98C,EAAA7iB,KAAA2/D,EAAA56C,GAEAlC,EAAA88C,IAEA98C,EAAA88C,GAAA56C,KAaA04C,EAAAhiF,UAAAmkF,mBAAA,SAAA1wC,EAAA3hC,EAAAmD,GAEA,GAAA0yB,GAAAxqC,KAAAolF,sBAAA36C,uBACA6L,GAAA3hC,GAAAA,EAAA61B,EAAA1sB,OAAA9d,KAAAolF,sBAAAxhF,MAAA4mC,EAAA5mC,OAAA5D,KAAAyvC,WACA6G,EAAAx+B,GAAAA,EAAA0yB,EAAAxB,MAAAhpC,KAAAolF,sBAAAvhF,OAAA2mC,EAAA3mC,QAAA7D,KAAAyvC,YAaAo1C,EAAAhiF,UAAAikF,mBAAA,SAAAxwC,EAAArM,EAAA30B,EAAA2xE,EAAA78C,GAEA,IAAAH,IAAAA,EAAAC,QAEA,OAAA,CAcA,IAAAg9C,IAAA,EACAC,EAAA/8C,EAAAH,EAAAG,aAAAA,CAUA,IAPAH,EAAAe,UAEAm8C,GAAA,GAKAl9C,EAAAuiB,oBAIA,IAAA,GAFAnjB,GAAAY,EAAAZ,SAEA1oC,EAAA0oC,EAAAroC,OAAA,EAAAL,GAAA,EAAAA,IAGAX,KAAA8mF,mBAAAxwC,EAAAjN,EAAA1oC,GAAA2U,EAAA2xE,EAAAE,KAEAD,GAAA,EAGAC,GAAA,EAIA99C,EAAA1oC,GAAAypC,cAEA68C,GAAA,GA8BA,OAvBA78C,KAIA68C,IAAAC,IAEAj9C,EAAAe,SAEAf,EAAAiB,eAAAqL,aAAAD,EAAAt2C,KAAAqmF,YACAa,EAAAj9C,EAAAe,QAAA6T,SAAA7+C,KAAAqmF,WAAA1xE,EAAA3U,KAAAqmF,WAAAvuE,IAEAmyB,EAAA2U,gBAEAsoC,EAAAj9C,EAAA2U,cAAAtI,KAIArM,EAAAG,aAEA90B,EAAA20B,EAAAi9C,IAIAA,GAWArC,EAAAhiF,UAAA2iF,YAAA,SAAArtD,GAEAn4B,KAAAglF,MAAAP,cAAAtsD,EACAn4B,KAAAmsC,UAAA7pC,KAAAtC,KAAAglF,MACAhlF,KAAAmsC,UAAA84C,SAAA,EAGAjlF,KAAAgnF,mBAAAhnF,KAAAglF,MAAAllF,OAAAq4B,EAAAivD,QAAAjvD,EAAAkvD,SAEArnF,KAAA8kF,oBAEA9kF,KAAAglF,MAAAP,cAAAjrB,iBAGAx5D,KAAA8mF,mBAAA9mF,KAAAglF,MAAAllF,OAAAE,KAAA6oC,SAAA0B,oBAAAvqC,KAAAylF,kBAAA,IAUAZ,EAAAhiF,UAAA4iF,iBAAA,SAAAx7C,EAAAi9C,GAEA,GAAAhnF,GAAAF,KAAAglF,MAAAP,cAEA6C,EAAA,IAAApnF,EAAAqnF,QAAA,IAAArnF,EAAAsnF,KAEAN,KAEAj9C,EAAAq9C,EAAA,eAAA,gBAAA,EACAtnF,KAAAksC,cAAAjC,EAAAq9C,EAAA,YAAA,YAAAtnF,KAAAmsC,aAYA04C,EAAAhiF,UAAAyiF,UAAA,SAAAntD,GAEAn4B,KAAAglF,MAAAP,cAAAtsD,EACAn4B,KAAAmsC,UAAA7pC,KAAAtC,KAAAglF,MACAhlF,KAAAmsC,UAAA84C,SAAA,EAGAjlF,KAAAgnF,mBAAAhnF,KAAAglF,MAAAllF,OAAAq4B,EAAAivD,QAAAjvD,EAAAkvD,SAEArnF,KAAA8mF,mBAAA9mF,KAAAglF,MAAAllF,OAAAE,KAAA6oC,SAAA0B,oBAAAvqC,KAAAulF,gBAAA,IAUAV,EAAAhiF,UAAA0iF,eAAA,SAAAt7C,EAAAi9C;AAEA,GAAAhnF,GAAAF,KAAAglF,MAAAP,cAEA6C,EAAA,IAAApnF,EAAAqnF,QAAA,IAAArnF,EAAAsnF,MACAC,EAAAH,EAAA,eAAA,aAEAJ,IAEAlnF,KAAAksC,cAAAjC,EAAAq9C,EAAA,UAAA,UAAAtnF,KAAAmsC,WAEAlC,EAAAw9C,KAEAx9C,EAAAw9C,IAAA,EACAznF,KAAAksC,cAAAjC,EAAAq9C,EAAA,aAAA,QAAAtnF,KAAAmsC,aAKAlC,EAAAw9C,KAEAx9C,EAAAw9C,IAAA,EACAznF,KAAAksC,cAAAjC,EAAAq9C,EAAA,iBAAA,iBAAAtnF,KAAAmsC,aAYA04C,EAAAhiF,UAAA6iF,YAAA,SAAAvtD,GAEAn4B,KAAAglF,MAAAP,cAAAtsD,EACAn4B,KAAAmsC,UAAA7pC,KAAAtC,KAAAglF,MACAhlF,KAAAmsC,UAAA84C,SAAA,EAEAjlF,KAAAgnF,mBAAAhnF,KAAAglF,MAAAllF,OAAAq4B,EAAAivD,QAAAjvD,EAAAkvD,SAEArnF,KAAA4mF,SAAA,EAEA5mF,KAAA6mF,OAAA,UAEA7mF,KAAA8mF,mBAAA9mF,KAAAglF,MAAAllF,OAAAE,KAAA6oC,SAAA0B,oBAAAvqC,KAAA2lF,kBAAA,GAEA3lF,KAAAomF,qBAAApmF,KAAA6mF,SAEA7mF,KAAAomF,mBAAApmF,KAAA6mF,OACA7mF,KAAAolF,sBAAAt8C,MAAA+9C,OAAA7mF,KAAA6mF,SAaAhC,EAAAhiF,UAAA8iF,iBAAA,SAAA17C,EAAAi9C,GAEAlnF,KAAAksC,cAAAjC,EAAA,YAAAjqC,KAAAmsC,WACAnsC,KAAA6lF,oBAAA57C,EAAAi9C,IAUArC,EAAAhiF,UAAA+iF,WAAA,SAAAztD,GAEAn4B,KAAAglF,MAAAP,cAAAtsD,EACAn4B,KAAAmsC,UAAA84C,SAAA,EAGAjlF,KAAAgnF,mBAAAhnF,KAAAglF,MAAAllF,OAAAq4B,EAAAivD,QAAAjvD,EAAAkvD,SAEArnF,KAAAolF,sBAAAt8C,MAAA+9C,OAAA,UAGA7mF,KAAAgnF,mBAAAhnF,KAAAglF,MAAAllF,OAAAq4B,EAAAivD,QAAAjvD,EAAAkvD,SAEArnF,KAAA8mF,mBAAA9mF,KAAAglF,MAAAllF,OAAAE,KAAA6oC,SAAA0B,oBAAAvqC,KAAA6lF,qBAAA,IAUAhB,EAAAhiF,UAAAgjF,oBAAA,SAAA57C,EAAAi9C,GAEAA,GAEAj9C,EAAAy9C,QAEAz9C,EAAAy9C,OAAA,EACA1nF,KAAAksC,cAAAjC,EAAA,YAAAjqC,KAAAmsC,YAGAlC,EAAA09C,aAEA3nF,KAAA6mF,OAAA58C,EAAA29C,gBAKA39C,EAAAy9C,QAEAz9C,EAAAy9C,OAAA,EACA1nF,KAAAksC,cAAAjC,EAAA,WAAAjqC,KAAAmsC,aAYA04C,EAAAhiF,UAAAijF,aAAA,SAAA3tD,GAEAn4B,KAAA8kF,oBAEA3sD,EAAAqhC,gBAMA,KAAA,GAHAquB,GAAA1vD,EAAA0vD,eACAC,EAAAD,EAAA7mF,OAEAL,EAAA,EAAAmnF,EAAAnnF,EAAAA,IACA,CACA,GAAAonF,GAAAF,EAAAlnF,GAEAqnF,EAAAhoF,KAAAioF,aAAAF,EAEAC,GAAAvD,cAAAtsD,EAEAn4B,KAAAmsC,UAAA7pC,KAAA0lF,EACAhoF,KAAAmsC,UAAA84C,SAAA,EAEAjlF,KAAA8mF,mBAAAkB,EAAAloF,OAAAE,KAAA6oC,SAAA0B,oBAAAvqC,KAAA+lF,mBAAA,GAEA/lF,KAAAkoF,gBAAAF,KAWAnD,EAAAhiF,UAAAkjF,kBAAA,SAAA97C,EAAAi9C,GAEAA,IAEAj9C,EAAAk+C,YAAA,EACAnoF,KAAAksC,cAAAjC,EAAA,aAAAjqC,KAAAmsC,aAUA04C,EAAAhiF,UAAAmjF,WAAA,SAAA7tD,GAEAn4B,KAAA8kF,oBAEA3sD,EAAAqhC,gBAMA,KAAA,GAHAquB,GAAA1vD,EAAA0vD,eACAC,EAAAD,EAAA7mF,OAEAL,EAAA,EAAAmnF,EAAAnnF,EAAAA,IACA,CACA,GAAAonF,GAAAF,EAAAlnF,GAEAqnF,EAAAhoF,KAAAioF,aAAAF,EAEAC,GAAAvD,cAAAtsD,EAGAn4B,KAAAmsC,UAAA7pC,KAAA0lF,EACAhoF,KAAAmsC,UAAA84C,SAAA,EAGAjlF,KAAA8mF,mBAAAkB,EAAAloF,OAAAE,KAAA6oC,SAAA0B,oBAAAvqC,KAAAimF,iBAAA,GAEAjmF,KAAAkoF,gBAAAF,KAWAnD,EAAAhiF,UAAAojF,gBAAA,SAAAh8C,EAAAi9C,GAEAA,GAEAlnF,KAAAksC,cAAAjC,EAAA,WAAAjqC,KAAAmsC,WAEAlC,EAAAk+C,aAEAl+C,EAAAk+C,YAAA,EACAnoF,KAAAksC,cAAAjC,EAAA,MAAAjqC,KAAAmsC,aAKAlC,EAAAk+C,aAEAl+C,EAAAk+C,YAAA,EACAnoF,KAAAksC,cAAAjC,EAAA,kBAAAjqC,KAAAmsC,aAWA04C,EAAAhiF,UAAAqjF,YAAA,SAAA/tD,GAEAn4B,KAAA8kF,oBAEA3sD,EAAAqhC,gBAMA,KAAA,GAHAquB,GAAA1vD,EAAA0vD,eACAC,EAAAD,EAAA7mF,OAEAL,EAAA,EAAAmnF,EAAAnnF,EAAAA,IACA,CACA,GAAAonF,GAAAF,EAAAlnF,GAEAqnF,EAAAhoF,KAAAioF,aAAAF,EAEAC,GAAAvD,cAAAtsD,EAEAn4B,KAAAmsC,UAAA7pC,KAAA0lF,EACAhoF,KAAAmsC,UAAA84C,SAAA,EAEAjlF,KAAA8mF,mBAAAkB,EAAAloF,OAAAE,KAAA6oC,SAAA0B,oBAAAvqC,KAAAmmF,kBAAA,GAEAnmF,KAAAkoF,gBAAAF,KAWAnD,EAAAhiF,UAAAsjF,iBAAA,SAAAl8C,EAAAi9C,GAEAA,EAAAA,EACAlnF,KAAAksC,cAAAjC,EAAA,YAAAjqC,KAAAmsC,YAUA04C,EAAAhiF,UAAAolF,aAAA,SAAAF,GAEA,GAAAC,GAAAhoF,KAAAmlF,oBAAAlrE,KAmBA,OAjBA+tE,KAEAA,EAAA,GAAAxD,IAGAwD,EAAAI,WAAAL,EAAAK,WACApoF,KAAAgnF,mBAAAgB,EAAAloF,OAAAioF,EAAAX,QAAAW,EAAAV,SAEAtnD,UAAAC,aAEAgoD,EAAAloF,OAAA6U,EAAAqzE,EAAAloF,OAAA6U,EAAA3U,KAAAyvC,WACAu4C,EAAAloF,OAAAgY,EAAAkwE,EAAAloF,OAAAgY,EAAA9X,KAAAyvC,YAGAs4C,EAAAM,QAAAL,EAAAloF,OAAA6U,EACAozE,EAAAO,QAAAN,EAAAloF,OAAAgY,EAEAkwE,GAUAnD,EAAAhiF,UAAAqlF,gBAAA,SAAAF,GAEAhoF,KAAAmlF,oBAAAx6E,KAAAq9E,IAOAnD,EAAAhiF,UAAA0C,QAAA,WACAvF,KAAAwmF,eAEAxmF,KAAA6oC,SAAA,KAEA7oC,KAAAglF,MAAA,KAEAhlF,KAAAmsC,UAAA,KAEAnsC,KAAAmlF,oBAAA,KAEAnlF,KAAAolF,sBAAA,KAEAplF,KAAAslF,UAAA,KACAtlF,KAAAulF,eAAA,KAGAvlF,KAAAwlF,YAAA,KACAxlF,KAAAylF,iBAAA,KAEAzlF,KAAA0lF,YAAA,KACA1lF,KAAA2lF,iBAAA,KAEA3lF,KAAA4lF,WAAA,KACA5lF,KAAA6lF,oBAAA,KAGA7lF,KAAA8lF,aAAA,KACA9lF,KAAA+lF,kBAAA,KAEA/lF,KAAAgmF,WAAA,KACAhmF,KAAAimF,gBAAA,KAEAjmF,KAAAkmF,YAAA,KACAlmF,KAAAmmF,iBAAA,KAEAnmF,KAAAqmF,WAAA,MAGA58C,EAAA4C,cAAAC,eAAA,cAAAu4C,GACAp7C,EAAA8C,eAAAD,eAAA,cAAAu4C,KAEAr4C,UAAA,GAAA+7C,oBAAA,IAAAC,sBAAA,MAAAC,KAAA,SAAA/nF,EAAAjB,EAAAD,GAWAC,EAAAD,SACAglF,gBAAA9jF,EAAA,qBACAmkF,mBAAAnkF,EAAA,wBACAgoF,kBAAAhoF,EAAA,0BAGA6nF,oBAAA,IAAAI,uBAAA,IAAAH,sBAAA,MAAAI,KAAA,SAAAloF,EAAAjB,EAAAD,GAeA,GAAAkpF,IAIAt+C,aAAA,EAIAu9C,YAAA,EAIAn7B,qBAAA,EAIAo7B,cAAA,UAQAF,OAAA,EAKAS,YAAA,EAGA1oF,GAAAD,QAAAkpF,OAEAG,KAAA,SAAAnoF,EAAAjB,EAAAD,GAOA,QAAAotB,GAAAmP,EAAA93B,GACA,GAAA3B,MACAwmF,EAAA/sD,EAAAz5B,KAAAymF,qBAAA,QAAA,GACAC,EAAAjtD,EAAAz5B,KAAAymF,qBAAA,UAAA,EAEAzmF,GAAAqlE,KAAAmhB,EAAAG,aAAA,QACA3mF,EAAAyI,KAAAuU,SAAAwpE,EAAAG,aAAA,QAAA,IACA3mF,EAAAwmE,WAAAxpD,SAAA0pE,EAAAC,aAAA,cAAA,IACA3mF,EAAA0yE,QAKA,KAAA,GAFAkU,GAAAntD,EAAAz5B,KAAAymF,qBAAA,QAEApoF,EAAA,EAAAA,EAAAuoF,EAAAloF,OAAAL,IACA,CACA,GAAAw0E,GAAA71D,SAAA4pE,EAAAvoF,GAAAsoF,aAAA,MAAA,IAEAE,EAAA,GAAA1/C,GAAAuJ,UACA1zB,SAAA4pE,EAAAvoF,GAAAsoF,aAAA,KAAA,IAAAhlF,EAAAmpD,MAAAz4C,EACA2K,SAAA4pE,EAAAvoF,GAAAsoF,aAAA,KAAA,IAAAhlF,EAAAmpD,MAAAt1C,EACAwH,SAAA4pE,EAAAvoF,GAAAsoF,aAAA,SAAA,IACA3pE,SAAA4pE,EAAAvoF,GAAAsoF,aAAA,UAAA,IAGA3mF,GAAA0yE,MAAAG,IACAG,QAAAh2D,SAAA4pE,EAAAvoF,GAAAsoF,aAAA,WAAA,IACA1T,QAAAj2D,SAAA4pE,EAAAvoF,GAAAsoF,aAAA,WAAA,IACAzT,SAAAl2D,SAAA4pE,EAAAvoF,GAAAsoF,aAAA,YAAA,IACA5T,WACApxE,QAAA,GAAAwlC,GAAA/lC,QAAAO,EAAA25C,YAAAurC,IAMA,GAAAC,GAAArtD,EAAAz5B,KAAAymF,qBAAA,UACA,KAAApoF,EAAA,EAAAA,EAAAyoF,EAAApoF,OAAAL,IACA,CACA,GAAA0oF,GAAA/pE,SAAA8pE,EAAAzoF,GAAAsoF,aAAA,SAAA,IACAK,EAAAhqE,SAAA8pE,EAAAzoF,GAAAsoF,aAAA,UAAA,IACAt6B,EAAArvC,SAAA8pE,EAAAzoF,GAAAsoF,aAAA,UAAA,GAEA3mF,GAAA0yE,MAAAsU,GAAAjU,QAAAgU,GAAA16B,EAGA5yB,EAAAwtD,WAAAjnF,EAIA2wE,EAAAW,WAAAkB,MAAAxyE,EAAAqlE,MAAArlE,EAvDA,GAAA64B,GAAAz6B,EAAA,mBAAAy6B,SACAsO,EAAA/oC,EAAA,WACAuyE,EAAAvyE,EAAA,aACA6jB,EAAA7jB,EAAA,OAwDAjB,GAAAD,QAAA,WAEA,MAAA,UAAAu8B,EAAAzb,GAGA,IAAAyb,EAAAz5B,OAAAy5B,EAAAmB,MAEA,MAAA5c,IAIA,IACA,IAAAyb,EAAAz5B,KAAAymF,qBAAA,QAAA/nF,QACA,IAAA+6B,EAAAz5B,KAAAymF,qBAAA,QAAA/nF,QACA,OAAA+6B,EAAAz5B,KAAAymF,qBAAA,QAAA,GAAAE,aAAA,QAGA,MAAA3oE,IAGA,IAAAkpE,GAAAjlE,EAAAoB,QAAAoW,EAAAjO,IAEA,OAAA07D,IACAA,EAAA,IAGAxpF,KAAAq6B,SAAAmvD,IAEA,MAAAxpF,KAAAq6B,QAAA3V,OAAA1kB,KAAAq6B,QAAAr5B,OAAA,KACAwoF,GAAA,KAIAA,EAAAA,EAAAv6E,QAAAjP,KAAAq6B,QAAA,KAIAmvD,GAAA,MAAAA,EAAA9kE,OAAA8kE,EAAAxoF,OAAA,KACAwoF,GAAA,IAEA,IAAAC,GAAAD,EAAAztD,EAAAz5B,KAAAymF,qBAAA,QAAA,GAAAE,aAAA,OACA,IAAAx/C,EAAAoB,MAAA85B,aAAA8kB,GAEA78D,EAAAmP,EAAA0N,EAAAoB,MAAA85B,aAAA8kB,IACAnpE,QAEA,CACA,GAAAopE,IACA/sD,YAAAZ,EAAAY,YACAC,SAAAzB,EAAAiB,UAAA8C,MACAnC,SAAAhB,EAAAgB,SAAA4sD,cAGA3pF,MAAAo7B,IAAAW,EAAAvtB,KAAA,SAAAi7E,EAAAC,EAAA,SAAA3lE,GACA6I,EAAAmP,EAAAhY,EAAA9f,SACAqc,WAMAksB,UAAA,GAAAo9C,YAAA,IAAArlE,KAAA,GAAAwiB,kBAAA,KAAA8iD,KAAA,SAAAnpF,EAAAjB,EAAAD,GAWAC,EAAAD,SACA46B,OAAA15B,EAAA,YAGAopF,iBAAAppF,EAAA,sBACAqpF,kBAAArpF,EAAA,uBACAspF,cAAAtpF,EAAA,mBACAy6B,SAAAz6B,EAAA,mBAAAy6B,YAGA8uD,qBAAA,IAAAC,WAAA,IAAAC,sBAAA,IAAAC,kBAAA,IAAArjD,kBAAA,KAAAsjD,KAAA,SAAA3pF,EAAAjB,EAAAD,GA4BA,QAAA46B,GAAAC,EAAAniB,GAEAoyE,EAAAvpF,KAAAf,KAAAq6B,EAAAniB,EAEA,KAAA,GAAAvX,GAAA,EAAAA,EAAAy5B,EAAAmwD,gBAAAvpF,SAAAL,EACAX,KAAA47B,IAAAxB,EAAAmwD,gBAAA5pF,MAhCA,GAAA2pF,GAAA5pF,EAAA,mBACAspF,EAAAtpF,EAAA,mBACAqpF,EAAArpF,EAAA,uBACAopF,EAAAppF,EAAA,qBAiCA05B,GAAAv3B,UAAA0M,OAAA/L,OAAA8mF,EAAAznF,WACAu3B,EAAAv3B,UAAAmH,YAAAowB,EAEA36B,EAAAD,QAAA46B,EAEAA,EAAAmwD,iBAEAD,EAAA7lD,WAAAG,QAAAC,KAEAmlD,EAEAD,EAEAD,GAGA1vD,EAAAowD,kBAAA,SAAA72E,GACAymB,EAAAmwD,gBAAA5/E,KAAAgJ,GAIA,IAAAwnB,GAAAmvD,EAAAnvD,QAEAA,GAAA4I,oBAAA,MAAA5I,EAAAmB,kBAAAiE,YAEA0pD,qBAAA,IAAAE,sBAAA,IAAAC,kBAAA,IAAArjD,kBAAA,KAAA0jD,KAAA,SAAA/pF,EAAAjB,EAAAD,GACA,GAAA27B,GAAAz6B,EAAA,mBAAAy6B,SACA5W,EAAA7jB,EAAA,QACA+oC,EAAA/oC,EAAA,UAEAjB,GAAAD,QAAA,WAEA,MAAA,UAAAu8B,EAAAzb,GAGA,IAAAyb,EAAAz5B,OAAAy5B,EAAAkB,SAAAlB,EAAAz5B,KAAAq0E,OAEA,MAAAr2D,IAGA,IAAAopE,IACA/sD,YAAAZ,EAAAY,YACAC,SAAAzB,EAAAiB,UAAA8C,MACAnC,SAAAhB,EAAAgB,SAAA4sD,eAGAe,EAAAnmE,EAAAoB,QAAAoW,EAAAjO,IAAA7e,QAAAjP,KAAAq6B,QAAA,KAEAoV,EAAAhG,EAAAoB,MAAA6hC,mBAAA3wC,EAAAjO,IAGA9tB,MAAAo7B,IAAAW,EAAAvtB,KAAA,SAAAk8E,EAAA,IAAA3uD,EAAAz5B,KAAAqoF,KAAAjgB,MAAAgf,EAAA,SAAA3lE,GAEAgY,EAAAwpC,WAEA,IAAAoR,GAAA56C,EAAAz5B,KAAAq0E,MAEA,KAAA,GAAAh2E,KAAAg2E,GACA,CACA,GAAAnsC,GAAAmsC,EAAAh2E,GAAAysD,KAEA,IAAA5iB,EACA,CACA,GAAAz/B,GAAA,KACAqa,EAAA,IAqBA,IAlBAra,EADA4rE,EAAAh2E,GAAAiqF,QACA,GAAAnhD,GAAAuJ,UAAAxI,EAAA71B,EAAA61B,EAAA1yB,EAAA0yB,EAAApZ,EAAAoZ,EAAA/wB,GAGA,GAAAgwB,GAAAuJ,UAAAxI,EAAA71B,EAAA61B,EAAA1yB,EAAA0yB,EAAA/wB,EAAA+wB,EAAApZ,GAIAulD,EAAAh2E,GAAAkqF,UAEAzlE,EAAA,GAAAqkB,GAAAuJ,UACA2jC,EAAAh2E,GAAAmqF,iBAAAn2E,EAAA86B,EACAknC,EAAAh2E,GAAAmqF,iBAAAhzE,EAAA23B,EACAknC,EAAAh2E,GAAAoqF,WAAAtxE,EAAAg2B,EACAknC,EAAAh2E,GAAAoqF,WAAA35D,EAAAqe,IAKAknC,EAAAh2E,GAAAiqF,QACA,CACA,GAAAjuB,GAAA5xD,EAAAnH,KACAmH,GAAAnH,MAAAmH,EAAAlH,OACAkH,EAAAlH,OAAA84D,EAGA5xD,EAAA4J,GAAA86B,EACA1kC,EAAA+M,GAAA23B,EACA1kC,EAAAnH,OAAA6rC,EACA1kC,EAAAlH,QAAA4rC,EAEA1T,EAAAwpC,SAAA5kE,GAAA,GAAA8oC,GAAA/lC,QAAAqgB,EAAA9f,QAAA25C,YAAA7yC,EAAAA,EAAA6tC,QAAAxzB,EAAAuxD,EAAAh2E,GAAAiqF,SAGAnhD,EAAAoB,MAAA85B,aAAAhkE,GAAAo7B,EAAAwpC,SAAA5kE,IAIA2f,UAKAksB,UAAA,GAAAjoB,KAAA,GAAAwiB,kBAAA,KAAAikD,KAAA,SAAAtqF,EAAAjB,EAAAD,GACA,GAAAiqC,GAAA/oC,EAAA,UAEAjB,GAAAD,QAAA,WAEA,MAAA,UAAAu8B,EAAAzb,GAGA,GAAAyb,EAAAz5B,MAAAy5B,EAAAoB,QACA,CACA,GAAAygB,GAAA,GAAAnU,GAAA4c,YAAAtqB,EAAAz5B,KAAA,KAAAmnC,EAAAoB,MAAA6hC,mBAAA3wC,EAAAjO,KACA8vB,GAAAguB,SAAA7vC,EAAAjO,IACAiO,EAAA93B,QAAA,GAAAwlC,GAAA/lC,QAAAk6C,GAEAnU,EAAAoB,MAAAwhC,iBAAAtwC,EAAAjO,KAAA8vB,EACAnU,EAAAoB,MAAA85B,aAAA5oC,EAAAjO,KAAAiO,EAAA93B,QAGAqc,QAIAksB,UAAA,KAAAy+C,KAAA,SAAAvqF,EAAAjB,EAAAD,GAgBA,QAAAg0E,GAAAvvE,EAAAs4D,EAAA7P,EAAAtL,EAAA8pC,GAEAzhD,EAAAiH,UAAA3vC,KAAAf,MAQAA,KAAAowD,SAAA,KAOApwD,KAAA0sD,IAAAA,GAAA,GAAA7kD,eAAA,EAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,IAOA7H,KAAAu8D,SAAAA,GAAA,GAAA10D,eAAA,EAAA,EACA,IAAA,EACA,IAAA,IACA,EAAA,MAMA7H,KAAAohD,QAAAA,GAAA,GAAAqB,cAAA,EAAA,EAAA,EAAA,IAOAziD,KAAA+J,OAAA,EASA/J,KAAA+3C,UAAAtO,EAAAiE,YAAAC,OAOA3tC,KAAAmrF,cAAA,EAQAnrF,KAAAkrF,SAAAA,GAAA1X,EAAA5kC,WAAAw8C,cAGAprF,KAAAiE,QAAAA,EAOAjE,KAAAqN,OAAA,KA5FA,GAAAo8B,GAAA/oC,EAAA,WACAi4C,EAAA,GAAAlP,GAAA0N,MACAk0C,EAAA,GAAA5hD,GAAA0P,OA8FAq6B,GAAA3wE,UAAA0M,OAAA/L,OAAAimC,EAAAiH,UAAA7tC,WACA2wE,EAAA3wE,UAAAmH,YAAAwpE,EACA/zE,EAAAD,QAAAg0E,EAEAjkE,OAAAwhC,iBAAAyiC,EAAA3wE,WAOAoB,SACA+L,IAAA,WAEA,MAAAhQ,MAAAowD,UAEAlgD,IAAA,SAAAf,GAEAnP,KAAAowD,WAAAjhD,IAKAnP,KAAAowD,SAAAjhD,EAEAA,IAGAA,EAAAyuC,YAAAqZ,UAEAj3D,KAAAmkE,mBAIAh1D,EAAA8X,KAAA,SAAAjnB,KAAAmkE,iBAAAnkE,YAaAwzE,EAAA3wE,UAAAwxC,aAAA,SAAAxL,GAEAA,EAAAkV,kBAAAlV,EAAAmD,QAAAgnC,MACAnqC,EAAAmD,QAAAgnC,KAAAtgC,OAAA1yC,OASAwzE,EAAA3wE,UAAA2xC,cAAA,SAAA3L,GAEA,GAAA9Q,GAAA8Q,EAAA9Q,QAEAtb,EAAAzc,KAAAkrC,cAEArC,GAAAmH,YAEAjY,EAAA2e,aAAAj6B,EAAAhc,EAAAgc,EAAAzX,EAAAyX,EAAA4X,EAAA5X,EAAA4uB,EAAA,EAAA5uB,EAAA0uB,GAAA,EAAA1uB,EAAA2uB,IAIArT,EAAA2e,aAAAj6B,EAAAhc,EAAAgc,EAAAzX,EAAAyX,EAAA4X,EAAA5X,EAAA4uB,EAAA5uB,EAAA0uB,GAAA1uB,EAAA2uB,IAGAprC,KAAAkrF,WAAA1X,EAAA5kC,WAAAw8C,cAEAprF,KAAAsrF,0BAAAvzD,GAIA/3B,KAAAurF,uBAAAxzD,IAUAy7C,EAAA3wE,UAAAyoF,0BAAA,SAAAvzD,GASA,IAAA,GANAwkC,GAAAv8D,KAAAu8D,SACA7P,EAAA1sD,KAAA0sD,IAEA1rD,EAAAu7D,EAAAv7D,OAAA,EAGAL,EAAA,EAAAK,EAAA,EAAAL,EAAAA,IACA,CAEA,GAAAyT,GAAA,EAAAzT,CACAX,MAAAwrF,0BAAAzzD,EAAAwkC,EAAA7P,EAAAt4C,EAAAA,EAAA,EAAAA,EAAA,KAUAo/D,EAAA3wE,UAAA0oF,uBAAA,SAAAxzD,GAUA,IAAA,GAPAwkC,GAAAv8D,KAAAu8D,SACA7P,EAAA1sD,KAAA0sD,IACAtL,EAAAphD,KAAAohD,QAEApgD,EAAAogD,EAAApgD,OAGAL,EAAA,EAAAK,EAAAL,EAAAA,GAAA,EACA,CAEA,GAAA8qF,GAAA,EAAArqC,EAAAzgD,GAAA+wC,EAAA,EAAA0P,EAAAzgD,EAAA,GAAAixC,EAAA,EAAAwP,EAAAzgD,EAAA,EACAX,MAAAwrF,0BAAAzzD,EAAAwkC,EAAA7P,EAAA++B,EAAA/5C,EAAAE,KAeA4hC,EAAA3wE,UAAA2oF,0BAAA,SAAAzzD,EAAAwkC,EAAA7P,EAAA++B,EAAA/5C,EAAAE,GAEA,GAAA85C,GAAA1rF,KAAAowD,SAAAxS,YAAAp2C,OACAmkF,EAAA3rF,KAAAowD,SAAAxS,YAAAh6C,MACAgoF,EAAA5rF,KAAAowD,SAAAxS,YAAA/5C,OAEAktD,EAAAwL,EAAAkvB,GAAA/wC,EAAA6hB,EAAA7qB,GAAAkJ,EAAA2hB,EAAA3qB,GACAof,EAAAuL,EAAAkvB,EAAA,GAAA9wC,EAAA4hB,EAAA7qB,EAAA,GAAAmJ,EAAA0hB,EAAA3qB,EAAA,GAEAi6C,EAAAn/B,EAAA++B,GAAAE,EAAAG,EAAAp/B,EAAAhb,GAAAi6C,EAAAI,EAAAr/B,EAAA9a,GAAA+5C,EACAK,EAAAt/B,EAAA++B,EAAA,GAAAG,EAAAK,EAAAv/B,EAAAhb,EAAA,GAAAk6C,EAAAM,EAAAx/B,EAAA9a,EAAA,GAAAg6C,CAEA,IAAA5rF,KAAAmrF,cAAA,EACA,CACA,GAAAgB,GAAAnsF,KAAAmrF,cAAAnrF,KAAAkrC,eAAAzqC,EACA2rF,EAAApsF,KAAAmrF,cAAAnrF,KAAAkrC,eAAAG,EACAghD,GAAAt7B,EAAArW,EAAAE,GAAA,EACA0xC,GAAAt7B,EAAArW,EAAAE,GAAA,EAEA0xC,EAAAx7B,EAAAs7B,EACAG,EAAAx7B,EAAAs7B,EAEA3nC,EAAAnvC,KAAA6lC,KAAAkxC,EAAAA,EAAAC,EAAAA,EACAz7B,GAAAs7B,EAAAE,EAAA5nC,GAAAA,EAAAwnC,GACAn7B,EAAAs7B,EAAAE,EAAA7nC,GAAAA,EAAAynC,GAIAG,EAAA7xC,EAAA2xC,EACAG,EAAA7xC,EAAA2xC,EAEA3nC,EAAAnvC,KAAA6lC,KAAAkxC,EAAAA,EAAAC,EAAAA,GACA9xC,EAAA2xC,EAAAE,EAAA5nC,GAAAA,EAAAwnC,GACAxxC,EAAA2xC,EAAAE,EAAA7nC,GAAAA,EAAAynC,GAEAG,EAAA3xC,EAAAyxC,EACAG,EAAA3xC,EAAAyxC,EAEA3nC,EAAAnvC,KAAA6lC,KAAAkxC,EAAAA,EAAAC,EAAAA,GACA5xC,EAAAyxC,EAAAE,EAAA5nC,GAAAA,EAAAwnC,GACAtxC,EAAAyxC,EAAAE,EAAA7nC,GAAAA,EAAAynC,GAGAr0D,EAAAk9B,OACAl9B,EAAA47B,YAGA57B,EAAAuhB,OAAAyX,EAAAC,GACAj5B,EAAAwhB,OAAAmB,EAAAC,GACA5iB,EAAAwhB,OAAAqB,EAAAC,GAEA9iB,EAAA67B,YAEA77B,EAAAo9B,MAGA,IAAArsC,GAAA+iE,EAAAI,EAAAD,EAAAD,EAAAD,EAAAI,EAAAD,EAAAF,EAAAC,EAAAF,EAAAD,EAAAK,EACAO,EAAA17B,EAAAk7B,EAAAD,EAAApxC,EAAAF,EAAAwxC,EAAAD,EAAArxC,EAAAoxC,EAAAtxC,EAAAqW,EAAAm7B,EACAQ,EAAAb,EAAAnxC,EAAAqW,EAAAg7B,EAAAD,EAAAlxC,EAAAF,EAAAqxC,EAAAh7B,EAAA+6B,EAAAD,EAAAjxC,EACA+xC,EAAAd,EAAAI,EAAArxC,EAAAoxC,EAAAtxC,EAAAqxC,EAAAh7B,EAAA+6B,EAAAI,EAAAn7B,EAAAk7B,EAAAF,EAAAC,EAAAF,EAAAlxC,EAAAixC,EAAAnxC,EAAAwxC,EACAU,EAAA57B,EAAAi7B,EAAAD,EAAAnxC,EAAAF,EAAAuxC,EAAAD,EAAApxC,EAAAmxC,EAAArxC,EAAAqW,EAAAk7B,EACAW,EAAAhB,EAAAlxC,EAAAqW,EAAA+6B,EAAAD,EAAAjxC,EAAAF,EAAAoxC,EAAA/6B,EAAA86B,EAAAD,EAAAhxC,EACAiyC,EAAAjB,EAAAI,EAAApxC,EAAAmxC,EAAArxC,EAAAoxC,EAAA/6B,EAAA86B,EAAAI,EAAAl7B,EAAAi7B,EAAAF,EAAAC,EAAAF,EAAAjxC,EAAAgxC,EAAAlxC,EAAAuxC,CAEAn0D,GAAAtb,UAAAgwE,EAAA3jE,EAAA8jE,EAAA9jE,EACA4jE,EAAA5jE,EAAA+jE,EAAA/jE,EACA6jE,EAAA7jE,EAAAgkE,EAAAhkE,GAEAiP,EAAAw1B,UAAAm+B,EAAA,EAAA,GACA3zD,EAAAq9B,WAWAoe,EAAA3wE,UAAAkqF,eAAA,SAAAvZ,GAEA,GAAAz7C,GAAA/3B,KAAA+3B,QACAwkC,EAAAiX,EAAAjX,SAEAv7D,EAAAu7D,EAAAv7D,OAAA,CAGA+2B,GAAA47B,WACA,KAAA,GAAAhzD,GAAA,EAAAK,EAAA,EAAAL,EAAAA,IACA,CAEA,GAAAyT,GAAA,EAAAzT,EAEAowD,EAAAwL,EAAAnoD,GAAAsmC,EAAA6hB,EAAAnoD,EAAA,GAAAwmC,EAAA2hB,EAAAnoD,EAAA,GACA48C,EAAAuL,EAAAnoD,EAAA,GAAAumC,EAAA4hB,EAAAnoD,EAAA,GAAAymC,EAAA0hB,EAAAnoD,EAAA,EAEA2jB,GAAAuhB,OAAAyX,EAAAC,GACAj5B,EAAAwhB,OAAAmB,EAAAC,GACA5iB,EAAAwhB,OAAAqB,EAAAC,GAGA9iB,EAAAg7B,UAAA,UACAh7B,EAAAglB,OACAhlB,EAAA67B,aASA4f,EAAA3wE,UAAAshE,iBAAA,WAEAnkE,KAAAgtF,aAAA,GASAxZ,EAAA3wE,UAAAyoC,UAAA,SAAA6K,GAEA,IAAAn2C,KAAA+yC,eAAA,CAiBA,IAAA,GAhBA7H,GAAAiL,GAAAn2C,KAAAkrC,eAEAzqC,EAAAyqC,EAAAzqC,EACAuE,EAAAkmC,EAAAlmC,EACAqvB,EAAA6W,EAAA7W,EACAgX,EAAAH,EAAAG,EACAF,EAAAD,EAAAC,GACAC,EAAAF,EAAAE,GAEArY,IAAA+C,EAAAA,GACA9C,IAAA8C,EAAAA,GAEAjD,EAAAiD,EAAAA,EACAhD,EAAAgD,EAAAA,EAEAymC,EAAAv8D,KAAAu8D,SACA57D,EAAA,EAAAP,EAAAm8D,EAAAv7D,OAAAZ,EAAAO,EAAAA,GAAA,EAAA,CACA,GAAAssF,GAAA1wB,EAAA57D,GAAAusF,EAAA3wB,EAAA57D,EAAA,GACAgU,EAAAlU,EAAAwsF,EAAA54D,EAAA64D,EAAA/hD,EACArzB,EAAAuzB,EAAA6hD,EAAAloF,EAAAioF,EAAA7hD,CAEAvY,GAAAA,EAAAle,EAAAA,EAAAke,EACAC,EAAAA,EAAAhb,EAAAA,EAAAgb,EAEAC,EAAApe,EAAAoe,EAAApe,EAAAoe,EACAC,EAAAlb,EAAAkb,EAAAlb,EAAAkb,EAGA,GAAAH,MAAAiD,EAAAA,IAAA9C,IAAA8C,EAAAA,EACA,MAAA2T,GAAAuJ,UAAAC,KAGA,IAAAT,GAAAxyC,KAAAszC,OAEAd,GAAA79B,EAAAke,EACA2f,EAAA5uC,MAAAmvB,EAAAF,EAEA2f,EAAA16B,EAAAgb,EACA0f,EAAA3uC,OAAAmvB,EAAAF,EAGA9yB,KAAA+yC,eAAAP,EAGA,MAAAxyC,MAAA+yC,gBASAygC,EAAA3wE,UAAA+7C,cAAA,SAAAtI,GACA,IAAAt2C,KAAAsrC,YAAAuT,SAAAvI,EAAA3hC,EAAA2hC,EAAAx+B,GACA,OAAA,CAEA9X,MAAAkrC,eAAAqL,aAAAD,EAAAqC,EAEA,IAEAh4C,GAAAyU,EAFAmnD,EAAAv8D,KAAAu8D,SACArjB,EAAAmyC,EAAAnyC,MAGA,IAAAl5C,KAAAkrF,WAAA1X,EAAA5kC,WAAAK,UAAA,CACA,GAAAmS,GAAAphD,KAAAohD,OAGA,KAFAhsC,EAAApV,KAAAohD,QAAApgD,OAEAL,EAAA,EAAAyU,EAAAzU,EAAAA,GAAA,EAAA,CACA,GAAAwsF,GAAA,EAAA/rC,EAAAzgD,GAAAysF,EAAA,EAAAhsC,EAAAzgD,EAAA,GAAA0sF,EAAA,EAAAjsC,EAAAzgD,EAAA,EAOA,IANAu4C,EAAA,GAAAqjB,EAAA4wB,GACAj0C,EAAA,GAAAqjB,EAAA4wB,EAAA,GACAj0C,EAAA,GAAAqjB,EAAA6wB,GACAl0C,EAAA,GAAAqjB,EAAA6wB,EAAA,GACAl0C,EAAA,GAAAqjB,EAAA8wB,GACAn0C,EAAA,GAAAqjB,EAAA8wB,EAAA,GACAhC,EAAAxsC,SAAAlG,EAAAhkC,EAAAgkC,EAAA7gC,GACA,OAAA,OAKA,KADA1C,EAAAmnD,EAAAv7D,OACAL,EAAA,EAAAyU,EAAAzU,EAAAA,GAAA,EAOA,GANAu4C,EAAA,GAAAqjB,EAAA57D,GACAu4C,EAAA,GAAAqjB,EAAA57D,EAAA,GACAu4C,EAAA,GAAAqjB,EAAA57D,EAAA,GACAu4C,EAAA,GAAAqjB,EAAA57D,EAAA,GACAu4C,EAAA,GAAAqjB,EAAA57D,EAAA,GACAu4C,EAAA,GAAAqjB,EAAA57D,EAAA,GACA0qF,EAAAxsC,SAAAlG,EAAAhkC,EAAAgkC,EAAA7gC,GACA,OAAA,CAIA,QAAA,GAYA07D,EAAA5kC,YACAw8C,cAAA,EACAn8C,UAAA,KAGAzC,UAAA,KAAA8gD,KAAA,SAAA5sF,EAAAjB,EAAAD,GAqBA,QAAA+tF,GAAAtpF,EAAAupF,EAAAC,GAEAja,EAAAzyE,KAAAf,KAAAiE,GASAjE,KAAA0tF,QAAA,EAEA1tF,KAAAwtF,UAAAA,GAAA,GACAxtF,KAAAytF,UAAAA,GAAA,GAEAztF,KAAAkrF,SAAA1X,EAAA5kC,WAAAK,UACAjvC,KAAAiyD,UArCA,GAAAuhB,GAAA9yE,EAAA,SA2CA6sF,GAAA1qF,UAAA0M,OAAA/L,OAAAgwE,EAAA3wE,WACA0qF,EAAA1qF,UAAAmH,YAAAujF,EACA9tF,EAAAD,QAAA+tF,EAMAA,EAAA1qF,UAAAovD,QAAA,WAEA,GAAAjxB,GAAAhhC,KAAAwtF,UAAAxtF,KAAAytF,UACAzqC,KACAqf,KACA3V,KACAtL,KACAn9C,EAAAjE,KAAAiE,QAKA0pF,EAAA3tF,KAAAwtF,UAAA,EACAI,EAAA5tF,KAAAytF,UAAA,EACA9sF,EAAA,EAEAktF,EAAA5pF,EAAAL,MAAA+pF,EACAG,EAAA7pF,EAAAJ,OAAA+pF,CAEA,KAAAjtF,EAAA,EAAAqgC,EAAArgC,EAAAA,IAAA,CAEA,GAAAgU,GAAAhU,EAAAX,KAAAwtF,UACA11E,EAAAnX,EAAAX,KAAAwtF,UAAA,CAGAxqC,GAAAr4C,KAAAgK,EAAAk5E,EACA/1E,EAAAg2E,GAGAphC,EAAA/hD,KAAA1G,EAAA6sD,KAAAC,IAAA9sD,EAAA6sD,KAAApW,GAAAz2C,EAAA6sD,KAAAC,KAAAp8C,GAAA3U,KAAAwtF,UAAA,IAAAvpF,EAAA6sD,KAAAE,IAAA/sD,EAAA6sD,KAAArS,GAAAx6C,EAAA6sD,KAAAE,KAAAl5C,GAAA9X,KAAAytF,UAAA,KAKA,GAAAM,GAAAJ,EAAAC,CAEA,KAAAjtF,EAAA,EAAAotF,EAAAptF,EAAAA,IAAA,CAEA,GAAAqtF,GAAArtF,EAAAgtF,EACAM,EAAAttF,EAAAgtF,EAAA,EAGAx+E,EAAA8+E,EAAAjuF,KAAAwtF,UAAAQ,EACAE,EAAAD,EAAAjuF,KAAAwtF,UAAAQ,EAAA,EACAG,GAAAF,EAAA,GAAAjuF,KAAAwtF,UAAAQ,EACAI,GAAAH,EAAA,GAAAjuF,KAAAwtF,UAAAQ,EAAA,CAEA5sC,GAAAz2C,KAAAwE,EAAA++E,EAAAC,GACA/sC,EAAAz2C,KAAAujF,EAAAE,EAAAD,GAKAnuF,KAAAu8D,SAAA,GAAA10D,cAAAm7C,GACAhjD,KAAA0sD,IAAA,GAAA7kD,cAAA6kD,GACA1sD,KAAAqiE,OAAA,GAAAx6D,cAAAw6D,GACAriE,KAAAohD,QAAA,GAAAqB,aAAArB,IAQAmsC,EAAA1qF,UAAAshE,iBAAA,WAEAqP,EAAA3wE,UAAAshE,iBAAApjE,KAAAf,MAGAA,KAAA0tF,QACA1tF,KAAAiyD,aAIAo8B,SAAA,MAAAC,KAAA,SAAA5tF,EAAAjB,EAAAD,GAqBA,QAAAi0E,GAAAxvE,EAAAi1C,GAEAs6B,EAAAzyE,KAAAf,KAAAiE,GAKAjE,KAAAk5C,OAAAA,EAKAl5C,KAAAu8D,SAAA,GAAA10D,cAAA,EAAAqxC,EAAAl4C,QAKAhB,KAAA0sD,IAAA,GAAA7kD,cAAA,EAAAqxC,EAAAl4C,QAKAhB,KAAAqiE,OAAA,GAAAx6D,cAAA,EAAAqxC,EAAAl4C,QAKAhB,KAAAohD,QAAA,GAAAqB,aAAA,EAAAvJ,EAAAl4C,QASAhB,KAAA0tF,QAAA,EAEA1tF,KAAAiyD,UA1DA,GAAAuhB,GAAA9yE,EAAA,UACA+oC,EAAA/oC,EAAA,UA8DA+yE,GAAA5wE,UAAA0M,OAAA/L,OAAAgwE,EAAA3wE,WACA4wE,EAAA5wE,UAAAmH,YAAAypE,EACAh0E,EAAAD,QAAAi0E,EAMAA,EAAA5wE,UAAAovD,QAAA,WAEA,GAAA/Y,GAAAl5C,KAAAk5C,MAGA,MAAAA,EAAAl4C,OAAA,IAAAhB,KAAAowD,SAAAU,KAAA,CAKA,GAAApE,GAAA1sD,KAAA0sD,IAEAtL,EAAAphD,KAAAohD,QACAihB,EAAAriE,KAAAqiE,OAEAxR,EAAA7wD,KAAAowD,SAAAU,KACAhuD,EAAA,GAAA2mC,GAAA0N,MAAA0Z,EAAAE,GAAAF,EAAAG,IACAu9B,EAAA,GAAA9kD,GAAA0N,MAAA0Z,EAAAjW,GAAAiW,EAAAE,GAAAF,EAAAhW,GAAAgW,EAAAG,GAEAtE,GAAA,GAAA,EAAA5pD,EAAA6R,EACA+3C,EAAA,GAAA,EAAA5pD,EAAAgV,EACA40C,EAAA,GAAA,EAAA5pD,EAAA6R,EACA+3C,EAAA,GAAA,EAAA6hC,EAAAz2E,EAAAhV,EAAAgV,EAEAuqD,EAAA,GAAA,EACAA,EAAA,GAAA,EAEAjhB,EAAA,GAAA,EACAA,EAAA,GAAA,CAKA,KAAA,GAFA9K,GAAAliC,EAAAu6C,EADA3tB,EAAAkY,EAAAl4C,OAGAL,EAAA,EAAAqgC,EAAArgC,EAAAA,IAEA21C,EAAA4C,EAAAv4C,GACAyT,EAAA,EAAAzT,EAEAguD,EAAAhuD,GAAAqgC,EAAA,GAEA0rB,EAAAt4C,GAAAu6C,EAAA4/B,EAAA55E,EAAA7R,EAAA6R,EACA+3C,EAAAt4C,EAAA,GAAA,EAAAtR,EAAAgV,EAEA40C,EAAAt4C,EAAA,GAAAu6C,EAAA4/B,EAAA55E,EAAA7R,EAAA6R,EACA+3C,EAAAt4C,EAAA,GAAA,EAAAm6E,EAAAz2E,EAAAhV,EAAAgV,EAEA1D,EAAA,EAAAzT,EACA0hE,EAAAjuD,GAAA,EACAiuD,EAAAjuD,EAAA,GAAA,EAEAA,EAAA,EAAAzT,EACAygD,EAAAhtC,GAAAA,EACAgtC,EAAAhtC,EAAA,GAAAA,EAAA,CAGApU,MAAA+J,OAAA,IAQA0pE,EAAA5wE,UAAAshE,iBAAA,WAEAqP,EAAA3wE,UAAAshE,iBAAApjE,KAAAf,MAGAA,KAAA0tF,QACA1tF,KAAAiyD,WASAwhB,EAAA5wE,UAAA8vC,gBAAA,WAEA,GAAAuG,GAAAl5C,KAAAk5C,MAEA,MAAAA,EAAAl4C,OAAA,GAAA,CAgBA,IAAA,GAVAwtF,GAQAl4C,EAAAliC,EAAA6oD,EAAAwxB,EAAAC,EATAlrC,EAAAtK,EAAA,GAEAy1C,EAAA,EACAC,EAAA,EAIAryB,EAAAv8D,KAAAu8D,SACAv7B,EAAAkY,EAAAl4C,OAGAL,EAAA,EAAAqgC,EAAArgC,EAAAA,IAEA21C,EAAA4C,EAAAv4C,GACAyT,EAAA,EAAAzT,EAIA6tF,EAFA7tF,EAAAu4C,EAAAl4C,OAAA,EAEAk4C,EAAAv4C,EAAA,GAIA21C,EAGAs4C,IAAAJ,EAAA75E,EAAA6uC,EAAA7uC,GACAg6E,EAAAH,EAAA12E,EAAA0rC,EAAA1rC,EAEAmlD,EAAA,IAAA,EAAAt8D,GAAAqgC,EAAA,IAEAi8B,EAAA,IAEAA,EAAA,GAGAwxB,EAAAj5E,KAAA6lC,KAAAszC,EAAAA,EAAAC,EAAAA,GACAF,EAAA1uF,KAAAowD,SAAAvsD,OAAA,EACA8qF,GAAAF,EACAG,GAAAH,EAEAE,GAAAD,EACAE,GAAAF,EAEAnyB,EAAAnoD,GAAAkiC,EAAA3hC,EAAAg6E,EACApyB,EAAAnoD,EAAA,GAAAkiC,EAAAx+B,EAAA82E,EACAryB,EAAAnoD,EAAA,GAAAkiC,EAAA3hC,EAAAg6E,EACApyB,EAAAnoD,EAAA,GAAAkiC,EAAAx+B,EAAA82E,EAEAprC,EAAAlN,CAGAt2C,MAAA8yC,+BAGAtG,UAAA,GAAA6hD,SAAA,MAAAQ,KAAA,SAAAnuF,EAAAjB,EAAAD,GAWAC,EAAAD,SACAg0E,KAAA9yE,EAAA,UACA6sF,MAAA7sF,EAAA,WACA+yE,KAAA/yE,EAAA,UACAouF,aAAApuF,EAAA,wBACAquF,WAAAruF,EAAA,yBAGA2tF,SAAA,IAAAW,UAAA,IAAAC,SAAA,IAAAC,uBAAA,IAAAC,qBAAA,MAAAC,KAAA,SAAA1uF,EAAAjB,EAAAD,GAuBA,QAAAsvF,GAAAjmD,GAEAY,EAAAiW,eAAA3+C,KAAAf,KAAA6oC,GASA7oC,KAAAohD,QAAA,GAAAqB,aAAA,KAGA,KAAA,GAAA9hD,GAAA,EAAA+oB,EAAA,EAAA,KAAA/oB,EAAAA,GAAA,EAAA+oB,GAAA,EAEA1pB,KAAAohD,QAAAzgD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAohD,QAAAzgD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAohD,QAAAzgD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAohD,QAAAzgD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAohD,QAAAzgD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAohD,QAAAzgD,EAAA,GAAA+oB,EAAA,CAGA1pB,MAAAq+D,cAAA,KA9CA,GAAA50B,GAAA/oC,EAAA,cACA8yE,EAAA9yE,EAAA,UAgDAouF,GAAAjsF,UAAA0M,OAAA/L,OAAAimC,EAAAiW,eAAA78C,WACAisF,EAAAjsF,UAAAmH,YAAA8kF,EACArvF,EAAAD,QAAAsvF,EAEArlD,EAAA4C,cAAAC,eAAA,OAAAwiD,GAQAA,EAAAjsF,UAAA09C,gBAAA,aAUAuuC,EAAAjsF,UAAA6vC,OAAA,SAAAsgC,GAEAA,EAAAqc,eAEArvF,KAAAsvF,WAAAtc,EAGA,IAAAnqC,GAAA7oC,KAAA6oC,SACAzmC,EAAAymC,EAAAzmC,GACA6B,EAAA+uE,EAAA5iB,SAAAxS,YACAvwC,EAAA2lE,EAAA3lE,OAEA69E,EAAAlY,EAAAkY,WAAA1X,EAAA5kC,WAAAw8C,cAAAhpF,EAAA8sC,eAAA9sC,EAAA6sC,SAEApG,GAAA8X,iBAAAC,aAAAoyB,EAAAj7B,WASA1qC,EANAA,EAMAA,EAAAitD,QAAAl4D,EAAAkJ,KAAA+B,EAAAqtD,UAAA7xB,GAJAA,EAAAqmB,cAAAljB,QAAAujD,WAOAvvF,KAAA6oC,SAAAqmB,cAAAS,UAAAtiD,GAEAA,EAAA1G,SAAAo6C,kBAAA5xC,MAAA6jE,EAAA9nC,eAAA8V,SAAA,GACA3zC,EAAA1G,SAAAopD,iBAAA5gD,MAAA05B,EAAAinB,oBAAAC,iBAAA/O,SAAA,GACA3zC,EAAA1G,SAAA+tC,MAAAvlC,MAAA6jE,EAAAr/B,WAEAtmC,EAAAyvD,eAEAkW,EAAAjpE,OA8BAipE,EAAAjpE,OAAA,EACA3H,EAAAgB,WAAAhB,EAAAM,aAAAswE,EAAAqc,eACAjtF,EAAAe,WAAAf,EAAAM,aAAAswE,EAAAzW,SAAAn6D,EAAAO,aACAP,EAAAsM,oBAAArB,EAAA5G,WAAAy6C,gBAAA,EAAA9+C,EAAA4F,OAAA,EAAA,EAAA,GAGA5F,EAAAgB,WAAAhB,EAAAM,aAAAswE,EAAAwc,WACAptF,EAAAe,WAAAf,EAAAM,aAAAswE,EAAAtmB,IAAAtqD,EAAAO,aACAP,EAAAsM,oBAAArB,EAAA5G,WAAA+oD,cAAA,EAAAptD,EAAA4F,OAAA,EAAA,EAAA,GAEA5F,EAAA+F,cAAA/F,EAAAgG,UAEAnE,EAAAosD,YAAAjuD,EAAAkJ,IAOAlJ,EAAAiG,YAAAjG,EAAAkC,WAAAL,EAAAosD,YAAAjuD,EAAAkJ,KALAtL,KAAA6oC,SAAAynB,cAAArsD,GASA7B,EAAAgB,WAAAhB,EAAAmB,qBAAAyvE,EAAAyc,cACArtF,EAAAe,WAAAf,EAAAmB,qBAAAyvE,EAAA5xB,QAAAh/C,EAAAO,eAnDAP,EAAAgB,WAAAhB,EAAAM,aAAAswE,EAAAqc,eACAjtF,EAAAc,cAAAd,EAAAM,aAAA,EAAAswE,EAAAzW,UACAn6D,EAAAsM,oBAAArB,EAAA5G,WAAAy6C,gBAAA,EAAA9+C,EAAA4F,OAAA,EAAA,EAAA,GAGA5F,EAAAgB,WAAAhB,EAAAM,aAAAswE,EAAAwc,WACAptF,EAAAsM,oBAAArB,EAAA5G,WAAA+oD,cAAA,EAAAptD,EAAA4F,OAAA,EAAA,EAAA,GAGA5F,EAAA+F,cAAA/F,EAAAgG,UAEAnE,EAAAosD,YAAAjuD,EAAAkJ,IAOAlJ,EAAAiG,YAAAjG,EAAAkC,WAAAL,EAAAosD,YAAAjuD,EAAAkJ,KALAtL,KAAA6oC,SAAAynB,cAAArsD,GAQA7B,EAAAgB,WAAAhB,EAAAmB,qBAAAyvE,EAAAyc,cACArtF,EAAAc,cAAAd,EAAAmB,qBAAA,EAAAyvE,EAAA5xB,UAiCAh/C,EAAA4I,aAAAkgF,EAAAlY,EAAA5xB,QAAApgD,OAAAoB,EAAA6I,eAAA,IAQA6jF,EAAAjsF,UAAAysF,WAAA,SAAAtc,GAGA,GAAA5wE,GAAApC,KAAA6oC,SAAAzmC,EAEA4wE,GAAAqc,cAAAjtF,EAAAK,eACAuwE,EAAAyc,aAAArtF,EAAAK,eACAuwE,EAAAwc,UAAAptF,EAAAK,eAIAL,EAAAgB,WAAAhB,EAAAM,aAAAswE,EAAAqc,eACAjtF,EAAAe,WAAAf,EAAAM,aAAAswE,EAAAzW,SAAAn6D,EAAAosD,cAEApsD,EAAAgB,WAAAhB,EAAAM,aAAAswE,EAAAwc,WACAptF,EAAAe,WAAAf,EAAAM,aAAAswE,EAAAtmB,IAAAtqD,EAAAO,aAEAqwE,EAAA3Q,SACA2Q,EAAA0c,aAAAttF,EAAAK,eACAL,EAAAgB,WAAAhB,EAAAM,aAAAswE,EAAA0c,cACAttF,EAAAe,WAAAf,EAAAM,aAAAswE,EAAA3Q,OAAAjgE,EAAAO,cAGAP,EAAAgB,WAAAhB,EAAAmB,qBAAAyvE,EAAAyc,cACArtF,EAAAe,WAAAf,EAAAmB,qBAAAyvE,EAAA5xB,QAAAh/C,EAAAO,cAQAmsF,EAAAjsF,UAAAmxC,MAAA,aASA86C,EAAAjsF,UAAA2H,MAAA,WAIAxK,KAAAq+D,cAAA,MAOAywB,EAAAjsF,UAAA0C,QAAA,WAEAkkC,EAAAiW,eAAA78C,UAAA0C,QAAAxE,KAAAf,SAGA85E,aAAA,GAAA6V,UAAA,MAAAC,KAAA,SAAAlvF,EAAAjB,EAAAD,GASA,QAAAuvF,GAAA7/B,GAEAzlB,EAAApjC,OAAAtF,KAAAf,KACAkvD,GAGA,wBACA,kCACA,gCAEA,kCACA,iCAEA,8BAEA,mBACA,2GACA,oCACA,KACAt+C,KAAA,OAEA,wBAEA,8BACA,uBAEA,8BAEA,mBACA,iEACA,KACAA,KAAA,OAGA8jC,OAAAryC,KAAA,KAAA8M,MAAA,GACA4xC,mBAAA1+C,KAAA,OAAA8M,MAAA,GAAAtH,cAAA,IACAkoD,kBAAA1tD,KAAA,OAAA8M,MAAA,GAAAtH,cAAA,MAIAq5C,gBAAA,EACAsO,cAAA,IAjDA,GAAA/lB,GAAA/oC,EAAA,aAsDAquF,GAAAlsF,UAAA0M,OAAA/L,OAAAimC,EAAApjC,OAAAxD,WACAksF,EAAAlsF,UAAAmH,YAAA+kF,EACAtvF,EAAAD,QAAAuvF,EAEAtlD,EAAAid,cAAApa,eAAA,aAAAyiD,KAEAjV,aAAA,KAAA+V,KAAA,SAAAnvF,EAAAjB,EAAAD,GAIAgW,KAAA0uD,OAEA1uD,KAAA0uD,KAAA,SAAAvvD,GAEA,MADAA,IAAAA,EACA,IAAAA,GAAAm7E,MAAAn7E,GAEAA,EAEAA,EAAA,EAAA,EAAA,UAIAo7E,KAAA,SAAArvF,EAAAjB,EAAAD,GAKA+P,OAAA4pB,SAEA5pB,OAAA4pB,OAAAz4B,EAAA,oBAGAmmC,gBAAA,KAAAmpD,KAAA,SAAAtvF,EAAAjB,EAAAD,GACAkB,EAAA,mBACAA,EAAA,2BACAA,EAAA,iBAEAuvF,cAAA,IAAAC,kBAAA,IAAAC,0BAAA,MAAAC,KAAA,SAAA1vF,EAAAjB,EAAAD,IACA,SAAAM,GAoBA,GAPAuwF,KAAAzf,KAAAyf,KAAAxtF,UAAAytF,UACAD,KAAAzf,IAAA,WACA,OAAA,GAAAyf,OAAAC,aAKAxwF,EAAA6wE,cAAA7wE,EAAA6wE,YAAAC,IAAA,CACA,GAAA2f,GAAAF,KAAAzf,KACA9wE,GAAA6wE,cACA7wE,EAAA6wE,gBAEA7wE,EAAA6wE,YAAAC,IAAA,WACA,MAAAyf,MAAAzf,MAAA2f,GAQA,IAAA,GAHAngB,GAAAigB,KAAAzf,MACA4f,GAAA,KAAA,MAAA,SAAA,KAEA77E,EAAA,EAAAA,EAAA67E,EAAAxvF,SAAAlB,EAAAovE,wBAAAv6D,EACA7U,EAAAovE,sBAAApvE,EAAA0wF,EAAA77E,GAAA,yBACA7U,EAAAgxE,qBAAAhxE,EAAA0wF,EAAA77E,GAAA,yBACA7U,EAAA0wF,EAAA77E,GAAA,8BAGA7U,GAAAovE,wBACApvE,EAAAovE,sBAAA,SAAAt5D,GACA,GAAA,kBAAAA,GACA,KAAA,IAAA6O,WAAA7O,EAAA,oBAGA,IAAAs7D,GAAAmf,KAAAzf,MACA6f,EAAA,GAAArgB,EAAAc,CAQA,OANA,GAAAuf,IACAA,EAAA,GAGArgB,EAAAc,EAEAl2D,WAAA,WACAo1D,EAAAigB,KAAAzf,MACAh7D,EAAA+6D,YAAAC,QACA6f,KAIA3wF,EAAAgxE,uBACAhxE,EAAAgxE,qBAAA,SAAAxlE,GACAib,aAAAjb,OAIAvK,KAAAf,KAAA,mBAAAF,QAAAA,OAAA,mBAAAC,MAAAA,KAAA,mBAAAF,QAAAA,qBAEA,MAAA","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","gl-matrix","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","worldAlpha","alpha","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Transform","pivot","_rotation","localTransform","filterArea","_sr","_cr","dirtyTransform","_tempDisplayObjectParent","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","displayObjectUpdateTransform","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const","./TransformStatic",41,"ObservablePoint","_x","_y",42,"parentTransform","pt","lt","./ObservablePoint",43,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","Point","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",44,"_lineTint","_fillTint",45,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",46,"glPoints","glIndices","Uint16Array","deleteBuffer",47,48,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",49,50,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",51,"vertPos",52,"rectData",53,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",54,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","BaseRenderTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseRenderTexture","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",55,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",56,57,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",58,"dx","dy","r2","./Rectangle",59,"normx","normy",60,"points_","il","xi","yi","xj","yj","intersect","../Point",61,62,63,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",64,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",65,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",66,"TextureShader","../../renderers/webgl/shaders/TextureShader",67,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",68,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",69,70,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",71,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",72,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",73,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",74,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",75,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",76,"./AbstractFilter",77,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",78,"currentBlendMode","blendFunc","./WebGLManager",79,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",80,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",81,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",82,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",83,84,"./Shader",85,86,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",87,"customUniforms","customAttributes","uSampler",88,89,"../managers/WebGLManager",90,"colors","rect2",91,"StencilMaskStack","frameBuffer","defaultFrame","destinationFrame","sourceFrame","stencilBuffer","calculateProjection","SCISSOR_TEST","scissor","viewport","pm","projectionFrame","./StencilMaskStack",92,93,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",94,95,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",96,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",97,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",98,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",99,"textureBuffer","tempRect","currentBounds","cachedWt","realResolution","getImage","image","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",100,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","getResolutionOfUrl",101,"baseRenderTexture","_updateUvs","updateBase","./BaseRenderTexture",102,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",103,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",104,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",105,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",106,"shared","./Ticker",107,"totalIndices",108,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",109,"__plugins","pluginName","ctor",110,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",111,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",112,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",113,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",114,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",115,"getChildByName",116,"getGlobalPosition",117,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",118,"AsciiFilter","pixelSize","../../core",119,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",120,"BlurDirFilter","dirX","dirY","strength","passes",121,"BlurFilter","./BlurXFilter","./BlurYFilter",122,"flip","flop",123,124,"SmartBlurFilter",125,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",126,"ColorStepFilter",127,"ConvolutionFilter","texelSize",128,"CrossHatchFilter",129,"DisplacementFilter","mapSampler",130,"DotScreenFilter",131,"BlurYTintFilter",132,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",133,"GrayFilter","gray",134,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",135,136,"noise",137,138,"red","green","blue",139,140,"center","params",141,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",142,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",143,"./TiltShiftAxisFilter",144,145,146,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",147,"InteractionData","originalEvent","getLocalPosition","globalPos",148,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",149,"interactiveTarget","./InteractionManager",150,151,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",152,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",153,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",154,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",155,156,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",157,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",158,"factor","nextPoint","perpLength","num","perpX","perpY",159,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",160,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",161,162,"isNaN",163,164,"./Math.sign","./Object.assign","./requestAnimationFrame",165,"Date","getTime","startTime","vendors","delay"],"mappings":"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AA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 64e912a..9199f9d 100644 --- a/src/core/display/Container.js +++ b/src/core/display/Container.js @@ -399,7 +399,7 @@ this.children[i].updateTransform(); } - this.dirtyTransform = false; + this.transform.dirty = false; }; // performance increase to avoid using call.. (10x faster) diff --git a/src/core/display/DisplayObject.js b/src/core/display/DisplayObject.js index 06bd523..3cc5c2f 100644 --- a/src/core/display/DisplayObject.js +++ b/src/core/display/DisplayObject.js @@ -2,7 +2,7 @@ RenderTexture = require('../textures/RenderTexture'), EventEmitter = require('eventemitter3'), CONST = require('../const'), - Transform = require('./Transform'), + Transform = require('./TransformStatic'), _tempMatrix = new math.Matrix(), _tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1, children:[]}; @@ -114,22 +114,6 @@ */ this.filterArea = null; - /**xww - * cached sin rotation - * - * @member {number} - * @private - */ - this._sr = 0; - - /** - * cached cos rotation - * - * @member {number} - * @private - */ - this._cr = 1; - /** * The original, cached bounds of the object * @@ -154,7 +138,7 @@ */ this._mask = null; - this.dirtyTransform = true; + // this.dirtyTransform = true; } // constructor @@ -238,9 +222,9 @@ set: function (value) { this._rotation = value; - this.dirtyTransform = true; - this._sr = Math.sin(value); - this._cr = Math.cos(value); + this.transform.dirty = true; + this.transform._sr = Math.sin(value); + this.transform._cr = Math.cos(value); } }, @@ -344,6 +328,7 @@ */ DisplayObject.prototype.updateTransform = function () { + //if(this.transform.dirty || parent.transform.dirty) this.transform.updateTransform(this.parent.transform); // multiply the alphas.. this.worldAlpha = this.alpha * this.parent.worldAlpha; diff --git a/src/core/display/ObservablePoint.js b/src/core/display/ObservablePoint.js new file mode 100644 index 0000000..fd7a04b --- /dev/null +++ b/src/core/display/ObservablePoint.js @@ -0,0 +1,68 @@ +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents + * the horizontal axis and y represents the vertical axis. + * + * @class + * @memberof PIXI + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +function ObservablePoint(transform, x, y) +{ + this._x = x || 0; + this._y = y || 0; + + this.transform = transform; +} + +ObservablePoint.prototype.constructor = ObservablePoint; +module.exports = ObservablePoint; + + + +Object.defineProperties(ObservablePoint.prototype, { + /** + * The position of the displayObject on the x axis relative to the local coordinates of the parent. + * + * @member {number} + * @memberof PIXI.DisplayObject# + */ + x: { + get: function () + { + return this._x; + }, + set: function (value) + { + this._x = value; + this.transform.dirty = true; + } + }, + + y: { + get: function () + { + return this._y; + }, + set: function (value) + { + this._y = value; + this.transform.dirty = true; + } + } +}); + +/** + * Sets the point to a new x and y position. + * If y is omitted, both x and y will be set to x. + * + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +ObservablePoint.prototype.set = function (x, y) +{ + this._x = x || 0; + this._y = y || ( (y !== 0) ? this._x : 0 ); + + this.transform.dirty = true; +}; diff --git a/src/core/display/Transform.js b/src/core/display/Transform.js index eefc915..d57503d 100644 --- a/src/core/display/Transform.js +++ b/src/core/display/Transform.js @@ -36,34 +36,21 @@ var wt = this.worldTransform; var lt = this.localTransform; + // get the matrix values of the displayobject based on its transform properties.. + lt.a = this._cr * this.scale.x; + lt.b = this._sr * this.scale.x; + lt.c = -this._sr * this.scale.y; + lt.d = this._cr * this.scale.y; + lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c); + lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d); + // concat the parent matrix with the objects transform. + wt.a = lt.a * pt.a + lt.b * pt.c; + wt.b = lt.a * pt.b + lt.b * pt.d; + wt.c = lt.c * pt.a + lt.d * pt.c; + wt.d = lt.c * pt.b + lt.d * pt.d; + wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; + wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; - if(this.dirty) - { - // get the matrix values of the displayobject based on its transform properties.. - lt.a = this._cr * this.scale.x; - lt.b = this._sr * this.scale.x; - lt.c = -this._sr * this.scale.y; - lt.d = this._cr * this.scale.y; - lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c); - lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d); - } - - if(this.dirty || parent.dirty) - { - // concat the parent matrix with the objects transform. - wt.a = lt.a * pt.a + lt.b * pt.c; - wt.b = lt.a * pt.b + lt.b * pt.d; - wt.c = lt.c * pt.a + lt.d * pt.c; - wt.d = lt.c * pt.b + lt.d * pt.d; - wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; - wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; - - // this.dirty = false; - // return true; - } - -// this.dirty = false; - // return false; } module.exports = Transform; diff --git a/src/core/display/TransformSimple.js b/src/core/display/TransformSimple.js deleted file mode 100644 index e9793e2..0000000 --- a/src/core/display/TransformSimple.js +++ /dev/null @@ -1,63 +0,0 @@ -var math = require('../math'); - - -/** - * The Point object represents a location in a two-dimensional coordinate system, where x represents - * the horizontal axis and y represents the vertical axis. - * - * @class - * @memberof PIXI - * @param [x=0] {number} position of the point on the x axis - * @param [y=0] {number} position of the point on the y axis - */ -function Transform() -{ - this.worldTransform = new math.Matrix(); - this.localTransform = new math.Matrix(); - - this.position = new math.Point(0.0); - this.scale = new math.Point(1,1); - this.pivot = new math.Point(0.0); - this.skew = new math.Point(0.0); - - this.rotation = 0; - this._sr = Math.sin(0); - this._cr = Math.cos(0); - - - this.dirty = true; -} - -Transform.prototype.constructor = Transform; - -Transform.prototype.updateTransform = function (parentTransform) -{ - var pt = parentTransform.worldTransform; - var wt = this.worldTransform; - var lt = this.localTransform; - - - if(this.dirty) - { - // get the matrix values of the displayobject based on its transform properties.. - - lt.tx = this.position.x; - lt.ty = this.position.y; - } - - if(this.dirty || parent.dirty) - { - wt.tx = lt.tx; - wt.ty = lt.ty; - - // this.dirty = false; - // return true; - } - -// this.dirty = false; - // return false; -} - -module.exports = Transform; - - diff --git a/bin/pixi.js b/bin/pixi.js index df52170..915f5c1 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -1,7 +1,7 @@ /** * @license * pixi.js - v3.0.10-dev - * Compiled 2016-01-18T21:33:26.540Z + * Compiled 2016-01-18T22:34:48.843Z * * pixi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -8072,7 +8072,7 @@ core.CanvasRenderer.registerPlugin('accessibility', AccessibilityManager); -},{"../core":53,"./accessibleTarget":36}],36:[function(require,module,exports){ +},{"../core":54,"./accessibleTarget":36}],36:[function(require,module,exports){ /** * Default property values of accessible objects * used by {@link PIXI.accessibility.AccessibilityManager}. @@ -8759,7 +8759,7 @@ this.children[i].updateTransform(); } - this.dirtyTransform = false; + this.transform.dirty = false; }; // performance increase to avoid using call.. (10x faster) @@ -9005,12 +9005,12 @@ this.children = null; }; -},{"../math":56,"../textures/RenderTexture":100,"../utils":107,"./DisplayObject":40}],40:[function(require,module,exports){ +},{"../math":57,"../textures/RenderTexture":101,"../utils":108,"./DisplayObject":40}],40:[function(require,module,exports){ var math = require('../math'), RenderTexture = require('../textures/RenderTexture'), EventEmitter = require('eventemitter3'), CONST = require('../const'), - Transform = require('./Transform'), + Transform = require('./TransformStatic'), _tempMatrix = new math.Matrix(), _tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1, children:[]}; @@ -9122,22 +9122,6 @@ */ this.filterArea = null; - /**xww - * cached sin rotation - * - * @member {number} - * @private - */ - this._sr = 0; - - /** - * cached cos rotation - * - * @member {number} - * @private - */ - this._cr = 1; - /** * The original, cached bounds of the object * @@ -9162,7 +9146,7 @@ */ this._mask = null; - this.dirtyTransform = true; + // this.dirtyTransform = true; } // constructor @@ -9246,9 +9230,9 @@ set: function (value) { this._rotation = value; - this.dirtyTransform = true; - this._sr = Math.sin(value); - this._cr = Math.cos(value); + this.transform.dirty = true; + this.transform._sr = Math.sin(value); + this.transform._cr = Math.cos(value); } }, @@ -9352,6 +9336,7 @@ */ DisplayObject.prototype.updateTransform = function () { + //if(this.transform.dirty || parent.transform.dirty) this.transform.updateTransform(this.parent.transform); // multiply the alphas.. this.worldAlpha = this.alpha * this.parent.worldAlpha; @@ -9554,9 +9539,79 @@ this.filterArea = null; }; -},{"../const":38,"../math":56,"../textures/RenderTexture":100,"./Transform":41,"eventemitter3":25}],41:[function(require,module,exports){ -var math = require('../math'); +},{"../const":38,"../math":57,"../textures/RenderTexture":101,"./TransformStatic":42,"eventemitter3":25}],41:[function(require,module,exports){ +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents + * the horizontal axis and y represents the vertical axis. + * + * @class + * @memberof PIXI + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +function ObservablePoint(transform, x, y) +{ + this._x = x || 0; + this._y = y || 0; + this.transform = transform; +} + +ObservablePoint.prototype.constructor = ObservablePoint; +module.exports = ObservablePoint; + + + +Object.defineProperties(ObservablePoint.prototype, { + /** + * The position of the displayObject on the x axis relative to the local coordinates of the parent. + * + * @member {number} + * @memberof PIXI.DisplayObject# + */ + x: { + get: function () + { + return this._x; + }, + set: function (value) + { + this._x = value; + this.transform.dirty = true; + } + }, + + y: { + get: function () + { + return this._y; + }, + set: function (value) + { + this._y = value; + this.transform.dirty = true; + } + } +}); + +/** + * Sets the point to a new x and y position. + * If y is omitted, both x and y will be set to x. + * + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +ObservablePoint.prototype.set = function (x, y) +{ + this._x = x || 0; + this._y = y || ( (y !== 0) ? this._x : 0 ); + + this.transform.dirty = true; +}; + +},{}],42:[function(require,module,exports){ +var math = require('../math'); +var ObservablePoint = require('./ObservablePoint'); /** * The Point object represents a location in a two-dimensional coordinate system, where x represents @@ -9572,17 +9627,19 @@ this.worldTransform = new math.Matrix(); this.localTransform = new math.Matrix(); - this.position = new math.Point(0.0); - this.scale = new math.Point(1,1); - this.pivot = new math.Point(0.0); - this.skew = new math.Point(0.0); + this.position = new ObservablePoint(this, 0); + this.scale = new ObservablePoint(this,1, 1); + this.pivot = new ObservablePoint(this, 0, 0); + this.skew = new ObservablePoint(this, 0,0); this.rotation = 0; this._sr = Math.sin(0); this._cr = Math.cos(0); - this.dirty = true; + + + this.updated = true; } Transform.prototype.constructor = Transform; @@ -9593,19 +9650,20 @@ var wt = this.worldTransform; var lt = this.localTransform; - if(this.dirty) { // get the matrix values of the displayobject based on its transform properties.. - lt.a = this._cr * this.scale.x; - lt.b = this._sr * this.scale.x; - lt.c = -this._sr * this.scale.y; - lt.d = this._cr * this.scale.y; - lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c); - lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d); + lt.a = this._cr * this.scale._x; + lt.b = this._sr * this.scale._x; + lt.c = -this._sr * this.scale._y; + lt.d = this._cr * this.scale._y; + lt.tx = this.position._x - (this.pivot._x * lt.a + this.pivot._y * lt.c); + lt.ty = this.position._y - (this.pivot._x * lt.b + this.pivot._y * lt.d); } - if(this.dirty || parent.dirty) + this.updated = this.dirty || parentTransform.dirty; + + if(this.updated) { // concat the parent matrix with the objects transform. wt.a = lt.a * pt.a + lt.b * pt.c; @@ -9613,21 +9671,16 @@ wt.c = lt.c * pt.a + lt.d * pt.c; wt.d = lt.c * pt.b + lt.d * pt.d; wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; - wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; - - // this.dirty = false; - // return true; + wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; } - -// this.dirty = false; - // return false; + } module.exports = Transform; -},{"../math":56}],42:[function(require,module,exports){ +},{"../math":57,"./ObservablePoint":41}],43:[function(require,module,exports){ var Container = require('../display/Container'), Texture = require('../textures/Texture'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), @@ -10787,7 +10840,7 @@ this._localBounds = null; }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/canvas/utils/CanvasGraphics":69,"../textures/Texture":101,"./GraphicsData":43}],43:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/canvas/utils/CanvasGraphics":70,"../textures/Texture":102,"./GraphicsData":44}],44:[function(require,module,exports){ /** * A GraphicsData object. * @@ -10880,7 +10933,7 @@ this.shape = null; }; -},{}],44:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ var utils = require('../../utils'), math = require('../../math'), CONST = require('../../const'), @@ -11200,7 +11253,7 @@ }; -},{"../../const":38,"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils":107,"./WebGLGraphicsData":45,"./shaders/PrimitiveShader":46,"./utils/buildCircle":47,"./utils/buildComplexPoly":48,"./utils/buildLine":49,"./utils/buildPoly":50,"./utils/buildRectangle":51,"./utils/buildRoundedRectangle":52,"earcut":24}],45:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils":108,"./WebGLGraphicsData":46,"./shaders/PrimitiveShader":47,"./utils/buildCircle":48,"./utils/buildComplexPoly":49,"./utils/buildLine":50,"./utils/buildPoly":51,"./utils/buildRectangle":52,"./utils/buildRoundedRectangle":53,"earcut":24}],46:[function(require,module,exports){ /** * An object containing WebGL specific properties to be used by the WebGL renderer * @@ -11318,7 +11371,7 @@ this.glIndices = null; }; -},{}],46:[function(require,module,exports){ +},{}],47:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -11370,7 +11423,7 @@ module.exports = PrimitiveShader; -},{"pixi-gl-core":1}],47:[function(require,module,exports){ +},{"pixi-gl-core":1}],48:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11457,7 +11510,7 @@ module.exports = buildCircle; -},{"../../../utils":107,"./buildLine":49}],48:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],49:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11528,7 +11581,7 @@ module.exports = buildComplexPoly; -},{"../../../utils":107,"./buildLine":49}],49:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],50:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'); @@ -11748,7 +11801,7 @@ }; module.exports = buildLine; -},{"../../../math":56,"../../../utils":107}],50:[function(require,module,exports){ +},{"../../../math":57,"../../../utils":108}],51:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -11811,7 +11864,7 @@ module.exports = buildPoly; -},{"../../../utils":107}],51:[function(require,module,exports){ +},{"../../../utils":108}],52:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11882,7 +11935,7 @@ }; module.exports = buildRectangle; -},{"../../../utils":107,"./buildLine":49}],52:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],53:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -12010,7 +12063,7 @@ module.exports = buildRoundedRectangle; -},{"../../../utils":107,"./buildLine":49}],53:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],54:[function(require,module,exports){ /** * @file Main export of the PIXI core library * @author Mat Groves @@ -12106,7 +12159,7 @@ } }); -},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":42,"./graphics/GraphicsData":43,"./graphics/webgl/GraphicsRenderer":44,"./math":56,"./particles/ParticleContainer":62,"./particles/webgl/ParticleRenderer":64,"./renderers/canvas/CanvasRenderer":67,"./renderers/canvas/utils/CanvasBuffer":68,"./renderers/canvas/utils/CanvasGraphics":69,"./renderers/webgl/WebGLRenderer":73,"./renderers/webgl/filters/AbstractFilter":74,"./renderers/webgl/filters/FXAAFilter":75,"./renderers/webgl/filters/SpriteMaskFilter":76,"./renderers/webgl/managers/ShaderManager":80,"./renderers/webgl/managers/WebGLManager":82,"./renderers/webgl/shaders/Shader":85,"./renderers/webgl/utils/ObjectRenderer":88,"./renderers/webgl/utils/RenderTarget":90,"./sprites/Sprite":94,"./sprites/webgl/SpriteRenderer":95,"./text/Text":97,"./textures/BaseRenderTexture":98,"./textures/BaseTexture":99,"./textures/RenderTexture":100,"./textures/Texture":101,"./textures/TextureUvs":102,"./textures/VideoBaseTexture":103,"./ticker":105,"./utils":107,"pixi-gl-core":1}],54:[function(require,module,exports){ +},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":43,"./graphics/GraphicsData":44,"./graphics/webgl/GraphicsRenderer":45,"./math":57,"./particles/ParticleContainer":63,"./particles/webgl/ParticleRenderer":65,"./renderers/canvas/CanvasRenderer":68,"./renderers/canvas/utils/CanvasBuffer":69,"./renderers/canvas/utils/CanvasGraphics":70,"./renderers/webgl/WebGLRenderer":74,"./renderers/webgl/filters/AbstractFilter":75,"./renderers/webgl/filters/FXAAFilter":76,"./renderers/webgl/filters/SpriteMaskFilter":77,"./renderers/webgl/managers/ShaderManager":81,"./renderers/webgl/managers/WebGLManager":83,"./renderers/webgl/shaders/Shader":86,"./renderers/webgl/utils/ObjectRenderer":89,"./renderers/webgl/utils/RenderTarget":91,"./sprites/Sprite":95,"./sprites/webgl/SpriteRenderer":96,"./text/Text":98,"./textures/BaseRenderTexture":99,"./textures/BaseTexture":100,"./textures/RenderTexture":101,"./textures/Texture":102,"./textures/TextureUvs":103,"./textures/VideoBaseTexture":104,"./ticker":106,"./utils":108,"pixi-gl-core":1}],55:[function(require,module,exports){ // @todo - ignore the too many parameters warning for now // should either fix it or change the jshint config // jshint -W072 @@ -12546,7 +12599,7 @@ */ Matrix.TEMP_MATRIX = new Matrix(); -},{"./Point":55}],55:[function(require,module,exports){ +},{"./Point":56}],56:[function(require,module,exports){ /** * The Point object represents a location in a two-dimensional coordinate system, where x represents * the horizontal axis and y represents the vertical axis. @@ -12616,7 +12669,7 @@ this.y = y || ( (y !== 0) ? this.x : 0 ) ; }; -},{}],56:[function(require,module,exports){ +},{}],57:[function(require,module,exports){ /** * Math classes and utilities mixed into PIXI namespace. * @@ -12638,7 +12691,7 @@ RoundedRectangle: require('./shapes/RoundedRectangle') }; -},{"./Matrix":54,"./Point":55,"./shapes/Circle":57,"./shapes/Ellipse":58,"./shapes/Polygon":59,"./shapes/Rectangle":60,"./shapes/RoundedRectangle":61}],57:[function(require,module,exports){ +},{"./Matrix":55,"./Point":56,"./shapes/Circle":58,"./shapes/Ellipse":59,"./shapes/Polygon":60,"./shapes/Rectangle":61,"./shapes/RoundedRectangle":62}],58:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12726,7 +12779,7 @@ return new Rectangle(this.x - this.radius, this.y - this.radius, this.radius * 2, this.radius * 2); }; -},{"../../const":38,"./Rectangle":60}],58:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],59:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12821,7 +12874,7 @@ return new Rectangle(this.x - this.width, this.y - this.height, this.width, this.height); }; -},{"../../const":38,"./Rectangle":60}],59:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],60:[function(require,module,exports){ var Point = require('../Point'), CONST = require('../../const'); @@ -12924,7 +12977,7 @@ return inside; }; -},{"../../const":38,"../Point":55}],60:[function(require,module,exports){ +},{"../../const":38,"../Point":56}],61:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13018,7 +13071,7 @@ return false; }; -},{"../../const":38}],61:[function(require,module,exports){ +},{"../../const":38}],62:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13110,7 +13163,7 @@ return false; }; -},{"../../const":38}],62:[function(require,module,exports){ +},{"../../const":38}],63:[function(require,module,exports){ var Container = require('../display/Container'), CONST = require('../const'); @@ -13429,7 +13482,7 @@ this._buffers = null; }; -},{"../const":38,"../display/Container":39}],63:[function(require,module,exports){ +},{"../const":38,"../display/Container":39}],64:[function(require,module,exports){ /** * @author Mat Groves @@ -13649,7 +13702,7 @@ this.gl.deleteBuffer(this.staticBuffer); }; -},{}],64:[function(require,module,exports){ +},{}],65:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), ParticleShader = require('./ParticleShader'), @@ -14125,7 +14178,7 @@ this.tempMatrix = null; }; -},{"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"./ParticleBuffer":63,"./ParticleShader":65}],65:[function(require,module,exports){ +},{"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"./ParticleBuffer":64,"./ParticleShader":66}],66:[function(require,module,exports){ var TextureShader = require('../../renderers/webgl/shaders/TextureShader'); /** @@ -14203,7 +14256,7 @@ module.exports = ParticleShader; -},{"../../renderers/webgl/shaders/TextureShader":86}],66:[function(require,module,exports){ +},{"../../renderers/webgl/shaders/TextureShader":87}],67:[function(require,module,exports){ var utils = require('../utils'), math = require('../math'), CONST = require('../const'), @@ -14464,7 +14517,7 @@ this._backgroundColorString = null; }; -},{"../const":38,"../math":56,"../utils":107,"eventemitter3":25}],67:[function(require,module,exports){ +},{"../const":38,"../math":57,"../utils":108,"eventemitter3":25}],68:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), CanvasMaskManager = require('./utils/CanvasMaskManager'), utils = require('../../utils'), @@ -14732,7 +14785,7 @@ } }; -},{"../../const":38,"../../math":56,"../../utils":107,"../SystemRenderer":66,"./utils/CanvasMaskManager":70}],68:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../utils":108,"../SystemRenderer":67,"./utils/CanvasMaskManager":71}],69:[function(require,module,exports){ /** * Creates a Canvas element of the given size. * @@ -14832,7 +14885,7 @@ this.canvas = null; }; -},{}],69:[function(require,module,exports){ +},{}],70:[function(require,module,exports){ var CONST = require('../../../const'); /** @@ -15186,7 +15239,7 @@ }; -},{"../../../const":38}],70:[function(require,module,exports){ +},{"../../../const":38}],71:[function(require,module,exports){ var CanvasGraphics = require('./CanvasGraphics'); /** @@ -15248,7 +15301,7 @@ CanvasMaskManager.prototype.destroy = function () {}; -},{"./CanvasGraphics":69}],71:[function(require,module,exports){ +},{"./CanvasGraphics":70}],72:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -15500,7 +15553,7 @@ */ CanvasTinter.tintMethod = CanvasTinter.canUseMultiply ? CanvasTinter.tintWithMultiply : CanvasTinter.tintWithPerPixel; -},{"../../../utils":107}],72:[function(require,module,exports){ +},{"../../../utils":108}],73:[function(require,module,exports){ var GLTexture = require('pixi-gl-core').GLTexture, utils = require('../../utils'); @@ -15640,7 +15693,7 @@ module.exports = TextureManager; -},{"../../utils":107,"pixi-gl-core":1}],73:[function(require,module,exports){ +},{"../../utils":108,"pixi-gl-core":1}],74:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), ShaderManager = require('./managers/ShaderManager'), MaskManager = require('./managers/MaskManager'), @@ -16037,7 +16090,7 @@ }; -},{"../../const":38,"../../utils":107,"../SystemRenderer":66,"./TextureManager":72,"./filters/FXAAFilter":75,"./managers/BlendModeManager":77,"./managers/FilterManager":78,"./managers/MaskManager":79,"./managers/ShaderManager":80,"./managers/StencilManager":81,"./utils/ObjectRenderer":88,"./utils/RenderTarget":90,"./utils/mapWebGLBlendModesToPixi":92,"./utils/mapWebGLDrawModesToPixi":93,"pixi-gl-core":1}],74:[function(require,module,exports){ +},{"../../const":38,"../../utils":108,"../SystemRenderer":67,"./TextureManager":73,"./filters/FXAAFilter":76,"./managers/BlendModeManager":78,"./managers/FilterManager":79,"./managers/MaskManager":80,"./managers/ShaderManager":81,"./managers/StencilManager":82,"./utils/ObjectRenderer":89,"./utils/RenderTarget":91,"./utils/mapWebGLBlendModesToPixi":93,"./utils/mapWebGLDrawModesToPixi":94,"pixi-gl-core":1}],75:[function(require,module,exports){ var DefaultShader = require('../shaders/TextureShader'); /** @@ -16149,7 +16202,7 @@ } }; -},{"../shaders/TextureShader":86}],75:[function(require,module,exports){ +},{"../shaders/TextureShader":87}],76:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'); // @see https://github.com/substack/brfs/issues/25 @@ -16204,7 +16257,7 @@ filterManager.applyFilter(shader, input, output); }; -},{"./AbstractFilter":74}],76:[function(require,module,exports){ +},{"./AbstractFilter":75}],77:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'), math = require('../../../math'); @@ -16301,7 +16354,7 @@ } }); -},{"../../../math":56,"./AbstractFilter":74}],77:[function(require,module,exports){ +},{"../../../math":57,"./AbstractFilter":75}],78:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'); /** @@ -16345,7 +16398,7 @@ return true; }; -},{"./WebGLManager":82}],78:[function(require,module,exports){ +},{"./WebGLManager":83}],79:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), RenderTarget = require('../utils/RenderTarget'), CONST = require('../../../const'), @@ -16797,7 +16850,7 @@ this.texturePool = null; }; -},{"../../../const":38,"../../../math":56,"../utils/Quad":89,"../utils/RenderTarget":90,"./WebGLManager":82}],79:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../utils/Quad":90,"../utils/RenderTarget":91,"./WebGLManager":83}],80:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), AlphaMaskFilter = require('../filters/SpriteMaskFilter'); @@ -16912,7 +16965,7 @@ }; -},{"../filters/SpriteMaskFilter":76,"./WebGLManager":82}],80:[function(require,module,exports){ +},{"../filters/SpriteMaskFilter":77,"./WebGLManager":83}],81:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), TextureShader = require('../shaders/TextureShader'), ComplexPrimitiveShader = require('../shaders/ComplexPrimitiveShader'), @@ -17082,7 +17135,7 @@ this.tempAttribState = null; }; -},{"../../../utils":107,"../shaders/ComplexPrimitiveShader":83,"../shaders/PrimitiveShader":84,"../shaders/TextureShader":86,"./WebGLManager":82}],81:[function(require,module,exports){ +},{"../../../utils":108,"../shaders/ComplexPrimitiveShader":84,"../shaders/PrimitiveShader":85,"../shaders/TextureShader":87,"./WebGLManager":83}],82:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), utils = require('../../../utils'); @@ -17449,7 +17502,7 @@ }; -},{"../../../utils":107,"./WebGLManager":82}],82:[function(require,module,exports){ +},{"../../../utils":108,"./WebGLManager":83}],83:[function(require,module,exports){ /** * @class * @memberof PIXI @@ -17490,7 +17543,7 @@ this.renderer = null; }; -},{}],83:[function(require,module,exports){ +},{}],84:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17552,7 +17605,7 @@ ComplexPrimitiveShader.prototype.constructor = ComplexPrimitiveShader; module.exports = ComplexPrimitiveShader; -},{"./Shader":85}],84:[function(require,module,exports){ +},{"./Shader":86}],85:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17615,7 +17668,7 @@ PrimitiveShader.prototype.constructor = PrimitiveShader; module.exports = PrimitiveShader; -},{"./Shader":85}],85:[function(require,module,exports){ +},{"./Shader":86}],86:[function(require,module,exports){ /*global console */ var utils = require('../../../utils'); @@ -18143,7 +18196,7 @@ return shader; }; -},{"../../../utils":107}],86:[function(require,module,exports){ +},{"../../../utils":108}],87:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -18254,7 +18307,7 @@ '}' ].join('\n'); -},{"./Shader":85}],87:[function(require,module,exports){ +},{"./Shader":86}],88:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -18335,7 +18388,7 @@ '}' ].join('\n'); -},{"pixi-gl-core":1}],88:[function(require,module,exports){ +},{"pixi-gl-core":1}],89:[function(require,module,exports){ var WebGLManager = require('../managers/WebGLManager'); /** @@ -18393,7 +18446,7 @@ // render the object }; -},{"../managers/WebGLManager":82}],89:[function(require,module,exports){ +},{"../managers/WebGLManager":83}],90:[function(require,module,exports){ /** * Helper class to create a quad * @@ -18548,7 +18601,7 @@ -},{}],90:[function(require,module,exports){ +},{}],91:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'), CONST = require('../../../const'), @@ -18853,7 +18906,7 @@ this.texture = null; }; -},{"../../../const":38,"../../../math":56,"../../../utils":107,"./StencilMaskStack":91,"pixi-gl-core":1}],91:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../../../utils":108,"./StencilMaskStack":92,"pixi-gl-core":1}],92:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -18886,7 +18939,7 @@ StencilMaskStack.prototype.constructor = StencilMaskStack; module.exports = StencilMaskStack; -},{}],92:[function(require,module,exports){ +},{}],93:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18923,7 +18976,7 @@ module.exports = mapWebGLBlendModesToPixi; -},{"../../../const":38}],93:[function(require,module,exports){ +},{"../../../const":38}],94:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18947,7 +19000,7 @@ module.exports = mapWebGLDrawModesToPixi; -},{"../../../const":38}],94:[function(require,module,exports){ +},{"../../../const":38}],95:[function(require,module,exports){ var math = require('../math'), Texture = require('../textures/Texture'), Container = require('../display/Container'), @@ -19043,7 +19096,6 @@ // call texture setter this.texture = texture || Texture.EMPTY; this.textureDirty = true - this.vertexDirty = true; this.vertexData = new Float32Array(8); } @@ -19153,7 +19205,6 @@ Sprite.prototype.caclulateVertices = function () { - var texture = this._texture, wt = this.transform.worldTransform, a = wt.a, b = wt.b, c = wt.c, d = wt.d, tx = wt.tx, ty = wt.ty, @@ -19208,22 +19259,11 @@ */ Sprite.prototype._renderWebGL = function (renderer) { - if(this.textureDirty) + if(this.transform.updated || this.textureDirty) { this.textureDirty = false; - - this._onTextureUpdate(); - - this.vertexDirty = true; - } - - if(this.vertexDirty) - { - this.vertexDirty = false; - // set the vertex data this.caclulateVertices(); - } renderer.setObjectRenderer(renderer.plugins.sprite); @@ -19566,7 +19606,7 @@ return new Sprite(Texture.fromImage(imageId, crossorigin, scaleMode)); }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasTinter":71,"../textures/Texture":101,"../utils":107}],95:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasTinter":72,"../textures/Texture":102,"../utils":108}],96:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), TextureShader = require('../../renderers/webgl/shaders/_TextureShader'), @@ -19927,7 +19967,7 @@ this.shader = null; }; -},{"../../const":38,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/shaders/_TextureShader":87,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils/createIndicesForQuads":106,"./generateMultiTextureShader":96,"pixi-gl-core":1}],96:[function(require,module,exports){ +},{"../../const":38,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/shaders/_TextureShader":88,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils/createIndicesForQuads":107,"./generateMultiTextureShader":97,"pixi-gl-core":1}],97:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; @@ -19990,7 +20030,7 @@ module.exports = generateMultiTextureShader; -},{"pixi-gl-core":1}],97:[function(require,module,exports){ +},{"pixi-gl-core":1}],98:[function(require,module,exports){ var Sprite = require('../sprites/Sprite'), Texture = require('../textures/Texture'), math = require('../math'), @@ -20611,7 +20651,7 @@ this._texture.destroy(destroyBaseTexture === undefined ? true : destroyBaseTexture); }; -},{"../const":38,"../math":56,"../sprites/Sprite":94,"../textures/Texture":101,"../utils":107}],98:[function(require,module,exports){ +},{"../const":38,"../math":57,"../sprites/Sprite":95,"../textures/Texture":102,"../utils":108}],99:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), Texture = require('./Texture'), RenderTarget = require('../renderers/webgl/utils/RenderTarget'), @@ -21095,7 +21135,7 @@ return this.getPixels(tempRect); }; -},{"../const":38,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/webgl/managers/FilterManager":78,"../renderers/webgl/utils/RenderTarget":90,"./BaseTexture":99,"./Texture":101}],99:[function(require,module,exports){ +},{"../const":38,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/webgl/managers/FilterManager":79,"../renderers/webgl/utils/RenderTarget":91,"./BaseTexture":100,"./Texture":102}],100:[function(require,module,exports){ var utils = require('../utils'), CONST = require('../const'), EventEmitter = require('eventemitter3'); @@ -21532,7 +21572,7 @@ return baseTexture; }; -},{"../const":38,"../utils":107,"eventemitter3":25}],100:[function(require,module,exports){ +},{"../const":38,"../utils":108,"eventemitter3":25}],101:[function(require,module,exports){ var BaseRenderTexture = require('./BaseRenderTexture'), Texture = require('./Texture'), math = require('../math'), @@ -21727,7 +21767,7 @@ } -},{"../const":38,"../math":56,"./BaseRenderTexture":98,"./Texture":101}],101:[function(require,module,exports){ +},{"../const":38,"../math":57,"./BaseRenderTexture":99,"./Texture":102}],102:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), VideoBaseTexture = require('./VideoBaseTexture'), TextureUvs = require('./TextureUvs'), @@ -22153,7 +22193,7 @@ */ Texture.EMPTY = new Texture(new BaseTexture()); -},{"../math":56,"../utils":107,"./BaseTexture":99,"./TextureUvs":102,"./VideoBaseTexture":103,"eventemitter3":25}],102:[function(require,module,exports){ +},{"../math":57,"../utils":108,"./BaseTexture":100,"./TextureUvs":103,"./VideoBaseTexture":104,"eventemitter3":25}],103:[function(require,module,exports){ /** * A standard object to store the Uvs of a texture @@ -22234,7 +22274,7 @@ this.uvs_uint32[3] = (((this.y3 * 65535) & 0xFFFF) << 16) | ((this.x3 * 65535) & 0xFFFF); }; -},{}],103:[function(require,module,exports){ +},{}],104:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), utils = require('../utils'); @@ -22471,7 +22511,7 @@ return source; } -},{"../utils":107,"./BaseTexture":99}],104:[function(require,module,exports){ +},{"../utils":108,"./BaseTexture":100}],105:[function(require,module,exports){ var CONST = require('../const'), EventEmitter = require('eventemitter3'), // Internal event used by composed emitter @@ -22826,7 +22866,7 @@ module.exports = Ticker; -},{"../const":38,"eventemitter3":25}],105:[function(require,module,exports){ +},{"../const":38,"eventemitter3":25}],106:[function(require,module,exports){ var Ticker = require('./Ticker'); /** @@ -22882,7 +22922,7 @@ Ticker: Ticker }; -},{"./Ticker":104}],106:[function(require,module,exports){ +},{"./Ticker":105}],107:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -22915,7 +22955,7 @@ }; module.exports = createIndicesForQuads; -},{}],107:[function(require,module,exports){ +},{}],108:[function(require,module,exports){ var CONST = require('../const'); /** @@ -23192,7 +23232,7 @@ BaseTextureCache: {} }; -},{"../const":38,"./pluginTarget":108,"async":16,"eventemitter3":25}],108:[function(require,module,exports){ +},{"../const":38,"./pluginTarget":109,"async":16,"eventemitter3":25}],109:[function(require,module,exports){ /** * Mixins functionality to make an object have "plugins". * @@ -23262,7 +23302,7 @@ } }; -},{}],109:[function(require,module,exports){ +},{}],110:[function(require,module,exports){ /*global console */ var core = require('./core'), mesh = require('./mesh'), @@ -23613,7 +23653,7 @@ return core.utils.uid(); }; -},{"./core":53,"./extras":116,"./filters":133,"./mesh":158}],110:[function(require,module,exports){ +},{"./core":54,"./extras":117,"./filters":134,"./mesh":159}],111:[function(require,module,exports){ var core = require('../core'); /** @@ -24001,7 +24041,7 @@ BitmapText.fonts = {}; -},{"../core":53}],111:[function(require,module,exports){ +},{"../core":54}],112:[function(require,module,exports){ var core = require('../core'); /** @@ -24321,7 +24361,7 @@ return new MovieClip(textures); }; -},{"../core":53}],112:[function(require,module,exports){ +},{"../core":54}],113:[function(require,module,exports){ var core = require('../core'), // a sprite use dfor rendering textures.. tempPoint = new core.Point(), @@ -24773,7 +24813,7 @@ return new TilingSprite(core.Texture.fromImage(imageId, crossorigin, scaleMode),width,height); }; -},{"../core":53,"../core/renderers/canvas/utils/CanvasTinter":71}],113:[function(require,module,exports){ +},{"../core":54,"../core/renderers/canvas/utils/CanvasTinter":72}],114:[function(require,module,exports){ var core = require('../core'), DisplayObject = core.DisplayObject, _tempMatrix = new core.Matrix(); @@ -25045,7 +25085,7 @@ this._originalDestroy(); }; -},{"../core":53}],114:[function(require,module,exports){ +},{"../core":54}],115:[function(require,module,exports){ var core = require('../core'); /** @@ -25075,7 +25115,7 @@ return null; }; -},{"../core":53}],115:[function(require,module,exports){ +},{"../core":54}],116:[function(require,module,exports){ var core = require('../core'); /** @@ -25105,7 +25145,7 @@ return point; }; -},{"../core":53}],116:[function(require,module,exports){ +},{"../core":54}],117:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -25126,7 +25166,7 @@ BitmapText: require('./BitmapText') }; -},{"./BitmapText":110,"./MovieClip":111,"./TilingSprite":112,"./cacheAsBitmap":113,"./getChildByName":114,"./getGlobalPosition":115}],117:[function(require,module,exports){ +},{"./BitmapText":111,"./MovieClip":112,"./TilingSprite":113,"./cacheAsBitmap":114,"./getChildByName":115,"./getGlobalPosition":116}],118:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25183,7 +25223,7 @@ } }); -},{"../../core":53}],118:[function(require,module,exports){ +},{"../../core":54}],119:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYFilter = require('../blur/BlurYFilter'); @@ -25284,7 +25324,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"../blur/BlurYFilter":122}],119:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"../blur/BlurYFilter":123}],120:[function(require,module,exports){ var core = require('../../core'); @@ -25426,7 +25466,7 @@ } }); -},{"../../core":53}],120:[function(require,module,exports){ +},{"../../core":54}],121:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('./BlurXFilter'), BlurYFilter = require('./BlurYFilter'); @@ -25536,7 +25576,7 @@ } }); -},{"../../core":53,"./BlurXFilter":121,"./BlurYFilter":122}],121:[function(require,module,exports){ +},{"../../core":54,"./BlurXFilter":122,"./BlurYFilter":123}],122:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25629,7 +25669,7 @@ } }); -},{"../../core":53}],122:[function(require,module,exports){ +},{"../../core":54}],123:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25715,7 +25755,7 @@ } }); -},{"../../core":53}],123:[function(require,module,exports){ +},{"../../core":54}],124:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25745,7 +25785,7 @@ SmartBlurFilter.prototype.constructor = SmartBlurFilter; module.exports = SmartBlurFilter; -},{"../../core":53}],124:[function(require,module,exports){ +},{"../../core":54}],125:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26281,7 +26321,7 @@ } }); -},{"../../core":53}],125:[function(require,module,exports){ +},{"../../core":54}],126:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26330,7 +26370,7 @@ } }); -},{"../../core":53}],126:[function(require,module,exports){ +},{"../../core":54}],127:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26421,7 +26461,7 @@ } }); -},{"../../core":53}],127:[function(require,module,exports){ +},{"../../core":54}],128:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26447,7 +26487,7 @@ CrossHatchFilter.prototype.constructor = CrossHatchFilter; module.exports = CrossHatchFilter; -},{"../../core":53}],128:[function(require,module,exports){ +},{"../../core":54}],129:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26531,7 +26571,7 @@ } }); -},{"../../core":53}],129:[function(require,module,exports){ +},{"../../core":54}],130:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26603,7 +26643,7 @@ } }); -},{"../../core":53}],130:[function(require,module,exports){ +},{"../../core":54}],131:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26694,7 +26734,7 @@ } }); -},{"../../core":53}],131:[function(require,module,exports){ +},{"../../core":54}],132:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYTintFilter = require('./BlurYTintFilter'); @@ -26887,7 +26927,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"./BlurYTintFilter":130}],132:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"./BlurYTintFilter":131}],133:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26936,7 +26976,7 @@ } }); -},{"../../core":53}],133:[function(require,module,exports){ +},{"../../core":54}],134:[function(require,module,exports){ /** * @file Main export of the PIXI filters library * @author Mat Groves @@ -26975,7 +27015,7 @@ TwistFilter: require('./twist/TwistFilter') }; -},{"./ascii/AsciiFilter":117,"./bloom/BloomFilter":118,"./blur/BlurDirFilter":119,"./blur/BlurFilter":120,"./blur/BlurXFilter":121,"./blur/BlurYFilter":122,"./blur/SmartBlurFilter":123,"./color/ColorMatrixFilter":124,"./color/ColorStepFilter":125,"./convolution/ConvolutionFilter":126,"./crosshatch/CrossHatchFilter":127,"./displacement/DisplacementFilter":128,"./dot/DotScreenFilter":129,"./dropshadow/DropShadowFilter":131,"./gray/GrayFilter":132,"./invert/InvertFilter":134,"./noise/NoiseFilter":135,"./pixelate/PixelateFilter":136,"./rgb/RGBSplitFilter":137,"./sepia/SepiaFilter":138,"./shockwave/ShockwaveFilter":139,"./tiltshift/TiltShiftFilter":141,"./tiltshift/TiltShiftXFilter":142,"./tiltshift/TiltShiftYFilter":143,"./twist/TwistFilter":144}],134:[function(require,module,exports){ +},{"./ascii/AsciiFilter":118,"./bloom/BloomFilter":119,"./blur/BlurDirFilter":120,"./blur/BlurFilter":121,"./blur/BlurXFilter":122,"./blur/BlurYFilter":123,"./blur/SmartBlurFilter":124,"./color/ColorMatrixFilter":125,"./color/ColorStepFilter":126,"./convolution/ConvolutionFilter":127,"./crosshatch/CrossHatchFilter":128,"./displacement/DisplacementFilter":129,"./dot/DotScreenFilter":130,"./dropshadow/DropShadowFilter":132,"./gray/GrayFilter":133,"./invert/InvertFilter":135,"./noise/NoiseFilter":136,"./pixelate/PixelateFilter":137,"./rgb/RGBSplitFilter":138,"./sepia/SepiaFilter":139,"./shockwave/ShockwaveFilter":140,"./tiltshift/TiltShiftFilter":142,"./tiltshift/TiltShiftXFilter":143,"./tiltshift/TiltShiftYFilter":144,"./twist/TwistFilter":145}],135:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27025,7 +27065,7 @@ } }); -},{"../../core":53}],135:[function(require,module,exports){ +},{"../../core":54}],136:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27080,7 +27120,7 @@ } }); -},{"../../core":53}],136:[function(require,module,exports){ +},{"../../core":54}],137:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27131,7 +27171,7 @@ } }); -},{"../../core":53}],137:[function(require,module,exports){ +},{"../../core":54}],138:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27217,7 +27257,7 @@ } }); -},{"../../core":53}],138:[function(require,module,exports){ +},{"../../core":54}],139:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27267,7 +27307,7 @@ } }); -},{"../../core":53}],139:[function(require,module,exports){ +},{"../../core":54}],140:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27355,7 +27395,7 @@ } }); -},{"../../core":53}],140:[function(require,module,exports){ +},{"../../core":54}],141:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27480,7 +27520,7 @@ } }); -},{"../../core":53}],141:[function(require,module,exports){ +},{"../../core":54}],142:[function(require,module,exports){ var core = require('../../core'), TiltShiftXFilter = require('./TiltShiftXFilter'), TiltShiftYFilter = require('./TiltShiftYFilter'); @@ -27590,7 +27630,7 @@ } }); -},{"../../core":53,"./TiltShiftXFilter":142,"./TiltShiftYFilter":143}],142:[function(require,module,exports){ +},{"../../core":54,"./TiltShiftXFilter":143,"./TiltShiftYFilter":144}],143:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27628,7 +27668,7 @@ this.uniforms.delta.value.y = dy / d; }; -},{"./TiltShiftAxisFilter":140}],143:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],144:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27666,7 +27706,7 @@ this.uniforms.delta.value.y = dx / d; }; -},{"./TiltShiftAxisFilter":140}],144:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],145:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27751,7 +27791,7 @@ } }); -},{"../../core":53}],145:[function(require,module,exports){ +},{"../../core":54}],146:[function(require,module,exports){ (function (global){ // run the polyfills require('./polyfill'); @@ -27784,7 +27824,7 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./accessibility":37,"./core":53,"./deprecation":109,"./extras":116,"./filters":133,"./interaction":148,"./loaders":151,"./mesh":158,"./polyfill":163}],146:[function(require,module,exports){ +},{"./accessibility":37,"./core":54,"./deprecation":110,"./extras":117,"./filters":134,"./interaction":149,"./loaders":152,"./mesh":159,"./polyfill":164}],147:[function(require,module,exports){ var core = require('../core'); /** @@ -27833,7 +27873,7 @@ return displayObject.worldTransform.applyInverse(globalPos || this.global, point); }; -},{"../core":53}],147:[function(require,module,exports){ +},{"../core":54}],148:[function(require,module,exports){ var core = require('../core'), InteractionData = require('./InteractionData'); @@ -28709,7 +28749,7 @@ core.WebGLRenderer.registerPlugin('interaction', InteractionManager); core.CanvasRenderer.registerPlugin('interaction', InteractionManager); -},{"../core":53,"./InteractionData":146,"./interactiveTarget":149}],148:[function(require,module,exports){ +},{"../core":54,"./InteractionData":147,"./interactiveTarget":150}],149:[function(require,module,exports){ /** * @file Main export of the PIXI interactions library * @author Mat Groves @@ -28726,7 +28766,7 @@ interactiveTarget: require('./interactiveTarget') }; -},{"./InteractionData":146,"./InteractionManager":147,"./interactiveTarget":149}],149:[function(require,module,exports){ +},{"./InteractionData":147,"./InteractionManager":148,"./interactiveTarget":150}],150:[function(require,module,exports){ /** * Default property values of interactive objects * used by {@link PIXI.interaction.InteractionManager}. @@ -28775,7 +28815,7 @@ module.exports = interactiveTarget; -},{}],150:[function(require,module,exports){ +},{}],151:[function(require,module,exports){ var Resource = require('resource-loader').Resource, core = require('../core'), extras = require('../extras'), @@ -28896,7 +28936,7 @@ }; }; -},{"../core":53,"../extras":116,"path":17,"resource-loader":31}],151:[function(require,module,exports){ +},{"../core":54,"../extras":117,"path":17,"resource-loader":31}],152:[function(require,module,exports){ /** * @file Main export of the PIXI loaders library * @author Mat Groves @@ -28917,7 +28957,7 @@ Resource: require('resource-loader').Resource }; -},{"./bitmapFontParser":150,"./loader":152,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],152:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./loader":153,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],153:[function(require,module,exports){ var ResourceLoader = require('resource-loader'), textureParser = require('./textureParser'), spritesheetParser = require('./spritesheetParser'), @@ -28979,7 +29019,7 @@ Resource.setExtensionXhrType('fnt', Resource.XHR_RESPONSE_TYPE.DOCUMENT); -},{"./bitmapFontParser":150,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],153:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],154:[function(require,module,exports){ var Resource = require('resource-loader').Resource, path = require('path'), core = require('../core'); @@ -29063,7 +29103,7 @@ }; }; -},{"../core":53,"path":17,"resource-loader":31}],154:[function(require,module,exports){ +},{"../core":54,"path":17,"resource-loader":31}],155:[function(require,module,exports){ var core = require('../core'); module.exports = function () @@ -29085,7 +29125,7 @@ }; }; -},{"../core":53}],155:[function(require,module,exports){ +},{"../core":54}],156:[function(require,module,exports){ var core = require('../core'), tempPoint = new core.Point(), tempPolygon = new core.Polygon(); @@ -29561,7 +29601,7 @@ TRIANGLES: 1 }; -},{"../core":53}],156:[function(require,module,exports){ +},{"../core":54}],157:[function(require,module,exports){ var Mesh = require('./Mesh'); /** @@ -29687,7 +29727,7 @@ } }; -},{"./Mesh":155}],157:[function(require,module,exports){ +},{"./Mesh":156}],158:[function(require,module,exports){ var Mesh = require('./Mesh'); var core = require('../core'); @@ -29900,7 +29940,7 @@ this.containerUpdateTransform(); }; -},{"../core":53,"./Mesh":155}],158:[function(require,module,exports){ +},{"../core":54,"./Mesh":156}],159:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -29919,7 +29959,7 @@ MeshShader: require('./webgl/MeshShader') }; -},{"./Mesh":155,"./Plane":156,"./Rope":157,"./webgl/MeshRenderer":159,"./webgl/MeshShader":160}],159:[function(require,module,exports){ +},{"./Mesh":156,"./Plane":157,"./Rope":158,"./webgl/MeshRenderer":160,"./webgl/MeshShader":161}],160:[function(require,module,exports){ var core = require('../../core'), Mesh = require('../Mesh'); @@ -30148,7 +30188,7 @@ core.ObjectRenderer.prototype.destroy.call(this); }; -},{"../../core":53,"../Mesh":155}],160:[function(require,module,exports){ +},{"../../core":54,"../Mesh":156}],161:[function(require,module,exports){ var core = require('../../core'); /** @@ -30209,7 +30249,7 @@ core.ShaderManager.registerPlugin('meshShader', MeshShader); -},{"../../core":53}],161:[function(require,module,exports){ +},{"../../core":54}],162:[function(require,module,exports){ // References: // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign @@ -30225,7 +30265,7 @@ }; } -},{}],162:[function(require,module,exports){ +},{}],163:[function(require,module,exports){ // References: // https://github.com/sindresorhus/object-assign // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign @@ -30235,12 +30275,12 @@ Object.assign = require('object-assign'); } -},{"object-assign":26}],163:[function(require,module,exports){ +},{"object-assign":26}],164:[function(require,module,exports){ require('./Object.assign'); require('./requestAnimationFrame'); require('./Math.sign'); -},{"./Math.sign":161,"./Object.assign":162,"./requestAnimationFrame":164}],164:[function(require,module,exports){ +},{"./Math.sign":162,"./Object.assign":163,"./requestAnimationFrame":165}],165:[function(require,module,exports){ (function (global){ // References: // http://paulirish.com/2011/requestanimationframe-for-smart-animating/ @@ -30311,8 +30351,8 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[145])(145) +},{}]},{},[146])(146) }); -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L1RyYW5zZm9ybS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL1dlYkdMR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZENpcmNsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ29tcGxleFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZExpbmUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9NYXRyaXguanMiLCJzcmMvY29yZS9tYXRoL1BvaW50LmpzIiwic3JjL2NvcmUvbWF0aC9pbmRleC5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0NpcmNsZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0VsbGlwc2UuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Qb2x5Z29uLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZUJ1ZmZlci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL1N5c3RlbVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcy5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9UZXh0dXJlTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9GWEFBRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1F1YWQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0LmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1N0ZW5jaWxNYXNrU3RhY2suanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvc3ByaXRlcy9TcHJpdGUuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL1Nwcml0ZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvc3ByaXRlcy93ZWJnbC9nZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3RleHQvVGV4dC5qcyIsInNyYy9jb3JlL3RleHR1cmVzL0Jhc2VSZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1RleHR1cmVVdnMuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGlja2VyL1RpY2tlci5qcyIsInNyYy9jb3JlL3RpY2tlci9pbmRleC5qcyIsInNyYy9jb3JlL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcy5qcyIsInNyYy9jb3JlL3V0aWxzL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvcGx1Z2luVGFyZ2V0LmpzIiwic3JjL2RlcHJlY2F0aW9uLmpzIiwic3JjL2V4dHJhcy9CaXRtYXBUZXh0LmpzIiwic3JjL2V4dHJhcy9Nb3ZpZUNsaXAuanMiLCJzcmMvZXh0cmFzL1RpbGluZ1Nwcml0ZS5qcyIsInNyYy9leHRyYXMvY2FjaGVBc0JpdG1hcC5qcyIsInNyYy9leHRyYXMvZ2V0Q2hpbGRCeU5hbWUuanMiLCJzcmMvZXh0cmFzL2dldEdsb2JhbFBvc2l0aW9uLmpzIiwic3JjL2V4dHJhcy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2FzY2lpL0FzY2lpRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmxvb20vQmxvb21GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJEaXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJYRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9CbHVyWUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvU21hcnRCbHVyRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvclN0ZXBGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kb3QvRG90U2NyZWVuRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZHJvcHNoYWRvdy9CbHVyWVRpbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ncmF5L0dyYXlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2ludmVydC9JbnZlcnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ub2lzZS9Ob2lzZUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcmdiL1JHQlNwbGl0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvc2VwaWEvU2VwaWFGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdEF4aXNGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3R3aXN0L1R3aXN0RmlsdGVyLmpzIiwic3JjL3NyYy9pbmRleC5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbkRhdGEuanMiLCJzcmMvaW50ZXJhY3Rpb24vSW50ZXJhY3Rpb25NYW5hZ2VyLmpzIiwic3JjL2ludGVyYWN0aW9uL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL2ludGVyYWN0aXZlVGFyZ2V0LmpzIiwic3JjL2xvYWRlcnMvYml0bWFwRm9udFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL2luZGV4LmpzIiwic3JjL2xvYWRlcnMvbG9hZGVyLmpzIiwic3JjL2xvYWRlcnMvc3ByaXRlc2hlZXRQYXJzZXIuanMiLCJzcmMvbG9hZGVycy90ZXh0dXJlUGFyc2VyLmpzIiwic3JjL21lc2gvTWVzaC5qcyIsInNyYy9tZXNoL1BsYW5lLmpzIiwic3JjL21lc2gvUm9wZS5qcyIsInNyYy9tZXNoL2luZGV4LmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFJlbmRlcmVyLmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFNoYWRlci5qcyIsInNyYy9wb2x5ZmlsbC9NYXRoLnNpZ24uanMiLCJzcmMvcG9seWZpbGwvT2JqZWN0LmFzc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9pbmRleC5qcyIsInNyYy9wb2x5ZmlsbC9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM1dUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbnNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25tQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0b0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6bUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIGNyZWF0ZUNvbnRleHQ6IFx0XHRcdHJlcXVpcmUoJy4vbGliL2NyZWF0ZUNvbnRleHQnKSxcbiAgICBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM6IFx0cmVxdWlyZSgnLi9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzJyksXG4gICAgXG4gICAgR0xCdWZmZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xCdWZmZXInKSxcbiAgICBHTEZyYW1lYnVmZmVyOiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9HTEZyYW1lYnVmZmVyJyksXG4gICAgR0xTaGFkZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xTaGFkZXInKSxcbiAgICBHTFRleHR1cmU6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xUZXh0dXJlJyksXG4gICAgXG4gICAgVmVydGV4QXJyYXlPYmplY3Q6IFx0XHRyZXF1aXJlKCcuL2xpYi9WZXJ0ZXhBcnJheU9iamVjdCcpXG5cbn07IiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRU1QVFlfQVJSQVlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xuXG52YXIgQnVmZmVyID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5BUlJBWV9CVUZGRVI7XG5cdHRoaXMuZHJhd1R5cGUgPSBkcmF3VHlwZSB8fCBnbC5TVEFUSUNfRFJBVztcblx0dGhpcy5kYXRhID0gRU1QVFlfQVJSQVlfQlVGRkVSO1xuXG5cdGlmKGRhdGEpXG5cdHtcblx0XHR0aGlzLnVwbG9hZChkYXRhKTtcblx0fVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKGRhdGEsIG9mZnNldCwgZG9udEJpbmQpXG57XG5cdC8vIHRvZG8gLSBuZWVkZWQ/XG5cdC8vaWYoIWRvbnRCaW5kKVxuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRcblx0ZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuXHRvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuXHRpZih0aGlzLmRhdGEuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpXG5cdHtcdFxuXHRcdGdsLmJ1ZmZlclN1YkRhdGEodGhpcy50eXBlLCBvZmZzZXQsIGRhdGEpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLCBkYXRhLCB0aGlzLmRyYXdUeXBlKTtcblx0fVxuXG5cdHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKTtcbn1cblxuQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIGdsLkFSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgdHlwZSwgZHJhd1R5cGUpO1xufVxuXG4vL1RPRE8gRGVzdHJveS4uXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyO1xuXG4iLCJcbnZhciBUZXh0dXJlID0gcmVxdWlyZSgnLi9HTFRleHR1cmUnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgRnJhbWVidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRnJhbWVidWZmZXIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcblx0dGhpcy5zdGVuY2lsID0gbnVsbDtcblx0dGhpcy50ZXh0dXJlID0gbnVsbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMTAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5lbmFibGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IG5ldyBUZXh0dXJlKGdsKTtcblxuXHR0aGlzLnRleHR1cmUuYmluZCgpO1xuXG5cdC8vZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlLnRleHR1cmUsIDApO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlU3RlbmNpbCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5zdGVuY2lsKXJldHVybjtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuc3RlbmNpbCA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgIFxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCB0aGlzLnN0ZW5jaWwpO1xuICAgIFxuICAgIC8vIFRPRE8uLiB0aGlzIGlzIGRlcHRoIEFORCBzdGVuY2lsP1xuICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTCwgIHRoaXMud2lkdGggICwgdGhpcy5oZWlnaHQgKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oIHIsIGcsIGIsIGEgKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIGdsLmNsZWFyQ29sb3IociwgZywgYiwgYSk7XG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZnJhbWVidWZmZXIgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdGlmICggdGhpcy50ZXh0dXJlIClcbiAgICB7XG4gICAgXHR0aGlzLnRleHR1cmUudXBsb2FkRGF0YShudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdGlmICggdGhpcy5zdGVuY2lsIClcbiAgICB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgc3RlbmNpbCBidWZmZXIgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlUkdCQSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHR2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbURhdGEoZ2wsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xuXHR0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSk7XG5cbiAgICBmYm8udW5iaW5kKCk7XG4gICAgXG4gICAgcmV0dXJuIGZibztcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlRmxvYXQzMiA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHQvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZS4uXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZS5mcm9tRGF0YShnbCwgZGF0YSwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpXG5cbiAgICBmYm8udW5iaW5kKCk7XG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lYnVmZmVyO1xuXG4iLCJcbnZhciBjb21waWxlUHJvZ3JhbSA9IHJlcXVpcmUoJy4vc2hhZGVyL2NvbXBpbGVQcm9ncmFtJyksXG5cdGV4dHJhY3RBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdEF0dHJpYnV0ZXMnKSxcblx0ZXh0cmFjdFVuaWZvcm1zID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdFVuaWZvcm1zJyksXG5cdGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IHJlcXVpcmUoJy4vc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCcpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBTaGFkZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xudmFyIFNoYWRlciA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0Ly8gRmlyc3QgY29tcGlsZSB0aGUgcHJvZ3JhbS4uXG5cdHRoaXMucHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXHQvLyBuZXh0IGV4dHJhY3QgdGhlIGF0dHJpYnV0ZXNcblx0dGhpcy5hdHRyaWJ1dGVzID0gZXh0cmFjdEF0dHJpYnV0ZXMoZ2wsIHRoaXMucHJvZ3JhbSk7IFxuXG4gICAgdmFyIHVuaWZvcm1EYXRhID0gZXh0cmFjdFVuaWZvcm1zKGdsLCB0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy51bmlmb3JtcyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCggZ2wsIHVuaWZvcm1EYXRhICk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgVGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBhIFdlYkdMIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gZm9ybWF0IHtudW1iZXJ9IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlJHQkFcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IHRoZSBnbCB0eXBlIG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5VTlNJR05FRF9CWVRFXG4gKi9cbnZhciBUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHQvLyBzb21lIHNldHRpbmdzLi5cblx0dGhpcy5taXBtYXAgPSBmYWxzZTtcblxuXHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdCB8fCBnbC5SR0JBO1xuXHR0aGlzLnR5cGUgPSB0eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7XG5cblxufVxuXG4vKipcbiAqIEBwYXJhbSB7UElYSS5nbENvcmUuVGV4dHVyZX0gW3Zhcm5hbWVdIFtkZXNjcmlwdGlvbl1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oc291cmNlKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblxuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgc291cmNlKTtcbn1cblxudmFyIEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IGZhbHNlO1xuXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWREYXRhID0gZnVuY3Rpb24oZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5iaW5kKCk7XG5cdFxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgdGhpcy53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG5cblx0aWYoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcblx0e1xuXHRcdGlmKCFGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUpXG5cdFx0e1xuXHRcdFx0dmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO1xuXHRcdFx0XG5cdFx0XHRpZihleHQpXG5cdFx0XHR7XG5cdFx0XHRcdEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHlwZSA9IGdsLkZMT0FUO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdC8vIFRPRE8gc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXNcblx0XHR0aGlzLnR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuXHR9XG5cblx0Ly8gd2hhdCB0eXBlIG9mIGRhdGE/XG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcblx0Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBkYXRhIHx8IG51bGwpO1xuXG59XG5cblRleHR1cmUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihsb2NhdGlvbilcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRpZihsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKVxuXHR7XG5cdFx0Z2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uKTtcblx0fVxuXG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1pbkZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGlmKHRoaXMubWlwbWFwKVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCk7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xuXHR9XHRcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWFnRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVNaXBtYXAgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHRoaXMubWlwbWFwID0gdHJ1ZTtcblx0Z2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZUxpbmVhclNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKHRydWUpO1xuXHR0aGlzLm1hZ0ZpbHRlcih0cnVlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTmVhcmVzdFNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKGZhbHNlKTtcblx0dGhpcy5tYWdGaWx0ZXIoZmFsc2UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwQ2xhbXAgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBSZXBlYXQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cdFxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5SRVBFQVQpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG59XG5cbi8vVGV4dHVyZS5cblRleHR1cmUuZnJvbVNvdXJjZSA9IGZ1bmN0aW9uKGdsLCBzb3VyY2UsIHByZW11bHRpcGx5QWxwaGEpXG57XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhIHx8IGZhbHNlO1xuXHR0ZXh0dXJlLnVwbG9hZChzb3VyY2UpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5UZXh0dXJlLmZyb21EYXRhID0gZnVuY3Rpb24oZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdC8vY29uc29sZS5sb2coZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnVwbG9hZERhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG4iLCJcbi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxuLy8gc3RhdGUgb2JqZWN0Ly9cblxuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChnbClcbntcblx0XG5cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gKFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpXG4gICAgKTtcblxuLy9cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gbnVsbDtcblxuXHRpZih0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbilcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvID0gdGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsgIFxuXHR9XG5cblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG5cdHRoaXMuZGlydHkgPSBmYWxzZTtcblxuXHRcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVydGV4QXJyYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFZlcnRleEFycmF5T2JqZWN0O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5uYXRpdmVWYW8pOyAgXG5cblx0XHRpZih0aGlzLmRpcnR5KVxuXHRcdHtcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0XHR9XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgXG5cdHtcblx0XHR2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW2ldO1xuXHRcdGF0dHJpYi5idWZmZXIuYmluZCgpO1x0XG5cblx0XHRhdHRyaWIuYXR0cmlidXRlLnBvaW50ZXIoYXR0cmliLnR5cGUsIGF0dHJpYi5ub3JtYWxpemVkLCBhdHRyaWIuc3RyaWRlLCBhdHRyaWIuc3RhcnQpOyBcblx0XHRcblx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWIuYXR0cmlidXRlLmxvY2F0aW9uKTtcblx0fTtcblxuXHR0aGlzLmluZGV4QnVmZmVyLmJpbmQoKTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgYXR0cmlidXRlLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXJ0KVxue1xuICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHtcbiAgICBcdGJ1ZmZlcjogXHRidWZmZXIsXG4gICAgXHRhdHRyaWJ1dGU6IFx0YXR0cmlidXRlLFxuXG4gICAgXHRsb2NhdGlvbjogXHRhdHRyaWJ1dGUubG9jYXRpb24sXG5cdCBcdHR5cGU6IFx0XHR0eXBlIHx8IHRoaXMuZ2wuRkxPQVQsXG5cdCBcdG5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWQgfHwgZmFsc2UsXG5cdCBcdHN0cmlkZTogXHRzdHJpZGUgfHwgMCxcblx0IFx0c3RhcnQ6IFx0XHRzdGFydCB8fCAwXG5cdH0pXG5cblx0dGhpcy5kaXJ0eSA9IHRydWU7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRpb25zKVxue1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBidWZmZXI7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHR5cGUsIHNpemUsIHN0YXJ0KVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5kcmF3RWxlbWVudHModHlwZSwgc2l6ZSwgZ2wuVU5TSUdORURfU0hPUlQsIHN0YXJ0KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBDb250ZXh0XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIENPTlRFWFRfVUlEID0gMDtcblxudmFyIGNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbihjYW52YXMsIG9wdGlvbnMpXG57XG4gICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRpb25zKSB8fCBcbiAgICBcdCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdsKVxuICAgIHtcbiAgICAgICAgLy8gZmFpbCwgbm90IGFibGUgdG8gZ2V0IGEgY29udGV4dFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHdlYkdMLiBUcnkgdXNpbmcgdGhlIGNhbnZhcyByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIC8vIG1pZ2h0IHdhbnQgdG8gcGhhc2UgdGhpcyBvdXQ/XG4gICAgZ2wuaWQgPSBDT05URVhUX1VJRCsrO1xuXG4gICAgcmV0dXJuIGdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbnRleHQ7XG5cbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBzZXRWZXJ0ZXhBdHRyaWJBcnJheXMgPSBmdW5jdGlvbiAoZ2wsIGF0dHJpYnMpXG57XHRcbiAgIC8vIGNvbnNvbGUubG9nKGdsLmlkKVxuICAgIHZhciBkYXRhID0gR0xfTUFQW2dsLmlkXTtcblxuICAgIGlmKCFkYXRhKVxuICAgIHtcblx0ICAgdmFyIG1heEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0XHRkYXRhID0gR0xfTUFQW2dsLmlkXSA9IHt0ZW1wQXR0cmliU3RhdGU6bmV3IEFycmF5KG1heEF0dHJpYnMpXG5cdFx0XHRcdCBcdCBcdFx0ICAgLGF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKX07XG5cdH1cblx0XG4gICAgdmFyIGksXG4gICAgXHR0ZW1wQXR0cmliU3RhdGUgPSBkYXRhLnRlbXBBdHRyaWJTdGF0ZSxcbiAgICBcdGF0dHJpYlN0YXRlID0gZGF0YS5hdHRyaWJTdGF0ZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wQXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yIChpIGluIGF0dHJpYnMpXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbYXR0cmlic1tpXS5sb2NhdGlvbl0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDE7IGkgPCBhdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChhdHRyaWJTdGF0ZVtpXSAhPT0gdGVtcEF0dHJpYlN0YXRlW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJTdGF0ZVtpXSA9IHRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM7IiwiXG5cblxuXG5jb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuICAgIHZhciBnbFZlcnRTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbnZhciBjb21waWxlU2hhZGVyID0gZnVuY3Rpb24gKGdsLCB0eXBlLCBzcmMpXG57XG4gICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuXG4gICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlUHJvZ3JhbTtcblxuIiwiXG5cbnZhciBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBzaXplKSBcbntcbiAgICBzd2l0Y2ggKHR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICBjYXNlICd2ZWMyJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjNCc6ICAgICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KDQgKiBzaXplKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnaXZlYzInOiAgIFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDIgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWM0JzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2wnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY2FzZSAnYnZlYzInOlxuXG4gICAgICAgICAgICByZXR1cm4gYm9vbGVhbkFycmF5KCAyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzQnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSg0ICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDFdKTtcblxuICAgICAgICBjYXNlICdtYXQzJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0NCc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMCwgMV0pO1xuICAgIH1cbn1cblxudmFyIGJvb2xlYW5BcnJheSA9IGZ1bmN0aW9uKHNpemUpXG57XG4gICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgXG4gICAge1xuICAgICAgICBhcnJheVtpXSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdFZhbHVlO1xuIiwiXG52YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIG1hcFNpemUgPSByZXF1aXJlKCcuL21hcFNpemUnKTtcblxudmFyIGV4dHJhY3RBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcblxuICAgIHZhciB0b3RhbEF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9BVFRSSUJVVEVTKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEF0dHJpYnV0ZXM7IGkrKykgXG4gICAge1xuICAgICAgICB2YXIgYXR0cmliRGF0YSA9IGdsLmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpKTtcbiAgICAgICAgdmFyIHR5cGUgPSBtYXBUeXBlKGdsLCBhdHRyaWJEYXRhLnR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNbYXR0cmliRGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgIHR5cGU6dHlwZSxcbiAgICAgICAgICAgIHNpemU6bWFwU2l6ZSh0eXBlKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOmdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGF0dHJpYkRhdGEubmFtZSksXG4gICAgICAgICAgICAvL1RPRE8gLSBtYWtlIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAgICAgICAgICAgIHBvaW50ZXI6ZnVuY3Rpb24odHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydCl7XG5cbiAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmxvY2F0aW9uLHRoaXMuc2l6ZSwgdHlwZSB8fCBnbC5GTE9BVCwgbm9ybWFsaXplZCB8fCBmYWxzZSwgc3RyaWRlIHx8IDAsIHN0YXJ0IHx8IDApOyBcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzOyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0cmFjdEF0dHJpYnV0ZXM7XG5cbiIsInZhciBtYXBUeXBlID0gcmVxdWlyZSgnLi9tYXBUeXBlJyk7XG52YXIgZGVmYXVsdFZhbHVlID0gcmVxdWlyZSgnLi9kZWZhdWx0VmFsdWUnKTtcblxuXG52YXIgZXh0cmFjdFVuaWZvcm1zID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG5cdHZhciB1bmlmb3JtcyA9IHt9O1xuXHRcbiAgICB2YXIgdG90YWxVbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbFVuaWZvcm1zOyBpKyspIFxuICAgIHtcbiAgICBcdHZhciB1bmlmb3JtRGF0YSA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSk7XG4gICAgXHR2YXIgbmFtZSA9IHVuaWZvcm1EYXRhLm5hbWUucmVwbGFjZSgvXFxbLio/XFxdLywgXCJcIik7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgdW5pZm9ybURhdGEudHlwZSApO1xuXG4gICAgXHR1bmlmb3Jtc1tuYW1lXSA9IHtcbiAgICBcdFx0dHlwZTp0eXBlLFxuICAgIFx0XHRzaXplOnVuaWZvcm1EYXRhLnNpemUsXG4gICAgXHRcdGxvY2F0aW9uOmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSxcbiAgICBcdFx0dmFsdWU6ZGVmYXVsdFZhbHVlKHR5cGUsIHVuaWZvcm1EYXRhLnNpemUpXG4gICAgXHR9XG4gICAgfTtcblx0XG5cdHJldHVybiB1bmlmb3JtcztcdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RVbmlmb3JtcztcblxuIiwiXG52YXIgZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gZnVuY3Rpb24oZ2wsIHVuaWZvcm1EYXRhKVxue1xuICAgIC8vIHRoaXMgaXMgdGhlIG9iamVjdCB3ZSB3aWxsIGJlIHNlbmRpbmcgYmFjay5cbiAgICAvLyBhbiBvYmplY3QgaGllcmFjaHkgd2lsbCBiZSBjcmVhdGVkIGZvciBzdHJ1Y3RzXG4gICAgdmFyIHVuaWZvcm1zID0ge2RhdGE6e319O1xuXG4gICAgdW5pZm9ybXMuZ2wgPSBnbDtcbiAgICBcbiAgICB2YXIgdW5pZm9ybUtleXM9IE9iamVjdC5rZXlzKHVuaWZvcm1EYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybUtleXMubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGZ1bGxOYW1lID0gdW5pZm9ybUtleXNbaV1cblxuICAgICAgICB2YXIgbmFtZVRva2VucyA9IGZ1bGxOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHZhciB1bmlmb3JtR3JvdXAgPSBnZXRVbmlmb3JtR3JvdXAobmFtZVRva2VucywgdW5pZm9ybXMpO1xuXG4gICAgICAgIHZhciB1bmlmb3JtID0gIHVuaWZvcm1EYXRhW2Z1bGxOYW1lXTtcbiAgICAgICAgdW5pZm9ybUdyb3VwLmRhdGFbbmFtZV0gPSB1bmlmb3JtO1xuXG4gICAgICAgIHVuaWZvcm1Hcm91cC5nbCA9IGdsO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bmlmb3JtR3JvdXAsIG5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2VuZXJhdGVHZXR0ZXIobmFtZSksXG4gICAgICAgICAgICBzZXQ6IGdlbmVyYXRlU2V0dGVyKG5hbWUsIHVuaWZvcm0pXG4gICAgICAgIH0pXG4gICAgfTtcblxuICAgIHJldHVybiB1bmlmb3Jtcztcbn1cblxudmFyIGdlbmVyYXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSlcbntcblx0dmFyIHRlbXBsYXRlID0gZ2V0dGVyVGVtcGxhdGUucmVwbGFjZSgnJSUnLCBuYW1lKTtcblx0cmV0dXJuIG5ldyBGdW5jdGlvbih0ZW1wbGF0ZSk7XG59XG5cbnZhciBnZW5lcmF0ZVNldHRlciA9IGZ1bmN0aW9uKG5hbWUsIHVuaWZvcm0pXG57XG4gICAgdmFyIHRlbXBsYXRlID0gc2V0dGVyVGVtcGxhdGUucmVwbGFjZSgvJSUvZywgbmFtZSk7XG4gICAgdmFyIHNldFRlbXBsYXRlXG4gICAgXG4gICAgaWYodW5pZm9ybS5zaXplID09PSAxKVxuICAgIHtcbiAgICAgICAgc2V0VGVtcGxhdGUgPSBHTFNMX1RPX1NJTkdMRV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19BUlJBWV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuXG4gICAgaWYoc2V0VGVtcGxhdGUpXG4gICAge1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIlxcbnRoaXMuZ2wuXCIgKyBzZXRUZW1wbGF0ZSArIFwiO1wiO1xuICAgIH1cblxuICBcdHJldHVybiBuZXcgRnVuY3Rpb24oJ3ZhbHVlJywgdGVtcGxhdGUpO1xufVxuXG52YXIgZ2V0VW5pZm9ybUdyb3VwID0gZnVuY3Rpb24obmFtZVRva2VucywgdW5pZm9ybSlcbntcbiAgICB2YXIgY3VyID0gdW5pZm9ybTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZVRva2Vucy5sZW5ndGggLSAxOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIG8gPSBjdXJbbmFtZVRva2Vuc1tpXV0gfHwge2RhdGE6e319O1xuICAgICAgICBjdXJbbmFtZVRva2Vuc1tpXV0gPSBvO1xuICAgICAgICBjdXIgPSBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gY3VyXG59XG5cbnZhciBnZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAncmV0dXJuIHRoaXMuZGF0YS4lJS52YWx1ZTsnLFxuXS5qb2luKCdcXG4nKTtcblxudmFyIHNldHRlclRlbXBsYXRlID0gW1xuICAgICd0aGlzLmRhdGEuJSUudmFsdWUgPSB2YWx1ZTsnLFxuICAgICd2YXIgbG9jYXRpb24gPSB0aGlzLmRhdGEuJSUubG9jYXRpb247J1xuXS5qb2luKCdcXG4nKTtcblxuXG52YXIgR0xTTF9UT19TSU5HTEVfU0VUVEVSUyA9IHtcblxuICAgICdmbG9hdCc6ICAgICd1bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ3ZlYzQnOiAgICAgJ3VuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdidmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdidmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ21hdDInOiAgICAgJ3VuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuICAgICdtYXQzJzogICAgICd1bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0NCc6ICAgICAndW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG5cbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbnZhciBHTFNMX1RPX0FSUkFZX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpJyxcblxuICAgICd2ZWMyJzogICAgICd1bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWMzJzogICAgICd1bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgIFx0XG4gICAgJ2ludCc6ICAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgIFxuICAgICdzYW1wbGVyMkQnOid1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0O1xuXG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbih0eXBlKSBcbnsgXG4gICAgcmV0dXJuIEdMU0xfVE9fU0laRVt0eXBlXTtcbn1cblxuXG52YXIgR0xTTF9UT19TSVpFID0ge1xuICAgICdmbG9hdCc6ICAgIDEsXG4gICAgJ3ZlYzInOiAgICAgMixcbiAgICAndmVjMyc6ICAgICAzLFxuICAgICd2ZWM0JzogICAgIDQsXG5cbiAgICAnaW50JzogICAgICAxLFxuICAgICdpdmVjMic6ICAgIDIsXG4gICAgJ2l2ZWMzJzogICAgMyxcbiAgICAnaXZlYzQnOiAgICA0LFxuXG4gICAgJ2Jvb2wnOiAgICAgMSxcbiAgICAnYnZlYzInOiAgICAyLFxuICAgICdidmVjMyc6ICAgIDMsXG4gICAgJ2J2ZWM0JzogICAgNCxcblxuICAgICdtYXQyJzogICAgIDQsXG4gICAgJ21hdDMnOiAgICAgOSxcbiAgICAnbWF0NCc6ICAgICAxNixcblxuICAgICdzYW1wbGVyMkQnOiAgMVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFNpemU7XG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbihnbCwgdHlwZSkgXG57XG4gICAgaWYoIUdMX1RBQkxFKSBcbiAgICB7XG4gICAgICAgIHZhciB0eXBlTmFtZXMgPSBPYmplY3Qua2V5cyhHTF9UT19HTFNMX1RZUEVTKTtcblxuICAgICAgICBHTF9UQUJMRSA9IHt9O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlTmFtZXMubGVuZ3RoOyArK2kpIFxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdG4gPSB0eXBlTmFtZXNbaV07XG4gICAgICAgICAgICBHTF9UQUJMRVsgZ2xbdG5dIF0gPSBHTF9UT19HTFNMX1RZUEVTW3RuXTtcbiAgICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gR0xfVEFCTEVbdHlwZV07XG59XG5cbnZhciBHTF9UQUJMRSA9IG51bGw7XG5cbnZhciBHTF9UT19HTFNMX1RZUEVTID0ge1xuICAnRkxPQVQnOiAgICAgICAnZmxvYXQnLFxuICAnRkxPQVRfVkVDMic6ICAndmVjMicsXG4gICdGTE9BVF9WRUMzJzogICd2ZWMzJyxcbiAgJ0ZMT0FUX1ZFQzQnOiAgJ3ZlYzQnLFxuXG4gICdJTlQnOiAgICAgICAgICdpbnQnLFxuICAnSU5UX1ZFQzInOiAgICAnaXZlYzInLFxuICAnSU5UX1ZFQzMnOiAgICAnaXZlYzMnLFxuICAnSU5UX1ZFQzQnOiAgICAnaXZlYzQnLFxuICBcbiAgJ0JPT0wnOiAgICAgICAgJ2Jvb2wnLFxuICAnQk9PTF9WRUMyJzogICAnYnZlYzInLFxuICAnQk9PTF9WRUMzJzogICAnYnZlYzMnLFxuICAnQk9PTF9WRUM0JzogICAnYnZlYzQnLFxuICBcbiAgJ0ZMT0FUX01BVDInOiAgJ21hdDInLFxuICAnRkxPQVRfTUFUMyc6ICAnbWF0MycsXG4gICdGTE9BVF9NQVQ0JzogICdtYXQ0JyxcbiAgXG4gICdTQU1QTEVSXzJEJzogICdzYW1wbGVyMkQnICBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiLyohXG4gKiBhc3luY1xuICogaHR0cHM6Ly9naXRodWIuY29tL2Nhb2xhbi9hc3luY1xuICpcbiAqIENvcHlyaWdodCAyMDEwLTIwMTQgQ2FvbGFuIE1jTWFob25cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9Cb29sKHYpIHtcbiAgICAgICAgcmV0dXJuICEhdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90SWQodikge1xuICAgICAgICByZXR1cm4gIXY7XG4gICAgfVxuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBwcmV2aW91c19hc3luYztcblxuICAgIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAgIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICAgIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsIHx8XG4gICAgICAgICAgICB0aGlzO1xuXG4gICAgaWYgKHJvb3QgIT0gbnVsbCkge1xuICAgICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsaXR5IGZ1bmN0aW9ucyAvLy8vXG5cbiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIHZhciBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xuXG4gICAgLy8gUG9ydGVkIGZyb20gdW5kZXJzY29yZS5qcyBpc09iamVjdFxuICAgIHZhciBfaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2lzQXJyYXlMaWtlKGFycikge1xuICAgICAgICByZXR1cm4gX2lzQXJyYXkoYXJyKSB8fCAoXG4gICAgICAgICAgICAvLyBoYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAgICAgICAgdHlwZW9mIGFyci5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgICAgYXJyLmxlbmd0aCAlIDEgPT09IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXJyYXlFYWNoKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaW5kZXhdLCBpbmRleCwgYXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IGFyci5sZW5ndGgsXG4gICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcmFuZ2UoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9tYXAoQXJyYXkoY291bnQpLCBmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gaTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZHVjZShhcnIsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgIF9hcnJheUVhY2goYXJyLCBmdW5jdGlvbiAoeCwgaSwgYSkge1xuICAgICAgICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHgsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZvckVhY2hPZihvYmplY3QsIGl0ZXJhdG9yKSB7XG4gICAgICAgIF9hcnJheUVhY2goX2tleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaXRlcmF0b3Iob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbmRleE9mKGFyciwgaXRlbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9rZXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW47XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBpZiAoX2lzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGkgOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBfa2V5cyhjb2xsKTtcbiAgICAgICAgICAgIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ga2V5c1tpXSA6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2ltaWxhciB0byBFUzYncyByZXN0IHBhcmFtIChodHRwOi8vYXJpeWEub2ZpbGFicy5jb20vMjAxMy8wMy9lczYtYW5kLXJlc3QtcGFyYW1ldGVyLmh0bWwpXG4gICAgLy8gVGhpcyBhY2N1bXVsYXRlcyB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGFuIGFycmF5LCBhZnRlciBhIGdpdmVuIGluZGV4LlxuICAgIC8vIEZyb20gdW5kZXJzY29yZS5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMjE0MCkuXG4gICAgZnVuY3Rpb24gX3Jlc3RQYXJhbShmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IHVudXNlZCBidXQgaGFuZGxlIGNhc2VzIG91dHNpZGUgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQ6XG4gICAgICAgICAgICAvLyB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgIC8vIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIC8vICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgICAgICAgIC8vIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IodmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG5cbiAgICAvLyBjYXB0dXJlIHRoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIGd1YXJkIGFnYWluc3QgZmFrZVRpbWVyIG1vY2tzXG4gICAgdmFyIF9zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcblxuICAgIHZhciBfZGVsYXkgPSBfc2V0SW1tZWRpYXRlID8gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgX3NldEltbWVkaWF0ZShmbik7XG4gICAgfSA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IF9kZWxheTtcbiAgICB9XG4gICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gX3NldEltbWVkaWF0ZSA/IF9kZWxheSA6IGFzeW5jLm5leHRUaWNrO1xuXG5cbiAgICBhc3luYy5mb3JFYWNoID1cbiAgICBhc3luYy5lYWNoID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2YoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID1cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cblxuICAgIGFzeW5jLmZvckVhY2hMaW1pdCA9XG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2VhY2hPZkxpbWl0KGxpbWl0KShhcnIsIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZiA9XG4gICAgYXN5bmMuZWFjaE9mID0gZnVuY3Rpb24gKG9iamVjdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdCB8fCBbXTtcblxuICAgICAgICB2YXIgaXRlciA9IF9rZXlJdGVyYXRvcihvYmplY3QpO1xuICAgICAgICB2YXIga2V5LCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgICAgIHdoaWxlICgoa2V5ID0gaXRlcigpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXksIG9ubHlfb25jZShkb25lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkID09PSAwKSBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgICAgY29tcGxldGVkLS07XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGtleSBpcyBudWxsIGluIGNhc2UgaXRlcmF0b3IgaXNuJ3QgZXhoYXVzdGVkXG4gICAgICAgICAgICAvLyBhbmQgZG9uZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBudWxsICYmIGNvbXBsZXRlZCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaE9mU2VyaWVzID1cbiAgICBhc3luYy5lYWNoT2ZTZXJpZXMgPSBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShpdGVyYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLmZvckVhY2hPZkxpbWl0ID1cbiAgICBhc3luYy5lYWNoT2ZMaW1pdCA9IGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgX2VhY2hPZkxpbWl0KGxpbWl0KShvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9lYWNoT2ZMaW1pdChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgICAgICBvYmogPSBvYmogfHwgW107XG4gICAgICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUgJiYgcnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmICFlcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBuZXh0S2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iob2JqW2tleV0sIGtleSwgb25seV9vbmNlKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZG9QYXJhbGxlbChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oYXN5bmMuZWFjaE9mLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWxMaW1pdChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKF9lYWNoT2ZMaW1pdChsaW1pdCksIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9TZXJpZXMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZlNlcmllcywgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UoYXJyKSA/IFtdIDoge307XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih2YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9hc3luY01hcCk7XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMuaW5qZWN0ID1cbiAgICBhc3luYy5mb2xkbCA9XG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hPZlNlcmllcyhhcnIsIGZ1bmN0aW9uICh4LCBpLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgeCwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBtZW1vKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvbGRyID1cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgaWRlbnRpdHkpLnJldmVyc2UoKTtcbiAgICAgICAgYXN5bmMucmVkdWNlKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0b3I7XG4gICAgICAgICAgICBpdGVyYXRvciA9IG1lbW87XG4gICAgICAgICAgICBtZW1vID0gX2lzQXJyYXkoYXJyKSA/IFtdIDoge307XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoT2YoYXJyLCBmdW5jdGlvbih2LCBrLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgdiwgaywgY2IpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4OiBpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5zZWxlY3QgPVxuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RMaW1pdCA9XG4gICAgYXN5bmMuZmlsdGVyTGltaXQgPSBkb1BhcmFsbGVsTGltaXQoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RTZXJpZXMgPVxuICAgIGFzeW5jLmZpbHRlclNlcmllcyA9IGRvU2VyaWVzKF9maWx0ZXIpO1xuXG4gICAgZnVuY3Rpb24gX3JlamVjdChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9maWx0ZXIoZWFjaGZuLCBhcnIsIGZ1bmN0aW9uKHZhbHVlLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBjYighdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBhc3luYy5yZWplY3QgPSBkb1BhcmFsbGVsKF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdFNlcmllcyA9IGRvU2VyaWVzKF9yZWplY3QpO1xuXG4gICAgZnVuY3Rpb24gX2NyZWF0ZVRlc3RlcihlYWNoZm4sIGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYikge1xuICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIGNiKGdldFJlc3VsdChmYWxzZSwgdm9pZCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZSh4LCBfLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYiAmJiBjaGVjayh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoZ2V0UmVzdWx0KHRydWUsIHgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgZWFjaGZuKGFyciwgbGltaXQsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2IgPSBpdGVyYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGxpbWl0O1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy5hbnkgPVxuICAgIGFzeW5jLnNvbWUgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5zb21lTGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCB0b0Jvb2wsIGlkZW50aXR5KTtcblxuICAgIGFzeW5jLmFsbCA9XG4gICAgYXN5bmMuZXZlcnkgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgbm90SWQsIG5vdElkKTtcblxuICAgIGFzeW5jLmV2ZXJ5TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBub3RJZCwgbm90SWQpO1xuXG4gICAgZnVuY3Rpb24gX2ZpbmRHZXRSZXN1bHQodiwgeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgYXN5bmMuZGV0ZWN0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0U2VyaWVzID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZTZXJpZXMsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuXG4gICAgYXN5bmMuc29ydEJ5ID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLm1hcChhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKGVyciwgY3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7dmFsdWU6IHgsIGNyaXRlcmlhOiBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChjb21wYXJhdG9yKSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNvbmN1cnJlbmN5LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gcmVtYWluaW5nVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBfaW5kZXhPZihsaXN0ZW5lcnMsIGZuKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRhc2tDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLS07XG4gICAgICAgICAgICBfYXJyYXlFYWNoKGxpc3RlbmVycy5zbGljZSgwKSwgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBfYXJyYXlFYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9mb3JFYWNoT2YocmVzdWx0cywgZnVuY3Rpb24odmFsLCBya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHRhc2tDb21wbGV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRlYWQtbG9ja3NcbiAgICAgICAgICAgIHZhciBsZW4gPSByZXF1aXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZGVwO1xuICAgICAgICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZGVwID0gdGFza3NbcmVxdWlyZXNbbGVuXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGluZXhpc3RhbnQgZGVwZW5kZW5jeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzQXJyYXkoZGVwKSAmJiBfaW5kZXhPZihkZXAsIGspID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXMgY3ljbGljIGRlcGVuZGVuY2llcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5uaW5nVGFza3MgPCBjb25jdXJyZW5jeSAmJiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzKys7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLnJldHJ5ID0gZnVuY3Rpb24odGltZXMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBERUZBVUxUX1RJTUVTID0gNTtcbiAgICAgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuXG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbDogREVGQVVMVF9JTlRFUlZBTFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KXtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0ID09PSAnbnVtYmVyJyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodCwgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYodHlwZW9mIHQgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBhY2MudGltZXMgPSBwYXJzZUludCh0LnRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgICAgICAgICBhY2MuaW50ZXJ2YWwgPSBwYXJzZUludCh0LmludGVydmFsLCAxMCkgfHwgREVGQVVMVF9JTlRFUlZBTDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGZvciBcXCd0aW1lc1xcJzogJyArIHR5cGVvZiB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgMSB8fCBsZW5ndGggPiAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIC0gbXVzdCBiZSBlaXRoZXIgKHRhc2spLCAodGFzaywgY2FsbGJhY2spLCAodGltZXMsIHRhc2spIG9yICh0aW1lcywgdGFzaywgY2FsbGJhY2spJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoIDw9IDIgJiYgdHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRzLCB0aW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBvcHRzLnRhc2sgPSB0YXNrO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRUYXNrKHdyYXBwZWRDYWxsYmFjaywgd3JhcHBlZFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCh0YXNrLCBmaW5hbEF0dGVtcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VyaWVzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayhmdW5jdGlvbihlcnIsIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXNDYWxsYmFjayghZXJyIHx8IGZpbmFsQXR0ZW1wdCwge2VycjogZXJyLCByZXN1bHQ6IHJlc3VsdH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVkUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmV0cnlJbnRlcnZhbChpbnRlcnZhbCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAob3B0cy50aW1lcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsQXR0ZW1wdCA9ICEob3B0cy50aW1lcy09MSk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQob3B0cy50YXNrLCBmaW5hbEF0dGVtcHQpKTtcbiAgICAgICAgICAgICAgICBpZighZmluYWxBdHRlbXB0ICYmIG9wdHMuaW50ZXJ2YWwgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUludGVydmFsKG9wdHMuaW50ZXJ2YWwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IG9wdHMuY2FsbGJhY2spKGRhdGEuZXJyLCBkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIG9wdHMuY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2s7XG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBJdGVyYXRvcihpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgW2Vycl0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuc3VyZUFzeW5jKGl0ZXJhdG9yKS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfcGFyYWxsZWwoZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IF9pc0FycmF5TGlrZSh0YXNrcykgPyBbXSA6IHt9O1xuXG4gICAgICAgIGVhY2hmbih0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGtleSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRhc2soX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2YsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChfZWFjaE9mTGltaXQobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKGFzeW5jLmVhY2hPZlNlcmllcywgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuaXRlcmF0b3IgPSBmdW5jdGlvbiAodGFza3MpIHtcbiAgICAgICAgZnVuY3Rpb24gbWFrZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm4ubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgdGFza3MubGVuZ3RoIC0gMSkgPyBtYWtlQ2FsbGJhY2soaW5kZXggKyAxKTogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIChmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoY2FsbEFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLCBhcmdzLmNvbmNhdChjYWxsQXJncylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gX2NvbmNhdChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoeSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG4gICAgICAgIGlmICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0LmFwcGx5KHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1doaWxzdCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiArK2NhbGxzIDw9IDEgfHwgdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZHVyaW5nID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG5cbiAgICAgICAgdmFyIG5leHQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjaGVjayk7XG4gICAgICAgICAgICAgICAgdGVzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24oZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRydXRoKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QoY2hlY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb0R1cmluZyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgYXN5bmMuZHVyaW5nKGZ1bmN0aW9uKG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjYWxscysrIDwgMSkge1xuICAgICAgICAgICAgICAgIG5leHQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3F1ZXVlKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHBvcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayB8fCBub29wXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9uZXh0KHEsIHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIF9hcnJheUVhY2godGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2god29ya2Vyc0xpc3QsIGZ1bmN0aW9uICh3b3JrZXIsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya2VyID09PSB0YXNrICYmICFyZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBub29wLFxuICAgICAgICAgICAgZW1wdHk6IG5vb3AsXG4gICAgICAgICAgICBkcmFpbjogbm9vcCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5kcmFpbiA9IG5vb3A7XG4gICAgICAgICAgICAgICAgcS50YXNrcyA9IFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnQ6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrcyA9IHEucGF5bG9hZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS5wYXlsb2FkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS50YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9tYXAodGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5wdXNoKHRhc2tzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShfbmV4dChxLCB0YXNrcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyKGRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtlcnNMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSBmYWxzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bWVDb3VudCA9IE1hdGgubWluKHEuY29uY3VycmVuY3ksIHEudGFza3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHJlc3VtZUNvdW50OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBxID0gX3F1ZXVlKGZ1bmN0aW9uIChpdGVtcywgY2IpIHtcbiAgICAgICAgICAgIHdvcmtlcihpdGVtc1swXSwgY2IpO1xuICAgICAgICB9LCBjb25jdXJyZW5jeSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLnByaW9yaXR5UXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuXG4gICAgICAgIGZ1bmN0aW9uIF9jb21wYXJlVGFza3MoYSwgYil7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgICB2YXIgYmVnID0gLTEsXG4gICAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgc2VxdWVuY2VbbWlkXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWcgPSBtaWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmVnO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBfcXVldWUod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2NvbnNvbGVfZm4obmFtZSkge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2goYXJncywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlW25hbWVdKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgaWRlbnRpdHk7XG4gICAgICAgIHZhciBtZW1vaXplZCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24gbWVtb2l6ZWQoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBtZW1vW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0gPSBbY2FsbGJhY2tdO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW9ba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH07XG5cbiAgICBhc3luYy51bm1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3RpbWVzKG1hcHBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG1hcHBlcihfcmFuZ2UoY291bnQpLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jLnRpbWVzID0gX3RpbWVzKGFzeW5jLm1hcCk7XG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBfdGltZXMoYXN5bmMubWFwU2VyaWVzKTtcbiAgICBhc3luYy50aW1lc0xpbWl0ID0gZnVuY3Rpb24gKGNvdW50LCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5tYXBMaW1pdChfcmFuZ2UoY291bnQpLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VxID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5vb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnJlZHVjZShmbnMsIGFyZ3MsIGZ1bmN0aW9uIChuZXdhcmdzLCBmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBuZXdhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBuZXh0YXJncykge1xuICAgICAgICAgICAgICAgICAgICBjYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY29tcG9zZSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIF9hcHBseUVhY2goZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uKGZucywgYXJncykge1xuICAgICAgICAgICAgdmFyIGdvID0gX3Jlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgXywgY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncy5jb25jYXQoW2NiXSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ28uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ287XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmFwcGx5RWFjaCA9IF9hcHBseUVhY2goYXN5bmMuZWFjaE9mKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZlNlcmllcyk7XG5cblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seV9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIgdGFzayA9IGVuc3VyZUFzeW5jKGZuKTtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmVuc3VyZUFzeW5jID0gZW5zdXJlQXN5bmM7XG5cbiAgICBhc3luYy5jb25zdGFudCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICAgIHZhciBhcmdzID0gW251bGxdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhc3luYy53cmFwU3luYyA9XG4gICAgYXN5bmMuYXN5bmNpZnkgPSBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChfaXNPYmplY3QocmVzdWx0KSAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIubWVzc2FnZSA/IGVyciA6IG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcblxuICAgIGRpbSA9IGRpbSB8fCAyO1xuXG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLFxuICAgICAgICBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcbiAgICAgICAgdHJpYW5nbGVzID0gW107XG5cbiAgICBpZiAoIW91dGVyTm9kZSkgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBzaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgc2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIHN1bSA9IDAsXG4gICAgICAgIGksIGosIGxhc3Q7XG5cbiAgICAvLyBjYWxjdWxhdGUgb3JpZ2luYWwgd2luZGluZyBvcmRlciBvZiBhIHBvbHlnb24gcmluZ1xuICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuXG4gICAgLy8gbGluayBwb2ludHMgaW50byBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHN1bSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG4gICAgaWYgKCFzdGFydCkgcmV0dXJuIHN0YXJ0O1xuICAgIGlmICghZW5kKSBlbmQgPSBzdGFydDtcblxuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcCA9IGVuZCA9IHAucHJldjtcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuICAgIHJldHVybiBlbmQ7XG59XG5cbi8vIG1haW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBhcyBhIGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIHBhc3MpIHtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuICAgIGlmICghcGFzcyAmJiBzaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICB2YXIgc3RvcCA9IGVhcixcbiAgICAgICAgcHJldiwgbmV4dDtcblxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuICAgIHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcbiAgICAgICAgcHJldiA9IGVhci5wcmV2O1xuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XG5cbiAgICAgICAgaWYgKHNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIHNpemUpIDogaXNFYXIoZWFyKSkge1xuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXG4gICAgICAgICAgICByZW1vdmVOb2RlKGVhcik7XG5cbiAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRpY2UgbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhlYXIsIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIHNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICAvLyBmaXJzdCBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBpbmNyZWFzaW5nIHotb3JkZXJcbiAgICB2YXIgcCA9IGVhci5uZXh0WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyB0aGVuIGxvb2sgZm9yIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICBwID0gZWFyLnByZXZaO1xuXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgLy8gYSBzZWxmLWludGVyc2VjdGlvbiB3aGVyZSBlZGdlICh2W2ktMV0sdltpXSkgaW50ZXJzZWN0cyAodltpKzFdLHZbaSsyXSlcbiAgICAgICAgaWYgKGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHA7XG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBsb29rIGZvciBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgICAgICAgICBhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiA9IGIubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBhID0gYS5uZXh0O1xuICAgIH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG4gICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuICAgICAgICBpZiAobGlzdCA9PT0gbGlzdC5uZXh0KSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuICAgICAgICBxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcbiAgICB9XG5cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0ZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlWChhLCBiKSB7XG4gICAgcmV0dXJuIGEueCAtIGIueDtcbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkge1xuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xuICAgICAgICBmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcbiAgICB9XG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBwID0gb3V0ZXJOb2RlLFxuICAgICAgICBoeCA9IGhvbGUueCxcbiAgICAgICAgaHkgPSBob2xlLnksXG4gICAgICAgIHF4ID0gLUluZmluaXR5LFxuICAgICAgICBtO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgdGFuO1xuXG4gICAgcCA9IG0ubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBzdG9wKSB7XG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG0ueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG0ueSA/IGh4IDogcXgsIGh5LCBtLngsIG0ueSwgaHkgPCBtLnkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuICAgICAgICAgICAgaWYgKCh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIHAueCA+IG0ueCkpICYmIGxvY2FsbHlJbnNpZGUocCwgaG9sZSkpIHtcbiAgICAgICAgICAgICAgICBtID0gcDtcbiAgICAgICAgICAgICAgICB0YW5NaW4gPSB0YW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBtO1xufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgIHAucHJldlogPSBwLnByZXY7XG4gICAgICAgIHAubmV4dFogPSBwLm5leHQ7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgcC5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKHApO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIGRvIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHFTaXplID09PSAwIHx8ICFxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAueiA8PSBxLnopIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuICAgICAgICBpblNpemUgKj0gMjtcblxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIHNpemUgb2YgdGhlIGRhdGEgYm91bmRpbmcgYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpIC8gc2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpIC8gc2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LngpIGxlZnRtb3N0ID0gcDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gbGVmdG1vc3Q7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcbiAgICByZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXF1YWxzKGEsIGIpIHx8IGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcbiAgICAgICAgICAgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKTtcbn1cblxuLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xufVxuXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXG4gICAgICAgICAgIGFyZWEocDIsIHEyLCBwMSkgPiAwICE9PSBhcmVhKHAyLCBxMiwgcTEpID4gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG4vLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG4gICAgICAgIGFuID0gYS5uZXh0LFxuICAgICAgICBicCA9IGIucHJldjtcblxuICAgIGEubmV4dCA9IGI7XG4gICAgYi5wcmV2ID0gYTtcblxuICAgIGEyLm5leHQgPSBhbjtcbiAgICBhbi5wcmV2ID0gYTI7XG5cbiAgICBiMi5uZXh0ID0gYTI7XG4gICAgYTIucHJldiA9IGIyO1xuXG4gICAgYnAubmV4dCA9IGIyO1xuICAgIGIyLnByZXYgPSBicDtcblxuICAgIHJldHVybiBiMjtcbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgcC5wcmV2ID0gcDtcbiAgICAgICAgcC5uZXh0ID0gcDtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHAubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgcC5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xuICAgICAgICBsYXN0Lm5leHQgPSBwO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XG4gICAgcC5uZXh0LnByZXYgPSBwLnByZXY7XG4gICAgcC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cbiAgICBpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG4gICAgaWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcbiAgICAvLyB2ZXJ0aWNlIGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRpY2Ugbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vXG4vLyBXZSBzdG9yZSBvdXIgRUUgb2JqZWN0cyBpbiBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBgfmAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Qgb3ZlcnJpZGRlbiBvclxuLy8gdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy8gV2UgYWxzbyBhc3N1bWUgdGhhdCBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV2ZW50IG5hbWVcbi8vIGlzIGFuIEVTNiBTeW1ib2wuXG4vL1xudmFyIHByZWZpeCA9IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nID8gJ34nIDogZmFsc2U7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgRXZlbnRFbWl0dGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBDb250ZXh0IGZvciBmdW5jdGlvbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSBlbWl0IG9uY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTWluaW1hbCBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIEV2ZW50RW1pdHRlciBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7IC8qIE5vdGhpbmcgdG8gc2V0ICovIH1cblxuLyoqXG4gKiBIb2xkcyB0aGUgYXNzaWduZWQgRXZlbnRFbWl0dGVycyBieSBuYW1lLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBhc3NpZ25lZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBleGlzdHMgV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtBcnJheXxCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQsIGV4aXN0cykge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgYXZhaWxhYmxlID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChleGlzdHMpIHJldHVybiAhIWF2YWlsYWJsZTtcbiAgaWYgKCFhdmFpbGFibGUpIHJldHVybiBbXTtcbiAgaWYgKGF2YWlsYWJsZS5mbikgcmV0dXJuIFthdmFpbGFibGUuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXZhaWxhYmxlLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGF2YWlsYWJsZVtpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB0byBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJbmRpY2F0aW9uIGlmIHdlJ3ZlIGVtaXR0ZWQgYW4gZXZlbnQuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IEV2ZW50TGlzdGVuZXIgZm9yIHRoZSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0b259IGZuIENhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGQgYW4gRXZlbnRMaXN0ZW5lciB0aGF0J3Mgb25seSBjYWxsZWQgb25jZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IHRoaXMsIHRydWUpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKSB0aGlzLl9ldmVudHMgPSBwcmVmaXggPyB7fSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHRoaXMuX2V2ZW50c1tldnRdID0gbGlzdGVuZXI7XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5fZXZlbnRzW2V2dF0uZm4pIHRoaXMuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIGVsc2UgdGhpcy5fZXZlbnRzW2V2dF0gPSBbXG4gICAgICB0aGlzLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3ZSB3YW50IHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciB0aGF0IHdlIG5lZWQgdG8gZmluZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgT25seSByZW1vdmUgbGlzdGVuZXJzIG1hdGNoaW5nIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmNlIGxpc3RlbmVycy5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGV2ZW50cyA9IFtdO1xuXG4gIGlmIChmbikge1xuICAgIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgICAgbGlzdGVuZXJzLmZuICE9PSBmblxuICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzLm9uY2UpXG4gICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVycy5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm5cbiAgICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpXG4gICAgICAgICAgfHwgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gIC8vXG4gIGlmIChldmVudHMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbZXZ0XTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycyBvciBvbmx5IHRoZSBsaXN0ZW5lcnMgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvci5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcztcblxuICBpZiAoZXZlbnQpIGRlbGV0ZSB0aGlzLl9ldmVudHNbcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudF07XG4gIGVsc2UgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYXBwbHkgYW55bW9yZS5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLypqc2hpbnQgb25ldmFyOiBmYWxzZSwgaW5kZW50OjQgKi9cbi8qZ2xvYmFsIHNldEltbWVkaWF0ZTogZmFsc2UsIHNldFRpbWVvdXQ6IGZhbHNlLCBjb25zb2xlOiBmYWxzZSAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciByb290LCBwcmV2aW91c19hc3luYztcblxuICAgIHJvb3QgPSB0aGlzO1xuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgIHByZXZpb3VzX2FzeW5jID0gcm9vdC5hc3luYztcbiAgICB9XG5cbiAgICBhc3luYy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmFzeW5jID0gcHJldmlvdXNfYXN5bmM7XG4gICAgICAgIHJldHVybiBhc3luYztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb25seV9vbmNlKGZuKSB7XG4gICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGNhbGxlZCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseShyb290LCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIHZhciBfZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaV0sIGksIGFycik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIF9tYXAgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBpZiAoYXJyLm1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5tYXAoaXRlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih4LCBpLCBhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgdmFyIF9yZWR1Y2UgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBpZiAoYXJyLnJlZHVjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8pO1xuICAgICAgICB9XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICB2YXIgX2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIC8vLy8gZXhwb3J0ZWQgYXN5bmMgbW9kdWxlIGZ1bmN0aW9ucyAvLy8vXG5cbiAgICAvLy8vIG5leHRUaWNrIGltcGxlbWVudGF0aW9uIHdpdGggYnJvd3Nlci1jb21wYXRpYmxlIGZhbGxiYWNrIC8vLy9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICEocHJvY2Vzcy5uZXh0VGljaykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgICBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAvLyBub3QgYSBkaXJlY3QgYWxpYXMgZm9yIElFMTAgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBvbmx5X29uY2UoZG9uZSkgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaCA9IGFzeW5jLmVhY2g7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmICghYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgIHZhciBpdGVyYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA+PSBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2hTZXJpZXMgPSBhc3luYy5lYWNoU2VyaWVzO1xuXG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZm4gPSBfZWFjaExpbWl0KGxpbWl0KTtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgW2FyciwgaXRlcmF0b3IsIGNhbGxiYWNrXSk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPSBhc3luYy5lYWNoTGltaXQ7XG5cbiAgICB2YXIgX2VhY2hMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBpZiAoIWFyci5sZW5ndGggfHwgbGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmIHN0YXJ0ZWQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihhcnJbc3RhcnRlZCAtIDFdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBkb1BhcmFsbGVsID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZG9QYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24obGltaXQsIGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW19lYWNoTGltaXQobGltaXQpXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvU2VyaWVzID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hTZXJpZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuXG4gICAgdmFyIF9hc3luY01hcCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW3guaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX21hcExpbWl0KGxpbWl0KShhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHZhciBfbWFwTGltaXQgPSBmdW5jdGlvbihsaW1pdCkge1xuICAgICAgICByZXR1cm4gZG9QYXJhbGxlbExpbWl0KGxpbWl0LCBfYXN5bmNNYXApO1xuICAgIH07XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gaW5qZWN0IGFsaWFzXG4gICAgYXN5bmMuaW5qZWN0ID0gYXN5bmMucmVkdWNlO1xuICAgIC8vIGZvbGRsIGFsaWFzXG4gICAgYXN5bmMuZm9sZGwgPSBhc3luYy5yZWR1Y2U7XG5cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIC8vIGZvbGRyIGFsaWFzXG4gICAgYXN5bmMuZm9sZHIgPSBhc3luYy5yZWR1Y2VSaWdodDtcblxuICAgIHZhciBfZmlsdGVyID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZmlsdGVyID0gZG9QYXJhbGxlbChfZmlsdGVyKTtcbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcbiAgICAvLyBzZWxlY3QgYWxpYXNcbiAgICBhc3luYy5zZWxlY3QgPSBhc3luYy5maWx0ZXI7XG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID0gYXN5bmMuZmlsdGVyU2VyaWVzO1xuXG4gICAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIHZhciBfZGV0ZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5kZXRlY3QgPSBkb1BhcmFsbGVsKF9kZXRlY3QpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IGRvU2VyaWVzKF9kZXRlY3QpO1xuXG4gICAgYXN5bmMuc29tZSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGFueSBhbGlhc1xuICAgIGFzeW5jLmFueSA9IGFzeW5jLnNvbWU7XG5cbiAgICBhc3luYy5ldmVyeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbGwgYWxpYXNcbiAgICBhc3luYy5hbGwgPSBhc3luYy5ldmVyeTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChmbiksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aFxuICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB2YXIgYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGZuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0YXNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tXG4gICAgICAgICAgICBfZWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudCBmaW5hbCBjYWxsYmFjayBmcm9tIGNhbGxpbmcgaXRzZWxmIGlmIGl0IGVycm9yc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICB0aGVDYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2VhY2goa2V5cywgZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gX2lzQXJyYXkodGFza3Nba10pID8gdGFza3Nba106IFt0YXNrc1trXV07XG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2FmZVJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgX2VhY2goX2tleXMocmVzdWx0cyksIGZ1bmN0aW9uKHJrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW3JrZXldID0gcmVzdWx0c1tya2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3Agc3Vic2VxdWVudCBlcnJvcnMgaGl0dGluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIE1hdGguYWJzKHRhc2subGVuZ3RoIC0gMSkpIHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuICAgICAgICAvLyBVc2UgZGVmYXVsdHMgaWYgdGltZXMgbm90IHBhc3NlZFxuICAgICAgICBpZiAodHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgICAgICB0aW1lcyA9IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRpbWVzIGlzIGEgbnVtYmVyXG4gICAgICAgIHRpbWVzID0gcGFyc2VJbnQodGltZXMsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICB2YXIgd3JhcHBlZFRhc2sgPSBmdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICB2YXIgcmV0cnlBdHRlbXB0ID0gZnVuY3Rpb24odGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2hpbGUgKHRpbWVzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQodGFzaywgISh0aW1lcy09MSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IGNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQsIHJ1biB0aGlzIGFzIGEgY29udHJvbGwgZmxvd1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2tcbiAgICB9O1xuXG4gICAgYXN5bmMud2F0ZXJmYWxsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIV9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd3JhcEl0ZXJhdG9yID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2god3JhcEl0ZXJhdG9yKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gZnVuY3Rpb24oZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKF9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgZWFjaGZuLm1hcCh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgZWFjaGZuLmVhY2goX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBhc3luYy5tYXAsIGVhY2g6IGFzeW5jLmVhY2ggfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKHRhc2tzLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBfbWFwTGltaXQobGltaXQpLCBlYWNoOiBfZWFjaExpbWl0KGxpbWl0KSB9LCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGFzeW5jLm1hcFNlcmllcyh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhfa2V5cyh0YXNrcyksIGZ1bmN0aW9uIChrLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRhc2tzW2tdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIHZhciBtYWtlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbWFrZUNhbGxiYWNrKDApO1xuICAgIH07XG5cbiAgICBhc3luYy5hcHBseSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBfY29uY2F0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNiKSB7XG4gICAgICAgICAgICBmbih4LCBmdW5jdGlvbiAoZXJyLCB5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMud2hpbHN0KHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICh0ZXN0LmFwcGx5KG51bGwsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0ZXN0KCkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3luYy51bnRpbCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvVW50aWwgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICghdGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvVW50aWwoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICBxLnRhc2tzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbnVsbCxcbiAgICAgICAgICAgIGVtcHR5OiBudWxsLFxuICAgICAgICAgICAgZHJhaW46IG51bGwsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcS5kcmFpbiA9IG51bGw7XG4gICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghcS5wYXVzZWQgJiYgd29ya2VycyA8IHEuY29uY3VycmVuY3kgJiYgcS50YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBxLnRhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLmVtcHR5ICYmIHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4gJiYgcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyKHRhc2suZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHEuY29uY3VycmVuY3k7IHcrKykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICBlbmQgPSBzZXF1ZW5jZS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciBtaWQgPSBiZWcgKyAoKGVuZCAtIGJlZyArIDEpID4+PiAxKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKF9iaW5hcnlTZWFyY2gocS50YXNrcywgaXRlbSwgX2NvbXBhcmVUYXNrcykgKyAxLCAwLCBpdGVtKTtcblxuICAgICAgICAgICAgICBpZiAocS5zYXR1cmF0ZWQgJiYgcS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvblxuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5jYXJnbyA9IGZ1bmN0aW9uICh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHdvcmtpbmcgICAgID0gZmFsc2UsXG4gICAgICAgICAgICB0YXNrcyAgICAgICA9IFtdO1xuXG4gICAgICAgIHZhciBjYXJnbyA9IHtcbiAgICAgICAgICAgIHRhc2tzOiB0YXNrcyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgZHJhaW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX2VhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXJnby5kcmFpbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXJnby5zYXR1cmF0ZWQgJiYgdGFza3MubGVuZ3RoID09PSBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnby5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShjYXJnby5wcm9jZXNzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICAgICAgICAgIGlmICh3b3JraW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZihjYXJnby5kcmFpbiAmJiAhY2FyZ28uZHJhaW5lZCkgY2FyZ28uZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdHMgPSB0eXBlb2YgcGF5bG9hZCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRhc2tzLnNwbGljZSgwLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza3Muc3BsaWNlKDAsIHRhc2tzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZHMgPSBfbWFwKHRzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFzay5kYXRhO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoY2FyZ28uZW1wdHkpIGNhcmdvLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgd29ya2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2VyKGRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgX2VhY2godHMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNhcmdvO1xuICAgIH07XG5cbiAgICB2YXIgX2NvbnNvbGVfZm4gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy50aW1lcyA9IGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb3VudGVyID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY291bnRlci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luYy5tYXAoY291bnRlciwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwU2VyaWVzKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGF0LCBbZXJyXS5jb25jYXQocmVzdWx0cykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICByZXR1cm4gYXN5bmMuc2VxLmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIHZhciBfYXBwbHlFYWNoID0gZnVuY3Rpb24gKGVhY2hmbiwgZm5zIC8qYXJncy4uLiovKSB7XG4gICAgICAgIHZhciBnbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgZnVuY3Rpb24gKGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5hcHBseUVhY2ggPSBkb1BhcmFsbGVsKF9hcHBseUVhY2gpO1xuICAgIGFzeW5jLmFwcGx5RWFjaFNlcmllcyA9IGRvU2VyaWVzKF9hcHBseUVhY2gpO1xuXG4gICAgYXN5bmMuZm9yZXZlciA9IGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xuXG4gICAgLy8gTm9kZS5qc1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwidmFyIGFzeW5jICAgICAgID0gcmVxdWlyZSgnYXN5bmMnKSxcbiAgICB1cmxQYXJzZXIgICA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIFJlc291cmNlICAgID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBtdWx0aXBsZSByZXNvdXJjZXMgdG8gbG9hZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIGNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvZ3Jlc3MgcGVyY2VudCBvZiB0aGUgbG9hZGVyIGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogTG9hZGluZyBzdGF0ZSBvZiB0aGUgbG9hZGVyLCB0cnVlIGlmIGl0IGlzIGN1cnJlbnRseSBsb2FkaW5nIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0b3RhbCBwcm9ncmVzcyB0aGF0IGEgc2luZ2xlIHJlc291cmNlIHJlcHJlc2VudHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWlkZGxld2FyZSB0byBydW4gYmVmb3JlIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGFmdGVyIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9sb2FkUmVzb3VyY2VgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRMb2FkUmVzb3VyY2UgPSB0aGlzLl9sb2FkUmVzb3VyY2UuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uTG9hZGAgZnVuY3Rpb24gYm91bmQgd2l0aCB0aGlzIG9iamVjdCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uTG9hZCA9IHRoaXMuX29uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlIGJ1ZmZlciB0aGF0IGZpbGxzIHVudGlsIGBsb2FkYCBpcyBjYWxsZWQgdG8gc3RhcnQgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlW119XG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyID0gW107XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHRyYWNrIGxvYWQgY29tcGxldGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb3VyY2VzIHdhaXRpbmcgdG8gYmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX3F1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fYm91bmRMb2FkUmVzb3VyY2UsIGNvbmN1cnJlbmN5KTtcblxuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGlzIGxvYWRlciBrZXllZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgUmVzb3VyY2U+fVxuICAgICAqL1xuICAgIHRoaXMucmVzb3VyY2VzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCBvciBlcnJvcmVkIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgb25jZSBwZXIgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbG9hZGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdGFydFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHF1ZXVlZCByZXNvdXJjZXMgYWxsIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY29tcGxldGVcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuLyoqXG4gKiBBZGRzIGEgcmVzb3VyY2UgKG9yIG11bHRpcGxlIHJlc291cmNlcykgdG8gdGhlIGxvYWRlciBxdWV1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGEgd2lkZSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwYXJhbWV0ZXJzLiBUaGUgb25seSB0aGluZyB0aGF0IGlzIGFsd2F5c1xuICogcmVxdWlyZWQgdGhlIHVybCB0byBsb2FkLiBBbGwgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6XG4gKlxuICogYGBganNcbiAqIGxvYWRlclxuICogICAgIC8vIG5vcm1hbCBwYXJhbSBzeW50YXhcbiAqICAgICAuYWRkKCdrZXknLCAnaHR0cDovLy4uLicsIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJylcbiAqXG4gKiAgICAgLy8gb2JqZWN0IHN5bnRheFxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MicsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIG5hbWU6ICdrZXkzJyxcbiAqICAgICAgICAgdXJsOiAnaHR0cDovLy4uLidcbiAqICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge31cbiAqICAgICB9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwczovLy4uLicsXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9LFxuICogICAgICAgICBjcm9zc09yaWdpbjogdHJ1ZVxuICogICAgIH0pXG4gKlxuICogICAgIC8vIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJscyBvciBib3RoXG4gKiAgICAgLmFkZChbXG4gKiAgICAgICAgIHsgbmFtZTogJ2tleTQnLCB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgeyB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgJ2h0dHA6Ly8uLi4nXG4gKiAgICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAYWxpYXMgZW5xdWV1ZVxuICogQHBhcmFtIFtuYW1lXSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZCwgaWYgbm90IHBhc3NlZCB0aGUgdXJsIGlzIHVzZWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIHJlbGF0aXZlIHRvIHRoZSBiYXNlVXJsIG9mIHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcGFyYW0gW29wdGlvbnMuY3Jvc3NPcmlnaW5dIHtib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5YSFJfTE9BRF9UWVBFfSBIb3cgc2hvdWxkIHRoaXMgcmVzb3VyY2UgYmUgbG9hZGVkP1xuICogQHBhcmFtIFtvcHRpb25zLnhoclR5cGU9UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVF0ge1Jlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFfSBIb3cgc2hvdWxkIHRoZSBkYXRhIGJlaW5nXG4gKiAgICAgIGxvYWRlZCBiZSBpbnRlcnByZXRlZCB3aGVuIHVzaW5nIFhIUj9cbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMgc3BlY2lmaWMgcmVzb3VyY2UgY29tcGxldGVzIGxvYWRpbmcuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWRkID0gTG9hZGVyLnByb3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgb3B0aW9ucywgY2IpIHtcbiAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciB1cmxzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChuYW1lW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGlmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW5zdGVhZCBvZiBwYXJhbXNcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNiID0gdXJsIHx8IG5hbWUuY2FsbGJhY2sgfHwgbmFtZS5vbkNvbXBsZXRlO1xuICAgICAgICBvcHRpb25zID0gbmFtZTtcbiAgICAgICAgdXJsID0gbmFtZS51cmw7XG4gICAgICAgIG5hbWUgPSBuYW1lLm5hbWUgfHwgbmFtZS5rZXkgfHwgbmFtZS51cmw7XG4gICAgfVxuXG4gICAgLy8gY2FzZSB3aGVyZSBubyBuYW1lIGlzIHBhc3NlZCBzaGlmdCBhbGwgYXJncyBvdmVyIGJ5IG9uZS5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdXJsO1xuICAgICAgICB1cmwgPSBuYW1lO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IHdlIHNoaWZ0ZWQgbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9wZXIgdXJsLlxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVybCBwYXNzZWQgdG8gYWRkIHJlc291cmNlIHRvIGxvYWRlci4nKTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zIGFyZSBvcHRpb25hbCBzbyBwZW9wbGUgbWlnaHQgcGFzcyBhIGZ1bmN0aW9uIGFuZCBubyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW25hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzb3VyY2Ugd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBleGlzdHMuJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJhc2UgdXJsIGlmIHRoaXMgaXNuJ3QgYW4gYWJzb2x1dGUgdXJsXG4gICAgdXJsID0gdGhpcy5faGFuZGxlQmFzZVVybCh1cmwpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBzdG9yZSB0aGUgcmVzb3VyY2VcbiAgICB0aGlzLnJlc291cmNlc1tuYW1lXSA9IG5ldyBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlc291cmNlc1tuYW1lXS5vbmNlKCdhZnRlck1pZGRsZXdhcmUnLCBjYik7XG4gICAgfVxuXG4gICAgdGhpcy5fbnVtVG9Mb2FkKys7XG5cbiAgICAvLyBpZiBhbHJlYWR5IGxvYWRpbmcgYWRkIGl0IHRvIHRoZSB3b3JrZXIgcXVldWVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9ICgxMDAgLSB0aGlzLnByb2dyZXNzKSAvICh0aGlzLl9xdWV1ZS5sZW5ndGgoKSArIHRoaXMuX3F1ZXVlLnJ1bm5pbmcoKSk7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBidWZmZXIgaXQgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlIGxhdGVyXG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDEwMCAvIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5Mb2FkZXIucHJvdG90eXBlLl9oYW5kbGVCYXNlVXJsID0gZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBwYXJzZWRVcmwgPSB1cmxQYXJzZXIucGFyc2UodXJsKTtcblxuICAgIC8vIGFic29sdXRlIHVybCwganVzdCB1c2UgaXQgYXMgaXMuXG4gICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCB8fCBwYXJzZWRVcmwucGF0aG5hbWUuaW5kZXhPZignLy8nKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIC8vIGlmIGJhc2VVcmwgZG9lc24ndCBlbmQgaW4gc2xhc2ggYW5kIHVybCBkb2Vzbid0IHN0YXJ0IHdpdGggc2xhc2gsIHRoZW4gYWRkIGEgc2xhc2ggaW5iZXR3ZWVuXG4gICAgaWYgKFxuICAgICAgICB0aGlzLmJhc2VVcmwubGVuZ3RoICYmXG4gICAgICAgIHRoaXMuYmFzZVVybC5sYXN0SW5kZXhPZignLycpICE9PSB0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSAmJlxuICAgICAgICB1cmwuY2hhckF0KDApICE9PSAnLydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybCArICcvJyArIHVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmJlZm9yZSogdGhlXG4gKiByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKlxuICogQGFsaWFzIHByZVxuICogQHBhcmFtIG1pZGRsZXdhcmUge2Z1bmN0aW9ufSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5iZWZvcmUgPSBMb2FkZXIucHJvdG90eXBlLnByZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB1cCBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gdGhhdCB3aWxsIHJ1biAqYWZ0ZXIqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyB1c2VcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWZ0ZXIgPSBMb2FkZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZS5wdXNoKGZuKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHF1ZXVlIG9mIHRoZSBsb2FkZXIgdG8gcHJlcGFyZSBmb3IgYSBuZXcgbG9hZC5cbiAqXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gdGhpcy5iYXNlVXJsID0gYmFzZVVybCB8fCAnJztcblxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9ncmVzc0NodW5rID0gMDtcblxuICAgIC8vIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUubGVuZ3RoID0gMDtcbiAgICAvLyB0aGlzLl9hZnRlck1pZGRsZXdhcmUubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fbnVtVG9Mb2FkID0gMDtcblxuICAgIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgICB0aGlzLl9xdWV1ZS5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBTdGFydHMgbG9hZGluZyB0aGUgcXVldWVkIHJlc291cmNlcy5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgY29tcGxldGVgIGV2ZW50LlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAvLyByZWdpc3RlciBjb21wbGV0ZSBjYWxsYmFjayBpZiB0aGV5IHBhc3Mgb25lXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBxdWV1ZSBoYXMgYWxyZWFkeSBzdGFydGVkIHdlIGFyZSBkb25lIGhlcmVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBub3RpZnkgb2Ygc3RhcnRcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBzdGFydCB0aGUgaW50ZXJuYWwgcXVldWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMuX2J1ZmZlcltpXSk7XG4gICAgfVxuXG4gICAgLy8gZW1wdHkgdGhlIGJ1ZmZlclxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIExvYWRzIGEgc2luZ2xlIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc291cmNlID0gZnVuY3Rpb24gKHJlc291cmNlLCBkZXF1ZXVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmVzb3VyY2UuX2RlcXVldWUgPSBkZXF1ZXVlO1xuXG4gICAgdGhpcy5fcnVuTWlkZGxld2FyZShyZXNvdXJjZSwgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXNvdXJjZS5vbigncHJvZ3Jlc3MnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAncHJvZ3Jlc3MnKSk7XG5cbiAgICAgICAgcmVzb3VyY2UubG9hZChzZWxmLl9ib3VuZE9uTG9hZCk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbmNlIGVhY2ggcmVzb3VyY2UgaGFzIGxvYWRlZC5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX29uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMsIHRoaXMucmVzb3VyY2VzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGVhY2ggdGltZSBhIHJlc291cmNlcyBpcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAZmlyZXMgZXJyb3JcbiAqIEBmaXJlcyBsb2FkXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICB0aGlzLnByb2dyZXNzICs9IHRoaXMuX3Byb2dyZXNzQ2h1bms7XG5cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgcmVzb3VyY2UpO1xuXG4gICAgLy8gcnVuIG1pZGRsZXdhcmUsIHRoaXMgKm11c3QqIGhhcHBlbiBiZWZvcmUgZGVxdWV1ZSBzbyBzdWItYXNzZXRzIGdldCBhZGRlZCBwcm9wZXJseVxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2FmdGVyTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvdXJjZS5lbWl0KCdhZnRlck1pZGRsZXdhcmUnLCByZXNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5fbnVtVG9Mb2FkLS07XG5cbiAgICAgICAgLy8gZG8gY29tcGxldGlvbiBjaGVja1xuICAgICAgICBpZiAodGhpcy5fbnVtVG9Mb2FkID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgdGhpcy5fb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzb3VyY2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCByZXNvdXJjZS5lcnJvciwgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkJywgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG5cblxuICAgIC8vIHJlbW92ZSB0aGlzIHJlc291cmNlIGZyb20gdGhlIGFzeW5jIHF1ZXVlXG4gICAgcmVzb3VyY2UuX2RlcXVldWUoKTtcbn07XG5cbi8qKlxuICogUnVuIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9uIGEgcmVzb3VyY2UuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fcnVuTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZm5zLCBjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGFzeW5jLmVhY2hTZXJpZXMoZm5zLCBmdW5jdGlvbiAoZm4sIG5leHQpIHtcbiAgICAgICAgZm4uY2FsbChzZWxmLCByZXNvdXJjZSwgbmV4dCk7XG4gICAgfSwgY2IuYmluZCh0aGlzLCByZXNvdXJjZSkpO1xufTtcblxuTG9hZGVyLkxPQURfVFlQRSA9IFJlc291cmNlLkxPQURfVFlQRTtcbkxvYWRlci5YSFJfUkVBRFlfU1RBVEUgPSBSZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEU7XG5Mb2FkZXIuWEhSX1JFU1BPTlNFX1RZUEUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRTtcbiIsInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgX3VybCA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIC8vIHRlc3RzIGlzIENPUlMgaXMgc3VwcG9ydGVkIGluIFhIUiwgaWYgbm90IHdlIG5lZWQgdG8gdXNlIFhEUlxuICAgIHVzZVhkciA9ICEhKHdpbmRvdy5YRG9tYWluUmVxdWVzdCAmJiAhKCd3aXRoQ3JlZGVudGlhbHMnIGluIChuZXcgWE1MSHR0cFJlcXVlc3QoKSkpKSxcbiAgICB0ZW1wQW5jaG9yID0gbnVsbDtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRlZCBieVxuICogYSBzaW5nbGUgVVJMLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIG5hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd8c3RyaW5nW119IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIGZvciBhdWRpby92aWRlbyBsb2FkcyB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7c3RyaW5nfGJvb2xlYW59IElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IERlZmF1bHQgaXMgdG8gZGV0ZXJtaW5lIGF1dG9tYXRpY2FsbHkuXG4gKiBAcGFyYW0gW29wdGlvbnMubG9hZFR5cGU9UmVzb3VyY2UuTE9BRF9UWVBFLlhIUl0ge1Jlc291cmNlLkxPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW29wdGlvbnMubWV0YWRhdGFdIHtvYmplY3R9IEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmUuXG4gKi9cbmZ1bmN0aW9uIFJlc291cmNlKG5hbWUsIHVybCwgb3B0aW9ucykge1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBuYW1lIGFuZCB1cmwgYXJlIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgYSByZXNvdXJjZS4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdXJsIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgdXJsIGlzIGEgZGF0YSB1cmwuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNEYXRhVXJsID0gdGhpcy51cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnl9XG4gICAgICovXG4gICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jcm9zc09yaWdpbiA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnYW5vbnltb3VzJyA6IG9wdGlvbnMuY3Jvc3NPcmlnaW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIG9mIGxvYWRpbmcgdG8gdXNlIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2UuTE9BRF9UWVBFfVxuICAgICAqL1xuICAgIHRoaXMubG9hZFR5cGUgPSBvcHRpb25zLmxvYWRUeXBlIHx8IHRoaXMuX2RldGVybWluZUxvYWRUeXBlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSB1c2VkIHRvIGxvYWQgdGhlIHJlc291cmNlIHZpYSBYSFIuIElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy54aHJUeXBlID0gb3B0aW9ucy54aHJUeXBlO1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgaW5mbyBmb3IgbWlkZGxld2FyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgd2hpbGUgbG9hZGluZyAoaWYgYW55KS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Vycm9yfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFhIUiBvYmplY3QgdGhhdCB3YXMgdXNlZCB0byBsb2FkIHRoaXMgcmVzb3VyY2UuIFRoaXMgaXMgb25seSBzZXRcbiAgICAgKiB3aGVuIGBsb2FkVHlwZWAgaXMgYFJlc291cmNlLkxPQURfVFlQRS5YSFJgLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7WE1MSHR0cFJlcXVlc3R9XG4gICAgICovXG4gICAgdGhpcy54aHIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBqc29uLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0pzb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgeG1sLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1htbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhbiBpbWFnZSB0YWcuIE9ubHkgdmFsaWQgYWZ0ZXIgdGhlIHJlc291cmNlXG4gICAgICogaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gYXVkaW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0F1ZGlvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGEgdmlkZW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1ZpZGVvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGRlcXVldWVgIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBhIHN0b3JhZ2UgcGxhY2UgZm9yIHRoZSBhc3luYyBxdWV1ZSBkZXF1ZXVlIG1ldGhvZFxuICAgICAqIHVzZWQgcHJpdmF0ZWx5IGJ5IHRoZSBsb2FkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2RlcXVldWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBjb21wbGV0ZWAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kQ29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkVycm9yYCBmdW5jdGlvbiBib3VuZCB0byB0aGlzIHJlc291cmNlJ3MgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25Qcm9ncmVzc2AgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyA9IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcblxuICAgIC8vIHhociBjYWxsYmFja3NcbiAgICB0aGlzLl9ib3VuZFhock9uRXJyb3IgPSB0aGlzLl94aHJPbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYaHJPbkFib3J0ID0gdGhpcy5feGhyT25BYm9ydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25Mb2FkID0gdGhpcy5feGhyT25Mb2FkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYZHJPblRpbWVvdXQgPSB0aGlzLl94ZHJPblRpbWVvdXQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcmVzb3VyY2UgYmVpbmdzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGVhY2ggdGltZSBwcm9ncmVzcyBvZiB0aGlzIHJlc291cmNlIGxvYWQgdXBkYXRlcy5cbiAgICAgKiBOb3QgYWxsIHJlc291cmNlcyB0eXBlcyBhbmQgbG9hZGVyIHN5c3RlbXMgY2FuIHN1cHBvcnQgdGhpcyBldmVudFxuICAgICAqIHNvIHNvbWV0aW1lcyBpdCBtYXkgbm90IGJlIGF2YWlsYWJsZS4gSWYgdGhlIHJlc291cmNlXG4gICAgICogaXMgYmVpbmcgbG9hZGVkIG9uIGEgbW9kZXJuIGJyb3dzZXIsIHVzaW5nIFhIUiwgYW5kIHRoZSByZW1vdGUgc2VydmVyXG4gICAgICogcHJvcGVybHkgc2V0cyBDb250ZW50LUxlbmd0aCBoZWFkZXJzLCB0aGVuIHRoaXMgd2lsbCBiZSBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcHJvZ3Jlc3NcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgdGhpcyByZXNvdXJjZSBoYXMgbG9hZGVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaXQgd2lsbFxuICAgICAqIGJlIGluIHRoZSBgZXJyb3JgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xufVxuXG5SZXNvdXJjZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVzb3VyY2U7XG5tb2R1bGUuZXhwb3J0cyA9IFJlc291cmNlO1xuXG4vKipcbiAqIE1hcmtzIHRoZSByZXNvdXJjZSBhcyBjb21wbGV0ZS5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgaW4gYSB3cmFwcGVyIG9yIHNvbWV0aGluZy4uLmdyb3NzLi4uLlxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICAgIGlmICh0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvcik7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIub25lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25wcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbmxvYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBLaWNrcyBvZmYgbG9hZGluZyBvZiB0aGlzIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBzdGFydFxuICogQHBhcmFtIFtjYWxsYmFja10ge2Z1bmN0aW9ufSBPcHRpb25hbCBjYWxsYmFjayB0byBjYWxsIG9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBpZiBhIGNhbGxiYWNrIGlzIHNldCwgbGlzdGVuIGZvciBjb21wbGV0ZSBldmVudFxuICAgIGlmIChjYikge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4gPT09IGZhbHNlIHx8IHR5cGVvZiB0aGlzLmNyb3NzT3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdGhpcy5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4odGhpcy51cmwpO1xuICAgIH1cblxuICAgIHN3aXRjaCh0aGlzLmxvYWRUeXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEltYWdlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5BVURJTzpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuVklERU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlhIUjpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh1c2VYZHIgJiYgdGhpcy5jcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYZHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYaHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gSW1hZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuc3JjID0gdGhpcy51cmw7XG5cbiAgICB0aGlzLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEhUTUxBdWRpb0VsZW1lbnQgb3IgSFRNTFZpZGVvRWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJyAmJiB0eXBlb2YgQXVkaW8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBBdWRpbygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgJyArIHR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBDb2Nvb25KUyBDYW52YXMrIHJ1bnRpbWUsIGxhY2tzIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zcmMgPSBBcnJheS5pc0FycmF5KHRoaXMudXJsKSA/IHRoaXMudXJsWzBdIDogdGhpcy51cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51cmwubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWydpcycgKyB0eXBlWzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKV0gPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuXG4gICAgdGhpcy5kYXRhLmxvYWQoKTtcbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gWE1MSHR0cFJlcXVlc3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGhyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIHNldCB0aGUgcmVxdWVzdCB0eXBlIGFuZCB1cmxcbiAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gbG9hZCBqc29uIGFzIHRleHQgYW5kIHBhcnNlIGl0IG91cnNlbHZlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHNvbWUgYnJvd3NlcnNcbiAgICAvLyAqY291Z2gqIHNhZmFyaSAqY291Z2gqIGNhbid0IGRlYWwgd2l0aCBpdC5cbiAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OIHx8IHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gdGhpcy54aHJUeXBlO1xuICAgIH1cblxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvciwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQsIGZhbHNlKTtcblxuICAgIHhoci5zZW5kKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhEb21haW5SZXF1ZXN0LiBUaGlzIGlzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHN1cHBvcnQgSUU5IChncm9zcykuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGRyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGRyID0gdGhpcy54aHIgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcblxuICAgIC8vIFhEb21haW5SZXF1ZXN0IGhhcyBhIGZldyBxdWlya3MuIE9jY2FzaW9uYWxseSBpdCB3aWxsIGFib3J0IHJlcXVlc3RzXG4gICAgLy8gQSB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBtYWtlIHN1cmUgQUxMIGNhbGxiYWNrcyBhcmUgc2V0IGV2ZW4gaWYgbm90IHVzZWRcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTc4Njk2Ni94ZG9tYWlucmVxdWVzdC1hYm9ydHMtcG9zdC1vbi1pZS05XG4gICAgeGRyLnRpbWVvdXQgPSA1MDAwO1xuXG4gICAgeGRyLm9uZXJyb3IgPSB0aGlzLl9ib3VuZFhock9uRXJyb3I7XG4gICAgeGRyLm9udGltZW91dCA9IHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0O1xuICAgIHhkci5vbnByb2dyZXNzID0gdGhpcy5fYm91bmRPblByb2dyZXNzO1xuICAgIHhkci5vbmxvYWQgPSB0aGlzLl9ib3VuZFhock9uTG9hZDtcblxuICAgIHhkci5vcGVuKCdHRVQnLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyAgTm90ZTogVGhlIHhkci5zZW5kKCkgY2FsbCBpcyB3cmFwcGVkIGluIGEgdGltZW91dCB0byBwcmV2ZW50IGFuIGlzc3VlIHdpdGggdGhlIGludGVyZmFjZSB3aGVyZSBzb21lIHJlcXVlc3RzIGFyZSBsb3N0XG4gICAgLy8gIGlmIG11bHRpcGxlIFhEb21haW5SZXF1ZXN0cyBhcmUgYmVpbmcgc2VudCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIC8vIFNvbWUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2lzc3Vlcy8xMjQ4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHhkci5zZW5kKCk7XG4gICAgfSwgMCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzb3VyY2UgdXNlZCBpbiBsb2FkaW5nIHZpYSBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB0eXBlIHtzdHJpbmd9IFRoZSBlbGVtZW50IHR5cGUgKHZpZGVvIG9yIGF1ZGlvKS5cbiAqIEBwYXJhbSB1cmwge3N0cmluZ30gVGhlIHNvdXJjZSBVUkwgdG8gbG9hZCBmcm9tLlxuICogQHBhcmFtIFttaW1lXSB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIG9mIHRoZSB2aWRlb1xuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9jcmVhdGVTb3VyY2UgPSBmdW5jdGlvbiAodHlwZSwgdXJsLCBtaW1lKSB7XG4gICAgaWYgKCFtaW1lKSB7XG4gICAgICAgIG1pbWUgPSB0eXBlICsgJy8nICsgdXJsLnN1YnN0cih1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSB1cmw7XG4gICAgc291cmNlLnR5cGUgPSBtaW1lO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBlcnJvcnMgb3V0LlxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBlcnJvciBldmVudCBmcm9tIHRoZSBlbGVtZW50IHRoYXQgZW1pdHMgaXQuXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX29uRXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBlbGVtZW50IHVzaW5nICcgKyBldmVudC50YXJnZXQubm9kZU5hbWUpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBwcm9ncmVzcyBldmVudCBmaXJlcyBmb3IgeGhyL3hkci5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vblByb2dyZXNzID0gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB0aGlzLCBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYW4gZXJyb3IgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEVycm9yRXZlbnR8RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgcmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgZmFpbGVkLiAnICtcbiAgICAgICAgJ1N0YXR1czogJyArIHRoaXMueGhyLnN0YXR1cyArICcsIHRleHQ6IFwiJyArIHRoaXMueGhyLnN0YXR1c1RleHQgKyAnXCInXG4gICAgKTtcblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGFib3J0IGV2ZW50IGZpcmVzIGZvciB4aHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEFib3J0RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB3YXMgYWJvcnRlZCBieSB0aGUgdXNlci4nKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIHRpbWVvdXQgZXZlbnQgZmlyZXMgZm9yIHhkci5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94ZHJPblRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB0aW1lZCBvdXQuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBkYXRhIHN1Y2Nlc3NmdWxseSBsb2FkcyBmcm9tIGFuIHhoci94ZHIgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0TG9hZEV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHhociA9IHRoaXMueGhyLFxuICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzICE9PSB1bmRlZmluZWQgPyB4aHIuc3RhdHVzIDogMjAwOyAvL1hEUiBoYXMgbm8gYC5zdGF0dXNgLCBhc3N1bWUgMjAwLlxuXG4gICAgLy8gc3RhdHVzIGNhbiBiZSAwIHdoZW4gdXNpbmcgdGhlIGZpbGU6Ly8gcHJvdG9jb2wsIGFsc28gY2hlY2sgaWYgYSByZXNwb25zZSB3YXMgZm91bmRcbiAgICBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDQgfHwgKHN0YXR1cyA9PT0gMCAmJiB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIC8vIGlmIHRleHQsIGp1c3QgcmV0dXJuIGl0XG4gICAgICAgIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYganNvbiwgcGFyc2UgaW50byBqc29uIG9iamVjdFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT04pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSnNvbiA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIGpzb246JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgeG1sLCBwYXJzZSBpbnRvIGFuIHhtbCBkb2N1bWVudCBvciBkaXYgZWxlbWVudFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkaXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNYbWwgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSBsb2FkZWQgeG1sOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyIHR5cGVzIGp1c3QgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdbJyArIHhoci5zdGF0dXMgKyAnXScgKyB4aHIuc3RhdHVzVGV4dCArICc6JyArIHhoci5yZXNwb25zZVVSTCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gcmVxVHlwZSh4aHIpIHtcbiAgICByZXR1cm4geGhyLnRvU3RyaW5nKCkucmVwbGFjZSgnb2JqZWN0ICcsICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGZvciB0aGlzIHJlc291cmNlIGJhc2VkIG9uIGlmIHRoZSB1cmxcbiAqIGZvciB0aGlzIHJlc291cmNlIGlzIGNyb3NzLW9yaWdpbi4gSWYgY3Jvc3NPcmlnaW4gd2FzIG1hbnVhbGx5IHNldCwgdGhpc1xuICogZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgdG8gdGVzdC5cbiAqIEBwYXJhbSBbbG9jYXRpb249d2luZG93LmxvY2F0aW9uXSB7b2JqZWN0fSBUaGUgbG9jYXRpb24gb2JqZWN0IHRvIHRlc3QgYWdhaW5zdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNyb3NzT3JpZ2luIHZhbHVlIHRvIHVzZSAob3IgZW1wdHkgc3RyaW5nIGZvciBub25lKS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVDcm9zc09yaWdpbiA9IGZ1bmN0aW9uICh1cmwsIGxvYykge1xuICAgIC8vIGRhdGE6IGFuZCBqYXZhc2NyaXB0OiB1cmxzIGFyZSBjb25zaWRlcmVkIHNhbWUtb3JpZ2luXG4gICAgaWYgKHVybC5pbmRleE9mKCdkYXRhOicpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGlzIHdpbmRvdy5sb2NhdGlvblxuICAgIGxvYyA9IGxvYyB8fCB3aW5kb3cubG9jYXRpb247XG5cbiAgICBpZiAoIXRlbXBBbmNob3IpIHtcbiAgICAgICAgdGVtcEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG5cbiAgICAvLyBsZXQgdGhlIGJyb3dzZXIgZGV0ZXJtaW5lIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSB1cmwgb2YgdGhpcyByZXNvdXJjZSBhbmQgdGhlblxuICAgIC8vIHBhcnNlIHdpdGggdGhlIG5vZGUgdXJsIGxpYiwgd2UgY2FuJ3QgdXNlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICAgIC8vIGJlY2F1c2UgdGhleSBkb24ndCB3b3JrIGluIElFOSA6KFxuICAgIHRlbXBBbmNob3IuaHJlZiA9IHVybDtcbiAgICB1cmwgPSBfdXJsLnBhcnNlKHRlbXBBbmNob3IuaHJlZik7XG5cbiAgICB2YXIgc2FtZVBvcnQgPSAoIXVybC5wb3J0ICYmIGxvYy5wb3J0ID09PSAnJykgfHwgKHVybC5wb3J0ID09PSBsb2MucG9ydCk7XG5cbiAgICAvLyBpZiBjcm9zcyBvcmlnaW5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9PSBsb2MuaG9zdG5hbWUgfHwgIXNhbWVQb3J0IHx8IHVybC5wcm90b2NvbCAhPT0gbG9jLnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiAnYW5vbnltb3VzJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlc3BvbnNlVHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZVxuICogcmVzb3VyY2UgYmVpbmcgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHJlc3BvbnNlVHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lWGhyVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX3hoclR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZUxvYWRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZXNvdXJjZS5fbG9hZFR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLkxPQURfVFlQRS5YSFI7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2dldEV4dGVuc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcy51cmwsXG4gICAgICAgIGV4dDtcblxuICAgIGlmICh0aGlzLmlzRGF0YVVybCkge1xuICAgICAgICB2YXIgc2xhc2hJbmRleCA9IHVybC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGV4dCA9IHVybC5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEsIHVybC5pbmRleE9mKCc7Jywgc2xhc2hJbmRleCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXJ5U3RhcnQgPSB1cmwuaW5kZXhPZignPycpO1xuICAgICAgICBpZiAocXVlcnlTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dDtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWltZSB0eXBlIG9mIGFuIFhIUiByZXF1ZXN0IGJhc2VkIG9uIHRoZSByZXNwb25zZVR5cGUgb2ZcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIHRvIHVzZS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRNaW1lRnJvbVhoclR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1iaW5hcnknO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vYmxvYic7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veG1sJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT046XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVDpcbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUOlxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcblxuICAgIH1cbn07XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxvYWRpbmcgYSByZXNvdXJjZSBjYW4gdXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IExPQURfVFlQRVxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5YSFIgLSBVc2VzIFhNTEh0dHBSZXF1ZXN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5JTUFHRSAtIFVzZXMgYW4gYEltYWdlYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLkFVRElPIC0gVXNlcyBhbiBgQXVkaW9gIG9iamVjdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuVklERU8gLSBVc2VzIGEgYFZpZGVvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlLkxPQURfVFlQRSA9IHtcbiAgICBYSFI6ICAgIDEsXG4gICAgSU1BR0U6ICAyLFxuICAgIEFVRElPOiAgMyxcbiAgICBWSURFTzogIDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVBRFlfU1RBVEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuVU5TRU5UIC0gb3BlbigpaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLk9QRU5FRCAtIHNlbmQoKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5IRUFERVJTX1JFQ0VJVkVEIC0gc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIGhlYWRlcnMgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5MT0FESU5HIC0gRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLkRPTkUgLSBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5SZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEUgPSB7XG4gICAgVU5TRU5UOiAwLFxuICAgIE9QRU5FRDogMSxcbiAgICBIRUFERVJTX1JFQ0VJVkVEOiAyLFxuICAgIExPQURJTkc6IDMsXG4gICAgRE9ORTogNFxufTtcblxuLyoqXG4gKiBUaGUgWEhSIHJlYWR5IHN0YXRlcywgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IFhIUl9SRVNQT05TRV9UWVBFXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVCAtIGRlZmF1bHRzIHRvIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVIgLSBBcnJheUJ1ZmZlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkJMT0IgLSBCbG9iXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQgLSBEb2N1bWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkpTT04gLSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5URVhUIC0gU3RyaW5nXG4gKi9cblJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFID0ge1xuICAgIERFRkFVTFQ6ICAgICd0ZXh0JyxcbiAgICBCVUZGRVI6ICAgICAnYXJyYXlidWZmZXInLFxuICAgIEJMT0I6ICAgICAgICdibG9iJyxcbiAgICBET0NVTUVOVDogICAnZG9jdW1lbnQnLFxuICAgIEpTT046ICAgICAgICdqc29uJyxcbiAgICBURVhUOiAgICAgICAndGV4dCdcbn07XG5cblJlc291cmNlLl9sb2FkVHlwZU1hcCA9IHtcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3BuZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZWcnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3dlYnAnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRVxufTtcblxuUmVzb3VyY2UuX3hoclR5cGVNYXAgPSB7XG4gICAgLy8geG1sXG4gICAgJ3hodG1sJzogICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bWwnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3htbCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RteCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RzeCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3N2Zyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG5cbiAgICAvLyBpbWFnZXNcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2JtcCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RnYSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcblxuICAgIC8vIGpzb25cbiAgICAnanNvbic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OLFxuXG4gICAgLy8gdGV4dFxuICAgICd0ZXh0JzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQsXG4gICAgJ3R4dCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsb2FkIHR5cGUgdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGV4dG5hbWUge3N0cmluZ30gVGhlIGV4dGVuc2lvbiB0byBzZXQgdGhlIHR5cGUgZm9yLCBlLmcuIFwicG5nXCIgb3IgXCJmbnRcIlxuICogQHBhcmFtIGxvYWRUeXBlIHtSZXNvdXJjZS5MT0FEX1RZUEV9IFRoZSBsb2FkIHR5cGUgdG8gc2V0IGl0IHRvLlxuICovXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25Mb2FkVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCBsb2FkVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5fbG9hZFR5cGVNYXAsIGV4dG5hbWUsIGxvYWRUeXBlKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSB4aHJUeXBlIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHhociB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCB4aHJUeXBlKSB7XG4gICAgc2V0RXh0TWFwKFJlc291cmNlLl94aHJUeXBlTWFwLCBleHRuYW1lLCB4aHJUeXBlKTtcbn07XG5cbmZ1bmN0aW9uIHNldEV4dE1hcChtYXAsIGV4dG5hbWUsIHZhbCkge1xuICAgIGlmIChleHRuYW1lICYmIGV4dG5hbWUuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgIGV4dG5hbWUgPSBleHRuYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dG5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hcFtleHRuYW1lXSA9IHZhbDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICAgIF9rZXlTdHI6IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIixcblxuICAgIGVuY29kZUJpbmFyeTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBcIlwiO1xuICAgICAgICB2YXIgYnl0ZWJ1ZmZlcjtcbiAgICAgICAgdmFyIGVuY29kZWRDaGFySW5kZXhlcyA9IG5ldyBBcnJheSg0KTtcbiAgICAgICAgdmFyIGlueCA9IDA7XG4gICAgICAgIHZhciBqbnggPSAwO1xuICAgICAgICB2YXIgcGFkZGluZ0J5dGVzID0gMDtcblxuICAgICAgICB3aGlsZSAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBGaWxsIGJ5dGUgYnVmZmVyIGFycmF5XG4gICAgICAgICAgICBieXRlYnVmZmVyID0gbmV3IEFycmF5KDMpO1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBieXRlYnVmZmVyLmxlbmd0aDsgam54KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGF3YXkgaGlnaC1vcmRlciBieXRlLCBhcyBkb2N1bWVudGVkIGF0OlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdCNIYW5kbGluZ19iaW5hcnlfZGF0YVxuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSBpbnB1dC5jaGFyQ29kZUF0KGlueCsrKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGVhY2ggZW5jb2RlZCBjaGFyYWN0ZXIsIDYgYml0cyBhdCBhIHRpbWVcbiAgICAgICAgICAgIC8vIGluZGV4IDE6IGZpcnN0IDYgYml0c1xuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzBdID0gYnl0ZWJ1ZmZlclswXSA+PiAyO1xuICAgICAgICAgICAgLy8gaW5kZXggMjogc2Vjb25kIDYgYml0cyAoMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAxICsgNCBtb3N0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBieXRlIDIpXG4gICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMV0gPSAoKGJ5dGVidWZmZXJbMF0gJiAweDMpIDw8IDQpIHwgKGJ5dGVidWZmZXJbMV0gPj4gNCk7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiB0aGlyZCA2IGJpdHMgKDQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMiArIDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gKChieXRlYnVmZmVyWzFdICYgMHgwZikgPDwgMikgfCAoYnl0ZWJ1ZmZlclsyXSA+PiA2KTtcbiAgICAgICAgICAgIC8vIGluZGV4IDM6IGZvcnRoIDYgYml0cyAoNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gYnl0ZWJ1ZmZlclsyXSAmIDB4M2Y7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHBhZGRpbmcgaGFwcGVuZWQsIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgIHBhZGRpbmdCeXRlcyA9IGlueCAtIChpbnB1dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFkZGluZ0J5dGVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCAyIGNoYXJhY3RlcnMgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMl0gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBsYXN0IGNoYXJhY3RlciB0byBwYWRkaW5nIGNoYXJcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vIHBhZGRpbmcgLSBwcm9jZWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vdyB3ZSB3aWxsIGdyYWIgZWFjaCBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgb3V0IG9mIG91ciBrZXlzdHJpbmdcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIG91ciBpbmRleCBhcnJheSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQgc3RyaW5nXG4gICAgICAgICAgICBmb3IgKGpueCA9IDA7IGpueCA8IGVuY29kZWRDaGFySW5kZXhlcy5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHRoaXMuX2tleVN0ci5jaGFyQXQoZW5jb2RlZENoYXJJbmRleGVzW2pueF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9Mb2FkZXInKTtcblxubW9kdWxlLmV4cG9ydHMuUmVzb3VyY2UgPSByZXF1aXJlKCcuL1Jlc291cmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzLm1pZGRsZXdhcmUgPSB7XG4gICAgY2FjaGluZzoge1xuICAgICAgICBtZW1vcnk6IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnknKVxuICAgIH0sXG4gICAgcGFyc2luZzoge1xuICAgICAgICBibG9iOiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL3BhcnNpbmcvYmxvYicpXG4gICAgfVxufTtcbiIsIi8vIGEgc2ltcGxlIGluLW1lbW9yeSBjYWNoZSBmb3IgcmVzb3VyY2VzXG52YXIgY2FjaGUgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICAvLyBpZiBjYWNoZWQsIHRoZW4gc2V0IGRhdGEgYW5kIGNvbXBsZXRlIHRoZSByZXNvdXJjZVxuICAgICAgICBpZiAoY2FjaGVbcmVzb3VyY2UudXJsXSkge1xuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IGNhY2hlW3Jlc291cmNlLnVybF07XG4gICAgICAgICAgICByZXNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIG5vdCBjYWNoZWQsIHdhaXQgZm9yIGNvbXBsZXRlIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb3VyY2Uub25jZSgnY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICBjYWNoZVt0aGlzLnVybF0gPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgnLi4vLi4vUmVzb3VyY2UnKSxcbiAgICBiNjQgPSByZXF1aXJlKCcuLi8uLi9iNjQnKTtcblxud2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblxuLy8gYSBtaWRkbGV3YXJlIGZvciB0cmFuc2Zvcm1pbmcgWEhSIGxvYWRlZCBCbG9icyBpbnRvIG1vcmUgdXNlZnVsIG9iamVjdHNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIHdhcyBhbiBYSFIgbG9hZCBvZiBhIGJsb2JcbiAgICAgICAgaWYgKHJlc291cmNlLnhociAmJiByZXNvdXJjZS54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBibG9iIHN1cHBvcnQgd2UgcHJvYmFibHkgZ290IGEgYmluYXJ5IHN0cmluZyBiYWNrXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5CbG9iIHx8IHR5cGVvZiByZXNvdXJjZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVzb3VyY2UueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaW1hZ2UsIGNvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgaW50byBhIGRhdGEgdXJsXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgdHlwZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5zcmMgPSAnZGF0YTonICsgdHlwZSArICc7YmFzZTY0LCcgKyBiNjQuZW5jb2RlQmluYXJ5KHJlc291cmNlLnhoci5yZXNwb25zZVRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGltYWdlIGxvYWRzIGFuZCB0aGVuIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5vbmxvYWQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY29udGVudCB0eXBlIHNheXMgdGhpcyBpcyBhbiBpbWFnZSwgdGhlbiB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBibG9iIGludG8gYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvdXJjZS5kYXRhLnR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlc291cmNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuYmxvYiA9IHJlc291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gc3JjO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuaXNJbWFnZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBubyBsb25nZXIgdXNlZCBibG9iIGFmdGVyIHRoZSBpbWFnZSBsb2Fkc1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJwaXhpLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMC4xMC1kZXZcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlBpeGkuanMgaXMgYSBmYXN0IGxpZ2h0d2VpZ2h0IDJEIGxpYnJhcnkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGRldmljZXMuXCIsXG4gIFwiYXV0aG9yXCI6IFwiTWF0IEdyb3Zlc1wiLFxuICBcImNvbnRyaWJ1dG9yc1wiOiBbXG4gICAgXCJDaGFkIEVuZ2xlciA8Y2hhZEBwYW50aGVyZGV2LmNvbT5cIixcbiAgICBcIlJpY2hhcmQgRGF2ZXkgPHJkYXZleUBnbWFpbC5jb20+XCJcbiAgXSxcbiAgXCJtYWluXCI6IFwiLi9zcmMvaW5kZXguanNcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHA6Ly9nb29kYm95ZGlnaXRhbC5jb20vXCIsXG4gIFwiYnVnc1wiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXNcIixcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiZ3VscCAmJiBndWxwIHdhdGNoXCIsXG4gICAgXCJ0ZXN0XCI6IFwiZ3VscCAmJiB0ZXN0ZW0gY2lcIixcbiAgICBcImJ1aWxkXCI6IFwiZ3VscFwiLFxuICAgIFwiZG9jc1wiOiBcImpzZG9jIC1jIC4vZ3VscC91dGlsL2pzZG9jLmNvbmYuanNvbiAtUiBSRUFETUUubWRcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpbi9cIixcbiAgICBcInNyYy9cIixcbiAgICBcIkNPTlRSSUJVVElORy5tZFwiLFxuICAgIFwiTElDRU5TRVwiLFxuICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgXCJSRUFETUUubWRcIlxuICBdLFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhc3luY1wiOiBcIl4xLjUuMFwiLFxuICAgIFwiYnJmc1wiOiBcIl4xLjQuMVwiLFxuICAgIFwiZWFyY3V0XCI6IFwiXjIuMC43XCIsXG4gICAgXCJldmVudGVtaXR0ZXIzXCI6IFwiXjEuMS4xXCIsXG4gICAgXCJnbC1tYXRyaXhcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL3RvamkvZ2wtbWF0cml4LmdpdFwiLFxuICAgIFwib2JqZWN0LWFzc2lnblwiOiBcIl40LjAuMVwiLFxuICAgIFwicGl4aS1nbC1jb3JlXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9Hb29kQm95RGlnaXRhbC9waXhpLWdsLWNvcmUuZ2l0XCIsXG4gICAgXCJyZXNvdXJjZS1sb2FkZXJcIjogXCJeMS42LjRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjExLjEuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4zLjIuMFwiLFxuICAgIFwiZGVsXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOS4wXCIsXG4gICAgXCJndWxwLWNhY2hlZFwiOiBcIl4xLjEuMFwiLFxuICAgIFwiZ3VscC1jb25jYXRcIjogXCJeMi42LjBcIixcbiAgICBcImd1bHAtZGVidWdcIjogXCJeMi4xLjBcIixcbiAgICBcImd1bHAtaGVhZGVyXCI6IFwiXjEuNy4xXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjExLjJcIixcbiAgICBcImd1bHAtbWlycm9yXCI6IFwiXjAuNC4wXCIsXG4gICAgXCJndWxwLXBsdW1iZXJcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtcmVuYW1lXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJndWxwLXNvdXJjZW1hcHNcIjogXCJeMS41LjJcIixcbiAgICBcImd1bHAtdWdsaWZ5XCI6IFwiXjEuNC4xXCIsXG4gICAgXCJndWxwLXV0aWxcIjogXCJeMy4wLjZcIixcbiAgICBcImphZ3VhcmpzLWpzZG9jXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZHNoaW1qcy9qYWd1YXJqcy1qc2RvYy5naXRcIixcbiAgICBcImpzZG9jXCI6IFwiXjMuMy4yXCIsXG4gICAgXCJqc2hpbnQtc3VtbWFyeVwiOiBcIl4wLjQuMFwiLFxuICAgIFwibWluaW1pc3RcIjogXCJeMS4yLjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMy4yXCIsXG4gICAgXCJyZXF1aXJlLWRpclwiOiBcIl4wLjMuMFwiLFxuICAgIFwicnVuLXNlcXVlbmNlXCI6IFwiXjEuMS4yXCIsXG4gICAgXCJ0ZXN0ZW1cIjogXCJeMC45LjRcIixcbiAgICBcInZpbnlsLWJ1ZmZlclwiOiBcIl4xLjAuMFwiLFxuICAgIFwidmlueWwtc291cmNlLXN0cmVhbVwiOiBcIl4xLjEuMFwiLFxuICAgIFwid2F0Y2hpZnlcIjogXCJeMy40LjBcIlxuICB9LFxuICBcImJyb3dzZXJpZnlcIjoge1xuICAgIFwidHJhbnNmb3JtXCI6IFtcbiAgICAgIFwiYnJmc1wiXG4gICAgXVxuICB9XG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLy8gYWRkIHNvbWUgZXh0cmEgdmFyaWFibGVzIHRvIHRoZSBjb250YWluZXIuLlxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpXG4pO1xuXG5cbi8qKlxuICogVGhlIEFjY2Vzc2liaWxpdHkgbWFuYWdlciByZWFjcmVhdGVzIHRoZSBhYmlsaXR5IHRvIHRhYiBhbmQgYW5kIGhhdmUgY29udGVudCByZWFkIGJ5IHNjcmVlbiByZWFkZXJzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGFzIGl0IGNhbiBwb3NzaWJseSBoZWxwIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyBhY2Nlc3MgcGl4aSBjb250ZW50LlxuICogTXVjaCBsaWtlIGludGVyYWN0aW9uIGFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBtYWRlIGFjY2Vzc2libGUuIFRoaXMgbWFuYWdlciB3aWxsIG1hcCB0aGUgZXZlbnRzIGFzIGlmIHRoZSBtb3VzZSB3YXMgYmVpbmcgdXNlZCwgbWluaW1pemluZyB0aGUgZWZmZXJvdCByZXF1aXJlZCB0byBpbXBsZW1lbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqL1xuZnVuY3Rpb24gQWNjZXNzaWJpbGl0eU1hbmFnZXIocmVuZGVyZXIpXG57XG5cdC8vIGZpcnN0IHdlIGNyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFxuICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUubGVmdCA9IDA7XG4gICAvL1xuICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuICAgXHRcbiAgIFx0LyoqXG4gICBcdCAqIFRoaXMgaXMgdGhlIGRvbSBlbGVtZW50IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gICBcdHRoaXMuZGl2ID0gZGl2O1xuXG4gICBcdC8qKlxuICAgXHQgKiBBIHNpbXBsZSBwb29sIGZvciBzdG9yaW5nIGRpdnMuXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7QXJyYXl9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuIFx0dGhpcy5wb29sID0gW107XG5cbiBcdC8qKlxuIFx0ICogVGhpcyBpcyBhIHRpY2sgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHJlbmRlcmVkLlxuIFx0ICogXG4gXHQgKiBAdHlwZSB7TnVtYmVyfVxuIFx0ICogQHByaXZhdGVcbiBcdCAqL1xuICAgXHR0aGlzLnJlbmRlcklkID0gMDtcblxuICAgXHQvKipcbiAgIFx0ICogU2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB2aXN1YWxseSBzaG93IHRoZSBkaXZzXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgIFx0ICovXG4gICBcdHRoaXMuZGVidWcgPSBmYWxzZTtcblxuICBcdC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGFjY2Vzc2liaWxpdHkgbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgIFx0LyoqXG4gICAgICogVGhlIGFycmF5IG9mIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzaWJsZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHByZSBiaW5kIHRoZSBmdW5jdGlvbnMuLlxuICAgICAqL1xuICAgXHR0aGlzLl9vbktleURvd24gPSB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKTtcbiAgIFx0dGhpcy5fb25Nb3VzZU1vdmUgPSB0aGlzLl9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogc3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFuYWdlci4gSWYgdGhlcmUgYXJlIG5vIGFjY2Vzc2libGUgb2JqZWN0cyBvciB0aGUgbW91c2UgaXMgbW92aW5nIHRoZSB3aWxsIGJlIGZhbHNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cbiAgIFx0Ly8gbGV0IGxpc3RlbiBmb3IgdGFiLi4gb25jZSBwcmVzc2VkIHdlIGNhbiBmaXJlIHVwIGFuZCBzaG93IHRoZSBhY2Nlc3NpYmlsaXR5IGxheWVyXG4gICBcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG59XG5cblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xuXG4vKipcbiAqIEFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBzaG93bi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgcHJlc2VzIHRoZSB0YWIga2V5XG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHRydWUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub24oJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cblx0dGhpcy5yZW5kZXJlci52aWV3LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5kaXYpO1x0XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIGhpZGRlbi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgbW92ZXMgdGhlIG1vdXNlXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYoIXRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9mZigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlKTtcblxuXHR0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcblxufTtcblxuLyoqXG4gKiBUaGlzIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aWxsIHJ1biB0aHJvdWdodCBoZSBzY2VuZSBncmFwaCBhbmQgYWRkIGFueSBuZXcgYWNjZXNzaWJsZSBvYmplY3RzIHRvIHRoZSBET00gbGF5ZXIuXG4gKiBAcGFyYW0gZWxlbWVudCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgRGlzcGxheU9iamVjdCB0byBjaGVjay5cbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG5cdGlmKCFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZihkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGUgJiYgZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcblx0e1xuXHRcdGlmKCFkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlKVxuXHRcdHtcblx0XHRcdHRoaXMuYWRkQ2hpbGQoZGlzcGxheU9iamVjdCk7XG5cdFx0fVxuXHQgICBcdFxuXHQgICBcdGRpc3BsYXlPYmplY3QucmVuZGVySWQgPSB0aGlzLnJlbmRlcklkO1xuXHR9XG5cblx0dmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcblxuXHRmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcblx0XHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKGNoaWxkcmVuW2ldKTtcblx0fVxufTtcblxuXG4vKipcbiAqIEJlZm9yZSBlYWNoIHJlbmRlciB0aGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGRpdnMgYXJlIG1hcHBlZCBjb3JyZWN0bHkgdG8gdGhlaXIgRGlzcGxheU9iamVjdHNcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpXG57XG5cblx0Ly8gdXBkYXRlIGNoaWxkcmVuLi4uXG5cdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHModGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkKTtcblxuXHR2YXIgcmVjdCA9IHRoaXMucmVuZGVyZXIudmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0dmFyIHN4ID0gcmVjdC53aWR0aCAgLyB0aGlzLnJlbmRlcmVyLndpZHRoO1xuXHR2YXIgc3kgPSByZWN0LmhlaWdodCAvIHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuXG5cdHZhciBkaXYgPSB0aGlzLmRpdjtcblxuXHRkaXYuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICdweCc7XG5cdGRpdi5zdHlsZS50b3AgPSByZWN0LnRvcCArICdweCc7XG5cdGRpdi5zdHlsZS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggKyAncHgnO1xuXHRkaXYuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgKyAncHgnO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuXHRcdGlmKGNoaWxkLnJlbmRlcklkICE9PSB0aGlzLnJlbmRlcklkKVxuXHRcdHtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaSwgMSk7XG5cdFx0XHR0aGlzLmRpdi5yZW1vdmVDaGlsZCggY2hpbGQuX2FjY2Vzc2libGVEaXYgKTtcblx0XHRcdHRoaXMucG9vbC5wdXNoKGNoaWxkLl9hY2Nlc3NpYmxlRGl2KTtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlRGl2ID0gbnVsbDtcblxuXHRcdFx0aS0tO1xuXG5cdFx0XHRpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBtYXAgZGl2IHRvIGRpc3BsYXkuLlxuXHRcdFx0ZGl2ID0gY2hpbGQuX2FjY2Vzc2libGVEaXY7XG5cdFx0XHR2YXIgaGl0QXJlYSA9IGNoaWxkLmhpdEFyZWE7XG5cdFx0XHR2YXIgd3QgPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuXHRcdFx0aWYoY2hpbGQuaGl0QXJlYSlcblx0XHRcdHtcblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoKHd0LnR4ICsgKGhpdEFyZWEueCAqIHd0LmEpKSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKCh3dC50eSArIChoaXRBcmVhLnkgKiB3dC5kKSkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHd0LmEgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogd3QuZCAqIHN5KSArICdweCc7XG5cdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0aGl0QXJlYSA9IGNoaWxkLmdldEJvdW5kcygpO1xuXG5cdFx0XHRcdHRoaXMuY2FwSGl0QXJlYShoaXRBcmVhKTtcblxuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9IChoaXRBcmVhLnggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gIChoaXRBcmVhLnkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiBzeSkgKyAncHgnO1xuXHRcdFx0fVx0XHRcblx0XHR9XG5cdH1cblxuXHQvLyBpbmNyZW1lbnQgdGhlIHJlbmRlciBpZC4uXG5cdHRoaXMucmVuZGVySWQrKztcbn07XG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYXBIaXRBcmVhID0gZnVuY3Rpb24gKGhpdEFyZWEpXG57XG4gICAgaWYgKGhpdEFyZWEueCA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoICs9IGhpdEFyZWEueDtcbiAgICAgICAgaGl0QXJlYS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaGl0QXJlYS55IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ICs9IGhpdEFyZWEueTtcbiAgICAgICAgaGl0QXJlYS55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueCArIGhpdEFyZWEud2lkdGggPiB0aGlzLnJlbmRlcmVyLndpZHRoIClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoIC0gaGl0QXJlYS54O1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS55ICsgaGl0QXJlYS5oZWlnaHQgPiB0aGlzLnJlbmRlcmVyLmhlaWdodCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0IC0gaGl0QXJlYS55O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBBZGRzIGEgRGlzcGxheU9iamVjdCB0byB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuLy9cdHRoaXMuYWN0aXZhdGUoKTtcblx0XG5cdHZhciBkaXYgPSB0aGlzLnBvb2wucG9wKCk7XG5cblx0aWYoIWRpdilcblx0e1xuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBcblxuXHQgICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGVidWcgPyAncmdiYSgyNTUsMCwwLDAuNSknIDogJ3RyYW5zcGFyZW50Jztcblx0ICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdCAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcblx0ICAgIGRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdub25lJztcblxuXHQgICAgXG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX29uRm9jdXNPdXQuYmluZCh0aGlzKSk7XG5cdH1cblx0ICAgXHRcblxuXG5cblx0ZGl2LnRpdGxlID0gZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlVGl0bGUgfHwgJ2Rpc3BsYXlPYmplY3QgJyArIHRoaXMudGFiSW5kZXg7XG5cblx0Ly9cblx0XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUgPSB0cnVlO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ID0gZGl2O1xuXHRkaXYuZGlzcGxheU9iamVjdCA9IGRpc3BsYXlPYmplY3Q7XG5cblxuXHR0aGlzLmNoaWxkcmVuLnB1c2goZGlzcGxheU9iamVjdCk7XG5cdHRoaXMuZGl2LmFwcGVuZENoaWxkKCBkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ICk7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYudGFiSW5kZXggPSBkaXNwbGF5T2JqZWN0LnRhYkluZGV4O1xufTtcblxuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBidXR0b24gcHJlc3MgdG8gcGl4aSdzIEludGVyYWN0aW9uTWFuYWdlciAoY2xpY2spXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnY2xpY2snLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3ZlcilcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1cyA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3V0KVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzT3V0ID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uS2V5RG93biA9IGZ1bmN0aW9uKGUpXG57XG5cdGlmKGUua2V5Q29kZSAhPT0gOSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuYWN0aXZhdGUoKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmUgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZGVhY3RpdmF0ZSgpO1xufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgXG57XG5cdHRoaXMuZGl2ID0gbnVsbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblx0XHR0aGlzLmNoaWxkcmVuW2ldLmRpdiA9IG51bGw7XG5cdH1cblxuXHRcblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuXHRcdFxuXHR0aGlzLnBvb2wgPSBudWxsO1xuXHR0aGlzLmNoaWxkcmVuID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5cbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYWNjZXNzaWJsZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmFjY2Vzc2liaWxpdHkuYWNjZXNzaWJsZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgYWNjZXNzaWJsZVRhcmdldCA9IHtcbiAgICBcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGVUaXRsZTpudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICB0YWJJbmRleDowLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZUFjdGl2ZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVEaXY6ZmFsc2VcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBhY2Nlc3NpYmxlVGFyZ2V0O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgYWNjZXNzaWJpbGl0eSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYWNjZXNzaWJsZVRhcmdldDogICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpLFxuICAgIEFjY2Vzc2liaWxpdHlNYW5hZ2VyOiByZXF1aXJlKCcuL0FjY2Vzc2liaWxpdHlNYW5hZ2VyJylcbn07XG4iLCIvKipcbiAqIENvbnN0YW50IHZhbHVlcyB1c2VkIGluIHBpeGlcbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG52YXIgQ09OU1QgPSB7XG4gICAgLyoqXG4gICAgICogU3RyaW5nIG9mIHRoZSBjdXJyZW50IFBJWEkgdmVyc2lvblxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBWRVJTSU9OXG4gICAgICovXG4gICAgVkVSU0lPTjogcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQSV8yIC0gVHdvIFBpXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFBJXzI6IE1hdGguUEkgKiAyLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJBRF9UT19ERUcgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyByYWRpYW5zIHRvIGRlZ3JlZXNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUkFEX1RPX0RFRzogMTgwIC8gTWF0aC5QSSxcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBERUdfVE9fUkFEIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgZGVncmVlcyB0byByYWRpYW5zXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIERFR19UT19SQUQ6IE1hdGguUEkgLyAxODAsXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgZnJhbWVzIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gVEFSR0VUX0ZQTVM9MC4wNlxuICAgICAqL1xuICAgIFRBUkdFVF9GUE1TOiAwLjA2LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgdG8gaWRlbnRpZnkgdGhlIFJlbmRlcmVyIFR5cGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFJFTkRFUkVSX1RZUEVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuV0VCR0xcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5DQU5WQVNcbiAgICAgKi9cbiAgICBSRU5ERVJFUl9UWVBFOiB7XG4gICAgICAgIFVOS05PV046ICAgIDAsXG4gICAgICAgIFdFQkdMOiAgICAgIDEsXG4gICAgICAgIENBTlZBUzogICAgIDJcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyBibGVuZCBtb2RlcyBzdXBwb3J0ZWQgYnkgUElYSS4gSU1QT1JUQU5UIC0gVGhlIFdlYkdMIHJlbmRlcmVyIG9ubHkgc3VwcG9ydHNcbiAgICAgKiB0aGUgTk9STUFMLCBBREQsIE1VTFRJUExZIGFuZCBTQ1JFRU4gYmxlbmQgbW9kZXMuIEFueXRoaW5nIGVsc2Ugd2lsbCBzaWxlbnRseSBhY3QgbGlrZVxuICAgICAqIE5PUk1BTC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gQkxFTkRfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkFERFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5NVUxUSVBMWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQ1JFRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuT1ZFUkxBWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5EQVJLRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTElHSFRFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9ET0RHRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9CVVJOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhBUkRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU09GVF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5ESUZGRVJFTkNFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkVYQ0xVU0lPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IVUVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0FUVVJBVElPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MVU1JTk9TSVRZXG4gICAgICovXG4gICAgQkxFTkRfTU9ERVM6IHtcbiAgICAgICAgTk9STUFMOiAgICAgICAgIDAsXG4gICAgICAgIEFERDogICAgICAgICAgICAxLFxuICAgICAgICBNVUxUSVBMWTogICAgICAgMixcbiAgICAgICAgU0NSRUVOOiAgICAgICAgIDMsXG4gICAgICAgIE9WRVJMQVk6ICAgICAgICA0LFxuICAgICAgICBEQVJLRU46ICAgICAgICAgNSxcbiAgICAgICAgTElHSFRFTjogICAgICAgIDYsXG4gICAgICAgIENPTE9SX0RPREdFOiAgICA3LFxuICAgICAgICBDT0xPUl9CVVJOOiAgICAgOCxcbiAgICAgICAgSEFSRF9MSUdIVDogICAgIDksXG4gICAgICAgIFNPRlRfTElHSFQ6ICAgICAxMCxcbiAgICAgICAgRElGRkVSRU5DRTogICAgIDExLFxuICAgICAgICBFWENMVVNJT046ICAgICAgMTIsXG4gICAgICAgIEhVRTogICAgICAgICAgICAxMyxcbiAgICAgICAgU0FUVVJBVElPTjogICAgIDE0LFxuICAgICAgICBDT0xPUjogICAgICAgICAgMTUsXG4gICAgICAgIExVTUlOT1NJVFk6ICAgICAxNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIHdlYmdsIGRyYXcgbW9kZXMuIFRoZXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggR0wgZHJhd01vZGUgdG8gdXNlXG4gICAgICogdW5kZXIgY2VydGFpbiBzaXR1YXRpb25zIGFuZCByZW5kZXJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5QT0lOVFNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfTE9PUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX0ZBTlxuICAgICAqL1xuICAgIERSQVdfTU9ERVM6IHtcbiAgICAgICAgUE9JTlRTOiAgICAgICAgIDAsXG4gICAgICAgIExJTkVTOiAgICAgICAgICAxLFxuICAgICAgICBMSU5FX0xPT1A6ICAgICAgMixcbiAgICAgICAgTElORV9TVFJJUDogICAgIDMsXG4gICAgICAgIFRSSUFOR0xFUzogICAgICA0LFxuICAgICAgICBUUklBTkdMRV9TVFJJUDogNSxcbiAgICAgICAgVFJJQU5HTEVfRkFOOiAgIDZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBwaXhpLlxuICAgICAqXG4gICAgICogVGhlIERFRkFVTFQgc2NhbGUgbW9kZSBhZmZlY3RzIHRoZSBkZWZhdWx0IHNjYWxpbmcgbW9kZSBvZiBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAgKiBJdCBjYW4gYmUgcmUtYXNzaWduZWQgdG8gZWl0aGVyIExJTkVBUiBvciBORUFSRVNULCBkZXBlbmRpbmcgdXBvbiBzdWl0YWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0NBTEVfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuREVGQVVMVD1MSU5FQVJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTElORUFSIFNtb290aCBzY2FsaW5nXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLk5FQVJFU1QgUGl4ZWxhdGluZyBzY2FsaW5nXG4gICAgICovXG4gICAgU0NBTEVfTU9ERVM6IHtcbiAgICAgICAgREVGQVVMVDogICAgMCxcbiAgICAgICAgTElORUFSOiAgICAgMCxcbiAgICAgICAgTkVBUkVTVDogICAgMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZml4IHRoYXQgZGVub3RlcyBhIFVSTCBpcyBmb3IgYSByZXRpbmEgYXNzZXRcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gUkVUSU5BX1BSRUZJWFxuICAgICAqL1xuICAgIC8vZXhhbXBsZTogJ0AyeCcsXG4gICAgUkVUSU5BX1BSRUZJWDogL0AoLispeC8sXG5cbiAgICBSRVNPTFVUSU9OOjEsXG5cbiAgICBGSUxURVJfUkVTT0xVVElPTjoxLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgcmVuZGVyIG9wdGlvbnMgaWYgbm9uZSBhcmUgc3VwcGxpZWQgdG8ge0BsaW5rIFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKiBvciB7QGxpbmsgUElYSS5DYW52YXNSZW5kZXJlcn0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERFRkFVTFRfUkVOREVSX09QVElPTlNcbiAgICAgKiBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnZpZXc9bnVsbFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy50cmFuc3BhcmVudD1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hbnRpYWxpYXM9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuZm9yY2VGWEFBPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnJlc29sdXRpb249MVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmF1dG9SZXNpemU9ZmFsc2VcbiAgICAgKi9cbiAgICBERUZBVUxUX1JFTkRFUl9PUFRJT05TOiB7XG4gICAgICAgIHZpZXc6IG51bGwsXG4gICAgICAgIHJlc29sdXRpb246IDEsXG4gICAgICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgICAgIGZvcmNlRlhBQTogZmFsc2UsXG4gICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgIGNsZWFyQmVmb3JlUmVuZGVyOiB0cnVlLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgICAgICByb3VuZFBpeGVsczogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnRzIHRoYXQgaWRlbnRpZnkgc2hhcGVzLCBtYWlubHkgdG8gcHJldmVudCBgaW5zdGFuY2VvZmAgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFU1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUE9MWT0wXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SRUNUPTFcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkNJUkM9MlxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuRUxJUD0zXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SUkVDPTRcbiAgICAgKi9cbiAgICBTSEFQRVM6IHtcbiAgICAgICAgUE9MWTogMCxcbiAgICAgICAgUkVDVDogMSxcbiAgICAgICAgQ0lSQzogMixcbiAgICAgICAgRUxJUDogMyxcbiAgICAgICAgUlJFQzogNFxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBtYXliZSBjaGFuZ2UgdG8gU1BSSVRFLkJBVENIX1NJWkU6IDIwMDBcbiAgICAvLyBUT0RPOiBtYXliZSBhZGQgUEFSVElDTEUuQkFUQ0hfU0laRTogMTUwMDBcbiAgICBTUFJJVEVfQkFUQ0hfU0laRTogMjAwMCAvL25pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSBhbmQgZGVza3RvcCBtYWNoaW5lc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDT05TVDtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gcmVxdWlyZSgnLi9EaXNwbGF5T2JqZWN0JyksXG4gICAgUmVuZGVyVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgQ29udGFpbmVyIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0cy5cbiAqIEl0IGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBkaXNwbGF5IG9iamVjdHMgdGhhdCBhY3QgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIG9iamVjdHMuXG4gKlxuICpgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiBgYGBcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5EaXNwbGF5T2JqZWN0XG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDb250YWluZXIoKVxue1xuICAgIERpc3BsYXlPYmplY3QuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdFtdfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERpc3BsYXlPYmplY3QucHJvdG90eXBlKTtcbkNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5lcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udGFpbmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gMTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIGhlaWdodCA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBPdmVycmlkYWJsZSBtZXRob2QgdGhhdCBjYW4gYmUgdXNlZCBieSBDb250YWluZXIgc3ViY2xhc3NlcyB3aGVuZXZlciB0aGUgY2hpbGRyZW4gYXJyYXkgaXMgbW9kaWZpZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7fTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lci5cbiAqIFxuICogWW91IGNhbiBhbHNvIGFkZCBtdWx0cGxlIGl0ZW1zIGxpa2Ugc286IG15Q29udGFpbmVyLmFkZENoaWxkKHRoaW5rT25lLCB0aGluZ1R3bywgdGhpbmdUaHJlZSlcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBhZGQgdG8gdGhlIGNvbnRhaW5lclxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57IFxuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaGFzIGEgcGFyZW50IHRoZW4gbGV0cyByZW1vdmUgaXQgYXMgUGl4aSBvYmplY3RzIGNhbiBvbmx5IGV4aXN0IGluIG9uZSBwbGFjZVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UodGhpcy5jaGlsZHJlbi5sZW5ndGgtMSk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lciBhdCBhIHNwZWNpZmllZCBpbmRleC4gSWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd25cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRvIGFkZFxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBwbGFjZSB0aGUgY2hpbGQgaW5cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkQXQgPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hpbGQgKyAnYWRkQ2hpbGRBdDogVGhlIGluZGV4ICcrIGluZGV4ICsnIHN1cHBsaWVkIGlzIG91dCBvZiBib3VuZHMgJyArIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiAyIERpc3BsYXkgT2JqZWN0cyB3aXRoaW4gdGhpcyBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKiBAcGFyYW0gY2hpbGQyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc3dhcENoaWxkcmVuID0gZnVuY3Rpb24gKGNoaWxkLCBjaGlsZDIpXG57XG4gICAgaWYgKGNoaWxkID09PSBjaGlsZDIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluZGV4MSA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG4gICAgdmFyIGluZGV4MiA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZDIpO1xuXG4gICAgaWYgKGluZGV4MSA8IDAgfHwgaW5kZXgyIDwgMClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3dhcENoaWxkcmVuOiBCb3RoIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0cyBtdXN0IGJlIGNoaWxkcmVuIG9mIHRoZSBjYWxsZXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDFdID0gY2hpbGQyO1xuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgyXSA9IGNoaWxkO1xuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleDEgPCBpbmRleDIgPyBpbmRleDEgOiBpbmRleDIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBwb3NpdGlvbiBvZiBhIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgdG8gaWRlbnRpZnlcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdCB0byBpZGVudGlmeVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiBhbiBleGlzdGluZyBjaGlsZCBpbiB0aGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIGZvciB3aGljaCB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGluZGV4IG51bWJlclxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSByZXN1bHRpbmcgaW5kZXggbnVtYmVyIGZvciB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuXG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgY3VycmVudEluZGV4LCAxKTsgLy8gcmVtb3ZlIGZyb20gb2xkIHBvc2l0aW9uXG4gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsgLy9hZGQgYXQgbmV3IHBvc2l0aW9uXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBhdFxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgYXQgdGhlIGdpdmVuIGluZGV4LCBpZiBhbnkuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDaGlsZEF0OiBTdXBwbGllZCBpbmRleCAnICsgaW5kZXggKyAnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjaGlsZCBsaXN0LCBvciB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baW5kZXhdO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW1vdmVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIHNwZWNpZmllZCBpbmRleCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgZnJvbVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIHZhciBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRBdChpbmRleCk7XG5cbiAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIGNvbnRhaW5lciB0aGF0IGFyZSB3aXRoaW4gdGhlIGJlZ2luIGFuZCBlbmQgaW5kZXhlcy5cbiAqXG4gKiBAcGFyYW0gYmVnaW5JbmRleCB7bnVtYmVyfSBUaGUgYmVnaW5uaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gKiBAcGFyYW0gZW5kSW5kZXgge251bWJlcn0gVGhlIGVuZGluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzaXplIG9mIHRoZSBjb250YWluZXIuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbiAoYmVnaW5JbmRleCwgZW5kSW5kZXgpXG57XG4gICAgdmFyIGJlZ2luID0gYmVnaW5JbmRleCB8fCAwO1xuICAgIHZhciBlbmQgPSB0eXBlb2YgZW5kSW5kZXggPT09ICdudW1iZXInID8gZW5kSW5kZXggOiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgcmFuZ2UgPSBlbmQgLSBiZWdpbjtcbiAgICB2YXIgcmVtb3ZlZCwgaTtcblxuICAgIGlmIChyYW5nZSA+IDAgJiYgcmFuZ2UgPD0gZW5kKVxuICAgIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGJlZ2luLCByYW5nZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0ucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShiZWdpbkluZGV4KTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZ2UgPT09IDAgJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyZW1vdmVDaGlsZHJlbjogbnVtZXJpYyB2YWx1ZXMgYXJlIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UuJyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIgZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSBmYWxzZTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkNvbnRhaW5lci5wcm90b3R5cGUuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtID0gQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIHRoZSBib3VuZHMgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCB0aGlzIHJlbmRlciBzZXNzaW9uIHNvIHJldHVybiB3aGF0IHdlIGhhdmVcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgY2hpbGRCb3VuZHM7XG4gICAgICAgIHZhciBjaGlsZE1heFg7XG4gICAgICAgIHZhciBjaGlsZE1heFk7XG5cbiAgICAgICAgdmFyIGNoaWxkVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgY2hpbGRCb3VuZHMgPSB0aGlzLmNoaWxkcmVuW2ldLmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBtaW5YID0gbWluWCA8IGNoaWxkQm91bmRzLnggPyBtaW5YIDogY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIG1pblkgPSBtaW5ZIDwgY2hpbGRCb3VuZHMueSA/IG1pblkgOiBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBjaGlsZE1heFggPSBjaGlsZEJvdW5kcy53aWR0aCArIGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICBjaGlsZE1heFkgPSBjaGlsZEJvdW5kcy5oZWlnaHQgKyBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBtYXhYID0gbWF4WCA+IGNoaWxkTWF4WCA/IG1heFggOiBjaGlsZE1heFg7XG4gICAgICAgICAgICBtYXhZID0gbWF4WSA+IGNoaWxkTWF4WSA/IG1heFkgOiBjaGlsZE1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkVmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJHZXRCb3VuZHMgPSBDb250YWluZXIucHJvdG90eXBlLmdldEJvdW5kcztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5vbi1nbG9iYWwgbG9jYWwgYm91bmRzIG9mIHRoZSBDb250YWluZXIgYXMgYSByZWN0YW5nbGUuXG4gKiBUaGUgY2FsY3VsYXRpb24gdGFrZXMgYWxsIHZpc2libGUgY2hpbGRyZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4Q2FjaGUgPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdGguTWF0cml4LklERU5USVRZO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdHJpeENhY2hlO1xuXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMoIG1hdGguTWF0cml4LklERU5USVRZICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICBcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpLCBqO1xuXG4gICAgLy8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyBlbGVtZW50IGhhcyBhIG1hc2sgb3IgYSBmaWx0ZXIuXG4gICAgaWYgKHRoaXMuX21hc2sgfHwgdGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuXG4gICAgICAgIC8vIHB1c2ggZmlsdGVyIGZpcnN0IGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyBjb3JyZWN0IGZvciBhbnkgbWFza2luZ1xuICAgICAgICBpZiAodGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRoaXMsIHRoaXMuX2ZpbHRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnB1c2hNYXNrKHRoaXMsIHRoaXMuX21hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgLy8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBiYXRjaCwgb25seSByZW5kZXJlZCBpZiBpdCBoYXMgYSB0ZXh0dXJlLlxuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIG1ha2Ugc3VyZSB0aGV5IGdldCByZW5kZXJlZFxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmlsdGVycylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gc2ltcGxlIHJlbmRlciBjaGlsZHJlbiFcbiAgICAgICAgZm9yIChpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnJlbmRlcldlYkdMKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3ViY2xhc3NcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyB0aGlzIGlzIHdoZXJlIGNvbnRlbnQgaXRzZWxmIGdldHMgcmVuZGVyZWQuLi5cbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpc1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMuYWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcy5fbWFzaywgcmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlckNhbnZhcyhyZW5kZXJlcik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFzaylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2socmVuZGVyZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcbntcbiAgICBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBpZiAoZGVzdHJveUNoaWxkcmVuKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KGRlc3Ryb3lDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9UcmFuc2Zvcm0nKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgIF90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgdGhhdCBhcmUgcmVuZGVyZWQgb24gdGhlIHNjcmVlbi5cbiAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvbiBpdHMgb3duIHJhdGhlciBpdCBzaG91bGQgYmUgZXh0ZW5kZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIERpc3BsYXlPYmplY3QoKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29vcmRpbmF0ZSBvZiB0aGUgb2JqZWN0IHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy50cmFuc2Zvcm0ucG9zaXRpb247XG4gICAvLyB0aGlzLl9wb3NpdGlvbiA9IG5ldyBDYWNoZVBvaW50KHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIGZhY3RvciBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlID0gdGhpcy50cmFuc2Zvcm0uc2NhbGVcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXZvdCBwb2ludCBvZiB0aGUgZGlzcGxheU9iamVjdCB0aGF0IGl0IHJvdGF0ZXMgYXJvdW5kXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucGl2b3QgPSB0aGlzLnRyYW5zZm9ybS5waXZvdFxuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2tldyBmYWN0b3IgZm9yIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5za2V3ID0gdGhpcy50cmFuc2Zvcm0uc2tld1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9yb3RhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BhY2l0eSBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpc2liaWxpdHkgb2YgdGhlIG9iamVjdC4gSWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biwgYW5kXG4gICAgICogdGhlIHVwZGF0ZVRyYW5zZm9ybSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDYW4gdGhpcyBvYmplY3QgYmUgcmVuZGVyZWQsIGlmIGZhbHNlIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgZHJhd24gYnV0IHRoZSB1cGRhdGVUcmFuc2Zvcm1cbiAgICAgKiBtZXRob2RzIHdpbGwgc3RpbGwgYmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmFibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIHRoaXMgZGlzcGxheSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNvbnRhaW5lcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbXVsdGlwbGllZCBhbHBoYSBvZiB0aGUgZGlzcGxheU9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRyYW5zZm9ybSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIHdvcmxkIChwYXJlbnQpIGZhY3RvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gdGhpcy50cmFuc2Zvcm0ubG9jYWxUcmFuc2Zvcm07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJlYSB0aGUgZmlsdGVyIGlzIGFwcGxpZWQgdG8uIFRoaXMgaXMgdXNlZCBhcyBtb3JlIG9mIGFuIG9wdGltaXNhdGlvblxuICAgICAqIHJhdGhlciB0aGFuIGZpZ3VyaW5nIG91dCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgZGlzcGxheU9iamVjdCBlYWNoIGZyYW1lIHlvdSBjYW4gc2V0IHRoaXMgcmVjdGFuZ2xlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xuXG4gICAgLyoqeHd3XG4gICAgICogY2FjaGVkIHNpbiByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3IgPSAwO1xuXG4gICAgLyoqXG4gICAgICogY2FjaGVkIGNvcyByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3IgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRzID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vc3QgdXAtdG8tZGF0ZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcmlnaW5hbCwgY2FjaGVkIG1hc2sgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXNrID0gbnVsbDtcblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGF5T2JqZWN0O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB4IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NhbGVYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByb3RhdGlvbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY3IgPSBNYXRoLmNvcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHNwcml0ZSBpcyBnbG9iYWxseSB2aXNpYmxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHdvcmxkVmlzaWJsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcztcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbWFzayBmb3IgdGhlIGRpc3BsYXlPYmplY3QuIEEgbWFzayBpcyBhbiBvYmplY3QgdGhhdCBsaW1pdHMgdGhlIHZpc2liaWxpdHkgb2YgYW4gb2JqZWN0IHRvIHRoZSBzaGFwZSBvZiB0aGUgbWFzayBhcHBsaWVkIHRvIGl0LlxuICAgICAqIEluIFBJWEkgYSByZWd1bGFyIG1hc2sgbXVzdCBiZSBhIFBJWEkuR3JhcGhpY3Mgb3IgYSBQSVhJLlNwcml0ZSBvYmplY3QuIFRoaXMgYWxsb3dzIGZvciBtdWNoIGZhc3RlciBtYXNraW5nIGluIGNhbnZhcyBhcyBpdCB1dGlsaXNlcyBzaGFwZSBjbGlwcGluZy5cbiAgICAgKiBUbyByZW1vdmUgYSBtYXNrLCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc3xQSVhJLlNwcml0ZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIG1hc2s6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFzaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX21hc2sgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFzay5yZW5kZXJhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVycyBmb3IgdGhlIGRpc3BsYXlPYmplY3QuXG4gICAgICogKiBJTVBPUlRBTlQ6IFRoaXMgaXMgYSB3ZWJHTCBvbmx5IGZlYXR1cmUgYW5kIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqIFRvIHJlbW92ZSBmaWx0ZXJzIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnbnVsbCdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGZpbHRlcnM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLnNsaWNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gdmFsdWUgJiYgdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBUT0RPIC0gT3B0aW1pemF0aW9uIHBhc3MhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgLy8gbXVsdGlwbHkgdGhlIGFscGhhcy4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG59O1xuXG4vLyBwZXJmb3JtYW5jZSBpbmNyZWFzZSB0byBhdm9pZCB1c2luZyBjYWxsLi4gKDEweCBmYXN0ZXIpXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtID0gRGlzcGxheU9iamVjdC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtO1xuXG4vKipcbiAqXG4gKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeCkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMobWF0aC5NYXRyaXguSURFTlRJVFkpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvR2xvYmFsID0gZnVuY3Rpb24gKHBvc2l0aW9uKVxue1xuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb3RcbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseShwb3NpdGlvbik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdCByZWxhdGl2ZSB0byBhbm90aGVyIHBvaW50XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcGFyYW0gW2Zyb21dIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgZ2xvYmFsIHBvc2l0aW9uIGZyb21cbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgUG9pbnQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvTG9jYWwgPSBmdW5jdGlvbiAocG9zaXRpb24sIGZyb20sIHBvaW50KVxue1xuICAgIGlmIChmcm9tKVxuICAgIHtcbiAgICAgICAgcG9zaXRpb24gPSBmcm9tLnRvR2xvYmFsKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBzaW1wbHkgYXBwbHkgdGhlIG1hdHJpeC4uXG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvc2l0aW9uLCBwb2ludCk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFyZW50IENvbnRhaW5lciBvZiB0aGlzIERpc3BsYXlPYmplY3RcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdG8gYWRkIHRoaXMgRGlzcGxheU9iamVjdCB0b1xuICogQHJldHVybiB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRoYXQgdGhpcyBEaXNwbGF5T2JqZWN0IHdhcyBhZGRlZCB0b1xuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXIuYWRkQ2hpbGQpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFBhcmVudDogQXJndW1lbnQgbXVzdCBiZSBhIENvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRDaGlsZCh0aGlzKTtcbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzZXQgdGhlIHBvc3Rpb24sIHNjYWxlLCBza2V3IGFuZCBwaXZvdCBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBUaGUgWCBwb3NpdGlvblxuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IFRoZSBZIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3NjYWxlWD0xXSB7bnVtYmVyfSBUaGUgWCBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtzY2FsZVk9MV0ge251bWJlcn0gVGhlIFkgc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbcm90YXRpb249MF0ge251bWJlcn0gVGhlIHJvdGF0aW9uXG4gKiBAcGFyYW0gW3NrZXdYPTBdIHtudW1iZXJ9IFRoZSBYIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbc2tld1k9MF0ge251bWJlcn0gVGhlIFkgc2tldyB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFg9MF0ge251bWJlcn0gVGhlIFggcGl2b3QgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RZPTBdIHtudW1iZXJ9IFRoZSBZIHBpdm90IHZhbHVlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKHgsIHksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZLCBwaXZvdFgsIHBpdm90WSkgLy9qc2hpbnQgaWdub3JlOmxpbmVcbntcbiAgICB0aGlzLnBvc2l0aW9uLnggPSB4IHx8IDA7XG4gICAgdGhpcy5wb3NpdGlvbi55ID0geSB8fCAwO1xuICAgIHRoaXMuc2NhbGUueCA9ICFzY2FsZVggPyAxIDogc2NhbGVYO1xuICAgIHRoaXMuc2NhbGUueSA9ICFzY2FsZVkgPyAxIDogc2NhbGVZO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgIHRoaXMuc2tldy54ID0gc2tld1ggfHwgMDtcbiAgICB0aGlzLnNrZXcueSA9IHNrZXdZIHx8IDA7XG4gICAgdGhpcy5waXZvdC54ID0gcGl2b3RYIHx8IDA7XG4gICAgdGhpcy5waXZvdC55ID0gcGl2b3RZIHx8IDA7XG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEJhc2UgZGVzdHJveSBtZXRob2QgZm9yIGdlbmVyaWMgZGlzcGxheSBvYmplY3RzXG4gKlxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcblxuICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2NhbGUgPSBudWxsO1xuICAgIHRoaXMucGl2b3QgPSBudWxsO1xuICAgIHRoaXMuc2tldyA9IG51bGw7XG5cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcblxuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IG1hdGguUG9pbnQoMSwxKTtcbiAgICB0aGlzLnBpdm90ID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNrZXcgPSBuZXcgbWF0aC5Qb2ludCgwLjApO1xuICAgIFxuICAgIHRoaXMucm90YXRpb24gPSAwO1xuICAgIHRoaXMuX3NyID0gTWF0aC5zaW4oMCk7XG4gICAgdGhpcy5fY3IgPSBNYXRoLmNvcygwKTtcbiAgICBcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufVxuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHJhbnNmb3JtO1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uIChwYXJlbnRUcmFuc2Zvcm0pXG57XG4gICAgdmFyIHB0ID0gcGFyZW50VHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGx0ID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcblxuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueDtcbiAgICAgICAgbHQuYiAgPSAgdGhpcy5fc3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmMgID0gLXRoaXMuX3NyICogdGhpcy5zY2FsZS55O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQudHggPSAgdGhpcy5wb3NpdGlvbi54IC0gKHRoaXMucGl2b3QueCAqIGx0LmEgKyB0aGlzLnBpdm90LnkgKiBsdC5jKTtcbiAgICAgICAgbHQudHkgPSAgdGhpcy5wb3NpdGlvbi55IC0gKHRoaXMucGl2b3QueCAqIGx0LmIgKyB0aGlzLnBpdm90LnkgKiBsdC5kKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmRpcnR5IHx8IHBhcmVudC5kaXJ0eSlcbiAgICB7ICAgICAgXG4gICAgICAgIC8vIGNvbmNhdCB0aGUgcGFyZW50IG1hdHJpeCB3aXRoIHRoZSBvYmplY3RzIHRyYW5zZm9ybS5cbiAgICAgICAgd3QuYSAgPSBsdC5hICAqIHB0LmEgKyBsdC5iICAqIHB0LmM7XG4gICAgICAgIHd0LmIgID0gbHQuYSAgKiBwdC5iICsgbHQuYiAgKiBwdC5kO1xuICAgICAgICB3dC5jICA9IGx0LmMgICogcHQuYSArIGx0LmQgICogcHQuYztcbiAgICAgICAgd3QuZCAgPSBsdC5jICAqIHB0LmIgKyBsdC5kICAqIHB0LmQ7XG4gICAgICAgIHd0LnR4ID0gbHQudHggKiBwdC5hICsgbHQudHkgKiBwdC5jICsgcHQudHg7XG4gICAgICAgIHd0LnR5ID0gbHQudHggKiBwdC5iICsgbHQudHkgKiBwdC5kICsgcHQudHk7ICAgICAgIFxuICAgIFxuICAgLy8gICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgLy8gICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbi8vICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgLy8gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm07XG5cblxuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vR3JhcGhpY3NEYXRhJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcFBvaW50ID0gbmV3IG1hdGguUG9pbnQoKTtcblxuLyoqXG4gKiBUaGUgR3JhcGhpY3MgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB1c2VkIHRvIGRyYXcgcHJpbWl0aXZlIHNoYXBlcyBzdWNoIGFzIGxpbmVzLCBjaXJjbGVzIGFuZFxuICogcmVjdGFuZ2xlcyB0byB0aGUgZGlzcGxheSwgYW5kIHRvIGNvbG9yIGFuZCBmaWxsIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3MoKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCAodGhpY2tuZXNzKSBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gMDtcblxuICAgIC8qKlxuICAgICAqIEdyYXBoaWNzIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQXBwbHkgYSB2YWx1ZSBvZiAweEZGRkZGRiB0byByZXNldCB0aGUgdGludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByZXZpb3VzIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVXNlZCB0byBjb21wYXJlIHRvIHRoZSBjdXJyZW50IHRpbnQgYW5kIGNoZWNrIGlmIHRoZXJlcyBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMuX3ByZXZUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUw7XG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHBhdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBjb250YWluaW5nIHNvbWUgV2ViR0wtcmVsYXRlZCBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgb2JqZWN0Pn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIFRPRE8gLSBfd2ViZ2wgc2hvdWxkIHVzZSBhIHByb3RvdHlwZSBvYmplY3QsIG5vdCBhIHJhbmRvbSB1bmRvY3VtZW50ZWQgb2JqZWN0Li4uXG4gICAgdGhpcy5fd2ViR0wgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBzaGFwZSBpcyBiZWluZyB1c2VkIGFzIGEgbWFzay5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc01hc2sgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBib3VuZHMnIHBhZGRpbmcgdXNlZCBmb3IgYm91bmRzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYm91bmRzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBsb2NhbCBib3VuZHMgdG8gcHJldmVudCByZWNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLDAsMSwxKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgV2ViR0wgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlXG4gICAgICogZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgY2FjaGVkIHNwcml0ZSBvYmplY3QgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGNhY2hlQXNCaXRtYXAgaXMgc2V0IHRvIHRydWUgdGhlIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIGFzIGlmIGl0IHdhcyBhIHNwcml0ZS5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGdyYXBoaWNzIGVsZW1lbnQgZG9lcyBub3QgY2hhbmdlIG9mdGVuLCBhcyBpdCB3aWxsIHNwZWVkIHVwIHRoZSByZW5kZXJpbmdcbiAgICAgKiBvZiB0aGUgb2JqZWN0IGluIGV4Y2hhbmdlIGZvciB0YWtpbmcgdXAgdGV4dHVyZSBtZW1vcnkuIEl0IGlzIGFsc28gdXNlZnVsIGlmIHlvdSBuZWVkIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB0byBiZSBhbnRpLWFsaWFzZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyBjYW52YXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGlmXG4gICAgICogeW91IGFyZSBjb25zdGFudGx5IHJlZHJhd2luZyB0aGUgZ3JhcGhpY3MgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhY2hlQXNCaXRtYXBcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkdyYXBoaWNzI1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5HcmFwaGljcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3M7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICogTm90ZSB0aGF0IHRoZSBvbmx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIGNsb25lZCwgbm90IGl0cyB0cmFuc2Zvcm0gKHBvc2l0aW9uLHNjYWxlLGV0YylcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjbG9uZSA9IG5ldyBHcmFwaGljcygpO1xuXG4gICAgY2xvbmUucmVuZGVyYWJsZSAgICA9IHRoaXMucmVuZGVyYWJsZTtcbiAgICBjbG9uZS5maWxsQWxwaGEgICAgID0gdGhpcy5maWxsQWxwaGE7XG4gICAgY2xvbmUubGluZVdpZHRoICAgICA9IHRoaXMubGluZVdpZHRoO1xuICAgIGNsb25lLmxpbmVDb2xvciAgICAgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICBjbG9uZS50aW50ICAgICAgICAgID0gdGhpcy50aW50O1xuICAgIGNsb25lLmJsZW5kTW9kZSAgICAgPSB0aGlzLmJsZW5kTW9kZTtcbiAgICBjbG9uZS5pc01hc2sgICAgICAgID0gdGhpcy5pc01hc2s7XG4gICAgY2xvbmUuYm91bmRzUGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcbiAgICBjbG9uZS5kaXJ0eSAgICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5nbERpcnR5ICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRoaXMuY2FjaGVkU3ByaXRlRGlydHk7XG5cbiAgICAvLyBjb3B5IGdyYXBoaWNzIGRhdGFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgY2xvbmUuZ3JhcGhpY3NEYXRhLnB1c2godGhpcy5ncmFwaGljc0RhdGFbaV0uY2xvbmUoKSk7XG4gICAgfVxuXG4gICAgY2xvbmUuY3VycmVudFBhdGggPSBjbG9uZS5ncmFwaGljc0RhdGFbY2xvbmUuZ3JhcGhpY3NEYXRhLmxlbmd0aCAtIDFdO1xuXG4gICAgY2xvbmUudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgIHJldHVybiBjbG9uZTtcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsaW5lIHN0eWxlIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gR3JhcGhpY3MgbWV0aG9kcyBzdWNoIGFzIHRoZSBsaW5lVG8oKSBtZXRob2Qgb3IgdGhlIGRyYXdDaXJjbGUoKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lU3R5bGUgPSBmdW5jdGlvbiAobGluZVdpZHRoLCBjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGggfHwgMDtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5saW5lQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGhhbGZ3YXkgdGhyb3VnaCBhIGxpbmU/IHN0YXJ0IGEgbmV3IG9uZSFcbiAgICAgICAgICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24odGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMuc2xpY2UoLTIpKTtcbiAgICAgICAgICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0cyBlbXB0eSBzbyBsZXRzIGp1c3Qgc2V0IHRoZSBsaW5lIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQWxwaGEgPSB0aGlzLmxpbmVBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBNb3ZlcyB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvIHgsIHkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gICovXG5HcmFwaGljcy5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihbeCx5XSk7XG4gICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgbGluZSB1c2luZyB0aGUgY3VycmVudCBsaW5lIHN0eWxlIGZyb20gdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byAoeCwgeSk7XG4gKiBUaGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIGlzIHRoZW4gc2V0IHRvICh4LCB5KS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeCwgeSk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsIDApO1xuICAgIH1cblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICB4YSA9IGZyb21YICsgKCAoY3BYIC0gZnJvbVgpICogaiApO1xuICAgICAgICB5YSA9IGZyb21ZICsgKCAoY3BZIC0gZnJvbVkpICogaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCB4YSArICggKChjcFggKyAoICh0b1ggLSBjcFgpICogaiApKSAtIHhhKSAqIGogKSxcbiAgICAgICAgICAgICAgICAgICAgIHlhICsgKCAoKGNwWSArICggKHRvWSAtIGNwWSkgKiBqICkpIC0geWEpICogaiApICk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSBjcFgyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgY3BYMiwgY3BZMiwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciBuID0gMjAsXG4gICAgICAgIGR0LFxuICAgICAgICBkdDIsXG4gICAgICAgIGR0MyxcbiAgICAgICAgdDIsXG4gICAgICAgIHQzLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIGR0ID0gKDEgLSBqKTtcbiAgICAgICAgZHQyID0gZHQgKiBkdDtcbiAgICAgICAgZHQzID0gZHQyICogZHQ7XG5cbiAgICAgICAgdDIgPSBqICogajtcbiAgICAgICAgdDMgPSB0MiAqIGo7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIGR0MyAqIGZyb21YICsgMyAqIGR0MiAqIGogKiBjcFggKyAzICogZHQgKiB0MiAqIGNwWDIgKyB0MyAqIHRvWCxcbiAgICAgICAgICAgICAgICAgICAgIGR0MyAqIGZyb21ZICsgMyAqIGR0MiAqIGogKiBjcFkgKyAzICogZHQgKiB0MiAqIGNwWTIgKyB0MyAqIHRvWSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmNUbygpIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSBiZXR3ZWVuIHR3byB0YW5nZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFwiYm9ycm93ZWRcIiBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZnhjYW52YXMvIC0gdGhhbmtzIGdvb2dsZSFcbiAqXG4gKiBAcGFyYW0geDEge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHgyIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTIge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjVG8gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIHJhZGl1cylcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyh4MSwgeTEpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyxcbiAgICAgICAgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSxcbiAgICAgICAgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSxcbiAgICAgICAgYTEgPSBmcm9tWSAtIHkxLFxuICAgICAgICBiMSA9IGZyb21YIC0geDEsXG4gICAgICAgIGEyID0geTIgICAtIHkxLFxuICAgICAgICBiMiA9IHgyICAgLSB4MSxcbiAgICAgICAgbW0gPSBNYXRoLmFicyhhMSAqIGIyIC0gYjEgKiBhMik7XG5cbiAgICBpZiAobW0gPCAxLjBlLTggfHwgcmFkaXVzID09PSAwKVxuICAgIHtcbiAgICAgICAgaWYgKHBvaW50c1twb2ludHMubGVuZ3RoLTJdICE9PSB4MSB8fCBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSAhPT0geTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIGRkID0gYTEgKiBhMSArIGIxICogYjEsXG4gICAgICAgICAgICBjYyA9IGEyICogYTIgKyBiMiAqIGIyLFxuICAgICAgICAgICAgdHQgPSBhMSAqIGEyICsgYjEgKiBiMixcbiAgICAgICAgICAgIGsxID0gcmFkaXVzICogTWF0aC5zcXJ0KGRkKSAvIG1tLFxuICAgICAgICAgICAgazIgPSByYWRpdXMgKiBNYXRoLnNxcnQoY2MpIC8gbW0sXG4gICAgICAgICAgICBqMSA9IGsxICogdHQgLyBkZCxcbiAgICAgICAgICAgIGoyID0gazIgKiB0dCAvIGNjLFxuICAgICAgICAgICAgY3ggPSBrMSAqIGIyICsgazIgKiBiMSxcbiAgICAgICAgICAgIGN5ID0gazEgKiBhMiArIGsyICogYTEsXG4gICAgICAgICAgICBweCA9IGIxICogKGsyICsgajEpLFxuICAgICAgICAgICAgcHkgPSBhMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHF4ID0gYjIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBxeSA9IGEyICogKGsxICsgajIpLFxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IE1hdGguYXRhbjIocHkgLSBjeSwgcHggLSBjeCksXG4gICAgICAgICAgICBlbmRBbmdsZSAgID0gTWF0aC5hdGFuMihxeSAtIGN5LCBxeCAtIGN4KTtcblxuICAgICAgICB0aGlzLmFyYyhjeCArIHgxLCBjeSArIHkxLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBiMSAqIGEyID4gYjIgKiBhMSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmMgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlICh1c2VkIHRvIGNyZWF0ZSBjaXJjbGVzLCBvciBwYXJ0cyBvZiBjaXJjbGVzKS5cbiAqXG4gKiBAcGFyYW0gY3gge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBjeSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBzdGFydEFuZ2xlIHtudW1iZXJ9IFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucyAoMCBpcyBhdCB0aGUgMyBvJ2Nsb2NrIHBvc2l0aW9uIG9mIHRoZSBhcmMncyBjaXJjbGUpXG4gKiBAcGFyYW0gZW5kQW5nbGUge251bWJlcn0gVGhlIGVuZGluZyBhbmdsZSwgaW4gcmFkaWFuc1xuICogQHBhcmFtIGFudGljbG9ja3dpc2Uge2Jvb2xlYW59IE9wdGlvbmFsLiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgY291bnRlcmNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuIEZhbHNlIGlzIGRlZmF1bHQsIGFuZCBpbmRpY2F0ZXMgY2xvY2t3aXNlLCB3aGlsZSB0cnVlIGluZGljYXRlcyBjb3VudGVyLWNsb2Nrd2lzZS5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmMgPSBmdW5jdGlvbihjeCwgY3ksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UpXG57XG4gICAgYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gZW5kQW5nbGUpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiggIWFudGljbG9ja3dpc2UgJiYgZW5kQW5nbGUgPD0gc3RhcnRBbmdsZSApXG4gICAge1xuICAgICAgICBlbmRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG4gICAgZWxzZSBpZiggYW50aWNsb2Nrd2lzZSAmJiBzdGFydEFuZ2xlIDw9IGVuZEFuZ2xlIClcbiAgICB7XG4gICAgICAgIHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuXG4gICAgdmFyIHN3ZWVwID0gYW50aWNsb2Nrd2lzZSA/IChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpICogLTEgOiAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKTtcbiAgICB2YXIgc2VncyA9ICBNYXRoLmNlaWwoTWF0aC5hYnMoc3dlZXApIC8gKE1hdGguUEkgKiAyKSkgKiA0MDtcblxuICAgIGlmKHN3ZWVwID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0WCA9IGN4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXM7XG4gICAgdmFyIHN0YXJ0WSA9IGN5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXM7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyhzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIHRoZXRhID0gc3dlZXAvKHNlZ3MqMik7XG4gICAgdmFyIHRoZXRhMiA9IHRoZXRhKjI7XG5cbiAgICB2YXIgY1RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgICB2YXIgc2VnTWludXMgPSBzZWdzIC0gMTtcblxuICAgIHZhciByZW1haW5kZXIgPSAoIHNlZ01pbnVzICUgMSApIC8gc2VnTWludXM7XG5cbiAgICBmb3IodmFyIGk9MDsgaTw9c2VnTWludXM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciByZWFsID0gIGkgKyByZW1haW5kZXIgKiBpO1xuXG5cbiAgICAgICAgdmFyIGFuZ2xlID0gKCh0aGV0YSkgKyBzdGFydEFuZ2xlICsgKHRoZXRhMiAqIHJlYWwpKTtcblxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgdmFyIHMgPSAtTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCggKGNUaGV0YSAqICBjKSArIChzVGhldGEgKiBzKSApICogcmFkaXVzICsgY3gsXG4gICAgICAgICAgICAgICAgICAgICggKGNUaGV0YSAqIC1zKSArIChzVGhldGEgKiBjKSApICogcmFkaXVzICsgY3kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSBzaW1wbGUgb25lLWNvbG9yIGZpbGwgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIG90aGVyIEdyYXBoaWNzIG1ldGhvZHNcbiAqIChzdWNoIGFzIGxpbmVUbygpIG9yIGRyYXdDaXJjbGUoKSkgdXNlIHdoZW4gZHJhd2luZy5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmVnaW5GaWxsID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmZpbGxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGwgPSB0aGlzLmZpbGxpbmc7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxDb2xvciA9IHRoaXMuZmlsbENvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQWxwaGEgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbGwgdG8gdGhlIGxpbmVzIGFuZCBzaGFwZXMgdGhhdCB3ZXJlIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhlIGJlZ2luRmlsbCgpIG1ldGhvZC5cbiAqXG4gKiBAcmV0dXJuIHtHcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmVuZEZpbGwgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gbnVsbDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5SZWN0YW5nbGUoeCx5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBSYWRpdXMgb2YgdGhlIHJlY3RhbmdsZSBjb3JuZXJzXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JvdW5kZWRSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdDaXJjbGUgPSBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkNpcmNsZSh4LHksIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhlIGVsbGlwc2VcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3RWxsaXBzZSA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgcG9seWdvbiB1c2luZyB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCB7bnVtYmVyW118UElYSS5Qb2ludFtdfSBUaGUgcGF0aCBkYXRhIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwb2x5Z29uLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24gKHBhdGgpXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBhdGg7XG5cbiAgICB2YXIgY2xvc2VkID0gdHJ1ZTtcblxuICAgIGlmIChwb2ludHMgaW5zdGFuY2VvZiBtYXRoLlBvbHlnb24pXG4gICAge1xuICAgICAgICBjbG9zZWQgPSBwb2ludHMuY2xvc2VkO1xuICAgICAgICBwb2ludHMgPSBwb2ludHMucG9pbnRzO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50c1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24ocG9pbnRzKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBjbG9zZWQ7XG5cbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBncmFwaGljcyB0aGF0IHdlcmUgZHJhd24gdG8gdGhpcyBHcmFwaGljcyBvYmplY3QsIGFuZCByZXNldHMgZmlsbCBhbmQgbGluZSBzdHlsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuY2xlYXJEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZ2VvbWV0cnkgaXMgY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2hvdWxkIGJlIG9uZSBvZiB0aGUgc2NhbGVNb2RlIGNvbnN0c1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdFxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG5cbiAgICByZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCAqIHJlc29sdXRpb24sIGJvdW5kcy5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY2FudmFzQnVmZmVyLmNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgdGhlIHNwcml0ZSBpcyBub3QgdmlzaWJsZSBvciB0aGUgYWxwaGEgaXMgMCB0aGVuIG5vIG5lZWQgdG8gcmVuZGVyIHRoaXMgZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuZ2xEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzLnJlbmRlcih0aGlzKTtcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmlzTWFzayA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdGludCBoYXMgY2hhbmdlZCwgc2V0IHRoZSBncmFwaGljcyBvYmplY3QgdG8gZGlydHkuXG4gICAgaWYgKHRoaXMuX3ByZXZUaW50ICE9PSB0aGlzLnRpbnQpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjb2RlIG1heSBzdGlsbCBiZSBuZWVkZWQgc28gbGVhdmluZyBmb3Igbm93Li5cbiAgICAvL1xuICAgIC8qXG4gICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXApXG4gICAge1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSB8fCB0aGlzLmNhY2hlZFNwcml0ZURpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSgpO1xuXG4gICAgICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xuXG4gICAgICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMuX2NhY2hlZFNwcml0ZSwgcmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb247XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjb250ZXh0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGdyYXBoaWMgc2hhcGUgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gVGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlLCBkZWZhdWx0cyB0byB0aGlzXG4gKiAgb2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuXG4gICAgICAgIC8vIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGl0ZW0gaXMgYSBtYXNrIVxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyYWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgICAgICAgICAgdGhpcy5nbERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2xvY2FsQm91bmRzO1xuXG4gICAgICAgIHZhciB3MCA9IGJvdW5kcy54O1xuICAgICAgICB2YXIgdzEgPSBib3VuZHMud2lkdGggKyBib3VuZHMueDtcblxuICAgICAgICB2YXIgaDAgPSBib3VuZHMueTtcbiAgICAgICAgdmFyIGgxID0gYm91bmRzLmhlaWdodCArIGJvdW5kcy55O1xuXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciBtYXhYID0geDE7XG4gICAgICAgIHZhciBtYXhZID0geTE7XG5cbiAgICAgICAgdmFyIG1pblggPSB4MTtcbiAgICAgICAgdmFyIG1pblkgPSB5MTtcblxuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy54ID0gbWluWDtcbiAgICAgICAgdGhpcy5fYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IHRoaXMuX2JvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIGdyYXBoaWNzIG9iamVjdFxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5HcmFwaGljcy5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIGdyYXBoaWNzRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoIWRhdGEuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGRlYWwgd2l0aCBmaWxscy4uXG4gICAgICAgIGlmIChkYXRhLnNoYXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIGRhdGEuc2hhcGUuY29udGFpbnMoIHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSApIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICpcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUxvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGlmICh0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB2YXIgc2hhcGUsIHBvaW50cywgeCwgeSwgdywgaDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG4gICAgICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVCB8fCB0eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueCAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gUE9MWVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSAyKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvaW50c1tqKzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblggPSB4LWxpbmVXaWR0aCA8IG1pblggPyB4LWxpbmVXaWR0aCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSB4K2xpbmVXaWR0aCA+IG1heFggPyB4K2xpbmVXaWR0aCA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IHktbGluZVdpZHRoIDwgbWluWSA/IHktbGluZVdpZHRoIDogbWluWTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IHkrbGluZVdpZHRoID4gbWF4WSA/IHkrbGluZVdpZHRoIDogbWF4WTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgbWluWCA9IDA7XG4gICAgICAgIG1heFggPSAwO1xuICAgICAgICBtaW5ZID0gMDtcbiAgICAgICAgbWF4WSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy54ID0gbWluWCAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMud2lkdGggPSAobWF4WCAtIG1pblgpICsgcGFkZGluZyAqIDI7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy55ID0gbWluWSAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMuaGVpZ2h0ID0gKG1heFkgLSBtaW5ZKSArIHBhZGRpbmcgKiAyO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNhY2hlZCBzcHJpdGUgd2hlbiB0aGUgc3ByaXRlIGhhcyBjYWNoZUFzQml0bWFwID0gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgaWYgKCF0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzKTtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgU3ByaXRlKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyID0gY2FudmFzQnVmZmVyO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIucmVzaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gbGV2ZXJhZ2UgdGhlIGFuY2hvciB0byBhY2NvdW50IGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC5zYXZlKCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGFscGhhIG9mIHRoZSBncmFwaGljcyB0byAxIGZvciB0aGUgcmVuZGVyLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gbm93IHJlbmRlciB0aGUgZ3JhcGhpYy4uXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0KTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG59O1xuKi9cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjYWNoZWRTcHJpdGUgPSB0aGlzLl9jYWNoZWRTcHJpdGU7XG4gICAgdmFyIHRleHR1cmUgPSBjYWNoZWRTcHJpdGUudGV4dHVyZTtcbiAgICB2YXIgY2FudmFzID0gY2FjaGVkU3ByaXRlLmJ1ZmZlci5jYW52YXM7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLmZyYW1lLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLmZyYW1lLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICBjYWNoZWRTcHJpdGUuX3dpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIGNhY2hlZFNwcml0ZS5faGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgZGlydHkgYmFzZSB0ZXh0dXJlc1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZGlydHkoKTtcbn07Ki9cblxuLyoqXG4gKiBEZXN0cm95cyBhIHByZXZpb3VzIGNhY2hlZCBzcHJpdGUuXG4gKlxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3lDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS50ZXh0dXJlLmRlc3Ryb3kodHJ1ZSk7XG5cbiAgICAvLyBsZXQgdGhlIGdjIGNvbGxlY3QgdGhlIHVudXNlZCBzcHJpdGVcbiAgICAvLyBUT0RPIGNvdWxkIGJlIG9iamVjdCBwb29sZWQhXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07Ki9cblxuLyoqXG4gKiBEcmF3cyB0aGUgZ2l2ZW4gc2hhcGUgdG8gdGhpcyBHcmFwaGljcyBvYmplY3QuIENhbiBiZSBhbnkgb2YgQ2lyY2xlLCBSZWN0YW5nbGUsIEVsbGlwc2UsIExpbmUgb3IgUG9seWdvbi5cbiAqXG4gKiBAcGFyYW0gc2hhcGUge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX0gVGhlIGdlbmVyYXRlZCBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24gKHNoYXBlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgLy8gY2hlY2sgY3VycmVudCBwYXRoIVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IG5ldyBHcmFwaGljc0RhdGEodGhpcy5saW5lV2lkdGgsIHRoaXMubGluZUNvbG9yLCB0aGlzLmxpbmVBbHBoYSwgdGhpcy5maWxsQ29sb3IsIHRoaXMuZmlsbEFscGhhLCB0aGlzLmZpbGxpbmcsIHNoYXBlKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnB1c2goZGF0YSk7XG5cbiAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICB7XG4gICAgICAgIGRhdGEuc2hhcGUuY2xvc2VkID0gZGF0YS5zaGFwZS5jbG9zZWQgfHwgdGhpcy5maWxsaW5nO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBkZXN0cm95IGVhY2ggb2YgdGhlIEdyYXBoaWNzRGF0YSBvYmplY3RzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggd2ViZ2wgZGF0YSBlbnRyeSwgZGVzdHJveSB0aGUgV2ViR0xHcmFwaGljc0RhdGFcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl93ZWJnbCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3dlYmdsW2lkXS5kYXRhLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJnbFtpZF0uZGF0YVtqXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl93ZWJnbCA9IG51bGw7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBudWxsO1xufTtcbiIsIi8qKlxuICogQSBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBmaWxsQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbEFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGwgICAgICB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gKiBAcGFyYW0gc2hhcGUgICAgIHtDaXJjbGV8UmVjdGFuZ2xlfEVsbGlwc2V8TGluZXxQb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzRGF0YShsaW5lV2lkdGgsIGxpbmVDb2xvciwgbGluZUFscGhhLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgZmlsbCwgc2hhcGUpXG57XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IGxpbmVDb2xvcjtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVBbHBoYSA9IGxpbmVBbHBoYTtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMuX2xpbmVUaW50ID0gbGluZUNvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5fZmlsbFRpbnQgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICAgICAqL1xuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gICAgICovXG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFRoZSB0eXBlIG9mIHRoZSBzaGFwZSwgc2VlIHRoZSBDb25zdC5TaGFwZXMgZmlsZSBmb3IgYWxsIHRoZSBleGlzdGluZyB0eXBlcyxcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBzaGFwZS50eXBlO1xufVxuXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljc0RhdGEgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfVxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEdyYXBoaWNzRGF0YShcbiAgICAgICAgdGhpcy5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMubGluZUNvbG9yLFxuICAgICAgICB0aGlzLmxpbmVBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuZmlsbEFscGhhLFxuICAgICAgICB0aGlzLmZpbGwsXG4gICAgICAgIHRoaXMuc2hhcGVcbiAgICApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3MgZGF0YS5cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2hhcGUgPSBudWxsO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vV2ViR0xHcmFwaGljc0RhdGEnKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyJyksXG5cbiAgICAvLyBzb21lIGRyYXdpbmcgZnVuY3Rpb25zLi5cbiAgICBidWlsZExpbmUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkTGluZScpO1xuICAgIGJ1aWxkUG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRQb2x5Jyk7XG4gICAgYnVpbGRDb21wbGV4UG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRDb21wbGV4UG9seScpO1xuICAgIGJ1aWxkUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlJyk7XG4gICAgYnVpbGRDaXJjbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ2lyY2xlJyk7XG5cbiAgICBlYXJjdXQgPSByZXF1aXJlKCdlYXJjdXQnKTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBHcmFwaGljc1JlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgdGhpcy5ncmFwaGljc0RhdGFQb29sID0gW107XG5cbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBvaW50cyBhIHBvbHkgY2FuIGNvbnRhaW4gYmVmb3JlIGl0IGlzIHJlbmRlcmVkIGFzIGEgY29tcGxleCBwb2x5Z29uICh1c2luZyB0aGUgc3RlbmNpbCBidWZmZXIpXG4gICAgICogQHR5cGUge051bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heGltdW1TaW1wbGVQb2x5U2l6ZSA9IDIwMDtcbn1cblxuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2dyYXBoaWNzJywgR3JhcGhpY3NSZW5kZXJlcik7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZVxuICpcbiAqIEBwcml2YXRlXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy5nbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBuZXcgUHJpbWl0aXZlU2hhZGVyKHRoaXMuZ2wpXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgcmVuZGVyZXIuXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2xbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcbiAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIHZhciB3ZWJHTERhdGE7XG4gIC8vICBjb25zb2xlLmxvZyhncmFwaGljcylcbiAgICBpZiAoZ3JhcGhpY3MuZGlydHkgfHwgIWdyYXBoaWNzLl93ZWJHTFtnbC5pZF0pXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZUdyYXBoaWNzKGdyYXBoaWNzKTtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gVGhpcyAgY291bGQgYmUgc3BlZWRlZCB1cCBmb3Igc3VyZSFcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCBncmFwaGljcy5ibGVuZE1vZGUgKTtcblxuLy8gICAgdmFyIG1hdHJpeCA9ICBncmFwaGljcy53b3JsZFRyYW5zZm9ybS5jbG9uZSgpO1xuLy8gICAgdmFyIG1hdHJpeCA9ICByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXguY2xvbmUoKTtcbi8vICAgIG1hdHJpeC5hcHBlbmQoZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0pO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB3ZWJHTC5kYXRhLmxlbmd0aDsgaSA8IG47IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMLmRhdGFbaV0ubW9kZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy9UT0RPIGZpeCB0aGlzIG9uZSFcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnB1c2hTdGVuY2lsKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICBnbC51bmlmb3JtMWYocmVuZGVyZXIuc2hhZGVyTWFuYWdlci5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSAqIHdlYkdMRGF0YS5hbHBoYSk7XG5cbiAgICAgICAgICAgIC8vIHJlbmRlciBxdWFkLi5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgcmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucG9wU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICovXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHNoYWRlciA9IHRoaXMucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgICAgICAgICByZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50aW50ID0gdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5kcmF3Q291bnQrKztcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gdXBkYXRlXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnVwZGF0ZUdyYXBoaWNzID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBnZXQgdGhlIGNvbnRleHRzIGdyYXBoaWNzIG9iamVjdFxuICAgIHZhciB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF07XG5cbiAgICAvLyBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGRvZXMgbm90IGV4aXN0IGluIHRoZSB3ZWJHTCBjb250ZXh0IHRpbWUgdG8gY3JlYXRlIGl0IVxuICAgIGlmICghd2ViR0wpXG4gICAge1xuICAgICAgICB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF0gPSB7bGFzdEluZGV4OjAsIGRhdGE6W10sIGdsOmdsfTtcbiAgICB9XG5cbiAgIFxuICAgIC8vIGZsYWcgdGhlIGdyYXBoaWNzIGFzIG5vdCBkaXJ0eSBhcyB3ZSBhcmUgYWJvdXQgdG8gdXBkYXRlIGl0Li4uXG4gICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcblxuICAgIHZhciBpO1xuXG4gICAgLy8gaWYgdGhlIHVzZXIgY2xlYXJlZCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHdlIHdpbGwgbmVlZCB0byBjbGVhciBldmVyeSBvYmplY3RcbiAgICBpZiAoZ3JhcGhpY3MuY2xlYXJEaXJ0eSlcbiAgICB7XG4gICAgICAgIGdyYXBoaWNzLmNsZWFyRGlydHkgPSBmYWxzZTtcblxuICAgICAgICAvLyBsb29wIHRocm91Z2ggYW5kIHJldHVybiBhbGwgdGhlIHdlYkdMRGF0YXMgdG8gdGhlIG9iamVjdCBwb29sIHNvIHRoYW4gY2FuIGJlIHJldXNlZCBsYXRlciBvblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGdyYXBoaWNzRGF0YSA9IHdlYkdMLmRhdGFbaV07XG4gICAgICAgICAgICBncmFwaGljc0RhdGEucmVzZXQoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wdXNoKCBncmFwaGljc0RhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIHRoZSBhcnJheSBhbmQgcmVzZXQgdGhlIGluZGV4Li5cbiAgICAgICAgd2ViR0wuZGF0YSA9IFtdO1xuICAgICAgICB3ZWJHTC5sYXN0SW5kZXggPSAwO1xuICAgIH1cblxuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICAvLyBsb29wIHRocm91Z2ggdGhlIGdyYXBoaWNzIGRhdGFzIGFuZCBjb25zdHJ1Y3QgZWFjaCBvbmUuLlxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgYSBjb21wbGV4IGZpbGwgdGhlbiB0aGUgbmV3IHN0ZW5jaWwgYnVmZmVyIHRlY2huaXF1ZSB3aWxsIGJlIHVzZWRcbiAgICAvLyBvdGhlciB3aXNlIGdyYXBoaWNzIG9iamVjdHMgd2lsbCBiZSBwdXNoZWQgaW50byBhIGJhdGNoLi5cbiAgICBmb3IgKGkgPSB3ZWJHTC5sYXN0SW5kZXg7IGkgPCBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gbmVlZCB0byBhZGQgdGhlIHBvaW50cyB0aGUgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgICAgICAgICBkYXRhLnBvaW50cyA9IGRhdGEuc2hhcGUucG9pbnRzLnNsaWNlKCk7XG4gICAgICAgICAgICBpZiAoZGF0YS5zaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gY2xvc2UgdGhlIHBvbHkgaWYgdGhlIHZhbHVlIGlzIHRydWUhXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzWzBdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMl0gfHwgZGF0YS5wb2ludHNbMV0gIT09IGRhdGEucG9pbnRzW2RhdGEucG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucG9pbnRzLnB1c2goZGF0YS5wb2ludHNbMF0sIGRhdGEucG9pbnRzWzFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1BS0UgU1VSRSBXRSBIQVZFIFRIRSBDT1JSRUNUIFRZUEUuLlxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoID49IDYpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoIDwgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgKiAyKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FuRHJhd1VzaW5nU2ltcGxlID0gYnVpbGRQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuRHJhd1VzaW5nU2ltcGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGggPiAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG4gICAgICAgICAgICAgICAgYnVpbGRMaW5lKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQyB8fCBkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5FTElQKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkQ2lyY2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2ViR0wubGFzdEluZGV4Kys7XG4gICAgfVxuXG4gICAgLy8gdXBsb2FkIGFsbCB0aGUgZGlydHkgZGF0YS4uLlxuICAgIGZvciAoaSA9IDA7IGkgPCB3ZWJHTC5kYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVtpXTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLmRpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEudXBsb2FkKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB3ZWJHTCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IFRPRE8gQEFsdmluXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnN3aXRjaE1vZGUgPSBmdW5jdGlvbiAod2ViR0wsIHR5cGUpXG57XG4gICAgdmFyIHdlYkdMRGF0YTtcblxuICAgIGlmICghd2ViR0wuZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgd2ViR0xEYXRhLm1vZGUgPSB0eXBlO1xuICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVt3ZWJHTC5kYXRhLmxlbmd0aC0xXTtcblxuICAgICAgICBpZiAoKHdlYkdMRGF0YS5wb2ludHMubGVuZ3RoID4gMzIwMDAwKSB8fCB3ZWJHTERhdGEubW9kZSAhPT0gdHlwZSB8fCB0eXBlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgICAgIHdlYkdMLmRhdGEucHVzaCh3ZWJHTERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd2ViR0xEYXRhLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB3ZWJHTERhdGE7XG59O1xuXG4iLCIvKipcbiAqIEFuIG9iamVjdCBjb250YWluaW5nIFdlYkdMIHNwZWNpZmljIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBXZWJHTEdyYXBoaWNzRGF0YShnbCkge1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLy9UT0RPIGRvZXMgdGhpcyBuZWVkIHRvIGJlIHNwbGl0IGJlZm9yZSB1cGxvZGluZz8/XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgY29sb3IgY29tcG9uZW50cyAocixnLGIpXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5jb2xvciA9IFswLDAsMF07IC8vIGNvbG9yIHNwbGl0IVxuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgcG9pbnRzIHRvIGRyYXdcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50W119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IFtdO1xuICAgIC8qKlxuICAgICAqIFRoZSBtYWluIGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggYnVmZmVyXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogdG9kbyBAYWx2aW5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tb2RlID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgZ3JhcGhpY3MgaXMgZGlydHkgb3Igbm90XG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn1cblxuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xHcmFwaGljc0RhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIFJlc2V0cyB0aGUgdmVydGljZXMgYW5kIHRoZSBpbmRpY2VzXG4gKi9cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnBvaW50cy5sZW5ndGggPSAwO1xuICAgIHRoaXMuaW5kaWNlcy5sZW5ndGggPSAwO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbi8vICAgIHRoaXMubGFzdEluZGV4ID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDtcbiAgICB0aGlzLmdsUG9pbnRzID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnBvaW50cyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5idWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmdsUG9pbnRzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmdsSW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmluZGljZXMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5nbEluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuY29sb3IgPSBudWxsO1xuICAgIHRoaXMucG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIFxuICAgIHRoaXMuZ2wgPSBudWxsO1xuXG4gICAgdGhpcy5idWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5nbFBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5nbEluZGljZXMgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihnbClcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBnbCxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgZmxpcFk7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIHZlYzMgdGludDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvciAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpXG4gICAgKTtcbn1cblxuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHJpbWl0aXZlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBjaXJjbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRyYXdcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDaXJjbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgdmFyIGNpcmNsZURhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSBjaXJjbGVEYXRhLng7XG4gICAgdmFyIHkgPSBjaXJjbGVEYXRhLnk7XG4gICAgdmFyIHdpZHRoO1xuICAgIHZhciBoZWlnaHQ7XG5cbiAgICAvLyBUT0RPIC0gYml0IGhhY2t5Pz9cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSBjaXJjbGVEYXRhLnJhZGl1cztcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS53aWR0aDtcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHRvdGFsU2VncyA9IE1hdGguZmxvb3IoMzAgKiBNYXRoLnNxcnQoY2lyY2xlRGF0YS5yYWRpdXMpKSB8fCBNYXRoLmZsb29yKDE1ICogTWF0aC5zcXJ0KGNpcmNsZURhdGEud2lkdGggKyBjaXJjbGVEYXRhLmhlaWdodCkpO1xuICAgIHZhciBzZWcgPSAoTWF0aC5QSSAqIDIpIC8gdG90YWxTZWdzIDtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTZWdzICsgMSA7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaCh4LHksIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgeSArIE1hdGguY29zKHNlZyAqIGkpICogaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MrKywgdmVjUG9zKyspO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcy0xKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cy5wdXNoKHggKyBNYXRoLnNpbihzZWcgKiBpKSAqIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBidWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENpcmNsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21wbGV4IHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENvbXBsZXhQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vVE9ETyAtIG5vIG5lZWQgdG8gY29weSB0aGlzIGFzIGl0IGdldHMgdHVybmVkIGludG8gYSBGTG9hdDMyQXJyYXkgYW55d2F5cy4uXG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHMuc2xpY2UoKTtcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB3ZWJHTERhdGEucG9pbnRzID0gcG9pbnRzO1xuICAgIHdlYkdMRGF0YS5hbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgd2ViR0xEYXRhLmNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcblxuICAgIC8vIGNhbGNsYXRlIHRoZSBib3VuZHMuLlxuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgdmFyIHgseTtcblxuICAgIC8vIGdldCBzaXplLi5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrPTIpXG4gICAge1xuICAgICAgICB4ID0gcG9pbnRzW2ldO1xuICAgICAgICB5ID0gcG9pbnRzW2krMV07XG5cbiAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBxdWFkIHRvIHRoZSBlbmQgY29zIHRoZXJlIGlzIG5vIHBvaW50IG1ha2luZyBhbm90aGVyIGJ1ZmZlciFcbiAgICBwb2ludHMucHVzaChtaW5YLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWF4WSxcbiAgICAgICAgICAgICAgICBtaW5YLCBtYXhZKTtcblxuICAgIC8vIHB1c2ggYSBxdWFkIG9udG8gdGhlIGVuZC4uXG5cbiAgICAvL1RPRE8gLSB0aGlzIGFpbnQgbmVlZGVkIVxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goIGkgKTtcbiAgICB9XG5cbn07XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29tcGxleFBvbHk7IiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZExpbmUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gVE9ETyBPUFRJTUlTRSFcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGxpbmUgd2lkdGggaXMgYW4gb2RkIG51bWJlciBhZGQgMC41IHRvIGFsaWduIHRvIGEgd2hvbGUgcGl4ZWxcbiAgICAvLyBjb21tZW50aW5nIHRoaXMgb3V0IGZpeGVzICM3MTEgYW5kICMxNjIwXG4gICAgLy8gaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGglMilcbiAgICAvLyB7XG4gICAgLy8gICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAgIHBvaW50c1tpXSArPSAwLjU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGZpcnN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgdmFyIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IHBvaW50IGlzIHRoZSBsYXN0IHBvaW50IC0gZ29ubmEgaGF2ZSBpc3N1ZXMgOilcbiAgICBpZiAoZmlyc3RQb2ludC54ID09PSBsYXN0UG9pbnQueCAmJiBmaXJzdFBvaW50LnkgPT09IGxhc3RQb2ludC55KVxuICAgIHtcbiAgICAgICAgLy8gbmVlZCB0byBjbG9uZSBhcyB3ZSBhcmUgZ29pbmcgdG8gc2xpZ2h0bHkgbW9kaWZ5IHRoZSBzaGFwZS4uXG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5zbGljZSgpO1xuXG4gICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHZhciBtaWRQb2ludFggPSBsYXN0UG9pbnQueCArIChmaXJzdFBvaW50LnggLSBsYXN0UG9pbnQueCkgKjAuNTtcbiAgICAgICAgdmFyIG1pZFBvaW50WSA9IGxhc3RQb2ludC55ICsgKGZpcnN0UG9pbnQueSAtIGxhc3RQb2ludC55KSAqMC41O1xuXG4gICAgICAgIHBvaW50cy51bnNoaWZ0KG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICAgICAgcG9pbnRzLnB1c2gobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgdmFyIGluZGV4Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIHZhciBpbmRleFN0YXJ0ID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAvLyBEUkFXIHRoZSBMaW5lXG4gICAgdmFyIHdpZHRoID0gZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEubGluZUNvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEubGluZUFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHB4LCBweSwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeTtcbiAgICB2YXIgcGVycHgsIHBlcnB5LCBwZXJwMngsIHBlcnAyeSwgcGVycDN4LCBwZXJwM3k7XG4gICAgdmFyIGExLCBiMSwgYzEsIGEyLCBiMiwgYzI7XG4gICAgdmFyIGRlbm9tLCBwZGlzdCwgZGlzdDtcblxuICAgIHAxeCA9IHBvaW50c1swXTtcbiAgICBwMXkgPSBwb2ludHNbMV07XG5cbiAgICBwMnggPSBwb2ludHNbMl07XG4gICAgcDJ5ID0gcG9pbnRzWzNdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSAgcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcblxuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIC8vIHN0YXJ0XG4gICAgdmVydHMucHVzaChwMXggLSBwZXJweCAsIHAxeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDF4ICsgcGVycHggLCBwMXkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoLTE7IGkrKylcbiAgICB7XG4gICAgICAgIHAxeCA9IHBvaW50c1soaS0xKSoyXTtcbiAgICAgICAgcDF5ID0gcG9pbnRzWyhpLTEpKjIgKyAxXTtcblxuICAgICAgICBwMnggPSBwb2ludHNbKGkpKjJdO1xuICAgICAgICBwMnkgPSBwb2ludHNbKGkpKjIgKyAxXTtcblxuICAgICAgICBwM3ggPSBwb2ludHNbKGkrMSkqMl07XG4gICAgICAgIHAzeSA9IHBvaW50c1soaSsxKSoyICsgMV07XG5cbiAgICAgICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgICAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgICAgICBwZXJwMnggPSAtKHAyeSAtIHAzeSk7XG4gICAgICAgIHBlcnAyeSA9IHAyeCAtIHAzeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAyeCpwZXJwMnggKyBwZXJwMnkqcGVycDJ5KTtcbiAgICAgICAgcGVycDJ4IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeSAvPSBkaXN0O1xuICAgICAgICBwZXJwMnggKj0gd2lkdGg7XG4gICAgICAgIHBlcnAyeSAqPSB3aWR0aDtcblxuICAgICAgICBhMSA9ICgtcGVycHkgKyBwMXkpIC0gKC1wZXJweSArIHAyeSk7XG4gICAgICAgIGIxID0gKC1wZXJweCArIHAyeCkgLSAoLXBlcnB4ICsgcDF4KTtcbiAgICAgICAgYzEgPSAoLXBlcnB4ICsgcDF4KSAqICgtcGVycHkgKyBwMnkpIC0gKC1wZXJweCArIHAyeCkgKiAoLXBlcnB5ICsgcDF5KTtcbiAgICAgICAgYTIgPSAoLXBlcnAyeSArIHAzeSkgLSAoLXBlcnAyeSArIHAyeSk7XG4gICAgICAgIGIyID0gKC1wZXJwMnggKyBwMngpIC0gKC1wZXJwMnggKyBwM3gpO1xuICAgICAgICBjMiA9ICgtcGVycDJ4ICsgcDN4KSAqICgtcGVycDJ5ICsgcDJ5KSAtICgtcGVycDJ4ICsgcDJ4KSAqICgtcGVycDJ5ICsgcDN5KTtcblxuICAgICAgICBkZW5vbSA9IGExKmIyIC0gYTIqYjE7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8IDAuMSApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgZGVub20rPTEwLjE7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4ID0gKGIxKmMyIC0gYjIqYzEpL2Rlbm9tO1xuICAgICAgICBweSA9IChhMipjMSAtIGExKmMyKS9kZW5vbTtcblxuXG4gICAgICAgIHBkaXN0ID0gKHB4IC1wMngpICogKHB4IC1wMngpICsgKHB5IC1wMnkpICogKHB5IC1wMnkpO1xuXG5cbiAgICAgICAgaWYgKHBkaXN0ID4gMTQwICogMTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICBwZXJwM3ggPSBwZXJweCAtIHBlcnAyeDtcbiAgICAgICAgICAgIHBlcnAzeSA9IHBlcnB5IC0gcGVycDJ5O1xuXG4gICAgICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAzeCpwZXJwM3ggKyBwZXJwM3kqcGVycDN5KTtcbiAgICAgICAgICAgIHBlcnAzeCAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN5IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3ggKj0gd2lkdGg7XG4gICAgICAgICAgICBwZXJwM3kgKj0gd2lkdGg7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJwM3gsIHAyeSArcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGV4Q291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmVydHMucHVzaChweCAsIHB5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIChweC1wMngpLCBwMnkgLSAocHkgLSBwMnkpKTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcDF4ID0gcG9pbnRzWyhsZW5ndGgtMikqMl07XG4gICAgcDF5ID0gcG9pbnRzWyhsZW5ndGgtMikqMiArIDFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWyhsZW5ndGgtMSkqMl07XG4gICAgcDJ5ID0gcG9pbnRzWyhsZW5ndGgtMSkqMiArIDFdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KyspO1xuICAgIH1cblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0LTEpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZExpbmU7IiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5XZWJHTEdyYXBoaWNzRGF0YX0gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChwb2ludHMsIG51bGwsIDIpO1xuXG4gICAgaWYgKCF0cmlhbmdsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoIC8gNjtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gK3ZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZXJ0UG9zKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2ZXJ0cy5wdXNoKHBvaW50c1tpICogMl0sIHBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFBvbHk7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gLS0tIC8vXG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgLy9cbiAgICB2YXIgcmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSByZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSByZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICAvLyBzdGFydFxuICAgICAgICB2ZXJ0cy5wdXNoKHgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCAsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIC8vIGluc2VydCAyIGRlYWQgdHJpYW5nbGVzLi5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRQb3MsIHZlcnRQb3MsIHZlcnRQb3MrMSwgdmVydFBvcysyLCB2ZXJ0UG9zKzMsIHZlcnRQb3MrMyk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFt4LCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHldO1xuXG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUmVjdGFuZ2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcbiAgICBcbi8qKlxuICogQnVpbGRzIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbmJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcnJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcnJlY3REYXRhLng7XG4gICAgdmFyIHkgPSBycmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSBycmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJyZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICB2YXIgcmFkaXVzID0gcnJlY3REYXRhLnJhZGl1cztcblxuICAgIHZhciByZWNQb2ludHMgPSBbXTtcbiAgICByZWNQb2ludHMucHVzaCh4LCB5ICsgcmFkaXVzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHgsIHkgKyBoZWlnaHQsIHggKyByYWRpdXMsIHkgKyBoZWlnaHQsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoLCB5ICsgcmFkaXVzLCB4ICsgd2lkdGgsIHksIHggKyB3aWR0aCAtIHJhZGl1cywgeSwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyByYWRpdXMsIHksIHgsIHksIHgsIHkgKyByYWRpdXMgKyAwLjAwMDAwMDAwMDEsIHJlY1BvaW50cyk7XG5cbiAgICAvLyB0aGlzIHRpbnkgbnVtYmVyIGRlYWxzIHdpdGggdGhlIGlzc3VlIHRoYXQgb2NjdXJzIHdoZW4gcG9pbnRzIG92ZXJsYXAgYW5kIGVhcmN1dCBmYWlscyB0byB0cmlhbmd1bGF0ZSB0aGUgaXRlbS5cbiAgICAvLyBUT0RPIC0gZml4IHRoaXMgcHJvcGVybHksIHRoaXMgaXMgbm90IHZlcnkgZWxlZ2FudC4uIGJ1dCBpdCB3b3JrcyBmb3Igbm93LlxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocmVjUG9pbnRzLCBudWxsLCAyKTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlY1BvaW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaChyZWNQb2ludHNbaV0sIHJlY1BvaW50c1srK2ldLCByLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gcmVjUG9pbnRzO1xuXG4gICAgICAgIHRoaXMuYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUuIChoZWxwZXIgZnVuY3Rpb24uLilcbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZyb21YIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gZnJvbVkge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEBwYXJhbSBbb3V0XSB7bnVtYmVyW119IFRoZSBvdXRwdXQgYXJyYXkgdG8gYWRkIHBvaW50cyBpbnRvLiBJZiBub3QgcGFzc2VkLCBhIG5ldyBhcnJheSBpcyBjcmVhdGVkLlxuICogQHJldHVybiB7bnVtYmVyW119IGFuIGFycmF5IG9mIHBvaW50c1xuICovXG5xdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IGZ1bmN0aW9uIChmcm9tWCwgZnJvbVksIGNwWCwgY3BZLCB0b1gsIHRvWSwgb3V0KVxue1xuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIHhiLFxuICAgICAgICB5YixcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSBvdXQgfHwgW107XG5cbiAgICBmdW5jdGlvbiBnZXRQdChuMSAsIG4yLCBwZXJjKSB7XG4gICAgICAgIHZhciBkaWZmID0gbjIgLSBuMTtcblxuICAgICAgICByZXR1cm4gbjEgKyAoIGRpZmYgKiBwZXJjICk7XG4gICAgfVxuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKyApIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIC8vIFRoZSBHcmVlbiBMaW5lXG4gICAgICAgIHhhID0gZ2V0UHQoIGZyb21YICwgY3BYICwgaiApO1xuICAgICAgICB5YSA9IGdldFB0KCBmcm9tWSAsIGNwWSAsIGogKTtcbiAgICAgICAgeGIgPSBnZXRQdCggY3BYICwgdG9YICwgaiApO1xuICAgICAgICB5YiA9IGdldFB0KCBjcFkgLCB0b1kgLCBqICk7XG5cbiAgICAgICAgLy8gVGhlIEJsYWNrIERvdFxuICAgICAgICB4ID0gZ2V0UHQoIHhhICwgeGIgLCBqICk7XG4gICAgICAgIHkgPSBnZXRQdCggeWEgLCB5YiAsIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUm91bmRlZFJlY3RhbmdsZTsiLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBjb3JlIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSVxuICovXG4vLyBleHBvcnQgY29yZSBhbmQgY29uc3QuIFdlIGFzc2lnbiBjb3JlIHRvIGNvbnN0IHNvIHRoYXQgdGhlIG5vbi1yZWZlcmVuY2UgdHlwZXMgaW4gY29uc3QgcmVtYWluIGluLXRhY3RcbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduKHJlcXVpcmUoJy4vY29uc3QnKSwgcmVxdWlyZSgnLi9tYXRoJyksIHtcbiAgICAvLyB1dGlsc1xuICAgIHV0aWxzOiByZXF1aXJlKCcuL3V0aWxzJyksXG4gICAgdGlja2VyOiByZXF1aXJlKCcuL3RpY2tlcicpLFxuXG4gICAgLy8gZGlzcGxheVxuICAgIERpc3BsYXlPYmplY3Q6ICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9EaXNwbGF5T2JqZWN0JyksXG4gICAgQ29udGFpbmVyOiAgICAgICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuXG4gICAgLy8gc3ByaXRlc1xuICAgIFNwcml0ZTogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBQYXJ0aWNsZUNvbnRhaW5lcjogICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lcicpLFxuICAgIFNwcml0ZVJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHRcbiAgICBUZXh0OiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHQvVGV4dCcpLFxuXG4gICAgLy8gcHJpbWl0aXZlc1xuICAgIEdyYXBoaWNzOiAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGE6ICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRGF0YScpLFxuICAgIEdyYXBoaWNzUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dHVyZXNcbiAgICBUZXh0dXJlOiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBCYXNlVGV4dHVyZTogICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL0Jhc2VUZXh0dXJlJyksXG4gICAgUmVuZGVyVGV4dHVyZTogICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgQmFzZVJlbmRlclRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmU6ICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnM6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVGV4dHVyZVV2cycpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gY2FudmFzXG4gICAgQ2FudmFzUmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyJyksXG4gICAgQ2FudmFzR3JhcGhpY3M6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzJyksXG4gICAgQ2FudmFzQnVmZmVyOiAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gd2ViZ2xcbiAgICBXZWJHTFJlbmRlcmVyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgU2hhZGVyOiAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXInKSxcbiAgICBPYmplY3RSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFJlbmRlclRhcmdldDogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuXG4gICAgLy8gZmlsdGVycyAtIHdlYmdsXG4gICAgQWJzdHJhY3RGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlcicpLFxuICAgIEZYQUFGaWx0ZXI6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFNwcml0ZU1hc2tGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlcicpLFxuXG4gICAgZ2xDb3JlOiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3Qgd2hpY2ggcmVuZGVyZXIgeW91IHNob3VsZCBiZSB1c2luZy5cbiAgICAgKiBXZWJHTCBpcyB0aGUgcHJlZmVycmVkIHJlbmRlcmVyIGFzIGl0IGlzIGEgbG90IGZhc3Rlci4gSWYgd2ViR0wgaXMgbm90IHN1cHBvcnRlZCBieVxuICAgICAqIHRoZSBicm93c2VyIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhIGNhbnZhcyByZW5kZXJlclxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAcGFyYW0gd2lkdGg9ODAwIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gaGVpZ2h0PTYwMCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSByZW5kZXJlcnMgdmlld1xuICAgICAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gICAgICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZV0ge2Jvb2xlYW59IGVuYWJsZXMgZHJhd2luZyBidWZmZXIgcHJlc2VydmF0aW9uLCBlbmFibGUgdGhpcyBpZiB5b3VcbiAgICAgKiAgICAgIG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIsIHJldGluYSB3b3VsZCBiZSAyXG4gICAgICogQHBhcmFtIFtub1dlYkdMPWZhbHNlXSB7Ym9vbGVhbn0gcHJldmVudHMgc2VsZWN0aW9uIG9mIFdlYkdMIHJlbmRlcmVyLCBldmVuIGlmIHN1Y2ggaXMgcHJlc2VudFxuICAgICAqXG4gICAgICogQHJldHVybiB7V2ViR0xSZW5kZXJlcnxDYW52YXNSZW5kZXJlcn0gUmV0dXJucyBXZWJHTCByZW5kZXJlciBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBDYW52YXNSZW5kZXJlclxuICAgICAqL1xuICAgIGF1dG9EZXRlY3RSZW5kZXJlcjogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMsIG5vV2ViR0wpXG4gICAge1xuICAgICAgICB3aWR0aCA9IHdpZHRoIHx8IDgwMDtcbiAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0IHx8IDYwMDtcblxuICAgICAgICBpZiAoIW5vV2ViR0wgJiYgY29yZS51dGlscy5pc1dlYkdMU3VwcG9ydGVkKCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgY29yZS5XZWJHTFJlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBjb3JlLkNhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgIH1cbn0pO1xuIiwiLy8gQHRvZG8gLSBpZ25vcmUgdGhlIHRvbyBtYW55IHBhcmFtZXRlcnMgd2FybmluZyBmb3Igbm93XG4vLyBzaG91bGQgZWl0aGVyIGZpeCBpdCBvciBjaGFuZ2UgdGhlIGpzaGludCBjb25maWdcbi8vIGpzaGludCAtVzA3MlxuXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuL1BvaW50Jyk7XG5cbi8qKlxuICogVGhlIHBpeGkgTWF0cml4IGNsYXNzIGFzIGFuIG9iamVjdCwgd2hpY2ggbWFrZXMgaXQgYSBsb3QgZmFzdGVyLFxuICogaGVyZSBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIGl0IDpcbiAqIHwgYSB8IGIgfCB0eHxcbiAqIHwgYyB8IGQgfCB0eXxcbiAqIHwgMCB8IDAgfCAxIHxcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIE1hdHJpeCgpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmIgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmMgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnR4ID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eSA9IDA7XG59XG5cbk1hdHJpeC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNYXRyaXg7XG5tb2R1bGUuZXhwb3J0cyA9IE1hdHJpeDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgTWF0cml4IG9iamVjdCBiYXNlZCBvbiB0aGUgZ2l2ZW4gYXJyYXkuIFRoZSBFbGVtZW50IHRvIE1hdHJpeCBtYXBwaW5nIG9yZGVyIGlzIGFzIGZvbGxvd3M6XG4gKlxuICogYSA9IGFycmF5WzBdXG4gKiBiID0gYXJyYXlbMV1cbiAqIGMgPSBhcnJheVszXVxuICogZCA9IGFycmF5WzRdXG4gKiB0eCA9IGFycmF5WzJdXG4gKiB0eSA9IGFycmF5WzVdXG4gKlxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX0gVGhlIGFycmF5IHRoYXQgdGhlIG1hdHJpeCB3aWxsIGJlIHBvcHVsYXRlZCBmcm9tLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJheSlcbntcbiAgICB0aGlzLmEgPSBhcnJheVswXTtcbiAgICB0aGlzLmIgPSBhcnJheVsxXTtcbiAgICB0aGlzLmMgPSBhcnJheVszXTtcbiAgICB0aGlzLmQgPSBhcnJheVs0XTtcbiAgICB0aGlzLnR4ID0gYXJyYXlbMl07XG4gICAgdGhpcy50eSA9IGFycmF5WzVdO1xufTtcblxuXG4vKipcbiAqIHNldHMgdGhlIG1hdHJpeCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gKiBAcGFyYW0ge251bWJlcn0gY1xuICogQHBhcmFtIHtudW1iZXJ9IGRcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eFxuICogQHBhcmFtIHtudW1iZXJ9IHR5XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHR4LCB0eSlcbntcbiAgICB0aGlzLmEgPSBhO1xuICAgIHRoaXMuYiA9IGI7XG4gICAgdGhpcy5jID0gYztcbiAgICB0aGlzLmQgPSBkO1xuICAgIHRoaXMudHggPSB0eDtcbiAgICB0aGlzLnR5ID0gdHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGZyb20gdGhlIGN1cnJlbnQgTWF0cml4IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3NlIHtib29sZWFufSBXaGV0aGVyIHdlIG5lZWQgdG8gdHJhbnNwb3NlIHRoZSBtYXRyaXggb3Igbm90XG4gKiBAcGFyYW0gW291dF0ge0FycmF5fSBJZiBwcm92aWRlZCB0aGUgYXJyYXkgd2lsbCBiZSBhc3NpZ25lZCB0byBvdXRcbiAqIEByZXR1cm4ge251bWJlcltdfSB0aGUgbmV3bHkgY3JlYXRlZCBhcnJheSB3aGljaCBjb250YWlucyB0aGUgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICh0cmFuc3Bvc2UsIG91dClcbntcbiAgICBpZiAoIXRoaXMuYXJyYXkpXG4gICAge1xuICAgICAgICB0aGlzLmFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg5KTtcbiAgICB9XG5cbiAgICB2YXIgYXJyYXkgPSBvdXQgfHwgdGhpcy5hcnJheTtcblxuICAgIGlmICh0cmFuc3Bvc2UpXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzJdID0gMDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IDA7XG4gICAgICAgIGFycmF5WzZdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbN10gPSB0aGlzLnR5O1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGFycmF5WzBdID0gdGhpcy5hO1xuICAgICAgICBhcnJheVsxXSA9IHRoaXMuYztcbiAgICAgICAgYXJyYXlbMl0gPSB0aGlzLnR4O1xuICAgICAgICBhcnJheVszXSA9IHRoaXMuYjtcbiAgICAgICAgYXJyYXlbNF0gPSB0aGlzLmQ7XG4gICAgICAgIGFycmF5WzVdID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbNl0gPSAwO1xuICAgICAgICBhcnJheVs3XSA9IDA7XG4gICAgICAgIGFycmF5WzhdID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59O1xuXG4vKipcbiAqIEdldCBhIG5ldyBwb3NpdGlvbiB3aXRoIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXG4gKiBDYW4gYmUgdXNlZCB0byBnbyBmcm9tIGEgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlIHRvIHRoZSB3b3JsZCBjb29yZGluYXRlIHNwYWNlLiAoZS5nLiByZW5kZXJpbmcpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCB0cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIHggPSBwb3MueDtcbiAgICB2YXIgeSA9IHBvcy55O1xuXG4gICAgbmV3UG9zLnggPSB0aGlzLmEgKiB4ICsgdGhpcy5jICogeSArIHRoaXMudHg7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmIgKiB4ICsgdGhpcy5kICogeSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gbmV3UG9zO1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgaW52ZXJzZSBvZiB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZSB0byBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gaW5wdXQpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCBpbnZlcnNlLXRyYW5zZm9ybWVkIHRocm91Z2ggdGhpcyBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBseUludmVyc2UgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIGlkID0gMSAvICh0aGlzLmEgKiB0aGlzLmQgKyB0aGlzLmMgKiAtdGhpcy5iKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5kICogaWQgKiB4ICsgLXRoaXMuYyAqIGlkICogeSArICh0aGlzLnR5ICogdGhpcy5jIC0gdGhpcy50eCAqIHRoaXMuZCkgKiBpZDtcbiAgICBuZXdQb3MueSA9IHRoaXMuYSAqIGlkICogeSArIC10aGlzLmIgKiBpZCAqIHggKyAoLXRoaXMudHkgKiB0aGlzLmEgKyB0aGlzLnR4ICogdGhpcy5iKSAqIGlkO1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogVHJhbnNsYXRlcyB0aGUgbWF0cml4IG9uIHRoZSB4IGFuZCB5LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudHJhbnNsYXRlID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy50eCArPSB4O1xuICAgIHRoaXMudHkgKz0geTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgc2NhbGUgdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geCBUaGUgYW1vdW50IHRvIHNjYWxlIGhvcml6b250YWxseVxuICogQHBhcmFtIHtudW1iZXJ9IHkgVGhlIGFtb3VudCB0byBzY2FsZSB2ZXJ0aWNhbGx5XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zY2FsZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuYSAqPSB4O1xuICAgIHRoaXMuZCAqPSB5O1xuICAgIHRoaXMuYyAqPSB4O1xuICAgIHRoaXMuYiAqPSB5O1xuICAgIHRoaXMudHggKj0geDtcbiAgICB0aGlzLnR5ICo9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBBcHBsaWVzIGEgcm90YXRpb24gdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgaW4gcmFkaWFucy5cbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZSA9IGZ1bmN0aW9uIChhbmdsZSlcbntcbiAgICB2YXIgY29zID0gTWF0aC5jb3MoIGFuZ2xlICk7XG4gICAgdmFyIHNpbiA9IE1hdGguc2luKCBhbmdsZSApO1xuXG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIHRoaXMuYSA9IGExICogY29zLXRoaXMuYiAqIHNpbjtcbiAgICB0aGlzLmIgPSBhMSAqIHNpbit0aGlzLmIgKiBjb3M7XG4gICAgdGhpcy5jID0gYzEgKiBjb3MtdGhpcy5kICogc2luO1xuICAgIHRoaXMuZCA9IGMxICogc2luK3RoaXMuZCAqIGNvcztcbiAgICB0aGlzLnR4ID0gdHgxICogY29zIC0gdGhpcy50eSAqIHNpbjtcbiAgICB0aGlzLnR5ID0gdHgxICogc2luICsgdGhpcy50eSAqIGNvcztcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcblxuICAgIHRoaXMuYSAgPSBtYXRyaXguYSAqIGExICsgbWF0cml4LmIgKiBjMTtcbiAgICB0aGlzLmIgID0gbWF0cml4LmEgKiBiMSArIG1hdHJpeC5iICogZDE7XG4gICAgdGhpcy5jICA9IG1hdHJpeC5jICogYTEgKyBtYXRyaXguZCAqIGMxO1xuICAgIHRoaXMuZCAgPSBtYXRyaXguYyAqIGIxICsgbWF0cml4LmQgKiBkMTtcblxuICAgIHRoaXMudHggPSBtYXRyaXgudHggKiBhMSArIG1hdHJpeC50eSAqIGMxICsgdGhpcy50eDtcbiAgICB0aGlzLnR5ID0gbWF0cml4LnR4ICogYjEgKyBtYXRyaXgudHkgKiBkMSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbWF0cml4IGJhc2VkIG9uIGFsbCB0aGUgYXZhaWxhYmxlIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFhcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFlcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVlcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3RhdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdYXG4gKiBAcGFyYW0ge251bWJlcn0gc2tld1lcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoeCwgeSwgcGl2b3RYLCBwaXZvdFksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZKVxue1xuICAgIHZhciBhLCBiLCBjLCBkLCBzciwgY3IsIGN5LCBzeSwgbnN4LCBjeDtcblxuICAgIHNyICA9IE1hdGguc2luKHJvdGF0aW9uKTtcbiAgICBjciAgPSBNYXRoLmNvcyhyb3RhdGlvbik7XG4gICAgY3kgID0gTWF0aC5jb3Moc2tld1kpO1xuICAgIHN5ICA9IE1hdGguc2luKHNrZXdZKTtcbiAgICBuc3ggPSAtTWF0aC5zaW4oc2tld1gpO1xuICAgIGN4ICA9ICBNYXRoLmNvcyhza2V3WCk7XG5cbiAgICBhICA9ICBjciAqIHNjYWxlWDtcbiAgICBiICA9ICBzciAqIHNjYWxlWDtcbiAgICBjICA9IC1zciAqIHNjYWxlWTtcbiAgICBkICA9ICBjciAqIHNjYWxlWTtcblxuICAgIHRoaXMuYSAgPSBjeSAqIGEgKyBzeSAqIGM7XG4gICAgdGhpcy5iICA9IGN5ICogYiArIHN5ICogZDtcbiAgICB0aGlzLmMgID0gbnN4ICogYSArIGN4ICogYztcbiAgICB0aGlzLmQgID0gbnN4ICogYiArIGN4ICogZDtcblxuICAgIHRoaXMudHggPSB4ICsgKCBwaXZvdFggKiBhICsgcGl2b3RZICogYyApO1xuICAgIHRoaXMudHkgPSB5ICsgKCBwaXZvdFggKiBiICsgcGl2b3RZICogZCApO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFByZXBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24obWF0cml4KVxue1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuXG4gICAgaWYgKG1hdHJpeC5hICE9PSAxIHx8IG1hdHJpeC5iICE9PSAwIHx8IG1hdHJpeC5jICE9PSAwIHx8IG1hdHJpeC5kICE9PSAxKVxuICAgIHtcbiAgICAgICAgdmFyIGExID0gdGhpcy5hO1xuICAgICAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgICAgIHRoaXMuYSAgPSBhMSptYXRyaXguYSt0aGlzLmIqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuYiAgPSBhMSptYXRyaXguYit0aGlzLmIqbWF0cml4LmQ7XG4gICAgICAgIHRoaXMuYyAgPSBjMSptYXRyaXguYSt0aGlzLmQqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuZCAgPSBjMSptYXRyaXguYit0aGlzLmQqbWF0cml4LmQ7XG4gICAgfVxuXG4gICAgdGhpcy50eCA9IHR4MSptYXRyaXguYSt0aGlzLnR5Km1hdHJpeC5jK21hdHJpeC50eDtcbiAgICB0aGlzLnR5ID0gdHgxKm1hdHJpeC5iK3RoaXMudHkqbWF0cml4LmQrbWF0cml4LnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEludmVydHMgdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5pbnZlcnQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBiMSA9IHRoaXMuYjtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIGQxID0gdGhpcy5kO1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuICAgIHZhciBuID0gYTEqZDEtYjEqYzE7XG5cbiAgICB0aGlzLmEgPSBkMS9uO1xuICAgIHRoaXMuYiA9IC1iMS9uO1xuICAgIHRoaXMuYyA9IC1jMS9uO1xuICAgIHRoaXMuZCA9IGExL247XG4gICAgdGhpcy50eCA9IChjMSp0aGlzLnR5LWQxKnR4MSkvbjtcbiAgICB0aGlzLnR5ID0gLShhMSp0aGlzLnR5LWIxKnR4MSkvbjtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIFJlc2V0cyB0aGlzIE1hdGl4IHRvIGFuIGlkZW50aXR5IChkZWZhdWx0KSBtYXRyaXguXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaWRlbnRpdHkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYSA9IDE7XG4gICAgdGhpcy5iID0gMDtcbiAgICB0aGlzLmMgPSAwO1xuICAgIHRoaXMuZCA9IDE7XG4gICAgdGhpcy50eCA9IDA7XG4gICAgdGhpcy50eSA9IDA7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBNYXRyaXggb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBBIGNvcHkgb2YgdGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1hdHJpeCA9IG5ldyBNYXRyaXgoKTtcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSB2YWx1ZXMgb2YgdGhlIGdpdmVuIG1hdHJpeCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgb25lcyBpbiB0aGlzIG1hdHJpeFxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGUgbWF0cml4IGdpdmVuIGluIHBhcmFtZXRlciB3aXRoIGl0cyB2YWx1ZXMgdXBkYXRlZC5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBBIGRlZmF1bHQgKGlkZW50aXR5KSBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LklERU5USVRZID0gbmV3IE1hdHJpeCgpO1xuXG4vKipcbiAqIEEgdGVtcCBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LlRFTVBfTUFUUklYID0gbmV3IE1hdHJpeCgpO1xuIiwiLyoqXG4gKiBUaGUgUG9pbnQgb2JqZWN0IHJlcHJlc2VudHMgYSBsb2NhdGlvbiBpbiBhIHR3by1kaW1lbnNpb25hbCBjb29yZGluYXRlIHN5c3RlbSwgd2hlcmUgeCByZXByZXNlbnRzXG4gKiB0aGUgaG9yaXpvbnRhbCBheGlzIGFuZCB5IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIGF4aXMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXNcbiAqL1xuZnVuY3Rpb24gUG9pbnQoeCwgeSlcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xufVxuXG5Qb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2ludDtcbm1vZHVsZS5leHBvcnRzID0gUG9pbnQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9pbnRcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBhIGNvcHkgb2YgdGhlIHBvaW50XG4gKi9cblBvaW50LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLngsIHRoaXMueSk7XG59O1xuXG4vKipcbiAqIENvcGllcyB4IGFuZCB5IGZyb20gdGhlIGdpdmVuIHBvaW50XG4gKlxuICogQHBhcmFtIHAge1BJWEkuUG9pbnR9XG4gKi9cblBvaW50LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKHApIHtcbiAgICB0aGlzLnNldChwLngsIHAueSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcG9pbnQgaXMgZXF1YWwgdG8gdGhpcyBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cblBvaW50LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiAocC54ID09PSB0aGlzLngpICYmIChwLnkgPT09IHRoaXMueSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIHBvaW50IHRvIGEgbmV3IHggYW5kIHkgcG9zaXRpb24uXG4gKiBJZiB5IGlzIG9taXR0ZWQsIGJvdGggeCBhbmQgeSB3aWxsIGJlIHNldCB0byB4LlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cblBvaW50LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLnggPSB4IHx8IDA7XG4gICAgdGhpcy55ID0geSB8fCAoICh5ICE9PSAwKSA/IHRoaXMueCA6IDAgKSA7XG59O1xuIiwiLyoqXG4gKiBNYXRoIGNsYXNzZXMgYW5kIHV0aWxpdGllcyBtaXhlZCBpbnRvIFBJWEkgbmFtZXNwYWNlLlxuICpcbiAqIEBsZW5kcyBQSVhJXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8vIFRoZXNlIHdpbGwgYmUgbWl4ZWQgdG8gYmUgbWFkZSBwdWJsaWNseSBhdmFpbGFibGUsXG4gICAgLy8gd2hpbGUgdGhpcyBtb2R1bGUgaXMgdXNlZCBpbnRlcm5hbGx5IGluIGNvcmVcbiAgICAvLyB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYW5kIGN1dCBkb3duIG9uXG4gICAgLy8gaW50ZXJuYWwgbW9kdWxlIHJlcXVpcmVzLlxuXG4gICAgUG9pbnQ6ICAgICAgcmVxdWlyZSgnLi9Qb2ludCcpLFxuICAgIE1hdHJpeDogICAgIHJlcXVpcmUoJy4vTWF0cml4JyksXG5cbiAgICBDaXJjbGU6ICAgICByZXF1aXJlKCcuL3NoYXBlcy9DaXJjbGUnKSxcbiAgICBFbGxpcHNlOiAgICByZXF1aXJlKCcuL3NoYXBlcy9FbGxpcHNlJyksXG4gICAgUG9seWdvbjogICAgcmVxdWlyZSgnLi9zaGFwZXMvUG9seWdvbicpLFxuICAgIFJlY3RhbmdsZTogIHJlcXVpcmUoJy4vc2hhcGVzL1JlY3RhbmdsZScpLFxuICAgIFJvdW5kZWRSZWN0YW5nbGU6IHJlcXVpcmUoJy4vc2hhcGVzL1JvdW5kZWRSZWN0YW5nbGUnKVxufTtcbiIsInZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2lyY2xlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKi9cbmZ1bmN0aW9uIENpcmNsZSh4LCB5LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuQ0lSQztcbn1cblxuQ2lyY2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENpcmNsZTtcbm1vZHVsZS5leHBvcnRzID0gQ2lyY2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIENpcmNsZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuQ2lyY2xlfSBhIGNvcHkgb2YgdGhlIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IENpcmNsZSh0aGlzLngsIHRoaXMueSwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGNpcmNsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgQ2lyY2xlXG4gKi9cbkNpcmNsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy5yYWRpdXMgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgZHggPSAodGhpcy54IC0geCksXG4gICAgICAgIGR5ID0gKHRoaXMueSAtIHkpLFxuICAgICAgICByMiA9IHRoaXMucmFkaXVzICogdGhpcy5yYWRpdXM7XG5cbiAgICBkeCAqPSBkeDtcbiAgICBkeSAqPSBkeTtcblxuICAgIHJldHVybiAoZHggKyBkeSA8PSByMik7XG59O1xuXG4vKipcbiogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIGNpcmNsZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuKi9cbkNpcmNsZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLnJhZGl1cywgdGhpcy55IC0gdGhpcy5yYWRpdXMsIHRoaXMucmFkaXVzICogMiwgdGhpcy5yYWRpdXMgKiAyKTtcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIEVsbGlwc2Ugb2JqZWN0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBoaXQgYXJlYSBmb3IgZGlzcGxheU9iamVjdHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBoYWxmIHdpZHRoIG9mIHRoaXMgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhpcyBlbGxpcHNlXG4gKi9cbmZ1bmN0aW9uIEVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuRUxJUDtcbn1cblxuRWxsaXBzZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFbGxpcHNlO1xubW9kdWxlLmV4cG9ydHMgPSBFbGxpcHNlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIEVsbGlwc2UgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkVsbGlwc2V9IGEgY29weSBvZiB0aGUgZWxsaXBzZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBFbGxpcHNlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgZWxsaXBzZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZHMgYXJlIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy9ub3JtYWxpemUgdGhlIGNvb3JkcyB0byBhbiBlbGxpcHNlIHdpdGggY2VudGVyIDAsMFxuICAgIHZhciBub3JteCA9ICgoeCAtIHRoaXMueCkgLyB0aGlzLndpZHRoKSxcbiAgICAgICAgbm9ybXkgPSAoKHkgLSB0aGlzLnkpIC8gdGhpcy5oZWlnaHQpO1xuXG4gICAgbm9ybXggKj0gbm9ybXg7XG4gICAgbm9ybXkgKj0gbm9ybXk7XG5cbiAgICByZXR1cm4gKG5vcm14ICsgbm9ybXkgPD0gMSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBlbGxpcHNlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLndpZHRoLCB0aGlzLnkgLSB0aGlzLmhlaWdodCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcbiIsInZhciBQb2ludCA9IHJlcXVpcmUoJy4uL1BvaW50JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBwb2ludHMge1BJWEkuUG9pbnRbXXxudW1iZXJbXXwuLi5QSVhJLlBvaW50fC4uLm51bWJlcn0gVGhpcyBjYW4gYmUgYW4gYXJyYXkgb2YgUG9pbnRzIHRoYXQgZm9ybSB0aGUgcG9seWdvbixcbiAqICAgICAgYSBmbGF0IGFycmF5IG9mIG51bWJlcnMgdGhhdCB3aWxsIGJlIGludGVycHJldGVkIGFzIFt4LHksIHgseSwgLi4uXSwgb3IgdGhlIGFyZ3VtZW50cyBwYXNzZWQgY2FuIGJlXG4gKiAgICAgIGFsbCB0aGUgcG9pbnRzIG9mIHRoZSBwb2x5Z29uIGUuZy4gYG5ldyBQSVhJLlBvbHlnb24obmV3IFBJWEkuUG9pbnQoKSwgbmV3IFBJWEkuUG9pbnQoKSwgLi4uKWAsIG9yIHRoZVxuICogICAgICBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZSBmbGF0IHgseSB2YWx1ZXMgZS5nLiBgbmV3IFBvbHlnb24oeCx5LCB4LHksIHgseSwgLi4uKWAgd2hlcmUgYHhgIGFuZCBgeWAgYXJlXG4gKiAgICAgIE51bWJlcnMuXG4gKi9cbmZ1bmN0aW9uIFBvbHlnb24ocG9pbnRzXylcbntcbiAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBhc3NpZ25tZW50IGRlb3B0XG4gICAgLy8gc2VlIHNlY3Rpb24gMy4xOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICB2YXIgcG9pbnRzID0gcG9pbnRzXztcblxuICAgIC8vaWYgcG9pbnRzIGlzbid0IGFuIGFycmF5LCB1c2UgYXJndW1lbnRzIGFzIHRoZSBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBwb2ludHMubGVuZ3RoOyArK2EpIHtcbiAgICAgICAgICAgIHBvaW50c1thXSA9IGFyZ3VtZW50c1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHRoaXMgaXMgYW4gYXJyYXkgb2YgcG9pbnRzLCBjb252ZXJ0IGl0IHRvIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzXG4gICAgaWYgKHBvaW50c1swXSBpbnN0YW5jZW9mIFBvaW50KVxuICAgIHtcbiAgICAgICAgdmFyIHAgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHAucHVzaChwb2ludHNbaV0ueCwgcG9pbnRzW2ldLnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9pbnRzID0gcDtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB0aGUgcG9pbnRzIG9mIHRoaXMgcG9seWdvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlBPTFk7XG59XG5cblBvbHlnb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9seWdvbjtcbm1vZHVsZS5leHBvcnRzID0gUG9seWdvbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBwb2x5Z29uXG4gKlxuICogQHJldHVybiB7UElYSS5Qb2x5Z29ufSBhIGNvcHkgb2YgdGhlIHBvbHlnb25cbiAqL1xuUG9seWdvbi5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9seWdvbih0aGlzLnBvaW50cy5zbGljZSgpKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIGluc2lkZSA9IGZhbHNlO1xuXG4gICAgLy8gdXNlIHNvbWUgcmF5Y2FzdGluZyB0byB0ZXN0IGhpdHNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svcG9pbnQtaW4tcG9seWdvbi9ibG9iL21hc3Rlci9pbmRleC5qc1xuICAgIHZhciBsZW5ndGggPSB0aGlzLnBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBsZW5ndGggLSAxOyBpIDwgbGVuZ3RoOyBqID0gaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHhpID0gdGhpcy5wb2ludHNbaSAqIDJdLCB5aSA9IHRoaXMucG9pbnRzW2kgKiAyICsgMV0sXG4gICAgICAgICAgICB4aiA9IHRoaXMucG9pbnRzW2ogKiAyXSwgeWogPSB0aGlzLnBvaW50c1tqICogMiArIDFdLFxuICAgICAgICAgICAgaW50ZXJzZWN0ID0gKCh5aSA+IHkpICE9PSAoeWogPiB5KSkgJiYgKHggPCAoeGogLSB4aSkgKiAoeSAtIHlpKSAvICh5aiAtIHlpKSArIHhpKTtcblxuICAgICAgICBpZiAoaW50ZXJzZWN0KVxuICAgICAgICB7XG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc2lkZTtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIHRoZSBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgZGVmaW5lZCBieSBpdHMgcG9zaXRpb24sIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCB3aWR0aCBvZiB0aGlzIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByZWN0YW5nbGVcbiAqL1xuZnVuY3Rpb24gUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJFQ1Q7XG59XG5cblJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZWN0YW5nbGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlY3RhbmdsZTtcblxuLyoqXG4gKiBBIGNvbnN0YW50IGVtcHR5IHJlY3RhbmdsZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuUmVjdGFuZ2xlLkVNUFRZID0gbmV3IFJlY3RhbmdsZSgwLCAwLCAwLCAwKTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgUmVjdGFuZ2xlXG4gKi9cblJlY3RhbmdsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHggPj0gdGhpcy54ICYmIHggPCB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPCB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUm91bmRlZCBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgdGhhdCBoYXMgbmljZSByb3VuZGVkIGNvcm5lcnMsIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0IGFuZCBpdHMgcmFkaXVzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBDb250cm9scyB0aGUgcmFkaXVzIG9mIHRoZSByb3VuZGVkIGNvcm5lcnNcbiAqL1xuZnVuY3Rpb24gUm91bmRlZFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMjBcbiAgICAgKi9cbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCAyMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUlJFQztcbn1cblxuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3VuZGVkUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3VuZGVkUmVjdGFuZ2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHJldHVybiB7UElYSS5Sb3VuZGVkUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJvdW5kZWRSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnJhZGl1cyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDw9IHRoaXMueCArIHRoaXMud2lkdGgpXG4gICAge1xuICAgICAgICBpZiAoeSA+PSB0aGlzLnkgJiYgeSA8PSB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBQYXJ0aWNsZUNvbnRhaW5lciBjbGFzcyBpcyBhIHJlYWxseSBmYXN0IHZlcnNpb24gb2YgdGhlIENvbnRhaW5lciBidWlsdCBzb2xlbHkgZm9yIHNwZWVkLFxuICogc28gdXNlIHdoZW4geW91IG5lZWQgYSBsb3Qgb2Ygc3ByaXRlcyBvciBwYXJ0aWNsZXMuIFRoZSB0cmFkZW9mZiBvZiB0aGUgUGFydGljbGVDb250YWluZXIgaXMgdGhhdCBhZHZhbmNlZFxuICogZnVuY3Rpb25hbGl0eSB3aWxsIG5vdCB3b3JrLiBQYXJ0aWNsZUNvbnRhaW5lciBpbXBsZW1lbnRzIG9ubHkgdGhlIGJhc2ljIG9iamVjdCB0cmFuc2Zvcm0gKHBvc2l0aW9uLCBzY2FsZSwgcm90YXRpb24pLlxuICogQW55IG90aGVyIGZ1bmN0aW9uYWxpdHkgbGlrZSB0aW50aW5nLCBtYXNraW5nLCBldGMgd2lsbCBub3Qgd29yayBvbiBzcHJpdGVzIGluIHRoaXMgYmF0Y2guXG4gKlxuICogSXQncyBleHRyZW1lbHkgZWFzeSB0byB1c2UgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgY29udGFpbmVyID0gbmV3IFBhcnRpY2xlQ29udGFpbmVyKCk7XG4gKlxuICogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSlcbiAqIHtcbiAqICAgICB2YXIgc3ByaXRlID0gbmV3IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcIm15SW1hZ2UucG5nXCIpO1xuICogICAgIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogfVxuICogYGBgXG4gKlxuICogQW5kIGhlcmUgeW91IGhhdmUgYSBodW5kcmVkIHNwcml0ZXMgdGhhdCB3aWxsIGJlIHJlbmRlcmVyIGF0IHRoZSBzcGVlZCBvZiBsaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFttYXhTaXplPTE1MDAwXSB7bnVtYmVyfSBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFydGljbGVzIHRoYXQgY2FuIGJlIHJlbmRlcmVyIGJ5IHRoZSBjb250YWluZXIuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXNdIHtvYmplY3R9IFRoZSBwcm9wZXJ0aWVzIG9mIGNoaWxkcmVuIHRoYXQgc2hvdWxkIGJlIHVwbG9hZGVkIHRvIHRoZSBncHUgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuc2NhbGU9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHNjYWxlIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnBvc2l0aW9uPXRydWVdIHtib29sZWFufSBXaGVuIHRydWUsIHBvc2l0aW9uIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnJvdGF0aW9uPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCByb3RhdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy51dnM9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHV2cyBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5hbHBoYT1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgYWxwaGEgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW2JhdGNoU2l6ZT0xNTAwMF0ge251bWJlcn0gTnVtYmVyIG9mIHBhcnRpY2xlcyBwZXIgYmF0Y2guXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQ29udGFpbmVyKG1heFNpemUsIHByb3BlcnRpZXMsIGJhdGNoU2l6ZSlcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIGJhdGNoU2l6ZSA9IGJhdGNoU2l6ZSB8fCAxNTAwMDsgLy9DT05TVC5TUFJJVEVfQkFUQ0hfU0laRTsgLy8gMjAwMCBpcyBhIG5pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSAvIGRlc2t0b3BcbiAgICBtYXhTaXplID0gbWF4U2l6ZSB8fCAxNTAwMDtcblxuICAgIC8vIE1ha2luZyBzdXJlIHRoZSBiYXRjaCBzaXplIGlzIHZhbGlkXG4gICAgLy8gNjU1MzUgaXMgbWF4IHZlcnRleCBpbmRleCBpbiB0aGUgaW5kZXggYnVmZmVyIChzZWUgUGFydGljbGVSZW5kZXJlcilcbiAgICAvLyBzbyBtYXggbnVtYmVyIG9mIHBhcnRpY2xlcyBpcyA2NTUzNiAvIDQgPSAxNjM4NFxuICAgIHZhciBtYXhCYXRjaFNpemUgPSAxNjM4NDtcbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4QmF0Y2hTaXplKSB7XG4gICAgICAgIGJhdGNoU2l6ZSA9IG1heEJhdGNoU2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4U2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhTaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBwcm9wZXJ0aWVzIHRvIGJlIGR5bmFtaWMgKHRydWUpIC8gc3RhdGljIChmYWxzZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW5bXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4U2l6ZSA9IG1heFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYXRjaFNpemUgPSBiYXRjaFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVDaGlsZHJlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGNhbnZhcyByZW5kZXJlcmluZy4gSWYgdHJ1ZSB0aGVuIHRoZSBlbGVtZW50cyB3aWxsIGJlIHBvc2l0aW9uZWQgYXQgdGhlIG5lYXJlc3QgcGl4ZWwuIFRoaXMgcHJvdmlkZXMgYSBuaWNlIHNwZWVkIGJvb3N0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlO1xuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSB0cnVlO1xuXG4gICAgdGhpcy5zZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xufVxuXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQ29udGFpbmVyO1xuXG4vKipcbiAqIFNldHMgdGhlIHByaXZhdGUgcHJvcGVydGllcyBhcnJheSB0byBkeW5hbWljIC8gc3RhdGljIGJhc2VkIG9uIHRoZSBwYXNzZWQgcHJvcGVydGllcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcHJvcGVydGllcyB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyB0byBiZSB1cGxvYWRlZFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuc2V0UHJvcGVydGllcyA9IGZ1bmN0aW9uKHByb3BlcnRpZXMpXG57XG4gICAgaWYgKCBwcm9wZXJ0aWVzICkge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzBdID0gJ3NjYWxlJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnNjYWxlIDogdGhpcy5fcHJvcGVydGllc1swXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1sxXSA9ICdwb3NpdGlvbicgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5wb3NpdGlvbiA6IHRoaXMuX3Byb3BlcnRpZXNbMV07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMl0gPSAncm90YXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucm90YXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzJdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzNdID0gJ3V2cycgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy51dnMgOiB0aGlzLl9wcm9wZXJ0aWVzWzNdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzRdID0gJ2FscGhhJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLmFscGhhIDogdGhpcy5fcHJvcGVydGllc1s0XTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgLy8gVE9ETyBkb24ndCBuZWVkIHRvIVxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIC8vICBQSVhJLkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtLmNhbGwoIHRoaXMgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGFpbmVyIHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgd2ViZ2wgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlciggcmVuZGVyZXIucGx1Z2lucy5wYXJ0aWNsZSApO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUucmVuZGVyKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgZmxhZyB0aGF0IHN0YXRpYyBkYXRhIHNob3VsZCBiZSB1cGRhdGVkIHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUub25DaGlsZHJlbkNoYW5nZSA9IGZ1bmN0aW9uIChzbWFsbGVzdENoaWxkSW5kZXgpXG57XG4gICAgdmFyIGJ1ZmZlckluZGV4ID0gTWF0aC5mbG9vcihzbWFsbGVzdENoaWxkSW5kZXggLyB0aGlzLl9iYXRjaFNpemUpO1xuICAgIGlmIChidWZmZXJJbmRleCA8IHRoaXMuX2J1ZmZlclRvVXBkYXRlKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gYnVmZmVySW5kZXg7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIGNhbnZhcyByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGlzUm90YXRlZCA9IHRydWU7XG5cbiAgICB2YXIgcG9zaXRpb25YID0gMDtcbiAgICB2YXIgcG9zaXRpb25ZID0gMDtcblxuICAgIHZhciBmaW5hbFdpZHRoID0gMDtcbiAgICB2YXIgZmluYWxIZWlnaHQgPSAwO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICBpZiAoIWNoaWxkLnZpc2libGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZyYW1lID0gY2hpbGQudGV4dHVyZS5mcmFtZTtcblxuICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhICogY2hpbGQuYWxwaGE7XG5cbiAgICAgICAgaWYgKGNoaWxkLnJvdGF0aW9uICUgKE1hdGguUEkgKiAyKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgZmFzdGVzdCAgd2F5IHRvIG9wdGltaXNlISAtIGlmIHJvdGF0aW9uIGlzIDAgdGhlbiB3ZSBjYW4gYXZvaWQgYW55IGtpbmQgb2Ygc2V0VHJhbnNmb3JtIGNhbGxcbiAgICAgICAgICAgIGlmIChpc1JvdGF0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoICogY2hpbGQuc2NhbGUueCkgKyBjaGlsZC5wb3NpdGlvbi54ICArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0ICogY2hpbGQuc2NhbGUueSkgKyBjaGlsZC5wb3NpdGlvbi55ICArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLng7XG4gICAgICAgICAgICBmaW5hbEhlaWdodCA9IGZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnk7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzUm90YXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoaWxkLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICAgICAgdmFyIGNoaWxkVHJhbnNmb3JtID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHggfCAwLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eSB8IDBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvblggPSAoKGNoaWxkLmFuY2hvci54KSAqICgtZnJhbWUud2lkdGgpICsgMC41KTtcbiAgICAgICAgICAgIHBvc2l0aW9uWSA9ICgoY2hpbGQuYW5jaG9yLnkpICogKC1mcmFtZS5oZWlnaHQpICsgMC41KTtcblxuICAgICAgICAgICAgZmluYWxXaWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgIGNoaWxkLnRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgZnJhbWUueCxcbiAgICAgICAgICAgIGZyYW1lLnksXG4gICAgICAgICAgICBmcmFtZS53aWR0aCxcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCxcbiAgICAgICAgICAgIHBvc2l0aW9uWCxcbiAgICAgICAgICAgIHBvc2l0aW9uWSxcbiAgICAgICAgICAgIGZpbmFsV2lkdGgsXG4gICAgICAgICAgICBmaW5hbEhlaWdodFxuICAgICAgICApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUNoaWxkcmVuPWZhbHNlXSB7Ym9vbGVhbn0gaWYgc2V0IHRvIHRydWUsIGFsbCB0aGUgY2hpbGRyZW4gd2lsbCBoYXZlIHRoZWlyIGRlc3Ryb3kgbWV0aG9kIGNhbGxlZCBhcyB3ZWxsXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgaWYgKHRoaXMuX2J1ZmZlcnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLl9idWZmZXJzW2ldLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xufTtcbiIsIlxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZUJ1ZmZlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvUGFydGljbGVCdWZmZXIuamF2YVxuICovXG5cbi8qKlxuICogVGhlIHBhcnRpY2xlIGJ1ZmZlciBtYW5hZ2VzIHRoZSBzdGF0aWMgYW5kIGR5bmFtaWMgYnVmZmVycyBmb3IgYSBwYXJ0aWNsZSBjb250YWluZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gUGFydGljbGVCdWZmZXIoZ2wsIHByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBzaXplKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRTaXplID0gMjtcblxuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYSBzaW5nbGUgdmVydGV4IGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGUgYnVmZmVyIGNhbiBob2xkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gc2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBkeW5hbWljLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIHN0YXRpYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcblxuICAgICAgICBpZihkeW5hbWljUHJvcGVydHlGbGFnc1tpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5keW5hbWljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuZHluYW1pY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW5pdEJ1ZmZlcnMoKTtcblxufVxuXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZUJ1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVCdWZmZXI7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmluaXRCdWZmZXJzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpO1xuICAgIHZhciBwcm9wZXJ0eTtcblxuICAgIHZhciBkeW5hbWljT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG5cbiAgICAgICAgcHJvcGVydHkub2Zmc2V0ID0gZHluYW1pY09mZnNldDtcbiAgICAgICAgZHluYW1pY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLmR5bmFtaWNTdHJpZGUgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5keW5hbWljU3RyaWRlICogNCk7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcblxuXG4gICAgLy8gc3RhdGljIC8vXG4gICAgdmFyIHN0YXRpY09mZnNldCA9IDA7XG4gICAgdGhpcy5zdGF0aWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IHN0YXRpY09mZnNldDtcbiAgICAgICAgc3RhdGljT2Zmc2V0ICs9IHByb3BlcnR5LnNpemU7XG4gICAgICAgIHRoaXMuc3RhdGljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5zdGF0aWNTdHJpZGUgKiA0KTtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNEYXRhLCBnbC5EWU5BTUlDX0RSQVcpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBkeW5hbWljIHByb3BlcnRpZXMuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUudXBsb2FkRHluYW1pYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIHByb3BlcnR5LnVwbG9hZEZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIHRoaXMuZHluYW1pY0RhdGEsIHRoaXMuZHluYW1pY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy5keW5hbWljRGF0YSk7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHN0YXRpYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZFN0YXRpYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLnN0YXRpY0RhdGEsIHRoaXMuc3RhdGljU3RyaWRlLCBwcm9wZXJ0eS5vZmZzZXQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuc3RhdGljRGF0YSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIHRvIHRoZSBHUFVcbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpLCBwcm9wZXJ0eTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuc3RhdGljU3RyaWRlICogNCwgcHJvcGVydHkub2Zmc2V0ICogNCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVCdWZmZXIuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLnN0YXRpY0J1ZmZlcik7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgUGFydGljbGVTaGFkZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlU2hhZGVyJyksXG4gICAgUGFydGljbGVCdWZmZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlQnVmZmVyJyksXG4gICAgbWF0aCAgICAgICAgICAgID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFBhcnRpY2xlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICAvLyBhbmQgbWF4IG51bWJlciBvZiBlbGVtZW50IGluIHRoZSBpbmRleCBidWZmZXIgaXMgMTYzODQgKiA2ID0gOTgzMDRcbiAgICAvLyBDcmVhdGluZyBhIGZ1bGwgaW5kZXggYnVmZmVyLCBvdmVyaGVhZCBpcyA5ODMwNCAqIDIgPSAxOTZLb1xuICAgIHZhciBudW1JbmRpY2VzID0gOTgzMDQ7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KG51bUluZGljZXMpO1xuXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCBudW1JbmRpY2VzOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gbnVsbDtcblxuICAgIHRoaXMudGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xufVxuXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbigncGFydGljbGUnLCBQYXJ0aWNsZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBXaGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gbmV3IFBhcnRpY2xlU2hhZGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlcik7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggaW5kZXgsIHNvIDY1NTM1IC8gNiA9IDEwOTIyLlxuXG4gICAgLy91cGxvYWQgdGhlIGluZGV4IGRhdGFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IFtcbiAgICAgICAgLy8gdmVydGljZXNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbixcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkVmVydGljZXMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBwb3NpdGlvbkRhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFBvc2l0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcm90YXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFSb3RhdGlvbixcbiAgICAgICAgICAgIHNpemU6MSxcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkUm90YXRpb24sXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyB1dnNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFV2cyxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIGFscGhhRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZEFscGhhLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfVxuICAgIF07XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBwYXJ0aWNsZSBiYXRjaC5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gYmluZCB0aGUgbWFpbiB0ZXh0dXJlXG4gICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAvLyBiaW5kIHRoZSBidWZmZXJzXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnNoYWRlcjtcblxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBwYXJ0aWNsZSBjb250YWluZXIgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBjaGlsZHJlbiA9IGNvbnRhaW5lci5jaGlsZHJlbixcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aCxcbiAgICAgICAgbWF4U2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemU7XG5cbiAgICBpZih0b3RhbENoaWxkcmVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIGlmKHRvdGFsQ2hpbGRyZW4gPiBtYXhTaXplKVxuICAgIHtcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IG1heFNpemU7XG4gICAgfVxuXG4gICAgaWYoIWNvbnRhaW5lci5fYnVmZmVycylcbiAgICB7XG4gICAgICAgIGNvbnRhaW5lci5fYnVmZmVycyA9IHRoaXMuZ2VuZXJhdGVCdWZmZXJzKCBjb250YWluZXIgKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXZzIGhhdmUgbm90IHVwZGF0ZWQgdGhlbiBubyBwb2ludCByZW5kZXJpbmcganVzdCB5ZXQhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb250YWluZXIuYmxlbmRNb2RlKTtcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgbSA9ICBjb250YWluZXIud29ybGRUcmFuc2Zvcm0uY29weSggdGhpcy50ZW1wTWF0cml4ICk7XG4gICAgbS5wcmVwZW5kKCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeCApO1xuICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5zaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCBtLnRvQXJyYXkodHJ1ZSkpO1xuICAgIGdsLnVuaWZvcm0xZih0aGlzLnNoYWRlci51bmlmb3Jtcy51QWxwaGEuX2xvY2F0aW9uLCBjb250YWluZXIud29ybGRBbHBoYSk7XG5cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgdGV4dHVyZSBpcyBib3VuZC4uXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gY2hpbGRyZW5bMF0uX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSB0ZXh0dXJlIGhhcyBub3QgdXBkYXRlZCB0aGVuIGxldHMgbm90IHVwbG9hZCBhbnkgc3RhdGljIHByb3BlcnRpZXNcbiAgICAgICAgaWYoIXRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZShiYXNlVGV4dHVyZSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFjb250YWluZXIuX3Byb3BlcnRpZXNbMF0gfHwgIWNvbnRhaW5lci5fcHJvcGVydGllc1szXSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICB9XG5cbiAgICAvLyBub3cgbGV0cyB1cGxvYWQgYW5kIHJlbmRlciB0aGUgYnVmZmVycy4uXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgdG90YWxDaGlsZHJlbjsgaSArPSBiYXRjaFNpemUsIGogKz0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhbW91bnQgPSAoIHRvdGFsQ2hpbGRyZW4gLSBpKTtcbiAgICAgICAgaWYoYW1vdW50ID4gYmF0Y2hTaXplKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbW91bnQgPSBiYXRjaFNpemU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYnVmZmVyID0gY29udGFpbmVyLl9idWZmZXJzW2pdO1xuXG4gICAgICAgIC8vIHdlIGFsd2F5cyB1cGxvYWQgdGhlIGR5bmFtaWNcbiAgICAgICAgYnVmZmVyLnVwbG9hZER5bmFtaWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG5cbiAgICAgICAgLy8gd2Ugb25seSB1cGxvYWQgdGhlIHN0YXRpYyBjb250ZW50IHdoZW4gd2UgaGF2ZSB0byFcbiAgICAgICAgaWYoY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9PT0gailcbiAgICAgICAge1xuICAgICAgICAgICAgYnVmZmVyLnVwbG9hZFN0YXRpYyhjaGlsZHJlbiwgaSwgYW1vdW50KTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSBqICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJpbmQgdGhlIGJ1ZmZlclxuICAgICAgICBidWZmZXIuYmluZCggdGhpcy5zaGFkZXIgKTtcblxuICAgICAgICAgLy8gbm93IGRyYXcgdGhvc2Ugc3Vja2FzIVxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBhbW91bnQgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIG9uZSBwYXJ0aWNsZSBidWZmZXIgZm9yIGVhY2ggY2hpbGQgaW4gdGhlIGNvbnRhaW5lciB3ZSB3YW50IHRvIHJlbmRlciBhbmQgdXBkYXRlcyBpbnRlcm5hbCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7UElYSS5QYXJ0aWNsZUNvbnRhaW5lcn0gVGhlIGNvbnRhaW5lciB0byByZW5kZXIgdXNpbmcgdGhpcyBQYXJ0aWNsZVJlbmRlcmVyXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmdlbmVyYXRlQnVmZmVycyA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgYnVmZmVycyA9IFtdLFxuICAgICAgICBzaXplID0gY29udGFpbmVyLl9tYXhTaXplLFxuICAgICAgICBiYXRjaFNpemUgPSBjb250YWluZXIuX2JhdGNoU2l6ZSxcbiAgICAgICAgZHluYW1pY1Byb3BlcnR5RmxhZ3MgPSBjb250YWluZXIuX3Byb3BlcnRpZXMsXG4gICAgICAgIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBiYXRjaFNpemUpXG4gICAge1xuICAgICAgICBidWZmZXJzLnB1c2gobmV3IFBhcnRpY2xlQnVmZmVyKGdsLCB0aGlzLnByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBiYXRjaFNpemUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVycztcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgdmVydGljaWVzLlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciB2ZXJ0aWNlcyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkVmVydGljZXMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIHZhciBzcHJpdGUsXG4gICAgICAgIHRleHR1cmUsXG4gICAgICAgIHRyaW0sXG4gICAgICAgIHN4LFxuICAgICAgICBzeSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKSB7XG5cbiAgICAgICAgc3ByaXRlID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldO1xuICAgICAgICB0ZXh0dXJlID0gc3ByaXRlLl90ZXh0dXJlO1xuICAgICAgICBzeCA9IHNwcml0ZS5zY2FsZS54O1xuICAgICAgICBzeSA9IHNwcml0ZS5zY2FsZS55O1xuXG4gICAgICAgIGlmICh0ZXh0dXJlLnRyaW0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZCB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG5cbiAgICAgICAgICAgIHcxID0gdHJpbS54IC0gc3ByaXRlLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGgxID0gdHJpbS55IC0gc3ByaXRlLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICBoMCA9IGgxICsgdGV4dHVyZS5jcm9wLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS1zcHJpdGUuYW5jaG9yLngpO1xuICAgICAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC1zcHJpdGUuYW5jaG9yLng7XG5cbiAgICAgICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtc3ByaXRlLmFuY2hvci55KTtcbiAgICAgICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXNwcml0ZS5hbmNob3IueTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gaDEgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IGgwICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHBvc2l0aW9ucyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUG9zaXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVQb3NpdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5wb3NpdGlvbjtcblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciByb3RhdGlvbiB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUm90YXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVSb3RhdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5yb3RhdGlvbjtcblxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVJvdGF0aW9uO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBVdnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFV2cyA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmVVdnMgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uX3RleHR1cmUuX3V2cztcblxuICAgICAgICBpZiAodGV4dHVyZVV2cylcbiAgICAgICAge1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHRleHR1cmVVdnMueDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IHRleHR1cmVVdnMueTA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB0ZXh0dXJlVXZzLngxO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSB0ZXh0dXJlVXZzLnkxO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHRleHR1cmVVdnMueDI7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSB0ZXh0dXJlVXZzLnkyO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHRleHR1cmVVdnMueDM7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSB0ZXh0dXJlVXZzLnkzO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyB5b3Uga25vdyB0aGlzIGNhbiBiZSBlYXNpZXIhXG4gICAgICAgICAgICBhcnJheVtvZmZzZXRdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIGFscGhhIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRBbHBoYSA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICAge1xuICAgICAgICB2YXIgc3ByaXRlQWxwaGEgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uYWxwaGE7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlQWxwaGE7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBQYXJ0aWNsZVJlbmRlcmVyLlxuICpcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIuZ2wpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5nbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgfVxuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG4gICAgdGhpcy50ZW1wTWF0cml4ID0gbnVsbDtcbn07XG4iLCJ2YXIgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1RleHR1cmVTaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVNoYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFRleHR1cmVTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVBvc2l0aW9uQ29vcmQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhU2NhbGU7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgZmxvYXQgYVJvdGF0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgdmVjMiB2ID0gYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICcgICB2LnggPSAoYVZlcnRleFBvc2l0aW9uLngpICogY29zKGFSb3RhdGlvbikgLSAoYVZlcnRleFBvc2l0aW9uLnkpICogc2luKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2LnkgPSAoYVZlcnRleFBvc2l0aW9uLngpICogc2luKGFSb3RhdGlvbikgKyAoYVZlcnRleFBvc2l0aW9uLnkpICogY29zKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2ID0gdiArIGFQb3NpdGlvbkNvb3JkOycsXG5cbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKHYsIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gaGVsbG9cbiAgICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IHVBbHBoYTsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciAqIHVBbHBoYTsnLFxuICAgICAgICAgICAgJyAgaWYgKGNvbG9yLmEgPT0gMC4wKSBkaXNjYXJkOycsXG4gICAgICAgICAgICAnICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB1QWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVBvc2l0aW9uQ29vcmQ6IDAsXG4gICAgICAgICAgIC8vIGFTY2FsZTogICAgICAgICAwLFxuICAgICAgICAgICAgYVJvdGF0aW9uOiAgICAgIDBcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBURU1QIEhBQ0tcblxufVxuXG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmVTaGFkZXIucHJvdG90eXBlKTtcblBhcnRpY2xlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlU2hhZGVyO1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogVGhlIENhbnZhc1JlbmRlcmVyIGRyYXdzIHRoZSBzY2VuZSBhbmQgYWxsIGl0cyBjb250ZW50IG9udG8gYSAyZCBjYW52YXMuIFRoaXMgcmVuZGVyZXIgc2hvdWxkIGJlIHVzZWQgZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgd2ViR0wuXG4gKiBEb24ndCBmb3JnZXQgdG8gYWRkIHRoZSBDYW52YXNSZW5kZXJlci52aWV3IHRvIHlvdXIgRE9NIG9yIHlvdSB3aWxsIG5vdCBzZWUgYW55dGhpbmcgOilcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc3lzdGVtIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSBzeXN0ZW0gdGhpcyByZW5kZXJlciBpcyBmb3IuXG4gKiBAcGFyYW0gW3dpZHRoPTgwMF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9NjAwXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBdIHtudW1iZXJ9IFRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSByZW5kZXJlZCBhcmVhIChzaG93biBpZiBub3QgdHJhbnNwYXJlbnQpLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFN5c3RlbVJlbmRlcmVyKHN5c3RlbSwgd2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHV0aWxzLnNheUhlbGxvKHN5c3RlbSk7XG5cbiAgICAvLyBwcmVwYXJlIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zW2ldID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zW2ldID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OU1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBvcHRpb25zID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5SRU5ERVJFUl9UWVBFLlVOS05PV05cbiAgICAgKiBAc2VlIFBJWEkuUkVOREVSRVJfVFlQRVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuVU5LTk9XTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA4MDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgODAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA2MDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHRvXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLnZpZXcgPSBvcHRpb25zLnZpZXcgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gb3B0aW9ucy5yZXNvbHV0aW9uO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy50cmFuc3BhcmVudCA9IG9wdGlvbnMudHJhbnNwYXJlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByZW5kZXIgdmlldyBzaG91bGQgYmUgcmVzaXplZCBhdXRvbWF0aWNhbGx5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IG9wdGlvbnMuYXV0b1Jlc2l6ZSB8fCBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrcyB0aGUgYmxlbmQgbW9kZXMgdXNlZnVsIGZvciB0aGlzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbWl4ZWQ+fVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIHByZXNlcnZlRHJhd2luZ0J1ZmZlciBmbGFnIGFmZmVjdHMgd2hldGhlciBvciBub3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyByZXRhaW5lZCBhZnRlciByZW5kZXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvciBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gICAgICogSWYgdGhlIHNjZW5lIGlzIE5PVCB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGEgY2FudmFzIHNpemVkIGZpbGxSZWN0IG9wZXJhdGlvbiBldmVyeSBmcmFtZSB0byBzZXQgdGhlIGNhbnZhcyBiYWNrZ3JvdW5kIGNvbG9yLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGNsZWFyUmVjdCB0byBjbGVhciB0aGUgY2FudmFzIGV2ZXJ5IGZyYW1lLlxuICAgICAqIERpc2FibGUgdGhpcyBieSBzZXR0aW5nIHRoaXMgdG8gZmFsc2UuIEZvciBleGFtcGxlIGlmIHlvdXIgZ2FtZSBoYXMgYSBjYW52YXMgZmlsbGluZyBiYWNrZ3JvdW5kIGltYWdlIHlvdSBvZnRlbiBkb24ndCBuZWVkIHRoaXMgc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdFxuICAgICAqL1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyO1xuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gICAgICogSGFuZHkgZm9yIGNyaXNwIHBpeGVsIGFydCBhbmQgc3BlZWQgb24gbGVnYWN5IGRldmljZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSBvcHRpb25zLnJvdW5kUGl4ZWxzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSAweDAwMDAwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGFuIFtSLCBHLCBCXSBhcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gJyMwMDAwMDAnO1xuXG4gICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBvcHRpb25zLmJhY2tncm91bmRDb2xvciB8fCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3I7IC8vIHJ1biBiZyBjb2xvciBzZXR0ZXJcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB0cmFuc2Zvcm06e3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpfSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCByb290IG9iamVjdCB0aGF0IHRoZSByZW5kZXJlciB0cmllZCB0byByZW5kZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbn1cblxuLy8gY29uc3RydWN0b3JcblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeXN0ZW1SZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3lzdGVtUmVuZGVyZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZpbGwgaWYgbm90IHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3lzdGVtUmVuZGVyZXIjXG4gICAgICovXG4gICAgYmFja2dyb3VuZENvbG9yOlxuICAgIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9IHV0aWxzLmhleDJzdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHV0aWxzLmhleDJyZ2IodmFsLCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB2aWV3IHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy52aWV3LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0aGlzLnZpZXcuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5hdXRvUmVzaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgYW5kIG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgQ2FudmFzIERPTSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldykge1xuICAgIGlmIChyZW1vdmVWaWV3ICYmIHRoaXMudmlldy5wYXJlbnROb2RlKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy52aWV3KTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICB0aGlzLnZpZXcgPSBudWxsO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMDtcblxuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gbnVsbDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSBudWxsO1xufTtcbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgQ2FudmFzTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ0NhbnZhcycsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5DQU5WQVM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy52aWV3LmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogdGhpcy50cmFuc3BhcmVudCB9KTtcblxuICAgIC8qKlxuICAgICAqIEJvb2xlYW4gZmxhZyBjb250cm9sbGluZyBjYW52YXMgcmVmcmVzaC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIGEgQ2FudmFzTWFza01hbmFnZXIsIGhhbmRsZXMgbWFza2luZyB3aGVuIHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc01hc2tNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBuZXcgQ2FudmFzTWFza01hbmFnZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgcHJvcGVydHkgdXNlZCB0byBzZXQgdGhlIGNhbnZhcyBzbW9vdGhpbmcgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdpbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnd2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21vekltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnb0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21zSW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIHRoaXMuX21hcEJsZW5kTW9kZXMoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge1xuICAgICAgICB3b3JsZFRyYW5zZm9ybTogbmV3IG1hdGguTWF0cml4KCksXG4gICAgICAgIHdvcmxkQWxwaGE6IDFcbiAgICB9O1xuXG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihDYW52YXNSZW5kZXJlcik7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIHRoaXMgY2FudmFzIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IG9iamVjdC5wYXJlbnQ7XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBvYmplY3Q7XG5cbiAgICBvYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgb2JqZWN0LnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIHRoaXMuY29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF07XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMgJiYgdGhpcy52aWV3LnNjcmVlbmNhbnZhcylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGVhckJlZm9yZVJlbmRlcilcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy53aWR0aCAsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChvYmplY3QsIHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGlzLmVtaXQoJ3Bvc3RyZW5kZXInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpXG57XG4gICAgdGhpcy5kZXN0cm95UGx1Z2lucygpO1xuXG4gICAgLy8gY2FsbCB0aGUgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLnJlZnJlc2ggPSB0cnVlO1xuXG4gICAgdGhpcy5tYXNrTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG5cbiAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KVxue1xuICAgIHZhciB0ZW1wQ29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJDYW52YXModGhpcyk7XG4gICAgdGhpcy5jb250ZXh0ID0gdGVtcENvbnRleHQ7XG59O1xuXG4vKipcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXIjcmVzaXplXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAodywgaClcbntcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcywgdywgaCk7XG5cbiAgICAvL3Jlc2V0IHRoZSBzY2FsZSBtb2RlLi4gb2RkbHkgdGhpcyBzZWVtcyB0byBiZSByZXNldCB3aGVuIHRoZSBjYW52YXMgaXMgcmVzaXplZC5cbiAgICAvL3N1cmVseSBhIGJyb3dzZXIgYnVnPz8gTGV0IHBpeGkgZml4IHRoYXQgZm9yIHlvdS4uXG4gICAgaWYodGhpcy5zbW9vdGhQcm9wZXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dFt0aGlzLnNtb290aFByb3BlcnR5XSA9IChDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBNYXBzIFBpeGkgYmxlbmQgbW9kZXMgdG8gY2FudmFzIGJsZW5kIG1vZGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fbWFwQmxlbmRNb2RlcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmJsZW5kTW9kZXMpXG4gICAge1xuICAgICAgICB0aGlzLmJsZW5kTW9kZXMgPSB7fTtcblxuICAgICAgICBpZiAodXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdtdWx0aXBseSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc2NyZWVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdvdmVybGF5JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdkYXJrZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ2xpZ2h0ZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ2NvbG9yLWRvZGdlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdjb2xvci1idXJuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IQVJEX0xJR0hUXSAgICA9ICdoYXJkLWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb2Z0LWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdkaWZmZXJlbmNlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5FWENMVVNJT05dICAgICA9ICdleGNsdXNpb24nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ2h1ZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc2F0dXJhdGUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ2NvbG9yJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdsdW1pbm9zaXR5JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb29sIG5ldyBibGVuZCBtb2RlcyBpbiBjYW52YXMgJ2NvdWdoJyBpZSAnY291Z2gnXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TQVRVUkFUSU9OXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBjYW52YXNcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKi9cbmZ1bmN0aW9uIENhbnZhc0J1ZmZlcih3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBDYW52YXMgb2JqZWN0IHRoYXQgYmVsb25ncyB0byB0aGlzIENhbnZhc0J1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBBIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHdvLWRpbWVuc2lvbmFsIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn1cblxuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc0J1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzQnVmZmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYW52YXNCdWZmZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB2YWw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyBidWZmZXIgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNhbnZhc0J1ZmZlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENsZWFycyB0aGUgY2FudmFzIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIENhbnZhc0J1ZmZlciBjbGFzcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgY2FudmFzIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBjYW52YXMuXG4gKlxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlciB0byBkcmF3IHRoZSBwcmltaXRpdmUgZ3JhcGhpY3MgZGF0YS5cbiAqIEBzdGF0aWNcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xudmFyIENhbnZhc0dyYXBoaWNzID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0dyYXBoaWNzO1xuXG4vKlxuICogUmVuZGVycyBhIEdyYXBoaWNzIG9iamVjdCB0byBhIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBhY3R1YWwgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIDJkIGRyYXdpbmcgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIHdvcmxkQWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljc1RpbnQoZ3JhcGhpY3MpO1xuICAgICAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuX2ZpbGxUaW50O1xuICAgICAgICB2YXIgbGluZUNvbG9yID0gZGF0YS5fbGluZVRpbnQ7XG5cbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRPRE8gLSBuZWVkIHRvIGJlIFVuZGVmaW5lZCFcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsMCwyKk1hdGguUEkpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcblxuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJ4ID0gc2hhcGUueDtcbiAgICAgICAgICAgIHZhciByeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBzaGFwZS53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgcmFkaXVzID0gc2hhcGUucmFkaXVzO1xuXG4gICAgICAgICAgICB2YXIgbWF4UmFkaXVzID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyIHwgMDtcbiAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1cyA+IG1heFJhZGl1cyA/IG1heFJhZGl1cyA6IHJhZGl1cztcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGxDb2xvciB8fCBkYXRhLmZpbGxDb2xvciA9PT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3MgbWFza1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBtYXNrXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY29udGV4dCAyZCBtZXRob2Qgb2YgdGhlIGNhbnZhc1xuICovXG5DYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIGxlbiA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG5cbiAgICBpZiAobGVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludCBhcmUgdGhlIHNhbWUgY2xvc2UgdGhlIHBhdGggLSBtdWNoIG5lYXRlciA6KVxuICAgICAgICAgICAgaWYgKHBvaW50c1swXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gJiYgcG9pbnRzWzFdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5yZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuXG4gICAgICAgICAgICAvLyBlbGxpcHNlIGNvZGUgdGFrZW4gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG5cbiAgICAgICAgICAgIHZhciB3ID0gc2hhcGUud2lkdGggKiAyO1xuICAgICAgICAgICAgdmFyIGggPSBzaGFwZS5oZWlnaHQgKiAyO1xuXG4gICAgICAgICAgICB2YXIgeCA9IHNoYXBlLnggLSB3LzI7XG4gICAgICAgICAgICB2YXIgeSA9IHNoYXBlLnkgLSBoLzI7XG5cbiAgICAgICAgICAgIHZhciBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICAgICAgICAgICAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgIHhlID0geCArIHcsICAgICAgICAgICAvLyB4LWVuZFxuICAgICAgICAgICAgICAgIHllID0geSArIGgsICAgICAgICAgICAvLyB5LWVuZFxuICAgICAgICAgICAgICAgIHhtID0geCArIHcgLyAyLCAgICAgICAvLyB4LW1pZGRsZVxuICAgICAgICAgICAgICAgIHltID0geSArIGggLyAyOyAgICAgICAvLyB5LW1pZGRsZVxuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhlLCB5bSArIG95LCB4bSArIG94LCB5ZSwgeG0sIHllKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdGludCBvZiBhIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB0aGF0IHdpbGwgaGF2ZSBpdHMgdGludCB1cGRhdGVkXG4gKlxuICovXG5DYW52YXNHcmFwaGljcy51cGRhdGVHcmFwaGljc1RpbnQgPSBmdW5jdGlvbiAoZ3JhcGhpY3MpXG57XG4gICAgaWYgKGdyYXBoaWNzLnRpbnQgPT09IDB4RkZGRkZGICYmIGdyYXBoaWNzLl9wcmV2VGludCA9PT0gZ3JhcGhpY3MudGludClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGhpY3MuX3ByZXZUaW50ID0gZ3JhcGhpY3MudGludDtcblxuICAgIHZhciB0aW50UiA9IChncmFwaGljcy50aW50ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIHRpbnRHID0gKGdyYXBoaWNzLnRpbnQgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50QiA9IChncmFwaGljcy50aW50ICYgMHhGRikvIDI1NTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuZmlsbENvbG9yIHwgMDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEubGluZUNvbG9yIHwgMDtcblxuICAgICAgICAvKlxuICAgICAgICB2YXIgY29sb3JSID0gKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JHID0gKGZpbGxDb2xvciA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIHZhciBjb2xvckIgPSAoZmlsbENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBmaWxsQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcblxuICAgICAgICBjb2xvclIgPSAobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIGNvbG9yRyA9IChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckIgPSAobGluZUNvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBsaW5lQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcbiAgICAgICAgKi9cblxuICAgICAgICAvLyBzdXBlciBpbmxpbmUgY29zIGltIGFuIG9wdGltaXphdGlvbiBOQVpJIDopXG4gICAgICAgIGRhdGEuX2ZpbGxUaW50ID0gKCgoZmlsbENvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChmaWxsQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG4gICAgICAgIGRhdGEuX2xpbmVUaW50ID0gKCgobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChsaW5lQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG5cbiAgICB9XG59O1xuXG4iLCJ2YXIgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuL0NhbnZhc0dyYXBoaWNzJyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgdG8gaGFuZGxlIG1hc2tpbmcuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDYW52YXNNYXNrTWFuYWdlcigpXG57fVxuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzTWFza01hbmFnZXI7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgYWRkcyBpdCB0byB0aGUgY3VycmVudCBzdGFjayBvZiBtYXNrcy5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge29iamVjdH0gdGhlIG1hc2tEYXRhIHRoYXQgd2lsbCBiZSBwdXNoZWRcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhLCByZW5kZXJlcilcbntcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2F2ZSgpO1xuXG4gICAgdmFyIGNhY2hlQWxwaGEgPSBtYXNrRGF0YS5hbHBoYTtcbiAgICB2YXIgdHJhbnNmb3JtID0gbWFza0RhdGEud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICAvL1RPRE8gc3Vwb3J0IHNwcml0ZSBhbHBoYSBtYXNrcz8/XG4gICAgLy9sb3RzIG9mIGVmZm9ydCByZXF1aXJlZC4gSWYgZGVtYW5kIGlzIGdyZWF0IGVub3VnaC4uXG4gICAgaWYoIW1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sobWFza0RhdGEsIHJlbmRlcmVyLmNvbnRleHQpO1xuICAgICAgICByZW5kZXJlci5jb250ZXh0LmNsaXAoKTtcbiAgICB9XG5cbiAgICBtYXNrRGF0YS53b3JsZEFscGhhID0gY2FjaGVBbHBoYTtcbn07XG5cbi8qKlxuICogUmVzdG9yZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlIHRoZSBtYXNrIHdhcyBhcHBsaWVkLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIFNwcml0ZS9UZXh0dXJlIHRpbnRpbmcuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNUaW50ZXIgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzVGludGVyO1xuXG4vKipcbiAqIEJhc2ljYWxseSB0aGlzIG1ldGhvZCBqdXN0IG5lZWRzIGEgc3ByaXRlIGFuZCBhIGNvbG9yIGFuZCB0aW50cyB0aGUgc3ByaXRlIHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIHRpbnRlZCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUgPSBmdW5jdGlvbiAoc3ByaXRlLCBjb2xvcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHNwcml0ZS50ZXh0dXJlO1xuXG4gICAgY29sb3IgPSBDYW52YXNUaW50ZXIucm91bmRDb2xvcihjb2xvcik7XG5cbiAgICB2YXIgc3RyaW5nQ29sb3IgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG5cbiAgICB0ZXh0dXJlLnRpbnRDYWNoZSA9IHRleHR1cmUudGludENhY2hlIHx8IHt9O1xuXG4gICAgaWYgKHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl07XG4gICAgfVxuXG4gICAgIC8vIGNsb25lIHRleHR1cmUuLlxuICAgIHZhciBjYW52YXMgPSBDYW52YXNUaW50ZXIuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLy9DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCh0ZXh0dXJlLCBzdHJpbmdDb2xvciwgY2FudmFzKTtcbiAgICBDYW52YXNUaW50ZXIudGludE1ldGhvZCh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKTtcblxuICAgIGlmIChDYW52YXNUaW50ZXIuY29udmVydFRpbnRUb0ltYWdlKVxuICAgIHtcbiAgICAgICAgLy8gaXMgdGhpcyBiZXR0ZXI/XG4gICAgICAgIHZhciB0aW50SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgdGludEltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcblxuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSB0aW50SW1hZ2U7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSA9IGNhbnZhcztcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCBjb252ZXJ0aW5nIHRoZSB0ZXh0dXJlIHRvIGFuIGltYWdlIHRoZW4gd2UgbmVlZCB0byBsb3NlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhc1xuICAgICAgICBDYW52YXNUaW50ZXIuY2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ211bHRpcGx5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgPSBmdW5jdGlvbiAodGV4dHVyZSwgY29sb3IsIGNhbnZhcylcbntcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgIHZhciBjcm9wID0gdGV4dHVyZS5jcm9wLmNsb25lKCk7XG4gICAgY3JvcC54ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC55ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC53aWR0aCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AuaGVpZ2h0ICo9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXMud2lkdGggPSBjcm9wLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wLmhlaWdodDtcblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tYXRvcCc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ292ZXJsYXknIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhPdmVybGF5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgY3JvcC54LFxuICAgICAgICBjcm9wLnksXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodFxuICAgICk7XG5cbiAgICAvLyBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5Jztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgcGl4ZWwgcGVyIHBpeGVsLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuICAgIHZhciByID0gcmdiVmFsdWVzWzBdLCBnID0gcmdiVmFsdWVzWzFdLCBiID0gcmdiVmFsdWVzWzJdO1xuXG4gICAgdmFyIHBpeGVsRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIHZhciBwaXhlbHMgPSBwaXhlbERhdGEuZGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGl4ZWxzLmxlbmd0aDsgaSArPSA0KVxuICAgIHtcbiAgICAgICAgcGl4ZWxzW2krMF0gKj0gcjtcbiAgICAgICAgcGl4ZWxzW2krMV0gKj0gZztcbiAgICAgICAgcGl4ZWxzW2krMl0gKj0gYjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnB1dEltYWdlRGF0YShwaXhlbERhdGEsIDAsIDApO1xufTtcblxuLyoqXG4gKiBSb3VuZHMgdGhlIHNwZWNpZmllZCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gcm91bmQsIHNob3VsZCBiZSBhIGhleCBjb2xvclxuICovXG5DYW52YXNUaW50ZXIucm91bmRDb2xvciA9IGZ1bmN0aW9uIChjb2xvcilcbntcbiAgICB2YXIgc3RlcCA9IENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuXG4gICAgcmdiVmFsdWVzWzBdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzBdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMV0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMV0gLyBzdGVwKSAqIHN0ZXApO1xuICAgIHJnYlZhbHVlc1syXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1syXSAvIHN0ZXApICogc3RlcCk7XG5cbiAgICByZXR1cm4gdXRpbHMucmdiMmhleChyZ2JWYWx1ZXMpO1xufTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygc3RlcHMgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgY2FwIHdoZW4gcm91bmRpbmcgY29sb3JzLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhY2hlU3RlcHNQZXJDb2xvckNoYW5uZWwgPSA4O1xuXG4vKipcbiAqIFRpbnQgY2FjaGUgYm9vbGVhbiBmbGFnLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSA9IGZhbHNlO1xuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkLCBjb25zZXF1ZW50bHkgdGhlIGFiaWxpdHkgdG8gdGludCB1c2luZyB0aGUgbXVsdGlwbHkgbWV0aG9kLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID0gdXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpO1xuXG4vKipcbiAqIFRoZSB0aW50aW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKi9cbkNhbnZhc1RpbnRlci50aW50TWV0aG9kID0gQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID8gQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgOiAgQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWw7XG4iLCJ2YXIgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuXHR1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgVGV4dHVyZU1hbmFnZXIgPSBmdW5jdGlvbihnbClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIHRyYWNrIHRleHR1cmVzIGluIHRoZSByZW5kZXJlciBzbyB3ZSBjYW4gbm8gbG9uZ2VyIGxpc3RlbiB0byB0aGVtIG9uIGRlc3RydWN0aW9uLlxuXHR0aGlzLl9tYW5hZ2VkVGV4dHVyZXMgPSBbXTtcbiAgICB0aGlzLmdsVGV4dHVyZXMgPSB7fTtcblxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmdldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cbi8qKlxuICogVXBkYXRlcyBhbmQvb3IgQ3JlYXRlcyBhIFdlYkdMIHRleHR1cmUgZm9yIHRoZSByZW5kZXJlcidzIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB1cGRhdGVcbiAqL1xuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG5cdGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXS8vdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG5cbiAgICBpZiAoIWdsVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGdsVGV4dHVyZSA9IG5ldyBHTFRleHR1cmUoZ2wpO1xuICAgICAgICBnbFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHRydWVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbFRleHR1cmU7XG5cbiAgICAgICAvLyB0aGlzLmdsVGV4dHVyZXNbdGV4dHVyZS51aWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgIHRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub24oJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xuICAgIH1cblxuICAgIGdsVGV4dHVyZS51cGxvYWQodGV4dHVyZS5zb3VyY2UpO1xuICAgIFxuICAgIC8vVE9ETyBjaGVjayBpcyBwb3dlciBvZiB0d28uLlxuICAgIGdsVGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuXG4gICAgLy8gVE9ETyBjaGVjayBmb3Igc2NhbGluZyB0eXBlXG4gICAgZ2xUZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKTtcblxuICAgIHJldHVybiAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG59XG5cbi8qKlxuICogRGVsZXRlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byBkZXN0cm95XG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUsIF9za2lwUmVtb3ZlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0uZGVzdHJveSgpO1xuICAgICAgICB0ZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGVUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcblxuXG4gICAgICAgIGRlbGV0ZSB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdO1xuXG4gICAgICAgIGlmICghX3NraXBSZW1vdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzLmluZGV4T2YodGV4dHVyZSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLl9tYW5hZ2VkVGV4dHVyZXMsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24oKVxue1xuXHQvLyBlbXB0eSBhbGwgdGhlIG9sZCBnbCB0ZXh0dXJlcyBhcyB0aGV5IGFyZSB1c2VsZXNzIG5vd1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIGlmICh0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgLy8gZGVzdHJveSBtYW5hZ2VkIHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgdGhpcy5kZXN0cm95VGV4dHVyZSh0ZXh0dXJlLCB0cnVlKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFuYWdlZFRleHR1cmVzID0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlTWFuYWdlcjtcblxuIiwidmFyIFN5c3RlbVJlbmRlcmVyID0gcmVxdWlyZSgnLi4vU3lzdGVtUmVuZGVyZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL01hc2tNYW5hZ2VyJyksXG4gICAgU3RlbmNpbE1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyJyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIEJsZW5kTW9kZU1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIEZYQUFGaWx0ZXIgPSByZXF1aXJlKCcuL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi9UZXh0dXJlTWFuYWdlcicpLFxuICAgIGNyZWF0ZUNvbnRleHQgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5jcmVhdGVDb250ZXh0LFxuICAgIG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aSA9IHJlcXVpcmUoJy4vdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpJyksXG4gICAgbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgV2ViR0xSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgd2ViR0wgZW5hYmxlZCBjYW52YXMuIFRoaXMgcmVuZGVyZXJcbiAqIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wuIFRoaXMgUmVuZGVyIHdvcmtzIGJ5IGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgd2ViR0xCYXRjaHMuXG4gKiBTbyBubyBuZWVkIGZvciBTcHJpdGUgQmF0Y2hlcyBvciBTcHJpdGUgQ2xvdWRzLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgdmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD0wXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD0wXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcy4gSWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseSB0aGVuIEZYQUEgYW50aWFsaWFzaW5nIGlzIHVzZWRcbiAqIEBwYXJhbSBbb3B0aW9ucy5mb3JjZUZYQUE9ZmFsc2VdIHtib29sZWFufSBmb3JjZXMgRlhBQSBhbnRpYWxpYXNpbmcgdG8gYmUgdXNlZCBvdmVyIG5hdGl2ZS4gRlhBQSBpcyBmYXN0ZXIsIGJ1dCBtYXkgbm90IGFsd2F5cyBsb29rIGFzIGdyZWF0XG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLiBJZiB5b3Ugd2lzaCB0byBzZXQgdGhpcyB0byBmYWxzZSwgeW91ICptdXN0KiBzZXQgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHRvIGB0cnVlYC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWZcbiAqICAgICAgeW91IG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHQuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgU3lzdGVtUmVuZGVyZXIuY2FsbCh0aGlzLCAnV2ViR0wnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgcmVuZGVyZXIgYXMgYSBzdGFuZGFyZGlzZWQgY29uc3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0vL1xuICAgICAqXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQgPSB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHBhc3NlZCBpbiB0byBjcmVhdGUgYSBuZXcgd2ViZ2wgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0ge1xuICAgICAgICBhbHBoYTogdGhpcy50cmFuc3BhcmVudCxcbiAgICAgICAgYW50aWFsaWFzOiBvcHRpb25zLmFudGlhbGlhcyxcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnRyYW5zcGFyZW50ICYmIHRoaXMudHJhbnNwYXJlbnQgIT09ICdub3RNdWx0aXBsaWVkJyxcbiAgICAgICAgc3RlbmNpbDogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgIH07XG5cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhWzNdID0gdGhpcy50cmFuc3BhcmVudCA/IDAgOiAxO1xuXG4gICAgLyoqXG4gICAgICogRGVhbHMgd2l0aCBtYW5hZ2luZyB0aGUgc2hhZGVyIHByb2dyYW1zIGFuZCB0aGVpciBhdHRyaWJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG5ldyBTaGFkZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWFza3MgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IE1hc2tNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIgPSBuZXcgU3RlbmNpbE1hbmFnZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5GaWx0ZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgYmxlbmRNb2Rlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CbGVuZE1vZGVNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlciA9IG5ldyBCbGVuZE1vZGVNYW5hZ2VyKHRoaXMpO1xuXG4gICAgXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgT2JqZWN0UmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk9iamVjdFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbmV3IE9iamVjdFJlbmRlcmVyKHRoaXMpO1xuXG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBzbyBpdCBpcyByZWFkeSBmb3IgdGhlIG1hbmFnZXJzLlxuICAgIHRoaXMuZ2wgPSBjcmVhdGVDb250ZXh0KHRoaXMudmlldywgdGhpcy5fY29udGV4dE9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcblxuICAgIC8vIG1hcCBzb21lIHdlYkdMIGJsZW5kIGFuZCBkcmF3bW9kZXMuLlxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aShnbCk7XG4gICAgdGhpcy5kcmF3TW9kZXMgPSBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbClcblxuICAgIHRoaXMuX2FjdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldH1cbiAgICAgKi9cbiAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihXZWJHTFJlbmRlcmVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBXZWJHTCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuX2luaXRDb250ZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgLy8gY3JlYXRlIGEgdGV4dHVyZSBtYW5hZ2VyLi4uXG4gICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG5ldyBUZXh0dXJlTWFuYWdlcihnbCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIGRlZmF1bHQgcGl4aSBzZXR0aW5ncy4uXG4gICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcblxuXG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG51bGwsIHRoaXMucmVzb2x1dGlvbiwgdHJ1ZSk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LmNsZWFyQ29sb3IgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhO1xuICAgIFxuICAgIHRoaXMuYmluZFJlbmRlclRhcmdldCh0aGlzLnJvb3RSZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy5lbWl0KCdjb250ZXh0JywgZ2wpO1xuXG4gICAgLy8gc2V0dXAgdGhlIHdpZHRoL2hlaWdodCBwcm9wZXJ0aWVzIGFuZCBnbCB2aWV3cG9ydFxuICAgIHRoaXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsgICAgXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBpdHMgd2ViR0wgdmlld1xuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gdGhlIG9iamVjdCB0byBiZSByZW5kZXJlZFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdClcbntcbiAgICB0aGlzLmVtaXQoJ3ByZXJlbmRlcicpO1xuXG4gICAgLy8gbm8gcG9pbnQgcmVuZGVyaW5nIGlmIG91ciBjb250ZXh0IGhhcyBiZWVuIGJsb3duIHVwIVxuICAgIGlmICh0aGlzLmdsLmlzQ29udGV4dExvc3QoKSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBkaXNwbGF5T2JqZWN0O1xuXG4gICAgdmFyIGNhY2hlUGFyZW50ID0gZGlzcGxheU9iamVjdC5wYXJlbnQ7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgZGlzcGxheU9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICBkaXNwbGF5T2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIHRoaXMucm9vdFJlbmRlclRhcmdldCwgdGhpcy5jbGVhckJlZm9yZVJlbmRlcik7Ly90aGlzLnByb2plY3Rpb24pO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBEaXNwbGF5IE9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSBUaGUgcmVuZGVyIHRhcmdldCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgZGlzcGxheSBvYmplY3RcbiAqXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcmVuZGVyVGFyZ2V0LCBjbGVhcikvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblxuICAgIGlmKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIGZpbHRlciBtYW5hZ2VyXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnNldEZpbHRlclN0YWNrKCByZW5kZXJUYXJnZXQuZmlsdGVyU3RhY2sgKTtcblxuICAgIC8vIHJlbmRlciB0aGUgc2NlbmUhXG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJXZWJHTCh0aGlzKTtcblxuICAgIC8vIGZpbmlzaCB0aGUgY3VycmVudCByZW5kZXJlci4uXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXJlciB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSBvYmplY3RSZW5kZXJlciB7UElYSS5PYmplY3RSZW5kZXJlcn0gVGhlIG9iamVjdCByZW5kZXJlciB0byB1c2UuXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldE9iamVjdFJlbmRlcmVyID0gZnVuY3Rpb24gKG9iamVjdFJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRSZW5kZXJlciA9PT0gb2JqZWN0UmVuZGVyZXIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RvcCgpO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gb2JqZWN0UmVuZGVyZXI7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgd2ViR0wgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHdlYkdMIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHdlYkdMIHZpZXdcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSB0aGlzLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRvIHRoZSBvbmUgZ2l2ZW4gaW4gcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9IHRoZSBuZXcgcmVuZGVyIHRhcmdldFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5iaW5kUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICBpZihyZW5kZXJUYXJnZXQgIT09IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBpZih0aGlzLl9hY3RpdmVTaGFkZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gcmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuc2V0TWFza1N0YWNrKCByZW5kZXJUYXJnZXQuc3RlbmNpbE1hc2tTdGFjayApO1xuICAgIH1cbn1cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFNoYWRlciA9IGZ1bmN0aW9uIChzaGFkZXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgLy9UT0RPIGNhY2hlXG4gICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyICE9PSBzaGFkZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBzaGFkZXI7XG4gICAgICAgIHNoYWRlci5iaW5kKCk7XG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB9XG59XG5cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgbG9jYXRpb24pXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vVE9ETyB0ZXN0IHBlcmYgb2YgY2FjaGU/XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCAwO1xuXG4gICAgaWYodGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uICE9PSBsb2NhdGlvbikvL1xuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uID0gbG9jYXRpb25cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uICk7XG4gICAgfVxuXG4gICAgLy9UT0RPIC0gY2FuIHdlIGNhY2hlIHRoaXMgdGV4dHVyZSB0b28/XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7ICAgICAgXG4gICAgXG4gICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIGJpbmQgdGhlIHRleHR1cmUuLlxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXS5iaW5kKCk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogSGFuZGxlcyBhIGxvc3Qgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRMb3N0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgYSByZXN0b3JlZCB3ZWJnbCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9pbml0Q29udGV4dCgpO1xuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIucmVtb3ZlQWxsKCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciAoZXZlbnQgbGlzdGVuZXJzLCBzcHJpdGViYXRjaCwgZXRjLi4uKVxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIHJlbW92ZSBsaXN0ZW5lcnNcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuaGFuZGxlQ29udGV4dExvc3QpO1xuICAgIHRoaXMudmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkKTtcblxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIuZGVzdHJveUFsbCgpO1xuXG4gICAgLy8gY2FsbCBiYXNlIGRlc3Ryb3lcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHJlbW92ZVZpZXcpO1xuXG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgLy8gZGVzdHJveSB0aGUgbWFuYWdlcnNcbiAgICB0aGlzLnNoYWRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSBudWxsO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0gbnVsbDtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICB0aGlzLmdsID0gbnVsbDtcbn07XG5cbiIsInZhciBEZWZhdWx0U2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBQSVhJIGZpbHRlci4gQ3VycmVudGx5IG9ubHkgV2ViR0wgc3VwcG9ydHMgZmlsdGVycy5cbiAqIElmIHlvdSB3YW50IHRvIG1ha2UgYSBjdXN0b20gZmlsdGVyIHRoaXMgc2hvdWxkIGJlIHlvdXIgYmFzZSBjbGFzcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdmVydGV4U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIGZyYWdtZW50U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlIGFzIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gdW5pZm9ybXMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuaWZvcm1zIGZvciB0aGlzIGZpbHRlci5cbiAqL1xuZnVuY3Rpb24gQWJzdHJhY3RGaWx0ZXIodmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMpXG57XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBzaGFkZXJzXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVycyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4dHJhIHBhZGRpbmcgdGhhdCB0aGUgZmlsdGVyIG1pZ2h0IG5lZWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmlmb3JtcyBhcyBhbiBvYmplY3RcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29kZSBvZiB0aGUgdmVydGV4IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIGZyYW1lbnQgc2hhZGVyXG4gICAgICogQG1lbWJlciB7c3RyaW5nW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICAvL1RPRE8gYSByZW1pbmRlciAtIHdvdWxkIGJlIGNvb2wgdG8gaGF2ZSBsb3dlciByZXMgZmlsdGVycyBhcyB0aGlzIHdvdWxkIGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlLlxuXG4gICAgLy90eXBlb2YgZnJhZ21lbnRTcmMgPT09ICdzdHJpbmcnID8gZnJhZ21lbnRTcmMuc3BsaXQoJycpIDogKGZyYWdtZW50U3JjIHx8IFtdKTtcblxufVxuXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RGaWx0ZXI7XG5cbi8qKlxuICogR3JhYnMgYSBzaGFkZXIgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIHNoYWRlciBmcm9tXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5nZXRTaGFkZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXJzW2dsLmlkXTtcblxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gbmV3IERlZmF1bHRTaGFkZXIocmVuZGVyZXIuc2hhZGVyTWFuYWdlcixcbiAgICAgICAgICAgIHRoaXMudmVydGV4U3JjLFxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudFNyYyxcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNoYWRlcnNbZ2wuaWRdID0gc2hhZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8gY2xlYXIgdGhlIG91dHB1dFRhcmdldFxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xufTtcblxuLyoqXG4gKiBTeW5jcyBhIHVuaWZvcm0gYmV0d2VlbiB0aGUgY2xhc3Mgb2JqZWN0IGFuZCB0aGUgc2hhZGVycy5cbiAqXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5zaGFkZXJzLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyc1tpXS5zeW5jVW5pZm9ybSh1bmlmb3JtKTtcbiAgICB9XG59O1xuIiwidmFyIEFic3RyYWN0RmlsdGVyID0gcmVxdWlyZSgnLi9BYnN0cmFjdEZpbHRlcicpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqXG4gKiBCYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXG4gKiBtb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcbiAqIHVuc3VwcG9ydGVkIGJ5IFdlYkdMLlxuICpcbiAqIC0tXG4gKiBGcm9tOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKlxuICovXG5mdW5jdGlvbiBGWEFBRmlsdGVyKClcbntcbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG5cXG52b2lkIHRleGNvb3Jkcyh2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTlcsIG91dCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JTVywgb3V0IHZlYzIgdl9yZ2JTRSxcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjMiBpbnZlcnNlVlAgPSAxLjAgLyByZXNvbHV0aW9uLnh5O1xcbiAgICB2X3JnYk5XID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk5FID0gKGZyYWdDb29yZCArIHZlYzIoMS4wLCAtMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU1cgPSAoZnJhZ0Nvb3JkICsgdmVjMigtMS4wLCAxLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JTRSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiTSA9IHZlYzIoZnJhZ0Nvb3JkICogaW52ZXJzZVZQKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxuICAgdlJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xcblxcbiAgIC8vY29tcHV0ZSB0aGUgdGV4dHVyZSBjb29yZHMgYW5kIHNlbmQgdGhlbSB0byB2YXJ5aW5nc1xcbiAgIHRleGNvb3JkcyhhVGV4dHVyZUNvb3JkICogcmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgdl9yZ2JOVywgdl9yZ2JORSwgdl9yZ2JTVywgdl9yZ2JTRSwgdl9yZ2JNKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcblxcbi8qKlxcbkJhc2ljIEZYQUEgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGNvZGUgb24gZ2Vla3MzZC5jb20gd2l0aCB0aGVcXG5tb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcXG51bnN1cHBvcnRlZCBieSBXZWJHTC5cXG5cXG4tLVxcblxcbkZyb206XFxuaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcXG5cXG5Db3B5cmlnaHQgKGMpIDIwMTEgYnkgQXJtaW4gUm9uYWNoZXIuXFxuXFxuU29tZSByaWdodHMgcmVzZXJ2ZWQuXFxuXFxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxcbm1ldDpcXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXFxuICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcXG4gICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcXG4gICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXFxuXFxuICAgICogVGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3JcXG4gICAgICBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWNcXG4gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXFxuXFxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xcblxcXCJBUyBJU1xcXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXFxuQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcXG5PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcXG5TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXFxuVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXFxuKi9cXG5cXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01JTlxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvIDEyOC4wKVxcbiNlbmRpZlxcbiNpZm5kZWYgRlhBQV9SRURVQ0VfTVVMXFxuICAgICNkZWZpbmUgRlhBQV9SRURVQ0VfTVVMICAgKDEuMCAvIDguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfU1BBTl9NQVhcXG4gICAgI2RlZmluZSBGWEFBX1NQQU5fTUFYICAgICA4LjBcXG4jZW5kaWZcXG5cXG4vL29wdGltaXplZCB2ZXJzaW9uIGZvciBtb2JpbGUsIHdoZXJlIGRlcGVuZGVudFxcbi8vdGV4dHVyZSByZWFkcyBjYW4gYmUgYSBib3R0bGVuZWNrXFxudmVjNCBmeGFhKHNhbXBsZXIyRCB0ZXgsIHZlYzIgZnJhZ0Nvb3JkLCB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk5XLCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYlNXLCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjNCBjb2xvcjtcXG4gICAgbWVkaXVtcCB2ZWMyIGludmVyc2VWUCA9IHZlYzIoMS4wIC8gcmVzb2x1dGlvbi54LCAxLjAgLyByZXNvbHV0aW9uLnkpO1xcbiAgICB2ZWMzIHJnYk5XID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JOVykueHl6O1xcbiAgICB2ZWMzIHJnYk5FID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JORSkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTVykueHl6O1xcbiAgICB2ZWMzIHJnYlNFID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTRSkueHl6O1xcbiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JNKTtcXG4gICAgdmVjMyByZ2JNICA9IHRleENvbG9yLnh5ejtcXG4gICAgdmVjMyBsdW1hID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTtcXG4gICAgZmxvYXQgbHVtYU5XID0gZG90KHJnYk5XLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KHJnYk5FLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gZG90KHJnYlNXLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNFID0gZG90KHJnYlNFLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KHJnYk0sICBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU1pbiA9IG1pbihsdW1hTSwgbWluKG1pbihsdW1hTlcsIGx1bWFORSksIG1pbihsdW1hU1csIGx1bWFTRSkpKTtcXG4gICAgZmxvYXQgbHVtYU1heCA9IG1heChsdW1hTSwgbWF4KG1heChsdW1hTlcsIGx1bWFORSksIG1heChsdW1hU1csIGx1bWFTRSkpKTtcXG5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpcjtcXG4gICAgZGlyLnggPSAtKChsdW1hTlcgKyBsdW1hTkUpIC0gKGx1bWFTVyArIGx1bWFTRSkpO1xcbiAgICBkaXIueSA9ICAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuXFxuICAgIGZsb2F0IGRpclJlZHVjZSA9IG1heCgobHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFKSAqXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNSAqIEZYQUFfUkVEVUNFX01VTCksIEZYQUFfUkVEVUNFX01JTik7XFxuXFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvIChtaW4oYWJzKGRpci54KSwgYWJzKGRpci55KSkgKyBkaXJSZWR1Y2UpO1xcbiAgICBkaXIgPSBtaW4odmVjMihGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgIG1heCh2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBkaXIgKiByY3BEaXJNaW4pKSAqIGludmVyc2VWUDtcXG5cXG4gICAgdmVjMyByZ2JBID0gMC41ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDEuMCAvIDMuMCAtIDAuNSkpLnh5eiArXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMi4wIC8gMy4wIC0gMC41KSkueHl6KTtcXG4gICAgdmVjMyByZ2JCID0gcmdiQSAqIDAuNSArIDAuMjUgKiAoXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAtMC41KS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogMC41KS54eXopO1xcblxcbiAgICBmbG9hdCBsdW1hQiA9IGRvdChyZ2JCLCBsdW1hKTtcXG4gICAgaWYgKChsdW1hQiA8IGx1bWFNaW4pIHx8IChsdW1hQiA+IGx1bWFNYXgpKVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkEsIHRleENvbG9yLmEpO1xcbiAgICBlbHNlXFxuICAgICAgICBjb2xvciA9IHZlYzQocmdiQiwgdGV4Q29sb3IuYSk7XFxuICAgIHJldHVybiBjb2xvcjtcXG59XFxuXFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGZ4YWEodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKiB2UmVzb2x1dGlvbiwgdlJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxuXFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG59XG5cbkZYQUFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRlhBQUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGWEFBRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBGWEFBRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cbkZYQUFGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlciggcmVuZGVyZXIgKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBTcHJpdGVNYXNrRmlsdGVyIGNsYXNzXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSB0YXJnZXQgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZU1hc2tGaWx0ZXIoc3ByaXRlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgICB2TWFza0Nvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFza0Nvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgLy8gY2hlY2sgY2xpcCEgdGhpcyB3aWxsIHN0b3AgdGhlIG1hc2sgYmxlZWRpbmcgb3V0IGZyb20gdGhlIGVkZ2VzXFxuICAgIHZlYzIgdGV4dCA9IGFicyggdk1hc2tDb29yZCAtIDAuNSApO1xcbiAgICB0ZXh0ID0gc3RlcCgwLjUsIHRleHQpO1xcbiAgICBmbG9hdCBjbGlwID0gMS4wIC0gbWF4KHRleHQueSwgdGV4dC54KTtcXG4gICAgdmVjNCBvcmlnaW5hbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgIHZlYzQgbWFza3kgPSB0ZXh0dXJlMkQobWFzaywgdk1hc2tDb29yZCk7XFxuICAgIG9yaWdpbmFsICo9IChtYXNreS5yICogbWFza3kuYSAqIGFscGhhICogY2xpcCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG9yaWdpbmFsO1xcbn1cXG5cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbWFzazogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUuX3RleHR1cmUgfSxcbiAgICAgICAgICAgIGFscGhhOiAgICAgICAgICB7IHR5cGU6ICdmJywgdmFsdWU6IDF9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcbn1cblxuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0byByZXRyaWV2ZSB0aGUgZmlsdGVyIGZyb21cbiAqIEBwYXJhbSBpbnB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gb3V0cHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqL1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5tYXNrLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLl90ZXh0dXJlO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLndvcmxkQWxwaGE7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZU1hc2tGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgdXNlZCB0byBtb3ZlIHRoZSBkaXNwbGFjZW1lbnQgbWFwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdsTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBCbGVuZE1vZGVNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn1cblxuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZE1vZGVNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGVNYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMtdXAgdGhlIGdpdmVuIGJsZW5kTW9kZSBmcm9tIFdlYkdMJ3MgcG9pbnQgb2Ygdmlldy5cbiAqXG4gKiBAcGFyYW0gYmxlbmRNb2RlIHtudW1iZXJ9IHRoZSBibGVuZE1vZGUsIHNob3VsZCBiZSBhIFBpeGkgY29uc3QsIHN1Y2ggYXMgYFBJWEkuQkxFTkRfTU9ERVMuQUREYC4gU2VlXG4gKiAge0BsaW5rIFBJWEkuQkxFTkRfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLnNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChibGVuZE1vZGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblxuICAgIHZhciBtb2RlID0gdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuY3VycmVudEJsZW5kTW9kZV07XG4gICAgdGhpcy5yZW5kZXJlci5nbC5ibGVuZEZ1bmMobW9kZVswXSwgbW9kZVsxXSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgUXVhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL1F1YWQnKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXTtcblxuICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgIHJlbmRlclRhcmdldDpyZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LFxuICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgIGJvdW5kczpudWxsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldFtdfVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICAvLyBsaXN0ZW4gZm9yIGNvbnRleHQgYW5kIHVwZGF0ZSBuZWNlc3NhcnkgYnVmZmVyc1xuICAgIC8vVE9ETyBtYWtlIHRoaXMgZHluYW1pYyFcbiAgICAvL1RPRE8gdGVzdCB0aGlzIG91dCBieSBmb3JjZXMgcG93ZXIgb2YgdHdvP1xuICAgIHRoaXMudGV4dHVyZVNpemUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgcmVuZGVyZXIud2lkdGgsIHJlbmRlcmVyLmhlaWdodCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmcmFtZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBudWxsO1xufVxuXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbHRlck1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlck1hbmFnZXI7XG5cblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVQb29sLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucXVhZCA9IG5ldyBRdWFkKGdsKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcGFyYW0gYnVmZmVyIHtBcnJheUJ1ZmZlcn1cbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuc2V0RmlsdGVyU3RhY2sgPSBmdW5jdGlvbiAoIGZpbHRlclN0YWNrIClcbntcbiAgICB0aGlzLmZpbHRlclN0YWNrID0gZmlsdGVyU3RhY2s7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlciBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGZpbHRlcnMge1BJWEkuQWJzdHJhY3RGaWxlcltdfSB0aGUgZmlsdGVycyB0aGF0IHdpbGwgYmUgcHVzaGVkIHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFja1xuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5wdXNoRmlsdGVyID0gZnVuY3Rpb24gKHRhcmdldCwgZmlsdGVycylcbntcbiAgICAvLyBnZXQgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0Li5cbiAgICAvLyBUT0RPIHJlcGxhY2UgY2xvbmUgd2l0aCBhIGNvcHkgdG8gc2F2ZSBvYmplY3QgY3JlYXRpb25cbiAgICB2YXIgYm91bmRzID0gdGFyZ2V0LmZpbHRlckFyZWEgPyB0YXJnZXQuZmlsdGVyQXJlYS5jbG9uZSgpIDogdGFyZ2V0LmdldEJvdW5kcygpO1xuXG4gICAgLy9ib3VuZHMgPSBib3VuZHMuY2xvbmUoKTtcblxuICAgIC8vIHJvdW5kIG9mZiB0aGUgcmVjdGFuZ2xlIHRvIGdldCBhIG5pY2Ugc21vb29vb29vdGggZmlsdGVyIDopXG4gICAgYm91bmRzLnggPSBib3VuZHMueCB8IDA7XG4gICAgYm91bmRzLnkgPSBib3VuZHMueSB8IDA7XG4gICAgYm91bmRzLndpZHRoID0gYm91bmRzLndpZHRoIHwgMDtcbiAgICBib3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCB8IDA7XG5cblxuICAgIC8vIHBhZGRpbmchXG4gICAgdmFyIHBhZGRpbmcgPSBmaWx0ZXJzWzBdLnBhZGRpbmcgfCAwO1xuICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLnkgLT0gcGFkZGluZztcbiAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcblxuXG4gICAgaWYodGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vVE9ETyB0aGlzIHdpbGwgYnJlYWsgaWYgdGhlIHJlbmRlclRleHR1cmUgdHJhbnNmb3JtIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYSB0cmFuc2xhdGlvbi5cbiAgICAgICAgLy9XaWxsIG5lZWQgdG8gdGFrZSB0aGUgZnVsbCBtYXRyaXggdHJhbnNmb3JtIGludG8gYWNvdW50Li5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm07XG5cbiAgICAgICAgYm91bmRzLnggKz0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSArPSB0cmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdGhpcy5jYXBGaWx0ZXJBcmVhKCBib3VuZHMgKTtcblxuICAgICAgICBib3VuZHMueCAtPSB0cmFuc2Zvcm0udHg7XG4gICAgICAgIGJvdW5kcy55IC09IHRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG4gICAgfVxuXG4gICAgaWYoYm91bmRzLndpZHRoID4gMCAmJiBib3VuZHMuaGVpZ2h0ID4gMClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gYm91bmRzO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBjbGVhciB0aGUgdGV4dHVyZS4uXG4gICAgICAgIHRleHR1cmUuY2xlYXIoKTtcblxuICAgICAgICAvLyBUT0RPIGdldCByaWQgb2Ygb2JqZWN0IGNyZWF0aW9uIVxuICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OiB0ZXh0dXJlLFxuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJzXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIHB1c2ggc29tdGhpbmcgb24gdG8gdGhlIHN0YWNrIHRoYXQgaXMgZW1wdHlcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucG9wRmlsdGVyID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2sucG9wKCk7XG4gICAgdmFyIHByZXZpb3VzRmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2tbdGhpcy5maWx0ZXJTdGFjay5sZW5ndGgtMV07XG5cbiAgICB2YXIgaW5wdXQgPSBmaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIGlmIHRoZSByZW5kZXJUYXJnZXQgaXMgbnVsbCB0aGVuIHdlIGRvbid0IGFwcGx5IHRoZSBmaWx0ZXIgYXMgaXRzIG9mZnNjcmVlblxuICAgIGlmKCFmaWx0ZXJEYXRhLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gcHJldmlvdXNGaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIHVzZSBwcm9ncmFtXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpbnB1dC5mcmFtZTtcblxuICAgIHRoaXMucXVhZC5tYXAodGhpcy50ZXh0dXJlU2l6ZSwgaW5wdXQuZnJhbWUpO1xuXG5cbiAgICAvLyBUT0RPLi4gdGhpcyBwcm9iYWJseSBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBmaWx0ZXJzID0gZmlsdGVyRGF0YS5maWx0ZXI7XG5cbiAgICAvLyBhc3N1bWluZyBhbGwgZmlsdGVycyBmb2xsb3cgdGhlIGNvcnJlY3QgZm9ybWF0Pz9cbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgbm9ybWFsIGJsZW5kbW9kZSFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKENPTlNULkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDEpXG4gICAge1xuICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICBpZiAoZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJzWzBdLmFwcGx5RmlsdGVyKCB0aGlzLnJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0ICk7XG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBpbnB1dCApO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBmbGlwVGV4dHVyZSA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcFRleHR1cmUgPSB0aGlzLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGZpbHRlcnNbaV07XG5cbiAgICAgICAgICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSB0aGVuIHNldHRpbmcgdGhpcyBlYWNoIHRpbWU/XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlci5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIGZsb3BUZXh0dXJlICk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gZmxpcFRleHR1cmU7XG4gICAgICAgICAgICBmbGlwVGV4dHVyZSA9IGZsb3BUZXh0dXJlO1xuICAgICAgICAgICAgZmxvcFRleHR1cmUgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aC0xXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIG91dHB1dCApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBmbGlwVGV4dHVyZSApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxvcFRleHR1cmUgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyRGF0YS5maWx0ZXI7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgUmVuZGVyVGFyZ2V0XG4gKiBAcmV0dXJuIHtSZW5kZXJUYXJnZXR9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICggY2xlYXIgKVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSB0aGlzLnRleHR1cmVQb29sLnBvcCgpIHx8IG5ldyBSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJlci5nbCwgdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQsIENPTlNULlNDQUxFX01PREVTLkxJTkVBUiwgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uICogQ09OU1QuRklMVEVSX1JFU09MVVRJT04pO1xuICAgIHJlbmRlclRhcmdldC5mcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJUYXJnZXQ7XG59O1xuXG4vKlxuICogUmV0dXJucyBhIFJlbmRlclRhcmdldCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UmVuZGVyVGFyZ2V0fSBUaGUgUmVuZGVyVGFyZ2V0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnJldHVyblJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5wdXNoKCByZW5kZXJUYXJnZXQgKTtcbn07XG5cbi8qXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBzaGFkZXIge1NoYWRlcn0gVGhlIHNoYWRlciB0byB1cGxvYWRcbiAqIEBwYXJhbSBpbnB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAoc2hhZGVyLCBpbnB1dFRhcmdldCwgb3V0cHV0VGFyZ2V0LCBjbGVhcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQob3V0cHV0VGFyZ2V0KTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIG91dHB1dFRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2hhZGVyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBDYW4gdGhpcyBiZSBjYWNoZWQgYW5kIG5vdCBgdG9BcnJheWBlZCBlYWNoIGZyYW1lP1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcblxuICAgIC8vVE9ETyBjYW4gdGhpcyBiZSBvcHRpbWlzZWQ/XG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuLypcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMiAqIDQgKiA0KTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuKi9cblxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGlucHV0VGFyZ2V0LnRleHR1cmUpO1xuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIG1hcHBlZCBtYXRyaXhcbiAqIEBwYXJhbSBmaWx0ZXJBcmVhIHtSZWN0YW5nbGV9IFRoZSBmaWx0ZXIgYXJlYVxuICogQHBhcmFtIHNwcml0ZSB7U3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICogQHBhcmFtIG91dHB1dE1hdHJpeCB7TWF0cml4fSBAYWx2aW5cbiAqL1xuLy8gVE9ETyBwbGF5aW5nIGFyb3VuZCBoZXJlLi4gdGhpcyBpcyB0ZW1wb3JhcnkgLSAod2lsbCBlbmQgdXAgaW4gdGhlIHNoYWRlcilcbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeCA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhLCBzcHJpdGUsIG91dHB1dE1hdHJpeClcbntcbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBzcHJpdGUud29ybGRUcmFuc2Zvcm0uY29weShtYXRoLk1hdHJpeC5URU1QX01BVFJJWCksXG4gICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIHZhciBtYXBwZWRNYXRyaXggPSBvdXRwdXRNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIC8vIHNjYWxlLi5cbiAgICB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICBtYXBwZWRNYXRyaXgudHJhbnNsYXRlKGZpbHRlckFyZWEueCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIGZpbHRlckFyZWEueSAvIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0ICk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIHJhdGlvKTtcblxuICAgIHZhciB0cmFuc2xhdGVTY2FsZVggPSAodGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAvIHRleHR1cmUud2lkdGgpO1xuICAgIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0ZXh0dXJlLmhlaWdodCk7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS50eCAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuICAgIHdvcmxkVHJhbnNmb3JtLnR5IC89IHRleHR1cmUud2lkdGggKiB0cmFuc2xhdGVTY2FsZVg7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIG1hcHBlZE1hdHJpeC5wcmVwZW5kKHdvcmxkVHJhbnNmb3JtKTtcblxuICAgIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIG1hcHBlZE1hdHJpeC5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShzcHJpdGUuYW5jaG9yLngsIHNwcml0ZS5hbmNob3IueSk7XG5cbiAgICByZXR1cm4gbWFwcGVkTWF0cml4O1xuXG4gICAgLy8gS2VlcGluZyB0aGUgb3JnaW5hbCBhcyBhIHJlbWluZGVyIHRvIG1lIG9uIGhvdyB0aGlzIHdvcmtzIVxuICAgIC8vXG4gICAgLy8gdmFyIG0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuICAgIC8vIC8vIHNjYWxlLi5cbiAgICAvLyB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICAvLyBtLnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCk7XG5cblxuICAgIC8vIG0uc2NhbGUoMSAsIHJhdGlvKTtcblxuXG4gICAgLy8gdmFyIHRyYW5zZm9ybSA9IHd0LmNsb25lKCk7XG5cbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyA2MjApO1xuICAgIC8vIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyAzODApO1xuXG4gICAgLy8gdHJhbnNmb3JtLnR4IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICAvLyB0cmFuc2Zvcm0udHkgLz0gNjIwICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgLy8gdHJhbnNmb3JtLmludmVydCgpO1xuXG4gICAgLy8gdHJhbnNmb3JtLmFwcGVuZChtKTtcblxuICAgIC8vIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIC8vIHRyYW5zZm9ybS5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgLy8gcmV0dXJuIHRyYW5zZm9ybTtcbn07XG5cbi8qXG4gKiBDb25zdHJhaW5zIHRoZSBmaWx0ZXIgYXJlYSB0byB0aGUgdGV4dHVyZSBzaXplXG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWEgd2Ugd2FudCB0byBjYXBcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY2FwRmlsdGVyQXJlYSA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhKVxue1xuICAgIGlmIChmaWx0ZXJBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCArPSBmaWx0ZXJBcmVhLng7XG4gICAgICAgIGZpbHRlckFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlckFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLmhlaWdodCArPSBmaWx0ZXJBcmVhLnk7XG4gICAgICAgIGZpbHRlckFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnggKyBmaWx0ZXJBcmVhLndpZHRoID4gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLndpZHRoID0gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAtIGZpbHRlckFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGZpbHRlckFyZWEueSArIGZpbHRlckFyZWEuaGVpZ2h0ID4gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAtIGZpbHRlckFyZWEueTtcbiAgICB9XG59O1xuXG4vKlxuICogUmVzaXplcyBhbGwgdGhlIHJlbmRlciB0YXJnZXRzIGluIHRoZSBwb29sXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMudGV4dHVyZVNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZVBvb2xbaV0ucmVzaXplKCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgZmlsdGVyIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGZpbHRlciBzdGFjay5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucXVhZC5kZXN0cm95KCk7XG4gICAgXG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG4gICAgXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IG51bGw7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGV4dHVyZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVQb29sID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBBbHBoYU1hc2tGaWx0ZXIgPSByZXF1aXJlKCcuLi9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuc3RlbmNpbFN0YWNrID0gW107XG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ID0gMDtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbCA9IFtdO1xufVxuXG5NYXNrTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFNwcml0ZU1hc2sodGFyZ2V0LCBtYXNrRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IG1hc2sgZnJvbSB0aGUgbWFzayBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIGlmIChtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnBvcFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB2YXIgYWxwaGFNYXNrRmlsdGVyID0gdGhpcy5hbHBoYU1hc2tQb29sLnBvcCgpO1xuXG4gICAgaWYgKCFhbHBoYU1hc2tGaWx0ZXIpXG4gICAge1xuICAgICAgICBhbHBoYU1hc2tGaWx0ZXIgPSBbbmV3IEFscGhhTWFza0ZpbHRlcihtYXNrRGF0YSldO1xuICAgIH1cblxuICAgIGFscGhhTWFza0ZpbHRlclswXS5tYXNrU3ByaXRlID0gbWFza0RhdGE7XG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGFyZ2V0LCBhbHBoYU1hc2tGaWx0ZXIpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBmaWx0ZXJzID0gdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgdGhpcy5hbHBoYU1hc2tQb29sLnB1c2goZmlsdGVycyk7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoTWFzayhtYXNrRGF0YSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcE1hc2sobWFza0RhdGEpO1xufTtcblxuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpLFxuICAgIENvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXInKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTaGFkZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heEF0dGlicyA9IDEwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXhBdHRpYnM7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YWNrID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcblxuLy8gICAgdGhpcy5pbml0UGx1Z2lucygpO1xufVxuXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hbmFnZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oU2hhZGVyTWFuYWdlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyTWFuYWdlcjtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRyaWJ1dGUgY29ycmVjdGx5IGFzIHRoaXMgdGVuZHMgdG8gdmFyeVxuICAgIHRoaXMubWF4QXR0aWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVE9ETyAtIFdoeSBhcmUgdGhlc2Ugbm90IHBsdWdpbnM/IFdlIGNhbid0IGRlY291cGxlIHByaW1pdGl2ZXMgdW5sZXNzIHRoZXkgYXJlLi4uLlxuICAgIHRoaXMuZGVmYXVsdFNoYWRlciA9IG5ldyBUZXh0dXJlU2hhZGVyKHRoaXMpO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBuZXcgQ29tcGxleFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogVGFrZXMgdGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gaW4gcGFyYW1ldGVycyBhbmQgdXBsb2FkcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJzIHthbnlbXX0gYXR0cmlic1xuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRBdHRyaWJzID0gZnVuY3Rpb24gKGF0dHJpYnMpXG57XG4gICAgLy8gcmVzZXQgdGVtcCBzdGF0ZVxuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMudGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yICh2YXIgYSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbYXR0cmlic1thXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYlN0YXRlW2ldICE9PSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgc2hhZGVyLlxuICpcbiAqIEBwYXJhbSBzaGFkZXIge1BJWEkuU2hhZGVyfSB0aGUgc2hhZGVyIHRvIHVwbG9hZFxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKVxue1xuICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5fY3VycmVudElkID09PSBzaGFkZXIudWlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IHNoYWRlci51aWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBzaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmdsLnVzZVByb2dyYW0oc2hhZGVyLnByb2dyYW0pO1xuICAgIHRoaXMuc2V0QXR0cmlicyhzaGFkZXIuYXR0cmlidXRlcyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBvYmplY3QuXG4gKlxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLmRlc3Ryb3koKTtcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBudWxsO1xufTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFza01hbmFnZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG51bGw7XG59XG5cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBtYXNrIHN0YWNrIHRoYXQgaXMgdXNlZCBieSB0aGlzIG1hbmFnZXIuXG4gKlxuICogQHBhcmFtIHN0ZW5jaWxNYXNrU3RhY2sge1BJWEkuU3RlbmNpbE1hc2tTdGFja30gVGhlIG1hc2sgc3RhY2tcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuc2V0TWFza1N0YWNrID0gZnVuY3Rpb24gKCBzdGVuY2lsTWFza1N0YWNrIClcbntcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBzdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIGlmIChzdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suIEBhbHZpblxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hdHRhY2hTdGVuY2lsQnVmZmVyKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBzbXMgPSB0aGlzLnN0ZW5jaWxNYXNrU3RhY2s7XG5cbiAgICB0aGlzLmJpbmRHcmFwaGljcyhncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xuICAgICAgICBzbXMucmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIHNtcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wdXNoKHdlYkdMRGF0YSk7XG5cbiAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgLy8gZHJhdyB0aGUgdHJpYW5nbGUgc3RyaXAhXG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IGEgcXVhZCB0byBpbmNyZW1lbnQuLlxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cbiAgICBzbXMuY291bnQrKztcbn07XG5cbi8qKlxuICogVE9ETyB0aGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIVxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5iaW5kR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICAvL2lmICh0aGlzLl9jdXJyZW50R3JhcGhpY3MgPT09IGdyYXBoaWNzKXJldHVybjtcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGJpbmQgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgdmFyIHNoYWRlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICAvKlxuICAgICAgICBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMuY29sb3IuX2xvY2F0aW9uLCB3ZWJHTERhdGEuY29sb3IpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDIsIDApO1xuXG4gICAgICAgIC8vIG5vdyBkbyB0aGUgcmVzdC4uXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICovXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmFjdGl2YXRlUHJpbWl0aXZlU2hhZGVyKCk7XG4vLyAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnByaW1pdGl2ZVNoYWRlcjtcbiAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cblxuICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4vLyAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG5cbiAgICAgIC8qICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTFmKHNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEpO1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCA0LCBnbC5GTE9BVCwgZmFsc2UsNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTsqL1xuICAgIH1cbn07XG5cbi8qKlxuICogVE9ETyBAYWx2aW5cbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTdGVuY2lsID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wb3AoKTtcblxuICAgIHNtcy5jb3VudC0tO1xuXG4gICAgaWYgKHNtcy5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgLy8gdGhlIHN0YWNrIGlzIGVtcHR5IVxuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICAgICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuXG4gICAgICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSAobGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOVkVSVCk7XG5cbiAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50ICs9IDI7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAvLyAgY29uc29sZS5sb2coXCI8PD4+XCIpXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcblxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCksIDB4RkYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5LRUVQKTtcblxuXG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgbWFzayBzdGFjay5cbiAqXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjayA9IG51bGw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119IFRoZSBtYXNrIGRhdGEgc3RydWN0dXJlIHRvIHVzZVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgXG4gICAgLy9UT0RPIEZJWFxuICAgIGlmIChtYXNrRGF0YS5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy51cGRhdGVHcmFwaGljcyhtYXNrRGF0YSwgdGhpcy5yZW5kZXJlci5nbCk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119XG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuXG4gICAgdGhpcy5wb3BTdGVuY2lsKG1hc2tEYXRhLCBtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YVswXSk7XG59O1xuXG4iLCIvKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gV2ViR0xNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMucmVuZGVyZXIub24oJ2NvbnRleHQnLCB0aGlzLm9uQ29udGV4dENoYW5nZSwgdGhpcyk7XG59XG5cbldlYkdMTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFuYWdlcjtcblxuLyoqXG4gKiBHZW5lcmljIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXHQvLyBkbyBzb21lIGNvZGVzIGluaXQhXG59O1xuXG4vKipcbiAqIEdlbmVyaWMgZGVzdHJveSBtZXRob2RzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICovXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVuZGVyZXIub2ZmKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IGNvbXBsZXggcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBDb21wbGV4UHJpbWl0aXZlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gdmVjNChjb2xvciAqIGFscGhhICogdGludCwgYWxwaGEpOycsLy9cIiAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdGludDogICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwgMCwgMF0gfSxcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgY29sb3I6ICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwwLDBdIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYUNvbG9yOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCYXNlIHNoYWRlciBjbGFzcyBmb3IgUElYSSBtYW5hZ2VkIHNoYWRlcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFt1bmlmb3Jtc10ge29iamVjdH0gVW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxuICogQHBhcmFtIFthdHRyaWJ1dGVzXSB7b2JqZWN0fSBBdHRyaWJ1dGVzIGZvciB0aGlzIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKVxue1xuICAgIGlmICghdmVydGV4U3JjIHx8ICFmcmFnbWVudFNyYylcbiAgICB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpeGkuanMgRXJyb3IuIFNoYWRlciByZXF1aXJlcyB2ZXJ0ZXhTcmMgYW5kIGZyYWdtZW50U3JjJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmdsID0gc2hhZGVyTWFuYWdlci5yZW5kZXJlci5nbDtcblxuICAgIC8vVE9ETyBtYXliZSB3ZSBzaG91bGQgcGFzcyByZW5kZXJlciByYXRoZXIgdGhhbiBzaGFkZXIgbWFuZ2VyPz8gZm9vZCBmb3IgdGhvdWdodC4uXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyID0gc2hhZGVyTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBwcm9ncmFtLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xQcm9ncmFtfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF0dHJpYnV0ZXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRleHR1cmUgY291bnRlclxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYztcblxuICAgIHRoaXMuaW5pdCgpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc2hhZGVyIGFuZCB1c2VzIGl0XG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29tcGlsZSgpO1xuXG4gICAgdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLnVuaWZvcm1zKSk7XG4gICAgdGhpcy5jYWNoZUF0dHJpYnV0ZUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpKTtcbn07XG5cbi8qKlxuICogQ2FjaGVzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHVuaWZvcm0gZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSB1bmlmb3JtcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyA9IGZ1bmN0aW9uIChrZXlzKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMudW5pZm9ybXNba2V5c1tpXV0uX2xvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBrZXlzW2ldKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSBhdHRyaWJ1dGVzIHRvIGNhY2hlXG4gKi9cblNoYWRlci5wcm90b3R5cGUuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNba2V5c1tpXV0gPSB0aGlzLmdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4uLlxuXG4gICAgLy8gQmVnaW4gd29yc3QgaGFjayBldmEgLy9cblxuICAgIC8vIFdIWT8/PyBPTkxZIG9uIG15IGNocm9tZSBwaXhlbCB0aGUgbGluZSBhYm92ZSByZXR1cm5zIC0xIHdoZW4gdXNpbmcgZmlsdGVycz9cbiAgICAvLyBtYXliZSBpdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdsIGNvbnRleHQuXG4gICAgLy8gSSdtIGNvbnZpbmNlZCB0aGlzIGlzIGEgYnVnIGluIHRoZSBjaHJvbWUgYnJvd3NlciBhcyB0aGVyZSBpcyBOTyByZWFzb24gd2h5IHRoaXMgc2hvdWxkIGJlIHJldHVybmluZyAtMSBlc3BlY2lhbGx5IGFzIGl0IG9ubHkgbWFuaWZlc3RzIG9uIG15IGNocm9tZSBwaXhlbFxuICAgIC8vIElmIHRoZXJlcyBhbnkgd2ViR0wgcGVvcGxlIHRoYXQga25vdyB3aHkgY291bGQgaGFwcGVuIHBsZWFzZSBoZWxwIDopXG4gICAgLy8gaWYgKHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPT09IC0xKXtcbiAgICAvLyAgICAgdGhpcy5hdHRyaWJ1dGVzLmFDb2xvciA9IDI7XG4gICAgLy8gfVxuXG4gICAgLy8gRW5kIHdvcnN0IGhhY2sgZXZhIC8vXG59O1xuXG4vKipcbiAqIEF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZCBjcmVhdGVzIHRoZSBwcm9ncmFtLlxuICpcbiAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX1cbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIGdsVmVydFNoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5WRVJURVhfU0hBREVSLCB0aGlzLnZlcnRleFNyYyk7XG4gICAgdmFyIGdsRnJhZ1NoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuZnJhZ21lbnRTcmMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xGcmFnU2hhZGVyKTtcbiAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcblxuICAgIC8vIGlmIGxpbmtpbmcgZmFpbHMsIHRoZW4gbG9nIGFuZCBjbGVhbnVwXG4gICAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BpeGkuanMgRXJyb3I6IENvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlci4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuVkFMSURBVEVfU1RBVFVTJywgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuZ2V0RXJyb3IoKScsIGdsLmdldEVycm9yKCkpO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcHJvZ3JhbSBpbmZvIGxvZywgbG9nIGl0XG4gICAgICAgIGlmIChnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSAhPT0gJycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBXYXJuaW5nOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpJywgZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgcHJvZ3JhbSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgc29tZSBzaGFkZXJzXG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsVmVydFNoYWRlcik7XG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsRnJhZ1NoYWRlcik7XG5cbiAgICByZXR1cm4gKHRoaXMucHJvZ3JhbSA9IHByb2dyYW0pO1xufTtcblxuLyoqXG4qIEFkZHMgYSBuZXcgdW5pZm9ybVxuKlxuKiBAcGFyYW0gdW5pZm9ybSB7b2JqZWN0fSB0aGUgbmV3IHVuaWZvcm0gdG8gYXR0YWNoXG4qL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBsb2NhdGlvbiA9IHVuaWZvcm0uX2xvY2F0aW9uLFxuICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWUsXG4gICAgICAgIGdsID0gdGhpcy5nbCxcbiAgICAgICAgaSwgaWw7XG5cbiAgICBzd2l0Y2ggKHVuaWZvcm0udHlwZSlcbiAgICB7XG4gICAgICAgIGNhc2UgJ2InOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlID8gMSA6IDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGludCB2YWx1ZVxuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBzaW5nbGUgZmxvYXQgdmFsdWVcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDIpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoMykgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoNCkgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzRmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSAyRCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjInOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgM0QgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YzJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDREIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2NCc6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzFmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzRmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTInOlxuICAgICAgICBjYXNlICdtYXQyJzpcbiAgICAgICAgY2FzZSAnTWF0cml4MmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICBjYXNlICdtYXQzJzpcbiAgICAgICAgY2FzZSAnTWF0cml4M2Z2JzpcblxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICdtNCc6XG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICBjYXNlICdNYXRyaXg0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgQ29sb3IgVmFsdWVcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGludGVnZXJzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIChKUyBvciB0eXBlZCBhcnJheSlcbiAgICAgICAgY2FzZSAnZnYxJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDJEIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjJ2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDIgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDJdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMiArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAzRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yzdic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgzICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMyArIDJdICAgPSB2YWx1ZVtpXS56O1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHVuaWZvcm0uX2FycmF5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDREIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjR2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDRdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgMl0gICA9IHZhbHVlW2ldLno7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAzXSAgID0gdmFsdWVbaV0udztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBQSVhJLlRleHR1cmVcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgIGNhc2UgJ3NhbXBsZXIyRCc6XG5cbiAgICAgICAgICAgIGlmICghdW5pZm9ybS52YWx1ZSB8fCAhdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFjdGl2YXRlIHRoaXMgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0aGlzLnRleHR1cmVDb3VudF0pO1xuXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgICAgICAgICBpZiAoIXRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2FtcGxlcjJEKHVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSB0ZXh0dXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb25lLi5cbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gICAgICAgICAgICAvLyBzZXQgdW5pZm9ybSB0byB0ZXh0dXJlIGluZGV4XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkodW5pZm9ybS5fbG9jYXRpb24sIHRoaXMudGV4dHVyZUNvdW50KTtcblxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IG5leHQgdGV4dHVyZSBpZFxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBTaGFkZXIgV2FybmluZzogVW5rbm93biB1bmlmb3JtIHR5cGU6ICcgKyB1bmlmb3JtLnR5cGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnVuaWZvcm1zKVxuICAgIHtcbiAgICAgICAgdGhpcy5zeW5jVW5pZm9ybSh0aGlzLnVuaWZvcm1zW2tleV0pO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJbml0aWFsaXNlcyBhIFNhbXBsZXIyRCB1bmlmb3JtICh3aGljaCBtYXkgb25seSBiZSBhdmFpbGFibGUgbGF0ZXIgb24gYWZ0ZXIgaW5pdFVuaWZvcm1zIG9uY2UgdGhlIHRleHR1cmUgaGFzIGxvYWRlZClcbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuaW5pdFNhbXBsZXIyRCA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGlmICh1bmlmb3JtLnRleHR1cmVEYXRhKVxuICAgIHtcblxuICAgICAgICAvL1RPRE8gbW92ZSB0aGlzLi4uXG4gICAgICAgIHZhciBkYXRhID0gdW5pZm9ybS50ZXh0dXJlRGF0YTtcblxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG5cbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGxpZWRBbHBoYSk7XG4gICAgICAgIC8vIEdMVGV4dHVyZSA9IG1hZyBsaW5lYXIsIG1pbiBsaW5lYXJfbWlwbWFwX2xpbmVhciwgd3JhcCByZXBlYXQgKyBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgLy8gR0xUZXh0dXJlTGluZWFyID0gbWFnL21pbiBsaW5lYXIsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdFJlcGVhdCA9IG1hZy9taW4gTkVBUkVTVCwgd3JhcCByZXBlYXRcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdCA9IG1hZy9taW4gbmVhcmVzdCwgd3JhcCBjbGFtcFxuICAgICAgICAvLyBBdWRpb1RleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDUxMiwgaGVpZ2h0IDIsIGJvcmRlciAwXG4gICAgICAgIC8vIEtleVRleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDI1NiwgaGVpZ2h0IDIsIGJvcmRlciAwXG5cbiAgICAgICAgLy8gIG1hZ0ZpbHRlciBjYW4gYmU6IGdsLkxJTkVBUiwgZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgb3IgZ2wuTkVBUkVTVFxuICAgICAgICAvLyAgd3JhcFMvVCBjYW4gYmU6IGdsLkNMQU1QX1RPX0VER0Ugb3IgZ2wuUkVQRUFUXG5cbiAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBkYXRhLmx1bWluYW5jZSA/IGdsLkxVTUlOQU5DRSA6IGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRleHR1cmUuc291cmNlKTtcblxuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZGF0YS5tYWdGaWx0ZXIgPyBkYXRhLm1hZ0ZpbHRlciA6IGdsLkxJTkVBUiApO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFICk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZGF0YS53cmFwVCA/IGRhdGEud3JhcFQgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5zaGFkZXJNYW5hZ2VyLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgc2hhZGVyLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmdsLmRlbGV0ZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgIHRoaXMudW5pZm9ybXMgPSBudWxsO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleFNyYyA9IG51bGw7XG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IG51bGw7XG59O1xuXG5TaGFkZXIucHJvdG90eXBlLl9nbENvbXBpbGUgPSBmdW5jdGlvbiAodHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIHRoaXMuZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc3JjKTtcbiAgICB0aGlzLmdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghdGhpcy5nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCB0aGlzLmdsLkNPTVBJTEVfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIGN1c3RvbVVuaWZvcm1zLCBjdXN0b21BdHRyaWJ1dGVzKVxue1xuICAgIHZhciB1bmlmb3JtcyA9IHtcblxuICAgICAgICB1U2FtcGxlcjogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiAwIH0sXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6ICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDFdKSB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21Vbmlmb3JtcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIHUgaW4gY3VzdG9tVW5pZm9ybXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVuaWZvcm1zW3VdID0gY3VzdG9tVW5pZm9ybXNbdV07XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBhVmVydGV4UG9zaXRpb246ICAgIDAsXG4gICAgICAgIGFUZXh0dXJlQ29vcmQ6ICAgICAgMCxcbiAgICAgICAgYUNvbG9yOiAgICAgICAgICAgICAwXG4gICAgfTtcblxuICAgIGlmIChjdXN0b21BdHRyaWJ1dGVzKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgYSBpbiBjdXN0b21BdHRyaWJ1dGVzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2FdID0gY3VzdG9tQXR0cmlidXRlc1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IHZlcnRleFNyYyB8fCBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcyk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKGdsKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IFRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgZnJhZ21lbnRTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYztcblxuICAgIFNoYWRlci5jYWxsKHRoaXMsIGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTsvLywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xuXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuLi9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBCYXNlIGZvciBhIGNvbW1vbiBvYmplY3QgcmVuZGVyZXIgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHN5c3RlbSByZW5kZXJlciBwbHVnaW4uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBPYmplY3RSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59XG5cblxuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9iamVjdFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RSZW5kZXJlcjtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHJlbmRlcmVyIGFuZCBzZXRzIHRoZSBzaGFkZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gc2V0IHRoZSBzaGFkZXIuLlxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgcmVuZGVyZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIGZsdXNoZXNcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gZmx1c2ghXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyByZW5kZXIgdGhlIG9iamVjdFxufTtcbiIsIi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHF1YWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gVGhlIGdsIGNvbnRleHQgZm9yIHRoaXMgcXVhZCB0byB1c2UuXG4gKi9cbmZ1bmN0aW9uIFF1YWQoZ2wpXG57XG4gICAgLypcbiAgICAgKiB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbi8vICAgIHRoaXMudGV4dHVyZXMgPSBuZXcgVGV4dHVyZVV2cygpO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMjAwLDAsXG4gICAgICAgIDIwMCwyMDAsXG4gICAgICAgIDAsMjAwXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBxdWFkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KFtcbiAgICAgICAgMCwwLFxuICAgICAgICAxLDAsXG4gICAgICAgIDEsMSxcbiAgICAgICAgMCwxXG4gICAgXSk7XG5cbi8vICAgIHZhciB3aGl0ZSA9ICgweEZGRkZGRiA+PiAxNikgKyAoMHhGRkZGRkYgJiAweGZmMDApICsgKCgweEZGRkZGRiAmIDB4ZmYpIDw8IDE2KSArICgxICogMjU1IDw8IDI0KTtcbiAgICAvL1RPRE8gY29udmVydCB0aGlzIHRvIGEgMzIgdW5zaWduZWQgaW50IGFycmF5XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIGNvbXBvbmVudHMgb2YgdGhlIHRyaWFuZ2xlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDFcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KFtcbiAgICAgICAgMCwgMSwgMiwgMCwgMywgMlxuICAgIF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIHZlcnRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICg4ICsgOCArIDE2KSAqIDQsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59XG5cblF1YWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUXVhZDtcblxuLyoqXG4gKiBNYXBzIHR3byBSZWN0YW5nbGUgdG8gdGhlIHF1YWRcbiAqIEBwYXJhbSByZWN0IHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZpcnN0IHJlY3RhbmdsZVxuICogQHBhcmFtIHJlY3QyIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHNlY29uZCByZWN0YW5nbGVcbiAqL1xuUXVhZC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24ocmVjdCwgcmVjdDIpXG57XG4gICAgdmFyIHggPSAwOyAvL3JlY3QyLnggLyByZWN0LndpZHRoO1xuICAgIHZhciB5ID0gMDsgLy9yZWN0Mi55IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1swXSA9IHg7XG4gICAgdGhpcy51dnNbMV0gPSB5O1xuXG4gICAgdGhpcy51dnNbMl0gPSB4ICsgcmVjdDIud2lkdGggLyByZWN0LndpZHRoO1xuICAgIHRoaXMudXZzWzNdID0geTtcblxuICAgIHRoaXMudXZzWzRdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIHRoaXMudXZzWzZdID0geDtcbiAgICB0aGlzLnV2c1s3XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIC8vLyAtLS0tLVxuICAgIHggPSByZWN0Mi54O1xuICAgIHkgPSByZWN0Mi55O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1swXSA9IHg7XG4gICAgdGhpcy52ZXJ0aWNlc1sxXSA9IHk7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzJdID0geCArIHJlY3QyLndpZHRoO1xuICAgIHRoaXMudmVydGljZXNbM10gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1s0XSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzVdID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudmVydGljZXNbNl0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0O1xuXG4gICAgdGhpcy51cGxvYWQoKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlciBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5RdWFkLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIFRPRE8gY291bGQgcHJvYmFibHkgYmUgcHVzaGVkIGludG8gb25lIHVwbG9hZCFcbiAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHRoaXMudmVydGV4QnVmZmVyICk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy52ZXJ0aWNlcyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgOCAqIDQsIHRoaXMudXZzKTtcblxuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDgpICogNCwgdGhpcy5jb2xvcnMpO1xufTtcblxuUXVhZC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWQ7XG5cblxuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKSxcbiAgICAgICAgXG4gICAgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuICAgIEdMRnJhbWVidWZmZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTEZyYW1lYnVmZmVyLFxuICAgIFxuICAgIFN0ZW5jaWxNYXNrU3RhY2sgPSByZXF1aXJlKCcuL1N0ZW5jaWxNYXNrU3RhY2snKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqL1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgaG9yaXpvbnRhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSB2ZXJ0aWNhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICogQHBhcmFtIHJvb3Qge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAqL1xudmFyIFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24sIHJvb3QpXG57XG4gICAgLy9UT0RPIFJlc29sdXRpb24gY291bGQgZ28gaGVyZSAoIGVnIGxvdyByZXMgYmx1cnMgKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vIG5leHQgdGltZSB0byBjcmVhdGUgYSBmcmFtZSBidWZmZXIgYW5kIHRleHR1cmVcblxuICAgIC8qKlxuICAgICAqIEEgZnJhbWUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEZyYW1lQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuXG4gICAgdGhpcy5jbGVhckNvbG9yID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIG9iamVjdCBhcyBhIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2JqZWN0J3MgdHJhbnNmb3JtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk1hdHJpeH1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lID0gbnVsbDtcbiAgICBcbiAgICB0aGlzLmRlZmF1bHRGcmFtZSA9IG5ldyBQSVhJLlJlY3RhbmdsZSgpO1xuICAgIHRoaXMuZGVzdGluYXRpb25GcmFtZSA9IG51bGw7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgc3RvcmVzIG1hc2tpbmcgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbEJ1ZmZlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzdGVuY2lsIG1hc2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gbmV3IFN0ZW5jaWxNYXNrU3RhY2soKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyBmaWx0ZXIgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDp0aGlzLFxuICAgICAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICAgICAgYm91bmRzOnRoaXMuc2l6ZVxuICAgICAgICB9XG4gICAgXTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEEgZnJhbWUgYnVmZmVyIG5lZWRzIGEgdGFyZ2V0IHRvIHJlbmRlciB0by4uXG4gICAgICAgICAgICBjcmVhdGUgYSB0ZXh0dXJlIGFuZCBiaW5kIGl0IGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAgICAgKi9cbiAgICAgICAgXG5cbiAgICAgICAvLyBUT0RPIGNoYW5nZSFcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGJ5IHRoZSBiYXNlIHRleHR1cmVcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGhpcy5mcmFtZUJ1ZmZlci50ZXh0dXJlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBtYWtlIGl0IGEgbnVsbCBmcmFtZWJ1ZmZlci4uXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZnJhbWVidWZmZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xufTtcblxuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRhcmdldDtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGFyZ2V0O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZmlsdGVyIHRleHR1cmUuXG4gKlxuICogQHBhcmFtIFtiaW5kPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIHdlIGJpbmQgb3VyIGZyYW1lYnVmZmVyIGJlZm9yZSBjbGVhcmluZz9cbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGNsZWFyQ29sb3IpXG57XG4gICAgdmFyIGNjID0gY2xlYXJDb2xvciB8fCB0aGlzLmNsZWFyQ29sb3JcbiAgICB0aGlzLmZyYW1lQnVmZmVyLmNsZWFyKGNjWzBdLGNjWzFdLGNjWzJdLGNjWzNdKS8vcixnLGIsYSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuYXR0YWNoU3RlbmNpbEJ1ZmZlciA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPRE8gY2hlY2sgaWYgc3RlbmNpbCBpcyBkb25lP1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBpcyB1c2VkIGZvciBtYXNraW5nIGluIHBpeGlcbiAgICAgKiBsZXRzIGNyZWF0ZSBvbmUgYW5kIHRoZW4gYWRkIGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVTdGVuY2lsKCk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCBpbml0aWFsaXNlcyB0aGUgdmlld3BvcnQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oZGVzdGluYXRpb25GcmFtZSwgc291cmNlRnJhbWUpXG57XG4gICAgLy9UT09EIHJlZmFjdG9yIHVzYWdlIG9mIGZyYW1lLi5cbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5iaW5kKCk7XG5cbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBkZXN0aW5hdGlvbkZyYW1lIHx8IHRoaXMuZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlZmF1bHRGcmFtZTtcbiAgICB0aGlzLnNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgdGhpcy5zb3VyY2VGcmFtZSB8fCBkZXN0aW5hdGlvbkZyYW1lO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUsIHRoaXMuc291cmNlRnJhbWUgKTtcblxuICAgIGlmKHRoaXMudHJhbnNmb3JtKVxuICAgIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFwcGVuZCh0aGlzLnRyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5kZXN0aW5hdGlvbkZyYW1lICE9PSB0aGlzLnNvdXJjZUZyYW1lKVxuICAgIHtcbiAgICAgICAgZ2wuZW5hYmxlKGdsLlNDSVNTT1JfVEVTVCk7XG4gICAgICAgIGdsLnNjaXNzb3IodGhpcy5kZXN0aW5hdGlvbkZyYW1lLngsIHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGgqIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgIH1cblxuXG4gICAgLy8gVE9ETyAtIGRvZXMgbm90IG5lZWQgdG8gYmUgdXBkYXRlZCBhbGwgdGhlIHRpbWU/P1xuICAgIGdsLnZpZXdwb3J0KHRoaXMuZGVzdGluYXRpb25GcmFtZS54LHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuXG5cbn07XG5cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBwcm9qZWN0aW9uIG1hdHJpeCBiYXNlZCBvbiBhIHByb2plY3Rpb24gZnJhbWUgKHdoaWNoIGlzIGEgcmVjdGFuZ2xlKVxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jYWxjdWxhdGVQcm9qZWN0aW9uID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcblxuICAgIHNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHBtLmlkZW50aXR5KCk7XG5cbiAgICAvLyBUT0RPOiBtYWtlIGRlc3Qgc2NhbGUgc291cmNlXG4gICAgaWYgKCF0aGlzLnJvb3QpXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBzb3VyY2VGcmFtZS54ICogcG0uYTtcbiAgICAgICAgcG0udHkgPSAtMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IC0xIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBSZXNpemVzIHRoZSB0ZXh0dXJlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7TnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gaGVpZ2h0IHtOdW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgd2lkdGggPSB3aWR0aCB8IDA7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDtcblxuICAgIGlmICh0aGlzLnNpemUud2lkdGggPT09IHdpZHRoICYmIHRoaXMuc2l6ZS5oZWlnaHQgPT09IGhlaWdodCkgXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZGVmYXVsdEZyYW1lLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5kZWZhdWx0RnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5yZXNpemUod2lkdGggKiB0aGlzLnJlc29sdXRpb24sIGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCBwcm9qZWN0aW9uRnJhbWUgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHJlbmRlciB0YXJnZXQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFN0ZW5jaWxNYXNrU3RhY2soKVxue1xuXHQvKipcbiAgICAgKiBUaGUgYWN0dWFsIHN0YWNrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVE9ETyBAYWx2aW5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvdW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb3VudCA9IDA7XG59XG5cblN0ZW5jaWxNYXNrU3RhY2sucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RlbmNpbE1hc2tTdGFjaztcbm1vZHVsZS5leHBvcnRzID0gU3RlbmNpbE1hc2tTdGFjaztcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBNYXBzIGdsIGJsZW5kIGNvbWJpbmF0aW9ucyB0byBXZWJHTFxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcbiAgICBvYmplY3QgPSBvYmplY3QgfHwge307XG5cbiAgICAvL1RPRE8gLSBwcmVtdWx0aXBseSBhbHBoYSB3b3VsZCBiZSBkaWZmZXJlbnQuXG4gICAgLy9hZGQgYSBib29sZWFuIGZvciB0aGF0IVxuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdICAgICAgICA9IFtnbC5PTkUsICAgICAgIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLkRTVF9BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk1VTFRJUExZXSAgICAgID0gW2dsLkRTVF9DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gW2dsLlNSQ19BTFBIQSwgZ2wuT05FXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VdICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSFVFXSAgICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcblxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpO1xuIiwiQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbCwgb2JqZWN0KVxue1xuXHRvYmplY3Q9IG9iamVjdCB8fCB7fTtcblxuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlBPSU5UU10gICAgICAgICA9IGdsLlBPSU5UUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FU10gICAgICAgICAgPSBnbC5MSU5FUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FX0xPT1BdICAgICAgPSBnbC5MSU5FX0xPT1A7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9TVFJJUF0gICAgID0gZ2wuTElORV9TVFJJUDtcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5UUklBTkdMRVNdICAgICAgPSBnbC5UUklBTkdMRVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBdID0gZ2wuVFJJQU5HTEVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXSAgID0gZ2wuVFJJQU5HTEVfRkFOO1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGk7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIFNwcml0ZSBvYmplY3QgaXMgdGhlIGJhc2UgZm9yIGFsbCB0ZXh0dXJlZCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIHRvIHRoZSBzY3JlZW5cbiAqXG4gKiBBIHNwcml0ZSBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGFuIGltYWdlIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSBmb3IgdGhpcyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gU3ByaXRlKHRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW5jaG9yIHNldHMgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLDAgdGhpcyBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMC41LDAuNSBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyBjZW50ZXJlZFxuICAgICAqIFNldHRpbmcgdGhlIGFuY2hvciB0byAxLDEgd291bGQgbWVhbiB0aGUgdGV4dHVyZSdzIG9yaWdpbiBwb2ludCB3aWxsIGJlIHRoZSBib3R0b20gcmlnaHQgY29ybmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuYW5jaG9yID0gbmV3IG1hdGguUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgc3ByaXRlICh0aGlzIGlzIGluaXRpYWxseSBzZXQgYnkgdGhlIHRleHR1cmUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBIHZhbHVlIG9mIDB4RkZGRkZGIHdpbGwgcmVtb3ZlIGFueSB0aW50IGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaGFkZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBzcHJpdGUuIFNldCB0byBudWxsIHRvIHJlbW92ZSBhIGN1cnJlbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5BYnN0cmFjdEZpbHRlcnxQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBjYWNoZWQgdmFsdWUgb2YgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8vIGNhbGwgdGV4dHVyZSBzZXR0ZXJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG4gICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlXG4gICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy52ZXJ0ZXhEYXRhID0gbmV3IEZsb2F0MzJBcnJheSg4KTtcbn1cblxuLy8gY29uc3RydWN0b3JcblNwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuc2NhbGUueCkgKiB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBNYXRoLmFicyh0aGlzLnNjYWxlLnkpICogdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc2lnbiA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS55KSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gc2lnbiAqIHZhbHVlIC8gdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5TcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIHNvIGlmIF93aWR0aCBpcyAwIHRoZW4gd2lkdGggd2FzIG5vdCBzZXQuLlxuICAgIGlmICh0aGlzLl93aWR0aClcbiAgICB7XG4gICAgICAgIHRoaXMuc2NhbGUueCA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS54KSAqIHRoaXMuX3dpZHRoIC8gdGhpcy50ZXh0dXJlLmZyYW1lLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnkgPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgKiB0aGlzLl9oZWlnaHQgLyB0aGlzLnRleHR1cmUuZnJhbWUuaGVpZ2h0O1xuICAgIH1cbn07XG5cblNwcml0ZS5wcm90b3R5cGUuY2FjbHVsYXRlVmVydGljZXMgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICB3dCA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICBhID0gd3QuYSwgYiA9IHd0LmIsIGMgPSB3dC5jLCBkID0gd3QuZCwgdHggPSB3dC50eCwgdHkgPSB3dC50eSxcbiAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDEsXG4gICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG4gICAgICAgIFxuICAgIGlmICh0cmltKVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkIGFuZCBpcyBub3QgYSB0aWxpbmdzcHJpdGUgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgIHcxID0gdHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgaDEgPSB0cmltLnkgLSB0aGlzLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgIGgwID0gaDEgKyB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG4gICAgfVxuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzBdID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVsxXSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzJdID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVszXSA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs0XSA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbNV0gPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs2XSA9IGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbN10gPSBkICogaDAgKyBiICogdzEgKyB0eTtcblxuXG59XG5cbi8qKlxuKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMudGV4dHVyZURpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMudmVydGV4RGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICB9XG4gICAgXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBTcHJpdGUgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgc3ByaXRlXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG4gICAgICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudmVydGV4RGlydHkgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWluWCxcbiAgICAgICAgICAgIG1heFgsXG4gICAgICAgICAgICBtaW5ZLFxuICAgICAgICAgICAgbWF4WSxcbiAgICAgICAgICAgIHZlcnRleERhdGEgPSB0aGlzLnZlcnRleERhdGE7XG5cbiAgICAgICAgdmFyIHgxID0gdmVydGV4RGF0YVswXVxuICAgICAgICB2YXIgeTEgPSB2ZXJ0ZXhEYXRhWzFdXG5cbiAgICAgICAgdmFyIHgyID0gdmVydGV4RGF0YVsyXVxuICAgICAgICB2YXIgeTIgPSB2ZXJ0ZXhEYXRhWzNdXG5cbiAgICAgICAgdmFyIHgzID0gdmVydGV4RGF0YVs0XVxuICAgICAgICB2YXIgeTMgPSB2ZXJ0ZXhEYXRhWzVdXG5cbiAgICAgICAgdmFyIHg0ID0gdmVydGV4RGF0YVs2XVxuICAgICAgICB2YXIgeTQgPSB2ZXJ0ZXhEYXRhWzddXG5cbiAgICAgICAgbWluWCA9IHgxO1xuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MTtcbiAgICAgICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICAgICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICAgICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgICAgICBtYXhYID0geDE7XG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkxO1xuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIC8vIGNoZWNrIGZvciBjaGlsZHJlblxuICAgICAgICBpZih0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkQm91bmRzID0gdGhpcy5jb250YWluZXJHZXRCb3VuZHMoKTtcblxuICAgICAgICAgICAgdzAgPSBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgdzEgPSBjaGlsZEJvdW5kcy54ICsgY2hpbGRCb3VuZHMud2lkdGg7XG4gICAgICAgICAgICBoMCA9IGNoaWxkQm91bmRzLnk7XG4gICAgICAgICAgICBoMSA9IGNoaWxkQm91bmRzLnkgKyBjaGlsZEJvdW5kcy5oZWlnaHQ7XG5cbiAgICAgICAgICAgIG1pblggPSAobWluWCA8IHcwKSA/IG1pblggOiB3MDtcbiAgICAgICAgICAgIG1pblkgPSAobWluWSA8IGgwKSA/IG1pblkgOiBoMDtcblxuICAgICAgICAgICAgbWF4WCA9IChtYXhYID4gdzEpID8gbWF4WCA6IHcxO1xuICAgICAgICAgICAgbWF4WSA9IChtYXhZID4gaDEpID8gbWF4WSA6IGgxO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2JvdW5kcy54ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB0aGlzLl9ib3VuZHMueSA9IC10aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRoaXMuX2JvdW5kcy5oZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgcmV0dXJuIHRoaXMuX2JvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHNwcml0ZVxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5TcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy50ZXh0dXJlLmNyb3Aud2lkdGggPD0gMCB8fCB0aGlzLnRleHR1cmUuY3JvcC5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyAgSWdub3JlIG51bGwgc291cmNlc1xuICAgIGlmICh0aGlzLnRleHR1cmUudmFsaWQpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgICAgICB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgICAgICBkeCxcbiAgICAgICAgICAgIGR5LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ7XG5cbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgICAgICAvLyBJZiBzbW9vdGhpbmdFbmFibGVkIGlzIHN1cHBvcnRlZCBhbmQgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIHNtb290aGluZyBwcm9wZXJ0eSBmb3IgdGhpcyB0ZXh0dXJlXG4gICAgICAgIHZhciBzbW9vdGhpbmdFbmFibGVkID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5zY2FsZU1vZGUgPT09IENPTlNULlNDQUxFX01PREVTLkxJTkVBUjtcbiAgICAgICAgaWYgKHJlbmRlcmVyLnNtb290aFByb3BlcnR5ICYmIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldICE9PSBzbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0W3JlbmRlcmVyLnNtb290aFByb3BlcnR5XSA9IHNtb290aGluZ0VuYWJsZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgdGV4dHVyZSBpcyB0cmltbWVkIHdlIG9mZnNldCBieSB0aGUgdHJpbSB4L3ksIG90aGVyd2lzZSB3ZSB1c2UgdGhlIGZyYW1lIGRpbWVuc2lvbnNcblxuICAgICAgICBpZih0ZXh0dXJlLnJvdGF0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2lkdGggPSB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBkeCA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgXG4gICAgICAgICAgICBkeCArPSB3aWR0aDtcblxuICAgICAgICAgICAgd3QudHggPSBkeSAqIHd0LmEgKyBkeCAqIHd0LmMgKyB3dC50eDtcbiAgICAgICAgICAgIHd0LnR5ID0gZHkgKiB3dC5iICsgZHggKiB3dC5kICsgd3QudHk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gd3QuYTtcbiAgICAgICAgICAgIHd0LmEgID0gLXd0LmM7XG4gICAgICAgICAgICB3dC5jICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICB0ZW1wID0gd3QuYjtcbiAgICAgICAgICAgIHd0LmIgID0gLXd0LmQ7XG4gICAgICAgICAgICB3dC5kICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICAvLyB0aGUgYW5jaG9yIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCBhYm92ZSwgc28gbGV0cyBzZXQgaXQgdG8gemVyb1xuICAgICAgICAgICAgZHggPSAwO1xuICAgICAgICAgICAgZHkgPSAwO1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC53aWR0aDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0ZXh0dXJlLnRyaW0ud2lkdGggOiB0aGlzLmFuY2hvci54ICogLXRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRleHR1cmUudHJpbS5oZWlnaHQgOiB0aGlzLmFuY2hvci55ICogLXRleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfVxuXG5cblxuICAgICAgICAvLyBBbGxvdyBmb3IgcGl4ZWwgcm91bmRpbmdcbiAgICAgICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB3dC5hLFxuICAgICAgICAgICAgICAgIHd0LmIsXG4gICAgICAgICAgICAgICAgd3QuYyxcbiAgICAgICAgICAgICAgICB3dC5kLFxuICAgICAgICAgICAgICAgICh3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMCxcbiAgICAgICAgICAgICAgICAod3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uKSB8IDBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGR4ID0gZHggfCAwO1xuICAgICAgICAgICAgZHkgPSBkeSB8IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgd3QudHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHd0LnR5ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcblxuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIC8vIFRPRE8gY2xlYW4gdXAgY2FjaGluZyAtIGhvdyB0byBjbGVhbiB1cCB0aGUgY2FjaGVzP1xuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC54ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmNyb3AueSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeSAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHNwcml0ZSBhbmQgb3B0aW9uYWxseSBpdHMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBbZGVzdHJveVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgY3VycmVudCB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICovXG5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveVRleHR1cmUsIGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYW5jaG9yID0gbnVsbDtcblxuICAgIGlmIChkZXN0cm95VGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUuZGVzdHJveShkZXN0cm95QmFzZVRleHR1cmUpO1xuICAgIH1cblxuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn07XG5cbi8vIHNvbWUgaGVscGVyIGZ1bmN0aW9ucy4uXG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgY3Jvc3Mtb3JpZ2luIHBhcmFtZXRlclxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBzY2FsZSBtb2RlLCBzZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGZyYW1lSWRcbiAqL1xuU3ByaXRlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTcHJpdGUodGV4dHVyZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGJhc2VkIG9uIGFuIGltYWdlIHVybFxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZUlkIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblNwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFNwcml0ZShUZXh0dXJlLmZyb21JbWFnZShpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSk7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyJyksXG4gICAgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzJyksXG4gICAgZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIGdsQ29yZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFNwcml0ZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9TcHJpdGVSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKiBSZW5kZXJlciBkZWRpY2F0ZWQgdG8gZHJhd2luZyBhbmQgYmF0Y2hpbmcgc3ByaXRlcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZVJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIHZhbHVlcyBzZW50IGluIHRoZSB2ZXJ0ZXggYnVmZmVyLlxuICAgICAqIHBvc2l0aW9uWCwgcG9zaXRpb25ZLCBjb2xvclIsIGNvbG9yRywgY29sb3JCID0gNVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydFNpemUgPSA1O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIHZlcnRleCBpbmZvcm1hdGlvbiBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBpbWFnZXMgaW4gdGhlIFNwcml0ZUJhdGNoIGJlZm9yZSBpdCBmbHVzaGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IENPTlNULlNQUklURV9CQVRDSF9TSVpFOyAvLyAyMDAwIGlzIGEgbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIC8gZGVza3RvcFxuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBpbiBvdXIgYmF0Y2hcbiAgICB2YXIgbnVtVmVydHMgPSAodGhpcy5zaXplICogNCkgKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYmF0Y2gsIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgICB2YXIgbnVtSW5kaWNlcyA9IHRoaXMuc2l6ZSAqIDY7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgdmVydGV4IGRhdGEgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdGhlIHZlcnRleCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEFycmF5QnVmZmVyKG51bVZlcnRzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgRmxvYXQzMkFycmF5IGZvciBwb3NpdGlvbnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG4gICAgXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBVaW50MzJBcnJheSBmb3IgdXZzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciBjb2xvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXMgb2YgdGhlIGdlb21ldHJ5IChxdWFkcykgdG8gZHJhd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzKHRoaXMuc2l6ZSlcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICBcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIHRoaXMuZ3JvdXBzID0gW107XG4gICAgXG4gICAgLy9UT0RPIC0gMzAwIGlzIGEgYml0IG1hZ2ljLCBmaWd1cmUgb3V0IGEgbmljZXIgYW1vdW50IVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zaXplOyBpKyspIFxuICAgIHtcbiAgICAgICAgdGhpcy5ncm91cHNbaV0gPSB7dGV4dHVyZXM6W10sIHRleHR1cmVDb3VudDowLCBpZHM6W10sIHNpemU6MCwgc3RhcnQ6MCwgYmxlbmQ6MH07IFxuICAgIH07XG4gICAgXG4gICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG5cbiAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbnVsbDsgICAgXG59XG5cblxuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ByaXRlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZVJlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdzcHJpdGUnLCBTcHJpdGVSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMuTUFYX1RFWFRVRVMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpO1xuXG4gICAgdGhpcy5fc2hhZGVyID0gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIoZ2wsIHRoaXMuTUFYX1RFWFRVRVMpLy9uZXcgVGV4dHVyZVNoYWRlcihnbCk7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXI7XG5cbiAgICAvLyBjcmVhdGUgYSBjb3VwbGUgb2YgYnVmZmVyc1xuICAgIHRoaXMudmVydGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlcihnbCwgbnVsbCwgZ2wuRFlOQU1JQ19EUkFXKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyKGdsLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIC8vIGJ1aWxkIHRoZSB2YW8gb2JqZWN0IHRoYXQgd2lsbCByZW5kZXIuLlxuICAgIHRoaXMudmFvID0gbmV3IGdsQ29yZS5WZXJ0ZXhBcnJheU9iamVjdChnbCk7XG5cbiAgICB0aGlzLnZhby5hZGRJbmRleCh0aGlzLmluZGV4QnVmZmVyKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCBnbC5VTlNJR05FRF9TSE9SVCwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDIgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgZ2wuVU5TSUdORURfQllURSwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDMgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlSWQsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDQgKiA0KTtcblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IDk5OTk5O1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHJlbmRlciB3aGVuIHVzaW5nIHRoaXMgc3ByaXRlYmF0Y2hcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChzcHJpdGUpXG57XG4gICAgLy9UT0RPIHNldCBibGVuZCBtb2Rlcy4uXG4gICAgLy8gY2hlY2sgdGV4dHVyZS4uXG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID49IHRoaXMuc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICB9XG5cbiAgXG4gICAgLy8gZ2V0IHRoZSB1dnMgZm9yIHRoZSB0ZXh0dXJlXG4gICBcblxuICAgIC8vIGlmIHRoZSB1dnMgaGF2ZSBub3QgdXBkYXRlZCB0aGVuIG5vIHBvaW50IHJlbmRlcmluZyBqdXN0IHlldCFcbiAgICBpZiAoIXNwcml0ZS50ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgIC8vIHB1c2ggYSB0ZXh0dXJlLlxuICAgIC8vIGluY3JlbWVudCB0aGUgYmF0Y2hzaXplXG4gICAgdmFyIG5leHRUZXh0dXJlID0gIHNwcml0ZS50ZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIHZhciBjdXJyZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRHcm91cDtcbiAgICB2YXIgaTtcblxuICAgIGlmKHRoaXMuY3VycmVudFRleHR1cmUgIT09IG5leHRUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG5leHRUZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgaWYoIW5leHRUZXh0dXJlLl9lbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5fZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5faWQgPSB0aGlzLnRleHR1cmVDb3VudDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy50ZXh0dXJlQ291bnQgPT09IHRoaXMuTUFYX1RFWFRVRVMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50OyBpKyspIFxuICAgICAgICAgICAgICAgIHsgICAgIFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnNpemUgPSB0aGlzLmN1cnJlbnRJbmRleCAtIGN1cnJlbnRHcm91cC5zdGFydDtcbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC5zdGFydCA9IHRoaXMuY3VycmVudEluZGV4O1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCsrXSA9IG5leHRUZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcbiAgICB9XG5cbiAgICAvLyBUT0RPIHRyaW0/P1xuICAgIHZhciBpbmRleCA9IHRoaXMuY3VycmVudEluZGV4ICogdGhpcy52ZXJ0Qnl0ZVNpemU7XG5cbiAgICB0aGlzLmN1cnJlbnRJbmRleCsrO1xuXG4gICAgLy8gdXBsb2FkIHRoZSBzcHJpdGUgZWxlbWV0bnMuLi5cbiAgICAvLyB0aGV5IGhhdmUgYWxsIHJlYWR5IGJlZW4gY2FsY3VsYXRlZCBzbyB3ZSBqdXN0IG5lZWQgdG8gcHVzaCB0aGVtIGludG8gdGhlIGJ1ZmZlci5cbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG4gICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMucG9zaXRpb25zO1xuICAgIHZhciB2ZXJ0ZXhEYXRhID0gc3ByaXRlLnZlcnRleERhdGFcbiAgICB2YXIgdGludCA9IChzcHJpdGUudGludCA+PiAxNikgKyAoc3ByaXRlLnRpbnQgJiAweGZmMDApICsgKChzcHJpdGUudGludCAmIDB4ZmYpIDw8IDE2KSArIChzcHJpdGUud29ybGRBbHBoYSAqIDI1NSA8PCAyNCk7XG4gICAgdmFyIHV2cyA9IHNwcml0ZS50ZXh0dXJlLl91dnMudXZzX3VpbnQzMjtcbiAgICAvL3h5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVswXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzFdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzBdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkOyBcbiAgICBcbiAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMl07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVszXTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1sxXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNF07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs1XTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1syXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs2XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzddO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzNdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb250ZW50IGFuZCBlbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPT09IDApcmV0dXJuO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gdGhpcy5jdXJyZW50R3JvdXAuc3RhcnQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgeyAgICAgXG4gICAgICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVzW2ldLl9lbmFibGVkID0gZmFsc2U7XG4gICAgfTtcbiAgIFxuICAgIC8vIGRvIHNvbWUgc21hcnQgYXJyYXkgc3R1ZmYuLlxuICAgIC8vIGRvdWJsZSBzaXplIHNvIHdlIGRvbnQgYWx3YXkgc3ViYXJyYXkgdGhlIGVsZW1lbnRzLi5cbiAgICAvLyB1cGxvYWQgdGhlIHZlcnRzIHRvIHRoZSBidWZmZXJcbiAgICBpZiAodGhpcy5jdXJyZW50QmF0Y2hTaXplID4gKCB0aGlzLnNpemUgKiAwLjUgKSApXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlci51cGxvYWQodGhpcy52ZXJ0aWNlcywgMCwgdHJ1ZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIG8gayAuLiBzdWIgYXJyYXkgaXMgU0xPVz4/XG4gICAgICAgIHZhciB2aWV3ID0gdGhpcy5wb3NpdGlvbnMuc3ViYXJyYXkoMCwgdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZSk7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh2aWV3LCAwLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBiaW5kIHNoYWRlci4uXG4gICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHRoaXMuX3NoYWRlcik7XG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggMCApO1xuXG4gICAgLy8vIHJlbmRlciB0aGUgZ3JvdXBzLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5ncm91cENvdW50OyBpKyspIHtcbiAgICAgICAgXG4gICAgICAgIHZhciBncm91cCA9IHRoaXMuZ3JvdXBzW2ldO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ3JvdXAudGV4dHVyZUNvdW50OyBqKyspIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFRleHR1cmUoZ3JvdXAudGV4dHVyZXNbal0sIGopO1xuICAgICAgICB9O1xuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGdyb3VwLnNpemUgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgZ3JvdXAuc3RhcnQgKiA2ICogMik7XG4gICAgfTtcblxuICAgIC8vIHJlc2V0IGVsZW1lbnRzIGZvciB0aGUgbmV4dCBmbHVzaFxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cENvdW50ID0gMDtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcbiAgICB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgc3ByaXRlIGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZhby5iaW5kKCk7XG59O1xuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xuICAgIHRoaXMudmFvLnVuYmluZCgpO1xufTtcbi8qKlxuICogRGVzdHJveXMgdGhlIFNwcml0ZUJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMudmVydGljZXMgPSBudWxsO1xuICAgIHRoaXMucG9zaXRpb25zID0gbnVsbDtcbiAgICB0aGlzLmNvbG9ycyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMudmVydGV4QnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuc3ByaXRlcyA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuXG5mdW5jdGlvbiBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgbWF4VGV4dHVyZXMpXG57XG4gICAgdmFyIHZlcnRleFNyYyA9IFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcbmF0dHJpYnV0ZSBmbG9hdCBhVGV4dHVyZUlkO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyBmbG9hdCB2VGV4dHVyZUlkO1xcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2VGV4dHVyZUlkID0gYVRleHR1cmVJZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cIjtcbiAgICB2YXIgZnJhZ21lbnRTcmMgPSAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxuJyArIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKSArIFwiXFxuXFxuXCIgKyBmcmFnVGVtcGxhdGVcblxuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMucmVwbGFjZSgvXFwlXFwlL2dpLCAnMTYnKTtcblxuICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXG4gICAgdmFyIHNhbXBsZVZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkrKykge1xuICAgICAgICBzYW1wbGVWYWx1ZXNbaV0gPSBpO1xuICAgIH07XG5cbiAgICBzaGFkZXIuYmluZCgpO1xuICAgIHNoYWRlci51bmlmb3Jtcy51U2FtcGxlcnMgPSBzYW1wbGVWYWx1ZXM7XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVNhbXBsZVNyYyhtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgc3JjID0gJ3ZlYzQgZ2V0U2FtcGxlRnJvbUFycmF5KHNhbXBsZXIyRCB0ZXh0dXJlc1slJV0sIGludCBuZHgsIHZlYzIgdXYpIHtcXG5cXG52ZWM0IGNvbG9yOydcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSBcbiAgICB7XG4gICAgICAgIGlmKGkgPiAwKXNyYyArPSAnXFxuZWxzZSAnO1xuICAgICAgICBpZihpIDwgbWF4VGV4dHVyZXMtMSlzcmMgKz0gJ2lmKG5keCA9PSAnICsgaSArICcpJztcbiAgICAgICAgc3JjICs9ICdcXG57JztcbiAgICAgICAgc3JjICs9ICdcXG5cXHRjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlc1snK2krJ10sIHV2KTsnO1xuICAgICAgICBzcmMgKz0gJ1xcbn0nO1xuICAgIH07XG5cbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAncmV0dXJuIGNvbG9yOyc7XG4gICAgc3JjICs9ICdcXG59JztcblxuICAgIHJldHVybiBzcmM7XG59XG5cbnZhciBmcmFnVGVtcGxhdGUgPSBbXG5cbiAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuICAgICd2YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7JyxcbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJzWyUlXTsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnZ2xfRnJhZ0NvbG9yID0gZ2V0U2FtcGxlRnJvbUFycmF5KHVTYW1wbGVycywgaW50KHZUZXh0dXJlSWQpLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvcjsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcjtcbiIsInZhciBTcHJpdGUgPSByZXF1aXJlKCcuLi9zcHJpdGVzL1Nwcml0ZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgVGV4dCBPYmplY3Qgd2lsbCBjcmVhdGUgYSBsaW5lIG9yIG11bHRpcGxlIGxpbmVzIG9mIHRleHQuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJyBpbiB5b3VyIHRleHQgc3RyaW5nLFxuICogb3IgYWRkIGEgd29yZFdyYXAgcHJvcGVydHkgc2V0IHRvIHRydWUgYW5kIGFuZCB3b3JkV3JhcFdpZHRoIHByb3BlcnR5IHdpdGggYSB2YWx1ZSBpbiB0aGUgc3R5bGUgb2JqZWN0LlxuICpcbiAqIEEgVGV4dCBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGEgc3RyaW5nIGFuZCBhIHN0eWxlIG9iamVjdFxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dCA9IG5ldyBQSVhJLlRleHQoJ1RoaXMgaXMgYSBwaXhpIHRleHQnLHtmb250IDogJzI0cHggQXJpYWwnLCBmaWxsIDogMHhmZjEwMTAsIGFsaWduIDogJ2NlbnRlcid9KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBbc3R5bGVdIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnRdIHtzdHJpbmd9IGRlZmF1bHQgJ2JvbGQgMjBweCBBcmlhbCcgVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gKiBAcGFyYW0gW3N0eWxlLmZpbGw9J2JsYWNrJ10ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdCBzaW5nbGUgbGluZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZV0ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBzdHJva2UgZS5nICdibHVlJywgJyNGQ0ZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZVRoaWNrbmVzcz0wXSB7bnVtYmVyfSBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgc3Ryb2tlLiBEZWZhdWx0IGlzIDAgKG5vIHN0cm9rZSlcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXAsIGl0IG5lZWRzIHdvcmRXcmFwIHRvIGJlIHNldCB0byB0cnVlXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvdz1mYWxzZV0ge2Jvb2xlYW59IFNldCBhIGRyb3Agc2hhZG93IGZvciB0aGUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93QW5nbGU9TWF0aC5QSS80XSB7bnVtYmVyfSBTZXQgYSBhbmdsZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAqIEBwYXJhbSBbc3R5bGUucGFkZGluZz0wXSB7bnVtYmVyfSBPY2Nhc2lvbmFsbHkgc29tZSBmb250cyBhcmUgY3JvcHBlZCBvbiB0b3Agb3IgYm90dG9tLiBBZGRpbmcgc29tZSBwYWRkaW5nIHdpbGxcbiAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVKb2luPSdtaXRlciddIHtzdHJpbmd9IFRoZSBsaW5lSm9pbiBwcm9wZXJ0eSBzZXRzIHRoZSB0eXBlIG9mIGNvcm5lciBjcmVhdGVkLCBpdCBjYW4gcmVzb2x2ZVxuICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAqICAgICAgb3IgaW5jcmVhc2UgdGhlIHNwaWtpbmVzcyBvZiByZW5kZXJlZCB0ZXh0LlxuICovXG5mdW5jdGlvbiBUZXh0KHRleHQsIHN0eWxlLCByZXNvbHV0aW9uKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgZWxlbWVudCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gdG9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGhcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIGNhbnZhcy5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXModGhpcy5jYW52YXMpO1xuICAgIHRleHR1cmUudHJpbSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuICAgIFNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3ByaXRlLnByb3RvdHlwZSk7XG5UZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHQ7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHQ7XG5cblRleHQuZm9udFByb3BlcnRpZXNDYWNoZSA9IHt9O1xuVGV4dC5mb250UHJvcGVydGllc0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuVGV4dC5mb250UHJvcGVydGllc0NvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHQucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueCAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dCwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc2NhbGUueSAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlIC8gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBzdHlsZSBvZiB0aGUgdGV4dFxuICAgICAqXG4gICAgICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmZvbnQ9J2JvbGQgMjBwdCBBcmlhbCddIHtzdHJpbmd9IFRoZSBzdHlsZSBhbmQgc2l6ZSBvZiB0aGUgZm9udFxuICAgICAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGVnICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnN0cm9rZT0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlZyAnYmx1ZScsICcjRkNGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICAgICAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcFdpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIGF0IHdoaWNoIHRleHQgd2lsbCB3cmFwXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSGVpZ2h0XSB7bnVtYmVyfSBUaGUgbGluZSBoZWlnaHQsIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgc3BhY2UgdGhhdCBhIGxldHRlciB1c2VzXG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfG51bWJlcn0gQSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgb24gdGhlIGRyb3BzaGFkb3cgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzZdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0JsdXI9MF0ge251bWJlcn0gU2V0IGEgc2hhZG93IGJsdXIgcmFkaXVzXG4gICAgICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICAgICAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLnRleHRCYXNlbGluZT0nYWxwaGFiZXRpYyddIHtzdHJpbmd9IFRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dCB0aGF0IGlzIHJlbmRlcmVkLlxuICAgICAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gICAgICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gICAgICogQHBhcmFtIFtzdHlsZS5taXRlckxpbWl0PTEwXSB7bnVtYmVyfSBUaGUgbWl0ZXIgbGltaXQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdtaXRlcicgbGluZUpvaW4gbW9kZS4gVGhpcyBjYW4gcmVkdWNlXG4gICAgICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICBzdHlsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdHlsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3R5bGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZmlsbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5maWxsID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5maWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5zdHJva2UgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5zdHJva2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmRyb3BTaGFkb3dDb2xvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlLmZvbnQgPSBzdHlsZS5mb250IHx8ICdib2xkIDIwcHQgQXJpYWwnO1xuICAgICAgICAgICAgc3R5bGUuZmlsbCA9IHN0eWxlLmZpbGwgfHwgJ2JsYWNrJztcbiAgICAgICAgICAgIHN0eWxlLmFsaWduID0gc3R5bGUuYWxpZ24gfHwgJ2xlZnQnO1xuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gc3R5bGUuc3Ryb2tlIHx8ICdibGFjayc7IC8vcHJvdmlkZSBhIGRlZmF1bHQsIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2lzc3Vlcy8xMzZcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZVRoaWNrbmVzcyA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyB8fCAwO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXAgPSBzdHlsZS53b3JkV3JhcCB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLndvcmRXcmFwV2lkdGggPSBzdHlsZS53b3JkV3JhcFdpZHRoIHx8IDEwMDtcblxuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvdyA9IHN0eWxlLmRyb3BTaGFkb3cgfHwgZmFsc2U7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3IgfHwgJyMwMDAwMDAnO1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0FuZ2xlID0gc3R5bGUuZHJvcFNoYWRvd0FuZ2xlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93QW5nbGUgOiBNYXRoLlBJIC8gNjtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSA9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlIDogNTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXIgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dCbHVyIDogMDsgLy9zaGFkb3dCbHVyIGlzICcwJyBieSBkZWZhdWx0IGFjY29yZGluZyB0byBIVE1MXG5cbiAgICAgICAgICAgIHN0eWxlLnBhZGRpbmcgPSBzdHlsZS5wYWRkaW5nIHx8IDA7XG5cbiAgICAgICAgICAgIHN0eWxlLnRleHRCYXNlbGluZSA9IHN0eWxlLnRleHRCYXNlbGluZSB8fCAnYWxwaGFiZXRpYyc7XG5cbiAgICAgICAgICAgIHN0eWxlLmxpbmVKb2luID0gc3R5bGUubGluZUpvaW4gfHwgJ21pdGVyJztcbiAgICAgICAgICAgIHN0eWxlLm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0IHx8IDEwO1xuXG4gICAgICAgICAgICB0aGlzLl9zdHlsZSA9IHN0eWxlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjb3B5IGZvciB0aGUgdGV4dCBvYmplY3QuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHRleHQpe1xuICAgICAgICAgICAgdGV4dCA9IHRleHQudG9TdHJpbmcoKSB8fCAnICc7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dCA9PT0gdGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdGV4dDtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHN0eWxlID0gdGhpcy5fc3R5bGU7XG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuXG4gICAgLy8gd29yZCB3cmFwXG4gICAgLy8gcHJlc2VydmUgb3JpZ2luYWwgdGV4dFxuICAgIHZhciBvdXRwdXRUZXh0ID0gc3R5bGUud29yZFdyYXAgPyB0aGlzLndvcmRXcmFwKHRoaXMuX3RleHQpIDogdGhpcy5fdGV4dDtcblxuICAgIC8vIHNwbGl0IHRleHQgaW50byBsaW5lc1xuICAgIHZhciBsaW5lcyA9IG91dHB1dFRleHQuc3BsaXQoLyg/OlxcclxcbnxcXHJ8XFxuKS8pO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgd2lkdGhcbiAgICB2YXIgbGluZVdpZHRocyA9IG5ldyBBcnJheShsaW5lcy5sZW5ndGgpO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBmb250UHJvcGVydGllcyA9IHRoaXMuZGV0ZXJtaW5lRm9udFByb3BlcnRpZXMoc3R5bGUuZm9udCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBsaW5lV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQobGluZXNbaV0pLndpZHRoO1xuICAgICAgICBsaW5lV2lkdGhzW2ldID0gbGluZVdpZHRoO1xuICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxpbmVXaWR0aCk7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gbWF4TGluZVdpZHRoICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgd2lkdGggKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gKCB3aWR0aCArIHRoaXMuY29udGV4dC5saW5lV2lkdGggKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIC8vIGNhbGN1bGF0ZSB0ZXh0IGhlaWdodFxuICAgIHZhciBsaW5lSGVpZ2h0ID0gdGhpcy5zdHlsZS5saW5lSGVpZ2h0IHx8IGZvbnRQcm9wZXJ0aWVzLmZvbnRTaXplICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuXG4gICAgdmFyIGhlaWdodCA9IGxpbmVIZWlnaHQgKiBsaW5lcy5sZW5ndGg7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBoZWlnaHQgKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9ICggaGVpZ2h0ICsgdGhpcy5fc3R5bGUucGFkZGluZyAqIDIgKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMuY29udGV4dC5zY2FsZSggdGhpcy5yZXNvbHV0aW9uLCB0aGlzLnJlc29sdXRpb24pO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIH1cblxuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxTdHlsZT1cIiNGRjAwMDBcIjtcbiAgICAvL3RoaXMuY29udGV4dC5maWxsUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIHRoaXMuY29udGV4dC5mb250ID0gc3R5bGUuZm9udDtcbiAgICB0aGlzLmNvbnRleHQuc3Ryb2tlU3R5bGUgPSBzdHlsZS5zdHJva2U7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcbiAgICB0aGlzLmNvbnRleHQudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lO1xuICAgIHRoaXMuY29udGV4dC5saW5lSm9pbiA9IHN0eWxlLmxpbmVKb2luO1xuICAgIHRoaXMuY29udGV4dC5taXRlckxpbWl0ID0gc3R5bGUubWl0ZXJMaW1pdDtcblxuICAgIHZhciBsaW5lUG9zaXRpb25YO1xuICAgIHZhciBsaW5lUG9zaXRpb25ZO1xuXG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBpZiAoc3R5bGUuZHJvcFNoYWRvd0JsdXIgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3I7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Qmx1ciA9IHN0eWxlLmRyb3BTaGFkb3dCbHVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4U2hhZG93T2Zmc2V0ID0gTWF0aC5jb3Moc3R5bGUuZHJvcFNoYWRvd0FuZ2xlKSAqIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICAgICAgdmFyIHlTaGFkb3dPZmZzZXQgPSBNYXRoLnNpbihzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogbGluZUhlaWdodCkgKyBmb250UHJvcGVydGllcy5hc2NlbnQ7XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblggKyB4U2hhZG93T2Zmc2V0LCBsaW5lUG9zaXRpb25ZICsgeVNoYWRvd09mZnNldCArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9zZXQgY2FudmFzIHRleHQgc3R5bGVzXG4gICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmZpbGw7XG5cbiAgICAvL2RyYXcgbGluZXMgbGluZSBieSBsaW5lXG4gICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICBpZiAoc3R5bGUuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHlsZS5zdHJva2UgJiYgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVUZXh0dXJlKCk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLnRyaW0ueCA9IDA7XG4gICAgdGV4dHVyZS50cmltLnkgPSAtdGhpcy5fc3R5bGUucGFkZGluZztcblxuICAgIHRleHR1cmUudHJpbS53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRleHR1cmUudHJpbS5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgLSB0aGlzLl9zdHlsZS5wYWRkaW5nKjI7XG5cbiAgICB0aGlzLl93aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuX2hlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZW1pdCgndXBkYXRlJywgIHRleHR1cmUuYmFzZVRleHR1cmUpO1xuXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKi9cblRleHQucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgLy90aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUucmVuZGVyV2ViR0wuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgIC8vICAgdGhpcy5yZXNvbHV0aW9uID0gMS8vcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGFzY2VudCwgZGVzY2VudCBhbmQgZm9udFNpemUgb2YgYSBnaXZlbiBmb250U3R5bGVcbiAqXG4gKiBAcGFyYW0gZm9udFN0eWxlIHtvYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5kZXRlcm1pbmVGb250UHJvcGVydGllcyA9IGZ1bmN0aW9uIChmb250U3R5bGUpXG57XG4gICAgdmFyIHByb3BlcnRpZXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXTtcblxuICAgIGlmICghcHJvcGVydGllcylcbiAgICB7XG4gICAgICAgIHByb3BlcnRpZXMgPSB7fTtcblxuICAgICAgICB2YXIgY2FudmFzID0gVGV4dC5mb250UHJvcGVydGllc0NhbnZhcztcbiAgICAgICAgdmFyIGNvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dDtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgdmFyIHdpZHRoID0gTWF0aC5jZWlsKGNvbnRleHQubWVhc3VyZVRleHQoJ3xNw4lxJykud2lkdGgpO1xuICAgICAgICB2YXIgYmFzZWxpbmUgPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnTScpLndpZHRoKTtcbiAgICAgICAgdmFyIGhlaWdodCA9IDIgKiBiYXNlbGluZTtcblxuICAgICAgICBiYXNlbGluZSA9IGJhc2VsaW5lICogMS40IHwgMDtcblxuICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjZjAwJztcbiAgICAgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgY29udGV4dC50ZXh0QmFzZWxpbmUgPSAnYWxwaGFiZXRpYyc7XG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMwMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxUZXh0KCd8TcOJcScsIDAsIGJhc2VsaW5lKTtcblxuICAgICAgICB2YXIgaW1hZ2VkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCkuZGF0YTtcbiAgICAgICAgdmFyIHBpeGVscyA9IGltYWdlZGF0YS5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lID0gd2lkdGggKiA0O1xuXG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIHZhciBpZHggPSAwO1xuICAgICAgICB2YXIgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGFzY2VudC4gc2NhbiBmcm9tIHRvcCB0byBib3R0b20gdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGJhc2VsaW5lOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggKz0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuYXNjZW50ID0gYmFzZWxpbmUgLSBpO1xuXG4gICAgICAgIGlkeCA9IHBpeGVscyAtIGxpbmU7XG4gICAgICAgIHN0b3AgPSBmYWxzZTtcblxuICAgICAgICAvLyBkZXNjZW50LiBzY2FuIGZyb20gYm90dG9tIHRvIHRvcCB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSBoZWlnaHQ7IGkgPiBiYXNlbGluZTsgaS0tKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGluZTsgaiArPSA0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0b3ApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWR4IC09IGxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLmRlc2NlbnQgPSBpIC0gYmFzZWxpbmU7XG4gICAgICAgIHByb3BlcnRpZXMuZm9udFNpemUgPSBwcm9wZXJ0aWVzLmFzY2VudCArIHByb3BlcnRpZXMuZGVzY2VudDtcblxuICAgICAgICBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXSA9IHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgbmV3bGluZXMgdG8gYSBzdHJpbmcgdG8gaGF2ZSBpdCBvcHRpbWFsbHkgZml0IGludG8gdGhlIGhvcml6b250YWxcbiAqIGJvdW5kcyBzZXQgYnkgdGhlIFRleHQgb2JqZWN0J3Mgd29yZFdyYXBXaWR0aCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUud29yZFdyYXAgPSBmdW5jdGlvbiAodGV4dClcbntcbiAgICAvLyBHcmVlZHkgd3JhcHBpbmcgYWxnb3JpdGhtIHRoYXQgd2lsbCB3cmFwIHdvcmRzIGFzIHRoZSBsaW5lIGdyb3dzIGxvbmdlclxuICAgIC8vIHRoYW4gaXRzIGhvcml6b250YWwgYm91bmRzLlxuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgICB2YXIgd29yZFdyYXBXaWR0aCA9IHRoaXMuX3N0eWxlLndvcmRXcmFwV2lkdGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcGFjZUxlZnQgPSB3b3JkV3JhcFdpZHRoO1xuICAgICAgICB2YXIgd29yZHMgPSBsaW5lc1tpXS5zcGxpdCgnICcpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdvcmRzLmxlbmd0aDsgaisrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgd29yZFdpZHRoID0gdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KHdvcmRzW2pdKS53aWR0aDtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGhXaXRoU3BhY2UgPSB3b3JkV2lkdGggKyB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQoJyAnKS53aWR0aDtcbiAgICAgICAgICAgIGlmIChqID09PSAwIHx8IHdvcmRXaWR0aFdpdGhTcGFjZSA+IHNwYWNlTGVmdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHByaW50aW5nIHRoZSBuZXdsaW5lIGlmIGl0J3MgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxpbmUgdGhhdCBpc1xuICAgICAgICAgICAgICAgIC8vIGdyZWF0ZXIgdGhhbiB0aGUgd29yZCB3cmFwIHdpZHRoLlxuICAgICAgICAgICAgICAgIGlmIChqID4gMClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdvcmRzW2pdO1xuICAgICAgICAgICAgICAgIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGggLSB3b3JkV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0IC09IHdvcmRXaWR0aFdpdGhTcGFjZTtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyAnICsgd29yZHNbal07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaSA8IGxpbmVzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBUZXh0IGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIFRleHRcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIHJldHVybiBTcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcy5jYWxsKHRoaXMsIG1hdHJpeCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dCBvYmplY3QuXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9dHJ1ZV0ge2Jvb2xlYW59IHdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZVRleHR1cmUpXG57XG4gICAgLy8gbWFrZSBzdXJlIHRvIHJlc2V0IHRoZSB0aGUgY29udGV4dCBhbmQgY2FudmFzLi4gZG9udCB3YW50IHRoaXMgaGFuZ2luZyBhcm91bmQgaW4gbWVtb3J5IVxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xuXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG59O1xuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9GaWx0ZXJNYW5hZ2VyJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgdGVtcFJlY3QgPSBuZXcgbWF0aC5SZWN0YW5nbGUoKTtcblxuLyoqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBCYXNlUmVuZGVyVGV4dHVyZSBzaG91bGQgYmUgcHJlbG9hZGVkXG4gKiBvdGhlcndpc2UgYmxhY2sgcmVjdGFuZ2xlcyB3aWxsIGJlIGRyYXduIGluc3RlYWQuXG4gKlxuICogQSBCYXNlUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIEJhc2VyZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIDgwMCwgNjAwKTtcbiAqIHZhciBzcHJpdGUgPSBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJzcGluT2JqXzAxLnBuZ1wiKTtcbiAqXG4gKiBzcHJpdGUucG9zaXRpb24ueCA9IDgwMC8yO1xuICogc3ByaXRlLnBvc2l0aW9uLnkgPSA2MDAvMjtcbiAqIHNwcml0ZS5hbmNob3IueCA9IDAuNTtcbiAqIHNwcml0ZS5hbmNob3IueSA9IDAuNTtcbiAqXG4gKiBCYXNlcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgQmFzZXJlbmRlclRleHR1cmVcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgZm9yIHRoaXMgQmFzZVJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgaWYgKCFyZW5kZXJlcilcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNyZWF0ZSBCYXNlUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgbnVsbCwgc2NhbGVNb2RlKTtcbiAgIFxuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAxMDA7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OOztcbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIERyYXcvcmVuZGVyIHRoZSBnaXZlbiBEaXNwbGF5T2JqZWN0IG9udG8gdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheU9iamVjdCBhbmQgZGVzY2VuZGVudHMgYXJlIHRyYW5zZm9ybWVkIGR1cmluZyB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBJZiBgdXBkYXRlVHJhbnNmb3JtYCBpcyB0cnVlIHRoZW4gdGhlIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkIGJlZm9yZSB0aGVcbiAgICAgKiBtZXRob2QgcmV0dXJucy4gT3RoZXJ3aXNlIGl0IGlzIHVwIHRvIHRoZSBjYWxsaW5nIGNvZGUgdG8gY29ycmVjdGx5IHVzZSBvciByZXNldFxuICAgICAqIHRoZSB0cmFuc2Zvcm1lZCBkaXNwbGF5IG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgaXMgYWx3YXlzIHJlbmRlcmVkIHdpdGggYSB3b3JsZEFscGhhIHZhbHVlIG9mIDEuXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAgICAgKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBPcHRpb25hbCBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIGRpc3BsYXkgb2JqZWN0IGJlZm9yZSByZW5kZXJpbmcuXG4gICAgICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICAgICAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gICAgICogIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkLiBOb3QgcmVzdG9yaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBhIGxpdHRsZSBmYXN0ZXIuXG4gICAgICovXG4gICAgdGhpcy5yZW5kZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgQmFzZVJlbmRlclRleHR1cmUgdXNlcy4gQSBCYXNlUmVuZGVyVGV4dHVyZSBjYW4gb25seSBiZWxvbmcgdG8gb25lIHJlbmRlcmVyIGF0IHRoZSBtb21lbnQgaWYgaXRzIHdlYkdMLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgUmVuZGVyVGFyZ2V0KGdsLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5zY2FsZU1vZGUsIHRoaXMucmVzb2x1dGlvbik7Ly8sIHRoaXMudGhpcy5zY2FsZU1vZGUpO1xuICAgICAgICB0aGlzLl9nbFRleHR1cmVzW2dsLmlkXSA9ICB0aGlzLnRleHR1cmVCdWZmZXIudGV4dHVyZTtcbiAgICAgICAgXG4gICAgICAgIC8vVE9ETyByZWZhY3RvciBmaWx0ZXIgbWFuYWdlci4uIGFzIHJlYWxseSBpdHMgbm8gbG9uZ2VyIGEgbWFuYWdlciBpZiB3ZSB1c2UgaXQgaGVyZS4uXG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJXZWJHTDtcblxuICAgICAgICAvLyB0aGUgY3JlYXRpb24gb2YgYSBmaWx0ZXIgbWFuYWdlciB1bmJpbmRzIHRoZSBidWZmZXJzLi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbiAgICAgICAgaWYodGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0KXRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJDYW52YXM7XG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIodGhpcy53aWR0aCogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbn1cblxuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlVGV4dHVyZS5wcm90b3R5cGUpO1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzZVJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VSZW5kZXJUZXh0dXJlO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGlmICh3aWR0aCA9PT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT09IHRoaXMuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5maWx0ZXJNYW5hZ2VyKVxuICAgIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLnJlbmRlcmVyLmdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcihmYWxzZSwgZGVzdGluYXRpb25GcmFtZSk7XG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gKHVwZGF0ZVRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSA/IHVwZGF0ZVRyYW5zZm9ybSA6IHRydWU7Ly8hdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnRyYW5zZm9ybSA9IG1hdHJpeDtcblxuICAgIC8vVE9ETyBub3QgYSBmYW4gdGhhdCB0aGlzIGlzIGhlcmUuLi4gaXQgd2lsbCBtb3ZlIVxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5hY3RpdmF0ZSgpO1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgaWYgKHVwZGF0ZVRyYW5zZm9ybSlcbiAgICB7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIG1hdHJpeCBvZiB0aGUgZGlzcGxhdHlPYmplY3QuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmlkZW50aXR5KCk7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgICAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRlbXBSZWN0LndpZHRoID0gZnJhbWUuaGVpZ2h0O1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IGZyYW1lLndpZHRoO1xuICAgXG4gICAgLy9UT0RPIHJlbmFtZSB0ZXh0dXJlQnVmZmVyIHRvIHJlbmRlclRhcmdldC4uXG4gICAgdmFyIHRlbXAgPSAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyID0gdGhpcy5maWx0ZXJNYW5hZ2VyO1xuICAgIFxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKGZyYW1lLCB0ZW1wUmVjdCk7XG4gICAgY29uc29sZS5sb2coZGlzcGxheU9iamVjdClcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgdGhpcy50ZXh0dXJlQnVmZmVyLCBjbGVhcik7XG5cbiAgIC8vIGNvbnNvbGUubG9nKFwiUkVOREVSSU5HIFwiKTtcbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0ZW1wO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXJdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChmcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAhIXVwZGF0ZVRyYW5zZm9ybTtcblxuICAgIHZhciB3dCA9IHRlbXBNYXRyaXg7XG5cbiAgICB3dC5pZGVudGl0eSgpO1xuXG4gICAgaWYgKG1hdHJpeClcbiAgICB7XG4gICAgICAgIHd0LmFwcGVuZChtYXRyaXgpO1xuICAgIH1cblxuXG4gICAgd3QudHggKz0gZnJhbWUueDtcbiAgICB3dC50eSArPSBmcmFtZS55O1xuXG4gICAgdmFyIGNhY2hlZFd0ID0gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybTtcbiAgICBcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gd3Q7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgdmFyIGksIGo7XG5cbiAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgXG4vLyAgICB0aGlzLnRleHR1cmVCdWZmZXIuXG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dDtcblxuICAgIHZhciByZWFsUmVzb2x1dGlvbiA9IHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHJlYWxSZXNvbHV0aW9uO1xuXG4gICAgaWYoZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9PT0gd3QpXG4gICAge1xuICAgICAgICAvLyBmaXhlcyBjYWNoZUFzQml0bWFwIEhhcHBlbmluZyBkdXJpbmcgdGhlIGFib3ZlLi5cbiAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IGNhY2hlZFd0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gZGVzdHJveUJhc2Uge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCB0cnVlKTtcblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICAvLyBkZXN0cm95IHRoZSBmaWx0ZXJtYW5hZ2VyLi5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEltYWdlID0gZnVuY3Rpb24gKGZyYW1lKVxue1xuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLnNyYyA9IHRoaXMuZ2V0QmFzZTY0KGZyYW1lKTtcbiAgICByZXR1cm4gaW1hZ2U7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIEJhc2VSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRCYXNlNjQgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRDYW52YXMoZnJhbWUpLnRvRGF0YVVSTCgpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB0byBpdCBhbmQgdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBBIENhbnZhcyBlbGVtZW50IHdpdGggdGhlIHRleHR1cmUgcmVuZGVyZWQgb24uXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgIFxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgQ2FudmFzQnVmZmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHRlbXBDYW52YXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0RhdGEuZGF0YS5zZXQod2ViR0xQaXhlbHMpO1xuXG4gICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGZyYW1lLndpZHRoID09PSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLndpZHRoICYmIFxuICAgICAgICAgICBmcmFtZS5oZWlnaHQgPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIoZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcbiAgICAgICAgICAgIHZhciBjYW52YXNEYXRhID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNvbnRleHQuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggICogcmVzb2x1dGlvbiwgZnJhbWUueSAqIHJlc29sdXRpb24sIGZyYW1lLndpZHRoICogcmVzb2x1dGlvbiwgZnJhbWUuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0ZW1wQ2FudmFzLmNhbnZhcztcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKCBmcmFtZSApXG57XG4gICAgaWYoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgZnJhbWUud2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS53aWR0aDtcbiAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IGZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YShmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoZnJhbWUsIHgsIHkpXG57XG4gICAgdGVtcFJlY3QueCA9IHg7XG4gICAgdGVtcFJlY3QueSA9IHk7XG4gICAgdGVtcFJlY3Qud2lkdGggPSAxIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZihmcmFtZSlcbiAgICB7XG4gICAgICAgIHRlbXBSZWN0LnggKz0gZnJhbWUueDtcbiAgICAgICAgdGVtcFJlY3QueSArPSBmcmFtZS55O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFBpeGVscyh0ZW1wUmVjdCk7XG59O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZS4gQWxsIHRleHR1cmVzIGhhdmUgYSBiYXNlIHRleHR1cmUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBmb3IgZGV2aWNlcyB3aXRoIGRpZmZlcmVudCBwaXhlbCByYXRpb3NcbiAqL1xuZnVuY3Rpb24gQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnVpZCA9IHV0aWxzLnVpZCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgYmFzZSB0ZXh0dXJlIHNldCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAxMDA7XG5cbiAgICAvLyBUT0RPIGRvY3NcbiAgICAvLyB1c2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgZGltZW5zaW9ucyBvZiB0aGUgc291cmNlXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIHdpZHRoIG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsV2lkdGggPSAxMDA7XG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIGhlaWdodCBvZiB0aGUgc291cmNlIG9mIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucmVhbEhlaWdodCA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlIHRvIGFwcGx5IHdoZW4gc2NhbGluZyB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlNDQUxFX01PREVTLkxJTkVBUlxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSBvbmNlIHRoZSBiYXNlIHRleHR1cmUgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG5ldmVyIHRydWUgaWYgdGhlIHVuZGVybHlpbmcgc291cmNlIGZhaWxzIHRvIGxvYWQgb3IgaGFzIG5vIHRleHR1cmUgZGF0YS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIGlmIHRoZSBzb3VyY2UgaXMgY3VycmVudGx5IGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBJZiBhbiBJbWFnZSBzb3VyY2UgaXMgbG9hZGluZyB0aGUgJ2xvYWRlZCcgb3IgJ2Vycm9yJyBldmVudCB3aWxsIGJlXG4gICAgICogZGlzcGF0Y2hlZCB3aGVuIHRoZSBvcGVyYXRpb24gZW5kcy4gQW4gdW5kZXJ5bGluZyBzb3VyY2UgdGhhdCBpc1xuICAgICAqIGltbWVkaWF0ZWx5LWF2YWlsYWJsZSBieXBhc3NlcyBsb2FkaW5nIGVudGlyZWx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGltYWdlIHNvdXJjZSB0aGF0IGlzIHVzZWQgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogVE9ETzogTWFrZSB0aGlzIGEgc2V0dGVyIHRoYXQgY2FsbHMgbG9hZFNvdXJjZSgpO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SW1hZ2V8Q2FudmFzfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuc291cmNlID0gbnVsbDsgLy8gc2V0IGluIGxvYWRTb3VyY2UsIGlmIGF0IGFsbFxuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgaWYgUkdCIGNoYW5uZWxzIHNob3VsZCBiZSBwcmUtbXVsdGlwbGllZCBieSBBbHBoYSAgKFdlYkdMIG9ubHkpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgb3Igbm90IHRoZSB0ZXh0dXJlIGlzIGEgcG93ZXIgb2YgdHdvLCB0cnkgdG8gdXNlIHBvd2VyIG9mIHR3byB0ZXh0dXJlcyBhcyBtdWNoIGFzIHlvdSBjYW5cbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSBmYWxzZTtcblxuICAgIC8vIHVzZWQgZm9yIHdlYkdMXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgYSBtaXBtYXAgb2YgdGhpcyB0ZXh0dXJlIG5lZWRzIHRvIGJlIGdlbmVyYXRlZC4gVGhpcyB2YWx1ZSBuZWVkcyB0byBiZSBzZXQgYmVmb3JlIHRoZSB0ZXh0dXJlIGlzIHVzZWRcbiAgICAgKiBBbHNvIHRoZSB0ZXh0dXJlIG11c3QgYmUgYSBwb3dlciBvZiB0d28gc2l6ZSB0byB3b3JrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubWlwbWFwID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBBIG1hcCBvZiByZW5kZXJlciBJRHMgdG8gd2ViZ2wgdGV4dHVyZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIFdlYkdMVGV4dHVyZT59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbFRleHR1cmVzID0ge307XG4gICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5faWQgPSAwO1xuICAgIFxuICAgIC8vIGlmIG5vIHNvdXJjZSBwYXNzZWQgZG9uJ3QgdHJ5IHRvIGxvYWRcbiAgICBpZiAoc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5sb2FkU291cmNlKHNvdXJjZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZpbmlzaGVzIGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZGVkXG4gICAgICogQG1lbWJlcm9mIFBJWEkuQmFzZVRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZhaWxzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG59XG5cbkJhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdGV4dHVyZSBvbiBhbGwgdGhlIHdlYmdsIHJlbmRlcmVycywgdGhpcyBhbHNvIGFzc3VtZXMgdGhlIHNyYyBoYXMgY2hhbmdlZC5cbiAqXG4gKiBAZmlyZXMgdXBkYXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVhbFdpZHRoID0gdGhpcy5zb3VyY2UubmF0dXJhbFdpZHRoIHx8IHRoaXMuc291cmNlLndpZHRoO1xuICAgIHRoaXMucmVhbEhlaWdodCA9IHRoaXMuc291cmNlLm5hdHVyYWxIZWlnaHQgfHwgdGhpcy5zb3VyY2UuaGVpZ2h0O1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMucmVhbFdpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5yZWFsSGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSB1dGlscy5pc1Bvd2VyT2ZUd28odGhpcy5yZWFsV2lkdGgsIHRoaXMucmVhbEhlaWdodCk7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBMb2FkIGEgc291cmNlLlxuICpcbiAqIElmIHRoZSBzb3VyY2UgaXMgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSwgc3VjaCBhcyBhbiBpbWFnZSB0aGF0IG5lZWRzIHRvIGJlXG4gKiBkb3dubG9hZGVkLCB0aGVuIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmUgZGlzcGF0Y2hlZCBpbiB0aGUgZnV0dXJlXG4gKiBhbmQgYGhhc0xvYWRlZGAgd2lsbCByZW1haW4gZmFsc2UgYWZ0ZXIgdGhpcyBjYWxsLlxuICpcbiAqIFRoZSBsb2dpYyBzdGF0ZSBhZnRlciBjYWxsaW5nIGBsb2FkU291cmNlYCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IChlZy4gYGZyb21JbWFnZWAsIGBuZXcgQmFzZVRleHR1cmVgKSBpczpcbiAqXG4gKiAgICAgaWYgKHRleHR1cmUuaGFzTG9hZGVkKVxuIHtcbiAqICAgICAgICAvLyB0ZXh0dXJlIHJlYWR5IGZvciB1c2VcbiAqICAgICB9IGVsc2UgaWYgKHRleHR1cmUuaXNMb2FkaW5nKVxuIHtcbiAqICAgICAgICAvLyBsaXN0ZW4gdG8gJ2xvYWRlZCcgYW5kL29yICdlcnJvcicgZXZlbnRzIG9uIHRleHR1cmVcbiAqICAgICB9IGVsc2Uge1xuICogICAgICAgIC8vIG5vdCBsb2FkaW5nLCBub3QgZ29pbmcgdG8gbG9hZCBVTkxFU1MgdGhlIHNvdXJjZSBpcyByZWxvYWRlZFxuICogICAgICAgIC8vIChpdCBtYXkgc3RpbGwgbWFrZSBzZW5zZSB0byBsaXN0ZW4gdG8gdGhlIGV2ZW50cylcbiAqICAgICB9XG4gKlxuICogQHByb3RlY3RlZFxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmxvYWRTb3VyY2UgPSBmdW5jdGlvbiAoc291cmNlKVxue1xuICAgIHZhciB3YXNMb2FkaW5nID0gdGhpcy5pc0xvYWRpbmc7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKHdhc0xvYWRpbmcgJiYgdGhpcy5zb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmVycm9yID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcblxuICAgIC8vIEFwcGx5IHNvdXJjZSBpZiBsb2FkZWQuIE90aGVyd2lzZSBzZXR1cCBhcHByb3ByaWF0ZSBsb2FkaW5nIG1vbml0b3JzLlxuICAgIGlmICgodGhpcy5zb3VyY2UuY29tcGxldGUgfHwgdGhpcy5zb3VyY2UuZ2V0Q29udGV4dCkgJiYgdGhpcy5zb3VyY2Uud2lkdGggJiYgdGhpcy5zb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFzb3VyY2UuZ2V0Q29udGV4dClcbiAgICB7XG5cbiAgICAgICAgLy8gSW1hZ2UgZmFpbCAvIG5vdCByZWFkeVxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgdmFyIHNjb3BlID0gdGhpcztcblxuICAgICAgICBzb3VyY2Uub25sb2FkID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgIHNjb3BlLmVtaXQoJ2xvYWRlZCcsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzb3VyY2Uub25lcnJvciA9IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXNjb3BlLmlzTG9hZGluZylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuZW1pdCgnZXJyb3InLCBzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUGVyIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI3RoZS1pbWctZWxlbWVudFxuICAgICAgICAvLyAgIFwiVGhlIHZhbHVlIG9mIGBjb21wbGV0ZWAgY2FuIHRodXMgY2hhbmdlIHdoaWxlIGEgc2NyaXB0IGlzIGV4ZWN1dGluZy5cIlxuICAgICAgICAvLyBTbyBjb21wbGV0ZSBuZWVkcyB0byBiZSByZS1jaGVja2VkIGFmdGVyIHRoZSBjYWxsYmFja3MgaGF2ZSBiZWVuIGFkZGVkLi5cbiAgICAgICAgLy8gTk9URTogY29tcGxldGUgd2lsbCBiZSB0cnVlIGlmIHRoZSBpbWFnZSBoYXMgbm8gc3JjIHNvIGJlc3QgdG8gY2hlY2sgaWYgdGhlIHNyYyBpcyBzZXQuXG4gICAgICAgIGlmIChzb3VyY2UuY29tcGxldGUgJiYgc291cmNlLnNyYylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gLi5hbmQgaWYgd2UncmUgY29tcGxldGUgbm93LCBubyBuZWVkIGZvciBjYWxsYmFja3NcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiBhbnkgcHJldmlvdXMgc3Vic2NyaWJlcnMgcG9zc2libGVcbiAgICAgICAgICAgICAgICBpZiAod2FzTG9hZGluZylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZCBpbnRlcm5hbGx5IHRvIHVwZGF0ZSB0aGUgd2lkdGgsIGhlaWdodCwgYW5kIHNvbWUgb3RoZXIgdHJhY2tpbmcgdmFycyBvbmNlXG4gKiBhIHNvdXJjZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuX3NvdXJjZUxvYWRlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgYmFzZSB0ZXh0dXJlXG4gKlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuaW1hZ2VVcmwpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcbiAgICAgICAgZGVsZXRlIHV0aWxzLlRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcblxuICAgICAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgICAgICBpZiAoIW5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZS5zcmMgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdGhpcy5zb3VyY2UuX3BpeGlJZF07XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsO1xuXG4gICAgdGhpcy5kaXNwb3NlKCk7XG59O1xuXG4vKipcbiAqIEZyZWVzIHRoZSB0ZXh0dXJlIGZyb20gV2ViR0wgbWVtb3J5IHdpdGhvdXQgZGVzdHJveWluZyB0aGlzIHRleHR1cmUgb2JqZWN0LlxuICogVGhpcyBtZWFucyB5b3UgY2FuIHN0aWxsIHVzZSB0aGUgdGV4dHVyZSBsYXRlciB3aGljaCB3aWxsIHVwbG9hZCBpdCB0byBHUFVcbiAqIG1lbW9yeSBhZ2Fpbi5cbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmVtaXQoJ2Rpc3Bvc2UnLCB0aGlzKTtcblxuICAgIC8vIHRoaXMgc2hvdWxkIG5vIGxvbmdlciBiZSBuZWVkZWQsIHRoZSByZW5kZXJlcnMgc2hvdWxkIGNsZWFudXAgYWxsIHRoZSBnbCB0ZXh0dXJlcy5cbiAgICAvLyB0aGlzLl9nbFRleHR1cmVzID0ge307XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHNvdXJjZSBpbWFnZSBvZiB0aGUgdGV4dHVyZS5cbiAqIFRoZSBvcmlnaW5hbCBzb3VyY2UgbXVzdCBiZSBhbiBJbWFnZSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBuZXdTcmMge3N0cmluZ30gdGhlIHBhdGggb2YgdGhlIGltYWdlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGVTb3VyY2VJbWFnZSA9IGZ1bmN0aW9uIChuZXdTcmMpXG57XG4gICAgdGhpcy5zb3VyY2Uuc3JjID0gbmV3U3JjO1xuXG4gICAgdGhpcy5sb2FkU291cmNlKHRoaXMuc291cmNlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGJhc2UgdGV4dHVyZSBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSBiYXNlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBjcmVhdGVkIGFuZCBsb2FkZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlVXJsIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gU2hvdWxkIHVzZSBhbm9ueW1vdXMgQ09SUz8gRGVmYXVsdHMgdG8gdHJ1ZSBpZiB0aGUgVVJMIGlzIG5vdCBhIGRhdGEtVVJJLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF07XG5cbiAgICBpZiAoY3Jvc3NvcmlnaW4gPT09IHVuZGVmaW5lZCAmJiBpbWFnZVVybC5pbmRleE9mKCdkYXRhOicpICE9PSAwKVxuICAgIHtcbiAgICAgICAgY3Jvc3NvcmlnaW4gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICAvLyBuZXcgSW1hZ2UoKSBicmVha3MgdGV4IGxvYWRpbmcgaW4gc29tZSB2ZXJzaW9ucyBvZiBDaHJvbWUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjM4MDcxXG4gICAgICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpOy8vZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgICAgIGlmIChjcm9zc29yaWdpbilcbiAgICAgICAge1xuICAgICAgICAgICAgaW1hZ2UuY3Jvc3NPcmlnaW4gPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGltYWdlLCBzY2FsZU1vZGUpO1xuICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IGltYWdlVXJsO1xuXG4gICAgICAgIGltYWdlLnNyYyA9IGltYWdlVXJsO1xuXG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gYmFzZVRleHR1cmU7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4gQDJ4IGF0IHRoZSBlbmQgb2YgdGhlIHVybCB3ZSBhcmUgZ29pbmcgdG8gYXNzdW1lIGl0cyBhIGhpZ2hyZXMgaW1hZ2VcbiAgICAgICAgYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHV0aWxzLmdldFJlc29sdXRpb25PZlVybChpbWFnZVVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIGlmICghY2FudmFzLl9waXhpSWQpXG4gICAge1xuICAgICAgICBjYW52YXMuX3BpeGlJZCA9ICdjYW52YXNfJyArIHV0aWxzLnVpZCgpO1xuICAgIH1cblxuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbY2FudmFzLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGNhbnZhcywgc2NhbGVNb2RlKTtcbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuIiwidmFyIEJhc2VSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbi8qKlxuICogQSBSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIFJlbmRlclRleHR1cmUgdGFrZXMgYSBzbmFwc2hvdCBvZiBhbnkgRGlzcGxheSBPYmplY3QgZ2l2ZW4gdG8gaXRzIHJlbmRlciBtZXRob2QuIFRoZSBwb3NpdGlvblxuICogYW5kIHJvdGF0aW9uIG9mIHRoZSBnaXZlbiBEaXNwbGF5IE9iamVjdHMgaXMgaWdub3JlZC4gRm9yIGV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDEwMjQsIDEwMjQsIHsgdmlldzogY2FudmFzLCByYXRpbzogMSB9KTtcbiAqIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKHNwcml0ZSk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgU3ByaXRlIGluIHRoaXMgY2FzZSB3aWxsIGJlIHJlbmRlcmVkIHRvIGEgcG9zaXRpb24gb2YgMCwwLiBUbyByZW5kZXIgdGhpcyBzcHJpdGUgYXQgaXRzIGFjdHVhbFxuICogcG9zaXRpb24gYSBDb250YWluZXIgc2hvdWxkIGJlIHVzZWQ6XG4gKlxuICogYGBganNcbiAqIHZhciBkb2MgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqXG4gKiBkb2MuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqXG4gKiByZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBSZW5kZXJUZXh0dXJlXG4gKiBAcGFyYW0gW3dpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtoZWlnaHQ9MTAwXSB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtzY2FsZU1vZGVdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIFtyZXNvbHV0aW9uPTFdIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICovXG5mdW5jdGlvbiBSZW5kZXJUZXh0dXJlKGJhc2VSZW5kZXJUZXh0dXJlLCBmcmFtZSlcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIFJlbmRlclRleHR1cmUsIHlvdSBtdXN0IHBhc3MgYSByZW5kZXJlciBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIG9iamVjdCB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtCYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICBUZXh0dXJlLmNhbGwodGhpcyxcbiAgICAgICAgYmFzZVJlbmRlclRleHR1cmUsXG4gICAgICAgIGZyYW1lIFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fdXBkYXRlVXZzKCk7XG59XG5cblJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlLnByb3RvdHlwZSk7XG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgUmVuZGVyVGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gdXBkYXRlQmFzZSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBiYXNlVGV4dHVyZS53aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBiZSByZXNpemVkIGFzIHdlbGw/XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB1cGRhdGVCYXNlKVxue1xuICAgXG4gICAgLy9UT0RPIC0gY291bGQgYmUgbm90IHJlcXVpcmVkLi5cbiAgICB0aGlzLnZhbGlkID0gKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTtcblxuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy5jcm9wLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jcm9wLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh1cGRhdGVCYXNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5yZXNpemUod2lkdGgsIGhlaWdodClcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLmNsZWFyKHRoaXMuZnJhbWUpXG4gICAgXG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5iYXNlVGV4dHVyZS5yZW5kZXIodGhpcy5mcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIHRoaXMgdGV4dHVyZS4gSXQgd29ya3MgYnkgY2FsbGluZyBSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0QmFzZTY0LmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0Q2FudmFzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRDYW52YXModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgdGhlIGVudGlyZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbHModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgYSBwaXhlbCB3aXRoaW4gdGhlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbCh0aGlzLmZyYW1lLCB4LCB5KTtcbn07XG5cblJlbmRlclRleHR1cmUuY3JlYXRlID0gZnVuY3Rpb24ocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICByZXR1cm4gbmV3IFJlbmRlclRleHR1cmUobmV3IEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pKTtcbn1cblxuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzID0gcmVxdWlyZSgnLi9UZXh0dXJlVXZzJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZSBvciBwYXJ0IG9mIGFuIGltYWdlLiBJdCBjYW5ub3QgYmUgYWRkZWRcbiAqIHRvIHRoZSBkaXNwbGF5IGxpc3QgZGlyZWN0bHkuIEluc3RlYWQgdXNlIGl0IGFzIHRoZSB0ZXh0dXJlIGZvciBhIFNwcml0ZS4gSWYgbm8gZnJhbWUgaXMgcHJvdmlkZWQgdGhlbiB0aGUgd2hvbGUgaW1hZ2UgaXMgdXNlZC5cbiAqXG4gKiBZb3UgY2FuIGRpcmVjdGx5IGNyZWF0ZSBhIHRleHR1cmUgZnJvbSBhbiBpbWFnZSBhbmQgdGhlbiByZXVzZSBpdCBtdWx0aXBsZSB0aW1lcyBsaWtlIHRoaXMgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIHZhciBzcHJpdGUxID0gbmV3IFBJWEkuU3ByaXRlKHRleHR1cmUpO1xuICogdmFyIHNwcml0ZTIgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gYmFzZVRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV9IFRoZSBiYXNlIHRleHR1cmUgc291cmNlIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZSBmcm9tXG4gKiBAcGFyYW0gW2ZyYW1lXSB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5nbGUgZnJhbWUgb2YgdGhlIHRleHR1cmUgdG8gc2hvd1xuICogQHBhcmFtIFtjcm9wXSB7UElYSS5SZWN0YW5nbGV9IFRoZSBhcmVhIG9mIG9yaWdpbmFsIHRleHR1cmVcbiAqIEBwYXJhbSBbdHJpbV0ge1BJWEkuUmVjdGFuZ2xlfSBUcmltbWVkIHRleHR1cmUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gW3JvdGF0ZV0ge2Jvb2xlYW59IGluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXMgKCB1c2VkIGJ5IHRleHR1cmUgcGFja2VyIClcbiAqL1xuZnVuY3Rpb24gVGV4dHVyZShiYXNlVGV4dHVyZSwgZnJhbWUsIGNyb3AsIHRyaW0sIHJvdGF0ZSlcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIERvZXMgdGhpcyBUZXh0dXJlIGhhdmUgYW55IGZyYW1lIGRhdGEgYXNzaWduZWQgdG8gaXQ/XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubm9GcmFtZSA9IGZhbHNlO1xuXG4gICAgaWYgKCFmcmFtZSlcbiAgICB7XG4gICAgICAgIHRoaXMubm9GcmFtZSA9IHRydWU7XG4gICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuICAgIH1cblxuICAgIGlmIChiYXNlVGV4dHVyZSBpbnN0YW5jZW9mIFRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmFzZVRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy5iYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdHJpbSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy50cmltID0gdHJpbTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgdGhlIHJlbmRlcmVyIGtub3cgaWYgdGhlIHRleHR1cmUgaXMgdmFsaWQuIElmIGl0J3Mgbm90IHRoZW4gaXQgY2Fubm90IGJlIHJlbmRlcmVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHdpbGwgbGV0IGEgcmVuZGVyZXIga25vdyB0aGF0IGEgdGV4dHVyZSBoYXMgYmVlbiB1cGRhdGVkICh1c2VkIG1haW5seSBmb3Igd2ViR0wgdXYgdXBkYXRlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXF1aXJlc1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFdlYkdMIFVWIGRhdGEgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0dXJlIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIGFyZWEgb2YgdGhlIEJhc2VUZXh0dXJlIGltYWdlIHRvIGFjdHVhbGx5IGNvcHkgdG8gdGhlIENhbnZhcyAvIFdlYkdMIHdoZW4gcmVuZGVyaW5nLFxuICAgICAqIGlycmVzcGVjdGl2ZSBvZiB0aGUgYWN0dWFsIGZyYW1lIHNpemUgb3IgcGxhY2VtZW50ICh3aGljaCBjYW4gYmUgaW5mbHVlbmNlZCBieSB0cmltbWVkIHRleHR1cmUgYXRsYXNlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3JvcCA9IGNyb3AgfHwgZnJhbWU7Ly9uZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgcm90YXRlZCBieSA5MCBkZWdyZWVzXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb3RhdGUgPSAhIXJvdGF0ZTtcblxuICAgIGlmIChiYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICBmcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gZnJhbWUgd2Ugc2hvdWxkIG1vbml0b3IgZm9yIGFueSBiYXNlIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5vbigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZS5vbmNlKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZC4gVGhpcyBoYXBwZW5zIGlmIHRoZSBmcmFtZSBvciB0aGUgYmFzZVRleHR1cmUgaXMgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBldmVudCB1cGRhdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0dXJlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqL1xuICAgIGZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBmcmFtZTtcblxuICAgICAgICAgICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHRoaXMud2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMudHJpbSAmJiAhdGhpcy5yb3RhdGUgJiYgKGZyYW1lLnggKyBmcmFtZS53aWR0aCA+IHRoaXMuYmFzZVRleHR1cmUud2lkdGggfHwgZnJhbWUueSArIGZyYW1lLmhlaWdodCA+IHRoaXMuYmFzZVRleHR1cmUuaGVpZ2h0KSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHR1cmUgRXJyb3I6IGZyYW1lIGRvZXMgbm90IGZpdCBpbnNpZGUgdGhlIGJhc2UgVGV4dHVyZSBkaW1lbnNpb25zICcgKyB0aGlzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy90aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuc291cmNlICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuICAgICAgICAgICAgdGhpcy52YWxpZCA9IGZyYW1lICYmIGZyYW1lLndpZHRoICYmIGZyYW1lLmhlaWdodCAmJiB0aGlzLmJhc2VUZXh0dXJlLmhhc0xvYWRlZDtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJpbSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy50cmltLmhlaWdodDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS53aWR0aCA9IHRoaXMudHJpbS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JvcCA9IGZyYW1lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy52YWxpZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVVdnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhpcyB0ZXh0dXJlIG9uIHRoZSBncHUuXG4gKlxuICovXG5UZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYmFzZVRleHR1cmUudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgbG9hZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZUxvYWRlZCA9IGZ1bmN0aW9uIChiYXNlVGV4dHVyZSlcbntcbiAgICAvLyBUT0RPIHRoaXMgY29kZSBsb29rcyBjb25mdXNpbmcuLiBib28gdG8gYWJ1c2luZyBnZXR0ZXJzIGFuZCBzZXR0ZXJzcyFcbiAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMuX2ZyYW1lO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgdXBkYXRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLm9uQmFzZVRleHR1cmVVcGRhdGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZT1mYWxzZV0ge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZSlcbntcbiAgICBpZiAodGhpcy5iYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGlmIChkZXN0cm95QmFzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2ZyYW1lID0gbnVsbDtcbiAgICB0aGlzLl91dnMgPSBudWxsO1xuICAgIHRoaXMudHJpbSA9IG51bGw7XG4gICAgdGhpcy5jcm9wID0gbnVsbDtcblxuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIHRoaXMub2ZmKCdkaXNwb3NlJywgdGhpcy5kaXNwb3NlLCB0aGlzKTtcbiAgICB0aGlzLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRleHR1cmUgb2JqZWN0IHRoYXQgYWN0cyB0aGUgc2FtZSBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9XG4gKi9cblRleHR1cmUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUodGhpcy5iYXNlVGV4dHVyZSwgdGhpcy5mcmFtZSwgdGhpcy5jcm9wLCB0aGlzLnRyaW0sIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuX3VwZGF0ZVV2cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLl91dnMpXG4gICAge1xuICAgICAgICB0aGlzLl91dnMgPSBuZXcgVGV4dHVyZVV2cygpO1xuICAgIH1cblxuICAgIHRoaXMuX3V2cy5zZXQodGhpcy5jcm9wLCB0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLnJvdGF0ZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBUZXh0dXJlIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGNyb3Nzb3JpZ2luIHtib29sZWFufSBXaGV0aGVyIHJlcXVlc3RzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGNyb3Nzb3JpZ2luXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbiAgICAgICAgdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXSA9IHRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZScpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhcywgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW8ge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAodHlwZW9mIHZpZGVvID09PSAnc3RyaW5nJylcbiAgICB7XG4gICAgICAgIHJldHVybiBUZXh0dXJlLmZyb21WaWRlb1VybCh2aWRlbywgc2NhbGVNb2RlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgdmlkZW8gdXJsLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1VybCB7c3RyaW5nfVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gQSBUZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbVZpZGVvVXJsID0gZnVuY3Rpb24gKHZpZGVvVXJsLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh2aWRlb1VybCwgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEFkZHMgYSB0ZXh0dXJlIHRvIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLiBUaGlzIGNhY2hlIGlzIHNoYXJlZCBhY3Jvc3MgdGhlIHdob2xlIFBJWEkgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSBUZXh0dXJlIHRvIGFkZCB0byB0aGUgY2FjaGUuXG4gKiBAcGFyYW0gaWQge3N0cmluZ30gVGhlIGlkIHRoYXQgdGhlIHRleHR1cmUgd2lsbCBiZSBzdG9yZWQgYWdhaW5zdC5cbiAqL1xuVGV4dHVyZS5hZGRUZXh0dXJlVG9DYWNoZSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBpZClcbntcbiAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdID0gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgdGV4dHVyZSBmcm9tIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgb2YgdGhlIHRleHR1cmUgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0aGF0IHdhcyByZW1vdmVkXG4gKi9cblRleHR1cmUucmVtb3ZlVGV4dHVyZUZyb21DYWNoZSA9IGZ1bmN0aW9uIChpZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtpZF07XG5cbiAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcbiAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpZF07XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogQW4gZW1wdHkgdGV4dHVyZSwgdXNlZCBvZnRlbiB0byBub3QgaGF2ZSB0byBjcmVhdGUgbXVsdGlwbGUgZW1wdHkgdGV4dHVyZXMuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmUuRU1QVFkgPSBuZXcgVGV4dHVyZShuZXcgQmFzZVRleHR1cmUoKSk7XG4iLCJcbi8qKlxuICogQSBzdGFuZGFyZCBvYmplY3QgdG8gc3RvcmUgdGhlIFV2cyBvZiBhIHRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBUZXh0dXJlVXZzKClcbntcbiAgICB0aGlzLngwID0gMDtcbiAgICB0aGlzLnkwID0gMDtcblxuICAgIHRoaXMueDEgPSAxO1xuICAgIHRoaXMueTEgPSAwO1xuXG4gICAgdGhpcy54MiA9IDE7XG4gICAgdGhpcy55MiA9IDE7XG5cbiAgICB0aGlzLngzID0gMDtcbiAgICB0aGlzLnkzID0gMTtcblxuICAgIHRoaXMueHkwX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTFfdWludDMyID0gMDtcbiAgICB0aGlzLnh5Ml91aW50MzIgPSAwO1xuICAgIHRoaXMueHkzX3VpbnQzMiA9IDA7XG5cbiAgICB0aGlzLnV2c191aW50MzIgPSBuZXcgVWludDMyQXJyYXkoNClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlVXZzO1xuXG4vKipcbiAqIFNldHMgdGhlIHRleHR1cmUgVXZzIGJhc2VkIG9uIHRoZSBnaXZlbiBmcmFtZSBpbmZvcm1hdGlvblxuICogQHBhcmFtIGZyYW1lIHtQSVhJLlJlY3RhbmdsZX1cbiAqIEBwYXJhbSBiYXNlRnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIHJvdGF0ZSB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIGZyYW1lIGlzIHJvdGF0ZWRcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmVVdnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChmcmFtZSwgYmFzZUZyYW1lLCByb3RhdGUpXG57XG4gICAgdmFyIHR3ID0gYmFzZUZyYW1lLndpZHRoO1xuICAgIHZhciB0aCA9IGJhc2VGcmFtZS5oZWlnaHQ7XG5cbiAgICBpZihyb3RhdGUpXG4gICAge1xuICAgICAgICB0aGlzLngwID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUuaGVpZ2h0KSAvIHR3O1xuICAgICAgICB0aGlzLnkxID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkyID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gZnJhbWUueSAvIHRoO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMueDAgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MiA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gKGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQpIC8gdGg7XG4gICAgfVxuXG4gICAgdGhpcy51dnNfdWludDMyWzBdID0gKCgodGhpcy55MCAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngwICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbMV0gPSAoKCh0aGlzLnkxICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDEgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsyXSA9ICgoKHRoaXMueTIgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MiAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzNdID0gKCgodGhpcy55MyAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngzICogNjU1MzUpICYgMHhGRkZGKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBvZiBhIFtwbGF5aW5nXSBWaWRlby5cbiAqXG4gKiBWaWRlbyBiYXNlIHRleHR1cmVzIG1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kIGluIHRoZWlyIGNyZWF0aW9uIHByb2Nlc3MuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZCBpbiBzZXZlcmFsIHdheXMsIHN1Y2ggYXM6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwoJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0Jyk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh7IHNyYzogJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoWycvdmlkZW8ud2VibScsICcvdmlkZW8ubXA0J10pO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzKFtcbiAqICAgICB7IHNyYzogJy92aWRlby53ZWJtJywgbWltZTogJ3ZpZGVvL3dlYm0nIH0sXG4gKiAgICAgeyBzcmM6ICcvdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfVxuICogXSk7XG4gKiBgYGBcbiAqXG4gKiBTZWUgdGhlIFtcImRldXNcIiBkZW1vXShodHRwOi8vd3d3Lmdvb2Rib3lkaWdpdGFsLmNvbS9waXhpanMvZXhhbXBsZXMvZGV1cy8pLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5CYXNlVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzb3VyY2Uge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIFZpZGVvQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFzb3VyY2UpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHZpZGVvIHNvdXJjZSBlbGVtZW50IHNwZWNpZmllZC4nKTtcbiAgICB9XG5cbiAgICAvLyBob29rIGluIGhlcmUgdG8gY2hlY2sgaWYgdmlkZW8gaXMgYWxyZWFkeSBhdmFpbGFibGUuXG4gICAgLy8gQmFzZVRleHR1cmUgbG9va3MgZm9yIGEgc291cmNlLmNvbXBsZXRlIGJvb2xlYW4sIHBsdXMgd2lkdGggJiBoZWlnaHQuXG5cbiAgICBpZiAoKHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9FTk9VR0hfREFUQSB8fCBzb3VyY2UucmVhZHlTdGF0ZSA9PT0gc291cmNlLkhBVkVfRlVUVVJFX0RBVEEpICYmIHNvdXJjZS53aWR0aCAmJiBzb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgc291cmNlLmNvbXBsZXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBCYXNlVGV4dHVyZS5jYWxsKHRoaXMsIHNvdXJjZSwgc2NhbGVNb2RlKTtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCB0aGUgYmFzZSB0ZXh0dXJlIGF1dG9tYXRpY2FsbHkgdXBkYXRlIGl0c2VsZiwgc2V0IHRvIHRydWUgYnkgZGVmYXVsdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG5cbiAgICB0aGlzLl9vblVwZGF0ZSA9IHRoaXMuX29uVXBkYXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fb25DYW5QbGF5ID0gdGhpcy5fb25DYW5QbGF5LmJpbmQodGhpcyk7XG5cbiAgICBpZiAoIXNvdXJjZS5jb21wbGV0ZSlcbiAgICB7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgdGhpcy5fb25DYW5QbGF5KTtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICAvLyBzdGFydGVkIHBsYXlpbmcuLlxuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX29uUGxheVN0YXJ0LmJpbmQodGhpcykpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9vblBsYXlTdG9wLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHRoaXMuX19sb2FkZWQgPSBmYWxzZTtcbn1cblxuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZpZGVvQmFzZVRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFZpZGVvQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVGhlIGludGVybmFsIHVwZGF0ZSBsb29wIG9mIHRoZSB2aWRlbyBiYXNlIHRleHR1cmUsIG9ubHkgcnVucyB3aGVuIGF1dG9VcGRhdGUgaXMgc2V0IHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25VcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJ1bnMgdGhlIHVwZGF0ZSBsb29wIHdoZW4gdGhlIHZpZGVvIGlzIHJlYWR5IHRvIHBsYXlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5hdXRvVXBkYXRlKVxuICAgIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9vblVwZGF0ZSk7XG4gICAgICAgIHRoaXMuYXV0b1VwZGF0ZSA9IHRydWU7XG4gICAgfVxufTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIGEgcGF1c2UgZXZlbnQgaXMgdHJpZ2dlcmVkLCBzdG9wcyB0aGUgdXBkYXRlIGxvb3BcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gdGhlIHZpZGVvIGlzIGxvYWRlZCBhbmQgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vbkNhblBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX29uQ2FuUGxheSk7XG5cbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuc291cmNlLnZpZGVvV2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5zb3VyY2UudmlkZW9IZWlnaHQ7XG5cbiAgICAgICAgdGhpcy5zb3VyY2UucGxheSgpO1xuXG4gICAgICAgIC8vIHByZXZlbnQgbXVsdGlwbGUgbG9hZGVkIGRpc3BhdGNoZXMuLlxuICAgICAgICBpZiAoIXRoaXMuX19sb2FkZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX19sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5zb3VyY2UuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB0aGlzLnNvdXJjZS5fcGl4aUlkIF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNvdXJjZS5fcGl4aUlkO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIE1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlZpZGVvQmFzZVRleHR1cmV9XG4gKi9cblZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvID0gZnVuY3Rpb24gKHZpZGVvLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCF2aWRlby5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgdmlkZW8uX3BpeGlJZCA9ICd2aWRlb18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt2aWRlby5fcGl4aUlkXTtcblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBWaWRlb0Jhc2VUZXh0dXJlKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB2aWRlby5fcGl4aUlkIF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgQmFzZVRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIHZpZGVvIGVsZW1lbnQuXG4gKiBUaGlzIEJhc2VUZXh0dXJlIGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIGEgdGV4dHVyZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1NyYyB7c3RyaW5nfG9iamVjdHxzdHJpbmdbXXxvYmplY3RbXX0gVGhlIFVSTChzKSBmb3IgdGhlIHZpZGVvLlxuICogQHBhcmFtIFt2aWRlb1NyYy5zcmNdIHtzdHJpbmd9IE9uZSBvZiB0aGUgc291cmNlIHVybHMgZm9yIHRoZSB2aWRlb1xuICogQHBhcmFtIFt2aWRlb1NyYy5taW1lXSB7c3RyaW5nfSBUaGUgbWltZXR5cGUgb2YgdGhlIHZpZGVvIChlLmcuICd2aWRlby9tcDQnKS4gSWYgbm90IHNwZWNpZmllZFxuICogIHRoZSB1cmwncyBleHRlbnNpb24gd2lsbCBiZSB1c2VkIGFzIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgbWltZSB0eXBlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsID0gZnVuY3Rpb24gKHZpZGVvU3JjLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcblxuICAgIC8vIGFycmF5IG9mIG9iamVjdHMgb3Igc3RyaW5nc1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZpZGVvU3JjKSlcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlkZW9TcmMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyY1tpXS5zcmMgfHwgdmlkZW9TcmNbaV0sIHZpZGVvU3JjW2ldLm1pbWUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzaW5nbGUgb2JqZWN0IG9yIHN0cmluZ1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyYy5zcmMgfHwgdmlkZW9TcmMsIHZpZGVvU3JjLm1pbWUpKTtcbiAgICB9XG5cbiAgICB2aWRlby5sb2FkKCk7XG4gICAgdmlkZW8ucGxheSgpO1xuXG4gICAgcmV0dXJuIFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpO1xufTtcblxuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyA9IFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybDtcblxuZnVuY3Rpb24gY3JlYXRlU291cmNlKHBhdGgsIHR5cGUpXG57XG4gICAgaWYgKCF0eXBlKVxuICAgIHtcbiAgICAgICAgdHlwZSA9ICd2aWRlby8nICsgcGF0aC5zdWJzdHIocGF0aC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpO1xuXG4gICAgc291cmNlLnNyYyA9IHBhdGg7XG4gICAgc291cmNlLnR5cGUgPSB0eXBlO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn1cbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIC8vIEludGVybmFsIGV2ZW50IHVzZWQgYnkgY29tcG9zZWQgZW1pdHRlclxuICAgIFRJQ0sgPSAndGljayc7XG5cbi8qKlxuICogQSBUaWNrZXIgY2xhc3MgdGhhdCBydW5zIGFuIHVwZGF0ZSBsb29wIHRoYXQgb3RoZXIgb2JqZWN0cyBsaXN0ZW4gdG8uXG4gKiBUaGlzIGNsYXNzIGlzIGNvbXBvc2VkIGFyb3VuZCBhbiBFdmVudEVtaXR0ZXIgb2JqZWN0IHRvIGFkZCBsaXN0ZW5lcnNcbiAqIG1lYW50IGZvciBleGVjdXRpb24gb24gdGhlIG5leHQgcmVxdWVzdGVkIGFuaW1hdGlvbiBmcmFtZS5cbiAqIEFuaW1hdGlvbiBmcmFtZXMgYXJlIHJlcXVlc3RlZCBvbmx5IHdoZW4gbmVjZXNzYXJ5LFxuICogZS5nLiBXaGVuIHRoZSB0aWNrZXIgaXMgc3RhcnRlZCBhbmQgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlclxuICovXG5mdW5jdGlvbiBUaWNrZXIoKVxue1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0aWNrIG1ldGhvZCBib3VuZCB0byB0aWNrZXIgaW5zdGFuY2UuXG4gICAgICogVGhpcyBpcyBiZWNhdXNlIGluIGVhcmx5IDIwMTUsIEZ1bmN0aW9uLmJpbmRcbiAgICAgKiBpcyBzdGlsbCA2MCUgc2xvd2VyIGluIGhpZ2ggcGVyZm9ybWFuY2Ugc2NlbmFyaW9zLlxuICAgICAqIEFsc28gc2VwYXJhdGluZyBmcmFtZSByZXF1ZXN0cyBmcm9tIHVwZGF0ZSBtZXRob2RcbiAgICAgKiBzbyBsaXN0ZW5lcnMgbWF5IGJlIGNhbGxlZCBhdCBhbnkgdGltZSBhbmQgd2l0aFxuICAgICAqIGFueSBhbmltYXRpb24gQVBJLCBqdXN0IGludm9rZSB0aWNrZXIudXBkYXRlKHRpbWUpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90aWNrID0gZnVuY3Rpb24gX3RpY2sodGltZSkge1xuXG4gICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgICAgIGlmIChfdGhpcy5zdGFydGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBJbnZva2UgbGlzdGVuZXJzIG5vd1xuICAgICAgICAgICAgX3RoaXMudXBkYXRlKHRpbWUpO1xuICAgICAgICAgICAgLy8gTGlzdGVuZXIgc2lkZSBlZmZlY3RzIG1heSBoYXZlIG1vZGlmaWVkIHRpY2tlciBzdGF0ZS5cbiAgICAgICAgICAgIGlmIChfdGhpcy5zdGFydGVkICYmIF90aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgX3RoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMuX3RpY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGVtaXR0ZXIgdXNlZCB0byBmaXJlICd0aWNrJyBldmVudFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGN1cnJlbnQgZnJhbWUgcmVxdWVzdCBJRFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHZhbHVlIG1hbmFnZWQgYnkgbWluRlBTIHByb3BlcnR5IHNldHRlciBhbmQgZ2V0dGVyLlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gYWxsb3dlZCBtaWxsaXNlY29uZHMgYmV0d2VlbiB1cGRhdGVzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4RWxhcHNlZE1TID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhpcyB0aWNrZXIgc2hvdWxkIGludm9rZSB0aGUgbWV0aG9kXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdGFydH0gYXV0b21hdGljYWxseVxuICAgICAqIHdoZW4gYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9TdGFydCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2NhbGFyIHRpbWUgdmFsdWUgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgc2V0dGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI21pbkZQU31cbiAgICAgKiBhbmQgaXMgc2NhbGVkIHdpdGgge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0uXG4gICAgICogKipOb3RlOioqIFRoZSBjYXAgbWF5IGJlIGV4Y2VlZGVkIGJ5IHNjYWxpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZGVsdGFUaW1lID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRpbWUgZWxhcHNlZCBpbiBtaWxsaXNlY29uZHMgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogT3Bwb3NlZCB0byB3aGF0IHRoZSBzY2FsYXIge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9XG4gICAgICogaXMgYmFzZWQsIHRoaXMgdmFsdWUgaXMgbmVpdGhlciBjYXBwZWQgbm9yIHNjYWxlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEgLyBUQVJHRVRfRlBNU1xuICAgICAqL1xuICAgIHRoaXMuZWxhcHNlZE1TID0gMSAvIENPTlNULlRBUkdFVF9GUE1TOyAvLyBkZWZhdWx0IHRvIHRhcmdldCBmcmFtZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCB0aW1lIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjdXBkYXRlfSB3YXMgaW52b2tlZC5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGFsc28gcmVzZXQgaW50ZXJuYWxseSBvdXRzaWRlIG9mIGludm9raW5nXG4gICAgICogdXBkYXRlLCBidXQgb25seSB3aGVuIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gICAgICogSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERPTUhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgICogdGhpcyB2YWx1ZSB3aWxsIGhhdmUgYSBwcmVjaXNpb24gb2YgMSDCtXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5sYXN0VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBGYWN0b3Igb2YgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBTY2FsZXMgdGlja2VyLmRlbHRhVGltZSB0byB3aGF0IHdvdWxkIGJlXG4gICAgICogLy8gdGhlIGVxdWl2YWxlbnQgb2YgYXBwcm94aW1hdGVseSAxMjAgRlBTXG4gICAgICogdGlja2VyLnNwZWVkID0gMjtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5zcGVlZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBoYXMgYmVlbiBzdGFydGVkLlxuICAgICAqIGB0cnVlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogYGZhbHNlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0b3B9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBXaGlsZSBgZmFsc2VgLCB0aGlzIHZhbHVlIG1heSBjaGFuZ2UgdG8gYHRydWVgIGluIHRoZVxuICAgICAqIGV2ZW50IG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBiZWluZyBgdHJ1ZWBcbiAgICAgKiBhbmQgYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlja2VyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZXMgcGVyIHNlY29uZCBhdCB3aGljaCB0aGlzIHRpY2tlciBpcyBydW5uaW5nLlxuICAgICAqIFRoZSBkZWZhdWx0IGlzIGFwcHJveGltYXRlbHkgNjAgaW4gbW9zdCBtb2Rlcm4gYnJvd3NlcnMuXG4gICAgICogKipOb3RlOioqIFRoaXMgZG9lcyBub3QgZmFjdG9yIGluIHRoZSB2YWx1ZSBvZlxuICAgICAqIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3BlZWR9LCB3aGljaCBpcyBzcGVjaWZpY1xuICAgICAqIHRvIHNjYWxpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuZWxhcHNlZE1TO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIG1pbGxpc2Vjb25kcyBhbGxvd2VkIHRvXG4gICAgICogZWxhcHNlIGJldHdlZW4gaW52b2tpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9LlxuICAgICAqIFRoaXMgdmFsdWUgaXMgdXNlZCB0byBjYXAge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICAgICAqIGJ1dCBkb2VzIG5vdCBlZmZlY3QgdGhlIG1lYXN1cmVkIHZhbHVlIG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjRlBTfS5cbiAgICAgKiBXaGVuIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSBpdCBpcyBjbGFtcGVkIHRvIGEgdmFsdWUgYmV0d2VlblxuICAgICAqIGAwYCBhbmQgYFBJWEkuVEFSR0VUX0ZQTVMgKiAxMDAwYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSS50aWNrZXIuVGlja2VyI1xuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgbWluRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuX21heEVsYXBzZWRNUztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbihmcHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIENsYW1wOiAwIHRvIFRBUkdFVF9GUE1TXG4gICAgICAgICAgICB2YXIgbWluRlBNUyA9IE1hdGgubWluKE1hdGgubWF4KDAsIGZwcykgLyAxMDAwLCBDT05TVC5UQVJHRVRfRlBNUyk7XG4gICAgICAgICAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxIC8gbWluRlBNUztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lLlxuICogSWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHkgYmVlbiByZXF1ZXN0ZWQsIGFuZCBpZiB0aGUgaW50ZXJuYWxcbiAqIGVtaXR0ZXIgaGFzIGxpc3RlbmVycywgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3JlcXVlc3RJZk5lZWRlZCA9IGZ1bmN0aW9uIF9yZXF1ZXN0SWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICAvLyBlbnN1cmUgY2FsbGJhY2tzIGdldCBjb3JyZWN0IGRlbHRhXG4gICAgICAgIHRoaXMubGFzdFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX3RpY2spO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSBjYW5jZWxzIGEgcGVuZGluZyBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fY2FuY2VsSWZOZWVkZWQgPSBmdW5jdGlvbiBfY2FuY2VsSWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgIT09IG51bGwpXG4gICAge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZXF1ZXN0SWQpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiB0aGUgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQgaXQgY2hlY2tzIGlmIGEgZnJhbWUgaGFzIG5vdCBhbHJlYWR5XG4gKiBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbCBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMuIElmIHRoZXNlXG4gKiBjb25kaXRpb25zIGFyZSBtZXQsIGEgbmV3IGZyYW1lIGlzIHJlcXVlc3RlZC4gSWYgdGhlIHRpY2tlciBoYXMgbm90XG4gKiBiZWVuIHN0YXJ0ZWQsIGJ1dCBhdXRvU3RhcnQgaXMgYHRydWVgLCB0aGVuIHRoZSB0aWNrZXIgc3RhcnRzIG5vdyxcbiAqIGFuZCBjb250aW51ZXMgd2l0aCB0aGUgcHJldmlvdXMgY29uZGl0aW9ucyB0byByZXF1ZXN0IGEgbmV3IGZyYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3N0YXJ0SWZQb3NzaWJsZSA9IGZ1bmN0aW9uIF9zdGFydElmUG9zc2libGUoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5hdXRvU3RhcnQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29ufSBpbnRlcm5hbGx5IGZvciB0aGVcbiAqIGludGVybmFsICd0aWNrJyBldmVudC4gSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsXG4gKiBhbmQgaWYgc28gaXQgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGF0IHRoaXMgcG9pbnQuXG4gKlxuICogQHBhcmFtIGZuIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGFkZGVkIGZvciB1cGRhdGVzXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbihUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29uY2V9IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIG9uZSB1cGRhdGVcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZE9uY2UgPSBmdW5jdGlvbiBhZGRPbmNlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub25jZShUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29mZn0gaW50ZXJuYWxseSBmb3IgJ3RpY2snIGV2ZW50LlxuICogSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMgZm9yICd0aWNrJyBldmVudC5cbiAqIElmIGl0IGRvZXMsIHRoZW4gaXQgY2FuY2VscyB0aGUgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwYXJhbSBbZm5dIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIHJlbW92ZWRcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dCB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub2ZmKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIGlmICghdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgbGlzdGVuZXJzXG4gKiBhIG5ldyBhbmltYXRpb24gZnJhbWUgaXMgcmVxdWVzdGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiBzdGFydCgpXG57XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSB0aWNrZXIuIElmIHRoZSB0aWNrZXIgaGFzIHJlcXVlc3RlZFxuICogYW4gYW5pbWF0aW9uIGZyYW1lIGl0IGlzIGNhbmNlbGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uIHN0b3AoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2FuY2VsSWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRyaWdnZXJzIGFuIHVwZGF0ZS4gQW4gdXBkYXRlIGVudGFpbHMgc2V0dGluZyB0aGVcbiAqIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNlbGFwc2VkTVN9LFxuICogdGhlIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICogaW52b2tpbmcgYWxsIGxpc3RlbmVycyB3aXRoIGN1cnJlbnQgZGVsdGFUaW1lLFxuICogYW5kIHRoZW4gZmluYWxseSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbGFzdFRpbWV9XG4gKiB3aXRoIHRoZSB2YWx1ZSBvZiBjdXJyZW50VGltZSB0aGF0IHdhcyBwcm92aWRlZC5cbiAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgYW5pbWF0aW9uXG4gKiBmcmFtZSBjYWxsYmFja3MgaWYgdGhlIHRpY2tlciBpbnN0YW5jZSBoYXMgYmVlbiBzdGFydGVkXG4gKiBhbmQgbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqXG4gKiBAcGFyYW0gW2N1cnJlbnRUaW1lPXBlcmZvcm1hbmNlLm5vdygpXSB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9IHRoZSBjdXJyZW50IHRpbWUgb2YgZXhlY3V0aW9uXG4gKi9cblRpY2tlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKGN1cnJlbnRUaW1lKVxue1xuICAgIHZhciBlbGFwc2VkTVM7XG5cbiAgICAvLyBBbGxvdyBjYWxsaW5nIHVwZGF0ZSBkaXJlY3RseSB3aXRoIGRlZmF1bHQgY3VycmVudFRpbWUuXG4gICAgY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSB8fCBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAvLyBTYXZlIHVuY2FwcGVkIGVsYXBzZWRNUyBmb3IgbWVhc3VyZW1lbnRcbiAgICBlbGFwc2VkTVMgPSB0aGlzLmVsYXBzZWRNUyA9IGN1cnJlbnRUaW1lIC0gdGhpcy5sYXN0VGltZTtcblxuICAgIC8vIGNhcCB0aGUgbWlsbGlzZWNvbmRzIGVsYXBzZWQgdXNlZCBmb3IgZGVsdGFUaW1lXG4gICAgaWYgKGVsYXBzZWRNUyA+IHRoaXMuX21heEVsYXBzZWRNUylcbiAgICB7XG4gICAgICAgIGVsYXBzZWRNUyA9IHRoaXMuX21heEVsYXBzZWRNUztcbiAgICB9XG5cbiAgICB0aGlzLmRlbHRhVGltZSA9IGVsYXBzZWRNUyAqIENPTlNULlRBUkdFVF9GUE1TICogdGhpcy5zcGVlZDtcblxuICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgYWRkZWQgdG8gaW50ZXJuYWwgZW1pdHRlclxuICAgIHRoaXMuX2VtaXR0ZXIuZW1pdChUSUNLLCB0aGlzLmRlbHRhVGltZSk7XG5cbiAgICB0aGlzLmxhc3RUaW1lID0gY3VycmVudFRpbWU7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRpY2tlcjtcbiIsInZhciBUaWNrZXIgPSByZXF1aXJlKCcuL1RpY2tlcicpO1xuXG4vKipcbiAqIFRoZSBzaGFyZWQgdGlja2VyIGluc3RhbmNlIHVzZWQgYnkge0BsaW5rIFBJWEkuZXh0cmFzLk1vdmllQ2xpcH0uXG4gKiBhbmQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqIFRoZSBwcm9wZXJ0eSB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2F1dG9TdGFydH0gaXMgc2V0IHRvIGB0cnVlYFxuICogZm9yIHRoaXMgaW5zdGFuY2UuIFBsZWFzZSBmb2xsb3cgdGhlIGV4YW1wbGVzIGZvciB1c2FnZSwgaW5jbHVkaW5nXG4gKiBob3cgdG8gb3B0LW91dCBvZiBhdXRvLXN0YXJ0aW5nIHRoZSBzaGFyZWQgdGlja2VyLlxuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgdGlja2VyID0gUElYSS50aWNrZXIuc2hhcmVkO1xuICogLy8gU2V0IHRoaXMgdG8gcHJldmVudCBzdGFydGluZyB0aGlzIHRpY2tlciB3aGVuIGxpc3RlbmVycyBhcmUgYWRkZWQuXG4gKiAvLyBCeSBkZWZhdWx0IHRoaXMgaXMgdHJ1ZSBvbmx5IGZvciB0aGUgUElYSS50aWNrZXIuc2hhcmVkIGluc3RhbmNlLlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogLy8gRllJLCBjYWxsIHRoaXMgdG8gZW5zdXJlIHRoZSB0aWNrZXIgaXMgc3RvcHBlZC4gSXQgc2hvdWxkIGJlIHN0b3BwZWRcbiAqIC8vIGlmIHlvdSBoYXZlIG5vdCBhdHRlbXB0ZWQgdG8gcmVuZGVyIGFueXRoaW5nIHlldC5cbiAqIHRpY2tlci5zdG9wKCk7XG4gKiAvLyBDYWxsIHRoaXMgd2hlbiB5b3UgYXJlIHJlYWR5IGZvciBhIHJ1bm5pbmcgc2hhcmVkIHRpY2tlci5cbiAqIHRpY2tlci5zdGFydCgpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBZb3UgbWF5IHVzZSB0aGUgc2hhcmVkIHRpY2tlciB0byByZW5kZXIuLi5cbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDgwMCwgNjAwKTtcbiAqIHZhciBzdGFnZSA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogdmFyIGludGVyYWN0aW9uTWFuYWdlciA9IFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyKTtcbiAqIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocmVuZGVyZXIudmlldyk7XG4gKiB0aWNrZXIuYWRkKGZ1bmN0aW9uICh0aW1lKSB7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBPciB5b3UgY2FuIGp1c3QgdXBkYXRlIGl0IG1hbnVhbGx5LlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogdGlja2VyLnN0b3AoKTtcbiAqIGZ1bmN0aW9uIGFuaW1hdGUodGltZSkge1xuICogICAgIHRpY2tlci51cGRhdGUodGltZSk7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XG4gKiB9XG4gKiBhbmltYXRlKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAqXG4gKiBAdHlwZSB7UElYSS50aWNrZXIuVGlja2VyfVxuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbnZhciBzaGFyZWQgPSBuZXcgVGlja2VyKCk7XG5zaGFyZWQuYXV0b1N0YXJ0ID0gdHJ1ZTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudGlja2VyXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIHNoYXJlZDogc2hhcmVkLFxuICAgIFRpY2tlcjogVGlja2VyXG59O1xuIiwiLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuXG52YXIgR0xfTUFQID0ge307XG5cblxudmFyIGNyZWF0ZUluZGljZXNGb3JRdWFkcyA9IGZ1bmN0aW9uIChzaXplKVxue1xuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYXJyYXksIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgIFxuICAgIHZhciB0b3RhbEluZGljZXMgPSBzaXplICogNjtcblxuICAgIHZhciBpbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHRvdGFsSW5kaWNlcyk7XG5cblx0Ly8gZmlsbCB0aGUgaW5kaWNlcyB3aXRoIHRoZSBxdWFkcyB0byBkcmF3XG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCB0b3RhbEluZGljZXM7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kaWNlcztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzOyIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLnV0aWxzXG4gKi9cbnZhciB1dGlscyA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIF91aWQ6IDAsXG4gICAgX3NhaWRIZWxsbzogZmFsc2UsXG5cbiAgICBFdmVudEVtaXR0ZXI6ICAgcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIHBsdWdpblRhcmdldDogICByZXF1aXJlKCcuL3BsdWdpblRhcmdldCcpLFxuICAgIGFzeW5jOiAgICAgICAgICByZXF1aXJlKCdhc3luYycpLFxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllclxuICAgICAqXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllciB0byB1c2UuXG4gICAgICovXG4gICAgdWlkOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICsrdXRpbHMuX3VpZDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBoZXggY29sb3IgbnVtYmVyIHRvIGFuIFtSLCBHLCBCXSBhcnJheVxuICAgICAqXG4gICAgICogQHBhcmFtIGhleCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSAge251bWJlcltdfSBbb3V0PVtdXVxuICAgICAqIEByZXR1cm4ge251bWJlcltdfSBBbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIFtSLCBHLCBCXSBvZiB0aGUgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnJnYjogZnVuY3Rpb24gKGhleCwgb3V0KVxuICAgIHtcbiAgICAgICAgb3V0ID0gb3V0IHx8IFtdO1xuXG4gICAgICAgIG91dFswXSA9IChoZXggPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzFdID0gKGhleCA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIG91dFsyXSA9IChoZXggJiAweEZGKSAvIDI1NTtcblxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5nIGNvbG9yLlxuICAgICAqL1xuICAgIGhleDJzdHJpbmc6IGZ1bmN0aW9uIChoZXgpXG4gICAge1xuICAgICAgICBoZXggPSBoZXgudG9TdHJpbmcoMTYpO1xuICAgICAgICBoZXggPSAnMDAwMDAwJy5zdWJzdHIoMCwgNiAtIGhleC5sZW5ndGgpICsgaGV4O1xuXG4gICAgICAgIHJldHVybiAnIycgKyBoZXg7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgY29sb3IgYXMgYW4gW1IsIEcsIEJdIGFycmF5IHRvIGEgaGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIHJnYiB7bnVtYmVyW119XG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgY29sb3IgbnVtYmVyXG4gICAgICovXG4gICAgcmdiMmhleDogZnVuY3Rpb24gKHJnYilcbiAgICB7XG4gICAgICAgIHJldHVybiAoKHJnYlswXSoyNTUgPDwgMTYpICsgKHJnYlsxXSoyNTUgPDwgOCkgKyByZ2JbMl0qMjU1KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIENhbnZhcyBCbGVuZE1vZGVzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnJvd3NlclxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciB0aGV5IGFyZSBzdXBwb3J0ZWRcbiAgICAgKi9cbiAgICBjYW5Vc2VOZXdDYW52YXNCbGVuZE1vZGVzOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwbmdIZWFkID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVFBQUFBQkFRTUFBQUREOHAyT0FBQUFBMUJNVkVYLyc7XG4gICAgICAgIHZhciBwbmdFbmQgPSAnQUFBQUNrbEVRVlFJMTJOZ0FBQUFBZ0FCNGlHOE13QUFBQUJKUlU1RXJrSmdnZz09JztcblxuICAgICAgICB2YXIgbWFnZW50YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBtYWdlbnRhLnNyYyA9IHBuZ0hlYWQgKyAnQVA4MDRPYTYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciB5ZWxsb3cgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgeWVsbG93LnNyYyA9IHBuZ0hlYWQgKyAnL3dDS3h2UkYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY2FudmFzLndpZHRoID0gNjtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IDE7XG5cbiAgICAgICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShtYWdlbnRhLCAwLCAwKTtcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoeWVsbG93LCAyLCAwKTtcblxuICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDIsMCwxLDEpLmRhdGE7XG5cbiAgICAgICAgcmV0dXJuIChkYXRhWzBdID09PSAyNTUgJiYgZGF0YVsxXSA9PT0gMCAmJiBkYXRhWzJdID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBudW1iZXIsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgdGFrZW4gZnJvbSBTdGFybGluZyBGcmFtZXdvcmsgYXMgaXRzIHByZXR0eSBuZWF0IDspXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbnVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7bnVtYmVyfSB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqL1xuICAgIGdldE5leHRQb3dlck9mVHdvOiBmdW5jdGlvbiAobnVtYmVyKVxuICAgIHtcbiAgICAgICAgLy8gc2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Bvd2VyX29mX3R3byNGYXN0X2FsZ29yaXRobV90b19jaGVja19pZl9hX3Bvc2l0aXZlX251bWJlcl9pc19hX3Bvd2VyX29mX3R3b1xuICAgICAgICBpZiAobnVtYmVyID4gMCAmJiAobnVtYmVyICYgKG51bWJlciAtIDEpKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSAxO1xuXG4gICAgICAgICAgICB3aGlsZSAocmVzdWx0IDwgbnVtYmVyKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA8PD0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBjaGVja3MgaWYgdGhlIGdpdmVuIHdpZHRoIGFuZCBoZWlnaHQgbWFrZSBhIHBvd2VyIG9mIHR3byByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSBoZWlnaHQge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzUG93ZXJPZlR3bzogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm4gKHdpZHRoID4gMCAmJiAod2lkdGggJiAod2lkdGggLSAxKSkgPT09IDAgJiYgaGVpZ2h0ID4gMCAmJiAoaGVpZ2h0ICYgKGhlaWdodCAtIDEpKSA9PT0gMCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGdldCB0aGUgcmVzb2x1dGlvbiBvZiBhbiBhc3NldCBieSBsb29raW5nIGZvciB0aGUgcHJlZml4XG4gICAgICogdXNlZCBieSBzcHJpdGVzaGVldHMgYW5kIGltYWdlIHVybHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwge3N0cmluZ30gdGhlIGltYWdlIHBhdGhcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0UmVzb2x1dGlvbk9mVXJsOiBmdW5jdGlvbiAodXJsKVxuICAgIHtcbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBDT05TVC5SRVRJTkFfUFJFRklYLmV4ZWModXJsKTtcblxuICAgICAgICBpZiAocmVzb2x1dGlvbilcbiAgICAgICAge1xuICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChyZXNvbHV0aW9uWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAxO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBMb2dzIG91dCB0aGUgdmVyc2lvbiBhbmQgcmVuZGVyZXIgaW5mb3JtYXRpb24gZm9yIHRoaXMgcnVubmluZyBpbnN0YW5jZSBvZiBQSVhJLlxuICAgICAqIElmIHlvdSBkb24ndCB3YW50IHRvIHNlZSB0aGlzIG1lc3NhZ2UgeW91IGNhbiBzZXQgYFBJWEkudXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7YFxuICAgICAqIHNvIHRoZSBsaWJyYXJ5IHRoaW5rcyBpdCBhbHJlYWR5IHNhaWQgaXQuIEtlZXAgaW4gbWluZCB0aGF0IGRvaW5nIHRoYXQgd2lsbCBmb3JldmVyXG4gICAgICogbWFrZXMgeW91IGEgamVyayBmYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBUaGUgc3RyaW5nIHJlbmRlcmVyIHR5cGUgdG8gbG9nLlxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBzYXlIZWxsbzogZnVuY3Rpb24gKHR5cGUpXG4gICAge1xuICAgICAgICBpZiAodXRpbHMuX3NhaWRIZWxsbylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjaHJvbWUnKSA+IC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtcbiAgICAgICAgICAgICAgICAnXFxuICVjICVjICVjIFBpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0g4pywICcgKyB0eXBlICsgJyDinLAgICVjICcgKyAnICVjICcgKyAnIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8gICVjICVjIOKZpSVj4pmlJWPimaUgXFxuXFxuJyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmY2NmE1OyBiYWNrZ3JvdW5kOiAjMDMwMzA3OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmYzNkYzsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOydcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBhcmdzKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3aW5kb3cuY29uc29sZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nKCdQaXhpLmpzICcgKyBDT05TVC5WRVJTSU9OICsgJyAtICcgKyB0eXBlICsgJyAtIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8nKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuXG4gICAgICAgIHV0aWxzLl9zYWlkSGVsbG8gPSB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgZm9yIGNoZWNraW5nIGZvciB3ZWJnbCBzdXBwb3J0XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzV2ViR0xTdXBwb3J0ZWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB2YXIgY29udGV4dE9wdGlvbnMgPSB7IHN0ZW5jaWw6IHRydWUgfTtcbiAgICAgICAgdHJ5XG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghd2luZG93LldlYkdMUmVuZGVyaW5nQ29udGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSxcbiAgICAgICAgICAgICAgICBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIGNvbnRleHRPcHRpb25zKSB8fCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgY29udGV4dE9wdGlvbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gISEoZ2wgJiYgZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5zdGVuY2lsKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgc2lnbiBvZiBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBuIHtudW1iZXJ9XG4gICAgICogQHJldHVybnMge251bWJlcn0gMCBpZiBuIGlzIDAsIC0xIGlmIG4gaXMgbmVnYXRpdmUsIDEgaWYgbiBpIHBvc2l0aXZlXG4gICAgICovXG4gICAgc2lnbjogZnVuY3Rpb24gKG4pXG4gICAge1xuICAgICAgICByZXR1cm4gbiA/IChuIDwgMCA/IC0xIDogMSkgOiAwO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZW1vdmVJdGVtc1xuICAgICAqXG4gICAgICogQHBhcmFtIHthcnJheX0gYXJyIFRoZSB0YXJnZXQgYXJyYXlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRJZHggVGhlIGluZGV4IHRvIGJlZ2luIHJlbW92aW5nIGZyb20gKGluY2x1c2l2ZSlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmVtb3ZlQ291bnQgSG93IG1hbnkgaXRlbXMgdG8gcmVtb3ZlXG4gICAgICovXG4gICAgcmVtb3ZlSXRlbXM6IGZ1bmN0aW9uIChhcnIsIHN0YXJ0SWR4LCByZW1vdmVDb3VudClcbiAgICB7XG4gICAgICAgIHZhciBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIGlmIChzdGFydElkeCA+PSBsZW5ndGggfHwgcmVtb3ZlQ291bnQgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbW92ZUNvdW50ID0gKHN0YXJ0SWR4K3JlbW92ZUNvdW50ID4gbGVuZ3RoID8gbGVuZ3RoLXN0YXJ0SWR4IDogcmVtb3ZlQ291bnQpO1xuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJZHgsIGxlbiA9IGxlbmd0aC1yZW1vdmVDb3VudDsgaSA8IGxlbjsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBhcnJbaV0gPSBhcnJbaSArIHJlbW92ZUNvdW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyci5sZW5ndGggPSBsZW47XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIERlc2NyaWJlIHByb3BlcnR5IHVzYWdlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBUZXh0dXJlQ2FjaGU6IHt9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHt9XG59O1xuIiwiLyoqXG4gKiBNaXhpbnMgZnVuY3Rpb25hbGl0eSB0byBtYWtlIGFuIG9iamVjdCBoYXZlIFwicGx1Z2luc1wiLlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkudXRpbHNcbiAqIEBwYXJhbSBvYmoge29iamVjdH0gVGhlIG9iamVjdCB0byBtaXggaW50by5cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIHBsdWdpblRhcmdldC5taXhpbihNeU9iamVjdCk7XG4gKi9cbmZ1bmN0aW9uIHBsdWdpblRhcmdldChvYmopXG57XG4gICAgb2JqLl9fcGx1Z2lucyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHBsdWdpbiB0byBhbiBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwbHVnaW5OYW1lIHtzdHJpbmd9IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICAgICAqIEBwYXJhbSBjdG9yIHtGdW5jdGlvbn0gVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciB0aGUgcGx1Z2luLlxuICAgICAqL1xuICAgIG9iai5yZWdpc3RlclBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW5OYW1lLCBjdG9yKVxuICAgIHtcbiAgICAgICAgb2JqLl9fcGx1Z2luc1twbHVnaW5OYW1lXSA9IGN0b3I7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlcyBhbGwgdGhlIHBsdWdpbnMgb2YgdGhpcyBvYmplY3RcbiAgICAgKlxuICAgICAqL1xuICAgIG9iai5wcm90b3R5cGUuaW5pdFBsdWdpbnMgPSBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zID0gdGhpcy5wbHVnaW5zIHx8IHt9O1xuXG4gICAgICAgIGZvciAodmFyIG8gaW4gb2JqLl9fcGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbmV3IChvYmouX19wbHVnaW5zW29dKSh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5kZXN0cm95UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBvIGluIHRoaXMucGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBsdWdpbnMgPSBudWxsO1xuICAgIH07XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLyoqXG4gICAgICogTWl4ZXMgaW4gdGhlIHByb3BlcnRpZXMgb2YgdGhlIHBsdWdpblRhcmdldCBpbnRvIGFub3RoZXIgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0IHtvYmplY3R9IFRoZSBvYmogdG8gbWl4IGludG9cbiAgICAgKi9cbiAgICBtaXhpbjogZnVuY3Rpb24gbWl4aW4ob2JqKVxuICAgIHtcbiAgICAgICAgcGx1Z2luVGFyZ2V0KG9iaik7XG4gICAgfVxufTtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciBjb3JlID0gcmVxdWlyZSgnLi9jb3JlJyksXG4gICAgbWVzaCA9IHJlcXVpcmUoJy4vbWVzaCcpLFxuICAgIGV4dHJhcyA9IHJlcXVpcmUoJy4vZXh0cmFzJyksXG4gICAgZmlsdGVycyA9IHJlcXVpcmUoJy4vZmlsdGVycycpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIFNwcml0ZUJhdGNoXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLlBhcnRpY2xlQ29udGFpbmVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlNwcml0ZUJhdGNoID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLicpO1xufTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBBc3NldExvYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBzZWUgUElYSS5sb2FkZXJzLkxvYWRlclxuICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IFRoZSBsb2FkZXIgc3lzdGVtIHdhcyBvdmVyaGF1bGVkIGluIHBpeGkgdjMsIHBsZWFzZSBzZWUgdGhlIG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyIGNsYXNzLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLkFzc2V0TG9hZGVyID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuJyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb3JlLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFN0YWdlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQ29udGFpbmVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFN0YWdlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1lvdSBkbyBub3QgbmVlZCB0byB1c2UgYSBQSVhJIFN0YWdlIGFueSBtb3JlLCB5b3UgY2FuIHNpbXBseSByZW5kZXIgYW55IGNvbnRhaW5lci4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIERpc3BsYXlPYmplY3RDb250YWluZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgRGlzcGxheU9iamVjdENvbnRhaW5lcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEaXNwbGF5T2JqZWN0Q29udGFpbmVyIGhhcyBiZWVuIHNob3J0ZW5lZCB0byBDb250YWluZXIsIHBsZWFzZSB1c2UgQ29udGFpbmVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RyaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2hcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RyaXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFN0cmlwIGNsYXNzIGhhcyBiZWVuIHJlbmFtZWQgdG8gTWVzaCBhbmQgbW92ZWQgdG8gbWVzaC5NZXNoLCBwbGVhc2UgdXNlIG1lc2guTWVzaCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLk1lc2g7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBSb3BlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkubWVzaC5Sb3BlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFJvcGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFJvcGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gbWVzaC5Sb3BlLCBwbGVhc2UgdXNlIG1lc2guUm9wZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLlJvcGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBNb3ZpZUNsaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuTW92aWVDbGlwXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIE1vdmllQ2xpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgTW92aWVDbGlwIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5Nb3ZpZUNsaXAsIHBsZWFzZSB1c2UgZXh0cmFzLk1vdmllQ2xpcCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuTW92aWVDbGlwO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGlsaW5nU3ByaXRlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBUaWxpbmdTcHJpdGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRpbGluZ1Nwcml0ZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuVGlsaW5nU3ByaXRlLCBwbGVhc2UgdXNlIGV4dHJhcy5UaWxpbmdTcHJpdGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLlRpbGluZ1Nwcml0ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJpdG1hcFRleHRcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCaXRtYXBUZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCaXRtYXBUZXh0IGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5CaXRtYXBUZXh0LCBwbGVhc2UgdXNlIGV4dHJhcy5CaXRtYXBUZXh0IGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5CaXRtYXBUZXh0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgYmxlbmRNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIGJsZW5kTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGJsZW5kTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gQkxFTkRfTU9ERVMsIHBsZWFzZSB1c2UgQkxFTkRfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5CTEVORF9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNjYWxlTW9kZXNcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBzY2FsZU1vZGVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBzY2FsZU1vZGVzIGhhcyBiZWVuIG1vdmVkIHRvIFNDQUxFX01PREVTLCBwbGVhc2UgdXNlIFNDQUxFX01PREVTIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU0NBTEVfTU9ERVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBCYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuQmFzZVRleHR1cmVDYWNoZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCYXNlVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgQmFzZVRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5CYXNlVGV4dHVyZUNhY2hlLCBwbGVhc2UgdXNlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5UZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuVGV4dHVyZUNhY2hlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIG1hdGhcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBtYXRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgbWF0aCBuYW1lc3BhY2UgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIGFjY2VzcyBtZW1iZXJzIGFscmVhZHkgYWNjZXNzaWJsZSBvbiBQSVhJLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgUElYSS5TcHJpdGUjc2V0VGV4dHVyZVxuICogQHNlZSBQSVhJLlNwcml0ZSN0ZXh0dXJlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlLnByb3RvdHlwZS5zZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dHVyZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dHVyZSBwcm9wZXJ0eSwgZS5nIDogc3ByaXRlLnRleHR1cmUgPSB0ZXh0dXJlOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3NldFRleHRcbiAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmV4dHJhcy5CaXRtYXBUZXh0LnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dClcbntcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dCBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dCBwcm9wZXJ0eSwgZS5nIDogbXlCaXRtYXBUZXh0LnRleHQgPSBcXCdteSB0ZXh0XFwnOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLlRleHQjdGV4dFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteVRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRTdHlsZVxuICogQHNlZSBQSVhJLlRleHQjc3R5bGVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0LnByb3RvdHlwZS5zZXRTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlKVxue1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldFN0eWxlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBzdHlsZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0LnN0eWxlID0gc3R5bGU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQHNlZSBQSVhJLlRleHR1cmUjc2V0RnJhbWVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0dXJlLnByb3RvdHlwZS5zZXRGcmFtZSA9IGZ1bmN0aW9uKGZyYW1lKVxue1xuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldEZyYW1lIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBmcmFtZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0dXJlLmZyYW1lID0gZnJhbWU7Jyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhmaWx0ZXJzLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBzZWUgUElYSS5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBBYnN0cmFjdEZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLkFic3RyYWN0RmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBBYnN0cmFjdEZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkFic3RyYWN0RmlsdGVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkZYQUFGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuRlhBQUZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBGWEFBRmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuRlhBQUZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgRlhBQUZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkZYQUFGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuU3ByaXRlTWFza0ZpbHRlclxuICAgICAqIEBzZWUgUElYSS5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIFNwcml0ZU1hc2tGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBTcHJpdGVNYXNrRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU3ByaXRlTWFza0ZpbHRlcjtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkudXRpbHMudXVpZFxuICogQHNlZSBQSVhJLnV0aWxzLnVpZFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICovXG5jb3JlLnV0aWxzLnV1aWQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvbnNvbGUud2FybigndXRpbHMudXVpZCgpIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdXRpbHMudWlkKCkgZnJvbSBub3cgb24uJyk7XG4gICAgcmV0dXJuIGNvcmUudXRpbHMudWlkKCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogQSBCaXRtYXBUZXh0IG9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dCB1c2luZyBiaXRtYXAgZm9udC4gVG9cbiAqIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJywgJ1xccicgb3IgJ1xcclxcbicgaW4geW91ciBzdHJpbmcuIFlvdSBjYW4gZ2VuZXJhdGUgdGhlIGZudCBmaWxlcyB1c2luZzpcbiAqXG4gKiBBIEJpdG1hcFRleHQgY2FuIG9ubHkgYmUgY3JlYXRlZCB3aGVuIHRoZSBmb250IGlzIGxvYWRlZFxuICpcbiAqIGBgYGpzXG4gKiAvLyBpbiB0aGlzIGNhc2UgdGhlIGZvbnQgaXMgaW4gYSBmaWxlIGNhbGxlZCAnZGVzeXJlbC5mbnQnXG4gKiB2YXIgYml0bWFwVGV4dCA9IG5ldyBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0KFwidGV4dCB1c2luZyBhIGZhbmN5IGZvbnQhXCIsIHtmb250OiBcIjM1cHggRGVzeXJlbFwiLCBhbGlnbjogXCJyaWdodFwifSk7XG4gKiBgYGBcbiAqXG4gKlxuICogaHR0cDovL3d3dy5hbmdlbGNvZGUuY29tL3Byb2R1Y3RzL2JtZm9udC8gZm9yIHdpbmRvd3Mgb3JcbiAqIGh0dHA6Ly93d3cuYm1nbHlwaC5jb20vIGZvciBtYWMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBzdHlsZSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIHN0eWxlLmZvbnQge3N0cmluZ3xvYmplY3R9IFRoZSBmb250IGRlc2NyaXB0b3IgZm9yIHRoZSBvYmplY3QsIGNhbiBiZSBwYXNzZWQgYXMgYSBzdHJpbmcgb2YgZm9ybVxuICogICAgICBcIjI0cHggRm9udE5hbWVcIiBvciBcIkZvbnROYW1lXCIgb3IgYXMgYW4gb2JqZWN0IHdpdGggZXhwbGljaXQgbmFtZS9zaXplIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQubmFtZV0ge3N0cmluZ30gVGhlIGJpdG1hcCBmb250IGlkXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQuc2l6ZV0ge251bWJlcn0gVGhlIHNpemUgb2YgdGhlIGZvbnQgaW4gcGl4ZWxzLCBlLmcuIDI0XG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0XG4gKiAgICAgIHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUudGludD0weEZGRkZGRl0ge251bWJlcn0gVGhlIHRpbnQgY29sb3JcbiAqL1xuZnVuY3Rpb24gQml0bWFwVGV4dCh0ZXh0LCBzdHlsZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgb3ZlcmFsbCB0ZXh0LCBkaWZmZXJlbnQgZnJvbSBmb250U2l6ZSxcbiAgICAgKiB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBzdHlsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRleHRXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dEhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBsZXR0ZXIgc3ByaXRlIHBvb2wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZ2x5cGhzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZm9udCA9IHtcbiAgICAgICAgdGludDogc3R5bGUudGludCAhPT0gdW5kZWZpbmVkID8gc3R5bGUudGludCA6IDB4RkZGRkZGLFxuICAgICAgICBhbGlnbjogc3R5bGUuYWxpZ24gfHwgJ2xlZnQnLFxuICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICBzaXplOiAwXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgZm9udC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZm9udCA9IHN0eWxlLmZvbnQ7IC8vIHJ1biBmb250IHNldHRlclxuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IHRleHQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IHdpZHRoIG9mIHRoaXMgYml0bWFwIHRleHQgaW4gcGl4ZWxzLiBJZiB0aGUgdGV4dCBwcm92aWRlZCBpcyBsb25nZXIgdGhhbiB0aGUgdmFsdWUgcHJvdmlkZWQsIGxpbmUgYnJlYWtzIHdpbGwgYmUgYXV0b21hdGljYWxseSBpbnNlcnRlZCBpbiB0aGUgbGFzdCB3aGl0ZXNwYWNlLlxuICAgICAqIERpc2FibGUgYnkgc2V0dGluZyB2YWx1ZSB0byAwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IGxpbmUgaGVpZ2h0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRyeWluZyB0byB1c2UgdGhlIHRvdGFsIGhlaWdodCBvZiB0aGUgVGV4dCwgaWU6IHdoZW4gdHJ5aW5nIHRvIHZlcnRpY2FsbHkgYWxpZ24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkaXJ0eSBzdGF0ZSBvZiB0aGlzIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy51cGRhdGVUZXh0KCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5CaXRtYXBUZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5Db250YWluZXIucHJvdG90eXBlKTtcbkJpdG1hcFRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQml0bWFwVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gQml0bWFwVGV4dDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQml0bWFwVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGludCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0aW50OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQudGludDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQudGludCA9ICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlID49IDApID8gdmFsdWUgOiAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFsaWdubWVudCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbGVmdCdcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBhbGlnbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250LmFsaWduO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC5hbGlnbiA9IHZhbHVlIHx8ICdsZWZ0JztcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZvbnQgZGVzY3JpcHRvciBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0ZvbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgZm9udDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcgJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9mb250Lm5hbWUgPSB2YWx1ZS5sZW5ndGggPT09IDEgPyB2YWx1ZVswXSA6IHZhbHVlLnNsaWNlKDEpLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB2YWx1ZS5sZW5ndGggPj0gMiA/IHBhcnNlSW50KHZhbHVlWzBdLCAxMCkgOiBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV0uc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5zaXplID0gdHlwZW9mIHZhbHVlLnNpemUgPT09ICdudW1iZXInID8gdmFsdWUuc2l6ZSA6IHBhcnNlSW50KHZhbHVlLnNpemUsIDEwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGV4dCBhbmQgdXBkYXRlcyBpdCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkYXRhID0gQml0bWFwVGV4dC5mb250c1t0aGlzLl9mb250Lm5hbWVdO1xuICAgIHZhciBwb3MgPSBuZXcgY29yZS5Qb2ludCgpO1xuICAgIHZhciBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgIHZhciBjaGFycyA9IFtdO1xuICAgIHZhciBsYXN0TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbGluZVdpZHRocyA9IFtdO1xuICAgIHZhciBsaW5lID0gMDtcbiAgICB2YXIgc2NhbGUgPSB0aGlzLl9mb250LnNpemUgLyBkYXRhLnNpemU7XG4gICAgdmFyIGxhc3RTcGFjZSA9IC0xO1xuICAgIHZhciBtYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0Lmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gdGhpcy50ZXh0LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGxhc3RTcGFjZSA9IC8oXFxzKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSA/IGkgOiBsYXN0U3BhY2U7XG5cbiAgICAgICAgaWYgKC8oPzpcXHJcXG58XFxyfFxcbikvLnRlc3QodGhpcy50ZXh0LmNoYXJBdChpKSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXN0U3BhY2UgIT09IC0xICYmIHRoaXMubWF4V2lkdGggPiAwICYmIHBvcy54ICogc2NhbGUgPiB0aGlzLm1heFdpZHRoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKGNoYXJzLCBsYXN0U3BhY2UsIGkgLSBsYXN0U3BhY2UpO1xuICAgICAgICAgICAgaSA9IGxhc3RTcGFjZTtcbiAgICAgICAgICAgIGxhc3RTcGFjZSA9IC0xO1xuXG4gICAgICAgICAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbGluZSsrO1xuXG4gICAgICAgICAgICBwb3MueCA9IDA7XG4gICAgICAgICAgICBwb3MueSArPSBkYXRhLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hhckRhdGEgPSBkYXRhLmNoYXJzW2NoYXJDb2RlXTtcblxuICAgICAgICBpZiAoIWNoYXJEYXRhKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmV2Q2hhckNvZGUgJiYgY2hhckRhdGEua2VybmluZ1twcmV2Q2hhckNvZGVdKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb3MueCArPSBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV07XG4gICAgICAgIH1cblxuICAgICAgICBjaGFycy5wdXNoKHt0ZXh0dXJlOmNoYXJEYXRhLnRleHR1cmUsIGxpbmU6IGxpbmUsIGNoYXJDb2RlOiBjaGFyQ29kZSwgcG9zaXRpb246IG5ldyBjb3JlLlBvaW50KHBvcy54ICsgY2hhckRhdGEueE9mZnNldCwgcG9zLnkgKyBjaGFyRGF0YS55T2Zmc2V0KX0pO1xuICAgICAgICBsYXN0TGluZVdpZHRoID0gcG9zLnggKyAoY2hhckRhdGEudGV4dHVyZS53aWR0aCArIGNoYXJEYXRhLnhPZmZzZXQpO1xuICAgICAgICBwb3MueCArPSBjaGFyRGF0YS54QWR2YW5jZTtcbiAgICAgICAgbWF4TGluZUhlaWdodCA9IE1hdGgubWF4KG1heExpbmVIZWlnaHQsIChjaGFyRGF0YS55T2Zmc2V0ICsgY2hhckRhdGEudGV4dHVyZS5oZWlnaHQpKTtcbiAgICAgICAgcHJldkNoYXJDb2RlID0gY2hhckNvZGU7XG4gICAgfVxuXG4gICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG5cbiAgICB2YXIgbGluZUFsaWduT2Zmc2V0cyA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8PSBsaW5lOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYWxpZ25PZmZzZXQgPSAwO1xuXG4gICAgICAgIGlmICh0aGlzLl9mb250LmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbGlnbk9mZnNldCA9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5fZm9udC5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpbmVBbGlnbk9mZnNldHMucHVzaChhbGlnbk9mZnNldCk7XG4gICAgfVxuXG4gICAgdmFyIGxlbkNoYXJzID0gY2hhcnMubGVuZ3RoO1xuICAgIHZhciB0aW50ID0gdGhpcy50aW50O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbkNoYXJzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYyA9IHRoaXMuX2dseXBoc1tpXTsgLy8gZ2V0IHRoZSBuZXh0IGdseXBoIHNwcml0ZVxuXG4gICAgICAgIGlmIChjKVxuICAgICAgICB7XG4gICAgICAgICAgICBjLnRleHR1cmUgPSBjaGFyc1tpXS50ZXh0dXJlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgYyA9IG5ldyBjb3JlLlNwcml0ZShjaGFyc1tpXS50ZXh0dXJlKTtcbiAgICAgICAgICAgIHRoaXMuX2dseXBocy5wdXNoKGMpO1xuICAgICAgICB9XG5cbiAgICAgICAgYy5wb3NpdGlvbi54ID0gKGNoYXJzW2ldLnBvc2l0aW9uLnggKyBsaW5lQWxpZ25PZmZzZXRzW2NoYXJzW2ldLmxpbmVdKSAqIHNjYWxlO1xuICAgICAgICBjLnBvc2l0aW9uLnkgPSBjaGFyc1tpXS5wb3NpdGlvbi55ICogc2NhbGU7XG4gICAgICAgIGMuc2NhbGUueCA9IGMuc2NhbGUueSA9IHNjYWxlO1xuICAgICAgICBjLnRpbnQgPSB0aW50O1xuXG4gICAgICAgIGlmICghYy5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoYyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZW1vdmUgdW5uZWNlc3NhcnkgY2hpbGRyZW4uXG4gICAgZm9yIChpID0gbGVuQ2hhcnM7IGkgPCB0aGlzLl9nbHlwaHMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKHRoaXMuX2dseXBoc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0V2lkdGggPSBtYXhMaW5lV2lkdGggKiBzY2FsZTtcbiAgICB0aGlzLnRleHRIZWlnaHQgPSAocG9zLnkgKyBkYXRhLmxpbmVIZWlnaHQpICogc2NhbGU7XG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gbWF4TGluZUhlaWdodCAqIHNjYWxlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb2YgdGhpcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGV4dCBiZWZvcmUgY2FsbGluZyBwYXJlbnQncyBnZXRMb2NhbEJvdW5kc1xuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5cbkJpdG1hcFRleHQucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICByZXR1cm4gY29yZS5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzLmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59O1xuXG5CaXRtYXBUZXh0LmZvbnRzID0ge307XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIE1vdmllQ2xpcCBpcyBhIHNpbXBsZSB3YXkgdG8gZGlzcGxheSBhbiBhbmltYXRpb24gZGVwaWN0ZWQgYnkgYSBsaXN0IG9mIHRleHR1cmVzLlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgYWxpZW5JbWFnZXMgPSBbXCJpbWFnZV9zZXF1ZW5jZV8wMS5wbmdcIixcImltYWdlX3NlcXVlbmNlXzAyLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDMucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wNC5wbmdcIl07XG4gKiB2YXIgdGV4dHVyZUFycmF5ID0gW107XG4gKlxuICogZm9yICh2YXIgaT0wOyBpIDwgNDsgaSsrKVxuICoge1xuICogICAgICB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoYWxpZW5JbWFnZXNbaV0pO1xuICogICAgICB0ZXh0dXJlQXJyYXkucHVzaCh0ZXh0dXJlKTtcbiAqIH07XG4gKlxuICogdmFyIG1jID0gbmV3IFBJWEkuTW92aWVDbGlwKHRleHR1cmVBcnJheSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0dXJlcyB7UElYSS5UZXh0dXJlW118T2JqZWN0W119IGFuIGFycmF5IG9mIHtAbGluayBQSVhJLlRleHR1cmV9IG9yIGZyYW1lIG9iamVjdHMgdGhhdCBtYWtlIHVwIHRoZSBhbmltYXRpb25cbiAqIEBwYXJhbSB0ZXh0dXJlc1tdLnRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHtAbGluayBQSVhJLlRleHR1cmV9IG9mIHRoZSBmcmFtZVxuICogQHBhcmFtIHRleHR1cmVzW10udGltZSB7bnVtYmVyfSB0aGUgZHVyYXRpb24gb2YgdGhlIGZyYW1lIGluIG1zXG4gKi9cbmZ1bmN0aW9uIE1vdmllQ2xpcCh0ZXh0dXJlcylcbntcbiAgICBjb3JlLlNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmVzWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlID8gdGV4dHVyZXNbMF0gOiB0ZXh0dXJlc1swXS50ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kdXJhdGlvbnMgPSBudWxsO1xuXG4gICAgdGhpcy50ZXh0dXJlcyA9IHRleHR1cmVzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNwZWVkIHRoYXQgdGhlIE1vdmllQ2xpcCB3aWxsIHBsYXkgYXQuIEhpZ2hlciBpcyBmYXN0ZXIsIGxvd2VyIGlzIHNsb3dlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmFuaW1hdGlvblNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBtb3ZpZSBjbGlwIHJlcGVhdHMgYWZ0ZXIgcGxheWluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMubG9vcCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gYSBNb3ZpZUNsaXAgZmluaXNoZXMgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICovXG4gICAgdGhpcy5vbkNvbXBsZXRlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEVsYXBzZWQgdGltZSBzaW5jZSBhbmltYXRpb24gaGFzIGJlZW4gc3RhcnRlZCwgdXNlZCBpbnRlcm5hbGx5IHRvIGRpc3BsYXkgY3VycmVudCB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIE1vdmllQ2xpcCBpcyBjdXJyZW50bHkgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1vdmllQ2xpcC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5Nb3ZpZUNsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTW92aWVDbGlwO1xubW9kdWxlLmV4cG9ydHMgPSBNb3ZpZUNsaXA7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1vdmllQ2xpcC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiB0b3RhbEZyYW1lcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIGZyYW1lcyBpbiB0aGUgTW92aWVDbGlwLiBUaGlzIGlzIHRoZSBzYW1lIGFzIG51bWJlciBvZiB0ZXh0dXJlc1xuICAgICAqIGFzc2lnbmVkIHRvIHRoZSBNb3ZpZUNsaXAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdG90YWxGcmFtZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIHRleHR1cmVzIHVzZWQgZm9yIHRoaXMgTW92aWVDbGlwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqXG4gICAgICovXG4gICAgdGV4dHVyZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZih2YWx1ZVswXSBpbnN0YW5jZW9mIGNvcmUuVGV4dHVyZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcy5wdXNoKHZhbHVlW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMucHVzaCh2YWx1ZVtpXS50aW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgKiBUaGUgTW92aWVDbGlwcyBjdXJyZW50IGZyYW1lIGluZGV4XG4gICAgKlxuICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAqIEByZWFkb25seVxuICAgICovXG4gICAgY3VycmVudEZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRGcmFtZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpICUgdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRGcmFtZSA8IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY3VycmVudEZyYW1lICs9IHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RnJhbWU7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKipcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYoIXRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogUGxheXMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZih0aGlzLnBsYXlpbmcpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5aW5nID0gdHJ1ZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZ29lcyB0byBhIHNwZWNpZmljIGZyYW1lXG4gKlxuICogQHBhcmFtIGZyYW1lTnVtYmVyIHtudW1iZXJ9IGZyYW1lIGluZGV4IHRvIHN0b3AgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kU3RvcCA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLnN0b3AoKTtcblxuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbdGhpcy5jdXJyZW50RnJhbWVdO1xufTtcblxuLyoqXG4gKiBHb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWUgYW5kIGJlZ2lucyBwbGF5aW5nIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RhcnQgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kUGxheSA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IGZyYW1lTnVtYmVyO1xuXG4gICAgdGhpcy5wbGF5KCk7XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKiBAcHJpdmF0ZVxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWQgPSB0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2R1cmF0aW9ucyAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIHZhciBsYWcgPSB0aGlzLl9jdXJyZW50VGltZSAlIDEgKiB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuXG4gICAgICAgIGxhZyArPSBlbGFwc2VkIC8gNjAgKiAxMDAwO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPCAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZS0tO1xuICAgICAgICAgICAgbGFnICs9IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2lnbiA9IE1hdGguc2lnbih0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lKTtcbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgPSBNYXRoLmZsb29yKHRoaXMuX2N1cnJlbnRUaW1lKTtcblxuICAgICAgICB3aGlsZSAobGFnID49IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhZyAtPSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdICogc2lnbjtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IHNpZ247XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBsYWcgLyB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBlbGFwc2VkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jdXJyZW50VGltZSA8IDAgJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AoMCk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5fY3VycmVudFRpbWUgPj0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoICYmICF0aGlzLmxvb3ApXG4gICAge1xuICAgICAgICB0aGlzLmdvdG9BbmRTdG9wKHRoaXMuX3RleHR1cmVzLmxlbmd0aCAtIDEpO1xuXG4gICAgICAgIGlmICh0aGlzLm9uQ29tcGxldGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuXG59O1xuXG4vKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZGVzdHJveXMgaXRcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICggKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuICAgIGNvcmUuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIEEgc2hvcnQgaGFuZCB3YXkgb2YgY3JlYXRpbmcgYSBtb3ZpZWNsaXAgZnJvbSBhbiBhcnJheSBvZiBmcmFtZSBpZHNcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVzIHtzdHJpbmdbXX0gdGhlIGFycmF5IG9mIGZyYW1lcyBpZHMgdGhlIG1vdmllY2xpcCB3aWxsIHVzZSBhcyBpdHMgdGV4dHVyZSBmcmFtZXNcbiAqL1xuTW92aWVDbGlwLmZyb21GcmFtZXMgPSBmdW5jdGlvbiAoZnJhbWVzKVxue1xuICAgIHZhciB0ZXh0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0ZXh0dXJlcy5wdXNoKG5ldyBjb3JlLlRleHR1cmUuZnJvbUZyYW1lKGZyYW1lc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW92aWVDbGlwKHRleHR1cmVzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGltYWdlIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgaW1hZ2UgdXJscyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUltYWdlcyA9IGZ1bmN0aW9uIChpbWFnZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTsiLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICAvLyBhIHNwcml0ZSB1c2UgZGZvciByZW5kZXJpbmcgdGV4dHVyZXMuLlxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlcicpO1xuXG4vKipcbiAqIEEgdGlsaW5nIHNwcml0ZSBpcyBhIGZhc3Qgd2F5IG9mIHJlbmRlcmluZyBhIHRpbGluZyBpbWFnZVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmUge1RleHR1cmV9IHRoZSB0ZXh0dXJlIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFRpbGluZ1Nwcml0ZSh0ZXh0dXJlLCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGluZyBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVTY2FsZSA9IG5ldyBjb3JlLlBvaW50KDEsMSk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgcG9zaXRpb24gb2YgdGhlIGltYWdlIHRoYXQgaXMgYmVpbmcgdGlsZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBuZXcgY29yZS5Qb2ludCgwLDApO1xuXG4gICAgLy8vLy8gcHJpdmF0ZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHdpdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gd2lkdGggfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0IHx8IDEwMDtcblxuICAgIC8qKlxuICAgICAqIEFuIGludGVybmFsIFdlYkdMIFVWIGNhY2hlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlVXZzfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdXZzID0gbmV3IGNvcmUuVGV4dHVyZVV2cygpO1xuXG4gICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IG51bGw7XG5cbiAgICAvL1RPRE8gbW92ZS4uXG4gICAgdGhpcy5zaGFkZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcihcblxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1VHJhbnNmb3JtOycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJyAgIGNvb3JkIC09IHVUcmFuc2Zvcm0ueHk7JyxcbiAgICAgICAgJyAgIGNvb3JkIC89IHVUcmFuc2Zvcm0uenc7JyxcbiAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBjb29yZDsnLFxuXG4gICAgICAgICcgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpOycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgIFtcbiAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdUZyYW1lOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzIgdVBpeGVsU2l6ZTsnLFxuXG4gICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IG1vZCh2VGV4dHVyZUNvb3JkLCB1RnJhbWUuencpOycsXG4gICAgICAgICcgICBjb29yZCA9IGNsYW1wKGNvb3JkLCB1UGl4ZWxTaXplLCB1RnJhbWUuencgLSB1UGl4ZWxTaXplKTsnLFxuICAgICAgICAnICAgY29vcmQgKz0gdUZyYW1lLnh5OycsXG5cbiAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9ICB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdUZyYW1lOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVRyYW5zZm9ybTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLDAsMSwxXSB9LFxuICAgICAgICAgICAgICAgIHVQaXhlbFNpemUgOiB7IHR5cGUgOiAnMmZ2JywgdmFsdWU6IFsxLCAxXX1cbiAgICAgICAgICAgIH1cbiAgICAgICk7XG59XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsaW5nU3ByaXRlO1xubW9kdWxlLmV4cG9ydHMgPSBUaWxpbmdTcHJpdGU7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsaW5nU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRpbGluZ1Nwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybjtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICAvLyB0d2VhayBvdXIgdGV4dHVyZSB0ZW1wb3JhcmlseS4uXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUgfHwgIXRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGVtcFV2cyA9IHRleHR1cmUuX3V2cyxcbiAgICAgICAgdGVtcFdpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIHRlbXBIZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQsXG4gICAgICAgIHR3ID0gdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCxcbiAgICAgICAgdGggPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRoaXMuX3V2cztcbiAgICB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51UGl4ZWxTaXplLnZhbHVlWzBdID0gMS4wL3R3O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMV0gPSAxLjAvdGg7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMF0gPSB0ZW1wVXZzLngwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVsxXSA9IHRlbXBVdnMueTA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzJdID0gdGVtcFV2cy54MSAtIHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzNdID0gdGVtcFV2cy55MiAtIHRlbXBVdnMueTA7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzBdID0gKHRoaXMudGlsZVBvc2l0aW9uLnggJSAodGVtcFdpZHRoICogdGhpcy50aWxlU2NhbGUueCkpIC8gdGhpcy5fd2lkdGg7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsxXSA9ICh0aGlzLnRpbGVQb3NpdGlvbi55ICUgKHRlbXBIZWlnaHQgKiB0aGlzLnRpbGVTY2FsZS55KSkgLyB0aGlzLl9oZWlnaHQ7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsyXSA9ICggdHcgLyB0aGlzLl93aWR0aCApICogdGhpcy50aWxlU2NhbGUueDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzNdID0gKCB0aCAvIHRoaXMuX2hlaWdodCApICogdGhpcy50aWxlU2NhbGUueTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIodGhpcyk7XG5cbiAgICB0ZXh0dXJlLl91dnMgPSB0ZW1wVXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGVtcFdpZHRoO1xuICAgIHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRlbXBIZWlnaHQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBhIHJlZmVyZW5jZSB0byB0aGUgY2FudmFzIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0LFxuICAgICAgICB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgYmFzZVRleHR1cmUgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBtb2RYID0gKHRoaXMudGlsZVBvc2l0aW9uLnggLyB0aGlzLnRpbGVTY2FsZS54KSAlIHRleHR1cmUuX2ZyYW1lLndpZHRoLFxuICAgICAgICBtb2RZID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgLyB0aGlzLnRpbGVTY2FsZS55KSAlIHRleHR1cmUuX2ZyYW1lLmhlaWdodDtcblxuICAgIC8vIGNyZWF0ZSBhIG5pY2Ugc2hpbnkgcGF0dGVybiFcbiAgICAvLyBUT0RPIHRoaXMgbmVlZHMgdG8gYmUgcmVmcmVzaGVkIGlmIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgaWYoIXRoaXMuX2NhbnZhc1BhdHRlcm4pXG4gICAge1xuICAgICAgICAvLyBjdXQgYW4gb2JqZWN0IGZyb20gYSBzcHJpdGVzaGVldC4uXG4gICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IGNvcmUuQ2FudmFzQnVmZmVyKHRleHR1cmUuX2ZyYW1lLndpZHRoLCB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQpO1xuXG4gICAgICAgIC8vIFRpbnQgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgICAgaWYgKHRoaXMudGludCAhPT0gMHhGRkZGRkYpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlZFRpbnQgIT09IHRoaXMudGludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUgPSBDYW52YXNUaW50ZXIuZ2V0VGludGVkVGV4dHVyZSh0aGlzLCB0aGlzLnRpbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZSh0aGlzLnRpbnRlZFRleHR1cmUsIDAsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZShiYXNlVGV4dHVyZS5zb3VyY2UsIC10ZXh0dXJlLl9mcmFtZS54LCAtdGV4dHVyZS5fZnJhbWUueSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IHRlbXBDYW52YXMuY29udGV4dC5jcmVhdGVQYXR0ZXJuKCB0ZW1wQ2FudmFzLmNhbnZhcywgJ3JlcGVhdCcgKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgY29udGV4dCBzdGF0ZS4uXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb24pO1xuXG4gICAgLy8gVE9ETyAtIHRoaXMgc2hvdWxkIGJlIHJvbGxlZCBpbnRvIHRoZSBzZXRUcmFuc2Zvcm0gYWJvdmUuLlxuICAgIGNvbnRleHQuc2NhbGUodGhpcy50aWxlU2NhbGUueCx0aGlzLnRpbGVTY2FsZS55KTtcblxuICAgIGNvbnRleHQudHJhbnNsYXRlKG1vZFggKyAodGhpcy5hbmNob3IueCAqIC10aGlzLl93aWR0aCApLFxuICAgICAgICAgICAgICAgICAgICAgIG1vZFkgKyAodGhpcy5hbmNob3IueSAqIC10aGlzLl9oZWlnaHQpKTtcblxuICAgIC8vIGNoZWNrIGJsZW5kIG1vZGVcbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyBmaWxsIHRoZSBwYXR0ZXJuIVxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fY2FudmFzUGF0dGVybjtcbiAgICBjb250ZXh0LmZpbGxSZWN0KC1tb2RYLFxuICAgICAgICAgICAgICAgICAgICAgLW1vZFksXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl93aWR0aCAvIHRoaXMudGlsZVNjYWxlLngsXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWlnaHQgLyB0aGlzLnRpbGVTY2FsZS55KTtcblxuXG4gICAgLy9UT0RPIC0gcHJldHR5IHN1cmUgdGhpcyBjYW4gYmUgZGVsZXRlZC4uLlxuICAgIC8vY29udGV4dC50cmFuc2xhdGUoLXRoaXMudGlsZVBvc2l0aW9uLnggKyAodGhpcy5hbmNob3IueCAqIHRoaXMuX3dpZHRoKSwgLXRoaXMudGlsZVBvc2l0aW9uLnkgKyAodGhpcy5hbmNob3IueSAqIHRoaXMuX2hlaWdodCkpO1xuICAgIC8vY29udGV4dC5zY2FsZSgxIC8gdGhpcy50aWxlU2NhbGUueCwgMSAvIHRoaXMudGlsZVNjYWxlLnkpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBzcHJpdGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xuXG4gICAgdmFyIHcwID0gd2lkdGggKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICB2YXIgdzEgPSB3aWR0aCAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgdmFyIGgwID0gaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgdmFyIGgxID0gaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG5cbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgdmFyIHgxID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTIgPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHg0ID0gIGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciBtaW5YLFxuICAgICAgICBtYXhYLFxuICAgICAgICBtaW5ZLFxuICAgICAgICBtYXhZO1xuXG4gICAgbWluWCA9IHgxO1xuICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgbWluWSA9IHkxO1xuICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgbWF4WCA9IHgxO1xuICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgbWF4WSA9IHkxO1xuICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG5cbiAgICByZXR1cm4gYm91bmRzO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byBjaGVja1xuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKlxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsZVNjYWxlID0gbnVsbDtcbiAgICB0aGlzLl90aWxlU2NhbGVPZmZzZXQgPSBudWxsO1xuICAgIHRoaXMudGlsZVBvc2l0aW9uID0gbnVsbDtcblxuICAgIHRoaXMuX3V2cyA9IG51bGw7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSB0aWxpbmcgc3ByaXRlIHRoYXQgd2lsbCB1c2UgYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICovXG5UaWxpbmdTcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQsd2lkdGgsaGVpZ2h0KVxue1xuICAgIHZhciB0ZXh0dXJlID0gY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgJyArIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKHRleHR1cmUsd2lkdGgsaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBBIG5ldyBUaWxpbmdTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgd2lkdGgsIGhlaWdodCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRpbGluZ1Nwcml0ZShjb3JlLlRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpLHdpZHRoLGhlaWdodCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgRGlzcGxheU9iamVjdCA9IGNvcmUuRGlzcGxheU9iamVjdCxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gbnVsbDtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbEhpdFRlc3QgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsRGVzdHJveSA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVkU3ByaXRlID0gbnVsbDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGlzcGxheU9iamVjdC5wcm90b3R5cGUsIHtcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgeW91IHdhbnQgdGhpcyBkaXNwbGF5IG9iamVjdCB0byBiZSBjYWNoZWQgYXMgYSBiaXRtYXAuXG4gICAgICogVGhpcyBiYXNpY2FsbHkgdGFrZXMgYSBzbmFwIHNob3Qgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IGFzIGl0IGlzIGF0IHRoYXQgbW9tZW50LiBJdCBjYW4gcHJvdmlkZSBhIHBlcmZvcm1hbmNlIGJlbmVmaXQgZm9yIGNvbXBsZXggc3RhdGljIGRpc3BsYXlPYmplY3RzLlxuICAgICAqIFRvIHJlbW92ZSBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ2ZhbHNlJ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGNhY2hlQXNCaXRtYXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVBc0JpdG1hcDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NhY2hlQXNCaXRtYXAgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSB0aGlzLnJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gdGhpcy5yZW5kZXJDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMudXBkYXRlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzID0gdGhpcy5nZXRCb3VuZHM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbERlc3Ryb3kgPSB0aGlzLmRlc3Ryb3k7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQgPSB0aGlzLmNvbnRhaW5zUG9pbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSB0aGlzLl9jYWNoZUFzQml0bWFwRGVzdHJveTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXN0cm95Q2FjaGVkRGlzcGxheU9iamVjdCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXM7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRCb3VuZHMgPSB0aGlzLl9vcmlnaW5hbEdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX29yaWdpbmFsRGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fb3JpZ2luYWxDb250YWluc1BvaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBXZWJHTFxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gdGhlIFdlYkdMIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZFdlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENhY2hlZERpc3BsYXlPYmplY3QoIHJlbmRlcmVyICk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIoIHRoaXMuX2NhY2hlZFNwcml0ZSApO1xufTtcblxuLyoqXG4qIFByZXBhcmVzIHRoZSBXZWJHTCByZW5kZXJlciB0byBjYWNoZSB0aGUgc3ByaXRlXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGZpcnN0IHdlIGZsdXNoIGFueXRoaW5nIGxlZnQgaW4gdGhlIHJlbmRlcmVyIChvdGhlcndpc2UgaXQgd291bGQgZ2V0IHJlbmRlcmVkIHRvIHRoZSBjYWNoZWQgdGV4dHVyZSlcbiAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbiAgICAvL3RoaXMuZmlsdGVycz0gW107XG4gICAgLy8gbmV4dCB3ZSBmaW5kIHRoZSBkaW1lbnNpb25zIG9mIHRoZSB1bnRyYW5zZm9ybWVkIG9iamVjdFxuICAgIC8vIHRoaXMgZnVuY3Rpb24gYWxzbyBjYWxscyB1cGRhdGV0cmFuc2Zvcm0gb24gYWxsIGl0cyBjaGlsZHJlbiBhcyBwYXJ0IG9mIHRoZSBtZWFzdXJpbmcuIFRoaXMgbWVhbnMgd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIHRyYW5zZm9ybSBhZ2FpbiBpbiB0aGlzIGZ1bmN0aW9uXG4gICAgLy8gVE9ETyBwYXNzIGFuIG9iamVjdCB0byBjbG9uZSB0b28/IHNhdmVzIGhhdmluZyB0byBjcmVhdGUgYSBuZXcgb25lIGVhY2ggdGltZSFcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmNsb25lKCk7XG5cbiAgICAvLyBhZGQgc29tZSBwYWRkaW5nIVxuICAgIGlmKHRoaXMuX2ZpbHRlcnMpXG4gICAge1xuICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuX2ZpbHRlcnNbMF0ucGFkZGluZztcbiAgICAgICAgYm91bmRzLnggLT0gcGFkZGluZztcbiAgICAgICAgYm91bmRzLnkgLT0gcGFkZGluZztcblxuICAgICAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG4gICAgfVxuXG4gICAgLy8gZm9yIG5vdyB3ZSBjYWNoZSB0aGUgY3VycmVudCByZW5kZXJUYXJnZXQgdGhhdCB0aGUgd2ViR0wgcmVuZGVyZXIgaXMgY3VycmVudGx5IHVzaW5nLlxuICAgIC8vIHRoaXMgY291bGQgYmUgbW9yZSBlbGVnZW50Li5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldDtcbiAgICAvLyBXZSBhbHNvIHN0b3JlIHRoZSBmaWx0ZXIgc3RhY2sgLSBJIHdpbGwgZGVmaW5pdGVseSBsb29rIHRvIGNoYW5nZSBob3cgdGhpcyB3b3JrcyBhIGxpdHRsZSBsYXRlciBkb3duIHRoZSBsaW5lLlxuICAgIHZhciBzdGFjayA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2s7XG5cbiAgICAvLyB0aGlzIHJlbmRlclRleHR1cmUgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBjYWNoZWQgRGlzcGxheU9iamVjdFxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG5cblxuICAgIC8vIHNldCBhbGwgcHJvcGVydGllcyB0byB0aGVyZSBvcmlnaW5hbCBzbyB3ZSBjYW4gcmVuZGVyIHRvIGEgdGV4dHVyZVxuICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoY2FjaGVkUmVuZGVyVGFyZ2V0KTtcbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmZpbHRlclN0YWNrID0gc3RhY2s7XG5cbiAgICB0aGlzLnJlbmRlcldlYkdMICAgICA9IHRoaXMuX3JlbmRlckNhY2hlZFdlYkdMO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICAgICAgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgdHJhbnNmb3JtIG9mIHRoZSBjYWNoZWQgc3ByaXRlIHRvIGF2b2lkIHRoZSBuYXN0eSBmbGlja2VyLi5cbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgLy8gbWFwIHRoZSBoaXQgdGVzdC4uXG4gICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fY2FjaGVkU3ByaXRlLmNvbnRhaW5zUG9pbnQuYmluZCh0aGlzLl9jYWNoZWRTcHJpdGUpO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgc3ByaXRlIHdpdGggY2FudmFzXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gdGhlIENhbnZhcyByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9yZW5kZXJDYWNoZWRDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdENhbnZhcyggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLnJlbmRlckNhbnZhcyhyZW5kZXJlcik7XG59O1xuXG4vL1RPRE8gdGhpcyBjYW4gYmUgdGhlIHNhbWUgYXMgdGhlIHdlYkdMIHZlcmlzb24uLiB3aWxsIG5lZWQgdG8gZG8gYSBsaXR0bGUgdHdlYWtpbmcgZmlyc3QgdGhvdWdoLi5cbi8qKlxuKiBQcmVwYXJlcyB0aGUgQ2FudmFzIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvL2dldCBib3VuZHMgYWN0dWFsbHkgdHJhbnNmb3JtcyB0aGUgb2JqZWN0IGZvciB1cyBhbHJlYWR5IVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIG0sIHRydWUpO1xuXG4gICAgLy8gbm93IHJlc3RvcmUgdGhlIHN0YXRlIGJlIHNldHRpbmcgdGhlIG5ldyBwcm9wZXJ0aWVzXG4gICAgcmVuZGVyZXIuY29udGV4dCA9IGNhY2hlZFJlbmRlclRhcmdldDtcblxuICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fcmVuZGVyQ2FjaGVkQ2FudmFzO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICA9IHRoaXMuX2dldENhY2hlZEJvdW5kcztcblxuXG4gICAgLy8gY3JlYXRlIG91ciBjYWNoZWQgc3ByaXRlXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IGNvcmUuU3ByaXRlKHJlbmRlclRleHR1cmUpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogQ2FsY3VsYXRlcyB0aGUgYm91bmRzIG9mIHRoZSBjYWNoZWQgc3ByaXRlXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2dldENhY2hlZEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLl9jYWNoZWRTcHJpdGUuZ2V0Qm91bmRzKCk7XG59O1xuXG4vKipcbiogRGVzdHJveXMgdGhlIGNhY2hlZCBzcHJpdGUuXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX3RleHR1cmUuZGVzdHJveSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59O1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcERlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSgpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSBpbnN0YW5jZSBuYW1lIG9mIHRoZSBvYmplY3QuXG4gKlxuICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAqIEBtZW1iZXIge3N0cmluZ31cbiAqL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5uYW1lID0gbnVsbDtcblxuLyoqXG4qIFJldHVybnMgdGhlIGRpc3BsYXkgb2JqZWN0IGluIHRoZSBjb250YWluZXJcbipcbiogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuKiBAcGFyYW0gbmFtZSB7c3RyaW5nfSBpbnN0YW5jZSBuYW1lXG4qIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiovXG5jb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWUgPSBmdW5jdGlvbiAobmFtZSlcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbltpXS5uYW1lID09PSBuYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdFxuKlxuKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuKiBAcGFyYW0gcG9pbnQge1BvaW50fSB0aGUgcG9pbnQgdG8gd3JpdGUgdGhlIGdsb2JhbCB2YWx1ZSB0by4gSWYgbnVsbCBhIG5ldyBwb2ludCB3aWxsIGJlIHJldHVybmVkXG4qIEByZXR1cm4ge1BvaW50fVxuKi9cbmNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0R2xvYmFsUG9zaXRpb24gPSBmdW5jdGlvbiAocG9pbnQpXG57XG4gICAgcG9pbnQgPSBwb2ludCB8fCBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgaWYodGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICBwb2ludC54ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMud29ybGRUcmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHBvaW50LnggPSB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIHBvaW50LnkgPSB0aGlzLnBvc2l0aW9uLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxucmVxdWlyZSgnLi9jYWNoZUFzQml0bWFwJyk7XG5yZXF1aXJlKCcuL2dldENoaWxkQnlOYW1lJyk7XG5yZXF1aXJlKCcuL2dldEdsb2JhbFBvc2l0aW9uJyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmV4dHJhc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNb3ZpZUNsaXA6ICAgICAgcmVxdWlyZSgnLi9Nb3ZpZUNsaXAnKSxcbiAgICBUaWxpbmdTcHJpdGU6ICAgcmVxdWlyZSgnLi9UaWxpbmdTcHJpdGUnKSxcbiAgICBCaXRtYXBUZXh0OiAgICAgcmVxdWlyZSgnLi9CaXRtYXBUZXh0Jylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGUgWSBpcyBmbGlwcGVkIGluIHRoaXMgc2hhZGVyIGZvciBzb21lIHJlYXNvbi5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgc2hhZGVyIDogaHR0cHM6Ly93d3cuc2hhZGVydG95LmNvbS92aWV3L2xzc0dEaiBieSBAbW92QVgxM2hcbiAqL1xuXG4vKipcbiAqIEFuIEFTQ0lJIGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQXNjaWlGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gZmxvYXQgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IGNoYXJhY3RlcihmbG9hdCBuLCB2ZWMyIHApXFxue1xcbiAgICBwID0gZmxvb3IocCp2ZWMyKDQuMCwgLTQuMCkgKyAyLjUpO1xcbiAgICBpZiAoY2xhbXAocC54LCAwLjAsIDQuMCkgPT0gcC54ICYmIGNsYW1wKHAueSwgMC4wLCA0LjApID09IHAueSlcXG4gICAge1xcbiAgICAgICAgaWYgKGludChtb2Qobi9leHAyKHAueCArIDUuMCpwLnkpLCAyLjApKSA9PSAxKSByZXR1cm4gMS4wO1xcbiAgICB9XFxuICAgIHJldHVybiAwLjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5O1xcblxcbiAgICB2ZWMzIGNvbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgZmxvb3IoIHV2IC8gcGl4ZWxTaXplICkgKiBwaXhlbFNpemUgLyBkaW1lbnNpb25zLnh5KS5yZ2I7XFxuXFxuICAgIGZsb2F0IGdyYXkgPSAoY29sLnIgKyBjb2wuZyArIGNvbC5iKSAvIDMuMDtcXG5cXG4gICAgZmxvYXQgbiA9ICA2NTUzNi4wOyAgICAgICAgICAgICAvLyAuXFxuICAgIGlmIChncmF5ID4gMC4yKSBuID0gNjU2MDAuMDsgICAgLy8gOlxcbiAgICBpZiAoZ3JheSA+IDAuMykgbiA9IDMzMjc3Mi4wOyAgIC8vICpcXG4gICAgaWYgKGdyYXkgPiAwLjQpIG4gPSAxNTI1NTA4Ni4wOyAvLyBvXFxuICAgIGlmIChncmF5ID4gMC41KSBuID0gMjMzODUxNjQuMDsgLy8gJlxcbiAgICBpZiAoZ3JheSA+IDAuNikgbiA9IDE1MjUyMDE0LjA7IC8vIDhcXG4gICAgaWYgKGdyYXkgPiAwLjcpIG4gPSAxMzE5OTQ1Mi4wOyAvLyBAXFxuICAgIGlmIChncmF5ID4gMC44KSBuID0gMTE1MTI4MTAuMDsgLy8gI1xcblxcbiAgICB2ZWMyIHAgPSBtb2QoIHV2IC8gKCBwaXhlbFNpemUgKiAwLjUgKSwgMi4wKSAtIHZlYzIoMS4wKTtcXG4gICAgY29sID0gY29sICogY2hhcmFjdGVyKG4sIHApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbCwgMS4wKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiA4IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkFzY2lpRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQXNjaWlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXNjaWlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFzY2lpRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBc2NpaUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGl4ZWwgc2l6ZSB1c2VkIGJ5IHRoZSBmaWx0ZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Bc2NpaUZpbHRlciNcbiAgICAgKi9cbiAgICBzaXplOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsb29tRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsb29tRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlciA9IG5ldyBCbHVyWUZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcbn1cblxuQmxvb21GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbG9vbUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbG9vbUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxvb21GaWx0ZXI7XG5cbkJsb29tRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAvL1RPRE8gLSBjb3B5VGV4U3ViSW1hZ2UyRCBjb3VsZCBiZSB1c2VkIGhlcmU/XG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5TQ1JFRU4pO1xuXG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsb29tRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cblxuLyoqXG4gKiBUaGUgQmx1ckRpckZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0b3dhcmQgYSBkaXJlY3Rpb24gdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpclhcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJZXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJEaXJGaWx0ZXIoZGlyWCwgZGlyWSlcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gZmxvYXQgZGlyWDtcXG51bmlmb3JtIGZsb2F0IGRpclk7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbM107XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWSApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApICogMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pICogMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pICogMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSAqIDAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgZGlyWDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogZGlyWCB8fCAwIH0sXG4gICAgICAgICAgICBkaXJZOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJZIHx8IDAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWCBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJYID0gZGlyWCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWSBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJZID0gZGlyWSB8fCAwO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJEaXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJEaXJGaWx0ZXI7XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcikge1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZiAodGhpcy5wYXNzZXMgPT09IDEpIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCByZW5kZXJUYXJnZXQsIGNsZWFyKTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMjsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL3RoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvICh0aGlzLnBhc3NlcysoaSoyKSkgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCByZW5kZXJUYXJnZXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IHZhbHVlICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBkaXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyWDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZGlyWC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJZO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJZLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWUZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBCbHVyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG59XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJGaWx0ZXI7XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHBhc3Nlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5ibHVyWEZpbHRlci5wYXNzZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcyA9IHRoaXMuYmx1cllGaWx0ZXIucGFzc2VzID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1clhGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJYRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAxMiAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwNCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuXFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1clhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1clhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJYRmlsdGVyO1xuXG5CbHVyWEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1clhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJYRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gIE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJZRmlsdGVyIGFwcGxpZXMgYSBob3Jpem9udGFsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAxMiAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDEyICogc3RyZW5ndGgpO1xcblxcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJZRmlsdGVyO1xuXG5CbHVyWUZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gTWF0aC5hYnModGhpcy5zdHJlbmd0aCkgLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIFNtYXJ0IEJsdXIgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTbWFydEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgKiBwZXJjZW50KTtcXG4gICAgICAgIHNhbXBsZS5yZ2IgKj0gc2FtcGxlLmE7XFxuICAgICAgICBjb2xvciArPSBzYW1wbGUgKiB3ZWlnaHQ7XFxuICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgLyB0b3RhbDtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAvPSBnbF9GcmFnQ29sb3IuYSArIDAuMDAwMDE7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgZGVsdGE6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC4xLCB5OiAwLjAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU21hcnRCbHVyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTbWFydEJsdXJGaWx0ZXI7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA1eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIGBgYGpzXG4gKiAgdmFyIGNvbG9yTWF0cml4ID0gbmV3IFBJWEkuQ29sb3JNYXRyaXhGaWx0ZXIoKTtcbiAqICBjb250YWluZXIuZmlsdGVycyA9IFtjb2xvck1hdHJpeF07XG4gKiAgY29sb3JNYXRyaXguY29udHJhc3QoMik7XG4gKiBgYGBcbiAqIEBhdXRob3IgQ2zDqW1lbnQgQ2hlbmViYXVsdCA8Y2xlbWVudEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ29sb3JNYXRyaXhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgbVsyNV07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcblxcbiAgICB2ZWM0IGMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IuciA9IChtWzBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzJdICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IG1bNF07XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5nID0gKG1bNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bN10gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gbVs5XTtcXG5cXG4gICAgIGdsX0ZyYWdDb2xvci5iID0gKG1bMTBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzExXSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IG1bMTRdO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmEgPSAobVsxNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTZdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gbVsxOV07XFxuXFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICcxZnYnLCB2YWx1ZTogW1xuICAgICAgICAgICAgICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvck1hdHJpeEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JNYXRyaXhGaWx0ZXI7XG5cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGN1cnJlbnQgbWF0cml4IGFuZCBzZXQgdGhlIG5ldyBvbmVcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IGlmIHRydWUsIGN1cnJlbnQgbWF0cml4IGFuZCBtYXRyaXggYXJlIG11bHRpcGxpZWQuIElmIGZhbHNlLCBqdXN0IHNldCB0aGUgY3VycmVudCBtYXRyaXggd2l0aCBAcGFyYW0gbWF0cml4XG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fbG9hZE1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgsIG11bHRpcGx5KVxue1xuICAgIG11bHRpcGx5ID0gISFtdWx0aXBseTtcblxuICAgIHZhciBuZXdNYXRyaXggPSBtYXRyaXg7XG5cbiAgICBpZiAobXVsdGlwbHkpIHtcbiAgICAgICAgdGhpcy5fbXVsdGlwbHkobmV3TWF0cml4LCB0aGlzLnVuaWZvcm1zLm0udmFsdWUsIG1hdHJpeCk7XG4gICAgICAgIG5ld01hdHJpeCA9IHRoaXMuX2NvbG9yTWF0cml4KG5ld01hdHJpeCk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgbWF0cml4XG4gICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gbmV3TWF0cml4O1xufTtcblxuLyoqXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQ1J3NcbiAqXG4gKiBAcGFyYW0gb3V0IHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0gYSB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIGIge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyBvdXQge251bWJlcltdfSAobWF0IDV4NClcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpXG57XG5cbiAgICAvLyBSZWQgQ2hhbm5lbFxuICAgIG91dFswXSA9IChhWzBdICogYlswXSkgKyAoYVsxXSAqIGJbNV0pICsgKGFbMl0gKiBiWzEwXSkgKyAoYVszXSAqIGJbMTVdKTtcbiAgICBvdXRbMV0gPSAoYVswXSAqIGJbMV0pICsgKGFbMV0gKiBiWzZdKSArIChhWzJdICogYlsxMV0pICsgKGFbM10gKiBiWzE2XSk7XG4gICAgb3V0WzJdID0gKGFbMF0gKiBiWzJdKSArIChhWzFdICogYls3XSkgKyAoYVsyXSAqIGJbMTJdKSArIChhWzNdICogYlsxN10pO1xuICAgIG91dFszXSA9IChhWzBdICogYlszXSkgKyAoYVsxXSAqIGJbOF0pICsgKGFbMl0gKiBiWzEzXSkgKyAoYVszXSAqIGJbMThdKTtcbiAgICBvdXRbNF0gPSAoYVswXSAqIGJbNF0pICsgKGFbMV0gKiBiWzldKSArIChhWzJdICogYlsxNF0pICsgKGFbM10gKiBiWzE5XSk7XG5cbiAgICAvLyBHcmVlbiBDaGFubmVsXG4gICAgb3V0WzVdID0gKGFbNV0gKiBiWzBdKSArIChhWzZdICogYls1XSkgKyAoYVs3XSAqIGJbMTBdKSArIChhWzhdICogYlsxNV0pO1xuICAgIG91dFs2XSA9IChhWzVdICogYlsxXSkgKyAoYVs2XSAqIGJbNl0pICsgKGFbN10gKiBiWzExXSkgKyAoYVs4XSAqIGJbMTZdKTtcbiAgICBvdXRbN10gPSAoYVs1XSAqIGJbMl0pICsgKGFbNl0gKiBiWzddKSArIChhWzddICogYlsxMl0pICsgKGFbOF0gKiBiWzE3XSk7XG4gICAgb3V0WzhdID0gKGFbNV0gKiBiWzNdKSArIChhWzZdICogYls4XSkgKyAoYVs3XSAqIGJbMTNdKSArIChhWzhdICogYlsxOF0pO1xuICAgIG91dFs5XSA9IChhWzVdICogYls0XSkgKyAoYVs2XSAqIGJbOV0pICsgKGFbN10gKiBiWzE0XSkgKyAoYVs4XSAqIGJbMTldKTtcblxuICAgIC8vIEJsdWUgQ2hhbm5lbFxuICAgIG91dFsxMF0gPSAoYVsxMF0gKiBiWzBdKSArIChhWzExXSAqIGJbNV0pICsgKGFbMTJdICogYlsxMF0pICsgKGFbMTNdICogYlsxNV0pO1xuICAgIG91dFsxMV0gPSAoYVsxMF0gKiBiWzFdKSArIChhWzExXSAqIGJbNl0pICsgKGFbMTJdICogYlsxMV0pICsgKGFbMTNdICogYlsxNl0pO1xuICAgIG91dFsxMl0gPSAoYVsxMF0gKiBiWzJdKSArIChhWzExXSAqIGJbN10pICsgKGFbMTJdICogYlsxMl0pICsgKGFbMTNdICogYlsxN10pO1xuICAgIG91dFsxM10gPSAoYVsxMF0gKiBiWzNdKSArIChhWzExXSAqIGJbOF0pICsgKGFbMTJdICogYlsxM10pICsgKGFbMTNdICogYlsxOF0pO1xuICAgIG91dFsxNF0gPSAoYVsxMF0gKiBiWzRdKSArIChhWzExXSAqIGJbOV0pICsgKGFbMTJdICogYlsxNF0pICsgKGFbMTNdICogYlsxOV0pO1xuXG4gICAgLy8gQWxwaGEgQ2hhbm5lbFxuICAgIG91dFsxNV0gPSAoYVsxNV0gKiBiWzBdKSArIChhWzE2XSAqIGJbNV0pICsgKGFbMTddICogYlsxMF0pICsgKGFbMThdICogYlsxNV0pO1xuICAgIG91dFsxNl0gPSAoYVsxNV0gKiBiWzFdKSArIChhWzE2XSAqIGJbNl0pICsgKGFbMTddICogYlsxMV0pICsgKGFbMThdICogYlsxNl0pO1xuICAgIG91dFsxN10gPSAoYVsxNV0gKiBiWzJdKSArIChhWzE2XSAqIGJbN10pICsgKGFbMTddICogYlsxMl0pICsgKGFbMThdICogYlsxN10pO1xuICAgIG91dFsxOF0gPSAoYVsxNV0gKiBiWzNdKSArIChhWzE2XSAqIGJbOF0pICsgKGFbMTddICogYlsxM10pICsgKGFbMThdICogYlsxOF0pO1xuICAgIG91dFsxOV0gPSAoYVsxNV0gKiBiWzRdKSArIChhWzE2XSAqIGJbOV0pICsgKGFbMTddICogYlsxNF0pICsgKGFbMThdICogYlsxOV0pO1xuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEByZXR1cm4gbSB7bnVtYmVyW119IChtYXQgNXg0KSB3aXRoIGFsbCB2YWx1ZXMgYmV0d2VlbiAwLTFcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9jb2xvck1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgLy8gQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICAgIHZhciBtID0gbmV3IEZsb2F0MzJBcnJheShtYXRyaXgpO1xuICAgIG1bNF0gLz0gMjU1O1xuICAgIG1bOV0gLz0gMjU1O1xuICAgIG1bMTRdIC89IDI1NTtcbiAgICBtWzE5XSAvPSAyNTU7XG5cbiAgICByZXR1cm4gbTtcbn07XG5cbi8qKlxuICogQWRqdXN0cyBicmlnaHRuZXNzXG4gKlxuICogQHBhcmFtIGIge251bWJlcn0gdmFsdWUgb2YgdGhlIGJyaWd0aG5lc3MgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJpZ2h0bmVzcyA9IGZ1bmN0aW9uIChiLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBiLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCBiLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCBiLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgbWF0cmljZXMgaW4gZ3JleSBzY2FsZXNcbiAqXG4gKiBAcGFyYW0gc2NhbGUge251bWJlcn0gdmFsdWUgb2YgdGhlIGdyZXkgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlID0gZnVuY3Rpb24gKHNjYWxlLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuLy9BbWVyaWNhbml6ZWQgYWxpYXNcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmF5c2NhbGUgPSBDb2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlO1xuXG4vKipcbiAqIFNldCB0aGUgYmxhY2sgYW5kIHdoaXRlIG1hdHJpY2VcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ibGFja0FuZFdoaXRlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBodWUgcHJvcGVydHkgb2YgdGhlIGNvbG9yXG4gKlxuICogQHBhcmFtIHJvdGF0aW9uIHtudW1iZXJ9IGluIGRlZ3JlZXNcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5odWUgPSBmdW5jdGlvbiAocm90YXRpb24sIG11bHRpcGx5KVxue1xuICAgIHJvdGF0aW9uID0gKHJvdGF0aW9uIHx8IDApIC8gMTgwICogTWF0aC5QSTtcbiAgICB2YXIgY29zID0gTWF0aC5jb3Mocm90YXRpb24pLFxuICAgICAgICBzaW4gPSBNYXRoLnNpbihyb3RhdGlvbik7XG5cbiAgICAvLyBsdW1pbmFuY2VSZWQsIGx1bWluYW5jZUdyZWVuLCBsdW1pbmFuY2VCbHVlXG4gICAgdmFyIGx1bVIgPSAwLjIxMywgLy8gb3IgMC4zMDg2XG4gICAgICAgIGx1bUcgPSAwLjcxNSwgLy8gb3IgMC42MDk0XG4gICAgICAgIGx1bUIgPSAwLjA3MjsgLy8gb3IgMC4wODIwXG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBsdW1SICsgY29zICogKDEgLSBsdW1SKSArIHNpbiAqICgtbHVtUiksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKC1sdW1HKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoMSAtIGx1bUIpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgwLjE0MyksIGx1bUcgKyBjb3MgKiAoMSAtIGx1bUcpICsgc2luICogKDAuMTQwKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoLTAuMjgzKSwgMCwgMCxcbiAgICAgICAgbHVtUiArIGNvcyAqICgtbHVtUikgKyBzaW4gKiAoLSgxIC0gbHVtUikpLCBsdW1HICsgY29zICogKC1sdW1HKSArIHNpbiAqIChsdW1HKSwgbHVtQiArIGNvcyAqICgxIC0gbHVtQikgKyBzaW4gKiAobHVtQiksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLyoqXG4gKiBTZXQgdGhlIGNvbnRyYXN0IG1hdHJpeCwgaW5jcmVhc2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBkYXJrIGFuZCBicmlnaHRcbiAqIEluY3JlYXNlIGNvbnRyYXN0IDogc2hhZG93cyBkYXJrZXIgYW5kIGhpZ2hsaWdodHMgYnJpZ2h0ZXJcbiAqIERlY3JlYXNlIGNvbnRyYXN0IDogYnJpbmcgdGhlIHNoYWRvd3MgdXAgYW5kIHRoZSBoaWdobGlnaHRzIGRvd25cbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBjb250cmFzdFxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbnRyYXN0ID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHYgPSAoYW1vdW50IHx8IDApICsgMTtcbiAgICB2YXIgbyA9IC0xMjggKiAodiAtIDEpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgdiwgMCwgMCwgMCwgbyxcbiAgICAgICAgMCwgdiwgMCwgMCwgbyxcbiAgICAgICAgMCwgMCwgdiwgMCwgbyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHNhdHVyYXRpb24gbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGNvbG9yc1xuICogSW5jcmVhc2Ugc2F0dXJhdGlvbiA6IGluY3JlYXNlIGNvbnRyYXN0LCBicmlnaHRuZXNzLCBhbmQgc2hhcnBuZXNzXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNhdHVyYXRlID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHggPSAoYW1vdW50IHx8IDApICogMiAvIDMgKyAxO1xuICAgIHZhciB5ID0gKCh4IC0gMSkgKiAtMC41KTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHgsIHksIHksIDAsIDAsXG4gICAgICAgIHksIHgsIHksIDAsIDAsXG4gICAgICAgIHksIHksIHgsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRGVzYXR1cmF0ZSBpbWFnZSAocmVtb3ZlIGNvbG9yKVxuICpcbiAqIENhbGwgdGhlIHNhdHVyYXRlIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmRlc2F0dXJhdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICB0aGlzLnNhdHVyYXRlKC0xKTtcbn07XG5cbi8qKlxuICogTmVnYXRpdmUgaW1hZ2UgKGludmVyc2Ugb2YgY2xhc3NpYyByZ2IgbWF0cml4KVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uZWdhdGl2ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAxLCAxLCAwLCAwLFxuICAgICAgICAxLCAwLCAxLCAwLCAwLFxuICAgICAgICAxLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNlcGlhIGltYWdlXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNlcGlhID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMzkzLCAwLjc2ODk5OTksIDAuMTg4OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMzQ5LCAwLjY4NTk5OTksIDAuMTY3OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMjcyLCAwLjUzMzk5OTksIDAuMTMwOTk5OTksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgbW90aW9uIHBpY3R1cmUgcHJvY2VzcyBpbnZlbnRlZCBpbiAxOTE2ICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50ZWNobmljb2xvciA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjkxMjUyNzc4OTE0NTYwODMsIC0wLjg1NDUzNDQ5NzY5NTE2NDUsIC0wLjA5MTU1NTA4NDgyNzU1NTg1LCAwLCAxMS43OTM2MDM0MzQzNzczMzcsXG4gICAgICAgIC0wLjMwODc4MzMzODU5MjgwOTcsIDEuNzY1ODkwODU1NTQ1ODQyOCwgLTAuMTA2MDE3NDMwNzQ3MjIyNDUsIDAsIC03MC4zNTIwNTE2MTQ2MTM5OCxcbiAgICAgICAgLTAuMjMxMTAzMzc3NTQ4NjE2LCAtMC43NTAxODk5MTk3NDQwMjEyLCAxLjg0NzU5NzgxNjEwODE4OSwgMCwgMzAuOTUwOTQwODY5NDkxMTM4LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFBvbGFyb2lkIGZpbHRlclxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wb2xhcm9pZCA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjQzOCwgLTAuMDYyLCAtMC4wNjIsIDAsIDAsXG4gICAgICAgIC0wLjEyMiwgMS4zNzgsIC0wLjEyMiwgMCwgMCxcbiAgICAgICAgLTAuMDE2LCAtMC4wMTYsIDEuNDgzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEZpbHRlciB3aG8gdHJhbnNmb3JtcyA6IFJlZCAtPiBCbHVlIGFuZCBCbHVlIC0+IFJlZFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50b0JHUiA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIENvbG9yIHJldmVyc2FsIGZpbG0gaW50cm9kdWNlZCBieSBFYXN0bWFuIEtvZGFrIGluIDE5MzUuICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5rb2RhY2hyb21lID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuMTI4NTU4MjM5NjU5MzUyNSwgLTAuMzk2NzM4MjI4MzYwMTM0OCwgLTAuMDM5OTI1NTkxNzI5MjE3OTMsIDAsIDYzLjcyOTU4NzYyMTk2NTAyLFxuICAgICAgICAtMC4xNjQwNDMzOTk2MjI0NDYxNiwgMS4wODM1MjUxNTY2MjkxMzA0LCAtMC4wNTQ5ODgwNTExNTYzMzEzMiwgMCwgMjQuNzMyNDA3ODk2NzA2MjAzLFxuICAgICAgICAtMC4xNjc4NjAxMDcwNjE1NTc2MywgLTAuNTYwMzQxNjI3NzY5NTI0OCwgMS42MDE0ODUwNzYxOTY0OTQzLCAwLCAzNS42Mjk4MjgwNzQ2MDk0NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBCcm93biBkZWxpY2lvdXMgYnJvd25pIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJvd25pID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNTk5NzAyMzQ5ODE1OTcxNSwgMC4zNDU1MzI0MzA0ODM5MTI2MywgLTAuMjcwODI5ODY3NDUzODA0MiwgMCwgNDcuNDMxOTI4NTU2MDA4NzMsXG4gICAgICAgIC0wLjAzNzcwMzI0OTgzNzc4MzE1NywgMC44NjA5NTc3NTg3OTkyNjQxLCAwLjE1MDU5NTUyMzg4NDU5OTEzLCAwLCAtMzYuOTY4NDE0OTgzMTkxMjcsXG4gICAgICAgIDAuMjQxMTM2MzUxMjgxNTMzMzUsIC0wLjA3NDQxMDM3OTA4NDIyNDkyLCAwLjQ0OTcyMTgyMDY0ODc3MTUzLCAwLCAtNy41NjIwNzUyNzc1OTEyODMsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBWaW50YWdlIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudmludGFnZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjYyNzkzNDU2MzU2MDU5OTQsIDAuMzIwMjE4MzQyMDgxOTM2NywgLTAuMDM5NjU0MDgyMTEzMTI0NTMsIDAsIDkuNjUxMjg1ODM1Mjk0MTIzLFxuICAgICAgICAwLjAyNTc4Mzk3NzA0ODA4ODY4LCAwLjY0NDExODg2NDQzNzQ3NzEsIDAuMDMyNTkxMjc2MTYxNDkyOTQsIDAsIDcuNDYyODI5MTc2NDcwNTkxLFxuICAgICAgICAwLjA0NjYwNTU1NTY3ODI3MTksIC0wLjA4NTEyMzI5ODcyNDc4OTEsIDAuNTI0MTY0ODAxODcwMDQ2NSwgMCwgNS4xNTkxOTA1ODgyMzUyOTYsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBXZSBkb24ndCBrbm93IGV4YWN0bHkgd2hhdCBpdCBkb2VzLCBraW5kIG9mIGdyYWRpZW50IG1hcCwgYnV0IGZ1bm55IHRvIHBsYXkgd2l0aCFcbiAqXG4gKiBAcGFyYW0gZGVzYXR1cmF0aW9uIHtudW1iZXJ9XG4gKiBAcGFyYW0gdG9uZWQge251bWJlcn1cbiAqIEBwYXJhbSBsaWdodENvbG9yIHtzdHJpbmd9IChleGFtcGxlIDogXCIweEZGRTU4MFwiKVxuICogQHBhcmFtIGRhcmtDb2xvciB7c3RyaW5nfSAgKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbG9yVG9uZSA9IGZ1bmN0aW9uIChkZXNhdHVyYXRpb24sIHRvbmVkLCBsaWdodENvbG9yLCBkYXJrQ29sb3IsIG11bHRpcGx5KVxue1xuICAgIGRlc2F0dXJhdGlvbiA9IGRlc2F0dXJhdGlvbiB8fCAwLjI7XG4gICAgdG9uZWQgPSB0b25lZCB8fCAwLjE1O1xuICAgIGxpZ2h0Q29sb3IgPSBsaWdodENvbG9yIHx8IDB4RkZFNTgwO1xuICAgIGRhcmtDb2xvciA9IGRhcmtDb2xvciB8fCAweDMzODAwMDtcblxuICAgIHZhciBsUiA9ICgobGlnaHRDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEcgPSAoKGxpZ2h0Q29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEIgPSAobGlnaHRDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgdmFyIGRSID0gKChkYXJrQ29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGRHID0gKChkYXJrQ29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEIgPSAoZGFya0NvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjMsIDAuNTksIDAuMTEsIDAsIDAsXG4gICAgICAgIGxSLCBsRywgbEIsIGRlc2F0dXJhdGlvbiwgMCxcbiAgICAgICAgZFIsIGRHLCBkQiwgdG9uZWQsIDAsXG4gICAgICAgIGxSIC0gZFIsIGxHIC0gZEcsIGxCIC0gZEIsIDAsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBOaWdodCBlZmZlY3RcbiAqXG4gKiBAcGFyYW0gaW50ZW5zaXR5IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubmlnaHQgPSBmdW5jdGlvbiAoaW50ZW5zaXR5LCBtdWx0aXBseSlcbntcbiAgICBpbnRlbnNpdHkgPSBpbnRlbnNpdHkgfHwgMC4xO1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGludGVuc2l0eSAqICggLTIuMCksIC1pbnRlbnNpdHksIDAsIDAsIDAsXG4gICAgICAgIC1pbnRlbnNpdHksIDAsIGludGVuc2l0eSwgMCwgMCxcbiAgICAgICAgMCwgaW50ZW5zaXR5LCBpbnRlbnNpdHkgKiAyLjAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLypcbiAqIFByZWRhdG9yIGVmZmVjdFxuICpcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIGEgbmV3IGluZGVwZW50IG9uZVxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gaG93IG11Y2ggdGhlIHByZWRhdG9yIGZlZWxzIGhpcyBmdXR1cmUgdmljdGltXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucHJlZGF0b3IgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxMS4yMjQxMzA2MzA0OTMxNjQgKiBhbW91bnQsIC00Ljc5NDQ4Njk5OTUxMTcxOSAqIGFtb3VudCwgLTIuODc0NjExODU0NTUzMjIyNyAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC40MDM0MjQzODIyMDk3Nzc4MyAqIGFtb3VudCxcbiAgICAgICAgLTMuNjMzMDY5NzUzNjQ2ODUwNiAqIGFtb3VudCwgOS4xOTMxNTcxOTYwNDQ5MjIgKiBhbW91bnQsIC0yLjk1MTgxMDgzNjc5MTk5MiAqIGFtb3VudCwgMCAqIGFtb3VudCwgLTEuMzE2MTM1MDQ4ODY2MjcyICogYW1vdW50LFxuICAgICAgICAtMy4yMTg0MTk3OTAyNjc5NDQzICogYW1vdW50LCAtNC4yMzc1MDMwNTE3NTc4MTI1ICogYW1vdW50LCA3LjQ3NjQ0ODA1OTA4MjAzMSAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC44MDQ0NDU5MjIzNzQ3MjUzICogYW1vdW50LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogTFNEIGVmZmVjdFxuICpcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gSG93IGNyYXp5IGlzIHlvdXIgZWZmZWN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubHNkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDIsIC0wLjQsIDAuNSwgMCwgMCxcbiAgICAgICAgLTAuNSwgMiwgLTAuNCwgMCwgMCxcbiAgICAgICAgLTAuNCwgLTAuNSwgMywgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIHRoZSBkZWZhdWx0IG9uZVxuICpcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBmYWxzZSk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hdHJpeCBvZiB0aGUgY29sb3IgbWF0cml4IGZpbHRlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvck1hdHJpeEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCBbMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMF1cbiAgICAgKi9cbiAgICBtYXRyaXg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgbG93ZXJzIHRoZSBjb2xvciBkZXB0aCBvZiB5b3VyIGltYWdlIGJ5IHRoZSBnaXZlbiBhbW91bnQsIHByb2R1Y2luZyBhbiBpbWFnZSB3aXRoIGEgc21hbGxlciBwYWxldHRlLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvclN0ZXBGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc3RlcDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBjb2xvciA9IGZsb29yKGNvbG9yICogc3RlcCkgLyBzdGVwO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdGVwOiB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvclN0ZXBGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yU3RlcEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2Ygc3RlcHMgdG8gcmVkdWNlIHRoZSBwYWxldHRlIGJ5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29sb3JTdGVwRmlsdGVyI1xuICAgICAqL1xuICAgIHN0ZXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb252b2x1dGlvbkZpbHRlciBjbGFzcyBhcHBsaWVzIGEgbWF0cml4IGNvbnZvbHV0aW9uIGZpbHRlciBlZmZlY3QuXG4gKiBBIGNvbnZvbHV0aW9uIGNvbWJpbmVzIHBpeGVscyBpbiB0aGUgaW5wdXQgaW1hZ2Ugd2l0aCBuZWlnaGJvcmluZyBwaXhlbHMgdG8gcHJvZHVjZSBhIG5ldyBpbWFnZS5cbiAqIEEgd2lkZSB2YXJpZXR5IG9mIGltYWdlIGVmZmVjdHMgY2FuIGJlIGFjaGlldmVkIHRocm91Z2ggY29udm9sdXRpb25zLCBpbmNsdWRpbmcgYmx1cnJpbmcsIGVkZ2VcbiAqIGRldGVjdGlvbiwgc2hhcnBlbmluZywgZW1ib3NzaW5nLCBhbmQgYmV2ZWxpbmcuIFRoZSBtYXRyaXggc2hvdWxkIGJlIHNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBTZWUgaHR0cDovL2RvY3MuZ2ltcC5vcmcvZW4vcGx1Zy1pbi1jb252bWF0cml4Lmh0bWwgZm9yIG1vcmUgaW5mby5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSBBbiBhcnJheSBvZiB2YWx1ZXMgdXNlZCBmb3IgbWF0cml4IHRyYW5zZm9ybWF0aW9uLiBTcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFdpZHRoIG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqL1xuZnVuY3Rpb24gQ29udm9sdXRpb25GaWx0ZXIobWF0cml4LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgbWVkaXVtcCB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTtcXG51bmlmb3JtIGZsb2F0IG1hdHJpeFs5XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjNCBjMTEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgLSB0ZXhlbFNpemUpOyAvLyB0b3AgbGVmdFxcbiAgIHZlYzQgYzEyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55IC0gdGV4ZWxTaXplLnkpKTsgLy8gdG9wIGNlbnRlclxcbiAgIHZlYzQgYzEzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgcmlnaHRcXG5cXG4gICB2ZWM0IGMyMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCBsZWZ0XFxuICAgdmVjNCBjMjIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpOyAvLyBtaWQgY2VudGVyXFxuICAgdmVjNCBjMjMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSkpOyAvLyBtaWQgcmlnaHRcXG5cXG4gICB2ZWM0IGMzMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGxlZnRcXG4gICB2ZWM0IGMzMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLngsIHZUZXh0dXJlQ29vcmQueSArIHRleGVsU2l6ZS55KSk7IC8vIGJvdHRvbSBjZW50ZXJcXG4gICB2ZWM0IGMzMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIHRleGVsU2l6ZSk7IC8vIGJvdHRvbSByaWdodFxcblxcbiAgIGdsX0ZyYWdDb2xvciA9XFxuICAgICAgIGMxMSAqIG1hdHJpeFswXSArIGMxMiAqIG1hdHJpeFsxXSArIGMxMyAqIG1hdHJpeFsyXSArXFxuICAgICAgIGMyMSAqIG1hdHJpeFszXSArIGMyMiAqIG1hdHJpeFs0XSArIGMyMyAqIG1hdHJpeFs1XSArXFxuICAgICAgIGMzMSAqIG1hdHJpeFs2XSArIGMzMiAqIG1hdHJpeFs3XSArIGMzMyAqIG1hdHJpeFs4XTtcXG5cXG4gICBnbF9GcmFnQ29sb3IuYSA9IGMyMi5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hdHJpeDogICAgIHsgdHlwZTogJzFmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCkgfSxcbiAgICAgICAgICAgIHRleGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSAvIHdpZHRoLCB5OiAxIC8gaGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb252b2x1dGlvbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29udm9sdXRpb25GaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hdHJpeC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMS90aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueCA9IDEvdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS55ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQSBDcm9zcyBIYXRjaCBlZmZlY3QgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDcm9zc0hhdGNoRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGZsb2F0IGx1bSA9IGxlbmd0aCh0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQueHkpLnJnYik7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wLCAxLjAsIDEuMCwgMS4wKTtcXG5cXG4gICAgaWYgKGx1bSA8IDEuMDApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC43NSlcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjUwKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54ICsgZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuMylcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55IC0gNS4wLCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblwiXG4gICAgKTtcbn1cblxuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNyb3NzSGF0Y2hGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBEaXNwbGFjZW1lbnRGaWx0ZXIgY2xhc3MgdXNlcyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20gdGhlIHNwZWNpZmllZCB0ZXh0dXJlIChjYWxsZWQgdGhlIGRpc3BsYWNlbWVudCBtYXApIHRvIHBlcmZvcm0gYSBkaXNwbGFjZW1lbnQgb2YgYW4gb2JqZWN0LlxuICogWW91IGNhbiB1c2UgdGhpcyBmaWx0ZXIgdG8gYXBwbHkgYWxsIG1hbm9yIG9mIGNyYXp5IHdhcnBpbmcgZWZmZWN0c1xuICogQ3VycmVudGx5IHRoZSByIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB4IGFuZCB0aGUgZyBwcm9wZXJ0eSBvZiB0aGUgdGV4dHVyZSBpcyB1c2VkIHRvIG9mZnNldCB0aGUgeS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiAobWFrZSBzdXJlIGl0cyBhZGRlZCB0byB0aGUgc2NlbmUhKVxuICovXG5mdW5jdGlvbiBEaXNwbGFjZW1lbnRGaWx0ZXIoc3ByaXRlLCBzY2FsZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuICAgIHNwcml0ZS5yZW5kZXJhYmxlID0gZmFsc2U7XG5cbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2TWFwQ29vcmQgPSAoIG90aGVyTWF0cml4ICogdmVjMyggYVRleHR1cmVDb29yZCwgMS4wKSAgKS54eTtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMiBzY2FsZTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXBTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IG1hcCA9ICB0ZXh0dXJlMkQobWFwU2FtcGxlciwgdk1hcENvb3JkKTtcXG5cXG4gICBtYXAgLT0gMC41O1xcbiAgIG1hcC54eSAqPSBzY2FsZTtcXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgbWFwLngsIHZUZXh0dXJlQ29vcmQueSArIG1hcC55KSk7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtYXBTYW1wbGVyOiAgICAgeyB0eXBlOiAnc2FtcGxlcjJEJywgdmFsdWU6IHNwcml0ZS50ZXh0dXJlIH0sXG4gICAgICAgICAgICBvdGhlck1hdHJpeDogICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBtYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSkgfSxcbiAgICAgICAgICAgIHNjYWxlOiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG5cbiAgICBpZiAoc2NhbGUgPT09IG51bGwgfHwgc2NhbGUgPT09IHVuZGVmaW5lZClcbiAgICB7XG4gICAgICAgIHNjYWxlID0gMjA7XG4gICAgfVxuXG4gICAgdGhpcy5zY2FsZSA9IG5ldyBjb3JlLlBvaW50KHNjYWxlLCBzY2FsZSk7XG59XG5cbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGFjZW1lbnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERpc3BsYWNlbWVudEZpbHRlcjtcblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICBmaWx0ZXJNYW5hZ2VyLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeChpbnB1dC5mcmFtZSwgdGhpcy5tYXNrU3ByaXRlLCB0aGlzLm1hc2tNYXRyaXgpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5vdGhlck1hdHJpeC52YWx1ZSA9IHRoaXMubWFza01hdHJpeC50b0FycmF5KHRydWUpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueCA9IHRoaXMuc2NhbGUueCAqICgxL2lucHV0LmZyYW1lLndpZHRoKTtcbiAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlLnkgPSB0aGlzLnNjYWxlLnkgKiAoMS9pbnB1dC5mcmFtZS5oZWlnaHQpO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRGlzcGxhY2VtZW50RmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvZnVuL2RvdHNjcmVlbi5qc1xuICovXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIGRvdHNjcmVlbiBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgdG8gYmUgbWFkZSBvdXQgb2ZcbiAqIGJsYWNrIGFuZCB3aGl0ZSBoYWxmdG9uZSBkb3RzIGxpa2UgYW4gb2xkIHByaW50ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIERvdFNjcmVlbkZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XFxuXFxuZmxvYXQgcGF0dGVybigpXFxue1xcbiAgIGZsb2F0IHMgPSBzaW4oYW5nbGUpLCBjID0gY29zKGFuZ2xlKTtcXG4gICB2ZWMyIHRleCA9IHZUZXh0dXJlQ29vcmQgKiBkaW1lbnNpb25zLnh5O1xcbiAgIHZlYzIgcG9pbnQgPSB2ZWMyKFxcbiAgICAgICBjICogdGV4LnggLSBzICogdGV4LnksXFxuICAgICAgIHMgKiB0ZXgueCArIGMgKiB0ZXgueVxcbiAgICkgKiBzY2FsZTtcXG4gICByZXR1cm4gKHNpbihwb2ludC54KSAqIHNpbihwb2ludC55KSkgKiA0LjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGZsb2F0IGF2ZXJhZ2UgPSAoY29sb3IuciArIGNvbG9yLmcgKyBjb2xvci5iKSAvIDMuMDtcXG4gICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzMoYXZlcmFnZSAqIDEwLjAgLSA1LjAgKyBwYXR0ZXJuKCkpLCBjb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzY2FsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEb3RTY3JlZW5GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERvdFNjcmVlbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBzY2FsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSByYWRpdXMgb2YgdGhlIGVmZmVjdC5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Eb3RTY3JlZW5GaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllUaW50RmlsdGVyIGFwcGxpZXMgYSB2ZXJ0aWNhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1cllUaW50RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24rb2Zmc2V0KSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMyBjb2xvcjtcXG51bmlmb3JtIGZsb2F0IGFscGhhO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBzdW0gPSB2ZWM0KDAuMCk7XFxuXFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KCBjb2xvci5yZ2IgKiBzdW0uYSAqIGFscGhhLCBzdW0uYSAqIGFscGhhICk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgLyA1MTIgfSxcbiAgICAgICAgICAgIGNvbG9yOiB7IHR5cGU6ICdjJywgdmFsdWU6IFswLDAsMF19LFxuICAgICAgICAgICAgYWxwaGE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNyB9LFxuICAgICAgICAgICAgb2Zmc2V0OiB7IHR5cGU6ICcyZicsIHZhbHVlOls1LCA1XX0sXG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZToxfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJZVGludEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllUaW50RmlsdGVyO1xuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCBjbGVhcik7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJZVGludEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllUaW50RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZVGludEZpbHRlciA9IHJlcXVpcmUoJy4vQmx1cllUaW50RmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIERyb3BTaGFkb3dGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRHJvcFNoYWRvd0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyID0gbmV3IEJsdXJZVGludEZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIHRoaXMucGFkZGluZyA9IDMwO1xuXG4gICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgdGhpcy5fYW5nbGUgPSA0NSAqIE1hdGguUEkgLyAxODA7XG4gICAgdGhpcy5fZGlzdGFuY2UgPSAxMDtcbiAgICB0aGlzLmFscGhhID0gMC43NTtcbiAgICB0aGlzLmhpZGVPYmplY3QgPSBmYWxzZTtcbiAgICB0aGlzLmJsZW5kTW9kZSA9IGNvcmUuQkxFTkRfTU9ERVMuTVVMVElQTFk7XG59XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERyb3BTaGFkb3dGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERyb3BTaGFkb3dGaWx0ZXI7XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICBpZih0aGlzLl9kaXJ0eVBvc2l0aW9uKVxuICAgIHtcbiAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVswXSA9IE1hdGguc2luKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5vZmZzZXQudmFsdWVbMV0gPSBNYXRoLmNvcyh0aGlzLl9hbmdsZSkgKiB0aGlzLl9kaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKHRoaXMuYmxlbmRNb2RlKTtcblxuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZighdGhpcy5oaWRlT2JqZWN0KVxuICAgIHtcblxuICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuICAgIH1cblxuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNvbG9yIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgY29sb3I6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIGNvcmUudXRpbHMucmdiMmhleCggdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmNvbG9yLnZhbHVlID0gY29yZS51dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbHBoYSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFscGhhOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzdGFuY2Ugb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBkaXN0YW5jZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3RhbmNlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYW5nbGUgb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fYW5nbGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2FuZ2xlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZ3JleXNjYWxlcyB0aGUgcGFsZXR0ZSBvZiB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gR3JheUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGdyYXk7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peChnbF9GcmFnQ29sb3IucmdiLCB2ZWMzKDAuMjEyNipnbF9GcmFnQ29sb3IuciArIDAuNzE1MipnbF9GcmFnQ29sb3IuZyArIDAuMDcyMipnbF9GcmFnQ29sb3IuYiksIGdyYXkpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBncmF5OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkdyYXlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5HcmF5RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEdyYXlGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmF5LiAxIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGJsYWNrIGFuZCB3aGl0ZSwgMCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuR3JheUZpbHRlciNcbiAgICAgKi9cbiAgICBncmF5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBmaWx0ZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5maWx0ZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEFzY2lpRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9hc2NpaS9Bc2NpaUZpbHRlcicpLFxuICAgIEJsb29tRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibG9vbS9CbG9vbUZpbHRlcicpLFxuICAgIEJsdXJGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJGaWx0ZXInKSxcbiAgICBCbHVyWEZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJZRmlsdGVyJyksXG4gICAgQmx1ckRpckZpbHRlcjogICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckRpckZpbHRlcicpLFxuICAgIENvbG9yTWF0cml4RmlsdGVyOiAgcmVxdWlyZSgnLi9jb2xvci9Db2xvck1hdHJpeEZpbHRlcicpLFxuICAgIENvbG9yU3RlcEZpbHRlcjogICAgcmVxdWlyZSgnLi9jb2xvci9Db2xvclN0ZXBGaWx0ZXInKSxcbiAgICBDb252b2x1dGlvbkZpbHRlcjogIHJlcXVpcmUoJy4vY29udm9sdXRpb24vQ29udm9sdXRpb25GaWx0ZXInKSxcbiAgICBDcm9zc0hhdGNoRmlsdGVyOiAgIHJlcXVpcmUoJy4vY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyJyksXG4gICAgRGlzcGxhY2VtZW50RmlsdGVyOiByZXF1aXJlKCcuL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXInKSxcbiAgICBEb3RTY3JlZW5GaWx0ZXI6ICAgIHJlcXVpcmUoJy4vZG90L0RvdFNjcmVlbkZpbHRlcicpLFxuICAgIEdyYXlGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ncmF5L0dyYXlGaWx0ZXInKSxcbiAgICBEcm9wU2hhZG93RmlsdGVyOiAgIHJlcXVpcmUoJy4vZHJvcHNoYWRvdy9Ecm9wU2hhZG93RmlsdGVyJyksXG4gICAgSW52ZXJ0RmlsdGVyOiAgICAgICByZXF1aXJlKCcuL2ludmVydC9JbnZlcnRGaWx0ZXInKSxcbiAgICBOb2lzZUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vbm9pc2UvTm9pc2VGaWx0ZXInKSxcbiAgICBQaXhlbGF0ZUZpbHRlcjogICAgIHJlcXVpcmUoJy4vcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXInKSxcbiAgICBSR0JTcGxpdEZpbHRlcjogICAgIHJlcXVpcmUoJy4vcmdiL1JHQlNwbGl0RmlsdGVyJyksXG4gICAgU2hvY2t3YXZlRmlsdGVyOiAgICByZXF1aXJlKCcuL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXInKSxcbiAgICBTZXBpYUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vc2VwaWEvU2VwaWFGaWx0ZXInKSxcbiAgICBTbWFydEJsdXJGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vYmx1ci9TbWFydEJsdXJGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFhGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlcicpLFxuICAgIFR3aXN0RmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi90d2lzdC9Ud2lzdEZpbHRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBpbnZlcnRzIHlvdXIgRGlzcGxheSBPYmplY3RzIGNvbG9ycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gSW52ZXJ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIGZsb2F0IGludmVydDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoICh2ZWMzKDEpLWdsX0ZyYWdDb2xvci5yZ2IpICogZ2xfRnJhZ0NvbG9yLmEsIGdsX0ZyYWdDb2xvci5yZ2IsIDEuMCAtIGludmVydCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgaW52ZXJ0OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkludmVydEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkludmVydEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnZlcnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludmVydEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgaW52ZXJ0LiBgMWAgd2lsbCBmdWxseSBpbnZlcnQgdGhlIGNvbG9ycywgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5JbnZlcnRGaWx0ZXIjXG4gICAgICovXG4gICAgaW52ZXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuaW52ZXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYWRqdXN0L25vaXNlLmpzXG4gKi9cblxuLyoqXG4gKiBBIE5vaXNlIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIE5vaXNlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IG5vaXNlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IHJhbmQodmVjMiBjbylcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGNvLnh5LCB2ZWMyKDEyLjk4OTgsIDc4LjIzMykpKSAqIDQzNzU4LjU0NTMpO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGZsb2F0IGRpZmYgPSAocmFuZCh2VGV4dHVyZUNvb3JkKSAtIDAuNSkgKiBub2lzZTtcXG5cXG4gICAgY29sb3IuciArPSBkaWZmO1xcbiAgICBjb2xvci5nICs9IGRpZmY7XFxuICAgIGNvbG9yLmIgKz0gZGlmZjtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbm9pc2U6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Ob2lzZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbk5vaXNlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE5vaXNlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBOb2lzZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTm9pc2VGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGFtb3VudCBvZiBub2lzZSB0byBhcHBseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLk5vaXNlRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDAuNVxuICAgICAqL1xuICAgIG5vaXNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm5vaXNlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSBwaXhlbGF0ZSBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgJ2Jsb2NreScuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFBpeGVsYXRlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZlYzIgc2l6ZSA9IGRpbWVuc2lvbnMueHkgLyBwaXhlbFNpemU7XFxuXFxuICAgIHZlYzIgY29sb3IgPSBmbG9vciggKCB2VGV4dHVyZUNvb3JkICogc2l6ZSApICkgLyBzaXplICsgcGl4ZWxTaXplL2RpbWVuc2lvbnMueHkgKiAwLjU7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgY29sb3IpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsICB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICd2MicsICAgdmFsdWU6IHsgeDogMTAsIHk6IDEwIH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQaXhlbGF0ZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gUGl4ZWxhdGVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgYSBwb2ludCB0aGF0IGRlc2NyaWJlcyB0aGUgc2l6ZSBvZiB0aGUgYmxvY2tzLlxuICAgICAqIHggaXMgdGhlIHdpZHRoIG9mIHRoZSBibG9jayBhbmQgeSBpcyB0aGUgaGVpZ2h0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlBpeGVsYXRlRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBbiBSR0IgU3BsaXQgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBSR0JTcGxpdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSB2ZWMyIHJlZDtcXG51bmlmb3JtIHZlYzIgZ3JlZW47XFxudW5pZm9ybSB2ZWMyIGJsdWU7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvci5yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgcmVkL2RpbWVuc2lvbnMueHkpLnI7XFxuICAgZ2xfRnJhZ0NvbG9yLmcgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBncmVlbi9kaW1lbnNpb25zLnh5KS5nO1xcbiAgIGdsX0ZyYWdDb2xvci5iID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgYmx1ZS9kaW1lbnNpb25zLnh5KS5iO1xcbiAgIGdsX0ZyYWdDb2xvci5hID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKS5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZDogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGdyZWVuOiAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogLTIwLCB5OiAyMCB9IH0sXG4gICAgICAgICAgICBibHVlOiAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDIwLCB5OiAtMjAgfSB9LFxuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLCAwLCAwLCAwXSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5SR0JTcGxpdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJHQlNwbGl0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBSR0JTcGxpdEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogUmVkIGNoYW5uZWwgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIHJlZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJlZC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR3JlZW4gY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JlZW46IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JlZW4udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBCbHVlIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGFwcGxpZXMgYSBzZXBpYSBlZmZlY3QgdG8geW91ciBEaXNwbGF5IE9iamVjdHMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNlcGlhRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHNlcGlhO1xcblxcbmNvbnN0IG1hdDMgc2VwaWFNYXRyaXggPSBtYXQzKDAuMzU4OCwgMC43MDQ0LCAwLjEzNjgsIDAuMjk5MCwgMC41ODcwLCAwLjExNDAsIDAuMjM5MiwgMC40Njk2LCAwLjA5MTIpO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGdsX0ZyYWdDb2xvci5yZ2IgKiBzZXBpYU1hdHJpeCwgc2VwaWEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNlcGlhOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNlcGlhRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU2VwaWFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2VwaWFGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNlcGlhRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTZXBpYUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIHNlcGlhLiBgMWAgd2lsbCBhcHBseSB0aGUgZnVsbCBzZXBpYSBlZmZlY3QsIGFuZFxuICAgICAqIGAwYCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2VwaWFGaWx0ZXIjXG4gICAgICovXG4gICAgc2VwaWE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc2VwaWEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbG9yTWF0cml4RmlsdGVyIGNsYXNzIGxldHMgeW91IGFwcGx5IGEgNHg0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgUkdCQVxuICogY29sb3IgYW5kIGFscGhhIHZhbHVlcyBvZiBldmVyeSBwaXhlbCBvbiB5b3VyIGRpc3BsYXlPYmplY3QgdG8gcHJvZHVjZSBhIHJlc3VsdFxuICogd2l0aCBhIG5ldyBzZXQgb2YgUkdCQSBjb2xvciBhbmQgYWxwaGEgdmFsdWVzLiBJdCdzIHByZXR0eSBwb3dlcmZ1bCFcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2hvY2t3YXZlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIHZlYzIgY2VudGVyO1xcbnVuaWZvcm0gdmVjMyBwYXJhbXM7IC8vIDEwLjAsIDAuOCwgMC4xXFxudW5pZm9ybSBmbG9hdCB0aW1lO1xcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gdlRleHR1cmVDb29yZDtcXG4gICAgdmVjMiB0ZXhDb29yZCA9IHV2O1xcblxcbiAgICBmbG9hdCBkaXN0ID0gZGlzdGFuY2UodXYsIGNlbnRlcik7XFxuXFxuICAgIGlmICggKGRpc3QgPD0gKHRpbWUgKyBwYXJhbXMueikpICYmIChkaXN0ID49ICh0aW1lIC0gcGFyYW1zLnopKSApXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IGRpZmYgPSAoZGlzdCAtIHRpbWUpO1xcbiAgICAgICAgZmxvYXQgcG93RGlmZiA9IDEuMCAtIHBvdyhhYnMoZGlmZipwYXJhbXMueCksIHBhcmFtcy55KTtcXG5cXG4gICAgICAgIGZsb2F0IGRpZmZUaW1lID0gZGlmZiAgKiBwb3dEaWZmO1xcbiAgICAgICAgdmVjMiBkaWZmVVYgPSBub3JtYWxpemUodXYgLSBjZW50ZXIpO1xcbiAgICAgICAgdGV4Q29vcmQgPSB1diArIChkaWZmVVYgKiBkaWZmVGltZSk7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB0ZXhDb29yZCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgY2VudGVyOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfSxcbiAgICAgICAgICAgIHBhcmFtczogeyB0eXBlOiAndjMnLCB2YWx1ZTogeyB4OiAxMCwgeTogMC44LCB6OiAwLjEgfSB9LFxuICAgICAgICAgICAgdGltZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hvY2t3YXZlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaG9ja3dhdmVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjZW50ZXIgb2YgdGhlIHNob2Nrd2F2ZSBpbiBub3JtYWxpemVkIHNjcmVlbiBjb29yZHMuIFRoYXQgaXNcbiAgICAgKiAoMCwwKSBpcyB0aGUgdG9wLWxlZnQgYW5kICgxLDEpIGlzIHRoZSBib3R0b20gcmlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBudW1iZXI+fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIGNlbnRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmNlbnRlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBhcmFtcyBvZiB0aGUgc2hvY2t3YXZlLiBUaGVzZSBtb2RpZnkgdGhlIGxvb2sgYW5kIGJlaGF2aW9yIG9mXG4gICAgICogdGhlIHNob2Nrd2F2ZSBhcyBpdCByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgcGFyYW1zOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGFyYW1zLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZWxhcHNlZCB0aW1lIG9mIHRoZSBzaG9ja3dhdmUuIFRoaXMgY29udHJvbHMgdGhlIHNwZWVkIGF0IHdoaWNoXG4gICAgICogdGhlIHNob2Nrd2F2ZSByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICB0aW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0QXhpc0ZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0QXhpc0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBibHVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JhZGllbnRCbHVyO1xcbnVuaWZvcm0gdmVjMiBzdGFydDtcXG51bmlmb3JtIHZlYzIgZW5kO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG51bmlmb3JtIHZlYzIgdGV4U2l6ZTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG4gICAgdmVjMiBub3JtYWwgPSBub3JtYWxpemUodmVjMihzdGFydC55IC0gZW5kLnksIGVuZC54IC0gc3RhcnQueCkpO1xcbiAgICBmbG9hdCByYWRpdXMgPSBzbW9vdGhzdGVwKDAuMCwgMS4wLCBhYnMoZG90KHZUZXh0dXJlQ29vcmQgKiB0ZXhTaXplIC0gc3RhcnQsIG5vcm1hbCkpIC8gZ3JhZGllbnRCbHVyKSAqIGJsdXI7XFxuXFxuICAgIGZvciAoZmxvYXQgdCA9IC0zMC4wOyB0IDw9IDMwLjA7IHQrKylcXG4gICAge1xcbiAgICAgICAgZmxvYXQgcGVyY2VudCA9ICh0ICsgb2Zmc2V0IC0gMC41KSAvIDMwLjA7XFxuICAgICAgICBmbG9hdCB3ZWlnaHQgPSAxLjAgLSBhYnMocGVyY2VudCk7XFxuICAgICAgICB2ZWM0IHNhbXBsZSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGRlbHRhIC8gdGV4U2l6ZSAqIHBlcmNlbnQgKiByYWRpdXMpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBibHVyOiAgICAgICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMTAwIH0sXG4gICAgICAgICAgICBncmFkaWVudEJsdXI6ICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNjAwIH0sXG4gICAgICAgICAgICBzdGFydDogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLCAgICB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIH0gfSxcbiAgICAgICAgICAgIGVuZDogICAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDYwMCwgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZGVsdGE6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMzAsICAgeTogMzAgfSB9LFxuICAgICAgICAgICAgdGV4U2l6ZTogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogd2luZG93LmlubmVyV2lkdGgsIHk6IHdpbmRvdy5pbm5lckhlaWdodCB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG59XG5cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiB0aGUgWCBhbmQgWSBmaWx0ZXJzLCBkb2VzIG5vdGhpbmcgZm9yIHRoaXMgY2xhc3MuXG4gKlxuICovXG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gMDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSAwO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmFkaWVudEJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIHN0YXJ0IHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgZW5kOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdFlGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0IEZpbHRlci4gTWFuYWdlcyB0aGUgcGFzcyBvZiBib3RoIGEgVGlsdFNoaWZ0WEZpbHRlciBhbmQgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIgPSBuZXcgVGlsdFNoaWZ0WEZpbHRlcigpO1xuICAgIHRoaXMudGlsdFNoaWZ0WUZpbHRlciA9IG5ldyBUaWx0U2hpZnRZRmlsdGVyKCk7XG59XG5cblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEZpbHRlcjtcblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JhZGllbnQgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ncmFkaWVudEJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZ3JhZGllbnRCbHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFkgdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuc3RhcnQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBlbmQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5lbmQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZW5kID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBUaWx0U2hpZnRBeGlzRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRBeGlzRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdFhGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRpbHRTaGlmdEF4aXNGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0WEZpbHRlcigpXG57XG4gICAgVGlsdFNoaWZ0QXhpc0ZpbHRlci5jYWxsKHRoaXMpO1xufVxuXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRYRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRYRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKlxuICovXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGR4ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueCAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueDtcbiAgICB2YXIgZHkgPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS55IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS55O1xuICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IGR4IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeSAvIGQ7XG59O1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRZRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gLWR5IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeCAvIGQ7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHR3aXN0IGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0d2lzdGVkIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFR3aXN0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHJhZGl1cztcXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzIgY29vcmQgPSB2VGV4dHVyZUNvb3JkIC0gb2Zmc2V0O1xcbiAgIGZsb2F0IGRpc3QgPSBsZW5ndGgoY29vcmQpO1xcblxcbiAgIGlmIChkaXN0IDwgcmFkaXVzKVxcbiAgIHtcXG4gICAgICAgZmxvYXQgcmF0aW8gPSAocmFkaXVzIC0gZGlzdCkgLyByYWRpdXM7XFxuICAgICAgIGZsb2F0IGFuZ2xlTW9kID0gcmF0aW8gKiByYXRpbyAqIGFuZ2xlO1xcbiAgICAgICBmbG9hdCBzID0gc2luKGFuZ2xlTW9kKTtcXG4gICAgICAgZmxvYXQgYyA9IGNvcyhhbmdsZU1vZCk7XFxuICAgICAgIGNvb3JkID0gdmVjMihjb29yZC54ICogYyAtIGNvb3JkLnkgKiBzLCBjb29yZC54ICogcyArIGNvb3JkLnkgKiBjKTtcXG4gICB9XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCtvZmZzZXQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhZGl1czogICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9LFxuICAgICAgICAgICAgYW5nbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9LFxuICAgICAgICAgICAgb2Zmc2V0OiAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjUsIHk6IDAuNSB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblR3aXN0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVHdpc3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHdpc3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFR3aXN0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUd2lzdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IGRlc2NyaWJlcyB0aGUgdGhlIG9mZnNldCBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgb2Zmc2V0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHJhZGl1cyBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICByYWRpdXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5yYWRpdXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgYW5nbGUgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiLy8gcnVuIHRoZSBwb2x5ZmlsbHNcbnJlcXVpcmUoJy4vcG9seWZpbGwnKTtcblxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29yZScpO1xuXG4vLyBhZGQgY29yZSBwbHVnaW5zLlxuY29yZS5leHRyYXMgICAgICAgICA9IHJlcXVpcmUoJy4vZXh0cmFzJyk7XG5jb3JlLmZpbHRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5jb3JlLmludGVyYWN0aW9uICAgID0gcmVxdWlyZSgnLi9pbnRlcmFjdGlvbicpO1xuY29yZS5sb2FkZXJzICAgICAgICA9IHJlcXVpcmUoJy4vbG9hZGVycycpO1xuY29yZS5tZXNoICAgICAgICAgICA9IHJlcXVpcmUoJy4vbWVzaCcpO1xuY29yZS5hY2Nlc3NpYmlsaXR5ICA9IHJlcXVpcmUoJy4vYWNjZXNzaWJpbGl0eScpO1xuXG4vLyBleHBvcnQgYSBwcmVtYWRlIGxvYWRlciBpbnN0YW5jZVxuLyoqXG4gKiBBIHByZW1hZGUgaW5zdGFuY2Ugb2YgdGhlIGxvYWRlciB0aGF0IGNhbiBiZSB1c2VkIHRvIGxvYWRlciByZXNvdXJjZXMuXG4gKlxuICogQG5hbWUgbG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHByb3BlcnR5IHtQSVhJLmxvYWRlcnMuTG9hZGVyfVxuICovXG5jb3JlLmxvYWRlciA9IG5ldyBjb3JlLmxvYWRlcnMuTG9hZGVyKCk7XG5cbi8vIG1peGluIHRoZSBkZXByZWNhdGlvbiBmZWF0dXJlcy5cbk9iamVjdC5hc3NpZ24oY29yZSwgcmVxdWlyZSgnLi9kZXByZWNhdGlvbicpKTtcblxuLy8gQWx3YXlzIGV4cG9ydCBwaXhpIGdsb2JhbGx5LlxuZ2xvYmFsLlBJWEkgPSBjb3JlO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogSG9sZHMgYWxsIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gYW4gSW50ZXJhY3Rpb24gZXZlbnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uRGF0YSgpXG57XG4gICAgLyoqXG4gICAgICogVGhpcyBwb2ludCBzdG9yZXMgdGhlIGdsb2JhbCBjb29yZHMgb2Ygd2hlcmUgdGhlIHRvdWNoL21vdXNlIGV2ZW50IGhhcHBlbmVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuZ2xvYmFsID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgU3ByaXRlIHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TcHJpdGV9XG4gICAgICovXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBwYXNzZWQgdG8gYW4gZXZlbnQgaGFuZGxlciwgdGhpcyB3aWxsIGJlIHRoZSBvcmlnaW5hbCBET00gRXZlbnQgdGhhdCB3YXMgY2FwdHVyZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0V2ZW50fVxuICAgICAqL1xuICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IG51bGw7XG59XG5cbkludGVyYWN0aW9uRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbkRhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uRGF0YTtcblxuLyoqXG4gKiBUaGlzIHdpbGwgcmV0dXJuIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgc3BlY2lmaWVkIGRpc3BsYXlPYmplY3QgZm9yIHRoaXMgSW50ZXJhY3Rpb25EYXRhXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgbG9jYWwgY29vcmRzIG9mZlxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBwb2ludClcbiAqIEBwYXJhbSBbZ2xvYmFsUG9zXSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgY29udGFpbmluZyB5b3VyIGN1c3RvbSBnbG9iYWwgY29vcmRzLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgdXNlIHRoZSBjdXJyZW50IGdsb2JhbCBjb29yZHMpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBJbnRlcmFjdGlvbkRhdGEgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIERpc3BsYXlPYmplY3RcbiAqL1xuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5nZXRMb2NhbFBvc2l0aW9uID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHBvaW50LCBnbG9iYWxQb3MpXG57XG4gICAgcmV0dXJuIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKGdsb2JhbFBvcyB8fCB0aGlzLmdsb2JhbCwgcG9pbnQpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIEludGVyYWN0aW9uRGF0YSA9IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25EYXRhJyk7XG5cbi8vIE1peCBpbnRlcmFjdGl2ZVRhcmdldCBpbnRvIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGVcbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbik7XG5cbi8qKlxuICogVGhlIGludGVyYWN0aW9uIG1hbmFnZXIgZGVhbHMgd2l0aCBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzLiBBbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgaW50ZXJhY3RpdmVcbiAqIGlmIGl0cyBpbnRlcmFjdGl2ZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIHRydWVcbiAqIFRoaXMgbWFuYWdlciBhbHNvIHN1cHBvcnRzIG11bHRpdG91Y2guXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH1cbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQ9dHJ1ZV0ge2Jvb2xlYW59IFNob3VsZCB0aGUgbWFuYWdlciBhdXRvbWF0aWNhbGx5IHByZXZlbnQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMuXG4gKiBAcGFyYW0gW29wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3k9MTBdIHtudW1iZXJ9IEZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQuXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uTWFuYWdlcihyZW5kZXJlciwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGludGVyYWN0aW9uIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMgYXV0b21hdGljYWxseSBiZSBwcmV2ZW50ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdCA9IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdCA6IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBcyB0aGlzIGZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQgbW9yZSBvZnRlbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgPSBvcHRpb25zLmludGVyYWN0aW9uRnJlcXVlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vdXNlIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhfVxuICAgICAqL1xuICAgIHRoaXMubW91c2UgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCBkYXRhIG9iamVjdCB0byBoYW5kbGUgYWxsIHRoZSBldmVudCB0cmFja2luZy9kaXNwYXRjaGluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnREYXRhID0ge1xuICAgICAgICBzdG9wcGVkOiBmYWxzZSxcbiAgICAgICAgdGFyZ2V0OiBudWxsLFxuICAgICAgICB0eXBlOiBudWxsLFxuICAgICAgICBkYXRhOiB0aGlzLm1vdXNlLFxuICAgICAgICBzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGlueSBsaXR0bGUgaW50ZXJhY3RpdmVEYXRhIHBvb2wgIVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGFbXX1cbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBET00gZWxlbWVudCB0byBiaW5kIHRvLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTEVsZW1lbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIYXZlIGV2ZW50cyBiZWVuIGF0dGFjaGVkIHRvIHRoZSBkb20gZWxlbWVudD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gZmFsc2U7XG5cbiAgICAvL3RoaXMgd2lsbCBtYWtlIGl0IHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gY2FsbCBiaW5kIGFsbCB0aGUgdGltZVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlVXAgPSB0aGlzLm9uTW91c2VVcC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlVXAgPSB0aGlzLnByb2Nlc3NNb3VzZVVwLmJpbmQoIHRoaXMgKTtcblxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IHRoaXMub25Nb3VzZURvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZURvd24gPSB0aGlzLnByb2Nlc3NNb3VzZURvd24uYmluZCggdGhpcyApO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IHRoaXMub25Nb3VzZU1vdmUuYmluZCggdGhpcyApO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IHRoaXMucHJvY2Vzc01vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VPdXQgPSB0aGlzLm9uTW91c2VPdXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IHRoaXMub25Ub3VjaFN0YXJ0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaEVuZCA9IHRoaXMub25Ub3VjaEVuZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gdGhpcy5wcm9jZXNzVG91Y2hFbmQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaE1vdmUgPSB0aGlzLm9uVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sYXN0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjc3Mgc3R5bGUgb2YgdGhlIGN1cnNvciB0aGF0IGlzIGJlaW5nIHVzZWRcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSAnaW5oZXJpdCc7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjYWNoZWQgdmFyXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCByZXNvbHV0aW9uXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IDE7XG5cbiAgICB0aGlzLnNldFRhcmdldEVsZW1lbnQodGhpcy5yZW5kZXJlci52aWV3LCB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24pO1xufVxuXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJhY3Rpb25NYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5cbi8qKlxuICogU2V0cyB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlL3RvdWNoIGV2ZW50cy4gVGhpcyBpcyB1c2VmdWwgZm9yIHdoZW4geW91IGhhdmVcbiAqIG90aGVyIERPTSBlbGVtZW50cyBvbiB0b3Agb2YgdGhlIHJlbmRlcmVycyBDYW52YXMgZWxlbWVudC4gV2l0aCB0aGlzIHlvdSdsbCBiZSBiYWxlIHRvIGRlbGV0ZWdhdGVcbiAqIGFub3RoZXIgRE9NIGVsZW1lbnQgdG8gcmVjZWl2ZSB0aG9zZSBldmVudHMuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQge0hUTUxFbGVtZW50fSB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVEhlIHJlc29sdXRpb24gb2YgdGhlIG5ldyBlbGVtZW50IChyZWxhdGl2ZSB0byB0aGUgY2FudmFzKS5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuc2V0VGFyZ2V0RWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCByZXNvbHV0aW9uKVxue1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICB0aGlzLmFkZEV2ZW50cygpO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYWxsIHRoZSBET00gZXZlbnRzXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5hZGRFdmVudHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29yZS50aWNrZXIuc2hhcmVkLmFkZCh0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy1jb250ZW50LXpvb21pbmcnXSA9ICdub25lJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICdub25lJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgICAgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgICAgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgICAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCAgIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICAgICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsICAgIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIHRoZSBET00gZXZlbnRzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHJlZ2lzdGVyZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJyc7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAgdGhpcy5vblRvdWNoRW5kLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlLCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgIHRoaXMub25Nb3VzZVVwLCB0cnVlKTtcblxuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc3RhdGUgb2YgaW50ZXJhY3RpdmUgb2JqZWN0cy5cbiAqIEludm9rZWQgYnkgYSB0aHJvdHRsZWQgdGlja2VyIHVwZGF0ZSBmcm9tXG4gKiB7QGxpbmsgUElYSS50aWNrZXIuc2hhcmVkfS5cbiAqXG4gKiBAcGFyYW0gZGVsdGFUaW1lIHtudW1iZXJ9XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB0aGlzLl9kZWx0YVRpbWUgKz0gZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2RlbHRhVGltZSA8IHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGVsdGFUaW1lID0gMDtcblxuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHVzZXIgbW92ZSB0aGUgbW91c2UgdGhpcyBjaGVjayBoYXMgYWxyZWFkeSBiZWVuIGRmb25lIHVzaW5nIHRoZSBtb3VzZSBtb3ZlIVxuICAgIGlmKHRoaXMuZGlkTW92ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlkTW92ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE9cbn07XG5cbi8qKlxuICogRGlzcGF0Y2hlcyBhbiBldmVudCBvbiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIGRpc3BsYXkgb2JqZWN0IGluIHF1ZXN0aW9uXG4gKiBAcGFyYW0gZXZlbnRTdHJpbmcge3N0cmluZ30gdGhlIG5hbWUgb2YgdGhlIGV2ZW50IChlLmcsIG1vdXNlZG93bilcbiAqIEBwYXJhbSBldmVudERhdGEge29iamVjdH0gdGhlIGV2ZW50IGRhdGEgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGV2ZW50U3RyaW5nLCBldmVudERhdGEgKVxue1xuICAgIGlmKCFldmVudERhdGEuc3RvcHBlZClcbiAgICB7XG4gICAgICAgIGV2ZW50RGF0YS50YXJnZXQgPSBkaXNwbGF5T2JqZWN0O1xuICAgICAgICBldmVudERhdGEudHlwZSA9IGV2ZW50U3RyaW5nO1xuXG4gICAgICAgIGRpc3BsYXlPYmplY3QuZW1pdCggZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0W2V2ZW50U3RyaW5nXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddKCBldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogTWFwcyB4IGFuZCB5IGNvb3JkcyBmcm9tIGEgRE9NIG9iamVjdCBhbmQgbWFwcyB0aGVtIGNvcnJlY3RseSB0byB0aGUgcGl4aSB2aWV3LiBUaGUgcmVzdWx0aW5nIHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUgcG9pbnQuXG4gKiBUaGlzIHRha2VzIGludG8gYWNjb3VudCB0aGUgZmFjdCB0aGF0IHRoZSBET00gZWxlbWVudCBjb3VsZCBiZSBzY2FsZWQgYW5kIHBvc2l0aW9uZWQgYW55d2hlcmUgb24gdGhlIHNjcmVlbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCB0aGUgcmVzdWx0IHdpbGwgYmUgc3RvcmVkIGluXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHggICAgIHRoZSB4IGNvb3JkIG9mIHRoZSBwb3NpdGlvbiB0byBtYXBcbiAqIEBwYXJhbSAge251bWJlcn0geSAgICAgdGhlIHkgY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm1hcFBvc2l0aW9uVG9Qb2ludCA9IGZ1bmN0aW9uICggcG9pbnQsIHgsIHkgKVxue1xuICAgIHZhciByZWN0ID0gdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcG9pbnQueCA9ICggKCB4IC0gcmVjdC5sZWZ0ICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQud2lkdGggIC8gcmVjdC53aWR0aCAgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHBvaW50LnkgPSAoICggeSAtIHJlY3QudG9wICApICogKHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmhlaWdodCAvIHJlY3QuaGVpZ2h0ICkgKSAvIHRoaXMucmVzb2x1dGlvbjtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlcyBhIG5lYXQgd2F5IG9mIGNyYXdsaW5nIHRocm91Z2ggdGhlIHNjZW5lIGdyYXBoIGFuZCBydW5uaW5nIGEgc3BlY2lmaWVkIGZ1bmN0aW9uIG9uIGFsbCBpbnRlcmFjdGl2ZSBvYmplY3RzIGl0IGZpbmRzLlxuICogSXQgd2lsbCBhbHNvIHRha2UgY2FyZSBvZiBoaXQgdGVzdGluZyB0aGUgaW50ZXJhY3RpdmUgb2JqZWN0cyBhbmQgcGFzc2VzIHRoZSBoaXQgYWNyb3NzIGluIHRoZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCBpcyB0ZXN0ZWQgZm9yIGNvbGxpc2lvblxuICogQHBhcmFtICB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBkaXNwbGF5T2JqZWN0IHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgd2lsbCBiZSBoaXQgdGVzdCAocmVjdXJjc2l2bHkgY3Jhd2xzIGl0cyBjaGlsZHJlbilcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmdW5jIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggaW50ZXJhY3RpdmUgb2JqZWN0LiBUaGUgZGlzcGxheU9iamVjdCBhbmQgaGl0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvblxuICogQHBhcmFtICB7Ym9vbGVhbn0gaGl0VGVzdCB0aGlzIGluZGljYXRlcyBpZiB0aGUgb2JqZWN0cyBpbnNpZGUgc2hvdWxkIGJlIGhpdCB0ZXN0IGFnYWluc3QgdGhlIHBvaW50XG4gKiBAcmV0dXJuIHtib29sZWFufSByZXR1cm5zIHRydWUgaWYgdGhlIGRpc3BsYXlPYmplY3QgaGl0IHRoZSBwb2ludFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NJbnRlcmFjdGl2ZSA9IGZ1bmN0aW9uIChwb2ludCwgZGlzcGxheU9iamVjdCwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmUpXG57XG4gICAgaWYoIWRpc3BsYXlPYmplY3QgfHwgIWRpc3BsYXlPYmplY3QudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUb29rIGEgbGl0dGxlIHdoaWxlIHRvIHJld29yayB0aGlzIGZ1bmN0aW9uIGNvcnJlY3RseSEgQnV0IG5vdyBpdCBpcyBkb25lIGFuZCBuaWNlIGFuZCBvcHRpbWlzZWQuIF5fXlxuICAgIC8vIFxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBub3cgbG9vcCB0aHJvdWdoIGFsbCBvYmplY3RzIGFuZCB0aGVuIG9ubHkgaGl0IHRlc3QgdGhlIG9iamVjdHMgaXQgSEFTIHRvLCBub3QgYWxsIG9mIHRoZW0uIE1VQ0ggZmFzdGVyLi5cbiAgICAvLyBBbiBvYmplY3Qgd2lsbCBiZSBoaXQgdGVzdCBpZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gICAgLy8gXG4gICAgLy8gMTogSXQgaXMgaW50ZXJhY3RpdmUuXG4gICAgLy8gMjogSXQgYmVsb25ncyB0byBhIHBhcmVudCB0aGF0IGlzIGludGVyYWN0aXZlIEFORCBvbmUgb2YgdGhlIHBhcmVudHMgY2hpbGRyZW4gaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICAvLyBcbiAgICAvLyBBcyBhbm90aGVyIGxpdHRsZSBvcHRpbWlzYXRpb24gb25jZSBhbiBpbnRlcmFjdGl2ZSBvYmplY3QgaGFzIGJlZW4gaGl0IHdlIGNhbiBjYXJyeSBvbiB0aHJvdWdoIHRoZSBzY2VuZWdyYXBoLCBidXQgd2Uga25vdyB0aGF0IHRoZXJlIHdpbGwgYmUgbm8gbW9yZSBoaXRzISBTbyB3ZSBjYW4gYXZvaWQgZXh0cmEgaGl0IHRlc3RzXG4gICAgLy8gQSBmaW5hbCBvcHRpbWlzYXRpb24gaXMgdGhhdCBhbiBvYmplY3QgaXMgbm90IGhpdCB0ZXN0IGRpcmVjdGx5IGlmIGEgY2hpbGQgaGFzIGFscmVhZHkgYmVlbiBoaXQuXG4gICAgXG4gICAgdmFyIGhpdCA9IGZhbHNlLFxuICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGludGVyYWN0aXZlID0gZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSB8fCBpbnRlcmFjdGl2ZTtcblxuICAgIC8vIGlmIHRoZSBkaXNwbGF5b2JqZWN0IGhhcyBhIGhpdEFyZWEsIHRoZW4gaXQgZG9lcyBub3QgbmVlZCB0byBoaXRUZXN0IGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaGl0QXJlYSlcbiAgICB7XG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gKiogRlJFRSBUSVAgKiohIElmIGFuIG9iamVjdCBpcyBub3QgaW50ZXJhY3R0aXZlIG9yIGhhcyBubyBidXR0b25zIGluIGl0IChzdWNoIGFzIGEgZ2FtZSBzY2VuZSEpIHNldCBpbnRlcmFjdGl2ZUNoaWxkcmVuIHRvIGZhbHNlIGZvciB0aGF0IGRpc3BsYXlPYmplY3QuXG4gICAgLy8gVGhpcyB3aWxsIGFsbG93IHBpeGkgdG8gY29tcGxldGx5IGlnbm9yZSBhbmQgYnlwYXNzIGNoZWNraW5nIHRoZSBkaXNwbGF5T2JqZWN0cyBjaGlsZHJlbi5cbiAgICBpZihkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlQ2hpbGRyZW4pXG4gICAgeyAgICAgICBcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICAgICAgXG4gICAgICAgIGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRpbWUgdG8gZ2V0IHJlY3Vyc2l2ZS4uIGlmIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gaWYgc29tdGhpbmcgaXMgaGl0Li5cbiAgICAgICAgICAgIGlmKCB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZShwb2ludCwgY2hpbGRyZW5baV0sIGZ1bmMsIGhpdFRlc3QsIGludGVyYWN0aXZlUGFyZW50KSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIHdlIG5vIGxvbmdlciBuZWVkIHRvIGhpdCB0ZXN0IGFueSBtb3JlIG9iamVjdHMgaW4gdGhpcyBjb250YWluZXIgYXMgd2Ugd2Ugbm93IGtub3cgdGhlIHBhcmVudCBoYXMgYmVlbiBoaXRcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBpcyBpbnRlcmFjdGl2ZSAsIHRoYXQgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhpdCB3YXMgYWN0dWFsbHkgaW50ZXJhY3RpdmUgYW5kIG5vdCBqdXN0IHRoZSBjaGlsZCBvZiBhbiBpbnRlcmFjdGl2ZSBvYmplY3QuIFxuICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55dGhpbmcgZWxzZS4gV2Ugc3RpbGwgbmVlZCB0byBydW4gdGhyb3VnaCBhbGwgb2JqZWN0cywgYnV0IHdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhbnkgaGl0IHRlc3RzLlxuICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuW2ldLmludGVyYWN0aXZlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGl0VGVzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIG5vIHBvaW50IHJ1bm5pbmcgdGhpcyBpZiB0aGUgaXRlbSBpcyBub3QgaW50ZXJhY3RpdmUgb3IgZG9lcyBub3QgaGF2ZSBhbiBpbnRlcmFjdGl2ZSBwYXJlbnQuXG4gICAgaWYoaW50ZXJhY3RpdmUpXG4gICAge1xuICAgICAgICAvLyBpZiB3ZSBhcmUgaGl0IHRlc3RpbmcgKGFzIGluIHdlIGhhdmUgbm8gaGl0IGFueSBvYmplY3RzIHlldClcbiAgICAgICAgLy8gV2UgYWxzbyBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGhpdCB0ZXN0aW5nIGlmIG9uY2Ugb2YgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuIGhhcyBhbHJlYWR5IGJlZW4gaGl0IVxuICAgICAgICBpZihoaXRUZXN0ICYmICFoaXQpXG4gICAgICAgIHsgIFxuICAgICAgICAgICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGhpcy5fdGVtcFBvaW50KTtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmhpdEFyZWEuY29udGFpbnMoIHRoaXMuX3RlbXBQb2ludC54LCB0aGlzLl90ZW1wUG9pbnQueSApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZihkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gZGlzcGxheU9iamVjdC5jb250YWluc1BvaW50KHBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmMoZGlzcGxheU9iamVjdCwgaGl0KTsgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGl0O1xuICBcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgZG93biBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcHJlc3NlZCBkb3duXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VEb3duLCB0cnVlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBkb3duIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlRG93biA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB2YXIgZSA9IHRoaXMubW91c2Uub3JpZ2luYWxFdmVudDtcbiAgICBcbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG5cbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nIF0gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRkb3duJyA6ICdtb3VzZWRvd24nLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcmVsZWFzZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYnV0dG9uIGJlaW5nIHJlbGVhc2VkXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VVcCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlVXAsIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIHVwIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZVVwID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuXG4gICAgdmFyIGlzUmlnaHRCdXR0b24gPSBlLmJ1dHRvbiA9PT0gMiB8fCBlLndoaWNoID09PSAzO1xuICAgIHZhciBpc0Rvd24gPSAgaXNSaWdodEJ1dHRvbiA/ICdfaXNSaWdodERvd24nIDogJ19pc0xlZnREb3duJztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodHVwJyA6ICdtb3VzZXVwJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0Y2xpY2snIDogJ2NsaWNrJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXBvdXRzaWRlJyA6ICdtb3VzZXVwb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgdGhlIG1vdXNlIG1vdmluZ1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5kaWRNb3ZlID0gdHJ1ZTtcblxuICAgIHRoaXMuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VNb3ZlLCB0cnVlICk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgIT09IHRoaXMuY3Vyc29yKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gdGhpcy5jdXJzb3I7XG4gICAgfVxuXG4gICAgLy9UT0RPIEJVRyBmb3IgcGFyZW50cyBpbmVyYWN0aXZlIG9iamVjdCAoYm9yZGVyIG9yZGVyIGlzc3VlKVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlbW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQoZGlzcGxheU9iamVjdCwgaGl0KTtcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgaXMgbW92ZWQgb3V0IG9mIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJlaW5nIG1vdmVkIG91dFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlT3V0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgLy8gVE9ETyBvcHRpbWl6ZSBieSBub3QgY2hlY2sgRVZFUlkgVElNRSEgbWF5YmUgaGFsZiBhcyBvZnRlbj8gLy9cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkgKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIGZhbHNlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBvdmVyL291dCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VPdmVyT3V0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGlmKCFkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3ZlcicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlzcGxheU9iamVjdC5idXR0b25Nb2RlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnNvciA9IGRpc3BsYXlPYmplY3QuZGVmYXVsdEN1cnNvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZihkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIHRoaXMuZXZlbnREYXRhKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIHN0YXJ0ZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggc3RhcnRpbmcgb24gdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaFN0YXJ0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuICAgICAgICAvL1RPRE8gUE9PTFxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0LCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hTdGFydCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaHN0YXJ0JywgdGhpcy5ldmVudERhdGEgKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBlbmRzIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIGVuZGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICAvL1RPRE8gdGhpcyBzaG91bGQgYmUgcGFzc2VkIGFsb25nLi4gbm8gc2V0XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoRW5kLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIGVuZCBvZiBhIHRvdWNoIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaEVuZCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZCcsIHRoaXMuZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndGFwJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZG91dHNpZGUnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIG1vdmVkIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBtb3ZpbmcgYWNyb3NzIHRoZSByZW5kZXJlciB2aWV3XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIGEgdG91Y2ggbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGhpdCA9IGhpdDtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaG1vdmUnLCB0aGlzLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hFdmVudCB7RXZlbnREYXRhfSBUaGUgdG91Y2ggZXZlbnQgd2UgbmVlZCB0byBwYWlyIHdpdGggYW4gaW50ZXJhY3Rpb25EYXRhIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZ2V0VG91Y2hEYXRhID0gZnVuY3Rpb24gKHRvdWNoRXZlbnQpXG57XG4gICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wb3AoKTtcblxuICAgIGlmKCF0b3VjaERhdGEpXG4gICAge1xuICAgICAgICB0b3VjaERhdGEgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG4gICAgfVxuXG4gICAgdG91Y2hEYXRhLmlkZW50aWZpZXIgPSB0b3VjaEV2ZW50LmlkZW50aWZpZXI7XG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRvdWNoRGF0YS5nbG9iYWwsIHRvdWNoRXZlbnQuY2xpZW50WCwgdG91Y2hFdmVudC5jbGllbnRZICk7XG5cbiAgICBpZihuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YS5nbG9iYWwueCA9IHRvdWNoRGF0YS5nbG9iYWwueCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC55ID0gdG91Y2hEYXRhLmdsb2JhbC55IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIH1cblxuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWCA9IHRvdWNoRGF0YS5nbG9iYWwueDtcbiAgICB0b3VjaEV2ZW50Lmdsb2JhbFkgPSB0b3VjaERhdGEuZ2xvYmFsLnk7XG5cbiAgICByZXR1cm4gdG91Y2hEYXRhO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IHRvIHRoZSBpbnRlcm5hbCBwb29sXG4gKlxuICogQHBhcmFtIHRvdWNoRGF0YSB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9IFRoZSB0b3VjaCBkYXRhIG9iamVjdCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmV0dXJuVG91Y2hEYXRhID0gZnVuY3Rpb24gKCB0b3VjaERhdGEgKVxue1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wdXNoKCB0b3VjaERhdGEgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGludGVyYWN0aW9uIG1hbmFnZXJcbiAqXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLm1vdXNlID0gbnVsbDtcblxuICAgIHRoaXMuZXZlbnREYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IG51bGw7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VVcCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Nb3VzZURvd24gPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUgPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlT3V0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBudWxsO1xuXG5cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IG51bGw7XG5cbiAgICB0aGlzLm9uVG91Y2hFbmQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaE1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZW1wUG9pbnQgPSBudWxsO1xufTtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBpbnRlcmFjdGlvbnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEludGVyYWN0aW9uRGF0YTogICAgcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKSxcbiAgICBJbnRlcmFjdGlvbk1hbmFnZXI6IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25NYW5hZ2VyJyksXG4gICAgaW50ZXJhY3RpdmVUYXJnZXQ6ICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbn07XG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGludGVyYWN0aXZlIG9iamVjdHNcbiAqIHVzZWQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5pbnRlcmFjdGlvbi5pbnRlcmFjdGl2ZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgaW50ZXJhY3RpdmVUYXJnZXQgPSB7XG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBidXR0b25Nb2RlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlQ2hpbGRyZW46IHRydWUsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBkZWZhdWx0Q3Vyc29yOiAncG9pbnRlcicsXG5cbiAgICAvLyBzb21lIGludGVybmFsIGNoZWNrcy4uXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX292ZXI6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdG91Y2hEb3duOiBmYWxzZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnRlcmFjdGl2ZVRhcmdldDtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi4vZXh0cmFzJyksXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxuXG5mdW5jdGlvbiBwYXJzZShyZXNvdXJjZSwgdGV4dHVyZSkge1xuICAgIHZhciBkYXRhID0ge307XG4gICAgdmFyIGluZm8gPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF07XG4gICAgdmFyIGNvbW1vbiA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NvbW1vbicpWzBdO1xuXG4gICAgZGF0YS5mb250ID0gaW5mby5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKTtcbiAgICBkYXRhLnNpemUgPSBwYXJzZUludChpbmZvLmdldEF0dHJpYnV0ZSgnc2l6ZScpLCAxMCk7XG4gICAgZGF0YS5saW5lSGVpZ2h0ID0gcGFyc2VJbnQoY29tbW9uLmdldEF0dHJpYnV0ZSgnbGluZUhlaWdodCcpLCAxMCk7XG4gICAgZGF0YS5jaGFycyA9IHt9O1xuXG4gICAgLy9wYXJzZSBsZXR0ZXJzXG4gICAgdmFyIGxldHRlcnMgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjaGFyJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxldHRlcnMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaWQnKSwgMTApO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlUmVjdCA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4JyksIDEwKSArIHRleHR1cmUuZnJhbWUueCxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd5JyksIDEwKSArIHRleHR1cmUuZnJhbWUueSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd3aWR0aCcpLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaGVpZ2h0JyksIDEwKVxuICAgICAgICApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbY2hhckNvZGVdID0ge1xuICAgICAgICAgICAgeE9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeU9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3lvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeEFkdmFuY2U6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4YWR2YW5jZScpLCAxMCksXG4gICAgICAgICAgICBrZXJuaW5nOiB7fSxcbiAgICAgICAgICAgIHRleHR1cmU6IG5ldyBjb3JlLlRleHR1cmUodGV4dHVyZS5iYXNlVGV4dHVyZSwgdGV4dHVyZVJlY3QpXG5cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvL3BhcnNlIGtlcm5pbmdzXG4gICAgdmFyIGtlcm5pbmdzID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgna2VybmluZycpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBrZXJuaW5ncy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBmaXJzdCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnZmlyc3QnKSwgMTApO1xuICAgICAgICB2YXIgc2Vjb25kID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdzZWNvbmQnKSwgMTApO1xuICAgICAgICB2YXIgYW1vdW50ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdhbW91bnQnKSwgMTApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbc2Vjb25kXS5rZXJuaW5nW2ZpcnN0XSA9IGFtb3VudDtcbiAgICB9XG5cbiAgICByZXNvdXJjZS5iaXRtYXBGb250ID0gZGF0YTtcblxuICAgIC8vIEknbSBsZWF2aW5nIHRoaXMgYXMgYSB0ZW1wb3JhcnkgZml4IHNvIHdlIGNhbiB0ZXN0IHRoZSBiaXRtYXAgZm9udHMgaW4gdjNcbiAgICAvLyBidXQgaXQncyB2ZXJ5IGxpa2VseSB0byBjaGFuZ2VcbiAgICBleHRyYXMuQml0bWFwVGV4dC5mb250c1tkYXRhLmZvbnRdID0gZGF0YTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSBvciBub3QgeG1sIGRhdGFcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhIHx8ICFyZXNvdXJjZS5pc1htbClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNraXAgaWYgbm90IGJpdG1hcCBmb250IGRhdGEsIHVzaW5nIHNvbWUgc2lsbHkgZHVjay10eXBpbmdcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGFnZScpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdLmdldEF0dHJpYnV0ZSgnZmFjZScpID09PSBudWxsXG4gICAgICAgICAgICApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeG1sVXJsID0gcGF0aC5kaXJuYW1lKHJlc291cmNlLnVybCk7XG5cbiAgICAgICAgaWYgKHhtbFVybCA9PT0gJy4nKSB7XG4gICAgICAgICAgICB4bWxVcmwgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJhc2VVcmwgJiYgeG1sVXJsKSB7XG4gICAgICAgICAgICAvLyBpZiBiYXNldXJsIGhhcyBhIHRyYWlsaW5nIHNsYXNoIHRoZW4gYWRkIG9uZSB0byB4bWxVcmwgc28gdGhlIHJlcGxhY2Ugd29ya3MgYmVsb3dcbiAgICAgICAgICAgIGlmICh0aGlzLmJhc2VVcmwuY2hhckF0KHRoaXMuYmFzZVVybC5sZW5ndGggLSAxKSA9PT0gJy8nKSB7XG4gICAgICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcmVtb3ZlIGJhc2VVcmwgZnJvbSB4bWxVcmxcbiAgICAgICAgICAgIHhtbFVybCA9IHhtbFVybC5yZXBsYWNlKHRoaXMuYmFzZVVybCwgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4geG1sVXJsIG5vdywgaXQgbmVlZHMgYSB0cmFpbGluZyBzbGFzaC4gRW5zdXJlIHRoYXQgaXQgZG9lcyBpZiB0aGUgc3RyaW5nIGlzbid0IGVtcHR5LlxuICAgICAgICBpZiAoeG1sVXJsICYmIHhtbFVybC5jaGFyQXQoeG1sVXJsLmxlbmd0aCAtIDEpICE9PSAnLycpIHtcbiAgICAgICAgICAgIHhtbFVybCArPSAnLyc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRleHR1cmVVcmwgPSB4bWxVcmwgKyByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJylbMF0uZ2V0QXR0cmlidXRlKCdmaWxlJyk7XG4gICAgICAgIGlmIChjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSkge1xuICAgICAgICAgICAgLy9yZXVzZSBleGlzdGluZyB0ZXh0dXJlXG4gICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbdGV4dHVyZVVybF0pO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGxvYWRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiByZXNvdXJjZS5tZXRhZGF0YS5pbWFnZU1ldGFkYXRhXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gbG9hZCB0aGUgdGV4dHVyZSBmb3IgdGhlIGZvbnRcbiAgICAgICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgdGV4dHVyZVVybCwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgcmVzLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBsb2FkZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5sb2FkZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIExvYWRlcjogICAgICAgICAgICAgcmVxdWlyZSgnLi9sb2FkZXInKSxcblxuICAgIC8vIHBhcnNlcnNcbiAgICBiaXRtYXBGb250UGFyc2VyOiAgIHJlcXVpcmUoJy4vYml0bWFwRm9udFBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyOiAgcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIHRleHR1cmVQYXJzZXI6ICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlUGFyc2VyJyksXG4gICAgUmVzb3VyY2U6ICAgICAgICAgICByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZVxufTtcbiIsInZhciBSZXNvdXJjZUxvYWRlciA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLFxuICAgIHRleHR1cmVQYXJzZXIgPSByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBzcHJpdGVzaGVldFBhcnNlciA9IHJlcXVpcmUoJy4vc3ByaXRlc2hlZXRQYXJzZXInKSxcbiAgICBiaXRtYXBGb250UGFyc2VyID0gcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyk7XG5cbi8qKlxuICpcbiAqIFRoZSBuZXcgbG9hZGVyLCBleHRlbmRzIFJlc291cmNlIExvYWRlciBieSBDaGFkIEVuZ2xlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9lbmdsZXJjai9yZXNvdXJjZS1sb2FkZXJcbiAqXG4gKiBgYGBqc1xuICogdmFyIGxvYWRlciA9IFBJWEkubG9hZGVyOyAvLyBwaXhpIGV4cG9zZXMgYSBwcmVtYWRlIGluc3RhbmNlIGZvciB5b3UgdG8gdXNlLlxuICogLy9vclxuICogdmFyIGxvYWRlciA9IG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyKCk7IC8vIHlvdSBjYW4gYWxzbyBjcmVhdGUgeW91ciBvd24gaWYgeW91IHdhbnRcbiAqXG4gKiBsb2FkZXIuYWRkKCdidW5ueScsXCJkYXRhL2J1bm55LnBuZ1wiKTtcbiAqXG4gKiBsb2FkZXIub25jZSgnY29tcGxldGUnLG9uQXNzZXRzTG9hZGVkKTtcbiAqXG4gKiBsb2FkZXIubG9hZCgpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlJlc291cmNlTG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5sb2FkZXJzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KVxue1xuICAgIFJlc291cmNlTG9hZGVyLmNhbGwodGhpcywgYmFzZVVybCwgY29uY3VycmVuY3kpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMudXNlKExvYWRlci5fcGl4aU1pZGRsZXdhcmVbaV0oKSk7XG4gICAgfVxufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZXNvdXJjZUxvYWRlci5wcm90b3R5cGUpO1xuTG9hZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbkxvYWRlci5fcGl4aU1pZGRsZXdhcmUgPSBbXG4gICAgLy8gcGFyc2UgYW55IGJsb2IgaW50byBtb3JlIHVzYWJsZSBvYmplY3RzIChlLmcuIEltYWdlKVxuICAgIFJlc291cmNlTG9hZGVyLm1pZGRsZXdhcmUucGFyc2luZy5ibG9iLFxuICAgIC8vIHBhcnNlIGFueSBJbWFnZSBvYmplY3RzIGludG8gdGV4dHVyZXNcbiAgICB0ZXh0dXJlUGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBzcHJpdGVzaGVldFBhcnNlcixcbiAgICAvLyBwYXJzZSBhbnkgc3ByaXRlc2hlZXQgZGF0YSBpbnRvIG11bHRpcGxlIHRleHR1cmVzXG4gICAgYml0bWFwRm9udFBhcnNlclxuXTtcblxuTG9hZGVyLmFkZFBpeGlNaWRkbGV3YXJlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgTG9hZGVyLl9waXhpTWlkZGxld2FyZS5wdXNoKGZuKTtcbn07XG5cbi8vIEFkZCBjdXN0b20gZXh0ZW50aW9uc1xudmFyIFJlc291cmNlID0gUmVzb3VyY2VMb2FkZXIuUmVzb3VyY2U7XG5cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUoJ2ZudCcsIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIHBhdGggPSByZXF1aXJlKCdwYXRoJyksXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBza2lwIGlmIG5vIGRhdGEsIGl0cyBub3QganNvbiwgb3IgaXQgaXNuJ3Qgc3ByaXRlc2hlZXQgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzSnNvbiB8fCAhcmVzb3VyY2UuZGF0YS5mcmFtZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzb3VyY2UuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcm91dGUgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJykpO1xuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwoIHJlc291cmNlLnVybCApO1xuXG4gICAgICAgIC8vIGxvYWQgdGhlIGltYWdlIGZvciB0aGlzIHNoZWV0XG4gICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgcm91dGUgKyAnLycgKyByZXNvdXJjZS5kYXRhLm1ldGEuaW1hZ2UsIGxvYWRPcHRpb25zLCBmdW5jdGlvbiAocmVzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlcyA9IHt9O1xuXG4gICAgICAgICAgICB2YXIgZnJhbWVzID0gcmVzb3VyY2UuZGF0YS5mcmFtZXM7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gZnJhbWVzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gZnJhbWVzW2ldLmZyYW1lO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlY3QpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0cmltID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QuaCwgcmVjdC53KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QudywgcmVjdC5oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vICBDaGVjayB0byBzZWUgaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0udHJpbW1lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpbSA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS54IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS55IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS53IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS5oIC8gcmVzb2x1dGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBmbGlwIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IVxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gc2l6ZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggPSBzaXplLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0ID0gdGVtcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNpemUueCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLnkgLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLmhlaWdodCAvPSByZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzW2ldID0gbmV3IGNvcmUuVGV4dHVyZShyZXMudGV4dHVyZS5iYXNlVGV4dHVyZSwgc2l6ZSwgc2l6ZS5jbG9uZSgpLCB0cmltLCBmcmFtZXNbaV0ucm90YXRlZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0cyBhbHNvIGFkZCB0aGUgZnJhbWUgdG8gcGl4aSdzIGdsb2JhbCBjYWNoZSBmb3IgZnJvbUZyYW1lIGFuZCBmcm9tSW1hZ2UgZnVuY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW2ldID0gcmVzb3VyY2UudGV4dHVyZXNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH0pO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gY3JlYXRlIGEgbmV3IHRleHR1cmUgaWYgdGhlIGRhdGEgaXMgYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgIGlmIChyZXNvdXJjZS5kYXRhICYmIHJlc291cmNlLmlzSW1hZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBiYXNlVGV4dHVyZSA9IG5ldyBjb3JlLkJhc2VUZXh0dXJlKHJlc291cmNlLmRhdGEsIG51bGwsIGNvcmUudXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKHJlc291cmNlLnVybCkpO1xuICAgICAgICAgICAgYmFzZVRleHR1cmUuaW1hZ2VVcmwgPSByZXNvdXJjZS51cmw7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlID0gbmV3IGNvcmUuVGV4dHVyZShiYXNlVGV4dHVyZSk7XG4gICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdWNudGlvbnNcbiAgICAgICAgICAgIGNvcmUudXRpbHMuQmFzZVRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gYmFzZVRleHR1cmU7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gcmVzb3VyY2UudGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgdGVtcFBvbHlnb24gPSBuZXcgY29yZS5Qb2x5Z29uKCk7XG5cbi8qKlxuICogQmFzZSBtZXNoIGNsYXNzXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0byB1c2VcbiAqIEBwYXJhbSBbdmVydGljZXNdIHtGbG9hdDMyQXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHZlcnRpY2VzXG4gKiBAcGFyYW0gW3V2c10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdXZzXG4gKiBAcGFyYW0gW2luZGljZXNdIHtVaW50MTZBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgaW5kaWNlc1xuICogQHBhcmFtIFtkcmF3TW9kZV0ge251bWJlcn0gdGhlIGRyYXdNb2RlLCBjYW4gYmUgYW55IG9mIHRoZSBNZXNoLkRSQVdfTU9ERVMgY29uc3RzXG4gKi9cbmZ1bmN0aW9uIE1lc2godGV4dHVyZSwgdmVydGljZXMsIHV2cywgaW5kaWNlcywgZHJhd01vZGUpXG57XG4gICAgY29yZS5Db250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIG9mIHRoZSBNZXNoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBVdnMgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IHV2cyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxLCAwLFxuICAgICAgICAxLCAxLFxuICAgICAgICAwLCAxXSk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB2ZXJ0aWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSB2ZXJ0aWNlcyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxMDAsIDAsXG4gICAgICAgIDEwMCwgMTAwLFxuICAgICAgICAwLCAxMDBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgLy8gIFRPRE8gYXV0byBnZW5lcmF0ZSB0aGlzIGJhc2VkIG9uIGRyYXcgbW9kZSFcbiAgICB0aGlzLmluZGljZXMgPSBpbmRpY2VzIHx8IG5ldyBVaW50MTZBcnJheShbMCwgMSwgMywgMl0pO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgTWVzaCBpcyBkaXJ0eSBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzcHJpdGUuIFNldCB0byBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlbW92ZSBhbnkgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUcmlhbmdsZXMgaW4gY2FudmFzIG1vZGUgYXJlIGF1dG9tYXRpY2FsbHkgYW50aWFsaWFzZWQsIHVzZSB0aGlzIHZhbHVlIHRvIGZvcmNlIHRyaWFuZ2xlcyB0byBvdmVybGFwIGEgYml0IHdpdGggZWFjaCBvdGhlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdheSB0aGUgTWVzaCBzaG91bGQgYmUgZHJhd24sIGNhbiBiZSBhbnkgb2YgdGhlIHtAbGluayBQSVhJLm1lc2guTWVzaC5EUkFXX01PREVTfSBjb25zdHNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAc2VlIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmRyYXdNb2RlID0gZHJhd01vZGUgfHwgTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0g7XG5cbiAgICAvLyBydW4gdGV4dHVyZSBzZXR0ZXI7XG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcblxuICAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgbWVzaCBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1lc2gucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuTWVzaC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNZXNoLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLm1lc2guTWVzaCNcbiAgICAgKi9cbiAgICB0ZXh0dXJlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl90ZXh0dXJlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBXZWJHTCByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMubWVzaCk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5tZXNoLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEsIHRyYW5zZm9ybS5iLCB0cmFuc2Zvcm0uYywgdHJhbnNmb3JtLmQsIHRyYW5zZm9ybS50eCB8IDAsIHRyYW5zZm9ybS50eSB8IDApO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4LCB0cmFuc2Zvcm0udHkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc1RyaWFuZ2xlTWVzaChjb250ZXh0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzKGNvbnRleHQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiBUcmlhbmdsZSBNZXNoIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aCAvIDI7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGggLSAyOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4LCAoaW5kZXggKyAyKSwgKGluZGV4ICsgNCkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiB0cmlhbmdsZSBtb2RlIHVzaW5nIGNhbnZhc1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc1RyaWFuZ2xlcyA9IGZ1bmN0aW9uIChjb250ZXh0KVxue1xuICAgIC8vIGRyYXcgdHJpYW5nbGVzISFcbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcblxuICAgIHZhciBsZW5ndGggPSBpbmRpY2VzLmxlbmd0aDtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAzKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4MCA9IGluZGljZXNbaV0gKiAyLCBpbmRleDEgPSBpbmRpY2VzW2kgKyAxXSAqIDIsIGluZGV4MiA9IGluZGljZXNbaSArIDJdICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3Mgb25lIG9mIHRoZSB0cmlhbmdsZXMgdGhhdCBmb3JtIHRoaXMgTWVzaFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHBhcmFtIHZlcnRpY2VzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgTWVzaFxuICogQHBhcmFtIHV2cyB7RmxvYXQzMkFycmF5fSBhIHJlZmVyZW5jZSB0byB0aGUgdXZzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gaW5kZXgwIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgxIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgc2Vjb25kIHZlcnRleFxuICogQHBhcmFtIGluZGV4MiB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIHRoaXJkIHZlcnRleFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZSA9IGZ1bmN0aW9uIChjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleDAsIGluZGV4MSwgaW5kZXgyKVxue1xuICAgIHZhciB0ZXh0dXJlU291cmNlID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2U7XG4gICAgdmFyIHRleHR1cmVXaWR0aCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdmFyIHRleHR1cmVIZWlnaHQgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHZhciB4MCA9IHZlcnRpY2VzW2luZGV4MF0sIHgxID0gdmVydGljZXNbaW5kZXgxXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleDJdO1xuICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4MCArIDFdLCB5MSA9IHZlcnRpY2VzW2luZGV4MSArIDFdLCB5MiA9IHZlcnRpY2VzW2luZGV4MiArIDFdO1xuXG4gICAgdmFyIHUwID0gdXZzW2luZGV4MF0gKiB0ZXh0dXJlV2lkdGgsIHUxID0gdXZzW2luZGV4MV0gKiB0ZXh0dXJlV2lkdGgsIHUyID0gdXZzW2luZGV4Ml0gKiB0ZXh0dXJlV2lkdGg7XG4gICAgdmFyIHYwID0gdXZzW2luZGV4MCArIDFdICogdGV4dHVyZUhlaWdodCwgdjEgPSB1dnNbaW5kZXgxICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MiA9IHV2c1tpbmRleDIgKyAxXSAqIHRleHR1cmVIZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5jYW52YXNQYWRkaW5nID4gMClcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nWCA9IHRoaXMuY2FudmFzUGFkZGluZyAvIHRoaXMud29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIHBhZGRpbmdZID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgY2VudGVyWCA9ICh4MCArIHgxICsgeDIpIC8gMztcbiAgICAgICAgdmFyIGNlbnRlclkgPSAoeTAgKyB5MSArIHkyKSAvIDM7XG5cbiAgICAgICAgdmFyIG5vcm1YID0geDAgLSBjZW50ZXJYO1xuICAgICAgICB2YXIgbm9ybVkgPSB5MCAtIGNlbnRlclk7XG5cbiAgICAgICAgdmFyIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MCA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MCA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIC8vXG5cbiAgICAgICAgbm9ybVggPSB4MSAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTEgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MSA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MSA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIG5vcm1YID0geDIgLSBjZW50ZXJYO1xuICAgICAgICBub3JtWSA9IHkyIC0gY2VudGVyWTtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDIgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTIgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LnNhdmUoKTtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG5cbiAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcblxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICBjb250ZXh0LmNsaXAoKTtcblxuICAgIC8vIENvbXB1dGUgbWF0cml4IHRyYW5zZm9ybVxuICAgIHZhciBkZWx0YSA9ICAodTAgKiB2MSkgICAgICArICh2MCAqIHUyKSAgICAgICsgKHUxICogdjIpICAgICAgLSAodjEgKiB1MikgICAgICAtICh2MCAqIHUxKSAgICAgIC0gKHUwICogdjIpO1xuICAgIHZhciBkZWx0YUEgPSAoeDAgKiB2MSkgICAgICArICh2MCAqIHgyKSAgICAgICsgKHgxICogdjIpICAgICAgLSAodjEgKiB4MikgICAgICAtICh2MCAqIHgxKSAgICAgIC0gKHgwICogdjIpO1xuICAgIHZhciBkZWx0YUIgPSAodTAgKiB4MSkgICAgICArICh4MCAqIHUyKSAgICAgICsgKHUxICogeDIpICAgICAgLSAoeDEgKiB1MikgICAgICAtICh4MCAqIHUxKSAgICAgIC0gKHUwICogeDIpO1xuICAgIHZhciBkZWx0YUMgPSAodTAgKiB2MSAqIHgyKSArICh2MCAqIHgxICogdTIpICsgKHgwICogdTEgKiB2MikgLSAoeDAgKiB2MSAqIHUyKSAtICh2MCAqIHUxICogeDIpIC0gKHUwICogeDEgKiB2Mik7XG4gICAgdmFyIGRlbHRhRCA9ICh5MCAqIHYxKSAgICAgICsgKHYwICogeTIpICAgICAgKyAoeTEgKiB2MikgICAgICAtICh2MSAqIHkyKSAgICAgIC0gKHYwICogeTEpICAgICAgLSAoeTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhRSA9ICh1MCAqIHkxKSAgICAgICsgKHkwICogdTIpICAgICAgKyAodTEgKiB5MikgICAgICAtICh5MSAqIHUyKSAgICAgIC0gKHkwICogdTEpICAgICAgLSAodTAgKiB5Mik7XG4gICAgdmFyIGRlbHRhRiA9ICh1MCAqIHYxICogeTIpICsgKHYwICogeTEgKiB1MikgKyAoeTAgKiB1MSAqIHYyKSAtICh5MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB5MikgLSAodTAgKiB5MSAqIHYyKTtcblxuICAgIGNvbnRleHQudHJhbnNmb3JtKGRlbHRhQSAvIGRlbHRhLCBkZWx0YUQgLyBkZWx0YSxcbiAgICAgICAgZGVsdGFCIC8gZGVsdGEsIGRlbHRhRSAvIGRlbHRhLFxuICAgICAgICBkZWx0YUMgLyBkZWx0YSwgZGVsdGFGIC8gZGVsdGEpO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UodGV4dHVyZVNvdXJjZSwgMCwgMCk7XG4gICAgY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5cblxuLyoqXG4gKiBSZW5kZXJzIGEgZmxhdCBNZXNoXG4gKlxuICogQHBhcmFtIE1lc2gge1BJWEkubWVzaC5NZXNofSBUaGUgTWVzaCB0byByZW5kZXJcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLnJlbmRlck1lc2hGbGF0ID0gZnVuY3Rpb24gKE1lc2gpXG57XG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgdmFyIHZlcnRpY2VzID0gTWVzaC52ZXJ0aWNlcztcblxuICAgIHZhciBsZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGgvMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgIGZvciAodmFyIGk9MTsgaSA8IGxlbmd0aC0yOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpKjI7XG5cbiAgICAgICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXhdLCAgIHgxID0gdmVydGljZXNbaW5kZXgrMl0sIHgyID0gdmVydGljZXNbaW5kZXgrNF07XG4gICAgICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4KzFdLCB5MSA9IHZlcnRpY2VzW2luZGV4KzNdLCB5MiA9IHZlcnRpY2VzW2luZGV4KzVdO1xuXG4gICAgICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgyLCB5Mik7XG4gICAgfVxuXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnI0ZGMDAwMCc7XG4gICAgY29udGV4dC5maWxsKCk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbn07XG5cbi8qKlxuICogV2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLCB0aGlzIGV2ZW50IHdpbGwgZmlyZSB0byB1cGRhdGUgdGhlIHNjYWxlIGFuZCBmcmFtZVxuICpcbiAqIEBwYXJhbSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51cGRhdGVGcmFtZSA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgbWVzaCBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAoIXRoaXMuX2N1cnJlbnRCb3VuZHMpIHtcbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gbWF0cml4IHx8IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICAgICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSB2ZXJ0aWNlcy5sZW5ndGg7IGkgPCBuOyBpICs9IDIpIHtcbiAgICAgICAgICAgIHZhciByYXdYID0gdmVydGljZXNbaV0sIHJhd1kgPSB2ZXJ0aWNlc1tpICsgMV07XG4gICAgICAgICAgICB2YXIgeCA9IChhICogcmF3WCkgKyAoYyAqIHJhd1kpICsgdHg7XG4gICAgICAgICAgICB2YXIgeSA9IChkICogcmF3WSkgKyAoYiAqIHJhd1gpICsgdHk7XG5cbiAgICAgICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG5cbiAgICAgICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuICAgICAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWluWCA9PT0gLUluZmluaXR5IHx8IG1heFkgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBtZXNoLiBXb3JrcyBvbmx5IGZvciBUUklBTkdMRV9NRVNIXG4gKlxuICogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuICovXG5NZXNoLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50ICkge1xuICAgIGlmICghdGhpcy5nZXRCb3VuZHMoKS5jb250YWlucyhwb2ludC54LCBwb2ludC55KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHBvaW50cyA9IHRlbXBQb2x5Z29uLnBvaW50cztcbiAgICB2YXIgaSwgbGVuO1xuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVMpIHtcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgICAgIGxlbiA9IHRoaXMuaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgIC8vVE9ETzogaW5saW5lIHRoaXMuXG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTMpIHtcbiAgICAgICAgICAgIHZhciBpbmQwID0gaW5kaWNlc1tpXSoyLCBpbmQxID0gaW5kaWNlc1tpKzFdKjIsIGluZDIgPSBpbmRpY2VzW2krMl0qMjtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2luZDBdO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaW5kMCsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2luZDFdO1xuICAgICAgICAgICAgcG9pbnRzWzNdID0gdmVydGljZXNbaW5kMSsxXTtcbiAgICAgICAgICAgIHBvaW50c1s0XSA9IHZlcnRpY2VzW2luZDJdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaW5kMisxXTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBsZW4gPSB2ZXJ0aWNlcy5sZW5ndGg7XG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTYpIHtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2ldO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaSsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2krMl07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpKzNdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaSs0XTtcbiAgICAgICAgICAgIHBvaW50c1s1XSA9IHZlcnRpY2VzW2krNV07XG4gICAgICAgICAgICBpZiAodGVtcFBvbHlnb24uY29udGFpbnModGVtcFBvaW50LngsIHRlbXBQb2ludC55KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGlmZmVyZW50IGRyYXdpbmcgYnVmZmVyIG1vZGVzIHN1cHBvcnRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX01FU0hcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFU1xuICovXG5NZXNoLkRSQVdfTU9ERVMgPSB7XG4gICAgVFJJQU5HTEVfTUVTSDogMCxcbiAgICBUUklBTkdMRVM6IDFcbn07XG4iLCJ2YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xuXG4vKipcbiAqIFRoZSBQbGFuZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciBQbGFuZSA9IG5ldyBQSVhJLlBsYW5lKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIFBsYW5lLlxuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWCAtIFRoZSBudW1iZXIgb3ggeCBzZWdtZW50c1xuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWSAtIFRoZSBudW1iZXIgb2YgeSBzZWdtZW50c1xuICpcbiAqL1xuZnVuY3Rpb24gUGxhbmUodGV4dHVyZSwgc2VnbWVudHNYLCBzZWdtZW50c1kpXG57XG4gICAgTWVzaC5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tlciBmb3IgaWYgdGhlIFBsYW5lIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuc2VnbWVudHNYID0gIHNlZ21lbnRzWCB8fCAxMDtcbiAgICB0aGlzLnNlZ21lbnRzWSA9IHNlZ21lbnRzWSB8fCAxMDtcblxuICAgIHRoaXMuZHJhd01vZGUgPSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVTO1xuICAgIHRoaXMucmVmcmVzaCgpO1xuXG59XG5cblxuLy8gY29uc3RydWN0b3JcblBsYW5lLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIE1lc2gucHJvdG90eXBlICk7XG5QbGFuZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQbGFuZTtcbm1vZHVsZS5leHBvcnRzID0gUGxhbmU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5QbGFuZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgdG90YWwgPSB0aGlzLnNlZ21lbnRzWCAqIHRoaXMuc2VnbWVudHNZO1xuICAgIHZhciB2ZXJ0cyA9IFtdO1xuICAgIHZhciBjb2xvcnMgPSBbXTtcbiAgICB2YXIgdXZzID0gW107XG4gICAgdmFyIGluZGljZXMgPSBbXTtcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMudGV4dHVyZTtcblxuICAvLyAgdGV4dHVyZS53aWR0aCA9IDgwMCB0ZXh0dXJlLndpZHRoIHx8IDgwMDtcbiAvLyAgIHRleHR1cmUuaGVpZ2h0ID0gODAwLy90ZXh0dXJlLmhlaWdodCB8fCA4MDA7XG5cbiAgICB2YXIgc2VnbWVudHNYU3ViID0gdGhpcy5zZWdtZW50c1ggLSAxO1xuICAgIHZhciBzZWdtZW50c1lTdWIgPSB0aGlzLnNlZ21lbnRzWSAtIDE7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgdmFyIHNpemVYID0gdGV4dHVyZS53aWR0aCAvIHNlZ21lbnRzWFN1YjtcbiAgICB2YXIgc2l6ZVkgPSB0ZXh0dXJlLmhlaWdodCAvIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbDsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHggPSAoaSAlIHRoaXMuc2VnbWVudHNYKTtcbiAgICAgICAgdmFyIHkgPSAoIChpIC8gdGhpcy5zZWdtZW50c1ggKSB8IDAgKTtcblxuXG4gICAgICAgIHZlcnRzLnB1c2goKHggKiBzaXplWCksXG4gICAgICAgICAgICAgICAgICAgKHkgKiBzaXplWSkpO1xuXG4gICAgICAgIC8vIHRoaXMgd29ya3MgZm9yIHJlY3Rhbmd1bGFyIHRleHR1cmVzLiBcbiAgICAgICAgdXZzLnB1c2godGV4dHVyZS5fdXZzLngwICsgKHRleHR1cmUuX3V2cy54MSAtIHRleHR1cmUuX3V2cy54MCkgKiAoeCAvICh0aGlzLnNlZ21lbnRzWC0xKSksIHRleHR1cmUuX3V2cy55MCArICh0ZXh0dXJlLl91dnMueTMtdGV4dHVyZS5fdXZzLnkwKSAqICh5LyAodGhpcy5zZWdtZW50c1ktMSkpKTtcbiAgICAgIH1cblxuICAgIC8vICBjb25zXG5cbiAgICB2YXIgdG90YWxTdWIgPSBzZWdtZW50c1hTdWIgKiBzZWdtZW50c1lTdWI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTdWI7IGkrKykge1xuXG4gICAgICAgIHZhciB4cG9zID0gaSAlIHNlZ21lbnRzWFN1YjtcbiAgICAgICAgdmFyIHlwb3MgPSAoaSAvIHNlZ21lbnRzWFN1YiApIHwgMDtcblxuXG4gICAgICAgIHZhciAgdmFsdWUgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWUyID0gKHlwb3MgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zICsgMTtcbiAgICAgICAgdmFyICB2YWx1ZTMgPSAoKHlwb3MrMSkgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zO1xuICAgICAgICB2YXIgIHZhbHVlNCA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuXG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZSwgdmFsdWUyLCB2YWx1ZTMpO1xuICAgICAgICBpbmRpY2VzLnB1c2godmFsdWUyLCB2YWx1ZTQsIHZhbHVlMyk7XG4gICAgfVxuXG5cbiAgICAvL2NvbnNvbGUubG9nKGluZGljZXMpXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkodmVydHMpO1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheSh1dnMpO1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShjb2xvcnMpO1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShpbmRpY2VzKTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGV4dHVyZSBVVnMgd2hlbiBuZXcgdGV4dHVyZSBpcyBzZXRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QbGFuZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFBsYW5lIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBUaGUgcm9wZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciByb3BlID0gbmV3IFBJWEkuUm9wZShQSVhJLlRleHR1cmUuZnJvbUltYWdlKFwic25ha2UucG5nXCIpLCBwb2ludHMpO1xuICogIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5tZXNoLk1lc2hcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB7UElYSS5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIHRleHR1cmUgdG8gdXNlIG9uIHRoZSByb3BlLlxuICogQHBhcmFtIHtQSVhJLlBvaW50W119IHBvaW50cyAtIEFuIGFycmF5IG9mIHtAbGluayBQSVhJLlBvaW50fSBvYmplY3RzIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gKlxuICovXG5mdW5jdGlvbiBSb3BlKHRleHR1cmUsIHBvaW50cylcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnRbXX0gQW4gYXJyYXkgb2YgcG9pbnRzIHRoYXQgZGV0ZXJtaW5lIHRoZSByb3BlXG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgb2YgdmVydGljZXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhpcyByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBUaGUgV2ViR0wgVXZzIG9mIHRoZSByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogNCk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgY29sb3IgY29tcG9uZW50c1xuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgcm9wZSBpcyByZWFkeSB0byBiZSBkcmF3bi4gTmVlZGVkIGJlY2F1c2UgTWVzaCBjdG9yIGNhblxuICAgICAqIGNhbGwgX29uVGV4dHVyZVVwZGF0ZWQgd2hpY2ggY291bGQgY2FsbCByZWZyZXNoIHRvbyBlYXJseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgIHRoaXMucmVmcmVzaCgpO1xufVxuXG5cbi8vIGNvbnN0cnVjdG9yXG5Sb3BlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTWVzaC5wcm90b3R5cGUpO1xuUm9wZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3BlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3BlO1xuXG4vKipcbiAqIFJlZnJlc2hlc1xuICpcbiAqL1xuUm9wZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgLy8gaWYgdG9vIGxpdHRsZSBwb2ludHMsIG9yIHRleHR1cmUgaGFzbid0IGdvdCBVVnMgc2V0IHlldCBqdXN0IG1vdmUgb24uXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxIHx8ICF0aGlzLl90ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuXG4gICAgdmFyIHRleHR1cmVVdnMgPSB0aGlzLl90ZXh0dXJlLl91dnM7XG4gICAgdmFyIG9mZnNldCA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDAsIHRleHR1cmVVdnMueTApO1xuICAgIHZhciBmYWN0b3IgPSBuZXcgY29yZS5Qb2ludCh0ZXh0dXJlVXZzLngyIC0gdGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MiAtIHRleHR1cmVVdnMueTApO1xuXG4gICAgdXZzWzBdID0gMCArIG9mZnNldC54O1xuICAgIHV2c1sxXSA9IDAgKyBvZmZzZXQueTtcbiAgICB1dnNbMl0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICBjb2xvcnNbMF0gPSAxO1xuICAgIGNvbG9yc1sxXSA9IDE7XG5cbiAgICBpbmRpY2VzWzBdID0gMDtcbiAgICBpbmRpY2VzWzFdID0gMTtcblxuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgYW1vdW50O1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG4gICAgICAgIC8vIHRpbWUgdG8gZG8gc29tZSBzbWFydCBkcmF3aW5nIVxuICAgICAgICBhbW91bnQgPSBpIC8gKHRvdGFsLTEpO1xuXG4gICAgICAgIHV2c1tpbmRleF0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrMV0gPSAwICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgdXZzW2luZGV4KzJdID0gYW1vdW50ICogZmFjdG9yLnggKyBvZmZzZXQueDtcbiAgICAgICAgdXZzW2luZGV4KzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgY29sb3JzW2luZGV4XSA9IDE7XG4gICAgICAgIGNvbG9yc1tpbmRleCsxXSA9IDE7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgaW5kaWNlc1tpbmRleF0gPSBpbmRleDtcbiAgICAgICAgaW5kaWNlc1tpbmRleCArIDFdID0gaW5kZXggKyAxO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIE1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUuY2FsbCh0aGlzKTtcblxuICAgIC8vIHdhaXQgZm9yIHRoZSBSb3BlIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Sb3BlLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbGFzdFBvaW50ID0gcG9pbnRzWzBdO1xuICAgIHZhciBuZXh0UG9pbnQ7XG4gICAgdmFyIHBlcnBYID0gMDtcbiAgICB2YXIgcGVycFkgPSAwO1xuXG4gICAgLy8gdGhpcy5jb3VudCAtPSAwLjI7XG5cbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgcmF0aW8sIHBlcnBMZW5ndGgsIG51bTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWw7IGkrKylcbiAgICB7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBpbmRleCA9IGkgKiA0O1xuXG4gICAgICAgIGlmIChpIDwgcG9pbnRzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0UG9pbnQgPSBwb2ludHNbaSsxXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcGVycFkgPSAtKG5leHRQb2ludC54IC0gbGFzdFBvaW50LngpO1xuICAgICAgICBwZXJwWCA9IG5leHRQb2ludC55IC0gbGFzdFBvaW50Lnk7XG5cbiAgICAgICAgcmF0aW8gPSAoMSAtIChpIC8gKHRvdGFsLTEpKSkgKiAxMDtcblxuICAgICAgICBpZiAocmF0aW8gPiAxKVxuICAgICAgICB7XG4gICAgICAgICAgICByYXRpbyA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwTGVuZ3RoID0gTWF0aC5zcXJ0KHBlcnBYICogcGVycFggKyBwZXJwWSAqIHBlcnBZKTtcbiAgICAgICAgbnVtID0gdGhpcy5fdGV4dHVyZS5oZWlnaHQgLyAyOyAvLygyMCArIE1hdGguYWJzKE1hdGguc2luKChpICsgdGhpcy5jb3VudCkgKiAwLjMpICogNTApICkqIHJhdGlvO1xuICAgICAgICBwZXJwWCAvPSBwZXJwTGVuZ3RoO1xuICAgICAgICBwZXJwWSAvPSBwZXJwTGVuZ3RoO1xuXG4gICAgICAgIHBlcnBYICo9IG51bTtcbiAgICAgICAgcGVycFkgKj0gbnVtO1xuXG4gICAgICAgIHZlcnRpY2VzW2luZGV4XSA9IHBvaW50LnggKyBwZXJwWDtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMV0gPSBwb2ludC55ICsgcGVycFk7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzJdID0gcG9pbnQueCAtIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCszXSA9IHBvaW50LnkgLSBwZXJwWTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBwb2ludDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkubWVzaFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNZXNoOiAgICAgICAgICAgcmVxdWlyZSgnLi9NZXNoJyksXG4gICAgUGxhbmU6ICAgICAgICAgICByZXF1aXJlKCcuL1BsYW5lJyksXG4gICAgUm9wZTogICAgICAgICAgIHJlcXVpcmUoJy4vUm9wZScpLFxuICAgIE1lc2hSZW5kZXJlcjogICByZXF1aXJlKCcuL3dlYmdsL01lc2hSZW5kZXJlcicpLFxuICAgIE1lc2hTaGFkZXI6ICAgICByZXF1aXJlKCcuL3dlYmdsL01lc2hTaGFkZXInKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIE1lc2ggPSByZXF1aXJlKCcuLi9NZXNoJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgTWVzaFJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9NZXNoUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgY29yZS5PYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIFxuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSgxNTAwMCk7XG5cbiAgICAvL1RPRE8gdGhpcyBjb3VsZCBiZSBhIHNpbmdsZSBidWZmZXIgc2hhcmVkIGFtb25nc3QgYWxsIHJlbmRlcmVycyBhcyB3ZSByZXVzZSB0aGlzIHNldCB1cCBpbiBtb3N0IHJlbmRlcmVyc1xuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgMTUwMDA7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufVxuXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoUmVuZGVyZXI7XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignbWVzaCcsIE1lc2hSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIG1lc2gge1BJWEkubWVzaC5NZXNofSB0aGUgbWVzaCB0byByZW5kZXJcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICBpZighbWVzaC5fdmVydGV4QnVmZmVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5faW5pdFdlYkdMKG1lc2gpO1xuICAgIH1cblxuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXIsXG4gICAgICAgIGdsID0gcmVuZGVyZXIuZ2wsXG4gICAgICAgIHRleHR1cmUgPSBtZXNoLl90ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBzaGFkZXIgPSBtZXNoLnNoYWRlcjsvLyB8fCByZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnBsdWdpbnMubWVzaFNoYWRlcjtcblxuICAgIHZhciBkcmF3TW9kZSA9IG1lc2guZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIID8gZ2wuVFJJQU5HTEVfU1RSSVAgOiBnbC5UUklBTkdMRVM7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShtZXNoLmJsZW5kTW9kZSk7XG5cbiAgICAvL1RPRE8gY2FjaGUgY3VzdG9tIHN0YXRlLi5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzaGFkZXIgPSBzaGFkZXIuc2hhZGVyc1tnbC5pZF0gfHwgc2hhZGVyLmdldFNoYWRlcihyZW5kZXJlcik7Ly8gOiBzaGFkZXI7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4LnZhbHVlID0gbWVzaC53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gbWVzaC53b3JsZEFscGhhO1xuXG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuXG4gICAgaWYgKCFtZXNoLmRpcnR5KVxuICAgIHtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIG1lc2gudmVydGljZXMpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIHV2c1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cblxuICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCAwLCBtZXNoLmluZGljZXMpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIG1lc2guZGlydHkgPSBmYWxzZTtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZG9udCBuZWVkIHRvIHVwbG9hZCFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIH1cblxuICAgIGdsLmRyYXdFbGVtZW50cyhkcmF3TW9kZSwgbWVzaC5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuXG59O1xuXG4vKipcbiAqIFByZXBhcmVzIGFsbCB0aGUgYnVmZmVycyB0byByZW5kZXIgdGhpcyBtZXNoXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLl9pbml0V2ViR0wgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICAvLyBidWlsZCB0aGUgc3RyaXAhXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIG1lc2guX3ZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIG1lc2guX2luZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5fdXZCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC52ZXJ0aWNlcywgZ2wuRFlOQU1JQ19EUkFXKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgaWYobWVzaC5jb2xvcnMpe1xuICAgICAgICBtZXNoLl9jb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fY29sb3JCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5jb2xvcnMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG59O1xuXG5cbi8qKlxuICogRW1wdGllcyB0aGUgY3VycmVudCBiYXRjaC5cbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBtZXNoIHJlbmRlcmVyLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgXG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgTWVzaCByZW5kZXJlclxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIFdlYkdMIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gTWVzaFNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIGNvcmUuU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIGFscGhhIDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYVRleHR1cmVDb29yZDowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5NZXNoU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TaGFkZXIucHJvdG90eXBlKTtcbk1lc2hTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gTWVzaFNoYWRlcjtcblxuY29yZS5TaGFkZXJNYW5hZ2VyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoU2hhZGVyJywgTWVzaFNoYWRlcik7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9zaWduXG5cbmlmICghTWF0aC5zaWduKVxue1xuICAgIE1hdGguc2lnbiA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHggPSAreDtcbiAgICAgICAgaWYgKHggPT09IDAgfHwgaXNOYU4oeCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4ID4gMCA/IDEgOiAtMTtcbiAgICB9O1xufVxuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvb2JqZWN0LWFzc2lnblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnblxuXG5pZiAoIU9iamVjdC5hc3NpZ24pXG57XG4gICAgT2JqZWN0LmFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcbn1cbiIsInJlcXVpcmUoJy4vT2JqZWN0LmFzc2lnbicpO1xucmVxdWlyZSgnLi9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUnKTtcbnJlcXVpcmUoJy4vTWF0aC5zaWduJyk7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cDovL3BhdWxpcmlzaC5jb20vMjAxMS9yZXF1ZXN0YW5pbWF0aW9uZnJhbWUtZm9yLXNtYXJ0LWFuaW1hdGluZy9cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzE1Nzk2NzFcbi8vIGh0dHA6Ly91cGRhdGVzLmh0bWw1cm9ja3MuY29tLzIwMTIvMDUvcmVxdWVzdEFuaW1hdGlvbkZyYW1lLUFQSS1ub3ctd2l0aC1zdWItbWlsbGlzZWNvbmQtcHJlY2lzaW9uXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90aW1oYWxsLzQwNzg2MTRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9GaW5hbmNpYWwtVGltZXMvcG9seWZpbGwtc2VydmljZS90cmVlL21hc3Rlci9wb2x5ZmlsbHMvcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG5cbi8vIEV4cGVjdGVkIHRvIGJlIHVzZWQgd2l0aCBCcm93c2VyZml5XG4vLyBCcm93c2VyaWZ5IGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB0aGUgdXNlIG9mIGBnbG9iYWxgIGFuZCBwYXNzZXMgdGhlXG4vLyBjb3JyZWN0IHJlZmVyZW5jZSBvZiBgZ2xvYmFsYCwgYHNlbGZgLCBhbmQgZmluYWxseSBgd2luZG93YFxuXG4vLyBEYXRlLm5vd1xuaWYgKCEoRGF0ZS5ub3cgJiYgRGF0ZS5wcm90b3R5cGUuZ2V0VGltZSkpIHtcbiAgICBEYXRlLm5vdyA9IGZ1bmN0aW9uIG5vdygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIH07XG59XG5cbi8vIHBlcmZvcm1hbmNlLm5vd1xuaWYgKCEoZ2xvYmFsLnBlcmZvcm1hbmNlICYmIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cpKSB7XG4gICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgaWYgKCFnbG9iYWwucGVyZm9ybWFuY2UpIHtcbiAgICAgICAgZ2xvYmFsLnBlcmZvcm1hbmNlID0ge307XG4gICAgfVxuICAgIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIH07XG59XG5cbi8vIHJlcXVlc3RBbmltYXRpb25GcmFtZVxudmFyIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbnZhciB2ZW5kb3JzID0gWydtcycsICdtb3onLCAnd2Via2l0JywgJ28nXTtcblxuZm9yKHZhciB4ID0gMDsgeCA8IHZlbmRvcnMubGVuZ3RoICYmICFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lOyArK3gpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnQ2FuY2VsQW5pbWF0aW9uRnJhbWUnXSB8fFxuICAgICAgICBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbn1cblxuaWYgKCFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZGVsYXkgPSAxNiArIGxhc3RUaW1lIC0gY3VycmVudFRpbWU7XG5cbiAgICAgICAgaWYgKGRlbGF5IDwgMCkge1xuICAgICAgICAgICAgZGVsYXkgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFRpbWUgPSBjdXJyZW50VGltZTtcblxuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsYXN0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBjYWxsYmFjayhwZXJmb3JtYW5jZS5ub3coKSk7XG4gICAgICAgIH0sIGRlbGF5KTtcbiAgICB9O1xufVxuXG5pZiAoIWdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSkge1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgfTtcbn1cbiJdfQ== +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L09ic2VydmFibGVQb2ludC5qcyIsInNyYy9jb3JlL2Rpc3BsYXkvVHJhbnNmb3JtU3RhdGljLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3MuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9HcmFwaGljc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvV2ViR0xHcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ2lyY2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRDb21wbGV4UG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkTGluZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL01hdHJpeC5qcyIsInNyYy9jb3JlL21hdGgvUG9pbnQuanMiLCJzcmMvY29yZS9tYXRoL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvQ2lyY2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvRWxsaXBzZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1BvbHlnb24uanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9SZWN0YW5nbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlQnVmZmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvU3lzdGVtUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNNYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1RleHR1cmVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9NYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUXVhZC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvU3RlbmNpbE1hc2tTdGFjay5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9zcHJpdGVzL1Nwcml0ZS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvdGV4dC9UZXh0LmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9CYXNlVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1JlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9UZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZVV2cy5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90aWNrZXIvVGlja2VyLmpzIiwic3JjL2NvcmUvdGlja2VyL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzLmpzIiwic3JjL2NvcmUvdXRpbHMvaW5kZXguanMiLCJzcmMvY29yZS91dGlscy9wbHVnaW5UYXJnZXQuanMiLCJzcmMvZGVwcmVjYXRpb24uanMiLCJzcmMvZXh0cmFzL0JpdG1hcFRleHQuanMiLCJzcmMvZXh0cmFzL01vdmllQ2xpcC5qcyIsInNyYy9leHRyYXMvVGlsaW5nU3ByaXRlLmpzIiwic3JjL2V4dHJhcy9jYWNoZUFzQml0bWFwLmpzIiwic3JjL2V4dHJhcy9nZXRDaGlsZEJ5TmFtZS5qcyIsInNyYy9leHRyYXMvZ2V0R2xvYmFsUG9zaXRpb24uanMiLCJzcmMvZXh0cmFzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvYXNjaWkvQXNjaWlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibG9vbS9CbG9vbUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckRpckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1clhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9TbWFydEJsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvck1hdHJpeEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbG9yL0NvbG9yU3RlcEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2RvdC9Eb3RTY3JlZW5GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0JsdXJZVGludEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2dyYXkvR3JheUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvaW52ZXJ0L0ludmVydEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL25vaXNlL05vaXNlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9yZ2IvUkdCU3BsaXRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zZXBpYS9TZXBpYUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0QXhpc0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdHdpc3QvVHdpc3RGaWx0ZXIuanMiLCJzcmMvc3JjL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL0ludGVyYWN0aW9uRGF0YS5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbk1hbmFnZXIuanMiLCJzcmMvaW50ZXJhY3Rpb24vaW5kZXguanMiLCJzcmMvaW50ZXJhY3Rpb24vaW50ZXJhY3RpdmVUYXJnZXQuanMiLCJzcmMvbG9hZGVycy9iaXRtYXBGb250UGFyc2VyLmpzIiwic3JjL2xvYWRlcnMvaW5kZXguanMiLCJzcmMvbG9hZGVycy9sb2FkZXIuanMiLCJzcmMvbG9hZGVycy9zcHJpdGVzaGVldFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL3RleHR1cmVQYXJzZXIuanMiLCJzcmMvbWVzaC9NZXNoLmpzIiwic3JjL21lc2gvUGxhbmUuanMiLCJzcmMvbWVzaC9Sb3BlLmpzIiwic3JjL21lc2gvaW5kZXguanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoUmVuZGVyZXIuanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoU2hhZGVyLmpzIiwic3JjL3BvbHlmaWxsL01hdGguc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9PYmplY3QuYXNzaWduLmpzIiwic3JjL3BvbHlmaWxsL2luZGV4LmpzIiwic3JjL3BvbHlmaWxsL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzV1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNyaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbm1DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Y0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2h5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNWxCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM21CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25iQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICBjcmVhdGVDb250ZXh0OiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9jcmVhdGVDb250ZXh0JyksXG4gICAgc2V0VmVydGV4QXR0cmliQXJyYXlzOiBcdHJlcXVpcmUoJy4vbGliL3NldFZlcnRleEF0dHJpYkFycmF5cycpLFxuICAgIFxuICAgIEdMQnVmZmVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMQnVmZmVyJyksXG4gICAgR0xGcmFtZWJ1ZmZlcjogXHRcdFx0cmVxdWlyZSgnLi9saWIvR0xGcmFtZWJ1ZmZlcicpLFxuICAgIEdMU2hhZGVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMU2hhZGVyJyksXG4gICAgR0xUZXh0dXJlOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMVGV4dHVyZScpLFxuICAgIFxuICAgIFZlcnRleEFycmF5T2JqZWN0OiBcdFx0cmVxdWlyZSgnLi9saWIvVmVydGV4QXJyYXlPYmplY3QnKVxuXG59OyIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEVNUFRZX0FSUkFZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcblxudmFyIEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuQVJSQVlfQlVGRkVSO1xuXHR0aGlzLmRyYXdUeXBlID0gZHJhd1R5cGUgfHwgZ2wuU1RBVElDX0RSQVc7XG5cdHRoaXMuZGF0YSA9IEVNUFRZX0FSUkFZX0JVRkZFUjtcblxuXHRpZihkYXRhKVxuXHR7XG5cdFx0dGhpcy51cGxvYWQoZGF0YSk7XG5cdH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihkYXRhLCBvZmZzZXQsIGRvbnRCaW5kKVxue1xuXHQvLyB0b2RvIC0gbmVlZGVkP1xuXHQvL2lmKCFkb250QmluZClcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblx0XG5cdGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcblx0b2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cblx0aWYodGhpcy5kYXRhLmJ5dGVMZW5ndGggPj0gZGF0YS5ieXRlTGVuZ3RoKVxuXHR7XHRcblx0XHRnbC5idWZmZXJTdWJEYXRhKHRoaXMudHlwZSwgb2Zmc2V0LCBkYXRhKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC5idWZmZXJEYXRhKHRoaXMudHlwZSwgZGF0YSwgdGhpcy5kcmF3VHlwZSk7XG5cdH1cblxuXHR0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRCdWZmZXIodGhpcy50eXBlLCB0aGlzLmJ1ZmZlcik7XG59XG5cbkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24oZ2wsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZSA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIHR5cGUsIGRyYXdUeXBlKTtcbn1cblxuLy9UT0RPIERlc3Ryb3kuLlxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcjtcblxuIiwiXG52YXIgVGV4dHVyZSA9IHJlcXVpcmUoJy4vR0xUZXh0dXJlJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIEZyYW1lYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEZyYW1lYnVmZmVyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblx0XG5cdHRoaXMuc3RlbmNpbCA9IG51bGw7XG5cdHRoaXMudGV4dHVyZSA9IG51bGw7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlVGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBuZXcgVGV4dHVyZShnbCk7XG5cblx0dGhpcy50ZXh0dXJlLmJpbmQoKTtcblxuXHQvL2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZS50ZXh0dXJlLCAwKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmVuYWJsZVN0ZW5jaWwgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuc3RlbmNpbClyZXR1cm47XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnN0ZW5jaWwgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcbiAgICBcbiAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBcbiAgICAvLyBUT0RPLi4gdGhpcyBpcyBkZXB0aCBBTkQgc3RlbmNpbD9cbiAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsICB0aGlzLndpZHRoICAsIHRoaXMuaGVpZ2h0ICk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCByLCBnLCBiLCBhIClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICBnbC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpO1xuICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLmZyYW1lYnVmZmVyICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuXHRpZiAoIHRoaXMudGV4dHVyZSApXG4gICAge1xuICAgIFx0dGhpcy50ZXh0dXJlLnVwbG9hZERhdGEobnVsbCwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRpZiAoIHRoaXMuc3RlbmNpbCApXG4gICAge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0ZW5jaWwgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0dmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21EYXRhKGdsLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0dGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgZmJvLnVuYmluZCgpO1xuICAgIFxuICAgIHJldHVybiBmYm87XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZUZsb2F0MzIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0Ly8gY3JlYXRlIGEgbmV3IHRleHR1cmUuLlxuICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUuZnJvbURhdGEoZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuICAgIHRleHR1cmUuZW5hYmxlTmVhcmVzdFNjYWxpbmcoKTtcbiAgICB0ZXh0dXJlLmVuYWJsZVdyYXBDbGFtcCgpO1xuXG4gICAgLy9ub3cgY3JlYXRlIHRoZSBmcmFtZWJ1ZmZlciBvYmplY3QgYW5kIGF0dGFjaCB0aGUgdGV4dHVyZSB0byBpdC5cbiAgICB2YXIgZmJvID0gbmV3IEZyYW1lYnVmZmVyKGdsLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICBmYm8uZW5hYmxlVGV4dHVyZSh0ZXh0dXJlKVxuXG4gICAgZmJvLnVuYmluZCgpO1xuXG4gICAgcmV0dXJuIGZibztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGcmFtZWJ1ZmZlcjtcblxuIiwiXG52YXIgY29tcGlsZVByb2dyYW0gPSByZXF1aXJlKCcuL3NoYWRlci9jb21waWxlUHJvZ3JhbScpLFxuXHRleHRyYWN0QXR0cmlidXRlcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RBdHRyaWJ1dGVzJyksXG5cdGV4dHJhY3RVbmlmb3JtcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RVbmlmb3JtcycpLFxuXHRnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QgPSByZXF1aXJlKCcuL3NoYWRlci9nZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgU2hhZGVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cbnZhciBTaGFkZXIgPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIEZpcnN0IGNvbXBpbGUgdGhlIHByb2dyYW0uLlxuXHR0aGlzLnByb2dyYW0gPSBjb21waWxlUHJvZ3JhbShnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7XG5cblx0Ly8gbmV4dCBleHRyYWN0IHRoZSBhdHRyaWJ1dGVzXG5cdHRoaXMuYXR0cmlidXRlcyA9IGV4dHJhY3RBdHRyaWJ1dGVzKGdsLCB0aGlzLnByb2dyYW0pOyBcblxuICAgIHZhciB1bmlmb3JtRGF0YSA9IGV4dHJhY3RVbmlmb3JtcyhnbCwgdGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMudW5pZm9ybXMgPSBnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QoIGdsLCB1bmlmb3JtRGF0YSApO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4iLCJcbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gYSBXZWJHTCBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGZvcm1hdCB7bnVtYmVyfSB0aGUgcGl4ZWwgZm9ybWF0IG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5SR0JBXG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSB0aGUgZ2wgdHlwZSBvZiB0aGUgdGV4dHVyZS4gZGVmYXVsdHMgdG8gZ2wuVU5TSUdORURfQllURVxuICovXG52YXIgVGV4dHVyZSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLnRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cblx0Ly8gc29tZSBzZXR0aW5ncy4uXG5cdHRoaXMubWlwbWFwID0gZmFsc2U7XG5cblx0dGhpcy5wcmVtdWx0aXBseUFscGhhID0gZmFsc2U7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cblx0dGhpcy5mb3JtYXQgPSBmb3JtYXQgfHwgZ2wuUkdCQTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5VTlNJR05FRF9CWVRFO1xuXG5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge1BJWEkuZ2xDb3JlLlRleHR1cmV9IFt2YXJuYW1lXSBbZGVzY3JpcHRpb25dXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKHNvdXJjZSlcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gc291cmNlLndpZHRoO1xuXHR0aGlzLmhlaWdodCA9IHNvdXJjZS5oZWlnaHQ7XG5cblx0Z2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xuICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMuZm9ybWF0LCB0aGlzLnR5cGUsIHNvdXJjZSk7XG59XG5cbnZhciBGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSBmYWxzZTtcblxuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkRGF0YSA9IGZ1bmN0aW9uKGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuYmluZCgpO1xuXHRcblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IHRoaXMud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IHRoaXMuaGVpZ2h0O1xuXG5cdGlmKGRhdGEgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpXG5cdHtcblx0XHRpZighRkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFKVxuXHRcdHtcblx0XHRcdHZhciBleHQgPSBnbC5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9mbG9hdFwiKTtcblx0XHRcdFxuXHRcdFx0aWYoZXh0KVxuXHRcdFx0e1xuXHRcdFx0XHRGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2Zsb2F0aW5nIHBvaW50IHRleHR1cmVzIG5vdCBhdmFpbGFibGUnKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnR5cGUgPSBnbC5GTE9BVDtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHQvLyBUT0RPIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzXG5cdFx0dGhpcy50eXBlID0gZ2wuVU5TSUdORURfQllURTtcblx0fVxuXG5cdC8vIHdoYXQgdHlwZSBvZiBkYXRhP1xuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG5cdGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsICB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgZGF0YSB8fCBudWxsKTtcblxufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24obG9jYXRpb24pXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0aWYobG9jYXRpb24gIT09IHVuZGVmaW5lZClcblx0e1xuXHRcdGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbik7XG5cdH1cblxuXHRnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0aGlzLnRleHR1cmUpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIG51bGwpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5taW5GaWx0ZXIgPSBmdW5jdGlvbiggbGluZWFyIClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRpZih0aGlzLm1pcG1hcClcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVJfTUlQTUFQX0xJTkVBUiA6IGdsLk5FQVJFU1RfTUlQTUFQX05FQVJFU1QpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcblx0fVx0XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1hZ0ZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTWlwbWFwID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR0aGlzLm1pcG1hcCA9IHRydWU7XG5cdGdsLmdlbmVyYXRlTWlwbWFwKGdsLlRFWFRVUkVfMkQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVMaW5lYXJTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcih0cnVlKTtcblx0dGhpcy5tYWdGaWx0ZXIodHJ1ZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZU5lYXJlc3RTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcihmYWxzZSk7XG5cdHRoaXMubWFnRmlsdGVyKGZhbHNlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlV3JhcENsYW1wID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwUmVwZWF0ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXHRcblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuUkVQRUFUKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5SRVBFQVQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlVGV4dHVyZSh0aGlzLnRleHR1cmUpO1xufVxuXG4vL1RleHR1cmUuXG5UZXh0dXJlLmZyb21Tb3VyY2UgPSBmdW5jdGlvbihnbCwgc291cmNlLCBwcmVtdWx0aXBseUFscGhhKVxue1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS5wcmVtdWx0aXBseUFscGhhID0gcHJlbXVsdGlwbHlBbHBoYSB8fCBmYWxzZTtcblx0dGV4dHVyZS51cGxvYWQoc291cmNlKTtcblxuXHRyZXR1cm4gdGV4dHVyZTtcbn1cblxuVGV4dHVyZS5mcm9tRGF0YSA9IGZ1bmN0aW9uKGdsLCBkYXRhLCB3aWR0aCwgaGVpZ2h0KVxue1xuXHQvL2NvbnNvbGUubG9nKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS51cGxvYWREYXRhKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZTtcblxuIiwiXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbi8vIHN0YXRlIG9iamVjdC8vXG5cblxuZnVuY3Rpb24gVmVydGV4QXJyYXlPYmplY3QoZ2wpXG57XG5cdFxuXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IChcbiAgICAgIGdsLmdldEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKVxuICAgICk7XG5cbi8vXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IG51bGw7XG5cblx0aWYodGhpcy5uYXRpdmVWYW9FeHRlbnNpb24pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhbyA9IHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7ICBcblx0fVxuXG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcblxuXHR0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuXHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cblx0XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZlcnRleEFycmF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBWZXJ0ZXhBcnJheU9iamVjdDtcblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKHRoaXMubmF0aXZlVmFvKTsgIFxuXG5cdFx0aWYodGhpcy5kaXJ0eSlcblx0XHR7XG5cdFx0XHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cdFx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdFx0fVxuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLm5hdGl2ZVZhbylcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIFxuXHR7XG5cdFx0dmFyIGF0dHJpYiA9IHRoaXMuYXR0cmlidXRlc1tpXTtcblx0XHRhdHRyaWIuYnVmZmVyLmJpbmQoKTtcdFxuXG5cdFx0YXR0cmliLmF0dHJpYnV0ZS5wb2ludGVyKGF0dHJpYi50eXBlLCBhdHRyaWIubm9ybWFsaXplZCwgYXR0cmliLnN0cmlkZSwgYXR0cmliLnN0YXJ0KTsgXG5cdFx0XG5cdFx0Z2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYXR0cmliLmF0dHJpYnV0ZS5sb2NhdGlvbik7XG5cdH07XG5cblx0dGhpcy5pbmRleEJ1ZmZlci5iaW5kKCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRBdHRyaWJ1dGUgPSBmdW5jdGlvbihidWZmZXIsIGF0dHJpYnV0ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydClcbntcbiAgICB0aGlzLmF0dHJpYnV0ZXMucHVzaCh7XG4gICAgXHRidWZmZXI6IFx0YnVmZmVyLFxuICAgIFx0YXR0cmlidXRlOiBcdGF0dHJpYnV0ZSxcblxuICAgIFx0bG9jYXRpb246IFx0YXR0cmlidXRlLmxvY2F0aW9uLFxuXHQgXHR0eXBlOiBcdFx0dHlwZSB8fCB0aGlzLmdsLkZMT0FULFxuXHQgXHRub3JtYWxpemVkOiBub3JtYWxpemVkIHx8IGZhbHNlLFxuXHQgXHRzdHJpZGU6IFx0c3RyaWRlIHx8IDAsXG5cdCBcdHN0YXJ0OiBcdFx0c3RhcnQgfHwgMFxuXHR9KVxuXG5cdHRoaXMuZGlydHkgPSB0cnVlO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRJbmRleCA9IGZ1bmN0aW9uKGJ1ZmZlciwgb3B0aW9ucylcbntcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gYnVmZmVyO1xuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBzdGFydClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuZHJhd0VsZW1lbnRzKHR5cGUsIHNpemUsIGdsLlVOU0lHTkVEX1NIT1JULCBzdGFydCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgQ29udGV4dFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG5cbnZhciBDT05URVhUX1VJRCA9IDA7XG5cbnZhciBjcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24oY2FudmFzLCBvcHRpb25zKVxue1xuICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgb3B0aW9ucykgfHwgXG4gICAgXHQgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFnbClcbiAgICB7XG4gICAgICAgIC8vIGZhaWwsIG5vdCBhYmxlIHRvIGdldCBhIGNvbnRleHRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB3ZWJHTC4gVHJ5IHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXInKTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCB3YW50IHRvIHBoYXNlIHRoaXMgb3V0P1xuICAgIGdsLmlkID0gQ09OVEVYVF9VSUQrKztcblxuICAgIHJldHVybiBnbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb250ZXh0O1xuXG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgc2V0VmVydGV4QXR0cmliQXJyYXlzID0gZnVuY3Rpb24gKGdsLCBhdHRyaWJzKVxue1x0XG4gICAvLyBjb25zb2xlLmxvZyhnbC5pZClcbiAgICB2YXIgZGF0YSA9IEdMX01BUFtnbC5pZF07XG5cbiAgICBpZighZGF0YSlcbiAgICB7XG5cdCAgIHZhciBtYXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cdFx0ZGF0YSA9IEdMX01BUFtnbC5pZF0gPSB7dGVtcEF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKVxuXHRcdFx0XHQgXHQgXHRcdCAgICxhdHRyaWJTdGF0ZTpuZXcgQXJyYXkobWF4QXR0cmlicyl9O1xuXHR9XG5cdFxuICAgIHZhciBpLFxuICAgIFx0dGVtcEF0dHJpYlN0YXRlID0gZGF0YS50ZW1wQXR0cmliU3RhdGUsXG4gICAgXHRhdHRyaWJTdGF0ZSA9IGRhdGEuYXR0cmliU3RhdGU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAoaSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbaV0ubG9jYXRpb25dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAoYXR0cmliU3RhdGVbaV0gIT09IHRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmliU3RhdGVbaV0gPSB0ZW1wQXR0cmliU3RhdGVbaV07XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmF0dHJpYlN0YXRlW2ldKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VmVydGV4QXR0cmliQXJyYXlzOyIsIlxuXG5cblxuY29tcGlsZVByb2dyYW0gPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcbiAgICB2YXIgZ2xWZXJ0U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuVkVSVEVYX1NIQURFUiwgdmVydGV4U3JjKTtcbiAgICB2YXIgZ2xGcmFnU2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNyYyk7XG5cbiAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbEZyYWdTaGFkZXIpO1xuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgLy8gaWYgbGlua2luZyBmYWlscywgdGhlbiBsb2cgYW5kIGNsZWFudXBcbiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUGl4aS5qcyBFcnJvcjogQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVyLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5WQUxJREFURV9TVEFUVVMnLCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLlZBTElEQVRFX1NUQVRVUykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5nZXRFcnJvcigpJywgZ2wuZ2V0RXJyb3IoKSk7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBwcm9ncmFtIGluZm8gbG9nLCBsb2cgaXRcbiAgICAgICAgaWYgKGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pICE9PSAnJylcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaXhpLmpzIFdhcm5pbmc6IGdsLmdldFByb2dyYW1JbmZvTG9nKCknLCBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICBwcm9ncmFtID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBzb21lIHNoYWRlcnNcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xGcmFnU2hhZGVyKTtcblxuICAgIHJldHVybiBwcm9ncmFtO1xufVxuXG52YXIgY29tcGlsZVNoYWRlciA9IGZ1bmN0aW9uIChnbCwgdHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzcmMpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZVByb2dyYW07XG5cbiIsIlxuXG52YXIgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkgXG57XG4gICAgc3dpdGNoICh0eXBlKVxuICAgIHtcbiAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAndmVjMic6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzQnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSg0ICogc2l6ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgY2FzZSAnc2FtcGxlcjJEJzpcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWMyJzogICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnaXZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDMgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjNCc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDQgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdib29sJzogICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMyJzpcblxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSggMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMzJzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWM0JzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ21hdDInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Myc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMV0pO1xuXG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDAsIDAsIDFdKTtcbiAgICB9XG59XG5cbnZhciBib29sZWFuQXJyYXkgPSBmdW5jdGlvbihzaXplKVxue1xuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgYXJyYXlbaV0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRWYWx1ZTtcbiIsIlxudmFyIG1hcFR5cGUgPSByZXF1aXJlKCcuL21hcFR5cGUnKTtcbnZhciBtYXBTaXplID0gcmVxdWlyZSgnLi9tYXBTaXplJyk7XG5cbnZhciBleHRyYWN0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICB2YXIgdG90YWxBdHRyaWJ1dGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxBdHRyaWJ1dGVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGF0dHJpYkRhdGEgPSBnbC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaSk7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgYXR0cmliRGF0YS50eXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYkRhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOnR5cGUsXG4gICAgICAgICAgICBzaXplOm1hcFNpemUodHlwZSksXG4gICAgICAgICAgICBsb2NhdGlvbjpnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBhdHRyaWJEYXRhLm5hbWUpLFxuICAgICAgICAgICAgLy9UT0RPIC0gbWFrZSBhbiBhdHRyaWJ1dGUgb2JqZWN0XG4gICAgICAgICAgICBwb2ludGVyOmZ1bmN0aW9uKHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpe1xuXG4gICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5sb2NhdGlvbix0aGlzLnNpemUsIHR5cGUgfHwgZ2wuRkxPQVQsIG5vcm1hbGl6ZWQgfHwgZmFsc2UsIHN0cmlkZSB8fCAwLCBzdGFydCB8fCAwKTsgXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYXR0cmlidXRlczsgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RBdHRyaWJ1dGVzO1xuXG4iLCJ2YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIGRlZmF1bHRWYWx1ZSA9IHJlcXVpcmUoJy4vZGVmYXVsdFZhbHVlJyk7XG5cblxudmFyIGV4dHJhY3RVbmlmb3JtcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuXHR2YXIgdW5pZm9ybXMgPSB7fTtcblx0XG4gICAgdmFyIHRvdGFsVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxVbmlmb3JtczsgaSsrKSBcbiAgICB7XG4gICAgXHR2YXIgdW5pZm9ybURhdGEgPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpO1xuICAgIFx0dmFyIG5hbWUgPSB1bmlmb3JtRGF0YS5uYW1lLnJlcGxhY2UoL1xcWy4qP1xcXS8sIFwiXCIpO1xuICAgICAgICB2YXIgdHlwZSA9IG1hcFR5cGUoZ2wsIHVuaWZvcm1EYXRhLnR5cGUgKTtcblxuICAgIFx0dW5pZm9ybXNbbmFtZV0gPSB7XG4gICAgXHRcdHR5cGU6dHlwZSxcbiAgICBcdFx0c2l6ZTp1bmlmb3JtRGF0YS5zaXplLFxuICAgIFx0XHRsb2NhdGlvbjpnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksXG4gICAgXHRcdHZhbHVlOmRlZmF1bHRWYWx1ZSh0eXBlLCB1bmlmb3JtRGF0YS5zaXplKVxuICAgIFx0fVxuICAgIH07XG5cdFxuXHRyZXR1cm4gdW5pZm9ybXM7XHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHRyYWN0VW5pZm9ybXM7XG5cbiIsIlxudmFyIGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IGZ1bmN0aW9uKGdsLCB1bmlmb3JtRGF0YSlcbntcbiAgICAvLyB0aGlzIGlzIHRoZSBvYmplY3Qgd2Ugd2lsbCBiZSBzZW5kaW5nIGJhY2suXG4gICAgLy8gYW4gb2JqZWN0IGhpZXJhY2h5IHdpbGwgYmUgY3JlYXRlZCBmb3Igc3RydWN0c1xuICAgIHZhciB1bmlmb3JtcyA9IHtkYXRhOnt9fTtcblxuICAgIHVuaWZvcm1zLmdsID0gZ2w7XG4gICAgXG4gICAgdmFyIHVuaWZvcm1LZXlzPSBPYmplY3Qua2V5cyh1bmlmb3JtRGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1LZXlzLmxlbmd0aDsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBmdWxsTmFtZSA9IHVuaWZvcm1LZXlzW2ldXG5cbiAgICAgICAgdmFyIG5hbWVUb2tlbnMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAxXTtcblxuICAgICAgICB2YXIgdW5pZm9ybUdyb3VwID0gZ2V0VW5pZm9ybUdyb3VwKG5hbWVUb2tlbnMsIHVuaWZvcm1zKTtcblxuICAgICAgICB2YXIgdW5pZm9ybSA9ICB1bmlmb3JtRGF0YVtmdWxsTmFtZV07XG4gICAgICAgIHVuaWZvcm1Hcm91cC5kYXRhW25hbWVdID0gdW5pZm9ybTtcblxuICAgICAgICB1bmlmb3JtR3JvdXAuZ2wgPSBnbDtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5pZm9ybUdyb3VwLCBuYW1lLCB7XG4gICAgICAgICAgICBnZXQ6IGdlbmVyYXRlR2V0dGVyKG5hbWUpLFxuICAgICAgICAgICAgc2V0OiBnZW5lcmF0ZVNldHRlcihuYW1lLCB1bmlmb3JtKVxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdW5pZm9ybXM7XG59XG5cbnZhciBnZW5lcmF0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpXG57XG5cdHZhciB0ZW1wbGF0ZSA9IGdldHRlclRlbXBsYXRlLnJlcGxhY2UoJyUlJywgbmFtZSk7XG5cdHJldHVybiBuZXcgRnVuY3Rpb24odGVtcGxhdGUpO1xufVxuXG52YXIgZ2VuZXJhdGVTZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCB1bmlmb3JtKVxue1xuICAgIHZhciB0ZW1wbGF0ZSA9IHNldHRlclRlbXBsYXRlLnJlcGxhY2UoLyUlL2csIG5hbWUpO1xuICAgIHZhciBzZXRUZW1wbGF0ZVxuICAgIFxuICAgIGlmKHVuaWZvcm0uc2l6ZSA9PT0gMSlcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19TSU5HTEVfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzZXRUZW1wbGF0ZSA9IEdMU0xfVE9fQVJSQVlfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cblxuICAgIGlmKHNldFRlbXBsYXRlKVxuICAgIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gXCJcXG50aGlzLmdsLlwiICsgc2V0VGVtcGxhdGUgKyBcIjtcIjtcbiAgICB9XG5cbiAgXHRyZXR1cm4gbmV3IEZ1bmN0aW9uKCd2YWx1ZScsIHRlbXBsYXRlKTtcbn1cblxudmFyIGdldFVuaWZvcm1Hcm91cCA9IGZ1bmN0aW9uKG5hbWVUb2tlbnMsIHVuaWZvcm0pXG57XG4gICAgdmFyIGN1ciA9IHVuaWZvcm07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVUb2tlbnMubGVuZ3RoIC0gMTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBvID0gY3VyW25hbWVUb2tlbnNbaV1dIHx8IHtkYXRhOnt9fTtcbiAgICAgICAgY3VyW25hbWVUb2tlbnNbaV1dID0gbztcbiAgICAgICAgY3VyID0gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGN1clxufVxuXG52YXIgZ2V0dGVyVGVtcGxhdGUgPSBbXG4gICAgJ3JldHVybiB0aGlzLmRhdGEuJSUudmFsdWU7Jyxcbl0uam9pbignXFxuJyk7XG5cbnZhciBzZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAndGhpcy5kYXRhLiUlLnZhbHVlID0gdmFsdWU7JyxcbiAgICAndmFyIGxvY2F0aW9uID0gdGhpcy5kYXRhLiUlLmxvY2F0aW9uOydcbl0uam9pbignXFxuJyk7XG5cblxudmFyIEdMU0xfVE9fU0lOR0xFX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ3ZlYzInOiAgICAgJ3VuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ3ZlYzMnOiAgICAgJ3VuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG4gICAgXHRcbiAgICAnaW50JzogICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnaXZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcblxuICAgICdtYXQyJzogICAgICd1bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0Myc6ICAgICAndW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG4gICAgJ21hdDQnOiAgICAgJ3VuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuXG4gICAgJ3NhbXBsZXIyRCc6J3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG52YXIgR0xTTF9UT19BUlJBWV9TRVRURVJTID0ge1xuXG4gICAgJ2Zsb2F0JzogICAgJ3VuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjNCc6ICAgICAndW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG4gICBcbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdDtcblxuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24odHlwZSkgXG57IFxuICAgIHJldHVybiBHTFNMX1RPX1NJWkVbdHlwZV07XG59XG5cblxudmFyIEdMU0xfVE9fU0laRSA9IHtcbiAgICAnZmxvYXQnOiAgICAxLFxuICAgICd2ZWMyJzogICAgIDIsXG4gICAgJ3ZlYzMnOiAgICAgMyxcbiAgICAndmVjNCc6ICAgICA0LFxuXG4gICAgJ2ludCc6ICAgICAgMSxcbiAgICAnaXZlYzInOiAgICAyLFxuICAgICdpdmVjMyc6ICAgIDMsXG4gICAgJ2l2ZWM0JzogICAgNCxcblxuICAgICdib29sJzogICAgIDEsXG4gICAgJ2J2ZWMyJzogICAgMixcbiAgICAnYnZlYzMnOiAgICAzLFxuICAgICdidmVjNCc6ICAgIDQsXG5cbiAgICAnbWF0Mic6ICAgICA0LFxuICAgICdtYXQzJzogICAgIDksXG4gICAgJ21hdDQnOiAgICAgMTYsXG5cbiAgICAnc2FtcGxlcjJEJzogIDFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24oZ2wsIHR5cGUpIFxue1xuICAgIGlmKCFHTF9UQUJMRSkgXG4gICAge1xuICAgICAgICB2YXIgdHlwZU5hbWVzID0gT2JqZWN0LmtleXMoR0xfVE9fR0xTTF9UWVBFUyk7XG5cbiAgICAgICAgR0xfVEFCTEUgPSB7fTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdHlwZU5hbWVzLmxlbmd0aDsgKytpKSBcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHRuID0gdHlwZU5hbWVzW2ldO1xuICAgICAgICAgICAgR0xfVEFCTEVbIGdsW3RuXSBdID0gR0xfVE9fR0xTTF9UWVBFU1t0bl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIEdMX1RBQkxFW3R5cGVdO1xufVxuXG52YXIgR0xfVEFCTEUgPSBudWxsO1xuXG52YXIgR0xfVE9fR0xTTF9UWVBFUyA9IHtcbiAgJ0ZMT0FUJzogICAgICAgJ2Zsb2F0JyxcbiAgJ0ZMT0FUX1ZFQzInOiAgJ3ZlYzInLFxuICAnRkxPQVRfVkVDMyc6ICAndmVjMycsXG4gICdGTE9BVF9WRUM0JzogICd2ZWM0JyxcblxuICAnSU5UJzogICAgICAgICAnaW50JyxcbiAgJ0lOVF9WRUMyJzogICAgJ2l2ZWMyJyxcbiAgJ0lOVF9WRUMzJzogICAgJ2l2ZWMzJyxcbiAgJ0lOVF9WRUM0JzogICAgJ2l2ZWM0JyxcbiAgXG4gICdCT09MJzogICAgICAgICdib29sJyxcbiAgJ0JPT0xfVkVDMic6ICAgJ2J2ZWMyJyxcbiAgJ0JPT0xfVkVDMyc6ICAgJ2J2ZWMzJyxcbiAgJ0JPT0xfVkVDNCc6ICAgJ2J2ZWM0JyxcbiAgXG4gICdGTE9BVF9NQVQyJzogICdtYXQyJyxcbiAgJ0ZMT0FUX01BVDMnOiAgJ21hdDMnLFxuICAnRkxPQVRfTUFUNCc6ICAnbWF0NCcsXG4gIFxuICAnU0FNUExFUl8yRCc6ICAnc2FtcGxlcjJEJyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwU2l6ZTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvQm9vbCh2KSB7XG4gICAgICAgIHJldHVybiAhIXY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vdElkKHYpIHtcbiAgICAgICAgcmV0dXJuICF2O1xuICAgIH1cblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcHJldmlvdXNfYXN5bmM7XG5cbiAgICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gICAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZiB8fFxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgdGhpcztcblxuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgICAgcHJldmlvdXNfYXN5bmMgPSByb290LmFzeW5jO1xuICAgIH1cblxuICAgIGFzeW5jLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBwcmV2aW91c19hc3luYztcbiAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbmx5X29uY2UoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIC8vIFBvcnRlZCBmcm9tIHVuZGVyc2NvcmUuanMgaXNPYmplY3RcbiAgICB2YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9pc0FycmF5TGlrZShhcnIpIHtcbiAgICAgICAgcmV0dXJuIF9pc0FycmF5KGFycikgfHwgKFxuICAgICAgICAgICAgLy8gaGFzIGEgcG9zaXRpdmUgaW50ZWdlciBsZW5ndGggcHJvcGVydHlcbiAgICAgICAgICAgIHR5cGVvZiBhcnIubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICBhcnIubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggJSAxID09PSAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2FycmF5RWFjaChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfbWFwKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdG9yKGFycltpbmRleF0sIGluZGV4LCBhcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JhbmdlKGNvdW50KSB7XG4gICAgICAgIHJldHVybiBfbWFwKEFycmF5KGNvdW50KSwgZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGk7IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9yZWR1Y2UoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBfYXJyYXlFYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9mb3JFYWNoT2Yob2JqZWN0LCBpdGVyYXRvcikge1xuICAgICAgICBfYXJyYXlFYWNoKF9rZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnIsIGl0ZW0pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfa2V5SXRlcmF0b3IoY29sbCkge1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB2YXIgbGVuO1xuICAgICAgICB2YXIga2V5cztcbiAgICAgICAgaWYgKF9pc0FycmF5TGlrZShjb2xsKSkge1xuICAgICAgICAgICAgbGVuID0gY29sbC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBsZW4gPyBpIDogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXlzID0gX2tleXMoY29sbCk7XG4gICAgICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGtleXNbaV0gOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpbWlsYXIgdG8gRVM2J3MgcmVzdCBwYXJhbSAoaHR0cDovL2FyaXlhLm9maWxhYnMuY29tLzIwMTMvMDMvZXM2LWFuZC1yZXN0LXBhcmFtZXRlci5odG1sKVxuICAgIC8vIFRoaXMgYWNjdW11bGF0ZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byBhbiBhcnJheSwgYWZ0ZXIgYSBnaXZlbiBpbmRleC5cbiAgICAvLyBGcm9tIHVuZGVyc2NvcmUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzIxNDApLlxuICAgIGZ1bmN0aW9uIF9yZXN0UGFyYW0oZnVuYywgc3RhcnRJbmRleCkge1xuICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCk7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSB1bnVzZWQgYnV0IGhhbmRsZSBjYXNlcyBvdXRzaWRlIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50OlxuICAgICAgICAgICAgLy8gdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICAgICAgICAvLyBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAvLyAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICAgICAgICAvLyByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBleHBvcnRlZCBhc3luYyBtb2R1bGUgZnVuY3Rpb25zIC8vLy9cblxuICAgIC8vLy8gbmV4dFRpY2sgaW1wbGVtZW50YXRpb24gd2l0aCBicm93c2VyLWNvbXBhdGlibGUgZmFsbGJhY2sgLy8vL1xuXG4gICAgLy8gY2FwdHVyZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZSB0byBndWFyZCBhZ2FpbnN0IGZha2VUaW1lciBtb2Nrc1xuICAgIHZhciBfc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzZXRJbW1lZGlhdGU7XG5cbiAgICB2YXIgX2RlbGF5ID0gX3NldEltbWVkaWF0ZSA/IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgIF9zZXRJbW1lZGlhdGUoZm4pO1xuICAgIH0gOiBmdW5jdGlvbihmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBfZGVsYXk7XG4gICAgfVxuICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IF9zZXRJbW1lZGlhdGUgPyBfZGVsYXkgOiBhc3luYy5uZXh0VGljaztcblxuXG4gICAgYXN5bmMuZm9yRWFjaCA9XG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9XG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mU2VyaWVzKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG5cbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPVxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9lYWNoT2ZMaW1pdChsaW1pdCkoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoT2YgPVxuICAgIGFzeW5jLmVhY2hPZiA9IGZ1bmN0aW9uIChvYmplY3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBvYmplY3QgPSBvYmplY3QgfHwgW107XG5cbiAgICAgICAgdmFyIGl0ZXIgPSBfa2V5SXRlcmF0b3Iob2JqZWN0KTtcbiAgICAgICAgdmFyIGtleSwgY29tcGxldGVkID0gMDtcblxuICAgICAgICB3aGlsZSAoKGtleSA9IGl0ZXIoKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpdGVyYXRvcihvYmplY3Rba2V5XSwga2V5LCBvbmx5X29uY2UoZG9uZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gMCkgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZC0tO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBrZXkgaXMgbnVsbCBpbiBjYXNlIGl0ZXJhdG9yIGlzbid0IGV4aGF1c3RlZFxuICAgICAgICAgICAgLy8gYW5kIGRvbmUgcmVzb2x2ZWQgc3luY2hyb25vdXNseS5cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gbnVsbCAmJiBjb21wbGV0ZWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZlNlcmllcyA9XG4gICAgYXN5bmMuZWFjaE9mU2VyaWVzID0gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iaiA9IG9iaiB8fCBbXTtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgdmFyIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRvcihvYmpba2V5XSwga2V5LCBvbmx5X29uY2UoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoaXRlcmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5mb3JFYWNoT2ZMaW1pdCA9XG4gICAgYXN5bmMuZWFjaE9mTGltaXQgPSBmdW5jdGlvbiAob2JqLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9lYWNoT2ZMaW1pdChsaW1pdCkob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZWFjaE9mTGltaXQobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBydW5uaW5nID0gMDtcbiAgICAgICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChkb25lICYmIHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWwoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZiwgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb1BhcmFsbGVsTGltaXQoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihfZWFjaE9mTGltaXQobGltaXQpLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvU2VyaWVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihhc3luYy5lYWNoT2ZTZXJpZXMsIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gX2lzQXJyYXlMaWtlKGFycikgPyBbXSA6IHt9O1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfYXN5bmNNYXApO1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLmluamVjdCA9XG4gICAgYXN5bmMuZm9sZGwgPVxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgaSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5mb2xkciA9XG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGlkZW50aXR5KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudHJhbnNmb3JtID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGl0ZXJhdG9yO1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBtZW1vO1xuICAgICAgICAgICAgbWVtbyA9IF9pc0FycmF5KGFycikgPyBbXSA6IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuZWFjaE9mKGFyciwgZnVuY3Rpb24odiwgaywgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHYsIGssIGNiKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleDogaW5kZXgsIHZhbHVlOiB4fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soX21hcChyZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICB9KSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMuc2VsZWN0ID1cbiAgICBhc3luYy5maWx0ZXIgPSBkb1BhcmFsbGVsKF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0TGltaXQgPVxuICAgIGFzeW5jLmZpbHRlckxpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID1cbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcblxuICAgIGZ1bmN0aW9uIF9yZWplY3QoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBfZmlsdGVyKGVhY2hmbiwgYXJyLCBmdW5jdGlvbih2YWx1ZSwgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgY2IoIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoZWFjaGZuLCBjaGVjaywgZ2V0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2IpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSBjYihnZXRSZXN1bHQoZmFsc2UsIHZvaWQgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWUoeCwgXywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNiKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2IgJiYgY2hlY2sodikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGdldFJlc3VsdCh0cnVlLCB4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGl0ZXJhdG9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGxpbWl0LCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBsaW1pdDtcbiAgICAgICAgICAgICAgICBlYWNoZm4oYXJyLCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMuYW55ID1cbiAgICBhc3luYy5zb21lID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIHRvQm9vbCwgaWRlbnRpdHkpO1xuXG4gICAgYXN5bmMuc29tZUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5hbGwgPVxuICAgIGFzeW5jLmV2ZXJ5ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIG5vdElkLCBub3RJZCk7XG5cbiAgICBhc3luYy5ldmVyeUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgbm90SWQsIG5vdElkKTtcblxuICAgIGZ1bmN0aW9uIF9maW5kR2V0UmVzdWx0KHYsIHgpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIGFzeW5jLmRldGVjdCA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mU2VyaWVzLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdExpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgaWRlbnRpdHksIF9maW5kR2V0UmVzdWx0KTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoY29tcGFyYXRvciksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgb3B0aW9uYWwsIHNoaWZ0IHRoZSBhcmdzLlxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHJlbWFpbmluZ1Rhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoZm4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gX2luZGV4T2YobGlzdGVuZXJzLCBmbik7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgX2FycmF5RWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2FycmF5RWFjaChrZXlzLCBmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSBfaXNBcnJheSh0YXNrc1trXSkgPyB0YXNrc1trXTogW3Rhc2tzW2tdXTtcbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBfZm9yRWFjaE9mKHJlc3VsdHMsIGZ1bmN0aW9uKHZhbCwgcmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCB0YXNrLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWFkLWxvY2tzXG4gICAgICAgICAgICB2YXIgbGVuID0gcmVxdWlyZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGRlcDtcbiAgICAgICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgICAgICAgIGlmICghKGRlcCA9IHRhc2tzW3JlcXVpcmVzW2xlbl1dKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhcyBpbmV4aXN0YW50IGRlcGVuZGVuY3knKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc0FycmF5KGRlcCkgJiYgX2luZGV4T2YoZGVwLCBrKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGN5Y2xpYyBkZXBlbmRlbmNpZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kgJiYgX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcblxuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHRpbWVzOiBERUZBVUxUX1RJTUVTLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IERFRkFVTFRfSU5URVJWQUxcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgdCA9PT0gJ251bWJlcicpe1xuICAgICAgICAgICAgICAgIGFjYy50aW1lcyA9IHBhcnNlSW50KHQsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiB0ID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodC50aW1lcywgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICAgICAgYWNjLmludGVydmFsID0gcGFyc2VJbnQodC5pbnRlcnZhbCwgMTApIHx8IERFRkFVTFRfSU5URVJWQUw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYXJndW1lbnQgdHlwZSBmb3IgXFwndGltZXNcXCc6ICcgKyB0eXBlb2YgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDEgfHwgbGVuZ3RoID4gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyAtIG11c3QgYmUgZWl0aGVyICh0YXNrKSwgKHRhc2ssIGNhbGxiYWNrKSwgKHRpbWVzLCB0YXNrKSBvciAodGltZXMsIHRhc2ssIGNhbGxiYWNrKScpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA8PSAyICYmIHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGltZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0cywgdGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgb3B0cy50YXNrID0gdGFzaztcblxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVkVGFzayh3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQodGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5SW50ZXJ2YWwoaW50ZXJ2YWwpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKG9wdHMudGltZXMpIHtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5hbEF0dGVtcHQgPSAhKG9wdHMudGltZXMtPTEpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KG9wdHMudGFzaywgZmluYWxBdHRlbXB0KSk7XG4gICAgICAgICAgICAgICAgaWYoIWZpbmFsQXR0ZW1wdCAmJiBvcHRzLmludGVydmFsID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlJbnRlcnZhbChvcHRzLmludGVydmFsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBvcHRzLmNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNhbGxiYWNrIGlzIHBhc3NlZCwgcnVuIHRoaXMgYXMgYSBjb250cm9sbCBmbG93XG4gICAgICAgIHJldHVybiBvcHRzLmNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrO1xuICAgIH07XG5cbiAgICBhc3luYy53YXRlcmZhbGwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGlmICghX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3cmFwSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCh3cmFwSXRlcmF0b3IobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbnN1cmVBc3luYyhpdGVyYXRvcikuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3BhcmFsbGVsKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgbm9vcDtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsIGZ1bmN0aW9uICh0YXNrLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0YXNrKF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLnBhcmFsbGVsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoYXN5bmMuZWFjaE9mLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24odGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoX2VhY2hPZkxpbWl0KGxpbWl0KSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2ZTZXJpZXMsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VDYWxsYmFjayhpbmRleCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYWtlQ2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIGFzeW5jLmFwcGx5ID0gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGNhbGxBcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoY2FsbEFyZ3MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb25jYXQoZWFjaGZuLCBhcnIsIGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIGZuKHgsIGZ1bmN0aW9uIChlcnIsIHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICB2YXIgbmV4dCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdC5hcHBseSh0aGlzLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihuZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gKytjYWxscyA8PSAxIHx8IHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9VbnRpbCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmR1cmluZyA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hlY2spO1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cnV0aCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0KGNoZWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9EdXJpbmcgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIGFzeW5jLmR1cmluZyhmdW5jdGlvbihuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY2FsbHMrKyA8IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBtdXN0IG5vdCBiZSB6ZXJvJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sgfHwgbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBxLnRhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfbmV4dChxLCB0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgd29ya2VycyAtPSAxO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHdvcmtlcnNMaXN0LCBmdW5jdGlvbiAod29ya2VyLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtlciA9PT0gdGFzayAmJiAhcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgdGFza3M6IFtdLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IGNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbm9vcCxcbiAgICAgICAgICAgIGVtcHR5OiBub29wLFxuICAgICAgICAgICAgZHJhaW46IG5vb3AsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHEuZHJhaW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHRydWUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFxLnBhdXNlZCAmJiB3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSh3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBxLnBheWxvYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEucGF5bG9hZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEudGFza3MubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfbWFwKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaCh0YXNrc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UoX25leHQocSwgdGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdW1lQ291bnQgPSBNYXRoLm1pbihxLmNvbmN1cnJlbmN5LCBxLnRhc2tzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSByZXN1bWVDb3VudDsgdysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgcSA9IF9xdWV1ZShmdW5jdGlvbiAoaXRlbXMsIGNiKSB7XG4gICAgICAgICAgICB3b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICAgIGVuZCA9IHNlcXVlbmNlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGJlZyArICgoZW5kIC0gYmVnICsgMSkgPj4+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3BcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoX2JpbmFyeVNlYXJjaChxLnRhc2tzLCBpdGVtLCBfY29tcGFyZVRhc2tzKSArIDEsIDAsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBxLnVuc2hpZnQ7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLmNhcmdvID0gZnVuY3Rpb24gKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gX3F1ZXVlKHdvcmtlciwgMSwgcGF5bG9hZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9jb25zb2xlX2ZuKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGlkZW50aXR5O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIG1lbW9pemVkKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGtleSBpbiBtZW1vKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF90aW1lcyhtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBtYXBwZXIoX3JhbmdlKGNvdW50KSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy50aW1lcyA9IF90aW1lcyhhc3luYy5tYXApO1xuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gX3RpbWVzKGFzeW5jLm1hcFNlcmllcyk7XG4gICAgYXN5bmMudGltZXNMaW1pdCA9IGZ1bmN0aW9uIChjb3VudCwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMubWFwTGltaXQoX3JhbmdlKGNvdW50KSwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBub29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW19yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgbmV4dGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfSldKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoYXQsIFtlcnJdLmNvbmNhdChyZXN1bHRzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5zZXEuYXBwbHkobnVsbCwgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBfYXBwbHlFYWNoKGVhY2hmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbihmbnMsIGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBnbyA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlYWNoZm4oZm5zLCBmdW5jdGlvbiAoZm4sIF8sIGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5hcHBseUVhY2ggPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZik7XG4gICAgYXN5bmMuYXBwbHlFYWNoU2VyaWVzID0gX2FwcGx5RWFjaChhc3luYy5lYWNoT2ZTZXJpZXMpO1xuXG5cbiAgICBhc3luYy5mb3JldmVyID0gZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZG9uZSA9IG9ubHlfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgdmFyIHRhc2sgPSBlbnN1cmVBc3luYyhmbik7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVBc3luYyhmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuXG4gICAgYXN5bmMuY29uc3RhbnQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICB2YXIgYXJncyA9IFtudWxsXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXN5bmMud3JhcFN5bmMgPVxuICAgIGFzeW5jLmFzeW5jaWZ5ID0gZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAoX2lzT2JqZWN0KHJlc3VsdCkgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLm1lc3NhZ2UgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBOb2RlLmpzXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG4gICAgfVxuICAgIC8vIEFNRCAvIFJlcXVpcmVKU1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG5cdCAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXG5cdCAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cblx0ICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSlcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cblx0ICogQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuXHQgKiBVbmljb2RlIHN0cmluZy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gJ3huLS0nICsgZW5jb2RlKHN0cmluZylcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG5cdHB1bnljb2RlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHQndmVyc2lvbic6ICcxLjMuMicsXG5cdFx0LyoqXG5cdFx0ICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHRcdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMpIHtcblx0XHRcdC8vIGluIE5vZGUuanMsIGlvLmpzLCBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IHB1bnljb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5wdW55Y29kZSA9IHB1bnljb2RlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUpIHJldHVybiB0cmlhbmdsZXM7XG5cbiAgICB2YXIgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgc2l6ZTtcblxuICAgIGlmIChoYXNIb2xlcykgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKTtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG4gICAgICAgIG1pblggPSBtYXhYID0gZGF0YVswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xuICAgICAgICAgICAgeSA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIHNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIHNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgICAgICBpLCBqLCBsYXN0O1xuXG4gICAgLy8gY2FsY3VsYXRlIG9yaWdpbmFsIHdpbmRpbmcgb3JkZXIgb2YgYSBwb2x5Z29uIHJpbmdcbiAgICBmb3IgKGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cblxuICAgIC8vIGxpbmsgcG9pbnRzIGludG8gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuICAgIGlmIChjbG9ja3dpc2UgPT09IChzdW0gPiAwKSkge1xuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgc2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChzaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0aWNlIGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZWFyLCB0cmlhbmdsZXMsIGRpbSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDIpO1xuXG4gICAgICAgICAgICAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgd2hpbGUgKHAgIT09IGVhci5wcmV2KSB7XG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG4gICAgdmFyIG1pblRYID0gYS54IDwgYi54ID8gKGEueCA8IGMueCA/IGEueCA6IGMueCkgOiAoYi54IDwgYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoYS55IDwgYy55ID8gYS55IDogYy55KSA6IChiLnkgPCBjLnkgPyBiLnkgOiBjLnkpLFxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1heFRZID0gYS55ID4gYi55ID8gKGEueSA+IGMueSA/IGEueSA6IGMueSkgOiAoYi55ID4gYy55ID8gYi55IDogYy55KTtcblxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgdmFyIG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBzaXplKSxcbiAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgdmFyIHAgPSBlYXIubmV4dFo7XG5cbiAgICB3aGlsZSAocCAmJiBwLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgcCA9IGVhci5wcmV2WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIC8vIGEgc2VsZi1pbnRlcnNlY3Rpb24gd2hlcmUgZWRnZSAodltpLTFdLHZbaV0pIGludGVyc2VjdHMgKHZbaSsxXSx2W2krMl0pXG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcblxuICAgICAgICAgICAgcCA9IHN0YXJ0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBwO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBzdG9wID0gbSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtLm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBtLnggJiZcbiAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoaHkgPCBtLnkgPyBoeCA6IHF4LCBoeSwgbS54LCBtLnksIGh5IDwgbS55ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxU2l6ZSA9PT0gMCB8fCAhcSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwLnogPD0gcS56KSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBzaXplIG9mIHRoZSBkYXRhIGJvdW5kaW5nIGJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlXG4gICAgeCA9IDMyNzY3ICogKHggLSBtaW5YKSAvIHNpemU7XG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAvIHNpemU7XG5cbiAgICB4ID0gKHggfCAoeCA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB4ID0gKHggfCAoeCA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnggPCBsZWZ0bW9zdC54KSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGVxdWFscyhhLCBiKSB8fCBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmXG4gICAgICAgICAgIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYik7XG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgcmV0dXJuIGFyZWEocDEsIHExLCBwMikgPiAwICE9PSBhcmVhKHAxLCBxMSwgcTIpID4gMCAmJlxuICAgICAgICAgICBhcmVhKHAyLCBxMiwgcDEpID4gMCAhPT0gYXJlYShwMiwgcTIsIHExKSA+IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGljZSBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0aWNlIG5vZGVzIGluIGEgcG9seWdvbiByaW5nXG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZVxuICAgIHRoaXMueiA9IG51bGw7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG5cbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuICAgIHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1xuLy8gV2Ugc3RvcmUgb3VyIEVFIG9iamVjdHMgaW4gYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gYH5gIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IG92ZXJyaWRkZW4gb3Jcbi8vIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vIFdlIGFsc28gYXNzdW1lIHRoYXQgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBldmVudCBuYW1lXG4vLyBpcyBhbiBFUzYgU3ltYm9sLlxuLy9cbnZhciBwcmVmaXggPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJyA/ICd+JyA6IGZhbHNlO1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIEV2ZW50RW1pdHRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgQ29udGV4dCBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgZW1pdCBvbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIE1pbmltYWwgRXZlbnRFbWl0dGVyIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkgeyAvKiBOb3RoaW5nIHRvIHNldCAqLyB9XG5cbi8qKlxuICogSG9sZHMgdGhlIGFzc2lnbmVkIEV2ZW50RW1pdHRlcnMgYnkgbmFtZS5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiBhIGxpc3Qgb2YgYXNzaWduZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZXhpc3RzIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7QXJyYXl8Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50LCBleGlzdHMpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGF2YWlsYWJsZSA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoZXhpc3RzKSByZXR1cm4gISFhdmFpbGFibGU7XG4gIGlmICghYXZhaWxhYmxlKSByZXR1cm4gW107XG4gIGlmIChhdmFpbGFibGUuZm4pIHJldHVybiBbYXZhaWxhYmxlLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGF2YWlsYWJsZS5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBhdmFpbGFibGVbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIEVtaXQgYW4gZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSW5kaWNhdGlvbiBpZiB3ZSd2ZSBlbWl0dGVkIGFuIGV2ZW50LlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyBFdmVudExpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdG9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgdGhpcylcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgdGhpcy5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lcjtcbiAgZWxzZSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XS5mbikgdGhpcy5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gICAgZWxzZSB0aGlzLl9ldmVudHNbZXZ0XSA9IFtcbiAgICAgIHRoaXMuX2V2ZW50c1tldnRdLCBsaXN0ZW5lclxuICAgIF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGFuIEV2ZW50TGlzdGVuZXIgdGhhdCdzIG9ubHkgY2FsbGVkIG9uY2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzLCB0cnVlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2Ugd2FudCB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgdGhhdCB3ZSBuZWVkIHRvIGZpbmQuXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IE9ubHkgcmVtb3ZlIGxpc3RlbmVycyBtYXRjaGluZyB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25jZSBsaXN0ZW5lcnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBldmVudHMgPSBbXTtcblxuICBpZiAoZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgIGxpc3RlbmVycy5mbiAhPT0gZm5cbiAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVycy5vbmNlKVxuICAgICAgICB8fCAoY29udGV4dCAmJiBsaXN0ZW5lcnMuY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuXG4gICAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKVxuICAgICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAvL1xuICBpZiAoZXZlbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW2V2dF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgb3Igb25seSB0aGUgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmVycyBmb3IuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKGV2ZW50KSBkZWxldGUgdGhpcy5fZXZlbnRzW3ByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRdO1xuICBlbHNlIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFwcGx5IGFueW1vcmUuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4ndXNlIHN0cmljdCc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiFcbiAqIGFzeW5jXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jXG4gKlxuICogQ29weXJpZ2h0IDIwMTAtMjAxNCBDYW9sYW4gTWNNYWhvblxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbi8qanNoaW50IG9uZXZhcjogZmFsc2UsIGluZGVudDo0ICovXG4vKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cbihmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXN5bmMgPSB7fTtcblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcm9vdCwgcHJldmlvdXNfYXN5bmM7XG5cbiAgICByb290ID0gdGhpcztcbiAgICBpZiAocm9vdCAhPSBudWxsKSB7XG4gICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWQpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkocm9vdCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8gY3Jvc3MtYnJvd3NlciBjb21wYXRpYmxpdHkgZnVuY3Rpb25zIC8vLy9cblxuICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgdmFyIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG5cbiAgICB2YXIgX2VhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBfbWFwID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgaWYgKGFyci5tYXApIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIubWFwKGl0ZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IoeCwgaSwgYSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHZhciBfcmVkdWNlID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIG1lbW8pIHtcbiAgICAgICAgaWYgKGFyci5yZWR1Y2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGl0ZXJhdG9yLCBtZW1vKTtcbiAgICAgICAgfVxuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICBtZW1vID0gaXRlcmF0b3IobWVtbywgeCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuXG4gICAgdmFyIF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgX2VhY2goYXJyLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgb25seV9vbmNlKGRvbmUpICk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2ggPSBhc3luYy5lYWNoO1xuXG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICB2YXIgaXRlcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGFycltjb21wbGV0ZWRdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID0gYXN5bmMuZWFjaFNlcmllcztcblxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZuID0gX2VhY2hMaW1pdChsaW1pdCk7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIFthcnIsIGl0ZXJhdG9yLCBjYWxsYmFja10pO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaExpbWl0ID0gYXN5bmMuZWFjaExpbWl0O1xuXG4gICAgdmFyIF9lYWNoTGltaXQgPSBmdW5jdGlvbiAobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgaWYgKCFhcnIubGVuZ3RoIHx8IGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVwbGVuaXNoICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiBzdGFydGVkIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoYXJyW3N0YXJ0ZWQgLSAxXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB2YXIgZG9QYXJhbGxlbCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvUGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKGxpbWl0LCBmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFtfZWFjaExpbWl0KGxpbWl0KV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBkb1NlcmllcyA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoU2VyaWVzXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBfYXN5bmNNYXAgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1t4LmluZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9tYXBMaW1pdChsaW1pdCkoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB2YXIgX21hcExpbWl0ID0gZnVuY3Rpb24obGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGRvUGFyYWxsZWxMaW1pdChsaW1pdCwgX2FzeW5jTWFwKTtcbiAgICB9O1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihtZW1vLCB4LCBmdW5jdGlvbiAoZXJyLCB2KSB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGluamVjdCBhbGlhc1xuICAgIGFzeW5jLmluamVjdCA9IGFzeW5jLnJlZHVjZTtcbiAgICAvLyBmb2xkbCBhbGlhc1xuICAgIGFzeW5jLmZvbGRsID0gYXN5bmMucmVkdWNlO1xuXG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSkucmV2ZXJzZSgpO1xuICAgICAgICBhc3luYy5yZWR1Y2UocmV2ZXJzZWQsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICAvLyBmb2xkciBhbGlhc1xuICAgIGFzeW5jLmZvbGRyID0gYXN5bmMucmVkdWNlUmlnaHQ7XG5cbiAgICB2YXIgX2ZpbHRlciA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LnZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG4gICAgYXN5bmMuZmlsdGVyU2VyaWVzID0gZG9TZXJpZXMoX2ZpbHRlcik7XG4gICAgLy8gc2VsZWN0IGFsaWFzXG4gICAgYXN5bmMuc2VsZWN0ID0gYXN5bmMuZmlsdGVyO1xuICAgIGFzeW5jLnNlbGVjdFNlcmllcyA9IGFzeW5jLmZpbHRlclNlcmllcztcblxuICAgIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLnJlamVjdCA9IGRvUGFyYWxsZWwoX3JlamVjdCk7XG4gICAgYXN5bmMucmVqZWN0U2VyaWVzID0gZG9TZXJpZXMoX3JlamVjdCk7XG5cbiAgICB2YXIgX2RldGVjdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIG1haW5fY2FsbGJhY2spIHtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKHgpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZGV0ZWN0ID0gZG9QYXJhbGxlbChfZGV0ZWN0KTtcbiAgICBhc3luYy5kZXRlY3RTZXJpZXMgPSBkb1NlcmllcyhfZGV0ZWN0KTtcblxuICAgIGFzeW5jLnNvbWUgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbnkgYWxpYXNcbiAgICBhc3luYy5hbnkgPSBhc3luYy5zb21lO1xuXG4gICAgYXN5bmMuZXZlcnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghdikge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gYWxsIGFsaWFzXG4gICAgYXN5bmMuYWxsID0gYXN5bmMuZXZlcnk7XG5cbiAgICBhc3luYy5zb3J0QnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgYXN5bmMubWFwKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAoZXJyLCBjcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHt2YWx1ZTogeCwgY3JpdGVyaWE6IGNyaXRlcmlhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoZm4pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGhcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldID09PSBmbikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdGFza0NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtYWluaW5nVGFza3MtLVxuICAgICAgICAgICAgX2VhY2gobGlzdGVuZXJzLnNsaWNlKDApLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIHZhciB0aGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZmluYWwgY2FsbGJhY2sgZnJvbSBjYWxsaW5nIGl0c2VsZiBpZiBpdCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdGhlQ2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9lYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKF9rZXlzKHJlc3VsdHMpLCBmdW5jdGlvbihya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIHN1YnNlcXVlbnQgZXJyb3JzIGhpdHRpbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUodGFza0NvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCBNYXRoLmFicyh0YXNrLmxlbmd0aCAtIDEpKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucmV0cnkgPSBmdW5jdGlvbih0aW1lcywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIERFRkFVTFRfVElNRVMgPSA1O1xuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcbiAgICAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHRpbWVzIG5vdCBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICAgICAgdGltZXMgPSBERUZBVUxUX1RJTUVTO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lcyBpcyBhIG51bWJlclxuICAgICAgICB0aW1lcyA9IHBhcnNlSW50KHRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgdmFyIHdyYXBwZWRUYXNrID0gZnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkUmVzdWx0cykge1xuICAgICAgICAgICAgdmFyIHJldHJ5QXR0ZW1wdCA9IGZ1bmN0aW9uKHRhc2ssIGZpbmFsQXR0ZW1wdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKGZ1bmN0aW9uKGVyciwgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKCFlcnIgfHwgZmluYWxBdHRlbXB0LCB7ZXJyOiBlcnIsIHJlc3VsdDogcmVzdWx0fSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXBwZWRSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcykge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KHRhc2ssICEodGltZXMtPTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBjYWxsYmFjaykoZGF0YS5lcnIsIGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrXG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJdGVyYXRvciA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGZ1bmN0aW9uKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGVhY2hmbi5tYXAodGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGVhY2hmbi5lYWNoKF9rZXlzKHRhc2tzKSwgZnVuY3Rpb24gKGssIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGFza3Nba10oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogYXN5bmMubWFwLCBlYWNoOiBhc3luYy5lYWNoIH0sIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogX21hcExpbWl0KGxpbWl0KSwgZWFjaDogX2VhY2hMaW1pdChsaW1pdCkgfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICBhc3luYy5tYXBTZXJpZXModGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5pdGVyYXRvciA9IGZ1bmN0aW9uICh0YXNrcykge1xuICAgICAgICB2YXIgbWFrZUNhbGxiYWNrID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmbi5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCB0YXNrcy5sZW5ndGggLSAxKSA/IG1ha2VDYWxsYmFjayhpbmRleCArIDEpOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KFxuICAgICAgICAgICAgICAgIG51bGwsIGFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgX2NvbmNhdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHIgPSByLmNvbmNhdCh5IHx8IFtdKTtcbiAgICAgICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRlc3QoKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLndoaWxzdCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvV2hpbHN0ID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAodGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMudW50aWwodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAoIXRlc3QuYXBwbHkobnVsbCwgYXJncykpIHtcbiAgICAgICAgICAgICAgICBhc3luYy5kb1VudGlsKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcG9zLCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxLnNhdHVyYXRlZCAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHEuZHJhaW4gPSBudWxsO1xuICAgICAgICAgICAgICBxLnRhc2tzID0gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gcS50YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocS5lbXB0eSAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLmRyYWluICYmIHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UobmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcih0YXNrLmRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSB0cnVlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSBxLmNvbmN1cnJlbmN5OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMucHJpb3JpdHlRdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG5cbiAgICAgICAgZnVuY3Rpb24gX2NvbXBhcmVUYXNrcyhhLCBiKXtcbiAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgIHZhciBiZWcgPSAtMSxcbiAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBzZXF1ZW5jZVttaWRdKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGJlZyA9IG1pZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiZWc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG5vcm1hbCBxdWV1ZVxuICAgICAgICB2YXIgcSA9IGFzeW5jLnF1ZXVlKHdvcmtlciwgY29uY3VycmVuY3kpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciB3b3JraW5nICAgICA9IGZhbHNlLFxuICAgICAgICAgICAgdGFza3MgICAgICAgPSBbXTtcblxuICAgICAgICB2YXIgY2FyZ28gPSB7XG4gICAgICAgICAgICB0YXNrczogdGFza3MsXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBudWxsLFxuICAgICAgICAgICAgZW1wdHk6IG51bGwsXG4gICAgICAgICAgICBkcmFpbjogbnVsbCxcbiAgICAgICAgICAgIGRyYWluZWQ6IHRydWUsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZ28uc2F0dXJhdGVkICYmIHRhc2tzLmxlbmd0aCA9PT0gcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ28uc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoY2FyZ28ucHJvY2Vzcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcygpIHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2luZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2FyZ28uZHJhaW4gJiYgIWNhcmdvLmRyYWluZWQpIGNhcmdvLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvLmRyYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRzID0gdHlwZW9mIHBheWxvYWQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0YXNrcy5zcGxpY2UoMCwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tzLnNwbGljZSgwLCB0YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRzID0gX21hcCh0cywgZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmKGNhcmdvLmVtcHR5KSBjYXJnby5lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHdvcmtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtlcihkcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JraW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKHRzLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjYXJnbztcbiAgICB9O1xuXG4gICAgdmFyIF9jb25zb2xlX2ZuID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZWFjaChhcmdzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbmFtZV0oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIG1lbW9ba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICBxW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfTtcblxuICAgIGFzeW5jLnVubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb3VudGVyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jLm1hcFNlcmllcyhjb3VudGVyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXEgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXN5bmMucmVkdWNlKGZucywgYXJncywgZnVuY3Rpb24gKG5ld2FyZ3MsIGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KFtmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1dKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy5jb21wb3NlID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICB2YXIgX2FwcGx5RWFjaCA9IGZ1bmN0aW9uIChlYWNoZm4sIGZucyAvKmFyZ3MuLi4qLykge1xuICAgICAgICB2YXIgZ28gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzLmNvbmNhdChbY2JdKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgICAgIHJldHVybiBnby5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuYXBwbHlFYWNoID0gZG9QYXJhbGxlbChfYXBwbHlFYWNoKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBkb1NlcmllcyhfYXBwbHlFYWNoKTtcblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbihuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsInZhciBhc3luYyAgICAgICA9IHJlcXVpcmUoJ2FzeW5jJyksXG4gICAgdXJsUGFyc2VyICAgPSByZXF1aXJlKCd1cmwnKSxcbiAgICBSZXNvdXJjZSAgICA9IHJlcXVpcmUoJy4vUmVzb3VyY2UnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgbXVsdGlwbGUgcmVzb3VyY2VzIHRvIGxvYWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KSB7XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICBjb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByb2dyZXNzIHBlcmNlbnQgb2YgdGhlIGxvYWRlciBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRpbmcgc3RhdGUgb2YgdGhlIGxvYWRlciwgdHJ1ZSBpZiBpdCBpcyBjdXJyZW50bHkgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdG90YWwgcHJvZ3Jlc3MgdGhhdCBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGJlZm9yZSBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaWRkbGV3YXJlIHRvIHJ1biBhZnRlciBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfbG9hZFJlc291cmNlYCBmdW5jdGlvbiBib3VuZCB3aXRoIHRoaXMgb2JqZWN0IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kTG9hZFJlc291cmNlID0gdGhpcy5fbG9hZFJlc291cmNlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkxvYWRgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkxvYWQgPSB0aGlzLl9vbkxvYWQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvdXJjZSBidWZmZXIgdGhhdCBmaWxscyB1bnRpbCBgbG9hZGAgaXMgY2FsbGVkIHRvIHN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB0cmFjayBsb2FkIGNvbXBsZXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9udW1Ub0xvYWQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlcyB3YWl0aW5nIHRvIGJlIGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2VbXX1cbiAgICAgKi9cbiAgICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX2JvdW5kTG9hZFJlc291cmNlLCBjb25jdXJyZW5jeSk7XG5cbiAgICAvKipcbiAgICAgKiBBbGwgdGhlIHJlc291cmNlcyBmb3IgdGhpcyBsb2FkZXIga2V5ZWQgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIFJlc291cmNlPn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgb3IgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwcm9ncmVzc1xuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGVycm9yZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGxvYWRlciBiZWdpbnMgdG8gcHJvY2VzcyB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBxdWV1ZWQgcmVzb3VyY2VzIGFsbCBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbi8qKlxuICogQWRkcyBhIHJlc291cmNlIChvciBtdWx0aXBsZSByZXNvdXJjZXMpIHRvIHRoZSBsb2FkZXIgcXVldWUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gdGFrZSBhIHdpZGUgdmFyaWV0eSBvZiBkaWZmZXJlbnQgcGFyYW1ldGVycy4gVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBhbHdheXNcbiAqIHJlcXVpcmVkIHRoZSB1cmwgdG8gbG9hZC4gQWxsIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOlxuICpcbiAqIGBgYGpzXG4gKiBsb2FkZXJcbiAqICAgICAvLyBub3JtYWwgcGFyYW0gc3ludGF4XG4gKiAgICAgLmFkZCgna2V5JywgJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJywgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCgnaHR0cDovLy4uLicpXG4gKlxuICogICAgIC8vIG9iamVjdCBzeW50YXhcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgbmFtZTogJ2tleTInLFxuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MycsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9XG4gKiAgICAgfSlcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgdXJsOiAnaHR0cHM6Ly8uLi4nLFxuICogICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7fSxcbiAqICAgICAgICAgY3Jvc3NPcmlnaW46IHRydWVcbiAqICAgICB9KVxuICpcbiAqICAgICAvLyB5b3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBvYmplY3RzIG9yIHVybHMgb3IgYm90aFxuICogICAgIC5hZGQoW1xuICogICAgICAgICB7IG5hbWU6ICdrZXk0JywgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgIHsgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgICdodHRwOi8vLi4uJ1xuICogICAgIF0pO1xuICogYGBgXG4gKlxuICogQGFsaWFzIGVucXVldWVcbiAqIEBwYXJhbSBbbmFtZV0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQsIGlmIG5vdCBwYXNzZWQgdGhlIHVybCBpcyB1c2VkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCByZWxhdGl2ZSB0byB0aGUgYmFzZVVybCBvZiB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7Ym9vbGVhbn0gSXMgdGhpcyByZXF1ZXN0IGNyb3NzLW9yaWdpbj8gRGVmYXVsdCBpcyB0byBkZXRlcm1pbmUgYXV0b21hdGljYWxseS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5sb2FkVHlwZT1SZXNvdXJjZS5MT0FEX1RZUEUuWEhSXSB7UmVzb3VyY2UuWEhSX0xPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGlzIHNwZWNpZmljIHJlc291cmNlIGNvbXBsZXRlcyBsb2FkaW5nLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFkZCA9IExvYWRlci5wcm90b3R5cGUuZW5xdWV1ZSA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIGNiKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIG9mIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hZGQobmFtZVtpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBpZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluc3RlYWQgb2YgcGFyYW1zXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYiA9IHVybCB8fCBuYW1lLmNhbGxiYWNrIHx8IG5hbWUub25Db21wbGV0ZTtcbiAgICAgICAgb3B0aW9ucyA9IG5hbWU7XG4gICAgICAgIHVybCA9IG5hbWUudXJsO1xuICAgICAgICBuYW1lID0gbmFtZS5uYW1lIHx8IG5hbWUua2V5IHx8IG5hbWUudXJsO1xuICAgIH1cblxuICAgIC8vIGNhc2Ugd2hlcmUgbm8gbmFtZSBpcyBwYXNzZWQgc2hpZnQgYWxsIGFyZ3Mgb3ZlciBieSBvbmUuXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHVybDtcbiAgICAgICAgdXJsID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBzaGlmdGVkIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIHVybC5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB1cmwgcGFzc2VkIHRvIGFkZCByZXNvdXJjZSB0byBsb2FkZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gb3B0aW9ucyBhcmUgb3B0aW9uYWwgc28gcGVvcGxlIG1pZ2h0IHBhc3MgYSBmdW5jdGlvbiBhbmQgbm8gb3B0aW9uc1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHJlc291cmNlIGFscmVhZHkgZXhpc3RzLlxuICAgIGlmICh0aGlzLnJlc291cmNlc1tuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc291cmNlIHdpdGggbmFtZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgIH1cblxuICAgIC8vIGFkZCBiYXNlIHVybCBpZiB0aGlzIGlzbid0IGFuIGFic29sdXRlIHVybFxuICAgIHVybCA9IHRoaXMuX2hhbmRsZUJhc2VVcmwodXJsKTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgc3RvcmUgdGhlIHJlc291cmNlXG4gICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0gPSBuZXcgUmVzb3VyY2UobmFtZSwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0ub25jZSgnYWZ0ZXJNaWRkbGV3YXJlJywgY2IpO1xuICAgIH1cblxuICAgIHRoaXMuX251bVRvTG9hZCsrO1xuXG4gICAgLy8gaWYgYWxyZWFkeSBsb2FkaW5nIGFkZCBpdCB0byB0aGUgd29ya2VyIHF1ZXVlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAoMTAwIC0gdGhpcy5wcm9ncmVzcykgLyAodGhpcy5fcXVldWUubGVuZ3RoKCkgKyB0aGlzLl9xdWV1ZS5ydW5uaW5nKCkpO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgYnVmZmVyIGl0IHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSBsYXRlclxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9idWZmZXIucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAxMDAgLyB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuTG9hZGVyLnByb3RvdHlwZS5faGFuZGxlQmFzZVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFyc2VkVXJsID0gdXJsUGFyc2VyLnBhcnNlKHVybCk7XG5cbiAgICAvLyBhYnNvbHV0ZSB1cmwsIGp1c3QgdXNlIGl0IGFzIGlzLlxuICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgfHwgcGFyc2VkVXJsLnBhdGhuYW1lLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBpZiBiYXNlVXJsIGRvZXNuJ3QgZW5kIGluIHNsYXNoIGFuZCB1cmwgZG9lc24ndCBzdGFydCB3aXRoIHNsYXNoLCB0aGVuIGFkZCBhIHNsYXNoIGluYmV0d2VlblxuICAgIGlmIChcbiAgICAgICAgdGhpcy5iYXNlVXJsLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmJhc2VVcmwubGFzdEluZGV4T2YoJy8nKSAhPT0gdGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgdXJsLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyAnLycgKyB1cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsICsgdXJsO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBTZXRzIHVwIGEgbWlkZGxld2FyZSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuICpiZWZvcmUqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyBwcmVcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYmVmb3JlID0gTG9hZGVyLnByb3RvdHlwZS5wcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLnB1c2goZm4pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmFmdGVyKiB0aGVcbiAqIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqXG4gKiBAYWxpYXMgdXNlXG4gKiBAcGFyYW0gbWlkZGxld2FyZSB7ZnVuY3Rpb259IFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFmdGVyID0gTG9hZGVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9hZnRlck1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoZSBxdWV1ZSBvZiB0aGUgbG9hZGVyIHRvIHByZXBhcmUgZm9yIGEgbmV3IGxvYWQuXG4gKlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvLyB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG4gICAgLy8gdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gICAgdGhpcy5fcXVldWUuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGxvYWRpbmcgdGhlIHF1ZXVlZCByZXNvdXJjZXMuXG4gKlxuICogQGZpcmVzIHN0YXJ0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgYGNvbXBsZXRlYCBldmVudC5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgLy8gcmVnaXN0ZXIgY29tcGxldGUgY2FsbGJhY2sgaWYgdGhleSBwYXNzIG9uZVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcXVldWUgaGFzIGFscmVhZHkgc3RhcnRlZCB3ZSBhcmUgZG9uZSBoZXJlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm90aWZ5IG9mIHN0YXJ0XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gc3RhcnQgdGhlIGludGVybmFsIHF1ZXVlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLl9idWZmZXJbaV0pO1xuICAgIH1cblxuICAgIC8vIGVtcHR5IHRoZSBidWZmZXJcbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBMb2FkcyBhIHNpbmdsZSByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX2xvYWRSZXNvdXJjZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZGVxdWV1ZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHJlc291cmNlLl9kZXF1ZXVlID0gZGVxdWV1ZTtcblxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gcmVzb3VyY2Uub24oJ3Byb2dyZXNzJywgc2VsZi5lbWl0LmJpbmQoc2VsZiwgJ3Byb2dyZXNzJykpO1xuXG4gICAgICAgIHJlc291cmNlLmxvYWQoc2VsZi5fYm91bmRPbkxvYWQpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgb25jZSBlYWNoIHJlc291cmNlIGhhcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzLCB0aGlzLnJlc291cmNlcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBlYWNoIHRpbWUgYSByZXNvdXJjZXMgaXMgbG9hZGVkLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQGZpcmVzIGVycm9yXG4gKiBAZmlyZXMgbG9hZFxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgdGhpcy5wcm9ncmVzcyArPSB0aGlzLl9wcm9ncmVzc0NodW5rO1xuXG4gICAgdGhpcy5lbWl0KCdwcm9ncmVzcycsIHRoaXMsIHJlc291cmNlKTtcblxuICAgIC8vIHJ1biBtaWRkbGV3YXJlLCB0aGlzICptdXN0KiBoYXBwZW4gYmVmb3JlIGRlcXVldWUgc28gc3ViLWFzc2V0cyBnZXQgYWRkZWQgcHJvcGVybHlcbiAgICB0aGlzLl9ydW5NaWRkbGV3YXJlKHJlc291cmNlLCB0aGlzLl9hZnRlck1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzb3VyY2UuZW1pdCgnYWZ0ZXJNaWRkbGV3YXJlJywgcmVzb3VyY2UpO1xuXG4gICAgICAgIHRoaXMuX251bVRvTG9hZC0tO1xuXG4gICAgICAgIC8vIGRvIGNvbXBsZXRpb24gY2hlY2tcbiAgICAgICAgaWYgKHRoaXMuX251bVRvTG9hZCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgIHRoaXMuX29uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc291cmNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgcmVzb3VyY2UuZXJyb3IsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZCcsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuXG5cbiAgICAvLyByZW1vdmUgdGhpcyByZXNvdXJjZSBmcm9tIHRoZSBhc3luYyBxdWV1ZVxuICAgIHJlc291cmNlLl9kZXF1ZXVlKCk7XG59O1xuXG4vKipcbiAqIFJ1biBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvbiBhIHJlc291cmNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX3J1bk1pZGRsZXdhcmUgPSBmdW5jdGlvbiAocmVzb3VyY2UsIGZucywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzKGZucywgZnVuY3Rpb24gKGZuLCBuZXh0KSB7XG4gICAgICAgIGZuLmNhbGwoc2VsZiwgcmVzb3VyY2UsIG5leHQpO1xuICAgIH0sIGNiLmJpbmQodGhpcywgcmVzb3VyY2UpKTtcbn07XG5cbkxvYWRlci5MT0FEX1RZUEUgPSBSZXNvdXJjZS5MT0FEX1RZUEU7XG5Mb2FkZXIuWEhSX1JFQURZX1NUQVRFID0gUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFO1xuTG9hZGVyLlhIUl9SRVNQT05TRV9UWVBFID0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEU7XG4iLCJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIF91cmwgPSByZXF1aXJlKCd1cmwnKSxcbiAgICAvLyB0ZXN0cyBpcyBDT1JTIGlzIHN1cHBvcnRlZCBpbiBYSFIsIGlmIG5vdCB3ZSBuZWVkIHRvIHVzZSBYRFJcbiAgICB1c2VYZHIgPSAhISh3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiAobmV3IFhNTEh0dHBSZXF1ZXN0KCkpKSksXG4gICAgdGVtcEFuY2hvciA9IG51bGw7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgYSBzaW5nbGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnlcbiAqIGEgc2luZ2xlIFVSTC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBuYW1lIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCBmb3IgYXVkaW8vdmlkZW8gbG9hZHMgeW91IGNhbiBwYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMuXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5jcm9zc09yaWdpbl0ge3N0cmluZ3xib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5MT0FEX1RZUEV9IEhvdyBzaG91bGQgdGhpcyByZXNvdXJjZSBiZSBsb2FkZWQ/XG4gKiBAcGFyYW0gW29wdGlvbnMueGhyVHlwZT1SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ERUZBVUxUXSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IEhvdyBzaG91bGQgdGhlIGRhdGEgYmVpbmdcbiAqICAgICAgbG9hZGVkIGJlIGludGVycHJldGVkIHdoZW4gdXNpbmcgWEhSP1xuICogQHBhcmFtIFtvcHRpb25zLm1ldGFkYXRhXSB7b2JqZWN0fSBFeHRyYSBpbmZvIGZvciBtaWRkbGV3YXJlLlxuICovXG5mdW5jdGlvbiBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggbmFtZSBhbmQgdXJsIGFyZSByZXF1aXJlZCBmb3IgY29uc3RydWN0aW5nIGEgcmVzb3VyY2UuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVybCB1c2VkIHRvIGxvYWQgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHVybCBpcyBhIGRhdGEgdXJsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzRGF0YVVybCA9IHRoaXMudXJsLmluZGV4T2YoJ2RhdGE6JykgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSB0aGF0IHdhcyBsb2FkZWQgYnkgdGhlIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55fVxuICAgICAqL1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBvcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJ2Fub255bW91cycgOiBvcHRpb25zLmNyb3NzT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCBvZiBsb2FkaW5nIHRvIHVzZSBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlLkxPQURfVFlQRX1cbiAgICAgKi9cbiAgICB0aGlzLmxvYWRUeXBlID0gb3B0aW9ucy5sb2FkVHlwZSB8fCB0aGlzLl9kZXRlcm1pbmVMb2FkVHlwZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgdXNlZCB0byBsb2FkIHRoZSByZXNvdXJjZSB2aWEgWEhSLiBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMueGhyVHlwZSA9IG9wdGlvbnMueGhyVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgKGlmIGFueSkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFcnJvcn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBYSFIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLiBUaGlzIGlzIG9ubHkgc2V0XG4gICAgICogd2hlbiBgbG9hZFR5cGVgIGlzIGBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1hNTEh0dHBSZXF1ZXN0fVxuICAgICAqL1xuICAgIHRoaXMueGhyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMganNvbi4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNKc29uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIHhtbC4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNYbWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gaW1hZ2UgdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0ltYWdlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGFuIGF1ZGlvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNBdWRpbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhIHZpZGVvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNWaWRlbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBkZXF1ZXVlYCBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgYSBzdG9yYWdlIHBsYWNlIGZvciB0aGUgYXN5bmMgcXVldWUgZGVxdWV1ZSBtZXRob2RcbiAgICAgKiB1c2VkIHByaXZhdGVseSBieSB0aGUgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kZXF1ZXVlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tcGxldGVgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZENvbXBsZXRlID0gdGhpcy5jb21wbGV0ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25FcnJvcmAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25FcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uUHJvZ3Jlc3NgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MgPSB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyk7XG5cbiAgICAvLyB4aHIgY2FsbGJhY2tzXG4gICAgdGhpcy5fYm91bmRYaHJPbkVycm9yID0gdGhpcy5feGhyT25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25BYm9ydCA9IHRoaXMuX3hock9uQWJvcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9ib3VuZFhock9uTG9hZCA9IHRoaXMuX3hock9uTG9hZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0ID0gdGhpcy5feGRyT25UaW1lb3V0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJlc291cmNlIGJlaW5ncyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBlYWNoIHRpbWUgcHJvZ3Jlc3Mgb2YgdGhpcyByZXNvdXJjZSBsb2FkIHVwZGF0ZXMuXG4gICAgICogTm90IGFsbCByZXNvdXJjZXMgdHlwZXMgYW5kIGxvYWRlciBzeXN0ZW1zIGNhbiBzdXBwb3J0IHRoaXMgZXZlbnRcbiAgICAgKiBzbyBzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIElmIHRoZSByZXNvdXJjZVxuICAgICAqIGlzIGJlaW5nIGxvYWRlZCBvbiBhIG1vZGVybiBicm93c2VyLCB1c2luZyBYSFIsIGFuZCB0aGUgcmVtb3RlIHNlcnZlclxuICAgICAqIHByb3Blcmx5IHNldHMgQ29udGVudC1MZW5ndGggaGVhZGVycywgdGhlbiB0aGlzIHdpbGwgYmUgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHRoaXMgcmVzb3VyY2UgaGFzIGxvYWRlZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGl0IHdpbGxcbiAgICAgKiBiZSBpbiB0aGUgYGVycm9yYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb21wbGV0ZVxuICAgICAqIEBtZW1iZXJvZiBSZXNvdXJjZSNcbiAgICAgKi9cbn1cblxuUmVzb3VyY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblJlc291cmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlc291cmNlO1xubW9kdWxlLmV4cG9ydHMgPSBSZXNvdXJjZTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgcmVzb3VyY2UgYXMgY29tcGxldGUuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIGluIGEgd3JhcHBlciBvciBzb21ldGhpbmcuLi5ncm9zcy4uLi5cbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvcik7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgICBpZiAodGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGhyLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub250aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMueGhyLm9ucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25sb2FkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogS2lja3Mgb2ZmIGxvYWRpbmcgb2YgdGhpcyByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gaWYgYSBjYWxsYmFjayBpcyBzZXQsIGxpc3RlbiBmb3IgY29tcGxldGUgZXZlbnRcbiAgICBpZiAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luID09PSBmYWxzZSB8fCB0eXBlb2YgdGhpcy5jcm9zc09yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHRoaXMuX2RldGVybWluZUNyb3NzT3JpZ2luKHRoaXMudXJsKTtcbiAgICB9XG5cbiAgICBzd2l0Y2godGhpcy5sb2FkVHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRTpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRJbWFnZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuQVVESU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlZJREVPOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5YSFI6XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodXNlWGRyICYmIHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGRyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGhyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEltYWdlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLnNyYyA9IHRoaXMudXJsO1xuXG4gICAgdGhpcy5pc0ltYWdlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBIVE1MQXVkaW9FbGVtZW50IG9yIEhUTUxWaWRlb0VsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdhdWRpbycgJiYgdHlwZW9mIEF1ZGlvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQXVkaW8oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBlbGVtZW50ICcgKyB0eXBlKTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBmb3IgQ29jb29uSlMgQ2FudmFzKyBydW50aW1lLCBsYWNrcyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKVxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUykge1xuICAgICAgICB0aGlzLmRhdGEuc3JjID0gQXJyYXkuaXNBcnJheSh0aGlzLnVybCkgPyB0aGlzLnVybFswXSA6IHRoaXMudXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51cmwpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXJsLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybFtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1snaXMnICsgdHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSldID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUsIGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YS5sb2FkKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhNTEh0dHBSZXF1ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBzZXQgdGhlIHJlcXVlc3QgdHlwZSBhbmQgdXJsXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsLCB0cnVlKTtcblxuICAgIC8vIGxvYWQganNvbiBhcyB0ZXh0IGFuZCBwYXJzZSBpdCBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgLy8gKmNvdWdoKiBzYWZhcmkgKmNvdWdoKiBjYW4ndCBkZWFsIHdpdGggaXQuXG4gICAgaWYgKHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTiB8fCB0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHRoaXMueGhyVHlwZTtcbiAgICB9XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkLCBmYWxzZSk7XG5cbiAgICB4aHIuc2VuZCgpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBYRG9tYWluUmVxdWVzdC4gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdXBwb3J0IElFOSAoZ3Jvc3MpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhkciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhkciA9IHRoaXMueGhyID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7XG5cbiAgICAvLyBYRG9tYWluUmVxdWVzdCBoYXMgYSBmZXcgcXVpcmtzLiBPY2Nhc2lvbmFsbHkgaXQgd2lsbCBhYm9ydCByZXF1ZXN0c1xuICAgIC8vIEEgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbWFrZSBzdXJlIEFMTCBjYWxsYmFja3MgYXJlIHNldCBldmVuIGlmIG5vdCB1c2VkXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU3ODY5NjYveGRvbWFpbnJlcXVlc3QtYWJvcnRzLXBvc3Qtb24taWUtOVxuICAgIHhkci50aW1lb3V0ID0gNTAwMDtcblxuICAgIHhkci5vbmVycm9yID0gdGhpcy5fYm91bmRYaHJPbkVycm9yO1xuICAgIHhkci5vbnRpbWVvdXQgPSB0aGlzLl9ib3VuZFhkck9uVGltZW91dDtcbiAgICB4ZHIub25wcm9ncmVzcyA9IHRoaXMuX2JvdW5kT25Qcm9ncmVzcztcbiAgICB4ZHIub25sb2FkID0gdGhpcy5fYm91bmRYaHJPbkxvYWQ7XG5cbiAgICB4ZHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gIE5vdGU6IFRoZSB4ZHIuc2VuZCgpIGNhbGwgaXMgd3JhcHBlZCBpbiBhIHRpbWVvdXQgdG8gcHJldmVudCBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmZhY2Ugd2hlcmUgc29tZSByZXF1ZXN0cyBhcmUgbG9zdFxuICAgIC8vICBpZiBtdWx0aXBsZSBYRG9tYWluUmVxdWVzdHMgYXJlIGJlaW5nIHNlbnQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAvLyBTb21lIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9pc3N1ZXMvMTI0OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB4ZHIuc2VuZCgpO1xuICAgIH0sIDApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc291cmNlIHVzZWQgaW4gbG9hZGluZyB2aWEgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSBUaGUgZWxlbWVudCB0eXBlICh2aWRlbyBvciBhdWRpbykuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSBzb3VyY2UgVVJMIHRvIGxvYWQgZnJvbS5cbiAqIEBwYXJhbSBbbWltZV0ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSBvZiB0aGUgdmlkZW9cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fY3JlYXRlU291cmNlID0gZnVuY3Rpb24gKHR5cGUsIHVybCwgbWltZSkge1xuICAgIGlmICghbWltZSkge1xuICAgICAgICBtaW1lID0gdHlwZSArICcvJyArIHVybC5zdWJzdHIodXJsLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gdXJsO1xuICAgIHNvdXJjZS50eXBlID0gbWltZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgZXJyb3JzIG91dC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgZXJyb3IgZXZlbnQgZnJvbSB0aGUgZWxlbWVudCB0aGF0IGVtaXRzIGl0LlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgZWxlbWVudCB1c2luZyAnICsgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgcHJvZ3Jlc3MgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fb25Qcm9ncmVzcyA9ICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGVycm9yIGV2ZW50IGZpcmVzIGZvciB4aHIveGRyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RFcnJvckV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIHJlcVR5cGUodGhpcy54aHIpICsgJyBSZXF1ZXN0IGZhaWxlZC4gJyArXG4gICAgICAgICdTdGF0dXM6ICcgKyB0aGlzLnhoci5zdGF0dXMgKyAnLCB0ZXh0OiBcIicgKyB0aGlzLnhoci5zdGF0dXNUZXh0ICsgJ1wiJ1xuICAgICk7XG5cbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhbiBhYm9ydCBldmVudCBmaXJlcyBmb3IgeGhyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RBYm9ydEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3Qgd2FzIGFib3J0ZWQgYnkgdGhlIHVzZXIuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYSB0aW1lb3V0IGV2ZW50IGZpcmVzIGZvciB4ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGRyT25UaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgdGltZWQgb3V0LicpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gZGF0YSBzdWNjZXNzZnVsbHkgbG9hZHMgZnJvbSBhbiB4aHIveGRyIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdExvYWRFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGhyT25Mb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB4aHIgPSB0aGlzLnhocixcbiAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1cyAhPT0gdW5kZWZpbmVkID8geGhyLnN0YXR1cyA6IDIwMDsgLy9YRFIgaGFzIG5vIGAuc3RhdHVzYCwgYXNzdW1lIDIwMC5cblxuICAgIC8vIHN0YXR1cyBjYW4gYmUgMCB3aGVuIHVzaW5nIHRoZSBmaWxlOi8vIHByb3RvY29sLCBhbHNvIGNoZWNrIGlmIGEgcmVzcG9uc2Ugd2FzIGZvdW5kXG4gICAgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA0IHx8IChzdGF0dXMgPT09IDAgJiYgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkge1xuICAgICAgICAvLyBpZiB0ZXh0LCBqdXN0IHJldHVybiBpdFxuICAgICAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGpzb24sIHBhcnNlIGludG8ganNvbiBvYmplY3RcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0pzb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGxvYWRlZCBqc29uOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHhtbCwgcGFyc2UgaW50byBhbiB4bWwgZG9jdW1lbnQgb3IgZGl2IGVsZW1lbnRcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LkRPTVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhoci5yZXNwb25zZVRleHQsICd0ZXh0L3htbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZGl2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzWG1sID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIHhtbDonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlciB0eXBlcyBqdXN0IHJldHVybiB0aGUgcmVzcG9uc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2UgfHwgeGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignWycgKyB4aHIuc3RhdHVzICsgJ10nICsgeGhyLnN0YXR1c1RleHQgKyAnOicgKyB4aHIucmVzcG9uc2VVUkwpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbmZ1bmN0aW9uIHJlcVR5cGUoeGhyKSB7XG4gICAgcmV0dXJuIHhoci50b1N0cmluZygpLnJlcGxhY2UoJ29iamVjdCAnLCAnJyk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYGNyb3NzT3JpZ2luYCBwcm9wZXJ0eSBmb3IgdGhpcyByZXNvdXJjZSBiYXNlZCBvbiBpZiB0aGUgdXJsXG4gKiBmb3IgdGhpcyByZXNvdXJjZSBpcyBjcm9zcy1vcmlnaW4uIElmIGNyb3NzT3JpZ2luIHdhcyBtYW51YWxseSBzZXQsIHRoaXNcbiAqIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIHRvIHRlc3QuXG4gKiBAcGFyYW0gW2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbl0ge29iamVjdH0gVGhlIGxvY2F0aW9uIG9iamVjdCB0byB0ZXN0IGFnYWluc3QuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjcm9zc09yaWdpbiB2YWx1ZSB0byB1c2UgKG9yIGVtcHR5IHN0cmluZyBmb3Igbm9uZSkuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbiAodXJsLCBsb2MpIHtcbiAgICAvLyBkYXRhOiBhbmQgamF2YXNjcmlwdDogdXJscyBhcmUgY29uc2lkZXJlZCBzYW1lLW9yaWdpblxuICAgIGlmICh1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBpcyB3aW5kb3cubG9jYXRpb25cbiAgICBsb2MgPSBsb2MgfHwgd2luZG93LmxvY2F0aW9uO1xuXG4gICAgaWYgKCF0ZW1wQW5jaG9yKSB7XG4gICAgICAgIHRlbXBBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgfVxuXG4gICAgLy8gbGV0IHRoZSBicm93c2VyIGRldGVybWluZSB0aGUgZnVsbCBocmVmIGZvciB0aGUgdXJsIG9mIHRoaXMgcmVzb3VyY2UgYW5kIHRoZW5cbiAgICAvLyBwYXJzZSB3aXRoIHRoZSBub2RlIHVybCBsaWIsIHdlIGNhbid0IHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgICAvLyBiZWNhdXNlIHRoZXkgZG9uJ3Qgd29yayBpbiBJRTkgOihcbiAgICB0ZW1wQW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgdXJsID0gX3VybC5wYXJzZSh0ZW1wQW5jaG9yLmhyZWYpO1xuXG4gICAgdmFyIHNhbWVQb3J0ID0gKCF1cmwucG9ydCAmJiBsb2MucG9ydCA9PT0gJycpIHx8ICh1cmwucG9ydCA9PT0gbG9jLnBvcnQpO1xuXG4gICAgLy8gaWYgY3Jvc3Mgb3JpZ2luXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gbG9jLmhvc3RuYW1lIHx8ICFzYW1lUG9ydCB8fCB1cmwucHJvdG9jb2wgIT09IGxvYy5wcm90b2NvbCkge1xuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZXNwb25zZVR5cGUgb2YgYW4gWEhSIHJlcXVlc3QgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGVcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSByZXNwb25zZVR5cGUgdG8gdXNlLlxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZVhoclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlc291cmNlLl94aHJUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVMb2FkVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX2xvYWRUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXMudXJsLFxuICAgICAgICBleHQ7XG5cbiAgICBpZiAodGhpcy5pc0RhdGFVcmwpIHtcbiAgICAgICAgdmFyIHNsYXNoSW5kZXggPSB1cmwuaW5kZXhPZignLycpO1xuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHNsYXNoSW5kZXggKyAxLCB1cmwuaW5kZXhPZignOycsIHNsYXNoSW5kZXgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBxdWVyeVN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXh0ID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQ7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG1pbWUgdHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgcmVzcG9uc2VUeXBlIG9mXG4gKiByZXNvdXJjZSBiZWluZyBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZ2V0TWltZUZyb21YaHJUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5JztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0I6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2Jsb2InO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQ6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCc7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQ6XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVDpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG5cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsb2FkaW5nIGEgcmVzb3VyY2UgY2FuIHVzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBMT0FEX1RZUEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuWEhSIC0gVXNlcyBYTUxIdHRwUmVxdWVzdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuSU1BR0UgLSBVc2VzIGFuIGBJbWFnZWAgb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5BVURJTyAtIFVzZXMgYW4gYEF1ZGlvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLlZJREVPIC0gVXNlcyBhIGBWaWRlb2Agb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICovXG5SZXNvdXJjZS5MT0FEX1RZUEUgPSB7XG4gICAgWEhSOiAgICAxLFxuICAgIElNQUdFOiAgMixcbiAgICBBVURJTzogIDMsXG4gICAgVklERU86ICA0XG59O1xuXG4vKipcbiAqIFRoZSBYSFIgcmVhZHkgc3RhdGVzLCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gWEhSX1JFQURZX1NUQVRFXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLlVOU0VOVCAtIG9wZW4oKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5PUEVORUQgLSBzZW5kKCloYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuSEVBREVSU19SRUNFSVZFRCAtIHNlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuTE9BRElORyAtIERvd25sb2FkaW5nOyByZXNwb25zZVRleHQgaG9sZHMgcGFydGlhbCBkYXRhLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5ET05FIC0gVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFID0ge1xuICAgIFVOU0VOVDogMCxcbiAgICBPUEVORUQ6IDEsXG4gICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICBMT0FESU5HOiAzLFxuICAgIERPTkU6IDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVTUE9OU0VfVFlQRVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQgLSBkZWZhdWx0cyB0byB0ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSIC0gQXJyYXlCdWZmZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CTE9CIC0gQmxvYlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UIC0gRG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5KU09OIC0gT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCAtIFN0cmluZ1xuICovXG5SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRSA9IHtcbiAgICBERUZBVUxUOiAgICAndGV4dCcsXG4gICAgQlVGRkVSOiAgICAgJ2FycmF5YnVmZmVyJyxcbiAgICBCTE9COiAgICAgICAnYmxvYicsXG4gICAgRE9DVU1FTlQ6ICAgJ2RvY3VtZW50JyxcbiAgICBKU09OOiAgICAgICAnanNvbicsXG4gICAgVEVYVDogICAgICAgJ3RleHQnXG59O1xuXG5SZXNvdXJjZS5fbG9hZFR5cGVNYXAgPSB7XG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnYm1wJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGdhJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0Vcbn07XG5cblJlc291cmNlLl94aHJUeXBlTWFwID0ge1xuICAgIC8vIHhtbFxuICAgICd4aHRtbCc6ICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG1sJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG0nOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd4bWwnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0bXgnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0c3gnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdzdmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuXG4gICAgLy8gaW1hZ2VzXG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAncG5nJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBlZyc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnd2VicCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG5cbiAgICAvLyBqc29uXG4gICAgJ2pzb24nOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTixcblxuICAgIC8vIHRleHRcbiAgICAndGV4dCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhULFxuICAgICd0eHQnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFRcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSBsb2FkVHlwZSB7UmVzb3VyY2UuTE9BRF9UWVBFfSBUaGUgbG9hZCB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uTG9hZFR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgbG9hZFR5cGUpIHtcbiAgICBzZXRFeHRNYXAoUmVzb3VyY2UuX2xvYWRUeXBlTWFwLCBleHRuYW1lLCBsb2FkVHlwZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGxvYWQgdHlwZSB0byBiZSB1c2VkIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZXh0bmFtZSB7c3RyaW5nfSBUaGUgZXh0ZW5zaW9uIHRvIHNldCB0aGUgdHlwZSBmb3IsIGUuZy4gXCJwbmdcIiBvciBcImZudFwiXG4gKiBAcGFyYW0geGhyVHlwZSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSB4aHIgdHlwZSB0byBzZXQgaXQgdG8uXG4gKi9cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgeGhyVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5feGhyVHlwZU1hcCwgZXh0bmFtZSwgeGhyVHlwZSk7XG59O1xuXG5mdW5jdGlvbiBzZXRFeHRNYXAobWFwLCBleHRuYW1lLCB2YWwpIHtcbiAgICBpZiAoZXh0bmFtZSAmJiBleHRuYW1lLmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICBleHRuYW1lID0gZXh0bmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRuYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYXBbZXh0bmFtZV0gPSB2YWw7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIHByaXZhdGUgcHJvcGVydHlcbiAgICBfa2V5U3RyOiBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIsXG5cbiAgICBlbmNvZGVCaW5hcnk6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICAgICAgdmFyIGJ5dGVidWZmZXI7XG4gICAgICAgIHZhciBlbmNvZGVkQ2hhckluZGV4ZXMgPSBuZXcgQXJyYXkoNCk7XG4gICAgICAgIHZhciBpbnggPSAwO1xuICAgICAgICB2YXIgam54ID0gMDtcbiAgICAgICAgdmFyIHBhZGRpbmdCeXRlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmlsbCBieXRlIGJ1ZmZlciBhcnJheVxuICAgICAgICAgICAgYnl0ZWJ1ZmZlciA9IG5ldyBBcnJheSgzKTtcbiAgICAgICAgICAgIGZvciAoam54ID0gMDsgam54IDwgYnl0ZWJ1ZmZlci5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhd2F5IGhpZ2gtb3JkZXIgYnl0ZSwgYXMgZG9jdW1lbnRlZCBhdDpcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1MSHR0cFJlcXVlc3QjSGFuZGxpbmdfYmluYXJ5X2RhdGFcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gaW5wdXQuY2hhckNvZGVBdChpbngrKykgJiAweGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCBlYWNoIGVuY29kZWQgY2hhcmFjdGVyLCA2IGJpdHMgYXQgYSB0aW1lXG4gICAgICAgICAgICAvLyBpbmRleCAxOiBmaXJzdCA2IGJpdHNcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1swXSA9IGJ5dGVidWZmZXJbMF0gPj4gMjtcbiAgICAgICAgICAgIC8vIGluZGV4IDI6IHNlY29uZCA2IGJpdHMgKDIgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMSArIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAyKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzFdID0gKChieXRlYnVmZmVyWzBdICYgMHgzKSA8PCA0KSB8IChieXRlYnVmZmVyWzFdID4+IDQpO1xuICAgICAgICAgICAgLy8gaW5kZXggMzogdGhpcmQgNiBiaXRzICg0IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBpbnB1dCBieXRlIDIgKyAyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1syXSA9ICgoYnl0ZWJ1ZmZlclsxXSAmIDB4MGYpIDw8IDIpIHwgKGJ5dGVidWZmZXJbMl0gPj4gNik7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiBmb3J0aCA2IGJpdHMgKDYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IGJ5dGVidWZmZXJbMl0gJiAweDNmO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBwYWRkaW5nIGhhcHBlbmVkLCBhbmQgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBwYWRkaW5nQnl0ZXMgPSBpbnggLSAoaW5wdXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhZGRpbmdCeXRlcykge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxhc3QgMiBjaGFyYWN0ZXJzIHRvIHBhZGRpbmcgY2hhclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbM10gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCBjaGFyYWN0ZXIgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBObyBwYWRkaW5nIC0gcHJvY2VlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb3cgd2Ugd2lsbCBncmFiIGVhY2ggYXBwcm9wcmlhdGUgY2hhcmFjdGVyIG91dCBvZiBvdXIga2V5c3RyaW5nXG4gICAgICAgICAgICAvLyBiYXNlZCBvbiBvdXIgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCBpdCB0byB0aGUgb3V0cHV0IHN0cmluZ1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBlbmNvZGVkQ2hhckluZGV4ZXMubGVuZ3RoOyBqbngrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSB0aGlzLl9rZXlTdHIuY2hhckF0KGVuY29kZWRDaGFySW5kZXhlc1tqbnhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vTG9hZGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJlc291cmNlID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5taWRkbGV3YXJlID0ge1xuICAgIGNhY2hpbmc6IHtcbiAgICAgICAgbWVtb3J5OiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL2NhY2hpbmcvbWVtb3J5JylcbiAgICB9LFxuICAgIHBhcnNpbmc6IHtcbiAgICAgICAgYmxvYjogcmVxdWlyZSgnLi9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2InKVxuICAgIH1cbn07XG4iLCIvLyBhIHNpbXBsZSBpbi1tZW1vcnkgY2FjaGUgZm9yIHJlc291cmNlc1xudmFyIGNhY2hlID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgLy8gaWYgY2FjaGVkLCB0aGVuIHNldCBkYXRhIGFuZCBjb21wbGV0ZSB0aGUgcmVzb3VyY2VcbiAgICAgICAgaWYgKGNhY2hlW3Jlc291cmNlLnVybF0pIHtcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBjYWNoZVtyZXNvdXJjZS51cmxdO1xuICAgICAgICAgICAgcmVzb3VyY2UuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBub3QgY2FjaGVkLCB3YWl0IGZvciBjb21wbGV0ZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlLm9uY2UoJ2NvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgY2FjaGVbdGhpcy51cmxdID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJy4uLy4uL1Jlc291cmNlJyksXG4gICAgYjY0ID0gcmVxdWlyZSgnLi4vLi4vYjY0Jyk7XG5cbndpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cbi8vIGEgbWlkZGxld2FyZSBmb3IgdHJhbnNmb3JtaW5nIFhIUiBsb2FkZWQgQmxvYnMgaW50byBtb3JlIHVzZWZ1bCBvYmplY3RzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgYW4gWEhSIGxvYWQgb2YgYSBibG9iXG4gICAgICAgIGlmIChyZXNvdXJjZS54aHIgJiYgcmVzb3VyY2UueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQikge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYmxvYiBzdXBwb3J0IHdlIHByb2JhYmx5IGdvdCBhIGJpbmFyeSBzdHJpbmcgYmFja1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuQmxvYiB8fCB0eXBlb2YgcmVzb3VyY2UuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlc291cmNlLnhoci5nZXRSZXNwb25zZUhlYWRlcignY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGltYWdlLCBjb252ZXJ0IHRoZSBiaW5hcnkgc3RyaW5nIGludG8gYSBkYXRhIHVybFxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIHR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gJ2RhdGE6JyArIHR5cGUgKyAnO2Jhc2U2NCwnICsgYjY0LmVuY29kZUJpbmFyeShyZXNvdXJjZS54aHIucmVzcG9uc2VUZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5pc0ltYWdlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IHVudGlsIHRoZSBpbWFnZSBsb2FkcyBhbmQgdGhlbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnQgdHlwZSBzYXlzIHRoaXMgaXMgYW4gaW1hZ2UsIHRoZW4gd2Ugc2hvdWxkIHRyYW5zZm9ybSB0aGUgYmxvYiBpbnRvIGFuIEltYWdlIG9iamVjdFxuICAgICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UuZGF0YS50eXBlLmluZGV4T2YoJ2ltYWdlJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXNvdXJjZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmJsb2IgPSByZXNvdXJjZS5kYXRhO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLnNyYyA9IHNyYztcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCB0aGUgbm8gbG9uZ2VyIHVzZWQgYmxvYiBhZnRlciB0aGUgaW1hZ2UgbG9hZHNcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChzcmMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwicGl4aS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIzLjAuMTAtZGV2XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJQaXhpLmpzIGlzIGEgZmFzdCBsaWdodHdlaWdodCAyRCBsaWJyYXJ5IHRoYXQgd29ya3MgYWNyb3NzIGFsbCBkZXZpY2VzLlwiLFxuICBcImF1dGhvclwiOiBcIk1hdCBHcm92ZXNcIixcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIFwiQ2hhZCBFbmdsZXIgPGNoYWRAcGFudGhlcmRldi5jb20+XCIsXG4gICAgXCJSaWNoYXJkIERhdmV5IDxyZGF2ZXlAZ21haWwuY29tPlwiXG4gIF0sXG4gIFwibWFpblwiOiBcIi4vc3JjL2luZGV4LmpzXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ29vZGJveWRpZ2l0YWwuY29tL1wiLFxuICBcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzXCIsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJzdGFydFwiOiBcImd1bHAgJiYgZ3VscCB3YXRjaFwiLFxuICAgIFwidGVzdFwiOiBcImd1bHAgJiYgdGVzdGVtIGNpXCIsXG4gICAgXCJidWlsZFwiOiBcImd1bHBcIixcbiAgICBcImRvY3NcIjogXCJqc2RvYyAtYyAuL2d1bHAvdXRpbC9qc2RvYy5jb25mLmpzb24gLVIgUkVBRE1FLm1kXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW4vXCIsXG4gICAgXCJzcmMvXCIsXG4gICAgXCJDT05UUklCVVRJTkcubWRcIixcbiAgICBcIkxJQ0VOU0VcIixcbiAgICBcInBhY2thZ2UuanNvblwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYXN5bmNcIjogXCJeMS41LjBcIixcbiAgICBcImJyZnNcIjogXCJeMS40LjFcIixcbiAgICBcImVhcmN1dFwiOiBcIl4yLjAuN1wiLFxuICAgIFwiZXZlbnRlbWl0dGVyM1wiOiBcIl4xLjEuMVwiLFxuICAgIFwiZ2wtbWF0cml4XCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS90b2ppL2dsLW1hdHJpeC5naXRcIixcbiAgICBcIm9iamVjdC1hc3NpZ25cIjogXCJeNC4wLjFcIixcbiAgICBcInBpeGktZ2wtY29yZVwiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vR29vZEJveURpZ2l0YWwvcGl4aS1nbC1jb3JlLmdpdFwiLFxuICAgIFwicmVzb3VyY2UtbG9hZGVyXCI6IFwiXjEuNi40XCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYnJvd3NlcmlmeVwiOiBcIl4xMS4xLjBcIixcbiAgICBcImNoYWlcIjogXCJeMy4yLjBcIixcbiAgICBcImRlbFwiOiBcIl4yLjAuMlwiLFxuICAgIFwiZ3VscFwiOiBcIl4zLjkuMFwiLFxuICAgIFwiZ3VscC1jYWNoZWRcIjogXCJeMS4xLjBcIixcbiAgICBcImd1bHAtY29uY2F0XCI6IFwiXjIuNi4wXCIsXG4gICAgXCJndWxwLWRlYnVnXCI6IFwiXjIuMS4wXCIsXG4gICAgXCJndWxwLWhlYWRlclwiOiBcIl4xLjcuMVwiLFxuICAgIFwiZ3VscC1qc2hpbnRcIjogXCJeMS4xMS4yXCIsXG4gICAgXCJndWxwLW1pcnJvclwiOiBcIl4wLjQuMFwiLFxuICAgIFwiZ3VscC1wbHVtYmVyXCI6IFwiXjEuMC4xXCIsXG4gICAgXCJndWxwLXJlbmFtZVwiOiBcIl4xLjIuMlwiLFxuICAgIFwiZ3VscC1zb3VyY2VtYXBzXCI6IFwiXjEuNS4yXCIsXG4gICAgXCJndWxwLXVnbGlmeVwiOiBcIl4xLjQuMVwiLFxuICAgIFwiZ3VscC11dGlsXCI6IFwiXjMuMC42XCIsXG4gICAgXCJqYWd1YXJqcy1qc2RvY1wiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vZGF2aWRzaGltanMvamFndWFyanMtanNkb2MuZ2l0XCIsXG4gICAgXCJqc2RvY1wiOiBcIl4zLjMuMlwiLFxuICAgIFwianNoaW50LXN1bW1hcnlcIjogXCJeMC40LjBcIixcbiAgICBcIm1pbmltaXN0XCI6IFwiXjEuMi4wXCIsXG4gICAgXCJtb2NoYVwiOiBcIl4yLjMuMlwiLFxuICAgIFwicmVxdWlyZS1kaXJcIjogXCJeMC4zLjBcIixcbiAgICBcInJ1bi1zZXF1ZW5jZVwiOiBcIl4xLjEuMlwiLFxuICAgIFwidGVzdGVtXCI6IFwiXjAuOS40XCIsXG4gICAgXCJ2aW55bC1idWZmZXJcIjogXCJeMS4wLjBcIixcbiAgICBcInZpbnlsLXNvdXJjZS1zdHJlYW1cIjogXCJeMS4xLjBcIixcbiAgICBcIndhdGNoaWZ5XCI6IFwiXjMuNC4wXCJcbiAgfSxcbiAgXCJicm93c2VyaWZ5XCI6IHtcbiAgICBcInRyYW5zZm9ybVwiOiBbXG4gICAgICBcImJyZnNcIlxuICAgIF1cbiAgfVxufVxuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8vIGFkZCBzb21lIGV4dHJhIHZhcmlhYmxlcyB0byB0aGUgY29udGFpbmVyLi5cbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKVxuKTtcblxuXG4vKipcbiAqIFRoZSBBY2Nlc3NpYmlsaXR5IG1hbmFnZXIgcmVhY3JlYXRlcyB0aGUgYWJpbGl0eSB0byB0YWIgYW5kIGFuZCBoYXZlIGNvbnRlbnQgcmVhZCBieSBzY3JlZW4gcmVhZGVycy4gVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCBhcyBpdCBjYW4gcG9zc2libHkgaGVscCBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMgYWNjZXNzIHBpeGkgY29udGVudC5cbiAqIE11Y2ggbGlrZSBpbnRlcmFjdGlvbiBhbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgbWFkZSBhY2Nlc3NpYmxlLiBUaGlzIG1hbmFnZXIgd2lsbCBtYXAgdGhlIGV2ZW50cyBhcyBpZiB0aGUgbW91c2Ugd2FzIGJlaW5nIHVzZWQsIG1pbmltaXppbmcgdGhlIGVmZmVyb3QgcmVxdWlyZWQgdG8gaW1wbGVtZW50LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyXG4gKi9cbmZ1bmN0aW9uIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKHJlbmRlcmVyKVxue1xuXHQvLyBmaXJzdCB3ZSBjcmVhdGUgYSBkaXYgdGhhdCB3aWxsIHNpdCBvdmVyIHRoZSBwaXhpIGVsZW1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGRpdiBvdmVybGF5cyB3aWxsIGdvLlxuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBcbiAgICBkaXYuc3R5bGUud2lkdGggPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgZGl2LnN0eWxlLnRvcCA9IDA7XG4gICAgZGl2LnN0eWxlLmxlZnQgPSAwO1xuICAgLy9cbiAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcbiAgIFx0XG4gICBcdC8qKlxuICAgXHQgKiBUaGlzIGlzIHRoZSBkb20gZWxlbWVudCB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuICAgXHR0aGlzLmRpdiA9IGRpdjtcblxuICAgXHQvKipcbiAgIFx0ICogQSBzaW1wbGUgcG9vbCBmb3Igc3RvcmluZyBkaXZzLlxuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0FycmF5fVxuICAgXHQgKiBAcHJpdmF0ZVxuICAgXHQgKi9cbiBcdHRoaXMucG9vbCA9IFtdO1xuXG4gXHQvKipcbiBcdCAqIFRoaXMgaXMgYSB0aWNrIHVzZWQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIG5vIGxvbmdlciBiZWluZyByZW5kZXJlZC5cbiBcdCAqIFxuIFx0ICogQHR5cGUge051bWJlcn1cbiBcdCAqIEBwcml2YXRlXG4gXHQgKi9cbiAgIFx0dGhpcy5yZW5kZXJJZCA9IDA7XG5cbiAgIFx0LyoqXG4gICBcdCAqIFNldHRpbmcgdGhpcyB0byB0cnVlIHdpbGwgdmlzdWFsbHkgc2hvdyB0aGUgZGl2c1xuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0Jvb2xlYW59XG4gICBcdCAqL1xuICAgXHR0aGlzLmRlYnVnID0gZmFsc2U7XG5cbiAgXHQvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBhY2Nlc3NpYmlsaXR5IG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgIFx0dGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICBcdC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjdXJyZW50bHkgYWN0aXZlIGFjY2Vzc2libGUgaXRlbXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgXHR0aGlzLmNoaWxkcmVuID0gW107XG4gICBcdFxuICAgXHQvKipcbiAgICAgKiBwcmUgYmluZCB0aGUgZnVuY3Rpb25zLi5cbiAgICAgKi9cbiAgIFx0dGhpcy5fb25LZXlEb3duID0gdGhpcy5fb25LZXlEb3duLmJpbmQodGhpcyk7XG4gICBcdHRoaXMuX29uTW91c2VNb3ZlID0gdGhpcy5fb25Nb3VzZU1vdmUuYmluZCh0aGlzKTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHN0b3JlcyB0aGUgc3RhdGUgb2YgdGhlIG1hbmFnZXIuIElmIHRoZXJlIGFyZSBubyBhY2Nlc3NpYmxlIG9iamVjdHMgb3IgdGhlIG1vdXNlIGlzIG1vdmluZyB0aGUgd2lsbCBiZSBmYWxzZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcblxuXG4gICBcdC8vIGxldCBsaXN0ZW4gZm9yIHRhYi4uIG9uY2UgcHJlc3NlZCB3ZSBjYW4gZmlyZSB1cCBhbmQgc2hvdyB0aGUgYWNjZXNzaWJpbGl0eSBsYXllclxuICAgXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xufVxuXG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBBY2Nlc3NpYmlsaXR5TWFuYWdlcjtcblxuLyoqXG4gKiBBY3RpdmF0aW5nIHdpbGwgY2F1c2UgdGhlIEFjY2Vzc2liaWxpdHkgbGF5ZXIgdG8gYmUgc2hvd24uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIHByZXNlcyB0aGUgdGFiIGtleVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IHRydWU7XG5cblx0d2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCB0cnVlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9uKCdwb3N0cmVuZGVyJywgdGhpcy51cGRhdGUsIHRoaXMpO1xuXG5cdHRoaXMucmVuZGVyZXIudmlldy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuZGl2KTtcdFxufTtcblxuLyoqXG4gKiBEZWFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBoaWRkZW4uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIG1vdmVzIHRoZSBtb3VzZVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmRlYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKCF0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG5cblx0dGhpcy5yZW5kZXJlci5vZmYoJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSk7XG5cblx0dGhpcy5kaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmRpdik7XG5cbn07XG5cbi8qKlxuICogVGhpcyByZWN1cnNpdmUgZnVuY3Rpb24gd2lsbCBydW4gdGhyb3VnaHQgaGUgc2NlbmUgZ3JhcGggYW5kIGFkZCBhbnkgbmV3IGFjY2Vzc2libGUgb2JqZWN0cyB0byB0aGUgRE9NIGxheWVyLlxuICogQHBhcmFtIGVsZW1lbnQge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIERpc3BsYXlPYmplY3QgdG8gY2hlY2suXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlQWNjZXNzaWJsZU9iamVjdHMgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuXHRpZighZGlzcGxheU9iamVjdC52aXNpYmxlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYoZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlICYmIGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG5cdHtcblx0XHRpZighZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZUFjdGl2ZSlcblx0XHR7XG5cdFx0XHR0aGlzLmFkZENoaWxkKGRpc3BsYXlPYmplY3QpO1xuXHRcdH1cblx0ICAgXHRcblx0ICAgXHRkaXNwbGF5T2JqZWN0LnJlbmRlcklkID0gdGhpcy5yZW5kZXJJZDtcblx0fVxuXG5cdHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG5cblx0Zm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XG5cdFx0dGhpcy51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyhjaGlsZHJlbltpXSk7XG5cdH1cbn07XG5cblxuLyoqXG4gKiBCZWZvcmUgZWFjaCByZW5kZXIgdGhpcyBmdW5jdGlvbiB3aWxsIGVuc3VyZSB0aGF0IGFsbCBkaXZzIGFyZSBtYXBwZWQgY29ycmVjdGx5IHRvIHRoZWlyIERpc3BsYXlPYmplY3RzXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oKVxue1xuXG5cdC8vIHVwZGF0ZSBjaGlsZHJlbi4uLlxuXHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCk7XG5cblx0dmFyIHJlY3QgPSB0aGlzLnJlbmRlcmVyLnZpZXcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdHZhciBzeCA9IHJlY3Qud2lkdGggIC8gdGhpcy5yZW5kZXJlci53aWR0aDtcblx0dmFyIHN5ID0gcmVjdC5oZWlnaHQgLyB0aGlzLnJlbmRlcmVyLmhlaWdodDtcblxuXHR2YXIgZGl2ID0gdGhpcy5kaXY7XG5cblx0ZGl2LnN0eWxlLmxlZnQgPSByZWN0LmxlZnQgKyAncHgnO1xuXHRkaXYuc3R5bGUudG9wID0gcmVjdC50b3AgKyAncHgnO1xuXHRkaXYuc3R5bGUud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoICsgJ3B4Jztcblx0ZGl2LnN0eWxlLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0ICsgJ3B4JztcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblxuXHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cblx0XHRpZihjaGlsZC5yZW5kZXJJZCAhPT0gdGhpcy5yZW5kZXJJZClcblx0XHR7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGksIDEpO1xuXHRcdFx0dGhpcy5kaXYucmVtb3ZlQ2hpbGQoIGNoaWxkLl9hY2Nlc3NpYmxlRGl2ICk7XG5cdFx0XHR0aGlzLnBvb2wucHVzaChjaGlsZC5fYWNjZXNzaWJsZURpdik7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZURpdiA9IG51bGw7XG5cblx0XHRcdGktLTtcblxuXHRcdFx0aWYodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0Ly8gbWFwIGRpdiB0byBkaXNwbGF5Li5cblx0XHRcdGRpdiA9IGNoaWxkLl9hY2Nlc3NpYmxlRGl2O1xuXHRcdFx0dmFyIGhpdEFyZWEgPSBjaGlsZC5oaXRBcmVhO1xuXHRcdFx0dmFyIHd0ID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cblx0XHRcdGlmKGNoaWxkLmhpdEFyZWEpXG5cdFx0XHR7XG5cdFx0XHRcdGRpdi5zdHlsZS5sZWZ0ID0gKCh3dC50eCArIChoaXRBcmVhLnggKiB3dC5hKSkgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gICgod3QudHkgKyAoaGl0QXJlYS55ICogd3QuZCkpICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiB3dC5hICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLmhlaWdodCA9IChoaXRBcmVhLmhlaWdodCAqIHd0LmQgKiBzeSkgKyAncHgnO1xuXHRcdFx0XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdGhpdEFyZWEgPSBjaGlsZC5nZXRCb3VuZHMoKTtcblxuXHRcdFx0XHR0aGlzLmNhcEhpdEFyZWEoaGl0QXJlYSk7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoaGl0QXJlYS54ICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLnRvcCA9ICAoaGl0QXJlYS55ICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogc3kpICsgJ3B4Jztcblx0XHRcdH1cdFx0XG5cdFx0fVxuXHR9XG5cblx0Ly8gaW5jcmVtZW50IHRoZSByZW5kZXIgaWQuLlxuXHR0aGlzLnJlbmRlcklkKys7XG59O1xuXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuY2FwSGl0QXJlYSA9IGZ1bmN0aW9uIChoaXRBcmVhKVxue1xuICAgIGlmIChoaXRBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS53aWR0aCArPSBoaXRBcmVhLng7XG4gICAgICAgIGhpdEFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGhpdEFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCArPSBoaXRBcmVhLnk7XG4gICAgICAgIGhpdEFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBoaXRBcmVhLnggKyBoaXRBcmVhLndpZHRoID4gdGhpcy5yZW5kZXJlci53aWR0aCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoID0gdGhpcy5yZW5kZXJlci53aWR0aCAtIGhpdEFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueSArIGhpdEFyZWEuaGVpZ2h0ID4gdGhpcy5yZW5kZXJlci5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmhlaWdodCAtIGhpdEFyZWEueTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogQWRkcyBhIERpc3BsYXlPYmplY3QgdG8gdGhlIGFjY2Vzc2liaWxpdHkgbWFuYWdlclxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24oZGlzcGxheU9iamVjdClcbntcbi8vXHR0aGlzLmFjdGl2YXRlKCk7XG5cdFxuXHR2YXIgZGl2ID0gdGhpcy5wb29sLnBvcCgpO1xuXG5cdGlmKCFkaXYpXG5cdHtcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgXG5cblx0ICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG5cdCAgICBkaXYuc3R5bGUuaGVpZ2h0ID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmRlYnVnID8gJ3JnYmEoMjU1LDAsMCwwLjUpJyA6ICd0cmFuc3BhcmVudCc7XG5cdCAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXHQgICAgZGl2LnN0eWxlLnpJbmRleCA9IDI7XG5cdCAgICBkaXYuc3R5bGUuYm9yZGVyU3R5bGUgPSAnbm9uZSc7XG5cblx0ICAgIFxuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGljay5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKSk7XG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCB0aGlzLl9vbkZvY3VzT3V0LmJpbmQodGhpcykpO1xuXHR9XG5cdCAgIFx0XG5cblxuXG5cdGRpdi50aXRsZSA9IGRpc3BsYXlPYmplY3QuYWNjZXNzaWJsZVRpdGxlIHx8ICdkaXNwbGF5T2JqZWN0ICcgKyB0aGlzLnRhYkluZGV4O1xuXG5cdC8vXG5cdFxuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlID0gdHJ1ZTtcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiA9IGRpdjtcblx0ZGl2LmRpc3BsYXlPYmplY3QgPSBkaXNwbGF5T2JqZWN0O1xuXG5cblx0dGhpcy5jaGlsZHJlbi5wdXNoKGRpc3BsYXlPYmplY3QpO1xuXHR0aGlzLmRpdi5hcHBlbmRDaGlsZCggZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiApO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2LnRhYkluZGV4ID0gZGlzcGxheU9iamVjdC50YWJJbmRleDtcbn07XG5cblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgYnV0dG9uIHByZXNzIHRvIHBpeGkncyBJbnRlcmFjdGlvbk1hbmFnZXIgKGNsaWNrKVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkNsaWNrID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ2NsaWNrJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW92ZXIpXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uRm9jdXMgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW91dClcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1c091dCA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIGtleSBpcyBwcmVzc2VkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbktleURvd24gPSBmdW5jdGlvbihlKVxue1xuXHRpZihlLmtleUNvZGUgIT09IDkpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmFjdGl2YXRlKCk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uTW91c2VNb3ZlID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmRlYWN0aXZhdGUoKTtcbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKlxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIFxue1xuXHR0aGlzLmRpdiA9IG51bGw7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHR7XG5cdFx0dGhpcy5jaGlsZHJlbltpXS5kaXYgPSBudWxsO1xuXHR9XG5cblx0XG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duKTtcblx0XHRcblx0dGhpcy5wb29sID0gbnVsbDtcblx0dGhpcy5jaGlsZHJlbiA9IG51bGw7XG5cdHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdhY2Nlc3NpYmlsaXR5JywgQWNjZXNzaWJpbGl0eU1hbmFnZXIpO1xuXG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGFjY2Vzc2libGUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlNYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5hY2Nlc3NpYmlsaXR5LmFjY2Vzc2libGVUYXJnZXRcbiAqICAgICAgKTtcbiAqL1xudmFyIGFjY2Vzc2libGVUYXJnZXQgPSB7XG4gICAgXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlOmZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlVGl0bGU6bnVsbCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgdGFiSW5kZXg6MCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVBY3RpdmU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIF9hY2Nlc3NpYmxlRGl2OmZhbHNlXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYWNjZXNzaWJsZVRhcmdldDtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGFjY2Vzc2liaWxpdHkgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGFjY2Vzc2libGVUYXJnZXQ6ICAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKSxcbiAgICBBY2Nlc3NpYmlsaXR5TWFuYWdlcjogcmVxdWlyZSgnLi9BY2Nlc3NpYmlsaXR5TWFuYWdlcicpXG59O1xuIiwiLyoqXG4gKiBDb25zdGFudCB2YWx1ZXMgdXNlZCBpbiBwaXhpXG4gKlxuICogQGxlbmRzIFBJWElcbiAqL1xudmFyIENPTlNUID0ge1xuICAgIC8qKlxuICAgICAqIFN0cmluZyBvZiB0aGUgY3VycmVudCBQSVhJIHZlcnNpb25cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gVkVSU0lPTlxuICAgICAqL1xuICAgIFZFUlNJT046IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb24sXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUElfMiAtIFR3byBQaVxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBQSV8yOiBNYXRoLlBJICogMixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSQURfVE9fREVHIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgcmFkaWFucyB0byBkZWdyZWVzXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFJBRF9UT19ERUc6IDE4MCAvIE1hdGguUEksXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge051bWJlcn0gREVHX1RPX1JBRCAtIENvbnN0YW50IGNvbnZlcnNpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIGRlZ3JlZXMgdG8gcmFkaWFuc1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBERUdfVE9fUkFEOiBNYXRoLlBJIC8gMTgwLFxuXG4gICAgLyoqXG4gICAgICogVGFyZ2V0IGZyYW1lcyBwZXIgbWlsbGlzZWNvbmQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFRBUkdFVF9GUE1TPTAuMDZcbiAgICAgKi9cbiAgICBUQVJHRVRfRlBNUzogMC4wNixcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IHRvIGlkZW50aWZ5IHRoZSBSZW5kZXJlciBUeXBlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBSRU5ERVJFUl9UWVBFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuVU5LTk9XTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLldFQkdMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuQ0FOVkFTXG4gICAgICovXG4gICAgUkVOREVSRVJfVFlQRToge1xuICAgICAgICBVTktOT1dOOiAgICAwLFxuICAgICAgICBXRUJHTDogICAgICAxLFxuICAgICAgICBDQU5WQVM6ICAgICAyXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFZhcmlvdXMgYmxlbmQgbW9kZXMgc3VwcG9ydGVkIGJ5IFBJWEkuIElNUE9SVEFOVCAtIFRoZSBXZWJHTCByZW5kZXJlciBvbmx5IHN1cHBvcnRzXG4gICAgICogdGhlIE5PUk1BTCwgQURELCBNVUxUSVBMWSBhbmQgU0NSRUVOIGJsZW5kIG1vZGVzLiBBbnl0aGluZyBlbHNlIHdpbGwgc2lsZW50bHkgYWN0IGxpa2VcbiAgICAgKiBOT1JNQUwuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IEJMRU5EX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5BRERcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTVVMVElQTFlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0NSRUVOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk9WRVJMQVlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuREFSS0VOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkxJR0hURU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfQlVSTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IQVJEX0xJR0hUXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNPRlRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuRElGRkVSRU5DRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5FWENMVVNJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuSFVFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNBVFVSQVRJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTFVNSU5PU0lUWVxuICAgICAqL1xuICAgIEJMRU5EX01PREVTOiB7XG4gICAgICAgIE5PUk1BTDogICAgICAgICAwLFxuICAgICAgICBBREQ6ICAgICAgICAgICAgMSxcbiAgICAgICAgTVVMVElQTFk6ICAgICAgIDIsXG4gICAgICAgIFNDUkVFTjogICAgICAgICAzLFxuICAgICAgICBPVkVSTEFZOiAgICAgICAgNCxcbiAgICAgICAgREFSS0VOOiAgICAgICAgIDUsXG4gICAgICAgIExJR0hURU46ICAgICAgICA2LFxuICAgICAgICBDT0xPUl9ET0RHRTogICAgNyxcbiAgICAgICAgQ09MT1JfQlVSTjogICAgIDgsXG4gICAgICAgIEhBUkRfTElHSFQ6ICAgICA5LFxuICAgICAgICBTT0ZUX0xJR0hUOiAgICAgMTAsXG4gICAgICAgIERJRkZFUkVOQ0U6ICAgICAxMSxcbiAgICAgICAgRVhDTFVTSU9OOiAgICAgIDEyLFxuICAgICAgICBIVUU6ICAgICAgICAgICAgMTMsXG4gICAgICAgIFNBVFVSQVRJT046ICAgICAxNCxcbiAgICAgICAgQ09MT1I6ICAgICAgICAgIDE1LFxuICAgICAgICBMVU1JTk9TSVRZOiAgICAgMTZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyB3ZWJnbCBkcmF3IG1vZGVzLiBUaGVzZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIEdMIGRyYXdNb2RlIHRvIHVzZVxuICAgICAqIHVuZGVyIGNlcnRhaW4gc2l0dWF0aW9ucyBhbmQgcmVuZGVyZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBEUkFXX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuUE9JTlRTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX0xPT1BcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX1NUUklQXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9GQU5cbiAgICAgKi9cbiAgICBEUkFXX01PREVTOiB7XG4gICAgICAgIFBPSU5UUzogICAgICAgICAwLFxuICAgICAgICBMSU5FUzogICAgICAgICAgMSxcbiAgICAgICAgTElORV9MT09QOiAgICAgIDIsXG4gICAgICAgIExJTkVfU1RSSVA6ICAgICAzLFxuICAgICAgICBUUklBTkdMRVM6ICAgICAgNCxcbiAgICAgICAgVFJJQU5HTEVfU1RSSVA6IDUsXG4gICAgICAgIFRSSUFOR0xFX0ZBTjogICA2XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgcGl4aS5cbiAgICAgKlxuICAgICAqIFRoZSBERUZBVUxUIHNjYWxlIG1vZGUgYWZmZWN0cyB0aGUgZGVmYXVsdCBzY2FsaW5nIG1vZGUgb2YgZnV0dXJlIG9wZXJhdGlvbnMuXG4gICAgICogSXQgY2FuIGJlIHJlLWFzc2lnbmVkIHRvIGVpdGhlciBMSU5FQVIgb3IgTkVBUkVTVCwgZGVwZW5kaW5nIHVwb24gc3VpdGFiaWxpdHkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNDQUxFX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkRFRkFVTFQ9TElORUFSXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkxJTkVBUiBTbW9vdGggc2NhbGluZ1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5ORUFSRVNUIFBpeGVsYXRpbmcgc2NhbGluZ1xuICAgICAqL1xuICAgIFNDQUxFX01PREVTOiB7XG4gICAgICAgIERFRkFVTFQ6ICAgIDAsXG4gICAgICAgIExJTkVBUjogICAgIDAsXG4gICAgICAgIE5FQVJFU1Q6ICAgIDFcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHByZWZpeCB0aGF0IGRlbm90ZXMgYSBVUkwgaXMgZm9yIGEgcmV0aW5hIGFzc2V0XG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFJFVElOQV9QUkVGSVhcbiAgICAgKi9cbiAgICAvL2V4YW1wbGU6ICdAMngnLFxuICAgIFJFVElOQV9QUkVGSVg6IC9AKC4rKXgvLFxuXG4gICAgUkVTT0xVVElPTjoxLFxuXG4gICAgRklMVEVSX1JFU09MVVRJT046MSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHJlbmRlciBvcHRpb25zIGlmIG5vbmUgYXJlIHN1cHBsaWVkIHRvIHtAbGluayBQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICogb3Ige0BsaW5rIFBJWEkuQ2FudmFzUmVuZGVyZXJ9LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TXG4gICAgICogQHByb3BlcnR5IHtIVE1MQ2FudmFzRWxlbWVudH0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy52aWV3PW51bGxcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMudHJhbnNwYXJlbnQ9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuYW50aWFsaWFzPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmZvcmNlRlhBQT1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5yZXNvbHV0aW9uPTFcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hdXRvUmVzaXplPWZhbHNlXG4gICAgICovXG4gICAgREVGQVVMVF9SRU5ERVJfT1BUSU9OUzoge1xuICAgICAgICB2aWV3OiBudWxsLFxuICAgICAgICByZXNvbHV0aW9uOiAxLFxuICAgICAgICBhbnRpYWxpYXM6IGZhbHNlLFxuICAgICAgICBmb3JjZUZYQUE6IGZhbHNlLFxuICAgICAgICBhdXRvUmVzaXplOiBmYWxzZSxcbiAgICAgICAgdHJhbnNwYXJlbnQ6IGZhbHNlLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IDB4MDAwMDAwLFxuICAgICAgICBjbGVhckJlZm9yZVJlbmRlcjogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBmYWxzZSxcbiAgICAgICAgcm91bmRQaXhlbHM6IGZhbHNlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50cyB0aGF0IGlkZW50aWZ5IHNoYXBlcywgbWFpbmx5IHRvIHByZXZlbnQgYGluc3RhbmNlb2ZgIGNhbGxzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVNcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlBPTFk9MFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUkVDVD0xXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5DSVJDPTJcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkVMSVA9M1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUlJFQz00XG4gICAgICovXG4gICAgU0hBUEVTOiB7XG4gICAgICAgIFBPTFk6IDAsXG4gICAgICAgIFJFQ1Q6IDEsXG4gICAgICAgIENJUkM6IDIsXG4gICAgICAgIEVMSVA6IDMsXG4gICAgICAgIFJSRUM6IDRcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogbWF5YmUgY2hhbmdlIHRvIFNQUklURS5CQVRDSF9TSVpFOiAyMDAwXG4gICAgLy8gVE9ETzogbWF5YmUgYWRkIFBBUlRJQ0xFLkJBVENIX1NJWkU6IDE1MDAwXG4gICAgU1BSSVRFX0JBVENIX1NJWkU6IDIwMDAgLy9uaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgYW5kIGRlc2t0b3AgbWFjaGluZXNcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ09OU1Q7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgRGlzcGxheU9iamVjdCA9IHJlcXVpcmUoJy4vRGlzcGxheU9iamVjdCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIENvbnRhaW5lciByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBkaXNwbGF5IG9iamVjdHMuXG4gKiBJdCBpcyB0aGUgYmFzZSBjbGFzcyBvZiBhbGwgZGlzcGxheSBvYmplY3RzIHRoYXQgYWN0IGFzIGEgY29udGFpbmVyIGZvciBvdGhlciBvYmplY3RzLlxuICpcbiAqYGBganNcbiAqIHZhciBjb250YWluZXIgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogYGBgXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuRGlzcGxheU9iamVjdFxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ29udGFpbmVyKClcbntcbiAgICBEaXNwbGF5T2JqZWN0LmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3RbXX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5Db250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSk7XG5Db250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb250YWluZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnRhaW5lci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG5cbiAgICAgICAgICAgIGlmICh3aWR0aCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IDE7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmIChoZWlnaHQgIT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyBoZWlnaHQgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogT3ZlcnJpZGFibGUgbWV0aG9kIHRoYXQgY2FuIGJlIHVzZWQgYnkgQ29udGFpbmVyIHN1YmNsYXNzZXMgd2hlbmV2ZXIgdGhlIGNoaWxkcmVuIGFycmF5IGlzIG1vZGlmaWVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5vbkNoaWxkcmVuQ2hhbmdlID0gZnVuY3Rpb24gKCkge307XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIuXG4gKiBcbiAqIFlvdSBjYW4gYWxzbyBhZGQgbXVsdHBsZSBpdGVtcyBsaWtlIHNvOiBteUNvbnRhaW5lci5hZGRDaGlsZCh0aGlua09uZSwgdGhpbmdUd28sIHRoaW5nVGhyZWUpXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gYWRkIHRvIHRoZSBjb250YWluZXJcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxueyBcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IHdlIGNhbiBieXBhc3MgbG9vcGluZyB0aHJvdWdoIHRoZSB0aGVtXG4gICAgaWYoYXJndW1lbnRzTGVuZ3RoID4gMSlcbiAgICB7XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgYXJndW1lbnRzIHByb3BlcnR5IGFuZCBhZGQgYWxsIGNoaWxkcmVuXG4gICAgICAgIC8vIHVzZSBpdCB0aGUgcmlnaHQgd2F5ICgubGVuZ3RoIGFuZCBbaV0pIHNvIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc3RpbGwgYmUgb3B0aW1pc2VkIGJ5IEpTIHJ1bnRpbWVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoIGFyZ3VtZW50c1tpXSApO1xuICAgICAgICB9XG4gICAgfSAgICAgXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIGNoaWxkIGhhcyBhIHBhcmVudCB0aGVuIGxldHMgcmVtb3ZlIGl0IGFzIFBpeGkgb2JqZWN0cyBjYW4gb25seSBleGlzdCBpbiBvbmUgcGxhY2VcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKHRoaXMuY2hpbGRyZW4ubGVuZ3RoLTEpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIgYXQgYSBzcGVjaWZpZWQgaW5kZXguIElmIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0byBhZGRcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gcGxhY2UgdGhlIGNoaWxkIGluXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyBhZGRlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5hZGRDaGlsZEF0ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuXG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNoaWxkICsgJ2FkZENoaWxkQXQ6IFRoZSBpbmRleCAnKyBpbmRleCArJyBzdXBwbGllZCBpcyBvdXQgb2YgYm91bmRzICcgKyB0aGlzLmNoaWxkcmVuLmxlbmd0aCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBTd2FwcyB0aGUgcG9zaXRpb24gb2YgMiBEaXNwbGF5IE9iamVjdHMgd2l0aGluIHRoaXMgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGNoaWxkMiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnN3YXBDaGlsZHJlbiA9IGZ1bmN0aW9uIChjaGlsZCwgY2hpbGQyKVxue1xuICAgIGlmIChjaGlsZCA9PT0gY2hpbGQyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbmRleDEgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuICAgIHZhciBpbmRleDIgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQyKTtcblxuICAgIGlmIChpbmRleDEgPCAwIHx8IGluZGV4MiA8IDApXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N3YXBDaGlsZHJlbjogQm90aCB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdHMgbXVzdCBiZSBjaGlsZHJlbiBvZiB0aGUgY2FsbGVyLicpO1xuICAgIH1cblxuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgxXSA9IGNoaWxkMjtcbiAgICB0aGlzLmNoaWxkcmVuW2luZGV4Ml0gPSBjaGlsZDtcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgxIDwgaW5kZXgyID8gaW5kZXgxIDogaW5kZXgyKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW5kZXggcG9zaXRpb24gb2YgYSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIHRvIGlkZW50aWZ5XG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3QgdG8gaWRlbnRpZnlcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBtdXN0IGJlIGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgcG9zaXRpb24gb2YgYW4gZXhpc3RpbmcgY2hpbGQgaW4gdGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgRGlzcGxheU9iamVjdCBpbnN0YW5jZSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBpbmRleCBudW1iZXJcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgcmVzdWx0aW5nIGluZGV4IG51bWJlciBmb3IgdGhlIGNoaWxkIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc2V0Q2hpbGRJbmRleCA9IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN1cHBsaWVkIGluZGV4IGlzIG91dCBvZiBib3VuZHMnKTtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudEluZGV4ID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkKTtcblxuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGN1cnJlbnRJbmRleCwgMSk7IC8vIHJlbW92ZSBmcm9tIG9sZCBwb3NpdGlvblxuICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7IC8vYWRkIGF0IG5ldyBwb3NpdGlvblxuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNoaWxkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhcbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgYXRcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIGF0IHRoZSBnaXZlbiBpbmRleCwgaWYgYW55LlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkQXQgPSBmdW5jdGlvbiAoaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0Q2hpbGRBdDogU3VwcGxpZWQgaW5kZXggJyArIGluZGV4ICsgJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY2hpbGQgbGlzdCwgb3IgdGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3QgaXMgbm90IGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2luZGV4XTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVtb3ZlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyByZW1vdmVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuXG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYSBjaGlsZCBmcm9tIHRoZSBzcGVjaWZpZWQgaW5kZXggcG9zaXRpb24uXG4gKlxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBnZXQgdGhlIGNoaWxkIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICB2YXIgY2hpbGQgPSB0aGlzLmdldENoaWxkQXQoaW5kZXgpO1xuXG4gICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpbmRleCwgMSk7XG5cbiAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICBjaGlsZC5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGNoaWxkcmVuIGZyb20gdGhpcyBjb250YWluZXIgdGhhdCBhcmUgd2l0aGluIHRoZSBiZWdpbiBhbmQgZW5kIGluZGV4ZXMuXG4gKlxuICogQHBhcmFtIGJlZ2luSW5kZXgge251bWJlcn0gVGhlIGJlZ2lubmluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyAwLlxuICogQHBhcmFtIGVuZEluZGV4IHtudW1iZXJ9IFRoZSBlbmRpbmcgcG9zaXRpb24uIERlZmF1bHQgdmFsdWUgaXMgc2l6ZSBvZiB0aGUgY29udGFpbmVyLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkcmVuID0gZnVuY3Rpb24gKGJlZ2luSW5kZXgsIGVuZEluZGV4KVxue1xuICAgIHZhciBiZWdpbiA9IGJlZ2luSW5kZXggfHwgMDtcbiAgICB2YXIgZW5kID0gdHlwZW9mIGVuZEluZGV4ID09PSAnbnVtYmVyJyA/IGVuZEluZGV4IDogdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgdmFyIHJhbmdlID0gZW5kIC0gYmVnaW47XG4gICAgdmFyIHJlbW92ZWQsIGk7XG5cbiAgICBpZiAocmFuZ2UgPiAwICYmIHJhbmdlIDw9IGVuZClcbiAgICB7XG4gICAgICAgIHJlbW92ZWQgPSB0aGlzLmNoaWxkcmVuLnNwbGljZShiZWdpbiwgcmFuZ2UpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW1vdmVkW2ldLnBhcmVudCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoYmVnaW5JbmRleCk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0uZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbW92ZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJhbmdlID09PSAwICYmIHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigncmVtb3ZlQ2hpbGRyZW46IG51bWVyaWMgdmFsdWVzIGFyZSBvdXRzaWRlIHRoZSBhY2NlcHRhYmxlIHJhbmdlLicpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb24gYWxsIGNoaWxkcmVuIG9mIHRoaXMgY29udGFpbmVyIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0gPSBDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgQ29udGFpbmVyIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIGFsbCB2aXNpYmxlIGNoaWxkcmVuIGludG8gY29uc2lkZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE8gdGhlIGJvdW5kcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHRoaXMgcmVuZGVyIHNlc3Npb24gc28gcmV0dXJuIHdoYXQgd2UgaGF2ZVxuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBjaGlsZEJvdW5kcztcbiAgICAgICAgdmFyIGNoaWxkTWF4WDtcbiAgICAgICAgdmFyIGNoaWxkTWF4WTtcblxuICAgICAgICB2YXIgY2hpbGRWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZFZpc2libGUgPSB0cnVlO1xuXG4gICAgICAgICAgICBjaGlsZEJvdW5kcyA9IHRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIG1pblggPSBtaW5YIDwgY2hpbGRCb3VuZHMueCA/IG1pblggOiBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgbWluWSA9IG1pblkgPCBjaGlsZEJvdW5kcy55ID8gbWluWSA6IGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIGNoaWxkTWF4WCA9IGNoaWxkQm91bmRzLndpZHRoICsgY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIGNoaWxkTWF4WSA9IGNoaWxkQm91bmRzLmhlaWdodCArIGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIG1heFggPSBtYXhYID4gY2hpbGRNYXhYID8gbWF4WCA6IGNoaWxkTWF4WDtcbiAgICAgICAgICAgIG1heFkgPSBtYXhZID4gY2hpbGRNYXhZID8gbWF4WSA6IGNoaWxkTWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGRWaXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG5Db250YWluZXIucHJvdG90eXBlLmNvbnRhaW5lckdldEJvdW5kcyA9IENvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbm9uLWdsb2JhbCBsb2NhbCBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS5cbiAqIFRoZSBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXhDYWNoZSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0aC5NYXRyaXguSURFTlRJVFk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0cml4Q2FjaGU7XG5cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyggbWF0aC5NYXRyaXguSURFTlRJVFkgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcblxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGksIGo7XG5cbiAgICAvLyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgbWFzayBvciBhIGZpbHRlci5cbiAgICBpZiAodGhpcy5fbWFzayB8fCB0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgLy8gcHVzaCBmaWx0ZXIgZmlyc3QgYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIGNvcnJlY3QgZm9yIGFueSBtYXNraW5nXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzICYmIHRoaXMuX2ZpbHRlcnMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGhpcywgdGhpcy5fZmlsdGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcblxuICAgICAgICAvLyBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIGJhdGNoLCBvbmx5IHJlbmRlcmVkIGlmIGl0IGhhcyBhIHRleHR1cmUuXG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgbWFrZSBzdXJlIHRoZXkgZ2V0IHJlbmRlcmVkXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJXZWJHTChyZW5kZXJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayh0aGlzLCB0aGlzLl9tYXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBzaW1wbGUgcmVuZGVyIGNoaWxkcmVuIVxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gdGhpcyBpcyB3aGVyZSBjb250ZW50IGl0c2VsZiBnZXRzIHJlbmRlcmVkLi4uXG59O1xuXG4vKipcbiAqIFRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzXG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy5hbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hc2spXG4gICAge1xuICAgICAgICByZW5kZXJlci5tYXNrTWFuYWdlci5wdXNoTWFzayh0aGlzLl9tYXNrLCByZW5kZXJlcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayhyZW5kZXJlcik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUNoaWxkcmVuKVxue1xuICAgIERpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGlmIChkZXN0cm95Q2hpbGRyZW4pXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLmRlc3Ryb3koZGVzdHJveUNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xufTtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBUcmFuc2Zvcm0gPSByZXF1aXJlKCcuL1RyYW5zZm9ybVN0YXRpYycpLFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB3b3JsZEFscGhhOjEsIGNoaWxkcmVuOltdfTtcblxuXG4vKipcbiAqIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCBvbiB0aGUgc2NyZWVuLlxuICogVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIG9uIGl0cyBvd24gcmF0aGVyIGl0IHNob3VsZCBiZSBleHRlbmRlZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIEV2ZW50RW1pdHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gRGlzcGxheU9iamVjdCgpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb29yZGluYXRlIG9mIHRoZSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLnRyYW5zZm9ybS5wb3NpdGlvbjtcbiAgIC8vIHRoaXMuX3Bvc2l0aW9uID0gbmV3IENhY2hlUG9pbnQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHBpdm90IHBvaW50IG9mIHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgaXQgcm90YXRlcyBhcm91bmRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5waXZvdCA9IHRoaXMudHJhbnNmb3JtLnBpdm90XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBza2V3IGZhY3RvciBmb3IgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNrZXcgPSB0aGlzLnRyYW5zZm9ybS5za2V3XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3JvdGF0aW9uID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcGFjaXR5IG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgb2JqZWN0LiBJZiBmYWxzZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGRyYXduLCBhbmRcbiAgICAgKiB0aGUgdXBkYXRlVHJhbnNmb3JtIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENhbiB0aGlzIG9iamVjdCBiZSByZW5kZXJlZCwgaWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biBidXQgdGhlIHVwZGF0ZVRyYW5zZm9ybVxuICAgICAqIG1ldGhvZHMgd2lsbCBzdGlsbCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyIHRoYXQgY29udGFpbnMgdGhpcyBkaXNwbGF5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ29udGFpbmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtdWx0aXBsaWVkIGFscGhhIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgdHJhbnNmb3JtIG9mIHRoZSBvYmplY3QgYmFzZWQgb24gd29ybGQgKHBhcmVudCkgZmFjdG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS5sb2NhbFRyYW5zZm9ybTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcmVhIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0by4gVGhpcyBpcyB1c2VkIGFzIG1vcmUgb2YgYW4gb3B0aW1pc2F0aW9uXG4gICAgICogcmF0aGVyIHRoYW4gZmlndXJpbmcgb3V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGVhY2ggZnJhbWUgeW91IGNhbiBzZXQgdGhpcyByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW9zdCB1cC10by1kYXRlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgbWFzayBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gIC8vICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxheU9iamVjdDtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNjYWxlWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcm90YXRpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uZGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX2NyID0gTWF0aC5jb3ModmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBzcHJpdGUgaXMgZ2xvYmFsbHkgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB3b3JsZFZpc2libGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udmlzaWJsZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICB9IHdoaWxlIChpdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIG1hc2sgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LiBBIG1hc2sgaXMgYW4gb2JqZWN0IHRoYXQgbGltaXRzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIG9iamVjdCB0byB0aGUgc2hhcGUgb2YgdGhlIG1hc2sgYXBwbGllZCB0byBpdC5cbiAgICAgKiBJbiBQSVhJIGEgcmVndWxhciBtYXNrIG11c3QgYmUgYSBQSVhJLkdyYXBoaWNzIG9yIGEgUElYSS5TcHJpdGUgb2JqZWN0LiBUaGlzIGFsbG93cyBmb3IgbXVjaCBmYXN0ZXIgbWFza2luZyBpbiBjYW52YXMgYXMgaXQgdXRpbGlzZXMgc2hhcGUgY2xpcHBpbmcuXG4gICAgICogVG8gcmVtb3ZlIGEgbWFzaywgc2V0IHRoaXMgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3N8UElYSS5TcHJpdGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBtYXNrOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrLnJlbmRlcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXNrID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LlxuICAgICAqICogSU1QT1JUQU5UOiBUaGlzIGlzIGEgd2ViR0wgb25seSBmZWF0dXJlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlci5cbiAgICAgKiBUbyByZW1vdmUgZmlsdGVycyBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ251bGwnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkFic3RyYWN0RmlsdGVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMgJiYgdGhpcy5fZmlsdGVycy5zbGljZSgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlICYmIHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogVE9ETyAtIE9wdGltaXphdGlvbiBwYXNzIVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vaWYodGhpcy50cmFuc2Zvcm0uZGlydHkgfHwgcGFyZW50LnRyYW5zZm9ybS5kaXJ0eSlcbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICAvLyBtdWx0aXBseSB0aGUgYWxwaGFzLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gPSBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICpcbiAqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH1cbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyhtYXRoLk1hdHJpeC5JREVOVElUWSk7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9HbG9iYWwgPSBmdW5jdGlvbiAocG9zaXRpb24pXG57XG4gICAgLy8gdGhpcyBwYXJlbnQgY2hlY2sgaXMgZm9yIGp1c3QgaW4gY2FzZSB0aGUgaXRlbSBpcyBhIHJvb3Qgb2JqZWN0LlxuICAgIC8vIElmIGl0IGlzIHdlIG5lZWQgdG8gZ2l2ZSBpdCBhIHRlbXBvcmFyeSBwYXJlbnQgc28gdGhhdCBkaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtIHdvcmtzIGNvcnJlY3RseVxuICAgIC8vIHRoaXMgaXMgbWFpbmx5IHRvIGF2b2lkIGEgcGFyZW50IGNoZWNrIGluIHRoZSBtYWluIGxvb3AuIEV2ZXJ5IGxpdHRsZSBoZWxwcyBmb3IgcGVyZm9ybWFuY2UgOilcbiAgICBpZighdGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLnBhcmVudCA9IF90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIGxvdFxuICAgIHJldHVybiB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5KHBvc2l0aW9uKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgbG9jYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHJlbGF0aXZlIHRvIGFub3RoZXIgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEBwYXJhbSBbZnJvbV0ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gY2FsY3VsYXRlIHRoZSBnbG9iYWwgcG9zaXRpb24gZnJvbVxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBQb2ludClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9Mb2NhbCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgZnJvbSwgcG9pbnQpXG57XG4gICAgaWYgKGZyb20pXG4gICAge1xuICAgICAgICBwb3NpdGlvbiA9IGZyb20udG9HbG9iYWwocG9zaXRpb24pO1xuICAgIH1cblxuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIHNpbXBseSBhcHBseSB0aGUgbWF0cml4Li5cbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9zaXRpb24sIHBvaW50KTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyBPVkVSV1JJVEU7XG59O1xuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBwYXJlbnQgQ29udGFpbmVyIG9mIHRoaXMgRGlzcGxheU9iamVjdFxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge0NvbnRhaW5lcn0gVGhlIENvbnRhaW5lciB0byBhZGQgdGhpcyBEaXNwbGF5T2JqZWN0IHRvXG4gKiBAcmV0dXJuIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdGhhdCB0aGlzIERpc3BsYXlPYmplY3Qgd2FzIGFkZGVkIHRvXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFBhcmVudCA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWNvbnRhaW5lci5hZGRDaGlsZClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0UGFyZW50OiBBcmd1bWVudCBtdXN0IGJlIGEgQ29udGFpbmVyJyk7XG4gICAgfVxuXG4gICAgY29udGFpbmVyLmFkZENoaWxkKHRoaXMpO1xuICAgIHJldHVybiBjb250YWluZXI7XG59O1xuXG4vKipcbiAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHNldCB0aGUgcG9zdGlvbiwgc2NhbGUsIHNrZXcgYW5kIHBpdm90IGF0IG9uY2UuXG4gKlxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IFRoZSBYIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gVGhlIFkgcG9zaXRpb25cbiAqIEBwYXJhbSBbc2NhbGVYPTFdIHtudW1iZXJ9IFRoZSBYIHNjYWxlIHZhbHVlXG4gKiBAcGFyYW0gW3NjYWxlWT0xXSB7bnVtYmVyfSBUaGUgWSBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtyb3RhdGlvbj0wXSB7bnVtYmVyfSBUaGUgcm90YXRpb25cbiAqIEBwYXJhbSBbc2tld1g9MF0ge251bWJlcn0gVGhlIFggc2tldyB2YWx1ZVxuICogQHBhcmFtIFtza2V3WT0wXSB7bnVtYmVyfSBUaGUgWSBza2V3IHZhbHVlXG4gKiBAcGFyYW0gW3Bpdm90WD0wXSB7bnVtYmVyfSBUaGUgWCBwaXZvdCB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFk9MF0ge251bWJlcn0gVGhlIFkgcGl2b3QgdmFsdWVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24oeCwgeSwgc2NhbGVYLCBzY2FsZVksIHJvdGF0aW9uLCBza2V3WCwgc2tld1ksIHBpdm90WCwgcGl2b3RZKSAvL2pzaGludCBpZ25vcmU6bGluZVxue1xuICAgIHRoaXMucG9zaXRpb24ueCA9IHggfHwgMDtcbiAgICB0aGlzLnBvc2l0aW9uLnkgPSB5IHx8IDA7XG4gICAgdGhpcy5zY2FsZS54ID0gIXNjYWxlWCA/IDEgOiBzY2FsZVg7XG4gICAgdGhpcy5zY2FsZS55ID0gIXNjYWxlWSA/IDEgOiBzY2FsZVk7XG4gICAgdGhpcy5yb3RhdGlvbiA9IHJvdGF0aW9uIHx8IDA7XG4gICAgdGhpcy5za2V3LnggPSBza2V3WCB8fCAwO1xuICAgIHRoaXMuc2tldy55ID0gc2tld1kgfHwgMDtcbiAgICB0aGlzLnBpdm90LnggPSBwaXZvdFggfHwgMDtcbiAgICB0aGlzLnBpdm90LnkgPSBwaXZvdFkgfHwgMDtcbiAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQmFzZSBkZXN0cm95IG1ldGhvZCBmb3IgZ2VuZXJpYyBkaXNwbGF5IG9iamVjdHNcbiAqXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdGhpcy5wb3NpdGlvbiA9IG51bGw7XG4gICAgdGhpcy5zY2FsZSA9IG51bGw7XG4gICAgdGhpcy5waXZvdCA9IG51bGw7XG4gICAgdGhpcy5za2V3ID0gbnVsbDtcblxuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIHRoaXMuX2JvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fbWFzayA9IG51bGw7XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xufTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIE9ic2VydmFibGVQb2ludCh0cmFuc2Zvcm0sIHgsIHkpXG57XG4gICAgdGhpcy5feCA9IHggfHwgMDtcbiAgICB0aGlzLl95ID0geSB8fCAwO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG59XG5cbk9ic2VydmFibGVQb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYnNlcnZhYmxlUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IE9ic2VydmFibGVQb2ludDtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE9ic2VydmFibGVQb2ludC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3Qgb24gdGhlIHggYXhpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIHg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5feDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3ggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3k7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl95ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5PYnNlcnZhYmxlUG9pbnQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuX3ggPSB4IHx8IDA7XG4gICAgdGhpcy5feSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLl94IDogMCApO1xuICAgIFxuICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcbnZhciBPYnNlcnZhYmxlUG9pbnQgPSByZXF1aXJlKCcuL09ic2VydmFibGVQb2ludCcpO1xuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLCAwKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLDEsIDEpO1xuICAgIHRoaXMucGl2b3QgPSBuZXcgT2JzZXJ2YWJsZVBvaW50KHRoaXMsIDAsIDApO1xuICAgIHRoaXMuc2tldyA9IG5ldyBPYnNlcnZhYmxlUG9pbnQodGhpcywgMCwwKTtcbiAgICBcbiAgICB0aGlzLnJvdGF0aW9uID0gMDtcbiAgICB0aGlzLl9zciA9IE1hdGguc2luKDApO1xuICAgIHRoaXMuX2NyID0gTWF0aC5jb3MoMCk7XG4gICAgXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cblxuICAgIHRoaXMudXBkYXRlZCA9IHRydWU7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUcmFuc2Zvcm07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKHBhcmVudFRyYW5zZm9ybSlcbntcbiAgICB2YXIgcHQgPSBwYXJlbnRUcmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgbHQgPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3g7XG4gICAgICAgIGx0LmIgID0gIHRoaXMuX3NyICogdGhpcy5zY2FsZS5feDtcbiAgICAgICAgbHQuYyAgPSAtdGhpcy5fc3IgKiB0aGlzLnNjYWxlLl95O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3k7XG4gICAgICAgIGx0LnR4ID0gIHRoaXMucG9zaXRpb24uX3ggLSAodGhpcy5waXZvdC5feCAqIGx0LmEgKyB0aGlzLnBpdm90Ll95ICogbHQuYyk7XG4gICAgICAgIGx0LnR5ID0gIHRoaXMucG9zaXRpb24uX3kgLSAodGhpcy5waXZvdC5feCAqIGx0LmIgKyB0aGlzLnBpdm90Ll95ICogbHQuZCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVkID0gdGhpcy5kaXJ0eSB8fCBwYXJlbnRUcmFuc2Zvcm0uZGlydHk7XG5cbiAgICBpZih0aGlzLnVwZGF0ZWQpXG4gICAgeyAgICAgIFxuICAgICAgICAvLyBjb25jYXQgdGhlIHBhcmVudCBtYXRyaXggd2l0aCB0aGUgb2JqZWN0cyB0cmFuc2Zvcm0uXG4gICAgICAgIHd0LmEgID0gbHQuYSAgKiBwdC5hICsgbHQuYiAgKiBwdC5jO1xuICAgICAgICB3dC5iICA9IGx0LmEgICogcHQuYiArIGx0LmIgICogcHQuZDtcbiAgICAgICAgd3QuYyAgPSBsdC5jICAqIHB0LmEgKyBsdC5kICAqIHB0LmM7XG4gICAgICAgIHd0LmQgID0gbHQuYyAgKiBwdC5iICsgbHQuZCAgKiBwdC5kO1xuICAgICAgICB3dC50eCA9IGx0LnR4ICogcHQuYSArIGx0LnR5ICogcHQuYyArIHB0LnR4O1xuICAgICAgICB3dC50eSA9IGx0LnR4ICogcHQuYiArIGx0LnR5ICogcHQuZCArIHB0LnR5O1xuICAgIH1cbiAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhbnNmb3JtO1xuXG5cbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBDYW52YXNHcmFwaGljcyA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL0dyYXBoaWNzRGF0YScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIEdyYXBoaWNzIGNsYXNzIGNvbnRhaW5zIG1ldGhvZHMgdXNlZCB0byBkcmF3IHByaW1pdGl2ZSBzaGFwZXMgc3VjaCBhcyBsaW5lcywgY2lyY2xlcyBhbmRcbiAqIHJlY3RhbmdsZXMgdG8gdGhlIGRpc3BsYXksIGFuZCB0byBjb2xvciBhbmQgZmlsbCB0aGVtLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzKClcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSB2YWx1ZSB1c2VkIHdoZW4gZmlsbGluZyB0aGUgR3JhcGhpY3Mgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggKHRoaWNrbmVzcykgb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29sb3Igb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBHcmFwaGljcyBkYXRhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFRoaXMgaXMgYSBoZXggdmFsdWUuIEFwcGx5IGEgdmFsdWUgb2YgMHhGRkZGRkYgdG8gcmVzZXQgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmV2aW91cyB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFVzZWQgdG8gY29tcGFyZSB0byB0aGUgY3VycmVudCB0aW50IGFuZCBjaGVjayBpZiB0aGVyZXMgY2hhbmdlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLl9wcmV2VGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMO1xuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCBwYXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgY29udGFpbmluZyBzb21lIFdlYkdMLXJlbGF0ZWQgcHJvcGVydGllcyB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIG9iamVjdD59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAvLyBUT0RPIC0gX3dlYmdsIHNob3VsZCB1c2UgYSBwcm90b3R5cGUgb2JqZWN0LCBub3QgYSByYW5kb20gdW5kb2N1bWVudGVkIG9iamVjdC4uLlxuICAgIHRoaXMuX3dlYkdMID0ge307XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgc2hhcGUgaXMgYmVpbmcgdXNlZCBhcyBhIG1hc2suXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNNYXNrID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYm91bmRzJyBwYWRkaW5nIHVzZWQgZm9yIGJvdW5kcyBjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJvdW5kc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQSBjYWNoZSBvZiB0aGUgbG9jYWwgYm91bmRzIHRvIHByZXZlbnQgcmVjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwwLDEsMSk7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlIGdyYXBoaWNzXG4gICAgICogb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIFdlYkdMIGdyYXBoaWNzIG9iamVjdCBoYXMgY2hhbmdlZC4gSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZVxuICAgICAqIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlY2FsY3VsYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcblxuICAgIHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIGNhY2hlZCBzcHJpdGUgb2JqZWN0IG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBjYWNoZUFzQml0bWFwIGlzIHNldCB0byB0cnVlIHRoZSBncmFwaGljcyBvYmplY3Qgd2lsbCBiZSByZW5kZXJlZCBhcyBpZiBpdCB3YXMgYSBzcHJpdGUuXG4gICAgICogVGhpcyBpcyB1c2VmdWwgaWYgeW91ciBncmFwaGljcyBlbGVtZW50IGRvZXMgbm90IGNoYW5nZSBvZnRlbiwgYXMgaXQgd2lsbCBzcGVlZCB1cCB0aGUgcmVuZGVyaW5nXG4gICAgICogb2YgdGhlIG9iamVjdCBpbiBleGNoYW5nZSBmb3IgdGFraW5nIHVwIHRleHR1cmUgbWVtb3J5LiBJdCBpcyBhbHNvIHVzZWZ1bCBpZiB5b3UgbmVlZCB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3QgdG8gYmUgYW50aS1hbGlhc2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVuZGVyZWQgdXNpbmcgY2FudmFzLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCBpZlxuICAgICAqIHlvdSBhcmUgY29uc3RhbnRseSByZWRyYXdpbmcgdGhlIGdyYXBoaWNzIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBjYWNoZUFzQml0bWFwXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5HcmFwaGljcyNcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuR3JhcGhpY3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcbkdyYXBoaWNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljcztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEdyYXBoaWNzIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqIE5vdGUgdGhhdCB0aGUgb25seSB0aGUgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IGFyZSBjbG9uZWQsIG5vdCBpdHMgdHJhbnNmb3JtIChwb3NpdGlvbixzY2FsZSxldGMpXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2xvbmUgPSBuZXcgR3JhcGhpY3MoKTtcblxuICAgIGNsb25lLnJlbmRlcmFibGUgICAgPSB0aGlzLnJlbmRlcmFibGU7XG4gICAgY2xvbmUuZmlsbEFscGhhICAgICA9IHRoaXMuZmlsbEFscGhhO1xuICAgIGNsb25lLmxpbmVXaWR0aCAgICAgPSB0aGlzLmxpbmVXaWR0aDtcbiAgICBjbG9uZS5saW5lQ29sb3IgICAgID0gdGhpcy5saW5lQ29sb3I7XG4gICAgY2xvbmUudGludCAgICAgICAgICA9IHRoaXMudGludDtcbiAgICBjbG9uZS5ibGVuZE1vZGUgICAgID0gdGhpcy5ibGVuZE1vZGU7XG4gICAgY2xvbmUuaXNNYXNrICAgICAgICA9IHRoaXMuaXNNYXNrO1xuICAgIGNsb25lLmJvdW5kc1BhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG4gICAgY2xvbmUuZGlydHkgICAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuZ2xEaXJ0eSAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuY2FjaGVkU3ByaXRlRGlydHkgPSB0aGlzLmNhY2hlZFNwcml0ZURpcnR5O1xuXG4gICAgLy8gY29weSBncmFwaGljcyBkYXRhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIGNsb25lLmdyYXBoaWNzRGF0YS5wdXNoKHRoaXMuZ3JhcGhpY3NEYXRhW2ldLmNsb25lKCkpO1xuICAgIH1cblxuICAgIGNsb25lLmN1cnJlbnRQYXRoID0gY2xvbmUuZ3JhcGhpY3NEYXRhW2Nsb25lLmdyYXBoaWNzRGF0YS5sZW5ndGggLSAxXTtcblxuICAgIGNsb25lLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICByZXR1cm4gY2xvbmU7XG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgbGluZSBzdHlsZSB1c2VkIGZvciBzdWJzZXF1ZW50IGNhbGxzIHRvIEdyYXBoaWNzIG1ldGhvZHMgc3VjaCBhcyB0aGUgbGluZVRvKCkgbWV0aG9kIG9yIHRoZSBkcmF3Q2lyY2xlKCkgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUubGluZVN0eWxlID0gZnVuY3Rpb24gKGxpbmVXaWR0aCwgY29sb3IsIGFscGhhKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoIHx8IDA7XG4gICAgdGhpcy5saW5lQ29sb3IgPSBjb2xvciB8fCAwO1xuICAgIHRoaXMubGluZUFscGhhID0gKGFscGhhID09PSB1bmRlZmluZWQpID8gMSA6IGFscGhhO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBoYWxmd2F5IHRocm91Z2ggYSBsaW5lPyBzdGFydCBhIG5ldyBvbmUhXG4gICAgICAgICAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnNsaWNlKC0yKSk7XG4gICAgICAgICAgICBzaGFwZS5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSBpdHMgZW1wdHkgc28gbGV0cyBqdXN0IHNldCB0aGUgbGluZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVXaWR0aCA9IHRoaXMubGluZVdpZHRoO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZUFscGhhID0gdGhpcy5saW5lQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogTW92ZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byB4LCB5LlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IHRoZSBYIGNvb3JkaW5hdGUgdG8gbW92ZSB0b1xuICogQHBhcmFtIHkge251bWJlcn0gdGhlIFkgY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICAqL1xuR3JhcGhpY3MucHJvdG90eXBlLm1vdmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24oW3gseV0pO1xuICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIGxpbmUgdXNpbmcgdGhlIGN1cnJlbnQgbGluZSBzdHlsZSBmcm9tIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8gKHgsIHkpO1xuICogVGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiBpcyB0aGVuIHNldCB0byAoeCwgeSkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBkcmF3IHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lVG8gPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgsIHkpO1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnF1YWRyYXRpY0N1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICBuID0gMjAsXG4gICAgICAgIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLCAwKTtcbiAgICB9XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBuOyArK2kpXG4gICAge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgeGEgPSBmcm9tWCArICggKGNwWCAtIGZyb21YKSAqIGogKTtcbiAgICAgICAgeWEgPSBmcm9tWSArICggKGNwWSAtIGZyb21ZKSAqIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCggeGEgKyAoICgoY3BYICsgKCAodG9YIC0gY3BYKSAqIGogKSkgLSB4YSkgKiBqICksXG4gICAgICAgICAgICAgICAgICAgICB5YSArICggKChjcFkgKyAoICh0b1kgLSBjcFkpICogaiApKSAtIHlhKSAqIGogKSApO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gY3BYMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlemllckN1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIGNwWDIsIGNwWTIsIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgbiA9IDIwLFxuICAgICAgICBkdCxcbiAgICAgICAgZHQyLFxuICAgICAgICBkdDMsXG4gICAgICAgIHQyLFxuICAgICAgICB0MyxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICBkdCA9ICgxIC0gaik7XG4gICAgICAgIGR0MiA9IGR0ICogZHQ7XG4gICAgICAgIGR0MyA9IGR0MiAqIGR0O1xuXG4gICAgICAgIHQyID0gaiAqIGo7XG4gICAgICAgIHQzID0gdDIgKiBqO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCBkdDMgKiBmcm9tWCArIDMgKiBkdDIgKiBqICogY3BYICsgMyAqIGR0ICogdDIgKiBjcFgyICsgdDMgKiB0b1gsXG4gICAgICAgICAgICAgICAgICAgICBkdDMgKiBmcm9tWSArIDMgKiBkdDIgKiBqICogY3BZICsgMyAqIGR0ICogdDIgKiBjcFkyICsgdDMgKiB0b1kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjVG8oKSBtZXRob2QgY3JlYXRlcyBhbiBhcmMvY3VydmUgYmV0d2VlbiB0d28gdGFuZ2VudHMgb24gdGhlIGNhbnZhcy5cbiAqXG4gKiBcImJvcnJvd2VkXCIgZnJvbSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Z4Y2FudmFzLyAtIHRoYW5rcyBnb29nbGUhXG4gKlxuICogQHBhcmFtIHgxIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTEge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB4MiB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGFyY1xuICogQHBhcmFtIHkyIHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGFyY1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmFyY1RvID0gZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyLCByYWRpdXMpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oeDEsIHkxKTtcbiAgICB9XG5cbiAgICB2YXIgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMsXG4gICAgICAgIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0sXG4gICAgICAgIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0sXG4gICAgICAgIGExID0gZnJvbVkgLSB5MSxcbiAgICAgICAgYjEgPSBmcm9tWCAtIHgxLFxuICAgICAgICBhMiA9IHkyICAgLSB5MSxcbiAgICAgICAgYjIgPSB4MiAgIC0geDEsXG4gICAgICAgIG1tID0gTWF0aC5hYnMoYTEgKiBiMiAtIGIxICogYTIpO1xuXG4gICAgaWYgKG1tIDwgMS4wZS04IHx8IHJhZGl1cyA9PT0gMClcbiAgICB7XG4gICAgICAgIGlmIChwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAhPT0geDEgfHwgcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0gIT09IHkxKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHMucHVzaCh4MSwgeTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBkZCA9IGExICogYTEgKyBiMSAqIGIxLFxuICAgICAgICAgICAgY2MgPSBhMiAqIGEyICsgYjIgKiBiMixcbiAgICAgICAgICAgIHR0ID0gYTEgKiBhMiArIGIxICogYjIsXG4gICAgICAgICAgICBrMSA9IHJhZGl1cyAqIE1hdGguc3FydChkZCkgLyBtbSxcbiAgICAgICAgICAgIGsyID0gcmFkaXVzICogTWF0aC5zcXJ0KGNjKSAvIG1tLFxuICAgICAgICAgICAgajEgPSBrMSAqIHR0IC8gZGQsXG4gICAgICAgICAgICBqMiA9IGsyICogdHQgLyBjYyxcbiAgICAgICAgICAgIGN4ID0gazEgKiBiMiArIGsyICogYjEsXG4gICAgICAgICAgICBjeSA9IGsxICogYTIgKyBrMiAqIGExLFxuICAgICAgICAgICAgcHggPSBiMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHB5ID0gYTEgKiAoazIgKyBqMSksXG4gICAgICAgICAgICBxeCA9IGIyICogKGsxICsgajIpLFxuICAgICAgICAgICAgcXkgPSBhMiAqIChrMSArIGoyKSxcbiAgICAgICAgICAgIHN0YXJ0QW5nbGUgPSBNYXRoLmF0YW4yKHB5IC0gY3ksIHB4IC0gY3gpLFxuICAgICAgICAgICAgZW5kQW5nbGUgICA9IE1hdGguYXRhbjIocXkgLSBjeSwgcXggLSBjeCk7XG5cbiAgICAgICAgdGhpcy5hcmMoY3ggKyB4MSwgY3kgKyB5MSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYjEgKiBhMiA+IGIyICogYTEpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSAodXNlZCB0byBjcmVhdGUgY2lyY2xlcywgb3IgcGFydHMgb2YgY2lyY2xlcykuXG4gKlxuICogQHBhcmFtIGN4IHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gY3kge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gc3RhcnRBbmdsZSB7bnVtYmVyfSBUaGUgc3RhcnRpbmcgYW5nbGUsIGluIHJhZGlhbnMgKDAgaXMgYXQgdGhlIDMgbydjbG9jayBwb3NpdGlvbiBvZiB0aGUgYXJjJ3MgY2lyY2xlKVxuICogQHBhcmFtIGVuZEFuZ2xlIHtudW1iZXJ9IFRoZSBlbmRpbmcgYW5nbGUsIGluIHJhZGlhbnNcbiAqIEBwYXJhbSBhbnRpY2xvY2t3aXNlIHtib29sZWFufSBPcHRpb25hbC4gU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGRyYXdpbmcgc2hvdWxkIGJlIGNvdW50ZXJjbG9ja3dpc2Ugb3IgY2xvY2t3aXNlLiBGYWxzZSBpcyBkZWZhdWx0LCBhbmQgaW5kaWNhdGVzIGNsb2Nrd2lzZSwgd2hpbGUgdHJ1ZSBpbmRpY2F0ZXMgY291bnRlci1jbG9ja3dpc2UuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjID0gZnVuY3Rpb24oY3gsIGN5LCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBhbnRpY2xvY2t3aXNlKVxue1xuICAgIGFudGljbG9ja3dpc2UgPSBhbnRpY2xvY2t3aXNlIHx8IGZhbHNlO1xuXG4gICAgaWYgKHN0YXJ0QW5nbGUgPT09IGVuZEFuZ2xlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYoICFhbnRpY2xvY2t3aXNlICYmIGVuZEFuZ2xlIDw9IHN0YXJ0QW5nbGUgKVxuICAgIHtcbiAgICAgICAgZW5kQW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuICAgIGVsc2UgaWYoIGFudGljbG9ja3dpc2UgJiYgc3RhcnRBbmdsZSA8PSBlbmRBbmdsZSApXG4gICAge1xuICAgICAgICBzdGFydEFuZ2xlICs9IE1hdGguUEkgKiAyO1xuICAgIH1cblxuICAgIHZhciBzd2VlcCA9IGFudGljbG9ja3dpc2UgPyAoc3RhcnRBbmdsZSAtIGVuZEFuZ2xlKSAqIC0xIDogKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSk7XG4gICAgdmFyIHNlZ3MgPSAgTWF0aC5jZWlsKE1hdGguYWJzKHN3ZWVwKSAvIChNYXRoLlBJICogMikpICogNDA7XG5cbiAgICBpZihzd2VlcCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBzdGFydFggPSBjeCArIE1hdGguY29zKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuICAgIHZhciBzdGFydFkgPSBjeSArIE1hdGguc2luKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHN0YXJ0WCwgc3RhcnRZKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciB0aGV0YSA9IHN3ZWVwLyhzZWdzKjIpO1xuICAgIHZhciB0aGV0YTIgPSB0aGV0YSoyO1xuXG4gICAgdmFyIGNUaGV0YSA9IE1hdGguY29zKHRoZXRhKTtcbiAgICB2YXIgc1RoZXRhID0gTWF0aC5zaW4odGhldGEpO1xuXG4gICAgdmFyIHNlZ01pbnVzID0gc2VncyAtIDE7XG5cbiAgICB2YXIgcmVtYWluZGVyID0gKCBzZWdNaW51cyAlIDEgKSAvIHNlZ01pbnVzO1xuXG4gICAgZm9yKHZhciBpPTA7IGk8PXNlZ01pbnVzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcmVhbCA9ICBpICsgcmVtYWluZGVyICogaTtcblxuXG4gICAgICAgIHZhciBhbmdsZSA9ICgodGhldGEpICsgc3RhcnRBbmdsZSArICh0aGV0YTIgKiByZWFsKSk7XG5cbiAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgIHZhciBzID0gLU1hdGguc2luKGFuZ2xlKTtcblxuICAgICAgICBwb2ludHMucHVzaCgoIChjVGhldGEgKiAgYykgKyAoc1RoZXRhICogcykgKSAqIHJhZGl1cyArIGN4LFxuICAgICAgICAgICAgICAgICAgICAoIChjVGhldGEgKiAtcykgKyAoc1RoZXRhICogYykgKSAqIHJhZGl1cyArIGN5KTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIGEgc2ltcGxlIG9uZS1jb2xvciBmaWxsIHRoYXQgc3Vic2VxdWVudCBjYWxscyB0byBvdGhlciBHcmFwaGljcyBtZXRob2RzXG4gKiAoc3VjaCBhcyBsaW5lVG8oKSBvciBkcmF3Q2lyY2xlKCkpIHVzZSB3aGVuIGRyYXdpbmcuXG4gKlxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlZ2luRmlsbCA9IGZ1bmN0aW9uIChjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5maWxsaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPD0gMilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsID0gdGhpcy5maWxsaW5nO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQ29sb3IgPSB0aGlzLmZpbGxDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbEFscGhhID0gdGhpcy5maWxsQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBmaWxsIHRvIHRoZSBsaW5lcyBhbmQgc2hhcGVzIHRoYXQgd2VyZSBhZGRlZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHRoZSBiZWdpbkZpbGwoKSBtZXRob2QuXG4gKlxuICogQHJldHVybiB7R3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5lbmRGaWxsID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IG51bGw7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCApXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguUmVjdGFuZ2xlKHgseSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gUmFkaXVzIG9mIHRoZSByZWN0YW5nbGUgY29ybmVyc1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSb3VuZGVkUmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzIClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5Sb3VuZGVkUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgY2lyY2xlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3Q2lyY2xlID0gZnVuY3Rpb24gKHgsIHksIHJhZGl1cylcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5DaXJjbGUoeCx5LCByYWRpdXMpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhbiBlbGxpcHNlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIGhhbGYgd2lkdGggb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd0VsbGlwc2UgPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5FbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIHBvbHlnb24gdXNpbmcgdGhlIGdpdmVuIHBhdGguXG4gKlxuICogQHBhcmFtIHBhdGgge251bWJlcltdfFBJWEkuUG9pbnRbXX0gVGhlIHBhdGggZGF0YSB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgcG9seWdvbi5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UG9seWdvbiA9IGZ1bmN0aW9uIChwYXRoKVxue1xuICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGFzc2lnbm1lbnQgZGVvcHRcbiAgICAvLyBzZWUgc2VjdGlvbiAzLjE6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgIHZhciBwb2ludHMgPSBwYXRoO1xuXG4gICAgdmFyIGNsb3NlZCA9IHRydWU7XG5cbiAgICBpZiAocG9pbnRzIGluc3RhbmNlb2YgbWF0aC5Qb2x5Z29uKVxuICAgIHtcbiAgICAgICAgY2xvc2VkID0gcG9pbnRzLmNsb3NlZDtcbiAgICAgICAgcG9pbnRzID0gcG9pbnRzLnBvaW50cztcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHNbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHBvaW50cyk7XG4gICAgc2hhcGUuY2xvc2VkID0gY2xvc2VkO1xuXG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZ3JhcGhpY3MgdGhhdCB3ZXJlIGRyYXduIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LCBhbmQgcmVzZXRzIGZpbGwgYW5kIGxpbmUgc3R5bGUgc2V0dGluZ3MuXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG4gICAgdGhpcy5maWxsaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmNsZWFyRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gW107XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGdlb21ldHJ5IGlzIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNob3VsZCBiZSBvbmUgb2YgdGhlIHNjYWxlTW9kZSBjb25zdHNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBncmFwaGljcyBvYmplY3RcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVzb2x1dGlvbiwgc2NhbGVNb2RlKVxue1xuXG4gICAgcmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGggKiByZXNvbHV0aW9uLCBib3VuZHMuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXNCdWZmZXIuY29udGV4dC5zY2FsZShyZXNvbHV0aW9uLCByZXNvbHV0aW9uKTtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIGNhbnZhc0J1ZmZlci5jb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcblxuICAgIGlmICh0aGlzLmdsRGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5nbERpcnR5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5yZW5kZXIodGhpcyk7XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5pc01hc2sgPT09IHRydWUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHRpbnQgaGFzIGNoYW5nZWQsIHNldCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRpcnR5LlxuICAgIGlmICh0aGlzLl9wcmV2VGludCAhPT0gdGhpcy50aW50KSB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIHRoaXMgY29kZSBtYXkgc3RpbGwgYmUgbmVlZGVkIHNvIGxlYXZpbmcgZm9yIG5vdy4uXG4gICAgLy9cbiAgICAvKlxuICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuZGlydHkgfHwgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVDYWNoZWRTcHJpdGUoKTtcblxuICAgICAgICAgICAgLy8gd2Ugd2lsbCBhbHNvIG5lZWQgdG8gdXBkYXRlIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUoKTtcblxuICAgICAgICAgICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFscGhhID0gdGhpcy5hbHBoYTtcblxuICAgICAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLl9jYWNoZWRTcHJpdGUsIHJlbmRlcmVyKTtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgICovXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY29udGV4dCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYm91bmRzIG9mIHRoZSBncmFwaGljIHNoYXBlIGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IFRoZSB3b3JsZCB0cmFuc2Zvcm0gbWF0cml4IHRvIHVzZSwgZGVmYXVsdHMgdG8gdGhpc1xuICogIG9iamVjdCdzIHdvcmxkVHJhbnNmb3JtLlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICAvLyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBpdGVtIGlzIGEgbWFzayFcbiAgICAgICAgaWYgKCF0aGlzLnJlbmRlcmFibGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJvdW5kc0RpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICAgICAgICAgIHRoaXMuZ2xEaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYm91bmRzRGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9sb2NhbEJvdW5kcztcblxuICAgICAgICB2YXIgdzAgPSBib3VuZHMueDtcbiAgICAgICAgdmFyIHcxID0gYm91bmRzLndpZHRoICsgYm91bmRzLng7XG5cbiAgICAgICAgdmFyIGgwID0gYm91bmRzLnk7XG4gICAgICAgIHZhciBoMSA9IGJvdW5kcy5oZWlnaHQgKyBib3VuZHMueTtcblxuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAgICAgdmFyIHgyID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgICAgICB2YXIgeTMgPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgICAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgbWF4WCA9IHgxO1xuICAgICAgICB2YXIgbWF4WSA9IHkxO1xuXG4gICAgICAgIHZhciBtaW5YID0geDE7XG4gICAgICAgIHZhciBtaW5ZID0geTE7XG5cbiAgICAgICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICAgICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICAgICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgICAgICB0aGlzLl9ib3VuZHMueCA9IG1pblg7XG4gICAgICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy55ID0gbWluWTtcbiAgICAgICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSB0aGlzLl9ib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBncmFwaGljcyBvYmplY3RcbipcbiogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4qL1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciBncmFwaGljc0RhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKCFkYXRhLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gb25seSBkZWFsIHdpdGggZmlsbHMuLlxuICAgICAgICBpZiAoZGF0YS5zaGFwZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCBkYXRhLnNoYXBlLmNvbnRhaW5zKCB0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkgKSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAqXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcblxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICBpZiAodGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdmFyIHNoYXBlLCBwb2ludHMsIHgsIHksIHcsIGg7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVtpXTtcbiAgICAgICAgICAgIHZhciB0eXBlID0gZGF0YS50eXBlO1xuICAgICAgICAgICAgdmFyIGxpbmVXaWR0aCA9IGRhdGEubGluZVdpZHRoO1xuICAgICAgICAgICAgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QgfHwgdHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLnggLSBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueSAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS53aWR0aCArIGxpbmVXaWR0aDtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLnJhZGl1cyArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLng7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLmhlaWdodCArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFBPTFlcbiAgICAgICAgICAgICAgICBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBvaW50cy5sZW5ndGg7IGogKz0gMilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHggPSBwb2ludHNbal07XG4gICAgICAgICAgICAgICAgICAgIHkgPSBwb2ludHNbaisxXTtcblxuICAgICAgICAgICAgICAgICAgICBtaW5YID0geC1saW5lV2lkdGggPCBtaW5YID8geC1saW5lV2lkdGggOiBtaW5YO1xuICAgICAgICAgICAgICAgICAgICBtYXhYID0geCtsaW5lV2lkdGggPiBtYXhYID8geCtsaW5lV2lkdGggOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblkgPSB5LWxpbmVXaWR0aCA8IG1pblkgPyB5LWxpbmVXaWR0aCA6IG1pblk7XG4gICAgICAgICAgICAgICAgICAgIG1heFkgPSB5K2xpbmVXaWR0aCA+IG1heFkgPyB5K2xpbmVXaWR0aCA6IG1heFk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIG1pblggPSAwO1xuICAgICAgICBtYXhYID0gMDtcbiAgICAgICAgbWluWSA9IDA7XG4gICAgICAgIG1heFkgPSAwO1xuICAgIH1cblxuICAgIHZhciBwYWRkaW5nID0gdGhpcy5ib3VuZHNQYWRkaW5nO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueCA9IG1pblggLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLndpZHRoID0gKG1heFggLSBtaW5YKSArIHBhZGRpbmcgKiAyO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueSA9IG1pblkgLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLmhlaWdodCA9IChtYXhZIC0gbWluWSkgKyBwYWRkaW5nICogMjtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjYWNoZWQgc3ByaXRlIHdoZW4gdGhlIHNwcml0ZSBoYXMgY2FjaGVBc0JpdG1hcCA9IHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIGlmICghdGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgdmFyIGNhbnZhc0J1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcbiAgICAgICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzQnVmZmVyLmNhbnZhcyk7XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlciA9IGNhbnZhc0J1ZmZlcjtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLnJlc2l6ZShib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIC8vIGxldmVyYWdlIHRoZSBhbmNob3IgdG8gYWNjb3VudCBmb3IgdGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudFxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQuc2F2ZSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC50cmFuc2xhdGUoLWJvdW5kcy54LC1ib3VuZHMueSk7XG5cbiAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3MgdG8gMSBmb3IgdGhlIHJlbmRlci4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIG5vdyByZW5kZXIgdGhlIGdyYXBoaWMuLlxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dCk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xufTtcbiovXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVDYWNoZWRTcHJpdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2FjaGVkU3ByaXRlID0gdGhpcy5fY2FjaGVkU3ByaXRlO1xuICAgIHZhciB0ZXh0dXJlID0gY2FjaGVkU3ByaXRlLnRleHR1cmU7XG4gICAgdmFyIGNhbnZhcyA9IGNhY2hlZFNwcml0ZS5idWZmZXIuY2FudmFzO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG4gICAgdGV4dHVyZS5jcm9wLndpZHRoID0gdGV4dHVyZS5mcmFtZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmNyb3AuaGVpZ2h0ID0gdGV4dHVyZS5mcmFtZS5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgY2FjaGVkU3ByaXRlLl93aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICBjYWNoZWRTcHJpdGUuX2hlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIGRpcnR5IGJhc2UgdGV4dHVyZXNcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmRpcnR5KCk7XG59OyovXG5cbi8qKlxuICogRGVzdHJveXMgYSBwcmV2aW91cyBjYWNoZWQgc3ByaXRlLlxuICpcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95Q2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUudGV4dHVyZS5kZXN0cm95KHRydWUpO1xuXG4gICAgLy8gbGV0IHRoZSBnYyBjb2xsZWN0IHRoZSB1bnVzZWQgc3ByaXRlXG4gICAgLy8gVE9ETyBjb3VsZCBiZSBvYmplY3QgcG9vbGVkIVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59OyovXG5cbi8qKlxuICogRHJhd3MgdGhlIGdpdmVuIHNoYXBlIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LiBDYW4gYmUgYW55IG9mIENpcmNsZSwgUmVjdGFuZ2xlLCBFbGxpcHNlLCBMaW5lIG9yIFBvbHlnb24uXG4gKlxuICogQHBhcmFtIHNoYXBlIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc0RhdGF9IFRoZSBnZW5lcmF0ZWQgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdTaGFwZSA9IGZ1bmN0aW9uIChzaGFwZSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIC8vIGNoZWNrIGN1cnJlbnQgcGF0aCFcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YS5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgdmFyIGRhdGEgPSBuZXcgR3JhcGhpY3NEYXRhKHRoaXMubGluZVdpZHRoLCB0aGlzLmxpbmVDb2xvciwgdGhpcy5saW5lQWxwaGEsIHRoaXMuZmlsbENvbG9yLCB0aGlzLmZpbGxBbHBoYSwgdGhpcy5maWxsaW5nLCBzaGFwZSk7XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YS5wdXNoKGRhdGEpO1xuXG4gICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAge1xuICAgICAgICBkYXRhLnNoYXBlLmNsb3NlZCA9IGRhdGEuc2hhcGUuY2xvc2VkIHx8IHRoaXMuZmlsbGluZztcbiAgICAgICAgdGhpcy5jdXJyZW50UGF0aCA9IGRhdGE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGRhdGE7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgLy8gZGVzdHJveSBlYWNoIG9mIHRoZSBHcmFwaGljc0RhdGEgb2JqZWN0c1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8vIGZvciBlYWNoIHdlYmdsIGRhdGEgZW50cnksIGRlc3Ryb3kgdGhlIFdlYkdMR3JhcGhpY3NEYXRhXG4gICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fd2ViZ2wpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl93ZWJnbFtpZF0uZGF0YS5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgdGhpcy5fd2ViZ2xbaWRdLmRhdGFbal0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG4gICAgdGhpcy5fd2ViZ2wgPSBudWxsO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEEgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gbGluZVdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gZmlsbENvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGxBbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBmaWxsICAgICAge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICogQHBhcmFtIHNoYXBlICAgICB7Q2lyY2xlfFJlY3RhbmdsZXxFbGxpcHNlfExpbmV8UG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICovXG5mdW5jdGlvbiBHcmFwaGljc0RhdGEobGluZVdpZHRoLCBsaW5lQ29sb3IsIGxpbmVBbHBoYSwgZmlsbENvbG9yLCBmaWxsQWxwaGEsIGZpbGwsIHNoYXBlKVxue1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQ29sb3IgPSBsaW5lQ29sb3I7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQWxwaGEgPSBsaW5lQWxwaGE7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLl9saW5lVGludCA9IGxpbmVDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxDb2xvciA9IGZpbGxDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IGZpbGxBbHBoYTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBjYWNoZWQgdGludCBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuX2ZpbGxUaW50ID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhcGUgaXMgZmlsbGVkIHdpdGggYSBjb2xvdXJcbiAgICAgKi9cbiAgICB0aGlzLmZpbGwgPSBmaWxsO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICAgICAqL1xuICAgIHRoaXMuc2hhcGUgPSBzaGFwZTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBUaGUgdHlwZSBvZiB0aGUgc2hhcGUsIHNlZSB0aGUgQ29uc3QuU2hhcGVzIGZpbGUgZm9yIGFsbCB0aGUgZXhpc3RpbmcgdHlwZXMsXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gc2hhcGUudHlwZTtcbn1cblxuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3NEYXRhIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBHcmFwaGljc0RhdGEoXG4gICAgICAgIHRoaXMubGluZVdpZHRoLFxuICAgICAgICB0aGlzLmxpbmVDb2xvcixcbiAgICAgICAgdGhpcy5saW5lQWxwaGEsXG4gICAgICAgIHRoaXMuZmlsbENvbG9yLFxuICAgICAgICB0aGlzLmZpbGxBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsLFxuICAgICAgICB0aGlzLnNoYXBlXG4gICAgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIGRhdGEuXG4gKi9cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnNoYXBlID0gbnVsbDtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL1dlYkdMR3JhcGhpY3NEYXRhJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuXG4gICAgLy8gc29tZSBkcmF3aW5nIGZ1bmN0aW9ucy4uXG4gICAgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi91dGlscy9idWlsZExpbmUnKTtcbiAgICBidWlsZFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUG9seScpO1xuICAgIGJ1aWxkQ29tcGxleFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ29tcGxleFBvbHknKTtcbiAgICBidWlsZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSZWN0YW5nbGUnKTtcbiAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkQ2lyY2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZENpcmNsZScpO1xuXG4gICAgZWFyY3V0ID0gcmVxdWlyZSgnZWFyY3V0Jyk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IFtdO1xuXG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgYSBwb2x5IGNhbiBjb250YWluIGJlZm9yZSBpdCBpcyByZW5kZXJlZCBhcyBhIGNvbXBsZXggcG9seWdvbiAodXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyKVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgPSAyMDA7XG59XG5cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc1JlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdncmFwaGljcycsIEdyYXBoaWNzUmVuZGVyZXIpO1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMuZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzLmdsKVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHJlbmRlcmVyLlxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YVBvb2wubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBudWxsO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuICAvLyAgY29uc29sZS5sb2coZ3JhcGhpY3MpXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5IHx8ICFncmFwaGljcy5fd2ViR0xbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljcyhncmFwaGljcyk7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIFRoaXMgIGNvdWxkIGJlIHNwZWVkZWQgdXAgZm9yIHN1cmUhXG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggZ3JhcGhpY3MuYmxlbmRNb2RlICk7XG5cbi8vICAgIHZhciBtYXRyaXggPSAgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0uY2xvbmUoKTtcbi8vICAgIHZhciBtYXRyaXggPSAgcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7XG4vLyAgICBtYXRyaXguYXBwZW5kKGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gd2ViR0wuZGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTC5kYXRhW2ldLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyBmaXggdGhpcyBvbmUhXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEgKiB3ZWJHTERhdGEuYWxwaGEpO1xuXG4gICAgICAgICAgICAvLyByZW5kZXIgcXVhZC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgcmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeCA9IGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLmxvY2F0aW9uKTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHVwZGF0ZVxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgLy8gZ2V0IHRoZSBjb250ZXh0cyBncmFwaGljcyBvYmplY3RcbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd2ViR0wgY29udGV4dCB0aW1lIHRvIGNyZWF0ZSBpdCFcbiAgICBpZiAoIXdlYkdMKVxuICAgIHtcbiAgICAgICAgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdID0ge2xhc3RJbmRleDowLCBkYXRhOltdLCBnbDpnbH07XG4gICAgfVxuXG4gICBcbiAgICAvLyBmbGFnIHRoZSBncmFwaGljcyBhcyBub3QgZGlydHkgYXMgd2UgYXJlIGFib3V0IHRvIHVwZGF0ZSBpdC4uLlxuICAgIGdyYXBoaWNzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB2YXIgaTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGNsZWFyZWQgdGhlIGdyYXBoaWNzIG9iamVjdCB3ZSB3aWxsIG5lZWQgdG8gY2xlYXIgZXZlcnkgb2JqZWN0XG4gICAgaWYgKGdyYXBoaWNzLmNsZWFyRGlydHkpXG4gICAge1xuICAgICAgICBncmFwaGljcy5jbGVhckRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuZCByZXR1cm4gYWxsIHRoZSB3ZWJHTERhdGFzIHRvIHRoZSBvYmplY3QgcG9vbCBzbyB0aGFuIGNhbiBiZSByZXVzZWQgbGF0ZXIgb25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBncmFwaGljc0RhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucHVzaCggZ3JhcGhpY3NEYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgYXJyYXkgYW5kIHJlc2V0IHRoZSBpbmRleC4uXG4gICAgICAgIHdlYkdMLmRhdGEgPSBbXTtcbiAgICAgICAgd2ViR0wubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBncmFwaGljcyBkYXRhcyBhbmQgY29uc3RydWN0IGVhY2ggb25lLi5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGEgY29tcGxleCBmaWxsIHRoZW4gdGhlIG5ldyBzdGVuY2lsIGJ1ZmZlciB0ZWNobmlxdWUgd2lsbCBiZSB1c2VkXG4gICAgLy8gb3RoZXIgd2lzZSBncmFwaGljcyBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIGludG8gYSBiYXRjaC4uXG4gICAgZm9yIChpID0gd2ViR0wubGFzdEluZGV4OyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBwb2ludHMgdGhlIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgICAgICAgICAgZGF0YS5wb2ludHMgPSBkYXRhLnNoYXBlLnBvaW50cy5zbGljZSgpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBwb2x5IGlmIHRoZSB2YWx1ZSBpcyB0cnVlIVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50c1swXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTJdIHx8IGRhdGEucG9pbnRzWzFdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKGRhdGEucG9pbnRzWzBdLCBkYXRhLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNQUtFIFNVUkUgV0UgSEFWRSBUSEUgQ09SUkVDVCBUWVBFLi5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA+PSA2KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA8IHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplICogMilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkRyYXdVc2luZ1NpbXBsZSA9IGJ1aWxkUG9seShkYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkRyYXdVc2luZ1NpbXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoID4gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuICAgICAgICAgICAgICAgIGJ1aWxkTGluZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMgfHwgZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZENpcmNsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCsrO1xuICAgIH1cblxuICAgIC8vIHVwbG9hZCBhbGwgdGhlIGRpcnR5IGRhdGEuLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5kaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhLnVwbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gd2ViR0wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSBUT0RPIEBBbHZpblxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5zd2l0Y2hNb2RlID0gZnVuY3Rpb24gKHdlYkdMLCB0eXBlKVxue1xuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICBpZiAoIXdlYkdMLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbd2ViR0wuZGF0YS5sZW5ndGgtMV07XG5cbiAgICAgICAgaWYgKCh3ZWJHTERhdGEucG9pbnRzLmxlbmd0aCA+IDMyMDAwMCkgfHwgd2ViR0xEYXRhLm1vZGUgIT09IHR5cGUgfHwgdHlwZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdlYkdMRGF0YS5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gd2ViR0xEYXRhO1xufTtcblxuIiwiLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyBXZWJHTCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gV2ViR0xHcmFwaGljc0RhdGEoZ2wpIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vVE9ETyBkb2VzIHRoaXMgbmVlZCB0byBiZSBzcGxpdCBiZWZvcmUgdXBsb2Rpbmc/P1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvbG9yIGNvbXBvbmVudHMgKHIsZyxiKVxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3IgPSBbMCwwLDBdOyAvLyBjb2xvciBzcGxpdCFcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBvaW50cyB0byBkcmF3XG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIHRvZG8gQGFsdmluXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubW9kZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGdyYXBoaWNzIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHZlcnRpY2VzIGFuZCB0aGUgaW5kaWNlc1xuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb2ludHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmluZGljZXMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4vLyAgICB0aGlzLmxhc3RJbmRleCA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5nbFBvaW50cyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5wb2ludHMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuYnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5nbFBvaW50cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5nbEluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuZ2xJbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLnBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBcbiAgICB0aGlzLmdsID0gbnVsbDtcblxuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoZ2wpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgZ2wsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgY2lyY2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byBkcmF3XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ2lyY2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIHZhciBjaXJjbGVEYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gY2lyY2xlRGF0YS54O1xuICAgIHZhciB5ID0gY2lyY2xlRGF0YS55O1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuXG4gICAgLy8gVE9ETyAtIGJpdCBoYWNreT8/XG4gICAgaWYgKGdyYXBoaWNzRGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB0b3RhbFNlZ3MgPSBNYXRoLmZsb29yKDMwICogTWF0aC5zcXJ0KGNpcmNsZURhdGEucmFkaXVzKSkgfHwgTWF0aC5mbG9vcigxNSAqIE1hdGguc3FydChjaXJjbGVEYXRhLndpZHRoICsgY2lyY2xlRGF0YS5oZWlnaHQpKTtcbiAgICB2YXIgc2VnID0gKE1hdGguUEkgKiAyKSAvIHRvdGFsU2VncyA7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcyk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDEgOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCx5LCByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKyssIHZlY1BvcysrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MtMSk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDaXJjbGU7IiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuICAgIFxuXG5cbi8qKlxuICogQnVpbGRzIGEgY29tcGxleCBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDb21wbGV4UG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvL1RPRE8gLSBubyBuZWVkIHRvIGNvcHkgdGhpcyBhcyBpdCBnZXRzIHR1cm5lZCBpbnRvIGEgRkxvYXQzMkFycmF5IGFueXdheXMuLlxuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzLnNsaWNlKCk7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDYpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgd2ViR0xEYXRhLnBvaW50cyA9IHBvaW50cztcbiAgICB3ZWJHTERhdGEuYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHdlYkdMRGF0YS5jb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG5cbiAgICAvLyBjYWxjbGF0ZSB0aGUgYm91bmRzLi5cbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIHZhciB4LHk7XG5cbiAgICAvLyBnZXQgc2l6ZS4uXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKz0yKVxuICAgIHtcbiAgICAgICAgeCA9IHBvaW50c1tpXTtcbiAgICAgICAgeSA9IHBvaW50c1tpKzFdO1xuXG4gICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICBtYXhYID0geCA+IG1heFggPyB4IDogbWF4WDtcblxuICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcbiAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgcXVhZCB0byB0aGUgZW5kIGNvcyB0aGVyZSBpcyBubyBwb2ludCBtYWtpbmcgYW5vdGhlciBidWZmZXIhXG4gICAgcG9pbnRzLnB1c2gobWluWCwgbWluWSxcbiAgICAgICAgICAgICAgICBtYXhYLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1heFksXG4gICAgICAgICAgICAgICAgbWluWCwgbWF4WSk7XG5cbiAgICAvLyBwdXNoIGEgcXVhZCBvbnRvIHRoZSBlbmQuLlxuXG4gICAgLy9UT0RPIC0gdGhpcyBhaW50IG5lZWRlZCFcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKCBpICk7XG4gICAgfVxuXG59O1xuXG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENvbXBsZXhQb2x5OyIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBsaW5lIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRMaW5lID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIFRPRE8gT1BUSU1JU0UhXG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGlmIHRoZSBsaW5lIHdpZHRoIGlzIGFuIG9kZCBudW1iZXIgYWRkIDAuNSB0byBhbGlnbiB0byBhIHdob2xlIHBpeGVsXG4gICAgLy8gY29tbWVudGluZyB0aGlzIG91dCBmaXhlcyAjNzExIGFuZCAjMTYyMFxuICAgIC8vIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoJTIpXG4gICAgLy8ge1xuICAgIC8vICAgICBmb3IgKGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKVxuICAgIC8vICAgICB7XG4gICAgLy8gICAgICAgICBwb2ludHNbaV0gKz0gMC41O1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBmaXJzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgIHZhciBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgIC8vIGlmIHRoZSBmaXJzdCBwb2ludCBpcyB0aGUgbGFzdCBwb2ludCAtIGdvbm5hIGhhdmUgaXNzdWVzIDopXG4gICAgaWYgKGZpcnN0UG9pbnQueCA9PT0gbGFzdFBvaW50LnggJiYgZmlyc3RQb2ludC55ID09PSBsYXN0UG9pbnQueSlcbiAgICB7XG4gICAgICAgIC8vIG5lZWQgdG8gY2xvbmUgYXMgd2UgYXJlIGdvaW5nIHRvIHNsaWdodGx5IG1vZGlmeSB0aGUgc2hhcGUuLlxuICAgICAgICBwb2ludHMgPSBwb2ludHMuc2xpY2UoKTtcblxuICAgICAgICBwb2ludHMucG9wKCk7XG4gICAgICAgIHBvaW50cy5wb3AoKTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgICAgICB2YXIgbWlkUG9pbnRYID0gbGFzdFBvaW50LnggKyAoZmlyc3RQb2ludC54IC0gbGFzdFBvaW50LngpICowLjU7XG4gICAgICAgIHZhciBtaWRQb2ludFkgPSBsYXN0UG9pbnQueSArIChmaXJzdFBvaW50LnkgLSBsYXN0UG9pbnQueSkgKjAuNTtcblxuICAgICAgICBwb2ludHMudW5zaGlmdChtaWRQb2ludFgsIG1pZFBvaW50WSk7XG4gICAgICAgIHBvaW50cy5wdXNoKG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICB9XG5cbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgIHZhciBpbmRleENvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICB2YXIgaW5kZXhTdGFydCA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgLy8gRFJBVyB0aGUgTGluZVxuICAgIHZhciB3aWR0aCA9IGdyYXBoaWNzRGF0YS5saW5lV2lkdGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmxpbmVDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmxpbmVBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciBweCwgcHksIHAxeCwgcDF5LCBwMngsIHAyeSwgcDN4LCBwM3k7XG4gICAgdmFyIHBlcnB4LCBwZXJweSwgcGVycDJ4LCBwZXJwMnksIHBlcnAzeCwgcGVycDN5O1xuICAgIHZhciBhMSwgYjEsIGMxLCBhMiwgYjIsIGMyO1xuICAgIHZhciBkZW5vbSwgcGRpc3QsIGRpc3Q7XG5cbiAgICBwMXggPSBwb2ludHNbMF07XG4gICAgcDF5ID0gcG9pbnRzWzFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWzJdO1xuICAgIHAyeSA9IHBvaW50c1szXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gIHAxeCAtIHAyeDtcblxuICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG5cbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAvLyBzdGFydFxuICAgIHZlcnRzLnB1c2gocDF4IC0gcGVycHggLCBwMXkgLSBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAxeCArIHBlcnB4ICwgcDF5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgZm9yIChpID0gMTsgaSA8IGxlbmd0aC0xOyBpKyspXG4gICAge1xuICAgICAgICBwMXggPSBwb2ludHNbKGktMSkqMl07XG4gICAgICAgIHAxeSA9IHBvaW50c1soaS0xKSoyICsgMV07XG5cbiAgICAgICAgcDJ4ID0gcG9pbnRzWyhpKSoyXTtcbiAgICAgICAgcDJ5ID0gcG9pbnRzWyhpKSoyICsgMV07XG5cbiAgICAgICAgcDN4ID0gcG9pbnRzWyhpKzEpKjJdO1xuICAgICAgICBwM3kgPSBwb2ludHNbKGkrMSkqMiArIDFdO1xuXG4gICAgICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgICAgICBwZXJweSA9IHAxeCAtIHAyeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgICAgICBwZXJweCAvPSBkaXN0O1xuICAgICAgICBwZXJweSAvPSBkaXN0O1xuICAgICAgICBwZXJweCAqPSB3aWR0aDtcbiAgICAgICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAgICAgcGVycDJ4ID0gLShwMnkgLSBwM3kpO1xuICAgICAgICBwZXJwMnkgPSBwMnggLSBwM3g7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwMngqcGVycDJ4ICsgcGVycDJ5KnBlcnAyeSk7XG4gICAgICAgIHBlcnAyeCAvPSBkaXN0O1xuICAgICAgICBwZXJwMnkgLz0gZGlzdDtcbiAgICAgICAgcGVycDJ4ICo9IHdpZHRoO1xuICAgICAgICBwZXJwMnkgKj0gd2lkdGg7XG5cbiAgICAgICAgYTEgPSAoLXBlcnB5ICsgcDF5KSAtICgtcGVycHkgKyBwMnkpO1xuICAgICAgICBiMSA9ICgtcGVycHggKyBwMngpIC0gKC1wZXJweCArIHAxeCk7XG4gICAgICAgIGMxID0gKC1wZXJweCArIHAxeCkgKiAoLXBlcnB5ICsgcDJ5KSAtICgtcGVycHggKyBwMngpICogKC1wZXJweSArIHAxeSk7XG4gICAgICAgIGEyID0gKC1wZXJwMnkgKyBwM3kpIC0gKC1wZXJwMnkgKyBwMnkpO1xuICAgICAgICBiMiA9ICgtcGVycDJ4ICsgcDJ4KSAtICgtcGVycDJ4ICsgcDN4KTtcbiAgICAgICAgYzIgPSAoLXBlcnAyeCArIHAzeCkgKiAoLXBlcnAyeSArIHAyeSkgLSAoLXBlcnAyeCArIHAyeCkgKiAoLXBlcnAyeSArIHAzeSk7XG5cbiAgICAgICAgZGVub20gPSBhMSpiMiAtIGEyKmIxO1xuXG4gICAgICAgIGlmIChNYXRoLmFicyhkZW5vbSkgPCAwLjEgKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIGRlbm9tKz0xMC4xO1xuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJweCAsIHAyeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBweCA9IChiMSpjMiAtIGIyKmMxKS9kZW5vbTtcbiAgICAgICAgcHkgPSAoYTIqYzEgLSBhMSpjMikvZGVub207XG5cblxuICAgICAgICBwZGlzdCA9IChweCAtcDJ4KSAqIChweCAtcDJ4KSArIChweSAtcDJ5KSAqIChweSAtcDJ5KTtcblxuXG4gICAgICAgIGlmIChwZGlzdCA+IDE0MCAqIDE0MClcbiAgICAgICAge1xuICAgICAgICAgICAgcGVycDN4ID0gcGVycHggLSBwZXJwMng7XG4gICAgICAgICAgICBwZXJwM3kgPSBwZXJweSAtIHBlcnAyeTtcblxuICAgICAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwM3gqcGVycDN4ICsgcGVycDN5KnBlcnAzeSk7XG4gICAgICAgICAgICBwZXJwM3ggLz0gZGlzdDtcbiAgICAgICAgICAgIHBlcnAzeSAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN4ICo9IHdpZHRoO1xuICAgICAgICAgICAgcGVycDN5ICo9IHdpZHRoO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycDN4LCBwMnkgK3BlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJwM3gsIHAyeSAtcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRleENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocHggLCBweSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSAocHgtcDJ4KSwgcDJ5IC0gKHB5IC0gcDJ5KSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHAxeCA9IHBvaW50c1sobGVuZ3RoLTIpKjJdO1xuICAgIHAxeSA9IHBvaW50c1sobGVuZ3RoLTIpKjIgKyAxXTtcblxuICAgIHAyeCA9IHBvaW50c1sobGVuZ3RoLTEpKjJdO1xuICAgIHAyeSA9IHBvaW50c1sobGVuZ3RoLTEpKjIgKyAxXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5KTtcbiAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBpbmRleENvdW50OyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydCsrKTtcbiAgICB9XG5cbiAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydC0xKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRMaW5lOyIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcG9seWdvbiB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuV2ViR0xHcmFwaGljc0RhdGF9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocG9pbnRzLCBudWxsLCAyKTtcblxuICAgIGlmICghdHJpYW5nbGVzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgdmVydFBvcyA9IHZlcnRzLmxlbmd0aCAvIDY7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICt2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVydFBvcyk7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmVydHMucHVzaChwb2ludHNbaSAqIDJdLCBwb2ludHNbaSAqIDIgKyAxXSxcbiAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRQb2x5O1xuIiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHJlY3RhbmdsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIC0tLSAvL1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIC8vXG4gICAgdmFyIHJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcmVjdERhdGEueDtcbiAgICB2YXIgeSA9IHJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJlY3REYXRhLmhlaWdodDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgLy8gc3RhcnRcbiAgICAgICAgdmVydHMucHVzaCh4LCB5KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAvLyBpbnNlcnQgMiBkZWFkIHRyaWFuZ2xlcy4uXG4gICAgICAgIGluZGljZXMucHVzaCh2ZXJ0UG9zLCB2ZXJ0UG9zLCB2ZXJ0UG9zKzEsIHZlcnRQb3MrMiwgdmVydFBvcyszLCB2ZXJ0UG9zKzMpO1xuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSBbeCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHkgKyBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICB4LCB5XTtcblxuXG4gICAgICAgIGJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJlY3RhbmdsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG4vKipcbiAqIEJ1aWxkcyBhIHJvdW5kZWQgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG5idWlsZFJvdW5kZWRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIHJyZWN0RGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IHJyZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcnJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcnJlY3REYXRhLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSBycmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgdmFyIHJhZGl1cyA9IHJyZWN0RGF0YS5yYWRpdXM7XG5cbiAgICB2YXIgcmVjUG9pbnRzID0gW107XG4gICAgcmVjUG9pbnRzLnB1c2goeCwgeSArIHJhZGl1cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4LCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCB4LCB5ICsgaGVpZ2h0LCB4ICsgcmFkaXVzLCB5ICsgaGVpZ2h0LCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoIC0gcmFkaXVzLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCAtIHJhZGl1cywgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyB3aWR0aCwgeSArIHJhZGl1cywgeCArIHdpZHRoLCB5LCB4ICsgd2lkdGggLSByYWRpdXMsIHksIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgcmFkaXVzLCB5LCB4LCB5LCB4LCB5ICsgcmFkaXVzICsgMC4wMDAwMDAwMDAxLCByZWNQb2ludHMpO1xuXG4gICAgLy8gdGhpcyB0aW55IG51bWJlciBkZWFscyB3aXRoIHRoZSBpc3N1ZSB0aGF0IG9jY3VycyB3aGVuIHBvaW50cyBvdmVybGFwIGFuZCBlYXJjdXQgZmFpbHMgdG8gdHJpYW5ndWxhdGUgdGhlIGl0ZW0uXG4gICAgLy8gVE9ETyAtIGZpeCB0aGlzIHByb3Blcmx5LCB0aGlzIGlzIG5vdCB2ZXJ5IGVsZWdhbnQuLiBidXQgaXQgd29ya3MgZm9yIG5vdy5cblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICB2YXIgdHJpYW5nbGVzID0gZWFyY3V0KHJlY1BvaW50cywgbnVsbCwgMik7XG5cbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICAgICAge1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVjUG9zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZWNQb2ludHMubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gocmVjUG9pbnRzW2ldLCByZWNQb2ludHNbKytpXSwgciwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHJlY1BvaW50cztcblxuICAgICAgICB0aGlzLmJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlLiAoaGVscGVyIGZ1bmN0aW9uLi4pXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBmcm9tWCB7bnVtYmVyfSBPcmlnaW4gcG9pbnQgeFxuICogQHBhcmFtIGZyb21ZIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcGFyYW0gW291dF0ge251bWJlcltdfSBUaGUgb3V0cHV0IGFycmF5IHRvIGFkZCBwb2ludHMgaW50by4gSWYgbm90IHBhc3NlZCwgYSBuZXcgYXJyYXkgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm4ge251bWJlcltdfSBhbiBhcnJheSBvZiBwb2ludHNcbiAqL1xucXVhZHJhdGljQmV6aWVyQ3VydmUgPSBmdW5jdGlvbiAoZnJvbVgsIGZyb21ZLCBjcFgsIGNwWSwgdG9YLCB0b1ksIG91dClcbntcbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICB4YixcbiAgICAgICAgeWIsXG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gb3V0IHx8IFtdO1xuXG4gICAgZnVuY3Rpb24gZ2V0UHQobjEgLCBuMiwgcGVyYykge1xuICAgICAgICB2YXIgZGlmZiA9IG4yIC0gbjE7XG5cbiAgICAgICAgcmV0dXJuIG4xICsgKCBkaWZmICogcGVyYyApO1xuICAgIH1cblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBuOyBpKysgKSB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICAvLyBUaGUgR3JlZW4gTGluZVxuICAgICAgICB4YSA9IGdldFB0KCBmcm9tWCAsIGNwWCAsIGogKTtcbiAgICAgICAgeWEgPSBnZXRQdCggZnJvbVkgLCBjcFkgLCBqICk7XG4gICAgICAgIHhiID0gZ2V0UHQoIGNwWCAsIHRvWCAsIGogKTtcbiAgICAgICAgeWIgPSBnZXRQdCggY3BZICwgdG9ZICwgaiApO1xuXG4gICAgICAgIC8vIFRoZSBCbGFjayBEb3RcbiAgICAgICAgeCA9IGdldFB0KCB4YSAsIHhiICwgaiApO1xuICAgICAgICB5ID0gZ2V0UHQoIHlhICwgeWIgLCBqICk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goeCwgeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50cztcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJvdW5kZWRSZWN0YW5nbGU7IiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgY29yZSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWElcbiAqL1xuLy8gZXhwb3J0IGNvcmUgYW5kIGNvbnN0LiBXZSBhc3NpZ24gY29yZSB0byBjb25zdCBzbyB0aGF0IHRoZSBub24tcmVmZXJlbmNlIHR5cGVzIGluIGNvbnN0IHJlbWFpbiBpbi10YWN0XG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihyZXF1aXJlKCcuL2NvbnN0JyksIHJlcXVpcmUoJy4vbWF0aCcpLCB7XG4gICAgLy8gdXRpbHNcbiAgICB1dGlsczogcmVxdWlyZSgnLi91dGlscycpLFxuICAgIHRpY2tlcjogcmVxdWlyZSgnLi90aWNrZXInKSxcblxuICAgIC8vIGRpc3BsYXlcbiAgICBEaXNwbGF5T2JqZWN0OiAgICAgICAgICByZXF1aXJlKCcuL2Rpc3BsYXkvRGlzcGxheU9iamVjdCcpLFxuICAgIENvbnRhaW5lcjogICAgICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9Db250YWluZXInKSxcblxuICAgIC8vIHNwcml0ZXNcbiAgICBTcHJpdGU6ICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgUGFydGljbGVDb250YWluZXI6ICAgICAgcmVxdWlyZSgnLi9wYXJ0aWNsZXMvUGFydGljbGVDb250YWluZXInKSxcbiAgICBTcHJpdGVSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXInKSxcbiAgICBQYXJ0aWNsZVJlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyJyksXG5cbiAgICAvLyB0ZXh0XG4gICAgVGV4dDogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0L1RleHQnKSxcblxuICAgIC8vIHByaW1pdGl2ZXNcbiAgICBHcmFwaGljczogICAgICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzJyksXG4gICAgR3JhcGhpY3NEYXRhOiAgICAgICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljc0RhdGEnKSxcbiAgICBHcmFwaGljc1JlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHR1cmVzXG4gICAgVGV4dHVyZTogICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQmFzZVRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlVGV4dHVyZScpLFxuICAgIFJlbmRlclRleHR1cmU6ICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEJhc2VSZW5kZXJUZXh0dXJlOiAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlOiAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzOiAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmVVdnMnKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIGNhbnZhc1xuICAgIENhbnZhc1JlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIENhbnZhc0J1ZmZlcjogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIHdlYmdsXG4gICAgV2ViR0xSZW5kZXJlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyksXG4gICAgU2hhZGVyTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIFNoYWRlcjogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyJyksXG4gICAgT2JqZWN0UmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBSZW5kZXJUYXJnZXQ6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcblxuICAgIC8vIGZpbHRlcnMgLSB3ZWJnbFxuICAgIEFic3RyYWN0RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBGWEFBRmlsdGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBTcHJpdGVNYXNrRmlsdGVyOiAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKSxcblxuICAgIGdsQ29yZTogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncGl4aS1nbC1jb3JlJyksXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoaWNoIHJlbmRlcmVyIHlvdSBzaG91bGQgYmUgdXNpbmcuXG4gICAgICogV2ViR0wgaXMgdGhlIHByZWZlcnJlZCByZW5kZXJlciBhcyBpdCBpcyBhIGxvdCBmYXN0ZXIuIElmIHdlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnlcbiAgICAgKiB0aGUgYnJvd3NlciB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBjYW52YXMgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHBhcmFtIHdpZHRoPTgwMCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIGhlaWdodD02MDAge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWYgeW91XG4gICAgICogICAgICBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0XG4gICAgICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyLCByZXRpbmEgd291bGQgYmUgMlxuICAgICAqIEBwYXJhbSBbbm9XZWJHTD1mYWxzZV0ge2Jvb2xlYW59IHByZXZlbnRzIHNlbGVjdGlvbiBvZiBXZWJHTCByZW5kZXJlciwgZXZlbiBpZiBzdWNoIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyZXJ8Q2FudmFzUmVuZGVyZXJ9IFJldHVybnMgV2ViR0wgcmVuZGVyZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgQ2FudmFzUmVuZGVyZXJcbiAgICAgKi9cbiAgICBhdXRvRGV0ZWN0UmVuZGVyZXI6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCBub1dlYkdMKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB3aWR0aCB8fCA4MDA7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAgICAgaWYgKCFub1dlYkdMICYmIGNvcmUudXRpbHMuaXNXZWJHTFN1cHBvcnRlZCgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGNvcmUuV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgY29yZS5DYW52YXNSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB9XG59KTtcbiIsIi8vIEB0b2RvIC0gaWdub3JlIHRoZSB0b28gbWFueSBwYXJhbWV0ZXJzIHdhcm5pbmcgZm9yIG5vd1xuLy8gc2hvdWxkIGVpdGhlciBmaXggaXQgb3IgY2hhbmdlIHRoZSBqc2hpbnQgY29uZmlnXG4vLyBqc2hpbnQgLVcwNzJcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xuXG4vKipcbiAqIFRoZSBwaXhpIE1hdHJpeCBjbGFzcyBhcyBhbiBvYmplY3QsIHdoaWNoIG1ha2VzIGl0IGEgbG90IGZhc3RlcixcbiAqIGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBpdCA6XG4gKiB8IGEgfCBiIHwgdHh8XG4gKiB8IGMgfCBkIHwgdHl8XG4gKiB8IDAgfCAwIHwgMSB8XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBNYXRyaXgoKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5iID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5jID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHkgPSAwO1xufVxuXG5NYXRyaXgucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWF0cml4O1xubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1hdHJpeCBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5LiBUaGUgRWxlbWVudCB0byBNYXRyaXggbWFwcGluZyBvcmRlciBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIGEgPSBhcnJheVswXVxuICogYiA9IGFycmF5WzFdXG4gKiBjID0gYXJyYXlbM11cbiAqIGQgPSBhcnJheVs0XVxuICogdHggPSBhcnJheVsyXVxuICogdHkgPSBhcnJheVs1XVxuICpcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119IFRoZSBhcnJheSB0aGF0IHRoZSBtYXRyaXggd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbS5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpXG57XG4gICAgdGhpcy5hID0gYXJyYXlbMF07XG4gICAgdGhpcy5iID0gYXJyYXlbMV07XG4gICAgdGhpcy5jID0gYXJyYXlbM107XG4gICAgdGhpcy5kID0gYXJyYXlbNF07XG4gICAgdGhpcy50eCA9IGFycmF5WzJdO1xuICAgIHRoaXMudHkgPSBhcnJheVs1XTtcbn07XG5cblxuLyoqXG4gKiBzZXRzIHRoZSBtYXRyaXggcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkXG4gKiBAcGFyYW0ge251bWJlcn0gdHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXG57XG4gICAgdGhpcy5hID0gYTtcbiAgICB0aGlzLmIgPSBiO1xuICAgIHRoaXMuYyA9IGM7XG4gICAgdGhpcy5kID0gZDtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy50eSA9IHR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmcm9tIHRoZSBjdXJyZW50IE1hdHJpeCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9zZSB7Ym9vbGVhbn0gV2hldGhlciB3ZSBuZWVkIHRvIHRyYW5zcG9zZSB0aGUgbWF0cml4IG9yIG5vdFxuICogQHBhcmFtIFtvdXRdIHtBcnJheX0gSWYgcHJvdmlkZWQgdGhlIGFycmF5IHdpbGwgYmUgYXNzaWduZWQgdG8gb3V0XG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gdGhlIG5ld2x5IGNyZWF0ZWQgYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAodHJhbnNwb3NlLCBvdXQpXG57XG4gICAgaWYgKCF0aGlzLmFycmF5KVxuICAgIHtcbiAgICAgICAgdGhpcy5hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gb3V0IHx8IHRoaXMuYXJyYXk7XG5cbiAgICBpZiAodHJhbnNwb3NlKVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVsyXSA9IDA7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSAwO1xuICAgICAgICBhcnJheVs2XSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzddID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzJdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzZdID0gMDtcbiAgICAgICAgYXJyYXlbN10gPSAwO1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZSB0byB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gcmVuZGVyaW5nKVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5hICogeCArIHRoaXMuYyAqIHkgKyB0aGlzLnR4O1xuICAgIG5ld1Bvcy55ID0gdGhpcy5iICogeCArIHRoaXMuZCAqIHkgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGludmVyc2Ugb2YgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UgdG8gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIGlucHV0KVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHlJbnZlcnNlID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciBpZCA9IDEgLyAodGhpcy5hICogdGhpcy5kICsgdGhpcy5jICogLXRoaXMuYik7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuZCAqIGlkICogeCArIC10aGlzLmMgKiBpZCAqIHkgKyAodGhpcy50eSAqIHRoaXMuYyAtIHRoaXMudHggKiB0aGlzLmQpICogaWQ7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmEgKiBpZCAqIHkgKyAtdGhpcy5iICogaWQgKiB4ICsgKC10aGlzLnR5ICogdGhpcy5hICsgdGhpcy50eCAqIHRoaXMuYikgKiBpZDtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdHJpeCBvbiB0aGUgeCBhbmQgeS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMudHggKz0geDtcbiAgICB0aGlzLnR5ICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIHNjYWxlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIGFtb3VudCB0byBzY2FsZSBob3Jpem9udGFsbHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSBhbW91bnQgdG8gc2NhbGUgdmVydGljYWxseVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2NhbGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmEgKj0geDtcbiAgICB0aGlzLmQgKj0geTtcbiAgICB0aGlzLmMgKj0geDtcbiAgICB0aGlzLmIgKj0geTtcbiAgICB0aGlzLnR4ICo9IHg7XG4gICAgdGhpcy50eSAqPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyBhIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpXG57XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKCBhbmdsZSApO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbiggYW5nbGUgKTtcblxuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICB0aGlzLmEgPSBhMSAqIGNvcy10aGlzLmIgKiBzaW47XG4gICAgdGhpcy5iID0gYTEgKiBzaW4rdGhpcy5iICogY29zO1xuICAgIHRoaXMuYyA9IGMxICogY29zLXRoaXMuZCAqIHNpbjtcbiAgICB0aGlzLmQgPSBjMSAqIHNpbit0aGlzLmQgKiBjb3M7XG4gICAgdGhpcy50eCA9IHR4MSAqIGNvcyAtIHRoaXMudHkgKiBzaW47XG4gICAgdGhpcy50eSA9IHR4MSAqIHNpbiArIHRoaXMudHkgKiBjb3M7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG5cbiAgICB0aGlzLmEgID0gbWF0cml4LmEgKiBhMSArIG1hdHJpeC5iICogYzE7XG4gICAgdGhpcy5iICA9IG1hdHJpeC5hICogYjEgKyBtYXRyaXguYiAqIGQxO1xuICAgIHRoaXMuYyAgPSBtYXRyaXguYyAqIGExICsgbWF0cml4LmQgKiBjMTtcbiAgICB0aGlzLmQgID0gbWF0cml4LmMgKiBiMSArIG1hdHJpeC5kICogZDE7XG5cbiAgICB0aGlzLnR4ID0gbWF0cml4LnR4ICogYTEgKyBtYXRyaXgudHkgKiBjMSArIHRoaXMudHg7XG4gICAgdGhpcy50eSA9IG1hdHJpeC50eCAqIGIxICsgbWF0cml4LnR5ICogZDEgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1hdHJpeCBiYXNlZCBvbiBhbGwgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RYXG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RZXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXG4gKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WFxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdZXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKHgsIHksIHBpdm90WCwgcGl2b3RZLCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSlcbntcbiAgICB2YXIgYSwgYiwgYywgZCwgc3IsIGNyLCBjeSwgc3ksIG5zeCwgY3g7XG5cbiAgICBzciAgPSBNYXRoLnNpbihyb3RhdGlvbik7XG4gICAgY3IgID0gTWF0aC5jb3Mocm90YXRpb24pO1xuICAgIGN5ICA9IE1hdGguY29zKHNrZXdZKTtcbiAgICBzeSAgPSBNYXRoLnNpbihza2V3WSk7XG4gICAgbnN4ID0gLU1hdGguc2luKHNrZXdYKTtcbiAgICBjeCAgPSAgTWF0aC5jb3Moc2tld1gpO1xuXG4gICAgYSAgPSAgY3IgKiBzY2FsZVg7XG4gICAgYiAgPSAgc3IgKiBzY2FsZVg7XG4gICAgYyAgPSAtc3IgKiBzY2FsZVk7XG4gICAgZCAgPSAgY3IgKiBzY2FsZVk7XG5cbiAgICB0aGlzLmEgID0gY3kgKiBhICsgc3kgKiBjO1xuICAgIHRoaXMuYiAgPSBjeSAqIGIgKyBzeSAqIGQ7XG4gICAgdGhpcy5jICA9IG5zeCAqIGEgKyBjeCAqIGM7XG4gICAgdGhpcy5kICA9IG5zeCAqIGIgKyBjeCAqIGQ7XG5cbiAgICB0aGlzLnR4ID0geCArICggcGl2b3RYICogYSArIHBpdm90WSAqIGMgKTtcbiAgICB0aGlzLnR5ID0geSArICggcGl2b3RYICogYiArIHBpdm90WSAqIGQgKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQcmVwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uKG1hdHJpeClcbntcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIGlmIChtYXRyaXguYSAhPT0gMSB8fCBtYXRyaXguYiAhPT0gMCB8fCBtYXRyaXguYyAhPT0gMCB8fCBtYXRyaXguZCAhPT0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICAgICAgdmFyIGMxID0gdGhpcy5jO1xuICAgICAgICB0aGlzLmEgID0gYTEqbWF0cml4LmErdGhpcy5iKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmIgID0gYTEqbWF0cml4LmIrdGhpcy5iKm1hdHJpeC5kO1xuICAgICAgICB0aGlzLmMgID0gYzEqbWF0cml4LmErdGhpcy5kKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmQgID0gYzEqbWF0cml4LmIrdGhpcy5kKm1hdHJpeC5kO1xuICAgIH1cblxuICAgIHRoaXMudHggPSB0eDEqbWF0cml4LmErdGhpcy50eSptYXRyaXguYyttYXRyaXgudHg7XG4gICAgdGhpcy50eSA9IHR4MSptYXRyaXguYit0aGlzLnR5Km1hdHJpeC5kK21hdHJpeC50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0ID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcbiAgICB2YXIgbiA9IGExKmQxLWIxKmMxO1xuXG4gICAgdGhpcy5hID0gZDEvbjtcbiAgICB0aGlzLmIgPSAtYjEvbjtcbiAgICB0aGlzLmMgPSAtYzEvbjtcbiAgICB0aGlzLmQgPSBhMS9uO1xuICAgIHRoaXMudHggPSAoYzEqdGhpcy50eS1kMSp0eDEpL247XG4gICAgdGhpcy50eSA9IC0oYTEqdGhpcy50eS1iMSp0eDEpL247XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBSZXNldHMgdGhpcyBNYXRpeCB0byBhbiBpZGVudGl0eSAoZGVmYXVsdCkgbWF0cml4LlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmlkZW50aXR5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmEgPSAxO1xuICAgIHRoaXMuYiA9IDA7XG4gICAgdGhpcy5jID0gMDtcbiAgICB0aGlzLmQgPSAxO1xuICAgIHRoaXMudHggPSAwO1xuICAgIHRoaXMudHkgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgTWF0cml4IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gQSBjb3B5IG9mIHRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgdmFsdWVzIG9mIHRoZSBnaXZlbiBtYXRyaXggdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZXMgaW4gdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhlIG1hdHJpeCBnaXZlbiBpbiBwYXJhbWV0ZXIgd2l0aCBpdHMgdmFsdWVzIHVwZGF0ZWQuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQSBkZWZhdWx0IChpZGVudGl0eSkgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5JREVOVElUWSA9IG5ldyBNYXRyaXgoKTtcblxuLyoqXG4gKiBBIHRlbXAgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5URU1QX01BVFJJWCA9IG5ldyBNYXRyaXgoKTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcbn1cblxuUG9pbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvaW50XG4gKlxuICogQHJldHVybiB7UElYSS5Qb2ludH0gYSBjb3B5IG9mIHRoZSBwb2ludFxuICovXG5Qb2ludC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBDb3BpZXMgeCBhbmQgeSBmcm9tIHRoZSBnaXZlbiBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICovXG5Qb2ludC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgdGhpcy5zZXQocC54LCBwLnkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGVxdWFsIHRvIHRoaXMgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gKHAueCA9PT0gdGhpcy54KSAmJiAocC55ID09PSB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5Qb2ludC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy54ID0geCB8fCAwO1xuICAgIHRoaXMueSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLnggOiAwICkgO1xufTtcbiIsIi8qKlxuICogTWF0aCBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgbWl4ZWQgaW50byBQSVhJIG5hbWVzcGFjZS5cbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBUaGVzZSB3aWxsIGJlIG1peGVkIHRvIGJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLFxuICAgIC8vIHdoaWxlIHRoaXMgbW9kdWxlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBjb3JlXG4gICAgLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBjdXQgZG93biBvblxuICAgIC8vIGludGVybmFsIG1vZHVsZSByZXF1aXJlcy5cblxuICAgIFBvaW50OiAgICAgIHJlcXVpcmUoJy4vUG9pbnQnKSxcbiAgICBNYXRyaXg6ICAgICByZXF1aXJlKCcuL01hdHJpeCcpLFxuXG4gICAgQ2lyY2xlOiAgICAgcmVxdWlyZSgnLi9zaGFwZXMvQ2lyY2xlJyksXG4gICAgRWxsaXBzZTogICAgcmVxdWlyZSgnLi9zaGFwZXMvRWxsaXBzZScpLFxuICAgIFBvbHlnb246ICAgIHJlcXVpcmUoJy4vc2hhcGVzL1BvbHlnb24nKSxcbiAgICBSZWN0YW5nbGU6ICByZXF1aXJlKCcuL3NoYXBlcy9SZWN0YW5nbGUnKSxcbiAgICBSb3VuZGVkUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlJylcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIENpcmNsZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICovXG5mdW5jdGlvbiBDaXJjbGUoeCwgeSwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkNJUkM7XG59XG5cbkNpcmNsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaXJjbGU7XG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBDaXJjbGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkNpcmNsZX0gYSBjb3B5IG9mIHRoZSBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBDaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBjaXJjbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmFkaXVzIDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGR4ID0gKHRoaXMueCAtIHgpLFxuICAgICAgICBkeSA9ICh0aGlzLnkgLSB5KSxcbiAgICAgICAgcjIgPSB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzO1xuXG4gICAgZHggKj0gZHg7XG4gICAgZHkgKj0gZHk7XG5cbiAgICByZXR1cm4gKGR4ICsgZHkgPD0gcjIpO1xufTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBjaXJjbGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4qIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiovXG5DaXJjbGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy5yYWRpdXMsIHRoaXMueSAtIHRoaXMucmFkaXVzLCB0aGlzLnJhZGl1cyAqIDIsIHRoaXMucmFkaXVzICogMik7XG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBFbGxpcHNlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGlzIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZVxuICovXG5mdW5jdGlvbiBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkVMSVA7XG59XG5cbkVsbGlwc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRWxsaXBzZTtcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBFbGxpcHNlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5FbGxpcHNlfSBhIGNvcHkgb2YgdGhlIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgRWxsaXBzZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRzIGFyZSB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vbm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDBcbiAgICB2YXIgbm9ybXggPSAoKHggLSB0aGlzLngpIC8gdGhpcy53aWR0aCksXG4gICAgICAgIG5vcm15ID0gKCh5IC0gdGhpcy55KSAvIHRoaXMuaGVpZ2h0KTtcblxuICAgIG5vcm14ICo9IG5vcm14O1xuICAgIG5vcm15ICo9IG5vcm15O1xuXG4gICAgcmV0dXJuIChub3JteCArIG5vcm15IDw9IDEpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgZWxsaXBzZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy53aWR0aCwgdGhpcy55IC0gdGhpcy5oZWlnaHQsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG4iLCJ2YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9Qb2ludCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcG9pbnRzIHtQSVhJLlBvaW50W118bnVtYmVyW118Li4uUElYSS5Qb2ludHwuLi5udW1iZXJ9IFRoaXMgY2FuIGJlIGFuIGFycmF5IG9mIFBvaW50cyB0aGF0IGZvcm0gdGhlIHBvbHlnb24sXG4gKiAgICAgIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIHRoYXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBbeCx5LCB4LHksIC4uLl0sIG9yIHRoZSBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZVxuICogICAgICBhbGwgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvbiBlLmcuIGBuZXcgUElYSS5Qb2x5Z29uKG5ldyBQSVhJLlBvaW50KCksIG5ldyBQSVhJLlBvaW50KCksIC4uLilgLCBvciB0aGVcbiAqICAgICAgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmUgZmxhdCB4LHkgdmFsdWVzIGUuZy4gYG5ldyBQb2x5Z29uKHgseSwgeCx5LCB4LHksIC4uLilgIHdoZXJlIGB4YCBhbmQgYHlgIGFyZVxuICogICAgICBOdW1iZXJzLlxuICovXG5mdW5jdGlvbiBQb2x5Z29uKHBvaW50c18pXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBvaW50c187XG5cbiAgICAvL2lmIHBvaW50cyBpc24ndCBhbiBhcnJheSwgdXNlIGFyZ3VtZW50cyBhcyB0aGUgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgcG9pbnRzLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICBwb2ludHNbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IG9mIHBvaW50cywgY29udmVydCBpdCB0byBhIGZsYXQgYXJyYXkgb2YgbnVtYmVyc1xuICAgIGlmIChwb2ludHNbMF0gaW5zdGFuY2VvZiBQb2ludClcbiAgICB7XG4gICAgICAgIHZhciBwID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBwLnB1c2gocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50cyA9IHA7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5QT0xZO1xufVxuXG5Qb2x5Z29uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvbHlnb247XG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9seWdvblxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9seWdvbn0gYSBjb3B5IG9mIHRoZSBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvbHlnb24odGhpcy5wb2ludHMuc2xpY2UoKSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcG9seWdvblxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBpbnNpZGUgPSBmYWxzZTtcblxuICAgIC8vIHVzZSBzb21lIHJheWNhc3RpbmcgdG8gdGVzdCBoaXRzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL3BvaW50LWluLXBvbHlnb24vYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5wb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbGVuZ3RoIC0gMTsgaSA8IGxlbmd0aDsgaiA9IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB4aSA9IHRoaXMucG9pbnRzW2kgKiAyXSwgeWkgPSB0aGlzLnBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgeGogPSB0aGlzLnBvaW50c1tqICogMl0sIHlqID0gdGhpcy5wb2ludHNbaiAqIDIgKyAxXSxcbiAgICAgICAgICAgIGludGVyc2VjdCA9ICgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICh4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aSk7XG5cbiAgICAgICAgaWYgKGludGVyc2VjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiB0aGUgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcmVjdGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SRUNUO1xufVxuXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XG5cbi8qKlxuICogQSBjb25zdGFudCBlbXB0eSByZWN0YW5nbGUuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblJlY3RhbmdsZS5FTVBUWSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDwgdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDwgdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFJvdW5kZWQgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIHRoYXQgaGFzIG5pY2Ugcm91bmRlZCBjb3JuZXJzLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodCBhbmQgaXRzIHJhZGl1cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gQ29udHJvbHMgdGhlIHJhZGl1cyBvZiB0aGUgcm91bmRlZCBjb3JuZXJzXG4gKi9cbmZ1bmN0aW9uIFJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJSRUM7XG59XG5cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm91bmRlZFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUm91bmRlZFJlY3RhbmdsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUm91bmRlZFJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSb3VuZGVkUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8PSB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUGFydGljbGVDb250YWluZXIgY2xhc3MgaXMgYSByZWFsbHkgZmFzdCB2ZXJzaW9uIG9mIHRoZSBDb250YWluZXIgYnVpbHQgc29sZWx5IGZvciBzcGVlZCxcbiAqIHNvIHVzZSB3aGVuIHlvdSBuZWVkIGEgbG90IG9mIHNwcml0ZXMgb3IgcGFydGljbGVzLiBUaGUgdHJhZGVvZmYgb2YgdGhlIFBhcnRpY2xlQ29udGFpbmVyIGlzIHRoYXQgYWR2YW5jZWRcbiAqIGZ1bmN0aW9uYWxpdHkgd2lsbCBub3Qgd29yay4gUGFydGljbGVDb250YWluZXIgaW1wbGVtZW50cyBvbmx5IHRoZSBiYXNpYyBvYmplY3QgdHJhbnNmb3JtIChwb3NpdGlvbiwgc2NhbGUsIHJvdGF0aW9uKS5cbiAqIEFueSBvdGhlciBmdW5jdGlvbmFsaXR5IGxpa2UgdGludGluZywgbWFza2luZywgZXRjIHdpbGwgbm90IHdvcmsgb24gc3ByaXRlcyBpbiB0aGlzIGJhdGNoLlxuICpcbiAqIEl0J3MgZXh0cmVtZWx5IGVhc3kgdG8gdXNlIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQYXJ0aWNsZUNvbnRhaW5lcigpO1xuICpcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpXG4gKiB7XG4gKiAgICAgdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJteUltYWdlLnBuZ1wiKTtcbiAqICAgICBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEFuZCBoZXJlIHlvdSBoYXZlIGEgaHVuZHJlZCBzcHJpdGVzIHRoYXQgd2lsbCBiZSByZW5kZXJlciBhdCB0aGUgc3BlZWQgb2YgbGlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbbWF4U2l6ZT0xNTAwMF0ge251bWJlcn0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGF0IGNhbiBiZSByZW5kZXJlciBieSB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzXSB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyBvZiBjaGlsZHJlbiB0aGF0IHNob3VsZCBiZSB1cGxvYWRlZCB0byB0aGUgZ3B1IGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnNjYWxlPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBzY2FsZSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5wb3NpdGlvbj10cnVlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBwb3NpdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5yb3RhdGlvbj1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcm90YXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMudXZzPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCB1dnMgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuYWxwaGE9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIGFscGhhIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtiYXRjaFNpemU9MTUwMDBdIHtudW1iZXJ9IE51bWJlciBvZiBwYXJ0aWNsZXMgcGVyIGJhdGNoLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUNvbnRhaW5lcihtYXhTaXplLCBwcm9wZXJ0aWVzLCBiYXRjaFNpemUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBiYXRjaFNpemUgPSBiYXRjaFNpemUgfHwgMTUwMDA7IC8vQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG4gICAgbWF4U2l6ZSA9IG1heFNpemUgfHwgMTUwMDA7XG5cbiAgICAvLyBNYWtpbmcgc3VyZSB0aGUgYmF0Y2ggc2l6ZSBpcyB2YWxpZFxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICB2YXIgbWF4QmF0Y2hTaXplID0gMTYzODQ7XG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhCYXRjaFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgcHJvcGVydGllcyB0byBiZSBkeW5hbWljICh0cnVlKSAvIHN0YXRpYyAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFuW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmF0Y2hTaXplID0gYmF0Y2hTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICpcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlQ2hpbGRyZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBjYW52YXMgcmVuZGVyZXJpbmcuIElmIHRydWUgdGhlbiB0aGUgZWxlbWVudHMgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBuZWFyZXN0IHBpeGVsLiBUaGlzIHByb3ZpZGVzIGEgbmljZSBzcGVlZCBib29zdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZTtcbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbn1cblxuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBwcml2YXRlIHByb3BlcnRpZXMgYXJyYXkgdG8gZHluYW1pYyAvIHN0YXRpYyBiYXNlZCBvbiB0aGUgcGFzc2VkIHByb3BlcnRpZXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMge29iamVjdH0gVGhlIHByb3BlcnRpZXMgdG8gYmUgdXBsb2FkZWRcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnNldFByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKVxue1xuICAgIGlmICggcHJvcGVydGllcyApIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1swXSA9ICdzY2FsZScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5zY2FsZSA6IHRoaXMuX3Byb3BlcnRpZXNbMF07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMV0gPSAncG9zaXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucG9zaXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzFdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzJdID0gJ3JvdGF0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnJvdGF0aW9uIDogdGhpcy5fcHJvcGVydGllc1syXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1szXSA9ICd1dnMnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMudXZzIDogdGhpcy5fcHJvcGVydGllc1szXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1s0XSA9ICdhbHBoYScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5hbHBoYSA6IHRoaXMuX3Byb3BlcnRpZXNbNF07XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcblxuICAgIC8vIFRPRE8gZG9uJ3QgbmVlZCB0byFcbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAvLyAgUElYSS5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybS5jYWxsKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRhaW5lciB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHdlYmdsIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIoIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUgKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlLnJlbmRlciggdGhpcyApO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGZsYWcgdGhhdCBzdGF0aWMgZGF0YSBzaG91bGQgYmUgdXBkYXRlZCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoc21hbGxlc3RDaGlsZEluZGV4KVxue1xuICAgIHZhciBidWZmZXJJbmRleCA9IE1hdGguZmxvb3Ioc21hbGxlc3RDaGlsZEluZGV4IC8gdGhpcy5fYmF0Y2hTaXplKTtcbiAgICBpZiAoYnVmZmVySW5kZXggPCB0aGlzLl9idWZmZXJUb1VwZGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IGJ1ZmZlckluZGV4O1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciBpc1JvdGF0ZWQgPSB0cnVlO1xuXG4gICAgdmFyIHBvc2l0aW9uWCA9IDA7XG4gICAgdmFyIHBvc2l0aW9uWSA9IDA7XG5cbiAgICB2YXIgZmluYWxXaWR0aCA9IDA7XG4gICAgdmFyIGZpbmFsSGVpZ2h0ID0gMDtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZSA9IGNoaWxkLnRleHR1cmUuZnJhbWU7XG5cbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYSAqIGNoaWxkLmFscGhhO1xuXG4gICAgICAgIGlmIChjaGlsZC5yb3RhdGlvbiAlIChNYXRoLlBJICogMikgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZhc3Rlc3QgIHdheSB0byBvcHRpbWlzZSEgLSBpZiByb3RhdGlvbiBpcyAwIHRoZW4gd2UgY2FuIGF2b2lkIGFueSBraW5kIG9mIHNldFRyYW5zZm9ybSBjYWxsXG4gICAgICAgICAgICBpZiAoaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLngpICsgY2hpbGQucG9zaXRpb24ueCAgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnkpICsgY2hpbGQucG9zaXRpb24ueSAgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54O1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55O1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZC5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZFRyYW5zZm9ybSA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHkgfCAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoKSArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0KSArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICBjaGlsZC50ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgIGZyYW1lLngsXG4gICAgICAgICAgICBmcmFtZS55LFxuICAgICAgICAgICAgZnJhbWUud2lkdGgsXG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQsXG4gICAgICAgICAgICBwb3NpdGlvblgsXG4gICAgICAgICAgICBwb3NpdGlvblksXG4gICAgICAgICAgICBmaW5hbFdpZHRoLFxuICAgICAgICAgICAgZmluYWxIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIGlmICh0aGlzLl9idWZmZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcbn07XG4iLCJcbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVCdWZmZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlQnVmZmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFRoZSBwYXJ0aWNsZSBidWZmZXIgbWFuYWdlcyB0aGUgc3RhdGljIGFuZCBkeW5hbWljIGJ1ZmZlcnMgZm9yIGEgcGFydGljbGUgY29udGFpbmVyLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQnVmZmVyKGdsLCBwcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgc2l6ZSlcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleCBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhlIGJ1ZmZlciBjYW4gaG9sZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgZHluYW1pYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBzdGF0aWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgaWYoZHluYW1pY1Byb3BlcnR5RmxhZ3NbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRCdWZmZXJzKCk7XG5cbn1cblxuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQnVmZmVyO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5pbml0QnVmZmVycyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcHJvcGVydHk7XG5cbiAgICB2YXIgZHluYW1pY09mZnNldCA9IDA7XG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IGR5bmFtaWNPZmZzZXQ7XG4gICAgICAgIGR5bmFtaWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5keW5hbWljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG5cblxuICAgIC8vIHN0YXRpYyAvL1xuICAgIHZhciBzdGF0aWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBzdGF0aWNPZmZzZXQ7XG4gICAgICAgIHN0YXRpY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLnN0YXRpY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuc3RhdGljU3RyaWRlICogNCk7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZHluYW1pYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZER5bmFtaWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLmR5bmFtaWNEYXRhLCB0aGlzLmR5bmFtaWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuZHluYW1pY0RhdGEpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBzdGF0aWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWRTdGF0aWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5zdGF0aWNEYXRhLCB0aGlzLnN0YXRpY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLnN0YXRpY0RhdGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyB0byB0aGUgR1BVXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaSwgcHJvcGVydHk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnN0YXRpY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlQnVmZmVyLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5zdGF0aWNCdWZmZXIpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlU2hhZGVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZVNoYWRlcicpLFxuICAgIFBhcnRpY2xlQnVmZmVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUJ1ZmZlcicpLFxuICAgIG1hdGggICAgICAgICAgICA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgLy8gYW5kIG1heCBudW1iZXIgb2YgZWxlbWVudCBpbiB0aGUgaW5kZXggYnVmZmVyIGlzIDE2Mzg0ICogNiA9IDk4MzA0XG4gICAgLy8gQ3JlYXRpbmcgYSBmdWxsIGluZGV4IGJ1ZmZlciwgb3ZlcmhlYWQgaXMgOTgzMDQgKiAyID0gMTk2S29cbiAgICB2YXIgbnVtSW5kaWNlcyA9IDk4MzA0O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShudW1JbmRpY2VzKTtcblxuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgbnVtSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IG51bGw7XG5cbiAgICB0aGlzLnRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcbn1cblxuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3BhcnRpY2xlJywgUGFydGljbGVSZW5kZXJlcik7XG5cbi8qKlxuICogV2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IG5ldyBQYXJ0aWNsZVNoYWRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIpO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IGluZGV4LCBzbyA2NTUzNSAvIDYgPSAxMDkyMi5cblxuICAgIC8vdXBsb2FkIHRoZSBpbmRleCBkYXRhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBbXG4gICAgICAgIC8vIHZlcnRpY2VzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFZlcnRpY2VzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcG9zaXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbkNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRQb3NpdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJvdGF0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUm90YXRpb24sXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFJvdGF0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdXZzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRVdnMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBhbHBoYURhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRBbHBoYSxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgcGFydGljbGUgYmF0Y2guXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGJpbmQgdGhlIG1haW4gdGV4dHVyZVxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgLy8gYmluZCB0aGUgYnVmZmVyc1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgcGFydGljbGUgY29udGFpbmVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgY2hpbGRyZW4gPSBjb250YWluZXIuY2hpbGRyZW4sXG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIG1heFNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplO1xuXG4gICAgaWYodG90YWxDaGlsZHJlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZih0b3RhbENoaWxkcmVuID4gbWF4U2l6ZSlcbiAgICB7XG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBtYXhTaXplO1xuICAgIH1cblxuICAgIGlmKCFjb250YWluZXIuX2J1ZmZlcnMpXG4gICAge1xuICAgICAgICBjb250YWluZXIuX2J1ZmZlcnMgPSB0aGlzLmdlbmVyYXRlQnVmZmVycyggY29udGFpbmVyICk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29udGFpbmVyLmJsZW5kTW9kZSk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIG0gPSAgY29udGFpbmVyLndvcmxkVHJhbnNmb3JtLmNvcHkoIHRoaXMudGVtcE1hdHJpeCApO1xuICAgIG0ucHJlcGVuZCggdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXggKTtcbiAgICBnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgbS50b0FycmF5KHRydWUpKTtcbiAgICBnbC51bmlmb3JtMWYodGhpcy5zaGFkZXIudW5pZm9ybXMudUFscGhhLl9sb2NhdGlvbiwgY29udGFpbmVyLndvcmxkQWxwaGEpO1xuXG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHRleHR1cmUgaXMgYm91bmQuLlxuICAgIHZhciBiYXNlVGV4dHVyZSA9IGNoaWxkcmVuWzBdLl90ZXh0dXJlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgdGV4dHVyZSBoYXMgbm90IHVwZGF0ZWQgdGhlbiBsZXRzIG5vdCB1cGxvYWQgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmKCF0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUoYmFzZVRleHR1cmUpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZighY29udGFpbmVyLl9wcm9wZXJ0aWVzWzBdIHx8ICFjb250YWluZXIuX3Byb3BlcnRpZXNbM10pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgfVxuXG4gICAgLy8gbm93IGxldHMgdXBsb2FkIGFuZCByZW5kZXIgdGhlIGJ1ZmZlcnMuLlxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IHRvdGFsQ2hpbGRyZW47IGkgKz0gYmF0Y2hTaXplLCBqICs9IDEpXG4gICAge1xuICAgICAgICB2YXIgYW1vdW50ID0gKCB0b3RhbENoaWxkcmVuIC0gaSk7XG4gICAgICAgIGlmKGFtb3VudCA+IGJhdGNoU2l6ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50ID0gYmF0Y2hTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRhaW5lci5fYnVmZmVyc1tqXTtcblxuICAgICAgICAvLyB3ZSBhbHdheXMgdXBsb2FkIHRoZSBkeW5hbWljXG4gICAgICAgIGJ1ZmZlci51cGxvYWREeW5hbWljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuXG4gICAgICAgIC8vIHdlIG9ubHkgdXBsb2FkIHRoZSBzdGF0aWMgY29udGVudCB3aGVuIHdlIGhhdmUgdG8hXG4gICAgICAgIGlmKGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPT09IGopXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJ1ZmZlci51cGxvYWRTdGF0aWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gaiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5kIHRoZSBidWZmZXJcbiAgICAgICAgYnVmZmVyLmJpbmQoIHRoaXMuc2hhZGVyICk7XG5cbiAgICAgICAgIC8vIG5vdyBkcmF3IHRob3NlIHN1Y2thcyFcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgYW1vdW50ICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBvbmUgcGFydGljbGUgYnVmZmVyIGZvciBlYWNoIGNoaWxkIGluIHRoZSBjb250YWluZXIgd2Ugd2FudCB0byByZW5kZXIgYW5kIHVwZGF0ZXMgaW50ZXJuYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5nZW5lcmF0ZUJ1ZmZlcnMgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIGJ1ZmZlcnMgPSBbXSxcbiAgICAgICAgc2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemUsXG4gICAgICAgIGR5bmFtaWNQcm9wZXJ0eUZsYWdzID0gY29udGFpbmVyLl9wcm9wZXJ0aWVzLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gYmF0Y2hTaXplKVxuICAgIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKG5ldyBQYXJ0aWNsZUJ1ZmZlcihnbCwgdGhpcy5wcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgYmF0Y2hTaXplKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHZlcnRpY2llcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgdmVydGljZXMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFZlcnRpY2VzID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICB2YXIgc3ByaXRlLFxuICAgICAgICB0ZXh0dXJlLFxuICAgICAgICB0cmltLFxuICAgICAgICBzeCxcbiAgICAgICAgc3ksXG4gICAgICAgIHcwLCB3MSwgaDAsIGgxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xuXG4gICAgICAgIHNwcml0ZSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXTtcbiAgICAgICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZTtcbiAgICAgICAgc3ggPSBzcHJpdGUuc2NhbGUueDtcbiAgICAgICAgc3kgPSBzcHJpdGUuc2NhbGUueTtcblxuICAgICAgICBpZiAodGV4dHVyZS50cmltKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgICAgICB0cmltID0gdGV4dHVyZS50cmltO1xuXG4gICAgICAgICAgICB3MSA9IHRyaW0ueCAtIHNwcml0ZS5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBoMSA9IHRyaW0ueSAtIHNwcml0ZS5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtc3ByaXRlLmFuY2hvci54KTtcbiAgICAgICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtc3ByaXRlLmFuY2hvci54O1xuXG4gICAgICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXNwcml0ZS5hbmNob3IueSk7XG4gICAgICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC1zcHJpdGUuYW5jaG9yLnk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBwb3NpdGlvbnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFBvc2l0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUG9zaXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucG9zaXRpb247XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcm90YXRpb24gdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFJvdGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUm90YXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucm90YXRpb247XG5cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVSb3RhdGlvbjtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgVXZzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRVdnMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlVXZzID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLl90ZXh0dXJlLl91dnM7XG5cbiAgICAgICAgaWYgKHRleHR1cmVVdnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSB0ZXh0dXJlVXZzLngwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZXh0dXJlVXZzLnkwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdGV4dHVyZVV2cy54MTtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gdGV4dHVyZVV2cy55MTtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB0ZXh0dXJlVXZzLngyO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gdGV4dHVyZVV2cy55MjtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB0ZXh0dXJlVXZzLngzO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gdGV4dHVyZVV2cy55MztcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8geW91IGtub3cgdGhpcyBjYW4gYmUgZWFzaWVyIVxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBhbHBoYSB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkQWxwaGEgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZUFscGhhID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLmFscGhhO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZUFscGhhO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVSZW5kZXJlci5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuICAgIHRoaXMudGVtcE1hdHJpeCA9IG51bGw7XG59O1xuIiwidmFyIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVTaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBUZXh0dXJlU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFQb3NpdGlvbkNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVNjYWxlOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFSb3RhdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIHZlYzIgdiA9IGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAnICAgdi54ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIGNvcyhhUm90YXRpb24pIC0gKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIHNpbihhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdi55ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIHNpbihhUm90YXRpb24pICsgKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIGNvcyhhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdiA9IHYgKyBhUG9zaXRpb25Db29yZDsnLFxuXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyh2LCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGhlbGxvXG4gICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCB1QWxwaGE7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3IgKiB1QWxwaGE7JyxcbiAgICAgICAgICAgICcgIGlmIChjb2xvci5hID09IDAuMCkgZGlzY2FyZDsnLFxuICAgICAgICAgICAgJyAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdUFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFQb3NpdGlvbkNvb3JkOiAwLFxuICAgICAgICAgICAvLyBhU2NhbGU6ICAgICAgICAgMCxcbiAgICAgICAgICAgIGFSb3RhdGlvbjogICAgICAwXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVEVNUCBIQUNLXG5cbn1cblxuUGFydGljbGVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlU2hhZGVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVNoYWRlcjtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHN5c3RlbSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgc3lzdGVtIHRoaXMgcmVuZGVyZXIgaXMgZm9yLlxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXSB7bnVtYmVyfSBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcmVuZGVyZWQgYXJlYSAoc2hvd24gaWYgbm90IHRyYW5zcGFyZW50KS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5yb3VuZFBpeGVscz1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBTeXN0ZW1SZW5kZXJlcihzeXN0ZW0sIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB1dGlscy5zYXlIZWxsbyhzeXN0ZW0pO1xuXG4gICAgLy8gcHJlcGFyZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpIGluIENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tpXSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgb3B0aW9ucyA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHNlZSBQSVhJLlJFTkRFUkVSX1RZUEVcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgODAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDgwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgNjAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy52aWV3ID0gb3B0aW9ucy52aWV3IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG9wdGlvbnMucmVzb2x1dGlvbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBvcHRpb25zLnRyYW5zcGFyZW50O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgc2hvdWxkIGJlIHJlc2l6ZWQgYXV0b21hdGljYWxseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvcHRpb25zLmF1dG9SZXNpemUgfHwgZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIGJsZW5kIG1vZGVzIHVzZWZ1bCBmb3IgdGhpcyByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG1peGVkPn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgZmxhZyBhZmZlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50cyBvZiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgcmV0YWluZWQgYWZ0ZXIgcmVuZGVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3Igbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyBOT1QgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBhIGNhbnZhcyBzaXplZCBmaWxsUmVjdCBvcGVyYXRpb24gZXZlcnkgZnJhbWUgdG8gc2V0IHRoZSBjYW52YXMgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBjbGVhclJlY3QgdG8gY2xlYXIgdGhlIGNhbnZhcyBldmVyeSBmcmFtZS5cbiAgICAgKiBEaXNhYmxlIHRoaXMgYnkgc2V0dGluZyB0aGlzIHRvIGZhbHNlLiBGb3IgZXhhbXBsZSBpZiB5b3VyIGdhbWUgaGFzIGEgY2FudmFzIGZpbGxpbmcgYmFja2dyb3VuZCBpbWFnZSB5b3Ugb2Z0ZW4gZG9uJ3QgbmVlZCB0aGlzIHNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHRcbiAgICAgKi9cbiAgICB0aGlzLmNsZWFyQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICAgICAqIEhhbmR5IGZvciBjcmlzcCBwaXhlbCBhcnQgYW5kIHNwZWVkIG9uIGxlZ2FjeSBkZXZpY2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gb3B0aW9ucy5yb3VuZFBpeGVscztcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmEgPSBbMCwgMCwgMCwgMF07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9ICcjMDAwMDAwJztcblxuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yOyAvLyBydW4gYmcgY29sb3Igc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgdHJhbnNmb3JtOnt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKX0sIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3Qgcm9vdCBvYmplY3QgdGhhdCB0aGUgcmVuZGVyZXIgdHJpZWQgdG8gcmVuZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3lzdGVtUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFN5c3RlbVJlbmRlcmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciB0byBmaWxsIGlmIG5vdCB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlN5c3RlbVJlbmRlcmVyI1xuICAgICAqL1xuICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSB1dGlscy5oZXgyc3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB1dGlscy5oZXgycmdiKHZhbCwgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBjYW52YXMgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMudmlldy53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGhpcy52aWV3LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgICAgICB0aGlzLnZpZXcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpIHtcbiAgICBpZiAocmVtb3ZlVmlldyAmJiB0aGlzLnZpZXcucGFyZW50Tm9kZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMudmlldyk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgdGhpcy52aWV3ID0gbnVsbDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IDA7XG5cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBmYWxzZTtcblxuICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcblxuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDA7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IG51bGw7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gbnVsbDtcbn07XG4iLCJ2YXIgU3lzdGVtUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9TeXN0ZW1SZW5kZXJlcicpLFxuICAgIENhbnZhc01hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi91dGlscy9DYW52YXNNYXNrTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBTeXN0ZW1SZW5kZXJlci5jYWxsKHRoaXMsICdDYW52YXMnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuQ0FOVkFTO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMudmlldy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIGZsYWcgY29udHJvbGxpbmcgY2FudmFzIHJlZnJlc2guXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVmcmVzaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBhIENhbnZhc01hc2tNYW5hZ2VyLCBoYW5kbGVzIG1hc2tpbmcgd2hlbiB1c2luZyB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNNYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IENhbnZhc01hc2tNYW5hZ2VyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIHByb3BlcnR5IHVzZWQgdG8gc2V0IHRoZSBjYW52YXMgc21vb3RoaW5nIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnaW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcblxuICAgIGlmICghdGhpcy5jb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ3dlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ29JbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB0aGlzLl9tYXBCbGVuZE1vZGVzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHtcbiAgICAgICAgd29ybGRUcmFuc2Zvcm06IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgICAgICB3b3JsZEFscGhhOiAxXG4gICAgfTtcblxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oQ2FudmFzUmVuZGVyZXIpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byB0aGlzIGNhbnZhcyB2aWV3XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSB0aGUgb2JqZWN0IHRvIGJlIHJlbmRlcmVkXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KVxue1xuICAgIHRoaXMuZW1pdCgncHJlcmVuZGVyJyk7XG5cbiAgICB2YXIgY2FjaGVQYXJlbnQgPSBvYmplY3QucGFyZW50O1xuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gb2JqZWN0O1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIG9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIG9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTICYmIHRoaXMudmlldy5zY3JlZW5jYW52YXMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpXG4gICAge1xuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGggLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlckRpc3BsYXlPYmplY3Qob2JqZWN0LCB0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciBhbmQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSBDYW52YXMgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIFtyZW1vdmVWaWV3PWZhbHNlXSB7Ym9vbGVhbn0gUmVtb3ZlcyB0aGUgQ2FudmFzIGVsZW1lbnQgZnJvbSB0aGUgRE9NLlxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIGNhbGwgdGhlIGJhc2UgZGVzdHJveVxuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcywgcmVtb3ZlVmlldyk7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5T2JqZWN0IHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgY29udGV4dClcbntcbiAgICB2YXIgdGVtcENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyQ2FudmFzKHRoaXMpO1xuICAgIHRoaXMuY29udGV4dCA9IHRlbXBDb250ZXh0O1xufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBQSVhJLlN5c3RlbVJlbmRlcmVyI3Jlc2l6ZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKiBAcGFyYW0ge251bWJlcn0gaFxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHcsIGgpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xuXG4gICAgLy9yZXNldCB0aGUgc2NhbGUgbW9kZS4uIG9kZGx5IHRoaXMgc2VlbXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgY2FudmFzIGlzIHJlc2l6ZWQuXG4gICAgLy9zdXJlbHkgYSBicm93c2VyIGJ1Zz8/IExldCBwaXhpIGZpeCB0aGF0IGZvciB5b3UuLlxuICAgIGlmKHRoaXMuc21vb3RoUHJvcGVydHkpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHRbdGhpcy5zbW9vdGhQcm9wZXJ0eV0gPSAoQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVCA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogTWFwcyBQaXhpIGJsZW5kIG1vZGVzIHRvIGNhbnZhcyBibGVuZCBtb2Rlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX21hcEJsZW5kTW9kZXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5ibGVuZE1vZGVzKVxuICAgIHtcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzID0ge307XG5cbiAgICAgICAgaWYgKHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnbXVsdGlwbHknO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NjcmVlbic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSAnb3ZlcmxheSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnZGFya2VuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MSUdIVEVOXSAgICAgICA9ICdsaWdodGVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdjb2xvci1kb2RnZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnY29sb3ItYnVybic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnaGFyZC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSAnc29mdC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnZGlmZmVyZW5jZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnZXhjbHVzaW9uJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdodWUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gJ3NhdHVyYXRlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl0gICAgICAgICA9ICdjb2xvcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSAnbHVtaW5vc2l0eSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29vbCBuZXcgYmxlbmQgbW9kZXMgaW4gY2FudmFzICdjb3VnaCcgaWUgJ2NvdWdoJ1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNpemUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGNhbnZhc1xuICovXG5mdW5jdGlvbiBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgQ2FudmFzIG9iamVjdCB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBDYW52YXNCdWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogQSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHR3by1kaW1lbnNpb25hbCByZW5kZXJpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59XG5cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0J1ZmZlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FudmFzQnVmZmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIGJ1ZmZlciBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ2FudmFzQnVmZmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdmFsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGNhbnZhcyB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZSBDYW52YXNCdWZmZXIgY2xhc3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbnZhc1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgY2FudmFzLlxuICpcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBjYW52YXMgcmVuZGVyZXIgdG8gZHJhdyB0aGUgcHJpbWl0aXZlIGdyYXBoaWNzIGRhdGEuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNHcmFwaGljcyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNHcmFwaGljcztcblxuLypcbiAqIFJlbmRlcnMgYSBHcmFwaGljcyBvYmplY3QgdG8gYSBjYW52YXMuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgYWN0dWFsIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSAyZCBkcmF3aW5nIG1ldGhvZCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciB3b3JsZEFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuICAgIGlmIChncmFwaGljcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3NUaW50KGdyYXBoaWNzKTtcbiAgICAgICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLl9maWxsVGludDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEuX2xpbmVUaW50O1xuXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZSBjbG9zZSB0aGUgcGF0aCAtIG11Y2ggbmVhdGVyIDopXG4gICAgICAgICAgICBpZiAocG9pbnRzWzBdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAmJiBwb2ludHNbMV0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbENvbG9yIHx8IGRhdGEuZmlsbENvbG9yID09PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmZpbGxBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggZmlsbENvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUud2lkdGgsIHNoYXBlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLDAsMipNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVsbGlwc2UgY29kZSB0YWtlbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcblxuICAgICAgICAgICAgdmFyIHcgPSBzaGFwZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB2YXIgaCA9IHNoYXBlLmhlaWdodCAqIDI7XG5cbiAgICAgICAgICAgIHZhciB4ID0gc2hhcGUueCAtIHcvMjtcbiAgICAgICAgICAgIHZhciB5ID0gc2hhcGUueSAtIGgvMjtcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIGthcHBhID0gMC41NTIyODQ4LFxuICAgICAgICAgICAgICAgIG94ID0gKHcgLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgb3kgPSAoaCAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgeGUgPSB4ICsgdywgICAgICAgICAgIC8vIHgtZW5kXG4gICAgICAgICAgICAgICAgeWUgPSB5ICsgaCwgICAgICAgICAgIC8vIHktZW5kXG4gICAgICAgICAgICAgICAgeG0gPSB4ICsgdyAvIDIsICAgICAgIC8vIHgtbWlkZGxlXG4gICAgICAgICAgICAgICAgeW0gPSB5ICsgaCAvIDI7ICAgICAgIC8vIHktbWlkZGxlXG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG1hc2tcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3Mgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgbWFza1xuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGNvbnRleHQgMmQgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciBsZW4gPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gVE9ETyAtIG5lZWQgdG8gYmUgVW5kZWZpbmVkIVxuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgcnggPSBzaGFwZS54O1xuICAgICAgICAgICAgdmFyIHJ5ID0gc2hhcGUueTtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcbiAgICAgICAgICAgIHZhciByYWRpdXMgPSBzaGFwZS5yYWRpdXM7XG5cbiAgICAgICAgICAgIHZhciBtYXhSYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDIgfCAwO1xuICAgICAgICAgICAgcmFkaXVzID0gcmFkaXVzID4gbWF4UmFkaXVzID8gbWF4UmFkaXVzIDogcmFkaXVzO1xuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRpbnQgb2YgYSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3MgdGhhdCB3aWxsIGhhdmUgaXRzIHRpbnQgdXBkYXRlZFxuICpcbiAqL1xuQ2FudmFzR3JhcGhpY3MudXBkYXRlR3JhcGhpY3NUaW50ID0gZnVuY3Rpb24gKGdyYXBoaWNzKVxue1xuICAgIGlmIChncmFwaGljcy50aW50ID09PSAweEZGRkZGRiAmJiBncmFwaGljcy5fcHJldlRpbnQgPT09IGdyYXBoaWNzLnRpbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyYXBoaWNzLl9wcmV2VGludCA9IGdyYXBoaWNzLnRpbnQ7XG5cbiAgICB2YXIgdGludFIgPSAoZ3JhcGhpY3MudGludCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50RyA9IChncmFwaGljcy50aW50ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgdGludEIgPSAoZ3JhcGhpY3MudGludCAmIDB4RkYpLyAyNTU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLmZpbGxDb2xvciB8IDA7XG4gICAgICAgIHZhciBsaW5lQ29sb3IgPSBkYXRhLmxpbmVDb2xvciB8IDA7XG5cbiAgICAgICAgLypcbiAgICAgICAgdmFyIGNvbG9yUiA9IChmaWxsQ29sb3IgPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgdmFyIGNvbG9yRyA9IChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JCID0gKGZpbGxDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgZmlsbENvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG5cbiAgICAgICAgY29sb3JSID0gKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckcgPSAobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgY29sb3JCID0gKGxpbmVDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgbGluZUNvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG4gICAgICAgICovXG5cbiAgICAgICAgLy8gc3VwZXIgaW5saW5lIGNvcyBpbSBhbiBvcHRpbWl6YXRpb24gTkFaSSA6KVxuICAgICAgICBkYXRhLl9maWxsVGludCA9ICgoKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgoZmlsbENvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAoZmlsbENvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuICAgICAgICBkYXRhLl9saW5lVGludCA9ICgoKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAobGluZUNvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuXG4gICAgfVxufTtcblxuIiwidmFyIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi9DYW52YXNHcmFwaGljcycpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBtYXNraW5nLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ2FudmFzTWFza01hbmFnZXIoKVxue31cblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FudmFzTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc01hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgc3RhY2sgb2YgbWFza3MuXG4gKlxuICogQHBhcmFtIG1hc2tEYXRhIHtvYmplY3R9IHRoZSBtYXNrRGF0YSB0aGF0IHdpbGwgYmUgcHVzaGVkXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSwgcmVuZGVyZXIpXG57XG5cbiAgICByZW5kZXJlci5jb250ZXh0LnNhdmUoKTtcblxuICAgIHZhciBjYWNoZUFscGhhID0gbWFza0RhdGEuYWxwaGE7XG4gICAgdmFyIHRyYW5zZm9ybSA9IG1hc2tEYXRhLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgLy9UT0RPIHN1cG9ydCBzcHJpdGUgYWxwaGEgbWFza3M/P1xuICAgIC8vbG90cyBvZiBlZmZvcnQgcmVxdWlyZWQuIElmIGRlbWFuZCBpcyBncmVhdCBlbm91Z2guLlxuICAgIGlmKCFtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrKG1hc2tEYXRhLCByZW5kZXJlci5jb250ZXh0KTtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5jbGlwKCk7XG4gICAgfVxuXG4gICAgbWFza0RhdGEud29ybGRBbHBoYSA9IGNhY2hlQWxwaGE7XG59O1xuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dCB0byB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZSB0aGUgbWFzayB3YXMgYXBwbGllZC5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLmNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7fTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2RzIGZvciBTcHJpdGUvVGV4dHVyZSB0aW50aW5nLlxuICogQHN0YXRpY1xuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG52YXIgQ2FudmFzVGludGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1RpbnRlcjtcblxuLyoqXG4gKiBCYXNpY2FsbHkgdGhpcyBtZXRob2QganVzdCBuZWVkcyBhIHNwcml0ZSBhbmQgYSBjb2xvciBhbmQgdGludHMgdGhlIHNwcml0ZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSB0aW50ZWQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlID0gZnVuY3Rpb24gKHNwcml0ZSwgY29sb3IpXG57XG4gICAgdmFyIHRleHR1cmUgPSBzcHJpdGUudGV4dHVyZTtcblxuICAgIGNvbG9yID0gQ2FudmFzVGludGVyLnJvdW5kQ29sb3IoY29sb3IpO1xuXG4gICAgdmFyIHN0cmluZ0NvbG9yID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgdGV4dHVyZS50aW50Q2FjaGUgPSB0ZXh0dXJlLnRpbnRDYWNoZSB8fCB7fTtcblxuICAgIGlmICh0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0pXG4gICAge1xuICAgICAgICByZXR1cm4gdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdO1xuICAgIH1cblxuICAgICAvLyBjbG9uZSB0ZXh0dXJlLi5cbiAgICB2YXIgY2FudmFzID0gQ2FudmFzVGludGVyLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8vQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWwodGV4dHVyZSwgc3RyaW5nQ29sb3IsIGNhbnZhcyk7XG4gICAgQ2FudmFzVGludGVyLnRpbnRNZXRob2QodGV4dHVyZSwgY29sb3IsIGNhbnZhcyk7XG5cbiAgICBpZiAoQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSlcbiAgICB7XG4gICAgICAgIC8vIGlzIHRoaXMgYmV0dGVyP1xuICAgICAgICB2YXIgdGludEltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHRpbnRJbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKCk7XG5cbiAgICAgICAgdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdID0gdGludEltYWdlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSBjYW52YXM7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBub3QgY29udmVydGluZyB0aGUgdGV4dHVyZSB0byBhbiBpbWFnZSB0aGVuIHdlIG5lZWQgdG8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXNcbiAgICAgICAgQ2FudmFzVGludGVyLmNhbnZhcyA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdtdWx0aXBseScgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcblxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdvdmVybGF5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoT3ZlcmxheSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1hdG9wJztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgLy8gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG59O1xuXG4vKipcbiAqIFRpbnQgYSB0ZXh0dXJlIHBpeGVsIHBlciBwaXhlbC5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcbiAgICB2YXIgciA9IHJnYlZhbHVlc1swXSwgZyA9IHJnYlZhbHVlc1sxXSwgYiA9IHJnYlZhbHVlc1syXTtcblxuICAgIHZhciBwaXhlbERhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICB2YXIgcGl4ZWxzID0gcGl4ZWxEYXRhLmRhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBpeGVscy5sZW5ndGg7IGkgKz0gNClcbiAgICB7XG4gICAgICAgIHBpeGVsc1tpKzBdICo9IHI7XG4gICAgICAgIHBpeGVsc1tpKzFdICo9IGc7XG4gICAgICAgIHBpeGVsc1tpKzJdICo9IGI7XG4gICAgfVxuXG4gICAgY29udGV4dC5wdXRJbWFnZURhdGEocGl4ZWxEYXRhLCAwLCAwKTtcbn07XG5cbi8qKlxuICogUm91bmRzIHRoZSBzcGVjaWZpZWQgY29sb3IgYWNjb3JkaW5nIHRvIHRoZSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbC5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHJvdW5kLCBzaG91bGQgYmUgYSBoZXggY29sb3JcbiAqL1xuQ2FudmFzVGludGVyLnJvdW5kQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IpXG57XG4gICAgdmFyIHN0ZXAgPSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbDtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcblxuICAgIHJnYlZhbHVlc1swXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1swXSAvIHN0ZXApICogc3RlcCk7XG4gICAgcmdiVmFsdWVzWzFdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzFdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMl0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMl0gLyBzdGVwKSAqIHN0ZXApO1xuXG4gICAgcmV0dXJuIHV0aWxzLnJnYjJoZXgocmdiVmFsdWVzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGNhcCB3aGVuIHJvdW5kaW5nIGNvbG9ycy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsID0gODtcblxuLyoqXG4gKiBUaW50IGNhY2hlIGJvb2xlYW4gZmxhZy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jb252ZXJ0VGludFRvSW1hZ2UgPSBmYWxzZTtcblxuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCwgY29uc2VxdWVudGx5IHRoZSBhYmlsaXR5IHRvIHRpbnQgdXNpbmcgdGhlIG11bHRpcGx5IG1ldGhvZC5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA9IHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKTtcblxuLyoqXG4gKiBUaGUgdGludGluZyBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQuXG4gKlxuICovXG5DYW52YXNUaW50ZXIudGludE1ldGhvZCA9IENhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA/IENhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5IDogIENhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsO1xuIiwidmFyIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcblx0dXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIFRleHR1cmVNYW5hZ2VyID0gZnVuY3Rpb24oZ2wpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyB0cmFjayB0ZXh0dXJlcyBpbiB0aGUgcmVuZGVyZXIgc28gd2UgY2FuIG5vIGxvbmdlciBsaXN0ZW4gdG8gdGhlbSBvbiBkZXN0cnVjdGlvbi5cblx0dGhpcy5fbWFuYWdlZFRleHR1cmVzID0gW107XG4gICAgdGhpcy5nbFRleHR1cmVzID0ge307XG5cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5nZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW5kL29yIENyZWF0ZXMgYSBXZWJHTCB0ZXh0dXJlIGZvciB0aGUgcmVuZGVyZXIncyBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdXBkYXRlXG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuXHRpZiAoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGdsVGV4dHVyZSA9IHRoaXMuZ2xUZXh0dXJlc1t0ZXh0dXJlLnVpZF0vL3RleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgaWYgKCFnbFRleHR1cmUpXG4gICAge1xuICAgICAgICBnbFRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcbiAgICAgICAgZ2xUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSB0cnVlXG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgLy8gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXSA9IGdsVGV4dHVyZTtcblxuICAgICAgICB0ZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9uKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICBnbFRleHR1cmUudXBsb2FkKHRleHR1cmUuc291cmNlKTtcbiAgICBcbiAgICAvL1RPRE8gY2hlY2sgaXMgcG93ZXIgb2YgdHdvLi5cbiAgICBnbFRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cblxuICAgIC8vIFRPRE8gY2hlY2sgZm9yIHNjYWxpbmcgdHlwZVxuICAgIGdsVGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKCk7XG5cbiAgICByZXR1cm4gIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTFxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gZGVzdHJveVxuICovXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlLCBfc2tpcFJlbW92ZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0pXG4gICAge1xuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG5cblxuICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcblxuICAgICAgICBpZiAoIV9za2lwUmVtb3ZlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5pbmRleE9mKHRleHR1cmUpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5fbWFuYWdlZFRleHR1cmVzLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKClcbntcblx0Ly8gZW1wdHkgYWxsIHRoZSBvbGQgZ2wgdGV4dHVyZXMgYXMgdGhleSBhcmUgdXNlbGVzcyBub3dcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzW2ldO1xuICAgICAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuICAgIC8vIGRlc3Ryb3kgbWFuYWdlZCB0ZXh0dXJlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIHRoaXMuZGVzdHJveVRleHR1cmUodGV4dHVyZSwgdHJ1ZSk7XG4gICAgICAgIHRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9mZignZGlzcG9zZScsIHRoaXMuZGVzdHJveVRleHR1cmUsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcyA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZU1hbmFnZXI7XG5cbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgU2hhZGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIE1hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9NYXNrTWFuYWdlcicpLFxuICAgIFN0ZW5jaWxNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlcicpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBCbGVuZE1vZGVNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4vdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBGWEFBRmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBUZXh0dXJlTWFuYWdlciA9IHJlcXVpcmUoJy4vVGV4dHVyZU1hbmFnZXInKSxcbiAgICBjcmVhdGVDb250ZXh0ID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuY3JlYXRlQ29udGV4dCxcbiAgICBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aScpLFxuICAgIG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpID0gcmVxdWlyZSgnLi91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFdlYkdMUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIHdlYkdMIGVuYWJsZWQgY2FudmFzLiBUaGlzIHJlbmRlcmVyXG4gKiBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMLiBUaGlzIFJlbmRlciB3b3JrcyBieSBhdXRvbWF0aWNhbGx5IG1hbmFnaW5nIHdlYkdMQmF0Y2hzLlxuICogU28gbm8gbmVlZCBmb3IgU3ByaXRlIEJhdGNoZXMgb3IgU3ByaXRlIENsb3Vkcy5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIHZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9MF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9MF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMuIElmIG5vdCBhdmFpbGFibGUgbmF0aXZlbHkgdGhlbiBGWEFBIGFudGlhbGlhc2luZyBpcyB1c2VkXG4gKiBAcGFyYW0gW29wdGlvbnMuZm9yY2VGWEFBPWZhbHNlXSB7Ym9vbGVhbn0gZm9yY2VzIEZYQUEgYW50aWFsaWFzaW5nIHRvIGJlIHVzZWQgb3ZlciBuYXRpdmUuIEZYQUEgaXMgZmFzdGVyLCBidXQgbWF5IG5vdCBhbHdheXMgbG9vayBhcyBncmVhdFxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy4gSWYgeW91IHdpc2ggdG8gc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSAqbXVzdCogc2V0IHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byBgdHJ1ZWAuXG4gKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmXG4gKiAgICAgIHlvdSBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0LlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ1dlYkdMJywgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIHJlbmRlcmVyIGFzIGEgc3RhbmRhcmRpc2VkIGNvbnN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9Ly9cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0w7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gdGhpcy5oYW5kbGVDb250ZXh0TG9zdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5oYW5kbGVDb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gY3JlYXRlIGEgbmV3IHdlYmdsIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgICAgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQsXG4gICAgICAgIGFudGlhbGlhczogb3B0aW9ucy5hbnRpYWxpYXMsXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnRyYW5zcGFyZW50ICE9PSAnbm90TXVsdGlwbGllZCcsXG4gICAgICAgIHN0ZW5jaWw6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICB9O1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYVszXSA9IHRoaXMudHJhbnNwYXJlbnQgPyAwIDogMTtcblxuICAgIC8qKlxuICAgICAqIERlYWxzIHdpdGggbWFuYWdpbmcgdGhlIHNoYWRlciBwcm9ncmFtcyBhbmQgdGhlaXIgYXR0cmlicy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBuZXcgU2hhZGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1hc2tzIHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWFza01hbmFnZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG5ldyBNYXNrTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyID0gbmV3IFN0ZW5jaWxNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRmlsdGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlck1hbmFnZXIgPSBuZXcgRmlsdGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIGJsZW5kTW9kZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmxlbmRNb2RlTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBuZXcgQmxlbmRNb2RlTWFuYWdlcih0aGlzKTtcblxuICAgIFxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIE9iamVjdFJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5PYmplY3RSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG5ldyBPYmplY3RSZW5kZXJlcih0aGlzKTtcblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIGNvbnRleHQgc28gaXQgaXMgcmVhZHkgZm9yIHRoZSBtYW5hZ2Vycy5cbiAgICB0aGlzLmdsID0gY3JlYXRlQ29udGV4dCh0aGlzLnZpZXcsIHRoaXMuX2NvbnRleHRPcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXRDb250ZXh0KCk7XG5cbiAgICAvLyBtYXAgc29tZSB3ZWJHTCBibGVuZCBhbmQgZHJhd21vZGVzLi5cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wpO1xuICAgIHRoaXMuZHJhd01vZGVzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wpXG5cbiAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXR9XG4gICAgICovXG4gICAgdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUZXh0dXJlTG9jYXRpb24gPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oV2ViR0xSZW5kZXJlcik7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgV2ViR0wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLl9pbml0Q29udGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgbWFuYWdlci4uLlxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hbmFnZXIoZ2wpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBkZWZhdWx0IHBpeGkgc2V0dGluZ3MuLlxuICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG5cblxuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBudWxsLCB0aGlzLnJlc29sdXRpb24sIHRydWUpO1xuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5jbGVhckNvbG9yID0gdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYTtcbiAgICBcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQodGhpcy5yb290UmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMuZW1pdCgnY29udGV4dCcsIGdsKTtcblxuICAgIC8vIHNldHVwIHRoZSB3aWR0aC9oZWlnaHQgcHJvcGVydGllcyBhbmQgZ2wgdmlld3BvcnRcbiAgICB0aGlzLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7ICAgIFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gaXRzIHdlYkdMIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIC8vIG5vIHBvaW50IHJlbmRlcmluZyBpZiBvdXIgY29udGV4dCBoYXMgYmVlbiBibG93biB1cCFcbiAgICBpZiAodGhpcy5nbC5pc0NvbnRleHRMb3N0KCkpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gZGlzcGxheU9iamVjdDtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IGRpc3BsYXlPYmplY3QucGFyZW50O1xuICAgIGRpc3BsYXlPYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIGRpc3BsYXlPYmplY3QudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnJvb3RSZW5kZXJUYXJnZXQsIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpOy8vdGhpcy5wcm9qZWN0aW9uKTtcblxuICAgIHRoaXMuZW1pdCgncG9zdHJlbmRlcicpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgRGlzcGxheSBPYmplY3QuXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0gcmVuZGVyVGFyZ2V0IHtQSVhJLlJlbmRlclRhcmdldH0gVGhlIHJlbmRlciB0YXJnZXQgdG8gdXNlIHRvIHJlbmRlciB0aGlzIGRpc3BsYXkgb2JqZWN0XG4gKlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJEaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHJlbmRlclRhcmdldCwgY2xlYXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgdGhpcy5iaW5kUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG5cbiAgICBpZihjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IHRoZSBmaWx0ZXIgbWFuYWdlclxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5zZXRGaWx0ZXJTdGFjayggcmVuZGVyVGFyZ2V0LmZpbHRlclN0YWNrICk7XG5cbiAgICAvLyByZW5kZXIgdGhlIHNjZW5lIVxuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyV2ViR0wodGhpcyk7XG5cbiAgICAvLyBmaW5pc2ggdGhlIGN1cnJlbnQgcmVuZGVyZXIuLlxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdGhlIG9uZSBnaXZlbiBpbiBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gb2JqZWN0UmVuZGVyZXIge1BJWEkuT2JqZWN0UmVuZGVyZXJ9IFRoZSBvYmplY3QgcmVuZGVyZXIgdG8gdXNlLlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRPYmplY3RSZW5kZXJlciA9IGZ1bmN0aW9uIChvYmplY3RSZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyZXIgPT09IG9iamVjdFJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0b3AoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG9iamVjdFJlbmRlcmVyO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHdlYkdMIHZpZXcgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB3ZWJHTCB2aWV3XG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB3ZWJHTCB2aWV3XG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9PT0gdGhpcy5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSB0aGUgbmV3IHJlbmRlciB0YXJnZXRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgaWYocmVuZGVyVGFyZ2V0ICE9PSB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcblxuICAgICAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLnNldE1hc2tTdGFjayggcmVuZGVyVGFyZ2V0LnN0ZW5jaWxNYXNrU3RhY2sgKTtcbiAgICB9XG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKS8vcHJvamVjdGlvbiwgYnVmZmVyKVxue1xuICAgIC8vVE9ETyBjYWNoZVxuICAgIGlmKHRoaXMuX2FjdGl2ZVNoYWRlciAhPT0gc2hhZGVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlU2hhZGVyID0gc2hhZGVyO1xuICAgICAgICBzaGFkZXIuYmluZCgpO1xuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgfVxufVxuXG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvY2F0aW9uKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvL1RPRE8gdGVzdCBwZXJmIG9mIGNhY2hlP1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gfHwgMDtcblxuICAgIGlmKHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiAhPT0gbG9jYXRpb24pLy9cbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbiApO1xuICAgIH1cblxuICAgIC8vVE9ETyAtIGNhbiB3ZSBjYWNoZSB0aGlzIHRleHR1cmUgdG9vP1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOyAgICAgIFxuICAgIFxuICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBiaW5kIHRoZSB0ZXh0dXJlLi5cbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0uYmluZCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEhhbmRsZXMgYSBsb3N0IHdlYmdsIGNvbnRleHRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5oYW5kbGVDb250ZXh0TG9zdCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGEgcmVzdG9yZWQgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnJlbW92ZUFsbCgpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgKGV2ZW50IGxpc3RlbmVycywgc3ByaXRlYmF0Y2gsIGV0Yy4uLilcbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldylcbntcbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICAvLyByZW1vdmUgbGlzdGVuZXJzXG4gICAgdGhpcy52aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0KTtcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCk7XG5cbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLmRlc3Ryb3lBbGwoKTtcblxuICAgIC8vIGNhbGwgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMudWlkID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIG1hbmFnZXJzXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLm1hc2tNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gbnVsbDtcbiAgICB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLnVzZVByb2dyYW0obnVsbCk7XG4gICAgdGhpcy5nbCA9IG51bGw7XG59O1xuXG4iLCJ2YXIgRGVmYXVsdFNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgUElYSSBmaWx0ZXIuIEN1cnJlbnRseSBvbmx5IFdlYkdMIHN1cHBvcnRzIGZpbHRlcnMuXG4gKiBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIGZpbHRlciB0aGlzIHNob3VsZCBiZSB5b3VyIGJhc2UgY2xhc3MuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHZlcnRleFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdmVydGV4IHNoYWRlciBzb3VyY2UgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBmcmFnbWVudFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIHVuaWZvcm1zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1bmlmb3JtcyBmb3IgdGhpcyBmaWx0ZXIuXG4gKi9cbmZ1bmN0aW9uIEFic3RyYWN0RmlsdGVyKHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zKVxue1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygc2hhZGVyc1xuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlcnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHRyYSBwYWRkaW5nIHRoYXQgdGhlIGZpbHRlciBtaWdodCBuZWVkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIHZlcnRleCBzaGFkZXJcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmdbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmVydGV4U3JjID0gdmVydGV4U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIG9mIHRoZSBmcmFtZW50IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgLy9UT0RPIGEgcmVtaW5kZXIgLSB3b3VsZCBiZSBjb29sIHRvIGhhdmUgbG93ZXIgcmVzIGZpbHRlcnMgYXMgdGhpcyB3b3VsZCBnaXZlIGJldHRlciBwZXJmb3JtYW5jZS5cblxuICAgIC8vdHlwZW9mIGZyYWdtZW50U3JjID09PSAnc3RyaW5nJyA/IGZyYWdtZW50U3JjLnNwbGl0KCcnKSA6IChmcmFnbWVudFNyYyB8fCBbXSk7XG5cbn1cblxuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RmlsdGVyO1xuXG4vKipcbiAqIEdyYWJzIGEgc2hhZGVyIGZyb20gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBzaGFkZXIgZnJvbVxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuZ2V0U2hhZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyc1tnbC5pZF07XG5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IG5ldyBEZWZhdWx0U2hhZGVyKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIsXG4gICAgICAgICAgICB0aGlzLnZlcnRleFNyYyxcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRTcmMsXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaGFkZXJzW2dsLmlkXSA9IHNoYWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbn07XG5cbi8qKlxuICogU3luY3MgYSB1bmlmb3JtIGJldHdlZW4gdGhlIGNsYXNzIG9iamVjdCBhbmQgdGhlIHNoYWRlcnMuXG4gKlxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuc2hhZGVycy5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnNoYWRlcnNbaV0uc3luY1VuaWZvcm0odW5pZm9ybSk7XG4gICAgfVxufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKlxuICogQmFzaWMgRlhBQSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgY29kZSBvbiBnZWVrczNkLmNvbSB3aXRoIHRoZVxuICogbW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXG4gKiB1bnN1cHBvcnRlZCBieSBXZWJHTC5cbiAqXG4gKiAtLVxuICogRnJvbTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICpcbiAqL1xuZnVuY3Rpb24gRlhBQUZpbHRlcigpXG57XG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxuXFxudm9pZCB0ZXhjb29yZHModmVjMiBmcmFnQ29vcmQsIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk5XLCBvdXQgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiU1csIG91dCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzIgaW52ZXJzZVZQID0gMS4wIC8gcmVzb2x1dGlvbi54eTtcXG4gICAgdl9yZ2JOVyA9IChmcmFnQ29vcmQgKyB2ZWMyKC0xLjAsIC0xLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JORSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYlNXID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU0UgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIDEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk0gPSB2ZWMyKGZyYWdDb29yZCAqIGludmVyc2VWUCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbiAgIHZSZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcXG5cXG4gICAvL2NvbXB1dGUgdGhlIHRleHR1cmUgY29vcmRzIGFuZCBzZW5kIHRoZW0gdG8gdmFyeWluZ3NcXG4gICB0ZXhjb29yZHMoYVRleHR1cmVDb29yZCAqIHJlc29sdXRpb24sIHJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG5cXG4vKipcXG5CYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXFxubW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXFxudW5zdXBwb3J0ZWQgYnkgV2ViR0wuXFxuXFxuLS1cXG5cXG5Gcm9tOlxcbmh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XFxuXFxuQ29weXJpZ2h0IChjKSAyMDExIGJ5IEFybWluIFJvbmFjaGVyLlxcblxcblNvbWUgcmlnaHRzIHJlc2VydmVkLlxcblxcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcXG5tZXQ6XFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcXG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxcbiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXFxuICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXFxuICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxcblxcbiAgICAqIFRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yXFxuICAgICAgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljXFxuICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxcblxcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcXG5cXFwiQVMgSVNcXFwiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxcbkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXFxuT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXFxuU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxcblRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxcbiovXFxuXFxuI2lmbmRlZiBGWEFBX1JFRFVDRV9NSU5cXG4gICAgI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gICAoMS4wLyAxMjguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01VTFxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAgICgxLjAgLyA4LjApXFxuI2VuZGlmXFxuI2lmbmRlZiBGWEFBX1NQQU5fTUFYXFxuICAgICNkZWZpbmUgRlhBQV9TUEFOX01BWCAgICAgOC4wXFxuI2VuZGlmXFxuXFxuLy9vcHRpbWl6ZWQgdmVyc2lvbiBmb3IgbW9iaWxlLCB3aGVyZSBkZXBlbmRlbnRcXG4vL3RleHR1cmUgcmVhZHMgY2FuIGJlIGEgYm90dGxlbmVja1xcbnZlYzQgZnhhYShzYW1wbGVyMkQgdGV4LCB2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JOVywgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JTVywgdmVjMiB2X3JnYlNFLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzQgY29sb3I7XFxuICAgIG1lZGl1bXAgdmVjMiBpbnZlcnNlVlAgPSB2ZWMyKDEuMCAvIHJlc29sdXRpb24ueCwgMS4wIC8gcmVzb2x1dGlvbi55KTtcXG4gICAgdmVjMyByZ2JOVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTlcpLnh5ejtcXG4gICAgdmVjMyByZ2JORSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTkUpLnh5ejtcXG4gICAgdmVjMyByZ2JTVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU1cpLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU0UpLnh5ejtcXG4gICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTSk7XFxuICAgIHZlYzMgcmdiTSAgPSB0ZXhDb2xvci54eXo7XFxuICAgIHZlYzMgbHVtYSA9IHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdChyZ2JOVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFORSA9IGRvdChyZ2JORSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTVyA9IGRvdChyZ2JTVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdChyZ2JTRSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNICA9IGRvdChyZ2JNLCAgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNaW4gPSBtaW4obHVtYU0sIG1pbihtaW4obHVtYU5XLCBsdW1hTkUpLCBtaW4obHVtYVNXLCBsdW1hU0UpKSk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgobHVtYU0sIG1heChtYXgobHVtYU5XLCBsdW1hTkUpLCBtYXgobHVtYVNXLCBsdW1hU0UpKSk7XFxuXFxuICAgIG1lZGl1bXAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcblxcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoKGx1bWFOVyArIGx1bWFORSArIGx1bWFTVyArIGx1bWFTRSkgKlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwpLCBGWEFBX1JFRFVDRV9NSU4pO1xcblxcbiAgICBmbG9hdCByY3BEaXJNaW4gPSAxLjAgLyAobWluKGFicyhkaXIueCksIGFicyhkaXIueSkpICsgZGlyUmVkdWNlKTtcXG4gICAgZGlyID0gbWluKHZlYzIoRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBtYXgodmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiBpbnZlcnNlVlA7XFxuXFxuICAgIHZlYzMgcmdiQSA9IDAuNSAqIChcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqICgxLjAgLyAzLjAgLSAwLjUpKS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDIuMCAvIDMuMCAtIDAuNSkpLnh5eik7XFxuICAgIHZlYzMgcmdiQiA9IHJnYkEgKiAwLjUgKyAwLjI1ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogLTAuNSkueHl6ICtcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqIDAuNSkueHl6KTtcXG5cXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QocmdiQiwgbHVtYSk7XFxuICAgIGlmICgobHVtYUIgPCBsdW1hTWluKSB8fCAobHVtYUIgPiBsdW1hTWF4KSlcXG4gICAgICAgIGNvbG9yID0gdmVjNChyZ2JBLCB0ZXhDb2xvci5hKTtcXG4gICAgZWxzZVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkIsIHRleENvbG9yLmEpO1xcbiAgICByZXR1cm4gY29sb3I7XFxufVxcblxcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBmeGFhKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICogdlJlc29sdXRpb24sIHZSZXNvbHV0aW9uLCB2X3JnYk5XLCB2X3JnYk5FLCB2X3JnYlNXLCB2X3JnYlNFLCB2X3JnYk0pO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxufVxuXG5GWEFBRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkZYQUFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRlhBQUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRlhBQUZpbHRlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICovXG5GWEFBRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIoIHJlbmRlcmVyICk7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG4iLCJ2YXIgQWJzdHJhY3RGaWx0ZXIgPSByZXF1aXJlKCcuL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgU3ByaXRlTWFza0ZpbHRlciBjbGFzc1xuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICovXG5mdW5jdGlvbiBTcHJpdGVNYXNrRmlsdGVyKHNwcml0ZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXNrQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICAgdk1hc2tDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIC8vIGNoZWNrIGNsaXAhIHRoaXMgd2lsbCBzdG9wIHRoZSBtYXNrIGJsZWVkaW5nIG91dCBmcm9tIHRoZSBlZGdlc1xcbiAgICB2ZWMyIHRleHQgPSBhYnMoIHZNYXNrQ29vcmQgLSAwLjUgKTtcXG4gICAgdGV4dCA9IHN0ZXAoMC41LCB0ZXh0KTtcXG4gICAgZmxvYXQgY2xpcCA9IDEuMCAtIG1heCh0ZXh0LnksIHRleHQueCk7XFxuICAgIHZlYzQgb3JpZ2luYWwgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgICB2ZWM0IG1hc2t5ID0gdGV4dHVyZTJEKG1hc2ssIHZNYXNrQ29vcmQpO1xcbiAgICBvcmlnaW5hbCAqPSAobWFza3kuciAqIG1hc2t5LmEgKiBhbHBoYSAqIGNsaXApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBvcmlnaW5hbDtcXG59XFxuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hc2s6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLl90ZXh0dXJlIH0sXG4gICAgICAgICAgICBhbHBoYTogICAgICAgICAgeyB0eXBlOiAnZicsIHZhbHVlOiAxfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG59XG5cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVNYXNrRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVNYXNrRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS5fdGV4dHVyZTtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS53b3JsZEFscGhhO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHVzZWQgdG8gbW92ZSB0aGUgZGlzcGxhY2VtZW50IG1hcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlTWFza0ZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHbE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQmxlbmRNb2RlTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59XG5cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmRNb2RlTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxlbmRNb2RlTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzLXVwIHRoZSBnaXZlbiBibGVuZE1vZGUgZnJvbSBXZWJHTCdzIHBvaW50IG9mIHZpZXcuXG4gKlxuICogQHBhcmFtIGJsZW5kTW9kZSB7bnVtYmVyfSB0aGUgYmxlbmRNb2RlLCBzaG91bGQgYmUgYSBQaXhpIGNvbnN0LCBzdWNoIGFzIGBQSVhJLkJMRU5EX01PREVTLkFERGAuIFNlZVxuICogIHtAbGluayBQSVhJLkJMRU5EX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICovXG5CbGVuZE1vZGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRCbGVuZE1vZGUgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPT09IGJsZW5kTW9kZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMucmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmN1cnJlbnRCbGVuZE1vZGVdO1xuICAgIHRoaXMucmVuZGVyZXIuZ2wuYmxlbmRGdW5jKG1vZGVbMF0sIG1vZGVbMV0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpLFxuICAgIFF1YWQgPSByZXF1aXJlKCcuLi91dGlscy9RdWFkJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gRmlsdGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW107XG5cbiAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICByZW5kZXJUYXJnZXQ6cmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldCxcbiAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICBib3VuZHM6bnVsbFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgLy8gbGlzdGVuIGZvciBjb250ZXh0IGFuZCB1cGRhdGUgbmVjZXNzYXJ5IGJ1ZmZlcnNcbiAgICAvL1RPRE8gbWFrZSB0aGlzIGR5bmFtaWMhXG4gICAgLy9UT0RPIHRlc3QgdGhpcyBvdXQgYnkgZm9yY2VzIHBvd2VyIG9mIHR3bz9cbiAgICB0aGlzLnRleHR1cmVTaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZnJhbWVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcbn1cblxuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWx0ZXJNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBGaWx0ZXJNYW5hZ2VyO1xuXG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnF1YWQgPSBuZXcgUXVhZChnbCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHBhcmFtIGJ1ZmZlciB7QXJyYXlCdWZmZXJ9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnNldEZpbHRlclN0YWNrID0gZnVuY3Rpb24gKCBmaWx0ZXJTdGFjayApXG57XG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IGZpbHRlclN0YWNrO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXIgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBmaWx0ZXJzIHtQSVhJLkFic3RyYWN0RmlsZXJbXX0gdGhlIGZpbHRlcnMgdGhhdCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2tcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucHVzaEZpbHRlciA9IGZ1bmN0aW9uICh0YXJnZXQsIGZpbHRlcnMpXG57XG4gICAgLy8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdC4uXG4gICAgLy8gVE9ETyByZXBsYWNlIGNsb25lIHdpdGggYSBjb3B5IHRvIHNhdmUgb2JqZWN0IGNyZWF0aW9uXG4gICAgdmFyIGJvdW5kcyA9IHRhcmdldC5maWx0ZXJBcmVhID8gdGFyZ2V0LmZpbHRlckFyZWEuY2xvbmUoKSA6IHRhcmdldC5nZXRCb3VuZHMoKTtcblxuICAgIC8vYm91bmRzID0gYm91bmRzLmNsb25lKCk7XG5cbiAgICAvLyByb3VuZCBvZmYgdGhlIHJlY3RhbmdsZSB0byBnZXQgYSBuaWNlIHNtb29vb29vb3RoIGZpbHRlciA6KVxuICAgIGJvdW5kcy54ID0gYm91bmRzLnggfCAwO1xuICAgIGJvdW5kcy55ID0gYm91bmRzLnkgfCAwO1xuICAgIGJvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCB8IDA7XG4gICAgYm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgfCAwO1xuXG5cbiAgICAvLyBwYWRkaW5nIVxuICAgIHZhciBwYWRkaW5nID0gZmlsdGVyc1swXS5wYWRkaW5nIHwgMDtcbiAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG5cblxuICAgIGlmKHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvL1RPRE8gdGhpcyB3aWxsIGJyZWFrIGlmIHRoZSByZW5kZXJUZXh0dXJlIHRyYW5zZm9ybSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgdHJhbnNsYXRpb24uXG4gICAgICAgIC8vV2lsbCBuZWVkIHRvIHRha2UgdGhlIGZ1bGwgbWF0cml4IHRyYW5zZm9ybSBpbnRvIGFjb3VudC4uXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQudHJhbnNmb3JtO1xuXG4gICAgICAgIGJvdW5kcy54ICs9IHRyYW5zZm9ybS50eDtcbiAgICAgICAgYm91bmRzLnkgKz0gdHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG5cbiAgICAgICAgYm91bmRzLnggLT0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSAtPSB0cmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgICB0aGlzLmNhcEZpbHRlckFyZWEoIGJvdW5kcyApO1xuICAgIH1cblxuICAgIGlmKGJvdW5kcy53aWR0aCA+IDAgJiYgYm91bmRzLmhlaWdodCA+IDApXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGJvdW5kcztcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGV4dHVyZSk7XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRleHR1cmUuLlxuICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gVE9ETyBnZXQgcmlkIG9mIG9iamVjdCBjcmVhdGlvbiFcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogdGV4dHVyZSxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBwdXNoIHNvbXRoaW5nIG9uIHRvIHRoZSBzdGFjayB0aGF0IGlzIGVtcHR5XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcnNcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnBvcEZpbHRlciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrLnBvcCgpO1xuICAgIHZhciBwcmV2aW91c0ZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrW3RoaXMuZmlsdGVyU3RhY2subGVuZ3RoLTFdO1xuXG4gICAgdmFyIGlucHV0ID0gZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyBpZiB0aGUgcmVuZGVyVGFyZ2V0IGlzIG51bGwgdGhlbiB3ZSBkb24ndCBhcHBseSB0aGUgZmlsdGVyIGFzIGl0cyBvZmZzY3JlZW5cbiAgICBpZighZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IHByZXZpb3VzRmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyB1c2UgcHJvZ3JhbVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaW5wdXQuZnJhbWU7XG5cbiAgICB0aGlzLnF1YWQubWFwKHRoaXMudGV4dHVyZVNpemUsIGlucHV0LmZyYW1lKTtcblxuXG4gICAgLy8gVE9ETy4uIHRoaXMgcHJvYmFibHkgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgZmlsdGVycyA9IGZpbHRlckRhdGEuZmlsdGVyO1xuXG4gICAgLy8gYXNzdW1pbmcgYWxsIGZpbHRlcnMgZm9sbG93IHRoZSBjb3JyZWN0IGZvcm1hdD8/XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAyICogNCAqIDQpO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIG5vcm1hbCBibGVuZG1vZGUhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShDT05TVC5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAxKVxuICAgIHtcbiAgICAgICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoZW4gc2V0dGluZyB0aGlzIGVhY2ggdGltZT9cbiAgICAgICAgaWYgKGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgIGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1swXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgaW5wdXQsIG91dHB1dCApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggaW5wdXQgKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZmxpcFRleHR1cmUgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3BUZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aC0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICAgICAgaWYgKGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBmbG9wVGV4dHVyZSApO1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGZsaXBUZXh0dXJlO1xuICAgICAgICAgICAgZmxpcFRleHR1cmUgPSBmbG9wVGV4dHVyZTtcbiAgICAgICAgICAgIGZsb3BUZXh0dXJlID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlcnNbZmlsdGVycy5sZW5ndGgtMV0uYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBvdXRwdXQgKTtcblxuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxpcFRleHR1cmUgKTtcbiAgICAgICAgdGhpcy5yZXR1cm5SZW5kZXJUYXJnZXQoIGZsb3BUZXh0dXJlICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckRhdGEuZmlsdGVyO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY2xlYXIgdGhlIFJlbmRlclRhcmdldFxuICogQHJldHVybiB7UmVuZGVyVGFyZ2V0fVxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIGNsZWFyIClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy50ZXh0dXJlUG9vbC5wb3AoKSB8fCBuZXcgUmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyZXIuZ2wsIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0LCBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiAqIENPTlNULkZJTFRFUl9SRVNPTFVUSU9OKTtcbiAgICByZW5kZXJUYXJnZXQuZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcih0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyVGFyZ2V0O1xufTtcblxuLypcbiAqIFJldHVybnMgYSBSZW5kZXJUYXJnZXQgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1JlbmRlclRhcmdldH0gVGhlIFJlbmRlclRhcmdldCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5SZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0KVxue1xuICAgIHRoaXMudGV4dHVyZVBvb2wucHVzaCggcmVuZGVyVGFyZ2V0ICk7XG59O1xuXG4vKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2hhZGVyIHtTaGFkZXJ9IFRoZSBzaGFkZXIgdG8gdXBsb2FkXG4gKiBAcGFyYW0gaW5wdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBjbGVhciB0aGUgb3V0cHV0VGFyZ2V0XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHNoYWRlciwgaW5wdXRUYXJnZXQsIG91dHB1dFRhcmdldCwgY2xlYXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG91dHB1dFRhcmdldCk7XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICBvdXRwdXRUYXJnZXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHNoYWRlclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gQ2FuIHRoaXMgYmUgY2FjaGVkIGFuZCBub3QgYHRvQXJyYXlgZWQgZWFjaCBmcmFtZT9cbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG5cbiAgICAvL1RPRE8gY2FuIHRoaXMgYmUgb3B0aW1pc2VkP1xuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcbi8qXG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcbiovXG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBpbnB1dFRhcmdldC50ZXh0dXJlKTtcblxuICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbn07XG5cbi8qXG4gKiBDYWxjdWxhdGVzIHRoZSBtYXBwZWQgbWF0cml4XG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWFcbiAqIEBwYXJhbSBzcHJpdGUge1Nwcml0ZX0gdGhlIHRhcmdldCBzcHJpdGVcbiAqIEBwYXJhbSBvdXRwdXRNYXRyaXgge01hdHJpeH0gQGFsdmluXG4gKi9cbi8vIFRPRE8gcGxheWluZyBhcm91bmQgaGVyZS4uIHRoaXMgaXMgdGVtcG9yYXJ5IC0gKHdpbGwgZW5kIHVwIGluIHRoZSBzaGFkZXIpXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jYWxjdWxhdGVNYXBwZWRNYXRyaXggPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSwgc3ByaXRlLCBvdXRwdXRNYXRyaXgpXG57XG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gc3ByaXRlLndvcmxkVHJhbnNmb3JtLmNvcHkobWF0aC5NYXRyaXguVEVNUF9NQVRSSVgpLFxuICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICB2YXIgbWFwcGVkTWF0cml4ID0gb3V0cHV0TWF0cml4LmlkZW50aXR5KCk7XG5cbiAgICAvLyBzY2FsZS4uXG4gICAgdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCApO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKDEgLCByYXRpbyk7XG5cbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyB0ZXh0dXJlLndpZHRoKTtcbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gdGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0udHggLz0gdGV4dHVyZS53aWR0aCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICB3b3JsZFRyYW5zZm9ybS50eSAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0uaW52ZXJ0KCk7XG5cbiAgICBtYXBwZWRNYXRyaXgucHJlcGVuZCh3b3JsZFRyYW5zZm9ybSk7XG5cbiAgICAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIG1hcHBlZE1hdHJpeC50cmFuc2xhdGUoc3ByaXRlLmFuY2hvci54LCBzcHJpdGUuYW5jaG9yLnkpO1xuXG4gICAgcmV0dXJuIG1hcHBlZE1hdHJpeDtcblxuICAgIC8vIEtlZXBpbmcgdGhlIG9yZ2luYWwgYXMgYSByZW1pbmRlciB0byBtZSBvbiBob3cgdGhpcyB3b3JrcyFcbiAgICAvL1xuICAgIC8vIHZhciBtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvLyAvLyBzY2FsZS4uXG4gICAgLy8gdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgLy8gbS50cmFuc2xhdGUoZmlsdGVyQXJlYS54IC8gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgZmlsdGVyQXJlYS55IC8gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQpO1xuXG5cbiAgICAvLyBtLnNjYWxlKDEgLCByYXRpbyk7XG5cblxuICAgIC8vIHZhciB0cmFuc2Zvcm0gPSB3dC5jbG9uZSgpO1xuXG4gICAgLy8gdmFyIHRyYW5zbGF0ZVNjYWxlWCA9ICh0aGlzLnRleHR1cmVTaXplLndpZHRoIC8gNjIwKTtcbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gMzgwKTtcblxuICAgIC8vIHRyYW5zZm9ybS50eCAvPSA2MjAgKiB0cmFuc2xhdGVTY2FsZVg7XG4gICAgLy8gdHJhbnNmb3JtLnR5IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcblxuICAgIC8vIHRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIC8vIHRyYW5zZm9ybS5hcHBlbmQobSk7XG5cbiAgICAvLyAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgLy8gdHJhbnNmb3JtLnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIC8vIHJldHVybiB0cmFuc2Zvcm07XG59O1xuXG4vKlxuICogQ29uc3RyYWlucyB0aGUgZmlsdGVyIGFyZWEgdG8gdGhlIHRleHR1cmUgc2l6ZVxuICogQHBhcmFtIGZpbHRlckFyZWEge1JlY3RhbmdsZX0gVGhlIGZpbHRlciBhcmVhIHdlIHdhbnQgdG8gY2FwXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhcEZpbHRlckFyZWEgPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSlcbntcbiAgICBpZiAoZmlsdGVyQXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEud2lkdGggKz0gZmlsdGVyQXJlYS54O1xuICAgICAgICBmaWx0ZXJBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgKz0gZmlsdGVyQXJlYS55O1xuICAgICAgICBmaWx0ZXJBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggZmlsdGVyQXJlYS54ICsgZmlsdGVyQXJlYS53aWR0aCA+IHRoaXMudGV4dHVyZVNpemUud2lkdGggKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCA9IHRoaXMudGV4dHVyZVNpemUud2lkdGggLSBmaWx0ZXJBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnkgKyBmaWx0ZXJBcmVhLmhlaWdodCA+IHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLSBmaWx0ZXJBcmVhLnk7XG4gICAgfVxufTtcblxuLypcbiAqIFJlc2l6ZXMgYWxsIHRoZSByZW5kZXIgdGFyZ2V0cyBpbiB0aGUgcG9vbFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLnRleHR1cmVTaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLnJlc2l6ZSggd2lkdGgsIGhlaWdodCApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGZpbHRlciBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBmaWx0ZXIgc3RhY2suXG4gKlxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnF1YWQuZGVzdHJveSgpO1xuICAgIFxuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBudWxsO1xuICAgIHRoaXMub2Zmc2V0WSA9IDA7XG5cbiAgICAvLyBkZXN0cm95IHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHR1cmVQb29sLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlUG9vbCA9IG51bGw7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgQWxwaGFNYXNrRmlsdGVyID0gcmVxdWlyZSgnLi4vZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNYXNrTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICB0aGlzLmFscGhhTWFza1Bvb2wgPSBbXTtcbn1cblxuTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hc2tNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgaWYgKG1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBtYXNrIGZyb20gdGhlIG1hc2sgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucG9wU3ByaXRlTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTcHJpdGVNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdmFyIGFscGhhTWFza0ZpbHRlciA9IHRoaXMuYWxwaGFNYXNrUG9vbC5wb3AoKTtcblxuICAgIGlmICghYWxwaGFNYXNrRmlsdGVyKVxuICAgIHtcbiAgICAgICAgYWxwaGFNYXNrRmlsdGVyID0gW25ldyBBbHBoYU1hc2tGaWx0ZXIobWFza0RhdGEpXTtcbiAgICB9XG5cbiAgICBhbHBoYU1hc2tGaWx0ZXJbMF0ubWFza1Nwcml0ZSA9IG1hc2tEYXRhO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRhcmdldCwgYWxwaGFNYXNrRmlsdGVyKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKi9cbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTcHJpdGVNYXNrID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVycyA9IHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbC5wdXNoKGZpbHRlcnMpO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTdGVuY2lsTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaE1hc2sobWFza0RhdGEpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BNYXNrKG1hc2tEYXRhKTtcbn07XG5cbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1RleHR1cmVTaGFkZXInKSxcbiAgICBDb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhBdHRpYnMgPSAxMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG5cbi8vICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcbn1cblxuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaGFkZXJNYW5hZ2VyO1xudXRpbHMucGx1Z2luVGFyZ2V0Lm1peGluKFNoYWRlck1hbmFnZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlck1hbmFnZXI7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cblNoYWRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlIGNvcnJlY3RseSBhcyB0aGlzIHRlbmRzIHRvIHZhcnlcbiAgICB0aGlzLm1heEF0dGlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xuXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1heEF0dGliczsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRPRE8gLSBXaHkgYXJlIHRoZXNlIG5vdCBwbHVnaW5zPyBXZSBjYW4ndCBkZWNvdXBsZSBwcmltaXRpdmVzIHVubGVzcyB0aGV5IGFyZS4uLi5cbiAgICB0aGlzLmRlZmF1bHRTaGFkZXIgPSBuZXcgVGV4dHVyZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcyk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbmV3IENvbXBsZXhQcmltaXRpdmVTaGFkZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFRha2VzIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHBhcmFtZXRlcnMgYW5kIHVwbG9hZHMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXR0cmlicyB7YW55W119IGF0dHJpYnNcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0QXR0cmlicyA9IGZ1bmN0aW9uIChhdHRyaWJzKVxue1xuICAgIC8vIHJlc2V0IHRlbXAgc3RhdGVcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRlbXBBdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAodmFyIGEgaW4gYXR0cmlicylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbYV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSAhPT0gdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHNoYWRlci5cbiAqXG4gKiBAcGFyYW0gc2hhZGVyIHtQSVhJLlNoYWRlcn0gdGhlIHNoYWRlciB0byB1cGxvYWRcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0U2hhZGVyID0gZnVuY3Rpb24gKHNoYWRlcilcbntcbiAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRJZCA9PT0gc2hhZGVyLnVpZClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50SWQgPSBzaGFkZXIudWlkO1xuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5nbC51c2VQcm9ncmFtKHNoYWRlci5wcm9ncmFtKTtcbiAgICB0aGlzLnNldEF0dHJpYnMoc2hhZGVyLmF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0LlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBXZWJHTE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBudWxsO1xufVxuXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFza01hbmFnZXI7XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgbWFzayBzdGFjayB0aGF0IGlzIHVzZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICpcbiAqIEBwYXJhbSBzdGVuY2lsTWFza1N0YWNrIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9IFRoZSBtYXNrIHN0YWNrXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnNldE1hc2tTdGFjayA9IGZ1bmN0aW9uICggc3RlbmNpbE1hc2tTdGFjayApXG57XG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBpZiAoc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLiBAYWx2aW5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWwgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQuYXR0YWNoU3RlbmNpbEJ1ZmZlcigpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICBpZiAoc21zLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgZ2wuY2xlYXIoZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTtcbiAgICAgICAgc21zLnJldmVyc2UgPSB0cnVlO1xuICAgICAgICBzbXMuY291bnQgPSAwO1xuICAgIH1cblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucHVzaCh3ZWJHTERhdGEpO1xuXG4gICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5WRVJUKTtcblxuICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgIGlmIChzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgIH1cblxuICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSBsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLktFRVApO1xuXG4gICAgc21zLmNvdW50Kys7XG59O1xuXG4vKipcbiAqIFRPRE8gdGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSFcbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuYmluZEdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgLy9pZiAodGhpcy5fY3VycmVudEdyYXBoaWNzID09PSBncmFwaGljcylyZXR1cm47XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBiaW5kIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0zZnYoc2hhZGVyLnVuaWZvcm1zLmNvbG9yLl9sb2NhdGlvbiwgd2ViR0xEYXRhLmNvbG9yKTtcblxuICAgICAgICBnbC51bmlmb3JtMWYoc2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSk7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDQgKiAyLCAwKTtcblxuICAgICAgICAvLyBub3cgZG8gdGhlIHJlc3QuLlxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAqL1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvL3RoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5hY3RpdmF0ZVByaW1pdGl2ZVNoYWRlcigpO1xuLy8gICAgICAgIHNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wcmltaXRpdmVTaGFkZXI7XG4gICAgICAgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG5cbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuLy8gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuXG4gICAgICAvKiAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7Ki9cbiAgICB9XG59O1xuXG4vKipcbiAqIFRPRE8gQGFsdmluXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIHNtcyA9IHRoaXMuc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucG9wKCk7XG5cbiAgICBzbXMuY291bnQtLTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIC8vIHRoZSBzdGFjayBpcyBlbXB0eSFcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgICAgIHRoaXMuYmluZEdyYXBoaWNzKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcblxuICAgICAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRyYXcgYSBxdWFkIHRvIGluY3JlbWVudC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgICAgICAgICAvLyBkcmF3IHRoZSB0cmlhbmdsZSBzdHJpcCFcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCArPSAyO1xuXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKSwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgLy8gIGNvbnNvbGUubG9nKFwiPDw+PlwiKVxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIChsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cblxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIG1hc2sgc3RhY2suXG4gKlxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2sgPSBudWxsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfSBUaGUgbWFzayBkYXRhIHN0cnVjdHVyZSB0byB1c2VcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIFxuICAgIC8vVE9ETyBGSVhcbiAgICBpZiAobWFza0RhdGEuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MudXBkYXRlR3JhcGhpY3MobWFza0RhdGEsIHRoaXMucmVuZGVyZXIuZ2wpO1xuICAgIH1cblxuICAgIGlmICghbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFN0ZW5jaWwobWFza0RhdGEsIG1hc2tEYXRhLl93ZWJHTFt0aGlzLnJlbmRlcmVyLmdsLmlkXS5kYXRhWzBdKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIodGhpcy5yZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcblxuICAgIHRoaXMucG9wU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuIiwiLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLm9uKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xufVxuXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTE1hbmFnZXI7XG5cbi8qKlxuICogR2VuZXJpYyBtZXRob2QgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbldlYkdMTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblx0Ly8gZG8gc29tZSBjb2RlcyBpbml0IVxufTtcblxuLyoqXG4gKiBHZW5lcmljIGRlc3Ryb3kgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlbmRlcmVyLm9mZignY29udGV4dCcsIHRoaXMub25Db250ZXh0Q2hhbmdlLCB0aGlzKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCcuL1NoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBjb21wbGV4IHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQ29tcGxleFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyBjb2xvcjsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoY29sb3IgKiBhbHBoYSAqIHRpbnQsIGFscGhhKTsnLC8vXCIgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIGNvbG9yOiAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsMCwwXSB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB0aW50OiAgIHsgdHlwZTogJzNmJywgdmFsdWU6IFswLCAwLCAwXSB9LFxuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFDb2xvcjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQmFzZSBzaGFkZXIgY2xhc3MgZm9yIFBJWEkgbWFuYWdlZCBzaGFkZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbdW5pZm9ybXNdIHtvYmplY3R9IFVuaWZvcm1zIGZvciB0aGlzIHNoYWRlci5cbiAqIEBwYXJhbSBbYXR0cmlidXRlc10ge29iamVjdH0gQXR0cmlidXRlcyBmb3IgdGhpcyBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIFNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcylcbntcbiAgICBpZiAoIXZlcnRleFNyYyB8fCAhZnJhZ21lbnRTcmMpXG4gICAge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXhpLmpzIEVycm9yLiBTaGFkZXIgcmVxdWlyZXMgdmVydGV4U3JjIGFuZCBmcmFnbWVudFNyYycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5nbCA9IHNoYWRlck1hbmFnZXIucmVuZGVyZXIuZ2w7XG5cbiAgICAvL1RPRE8gbWF5YmUgd2Ugc2hvdWxkIHBhc3MgcmVuZGVyZXIgcmF0aGVyIHRoYW4gc2hhZGVyIG1hbmdlcj8/IGZvb2QgZm9yIHRob3VnaHQuLlxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IHNoYWRlck1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgcHJvZ3JhbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUHJvZ3JhbX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaWZvcm1zIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhdHRyaWJ1dGVzIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50ZXJcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlciBhcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmM7XG5cbiAgICB0aGlzLmluaXQoKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHNoYWRlciBhbmQgdXNlcyBpdFxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbXBpbGUoKTtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy51bmlmb3JtcykpO1xuICAgIHRoaXMuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKSk7XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSB1bmlmb3JtIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgdW5pZm9ybXMgdG8gY2FjaGVcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnVuaWZvcm1zW2tleXNbaV1dLl9sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWNoZXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgYXR0cmlidXRlIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgYXR0cmlidXRlcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlQXR0cmlidXRlTG9jYXRpb25zID0gZnVuY3Rpb24gKGtleXMpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleXNbaV1dID0gdGhpcy5nbC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGtleXNbaV0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgbmVlZGVkIGFueW1vcmUuLi5cblxuICAgIC8vIEJlZ2luIHdvcnN0IGhhY2sgZXZhIC8vXG5cbiAgICAvLyBXSFk/Pz8gT05MWSBvbiBteSBjaHJvbWUgcGl4ZWwgdGhlIGxpbmUgYWJvdmUgcmV0dXJucyAtMSB3aGVuIHVzaW5nIGZpbHRlcnM/XG4gICAgLy8gbWF5YmUgaXRzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnbCBjb250ZXh0LlxuICAgIC8vIEknbSBjb252aW5jZWQgdGhpcyBpcyBhIGJ1ZyBpbiB0aGUgY2hyb21lIGJyb3dzZXIgYXMgdGhlcmUgaXMgTk8gcmVhc29uIHdoeSB0aGlzIHNob3VsZCBiZSByZXR1cm5pbmcgLTEgZXNwZWNpYWxseSBhcyBpdCBvbmx5IG1hbmlmZXN0cyBvbiBteSBjaHJvbWUgcGl4ZWxcbiAgICAvLyBJZiB0aGVyZXMgYW55IHdlYkdMIHBlb3BsZSB0aGF0IGtub3cgd2h5IGNvdWxkIGhhcHBlbiBwbGVhc2UgaGVscCA6KVxuICAgIC8vIGlmICh0aGlzLmF0dHJpYnV0ZXMuYUNvbG9yID09PSAtMSl7XG4gICAgLy8gICAgIHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPSAyO1xuICAgIC8vIH1cblxuICAgIC8vIEVuZCB3b3JzdCBoYWNrIGV2YSAvL1xufTtcblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQgY3JlYXRlcyB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19XG4gKi9cblNoYWRlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHZhciBnbFZlcnRTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuVkVSVEVYX1NIQURFUiwgdGhpcy52ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuRlJBR01FTlRfU0hBREVSLCB0aGlzLmZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuICh0aGlzLnByb2dyYW0gPSBwcm9ncmFtKTtcbn07XG5cbi8qKlxuKiBBZGRzIGEgbmV3IHVuaWZvcm1cbipcbiogQHBhcmFtIHVuaWZvcm0ge29iamVjdH0gdGhlIG5ldyB1bmlmb3JtIHRvIGF0dGFjaFxuKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgbG9jYXRpb24gPSB1bmlmb3JtLl9sb2NhdGlvbixcbiAgICAgICAgdmFsdWUgPSB1bmlmb3JtLnZhbHVlLFxuICAgICAgICBnbCA9IHRoaXMuZ2wsXG4gICAgICAgIGksIGlsO1xuXG4gICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIHNpbmdsZSBpbnQgdmFsdWVcbiAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGZsb2F0IHZhbHVlXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBjYXNlICcxZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSgyKSBvciBKUyBBcnJyYXlcbiAgICAgICAgY2FzZSAnMmYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDMpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICczZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDQpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgMkQgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YyJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDNEIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2Myc6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSA0RCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjQnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMWl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMml2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnNGl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20yJzpcbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgIGNhc2UgJ01hdHJpeDJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB1bmlmb3JtLnRyYW5zcG9zZSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20zJzpcbiAgICAgICAgY2FzZSAnbWF0Myc6XG4gICAgICAgIGNhc2UgJ01hdHJpeDNmdic6XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICBjYXNlICdtYXQ0JzpcbiAgICAgICAgY2FzZSAnTWF0cml4NGZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIENvbG9yIFZhbHVlXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgaW50ZWdlcnMgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdjEnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAyRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yydic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgyICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAyXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDIgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYXJyYXkgb2YgM0QgUG9pbnQgb2JqZWN0c1xuICAgICAgICBjYXNlICd2M3YnOlxuICAgICAgICAgICAgaWYgKCF1bmlmb3JtLl9hcnJheSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMyAqIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlsID0gdmFsdWUubGVuZ3RoOyBpIDwgaWw7ICsraSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogM10gICAgICAgPSB2YWx1ZVtpXS54O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzICsgMV0gICA9IHZhbHVlW2ldLnk7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAyXSAgID0gdmFsdWVbaV0uejtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiA0RCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Y0dic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg0ICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0XSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDJdICAgPSB2YWx1ZVtpXS56O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgM10gICA9IHZhbHVlW2ldLnc7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gUElYSS5UZXh0dXJlXG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuXG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUgfHwgIXVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGlzIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xbJ1RFWFRVUkUnICsgdGhpcy50ZXh0dXJlQ291bnRdKTtcblxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXTtcblxuICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdGV4dHVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9uZS4uXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgICAgICAgICAgLy8gc2V0IHVuaWZvcm0gdG8gdGV4dHVyZSBpbmRleFxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0uX2xvY2F0aW9uLCB0aGlzLnRleHR1cmVDb3VudCk7XG5cbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBuZXh0IHRleHR1cmUgaWRcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgU2hhZGVyIFdhcm5pbmc6IFVua25vd24gdW5pZm9ybSB0eXBlOiAnICsgdW5pZm9ybS50eXBlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNoYWRlciB1bmlmb3JtIHZhbHVlcy5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm1zID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy51bmlmb3JtcylcbiAgICB7XG4gICAgICAgIHRoaXMuc3luY1VuaWZvcm0odGhpcy51bmlmb3Jtc1trZXldKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSW5pdGlhbGlzZXMgYSBTYW1wbGVyMkQgdW5pZm9ybSAod2hpY2ggbWF5IG9ubHkgYmUgYXZhaWxhYmxlIGxhdGVyIG9uIGFmdGVyIGluaXRVbmlmb3JtcyBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBsb2FkZWQpXG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXRTYW1wbGVyMkQgPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbiAgICBpZiAodW5pZm9ybS50ZXh0dXJlRGF0YSlcbiAgICB7XG5cbiAgICAgICAgLy9UT0RPIG1vdmUgdGhpcy4uLlxuICAgICAgICB2YXIgZGF0YSA9IHVuaWZvcm0udGV4dHVyZURhdGE7XG5cbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuXG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBsaWVkQWxwaGEpO1xuICAgICAgICAvLyBHTFRleHR1cmUgPSBtYWcgbGluZWFyLCBtaW4gbGluZWFyX21pcG1hcF9saW5lYXIsIHdyYXAgcmVwZWF0ICsgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIC8vIEdMVGV4dHVyZUxpbmVhciA9IG1hZy9taW4gbGluZWFyLCB3cmFwIGNsYW1wXG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3RSZXBlYXQgPSBtYWcvbWluIE5FQVJFU1QsIHdyYXAgcmVwZWF0XG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3QgPSBtYWcvbWluIG5lYXJlc3QsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gQXVkaW9UZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCA1MTIsIGhlaWdodCAyLCBib3JkZXIgMFxuICAgICAgICAvLyBLZXlUZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCAyNTYsIGhlaWdodCAyLCBib3JkZXIgMFxuXG4gICAgICAgIC8vICBtYWdGaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcbiAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxuXG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZGF0YS5sdW1pbmFuY2UgPyBnbC5MVU1JTkFOQ0UgOiBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLnNvdXJjZSk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGRhdGEubWFnRmlsdGVyID8gZGF0YS5tYWdGaWx0ZXIgOiBnbC5MSU5FQVIgKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSApO1xuXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGRhdGEud3JhcFQgPyBkYXRhLndyYXBUIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyTWFuYWdlci5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHNoYWRlci5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5nbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmdsID0gbnVsbDtcbiAgICB0aGlzLnVuaWZvcm1zID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSBudWxsO1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBudWxsO1xufTtcblxuU2hhZGVyLnByb3RvdHlwZS5fZ2xDb21waWxlID0gZnVuY3Rpb24gKHR5cGUsIHNyYylcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICB0aGlzLmdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgdGhpcy5nbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cbiAgICBpZiAoIXRoaXMuZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgdGhpcy5nbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCBjdXN0b21Vbmlmb3JtcywgY3VzdG9tQXR0cmlidXRlcylcbntcbiAgICB2YXIgdW5pZm9ybXMgPSB7XG5cbiAgICAgICAgdVNhbXBsZXI6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogMCB9LFxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxXSkgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVW5pZm9ybXMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciB1IGluIGN1c3RvbVVuaWZvcm1zKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bmlmb3Jtc1t1XSA9IGN1c3RvbVVuaWZvcm1zW3VdO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgYVZlcnRleFBvc2l0aW9uOiAgICAwLFxuICAgICAgICBhVGV4dHVyZUNvb3JkOiAgICAgIDAsXG4gICAgICAgIGFDb2xvcjogICAgICAgICAgICAgMFxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tQXR0cmlidXRlcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGEgaW4gY3VzdG9tQXR0cmlidXRlcylcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlc1thXSA9IGN1c3RvbUF0dHJpYnV0ZXNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYWdtZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IFRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgU2hhZGVyLmNhbGwodGhpcywgc2hhZGVyTWFuYWdlciwgdmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihnbClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7Ly8sIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKTtcblxufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi4vbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQmFzZSBmb3IgYSBjb21tb24gb2JqZWN0IHJlbmRlcmVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzeXN0ZW0gcmVuZGVyZXIgcGx1Z2luLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gT2JqZWN0UmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufVxuXG5cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYmplY3RSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0UmVuZGVyZXI7XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZW5kZXJlciBhbmQgc2V0cyB0aGUgc2hhZGVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIHNldCB0aGUgc2hhZGVyLi5cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHJlbmRlcmVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xufTtcblxuLyoqXG4gKiBmbHVzaGVzXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIGZsdXNoIVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gcmVuZGVyIHRoZSBvYmplY3Rcbn07XG4iLCIvKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSBxdWFkXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFRoZSBnbCBjb250ZXh0IGZvciB0aGlzIHF1YWQgdG8gdXNlLlxuICovXG5mdW5jdGlvbiBRdWFkKGdsKVxue1xuICAgIC8qXG4gICAgICogdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4vLyAgICB0aGlzLnRleHR1cmVzID0gbmV3IFRleHR1cmVVdnMoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAwLDAsXG4gICAgICAgIDIwMCwwLFxuICAgICAgICAyMDAsMjAwLFxuICAgICAgICAwLDIwMFxuICAgIF0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgcXVhZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMSwwLFxuICAgICAgICAxLDEsXG4gICAgICAgIDAsMVxuICAgIF0pO1xuXG4vLyAgICB2YXIgd2hpdGUgPSAoMHhGRkZGRkYgPj4gMTYpICsgKDB4RkZGRkZGICYgMHhmZjAwKSArICgoMHhGRkZGRkYgJiAweGZmKSA8PCAxNikgKyAoMSAqIDI1NSA8PCAyNCk7XG4gICAgLy9UT0RPIGNvbnZlcnQgdGhpcyB0byBhIDMyIHVuc2lnbmVkIGludCBhcnJheVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBjb21wb25lbnRzIG9mIHRoZSB0cmlhbmdsZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxXG4gICAgXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbXG4gICAgICAgIDAsIDEsIDIsIDAsIDMsIDJcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSB2ZXJ0ZXggYnVmZmVyXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSBpbmRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDggKyAxNikgKiA0LCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnVwbG9hZCgpO1xufVxuXG5RdWFkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFF1YWQ7XG5cbi8qKlxuICogTWFwcyB0d28gUmVjdGFuZ2xlIHRvIHRoZSBxdWFkXG4gKiBAcGFyYW0gcmVjdCB7UElYSS5SZWN0YW5nbGV9IHRoZSBmaXJzdCByZWN0YW5nbGVcbiAqIEBwYXJhbSByZWN0MiB7UElYSS5SZWN0YW5nbGV9IHRoZSBzZWNvbmQgcmVjdGFuZ2xlXG4gKi9cblF1YWQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKHJlY3QsIHJlY3QyKVxue1xuICAgIHZhciB4ID0gMDsgLy9yZWN0Mi54IC8gcmVjdC53aWR0aDtcbiAgICB2YXIgeSA9IDA7IC8vcmVjdDIueSAvIHJlY3QuaGVpZ2h0O1xuXG4gICAgdGhpcy51dnNbMF0gPSB4O1xuICAgIHRoaXMudXZzWzFdID0geTtcblxuICAgIHRoaXMudXZzWzJdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1szXSA9IHk7XG5cbiAgICB0aGlzLnV2c1s0XSA9IHggKyByZWN0Mi53aWR0aCAvIHJlY3Qud2lkdGg7XG4gICAgdGhpcy51dnNbNV0gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1s2XSA9IHg7XG4gICAgdGhpcy51dnNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICAvLy8gLS0tLS1cbiAgICB4ID0gcmVjdDIueDtcbiAgICB5ID0gcmVjdDIueTtcblxuICAgIHRoaXMudmVydGljZXNbMF0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbMV0gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1syXSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzNdID0geTtcblxuICAgIHRoaXMudmVydGljZXNbNF0gPSB4ICsgcmVjdDIud2lkdGg7XG4gICAgdGhpcy52ZXJ0aWNlc1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQ7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzZdID0geDtcbiAgICB0aGlzLnZlcnRpY2VzWzddID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXIgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuUXVhZC5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvLyBUT0RPIGNvdWxkIHByb2JhYmx5IGJlIHB1c2hlZCBpbnRvIG9uZSB1cGxvYWQhXG4gICAgZ2wuYmluZEJ1ZmZlciggZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlciApO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMudmVydGljZXMpO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDggKiA0LCB0aGlzLnV2cyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgKDggKyA4KSAqIDQsIHRoaXMuY29sb3JzKTtcbn07XG5cblF1YWQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xuXG5cbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgICAgIFxuICAgIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcbiAgICBHTEZyYW1lYnVmZmVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xGcmFtZWJ1ZmZlcixcbiAgICBcbiAgICBTdGVuY2lsTWFza1N0YWNrID0gcmVxdWlyZSgnLi9TdGVuY2lsTWFza1N0YWNrJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIGhvcml6b250YWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgdmVydGljYWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAqIEBwYXJhbSByb290IHtib29sZWFufSBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gKi9cbnZhciBSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uLCByb290KVxue1xuICAgIC8vVE9ETyBSZXNvbHV0aW9uIGNvdWxkIGdvIGhlcmUgKCBlZyBsb3cgcmVzIGJsdXJzIClcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvLyBuZXh0IHRpbWUgdG8gY3JlYXRlIGEgZnJhbWUgYnVmZmVyIGFuZCB0ZXh0dXJlXG5cbiAgICAvKipcbiAgICAgKiBBIGZyYW1lIGJ1ZmZlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xGcmFtZUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJDb2xvciA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBvYmplY3QgYXMgYSByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9iamVjdCdzIHRyYW5zZm9ybVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5mcmFtZSA9IG51bGw7XG4gICAgXG4gICAgdGhpcy5kZWZhdWx0RnJhbWUgPSBuZXcgUElYSS5SZWN0YW5nbGUoKTtcbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBudWxsO1xuICAgIHRoaXMuc291cmNlRnJhbWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHN0ZW5jaWwgYnVmZmVyIHN0b3JlcyBtYXNraW5nIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlckJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgc3RlbmNpbCBtYXNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFza1N0YWNrfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG5ldyBTdGVuY2lsTWFza1N0YWNrKCk7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZXMgZmlsdGVyIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6dGhpcyxcbiAgICAgICAgICAgIGZpbHRlcjpbXSxcbiAgICAgICAgICAgIGJvdW5kczp0aGlzLnNpemVcbiAgICAgICAgfVxuICAgIF07XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVFxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gR0xGcmFtZWJ1ZmZlci5jcmVhdGVSR0JBKGdsLCAxMDAsIDEwMCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBBIGZyYW1lIGJ1ZmZlciBuZWVkcyBhIHRhcmdldCB0byByZW5kZXIgdG8uLlxuICAgICAgICAgICAgY3JlYXRlIGEgdGV4dHVyZSBhbmQgYmluZCBpdCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgICovXG4gICAgICAgIFxuXG4gICAgICAgLy8gVE9ETyBjaGFuZ2UhXG4gICAgICAgIC8vIHRoaXMgaXMgdXNlZCBieSB0aGUgYmFzZSB0ZXh0dXJlXG4gICAgICAgIHRoaXMudGV4dHVyZSA9IHRoaXMuZnJhbWVCdWZmZXIudGV4dHVyZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbWFrZSBpdCBhIG51bGwgZnJhbWVidWZmZXIuLlxuICAgICAgICB0aGlzLmZyYW1lQnVmZmVyLmZyYW1lYnVmZmVyID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn07XG5cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZW5kZXJUYXJnZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRhcmdldDtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpbHRlciB0ZXh0dXJlLlxuICpcbiAqIEBwYXJhbSBbYmluZD1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCB3ZSBiaW5kIG91ciBmcmFtZWJ1ZmZlciBiZWZvcmUgY2xlYXJpbmc/XG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbihjbGVhckNvbG9yKVxue1xuICAgIHZhciBjYyA9IGNsZWFyQ29sb3IgfHwgdGhpcy5jbGVhckNvbG9yXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5jbGVhcihjY1swXSxjY1sxXSxjY1syXSxjY1szXSkvL3IsZyxiLGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmF0dGFjaFN0ZW5jaWxCdWZmZXIgPSBmdW5jdGlvbigpXG57XG4gICAgLy9UT0RPIGNoZWNrIGlmIHN0ZW5jaWwgaXMgZG9uZT9cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgaXMgdXNlZCBmb3IgbWFza2luZyBpbiBwaXhpXG4gICAgICogbGV0cyBjcmVhdGUgb25lIGFuZCB0aGVuIGFkZCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgKi9cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZW5hYmxlU3RlbmNpbCgpO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXdwb3J0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIC8vVE9PRCByZWZhY3RvciB1c2FnZSBvZiBmcmFtZS4uXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIuYmluZCgpO1xuXG4gICAgdGhpcy5kZXN0aW5hdGlvbkZyYW1lID0gZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgfHwgdGhpcy5kZWZhdWx0RnJhbWU7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IHRoaXMuc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggdGhpcy5kZXN0aW5hdGlvbkZyYW1lLCB0aGlzLnNvdXJjZUZyYW1lICk7XG5cbiAgICBpZih0aGlzLnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5hcHBlbmQodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIGlmKHRoaXMuZGVzdGluYXRpb25GcmFtZSAhPT0gdGhpcy5zb3VyY2VGcmFtZSlcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgICAgICBnbC5zY2lzc29yKHRoaXMuZGVzdGluYXRpb25GcmFtZS54LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmRpc2FibGUoZ2wuU0NJU1NPUl9URVNUKTtcbiAgICB9XG5cblxuICAgIC8vIFRPRE8gLSBkb2VzIG5vdCBuZWVkIHRvIGJlIHVwZGF0ZWQgYWxsIHRoZSB0aW1lPz9cbiAgICBnbC52aWV3cG9ydCh0aGlzLmRlc3RpbmF0aW9uRnJhbWUueCx0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uKTtcblxuXG59O1xuXG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmFzZWQgb24gYSBwcm9qZWN0aW9uIGZyYW1lICh3aGljaCBpcyBhIHJlY3RhbmdsZSlcbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2FsY3VsYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbkZyYW1lLCBzb3VyY2VGcmFtZSlcbntcbiAgICB2YXIgcG0gPSB0aGlzLnByb2plY3Rpb25NYXRyaXg7XG5cbiAgICBzb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IGRlc3RpbmF0aW9uRnJhbWU7XG5cbiAgICBwbS5pZGVudGl0eSgpO1xuXG4gICAgLy8gVE9ETzogbWFrZSBkZXN0IHNjYWxlIHNvdXJjZVxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAxIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gLTEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAtMSAvIGRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0KjI7XG5cbiAgICAgICAgcG0udHggPSAtMSAtIHNvdXJjZUZyYW1lLnggKiBwbS5hO1xuICAgICAgICBwbS50eSA9IDEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVzaXplcyB0aGUgdGV4dHVyZSB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge051bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGhlaWdodCB7TnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgdGV4dHVyZVxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHdpZHRoID0gd2lkdGggfCAwO1xuICAgIGhlaWdodCA9IGhlaWdodCB8IDA7XG5cbiAgICBpZiAodGhpcy5zaXplLndpZHRoID09PSB3aWR0aCAmJiB0aGlzLnNpemUuaGVpZ2h0ID09PSBoZWlnaHQpIFxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2l6ZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuc2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICB0aGlzLmRlZmF1bHRGcmFtZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuZGVmYXVsdEZyYW1lLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIucmVzaXplKHdpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBoZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuICAgIFxuICAgIHZhciBwcm9qZWN0aW9uRnJhbWUgPSB0aGlzLmZyYW1lIHx8IHRoaXMuc2l6ZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSByZW5kZXIgdGFyZ2V0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIHRoaXMuZnJhbWVCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBTdGVuY2lsTWFza1N0YWNrKClcbntcblx0LyoqXG4gICAgICogVGhlIGFjdHVhbCBzdGFja1xuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsU3RhY2sgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQGFsdmluXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb3VudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY291bnQgPSAwO1xufVxuXG5TdGVuY2lsTWFza1N0YWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0ZW5jaWxNYXNrU3RhY2s7XG5tb2R1bGUuZXhwb3J0cyA9IFN0ZW5jaWxNYXNrU3RhY2s7XG4iLCJDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogTWFwcyBnbCBibGVuZCBjb21iaW5hdGlvbnMgdG8gV2ViR0xcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpKGdsLCBvYmplY3QpXG57XG4gICAgb2JqZWN0ID0gb2JqZWN0IHx8IHt9O1xuXG4gICAgLy9UT0RPIC0gcHJlbXVsdGlwbHkgYWxwaGEgd291bGQgYmUgZGlmZmVyZW50LlxuICAgIC8vYWRkIGEgYm9vbGVhbiBmb3IgdGhhdCFcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQUREXSAgICAgICAgICAgPSBbZ2wuU1JDX0FMUEhBLCBnbC5EU1RfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9IFtnbC5EU1RfQ09MT1IsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5TQ1JFRU5dICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLk9ORV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRBUktFTl0gICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0JVUk5dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRJRkZFUkVOQ0VdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aTtcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcblx0b2JqZWN0PSBvYmplY3QgfHwge307XG5cbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5QT0lOVFNdICAgICAgICAgPSBnbC5QT0lOVFM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORVNdICAgICAgICAgID0gZ2wuTElORVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9MT09QXSAgICAgID0gZ2wuTElORV9MT09QO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLkxJTkVfU1RSSVBdICAgICA9IGdsLkxJTkVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVTXSAgICAgID0gZ2wuVFJJQU5HTEVTO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXSA9IGdsLlRSSUFOR0xFX1NUUklQO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX0ZBTl0gICA9IGdsLlRSSUFOR0xFX0ZBTjtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBTcHJpdGUgb2JqZWN0IGlzIHRoZSBiYXNlIGZvciBhbGwgdGV4dHVyZWQgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCB0byB0aGUgc2NyZWVuXG4gKlxuICogQSBzcHJpdGUgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhbiBpbWFnZSBsaWtlIHRoaXM6XG4gKlxuICogYGBganNcbiAqIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgZm9yIHRoaXMgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZSh0ZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFuY2hvciBzZXRzIHRoZSBvcmlnaW4gcG9pbnQgb2YgdGhlIHRleHR1cmUuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgMCwwIHRoaXMgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0XG4gICAgICogU2V0dGluZyB0aGUgYW5jaG9yIHRvIDAuNSwwLjUgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgY2VudGVyZWRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMSwxIHdvdWxkIG1lYW4gdGhlIHRleHR1cmUncyBvcmlnaW4gcG9pbnQgd2lsbCBiZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmFuY2hvciA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUgKHRoaXMgaXMgaW5pdGlhbGx5IHNldCBieSB0aGUgdGV4dHVyZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQSB2YWx1ZSBvZiAweEZGRkZGRiB3aWxsIHJlbW92ZSBhbnkgdGludCBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2hhZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgc3ByaXRlLiBTZXQgdG8gbnVsbCB0byByZW1vdmUgYSBjdXJyZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJ8UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgY2FjaGVkIHZhbHVlIG9mIHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvLyBjYWxsIHRleHR1cmUgc2V0dGVyXG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBUZXh0dXJlLkVNUFRZO1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZVxuICAgIHRoaXMudmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblNwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLngpICogdGhpcy50ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzaWduID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLngpIHx8IDE7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBzaWduICogdmFsdWUgLyB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgTWF0aC5hYnModGhpcy5zY2FsZS55KSAqIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHByaXZhdGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBzbyBpZiBfd2lkdGggaXMgMCB0aGVuIHdpZHRoIHdhcyBub3Qgc2V0Li5cbiAgICBpZiAodGhpcy5fd2lkdGgpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnggPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgKiB0aGlzLl93aWR0aCAvIHRoaXMudGV4dHVyZS5mcmFtZS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zY2FsZS55ID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLnkpICogdGhpcy5faGVpZ2h0IC8gdGhpcy50ZXh0dXJlLmZyYW1lLmhlaWdodDtcbiAgICB9XG59O1xuXG5TcHJpdGUucHJvdG90eXBlLmNhY2x1bGF0ZVZlcnRpY2VzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgIHd0ID0gdGhpcy50cmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIGEgPSB3dC5hLCBiID0gd3QuYiwgYyA9IHd0LmMsIGQgPSB3dC5kLCB0eCA9IHd0LnR4LCB0eSA9IHd0LnR5LFxuICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhLFxuICAgICAgICB3MCwgdzEsIGgwLCBoMSxcbiAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcbiAgICAgICAgXG4gICAgaWYgKHRyaW0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgYW5kIGlzIG5vdCBhIHRpbGluZ3Nwcml0ZSB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgdzEgPSB0cmltLnggLSB0aGlzLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICBoMSA9IHRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcbiAgICB9XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMF0gPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzFdID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMl0gPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzNdID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzRdID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs1XSA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzZdID0gYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs3XSA9IGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG5cbn1cblxuLyoqXG4qXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy50cmFuc2Zvcm0udXBkYXRlZCB8fCB0aGlzLnRleHR1cmVEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZURpcnR5ID0gZmFsc2U7XG4gICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuICAgIH1cbiAgICBcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFNwcml0ZSBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcbiAgICAgICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5YLFxuICAgICAgICAgICAgbWF4WCxcbiAgICAgICAgICAgIG1pblksXG4gICAgICAgICAgICBtYXhZLFxuICAgICAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YTtcblxuICAgICAgICB2YXIgeDEgPSB2ZXJ0ZXhEYXRhWzBdXG4gICAgICAgIHZhciB5MSA9IHZlcnRleERhdGFbMV1cblxuICAgICAgICB2YXIgeDIgPSB2ZXJ0ZXhEYXRhWzJdXG4gICAgICAgIHZhciB5MiA9IHZlcnRleERhdGFbM11cblxuICAgICAgICB2YXIgeDMgPSB2ZXJ0ZXhEYXRhWzRdXG4gICAgICAgIHZhciB5MyA9IHZlcnRleERhdGFbNV1cblxuICAgICAgICB2YXIgeDQgPSB2ZXJ0ZXhEYXRhWzZdXG4gICAgICAgIHZhciB5NCA9IHZlcnRleERhdGFbN11cblxuICAgICAgICBtaW5YID0geDE7XG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkxO1xuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MTtcbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTE7XG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoaWxkcmVuXG4gICAgICAgIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGRCb3VuZHMgPSB0aGlzLmNvbnRhaW5lckdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICB3MCA9IGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICB3MSA9IGNoaWxkQm91bmRzLnggKyBjaGlsZEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGgwID0gY2hpbGRCb3VuZHMueTtcbiAgICAgICAgICAgIGgxID0gY2hpbGRCb3VuZHMueSArIGNoaWxkQm91bmRzLmhlaWdodDtcblxuICAgICAgICAgICAgbWluWCA9IChtaW5YIDwgdzApID8gbWluWCA6IHcwO1xuICAgICAgICAgICAgbWluWSA9IChtaW5ZIDwgaDApID8gbWluWSA6IGgwO1xuXG4gICAgICAgICAgICBtYXhYID0gKG1heFggPiB3MSkgPyBtYXhYIDogdzE7XG4gICAgICAgICAgICBtYXhZID0gKG1heFkgPiBoMSkgPyBtYXhZIDogaDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fYm91bmRzLnggPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHRoaXMuX2JvdW5kcy55ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG4gICAgdGhpcy5fYm91bmRzLndpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICByZXR1cm4gdGhpcy5fYm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgc3ByaXRlXG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cblNwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLnRleHR1cmUuY3JvcC53aWR0aCA8PSAwIHx8IHRoaXMudGV4dHVyZS5jcm9wLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vICBJZ25vcmUgbnVsbCBzb3VyY2VzXG4gICAgaWYgKHRoaXMudGV4dHVyZS52YWxpZClcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgICAgIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgIGR4LFxuICAgICAgICAgICAgZHksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDtcblxuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgICAgIC8vIElmIHNtb290aGluZ0VuYWJsZWQgaXMgc3VwcG9ydGVkIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgc21vb3RoaW5nIHByb3BlcnR5IGZvciB0aGlzIHRleHR1cmVcbiAgICAgICAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSO1xuICAgICAgICBpZiAocmVuZGVyZXIuc21vb3RoUHJvcGVydHkgJiYgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gIT09IHNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldID0gc21vb3RoaW5nRW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHRyaW1tZWQgd2Ugb2Zmc2V0IGJ5IHRoZSB0cmltIHgveSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgZnJhbWUgZGltZW5zaW9uc1xuXG4gICAgICAgIGlmKHRleHR1cmUucm90YXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICBcbiAgICAgICAgICAgIGR4ICs9IHdpZHRoO1xuXG4gICAgICAgICAgICB3dC50eCA9IGR5ICogd3QuYSArIGR4ICogd3QuYyArIHd0LnR4O1xuICAgICAgICAgICAgd3QudHkgPSBkeSAqIHd0LmIgKyBkeCAqIHd0LmQgKyB3dC50eTtcblxuICAgICAgICAgICAgdmFyIHRlbXAgPSB3dC5hO1xuICAgICAgICAgICAgd3QuYSAgPSAtd3QuYztcbiAgICAgICAgICAgIHd0LmMgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIHRlbXAgPSB3dC5iO1xuICAgICAgICAgICAgd3QuYiAgPSAtd3QuZDtcbiAgICAgICAgICAgIHd0LmQgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIC8vIHRoZSBhbmNob3IgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFib3ZlLCBzbyBsZXRzIHNldCBpdCB0byB6ZXJvXG4gICAgICAgICAgICBkeCA9IDA7XG4gICAgICAgICAgICBkeSA9IDA7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIC8vIEFsbG93IGZvciBwaXhlbCByb3VuZGluZ1xuICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgKHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwLFxuICAgICAgICAgICAgICAgICh3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHggPSBkeCB8IDA7XG4gICAgICAgICAgICBkeSA9IGR5IHwgMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICB3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjbGVhbiB1cCBjYWNoaW5nIC0gaG93IHRvIGNsZWFuIHVwIHRoZSBjYWNoZXM/XG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC55ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgc3ByaXRlIGFuZCBvcHRpb25hbGx5IGl0cyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95VGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95VGV4dHVyZSwgZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5hbmNob3IgPSBudWxsO1xuXG4gICAgaWYgKGRlc3Ryb3lUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcblxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zLi5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICovXG5TcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgU3ByaXRlKFRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXInKSxcbiAgICBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9jcmVhdGVJbmRpY2VzRm9yUXVhZHMnKSxcbiAgICBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4vZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgZ2xDb3JlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgU3ByaXRlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1Nwcml0ZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFJlbmRlcmVyIGRlZGljYXRlZCB0byBkcmF3aW5nIGFuZCBiYXRjaGluZyBzcHJpdGVzLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU3ByaXRlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgdmFsdWVzIHNlbnQgaW4gdGhlIHZlcnRleCBidWZmZXIuXG4gICAgICogcG9zaXRpb25YLCBwb3NpdGlvblksIGNvbG9yUiwgY29sb3JHLCBjb2xvckIgPSA1XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdmVydGV4IGluZm9ybWF0aW9uIGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgU3ByaXRlQmF0Y2ggYmVmb3JlIGl0IGZsdXNoZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIG91ciBiYXRjaFxuICAgIHZhciBudW1WZXJ0cyA9ICh0aGlzLnNpemUgKiA0KSAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBiYXRjaCwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgIHZhciBudW1JbmRpY2VzID0gdGhpcy5zaXplICogNjtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSB2ZXJ0ZXggZGF0YSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5QnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgQXJyYXlCdWZmZXIobnVtVmVydHMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBGbG9hdDMyQXJyYXkgZm9yIHBvc2l0aW9uc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciB1dnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIGNvbG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlcyBvZiB0aGUgZ2VvbWV0cnkgKHF1YWRzKSB0byBkcmF3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHModGhpcy5zaXplKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIFxuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICBcbiAgICAvL1RPRE8gLSAzMDAgaXMgYSBiaXQgbWFnaWMsIGZpZ3VyZSBvdXQgYSBuaWNlciBhbW91bnQhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykgXG4gICAge1xuICAgICAgICB0aGlzLmdyb3Vwc1tpXSA9IHt0ZXh0dXJlczpbXSwgdGV4dHVyZUNvdW50OjAsIGlkczpbXSwgc2l6ZTowLCBzdGFydDowLCBibGVuZDowfTsgXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcblxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsOyAgICBcbn1cblxuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3Nwcml0ZScsIFNwcml0ZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5NQVhfVEVYVFVFUyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cbiAgICB0aGlzLl9zaGFkZXIgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgdGhpcy5NQVhfVEVYVFVFUykvL25ldyBUZXh0dXJlU2hhZGVyKGdsKTtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlcjtcblxuICAgIC8vIGNyZWF0ZSBhIGNvdXBsZSBvZiBidWZmZXJzXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKGdsLCBudWxsLCBnbC5EWU5BTUlDX0RSQVcpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoZ2wsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgLy8gYnVpbGQgdGhlIHZhbyBvYmplY3QgdGhhdCB3aWxsIHJlbmRlci4uXG4gICAgdGhpcy52YW8gPSBuZXcgZ2xDb3JlLlZlcnRleEFycmF5T2JqZWN0KGdsKTtcblxuICAgIHRoaXMudmFvLmFkZEluZGV4KHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCAwKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIGdsLlVOU0lHTkVEX1NIT1JULCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMiAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMyAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVJZCwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgNCAqIDQpO1xuXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdG8gcmVuZGVyIHdoZW4gdXNpbmcgdGhpcyBzcHJpdGViYXRjaFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHNwcml0ZSlcbntcbiAgICAvL1RPRE8gc2V0IGJsZW5kIG1vZGVzLi5cbiAgICAvLyBjaGVjayB0ZXh0dXJlLi5cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPj0gdGhpcy5zaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICBcbiAgICAvLyBnZXQgdGhlIHV2cyBmb3IgdGhlIHRleHR1cmVcbiAgIFxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIGlmICghc3ByaXRlLnRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgLy8gcHVzaCBhIHRleHR1cmUuXG4gICAgLy8gaW5jcmVtZW50IHRoZSBiYXRjaHNpemVcbiAgICB2YXIgbmV4dFRleHR1cmUgPSAgc3ByaXRlLnRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgdmFyIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwO1xuICAgIHZhciBpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50VGV4dHVyZSAhPT0gbmV4dFRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbmV4dFRleHR1cmU7XG4gICAgICAgIFxuICAgICAgICBpZighbmV4dFRleHR1cmUuX2VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9pZCA9IHRoaXMudGV4dHVyZUNvdW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLnRleHR1cmVDb3VudCA9PT0gdGhpcy5NQVhfVEVYVFVFUylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgICAgICAgICAgICAgeyAgICAgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnN0YXJ0ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50KytdID0gbmV4dFRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHR1cmVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdHJpbT8/XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG5cbiAgICAvLyB1cGxvYWQgdGhlIHNwcml0ZSBlbGVtZXRucy4uLlxuICAgIC8vIHRoZXkgaGF2ZSBhbGwgcmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIHdlIGp1c3QgbmVlZCB0byBwdXNoIHRoZW0gaW50byB0aGUgYnVmZmVyLlxuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7XG4gICAgdmFyIHZlcnRleERhdGEgPSBzcHJpdGUudmVydGV4RGF0YVxuICAgIHZhciB0aW50ID0gKHNwcml0ZS50aW50ID4+IDE2KSArIChzcHJpdGUudGludCAmIDB4ZmYwMCkgKyAoKHNwcml0ZS50aW50ICYgMHhmZikgPDwgMTYpICsgKHNwcml0ZS53b3JsZEFscGhhICogMjU1IDw8IDI0KTtcbiAgICB2YXIgdXZzID0gc3ByaXRlLnRleHR1cmUuX3V2cy51dnNfdWludDMyO1xuICAgIC8veHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzBdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMF07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7IFxuICAgIFxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsyXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzNdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzFdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs0XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzVdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzJdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzZdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbN107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbM107XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgYW5kIGVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA9PT0gMClyZXR1cm47XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG5cbiAgICB0aGlzLmN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSB0aGlzLmN1cnJlbnRHcm91cC5zdGFydDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICB7ICAgICBcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgXG4gICAgLy8gZG8gc29tZSBzbWFydCBhcnJheSBzdHVmZi4uXG4gICAgLy8gZG91YmxlIHNpemUgc28gd2UgZG9udCBhbHdheSBzdWJhcnJheSB0aGUgZWxlbWVudHMuLlxuICAgIC8vIHVwbG9hZCB0aGUgdmVydHMgdG8gdGhlIGJ1ZmZlclxuICAgIGlmICh0aGlzLmN1cnJlbnRCYXRjaFNpemUgPiAoIHRoaXMuc2l6ZSAqIDAuNSApIClcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh0aGlzLnZlcnRpY2VzLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbyBrIC4uIHN1YiBhcnJheSBpcyBTTE9XPj9cbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnBvc2l0aW9ucy5zdWJhcnJheSgwLCB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplKTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHZpZXcsIDAsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgc2hhZGVyLi5cbiAgICB0aGlzLnJlbmRlcmVyLmJpbmRTaGFkZXIodGhpcy5fc2hhZGVyKTtcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCAwICk7XG5cbiAgICAvLy8gcmVuZGVyIHRoZSBncm91cHMuLlxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdyb3VwQ291bnQ7IGkrKykge1xuICAgICAgICBcbiAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5ncm91cHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC50ZXh0dXJlQ291bnQ7IGorKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kVGV4dHVyZShncm91cC50ZXh0dXJlc1tqXSwgaik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgZ3JvdXAuc2l6ZSAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCBncm91cC5zdGFydCAqIDYgKiAyKTtcbiAgICB9O1xuXG4gICAgLy8gcmVzZXQgZWxlbWVudHMgZm9yIHRoZSBuZXh0IGZsdXNoXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBzcHJpdGUgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFvLmJpbmQoKTtcbn07XG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgdGhpcy52YW8udW5iaW5kKCk7XG59O1xuLyoqXG4gKiBEZXN0cm95cyB0aGUgU3ByaXRlQmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuY29sb3JzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zcHJpdGVzID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCBtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgdmVydGV4U3JjID0gXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGFUZXh0dXJlSWQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZUZXh0dXJlSWQgPSBhVGV4dHVyZUlkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVwiO1xuICAgIHZhciBmcmFnbWVudFNyYyA9ICdwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG4nICsgZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpICsgXCJcXG5cXG5cIiArIGZyYWdUZW1wbGF0ZVxuXG4gICAgZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYy5yZXBsYWNlKC9cXCVcXCUvZ2ksICcxNicpO1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cbiAgICB2YXIgc2FtcGxlVmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSB7XG4gICAgICAgIHNhbXBsZVZhbHVlc1tpXSA9IGk7XG4gICAgfTtcblxuICAgIHNoYWRlci5iaW5kKCk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnVTYW1wbGVycyA9IHNhbXBsZVZhbHVlcztcblxuICAgIHJldHVybiBzaGFkZXI7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKVxue1xuICAgIHZhciBzcmMgPSAndmVjNCBnZXRTYW1wbGVGcm9tQXJyYXkoc2FtcGxlcjJEIHRleHR1cmVzWyUlXSwgaW50IG5keCwgdmVjMiB1dikge1xcblxcbnZlYzQgY29sb3I7J1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgaWYoaSA+IDApc3JjICs9ICdcXG5lbHNlICc7XG4gICAgICAgIGlmKGkgPCBtYXhUZXh0dXJlcy0xKXNyYyArPSAnaWYobmR4ID09ICcgKyBpICsgJyknO1xuICAgICAgICBzcmMgKz0gJ1xcbnsnO1xuICAgICAgICBzcmMgKz0gJ1xcblxcdGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmVzWycraSsnXSwgdXYpOyc7XG4gICAgICAgIHNyYyArPSAnXFxufSc7XG4gICAgfTtcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdyZXR1cm4gY29sb3I7JztcbiAgICBzcmMgKz0gJ1xcbn0nO1xuXG4gICAgcmV0dXJuIHNyYztcbn1cblxudmFyIGZyYWdUZW1wbGF0ZSA9IFtcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG4gICAgJ3ZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsnLFxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcnNbJSVdOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICdnbF9GcmFnQ29sb3IgPSBnZXRTYW1wbGVGcm9tQXJyYXkodVNhbXBsZXJzLCBpbnQodlRleHR1cmVJZCksIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yOycsXG4gICAgJ30nXG5dLmpvaW4oJ1xcbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyO1xuIiwidmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBUZXh0IE9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nIGluIHlvdXIgdGV4dCBzdHJpbmcsXG4gKiBvciBhZGQgYSB3b3JkV3JhcCBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSBhbmQgYW5kIHdvcmRXcmFwV2lkdGggcHJvcGVydHkgd2l0aCBhIHZhbHVlIGluIHRoZSBzdHlsZSBvYmplY3QuXG4gKlxuICogQSBUZXh0IGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBzdHJpbmcgYW5kIGEgc3R5bGUgb2JqZWN0XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0ID0gbmV3IFBJWEkuVGV4dCgnVGhpcyBpcyBhIHBpeGkgdGV4dCcse2ZvbnQgOiAnMjRweCBBcmlhbCcsIGZpbGwgOiAweGZmMTAxMCwgYWxpZ24gOiAnY2VudGVyJ30pO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbc3R5bGUuZm9udF0ge3N0cmluZ30gZGVmYXVsdCAnYm9sZCAyMHB4IEFyaWFsJyBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlLmcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcCwgaXQgbmVlZHMgd29yZFdyYXAgdG8gYmUgc2V0IHRvIHRydWVcbiAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzRdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gKi9cbmZ1bmN0aW9uIFRleHQodGV4dCwgc3R5bGUsIHJlc29sdXRpb24pXG57XG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgMmQgY29udGV4dCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gd2l0aFxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY2FudmFzLlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyh0aGlzLmNhbnZhcyk7XG4gICAgdGV4dHVyZS50cmltID0gbmV3IG1hdGguUmVjdGFuZ2xlKCk7XG4gICAgU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbn1cblxuLy8gY29uc3RydWN0b3JcblRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTcHJpdGUucHJvdG90eXBlKTtcblRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gVGV4dDtcblxuVGV4dC5mb250UHJvcGVydGllc0NhY2hlID0ge307XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZm9udD0nYm9sZCAyMHB0IEFyaWFsJ10ge3N0cmluZ30gVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gICAgICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZWcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGVnICdibHVlJywgJyNGQ0ZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXBcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd8bnVtYmVyfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNl0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gICAgICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAgICAgKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAgICAgKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHN0eWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdHlsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5maWxsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpbGwgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmZpbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLnN0cm9rZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zdHJva2UgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLnN0cm9rZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZHJvcFNoYWRvd0NvbG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZHJvcFNoYWRvd0NvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGUuZm9udCA9IHN0eWxlLmZvbnQgfHwgJ2JvbGQgMjBwdCBBcmlhbCc7XG4gICAgICAgICAgICBzdHlsZS5maWxsID0gc3R5bGUuZmlsbCB8fCAnYmxhY2snO1xuICAgICAgICAgICAgc3R5bGUuYWxpZ24gPSBzdHlsZS5hbGlnbiB8fCAnbGVmdCc7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2UgPSBzdHlsZS5zdHJva2UgfHwgJ2JsYWNrJzsgLy9wcm92aWRlIGEgZGVmYXVsdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzLzEzNlxuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIHx8IDA7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcCA9IHN0eWxlLndvcmRXcmFwIHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXBXaWR0aCA9IHN0eWxlLndvcmRXcmFwV2lkdGggfHwgMTAwO1xuXG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93ID0gc3R5bGUuZHJvcFNoYWRvdyB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvciB8fCAnIzAwMDAwMCc7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93QW5nbGUgPSBzdHlsZS5kcm9wU2hhZG93QW5nbGUgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA6IE1hdGguUEkgLyA2O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlID0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgOiA1O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0JsdXIgOiAwOyAvL3NoYWRvd0JsdXIgaXMgJzAnIGJ5IGRlZmF1bHQgYWNjb3JkaW5nIHRvIEhUTUxcblxuICAgICAgICAgICAgc3R5bGUucGFkZGluZyA9IHN0eWxlLnBhZGRpbmcgfHwgMDtcblxuICAgICAgICAgICAgc3R5bGUudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lIHx8ICdhbHBoYWJldGljJztcblxuICAgICAgICAgICAgc3R5bGUubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbiB8fCAnbWl0ZXInO1xuICAgICAgICAgICAgc3R5bGUubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQgfHwgMTA7XG5cbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gc3R5bGU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNvcHkgZm9yIHRoZSB0ZXh0IG9iamVjdC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCl7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgc3R5bGUgPSB0aGlzLl9zdHlsZTtcbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG5cbiAgICAvLyB3b3JkIHdyYXBcbiAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbCB0ZXh0XG4gICAgdmFyIG91dHB1dFRleHQgPSBzdHlsZS53b3JkV3JhcCA/IHRoaXMud29yZFdyYXAodGhpcy5fdGV4dCkgOiB0aGlzLl90ZXh0O1xuXG4gICAgLy8gc3BsaXQgdGV4dCBpbnRvIGxpbmVzXG4gICAgdmFyIGxpbmVzID0gb3V0cHV0VGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCB3aWR0aFxuICAgIHZhciBsaW5lV2lkdGhzID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aCk7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGZvbnRQcm9wZXJ0aWVzID0gdGhpcy5kZXRlcm1pbmVGb250UHJvcGVydGllcyhzdHlsZS5mb250KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBsaW5lV2lkdGg7XG4gICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICB2YXIgd2lkdGggPSBtYXhMaW5lV2lkdGggKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICB3aWR0aCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSAoIHdpZHRoICsgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgaGVpZ2h0XG4gICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLnN0eWxlLmxpbmVIZWlnaHQgfHwgZm9udFByb3BlcnRpZXMuZm9udFNpemUgKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG5cbiAgICB2YXIgaGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aDtcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGhlaWdodCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gKCBoZWlnaHQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nICogMiApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5jb250ZXh0LnNjYWxlKCB0aGlzLnJlc29sdXRpb24sIHRoaXMucmVzb2x1dGlvbik7XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgfVxuXG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFN0eWxlPVwiI0ZGMDAwMFwiO1xuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuICAgIHRoaXMuY29udGV4dC5zdHJva2VTdHlsZSA9IHN0eWxlLnN0cm9rZTtcbiAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIHRoaXMuY29udGV4dC50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmU7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVKb2luID0gc3R5bGUubGluZUpvaW47XG4gICAgdGhpcy5jb250ZXh0Lm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0O1xuXG4gICAgdmFyIGxpbmVQb3NpdGlvblg7XG4gICAgdmFyIGxpbmVQb3NpdGlvblk7XG5cbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGlmIChzdHlsZS5kcm9wU2hhZG93Qmx1ciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhTaGFkb3dPZmZzZXQgPSBNYXRoLmNvcyhzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgICAgICB2YXIgeVNoYWRvd09mZnNldCA9IE1hdGguc2luKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCArIHhTaGFkb3dPZmZzZXQsIGxpbmVQb3NpdGlvblkgKyB5U2hhZG93T2Zmc2V0ICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL3NldCBjYW52YXMgdGV4dCBzdHlsZXNcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZmlsbDtcblxuICAgIC8vZHJhdyBsaW5lcyBsaW5lIGJ5IGxpbmVcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0cm9rZSAmJiBzdHlsZS5zdHJva2VUaGlja25lc3MpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJva2VUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUudHJpbS54ID0gMDtcbiAgICB0ZXh0dXJlLnRyaW0ueSA9IC10aGlzLl9zdHlsZS5wYWRkaW5nO1xuXG4gICAgdGV4dHVyZS50cmltLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGV4dHVyZS50cmltLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAtIHRoaXMuX3N0eWxlLnBhZGRpbmcqMjtcblxuICAgIHRoaXMuX3dpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5lbWl0KCd1cGRhdGUnLCAgdGV4dHVyZS5iYXNlVGV4dHVyZSk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqL1xuVGV4dC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICAvL3RoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5yZW5kZXJXZWJHTC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgLy8gICB0aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYXNjZW50LCBkZXNjZW50IGFuZCBmb250U2l6ZSBvZiBhIGdpdmVuIGZvbnRTdHlsZVxuICpcbiAqIEBwYXJhbSBmb250U3R5bGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGZvbnRTdHlsZSlcbntcbiAgICB2YXIgcHJvcGVydGllcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdO1xuXG4gICAgaWYgKCFwcm9wZXJ0aWVzKVxuICAgIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzO1xuICAgICAgICB2YXIgY29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnfE3DiXEnKS53aWR0aCk7XG4gICAgICAgIHZhciBiYXNlbGluZSA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCdNJykud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xuXG4gICAgICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiAxLjQgfCAwO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNmMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQoJ3xNw4lxJywgMCwgYmFzZWxpbmUpO1xuXG4gICAgICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgICB2YXIgcGl4ZWxzID0gaW1hZ2VkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmUgPSB3aWR0aCAqIDQ7XG5cbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgIHZhciBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZWxpbmU7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCArPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnQgPSBiYXNlbGluZSAtIGk7XG5cbiAgICAgICAgaWR4ID0gcGl4ZWxzIC0gbGluZTtcbiAgICAgICAgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGRlc2NlbnQuIHNjYW4gZnJvbSBib3R0b20gdG8gdG9wIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggLT0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IGkgLSBiYXNlbGluZTtcbiAgICAgICAgcHJvcGVydGllcy5mb250U2l6ZSA9IHByb3BlcnRpZXMuYXNjZW50ICsgcHJvcGVydGllcy5kZXNjZW50O1xuXG4gICAgICAgIFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBuZXdsaW5lcyB0byBhIHN0cmluZyB0byBoYXZlIGl0IG9wdGltYWxseSBmaXQgaW50byB0aGUgaG9yaXpvbnRhbFxuICogYm91bmRzIHNldCBieSB0aGUgVGV4dCBvYmplY3QncyB3b3JkV3JhcFdpZHRoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS53b3JkV3JhcCA9IGZ1bmN0aW9uICh0ZXh0KVxue1xuICAgIC8vIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyXG4gICAgLy8gdGhhbiBpdHMgaG9yaXpvbnRhbCBib3VuZHMuXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICAgIHZhciB3b3JkV3JhcFdpZHRoID0gdGhpcy5fc3R5bGUud29yZFdyYXBXaWR0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XG4gICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQod29yZHNbal0pLndpZHRoO1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aFdpdGhTcGFjZSA9IHdvcmRXaWR0aCArIHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xuICAgICAgICAgICAgaWYgKGogPT09IDAgfHwgd29yZFdpZHRoV2l0aFNwYWNlID4gc3BhY2VMZWZ0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcHJpbnRpbmcgdGhlIG5ld2xpbmUgaWYgaXQncyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZSB0aGF0IGlzXG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSB3b3JkIHdyYXAgd2lkdGguXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal07XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB3b3Jkc1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgbGluZXMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFRleHQgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgVGV4dFxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UZXh0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzLmNhbGwodGhpcywgbWF0cml4KTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT10cnVlXSB7Ym9vbGVhbn0gd2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICAvLyBtYWtlIHN1cmUgdG8gcmVzZXQgdGhlIHRoZSBjb250ZXh0IGFuZCBjYW52YXMuLiBkb250IHdhbnQgdGhpcyBoYW5naW5nIGFyb3VuZCBpbiBtZW1vcnkhXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG5cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGVzdHJveUJhc2VUZXh0dXJlKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIFJlbmRlclRhcmdldCA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBGaWx0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKSxcbiAgICB0ZW1wUmVjdCA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuXG4vKipcbiAqIEEgQmFzZVJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIEJhc2VSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIHRha2VzIGEgc25hcHNob3Qgb2YgYW55IERpc3BsYXkgT2JqZWN0IGdpdmVuIHRvIGl0cyByZW5kZXIgbWV0aG9kLiBUaGUgcG9zaXRpb25cbiAqIGFuZCByb3RhdGlvbiBvZiB0aGUgZ2l2ZW4gRGlzcGxheSBPYmplY3RzIGlzIGlnbm9yZWQuIEZvciBleGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcigxMDI0LCAxMDI0LCB7IHZpZXc6IGNhbnZhcywgcmF0aW86IDEgfSk7XG4gKiB2YXIgQmFzZXJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5CYXNlUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihzcHJpdGUpO1xuICogYGBgXG4gKlxuICogVGhlIFNwcml0ZSBpbiB0aGlzIGNhc2Ugd2lsbCBiZSByZW5kZXJlZCB0byBhIHBvc2l0aW9uIG9mIDAsMC4gVG8gcmVuZGVyIHRoaXMgc3ByaXRlIGF0IGl0cyBhY3R1YWxcbiAqIHBvc2l0aW9uIGEgQ29udGFpbmVyIHNob3VsZCBiZSB1c2VkOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZG9jID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKlxuICogZG9jLmFkZENoaWxkKHNwcml0ZSk7XG4gKlxuICogQmFzZXJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiBCYXNlcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZVxuICogQHBhcmFtIFt3aWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbaGVpZ2h0PTEwMF0ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIEJhc2VSZW5kZXJUZXh0dXJlLCB5b3UgbXVzdCBwYXNzIGEgcmVuZGVyZXIgaW50byB0aGUgY29uc3RydWN0b3IuJyk7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUuY2FsbCh0aGlzLCBudWxsLCBzY2FsZU1vZGUpO1xuICAgXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047O1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRHJhdy9yZW5kZXIgdGhlIGdpdmVuIERpc3BsYXlPYmplY3Qgb250byB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBkZXNjZW5kZW50cyBhcmUgdHJhbnNmb3JtZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIElmIGB1cGRhdGVUcmFuc2Zvcm1gIGlzIHRydWUgdGhlbiB0aGUgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQgYmVmb3JlIHRoZVxuICAgICAqIG1ldGhvZCByZXR1cm5zLiBPdGhlcndpc2UgaXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcgY29kZSB0byBjb3JyZWN0bHkgdXNlIG9yIHJlc2V0XG4gICAgICogdGhlIHRyYW5zZm9ybWVkIGRpc3BsYXkgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5IG9iamVjdCBpcyBhbHdheXMgcmVuZGVyZWQgd2l0aCBhIHdvcmxkQWxwaGEgdmFsdWUgb2YgMS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICAgICAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gICAgICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAgICAgKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB1c2VzLiBBIEJhc2VSZW5kZXJUZXh0dXJlIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgcmVuZGVyZXIgYXQgdGhlIG1vbWVudCBpZiBpdHMgd2ViR0wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnNjYWxlTW9kZSwgdGhpcy5yZXNvbHV0aW9uKTsvLywgdGhpcy50aGlzLnNjYWxlTW9kZSk7XG4gICAgICAgIHRoaXMuX2dsVGV4dHVyZXNbZ2wuaWRdID0gIHRoaXMudGV4dHVyZUJ1ZmZlci50ZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgLy9UT0RPIHJlZmFjdG9yIGZpbHRlciBtYW5hZ2VyLi4gYXMgcmVhbGx5IGl0cyBubyBsb25nZXIgYSBtYW5hZ2VyIGlmIHdlIHVzZSBpdCBoZXJlLi5cbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbmV3IEZpbHRlck1hbmFnZXIodGhpcy5yZW5kZXJlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlcldlYkdMO1xuXG4gICAgICAgIC8vIHRoZSBjcmVhdGlvbiBvZiBhIGZpbHRlciBtYW5hZ2VyIHVuYmluZHMgdGhlIGJ1ZmZlcnMuLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgICAgICBpZih0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQpdGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlckNhbnZhcztcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcih0aGlzLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuaGVpZ2h0KiB0aGlzLnJlc29sdXRpb24pO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcblxufVxuXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIHVwZGF0ZUJhc2Uge2Jvb2xlYW59IFNob3VsZCB0aGUgYmFzZVRleHR1cmUud2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYmUgcmVzaXplZCBhcyB3ZWxsP1xuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgaWYgKHdpZHRoID09PSB0aGlzLndpZHRoICYmIGhlaWdodCA9PT0gdGhpcy5oZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZCA9ICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7XG5cbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoZGVzdGluYXRpb25GcmFtZSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuYmluZEZyYW1lYnVmZmVyKHRoaXMucmVuZGVyZXIuZ2wuRlJBTUVCVUZGRVIsIHRoaXMudGV4dHVyZUJ1ZmZlci5mcmFtZUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKGZhbHNlLCBkZXN0aW5hdGlvbkZyYW1lKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAoZnJhbWUsIGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAodXBkYXRlVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpID8gdXBkYXRlVHJhbnNmb3JtIDogdHJ1ZTsvLyF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIudHJhbnNmb3JtID0gbWF0cml4O1xuXG4gICAgLy9UT0RPIG5vdCBhIGZhbiB0aGF0IHRoaXMgaXMgaGVyZS4uLiBpdCB3aWxsIG1vdmUhXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKCk7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICBpZiAodXBkYXRlVHJhbnNmb3JtKVxuICAgIHtcblxuICAgICAgICAvLyByZXNldCB0aGUgbWF0cml4IG9mIHRoZSBkaXNwbGF0eU9iamVjdC4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uaWRlbnRpdHkoKTtcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmN1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGVtcFJlY3Qud2lkdGggPSBmcmFtZS5oZWlnaHQ7XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gZnJhbWUud2lkdGg7XG4gICBcbiAgICAvL1RPRE8gcmVuYW1lIHRleHR1cmVCdWZmZXIgdG8gcmVuZGVyVGFyZ2V0Li5cbiAgICB2YXIgdGVtcCA9ICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0aGlzLmZpbHRlck1hbmFnZXI7XG4gICAgXG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIuYWN0aXZhdGUoZnJhbWUsIHRlbXBSZWN0KTtcbiAgICBjb25zb2xlLmxvZyhkaXNwbGF5T2JqZWN0KVxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnRleHR1cmVCdWZmZXIsIGNsZWFyKTtcblxuICAgLy8gY29uc29sZS5sb2coXCJSRU5ERVJJTkcgXCIpO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRlbXA7XG59O1xuXG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcl0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVwZGF0ZVRyYW5zZm9ybSA9ICEhdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdmFyIHd0ID0gdGVtcE1hdHJpeDtcblxuICAgIHd0LmlkZW50aXR5KCk7XG5cbiAgICBpZiAobWF0cml4KVxuICAgIHtcbiAgICAgICAgd3QuYXBwZW5kKG1hdHJpeCk7XG4gICAgfVxuXG5cbiAgICB3dC50eCArPSBmcmFtZS54O1xuICAgIHd0LnR5ICs9IGZyYW1lLnk7XG5cbiAgICB2YXIgY2FjaGVkV3QgPSBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtO1xuICAgIFxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSB3dDtcblxuICAgIC8vIHNldFdvcmxkIEFscGhhIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgcmVuZGVyZXIgYXQgZnVsbCBvcGFjaXR5XG4gICAgZGlzcGxheU9iamVjdC53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICB2YXIgaSwgajtcblxuICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBcbi8vICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5cbiAgICB2YXIgY29udGV4dCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlYWxSZXNvbHV0aW9uID0gdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIGNvbnRleHQpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gcmVhbFJlc29sdXRpb247XG5cbiAgICBpZihkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID09PSB3dClcbiAgICB7XG4gICAgICAgIC8vIGZpeGVzIGNhY2hlQXNCaXRtYXAgSGFwcGVuaW5nIGR1cmluZyB0aGUgYWJvdmUuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gY2FjaGVkV3Q7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBkZXN0cm95QmFzZSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIGZpbHRlcm1hbmFnZXIuLlxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoZnJhbWUpXG57XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uuc3JjID0gdGhpcy5nZXRCYXNlNjQoZnJhbWUpO1xuICAgIHJldHVybiBpbWFnZTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGlzIHRleHR1cmUuIEl0IHdvcmtzIGJ5IGNhbGxpbmcgQmFzZVJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgIHJldHVybiB0aGlzLmdldENhbnZhcyhmcmFtZSkudG9EYXRhVVJMKCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIEJhc2VSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldENhbnZhcyA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2lkdGggPSBmcmFtZS53aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBjYW52YXNEYXRhID0gdGVtcENhbnZhcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2FudmFzRGF0YS5kYXRhLnNldCh3ZWJHTFBpeGVscyk7XG5cbiAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICByZXR1cm4gdGVtcENhbnZhcy5jYW52YXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy53aWR0aDtcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoZnJhbWUud2lkdGggPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGggJiYgXG4gICAgICAgICAgIGZyYW1lLmhlaWdodCA9PT0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5oZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IENhbnZhc0J1ZmZlcihmcmFtZS53aWR0aCAqIHJlc29sdXRpb24sIGZyYW1lLmhlaWdodCAqIHJlc29sdXRpb24pO1xuICAgICAgICAgICAgdmFyIGNhbnZhc0RhdGEgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dC5nZXRJbWFnZURhdGEoZnJhbWUueCAgKiByZXNvbHV0aW9uLCBmcmFtZS55ICogcmVzb2x1dGlvbiwgZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIHRoZSBlbnRpcmUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICBpZighZnJhbWUpXG4gICAge1xuICAgICAgICBmcmFtZSA9IHRlbXBSZWN0O1xuICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICByZXR1cm4gd2ViR0xQaXhlbHM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIGEgcGl4ZWwgd2l0aGluIHRoZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uIChmcmFtZSwgeCwgeSlcbntcbiAgICB0ZW1wUmVjdC54ID0geDtcbiAgICB0ZW1wUmVjdC55ID0geTtcbiAgICB0ZW1wUmVjdC53aWR0aCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gMSAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmKGZyYW1lKVxuICAgIHtcbiAgICAgICAgdGVtcFJlY3QueCArPSBmcmFtZS54O1xuICAgICAgICB0ZW1wUmVjdC55ICs9IGZyYW1lLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UGl4ZWxzKHRlbXBSZWN0KTtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlLiBBbGwgdGV4dHVyZXMgaGF2ZSBhIGJhc2UgdGV4dHVyZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50IHBpeGVsIHJhdGlvc1xuICovXG5mdW5jdGlvbiBCYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDEwMDtcblxuICAgIC8vIFRPRE8gZG9jc1xuICAgIC8vIHVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2VcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxXaWR0aCA9IDEwMDtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgaGVpZ2h0IG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUgdG8gYXBwbHkgd2hlbiBzY2FsaW5nIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuTElORUFSXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIG9uY2UgdGhlIGJhc2UgdGV4dHVyZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbmV2ZXIgdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmFpbHMgdG8gbG9hZCBvciBoYXMgbm8gdGV4dHVyZSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgaWYgdGhlIHNvdXJjZSBpcyBjdXJyZW50bHkgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIElmIGFuIEltYWdlIHNvdXJjZSBpcyBsb2FkaW5nIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmVcbiAgICAgKiBkaXNwYXRjaGVkIHdoZW4gdGhlIG9wZXJhdGlvbiBlbmRzLiBBbiB1bmRlcnlsaW5nIHNvdXJjZSB0aGF0IGlzXG4gICAgICogaW1tZWRpYXRlbHktYXZhaWxhYmxlIGJ5cGFzc2VzIGxvYWRpbmcgZW50aXJlbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW1hZ2Ugc291cmNlIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUT0RPOiBNYWtlIHRoaXMgYSBzZXR0ZXIgdGhhdCBjYWxscyBsb2FkU291cmNlKCk7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtJbWFnZXxDYW52YXN9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsOyAvLyBzZXQgaW4gbG9hZFNvdXJjZSwgaWYgYXQgYWxsXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiBSR0IgY2hhbm5lbHMgc2hvdWxkIGJlIHByZS1tdWx0aXBsaWVkIGJ5IEFscGhhICAoV2ViR0wgb25seSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBvciBub3QgdGhlIHRleHR1cmUgaXMgYSBwb3dlciBvZiB0d28sIHRyeSB0byB1c2UgcG93ZXIgb2YgdHdvIHRleHR1cmVzIGFzIG11Y2ggYXMgeW91IGNhblxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IGZhbHNlO1xuXG4gICAgLy8gdXNlZCBmb3Igd2ViR0xcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiBhIG1pcG1hcCBvZiB0aGlzIHRleHR1cmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLiBUaGlzIHZhbHVlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIHRleHR1cmUgaXMgdXNlZFxuICAgICAqIEFsc28gdGhlIHRleHR1cmUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBzaXplIHRvIHdvcmtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5taXBtYXAgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHJlbmRlcmVyIElEcyB0byB3ZWJnbCB0ZXh0dXJlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgV2ViR0xUZXh0dXJlPn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9pZCA9IDA7XG4gICAgXG4gICAgLy8gaWYgbm8gc291cmNlIHBhc3NlZCBkb24ndCB0cnkgdG8gbG9hZFxuICAgIGlmIChzb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmluaXNoZXMgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkZWRcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmFpbHMgdG8gbG9hZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBCYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0ZXh0dXJlIG9uIGFsbCB0aGUgd2ViZ2wgcmVuZGVyZXJzLCB0aGlzIGFsc28gYXNzdW1lcyB0aGUgc3JjIGhhcyBjaGFuZ2VkLlxuICpcbiAqIEBmaXJlcyB1cGRhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5yZWFsV2lkdGggPSB0aGlzLnNvdXJjZS5uYXR1cmFsV2lkdGggfHwgdGhpcy5zb3VyY2Uud2lkdGg7XG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gdGhpcy5zb3VyY2UubmF0dXJhbEhlaWdodCB8fCB0aGlzLnNvdXJjZS5oZWlnaHQ7XG5cbiAgICB0aGlzLndpZHRoID0gdGhpcy5yZWFsV2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlYWxIZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IHV0aWxzLmlzUG93ZXJPZlR3byh0aGlzLnJlYWxXaWR0aCwgdGhpcy5yZWFsSGVpZ2h0KTtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIExvYWQgYSBzb3VyY2UuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBpcyBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlLCBzdWNoIGFzIGFuIGltYWdlIHRoYXQgbmVlZHMgdG8gYmVcbiAqIGRvd25sb2FkZWQsIHRoZW4gdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIGluIHRoZSBmdXR1cmVcbiAqIGFuZCBgaGFzTG9hZGVkYCB3aWxsIHJlbWFpbiBmYWxzZSBhZnRlciB0aGlzIGNhbGwuXG4gKlxuICogVGhlIGxvZ2ljIHN0YXRlIGFmdGVyIGNhbGxpbmcgYGxvYWRTb3VyY2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGVnLiBgZnJvbUltYWdlYCwgYG5ldyBCYXNlVGV4dHVyZWApIGlzOlxuICpcbiAqICAgICBpZiAodGV4dHVyZS5oYXNMb2FkZWQpXG4ge1xuICogICAgICAgIC8vIHRleHR1cmUgcmVhZHkgZm9yIHVzZVxuICogICAgIH0gZWxzZSBpZiAodGV4dHVyZS5pc0xvYWRpbmcpXG4ge1xuICogICAgICAgIC8vIGxpc3RlbiB0byAnbG9hZGVkJyBhbmQvb3IgJ2Vycm9yJyBldmVudHMgb24gdGV4dHVyZVxuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAgLy8gbm90IGxvYWRpbmcsIG5vdCBnb2luZyB0byBsb2FkIFVOTEVTUyB0aGUgc291cmNlIGlzIHJlbG9hZGVkXG4gKiAgICAgICAgLy8gKGl0IG1heSBzdGlsbCBtYWtlIHNlbnNlIHRvIGxpc3RlbiB0byB0aGUgZXZlbnRzKVxuICogICAgIH1cbiAqXG4gKiBAcHJvdGVjdGVkXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUubG9hZFNvdXJjZSA9IGZ1bmN0aW9uIChzb3VyY2UpXG57XG4gICAgdmFyIHdhc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZztcbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAod2FzTG9hZGluZyAmJiB0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc291cmNlLm9uZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgLy8gQXBwbHkgc291cmNlIGlmIGxvYWRlZC4gT3RoZXJ3aXNlIHNldHVwIGFwcHJvcHJpYXRlIGxvYWRpbmcgbW9uaXRvcnMuXG4gICAgaWYgKCh0aGlzLnNvdXJjZS5jb21wbGV0ZSB8fCB0aGlzLnNvdXJjZS5nZXRDb250ZXh0KSAmJiB0aGlzLnNvdXJjZS53aWR0aCAmJiB0aGlzLnNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNvdXJjZS5nZXRDb250ZXh0KVxuICAgIHtcblxuICAgICAgICAvLyBJbWFnZSBmYWlsIC8gbm90IHJlYWR5XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuXG4gICAgICAgIHNvdXJjZS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgc2NvcGUuZW1pdCgnbG9hZGVkJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvdXJjZS5vbmVycm9yID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5lbWl0KCdlcnJvcicsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQZXIgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjdGhlLWltZy1lbGVtZW50XG4gICAgICAgIC8vICAgXCJUaGUgdmFsdWUgb2YgYGNvbXBsZXRlYCBjYW4gdGh1cyBjaGFuZ2Ugd2hpbGUgYSBzY3JpcHQgaXMgZXhlY3V0aW5nLlwiXG4gICAgICAgIC8vIFNvIGNvbXBsZXRlIG5lZWRzIHRvIGJlIHJlLWNoZWNrZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gYWRkZWQuLlxuICAgICAgICAvLyBOT1RFOiBjb21wbGV0ZSB3aWxsIGJlIHRydWUgaWYgdGhlIGltYWdlIGhhcyBubyBzcmMgc28gYmVzdCB0byBjaGVjayBpZiB0aGUgc3JjIGlzIHNldC5cbiAgICAgICAgaWYgKHNvdXJjZS5jb21wbGV0ZSAmJiBzb3VyY2Uuc3JjKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyAuLmFuZCBpZiB3ZSdyZSBjb21wbGV0ZSBub3csIG5vIG5lZWQgZm9yIGNhbGxiYWNrc1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgc29tZSBvdGhlciB0cmFja2luZyB2YXJzIG9uY2VcbiAqIGEgc291cmNlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5fc291cmNlTG9hZGVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBiYXNlIHRleHR1cmVcbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5pbWFnZVVybClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuICAgICAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlLnNyYyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLnNvdXJjZS5fcGl4aUlkXTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG5cbiAgICB0aGlzLmRpc3Bvc2UoKTtcbn07XG5cbi8qKlxuICogRnJlZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTCBtZW1vcnkgd2l0aG91dCBkZXN0cm95aW5nIHRoaXMgdGV4dHVyZSBvYmplY3QuXG4gKiBUaGlzIG1lYW5zIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSB0ZXh0dXJlIGxhdGVyIHdoaWNoIHdpbGwgdXBsb2FkIGl0IHRvIEdQVVxuICogbWVtb3J5IGFnYWluLlxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIHRoaXMpO1xuXG4gICAgLy8gdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lZWRlZCwgdGhlIHJlbmRlcmVycyBzaG91bGQgY2xlYW51cCBhbGwgdGhlIGdsIHRleHR1cmVzLlxuICAgIC8vIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgc291cmNlIGltYWdlIG9mIHRoZSB0ZXh0dXJlLlxuICogVGhlIG9yaWdpbmFsIHNvdXJjZSBtdXN0IGJlIGFuIEltYWdlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5ld1NyYyB7c3RyaW5nfSB0aGUgcGF0aCBvZiB0aGUgaW1hZ2VcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNvdXJjZUltYWdlID0gZnVuY3Rpb24gKG5ld1NyYylcbntcbiAgICB0aGlzLnNvdXJjZS5zcmMgPSBuZXdTcmM7XG5cbiAgICB0aGlzLmxvYWRTb3VyY2UodGhpcy5zb3VyY2UpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIGJhc2UgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBTaG91bGQgdXNlIGFub255bW91cyBDT1JTPyBEZWZhdWx0cyB0byB0cnVlIGlmIHRoZSBVUkwgaXMgbm90IGEgZGF0YS1VUkkuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmIChjcm9zc29yaWdpbiA9PT0gdW5kZWZpbmVkICYmIGltYWdlVXJsLmluZGV4T2YoJ2RhdGE6JykgIT09IDApXG4gICAge1xuICAgICAgICBjcm9zc29yaWdpbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIC8vIG5ldyBJbWFnZSgpIGJyZWFrcyB0ZXggbG9hZGluZyBpbiBzb21lIHZlcnNpb25zIG9mIENocm9tZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMzgwNzFcbiAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgaWYgKGNyb3Nzb3JpZ2luKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoaW1hZ2UsIHNjYWxlTW9kZSk7XG4gICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgaW1hZ2Uuc3JjID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSBiYXNlVGV4dHVyZTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBAMnggYXQgdGhlIGVuZCBvZiB0aGUgdXJsIHdlIGFyZSBnb2luZyB0byBhc3N1bWUgaXRzIGEgaGlnaHJlcyBpbWFnZVxuICAgICAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKGltYWdlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFjYW52YXMuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGNhbnZhcy5fcGl4aUlkID0gJ2NhbnZhc18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG4iLCJ2YXIgQmFzZVJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VSZW5kZXJUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIFJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIFJlbmRlclRleHR1cmUgc2hvdWxkIGJlIHByZWxvYWRlZFxuICogb3RoZXJ3aXNlIGJsYWNrIHJlY3RhbmdsZXMgd2lsbCBiZSBkcmF3biBpbnN0ZWFkLlxuICpcbiAqIEEgUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCA4MDAsIDYwMCk7XG4gKiB2YXIgc3ByaXRlID0gUElYSS5TcHJpdGUuZnJvbUltYWdlKFwic3Bpbk9ial8wMS5wbmdcIik7XG4gKlxuICogc3ByaXRlLnBvc2l0aW9uLnggPSA4MDAvMjtcbiAqIHNwcml0ZS5wb3NpdGlvbi55ID0gNjAwLzI7XG4gKiBzcHJpdGUuYW5jaG9yLnggPSAwLjU7XG4gKiBzcHJpdGUuYW5jaG9yLnkgPSAwLjU7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiByZW5kZXJUZXh0dXJlXG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIGZvciB0aGlzIFJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIFJlbmRlclRleHR1cmUoYmFzZVJlbmRlclRleHR1cmUsIGZyYW1lKVxue1xuICAgIGlmICghcmVuZGVyZXIpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgb2JqZWN0IHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Jhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIFRleHR1cmUuY2FsbCh0aGlzLFxuICAgICAgICBiYXNlUmVuZGVyVGV4dHVyZSxcbiAgICAgICAgZnJhbWUgXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn1cblxuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmUucHJvdG90eXBlKTtcblJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGV4dHVyZTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIHVwZGF0ZUJhc2UpXG57XG4gICBcbiAgICAvL1RPRE8gLSBjb3VsZCBiZSBub3QgcmVxdWlyZWQuLlxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSB0aGlzLmNyb3Aud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNyb3AuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKHVwZGF0ZUJhc2UpXG4gICAge1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYmFzZVRleHR1cmUuY2xlYXIodGhpcy5mcmFtZSlcbiAgICBcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLnJlbmRlcih0aGlzLmZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRJbWFnZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuYmFzZVRleHR1cmUuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIFJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0QmFzZTY0ID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNlNjQuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIFJlbmRlclRleHR1cmUgdG8gaXQgYW5kIHRoZW4gcmV0dXJucyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gQSBDYW52YXMgZWxlbWVudCB3aXRoIHRoZSB0ZXh0dXJlIHJlbmRlcmVkIG9uLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldENhbnZhcyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVscyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVsKHRoaXMuZnJhbWUsIHgsIHkpO1xufTtcblxuUmVuZGVyVGV4dHVyZS5jcmVhdGUgPSBmdW5jdGlvbihyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHJldHVybiBuZXcgUmVuZGVyVGV4dHVyZShuZXcgQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbikpO1xufVxuXG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnMgPSByZXF1aXJlKCcuL1RleHR1cmVVdnMnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlIG9yIHBhcnQgb2YgYW4gaW1hZ2UuIEl0IGNhbm5vdCBiZSBhZGRlZFxuICogdG8gdGhlIGRpc3BsYXkgbGlzdCBkaXJlY3RseS4gSW5zdGVhZCB1c2UgaXQgYXMgdGhlIHRleHR1cmUgZm9yIGEgU3ByaXRlLiBJZiBubyBmcmFtZSBpcyBwcm92aWRlZCB0aGVuIHRoZSB3aG9sZSBpbWFnZSBpcyB1c2VkLlxuICpcbiAqIFlvdSBjYW4gZGlyZWN0bHkgY3JlYXRlIGEgdGV4dHVyZSBmcm9tIGFuIGltYWdlIGFuZCB0aGVuIHJldXNlIGl0IG11bHRpcGxlIHRpbWVzIGxpa2UgdGhpcyA6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZSgnYXNzZXRzL2ltYWdlLnBuZycpO1xuICogdmFyIHNwcml0ZTEgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiB2YXIgc3ByaXRlMiA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBiYXNlVGV4dHVyZSB7UElYSS5CYXNlVGV4dHVyZX0gVGhlIGJhc2UgdGV4dHVyZSBzb3VyY2UgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlIGZyb21cbiAqIEBwYXJhbSBbZnJhbWVdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3RhbmdsZSBmcmFtZSBvZiB0aGUgdGV4dHVyZSB0byBzaG93XG4gKiBAcGFyYW0gW2Nyb3BdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIGFyZWEgb2Ygb3JpZ2luYWwgdGV4dHVyZVxuICogQHBhcmFtIFt0cmltXSB7UElYSS5SZWN0YW5nbGV9IFRyaW1tZWQgdGV4dHVyZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBbcm90YXRlXSB7Ym9vbGVhbn0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlcyAoIHVzZWQgYnkgdGV4dHVyZSBwYWNrZXIgKVxuICovXG5mdW5jdGlvbiBUZXh0dXJlKGJhc2VUZXh0dXJlLCBmcmFtZSwgY3JvcCwgdHJpbSwgcm90YXRlKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogRG9lcyB0aGlzIFRleHR1cmUgaGF2ZSBhbnkgZnJhbWUgZGF0YSBhc3NpZ25lZCB0byBpdD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5ub0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VUZXh0dXJlIGluc3RhbmNlb2YgVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0cmltIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLnRyaW0gPSB0cmltO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCB0aGUgcmVuZGVyZXIga25vdyBpZiB0aGUgdGV4dHVyZSBpcyB2YWxpZC4gSWYgaXQncyBub3QgdGhlbiBpdCBjYW5ub3QgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgYSByZW5kZXJlciBrbm93IHRoYXQgYSB0ZXh0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgKHVzZWQgbWFpbmx5IGZvciB3ZWJHTCB1diB1cGRhdGVzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVpcmVzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgVVYgZGF0YSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgYXJlYSBvZiB0aGUgQmFzZVRleHR1cmUgaW1hZ2UgdG8gYWN0dWFsbHkgY29weSB0byB0aGUgQ2FudmFzIC8gV2ViR0wgd2hlbiByZW5kZXJpbmcsXG4gICAgICogaXJyZXNwZWN0aXZlIG9mIHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBvciBwbGFjZW1lbnQgKHdoaWNoIGNhbiBiZSBpbmZsdWVuY2VkIGJ5IHRyaW1tZWQgdGV4dHVyZSBhdGxhc2VzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jcm9wID0gY3JvcCB8fCBmcmFtZTsvL25ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdGF0ZSA9ICEhcm90YXRlO1xuXG4gICAgaWYgKGJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBmcmFtZSB3ZSBzaG91bGQgbW9uaXRvciBmb3IgYW55IGJhc2UgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlLm9uY2UoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZyYW1lIG9yIHRoZSBiYXNlVGV4dHVyZSBpcyB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICovXG4gICAgZnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgICAgICAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50cmltICYmICF0aGlzLnJvdGF0ZSAmJiAoZnJhbWUueCArIGZyYW1lLndpZHRoID4gdGhpcy5iYXNlVGV4dHVyZS53aWR0aCB8fCBmcmFtZS55ICsgZnJhbWUuaGVpZ2h0ID4gdGhpcy5iYXNlVGV4dHVyZS5oZWlnaHQpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dHVyZSBFcnJvcjogZnJhbWUgZG9lcyBub3QgZml0IGluc2lkZSB0aGUgYmFzZSBUZXh0dXJlIGRpbWVuc2lvbnMgJyArIHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5zb3VyY2UgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50cmltKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wID0gZnJhbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlcyB0aGlzIHRleHR1cmUgb24gdGhlIGdwdS5cbiAqXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5iYXNlVGV4dHVyZS51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyBsb2FkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlTG9hZGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIC8vIFRPRE8gdGhpcyBjb2RlIGxvb2tzIGNvbmZ1c2luZy4uIGJvbyB0byBhYnVzaW5nIGdldHRlcnMgYW5kIHNldHRlcnNzIVxuICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy5fZnJhbWU7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyB1cGRhdGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZVVwZGF0ZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSBiYXNlVGV4dHVyZS53aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSBiYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlPWZhbHNlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlKVxue1xuICAgIGlmICh0aGlzLmJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGRlc3Ryb3lCYXNlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG4gICAgdGhpcy50cmltID0gbnVsbDtcbiAgICB0aGlzLmNyb3AgPSBudWxsO1xuXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UsIHRoaXMpO1xuICAgIHRoaXMub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGV4dHVyZSBvYmplY3QgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLmZyYW1lLCB0aGlzLmNyb3AsIHRoaXMudHJpbSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5fdXBkYXRlVXZzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuX3V2cylcbiAgICB7XG4gICAgICAgIHRoaXMuX3V2cyA9IG5ldyBUZXh0dXJlVXZzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXZzLnNldCh0aGlzLmNyb3AsIHRoaXMuYmFzZVRleHR1cmUsIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFRleHR1cmUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSAgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gY3Jvc3NvcmlnaW4ge2Jvb2xlYW59IFdoZXRoZXIgcmVxdWVzdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY3Jvc3NvcmlnaW5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21JbWFnZShpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xuICAgICAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gdGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICh0eXBlb2YgdmlkZW8gPT09ICdzdHJpbmcnKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFRleHR1cmUuZnJvbVZpZGVvVXJsKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSB2aWRlbyB1cmwuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvVXJsIHtzdHJpbmd9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW9VcmwgPSBmdW5jdGlvbiAodmlkZW9VcmwsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHZpZGVvVXJsLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIHRleHR1cmUgdG8gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuIFRoaXMgY2FjaGUgaXMgc2hhcmVkIGFjcm9zcyB0aGUgd2hvbGUgUElYSSBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIFRleHR1cmUgdG8gYWRkIHRvIHRoZSBjYWNoZS5cbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIGJlIHN0b3JlZCBhZ2FpbnN0LlxuICovXG5UZXh0dXJlLmFkZFRleHR1cmVUb0NhY2hlID0gZnVuY3Rpb24gKHRleHR1cmUsIGlkKVxue1xuICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpZF0gPSB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB0ZXh0dXJlIGZyb20gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCBvZiB0aGUgdGV4dHVyZSB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRoYXQgd2FzIHJlbW92ZWRcbiAqL1xuVGV4dHVyZS5yZW1vdmVUZXh0dXJlRnJvbUNhY2hlID0gZnVuY3Rpb24gKGlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBBbiBlbXB0eSB0ZXh0dXJlLCB1c2VkIG9mdGVuIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBtdWx0aXBsZSBlbXB0eSB0ZXh0dXJlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZS5FTVBUWSA9IG5ldyBUZXh0dXJlKG5ldyBCYXNlVGV4dHVyZSgpKTtcbiIsIlxuLyoqXG4gKiBBIHN0YW5kYXJkIG9iamVjdCB0byBzdG9yZSB0aGUgVXZzIG9mIGEgdGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmVVdnMoKVxue1xuICAgIHRoaXMueDAgPSAwO1xuICAgIHRoaXMueTAgPSAwO1xuXG4gICAgdGhpcy54MSA9IDE7XG4gICAgdGhpcy55MSA9IDA7XG5cbiAgICB0aGlzLngyID0gMTtcbiAgICB0aGlzLnkyID0gMTtcblxuICAgIHRoaXMueDMgPSAwO1xuICAgIHRoaXMueTMgPSAxO1xuXG4gICAgdGhpcy54eTBfdWludDMyID0gMDtcbiAgICB0aGlzLnh5MV91aW50MzIgPSAwO1xuICAgIHRoaXMueHkyX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTNfdWludDMyID0gMDtcblxuICAgIHRoaXMudXZzX3VpbnQzMiA9IG5ldyBVaW50MzJBcnJheSg0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVVdnM7XG5cbi8qKlxuICogU2V0cyB0aGUgdGV4dHVyZSBVdnMgYmFzZWQgb24gdGhlIGdpdmVuIGZyYW1lIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gZnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIGJhc2VGcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gcm90YXRlIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgcm90YXRlZFxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZVV2cy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZyYW1lLCBiYXNlRnJhbWUsIHJvdGF0ZSlcbntcbiAgICB2YXIgdHcgPSBiYXNlRnJhbWUud2lkdGg7XG4gICAgdmFyIHRoID0gYmFzZUZyYW1lLmhlaWdodDtcblxuICAgIGlmKHJvdGF0ZSlcbiAgICB7XG4gICAgICAgIHRoaXMueDAgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSBmcmFtZS55IC8gdGg7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy54MCA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcbiAgICB9XG5cbiAgICB0aGlzLnV2c191aW50MzJbMF0gPSAoKCh0aGlzLnkwICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDAgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsxXSA9ICgoKHRoaXMueTEgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MSAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzJdID0gKCgodGhpcy55MiAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngyICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbM10gPSAoKCh0aGlzLnkzICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDMgKiA2NTUzNSkgJiAweEZGRkYpO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIG9mIGEgW3BsYXlpbmddIFZpZGVvLlxuICpcbiAqIFZpZGVvIGJhc2UgdGV4dHVyZXMgbWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QgaW4gdGhlaXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNldmVyYWwgd2F5cywgc3VjaCBhczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCgnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHsgc3JjOiAnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9KTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbJy92aWRlby53ZWJtJywgJy92aWRlby5tcDQnXSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoW1xuICogICAgIHsgc3JjOiAnL3ZpZGVvLndlYm0nLCBtaW1lOiAndmlkZW8vd2VibScgfSxcbiAqICAgICB7IHNyYzogJy92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9XG4gKiBdKTtcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgW1wiZGV1c1wiIGRlbW9dKGh0dHA6Ly93d3cuZ29vZGJveWRpZ2l0YWwuY29tL3BpeGlqcy9leGFtcGxlcy9kZXVzLykuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkJhc2VUZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gVmlkZW9CYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmlkZW8gc291cmNlIGVsZW1lbnQgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIC8vIGhvb2sgaW4gaGVyZSB0byBjaGVjayBpZiB2aWRlbyBpcyBhbHJlYWR5IGF2YWlsYWJsZS5cbiAgICAvLyBCYXNlVGV4dHVyZSBsb29rcyBmb3IgYSBzb3VyY2UuY29tcGxldGUgYm9vbGVhbiwgcGx1cyB3aWR0aCAmIGhlaWdodC5cblxuICAgIGlmICgoc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0VOT1VHSF9EQVRBIHx8IHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9GVVRVUkVfREFUQSkgJiYgc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICBzb3VyY2UuY29tcGxldGUgPSB0cnVlO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgc291cmNlLCBzY2FsZU1vZGUpO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBiYXNlIHRleHR1cmUgYXV0b21hdGljYWxseSB1cGRhdGUgaXRzZWxmLCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX29uVXBkYXRlID0gdGhpcy5fb25VcGRhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkNhblBsYXkgPSB0aGlzLl9vbkNhblBsYXkuYmluZCh0aGlzKTtcblxuICAgIGlmICghc291cmNlLmNvbXBsZXRlKVxuICAgIHtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIC8vIHN0YXJ0ZWQgcGxheWluZy4uXG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fb25QbGF5U3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX29uUGxheVN0b3AuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fX2xvYWRlZCA9IGZhbHNlO1xufVxuXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZVRleHR1cmUucHJvdG90eXBlKTtcblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmlkZW9CYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9CYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3Agb2YgdGhlIHZpZGVvIGJhc2UgdGV4dHVyZSwgb25seSBydW5zIHdoZW4gYXV0b1VwZGF0ZSBpcyBzZXQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUnVucyB0aGUgdXBkYXRlIGxvb3Agd2hlbiB0aGUgdmlkZW8gaXMgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBwYXVzZSBldmVudCBpcyB0cmlnZ2VyZWQsIHN0b3BzIHRoZSB1cGRhdGUgbG9vcFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgdmlkZW8gaXMgbG9hZGVkIGFuZCByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uQ2FuUGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2UudmlkZW9XaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnNvdXJjZS52aWRlb0hlaWdodDtcblxuICAgICAgICB0aGlzLnNvdXJjZS5wbGF5KCk7XG5cbiAgICAgICAgLy8gcHJldmVudCBtdWx0aXBsZSBsb2FkZWQgZGlzcGF0Y2hlcy4uXG4gICAgICAgIGlmICghdGhpcy5fX2xvYWRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHRoaXMuc291cmNlLl9waXhpSWQgXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlLl9waXhpSWQ7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogTWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXZpZGVvLl9waXhpSWQpXG4gICAge1xuICAgICAgICB2aWRlby5fcGl4aUlkID0gJ3ZpZGVvXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3ZpZGVvLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IFZpZGVvQmFzZVRleHR1cmUodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHZpZGVvLl9waXhpSWQgXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBCYXNlVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqIFRoaXMgQmFzZVRleHR1cmUgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYSB0ZXh0dXJlXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvU3JjIHtzdHJpbmd8b2JqZWN0fHN0cmluZ1tdfG9iamVjdFtdfSBUaGUgVVJMKHMpIGZvciB0aGUgdmlkZW8uXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLnNyY10ge3N0cmluZ30gT25lIG9mIHRoZSBzb3VyY2UgdXJscyBmb3IgdGhlIHZpZGVvXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLm1pbWVdIHtzdHJpbmd9IFRoZSBtaW1ldHlwZSBvZiB0aGUgdmlkZW8gKGUuZy4gJ3ZpZGVvL21wNCcpLiBJZiBub3Qgc3BlY2lmaWVkXG4gKiAgdGhlIHVybCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBtaW1lIHR5cGUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwgPSBmdW5jdGlvbiAodmlkZW9TcmMsIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXG4gICAgLy8gYXJyYXkgb2Ygb2JqZWN0cyBvciBzdHJpbmdzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW9TcmMpKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWRlb1NyYy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjW2ldLnNyYyB8fCB2aWRlb1NyY1tpXSwgdmlkZW9TcmNbaV0ubWltZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNpbmdsZSBvYmplY3Qgb3Igc3RyaW5nXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjLnNyYyB8fCB2aWRlb1NyYywgdmlkZW9TcmMubWltZSkpO1xuICAgIH1cblxuICAgIHZpZGVvLmxvYWQoKTtcbiAgICB2aWRlby5wbGF5KCk7XG5cbiAgICByZXR1cm4gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSk7XG59O1xuXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzID0gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsO1xuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2UocGF0aCwgdHlwZSlcbntcbiAgICBpZiAoIXR5cGUpXG4gICAge1xuICAgICAgICB0eXBlID0gJ3ZpZGVvLycgKyBwYXRoLnN1YnN0cihwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gcGF0aDtcbiAgICBzb3VyY2UudHlwZSA9IHR5cGU7XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgLy8gSW50ZXJuYWwgZXZlbnQgdXNlZCBieSBjb21wb3NlZCBlbWl0dGVyXG4gICAgVElDSyA9ICd0aWNrJztcblxuLyoqXG4gKiBBIFRpY2tlciBjbGFzcyB0aGF0IHJ1bnMgYW4gdXBkYXRlIGxvb3AgdGhhdCBvdGhlciBvYmplY3RzIGxpc3RlbiB0by5cbiAqIFRoaXMgY2xhc3MgaXMgY29tcG9zZWQgYXJvdW5kIGFuIEV2ZW50RW1pdHRlciBvYmplY3QgdG8gYWRkIGxpc3RlbmVyc1xuICogbWVhbnQgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lLlxuICogQW5pbWF0aW9uIGZyYW1lcyBhcmUgcmVxdWVzdGVkIG9ubHkgd2hlbiBuZWNlc3NhcnksXG4gKiBlLmcuIFdoZW4gdGhlIHRpY2tlciBpcyBzdGFydGVkIGFuZCB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbmZ1bmN0aW9uIFRpY2tlcigpXG57XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRpY2sgbWV0aG9kIGJvdW5kIHRvIHRpY2tlciBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaW4gZWFybHkgMjAxNSwgRnVuY3Rpb24uYmluZFxuICAgICAqIGlzIHN0aWxsIDYwJSBzbG93ZXIgaW4gaGlnaCBwZXJmb3JtYW5jZSBzY2VuYXJpb3MuXG4gICAgICogQWxzbyBzZXBhcmF0aW5nIGZyYW1lIHJlcXVlc3RzIGZyb20gdXBkYXRlIG1ldGhvZFxuICAgICAqIHNvIGxpc3RlbmVycyBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGFuZCB3aXRoXG4gICAgICogYW55IGFuaW1hdGlvbiBBUEksIGp1c3QgaW52b2tlIHRpY2tlci51cGRhdGUodGltZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RpY2sgPSBmdW5jdGlvbiBfdGljayh0aW1lKSB7XG5cbiAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgbm93XG4gICAgICAgICAgICBfdGhpcy51cGRhdGUodGltZSk7XG4gICAgICAgICAgICAvLyBMaXN0ZW5lciBzaWRlIGVmZmVjdHMgbWF5IGhhdmUgbW9kaWZpZWQgdGlja2VyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQgJiYgX3RoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiBfdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fdGljayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZW1pdHRlciB1c2VkIHRvIGZpcmUgJ3RpY2snIGV2ZW50XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9lbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY3VycmVudCBmcmFtZSByZXF1ZXN0IElEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdmFsdWUgbWFuYWdlZCBieSBtaW5GUFMgcHJvcGVydHkgc2V0dGVyIGFuZCBnZXR0ZXIuXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHVwZGF0ZXMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBzaG91bGQgaW52b2tlIHRoZSBtZXRob2RcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBhdXRvbWF0aWNhbGx5XG4gICAgICogd2hlbiBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1N0YXJ0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTY2FsYXIgdGltZSB2YWx1ZSBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbWluRlBTfVxuICAgICAqIGFuZCBpcyBzY2FsZWQgd2l0aCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfS5cbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhcCBtYXkgYmUgZXhjZWVkZWQgYnkgc2NhbGluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kZWx0YVRpbWUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGltZSBlbGFwc2VkIGluIG1pbGxpc2Vjb25kcyBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBPcHBvc2VkIHRvIHdoYXQgdGhlIHNjYWxhciB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX1cbiAgICAgKiBpcyBiYXNlZCwgdGhpcyB2YWx1ZSBpcyBuZWl0aGVyIGNhcHBlZCBub3Igc2NhbGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMSAvIFRBUkdFVF9GUE1TXG4gICAgICovXG4gICAgdGhpcy5lbGFwc2VkTVMgPSAxIC8gQ09OU1QuVEFSR0VUX0ZQTVM7IC8vIGRlZmF1bHQgdG8gdGFyZ2V0IGZyYW1lIHRpbWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBsYXN0IHRpbWUge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9IHdhcyBpbnZva2VkLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgYWxzbyByZXNldCBpbnRlcm5hbGx5IG91dHNpZGUgb2YgaW52b2tpbmdcbiAgICAgKiB1cGRhdGUsIGJ1dCBvbmx5IHdoZW4gYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxhc3RUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEZhY3RvciBvZiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNjYWxlcyB0aWNrZXIuZGVsdGFUaW1lIHRvIHdoYXQgd291bGQgYmVcbiAgICAgKiAvLyB0aGUgZXF1aXZhbGVudCBvZiBhcHByb3hpbWF0ZWx5IDEyMCBGUFNcbiAgICAgKiB0aWNrZXIuc3BlZWQgPSAyO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICogYHRydWVgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBgZmFsc2VgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RvcH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIFdoaWxlIGBmYWxzZWAsIHRoaXMgdmFsdWUgbWF5IGNoYW5nZSB0byBgdHJ1ZWAgaW4gdGhlXG4gICAgICogZXZlbnQgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGJlaW5nIGB0cnVlYFxuICAgICAqIGFuZCBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWNrZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lcyBwZXIgc2Vjb25kIGF0IHdoaWNoIHRoaXMgdGlja2VyIGlzIHJ1bm5pbmcuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgYXBwcm94aW1hdGVseSA2MCBpbiBtb3N0IG1vZGVybiBicm93c2Vycy5cbiAgICAgKiAqKk5vdGU6KiogVGhpcyBkb2VzIG5vdCBmYWN0b3IgaW4gdGhlIHZhbHVlIG9mXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0sIHdoaWNoIGlzIHNwZWNpZmljXG4gICAgICogdG8gc2NhbGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBGUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5lbGFwc2VkTVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGFsbG93ZWQgdG9cbiAgICAgKiBlbGFwc2UgYmV0d2VlbiBpbnZva2luZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0uXG4gICAgICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNhcCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gICAgICogYnV0IGRvZXMgbm90IGVmZmVjdCB0aGUgbWVhc3VyZWQgdmFsdWUgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNGUFN9LlxuICAgICAqIFdoZW4gc2V0dGluZyB0aGlzIHByb3BlcnR5IGl0IGlzIGNsYW1wZWQgdG8gYSB2YWx1ZSBiZXR3ZWVuXG4gICAgICogYDBgIGFuZCBgUElYSS5UQVJHRVRfRlBNUyAqIDEwMDBgLlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICBtaW5GUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZwcylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gQ2xhbXA6IDAgdG8gVEFSR0VUX0ZQTVNcbiAgICAgICAgICAgIHZhciBtaW5GUE1TID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZnBzKSAvIDEwMDAsIENPTlNULlRBUkdFVF9GUE1TKTtcbiAgICAgICAgICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEgLyBtaW5GUE1TO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbFxuICogZW1pdHRlciBoYXMgbGlzdGVuZXJzLCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fcmVxdWVzdElmTmVlZGVkID0gZnVuY3Rpb24gX3JlcXVlc3RJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiB0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIC8vIGVuc3VyZSBjYWxsYmFja3MgZ2V0IGNvcnJlY3QgZGVsdGFcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fdGljayk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IGNhbmNlbHMgYSBwZW5kaW5nIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9jYW5jZWxJZk5lZWRlZCA9IGZ1bmN0aW9uIF9jYW5jZWxJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIHRoZSB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZCBpdCBjaGVja3MgaWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHlcbiAqIGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy4gSWYgdGhlc2VcbiAqIGNvbmRpdGlvbnMgYXJlIG1ldCwgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgdGlja2VyIGhhcyBub3RcbiAqIGJlZW4gc3RhcnRlZCwgYnV0IGF1dG9TdGFydCBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHRpY2tlciBzdGFydHMgbm93LFxuICogYW5kIGNvbnRpbnVlcyB3aXRoIHRoZSBwcmV2aW91cyBjb25kaXRpb25zIHRvIHJlcXVlc3QgYSBuZXcgZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fc3RhcnRJZlBvc3NpYmxlID0gZnVuY3Rpb24gX3N0YXJ0SWZQb3NzaWJsZSgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmF1dG9TdGFydClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb259IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIHVwZGF0ZXNcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb25jZX0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3Igb25lIHVwZGF0ZVxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIGFkZE9uY2UoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbmNlKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb2ZmfSBpbnRlcm5hbGx5IGZvciAndGljaycgZXZlbnQuXG4gKiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyBmb3IgJ3RpY2snIGV2ZW50LlxuICogSWYgaXQgZG9lcywgdGhlbiBpdCBjYW5jZWxzIHRoZSBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHBhcmFtIFtmbl0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZFxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0IHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vZmYoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgaWYgKCF0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyBsaXN0ZW5lcnNcbiAqIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIHN0YXJ0KClcbntcbiAgICBpZiAoIXRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgcmVxdWVzdGVkXG4gKiBhbiBhbmltYXRpb24gZnJhbWUgaXQgaXMgY2FuY2VsZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcCgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVHJpZ2dlcnMgYW4gdXBkYXRlLiBBbiB1cGRhdGUgZW50YWlscyBzZXR0aW5nIHRoZVxuICogY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2VsYXBzZWRNU30sXG4gKiB0aGUgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gKiBpbnZva2luZyBhbGwgbGlzdGVuZXJzIHdpdGggY3VycmVudCBkZWx0YVRpbWUsXG4gKiBhbmQgdGhlbiBmaW5hbGx5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNsYXN0VGltZX1cbiAqIHdpdGggdGhlIHZhbHVlIG9mIGN1cnJlbnRUaW1lIHRoYXQgd2FzIHByb3ZpZGVkLlxuICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBieSBhbmltYXRpb25cbiAqIGZyYW1lIGNhbGxiYWNrcyBpZiB0aGUgdGlja2VyIGluc3RhbmNlIGhhcyBiZWVuIHN0YXJ0ZWRcbiAqIGFuZCBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSBbY3VycmVudFRpbWU9cGVyZm9ybWFuY2Uubm93KCldIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn0gdGhlIGN1cnJlbnQgdGltZSBvZiBleGVjdXRpb25cbiAqL1xuVGlja2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoY3VycmVudFRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWRNUztcblxuICAgIC8vIEFsbG93IGNhbGxpbmcgdXBkYXRlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBjdXJyZW50VGltZS5cbiAgICBjdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIHx8IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIC8vIFNhdmUgdW5jYXBwZWQgZWxhcHNlZE1TIGZvciBtZWFzdXJlbWVudFxuICAgIGVsYXBzZWRNUyA9IHRoaXMuZWxhcHNlZE1TID0gY3VycmVudFRpbWUgLSB0aGlzLmxhc3RUaW1lO1xuXG4gICAgLy8gY2FwIHRoZSBtaWxsaXNlY29uZHMgZWxhcHNlZCB1c2VkIGZvciBkZWx0YVRpbWVcbiAgICBpZiAoZWxhcHNlZE1TID4gdGhpcy5fbWF4RWxhcHNlZE1TKVxuICAgIHtcbiAgICAgICAgZWxhcHNlZE1TID0gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgIH1cblxuICAgIHRoaXMuZGVsdGFUaW1lID0gZWxhcHNlZE1TICogQ09OU1QuVEFSR0VUX0ZQTVMgKiB0aGlzLnNwZWVkO1xuXG4gICAgLy8gSW52b2tlIGxpc3RlbmVycyBhZGRlZCB0byBpbnRlcm5hbCBlbWl0dGVyXG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KFRJQ0ssIHRoaXMuZGVsdGFUaW1lKTtcblxuICAgIHRoaXMubGFzdFRpbWUgPSBjdXJyZW50VGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGlja2VyO1xuIiwidmFyIFRpY2tlciA9IHJlcXVpcmUoJy4vVGlja2VyJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZCB0aWNrZXIgaW5zdGFuY2UgdXNlZCBieSB7QGxpbmsgUElYSS5leHRyYXMuTW92aWVDbGlwfS5cbiAqIGFuZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICogVGhlIHByb3BlcnR5IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBpcyBzZXQgdG8gYHRydWVgXG4gKiBmb3IgdGhpcyBpbnN0YW5jZS4gUGxlYXNlIGZvbGxvdyB0aGUgZXhhbXBsZXMgZm9yIHVzYWdlLCBpbmNsdWRpbmdcbiAqIGhvdyB0byBvcHQtb3V0IG9mIGF1dG8tc3RhcnRpbmcgdGhlIHNoYXJlZCB0aWNrZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciB0aWNrZXIgPSBQSVhJLnRpY2tlci5zaGFyZWQ7XG4gKiAvLyBTZXQgdGhpcyB0byBwcmV2ZW50IHN0YXJ0aW5nIHRoaXMgdGlja2VyIHdoZW4gbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqIC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyB0cnVlIG9ubHkgZm9yIHRoZSBQSVhJLnRpY2tlci5zaGFyZWQgaW5zdGFuY2UuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiAvLyBGWUksIGNhbGwgdGhpcyB0byBlbnN1cmUgdGhlIHRpY2tlciBpcyBzdG9wcGVkLiBJdCBzaG91bGQgYmUgc3RvcHBlZFxuICogLy8gaWYgeW91IGhhdmUgbm90IGF0dGVtcHRlZCB0byByZW5kZXIgYW55dGhpbmcgeWV0LlxuICogdGlja2VyLnN0b3AoKTtcbiAqIC8vIENhbGwgdGhpcyB3aGVuIHlvdSBhcmUgcmVhZHkgZm9yIGEgcnVubmluZyBzaGFyZWQgdGlja2VyLlxuICogdGlja2VyLnN0YXJ0KCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFlvdSBtYXkgdXNlIHRoZSBzaGFyZWQgdGlja2VyIHRvIHJlbmRlci4uLlxuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoODAwLCA2MDApO1xuICogdmFyIHN0YWdlID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiB2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIpO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZW5kZXJlci52aWV3KTtcbiAqIHRpY2tlci5hZGQoZnVuY3Rpb24gKHRpbWUpIHtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE9yIHlvdSBjYW4ganVzdCB1cGRhdGUgaXQgbWFudWFsbHkuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiB0aWNrZXIuc3RvcCgpO1xuICogZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XG4gKiAgICAgdGlja2VyLnVwZGF0ZSh0aW1lKTtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAqIH1cbiAqIGFuaW1hdGUocGVyZm9ybWFuY2Uubm93KCkpO1xuICpcbiAqIEB0eXBlIHtQSVhJLnRpY2tlci5UaWNrZXJ9XG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xudmFyIHNoYXJlZCA9IG5ldyBUaWNrZXIoKTtcbnNoYXJlZC5hdXRvU3RhcnQgPSB0cnVlO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS50aWNrZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc2hhcmVkOiBzaGFyZWQsXG4gICAgVGlja2VyOiBUaWNrZXJcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gZnVuY3Rpb24gKHNpemUpXG57XG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBhcnJheSwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgXG4gICAgdmFyIHRvdGFsSW5kaWNlcyA9IHNpemUgKiA2O1xuXG4gICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodG90YWxJbmRpY2VzKTtcblxuXHQvLyBmaWxsIHRoZSBpbmRpY2VzIHdpdGggdGhlIHF1YWRzIHRvIGRyYXdcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IHRvdGFsSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICBpbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICBpbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHM7IiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudXRpbHNcbiAqL1xudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgX3VpZDogMCxcbiAgICBfc2FpZEhlbGxvOiBmYWxzZSxcblxuICAgIEV2ZW50RW1pdHRlcjogICByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgcGx1Z2luVGFyZ2V0OiAgIHJlcXVpcmUoJy4vcGx1Z2luVGFyZ2V0JyksXG4gICAgYXN5bmM6ICAgICAgICAgIHJlcXVpcmUoJ2FzeW5jJyksXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZS5cbiAgICAgKi9cbiAgICB1aWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICByZXR1cm4gKyt1dGlscy5fdWlkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYW4gW1IsIEcsIEJdIGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHBhcmFtICB7bnVtYmVyW119IFtvdXQ9W11dXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgW1IsIEcsIEJdIG9mIHRoZSBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgycmdiOiBmdW5jdGlvbiAoaGV4LCBvdXQpXG4gICAge1xuICAgICAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICAgICAgb3V0WzBdID0gKGhleCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMV0gPSAoaGV4ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzJdID0gKGhleCAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnN0cmluZzogZnVuY3Rpb24gKGhleClcbiAgICB7XG4gICAgICAgIGhleCA9IGhleC50b1N0cmluZygxNik7XG4gICAgICAgIGhleCA9ICcwMDAwMDAnLnN1YnN0cigwLCA2IC0gaGV4Lmxlbmd0aCkgKyBoZXg7XG5cbiAgICAgICAgcmV0dXJuICcjJyArIGhleDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkgdG8gYSBoZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmdiIHtudW1iZXJbXX1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb2xvciBudW1iZXJcbiAgICAgKi9cbiAgICByZ2IyaGV4OiBmdW5jdGlvbiAocmdiKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgocmdiWzBdKjI1NSA8PCAxNikgKyAocmdiWzFdKjI1NSA8PCA4KSArIHJnYlsyXSoyNTUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZFxuICAgICAqL1xuICAgIGNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXM6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBuZ0hlYWQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFCQVFNQUFBREQ4cDJPQUFBQUExQk1WRVgvJztcbiAgICAgICAgdmFyIHBuZ0VuZCA9ICdBQUFBQ2tsRVFWUUkxMk5nQUFBQUFnQUI0aUc4TXdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG4gICAgICAgIHZhciBtYWdlbnRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSA2O1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcblxuICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1hZ2VudGEsIDAsIDApO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh5ZWxsb3csIDIsIDApO1xuXG4gICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwwLDEsMSkuZGF0YTtcblxuICAgICAgICByZXR1cm4gKGRhdGFbMF0gPT09IDI1NSAmJiBkYXRhWzFdID09PSAwICYmIGRhdGFbMl0gPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIG51bWJlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICogdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIFN0YXJsaW5nIEZyYW1ld29yayBhcyBpdHMgcHJldHR5IG5lYXQgOylcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICovXG4gICAgZ2V0TmV4dFBvd2VyT2ZUd286IGZ1bmN0aW9uIChudW1iZXIpXG4gICAge1xuICAgICAgICAvLyBzZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG93ZXJfb2ZfdHdvI0Zhc3RfYWxnb3JpdGhtX3RvX2NoZWNrX2lmX2FfcG9zaXRpdmVfbnVtYmVyX2lzX2FfcG93ZXJfb2ZfdHdvXG4gICAgICAgIGlmIChudW1iZXIgPiAwICYmIChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDE7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPCBudW1iZXIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzdWx0IDw8PSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBtYWtlIGEgcG93ZXIgb2YgdHdvIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9XG4gICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybiAod2lkdGggPiAwICYmICh3aWR0aCAmICh3aWR0aCAtIDEpKSA9PT0gMCAmJiBoZWlnaHQgPiAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIGFuIGFzc2V0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwcmVmaXhcbiAgICAgKiB1c2VkIGJ5IHNwcml0ZXNoZWV0cyBhbmQgaW1hZ2UgdXJsc1xuICAgICAqXG4gICAgICogQHBhcmFtIHVybCB7c3RyaW5nfSB0aGUgaW1hZ2UgcGF0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRSZXNvbHV0aW9uT2ZVcmw6IGZ1bmN0aW9uICh1cmwpXG4gICAge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IENPTlNULlJFVElOQV9QUkVGSVguZXhlYyh1cmwpO1xuXG4gICAgICAgIGlmIChyZXNvbHV0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlc29sdXRpb25bMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvZ3Mgb3V0IHRoZSB2ZXJzaW9uIGFuZCByZW5kZXJlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBydW5uaW5nIGluc3RhbmNlIG9mIFBJWEkuXG4gICAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoaXMgbWVzc2FnZSB5b3UgY2FuIHNldCBgUElYSS51dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtgXG4gICAgICogc28gdGhlIGxpYnJhcnkgdGhpbmtzIGl0IGFscmVhZHkgc2FpZCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgZG9pbmcgdGhhdCB3aWxsIGZvcmV2ZXJcbiAgICAgKiBtYWtlcyB5b3UgYSBqZXJrIGZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBzdHJpbmcgcmVuZGVyZXIgdHlwZSB0byBsb2cuXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIHNheUhlbGxvOiBmdW5jdGlvbiAodHlwZSlcbiAgICB7XG4gICAgICAgIGlmICh1dGlscy5fc2FpZEhlbGxvKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZScpID4gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW1xuICAgICAgICAgICAgICAgICdcXG4gJWMgJWMgJWMgUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSDinLAgJyArIHR5cGUgKyAnIOKcsCAgJWMgJyArICcgJWMgJyArICcgaHR0cDovL3d3dy5waXhpanMuY29tLyAgJWMgJWMg4pmlJWPimaUlY+KZpSBcXG5cXG4nLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjY2YTU7IGJhY2tncm91bmQ6ICMwMzAzMDc7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmZjM2RjOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7J1xuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3MpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1BpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0gJyArIHR5cGUgKyAnIC0gaHR0cDovL3d3dy5waXhpanMuY29tLycpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmb3IgY2hlY2tpbmcgZm9yIHdlYmdsIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNXZWJHTFN1cHBvcnRlZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHZhciBjb250ZXh0T3B0aW9ucyA9IHsgc3RlbmNpbDogdHJ1ZSB9O1xuICAgICAgICB0cnlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgY29udGV4dE9wdGlvbnMpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBjb250ZXh0T3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIShnbCAmJiBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnN0ZW5jaWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzaWduIG9mIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIG4ge251bWJlcn1cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIG4gaXMgMCwgLTEgaWYgbiBpcyBuZWdhdGl2ZSwgMSBpZiBuIGkgcG9zaXRpdmVcbiAgICAgKi9cbiAgICBzaWduOiBmdW5jdGlvbiAobilcbiAgICB7XG4gICAgICAgIHJldHVybiBuID8gKG4gPCAwID8gLTEgOiAxKSA6IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZUl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydElkeCBUaGUgaW5kZXggdG8gYmVnaW4gcmVtb3ZpbmcgZnJvbSAoaW5jbHVzaXZlKVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVJdGVtczogZnVuY3Rpb24gKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KVxuICAgIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN0YXJ0SWR4ID49IGxlbmd0aCB8fCByZW1vdmVDb3VudCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVtb3ZlQ291bnQgPSAoc3RhcnRJZHgrcmVtb3ZlQ291bnQgPiBsZW5ndGggPyBsZW5ndGgtc3RhcnRJZHggOiByZW1vdmVDb3VudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydElkeCwgbGVuID0gbGVuZ3RoLXJlbW92ZUNvdW50OyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyLmxlbmd0aCA9IGxlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge30sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge31cbn07XG4iLCIvKipcbiAqIE1peGlucyBmdW5jdGlvbmFsaXR5IHRvIG1ha2UgYW4gb2JqZWN0IGhhdmUgXCJwbHVnaW5zXCIuXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS51dGlsc1xuICogQHBhcmFtIG9iaiB7b2JqZWN0fSBUaGUgb2JqZWN0IHRvIG1peCBpbnRvLlxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgcGx1Z2luVGFyZ2V0Lm1peGluKE15T2JqZWN0KTtcbiAqL1xuZnVuY3Rpb24gcGx1Z2luVGFyZ2V0KG9iailcbntcbiAgICBvYmouX19wbHVnaW5zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcGx1Z2luIHRvIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHBsdWdpbk5hbWUge3N0cmluZ30gVGhlIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQuXG4gICAgICogQHBhcmFtIGN0b3Ige0Z1bmN0aW9ufSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBwbHVnaW4uXG4gICAgICovXG4gICAgb2JqLnJlZ2lzdGVyUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGN0b3IpXG4gICAge1xuICAgICAgICBvYmouX19wbHVnaW5zW3BsdWdpbk5hbWVdID0gY3RvcjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5pbml0UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLnBsdWdpbnMgfHwge307XG5cbiAgICAgICAgZm9yICh2YXIgbyBpbiBvYmouX19wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBuZXcgKG9iai5fX3BsdWdpbnNbb10pKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmRlc3Ryb3lQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGZvciAodmFyIG8gaW4gdGhpcy5wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG51bGw7XG4gICAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvKipcbiAgICAgKiBNaXhlcyBpbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGx1Z2luVGFyZ2V0IGludG8gYW5vdGhlciBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3Qge29iamVjdH0gVGhlIG9iaiB0byBtaXggaW50b1xuICAgICAqL1xuICAgIG1peGluOiBmdW5jdGlvbiBtaXhpbihvYmopXG4gICAge1xuICAgICAgICBwbHVnaW5UYXJnZXQob2JqKTtcbiAgICB9XG59O1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKSxcbiAgICBtZXNoID0gcmVxdWlyZSgnLi9tZXNoJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi9leHRyYXMnKSxcbiAgICBmaWx0ZXJzID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgU3ByaXRlQmF0Y2hcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkuUGFydGljbGVDb250YWluZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlQmF0Y2ggPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuJyk7XG59O1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIEFzc2V0TG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLmxvYWRlcnMuTG9hZGVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuQXNzZXRMb2FkZXIgPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy4nKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvcmUsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RhZ2VcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RhZ2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignWW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIFBJWEkgU3RhZ2UgYW55IG1vcmUsIHlvdSBjYW4gc2ltcGx5IHJlbmRlciBhbnkgY29udGFpbmVyLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgRGlzcGxheU9iamVjdENvbnRhaW5lclxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBEaXNwbGF5T2JqZWN0Q29udGFpbmVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Rpc3BsYXlPYmplY3RDb250YWluZXIgaGFzIGJlZW4gc2hvcnRlbmVkIHRvIENvbnRhaW5lciwgcGxlYXNlIHVzZSBDb250YWluZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdHJpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdHJpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgU3RyaXAgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBNZXNoIGFuZCBtb3ZlZCB0byBtZXNoLk1lc2gsIHBsZWFzZSB1c2UgbWVzaC5NZXNoIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guTWVzaDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFJvcGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLlJvcGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgUm9wZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgUm9wZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBtZXNoLlJvcGUsIHBsZWFzZSB1c2UgbWVzaC5Sb3BlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guUm9wZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIE1vdmllQ2xpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXBcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgTW92aWVDbGlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBNb3ZpZUNsaXAgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLk1vdmllQ2xpcCwgcGxlYXNlIHVzZSBleHRyYXMuTW92aWVDbGlwIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5Nb3ZpZUNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUaWxpbmdTcHJpdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRpbGluZ1Nwcml0ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGlsaW5nU3ByaXRlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5UaWxpbmdTcHJpdGUsIHBsZWFzZSB1c2UgZXh0cmFzLlRpbGluZ1Nwcml0ZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuVGlsaW5nU3ByaXRlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQml0bWFwVGV4dFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJpdG1hcFRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJpdG1hcFRleHQgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLkJpdG1hcFRleHQsIHBsZWFzZSB1c2UgZXh0cmFzLkJpdG1hcFRleHQgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLkJpdG1hcFRleHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBibGVuZE1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgYmxlbmRNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYmxlbmRNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBCTEVORF9NT0RFUywgcGxlYXNlIHVzZSBCTEVORF9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkJMRU5EX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2NhbGVNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIHNjYWxlTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHNjYWxlTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gU0NBTEVfTU9ERVMsIHBsZWFzZSB1c2UgU0NBTEVfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TQ0FMRV9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5CYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCYXNlVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuQmFzZVRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5UZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLlRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5UZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5UZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgbWF0aFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIG1hdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBtYXRoIG5hbWVzcGFjZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgYWNjZXNzIG1lbWJlcnMgYWxyZWFkeSBhY2Nlc3NpYmxlIG9uIFBJWEkuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBQSVhJLlNwcml0ZSNzZXRUZXh0dXJlXG4gKiBAc2VlIFBJWEkuU3ByaXRlI3RleHR1cmVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0dXJlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0dXJlIHByb3BlcnR5LCBlLmcgOiBzcHJpdGUudGV4dHVyZSA9IHRleHR1cmU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuZXh0cmFzLkJpdG1hcFRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteUJpdG1hcFRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15VGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFN0eWxlXG4gKiBAc2VlIFBJWEkuVGV4dCNzdHlsZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpXG57XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgIGNvbnNvbGUud2Fybignc2V0U3R5bGUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5LCBlLmcgOiBteVRleHQuc3R5bGUgPSBzdHlsZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAc2VlIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHR1cmUucHJvdG90eXBlLnNldEZyYW1lID0gZnVuY3Rpb24oZnJhbWUpXG57XG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIGNvbnNvbGUud2Fybignc2V0RnJhbWUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIGZyYW1lIHByb3BlcnR5LCBlLmcgOiBteVRleHR1cmUuZnJhbWUgPSBmcmFtZTsnKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpbHRlcnMsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkFic3RyYWN0RmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkFic3RyYWN0RmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEFic3RyYWN0RmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuQWJzdHJhY3RGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEFic3RyYWN0RmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQWJzdHJhY3RGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuRlhBQUZpbHRlclxuICAgICAqIEBzZWUgUElYSS5GWEFBRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEZYQUFGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5GWEFBRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBGWEFBRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuRlhBQUZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgU3ByaXRlTWFza0ZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIFNwcml0ZU1hc2tGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TcHJpdGVNYXNrRmlsdGVyO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS51dGlscy51dWlkXG4gKiBAc2VlIFBJWEkudXRpbHMudWlkXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gKi9cbmNvcmUudXRpbHMudXVpZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29uc29sZS53YXJuKCd1dGlscy51dWlkKCkgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB1dGlscy51aWQoKSBmcm9tIG5vdyBvbi4nKTtcbiAgICByZXR1cm4gY29yZS51dGlscy51aWQoKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIEJpdG1hcFRleHQgb2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0IHVzaW5nIGJpdG1hcCBmb250LiBUb1xuICogc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLCAnXFxyJyBvciAnXFxyXFxuJyBpbiB5b3VyIHN0cmluZy4gWW91IGNhbiBnZW5lcmF0ZSB0aGUgZm50IGZpbGVzIHVzaW5nOlxuICpcbiAqIEEgQml0bWFwVGV4dCBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGZvbnQgaXMgbG9hZGVkXG4gKlxuICogYGBganNcbiAqIC8vIGluIHRoaXMgY2FzZSB0aGUgZm9udCBpcyBpbiBhIGZpbGUgY2FsbGVkICdkZXN5cmVsLmZudCdcbiAqIHZhciBiaXRtYXBUZXh0ID0gbmV3IFBJWEkuZXh0cmFzLkJpdG1hcFRleHQoXCJ0ZXh0IHVzaW5nIGEgZmFuY3kgZm9udCFcIiwge2ZvbnQ6IFwiMzVweCBEZXN5cmVsXCIsIGFsaWduOiBcInJpZ2h0XCJ9KTtcbiAqIGBgYFxuICpcbiAqXG4gKiBodHRwOi8vd3d3LmFuZ2VsY29kZS5jb20vcHJvZHVjdHMvYm1mb250LyBmb3Igd2luZG93cyBvclxuICogaHR0cDovL3d3dy5ibWdseXBoLmNvbS8gZm9yIG1hYy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIHN0eWxlIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gc3R5bGUuZm9udCB7c3RyaW5nfG9iamVjdH0gVGhlIGZvbnQgZGVzY3JpcHRvciBmb3IgdGhlIG9iamVjdCwgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZyBvZiBmb3JtXG4gKiAgICAgIFwiMjRweCBGb250TmFtZVwiIG9yIFwiRm9udE5hbWVcIiBvciBhcyBhbiBvYmplY3Qgd2l0aCBleHBsaWNpdCBuYW1lL3NpemUgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5uYW1lXSB7c3RyaW5nfSBUaGUgYml0bWFwIGZvbnQgaWRcbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5zaXplXSB7bnVtYmVyfSBUaGUgc2l6ZSBvZiB0aGUgZm9udCBpbiBwaXhlbHMsIGUuZy4gMjRcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3RcbiAqICAgICAgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS50aW50PTB4RkZGRkZGXSB7bnVtYmVyfSBUaGUgdGludCBjb2xvclxuICovXG5mdW5jdGlvbiBCaXRtYXBUZXh0KHRleHQsIHN0eWxlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGxldHRlciBzcHJpdGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbHlwaHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mb250ID0ge1xuICAgICAgICB0aW50OiBzdHlsZS50aW50ICE9PSB1bmRlZmluZWQgPyBzdHlsZS50aW50IDogMHhGRkZGRkYsXG4gICAgICAgIGFsaWduOiBzdHlsZS5hbGlnbiB8fCAnbGVmdCcsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIHNpemU6IDBcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBmb250LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mb250ID0gc3R5bGUuZm9udDsgLy8gcnVuIGZvbnQgc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggd2lkdGggb2YgdGhpcyBiaXRtYXAgdGV4dCBpbiBwaXhlbHMuIElmIHRoZSB0ZXh0IHByb3ZpZGVkIGlzIGxvbmdlciB0aGFuIHRoZSB2YWx1ZSBwcm92aWRlZCwgbGluZSBicmVha3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoZSBsYXN0IHdoaXRlc3BhY2UuXG4gICAgICogRGlzYWJsZSBieSBzZXR0aW5nIHZhbHVlIHRvIDBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggbGluZSBoZWlnaHQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBUZXh0LCBpZTogd2hlbiB0cnlpbmcgdG8gdmVydGljYWxseSBhbGlnbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpcnR5IHN0YXRlIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkJpdG1hcFRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuQml0bWFwVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCaXRtYXBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCaXRtYXBUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRpbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC50aW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC50aW50ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCkgPyB2YWx1ZSA6IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdsZWZ0J1xuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGFsaWduOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQuYWxpZ247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LmFsaWduID0gdmFsdWUgfHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9udCBkZXNjcmlwdG9yIG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Rm9udH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBmb250OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWUuc2xpY2UoMSkuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gcGFyc2VJbnQodmFsdWVbMF0sIDEwKSA6IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicgPyB2YWx1ZS5zaXplIDogcGFyc2VJbnQodmFsdWUuc2l6ZSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGRhdGEgPSBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV07XG4gICAgdmFyIHBvcyA9IG5ldyBjb3JlLlBvaW50KCk7XG4gICAgdmFyIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgdmFyIGNoYXJzID0gW107XG4gICAgdmFyIGxhc3RMaW5lV2lkdGggPSAwO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBsaW5lV2lkdGhzID0gW107XG4gICAgdmFyIGxpbmUgPSAwO1xuICAgIHZhciBzY2FsZSA9IHRoaXMuX2ZvbnQuc2l6ZSAvIGRhdGEuc2l6ZTtcbiAgICB2YXIgbGFzdFNwYWNlID0gLTE7XG4gICAgdmFyIG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHQubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSB0aGlzLnRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgbGFzdFNwYWNlID0gLyhcXHMpLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpID8gaSA6IGxhc3RTcGFjZTtcblxuICAgICAgICBpZiAoLyg/OlxcclxcbnxcXHJ8XFxuKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RTcGFjZSAhPT0gLTEgJiYgdGhpcy5tYXhXaWR0aCA+IDAgJiYgcG9zLnggKiBzY2FsZSA+IHRoaXMubWF4V2lkdGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXMoY2hhcnMsIGxhc3RTcGFjZSwgaSAtIGxhc3RTcGFjZSk7XG4gICAgICAgICAgICBpID0gbGFzdFNwYWNlO1xuICAgICAgICAgICAgbGFzdFNwYWNlID0gLTE7XG5cbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFyRGF0YSA9IGRhdGEuY2hhcnNbY2hhckNvZGVdO1xuXG4gICAgICAgIGlmICghY2hhckRhdGEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZDaGFyQ29kZSAmJiBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJzLnB1c2goe3RleHR1cmU6Y2hhckRhdGEudGV4dHVyZSwgbGluZTogbGluZSwgY2hhckNvZGU6IGNoYXJDb2RlLCBwb3NpdGlvbjogbmV3IGNvcmUuUG9pbnQocG9zLnggKyBjaGFyRGF0YS54T2Zmc2V0LCBwb3MueSArIGNoYXJEYXRhLnlPZmZzZXQpfSk7XG4gICAgICAgIGxhc3RMaW5lV2lkdGggPSBwb3MueCArIChjaGFyRGF0YS50ZXh0dXJlLndpZHRoICsgY2hhckRhdGEueE9mZnNldCk7XG4gICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLnhBZHZhbmNlO1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgKGNoYXJEYXRhLnlPZmZzZXQgKyBjaGFyRGF0YS50ZXh0dXJlLmhlaWdodCkpO1xuICAgICAgICBwcmV2Q2hhckNvZGUgPSBjaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcblxuICAgIHZhciBsaW5lQWxpZ25PZmZzZXRzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IGxpbmU7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBhbGlnbk9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9mb250LmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZUFsaWduT2Zmc2V0cy5wdXNoKGFsaWduT2Zmc2V0KTtcbiAgICB9XG5cbiAgICB2YXIgbGVuQ2hhcnMgPSBjaGFycy5sZW5ndGg7XG4gICAgdmFyIHRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuQ2hhcnM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjID0gdGhpcy5fZ2x5cGhzW2ldOyAvLyBnZXQgdGhlIG5leHQgZ2x5cGggc3ByaXRlXG5cbiAgICAgICAgaWYgKGMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMudGV4dHVyZSA9IGNoYXJzW2ldLnRleHR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjID0gbmV3IGNvcmUuU3ByaXRlKGNoYXJzW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZ2x5cGhzLnB1c2goYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjLnBvc2l0aW9uLnggPSAoY2hhcnNbaV0ucG9zaXRpb24ueCArIGxpbmVBbGlnbk9mZnNldHNbY2hhcnNbaV0ubGluZV0pICogc2NhbGU7XG4gICAgICAgIGMucG9zaXRpb24ueSA9IGNoYXJzW2ldLnBvc2l0aW9uLnkgKiBzY2FsZTtcbiAgICAgICAgYy5zY2FsZS54ID0gYy5zY2FsZS55ID0gc2NhbGU7XG4gICAgICAgIGMudGludCA9IHRpbnQ7XG5cbiAgICAgICAgaWYgKCFjLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBjaGlsZHJlbi5cbiAgICBmb3IgKGkgPSBsZW5DaGFyczsgaSA8IHRoaXMuX2dseXBocy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5fZ2x5cGhzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHRXaWR0aCA9IG1heExpbmVXaWR0aCAqIHNjYWxlO1xuICAgIHRoaXMudGV4dEhlaWdodCA9IChwb3MueSArIGRhdGEubGluZUhlaWdodCkgKiBzY2FsZTtcbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSBtYXhMaW5lSGVpZ2h0ICogc2NhbGU7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvZiB0aGlzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0ZXh0IGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGdldExvY2FsQm91bmRzXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cblxuQml0bWFwVGV4dC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHJldHVybiBjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn07XG5cbkJpdG1hcFRleHQuZm9udHMgPSB7fTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgTW92aWVDbGlwIGlzIGEgc2ltcGxlIHdheSB0byBkaXNwbGF5IGFuIGFuaW1hdGlvbiBkZXBpY3RlZCBieSBhIGxpc3Qgb2YgdGV4dHVyZXMuXG4gKlxuICogYGBganNcbiAqIHZhciBhbGllbkltYWdlcyA9IFtcImltYWdlX3NlcXVlbmNlXzAxLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDIucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMy5wbmdcIixcImltYWdlX3NlcXVlbmNlXzA0LnBuZ1wiXTtcbiAqIHZhciB0ZXh0dXJlQXJyYXkgPSBbXTtcbiAqXG4gKiBmb3IgKHZhciBpPTA7IGkgPCA0OyBpKyspXG4gKiB7XG4gKiAgICAgIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZShhbGllbkltYWdlc1tpXSk7XG4gKiAgICAgIHRleHR1cmVBcnJheS5wdXNoKHRleHR1cmUpO1xuICogfTtcbiAqXG4gKiB2YXIgbWMgPSBuZXcgUElYSS5Nb3ZpZUNsaXAodGV4dHVyZUFycmF5KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmVzIHtQSVhJLlRleHR1cmVbXXxPYmplY3RbXX0gYW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuVGV4dHVyZX0gb3IgZnJhbWUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIGFuaW1hdGlvblxuICogQHBhcmFtIHRleHR1cmVzW10udGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUge0BsaW5rIFBJWEkuVGV4dHVyZX0gb2YgdGhlIGZyYW1lXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50aW1lIHtudW1iZXJ9IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWUgaW4gbXNcbiAqL1xuZnVuY3Rpb24gTW92aWVDbGlwKHRleHR1cmVzKVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZXNbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUgPyB0ZXh0dXJlc1swXSA6IHRleHR1cmVzWzBdLnRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVzID0gdGV4dHVyZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3BlZWQgdGhhdCB0aGUgTW92aWVDbGlwIHdpbGwgcGxheSBhdC4gSGlnaGVyIGlzIGZhc3RlciwgbG93ZXIgaXMgc2xvd2VyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIG1vdmllIGNsaXAgcmVwZWF0cyBhZnRlciBwbGF5aW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5sb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIE1vdmllQ2xpcCBmaW5pc2hlcyBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKi9cbiAgICB0aGlzLm9uQ29tcGxldGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRWxhcHNlZCB0aW1lIHNpbmNlIGFuaW1hdGlvbiBoYXMgYmVlbiBzdGFydGVkLCB1c2VkIGludGVybmFsbHkgdG8gZGlzcGxheSBjdXJyZW50IHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgTW92aWVDbGlwIGlzIGN1cnJlbnRseSBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTW92aWVDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcbk1vdmllQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNb3ZpZUNsaXA7XG5tb2R1bGUuZXhwb3J0cyA9IE1vdmllQ2xpcDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTW92aWVDbGlwLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIHRvdGFsRnJhbWVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBNb3ZpZUNsaXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbnVtYmVyIG9mIHRleHR1cmVzXG4gICAgICogYXNzaWduZWQgdG8gdGhlIE1vdmllQ2xpcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0b3RhbEZyYW1lczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgdGV4dHVyZXMgdXNlZCBmb3IgdGhpcyBNb3ZpZUNsaXBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVtdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICpcbiAgICAgKi9cbiAgICB0ZXh0dXJlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzLnB1c2godmFsdWVbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucy5wdXNoKHZhbHVlW2ldLnRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAqIFRoZSBNb3ZpZUNsaXBzIGN1cnJlbnQgZnJhbWUgaW5kZXhcbiAgICAqXG4gICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICogQHJlYWRvbmx5XG4gICAgKi9cbiAgICBjdXJyZW50RnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSkgJSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lIDwgMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUgKz0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGcmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBQbGF5cyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKHRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBnb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RvcCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRTdG9wID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG59O1xuXG4vKipcbiAqIEdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZSBhbmQgYmVnaW5zIHBsYXlpbmcgdGhlIE1vdmllQ2xpcFxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdGFydCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRQbGF5ID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLnBsYXkoKTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqIEBwcml2YXRlXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB2YXIgZWxhcHNlZCA9IHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZHVyYXRpb25zICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGxhZyA9IHRoaXMuX2N1cnJlbnRUaW1lICUgMSAqIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG5cbiAgICAgICAgbGFnICs9IGVsYXBzZWQgLyA2MCAqIDEwMDA7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA8IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lLS07XG4gICAgICAgICAgICBsYWcgKz0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWduID0gTWF0aC5zaWduKHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPj0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGFnIC09IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0gKiBzaWduO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gc2lnbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGxhZyAvIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGVsYXBzZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lIDwgMCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCgwKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VGltZSA+PSB0aGlzLl90ZXh0dXJlcy5sZW5ndGggJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AodGhpcy5fdGV4dHVyZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG5cbn07XG5cbi8qXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBkZXN0cm95cyBpdFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCApXG57XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGZyYW1lIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgZnJhbWVzIGlkcyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUZyYW1lcyA9IGZ1bmN0aW9uIChmcmFtZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tRnJhbWUoZnJhbWVzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBpbWFnZSB1cmxzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tSW1hZ2VzID0gZnVuY3Rpb24gKGltYWdlcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59OyIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIC8vIGEgc3ByaXRlIHVzZSBkZm9yIHJlbmRlcmluZyB0ZXh0dXJlcy4uXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICBDYW52YXNUaW50ZXIgPSByZXF1aXJlKCcuLi9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyk7XG5cbi8qKlxuICogQSB0aWxpbmcgc3ByaXRlIGlzIGEgZmFzdCB3YXkgb2YgcmVuZGVyaW5nIGEgdGlsaW5nIGltYWdlXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZSB7VGV4dHVyZX0gdGhlIHRleHR1cmUgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gVGlsaW5nU3ByaXRlKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsaW5nIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVNjYWxlID0gbmV3IGNvcmUuUG9pbnQoMSwxKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIG9mZnNldCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG5ldyBjb3JlLlBvaW50KDAsMCk7XG5cbiAgICAvLy8vLyBwcml2YXRlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2l0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBuZXcgY29yZS5UZXh0dXJlVXZzKCk7XG5cbiAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gbnVsbDtcblxuICAgIC8vVE9ETyBtb3ZlLi5cbiAgICB0aGlzLnNoYWRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKFxuXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVUcmFuc2Zvcm07JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnICAgY29vcmQgLT0gdVRyYW5zZm9ybS54eTsnLFxuICAgICAgICAnICAgY29vcmQgLz0gdVRyYW5zZm9ybS56dzsnLFxuICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGNvb3JkOycsXG5cbiAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjMiB1UGl4ZWxTaXplOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gbW9kKHZUZXh0dXJlQ29vcmQsIHVGcmFtZS56dyk7JyxcbiAgICAgICAgJyAgIGNvb3JkID0gY2xhbXAoY29vcmQsIHVQaXhlbFNpemUsIHVGcmFtZS56dyAtIHVQaXhlbFNpemUpOycsXG4gICAgICAgICcgICBjb29yZCArPSB1RnJhbWUueHk7JyxcblxuICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gIHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQpICogdkNvbG9yIDsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1RnJhbWU6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1VHJhbnNmb3JtOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVBpeGVsU2l6ZSA6IHsgdHlwZSA6ICcyZnYnLCB2YWx1ZTogWzEsIDFdfVxuICAgICAgICAgICAgfVxuICAgICAgKTtcbn1cblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWxpbmdTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbGluZ1Nwcml0ZTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWxpbmdTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGlsaW5nU3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIHR3ZWFrIG91ciB0ZXh0dXJlIHRlbXBvcmFyaWx5Li5cbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZSB8fCAhdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZW1wVXZzID0gdGV4dHVyZS5fdXZzLFxuICAgICAgICB0ZW1wV2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgdGVtcEhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCxcbiAgICAgICAgdHcgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoLFxuICAgICAgICB0aCA9IHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGhpcy5fdXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMF0gPSAxLjAvdHc7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVsxXSA9IDEuMC90aDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVswXSA9IHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzFdID0gdGVtcFV2cy55MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMl0gPSB0ZW1wVXZzLngxIC0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbM10gPSB0ZW1wVXZzLnkyIC0gdGVtcFV2cy55MDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMF0gPSAodGhpcy50aWxlUG9zaXRpb24ueCAlICh0ZW1wV2lkdGggKiB0aGlzLnRpbGVTY2FsZS54KSkgLyB0aGlzLl93aWR0aDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzFdID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgJSAodGVtcEhlaWdodCAqIHRoaXMudGlsZVNjYWxlLnkpKSAvIHRoaXMuX2hlaWdodDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzJdID0gKCB0dyAvIHRoaXMuX3dpZHRoICkgKiB0aGlzLnRpbGVTY2FsZS54O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbM10gPSAoIHRoIC8gdGhpcy5faGVpZ2h0ICkgKiB0aGlzLnRpbGVTY2FsZS55O1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRlbXBVdnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0ZW1wV2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGVtcEhlaWdodDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZiAoIXRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQsXG4gICAgICAgIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICBiYXNlVGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIG1vZFggPSAodGhpcy50aWxlUG9zaXRpb24ueCAvIHRoaXMudGlsZVNjYWxlLngpICUgdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIG1vZFkgPSAodGhpcy50aWxlUG9zaXRpb24ueSAvIHRoaXMudGlsZVNjYWxlLnkpICUgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuXG4gICAgLy8gY3JlYXRlIGEgbmljZSBzaGlueSBwYXR0ZXJuIVxuICAgIC8vIFRPRE8gdGhpcyBuZWVkcyB0byBiZSByZWZyZXNoZWQgaWYgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICBpZighdGhpcy5fY2FudmFzUGF0dGVybilcbiAgICB7XG4gICAgICAgIC8vIGN1dCBhbiBvYmplY3QgZnJvbSBhIHNwcml0ZXNoZWV0Li5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgY29yZS5DYW52YXNCdWZmZXIodGV4dHVyZS5fZnJhbWUud2lkdGgsIHRleHR1cmUuX2ZyYW1lLmhlaWdodCk7XG5cbiAgICAgICAgLy8gVGludCB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMudGludGVkVGV4dHVyZSwgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKGJhc2VUZXh0dXJlLnNvdXJjZSwgLXRleHR1cmUuX2ZyYW1lLngsIC10ZXh0dXJlLl9mcmFtZS55KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gdGVtcENhbnZhcy5jb250ZXh0LmNyZWF0ZVBhdHRlcm4oIHRlbXBDYW52YXMuY2FudmFzLCAncmVwZWF0JyApO1xuICAgIH1cblxuICAgIC8vIHNldCBjb250ZXh0IHN0YXRlLi5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvbik7XG5cbiAgICAvLyBUT0RPIC0gdGhpcyBzaG91bGQgYmUgcm9sbGVkIGludG8gdGhlIHNldFRyYW5zZm9ybSBhYm92ZS4uXG4gICAgY29udGV4dC5zY2FsZSh0aGlzLnRpbGVTY2FsZS54LHRoaXMudGlsZVNjYWxlLnkpO1xuXG4gICAgY29udGV4dC50cmFuc2xhdGUobW9kWCArICh0aGlzLmFuY2hvci54ICogLXRoaXMuX3dpZHRoICksXG4gICAgICAgICAgICAgICAgICAgICAgbW9kWSArICh0aGlzLmFuY2hvci55ICogLXRoaXMuX2hlaWdodCkpO1xuXG4gICAgLy8gY2hlY2sgYmxlbmQgbW9kZVxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vIGZpbGwgdGhlIHBhdHRlcm4hXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9jYW52YXNQYXR0ZXJuO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoLW1vZFgsXG4gICAgICAgICAgICAgICAgICAgICAtbW9kWSxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoIC8gdGhpcy50aWxlU2NhbGUueCxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCAvIHRoaXMudGlsZVNjYWxlLnkpO1xuXG5cbiAgICAvL1RPRE8gLSBwcmV0dHkgc3VyZSB0aGlzIGNhbiBiZSBkZWxldGVkLi4uXG4gICAgLy9jb250ZXh0LnRyYW5zbGF0ZSgtdGhpcy50aWxlUG9zaXRpb24ueCArICh0aGlzLmFuY2hvci54ICogdGhpcy5fd2lkdGgpLCAtdGhpcy50aWxlUG9zaXRpb24ueSArICh0aGlzLmFuY2hvci55ICogdGhpcy5faGVpZ2h0KSk7XG4gICAgLy9jb250ZXh0LnNjYWxlKDEgLyB0aGlzLnRpbGVTY2FsZS54LCAxIC8gdGhpcy50aWxlU2NhbGUueSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIHNwcml0ZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG5cbiAgICB2YXIgdzAgPSB3aWR0aCAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgIHZhciB3MSA9IHdpZHRoICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICB2YXIgaDAgPSBoZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICB2YXIgaDEgPSBoZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcblxuICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIG1pblgsXG4gICAgICAgIG1heFgsXG4gICAgICAgIG1pblksXG4gICAgICAgIG1heFk7XG5cbiAgICBtaW5YID0geDE7XG4gICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICBtaW5ZID0geTE7XG4gICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICBtYXhYID0geDE7XG4gICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICBtYXhZID0geTE7XG4gICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgYm91bmRzLnggPSBtaW5YO1xuICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcblxuICAgIHJldHVybiBib3VuZHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIGNoZWNrXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRpbGluZyBzcHJpdGVcbiAqXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWxlU2NhbGUgPSBudWxsO1xuICAgIHRoaXMuX3RpbGVTY2FsZU9mZnNldCA9IG51bGw7XG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHRpbGluZyBzcHJpdGUgdGhhdCB3aWxsIHVzZSBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZCx3aWR0aCxoZWlnaHQpXG57XG4gICAgdmFyIHRleHR1cmUgPSBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSAnICsgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUodGV4dHVyZSx3aWR0aCxoZWlnaHQpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCB3aWR0aCwgaGVpZ2h0LCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSksd2lkdGgsaGVpZ2h0KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gY29yZS5EaXNwbGF5T2JqZWN0LFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwID0gZmFsc2U7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSBudWxsO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsSGl0VGVzdCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxEZXN0cm95ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGlzIGRpc3BsYXkgb2JqZWN0IHRvIGJlIGNhY2hlZCBhcyBhIGJpdG1hcC5cbiAgICAgKiBUaGlzIGJhc2ljYWxseSB0YWtlcyBhIHNuYXAgc2hvdCBvZiB0aGUgZGlzcGxheSBvYmplY3QgYXMgaXQgaXMgYXQgdGhhdCBtb21lbnQuIEl0IGNhbiBwcm92aWRlIGEgcGVyZm9ybWFuY2UgYmVuZWZpdCBmb3IgY29tcGxleCBzdGF0aWMgZGlzcGxheU9iamVjdHMuXG4gICAgICogVG8gcmVtb3ZlIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnZmFsc2UnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgY2FjaGVBc0JpdG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZUFzQml0bWFwO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXAgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVBc0JpdG1hcCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IHRoaXMucmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSB0aGlzLnJlbmRlckNhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gdGhpcy51cGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHMgPSB0aGlzLmdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSA9IHRoaXMuZGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludCA9IHRoaXMuY29udGFpbnNQb2ludDtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX2NhY2hlQXNCaXRtYXBEZXN0cm95O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJvdW5kcyA9IHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fb3JpZ2luYWxEZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIFdlYkdMXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlciggdGhpcy5fY2FjaGVkU3ByaXRlICk7XG59O1xuXG4vKipcbiogUHJlcGFyZXMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZmlyc3Qgd2UgZmx1c2ggYW55dGhpbmcgbGVmdCBpbiB0aGUgcmVuZGVyZXIgKG90aGVyd2lzZSBpdCB3b3VsZCBnZXQgcmVuZGVyZWQgdG8gdGhlIGNhY2hlZCB0ZXh0dXJlKVxuICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuICAgIC8vdGhpcy5maWx0ZXJzPSBbXTtcbiAgICAvLyBuZXh0IHdlIGZpbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHVudHJhbnNmb3JtZWQgb2JqZWN0XG4gICAgLy8gdGhpcyBmdW5jdGlvbiBhbHNvIGNhbGxzIHVwZGF0ZXRyYW5zZm9ybSBvbiBhbGwgaXRzIGNoaWxkcmVuIGFzIHBhcnQgb2YgdGhlIG1lYXN1cmluZy4gVGhpcyBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgdHJhbnNmb3JtIGFnYWluIGluIHRoaXMgZnVuY3Rpb25cbiAgICAvLyBUT0RPIHBhc3MgYW4gb2JqZWN0IHRvIGNsb25lIHRvbz8gc2F2ZXMgaGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBvbmUgZWFjaCB0aW1lIVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuY2xvbmUoKTtcblxuICAgIC8vIGFkZCBzb21lIHBhZGRpbmchXG4gICAgaWYodGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5fZmlsdGVyc1swXS5wYWRkaW5nO1xuICAgICAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgICAgICBib3VuZHMueSAtPSBwYWRkaW5nO1xuXG4gICAgICAgIGJvdW5kcy53aWR0aCArPSBwYWRkaW5nICogMjtcbiAgICAgICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcbiAgICB9XG5cbiAgICAvLyBmb3Igbm93IHdlIGNhY2hlIHRoZSBjdXJyZW50IHJlbmRlclRhcmdldCB0aGF0IHRoZSB3ZWJHTCByZW5kZXJlciBpcyBjdXJyZW50bHkgdXNpbmcuXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBtb3JlIGVsZWdlbnQuLlxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0O1xuICAgIC8vIFdlIGFsc28gc3RvcmUgdGhlIGZpbHRlciBzdGFjayAtIEkgd2lsbCBkZWZpbml0ZWx5IGxvb2sgdG8gY2hhbmdlIGhvdyB0aGlzIHdvcmtzIGEgbGl0dGxlIGxhdGVyIGRvd24gdGhlIGxpbmUuXG4gICAgdmFyIHN0YWNrID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjaztcblxuICAgIC8vIHRoaXMgcmVuZGVyVGV4dHVyZSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlZCBEaXNwbGF5T2JqZWN0XG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cblxuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjYWNoZWRSZW5kZXJUYXJnZXQpO1xuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2sgPSBzdGFjaztcblxuICAgIHRoaXMucmVuZGVyV2ViR0wgICAgID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgICAgICAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyByZXN0b3JlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIGNhY2hlZCBzcHJpdGUgdG8gYXZvaWQgdGhlIG5hc3R5IGZsaWNrZXIuLlxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAvLyBtYXAgdGhlIGhpdCB0ZXN0Li5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBjYW52YXNcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzKCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbn07XG5cbi8vVE9ETyB0aGlzIGNhbiBiZSB0aGUgc2FtZSBhcyB0aGUgd2ViR0wgdmVyaXNvbi4uIHdpbGwgbmVlZCB0byBkbyBhIGxpdHRsZSB0d2Vha2luZyBmaXJzdCB0aG91Z2guLlxuLyoqXG4qIFByZXBhcmVzIHRoZSBDYW52YXMgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vZ2V0IGJvdW5kcyBhY3R1YWxseSB0cmFuc2Zvcm1zIHRoZSBvYmplY3QgZm9yIHVzIGFscmVhZHkhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5jb250ZXh0ID0gY2FjaGVkUmVuZGVyVGFyZ2V0O1xuXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBDYWxjdWxhdGVzIHRoZSBib3VuZHMgb2YgdGhlIGNhY2hlZCBzcHJpdGVcbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZ2V0Q2FjaGVkQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNwcml0ZS5nZXRCb3VuZHMoKTtcbn07XG5cbi8qKlxuKiBEZXN0cm95cyB0aGUgY2FjaGVkIHNwcml0ZS5cbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fdGV4dHVyZS5kZXN0cm95KCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwRGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jYWNoZUFzQml0bWFwID0gZmFsc2U7XG4gICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95KCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIG9iamVjdC5cbiAqXG4gKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICogQG1lbWJlciB7c3RyaW5nfVxuICovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZGlzcGxheSBvYmplY3QgaW4gdGhlIGNvbnRhaW5lclxuKlxuKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4qIEBwYXJhbSBuYW1lIHtzdHJpbmd9IGluc3RhbmNlIG5hbWVcbiogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuKi9cbmNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4qXG4qIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4qIEBwYXJhbSBwb2ludCB7UG9pbnR9IHRoZSBwb2ludCB0byB3cml0ZSB0aGUgZ2xvYmFsIHZhbHVlIHRvLiBJZiBudWxsIGEgbmV3IHBvaW50IHdpbGwgYmUgcmV0dXJuZWRcbiogQHJldHVybiB7UG9pbnR9XG4qL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRHbG9iYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb2ludClcbntcbiAgICBwb2ludCA9IHBvaW50IHx8IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICBpZih0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHBvaW50LnggPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICBwb2ludC55ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG9pbnQueCA9IHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMucG9zaXRpb24ueTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG5yZXF1aXJlKCcuL2NhY2hlQXNCaXRtYXAnKTtcbnJlcXVpcmUoJy4vZ2V0Q2hpbGRCeU5hbWUnKTtcbnJlcXVpcmUoJy4vZ2V0R2xvYmFsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZXh0cmFzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1vdmllQ2xpcDogICAgICByZXF1aXJlKCcuL01vdmllQ2xpcCcpLFxuICAgIFRpbGluZ1Nwcml0ZTogICByZXF1aXJlKCcuL1RpbGluZ1Nwcml0ZScpLFxuICAgIEJpdG1hcFRleHQ6ICAgICByZXF1aXJlKCcuL0JpdG1hcFRleHQnKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vLyBUT0RPIChjZW5nbGVyKSAtIFRoZSBZIGlzIGZsaXBwZWQgaW4gdGhpcyBzaGFkZXIgZm9yIHNvbWUgcmVhc29uLlxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBzaGFkZXIgOiBodHRwczovL3d3dy5zaGFkZXJ0b3kuY29tL3ZpZXcvbHNzR0RqIGJ5IEBtb3ZBWDEzaFxuICovXG5cbi8qKlxuICogQW4gQVNDSUkgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBBc2NpaUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgY2hhcmFjdGVyKGZsb2F0IG4sIHZlYzIgcClcXG57XFxuICAgIHAgPSBmbG9vcihwKnZlYzIoNC4wLCAtNC4wKSArIDIuNSk7XFxuICAgIGlmIChjbGFtcChwLngsIDAuMCwgNC4wKSA9PSBwLnggJiYgY2xhbXAocC55LCAwLjAsIDQuMCkgPT0gcC55KVxcbiAgICB7XFxuICAgICAgICBpZiAoaW50KG1vZChuL2V4cDIocC54ICsgNS4wKnAueSksIDIuMCkpID09IDEpIHJldHVybiAxLjA7XFxuICAgIH1cXG4gICAgcmV0dXJuIDAuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHk7XFxuXFxuICAgIHZlYzMgY29sID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBmbG9vciggdXYgLyBwaXhlbFNpemUgKSAqIHBpeGVsU2l6ZSAvIGRpbWVuc2lvbnMueHkpLnJnYjtcXG5cXG4gICAgZmxvYXQgZ3JheSA9IChjb2wuciArIGNvbC5nICsgY29sLmIpIC8gMy4wO1xcblxcbiAgICBmbG9hdCBuID0gIDY1NTM2LjA7ICAgICAgICAgICAgIC8vIC5cXG4gICAgaWYgKGdyYXkgPiAwLjIpIG4gPSA2NTYwMC4wOyAgICAvLyA6XFxuICAgIGlmIChncmF5ID4gMC4zKSBuID0gMzMyNzcyLjA7ICAgLy8gKlxcbiAgICBpZiAoZ3JheSA+IDAuNCkgbiA9IDE1MjU1MDg2LjA7IC8vIG9cXG4gICAgaWYgKGdyYXkgPiAwLjUpIG4gPSAyMzM4NTE2NC4wOyAvLyAmXFxuICAgIGlmIChncmF5ID4gMC42KSBuID0gMTUyNTIwMTQuMDsgLy8gOFxcbiAgICBpZiAoZ3JheSA+IDAuNykgbiA9IDEzMTk5NDUyLjA7IC8vIEBcXG4gICAgaWYgKGdyYXkgPiAwLjgpIG4gPSAxMTUxMjgxMC4wOyAvLyAjXFxuXFxuICAgIHZlYzIgcCA9IG1vZCggdXYgLyAoIHBpeGVsU2l6ZSAqIDAuNSApLCAyLjApIC0gdmVjMigxLjApO1xcbiAgICBjb2wgPSBjb2wgKiBjaGFyYWN0ZXIobiwgcCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sLCAxLjApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDggfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQXNjaWlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Bc2NpaUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc2NpaUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQXNjaWlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFzY2lpRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBzaXplIHVzZWQgYnkgdGhlIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkFzY2lpRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmxvb21GaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmxvb21GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xufVxuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsb29tRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb29tRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbG9vbUZpbHRlcjtcblxuQmxvb21GaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLlNDUkVFTik7XG5cbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvb21GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuXG4vKipcbiAqIFRoZSBCbHVyRGlyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvd2FyZCBhIGRpcmVjdGlvbiB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWFxuICogQHBhcmFtIHtudW1iZXJ9IGRpcllcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckRpckZpbHRlcihkaXJYLCBkaXJZKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBmbG9hdCBkaXJYO1xcbnVuaWZvcm0gZmxvYXQgZGlyWTtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1swXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDEyICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDEyICogc3RyZW5ndGgpICogZGlyWSApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkgKiAwLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkgKiAwLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkgKiAwLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pICogMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBkaXJYOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJYIHx8IDAgfSxcbiAgICAgICAgICAgIGRpclk6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclkgfHwgMCB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclggPSBkaXJYIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclkgPSBkaXJZIHx8IDA7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckRpckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckRpckZpbHRlcjtcblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKSB7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmICh0aGlzLnBhc3NlcyA9PT0gMSkge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0yOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gKHRoaXMucGFzc2VzKyhpKjIpKSAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckRpckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJYO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJYLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsdXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcbn1cblxuQmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckZpbHRlcjtcblxuQmx1ckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcGFzc2VzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzID0gdGhpcy5ibHVyWUZpbHRlci5wYXNzZXMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWEZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1clhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1clhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1clhGaWx0ZXI7XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1clhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSAgTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllGaWx0ZXI7XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSBNYXRoLmFicyh0aGlzLnN0cmVuZ3RoKSAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgU21hcnQgQmx1ciBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNtYXJ0Qmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAqIHBlcmNlbnQpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICBkZWx0YTogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjEsIHk6IDAuMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTbWFydEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNtYXJ0Qmx1ckZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDV4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogYGBganNcbiAqICB2YXIgY29sb3JNYXRyaXggPSBuZXcgUElYSS5Db2xvck1hdHJpeEZpbHRlcigpO1xuICogIGNvbnRhaW5lci5maWx0ZXJzID0gW2NvbG9yTWF0cml4XTtcbiAqICBjb2xvck1hdHJpeC5jb250cmFzdCgyKTtcbiAqIGBgYFxuICogQGF1dGhvciBDbMOpbWVudCBDaGVuZWJhdWx0IDxjbGVtZW50QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvck1hdHJpeEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBtWzI1XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuXFxuICAgIHZlYzQgYyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yID0gKG1bMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gbVs0XTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLmcgPSAobVs1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSBtWzldO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmIgPSAobVsxMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gbVsxNF07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYSA9IChtWzE1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSBtWzE5XTtcXG5cXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJzFmdicsIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yTWF0cml4RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvck1hdHJpeEZpbHRlcjtcblxuXG4vKipcbiAqIFRyYW5zZm9ybXMgY3VycmVudCBtYXRyaXggYW5kIHNldCB0aGUgbmV3IG9uZVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gaWYgdHJ1ZSwgY3VycmVudCBtYXRyaXggYW5kIG1hdHJpeCBhcmUgbXVsdGlwbGllZC4gSWYgZmFsc2UsIGp1c3Qgc2V0IHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIEBwYXJhbSBtYXRyaXhcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9sb2FkTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgbXVsdGlwbHkpXG57XG4gICAgbXVsdGlwbHkgPSAhIW11bHRpcGx5O1xuXG4gICAgdmFyIG5ld01hdHJpeCA9IG1hdHJpeDtcblxuICAgIGlmIChtdWx0aXBseSkge1xuICAgICAgICB0aGlzLl9tdWx0aXBseShuZXdNYXRyaXgsIHRoaXMudW5pZm9ybXMubS52YWx1ZSwgbWF0cml4KTtcbiAgICAgICAgbmV3TWF0cml4ID0gdGhpcy5fY29sb3JNYXRyaXgobmV3TWF0cml4KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBtYXRyaXhcbiAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSBuZXdNYXRyaXg7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDUnc1xuICpcbiAqIEBwYXJhbSBvdXQge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSBhIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0gYiB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIG91dCB7bnVtYmVyW119IChtYXQgNXg0KVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYilcbntcblxuICAgIC8vIFJlZCBDaGFubmVsXG4gICAgb3V0WzBdID0gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYls1XSkgKyAoYVsyXSAqIGJbMTBdKSArIChhWzNdICogYlsxNV0pO1xuICAgIG91dFsxXSA9IChhWzBdICogYlsxXSkgKyAoYVsxXSAqIGJbNl0pICsgKGFbMl0gKiBiWzExXSkgKyAoYVszXSAqIGJbMTZdKTtcbiAgICBvdXRbMl0gPSAoYVswXSAqIGJbMl0pICsgKGFbMV0gKiBiWzddKSArIChhWzJdICogYlsxMl0pICsgKGFbM10gKiBiWzE3XSk7XG4gICAgb3V0WzNdID0gKGFbMF0gKiBiWzNdKSArIChhWzFdICogYls4XSkgKyAoYVsyXSAqIGJbMTNdKSArIChhWzNdICogYlsxOF0pO1xuICAgIG91dFs0XSA9IChhWzBdICogYls0XSkgKyAoYVsxXSAqIGJbOV0pICsgKGFbMl0gKiBiWzE0XSkgKyAoYVszXSAqIGJbMTldKTtcblxuICAgIC8vIEdyZWVuIENoYW5uZWxcbiAgICBvdXRbNV0gPSAoYVs1XSAqIGJbMF0pICsgKGFbNl0gKiBiWzVdKSArIChhWzddICogYlsxMF0pICsgKGFbOF0gKiBiWzE1XSk7XG4gICAgb3V0WzZdID0gKGFbNV0gKiBiWzFdKSArIChhWzZdICogYls2XSkgKyAoYVs3XSAqIGJbMTFdKSArIChhWzhdICogYlsxNl0pO1xuICAgIG91dFs3XSA9IChhWzVdICogYlsyXSkgKyAoYVs2XSAqIGJbN10pICsgKGFbN10gKiBiWzEyXSkgKyAoYVs4XSAqIGJbMTddKTtcbiAgICBvdXRbOF0gPSAoYVs1XSAqIGJbM10pICsgKGFbNl0gKiBiWzhdKSArIChhWzddICogYlsxM10pICsgKGFbOF0gKiBiWzE4XSk7XG4gICAgb3V0WzldID0gKGFbNV0gKiBiWzRdKSArIChhWzZdICogYls5XSkgKyAoYVs3XSAqIGJbMTRdKSArIChhWzhdICogYlsxOV0pO1xuXG4gICAgLy8gQmx1ZSBDaGFubmVsXG4gICAgb3V0WzEwXSA9IChhWzEwXSAqIGJbMF0pICsgKGFbMTFdICogYls1XSkgKyAoYVsxMl0gKiBiWzEwXSkgKyAoYVsxM10gKiBiWzE1XSk7XG4gICAgb3V0WzExXSA9IChhWzEwXSAqIGJbMV0pICsgKGFbMTFdICogYls2XSkgKyAoYVsxMl0gKiBiWzExXSkgKyAoYVsxM10gKiBiWzE2XSk7XG4gICAgb3V0WzEyXSA9IChhWzEwXSAqIGJbMl0pICsgKGFbMTFdICogYls3XSkgKyAoYVsxMl0gKiBiWzEyXSkgKyAoYVsxM10gKiBiWzE3XSk7XG4gICAgb3V0WzEzXSA9IChhWzEwXSAqIGJbM10pICsgKGFbMTFdICogYls4XSkgKyAoYVsxMl0gKiBiWzEzXSkgKyAoYVsxM10gKiBiWzE4XSk7XG4gICAgb3V0WzE0XSA9IChhWzEwXSAqIGJbNF0pICsgKGFbMTFdICogYls5XSkgKyAoYVsxMl0gKiBiWzE0XSkgKyAoYVsxM10gKiBiWzE5XSk7XG5cbiAgICAvLyBBbHBoYSBDaGFubmVsXG4gICAgb3V0WzE1XSA9IChhWzE1XSAqIGJbMF0pICsgKGFbMTZdICogYls1XSkgKyAoYVsxN10gKiBiWzEwXSkgKyAoYVsxOF0gKiBiWzE1XSk7XG4gICAgb3V0WzE2XSA9IChhWzE1XSAqIGJbMV0pICsgKGFbMTZdICogYls2XSkgKyAoYVsxN10gKiBiWzExXSkgKyAoYVsxOF0gKiBiWzE2XSk7XG4gICAgb3V0WzE3XSA9IChhWzE1XSAqIGJbMl0pICsgKGFbMTZdICogYls3XSkgKyAoYVsxN10gKiBiWzEyXSkgKyAoYVsxOF0gKiBiWzE3XSk7XG4gICAgb3V0WzE4XSA9IChhWzE1XSAqIGJbM10pICsgKGFbMTZdICogYls4XSkgKyAoYVsxN10gKiBiWzEzXSkgKyAoYVsxOF0gKiBiWzE4XSk7XG4gICAgb3V0WzE5XSA9IChhWzE1XSAqIGJbNF0pICsgKGFbMTZdICogYls5XSkgKyAoYVsxN10gKiBiWzE0XSkgKyAoYVsxOF0gKiBiWzE5XSk7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHJldHVybiBtIHtudW1iZXJbXX0gKG1hdCA1eDQpIHdpdGggYWxsIHZhbHVlcyBiZXR3ZWVuIDAtMVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2NvbG9yTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICAvLyBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gICAgdmFyIG0gPSBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCk7XG4gICAgbVs0XSAvPSAyNTU7XG4gICAgbVs5XSAvPSAyNTU7XG4gICAgbVsxNF0gLz0gMjU1O1xuICAgIG1bMTldIC89IDI1NTtcblxuICAgIHJldHVybiBtO1xufTtcblxuLyoqXG4gKiBBZGp1c3RzIGJyaWdodG5lc3NcbiAqXG4gKiBAcGFyYW0gYiB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgYnJpZ3RobmVzcyAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icmlnaHRuZXNzID0gZnVuY3Rpb24gKGIsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGIsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIGIsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIGIsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXRyaWNlcyBpbiBncmV5IHNjYWxlc1xuICpcbiAqIEBwYXJhbSBzY2FsZSB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgZ3JleSAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG4vL0FtZXJpY2FuaXplZCBhbGlhc1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyYXlzY2FsZSA9IENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGU7XG5cbi8qKlxuICogU2V0IHRoZSBibGFjayBhbmQgd2hpdGUgbWF0cmljZVxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJsYWNrQW5kV2hpdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGh1ZSBwcm9wZXJ0eSBvZiB0aGUgY29sb3JcbiAqXG4gKiBAcGFyYW0gcm90YXRpb24ge251bWJlcn0gaW4gZGVncmVlc1xuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmh1ZSA9IGZ1bmN0aW9uIChyb3RhdGlvbiwgbXVsdGlwbHkpXG57XG4gICAgcm90YXRpb24gPSAocm90YXRpb24gfHwgMCkgLyAxODAgKiBNYXRoLlBJO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyhyb3RhdGlvbiksXG4gICAgICAgIHNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcblxuICAgIC8vIGx1bWluYW5jZVJlZCwgbHVtaW5hbmNlR3JlZW4sIGx1bWluYW5jZUJsdWVcbiAgICB2YXIgbHVtUiA9IDAuMjEzLCAvLyBvciAwLjMwODZcbiAgICAgICAgbHVtRyA9IDAuNzE1LCAvLyBvciAwLjYwOTRcbiAgICAgICAgbHVtQiA9IDAuMDcyOyAvLyBvciAwLjA4MjBcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoMSAtIGx1bVIpICsgc2luICogKC1sdW1SKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAoLWx1bUcpLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgxIC0gbHVtQiksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKDAuMTQzKSwgbHVtRyArIGNvcyAqICgxIC0gbHVtRykgKyBzaW4gKiAoMC4xNDApLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgtMC4yODMpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgtKDEgLSBsdW1SKSksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKGx1bUcpLCBsdW1CICsgY29zICogKDEgLSBsdW1CKSArIHNpbiAqIChsdW1CKSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKipcbiAqIFNldCB0aGUgY29udHJhc3QgbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGRhcmsgYW5kIGJyaWdodFxuICogSW5jcmVhc2UgY29udHJhc3QgOiBzaGFkb3dzIGRhcmtlciBhbmQgaGlnaGxpZ2h0cyBicmlnaHRlclxuICogRGVjcmVhc2UgY29udHJhc3QgOiBicmluZyB0aGUgc2hhZG93cyB1cCBhbmQgdGhlIGhpZ2hsaWdodHMgZG93blxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdmFsdWUgb2YgdGhlIGNvbnRyYXN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29udHJhc3QgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgdiA9IChhbW91bnQgfHwgMCkgKyAxO1xuICAgIHZhciBvID0gLTEyOCAqICh2IC0gMSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB2LCAwLCAwLCAwLCBvLFxuICAgICAgICAwLCB2LCAwLCAwLCBvLFxuICAgICAgICAwLCAwLCB2LCAwLCBvLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc2F0dXJhdGlvbiBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gY29sb3JzXG4gKiBJbmNyZWFzZSBzYXR1cmF0aW9uIDogaW5jcmVhc2UgY29udHJhc3QsIGJyaWdodG5lc3MsIGFuZCBzaGFycG5lc3NcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgeCA9IChhbW91bnQgfHwgMCkgKiAyIC8gMyArIDE7XG4gICAgdmFyIHkgPSAoKHggLSAxKSAqIC0wLjUpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgeCwgeSwgeSwgMCwgMCxcbiAgICAgICAgeSwgeCwgeSwgMCwgMCxcbiAgICAgICAgeSwgeSwgeCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBEZXNhdHVyYXRlIGltYWdlIChyZW1vdmUgY29sb3IpXG4gKlxuICogQ2FsbCB0aGUgc2F0dXJhdGUgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHRoaXMuc2F0dXJhdGUoLTEpO1xufTtcblxuLyoqXG4gKiBOZWdhdGl2ZSBpbWFnZSAoaW52ZXJzZSBvZiBjbGFzc2ljIHJnYiBtYXRyaXgpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5lZ2F0aXZlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDEsIDEsIDAsIDAsXG4gICAgICAgIDEsIDAsIDEsIDAsIDAsXG4gICAgICAgIDEsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2VwaWEgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2VwaWEgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zOTMsIDAuNzY4OTk5OSwgMC4xODg5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4zNDksIDAuNjg1OTk5OSwgMC4xNjc5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4yNzIsIDAuNTMzOTk5OSwgMC4xMzA5OTk5OSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciBtb3Rpb24gcGljdHVyZSBwcm9jZXNzIGludmVudGVkIGluIDE5MTYgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRlY2huaWNvbG9yID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuOTEyNTI3Nzg5MTQ1NjA4MywgLTAuODU0NTM0NDk3Njk1MTY0NSwgLTAuMDkxNTU1MDg0ODI3NTU1ODUsIDAsIDExLjc5MzYwMzQzNDM3NzMzNyxcbiAgICAgICAgLTAuMzA4NzgzMzM4NTkyODA5NywgMS43NjU4OTA4NTU1NDU4NDI4LCAtMC4xMDYwMTc0MzA3NDcyMjI0NSwgMCwgLTcwLjM1MjA1MTYxNDYxMzk4LFxuICAgICAgICAtMC4yMzExMDMzNzc1NDg2MTYsIC0wLjc1MDE4OTkxOTc0NDAyMTIsIDEuODQ3NTk3ODE2MTA4MTg5LCAwLCAzMC45NTA5NDA4Njk0OTExMzgsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogUG9sYXJvaWQgZmlsdGVyXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnBvbGFyb2lkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuNDM4LCAtMC4wNjIsIC0wLjA2MiwgMCwgMCxcbiAgICAgICAgLTAuMTIyLCAxLjM3OCwgLTAuMTIyLCAwLCAwLFxuICAgICAgICAtMC4wMTYsIC0wLjAxNiwgMS40ODMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRmlsdGVyIHdobyB0cmFuc2Zvcm1zIDogUmVkIC0+IEJsdWUgYW5kIEJsdWUgLT4gUmVkXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRvQkdSID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgcmV2ZXJzYWwgZmlsbSBpbnRyb2R1Y2VkIGJ5IEVhc3RtYW4gS29kYWsgaW4gMTkzNS4gKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmtvZGFjaHJvbWUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS4xMjg1NTgyMzk2NTkzNTI1LCAtMC4zOTY3MzgyMjgzNjAxMzQ4LCAtMC4wMzk5MjU1OTE3MjkyMTc5MywgMCwgNjMuNzI5NTg3NjIxOTY1MDIsXG4gICAgICAgIC0wLjE2NDA0MzM5OTYyMjQ0NjE2LCAxLjA4MzUyNTE1NjYyOTEzMDQsIC0wLjA1NDk4ODA1MTE1NjMzMTMyLCAwLCAyNC43MzI0MDc4OTY3MDYyMDMsXG4gICAgICAgIC0wLjE2Nzg2MDEwNzA2MTU1NzYzLCAtMC41NjAzNDE2Mjc3Njk1MjQ4LCAxLjYwMTQ4NTA3NjE5NjQ5NDMsIDAsIDM1LjYyOTgyODA3NDYwOTQ2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEJyb3duIGRlbGljaW91cyBicm93bmkgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icm93bmkgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC41OTk3MDIzNDk4MTU5NzE1LCAwLjM0NTUzMjQzMDQ4MzkxMjYzLCAtMC4yNzA4Mjk4Njc0NTM4MDQyLCAwLCA0Ny40MzE5Mjg1NTYwMDg3MyxcbiAgICAgICAgLTAuMDM3NzAzMjQ5ODM3NzgzMTU3LCAwLjg2MDk1Nzc1ODc5OTI2NDEsIDAuMTUwNTk1NTIzODg0NTk5MTMsIDAsIC0zNi45Njg0MTQ5ODMxOTEyNyxcbiAgICAgICAgMC4yNDExMzYzNTEyODE1MzMzNSwgLTAuMDc0NDEwMzc5MDg0MjI0OTIsIDAuNDQ5NzIxODIwNjQ4NzcxNTMsIDAsIC03LjU2MjA3NTI3NzU5MTI4MyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFZpbnRhZ2UgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS52aW50YWdlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNjI3OTM0NTYzNTYwNTk5NCwgMC4zMjAyMTgzNDIwODE5MzY3LCAtMC4wMzk2NTQwODIxMTMxMjQ1MywgMCwgOS42NTEyODU4MzUyOTQxMjMsXG4gICAgICAgIDAuMDI1NzgzOTc3MDQ4MDg4NjgsIDAuNjQ0MTE4ODY0NDM3NDc3MSwgMC4wMzI1OTEyNzYxNjE0OTI5NCwgMCwgNy40NjI4MjkxNzY0NzA1OTEsXG4gICAgICAgIDAuMDQ2NjA1NTU1Njc4MjcxOSwgLTAuMDg1MTIzMjk4NzI0Nzg5MSwgMC41MjQxNjQ4MDE4NzAwNDY1LCAwLCA1LjE1OTE5MDU4ODIzNTI5NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGtpbmQgb2YgZ3JhZGllbnQgbWFwLCBidXQgZnVubnkgdG8gcGxheSB3aXRoIVxuICpcbiAqIEBwYXJhbSBkZXNhdHVyYXRpb24ge251bWJlcn1cbiAqIEBwYXJhbSB0b25lZCB7bnVtYmVyfVxuICogQHBhcmFtIGxpZ2h0Q29sb3Ige3N0cmluZ30gKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKiBAcGFyYW0gZGFya0NvbG9yIHtzdHJpbmd9ICAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29sb3JUb25lID0gZnVuY3Rpb24gKGRlc2F0dXJhdGlvbiwgdG9uZWQsIGxpZ2h0Q29sb3IsIGRhcmtDb2xvciwgbXVsdGlwbHkpXG57XG4gICAgZGVzYXR1cmF0aW9uID0gZGVzYXR1cmF0aW9uIHx8IDAuMjtcbiAgICB0b25lZCA9IHRvbmVkIHx8IDAuMTU7XG4gICAgbGlnaHRDb2xvciA9IGxpZ2h0Q29sb3IgfHwgMHhGRkU1ODA7XG4gICAgZGFya0NvbG9yID0gZGFya0NvbG9yIHx8IDB4MzM4MDAwO1xuXG4gICAgdmFyIGxSID0gKChsaWdodENvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsRyA9ICgobGlnaHRDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsQiA9IChsaWdodENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgZFIgPSAoKGRhcmtDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEcgPSAoKGRhcmtDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkQiA9IChkYXJrQ29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC41OSwgMC4xMSwgMCwgMCxcbiAgICAgICAgbFIsIGxHLCBsQiwgZGVzYXR1cmF0aW9uLCAwLFxuICAgICAgICBkUiwgZEcsIGRCLCB0b25lZCwgMCxcbiAgICAgICAgbFIgLSBkUiwgbEcgLSBkRywgbEIgLSBkQiwgMCwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIE5pZ2h0IGVmZmVjdFxuICpcbiAqIEBwYXJhbSBpbnRlbnNpdHkge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uaWdodCA9IGZ1bmN0aW9uIChpbnRlbnNpdHksIG11bHRpcGx5KVxue1xuICAgIGludGVuc2l0eSA9IGludGVuc2l0eSB8fCAwLjE7XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgaW50ZW5zaXR5ICogKCAtMi4wKSwgLWludGVuc2l0eSwgMCwgMCwgMCxcbiAgICAgICAgLWludGVuc2l0eSwgMCwgaW50ZW5zaXR5LCAwLCAwLFxuICAgICAgICAwLCBpbnRlbnNpdHksIGludGVuc2l0eSAqIDIuMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKlxuICogUHJlZGF0b3IgZWZmZWN0XG4gKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgYSBuZXcgaW5kZXBlbnQgb25lXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBob3cgbXVjaCB0aGUgcHJlZGF0b3IgZmVlbHMgaGlzIGZ1dHVyZSB2aWN0aW1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wcmVkYXRvciA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDExLjIyNDEzMDYzMDQ5MzE2NCAqIGFtb3VudCwgLTQuNzk0NDg2OTk5NTExNzE5ICogYW1vdW50LCAtMi44NzQ2MTE4NTQ1NTMyMjI3ICogYW1vdW50LCAwICogYW1vdW50LCAwLjQwMzQyNDM4MjIwOTc3NzgzICogYW1vdW50LFxuICAgICAgICAtMy42MzMwNjk3NTM2NDY4NTA2ICogYW1vdW50LCA5LjE5MzE1NzE5NjA0NDkyMiAqIGFtb3VudCwgLTIuOTUxODEwODM2NzkxOTkyICogYW1vdW50LCAwICogYW1vdW50LCAtMS4zMTYxMzUwNDg4NjYyNzIgKiBhbW91bnQsXG4gICAgICAgIC0zLjIxODQxOTc5MDI2Nzk0NDMgKiBhbW91bnQsIC00LjIzNzUwMzA1MTc1NzgxMjUgKiBhbW91bnQsIDcuNDc2NDQ4MDU5MDgyMDMxICogYW1vdW50LCAwICogYW1vdW50LCAwLjgwNDQ0NTkyMjM3NDcyNTMgKiBhbW91bnQsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBMU0QgZWZmZWN0XG4gKlxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBIb3cgY3JhenkgaXMgeW91ciBlZmZlY3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5sc2QgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMiwgLTAuNCwgMC41LCAwLCAwLFxuICAgICAgICAtMC41LCAyLCAtMC40LCAwLCAwLFxuICAgICAgICAtMC40LCAtMC41LCAzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgb25lXG4gKlxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIGZhbHNlKTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF0cml4IG9mIHRoZSBjb2xvciBtYXRyaXggZmlsdGVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yTWF0cml4RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IFsxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwXVxuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm0udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBsb3dlcnMgdGhlIGNvbG9yIGRlcHRoIG9mIHlvdXIgaW1hZ2UgYnkgdGhlIGdpdmVuIGFtb3VudCwgcHJvZHVjaW5nIGFuIGltYWdlIHdpdGggYSBzbWFsbGVyIHBhbGV0dGUuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yU3RlcEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzdGVwO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGNvbG9yID0gZmxvb3IoY29sb3IgKiBzdGVwKSAvIHN0ZXA7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXA6IHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yU3RlcEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JTdGVwRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBzdGVwcyB0byByZWR1Y2UgdGhlIHBhbGV0dGUgYnkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvclN0ZXBGaWx0ZXIjXG4gICAgICovXG4gICAgc3RlcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbnZvbHV0aW9uRmlsdGVyIGNsYXNzIGFwcGxpZXMgYSBtYXRyaXggY29udm9sdXRpb24gZmlsdGVyIGVmZmVjdC5cbiAqIEEgY29udm9sdXRpb24gY29tYmluZXMgcGl4ZWxzIGluIHRoZSBpbnB1dCBpbWFnZSB3aXRoIG5laWdoYm9yaW5nIHBpeGVscyB0byBwcm9kdWNlIGEgbmV3IGltYWdlLlxuICogQSB3aWRlIHZhcmlldHkgb2YgaW1hZ2UgZWZmZWN0cyBjYW4gYmUgYWNoaWV2ZWQgdGhyb3VnaCBjb252b2x1dGlvbnMsIGluY2x1ZGluZyBibHVycmluZywgZWRnZVxuICogZGV0ZWN0aW9uLCBzaGFycGVuaW5nLCBlbWJvc3NpbmcsIGFuZCBiZXZlbGluZy4gVGhlIG1hdHJpeCBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIFNlZSBodHRwOi8vZG9jcy5naW1wLm9yZy9lbi9wbHVnLWluLWNvbnZtYXRyaXguaHRtbCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICovXG5mdW5jdGlvbiBDb252b2x1dGlvbkZpbHRlcihtYXRyaXgsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyBtZWRpdW1wIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xcbnVuaWZvcm0gZmxvYXQgbWF0cml4WzldO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IGMxMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAtIHRleGVsU2l6ZSk7IC8vIHRvcCBsZWZ0XFxuICAgdmVjNCBjMTIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgY2VudGVyXFxuICAgdmVjNCBjMTMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCByaWdodFxcblxcbiAgIHZlYzQgYzIxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIGxlZnRcXG4gICB2ZWM0IGMyMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7IC8vIG1pZCBjZW50ZXJcXG4gICB2ZWM0IGMyMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCByaWdodFxcblxcbiAgIHZlYzQgYzMxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gbGVmdFxcbiAgIHZlYzQgYzMyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGNlbnRlclxcbiAgIHZlYzQgYzMzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgdGV4ZWxTaXplKTsgLy8gYm90dG9tIHJpZ2h0XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID1cXG4gICAgICAgYzExICogbWF0cml4WzBdICsgYzEyICogbWF0cml4WzFdICsgYzEzICogbWF0cml4WzJdICtcXG4gICAgICAgYzIxICogbWF0cml4WzNdICsgYzIyICogbWF0cml4WzRdICsgYzIzICogbWF0cml4WzVdICtcXG4gICAgICAgYzMxICogbWF0cml4WzZdICsgYzMyICogbWF0cml4WzddICsgYzMzICogbWF0cml4WzhdO1xcblxcbiAgIGdsX0ZyYWdDb2xvci5hID0gYzIyLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWF0cml4OiAgICAgeyB0eXBlOiAnMWZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KSB9LFxuICAgICAgICAgICAgdGV4ZWxTaXplOiAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxIC8gd2lkdGgsIHk6IDEgLyBoZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnZvbHV0aW9uRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb252b2x1dGlvbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnkgPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIENyb3NzIEhhdGNoIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENyb3NzSGF0Y2hGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZmxvYXQgbHVtID0gbGVuZ3RoKHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZC54eSkucmdiKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDEuMCwgMS4wLCAxLjApO1xcblxcbiAgICBpZiAobHVtIDwgMS4wMClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjc1KVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNTApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC4zKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXCJcbiAgICApO1xufVxuXG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDcm9zc0hhdGNoRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDcm9zc0hhdGNoRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIERpc3BsYWNlbWVudEZpbHRlciBjbGFzcyB1c2VzIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHRleHR1cmUgKGNhbGxlZCB0aGUgZGlzcGxhY2VtZW50IG1hcCkgdG8gcGVyZm9ybSBhIGRpc3BsYWNlbWVudCBvZiBhbiBvYmplY3QuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGZpbHRlciB0byBhcHBseSBhbGwgbWFub3Igb2YgY3Jhenkgd2FycGluZyBlZmZlY3RzXG4gKiBDdXJyZW50bHkgdGhlIHIgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHggYW5kIHRoZSBnIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIChtYWtlIHN1cmUgaXRzIGFkZGVkIHRvIHRoZSBzY2VuZSEpXG4gKi9cbmZ1bmN0aW9uIERpc3BsYWNlbWVudEZpbHRlcihzcHJpdGUsIHNjYWxlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG4gICAgc3ByaXRlLnJlbmRlcmFibGUgPSBmYWxzZTtcblxuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZNYXBDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcFNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgbWFwID0gIHRleHR1cmUyRChtYXBTYW1wbGVyLCB2TWFwQ29vcmQpO1xcblxcbiAgIG1hcCAtPSAwLjU7XFxuICAgbWFwLnh5ICo9IHNjYWxlO1xcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyBtYXAueCwgdlRleHR1cmVDb29yZC55ICsgbWFwLnkpKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcFNhbXBsZXI6ICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLnRleHR1cmUgfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9LFxuICAgICAgICAgICAgc2NhbGU6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSwgeTogMSB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcblxuICAgIGlmIChzY2FsZSA9PT0gbnVsbCB8fCBzY2FsZSA9PT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgICAgc2NhbGUgPSAyMDtcbiAgICB9XG5cbiAgICB0aGlzLnNjYWxlID0gbmV3IGNvcmUuUG9pbnQoc2NhbGUsIHNjYWxlKTtcbn1cblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYWNlbWVudEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxhY2VtZW50RmlsdGVyO1xuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS54ID0gdGhpcy5zY2FsZS54ICogKDEvaW5wdXQuZnJhbWUud2lkdGgpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueSA9IHRoaXMuc2NhbGUueSAqICgxL2lucHV0LmZyYW1lLmhlaWdodCk7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gTXVzdCBiZSBwb3dlciBvZiAyIHNpemVkIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5EaXNwbGFjZW1lbnRGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3ZlcyBodHRwOi8vbWF0Z3JvdmVzLmNvbS8gQERvb3JtYXQyM1xuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9mdW4vZG90c2NyZWVuLmpzXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgZG90c2NyZWVuIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0byBiZSBtYWRlIG91dCBvZlxuICogYmxhY2sgYW5kIHdoaXRlIGhhbGZ0b25lIGRvdHMgbGlrZSBhbiBvbGQgcHJpbnRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRG90U2NyZWVuRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG5cXG5mbG9hdCBwYXR0ZXJuKClcXG57XFxuICAgZmxvYXQgcyA9IHNpbihhbmdsZSksIGMgPSBjb3MoYW5nbGUpO1xcbiAgIHZlYzIgdGV4ID0gdlRleHR1cmVDb29yZCAqIGRpbWVuc2lvbnMueHk7XFxuICAgdmVjMiBwb2ludCA9IHZlYzIoXFxuICAgICAgIGMgKiB0ZXgueCAtIHMgKiB0ZXgueSxcXG4gICAgICAgcyAqIHRleC54ICsgYyAqIHRleC55XFxuICAgKSAqIHNjYWxlO1xcbiAgIHJldHVybiAoc2luKHBvaW50LngpICogc2luKHBvaW50LnkpKSAqIDQuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhhdmVyYWdlICogMTAuMCAtIDUuMCArIHBhdHRlcm4oKSksIGNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNjYWxlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvdFNjcmVlbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRG90U2NyZWVuRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIHNjYWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHJhZGl1cyBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWVRpbnRGaWx0ZXIgYXBwbGllcyBhIHZlcnRpY2FsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWVRpbnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbitvZmZzZXQpLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IHN1bSA9IHZlYzQoMC4wKTtcXG5cXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLnJnYiAqIHN1bS5hICogYWxwaGEsIHN1bS5hICogYWxwaGEgKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSAvIDUxMiB9LFxuICAgICAgICAgICAgY29sb3I6IHsgdHlwZTogJ2MnLCB2YWx1ZTogWzAsMCwwXX0sXG4gICAgICAgICAgICBhbHBoYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC43IH0sXG4gICAgICAgICAgICBvZmZzZXQ6IHsgdHlwZTogJzJmJywgdmFsdWU6WzUsIDVdfSxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOjF9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllUaW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWVRpbnRGaWx0ZXI7XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIGNsZWFyKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWVRpbnRGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllUaW50RmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWVRpbnRGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgRHJvcFNoYWRvd0ZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEcm9wU2hhZG93RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIgPSBuZXcgQmx1cllUaW50RmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgdGhpcy5wYWRkaW5nID0gMzA7XG5cbiAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9hbmdsZSA9IDQ1ICogTWF0aC5QSSAvIDE4MDtcbiAgICB0aGlzLl9kaXN0YW5jZSA9IDEwO1xuICAgIHRoaXMuYWxwaGEgPSAwLjc1O1xuICAgIHRoaXMuaGlkZU9iamVjdCA9IGZhbHNlO1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5NVUxUSVBMWTtcbn1cblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRHJvcFNoYWRvd0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRHJvcFNoYWRvd0ZpbHRlcjtcblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIGlmKHRoaXMuX2RpcnR5UG9zaXRpb24pXG4gICAge1xuICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzBdID0gTWF0aC5zaW4odGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVsxXSA9IE1hdGguY29zKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUodGhpcy5ibGVuZE1vZGUpO1xuXG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIGlmKCF0aGlzLmhpZGVPYmplY3QpXG4gICAge1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG4gICAgfVxuXG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBjb2xvcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgY29yZS51dGlscy5yZ2IyaGV4KCB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgPSBjb3JlLnV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYWxwaGE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXN0YW5jZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGRpc3RhbmNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9hbmdsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fYW5nbGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBncmV5c2NhbGVzIHRoZSBwYWxldHRlIG9mIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBHcmF5RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JheTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIHZlYzMoMC4yMTI2KmdsX0ZyYWdDb2xvci5yICsgMC43MTUyKmdsX0ZyYWdDb2xvci5nICsgMC4wNzIyKmdsX0ZyYWdDb2xvci5iKSwgZ3JheSk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXk6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuR3JheUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkdyYXlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JheUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JheUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR3JheUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXkuIDEgd2lsbCBtYWtlIHRoZSBvYmplY3QgYmxhY2sgYW5kIHdoaXRlLCAwIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5HcmF5RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYXk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGZpbHRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmZpbHRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXNjaWlGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2FzY2lpL0FzY2lpRmlsdGVyJyksXG4gICAgQmxvb21GaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2Jsb29tL0Jsb29tRmlsdGVyJyksXG4gICAgQmx1ckZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckZpbHRlcicpLFxuICAgIEJsdXJYRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1cllGaWx0ZXInKSxcbiAgICBCbHVyRGlyRmlsdGVyOiAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRGlyRmlsdGVyJyksXG4gICAgQ29sb3JNYXRyaXhGaWx0ZXI6ICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yTWF0cml4RmlsdGVyJyksXG4gICAgQ29sb3JTdGVwRmlsdGVyOiAgICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yU3RlcEZpbHRlcicpLFxuICAgIENvbnZvbHV0aW9uRmlsdGVyOiAgcmVxdWlyZSgnLi9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlcicpLFxuICAgIENyb3NzSGF0Y2hGaWx0ZXI6ICAgcmVxdWlyZSgnLi9jcm9zc2hhdGNoL0Nyb3NzSGF0Y2hGaWx0ZXInKSxcbiAgICBEaXNwbGFjZW1lbnRGaWx0ZXI6IHJlcXVpcmUoJy4vZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlcicpLFxuICAgIERvdFNjcmVlbkZpbHRlcjogICAgcmVxdWlyZSgnLi9kb3QvRG90U2NyZWVuRmlsdGVyJyksXG4gICAgR3JheUZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2dyYXkvR3JheUZpbHRlcicpLFxuICAgIERyb3BTaGFkb3dGaWx0ZXI6ICAgcmVxdWlyZSgnLi9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXInKSxcbiAgICBJbnZlcnRGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vaW52ZXJ0L0ludmVydEZpbHRlcicpLFxuICAgIE5vaXNlRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ub2lzZS9Ob2lzZUZpbHRlcicpLFxuICAgIFBpeGVsYXRlRmlsdGVyOiAgICAgcmVxdWlyZSgnLi9waXhlbGF0ZS9QaXhlbGF0ZUZpbHRlcicpLFxuICAgIFJHQlNwbGl0RmlsdGVyOiAgICAgcmVxdWlyZSgnLi9yZ2IvUkdCU3BsaXRGaWx0ZXInKSxcbiAgICBTaG9ja3dhdmVGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vc2hvY2t3YXZlL1Nob2Nrd2F2ZUZpbHRlcicpLFxuICAgIFNlcGlhRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9zZXBpYS9TZXBpYUZpbHRlcicpLFxuICAgIFNtYXJ0Qmx1ckZpbHRlcjogICAgcmVxdWlyZSgnLi9ibHVyL1NtYXJ0Qmx1ckZpbHRlcicpLFxuICAgIFRpbHRTaGlmdEZpbHRlcjogICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyJyksXG4gICAgVHdpc3RGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3R3aXN0L1R3aXN0RmlsdGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGludmVydHMgeW91ciBEaXNwbGF5IE9iamVjdHMgY29sb3JzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBJbnZlcnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gZmxvYXQgaW52ZXJ0O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggKHZlYzMoMSktZ2xfRnJhZ0NvbG9yLnJnYikgKiBnbF9GcmFnQ29sb3IuYSwgZ2xfRnJhZ0NvbG9yLnJnYiwgMS4wIC0gaW52ZXJ0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBpbnZlcnQ6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludmVydEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gSW52ZXJ0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhJbnZlcnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBpbnZlcnQuIGAxYCB3aWxsIGZ1bGx5IGludmVydCB0aGUgY29sb3JzLCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkludmVydEZpbHRlciNcbiAgICAgKi9cbiAgICBpbnZlcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9hZGp1c3Qvbm9pc2UuanNcbiAqL1xuXG4vKipcbiAqIEEgTm9pc2UgZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gTm9pc2VGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgbm9pc2U7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgcmFuZCh2ZWMyIGNvKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoY28ueHksIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZmxvYXQgZGlmZiA9IChyYW5kKHZUZXh0dXJlQ29vcmQpIC0gMC41KSAqIG5vaXNlO1xcblxcbiAgICBjb2xvci5yICs9IGRpZmY7XFxuICAgIGNvbG9yLmcgKz0gZGlmZjtcXG4gICAgY29sb3IuYiArPSBkaWZmO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBub2lzZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbk5vaXNlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuTm9pc2VGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTm9pc2VGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE5vaXNlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2lzZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIG5vaXNlIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuTm9pc2VGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMC41XG4gICAgICovXG4gICAgbm9pc2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHBpeGVsYXRlIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciAnYmxvY2t5Jy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUGl4ZWxhdGVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZDtcXG5cXG4gICAgdmVjMiBzaXplID0gZGltZW5zaW9ucy54eSAvIHBpeGVsU2l6ZTtcXG5cXG4gICAgdmVjMiBjb2xvciA9IGZsb29yKCAoIHZUZXh0dXJlQ29vcmQgKiBzaXplICkgKSAvIHNpemUgKyBwaXhlbFNpemUvZGltZW5zaW9ucy54eSAqIDAuNTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb2xvcik7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgICB2YWx1ZTogeyB4OiAxMCwgeTogMTAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBpeGVsYXRlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBQaXhlbGF0ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBhIHBvaW50IHRoYXQgZGVzY3JpYmVzIHRoZSBzaXplIG9mIHRoZSBibG9ja3MuXG4gICAgICogeCBpcyB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGFuZCB5IGlzIHRoZSBoZWlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUGl4ZWxhdGVGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEFuIFJHQiBTcGxpdCBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFJHQlNwbGl0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcmVkO1xcbnVuaWZvcm0gdmVjMiBncmVlbjtcXG51bmlmb3JtIHZlYzIgYmx1ZTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yLnIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyByZWQvZGltZW5zaW9ucy54eSkucjtcXG4gICBnbF9GcmFnQ29sb3IuZyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGdyZWVuL2RpbWVuc2lvbnMueHkpLmc7XFxuICAgZ2xfRnJhZ0NvbG9yLmIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBibHVlL2RpbWVuc2lvbnMueHkpLmI7XFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgZ3JlZW46ICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAtMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGJsdWU6ICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IC0yMCB9IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUkdCU3BsaXRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFJHQlNwbGl0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSR0JTcGxpdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBSZWQgY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgcmVkOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yZWQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmVlbiBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmVlbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEJsdWUgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgYXBwbGllcyBhIHNlcGlhIGVmZmVjdCB0byB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2VwaWFGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc2VwaWE7XFxuXFxuY29uc3QgbWF0MyBzZXBpYU1hdHJpeCA9IG1hdDMoMC4zNTg4LCAwLjcwNDQsIDAuMTM2OCwgMC4yOTkwLCAwLjU4NzAsIDAuMTE0MCwgMC4yMzkyLCAwLjQ2OTYsIDAuMDkxMik7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZ2xfRnJhZ0NvbG9yLnJnYiAqIHNlcGlhTWF0cml4LCBzZXBpYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2VwaWE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2VwaWFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TZXBpYUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXBpYUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2VwaWFGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNlcGlhRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgc2VwaWEuIGAxYCB3aWxsIGFwcGx5IHRoZSBmdWxsIHNlcGlhIGVmZmVjdCwgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TZXBpYUZpbHRlciNcbiAgICAgKi9cbiAgICBzZXBpYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA0eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTaG9ja3dhdmVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XFxudW5pZm9ybSB2ZWMzIHBhcmFtczsgLy8gMTAuMCwgMC44LCAwLjFcXG51bmlmb3JtIGZsb2F0IHRpbWU7XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSB2VGV4dHVyZUNvb3JkO1xcbiAgICB2ZWMyIHRleENvb3JkID0gdXY7XFxuXFxuICAgIGZsb2F0IGRpc3QgPSBkaXN0YW5jZSh1diwgY2VudGVyKTtcXG5cXG4gICAgaWYgKCAoZGlzdCA8PSAodGltZSArIHBhcmFtcy56KSkgJiYgKGRpc3QgPj0gKHRpbWUgLSBwYXJhbXMueikpIClcXG4gICAge1xcbiAgICAgICAgZmxvYXQgZGlmZiA9IChkaXN0IC0gdGltZSk7XFxuICAgICAgICBmbG9hdCBwb3dEaWZmID0gMS4wIC0gcG93KGFicyhkaWZmKnBhcmFtcy54KSwgcGFyYW1zLnkpO1xcblxcbiAgICAgICAgZmxvYXQgZGlmZlRpbWUgPSBkaWZmICAqIHBvd0RpZmY7XFxuICAgICAgICB2ZWMyIGRpZmZVViA9IG5vcm1hbGl6ZSh1diAtIGNlbnRlcik7XFxuICAgICAgICB0ZXhDb29yZCA9IHV2ICsgKGRpZmZVViAqIGRpZmZUaW1lKTtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHRleENvb3JkKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBjZW50ZXI6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9LFxuICAgICAgICAgICAgcGFyYW1zOiB7IHR5cGU6ICd2MycsIHZhbHVlOiB7IHg6IDEwLCB5OiAwLjgsIHo6IDAuMSB9IH0sXG4gICAgICAgICAgICB0aW1lOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaG9ja3dhdmVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNob2Nrd2F2ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNlbnRlciBvZiB0aGUgc2hvY2t3YXZlIGluIG5vcm1hbGl6ZWQgc2NyZWVuIGNvb3Jkcy4gVGhhdCBpc1xuICAgICAqICgwLDApIGlzIHRoZSB0b3AtbGVmdCBhbmQgKDEsMSkgaXMgdGhlIGJvdHRvbSByaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgY2VudGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGFyYW1zIG9mIHRoZSBzaG9ja3dhdmUuIFRoZXNlIG1vZGlmeSB0aGUgbG9vayBhbmQgYmVoYXZpb3Igb2ZcbiAgICAgKiB0aGUgc2hvY2t3YXZlIGFzIGl0IHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIHNob2Nrd2F2ZS4gVGhpcyBjb250cm9scyB0aGUgc3BlZWQgYXQgd2hpY2hcbiAgICAgKiB0aGUgc2hvY2t3YXZlIHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHRpbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRBeGlzRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRBeGlzRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGJsdXI7XFxudW5pZm9ybSBmbG9hdCBncmFkaWVudEJsdXI7XFxudW5pZm9ybSB2ZWMyIHN0YXJ0O1xcbnVuaWZvcm0gdmVjMiBlbmQ7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcbnVuaWZvcm0gdmVjMiB0ZXhTaXplO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcbiAgICB2ZWMyIG5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMyKHN0YXJ0LnkgLSBlbmQueSwgZW5kLnggLSBzdGFydC54KSk7XFxuICAgIGZsb2F0IHJhZGl1cyA9IHNtb290aHN0ZXAoMC4wLCAxLjAsIGFicyhkb3QodlRleHR1cmVDb29yZCAqIHRleFNpemUgLSBzdGFydCwgbm9ybWFsKSkgLyBncmFkaWVudEJsdXIpICogYmx1cjtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgLyB0ZXhTaXplICogcGVyY2VudCAqIHJhZGl1cyk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6ICAgICAgICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxMDAgfSxcbiAgICAgICAgICAgIGdyYWRpZW50Qmx1cjogICB7IHR5cGU6ICcxZicsIHZhbHVlOiA2MDAgfSxcbiAgICAgICAgICAgIHN0YXJ0OiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAsICAgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZW5kOiAgICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogNjAwLCAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBkZWx0YTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAzMCwgICB5OiAzMCB9IH0sXG4gICAgICAgICAgICB0ZXhTaXplOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiB3aW5kb3cuaW5uZXJXaWR0aCwgeTogd2luZG93LmlubmVySGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbn1cblxuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICogVGhpcyBpcyBvdmVycmlkZGVuIGluIHRoZSBYIGFuZCBZIGZpbHRlcnMsIGRvZXMgbm90aGluZyBmb3IgdGhpcyBjbGFzcy5cbiAqXG4gKi9cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAwO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IDA7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WUZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnQgRmlsdGVyLiBNYW5hZ2VzIHRoZSBwYXNzIG9mIGJvdGggYSBUaWx0U2hpZnRYRmlsdGVyIGFuZCBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlciA9IG5ldyBUaWx0U2hpZnRYRmlsdGVyKCk7XG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyID0gbmV3IFRpbHRTaGlmdFlGaWx0ZXIoKTtcbn1cblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0RmlsdGVyO1xuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ncmFkaWVudEJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5zdGFydCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5lbmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRYRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gZHggLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR5IC8gZDtcbn07XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFlGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WUZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAtZHkgLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR4IC8gZDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgdHdpc3QgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHR3aXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVHdpc3RGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgLSBvZmZzZXQ7XFxuICAgZmxvYXQgZGlzdCA9IGxlbmd0aChjb29yZCk7XFxuXFxuICAgaWYgKGRpc3QgPCByYWRpdXMpXFxuICAge1xcbiAgICAgICBmbG9hdCByYXRpbyA9IChyYWRpdXMgLSBkaXN0KSAvIHJhZGl1cztcXG4gICAgICAgZmxvYXQgYW5nbGVNb2QgPSByYXRpbyAqIHJhdGlvICogYW5nbGU7XFxuICAgICAgIGZsb2F0IHMgPSBzaW4oYW5nbGVNb2QpO1xcbiAgICAgICBmbG9hdCBjID0gY29zKGFuZ2xlTW9kKTtcXG4gICAgICAgY29vcmQgPSB2ZWMyKGNvb3JkLnggKiBjIC0gY29vcmQueSAqIHMsIGNvb3JkLnggKiBzICsgY29vcmQueSAqIGMpO1xcbiAgIH1cXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkK29mZnNldCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBvZmZzZXQ6ICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuVHdpc3RGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ud2lzdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUd2lzdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVHdpc3RGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFR3aXN0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgZGVzY3JpYmVzIHRoZSB0aGUgb2Zmc2V0IG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcmFkaXVzIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIHJhZGl1czoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBhbmdsZSBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvLyBydW4gdGhlIHBvbHlmaWxsc1xucmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbi8vIGFkZCBjb3JlIHBsdWdpbnMuXG5jb3JlLmV4dHJhcyAgICAgICAgID0gcmVxdWlyZSgnLi9leHRyYXMnKTtcbmNvcmUuZmlsdGVycyAgICAgICAgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcbmNvcmUuaW50ZXJhY3Rpb24gICAgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9uJyk7XG5jb3JlLmxvYWRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9sb2FkZXJzJyk7XG5jb3JlLm1lc2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9tZXNoJyk7XG5jb3JlLmFjY2Vzc2liaWxpdHkgID0gcmVxdWlyZSgnLi9hY2Nlc3NpYmlsaXR5Jyk7XG5cbi8vIGV4cG9ydCBhIHByZW1hZGUgbG9hZGVyIGluc3RhbmNlXG4vKipcbiAqIEEgcHJlbWFkZSBpbnN0YW5jZSBvZiB0aGUgbG9hZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZGVyIHJlc291cmNlcy5cbiAqXG4gKiBAbmFtZSBsb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcHJvcGVydHkge1BJWEkubG9hZGVycy5Mb2FkZXJ9XG4gKi9cbmNvcmUubG9hZGVyID0gbmV3IGNvcmUubG9hZGVycy5Mb2FkZXIoKTtcblxuLy8gbWl4aW4gdGhlIGRlcHJlY2F0aW9uIGZlYXR1cmVzLlxuT2JqZWN0LmFzc2lnbihjb3JlLCByZXF1aXJlKCcuL2RlcHJlY2F0aW9uJykpO1xuXG4vLyBBbHdheXMgZXhwb3J0IHBpeGkgZ2xvYmFsbHkuXG5nbG9iYWwuUElYSSA9IGNvcmU7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBIb2xkcyBhbGwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhbiBJbnRlcmFjdGlvbiBldmVudFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25EYXRhKClcbntcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IHN0b3JlcyB0aGUgZ2xvYmFsIGNvb3JkcyBvZiB3aGVyZSB0aGUgdG91Y2gvbW91c2UgZXZlbnQgaGFwcGVuZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5nbG9iYWwgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBTcHJpdGUgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBhc3NlZCB0byBhbiBldmVudCBoYW5kbGVyLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbmFsIERPTSBFdmVudCB0aGF0IHdhcyBjYXB0dXJlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gbnVsbDtcbn1cblxuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25EYXRhO1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBzcGVjaWZpZWQgZGlzcGxheU9iamVjdCBmb3IgdGhpcyBJbnRlcmFjdGlvbkRhdGFcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSBsb2NhbCBjb29yZHMgb2ZmXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IHBvaW50KVxuICogQHBhcmFtIFtnbG9iYWxQb3NdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHlvdXIgY3VzdG9tIGdsb2JhbCBjb29yZHMsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCB1c2UgdGhlIGN1cnJlbnQgZ2xvYmFsIGNvb3JkcylcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEludGVyYWN0aW9uRGF0YSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgRGlzcGxheU9iamVjdFxuICovXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmdldExvY2FsUG9zaXRpb24gPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcG9pbnQsIGdsb2JhbFBvcylcbntcbiAgICByZXR1cm4gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UoZ2xvYmFsUG9zIHx8IHRoaXMuZ2xvYmFsLCBwb2ludCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgSW50ZXJhY3Rpb25EYXRhID0gcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKTtcblxuLy8gTWl4IGludGVyYWN0aXZlVGFyZ2V0IGludG8gY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZVxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxuKTtcblxuLyoqXG4gKiBUaGUgaW50ZXJhY3Rpb24gbWFuYWdlciBkZWFscyB3aXRoIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuIEFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBpbnRlcmFjdGl2ZVxuICogaWYgaXRzIGludGVyYWN0aXZlIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZVxuICogVGhpcyBtYW5hZ2VyIGFsc28gc3VwcG9ydHMgbXVsdGl0b3VjaC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdD10cnVlXSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBtYW5hZ2VyIGF1dG9tYXRpY2FsbHkgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeT0xMF0ge251bWJlcn0gRnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyLCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgaW50ZXJhY3Rpb24gbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGJlIHByZXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0ID0gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0IDogdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFzIHRoaXMgZnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZCBtb3JlIG9mdGVuLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSA9IG9wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW91c2UgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9XG4gICAgICovXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IGRhdGEgb2JqZWN0IHRvIGhhbmRsZSBhbGwgdGhlIGV2ZW50IHRyYWNraW5nL2Rpc3BhdGNoaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5ldmVudERhdGEgPSB7XG4gICAgICAgIHN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgIGRhdGE6IHRoaXMubW91c2UsXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGxpdHRsZSBpbnRlcmFjdGl2ZURhdGEgcG9vbCAhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YVtdfVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBlbGVtZW50IHRvIGJpbmQgdG8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhhdmUgZXZlbnRzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGRvbSBlbGVtZW50P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcblxuICAgIC8vdGhpcyB3aWxsIG1ha2UgaXQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGJpbmQgYWxsIHRoZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VVcCA9IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IHRoaXMucHJvY2Vzc01vdXNlVXAuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IHRoaXMucHJvY2Vzc01vdXNlRG93bi5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gdGhpcy5wcm9jZXNzTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU91dCA9IHRoaXMub25Nb3VzZU91dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gdGhpcy5vblRvdWNoU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gdGhpcy5wcm9jZXNzVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoRW5kID0gdGhpcy5vblRvdWNoRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSB0aGlzLnByb2Nlc3NUb3VjaEVuZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IHRoaXMub25Ub3VjaE1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSB0aGlzLnByb2Nlc3NUb3VjaE1vdmUuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxhc3QgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNzcyBzdHlsZSBvZiB0aGUgY3Vyc29yIHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9ICdpbmhlcml0JztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNhY2hlZCB2YXJcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcblxuICAgIHRoaXMuc2V0VGFyZ2V0RWxlbWVudCh0aGlzLnJlbmRlcmVyLnZpZXcsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbik7XG59XG5cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UvdG91Y2ggZXZlbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZVxuICogb3RoZXIgRE9NIGVsZW1lbnRzIG9uIHRvcCBvZiB0aGUgcmVuZGVyZXJzIENhbnZhcyBlbGVtZW50LiBXaXRoIHRoaXMgeW91J2xsIGJlIGJhbGUgdG8gZGVsZXRlZ2F0ZVxuICogYW5vdGhlciBET00gZWxlbWVudCB0byByZWNlaXZlIHRob3NlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9IHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUSGUgcmVzb2x1dGlvbiBvZiB0aGUgbmV3IGVsZW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBjYW52YXMpLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXRUYXJnZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJlc29sdXRpb24pXG57XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgdGhlIERPTSBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAgICB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgICB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICAgICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICAgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgICAgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgICAgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgdGhlIERPTSBldmVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICcnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzLlxuICogSW52b2tlZCBieSBhIHRocm90dGxlZCB0aWNrZXIgdXBkYXRlIGZyb21cbiAqIHtAbGluayBQSVhJLnRpY2tlci5zaGFyZWR9LlxuICpcbiAqIEBwYXJhbSBkZWx0YVRpbWUge251bWJlcn1cbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHRoaXMuX2RlbHRhVGltZSArPSBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZGVsdGFUaW1lIDwgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWx0YVRpbWUgPSAwO1xuXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBtb3ZlIHRoZSBtb3VzZSB0aGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gZGZvbmUgdXNpbmcgdGhlIG1vdXNlIG1vdmUhXG4gICAgaWYodGhpcy5kaWRNb3ZlKVxuICAgIHtcbiAgICAgICAgdGhpcy5kaWRNb3ZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ET1xufTtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgZGlzcGxheSBvYmplY3QgaW4gcXVlc3Rpb25cbiAqIEBwYXJhbSBldmVudFN0cmluZyB7c3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGUuZywgbW91c2Vkb3duKVxuICogQHBhcmFtIGV2ZW50RGF0YSB7b2JqZWN0fSB0aGUgZXZlbnQgZGF0YSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApXG57XG4gICAgaWYoIWV2ZW50RGF0YS5zdG9wcGVkKVxuICAgIHtcbiAgICAgICAgZXZlbnREYXRhLnRhcmdldCA9IGRpc3BsYXlPYmplY3Q7XG4gICAgICAgIGV2ZW50RGF0YS50eXBlID0gZXZlbnRTdHJpbmc7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5lbWl0KCBldmVudFN0cmluZywgZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10oIGV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXBzIHggYW5kIHkgY29vcmRzIGZyb20gYSBET00gb2JqZWN0IGFuZCBtYXBzIHRoZW0gY29ycmVjdGx5IHRvIHRoZSBwaXhpIHZpZXcuIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBwb2ludC5cbiAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgdGhlIERPTSBlbGVtZW50IGNvdWxkIGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCBhbnl3aGVyZSBvbiB0aGUgc2NyZWVuLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW5cbiAqIEBwYXJhbSAge251bWJlcn0geCAgICAgdGhlIHggY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICogQHBhcmFtICB7bnVtYmVyfSB5ICAgICB0aGUgeSBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUubWFwUG9zaXRpb25Ub1BvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgeCwgeSApXG57XG4gICAgdmFyIHJlY3QgPSB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBwb2ludC54ID0gKCAoIHggLSByZWN0LmxlZnQgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC53aWR0aCAgLyByZWN0LndpZHRoICApICkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgcG9pbnQueSA9ICggKCB5IC0gcmVjdC50b3AgICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuaGVpZ2h0IC8gcmVjdC5oZWlnaHQgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVzIGEgbmVhdCB3YXkgb2YgY3Jhd2xpbmcgdGhyb3VnaCB0aGUgc2NlbmUgZ3JhcGggYW5kIHJ1bm5pbmcgYSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gYWxsIGludGVyYWN0aXZlIG9iamVjdHMgaXQgZmluZHMuXG4gKiBJdCB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIGhpdCB0ZXN0aW5nIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlIGhpdCBhY3Jvc3MgaW4gdGhlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IGlzIHRlc3RlZCBmb3IgY29sbGlzaW9uXG4gKiBAcGFyYW0gIHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IGRpc3BsYXlPYmplY3QgdGhlIGRpc3BsYXlPYmplY3QgdGhhdCB3aWxsIGJlIGhpdCB0ZXN0IChyZWN1cmNzaXZseSBjcmF3bHMgaXRzIGNoaWxkcmVuKVxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBpbnRlcmFjdGl2ZSBvYmplY3QuIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBoaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtib29sZWFufSBoaXRUZXN0IHRoaXMgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3RzIGluc2lkZSBzaG91bGQgYmUgaGl0IHRlc3QgYWdhaW5zdCB0aGUgcG9pbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiB0aGUgZGlzcGxheU9iamVjdCBoaXQgdGhlIHBvaW50XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0ludGVyYWN0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBkaXNwbGF5T2JqZWN0LCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZSlcbntcbiAgICBpZighZGlzcGxheU9iamVjdCB8fCAhZGlzcGxheU9iamVjdC52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRvb2sgYSBsaXR0bGUgd2hpbGUgdG8gcmV3b3JrIHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5ISBCdXQgbm93IGl0IGlzIGRvbmUgYW5kIG5pY2UgYW5kIG9wdGltaXNlZC4gXl9eXG4gICAgLy8gXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdyBsb29wIHRocm91Z2ggYWxsIG9iamVjdHMgYW5kIHRoZW4gb25seSBoaXQgdGVzdCB0aGUgb2JqZWN0cyBpdCBIQVMgdG8sIG5vdCBhbGwgb2YgdGhlbS4gTVVDSCBmYXN0ZXIuLlxuICAgIC8vIEFuIG9iamVjdCB3aWxsIGJlIGhpdCB0ZXN0IGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICAvLyBcbiAgICAvLyAxOiBJdCBpcyBpbnRlcmFjdGl2ZS5cbiAgICAvLyAyOiBJdCBiZWxvbmdzIHRvIGEgcGFyZW50IHRoYXQgaXMgaW50ZXJhY3RpdmUgQU5EIG9uZSBvZiB0aGUgcGFyZW50cyBjaGlsZHJlbiBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIC8vIFxuICAgIC8vIEFzIGFub3RoZXIgbGl0dGxlIG9wdGltaXNhdGlvbiBvbmNlIGFuIGludGVyYWN0aXZlIG9iamVjdCBoYXMgYmVlbiBoaXQgd2UgY2FuIGNhcnJ5IG9uIHRocm91Z2ggdGhlIHNjZW5lZ3JhcGgsIGJ1dCB3ZSBrbm93IHRoYXQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGhpdHMhIFNvIHdlIGNhbiBhdm9pZCBleHRyYSBoaXQgdGVzdHNcbiAgICAvLyBBIGZpbmFsIG9wdGltaXNhdGlvbiBpcyB0aGF0IGFuIG9iamVjdCBpcyBub3QgaGl0IHRlc3QgZGlyZWN0bHkgaWYgYSBjaGlsZCBoYXMgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICBcbiAgICB2YXIgaGl0ID0gZmFsc2UsXG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gaW50ZXJhY3RpdmUgPSBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlIHx8IGludGVyYWN0aXZlO1xuXG4gICAgLy8gaWYgdGhlIGRpc3BsYXlvYmplY3QgaGFzIGEgaGl0QXJlYSwgdGhlbiBpdCBkb2VzIG5vdCBuZWVkIHRvIGhpdFRlc3QgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAqKiBGUkVFIFRJUCAqKiEgSWYgYW4gb2JqZWN0IGlzIG5vdCBpbnRlcmFjdHRpdmUgb3IgaGFzIG5vIGJ1dHRvbnMgaW4gaXQgKHN1Y2ggYXMgYSBnYW1lIHNjZW5lISkgc2V0IGludGVyYWN0aXZlQ2hpbGRyZW4gdG8gZmFsc2UgZm9yIHRoYXQgZGlzcGxheU9iamVjdC5cbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgcGl4aSB0byBjb21wbGV0bHkgaWdub3JlIGFuZCBieXBhc3MgY2hlY2tpbmcgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmVDaGlsZHJlbilcbiAgICB7ICAgICAgIFxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aC0xOyBpID49IDA7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGltZSB0byBnZXQgcmVjdXJzaXZlLi4gaWYgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpZiBzb210aGluZyBpcyBoaXQuLlxuICAgICAgICAgICAgaWYoIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHBvaW50LCBjaGlsZHJlbltpXSwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmVQYXJlbnQpIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55IG1vcmUgb2JqZWN0cyBpbiB0aGlzIGNvbnRhaW5lciBhcyB3ZSB3ZSBub3cga25vdyB0aGUgcGFyZW50IGhhcyBiZWVuIGhpdFxuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGludGVyYWN0aXZlICwgdGhhdCBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGl0IHdhcyBhY3R1YWxseSBpbnRlcmFjdGl2ZSBhbmQgbm90IGp1c3QgdGhlIGNoaWxkIG9mIGFuIGludGVyYWN0aXZlIG9iamVjdC4gXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnl0aGluZyBlbHNlLiBXZSBzdGlsbCBuZWVkIHRvIHJ1biB0aHJvdWdoIGFsbCBvYmplY3RzLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBoaXQgdGVzdHMuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uaW50ZXJhY3RpdmUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoaXRUZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm8gcG9pbnQgcnVubmluZyB0aGlzIGlmIHRoZSBpdGVtIGlzIG5vdCBpbnRlcmFjdGl2ZSBvciBkb2VzIG5vdCBoYXZlIGFuIGludGVyYWN0aXZlIHBhcmVudC5cbiAgICBpZihpbnRlcmFjdGl2ZSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBoaXQgdGVzdGluZyAoYXMgaW4gd2UgaGF2ZSBubyBoaXQgYW55IG9iamVjdHMgeWV0KVxuICAgICAgICAvLyBXZSBhbHNvIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGl0IHRlc3RpbmcgaWYgb25jZSBvZiB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4gaGFzIGFscmVhZHkgYmVlbiBoaXQhXG4gICAgICAgIGlmKGhpdFRlc3QgJiYgIWhpdClcbiAgICAgICAgeyAgXG4gICAgICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0aGlzLl90ZW1wUG9pbnQpO1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuaGl0QXJlYS5jb250YWlucyggdGhpcy5fdGVtcFBvaW50LngsIHRoaXMuX3RlbXBQb2ludC55ICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnVuYyhkaXNwbGF5T2JqZWN0LCBoaXQpOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIFxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyBwcmVzc2VkIGRvd25cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZURvd24sIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIGRvd24gY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VEb3duID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuICAgIFxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3RbIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bicgXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGRvd24nIDogJ21vdXNlZG93bicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcmVsZWFzZWRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VVcCwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgdXAgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlVXAgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG4gICAgdmFyIGlzRG93biA9ICBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXAnIDogJ21vdXNldXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRjbGljaycgOiAnY2xpY2snLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cG91dHNpZGUnIDogJ21vdXNldXBvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiB0aGUgbW91c2UgbW92aW5nXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmRpZE1vdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU1vdmUsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE8gQlVHIGZvciBwYXJlbnRzIGluZXJhY3RpdmUgb2JqZWN0IChib3JkZXIgb3JkZXIgaXNzdWUpXG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2Vtb3ZlJywgdGhpcy5ldmVudERhdGEpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dChkaXNwbGF5T2JqZWN0LCBoaXQpO1xufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYmVpbmcgbW92ZWQgb3V0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICAvLyBUT0RPIG9wdGltaXplIGJ5IG5vdCBjaGVjayBFVkVSWSBUSU1FISBtYXliZSBoYWxmIGFzIG9mdGVuPyAvL1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgZmFsc2UgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG92ZXIvb3V0IGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgaWYoIWRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5T2JqZWN0LmJ1dHRvbk1vZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gZGlzcGxheU9iamVjdC5kZWZhdWx0Q3Vyc29yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgdGhpcy5ldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgc3RhcnRlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBzdGFydGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG4gICAgICAgIC8vVE9ETyBQT09MXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaFN0YXJ0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoc3RhcnQnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGVuZHMgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggZW5kaW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIC8vVE9ETyB0aGlzIHNob3VsZCBiZSBwYXNzZWQgYWxvbmcuLiBubyBzZXRcbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hFbmQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgZW5kIG9mIGEgdG91Y2ggYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoRW5kID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0YXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgbW92ZWQgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIG1vdmluZyBhY3Jvc3MgdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaE1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaGl0ID0gaGl0O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNobW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogR3JhYnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaEV2ZW50IHtFdmVudERhdGF9IFRoZSB0b3VjaCBldmVudCB3ZSBuZWVkIHRvIHBhaXIgd2l0aCBhbiBpbnRlcmFjdGlvbkRhdGEgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRUb3VjaERhdGEgPSBmdW5jdGlvbiAodG91Y2hFdmVudClcbntcbiAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnBvcCgpO1xuXG4gICAgaWYoIXRvdWNoRGF0YSlcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcbiAgICB9XG5cbiAgICB0b3VjaERhdGEuaWRlbnRpZmllciA9IHRvdWNoRXZlbnQuaWRlbnRpZmllcjtcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdG91Y2hEYXRhLmdsb2JhbCwgdG91Y2hFdmVudC5jbGllbnRYLCB0b3VjaEV2ZW50LmNsaWVudFkgKTtcblxuICAgIGlmKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC54ID0gdG91Y2hEYXRhLmdsb2JhbC54IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnkgPSB0b3VjaERhdGEuZ2xvYmFsLnkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgfVxuXG4gICAgdG91Y2hFdmVudC5nbG9iYWxYID0gdG91Y2hEYXRhLmdsb2JhbC54O1xuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWSA9IHRvdWNoRGF0YS5nbG9iYWwueTtcblxuICAgIHJldHVybiB0b3VjaERhdGE7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hEYXRhIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX0gVGhlIHRvdWNoIGRhdGEgb2JqZWN0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5Ub3VjaERhdGEgPSBmdW5jdGlvbiAoIHRvdWNoRGF0YSApXG57XG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnB1c2goIHRvdWNoRGF0YSApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgaW50ZXJhY3Rpb24gbWFuYWdlclxuICpcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMubW91c2UgPSBudWxsO1xuXG4gICAgdGhpcy5ldmVudERhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZVVwID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gbnVsbDtcblxuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaEVuZCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMuX3RlbXBQb2ludCA9IG51bGw7XG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGludGVyYWN0aW9ucyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSW50ZXJhY3Rpb25EYXRhOiAgICByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpLFxuICAgIEludGVyYWN0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9JbnRlcmFjdGlvbk1hbmFnZXInKSxcbiAgICBpbnRlcmFjdGl2ZVRhcmdldDogIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxufTtcbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgaW50ZXJhY3RpdmUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmludGVyYWN0aW9uLmludGVyYWN0aXZlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBpbnRlcmFjdGl2ZVRhcmdldCA9IHtcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGJ1dHRvbk1vZGU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmVDaGlsZHJlbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGRlZmF1bHRDdXJzb3I6ICdwb2ludGVyJyxcblxuICAgIC8vIHNvbWUgaW50ZXJuYWwgY2hlY2tzLi5cblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb3ZlcjogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90b3VjaERvd246IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyYWN0aXZlVGFyZ2V0O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuLi9leHRyYXMnKSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5cbmZ1bmN0aW9uIHBhcnNlKHJlc291cmNlLCB0ZXh0dXJlKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgaW5mbyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXTtcbiAgICB2YXIgY29tbW9uID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XG5cbiAgICBkYXRhLmZvbnQgPSBpbmZvLmdldEF0dHJpYnV0ZSgnZmFjZScpO1xuICAgIGRhdGEuc2l6ZSA9IHBhcnNlSW50KGluZm8uZ2V0QXR0cmlidXRlKCdzaXplJyksIDEwKTtcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBwYXJzZUludChjb21tb24uZ2V0QXR0cmlidXRlKCdsaW5lSGVpZ2h0JyksIDEwKTtcbiAgICBkYXRhLmNoYXJzID0ge307XG5cbiAgICAvL3BhcnNlIGxldHRlcnNcbiAgICB2YXIgbGV0dGVycyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NoYXInKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdpZCcpLCAxMCk7XG5cbiAgICAgICAgdmFyIHRleHR1cmVSZWN0ID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3gnKSwgMTApICsgdGV4dHVyZS5mcmFtZS54LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3knKSwgMTApICsgdGV4dHVyZS5mcmFtZS55LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSwgMTApXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICB4T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneG9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB5T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneW9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB4QWR2YW5jZTogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hhZHZhbmNlJyksIDEwKSxcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9LFxuICAgICAgICAgICAgdGV4dHVyZTogbmV3IGNvcmUuVGV4dHVyZSh0ZXh0dXJlLmJhc2VUZXh0dXJlLCB0ZXh0dXJlUmVjdClcblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vcGFyc2Uga2VybmluZ3NcbiAgICB2YXIga2VybmluZ3MgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXJuaW5nJyk7XG4gICAgZm9yIChpID0gMDsgaSA8IGtlcm5pbmdzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdmaXJzdCcpLCAxMCk7XG4gICAgICAgIHZhciBzZWNvbmQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ3NlY29uZCcpLCAxMCk7XG4gICAgICAgIHZhciBhbW91bnQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2Ftb3VudCcpLCAxMCk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tzZWNvbmRdLmtlcm5pbmdbZmlyc3RdID0gYW1vdW50O1xuICAgIH1cblxuICAgIHJlc291cmNlLmJpdG1hcEZvbnQgPSBkYXRhO1xuXG4gICAgLy8gSSdtIGxlYXZpbmcgdGhpcyBhcyBhIHRlbXBvcmFyeSBmaXggc28gd2UgY2FuIHRlc3QgdGhlIGJpdG1hcCBmb250cyBpbiB2M1xuICAgIC8vIGJ1dCBpdCdzIHZlcnkgbGlrZWx5IHRvIGNoYW5nZVxuICAgIGV4dHJhcy5CaXRtYXBUZXh0LmZvbnRzW2RhdGEuZm9udF0gPSBkYXRhO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhIG9yIG5vdCB4bWwgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzWG1sKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBpZiBub3QgYml0bWFwIGZvbnQgZGF0YSwgdXNpbmcgc29tZSBzaWxseSBkdWNrLXR5cGluZ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF0uZ2V0QXR0cmlidXRlKCdmYWNlJykgPT09IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4bWxVcmwgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsKTtcblxuICAgICAgICBpZiAoeG1sVXJsID09PSAnLicpIHtcbiAgICAgICAgICAgIHhtbFVybCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmFzZVVybCAmJiB4bWxVcmwpIHtcbiAgICAgICAgICAgIC8vIGlmIGJhc2V1cmwgaGFzIGEgdHJhaWxpbmcgc2xhc2ggdGhlbiBhZGQgb25lIHRvIHhtbFVybCBzbyB0aGUgcmVwbGFjZSB3b3JrcyBiZWxvd1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVVybC5jaGFyQXQodGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEpID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYmFzZVVybCBmcm9tIHhtbFVybFxuICAgICAgICAgICAgeG1sVXJsID0geG1sVXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiB4bWxVcmwgbm93LCBpdCBuZWVkcyBhIHRyYWlsaW5nIHNsYXNoLiBFbnN1cmUgdGhhdCBpdCBkb2VzIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZW1wdHkuXG4gICAgICAgIGlmICh4bWxVcmwgJiYgeG1sVXJsLmNoYXJBdCh4bWxVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4dHVyZVVybCA9IHhtbFVybCArIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKVswXS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKTtcbiAgICAgICAgaWYgKGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKSB7XG4gICAgICAgICAgICAvL3JldXNlIGV4aXN0aW5nIHRleHR1cmVcbiAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBsb2FkIHRoZSB0ZXh0dXJlIGZvciB0aGUgZm9udFxuICAgICAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCB0ZXh0dXJlVXJsLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCByZXMudGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGxvYWRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmxvYWRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTG9hZGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlcicpLFxuXG4gICAgLy8gcGFyc2Vyc1xuICAgIGJpdG1hcEZvbnRQYXJzZXI6ICAgcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXI6ICByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgdGV4dHVyZVBhcnNlcjogICAgICByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBSZXNvdXJjZTogICAgICAgICAgIHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlXG59O1xuIiwidmFyIFJlc291cmNlTG9hZGVyID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJyksXG4gICAgdGV4dHVyZVBhcnNlciA9IHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyID0gcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIGJpdG1hcEZvbnRQYXJzZXIgPSByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKTtcblxuLyoqXG4gKlxuICogVGhlIG5ldyBsb2FkZXIsIGV4dGVuZHMgUmVzb3VyY2UgTG9hZGVyIGJ5IENoYWQgRW5nbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2VuZ2xlcmNqL3Jlc291cmNlLWxvYWRlclxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbG9hZGVyID0gUElYSS5sb2FkZXI7IC8vIHBpeGkgZXhwb3NlcyBhIHByZW1hZGUgaW5zdGFuY2UgZm9yIHlvdSB0byB1c2UuXG4gKiAvL29yXG4gKiB2YXIgbG9hZGVyID0gbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIoKTsgLy8geW91IGNhbiBhbHNvIGNyZWF0ZSB5b3VyIG93biBpZiB5b3Ugd2FudFxuICpcbiAqIGxvYWRlci5hZGQoJ2J1bm55JyxcImRhdGEvYnVubnkucG5nXCIpO1xuICpcbiAqIGxvYWRlci5vbmNlKCdjb21wbGV0ZScsb25Bc3NldHNMb2FkZWQpO1xuICpcbiAqIGxvYWRlci5sb2FkKCk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuUmVzb3VyY2VMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmxvYWRlcnNcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpXG57XG4gICAgUmVzb3VyY2VMb2FkZXIuY2FsbCh0aGlzLCBiYXNlVXJsLCBjb25jdXJyZW5jeSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IExvYWRlci5fcGl4aU1pZGRsZXdhcmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy51c2UoTG9hZGVyLl9waXhpTWlkZGxld2FyZVtpXSgpKTtcbiAgICB9XG59XG5cbkxvYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuTG9hZGVyLl9waXhpTWlkZGxld2FyZSA9IFtcbiAgICAvLyBwYXJzZSBhbnkgYmxvYiBpbnRvIG1vcmUgdXNhYmxlIG9iamVjdHMgKGUuZy4gSW1hZ2UpXG4gICAgUmVzb3VyY2VMb2FkZXIubWlkZGxld2FyZS5wYXJzaW5nLmJsb2IsXG4gICAgLy8gcGFyc2UgYW55IEltYWdlIG9iamVjdHMgaW50byB0ZXh0dXJlc1xuICAgIHRleHR1cmVQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIHNwcml0ZXNoZWV0UGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBiaXRtYXBGb250UGFyc2VyXG5dO1xuXG5Mb2FkZXIuYWRkUGl4aU1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLnB1c2goZm4pO1xufTtcblxuLy8gQWRkIGN1c3RvbSBleHRlbnRpb25zXG52YXIgUmVzb3VyY2UgPSBSZXNvdXJjZUxvYWRlci5SZXNvdXJjZTtcblxuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSgnZm50JywgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpO1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSwgaXRzIG5vdCBqc29uLCBvciBpdCBpc24ndCBzcHJpdGVzaGVldCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNKc29uIHx8ICFyZXNvdXJjZS5kYXRhLmZyYW1lcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByb3V0ZSA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKSk7XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybCggcmVzb3VyY2UudXJsICk7XG5cbiAgICAgICAgLy8gbG9hZCB0aGUgaW1hZ2UgZm9yIHRoaXMgc2hlZXRcbiAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCByb3V0ZSArICcvJyArIHJlc291cmNlLmRhdGEubWV0YS5pbWFnZSwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzID0ge307XG5cbiAgICAgICAgICAgIHZhciBmcmFtZXMgPSByZXNvdXJjZS5kYXRhLmZyYW1lcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmcmFtZXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBmcmFtZXNbaV0uZnJhbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVjdClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaW0gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC5oLCByZWN0LncpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC53LCByZWN0LmgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS50cmltbWVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmltID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnggLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnkgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLncgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLmggLyByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsaXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQhXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBzaXplLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUueSAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoIC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0IC89IHJlc29sdXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXNbaV0gPSBuZXcgY29yZS5UZXh0dXJlKHJlcy50ZXh0dXJlLmJhc2VUZXh0dXJlLCBzaXplLCBzaXplLmNsb25lKCksIHRyaW0sIGZyYW1lc1tpXS5yb3RhdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbaV0gPSByZXNvdXJjZS50ZXh0dXJlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZSBpZiB0aGUgZGF0YSBpcyBhbiBJbWFnZSBvYmplY3RcbiAgICAgICAgaWYgKHJlc291cmNlLmRhdGEgJiYgcmVzb3VyY2UuaXNJbWFnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGJhc2VUZXh0dXJlID0gbmV3IGNvcmUuQmFzZVRleHR1cmUocmVzb3VyY2UuZGF0YSwgbnVsbCwgY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwocmVzb3VyY2UudXJsKSk7XG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IHJlc291cmNlLnVybDtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmUgPSBuZXcgY29yZS5UZXh0dXJlKGJhc2VUZXh0dXJlKTtcbiAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1Y250aW9uc1xuICAgICAgICAgICAgY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSBiYXNlVGV4dHVyZTtcbiAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSByZXNvdXJjZS50ZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICB0ZW1wUG9seWdvbiA9IG5ldyBjb3JlLlBvbHlnb24oKTtcblxuLyoqXG4gKiBCYXNlIG1lc2ggY2xhc3NcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRvIHVzZVxuICogQHBhcmFtIFt2ZXJ0aWNlc10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdmVydGljZXNcbiAqIEBwYXJhbSBbdXZzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB1dnNcbiAqIEBwYXJhbSBbaW5kaWNlc10ge1VpbnQxNkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBpbmRpY2VzXG4gKiBAcGFyYW0gW2RyYXdNb2RlXSB7bnVtYmVyfSB0aGUgZHJhd01vZGUsIGNhbiBiZSBhbnkgb2YgdGhlIE1lc2guRFJBV19NT0RFUyBjb25zdHNcbiAqL1xuZnVuY3Rpb24gTWVzaCh0ZXh0dXJlLCB2ZXJ0aWNlcywgdXZzLCBpbmRpY2VzLCBkcmF3TW9kZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gdXZzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEsIDAsXG4gICAgICAgIDEsIDEsXG4gICAgICAgIDAsIDFdKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEwMCwgMCxcbiAgICAgICAgMTAwLCAxMDAsXG4gICAgICAgIDAsIDEwMF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICAvLyAgVE9ETyBhdXRvIGdlbmVyYXRlIHRoaXMgYmFzZWQgb24gZHJhdyBtb2RlIVxuICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXMgfHwgbmV3IFVpbnQxNkFycmF5KFswLCAxLCAzLCAyXSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBNZXNoIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gU2V0IHRvIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVtb3ZlIGFueSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRyaWFuZ2xlcyBpbiBjYW52YXMgbW9kZSBhcmUgYXV0b21hdGljYWxseSBhbnRpYWxpYXNlZCwgdXNlIHRoaXMgdmFsdWUgdG8gZm9yY2UgdHJpYW5nbGVzIHRvIG92ZXJsYXAgYSBiaXQgd2l0aCBlYWNoIG90aGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2F5IHRoZSBNZXNoIHNob3VsZCBiZSBkcmF3biwgY2FuIGJlIGFueSBvZiB0aGUge0BsaW5rIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVN9IGNvbnN0c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuZHJhd01vZGUgPSBkcmF3TW9kZSB8fCBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSDtcblxuICAgIC8vIHJ1biB0ZXh0dXJlIHNldHRlcjtcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBtZXNoIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5NZXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2g7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2g7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc2gucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkubWVzaC5NZXNoI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5tZXNoKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLm1lc2gucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4IHwgMCwgdHJhbnNmb3JtLnR5IHwgMCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHgsIHRyYW5zZm9ybS50eSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoKGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMoY29udGV4dCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIFRyaWFuZ2xlIE1lc2ggbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2ggPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoIC8gMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkgKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgsIChpbmRleCArIDIpLCAoaW5kZXggKyA0KSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIHRyaWFuZ2xlIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDMpXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXgwID0gaW5kaWNlc1tpXSAqIDIsIGluZGV4MSA9IGluZGljZXNbaSArIDFdICogMiwgaW5kZXgyID0gaW5kaWNlc1tpICsgMl0gKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4Mik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyBvbmUgb2YgdGhlIHRyaWFuZ2xlcyB0aGF0IGZvcm0gdGhpcyBNZXNoXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdmVydGljZXMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHZlcnRpY2VzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gdXZzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB1dnMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSBpbmRleDAge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDEge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgyIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlID0gZnVuY3Rpb24gKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpXG57XG4gICAgdmFyIHRleHR1cmVTb3VyY2UgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZTtcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aDtcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXgwXSwgeDEgPSB2ZXJ0aWNlc1tpbmRleDFdLCB4MiA9IHZlcnRpY2VzW2luZGV4Ml07XG4gICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgwICsgMV0sIHkxID0gdmVydGljZXNbaW5kZXgxICsgMV0sIHkyID0gdmVydGljZXNbaW5kZXgyICsgMV07XG5cbiAgICB2YXIgdTAgPSB1dnNbaW5kZXgwXSAqIHRleHR1cmVXaWR0aCwgdTEgPSB1dnNbaW5kZXgxXSAqIHRleHR1cmVXaWR0aCwgdTIgPSB1dnNbaW5kZXgyXSAqIHRleHR1cmVXaWR0aDtcbiAgICB2YXIgdjAgPSB1dnNbaW5kZXgwICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MSA9IHV2c1tpbmRleDEgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYyID0gdXZzW2luZGV4MiArIDFdICogdGV4dHVyZUhlaWdodDtcblxuICAgIGlmICh0aGlzLmNhbnZhc1BhZGRpbmcgPiAwKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmdYID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgcGFkZGluZ1kgPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciBjZW50ZXJYID0gKHgwICsgeDEgKyB4MikgLyAzO1xuICAgICAgICB2YXIgY2VudGVyWSA9ICh5MCArIHkxICsgeTIpIC8gMztcblxuICAgICAgICB2YXIgbm9ybVggPSB4MCAtIGNlbnRlclg7XG4gICAgICAgIHZhciBub3JtWSA9IHkwIC0gY2VudGVyWTtcblxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgwID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkwID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgLy9cblxuICAgICAgICBub3JtWCA9IHgxIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MSAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgxID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkxID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgbm9ybVggPSB4MiAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTIgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MiA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MiA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cblxuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGNvbnRleHQuY2xpcCgpO1xuXG4gICAgLy8gQ29tcHV0ZSBtYXRyaXggdHJhbnNmb3JtXG4gICAgdmFyIGRlbHRhID0gICh1MCAqIHYxKSAgICAgICsgKHYwICogdTIpICAgICAgKyAodTEgKiB2MikgICAgICAtICh2MSAqIHUyKSAgICAgIC0gKHYwICogdTEpICAgICAgLSAodTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQSA9ICh4MCAqIHYxKSAgICAgICsgKHYwICogeDIpICAgICAgKyAoeDEgKiB2MikgICAgICAtICh2MSAqIHgyKSAgICAgIC0gKHYwICogeDEpICAgICAgLSAoeDAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQiA9ICh1MCAqIHgxKSAgICAgICsgKHgwICogdTIpICAgICAgKyAodTEgKiB4MikgICAgICAtICh4MSAqIHUyKSAgICAgIC0gKHgwICogdTEpICAgICAgLSAodTAgKiB4Mik7XG4gICAgdmFyIGRlbHRhQyA9ICh1MCAqIHYxICogeDIpICsgKHYwICogeDEgKiB1MikgKyAoeDAgKiB1MSAqIHYyKSAtICh4MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB4MikgLSAodTAgKiB4MSAqIHYyKTtcbiAgICB2YXIgZGVsdGFEID0gKHkwICogdjEpICAgICAgKyAodjAgKiB5MikgICAgICArICh5MSAqIHYyKSAgICAgIC0gKHYxICogeTIpICAgICAgLSAodjAgKiB5MSkgICAgICAtICh5MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFFID0gKHUwICogeTEpICAgICAgKyAoeTAgKiB1MikgICAgICArICh1MSAqIHkyKSAgICAgIC0gKHkxICogdTIpICAgICAgLSAoeTAgKiB1MSkgICAgICAtICh1MCAqIHkyKTtcbiAgICB2YXIgZGVsdGFGID0gKHUwICogdjEgKiB5MikgKyAodjAgKiB5MSAqIHUyKSArICh5MCAqIHUxICogdjIpIC0gKHkwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHkyKSAtICh1MCAqIHkxICogdjIpO1xuXG4gICAgY29udGV4dC50cmFuc2Zvcm0oZGVsdGFBIC8gZGVsdGEsIGRlbHRhRCAvIGRlbHRhLFxuICAgICAgICBkZWx0YUIgLyBkZWx0YSwgZGVsdGFFIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQyAvIGRlbHRhLCBkZWx0YUYgLyBkZWx0YSk7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlU291cmNlLCAwLCAwKTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBmbGF0IE1lc2hcbiAqXG4gKiBAcGFyYW0gTWVzaCB7UElYSS5tZXNoLk1lc2h9IFRoZSBNZXNoIHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUucmVuZGVyTWVzaEZsYXQgPSBmdW5jdGlvbiAoTWVzaClcbntcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICB2YXIgdmVydGljZXMgPSBNZXNoLnZlcnRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aC8yO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgZm9yICh2YXIgaT0xOyBpIDwgbGVuZ3RoLTI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkqMjtcblxuICAgICAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleF0sICAgeDEgPSB2ZXJ0aWNlc1tpbmRleCsyXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleCs0XTtcbiAgICAgICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgrMV0sIHkxID0gdmVydGljZXNbaW5kZXgrM10sIHkyID0gdmVydGljZXNbaW5kZXgrNV07XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVwZGF0ZUZyYW1lID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBtZXNoIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5NZXNoLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICghdGhpcy5fY3VycmVudEJvdW5kcykge1xuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1pblkgPSBJbmZpbml0eTtcblxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IG47IGkgKz0gMikge1xuICAgICAgICAgICAgdmFyIHJhd1ggPSB2ZXJ0aWNlc1tpXSwgcmF3WSA9IHZlcnRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciB4ID0gKGEgKiByYXdYKSArIChjICogcmF3WSkgKyB0eDtcbiAgICAgICAgICAgIHZhciB5ID0gKGQgKiByYXdZKSArIChiICogcmF3WCkgKyB0eTtcblxuICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcblxuICAgICAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG4gICAgICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5YID09PSAtSW5maW5pdHkgfHwgbWF4WSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIG1lc2guIFdvcmtzIG9ubHkgZm9yIFRSSUFOR0xFX01FU0hcbiAqXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4gKi9cbk1lc2gucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKSB7XG4gICAgaWYgKCF0aGlzLmdldEJvdW5kcygpLmNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgcG9pbnRzID0gdGVtcFBvbHlnb24ucG9pbnRzO1xuICAgIHZhciBpLCBsZW47XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUykge1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICAgICAgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgLy9UT0RPOiBpbmxpbmUgdGhpcy5cbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Mykge1xuICAgICAgICAgICAgdmFyIGluZDAgPSBpbmRpY2VzW2ldKjIsIGluZDEgPSBpbmRpY2VzW2krMV0qMiwgaW5kMiA9IGluZGljZXNbaSsyXSoyO1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaW5kMF07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpbmQwKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaW5kMV07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpbmQxKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaW5kMl07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpbmQyKzFdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Nikge1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaSsyXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2krM107XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpKzRdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaSs1XTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEaWZmZXJlbnQgZHJhd2luZyBidWZmZXIgbW9kZXMgc3VwcG9ydGVkXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSFxuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gKi9cbk1lc2guRFJBV19NT0RFUyA9IHtcbiAgICBUUklBTkdMRV9NRVNIOiAwLFxuICAgIFRSSUFOR0xFUzogMVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG5cbi8qKlxuICogVGhlIFBsYW5lIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIFBsYW5lID0gbmV3IFBJWEkuUGxhbmUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgUGxhbmUuXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNYIC0gVGhlIG51bWJlciBveCB4IHNlZ21lbnRzXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNZIC0gVGhlIG51bWJlciBvZiB5IHNlZ21lbnRzXG4gKlxuICovXG5mdW5jdGlvbiBQbGFuZSh0ZXh0dXJlLCBzZWdtZW50c1gsIHNlZ21lbnRzWSlcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgUGxhbmUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWdtZW50c1ggPSAgc2VnbWVudHNYIHx8IDEwO1xuICAgIHRoaXMuc2VnbWVudHNZID0gc2VnbWVudHNZIHx8IDEwO1xuXG4gICAgdGhpcy5kcmF3TW9kZSA9IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVM7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUGxhbmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKTtcblBsYW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsYW5lO1xubW9kdWxlLmV4cG9ydHMgPSBQbGFuZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblBsYW5lLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciB0b3RhbCA9IHRoaXMuc2VnbWVudHNYICogdGhpcy5zZWdtZW50c1k7XG4gICAgdmFyIHZlcnRzID0gW107XG4gICAgdmFyIGNvbG9ycyA9IFtdO1xuICAgIHZhciB1dnMgPSBbXTtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuXG4gIC8vICB0ZXh0dXJlLndpZHRoID0gODAwIHRleHR1cmUud2lkdGggfHwgODAwO1xuIC8vICAgdGV4dHVyZS5oZWlnaHQgPSA4MDAvL3RleHR1cmUuaGVpZ2h0IHx8IDgwMDtcblxuICAgIHZhciBzZWdtZW50c1hTdWIgPSB0aGlzLnNlZ21lbnRzWCAtIDE7XG4gICAgdmFyIHNlZ21lbnRzWVN1YiA9IHRoaXMuc2VnbWVudHNZIC0gMTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB2YXIgc2l6ZVggPSB0ZXh0dXJlLndpZHRoIC8gc2VnbWVudHNYU3ViO1xuICAgIHZhciBzaXplWSA9IHRleHR1cmUuaGVpZ2h0IC8gc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcblxuICAgICAgICB2YXIgeCA9IChpICUgdGhpcy5zZWdtZW50c1gpO1xuICAgICAgICB2YXIgeSA9ICggKGkgLyB0aGlzLnNlZ21lbnRzWCApIHwgMCApO1xuXG5cbiAgICAgICAgdmVydHMucHVzaCgoeCAqIHNpemVYKSxcbiAgICAgICAgICAgICAgICAgICAoeSAqIHNpemVZKSk7XG5cbiAgICAgICAgLy8gdGhpcyB3b3JrcyBmb3IgcmVjdGFuZ3VsYXIgdGV4dHVyZXMuIFxuICAgICAgICB1dnMucHVzaCh0ZXh0dXJlLl91dnMueDAgKyAodGV4dHVyZS5fdXZzLngxIC0gdGV4dHVyZS5fdXZzLngwKSAqICh4IC8gKHRoaXMuc2VnbWVudHNYLTEpKSwgdGV4dHVyZS5fdXZzLnkwICsgKHRleHR1cmUuX3V2cy55My10ZXh0dXJlLl91dnMueTApICogKHkvICh0aGlzLnNlZ21lbnRzWS0xKSkpO1xuICAgICAgfVxuXG4gICAgLy8gIGNvbnNcblxuICAgIHZhciB0b3RhbFN1YiA9IHNlZ21lbnRzWFN1YiAqIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFN1YjsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHhwb3MgPSBpICUgc2VnbWVudHNYU3ViO1xuICAgICAgICB2YXIgeXBvcyA9IChpIC8gc2VnbWVudHNYU3ViICkgfCAwO1xuXG5cbiAgICAgICAgdmFyICB2YWx1ZSA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTIgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuICAgICAgICB2YXIgIHZhbHVlMyA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWU0ID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMyk7XG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZTIsIHZhbHVlNCwgdmFsdWUzKTtcbiAgICB9XG5cblxuICAgIC8vY29uc29sZS5sb2coaW5kaWNlcylcbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0cyk7XG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHV2cyk7XG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvbG9ycyk7XG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBsYW5lLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUGxhbmUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSByb3BlIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIHJvcGUgPSBuZXcgUElYSS5Sb3BlKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIHJvcGUuXG4gKiBAcGFyYW0ge1BJWEkuUG9pbnRbXX0gcG9pbnRzIC0gQW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuUG9pbnR9IG9iamVjdHMgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAqXG4gKi9cbmZ1bmN0aW9uIFJvcGUodGV4dHVyZSwgcG9pbnRzKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfSBBbiBhcnJheSBvZiBwb2ludHMgdGhhdCBkZXRlcm1pbmUgdGhlIHJvcGVcbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBvZiB2ZXJ0aWNlcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IFRoZSBXZWJHTCBVdnMgb2YgdGhlIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBjb21wb25lbnRzXG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSByb3BlIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICAgdGhpcy5yZWZyZXNoKCk7XG59XG5cblxuLy8gY29uc3RydWN0b3JcblJvcGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNZXNoLnByb3RvdHlwZSk7XG5Sb3BlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvcGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvcGU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5Sb3BlLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICAvLyBpZiB0b28gbGl0dGxlIHBvaW50cywgb3IgdGV4dHVyZSBoYXNuJ3QgZ290IFVWcyBzZXQgeWV0IGp1c3QgbW92ZSBvbi5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEgfHwgIXRoaXMuX3RleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cbiAgICB2YXIgdGV4dHVyZVV2cyA9IHRoaXMuX3RleHR1cmUuX3V2cztcbiAgICB2YXIgb2Zmc2V0ID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MCk7XG4gICAgdmFyIGZhY3RvciA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDIgLSB0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkyIC0gdGV4dHVyZVV2cy55MCk7XG5cbiAgICB1dnNbMF0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzFdID0gMCArIG9mZnNldC55O1xuICAgIHV2c1syXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgIGNvbG9yc1swXSA9IDE7XG4gICAgY29sb3JzWzFdID0gMTtcblxuICAgIGluZGljZXNbMF0gPSAwO1xuICAgIGluZGljZXNbMV0gPSAxO1xuXG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCBhbW91bnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcbiAgICAgICAgLy8gdGltZSB0byBkbyBzb21lIHNtYXJ0IGRyYXdpbmchXG4gICAgICAgIGFtb3VudCA9IGkgLyAodG90YWwtMSk7XG5cbiAgICAgICAgdXZzW2luZGV4XSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCsxXSA9IDAgKyBvZmZzZXQueTtcblxuICAgICAgICB1dnNbaW5kZXgrMl0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBjb2xvcnNbaW5kZXhdID0gMTtcbiAgICAgICAgY29sb3JzW2luZGV4KzFdID0gMTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGluZGV4O1xuICAgICAgICBpbmRpY2VzW2luZGV4ICsgMV0gPSBpbmRleCArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFJvcGUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9pbnQgPSBwb2ludHNbMF07XG4gICAgdmFyIG5leHRQb2ludDtcbiAgICB2YXIgcGVycFggPSAwO1xuICAgIHZhciBwZXJwWSA9IDA7XG5cbiAgICAvLyB0aGlzLmNvdW50IC09IDAuMjtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCByYXRpbywgcGVycExlbmd0aCwgbnVtO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG5cbiAgICAgICAgaWYgKGkgPCBwb2ludHMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50c1tpKzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwWSA9IC0obmV4dFBvaW50LnggLSBsYXN0UG9pbnQueCk7XG4gICAgICAgIHBlcnBYID0gbmV4dFBvaW50LnkgLSBsYXN0UG9pbnQueTtcblxuICAgICAgICByYXRpbyA9ICgxIC0gKGkgLyAodG90YWwtMSkpKSAqIDEwO1xuXG4gICAgICAgIGlmIChyYXRpbyA+IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhdGlvID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBMZW5ndGggPSBNYXRoLnNxcnQocGVycFggKiBwZXJwWCArIHBlcnBZICogcGVycFkpO1xuICAgICAgICBudW0gPSB0aGlzLl90ZXh0dXJlLmhlaWdodCAvIDI7IC8vKDIwICsgTWF0aC5hYnMoTWF0aC5zaW4oKGkgKyB0aGlzLmNvdW50KSAqIDAuMykgKiA1MCkgKSogcmF0aW87XG4gICAgICAgIHBlcnBYIC89IHBlcnBMZW5ndGg7XG4gICAgICAgIHBlcnBZIC89IHBlcnBMZW5ndGg7XG5cbiAgICAgICAgcGVycFggKj0gbnVtO1xuICAgICAgICBwZXJwWSAqPSBudW07XG5cbiAgICAgICAgdmVydGljZXNbaW5kZXhdID0gcG9pbnQueCArIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsxXSA9IHBvaW50LnkgKyBwZXJwWTtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMl0gPSBwb2ludC54IC0gcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzNdID0gcG9pbnQueSAtIHBlcnBZO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IHBvaW50O1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5tZXNoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1lc2g6ICAgICAgICAgICByZXF1aXJlKCcuL01lc2gnKSxcbiAgICBQbGFuZTogICAgICAgICAgIHJlcXVpcmUoJy4vUGxhbmUnKSxcbiAgICBSb3BlOiAgICAgICAgICAgcmVxdWlyZSgnLi9Sb3BlJyksXG4gICAgTWVzaFJlbmRlcmVyOiAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFJlbmRlcmVyJyksXG4gICAgTWVzaFNoYWRlcjogICAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFNoYWRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgTWVzaCA9IHJlcXVpcmUoJy4uL01lc2gnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBNZXNoUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL01lc2hSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDE1MDAwKTtcblxuICAgIC8vVE9ETyB0aGlzIGNvdWxkIGJlIGEgc2luZ2xlIGJ1ZmZlciBzaGFyZWQgYW1vbmdzdCBhbGwgcmVuZGVyZXJzIGFzIHdlIHJldXNlIHRoaXMgc2V0IHVwIGluIG1vc3QgcmVuZGVyZXJzXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCAxNTAwMDsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59XG5cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hSZW5kZXJlcjtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoJywgTWVzaFJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIGlmKCFtZXNoLl92ZXJ0ZXhCdWZmZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9pbml0V2ViR0wobWVzaCk7XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcixcbiAgICAgICAgZ2wgPSByZW5kZXJlci5nbCxcbiAgICAgICAgdGV4dHVyZSA9IG1lc2guX3RleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIHNoYWRlciA9IG1lc2guc2hhZGVyOy8vIHx8IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuXG4gICAgdmFyIGRyYXdNb2RlID0gbWVzaC5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0ggPyBnbC5UUklBTkdMRV9TVFJJUCA6IGdsLlRSSUFOR0xFUztcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKG1lc2guYmxlbmRNb2RlKTtcblxuICAgIC8vVE9ETyBjYWNoZSBjdXN0b20gc3RhdGUuLlxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHNoYWRlci5zaGFkZXJzW2dsLmlkXSB8fCBzaGFkZXIuZ2V0U2hhZGVyKHJlbmRlcmVyKTsvLyA6IHNoYWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXgudmFsdWUgPSBtZXNoLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXgudmFsdWUgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSBtZXNoLndvcmxkQWxwaGE7XG5cbiAgICBzaGFkZXIuc3luY1VuaWZvcm1zKCk7XG5cbiAgICBpZiAoIW1lc2guZGlydHkpXG4gICAge1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgbWVzaC52ZXJ0aWNlcyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG1lc2guaW5kaWNlcyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgbWVzaC5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb250IG5lZWQgdG8gdXBsb2FkIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgfVxuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGRyYXdNb2RlLCBtZXNoLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG5cbn07XG5cbi8qKlxuICogUHJlcGFyZXMgYWxsIHRoZSBidWZmZXJzIHRvIHJlbmRlciB0aGlzIG1lc2hcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuX2luaXRXZWJHTCA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIC8vIGJ1aWxkIHRoZSBzdHJpcCFcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgbWVzaC5fdmVydGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5faW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl91dkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG5cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICBpZihtZXNoLmNvbG9ycyl7XG4gICAgICAgIG1lc2guX2NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl9jb2xvckJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLmNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbn07XG5cblxuLyoqXG4gKiBFbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IG1lc2ggcmVuZGVyZXIuXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBcblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBNZXNoIHJlbmRlcmVyXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgV2ViR0wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgY29yZS5TaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogYWxwaGEgOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVZlcnRleFBvc2l0aW9uOjAsXG4gICAgICAgICAgICBhVGV4dHVyZUNvb3JkOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cbk1lc2hTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNoYWRlci5wcm90b3R5cGUpO1xuTWVzaFNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoU2hhZGVyO1xuXG5jb3JlLlNoYWRlck1hbmFnZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2hTaGFkZXInLCBNZXNoU2hhZGVyKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3NpZ25cblxuaWYgKCFNYXRoLnNpZ24pXG57XG4gICAgTWF0aC5zaWduID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCA9ICt4O1xuICAgICAgICBpZiAoeCA9PT0gMCB8fCBpc05hTih4KSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPiAwID8gMSA6IC0xO1xuICAgIH07XG59XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9vYmplY3QtYXNzaWduXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5cbmlmICghT2JqZWN0LmFzc2lnbilcbntcbiAgICBPYmplY3QuYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xufVxuIiwicmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL3JlcXVlc3RBbmltYXRpb25GcmFtZScpO1xucmVxdWlyZSgnLi9NYXRoLnNpZ24nKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTU3OTY3MVxuLy8gaHR0cDovL3VwZGF0ZXMuaHRtbDVyb2Nrcy5jb20vMjAxMi8wNS9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUtQVBJLW5vdy13aXRoLXN1Yi1taWxsaXNlY29uZC1wcmVjaXNpb25cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RpbWhhbGwvNDA3ODYxNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0ZpbmFuY2lhbC1UaW1lcy9wb2x5ZmlsbC1zZXJ2aWNlL3RyZWUvbWFzdGVyL3BvbHlmaWxscy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcblxuLy8gRXhwZWN0ZWQgdG8gYmUgdXNlZCB3aXRoIEJyb3dzZXJmaXlcbi8vIEJyb3dzZXJpZnkgYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZSB1c2Ugb2YgYGdsb2JhbGAgYW5kIHBhc3NlcyB0aGVcbi8vIGNvcnJlY3QgcmVmZXJlbmNlIG9mIGBnbG9iYWxgLCBgc2VsZmAsIGFuZCBmaW5hbGx5IGB3aW5kb3dgXG5cbi8vIERhdGUubm93XG5pZiAoIShEYXRlLm5vdyAmJiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lKSkge1xuICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcbn1cblxuLy8gcGVyZm9ybWFuY2Uubm93XG5pZiAoIShnbG9iYWwucGVyZm9ybWFuY2UgJiYgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdykpIHtcbiAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIWdsb2JhbC5wZXJmb3JtYW5jZSkge1xuICAgICAgICBnbG9iYWwucGVyZm9ybWFuY2UgPSB7fTtcbiAgICB9XG4gICAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgfTtcbn1cblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xudmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xuXG5mb3IodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8XG4gICAgICAgIGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xufVxuXG5pZiAoIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCksXG4gICAgICAgICAgICBkZWxheSA9IDE2ICsgbGFzdFRpbWUgLSBjdXJyZW50VGltZTtcblxuICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgIH07XG59XG5cbmlmICghZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xufVxuIl19 //# sourceMappingURL=pixi.js.map diff --git a/bin/pixi.js.map b/bin/pixi.js.map index 1d72f43..3256814 100644 --- a/bin/pixi.js.map +++ b/bin/pixi.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi.js","sourceRoot":"./","sourcesContent":[]} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi.js","sourceRoot":"./","sourcesContent":[]} \ No newline at end of file diff --git a/bin/pixi.min.js b/bin/pixi.min.js index db31e4a..ee1b45b 100644 --- a/bin/pixi.min.js +++ b/bin/pixi.min.js @@ -1,11 +1,11 @@ !function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&this.texture.uploadData(null,t,e),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=i.fromData(t,null,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a.unbind(),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a.unbind(),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t||null)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){return this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate(),this},i.prototype.unbind=function(){return this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null),this},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=X(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function P(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function D(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},X=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},Y="function"==typeof setImmediate&&setImmediate,z=Y?function(t){Y(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=Y?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=X(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return P(t,1,e)},N.log=D("log"),N.dir=D("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return P.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return D.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",P=/^xn--/,D=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r); g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v,p=""),d=decodeURIComponent(c),f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,P=M.length;P>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var D=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(D.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=D.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var X=i.indexOf("#");-1!==X&&(this.hash=i.substr(X),i=i.slice(0,X));var Y=i.indexOf("?");if(-1!==Y?(this.search=i.substr(Y),this.query=i.substr(Y+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,Y)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","gl-matrix":"git+https://github.com/toji/gl-matrix.git","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirtyTransform=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":56,"../textures/RenderTexture":100,"../utils":107,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.transform=new a,this.position=this.transform.position,this.scale=this.transform.scale,this.pivot=this.transform.pivot,this.skew=this.transform.skew,this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),t("./Transform")),h=new n.Matrix,u={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i;var l=function(t){this.doc=t,this.x=0,this.y=0};Object.defineProperties(l.prototype,{x:{get:function(){return this.doc.position.x},set:function(t){this.doc.position.x=t,this.doc.dirtyTransform=!0}},y:{get:function(){return this.doc.posiiton.y},set:function(t){this.doc.position.y=t,this.doc.dirtyTransform=!0}}}),Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return h.tx=-i.x,h.ty=-i.y,n.render(this,h),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":56,"../textures/RenderTexture":100,"./Transform":41,eventemitter3:25}],41:[function(t,e,r){function i(){this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.position=new n.Point(0),this.scale=new n.Point(1,1),this.pivot=new n.Point(0),this.skew=new n.Point(0),this.rotation=0,this.dirty=!0}var n=t("../math");i.prototype.constructor=i,i.prototype.updateTransform=function(t){var e=t.worldTransform,r=this.worldTransform,i=this.localTransform;return i.a=this._cr*this.scale.x,i.b=this._sr*this.scale.x,i.c=-this._sr*this.scale.y,i.d=this._cr*this.scale.y,i.tx=this.position.x-(this.pivot.x*i.a+this.pivot.y*i.c),i.ty=this.position.y-(this.pivot.x*i.b+this.pivot.y*i.d),r.a=i.a*e.a+i.b*e.c,r.b=i.a*e.b+i.b*e.d,r.c=i.c*e.a+i.d*e.c,r.d=i.c*e.b+i.d*e.d,r.tx=i.tx*e.a+i.ty*e.c+e.tx,r.ty=i.tx*e.b+i.ty*e.d+e.ty,this.dirty=!1,!0},e.exports=i},{"../math":56}],42:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils":107,"./WebGLGraphicsData":45,"./shaders/PrimitiveShader":46,"./utils/buildCircle":47,"./utils/buildComplexPoly":48,"./utils/buildLine":49,"./utils/buildPoly":50,"./utils/buildRectangle":51,"./utils/buildRoundedRectangle":52,earcut:24}],45:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],46:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],47:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":107,"./buildLine":49}],48:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":107,"./buildLine":49}],49:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":56,"../../../utils":107}],50:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":107}],51:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":107,"./buildLine":49}],52:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":107,"./buildLine":49}],53:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),BaseRenderTexture:t("./textures/BaseRenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":42,"./graphics/GraphicsData":43,"./graphics/webgl/GraphicsRenderer":44,"./math":56,"./particles/ParticleContainer":62,"./particles/webgl/ParticleRenderer":64,"./renderers/canvas/CanvasRenderer":67,"./renderers/canvas/utils/CanvasBuffer":68,"./renderers/canvas/utils/CanvasGraphics":69,"./renderers/webgl/WebGLRenderer":73,"./renderers/webgl/filters/AbstractFilter":74,"./renderers/webgl/filters/FXAAFilter":75,"./renderers/webgl/filters/SpriteMaskFilter":76,"./renderers/webgl/managers/ShaderManager":80,"./renderers/webgl/managers/WebGLManager":82,"./renderers/webgl/shaders/Shader":85,"./renderers/webgl/utils/ObjectRenderer":88,"./renderers/webgl/utils/RenderTarget":90,"./sprites/Sprite":94,"./sprites/webgl/SpriteRenderer":95,"./text/Text":97,"./textures/BaseRenderTexture":98,"./textures/BaseTexture":99,"./textures/RenderTexture":100,"./textures/Texture":101,"./textures/TextureUvs":102,"./textures/VideoBaseTexture":103,"./ticker":105,"./utils":107,"pixi-gl-core":1}],54:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":55}],55:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],56:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":54,"./Point":55,"./shapes/Circle":57,"./shapes/Ellipse":58,"./shapes/Polygon":59,"./shapes/Rectangle":60,"./shapes/RoundedRectangle":61}],57:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":60}],58:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":60}],59:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":55}],60:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],62:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"./ParticleBuffer":63,"./ParticleShader":65}],65:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{ -uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":86}],66:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,transform:{worldTransform:new o.Matrix},worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":56,"../utils":107,eventemitter3:25}],67:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":56,"../../utils":107,"../SystemRenderer":66,"./utils/CanvasMaskManager":70}],68:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],69:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],70:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":69}],71:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":86}],75:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\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\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\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)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":74}],76:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":56,"./AbstractFilter":74}],77:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":82}],78:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":107}],86:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":85}],87:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],88:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":82}],89:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],90:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=(t("pixi-gl-core").GLTexture,t("pixi-gl-core").GLFramebuffer),s=t("./StencilMaskStack"),a=function(t,e,r,a,h,u){this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=h||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.defaultFrame=new PIXI.Rectangle,this.destinationFrame=null,this.sourceFrame=null,this.stencilBuffer=null,this.stencilMaskStack=new s,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=a||n.SCALE_MODES.DEFAULT,this.root=u,this.frameBuffer=o.createRGBA(t,100,100),this.root?this.frameBuffer.framebuffer=null:this.texture=this.frameBuffer.texture,this.resize(e,r)};a.prototype.constructor=a,e.exports=a,a.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},a.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},a.prototype.activate=function(t,e){var r=this.gl;this.frameBuffer.bind(),this.destinationFrame=t||this.destinationFrame||this.defaultFrame,this.sourceFrame=e||this.sourceFrame||t,this.calculateProjection(this.destinationFrame,this.sourceFrame),this.transform&&this.projectionMatrix.append(this.transform),this.destinationFrame!==this.sourceFrame?(r.enable(r.SCISSOR_TEST),r.scissor(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)):r.disable(r.SCISSOR_TEST),r.viewport(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)},a.prototype.calculateProjection=function(t,e){var r=this.projectionMatrix;e=e||t,r.identity(),this.root?(r.a=1/t.width*2,r.d=-1/t.height*2,r.tx=-1-e.x*r.a,r.ty=1-e.y*r.d):(r.a=1/t.width*2,r.d=1/t.height*2,r.tx=-1-e.x*r.a,r.ty=-1-e.y*r.d)},a.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.defaultFrame.width=t,this.defaultFrame.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},a.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":56,"../../../utils":107,"./StencilMaskStack":91,"pixi-gl-core":1}],91:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],92:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],93:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],94:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.transform.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0); -}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],97:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=t,this.height=e,this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(t){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear(!1,t))},i.prototype.renderWebGL=function(t,e,r,i,n){if(this.valid){if(n=void 0!==n?n:!0,this.textureBuffer.transform=r,this.textureBuffer.activate(),e.worldAlpha=1,n){e.worldTransform.identity(),e.currentBounds=null;var o,s,a=e.children;for(o=0,s=a.length;s>o;++o)a[o].updateTransform()}p.width=t.height,p.height=t.width;var h=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.textureBuffer.activate(t,p),console.log(e),this.renderer.renderDisplayObject(e,this.textureBuffer,i),this.renderer.filterManager=h}},i.prototype.renderCanvas=function(t,e,r,i,n){if(this.valid){n=!!n;var o=c;o.identity(),r&&o.append(r),o.tx+=t.x,o.ty+=t.y;var s=e.worldTransform;e.worldTransform=o,e.worldAlpha=1;var a,h,u=e.children;for(a=0,h=u.length;h>a;++a)u[a].updateTransform();i&&this.textureBuffer.clear();var l=this.textureBuffer.context,p=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(e,l),this.renderer.resolution=p,e.worldTransform===o&&(e.worldTransform=s)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(t){var e=new Image;return e.src=this.getBase64(t),e},i.prototype.getBase64=function(t){return this.getCanvas(t).toDataURL()},i.prototype.getCanvas=function(t){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution,i=this.renderer.gl,n=new Uint8Array(4*e*r);i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null);var o=new h(e,r),s=o.context.getImageData(0,0,e,r);return s.data.set(n),o.context.putImageData(s,0,0),o.canvas}if(t||(t=p,t.width=this.textureBuffer.canvas.width,t.height=this.textureBuffer.canvas.height),t.width===this.textureBuffer.canvas.width&&t.height===this.textureBuffer.canvas.height)return this.textureBuffer.canvas;var a=this.resolution,o=new h(t.width*a,t.height*a),s=this.textureBuffer.context.getImageData(t.x*a,t.y*a,t.width*a,t.height*a);return o.context.putImageData(s,0,0),o.canvas},i.prototype.getPixels=function(t){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var i=this.renderer.gl,n=new Uint8Array(4*e*r);return i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null),n}return this.textureBuffer.canvas.getContext("2d").getImageData(t.x*this.resolution,t.y*this.resolution,e,r).data},i.prototype.getPixel=function(t,e,r){return p.x=e,p.y=r,p.width=1/this.resolution,p.height=1/this.resolution,t&&(p.x+=t.x,p.y+=t.y),this.getPixels(p)}},{"../const":38,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/webgl/managers/FilterManager":78,"../renderers/webgl/utils/RenderTarget":90,"./BaseTexture":99,"./Texture":101}],99:[function(t,e,r){function i(t,e,r){s.call(this),this.uid=n.uid(),this.resolution=r||1,this.width=100,this.height=100,this.realWidth=100,this.realHeight=100,this.scaleMode=e||o.SCALE_MODES.DEFAULT,this.hasLoaded=!1,this.isLoading=!1,this.source=null,this.premultipliedAlpha=!0,this.imageUrl=null,this.isPowerOfTwo=!1,this.mipmap=!1,this._glTextures={},this._active=!1,this._id=0,t&&this.loadSource(t)}var n=t("../utils"),o=t("../const"),s=t("eventemitter3");i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.update=function(){this.realWidth=this.source.naturalWidth||this.source.width,this.realHeight=this.source.naturalHeight||this.source.height,this.width=this.realWidth/this.resolution,this.height=this.realHeight/this.resolution,this.isPowerOfTwo=n.isPowerOfTwo(this.realWidth,this.realHeight),this.emit("update",this)},i.prototype.loadSource=function(t){var e=this.isLoading;if(this.hasLoaded=!1,this.isLoading=!1,e&&this.source&&(this.source.onload=null,this.source.onerror=null),this.source=t,(this.source.complete||this.source.getContext)&&this.source.width&&this.source.height)this._sourceLoaded();else if(!t.getContext){this.isLoading=!0;var r=this;t.onload=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r._sourceLoaded(),r.emit("loaded",r))},t.onerror=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r.emit("error",r))},t.complete&&t.src&&(this.isLoading=!1,t.onload=null,t.onerror=null,t.width&&t.height?(this._sourceLoaded(),e&&this.emit("loaded",this)):e&&this.emit("error",this))}},i.prototype._sourceLoaded=function(){this.hasLoaded=!0,this.update()},i.prototype.destroy=function(){this.imageUrl?(delete n.BaseTextureCache[this.imageUrl],delete n.TextureCache[this.imageUrl],this.imageUrl=null,navigator.isCocoonJS||(this.source.src="")):this.source&&this.source._pixiId&&delete n.BaseTextureCache[this.source._pixiId],this.source=null,this.dispose()},i.prototype.dispose=function(){this.emit("dispose",this)},i.prototype.updateSourceImage=function(t){this.source.src=t,this.loadSource(this.source)},i.fromImage=function(t,e,r){var o=n.BaseTextureCache[t];if(void 0===e&&0!==t.indexOf("data:")&&(e=!0),!o){var s=new Image;e&&(s.crossOrigin=""),o=new i(s,r),o.imageUrl=t,s.src=t,n.BaseTextureCache[t]=o,o.resolution=n.getResolutionOfUrl(t)}return o},i.fromCanvas=function(t,e){t._pixiId||(t._pixiId="canvas_"+n.uid());var r=n.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),n.BaseTextureCache[t._pixiId]=r),r}},{"../const":38,"../utils":107,eventemitter3:25}],100:[function(t,e,r){function i(t,e){if(!renderer)throw new Error("Unable to create RenderTexture, you must pass a renderer into the constructor.");o.call(this,t,e),this.valid=!0,this._updateUvs()}var n=t("./BaseRenderTexture"),o=t("./Texture"),s=t("../math");t("../const"),new s.Matrix;i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.resize=function(t,e,r){this.valid=t>0&&e>0,this._frame.width=this.crop.width=t,this._frame.height=this.crop.height=e,r&&this.baseTexture.resize(t,e),this._updateUvs()},i.prototype.clear=function(){this.valid&&this.baseTexture.clear(this.frame)},i.prototype.render=function(t,e,r,i){this.valid&&this.baseTexture.render(this.frame,t,e,r,i)},i.prototype.getImage=function(){return this.baseTexture.getImage(this.frame)},i.prototype.getBase64=function(){return this.getBase64.getImage(this.frame)},i.prototype.getCanvas=function(){return this.baseTexture.getCanvas(this.frame)},i.prototype.getPixels=function(){return this.baseTexture.getPixels(this.frame)},i.prototype.getPixel=function(t,e){return this.baseTexture.getPixel(this.frame,t,e)},i.create=function(t,e,r,o,s){return new i(new n(t,e,r,o,s))}},{"../const":38,"../math":56,"./BaseRenderTexture":98,"./Texture":101}],101:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":56,"../utils":107,"./BaseTexture":99,"./TextureUvs":102,"./VideoBaseTexture":103,eventemitter3:25}],102:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],103:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],105:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":104}],106:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],107:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":108,async:16,eventemitter3:25}],108:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],109:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":53, -"./extras":116,"./filters":133,"./mesh":158}],110:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":53}],118:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":53,"../blur/BlurXFilter":121,"../blur/BlurYFilter":122}],119:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){ -t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":53}],125:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":53}],126:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":53}],127:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":53}],128:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":53}],129:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":53}],130:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":53}],140:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":53}],141:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":53,"./TiltShiftXFilter":142,"./TiltShiftYFilter":143}],142:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":140}],143:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":140}],144:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":53}],145:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":53,"./deprecation":109,"./extras":116,"./filters":133,"./interaction":148,"./loaders":151,"./mesh":158,"./polyfill":163}],146:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":53}],147:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){ -var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":53,"./InteractionData":146,"./interactiveTarget":149}],148:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":146,"./InteractionManager":147,"./interactiveTarget":149}],149:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],150:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":53}],156:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":155}],157:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":53,"./Mesh":155}],158:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":155,"./Plane":156,"./Rope":157,"./webgl/MeshRenderer":159,"./webgl/MeshShader":160}],159:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":53,"../Mesh":155}],160:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":53}],161:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],162:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],163:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":161,"./Object.assign":162,"./requestAnimationFrame":164}],164:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[145])(145)}); +i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.complete=function(){this.data&&this.data.removeEventListener&&(this.data.removeEventListener("error",this._boundOnError),this.data.removeEventListener("load",this._boundComplete),this.data.removeEventListener("progress",this._boundOnProgress),this.data.removeEventListener("canplaythrough",this._boundComplete)),this.xhr&&(this.xhr.removeEventListener?(this.xhr.removeEventListener("error",this._boundXhrOnError),this.xhr.removeEventListener("abort",this._boundXhrOnAbort),this.xhr.removeEventListener("progress",this._boundOnProgress),this.xhr.removeEventListener("load",this._boundXhrOnLoad)):(this.xhr.onerror=null,this.xhr.ontimeout=null,this.xhr.onprogress=null,this.xhr.onload=null)),this.emit("complete",this)},i.prototype.load=function(t){switch(this.emit("start",this),t&&this.once("complete",t),(this.crossOrigin===!1||"string"!=typeof this.crossOrigin)&&(this.crossOrigin=this._determineCrossOrigin(this.url)),this.loadType){case i.LOAD_TYPE.IMAGE:this._loadImage();break;case i.LOAD_TYPE.AUDIO:this._loadElement("audio");break;case i.LOAD_TYPE.VIDEO:this._loadElement("video");break;case i.LOAD_TYPE.XHR:default:h&&this.crossOrigin?this._loadXdr():this._loadXhr()}},i.prototype._loadImage=function(){this.data=new Image,this.crossOrigin&&(this.data.crossOrigin=this.crossOrigin),this.data.src=this.url,this.isImage=!0,this.data.addEventListener("error",this._boundOnError,!1),this.data.addEventListener("load",this._boundComplete,!1),this.data.addEventListener("progress",this._boundOnProgress,!1)},i.prototype._loadElement=function(t){if("audio"===t&&"undefined"!=typeof Audio?this.data=new Audio:this.data=document.createElement(t),null===this.data)return this.error=new Error("Unsupported element "+t),void this.complete();if(navigator.isCocoonJS)this.data.src=Array.isArray(this.url)?this.url[0]:this.url;else if(Array.isArray(this.url))for(var e=0;e0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","gl-matrix":"git+https://github.com/toji/gl-matrix.git","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.transform.dirty=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":57,"../textures/RenderTexture":101,"../utils":108,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.transform=new a,this.position=this.transform.position,this.scale=this.transform.scale,this.pivot=this.transform.pivot,this.skew=this.transform.skew,this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=this.transform.worldTransform,this.localTransform=this.transform.localTransform,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),t("./TransformStatic")),h=new n.Matrix,u={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return h.tx=-i.x,h.ty=-i.y,n.render(this,h),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":57,"../textures/RenderTexture":101,"./TransformStatic":42,eventemitter3:25}],41:[function(t,e,r){function i(t,e,r){this._x=e||0,this._y=r||0,this.transform=t}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this._x},set:function(t){this._x=t,this.transform.dirty=!0}},y:{get:function(){return this._y},set:function(t){this._y=t,this.transform.dirty=!0}}}),i.prototype.set=function(t,e){this._x=t||0,this._y=e||(0!==e?this._x:0),this.transform.dirty=!0}},{}],42:[function(t,e,r){function i(){this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.position=new o(this,0),this.scale=new o(this,1,1),this.pivot=new o(this,0,0),this.skew=new o(this,0,0),this.rotation=0,this._sr=Math.sin(0),this._cr=Math.cos(0),this.dirty=!0}var n=t("../math"),o=t("./ObservablePoint");i.prototype.constructor=i,i.prototype.updateTransform=function(t){var e=t.worldTransform,r=this.worldTransform,i=this.localTransform;console.log("DIRTY"),this.dirty&&(i.a=this._cr*this.scale._x,i.b=this._sr*this.scale._x,i.c=-this._sr*this.scale._y,i.d=this._cr*this.scale._y,i.tx=this.position._x-(this.pivot._x*i.a+this.pivot._y*i.c),i.ty=this.position._y-(this.pivot._x*i.b+this.pivot._y*i.d)),(this.dirty||parent.dirty)&&(r.a=i.a*e.a+i.b*e.c,r.b=i.a*e.b+i.b*e.d,r.c=i.c*e.a+i.d*e.c,r.d=i.c*e.b+i.d*e.d,r.tx=i.tx*e.a+i.ty*e.c+e.tx,r.ty=i.tx*e.b+i.ty*e.d+e.ty)},e.exports=i},{"../math":57,"./ObservablePoint":41}],43:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils":108,"./WebGLGraphicsData":46,"./shaders/PrimitiveShader":47,"./utils/buildCircle":48,"./utils/buildComplexPoly":49,"./utils/buildLine":50,"./utils/buildPoly":51,"./utils/buildRectangle":52,"./utils/buildRoundedRectangle":53,earcut:24}],46:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],47:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],48:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":108,"./buildLine":50}],49:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":108,"./buildLine":50}],50:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":57,"../../../utils":108}],51:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":108}],52:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":108,"./buildLine":50}],53:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":108,"./buildLine":50}],54:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),BaseRenderTexture:t("./textures/BaseRenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":43,"./graphics/GraphicsData":44,"./graphics/webgl/GraphicsRenderer":45,"./math":57,"./particles/ParticleContainer":63,"./particles/webgl/ParticleRenderer":65,"./renderers/canvas/CanvasRenderer":68,"./renderers/canvas/utils/CanvasBuffer":69,"./renderers/canvas/utils/CanvasGraphics":70,"./renderers/webgl/WebGLRenderer":74,"./renderers/webgl/filters/AbstractFilter":75,"./renderers/webgl/filters/FXAAFilter":76,"./renderers/webgl/filters/SpriteMaskFilter":77,"./renderers/webgl/managers/ShaderManager":81,"./renderers/webgl/managers/WebGLManager":83,"./renderers/webgl/shaders/Shader":86,"./renderers/webgl/utils/ObjectRenderer":89,"./renderers/webgl/utils/RenderTarget":91,"./sprites/Sprite":95,"./sprites/webgl/SpriteRenderer":96,"./text/Text":98,"./textures/BaseRenderTexture":99,"./textures/BaseTexture":100,"./textures/RenderTexture":101,"./textures/Texture":102,"./textures/TextureUvs":103,"./textures/VideoBaseTexture":104,"./ticker":106,"./utils":108,"pixi-gl-core":1}],55:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":56}],56:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],57:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":55,"./Point":56,"./shapes/Circle":58,"./shapes/Ellipse":59,"./shapes/Polygon":60,"./shapes/Rectangle":61,"./shapes/RoundedRectangle":62}],58:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":61}],59:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":61}],60:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":56}],61:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],63:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"./ParticleBuffer":64,"./ParticleShader":66}],66:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{ +uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":87}],67:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,transform:{worldTransform:new o.Matrix},worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":57,"../utils":108,eventemitter3:25}],68:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":57,"../../utils":108,"../SystemRenderer":67,"./utils/CanvasMaskManager":71}],69:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],70:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],71:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":70}],72:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":87}],76:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\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\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\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)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":75}],77:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":57,"./AbstractFilter":75}],78:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":83}],79:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":108}],87:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":86}],88:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],89:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":83}],90:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],91:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=(t("pixi-gl-core").GLTexture,t("pixi-gl-core").GLFramebuffer),s=t("./StencilMaskStack"),a=function(t,e,r,a,h,u){this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=h||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.defaultFrame=new PIXI.Rectangle,this.destinationFrame=null,this.sourceFrame=null,this.stencilBuffer=null,this.stencilMaskStack=new s,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=a||n.SCALE_MODES.DEFAULT,this.root=u,this.frameBuffer=o.createRGBA(t,100,100),this.root?this.frameBuffer.framebuffer=null:this.texture=this.frameBuffer.texture,this.resize(e,r)};a.prototype.constructor=a,e.exports=a,a.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},a.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},a.prototype.activate=function(t,e){var r=this.gl;this.frameBuffer.bind(),this.destinationFrame=t||this.destinationFrame||this.defaultFrame,this.sourceFrame=e||this.sourceFrame||t,this.calculateProjection(this.destinationFrame,this.sourceFrame),this.transform&&this.projectionMatrix.append(this.transform),this.destinationFrame!==this.sourceFrame?(r.enable(r.SCISSOR_TEST),r.scissor(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)):r.disable(r.SCISSOR_TEST),r.viewport(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)},a.prototype.calculateProjection=function(t,e){var r=this.projectionMatrix;e=e||t,r.identity(),this.root?(r.a=1/t.width*2,r.d=-1/t.height*2,r.tx=-1-e.x*r.a,r.ty=1-e.y*r.d):(r.a=1/t.width*2,r.d=1/t.height*2,r.tx=-1-e.x*r.a,r.ty=-1-e.y*r.d)},a.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.defaultFrame.width=t,this.defaultFrame.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},a.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":57,"../../../utils":108,"./StencilMaskStack":92,"pixi-gl-core":1}],92:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],93:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],94:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],95:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.transform.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0); +}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],98:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=t,this.height=e,this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(t){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear(!1,t))},i.prototype.renderWebGL=function(t,e,r,i,n){if(this.valid){if(n=void 0!==n?n:!0,this.textureBuffer.transform=r,this.textureBuffer.activate(),e.worldAlpha=1,n){e.worldTransform.identity(),e.currentBounds=null;var o,s,a=e.children;for(o=0,s=a.length;s>o;++o)a[o].updateTransform()}p.width=t.height,p.height=t.width;var h=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.textureBuffer.activate(t,p),console.log(e),this.renderer.renderDisplayObject(e,this.textureBuffer,i),this.renderer.filterManager=h}},i.prototype.renderCanvas=function(t,e,r,i,n){if(this.valid){n=!!n;var o=c;o.identity(),r&&o.append(r),o.tx+=t.x,o.ty+=t.y;var s=e.worldTransform;e.worldTransform=o,e.worldAlpha=1;var a,h,u=e.children;for(a=0,h=u.length;h>a;++a)u[a].updateTransform();i&&this.textureBuffer.clear();var l=this.textureBuffer.context,p=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(e,l),this.renderer.resolution=p,e.worldTransform===o&&(e.worldTransform=s)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(t){var e=new Image;return e.src=this.getBase64(t),e},i.prototype.getBase64=function(t){return this.getCanvas(t).toDataURL()},i.prototype.getCanvas=function(t){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution,i=this.renderer.gl,n=new Uint8Array(4*e*r);i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null);var o=new h(e,r),s=o.context.getImageData(0,0,e,r);return s.data.set(n),o.context.putImageData(s,0,0),o.canvas}if(t||(t=p,t.width=this.textureBuffer.canvas.width,t.height=this.textureBuffer.canvas.height),t.width===this.textureBuffer.canvas.width&&t.height===this.textureBuffer.canvas.height)return this.textureBuffer.canvas;var a=this.resolution,o=new h(t.width*a,t.height*a),s=this.textureBuffer.context.getImageData(t.x*a,t.y*a,t.width*a,t.height*a);return o.context.putImageData(s,0,0),o.canvas},i.prototype.getPixels=function(t){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var i=this.renderer.gl,n=new Uint8Array(4*e*r);return i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null),n}return this.textureBuffer.canvas.getContext("2d").getImageData(t.x*this.resolution,t.y*this.resolution,e,r).data},i.prototype.getPixel=function(t,e,r){return p.x=e,p.y=r,p.width=1/this.resolution,p.height=1/this.resolution,t&&(p.x+=t.x,p.y+=t.y),this.getPixels(p)}},{"../const":38,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/webgl/managers/FilterManager":79,"../renderers/webgl/utils/RenderTarget":91,"./BaseTexture":100,"./Texture":102}],100:[function(t,e,r){function i(t,e,r){s.call(this),this.uid=n.uid(),this.resolution=r||1,this.width=100,this.height=100,this.realWidth=100,this.realHeight=100,this.scaleMode=e||o.SCALE_MODES.DEFAULT,this.hasLoaded=!1,this.isLoading=!1,this.source=null,this.premultipliedAlpha=!0,this.imageUrl=null,this.isPowerOfTwo=!1,this.mipmap=!1,this._glTextures={},this._active=!1,this._id=0,t&&this.loadSource(t)}var n=t("../utils"),o=t("../const"),s=t("eventemitter3");i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.update=function(){this.realWidth=this.source.naturalWidth||this.source.width,this.realHeight=this.source.naturalHeight||this.source.height,this.width=this.realWidth/this.resolution,this.height=this.realHeight/this.resolution,this.isPowerOfTwo=n.isPowerOfTwo(this.realWidth,this.realHeight),this.emit("update",this)},i.prototype.loadSource=function(t){var e=this.isLoading;if(this.hasLoaded=!1,this.isLoading=!1,e&&this.source&&(this.source.onload=null,this.source.onerror=null),this.source=t,(this.source.complete||this.source.getContext)&&this.source.width&&this.source.height)this._sourceLoaded();else if(!t.getContext){this.isLoading=!0;var r=this;t.onload=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r._sourceLoaded(),r.emit("loaded",r))},t.onerror=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r.emit("error",r))},t.complete&&t.src&&(this.isLoading=!1,t.onload=null,t.onerror=null,t.width&&t.height?(this._sourceLoaded(),e&&this.emit("loaded",this)):e&&this.emit("error",this))}},i.prototype._sourceLoaded=function(){this.hasLoaded=!0,this.update()},i.prototype.destroy=function(){this.imageUrl?(delete n.BaseTextureCache[this.imageUrl],delete n.TextureCache[this.imageUrl],this.imageUrl=null,navigator.isCocoonJS||(this.source.src="")):this.source&&this.source._pixiId&&delete n.BaseTextureCache[this.source._pixiId],this.source=null,this.dispose()},i.prototype.dispose=function(){this.emit("dispose",this)},i.prototype.updateSourceImage=function(t){this.source.src=t,this.loadSource(this.source)},i.fromImage=function(t,e,r){var o=n.BaseTextureCache[t];if(void 0===e&&0!==t.indexOf("data:")&&(e=!0),!o){var s=new Image;e&&(s.crossOrigin=""),o=new i(s,r),o.imageUrl=t,s.src=t,n.BaseTextureCache[t]=o,o.resolution=n.getResolutionOfUrl(t)}return o},i.fromCanvas=function(t,e){t._pixiId||(t._pixiId="canvas_"+n.uid());var r=n.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),n.BaseTextureCache[t._pixiId]=r),r}},{"../const":38,"../utils":108,eventemitter3:25}],101:[function(t,e,r){function i(t,e){if(!renderer)throw new Error("Unable to create RenderTexture, you must pass a renderer into the constructor.");o.call(this,t,e),this.valid=!0,this._updateUvs()}var n=t("./BaseRenderTexture"),o=t("./Texture"),s=t("../math");t("../const"),new s.Matrix;i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.resize=function(t,e,r){this.valid=t>0&&e>0,this._frame.width=this.crop.width=t,this._frame.height=this.crop.height=e,r&&this.baseTexture.resize(t,e),this._updateUvs()},i.prototype.clear=function(){this.valid&&this.baseTexture.clear(this.frame)},i.prototype.render=function(t,e,r,i){this.valid&&this.baseTexture.render(this.frame,t,e,r,i)},i.prototype.getImage=function(){return this.baseTexture.getImage(this.frame)},i.prototype.getBase64=function(){return this.getBase64.getImage(this.frame)},i.prototype.getCanvas=function(){return this.baseTexture.getCanvas(this.frame)},i.prototype.getPixels=function(){return this.baseTexture.getPixels(this.frame)},i.prototype.getPixel=function(t,e){return this.baseTexture.getPixel(this.frame,t,e)},i.create=function(t,e,r,o,s){return new i(new n(t,e,r,o,s))}},{"../const":38,"../math":57,"./BaseRenderTexture":99,"./Texture":102}],102:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":57,"../utils":108,"./BaseTexture":100,"./TextureUvs":103,"./VideoBaseTexture":104,eventemitter3:25}],103:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],104:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],106:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":105}],107:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],108:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":109,async:16,eventemitter3:25}],109:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],110:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":54, +"./extras":117,"./filters":134,"./mesh":159}],111:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":54}],119:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":54,"../blur/BlurXFilter":122,"../blur/BlurYFilter":123}],120:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){ +t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":54}],126:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":54}],127:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":54}],128:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":54}],129:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":54}],130:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":54}],131:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":54}],141:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":54}],142:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":54,"./TiltShiftXFilter":143,"./TiltShiftYFilter":144}],143:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":141}],144:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":141}],145:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":54}],146:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":54,"./deprecation":110,"./extras":117,"./filters":134,"./interaction":149,"./loaders":152,"./mesh":159,"./polyfill":164}],147:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":54}],148:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){ +var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":54,"./InteractionData":147,"./interactiveTarget":150}],149:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":147,"./InteractionManager":148,"./interactiveTarget":150}],150:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],151:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":54}],157:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":156}],158:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":54,"./Mesh":156}],159:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":156,"./Plane":157,"./Rope":158,"./webgl/MeshRenderer":160,"./webgl/MeshShader":161}],160:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":54,"../Mesh":156}],161:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":54}],162:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],163:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],164:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":162,"./Object.assign":163,"./requestAnimationFrame":165}],165:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[146])(146)}); //# sourceMappingURL=pixi.min.js.map diff --git a/bin/pixi.min.js.map b/bin/pixi.min.js.map index 102b3e1..c95a532 100644 --- a/bin/pixi.min.js.map +++ b/bin/pixi.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","gl-matrix","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","dirtyTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Transform","pivot","_rotation","filterArea","_sr","_cr","_tempDisplayObjectParent","CachePoint","doc","posiiton","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const","./Transform",41,"localTransform","Point","parentTransform","pt","lt",42,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",43,"_lineTint","_fillTint",44,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",45,"glPoints","glIndices","Uint16Array","deleteBuffer",46,47,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",48,49,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",50,"vertPos",51,"rectData",52,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",53,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","BaseRenderTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseRenderTexture","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",54,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",55,56,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",57,"dx","dy","r2","./Rectangle",58,"normx","normy",59,"points_","il","xi","yi","xj","yj","intersect","../Point",60,61,62,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",63,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",64,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",65,"TextureShader","../../renderers/webgl/shaders/TextureShader",66,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",67,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",68,69,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",70,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",71,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",72,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",73,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",74,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",75,"./AbstractFilter",76,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",77,"currentBlendMode","blendFunc","./WebGLManager",78,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",79,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",80,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",81,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",82,83,"./Shader",84,85,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",86,"customUniforms","customAttributes","uSampler",87,88,"../managers/WebGLManager",89,"colors","rect2",90,"StencilMaskStack","frameBuffer","defaultFrame","destinationFrame","sourceFrame","stencilBuffer","calculateProjection","SCISSOR_TEST","scissor","viewport","pm","projectionFrame","./StencilMaskStack",91,92,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",93,94,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",95,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",96,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",97,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",98,"textureBuffer","tempRect","currentBounds","cachedWt","realResolution","getImage","image","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",99,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","getResolutionOfUrl",100,"baseRenderTexture","_updateUvs","updateBase","./BaseRenderTexture",101,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",102,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",103,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",104,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",105,"shared","./Ticker",106,"totalIndices",107,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",108,"__plugins","pluginName","ctor",109,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",110,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",111,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",112,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",113,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",114,"getChildByName",115,"getGlobalPosition",116,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",117,"AsciiFilter","pixelSize","../../core",118,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",119,"BlurDirFilter","dirX","dirY","strength","passes",120,"BlurFilter","./BlurXFilter","./BlurYFilter",121,"flip","flop",122,123,"SmartBlurFilter",124,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",125,"ColorStepFilter",126,"ConvolutionFilter","texelSize",127,"CrossHatchFilter",128,"DisplacementFilter","mapSampler",129,"DotScreenFilter",130,"BlurYTintFilter",131,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",132,"GrayFilter","gray",133,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",134,135,"noise",136,137,"red","green","blue",138,139,"center","params",140,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",141,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",142,"./TiltShiftAxisFilter",143,144,145,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",146,"InteractionData","originalEvent","getLocalPosition","globalPos",147,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",148,"interactiveTarget","./InteractionManager",149,150,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",151,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",152,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",153,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",154,155,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",156,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",157,"factor","nextPoint","perpLength","num","perpX","perpY",158,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",159,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",160,161,"isNaN",162,163,"./Math.sign","./Object.assign","./requestAnimationFrame",164,"Date","getTime","startTime","vendors","delay"],"mappings":"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AA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAw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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","gl-matrix","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","worldAlpha","alpha","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Transform","pivot","_rotation","localTransform","filterArea","_sr","_cr","dirtyTransform","_tempDisplayObjectParent","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","displayObjectUpdateTransform","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const","./TransformStatic",41,"ObservablePoint","_x","_y",42,"parentTransform","pt","lt","./ObservablePoint",43,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","Point","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",44,"_lineTint","_fillTint",45,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",46,"glPoints","glIndices","Uint16Array","deleteBuffer",47,48,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",49,50,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",51,"vertPos",52,"rectData",53,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",54,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","BaseRenderTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseRenderTexture","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",55,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",56,57,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",58,"dx","dy","r2","./Rectangle",59,"normx","normy",60,"points_","il","xi","yi","xj","yj","intersect","../Point",61,62,63,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",64,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",65,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",66,"TextureShader","../../renderers/webgl/shaders/TextureShader",67,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",68,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",69,70,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",71,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",72,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",73,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",74,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",75,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",76,"./AbstractFilter",77,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",78,"currentBlendMode","blendFunc","./WebGLManager",79,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",80,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",81,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",82,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",83,84,"./Shader",85,86,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",87,"customUniforms","customAttributes","uSampler",88,89,"../managers/WebGLManager",90,"colors","rect2",91,"StencilMaskStack","frameBuffer","defaultFrame","destinationFrame","sourceFrame","stencilBuffer","calculateProjection","SCISSOR_TEST","scissor","viewport","pm","projectionFrame","./StencilMaskStack",92,93,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",94,95,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",96,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",97,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",98,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",99,"textureBuffer","tempRect","currentBounds","cachedWt","realResolution","getImage","image","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",100,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","getResolutionOfUrl",101,"baseRenderTexture","_updateUvs","updateBase","./BaseRenderTexture",102,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",103,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",104,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",105,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",106,"shared","./Ticker",107,"totalIndices",108,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",109,"__plugins","pluginName","ctor",110,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",111,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",112,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",113,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",114,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",115,"getChildByName",116,"getGlobalPosition",117,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",118,"AsciiFilter","pixelSize","../../core",119,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",120,"BlurDirFilter","dirX","dirY","strength","passes",121,"BlurFilter","./BlurXFilter","./BlurYFilter",122,"flip","flop",123,124,"SmartBlurFilter",125,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",126,"ColorStepFilter",127,"ConvolutionFilter","texelSize",128,"CrossHatchFilter",129,"DisplacementFilter","mapSampler",130,"DotScreenFilter",131,"BlurYTintFilter",132,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",133,"GrayFilter","gray",134,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",135,136,"noise",137,138,"red","green","blue",139,140,"center","params",141,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",142,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",143,"./TiltShiftAxisFilter",144,145,146,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",147,"InteractionData","originalEvent","getLocalPosition","globalPos",148,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",149,"interactiveTarget","./InteractionManager",150,151,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",152,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",153,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",154,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",155,156,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",157,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",158,"factor","nextPoint","perpLength","num","perpX","perpY",159,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",160,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",161,162,"isNaN",163,164,"./Math.sign","./Object.assign","./requestAnimationFrame",165,"Date","getTime","startTime","vendors","delay"],"mappings":"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AA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 64e912a..9199f9d 100644 --- a/src/core/display/Container.js +++ b/src/core/display/Container.js @@ -399,7 +399,7 @@ this.children[i].updateTransform(); } - this.dirtyTransform = false; + this.transform.dirty = false; }; // performance increase to avoid using call.. (10x faster) diff --git a/src/core/display/DisplayObject.js b/src/core/display/DisplayObject.js index 06bd523..3cc5c2f 100644 --- a/src/core/display/DisplayObject.js +++ b/src/core/display/DisplayObject.js @@ -2,7 +2,7 @@ RenderTexture = require('../textures/RenderTexture'), EventEmitter = require('eventemitter3'), CONST = require('../const'), - Transform = require('./Transform'), + Transform = require('./TransformStatic'), _tempMatrix = new math.Matrix(), _tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1, children:[]}; @@ -114,22 +114,6 @@ */ this.filterArea = null; - /**xww - * cached sin rotation - * - * @member {number} - * @private - */ - this._sr = 0; - - /** - * cached cos rotation - * - * @member {number} - * @private - */ - this._cr = 1; - /** * The original, cached bounds of the object * @@ -154,7 +138,7 @@ */ this._mask = null; - this.dirtyTransform = true; + // this.dirtyTransform = true; } // constructor @@ -238,9 +222,9 @@ set: function (value) { this._rotation = value; - this.dirtyTransform = true; - this._sr = Math.sin(value); - this._cr = Math.cos(value); + this.transform.dirty = true; + this.transform._sr = Math.sin(value); + this.transform._cr = Math.cos(value); } }, @@ -344,6 +328,7 @@ */ DisplayObject.prototype.updateTransform = function () { + //if(this.transform.dirty || parent.transform.dirty) this.transform.updateTransform(this.parent.transform); // multiply the alphas.. this.worldAlpha = this.alpha * this.parent.worldAlpha; diff --git a/src/core/display/ObservablePoint.js b/src/core/display/ObservablePoint.js new file mode 100644 index 0000000..fd7a04b --- /dev/null +++ b/src/core/display/ObservablePoint.js @@ -0,0 +1,68 @@ +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents + * the horizontal axis and y represents the vertical axis. + * + * @class + * @memberof PIXI + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +function ObservablePoint(transform, x, y) +{ + this._x = x || 0; + this._y = y || 0; + + this.transform = transform; +} + +ObservablePoint.prototype.constructor = ObservablePoint; +module.exports = ObservablePoint; + + + +Object.defineProperties(ObservablePoint.prototype, { + /** + * The position of the displayObject on the x axis relative to the local coordinates of the parent. + * + * @member {number} + * @memberof PIXI.DisplayObject# + */ + x: { + get: function () + { + return this._x; + }, + set: function (value) + { + this._x = value; + this.transform.dirty = true; + } + }, + + y: { + get: function () + { + return this._y; + }, + set: function (value) + { + this._y = value; + this.transform.dirty = true; + } + } +}); + +/** + * Sets the point to a new x and y position. + * If y is omitted, both x and y will be set to x. + * + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +ObservablePoint.prototype.set = function (x, y) +{ + this._x = x || 0; + this._y = y || ( (y !== 0) ? this._x : 0 ); + + this.transform.dirty = true; +}; diff --git a/src/core/display/Transform.js b/src/core/display/Transform.js index eefc915..d57503d 100644 --- a/src/core/display/Transform.js +++ b/src/core/display/Transform.js @@ -36,34 +36,21 @@ var wt = this.worldTransform; var lt = this.localTransform; + // get the matrix values of the displayobject based on its transform properties.. + lt.a = this._cr * this.scale.x; + lt.b = this._sr * this.scale.x; + lt.c = -this._sr * this.scale.y; + lt.d = this._cr * this.scale.y; + lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c); + lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d); + // concat the parent matrix with the objects transform. + wt.a = lt.a * pt.a + lt.b * pt.c; + wt.b = lt.a * pt.b + lt.b * pt.d; + wt.c = lt.c * pt.a + lt.d * pt.c; + wt.d = lt.c * pt.b + lt.d * pt.d; + wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; + wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; - if(this.dirty) - { - // get the matrix values of the displayobject based on its transform properties.. - lt.a = this._cr * this.scale.x; - lt.b = this._sr * this.scale.x; - lt.c = -this._sr * this.scale.y; - lt.d = this._cr * this.scale.y; - lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c); - lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d); - } - - if(this.dirty || parent.dirty) - { - // concat the parent matrix with the objects transform. - wt.a = lt.a * pt.a + lt.b * pt.c; - wt.b = lt.a * pt.b + lt.b * pt.d; - wt.c = lt.c * pt.a + lt.d * pt.c; - wt.d = lt.c * pt.b + lt.d * pt.d; - wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; - wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; - - // this.dirty = false; - // return true; - } - -// this.dirty = false; - // return false; } module.exports = Transform; diff --git a/src/core/display/TransformSimple.js b/src/core/display/TransformSimple.js deleted file mode 100644 index e9793e2..0000000 --- a/src/core/display/TransformSimple.js +++ /dev/null @@ -1,63 +0,0 @@ -var math = require('../math'); - - -/** - * The Point object represents a location in a two-dimensional coordinate system, where x represents - * the horizontal axis and y represents the vertical axis. - * - * @class - * @memberof PIXI - * @param [x=0] {number} position of the point on the x axis - * @param [y=0] {number} position of the point on the y axis - */ -function Transform() -{ - this.worldTransform = new math.Matrix(); - this.localTransform = new math.Matrix(); - - this.position = new math.Point(0.0); - this.scale = new math.Point(1,1); - this.pivot = new math.Point(0.0); - this.skew = new math.Point(0.0); - - this.rotation = 0; - this._sr = Math.sin(0); - this._cr = Math.cos(0); - - - this.dirty = true; -} - -Transform.prototype.constructor = Transform; - -Transform.prototype.updateTransform = function (parentTransform) -{ - var pt = parentTransform.worldTransform; - var wt = this.worldTransform; - var lt = this.localTransform; - - - if(this.dirty) - { - // get the matrix values of the displayobject based on its transform properties.. - - lt.tx = this.position.x; - lt.ty = this.position.y; - } - - if(this.dirty || parent.dirty) - { - wt.tx = lt.tx; - wt.ty = lt.ty; - - // this.dirty = false; - // return true; - } - -// this.dirty = false; - // return false; -} - -module.exports = Transform; - - diff --git a/src/core/display/TransformStatic.js b/src/core/display/TransformStatic.js new file mode 100644 index 0000000..3e1aaa9 --- /dev/null +++ b/src/core/display/TransformStatic.js @@ -0,0 +1,69 @@ +var math = require('../math'); +var ObservablePoint = require('./ObservablePoint'); + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents + * the horizontal axis and y represents the vertical axis. + * + * @class + * @memberof PIXI + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +function Transform() +{ + this.worldTransform = new math.Matrix(); + this.localTransform = new math.Matrix(); + + this.position = new ObservablePoint(this, 0); + this.scale = new ObservablePoint(this,1, 1); + this.pivot = new ObservablePoint(this, 0, 0); + this.skew = new ObservablePoint(this, 0,0); + + this.rotation = 0; + this._sr = Math.sin(0); + this._cr = Math.cos(0); + + this.dirty = true; + + + this.updated = true; +} + +Transform.prototype.constructor = Transform; + +Transform.prototype.updateTransform = function (parentTransform) +{ + var pt = parentTransform.worldTransform; + var wt = this.worldTransform; + var lt = this.localTransform; + + if(this.dirty) + { + // get the matrix values of the displayobject based on its transform properties.. + lt.a = this._cr * this.scale._x; + lt.b = this._sr * this.scale._x; + lt.c = -this._sr * this.scale._y; + lt.d = this._cr * this.scale._y; + lt.tx = this.position._x - (this.pivot._x * lt.a + this.pivot._y * lt.c); + lt.ty = this.position._y - (this.pivot._x * lt.b + this.pivot._y * lt.d); + } + + this.updated = this.dirty || parentTransform.dirty; + + if(this.updated) + { + // concat the parent matrix with the objects transform. + wt.a = lt.a * pt.a + lt.b * pt.c; + wt.b = lt.a * pt.b + lt.b * pt.d; + wt.c = lt.c * pt.a + lt.d * pt.c; + wt.d = lt.c * pt.b + lt.d * pt.d; + wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; + wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; + } + +} + +module.exports = Transform; + + diff --git a/bin/pixi.js b/bin/pixi.js index df52170..915f5c1 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -1,7 +1,7 @@ /** * @license * pixi.js - v3.0.10-dev - * Compiled 2016-01-18T21:33:26.540Z + * Compiled 2016-01-18T22:34:48.843Z * * pixi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -8072,7 +8072,7 @@ core.CanvasRenderer.registerPlugin('accessibility', AccessibilityManager); -},{"../core":53,"./accessibleTarget":36}],36:[function(require,module,exports){ +},{"../core":54,"./accessibleTarget":36}],36:[function(require,module,exports){ /** * Default property values of accessible objects * used by {@link PIXI.accessibility.AccessibilityManager}. @@ -8759,7 +8759,7 @@ this.children[i].updateTransform(); } - this.dirtyTransform = false; + this.transform.dirty = false; }; // performance increase to avoid using call.. (10x faster) @@ -9005,12 +9005,12 @@ this.children = null; }; -},{"../math":56,"../textures/RenderTexture":100,"../utils":107,"./DisplayObject":40}],40:[function(require,module,exports){ +},{"../math":57,"../textures/RenderTexture":101,"../utils":108,"./DisplayObject":40}],40:[function(require,module,exports){ var math = require('../math'), RenderTexture = require('../textures/RenderTexture'), EventEmitter = require('eventemitter3'), CONST = require('../const'), - Transform = require('./Transform'), + Transform = require('./TransformStatic'), _tempMatrix = new math.Matrix(), _tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1, children:[]}; @@ -9122,22 +9122,6 @@ */ this.filterArea = null; - /**xww - * cached sin rotation - * - * @member {number} - * @private - */ - this._sr = 0; - - /** - * cached cos rotation - * - * @member {number} - * @private - */ - this._cr = 1; - /** * The original, cached bounds of the object * @@ -9162,7 +9146,7 @@ */ this._mask = null; - this.dirtyTransform = true; + // this.dirtyTransform = true; } // constructor @@ -9246,9 +9230,9 @@ set: function (value) { this._rotation = value; - this.dirtyTransform = true; - this._sr = Math.sin(value); - this._cr = Math.cos(value); + this.transform.dirty = true; + this.transform._sr = Math.sin(value); + this.transform._cr = Math.cos(value); } }, @@ -9352,6 +9336,7 @@ */ DisplayObject.prototype.updateTransform = function () { + //if(this.transform.dirty || parent.transform.dirty) this.transform.updateTransform(this.parent.transform); // multiply the alphas.. this.worldAlpha = this.alpha * this.parent.worldAlpha; @@ -9554,9 +9539,79 @@ this.filterArea = null; }; -},{"../const":38,"../math":56,"../textures/RenderTexture":100,"./Transform":41,"eventemitter3":25}],41:[function(require,module,exports){ -var math = require('../math'); +},{"../const":38,"../math":57,"../textures/RenderTexture":101,"./TransformStatic":42,"eventemitter3":25}],41:[function(require,module,exports){ +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents + * the horizontal axis and y represents the vertical axis. + * + * @class + * @memberof PIXI + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +function ObservablePoint(transform, x, y) +{ + this._x = x || 0; + this._y = y || 0; + this.transform = transform; +} + +ObservablePoint.prototype.constructor = ObservablePoint; +module.exports = ObservablePoint; + + + +Object.defineProperties(ObservablePoint.prototype, { + /** + * The position of the displayObject on the x axis relative to the local coordinates of the parent. + * + * @member {number} + * @memberof PIXI.DisplayObject# + */ + x: { + get: function () + { + return this._x; + }, + set: function (value) + { + this._x = value; + this.transform.dirty = true; + } + }, + + y: { + get: function () + { + return this._y; + }, + set: function (value) + { + this._y = value; + this.transform.dirty = true; + } + } +}); + +/** + * Sets the point to a new x and y position. + * If y is omitted, both x and y will be set to x. + * + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +ObservablePoint.prototype.set = function (x, y) +{ + this._x = x || 0; + this._y = y || ( (y !== 0) ? this._x : 0 ); + + this.transform.dirty = true; +}; + +},{}],42:[function(require,module,exports){ +var math = require('../math'); +var ObservablePoint = require('./ObservablePoint'); /** * The Point object represents a location in a two-dimensional coordinate system, where x represents @@ -9572,17 +9627,19 @@ this.worldTransform = new math.Matrix(); this.localTransform = new math.Matrix(); - this.position = new math.Point(0.0); - this.scale = new math.Point(1,1); - this.pivot = new math.Point(0.0); - this.skew = new math.Point(0.0); + this.position = new ObservablePoint(this, 0); + this.scale = new ObservablePoint(this,1, 1); + this.pivot = new ObservablePoint(this, 0, 0); + this.skew = new ObservablePoint(this, 0,0); this.rotation = 0; this._sr = Math.sin(0); this._cr = Math.cos(0); - this.dirty = true; + + + this.updated = true; } Transform.prototype.constructor = Transform; @@ -9593,19 +9650,20 @@ var wt = this.worldTransform; var lt = this.localTransform; - if(this.dirty) { // get the matrix values of the displayobject based on its transform properties.. - lt.a = this._cr * this.scale.x; - lt.b = this._sr * this.scale.x; - lt.c = -this._sr * this.scale.y; - lt.d = this._cr * this.scale.y; - lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c); - lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d); + lt.a = this._cr * this.scale._x; + lt.b = this._sr * this.scale._x; + lt.c = -this._sr * this.scale._y; + lt.d = this._cr * this.scale._y; + lt.tx = this.position._x - (this.pivot._x * lt.a + this.pivot._y * lt.c); + lt.ty = this.position._y - (this.pivot._x * lt.b + this.pivot._y * lt.d); } - if(this.dirty || parent.dirty) + this.updated = this.dirty || parentTransform.dirty; + + if(this.updated) { // concat the parent matrix with the objects transform. wt.a = lt.a * pt.a + lt.b * pt.c; @@ -9613,21 +9671,16 @@ wt.c = lt.c * pt.a + lt.d * pt.c; wt.d = lt.c * pt.b + lt.d * pt.d; wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; - wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; - - // this.dirty = false; - // return true; + wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; } - -// this.dirty = false; - // return false; + } module.exports = Transform; -},{"../math":56}],42:[function(require,module,exports){ +},{"../math":57,"./ObservablePoint":41}],43:[function(require,module,exports){ var Container = require('../display/Container'), Texture = require('../textures/Texture'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), @@ -10787,7 +10840,7 @@ this._localBounds = null; }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/canvas/utils/CanvasGraphics":69,"../textures/Texture":101,"./GraphicsData":43}],43:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/canvas/utils/CanvasGraphics":70,"../textures/Texture":102,"./GraphicsData":44}],44:[function(require,module,exports){ /** * A GraphicsData object. * @@ -10880,7 +10933,7 @@ this.shape = null; }; -},{}],44:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ var utils = require('../../utils'), math = require('../../math'), CONST = require('../../const'), @@ -11200,7 +11253,7 @@ }; -},{"../../const":38,"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils":107,"./WebGLGraphicsData":45,"./shaders/PrimitiveShader":46,"./utils/buildCircle":47,"./utils/buildComplexPoly":48,"./utils/buildLine":49,"./utils/buildPoly":50,"./utils/buildRectangle":51,"./utils/buildRoundedRectangle":52,"earcut":24}],45:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils":108,"./WebGLGraphicsData":46,"./shaders/PrimitiveShader":47,"./utils/buildCircle":48,"./utils/buildComplexPoly":49,"./utils/buildLine":50,"./utils/buildPoly":51,"./utils/buildRectangle":52,"./utils/buildRoundedRectangle":53,"earcut":24}],46:[function(require,module,exports){ /** * An object containing WebGL specific properties to be used by the WebGL renderer * @@ -11318,7 +11371,7 @@ this.glIndices = null; }; -},{}],46:[function(require,module,exports){ +},{}],47:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -11370,7 +11423,7 @@ module.exports = PrimitiveShader; -},{"pixi-gl-core":1}],47:[function(require,module,exports){ +},{"pixi-gl-core":1}],48:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11457,7 +11510,7 @@ module.exports = buildCircle; -},{"../../../utils":107,"./buildLine":49}],48:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],49:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11528,7 +11581,7 @@ module.exports = buildComplexPoly; -},{"../../../utils":107,"./buildLine":49}],49:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],50:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'); @@ -11748,7 +11801,7 @@ }; module.exports = buildLine; -},{"../../../math":56,"../../../utils":107}],50:[function(require,module,exports){ +},{"../../../math":57,"../../../utils":108}],51:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -11811,7 +11864,7 @@ module.exports = buildPoly; -},{"../../../utils":107}],51:[function(require,module,exports){ +},{"../../../utils":108}],52:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11882,7 +11935,7 @@ }; module.exports = buildRectangle; -},{"../../../utils":107,"./buildLine":49}],52:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],53:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -12010,7 +12063,7 @@ module.exports = buildRoundedRectangle; -},{"../../../utils":107,"./buildLine":49}],53:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],54:[function(require,module,exports){ /** * @file Main export of the PIXI core library * @author Mat Groves @@ -12106,7 +12159,7 @@ } }); -},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":42,"./graphics/GraphicsData":43,"./graphics/webgl/GraphicsRenderer":44,"./math":56,"./particles/ParticleContainer":62,"./particles/webgl/ParticleRenderer":64,"./renderers/canvas/CanvasRenderer":67,"./renderers/canvas/utils/CanvasBuffer":68,"./renderers/canvas/utils/CanvasGraphics":69,"./renderers/webgl/WebGLRenderer":73,"./renderers/webgl/filters/AbstractFilter":74,"./renderers/webgl/filters/FXAAFilter":75,"./renderers/webgl/filters/SpriteMaskFilter":76,"./renderers/webgl/managers/ShaderManager":80,"./renderers/webgl/managers/WebGLManager":82,"./renderers/webgl/shaders/Shader":85,"./renderers/webgl/utils/ObjectRenderer":88,"./renderers/webgl/utils/RenderTarget":90,"./sprites/Sprite":94,"./sprites/webgl/SpriteRenderer":95,"./text/Text":97,"./textures/BaseRenderTexture":98,"./textures/BaseTexture":99,"./textures/RenderTexture":100,"./textures/Texture":101,"./textures/TextureUvs":102,"./textures/VideoBaseTexture":103,"./ticker":105,"./utils":107,"pixi-gl-core":1}],54:[function(require,module,exports){ +},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":43,"./graphics/GraphicsData":44,"./graphics/webgl/GraphicsRenderer":45,"./math":57,"./particles/ParticleContainer":63,"./particles/webgl/ParticleRenderer":65,"./renderers/canvas/CanvasRenderer":68,"./renderers/canvas/utils/CanvasBuffer":69,"./renderers/canvas/utils/CanvasGraphics":70,"./renderers/webgl/WebGLRenderer":74,"./renderers/webgl/filters/AbstractFilter":75,"./renderers/webgl/filters/FXAAFilter":76,"./renderers/webgl/filters/SpriteMaskFilter":77,"./renderers/webgl/managers/ShaderManager":81,"./renderers/webgl/managers/WebGLManager":83,"./renderers/webgl/shaders/Shader":86,"./renderers/webgl/utils/ObjectRenderer":89,"./renderers/webgl/utils/RenderTarget":91,"./sprites/Sprite":95,"./sprites/webgl/SpriteRenderer":96,"./text/Text":98,"./textures/BaseRenderTexture":99,"./textures/BaseTexture":100,"./textures/RenderTexture":101,"./textures/Texture":102,"./textures/TextureUvs":103,"./textures/VideoBaseTexture":104,"./ticker":106,"./utils":108,"pixi-gl-core":1}],55:[function(require,module,exports){ // @todo - ignore the too many parameters warning for now // should either fix it or change the jshint config // jshint -W072 @@ -12546,7 +12599,7 @@ */ Matrix.TEMP_MATRIX = new Matrix(); -},{"./Point":55}],55:[function(require,module,exports){ +},{"./Point":56}],56:[function(require,module,exports){ /** * The Point object represents a location in a two-dimensional coordinate system, where x represents * the horizontal axis and y represents the vertical axis. @@ -12616,7 +12669,7 @@ this.y = y || ( (y !== 0) ? this.x : 0 ) ; }; -},{}],56:[function(require,module,exports){ +},{}],57:[function(require,module,exports){ /** * Math classes and utilities mixed into PIXI namespace. * @@ -12638,7 +12691,7 @@ RoundedRectangle: require('./shapes/RoundedRectangle') }; -},{"./Matrix":54,"./Point":55,"./shapes/Circle":57,"./shapes/Ellipse":58,"./shapes/Polygon":59,"./shapes/Rectangle":60,"./shapes/RoundedRectangle":61}],57:[function(require,module,exports){ +},{"./Matrix":55,"./Point":56,"./shapes/Circle":58,"./shapes/Ellipse":59,"./shapes/Polygon":60,"./shapes/Rectangle":61,"./shapes/RoundedRectangle":62}],58:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12726,7 +12779,7 @@ return new Rectangle(this.x - this.radius, this.y - this.radius, this.radius * 2, this.radius * 2); }; -},{"../../const":38,"./Rectangle":60}],58:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],59:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12821,7 +12874,7 @@ return new Rectangle(this.x - this.width, this.y - this.height, this.width, this.height); }; -},{"../../const":38,"./Rectangle":60}],59:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],60:[function(require,module,exports){ var Point = require('../Point'), CONST = require('../../const'); @@ -12924,7 +12977,7 @@ return inside; }; -},{"../../const":38,"../Point":55}],60:[function(require,module,exports){ +},{"../../const":38,"../Point":56}],61:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13018,7 +13071,7 @@ return false; }; -},{"../../const":38}],61:[function(require,module,exports){ +},{"../../const":38}],62:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13110,7 +13163,7 @@ return false; }; -},{"../../const":38}],62:[function(require,module,exports){ +},{"../../const":38}],63:[function(require,module,exports){ var Container = require('../display/Container'), CONST = require('../const'); @@ -13429,7 +13482,7 @@ this._buffers = null; }; -},{"../const":38,"../display/Container":39}],63:[function(require,module,exports){ +},{"../const":38,"../display/Container":39}],64:[function(require,module,exports){ /** * @author Mat Groves @@ -13649,7 +13702,7 @@ this.gl.deleteBuffer(this.staticBuffer); }; -},{}],64:[function(require,module,exports){ +},{}],65:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), ParticleShader = require('./ParticleShader'), @@ -14125,7 +14178,7 @@ this.tempMatrix = null; }; -},{"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"./ParticleBuffer":63,"./ParticleShader":65}],65:[function(require,module,exports){ +},{"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"./ParticleBuffer":64,"./ParticleShader":66}],66:[function(require,module,exports){ var TextureShader = require('../../renderers/webgl/shaders/TextureShader'); /** @@ -14203,7 +14256,7 @@ module.exports = ParticleShader; -},{"../../renderers/webgl/shaders/TextureShader":86}],66:[function(require,module,exports){ +},{"../../renderers/webgl/shaders/TextureShader":87}],67:[function(require,module,exports){ var utils = require('../utils'), math = require('../math'), CONST = require('../const'), @@ -14464,7 +14517,7 @@ this._backgroundColorString = null; }; -},{"../const":38,"../math":56,"../utils":107,"eventemitter3":25}],67:[function(require,module,exports){ +},{"../const":38,"../math":57,"../utils":108,"eventemitter3":25}],68:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), CanvasMaskManager = require('./utils/CanvasMaskManager'), utils = require('../../utils'), @@ -14732,7 +14785,7 @@ } }; -},{"../../const":38,"../../math":56,"../../utils":107,"../SystemRenderer":66,"./utils/CanvasMaskManager":70}],68:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../utils":108,"../SystemRenderer":67,"./utils/CanvasMaskManager":71}],69:[function(require,module,exports){ /** * Creates a Canvas element of the given size. * @@ -14832,7 +14885,7 @@ this.canvas = null; }; -},{}],69:[function(require,module,exports){ +},{}],70:[function(require,module,exports){ var CONST = require('../../../const'); /** @@ -15186,7 +15239,7 @@ }; -},{"../../../const":38}],70:[function(require,module,exports){ +},{"../../../const":38}],71:[function(require,module,exports){ var CanvasGraphics = require('./CanvasGraphics'); /** @@ -15248,7 +15301,7 @@ CanvasMaskManager.prototype.destroy = function () {}; -},{"./CanvasGraphics":69}],71:[function(require,module,exports){ +},{"./CanvasGraphics":70}],72:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -15500,7 +15553,7 @@ */ CanvasTinter.tintMethod = CanvasTinter.canUseMultiply ? CanvasTinter.tintWithMultiply : CanvasTinter.tintWithPerPixel; -},{"../../../utils":107}],72:[function(require,module,exports){ +},{"../../../utils":108}],73:[function(require,module,exports){ var GLTexture = require('pixi-gl-core').GLTexture, utils = require('../../utils'); @@ -15640,7 +15693,7 @@ module.exports = TextureManager; -},{"../../utils":107,"pixi-gl-core":1}],73:[function(require,module,exports){ +},{"../../utils":108,"pixi-gl-core":1}],74:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), ShaderManager = require('./managers/ShaderManager'), MaskManager = require('./managers/MaskManager'), @@ -16037,7 +16090,7 @@ }; -},{"../../const":38,"../../utils":107,"../SystemRenderer":66,"./TextureManager":72,"./filters/FXAAFilter":75,"./managers/BlendModeManager":77,"./managers/FilterManager":78,"./managers/MaskManager":79,"./managers/ShaderManager":80,"./managers/StencilManager":81,"./utils/ObjectRenderer":88,"./utils/RenderTarget":90,"./utils/mapWebGLBlendModesToPixi":92,"./utils/mapWebGLDrawModesToPixi":93,"pixi-gl-core":1}],74:[function(require,module,exports){ +},{"../../const":38,"../../utils":108,"../SystemRenderer":67,"./TextureManager":73,"./filters/FXAAFilter":76,"./managers/BlendModeManager":78,"./managers/FilterManager":79,"./managers/MaskManager":80,"./managers/ShaderManager":81,"./managers/StencilManager":82,"./utils/ObjectRenderer":89,"./utils/RenderTarget":91,"./utils/mapWebGLBlendModesToPixi":93,"./utils/mapWebGLDrawModesToPixi":94,"pixi-gl-core":1}],75:[function(require,module,exports){ var DefaultShader = require('../shaders/TextureShader'); /** @@ -16149,7 +16202,7 @@ } }; -},{"../shaders/TextureShader":86}],75:[function(require,module,exports){ +},{"../shaders/TextureShader":87}],76:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'); // @see https://github.com/substack/brfs/issues/25 @@ -16204,7 +16257,7 @@ filterManager.applyFilter(shader, input, output); }; -},{"./AbstractFilter":74}],76:[function(require,module,exports){ +},{"./AbstractFilter":75}],77:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'), math = require('../../../math'); @@ -16301,7 +16354,7 @@ } }); -},{"../../../math":56,"./AbstractFilter":74}],77:[function(require,module,exports){ +},{"../../../math":57,"./AbstractFilter":75}],78:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'); /** @@ -16345,7 +16398,7 @@ return true; }; -},{"./WebGLManager":82}],78:[function(require,module,exports){ +},{"./WebGLManager":83}],79:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), RenderTarget = require('../utils/RenderTarget'), CONST = require('../../../const'), @@ -16797,7 +16850,7 @@ this.texturePool = null; }; -},{"../../../const":38,"../../../math":56,"../utils/Quad":89,"../utils/RenderTarget":90,"./WebGLManager":82}],79:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../utils/Quad":90,"../utils/RenderTarget":91,"./WebGLManager":83}],80:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), AlphaMaskFilter = require('../filters/SpriteMaskFilter'); @@ -16912,7 +16965,7 @@ }; -},{"../filters/SpriteMaskFilter":76,"./WebGLManager":82}],80:[function(require,module,exports){ +},{"../filters/SpriteMaskFilter":77,"./WebGLManager":83}],81:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), TextureShader = require('../shaders/TextureShader'), ComplexPrimitiveShader = require('../shaders/ComplexPrimitiveShader'), @@ -17082,7 +17135,7 @@ this.tempAttribState = null; }; -},{"../../../utils":107,"../shaders/ComplexPrimitiveShader":83,"../shaders/PrimitiveShader":84,"../shaders/TextureShader":86,"./WebGLManager":82}],81:[function(require,module,exports){ +},{"../../../utils":108,"../shaders/ComplexPrimitiveShader":84,"../shaders/PrimitiveShader":85,"../shaders/TextureShader":87,"./WebGLManager":83}],82:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), utils = require('../../../utils'); @@ -17449,7 +17502,7 @@ }; -},{"../../../utils":107,"./WebGLManager":82}],82:[function(require,module,exports){ +},{"../../../utils":108,"./WebGLManager":83}],83:[function(require,module,exports){ /** * @class * @memberof PIXI @@ -17490,7 +17543,7 @@ this.renderer = null; }; -},{}],83:[function(require,module,exports){ +},{}],84:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17552,7 +17605,7 @@ ComplexPrimitiveShader.prototype.constructor = ComplexPrimitiveShader; module.exports = ComplexPrimitiveShader; -},{"./Shader":85}],84:[function(require,module,exports){ +},{"./Shader":86}],85:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17615,7 +17668,7 @@ PrimitiveShader.prototype.constructor = PrimitiveShader; module.exports = PrimitiveShader; -},{"./Shader":85}],85:[function(require,module,exports){ +},{"./Shader":86}],86:[function(require,module,exports){ /*global console */ var utils = require('../../../utils'); @@ -18143,7 +18196,7 @@ return shader; }; -},{"../../../utils":107}],86:[function(require,module,exports){ +},{"../../../utils":108}],87:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -18254,7 +18307,7 @@ '}' ].join('\n'); -},{"./Shader":85}],87:[function(require,module,exports){ +},{"./Shader":86}],88:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -18335,7 +18388,7 @@ '}' ].join('\n'); -},{"pixi-gl-core":1}],88:[function(require,module,exports){ +},{"pixi-gl-core":1}],89:[function(require,module,exports){ var WebGLManager = require('../managers/WebGLManager'); /** @@ -18393,7 +18446,7 @@ // render the object }; -},{"../managers/WebGLManager":82}],89:[function(require,module,exports){ +},{"../managers/WebGLManager":83}],90:[function(require,module,exports){ /** * Helper class to create a quad * @@ -18548,7 +18601,7 @@ -},{}],90:[function(require,module,exports){ +},{}],91:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'), CONST = require('../../../const'), @@ -18853,7 +18906,7 @@ this.texture = null; }; -},{"../../../const":38,"../../../math":56,"../../../utils":107,"./StencilMaskStack":91,"pixi-gl-core":1}],91:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../../../utils":108,"./StencilMaskStack":92,"pixi-gl-core":1}],92:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -18886,7 +18939,7 @@ StencilMaskStack.prototype.constructor = StencilMaskStack; module.exports = StencilMaskStack; -},{}],92:[function(require,module,exports){ +},{}],93:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18923,7 +18976,7 @@ module.exports = mapWebGLBlendModesToPixi; -},{"../../../const":38}],93:[function(require,module,exports){ +},{"../../../const":38}],94:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18947,7 +19000,7 @@ module.exports = mapWebGLDrawModesToPixi; -},{"../../../const":38}],94:[function(require,module,exports){ +},{"../../../const":38}],95:[function(require,module,exports){ var math = require('../math'), Texture = require('../textures/Texture'), Container = require('../display/Container'), @@ -19043,7 +19096,6 @@ // call texture setter this.texture = texture || Texture.EMPTY; this.textureDirty = true - this.vertexDirty = true; this.vertexData = new Float32Array(8); } @@ -19153,7 +19205,6 @@ Sprite.prototype.caclulateVertices = function () { - var texture = this._texture, wt = this.transform.worldTransform, a = wt.a, b = wt.b, c = wt.c, d = wt.d, tx = wt.tx, ty = wt.ty, @@ -19208,22 +19259,11 @@ */ Sprite.prototype._renderWebGL = function (renderer) { - if(this.textureDirty) + if(this.transform.updated || this.textureDirty) { this.textureDirty = false; - - this._onTextureUpdate(); - - this.vertexDirty = true; - } - - if(this.vertexDirty) - { - this.vertexDirty = false; - // set the vertex data this.caclulateVertices(); - } renderer.setObjectRenderer(renderer.plugins.sprite); @@ -19566,7 +19606,7 @@ return new Sprite(Texture.fromImage(imageId, crossorigin, scaleMode)); }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasTinter":71,"../textures/Texture":101,"../utils":107}],95:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasTinter":72,"../textures/Texture":102,"../utils":108}],96:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), TextureShader = require('../../renderers/webgl/shaders/_TextureShader'), @@ -19927,7 +19967,7 @@ this.shader = null; }; -},{"../../const":38,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/shaders/_TextureShader":87,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils/createIndicesForQuads":106,"./generateMultiTextureShader":96,"pixi-gl-core":1}],96:[function(require,module,exports){ +},{"../../const":38,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/shaders/_TextureShader":88,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils/createIndicesForQuads":107,"./generateMultiTextureShader":97,"pixi-gl-core":1}],97:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; @@ -19990,7 +20030,7 @@ module.exports = generateMultiTextureShader; -},{"pixi-gl-core":1}],97:[function(require,module,exports){ +},{"pixi-gl-core":1}],98:[function(require,module,exports){ var Sprite = require('../sprites/Sprite'), Texture = require('../textures/Texture'), math = require('../math'), @@ -20611,7 +20651,7 @@ this._texture.destroy(destroyBaseTexture === undefined ? true : destroyBaseTexture); }; -},{"../const":38,"../math":56,"../sprites/Sprite":94,"../textures/Texture":101,"../utils":107}],98:[function(require,module,exports){ +},{"../const":38,"../math":57,"../sprites/Sprite":95,"../textures/Texture":102,"../utils":108}],99:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), Texture = require('./Texture'), RenderTarget = require('../renderers/webgl/utils/RenderTarget'), @@ -21095,7 +21135,7 @@ return this.getPixels(tempRect); }; -},{"../const":38,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/webgl/managers/FilterManager":78,"../renderers/webgl/utils/RenderTarget":90,"./BaseTexture":99,"./Texture":101}],99:[function(require,module,exports){ +},{"../const":38,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/webgl/managers/FilterManager":79,"../renderers/webgl/utils/RenderTarget":91,"./BaseTexture":100,"./Texture":102}],100:[function(require,module,exports){ var utils = require('../utils'), CONST = require('../const'), EventEmitter = require('eventemitter3'); @@ -21532,7 +21572,7 @@ return baseTexture; }; -},{"../const":38,"../utils":107,"eventemitter3":25}],100:[function(require,module,exports){ +},{"../const":38,"../utils":108,"eventemitter3":25}],101:[function(require,module,exports){ var BaseRenderTexture = require('./BaseRenderTexture'), Texture = require('./Texture'), math = require('../math'), @@ -21727,7 +21767,7 @@ } -},{"../const":38,"../math":56,"./BaseRenderTexture":98,"./Texture":101}],101:[function(require,module,exports){ +},{"../const":38,"../math":57,"./BaseRenderTexture":99,"./Texture":102}],102:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), VideoBaseTexture = require('./VideoBaseTexture'), TextureUvs = require('./TextureUvs'), @@ -22153,7 +22193,7 @@ */ Texture.EMPTY = new Texture(new BaseTexture()); -},{"../math":56,"../utils":107,"./BaseTexture":99,"./TextureUvs":102,"./VideoBaseTexture":103,"eventemitter3":25}],102:[function(require,module,exports){ +},{"../math":57,"../utils":108,"./BaseTexture":100,"./TextureUvs":103,"./VideoBaseTexture":104,"eventemitter3":25}],103:[function(require,module,exports){ /** * A standard object to store the Uvs of a texture @@ -22234,7 +22274,7 @@ this.uvs_uint32[3] = (((this.y3 * 65535) & 0xFFFF) << 16) | ((this.x3 * 65535) & 0xFFFF); }; -},{}],103:[function(require,module,exports){ +},{}],104:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), utils = require('../utils'); @@ -22471,7 +22511,7 @@ return source; } -},{"../utils":107,"./BaseTexture":99}],104:[function(require,module,exports){ +},{"../utils":108,"./BaseTexture":100}],105:[function(require,module,exports){ var CONST = require('../const'), EventEmitter = require('eventemitter3'), // Internal event used by composed emitter @@ -22826,7 +22866,7 @@ module.exports = Ticker; -},{"../const":38,"eventemitter3":25}],105:[function(require,module,exports){ +},{"../const":38,"eventemitter3":25}],106:[function(require,module,exports){ var Ticker = require('./Ticker'); /** @@ -22882,7 +22922,7 @@ Ticker: Ticker }; -},{"./Ticker":104}],106:[function(require,module,exports){ +},{"./Ticker":105}],107:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -22915,7 +22955,7 @@ }; module.exports = createIndicesForQuads; -},{}],107:[function(require,module,exports){ +},{}],108:[function(require,module,exports){ var CONST = require('../const'); /** @@ -23192,7 +23232,7 @@ BaseTextureCache: {} }; -},{"../const":38,"./pluginTarget":108,"async":16,"eventemitter3":25}],108:[function(require,module,exports){ +},{"../const":38,"./pluginTarget":109,"async":16,"eventemitter3":25}],109:[function(require,module,exports){ /** * Mixins functionality to make an object have "plugins". * @@ -23262,7 +23302,7 @@ } }; -},{}],109:[function(require,module,exports){ +},{}],110:[function(require,module,exports){ /*global console */ var core = require('./core'), mesh = require('./mesh'), @@ -23613,7 +23653,7 @@ return core.utils.uid(); }; -},{"./core":53,"./extras":116,"./filters":133,"./mesh":158}],110:[function(require,module,exports){ +},{"./core":54,"./extras":117,"./filters":134,"./mesh":159}],111:[function(require,module,exports){ var core = require('../core'); /** @@ -24001,7 +24041,7 @@ BitmapText.fonts = {}; -},{"../core":53}],111:[function(require,module,exports){ +},{"../core":54}],112:[function(require,module,exports){ var core = require('../core'); /** @@ -24321,7 +24361,7 @@ return new MovieClip(textures); }; -},{"../core":53}],112:[function(require,module,exports){ +},{"../core":54}],113:[function(require,module,exports){ var core = require('../core'), // a sprite use dfor rendering textures.. tempPoint = new core.Point(), @@ -24773,7 +24813,7 @@ return new TilingSprite(core.Texture.fromImage(imageId, crossorigin, scaleMode),width,height); }; -},{"../core":53,"../core/renderers/canvas/utils/CanvasTinter":71}],113:[function(require,module,exports){ +},{"../core":54,"../core/renderers/canvas/utils/CanvasTinter":72}],114:[function(require,module,exports){ var core = require('../core'), DisplayObject = core.DisplayObject, _tempMatrix = new core.Matrix(); @@ -25045,7 +25085,7 @@ this._originalDestroy(); }; -},{"../core":53}],114:[function(require,module,exports){ +},{"../core":54}],115:[function(require,module,exports){ var core = require('../core'); /** @@ -25075,7 +25115,7 @@ return null; }; -},{"../core":53}],115:[function(require,module,exports){ +},{"../core":54}],116:[function(require,module,exports){ var core = require('../core'); /** @@ -25105,7 +25145,7 @@ return point; }; -},{"../core":53}],116:[function(require,module,exports){ +},{"../core":54}],117:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -25126,7 +25166,7 @@ BitmapText: require('./BitmapText') }; -},{"./BitmapText":110,"./MovieClip":111,"./TilingSprite":112,"./cacheAsBitmap":113,"./getChildByName":114,"./getGlobalPosition":115}],117:[function(require,module,exports){ +},{"./BitmapText":111,"./MovieClip":112,"./TilingSprite":113,"./cacheAsBitmap":114,"./getChildByName":115,"./getGlobalPosition":116}],118:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25183,7 +25223,7 @@ } }); -},{"../../core":53}],118:[function(require,module,exports){ +},{"../../core":54}],119:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYFilter = require('../blur/BlurYFilter'); @@ -25284,7 +25324,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"../blur/BlurYFilter":122}],119:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"../blur/BlurYFilter":123}],120:[function(require,module,exports){ var core = require('../../core'); @@ -25426,7 +25466,7 @@ } }); -},{"../../core":53}],120:[function(require,module,exports){ +},{"../../core":54}],121:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('./BlurXFilter'), BlurYFilter = require('./BlurYFilter'); @@ -25536,7 +25576,7 @@ } }); -},{"../../core":53,"./BlurXFilter":121,"./BlurYFilter":122}],121:[function(require,module,exports){ +},{"../../core":54,"./BlurXFilter":122,"./BlurYFilter":123}],122:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25629,7 +25669,7 @@ } }); -},{"../../core":53}],122:[function(require,module,exports){ +},{"../../core":54}],123:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25715,7 +25755,7 @@ } }); -},{"../../core":53}],123:[function(require,module,exports){ +},{"../../core":54}],124:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25745,7 +25785,7 @@ SmartBlurFilter.prototype.constructor = SmartBlurFilter; module.exports = SmartBlurFilter; -},{"../../core":53}],124:[function(require,module,exports){ +},{"../../core":54}],125:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26281,7 +26321,7 @@ } }); -},{"../../core":53}],125:[function(require,module,exports){ +},{"../../core":54}],126:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26330,7 +26370,7 @@ } }); -},{"../../core":53}],126:[function(require,module,exports){ +},{"../../core":54}],127:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26421,7 +26461,7 @@ } }); -},{"../../core":53}],127:[function(require,module,exports){ +},{"../../core":54}],128:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26447,7 +26487,7 @@ CrossHatchFilter.prototype.constructor = CrossHatchFilter; module.exports = CrossHatchFilter; -},{"../../core":53}],128:[function(require,module,exports){ +},{"../../core":54}],129:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26531,7 +26571,7 @@ } }); -},{"../../core":53}],129:[function(require,module,exports){ +},{"../../core":54}],130:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26603,7 +26643,7 @@ } }); -},{"../../core":53}],130:[function(require,module,exports){ +},{"../../core":54}],131:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26694,7 +26734,7 @@ } }); -},{"../../core":53}],131:[function(require,module,exports){ +},{"../../core":54}],132:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYTintFilter = require('./BlurYTintFilter'); @@ -26887,7 +26927,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"./BlurYTintFilter":130}],132:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"./BlurYTintFilter":131}],133:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26936,7 +26976,7 @@ } }); -},{"../../core":53}],133:[function(require,module,exports){ +},{"../../core":54}],134:[function(require,module,exports){ /** * @file Main export of the PIXI filters library * @author Mat Groves @@ -26975,7 +27015,7 @@ TwistFilter: require('./twist/TwistFilter') }; -},{"./ascii/AsciiFilter":117,"./bloom/BloomFilter":118,"./blur/BlurDirFilter":119,"./blur/BlurFilter":120,"./blur/BlurXFilter":121,"./blur/BlurYFilter":122,"./blur/SmartBlurFilter":123,"./color/ColorMatrixFilter":124,"./color/ColorStepFilter":125,"./convolution/ConvolutionFilter":126,"./crosshatch/CrossHatchFilter":127,"./displacement/DisplacementFilter":128,"./dot/DotScreenFilter":129,"./dropshadow/DropShadowFilter":131,"./gray/GrayFilter":132,"./invert/InvertFilter":134,"./noise/NoiseFilter":135,"./pixelate/PixelateFilter":136,"./rgb/RGBSplitFilter":137,"./sepia/SepiaFilter":138,"./shockwave/ShockwaveFilter":139,"./tiltshift/TiltShiftFilter":141,"./tiltshift/TiltShiftXFilter":142,"./tiltshift/TiltShiftYFilter":143,"./twist/TwistFilter":144}],134:[function(require,module,exports){ +},{"./ascii/AsciiFilter":118,"./bloom/BloomFilter":119,"./blur/BlurDirFilter":120,"./blur/BlurFilter":121,"./blur/BlurXFilter":122,"./blur/BlurYFilter":123,"./blur/SmartBlurFilter":124,"./color/ColorMatrixFilter":125,"./color/ColorStepFilter":126,"./convolution/ConvolutionFilter":127,"./crosshatch/CrossHatchFilter":128,"./displacement/DisplacementFilter":129,"./dot/DotScreenFilter":130,"./dropshadow/DropShadowFilter":132,"./gray/GrayFilter":133,"./invert/InvertFilter":135,"./noise/NoiseFilter":136,"./pixelate/PixelateFilter":137,"./rgb/RGBSplitFilter":138,"./sepia/SepiaFilter":139,"./shockwave/ShockwaveFilter":140,"./tiltshift/TiltShiftFilter":142,"./tiltshift/TiltShiftXFilter":143,"./tiltshift/TiltShiftYFilter":144,"./twist/TwistFilter":145}],135:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27025,7 +27065,7 @@ } }); -},{"../../core":53}],135:[function(require,module,exports){ +},{"../../core":54}],136:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27080,7 +27120,7 @@ } }); -},{"../../core":53}],136:[function(require,module,exports){ +},{"../../core":54}],137:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27131,7 +27171,7 @@ } }); -},{"../../core":53}],137:[function(require,module,exports){ +},{"../../core":54}],138:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27217,7 +27257,7 @@ } }); -},{"../../core":53}],138:[function(require,module,exports){ +},{"../../core":54}],139:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27267,7 +27307,7 @@ } }); -},{"../../core":53}],139:[function(require,module,exports){ +},{"../../core":54}],140:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27355,7 +27395,7 @@ } }); -},{"../../core":53}],140:[function(require,module,exports){ +},{"../../core":54}],141:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27480,7 +27520,7 @@ } }); -},{"../../core":53}],141:[function(require,module,exports){ +},{"../../core":54}],142:[function(require,module,exports){ var core = require('../../core'), TiltShiftXFilter = require('./TiltShiftXFilter'), TiltShiftYFilter = require('./TiltShiftYFilter'); @@ -27590,7 +27630,7 @@ } }); -},{"../../core":53,"./TiltShiftXFilter":142,"./TiltShiftYFilter":143}],142:[function(require,module,exports){ +},{"../../core":54,"./TiltShiftXFilter":143,"./TiltShiftYFilter":144}],143:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27628,7 +27668,7 @@ this.uniforms.delta.value.y = dy / d; }; -},{"./TiltShiftAxisFilter":140}],143:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],144:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27666,7 +27706,7 @@ this.uniforms.delta.value.y = dx / d; }; -},{"./TiltShiftAxisFilter":140}],144:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],145:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27751,7 +27791,7 @@ } }); -},{"../../core":53}],145:[function(require,module,exports){ +},{"../../core":54}],146:[function(require,module,exports){ (function (global){ // run the polyfills require('./polyfill'); @@ -27784,7 +27824,7 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./accessibility":37,"./core":53,"./deprecation":109,"./extras":116,"./filters":133,"./interaction":148,"./loaders":151,"./mesh":158,"./polyfill":163}],146:[function(require,module,exports){ +},{"./accessibility":37,"./core":54,"./deprecation":110,"./extras":117,"./filters":134,"./interaction":149,"./loaders":152,"./mesh":159,"./polyfill":164}],147:[function(require,module,exports){ var core = require('../core'); /** @@ -27833,7 +27873,7 @@ return displayObject.worldTransform.applyInverse(globalPos || this.global, point); }; -},{"../core":53}],147:[function(require,module,exports){ +},{"../core":54}],148:[function(require,module,exports){ var core = require('../core'), InteractionData = require('./InteractionData'); @@ -28709,7 +28749,7 @@ core.WebGLRenderer.registerPlugin('interaction', InteractionManager); core.CanvasRenderer.registerPlugin('interaction', InteractionManager); -},{"../core":53,"./InteractionData":146,"./interactiveTarget":149}],148:[function(require,module,exports){ +},{"../core":54,"./InteractionData":147,"./interactiveTarget":150}],149:[function(require,module,exports){ /** * @file Main export of the PIXI interactions library * @author Mat Groves @@ -28726,7 +28766,7 @@ interactiveTarget: require('./interactiveTarget') }; -},{"./InteractionData":146,"./InteractionManager":147,"./interactiveTarget":149}],149:[function(require,module,exports){ +},{"./InteractionData":147,"./InteractionManager":148,"./interactiveTarget":150}],150:[function(require,module,exports){ /** * Default property values of interactive objects * used by {@link PIXI.interaction.InteractionManager}. @@ -28775,7 +28815,7 @@ module.exports = interactiveTarget; -},{}],150:[function(require,module,exports){ +},{}],151:[function(require,module,exports){ var Resource = require('resource-loader').Resource, core = require('../core'), extras = require('../extras'), @@ -28896,7 +28936,7 @@ }; }; -},{"../core":53,"../extras":116,"path":17,"resource-loader":31}],151:[function(require,module,exports){ +},{"../core":54,"../extras":117,"path":17,"resource-loader":31}],152:[function(require,module,exports){ /** * @file Main export of the PIXI loaders library * @author Mat Groves @@ -28917,7 +28957,7 @@ Resource: require('resource-loader').Resource }; -},{"./bitmapFontParser":150,"./loader":152,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],152:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./loader":153,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],153:[function(require,module,exports){ var ResourceLoader = require('resource-loader'), textureParser = require('./textureParser'), spritesheetParser = require('./spritesheetParser'), @@ -28979,7 +29019,7 @@ Resource.setExtensionXhrType('fnt', Resource.XHR_RESPONSE_TYPE.DOCUMENT); -},{"./bitmapFontParser":150,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],153:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],154:[function(require,module,exports){ var Resource = require('resource-loader').Resource, path = require('path'), core = require('../core'); @@ -29063,7 +29103,7 @@ }; }; -},{"../core":53,"path":17,"resource-loader":31}],154:[function(require,module,exports){ +},{"../core":54,"path":17,"resource-loader":31}],155:[function(require,module,exports){ var core = require('../core'); module.exports = function () @@ -29085,7 +29125,7 @@ }; }; -},{"../core":53}],155:[function(require,module,exports){ +},{"../core":54}],156:[function(require,module,exports){ var core = require('../core'), tempPoint = new core.Point(), tempPolygon = new core.Polygon(); @@ -29561,7 +29601,7 @@ TRIANGLES: 1 }; -},{"../core":53}],156:[function(require,module,exports){ +},{"../core":54}],157:[function(require,module,exports){ var Mesh = require('./Mesh'); /** @@ -29687,7 +29727,7 @@ } }; -},{"./Mesh":155}],157:[function(require,module,exports){ +},{"./Mesh":156}],158:[function(require,module,exports){ var Mesh = require('./Mesh'); var core = require('../core'); @@ -29900,7 +29940,7 @@ this.containerUpdateTransform(); }; -},{"../core":53,"./Mesh":155}],158:[function(require,module,exports){ +},{"../core":54,"./Mesh":156}],159:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -29919,7 +29959,7 @@ MeshShader: require('./webgl/MeshShader') }; -},{"./Mesh":155,"./Plane":156,"./Rope":157,"./webgl/MeshRenderer":159,"./webgl/MeshShader":160}],159:[function(require,module,exports){ +},{"./Mesh":156,"./Plane":157,"./Rope":158,"./webgl/MeshRenderer":160,"./webgl/MeshShader":161}],160:[function(require,module,exports){ var core = require('../../core'), Mesh = require('../Mesh'); @@ -30148,7 +30188,7 @@ core.ObjectRenderer.prototype.destroy.call(this); }; -},{"../../core":53,"../Mesh":155}],160:[function(require,module,exports){ +},{"../../core":54,"../Mesh":156}],161:[function(require,module,exports){ var core = require('../../core'); /** @@ -30209,7 +30249,7 @@ core.ShaderManager.registerPlugin('meshShader', MeshShader); -},{"../../core":53}],161:[function(require,module,exports){ +},{"../../core":54}],162:[function(require,module,exports){ // References: // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign @@ -30225,7 +30265,7 @@ }; } -},{}],162:[function(require,module,exports){ +},{}],163:[function(require,module,exports){ // References: // https://github.com/sindresorhus/object-assign // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign @@ -30235,12 +30275,12 @@ Object.assign = require('object-assign'); } -},{"object-assign":26}],163:[function(require,module,exports){ +},{"object-assign":26}],164:[function(require,module,exports){ require('./Object.assign'); require('./requestAnimationFrame'); require('./Math.sign'); -},{"./Math.sign":161,"./Object.assign":162,"./requestAnimationFrame":164}],164:[function(require,module,exports){ +},{"./Math.sign":162,"./Object.assign":163,"./requestAnimationFrame":165}],165:[function(require,module,exports){ (function (global){ // References: // http://paulirish.com/2011/requestanimationframe-for-smart-animating/ @@ -30311,8 +30351,8 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[145])(145) +},{}]},{},[146])(146) }); -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L1RyYW5zZm9ybS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL1dlYkdMR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZENpcmNsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ29tcGxleFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZExpbmUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9NYXRyaXguanMiLCJzcmMvY29yZS9tYXRoL1BvaW50LmpzIiwic3JjL2NvcmUvbWF0aC9pbmRleC5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0NpcmNsZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0VsbGlwc2UuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Qb2x5Z29uLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZUJ1ZmZlci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL1N5c3RlbVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcy5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9UZXh0dXJlTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9GWEFBRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1F1YWQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0LmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1N0ZW5jaWxNYXNrU3RhY2suanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvc3ByaXRlcy9TcHJpdGUuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL1Nwcml0ZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvc3ByaXRlcy93ZWJnbC9nZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3RleHQvVGV4dC5qcyIsInNyYy9jb3JlL3RleHR1cmVzL0Jhc2VSZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1RleHR1cmVVdnMuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGlja2VyL1RpY2tlci5qcyIsInNyYy9jb3JlL3RpY2tlci9pbmRleC5qcyIsInNyYy9jb3JlL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcy5qcyIsInNyYy9jb3JlL3V0aWxzL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvcGx1Z2luVGFyZ2V0LmpzIiwic3JjL2RlcHJlY2F0aW9uLmpzIiwic3JjL2V4dHJhcy9CaXRtYXBUZXh0LmpzIiwic3JjL2V4dHJhcy9Nb3ZpZUNsaXAuanMiLCJzcmMvZXh0cmFzL1RpbGluZ1Nwcml0ZS5qcyIsInNyYy9leHRyYXMvY2FjaGVBc0JpdG1hcC5qcyIsInNyYy9leHRyYXMvZ2V0Q2hpbGRCeU5hbWUuanMiLCJzcmMvZXh0cmFzL2dldEdsb2JhbFBvc2l0aW9uLmpzIiwic3JjL2V4dHJhcy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2FzY2lpL0FzY2lpRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmxvb20vQmxvb21GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJEaXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJYRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9CbHVyWUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvU21hcnRCbHVyRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvclN0ZXBGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kb3QvRG90U2NyZWVuRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZHJvcHNoYWRvdy9CbHVyWVRpbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ncmF5L0dyYXlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2ludmVydC9JbnZlcnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ub2lzZS9Ob2lzZUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcmdiL1JHQlNwbGl0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvc2VwaWEvU2VwaWFGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdEF4aXNGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3R3aXN0L1R3aXN0RmlsdGVyLmpzIiwic3JjL3NyYy9pbmRleC5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbkRhdGEuanMiLCJzcmMvaW50ZXJhY3Rpb24vSW50ZXJhY3Rpb25NYW5hZ2VyLmpzIiwic3JjL2ludGVyYWN0aW9uL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL2ludGVyYWN0aXZlVGFyZ2V0LmpzIiwic3JjL2xvYWRlcnMvYml0bWFwRm9udFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL2luZGV4LmpzIiwic3JjL2xvYWRlcnMvbG9hZGVyLmpzIiwic3JjL2xvYWRlcnMvc3ByaXRlc2hlZXRQYXJzZXIuanMiLCJzcmMvbG9hZGVycy90ZXh0dXJlUGFyc2VyLmpzIiwic3JjL21lc2gvTWVzaC5qcyIsInNyYy9tZXNoL1BsYW5lLmpzIiwic3JjL21lc2gvUm9wZS5qcyIsInNyYy9tZXNoL2luZGV4LmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFJlbmRlcmVyLmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFNoYWRlci5qcyIsInNyYy9wb2x5ZmlsbC9NYXRoLnNpZ24uanMiLCJzcmMvcG9seWZpbGwvT2JqZWN0LmFzc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9pbmRleC5qcyIsInNyYy9wb2x5ZmlsbC9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM1dUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbnNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25tQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0b0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6bUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIGNyZWF0ZUNvbnRleHQ6IFx0XHRcdHJlcXVpcmUoJy4vbGliL2NyZWF0ZUNvbnRleHQnKSxcbiAgICBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM6IFx0cmVxdWlyZSgnLi9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzJyksXG4gICAgXG4gICAgR0xCdWZmZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xCdWZmZXInKSxcbiAgICBHTEZyYW1lYnVmZmVyOiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9HTEZyYW1lYnVmZmVyJyksXG4gICAgR0xTaGFkZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xTaGFkZXInKSxcbiAgICBHTFRleHR1cmU6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xUZXh0dXJlJyksXG4gICAgXG4gICAgVmVydGV4QXJyYXlPYmplY3Q6IFx0XHRyZXF1aXJlKCcuL2xpYi9WZXJ0ZXhBcnJheU9iamVjdCcpXG5cbn07IiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRU1QVFlfQVJSQVlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xuXG52YXIgQnVmZmVyID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5BUlJBWV9CVUZGRVI7XG5cdHRoaXMuZHJhd1R5cGUgPSBkcmF3VHlwZSB8fCBnbC5TVEFUSUNfRFJBVztcblx0dGhpcy5kYXRhID0gRU1QVFlfQVJSQVlfQlVGRkVSO1xuXG5cdGlmKGRhdGEpXG5cdHtcblx0XHR0aGlzLnVwbG9hZChkYXRhKTtcblx0fVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKGRhdGEsIG9mZnNldCwgZG9udEJpbmQpXG57XG5cdC8vIHRvZG8gLSBuZWVkZWQ/XG5cdC8vaWYoIWRvbnRCaW5kKVxuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRcblx0ZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuXHRvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuXHRpZih0aGlzLmRhdGEuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpXG5cdHtcdFxuXHRcdGdsLmJ1ZmZlclN1YkRhdGEodGhpcy50eXBlLCBvZmZzZXQsIGRhdGEpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLCBkYXRhLCB0aGlzLmRyYXdUeXBlKTtcblx0fVxuXG5cdHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKTtcbn1cblxuQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIGdsLkFSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgdHlwZSwgZHJhd1R5cGUpO1xufVxuXG4vL1RPRE8gRGVzdHJveS4uXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyO1xuXG4iLCJcbnZhciBUZXh0dXJlID0gcmVxdWlyZSgnLi9HTFRleHR1cmUnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgRnJhbWVidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRnJhbWVidWZmZXIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcblx0dGhpcy5zdGVuY2lsID0gbnVsbDtcblx0dGhpcy50ZXh0dXJlID0gbnVsbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMTAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5lbmFibGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IG5ldyBUZXh0dXJlKGdsKTtcblxuXHR0aGlzLnRleHR1cmUuYmluZCgpO1xuXG5cdC8vZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlLnRleHR1cmUsIDApO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlU3RlbmNpbCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5zdGVuY2lsKXJldHVybjtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuc3RlbmNpbCA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgIFxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCB0aGlzLnN0ZW5jaWwpO1xuICAgIFxuICAgIC8vIFRPRE8uLiB0aGlzIGlzIGRlcHRoIEFORCBzdGVuY2lsP1xuICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTCwgIHRoaXMud2lkdGggICwgdGhpcy5oZWlnaHQgKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oIHIsIGcsIGIsIGEgKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIGdsLmNsZWFyQ29sb3IociwgZywgYiwgYSk7XG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZnJhbWVidWZmZXIgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdGlmICggdGhpcy50ZXh0dXJlIClcbiAgICB7XG4gICAgXHR0aGlzLnRleHR1cmUudXBsb2FkRGF0YShudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdGlmICggdGhpcy5zdGVuY2lsIClcbiAgICB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgc3RlbmNpbCBidWZmZXIgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlUkdCQSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHR2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbURhdGEoZ2wsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xuXHR0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSk7XG5cbiAgICBmYm8udW5iaW5kKCk7XG4gICAgXG4gICAgcmV0dXJuIGZibztcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlRmxvYXQzMiA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHQvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZS4uXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZS5mcm9tRGF0YShnbCwgZGF0YSwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpXG5cbiAgICBmYm8udW5iaW5kKCk7XG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lYnVmZmVyO1xuXG4iLCJcbnZhciBjb21waWxlUHJvZ3JhbSA9IHJlcXVpcmUoJy4vc2hhZGVyL2NvbXBpbGVQcm9ncmFtJyksXG5cdGV4dHJhY3RBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdEF0dHJpYnV0ZXMnKSxcblx0ZXh0cmFjdFVuaWZvcm1zID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdFVuaWZvcm1zJyksXG5cdGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IHJlcXVpcmUoJy4vc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCcpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBTaGFkZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xudmFyIFNoYWRlciA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0Ly8gRmlyc3QgY29tcGlsZSB0aGUgcHJvZ3JhbS4uXG5cdHRoaXMucHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXHQvLyBuZXh0IGV4dHJhY3QgdGhlIGF0dHJpYnV0ZXNcblx0dGhpcy5hdHRyaWJ1dGVzID0gZXh0cmFjdEF0dHJpYnV0ZXMoZ2wsIHRoaXMucHJvZ3JhbSk7IFxuXG4gICAgdmFyIHVuaWZvcm1EYXRhID0gZXh0cmFjdFVuaWZvcm1zKGdsLCB0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy51bmlmb3JtcyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCggZ2wsIHVuaWZvcm1EYXRhICk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgVGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBhIFdlYkdMIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gZm9ybWF0IHtudW1iZXJ9IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlJHQkFcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IHRoZSBnbCB0eXBlIG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5VTlNJR05FRF9CWVRFXG4gKi9cbnZhciBUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHQvLyBzb21lIHNldHRpbmdzLi5cblx0dGhpcy5taXBtYXAgPSBmYWxzZTtcblxuXHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdCB8fCBnbC5SR0JBO1xuXHR0aGlzLnR5cGUgPSB0eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7XG5cblxufVxuXG4vKipcbiAqIEBwYXJhbSB7UElYSS5nbENvcmUuVGV4dHVyZX0gW3Zhcm5hbWVdIFtkZXNjcmlwdGlvbl1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oc291cmNlKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblxuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgc291cmNlKTtcbn1cblxudmFyIEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IGZhbHNlO1xuXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWREYXRhID0gZnVuY3Rpb24oZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5iaW5kKCk7XG5cdFxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgdGhpcy53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG5cblx0aWYoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcblx0e1xuXHRcdGlmKCFGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUpXG5cdFx0e1xuXHRcdFx0dmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO1xuXHRcdFx0XG5cdFx0XHRpZihleHQpXG5cdFx0XHR7XG5cdFx0XHRcdEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHlwZSA9IGdsLkZMT0FUO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdC8vIFRPRE8gc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXNcblx0XHR0aGlzLnR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuXHR9XG5cblx0Ly8gd2hhdCB0eXBlIG9mIGRhdGE/XG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcblx0Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBkYXRhIHx8IG51bGwpO1xuXG59XG5cblRleHR1cmUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihsb2NhdGlvbilcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRpZihsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKVxuXHR7XG5cdFx0Z2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uKTtcblx0fVxuXG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1pbkZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGlmKHRoaXMubWlwbWFwKVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCk7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xuXHR9XHRcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWFnRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVNaXBtYXAgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHRoaXMubWlwbWFwID0gdHJ1ZTtcblx0Z2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZUxpbmVhclNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKHRydWUpO1xuXHR0aGlzLm1hZ0ZpbHRlcih0cnVlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTmVhcmVzdFNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKGZhbHNlKTtcblx0dGhpcy5tYWdGaWx0ZXIoZmFsc2UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwQ2xhbXAgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBSZXBlYXQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cdFxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5SRVBFQVQpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG59XG5cbi8vVGV4dHVyZS5cblRleHR1cmUuZnJvbVNvdXJjZSA9IGZ1bmN0aW9uKGdsLCBzb3VyY2UsIHByZW11bHRpcGx5QWxwaGEpXG57XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhIHx8IGZhbHNlO1xuXHR0ZXh0dXJlLnVwbG9hZChzb3VyY2UpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5UZXh0dXJlLmZyb21EYXRhID0gZnVuY3Rpb24oZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdC8vY29uc29sZS5sb2coZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnVwbG9hZERhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG4iLCJcbi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxuLy8gc3RhdGUgb2JqZWN0Ly9cblxuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChnbClcbntcblx0XG5cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gKFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpXG4gICAgKTtcblxuLy9cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gbnVsbDtcblxuXHRpZih0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbilcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvID0gdGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsgIFxuXHR9XG5cblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG5cdHRoaXMuZGlydHkgPSBmYWxzZTtcblxuXHRcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVydGV4QXJyYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFZlcnRleEFycmF5T2JqZWN0O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5uYXRpdmVWYW8pOyAgXG5cblx0XHRpZih0aGlzLmRpcnR5KVxuXHRcdHtcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0XHR9XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgXG5cdHtcblx0XHR2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW2ldO1xuXHRcdGF0dHJpYi5idWZmZXIuYmluZCgpO1x0XG5cblx0XHRhdHRyaWIuYXR0cmlidXRlLnBvaW50ZXIoYXR0cmliLnR5cGUsIGF0dHJpYi5ub3JtYWxpemVkLCBhdHRyaWIuc3RyaWRlLCBhdHRyaWIuc3RhcnQpOyBcblx0XHRcblx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWIuYXR0cmlidXRlLmxvY2F0aW9uKTtcblx0fTtcblxuXHR0aGlzLmluZGV4QnVmZmVyLmJpbmQoKTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgYXR0cmlidXRlLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXJ0KVxue1xuICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHtcbiAgICBcdGJ1ZmZlcjogXHRidWZmZXIsXG4gICAgXHRhdHRyaWJ1dGU6IFx0YXR0cmlidXRlLFxuXG4gICAgXHRsb2NhdGlvbjogXHRhdHRyaWJ1dGUubG9jYXRpb24sXG5cdCBcdHR5cGU6IFx0XHR0eXBlIHx8IHRoaXMuZ2wuRkxPQVQsXG5cdCBcdG5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWQgfHwgZmFsc2UsXG5cdCBcdHN0cmlkZTogXHRzdHJpZGUgfHwgMCxcblx0IFx0c3RhcnQ6IFx0XHRzdGFydCB8fCAwXG5cdH0pXG5cblx0dGhpcy5kaXJ0eSA9IHRydWU7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRpb25zKVxue1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBidWZmZXI7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHR5cGUsIHNpemUsIHN0YXJ0KVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5kcmF3RWxlbWVudHModHlwZSwgc2l6ZSwgZ2wuVU5TSUdORURfU0hPUlQsIHN0YXJ0KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBDb250ZXh0XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIENPTlRFWFRfVUlEID0gMDtcblxudmFyIGNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbihjYW52YXMsIG9wdGlvbnMpXG57XG4gICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRpb25zKSB8fCBcbiAgICBcdCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdsKVxuICAgIHtcbiAgICAgICAgLy8gZmFpbCwgbm90IGFibGUgdG8gZ2V0IGEgY29udGV4dFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHdlYkdMLiBUcnkgdXNpbmcgdGhlIGNhbnZhcyByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIC8vIG1pZ2h0IHdhbnQgdG8gcGhhc2UgdGhpcyBvdXQ/XG4gICAgZ2wuaWQgPSBDT05URVhUX1VJRCsrO1xuXG4gICAgcmV0dXJuIGdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbnRleHQ7XG5cbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBzZXRWZXJ0ZXhBdHRyaWJBcnJheXMgPSBmdW5jdGlvbiAoZ2wsIGF0dHJpYnMpXG57XHRcbiAgIC8vIGNvbnNvbGUubG9nKGdsLmlkKVxuICAgIHZhciBkYXRhID0gR0xfTUFQW2dsLmlkXTtcblxuICAgIGlmKCFkYXRhKVxuICAgIHtcblx0ICAgdmFyIG1heEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0XHRkYXRhID0gR0xfTUFQW2dsLmlkXSA9IHt0ZW1wQXR0cmliU3RhdGU6bmV3IEFycmF5KG1heEF0dHJpYnMpXG5cdFx0XHRcdCBcdCBcdFx0ICAgLGF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKX07XG5cdH1cblx0XG4gICAgdmFyIGksXG4gICAgXHR0ZW1wQXR0cmliU3RhdGUgPSBkYXRhLnRlbXBBdHRyaWJTdGF0ZSxcbiAgICBcdGF0dHJpYlN0YXRlID0gZGF0YS5hdHRyaWJTdGF0ZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wQXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yIChpIGluIGF0dHJpYnMpXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbYXR0cmlic1tpXS5sb2NhdGlvbl0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDE7IGkgPCBhdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChhdHRyaWJTdGF0ZVtpXSAhPT0gdGVtcEF0dHJpYlN0YXRlW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJTdGF0ZVtpXSA9IHRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM7IiwiXG5cblxuXG5jb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuICAgIHZhciBnbFZlcnRTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbnZhciBjb21waWxlU2hhZGVyID0gZnVuY3Rpb24gKGdsLCB0eXBlLCBzcmMpXG57XG4gICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuXG4gICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlUHJvZ3JhbTtcblxuIiwiXG5cbnZhciBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBzaXplKSBcbntcbiAgICBzd2l0Y2ggKHR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICBjYXNlICd2ZWMyJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjNCc6ICAgICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KDQgKiBzaXplKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnaXZlYzInOiAgIFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDIgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWM0JzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2wnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY2FzZSAnYnZlYzInOlxuXG4gICAgICAgICAgICByZXR1cm4gYm9vbGVhbkFycmF5KCAyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzQnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSg0ICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDFdKTtcblxuICAgICAgICBjYXNlICdtYXQzJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0NCc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMCwgMV0pO1xuICAgIH1cbn1cblxudmFyIGJvb2xlYW5BcnJheSA9IGZ1bmN0aW9uKHNpemUpXG57XG4gICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgXG4gICAge1xuICAgICAgICBhcnJheVtpXSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdFZhbHVlO1xuIiwiXG52YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIG1hcFNpemUgPSByZXF1aXJlKCcuL21hcFNpemUnKTtcblxudmFyIGV4dHJhY3RBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcblxuICAgIHZhciB0b3RhbEF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9BVFRSSUJVVEVTKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEF0dHJpYnV0ZXM7IGkrKykgXG4gICAge1xuICAgICAgICB2YXIgYXR0cmliRGF0YSA9IGdsLmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpKTtcbiAgICAgICAgdmFyIHR5cGUgPSBtYXBUeXBlKGdsLCBhdHRyaWJEYXRhLnR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNbYXR0cmliRGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgIHR5cGU6dHlwZSxcbiAgICAgICAgICAgIHNpemU6bWFwU2l6ZSh0eXBlKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOmdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGF0dHJpYkRhdGEubmFtZSksXG4gICAgICAgICAgICAvL1RPRE8gLSBtYWtlIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAgICAgICAgICAgIHBvaW50ZXI6ZnVuY3Rpb24odHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydCl7XG5cbiAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmxvY2F0aW9uLHRoaXMuc2l6ZSwgdHlwZSB8fCBnbC5GTE9BVCwgbm9ybWFsaXplZCB8fCBmYWxzZSwgc3RyaWRlIHx8IDAsIHN0YXJ0IHx8IDApOyBcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzOyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0cmFjdEF0dHJpYnV0ZXM7XG5cbiIsInZhciBtYXBUeXBlID0gcmVxdWlyZSgnLi9tYXBUeXBlJyk7XG52YXIgZGVmYXVsdFZhbHVlID0gcmVxdWlyZSgnLi9kZWZhdWx0VmFsdWUnKTtcblxuXG52YXIgZXh0cmFjdFVuaWZvcm1zID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG5cdHZhciB1bmlmb3JtcyA9IHt9O1xuXHRcbiAgICB2YXIgdG90YWxVbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbFVuaWZvcm1zOyBpKyspIFxuICAgIHtcbiAgICBcdHZhciB1bmlmb3JtRGF0YSA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSk7XG4gICAgXHR2YXIgbmFtZSA9IHVuaWZvcm1EYXRhLm5hbWUucmVwbGFjZSgvXFxbLio/XFxdLywgXCJcIik7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgdW5pZm9ybURhdGEudHlwZSApO1xuXG4gICAgXHR1bmlmb3Jtc1tuYW1lXSA9IHtcbiAgICBcdFx0dHlwZTp0eXBlLFxuICAgIFx0XHRzaXplOnVuaWZvcm1EYXRhLnNpemUsXG4gICAgXHRcdGxvY2F0aW9uOmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSxcbiAgICBcdFx0dmFsdWU6ZGVmYXVsdFZhbHVlKHR5cGUsIHVuaWZvcm1EYXRhLnNpemUpXG4gICAgXHR9XG4gICAgfTtcblx0XG5cdHJldHVybiB1bmlmb3JtcztcdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RVbmlmb3JtcztcblxuIiwiXG52YXIgZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gZnVuY3Rpb24oZ2wsIHVuaWZvcm1EYXRhKVxue1xuICAgIC8vIHRoaXMgaXMgdGhlIG9iamVjdCB3ZSB3aWxsIGJlIHNlbmRpbmcgYmFjay5cbiAgICAvLyBhbiBvYmplY3QgaGllcmFjaHkgd2lsbCBiZSBjcmVhdGVkIGZvciBzdHJ1Y3RzXG4gICAgdmFyIHVuaWZvcm1zID0ge2RhdGE6e319O1xuXG4gICAgdW5pZm9ybXMuZ2wgPSBnbDtcbiAgICBcbiAgICB2YXIgdW5pZm9ybUtleXM9IE9iamVjdC5rZXlzKHVuaWZvcm1EYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybUtleXMubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGZ1bGxOYW1lID0gdW5pZm9ybUtleXNbaV1cblxuICAgICAgICB2YXIgbmFtZVRva2VucyA9IGZ1bGxOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHZhciB1bmlmb3JtR3JvdXAgPSBnZXRVbmlmb3JtR3JvdXAobmFtZVRva2VucywgdW5pZm9ybXMpO1xuXG4gICAgICAgIHZhciB1bmlmb3JtID0gIHVuaWZvcm1EYXRhW2Z1bGxOYW1lXTtcbiAgICAgICAgdW5pZm9ybUdyb3VwLmRhdGFbbmFtZV0gPSB1bmlmb3JtO1xuXG4gICAgICAgIHVuaWZvcm1Hcm91cC5nbCA9IGdsO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bmlmb3JtR3JvdXAsIG5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2VuZXJhdGVHZXR0ZXIobmFtZSksXG4gICAgICAgICAgICBzZXQ6IGdlbmVyYXRlU2V0dGVyKG5hbWUsIHVuaWZvcm0pXG4gICAgICAgIH0pXG4gICAgfTtcblxuICAgIHJldHVybiB1bmlmb3Jtcztcbn1cblxudmFyIGdlbmVyYXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSlcbntcblx0dmFyIHRlbXBsYXRlID0gZ2V0dGVyVGVtcGxhdGUucmVwbGFjZSgnJSUnLCBuYW1lKTtcblx0cmV0dXJuIG5ldyBGdW5jdGlvbih0ZW1wbGF0ZSk7XG59XG5cbnZhciBnZW5lcmF0ZVNldHRlciA9IGZ1bmN0aW9uKG5hbWUsIHVuaWZvcm0pXG57XG4gICAgdmFyIHRlbXBsYXRlID0gc2V0dGVyVGVtcGxhdGUucmVwbGFjZSgvJSUvZywgbmFtZSk7XG4gICAgdmFyIHNldFRlbXBsYXRlXG4gICAgXG4gICAgaWYodW5pZm9ybS5zaXplID09PSAxKVxuICAgIHtcbiAgICAgICAgc2V0VGVtcGxhdGUgPSBHTFNMX1RPX1NJTkdMRV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19BUlJBWV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuXG4gICAgaWYoc2V0VGVtcGxhdGUpXG4gICAge1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIlxcbnRoaXMuZ2wuXCIgKyBzZXRUZW1wbGF0ZSArIFwiO1wiO1xuICAgIH1cblxuICBcdHJldHVybiBuZXcgRnVuY3Rpb24oJ3ZhbHVlJywgdGVtcGxhdGUpO1xufVxuXG52YXIgZ2V0VW5pZm9ybUdyb3VwID0gZnVuY3Rpb24obmFtZVRva2VucywgdW5pZm9ybSlcbntcbiAgICB2YXIgY3VyID0gdW5pZm9ybTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZVRva2Vucy5sZW5ndGggLSAxOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIG8gPSBjdXJbbmFtZVRva2Vuc1tpXV0gfHwge2RhdGE6e319O1xuICAgICAgICBjdXJbbmFtZVRva2Vuc1tpXV0gPSBvO1xuICAgICAgICBjdXIgPSBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gY3VyXG59XG5cbnZhciBnZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAncmV0dXJuIHRoaXMuZGF0YS4lJS52YWx1ZTsnLFxuXS5qb2luKCdcXG4nKTtcblxudmFyIHNldHRlclRlbXBsYXRlID0gW1xuICAgICd0aGlzLmRhdGEuJSUudmFsdWUgPSB2YWx1ZTsnLFxuICAgICd2YXIgbG9jYXRpb24gPSB0aGlzLmRhdGEuJSUubG9jYXRpb247J1xuXS5qb2luKCdcXG4nKTtcblxuXG52YXIgR0xTTF9UT19TSU5HTEVfU0VUVEVSUyA9IHtcblxuICAgICdmbG9hdCc6ICAgICd1bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ3ZlYzQnOiAgICAgJ3VuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdidmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdidmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ21hdDInOiAgICAgJ3VuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuICAgICdtYXQzJzogICAgICd1bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0NCc6ICAgICAndW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG5cbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbnZhciBHTFNMX1RPX0FSUkFZX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpJyxcblxuICAgICd2ZWMyJzogICAgICd1bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWMzJzogICAgICd1bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgIFx0XG4gICAgJ2ludCc6ICAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgIFxuICAgICdzYW1wbGVyMkQnOid1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0O1xuXG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbih0eXBlKSBcbnsgXG4gICAgcmV0dXJuIEdMU0xfVE9fU0laRVt0eXBlXTtcbn1cblxuXG52YXIgR0xTTF9UT19TSVpFID0ge1xuICAgICdmbG9hdCc6ICAgIDEsXG4gICAgJ3ZlYzInOiAgICAgMixcbiAgICAndmVjMyc6ICAgICAzLFxuICAgICd2ZWM0JzogICAgIDQsXG5cbiAgICAnaW50JzogICAgICAxLFxuICAgICdpdmVjMic6ICAgIDIsXG4gICAgJ2l2ZWMzJzogICAgMyxcbiAgICAnaXZlYzQnOiAgICA0LFxuXG4gICAgJ2Jvb2wnOiAgICAgMSxcbiAgICAnYnZlYzInOiAgICAyLFxuICAgICdidmVjMyc6ICAgIDMsXG4gICAgJ2J2ZWM0JzogICAgNCxcblxuICAgICdtYXQyJzogICAgIDQsXG4gICAgJ21hdDMnOiAgICAgOSxcbiAgICAnbWF0NCc6ICAgICAxNixcblxuICAgICdzYW1wbGVyMkQnOiAgMVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFNpemU7XG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbihnbCwgdHlwZSkgXG57XG4gICAgaWYoIUdMX1RBQkxFKSBcbiAgICB7XG4gICAgICAgIHZhciB0eXBlTmFtZXMgPSBPYmplY3Qua2V5cyhHTF9UT19HTFNMX1RZUEVTKTtcblxuICAgICAgICBHTF9UQUJMRSA9IHt9O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlTmFtZXMubGVuZ3RoOyArK2kpIFxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdG4gPSB0eXBlTmFtZXNbaV07XG4gICAgICAgICAgICBHTF9UQUJMRVsgZ2xbdG5dIF0gPSBHTF9UT19HTFNMX1RZUEVTW3RuXTtcbiAgICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gR0xfVEFCTEVbdHlwZV07XG59XG5cbnZhciBHTF9UQUJMRSA9IG51bGw7XG5cbnZhciBHTF9UT19HTFNMX1RZUEVTID0ge1xuICAnRkxPQVQnOiAgICAgICAnZmxvYXQnLFxuICAnRkxPQVRfVkVDMic6ICAndmVjMicsXG4gICdGTE9BVF9WRUMzJzogICd2ZWMzJyxcbiAgJ0ZMT0FUX1ZFQzQnOiAgJ3ZlYzQnLFxuXG4gICdJTlQnOiAgICAgICAgICdpbnQnLFxuICAnSU5UX1ZFQzInOiAgICAnaXZlYzInLFxuICAnSU5UX1ZFQzMnOiAgICAnaXZlYzMnLFxuICAnSU5UX1ZFQzQnOiAgICAnaXZlYzQnLFxuICBcbiAgJ0JPT0wnOiAgICAgICAgJ2Jvb2wnLFxuICAnQk9PTF9WRUMyJzogICAnYnZlYzInLFxuICAnQk9PTF9WRUMzJzogICAnYnZlYzMnLFxuICAnQk9PTF9WRUM0JzogICAnYnZlYzQnLFxuICBcbiAgJ0ZMT0FUX01BVDInOiAgJ21hdDInLFxuICAnRkxPQVRfTUFUMyc6ICAnbWF0MycsXG4gICdGTE9BVF9NQVQ0JzogICdtYXQ0JyxcbiAgXG4gICdTQU1QTEVSXzJEJzogICdzYW1wbGVyMkQnICBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiLyohXG4gKiBhc3luY1xuICogaHR0cHM6Ly9naXRodWIuY29tL2Nhb2xhbi9hc3luY1xuICpcbiAqIENvcHlyaWdodCAyMDEwLTIwMTQgQ2FvbGFuIE1jTWFob25cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9Cb29sKHYpIHtcbiAgICAgICAgcmV0dXJuICEhdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90SWQodikge1xuICAgICAgICByZXR1cm4gIXY7XG4gICAgfVxuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBwcmV2aW91c19hc3luYztcblxuICAgIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAgIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICAgIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsIHx8XG4gICAgICAgICAgICB0aGlzO1xuXG4gICAgaWYgKHJvb3QgIT0gbnVsbCkge1xuICAgICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsaXR5IGZ1bmN0aW9ucyAvLy8vXG5cbiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIHZhciBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xuXG4gICAgLy8gUG9ydGVkIGZyb20gdW5kZXJzY29yZS5qcyBpc09iamVjdFxuICAgIHZhciBfaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2lzQXJyYXlMaWtlKGFycikge1xuICAgICAgICByZXR1cm4gX2lzQXJyYXkoYXJyKSB8fCAoXG4gICAgICAgICAgICAvLyBoYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAgICAgICAgdHlwZW9mIGFyci5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgICAgYXJyLmxlbmd0aCAlIDEgPT09IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXJyYXlFYWNoKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaW5kZXhdLCBpbmRleCwgYXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IGFyci5sZW5ndGgsXG4gICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcmFuZ2UoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9tYXAoQXJyYXkoY291bnQpLCBmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gaTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZHVjZShhcnIsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgIF9hcnJheUVhY2goYXJyLCBmdW5jdGlvbiAoeCwgaSwgYSkge1xuICAgICAgICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHgsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZvckVhY2hPZihvYmplY3QsIGl0ZXJhdG9yKSB7XG4gICAgICAgIF9hcnJheUVhY2goX2tleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaXRlcmF0b3Iob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbmRleE9mKGFyciwgaXRlbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9rZXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW47XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBpZiAoX2lzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGkgOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBfa2V5cyhjb2xsKTtcbiAgICAgICAgICAgIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ga2V5c1tpXSA6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2ltaWxhciB0byBFUzYncyByZXN0IHBhcmFtIChodHRwOi8vYXJpeWEub2ZpbGFicy5jb20vMjAxMy8wMy9lczYtYW5kLXJlc3QtcGFyYW1ldGVyLmh0bWwpXG4gICAgLy8gVGhpcyBhY2N1bXVsYXRlcyB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGFuIGFycmF5LCBhZnRlciBhIGdpdmVuIGluZGV4LlxuICAgIC8vIEZyb20gdW5kZXJzY29yZS5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMjE0MCkuXG4gICAgZnVuY3Rpb24gX3Jlc3RQYXJhbShmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IHVudXNlZCBidXQgaGFuZGxlIGNhc2VzIG91dHNpZGUgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQ6XG4gICAgICAgICAgICAvLyB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgIC8vIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIC8vICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgICAgICAgIC8vIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IodmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG5cbiAgICAvLyBjYXB0dXJlIHRoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIGd1YXJkIGFnYWluc3QgZmFrZVRpbWVyIG1vY2tzXG4gICAgdmFyIF9zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcblxuICAgIHZhciBfZGVsYXkgPSBfc2V0SW1tZWRpYXRlID8gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgX3NldEltbWVkaWF0ZShmbik7XG4gICAgfSA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IF9kZWxheTtcbiAgICB9XG4gICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gX3NldEltbWVkaWF0ZSA/IF9kZWxheSA6IGFzeW5jLm5leHRUaWNrO1xuXG5cbiAgICBhc3luYy5mb3JFYWNoID1cbiAgICBhc3luYy5lYWNoID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2YoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID1cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cblxuICAgIGFzeW5jLmZvckVhY2hMaW1pdCA9XG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2VhY2hPZkxpbWl0KGxpbWl0KShhcnIsIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZiA9XG4gICAgYXN5bmMuZWFjaE9mID0gZnVuY3Rpb24gKG9iamVjdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdCB8fCBbXTtcblxuICAgICAgICB2YXIgaXRlciA9IF9rZXlJdGVyYXRvcihvYmplY3QpO1xuICAgICAgICB2YXIga2V5LCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgICAgIHdoaWxlICgoa2V5ID0gaXRlcigpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXksIG9ubHlfb25jZShkb25lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkID09PSAwKSBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgICAgY29tcGxldGVkLS07XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGtleSBpcyBudWxsIGluIGNhc2UgaXRlcmF0b3IgaXNuJ3QgZXhoYXVzdGVkXG4gICAgICAgICAgICAvLyBhbmQgZG9uZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBudWxsICYmIGNvbXBsZXRlZCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaE9mU2VyaWVzID1cbiAgICBhc3luYy5lYWNoT2ZTZXJpZXMgPSBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShpdGVyYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLmZvckVhY2hPZkxpbWl0ID1cbiAgICBhc3luYy5lYWNoT2ZMaW1pdCA9IGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgX2VhY2hPZkxpbWl0KGxpbWl0KShvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9lYWNoT2ZMaW1pdChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgICAgICBvYmogPSBvYmogfHwgW107XG4gICAgICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUgJiYgcnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmICFlcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBuZXh0S2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iob2JqW2tleV0sIGtleSwgb25seV9vbmNlKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZG9QYXJhbGxlbChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oYXN5bmMuZWFjaE9mLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWxMaW1pdChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKF9lYWNoT2ZMaW1pdChsaW1pdCksIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9TZXJpZXMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZlNlcmllcywgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UoYXJyKSA/IFtdIDoge307XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih2YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9hc3luY01hcCk7XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMuaW5qZWN0ID1cbiAgICBhc3luYy5mb2xkbCA9XG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hPZlNlcmllcyhhcnIsIGZ1bmN0aW9uICh4LCBpLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgeCwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBtZW1vKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvbGRyID1cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgaWRlbnRpdHkpLnJldmVyc2UoKTtcbiAgICAgICAgYXN5bmMucmVkdWNlKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0b3I7XG4gICAgICAgICAgICBpdGVyYXRvciA9IG1lbW87XG4gICAgICAgICAgICBtZW1vID0gX2lzQXJyYXkoYXJyKSA/IFtdIDoge307XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoT2YoYXJyLCBmdW5jdGlvbih2LCBrLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgdiwgaywgY2IpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4OiBpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5zZWxlY3QgPVxuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RMaW1pdCA9XG4gICAgYXN5bmMuZmlsdGVyTGltaXQgPSBkb1BhcmFsbGVsTGltaXQoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RTZXJpZXMgPVxuICAgIGFzeW5jLmZpbHRlclNlcmllcyA9IGRvU2VyaWVzKF9maWx0ZXIpO1xuXG4gICAgZnVuY3Rpb24gX3JlamVjdChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9maWx0ZXIoZWFjaGZuLCBhcnIsIGZ1bmN0aW9uKHZhbHVlLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBjYighdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBhc3luYy5yZWplY3QgPSBkb1BhcmFsbGVsKF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdFNlcmllcyA9IGRvU2VyaWVzKF9yZWplY3QpO1xuXG4gICAgZnVuY3Rpb24gX2NyZWF0ZVRlc3RlcihlYWNoZm4sIGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYikge1xuICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIGNiKGdldFJlc3VsdChmYWxzZSwgdm9pZCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZSh4LCBfLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYiAmJiBjaGVjayh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoZ2V0UmVzdWx0KHRydWUsIHgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgZWFjaGZuKGFyciwgbGltaXQsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2IgPSBpdGVyYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGxpbWl0O1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy5hbnkgPVxuICAgIGFzeW5jLnNvbWUgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5zb21lTGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCB0b0Jvb2wsIGlkZW50aXR5KTtcblxuICAgIGFzeW5jLmFsbCA9XG4gICAgYXN5bmMuZXZlcnkgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgbm90SWQsIG5vdElkKTtcblxuICAgIGFzeW5jLmV2ZXJ5TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBub3RJZCwgbm90SWQpO1xuXG4gICAgZnVuY3Rpb24gX2ZpbmRHZXRSZXN1bHQodiwgeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgYXN5bmMuZGV0ZWN0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0U2VyaWVzID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZTZXJpZXMsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuXG4gICAgYXN5bmMuc29ydEJ5ID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLm1hcChhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKGVyciwgY3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7dmFsdWU6IHgsIGNyaXRlcmlhOiBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChjb21wYXJhdG9yKSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNvbmN1cnJlbmN5LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gcmVtYWluaW5nVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBfaW5kZXhPZihsaXN0ZW5lcnMsIGZuKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRhc2tDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLS07XG4gICAgICAgICAgICBfYXJyYXlFYWNoKGxpc3RlbmVycy5zbGljZSgwKSwgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBfYXJyYXlFYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9mb3JFYWNoT2YocmVzdWx0cywgZnVuY3Rpb24odmFsLCBya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHRhc2tDb21wbGV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRlYWQtbG9ja3NcbiAgICAgICAgICAgIHZhciBsZW4gPSByZXF1aXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZGVwO1xuICAgICAgICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZGVwID0gdGFza3NbcmVxdWlyZXNbbGVuXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGluZXhpc3RhbnQgZGVwZW5kZW5jeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzQXJyYXkoZGVwKSAmJiBfaW5kZXhPZihkZXAsIGspID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXMgY3ljbGljIGRlcGVuZGVuY2llcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5uaW5nVGFza3MgPCBjb25jdXJyZW5jeSAmJiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzKys7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLnJldHJ5ID0gZnVuY3Rpb24odGltZXMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBERUZBVUxUX1RJTUVTID0gNTtcbiAgICAgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuXG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbDogREVGQVVMVF9JTlRFUlZBTFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KXtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0ID09PSAnbnVtYmVyJyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodCwgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYodHlwZW9mIHQgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBhY2MudGltZXMgPSBwYXJzZUludCh0LnRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgICAgICAgICBhY2MuaW50ZXJ2YWwgPSBwYXJzZUludCh0LmludGVydmFsLCAxMCkgfHwgREVGQVVMVF9JTlRFUlZBTDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGZvciBcXCd0aW1lc1xcJzogJyArIHR5cGVvZiB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgMSB8fCBsZW5ndGggPiAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIC0gbXVzdCBiZSBlaXRoZXIgKHRhc2spLCAodGFzaywgY2FsbGJhY2spLCAodGltZXMsIHRhc2spIG9yICh0aW1lcywgdGFzaywgY2FsbGJhY2spJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoIDw9IDIgJiYgdHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRzLCB0aW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBvcHRzLnRhc2sgPSB0YXNrO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRUYXNrKHdyYXBwZWRDYWxsYmFjaywgd3JhcHBlZFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCh0YXNrLCBmaW5hbEF0dGVtcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VyaWVzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayhmdW5jdGlvbihlcnIsIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXNDYWxsYmFjayghZXJyIHx8IGZpbmFsQXR0ZW1wdCwge2VycjogZXJyLCByZXN1bHQ6IHJlc3VsdH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVkUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmV0cnlJbnRlcnZhbChpbnRlcnZhbCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAob3B0cy50aW1lcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsQXR0ZW1wdCA9ICEob3B0cy50aW1lcy09MSk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQob3B0cy50YXNrLCBmaW5hbEF0dGVtcHQpKTtcbiAgICAgICAgICAgICAgICBpZighZmluYWxBdHRlbXB0ICYmIG9wdHMuaW50ZXJ2YWwgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUludGVydmFsKG9wdHMuaW50ZXJ2YWwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IG9wdHMuY2FsbGJhY2spKGRhdGEuZXJyLCBkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIG9wdHMuY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2s7XG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBJdGVyYXRvcihpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgW2Vycl0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuc3VyZUFzeW5jKGl0ZXJhdG9yKS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfcGFyYWxsZWwoZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IF9pc0FycmF5TGlrZSh0YXNrcykgPyBbXSA6IHt9O1xuXG4gICAgICAgIGVhY2hmbih0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGtleSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRhc2soX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2YsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChfZWFjaE9mTGltaXQobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKGFzeW5jLmVhY2hPZlNlcmllcywgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuaXRlcmF0b3IgPSBmdW5jdGlvbiAodGFza3MpIHtcbiAgICAgICAgZnVuY3Rpb24gbWFrZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm4ubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgdGFza3MubGVuZ3RoIC0gMSkgPyBtYWtlQ2FsbGJhY2soaW5kZXggKyAxKTogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIChmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoY2FsbEFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLCBhcmdzLmNvbmNhdChjYWxsQXJncylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gX2NvbmNhdChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoeSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG4gICAgICAgIGlmICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0LmFwcGx5KHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1doaWxzdCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiArK2NhbGxzIDw9IDEgfHwgdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZHVyaW5nID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG5cbiAgICAgICAgdmFyIG5leHQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjaGVjayk7XG4gICAgICAgICAgICAgICAgdGVzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24oZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRydXRoKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QoY2hlY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb0R1cmluZyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgYXN5bmMuZHVyaW5nKGZ1bmN0aW9uKG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjYWxscysrIDwgMSkge1xuICAgICAgICAgICAgICAgIG5leHQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3F1ZXVlKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHBvcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayB8fCBub29wXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9uZXh0KHEsIHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIF9hcnJheUVhY2godGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2god29ya2Vyc0xpc3QsIGZ1bmN0aW9uICh3b3JrZXIsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya2VyID09PSB0YXNrICYmICFyZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBub29wLFxuICAgICAgICAgICAgZW1wdHk6IG5vb3AsXG4gICAgICAgICAgICBkcmFpbjogbm9vcCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5kcmFpbiA9IG5vb3A7XG4gICAgICAgICAgICAgICAgcS50YXNrcyA9IFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnQ6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrcyA9IHEucGF5bG9hZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS5wYXlsb2FkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS50YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9tYXAodGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5wdXNoKHRhc2tzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShfbmV4dChxLCB0YXNrcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyKGRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtlcnNMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSBmYWxzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bWVDb3VudCA9IE1hdGgubWluKHEuY29uY3VycmVuY3ksIHEudGFza3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHJlc3VtZUNvdW50OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBxID0gX3F1ZXVlKGZ1bmN0aW9uIChpdGVtcywgY2IpIHtcbiAgICAgICAgICAgIHdvcmtlcihpdGVtc1swXSwgY2IpO1xuICAgICAgICB9LCBjb25jdXJyZW5jeSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLnByaW9yaXR5UXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuXG4gICAgICAgIGZ1bmN0aW9uIF9jb21wYXJlVGFza3MoYSwgYil7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgICB2YXIgYmVnID0gLTEsXG4gICAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgc2VxdWVuY2VbbWlkXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWcgPSBtaWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmVnO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBfcXVldWUod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2NvbnNvbGVfZm4obmFtZSkge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2goYXJncywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlW25hbWVdKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgaWRlbnRpdHk7XG4gICAgICAgIHZhciBtZW1vaXplZCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24gbWVtb2l6ZWQoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBtZW1vW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0gPSBbY2FsbGJhY2tdO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW9ba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH07XG5cbiAgICBhc3luYy51bm1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3RpbWVzKG1hcHBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG1hcHBlcihfcmFuZ2UoY291bnQpLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jLnRpbWVzID0gX3RpbWVzKGFzeW5jLm1hcCk7XG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBfdGltZXMoYXN5bmMubWFwU2VyaWVzKTtcbiAgICBhc3luYy50aW1lc0xpbWl0ID0gZnVuY3Rpb24gKGNvdW50LCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5tYXBMaW1pdChfcmFuZ2UoY291bnQpLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VxID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5vb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnJlZHVjZShmbnMsIGFyZ3MsIGZ1bmN0aW9uIChuZXdhcmdzLCBmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBuZXdhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBuZXh0YXJncykge1xuICAgICAgICAgICAgICAgICAgICBjYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY29tcG9zZSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIF9hcHBseUVhY2goZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uKGZucywgYXJncykge1xuICAgICAgICAgICAgdmFyIGdvID0gX3Jlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgXywgY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncy5jb25jYXQoW2NiXSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ28uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ287XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmFwcGx5RWFjaCA9IF9hcHBseUVhY2goYXN5bmMuZWFjaE9mKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZlNlcmllcyk7XG5cblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seV9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIgdGFzayA9IGVuc3VyZUFzeW5jKGZuKTtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmVuc3VyZUFzeW5jID0gZW5zdXJlQXN5bmM7XG5cbiAgICBhc3luYy5jb25zdGFudCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICAgIHZhciBhcmdzID0gW251bGxdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhc3luYy53cmFwU3luYyA9XG4gICAgYXN5bmMuYXN5bmNpZnkgPSBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChfaXNPYmplY3QocmVzdWx0KSAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIubWVzc2FnZSA/IGVyciA6IG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcblxuICAgIGRpbSA9IGRpbSB8fCAyO1xuXG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLFxuICAgICAgICBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcbiAgICAgICAgdHJpYW5nbGVzID0gW107XG5cbiAgICBpZiAoIW91dGVyTm9kZSkgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBzaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgc2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIHN1bSA9IDAsXG4gICAgICAgIGksIGosIGxhc3Q7XG5cbiAgICAvLyBjYWxjdWxhdGUgb3JpZ2luYWwgd2luZGluZyBvcmRlciBvZiBhIHBvbHlnb24gcmluZ1xuICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuXG4gICAgLy8gbGluayBwb2ludHMgaW50byBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHN1bSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG4gICAgaWYgKCFzdGFydCkgcmV0dXJuIHN0YXJ0O1xuICAgIGlmICghZW5kKSBlbmQgPSBzdGFydDtcblxuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcCA9IGVuZCA9IHAucHJldjtcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuICAgIHJldHVybiBlbmQ7XG59XG5cbi8vIG1haW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBhcyBhIGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIHBhc3MpIHtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuICAgIGlmICghcGFzcyAmJiBzaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICB2YXIgc3RvcCA9IGVhcixcbiAgICAgICAgcHJldiwgbmV4dDtcblxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuICAgIHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcbiAgICAgICAgcHJldiA9IGVhci5wcmV2O1xuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XG5cbiAgICAgICAgaWYgKHNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIHNpemUpIDogaXNFYXIoZWFyKSkge1xuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXG4gICAgICAgICAgICByZW1vdmVOb2RlKGVhcik7XG5cbiAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRpY2UgbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhlYXIsIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIHNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICAvLyBmaXJzdCBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBpbmNyZWFzaW5nIHotb3JkZXJcbiAgICB2YXIgcCA9IGVhci5uZXh0WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyB0aGVuIGxvb2sgZm9yIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICBwID0gZWFyLnByZXZaO1xuXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgLy8gYSBzZWxmLWludGVyc2VjdGlvbiB3aGVyZSBlZGdlICh2W2ktMV0sdltpXSkgaW50ZXJzZWN0cyAodltpKzFdLHZbaSsyXSlcbiAgICAgICAgaWYgKGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHA7XG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBsb29rIGZvciBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgICAgICAgICBhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiA9IGIubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBhID0gYS5uZXh0O1xuICAgIH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG4gICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuICAgICAgICBpZiAobGlzdCA9PT0gbGlzdC5uZXh0KSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuICAgICAgICBxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcbiAgICB9XG5cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0ZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlWChhLCBiKSB7XG4gICAgcmV0dXJuIGEueCAtIGIueDtcbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkge1xuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xuICAgICAgICBmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcbiAgICB9XG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBwID0gb3V0ZXJOb2RlLFxuICAgICAgICBoeCA9IGhvbGUueCxcbiAgICAgICAgaHkgPSBob2xlLnksXG4gICAgICAgIHF4ID0gLUluZmluaXR5LFxuICAgICAgICBtO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgdGFuO1xuXG4gICAgcCA9IG0ubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBzdG9wKSB7XG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG0ueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG0ueSA/IGh4IDogcXgsIGh5LCBtLngsIG0ueSwgaHkgPCBtLnkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuICAgICAgICAgICAgaWYgKCh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIHAueCA+IG0ueCkpICYmIGxvY2FsbHlJbnNpZGUocCwgaG9sZSkpIHtcbiAgICAgICAgICAgICAgICBtID0gcDtcbiAgICAgICAgICAgICAgICB0YW5NaW4gPSB0YW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBtO1xufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgIHAucHJldlogPSBwLnByZXY7XG4gICAgICAgIHAubmV4dFogPSBwLm5leHQ7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgcC5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKHApO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIGRvIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHFTaXplID09PSAwIHx8ICFxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAueiA8PSBxLnopIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuICAgICAgICBpblNpemUgKj0gMjtcblxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIHNpemUgb2YgdGhlIGRhdGEgYm91bmRpbmcgYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpIC8gc2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpIC8gc2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LngpIGxlZnRtb3N0ID0gcDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gbGVmdG1vc3Q7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcbiAgICByZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXF1YWxzKGEsIGIpIHx8IGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcbiAgICAgICAgICAgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKTtcbn1cblxuLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xufVxuXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXG4gICAgICAgICAgIGFyZWEocDIsIHEyLCBwMSkgPiAwICE9PSBhcmVhKHAyLCBxMiwgcTEpID4gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG4vLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG4gICAgICAgIGFuID0gYS5uZXh0LFxuICAgICAgICBicCA9IGIucHJldjtcblxuICAgIGEubmV4dCA9IGI7XG4gICAgYi5wcmV2ID0gYTtcblxuICAgIGEyLm5leHQgPSBhbjtcbiAgICBhbi5wcmV2ID0gYTI7XG5cbiAgICBiMi5uZXh0ID0gYTI7XG4gICAgYTIucHJldiA9IGIyO1xuXG4gICAgYnAubmV4dCA9IGIyO1xuICAgIGIyLnByZXYgPSBicDtcblxuICAgIHJldHVybiBiMjtcbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgcC5wcmV2ID0gcDtcbiAgICAgICAgcC5uZXh0ID0gcDtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHAubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgcC5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xuICAgICAgICBsYXN0Lm5leHQgPSBwO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XG4gICAgcC5uZXh0LnByZXYgPSBwLnByZXY7XG4gICAgcC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cbiAgICBpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG4gICAgaWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcbiAgICAvLyB2ZXJ0aWNlIGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRpY2Ugbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vXG4vLyBXZSBzdG9yZSBvdXIgRUUgb2JqZWN0cyBpbiBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBgfmAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Qgb3ZlcnJpZGRlbiBvclxuLy8gdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy8gV2UgYWxzbyBhc3N1bWUgdGhhdCBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV2ZW50IG5hbWVcbi8vIGlzIGFuIEVTNiBTeW1ib2wuXG4vL1xudmFyIHByZWZpeCA9IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nID8gJ34nIDogZmFsc2U7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgRXZlbnRFbWl0dGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBDb250ZXh0IGZvciBmdW5jdGlvbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSBlbWl0IG9uY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTWluaW1hbCBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIEV2ZW50RW1pdHRlciBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7IC8qIE5vdGhpbmcgdG8gc2V0ICovIH1cblxuLyoqXG4gKiBIb2xkcyB0aGUgYXNzaWduZWQgRXZlbnRFbWl0dGVycyBieSBuYW1lLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBhc3NpZ25lZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBleGlzdHMgV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtBcnJheXxCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQsIGV4aXN0cykge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgYXZhaWxhYmxlID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChleGlzdHMpIHJldHVybiAhIWF2YWlsYWJsZTtcbiAgaWYgKCFhdmFpbGFibGUpIHJldHVybiBbXTtcbiAgaWYgKGF2YWlsYWJsZS5mbikgcmV0dXJuIFthdmFpbGFibGUuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXZhaWxhYmxlLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGF2YWlsYWJsZVtpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB0byBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJbmRpY2F0aW9uIGlmIHdlJ3ZlIGVtaXR0ZWQgYW4gZXZlbnQuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IEV2ZW50TGlzdGVuZXIgZm9yIHRoZSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0b259IGZuIENhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGQgYW4gRXZlbnRMaXN0ZW5lciB0aGF0J3Mgb25seSBjYWxsZWQgb25jZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IHRoaXMsIHRydWUpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKSB0aGlzLl9ldmVudHMgPSBwcmVmaXggPyB7fSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHRoaXMuX2V2ZW50c1tldnRdID0gbGlzdGVuZXI7XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5fZXZlbnRzW2V2dF0uZm4pIHRoaXMuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIGVsc2UgdGhpcy5fZXZlbnRzW2V2dF0gPSBbXG4gICAgICB0aGlzLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3ZSB3YW50IHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciB0aGF0IHdlIG5lZWQgdG8gZmluZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgT25seSByZW1vdmUgbGlzdGVuZXJzIG1hdGNoaW5nIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmNlIGxpc3RlbmVycy5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGV2ZW50cyA9IFtdO1xuXG4gIGlmIChmbikge1xuICAgIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgICAgbGlzdGVuZXJzLmZuICE9PSBmblxuICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzLm9uY2UpXG4gICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVycy5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm5cbiAgICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpXG4gICAgICAgICAgfHwgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gIC8vXG4gIGlmIChldmVudHMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbZXZ0XTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycyBvciBvbmx5IHRoZSBsaXN0ZW5lcnMgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvci5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcztcblxuICBpZiAoZXZlbnQpIGRlbGV0ZSB0aGlzLl9ldmVudHNbcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudF07XG4gIGVsc2UgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYXBwbHkgYW55bW9yZS5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLypqc2hpbnQgb25ldmFyOiBmYWxzZSwgaW5kZW50OjQgKi9cbi8qZ2xvYmFsIHNldEltbWVkaWF0ZTogZmFsc2UsIHNldFRpbWVvdXQ6IGZhbHNlLCBjb25zb2xlOiBmYWxzZSAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciByb290LCBwcmV2aW91c19hc3luYztcblxuICAgIHJvb3QgPSB0aGlzO1xuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgIHByZXZpb3VzX2FzeW5jID0gcm9vdC5hc3luYztcbiAgICB9XG5cbiAgICBhc3luYy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmFzeW5jID0gcHJldmlvdXNfYXN5bmM7XG4gICAgICAgIHJldHVybiBhc3luYztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb25seV9vbmNlKGZuKSB7XG4gICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGNhbGxlZCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseShyb290LCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIHZhciBfZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaV0sIGksIGFycik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIF9tYXAgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBpZiAoYXJyLm1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5tYXAoaXRlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih4LCBpLCBhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgdmFyIF9yZWR1Y2UgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBpZiAoYXJyLnJlZHVjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8pO1xuICAgICAgICB9XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICB2YXIgX2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIC8vLy8gZXhwb3J0ZWQgYXN5bmMgbW9kdWxlIGZ1bmN0aW9ucyAvLy8vXG5cbiAgICAvLy8vIG5leHRUaWNrIGltcGxlbWVudGF0aW9uIHdpdGggYnJvd3Nlci1jb21wYXRpYmxlIGZhbGxiYWNrIC8vLy9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICEocHJvY2Vzcy5uZXh0VGljaykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgICBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAvLyBub3QgYSBkaXJlY3QgYWxpYXMgZm9yIElFMTAgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBvbmx5X29uY2UoZG9uZSkgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaCA9IGFzeW5jLmVhY2g7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmICghYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgIHZhciBpdGVyYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA+PSBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2hTZXJpZXMgPSBhc3luYy5lYWNoU2VyaWVzO1xuXG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZm4gPSBfZWFjaExpbWl0KGxpbWl0KTtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgW2FyciwgaXRlcmF0b3IsIGNhbGxiYWNrXSk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPSBhc3luYy5lYWNoTGltaXQ7XG5cbiAgICB2YXIgX2VhY2hMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBpZiAoIWFyci5sZW5ndGggfHwgbGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmIHN0YXJ0ZWQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihhcnJbc3RhcnRlZCAtIDFdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBkb1BhcmFsbGVsID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZG9QYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24obGltaXQsIGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW19lYWNoTGltaXQobGltaXQpXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvU2VyaWVzID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hTZXJpZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuXG4gICAgdmFyIF9hc3luY01hcCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW3guaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX21hcExpbWl0KGxpbWl0KShhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHZhciBfbWFwTGltaXQgPSBmdW5jdGlvbihsaW1pdCkge1xuICAgICAgICByZXR1cm4gZG9QYXJhbGxlbExpbWl0KGxpbWl0LCBfYXN5bmNNYXApO1xuICAgIH07XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gaW5qZWN0IGFsaWFzXG4gICAgYXN5bmMuaW5qZWN0ID0gYXN5bmMucmVkdWNlO1xuICAgIC8vIGZvbGRsIGFsaWFzXG4gICAgYXN5bmMuZm9sZGwgPSBhc3luYy5yZWR1Y2U7XG5cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIC8vIGZvbGRyIGFsaWFzXG4gICAgYXN5bmMuZm9sZHIgPSBhc3luYy5yZWR1Y2VSaWdodDtcblxuICAgIHZhciBfZmlsdGVyID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZmlsdGVyID0gZG9QYXJhbGxlbChfZmlsdGVyKTtcbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcbiAgICAvLyBzZWxlY3QgYWxpYXNcbiAgICBhc3luYy5zZWxlY3QgPSBhc3luYy5maWx0ZXI7XG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID0gYXN5bmMuZmlsdGVyU2VyaWVzO1xuXG4gICAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIHZhciBfZGV0ZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5kZXRlY3QgPSBkb1BhcmFsbGVsKF9kZXRlY3QpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IGRvU2VyaWVzKF9kZXRlY3QpO1xuXG4gICAgYXN5bmMuc29tZSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGFueSBhbGlhc1xuICAgIGFzeW5jLmFueSA9IGFzeW5jLnNvbWU7XG5cbiAgICBhc3luYy5ldmVyeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbGwgYWxpYXNcbiAgICBhc3luYy5hbGwgPSBhc3luYy5ldmVyeTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChmbiksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aFxuICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB2YXIgYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGZuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0YXNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tXG4gICAgICAgICAgICBfZWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudCBmaW5hbCBjYWxsYmFjayBmcm9tIGNhbGxpbmcgaXRzZWxmIGlmIGl0IGVycm9yc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICB0aGVDYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2VhY2goa2V5cywgZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gX2lzQXJyYXkodGFza3Nba10pID8gdGFza3Nba106IFt0YXNrc1trXV07XG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2FmZVJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgX2VhY2goX2tleXMocmVzdWx0cyksIGZ1bmN0aW9uKHJrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW3JrZXldID0gcmVzdWx0c1tya2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3Agc3Vic2VxdWVudCBlcnJvcnMgaGl0dGluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIE1hdGguYWJzKHRhc2subGVuZ3RoIC0gMSkpIHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuICAgICAgICAvLyBVc2UgZGVmYXVsdHMgaWYgdGltZXMgbm90IHBhc3NlZFxuICAgICAgICBpZiAodHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgICAgICB0aW1lcyA9IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRpbWVzIGlzIGEgbnVtYmVyXG4gICAgICAgIHRpbWVzID0gcGFyc2VJbnQodGltZXMsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICB2YXIgd3JhcHBlZFRhc2sgPSBmdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICB2YXIgcmV0cnlBdHRlbXB0ID0gZnVuY3Rpb24odGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2hpbGUgKHRpbWVzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQodGFzaywgISh0aW1lcy09MSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IGNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQsIHJ1biB0aGlzIGFzIGEgY29udHJvbGwgZmxvd1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2tcbiAgICB9O1xuXG4gICAgYXN5bmMud2F0ZXJmYWxsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIV9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd3JhcEl0ZXJhdG9yID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2god3JhcEl0ZXJhdG9yKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gZnVuY3Rpb24oZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKF9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgZWFjaGZuLm1hcCh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgZWFjaGZuLmVhY2goX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBhc3luYy5tYXAsIGVhY2g6IGFzeW5jLmVhY2ggfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKHRhc2tzLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBfbWFwTGltaXQobGltaXQpLCBlYWNoOiBfZWFjaExpbWl0KGxpbWl0KSB9LCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGFzeW5jLm1hcFNlcmllcyh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhfa2V5cyh0YXNrcyksIGZ1bmN0aW9uIChrLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRhc2tzW2tdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIHZhciBtYWtlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbWFrZUNhbGxiYWNrKDApO1xuICAgIH07XG5cbiAgICBhc3luYy5hcHBseSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBfY29uY2F0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNiKSB7XG4gICAgICAgICAgICBmbih4LCBmdW5jdGlvbiAoZXJyLCB5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMud2hpbHN0KHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICh0ZXN0LmFwcGx5KG51bGwsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0ZXN0KCkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3luYy51bnRpbCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvVW50aWwgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICghdGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvVW50aWwoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICBxLnRhc2tzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbnVsbCxcbiAgICAgICAgICAgIGVtcHR5OiBudWxsLFxuICAgICAgICAgICAgZHJhaW46IG51bGwsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcS5kcmFpbiA9IG51bGw7XG4gICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghcS5wYXVzZWQgJiYgd29ya2VycyA8IHEuY29uY3VycmVuY3kgJiYgcS50YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBxLnRhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLmVtcHR5ICYmIHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4gJiYgcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyKHRhc2suZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHEuY29uY3VycmVuY3k7IHcrKykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICBlbmQgPSBzZXF1ZW5jZS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciBtaWQgPSBiZWcgKyAoKGVuZCAtIGJlZyArIDEpID4+PiAxKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKF9iaW5hcnlTZWFyY2gocS50YXNrcywgaXRlbSwgX2NvbXBhcmVUYXNrcykgKyAxLCAwLCBpdGVtKTtcblxuICAgICAgICAgICAgICBpZiAocS5zYXR1cmF0ZWQgJiYgcS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvblxuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5jYXJnbyA9IGZ1bmN0aW9uICh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHdvcmtpbmcgICAgID0gZmFsc2UsXG4gICAgICAgICAgICB0YXNrcyAgICAgICA9IFtdO1xuXG4gICAgICAgIHZhciBjYXJnbyA9IHtcbiAgICAgICAgICAgIHRhc2tzOiB0YXNrcyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgZHJhaW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX2VhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXJnby5kcmFpbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXJnby5zYXR1cmF0ZWQgJiYgdGFza3MubGVuZ3RoID09PSBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnby5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShjYXJnby5wcm9jZXNzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICAgICAgICAgIGlmICh3b3JraW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZihjYXJnby5kcmFpbiAmJiAhY2FyZ28uZHJhaW5lZCkgY2FyZ28uZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdHMgPSB0eXBlb2YgcGF5bG9hZCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRhc2tzLnNwbGljZSgwLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza3Muc3BsaWNlKDAsIHRhc2tzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZHMgPSBfbWFwKHRzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFzay5kYXRhO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoY2FyZ28uZW1wdHkpIGNhcmdvLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgd29ya2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2VyKGRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgX2VhY2godHMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNhcmdvO1xuICAgIH07XG5cbiAgICB2YXIgX2NvbnNvbGVfZm4gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy50aW1lcyA9IGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb3VudGVyID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY291bnRlci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luYy5tYXAoY291bnRlciwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwU2VyaWVzKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGF0LCBbZXJyXS5jb25jYXQocmVzdWx0cykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICByZXR1cm4gYXN5bmMuc2VxLmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIHZhciBfYXBwbHlFYWNoID0gZnVuY3Rpb24gKGVhY2hmbiwgZm5zIC8qYXJncy4uLiovKSB7XG4gICAgICAgIHZhciBnbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgZnVuY3Rpb24gKGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5hcHBseUVhY2ggPSBkb1BhcmFsbGVsKF9hcHBseUVhY2gpO1xuICAgIGFzeW5jLmFwcGx5RWFjaFNlcmllcyA9IGRvU2VyaWVzKF9hcHBseUVhY2gpO1xuXG4gICAgYXN5bmMuZm9yZXZlciA9IGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xuXG4gICAgLy8gTm9kZS5qc1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwidmFyIGFzeW5jICAgICAgID0gcmVxdWlyZSgnYXN5bmMnKSxcbiAgICB1cmxQYXJzZXIgICA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIFJlc291cmNlICAgID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBtdWx0aXBsZSByZXNvdXJjZXMgdG8gbG9hZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIGNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvZ3Jlc3MgcGVyY2VudCBvZiB0aGUgbG9hZGVyIGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogTG9hZGluZyBzdGF0ZSBvZiB0aGUgbG9hZGVyLCB0cnVlIGlmIGl0IGlzIGN1cnJlbnRseSBsb2FkaW5nIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0b3RhbCBwcm9ncmVzcyB0aGF0IGEgc2luZ2xlIHJlc291cmNlIHJlcHJlc2VudHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWlkZGxld2FyZSB0byBydW4gYmVmb3JlIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGFmdGVyIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9sb2FkUmVzb3VyY2VgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRMb2FkUmVzb3VyY2UgPSB0aGlzLl9sb2FkUmVzb3VyY2UuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uTG9hZGAgZnVuY3Rpb24gYm91bmQgd2l0aCB0aGlzIG9iamVjdCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uTG9hZCA9IHRoaXMuX29uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlIGJ1ZmZlciB0aGF0IGZpbGxzIHVudGlsIGBsb2FkYCBpcyBjYWxsZWQgdG8gc3RhcnQgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlW119XG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyID0gW107XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHRyYWNrIGxvYWQgY29tcGxldGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb3VyY2VzIHdhaXRpbmcgdG8gYmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX3F1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fYm91bmRMb2FkUmVzb3VyY2UsIGNvbmN1cnJlbmN5KTtcblxuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGlzIGxvYWRlciBrZXllZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgUmVzb3VyY2U+fVxuICAgICAqL1xuICAgIHRoaXMucmVzb3VyY2VzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCBvciBlcnJvcmVkIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgb25jZSBwZXIgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbG9hZGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdGFydFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHF1ZXVlZCByZXNvdXJjZXMgYWxsIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY29tcGxldGVcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuLyoqXG4gKiBBZGRzIGEgcmVzb3VyY2UgKG9yIG11bHRpcGxlIHJlc291cmNlcykgdG8gdGhlIGxvYWRlciBxdWV1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGEgd2lkZSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwYXJhbWV0ZXJzLiBUaGUgb25seSB0aGluZyB0aGF0IGlzIGFsd2F5c1xuICogcmVxdWlyZWQgdGhlIHVybCB0byBsb2FkLiBBbGwgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6XG4gKlxuICogYGBganNcbiAqIGxvYWRlclxuICogICAgIC8vIG5vcm1hbCBwYXJhbSBzeW50YXhcbiAqICAgICAuYWRkKCdrZXknLCAnaHR0cDovLy4uLicsIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJylcbiAqXG4gKiAgICAgLy8gb2JqZWN0IHN5bnRheFxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MicsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIG5hbWU6ICdrZXkzJyxcbiAqICAgICAgICAgdXJsOiAnaHR0cDovLy4uLidcbiAqICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge31cbiAqICAgICB9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwczovLy4uLicsXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9LFxuICogICAgICAgICBjcm9zc09yaWdpbjogdHJ1ZVxuICogICAgIH0pXG4gKlxuICogICAgIC8vIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJscyBvciBib3RoXG4gKiAgICAgLmFkZChbXG4gKiAgICAgICAgIHsgbmFtZTogJ2tleTQnLCB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgeyB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgJ2h0dHA6Ly8uLi4nXG4gKiAgICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAYWxpYXMgZW5xdWV1ZVxuICogQHBhcmFtIFtuYW1lXSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZCwgaWYgbm90IHBhc3NlZCB0aGUgdXJsIGlzIHVzZWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIHJlbGF0aXZlIHRvIHRoZSBiYXNlVXJsIG9mIHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcGFyYW0gW29wdGlvbnMuY3Jvc3NPcmlnaW5dIHtib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5YSFJfTE9BRF9UWVBFfSBIb3cgc2hvdWxkIHRoaXMgcmVzb3VyY2UgYmUgbG9hZGVkP1xuICogQHBhcmFtIFtvcHRpb25zLnhoclR5cGU9UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVF0ge1Jlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFfSBIb3cgc2hvdWxkIHRoZSBkYXRhIGJlaW5nXG4gKiAgICAgIGxvYWRlZCBiZSBpbnRlcnByZXRlZCB3aGVuIHVzaW5nIFhIUj9cbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMgc3BlY2lmaWMgcmVzb3VyY2UgY29tcGxldGVzIGxvYWRpbmcuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWRkID0gTG9hZGVyLnByb3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgb3B0aW9ucywgY2IpIHtcbiAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciB1cmxzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChuYW1lW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGlmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW5zdGVhZCBvZiBwYXJhbXNcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNiID0gdXJsIHx8IG5hbWUuY2FsbGJhY2sgfHwgbmFtZS5vbkNvbXBsZXRlO1xuICAgICAgICBvcHRpb25zID0gbmFtZTtcbiAgICAgICAgdXJsID0gbmFtZS51cmw7XG4gICAgICAgIG5hbWUgPSBuYW1lLm5hbWUgfHwgbmFtZS5rZXkgfHwgbmFtZS51cmw7XG4gICAgfVxuXG4gICAgLy8gY2FzZSB3aGVyZSBubyBuYW1lIGlzIHBhc3NlZCBzaGlmdCBhbGwgYXJncyBvdmVyIGJ5IG9uZS5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdXJsO1xuICAgICAgICB1cmwgPSBuYW1lO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IHdlIHNoaWZ0ZWQgbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9wZXIgdXJsLlxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVybCBwYXNzZWQgdG8gYWRkIHJlc291cmNlIHRvIGxvYWRlci4nKTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zIGFyZSBvcHRpb25hbCBzbyBwZW9wbGUgbWlnaHQgcGFzcyBhIGZ1bmN0aW9uIGFuZCBubyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW25hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzb3VyY2Ugd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBleGlzdHMuJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJhc2UgdXJsIGlmIHRoaXMgaXNuJ3QgYW4gYWJzb2x1dGUgdXJsXG4gICAgdXJsID0gdGhpcy5faGFuZGxlQmFzZVVybCh1cmwpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBzdG9yZSB0aGUgcmVzb3VyY2VcbiAgICB0aGlzLnJlc291cmNlc1tuYW1lXSA9IG5ldyBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlc291cmNlc1tuYW1lXS5vbmNlKCdhZnRlck1pZGRsZXdhcmUnLCBjYik7XG4gICAgfVxuXG4gICAgdGhpcy5fbnVtVG9Mb2FkKys7XG5cbiAgICAvLyBpZiBhbHJlYWR5IGxvYWRpbmcgYWRkIGl0IHRvIHRoZSB3b3JrZXIgcXVldWVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9ICgxMDAgLSB0aGlzLnByb2dyZXNzKSAvICh0aGlzLl9xdWV1ZS5sZW5ndGgoKSArIHRoaXMuX3F1ZXVlLnJ1bm5pbmcoKSk7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBidWZmZXIgaXQgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlIGxhdGVyXG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDEwMCAvIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5Mb2FkZXIucHJvdG90eXBlLl9oYW5kbGVCYXNlVXJsID0gZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBwYXJzZWRVcmwgPSB1cmxQYXJzZXIucGFyc2UodXJsKTtcblxuICAgIC8vIGFic29sdXRlIHVybCwganVzdCB1c2UgaXQgYXMgaXMuXG4gICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCB8fCBwYXJzZWRVcmwucGF0aG5hbWUuaW5kZXhPZignLy8nKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIC8vIGlmIGJhc2VVcmwgZG9lc24ndCBlbmQgaW4gc2xhc2ggYW5kIHVybCBkb2Vzbid0IHN0YXJ0IHdpdGggc2xhc2gsIHRoZW4gYWRkIGEgc2xhc2ggaW5iZXR3ZWVuXG4gICAgaWYgKFxuICAgICAgICB0aGlzLmJhc2VVcmwubGVuZ3RoICYmXG4gICAgICAgIHRoaXMuYmFzZVVybC5sYXN0SW5kZXhPZignLycpICE9PSB0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSAmJlxuICAgICAgICB1cmwuY2hhckF0KDApICE9PSAnLydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybCArICcvJyArIHVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmJlZm9yZSogdGhlXG4gKiByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKlxuICogQGFsaWFzIHByZVxuICogQHBhcmFtIG1pZGRsZXdhcmUge2Z1bmN0aW9ufSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5iZWZvcmUgPSBMb2FkZXIucHJvdG90eXBlLnByZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB1cCBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gdGhhdCB3aWxsIHJ1biAqYWZ0ZXIqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyB1c2VcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWZ0ZXIgPSBMb2FkZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZS5wdXNoKGZuKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHF1ZXVlIG9mIHRoZSBsb2FkZXIgdG8gcHJlcGFyZSBmb3IgYSBuZXcgbG9hZC5cbiAqXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gdGhpcy5iYXNlVXJsID0gYmFzZVVybCB8fCAnJztcblxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9ncmVzc0NodW5rID0gMDtcblxuICAgIC8vIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUubGVuZ3RoID0gMDtcbiAgICAvLyB0aGlzLl9hZnRlck1pZGRsZXdhcmUubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fbnVtVG9Mb2FkID0gMDtcblxuICAgIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgICB0aGlzLl9xdWV1ZS5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBTdGFydHMgbG9hZGluZyB0aGUgcXVldWVkIHJlc291cmNlcy5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgY29tcGxldGVgIGV2ZW50LlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAvLyByZWdpc3RlciBjb21wbGV0ZSBjYWxsYmFjayBpZiB0aGV5IHBhc3Mgb25lXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBxdWV1ZSBoYXMgYWxyZWFkeSBzdGFydGVkIHdlIGFyZSBkb25lIGhlcmVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBub3RpZnkgb2Ygc3RhcnRcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBzdGFydCB0aGUgaW50ZXJuYWwgcXVldWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMuX2J1ZmZlcltpXSk7XG4gICAgfVxuXG4gICAgLy8gZW1wdHkgdGhlIGJ1ZmZlclxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIExvYWRzIGEgc2luZ2xlIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc291cmNlID0gZnVuY3Rpb24gKHJlc291cmNlLCBkZXF1ZXVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmVzb3VyY2UuX2RlcXVldWUgPSBkZXF1ZXVlO1xuXG4gICAgdGhpcy5fcnVuTWlkZGxld2FyZShyZXNvdXJjZSwgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXNvdXJjZS5vbigncHJvZ3Jlc3MnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAncHJvZ3Jlc3MnKSk7XG5cbiAgICAgICAgcmVzb3VyY2UubG9hZChzZWxmLl9ib3VuZE9uTG9hZCk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbmNlIGVhY2ggcmVzb3VyY2UgaGFzIGxvYWRlZC5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX29uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMsIHRoaXMucmVzb3VyY2VzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGVhY2ggdGltZSBhIHJlc291cmNlcyBpcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAZmlyZXMgZXJyb3JcbiAqIEBmaXJlcyBsb2FkXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICB0aGlzLnByb2dyZXNzICs9IHRoaXMuX3Byb2dyZXNzQ2h1bms7XG5cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgcmVzb3VyY2UpO1xuXG4gICAgLy8gcnVuIG1pZGRsZXdhcmUsIHRoaXMgKm11c3QqIGhhcHBlbiBiZWZvcmUgZGVxdWV1ZSBzbyBzdWItYXNzZXRzIGdldCBhZGRlZCBwcm9wZXJseVxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2FmdGVyTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvdXJjZS5lbWl0KCdhZnRlck1pZGRsZXdhcmUnLCByZXNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5fbnVtVG9Mb2FkLS07XG5cbiAgICAgICAgLy8gZG8gY29tcGxldGlvbiBjaGVja1xuICAgICAgICBpZiAodGhpcy5fbnVtVG9Mb2FkID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgdGhpcy5fb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzb3VyY2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCByZXNvdXJjZS5lcnJvciwgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkJywgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG5cblxuICAgIC8vIHJlbW92ZSB0aGlzIHJlc291cmNlIGZyb20gdGhlIGFzeW5jIHF1ZXVlXG4gICAgcmVzb3VyY2UuX2RlcXVldWUoKTtcbn07XG5cbi8qKlxuICogUnVuIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9uIGEgcmVzb3VyY2UuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fcnVuTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZm5zLCBjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGFzeW5jLmVhY2hTZXJpZXMoZm5zLCBmdW5jdGlvbiAoZm4sIG5leHQpIHtcbiAgICAgICAgZm4uY2FsbChzZWxmLCByZXNvdXJjZSwgbmV4dCk7XG4gICAgfSwgY2IuYmluZCh0aGlzLCByZXNvdXJjZSkpO1xufTtcblxuTG9hZGVyLkxPQURfVFlQRSA9IFJlc291cmNlLkxPQURfVFlQRTtcbkxvYWRlci5YSFJfUkVBRFlfU1RBVEUgPSBSZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEU7XG5Mb2FkZXIuWEhSX1JFU1BPTlNFX1RZUEUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRTtcbiIsInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgX3VybCA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIC8vIHRlc3RzIGlzIENPUlMgaXMgc3VwcG9ydGVkIGluIFhIUiwgaWYgbm90IHdlIG5lZWQgdG8gdXNlIFhEUlxuICAgIHVzZVhkciA9ICEhKHdpbmRvdy5YRG9tYWluUmVxdWVzdCAmJiAhKCd3aXRoQ3JlZGVudGlhbHMnIGluIChuZXcgWE1MSHR0cFJlcXVlc3QoKSkpKSxcbiAgICB0ZW1wQW5jaG9yID0gbnVsbDtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRlZCBieVxuICogYSBzaW5nbGUgVVJMLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIG5hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd8c3RyaW5nW119IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIGZvciBhdWRpby92aWRlbyBsb2FkcyB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7c3RyaW5nfGJvb2xlYW59IElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IERlZmF1bHQgaXMgdG8gZGV0ZXJtaW5lIGF1dG9tYXRpY2FsbHkuXG4gKiBAcGFyYW0gW29wdGlvbnMubG9hZFR5cGU9UmVzb3VyY2UuTE9BRF9UWVBFLlhIUl0ge1Jlc291cmNlLkxPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW29wdGlvbnMubWV0YWRhdGFdIHtvYmplY3R9IEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmUuXG4gKi9cbmZ1bmN0aW9uIFJlc291cmNlKG5hbWUsIHVybCwgb3B0aW9ucykge1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBuYW1lIGFuZCB1cmwgYXJlIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgYSByZXNvdXJjZS4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdXJsIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgdXJsIGlzIGEgZGF0YSB1cmwuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNEYXRhVXJsID0gdGhpcy51cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnl9XG4gICAgICovXG4gICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jcm9zc09yaWdpbiA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnYW5vbnltb3VzJyA6IG9wdGlvbnMuY3Jvc3NPcmlnaW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIG9mIGxvYWRpbmcgdG8gdXNlIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2UuTE9BRF9UWVBFfVxuICAgICAqL1xuICAgIHRoaXMubG9hZFR5cGUgPSBvcHRpb25zLmxvYWRUeXBlIHx8IHRoaXMuX2RldGVybWluZUxvYWRUeXBlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSB1c2VkIHRvIGxvYWQgdGhlIHJlc291cmNlIHZpYSBYSFIuIElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy54aHJUeXBlID0gb3B0aW9ucy54aHJUeXBlO1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgaW5mbyBmb3IgbWlkZGxld2FyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgd2hpbGUgbG9hZGluZyAoaWYgYW55KS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Vycm9yfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFhIUiBvYmplY3QgdGhhdCB3YXMgdXNlZCB0byBsb2FkIHRoaXMgcmVzb3VyY2UuIFRoaXMgaXMgb25seSBzZXRcbiAgICAgKiB3aGVuIGBsb2FkVHlwZWAgaXMgYFJlc291cmNlLkxPQURfVFlQRS5YSFJgLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7WE1MSHR0cFJlcXVlc3R9XG4gICAgICovXG4gICAgdGhpcy54aHIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBqc29uLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0pzb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgeG1sLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1htbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhbiBpbWFnZSB0YWcuIE9ubHkgdmFsaWQgYWZ0ZXIgdGhlIHJlc291cmNlXG4gICAgICogaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gYXVkaW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0F1ZGlvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGEgdmlkZW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1ZpZGVvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGRlcXVldWVgIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBhIHN0b3JhZ2UgcGxhY2UgZm9yIHRoZSBhc3luYyBxdWV1ZSBkZXF1ZXVlIG1ldGhvZFxuICAgICAqIHVzZWQgcHJpdmF0ZWx5IGJ5IHRoZSBsb2FkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2RlcXVldWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBjb21wbGV0ZWAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kQ29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkVycm9yYCBmdW5jdGlvbiBib3VuZCB0byB0aGlzIHJlc291cmNlJ3MgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25Qcm9ncmVzc2AgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyA9IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcblxuICAgIC8vIHhociBjYWxsYmFja3NcbiAgICB0aGlzLl9ib3VuZFhock9uRXJyb3IgPSB0aGlzLl94aHJPbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYaHJPbkFib3J0ID0gdGhpcy5feGhyT25BYm9ydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25Mb2FkID0gdGhpcy5feGhyT25Mb2FkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYZHJPblRpbWVvdXQgPSB0aGlzLl94ZHJPblRpbWVvdXQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcmVzb3VyY2UgYmVpbmdzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGVhY2ggdGltZSBwcm9ncmVzcyBvZiB0aGlzIHJlc291cmNlIGxvYWQgdXBkYXRlcy5cbiAgICAgKiBOb3QgYWxsIHJlc291cmNlcyB0eXBlcyBhbmQgbG9hZGVyIHN5c3RlbXMgY2FuIHN1cHBvcnQgdGhpcyBldmVudFxuICAgICAqIHNvIHNvbWV0aW1lcyBpdCBtYXkgbm90IGJlIGF2YWlsYWJsZS4gSWYgdGhlIHJlc291cmNlXG4gICAgICogaXMgYmVpbmcgbG9hZGVkIG9uIGEgbW9kZXJuIGJyb3dzZXIsIHVzaW5nIFhIUiwgYW5kIHRoZSByZW1vdGUgc2VydmVyXG4gICAgICogcHJvcGVybHkgc2V0cyBDb250ZW50LUxlbmd0aCBoZWFkZXJzLCB0aGVuIHRoaXMgd2lsbCBiZSBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcHJvZ3Jlc3NcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgdGhpcyByZXNvdXJjZSBoYXMgbG9hZGVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaXQgd2lsbFxuICAgICAqIGJlIGluIHRoZSBgZXJyb3JgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xufVxuXG5SZXNvdXJjZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVzb3VyY2U7XG5tb2R1bGUuZXhwb3J0cyA9IFJlc291cmNlO1xuXG4vKipcbiAqIE1hcmtzIHRoZSByZXNvdXJjZSBhcyBjb21wbGV0ZS5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgaW4gYSB3cmFwcGVyIG9yIHNvbWV0aGluZy4uLmdyb3NzLi4uLlxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICAgIGlmICh0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvcik7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIub25lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25wcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbmxvYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBLaWNrcyBvZmYgbG9hZGluZyBvZiB0aGlzIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBzdGFydFxuICogQHBhcmFtIFtjYWxsYmFja10ge2Z1bmN0aW9ufSBPcHRpb25hbCBjYWxsYmFjayB0byBjYWxsIG9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBpZiBhIGNhbGxiYWNrIGlzIHNldCwgbGlzdGVuIGZvciBjb21wbGV0ZSBldmVudFxuICAgIGlmIChjYikge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4gPT09IGZhbHNlIHx8IHR5cGVvZiB0aGlzLmNyb3NzT3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdGhpcy5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4odGhpcy51cmwpO1xuICAgIH1cblxuICAgIHN3aXRjaCh0aGlzLmxvYWRUeXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEltYWdlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5BVURJTzpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuVklERU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlhIUjpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh1c2VYZHIgJiYgdGhpcy5jcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYZHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYaHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gSW1hZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuc3JjID0gdGhpcy51cmw7XG5cbiAgICB0aGlzLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEhUTUxBdWRpb0VsZW1lbnQgb3IgSFRNTFZpZGVvRWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJyAmJiB0eXBlb2YgQXVkaW8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBBdWRpbygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgJyArIHR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBDb2Nvb25KUyBDYW52YXMrIHJ1bnRpbWUsIGxhY2tzIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zcmMgPSBBcnJheS5pc0FycmF5KHRoaXMudXJsKSA/IHRoaXMudXJsWzBdIDogdGhpcy51cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51cmwubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWydpcycgKyB0eXBlWzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKV0gPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuXG4gICAgdGhpcy5kYXRhLmxvYWQoKTtcbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gWE1MSHR0cFJlcXVlc3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGhyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIHNldCB0aGUgcmVxdWVzdCB0eXBlIGFuZCB1cmxcbiAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gbG9hZCBqc29uIGFzIHRleHQgYW5kIHBhcnNlIGl0IG91cnNlbHZlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHNvbWUgYnJvd3NlcnNcbiAgICAvLyAqY291Z2gqIHNhZmFyaSAqY291Z2gqIGNhbid0IGRlYWwgd2l0aCBpdC5cbiAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OIHx8IHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gdGhpcy54aHJUeXBlO1xuICAgIH1cblxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvciwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQsIGZhbHNlKTtcblxuICAgIHhoci5zZW5kKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhEb21haW5SZXF1ZXN0LiBUaGlzIGlzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHN1cHBvcnQgSUU5IChncm9zcykuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGRyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGRyID0gdGhpcy54aHIgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcblxuICAgIC8vIFhEb21haW5SZXF1ZXN0IGhhcyBhIGZldyBxdWlya3MuIE9jY2FzaW9uYWxseSBpdCB3aWxsIGFib3J0IHJlcXVlc3RzXG4gICAgLy8gQSB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBtYWtlIHN1cmUgQUxMIGNhbGxiYWNrcyBhcmUgc2V0IGV2ZW4gaWYgbm90IHVzZWRcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTc4Njk2Ni94ZG9tYWlucmVxdWVzdC1hYm9ydHMtcG9zdC1vbi1pZS05XG4gICAgeGRyLnRpbWVvdXQgPSA1MDAwO1xuXG4gICAgeGRyLm9uZXJyb3IgPSB0aGlzLl9ib3VuZFhock9uRXJyb3I7XG4gICAgeGRyLm9udGltZW91dCA9IHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0O1xuICAgIHhkci5vbnByb2dyZXNzID0gdGhpcy5fYm91bmRPblByb2dyZXNzO1xuICAgIHhkci5vbmxvYWQgPSB0aGlzLl9ib3VuZFhock9uTG9hZDtcblxuICAgIHhkci5vcGVuKCdHRVQnLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyAgTm90ZTogVGhlIHhkci5zZW5kKCkgY2FsbCBpcyB3cmFwcGVkIGluIGEgdGltZW91dCB0byBwcmV2ZW50IGFuIGlzc3VlIHdpdGggdGhlIGludGVyZmFjZSB3aGVyZSBzb21lIHJlcXVlc3RzIGFyZSBsb3N0XG4gICAgLy8gIGlmIG11bHRpcGxlIFhEb21haW5SZXF1ZXN0cyBhcmUgYmVpbmcgc2VudCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIC8vIFNvbWUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2lzc3Vlcy8xMjQ4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHhkci5zZW5kKCk7XG4gICAgfSwgMCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzb3VyY2UgdXNlZCBpbiBsb2FkaW5nIHZpYSBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB0eXBlIHtzdHJpbmd9IFRoZSBlbGVtZW50IHR5cGUgKHZpZGVvIG9yIGF1ZGlvKS5cbiAqIEBwYXJhbSB1cmwge3N0cmluZ30gVGhlIHNvdXJjZSBVUkwgdG8gbG9hZCBmcm9tLlxuICogQHBhcmFtIFttaW1lXSB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIG9mIHRoZSB2aWRlb1xuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9jcmVhdGVTb3VyY2UgPSBmdW5jdGlvbiAodHlwZSwgdXJsLCBtaW1lKSB7XG4gICAgaWYgKCFtaW1lKSB7XG4gICAgICAgIG1pbWUgPSB0eXBlICsgJy8nICsgdXJsLnN1YnN0cih1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSB1cmw7XG4gICAgc291cmNlLnR5cGUgPSBtaW1lO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBlcnJvcnMgb3V0LlxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBlcnJvciBldmVudCBmcm9tIHRoZSBlbGVtZW50IHRoYXQgZW1pdHMgaXQuXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX29uRXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBlbGVtZW50IHVzaW5nICcgKyBldmVudC50YXJnZXQubm9kZU5hbWUpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBwcm9ncmVzcyBldmVudCBmaXJlcyBmb3IgeGhyL3hkci5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vblByb2dyZXNzID0gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB0aGlzLCBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYW4gZXJyb3IgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEVycm9yRXZlbnR8RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgcmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgZmFpbGVkLiAnICtcbiAgICAgICAgJ1N0YXR1czogJyArIHRoaXMueGhyLnN0YXR1cyArICcsIHRleHQ6IFwiJyArIHRoaXMueGhyLnN0YXR1c1RleHQgKyAnXCInXG4gICAgKTtcblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGFib3J0IGV2ZW50IGZpcmVzIGZvciB4aHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEFib3J0RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB3YXMgYWJvcnRlZCBieSB0aGUgdXNlci4nKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIHRpbWVvdXQgZXZlbnQgZmlyZXMgZm9yIHhkci5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94ZHJPblRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB0aW1lZCBvdXQuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBkYXRhIHN1Y2Nlc3NmdWxseSBsb2FkcyBmcm9tIGFuIHhoci94ZHIgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0TG9hZEV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHhociA9IHRoaXMueGhyLFxuICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzICE9PSB1bmRlZmluZWQgPyB4aHIuc3RhdHVzIDogMjAwOyAvL1hEUiBoYXMgbm8gYC5zdGF0dXNgLCBhc3N1bWUgMjAwLlxuXG4gICAgLy8gc3RhdHVzIGNhbiBiZSAwIHdoZW4gdXNpbmcgdGhlIGZpbGU6Ly8gcHJvdG9jb2wsIGFsc28gY2hlY2sgaWYgYSByZXNwb25zZSB3YXMgZm91bmRcbiAgICBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDQgfHwgKHN0YXR1cyA9PT0gMCAmJiB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIC8vIGlmIHRleHQsIGp1c3QgcmV0dXJuIGl0XG4gICAgICAgIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYganNvbiwgcGFyc2UgaW50byBqc29uIG9iamVjdFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT04pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSnNvbiA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIGpzb246JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgeG1sLCBwYXJzZSBpbnRvIGFuIHhtbCBkb2N1bWVudCBvciBkaXYgZWxlbWVudFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkaXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNYbWwgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSBsb2FkZWQgeG1sOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyIHR5cGVzIGp1c3QgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdbJyArIHhoci5zdGF0dXMgKyAnXScgKyB4aHIuc3RhdHVzVGV4dCArICc6JyArIHhoci5yZXNwb25zZVVSTCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gcmVxVHlwZSh4aHIpIHtcbiAgICByZXR1cm4geGhyLnRvU3RyaW5nKCkucmVwbGFjZSgnb2JqZWN0ICcsICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGZvciB0aGlzIHJlc291cmNlIGJhc2VkIG9uIGlmIHRoZSB1cmxcbiAqIGZvciB0aGlzIHJlc291cmNlIGlzIGNyb3NzLW9yaWdpbi4gSWYgY3Jvc3NPcmlnaW4gd2FzIG1hbnVhbGx5IHNldCwgdGhpc1xuICogZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgdG8gdGVzdC5cbiAqIEBwYXJhbSBbbG9jYXRpb249d2luZG93LmxvY2F0aW9uXSB7b2JqZWN0fSBUaGUgbG9jYXRpb24gb2JqZWN0IHRvIHRlc3QgYWdhaW5zdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNyb3NzT3JpZ2luIHZhbHVlIHRvIHVzZSAob3IgZW1wdHkgc3RyaW5nIGZvciBub25lKS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVDcm9zc09yaWdpbiA9IGZ1bmN0aW9uICh1cmwsIGxvYykge1xuICAgIC8vIGRhdGE6IGFuZCBqYXZhc2NyaXB0OiB1cmxzIGFyZSBjb25zaWRlcmVkIHNhbWUtb3JpZ2luXG4gICAgaWYgKHVybC5pbmRleE9mKCdkYXRhOicpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGlzIHdpbmRvdy5sb2NhdGlvblxuICAgIGxvYyA9IGxvYyB8fCB3aW5kb3cubG9jYXRpb247XG5cbiAgICBpZiAoIXRlbXBBbmNob3IpIHtcbiAgICAgICAgdGVtcEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG5cbiAgICAvLyBsZXQgdGhlIGJyb3dzZXIgZGV0ZXJtaW5lIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSB1cmwgb2YgdGhpcyByZXNvdXJjZSBhbmQgdGhlblxuICAgIC8vIHBhcnNlIHdpdGggdGhlIG5vZGUgdXJsIGxpYiwgd2UgY2FuJ3QgdXNlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICAgIC8vIGJlY2F1c2UgdGhleSBkb24ndCB3b3JrIGluIElFOSA6KFxuICAgIHRlbXBBbmNob3IuaHJlZiA9IHVybDtcbiAgICB1cmwgPSBfdXJsLnBhcnNlKHRlbXBBbmNob3IuaHJlZik7XG5cbiAgICB2YXIgc2FtZVBvcnQgPSAoIXVybC5wb3J0ICYmIGxvYy5wb3J0ID09PSAnJykgfHwgKHVybC5wb3J0ID09PSBsb2MucG9ydCk7XG5cbiAgICAvLyBpZiBjcm9zcyBvcmlnaW5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9PSBsb2MuaG9zdG5hbWUgfHwgIXNhbWVQb3J0IHx8IHVybC5wcm90b2NvbCAhPT0gbG9jLnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiAnYW5vbnltb3VzJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlc3BvbnNlVHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZVxuICogcmVzb3VyY2UgYmVpbmcgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHJlc3BvbnNlVHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lWGhyVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX3hoclR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZUxvYWRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZXNvdXJjZS5fbG9hZFR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLkxPQURfVFlQRS5YSFI7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2dldEV4dGVuc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcy51cmwsXG4gICAgICAgIGV4dDtcblxuICAgIGlmICh0aGlzLmlzRGF0YVVybCkge1xuICAgICAgICB2YXIgc2xhc2hJbmRleCA9IHVybC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGV4dCA9IHVybC5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEsIHVybC5pbmRleE9mKCc7Jywgc2xhc2hJbmRleCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXJ5U3RhcnQgPSB1cmwuaW5kZXhPZignPycpO1xuICAgICAgICBpZiAocXVlcnlTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dDtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWltZSB0eXBlIG9mIGFuIFhIUiByZXF1ZXN0IGJhc2VkIG9uIHRoZSByZXNwb25zZVR5cGUgb2ZcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIHRvIHVzZS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRNaW1lRnJvbVhoclR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1iaW5hcnknO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vYmxvYic7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veG1sJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT046XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVDpcbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUOlxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcblxuICAgIH1cbn07XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxvYWRpbmcgYSByZXNvdXJjZSBjYW4gdXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IExPQURfVFlQRVxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5YSFIgLSBVc2VzIFhNTEh0dHBSZXF1ZXN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5JTUFHRSAtIFVzZXMgYW4gYEltYWdlYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLkFVRElPIC0gVXNlcyBhbiBgQXVkaW9gIG9iamVjdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuVklERU8gLSBVc2VzIGEgYFZpZGVvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlLkxPQURfVFlQRSA9IHtcbiAgICBYSFI6ICAgIDEsXG4gICAgSU1BR0U6ICAyLFxuICAgIEFVRElPOiAgMyxcbiAgICBWSURFTzogIDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVBRFlfU1RBVEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuVU5TRU5UIC0gb3BlbigpaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLk9QRU5FRCAtIHNlbmQoKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5IRUFERVJTX1JFQ0VJVkVEIC0gc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIGhlYWRlcnMgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5MT0FESU5HIC0gRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLkRPTkUgLSBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5SZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEUgPSB7XG4gICAgVU5TRU5UOiAwLFxuICAgIE9QRU5FRDogMSxcbiAgICBIRUFERVJTX1JFQ0VJVkVEOiAyLFxuICAgIExPQURJTkc6IDMsXG4gICAgRE9ORTogNFxufTtcblxuLyoqXG4gKiBUaGUgWEhSIHJlYWR5IHN0YXRlcywgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IFhIUl9SRVNQT05TRV9UWVBFXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVCAtIGRlZmF1bHRzIHRvIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVIgLSBBcnJheUJ1ZmZlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkJMT0IgLSBCbG9iXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQgLSBEb2N1bWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkpTT04gLSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5URVhUIC0gU3RyaW5nXG4gKi9cblJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFID0ge1xuICAgIERFRkFVTFQ6ICAgICd0ZXh0JyxcbiAgICBCVUZGRVI6ICAgICAnYXJyYXlidWZmZXInLFxuICAgIEJMT0I6ICAgICAgICdibG9iJyxcbiAgICBET0NVTUVOVDogICAnZG9jdW1lbnQnLFxuICAgIEpTT046ICAgICAgICdqc29uJyxcbiAgICBURVhUOiAgICAgICAndGV4dCdcbn07XG5cblJlc291cmNlLl9sb2FkVHlwZU1hcCA9IHtcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3BuZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZWcnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3dlYnAnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRVxufTtcblxuUmVzb3VyY2UuX3hoclR5cGVNYXAgPSB7XG4gICAgLy8geG1sXG4gICAgJ3hodG1sJzogICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bWwnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3htbCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RteCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RzeCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3N2Zyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG5cbiAgICAvLyBpbWFnZXNcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2JtcCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RnYSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcblxuICAgIC8vIGpzb25cbiAgICAnanNvbic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OLFxuXG4gICAgLy8gdGV4dFxuICAgICd0ZXh0JzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQsXG4gICAgJ3R4dCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsb2FkIHR5cGUgdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGV4dG5hbWUge3N0cmluZ30gVGhlIGV4dGVuc2lvbiB0byBzZXQgdGhlIHR5cGUgZm9yLCBlLmcuIFwicG5nXCIgb3IgXCJmbnRcIlxuICogQHBhcmFtIGxvYWRUeXBlIHtSZXNvdXJjZS5MT0FEX1RZUEV9IFRoZSBsb2FkIHR5cGUgdG8gc2V0IGl0IHRvLlxuICovXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25Mb2FkVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCBsb2FkVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5fbG9hZFR5cGVNYXAsIGV4dG5hbWUsIGxvYWRUeXBlKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSB4aHJUeXBlIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHhociB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCB4aHJUeXBlKSB7XG4gICAgc2V0RXh0TWFwKFJlc291cmNlLl94aHJUeXBlTWFwLCBleHRuYW1lLCB4aHJUeXBlKTtcbn07XG5cbmZ1bmN0aW9uIHNldEV4dE1hcChtYXAsIGV4dG5hbWUsIHZhbCkge1xuICAgIGlmIChleHRuYW1lICYmIGV4dG5hbWUuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgIGV4dG5hbWUgPSBleHRuYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dG5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hcFtleHRuYW1lXSA9IHZhbDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICAgIF9rZXlTdHI6IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIixcblxuICAgIGVuY29kZUJpbmFyeTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBcIlwiO1xuICAgICAgICB2YXIgYnl0ZWJ1ZmZlcjtcbiAgICAgICAgdmFyIGVuY29kZWRDaGFySW5kZXhlcyA9IG5ldyBBcnJheSg0KTtcbiAgICAgICAgdmFyIGlueCA9IDA7XG4gICAgICAgIHZhciBqbnggPSAwO1xuICAgICAgICB2YXIgcGFkZGluZ0J5dGVzID0gMDtcblxuICAgICAgICB3aGlsZSAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBGaWxsIGJ5dGUgYnVmZmVyIGFycmF5XG4gICAgICAgICAgICBieXRlYnVmZmVyID0gbmV3IEFycmF5KDMpO1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBieXRlYnVmZmVyLmxlbmd0aDsgam54KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGF3YXkgaGlnaC1vcmRlciBieXRlLCBhcyBkb2N1bWVudGVkIGF0OlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdCNIYW5kbGluZ19iaW5hcnlfZGF0YVxuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSBpbnB1dC5jaGFyQ29kZUF0KGlueCsrKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGVhY2ggZW5jb2RlZCBjaGFyYWN0ZXIsIDYgYml0cyBhdCBhIHRpbWVcbiAgICAgICAgICAgIC8vIGluZGV4IDE6IGZpcnN0IDYgYml0c1xuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzBdID0gYnl0ZWJ1ZmZlclswXSA+PiAyO1xuICAgICAgICAgICAgLy8gaW5kZXggMjogc2Vjb25kIDYgYml0cyAoMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAxICsgNCBtb3N0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBieXRlIDIpXG4gICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMV0gPSAoKGJ5dGVidWZmZXJbMF0gJiAweDMpIDw8IDQpIHwgKGJ5dGVidWZmZXJbMV0gPj4gNCk7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiB0aGlyZCA2IGJpdHMgKDQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMiArIDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gKChieXRlYnVmZmVyWzFdICYgMHgwZikgPDwgMikgfCAoYnl0ZWJ1ZmZlclsyXSA+PiA2KTtcbiAgICAgICAgICAgIC8vIGluZGV4IDM6IGZvcnRoIDYgYml0cyAoNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gYnl0ZWJ1ZmZlclsyXSAmIDB4M2Y7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHBhZGRpbmcgaGFwcGVuZWQsIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgIHBhZGRpbmdCeXRlcyA9IGlueCAtIChpbnB1dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFkZGluZ0J5dGVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCAyIGNoYXJhY3RlcnMgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMl0gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBsYXN0IGNoYXJhY3RlciB0byBwYWRkaW5nIGNoYXJcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vIHBhZGRpbmcgLSBwcm9jZWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vdyB3ZSB3aWxsIGdyYWIgZWFjaCBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgb3V0IG9mIG91ciBrZXlzdHJpbmdcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIG91ciBpbmRleCBhcnJheSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQgc3RyaW5nXG4gICAgICAgICAgICBmb3IgKGpueCA9IDA7IGpueCA8IGVuY29kZWRDaGFySW5kZXhlcy5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHRoaXMuX2tleVN0ci5jaGFyQXQoZW5jb2RlZENoYXJJbmRleGVzW2pueF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9Mb2FkZXInKTtcblxubW9kdWxlLmV4cG9ydHMuUmVzb3VyY2UgPSByZXF1aXJlKCcuL1Jlc291cmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzLm1pZGRsZXdhcmUgPSB7XG4gICAgY2FjaGluZzoge1xuICAgICAgICBtZW1vcnk6IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnknKVxuICAgIH0sXG4gICAgcGFyc2luZzoge1xuICAgICAgICBibG9iOiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL3BhcnNpbmcvYmxvYicpXG4gICAgfVxufTtcbiIsIi8vIGEgc2ltcGxlIGluLW1lbW9yeSBjYWNoZSBmb3IgcmVzb3VyY2VzXG52YXIgY2FjaGUgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICAvLyBpZiBjYWNoZWQsIHRoZW4gc2V0IGRhdGEgYW5kIGNvbXBsZXRlIHRoZSByZXNvdXJjZVxuICAgICAgICBpZiAoY2FjaGVbcmVzb3VyY2UudXJsXSkge1xuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IGNhY2hlW3Jlc291cmNlLnVybF07XG4gICAgICAgICAgICByZXNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIG5vdCBjYWNoZWQsIHdhaXQgZm9yIGNvbXBsZXRlIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb3VyY2Uub25jZSgnY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICBjYWNoZVt0aGlzLnVybF0gPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgnLi4vLi4vUmVzb3VyY2UnKSxcbiAgICBiNjQgPSByZXF1aXJlKCcuLi8uLi9iNjQnKTtcblxud2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblxuLy8gYSBtaWRkbGV3YXJlIGZvciB0cmFuc2Zvcm1pbmcgWEhSIGxvYWRlZCBCbG9icyBpbnRvIG1vcmUgdXNlZnVsIG9iamVjdHNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIHdhcyBhbiBYSFIgbG9hZCBvZiBhIGJsb2JcbiAgICAgICAgaWYgKHJlc291cmNlLnhociAmJiByZXNvdXJjZS54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBibG9iIHN1cHBvcnQgd2UgcHJvYmFibHkgZ290IGEgYmluYXJ5IHN0cmluZyBiYWNrXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5CbG9iIHx8IHR5cGVvZiByZXNvdXJjZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVzb3VyY2UueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaW1hZ2UsIGNvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgaW50byBhIGRhdGEgdXJsXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgdHlwZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5zcmMgPSAnZGF0YTonICsgdHlwZSArICc7YmFzZTY0LCcgKyBiNjQuZW5jb2RlQmluYXJ5KHJlc291cmNlLnhoci5yZXNwb25zZVRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGltYWdlIGxvYWRzIGFuZCB0aGVuIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5vbmxvYWQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY29udGVudCB0eXBlIHNheXMgdGhpcyBpcyBhbiBpbWFnZSwgdGhlbiB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBibG9iIGludG8gYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvdXJjZS5kYXRhLnR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlc291cmNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuYmxvYiA9IHJlc291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gc3JjO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuaXNJbWFnZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBubyBsb25nZXIgdXNlZCBibG9iIGFmdGVyIHRoZSBpbWFnZSBsb2Fkc1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJwaXhpLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMC4xMC1kZXZcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlBpeGkuanMgaXMgYSBmYXN0IGxpZ2h0d2VpZ2h0IDJEIGxpYnJhcnkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGRldmljZXMuXCIsXG4gIFwiYXV0aG9yXCI6IFwiTWF0IEdyb3Zlc1wiLFxuICBcImNvbnRyaWJ1dG9yc1wiOiBbXG4gICAgXCJDaGFkIEVuZ2xlciA8Y2hhZEBwYW50aGVyZGV2LmNvbT5cIixcbiAgICBcIlJpY2hhcmQgRGF2ZXkgPHJkYXZleUBnbWFpbC5jb20+XCJcbiAgXSxcbiAgXCJtYWluXCI6IFwiLi9zcmMvaW5kZXguanNcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHA6Ly9nb29kYm95ZGlnaXRhbC5jb20vXCIsXG4gIFwiYnVnc1wiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXNcIixcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiZ3VscCAmJiBndWxwIHdhdGNoXCIsXG4gICAgXCJ0ZXN0XCI6IFwiZ3VscCAmJiB0ZXN0ZW0gY2lcIixcbiAgICBcImJ1aWxkXCI6IFwiZ3VscFwiLFxuICAgIFwiZG9jc1wiOiBcImpzZG9jIC1jIC4vZ3VscC91dGlsL2pzZG9jLmNvbmYuanNvbiAtUiBSRUFETUUubWRcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpbi9cIixcbiAgICBcInNyYy9cIixcbiAgICBcIkNPTlRSSUJVVElORy5tZFwiLFxuICAgIFwiTElDRU5TRVwiLFxuICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgXCJSRUFETUUubWRcIlxuICBdLFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhc3luY1wiOiBcIl4xLjUuMFwiLFxuICAgIFwiYnJmc1wiOiBcIl4xLjQuMVwiLFxuICAgIFwiZWFyY3V0XCI6IFwiXjIuMC43XCIsXG4gICAgXCJldmVudGVtaXR0ZXIzXCI6IFwiXjEuMS4xXCIsXG4gICAgXCJnbC1tYXRyaXhcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL3RvamkvZ2wtbWF0cml4LmdpdFwiLFxuICAgIFwib2JqZWN0LWFzc2lnblwiOiBcIl40LjAuMVwiLFxuICAgIFwicGl4aS1nbC1jb3JlXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9Hb29kQm95RGlnaXRhbC9waXhpLWdsLWNvcmUuZ2l0XCIsXG4gICAgXCJyZXNvdXJjZS1sb2FkZXJcIjogXCJeMS42LjRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjExLjEuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4zLjIuMFwiLFxuICAgIFwiZGVsXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOS4wXCIsXG4gICAgXCJndWxwLWNhY2hlZFwiOiBcIl4xLjEuMFwiLFxuICAgIFwiZ3VscC1jb25jYXRcIjogXCJeMi42LjBcIixcbiAgICBcImd1bHAtZGVidWdcIjogXCJeMi4xLjBcIixcbiAgICBcImd1bHAtaGVhZGVyXCI6IFwiXjEuNy4xXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjExLjJcIixcbiAgICBcImd1bHAtbWlycm9yXCI6IFwiXjAuNC4wXCIsXG4gICAgXCJndWxwLXBsdW1iZXJcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtcmVuYW1lXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJndWxwLXNvdXJjZW1hcHNcIjogXCJeMS41LjJcIixcbiAgICBcImd1bHAtdWdsaWZ5XCI6IFwiXjEuNC4xXCIsXG4gICAgXCJndWxwLXV0aWxcIjogXCJeMy4wLjZcIixcbiAgICBcImphZ3VhcmpzLWpzZG9jXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZHNoaW1qcy9qYWd1YXJqcy1qc2RvYy5naXRcIixcbiAgICBcImpzZG9jXCI6IFwiXjMuMy4yXCIsXG4gICAgXCJqc2hpbnQtc3VtbWFyeVwiOiBcIl4wLjQuMFwiLFxuICAgIFwibWluaW1pc3RcIjogXCJeMS4yLjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMy4yXCIsXG4gICAgXCJyZXF1aXJlLWRpclwiOiBcIl4wLjMuMFwiLFxuICAgIFwicnVuLXNlcXVlbmNlXCI6IFwiXjEuMS4yXCIsXG4gICAgXCJ0ZXN0ZW1cIjogXCJeMC45LjRcIixcbiAgICBcInZpbnlsLWJ1ZmZlclwiOiBcIl4xLjAuMFwiLFxuICAgIFwidmlueWwtc291cmNlLXN0cmVhbVwiOiBcIl4xLjEuMFwiLFxuICAgIFwid2F0Y2hpZnlcIjogXCJeMy40LjBcIlxuICB9LFxuICBcImJyb3dzZXJpZnlcIjoge1xuICAgIFwidHJhbnNmb3JtXCI6IFtcbiAgICAgIFwiYnJmc1wiXG4gICAgXVxuICB9XG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLy8gYWRkIHNvbWUgZXh0cmEgdmFyaWFibGVzIHRvIHRoZSBjb250YWluZXIuLlxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpXG4pO1xuXG5cbi8qKlxuICogVGhlIEFjY2Vzc2liaWxpdHkgbWFuYWdlciByZWFjcmVhdGVzIHRoZSBhYmlsaXR5IHRvIHRhYiBhbmQgYW5kIGhhdmUgY29udGVudCByZWFkIGJ5IHNjcmVlbiByZWFkZXJzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGFzIGl0IGNhbiBwb3NzaWJseSBoZWxwIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyBhY2Nlc3MgcGl4aSBjb250ZW50LlxuICogTXVjaCBsaWtlIGludGVyYWN0aW9uIGFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBtYWRlIGFjY2Vzc2libGUuIFRoaXMgbWFuYWdlciB3aWxsIG1hcCB0aGUgZXZlbnRzIGFzIGlmIHRoZSBtb3VzZSB3YXMgYmVpbmcgdXNlZCwgbWluaW1pemluZyB0aGUgZWZmZXJvdCByZXF1aXJlZCB0byBpbXBsZW1lbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqL1xuZnVuY3Rpb24gQWNjZXNzaWJpbGl0eU1hbmFnZXIocmVuZGVyZXIpXG57XG5cdC8vIGZpcnN0IHdlIGNyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFxuICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUubGVmdCA9IDA7XG4gICAvL1xuICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuICAgXHRcbiAgIFx0LyoqXG4gICBcdCAqIFRoaXMgaXMgdGhlIGRvbSBlbGVtZW50IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gICBcdHRoaXMuZGl2ID0gZGl2O1xuXG4gICBcdC8qKlxuICAgXHQgKiBBIHNpbXBsZSBwb29sIGZvciBzdG9yaW5nIGRpdnMuXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7QXJyYXl9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuIFx0dGhpcy5wb29sID0gW107XG5cbiBcdC8qKlxuIFx0ICogVGhpcyBpcyBhIHRpY2sgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHJlbmRlcmVkLlxuIFx0ICogXG4gXHQgKiBAdHlwZSB7TnVtYmVyfVxuIFx0ICogQHByaXZhdGVcbiBcdCAqL1xuICAgXHR0aGlzLnJlbmRlcklkID0gMDtcblxuICAgXHQvKipcbiAgIFx0ICogU2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB2aXN1YWxseSBzaG93IHRoZSBkaXZzXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgIFx0ICovXG4gICBcdHRoaXMuZGVidWcgPSBmYWxzZTtcblxuICBcdC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGFjY2Vzc2liaWxpdHkgbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgIFx0LyoqXG4gICAgICogVGhlIGFycmF5IG9mIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzaWJsZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHByZSBiaW5kIHRoZSBmdW5jdGlvbnMuLlxuICAgICAqL1xuICAgXHR0aGlzLl9vbktleURvd24gPSB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKTtcbiAgIFx0dGhpcy5fb25Nb3VzZU1vdmUgPSB0aGlzLl9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogc3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFuYWdlci4gSWYgdGhlcmUgYXJlIG5vIGFjY2Vzc2libGUgb2JqZWN0cyBvciB0aGUgbW91c2UgaXMgbW92aW5nIHRoZSB3aWxsIGJlIGZhbHNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cbiAgIFx0Ly8gbGV0IGxpc3RlbiBmb3IgdGFiLi4gb25jZSBwcmVzc2VkIHdlIGNhbiBmaXJlIHVwIGFuZCBzaG93IHRoZSBhY2Nlc3NpYmlsaXR5IGxheWVyXG4gICBcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG59XG5cblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xuXG4vKipcbiAqIEFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBzaG93bi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgcHJlc2VzIHRoZSB0YWIga2V5XG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHRydWUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub24oJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cblx0dGhpcy5yZW5kZXJlci52aWV3LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5kaXYpO1x0XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIGhpZGRlbi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgbW92ZXMgdGhlIG1vdXNlXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYoIXRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9mZigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlKTtcblxuXHR0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcblxufTtcblxuLyoqXG4gKiBUaGlzIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aWxsIHJ1biB0aHJvdWdodCBoZSBzY2VuZSBncmFwaCBhbmQgYWRkIGFueSBuZXcgYWNjZXNzaWJsZSBvYmplY3RzIHRvIHRoZSBET00gbGF5ZXIuXG4gKiBAcGFyYW0gZWxlbWVudCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgRGlzcGxheU9iamVjdCB0byBjaGVjay5cbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG5cdGlmKCFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZihkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGUgJiYgZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcblx0e1xuXHRcdGlmKCFkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlKVxuXHRcdHtcblx0XHRcdHRoaXMuYWRkQ2hpbGQoZGlzcGxheU9iamVjdCk7XG5cdFx0fVxuXHQgICBcdFxuXHQgICBcdGRpc3BsYXlPYmplY3QucmVuZGVySWQgPSB0aGlzLnJlbmRlcklkO1xuXHR9XG5cblx0dmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcblxuXHRmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcblx0XHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKGNoaWxkcmVuW2ldKTtcblx0fVxufTtcblxuXG4vKipcbiAqIEJlZm9yZSBlYWNoIHJlbmRlciB0aGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGRpdnMgYXJlIG1hcHBlZCBjb3JyZWN0bHkgdG8gdGhlaXIgRGlzcGxheU9iamVjdHNcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpXG57XG5cblx0Ly8gdXBkYXRlIGNoaWxkcmVuLi4uXG5cdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHModGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkKTtcblxuXHR2YXIgcmVjdCA9IHRoaXMucmVuZGVyZXIudmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0dmFyIHN4ID0gcmVjdC53aWR0aCAgLyB0aGlzLnJlbmRlcmVyLndpZHRoO1xuXHR2YXIgc3kgPSByZWN0LmhlaWdodCAvIHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuXG5cdHZhciBkaXYgPSB0aGlzLmRpdjtcblxuXHRkaXYuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICdweCc7XG5cdGRpdi5zdHlsZS50b3AgPSByZWN0LnRvcCArICdweCc7XG5cdGRpdi5zdHlsZS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggKyAncHgnO1xuXHRkaXYuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgKyAncHgnO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuXHRcdGlmKGNoaWxkLnJlbmRlcklkICE9PSB0aGlzLnJlbmRlcklkKVxuXHRcdHtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaSwgMSk7XG5cdFx0XHR0aGlzLmRpdi5yZW1vdmVDaGlsZCggY2hpbGQuX2FjY2Vzc2libGVEaXYgKTtcblx0XHRcdHRoaXMucG9vbC5wdXNoKGNoaWxkLl9hY2Nlc3NpYmxlRGl2KTtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlRGl2ID0gbnVsbDtcblxuXHRcdFx0aS0tO1xuXG5cdFx0XHRpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBtYXAgZGl2IHRvIGRpc3BsYXkuLlxuXHRcdFx0ZGl2ID0gY2hpbGQuX2FjY2Vzc2libGVEaXY7XG5cdFx0XHR2YXIgaGl0QXJlYSA9IGNoaWxkLmhpdEFyZWE7XG5cdFx0XHR2YXIgd3QgPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuXHRcdFx0aWYoY2hpbGQuaGl0QXJlYSlcblx0XHRcdHtcblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoKHd0LnR4ICsgKGhpdEFyZWEueCAqIHd0LmEpKSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKCh3dC50eSArIChoaXRBcmVhLnkgKiB3dC5kKSkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHd0LmEgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogd3QuZCAqIHN5KSArICdweCc7XG5cdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0aGl0QXJlYSA9IGNoaWxkLmdldEJvdW5kcygpO1xuXG5cdFx0XHRcdHRoaXMuY2FwSGl0QXJlYShoaXRBcmVhKTtcblxuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9IChoaXRBcmVhLnggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gIChoaXRBcmVhLnkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiBzeSkgKyAncHgnO1xuXHRcdFx0fVx0XHRcblx0XHR9XG5cdH1cblxuXHQvLyBpbmNyZW1lbnQgdGhlIHJlbmRlciBpZC4uXG5cdHRoaXMucmVuZGVySWQrKztcbn07XG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYXBIaXRBcmVhID0gZnVuY3Rpb24gKGhpdEFyZWEpXG57XG4gICAgaWYgKGhpdEFyZWEueCA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoICs9IGhpdEFyZWEueDtcbiAgICAgICAgaGl0QXJlYS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaGl0QXJlYS55IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ICs9IGhpdEFyZWEueTtcbiAgICAgICAgaGl0QXJlYS55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueCArIGhpdEFyZWEud2lkdGggPiB0aGlzLnJlbmRlcmVyLndpZHRoIClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoIC0gaGl0QXJlYS54O1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS55ICsgaGl0QXJlYS5oZWlnaHQgPiB0aGlzLnJlbmRlcmVyLmhlaWdodCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0IC0gaGl0QXJlYS55O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBBZGRzIGEgRGlzcGxheU9iamVjdCB0byB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuLy9cdHRoaXMuYWN0aXZhdGUoKTtcblx0XG5cdHZhciBkaXYgPSB0aGlzLnBvb2wucG9wKCk7XG5cblx0aWYoIWRpdilcblx0e1xuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBcblxuXHQgICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGVidWcgPyAncmdiYSgyNTUsMCwwLDAuNSknIDogJ3RyYW5zcGFyZW50Jztcblx0ICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdCAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcblx0ICAgIGRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdub25lJztcblxuXHQgICAgXG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX29uRm9jdXNPdXQuYmluZCh0aGlzKSk7XG5cdH1cblx0ICAgXHRcblxuXG5cblx0ZGl2LnRpdGxlID0gZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlVGl0bGUgfHwgJ2Rpc3BsYXlPYmplY3QgJyArIHRoaXMudGFiSW5kZXg7XG5cblx0Ly9cblx0XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUgPSB0cnVlO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ID0gZGl2O1xuXHRkaXYuZGlzcGxheU9iamVjdCA9IGRpc3BsYXlPYmplY3Q7XG5cblxuXHR0aGlzLmNoaWxkcmVuLnB1c2goZGlzcGxheU9iamVjdCk7XG5cdHRoaXMuZGl2LmFwcGVuZENoaWxkKCBkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ICk7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYudGFiSW5kZXggPSBkaXNwbGF5T2JqZWN0LnRhYkluZGV4O1xufTtcblxuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBidXR0b24gcHJlc3MgdG8gcGl4aSdzIEludGVyYWN0aW9uTWFuYWdlciAoY2xpY2spXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnY2xpY2snLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3ZlcilcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1cyA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3V0KVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzT3V0ID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uS2V5RG93biA9IGZ1bmN0aW9uKGUpXG57XG5cdGlmKGUua2V5Q29kZSAhPT0gOSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuYWN0aXZhdGUoKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmUgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZGVhY3RpdmF0ZSgpO1xufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgXG57XG5cdHRoaXMuZGl2ID0gbnVsbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblx0XHR0aGlzLmNoaWxkcmVuW2ldLmRpdiA9IG51bGw7XG5cdH1cblxuXHRcblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuXHRcdFxuXHR0aGlzLnBvb2wgPSBudWxsO1xuXHR0aGlzLmNoaWxkcmVuID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5cbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYWNjZXNzaWJsZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmFjY2Vzc2liaWxpdHkuYWNjZXNzaWJsZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgYWNjZXNzaWJsZVRhcmdldCA9IHtcbiAgICBcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGVUaXRsZTpudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICB0YWJJbmRleDowLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZUFjdGl2ZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVEaXY6ZmFsc2VcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBhY2Nlc3NpYmxlVGFyZ2V0O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgYWNjZXNzaWJpbGl0eSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYWNjZXNzaWJsZVRhcmdldDogICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpLFxuICAgIEFjY2Vzc2liaWxpdHlNYW5hZ2VyOiByZXF1aXJlKCcuL0FjY2Vzc2liaWxpdHlNYW5hZ2VyJylcbn07XG4iLCIvKipcbiAqIENvbnN0YW50IHZhbHVlcyB1c2VkIGluIHBpeGlcbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG52YXIgQ09OU1QgPSB7XG4gICAgLyoqXG4gICAgICogU3RyaW5nIG9mIHRoZSBjdXJyZW50IFBJWEkgdmVyc2lvblxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBWRVJTSU9OXG4gICAgICovXG4gICAgVkVSU0lPTjogcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQSV8yIC0gVHdvIFBpXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFBJXzI6IE1hdGguUEkgKiAyLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJBRF9UT19ERUcgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyByYWRpYW5zIHRvIGRlZ3JlZXNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUkFEX1RPX0RFRzogMTgwIC8gTWF0aC5QSSxcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBERUdfVE9fUkFEIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgZGVncmVlcyB0byByYWRpYW5zXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIERFR19UT19SQUQ6IE1hdGguUEkgLyAxODAsXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgZnJhbWVzIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gVEFSR0VUX0ZQTVM9MC4wNlxuICAgICAqL1xuICAgIFRBUkdFVF9GUE1TOiAwLjA2LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgdG8gaWRlbnRpZnkgdGhlIFJlbmRlcmVyIFR5cGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFJFTkRFUkVSX1RZUEVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuV0VCR0xcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5DQU5WQVNcbiAgICAgKi9cbiAgICBSRU5ERVJFUl9UWVBFOiB7XG4gICAgICAgIFVOS05PV046ICAgIDAsXG4gICAgICAgIFdFQkdMOiAgICAgIDEsXG4gICAgICAgIENBTlZBUzogICAgIDJcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyBibGVuZCBtb2RlcyBzdXBwb3J0ZWQgYnkgUElYSS4gSU1QT1JUQU5UIC0gVGhlIFdlYkdMIHJlbmRlcmVyIG9ubHkgc3VwcG9ydHNcbiAgICAgKiB0aGUgTk9STUFMLCBBREQsIE1VTFRJUExZIGFuZCBTQ1JFRU4gYmxlbmQgbW9kZXMuIEFueXRoaW5nIGVsc2Ugd2lsbCBzaWxlbnRseSBhY3QgbGlrZVxuICAgICAqIE5PUk1BTC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gQkxFTkRfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkFERFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5NVUxUSVBMWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQ1JFRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuT1ZFUkxBWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5EQVJLRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTElHSFRFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9ET0RHRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9CVVJOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhBUkRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU09GVF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5ESUZGRVJFTkNFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkVYQ0xVU0lPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IVUVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0FUVVJBVElPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MVU1JTk9TSVRZXG4gICAgICovXG4gICAgQkxFTkRfTU9ERVM6IHtcbiAgICAgICAgTk9STUFMOiAgICAgICAgIDAsXG4gICAgICAgIEFERDogICAgICAgICAgICAxLFxuICAgICAgICBNVUxUSVBMWTogICAgICAgMixcbiAgICAgICAgU0NSRUVOOiAgICAgICAgIDMsXG4gICAgICAgIE9WRVJMQVk6ICAgICAgICA0LFxuICAgICAgICBEQVJLRU46ICAgICAgICAgNSxcbiAgICAgICAgTElHSFRFTjogICAgICAgIDYsXG4gICAgICAgIENPTE9SX0RPREdFOiAgICA3LFxuICAgICAgICBDT0xPUl9CVVJOOiAgICAgOCxcbiAgICAgICAgSEFSRF9MSUdIVDogICAgIDksXG4gICAgICAgIFNPRlRfTElHSFQ6ICAgICAxMCxcbiAgICAgICAgRElGRkVSRU5DRTogICAgIDExLFxuICAgICAgICBFWENMVVNJT046ICAgICAgMTIsXG4gICAgICAgIEhVRTogICAgICAgICAgICAxMyxcbiAgICAgICAgU0FUVVJBVElPTjogICAgIDE0LFxuICAgICAgICBDT0xPUjogICAgICAgICAgMTUsXG4gICAgICAgIExVTUlOT1NJVFk6ICAgICAxNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIHdlYmdsIGRyYXcgbW9kZXMuIFRoZXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggR0wgZHJhd01vZGUgdG8gdXNlXG4gICAgICogdW5kZXIgY2VydGFpbiBzaXR1YXRpb25zIGFuZCByZW5kZXJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5QT0lOVFNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfTE9PUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX0ZBTlxuICAgICAqL1xuICAgIERSQVdfTU9ERVM6IHtcbiAgICAgICAgUE9JTlRTOiAgICAgICAgIDAsXG4gICAgICAgIExJTkVTOiAgICAgICAgICAxLFxuICAgICAgICBMSU5FX0xPT1A6ICAgICAgMixcbiAgICAgICAgTElORV9TVFJJUDogICAgIDMsXG4gICAgICAgIFRSSUFOR0xFUzogICAgICA0LFxuICAgICAgICBUUklBTkdMRV9TVFJJUDogNSxcbiAgICAgICAgVFJJQU5HTEVfRkFOOiAgIDZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBwaXhpLlxuICAgICAqXG4gICAgICogVGhlIERFRkFVTFQgc2NhbGUgbW9kZSBhZmZlY3RzIHRoZSBkZWZhdWx0IHNjYWxpbmcgbW9kZSBvZiBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAgKiBJdCBjYW4gYmUgcmUtYXNzaWduZWQgdG8gZWl0aGVyIExJTkVBUiBvciBORUFSRVNULCBkZXBlbmRpbmcgdXBvbiBzdWl0YWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0NBTEVfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuREVGQVVMVD1MSU5FQVJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTElORUFSIFNtb290aCBzY2FsaW5nXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLk5FQVJFU1QgUGl4ZWxhdGluZyBzY2FsaW5nXG4gICAgICovXG4gICAgU0NBTEVfTU9ERVM6IHtcbiAgICAgICAgREVGQVVMVDogICAgMCxcbiAgICAgICAgTElORUFSOiAgICAgMCxcbiAgICAgICAgTkVBUkVTVDogICAgMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZml4IHRoYXQgZGVub3RlcyBhIFVSTCBpcyBmb3IgYSByZXRpbmEgYXNzZXRcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gUkVUSU5BX1BSRUZJWFxuICAgICAqL1xuICAgIC8vZXhhbXBsZTogJ0AyeCcsXG4gICAgUkVUSU5BX1BSRUZJWDogL0AoLispeC8sXG5cbiAgICBSRVNPTFVUSU9OOjEsXG5cbiAgICBGSUxURVJfUkVTT0xVVElPTjoxLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgcmVuZGVyIG9wdGlvbnMgaWYgbm9uZSBhcmUgc3VwcGxpZWQgdG8ge0BsaW5rIFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKiBvciB7QGxpbmsgUElYSS5DYW52YXNSZW5kZXJlcn0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERFRkFVTFRfUkVOREVSX09QVElPTlNcbiAgICAgKiBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnZpZXc9bnVsbFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy50cmFuc3BhcmVudD1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hbnRpYWxpYXM9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuZm9yY2VGWEFBPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnJlc29sdXRpb249MVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmF1dG9SZXNpemU9ZmFsc2VcbiAgICAgKi9cbiAgICBERUZBVUxUX1JFTkRFUl9PUFRJT05TOiB7XG4gICAgICAgIHZpZXc6IG51bGwsXG4gICAgICAgIHJlc29sdXRpb246IDEsXG4gICAgICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgICAgIGZvcmNlRlhBQTogZmFsc2UsXG4gICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgIGNsZWFyQmVmb3JlUmVuZGVyOiB0cnVlLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgICAgICByb3VuZFBpeGVsczogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnRzIHRoYXQgaWRlbnRpZnkgc2hhcGVzLCBtYWlubHkgdG8gcHJldmVudCBgaW5zdGFuY2VvZmAgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFU1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUE9MWT0wXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SRUNUPTFcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkNJUkM9MlxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuRUxJUD0zXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SUkVDPTRcbiAgICAgKi9cbiAgICBTSEFQRVM6IHtcbiAgICAgICAgUE9MWTogMCxcbiAgICAgICAgUkVDVDogMSxcbiAgICAgICAgQ0lSQzogMixcbiAgICAgICAgRUxJUDogMyxcbiAgICAgICAgUlJFQzogNFxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBtYXliZSBjaGFuZ2UgdG8gU1BSSVRFLkJBVENIX1NJWkU6IDIwMDBcbiAgICAvLyBUT0RPOiBtYXliZSBhZGQgUEFSVElDTEUuQkFUQ0hfU0laRTogMTUwMDBcbiAgICBTUFJJVEVfQkFUQ0hfU0laRTogMjAwMCAvL25pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSBhbmQgZGVza3RvcCBtYWNoaW5lc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDT05TVDtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gcmVxdWlyZSgnLi9EaXNwbGF5T2JqZWN0JyksXG4gICAgUmVuZGVyVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgQ29udGFpbmVyIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0cy5cbiAqIEl0IGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBkaXNwbGF5IG9iamVjdHMgdGhhdCBhY3QgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIG9iamVjdHMuXG4gKlxuICpgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiBgYGBcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5EaXNwbGF5T2JqZWN0XG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDb250YWluZXIoKVxue1xuICAgIERpc3BsYXlPYmplY3QuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdFtdfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERpc3BsYXlPYmplY3QucHJvdG90eXBlKTtcbkNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5lcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udGFpbmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gMTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIGhlaWdodCA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBPdmVycmlkYWJsZSBtZXRob2QgdGhhdCBjYW4gYmUgdXNlZCBieSBDb250YWluZXIgc3ViY2xhc3NlcyB3aGVuZXZlciB0aGUgY2hpbGRyZW4gYXJyYXkgaXMgbW9kaWZpZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7fTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lci5cbiAqIFxuICogWW91IGNhbiBhbHNvIGFkZCBtdWx0cGxlIGl0ZW1zIGxpa2Ugc286IG15Q29udGFpbmVyLmFkZENoaWxkKHRoaW5rT25lLCB0aGluZ1R3bywgdGhpbmdUaHJlZSlcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBhZGQgdG8gdGhlIGNvbnRhaW5lclxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57IFxuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaGFzIGEgcGFyZW50IHRoZW4gbGV0cyByZW1vdmUgaXQgYXMgUGl4aSBvYmplY3RzIGNhbiBvbmx5IGV4aXN0IGluIG9uZSBwbGFjZVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UodGhpcy5jaGlsZHJlbi5sZW5ndGgtMSk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lciBhdCBhIHNwZWNpZmllZCBpbmRleC4gSWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd25cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRvIGFkZFxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBwbGFjZSB0aGUgY2hpbGQgaW5cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkQXQgPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hpbGQgKyAnYWRkQ2hpbGRBdDogVGhlIGluZGV4ICcrIGluZGV4ICsnIHN1cHBsaWVkIGlzIG91dCBvZiBib3VuZHMgJyArIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiAyIERpc3BsYXkgT2JqZWN0cyB3aXRoaW4gdGhpcyBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKiBAcGFyYW0gY2hpbGQyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc3dhcENoaWxkcmVuID0gZnVuY3Rpb24gKGNoaWxkLCBjaGlsZDIpXG57XG4gICAgaWYgKGNoaWxkID09PSBjaGlsZDIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluZGV4MSA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG4gICAgdmFyIGluZGV4MiA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZDIpO1xuXG4gICAgaWYgKGluZGV4MSA8IDAgfHwgaW5kZXgyIDwgMClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3dhcENoaWxkcmVuOiBCb3RoIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0cyBtdXN0IGJlIGNoaWxkcmVuIG9mIHRoZSBjYWxsZXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDFdID0gY2hpbGQyO1xuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgyXSA9IGNoaWxkO1xuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleDEgPCBpbmRleDIgPyBpbmRleDEgOiBpbmRleDIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBwb3NpdGlvbiBvZiBhIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgdG8gaWRlbnRpZnlcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdCB0byBpZGVudGlmeVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiBhbiBleGlzdGluZyBjaGlsZCBpbiB0aGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIGZvciB3aGljaCB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGluZGV4IG51bWJlclxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSByZXN1bHRpbmcgaW5kZXggbnVtYmVyIGZvciB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuXG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgY3VycmVudEluZGV4LCAxKTsgLy8gcmVtb3ZlIGZyb20gb2xkIHBvc2l0aW9uXG4gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsgLy9hZGQgYXQgbmV3IHBvc2l0aW9uXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBhdFxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgYXQgdGhlIGdpdmVuIGluZGV4LCBpZiBhbnkuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDaGlsZEF0OiBTdXBwbGllZCBpbmRleCAnICsgaW5kZXggKyAnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjaGlsZCBsaXN0LCBvciB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baW5kZXhdO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW1vdmVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIHNwZWNpZmllZCBpbmRleCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgZnJvbVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIHZhciBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRBdChpbmRleCk7XG5cbiAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIGNvbnRhaW5lciB0aGF0IGFyZSB3aXRoaW4gdGhlIGJlZ2luIGFuZCBlbmQgaW5kZXhlcy5cbiAqXG4gKiBAcGFyYW0gYmVnaW5JbmRleCB7bnVtYmVyfSBUaGUgYmVnaW5uaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gKiBAcGFyYW0gZW5kSW5kZXgge251bWJlcn0gVGhlIGVuZGluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzaXplIG9mIHRoZSBjb250YWluZXIuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbiAoYmVnaW5JbmRleCwgZW5kSW5kZXgpXG57XG4gICAgdmFyIGJlZ2luID0gYmVnaW5JbmRleCB8fCAwO1xuICAgIHZhciBlbmQgPSB0eXBlb2YgZW5kSW5kZXggPT09ICdudW1iZXInID8gZW5kSW5kZXggOiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgcmFuZ2UgPSBlbmQgLSBiZWdpbjtcbiAgICB2YXIgcmVtb3ZlZCwgaTtcblxuICAgIGlmIChyYW5nZSA+IDAgJiYgcmFuZ2UgPD0gZW5kKVxuICAgIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGJlZ2luLCByYW5nZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0ucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShiZWdpbkluZGV4KTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZ2UgPT09IDAgJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyZW1vdmVDaGlsZHJlbjogbnVtZXJpYyB2YWx1ZXMgYXJlIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UuJyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIgZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSBmYWxzZTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkNvbnRhaW5lci5wcm90b3R5cGUuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtID0gQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIHRoZSBib3VuZHMgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCB0aGlzIHJlbmRlciBzZXNzaW9uIHNvIHJldHVybiB3aGF0IHdlIGhhdmVcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgY2hpbGRCb3VuZHM7XG4gICAgICAgIHZhciBjaGlsZE1heFg7XG4gICAgICAgIHZhciBjaGlsZE1heFk7XG5cbiAgICAgICAgdmFyIGNoaWxkVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgY2hpbGRCb3VuZHMgPSB0aGlzLmNoaWxkcmVuW2ldLmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBtaW5YID0gbWluWCA8IGNoaWxkQm91bmRzLnggPyBtaW5YIDogY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIG1pblkgPSBtaW5ZIDwgY2hpbGRCb3VuZHMueSA/IG1pblkgOiBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBjaGlsZE1heFggPSBjaGlsZEJvdW5kcy53aWR0aCArIGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICBjaGlsZE1heFkgPSBjaGlsZEJvdW5kcy5oZWlnaHQgKyBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBtYXhYID0gbWF4WCA+IGNoaWxkTWF4WCA/IG1heFggOiBjaGlsZE1heFg7XG4gICAgICAgICAgICBtYXhZID0gbWF4WSA+IGNoaWxkTWF4WSA/IG1heFkgOiBjaGlsZE1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkVmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJHZXRCb3VuZHMgPSBDb250YWluZXIucHJvdG90eXBlLmdldEJvdW5kcztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5vbi1nbG9iYWwgbG9jYWwgYm91bmRzIG9mIHRoZSBDb250YWluZXIgYXMgYSByZWN0YW5nbGUuXG4gKiBUaGUgY2FsY3VsYXRpb24gdGFrZXMgYWxsIHZpc2libGUgY2hpbGRyZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4Q2FjaGUgPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdGguTWF0cml4LklERU5USVRZO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdHJpeENhY2hlO1xuXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMoIG1hdGguTWF0cml4LklERU5USVRZICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICBcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpLCBqO1xuXG4gICAgLy8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyBlbGVtZW50IGhhcyBhIG1hc2sgb3IgYSBmaWx0ZXIuXG4gICAgaWYgKHRoaXMuX21hc2sgfHwgdGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuXG4gICAgICAgIC8vIHB1c2ggZmlsdGVyIGZpcnN0IGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyBjb3JyZWN0IGZvciBhbnkgbWFza2luZ1xuICAgICAgICBpZiAodGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRoaXMsIHRoaXMuX2ZpbHRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnB1c2hNYXNrKHRoaXMsIHRoaXMuX21hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgLy8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBiYXRjaCwgb25seSByZW5kZXJlZCBpZiBpdCBoYXMgYSB0ZXh0dXJlLlxuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIG1ha2Ugc3VyZSB0aGV5IGdldCByZW5kZXJlZFxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmlsdGVycylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gc2ltcGxlIHJlbmRlciBjaGlsZHJlbiFcbiAgICAgICAgZm9yIChpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnJlbmRlcldlYkdMKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3ViY2xhc3NcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyB0aGlzIGlzIHdoZXJlIGNvbnRlbnQgaXRzZWxmIGdldHMgcmVuZGVyZWQuLi5cbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpc1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMuYWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcy5fbWFzaywgcmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlckNhbnZhcyhyZW5kZXJlcik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFzaylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2socmVuZGVyZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcbntcbiAgICBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBpZiAoZGVzdHJveUNoaWxkcmVuKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KGRlc3Ryb3lDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9UcmFuc2Zvcm0nKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgIF90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgdGhhdCBhcmUgcmVuZGVyZWQgb24gdGhlIHNjcmVlbi5cbiAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvbiBpdHMgb3duIHJhdGhlciBpdCBzaG91bGQgYmUgZXh0ZW5kZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIERpc3BsYXlPYmplY3QoKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29vcmRpbmF0ZSBvZiB0aGUgb2JqZWN0IHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy50cmFuc2Zvcm0ucG9zaXRpb247XG4gICAvLyB0aGlzLl9wb3NpdGlvbiA9IG5ldyBDYWNoZVBvaW50KHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIGZhY3RvciBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlID0gdGhpcy50cmFuc2Zvcm0uc2NhbGVcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXZvdCBwb2ludCBvZiB0aGUgZGlzcGxheU9iamVjdCB0aGF0IGl0IHJvdGF0ZXMgYXJvdW5kXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucGl2b3QgPSB0aGlzLnRyYW5zZm9ybS5waXZvdFxuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2tldyBmYWN0b3IgZm9yIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5za2V3ID0gdGhpcy50cmFuc2Zvcm0uc2tld1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9yb3RhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BhY2l0eSBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpc2liaWxpdHkgb2YgdGhlIG9iamVjdC4gSWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biwgYW5kXG4gICAgICogdGhlIHVwZGF0ZVRyYW5zZm9ybSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDYW4gdGhpcyBvYmplY3QgYmUgcmVuZGVyZWQsIGlmIGZhbHNlIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgZHJhd24gYnV0IHRoZSB1cGRhdGVUcmFuc2Zvcm1cbiAgICAgKiBtZXRob2RzIHdpbGwgc3RpbGwgYmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmFibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIHRoaXMgZGlzcGxheSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNvbnRhaW5lcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbXVsdGlwbGllZCBhbHBoYSBvZiB0aGUgZGlzcGxheU9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRyYW5zZm9ybSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIHdvcmxkIChwYXJlbnQpIGZhY3RvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gdGhpcy50cmFuc2Zvcm0ubG9jYWxUcmFuc2Zvcm07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJlYSB0aGUgZmlsdGVyIGlzIGFwcGxpZWQgdG8uIFRoaXMgaXMgdXNlZCBhcyBtb3JlIG9mIGFuIG9wdGltaXNhdGlvblxuICAgICAqIHJhdGhlciB0aGFuIGZpZ3VyaW5nIG91dCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgZGlzcGxheU9iamVjdCBlYWNoIGZyYW1lIHlvdSBjYW4gc2V0IHRoaXMgcmVjdGFuZ2xlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xuXG4gICAgLyoqeHd3XG4gICAgICogY2FjaGVkIHNpbiByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3IgPSAwO1xuXG4gICAgLyoqXG4gICAgICogY2FjaGVkIGNvcyByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3IgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRzID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vc3QgdXAtdG8tZGF0ZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcmlnaW5hbCwgY2FjaGVkIG1hc2sgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXNrID0gbnVsbDtcblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGF5T2JqZWN0O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB4IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NhbGVYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByb3RhdGlvbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY3IgPSBNYXRoLmNvcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHNwcml0ZSBpcyBnbG9iYWxseSB2aXNpYmxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHdvcmxkVmlzaWJsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcztcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbWFzayBmb3IgdGhlIGRpc3BsYXlPYmplY3QuIEEgbWFzayBpcyBhbiBvYmplY3QgdGhhdCBsaW1pdHMgdGhlIHZpc2liaWxpdHkgb2YgYW4gb2JqZWN0IHRvIHRoZSBzaGFwZSBvZiB0aGUgbWFzayBhcHBsaWVkIHRvIGl0LlxuICAgICAqIEluIFBJWEkgYSByZWd1bGFyIG1hc2sgbXVzdCBiZSBhIFBJWEkuR3JhcGhpY3Mgb3IgYSBQSVhJLlNwcml0ZSBvYmplY3QuIFRoaXMgYWxsb3dzIGZvciBtdWNoIGZhc3RlciBtYXNraW5nIGluIGNhbnZhcyBhcyBpdCB1dGlsaXNlcyBzaGFwZSBjbGlwcGluZy5cbiAgICAgKiBUbyByZW1vdmUgYSBtYXNrLCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc3xQSVhJLlNwcml0ZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIG1hc2s6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFzaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX21hc2sgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFzay5yZW5kZXJhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVycyBmb3IgdGhlIGRpc3BsYXlPYmplY3QuXG4gICAgICogKiBJTVBPUlRBTlQ6IFRoaXMgaXMgYSB3ZWJHTCBvbmx5IGZlYXR1cmUgYW5kIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqIFRvIHJlbW92ZSBmaWx0ZXJzIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnbnVsbCdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGZpbHRlcnM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLnNsaWNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gdmFsdWUgJiYgdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBUT0RPIC0gT3B0aW1pemF0aW9uIHBhc3MhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgLy8gbXVsdGlwbHkgdGhlIGFscGhhcy4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG59O1xuXG4vLyBwZXJmb3JtYW5jZSBpbmNyZWFzZSB0byBhdm9pZCB1c2luZyBjYWxsLi4gKDEweCBmYXN0ZXIpXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtID0gRGlzcGxheU9iamVjdC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtO1xuXG4vKipcbiAqXG4gKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeCkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMobWF0aC5NYXRyaXguSURFTlRJVFkpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvR2xvYmFsID0gZnVuY3Rpb24gKHBvc2l0aW9uKVxue1xuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb3RcbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseShwb3NpdGlvbik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdCByZWxhdGl2ZSB0byBhbm90aGVyIHBvaW50XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcGFyYW0gW2Zyb21dIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgZ2xvYmFsIHBvc2l0aW9uIGZyb21cbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgUG9pbnQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvTG9jYWwgPSBmdW5jdGlvbiAocG9zaXRpb24sIGZyb20sIHBvaW50KVxue1xuICAgIGlmIChmcm9tKVxuICAgIHtcbiAgICAgICAgcG9zaXRpb24gPSBmcm9tLnRvR2xvYmFsKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBzaW1wbHkgYXBwbHkgdGhlIG1hdHJpeC4uXG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvc2l0aW9uLCBwb2ludCk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFyZW50IENvbnRhaW5lciBvZiB0aGlzIERpc3BsYXlPYmplY3RcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdG8gYWRkIHRoaXMgRGlzcGxheU9iamVjdCB0b1xuICogQHJldHVybiB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRoYXQgdGhpcyBEaXNwbGF5T2JqZWN0IHdhcyBhZGRlZCB0b1xuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXIuYWRkQ2hpbGQpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFBhcmVudDogQXJndW1lbnQgbXVzdCBiZSBhIENvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRDaGlsZCh0aGlzKTtcbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzZXQgdGhlIHBvc3Rpb24sIHNjYWxlLCBza2V3IGFuZCBwaXZvdCBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBUaGUgWCBwb3NpdGlvblxuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IFRoZSBZIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3NjYWxlWD0xXSB7bnVtYmVyfSBUaGUgWCBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtzY2FsZVk9MV0ge251bWJlcn0gVGhlIFkgc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbcm90YXRpb249MF0ge251bWJlcn0gVGhlIHJvdGF0aW9uXG4gKiBAcGFyYW0gW3NrZXdYPTBdIHtudW1iZXJ9IFRoZSBYIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbc2tld1k9MF0ge251bWJlcn0gVGhlIFkgc2tldyB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFg9MF0ge251bWJlcn0gVGhlIFggcGl2b3QgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RZPTBdIHtudW1iZXJ9IFRoZSBZIHBpdm90IHZhbHVlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKHgsIHksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZLCBwaXZvdFgsIHBpdm90WSkgLy9qc2hpbnQgaWdub3JlOmxpbmVcbntcbiAgICB0aGlzLnBvc2l0aW9uLnggPSB4IHx8IDA7XG4gICAgdGhpcy5wb3NpdGlvbi55ID0geSB8fCAwO1xuICAgIHRoaXMuc2NhbGUueCA9ICFzY2FsZVggPyAxIDogc2NhbGVYO1xuICAgIHRoaXMuc2NhbGUueSA9ICFzY2FsZVkgPyAxIDogc2NhbGVZO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgIHRoaXMuc2tldy54ID0gc2tld1ggfHwgMDtcbiAgICB0aGlzLnNrZXcueSA9IHNrZXdZIHx8IDA7XG4gICAgdGhpcy5waXZvdC54ID0gcGl2b3RYIHx8IDA7XG4gICAgdGhpcy5waXZvdC55ID0gcGl2b3RZIHx8IDA7XG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEJhc2UgZGVzdHJveSBtZXRob2QgZm9yIGdlbmVyaWMgZGlzcGxheSBvYmplY3RzXG4gKlxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcblxuICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2NhbGUgPSBudWxsO1xuICAgIHRoaXMucGl2b3QgPSBudWxsO1xuICAgIHRoaXMuc2tldyA9IG51bGw7XG5cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcblxuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IG1hdGguUG9pbnQoMSwxKTtcbiAgICB0aGlzLnBpdm90ID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNrZXcgPSBuZXcgbWF0aC5Qb2ludCgwLjApO1xuICAgIFxuICAgIHRoaXMucm90YXRpb24gPSAwO1xuICAgIHRoaXMuX3NyID0gTWF0aC5zaW4oMCk7XG4gICAgdGhpcy5fY3IgPSBNYXRoLmNvcygwKTtcbiAgICBcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufVxuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHJhbnNmb3JtO1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uIChwYXJlbnRUcmFuc2Zvcm0pXG57XG4gICAgdmFyIHB0ID0gcGFyZW50VHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGx0ID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcblxuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueDtcbiAgICAgICAgbHQuYiAgPSAgdGhpcy5fc3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmMgID0gLXRoaXMuX3NyICogdGhpcy5zY2FsZS55O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQudHggPSAgdGhpcy5wb3NpdGlvbi54IC0gKHRoaXMucGl2b3QueCAqIGx0LmEgKyB0aGlzLnBpdm90LnkgKiBsdC5jKTtcbiAgICAgICAgbHQudHkgPSAgdGhpcy5wb3NpdGlvbi55IC0gKHRoaXMucGl2b3QueCAqIGx0LmIgKyB0aGlzLnBpdm90LnkgKiBsdC5kKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmRpcnR5IHx8IHBhcmVudC5kaXJ0eSlcbiAgICB7ICAgICAgXG4gICAgICAgIC8vIGNvbmNhdCB0aGUgcGFyZW50IG1hdHJpeCB3aXRoIHRoZSBvYmplY3RzIHRyYW5zZm9ybS5cbiAgICAgICAgd3QuYSAgPSBsdC5hICAqIHB0LmEgKyBsdC5iICAqIHB0LmM7XG4gICAgICAgIHd0LmIgID0gbHQuYSAgKiBwdC5iICsgbHQuYiAgKiBwdC5kO1xuICAgICAgICB3dC5jICA9IGx0LmMgICogcHQuYSArIGx0LmQgICogcHQuYztcbiAgICAgICAgd3QuZCAgPSBsdC5jICAqIHB0LmIgKyBsdC5kICAqIHB0LmQ7XG4gICAgICAgIHd0LnR4ID0gbHQudHggKiBwdC5hICsgbHQudHkgKiBwdC5jICsgcHQudHg7XG4gICAgICAgIHd0LnR5ID0gbHQudHggKiBwdC5iICsgbHQudHkgKiBwdC5kICsgcHQudHk7ICAgICAgIFxuICAgIFxuICAgLy8gICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgLy8gICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbi8vICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgLy8gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm07XG5cblxuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vR3JhcGhpY3NEYXRhJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcFBvaW50ID0gbmV3IG1hdGguUG9pbnQoKTtcblxuLyoqXG4gKiBUaGUgR3JhcGhpY3MgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB1c2VkIHRvIGRyYXcgcHJpbWl0aXZlIHNoYXBlcyBzdWNoIGFzIGxpbmVzLCBjaXJjbGVzIGFuZFxuICogcmVjdGFuZ2xlcyB0byB0aGUgZGlzcGxheSwgYW5kIHRvIGNvbG9yIGFuZCBmaWxsIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3MoKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCAodGhpY2tuZXNzKSBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gMDtcblxuICAgIC8qKlxuICAgICAqIEdyYXBoaWNzIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQXBwbHkgYSB2YWx1ZSBvZiAweEZGRkZGRiB0byByZXNldCB0aGUgdGludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByZXZpb3VzIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVXNlZCB0byBjb21wYXJlIHRvIHRoZSBjdXJyZW50IHRpbnQgYW5kIGNoZWNrIGlmIHRoZXJlcyBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMuX3ByZXZUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUw7XG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHBhdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBjb250YWluaW5nIHNvbWUgV2ViR0wtcmVsYXRlZCBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgb2JqZWN0Pn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIFRPRE8gLSBfd2ViZ2wgc2hvdWxkIHVzZSBhIHByb3RvdHlwZSBvYmplY3QsIG5vdCBhIHJhbmRvbSB1bmRvY3VtZW50ZWQgb2JqZWN0Li4uXG4gICAgdGhpcy5fd2ViR0wgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBzaGFwZSBpcyBiZWluZyB1c2VkIGFzIGEgbWFzay5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc01hc2sgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBib3VuZHMnIHBhZGRpbmcgdXNlZCBmb3IgYm91bmRzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYm91bmRzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBsb2NhbCBib3VuZHMgdG8gcHJldmVudCByZWNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLDAsMSwxKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgV2ViR0wgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlXG4gICAgICogZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgY2FjaGVkIHNwcml0ZSBvYmplY3QgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGNhY2hlQXNCaXRtYXAgaXMgc2V0IHRvIHRydWUgdGhlIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIGFzIGlmIGl0IHdhcyBhIHNwcml0ZS5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGdyYXBoaWNzIGVsZW1lbnQgZG9lcyBub3QgY2hhbmdlIG9mdGVuLCBhcyBpdCB3aWxsIHNwZWVkIHVwIHRoZSByZW5kZXJpbmdcbiAgICAgKiBvZiB0aGUgb2JqZWN0IGluIGV4Y2hhbmdlIGZvciB0YWtpbmcgdXAgdGV4dHVyZSBtZW1vcnkuIEl0IGlzIGFsc28gdXNlZnVsIGlmIHlvdSBuZWVkIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB0byBiZSBhbnRpLWFsaWFzZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyBjYW52YXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGlmXG4gICAgICogeW91IGFyZSBjb25zdGFudGx5IHJlZHJhd2luZyB0aGUgZ3JhcGhpY3MgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhY2hlQXNCaXRtYXBcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkdyYXBoaWNzI1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5HcmFwaGljcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3M7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICogTm90ZSB0aGF0IHRoZSBvbmx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIGNsb25lZCwgbm90IGl0cyB0cmFuc2Zvcm0gKHBvc2l0aW9uLHNjYWxlLGV0YylcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjbG9uZSA9IG5ldyBHcmFwaGljcygpO1xuXG4gICAgY2xvbmUucmVuZGVyYWJsZSAgICA9IHRoaXMucmVuZGVyYWJsZTtcbiAgICBjbG9uZS5maWxsQWxwaGEgICAgID0gdGhpcy5maWxsQWxwaGE7XG4gICAgY2xvbmUubGluZVdpZHRoICAgICA9IHRoaXMubGluZVdpZHRoO1xuICAgIGNsb25lLmxpbmVDb2xvciAgICAgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICBjbG9uZS50aW50ICAgICAgICAgID0gdGhpcy50aW50O1xuICAgIGNsb25lLmJsZW5kTW9kZSAgICAgPSB0aGlzLmJsZW5kTW9kZTtcbiAgICBjbG9uZS5pc01hc2sgICAgICAgID0gdGhpcy5pc01hc2s7XG4gICAgY2xvbmUuYm91bmRzUGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcbiAgICBjbG9uZS5kaXJ0eSAgICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5nbERpcnR5ICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRoaXMuY2FjaGVkU3ByaXRlRGlydHk7XG5cbiAgICAvLyBjb3B5IGdyYXBoaWNzIGRhdGFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgY2xvbmUuZ3JhcGhpY3NEYXRhLnB1c2godGhpcy5ncmFwaGljc0RhdGFbaV0uY2xvbmUoKSk7XG4gICAgfVxuXG4gICAgY2xvbmUuY3VycmVudFBhdGggPSBjbG9uZS5ncmFwaGljc0RhdGFbY2xvbmUuZ3JhcGhpY3NEYXRhLmxlbmd0aCAtIDFdO1xuXG4gICAgY2xvbmUudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgIHJldHVybiBjbG9uZTtcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsaW5lIHN0eWxlIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gR3JhcGhpY3MgbWV0aG9kcyBzdWNoIGFzIHRoZSBsaW5lVG8oKSBtZXRob2Qgb3IgdGhlIGRyYXdDaXJjbGUoKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lU3R5bGUgPSBmdW5jdGlvbiAobGluZVdpZHRoLCBjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGggfHwgMDtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5saW5lQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGhhbGZ3YXkgdGhyb3VnaCBhIGxpbmU/IHN0YXJ0IGEgbmV3IG9uZSFcbiAgICAgICAgICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24odGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMuc2xpY2UoLTIpKTtcbiAgICAgICAgICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0cyBlbXB0eSBzbyBsZXRzIGp1c3Qgc2V0IHRoZSBsaW5lIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQWxwaGEgPSB0aGlzLmxpbmVBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBNb3ZlcyB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvIHgsIHkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gICovXG5HcmFwaGljcy5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihbeCx5XSk7XG4gICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgbGluZSB1c2luZyB0aGUgY3VycmVudCBsaW5lIHN0eWxlIGZyb20gdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byAoeCwgeSk7XG4gKiBUaGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIGlzIHRoZW4gc2V0IHRvICh4LCB5KS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeCwgeSk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsIDApO1xuICAgIH1cblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICB4YSA9IGZyb21YICsgKCAoY3BYIC0gZnJvbVgpICogaiApO1xuICAgICAgICB5YSA9IGZyb21ZICsgKCAoY3BZIC0gZnJvbVkpICogaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCB4YSArICggKChjcFggKyAoICh0b1ggLSBjcFgpICogaiApKSAtIHhhKSAqIGogKSxcbiAgICAgICAgICAgICAgICAgICAgIHlhICsgKCAoKGNwWSArICggKHRvWSAtIGNwWSkgKiBqICkpIC0geWEpICogaiApICk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSBjcFgyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgY3BYMiwgY3BZMiwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciBuID0gMjAsXG4gICAgICAgIGR0LFxuICAgICAgICBkdDIsXG4gICAgICAgIGR0MyxcbiAgICAgICAgdDIsXG4gICAgICAgIHQzLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIGR0ID0gKDEgLSBqKTtcbiAgICAgICAgZHQyID0gZHQgKiBkdDtcbiAgICAgICAgZHQzID0gZHQyICogZHQ7XG5cbiAgICAgICAgdDIgPSBqICogajtcbiAgICAgICAgdDMgPSB0MiAqIGo7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIGR0MyAqIGZyb21YICsgMyAqIGR0MiAqIGogKiBjcFggKyAzICogZHQgKiB0MiAqIGNwWDIgKyB0MyAqIHRvWCxcbiAgICAgICAgICAgICAgICAgICAgIGR0MyAqIGZyb21ZICsgMyAqIGR0MiAqIGogKiBjcFkgKyAzICogZHQgKiB0MiAqIGNwWTIgKyB0MyAqIHRvWSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmNUbygpIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSBiZXR3ZWVuIHR3byB0YW5nZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFwiYm9ycm93ZWRcIiBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZnhjYW52YXMvIC0gdGhhbmtzIGdvb2dsZSFcbiAqXG4gKiBAcGFyYW0geDEge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHgyIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTIge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjVG8gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIHJhZGl1cylcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyh4MSwgeTEpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyxcbiAgICAgICAgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSxcbiAgICAgICAgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSxcbiAgICAgICAgYTEgPSBmcm9tWSAtIHkxLFxuICAgICAgICBiMSA9IGZyb21YIC0geDEsXG4gICAgICAgIGEyID0geTIgICAtIHkxLFxuICAgICAgICBiMiA9IHgyICAgLSB4MSxcbiAgICAgICAgbW0gPSBNYXRoLmFicyhhMSAqIGIyIC0gYjEgKiBhMik7XG5cbiAgICBpZiAobW0gPCAxLjBlLTggfHwgcmFkaXVzID09PSAwKVxuICAgIHtcbiAgICAgICAgaWYgKHBvaW50c1twb2ludHMubGVuZ3RoLTJdICE9PSB4MSB8fCBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSAhPT0geTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIGRkID0gYTEgKiBhMSArIGIxICogYjEsXG4gICAgICAgICAgICBjYyA9IGEyICogYTIgKyBiMiAqIGIyLFxuICAgICAgICAgICAgdHQgPSBhMSAqIGEyICsgYjEgKiBiMixcbiAgICAgICAgICAgIGsxID0gcmFkaXVzICogTWF0aC5zcXJ0KGRkKSAvIG1tLFxuICAgICAgICAgICAgazIgPSByYWRpdXMgKiBNYXRoLnNxcnQoY2MpIC8gbW0sXG4gICAgICAgICAgICBqMSA9IGsxICogdHQgLyBkZCxcbiAgICAgICAgICAgIGoyID0gazIgKiB0dCAvIGNjLFxuICAgICAgICAgICAgY3ggPSBrMSAqIGIyICsgazIgKiBiMSxcbiAgICAgICAgICAgIGN5ID0gazEgKiBhMiArIGsyICogYTEsXG4gICAgICAgICAgICBweCA9IGIxICogKGsyICsgajEpLFxuICAgICAgICAgICAgcHkgPSBhMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHF4ID0gYjIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBxeSA9IGEyICogKGsxICsgajIpLFxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IE1hdGguYXRhbjIocHkgLSBjeSwgcHggLSBjeCksXG4gICAgICAgICAgICBlbmRBbmdsZSAgID0gTWF0aC5hdGFuMihxeSAtIGN5LCBxeCAtIGN4KTtcblxuICAgICAgICB0aGlzLmFyYyhjeCArIHgxLCBjeSArIHkxLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBiMSAqIGEyID4gYjIgKiBhMSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmMgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlICh1c2VkIHRvIGNyZWF0ZSBjaXJjbGVzLCBvciBwYXJ0cyBvZiBjaXJjbGVzKS5cbiAqXG4gKiBAcGFyYW0gY3gge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBjeSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBzdGFydEFuZ2xlIHtudW1iZXJ9IFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucyAoMCBpcyBhdCB0aGUgMyBvJ2Nsb2NrIHBvc2l0aW9uIG9mIHRoZSBhcmMncyBjaXJjbGUpXG4gKiBAcGFyYW0gZW5kQW5nbGUge251bWJlcn0gVGhlIGVuZGluZyBhbmdsZSwgaW4gcmFkaWFuc1xuICogQHBhcmFtIGFudGljbG9ja3dpc2Uge2Jvb2xlYW59IE9wdGlvbmFsLiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgY291bnRlcmNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuIEZhbHNlIGlzIGRlZmF1bHQsIGFuZCBpbmRpY2F0ZXMgY2xvY2t3aXNlLCB3aGlsZSB0cnVlIGluZGljYXRlcyBjb3VudGVyLWNsb2Nrd2lzZS5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmMgPSBmdW5jdGlvbihjeCwgY3ksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UpXG57XG4gICAgYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gZW5kQW5nbGUpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiggIWFudGljbG9ja3dpc2UgJiYgZW5kQW5nbGUgPD0gc3RhcnRBbmdsZSApXG4gICAge1xuICAgICAgICBlbmRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG4gICAgZWxzZSBpZiggYW50aWNsb2Nrd2lzZSAmJiBzdGFydEFuZ2xlIDw9IGVuZEFuZ2xlIClcbiAgICB7XG4gICAgICAgIHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuXG4gICAgdmFyIHN3ZWVwID0gYW50aWNsb2Nrd2lzZSA/IChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpICogLTEgOiAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKTtcbiAgICB2YXIgc2VncyA9ICBNYXRoLmNlaWwoTWF0aC5hYnMoc3dlZXApIC8gKE1hdGguUEkgKiAyKSkgKiA0MDtcblxuICAgIGlmKHN3ZWVwID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0WCA9IGN4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXM7XG4gICAgdmFyIHN0YXJ0WSA9IGN5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXM7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyhzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIHRoZXRhID0gc3dlZXAvKHNlZ3MqMik7XG4gICAgdmFyIHRoZXRhMiA9IHRoZXRhKjI7XG5cbiAgICB2YXIgY1RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgICB2YXIgc2VnTWludXMgPSBzZWdzIC0gMTtcblxuICAgIHZhciByZW1haW5kZXIgPSAoIHNlZ01pbnVzICUgMSApIC8gc2VnTWludXM7XG5cbiAgICBmb3IodmFyIGk9MDsgaTw9c2VnTWludXM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciByZWFsID0gIGkgKyByZW1haW5kZXIgKiBpO1xuXG5cbiAgICAgICAgdmFyIGFuZ2xlID0gKCh0aGV0YSkgKyBzdGFydEFuZ2xlICsgKHRoZXRhMiAqIHJlYWwpKTtcblxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgdmFyIHMgPSAtTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCggKGNUaGV0YSAqICBjKSArIChzVGhldGEgKiBzKSApICogcmFkaXVzICsgY3gsXG4gICAgICAgICAgICAgICAgICAgICggKGNUaGV0YSAqIC1zKSArIChzVGhldGEgKiBjKSApICogcmFkaXVzICsgY3kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSBzaW1wbGUgb25lLWNvbG9yIGZpbGwgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIG90aGVyIEdyYXBoaWNzIG1ldGhvZHNcbiAqIChzdWNoIGFzIGxpbmVUbygpIG9yIGRyYXdDaXJjbGUoKSkgdXNlIHdoZW4gZHJhd2luZy5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmVnaW5GaWxsID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmZpbGxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGwgPSB0aGlzLmZpbGxpbmc7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxDb2xvciA9IHRoaXMuZmlsbENvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQWxwaGEgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbGwgdG8gdGhlIGxpbmVzIGFuZCBzaGFwZXMgdGhhdCB3ZXJlIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhlIGJlZ2luRmlsbCgpIG1ldGhvZC5cbiAqXG4gKiBAcmV0dXJuIHtHcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmVuZEZpbGwgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gbnVsbDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5SZWN0YW5nbGUoeCx5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBSYWRpdXMgb2YgdGhlIHJlY3RhbmdsZSBjb3JuZXJzXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JvdW5kZWRSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdDaXJjbGUgPSBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkNpcmNsZSh4LHksIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhlIGVsbGlwc2VcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3RWxsaXBzZSA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgcG9seWdvbiB1c2luZyB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCB7bnVtYmVyW118UElYSS5Qb2ludFtdfSBUaGUgcGF0aCBkYXRhIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwb2x5Z29uLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24gKHBhdGgpXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBhdGg7XG5cbiAgICB2YXIgY2xvc2VkID0gdHJ1ZTtcblxuICAgIGlmIChwb2ludHMgaW5zdGFuY2VvZiBtYXRoLlBvbHlnb24pXG4gICAge1xuICAgICAgICBjbG9zZWQgPSBwb2ludHMuY2xvc2VkO1xuICAgICAgICBwb2ludHMgPSBwb2ludHMucG9pbnRzO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50c1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24ocG9pbnRzKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBjbG9zZWQ7XG5cbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBncmFwaGljcyB0aGF0IHdlcmUgZHJhd24gdG8gdGhpcyBHcmFwaGljcyBvYmplY3QsIGFuZCByZXNldHMgZmlsbCBhbmQgbGluZSBzdHlsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuY2xlYXJEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZ2VvbWV0cnkgaXMgY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2hvdWxkIGJlIG9uZSBvZiB0aGUgc2NhbGVNb2RlIGNvbnN0c1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdFxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG5cbiAgICByZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCAqIHJlc29sdXRpb24sIGJvdW5kcy5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY2FudmFzQnVmZmVyLmNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgdGhlIHNwcml0ZSBpcyBub3QgdmlzaWJsZSBvciB0aGUgYWxwaGEgaXMgMCB0aGVuIG5vIG5lZWQgdG8gcmVuZGVyIHRoaXMgZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuZ2xEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzLnJlbmRlcih0aGlzKTtcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmlzTWFzayA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdGludCBoYXMgY2hhbmdlZCwgc2V0IHRoZSBncmFwaGljcyBvYmplY3QgdG8gZGlydHkuXG4gICAgaWYgKHRoaXMuX3ByZXZUaW50ICE9PSB0aGlzLnRpbnQpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjb2RlIG1heSBzdGlsbCBiZSBuZWVkZWQgc28gbGVhdmluZyBmb3Igbm93Li5cbiAgICAvL1xuICAgIC8qXG4gICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXApXG4gICAge1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSB8fCB0aGlzLmNhY2hlZFNwcml0ZURpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSgpO1xuXG4gICAgICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xuXG4gICAgICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMuX2NhY2hlZFNwcml0ZSwgcmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb247XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjb250ZXh0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGdyYXBoaWMgc2hhcGUgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gVGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlLCBkZWZhdWx0cyB0byB0aGlzXG4gKiAgb2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuXG4gICAgICAgIC8vIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGl0ZW0gaXMgYSBtYXNrIVxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyYWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgICAgICAgICAgdGhpcy5nbERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2xvY2FsQm91bmRzO1xuXG4gICAgICAgIHZhciB3MCA9IGJvdW5kcy54O1xuICAgICAgICB2YXIgdzEgPSBib3VuZHMud2lkdGggKyBib3VuZHMueDtcblxuICAgICAgICB2YXIgaDAgPSBib3VuZHMueTtcbiAgICAgICAgdmFyIGgxID0gYm91bmRzLmhlaWdodCArIGJvdW5kcy55O1xuXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciBtYXhYID0geDE7XG4gICAgICAgIHZhciBtYXhZID0geTE7XG5cbiAgICAgICAgdmFyIG1pblggPSB4MTtcbiAgICAgICAgdmFyIG1pblkgPSB5MTtcblxuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy54ID0gbWluWDtcbiAgICAgICAgdGhpcy5fYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IHRoaXMuX2JvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIGdyYXBoaWNzIG9iamVjdFxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5HcmFwaGljcy5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIGdyYXBoaWNzRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoIWRhdGEuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGRlYWwgd2l0aCBmaWxscy4uXG4gICAgICAgIGlmIChkYXRhLnNoYXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIGRhdGEuc2hhcGUuY29udGFpbnMoIHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSApIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICpcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUxvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGlmICh0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB2YXIgc2hhcGUsIHBvaW50cywgeCwgeSwgdywgaDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG4gICAgICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVCB8fCB0eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueCAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gUE9MWVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSAyKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvaW50c1tqKzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblggPSB4LWxpbmVXaWR0aCA8IG1pblggPyB4LWxpbmVXaWR0aCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSB4K2xpbmVXaWR0aCA+IG1heFggPyB4K2xpbmVXaWR0aCA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IHktbGluZVdpZHRoIDwgbWluWSA/IHktbGluZVdpZHRoIDogbWluWTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IHkrbGluZVdpZHRoID4gbWF4WSA/IHkrbGluZVdpZHRoIDogbWF4WTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgbWluWCA9IDA7XG4gICAgICAgIG1heFggPSAwO1xuICAgICAgICBtaW5ZID0gMDtcbiAgICAgICAgbWF4WSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy54ID0gbWluWCAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMud2lkdGggPSAobWF4WCAtIG1pblgpICsgcGFkZGluZyAqIDI7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy55ID0gbWluWSAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMuaGVpZ2h0ID0gKG1heFkgLSBtaW5ZKSArIHBhZGRpbmcgKiAyO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNhY2hlZCBzcHJpdGUgd2hlbiB0aGUgc3ByaXRlIGhhcyBjYWNoZUFzQml0bWFwID0gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgaWYgKCF0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzKTtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgU3ByaXRlKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyID0gY2FudmFzQnVmZmVyO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIucmVzaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gbGV2ZXJhZ2UgdGhlIGFuY2hvciB0byBhY2NvdW50IGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC5zYXZlKCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGFscGhhIG9mIHRoZSBncmFwaGljcyB0byAxIGZvciB0aGUgcmVuZGVyLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gbm93IHJlbmRlciB0aGUgZ3JhcGhpYy4uXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0KTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG59O1xuKi9cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjYWNoZWRTcHJpdGUgPSB0aGlzLl9jYWNoZWRTcHJpdGU7XG4gICAgdmFyIHRleHR1cmUgPSBjYWNoZWRTcHJpdGUudGV4dHVyZTtcbiAgICB2YXIgY2FudmFzID0gY2FjaGVkU3ByaXRlLmJ1ZmZlci5jYW52YXM7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLmZyYW1lLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLmZyYW1lLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICBjYWNoZWRTcHJpdGUuX3dpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIGNhY2hlZFNwcml0ZS5faGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgZGlydHkgYmFzZSB0ZXh0dXJlc1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZGlydHkoKTtcbn07Ki9cblxuLyoqXG4gKiBEZXN0cm95cyBhIHByZXZpb3VzIGNhY2hlZCBzcHJpdGUuXG4gKlxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3lDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS50ZXh0dXJlLmRlc3Ryb3kodHJ1ZSk7XG5cbiAgICAvLyBsZXQgdGhlIGdjIGNvbGxlY3QgdGhlIHVudXNlZCBzcHJpdGVcbiAgICAvLyBUT0RPIGNvdWxkIGJlIG9iamVjdCBwb29sZWQhXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07Ki9cblxuLyoqXG4gKiBEcmF3cyB0aGUgZ2l2ZW4gc2hhcGUgdG8gdGhpcyBHcmFwaGljcyBvYmplY3QuIENhbiBiZSBhbnkgb2YgQ2lyY2xlLCBSZWN0YW5nbGUsIEVsbGlwc2UsIExpbmUgb3IgUG9seWdvbi5cbiAqXG4gKiBAcGFyYW0gc2hhcGUge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX0gVGhlIGdlbmVyYXRlZCBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24gKHNoYXBlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgLy8gY2hlY2sgY3VycmVudCBwYXRoIVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IG5ldyBHcmFwaGljc0RhdGEodGhpcy5saW5lV2lkdGgsIHRoaXMubGluZUNvbG9yLCB0aGlzLmxpbmVBbHBoYSwgdGhpcy5maWxsQ29sb3IsIHRoaXMuZmlsbEFscGhhLCB0aGlzLmZpbGxpbmcsIHNoYXBlKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnB1c2goZGF0YSk7XG5cbiAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICB7XG4gICAgICAgIGRhdGEuc2hhcGUuY2xvc2VkID0gZGF0YS5zaGFwZS5jbG9zZWQgfHwgdGhpcy5maWxsaW5nO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBkZXN0cm95IGVhY2ggb2YgdGhlIEdyYXBoaWNzRGF0YSBvYmplY3RzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggd2ViZ2wgZGF0YSBlbnRyeSwgZGVzdHJveSB0aGUgV2ViR0xHcmFwaGljc0RhdGFcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl93ZWJnbCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3dlYmdsW2lkXS5kYXRhLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJnbFtpZF0uZGF0YVtqXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl93ZWJnbCA9IG51bGw7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBudWxsO1xufTtcbiIsIi8qKlxuICogQSBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBmaWxsQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbEFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGwgICAgICB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gKiBAcGFyYW0gc2hhcGUgICAgIHtDaXJjbGV8UmVjdGFuZ2xlfEVsbGlwc2V8TGluZXxQb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzRGF0YShsaW5lV2lkdGgsIGxpbmVDb2xvciwgbGluZUFscGhhLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgZmlsbCwgc2hhcGUpXG57XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IGxpbmVDb2xvcjtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVBbHBoYSA9IGxpbmVBbHBoYTtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMuX2xpbmVUaW50ID0gbGluZUNvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5fZmlsbFRpbnQgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICAgICAqL1xuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gICAgICovXG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFRoZSB0eXBlIG9mIHRoZSBzaGFwZSwgc2VlIHRoZSBDb25zdC5TaGFwZXMgZmlsZSBmb3IgYWxsIHRoZSBleGlzdGluZyB0eXBlcyxcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBzaGFwZS50eXBlO1xufVxuXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljc0RhdGEgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfVxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEdyYXBoaWNzRGF0YShcbiAgICAgICAgdGhpcy5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMubGluZUNvbG9yLFxuICAgICAgICB0aGlzLmxpbmVBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuZmlsbEFscGhhLFxuICAgICAgICB0aGlzLmZpbGwsXG4gICAgICAgIHRoaXMuc2hhcGVcbiAgICApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3MgZGF0YS5cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2hhcGUgPSBudWxsO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vV2ViR0xHcmFwaGljc0RhdGEnKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyJyksXG5cbiAgICAvLyBzb21lIGRyYXdpbmcgZnVuY3Rpb25zLi5cbiAgICBidWlsZExpbmUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkTGluZScpO1xuICAgIGJ1aWxkUG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRQb2x5Jyk7XG4gICAgYnVpbGRDb21wbGV4UG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRDb21wbGV4UG9seScpO1xuICAgIGJ1aWxkUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlJyk7XG4gICAgYnVpbGRDaXJjbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ2lyY2xlJyk7XG5cbiAgICBlYXJjdXQgPSByZXF1aXJlKCdlYXJjdXQnKTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBHcmFwaGljc1JlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgdGhpcy5ncmFwaGljc0RhdGFQb29sID0gW107XG5cbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBvaW50cyBhIHBvbHkgY2FuIGNvbnRhaW4gYmVmb3JlIGl0IGlzIHJlbmRlcmVkIGFzIGEgY29tcGxleCBwb2x5Z29uICh1c2luZyB0aGUgc3RlbmNpbCBidWZmZXIpXG4gICAgICogQHR5cGUge051bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heGltdW1TaW1wbGVQb2x5U2l6ZSA9IDIwMDtcbn1cblxuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2dyYXBoaWNzJywgR3JhcGhpY3NSZW5kZXJlcik7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZVxuICpcbiAqIEBwcml2YXRlXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy5nbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBuZXcgUHJpbWl0aXZlU2hhZGVyKHRoaXMuZ2wpXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgcmVuZGVyZXIuXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2xbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcbiAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIHZhciB3ZWJHTERhdGE7XG4gIC8vICBjb25zb2xlLmxvZyhncmFwaGljcylcbiAgICBpZiAoZ3JhcGhpY3MuZGlydHkgfHwgIWdyYXBoaWNzLl93ZWJHTFtnbC5pZF0pXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZUdyYXBoaWNzKGdyYXBoaWNzKTtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gVGhpcyAgY291bGQgYmUgc3BlZWRlZCB1cCBmb3Igc3VyZSFcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCBncmFwaGljcy5ibGVuZE1vZGUgKTtcblxuLy8gICAgdmFyIG1hdHJpeCA9ICBncmFwaGljcy53b3JsZFRyYW5zZm9ybS5jbG9uZSgpO1xuLy8gICAgdmFyIG1hdHJpeCA9ICByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXguY2xvbmUoKTtcbi8vICAgIG1hdHJpeC5hcHBlbmQoZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0pO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB3ZWJHTC5kYXRhLmxlbmd0aDsgaSA8IG47IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMLmRhdGFbaV0ubW9kZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy9UT0RPIGZpeCB0aGlzIG9uZSFcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnB1c2hTdGVuY2lsKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICBnbC51bmlmb3JtMWYocmVuZGVyZXIuc2hhZGVyTWFuYWdlci5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSAqIHdlYkdMRGF0YS5hbHBoYSk7XG5cbiAgICAgICAgICAgIC8vIHJlbmRlciBxdWFkLi5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgcmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucG9wU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICovXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHNoYWRlciA9IHRoaXMucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgICAgICAgICByZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50aW50ID0gdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5kcmF3Q291bnQrKztcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gdXBkYXRlXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnVwZGF0ZUdyYXBoaWNzID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBnZXQgdGhlIGNvbnRleHRzIGdyYXBoaWNzIG9iamVjdFxuICAgIHZhciB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF07XG5cbiAgICAvLyBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGRvZXMgbm90IGV4aXN0IGluIHRoZSB3ZWJHTCBjb250ZXh0IHRpbWUgdG8gY3JlYXRlIGl0IVxuICAgIGlmICghd2ViR0wpXG4gICAge1xuICAgICAgICB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF0gPSB7bGFzdEluZGV4OjAsIGRhdGE6W10sIGdsOmdsfTtcbiAgICB9XG5cbiAgIFxuICAgIC8vIGZsYWcgdGhlIGdyYXBoaWNzIGFzIG5vdCBkaXJ0eSBhcyB3ZSBhcmUgYWJvdXQgdG8gdXBkYXRlIGl0Li4uXG4gICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcblxuICAgIHZhciBpO1xuXG4gICAgLy8gaWYgdGhlIHVzZXIgY2xlYXJlZCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHdlIHdpbGwgbmVlZCB0byBjbGVhciBldmVyeSBvYmplY3RcbiAgICBpZiAoZ3JhcGhpY3MuY2xlYXJEaXJ0eSlcbiAgICB7XG4gICAgICAgIGdyYXBoaWNzLmNsZWFyRGlydHkgPSBmYWxzZTtcblxuICAgICAgICAvLyBsb29wIHRocm91Z2ggYW5kIHJldHVybiBhbGwgdGhlIHdlYkdMRGF0YXMgdG8gdGhlIG9iamVjdCBwb29sIHNvIHRoYW4gY2FuIGJlIHJldXNlZCBsYXRlciBvblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGdyYXBoaWNzRGF0YSA9IHdlYkdMLmRhdGFbaV07XG4gICAgICAgICAgICBncmFwaGljc0RhdGEucmVzZXQoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wdXNoKCBncmFwaGljc0RhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIHRoZSBhcnJheSBhbmQgcmVzZXQgdGhlIGluZGV4Li5cbiAgICAgICAgd2ViR0wuZGF0YSA9IFtdO1xuICAgICAgICB3ZWJHTC5sYXN0SW5kZXggPSAwO1xuICAgIH1cblxuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICAvLyBsb29wIHRocm91Z2ggdGhlIGdyYXBoaWNzIGRhdGFzIGFuZCBjb25zdHJ1Y3QgZWFjaCBvbmUuLlxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgYSBjb21wbGV4IGZpbGwgdGhlbiB0aGUgbmV3IHN0ZW5jaWwgYnVmZmVyIHRlY2huaXF1ZSB3aWxsIGJlIHVzZWRcbiAgICAvLyBvdGhlciB3aXNlIGdyYXBoaWNzIG9iamVjdHMgd2lsbCBiZSBwdXNoZWQgaW50byBhIGJhdGNoLi5cbiAgICBmb3IgKGkgPSB3ZWJHTC5sYXN0SW5kZXg7IGkgPCBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gbmVlZCB0byBhZGQgdGhlIHBvaW50cyB0aGUgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgICAgICAgICBkYXRhLnBvaW50cyA9IGRhdGEuc2hhcGUucG9pbnRzLnNsaWNlKCk7XG4gICAgICAgICAgICBpZiAoZGF0YS5zaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gY2xvc2UgdGhlIHBvbHkgaWYgdGhlIHZhbHVlIGlzIHRydWUhXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzWzBdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMl0gfHwgZGF0YS5wb2ludHNbMV0gIT09IGRhdGEucG9pbnRzW2RhdGEucG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucG9pbnRzLnB1c2goZGF0YS5wb2ludHNbMF0sIGRhdGEucG9pbnRzWzFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1BS0UgU1VSRSBXRSBIQVZFIFRIRSBDT1JSRUNUIFRZUEUuLlxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoID49IDYpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoIDwgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgKiAyKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FuRHJhd1VzaW5nU2ltcGxlID0gYnVpbGRQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuRHJhd1VzaW5nU2ltcGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGggPiAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG4gICAgICAgICAgICAgICAgYnVpbGRMaW5lKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQyB8fCBkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5FTElQKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkQ2lyY2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2ViR0wubGFzdEluZGV4Kys7XG4gICAgfVxuXG4gICAgLy8gdXBsb2FkIGFsbCB0aGUgZGlydHkgZGF0YS4uLlxuICAgIGZvciAoaSA9IDA7IGkgPCB3ZWJHTC5kYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVtpXTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLmRpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEudXBsb2FkKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB3ZWJHTCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IFRPRE8gQEFsdmluXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnN3aXRjaE1vZGUgPSBmdW5jdGlvbiAod2ViR0wsIHR5cGUpXG57XG4gICAgdmFyIHdlYkdMRGF0YTtcblxuICAgIGlmICghd2ViR0wuZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgd2ViR0xEYXRhLm1vZGUgPSB0eXBlO1xuICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVt3ZWJHTC5kYXRhLmxlbmd0aC0xXTtcblxuICAgICAgICBpZiAoKHdlYkdMRGF0YS5wb2ludHMubGVuZ3RoID4gMzIwMDAwKSB8fCB3ZWJHTERhdGEubW9kZSAhPT0gdHlwZSB8fCB0eXBlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgICAgIHdlYkdMLmRhdGEucHVzaCh3ZWJHTERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd2ViR0xEYXRhLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB3ZWJHTERhdGE7XG59O1xuXG4iLCIvKipcbiAqIEFuIG9iamVjdCBjb250YWluaW5nIFdlYkdMIHNwZWNpZmljIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBXZWJHTEdyYXBoaWNzRGF0YShnbCkge1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLy9UT0RPIGRvZXMgdGhpcyBuZWVkIHRvIGJlIHNwbGl0IGJlZm9yZSB1cGxvZGluZz8/XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgY29sb3IgY29tcG9uZW50cyAocixnLGIpXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5jb2xvciA9IFswLDAsMF07IC8vIGNvbG9yIHNwbGl0IVxuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgcG9pbnRzIHRvIGRyYXdcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50W119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IFtdO1xuICAgIC8qKlxuICAgICAqIFRoZSBtYWluIGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggYnVmZmVyXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogdG9kbyBAYWx2aW5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tb2RlID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgZ3JhcGhpY3MgaXMgZGlydHkgb3Igbm90XG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn1cblxuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xHcmFwaGljc0RhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIFJlc2V0cyB0aGUgdmVydGljZXMgYW5kIHRoZSBpbmRpY2VzXG4gKi9cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnBvaW50cy5sZW5ndGggPSAwO1xuICAgIHRoaXMuaW5kaWNlcy5sZW5ndGggPSAwO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbi8vICAgIHRoaXMubGFzdEluZGV4ID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDtcbiAgICB0aGlzLmdsUG9pbnRzID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnBvaW50cyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5idWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmdsUG9pbnRzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmdsSW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmluZGljZXMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5nbEluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuY29sb3IgPSBudWxsO1xuICAgIHRoaXMucG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIFxuICAgIHRoaXMuZ2wgPSBudWxsO1xuXG4gICAgdGhpcy5idWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5nbFBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5nbEluZGljZXMgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihnbClcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBnbCxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgZmxpcFk7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIHZlYzMgdGludDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvciAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpXG4gICAgKTtcbn1cblxuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHJpbWl0aXZlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBjaXJjbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRyYXdcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDaXJjbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgdmFyIGNpcmNsZURhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSBjaXJjbGVEYXRhLng7XG4gICAgdmFyIHkgPSBjaXJjbGVEYXRhLnk7XG4gICAgdmFyIHdpZHRoO1xuICAgIHZhciBoZWlnaHQ7XG5cbiAgICAvLyBUT0RPIC0gYml0IGhhY2t5Pz9cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSBjaXJjbGVEYXRhLnJhZGl1cztcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS53aWR0aDtcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHRvdGFsU2VncyA9IE1hdGguZmxvb3IoMzAgKiBNYXRoLnNxcnQoY2lyY2xlRGF0YS5yYWRpdXMpKSB8fCBNYXRoLmZsb29yKDE1ICogTWF0aC5zcXJ0KGNpcmNsZURhdGEud2lkdGggKyBjaXJjbGVEYXRhLmhlaWdodCkpO1xuICAgIHZhciBzZWcgPSAoTWF0aC5QSSAqIDIpIC8gdG90YWxTZWdzIDtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTZWdzICsgMSA7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaCh4LHksIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgeSArIE1hdGguY29zKHNlZyAqIGkpICogaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MrKywgdmVjUG9zKyspO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcy0xKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cy5wdXNoKHggKyBNYXRoLnNpbihzZWcgKiBpKSAqIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBidWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENpcmNsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21wbGV4IHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENvbXBsZXhQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vVE9ETyAtIG5vIG5lZWQgdG8gY29weSB0aGlzIGFzIGl0IGdldHMgdHVybmVkIGludG8gYSBGTG9hdDMyQXJyYXkgYW55d2F5cy4uXG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHMuc2xpY2UoKTtcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB3ZWJHTERhdGEucG9pbnRzID0gcG9pbnRzO1xuICAgIHdlYkdMRGF0YS5hbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgd2ViR0xEYXRhLmNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcblxuICAgIC8vIGNhbGNsYXRlIHRoZSBib3VuZHMuLlxuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgdmFyIHgseTtcblxuICAgIC8vIGdldCBzaXplLi5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrPTIpXG4gICAge1xuICAgICAgICB4ID0gcG9pbnRzW2ldO1xuICAgICAgICB5ID0gcG9pbnRzW2krMV07XG5cbiAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBxdWFkIHRvIHRoZSBlbmQgY29zIHRoZXJlIGlzIG5vIHBvaW50IG1ha2luZyBhbm90aGVyIGJ1ZmZlciFcbiAgICBwb2ludHMucHVzaChtaW5YLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWF4WSxcbiAgICAgICAgICAgICAgICBtaW5YLCBtYXhZKTtcblxuICAgIC8vIHB1c2ggYSBxdWFkIG9udG8gdGhlIGVuZC4uXG5cbiAgICAvL1RPRE8gLSB0aGlzIGFpbnQgbmVlZGVkIVxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goIGkgKTtcbiAgICB9XG5cbn07XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29tcGxleFBvbHk7IiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZExpbmUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gVE9ETyBPUFRJTUlTRSFcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGxpbmUgd2lkdGggaXMgYW4gb2RkIG51bWJlciBhZGQgMC41IHRvIGFsaWduIHRvIGEgd2hvbGUgcGl4ZWxcbiAgICAvLyBjb21tZW50aW5nIHRoaXMgb3V0IGZpeGVzICM3MTEgYW5kICMxNjIwXG4gICAgLy8gaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGglMilcbiAgICAvLyB7XG4gICAgLy8gICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAgIHBvaW50c1tpXSArPSAwLjU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGZpcnN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgdmFyIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IHBvaW50IGlzIHRoZSBsYXN0IHBvaW50IC0gZ29ubmEgaGF2ZSBpc3N1ZXMgOilcbiAgICBpZiAoZmlyc3RQb2ludC54ID09PSBsYXN0UG9pbnQueCAmJiBmaXJzdFBvaW50LnkgPT09IGxhc3RQb2ludC55KVxuICAgIHtcbiAgICAgICAgLy8gbmVlZCB0byBjbG9uZSBhcyB3ZSBhcmUgZ29pbmcgdG8gc2xpZ2h0bHkgbW9kaWZ5IHRoZSBzaGFwZS4uXG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5zbGljZSgpO1xuXG4gICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHZhciBtaWRQb2ludFggPSBsYXN0UG9pbnQueCArIChmaXJzdFBvaW50LnggLSBsYXN0UG9pbnQueCkgKjAuNTtcbiAgICAgICAgdmFyIG1pZFBvaW50WSA9IGxhc3RQb2ludC55ICsgKGZpcnN0UG9pbnQueSAtIGxhc3RQb2ludC55KSAqMC41O1xuXG4gICAgICAgIHBvaW50cy51bnNoaWZ0KG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICAgICAgcG9pbnRzLnB1c2gobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgdmFyIGluZGV4Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIHZhciBpbmRleFN0YXJ0ID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAvLyBEUkFXIHRoZSBMaW5lXG4gICAgdmFyIHdpZHRoID0gZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEubGluZUNvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEubGluZUFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHB4LCBweSwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeTtcbiAgICB2YXIgcGVycHgsIHBlcnB5LCBwZXJwMngsIHBlcnAyeSwgcGVycDN4LCBwZXJwM3k7XG4gICAgdmFyIGExLCBiMSwgYzEsIGEyLCBiMiwgYzI7XG4gICAgdmFyIGRlbm9tLCBwZGlzdCwgZGlzdDtcblxuICAgIHAxeCA9IHBvaW50c1swXTtcbiAgICBwMXkgPSBwb2ludHNbMV07XG5cbiAgICBwMnggPSBwb2ludHNbMl07XG4gICAgcDJ5ID0gcG9pbnRzWzNdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSAgcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcblxuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIC8vIHN0YXJ0XG4gICAgdmVydHMucHVzaChwMXggLSBwZXJweCAsIHAxeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDF4ICsgcGVycHggLCBwMXkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoLTE7IGkrKylcbiAgICB7XG4gICAgICAgIHAxeCA9IHBvaW50c1soaS0xKSoyXTtcbiAgICAgICAgcDF5ID0gcG9pbnRzWyhpLTEpKjIgKyAxXTtcblxuICAgICAgICBwMnggPSBwb2ludHNbKGkpKjJdO1xuICAgICAgICBwMnkgPSBwb2ludHNbKGkpKjIgKyAxXTtcblxuICAgICAgICBwM3ggPSBwb2ludHNbKGkrMSkqMl07XG4gICAgICAgIHAzeSA9IHBvaW50c1soaSsxKSoyICsgMV07XG5cbiAgICAgICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgICAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgICAgICBwZXJwMnggPSAtKHAyeSAtIHAzeSk7XG4gICAgICAgIHBlcnAyeSA9IHAyeCAtIHAzeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAyeCpwZXJwMnggKyBwZXJwMnkqcGVycDJ5KTtcbiAgICAgICAgcGVycDJ4IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeSAvPSBkaXN0O1xuICAgICAgICBwZXJwMnggKj0gd2lkdGg7XG4gICAgICAgIHBlcnAyeSAqPSB3aWR0aDtcblxuICAgICAgICBhMSA9ICgtcGVycHkgKyBwMXkpIC0gKC1wZXJweSArIHAyeSk7XG4gICAgICAgIGIxID0gKC1wZXJweCArIHAyeCkgLSAoLXBlcnB4ICsgcDF4KTtcbiAgICAgICAgYzEgPSAoLXBlcnB4ICsgcDF4KSAqICgtcGVycHkgKyBwMnkpIC0gKC1wZXJweCArIHAyeCkgKiAoLXBlcnB5ICsgcDF5KTtcbiAgICAgICAgYTIgPSAoLXBlcnAyeSArIHAzeSkgLSAoLXBlcnAyeSArIHAyeSk7XG4gICAgICAgIGIyID0gKC1wZXJwMnggKyBwMngpIC0gKC1wZXJwMnggKyBwM3gpO1xuICAgICAgICBjMiA9ICgtcGVycDJ4ICsgcDN4KSAqICgtcGVycDJ5ICsgcDJ5KSAtICgtcGVycDJ4ICsgcDJ4KSAqICgtcGVycDJ5ICsgcDN5KTtcblxuICAgICAgICBkZW5vbSA9IGExKmIyIC0gYTIqYjE7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8IDAuMSApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgZGVub20rPTEwLjE7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4ID0gKGIxKmMyIC0gYjIqYzEpL2Rlbm9tO1xuICAgICAgICBweSA9IChhMipjMSAtIGExKmMyKS9kZW5vbTtcblxuXG4gICAgICAgIHBkaXN0ID0gKHB4IC1wMngpICogKHB4IC1wMngpICsgKHB5IC1wMnkpICogKHB5IC1wMnkpO1xuXG5cbiAgICAgICAgaWYgKHBkaXN0ID4gMTQwICogMTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICBwZXJwM3ggPSBwZXJweCAtIHBlcnAyeDtcbiAgICAgICAgICAgIHBlcnAzeSA9IHBlcnB5IC0gcGVycDJ5O1xuXG4gICAgICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAzeCpwZXJwM3ggKyBwZXJwM3kqcGVycDN5KTtcbiAgICAgICAgICAgIHBlcnAzeCAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN5IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3ggKj0gd2lkdGg7XG4gICAgICAgICAgICBwZXJwM3kgKj0gd2lkdGg7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJwM3gsIHAyeSArcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGV4Q291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmVydHMucHVzaChweCAsIHB5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIChweC1wMngpLCBwMnkgLSAocHkgLSBwMnkpKTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcDF4ID0gcG9pbnRzWyhsZW5ndGgtMikqMl07XG4gICAgcDF5ID0gcG9pbnRzWyhsZW5ndGgtMikqMiArIDFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWyhsZW5ndGgtMSkqMl07XG4gICAgcDJ5ID0gcG9pbnRzWyhsZW5ndGgtMSkqMiArIDFdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KyspO1xuICAgIH1cblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0LTEpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZExpbmU7IiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5XZWJHTEdyYXBoaWNzRGF0YX0gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChwb2ludHMsIG51bGwsIDIpO1xuXG4gICAgaWYgKCF0cmlhbmdsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoIC8gNjtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gK3ZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZXJ0UG9zKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2ZXJ0cy5wdXNoKHBvaW50c1tpICogMl0sIHBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFBvbHk7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gLS0tIC8vXG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgLy9cbiAgICB2YXIgcmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSByZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSByZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICAvLyBzdGFydFxuICAgICAgICB2ZXJ0cy5wdXNoKHgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCAsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIC8vIGluc2VydCAyIGRlYWQgdHJpYW5nbGVzLi5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRQb3MsIHZlcnRQb3MsIHZlcnRQb3MrMSwgdmVydFBvcysyLCB2ZXJ0UG9zKzMsIHZlcnRQb3MrMyk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFt4LCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHldO1xuXG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUmVjdGFuZ2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcbiAgICBcbi8qKlxuICogQnVpbGRzIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbmJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcnJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcnJlY3REYXRhLng7XG4gICAgdmFyIHkgPSBycmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSBycmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJyZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICB2YXIgcmFkaXVzID0gcnJlY3REYXRhLnJhZGl1cztcblxuICAgIHZhciByZWNQb2ludHMgPSBbXTtcbiAgICByZWNQb2ludHMucHVzaCh4LCB5ICsgcmFkaXVzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHgsIHkgKyBoZWlnaHQsIHggKyByYWRpdXMsIHkgKyBoZWlnaHQsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoLCB5ICsgcmFkaXVzLCB4ICsgd2lkdGgsIHksIHggKyB3aWR0aCAtIHJhZGl1cywgeSwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyByYWRpdXMsIHksIHgsIHksIHgsIHkgKyByYWRpdXMgKyAwLjAwMDAwMDAwMDEsIHJlY1BvaW50cyk7XG5cbiAgICAvLyB0aGlzIHRpbnkgbnVtYmVyIGRlYWxzIHdpdGggdGhlIGlzc3VlIHRoYXQgb2NjdXJzIHdoZW4gcG9pbnRzIG92ZXJsYXAgYW5kIGVhcmN1dCBmYWlscyB0byB0cmlhbmd1bGF0ZSB0aGUgaXRlbS5cbiAgICAvLyBUT0RPIC0gZml4IHRoaXMgcHJvcGVybHksIHRoaXMgaXMgbm90IHZlcnkgZWxlZ2FudC4uIGJ1dCBpdCB3b3JrcyBmb3Igbm93LlxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocmVjUG9pbnRzLCBudWxsLCAyKTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlY1BvaW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaChyZWNQb2ludHNbaV0sIHJlY1BvaW50c1srK2ldLCByLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gcmVjUG9pbnRzO1xuXG4gICAgICAgIHRoaXMuYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUuIChoZWxwZXIgZnVuY3Rpb24uLilcbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZyb21YIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gZnJvbVkge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEBwYXJhbSBbb3V0XSB7bnVtYmVyW119IFRoZSBvdXRwdXQgYXJyYXkgdG8gYWRkIHBvaW50cyBpbnRvLiBJZiBub3QgcGFzc2VkLCBhIG5ldyBhcnJheSBpcyBjcmVhdGVkLlxuICogQHJldHVybiB7bnVtYmVyW119IGFuIGFycmF5IG9mIHBvaW50c1xuICovXG5xdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IGZ1bmN0aW9uIChmcm9tWCwgZnJvbVksIGNwWCwgY3BZLCB0b1gsIHRvWSwgb3V0KVxue1xuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIHhiLFxuICAgICAgICB5YixcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSBvdXQgfHwgW107XG5cbiAgICBmdW5jdGlvbiBnZXRQdChuMSAsIG4yLCBwZXJjKSB7XG4gICAgICAgIHZhciBkaWZmID0gbjIgLSBuMTtcblxuICAgICAgICByZXR1cm4gbjEgKyAoIGRpZmYgKiBwZXJjICk7XG4gICAgfVxuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKyApIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIC8vIFRoZSBHcmVlbiBMaW5lXG4gICAgICAgIHhhID0gZ2V0UHQoIGZyb21YICwgY3BYICwgaiApO1xuICAgICAgICB5YSA9IGdldFB0KCBmcm9tWSAsIGNwWSAsIGogKTtcbiAgICAgICAgeGIgPSBnZXRQdCggY3BYICwgdG9YICwgaiApO1xuICAgICAgICB5YiA9IGdldFB0KCBjcFkgLCB0b1kgLCBqICk7XG5cbiAgICAgICAgLy8gVGhlIEJsYWNrIERvdFxuICAgICAgICB4ID0gZ2V0UHQoIHhhICwgeGIgLCBqICk7XG4gICAgICAgIHkgPSBnZXRQdCggeWEgLCB5YiAsIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUm91bmRlZFJlY3RhbmdsZTsiLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBjb3JlIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSVxuICovXG4vLyBleHBvcnQgY29yZSBhbmQgY29uc3QuIFdlIGFzc2lnbiBjb3JlIHRvIGNvbnN0IHNvIHRoYXQgdGhlIG5vbi1yZWZlcmVuY2UgdHlwZXMgaW4gY29uc3QgcmVtYWluIGluLXRhY3RcbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduKHJlcXVpcmUoJy4vY29uc3QnKSwgcmVxdWlyZSgnLi9tYXRoJyksIHtcbiAgICAvLyB1dGlsc1xuICAgIHV0aWxzOiByZXF1aXJlKCcuL3V0aWxzJyksXG4gICAgdGlja2VyOiByZXF1aXJlKCcuL3RpY2tlcicpLFxuXG4gICAgLy8gZGlzcGxheVxuICAgIERpc3BsYXlPYmplY3Q6ICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9EaXNwbGF5T2JqZWN0JyksXG4gICAgQ29udGFpbmVyOiAgICAgICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuXG4gICAgLy8gc3ByaXRlc1xuICAgIFNwcml0ZTogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBQYXJ0aWNsZUNvbnRhaW5lcjogICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lcicpLFxuICAgIFNwcml0ZVJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHRcbiAgICBUZXh0OiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHQvVGV4dCcpLFxuXG4gICAgLy8gcHJpbWl0aXZlc1xuICAgIEdyYXBoaWNzOiAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGE6ICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRGF0YScpLFxuICAgIEdyYXBoaWNzUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dHVyZXNcbiAgICBUZXh0dXJlOiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBCYXNlVGV4dHVyZTogICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL0Jhc2VUZXh0dXJlJyksXG4gICAgUmVuZGVyVGV4dHVyZTogICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgQmFzZVJlbmRlclRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmU6ICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnM6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVGV4dHVyZVV2cycpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gY2FudmFzXG4gICAgQ2FudmFzUmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyJyksXG4gICAgQ2FudmFzR3JhcGhpY3M6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzJyksXG4gICAgQ2FudmFzQnVmZmVyOiAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gd2ViZ2xcbiAgICBXZWJHTFJlbmRlcmVyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgU2hhZGVyOiAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXInKSxcbiAgICBPYmplY3RSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFJlbmRlclRhcmdldDogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuXG4gICAgLy8gZmlsdGVycyAtIHdlYmdsXG4gICAgQWJzdHJhY3RGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlcicpLFxuICAgIEZYQUFGaWx0ZXI6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFNwcml0ZU1hc2tGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlcicpLFxuXG4gICAgZ2xDb3JlOiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3Qgd2hpY2ggcmVuZGVyZXIgeW91IHNob3VsZCBiZSB1c2luZy5cbiAgICAgKiBXZWJHTCBpcyB0aGUgcHJlZmVycmVkIHJlbmRlcmVyIGFzIGl0IGlzIGEgbG90IGZhc3Rlci4gSWYgd2ViR0wgaXMgbm90IHN1cHBvcnRlZCBieVxuICAgICAqIHRoZSBicm93c2VyIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhIGNhbnZhcyByZW5kZXJlclxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAcGFyYW0gd2lkdGg9ODAwIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gaGVpZ2h0PTYwMCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSByZW5kZXJlcnMgdmlld1xuICAgICAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gICAgICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZV0ge2Jvb2xlYW59IGVuYWJsZXMgZHJhd2luZyBidWZmZXIgcHJlc2VydmF0aW9uLCBlbmFibGUgdGhpcyBpZiB5b3VcbiAgICAgKiAgICAgIG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIsIHJldGluYSB3b3VsZCBiZSAyXG4gICAgICogQHBhcmFtIFtub1dlYkdMPWZhbHNlXSB7Ym9vbGVhbn0gcHJldmVudHMgc2VsZWN0aW9uIG9mIFdlYkdMIHJlbmRlcmVyLCBldmVuIGlmIHN1Y2ggaXMgcHJlc2VudFxuICAgICAqXG4gICAgICogQHJldHVybiB7V2ViR0xSZW5kZXJlcnxDYW52YXNSZW5kZXJlcn0gUmV0dXJucyBXZWJHTCByZW5kZXJlciBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBDYW52YXNSZW5kZXJlclxuICAgICAqL1xuICAgIGF1dG9EZXRlY3RSZW5kZXJlcjogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMsIG5vV2ViR0wpXG4gICAge1xuICAgICAgICB3aWR0aCA9IHdpZHRoIHx8IDgwMDtcbiAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0IHx8IDYwMDtcblxuICAgICAgICBpZiAoIW5vV2ViR0wgJiYgY29yZS51dGlscy5pc1dlYkdMU3VwcG9ydGVkKCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgY29yZS5XZWJHTFJlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBjb3JlLkNhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgIH1cbn0pO1xuIiwiLy8gQHRvZG8gLSBpZ25vcmUgdGhlIHRvbyBtYW55IHBhcmFtZXRlcnMgd2FybmluZyBmb3Igbm93XG4vLyBzaG91bGQgZWl0aGVyIGZpeCBpdCBvciBjaGFuZ2UgdGhlIGpzaGludCBjb25maWdcbi8vIGpzaGludCAtVzA3MlxuXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuL1BvaW50Jyk7XG5cbi8qKlxuICogVGhlIHBpeGkgTWF0cml4IGNsYXNzIGFzIGFuIG9iamVjdCwgd2hpY2ggbWFrZXMgaXQgYSBsb3QgZmFzdGVyLFxuICogaGVyZSBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIGl0IDpcbiAqIHwgYSB8IGIgfCB0eHxcbiAqIHwgYyB8IGQgfCB0eXxcbiAqIHwgMCB8IDAgfCAxIHxcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIE1hdHJpeCgpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmIgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmMgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnR4ID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eSA9IDA7XG59XG5cbk1hdHJpeC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNYXRyaXg7XG5tb2R1bGUuZXhwb3J0cyA9IE1hdHJpeDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgTWF0cml4IG9iamVjdCBiYXNlZCBvbiB0aGUgZ2l2ZW4gYXJyYXkuIFRoZSBFbGVtZW50IHRvIE1hdHJpeCBtYXBwaW5nIG9yZGVyIGlzIGFzIGZvbGxvd3M6XG4gKlxuICogYSA9IGFycmF5WzBdXG4gKiBiID0gYXJyYXlbMV1cbiAqIGMgPSBhcnJheVszXVxuICogZCA9IGFycmF5WzRdXG4gKiB0eCA9IGFycmF5WzJdXG4gKiB0eSA9IGFycmF5WzVdXG4gKlxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX0gVGhlIGFycmF5IHRoYXQgdGhlIG1hdHJpeCB3aWxsIGJlIHBvcHVsYXRlZCBmcm9tLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJheSlcbntcbiAgICB0aGlzLmEgPSBhcnJheVswXTtcbiAgICB0aGlzLmIgPSBhcnJheVsxXTtcbiAgICB0aGlzLmMgPSBhcnJheVszXTtcbiAgICB0aGlzLmQgPSBhcnJheVs0XTtcbiAgICB0aGlzLnR4ID0gYXJyYXlbMl07XG4gICAgdGhpcy50eSA9IGFycmF5WzVdO1xufTtcblxuXG4vKipcbiAqIHNldHMgdGhlIG1hdHJpeCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gKiBAcGFyYW0ge251bWJlcn0gY1xuICogQHBhcmFtIHtudW1iZXJ9IGRcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eFxuICogQHBhcmFtIHtudW1iZXJ9IHR5XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHR4LCB0eSlcbntcbiAgICB0aGlzLmEgPSBhO1xuICAgIHRoaXMuYiA9IGI7XG4gICAgdGhpcy5jID0gYztcbiAgICB0aGlzLmQgPSBkO1xuICAgIHRoaXMudHggPSB0eDtcbiAgICB0aGlzLnR5ID0gdHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGZyb20gdGhlIGN1cnJlbnQgTWF0cml4IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3NlIHtib29sZWFufSBXaGV0aGVyIHdlIG5lZWQgdG8gdHJhbnNwb3NlIHRoZSBtYXRyaXggb3Igbm90XG4gKiBAcGFyYW0gW291dF0ge0FycmF5fSBJZiBwcm92aWRlZCB0aGUgYXJyYXkgd2lsbCBiZSBhc3NpZ25lZCB0byBvdXRcbiAqIEByZXR1cm4ge251bWJlcltdfSB0aGUgbmV3bHkgY3JlYXRlZCBhcnJheSB3aGljaCBjb250YWlucyB0aGUgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICh0cmFuc3Bvc2UsIG91dClcbntcbiAgICBpZiAoIXRoaXMuYXJyYXkpXG4gICAge1xuICAgICAgICB0aGlzLmFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg5KTtcbiAgICB9XG5cbiAgICB2YXIgYXJyYXkgPSBvdXQgfHwgdGhpcy5hcnJheTtcblxuICAgIGlmICh0cmFuc3Bvc2UpXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzJdID0gMDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IDA7XG4gICAgICAgIGFycmF5WzZdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbN10gPSB0aGlzLnR5O1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGFycmF5WzBdID0gdGhpcy5hO1xuICAgICAgICBhcnJheVsxXSA9IHRoaXMuYztcbiAgICAgICAgYXJyYXlbMl0gPSB0aGlzLnR4O1xuICAgICAgICBhcnJheVszXSA9IHRoaXMuYjtcbiAgICAgICAgYXJyYXlbNF0gPSB0aGlzLmQ7XG4gICAgICAgIGFycmF5WzVdID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbNl0gPSAwO1xuICAgICAgICBhcnJheVs3XSA9IDA7XG4gICAgICAgIGFycmF5WzhdID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59O1xuXG4vKipcbiAqIEdldCBhIG5ldyBwb3NpdGlvbiB3aXRoIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXG4gKiBDYW4gYmUgdXNlZCB0byBnbyBmcm9tIGEgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlIHRvIHRoZSB3b3JsZCBjb29yZGluYXRlIHNwYWNlLiAoZS5nLiByZW5kZXJpbmcpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCB0cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIHggPSBwb3MueDtcbiAgICB2YXIgeSA9IHBvcy55O1xuXG4gICAgbmV3UG9zLnggPSB0aGlzLmEgKiB4ICsgdGhpcy5jICogeSArIHRoaXMudHg7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmIgKiB4ICsgdGhpcy5kICogeSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gbmV3UG9zO1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgaW52ZXJzZSBvZiB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZSB0byBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gaW5wdXQpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCBpbnZlcnNlLXRyYW5zZm9ybWVkIHRocm91Z2ggdGhpcyBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBseUludmVyc2UgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIGlkID0gMSAvICh0aGlzLmEgKiB0aGlzLmQgKyB0aGlzLmMgKiAtdGhpcy5iKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5kICogaWQgKiB4ICsgLXRoaXMuYyAqIGlkICogeSArICh0aGlzLnR5ICogdGhpcy5jIC0gdGhpcy50eCAqIHRoaXMuZCkgKiBpZDtcbiAgICBuZXdQb3MueSA9IHRoaXMuYSAqIGlkICogeSArIC10aGlzLmIgKiBpZCAqIHggKyAoLXRoaXMudHkgKiB0aGlzLmEgKyB0aGlzLnR4ICogdGhpcy5iKSAqIGlkO1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogVHJhbnNsYXRlcyB0aGUgbWF0cml4IG9uIHRoZSB4IGFuZCB5LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudHJhbnNsYXRlID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy50eCArPSB4O1xuICAgIHRoaXMudHkgKz0geTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgc2NhbGUgdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geCBUaGUgYW1vdW50IHRvIHNjYWxlIGhvcml6b250YWxseVxuICogQHBhcmFtIHtudW1iZXJ9IHkgVGhlIGFtb3VudCB0byBzY2FsZSB2ZXJ0aWNhbGx5XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zY2FsZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuYSAqPSB4O1xuICAgIHRoaXMuZCAqPSB5O1xuICAgIHRoaXMuYyAqPSB4O1xuICAgIHRoaXMuYiAqPSB5O1xuICAgIHRoaXMudHggKj0geDtcbiAgICB0aGlzLnR5ICo9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBBcHBsaWVzIGEgcm90YXRpb24gdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgaW4gcmFkaWFucy5cbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZSA9IGZ1bmN0aW9uIChhbmdsZSlcbntcbiAgICB2YXIgY29zID0gTWF0aC5jb3MoIGFuZ2xlICk7XG4gICAgdmFyIHNpbiA9IE1hdGguc2luKCBhbmdsZSApO1xuXG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIHRoaXMuYSA9IGExICogY29zLXRoaXMuYiAqIHNpbjtcbiAgICB0aGlzLmIgPSBhMSAqIHNpbit0aGlzLmIgKiBjb3M7XG4gICAgdGhpcy5jID0gYzEgKiBjb3MtdGhpcy5kICogc2luO1xuICAgIHRoaXMuZCA9IGMxICogc2luK3RoaXMuZCAqIGNvcztcbiAgICB0aGlzLnR4ID0gdHgxICogY29zIC0gdGhpcy50eSAqIHNpbjtcbiAgICB0aGlzLnR5ID0gdHgxICogc2luICsgdGhpcy50eSAqIGNvcztcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcblxuICAgIHRoaXMuYSAgPSBtYXRyaXguYSAqIGExICsgbWF0cml4LmIgKiBjMTtcbiAgICB0aGlzLmIgID0gbWF0cml4LmEgKiBiMSArIG1hdHJpeC5iICogZDE7XG4gICAgdGhpcy5jICA9IG1hdHJpeC5jICogYTEgKyBtYXRyaXguZCAqIGMxO1xuICAgIHRoaXMuZCAgPSBtYXRyaXguYyAqIGIxICsgbWF0cml4LmQgKiBkMTtcblxuICAgIHRoaXMudHggPSBtYXRyaXgudHggKiBhMSArIG1hdHJpeC50eSAqIGMxICsgdGhpcy50eDtcbiAgICB0aGlzLnR5ID0gbWF0cml4LnR4ICogYjEgKyBtYXRyaXgudHkgKiBkMSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbWF0cml4IGJhc2VkIG9uIGFsbCB0aGUgYXZhaWxhYmxlIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFhcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFlcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVlcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3RhdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdYXG4gKiBAcGFyYW0ge251bWJlcn0gc2tld1lcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoeCwgeSwgcGl2b3RYLCBwaXZvdFksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZKVxue1xuICAgIHZhciBhLCBiLCBjLCBkLCBzciwgY3IsIGN5LCBzeSwgbnN4LCBjeDtcblxuICAgIHNyICA9IE1hdGguc2luKHJvdGF0aW9uKTtcbiAgICBjciAgPSBNYXRoLmNvcyhyb3RhdGlvbik7XG4gICAgY3kgID0gTWF0aC5jb3Moc2tld1kpO1xuICAgIHN5ICA9IE1hdGguc2luKHNrZXdZKTtcbiAgICBuc3ggPSAtTWF0aC5zaW4oc2tld1gpO1xuICAgIGN4ICA9ICBNYXRoLmNvcyhza2V3WCk7XG5cbiAgICBhICA9ICBjciAqIHNjYWxlWDtcbiAgICBiICA9ICBzciAqIHNjYWxlWDtcbiAgICBjICA9IC1zciAqIHNjYWxlWTtcbiAgICBkICA9ICBjciAqIHNjYWxlWTtcblxuICAgIHRoaXMuYSAgPSBjeSAqIGEgKyBzeSAqIGM7XG4gICAgdGhpcy5iICA9IGN5ICogYiArIHN5ICogZDtcbiAgICB0aGlzLmMgID0gbnN4ICogYSArIGN4ICogYztcbiAgICB0aGlzLmQgID0gbnN4ICogYiArIGN4ICogZDtcblxuICAgIHRoaXMudHggPSB4ICsgKCBwaXZvdFggKiBhICsgcGl2b3RZICogYyApO1xuICAgIHRoaXMudHkgPSB5ICsgKCBwaXZvdFggKiBiICsgcGl2b3RZICogZCApO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFByZXBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24obWF0cml4KVxue1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuXG4gICAgaWYgKG1hdHJpeC5hICE9PSAxIHx8IG1hdHJpeC5iICE9PSAwIHx8IG1hdHJpeC5jICE9PSAwIHx8IG1hdHJpeC5kICE9PSAxKVxuICAgIHtcbiAgICAgICAgdmFyIGExID0gdGhpcy5hO1xuICAgICAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgICAgIHRoaXMuYSAgPSBhMSptYXRyaXguYSt0aGlzLmIqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuYiAgPSBhMSptYXRyaXguYit0aGlzLmIqbWF0cml4LmQ7XG4gICAgICAgIHRoaXMuYyAgPSBjMSptYXRyaXguYSt0aGlzLmQqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuZCAgPSBjMSptYXRyaXguYit0aGlzLmQqbWF0cml4LmQ7XG4gICAgfVxuXG4gICAgdGhpcy50eCA9IHR4MSptYXRyaXguYSt0aGlzLnR5Km1hdHJpeC5jK21hdHJpeC50eDtcbiAgICB0aGlzLnR5ID0gdHgxKm1hdHJpeC5iK3RoaXMudHkqbWF0cml4LmQrbWF0cml4LnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEludmVydHMgdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5pbnZlcnQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBiMSA9IHRoaXMuYjtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIGQxID0gdGhpcy5kO1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuICAgIHZhciBuID0gYTEqZDEtYjEqYzE7XG5cbiAgICB0aGlzLmEgPSBkMS9uO1xuICAgIHRoaXMuYiA9IC1iMS9uO1xuICAgIHRoaXMuYyA9IC1jMS9uO1xuICAgIHRoaXMuZCA9IGExL247XG4gICAgdGhpcy50eCA9IChjMSp0aGlzLnR5LWQxKnR4MSkvbjtcbiAgICB0aGlzLnR5ID0gLShhMSp0aGlzLnR5LWIxKnR4MSkvbjtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIFJlc2V0cyB0aGlzIE1hdGl4IHRvIGFuIGlkZW50aXR5IChkZWZhdWx0KSBtYXRyaXguXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaWRlbnRpdHkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYSA9IDE7XG4gICAgdGhpcy5iID0gMDtcbiAgICB0aGlzLmMgPSAwO1xuICAgIHRoaXMuZCA9IDE7XG4gICAgdGhpcy50eCA9IDA7XG4gICAgdGhpcy50eSA9IDA7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBNYXRyaXggb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBBIGNvcHkgb2YgdGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1hdHJpeCA9IG5ldyBNYXRyaXgoKTtcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSB2YWx1ZXMgb2YgdGhlIGdpdmVuIG1hdHJpeCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgb25lcyBpbiB0aGlzIG1hdHJpeFxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGUgbWF0cml4IGdpdmVuIGluIHBhcmFtZXRlciB3aXRoIGl0cyB2YWx1ZXMgdXBkYXRlZC5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBBIGRlZmF1bHQgKGlkZW50aXR5KSBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LklERU5USVRZID0gbmV3IE1hdHJpeCgpO1xuXG4vKipcbiAqIEEgdGVtcCBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LlRFTVBfTUFUUklYID0gbmV3IE1hdHJpeCgpO1xuIiwiLyoqXG4gKiBUaGUgUG9pbnQgb2JqZWN0IHJlcHJlc2VudHMgYSBsb2NhdGlvbiBpbiBhIHR3by1kaW1lbnNpb25hbCBjb29yZGluYXRlIHN5c3RlbSwgd2hlcmUgeCByZXByZXNlbnRzXG4gKiB0aGUgaG9yaXpvbnRhbCBheGlzIGFuZCB5IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIGF4aXMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXNcbiAqL1xuZnVuY3Rpb24gUG9pbnQoeCwgeSlcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xufVxuXG5Qb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2ludDtcbm1vZHVsZS5leHBvcnRzID0gUG9pbnQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9pbnRcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBhIGNvcHkgb2YgdGhlIHBvaW50XG4gKi9cblBvaW50LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLngsIHRoaXMueSk7XG59O1xuXG4vKipcbiAqIENvcGllcyB4IGFuZCB5IGZyb20gdGhlIGdpdmVuIHBvaW50XG4gKlxuICogQHBhcmFtIHAge1BJWEkuUG9pbnR9XG4gKi9cblBvaW50LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKHApIHtcbiAgICB0aGlzLnNldChwLngsIHAueSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcG9pbnQgaXMgZXF1YWwgdG8gdGhpcyBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cblBvaW50LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiAocC54ID09PSB0aGlzLngpICYmIChwLnkgPT09IHRoaXMueSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIHBvaW50IHRvIGEgbmV3IHggYW5kIHkgcG9zaXRpb24uXG4gKiBJZiB5IGlzIG9taXR0ZWQsIGJvdGggeCBhbmQgeSB3aWxsIGJlIHNldCB0byB4LlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cblBvaW50LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLnggPSB4IHx8IDA7XG4gICAgdGhpcy55ID0geSB8fCAoICh5ICE9PSAwKSA/IHRoaXMueCA6IDAgKSA7XG59O1xuIiwiLyoqXG4gKiBNYXRoIGNsYXNzZXMgYW5kIHV0aWxpdGllcyBtaXhlZCBpbnRvIFBJWEkgbmFtZXNwYWNlLlxuICpcbiAqIEBsZW5kcyBQSVhJXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8vIFRoZXNlIHdpbGwgYmUgbWl4ZWQgdG8gYmUgbWFkZSBwdWJsaWNseSBhdmFpbGFibGUsXG4gICAgLy8gd2hpbGUgdGhpcyBtb2R1bGUgaXMgdXNlZCBpbnRlcm5hbGx5IGluIGNvcmVcbiAgICAvLyB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYW5kIGN1dCBkb3duIG9uXG4gICAgLy8gaW50ZXJuYWwgbW9kdWxlIHJlcXVpcmVzLlxuXG4gICAgUG9pbnQ6ICAgICAgcmVxdWlyZSgnLi9Qb2ludCcpLFxuICAgIE1hdHJpeDogICAgIHJlcXVpcmUoJy4vTWF0cml4JyksXG5cbiAgICBDaXJjbGU6ICAgICByZXF1aXJlKCcuL3NoYXBlcy9DaXJjbGUnKSxcbiAgICBFbGxpcHNlOiAgICByZXF1aXJlKCcuL3NoYXBlcy9FbGxpcHNlJyksXG4gICAgUG9seWdvbjogICAgcmVxdWlyZSgnLi9zaGFwZXMvUG9seWdvbicpLFxuICAgIFJlY3RhbmdsZTogIHJlcXVpcmUoJy4vc2hhcGVzL1JlY3RhbmdsZScpLFxuICAgIFJvdW5kZWRSZWN0YW5nbGU6IHJlcXVpcmUoJy4vc2hhcGVzL1JvdW5kZWRSZWN0YW5nbGUnKVxufTtcbiIsInZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2lyY2xlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKi9cbmZ1bmN0aW9uIENpcmNsZSh4LCB5LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuQ0lSQztcbn1cblxuQ2lyY2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENpcmNsZTtcbm1vZHVsZS5leHBvcnRzID0gQ2lyY2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIENpcmNsZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuQ2lyY2xlfSBhIGNvcHkgb2YgdGhlIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IENpcmNsZSh0aGlzLngsIHRoaXMueSwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGNpcmNsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgQ2lyY2xlXG4gKi9cbkNpcmNsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy5yYWRpdXMgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgZHggPSAodGhpcy54IC0geCksXG4gICAgICAgIGR5ID0gKHRoaXMueSAtIHkpLFxuICAgICAgICByMiA9IHRoaXMucmFkaXVzICogdGhpcy5yYWRpdXM7XG5cbiAgICBkeCAqPSBkeDtcbiAgICBkeSAqPSBkeTtcblxuICAgIHJldHVybiAoZHggKyBkeSA8PSByMik7XG59O1xuXG4vKipcbiogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIGNpcmNsZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuKi9cbkNpcmNsZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLnJhZGl1cywgdGhpcy55IC0gdGhpcy5yYWRpdXMsIHRoaXMucmFkaXVzICogMiwgdGhpcy5yYWRpdXMgKiAyKTtcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIEVsbGlwc2Ugb2JqZWN0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBoaXQgYXJlYSBmb3IgZGlzcGxheU9iamVjdHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBoYWxmIHdpZHRoIG9mIHRoaXMgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhpcyBlbGxpcHNlXG4gKi9cbmZ1bmN0aW9uIEVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuRUxJUDtcbn1cblxuRWxsaXBzZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFbGxpcHNlO1xubW9kdWxlLmV4cG9ydHMgPSBFbGxpcHNlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIEVsbGlwc2UgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkVsbGlwc2V9IGEgY29weSBvZiB0aGUgZWxsaXBzZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBFbGxpcHNlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgZWxsaXBzZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZHMgYXJlIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy9ub3JtYWxpemUgdGhlIGNvb3JkcyB0byBhbiBlbGxpcHNlIHdpdGggY2VudGVyIDAsMFxuICAgIHZhciBub3JteCA9ICgoeCAtIHRoaXMueCkgLyB0aGlzLndpZHRoKSxcbiAgICAgICAgbm9ybXkgPSAoKHkgLSB0aGlzLnkpIC8gdGhpcy5oZWlnaHQpO1xuXG4gICAgbm9ybXggKj0gbm9ybXg7XG4gICAgbm9ybXkgKj0gbm9ybXk7XG5cbiAgICByZXR1cm4gKG5vcm14ICsgbm9ybXkgPD0gMSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBlbGxpcHNlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLndpZHRoLCB0aGlzLnkgLSB0aGlzLmhlaWdodCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcbiIsInZhciBQb2ludCA9IHJlcXVpcmUoJy4uL1BvaW50JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBwb2ludHMge1BJWEkuUG9pbnRbXXxudW1iZXJbXXwuLi5QSVhJLlBvaW50fC4uLm51bWJlcn0gVGhpcyBjYW4gYmUgYW4gYXJyYXkgb2YgUG9pbnRzIHRoYXQgZm9ybSB0aGUgcG9seWdvbixcbiAqICAgICAgYSBmbGF0IGFycmF5IG9mIG51bWJlcnMgdGhhdCB3aWxsIGJlIGludGVycHJldGVkIGFzIFt4LHksIHgseSwgLi4uXSwgb3IgdGhlIGFyZ3VtZW50cyBwYXNzZWQgY2FuIGJlXG4gKiAgICAgIGFsbCB0aGUgcG9pbnRzIG9mIHRoZSBwb2x5Z29uIGUuZy4gYG5ldyBQSVhJLlBvbHlnb24obmV3IFBJWEkuUG9pbnQoKSwgbmV3IFBJWEkuUG9pbnQoKSwgLi4uKWAsIG9yIHRoZVxuICogICAgICBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZSBmbGF0IHgseSB2YWx1ZXMgZS5nLiBgbmV3IFBvbHlnb24oeCx5LCB4LHksIHgseSwgLi4uKWAgd2hlcmUgYHhgIGFuZCBgeWAgYXJlXG4gKiAgICAgIE51bWJlcnMuXG4gKi9cbmZ1bmN0aW9uIFBvbHlnb24ocG9pbnRzXylcbntcbiAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBhc3NpZ25tZW50IGRlb3B0XG4gICAgLy8gc2VlIHNlY3Rpb24gMy4xOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICB2YXIgcG9pbnRzID0gcG9pbnRzXztcblxuICAgIC8vaWYgcG9pbnRzIGlzbid0IGFuIGFycmF5LCB1c2UgYXJndW1lbnRzIGFzIHRoZSBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBwb2ludHMubGVuZ3RoOyArK2EpIHtcbiAgICAgICAgICAgIHBvaW50c1thXSA9IGFyZ3VtZW50c1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHRoaXMgaXMgYW4gYXJyYXkgb2YgcG9pbnRzLCBjb252ZXJ0IGl0IHRvIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzXG4gICAgaWYgKHBvaW50c1swXSBpbnN0YW5jZW9mIFBvaW50KVxuICAgIHtcbiAgICAgICAgdmFyIHAgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHAucHVzaChwb2ludHNbaV0ueCwgcG9pbnRzW2ldLnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9pbnRzID0gcDtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB0aGUgcG9pbnRzIG9mIHRoaXMgcG9seWdvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlBPTFk7XG59XG5cblBvbHlnb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9seWdvbjtcbm1vZHVsZS5leHBvcnRzID0gUG9seWdvbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBwb2x5Z29uXG4gKlxuICogQHJldHVybiB7UElYSS5Qb2x5Z29ufSBhIGNvcHkgb2YgdGhlIHBvbHlnb25cbiAqL1xuUG9seWdvbi5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9seWdvbih0aGlzLnBvaW50cy5zbGljZSgpKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIGluc2lkZSA9IGZhbHNlO1xuXG4gICAgLy8gdXNlIHNvbWUgcmF5Y2FzdGluZyB0byB0ZXN0IGhpdHNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svcG9pbnQtaW4tcG9seWdvbi9ibG9iL21hc3Rlci9pbmRleC5qc1xuICAgIHZhciBsZW5ndGggPSB0aGlzLnBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBsZW5ndGggLSAxOyBpIDwgbGVuZ3RoOyBqID0gaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHhpID0gdGhpcy5wb2ludHNbaSAqIDJdLCB5aSA9IHRoaXMucG9pbnRzW2kgKiAyICsgMV0sXG4gICAgICAgICAgICB4aiA9IHRoaXMucG9pbnRzW2ogKiAyXSwgeWogPSB0aGlzLnBvaW50c1tqICogMiArIDFdLFxuICAgICAgICAgICAgaW50ZXJzZWN0ID0gKCh5aSA+IHkpICE9PSAoeWogPiB5KSkgJiYgKHggPCAoeGogLSB4aSkgKiAoeSAtIHlpKSAvICh5aiAtIHlpKSArIHhpKTtcblxuICAgICAgICBpZiAoaW50ZXJzZWN0KVxuICAgICAgICB7XG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc2lkZTtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIHRoZSBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgZGVmaW5lZCBieSBpdHMgcG9zaXRpb24sIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCB3aWR0aCBvZiB0aGlzIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByZWN0YW5nbGVcbiAqL1xuZnVuY3Rpb24gUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJFQ1Q7XG59XG5cblJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZWN0YW5nbGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlY3RhbmdsZTtcblxuLyoqXG4gKiBBIGNvbnN0YW50IGVtcHR5IHJlY3RhbmdsZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuUmVjdGFuZ2xlLkVNUFRZID0gbmV3IFJlY3RhbmdsZSgwLCAwLCAwLCAwKTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgUmVjdGFuZ2xlXG4gKi9cblJlY3RhbmdsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHggPj0gdGhpcy54ICYmIHggPCB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPCB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUm91bmRlZCBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgdGhhdCBoYXMgbmljZSByb3VuZGVkIGNvcm5lcnMsIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0IGFuZCBpdHMgcmFkaXVzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBDb250cm9scyB0aGUgcmFkaXVzIG9mIHRoZSByb3VuZGVkIGNvcm5lcnNcbiAqL1xuZnVuY3Rpb24gUm91bmRlZFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMjBcbiAgICAgKi9cbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCAyMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUlJFQztcbn1cblxuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3VuZGVkUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3VuZGVkUmVjdGFuZ2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHJldHVybiB7UElYSS5Sb3VuZGVkUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJvdW5kZWRSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnJhZGl1cyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDw9IHRoaXMueCArIHRoaXMud2lkdGgpXG4gICAge1xuICAgICAgICBpZiAoeSA+PSB0aGlzLnkgJiYgeSA8PSB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBQYXJ0aWNsZUNvbnRhaW5lciBjbGFzcyBpcyBhIHJlYWxseSBmYXN0IHZlcnNpb24gb2YgdGhlIENvbnRhaW5lciBidWlsdCBzb2xlbHkgZm9yIHNwZWVkLFxuICogc28gdXNlIHdoZW4geW91IG5lZWQgYSBsb3Qgb2Ygc3ByaXRlcyBvciBwYXJ0aWNsZXMuIFRoZSB0cmFkZW9mZiBvZiB0aGUgUGFydGljbGVDb250YWluZXIgaXMgdGhhdCBhZHZhbmNlZFxuICogZnVuY3Rpb25hbGl0eSB3aWxsIG5vdCB3b3JrLiBQYXJ0aWNsZUNvbnRhaW5lciBpbXBsZW1lbnRzIG9ubHkgdGhlIGJhc2ljIG9iamVjdCB0cmFuc2Zvcm0gKHBvc2l0aW9uLCBzY2FsZSwgcm90YXRpb24pLlxuICogQW55IG90aGVyIGZ1bmN0aW9uYWxpdHkgbGlrZSB0aW50aW5nLCBtYXNraW5nLCBldGMgd2lsbCBub3Qgd29yayBvbiBzcHJpdGVzIGluIHRoaXMgYmF0Y2guXG4gKlxuICogSXQncyBleHRyZW1lbHkgZWFzeSB0byB1c2UgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgY29udGFpbmVyID0gbmV3IFBhcnRpY2xlQ29udGFpbmVyKCk7XG4gKlxuICogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSlcbiAqIHtcbiAqICAgICB2YXIgc3ByaXRlID0gbmV3IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcIm15SW1hZ2UucG5nXCIpO1xuICogICAgIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogfVxuICogYGBgXG4gKlxuICogQW5kIGhlcmUgeW91IGhhdmUgYSBodW5kcmVkIHNwcml0ZXMgdGhhdCB3aWxsIGJlIHJlbmRlcmVyIGF0IHRoZSBzcGVlZCBvZiBsaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFttYXhTaXplPTE1MDAwXSB7bnVtYmVyfSBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFydGljbGVzIHRoYXQgY2FuIGJlIHJlbmRlcmVyIGJ5IHRoZSBjb250YWluZXIuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXNdIHtvYmplY3R9IFRoZSBwcm9wZXJ0aWVzIG9mIGNoaWxkcmVuIHRoYXQgc2hvdWxkIGJlIHVwbG9hZGVkIHRvIHRoZSBncHUgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuc2NhbGU9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHNjYWxlIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnBvc2l0aW9uPXRydWVdIHtib29sZWFufSBXaGVuIHRydWUsIHBvc2l0aW9uIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnJvdGF0aW9uPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCByb3RhdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy51dnM9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHV2cyBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5hbHBoYT1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgYWxwaGEgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW2JhdGNoU2l6ZT0xNTAwMF0ge251bWJlcn0gTnVtYmVyIG9mIHBhcnRpY2xlcyBwZXIgYmF0Y2guXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQ29udGFpbmVyKG1heFNpemUsIHByb3BlcnRpZXMsIGJhdGNoU2l6ZSlcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIGJhdGNoU2l6ZSA9IGJhdGNoU2l6ZSB8fCAxNTAwMDsgLy9DT05TVC5TUFJJVEVfQkFUQ0hfU0laRTsgLy8gMjAwMCBpcyBhIG5pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSAvIGRlc2t0b3BcbiAgICBtYXhTaXplID0gbWF4U2l6ZSB8fCAxNTAwMDtcblxuICAgIC8vIE1ha2luZyBzdXJlIHRoZSBiYXRjaCBzaXplIGlzIHZhbGlkXG4gICAgLy8gNjU1MzUgaXMgbWF4IHZlcnRleCBpbmRleCBpbiB0aGUgaW5kZXggYnVmZmVyIChzZWUgUGFydGljbGVSZW5kZXJlcilcbiAgICAvLyBzbyBtYXggbnVtYmVyIG9mIHBhcnRpY2xlcyBpcyA2NTUzNiAvIDQgPSAxNjM4NFxuICAgIHZhciBtYXhCYXRjaFNpemUgPSAxNjM4NDtcbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4QmF0Y2hTaXplKSB7XG4gICAgICAgIGJhdGNoU2l6ZSA9IG1heEJhdGNoU2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4U2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhTaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBwcm9wZXJ0aWVzIHRvIGJlIGR5bmFtaWMgKHRydWUpIC8gc3RhdGljIChmYWxzZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW5bXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4U2l6ZSA9IG1heFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYXRjaFNpemUgPSBiYXRjaFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVDaGlsZHJlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGNhbnZhcyByZW5kZXJlcmluZy4gSWYgdHJ1ZSB0aGVuIHRoZSBlbGVtZW50cyB3aWxsIGJlIHBvc2l0aW9uZWQgYXQgdGhlIG5lYXJlc3QgcGl4ZWwuIFRoaXMgcHJvdmlkZXMgYSBuaWNlIHNwZWVkIGJvb3N0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlO1xuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSB0cnVlO1xuXG4gICAgdGhpcy5zZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xufVxuXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQ29udGFpbmVyO1xuXG4vKipcbiAqIFNldHMgdGhlIHByaXZhdGUgcHJvcGVydGllcyBhcnJheSB0byBkeW5hbWljIC8gc3RhdGljIGJhc2VkIG9uIHRoZSBwYXNzZWQgcHJvcGVydGllcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcHJvcGVydGllcyB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyB0byBiZSB1cGxvYWRlZFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuc2V0UHJvcGVydGllcyA9IGZ1bmN0aW9uKHByb3BlcnRpZXMpXG57XG4gICAgaWYgKCBwcm9wZXJ0aWVzICkge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzBdID0gJ3NjYWxlJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnNjYWxlIDogdGhpcy5fcHJvcGVydGllc1swXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1sxXSA9ICdwb3NpdGlvbicgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5wb3NpdGlvbiA6IHRoaXMuX3Byb3BlcnRpZXNbMV07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMl0gPSAncm90YXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucm90YXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzJdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzNdID0gJ3V2cycgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy51dnMgOiB0aGlzLl9wcm9wZXJ0aWVzWzNdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzRdID0gJ2FscGhhJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLmFscGhhIDogdGhpcy5fcHJvcGVydGllc1s0XTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgLy8gVE9ETyBkb24ndCBuZWVkIHRvIVxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIC8vICBQSVhJLkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtLmNhbGwoIHRoaXMgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGFpbmVyIHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgd2ViZ2wgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlciggcmVuZGVyZXIucGx1Z2lucy5wYXJ0aWNsZSApO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUucmVuZGVyKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgZmxhZyB0aGF0IHN0YXRpYyBkYXRhIHNob3VsZCBiZSB1cGRhdGVkIHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUub25DaGlsZHJlbkNoYW5nZSA9IGZ1bmN0aW9uIChzbWFsbGVzdENoaWxkSW5kZXgpXG57XG4gICAgdmFyIGJ1ZmZlckluZGV4ID0gTWF0aC5mbG9vcihzbWFsbGVzdENoaWxkSW5kZXggLyB0aGlzLl9iYXRjaFNpemUpO1xuICAgIGlmIChidWZmZXJJbmRleCA8IHRoaXMuX2J1ZmZlclRvVXBkYXRlKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gYnVmZmVySW5kZXg7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIGNhbnZhcyByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGlzUm90YXRlZCA9IHRydWU7XG5cbiAgICB2YXIgcG9zaXRpb25YID0gMDtcbiAgICB2YXIgcG9zaXRpb25ZID0gMDtcblxuICAgIHZhciBmaW5hbFdpZHRoID0gMDtcbiAgICB2YXIgZmluYWxIZWlnaHQgPSAwO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICBpZiAoIWNoaWxkLnZpc2libGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZyYW1lID0gY2hpbGQudGV4dHVyZS5mcmFtZTtcblxuICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhICogY2hpbGQuYWxwaGE7XG5cbiAgICAgICAgaWYgKGNoaWxkLnJvdGF0aW9uICUgKE1hdGguUEkgKiAyKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgZmFzdGVzdCAgd2F5IHRvIG9wdGltaXNlISAtIGlmIHJvdGF0aW9uIGlzIDAgdGhlbiB3ZSBjYW4gYXZvaWQgYW55IGtpbmQgb2Ygc2V0VHJhbnNmb3JtIGNhbGxcbiAgICAgICAgICAgIGlmIChpc1JvdGF0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoICogY2hpbGQuc2NhbGUueCkgKyBjaGlsZC5wb3NpdGlvbi54ICArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0ICogY2hpbGQuc2NhbGUueSkgKyBjaGlsZC5wb3NpdGlvbi55ICArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLng7XG4gICAgICAgICAgICBmaW5hbEhlaWdodCA9IGZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnk7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzUm90YXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoaWxkLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICAgICAgdmFyIGNoaWxkVHJhbnNmb3JtID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHggfCAwLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eSB8IDBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvblggPSAoKGNoaWxkLmFuY2hvci54KSAqICgtZnJhbWUud2lkdGgpICsgMC41KTtcbiAgICAgICAgICAgIHBvc2l0aW9uWSA9ICgoY2hpbGQuYW5jaG9yLnkpICogKC1mcmFtZS5oZWlnaHQpICsgMC41KTtcblxuICAgICAgICAgICAgZmluYWxXaWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgIGNoaWxkLnRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgZnJhbWUueCxcbiAgICAgICAgICAgIGZyYW1lLnksXG4gICAgICAgICAgICBmcmFtZS53aWR0aCxcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCxcbiAgICAgICAgICAgIHBvc2l0aW9uWCxcbiAgICAgICAgICAgIHBvc2l0aW9uWSxcbiAgICAgICAgICAgIGZpbmFsV2lkdGgsXG4gICAgICAgICAgICBmaW5hbEhlaWdodFxuICAgICAgICApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUNoaWxkcmVuPWZhbHNlXSB7Ym9vbGVhbn0gaWYgc2V0IHRvIHRydWUsIGFsbCB0aGUgY2hpbGRyZW4gd2lsbCBoYXZlIHRoZWlyIGRlc3Ryb3kgbWV0aG9kIGNhbGxlZCBhcyB3ZWxsXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgaWYgKHRoaXMuX2J1ZmZlcnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLl9idWZmZXJzW2ldLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xufTtcbiIsIlxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZUJ1ZmZlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvUGFydGljbGVCdWZmZXIuamF2YVxuICovXG5cbi8qKlxuICogVGhlIHBhcnRpY2xlIGJ1ZmZlciBtYW5hZ2VzIHRoZSBzdGF0aWMgYW5kIGR5bmFtaWMgYnVmZmVycyBmb3IgYSBwYXJ0aWNsZSBjb250YWluZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gUGFydGljbGVCdWZmZXIoZ2wsIHByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBzaXplKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRTaXplID0gMjtcblxuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYSBzaW5nbGUgdmVydGV4IGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGUgYnVmZmVyIGNhbiBob2xkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gc2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBkeW5hbWljLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIHN0YXRpYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcblxuICAgICAgICBpZihkeW5hbWljUHJvcGVydHlGbGFnc1tpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5keW5hbWljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuZHluYW1pY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW5pdEJ1ZmZlcnMoKTtcblxufVxuXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZUJ1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVCdWZmZXI7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmluaXRCdWZmZXJzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpO1xuICAgIHZhciBwcm9wZXJ0eTtcblxuICAgIHZhciBkeW5hbWljT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG5cbiAgICAgICAgcHJvcGVydHkub2Zmc2V0ID0gZHluYW1pY09mZnNldDtcbiAgICAgICAgZHluYW1pY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLmR5bmFtaWNTdHJpZGUgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5keW5hbWljU3RyaWRlICogNCk7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcblxuXG4gICAgLy8gc3RhdGljIC8vXG4gICAgdmFyIHN0YXRpY09mZnNldCA9IDA7XG4gICAgdGhpcy5zdGF0aWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IHN0YXRpY09mZnNldDtcbiAgICAgICAgc3RhdGljT2Zmc2V0ICs9IHByb3BlcnR5LnNpemU7XG4gICAgICAgIHRoaXMuc3RhdGljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5zdGF0aWNTdHJpZGUgKiA0KTtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNEYXRhLCBnbC5EWU5BTUlDX0RSQVcpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBkeW5hbWljIHByb3BlcnRpZXMuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUudXBsb2FkRHluYW1pYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIHByb3BlcnR5LnVwbG9hZEZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIHRoaXMuZHluYW1pY0RhdGEsIHRoaXMuZHluYW1pY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy5keW5hbWljRGF0YSk7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHN0YXRpYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZFN0YXRpYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLnN0YXRpY0RhdGEsIHRoaXMuc3RhdGljU3RyaWRlLCBwcm9wZXJ0eS5vZmZzZXQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuc3RhdGljRGF0YSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIHRvIHRoZSBHUFVcbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpLCBwcm9wZXJ0eTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuc3RhdGljU3RyaWRlICogNCwgcHJvcGVydHkub2Zmc2V0ICogNCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVCdWZmZXIuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLnN0YXRpY0J1ZmZlcik7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgUGFydGljbGVTaGFkZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlU2hhZGVyJyksXG4gICAgUGFydGljbGVCdWZmZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlQnVmZmVyJyksXG4gICAgbWF0aCAgICAgICAgICAgID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFBhcnRpY2xlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICAvLyBhbmQgbWF4IG51bWJlciBvZiBlbGVtZW50IGluIHRoZSBpbmRleCBidWZmZXIgaXMgMTYzODQgKiA2ID0gOTgzMDRcbiAgICAvLyBDcmVhdGluZyBhIGZ1bGwgaW5kZXggYnVmZmVyLCBvdmVyaGVhZCBpcyA5ODMwNCAqIDIgPSAxOTZLb1xuICAgIHZhciBudW1JbmRpY2VzID0gOTgzMDQ7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KG51bUluZGljZXMpO1xuXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCBudW1JbmRpY2VzOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gbnVsbDtcblxuICAgIHRoaXMudGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xufVxuXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbigncGFydGljbGUnLCBQYXJ0aWNsZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBXaGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gbmV3IFBhcnRpY2xlU2hhZGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlcik7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggaW5kZXgsIHNvIDY1NTM1IC8gNiA9IDEwOTIyLlxuXG4gICAgLy91cGxvYWQgdGhlIGluZGV4IGRhdGFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IFtcbiAgICAgICAgLy8gdmVydGljZXNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbixcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkVmVydGljZXMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBwb3NpdGlvbkRhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFBvc2l0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcm90YXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFSb3RhdGlvbixcbiAgICAgICAgICAgIHNpemU6MSxcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkUm90YXRpb24sXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyB1dnNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFV2cyxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIGFscGhhRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZEFscGhhLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfVxuICAgIF07XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBwYXJ0aWNsZSBiYXRjaC5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gYmluZCB0aGUgbWFpbiB0ZXh0dXJlXG4gICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAvLyBiaW5kIHRoZSBidWZmZXJzXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnNoYWRlcjtcblxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBwYXJ0aWNsZSBjb250YWluZXIgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBjaGlsZHJlbiA9IGNvbnRhaW5lci5jaGlsZHJlbixcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aCxcbiAgICAgICAgbWF4U2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemU7XG5cbiAgICBpZih0b3RhbENoaWxkcmVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIGlmKHRvdGFsQ2hpbGRyZW4gPiBtYXhTaXplKVxuICAgIHtcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IG1heFNpemU7XG4gICAgfVxuXG4gICAgaWYoIWNvbnRhaW5lci5fYnVmZmVycylcbiAgICB7XG4gICAgICAgIGNvbnRhaW5lci5fYnVmZmVycyA9IHRoaXMuZ2VuZXJhdGVCdWZmZXJzKCBjb250YWluZXIgKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXZzIGhhdmUgbm90IHVwZGF0ZWQgdGhlbiBubyBwb2ludCByZW5kZXJpbmcganVzdCB5ZXQhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb250YWluZXIuYmxlbmRNb2RlKTtcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgbSA9ICBjb250YWluZXIud29ybGRUcmFuc2Zvcm0uY29weSggdGhpcy50ZW1wTWF0cml4ICk7XG4gICAgbS5wcmVwZW5kKCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeCApO1xuICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5zaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCBtLnRvQXJyYXkodHJ1ZSkpO1xuICAgIGdsLnVuaWZvcm0xZih0aGlzLnNoYWRlci51bmlmb3Jtcy51QWxwaGEuX2xvY2F0aW9uLCBjb250YWluZXIud29ybGRBbHBoYSk7XG5cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgdGV4dHVyZSBpcyBib3VuZC4uXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gY2hpbGRyZW5bMF0uX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSB0ZXh0dXJlIGhhcyBub3QgdXBkYXRlZCB0aGVuIGxldHMgbm90IHVwbG9hZCBhbnkgc3RhdGljIHByb3BlcnRpZXNcbiAgICAgICAgaWYoIXRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZShiYXNlVGV4dHVyZSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFjb250YWluZXIuX3Byb3BlcnRpZXNbMF0gfHwgIWNvbnRhaW5lci5fcHJvcGVydGllc1szXSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICB9XG5cbiAgICAvLyBub3cgbGV0cyB1cGxvYWQgYW5kIHJlbmRlciB0aGUgYnVmZmVycy4uXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgdG90YWxDaGlsZHJlbjsgaSArPSBiYXRjaFNpemUsIGogKz0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhbW91bnQgPSAoIHRvdGFsQ2hpbGRyZW4gLSBpKTtcbiAgICAgICAgaWYoYW1vdW50ID4gYmF0Y2hTaXplKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbW91bnQgPSBiYXRjaFNpemU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYnVmZmVyID0gY29udGFpbmVyLl9idWZmZXJzW2pdO1xuXG4gICAgICAgIC8vIHdlIGFsd2F5cyB1cGxvYWQgdGhlIGR5bmFtaWNcbiAgICAgICAgYnVmZmVyLnVwbG9hZER5bmFtaWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG5cbiAgICAgICAgLy8gd2Ugb25seSB1cGxvYWQgdGhlIHN0YXRpYyBjb250ZW50IHdoZW4gd2UgaGF2ZSB0byFcbiAgICAgICAgaWYoY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9PT0gailcbiAgICAgICAge1xuICAgICAgICAgICAgYnVmZmVyLnVwbG9hZFN0YXRpYyhjaGlsZHJlbiwgaSwgYW1vdW50KTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSBqICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJpbmQgdGhlIGJ1ZmZlclxuICAgICAgICBidWZmZXIuYmluZCggdGhpcy5zaGFkZXIgKTtcblxuICAgICAgICAgLy8gbm93IGRyYXcgdGhvc2Ugc3Vja2FzIVxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBhbW91bnQgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIG9uZSBwYXJ0aWNsZSBidWZmZXIgZm9yIGVhY2ggY2hpbGQgaW4gdGhlIGNvbnRhaW5lciB3ZSB3YW50IHRvIHJlbmRlciBhbmQgdXBkYXRlcyBpbnRlcm5hbCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7UElYSS5QYXJ0aWNsZUNvbnRhaW5lcn0gVGhlIGNvbnRhaW5lciB0byByZW5kZXIgdXNpbmcgdGhpcyBQYXJ0aWNsZVJlbmRlcmVyXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmdlbmVyYXRlQnVmZmVycyA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgYnVmZmVycyA9IFtdLFxuICAgICAgICBzaXplID0gY29udGFpbmVyLl9tYXhTaXplLFxuICAgICAgICBiYXRjaFNpemUgPSBjb250YWluZXIuX2JhdGNoU2l6ZSxcbiAgICAgICAgZHluYW1pY1Byb3BlcnR5RmxhZ3MgPSBjb250YWluZXIuX3Byb3BlcnRpZXMsXG4gICAgICAgIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBiYXRjaFNpemUpXG4gICAge1xuICAgICAgICBidWZmZXJzLnB1c2gobmV3IFBhcnRpY2xlQnVmZmVyKGdsLCB0aGlzLnByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBiYXRjaFNpemUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVycztcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgdmVydGljaWVzLlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciB2ZXJ0aWNlcyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkVmVydGljZXMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIHZhciBzcHJpdGUsXG4gICAgICAgIHRleHR1cmUsXG4gICAgICAgIHRyaW0sXG4gICAgICAgIHN4LFxuICAgICAgICBzeSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKSB7XG5cbiAgICAgICAgc3ByaXRlID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldO1xuICAgICAgICB0ZXh0dXJlID0gc3ByaXRlLl90ZXh0dXJlO1xuICAgICAgICBzeCA9IHNwcml0ZS5zY2FsZS54O1xuICAgICAgICBzeSA9IHNwcml0ZS5zY2FsZS55O1xuXG4gICAgICAgIGlmICh0ZXh0dXJlLnRyaW0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZCB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG5cbiAgICAgICAgICAgIHcxID0gdHJpbS54IC0gc3ByaXRlLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGgxID0gdHJpbS55IC0gc3ByaXRlLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICBoMCA9IGgxICsgdGV4dHVyZS5jcm9wLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS1zcHJpdGUuYW5jaG9yLngpO1xuICAgICAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC1zcHJpdGUuYW5jaG9yLng7XG5cbiAgICAgICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtc3ByaXRlLmFuY2hvci55KTtcbiAgICAgICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXNwcml0ZS5hbmNob3IueTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gaDEgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IGgwICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHBvc2l0aW9ucyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUG9zaXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVQb3NpdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5wb3NpdGlvbjtcblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciByb3RhdGlvbiB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUm90YXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVSb3RhdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5yb3RhdGlvbjtcblxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVJvdGF0aW9uO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBVdnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFV2cyA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmVVdnMgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uX3RleHR1cmUuX3V2cztcblxuICAgICAgICBpZiAodGV4dHVyZVV2cylcbiAgICAgICAge1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHRleHR1cmVVdnMueDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IHRleHR1cmVVdnMueTA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB0ZXh0dXJlVXZzLngxO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSB0ZXh0dXJlVXZzLnkxO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHRleHR1cmVVdnMueDI7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSB0ZXh0dXJlVXZzLnkyO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHRleHR1cmVVdnMueDM7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSB0ZXh0dXJlVXZzLnkzO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyB5b3Uga25vdyB0aGlzIGNhbiBiZSBlYXNpZXIhXG4gICAgICAgICAgICBhcnJheVtvZmZzZXRdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIGFscGhhIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRBbHBoYSA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICAge1xuICAgICAgICB2YXIgc3ByaXRlQWxwaGEgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uYWxwaGE7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlQWxwaGE7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBQYXJ0aWNsZVJlbmRlcmVyLlxuICpcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIuZ2wpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5nbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgfVxuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG4gICAgdGhpcy50ZW1wTWF0cml4ID0gbnVsbDtcbn07XG4iLCJ2YXIgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1RleHR1cmVTaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVNoYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFRleHR1cmVTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVBvc2l0aW9uQ29vcmQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhU2NhbGU7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgZmxvYXQgYVJvdGF0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgdmVjMiB2ID0gYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICcgICB2LnggPSAoYVZlcnRleFBvc2l0aW9uLngpICogY29zKGFSb3RhdGlvbikgLSAoYVZlcnRleFBvc2l0aW9uLnkpICogc2luKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2LnkgPSAoYVZlcnRleFBvc2l0aW9uLngpICogc2luKGFSb3RhdGlvbikgKyAoYVZlcnRleFBvc2l0aW9uLnkpICogY29zKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2ID0gdiArIGFQb3NpdGlvbkNvb3JkOycsXG5cbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKHYsIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gaGVsbG9cbiAgICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IHVBbHBoYTsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciAqIHVBbHBoYTsnLFxuICAgICAgICAgICAgJyAgaWYgKGNvbG9yLmEgPT0gMC4wKSBkaXNjYXJkOycsXG4gICAgICAgICAgICAnICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB1QWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVBvc2l0aW9uQ29vcmQ6IDAsXG4gICAgICAgICAgIC8vIGFTY2FsZTogICAgICAgICAwLFxuICAgICAgICAgICAgYVJvdGF0aW9uOiAgICAgIDBcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBURU1QIEhBQ0tcblxufVxuXG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmVTaGFkZXIucHJvdG90eXBlKTtcblBhcnRpY2xlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlU2hhZGVyO1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogVGhlIENhbnZhc1JlbmRlcmVyIGRyYXdzIHRoZSBzY2VuZSBhbmQgYWxsIGl0cyBjb250ZW50IG9udG8gYSAyZCBjYW52YXMuIFRoaXMgcmVuZGVyZXIgc2hvdWxkIGJlIHVzZWQgZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgd2ViR0wuXG4gKiBEb24ndCBmb3JnZXQgdG8gYWRkIHRoZSBDYW52YXNSZW5kZXJlci52aWV3IHRvIHlvdXIgRE9NIG9yIHlvdSB3aWxsIG5vdCBzZWUgYW55dGhpbmcgOilcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc3lzdGVtIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSBzeXN0ZW0gdGhpcyByZW5kZXJlciBpcyBmb3IuXG4gKiBAcGFyYW0gW3dpZHRoPTgwMF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9NjAwXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBdIHtudW1iZXJ9IFRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSByZW5kZXJlZCBhcmVhIChzaG93biBpZiBub3QgdHJhbnNwYXJlbnQpLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFN5c3RlbVJlbmRlcmVyKHN5c3RlbSwgd2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHV0aWxzLnNheUhlbGxvKHN5c3RlbSk7XG5cbiAgICAvLyBwcmVwYXJlIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zW2ldID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zW2ldID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OU1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBvcHRpb25zID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5SRU5ERVJFUl9UWVBFLlVOS05PV05cbiAgICAgKiBAc2VlIFBJWEkuUkVOREVSRVJfVFlQRVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuVU5LTk9XTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA4MDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgODAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA2MDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHRvXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLnZpZXcgPSBvcHRpb25zLnZpZXcgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gb3B0aW9ucy5yZXNvbHV0aW9uO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy50cmFuc3BhcmVudCA9IG9wdGlvbnMudHJhbnNwYXJlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByZW5kZXIgdmlldyBzaG91bGQgYmUgcmVzaXplZCBhdXRvbWF0aWNhbGx5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IG9wdGlvbnMuYXV0b1Jlc2l6ZSB8fCBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrcyB0aGUgYmxlbmQgbW9kZXMgdXNlZnVsIGZvciB0aGlzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbWl4ZWQ+fVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIHByZXNlcnZlRHJhd2luZ0J1ZmZlciBmbGFnIGFmZmVjdHMgd2hldGhlciBvciBub3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyByZXRhaW5lZCBhZnRlciByZW5kZXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvciBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gICAgICogSWYgdGhlIHNjZW5lIGlzIE5PVCB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGEgY2FudmFzIHNpemVkIGZpbGxSZWN0IG9wZXJhdGlvbiBldmVyeSBmcmFtZSB0byBzZXQgdGhlIGNhbnZhcyBiYWNrZ3JvdW5kIGNvbG9yLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGNsZWFyUmVjdCB0byBjbGVhciB0aGUgY2FudmFzIGV2ZXJ5IGZyYW1lLlxuICAgICAqIERpc2FibGUgdGhpcyBieSBzZXR0aW5nIHRoaXMgdG8gZmFsc2UuIEZvciBleGFtcGxlIGlmIHlvdXIgZ2FtZSBoYXMgYSBjYW52YXMgZmlsbGluZyBiYWNrZ3JvdW5kIGltYWdlIHlvdSBvZnRlbiBkb24ndCBuZWVkIHRoaXMgc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdFxuICAgICAqL1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyO1xuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gICAgICogSGFuZHkgZm9yIGNyaXNwIHBpeGVsIGFydCBhbmQgc3BlZWQgb24gbGVnYWN5IGRldmljZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSBvcHRpb25zLnJvdW5kUGl4ZWxzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSAweDAwMDAwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGFuIFtSLCBHLCBCXSBhcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gJyMwMDAwMDAnO1xuXG4gICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBvcHRpb25zLmJhY2tncm91bmRDb2xvciB8fCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3I7IC8vIHJ1biBiZyBjb2xvciBzZXR0ZXJcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB0cmFuc2Zvcm06e3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpfSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCByb290IG9iamVjdCB0aGF0IHRoZSByZW5kZXJlciB0cmllZCB0byByZW5kZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbn1cblxuLy8gY29uc3RydWN0b3JcblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeXN0ZW1SZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3lzdGVtUmVuZGVyZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZpbGwgaWYgbm90IHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3lzdGVtUmVuZGVyZXIjXG4gICAgICovXG4gICAgYmFja2dyb3VuZENvbG9yOlxuICAgIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9IHV0aWxzLmhleDJzdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHV0aWxzLmhleDJyZ2IodmFsLCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB2aWV3IHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy52aWV3LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0aGlzLnZpZXcuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5hdXRvUmVzaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgYW5kIG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgQ2FudmFzIERPTSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldykge1xuICAgIGlmIChyZW1vdmVWaWV3ICYmIHRoaXMudmlldy5wYXJlbnROb2RlKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy52aWV3KTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICB0aGlzLnZpZXcgPSBudWxsO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMDtcblxuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gbnVsbDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSBudWxsO1xufTtcbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgQ2FudmFzTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ0NhbnZhcycsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5DQU5WQVM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy52aWV3LmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogdGhpcy50cmFuc3BhcmVudCB9KTtcblxuICAgIC8qKlxuICAgICAqIEJvb2xlYW4gZmxhZyBjb250cm9sbGluZyBjYW52YXMgcmVmcmVzaC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIGEgQ2FudmFzTWFza01hbmFnZXIsIGhhbmRsZXMgbWFza2luZyB3aGVuIHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc01hc2tNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBuZXcgQ2FudmFzTWFza01hbmFnZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgcHJvcGVydHkgdXNlZCB0byBzZXQgdGhlIGNhbnZhcyBzbW9vdGhpbmcgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdpbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnd2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21vekltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnb0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21zSW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIHRoaXMuX21hcEJsZW5kTW9kZXMoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge1xuICAgICAgICB3b3JsZFRyYW5zZm9ybTogbmV3IG1hdGguTWF0cml4KCksXG4gICAgICAgIHdvcmxkQWxwaGE6IDFcbiAgICB9O1xuXG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihDYW52YXNSZW5kZXJlcik7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIHRoaXMgY2FudmFzIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IG9iamVjdC5wYXJlbnQ7XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBvYmplY3Q7XG5cbiAgICBvYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgb2JqZWN0LnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIHRoaXMuY29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF07XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMgJiYgdGhpcy52aWV3LnNjcmVlbmNhbnZhcylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGVhckJlZm9yZVJlbmRlcilcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy53aWR0aCAsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChvYmplY3QsIHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGlzLmVtaXQoJ3Bvc3RyZW5kZXInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpXG57XG4gICAgdGhpcy5kZXN0cm95UGx1Z2lucygpO1xuXG4gICAgLy8gY2FsbCB0aGUgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLnJlZnJlc2ggPSB0cnVlO1xuXG4gICAgdGhpcy5tYXNrTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG5cbiAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KVxue1xuICAgIHZhciB0ZW1wQ29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJDYW52YXModGhpcyk7XG4gICAgdGhpcy5jb250ZXh0ID0gdGVtcENvbnRleHQ7XG59O1xuXG4vKipcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXIjcmVzaXplXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAodywgaClcbntcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcywgdywgaCk7XG5cbiAgICAvL3Jlc2V0IHRoZSBzY2FsZSBtb2RlLi4gb2RkbHkgdGhpcyBzZWVtcyB0byBiZSByZXNldCB3aGVuIHRoZSBjYW52YXMgaXMgcmVzaXplZC5cbiAgICAvL3N1cmVseSBhIGJyb3dzZXIgYnVnPz8gTGV0IHBpeGkgZml4IHRoYXQgZm9yIHlvdS4uXG4gICAgaWYodGhpcy5zbW9vdGhQcm9wZXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dFt0aGlzLnNtb290aFByb3BlcnR5XSA9IChDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBNYXBzIFBpeGkgYmxlbmQgbW9kZXMgdG8gY2FudmFzIGJsZW5kIG1vZGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fbWFwQmxlbmRNb2RlcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmJsZW5kTW9kZXMpXG4gICAge1xuICAgICAgICB0aGlzLmJsZW5kTW9kZXMgPSB7fTtcblxuICAgICAgICBpZiAodXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdtdWx0aXBseSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc2NyZWVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdvdmVybGF5JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdkYXJrZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ2xpZ2h0ZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ2NvbG9yLWRvZGdlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdjb2xvci1idXJuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IQVJEX0xJR0hUXSAgICA9ICdoYXJkLWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb2Z0LWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdkaWZmZXJlbmNlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5FWENMVVNJT05dICAgICA9ICdleGNsdXNpb24nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ2h1ZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc2F0dXJhdGUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ2NvbG9yJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdsdW1pbm9zaXR5JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb29sIG5ldyBibGVuZCBtb2RlcyBpbiBjYW52YXMgJ2NvdWdoJyBpZSAnY291Z2gnXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TQVRVUkFUSU9OXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBjYW52YXNcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKi9cbmZ1bmN0aW9uIENhbnZhc0J1ZmZlcih3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBDYW52YXMgb2JqZWN0IHRoYXQgYmVsb25ncyB0byB0aGlzIENhbnZhc0J1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBBIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHdvLWRpbWVuc2lvbmFsIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn1cblxuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc0J1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzQnVmZmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYW52YXNCdWZmZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB2YWw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyBidWZmZXIgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNhbnZhc0J1ZmZlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENsZWFycyB0aGUgY2FudmFzIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIENhbnZhc0J1ZmZlciBjbGFzcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgY2FudmFzIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBjYW52YXMuXG4gKlxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlciB0byBkcmF3IHRoZSBwcmltaXRpdmUgZ3JhcGhpY3MgZGF0YS5cbiAqIEBzdGF0aWNcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xudmFyIENhbnZhc0dyYXBoaWNzID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0dyYXBoaWNzO1xuXG4vKlxuICogUmVuZGVycyBhIEdyYXBoaWNzIG9iamVjdCB0byBhIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBhY3R1YWwgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIDJkIGRyYXdpbmcgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIHdvcmxkQWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljc1RpbnQoZ3JhcGhpY3MpO1xuICAgICAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuX2ZpbGxUaW50O1xuICAgICAgICB2YXIgbGluZUNvbG9yID0gZGF0YS5fbGluZVRpbnQ7XG5cbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRPRE8gLSBuZWVkIHRvIGJlIFVuZGVmaW5lZCFcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsMCwyKk1hdGguUEkpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcblxuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJ4ID0gc2hhcGUueDtcbiAgICAgICAgICAgIHZhciByeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBzaGFwZS53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgcmFkaXVzID0gc2hhcGUucmFkaXVzO1xuXG4gICAgICAgICAgICB2YXIgbWF4UmFkaXVzID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyIHwgMDtcbiAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1cyA+IG1heFJhZGl1cyA/IG1heFJhZGl1cyA6IHJhZGl1cztcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGxDb2xvciB8fCBkYXRhLmZpbGxDb2xvciA9PT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3MgbWFza1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBtYXNrXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY29udGV4dCAyZCBtZXRob2Qgb2YgdGhlIGNhbnZhc1xuICovXG5DYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIGxlbiA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG5cbiAgICBpZiAobGVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludCBhcmUgdGhlIHNhbWUgY2xvc2UgdGhlIHBhdGggLSBtdWNoIG5lYXRlciA6KVxuICAgICAgICAgICAgaWYgKHBvaW50c1swXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gJiYgcG9pbnRzWzFdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5yZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuXG4gICAgICAgICAgICAvLyBlbGxpcHNlIGNvZGUgdGFrZW4gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG5cbiAgICAgICAgICAgIHZhciB3ID0gc2hhcGUud2lkdGggKiAyO1xuICAgICAgICAgICAgdmFyIGggPSBzaGFwZS5oZWlnaHQgKiAyO1xuXG4gICAgICAgICAgICB2YXIgeCA9IHNoYXBlLnggLSB3LzI7XG4gICAgICAgICAgICB2YXIgeSA9IHNoYXBlLnkgLSBoLzI7XG5cbiAgICAgICAgICAgIHZhciBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICAgICAgICAgICAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgIHhlID0geCArIHcsICAgICAgICAgICAvLyB4LWVuZFxuICAgICAgICAgICAgICAgIHllID0geSArIGgsICAgICAgICAgICAvLyB5LWVuZFxuICAgICAgICAgICAgICAgIHhtID0geCArIHcgLyAyLCAgICAgICAvLyB4LW1pZGRsZVxuICAgICAgICAgICAgICAgIHltID0geSArIGggLyAyOyAgICAgICAvLyB5LW1pZGRsZVxuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhlLCB5bSArIG95LCB4bSArIG94LCB5ZSwgeG0sIHllKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdGludCBvZiBhIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB0aGF0IHdpbGwgaGF2ZSBpdHMgdGludCB1cGRhdGVkXG4gKlxuICovXG5DYW52YXNHcmFwaGljcy51cGRhdGVHcmFwaGljc1RpbnQgPSBmdW5jdGlvbiAoZ3JhcGhpY3MpXG57XG4gICAgaWYgKGdyYXBoaWNzLnRpbnQgPT09IDB4RkZGRkZGICYmIGdyYXBoaWNzLl9wcmV2VGludCA9PT0gZ3JhcGhpY3MudGludClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGhpY3MuX3ByZXZUaW50ID0gZ3JhcGhpY3MudGludDtcblxuICAgIHZhciB0aW50UiA9IChncmFwaGljcy50aW50ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIHRpbnRHID0gKGdyYXBoaWNzLnRpbnQgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50QiA9IChncmFwaGljcy50aW50ICYgMHhGRikvIDI1NTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuZmlsbENvbG9yIHwgMDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEubGluZUNvbG9yIHwgMDtcblxuICAgICAgICAvKlxuICAgICAgICB2YXIgY29sb3JSID0gKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JHID0gKGZpbGxDb2xvciA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIHZhciBjb2xvckIgPSAoZmlsbENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBmaWxsQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcblxuICAgICAgICBjb2xvclIgPSAobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIGNvbG9yRyA9IChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckIgPSAobGluZUNvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBsaW5lQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcbiAgICAgICAgKi9cblxuICAgICAgICAvLyBzdXBlciBpbmxpbmUgY29zIGltIGFuIG9wdGltaXphdGlvbiBOQVpJIDopXG4gICAgICAgIGRhdGEuX2ZpbGxUaW50ID0gKCgoZmlsbENvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChmaWxsQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG4gICAgICAgIGRhdGEuX2xpbmVUaW50ID0gKCgobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChsaW5lQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG5cbiAgICB9XG59O1xuXG4iLCJ2YXIgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuL0NhbnZhc0dyYXBoaWNzJyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgdG8gaGFuZGxlIG1hc2tpbmcuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDYW52YXNNYXNrTWFuYWdlcigpXG57fVxuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzTWFza01hbmFnZXI7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgYWRkcyBpdCB0byB0aGUgY3VycmVudCBzdGFjayBvZiBtYXNrcy5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge29iamVjdH0gdGhlIG1hc2tEYXRhIHRoYXQgd2lsbCBiZSBwdXNoZWRcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhLCByZW5kZXJlcilcbntcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2F2ZSgpO1xuXG4gICAgdmFyIGNhY2hlQWxwaGEgPSBtYXNrRGF0YS5hbHBoYTtcbiAgICB2YXIgdHJhbnNmb3JtID0gbWFza0RhdGEud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICAvL1RPRE8gc3Vwb3J0IHNwcml0ZSBhbHBoYSBtYXNrcz8/XG4gICAgLy9sb3RzIG9mIGVmZm9ydCByZXF1aXJlZC4gSWYgZGVtYW5kIGlzIGdyZWF0IGVub3VnaC4uXG4gICAgaWYoIW1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sobWFza0RhdGEsIHJlbmRlcmVyLmNvbnRleHQpO1xuICAgICAgICByZW5kZXJlci5jb250ZXh0LmNsaXAoKTtcbiAgICB9XG5cbiAgICBtYXNrRGF0YS53b3JsZEFscGhhID0gY2FjaGVBbHBoYTtcbn07XG5cbi8qKlxuICogUmVzdG9yZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlIHRoZSBtYXNrIHdhcyBhcHBsaWVkLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIFNwcml0ZS9UZXh0dXJlIHRpbnRpbmcuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNUaW50ZXIgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzVGludGVyO1xuXG4vKipcbiAqIEJhc2ljYWxseSB0aGlzIG1ldGhvZCBqdXN0IG5lZWRzIGEgc3ByaXRlIGFuZCBhIGNvbG9yIGFuZCB0aW50cyB0aGUgc3ByaXRlIHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIHRpbnRlZCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUgPSBmdW5jdGlvbiAoc3ByaXRlLCBjb2xvcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHNwcml0ZS50ZXh0dXJlO1xuXG4gICAgY29sb3IgPSBDYW52YXNUaW50ZXIucm91bmRDb2xvcihjb2xvcik7XG5cbiAgICB2YXIgc3RyaW5nQ29sb3IgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG5cbiAgICB0ZXh0dXJlLnRpbnRDYWNoZSA9IHRleHR1cmUudGludENhY2hlIHx8IHt9O1xuXG4gICAgaWYgKHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl07XG4gICAgfVxuXG4gICAgIC8vIGNsb25lIHRleHR1cmUuLlxuICAgIHZhciBjYW52YXMgPSBDYW52YXNUaW50ZXIuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLy9DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCh0ZXh0dXJlLCBzdHJpbmdDb2xvciwgY2FudmFzKTtcbiAgICBDYW52YXNUaW50ZXIudGludE1ldGhvZCh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKTtcblxuICAgIGlmIChDYW52YXNUaW50ZXIuY29udmVydFRpbnRUb0ltYWdlKVxuICAgIHtcbiAgICAgICAgLy8gaXMgdGhpcyBiZXR0ZXI/XG4gICAgICAgIHZhciB0aW50SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgdGludEltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcblxuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSB0aW50SW1hZ2U7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSA9IGNhbnZhcztcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCBjb252ZXJ0aW5nIHRoZSB0ZXh0dXJlIHRvIGFuIGltYWdlIHRoZW4gd2UgbmVlZCB0byBsb3NlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhc1xuICAgICAgICBDYW52YXNUaW50ZXIuY2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ211bHRpcGx5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgPSBmdW5jdGlvbiAodGV4dHVyZSwgY29sb3IsIGNhbnZhcylcbntcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgIHZhciBjcm9wID0gdGV4dHVyZS5jcm9wLmNsb25lKCk7XG4gICAgY3JvcC54ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC55ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC53aWR0aCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AuaGVpZ2h0ICo9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXMud2lkdGggPSBjcm9wLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wLmhlaWdodDtcblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tYXRvcCc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ292ZXJsYXknIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhPdmVybGF5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgY3JvcC54LFxuICAgICAgICBjcm9wLnksXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodFxuICAgICk7XG5cbiAgICAvLyBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5Jztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgcGl4ZWwgcGVyIHBpeGVsLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuICAgIHZhciByID0gcmdiVmFsdWVzWzBdLCBnID0gcmdiVmFsdWVzWzFdLCBiID0gcmdiVmFsdWVzWzJdO1xuXG4gICAgdmFyIHBpeGVsRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIHZhciBwaXhlbHMgPSBwaXhlbERhdGEuZGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGl4ZWxzLmxlbmd0aDsgaSArPSA0KVxuICAgIHtcbiAgICAgICAgcGl4ZWxzW2krMF0gKj0gcjtcbiAgICAgICAgcGl4ZWxzW2krMV0gKj0gZztcbiAgICAgICAgcGl4ZWxzW2krMl0gKj0gYjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnB1dEltYWdlRGF0YShwaXhlbERhdGEsIDAsIDApO1xufTtcblxuLyoqXG4gKiBSb3VuZHMgdGhlIHNwZWNpZmllZCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gcm91bmQsIHNob3VsZCBiZSBhIGhleCBjb2xvclxuICovXG5DYW52YXNUaW50ZXIucm91bmRDb2xvciA9IGZ1bmN0aW9uIChjb2xvcilcbntcbiAgICB2YXIgc3RlcCA9IENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuXG4gICAgcmdiVmFsdWVzWzBdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzBdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMV0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMV0gLyBzdGVwKSAqIHN0ZXApO1xuICAgIHJnYlZhbHVlc1syXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1syXSAvIHN0ZXApICogc3RlcCk7XG5cbiAgICByZXR1cm4gdXRpbHMucmdiMmhleChyZ2JWYWx1ZXMpO1xufTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygc3RlcHMgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgY2FwIHdoZW4gcm91bmRpbmcgY29sb3JzLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhY2hlU3RlcHNQZXJDb2xvckNoYW5uZWwgPSA4O1xuXG4vKipcbiAqIFRpbnQgY2FjaGUgYm9vbGVhbiBmbGFnLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSA9IGZhbHNlO1xuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkLCBjb25zZXF1ZW50bHkgdGhlIGFiaWxpdHkgdG8gdGludCB1c2luZyB0aGUgbXVsdGlwbHkgbWV0aG9kLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID0gdXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpO1xuXG4vKipcbiAqIFRoZSB0aW50aW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKi9cbkNhbnZhc1RpbnRlci50aW50TWV0aG9kID0gQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID8gQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgOiAgQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWw7XG4iLCJ2YXIgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuXHR1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgVGV4dHVyZU1hbmFnZXIgPSBmdW5jdGlvbihnbClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIHRyYWNrIHRleHR1cmVzIGluIHRoZSByZW5kZXJlciBzbyB3ZSBjYW4gbm8gbG9uZ2VyIGxpc3RlbiB0byB0aGVtIG9uIGRlc3RydWN0aW9uLlxuXHR0aGlzLl9tYW5hZ2VkVGV4dHVyZXMgPSBbXTtcbiAgICB0aGlzLmdsVGV4dHVyZXMgPSB7fTtcblxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmdldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cbi8qKlxuICogVXBkYXRlcyBhbmQvb3IgQ3JlYXRlcyBhIFdlYkdMIHRleHR1cmUgZm9yIHRoZSByZW5kZXJlcidzIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB1cGRhdGVcbiAqL1xuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG5cdGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXS8vdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG5cbiAgICBpZiAoIWdsVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGdsVGV4dHVyZSA9IG5ldyBHTFRleHR1cmUoZ2wpO1xuICAgICAgICBnbFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHRydWVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbFRleHR1cmU7XG5cbiAgICAgICAvLyB0aGlzLmdsVGV4dHVyZXNbdGV4dHVyZS51aWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgIHRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub24oJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xuICAgIH1cblxuICAgIGdsVGV4dHVyZS51cGxvYWQodGV4dHVyZS5zb3VyY2UpO1xuICAgIFxuICAgIC8vVE9ETyBjaGVjayBpcyBwb3dlciBvZiB0d28uLlxuICAgIGdsVGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuXG4gICAgLy8gVE9ETyBjaGVjayBmb3Igc2NhbGluZyB0eXBlXG4gICAgZ2xUZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKTtcblxuICAgIHJldHVybiAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG59XG5cbi8qKlxuICogRGVsZXRlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byBkZXN0cm95XG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUsIF9za2lwUmVtb3ZlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0uZGVzdHJveSgpO1xuICAgICAgICB0ZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGVUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcblxuXG4gICAgICAgIGRlbGV0ZSB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdO1xuXG4gICAgICAgIGlmICghX3NraXBSZW1vdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzLmluZGV4T2YodGV4dHVyZSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLl9tYW5hZ2VkVGV4dHVyZXMsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24oKVxue1xuXHQvLyBlbXB0eSBhbGwgdGhlIG9sZCBnbCB0ZXh0dXJlcyBhcyB0aGV5IGFyZSB1c2VsZXNzIG5vd1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIGlmICh0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgLy8gZGVzdHJveSBtYW5hZ2VkIHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgdGhpcy5kZXN0cm95VGV4dHVyZSh0ZXh0dXJlLCB0cnVlKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFuYWdlZFRleHR1cmVzID0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlTWFuYWdlcjtcblxuIiwidmFyIFN5c3RlbVJlbmRlcmVyID0gcmVxdWlyZSgnLi4vU3lzdGVtUmVuZGVyZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL01hc2tNYW5hZ2VyJyksXG4gICAgU3RlbmNpbE1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyJyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIEJsZW5kTW9kZU1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIEZYQUFGaWx0ZXIgPSByZXF1aXJlKCcuL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi9UZXh0dXJlTWFuYWdlcicpLFxuICAgIGNyZWF0ZUNvbnRleHQgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5jcmVhdGVDb250ZXh0LFxuICAgIG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aSA9IHJlcXVpcmUoJy4vdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpJyksXG4gICAgbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgV2ViR0xSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgd2ViR0wgZW5hYmxlZCBjYW52YXMuIFRoaXMgcmVuZGVyZXJcbiAqIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wuIFRoaXMgUmVuZGVyIHdvcmtzIGJ5IGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgd2ViR0xCYXRjaHMuXG4gKiBTbyBubyBuZWVkIGZvciBTcHJpdGUgQmF0Y2hlcyBvciBTcHJpdGUgQ2xvdWRzLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgdmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD0wXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD0wXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcy4gSWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseSB0aGVuIEZYQUEgYW50aWFsaWFzaW5nIGlzIHVzZWRcbiAqIEBwYXJhbSBbb3B0aW9ucy5mb3JjZUZYQUE9ZmFsc2VdIHtib29sZWFufSBmb3JjZXMgRlhBQSBhbnRpYWxpYXNpbmcgdG8gYmUgdXNlZCBvdmVyIG5hdGl2ZS4gRlhBQSBpcyBmYXN0ZXIsIGJ1dCBtYXkgbm90IGFsd2F5cyBsb29rIGFzIGdyZWF0XG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLiBJZiB5b3Ugd2lzaCB0byBzZXQgdGhpcyB0byBmYWxzZSwgeW91ICptdXN0KiBzZXQgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHRvIGB0cnVlYC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWZcbiAqICAgICAgeW91IG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHQuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgU3lzdGVtUmVuZGVyZXIuY2FsbCh0aGlzLCAnV2ViR0wnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgcmVuZGVyZXIgYXMgYSBzdGFuZGFyZGlzZWQgY29uc3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0vL1xuICAgICAqXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQgPSB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHBhc3NlZCBpbiB0byBjcmVhdGUgYSBuZXcgd2ViZ2wgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0ge1xuICAgICAgICBhbHBoYTogdGhpcy50cmFuc3BhcmVudCxcbiAgICAgICAgYW50aWFsaWFzOiBvcHRpb25zLmFudGlhbGlhcyxcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnRyYW5zcGFyZW50ICYmIHRoaXMudHJhbnNwYXJlbnQgIT09ICdub3RNdWx0aXBsaWVkJyxcbiAgICAgICAgc3RlbmNpbDogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgIH07XG5cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhWzNdID0gdGhpcy50cmFuc3BhcmVudCA/IDAgOiAxO1xuXG4gICAgLyoqXG4gICAgICogRGVhbHMgd2l0aCBtYW5hZ2luZyB0aGUgc2hhZGVyIHByb2dyYW1zIGFuZCB0aGVpciBhdHRyaWJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG5ldyBTaGFkZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWFza3MgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IE1hc2tNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIgPSBuZXcgU3RlbmNpbE1hbmFnZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5GaWx0ZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgYmxlbmRNb2Rlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CbGVuZE1vZGVNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlciA9IG5ldyBCbGVuZE1vZGVNYW5hZ2VyKHRoaXMpO1xuXG4gICAgXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgT2JqZWN0UmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk9iamVjdFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbmV3IE9iamVjdFJlbmRlcmVyKHRoaXMpO1xuXG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBzbyBpdCBpcyByZWFkeSBmb3IgdGhlIG1hbmFnZXJzLlxuICAgIHRoaXMuZ2wgPSBjcmVhdGVDb250ZXh0KHRoaXMudmlldywgdGhpcy5fY29udGV4dE9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcblxuICAgIC8vIG1hcCBzb21lIHdlYkdMIGJsZW5kIGFuZCBkcmF3bW9kZXMuLlxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aShnbCk7XG4gICAgdGhpcy5kcmF3TW9kZXMgPSBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbClcblxuICAgIHRoaXMuX2FjdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldH1cbiAgICAgKi9cbiAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihXZWJHTFJlbmRlcmVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBXZWJHTCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuX2luaXRDb250ZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgLy8gY3JlYXRlIGEgdGV4dHVyZSBtYW5hZ2VyLi4uXG4gICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG5ldyBUZXh0dXJlTWFuYWdlcihnbCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIGRlZmF1bHQgcGl4aSBzZXR0aW5ncy4uXG4gICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcblxuXG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG51bGwsIHRoaXMucmVzb2x1dGlvbiwgdHJ1ZSk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LmNsZWFyQ29sb3IgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhO1xuICAgIFxuICAgIHRoaXMuYmluZFJlbmRlclRhcmdldCh0aGlzLnJvb3RSZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy5lbWl0KCdjb250ZXh0JywgZ2wpO1xuXG4gICAgLy8gc2V0dXAgdGhlIHdpZHRoL2hlaWdodCBwcm9wZXJ0aWVzIGFuZCBnbCB2aWV3cG9ydFxuICAgIHRoaXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsgICAgXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBpdHMgd2ViR0wgdmlld1xuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gdGhlIG9iamVjdCB0byBiZSByZW5kZXJlZFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdClcbntcbiAgICB0aGlzLmVtaXQoJ3ByZXJlbmRlcicpO1xuXG4gICAgLy8gbm8gcG9pbnQgcmVuZGVyaW5nIGlmIG91ciBjb250ZXh0IGhhcyBiZWVuIGJsb3duIHVwIVxuICAgIGlmICh0aGlzLmdsLmlzQ29udGV4dExvc3QoKSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBkaXNwbGF5T2JqZWN0O1xuXG4gICAgdmFyIGNhY2hlUGFyZW50ID0gZGlzcGxheU9iamVjdC5wYXJlbnQ7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgZGlzcGxheU9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICBkaXNwbGF5T2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIHRoaXMucm9vdFJlbmRlclRhcmdldCwgdGhpcy5jbGVhckJlZm9yZVJlbmRlcik7Ly90aGlzLnByb2plY3Rpb24pO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBEaXNwbGF5IE9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSBUaGUgcmVuZGVyIHRhcmdldCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgZGlzcGxheSBvYmplY3RcbiAqXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcmVuZGVyVGFyZ2V0LCBjbGVhcikvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblxuICAgIGlmKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIGZpbHRlciBtYW5hZ2VyXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnNldEZpbHRlclN0YWNrKCByZW5kZXJUYXJnZXQuZmlsdGVyU3RhY2sgKTtcblxuICAgIC8vIHJlbmRlciB0aGUgc2NlbmUhXG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJXZWJHTCh0aGlzKTtcblxuICAgIC8vIGZpbmlzaCB0aGUgY3VycmVudCByZW5kZXJlci4uXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXJlciB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSBvYmplY3RSZW5kZXJlciB7UElYSS5PYmplY3RSZW5kZXJlcn0gVGhlIG9iamVjdCByZW5kZXJlciB0byB1c2UuXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldE9iamVjdFJlbmRlcmVyID0gZnVuY3Rpb24gKG9iamVjdFJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRSZW5kZXJlciA9PT0gb2JqZWN0UmVuZGVyZXIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RvcCgpO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gb2JqZWN0UmVuZGVyZXI7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgd2ViR0wgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHdlYkdMIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHdlYkdMIHZpZXdcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSB0aGlzLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRvIHRoZSBvbmUgZ2l2ZW4gaW4gcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9IHRoZSBuZXcgcmVuZGVyIHRhcmdldFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5iaW5kUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICBpZihyZW5kZXJUYXJnZXQgIT09IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBpZih0aGlzLl9hY3RpdmVTaGFkZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gcmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuc2V0TWFza1N0YWNrKCByZW5kZXJUYXJnZXQuc3RlbmNpbE1hc2tTdGFjayApO1xuICAgIH1cbn1cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFNoYWRlciA9IGZ1bmN0aW9uIChzaGFkZXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgLy9UT0RPIGNhY2hlXG4gICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyICE9PSBzaGFkZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBzaGFkZXI7XG4gICAgICAgIHNoYWRlci5iaW5kKCk7XG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB9XG59XG5cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgbG9jYXRpb24pXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vVE9ETyB0ZXN0IHBlcmYgb2YgY2FjaGU/XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCAwO1xuXG4gICAgaWYodGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uICE9PSBsb2NhdGlvbikvL1xuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uID0gbG9jYXRpb25cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uICk7XG4gICAgfVxuXG4gICAgLy9UT0RPIC0gY2FuIHdlIGNhY2hlIHRoaXMgdGV4dHVyZSB0b28/XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7ICAgICAgXG4gICAgXG4gICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIGJpbmQgdGhlIHRleHR1cmUuLlxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXS5iaW5kKCk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogSGFuZGxlcyBhIGxvc3Qgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRMb3N0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgYSByZXN0b3JlZCB3ZWJnbCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9pbml0Q29udGV4dCgpO1xuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIucmVtb3ZlQWxsKCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciAoZXZlbnQgbGlzdGVuZXJzLCBzcHJpdGViYXRjaCwgZXRjLi4uKVxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIHJlbW92ZSBsaXN0ZW5lcnNcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuaGFuZGxlQ29udGV4dExvc3QpO1xuICAgIHRoaXMudmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkKTtcblxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIuZGVzdHJveUFsbCgpO1xuXG4gICAgLy8gY2FsbCBiYXNlIGRlc3Ryb3lcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHJlbW92ZVZpZXcpO1xuXG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgLy8gZGVzdHJveSB0aGUgbWFuYWdlcnNcbiAgICB0aGlzLnNoYWRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSBudWxsO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0gbnVsbDtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICB0aGlzLmdsID0gbnVsbDtcbn07XG5cbiIsInZhciBEZWZhdWx0U2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBQSVhJIGZpbHRlci4gQ3VycmVudGx5IG9ubHkgV2ViR0wgc3VwcG9ydHMgZmlsdGVycy5cbiAqIElmIHlvdSB3YW50IHRvIG1ha2UgYSBjdXN0b20gZmlsdGVyIHRoaXMgc2hvdWxkIGJlIHlvdXIgYmFzZSBjbGFzcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdmVydGV4U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIGZyYWdtZW50U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlIGFzIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gdW5pZm9ybXMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuaWZvcm1zIGZvciB0aGlzIGZpbHRlci5cbiAqL1xuZnVuY3Rpb24gQWJzdHJhY3RGaWx0ZXIodmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMpXG57XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBzaGFkZXJzXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVycyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4dHJhIHBhZGRpbmcgdGhhdCB0aGUgZmlsdGVyIG1pZ2h0IG5lZWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmlmb3JtcyBhcyBhbiBvYmplY3RcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29kZSBvZiB0aGUgdmVydGV4IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIGZyYW1lbnQgc2hhZGVyXG4gICAgICogQG1lbWJlciB7c3RyaW5nW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICAvL1RPRE8gYSByZW1pbmRlciAtIHdvdWxkIGJlIGNvb2wgdG8gaGF2ZSBsb3dlciByZXMgZmlsdGVycyBhcyB0aGlzIHdvdWxkIGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlLlxuXG4gICAgLy90eXBlb2YgZnJhZ21lbnRTcmMgPT09ICdzdHJpbmcnID8gZnJhZ21lbnRTcmMuc3BsaXQoJycpIDogKGZyYWdtZW50U3JjIHx8IFtdKTtcblxufVxuXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RGaWx0ZXI7XG5cbi8qKlxuICogR3JhYnMgYSBzaGFkZXIgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIHNoYWRlciBmcm9tXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5nZXRTaGFkZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXJzW2dsLmlkXTtcblxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gbmV3IERlZmF1bHRTaGFkZXIocmVuZGVyZXIuc2hhZGVyTWFuYWdlcixcbiAgICAgICAgICAgIHRoaXMudmVydGV4U3JjLFxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudFNyYyxcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNoYWRlcnNbZ2wuaWRdID0gc2hhZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8gY2xlYXIgdGhlIG91dHB1dFRhcmdldFxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xufTtcblxuLyoqXG4gKiBTeW5jcyBhIHVuaWZvcm0gYmV0d2VlbiB0aGUgY2xhc3Mgb2JqZWN0IGFuZCB0aGUgc2hhZGVycy5cbiAqXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5zaGFkZXJzLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyc1tpXS5zeW5jVW5pZm9ybSh1bmlmb3JtKTtcbiAgICB9XG59O1xuIiwidmFyIEFic3RyYWN0RmlsdGVyID0gcmVxdWlyZSgnLi9BYnN0cmFjdEZpbHRlcicpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqXG4gKiBCYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXG4gKiBtb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcbiAqIHVuc3VwcG9ydGVkIGJ5IFdlYkdMLlxuICpcbiAqIC0tXG4gKiBGcm9tOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKlxuICovXG5mdW5jdGlvbiBGWEFBRmlsdGVyKClcbntcbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG5cXG52b2lkIHRleGNvb3Jkcyh2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTlcsIG91dCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JTVywgb3V0IHZlYzIgdl9yZ2JTRSxcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjMiBpbnZlcnNlVlAgPSAxLjAgLyByZXNvbHV0aW9uLnh5O1xcbiAgICB2X3JnYk5XID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk5FID0gKGZyYWdDb29yZCArIHZlYzIoMS4wLCAtMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU1cgPSAoZnJhZ0Nvb3JkICsgdmVjMigtMS4wLCAxLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JTRSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiTSA9IHZlYzIoZnJhZ0Nvb3JkICogaW52ZXJzZVZQKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxuICAgdlJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xcblxcbiAgIC8vY29tcHV0ZSB0aGUgdGV4dHVyZSBjb29yZHMgYW5kIHNlbmQgdGhlbSB0byB2YXJ5aW5nc1xcbiAgIHRleGNvb3JkcyhhVGV4dHVyZUNvb3JkICogcmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgdl9yZ2JOVywgdl9yZ2JORSwgdl9yZ2JTVywgdl9yZ2JTRSwgdl9yZ2JNKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcblxcbi8qKlxcbkJhc2ljIEZYQUEgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGNvZGUgb24gZ2Vla3MzZC5jb20gd2l0aCB0aGVcXG5tb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcXG51bnN1cHBvcnRlZCBieSBXZWJHTC5cXG5cXG4tLVxcblxcbkZyb206XFxuaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcXG5cXG5Db3B5cmlnaHQgKGMpIDIwMTEgYnkgQXJtaW4gUm9uYWNoZXIuXFxuXFxuU29tZSByaWdodHMgcmVzZXJ2ZWQuXFxuXFxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxcbm1ldDpcXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXFxuICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcXG4gICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcXG4gICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXFxuXFxuICAgICogVGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3JcXG4gICAgICBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWNcXG4gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXFxuXFxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xcblxcXCJBUyBJU1xcXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXFxuQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcXG5PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcXG5TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXFxuVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXFxuKi9cXG5cXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01JTlxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvIDEyOC4wKVxcbiNlbmRpZlxcbiNpZm5kZWYgRlhBQV9SRURVQ0VfTVVMXFxuICAgICNkZWZpbmUgRlhBQV9SRURVQ0VfTVVMICAgKDEuMCAvIDguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfU1BBTl9NQVhcXG4gICAgI2RlZmluZSBGWEFBX1NQQU5fTUFYICAgICA4LjBcXG4jZW5kaWZcXG5cXG4vL29wdGltaXplZCB2ZXJzaW9uIGZvciBtb2JpbGUsIHdoZXJlIGRlcGVuZGVudFxcbi8vdGV4dHVyZSByZWFkcyBjYW4gYmUgYSBib3R0bGVuZWNrXFxudmVjNCBmeGFhKHNhbXBsZXIyRCB0ZXgsIHZlYzIgZnJhZ0Nvb3JkLCB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk5XLCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYlNXLCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjNCBjb2xvcjtcXG4gICAgbWVkaXVtcCB2ZWMyIGludmVyc2VWUCA9IHZlYzIoMS4wIC8gcmVzb2x1dGlvbi54LCAxLjAgLyByZXNvbHV0aW9uLnkpO1xcbiAgICB2ZWMzIHJnYk5XID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JOVykueHl6O1xcbiAgICB2ZWMzIHJnYk5FID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JORSkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTVykueHl6O1xcbiAgICB2ZWMzIHJnYlNFID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTRSkueHl6O1xcbiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JNKTtcXG4gICAgdmVjMyByZ2JNICA9IHRleENvbG9yLnh5ejtcXG4gICAgdmVjMyBsdW1hID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTtcXG4gICAgZmxvYXQgbHVtYU5XID0gZG90KHJnYk5XLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KHJnYk5FLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gZG90KHJnYlNXLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNFID0gZG90KHJnYlNFLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KHJnYk0sICBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU1pbiA9IG1pbihsdW1hTSwgbWluKG1pbihsdW1hTlcsIGx1bWFORSksIG1pbihsdW1hU1csIGx1bWFTRSkpKTtcXG4gICAgZmxvYXQgbHVtYU1heCA9IG1heChsdW1hTSwgbWF4KG1heChsdW1hTlcsIGx1bWFORSksIG1heChsdW1hU1csIGx1bWFTRSkpKTtcXG5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpcjtcXG4gICAgZGlyLnggPSAtKChsdW1hTlcgKyBsdW1hTkUpIC0gKGx1bWFTVyArIGx1bWFTRSkpO1xcbiAgICBkaXIueSA9ICAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuXFxuICAgIGZsb2F0IGRpclJlZHVjZSA9IG1heCgobHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFKSAqXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNSAqIEZYQUFfUkVEVUNFX01VTCksIEZYQUFfUkVEVUNFX01JTik7XFxuXFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvIChtaW4oYWJzKGRpci54KSwgYWJzKGRpci55KSkgKyBkaXJSZWR1Y2UpO1xcbiAgICBkaXIgPSBtaW4odmVjMihGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgIG1heCh2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBkaXIgKiByY3BEaXJNaW4pKSAqIGludmVyc2VWUDtcXG5cXG4gICAgdmVjMyByZ2JBID0gMC41ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDEuMCAvIDMuMCAtIDAuNSkpLnh5eiArXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMi4wIC8gMy4wIC0gMC41KSkueHl6KTtcXG4gICAgdmVjMyByZ2JCID0gcmdiQSAqIDAuNSArIDAuMjUgKiAoXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAtMC41KS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogMC41KS54eXopO1xcblxcbiAgICBmbG9hdCBsdW1hQiA9IGRvdChyZ2JCLCBsdW1hKTtcXG4gICAgaWYgKChsdW1hQiA8IGx1bWFNaW4pIHx8IChsdW1hQiA+IGx1bWFNYXgpKVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkEsIHRleENvbG9yLmEpO1xcbiAgICBlbHNlXFxuICAgICAgICBjb2xvciA9IHZlYzQocmdiQiwgdGV4Q29sb3IuYSk7XFxuICAgIHJldHVybiBjb2xvcjtcXG59XFxuXFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGZ4YWEodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKiB2UmVzb2x1dGlvbiwgdlJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxuXFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG59XG5cbkZYQUFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRlhBQUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGWEFBRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBGWEFBRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cbkZYQUFGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlciggcmVuZGVyZXIgKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBTcHJpdGVNYXNrRmlsdGVyIGNsYXNzXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSB0YXJnZXQgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZU1hc2tGaWx0ZXIoc3ByaXRlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgICB2TWFza0Nvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFza0Nvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgLy8gY2hlY2sgY2xpcCEgdGhpcyB3aWxsIHN0b3AgdGhlIG1hc2sgYmxlZWRpbmcgb3V0IGZyb20gdGhlIGVkZ2VzXFxuICAgIHZlYzIgdGV4dCA9IGFicyggdk1hc2tDb29yZCAtIDAuNSApO1xcbiAgICB0ZXh0ID0gc3RlcCgwLjUsIHRleHQpO1xcbiAgICBmbG9hdCBjbGlwID0gMS4wIC0gbWF4KHRleHQueSwgdGV4dC54KTtcXG4gICAgdmVjNCBvcmlnaW5hbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgIHZlYzQgbWFza3kgPSB0ZXh0dXJlMkQobWFzaywgdk1hc2tDb29yZCk7XFxuICAgIG9yaWdpbmFsICo9IChtYXNreS5yICogbWFza3kuYSAqIGFscGhhICogY2xpcCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG9yaWdpbmFsO1xcbn1cXG5cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbWFzazogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUuX3RleHR1cmUgfSxcbiAgICAgICAgICAgIGFscGhhOiAgICAgICAgICB7IHR5cGU6ICdmJywgdmFsdWU6IDF9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcbn1cblxuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0byByZXRyaWV2ZSB0aGUgZmlsdGVyIGZyb21cbiAqIEBwYXJhbSBpbnB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gb3V0cHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqL1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5tYXNrLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLl90ZXh0dXJlO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLndvcmxkQWxwaGE7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZU1hc2tGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgdXNlZCB0byBtb3ZlIHRoZSBkaXNwbGFjZW1lbnQgbWFwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdsTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBCbGVuZE1vZGVNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn1cblxuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZE1vZGVNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGVNYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMtdXAgdGhlIGdpdmVuIGJsZW5kTW9kZSBmcm9tIFdlYkdMJ3MgcG9pbnQgb2Ygdmlldy5cbiAqXG4gKiBAcGFyYW0gYmxlbmRNb2RlIHtudW1iZXJ9IHRoZSBibGVuZE1vZGUsIHNob3VsZCBiZSBhIFBpeGkgY29uc3QsIHN1Y2ggYXMgYFBJWEkuQkxFTkRfTU9ERVMuQUREYC4gU2VlXG4gKiAge0BsaW5rIFBJWEkuQkxFTkRfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLnNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChibGVuZE1vZGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblxuICAgIHZhciBtb2RlID0gdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuY3VycmVudEJsZW5kTW9kZV07XG4gICAgdGhpcy5yZW5kZXJlci5nbC5ibGVuZEZ1bmMobW9kZVswXSwgbW9kZVsxXSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgUXVhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL1F1YWQnKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXTtcblxuICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgIHJlbmRlclRhcmdldDpyZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LFxuICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgIGJvdW5kczpudWxsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldFtdfVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICAvLyBsaXN0ZW4gZm9yIGNvbnRleHQgYW5kIHVwZGF0ZSBuZWNlc3NhcnkgYnVmZmVyc1xuICAgIC8vVE9ETyBtYWtlIHRoaXMgZHluYW1pYyFcbiAgICAvL1RPRE8gdGVzdCB0aGlzIG91dCBieSBmb3JjZXMgcG93ZXIgb2YgdHdvP1xuICAgIHRoaXMudGV4dHVyZVNpemUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgcmVuZGVyZXIud2lkdGgsIHJlbmRlcmVyLmhlaWdodCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmcmFtZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBudWxsO1xufVxuXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbHRlck1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlck1hbmFnZXI7XG5cblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVQb29sLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucXVhZCA9IG5ldyBRdWFkKGdsKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcGFyYW0gYnVmZmVyIHtBcnJheUJ1ZmZlcn1cbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuc2V0RmlsdGVyU3RhY2sgPSBmdW5jdGlvbiAoIGZpbHRlclN0YWNrIClcbntcbiAgICB0aGlzLmZpbHRlclN0YWNrID0gZmlsdGVyU3RhY2s7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlciBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGZpbHRlcnMge1BJWEkuQWJzdHJhY3RGaWxlcltdfSB0aGUgZmlsdGVycyB0aGF0IHdpbGwgYmUgcHVzaGVkIHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFja1xuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5wdXNoRmlsdGVyID0gZnVuY3Rpb24gKHRhcmdldCwgZmlsdGVycylcbntcbiAgICAvLyBnZXQgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0Li5cbiAgICAvLyBUT0RPIHJlcGxhY2UgY2xvbmUgd2l0aCBhIGNvcHkgdG8gc2F2ZSBvYmplY3QgY3JlYXRpb25cbiAgICB2YXIgYm91bmRzID0gdGFyZ2V0LmZpbHRlckFyZWEgPyB0YXJnZXQuZmlsdGVyQXJlYS5jbG9uZSgpIDogdGFyZ2V0LmdldEJvdW5kcygpO1xuXG4gICAgLy9ib3VuZHMgPSBib3VuZHMuY2xvbmUoKTtcblxuICAgIC8vIHJvdW5kIG9mZiB0aGUgcmVjdGFuZ2xlIHRvIGdldCBhIG5pY2Ugc21vb29vb29vdGggZmlsdGVyIDopXG4gICAgYm91bmRzLnggPSBib3VuZHMueCB8IDA7XG4gICAgYm91bmRzLnkgPSBib3VuZHMueSB8IDA7XG4gICAgYm91bmRzLndpZHRoID0gYm91bmRzLndpZHRoIHwgMDtcbiAgICBib3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCB8IDA7XG5cblxuICAgIC8vIHBhZGRpbmchXG4gICAgdmFyIHBhZGRpbmcgPSBmaWx0ZXJzWzBdLnBhZGRpbmcgfCAwO1xuICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLnkgLT0gcGFkZGluZztcbiAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcblxuXG4gICAgaWYodGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vVE9ETyB0aGlzIHdpbGwgYnJlYWsgaWYgdGhlIHJlbmRlclRleHR1cmUgdHJhbnNmb3JtIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYSB0cmFuc2xhdGlvbi5cbiAgICAgICAgLy9XaWxsIG5lZWQgdG8gdGFrZSB0aGUgZnVsbCBtYXRyaXggdHJhbnNmb3JtIGludG8gYWNvdW50Li5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm07XG5cbiAgICAgICAgYm91bmRzLnggKz0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSArPSB0cmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdGhpcy5jYXBGaWx0ZXJBcmVhKCBib3VuZHMgKTtcblxuICAgICAgICBib3VuZHMueCAtPSB0cmFuc2Zvcm0udHg7XG4gICAgICAgIGJvdW5kcy55IC09IHRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG4gICAgfVxuXG4gICAgaWYoYm91bmRzLndpZHRoID4gMCAmJiBib3VuZHMuaGVpZ2h0ID4gMClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gYm91bmRzO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBjbGVhciB0aGUgdGV4dHVyZS4uXG4gICAgICAgIHRleHR1cmUuY2xlYXIoKTtcblxuICAgICAgICAvLyBUT0RPIGdldCByaWQgb2Ygb2JqZWN0IGNyZWF0aW9uIVxuICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OiB0ZXh0dXJlLFxuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJzXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIHB1c2ggc29tdGhpbmcgb24gdG8gdGhlIHN0YWNrIHRoYXQgaXMgZW1wdHlcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucG9wRmlsdGVyID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2sucG9wKCk7XG4gICAgdmFyIHByZXZpb3VzRmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2tbdGhpcy5maWx0ZXJTdGFjay5sZW5ndGgtMV07XG5cbiAgICB2YXIgaW5wdXQgPSBmaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIGlmIHRoZSByZW5kZXJUYXJnZXQgaXMgbnVsbCB0aGVuIHdlIGRvbid0IGFwcGx5IHRoZSBmaWx0ZXIgYXMgaXRzIG9mZnNjcmVlblxuICAgIGlmKCFmaWx0ZXJEYXRhLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gcHJldmlvdXNGaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIHVzZSBwcm9ncmFtXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpbnB1dC5mcmFtZTtcblxuICAgIHRoaXMucXVhZC5tYXAodGhpcy50ZXh0dXJlU2l6ZSwgaW5wdXQuZnJhbWUpO1xuXG5cbiAgICAvLyBUT0RPLi4gdGhpcyBwcm9iYWJseSBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBmaWx0ZXJzID0gZmlsdGVyRGF0YS5maWx0ZXI7XG5cbiAgICAvLyBhc3N1bWluZyBhbGwgZmlsdGVycyBmb2xsb3cgdGhlIGNvcnJlY3QgZm9ybWF0Pz9cbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgbm9ybWFsIGJsZW5kbW9kZSFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKENPTlNULkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDEpXG4gICAge1xuICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICBpZiAoZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJzWzBdLmFwcGx5RmlsdGVyKCB0aGlzLnJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0ICk7XG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBpbnB1dCApO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBmbGlwVGV4dHVyZSA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcFRleHR1cmUgPSB0aGlzLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGZpbHRlcnNbaV07XG5cbiAgICAgICAgICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSB0aGVuIHNldHRpbmcgdGhpcyBlYWNoIHRpbWU/XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlci5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIGZsb3BUZXh0dXJlICk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gZmxpcFRleHR1cmU7XG4gICAgICAgICAgICBmbGlwVGV4dHVyZSA9IGZsb3BUZXh0dXJlO1xuICAgICAgICAgICAgZmxvcFRleHR1cmUgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aC0xXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIG91dHB1dCApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBmbGlwVGV4dHVyZSApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxvcFRleHR1cmUgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyRGF0YS5maWx0ZXI7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgUmVuZGVyVGFyZ2V0XG4gKiBAcmV0dXJuIHtSZW5kZXJUYXJnZXR9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICggY2xlYXIgKVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSB0aGlzLnRleHR1cmVQb29sLnBvcCgpIHx8IG5ldyBSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJlci5nbCwgdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQsIENPTlNULlNDQUxFX01PREVTLkxJTkVBUiwgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uICogQ09OU1QuRklMVEVSX1JFU09MVVRJT04pO1xuICAgIHJlbmRlclRhcmdldC5mcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJUYXJnZXQ7XG59O1xuXG4vKlxuICogUmV0dXJucyBhIFJlbmRlclRhcmdldCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UmVuZGVyVGFyZ2V0fSBUaGUgUmVuZGVyVGFyZ2V0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnJldHVyblJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5wdXNoKCByZW5kZXJUYXJnZXQgKTtcbn07XG5cbi8qXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBzaGFkZXIge1NoYWRlcn0gVGhlIHNoYWRlciB0byB1cGxvYWRcbiAqIEBwYXJhbSBpbnB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAoc2hhZGVyLCBpbnB1dFRhcmdldCwgb3V0cHV0VGFyZ2V0LCBjbGVhcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQob3V0cHV0VGFyZ2V0KTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIG91dHB1dFRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2hhZGVyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBDYW4gdGhpcyBiZSBjYWNoZWQgYW5kIG5vdCBgdG9BcnJheWBlZCBlYWNoIGZyYW1lP1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcblxuICAgIC8vVE9ETyBjYW4gdGhpcyBiZSBvcHRpbWlzZWQ/XG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuLypcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMiAqIDQgKiA0KTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuKi9cblxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGlucHV0VGFyZ2V0LnRleHR1cmUpO1xuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIG1hcHBlZCBtYXRyaXhcbiAqIEBwYXJhbSBmaWx0ZXJBcmVhIHtSZWN0YW5nbGV9IFRoZSBmaWx0ZXIgYXJlYVxuICogQHBhcmFtIHNwcml0ZSB7U3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICogQHBhcmFtIG91dHB1dE1hdHJpeCB7TWF0cml4fSBAYWx2aW5cbiAqL1xuLy8gVE9ETyBwbGF5aW5nIGFyb3VuZCBoZXJlLi4gdGhpcyBpcyB0ZW1wb3JhcnkgLSAod2lsbCBlbmQgdXAgaW4gdGhlIHNoYWRlcilcbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeCA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhLCBzcHJpdGUsIG91dHB1dE1hdHJpeClcbntcbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBzcHJpdGUud29ybGRUcmFuc2Zvcm0uY29weShtYXRoLk1hdHJpeC5URU1QX01BVFJJWCksXG4gICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIHZhciBtYXBwZWRNYXRyaXggPSBvdXRwdXRNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIC8vIHNjYWxlLi5cbiAgICB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICBtYXBwZWRNYXRyaXgudHJhbnNsYXRlKGZpbHRlckFyZWEueCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIGZpbHRlckFyZWEueSAvIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0ICk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIHJhdGlvKTtcblxuICAgIHZhciB0cmFuc2xhdGVTY2FsZVggPSAodGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAvIHRleHR1cmUud2lkdGgpO1xuICAgIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0ZXh0dXJlLmhlaWdodCk7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS50eCAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuICAgIHdvcmxkVHJhbnNmb3JtLnR5IC89IHRleHR1cmUud2lkdGggKiB0cmFuc2xhdGVTY2FsZVg7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIG1hcHBlZE1hdHJpeC5wcmVwZW5kKHdvcmxkVHJhbnNmb3JtKTtcblxuICAgIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIG1hcHBlZE1hdHJpeC5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShzcHJpdGUuYW5jaG9yLngsIHNwcml0ZS5hbmNob3IueSk7XG5cbiAgICByZXR1cm4gbWFwcGVkTWF0cml4O1xuXG4gICAgLy8gS2VlcGluZyB0aGUgb3JnaW5hbCBhcyBhIHJlbWluZGVyIHRvIG1lIG9uIGhvdyB0aGlzIHdvcmtzIVxuICAgIC8vXG4gICAgLy8gdmFyIG0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuICAgIC8vIC8vIHNjYWxlLi5cbiAgICAvLyB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICAvLyBtLnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCk7XG5cblxuICAgIC8vIG0uc2NhbGUoMSAsIHJhdGlvKTtcblxuXG4gICAgLy8gdmFyIHRyYW5zZm9ybSA9IHd0LmNsb25lKCk7XG5cbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyA2MjApO1xuICAgIC8vIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyAzODApO1xuXG4gICAgLy8gdHJhbnNmb3JtLnR4IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICAvLyB0cmFuc2Zvcm0udHkgLz0gNjIwICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgLy8gdHJhbnNmb3JtLmludmVydCgpO1xuXG4gICAgLy8gdHJhbnNmb3JtLmFwcGVuZChtKTtcblxuICAgIC8vIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIC8vIHRyYW5zZm9ybS5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgLy8gcmV0dXJuIHRyYW5zZm9ybTtcbn07XG5cbi8qXG4gKiBDb25zdHJhaW5zIHRoZSBmaWx0ZXIgYXJlYSB0byB0aGUgdGV4dHVyZSBzaXplXG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWEgd2Ugd2FudCB0byBjYXBcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY2FwRmlsdGVyQXJlYSA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhKVxue1xuICAgIGlmIChmaWx0ZXJBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCArPSBmaWx0ZXJBcmVhLng7XG4gICAgICAgIGZpbHRlckFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlckFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLmhlaWdodCArPSBmaWx0ZXJBcmVhLnk7XG4gICAgICAgIGZpbHRlckFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnggKyBmaWx0ZXJBcmVhLndpZHRoID4gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLndpZHRoID0gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAtIGZpbHRlckFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGZpbHRlckFyZWEueSArIGZpbHRlckFyZWEuaGVpZ2h0ID4gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAtIGZpbHRlckFyZWEueTtcbiAgICB9XG59O1xuXG4vKlxuICogUmVzaXplcyBhbGwgdGhlIHJlbmRlciB0YXJnZXRzIGluIHRoZSBwb29sXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMudGV4dHVyZVNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZVBvb2xbaV0ucmVzaXplKCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgZmlsdGVyIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGZpbHRlciBzdGFjay5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucXVhZC5kZXN0cm95KCk7XG4gICAgXG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG4gICAgXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IG51bGw7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGV4dHVyZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVQb29sID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBBbHBoYU1hc2tGaWx0ZXIgPSByZXF1aXJlKCcuLi9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuc3RlbmNpbFN0YWNrID0gW107XG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ID0gMDtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbCA9IFtdO1xufVxuXG5NYXNrTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFNwcml0ZU1hc2sodGFyZ2V0LCBtYXNrRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IG1hc2sgZnJvbSB0aGUgbWFzayBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIGlmIChtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnBvcFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB2YXIgYWxwaGFNYXNrRmlsdGVyID0gdGhpcy5hbHBoYU1hc2tQb29sLnBvcCgpO1xuXG4gICAgaWYgKCFhbHBoYU1hc2tGaWx0ZXIpXG4gICAge1xuICAgICAgICBhbHBoYU1hc2tGaWx0ZXIgPSBbbmV3IEFscGhhTWFza0ZpbHRlcihtYXNrRGF0YSldO1xuICAgIH1cblxuICAgIGFscGhhTWFza0ZpbHRlclswXS5tYXNrU3ByaXRlID0gbWFza0RhdGE7XG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGFyZ2V0LCBhbHBoYU1hc2tGaWx0ZXIpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBmaWx0ZXJzID0gdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgdGhpcy5hbHBoYU1hc2tQb29sLnB1c2goZmlsdGVycyk7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoTWFzayhtYXNrRGF0YSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcE1hc2sobWFza0RhdGEpO1xufTtcblxuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpLFxuICAgIENvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXInKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTaGFkZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heEF0dGlicyA9IDEwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXhBdHRpYnM7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YWNrID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcblxuLy8gICAgdGhpcy5pbml0UGx1Z2lucygpO1xufVxuXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hbmFnZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oU2hhZGVyTWFuYWdlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyTWFuYWdlcjtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRyaWJ1dGUgY29ycmVjdGx5IGFzIHRoaXMgdGVuZHMgdG8gdmFyeVxuICAgIHRoaXMubWF4QXR0aWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVE9ETyAtIFdoeSBhcmUgdGhlc2Ugbm90IHBsdWdpbnM/IFdlIGNhbid0IGRlY291cGxlIHByaW1pdGl2ZXMgdW5sZXNzIHRoZXkgYXJlLi4uLlxuICAgIHRoaXMuZGVmYXVsdFNoYWRlciA9IG5ldyBUZXh0dXJlU2hhZGVyKHRoaXMpO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBuZXcgQ29tcGxleFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogVGFrZXMgdGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gaW4gcGFyYW1ldGVycyBhbmQgdXBsb2FkcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJzIHthbnlbXX0gYXR0cmlic1xuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRBdHRyaWJzID0gZnVuY3Rpb24gKGF0dHJpYnMpXG57XG4gICAgLy8gcmVzZXQgdGVtcCBzdGF0ZVxuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMudGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yICh2YXIgYSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbYXR0cmlic1thXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYlN0YXRlW2ldICE9PSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgc2hhZGVyLlxuICpcbiAqIEBwYXJhbSBzaGFkZXIge1BJWEkuU2hhZGVyfSB0aGUgc2hhZGVyIHRvIHVwbG9hZFxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKVxue1xuICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5fY3VycmVudElkID09PSBzaGFkZXIudWlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IHNoYWRlci51aWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBzaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmdsLnVzZVByb2dyYW0oc2hhZGVyLnByb2dyYW0pO1xuICAgIHRoaXMuc2V0QXR0cmlicyhzaGFkZXIuYXR0cmlidXRlcyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBvYmplY3QuXG4gKlxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLmRlc3Ryb3koKTtcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBudWxsO1xufTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFza01hbmFnZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG51bGw7XG59XG5cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBtYXNrIHN0YWNrIHRoYXQgaXMgdXNlZCBieSB0aGlzIG1hbmFnZXIuXG4gKlxuICogQHBhcmFtIHN0ZW5jaWxNYXNrU3RhY2sge1BJWEkuU3RlbmNpbE1hc2tTdGFja30gVGhlIG1hc2sgc3RhY2tcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuc2V0TWFza1N0YWNrID0gZnVuY3Rpb24gKCBzdGVuY2lsTWFza1N0YWNrIClcbntcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBzdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIGlmIChzdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suIEBhbHZpblxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hdHRhY2hTdGVuY2lsQnVmZmVyKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBzbXMgPSB0aGlzLnN0ZW5jaWxNYXNrU3RhY2s7XG5cbiAgICB0aGlzLmJpbmRHcmFwaGljcyhncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xuICAgICAgICBzbXMucmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIHNtcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wdXNoKHdlYkdMRGF0YSk7XG5cbiAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgLy8gZHJhdyB0aGUgdHJpYW5nbGUgc3RyaXAhXG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IGEgcXVhZCB0byBpbmNyZW1lbnQuLlxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cbiAgICBzbXMuY291bnQrKztcbn07XG5cbi8qKlxuICogVE9ETyB0aGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIVxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5iaW5kR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICAvL2lmICh0aGlzLl9jdXJyZW50R3JhcGhpY3MgPT09IGdyYXBoaWNzKXJldHVybjtcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGJpbmQgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgdmFyIHNoYWRlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICAvKlxuICAgICAgICBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMuY29sb3IuX2xvY2F0aW9uLCB3ZWJHTERhdGEuY29sb3IpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDIsIDApO1xuXG4gICAgICAgIC8vIG5vdyBkbyB0aGUgcmVzdC4uXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICovXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmFjdGl2YXRlUHJpbWl0aXZlU2hhZGVyKCk7XG4vLyAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnByaW1pdGl2ZVNoYWRlcjtcbiAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cblxuICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4vLyAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG5cbiAgICAgIC8qICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTFmKHNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEpO1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCA0LCBnbC5GTE9BVCwgZmFsc2UsNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTsqL1xuICAgIH1cbn07XG5cbi8qKlxuICogVE9ETyBAYWx2aW5cbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTdGVuY2lsID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wb3AoKTtcblxuICAgIHNtcy5jb3VudC0tO1xuXG4gICAgaWYgKHNtcy5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgLy8gdGhlIHN0YWNrIGlzIGVtcHR5IVxuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICAgICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuXG4gICAgICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSAobGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOVkVSVCk7XG5cbiAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50ICs9IDI7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAvLyAgY29uc29sZS5sb2coXCI8PD4+XCIpXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcblxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCksIDB4RkYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5LRUVQKTtcblxuXG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgbWFzayBzdGFjay5cbiAqXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjayA9IG51bGw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119IFRoZSBtYXNrIGRhdGEgc3RydWN0dXJlIHRvIHVzZVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgXG4gICAgLy9UT0RPIEZJWFxuICAgIGlmIChtYXNrRGF0YS5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy51cGRhdGVHcmFwaGljcyhtYXNrRGF0YSwgdGhpcy5yZW5kZXJlci5nbCk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119XG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuXG4gICAgdGhpcy5wb3BTdGVuY2lsKG1hc2tEYXRhLCBtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YVswXSk7XG59O1xuXG4iLCIvKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gV2ViR0xNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMucmVuZGVyZXIub24oJ2NvbnRleHQnLCB0aGlzLm9uQ29udGV4dENoYW5nZSwgdGhpcyk7XG59XG5cbldlYkdMTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFuYWdlcjtcblxuLyoqXG4gKiBHZW5lcmljIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXHQvLyBkbyBzb21lIGNvZGVzIGluaXQhXG59O1xuXG4vKipcbiAqIEdlbmVyaWMgZGVzdHJveSBtZXRob2RzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICovXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVuZGVyZXIub2ZmKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IGNvbXBsZXggcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBDb21wbGV4UHJpbWl0aXZlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gdmVjNChjb2xvciAqIGFscGhhICogdGludCwgYWxwaGEpOycsLy9cIiAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdGludDogICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwgMCwgMF0gfSxcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgY29sb3I6ICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwwLDBdIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYUNvbG9yOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCYXNlIHNoYWRlciBjbGFzcyBmb3IgUElYSSBtYW5hZ2VkIHNoYWRlcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFt1bmlmb3Jtc10ge29iamVjdH0gVW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxuICogQHBhcmFtIFthdHRyaWJ1dGVzXSB7b2JqZWN0fSBBdHRyaWJ1dGVzIGZvciB0aGlzIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKVxue1xuICAgIGlmICghdmVydGV4U3JjIHx8ICFmcmFnbWVudFNyYylcbiAgICB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpeGkuanMgRXJyb3IuIFNoYWRlciByZXF1aXJlcyB2ZXJ0ZXhTcmMgYW5kIGZyYWdtZW50U3JjJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmdsID0gc2hhZGVyTWFuYWdlci5yZW5kZXJlci5nbDtcblxuICAgIC8vVE9ETyBtYXliZSB3ZSBzaG91bGQgcGFzcyByZW5kZXJlciByYXRoZXIgdGhhbiBzaGFkZXIgbWFuZ2VyPz8gZm9vZCBmb3IgdGhvdWdodC4uXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyID0gc2hhZGVyTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBwcm9ncmFtLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xQcm9ncmFtfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF0dHJpYnV0ZXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRleHR1cmUgY291bnRlclxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYztcblxuICAgIHRoaXMuaW5pdCgpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc2hhZGVyIGFuZCB1c2VzIGl0XG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29tcGlsZSgpO1xuXG4gICAgdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLnVuaWZvcm1zKSk7XG4gICAgdGhpcy5jYWNoZUF0dHJpYnV0ZUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpKTtcbn07XG5cbi8qKlxuICogQ2FjaGVzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHVuaWZvcm0gZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSB1bmlmb3JtcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyA9IGZ1bmN0aW9uIChrZXlzKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMudW5pZm9ybXNba2V5c1tpXV0uX2xvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBrZXlzW2ldKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSBhdHRyaWJ1dGVzIHRvIGNhY2hlXG4gKi9cblNoYWRlci5wcm90b3R5cGUuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNba2V5c1tpXV0gPSB0aGlzLmdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4uLlxuXG4gICAgLy8gQmVnaW4gd29yc3QgaGFjayBldmEgLy9cblxuICAgIC8vIFdIWT8/PyBPTkxZIG9uIG15IGNocm9tZSBwaXhlbCB0aGUgbGluZSBhYm92ZSByZXR1cm5zIC0xIHdoZW4gdXNpbmcgZmlsdGVycz9cbiAgICAvLyBtYXliZSBpdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdsIGNvbnRleHQuXG4gICAgLy8gSSdtIGNvbnZpbmNlZCB0aGlzIGlzIGEgYnVnIGluIHRoZSBjaHJvbWUgYnJvd3NlciBhcyB0aGVyZSBpcyBOTyByZWFzb24gd2h5IHRoaXMgc2hvdWxkIGJlIHJldHVybmluZyAtMSBlc3BlY2lhbGx5IGFzIGl0IG9ubHkgbWFuaWZlc3RzIG9uIG15IGNocm9tZSBwaXhlbFxuICAgIC8vIElmIHRoZXJlcyBhbnkgd2ViR0wgcGVvcGxlIHRoYXQga25vdyB3aHkgY291bGQgaGFwcGVuIHBsZWFzZSBoZWxwIDopXG4gICAgLy8gaWYgKHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPT09IC0xKXtcbiAgICAvLyAgICAgdGhpcy5hdHRyaWJ1dGVzLmFDb2xvciA9IDI7XG4gICAgLy8gfVxuXG4gICAgLy8gRW5kIHdvcnN0IGhhY2sgZXZhIC8vXG59O1xuXG4vKipcbiAqIEF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZCBjcmVhdGVzIHRoZSBwcm9ncmFtLlxuICpcbiAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX1cbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIGdsVmVydFNoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5WRVJURVhfU0hBREVSLCB0aGlzLnZlcnRleFNyYyk7XG4gICAgdmFyIGdsRnJhZ1NoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuZnJhZ21lbnRTcmMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xGcmFnU2hhZGVyKTtcbiAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcblxuICAgIC8vIGlmIGxpbmtpbmcgZmFpbHMsIHRoZW4gbG9nIGFuZCBjbGVhbnVwXG4gICAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BpeGkuanMgRXJyb3I6IENvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlci4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuVkFMSURBVEVfU1RBVFVTJywgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuZ2V0RXJyb3IoKScsIGdsLmdldEVycm9yKCkpO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcHJvZ3JhbSBpbmZvIGxvZywgbG9nIGl0XG4gICAgICAgIGlmIChnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSAhPT0gJycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBXYXJuaW5nOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpJywgZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgcHJvZ3JhbSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgc29tZSBzaGFkZXJzXG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsVmVydFNoYWRlcik7XG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsRnJhZ1NoYWRlcik7XG5cbiAgICByZXR1cm4gKHRoaXMucHJvZ3JhbSA9IHByb2dyYW0pO1xufTtcblxuLyoqXG4qIEFkZHMgYSBuZXcgdW5pZm9ybVxuKlxuKiBAcGFyYW0gdW5pZm9ybSB7b2JqZWN0fSB0aGUgbmV3IHVuaWZvcm0gdG8gYXR0YWNoXG4qL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBsb2NhdGlvbiA9IHVuaWZvcm0uX2xvY2F0aW9uLFxuICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWUsXG4gICAgICAgIGdsID0gdGhpcy5nbCxcbiAgICAgICAgaSwgaWw7XG5cbiAgICBzd2l0Y2ggKHVuaWZvcm0udHlwZSlcbiAgICB7XG4gICAgICAgIGNhc2UgJ2InOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlID8gMSA6IDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGludCB2YWx1ZVxuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBzaW5nbGUgZmxvYXQgdmFsdWVcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDIpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoMykgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoNCkgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzRmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSAyRCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjInOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgM0QgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YzJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDREIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2NCc6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzFmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzRmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTInOlxuICAgICAgICBjYXNlICdtYXQyJzpcbiAgICAgICAgY2FzZSAnTWF0cml4MmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICBjYXNlICdtYXQzJzpcbiAgICAgICAgY2FzZSAnTWF0cml4M2Z2JzpcblxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICdtNCc6XG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICBjYXNlICdNYXRyaXg0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgQ29sb3IgVmFsdWVcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGludGVnZXJzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIChKUyBvciB0eXBlZCBhcnJheSlcbiAgICAgICAgY2FzZSAnZnYxJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDJEIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjJ2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDIgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDJdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMiArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAzRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yzdic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgzICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMyArIDJdICAgPSB2YWx1ZVtpXS56O1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHVuaWZvcm0uX2FycmF5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDREIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjR2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDRdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgMl0gICA9IHZhbHVlW2ldLno7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAzXSAgID0gdmFsdWVbaV0udztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBQSVhJLlRleHR1cmVcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgIGNhc2UgJ3NhbXBsZXIyRCc6XG5cbiAgICAgICAgICAgIGlmICghdW5pZm9ybS52YWx1ZSB8fCAhdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFjdGl2YXRlIHRoaXMgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0aGlzLnRleHR1cmVDb3VudF0pO1xuXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgICAgICAgICBpZiAoIXRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2FtcGxlcjJEKHVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSB0ZXh0dXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb25lLi5cbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gICAgICAgICAgICAvLyBzZXQgdW5pZm9ybSB0byB0ZXh0dXJlIGluZGV4XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkodW5pZm9ybS5fbG9jYXRpb24sIHRoaXMudGV4dHVyZUNvdW50KTtcblxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IG5leHQgdGV4dHVyZSBpZFxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBTaGFkZXIgV2FybmluZzogVW5rbm93biB1bmlmb3JtIHR5cGU6ICcgKyB1bmlmb3JtLnR5cGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnVuaWZvcm1zKVxuICAgIHtcbiAgICAgICAgdGhpcy5zeW5jVW5pZm9ybSh0aGlzLnVuaWZvcm1zW2tleV0pO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJbml0aWFsaXNlcyBhIFNhbXBsZXIyRCB1bmlmb3JtICh3aGljaCBtYXkgb25seSBiZSBhdmFpbGFibGUgbGF0ZXIgb24gYWZ0ZXIgaW5pdFVuaWZvcm1zIG9uY2UgdGhlIHRleHR1cmUgaGFzIGxvYWRlZClcbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuaW5pdFNhbXBsZXIyRCA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGlmICh1bmlmb3JtLnRleHR1cmVEYXRhKVxuICAgIHtcblxuICAgICAgICAvL1RPRE8gbW92ZSB0aGlzLi4uXG4gICAgICAgIHZhciBkYXRhID0gdW5pZm9ybS50ZXh0dXJlRGF0YTtcblxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG5cbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGxpZWRBbHBoYSk7XG4gICAgICAgIC8vIEdMVGV4dHVyZSA9IG1hZyBsaW5lYXIsIG1pbiBsaW5lYXJfbWlwbWFwX2xpbmVhciwgd3JhcCByZXBlYXQgKyBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgLy8gR0xUZXh0dXJlTGluZWFyID0gbWFnL21pbiBsaW5lYXIsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdFJlcGVhdCA9IG1hZy9taW4gTkVBUkVTVCwgd3JhcCByZXBlYXRcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdCA9IG1hZy9taW4gbmVhcmVzdCwgd3JhcCBjbGFtcFxuICAgICAgICAvLyBBdWRpb1RleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDUxMiwgaGVpZ2h0IDIsIGJvcmRlciAwXG4gICAgICAgIC8vIEtleVRleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDI1NiwgaGVpZ2h0IDIsIGJvcmRlciAwXG5cbiAgICAgICAgLy8gIG1hZ0ZpbHRlciBjYW4gYmU6IGdsLkxJTkVBUiwgZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgb3IgZ2wuTkVBUkVTVFxuICAgICAgICAvLyAgd3JhcFMvVCBjYW4gYmU6IGdsLkNMQU1QX1RPX0VER0Ugb3IgZ2wuUkVQRUFUXG5cbiAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBkYXRhLmx1bWluYW5jZSA/IGdsLkxVTUlOQU5DRSA6IGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRleHR1cmUuc291cmNlKTtcblxuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZGF0YS5tYWdGaWx0ZXIgPyBkYXRhLm1hZ0ZpbHRlciA6IGdsLkxJTkVBUiApO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFICk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZGF0YS53cmFwVCA/IGRhdGEud3JhcFQgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5zaGFkZXJNYW5hZ2VyLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgc2hhZGVyLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmdsLmRlbGV0ZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgIHRoaXMudW5pZm9ybXMgPSBudWxsO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleFNyYyA9IG51bGw7XG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IG51bGw7XG59O1xuXG5TaGFkZXIucHJvdG90eXBlLl9nbENvbXBpbGUgPSBmdW5jdGlvbiAodHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIHRoaXMuZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc3JjKTtcbiAgICB0aGlzLmdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghdGhpcy5nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCB0aGlzLmdsLkNPTVBJTEVfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIGN1c3RvbVVuaWZvcm1zLCBjdXN0b21BdHRyaWJ1dGVzKVxue1xuICAgIHZhciB1bmlmb3JtcyA9IHtcblxuICAgICAgICB1U2FtcGxlcjogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiAwIH0sXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6ICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDFdKSB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21Vbmlmb3JtcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIHUgaW4gY3VzdG9tVW5pZm9ybXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVuaWZvcm1zW3VdID0gY3VzdG9tVW5pZm9ybXNbdV07XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBhVmVydGV4UG9zaXRpb246ICAgIDAsXG4gICAgICAgIGFUZXh0dXJlQ29vcmQ6ICAgICAgMCxcbiAgICAgICAgYUNvbG9yOiAgICAgICAgICAgICAwXG4gICAgfTtcblxuICAgIGlmIChjdXN0b21BdHRyaWJ1dGVzKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgYSBpbiBjdXN0b21BdHRyaWJ1dGVzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2FdID0gY3VzdG9tQXR0cmlidXRlc1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IHZlcnRleFNyYyB8fCBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcyk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKGdsKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IFRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgZnJhZ21lbnRTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYztcblxuICAgIFNoYWRlci5jYWxsKHRoaXMsIGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTsvLywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xuXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuLi9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBCYXNlIGZvciBhIGNvbW1vbiBvYmplY3QgcmVuZGVyZXIgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHN5c3RlbSByZW5kZXJlciBwbHVnaW4uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBPYmplY3RSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59XG5cblxuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9iamVjdFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RSZW5kZXJlcjtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHJlbmRlcmVyIGFuZCBzZXRzIHRoZSBzaGFkZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gc2V0IHRoZSBzaGFkZXIuLlxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgcmVuZGVyZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIGZsdXNoZXNcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gZmx1c2ghXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyByZW5kZXIgdGhlIG9iamVjdFxufTtcbiIsIi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHF1YWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gVGhlIGdsIGNvbnRleHQgZm9yIHRoaXMgcXVhZCB0byB1c2UuXG4gKi9cbmZ1bmN0aW9uIFF1YWQoZ2wpXG57XG4gICAgLypcbiAgICAgKiB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbi8vICAgIHRoaXMudGV4dHVyZXMgPSBuZXcgVGV4dHVyZVV2cygpO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMjAwLDAsXG4gICAgICAgIDIwMCwyMDAsXG4gICAgICAgIDAsMjAwXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBxdWFkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KFtcbiAgICAgICAgMCwwLFxuICAgICAgICAxLDAsXG4gICAgICAgIDEsMSxcbiAgICAgICAgMCwxXG4gICAgXSk7XG5cbi8vICAgIHZhciB3aGl0ZSA9ICgweEZGRkZGRiA+PiAxNikgKyAoMHhGRkZGRkYgJiAweGZmMDApICsgKCgweEZGRkZGRiAmIDB4ZmYpIDw8IDE2KSArICgxICogMjU1IDw8IDI0KTtcbiAgICAvL1RPRE8gY29udmVydCB0aGlzIHRvIGEgMzIgdW5zaWduZWQgaW50IGFycmF5XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIGNvbXBvbmVudHMgb2YgdGhlIHRyaWFuZ2xlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDFcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KFtcbiAgICAgICAgMCwgMSwgMiwgMCwgMywgMlxuICAgIF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIHZlcnRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICg4ICsgOCArIDE2KSAqIDQsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59XG5cblF1YWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUXVhZDtcblxuLyoqXG4gKiBNYXBzIHR3byBSZWN0YW5nbGUgdG8gdGhlIHF1YWRcbiAqIEBwYXJhbSByZWN0IHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZpcnN0IHJlY3RhbmdsZVxuICogQHBhcmFtIHJlY3QyIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHNlY29uZCByZWN0YW5nbGVcbiAqL1xuUXVhZC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24ocmVjdCwgcmVjdDIpXG57XG4gICAgdmFyIHggPSAwOyAvL3JlY3QyLnggLyByZWN0LndpZHRoO1xuICAgIHZhciB5ID0gMDsgLy9yZWN0Mi55IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1swXSA9IHg7XG4gICAgdGhpcy51dnNbMV0gPSB5O1xuXG4gICAgdGhpcy51dnNbMl0gPSB4ICsgcmVjdDIud2lkdGggLyByZWN0LndpZHRoO1xuICAgIHRoaXMudXZzWzNdID0geTtcblxuICAgIHRoaXMudXZzWzRdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIHRoaXMudXZzWzZdID0geDtcbiAgICB0aGlzLnV2c1s3XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIC8vLyAtLS0tLVxuICAgIHggPSByZWN0Mi54O1xuICAgIHkgPSByZWN0Mi55O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1swXSA9IHg7XG4gICAgdGhpcy52ZXJ0aWNlc1sxXSA9IHk7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzJdID0geCArIHJlY3QyLndpZHRoO1xuICAgIHRoaXMudmVydGljZXNbM10gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1s0XSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzVdID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudmVydGljZXNbNl0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0O1xuXG4gICAgdGhpcy51cGxvYWQoKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlciBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5RdWFkLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIFRPRE8gY291bGQgcHJvYmFibHkgYmUgcHVzaGVkIGludG8gb25lIHVwbG9hZCFcbiAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHRoaXMudmVydGV4QnVmZmVyICk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy52ZXJ0aWNlcyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgOCAqIDQsIHRoaXMudXZzKTtcblxuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDgpICogNCwgdGhpcy5jb2xvcnMpO1xufTtcblxuUXVhZC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWQ7XG5cblxuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKSxcbiAgICAgICAgXG4gICAgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuICAgIEdMRnJhbWVidWZmZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTEZyYW1lYnVmZmVyLFxuICAgIFxuICAgIFN0ZW5jaWxNYXNrU3RhY2sgPSByZXF1aXJlKCcuL1N0ZW5jaWxNYXNrU3RhY2snKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqL1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgaG9yaXpvbnRhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSB2ZXJ0aWNhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICogQHBhcmFtIHJvb3Qge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAqL1xudmFyIFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24sIHJvb3QpXG57XG4gICAgLy9UT0RPIFJlc29sdXRpb24gY291bGQgZ28gaGVyZSAoIGVnIGxvdyByZXMgYmx1cnMgKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vIG5leHQgdGltZSB0byBjcmVhdGUgYSBmcmFtZSBidWZmZXIgYW5kIHRleHR1cmVcblxuICAgIC8qKlxuICAgICAqIEEgZnJhbWUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEZyYW1lQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuXG4gICAgdGhpcy5jbGVhckNvbG9yID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIG9iamVjdCBhcyBhIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2JqZWN0J3MgdHJhbnNmb3JtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk1hdHJpeH1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lID0gbnVsbDtcbiAgICBcbiAgICB0aGlzLmRlZmF1bHRGcmFtZSA9IG5ldyBQSVhJLlJlY3RhbmdsZSgpO1xuICAgIHRoaXMuZGVzdGluYXRpb25GcmFtZSA9IG51bGw7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgc3RvcmVzIG1hc2tpbmcgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbEJ1ZmZlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzdGVuY2lsIG1hc2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gbmV3IFN0ZW5jaWxNYXNrU3RhY2soKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyBmaWx0ZXIgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDp0aGlzLFxuICAgICAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICAgICAgYm91bmRzOnRoaXMuc2l6ZVxuICAgICAgICB9XG4gICAgXTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEEgZnJhbWUgYnVmZmVyIG5lZWRzIGEgdGFyZ2V0IHRvIHJlbmRlciB0by4uXG4gICAgICAgICAgICBjcmVhdGUgYSB0ZXh0dXJlIGFuZCBiaW5kIGl0IGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAgICAgKi9cbiAgICAgICAgXG5cbiAgICAgICAvLyBUT0RPIGNoYW5nZSFcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGJ5IHRoZSBiYXNlIHRleHR1cmVcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGhpcy5mcmFtZUJ1ZmZlci50ZXh0dXJlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBtYWtlIGl0IGEgbnVsbCBmcmFtZWJ1ZmZlci4uXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZnJhbWVidWZmZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xufTtcblxuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRhcmdldDtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGFyZ2V0O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZmlsdGVyIHRleHR1cmUuXG4gKlxuICogQHBhcmFtIFtiaW5kPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIHdlIGJpbmQgb3VyIGZyYW1lYnVmZmVyIGJlZm9yZSBjbGVhcmluZz9cbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGNsZWFyQ29sb3IpXG57XG4gICAgdmFyIGNjID0gY2xlYXJDb2xvciB8fCB0aGlzLmNsZWFyQ29sb3JcbiAgICB0aGlzLmZyYW1lQnVmZmVyLmNsZWFyKGNjWzBdLGNjWzFdLGNjWzJdLGNjWzNdKS8vcixnLGIsYSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuYXR0YWNoU3RlbmNpbEJ1ZmZlciA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPRE8gY2hlY2sgaWYgc3RlbmNpbCBpcyBkb25lP1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBpcyB1c2VkIGZvciBtYXNraW5nIGluIHBpeGlcbiAgICAgKiBsZXRzIGNyZWF0ZSBvbmUgYW5kIHRoZW4gYWRkIGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVTdGVuY2lsKCk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCBpbml0aWFsaXNlcyB0aGUgdmlld3BvcnQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oZGVzdGluYXRpb25GcmFtZSwgc291cmNlRnJhbWUpXG57XG4gICAgLy9UT09EIHJlZmFjdG9yIHVzYWdlIG9mIGZyYW1lLi5cbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5iaW5kKCk7XG5cbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBkZXN0aW5hdGlvbkZyYW1lIHx8IHRoaXMuZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlZmF1bHRGcmFtZTtcbiAgICB0aGlzLnNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgdGhpcy5zb3VyY2VGcmFtZSB8fCBkZXN0aW5hdGlvbkZyYW1lO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUsIHRoaXMuc291cmNlRnJhbWUgKTtcblxuICAgIGlmKHRoaXMudHJhbnNmb3JtKVxuICAgIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFwcGVuZCh0aGlzLnRyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5kZXN0aW5hdGlvbkZyYW1lICE9PSB0aGlzLnNvdXJjZUZyYW1lKVxuICAgIHtcbiAgICAgICAgZ2wuZW5hYmxlKGdsLlNDSVNTT1JfVEVTVCk7XG4gICAgICAgIGdsLnNjaXNzb3IodGhpcy5kZXN0aW5hdGlvbkZyYW1lLngsIHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGgqIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgIH1cblxuXG4gICAgLy8gVE9ETyAtIGRvZXMgbm90IG5lZWQgdG8gYmUgdXBkYXRlZCBhbGwgdGhlIHRpbWU/P1xuICAgIGdsLnZpZXdwb3J0KHRoaXMuZGVzdGluYXRpb25GcmFtZS54LHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuXG5cbn07XG5cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBwcm9qZWN0aW9uIG1hdHJpeCBiYXNlZCBvbiBhIHByb2plY3Rpb24gZnJhbWUgKHdoaWNoIGlzIGEgcmVjdGFuZ2xlKVxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jYWxjdWxhdGVQcm9qZWN0aW9uID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcblxuICAgIHNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHBtLmlkZW50aXR5KCk7XG5cbiAgICAvLyBUT0RPOiBtYWtlIGRlc3Qgc2NhbGUgc291cmNlXG4gICAgaWYgKCF0aGlzLnJvb3QpXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBzb3VyY2VGcmFtZS54ICogcG0uYTtcbiAgICAgICAgcG0udHkgPSAtMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IC0xIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBSZXNpemVzIHRoZSB0ZXh0dXJlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7TnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gaGVpZ2h0IHtOdW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgd2lkdGggPSB3aWR0aCB8IDA7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDtcblxuICAgIGlmICh0aGlzLnNpemUud2lkdGggPT09IHdpZHRoICYmIHRoaXMuc2l6ZS5oZWlnaHQgPT09IGhlaWdodCkgXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZGVmYXVsdEZyYW1lLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5kZWZhdWx0RnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5yZXNpemUod2lkdGggKiB0aGlzLnJlc29sdXRpb24sIGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCBwcm9qZWN0aW9uRnJhbWUgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHJlbmRlciB0YXJnZXQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFN0ZW5jaWxNYXNrU3RhY2soKVxue1xuXHQvKipcbiAgICAgKiBUaGUgYWN0dWFsIHN0YWNrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVE9ETyBAYWx2aW5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvdW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb3VudCA9IDA7XG59XG5cblN0ZW5jaWxNYXNrU3RhY2sucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RlbmNpbE1hc2tTdGFjaztcbm1vZHVsZS5leHBvcnRzID0gU3RlbmNpbE1hc2tTdGFjaztcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBNYXBzIGdsIGJsZW5kIGNvbWJpbmF0aW9ucyB0byBXZWJHTFxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcbiAgICBvYmplY3QgPSBvYmplY3QgfHwge307XG5cbiAgICAvL1RPRE8gLSBwcmVtdWx0aXBseSBhbHBoYSB3b3VsZCBiZSBkaWZmZXJlbnQuXG4gICAgLy9hZGQgYSBib29sZWFuIGZvciB0aGF0IVxuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdICAgICAgICA9IFtnbC5PTkUsICAgICAgIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLkRTVF9BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk1VTFRJUExZXSAgICAgID0gW2dsLkRTVF9DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gW2dsLlNSQ19BTFBIQSwgZ2wuT05FXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VdICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSFVFXSAgICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcblxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpO1xuIiwiQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbCwgb2JqZWN0KVxue1xuXHRvYmplY3Q9IG9iamVjdCB8fCB7fTtcblxuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlBPSU5UU10gICAgICAgICA9IGdsLlBPSU5UUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FU10gICAgICAgICAgPSBnbC5MSU5FUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FX0xPT1BdICAgICAgPSBnbC5MSU5FX0xPT1A7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9TVFJJUF0gICAgID0gZ2wuTElORV9TVFJJUDtcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5UUklBTkdMRVNdICAgICAgPSBnbC5UUklBTkdMRVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBdID0gZ2wuVFJJQU5HTEVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXSAgID0gZ2wuVFJJQU5HTEVfRkFOO1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGk7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIFNwcml0ZSBvYmplY3QgaXMgdGhlIGJhc2UgZm9yIGFsbCB0ZXh0dXJlZCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIHRvIHRoZSBzY3JlZW5cbiAqXG4gKiBBIHNwcml0ZSBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGFuIGltYWdlIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSBmb3IgdGhpcyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gU3ByaXRlKHRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW5jaG9yIHNldHMgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLDAgdGhpcyBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMC41LDAuNSBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyBjZW50ZXJlZFxuICAgICAqIFNldHRpbmcgdGhlIGFuY2hvciB0byAxLDEgd291bGQgbWVhbiB0aGUgdGV4dHVyZSdzIG9yaWdpbiBwb2ludCB3aWxsIGJlIHRoZSBib3R0b20gcmlnaHQgY29ybmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuYW5jaG9yID0gbmV3IG1hdGguUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgc3ByaXRlICh0aGlzIGlzIGluaXRpYWxseSBzZXQgYnkgdGhlIHRleHR1cmUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBIHZhbHVlIG9mIDB4RkZGRkZGIHdpbGwgcmVtb3ZlIGFueSB0aW50IGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaGFkZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBzcHJpdGUuIFNldCB0byBudWxsIHRvIHJlbW92ZSBhIGN1cnJlbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5BYnN0cmFjdEZpbHRlcnxQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBjYWNoZWQgdmFsdWUgb2YgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8vIGNhbGwgdGV4dHVyZSBzZXR0ZXJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG4gICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlXG4gICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy52ZXJ0ZXhEYXRhID0gbmV3IEZsb2F0MzJBcnJheSg4KTtcbn1cblxuLy8gY29uc3RydWN0b3JcblNwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuc2NhbGUueCkgKiB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBNYXRoLmFicyh0aGlzLnNjYWxlLnkpICogdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc2lnbiA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS55KSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gc2lnbiAqIHZhbHVlIC8gdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5TcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIHNvIGlmIF93aWR0aCBpcyAwIHRoZW4gd2lkdGggd2FzIG5vdCBzZXQuLlxuICAgIGlmICh0aGlzLl93aWR0aClcbiAgICB7XG4gICAgICAgIHRoaXMuc2NhbGUueCA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS54KSAqIHRoaXMuX3dpZHRoIC8gdGhpcy50ZXh0dXJlLmZyYW1lLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnkgPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgKiB0aGlzLl9oZWlnaHQgLyB0aGlzLnRleHR1cmUuZnJhbWUuaGVpZ2h0O1xuICAgIH1cbn07XG5cblNwcml0ZS5wcm90b3R5cGUuY2FjbHVsYXRlVmVydGljZXMgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICB3dCA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICBhID0gd3QuYSwgYiA9IHd0LmIsIGMgPSB3dC5jLCBkID0gd3QuZCwgdHggPSB3dC50eCwgdHkgPSB3dC50eSxcbiAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDEsXG4gICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG4gICAgICAgIFxuICAgIGlmICh0cmltKVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkIGFuZCBpcyBub3QgYSB0aWxpbmdzcHJpdGUgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgIHcxID0gdHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgaDEgPSB0cmltLnkgLSB0aGlzLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgIGgwID0gaDEgKyB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG4gICAgfVxuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzBdID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVsxXSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzJdID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVszXSA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs0XSA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbNV0gPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs2XSA9IGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbN10gPSBkICogaDAgKyBiICogdzEgKyB0eTtcblxuXG59XG5cbi8qKlxuKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMudGV4dHVyZURpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMudmVydGV4RGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICB9XG4gICAgXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBTcHJpdGUgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgc3ByaXRlXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG4gICAgICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudmVydGV4RGlydHkgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWluWCxcbiAgICAgICAgICAgIG1heFgsXG4gICAgICAgICAgICBtaW5ZLFxuICAgICAgICAgICAgbWF4WSxcbiAgICAgICAgICAgIHZlcnRleERhdGEgPSB0aGlzLnZlcnRleERhdGE7XG5cbiAgICAgICAgdmFyIHgxID0gdmVydGV4RGF0YVswXVxuICAgICAgICB2YXIgeTEgPSB2ZXJ0ZXhEYXRhWzFdXG5cbiAgICAgICAgdmFyIHgyID0gdmVydGV4RGF0YVsyXVxuICAgICAgICB2YXIgeTIgPSB2ZXJ0ZXhEYXRhWzNdXG5cbiAgICAgICAgdmFyIHgzID0gdmVydGV4RGF0YVs0XVxuICAgICAgICB2YXIgeTMgPSB2ZXJ0ZXhEYXRhWzVdXG5cbiAgICAgICAgdmFyIHg0ID0gdmVydGV4RGF0YVs2XVxuICAgICAgICB2YXIgeTQgPSB2ZXJ0ZXhEYXRhWzddXG5cbiAgICAgICAgbWluWCA9IHgxO1xuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MTtcbiAgICAgICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICAgICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICAgICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgICAgICBtYXhYID0geDE7XG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkxO1xuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIC8vIGNoZWNrIGZvciBjaGlsZHJlblxuICAgICAgICBpZih0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkQm91bmRzID0gdGhpcy5jb250YWluZXJHZXRCb3VuZHMoKTtcblxuICAgICAgICAgICAgdzAgPSBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgdzEgPSBjaGlsZEJvdW5kcy54ICsgY2hpbGRCb3VuZHMud2lkdGg7XG4gICAgICAgICAgICBoMCA9IGNoaWxkQm91bmRzLnk7XG4gICAgICAgICAgICBoMSA9IGNoaWxkQm91bmRzLnkgKyBjaGlsZEJvdW5kcy5oZWlnaHQ7XG5cbiAgICAgICAgICAgIG1pblggPSAobWluWCA8IHcwKSA/IG1pblggOiB3MDtcbiAgICAgICAgICAgIG1pblkgPSAobWluWSA8IGgwKSA/IG1pblkgOiBoMDtcblxuICAgICAgICAgICAgbWF4WCA9IChtYXhYID4gdzEpID8gbWF4WCA6IHcxO1xuICAgICAgICAgICAgbWF4WSA9IChtYXhZID4gaDEpID8gbWF4WSA6IGgxO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2JvdW5kcy54ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB0aGlzLl9ib3VuZHMueSA9IC10aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRoaXMuX2JvdW5kcy5oZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgcmV0dXJuIHRoaXMuX2JvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHNwcml0ZVxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5TcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy50ZXh0dXJlLmNyb3Aud2lkdGggPD0gMCB8fCB0aGlzLnRleHR1cmUuY3JvcC5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyAgSWdub3JlIG51bGwgc291cmNlc1xuICAgIGlmICh0aGlzLnRleHR1cmUudmFsaWQpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgICAgICB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgICAgICBkeCxcbiAgICAgICAgICAgIGR5LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ7XG5cbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgICAgICAvLyBJZiBzbW9vdGhpbmdFbmFibGVkIGlzIHN1cHBvcnRlZCBhbmQgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIHNtb290aGluZyBwcm9wZXJ0eSBmb3IgdGhpcyB0ZXh0dXJlXG4gICAgICAgIHZhciBzbW9vdGhpbmdFbmFibGVkID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5zY2FsZU1vZGUgPT09IENPTlNULlNDQUxFX01PREVTLkxJTkVBUjtcbiAgICAgICAgaWYgKHJlbmRlcmVyLnNtb290aFByb3BlcnR5ICYmIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldICE9PSBzbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0W3JlbmRlcmVyLnNtb290aFByb3BlcnR5XSA9IHNtb290aGluZ0VuYWJsZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgdGV4dHVyZSBpcyB0cmltbWVkIHdlIG9mZnNldCBieSB0aGUgdHJpbSB4L3ksIG90aGVyd2lzZSB3ZSB1c2UgdGhlIGZyYW1lIGRpbWVuc2lvbnNcblxuICAgICAgICBpZih0ZXh0dXJlLnJvdGF0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2lkdGggPSB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBkeCA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgXG4gICAgICAgICAgICBkeCArPSB3aWR0aDtcblxuICAgICAgICAgICAgd3QudHggPSBkeSAqIHd0LmEgKyBkeCAqIHd0LmMgKyB3dC50eDtcbiAgICAgICAgICAgIHd0LnR5ID0gZHkgKiB3dC5iICsgZHggKiB3dC5kICsgd3QudHk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gd3QuYTtcbiAgICAgICAgICAgIHd0LmEgID0gLXd0LmM7XG4gICAgICAgICAgICB3dC5jICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICB0ZW1wID0gd3QuYjtcbiAgICAgICAgICAgIHd0LmIgID0gLXd0LmQ7XG4gICAgICAgICAgICB3dC5kICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICAvLyB0aGUgYW5jaG9yIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCBhYm92ZSwgc28gbGV0cyBzZXQgaXQgdG8gemVyb1xuICAgICAgICAgICAgZHggPSAwO1xuICAgICAgICAgICAgZHkgPSAwO1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC53aWR0aDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0ZXh0dXJlLnRyaW0ud2lkdGggOiB0aGlzLmFuY2hvci54ICogLXRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRleHR1cmUudHJpbS5oZWlnaHQgOiB0aGlzLmFuY2hvci55ICogLXRleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfVxuXG5cblxuICAgICAgICAvLyBBbGxvdyBmb3IgcGl4ZWwgcm91bmRpbmdcbiAgICAgICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB3dC5hLFxuICAgICAgICAgICAgICAgIHd0LmIsXG4gICAgICAgICAgICAgICAgd3QuYyxcbiAgICAgICAgICAgICAgICB3dC5kLFxuICAgICAgICAgICAgICAgICh3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMCxcbiAgICAgICAgICAgICAgICAod3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uKSB8IDBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGR4ID0gZHggfCAwO1xuICAgICAgICAgICAgZHkgPSBkeSB8IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgd3QudHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHd0LnR5ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcblxuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIC8vIFRPRE8gY2xlYW4gdXAgY2FjaGluZyAtIGhvdyB0byBjbGVhbiB1cCB0aGUgY2FjaGVzP1xuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC54ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmNyb3AueSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeSAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHNwcml0ZSBhbmQgb3B0aW9uYWxseSBpdHMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBbZGVzdHJveVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgY3VycmVudCB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICovXG5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveVRleHR1cmUsIGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYW5jaG9yID0gbnVsbDtcblxuICAgIGlmIChkZXN0cm95VGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUuZGVzdHJveShkZXN0cm95QmFzZVRleHR1cmUpO1xuICAgIH1cblxuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn07XG5cbi8vIHNvbWUgaGVscGVyIGZ1bmN0aW9ucy4uXG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgY3Jvc3Mtb3JpZ2luIHBhcmFtZXRlclxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBzY2FsZSBtb2RlLCBzZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGZyYW1lSWRcbiAqL1xuU3ByaXRlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTcHJpdGUodGV4dHVyZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGJhc2VkIG9uIGFuIGltYWdlIHVybFxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZUlkIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblNwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFNwcml0ZShUZXh0dXJlLmZyb21JbWFnZShpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSk7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyJyksXG4gICAgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzJyksXG4gICAgZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIGdsQ29yZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFNwcml0ZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9TcHJpdGVSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKiBSZW5kZXJlciBkZWRpY2F0ZWQgdG8gZHJhd2luZyBhbmQgYmF0Y2hpbmcgc3ByaXRlcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZVJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIHZhbHVlcyBzZW50IGluIHRoZSB2ZXJ0ZXggYnVmZmVyLlxuICAgICAqIHBvc2l0aW9uWCwgcG9zaXRpb25ZLCBjb2xvclIsIGNvbG9yRywgY29sb3JCID0gNVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydFNpemUgPSA1O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIHZlcnRleCBpbmZvcm1hdGlvbiBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBpbWFnZXMgaW4gdGhlIFNwcml0ZUJhdGNoIGJlZm9yZSBpdCBmbHVzaGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IENPTlNULlNQUklURV9CQVRDSF9TSVpFOyAvLyAyMDAwIGlzIGEgbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIC8gZGVza3RvcFxuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBpbiBvdXIgYmF0Y2hcbiAgICB2YXIgbnVtVmVydHMgPSAodGhpcy5zaXplICogNCkgKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYmF0Y2gsIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgICB2YXIgbnVtSW5kaWNlcyA9IHRoaXMuc2l6ZSAqIDY7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgdmVydGV4IGRhdGEgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdGhlIHZlcnRleCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEFycmF5QnVmZmVyKG51bVZlcnRzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgRmxvYXQzMkFycmF5IGZvciBwb3NpdGlvbnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG4gICAgXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBVaW50MzJBcnJheSBmb3IgdXZzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciBjb2xvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXMgb2YgdGhlIGdlb21ldHJ5IChxdWFkcykgdG8gZHJhd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzKHRoaXMuc2l6ZSlcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICBcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIHRoaXMuZ3JvdXBzID0gW107XG4gICAgXG4gICAgLy9UT0RPIC0gMzAwIGlzIGEgYml0IG1hZ2ljLCBmaWd1cmUgb3V0IGEgbmljZXIgYW1vdW50IVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zaXplOyBpKyspIFxuICAgIHtcbiAgICAgICAgdGhpcy5ncm91cHNbaV0gPSB7dGV4dHVyZXM6W10sIHRleHR1cmVDb3VudDowLCBpZHM6W10sIHNpemU6MCwgc3RhcnQ6MCwgYmxlbmQ6MH07IFxuICAgIH07XG4gICAgXG4gICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG5cbiAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbnVsbDsgICAgXG59XG5cblxuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ByaXRlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZVJlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdzcHJpdGUnLCBTcHJpdGVSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMuTUFYX1RFWFRVRVMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpO1xuXG4gICAgdGhpcy5fc2hhZGVyID0gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIoZ2wsIHRoaXMuTUFYX1RFWFRVRVMpLy9uZXcgVGV4dHVyZVNoYWRlcihnbCk7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXI7XG5cbiAgICAvLyBjcmVhdGUgYSBjb3VwbGUgb2YgYnVmZmVyc1xuICAgIHRoaXMudmVydGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlcihnbCwgbnVsbCwgZ2wuRFlOQU1JQ19EUkFXKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyKGdsLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIC8vIGJ1aWxkIHRoZSB2YW8gb2JqZWN0IHRoYXQgd2lsbCByZW5kZXIuLlxuICAgIHRoaXMudmFvID0gbmV3IGdsQ29yZS5WZXJ0ZXhBcnJheU9iamVjdChnbCk7XG5cbiAgICB0aGlzLnZhby5hZGRJbmRleCh0aGlzLmluZGV4QnVmZmVyKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCBnbC5VTlNJR05FRF9TSE9SVCwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDIgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgZ2wuVU5TSUdORURfQllURSwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDMgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlSWQsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDQgKiA0KTtcblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IDk5OTk5O1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHJlbmRlciB3aGVuIHVzaW5nIHRoaXMgc3ByaXRlYmF0Y2hcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChzcHJpdGUpXG57XG4gICAgLy9UT0RPIHNldCBibGVuZCBtb2Rlcy4uXG4gICAgLy8gY2hlY2sgdGV4dHVyZS4uXG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID49IHRoaXMuc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICB9XG5cbiAgXG4gICAgLy8gZ2V0IHRoZSB1dnMgZm9yIHRoZSB0ZXh0dXJlXG4gICBcblxuICAgIC8vIGlmIHRoZSB1dnMgaGF2ZSBub3QgdXBkYXRlZCB0aGVuIG5vIHBvaW50IHJlbmRlcmluZyBqdXN0IHlldCFcbiAgICBpZiAoIXNwcml0ZS50ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgIC8vIHB1c2ggYSB0ZXh0dXJlLlxuICAgIC8vIGluY3JlbWVudCB0aGUgYmF0Y2hzaXplXG4gICAgdmFyIG5leHRUZXh0dXJlID0gIHNwcml0ZS50ZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIHZhciBjdXJyZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRHcm91cDtcbiAgICB2YXIgaTtcblxuICAgIGlmKHRoaXMuY3VycmVudFRleHR1cmUgIT09IG5leHRUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG5leHRUZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgaWYoIW5leHRUZXh0dXJlLl9lbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5fZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5faWQgPSB0aGlzLnRleHR1cmVDb3VudDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy50ZXh0dXJlQ291bnQgPT09IHRoaXMuTUFYX1RFWFRVRVMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50OyBpKyspIFxuICAgICAgICAgICAgICAgIHsgICAgIFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnNpemUgPSB0aGlzLmN1cnJlbnRJbmRleCAtIGN1cnJlbnRHcm91cC5zdGFydDtcbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC5zdGFydCA9IHRoaXMuY3VycmVudEluZGV4O1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCsrXSA9IG5leHRUZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcbiAgICB9XG5cbiAgICAvLyBUT0RPIHRyaW0/P1xuICAgIHZhciBpbmRleCA9IHRoaXMuY3VycmVudEluZGV4ICogdGhpcy52ZXJ0Qnl0ZVNpemU7XG5cbiAgICB0aGlzLmN1cnJlbnRJbmRleCsrO1xuXG4gICAgLy8gdXBsb2FkIHRoZSBzcHJpdGUgZWxlbWV0bnMuLi5cbiAgICAvLyB0aGV5IGhhdmUgYWxsIHJlYWR5IGJlZW4gY2FsY3VsYXRlZCBzbyB3ZSBqdXN0IG5lZWQgdG8gcHVzaCB0aGVtIGludG8gdGhlIGJ1ZmZlci5cbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG4gICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMucG9zaXRpb25zO1xuICAgIHZhciB2ZXJ0ZXhEYXRhID0gc3ByaXRlLnZlcnRleERhdGFcbiAgICB2YXIgdGludCA9IChzcHJpdGUudGludCA+PiAxNikgKyAoc3ByaXRlLnRpbnQgJiAweGZmMDApICsgKChzcHJpdGUudGludCAmIDB4ZmYpIDw8IDE2KSArIChzcHJpdGUud29ybGRBbHBoYSAqIDI1NSA8PCAyNCk7XG4gICAgdmFyIHV2cyA9IHNwcml0ZS50ZXh0dXJlLl91dnMudXZzX3VpbnQzMjtcbiAgICAvL3h5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVswXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzFdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzBdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkOyBcbiAgICBcbiAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMl07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVszXTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1sxXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNF07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs1XTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1syXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs2XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzddO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzNdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb250ZW50IGFuZCBlbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPT09IDApcmV0dXJuO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gdGhpcy5jdXJyZW50R3JvdXAuc3RhcnQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgeyAgICAgXG4gICAgICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVzW2ldLl9lbmFibGVkID0gZmFsc2U7XG4gICAgfTtcbiAgIFxuICAgIC8vIGRvIHNvbWUgc21hcnQgYXJyYXkgc3R1ZmYuLlxuICAgIC8vIGRvdWJsZSBzaXplIHNvIHdlIGRvbnQgYWx3YXkgc3ViYXJyYXkgdGhlIGVsZW1lbnRzLi5cbiAgICAvLyB1cGxvYWQgdGhlIHZlcnRzIHRvIHRoZSBidWZmZXJcbiAgICBpZiAodGhpcy5jdXJyZW50QmF0Y2hTaXplID4gKCB0aGlzLnNpemUgKiAwLjUgKSApXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlci51cGxvYWQodGhpcy52ZXJ0aWNlcywgMCwgdHJ1ZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIG8gayAuLiBzdWIgYXJyYXkgaXMgU0xPVz4/XG4gICAgICAgIHZhciB2aWV3ID0gdGhpcy5wb3NpdGlvbnMuc3ViYXJyYXkoMCwgdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZSk7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh2aWV3LCAwLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBiaW5kIHNoYWRlci4uXG4gICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHRoaXMuX3NoYWRlcik7XG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggMCApO1xuXG4gICAgLy8vIHJlbmRlciB0aGUgZ3JvdXBzLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5ncm91cENvdW50OyBpKyspIHtcbiAgICAgICAgXG4gICAgICAgIHZhciBncm91cCA9IHRoaXMuZ3JvdXBzW2ldO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ3JvdXAudGV4dHVyZUNvdW50OyBqKyspIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFRleHR1cmUoZ3JvdXAudGV4dHVyZXNbal0sIGopO1xuICAgICAgICB9O1xuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGdyb3VwLnNpemUgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgZ3JvdXAuc3RhcnQgKiA2ICogMik7XG4gICAgfTtcblxuICAgIC8vIHJlc2V0IGVsZW1lbnRzIGZvciB0aGUgbmV4dCBmbHVzaFxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cENvdW50ID0gMDtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcbiAgICB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgc3ByaXRlIGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZhby5iaW5kKCk7XG59O1xuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xuICAgIHRoaXMudmFvLnVuYmluZCgpO1xufTtcbi8qKlxuICogRGVzdHJveXMgdGhlIFNwcml0ZUJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMudmVydGljZXMgPSBudWxsO1xuICAgIHRoaXMucG9zaXRpb25zID0gbnVsbDtcbiAgICB0aGlzLmNvbG9ycyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMudmVydGV4QnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuc3ByaXRlcyA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuXG5mdW5jdGlvbiBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgbWF4VGV4dHVyZXMpXG57XG4gICAgdmFyIHZlcnRleFNyYyA9IFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcbmF0dHJpYnV0ZSBmbG9hdCBhVGV4dHVyZUlkO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyBmbG9hdCB2VGV4dHVyZUlkO1xcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2VGV4dHVyZUlkID0gYVRleHR1cmVJZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cIjtcbiAgICB2YXIgZnJhZ21lbnRTcmMgPSAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxuJyArIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKSArIFwiXFxuXFxuXCIgKyBmcmFnVGVtcGxhdGVcblxuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMucmVwbGFjZSgvXFwlXFwlL2dpLCAnMTYnKTtcblxuICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXG4gICAgdmFyIHNhbXBsZVZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkrKykge1xuICAgICAgICBzYW1wbGVWYWx1ZXNbaV0gPSBpO1xuICAgIH07XG5cbiAgICBzaGFkZXIuYmluZCgpO1xuICAgIHNoYWRlci51bmlmb3Jtcy51U2FtcGxlcnMgPSBzYW1wbGVWYWx1ZXM7XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVNhbXBsZVNyYyhtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgc3JjID0gJ3ZlYzQgZ2V0U2FtcGxlRnJvbUFycmF5KHNhbXBsZXIyRCB0ZXh0dXJlc1slJV0sIGludCBuZHgsIHZlYzIgdXYpIHtcXG5cXG52ZWM0IGNvbG9yOydcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSBcbiAgICB7XG4gICAgICAgIGlmKGkgPiAwKXNyYyArPSAnXFxuZWxzZSAnO1xuICAgICAgICBpZihpIDwgbWF4VGV4dHVyZXMtMSlzcmMgKz0gJ2lmKG5keCA9PSAnICsgaSArICcpJztcbiAgICAgICAgc3JjICs9ICdcXG57JztcbiAgICAgICAgc3JjICs9ICdcXG5cXHRjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlc1snK2krJ10sIHV2KTsnO1xuICAgICAgICBzcmMgKz0gJ1xcbn0nO1xuICAgIH07XG5cbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAncmV0dXJuIGNvbG9yOyc7XG4gICAgc3JjICs9ICdcXG59JztcblxuICAgIHJldHVybiBzcmM7XG59XG5cbnZhciBmcmFnVGVtcGxhdGUgPSBbXG5cbiAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuICAgICd2YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7JyxcbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJzWyUlXTsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnZ2xfRnJhZ0NvbG9yID0gZ2V0U2FtcGxlRnJvbUFycmF5KHVTYW1wbGVycywgaW50KHZUZXh0dXJlSWQpLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvcjsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcjtcbiIsInZhciBTcHJpdGUgPSByZXF1aXJlKCcuLi9zcHJpdGVzL1Nwcml0ZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgVGV4dCBPYmplY3Qgd2lsbCBjcmVhdGUgYSBsaW5lIG9yIG11bHRpcGxlIGxpbmVzIG9mIHRleHQuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJyBpbiB5b3VyIHRleHQgc3RyaW5nLFxuICogb3IgYWRkIGEgd29yZFdyYXAgcHJvcGVydHkgc2V0IHRvIHRydWUgYW5kIGFuZCB3b3JkV3JhcFdpZHRoIHByb3BlcnR5IHdpdGggYSB2YWx1ZSBpbiB0aGUgc3R5bGUgb2JqZWN0LlxuICpcbiAqIEEgVGV4dCBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGEgc3RyaW5nIGFuZCBhIHN0eWxlIG9iamVjdFxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dCA9IG5ldyBQSVhJLlRleHQoJ1RoaXMgaXMgYSBwaXhpIHRleHQnLHtmb250IDogJzI0cHggQXJpYWwnLCBmaWxsIDogMHhmZjEwMTAsIGFsaWduIDogJ2NlbnRlcid9KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBbc3R5bGVdIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnRdIHtzdHJpbmd9IGRlZmF1bHQgJ2JvbGQgMjBweCBBcmlhbCcgVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gKiBAcGFyYW0gW3N0eWxlLmZpbGw9J2JsYWNrJ10ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdCBzaW5nbGUgbGluZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZV0ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBzdHJva2UgZS5nICdibHVlJywgJyNGQ0ZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZVRoaWNrbmVzcz0wXSB7bnVtYmVyfSBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgc3Ryb2tlLiBEZWZhdWx0IGlzIDAgKG5vIHN0cm9rZSlcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXAsIGl0IG5lZWRzIHdvcmRXcmFwIHRvIGJlIHNldCB0byB0cnVlXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvdz1mYWxzZV0ge2Jvb2xlYW59IFNldCBhIGRyb3Agc2hhZG93IGZvciB0aGUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93QW5nbGU9TWF0aC5QSS80XSB7bnVtYmVyfSBTZXQgYSBhbmdsZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAqIEBwYXJhbSBbc3R5bGUucGFkZGluZz0wXSB7bnVtYmVyfSBPY2Nhc2lvbmFsbHkgc29tZSBmb250cyBhcmUgY3JvcHBlZCBvbiB0b3Agb3IgYm90dG9tLiBBZGRpbmcgc29tZSBwYWRkaW5nIHdpbGxcbiAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVKb2luPSdtaXRlciddIHtzdHJpbmd9IFRoZSBsaW5lSm9pbiBwcm9wZXJ0eSBzZXRzIHRoZSB0eXBlIG9mIGNvcm5lciBjcmVhdGVkLCBpdCBjYW4gcmVzb2x2ZVxuICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAqICAgICAgb3IgaW5jcmVhc2UgdGhlIHNwaWtpbmVzcyBvZiByZW5kZXJlZCB0ZXh0LlxuICovXG5mdW5jdGlvbiBUZXh0KHRleHQsIHN0eWxlLCByZXNvbHV0aW9uKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgZWxlbWVudCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gdG9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGhcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIGNhbnZhcy5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXModGhpcy5jYW52YXMpO1xuICAgIHRleHR1cmUudHJpbSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuICAgIFNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3ByaXRlLnByb3RvdHlwZSk7XG5UZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHQ7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHQ7XG5cblRleHQuZm9udFByb3BlcnRpZXNDYWNoZSA9IHt9O1xuVGV4dC5mb250UHJvcGVydGllc0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuVGV4dC5mb250UHJvcGVydGllc0NvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHQucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueCAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dCwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc2NhbGUueSAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlIC8gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBzdHlsZSBvZiB0aGUgdGV4dFxuICAgICAqXG4gICAgICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmZvbnQ9J2JvbGQgMjBwdCBBcmlhbCddIHtzdHJpbmd9IFRoZSBzdHlsZSBhbmQgc2l6ZSBvZiB0aGUgZm9udFxuICAgICAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGVnICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnN0cm9rZT0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlZyAnYmx1ZScsICcjRkNGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICAgICAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcFdpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIGF0IHdoaWNoIHRleHQgd2lsbCB3cmFwXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSGVpZ2h0XSB7bnVtYmVyfSBUaGUgbGluZSBoZWlnaHQsIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgc3BhY2UgdGhhdCBhIGxldHRlciB1c2VzXG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfG51bWJlcn0gQSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgb24gdGhlIGRyb3BzaGFkb3cgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzZdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0JsdXI9MF0ge251bWJlcn0gU2V0IGEgc2hhZG93IGJsdXIgcmFkaXVzXG4gICAgICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICAgICAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLnRleHRCYXNlbGluZT0nYWxwaGFiZXRpYyddIHtzdHJpbmd9IFRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dCB0aGF0IGlzIHJlbmRlcmVkLlxuICAgICAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gICAgICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gICAgICogQHBhcmFtIFtzdHlsZS5taXRlckxpbWl0PTEwXSB7bnVtYmVyfSBUaGUgbWl0ZXIgbGltaXQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdtaXRlcicgbGluZUpvaW4gbW9kZS4gVGhpcyBjYW4gcmVkdWNlXG4gICAgICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICBzdHlsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdHlsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3R5bGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZmlsbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5maWxsID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5maWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5zdHJva2UgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5zdHJva2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmRyb3BTaGFkb3dDb2xvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlLmZvbnQgPSBzdHlsZS5mb250IHx8ICdib2xkIDIwcHQgQXJpYWwnO1xuICAgICAgICAgICAgc3R5bGUuZmlsbCA9IHN0eWxlLmZpbGwgfHwgJ2JsYWNrJztcbiAgICAgICAgICAgIHN0eWxlLmFsaWduID0gc3R5bGUuYWxpZ24gfHwgJ2xlZnQnO1xuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gc3R5bGUuc3Ryb2tlIHx8ICdibGFjayc7IC8vcHJvdmlkZSBhIGRlZmF1bHQsIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2lzc3Vlcy8xMzZcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZVRoaWNrbmVzcyA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyB8fCAwO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXAgPSBzdHlsZS53b3JkV3JhcCB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLndvcmRXcmFwV2lkdGggPSBzdHlsZS53b3JkV3JhcFdpZHRoIHx8IDEwMDtcblxuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvdyA9IHN0eWxlLmRyb3BTaGFkb3cgfHwgZmFsc2U7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3IgfHwgJyMwMDAwMDAnO1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0FuZ2xlID0gc3R5bGUuZHJvcFNoYWRvd0FuZ2xlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93QW5nbGUgOiBNYXRoLlBJIC8gNjtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSA9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlIDogNTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXIgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dCbHVyIDogMDsgLy9zaGFkb3dCbHVyIGlzICcwJyBieSBkZWZhdWx0IGFjY29yZGluZyB0byBIVE1MXG5cbiAgICAgICAgICAgIHN0eWxlLnBhZGRpbmcgPSBzdHlsZS5wYWRkaW5nIHx8IDA7XG5cbiAgICAgICAgICAgIHN0eWxlLnRleHRCYXNlbGluZSA9IHN0eWxlLnRleHRCYXNlbGluZSB8fCAnYWxwaGFiZXRpYyc7XG5cbiAgICAgICAgICAgIHN0eWxlLmxpbmVKb2luID0gc3R5bGUubGluZUpvaW4gfHwgJ21pdGVyJztcbiAgICAgICAgICAgIHN0eWxlLm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0IHx8IDEwO1xuXG4gICAgICAgICAgICB0aGlzLl9zdHlsZSA9IHN0eWxlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjb3B5IGZvciB0aGUgdGV4dCBvYmplY3QuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHRleHQpe1xuICAgICAgICAgICAgdGV4dCA9IHRleHQudG9TdHJpbmcoKSB8fCAnICc7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dCA9PT0gdGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdGV4dDtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHN0eWxlID0gdGhpcy5fc3R5bGU7XG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuXG4gICAgLy8gd29yZCB3cmFwXG4gICAgLy8gcHJlc2VydmUgb3JpZ2luYWwgdGV4dFxuICAgIHZhciBvdXRwdXRUZXh0ID0gc3R5bGUud29yZFdyYXAgPyB0aGlzLndvcmRXcmFwKHRoaXMuX3RleHQpIDogdGhpcy5fdGV4dDtcblxuICAgIC8vIHNwbGl0IHRleHQgaW50byBsaW5lc1xuICAgIHZhciBsaW5lcyA9IG91dHB1dFRleHQuc3BsaXQoLyg/OlxcclxcbnxcXHJ8XFxuKS8pO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgd2lkdGhcbiAgICB2YXIgbGluZVdpZHRocyA9IG5ldyBBcnJheShsaW5lcy5sZW5ndGgpO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBmb250UHJvcGVydGllcyA9IHRoaXMuZGV0ZXJtaW5lRm9udFByb3BlcnRpZXMoc3R5bGUuZm9udCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBsaW5lV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQobGluZXNbaV0pLndpZHRoO1xuICAgICAgICBsaW5lV2lkdGhzW2ldID0gbGluZVdpZHRoO1xuICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxpbmVXaWR0aCk7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gbWF4TGluZVdpZHRoICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgd2lkdGggKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gKCB3aWR0aCArIHRoaXMuY29udGV4dC5saW5lV2lkdGggKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIC8vIGNhbGN1bGF0ZSB0ZXh0IGhlaWdodFxuICAgIHZhciBsaW5lSGVpZ2h0ID0gdGhpcy5zdHlsZS5saW5lSGVpZ2h0IHx8IGZvbnRQcm9wZXJ0aWVzLmZvbnRTaXplICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuXG4gICAgdmFyIGhlaWdodCA9IGxpbmVIZWlnaHQgKiBsaW5lcy5sZW5ndGg7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBoZWlnaHQgKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9ICggaGVpZ2h0ICsgdGhpcy5fc3R5bGUucGFkZGluZyAqIDIgKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMuY29udGV4dC5zY2FsZSggdGhpcy5yZXNvbHV0aW9uLCB0aGlzLnJlc29sdXRpb24pO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIH1cblxuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxTdHlsZT1cIiNGRjAwMDBcIjtcbiAgICAvL3RoaXMuY29udGV4dC5maWxsUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIHRoaXMuY29udGV4dC5mb250ID0gc3R5bGUuZm9udDtcbiAgICB0aGlzLmNvbnRleHQuc3Ryb2tlU3R5bGUgPSBzdHlsZS5zdHJva2U7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcbiAgICB0aGlzLmNvbnRleHQudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lO1xuICAgIHRoaXMuY29udGV4dC5saW5lSm9pbiA9IHN0eWxlLmxpbmVKb2luO1xuICAgIHRoaXMuY29udGV4dC5taXRlckxpbWl0ID0gc3R5bGUubWl0ZXJMaW1pdDtcblxuICAgIHZhciBsaW5lUG9zaXRpb25YO1xuICAgIHZhciBsaW5lUG9zaXRpb25ZO1xuXG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBpZiAoc3R5bGUuZHJvcFNoYWRvd0JsdXIgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3I7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Qmx1ciA9IHN0eWxlLmRyb3BTaGFkb3dCbHVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4U2hhZG93T2Zmc2V0ID0gTWF0aC5jb3Moc3R5bGUuZHJvcFNoYWRvd0FuZ2xlKSAqIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICAgICAgdmFyIHlTaGFkb3dPZmZzZXQgPSBNYXRoLnNpbihzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogbGluZUhlaWdodCkgKyBmb250UHJvcGVydGllcy5hc2NlbnQ7XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblggKyB4U2hhZG93T2Zmc2V0LCBsaW5lUG9zaXRpb25ZICsgeVNoYWRvd09mZnNldCArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9zZXQgY2FudmFzIHRleHQgc3R5bGVzXG4gICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmZpbGw7XG5cbiAgICAvL2RyYXcgbGluZXMgbGluZSBieSBsaW5lXG4gICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICBpZiAoc3R5bGUuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHlsZS5zdHJva2UgJiYgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVUZXh0dXJlKCk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLnRyaW0ueCA9IDA7XG4gICAgdGV4dHVyZS50cmltLnkgPSAtdGhpcy5fc3R5bGUucGFkZGluZztcblxuICAgIHRleHR1cmUudHJpbS53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRleHR1cmUudHJpbS5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgLSB0aGlzLl9zdHlsZS5wYWRkaW5nKjI7XG5cbiAgICB0aGlzLl93aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuX2hlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZW1pdCgndXBkYXRlJywgIHRleHR1cmUuYmFzZVRleHR1cmUpO1xuXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKi9cblRleHQucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgLy90aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUucmVuZGVyV2ViR0wuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgIC8vICAgdGhpcy5yZXNvbHV0aW9uID0gMS8vcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGFzY2VudCwgZGVzY2VudCBhbmQgZm9udFNpemUgb2YgYSBnaXZlbiBmb250U3R5bGVcbiAqXG4gKiBAcGFyYW0gZm9udFN0eWxlIHtvYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5kZXRlcm1pbmVGb250UHJvcGVydGllcyA9IGZ1bmN0aW9uIChmb250U3R5bGUpXG57XG4gICAgdmFyIHByb3BlcnRpZXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXTtcblxuICAgIGlmICghcHJvcGVydGllcylcbiAgICB7XG4gICAgICAgIHByb3BlcnRpZXMgPSB7fTtcblxuICAgICAgICB2YXIgY2FudmFzID0gVGV4dC5mb250UHJvcGVydGllc0NhbnZhcztcbiAgICAgICAgdmFyIGNvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dDtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgdmFyIHdpZHRoID0gTWF0aC5jZWlsKGNvbnRleHQubWVhc3VyZVRleHQoJ3xNw4lxJykud2lkdGgpO1xuICAgICAgICB2YXIgYmFzZWxpbmUgPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnTScpLndpZHRoKTtcbiAgICAgICAgdmFyIGhlaWdodCA9IDIgKiBiYXNlbGluZTtcblxuICAgICAgICBiYXNlbGluZSA9IGJhc2VsaW5lICogMS40IHwgMDtcblxuICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjZjAwJztcbiAgICAgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgY29udGV4dC50ZXh0QmFzZWxpbmUgPSAnYWxwaGFiZXRpYyc7XG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMwMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxUZXh0KCd8TcOJcScsIDAsIGJhc2VsaW5lKTtcblxuICAgICAgICB2YXIgaW1hZ2VkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCkuZGF0YTtcbiAgICAgICAgdmFyIHBpeGVscyA9IGltYWdlZGF0YS5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lID0gd2lkdGggKiA0O1xuXG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIHZhciBpZHggPSAwO1xuICAgICAgICB2YXIgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGFzY2VudC4gc2NhbiBmcm9tIHRvcCB0byBib3R0b20gdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGJhc2VsaW5lOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggKz0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuYXNjZW50ID0gYmFzZWxpbmUgLSBpO1xuXG4gICAgICAgIGlkeCA9IHBpeGVscyAtIGxpbmU7XG4gICAgICAgIHN0b3AgPSBmYWxzZTtcblxuICAgICAgICAvLyBkZXNjZW50LiBzY2FuIGZyb20gYm90dG9tIHRvIHRvcCB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSBoZWlnaHQ7IGkgPiBiYXNlbGluZTsgaS0tKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGluZTsgaiArPSA0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0b3ApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWR4IC09IGxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLmRlc2NlbnQgPSBpIC0gYmFzZWxpbmU7XG4gICAgICAgIHByb3BlcnRpZXMuZm9udFNpemUgPSBwcm9wZXJ0aWVzLmFzY2VudCArIHByb3BlcnRpZXMuZGVzY2VudDtcblxuICAgICAgICBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXSA9IHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgbmV3bGluZXMgdG8gYSBzdHJpbmcgdG8gaGF2ZSBpdCBvcHRpbWFsbHkgZml0IGludG8gdGhlIGhvcml6b250YWxcbiAqIGJvdW5kcyBzZXQgYnkgdGhlIFRleHQgb2JqZWN0J3Mgd29yZFdyYXBXaWR0aCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUud29yZFdyYXAgPSBmdW5jdGlvbiAodGV4dClcbntcbiAgICAvLyBHcmVlZHkgd3JhcHBpbmcgYWxnb3JpdGhtIHRoYXQgd2lsbCB3cmFwIHdvcmRzIGFzIHRoZSBsaW5lIGdyb3dzIGxvbmdlclxuICAgIC8vIHRoYW4gaXRzIGhvcml6b250YWwgYm91bmRzLlxuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgICB2YXIgd29yZFdyYXBXaWR0aCA9IHRoaXMuX3N0eWxlLndvcmRXcmFwV2lkdGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcGFjZUxlZnQgPSB3b3JkV3JhcFdpZHRoO1xuICAgICAgICB2YXIgd29yZHMgPSBsaW5lc1tpXS5zcGxpdCgnICcpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdvcmRzLmxlbmd0aDsgaisrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgd29yZFdpZHRoID0gdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KHdvcmRzW2pdKS53aWR0aDtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGhXaXRoU3BhY2UgPSB3b3JkV2lkdGggKyB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQoJyAnKS53aWR0aDtcbiAgICAgICAgICAgIGlmIChqID09PSAwIHx8IHdvcmRXaWR0aFdpdGhTcGFjZSA+IHNwYWNlTGVmdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHByaW50aW5nIHRoZSBuZXdsaW5lIGlmIGl0J3MgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxpbmUgdGhhdCBpc1xuICAgICAgICAgICAgICAgIC8vIGdyZWF0ZXIgdGhhbiB0aGUgd29yZCB3cmFwIHdpZHRoLlxuICAgICAgICAgICAgICAgIGlmIChqID4gMClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdvcmRzW2pdO1xuICAgICAgICAgICAgICAgIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGggLSB3b3JkV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0IC09IHdvcmRXaWR0aFdpdGhTcGFjZTtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyAnICsgd29yZHNbal07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaSA8IGxpbmVzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBUZXh0IGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIFRleHRcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIHJldHVybiBTcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcy5jYWxsKHRoaXMsIG1hdHJpeCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dCBvYmplY3QuXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9dHJ1ZV0ge2Jvb2xlYW59IHdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZVRleHR1cmUpXG57XG4gICAgLy8gbWFrZSBzdXJlIHRvIHJlc2V0IHRoZSB0aGUgY29udGV4dCBhbmQgY2FudmFzLi4gZG9udCB3YW50IHRoaXMgaGFuZ2luZyBhcm91bmQgaW4gbWVtb3J5IVxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xuXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG59O1xuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9GaWx0ZXJNYW5hZ2VyJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgdGVtcFJlY3QgPSBuZXcgbWF0aC5SZWN0YW5nbGUoKTtcblxuLyoqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBCYXNlUmVuZGVyVGV4dHVyZSBzaG91bGQgYmUgcHJlbG9hZGVkXG4gKiBvdGhlcndpc2UgYmxhY2sgcmVjdGFuZ2xlcyB3aWxsIGJlIGRyYXduIGluc3RlYWQuXG4gKlxuICogQSBCYXNlUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIEJhc2VyZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIDgwMCwgNjAwKTtcbiAqIHZhciBzcHJpdGUgPSBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJzcGluT2JqXzAxLnBuZ1wiKTtcbiAqXG4gKiBzcHJpdGUucG9zaXRpb24ueCA9IDgwMC8yO1xuICogc3ByaXRlLnBvc2l0aW9uLnkgPSA2MDAvMjtcbiAqIHNwcml0ZS5hbmNob3IueCA9IDAuNTtcbiAqIHNwcml0ZS5hbmNob3IueSA9IDAuNTtcbiAqXG4gKiBCYXNlcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgQmFzZXJlbmRlclRleHR1cmVcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgZm9yIHRoaXMgQmFzZVJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgaWYgKCFyZW5kZXJlcilcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNyZWF0ZSBCYXNlUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgbnVsbCwgc2NhbGVNb2RlKTtcbiAgIFxuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAxMDA7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OOztcbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIERyYXcvcmVuZGVyIHRoZSBnaXZlbiBEaXNwbGF5T2JqZWN0IG9udG8gdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheU9iamVjdCBhbmQgZGVzY2VuZGVudHMgYXJlIHRyYW5zZm9ybWVkIGR1cmluZyB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBJZiBgdXBkYXRlVHJhbnNmb3JtYCBpcyB0cnVlIHRoZW4gdGhlIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkIGJlZm9yZSB0aGVcbiAgICAgKiBtZXRob2QgcmV0dXJucy4gT3RoZXJ3aXNlIGl0IGlzIHVwIHRvIHRoZSBjYWxsaW5nIGNvZGUgdG8gY29ycmVjdGx5IHVzZSBvciByZXNldFxuICAgICAqIHRoZSB0cmFuc2Zvcm1lZCBkaXNwbGF5IG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgaXMgYWx3YXlzIHJlbmRlcmVkIHdpdGggYSB3b3JsZEFscGhhIHZhbHVlIG9mIDEuXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAgICAgKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBPcHRpb25hbCBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIGRpc3BsYXkgb2JqZWN0IGJlZm9yZSByZW5kZXJpbmcuXG4gICAgICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICAgICAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gICAgICogIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkLiBOb3QgcmVzdG9yaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBhIGxpdHRsZSBmYXN0ZXIuXG4gICAgICovXG4gICAgdGhpcy5yZW5kZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgQmFzZVJlbmRlclRleHR1cmUgdXNlcy4gQSBCYXNlUmVuZGVyVGV4dHVyZSBjYW4gb25seSBiZWxvbmcgdG8gb25lIHJlbmRlcmVyIGF0IHRoZSBtb21lbnQgaWYgaXRzIHdlYkdMLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgUmVuZGVyVGFyZ2V0KGdsLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5zY2FsZU1vZGUsIHRoaXMucmVzb2x1dGlvbik7Ly8sIHRoaXMudGhpcy5zY2FsZU1vZGUpO1xuICAgICAgICB0aGlzLl9nbFRleHR1cmVzW2dsLmlkXSA9ICB0aGlzLnRleHR1cmVCdWZmZXIudGV4dHVyZTtcbiAgICAgICAgXG4gICAgICAgIC8vVE9ETyByZWZhY3RvciBmaWx0ZXIgbWFuYWdlci4uIGFzIHJlYWxseSBpdHMgbm8gbG9uZ2VyIGEgbWFuYWdlciBpZiB3ZSB1c2UgaXQgaGVyZS4uXG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJXZWJHTDtcblxuICAgICAgICAvLyB0aGUgY3JlYXRpb24gb2YgYSBmaWx0ZXIgbWFuYWdlciB1bmJpbmRzIHRoZSBidWZmZXJzLi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbiAgICAgICAgaWYodGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0KXRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJDYW52YXM7XG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIodGhpcy53aWR0aCogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbn1cblxuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlVGV4dHVyZS5wcm90b3R5cGUpO1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzZVJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VSZW5kZXJUZXh0dXJlO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGlmICh3aWR0aCA9PT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT09IHRoaXMuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5maWx0ZXJNYW5hZ2VyKVxuICAgIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLnJlbmRlcmVyLmdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcihmYWxzZSwgZGVzdGluYXRpb25GcmFtZSk7XG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gKHVwZGF0ZVRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSA/IHVwZGF0ZVRyYW5zZm9ybSA6IHRydWU7Ly8hdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnRyYW5zZm9ybSA9IG1hdHJpeDtcblxuICAgIC8vVE9ETyBub3QgYSBmYW4gdGhhdCB0aGlzIGlzIGhlcmUuLi4gaXQgd2lsbCBtb3ZlIVxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5hY3RpdmF0ZSgpO1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgaWYgKHVwZGF0ZVRyYW5zZm9ybSlcbiAgICB7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIG1hdHJpeCBvZiB0aGUgZGlzcGxhdHlPYmplY3QuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmlkZW50aXR5KCk7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgICAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRlbXBSZWN0LndpZHRoID0gZnJhbWUuaGVpZ2h0O1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IGZyYW1lLndpZHRoO1xuICAgXG4gICAgLy9UT0RPIHJlbmFtZSB0ZXh0dXJlQnVmZmVyIHRvIHJlbmRlclRhcmdldC4uXG4gICAgdmFyIHRlbXAgPSAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyID0gdGhpcy5maWx0ZXJNYW5hZ2VyO1xuICAgIFxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKGZyYW1lLCB0ZW1wUmVjdCk7XG4gICAgY29uc29sZS5sb2coZGlzcGxheU9iamVjdClcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgdGhpcy50ZXh0dXJlQnVmZmVyLCBjbGVhcik7XG5cbiAgIC8vIGNvbnNvbGUubG9nKFwiUkVOREVSSU5HIFwiKTtcbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0ZW1wO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXJdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChmcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAhIXVwZGF0ZVRyYW5zZm9ybTtcblxuICAgIHZhciB3dCA9IHRlbXBNYXRyaXg7XG5cbiAgICB3dC5pZGVudGl0eSgpO1xuXG4gICAgaWYgKG1hdHJpeClcbiAgICB7XG4gICAgICAgIHd0LmFwcGVuZChtYXRyaXgpO1xuICAgIH1cblxuXG4gICAgd3QudHggKz0gZnJhbWUueDtcbiAgICB3dC50eSArPSBmcmFtZS55O1xuXG4gICAgdmFyIGNhY2hlZFd0ID0gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybTtcbiAgICBcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gd3Q7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgdmFyIGksIGo7XG5cbiAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgXG4vLyAgICB0aGlzLnRleHR1cmVCdWZmZXIuXG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dDtcblxuICAgIHZhciByZWFsUmVzb2x1dGlvbiA9IHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHJlYWxSZXNvbHV0aW9uO1xuXG4gICAgaWYoZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9PT0gd3QpXG4gICAge1xuICAgICAgICAvLyBmaXhlcyBjYWNoZUFzQml0bWFwIEhhcHBlbmluZyBkdXJpbmcgdGhlIGFib3ZlLi5cbiAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IGNhY2hlZFd0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gZGVzdHJveUJhc2Uge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCB0cnVlKTtcblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICAvLyBkZXN0cm95IHRoZSBmaWx0ZXJtYW5hZ2VyLi5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEltYWdlID0gZnVuY3Rpb24gKGZyYW1lKVxue1xuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLnNyYyA9IHRoaXMuZ2V0QmFzZTY0KGZyYW1lKTtcbiAgICByZXR1cm4gaW1hZ2U7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIEJhc2VSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRCYXNlNjQgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRDYW52YXMoZnJhbWUpLnRvRGF0YVVSTCgpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB0byBpdCBhbmQgdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBBIENhbnZhcyBlbGVtZW50IHdpdGggdGhlIHRleHR1cmUgcmVuZGVyZWQgb24uXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgIFxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgQ2FudmFzQnVmZmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHRlbXBDYW52YXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0RhdGEuZGF0YS5zZXQod2ViR0xQaXhlbHMpO1xuXG4gICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGZyYW1lLndpZHRoID09PSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLndpZHRoICYmIFxuICAgICAgICAgICBmcmFtZS5oZWlnaHQgPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIoZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcbiAgICAgICAgICAgIHZhciBjYW52YXNEYXRhID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNvbnRleHQuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggICogcmVzb2x1dGlvbiwgZnJhbWUueSAqIHJlc29sdXRpb24sIGZyYW1lLndpZHRoICogcmVzb2x1dGlvbiwgZnJhbWUuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0ZW1wQ2FudmFzLmNhbnZhcztcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKCBmcmFtZSApXG57XG4gICAgaWYoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgZnJhbWUud2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS53aWR0aDtcbiAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IGZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YShmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoZnJhbWUsIHgsIHkpXG57XG4gICAgdGVtcFJlY3QueCA9IHg7XG4gICAgdGVtcFJlY3QueSA9IHk7XG4gICAgdGVtcFJlY3Qud2lkdGggPSAxIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZihmcmFtZSlcbiAgICB7XG4gICAgICAgIHRlbXBSZWN0LnggKz0gZnJhbWUueDtcbiAgICAgICAgdGVtcFJlY3QueSArPSBmcmFtZS55O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFBpeGVscyh0ZW1wUmVjdCk7XG59O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZS4gQWxsIHRleHR1cmVzIGhhdmUgYSBiYXNlIHRleHR1cmUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBmb3IgZGV2aWNlcyB3aXRoIGRpZmZlcmVudCBwaXhlbCByYXRpb3NcbiAqL1xuZnVuY3Rpb24gQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnVpZCA9IHV0aWxzLnVpZCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgYmFzZSB0ZXh0dXJlIHNldCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAxMDA7XG5cbiAgICAvLyBUT0RPIGRvY3NcbiAgICAvLyB1c2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgZGltZW5zaW9ucyBvZiB0aGUgc291cmNlXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIHdpZHRoIG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsV2lkdGggPSAxMDA7XG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIGhlaWdodCBvZiB0aGUgc291cmNlIG9mIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucmVhbEhlaWdodCA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlIHRvIGFwcGx5IHdoZW4gc2NhbGluZyB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlNDQUxFX01PREVTLkxJTkVBUlxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSBvbmNlIHRoZSBiYXNlIHRleHR1cmUgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG5ldmVyIHRydWUgaWYgdGhlIHVuZGVybHlpbmcgc291cmNlIGZhaWxzIHRvIGxvYWQgb3IgaGFzIG5vIHRleHR1cmUgZGF0YS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIGlmIHRoZSBzb3VyY2UgaXMgY3VycmVudGx5IGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBJZiBhbiBJbWFnZSBzb3VyY2UgaXMgbG9hZGluZyB0aGUgJ2xvYWRlZCcgb3IgJ2Vycm9yJyBldmVudCB3aWxsIGJlXG4gICAgICogZGlzcGF0Y2hlZCB3aGVuIHRoZSBvcGVyYXRpb24gZW5kcy4gQW4gdW5kZXJ5bGluZyBzb3VyY2UgdGhhdCBpc1xuICAgICAqIGltbWVkaWF0ZWx5LWF2YWlsYWJsZSBieXBhc3NlcyBsb2FkaW5nIGVudGlyZWx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGltYWdlIHNvdXJjZSB0aGF0IGlzIHVzZWQgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogVE9ETzogTWFrZSB0aGlzIGEgc2V0dGVyIHRoYXQgY2FsbHMgbG9hZFNvdXJjZSgpO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SW1hZ2V8Q2FudmFzfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuc291cmNlID0gbnVsbDsgLy8gc2V0IGluIGxvYWRTb3VyY2UsIGlmIGF0IGFsbFxuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgaWYgUkdCIGNoYW5uZWxzIHNob3VsZCBiZSBwcmUtbXVsdGlwbGllZCBieSBBbHBoYSAgKFdlYkdMIG9ubHkpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgb3Igbm90IHRoZSB0ZXh0dXJlIGlzIGEgcG93ZXIgb2YgdHdvLCB0cnkgdG8gdXNlIHBvd2VyIG9mIHR3byB0ZXh0dXJlcyBhcyBtdWNoIGFzIHlvdSBjYW5cbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSBmYWxzZTtcblxuICAgIC8vIHVzZWQgZm9yIHdlYkdMXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgYSBtaXBtYXAgb2YgdGhpcyB0ZXh0dXJlIG5lZWRzIHRvIGJlIGdlbmVyYXRlZC4gVGhpcyB2YWx1ZSBuZWVkcyB0byBiZSBzZXQgYmVmb3JlIHRoZSB0ZXh0dXJlIGlzIHVzZWRcbiAgICAgKiBBbHNvIHRoZSB0ZXh0dXJlIG11c3QgYmUgYSBwb3dlciBvZiB0d28gc2l6ZSB0byB3b3JrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubWlwbWFwID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBBIG1hcCBvZiByZW5kZXJlciBJRHMgdG8gd2ViZ2wgdGV4dHVyZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIFdlYkdMVGV4dHVyZT59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbFRleHR1cmVzID0ge307XG4gICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5faWQgPSAwO1xuICAgIFxuICAgIC8vIGlmIG5vIHNvdXJjZSBwYXNzZWQgZG9uJ3QgdHJ5IHRvIGxvYWRcbiAgICBpZiAoc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5sb2FkU291cmNlKHNvdXJjZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZpbmlzaGVzIGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZGVkXG4gICAgICogQG1lbWJlcm9mIFBJWEkuQmFzZVRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZhaWxzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG59XG5cbkJhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdGV4dHVyZSBvbiBhbGwgdGhlIHdlYmdsIHJlbmRlcmVycywgdGhpcyBhbHNvIGFzc3VtZXMgdGhlIHNyYyBoYXMgY2hhbmdlZC5cbiAqXG4gKiBAZmlyZXMgdXBkYXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVhbFdpZHRoID0gdGhpcy5zb3VyY2UubmF0dXJhbFdpZHRoIHx8IHRoaXMuc291cmNlLndpZHRoO1xuICAgIHRoaXMucmVhbEhlaWdodCA9IHRoaXMuc291cmNlLm5hdHVyYWxIZWlnaHQgfHwgdGhpcy5zb3VyY2UuaGVpZ2h0O1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMucmVhbFdpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5yZWFsSGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSB1dGlscy5pc1Bvd2VyT2ZUd28odGhpcy5yZWFsV2lkdGgsIHRoaXMucmVhbEhlaWdodCk7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBMb2FkIGEgc291cmNlLlxuICpcbiAqIElmIHRoZSBzb3VyY2UgaXMgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSwgc3VjaCBhcyBhbiBpbWFnZSB0aGF0IG5lZWRzIHRvIGJlXG4gKiBkb3dubG9hZGVkLCB0aGVuIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmUgZGlzcGF0Y2hlZCBpbiB0aGUgZnV0dXJlXG4gKiBhbmQgYGhhc0xvYWRlZGAgd2lsbCByZW1haW4gZmFsc2UgYWZ0ZXIgdGhpcyBjYWxsLlxuICpcbiAqIFRoZSBsb2dpYyBzdGF0ZSBhZnRlciBjYWxsaW5nIGBsb2FkU291cmNlYCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IChlZy4gYGZyb21JbWFnZWAsIGBuZXcgQmFzZVRleHR1cmVgKSBpczpcbiAqXG4gKiAgICAgaWYgKHRleHR1cmUuaGFzTG9hZGVkKVxuIHtcbiAqICAgICAgICAvLyB0ZXh0dXJlIHJlYWR5IGZvciB1c2VcbiAqICAgICB9IGVsc2UgaWYgKHRleHR1cmUuaXNMb2FkaW5nKVxuIHtcbiAqICAgICAgICAvLyBsaXN0ZW4gdG8gJ2xvYWRlZCcgYW5kL29yICdlcnJvcicgZXZlbnRzIG9uIHRleHR1cmVcbiAqICAgICB9IGVsc2Uge1xuICogICAgICAgIC8vIG5vdCBsb2FkaW5nLCBub3QgZ29pbmcgdG8gbG9hZCBVTkxFU1MgdGhlIHNvdXJjZSBpcyByZWxvYWRlZFxuICogICAgICAgIC8vIChpdCBtYXkgc3RpbGwgbWFrZSBzZW5zZSB0byBsaXN0ZW4gdG8gdGhlIGV2ZW50cylcbiAqICAgICB9XG4gKlxuICogQHByb3RlY3RlZFxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmxvYWRTb3VyY2UgPSBmdW5jdGlvbiAoc291cmNlKVxue1xuICAgIHZhciB3YXNMb2FkaW5nID0gdGhpcy5pc0xvYWRpbmc7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKHdhc0xvYWRpbmcgJiYgdGhpcy5zb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmVycm9yID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcblxuICAgIC8vIEFwcGx5IHNvdXJjZSBpZiBsb2FkZWQuIE90aGVyd2lzZSBzZXR1cCBhcHByb3ByaWF0ZSBsb2FkaW5nIG1vbml0b3JzLlxuICAgIGlmICgodGhpcy5zb3VyY2UuY29tcGxldGUgfHwgdGhpcy5zb3VyY2UuZ2V0Q29udGV4dCkgJiYgdGhpcy5zb3VyY2Uud2lkdGggJiYgdGhpcy5zb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFzb3VyY2UuZ2V0Q29udGV4dClcbiAgICB7XG5cbiAgICAgICAgLy8gSW1hZ2UgZmFpbCAvIG5vdCByZWFkeVxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgdmFyIHNjb3BlID0gdGhpcztcblxuICAgICAgICBzb3VyY2Uub25sb2FkID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgIHNjb3BlLmVtaXQoJ2xvYWRlZCcsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzb3VyY2Uub25lcnJvciA9IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXNjb3BlLmlzTG9hZGluZylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuZW1pdCgnZXJyb3InLCBzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUGVyIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI3RoZS1pbWctZWxlbWVudFxuICAgICAgICAvLyAgIFwiVGhlIHZhbHVlIG9mIGBjb21wbGV0ZWAgY2FuIHRodXMgY2hhbmdlIHdoaWxlIGEgc2NyaXB0IGlzIGV4ZWN1dGluZy5cIlxuICAgICAgICAvLyBTbyBjb21wbGV0ZSBuZWVkcyB0byBiZSByZS1jaGVja2VkIGFmdGVyIHRoZSBjYWxsYmFja3MgaGF2ZSBiZWVuIGFkZGVkLi5cbiAgICAgICAgLy8gTk9URTogY29tcGxldGUgd2lsbCBiZSB0cnVlIGlmIHRoZSBpbWFnZSBoYXMgbm8gc3JjIHNvIGJlc3QgdG8gY2hlY2sgaWYgdGhlIHNyYyBpcyBzZXQuXG4gICAgICAgIGlmIChzb3VyY2UuY29tcGxldGUgJiYgc291cmNlLnNyYylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gLi5hbmQgaWYgd2UncmUgY29tcGxldGUgbm93LCBubyBuZWVkIGZvciBjYWxsYmFja3NcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiBhbnkgcHJldmlvdXMgc3Vic2NyaWJlcnMgcG9zc2libGVcbiAgICAgICAgICAgICAgICBpZiAod2FzTG9hZGluZylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZCBpbnRlcm5hbGx5IHRvIHVwZGF0ZSB0aGUgd2lkdGgsIGhlaWdodCwgYW5kIHNvbWUgb3RoZXIgdHJhY2tpbmcgdmFycyBvbmNlXG4gKiBhIHNvdXJjZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuX3NvdXJjZUxvYWRlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgYmFzZSB0ZXh0dXJlXG4gKlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuaW1hZ2VVcmwpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcbiAgICAgICAgZGVsZXRlIHV0aWxzLlRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcblxuICAgICAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgICAgICBpZiAoIW5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZS5zcmMgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdGhpcy5zb3VyY2UuX3BpeGlJZF07XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsO1xuXG4gICAgdGhpcy5kaXNwb3NlKCk7XG59O1xuXG4vKipcbiAqIEZyZWVzIHRoZSB0ZXh0dXJlIGZyb20gV2ViR0wgbWVtb3J5IHdpdGhvdXQgZGVzdHJveWluZyB0aGlzIHRleHR1cmUgb2JqZWN0LlxuICogVGhpcyBtZWFucyB5b3UgY2FuIHN0aWxsIHVzZSB0aGUgdGV4dHVyZSBsYXRlciB3aGljaCB3aWxsIHVwbG9hZCBpdCB0byBHUFVcbiAqIG1lbW9yeSBhZ2Fpbi5cbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmVtaXQoJ2Rpc3Bvc2UnLCB0aGlzKTtcblxuICAgIC8vIHRoaXMgc2hvdWxkIG5vIGxvbmdlciBiZSBuZWVkZWQsIHRoZSByZW5kZXJlcnMgc2hvdWxkIGNsZWFudXAgYWxsIHRoZSBnbCB0ZXh0dXJlcy5cbiAgICAvLyB0aGlzLl9nbFRleHR1cmVzID0ge307XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHNvdXJjZSBpbWFnZSBvZiB0aGUgdGV4dHVyZS5cbiAqIFRoZSBvcmlnaW5hbCBzb3VyY2UgbXVzdCBiZSBhbiBJbWFnZSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBuZXdTcmMge3N0cmluZ30gdGhlIHBhdGggb2YgdGhlIGltYWdlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGVTb3VyY2VJbWFnZSA9IGZ1bmN0aW9uIChuZXdTcmMpXG57XG4gICAgdGhpcy5zb3VyY2Uuc3JjID0gbmV3U3JjO1xuXG4gICAgdGhpcy5sb2FkU291cmNlKHRoaXMuc291cmNlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGJhc2UgdGV4dHVyZSBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSBiYXNlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBjcmVhdGVkIGFuZCBsb2FkZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlVXJsIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gU2hvdWxkIHVzZSBhbm9ueW1vdXMgQ09SUz8gRGVmYXVsdHMgdG8gdHJ1ZSBpZiB0aGUgVVJMIGlzIG5vdCBhIGRhdGEtVVJJLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF07XG5cbiAgICBpZiAoY3Jvc3NvcmlnaW4gPT09IHVuZGVmaW5lZCAmJiBpbWFnZVVybC5pbmRleE9mKCdkYXRhOicpICE9PSAwKVxuICAgIHtcbiAgICAgICAgY3Jvc3NvcmlnaW4gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICAvLyBuZXcgSW1hZ2UoKSBicmVha3MgdGV4IGxvYWRpbmcgaW4gc29tZSB2ZXJzaW9ucyBvZiBDaHJvbWUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjM4MDcxXG4gICAgICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpOy8vZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgICAgIGlmIChjcm9zc29yaWdpbilcbiAgICAgICAge1xuICAgICAgICAgICAgaW1hZ2UuY3Jvc3NPcmlnaW4gPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGltYWdlLCBzY2FsZU1vZGUpO1xuICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IGltYWdlVXJsO1xuXG4gICAgICAgIGltYWdlLnNyYyA9IGltYWdlVXJsO1xuXG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gYmFzZVRleHR1cmU7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4gQDJ4IGF0IHRoZSBlbmQgb2YgdGhlIHVybCB3ZSBhcmUgZ29pbmcgdG8gYXNzdW1lIGl0cyBhIGhpZ2hyZXMgaW1hZ2VcbiAgICAgICAgYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHV0aWxzLmdldFJlc29sdXRpb25PZlVybChpbWFnZVVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIGlmICghY2FudmFzLl9waXhpSWQpXG4gICAge1xuICAgICAgICBjYW52YXMuX3BpeGlJZCA9ICdjYW52YXNfJyArIHV0aWxzLnVpZCgpO1xuICAgIH1cblxuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbY2FudmFzLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGNhbnZhcywgc2NhbGVNb2RlKTtcbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuIiwidmFyIEJhc2VSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbi8qKlxuICogQSBSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIFJlbmRlclRleHR1cmUgdGFrZXMgYSBzbmFwc2hvdCBvZiBhbnkgRGlzcGxheSBPYmplY3QgZ2l2ZW4gdG8gaXRzIHJlbmRlciBtZXRob2QuIFRoZSBwb3NpdGlvblxuICogYW5kIHJvdGF0aW9uIG9mIHRoZSBnaXZlbiBEaXNwbGF5IE9iamVjdHMgaXMgaWdub3JlZC4gRm9yIGV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDEwMjQsIDEwMjQsIHsgdmlldzogY2FudmFzLCByYXRpbzogMSB9KTtcbiAqIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKHNwcml0ZSk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgU3ByaXRlIGluIHRoaXMgY2FzZSB3aWxsIGJlIHJlbmRlcmVkIHRvIGEgcG9zaXRpb24gb2YgMCwwLiBUbyByZW5kZXIgdGhpcyBzcHJpdGUgYXQgaXRzIGFjdHVhbFxuICogcG9zaXRpb24gYSBDb250YWluZXIgc2hvdWxkIGJlIHVzZWQ6XG4gKlxuICogYGBganNcbiAqIHZhciBkb2MgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqXG4gKiBkb2MuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqXG4gKiByZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBSZW5kZXJUZXh0dXJlXG4gKiBAcGFyYW0gW3dpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtoZWlnaHQ9MTAwXSB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtzY2FsZU1vZGVdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIFtyZXNvbHV0aW9uPTFdIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICovXG5mdW5jdGlvbiBSZW5kZXJUZXh0dXJlKGJhc2VSZW5kZXJUZXh0dXJlLCBmcmFtZSlcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIFJlbmRlclRleHR1cmUsIHlvdSBtdXN0IHBhc3MgYSByZW5kZXJlciBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIG9iamVjdCB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtCYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICBUZXh0dXJlLmNhbGwodGhpcyxcbiAgICAgICAgYmFzZVJlbmRlclRleHR1cmUsXG4gICAgICAgIGZyYW1lIFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fdXBkYXRlVXZzKCk7XG59XG5cblJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlLnByb3RvdHlwZSk7XG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgUmVuZGVyVGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gdXBkYXRlQmFzZSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBiYXNlVGV4dHVyZS53aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBiZSByZXNpemVkIGFzIHdlbGw/XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB1cGRhdGVCYXNlKVxue1xuICAgXG4gICAgLy9UT0RPIC0gY291bGQgYmUgbm90IHJlcXVpcmVkLi5cbiAgICB0aGlzLnZhbGlkID0gKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTtcblxuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy5jcm9wLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jcm9wLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh1cGRhdGVCYXNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5yZXNpemUod2lkdGgsIGhlaWdodClcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLmNsZWFyKHRoaXMuZnJhbWUpXG4gICAgXG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5iYXNlVGV4dHVyZS5yZW5kZXIodGhpcy5mcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIHRoaXMgdGV4dHVyZS4gSXQgd29ya3MgYnkgY2FsbGluZyBSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0QmFzZTY0LmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0Q2FudmFzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRDYW52YXModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgdGhlIGVudGlyZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbHModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgYSBwaXhlbCB3aXRoaW4gdGhlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbCh0aGlzLmZyYW1lLCB4LCB5KTtcbn07XG5cblJlbmRlclRleHR1cmUuY3JlYXRlID0gZnVuY3Rpb24ocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICByZXR1cm4gbmV3IFJlbmRlclRleHR1cmUobmV3IEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pKTtcbn1cblxuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzID0gcmVxdWlyZSgnLi9UZXh0dXJlVXZzJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZSBvciBwYXJ0IG9mIGFuIGltYWdlLiBJdCBjYW5ub3QgYmUgYWRkZWRcbiAqIHRvIHRoZSBkaXNwbGF5IGxpc3QgZGlyZWN0bHkuIEluc3RlYWQgdXNlIGl0IGFzIHRoZSB0ZXh0dXJlIGZvciBhIFNwcml0ZS4gSWYgbm8gZnJhbWUgaXMgcHJvdmlkZWQgdGhlbiB0aGUgd2hvbGUgaW1hZ2UgaXMgdXNlZC5cbiAqXG4gKiBZb3UgY2FuIGRpcmVjdGx5IGNyZWF0ZSBhIHRleHR1cmUgZnJvbSBhbiBpbWFnZSBhbmQgdGhlbiByZXVzZSBpdCBtdWx0aXBsZSB0aW1lcyBsaWtlIHRoaXMgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIHZhciBzcHJpdGUxID0gbmV3IFBJWEkuU3ByaXRlKHRleHR1cmUpO1xuICogdmFyIHNwcml0ZTIgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gYmFzZVRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV9IFRoZSBiYXNlIHRleHR1cmUgc291cmNlIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZSBmcm9tXG4gKiBAcGFyYW0gW2ZyYW1lXSB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5nbGUgZnJhbWUgb2YgdGhlIHRleHR1cmUgdG8gc2hvd1xuICogQHBhcmFtIFtjcm9wXSB7UElYSS5SZWN0YW5nbGV9IFRoZSBhcmVhIG9mIG9yaWdpbmFsIHRleHR1cmVcbiAqIEBwYXJhbSBbdHJpbV0ge1BJWEkuUmVjdGFuZ2xlfSBUcmltbWVkIHRleHR1cmUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gW3JvdGF0ZV0ge2Jvb2xlYW59IGluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXMgKCB1c2VkIGJ5IHRleHR1cmUgcGFja2VyIClcbiAqL1xuZnVuY3Rpb24gVGV4dHVyZShiYXNlVGV4dHVyZSwgZnJhbWUsIGNyb3AsIHRyaW0sIHJvdGF0ZSlcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIERvZXMgdGhpcyBUZXh0dXJlIGhhdmUgYW55IGZyYW1lIGRhdGEgYXNzaWduZWQgdG8gaXQ/XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubm9GcmFtZSA9IGZhbHNlO1xuXG4gICAgaWYgKCFmcmFtZSlcbiAgICB7XG4gICAgICAgIHRoaXMubm9GcmFtZSA9IHRydWU7XG4gICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuICAgIH1cblxuICAgIGlmIChiYXNlVGV4dHVyZSBpbnN0YW5jZW9mIFRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmFzZVRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy5iYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdHJpbSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy50cmltID0gdHJpbTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgdGhlIHJlbmRlcmVyIGtub3cgaWYgdGhlIHRleHR1cmUgaXMgdmFsaWQuIElmIGl0J3Mgbm90IHRoZW4gaXQgY2Fubm90IGJlIHJlbmRlcmVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHdpbGwgbGV0IGEgcmVuZGVyZXIga25vdyB0aGF0IGEgdGV4dHVyZSBoYXMgYmVlbiB1cGRhdGVkICh1c2VkIG1haW5seSBmb3Igd2ViR0wgdXYgdXBkYXRlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXF1aXJlc1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFdlYkdMIFVWIGRhdGEgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0dXJlIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIGFyZWEgb2YgdGhlIEJhc2VUZXh0dXJlIGltYWdlIHRvIGFjdHVhbGx5IGNvcHkgdG8gdGhlIENhbnZhcyAvIFdlYkdMIHdoZW4gcmVuZGVyaW5nLFxuICAgICAqIGlycmVzcGVjdGl2ZSBvZiB0aGUgYWN0dWFsIGZyYW1lIHNpemUgb3IgcGxhY2VtZW50ICh3aGljaCBjYW4gYmUgaW5mbHVlbmNlZCBieSB0cmltbWVkIHRleHR1cmUgYXRsYXNlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3JvcCA9IGNyb3AgfHwgZnJhbWU7Ly9uZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgcm90YXRlZCBieSA5MCBkZWdyZWVzXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb3RhdGUgPSAhIXJvdGF0ZTtcblxuICAgIGlmIChiYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICBmcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gZnJhbWUgd2Ugc2hvdWxkIG1vbml0b3IgZm9yIGFueSBiYXNlIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5vbigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZS5vbmNlKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZC4gVGhpcyBoYXBwZW5zIGlmIHRoZSBmcmFtZSBvciB0aGUgYmFzZVRleHR1cmUgaXMgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBldmVudCB1cGRhdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0dXJlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqL1xuICAgIGZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBmcmFtZTtcblxuICAgICAgICAgICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHRoaXMud2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMudHJpbSAmJiAhdGhpcy5yb3RhdGUgJiYgKGZyYW1lLnggKyBmcmFtZS53aWR0aCA+IHRoaXMuYmFzZVRleHR1cmUud2lkdGggfHwgZnJhbWUueSArIGZyYW1lLmhlaWdodCA+IHRoaXMuYmFzZVRleHR1cmUuaGVpZ2h0KSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHR1cmUgRXJyb3I6IGZyYW1lIGRvZXMgbm90IGZpdCBpbnNpZGUgdGhlIGJhc2UgVGV4dHVyZSBkaW1lbnNpb25zICcgKyB0aGlzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy90aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuc291cmNlICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuICAgICAgICAgICAgdGhpcy52YWxpZCA9IGZyYW1lICYmIGZyYW1lLndpZHRoICYmIGZyYW1lLmhlaWdodCAmJiB0aGlzLmJhc2VUZXh0dXJlLmhhc0xvYWRlZDtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJpbSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy50cmltLmhlaWdodDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS53aWR0aCA9IHRoaXMudHJpbS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JvcCA9IGZyYW1lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy52YWxpZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVVdnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhpcyB0ZXh0dXJlIG9uIHRoZSBncHUuXG4gKlxuICovXG5UZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYmFzZVRleHR1cmUudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgbG9hZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZUxvYWRlZCA9IGZ1bmN0aW9uIChiYXNlVGV4dHVyZSlcbntcbiAgICAvLyBUT0RPIHRoaXMgY29kZSBsb29rcyBjb25mdXNpbmcuLiBib28gdG8gYWJ1c2luZyBnZXR0ZXJzIGFuZCBzZXR0ZXJzcyFcbiAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMuX2ZyYW1lO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgdXBkYXRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLm9uQmFzZVRleHR1cmVVcGRhdGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZT1mYWxzZV0ge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZSlcbntcbiAgICBpZiAodGhpcy5iYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGlmIChkZXN0cm95QmFzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2ZyYW1lID0gbnVsbDtcbiAgICB0aGlzLl91dnMgPSBudWxsO1xuICAgIHRoaXMudHJpbSA9IG51bGw7XG4gICAgdGhpcy5jcm9wID0gbnVsbDtcblxuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIHRoaXMub2ZmKCdkaXNwb3NlJywgdGhpcy5kaXNwb3NlLCB0aGlzKTtcbiAgICB0aGlzLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRleHR1cmUgb2JqZWN0IHRoYXQgYWN0cyB0aGUgc2FtZSBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9XG4gKi9cblRleHR1cmUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUodGhpcy5iYXNlVGV4dHVyZSwgdGhpcy5mcmFtZSwgdGhpcy5jcm9wLCB0aGlzLnRyaW0sIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuX3VwZGF0ZVV2cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLl91dnMpXG4gICAge1xuICAgICAgICB0aGlzLl91dnMgPSBuZXcgVGV4dHVyZVV2cygpO1xuICAgIH1cblxuICAgIHRoaXMuX3V2cy5zZXQodGhpcy5jcm9wLCB0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLnJvdGF0ZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBUZXh0dXJlIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGNyb3Nzb3JpZ2luIHtib29sZWFufSBXaGV0aGVyIHJlcXVlc3RzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGNyb3Nzb3JpZ2luXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbiAgICAgICAgdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXSA9IHRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZScpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhcywgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW8ge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAodHlwZW9mIHZpZGVvID09PSAnc3RyaW5nJylcbiAgICB7XG4gICAgICAgIHJldHVybiBUZXh0dXJlLmZyb21WaWRlb1VybCh2aWRlbywgc2NhbGVNb2RlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgdmlkZW8gdXJsLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1VybCB7c3RyaW5nfVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gQSBUZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbVZpZGVvVXJsID0gZnVuY3Rpb24gKHZpZGVvVXJsLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh2aWRlb1VybCwgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEFkZHMgYSB0ZXh0dXJlIHRvIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLiBUaGlzIGNhY2hlIGlzIHNoYXJlZCBhY3Jvc3MgdGhlIHdob2xlIFBJWEkgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSBUZXh0dXJlIHRvIGFkZCB0byB0aGUgY2FjaGUuXG4gKiBAcGFyYW0gaWQge3N0cmluZ30gVGhlIGlkIHRoYXQgdGhlIHRleHR1cmUgd2lsbCBiZSBzdG9yZWQgYWdhaW5zdC5cbiAqL1xuVGV4dHVyZS5hZGRUZXh0dXJlVG9DYWNoZSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBpZClcbntcbiAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdID0gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgdGV4dHVyZSBmcm9tIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgb2YgdGhlIHRleHR1cmUgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0aGF0IHdhcyByZW1vdmVkXG4gKi9cblRleHR1cmUucmVtb3ZlVGV4dHVyZUZyb21DYWNoZSA9IGZ1bmN0aW9uIChpZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtpZF07XG5cbiAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcbiAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpZF07XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogQW4gZW1wdHkgdGV4dHVyZSwgdXNlZCBvZnRlbiB0byBub3QgaGF2ZSB0byBjcmVhdGUgbXVsdGlwbGUgZW1wdHkgdGV4dHVyZXMuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmUuRU1QVFkgPSBuZXcgVGV4dHVyZShuZXcgQmFzZVRleHR1cmUoKSk7XG4iLCJcbi8qKlxuICogQSBzdGFuZGFyZCBvYmplY3QgdG8gc3RvcmUgdGhlIFV2cyBvZiBhIHRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBUZXh0dXJlVXZzKClcbntcbiAgICB0aGlzLngwID0gMDtcbiAgICB0aGlzLnkwID0gMDtcblxuICAgIHRoaXMueDEgPSAxO1xuICAgIHRoaXMueTEgPSAwO1xuXG4gICAgdGhpcy54MiA9IDE7XG4gICAgdGhpcy55MiA9IDE7XG5cbiAgICB0aGlzLngzID0gMDtcbiAgICB0aGlzLnkzID0gMTtcblxuICAgIHRoaXMueHkwX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTFfdWludDMyID0gMDtcbiAgICB0aGlzLnh5Ml91aW50MzIgPSAwO1xuICAgIHRoaXMueHkzX3VpbnQzMiA9IDA7XG5cbiAgICB0aGlzLnV2c191aW50MzIgPSBuZXcgVWludDMyQXJyYXkoNClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlVXZzO1xuXG4vKipcbiAqIFNldHMgdGhlIHRleHR1cmUgVXZzIGJhc2VkIG9uIHRoZSBnaXZlbiBmcmFtZSBpbmZvcm1hdGlvblxuICogQHBhcmFtIGZyYW1lIHtQSVhJLlJlY3RhbmdsZX1cbiAqIEBwYXJhbSBiYXNlRnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIHJvdGF0ZSB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIGZyYW1lIGlzIHJvdGF0ZWRcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmVVdnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChmcmFtZSwgYmFzZUZyYW1lLCByb3RhdGUpXG57XG4gICAgdmFyIHR3ID0gYmFzZUZyYW1lLndpZHRoO1xuICAgIHZhciB0aCA9IGJhc2VGcmFtZS5oZWlnaHQ7XG5cbiAgICBpZihyb3RhdGUpXG4gICAge1xuICAgICAgICB0aGlzLngwID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUuaGVpZ2h0KSAvIHR3O1xuICAgICAgICB0aGlzLnkxID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkyID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gZnJhbWUueSAvIHRoO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMueDAgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MiA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gKGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQpIC8gdGg7XG4gICAgfVxuXG4gICAgdGhpcy51dnNfdWludDMyWzBdID0gKCgodGhpcy55MCAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngwICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbMV0gPSAoKCh0aGlzLnkxICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDEgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsyXSA9ICgoKHRoaXMueTIgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MiAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzNdID0gKCgodGhpcy55MyAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngzICogNjU1MzUpICYgMHhGRkZGKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBvZiBhIFtwbGF5aW5nXSBWaWRlby5cbiAqXG4gKiBWaWRlbyBiYXNlIHRleHR1cmVzIG1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kIGluIHRoZWlyIGNyZWF0aW9uIHByb2Nlc3MuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZCBpbiBzZXZlcmFsIHdheXMsIHN1Y2ggYXM6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwoJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0Jyk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh7IHNyYzogJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoWycvdmlkZW8ud2VibScsICcvdmlkZW8ubXA0J10pO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzKFtcbiAqICAgICB7IHNyYzogJy92aWRlby53ZWJtJywgbWltZTogJ3ZpZGVvL3dlYm0nIH0sXG4gKiAgICAgeyBzcmM6ICcvdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfVxuICogXSk7XG4gKiBgYGBcbiAqXG4gKiBTZWUgdGhlIFtcImRldXNcIiBkZW1vXShodHRwOi8vd3d3Lmdvb2Rib3lkaWdpdGFsLmNvbS9waXhpanMvZXhhbXBsZXMvZGV1cy8pLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5CYXNlVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzb3VyY2Uge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIFZpZGVvQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFzb3VyY2UpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHZpZGVvIHNvdXJjZSBlbGVtZW50IHNwZWNpZmllZC4nKTtcbiAgICB9XG5cbiAgICAvLyBob29rIGluIGhlcmUgdG8gY2hlY2sgaWYgdmlkZW8gaXMgYWxyZWFkeSBhdmFpbGFibGUuXG4gICAgLy8gQmFzZVRleHR1cmUgbG9va3MgZm9yIGEgc291cmNlLmNvbXBsZXRlIGJvb2xlYW4sIHBsdXMgd2lkdGggJiBoZWlnaHQuXG5cbiAgICBpZiAoKHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9FTk9VR0hfREFUQSB8fCBzb3VyY2UucmVhZHlTdGF0ZSA9PT0gc291cmNlLkhBVkVfRlVUVVJFX0RBVEEpICYmIHNvdXJjZS53aWR0aCAmJiBzb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgc291cmNlLmNvbXBsZXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBCYXNlVGV4dHVyZS5jYWxsKHRoaXMsIHNvdXJjZSwgc2NhbGVNb2RlKTtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCB0aGUgYmFzZSB0ZXh0dXJlIGF1dG9tYXRpY2FsbHkgdXBkYXRlIGl0c2VsZiwgc2V0IHRvIHRydWUgYnkgZGVmYXVsdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG5cbiAgICB0aGlzLl9vblVwZGF0ZSA9IHRoaXMuX29uVXBkYXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fb25DYW5QbGF5ID0gdGhpcy5fb25DYW5QbGF5LmJpbmQodGhpcyk7XG5cbiAgICBpZiAoIXNvdXJjZS5jb21wbGV0ZSlcbiAgICB7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgdGhpcy5fb25DYW5QbGF5KTtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICAvLyBzdGFydGVkIHBsYXlpbmcuLlxuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX29uUGxheVN0YXJ0LmJpbmQodGhpcykpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9vblBsYXlTdG9wLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHRoaXMuX19sb2FkZWQgPSBmYWxzZTtcbn1cblxuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZpZGVvQmFzZVRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFZpZGVvQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVGhlIGludGVybmFsIHVwZGF0ZSBsb29wIG9mIHRoZSB2aWRlbyBiYXNlIHRleHR1cmUsIG9ubHkgcnVucyB3aGVuIGF1dG9VcGRhdGUgaXMgc2V0IHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25VcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJ1bnMgdGhlIHVwZGF0ZSBsb29wIHdoZW4gdGhlIHZpZGVvIGlzIHJlYWR5IHRvIHBsYXlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5hdXRvVXBkYXRlKVxuICAgIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9vblVwZGF0ZSk7XG4gICAgICAgIHRoaXMuYXV0b1VwZGF0ZSA9IHRydWU7XG4gICAgfVxufTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIGEgcGF1c2UgZXZlbnQgaXMgdHJpZ2dlcmVkLCBzdG9wcyB0aGUgdXBkYXRlIGxvb3BcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gdGhlIHZpZGVvIGlzIGxvYWRlZCBhbmQgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vbkNhblBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX29uQ2FuUGxheSk7XG5cbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuc291cmNlLnZpZGVvV2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5zb3VyY2UudmlkZW9IZWlnaHQ7XG5cbiAgICAgICAgdGhpcy5zb3VyY2UucGxheSgpO1xuXG4gICAgICAgIC8vIHByZXZlbnQgbXVsdGlwbGUgbG9hZGVkIGRpc3BhdGNoZXMuLlxuICAgICAgICBpZiAoIXRoaXMuX19sb2FkZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX19sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5zb3VyY2UuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB0aGlzLnNvdXJjZS5fcGl4aUlkIF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNvdXJjZS5fcGl4aUlkO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIE1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlZpZGVvQmFzZVRleHR1cmV9XG4gKi9cblZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvID0gZnVuY3Rpb24gKHZpZGVvLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCF2aWRlby5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgdmlkZW8uX3BpeGlJZCA9ICd2aWRlb18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt2aWRlby5fcGl4aUlkXTtcblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBWaWRlb0Jhc2VUZXh0dXJlKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB2aWRlby5fcGl4aUlkIF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgQmFzZVRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIHZpZGVvIGVsZW1lbnQuXG4gKiBUaGlzIEJhc2VUZXh0dXJlIGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIGEgdGV4dHVyZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1NyYyB7c3RyaW5nfG9iamVjdHxzdHJpbmdbXXxvYmplY3RbXX0gVGhlIFVSTChzKSBmb3IgdGhlIHZpZGVvLlxuICogQHBhcmFtIFt2aWRlb1NyYy5zcmNdIHtzdHJpbmd9IE9uZSBvZiB0aGUgc291cmNlIHVybHMgZm9yIHRoZSB2aWRlb1xuICogQHBhcmFtIFt2aWRlb1NyYy5taW1lXSB7c3RyaW5nfSBUaGUgbWltZXR5cGUgb2YgdGhlIHZpZGVvIChlLmcuICd2aWRlby9tcDQnKS4gSWYgbm90IHNwZWNpZmllZFxuICogIHRoZSB1cmwncyBleHRlbnNpb24gd2lsbCBiZSB1c2VkIGFzIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgbWltZSB0eXBlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsID0gZnVuY3Rpb24gKHZpZGVvU3JjLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcblxuICAgIC8vIGFycmF5IG9mIG9iamVjdHMgb3Igc3RyaW5nc1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZpZGVvU3JjKSlcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlkZW9TcmMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyY1tpXS5zcmMgfHwgdmlkZW9TcmNbaV0sIHZpZGVvU3JjW2ldLm1pbWUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzaW5nbGUgb2JqZWN0IG9yIHN0cmluZ1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyYy5zcmMgfHwgdmlkZW9TcmMsIHZpZGVvU3JjLm1pbWUpKTtcbiAgICB9XG5cbiAgICB2aWRlby5sb2FkKCk7XG4gICAgdmlkZW8ucGxheSgpO1xuXG4gICAgcmV0dXJuIFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpO1xufTtcblxuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyA9IFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybDtcblxuZnVuY3Rpb24gY3JlYXRlU291cmNlKHBhdGgsIHR5cGUpXG57XG4gICAgaWYgKCF0eXBlKVxuICAgIHtcbiAgICAgICAgdHlwZSA9ICd2aWRlby8nICsgcGF0aC5zdWJzdHIocGF0aC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpO1xuXG4gICAgc291cmNlLnNyYyA9IHBhdGg7XG4gICAgc291cmNlLnR5cGUgPSB0eXBlO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn1cbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIC8vIEludGVybmFsIGV2ZW50IHVzZWQgYnkgY29tcG9zZWQgZW1pdHRlclxuICAgIFRJQ0sgPSAndGljayc7XG5cbi8qKlxuICogQSBUaWNrZXIgY2xhc3MgdGhhdCBydW5zIGFuIHVwZGF0ZSBsb29wIHRoYXQgb3RoZXIgb2JqZWN0cyBsaXN0ZW4gdG8uXG4gKiBUaGlzIGNsYXNzIGlzIGNvbXBvc2VkIGFyb3VuZCBhbiBFdmVudEVtaXR0ZXIgb2JqZWN0IHRvIGFkZCBsaXN0ZW5lcnNcbiAqIG1lYW50IGZvciBleGVjdXRpb24gb24gdGhlIG5leHQgcmVxdWVzdGVkIGFuaW1hdGlvbiBmcmFtZS5cbiAqIEFuaW1hdGlvbiBmcmFtZXMgYXJlIHJlcXVlc3RlZCBvbmx5IHdoZW4gbmVjZXNzYXJ5LFxuICogZS5nLiBXaGVuIHRoZSB0aWNrZXIgaXMgc3RhcnRlZCBhbmQgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlclxuICovXG5mdW5jdGlvbiBUaWNrZXIoKVxue1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0aWNrIG1ldGhvZCBib3VuZCB0byB0aWNrZXIgaW5zdGFuY2UuXG4gICAgICogVGhpcyBpcyBiZWNhdXNlIGluIGVhcmx5IDIwMTUsIEZ1bmN0aW9uLmJpbmRcbiAgICAgKiBpcyBzdGlsbCA2MCUgc2xvd2VyIGluIGhpZ2ggcGVyZm9ybWFuY2Ugc2NlbmFyaW9zLlxuICAgICAqIEFsc28gc2VwYXJhdGluZyBmcmFtZSByZXF1ZXN0cyBmcm9tIHVwZGF0ZSBtZXRob2RcbiAgICAgKiBzbyBsaXN0ZW5lcnMgbWF5IGJlIGNhbGxlZCBhdCBhbnkgdGltZSBhbmQgd2l0aFxuICAgICAqIGFueSBhbmltYXRpb24gQVBJLCBqdXN0IGludm9rZSB0aWNrZXIudXBkYXRlKHRpbWUpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90aWNrID0gZnVuY3Rpb24gX3RpY2sodGltZSkge1xuXG4gICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgICAgIGlmIChfdGhpcy5zdGFydGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBJbnZva2UgbGlzdGVuZXJzIG5vd1xuICAgICAgICAgICAgX3RoaXMudXBkYXRlKHRpbWUpO1xuICAgICAgICAgICAgLy8gTGlzdGVuZXIgc2lkZSBlZmZlY3RzIG1heSBoYXZlIG1vZGlmaWVkIHRpY2tlciBzdGF0ZS5cbiAgICAgICAgICAgIGlmIChfdGhpcy5zdGFydGVkICYmIF90aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgX3RoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMuX3RpY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGVtaXR0ZXIgdXNlZCB0byBmaXJlICd0aWNrJyBldmVudFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGN1cnJlbnQgZnJhbWUgcmVxdWVzdCBJRFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHZhbHVlIG1hbmFnZWQgYnkgbWluRlBTIHByb3BlcnR5IHNldHRlciBhbmQgZ2V0dGVyLlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gYWxsb3dlZCBtaWxsaXNlY29uZHMgYmV0d2VlbiB1cGRhdGVzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4RWxhcHNlZE1TID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhpcyB0aWNrZXIgc2hvdWxkIGludm9rZSB0aGUgbWV0aG9kXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdGFydH0gYXV0b21hdGljYWxseVxuICAgICAqIHdoZW4gYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9TdGFydCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2NhbGFyIHRpbWUgdmFsdWUgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgc2V0dGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI21pbkZQU31cbiAgICAgKiBhbmQgaXMgc2NhbGVkIHdpdGgge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0uXG4gICAgICogKipOb3RlOioqIFRoZSBjYXAgbWF5IGJlIGV4Y2VlZGVkIGJ5IHNjYWxpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZGVsdGFUaW1lID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRpbWUgZWxhcHNlZCBpbiBtaWxsaXNlY29uZHMgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogT3Bwb3NlZCB0byB3aGF0IHRoZSBzY2FsYXIge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9XG4gICAgICogaXMgYmFzZWQsIHRoaXMgdmFsdWUgaXMgbmVpdGhlciBjYXBwZWQgbm9yIHNjYWxlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEgLyBUQVJHRVRfRlBNU1xuICAgICAqL1xuICAgIHRoaXMuZWxhcHNlZE1TID0gMSAvIENPTlNULlRBUkdFVF9GUE1TOyAvLyBkZWZhdWx0IHRvIHRhcmdldCBmcmFtZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCB0aW1lIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjdXBkYXRlfSB3YXMgaW52b2tlZC5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGFsc28gcmVzZXQgaW50ZXJuYWxseSBvdXRzaWRlIG9mIGludm9raW5nXG4gICAgICogdXBkYXRlLCBidXQgb25seSB3aGVuIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gICAgICogSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERPTUhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgICogdGhpcyB2YWx1ZSB3aWxsIGhhdmUgYSBwcmVjaXNpb24gb2YgMSDCtXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5sYXN0VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBGYWN0b3Igb2YgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBTY2FsZXMgdGlja2VyLmRlbHRhVGltZSB0byB3aGF0IHdvdWxkIGJlXG4gICAgICogLy8gdGhlIGVxdWl2YWxlbnQgb2YgYXBwcm94aW1hdGVseSAxMjAgRlBTXG4gICAgICogdGlja2VyLnNwZWVkID0gMjtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5zcGVlZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBoYXMgYmVlbiBzdGFydGVkLlxuICAgICAqIGB0cnVlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogYGZhbHNlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0b3B9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBXaGlsZSBgZmFsc2VgLCB0aGlzIHZhbHVlIG1heSBjaGFuZ2UgdG8gYHRydWVgIGluIHRoZVxuICAgICAqIGV2ZW50IG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBiZWluZyBgdHJ1ZWBcbiAgICAgKiBhbmQgYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlja2VyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZXMgcGVyIHNlY29uZCBhdCB3aGljaCB0aGlzIHRpY2tlciBpcyBydW5uaW5nLlxuICAgICAqIFRoZSBkZWZhdWx0IGlzIGFwcHJveGltYXRlbHkgNjAgaW4gbW9zdCBtb2Rlcm4gYnJvd3NlcnMuXG4gICAgICogKipOb3RlOioqIFRoaXMgZG9lcyBub3QgZmFjdG9yIGluIHRoZSB2YWx1ZSBvZlxuICAgICAqIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3BlZWR9LCB3aGljaCBpcyBzcGVjaWZpY1xuICAgICAqIHRvIHNjYWxpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuZWxhcHNlZE1TO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIG1pbGxpc2Vjb25kcyBhbGxvd2VkIHRvXG4gICAgICogZWxhcHNlIGJldHdlZW4gaW52b2tpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9LlxuICAgICAqIFRoaXMgdmFsdWUgaXMgdXNlZCB0byBjYXAge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICAgICAqIGJ1dCBkb2VzIG5vdCBlZmZlY3QgdGhlIG1lYXN1cmVkIHZhbHVlIG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjRlBTfS5cbiAgICAgKiBXaGVuIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSBpdCBpcyBjbGFtcGVkIHRvIGEgdmFsdWUgYmV0d2VlblxuICAgICAqIGAwYCBhbmQgYFBJWEkuVEFSR0VUX0ZQTVMgKiAxMDAwYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSS50aWNrZXIuVGlja2VyI1xuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgbWluRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuX21heEVsYXBzZWRNUztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbihmcHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIENsYW1wOiAwIHRvIFRBUkdFVF9GUE1TXG4gICAgICAgICAgICB2YXIgbWluRlBNUyA9IE1hdGgubWluKE1hdGgubWF4KDAsIGZwcykgLyAxMDAwLCBDT05TVC5UQVJHRVRfRlBNUyk7XG4gICAgICAgICAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxIC8gbWluRlBNUztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lLlxuICogSWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHkgYmVlbiByZXF1ZXN0ZWQsIGFuZCBpZiB0aGUgaW50ZXJuYWxcbiAqIGVtaXR0ZXIgaGFzIGxpc3RlbmVycywgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3JlcXVlc3RJZk5lZWRlZCA9IGZ1bmN0aW9uIF9yZXF1ZXN0SWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICAvLyBlbnN1cmUgY2FsbGJhY2tzIGdldCBjb3JyZWN0IGRlbHRhXG4gICAgICAgIHRoaXMubGFzdFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX3RpY2spO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSBjYW5jZWxzIGEgcGVuZGluZyBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fY2FuY2VsSWZOZWVkZWQgPSBmdW5jdGlvbiBfY2FuY2VsSWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgIT09IG51bGwpXG4gICAge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZXF1ZXN0SWQpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiB0aGUgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQgaXQgY2hlY2tzIGlmIGEgZnJhbWUgaGFzIG5vdCBhbHJlYWR5XG4gKiBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbCBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMuIElmIHRoZXNlXG4gKiBjb25kaXRpb25zIGFyZSBtZXQsIGEgbmV3IGZyYW1lIGlzIHJlcXVlc3RlZC4gSWYgdGhlIHRpY2tlciBoYXMgbm90XG4gKiBiZWVuIHN0YXJ0ZWQsIGJ1dCBhdXRvU3RhcnQgaXMgYHRydWVgLCB0aGVuIHRoZSB0aWNrZXIgc3RhcnRzIG5vdyxcbiAqIGFuZCBjb250aW51ZXMgd2l0aCB0aGUgcHJldmlvdXMgY29uZGl0aW9ucyB0byByZXF1ZXN0IGEgbmV3IGZyYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3N0YXJ0SWZQb3NzaWJsZSA9IGZ1bmN0aW9uIF9zdGFydElmUG9zc2libGUoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5hdXRvU3RhcnQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29ufSBpbnRlcm5hbGx5IGZvciB0aGVcbiAqIGludGVybmFsICd0aWNrJyBldmVudC4gSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsXG4gKiBhbmQgaWYgc28gaXQgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGF0IHRoaXMgcG9pbnQuXG4gKlxuICogQHBhcmFtIGZuIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGFkZGVkIGZvciB1cGRhdGVzXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbihUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29uY2V9IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIG9uZSB1cGRhdGVcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZE9uY2UgPSBmdW5jdGlvbiBhZGRPbmNlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub25jZShUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29mZn0gaW50ZXJuYWxseSBmb3IgJ3RpY2snIGV2ZW50LlxuICogSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMgZm9yICd0aWNrJyBldmVudC5cbiAqIElmIGl0IGRvZXMsIHRoZW4gaXQgY2FuY2VscyB0aGUgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwYXJhbSBbZm5dIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIHJlbW92ZWRcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dCB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub2ZmKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIGlmICghdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgbGlzdGVuZXJzXG4gKiBhIG5ldyBhbmltYXRpb24gZnJhbWUgaXMgcmVxdWVzdGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiBzdGFydCgpXG57XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSB0aWNrZXIuIElmIHRoZSB0aWNrZXIgaGFzIHJlcXVlc3RlZFxuICogYW4gYW5pbWF0aW9uIGZyYW1lIGl0IGlzIGNhbmNlbGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uIHN0b3AoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2FuY2VsSWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRyaWdnZXJzIGFuIHVwZGF0ZS4gQW4gdXBkYXRlIGVudGFpbHMgc2V0dGluZyB0aGVcbiAqIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNlbGFwc2VkTVN9LFxuICogdGhlIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICogaW52b2tpbmcgYWxsIGxpc3RlbmVycyB3aXRoIGN1cnJlbnQgZGVsdGFUaW1lLFxuICogYW5kIHRoZW4gZmluYWxseSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbGFzdFRpbWV9XG4gKiB3aXRoIHRoZSB2YWx1ZSBvZiBjdXJyZW50VGltZSB0aGF0IHdhcyBwcm92aWRlZC5cbiAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgYW5pbWF0aW9uXG4gKiBmcmFtZSBjYWxsYmFja3MgaWYgdGhlIHRpY2tlciBpbnN0YW5jZSBoYXMgYmVlbiBzdGFydGVkXG4gKiBhbmQgbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqXG4gKiBAcGFyYW0gW2N1cnJlbnRUaW1lPXBlcmZvcm1hbmNlLm5vdygpXSB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9IHRoZSBjdXJyZW50IHRpbWUgb2YgZXhlY3V0aW9uXG4gKi9cblRpY2tlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKGN1cnJlbnRUaW1lKVxue1xuICAgIHZhciBlbGFwc2VkTVM7XG5cbiAgICAvLyBBbGxvdyBjYWxsaW5nIHVwZGF0ZSBkaXJlY3RseSB3aXRoIGRlZmF1bHQgY3VycmVudFRpbWUuXG4gICAgY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSB8fCBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAvLyBTYXZlIHVuY2FwcGVkIGVsYXBzZWRNUyBmb3IgbWVhc3VyZW1lbnRcbiAgICBlbGFwc2VkTVMgPSB0aGlzLmVsYXBzZWRNUyA9IGN1cnJlbnRUaW1lIC0gdGhpcy5sYXN0VGltZTtcblxuICAgIC8vIGNhcCB0aGUgbWlsbGlzZWNvbmRzIGVsYXBzZWQgdXNlZCBmb3IgZGVsdGFUaW1lXG4gICAgaWYgKGVsYXBzZWRNUyA+IHRoaXMuX21heEVsYXBzZWRNUylcbiAgICB7XG4gICAgICAgIGVsYXBzZWRNUyA9IHRoaXMuX21heEVsYXBzZWRNUztcbiAgICB9XG5cbiAgICB0aGlzLmRlbHRhVGltZSA9IGVsYXBzZWRNUyAqIENPTlNULlRBUkdFVF9GUE1TICogdGhpcy5zcGVlZDtcblxuICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgYWRkZWQgdG8gaW50ZXJuYWwgZW1pdHRlclxuICAgIHRoaXMuX2VtaXR0ZXIuZW1pdChUSUNLLCB0aGlzLmRlbHRhVGltZSk7XG5cbiAgICB0aGlzLmxhc3RUaW1lID0gY3VycmVudFRpbWU7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRpY2tlcjtcbiIsInZhciBUaWNrZXIgPSByZXF1aXJlKCcuL1RpY2tlcicpO1xuXG4vKipcbiAqIFRoZSBzaGFyZWQgdGlja2VyIGluc3RhbmNlIHVzZWQgYnkge0BsaW5rIFBJWEkuZXh0cmFzLk1vdmllQ2xpcH0uXG4gKiBhbmQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqIFRoZSBwcm9wZXJ0eSB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2F1dG9TdGFydH0gaXMgc2V0IHRvIGB0cnVlYFxuICogZm9yIHRoaXMgaW5zdGFuY2UuIFBsZWFzZSBmb2xsb3cgdGhlIGV4YW1wbGVzIGZvciB1c2FnZSwgaW5jbHVkaW5nXG4gKiBob3cgdG8gb3B0LW91dCBvZiBhdXRvLXN0YXJ0aW5nIHRoZSBzaGFyZWQgdGlja2VyLlxuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgdGlja2VyID0gUElYSS50aWNrZXIuc2hhcmVkO1xuICogLy8gU2V0IHRoaXMgdG8gcHJldmVudCBzdGFydGluZyB0aGlzIHRpY2tlciB3aGVuIGxpc3RlbmVycyBhcmUgYWRkZWQuXG4gKiAvLyBCeSBkZWZhdWx0IHRoaXMgaXMgdHJ1ZSBvbmx5IGZvciB0aGUgUElYSS50aWNrZXIuc2hhcmVkIGluc3RhbmNlLlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogLy8gRllJLCBjYWxsIHRoaXMgdG8gZW5zdXJlIHRoZSB0aWNrZXIgaXMgc3RvcHBlZC4gSXQgc2hvdWxkIGJlIHN0b3BwZWRcbiAqIC8vIGlmIHlvdSBoYXZlIG5vdCBhdHRlbXB0ZWQgdG8gcmVuZGVyIGFueXRoaW5nIHlldC5cbiAqIHRpY2tlci5zdG9wKCk7XG4gKiAvLyBDYWxsIHRoaXMgd2hlbiB5b3UgYXJlIHJlYWR5IGZvciBhIHJ1bm5pbmcgc2hhcmVkIHRpY2tlci5cbiAqIHRpY2tlci5zdGFydCgpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBZb3UgbWF5IHVzZSB0aGUgc2hhcmVkIHRpY2tlciB0byByZW5kZXIuLi5cbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDgwMCwgNjAwKTtcbiAqIHZhciBzdGFnZSA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogdmFyIGludGVyYWN0aW9uTWFuYWdlciA9IFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyKTtcbiAqIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocmVuZGVyZXIudmlldyk7XG4gKiB0aWNrZXIuYWRkKGZ1bmN0aW9uICh0aW1lKSB7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBPciB5b3UgY2FuIGp1c3QgdXBkYXRlIGl0IG1hbnVhbGx5LlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogdGlja2VyLnN0b3AoKTtcbiAqIGZ1bmN0aW9uIGFuaW1hdGUodGltZSkge1xuICogICAgIHRpY2tlci51cGRhdGUodGltZSk7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XG4gKiB9XG4gKiBhbmltYXRlKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAqXG4gKiBAdHlwZSB7UElYSS50aWNrZXIuVGlja2VyfVxuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbnZhciBzaGFyZWQgPSBuZXcgVGlja2VyKCk7XG5zaGFyZWQuYXV0b1N0YXJ0ID0gdHJ1ZTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudGlja2VyXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIHNoYXJlZDogc2hhcmVkLFxuICAgIFRpY2tlcjogVGlja2VyXG59O1xuIiwiLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuXG52YXIgR0xfTUFQID0ge307XG5cblxudmFyIGNyZWF0ZUluZGljZXNGb3JRdWFkcyA9IGZ1bmN0aW9uIChzaXplKVxue1xuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYXJyYXksIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgIFxuICAgIHZhciB0b3RhbEluZGljZXMgPSBzaXplICogNjtcblxuICAgIHZhciBpbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHRvdGFsSW5kaWNlcyk7XG5cblx0Ly8gZmlsbCB0aGUgaW5kaWNlcyB3aXRoIHRoZSBxdWFkcyB0byBkcmF3XG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCB0b3RhbEluZGljZXM7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kaWNlcztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzOyIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLnV0aWxzXG4gKi9cbnZhciB1dGlscyA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIF91aWQ6IDAsXG4gICAgX3NhaWRIZWxsbzogZmFsc2UsXG5cbiAgICBFdmVudEVtaXR0ZXI6ICAgcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIHBsdWdpblRhcmdldDogICByZXF1aXJlKCcuL3BsdWdpblRhcmdldCcpLFxuICAgIGFzeW5jOiAgICAgICAgICByZXF1aXJlKCdhc3luYycpLFxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllclxuICAgICAqXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllciB0byB1c2UuXG4gICAgICovXG4gICAgdWlkOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICsrdXRpbHMuX3VpZDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBoZXggY29sb3IgbnVtYmVyIHRvIGFuIFtSLCBHLCBCXSBhcnJheVxuICAgICAqXG4gICAgICogQHBhcmFtIGhleCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSAge251bWJlcltdfSBbb3V0PVtdXVxuICAgICAqIEByZXR1cm4ge251bWJlcltdfSBBbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIFtSLCBHLCBCXSBvZiB0aGUgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnJnYjogZnVuY3Rpb24gKGhleCwgb3V0KVxuICAgIHtcbiAgICAgICAgb3V0ID0gb3V0IHx8IFtdO1xuXG4gICAgICAgIG91dFswXSA9IChoZXggPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzFdID0gKGhleCA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIG91dFsyXSA9IChoZXggJiAweEZGKSAvIDI1NTtcblxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5nIGNvbG9yLlxuICAgICAqL1xuICAgIGhleDJzdHJpbmc6IGZ1bmN0aW9uIChoZXgpXG4gICAge1xuICAgICAgICBoZXggPSBoZXgudG9TdHJpbmcoMTYpO1xuICAgICAgICBoZXggPSAnMDAwMDAwJy5zdWJzdHIoMCwgNiAtIGhleC5sZW5ndGgpICsgaGV4O1xuXG4gICAgICAgIHJldHVybiAnIycgKyBoZXg7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgY29sb3IgYXMgYW4gW1IsIEcsIEJdIGFycmF5IHRvIGEgaGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIHJnYiB7bnVtYmVyW119XG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgY29sb3IgbnVtYmVyXG4gICAgICovXG4gICAgcmdiMmhleDogZnVuY3Rpb24gKHJnYilcbiAgICB7XG4gICAgICAgIHJldHVybiAoKHJnYlswXSoyNTUgPDwgMTYpICsgKHJnYlsxXSoyNTUgPDwgOCkgKyByZ2JbMl0qMjU1KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIENhbnZhcyBCbGVuZE1vZGVzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnJvd3NlclxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciB0aGV5IGFyZSBzdXBwb3J0ZWRcbiAgICAgKi9cbiAgICBjYW5Vc2VOZXdDYW52YXNCbGVuZE1vZGVzOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwbmdIZWFkID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVFBQUFBQkFRTUFBQUREOHAyT0FBQUFBMUJNVkVYLyc7XG4gICAgICAgIHZhciBwbmdFbmQgPSAnQUFBQUNrbEVRVlFJMTJOZ0FBQUFBZ0FCNGlHOE13QUFBQUJKUlU1RXJrSmdnZz09JztcblxuICAgICAgICB2YXIgbWFnZW50YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBtYWdlbnRhLnNyYyA9IHBuZ0hlYWQgKyAnQVA4MDRPYTYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciB5ZWxsb3cgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgeWVsbG93LnNyYyA9IHBuZ0hlYWQgKyAnL3dDS3h2UkYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY2FudmFzLndpZHRoID0gNjtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IDE7XG5cbiAgICAgICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShtYWdlbnRhLCAwLCAwKTtcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoeWVsbG93LCAyLCAwKTtcblxuICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDIsMCwxLDEpLmRhdGE7XG5cbiAgICAgICAgcmV0dXJuIChkYXRhWzBdID09PSAyNTUgJiYgZGF0YVsxXSA9PT0gMCAmJiBkYXRhWzJdID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBudW1iZXIsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgdGFrZW4gZnJvbSBTdGFybGluZyBGcmFtZXdvcmsgYXMgaXRzIHByZXR0eSBuZWF0IDspXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbnVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7bnVtYmVyfSB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqL1xuICAgIGdldE5leHRQb3dlck9mVHdvOiBmdW5jdGlvbiAobnVtYmVyKVxuICAgIHtcbiAgICAgICAgLy8gc2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Bvd2VyX29mX3R3byNGYXN0X2FsZ29yaXRobV90b19jaGVja19pZl9hX3Bvc2l0aXZlX251bWJlcl9pc19hX3Bvd2VyX29mX3R3b1xuICAgICAgICBpZiAobnVtYmVyID4gMCAmJiAobnVtYmVyICYgKG51bWJlciAtIDEpKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSAxO1xuXG4gICAgICAgICAgICB3aGlsZSAocmVzdWx0IDwgbnVtYmVyKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA8PD0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBjaGVja3MgaWYgdGhlIGdpdmVuIHdpZHRoIGFuZCBoZWlnaHQgbWFrZSBhIHBvd2VyIG9mIHR3byByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSBoZWlnaHQge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzUG93ZXJPZlR3bzogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm4gKHdpZHRoID4gMCAmJiAod2lkdGggJiAod2lkdGggLSAxKSkgPT09IDAgJiYgaGVpZ2h0ID4gMCAmJiAoaGVpZ2h0ICYgKGhlaWdodCAtIDEpKSA9PT0gMCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGdldCB0aGUgcmVzb2x1dGlvbiBvZiBhbiBhc3NldCBieSBsb29raW5nIGZvciB0aGUgcHJlZml4XG4gICAgICogdXNlZCBieSBzcHJpdGVzaGVldHMgYW5kIGltYWdlIHVybHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwge3N0cmluZ30gdGhlIGltYWdlIHBhdGhcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0UmVzb2x1dGlvbk9mVXJsOiBmdW5jdGlvbiAodXJsKVxuICAgIHtcbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBDT05TVC5SRVRJTkFfUFJFRklYLmV4ZWModXJsKTtcblxuICAgICAgICBpZiAocmVzb2x1dGlvbilcbiAgICAgICAge1xuICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChyZXNvbHV0aW9uWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAxO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBMb2dzIG91dCB0aGUgdmVyc2lvbiBhbmQgcmVuZGVyZXIgaW5mb3JtYXRpb24gZm9yIHRoaXMgcnVubmluZyBpbnN0YW5jZSBvZiBQSVhJLlxuICAgICAqIElmIHlvdSBkb24ndCB3YW50IHRvIHNlZSB0aGlzIG1lc3NhZ2UgeW91IGNhbiBzZXQgYFBJWEkudXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7YFxuICAgICAqIHNvIHRoZSBsaWJyYXJ5IHRoaW5rcyBpdCBhbHJlYWR5IHNhaWQgaXQuIEtlZXAgaW4gbWluZCB0aGF0IGRvaW5nIHRoYXQgd2lsbCBmb3JldmVyXG4gICAgICogbWFrZXMgeW91IGEgamVyayBmYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBUaGUgc3RyaW5nIHJlbmRlcmVyIHR5cGUgdG8gbG9nLlxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBzYXlIZWxsbzogZnVuY3Rpb24gKHR5cGUpXG4gICAge1xuICAgICAgICBpZiAodXRpbHMuX3NhaWRIZWxsbylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjaHJvbWUnKSA+IC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtcbiAgICAgICAgICAgICAgICAnXFxuICVjICVjICVjIFBpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0g4pywICcgKyB0eXBlICsgJyDinLAgICVjICcgKyAnICVjICcgKyAnIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8gICVjICVjIOKZpSVj4pmlJWPimaUgXFxuXFxuJyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmY2NmE1OyBiYWNrZ3JvdW5kOiAjMDMwMzA3OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmYzNkYzsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOydcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBhcmdzKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3aW5kb3cuY29uc29sZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nKCdQaXhpLmpzICcgKyBDT05TVC5WRVJTSU9OICsgJyAtICcgKyB0eXBlICsgJyAtIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8nKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuXG4gICAgICAgIHV0aWxzLl9zYWlkSGVsbG8gPSB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgZm9yIGNoZWNraW5nIGZvciB3ZWJnbCBzdXBwb3J0XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzV2ViR0xTdXBwb3J0ZWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB2YXIgY29udGV4dE9wdGlvbnMgPSB7IHN0ZW5jaWw6IHRydWUgfTtcbiAgICAgICAgdHJ5XG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghd2luZG93LldlYkdMUmVuZGVyaW5nQ29udGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSxcbiAgICAgICAgICAgICAgICBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIGNvbnRleHRPcHRpb25zKSB8fCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgY29udGV4dE9wdGlvbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gISEoZ2wgJiYgZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5zdGVuY2lsKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgc2lnbiBvZiBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBuIHtudW1iZXJ9XG4gICAgICogQHJldHVybnMge251bWJlcn0gMCBpZiBuIGlzIDAsIC0xIGlmIG4gaXMgbmVnYXRpdmUsIDEgaWYgbiBpIHBvc2l0aXZlXG4gICAgICovXG4gICAgc2lnbjogZnVuY3Rpb24gKG4pXG4gICAge1xuICAgICAgICByZXR1cm4gbiA/IChuIDwgMCA/IC0xIDogMSkgOiAwO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZW1vdmVJdGVtc1xuICAgICAqXG4gICAgICogQHBhcmFtIHthcnJheX0gYXJyIFRoZSB0YXJnZXQgYXJyYXlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRJZHggVGhlIGluZGV4IHRvIGJlZ2luIHJlbW92aW5nIGZyb20gKGluY2x1c2l2ZSlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmVtb3ZlQ291bnQgSG93IG1hbnkgaXRlbXMgdG8gcmVtb3ZlXG4gICAgICovXG4gICAgcmVtb3ZlSXRlbXM6IGZ1bmN0aW9uIChhcnIsIHN0YXJ0SWR4LCByZW1vdmVDb3VudClcbiAgICB7XG4gICAgICAgIHZhciBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIGlmIChzdGFydElkeCA+PSBsZW5ndGggfHwgcmVtb3ZlQ291bnQgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbW92ZUNvdW50ID0gKHN0YXJ0SWR4K3JlbW92ZUNvdW50ID4gbGVuZ3RoID8gbGVuZ3RoLXN0YXJ0SWR4IDogcmVtb3ZlQ291bnQpO1xuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJZHgsIGxlbiA9IGxlbmd0aC1yZW1vdmVDb3VudDsgaSA8IGxlbjsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBhcnJbaV0gPSBhcnJbaSArIHJlbW92ZUNvdW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyci5sZW5ndGggPSBsZW47XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIERlc2NyaWJlIHByb3BlcnR5IHVzYWdlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBUZXh0dXJlQ2FjaGU6IHt9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHt9XG59O1xuIiwiLyoqXG4gKiBNaXhpbnMgZnVuY3Rpb25hbGl0eSB0byBtYWtlIGFuIG9iamVjdCBoYXZlIFwicGx1Z2luc1wiLlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkudXRpbHNcbiAqIEBwYXJhbSBvYmoge29iamVjdH0gVGhlIG9iamVjdCB0byBtaXggaW50by5cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIHBsdWdpblRhcmdldC5taXhpbihNeU9iamVjdCk7XG4gKi9cbmZ1bmN0aW9uIHBsdWdpblRhcmdldChvYmopXG57XG4gICAgb2JqLl9fcGx1Z2lucyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHBsdWdpbiB0byBhbiBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwbHVnaW5OYW1lIHtzdHJpbmd9IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICAgICAqIEBwYXJhbSBjdG9yIHtGdW5jdGlvbn0gVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciB0aGUgcGx1Z2luLlxuICAgICAqL1xuICAgIG9iai5yZWdpc3RlclBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW5OYW1lLCBjdG9yKVxuICAgIHtcbiAgICAgICAgb2JqLl9fcGx1Z2luc1twbHVnaW5OYW1lXSA9IGN0b3I7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlcyBhbGwgdGhlIHBsdWdpbnMgb2YgdGhpcyBvYmplY3RcbiAgICAgKlxuICAgICAqL1xuICAgIG9iai5wcm90b3R5cGUuaW5pdFBsdWdpbnMgPSBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zID0gdGhpcy5wbHVnaW5zIHx8IHt9O1xuXG4gICAgICAgIGZvciAodmFyIG8gaW4gb2JqLl9fcGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbmV3IChvYmouX19wbHVnaW5zW29dKSh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5kZXN0cm95UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBvIGluIHRoaXMucGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBsdWdpbnMgPSBudWxsO1xuICAgIH07XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLyoqXG4gICAgICogTWl4ZXMgaW4gdGhlIHByb3BlcnRpZXMgb2YgdGhlIHBsdWdpblRhcmdldCBpbnRvIGFub3RoZXIgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0IHtvYmplY3R9IFRoZSBvYmogdG8gbWl4IGludG9cbiAgICAgKi9cbiAgICBtaXhpbjogZnVuY3Rpb24gbWl4aW4ob2JqKVxuICAgIHtcbiAgICAgICAgcGx1Z2luVGFyZ2V0KG9iaik7XG4gICAgfVxufTtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciBjb3JlID0gcmVxdWlyZSgnLi9jb3JlJyksXG4gICAgbWVzaCA9IHJlcXVpcmUoJy4vbWVzaCcpLFxuICAgIGV4dHJhcyA9IHJlcXVpcmUoJy4vZXh0cmFzJyksXG4gICAgZmlsdGVycyA9IHJlcXVpcmUoJy4vZmlsdGVycycpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIFNwcml0ZUJhdGNoXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLlBhcnRpY2xlQ29udGFpbmVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlNwcml0ZUJhdGNoID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLicpO1xufTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBBc3NldExvYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBzZWUgUElYSS5sb2FkZXJzLkxvYWRlclxuICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IFRoZSBsb2FkZXIgc3lzdGVtIHdhcyBvdmVyaGF1bGVkIGluIHBpeGkgdjMsIHBsZWFzZSBzZWUgdGhlIG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyIGNsYXNzLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLkFzc2V0TG9hZGVyID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuJyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb3JlLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFN0YWdlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQ29udGFpbmVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFN0YWdlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1lvdSBkbyBub3QgbmVlZCB0byB1c2UgYSBQSVhJIFN0YWdlIGFueSBtb3JlLCB5b3UgY2FuIHNpbXBseSByZW5kZXIgYW55IGNvbnRhaW5lci4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIERpc3BsYXlPYmplY3RDb250YWluZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgRGlzcGxheU9iamVjdENvbnRhaW5lcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEaXNwbGF5T2JqZWN0Q29udGFpbmVyIGhhcyBiZWVuIHNob3J0ZW5lZCB0byBDb250YWluZXIsIHBsZWFzZSB1c2UgQ29udGFpbmVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RyaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2hcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RyaXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFN0cmlwIGNsYXNzIGhhcyBiZWVuIHJlbmFtZWQgdG8gTWVzaCBhbmQgbW92ZWQgdG8gbWVzaC5NZXNoLCBwbGVhc2UgdXNlIG1lc2guTWVzaCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLk1lc2g7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBSb3BlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkubWVzaC5Sb3BlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFJvcGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFJvcGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gbWVzaC5Sb3BlLCBwbGVhc2UgdXNlIG1lc2guUm9wZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLlJvcGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBNb3ZpZUNsaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuTW92aWVDbGlwXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIE1vdmllQ2xpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgTW92aWVDbGlwIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5Nb3ZpZUNsaXAsIHBsZWFzZSB1c2UgZXh0cmFzLk1vdmllQ2xpcCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuTW92aWVDbGlwO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGlsaW5nU3ByaXRlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBUaWxpbmdTcHJpdGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRpbGluZ1Nwcml0ZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuVGlsaW5nU3ByaXRlLCBwbGVhc2UgdXNlIGV4dHJhcy5UaWxpbmdTcHJpdGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLlRpbGluZ1Nwcml0ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJpdG1hcFRleHRcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCaXRtYXBUZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCaXRtYXBUZXh0IGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5CaXRtYXBUZXh0LCBwbGVhc2UgdXNlIGV4dHJhcy5CaXRtYXBUZXh0IGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5CaXRtYXBUZXh0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgYmxlbmRNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIGJsZW5kTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGJsZW5kTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gQkxFTkRfTU9ERVMsIHBsZWFzZSB1c2UgQkxFTkRfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5CTEVORF9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNjYWxlTW9kZXNcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBzY2FsZU1vZGVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBzY2FsZU1vZGVzIGhhcyBiZWVuIG1vdmVkIHRvIFNDQUxFX01PREVTLCBwbGVhc2UgdXNlIFNDQUxFX01PREVTIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU0NBTEVfTU9ERVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBCYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuQmFzZVRleHR1cmVDYWNoZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCYXNlVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgQmFzZVRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5CYXNlVGV4dHVyZUNhY2hlLCBwbGVhc2UgdXNlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5UZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuVGV4dHVyZUNhY2hlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIG1hdGhcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBtYXRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgbWF0aCBuYW1lc3BhY2UgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIGFjY2VzcyBtZW1iZXJzIGFscmVhZHkgYWNjZXNzaWJsZSBvbiBQSVhJLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgUElYSS5TcHJpdGUjc2V0VGV4dHVyZVxuICogQHNlZSBQSVhJLlNwcml0ZSN0ZXh0dXJlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlLnByb3RvdHlwZS5zZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dHVyZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dHVyZSBwcm9wZXJ0eSwgZS5nIDogc3ByaXRlLnRleHR1cmUgPSB0ZXh0dXJlOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3NldFRleHRcbiAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmV4dHJhcy5CaXRtYXBUZXh0LnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dClcbntcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dCBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dCBwcm9wZXJ0eSwgZS5nIDogbXlCaXRtYXBUZXh0LnRleHQgPSBcXCdteSB0ZXh0XFwnOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLlRleHQjdGV4dFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteVRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRTdHlsZVxuICogQHNlZSBQSVhJLlRleHQjc3R5bGVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0LnByb3RvdHlwZS5zZXRTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlKVxue1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldFN0eWxlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBzdHlsZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0LnN0eWxlID0gc3R5bGU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQHNlZSBQSVhJLlRleHR1cmUjc2V0RnJhbWVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0dXJlLnByb3RvdHlwZS5zZXRGcmFtZSA9IGZ1bmN0aW9uKGZyYW1lKVxue1xuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldEZyYW1lIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBmcmFtZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0dXJlLmZyYW1lID0gZnJhbWU7Jyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhmaWx0ZXJzLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBzZWUgUElYSS5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBBYnN0cmFjdEZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLkFic3RyYWN0RmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBBYnN0cmFjdEZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkFic3RyYWN0RmlsdGVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkZYQUFGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuRlhBQUZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBGWEFBRmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuRlhBQUZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgRlhBQUZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkZYQUFGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuU3ByaXRlTWFza0ZpbHRlclxuICAgICAqIEBzZWUgUElYSS5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIFNwcml0ZU1hc2tGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBTcHJpdGVNYXNrRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU3ByaXRlTWFza0ZpbHRlcjtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkudXRpbHMudXVpZFxuICogQHNlZSBQSVhJLnV0aWxzLnVpZFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICovXG5jb3JlLnV0aWxzLnV1aWQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvbnNvbGUud2FybigndXRpbHMudXVpZCgpIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdXRpbHMudWlkKCkgZnJvbSBub3cgb24uJyk7XG4gICAgcmV0dXJuIGNvcmUudXRpbHMudWlkKCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogQSBCaXRtYXBUZXh0IG9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dCB1c2luZyBiaXRtYXAgZm9udC4gVG9cbiAqIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJywgJ1xccicgb3IgJ1xcclxcbicgaW4geW91ciBzdHJpbmcuIFlvdSBjYW4gZ2VuZXJhdGUgdGhlIGZudCBmaWxlcyB1c2luZzpcbiAqXG4gKiBBIEJpdG1hcFRleHQgY2FuIG9ubHkgYmUgY3JlYXRlZCB3aGVuIHRoZSBmb250IGlzIGxvYWRlZFxuICpcbiAqIGBgYGpzXG4gKiAvLyBpbiB0aGlzIGNhc2UgdGhlIGZvbnQgaXMgaW4gYSBmaWxlIGNhbGxlZCAnZGVzeXJlbC5mbnQnXG4gKiB2YXIgYml0bWFwVGV4dCA9IG5ldyBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0KFwidGV4dCB1c2luZyBhIGZhbmN5IGZvbnQhXCIsIHtmb250OiBcIjM1cHggRGVzeXJlbFwiLCBhbGlnbjogXCJyaWdodFwifSk7XG4gKiBgYGBcbiAqXG4gKlxuICogaHR0cDovL3d3dy5hbmdlbGNvZGUuY29tL3Byb2R1Y3RzL2JtZm9udC8gZm9yIHdpbmRvd3Mgb3JcbiAqIGh0dHA6Ly93d3cuYm1nbHlwaC5jb20vIGZvciBtYWMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBzdHlsZSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIHN0eWxlLmZvbnQge3N0cmluZ3xvYmplY3R9IFRoZSBmb250IGRlc2NyaXB0b3IgZm9yIHRoZSBvYmplY3QsIGNhbiBiZSBwYXNzZWQgYXMgYSBzdHJpbmcgb2YgZm9ybVxuICogICAgICBcIjI0cHggRm9udE5hbWVcIiBvciBcIkZvbnROYW1lXCIgb3IgYXMgYW4gb2JqZWN0IHdpdGggZXhwbGljaXQgbmFtZS9zaXplIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQubmFtZV0ge3N0cmluZ30gVGhlIGJpdG1hcCBmb250IGlkXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQuc2l6ZV0ge251bWJlcn0gVGhlIHNpemUgb2YgdGhlIGZvbnQgaW4gcGl4ZWxzLCBlLmcuIDI0XG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0XG4gKiAgICAgIHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUudGludD0weEZGRkZGRl0ge251bWJlcn0gVGhlIHRpbnQgY29sb3JcbiAqL1xuZnVuY3Rpb24gQml0bWFwVGV4dCh0ZXh0LCBzdHlsZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgb3ZlcmFsbCB0ZXh0LCBkaWZmZXJlbnQgZnJvbSBmb250U2l6ZSxcbiAgICAgKiB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBzdHlsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRleHRXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dEhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBsZXR0ZXIgc3ByaXRlIHBvb2wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZ2x5cGhzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZm9udCA9IHtcbiAgICAgICAgdGludDogc3R5bGUudGludCAhPT0gdW5kZWZpbmVkID8gc3R5bGUudGludCA6IDB4RkZGRkZGLFxuICAgICAgICBhbGlnbjogc3R5bGUuYWxpZ24gfHwgJ2xlZnQnLFxuICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICBzaXplOiAwXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgZm9udC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZm9udCA9IHN0eWxlLmZvbnQ7IC8vIHJ1biBmb250IHNldHRlclxuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IHRleHQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IHdpZHRoIG9mIHRoaXMgYml0bWFwIHRleHQgaW4gcGl4ZWxzLiBJZiB0aGUgdGV4dCBwcm92aWRlZCBpcyBsb25nZXIgdGhhbiB0aGUgdmFsdWUgcHJvdmlkZWQsIGxpbmUgYnJlYWtzIHdpbGwgYmUgYXV0b21hdGljYWxseSBpbnNlcnRlZCBpbiB0aGUgbGFzdCB3aGl0ZXNwYWNlLlxuICAgICAqIERpc2FibGUgYnkgc2V0dGluZyB2YWx1ZSB0byAwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IGxpbmUgaGVpZ2h0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRyeWluZyB0byB1c2UgdGhlIHRvdGFsIGhlaWdodCBvZiB0aGUgVGV4dCwgaWU6IHdoZW4gdHJ5aW5nIHRvIHZlcnRpY2FsbHkgYWxpZ24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkaXJ0eSBzdGF0ZSBvZiB0aGlzIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy51cGRhdGVUZXh0KCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5CaXRtYXBUZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5Db250YWluZXIucHJvdG90eXBlKTtcbkJpdG1hcFRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQml0bWFwVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gQml0bWFwVGV4dDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQml0bWFwVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGludCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0aW50OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQudGludDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQudGludCA9ICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlID49IDApID8gdmFsdWUgOiAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFsaWdubWVudCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbGVmdCdcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBhbGlnbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250LmFsaWduO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC5hbGlnbiA9IHZhbHVlIHx8ICdsZWZ0JztcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZvbnQgZGVzY3JpcHRvciBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0ZvbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgZm9udDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcgJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9mb250Lm5hbWUgPSB2YWx1ZS5sZW5ndGggPT09IDEgPyB2YWx1ZVswXSA6IHZhbHVlLnNsaWNlKDEpLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB2YWx1ZS5sZW5ndGggPj0gMiA/IHBhcnNlSW50KHZhbHVlWzBdLCAxMCkgOiBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV0uc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5zaXplID0gdHlwZW9mIHZhbHVlLnNpemUgPT09ICdudW1iZXInID8gdmFsdWUuc2l6ZSA6IHBhcnNlSW50KHZhbHVlLnNpemUsIDEwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGV4dCBhbmQgdXBkYXRlcyBpdCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkYXRhID0gQml0bWFwVGV4dC5mb250c1t0aGlzLl9mb250Lm5hbWVdO1xuICAgIHZhciBwb3MgPSBuZXcgY29yZS5Qb2ludCgpO1xuICAgIHZhciBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgIHZhciBjaGFycyA9IFtdO1xuICAgIHZhciBsYXN0TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbGluZVdpZHRocyA9IFtdO1xuICAgIHZhciBsaW5lID0gMDtcbiAgICB2YXIgc2NhbGUgPSB0aGlzLl9mb250LnNpemUgLyBkYXRhLnNpemU7XG4gICAgdmFyIGxhc3RTcGFjZSA9IC0xO1xuICAgIHZhciBtYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0Lmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gdGhpcy50ZXh0LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGxhc3RTcGFjZSA9IC8oXFxzKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSA/IGkgOiBsYXN0U3BhY2U7XG5cbiAgICAgICAgaWYgKC8oPzpcXHJcXG58XFxyfFxcbikvLnRlc3QodGhpcy50ZXh0LmNoYXJBdChpKSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXN0U3BhY2UgIT09IC0xICYmIHRoaXMubWF4V2lkdGggPiAwICYmIHBvcy54ICogc2NhbGUgPiB0aGlzLm1heFdpZHRoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKGNoYXJzLCBsYXN0U3BhY2UsIGkgLSBsYXN0U3BhY2UpO1xuICAgICAgICAgICAgaSA9IGxhc3RTcGFjZTtcbiAgICAgICAgICAgIGxhc3RTcGFjZSA9IC0xO1xuXG4gICAgICAgICAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbGluZSsrO1xuXG4gICAgICAgICAgICBwb3MueCA9IDA7XG4gICAgICAgICAgICBwb3MueSArPSBkYXRhLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hhckRhdGEgPSBkYXRhLmNoYXJzW2NoYXJDb2RlXTtcblxuICAgICAgICBpZiAoIWNoYXJEYXRhKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmV2Q2hhckNvZGUgJiYgY2hhckRhdGEua2VybmluZ1twcmV2Q2hhckNvZGVdKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb3MueCArPSBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV07XG4gICAgICAgIH1cblxuICAgICAgICBjaGFycy5wdXNoKHt0ZXh0dXJlOmNoYXJEYXRhLnRleHR1cmUsIGxpbmU6IGxpbmUsIGNoYXJDb2RlOiBjaGFyQ29kZSwgcG9zaXRpb246IG5ldyBjb3JlLlBvaW50KHBvcy54ICsgY2hhckRhdGEueE9mZnNldCwgcG9zLnkgKyBjaGFyRGF0YS55T2Zmc2V0KX0pO1xuICAgICAgICBsYXN0TGluZVdpZHRoID0gcG9zLnggKyAoY2hhckRhdGEudGV4dHVyZS53aWR0aCArIGNoYXJEYXRhLnhPZmZzZXQpO1xuICAgICAgICBwb3MueCArPSBjaGFyRGF0YS54QWR2YW5jZTtcbiAgICAgICAgbWF4TGluZUhlaWdodCA9IE1hdGgubWF4KG1heExpbmVIZWlnaHQsIChjaGFyRGF0YS55T2Zmc2V0ICsgY2hhckRhdGEudGV4dHVyZS5oZWlnaHQpKTtcbiAgICAgICAgcHJldkNoYXJDb2RlID0gY2hhckNvZGU7XG4gICAgfVxuXG4gICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG5cbiAgICB2YXIgbGluZUFsaWduT2Zmc2V0cyA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8PSBsaW5lOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYWxpZ25PZmZzZXQgPSAwO1xuXG4gICAgICAgIGlmICh0aGlzLl9mb250LmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbGlnbk9mZnNldCA9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5fZm9udC5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpbmVBbGlnbk9mZnNldHMucHVzaChhbGlnbk9mZnNldCk7XG4gICAgfVxuXG4gICAgdmFyIGxlbkNoYXJzID0gY2hhcnMubGVuZ3RoO1xuICAgIHZhciB0aW50ID0gdGhpcy50aW50O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbkNoYXJzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYyA9IHRoaXMuX2dseXBoc1tpXTsgLy8gZ2V0IHRoZSBuZXh0IGdseXBoIHNwcml0ZVxuXG4gICAgICAgIGlmIChjKVxuICAgICAgICB7XG4gICAgICAgICAgICBjLnRleHR1cmUgPSBjaGFyc1tpXS50ZXh0dXJlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgYyA9IG5ldyBjb3JlLlNwcml0ZShjaGFyc1tpXS50ZXh0dXJlKTtcbiAgICAgICAgICAgIHRoaXMuX2dseXBocy5wdXNoKGMpO1xuICAgICAgICB9XG5cbiAgICAgICAgYy5wb3NpdGlvbi54ID0gKGNoYXJzW2ldLnBvc2l0aW9uLnggKyBsaW5lQWxpZ25PZmZzZXRzW2NoYXJzW2ldLmxpbmVdKSAqIHNjYWxlO1xuICAgICAgICBjLnBvc2l0aW9uLnkgPSBjaGFyc1tpXS5wb3NpdGlvbi55ICogc2NhbGU7XG4gICAgICAgIGMuc2NhbGUueCA9IGMuc2NhbGUueSA9IHNjYWxlO1xuICAgICAgICBjLnRpbnQgPSB0aW50O1xuXG4gICAgICAgIGlmICghYy5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoYyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZW1vdmUgdW5uZWNlc3NhcnkgY2hpbGRyZW4uXG4gICAgZm9yIChpID0gbGVuQ2hhcnM7IGkgPCB0aGlzLl9nbHlwaHMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKHRoaXMuX2dseXBoc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0V2lkdGggPSBtYXhMaW5lV2lkdGggKiBzY2FsZTtcbiAgICB0aGlzLnRleHRIZWlnaHQgPSAocG9zLnkgKyBkYXRhLmxpbmVIZWlnaHQpICogc2NhbGU7XG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gbWF4TGluZUhlaWdodCAqIHNjYWxlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb2YgdGhpcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGV4dCBiZWZvcmUgY2FsbGluZyBwYXJlbnQncyBnZXRMb2NhbEJvdW5kc1xuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5cbkJpdG1hcFRleHQucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICByZXR1cm4gY29yZS5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzLmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59O1xuXG5CaXRtYXBUZXh0LmZvbnRzID0ge307XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIE1vdmllQ2xpcCBpcyBhIHNpbXBsZSB3YXkgdG8gZGlzcGxheSBhbiBhbmltYXRpb24gZGVwaWN0ZWQgYnkgYSBsaXN0IG9mIHRleHR1cmVzLlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgYWxpZW5JbWFnZXMgPSBbXCJpbWFnZV9zZXF1ZW5jZV8wMS5wbmdcIixcImltYWdlX3NlcXVlbmNlXzAyLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDMucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wNC5wbmdcIl07XG4gKiB2YXIgdGV4dHVyZUFycmF5ID0gW107XG4gKlxuICogZm9yICh2YXIgaT0wOyBpIDwgNDsgaSsrKVxuICoge1xuICogICAgICB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoYWxpZW5JbWFnZXNbaV0pO1xuICogICAgICB0ZXh0dXJlQXJyYXkucHVzaCh0ZXh0dXJlKTtcbiAqIH07XG4gKlxuICogdmFyIG1jID0gbmV3IFBJWEkuTW92aWVDbGlwKHRleHR1cmVBcnJheSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0dXJlcyB7UElYSS5UZXh0dXJlW118T2JqZWN0W119IGFuIGFycmF5IG9mIHtAbGluayBQSVhJLlRleHR1cmV9IG9yIGZyYW1lIG9iamVjdHMgdGhhdCBtYWtlIHVwIHRoZSBhbmltYXRpb25cbiAqIEBwYXJhbSB0ZXh0dXJlc1tdLnRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHtAbGluayBQSVhJLlRleHR1cmV9IG9mIHRoZSBmcmFtZVxuICogQHBhcmFtIHRleHR1cmVzW10udGltZSB7bnVtYmVyfSB0aGUgZHVyYXRpb24gb2YgdGhlIGZyYW1lIGluIG1zXG4gKi9cbmZ1bmN0aW9uIE1vdmllQ2xpcCh0ZXh0dXJlcylcbntcbiAgICBjb3JlLlNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmVzWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlID8gdGV4dHVyZXNbMF0gOiB0ZXh0dXJlc1swXS50ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kdXJhdGlvbnMgPSBudWxsO1xuXG4gICAgdGhpcy50ZXh0dXJlcyA9IHRleHR1cmVzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNwZWVkIHRoYXQgdGhlIE1vdmllQ2xpcCB3aWxsIHBsYXkgYXQuIEhpZ2hlciBpcyBmYXN0ZXIsIGxvd2VyIGlzIHNsb3dlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmFuaW1hdGlvblNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBtb3ZpZSBjbGlwIHJlcGVhdHMgYWZ0ZXIgcGxheWluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMubG9vcCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gYSBNb3ZpZUNsaXAgZmluaXNoZXMgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICovXG4gICAgdGhpcy5vbkNvbXBsZXRlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEVsYXBzZWQgdGltZSBzaW5jZSBhbmltYXRpb24gaGFzIGJlZW4gc3RhcnRlZCwgdXNlZCBpbnRlcm5hbGx5IHRvIGRpc3BsYXkgY3VycmVudCB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIE1vdmllQ2xpcCBpcyBjdXJyZW50bHkgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1vdmllQ2xpcC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5Nb3ZpZUNsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTW92aWVDbGlwO1xubW9kdWxlLmV4cG9ydHMgPSBNb3ZpZUNsaXA7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1vdmllQ2xpcC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiB0b3RhbEZyYW1lcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIGZyYW1lcyBpbiB0aGUgTW92aWVDbGlwLiBUaGlzIGlzIHRoZSBzYW1lIGFzIG51bWJlciBvZiB0ZXh0dXJlc1xuICAgICAqIGFzc2lnbmVkIHRvIHRoZSBNb3ZpZUNsaXAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdG90YWxGcmFtZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIHRleHR1cmVzIHVzZWQgZm9yIHRoaXMgTW92aWVDbGlwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqXG4gICAgICovXG4gICAgdGV4dHVyZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZih2YWx1ZVswXSBpbnN0YW5jZW9mIGNvcmUuVGV4dHVyZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcy5wdXNoKHZhbHVlW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMucHVzaCh2YWx1ZVtpXS50aW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgKiBUaGUgTW92aWVDbGlwcyBjdXJyZW50IGZyYW1lIGluZGV4XG4gICAgKlxuICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAqIEByZWFkb25seVxuICAgICovXG4gICAgY3VycmVudEZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRGcmFtZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpICUgdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRGcmFtZSA8IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY3VycmVudEZyYW1lICs9IHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RnJhbWU7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKipcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYoIXRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogUGxheXMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZih0aGlzLnBsYXlpbmcpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5aW5nID0gdHJ1ZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZ29lcyB0byBhIHNwZWNpZmljIGZyYW1lXG4gKlxuICogQHBhcmFtIGZyYW1lTnVtYmVyIHtudW1iZXJ9IGZyYW1lIGluZGV4IHRvIHN0b3AgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kU3RvcCA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLnN0b3AoKTtcblxuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbdGhpcy5jdXJyZW50RnJhbWVdO1xufTtcblxuLyoqXG4gKiBHb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWUgYW5kIGJlZ2lucyBwbGF5aW5nIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RhcnQgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kUGxheSA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IGZyYW1lTnVtYmVyO1xuXG4gICAgdGhpcy5wbGF5KCk7XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKiBAcHJpdmF0ZVxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWQgPSB0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2R1cmF0aW9ucyAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIHZhciBsYWcgPSB0aGlzLl9jdXJyZW50VGltZSAlIDEgKiB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuXG4gICAgICAgIGxhZyArPSBlbGFwc2VkIC8gNjAgKiAxMDAwO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPCAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZS0tO1xuICAgICAgICAgICAgbGFnICs9IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2lnbiA9IE1hdGguc2lnbih0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lKTtcbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgPSBNYXRoLmZsb29yKHRoaXMuX2N1cnJlbnRUaW1lKTtcblxuICAgICAgICB3aGlsZSAobGFnID49IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhZyAtPSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdICogc2lnbjtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IHNpZ247XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBsYWcgLyB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBlbGFwc2VkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jdXJyZW50VGltZSA8IDAgJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AoMCk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5fY3VycmVudFRpbWUgPj0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoICYmICF0aGlzLmxvb3ApXG4gICAge1xuICAgICAgICB0aGlzLmdvdG9BbmRTdG9wKHRoaXMuX3RleHR1cmVzLmxlbmd0aCAtIDEpO1xuXG4gICAgICAgIGlmICh0aGlzLm9uQ29tcGxldGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuXG59O1xuXG4vKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZGVzdHJveXMgaXRcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICggKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuICAgIGNvcmUuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIEEgc2hvcnQgaGFuZCB3YXkgb2YgY3JlYXRpbmcgYSBtb3ZpZWNsaXAgZnJvbSBhbiBhcnJheSBvZiBmcmFtZSBpZHNcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVzIHtzdHJpbmdbXX0gdGhlIGFycmF5IG9mIGZyYW1lcyBpZHMgdGhlIG1vdmllY2xpcCB3aWxsIHVzZSBhcyBpdHMgdGV4dHVyZSBmcmFtZXNcbiAqL1xuTW92aWVDbGlwLmZyb21GcmFtZXMgPSBmdW5jdGlvbiAoZnJhbWVzKVxue1xuICAgIHZhciB0ZXh0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0ZXh0dXJlcy5wdXNoKG5ldyBjb3JlLlRleHR1cmUuZnJvbUZyYW1lKGZyYW1lc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW92aWVDbGlwKHRleHR1cmVzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGltYWdlIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgaW1hZ2UgdXJscyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUltYWdlcyA9IGZ1bmN0aW9uIChpbWFnZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTsiLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICAvLyBhIHNwcml0ZSB1c2UgZGZvciByZW5kZXJpbmcgdGV4dHVyZXMuLlxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlcicpO1xuXG4vKipcbiAqIEEgdGlsaW5nIHNwcml0ZSBpcyBhIGZhc3Qgd2F5IG9mIHJlbmRlcmluZyBhIHRpbGluZyBpbWFnZVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmUge1RleHR1cmV9IHRoZSB0ZXh0dXJlIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFRpbGluZ1Nwcml0ZSh0ZXh0dXJlLCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGluZyBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVTY2FsZSA9IG5ldyBjb3JlLlBvaW50KDEsMSk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgcG9zaXRpb24gb2YgdGhlIGltYWdlIHRoYXQgaXMgYmVpbmcgdGlsZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBuZXcgY29yZS5Qb2ludCgwLDApO1xuXG4gICAgLy8vLy8gcHJpdmF0ZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHdpdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gd2lkdGggfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0IHx8IDEwMDtcblxuICAgIC8qKlxuICAgICAqIEFuIGludGVybmFsIFdlYkdMIFVWIGNhY2hlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlVXZzfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdXZzID0gbmV3IGNvcmUuVGV4dHVyZVV2cygpO1xuXG4gICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IG51bGw7XG5cbiAgICAvL1RPRE8gbW92ZS4uXG4gICAgdGhpcy5zaGFkZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcihcblxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1VHJhbnNmb3JtOycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJyAgIGNvb3JkIC09IHVUcmFuc2Zvcm0ueHk7JyxcbiAgICAgICAgJyAgIGNvb3JkIC89IHVUcmFuc2Zvcm0uenc7JyxcbiAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBjb29yZDsnLFxuXG4gICAgICAgICcgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpOycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgIFtcbiAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdUZyYW1lOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzIgdVBpeGVsU2l6ZTsnLFxuXG4gICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IG1vZCh2VGV4dHVyZUNvb3JkLCB1RnJhbWUuencpOycsXG4gICAgICAgICcgICBjb29yZCA9IGNsYW1wKGNvb3JkLCB1UGl4ZWxTaXplLCB1RnJhbWUuencgLSB1UGl4ZWxTaXplKTsnLFxuICAgICAgICAnICAgY29vcmQgKz0gdUZyYW1lLnh5OycsXG5cbiAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9ICB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdUZyYW1lOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVRyYW5zZm9ybTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLDAsMSwxXSB9LFxuICAgICAgICAgICAgICAgIHVQaXhlbFNpemUgOiB7IHR5cGUgOiAnMmZ2JywgdmFsdWU6IFsxLCAxXX1cbiAgICAgICAgICAgIH1cbiAgICAgICk7XG59XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsaW5nU3ByaXRlO1xubW9kdWxlLmV4cG9ydHMgPSBUaWxpbmdTcHJpdGU7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsaW5nU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRpbGluZ1Nwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybjtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICAvLyB0d2VhayBvdXIgdGV4dHVyZSB0ZW1wb3JhcmlseS4uXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUgfHwgIXRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGVtcFV2cyA9IHRleHR1cmUuX3V2cyxcbiAgICAgICAgdGVtcFdpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIHRlbXBIZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQsXG4gICAgICAgIHR3ID0gdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCxcbiAgICAgICAgdGggPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRoaXMuX3V2cztcbiAgICB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51UGl4ZWxTaXplLnZhbHVlWzBdID0gMS4wL3R3O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMV0gPSAxLjAvdGg7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMF0gPSB0ZW1wVXZzLngwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVsxXSA9IHRlbXBVdnMueTA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzJdID0gdGVtcFV2cy54MSAtIHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzNdID0gdGVtcFV2cy55MiAtIHRlbXBVdnMueTA7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzBdID0gKHRoaXMudGlsZVBvc2l0aW9uLnggJSAodGVtcFdpZHRoICogdGhpcy50aWxlU2NhbGUueCkpIC8gdGhpcy5fd2lkdGg7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsxXSA9ICh0aGlzLnRpbGVQb3NpdGlvbi55ICUgKHRlbXBIZWlnaHQgKiB0aGlzLnRpbGVTY2FsZS55KSkgLyB0aGlzLl9oZWlnaHQ7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsyXSA9ICggdHcgLyB0aGlzLl93aWR0aCApICogdGhpcy50aWxlU2NhbGUueDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzNdID0gKCB0aCAvIHRoaXMuX2hlaWdodCApICogdGhpcy50aWxlU2NhbGUueTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIodGhpcyk7XG5cbiAgICB0ZXh0dXJlLl91dnMgPSB0ZW1wVXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGVtcFdpZHRoO1xuICAgIHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRlbXBIZWlnaHQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBhIHJlZmVyZW5jZSB0byB0aGUgY2FudmFzIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0LFxuICAgICAgICB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgYmFzZVRleHR1cmUgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBtb2RYID0gKHRoaXMudGlsZVBvc2l0aW9uLnggLyB0aGlzLnRpbGVTY2FsZS54KSAlIHRleHR1cmUuX2ZyYW1lLndpZHRoLFxuICAgICAgICBtb2RZID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgLyB0aGlzLnRpbGVTY2FsZS55KSAlIHRleHR1cmUuX2ZyYW1lLmhlaWdodDtcblxuICAgIC8vIGNyZWF0ZSBhIG5pY2Ugc2hpbnkgcGF0dGVybiFcbiAgICAvLyBUT0RPIHRoaXMgbmVlZHMgdG8gYmUgcmVmcmVzaGVkIGlmIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgaWYoIXRoaXMuX2NhbnZhc1BhdHRlcm4pXG4gICAge1xuICAgICAgICAvLyBjdXQgYW4gb2JqZWN0IGZyb20gYSBzcHJpdGVzaGVldC4uXG4gICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IGNvcmUuQ2FudmFzQnVmZmVyKHRleHR1cmUuX2ZyYW1lLndpZHRoLCB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQpO1xuXG4gICAgICAgIC8vIFRpbnQgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgICAgaWYgKHRoaXMudGludCAhPT0gMHhGRkZGRkYpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlZFRpbnQgIT09IHRoaXMudGludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUgPSBDYW52YXNUaW50ZXIuZ2V0VGludGVkVGV4dHVyZSh0aGlzLCB0aGlzLnRpbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZSh0aGlzLnRpbnRlZFRleHR1cmUsIDAsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZShiYXNlVGV4dHVyZS5zb3VyY2UsIC10ZXh0dXJlLl9mcmFtZS54LCAtdGV4dHVyZS5fZnJhbWUueSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IHRlbXBDYW52YXMuY29udGV4dC5jcmVhdGVQYXR0ZXJuKCB0ZW1wQ2FudmFzLmNhbnZhcywgJ3JlcGVhdCcgKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgY29udGV4dCBzdGF0ZS4uXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb24pO1xuXG4gICAgLy8gVE9ETyAtIHRoaXMgc2hvdWxkIGJlIHJvbGxlZCBpbnRvIHRoZSBzZXRUcmFuc2Zvcm0gYWJvdmUuLlxuICAgIGNvbnRleHQuc2NhbGUodGhpcy50aWxlU2NhbGUueCx0aGlzLnRpbGVTY2FsZS55KTtcblxuICAgIGNvbnRleHQudHJhbnNsYXRlKG1vZFggKyAodGhpcy5hbmNob3IueCAqIC10aGlzLl93aWR0aCApLFxuICAgICAgICAgICAgICAgICAgICAgIG1vZFkgKyAodGhpcy5hbmNob3IueSAqIC10aGlzLl9oZWlnaHQpKTtcblxuICAgIC8vIGNoZWNrIGJsZW5kIG1vZGVcbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyBmaWxsIHRoZSBwYXR0ZXJuIVxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fY2FudmFzUGF0dGVybjtcbiAgICBjb250ZXh0LmZpbGxSZWN0KC1tb2RYLFxuICAgICAgICAgICAgICAgICAgICAgLW1vZFksXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl93aWR0aCAvIHRoaXMudGlsZVNjYWxlLngsXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWlnaHQgLyB0aGlzLnRpbGVTY2FsZS55KTtcblxuXG4gICAgLy9UT0RPIC0gcHJldHR5IHN1cmUgdGhpcyBjYW4gYmUgZGVsZXRlZC4uLlxuICAgIC8vY29udGV4dC50cmFuc2xhdGUoLXRoaXMudGlsZVBvc2l0aW9uLnggKyAodGhpcy5hbmNob3IueCAqIHRoaXMuX3dpZHRoKSwgLXRoaXMudGlsZVBvc2l0aW9uLnkgKyAodGhpcy5hbmNob3IueSAqIHRoaXMuX2hlaWdodCkpO1xuICAgIC8vY29udGV4dC5zY2FsZSgxIC8gdGhpcy50aWxlU2NhbGUueCwgMSAvIHRoaXMudGlsZVNjYWxlLnkpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBzcHJpdGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xuXG4gICAgdmFyIHcwID0gd2lkdGggKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICB2YXIgdzEgPSB3aWR0aCAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgdmFyIGgwID0gaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgdmFyIGgxID0gaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG5cbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgdmFyIHgxID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTIgPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHg0ID0gIGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciBtaW5YLFxuICAgICAgICBtYXhYLFxuICAgICAgICBtaW5ZLFxuICAgICAgICBtYXhZO1xuXG4gICAgbWluWCA9IHgxO1xuICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgbWluWSA9IHkxO1xuICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgbWF4WCA9IHgxO1xuICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgbWF4WSA9IHkxO1xuICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG5cbiAgICByZXR1cm4gYm91bmRzO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byBjaGVja1xuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKlxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsZVNjYWxlID0gbnVsbDtcbiAgICB0aGlzLl90aWxlU2NhbGVPZmZzZXQgPSBudWxsO1xuICAgIHRoaXMudGlsZVBvc2l0aW9uID0gbnVsbDtcblxuICAgIHRoaXMuX3V2cyA9IG51bGw7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSB0aWxpbmcgc3ByaXRlIHRoYXQgd2lsbCB1c2UgYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICovXG5UaWxpbmdTcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQsd2lkdGgsaGVpZ2h0KVxue1xuICAgIHZhciB0ZXh0dXJlID0gY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgJyArIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKHRleHR1cmUsd2lkdGgsaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBBIG5ldyBUaWxpbmdTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgd2lkdGgsIGhlaWdodCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRpbGluZ1Nwcml0ZShjb3JlLlRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpLHdpZHRoLGhlaWdodCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgRGlzcGxheU9iamVjdCA9IGNvcmUuRGlzcGxheU9iamVjdCxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gbnVsbDtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbEhpdFRlc3QgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsRGVzdHJveSA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVkU3ByaXRlID0gbnVsbDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGlzcGxheU9iamVjdC5wcm90b3R5cGUsIHtcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgeW91IHdhbnQgdGhpcyBkaXNwbGF5IG9iamVjdCB0byBiZSBjYWNoZWQgYXMgYSBiaXRtYXAuXG4gICAgICogVGhpcyBiYXNpY2FsbHkgdGFrZXMgYSBzbmFwIHNob3Qgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IGFzIGl0IGlzIGF0IHRoYXQgbW9tZW50LiBJdCBjYW4gcHJvdmlkZSBhIHBlcmZvcm1hbmNlIGJlbmVmaXQgZm9yIGNvbXBsZXggc3RhdGljIGRpc3BsYXlPYmplY3RzLlxuICAgICAqIFRvIHJlbW92ZSBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ2ZhbHNlJ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGNhY2hlQXNCaXRtYXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVBc0JpdG1hcDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NhY2hlQXNCaXRtYXAgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSB0aGlzLnJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gdGhpcy5yZW5kZXJDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMudXBkYXRlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzID0gdGhpcy5nZXRCb3VuZHM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbERlc3Ryb3kgPSB0aGlzLmRlc3Ryb3k7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQgPSB0aGlzLmNvbnRhaW5zUG9pbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSB0aGlzLl9jYWNoZUFzQml0bWFwRGVzdHJveTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXN0cm95Q2FjaGVkRGlzcGxheU9iamVjdCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXM7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRCb3VuZHMgPSB0aGlzLl9vcmlnaW5hbEdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX29yaWdpbmFsRGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fb3JpZ2luYWxDb250YWluc1BvaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBXZWJHTFxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gdGhlIFdlYkdMIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZFdlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENhY2hlZERpc3BsYXlPYmplY3QoIHJlbmRlcmVyICk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIoIHRoaXMuX2NhY2hlZFNwcml0ZSApO1xufTtcblxuLyoqXG4qIFByZXBhcmVzIHRoZSBXZWJHTCByZW5kZXJlciB0byBjYWNoZSB0aGUgc3ByaXRlXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGZpcnN0IHdlIGZsdXNoIGFueXRoaW5nIGxlZnQgaW4gdGhlIHJlbmRlcmVyIChvdGhlcndpc2UgaXQgd291bGQgZ2V0IHJlbmRlcmVkIHRvIHRoZSBjYWNoZWQgdGV4dHVyZSlcbiAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbiAgICAvL3RoaXMuZmlsdGVycz0gW107XG4gICAgLy8gbmV4dCB3ZSBmaW5kIHRoZSBkaW1lbnNpb25zIG9mIHRoZSB1bnRyYW5zZm9ybWVkIG9iamVjdFxuICAgIC8vIHRoaXMgZnVuY3Rpb24gYWxzbyBjYWxscyB1cGRhdGV0cmFuc2Zvcm0gb24gYWxsIGl0cyBjaGlsZHJlbiBhcyBwYXJ0IG9mIHRoZSBtZWFzdXJpbmcuIFRoaXMgbWVhbnMgd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIHRyYW5zZm9ybSBhZ2FpbiBpbiB0aGlzIGZ1bmN0aW9uXG4gICAgLy8gVE9ETyBwYXNzIGFuIG9iamVjdCB0byBjbG9uZSB0b28/IHNhdmVzIGhhdmluZyB0byBjcmVhdGUgYSBuZXcgb25lIGVhY2ggdGltZSFcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmNsb25lKCk7XG5cbiAgICAvLyBhZGQgc29tZSBwYWRkaW5nIVxuICAgIGlmKHRoaXMuX2ZpbHRlcnMpXG4gICAge1xuICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuX2ZpbHRlcnNbMF0ucGFkZGluZztcbiAgICAgICAgYm91bmRzLnggLT0gcGFkZGluZztcbiAgICAgICAgYm91bmRzLnkgLT0gcGFkZGluZztcblxuICAgICAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG4gICAgfVxuXG4gICAgLy8gZm9yIG5vdyB3ZSBjYWNoZSB0aGUgY3VycmVudCByZW5kZXJUYXJnZXQgdGhhdCB0aGUgd2ViR0wgcmVuZGVyZXIgaXMgY3VycmVudGx5IHVzaW5nLlxuICAgIC8vIHRoaXMgY291bGQgYmUgbW9yZSBlbGVnZW50Li5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldDtcbiAgICAvLyBXZSBhbHNvIHN0b3JlIHRoZSBmaWx0ZXIgc3RhY2sgLSBJIHdpbGwgZGVmaW5pdGVseSBsb29rIHRvIGNoYW5nZSBob3cgdGhpcyB3b3JrcyBhIGxpdHRsZSBsYXRlciBkb3duIHRoZSBsaW5lLlxuICAgIHZhciBzdGFjayA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2s7XG5cbiAgICAvLyB0aGlzIHJlbmRlclRleHR1cmUgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBjYWNoZWQgRGlzcGxheU9iamVjdFxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG5cblxuICAgIC8vIHNldCBhbGwgcHJvcGVydGllcyB0byB0aGVyZSBvcmlnaW5hbCBzbyB3ZSBjYW4gcmVuZGVyIHRvIGEgdGV4dHVyZVxuICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoY2FjaGVkUmVuZGVyVGFyZ2V0KTtcbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmZpbHRlclN0YWNrID0gc3RhY2s7XG5cbiAgICB0aGlzLnJlbmRlcldlYkdMICAgICA9IHRoaXMuX3JlbmRlckNhY2hlZFdlYkdMO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICAgICAgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgdHJhbnNmb3JtIG9mIHRoZSBjYWNoZWQgc3ByaXRlIHRvIGF2b2lkIHRoZSBuYXN0eSBmbGlja2VyLi5cbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgLy8gbWFwIHRoZSBoaXQgdGVzdC4uXG4gICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fY2FjaGVkU3ByaXRlLmNvbnRhaW5zUG9pbnQuYmluZCh0aGlzLl9jYWNoZWRTcHJpdGUpO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgc3ByaXRlIHdpdGggY2FudmFzXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gdGhlIENhbnZhcyByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9yZW5kZXJDYWNoZWRDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdENhbnZhcyggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLnJlbmRlckNhbnZhcyhyZW5kZXJlcik7XG59O1xuXG4vL1RPRE8gdGhpcyBjYW4gYmUgdGhlIHNhbWUgYXMgdGhlIHdlYkdMIHZlcmlzb24uLiB3aWxsIG5lZWQgdG8gZG8gYSBsaXR0bGUgdHdlYWtpbmcgZmlyc3QgdGhvdWdoLi5cbi8qKlxuKiBQcmVwYXJlcyB0aGUgQ2FudmFzIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvL2dldCBib3VuZHMgYWN0dWFsbHkgdHJhbnNmb3JtcyB0aGUgb2JqZWN0IGZvciB1cyBhbHJlYWR5IVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIG0sIHRydWUpO1xuXG4gICAgLy8gbm93IHJlc3RvcmUgdGhlIHN0YXRlIGJlIHNldHRpbmcgdGhlIG5ldyBwcm9wZXJ0aWVzXG4gICAgcmVuZGVyZXIuY29udGV4dCA9IGNhY2hlZFJlbmRlclRhcmdldDtcblxuICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fcmVuZGVyQ2FjaGVkQ2FudmFzO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICA9IHRoaXMuX2dldENhY2hlZEJvdW5kcztcblxuXG4gICAgLy8gY3JlYXRlIG91ciBjYWNoZWQgc3ByaXRlXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IGNvcmUuU3ByaXRlKHJlbmRlclRleHR1cmUpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogQ2FsY3VsYXRlcyB0aGUgYm91bmRzIG9mIHRoZSBjYWNoZWQgc3ByaXRlXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2dldENhY2hlZEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLl9jYWNoZWRTcHJpdGUuZ2V0Qm91bmRzKCk7XG59O1xuXG4vKipcbiogRGVzdHJveXMgdGhlIGNhY2hlZCBzcHJpdGUuXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX3RleHR1cmUuZGVzdHJveSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59O1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcERlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSgpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSBpbnN0YW5jZSBuYW1lIG9mIHRoZSBvYmplY3QuXG4gKlxuICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAqIEBtZW1iZXIge3N0cmluZ31cbiAqL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5uYW1lID0gbnVsbDtcblxuLyoqXG4qIFJldHVybnMgdGhlIGRpc3BsYXkgb2JqZWN0IGluIHRoZSBjb250YWluZXJcbipcbiogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuKiBAcGFyYW0gbmFtZSB7c3RyaW5nfSBpbnN0YW5jZSBuYW1lXG4qIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiovXG5jb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWUgPSBmdW5jdGlvbiAobmFtZSlcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbltpXS5uYW1lID09PSBuYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdFxuKlxuKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuKiBAcGFyYW0gcG9pbnQge1BvaW50fSB0aGUgcG9pbnQgdG8gd3JpdGUgdGhlIGdsb2JhbCB2YWx1ZSB0by4gSWYgbnVsbCBhIG5ldyBwb2ludCB3aWxsIGJlIHJldHVybmVkXG4qIEByZXR1cm4ge1BvaW50fVxuKi9cbmNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0R2xvYmFsUG9zaXRpb24gPSBmdW5jdGlvbiAocG9pbnQpXG57XG4gICAgcG9pbnQgPSBwb2ludCB8fCBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgaWYodGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICBwb2ludC54ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMud29ybGRUcmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHBvaW50LnggPSB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIHBvaW50LnkgPSB0aGlzLnBvc2l0aW9uLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxucmVxdWlyZSgnLi9jYWNoZUFzQml0bWFwJyk7XG5yZXF1aXJlKCcuL2dldENoaWxkQnlOYW1lJyk7XG5yZXF1aXJlKCcuL2dldEdsb2JhbFBvc2l0aW9uJyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmV4dHJhc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNb3ZpZUNsaXA6ICAgICAgcmVxdWlyZSgnLi9Nb3ZpZUNsaXAnKSxcbiAgICBUaWxpbmdTcHJpdGU6ICAgcmVxdWlyZSgnLi9UaWxpbmdTcHJpdGUnKSxcbiAgICBCaXRtYXBUZXh0OiAgICAgcmVxdWlyZSgnLi9CaXRtYXBUZXh0Jylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGUgWSBpcyBmbGlwcGVkIGluIHRoaXMgc2hhZGVyIGZvciBzb21lIHJlYXNvbi5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgc2hhZGVyIDogaHR0cHM6Ly93d3cuc2hhZGVydG95LmNvbS92aWV3L2xzc0dEaiBieSBAbW92QVgxM2hcbiAqL1xuXG4vKipcbiAqIEFuIEFTQ0lJIGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQXNjaWlGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gZmxvYXQgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IGNoYXJhY3RlcihmbG9hdCBuLCB2ZWMyIHApXFxue1xcbiAgICBwID0gZmxvb3IocCp2ZWMyKDQuMCwgLTQuMCkgKyAyLjUpO1xcbiAgICBpZiAoY2xhbXAocC54LCAwLjAsIDQuMCkgPT0gcC54ICYmIGNsYW1wKHAueSwgMC4wLCA0LjApID09IHAueSlcXG4gICAge1xcbiAgICAgICAgaWYgKGludChtb2Qobi9leHAyKHAueCArIDUuMCpwLnkpLCAyLjApKSA9PSAxKSByZXR1cm4gMS4wO1xcbiAgICB9XFxuICAgIHJldHVybiAwLjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5O1xcblxcbiAgICB2ZWMzIGNvbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgZmxvb3IoIHV2IC8gcGl4ZWxTaXplICkgKiBwaXhlbFNpemUgLyBkaW1lbnNpb25zLnh5KS5yZ2I7XFxuXFxuICAgIGZsb2F0IGdyYXkgPSAoY29sLnIgKyBjb2wuZyArIGNvbC5iKSAvIDMuMDtcXG5cXG4gICAgZmxvYXQgbiA9ICA2NTUzNi4wOyAgICAgICAgICAgICAvLyAuXFxuICAgIGlmIChncmF5ID4gMC4yKSBuID0gNjU2MDAuMDsgICAgLy8gOlxcbiAgICBpZiAoZ3JheSA+IDAuMykgbiA9IDMzMjc3Mi4wOyAgIC8vICpcXG4gICAgaWYgKGdyYXkgPiAwLjQpIG4gPSAxNTI1NTA4Ni4wOyAvLyBvXFxuICAgIGlmIChncmF5ID4gMC41KSBuID0gMjMzODUxNjQuMDsgLy8gJlxcbiAgICBpZiAoZ3JheSA+IDAuNikgbiA9IDE1MjUyMDE0LjA7IC8vIDhcXG4gICAgaWYgKGdyYXkgPiAwLjcpIG4gPSAxMzE5OTQ1Mi4wOyAvLyBAXFxuICAgIGlmIChncmF5ID4gMC44KSBuID0gMTE1MTI4MTAuMDsgLy8gI1xcblxcbiAgICB2ZWMyIHAgPSBtb2QoIHV2IC8gKCBwaXhlbFNpemUgKiAwLjUgKSwgMi4wKSAtIHZlYzIoMS4wKTtcXG4gICAgY29sID0gY29sICogY2hhcmFjdGVyKG4sIHApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbCwgMS4wKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiA4IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkFzY2lpRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQXNjaWlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXNjaWlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFzY2lpRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBc2NpaUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGl4ZWwgc2l6ZSB1c2VkIGJ5IHRoZSBmaWx0ZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Bc2NpaUZpbHRlciNcbiAgICAgKi9cbiAgICBzaXplOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsb29tRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsb29tRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlciA9IG5ldyBCbHVyWUZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcbn1cblxuQmxvb21GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbG9vbUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbG9vbUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxvb21GaWx0ZXI7XG5cbkJsb29tRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAvL1RPRE8gLSBjb3B5VGV4U3ViSW1hZ2UyRCBjb3VsZCBiZSB1c2VkIGhlcmU/XG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5TQ1JFRU4pO1xuXG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsb29tRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cblxuLyoqXG4gKiBUaGUgQmx1ckRpckZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0b3dhcmQgYSBkaXJlY3Rpb24gdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpclhcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJZXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJEaXJGaWx0ZXIoZGlyWCwgZGlyWSlcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gZmxvYXQgZGlyWDtcXG51bmlmb3JtIGZsb2F0IGRpclk7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbM107XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWSApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApICogMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pICogMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pICogMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSAqIDAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgZGlyWDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogZGlyWCB8fCAwIH0sXG4gICAgICAgICAgICBkaXJZOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJZIHx8IDAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWCBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJYID0gZGlyWCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWSBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJZID0gZGlyWSB8fCAwO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJEaXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJEaXJGaWx0ZXI7XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcikge1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZiAodGhpcy5wYXNzZXMgPT09IDEpIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCByZW5kZXJUYXJnZXQsIGNsZWFyKTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMjsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL3RoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvICh0aGlzLnBhc3NlcysoaSoyKSkgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCByZW5kZXJUYXJnZXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IHZhbHVlICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBkaXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyWDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZGlyWC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJZO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJZLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWUZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBCbHVyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG59XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJGaWx0ZXI7XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHBhc3Nlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5ibHVyWEZpbHRlci5wYXNzZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcyA9IHRoaXMuYmx1cllGaWx0ZXIucGFzc2VzID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1clhGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJYRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAxMiAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwNCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuXFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1clhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1clhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJYRmlsdGVyO1xuXG5CbHVyWEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1clhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJYRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gIE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJZRmlsdGVyIGFwcGxpZXMgYSBob3Jpem9udGFsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAxMiAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDEyICogc3RyZW5ndGgpO1xcblxcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJZRmlsdGVyO1xuXG5CbHVyWUZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gTWF0aC5hYnModGhpcy5zdHJlbmd0aCkgLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIFNtYXJ0IEJsdXIgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTbWFydEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgKiBwZXJjZW50KTtcXG4gICAgICAgIHNhbXBsZS5yZ2IgKj0gc2FtcGxlLmE7XFxuICAgICAgICBjb2xvciArPSBzYW1wbGUgKiB3ZWlnaHQ7XFxuICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgLyB0b3RhbDtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAvPSBnbF9GcmFnQ29sb3IuYSArIDAuMDAwMDE7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgZGVsdGE6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC4xLCB5OiAwLjAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU21hcnRCbHVyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTbWFydEJsdXJGaWx0ZXI7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA1eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIGBgYGpzXG4gKiAgdmFyIGNvbG9yTWF0cml4ID0gbmV3IFBJWEkuQ29sb3JNYXRyaXhGaWx0ZXIoKTtcbiAqICBjb250YWluZXIuZmlsdGVycyA9IFtjb2xvck1hdHJpeF07XG4gKiAgY29sb3JNYXRyaXguY29udHJhc3QoMik7XG4gKiBgYGBcbiAqIEBhdXRob3IgQ2zDqW1lbnQgQ2hlbmViYXVsdCA8Y2xlbWVudEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ29sb3JNYXRyaXhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgbVsyNV07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcblxcbiAgICB2ZWM0IGMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IuciA9IChtWzBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzJdICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IG1bNF07XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5nID0gKG1bNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bN10gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gbVs5XTtcXG5cXG4gICAgIGdsX0ZyYWdDb2xvci5iID0gKG1bMTBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzExXSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IG1bMTRdO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmEgPSAobVsxNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTZdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gbVsxOV07XFxuXFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICcxZnYnLCB2YWx1ZTogW1xuICAgICAgICAgICAgICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvck1hdHJpeEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JNYXRyaXhGaWx0ZXI7XG5cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGN1cnJlbnQgbWF0cml4IGFuZCBzZXQgdGhlIG5ldyBvbmVcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IGlmIHRydWUsIGN1cnJlbnQgbWF0cml4IGFuZCBtYXRyaXggYXJlIG11bHRpcGxpZWQuIElmIGZhbHNlLCBqdXN0IHNldCB0aGUgY3VycmVudCBtYXRyaXggd2l0aCBAcGFyYW0gbWF0cml4XG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fbG9hZE1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgsIG11bHRpcGx5KVxue1xuICAgIG11bHRpcGx5ID0gISFtdWx0aXBseTtcblxuICAgIHZhciBuZXdNYXRyaXggPSBtYXRyaXg7XG5cbiAgICBpZiAobXVsdGlwbHkpIHtcbiAgICAgICAgdGhpcy5fbXVsdGlwbHkobmV3TWF0cml4LCB0aGlzLnVuaWZvcm1zLm0udmFsdWUsIG1hdHJpeCk7XG4gICAgICAgIG5ld01hdHJpeCA9IHRoaXMuX2NvbG9yTWF0cml4KG5ld01hdHJpeCk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgbWF0cml4XG4gICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gbmV3TWF0cml4O1xufTtcblxuLyoqXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQ1J3NcbiAqXG4gKiBAcGFyYW0gb3V0IHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0gYSB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIGIge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyBvdXQge251bWJlcltdfSAobWF0IDV4NClcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpXG57XG5cbiAgICAvLyBSZWQgQ2hhbm5lbFxuICAgIG91dFswXSA9IChhWzBdICogYlswXSkgKyAoYVsxXSAqIGJbNV0pICsgKGFbMl0gKiBiWzEwXSkgKyAoYVszXSAqIGJbMTVdKTtcbiAgICBvdXRbMV0gPSAoYVswXSAqIGJbMV0pICsgKGFbMV0gKiBiWzZdKSArIChhWzJdICogYlsxMV0pICsgKGFbM10gKiBiWzE2XSk7XG4gICAgb3V0WzJdID0gKGFbMF0gKiBiWzJdKSArIChhWzFdICogYls3XSkgKyAoYVsyXSAqIGJbMTJdKSArIChhWzNdICogYlsxN10pO1xuICAgIG91dFszXSA9IChhWzBdICogYlszXSkgKyAoYVsxXSAqIGJbOF0pICsgKGFbMl0gKiBiWzEzXSkgKyAoYVszXSAqIGJbMThdKTtcbiAgICBvdXRbNF0gPSAoYVswXSAqIGJbNF0pICsgKGFbMV0gKiBiWzldKSArIChhWzJdICogYlsxNF0pICsgKGFbM10gKiBiWzE5XSk7XG5cbiAgICAvLyBHcmVlbiBDaGFubmVsXG4gICAgb3V0WzVdID0gKGFbNV0gKiBiWzBdKSArIChhWzZdICogYls1XSkgKyAoYVs3XSAqIGJbMTBdKSArIChhWzhdICogYlsxNV0pO1xuICAgIG91dFs2XSA9IChhWzVdICogYlsxXSkgKyAoYVs2XSAqIGJbNl0pICsgKGFbN10gKiBiWzExXSkgKyAoYVs4XSAqIGJbMTZdKTtcbiAgICBvdXRbN10gPSAoYVs1XSAqIGJbMl0pICsgKGFbNl0gKiBiWzddKSArIChhWzddICogYlsxMl0pICsgKGFbOF0gKiBiWzE3XSk7XG4gICAgb3V0WzhdID0gKGFbNV0gKiBiWzNdKSArIChhWzZdICogYls4XSkgKyAoYVs3XSAqIGJbMTNdKSArIChhWzhdICogYlsxOF0pO1xuICAgIG91dFs5XSA9IChhWzVdICogYls0XSkgKyAoYVs2XSAqIGJbOV0pICsgKGFbN10gKiBiWzE0XSkgKyAoYVs4XSAqIGJbMTldKTtcblxuICAgIC8vIEJsdWUgQ2hhbm5lbFxuICAgIG91dFsxMF0gPSAoYVsxMF0gKiBiWzBdKSArIChhWzExXSAqIGJbNV0pICsgKGFbMTJdICogYlsxMF0pICsgKGFbMTNdICogYlsxNV0pO1xuICAgIG91dFsxMV0gPSAoYVsxMF0gKiBiWzFdKSArIChhWzExXSAqIGJbNl0pICsgKGFbMTJdICogYlsxMV0pICsgKGFbMTNdICogYlsxNl0pO1xuICAgIG91dFsxMl0gPSAoYVsxMF0gKiBiWzJdKSArIChhWzExXSAqIGJbN10pICsgKGFbMTJdICogYlsxMl0pICsgKGFbMTNdICogYlsxN10pO1xuICAgIG91dFsxM10gPSAoYVsxMF0gKiBiWzNdKSArIChhWzExXSAqIGJbOF0pICsgKGFbMTJdICogYlsxM10pICsgKGFbMTNdICogYlsxOF0pO1xuICAgIG91dFsxNF0gPSAoYVsxMF0gKiBiWzRdKSArIChhWzExXSAqIGJbOV0pICsgKGFbMTJdICogYlsxNF0pICsgKGFbMTNdICogYlsxOV0pO1xuXG4gICAgLy8gQWxwaGEgQ2hhbm5lbFxuICAgIG91dFsxNV0gPSAoYVsxNV0gKiBiWzBdKSArIChhWzE2XSAqIGJbNV0pICsgKGFbMTddICogYlsxMF0pICsgKGFbMThdICogYlsxNV0pO1xuICAgIG91dFsxNl0gPSAoYVsxNV0gKiBiWzFdKSArIChhWzE2XSAqIGJbNl0pICsgKGFbMTddICogYlsxMV0pICsgKGFbMThdICogYlsxNl0pO1xuICAgIG91dFsxN10gPSAoYVsxNV0gKiBiWzJdKSArIChhWzE2XSAqIGJbN10pICsgKGFbMTddICogYlsxMl0pICsgKGFbMThdICogYlsxN10pO1xuICAgIG91dFsxOF0gPSAoYVsxNV0gKiBiWzNdKSArIChhWzE2XSAqIGJbOF0pICsgKGFbMTddICogYlsxM10pICsgKGFbMThdICogYlsxOF0pO1xuICAgIG91dFsxOV0gPSAoYVsxNV0gKiBiWzRdKSArIChhWzE2XSAqIGJbOV0pICsgKGFbMTddICogYlsxNF0pICsgKGFbMThdICogYlsxOV0pO1xuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEByZXR1cm4gbSB7bnVtYmVyW119IChtYXQgNXg0KSB3aXRoIGFsbCB2YWx1ZXMgYmV0d2VlbiAwLTFcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9jb2xvck1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgLy8gQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICAgIHZhciBtID0gbmV3IEZsb2F0MzJBcnJheShtYXRyaXgpO1xuICAgIG1bNF0gLz0gMjU1O1xuICAgIG1bOV0gLz0gMjU1O1xuICAgIG1bMTRdIC89IDI1NTtcbiAgICBtWzE5XSAvPSAyNTU7XG5cbiAgICByZXR1cm4gbTtcbn07XG5cbi8qKlxuICogQWRqdXN0cyBicmlnaHRuZXNzXG4gKlxuICogQHBhcmFtIGIge251bWJlcn0gdmFsdWUgb2YgdGhlIGJyaWd0aG5lc3MgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJpZ2h0bmVzcyA9IGZ1bmN0aW9uIChiLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBiLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCBiLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCBiLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgbWF0cmljZXMgaW4gZ3JleSBzY2FsZXNcbiAqXG4gKiBAcGFyYW0gc2NhbGUge251bWJlcn0gdmFsdWUgb2YgdGhlIGdyZXkgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlID0gZnVuY3Rpb24gKHNjYWxlLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuLy9BbWVyaWNhbml6ZWQgYWxpYXNcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmF5c2NhbGUgPSBDb2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlO1xuXG4vKipcbiAqIFNldCB0aGUgYmxhY2sgYW5kIHdoaXRlIG1hdHJpY2VcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ibGFja0FuZFdoaXRlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBodWUgcHJvcGVydHkgb2YgdGhlIGNvbG9yXG4gKlxuICogQHBhcmFtIHJvdGF0aW9uIHtudW1iZXJ9IGluIGRlZ3JlZXNcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5odWUgPSBmdW5jdGlvbiAocm90YXRpb24sIG11bHRpcGx5KVxue1xuICAgIHJvdGF0aW9uID0gKHJvdGF0aW9uIHx8IDApIC8gMTgwICogTWF0aC5QSTtcbiAgICB2YXIgY29zID0gTWF0aC5jb3Mocm90YXRpb24pLFxuICAgICAgICBzaW4gPSBNYXRoLnNpbihyb3RhdGlvbik7XG5cbiAgICAvLyBsdW1pbmFuY2VSZWQsIGx1bWluYW5jZUdyZWVuLCBsdW1pbmFuY2VCbHVlXG4gICAgdmFyIGx1bVIgPSAwLjIxMywgLy8gb3IgMC4zMDg2XG4gICAgICAgIGx1bUcgPSAwLjcxNSwgLy8gb3IgMC42MDk0XG4gICAgICAgIGx1bUIgPSAwLjA3MjsgLy8gb3IgMC4wODIwXG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBsdW1SICsgY29zICogKDEgLSBsdW1SKSArIHNpbiAqICgtbHVtUiksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKC1sdW1HKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoMSAtIGx1bUIpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgwLjE0MyksIGx1bUcgKyBjb3MgKiAoMSAtIGx1bUcpICsgc2luICogKDAuMTQwKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoLTAuMjgzKSwgMCwgMCxcbiAgICAgICAgbHVtUiArIGNvcyAqICgtbHVtUikgKyBzaW4gKiAoLSgxIC0gbHVtUikpLCBsdW1HICsgY29zICogKC1sdW1HKSArIHNpbiAqIChsdW1HKSwgbHVtQiArIGNvcyAqICgxIC0gbHVtQikgKyBzaW4gKiAobHVtQiksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLyoqXG4gKiBTZXQgdGhlIGNvbnRyYXN0IG1hdHJpeCwgaW5jcmVhc2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBkYXJrIGFuZCBicmlnaHRcbiAqIEluY3JlYXNlIGNvbnRyYXN0IDogc2hhZG93cyBkYXJrZXIgYW5kIGhpZ2hsaWdodHMgYnJpZ2h0ZXJcbiAqIERlY3JlYXNlIGNvbnRyYXN0IDogYnJpbmcgdGhlIHNoYWRvd3MgdXAgYW5kIHRoZSBoaWdobGlnaHRzIGRvd25cbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBjb250cmFzdFxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbnRyYXN0ID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHYgPSAoYW1vdW50IHx8IDApICsgMTtcbiAgICB2YXIgbyA9IC0xMjggKiAodiAtIDEpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgdiwgMCwgMCwgMCwgbyxcbiAgICAgICAgMCwgdiwgMCwgMCwgbyxcbiAgICAgICAgMCwgMCwgdiwgMCwgbyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHNhdHVyYXRpb24gbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGNvbG9yc1xuICogSW5jcmVhc2Ugc2F0dXJhdGlvbiA6IGluY3JlYXNlIGNvbnRyYXN0LCBicmlnaHRuZXNzLCBhbmQgc2hhcnBuZXNzXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNhdHVyYXRlID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHggPSAoYW1vdW50IHx8IDApICogMiAvIDMgKyAxO1xuICAgIHZhciB5ID0gKCh4IC0gMSkgKiAtMC41KTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHgsIHksIHksIDAsIDAsXG4gICAgICAgIHksIHgsIHksIDAsIDAsXG4gICAgICAgIHksIHksIHgsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRGVzYXR1cmF0ZSBpbWFnZSAocmVtb3ZlIGNvbG9yKVxuICpcbiAqIENhbGwgdGhlIHNhdHVyYXRlIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmRlc2F0dXJhdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICB0aGlzLnNhdHVyYXRlKC0xKTtcbn07XG5cbi8qKlxuICogTmVnYXRpdmUgaW1hZ2UgKGludmVyc2Ugb2YgY2xhc3NpYyByZ2IgbWF0cml4KVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uZWdhdGl2ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAxLCAxLCAwLCAwLFxuICAgICAgICAxLCAwLCAxLCAwLCAwLFxuICAgICAgICAxLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNlcGlhIGltYWdlXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNlcGlhID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMzkzLCAwLjc2ODk5OTksIDAuMTg4OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMzQ5LCAwLjY4NTk5OTksIDAuMTY3OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMjcyLCAwLjUzMzk5OTksIDAuMTMwOTk5OTksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgbW90aW9uIHBpY3R1cmUgcHJvY2VzcyBpbnZlbnRlZCBpbiAxOTE2ICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50ZWNobmljb2xvciA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjkxMjUyNzc4OTE0NTYwODMsIC0wLjg1NDUzNDQ5NzY5NTE2NDUsIC0wLjA5MTU1NTA4NDgyNzU1NTg1LCAwLCAxMS43OTM2MDM0MzQzNzczMzcsXG4gICAgICAgIC0wLjMwODc4MzMzODU5MjgwOTcsIDEuNzY1ODkwODU1NTQ1ODQyOCwgLTAuMTA2MDE3NDMwNzQ3MjIyNDUsIDAsIC03MC4zNTIwNTE2MTQ2MTM5OCxcbiAgICAgICAgLTAuMjMxMTAzMzc3NTQ4NjE2LCAtMC43NTAxODk5MTk3NDQwMjEyLCAxLjg0NzU5NzgxNjEwODE4OSwgMCwgMzAuOTUwOTQwODY5NDkxMTM4LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFBvbGFyb2lkIGZpbHRlclxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wb2xhcm9pZCA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjQzOCwgLTAuMDYyLCAtMC4wNjIsIDAsIDAsXG4gICAgICAgIC0wLjEyMiwgMS4zNzgsIC0wLjEyMiwgMCwgMCxcbiAgICAgICAgLTAuMDE2LCAtMC4wMTYsIDEuNDgzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEZpbHRlciB3aG8gdHJhbnNmb3JtcyA6IFJlZCAtPiBCbHVlIGFuZCBCbHVlIC0+IFJlZFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50b0JHUiA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIENvbG9yIHJldmVyc2FsIGZpbG0gaW50cm9kdWNlZCBieSBFYXN0bWFuIEtvZGFrIGluIDE5MzUuICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5rb2RhY2hyb21lID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuMTI4NTU4MjM5NjU5MzUyNSwgLTAuMzk2NzM4MjI4MzYwMTM0OCwgLTAuMDM5OTI1NTkxNzI5MjE3OTMsIDAsIDYzLjcyOTU4NzYyMTk2NTAyLFxuICAgICAgICAtMC4xNjQwNDMzOTk2MjI0NDYxNiwgMS4wODM1MjUxNTY2MjkxMzA0LCAtMC4wNTQ5ODgwNTExNTYzMzEzMiwgMCwgMjQuNzMyNDA3ODk2NzA2MjAzLFxuICAgICAgICAtMC4xNjc4NjAxMDcwNjE1NTc2MywgLTAuNTYwMzQxNjI3NzY5NTI0OCwgMS42MDE0ODUwNzYxOTY0OTQzLCAwLCAzNS42Mjk4MjgwNzQ2MDk0NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBCcm93biBkZWxpY2lvdXMgYnJvd25pIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJvd25pID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNTk5NzAyMzQ5ODE1OTcxNSwgMC4zNDU1MzI0MzA0ODM5MTI2MywgLTAuMjcwODI5ODY3NDUzODA0MiwgMCwgNDcuNDMxOTI4NTU2MDA4NzMsXG4gICAgICAgIC0wLjAzNzcwMzI0OTgzNzc4MzE1NywgMC44NjA5NTc3NTg3OTkyNjQxLCAwLjE1MDU5NTUyMzg4NDU5OTEzLCAwLCAtMzYuOTY4NDE0OTgzMTkxMjcsXG4gICAgICAgIDAuMjQxMTM2MzUxMjgxNTMzMzUsIC0wLjA3NDQxMDM3OTA4NDIyNDkyLCAwLjQ0OTcyMTgyMDY0ODc3MTUzLCAwLCAtNy41NjIwNzUyNzc1OTEyODMsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBWaW50YWdlIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudmludGFnZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjYyNzkzNDU2MzU2MDU5OTQsIDAuMzIwMjE4MzQyMDgxOTM2NywgLTAuMDM5NjU0MDgyMTEzMTI0NTMsIDAsIDkuNjUxMjg1ODM1Mjk0MTIzLFxuICAgICAgICAwLjAyNTc4Mzk3NzA0ODA4ODY4LCAwLjY0NDExODg2NDQzNzQ3NzEsIDAuMDMyNTkxMjc2MTYxNDkyOTQsIDAsIDcuNDYyODI5MTc2NDcwNTkxLFxuICAgICAgICAwLjA0NjYwNTU1NTY3ODI3MTksIC0wLjA4NTEyMzI5ODcyNDc4OTEsIDAuNTI0MTY0ODAxODcwMDQ2NSwgMCwgNS4xNTkxOTA1ODgyMzUyOTYsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBXZSBkb24ndCBrbm93IGV4YWN0bHkgd2hhdCBpdCBkb2VzLCBraW5kIG9mIGdyYWRpZW50IG1hcCwgYnV0IGZ1bm55IHRvIHBsYXkgd2l0aCFcbiAqXG4gKiBAcGFyYW0gZGVzYXR1cmF0aW9uIHtudW1iZXJ9XG4gKiBAcGFyYW0gdG9uZWQge251bWJlcn1cbiAqIEBwYXJhbSBsaWdodENvbG9yIHtzdHJpbmd9IChleGFtcGxlIDogXCIweEZGRTU4MFwiKVxuICogQHBhcmFtIGRhcmtDb2xvciB7c3RyaW5nfSAgKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbG9yVG9uZSA9IGZ1bmN0aW9uIChkZXNhdHVyYXRpb24sIHRvbmVkLCBsaWdodENvbG9yLCBkYXJrQ29sb3IsIG11bHRpcGx5KVxue1xuICAgIGRlc2F0dXJhdGlvbiA9IGRlc2F0dXJhdGlvbiB8fCAwLjI7XG4gICAgdG9uZWQgPSB0b25lZCB8fCAwLjE1O1xuICAgIGxpZ2h0Q29sb3IgPSBsaWdodENvbG9yIHx8IDB4RkZFNTgwO1xuICAgIGRhcmtDb2xvciA9IGRhcmtDb2xvciB8fCAweDMzODAwMDtcblxuICAgIHZhciBsUiA9ICgobGlnaHRDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEcgPSAoKGxpZ2h0Q29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEIgPSAobGlnaHRDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgdmFyIGRSID0gKChkYXJrQ29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGRHID0gKChkYXJrQ29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEIgPSAoZGFya0NvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjMsIDAuNTksIDAuMTEsIDAsIDAsXG4gICAgICAgIGxSLCBsRywgbEIsIGRlc2F0dXJhdGlvbiwgMCxcbiAgICAgICAgZFIsIGRHLCBkQiwgdG9uZWQsIDAsXG4gICAgICAgIGxSIC0gZFIsIGxHIC0gZEcsIGxCIC0gZEIsIDAsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBOaWdodCBlZmZlY3RcbiAqXG4gKiBAcGFyYW0gaW50ZW5zaXR5IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubmlnaHQgPSBmdW5jdGlvbiAoaW50ZW5zaXR5LCBtdWx0aXBseSlcbntcbiAgICBpbnRlbnNpdHkgPSBpbnRlbnNpdHkgfHwgMC4xO1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGludGVuc2l0eSAqICggLTIuMCksIC1pbnRlbnNpdHksIDAsIDAsIDAsXG4gICAgICAgIC1pbnRlbnNpdHksIDAsIGludGVuc2l0eSwgMCwgMCxcbiAgICAgICAgMCwgaW50ZW5zaXR5LCBpbnRlbnNpdHkgKiAyLjAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLypcbiAqIFByZWRhdG9yIGVmZmVjdFxuICpcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIGEgbmV3IGluZGVwZW50IG9uZVxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gaG93IG11Y2ggdGhlIHByZWRhdG9yIGZlZWxzIGhpcyBmdXR1cmUgdmljdGltXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucHJlZGF0b3IgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxMS4yMjQxMzA2MzA0OTMxNjQgKiBhbW91bnQsIC00Ljc5NDQ4Njk5OTUxMTcxOSAqIGFtb3VudCwgLTIuODc0NjExODU0NTUzMjIyNyAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC40MDM0MjQzODIyMDk3Nzc4MyAqIGFtb3VudCxcbiAgICAgICAgLTMuNjMzMDY5NzUzNjQ2ODUwNiAqIGFtb3VudCwgOS4xOTMxNTcxOTYwNDQ5MjIgKiBhbW91bnQsIC0yLjk1MTgxMDgzNjc5MTk5MiAqIGFtb3VudCwgMCAqIGFtb3VudCwgLTEuMzE2MTM1MDQ4ODY2MjcyICogYW1vdW50LFxuICAgICAgICAtMy4yMTg0MTk3OTAyNjc5NDQzICogYW1vdW50LCAtNC4yMzc1MDMwNTE3NTc4MTI1ICogYW1vdW50LCA3LjQ3NjQ0ODA1OTA4MjAzMSAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC44MDQ0NDU5MjIzNzQ3MjUzICogYW1vdW50LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogTFNEIGVmZmVjdFxuICpcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gSG93IGNyYXp5IGlzIHlvdXIgZWZmZWN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubHNkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDIsIC0wLjQsIDAuNSwgMCwgMCxcbiAgICAgICAgLTAuNSwgMiwgLTAuNCwgMCwgMCxcbiAgICAgICAgLTAuNCwgLTAuNSwgMywgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIHRoZSBkZWZhdWx0IG9uZVxuICpcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBmYWxzZSk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hdHJpeCBvZiB0aGUgY29sb3IgbWF0cml4IGZpbHRlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvck1hdHJpeEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCBbMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMF1cbiAgICAgKi9cbiAgICBtYXRyaXg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgbG93ZXJzIHRoZSBjb2xvciBkZXB0aCBvZiB5b3VyIGltYWdlIGJ5IHRoZSBnaXZlbiBhbW91bnQsIHByb2R1Y2luZyBhbiBpbWFnZSB3aXRoIGEgc21hbGxlciBwYWxldHRlLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvclN0ZXBGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc3RlcDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBjb2xvciA9IGZsb29yKGNvbG9yICogc3RlcCkgLyBzdGVwO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdGVwOiB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvclN0ZXBGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yU3RlcEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2Ygc3RlcHMgdG8gcmVkdWNlIHRoZSBwYWxldHRlIGJ5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29sb3JTdGVwRmlsdGVyI1xuICAgICAqL1xuICAgIHN0ZXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb252b2x1dGlvbkZpbHRlciBjbGFzcyBhcHBsaWVzIGEgbWF0cml4IGNvbnZvbHV0aW9uIGZpbHRlciBlZmZlY3QuXG4gKiBBIGNvbnZvbHV0aW9uIGNvbWJpbmVzIHBpeGVscyBpbiB0aGUgaW5wdXQgaW1hZ2Ugd2l0aCBuZWlnaGJvcmluZyBwaXhlbHMgdG8gcHJvZHVjZSBhIG5ldyBpbWFnZS5cbiAqIEEgd2lkZSB2YXJpZXR5IG9mIGltYWdlIGVmZmVjdHMgY2FuIGJlIGFjaGlldmVkIHRocm91Z2ggY29udm9sdXRpb25zLCBpbmNsdWRpbmcgYmx1cnJpbmcsIGVkZ2VcbiAqIGRldGVjdGlvbiwgc2hhcnBlbmluZywgZW1ib3NzaW5nLCBhbmQgYmV2ZWxpbmcuIFRoZSBtYXRyaXggc2hvdWxkIGJlIHNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBTZWUgaHR0cDovL2RvY3MuZ2ltcC5vcmcvZW4vcGx1Zy1pbi1jb252bWF0cml4Lmh0bWwgZm9yIG1vcmUgaW5mby5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSBBbiBhcnJheSBvZiB2YWx1ZXMgdXNlZCBmb3IgbWF0cml4IHRyYW5zZm9ybWF0aW9uLiBTcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFdpZHRoIG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqL1xuZnVuY3Rpb24gQ29udm9sdXRpb25GaWx0ZXIobWF0cml4LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgbWVkaXVtcCB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTtcXG51bmlmb3JtIGZsb2F0IG1hdHJpeFs5XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjNCBjMTEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgLSB0ZXhlbFNpemUpOyAvLyB0b3AgbGVmdFxcbiAgIHZlYzQgYzEyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55IC0gdGV4ZWxTaXplLnkpKTsgLy8gdG9wIGNlbnRlclxcbiAgIHZlYzQgYzEzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgcmlnaHRcXG5cXG4gICB2ZWM0IGMyMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCBsZWZ0XFxuICAgdmVjNCBjMjIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpOyAvLyBtaWQgY2VudGVyXFxuICAgdmVjNCBjMjMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSkpOyAvLyBtaWQgcmlnaHRcXG5cXG4gICB2ZWM0IGMzMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGxlZnRcXG4gICB2ZWM0IGMzMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLngsIHZUZXh0dXJlQ29vcmQueSArIHRleGVsU2l6ZS55KSk7IC8vIGJvdHRvbSBjZW50ZXJcXG4gICB2ZWM0IGMzMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIHRleGVsU2l6ZSk7IC8vIGJvdHRvbSByaWdodFxcblxcbiAgIGdsX0ZyYWdDb2xvciA9XFxuICAgICAgIGMxMSAqIG1hdHJpeFswXSArIGMxMiAqIG1hdHJpeFsxXSArIGMxMyAqIG1hdHJpeFsyXSArXFxuICAgICAgIGMyMSAqIG1hdHJpeFszXSArIGMyMiAqIG1hdHJpeFs0XSArIGMyMyAqIG1hdHJpeFs1XSArXFxuICAgICAgIGMzMSAqIG1hdHJpeFs2XSArIGMzMiAqIG1hdHJpeFs3XSArIGMzMyAqIG1hdHJpeFs4XTtcXG5cXG4gICBnbF9GcmFnQ29sb3IuYSA9IGMyMi5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hdHJpeDogICAgIHsgdHlwZTogJzFmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCkgfSxcbiAgICAgICAgICAgIHRleGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSAvIHdpZHRoLCB5OiAxIC8gaGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb252b2x1dGlvbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29udm9sdXRpb25GaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hdHJpeC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMS90aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueCA9IDEvdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS55ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQSBDcm9zcyBIYXRjaCBlZmZlY3QgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDcm9zc0hhdGNoRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGZsb2F0IGx1bSA9IGxlbmd0aCh0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQueHkpLnJnYik7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wLCAxLjAsIDEuMCwgMS4wKTtcXG5cXG4gICAgaWYgKGx1bSA8IDEuMDApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC43NSlcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjUwKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54ICsgZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuMylcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55IC0gNS4wLCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblwiXG4gICAgKTtcbn1cblxuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNyb3NzSGF0Y2hGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBEaXNwbGFjZW1lbnRGaWx0ZXIgY2xhc3MgdXNlcyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20gdGhlIHNwZWNpZmllZCB0ZXh0dXJlIChjYWxsZWQgdGhlIGRpc3BsYWNlbWVudCBtYXApIHRvIHBlcmZvcm0gYSBkaXNwbGFjZW1lbnQgb2YgYW4gb2JqZWN0LlxuICogWW91IGNhbiB1c2UgdGhpcyBmaWx0ZXIgdG8gYXBwbHkgYWxsIG1hbm9yIG9mIGNyYXp5IHdhcnBpbmcgZWZmZWN0c1xuICogQ3VycmVudGx5IHRoZSByIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB4IGFuZCB0aGUgZyBwcm9wZXJ0eSBvZiB0aGUgdGV4dHVyZSBpcyB1c2VkIHRvIG9mZnNldCB0aGUgeS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiAobWFrZSBzdXJlIGl0cyBhZGRlZCB0byB0aGUgc2NlbmUhKVxuICovXG5mdW5jdGlvbiBEaXNwbGFjZW1lbnRGaWx0ZXIoc3ByaXRlLCBzY2FsZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuICAgIHNwcml0ZS5yZW5kZXJhYmxlID0gZmFsc2U7XG5cbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2TWFwQ29vcmQgPSAoIG90aGVyTWF0cml4ICogdmVjMyggYVRleHR1cmVDb29yZCwgMS4wKSAgKS54eTtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMiBzY2FsZTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXBTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IG1hcCA9ICB0ZXh0dXJlMkQobWFwU2FtcGxlciwgdk1hcENvb3JkKTtcXG5cXG4gICBtYXAgLT0gMC41O1xcbiAgIG1hcC54eSAqPSBzY2FsZTtcXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgbWFwLngsIHZUZXh0dXJlQ29vcmQueSArIG1hcC55KSk7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtYXBTYW1wbGVyOiAgICAgeyB0eXBlOiAnc2FtcGxlcjJEJywgdmFsdWU6IHNwcml0ZS50ZXh0dXJlIH0sXG4gICAgICAgICAgICBvdGhlck1hdHJpeDogICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBtYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSkgfSxcbiAgICAgICAgICAgIHNjYWxlOiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG5cbiAgICBpZiAoc2NhbGUgPT09IG51bGwgfHwgc2NhbGUgPT09IHVuZGVmaW5lZClcbiAgICB7XG4gICAgICAgIHNjYWxlID0gMjA7XG4gICAgfVxuXG4gICAgdGhpcy5zY2FsZSA9IG5ldyBjb3JlLlBvaW50KHNjYWxlLCBzY2FsZSk7XG59XG5cbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGFjZW1lbnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERpc3BsYWNlbWVudEZpbHRlcjtcblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICBmaWx0ZXJNYW5hZ2VyLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeChpbnB1dC5mcmFtZSwgdGhpcy5tYXNrU3ByaXRlLCB0aGlzLm1hc2tNYXRyaXgpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5vdGhlck1hdHJpeC52YWx1ZSA9IHRoaXMubWFza01hdHJpeC50b0FycmF5KHRydWUpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueCA9IHRoaXMuc2NhbGUueCAqICgxL2lucHV0LmZyYW1lLndpZHRoKTtcbiAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlLnkgPSB0aGlzLnNjYWxlLnkgKiAoMS9pbnB1dC5mcmFtZS5oZWlnaHQpO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRGlzcGxhY2VtZW50RmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvZnVuL2RvdHNjcmVlbi5qc1xuICovXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIGRvdHNjcmVlbiBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgdG8gYmUgbWFkZSBvdXQgb2ZcbiAqIGJsYWNrIGFuZCB3aGl0ZSBoYWxmdG9uZSBkb3RzIGxpa2UgYW4gb2xkIHByaW50ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIERvdFNjcmVlbkZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XFxuXFxuZmxvYXQgcGF0dGVybigpXFxue1xcbiAgIGZsb2F0IHMgPSBzaW4oYW5nbGUpLCBjID0gY29zKGFuZ2xlKTtcXG4gICB2ZWMyIHRleCA9IHZUZXh0dXJlQ29vcmQgKiBkaW1lbnNpb25zLnh5O1xcbiAgIHZlYzIgcG9pbnQgPSB2ZWMyKFxcbiAgICAgICBjICogdGV4LnggLSBzICogdGV4LnksXFxuICAgICAgIHMgKiB0ZXgueCArIGMgKiB0ZXgueVxcbiAgICkgKiBzY2FsZTtcXG4gICByZXR1cm4gKHNpbihwb2ludC54KSAqIHNpbihwb2ludC55KSkgKiA0LjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGZsb2F0IGF2ZXJhZ2UgPSAoY29sb3IuciArIGNvbG9yLmcgKyBjb2xvci5iKSAvIDMuMDtcXG4gICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzMoYXZlcmFnZSAqIDEwLjAgLSA1LjAgKyBwYXR0ZXJuKCkpLCBjb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzY2FsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEb3RTY3JlZW5GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERvdFNjcmVlbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBzY2FsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSByYWRpdXMgb2YgdGhlIGVmZmVjdC5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Eb3RTY3JlZW5GaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllUaW50RmlsdGVyIGFwcGxpZXMgYSB2ZXJ0aWNhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1cllUaW50RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24rb2Zmc2V0KSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMyBjb2xvcjtcXG51bmlmb3JtIGZsb2F0IGFscGhhO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBzdW0gPSB2ZWM0KDAuMCk7XFxuXFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KCBjb2xvci5yZ2IgKiBzdW0uYSAqIGFscGhhLCBzdW0uYSAqIGFscGhhICk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgLyA1MTIgfSxcbiAgICAgICAgICAgIGNvbG9yOiB7IHR5cGU6ICdjJywgdmFsdWU6IFswLDAsMF19LFxuICAgICAgICAgICAgYWxwaGE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNyB9LFxuICAgICAgICAgICAgb2Zmc2V0OiB7IHR5cGU6ICcyZicsIHZhbHVlOls1LCA1XX0sXG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZToxfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJZVGludEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllUaW50RmlsdGVyO1xuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCBjbGVhcik7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJZVGludEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllUaW50RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZVGludEZpbHRlciA9IHJlcXVpcmUoJy4vQmx1cllUaW50RmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIERyb3BTaGFkb3dGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRHJvcFNoYWRvd0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyID0gbmV3IEJsdXJZVGludEZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIHRoaXMucGFkZGluZyA9IDMwO1xuXG4gICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgdGhpcy5fYW5nbGUgPSA0NSAqIE1hdGguUEkgLyAxODA7XG4gICAgdGhpcy5fZGlzdGFuY2UgPSAxMDtcbiAgICB0aGlzLmFscGhhID0gMC43NTtcbiAgICB0aGlzLmhpZGVPYmplY3QgPSBmYWxzZTtcbiAgICB0aGlzLmJsZW5kTW9kZSA9IGNvcmUuQkxFTkRfTU9ERVMuTVVMVElQTFk7XG59XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERyb3BTaGFkb3dGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERyb3BTaGFkb3dGaWx0ZXI7XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICBpZih0aGlzLl9kaXJ0eVBvc2l0aW9uKVxuICAgIHtcbiAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVswXSA9IE1hdGguc2luKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5vZmZzZXQudmFsdWVbMV0gPSBNYXRoLmNvcyh0aGlzLl9hbmdsZSkgKiB0aGlzLl9kaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKHRoaXMuYmxlbmRNb2RlKTtcblxuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZighdGhpcy5oaWRlT2JqZWN0KVxuICAgIHtcblxuICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuICAgIH1cblxuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNvbG9yIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgY29sb3I6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIGNvcmUudXRpbHMucmdiMmhleCggdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmNvbG9yLnZhbHVlID0gY29yZS51dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbHBoYSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFscGhhOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzdGFuY2Ugb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBkaXN0YW5jZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3RhbmNlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYW5nbGUgb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fYW5nbGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2FuZ2xlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZ3JleXNjYWxlcyB0aGUgcGFsZXR0ZSBvZiB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gR3JheUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGdyYXk7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peChnbF9GcmFnQ29sb3IucmdiLCB2ZWMzKDAuMjEyNipnbF9GcmFnQ29sb3IuciArIDAuNzE1MipnbF9GcmFnQ29sb3IuZyArIDAuMDcyMipnbF9GcmFnQ29sb3IuYiksIGdyYXkpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBncmF5OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkdyYXlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5HcmF5RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEdyYXlGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmF5LiAxIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGJsYWNrIGFuZCB3aGl0ZSwgMCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuR3JheUZpbHRlciNcbiAgICAgKi9cbiAgICBncmF5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBmaWx0ZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5maWx0ZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEFzY2lpRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9hc2NpaS9Bc2NpaUZpbHRlcicpLFxuICAgIEJsb29tRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibG9vbS9CbG9vbUZpbHRlcicpLFxuICAgIEJsdXJGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJGaWx0ZXInKSxcbiAgICBCbHVyWEZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJZRmlsdGVyJyksXG4gICAgQmx1ckRpckZpbHRlcjogICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckRpckZpbHRlcicpLFxuICAgIENvbG9yTWF0cml4RmlsdGVyOiAgcmVxdWlyZSgnLi9jb2xvci9Db2xvck1hdHJpeEZpbHRlcicpLFxuICAgIENvbG9yU3RlcEZpbHRlcjogICAgcmVxdWlyZSgnLi9jb2xvci9Db2xvclN0ZXBGaWx0ZXInKSxcbiAgICBDb252b2x1dGlvbkZpbHRlcjogIHJlcXVpcmUoJy4vY29udm9sdXRpb24vQ29udm9sdXRpb25GaWx0ZXInKSxcbiAgICBDcm9zc0hhdGNoRmlsdGVyOiAgIHJlcXVpcmUoJy4vY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyJyksXG4gICAgRGlzcGxhY2VtZW50RmlsdGVyOiByZXF1aXJlKCcuL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXInKSxcbiAgICBEb3RTY3JlZW5GaWx0ZXI6ICAgIHJlcXVpcmUoJy4vZG90L0RvdFNjcmVlbkZpbHRlcicpLFxuICAgIEdyYXlGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ncmF5L0dyYXlGaWx0ZXInKSxcbiAgICBEcm9wU2hhZG93RmlsdGVyOiAgIHJlcXVpcmUoJy4vZHJvcHNoYWRvdy9Ecm9wU2hhZG93RmlsdGVyJyksXG4gICAgSW52ZXJ0RmlsdGVyOiAgICAgICByZXF1aXJlKCcuL2ludmVydC9JbnZlcnRGaWx0ZXInKSxcbiAgICBOb2lzZUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vbm9pc2UvTm9pc2VGaWx0ZXInKSxcbiAgICBQaXhlbGF0ZUZpbHRlcjogICAgIHJlcXVpcmUoJy4vcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXInKSxcbiAgICBSR0JTcGxpdEZpbHRlcjogICAgIHJlcXVpcmUoJy4vcmdiL1JHQlNwbGl0RmlsdGVyJyksXG4gICAgU2hvY2t3YXZlRmlsdGVyOiAgICByZXF1aXJlKCcuL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXInKSxcbiAgICBTZXBpYUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vc2VwaWEvU2VwaWFGaWx0ZXInKSxcbiAgICBTbWFydEJsdXJGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vYmx1ci9TbWFydEJsdXJGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFhGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlcicpLFxuICAgIFR3aXN0RmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi90d2lzdC9Ud2lzdEZpbHRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBpbnZlcnRzIHlvdXIgRGlzcGxheSBPYmplY3RzIGNvbG9ycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gSW52ZXJ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIGZsb2F0IGludmVydDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoICh2ZWMzKDEpLWdsX0ZyYWdDb2xvci5yZ2IpICogZ2xfRnJhZ0NvbG9yLmEsIGdsX0ZyYWdDb2xvci5yZ2IsIDEuMCAtIGludmVydCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgaW52ZXJ0OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkludmVydEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkludmVydEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnZlcnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludmVydEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgaW52ZXJ0LiBgMWAgd2lsbCBmdWxseSBpbnZlcnQgdGhlIGNvbG9ycywgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5JbnZlcnRGaWx0ZXIjXG4gICAgICovXG4gICAgaW52ZXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuaW52ZXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYWRqdXN0L25vaXNlLmpzXG4gKi9cblxuLyoqXG4gKiBBIE5vaXNlIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIE5vaXNlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IG5vaXNlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IHJhbmQodmVjMiBjbylcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGNvLnh5LCB2ZWMyKDEyLjk4OTgsIDc4LjIzMykpKSAqIDQzNzU4LjU0NTMpO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGZsb2F0IGRpZmYgPSAocmFuZCh2VGV4dHVyZUNvb3JkKSAtIDAuNSkgKiBub2lzZTtcXG5cXG4gICAgY29sb3IuciArPSBkaWZmO1xcbiAgICBjb2xvci5nICs9IGRpZmY7XFxuICAgIGNvbG9yLmIgKz0gZGlmZjtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbm9pc2U6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Ob2lzZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbk5vaXNlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE5vaXNlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBOb2lzZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTm9pc2VGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGFtb3VudCBvZiBub2lzZSB0byBhcHBseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLk5vaXNlRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDAuNVxuICAgICAqL1xuICAgIG5vaXNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm5vaXNlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSBwaXhlbGF0ZSBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgJ2Jsb2NreScuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFBpeGVsYXRlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZlYzIgc2l6ZSA9IGRpbWVuc2lvbnMueHkgLyBwaXhlbFNpemU7XFxuXFxuICAgIHZlYzIgY29sb3IgPSBmbG9vciggKCB2VGV4dHVyZUNvb3JkICogc2l6ZSApICkgLyBzaXplICsgcGl4ZWxTaXplL2RpbWVuc2lvbnMueHkgKiAwLjU7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgY29sb3IpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsICB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICd2MicsICAgdmFsdWU6IHsgeDogMTAsIHk6IDEwIH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQaXhlbGF0ZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gUGl4ZWxhdGVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgYSBwb2ludCB0aGF0IGRlc2NyaWJlcyB0aGUgc2l6ZSBvZiB0aGUgYmxvY2tzLlxuICAgICAqIHggaXMgdGhlIHdpZHRoIG9mIHRoZSBibG9jayBhbmQgeSBpcyB0aGUgaGVpZ2h0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlBpeGVsYXRlRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBbiBSR0IgU3BsaXQgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBSR0JTcGxpdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSB2ZWMyIHJlZDtcXG51bmlmb3JtIHZlYzIgZ3JlZW47XFxudW5pZm9ybSB2ZWMyIGJsdWU7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvci5yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgcmVkL2RpbWVuc2lvbnMueHkpLnI7XFxuICAgZ2xfRnJhZ0NvbG9yLmcgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBncmVlbi9kaW1lbnNpb25zLnh5KS5nO1xcbiAgIGdsX0ZyYWdDb2xvci5iID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgYmx1ZS9kaW1lbnNpb25zLnh5KS5iO1xcbiAgIGdsX0ZyYWdDb2xvci5hID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKS5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZDogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGdyZWVuOiAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogLTIwLCB5OiAyMCB9IH0sXG4gICAgICAgICAgICBibHVlOiAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDIwLCB5OiAtMjAgfSB9LFxuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLCAwLCAwLCAwXSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5SR0JTcGxpdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJHQlNwbGl0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBSR0JTcGxpdEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogUmVkIGNoYW5uZWwgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIHJlZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJlZC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR3JlZW4gY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JlZW46IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JlZW4udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBCbHVlIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGFwcGxpZXMgYSBzZXBpYSBlZmZlY3QgdG8geW91ciBEaXNwbGF5IE9iamVjdHMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNlcGlhRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHNlcGlhO1xcblxcbmNvbnN0IG1hdDMgc2VwaWFNYXRyaXggPSBtYXQzKDAuMzU4OCwgMC43MDQ0LCAwLjEzNjgsIDAuMjk5MCwgMC41ODcwLCAwLjExNDAsIDAuMjM5MiwgMC40Njk2LCAwLjA5MTIpO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGdsX0ZyYWdDb2xvci5yZ2IgKiBzZXBpYU1hdHJpeCwgc2VwaWEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNlcGlhOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNlcGlhRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU2VwaWFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2VwaWFGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNlcGlhRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTZXBpYUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIHNlcGlhLiBgMWAgd2lsbCBhcHBseSB0aGUgZnVsbCBzZXBpYSBlZmZlY3QsIGFuZFxuICAgICAqIGAwYCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2VwaWFGaWx0ZXIjXG4gICAgICovXG4gICAgc2VwaWE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc2VwaWEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbG9yTWF0cml4RmlsdGVyIGNsYXNzIGxldHMgeW91IGFwcGx5IGEgNHg0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgUkdCQVxuICogY29sb3IgYW5kIGFscGhhIHZhbHVlcyBvZiBldmVyeSBwaXhlbCBvbiB5b3VyIGRpc3BsYXlPYmplY3QgdG8gcHJvZHVjZSBhIHJlc3VsdFxuICogd2l0aCBhIG5ldyBzZXQgb2YgUkdCQSBjb2xvciBhbmQgYWxwaGEgdmFsdWVzLiBJdCdzIHByZXR0eSBwb3dlcmZ1bCFcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2hvY2t3YXZlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIHZlYzIgY2VudGVyO1xcbnVuaWZvcm0gdmVjMyBwYXJhbXM7IC8vIDEwLjAsIDAuOCwgMC4xXFxudW5pZm9ybSBmbG9hdCB0aW1lO1xcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gdlRleHR1cmVDb29yZDtcXG4gICAgdmVjMiB0ZXhDb29yZCA9IHV2O1xcblxcbiAgICBmbG9hdCBkaXN0ID0gZGlzdGFuY2UodXYsIGNlbnRlcik7XFxuXFxuICAgIGlmICggKGRpc3QgPD0gKHRpbWUgKyBwYXJhbXMueikpICYmIChkaXN0ID49ICh0aW1lIC0gcGFyYW1zLnopKSApXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IGRpZmYgPSAoZGlzdCAtIHRpbWUpO1xcbiAgICAgICAgZmxvYXQgcG93RGlmZiA9IDEuMCAtIHBvdyhhYnMoZGlmZipwYXJhbXMueCksIHBhcmFtcy55KTtcXG5cXG4gICAgICAgIGZsb2F0IGRpZmZUaW1lID0gZGlmZiAgKiBwb3dEaWZmO1xcbiAgICAgICAgdmVjMiBkaWZmVVYgPSBub3JtYWxpemUodXYgLSBjZW50ZXIpO1xcbiAgICAgICAgdGV4Q29vcmQgPSB1diArIChkaWZmVVYgKiBkaWZmVGltZSk7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB0ZXhDb29yZCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgY2VudGVyOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfSxcbiAgICAgICAgICAgIHBhcmFtczogeyB0eXBlOiAndjMnLCB2YWx1ZTogeyB4OiAxMCwgeTogMC44LCB6OiAwLjEgfSB9LFxuICAgICAgICAgICAgdGltZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hvY2t3YXZlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaG9ja3dhdmVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjZW50ZXIgb2YgdGhlIHNob2Nrd2F2ZSBpbiBub3JtYWxpemVkIHNjcmVlbiBjb29yZHMuIFRoYXQgaXNcbiAgICAgKiAoMCwwKSBpcyB0aGUgdG9wLWxlZnQgYW5kICgxLDEpIGlzIHRoZSBib3R0b20gcmlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBudW1iZXI+fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIGNlbnRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmNlbnRlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBhcmFtcyBvZiB0aGUgc2hvY2t3YXZlLiBUaGVzZSBtb2RpZnkgdGhlIGxvb2sgYW5kIGJlaGF2aW9yIG9mXG4gICAgICogdGhlIHNob2Nrd2F2ZSBhcyBpdCByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgcGFyYW1zOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGFyYW1zLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZWxhcHNlZCB0aW1lIG9mIHRoZSBzaG9ja3dhdmUuIFRoaXMgY29udHJvbHMgdGhlIHNwZWVkIGF0IHdoaWNoXG4gICAgICogdGhlIHNob2Nrd2F2ZSByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICB0aW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0QXhpc0ZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0QXhpc0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBibHVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JhZGllbnRCbHVyO1xcbnVuaWZvcm0gdmVjMiBzdGFydDtcXG51bmlmb3JtIHZlYzIgZW5kO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG51bmlmb3JtIHZlYzIgdGV4U2l6ZTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG4gICAgdmVjMiBub3JtYWwgPSBub3JtYWxpemUodmVjMihzdGFydC55IC0gZW5kLnksIGVuZC54IC0gc3RhcnQueCkpO1xcbiAgICBmbG9hdCByYWRpdXMgPSBzbW9vdGhzdGVwKDAuMCwgMS4wLCBhYnMoZG90KHZUZXh0dXJlQ29vcmQgKiB0ZXhTaXplIC0gc3RhcnQsIG5vcm1hbCkpIC8gZ3JhZGllbnRCbHVyKSAqIGJsdXI7XFxuXFxuICAgIGZvciAoZmxvYXQgdCA9IC0zMC4wOyB0IDw9IDMwLjA7IHQrKylcXG4gICAge1xcbiAgICAgICAgZmxvYXQgcGVyY2VudCA9ICh0ICsgb2Zmc2V0IC0gMC41KSAvIDMwLjA7XFxuICAgICAgICBmbG9hdCB3ZWlnaHQgPSAxLjAgLSBhYnMocGVyY2VudCk7XFxuICAgICAgICB2ZWM0IHNhbXBsZSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGRlbHRhIC8gdGV4U2l6ZSAqIHBlcmNlbnQgKiByYWRpdXMpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBibHVyOiAgICAgICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMTAwIH0sXG4gICAgICAgICAgICBncmFkaWVudEJsdXI6ICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNjAwIH0sXG4gICAgICAgICAgICBzdGFydDogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLCAgICB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIH0gfSxcbiAgICAgICAgICAgIGVuZDogICAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDYwMCwgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZGVsdGE6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMzAsICAgeTogMzAgfSB9LFxuICAgICAgICAgICAgdGV4U2l6ZTogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogd2luZG93LmlubmVyV2lkdGgsIHk6IHdpbmRvdy5pbm5lckhlaWdodCB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG59XG5cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiB0aGUgWCBhbmQgWSBmaWx0ZXJzLCBkb2VzIG5vdGhpbmcgZm9yIHRoaXMgY2xhc3MuXG4gKlxuICovXG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gMDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSAwO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmFkaWVudEJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIHN0YXJ0IHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgZW5kOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdFlGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0IEZpbHRlci4gTWFuYWdlcyB0aGUgcGFzcyBvZiBib3RoIGEgVGlsdFNoaWZ0WEZpbHRlciBhbmQgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIgPSBuZXcgVGlsdFNoaWZ0WEZpbHRlcigpO1xuICAgIHRoaXMudGlsdFNoaWZ0WUZpbHRlciA9IG5ldyBUaWx0U2hpZnRZRmlsdGVyKCk7XG59XG5cblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEZpbHRlcjtcblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JhZGllbnQgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ncmFkaWVudEJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZ3JhZGllbnRCbHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFkgdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuc3RhcnQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBlbmQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5lbmQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZW5kID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBUaWx0U2hpZnRBeGlzRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRBeGlzRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdFhGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRpbHRTaGlmdEF4aXNGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0WEZpbHRlcigpXG57XG4gICAgVGlsdFNoaWZ0QXhpc0ZpbHRlci5jYWxsKHRoaXMpO1xufVxuXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRYRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRYRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKlxuICovXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGR4ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueCAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueDtcbiAgICB2YXIgZHkgPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS55IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS55O1xuICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IGR4IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeSAvIGQ7XG59O1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRZRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gLWR5IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeCAvIGQ7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHR3aXN0IGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0d2lzdGVkIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFR3aXN0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHJhZGl1cztcXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzIgY29vcmQgPSB2VGV4dHVyZUNvb3JkIC0gb2Zmc2V0O1xcbiAgIGZsb2F0IGRpc3QgPSBsZW5ndGgoY29vcmQpO1xcblxcbiAgIGlmIChkaXN0IDwgcmFkaXVzKVxcbiAgIHtcXG4gICAgICAgZmxvYXQgcmF0aW8gPSAocmFkaXVzIC0gZGlzdCkgLyByYWRpdXM7XFxuICAgICAgIGZsb2F0IGFuZ2xlTW9kID0gcmF0aW8gKiByYXRpbyAqIGFuZ2xlO1xcbiAgICAgICBmbG9hdCBzID0gc2luKGFuZ2xlTW9kKTtcXG4gICAgICAgZmxvYXQgYyA9IGNvcyhhbmdsZU1vZCk7XFxuICAgICAgIGNvb3JkID0gdmVjMihjb29yZC54ICogYyAtIGNvb3JkLnkgKiBzLCBjb29yZC54ICogcyArIGNvb3JkLnkgKiBjKTtcXG4gICB9XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCtvZmZzZXQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhZGl1czogICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9LFxuICAgICAgICAgICAgYW5nbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9LFxuICAgICAgICAgICAgb2Zmc2V0OiAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjUsIHk6IDAuNSB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblR3aXN0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVHdpc3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHdpc3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFR3aXN0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUd2lzdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IGRlc2NyaWJlcyB0aGUgdGhlIG9mZnNldCBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgb2Zmc2V0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHJhZGl1cyBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICByYWRpdXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5yYWRpdXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgYW5nbGUgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiLy8gcnVuIHRoZSBwb2x5ZmlsbHNcbnJlcXVpcmUoJy4vcG9seWZpbGwnKTtcblxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29yZScpO1xuXG4vLyBhZGQgY29yZSBwbHVnaW5zLlxuY29yZS5leHRyYXMgICAgICAgICA9IHJlcXVpcmUoJy4vZXh0cmFzJyk7XG5jb3JlLmZpbHRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5jb3JlLmludGVyYWN0aW9uICAgID0gcmVxdWlyZSgnLi9pbnRlcmFjdGlvbicpO1xuY29yZS5sb2FkZXJzICAgICAgICA9IHJlcXVpcmUoJy4vbG9hZGVycycpO1xuY29yZS5tZXNoICAgICAgICAgICA9IHJlcXVpcmUoJy4vbWVzaCcpO1xuY29yZS5hY2Nlc3NpYmlsaXR5ICA9IHJlcXVpcmUoJy4vYWNjZXNzaWJpbGl0eScpO1xuXG4vLyBleHBvcnQgYSBwcmVtYWRlIGxvYWRlciBpbnN0YW5jZVxuLyoqXG4gKiBBIHByZW1hZGUgaW5zdGFuY2Ugb2YgdGhlIGxvYWRlciB0aGF0IGNhbiBiZSB1c2VkIHRvIGxvYWRlciByZXNvdXJjZXMuXG4gKlxuICogQG5hbWUgbG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHByb3BlcnR5IHtQSVhJLmxvYWRlcnMuTG9hZGVyfVxuICovXG5jb3JlLmxvYWRlciA9IG5ldyBjb3JlLmxvYWRlcnMuTG9hZGVyKCk7XG5cbi8vIG1peGluIHRoZSBkZXByZWNhdGlvbiBmZWF0dXJlcy5cbk9iamVjdC5hc3NpZ24oY29yZSwgcmVxdWlyZSgnLi9kZXByZWNhdGlvbicpKTtcblxuLy8gQWx3YXlzIGV4cG9ydCBwaXhpIGdsb2JhbGx5LlxuZ2xvYmFsLlBJWEkgPSBjb3JlO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogSG9sZHMgYWxsIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gYW4gSW50ZXJhY3Rpb24gZXZlbnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uRGF0YSgpXG57XG4gICAgLyoqXG4gICAgICogVGhpcyBwb2ludCBzdG9yZXMgdGhlIGdsb2JhbCBjb29yZHMgb2Ygd2hlcmUgdGhlIHRvdWNoL21vdXNlIGV2ZW50IGhhcHBlbmVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuZ2xvYmFsID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgU3ByaXRlIHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TcHJpdGV9XG4gICAgICovXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBwYXNzZWQgdG8gYW4gZXZlbnQgaGFuZGxlciwgdGhpcyB3aWxsIGJlIHRoZSBvcmlnaW5hbCBET00gRXZlbnQgdGhhdCB3YXMgY2FwdHVyZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0V2ZW50fVxuICAgICAqL1xuICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IG51bGw7XG59XG5cbkludGVyYWN0aW9uRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbkRhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uRGF0YTtcblxuLyoqXG4gKiBUaGlzIHdpbGwgcmV0dXJuIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgc3BlY2lmaWVkIGRpc3BsYXlPYmplY3QgZm9yIHRoaXMgSW50ZXJhY3Rpb25EYXRhXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgbG9jYWwgY29vcmRzIG9mZlxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBwb2ludClcbiAqIEBwYXJhbSBbZ2xvYmFsUG9zXSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgY29udGFpbmluZyB5b3VyIGN1c3RvbSBnbG9iYWwgY29vcmRzLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgdXNlIHRoZSBjdXJyZW50IGdsb2JhbCBjb29yZHMpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBJbnRlcmFjdGlvbkRhdGEgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIERpc3BsYXlPYmplY3RcbiAqL1xuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5nZXRMb2NhbFBvc2l0aW9uID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHBvaW50LCBnbG9iYWxQb3MpXG57XG4gICAgcmV0dXJuIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKGdsb2JhbFBvcyB8fCB0aGlzLmdsb2JhbCwgcG9pbnQpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIEludGVyYWN0aW9uRGF0YSA9IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25EYXRhJyk7XG5cbi8vIE1peCBpbnRlcmFjdGl2ZVRhcmdldCBpbnRvIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGVcbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbik7XG5cbi8qKlxuICogVGhlIGludGVyYWN0aW9uIG1hbmFnZXIgZGVhbHMgd2l0aCBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzLiBBbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgaW50ZXJhY3RpdmVcbiAqIGlmIGl0cyBpbnRlcmFjdGl2ZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIHRydWVcbiAqIFRoaXMgbWFuYWdlciBhbHNvIHN1cHBvcnRzIG11bHRpdG91Y2guXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH1cbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQ9dHJ1ZV0ge2Jvb2xlYW59IFNob3VsZCB0aGUgbWFuYWdlciBhdXRvbWF0aWNhbGx5IHByZXZlbnQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMuXG4gKiBAcGFyYW0gW29wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3k9MTBdIHtudW1iZXJ9IEZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQuXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uTWFuYWdlcihyZW5kZXJlciwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGludGVyYWN0aW9uIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMgYXV0b21hdGljYWxseSBiZSBwcmV2ZW50ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdCA9IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdCA6IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBcyB0aGlzIGZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQgbW9yZSBvZnRlbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgPSBvcHRpb25zLmludGVyYWN0aW9uRnJlcXVlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vdXNlIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhfVxuICAgICAqL1xuICAgIHRoaXMubW91c2UgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCBkYXRhIG9iamVjdCB0byBoYW5kbGUgYWxsIHRoZSBldmVudCB0cmFja2luZy9kaXNwYXRjaGluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnREYXRhID0ge1xuICAgICAgICBzdG9wcGVkOiBmYWxzZSxcbiAgICAgICAgdGFyZ2V0OiBudWxsLFxuICAgICAgICB0eXBlOiBudWxsLFxuICAgICAgICBkYXRhOiB0aGlzLm1vdXNlLFxuICAgICAgICBzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGlueSBsaXR0bGUgaW50ZXJhY3RpdmVEYXRhIHBvb2wgIVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGFbXX1cbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBET00gZWxlbWVudCB0byBiaW5kIHRvLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTEVsZW1lbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIYXZlIGV2ZW50cyBiZWVuIGF0dGFjaGVkIHRvIHRoZSBkb20gZWxlbWVudD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gZmFsc2U7XG5cbiAgICAvL3RoaXMgd2lsbCBtYWtlIGl0IHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gY2FsbCBiaW5kIGFsbCB0aGUgdGltZVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlVXAgPSB0aGlzLm9uTW91c2VVcC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlVXAgPSB0aGlzLnByb2Nlc3NNb3VzZVVwLmJpbmQoIHRoaXMgKTtcblxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IHRoaXMub25Nb3VzZURvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZURvd24gPSB0aGlzLnByb2Nlc3NNb3VzZURvd24uYmluZCggdGhpcyApO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IHRoaXMub25Nb3VzZU1vdmUuYmluZCggdGhpcyApO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IHRoaXMucHJvY2Vzc01vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VPdXQgPSB0aGlzLm9uTW91c2VPdXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IHRoaXMub25Ub3VjaFN0YXJ0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaEVuZCA9IHRoaXMub25Ub3VjaEVuZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gdGhpcy5wcm9jZXNzVG91Y2hFbmQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaE1vdmUgPSB0aGlzLm9uVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sYXN0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjc3Mgc3R5bGUgb2YgdGhlIGN1cnNvciB0aGF0IGlzIGJlaW5nIHVzZWRcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSAnaW5oZXJpdCc7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjYWNoZWQgdmFyXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCByZXNvbHV0aW9uXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IDE7XG5cbiAgICB0aGlzLnNldFRhcmdldEVsZW1lbnQodGhpcy5yZW5kZXJlci52aWV3LCB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24pO1xufVxuXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJhY3Rpb25NYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5cbi8qKlxuICogU2V0cyB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlL3RvdWNoIGV2ZW50cy4gVGhpcyBpcyB1c2VmdWwgZm9yIHdoZW4geW91IGhhdmVcbiAqIG90aGVyIERPTSBlbGVtZW50cyBvbiB0b3Agb2YgdGhlIHJlbmRlcmVycyBDYW52YXMgZWxlbWVudC4gV2l0aCB0aGlzIHlvdSdsbCBiZSBiYWxlIHRvIGRlbGV0ZWdhdGVcbiAqIGFub3RoZXIgRE9NIGVsZW1lbnQgdG8gcmVjZWl2ZSB0aG9zZSBldmVudHMuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQge0hUTUxFbGVtZW50fSB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVEhlIHJlc29sdXRpb24gb2YgdGhlIG5ldyBlbGVtZW50IChyZWxhdGl2ZSB0byB0aGUgY2FudmFzKS5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuc2V0VGFyZ2V0RWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCByZXNvbHV0aW9uKVxue1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICB0aGlzLmFkZEV2ZW50cygpO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYWxsIHRoZSBET00gZXZlbnRzXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5hZGRFdmVudHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29yZS50aWNrZXIuc2hhcmVkLmFkZCh0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy1jb250ZW50LXpvb21pbmcnXSA9ICdub25lJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICdub25lJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgICAgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgICAgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgICAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCAgIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICAgICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsICAgIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIHRoZSBET00gZXZlbnRzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHJlZ2lzdGVyZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJyc7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAgdGhpcy5vblRvdWNoRW5kLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlLCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgIHRoaXMub25Nb3VzZVVwLCB0cnVlKTtcblxuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc3RhdGUgb2YgaW50ZXJhY3RpdmUgb2JqZWN0cy5cbiAqIEludm9rZWQgYnkgYSB0aHJvdHRsZWQgdGlja2VyIHVwZGF0ZSBmcm9tXG4gKiB7QGxpbmsgUElYSS50aWNrZXIuc2hhcmVkfS5cbiAqXG4gKiBAcGFyYW0gZGVsdGFUaW1lIHtudW1iZXJ9XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB0aGlzLl9kZWx0YVRpbWUgKz0gZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2RlbHRhVGltZSA8IHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGVsdGFUaW1lID0gMDtcblxuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHVzZXIgbW92ZSB0aGUgbW91c2UgdGhpcyBjaGVjayBoYXMgYWxyZWFkeSBiZWVuIGRmb25lIHVzaW5nIHRoZSBtb3VzZSBtb3ZlIVxuICAgIGlmKHRoaXMuZGlkTW92ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlkTW92ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE9cbn07XG5cbi8qKlxuICogRGlzcGF0Y2hlcyBhbiBldmVudCBvbiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIGRpc3BsYXkgb2JqZWN0IGluIHF1ZXN0aW9uXG4gKiBAcGFyYW0gZXZlbnRTdHJpbmcge3N0cmluZ30gdGhlIG5hbWUgb2YgdGhlIGV2ZW50IChlLmcsIG1vdXNlZG93bilcbiAqIEBwYXJhbSBldmVudERhdGEge29iamVjdH0gdGhlIGV2ZW50IGRhdGEgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGV2ZW50U3RyaW5nLCBldmVudERhdGEgKVxue1xuICAgIGlmKCFldmVudERhdGEuc3RvcHBlZClcbiAgICB7XG4gICAgICAgIGV2ZW50RGF0YS50YXJnZXQgPSBkaXNwbGF5T2JqZWN0O1xuICAgICAgICBldmVudERhdGEudHlwZSA9IGV2ZW50U3RyaW5nO1xuXG4gICAgICAgIGRpc3BsYXlPYmplY3QuZW1pdCggZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0W2V2ZW50U3RyaW5nXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddKCBldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogTWFwcyB4IGFuZCB5IGNvb3JkcyBmcm9tIGEgRE9NIG9iamVjdCBhbmQgbWFwcyB0aGVtIGNvcnJlY3RseSB0byB0aGUgcGl4aSB2aWV3LiBUaGUgcmVzdWx0aW5nIHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUgcG9pbnQuXG4gKiBUaGlzIHRha2VzIGludG8gYWNjb3VudCB0aGUgZmFjdCB0aGF0IHRoZSBET00gZWxlbWVudCBjb3VsZCBiZSBzY2FsZWQgYW5kIHBvc2l0aW9uZWQgYW55d2hlcmUgb24gdGhlIHNjcmVlbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCB0aGUgcmVzdWx0IHdpbGwgYmUgc3RvcmVkIGluXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHggICAgIHRoZSB4IGNvb3JkIG9mIHRoZSBwb3NpdGlvbiB0byBtYXBcbiAqIEBwYXJhbSAge251bWJlcn0geSAgICAgdGhlIHkgY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm1hcFBvc2l0aW9uVG9Qb2ludCA9IGZ1bmN0aW9uICggcG9pbnQsIHgsIHkgKVxue1xuICAgIHZhciByZWN0ID0gdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcG9pbnQueCA9ICggKCB4IC0gcmVjdC5sZWZ0ICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQud2lkdGggIC8gcmVjdC53aWR0aCAgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHBvaW50LnkgPSAoICggeSAtIHJlY3QudG9wICApICogKHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmhlaWdodCAvIHJlY3QuaGVpZ2h0ICkgKSAvIHRoaXMucmVzb2x1dGlvbjtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlcyBhIG5lYXQgd2F5IG9mIGNyYXdsaW5nIHRocm91Z2ggdGhlIHNjZW5lIGdyYXBoIGFuZCBydW5uaW5nIGEgc3BlY2lmaWVkIGZ1bmN0aW9uIG9uIGFsbCBpbnRlcmFjdGl2ZSBvYmplY3RzIGl0IGZpbmRzLlxuICogSXQgd2lsbCBhbHNvIHRha2UgY2FyZSBvZiBoaXQgdGVzdGluZyB0aGUgaW50ZXJhY3RpdmUgb2JqZWN0cyBhbmQgcGFzc2VzIHRoZSBoaXQgYWNyb3NzIGluIHRoZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCBpcyB0ZXN0ZWQgZm9yIGNvbGxpc2lvblxuICogQHBhcmFtICB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBkaXNwbGF5T2JqZWN0IHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgd2lsbCBiZSBoaXQgdGVzdCAocmVjdXJjc2l2bHkgY3Jhd2xzIGl0cyBjaGlsZHJlbilcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmdW5jIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggaW50ZXJhY3RpdmUgb2JqZWN0LiBUaGUgZGlzcGxheU9iamVjdCBhbmQgaGl0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvblxuICogQHBhcmFtICB7Ym9vbGVhbn0gaGl0VGVzdCB0aGlzIGluZGljYXRlcyBpZiB0aGUgb2JqZWN0cyBpbnNpZGUgc2hvdWxkIGJlIGhpdCB0ZXN0IGFnYWluc3QgdGhlIHBvaW50XG4gKiBAcmV0dXJuIHtib29sZWFufSByZXR1cm5zIHRydWUgaWYgdGhlIGRpc3BsYXlPYmplY3QgaGl0IHRoZSBwb2ludFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NJbnRlcmFjdGl2ZSA9IGZ1bmN0aW9uIChwb2ludCwgZGlzcGxheU9iamVjdCwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmUpXG57XG4gICAgaWYoIWRpc3BsYXlPYmplY3QgfHwgIWRpc3BsYXlPYmplY3QudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUb29rIGEgbGl0dGxlIHdoaWxlIHRvIHJld29yayB0aGlzIGZ1bmN0aW9uIGNvcnJlY3RseSEgQnV0IG5vdyBpdCBpcyBkb25lIGFuZCBuaWNlIGFuZCBvcHRpbWlzZWQuIF5fXlxuICAgIC8vIFxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBub3cgbG9vcCB0aHJvdWdoIGFsbCBvYmplY3RzIGFuZCB0aGVuIG9ubHkgaGl0IHRlc3QgdGhlIG9iamVjdHMgaXQgSEFTIHRvLCBub3QgYWxsIG9mIHRoZW0uIE1VQ0ggZmFzdGVyLi5cbiAgICAvLyBBbiBvYmplY3Qgd2lsbCBiZSBoaXQgdGVzdCBpZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gICAgLy8gXG4gICAgLy8gMTogSXQgaXMgaW50ZXJhY3RpdmUuXG4gICAgLy8gMjogSXQgYmVsb25ncyB0byBhIHBhcmVudCB0aGF0IGlzIGludGVyYWN0aXZlIEFORCBvbmUgb2YgdGhlIHBhcmVudHMgY2hpbGRyZW4gaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICAvLyBcbiAgICAvLyBBcyBhbm90aGVyIGxpdHRsZSBvcHRpbWlzYXRpb24gb25jZSBhbiBpbnRlcmFjdGl2ZSBvYmplY3QgaGFzIGJlZW4gaGl0IHdlIGNhbiBjYXJyeSBvbiB0aHJvdWdoIHRoZSBzY2VuZWdyYXBoLCBidXQgd2Uga25vdyB0aGF0IHRoZXJlIHdpbGwgYmUgbm8gbW9yZSBoaXRzISBTbyB3ZSBjYW4gYXZvaWQgZXh0cmEgaGl0IHRlc3RzXG4gICAgLy8gQSBmaW5hbCBvcHRpbWlzYXRpb24gaXMgdGhhdCBhbiBvYmplY3QgaXMgbm90IGhpdCB0ZXN0IGRpcmVjdGx5IGlmIGEgY2hpbGQgaGFzIGFscmVhZHkgYmVlbiBoaXQuXG4gICAgXG4gICAgdmFyIGhpdCA9IGZhbHNlLFxuICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGludGVyYWN0aXZlID0gZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSB8fCBpbnRlcmFjdGl2ZTtcblxuICAgIC8vIGlmIHRoZSBkaXNwbGF5b2JqZWN0IGhhcyBhIGhpdEFyZWEsIHRoZW4gaXQgZG9lcyBub3QgbmVlZCB0byBoaXRUZXN0IGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaGl0QXJlYSlcbiAgICB7XG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gKiogRlJFRSBUSVAgKiohIElmIGFuIG9iamVjdCBpcyBub3QgaW50ZXJhY3R0aXZlIG9yIGhhcyBubyBidXR0b25zIGluIGl0IChzdWNoIGFzIGEgZ2FtZSBzY2VuZSEpIHNldCBpbnRlcmFjdGl2ZUNoaWxkcmVuIHRvIGZhbHNlIGZvciB0aGF0IGRpc3BsYXlPYmplY3QuXG4gICAgLy8gVGhpcyB3aWxsIGFsbG93IHBpeGkgdG8gY29tcGxldGx5IGlnbm9yZSBhbmQgYnlwYXNzIGNoZWNraW5nIHRoZSBkaXNwbGF5T2JqZWN0cyBjaGlsZHJlbi5cbiAgICBpZihkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlQ2hpbGRyZW4pXG4gICAgeyAgICAgICBcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICAgICAgXG4gICAgICAgIGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRpbWUgdG8gZ2V0IHJlY3Vyc2l2ZS4uIGlmIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gaWYgc29tdGhpbmcgaXMgaGl0Li5cbiAgICAgICAgICAgIGlmKCB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZShwb2ludCwgY2hpbGRyZW5baV0sIGZ1bmMsIGhpdFRlc3QsIGludGVyYWN0aXZlUGFyZW50KSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIHdlIG5vIGxvbmdlciBuZWVkIHRvIGhpdCB0ZXN0IGFueSBtb3JlIG9iamVjdHMgaW4gdGhpcyBjb250YWluZXIgYXMgd2Ugd2Ugbm93IGtub3cgdGhlIHBhcmVudCBoYXMgYmVlbiBoaXRcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBpcyBpbnRlcmFjdGl2ZSAsIHRoYXQgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhpdCB3YXMgYWN0dWFsbHkgaW50ZXJhY3RpdmUgYW5kIG5vdCBqdXN0IHRoZSBjaGlsZCBvZiBhbiBpbnRlcmFjdGl2ZSBvYmplY3QuIFxuICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55dGhpbmcgZWxzZS4gV2Ugc3RpbGwgbmVlZCB0byBydW4gdGhyb3VnaCBhbGwgb2JqZWN0cywgYnV0IHdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhbnkgaGl0IHRlc3RzLlxuICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuW2ldLmludGVyYWN0aXZlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGl0VGVzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIG5vIHBvaW50IHJ1bm5pbmcgdGhpcyBpZiB0aGUgaXRlbSBpcyBub3QgaW50ZXJhY3RpdmUgb3IgZG9lcyBub3QgaGF2ZSBhbiBpbnRlcmFjdGl2ZSBwYXJlbnQuXG4gICAgaWYoaW50ZXJhY3RpdmUpXG4gICAge1xuICAgICAgICAvLyBpZiB3ZSBhcmUgaGl0IHRlc3RpbmcgKGFzIGluIHdlIGhhdmUgbm8gaGl0IGFueSBvYmplY3RzIHlldClcbiAgICAgICAgLy8gV2UgYWxzbyBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGhpdCB0ZXN0aW5nIGlmIG9uY2Ugb2YgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuIGhhcyBhbHJlYWR5IGJlZW4gaGl0IVxuICAgICAgICBpZihoaXRUZXN0ICYmICFoaXQpXG4gICAgICAgIHsgIFxuICAgICAgICAgICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGhpcy5fdGVtcFBvaW50KTtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmhpdEFyZWEuY29udGFpbnMoIHRoaXMuX3RlbXBQb2ludC54LCB0aGlzLl90ZW1wUG9pbnQueSApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZihkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gZGlzcGxheU9iamVjdC5jb250YWluc1BvaW50KHBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmMoZGlzcGxheU9iamVjdCwgaGl0KTsgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGl0O1xuICBcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgZG93biBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcHJlc3NlZCBkb3duXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VEb3duLCB0cnVlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBkb3duIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlRG93biA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB2YXIgZSA9IHRoaXMubW91c2Uub3JpZ2luYWxFdmVudDtcbiAgICBcbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG5cbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nIF0gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRkb3duJyA6ICdtb3VzZWRvd24nLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcmVsZWFzZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYnV0dG9uIGJlaW5nIHJlbGVhc2VkXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VVcCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlVXAsIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIHVwIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZVVwID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuXG4gICAgdmFyIGlzUmlnaHRCdXR0b24gPSBlLmJ1dHRvbiA9PT0gMiB8fCBlLndoaWNoID09PSAzO1xuICAgIHZhciBpc0Rvd24gPSAgaXNSaWdodEJ1dHRvbiA/ICdfaXNSaWdodERvd24nIDogJ19pc0xlZnREb3duJztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodHVwJyA6ICdtb3VzZXVwJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0Y2xpY2snIDogJ2NsaWNrJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXBvdXRzaWRlJyA6ICdtb3VzZXVwb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgdGhlIG1vdXNlIG1vdmluZ1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5kaWRNb3ZlID0gdHJ1ZTtcblxuICAgIHRoaXMuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VNb3ZlLCB0cnVlICk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgIT09IHRoaXMuY3Vyc29yKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gdGhpcy5jdXJzb3I7XG4gICAgfVxuXG4gICAgLy9UT0RPIEJVRyBmb3IgcGFyZW50cyBpbmVyYWN0aXZlIG9iamVjdCAoYm9yZGVyIG9yZGVyIGlzc3VlKVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlbW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQoZGlzcGxheU9iamVjdCwgaGl0KTtcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgaXMgbW92ZWQgb3V0IG9mIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJlaW5nIG1vdmVkIG91dFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlT3V0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgLy8gVE9ETyBvcHRpbWl6ZSBieSBub3QgY2hlY2sgRVZFUlkgVElNRSEgbWF5YmUgaGFsZiBhcyBvZnRlbj8gLy9cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkgKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIGZhbHNlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBvdmVyL291dCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VPdmVyT3V0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGlmKCFkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3ZlcicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlzcGxheU9iamVjdC5idXR0b25Nb2RlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnNvciA9IGRpc3BsYXlPYmplY3QuZGVmYXVsdEN1cnNvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZihkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIHRoaXMuZXZlbnREYXRhKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIHN0YXJ0ZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggc3RhcnRpbmcgb24gdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaFN0YXJ0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuICAgICAgICAvL1RPRE8gUE9PTFxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0LCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hTdGFydCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaHN0YXJ0JywgdGhpcy5ldmVudERhdGEgKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBlbmRzIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIGVuZGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICAvL1RPRE8gdGhpcyBzaG91bGQgYmUgcGFzc2VkIGFsb25nLi4gbm8gc2V0XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoRW5kLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIGVuZCBvZiBhIHRvdWNoIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaEVuZCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZCcsIHRoaXMuZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndGFwJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZG91dHNpZGUnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIG1vdmVkIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBtb3ZpbmcgYWNyb3NzIHRoZSByZW5kZXJlciB2aWV3XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIGEgdG91Y2ggbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGhpdCA9IGhpdDtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaG1vdmUnLCB0aGlzLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hFdmVudCB7RXZlbnREYXRhfSBUaGUgdG91Y2ggZXZlbnQgd2UgbmVlZCB0byBwYWlyIHdpdGggYW4gaW50ZXJhY3Rpb25EYXRhIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZ2V0VG91Y2hEYXRhID0gZnVuY3Rpb24gKHRvdWNoRXZlbnQpXG57XG4gICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wb3AoKTtcblxuICAgIGlmKCF0b3VjaERhdGEpXG4gICAge1xuICAgICAgICB0b3VjaERhdGEgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG4gICAgfVxuXG4gICAgdG91Y2hEYXRhLmlkZW50aWZpZXIgPSB0b3VjaEV2ZW50LmlkZW50aWZpZXI7XG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRvdWNoRGF0YS5nbG9iYWwsIHRvdWNoRXZlbnQuY2xpZW50WCwgdG91Y2hFdmVudC5jbGllbnRZICk7XG5cbiAgICBpZihuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YS5nbG9iYWwueCA9IHRvdWNoRGF0YS5nbG9iYWwueCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC55ID0gdG91Y2hEYXRhLmdsb2JhbC55IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIH1cblxuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWCA9IHRvdWNoRGF0YS5nbG9iYWwueDtcbiAgICB0b3VjaEV2ZW50Lmdsb2JhbFkgPSB0b3VjaERhdGEuZ2xvYmFsLnk7XG5cbiAgICByZXR1cm4gdG91Y2hEYXRhO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IHRvIHRoZSBpbnRlcm5hbCBwb29sXG4gKlxuICogQHBhcmFtIHRvdWNoRGF0YSB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9IFRoZSB0b3VjaCBkYXRhIG9iamVjdCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmV0dXJuVG91Y2hEYXRhID0gZnVuY3Rpb24gKCB0b3VjaERhdGEgKVxue1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wdXNoKCB0b3VjaERhdGEgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGludGVyYWN0aW9uIG1hbmFnZXJcbiAqXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLm1vdXNlID0gbnVsbDtcblxuICAgIHRoaXMuZXZlbnREYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IG51bGw7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VVcCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Nb3VzZURvd24gPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUgPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlT3V0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBudWxsO1xuXG5cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IG51bGw7XG5cbiAgICB0aGlzLm9uVG91Y2hFbmQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaE1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZW1wUG9pbnQgPSBudWxsO1xufTtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBpbnRlcmFjdGlvbnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEludGVyYWN0aW9uRGF0YTogICAgcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKSxcbiAgICBJbnRlcmFjdGlvbk1hbmFnZXI6IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25NYW5hZ2VyJyksXG4gICAgaW50ZXJhY3RpdmVUYXJnZXQ6ICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbn07XG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGludGVyYWN0aXZlIG9iamVjdHNcbiAqIHVzZWQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5pbnRlcmFjdGlvbi5pbnRlcmFjdGl2ZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgaW50ZXJhY3RpdmVUYXJnZXQgPSB7XG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBidXR0b25Nb2RlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlQ2hpbGRyZW46IHRydWUsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBkZWZhdWx0Q3Vyc29yOiAncG9pbnRlcicsXG5cbiAgICAvLyBzb21lIGludGVybmFsIGNoZWNrcy4uXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX292ZXI6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdG91Y2hEb3duOiBmYWxzZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnRlcmFjdGl2ZVRhcmdldDtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi4vZXh0cmFzJyksXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxuXG5mdW5jdGlvbiBwYXJzZShyZXNvdXJjZSwgdGV4dHVyZSkge1xuICAgIHZhciBkYXRhID0ge307XG4gICAgdmFyIGluZm8gPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF07XG4gICAgdmFyIGNvbW1vbiA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NvbW1vbicpWzBdO1xuXG4gICAgZGF0YS5mb250ID0gaW5mby5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKTtcbiAgICBkYXRhLnNpemUgPSBwYXJzZUludChpbmZvLmdldEF0dHJpYnV0ZSgnc2l6ZScpLCAxMCk7XG4gICAgZGF0YS5saW5lSGVpZ2h0ID0gcGFyc2VJbnQoY29tbW9uLmdldEF0dHJpYnV0ZSgnbGluZUhlaWdodCcpLCAxMCk7XG4gICAgZGF0YS5jaGFycyA9IHt9O1xuXG4gICAgLy9wYXJzZSBsZXR0ZXJzXG4gICAgdmFyIGxldHRlcnMgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjaGFyJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxldHRlcnMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaWQnKSwgMTApO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlUmVjdCA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4JyksIDEwKSArIHRleHR1cmUuZnJhbWUueCxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd5JyksIDEwKSArIHRleHR1cmUuZnJhbWUueSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd3aWR0aCcpLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaGVpZ2h0JyksIDEwKVxuICAgICAgICApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbY2hhckNvZGVdID0ge1xuICAgICAgICAgICAgeE9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeU9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3lvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeEFkdmFuY2U6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4YWR2YW5jZScpLCAxMCksXG4gICAgICAgICAgICBrZXJuaW5nOiB7fSxcbiAgICAgICAgICAgIHRleHR1cmU6IG5ldyBjb3JlLlRleHR1cmUodGV4dHVyZS5iYXNlVGV4dHVyZSwgdGV4dHVyZVJlY3QpXG5cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvL3BhcnNlIGtlcm5pbmdzXG4gICAgdmFyIGtlcm5pbmdzID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgna2VybmluZycpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBrZXJuaW5ncy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBmaXJzdCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnZmlyc3QnKSwgMTApO1xuICAgICAgICB2YXIgc2Vjb25kID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdzZWNvbmQnKSwgMTApO1xuICAgICAgICB2YXIgYW1vdW50ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdhbW91bnQnKSwgMTApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbc2Vjb25kXS5rZXJuaW5nW2ZpcnN0XSA9IGFtb3VudDtcbiAgICB9XG5cbiAgICByZXNvdXJjZS5iaXRtYXBGb250ID0gZGF0YTtcblxuICAgIC8vIEknbSBsZWF2aW5nIHRoaXMgYXMgYSB0ZW1wb3JhcnkgZml4IHNvIHdlIGNhbiB0ZXN0IHRoZSBiaXRtYXAgZm9udHMgaW4gdjNcbiAgICAvLyBidXQgaXQncyB2ZXJ5IGxpa2VseSB0byBjaGFuZ2VcbiAgICBleHRyYXMuQml0bWFwVGV4dC5mb250c1tkYXRhLmZvbnRdID0gZGF0YTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSBvciBub3QgeG1sIGRhdGFcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhIHx8ICFyZXNvdXJjZS5pc1htbClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNraXAgaWYgbm90IGJpdG1hcCBmb250IGRhdGEsIHVzaW5nIHNvbWUgc2lsbHkgZHVjay10eXBpbmdcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGFnZScpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdLmdldEF0dHJpYnV0ZSgnZmFjZScpID09PSBudWxsXG4gICAgICAgICAgICApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeG1sVXJsID0gcGF0aC5kaXJuYW1lKHJlc291cmNlLnVybCk7XG5cbiAgICAgICAgaWYgKHhtbFVybCA9PT0gJy4nKSB7XG4gICAgICAgICAgICB4bWxVcmwgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJhc2VVcmwgJiYgeG1sVXJsKSB7XG4gICAgICAgICAgICAvLyBpZiBiYXNldXJsIGhhcyBhIHRyYWlsaW5nIHNsYXNoIHRoZW4gYWRkIG9uZSB0byB4bWxVcmwgc28gdGhlIHJlcGxhY2Ugd29ya3MgYmVsb3dcbiAgICAgICAgICAgIGlmICh0aGlzLmJhc2VVcmwuY2hhckF0KHRoaXMuYmFzZVVybC5sZW5ndGggLSAxKSA9PT0gJy8nKSB7XG4gICAgICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcmVtb3ZlIGJhc2VVcmwgZnJvbSB4bWxVcmxcbiAgICAgICAgICAgIHhtbFVybCA9IHhtbFVybC5yZXBsYWNlKHRoaXMuYmFzZVVybCwgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4geG1sVXJsIG5vdywgaXQgbmVlZHMgYSB0cmFpbGluZyBzbGFzaC4gRW5zdXJlIHRoYXQgaXQgZG9lcyBpZiB0aGUgc3RyaW5nIGlzbid0IGVtcHR5LlxuICAgICAgICBpZiAoeG1sVXJsICYmIHhtbFVybC5jaGFyQXQoeG1sVXJsLmxlbmd0aCAtIDEpICE9PSAnLycpIHtcbiAgICAgICAgICAgIHhtbFVybCArPSAnLyc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRleHR1cmVVcmwgPSB4bWxVcmwgKyByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJylbMF0uZ2V0QXR0cmlidXRlKCdmaWxlJyk7XG4gICAgICAgIGlmIChjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSkge1xuICAgICAgICAgICAgLy9yZXVzZSBleGlzdGluZyB0ZXh0dXJlXG4gICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbdGV4dHVyZVVybF0pO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGxvYWRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiByZXNvdXJjZS5tZXRhZGF0YS5pbWFnZU1ldGFkYXRhXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gbG9hZCB0aGUgdGV4dHVyZSBmb3IgdGhlIGZvbnRcbiAgICAgICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgdGV4dHVyZVVybCwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgcmVzLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBsb2FkZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5sb2FkZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIExvYWRlcjogICAgICAgICAgICAgcmVxdWlyZSgnLi9sb2FkZXInKSxcblxuICAgIC8vIHBhcnNlcnNcbiAgICBiaXRtYXBGb250UGFyc2VyOiAgIHJlcXVpcmUoJy4vYml0bWFwRm9udFBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyOiAgcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIHRleHR1cmVQYXJzZXI6ICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlUGFyc2VyJyksXG4gICAgUmVzb3VyY2U6ICAgICAgICAgICByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZVxufTtcbiIsInZhciBSZXNvdXJjZUxvYWRlciA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLFxuICAgIHRleHR1cmVQYXJzZXIgPSByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBzcHJpdGVzaGVldFBhcnNlciA9IHJlcXVpcmUoJy4vc3ByaXRlc2hlZXRQYXJzZXInKSxcbiAgICBiaXRtYXBGb250UGFyc2VyID0gcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyk7XG5cbi8qKlxuICpcbiAqIFRoZSBuZXcgbG9hZGVyLCBleHRlbmRzIFJlc291cmNlIExvYWRlciBieSBDaGFkIEVuZ2xlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9lbmdsZXJjai9yZXNvdXJjZS1sb2FkZXJcbiAqXG4gKiBgYGBqc1xuICogdmFyIGxvYWRlciA9IFBJWEkubG9hZGVyOyAvLyBwaXhpIGV4cG9zZXMgYSBwcmVtYWRlIGluc3RhbmNlIGZvciB5b3UgdG8gdXNlLlxuICogLy9vclxuICogdmFyIGxvYWRlciA9IG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyKCk7IC8vIHlvdSBjYW4gYWxzbyBjcmVhdGUgeW91ciBvd24gaWYgeW91IHdhbnRcbiAqXG4gKiBsb2FkZXIuYWRkKCdidW5ueScsXCJkYXRhL2J1bm55LnBuZ1wiKTtcbiAqXG4gKiBsb2FkZXIub25jZSgnY29tcGxldGUnLG9uQXNzZXRzTG9hZGVkKTtcbiAqXG4gKiBsb2FkZXIubG9hZCgpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlJlc291cmNlTG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5sb2FkZXJzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KVxue1xuICAgIFJlc291cmNlTG9hZGVyLmNhbGwodGhpcywgYmFzZVVybCwgY29uY3VycmVuY3kpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMudXNlKExvYWRlci5fcGl4aU1pZGRsZXdhcmVbaV0oKSk7XG4gICAgfVxufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZXNvdXJjZUxvYWRlci5wcm90b3R5cGUpO1xuTG9hZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbkxvYWRlci5fcGl4aU1pZGRsZXdhcmUgPSBbXG4gICAgLy8gcGFyc2UgYW55IGJsb2IgaW50byBtb3JlIHVzYWJsZSBvYmplY3RzIChlLmcuIEltYWdlKVxuICAgIFJlc291cmNlTG9hZGVyLm1pZGRsZXdhcmUucGFyc2luZy5ibG9iLFxuICAgIC8vIHBhcnNlIGFueSBJbWFnZSBvYmplY3RzIGludG8gdGV4dHVyZXNcbiAgICB0ZXh0dXJlUGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBzcHJpdGVzaGVldFBhcnNlcixcbiAgICAvLyBwYXJzZSBhbnkgc3ByaXRlc2hlZXQgZGF0YSBpbnRvIG11bHRpcGxlIHRleHR1cmVzXG4gICAgYml0bWFwRm9udFBhcnNlclxuXTtcblxuTG9hZGVyLmFkZFBpeGlNaWRkbGV3YXJlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgTG9hZGVyLl9waXhpTWlkZGxld2FyZS5wdXNoKGZuKTtcbn07XG5cbi8vIEFkZCBjdXN0b20gZXh0ZW50aW9uc1xudmFyIFJlc291cmNlID0gUmVzb3VyY2VMb2FkZXIuUmVzb3VyY2U7XG5cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUoJ2ZudCcsIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIHBhdGggPSByZXF1aXJlKCdwYXRoJyksXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBza2lwIGlmIG5vIGRhdGEsIGl0cyBub3QganNvbiwgb3IgaXQgaXNuJ3Qgc3ByaXRlc2hlZXQgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzSnNvbiB8fCAhcmVzb3VyY2UuZGF0YS5mcmFtZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzb3VyY2UuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcm91dGUgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJykpO1xuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwoIHJlc291cmNlLnVybCApO1xuXG4gICAgICAgIC8vIGxvYWQgdGhlIGltYWdlIGZvciB0aGlzIHNoZWV0XG4gICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgcm91dGUgKyAnLycgKyByZXNvdXJjZS5kYXRhLm1ldGEuaW1hZ2UsIGxvYWRPcHRpb25zLCBmdW5jdGlvbiAocmVzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlcyA9IHt9O1xuXG4gICAgICAgICAgICB2YXIgZnJhbWVzID0gcmVzb3VyY2UuZGF0YS5mcmFtZXM7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gZnJhbWVzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gZnJhbWVzW2ldLmZyYW1lO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlY3QpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0cmltID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QuaCwgcmVjdC53KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QudywgcmVjdC5oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vICBDaGVjayB0byBzZWUgaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0udHJpbW1lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpbSA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS54IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS55IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS53IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS5oIC8gcmVzb2x1dGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBmbGlwIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IVxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gc2l6ZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggPSBzaXplLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0ID0gdGVtcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNpemUueCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLnkgLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLmhlaWdodCAvPSByZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzW2ldID0gbmV3IGNvcmUuVGV4dHVyZShyZXMudGV4dHVyZS5iYXNlVGV4dHVyZSwgc2l6ZSwgc2l6ZS5jbG9uZSgpLCB0cmltLCBmcmFtZXNbaV0ucm90YXRlZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0cyBhbHNvIGFkZCB0aGUgZnJhbWUgdG8gcGl4aSdzIGdsb2JhbCBjYWNoZSBmb3IgZnJvbUZyYW1lIGFuZCBmcm9tSW1hZ2UgZnVuY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW2ldID0gcmVzb3VyY2UudGV4dHVyZXNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH0pO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gY3JlYXRlIGEgbmV3IHRleHR1cmUgaWYgdGhlIGRhdGEgaXMgYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgIGlmIChyZXNvdXJjZS5kYXRhICYmIHJlc291cmNlLmlzSW1hZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBiYXNlVGV4dHVyZSA9IG5ldyBjb3JlLkJhc2VUZXh0dXJlKHJlc291cmNlLmRhdGEsIG51bGwsIGNvcmUudXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKHJlc291cmNlLnVybCkpO1xuICAgICAgICAgICAgYmFzZVRleHR1cmUuaW1hZ2VVcmwgPSByZXNvdXJjZS51cmw7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlID0gbmV3IGNvcmUuVGV4dHVyZShiYXNlVGV4dHVyZSk7XG4gICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdWNudGlvbnNcbiAgICAgICAgICAgIGNvcmUudXRpbHMuQmFzZVRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gYmFzZVRleHR1cmU7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gcmVzb3VyY2UudGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgdGVtcFBvbHlnb24gPSBuZXcgY29yZS5Qb2x5Z29uKCk7XG5cbi8qKlxuICogQmFzZSBtZXNoIGNsYXNzXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0byB1c2VcbiAqIEBwYXJhbSBbdmVydGljZXNdIHtGbG9hdDMyQXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHZlcnRpY2VzXG4gKiBAcGFyYW0gW3V2c10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdXZzXG4gKiBAcGFyYW0gW2luZGljZXNdIHtVaW50MTZBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgaW5kaWNlc1xuICogQHBhcmFtIFtkcmF3TW9kZV0ge251bWJlcn0gdGhlIGRyYXdNb2RlLCBjYW4gYmUgYW55IG9mIHRoZSBNZXNoLkRSQVdfTU9ERVMgY29uc3RzXG4gKi9cbmZ1bmN0aW9uIE1lc2godGV4dHVyZSwgdmVydGljZXMsIHV2cywgaW5kaWNlcywgZHJhd01vZGUpXG57XG4gICAgY29yZS5Db250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIG9mIHRoZSBNZXNoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBVdnMgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IHV2cyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxLCAwLFxuICAgICAgICAxLCAxLFxuICAgICAgICAwLCAxXSk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB2ZXJ0aWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSB2ZXJ0aWNlcyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxMDAsIDAsXG4gICAgICAgIDEwMCwgMTAwLFxuICAgICAgICAwLCAxMDBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgLy8gIFRPRE8gYXV0byBnZW5lcmF0ZSB0aGlzIGJhc2VkIG9uIGRyYXcgbW9kZSFcbiAgICB0aGlzLmluZGljZXMgPSBpbmRpY2VzIHx8IG5ldyBVaW50MTZBcnJheShbMCwgMSwgMywgMl0pO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgTWVzaCBpcyBkaXJ0eSBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzcHJpdGUuIFNldCB0byBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlbW92ZSBhbnkgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUcmlhbmdsZXMgaW4gY2FudmFzIG1vZGUgYXJlIGF1dG9tYXRpY2FsbHkgYW50aWFsaWFzZWQsIHVzZSB0aGlzIHZhbHVlIHRvIGZvcmNlIHRyaWFuZ2xlcyB0byBvdmVybGFwIGEgYml0IHdpdGggZWFjaCBvdGhlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdheSB0aGUgTWVzaCBzaG91bGQgYmUgZHJhd24sIGNhbiBiZSBhbnkgb2YgdGhlIHtAbGluayBQSVhJLm1lc2guTWVzaC5EUkFXX01PREVTfSBjb25zdHNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAc2VlIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmRyYXdNb2RlID0gZHJhd01vZGUgfHwgTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0g7XG5cbiAgICAvLyBydW4gdGV4dHVyZSBzZXR0ZXI7XG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcblxuICAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgbWVzaCBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1lc2gucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuTWVzaC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNZXNoLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLm1lc2guTWVzaCNcbiAgICAgKi9cbiAgICB0ZXh0dXJlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl90ZXh0dXJlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBXZWJHTCByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMubWVzaCk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5tZXNoLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEsIHRyYW5zZm9ybS5iLCB0cmFuc2Zvcm0uYywgdHJhbnNmb3JtLmQsIHRyYW5zZm9ybS50eCB8IDAsIHRyYW5zZm9ybS50eSB8IDApO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4LCB0cmFuc2Zvcm0udHkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc1RyaWFuZ2xlTWVzaChjb250ZXh0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzKGNvbnRleHQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiBUcmlhbmdsZSBNZXNoIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aCAvIDI7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGggLSAyOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4LCAoaW5kZXggKyAyKSwgKGluZGV4ICsgNCkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiB0cmlhbmdsZSBtb2RlIHVzaW5nIGNhbnZhc1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc1RyaWFuZ2xlcyA9IGZ1bmN0aW9uIChjb250ZXh0KVxue1xuICAgIC8vIGRyYXcgdHJpYW5nbGVzISFcbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcblxuICAgIHZhciBsZW5ndGggPSBpbmRpY2VzLmxlbmd0aDtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAzKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4MCA9IGluZGljZXNbaV0gKiAyLCBpbmRleDEgPSBpbmRpY2VzW2kgKyAxXSAqIDIsIGluZGV4MiA9IGluZGljZXNbaSArIDJdICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3Mgb25lIG9mIHRoZSB0cmlhbmdsZXMgdGhhdCBmb3JtIHRoaXMgTWVzaFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHBhcmFtIHZlcnRpY2VzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgTWVzaFxuICogQHBhcmFtIHV2cyB7RmxvYXQzMkFycmF5fSBhIHJlZmVyZW5jZSB0byB0aGUgdXZzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gaW5kZXgwIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgxIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgc2Vjb25kIHZlcnRleFxuICogQHBhcmFtIGluZGV4MiB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIHRoaXJkIHZlcnRleFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZSA9IGZ1bmN0aW9uIChjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleDAsIGluZGV4MSwgaW5kZXgyKVxue1xuICAgIHZhciB0ZXh0dXJlU291cmNlID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2U7XG4gICAgdmFyIHRleHR1cmVXaWR0aCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdmFyIHRleHR1cmVIZWlnaHQgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHZhciB4MCA9IHZlcnRpY2VzW2luZGV4MF0sIHgxID0gdmVydGljZXNbaW5kZXgxXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleDJdO1xuICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4MCArIDFdLCB5MSA9IHZlcnRpY2VzW2luZGV4MSArIDFdLCB5MiA9IHZlcnRpY2VzW2luZGV4MiArIDFdO1xuXG4gICAgdmFyIHUwID0gdXZzW2luZGV4MF0gKiB0ZXh0dXJlV2lkdGgsIHUxID0gdXZzW2luZGV4MV0gKiB0ZXh0dXJlV2lkdGgsIHUyID0gdXZzW2luZGV4Ml0gKiB0ZXh0dXJlV2lkdGg7XG4gICAgdmFyIHYwID0gdXZzW2luZGV4MCArIDFdICogdGV4dHVyZUhlaWdodCwgdjEgPSB1dnNbaW5kZXgxICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MiA9IHV2c1tpbmRleDIgKyAxXSAqIHRleHR1cmVIZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5jYW52YXNQYWRkaW5nID4gMClcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nWCA9IHRoaXMuY2FudmFzUGFkZGluZyAvIHRoaXMud29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIHBhZGRpbmdZID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgY2VudGVyWCA9ICh4MCArIHgxICsgeDIpIC8gMztcbiAgICAgICAgdmFyIGNlbnRlclkgPSAoeTAgKyB5MSArIHkyKSAvIDM7XG5cbiAgICAgICAgdmFyIG5vcm1YID0geDAgLSBjZW50ZXJYO1xuICAgICAgICB2YXIgbm9ybVkgPSB5MCAtIGNlbnRlclk7XG5cbiAgICAgICAgdmFyIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MCA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MCA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIC8vXG5cbiAgICAgICAgbm9ybVggPSB4MSAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTEgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MSA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MSA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIG5vcm1YID0geDIgLSBjZW50ZXJYO1xuICAgICAgICBub3JtWSA9IHkyIC0gY2VudGVyWTtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDIgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTIgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LnNhdmUoKTtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG5cbiAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcblxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICBjb250ZXh0LmNsaXAoKTtcblxuICAgIC8vIENvbXB1dGUgbWF0cml4IHRyYW5zZm9ybVxuICAgIHZhciBkZWx0YSA9ICAodTAgKiB2MSkgICAgICArICh2MCAqIHUyKSAgICAgICsgKHUxICogdjIpICAgICAgLSAodjEgKiB1MikgICAgICAtICh2MCAqIHUxKSAgICAgIC0gKHUwICogdjIpO1xuICAgIHZhciBkZWx0YUEgPSAoeDAgKiB2MSkgICAgICArICh2MCAqIHgyKSAgICAgICsgKHgxICogdjIpICAgICAgLSAodjEgKiB4MikgICAgICAtICh2MCAqIHgxKSAgICAgIC0gKHgwICogdjIpO1xuICAgIHZhciBkZWx0YUIgPSAodTAgKiB4MSkgICAgICArICh4MCAqIHUyKSAgICAgICsgKHUxICogeDIpICAgICAgLSAoeDEgKiB1MikgICAgICAtICh4MCAqIHUxKSAgICAgIC0gKHUwICogeDIpO1xuICAgIHZhciBkZWx0YUMgPSAodTAgKiB2MSAqIHgyKSArICh2MCAqIHgxICogdTIpICsgKHgwICogdTEgKiB2MikgLSAoeDAgKiB2MSAqIHUyKSAtICh2MCAqIHUxICogeDIpIC0gKHUwICogeDEgKiB2Mik7XG4gICAgdmFyIGRlbHRhRCA9ICh5MCAqIHYxKSAgICAgICsgKHYwICogeTIpICAgICAgKyAoeTEgKiB2MikgICAgICAtICh2MSAqIHkyKSAgICAgIC0gKHYwICogeTEpICAgICAgLSAoeTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhRSA9ICh1MCAqIHkxKSAgICAgICsgKHkwICogdTIpICAgICAgKyAodTEgKiB5MikgICAgICAtICh5MSAqIHUyKSAgICAgIC0gKHkwICogdTEpICAgICAgLSAodTAgKiB5Mik7XG4gICAgdmFyIGRlbHRhRiA9ICh1MCAqIHYxICogeTIpICsgKHYwICogeTEgKiB1MikgKyAoeTAgKiB1MSAqIHYyKSAtICh5MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB5MikgLSAodTAgKiB5MSAqIHYyKTtcblxuICAgIGNvbnRleHQudHJhbnNmb3JtKGRlbHRhQSAvIGRlbHRhLCBkZWx0YUQgLyBkZWx0YSxcbiAgICAgICAgZGVsdGFCIC8gZGVsdGEsIGRlbHRhRSAvIGRlbHRhLFxuICAgICAgICBkZWx0YUMgLyBkZWx0YSwgZGVsdGFGIC8gZGVsdGEpO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UodGV4dHVyZVNvdXJjZSwgMCwgMCk7XG4gICAgY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5cblxuLyoqXG4gKiBSZW5kZXJzIGEgZmxhdCBNZXNoXG4gKlxuICogQHBhcmFtIE1lc2gge1BJWEkubWVzaC5NZXNofSBUaGUgTWVzaCB0byByZW5kZXJcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLnJlbmRlck1lc2hGbGF0ID0gZnVuY3Rpb24gKE1lc2gpXG57XG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgdmFyIHZlcnRpY2VzID0gTWVzaC52ZXJ0aWNlcztcblxuICAgIHZhciBsZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGgvMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgIGZvciAodmFyIGk9MTsgaSA8IGxlbmd0aC0yOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpKjI7XG5cbiAgICAgICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXhdLCAgIHgxID0gdmVydGljZXNbaW5kZXgrMl0sIHgyID0gdmVydGljZXNbaW5kZXgrNF07XG4gICAgICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4KzFdLCB5MSA9IHZlcnRpY2VzW2luZGV4KzNdLCB5MiA9IHZlcnRpY2VzW2luZGV4KzVdO1xuXG4gICAgICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgyLCB5Mik7XG4gICAgfVxuXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnI0ZGMDAwMCc7XG4gICAgY29udGV4dC5maWxsKCk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbn07XG5cbi8qKlxuICogV2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLCB0aGlzIGV2ZW50IHdpbGwgZmlyZSB0byB1cGRhdGUgdGhlIHNjYWxlIGFuZCBmcmFtZVxuICpcbiAqIEBwYXJhbSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51cGRhdGVGcmFtZSA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgbWVzaCBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAoIXRoaXMuX2N1cnJlbnRCb3VuZHMpIHtcbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gbWF0cml4IHx8IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICAgICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSB2ZXJ0aWNlcy5sZW5ndGg7IGkgPCBuOyBpICs9IDIpIHtcbiAgICAgICAgICAgIHZhciByYXdYID0gdmVydGljZXNbaV0sIHJhd1kgPSB2ZXJ0aWNlc1tpICsgMV07XG4gICAgICAgICAgICB2YXIgeCA9IChhICogcmF3WCkgKyAoYyAqIHJhd1kpICsgdHg7XG4gICAgICAgICAgICB2YXIgeSA9IChkICogcmF3WSkgKyAoYiAqIHJhd1gpICsgdHk7XG5cbiAgICAgICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG5cbiAgICAgICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuICAgICAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWluWCA9PT0gLUluZmluaXR5IHx8IG1heFkgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBtZXNoLiBXb3JrcyBvbmx5IGZvciBUUklBTkdMRV9NRVNIXG4gKlxuICogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuICovXG5NZXNoLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50ICkge1xuICAgIGlmICghdGhpcy5nZXRCb3VuZHMoKS5jb250YWlucyhwb2ludC54LCBwb2ludC55KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHBvaW50cyA9IHRlbXBQb2x5Z29uLnBvaW50cztcbiAgICB2YXIgaSwgbGVuO1xuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVMpIHtcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgICAgIGxlbiA9IHRoaXMuaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgIC8vVE9ETzogaW5saW5lIHRoaXMuXG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTMpIHtcbiAgICAgICAgICAgIHZhciBpbmQwID0gaW5kaWNlc1tpXSoyLCBpbmQxID0gaW5kaWNlc1tpKzFdKjIsIGluZDIgPSBpbmRpY2VzW2krMl0qMjtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2luZDBdO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaW5kMCsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2luZDFdO1xuICAgICAgICAgICAgcG9pbnRzWzNdID0gdmVydGljZXNbaW5kMSsxXTtcbiAgICAgICAgICAgIHBvaW50c1s0XSA9IHZlcnRpY2VzW2luZDJdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaW5kMisxXTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBsZW4gPSB2ZXJ0aWNlcy5sZW5ndGg7XG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTYpIHtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2ldO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaSsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2krMl07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpKzNdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaSs0XTtcbiAgICAgICAgICAgIHBvaW50c1s1XSA9IHZlcnRpY2VzW2krNV07XG4gICAgICAgICAgICBpZiAodGVtcFBvbHlnb24uY29udGFpbnModGVtcFBvaW50LngsIHRlbXBQb2ludC55KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGlmZmVyZW50IGRyYXdpbmcgYnVmZmVyIG1vZGVzIHN1cHBvcnRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX01FU0hcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFU1xuICovXG5NZXNoLkRSQVdfTU9ERVMgPSB7XG4gICAgVFJJQU5HTEVfTUVTSDogMCxcbiAgICBUUklBTkdMRVM6IDFcbn07XG4iLCJ2YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xuXG4vKipcbiAqIFRoZSBQbGFuZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciBQbGFuZSA9IG5ldyBQSVhJLlBsYW5lKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIFBsYW5lLlxuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWCAtIFRoZSBudW1iZXIgb3ggeCBzZWdtZW50c1xuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWSAtIFRoZSBudW1iZXIgb2YgeSBzZWdtZW50c1xuICpcbiAqL1xuZnVuY3Rpb24gUGxhbmUodGV4dHVyZSwgc2VnbWVudHNYLCBzZWdtZW50c1kpXG57XG4gICAgTWVzaC5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tlciBmb3IgaWYgdGhlIFBsYW5lIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuc2VnbWVudHNYID0gIHNlZ21lbnRzWCB8fCAxMDtcbiAgICB0aGlzLnNlZ21lbnRzWSA9IHNlZ21lbnRzWSB8fCAxMDtcblxuICAgIHRoaXMuZHJhd01vZGUgPSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVTO1xuICAgIHRoaXMucmVmcmVzaCgpO1xuXG59XG5cblxuLy8gY29uc3RydWN0b3JcblBsYW5lLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIE1lc2gucHJvdG90eXBlICk7XG5QbGFuZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQbGFuZTtcbm1vZHVsZS5leHBvcnRzID0gUGxhbmU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5QbGFuZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgdG90YWwgPSB0aGlzLnNlZ21lbnRzWCAqIHRoaXMuc2VnbWVudHNZO1xuICAgIHZhciB2ZXJ0cyA9IFtdO1xuICAgIHZhciBjb2xvcnMgPSBbXTtcbiAgICB2YXIgdXZzID0gW107XG4gICAgdmFyIGluZGljZXMgPSBbXTtcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMudGV4dHVyZTtcblxuICAvLyAgdGV4dHVyZS53aWR0aCA9IDgwMCB0ZXh0dXJlLndpZHRoIHx8IDgwMDtcbiAvLyAgIHRleHR1cmUuaGVpZ2h0ID0gODAwLy90ZXh0dXJlLmhlaWdodCB8fCA4MDA7XG5cbiAgICB2YXIgc2VnbWVudHNYU3ViID0gdGhpcy5zZWdtZW50c1ggLSAxO1xuICAgIHZhciBzZWdtZW50c1lTdWIgPSB0aGlzLnNlZ21lbnRzWSAtIDE7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgdmFyIHNpemVYID0gdGV4dHVyZS53aWR0aCAvIHNlZ21lbnRzWFN1YjtcbiAgICB2YXIgc2l6ZVkgPSB0ZXh0dXJlLmhlaWdodCAvIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbDsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHggPSAoaSAlIHRoaXMuc2VnbWVudHNYKTtcbiAgICAgICAgdmFyIHkgPSAoIChpIC8gdGhpcy5zZWdtZW50c1ggKSB8IDAgKTtcblxuXG4gICAgICAgIHZlcnRzLnB1c2goKHggKiBzaXplWCksXG4gICAgICAgICAgICAgICAgICAgKHkgKiBzaXplWSkpO1xuXG4gICAgICAgIC8vIHRoaXMgd29ya3MgZm9yIHJlY3Rhbmd1bGFyIHRleHR1cmVzLiBcbiAgICAgICAgdXZzLnB1c2godGV4dHVyZS5fdXZzLngwICsgKHRleHR1cmUuX3V2cy54MSAtIHRleHR1cmUuX3V2cy54MCkgKiAoeCAvICh0aGlzLnNlZ21lbnRzWC0xKSksIHRleHR1cmUuX3V2cy55MCArICh0ZXh0dXJlLl91dnMueTMtdGV4dHVyZS5fdXZzLnkwKSAqICh5LyAodGhpcy5zZWdtZW50c1ktMSkpKTtcbiAgICAgIH1cblxuICAgIC8vICBjb25zXG5cbiAgICB2YXIgdG90YWxTdWIgPSBzZWdtZW50c1hTdWIgKiBzZWdtZW50c1lTdWI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTdWI7IGkrKykge1xuXG4gICAgICAgIHZhciB4cG9zID0gaSAlIHNlZ21lbnRzWFN1YjtcbiAgICAgICAgdmFyIHlwb3MgPSAoaSAvIHNlZ21lbnRzWFN1YiApIHwgMDtcblxuXG4gICAgICAgIHZhciAgdmFsdWUgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWUyID0gKHlwb3MgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zICsgMTtcbiAgICAgICAgdmFyICB2YWx1ZTMgPSAoKHlwb3MrMSkgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zO1xuICAgICAgICB2YXIgIHZhbHVlNCA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuXG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZSwgdmFsdWUyLCB2YWx1ZTMpO1xuICAgICAgICBpbmRpY2VzLnB1c2godmFsdWUyLCB2YWx1ZTQsIHZhbHVlMyk7XG4gICAgfVxuXG5cbiAgICAvL2NvbnNvbGUubG9nKGluZGljZXMpXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkodmVydHMpO1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheSh1dnMpO1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShjb2xvcnMpO1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShpbmRpY2VzKTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGV4dHVyZSBVVnMgd2hlbiBuZXcgdGV4dHVyZSBpcyBzZXRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QbGFuZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFBsYW5lIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBUaGUgcm9wZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciByb3BlID0gbmV3IFBJWEkuUm9wZShQSVhJLlRleHR1cmUuZnJvbUltYWdlKFwic25ha2UucG5nXCIpLCBwb2ludHMpO1xuICogIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5tZXNoLk1lc2hcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB7UElYSS5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIHRleHR1cmUgdG8gdXNlIG9uIHRoZSByb3BlLlxuICogQHBhcmFtIHtQSVhJLlBvaW50W119IHBvaW50cyAtIEFuIGFycmF5IG9mIHtAbGluayBQSVhJLlBvaW50fSBvYmplY3RzIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gKlxuICovXG5mdW5jdGlvbiBSb3BlKHRleHR1cmUsIHBvaW50cylcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnRbXX0gQW4gYXJyYXkgb2YgcG9pbnRzIHRoYXQgZGV0ZXJtaW5lIHRoZSByb3BlXG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgb2YgdmVydGljZXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhpcyByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBUaGUgV2ViR0wgVXZzIG9mIHRoZSByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogNCk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgY29sb3IgY29tcG9uZW50c1xuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgcm9wZSBpcyByZWFkeSB0byBiZSBkcmF3bi4gTmVlZGVkIGJlY2F1c2UgTWVzaCBjdG9yIGNhblxuICAgICAqIGNhbGwgX29uVGV4dHVyZVVwZGF0ZWQgd2hpY2ggY291bGQgY2FsbCByZWZyZXNoIHRvbyBlYXJseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgIHRoaXMucmVmcmVzaCgpO1xufVxuXG5cbi8vIGNvbnN0cnVjdG9yXG5Sb3BlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTWVzaC5wcm90b3R5cGUpO1xuUm9wZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3BlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3BlO1xuXG4vKipcbiAqIFJlZnJlc2hlc1xuICpcbiAqL1xuUm9wZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgLy8gaWYgdG9vIGxpdHRsZSBwb2ludHMsIG9yIHRleHR1cmUgaGFzbid0IGdvdCBVVnMgc2V0IHlldCBqdXN0IG1vdmUgb24uXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxIHx8ICF0aGlzLl90ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuXG4gICAgdmFyIHRleHR1cmVVdnMgPSB0aGlzLl90ZXh0dXJlLl91dnM7XG4gICAgdmFyIG9mZnNldCA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDAsIHRleHR1cmVVdnMueTApO1xuICAgIHZhciBmYWN0b3IgPSBuZXcgY29yZS5Qb2ludCh0ZXh0dXJlVXZzLngyIC0gdGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MiAtIHRleHR1cmVVdnMueTApO1xuXG4gICAgdXZzWzBdID0gMCArIG9mZnNldC54O1xuICAgIHV2c1sxXSA9IDAgKyBvZmZzZXQueTtcbiAgICB1dnNbMl0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICBjb2xvcnNbMF0gPSAxO1xuICAgIGNvbG9yc1sxXSA9IDE7XG5cbiAgICBpbmRpY2VzWzBdID0gMDtcbiAgICBpbmRpY2VzWzFdID0gMTtcblxuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgYW1vdW50O1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG4gICAgICAgIC8vIHRpbWUgdG8gZG8gc29tZSBzbWFydCBkcmF3aW5nIVxuICAgICAgICBhbW91bnQgPSBpIC8gKHRvdGFsLTEpO1xuXG4gICAgICAgIHV2c1tpbmRleF0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrMV0gPSAwICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgdXZzW2luZGV4KzJdID0gYW1vdW50ICogZmFjdG9yLnggKyBvZmZzZXQueDtcbiAgICAgICAgdXZzW2luZGV4KzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgY29sb3JzW2luZGV4XSA9IDE7XG4gICAgICAgIGNvbG9yc1tpbmRleCsxXSA9IDE7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgaW5kaWNlc1tpbmRleF0gPSBpbmRleDtcbiAgICAgICAgaW5kaWNlc1tpbmRleCArIDFdID0gaW5kZXggKyAxO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIE1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUuY2FsbCh0aGlzKTtcblxuICAgIC8vIHdhaXQgZm9yIHRoZSBSb3BlIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Sb3BlLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbGFzdFBvaW50ID0gcG9pbnRzWzBdO1xuICAgIHZhciBuZXh0UG9pbnQ7XG4gICAgdmFyIHBlcnBYID0gMDtcbiAgICB2YXIgcGVycFkgPSAwO1xuXG4gICAgLy8gdGhpcy5jb3VudCAtPSAwLjI7XG5cbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgcmF0aW8sIHBlcnBMZW5ndGgsIG51bTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWw7IGkrKylcbiAgICB7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBpbmRleCA9IGkgKiA0O1xuXG4gICAgICAgIGlmIChpIDwgcG9pbnRzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0UG9pbnQgPSBwb2ludHNbaSsxXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcGVycFkgPSAtKG5leHRQb2ludC54IC0gbGFzdFBvaW50LngpO1xuICAgICAgICBwZXJwWCA9IG5leHRQb2ludC55IC0gbGFzdFBvaW50Lnk7XG5cbiAgICAgICAgcmF0aW8gPSAoMSAtIChpIC8gKHRvdGFsLTEpKSkgKiAxMDtcblxuICAgICAgICBpZiAocmF0aW8gPiAxKVxuICAgICAgICB7XG4gICAgICAgICAgICByYXRpbyA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwTGVuZ3RoID0gTWF0aC5zcXJ0KHBlcnBYICogcGVycFggKyBwZXJwWSAqIHBlcnBZKTtcbiAgICAgICAgbnVtID0gdGhpcy5fdGV4dHVyZS5oZWlnaHQgLyAyOyAvLygyMCArIE1hdGguYWJzKE1hdGguc2luKChpICsgdGhpcy5jb3VudCkgKiAwLjMpICogNTApICkqIHJhdGlvO1xuICAgICAgICBwZXJwWCAvPSBwZXJwTGVuZ3RoO1xuICAgICAgICBwZXJwWSAvPSBwZXJwTGVuZ3RoO1xuXG4gICAgICAgIHBlcnBYICo9IG51bTtcbiAgICAgICAgcGVycFkgKj0gbnVtO1xuXG4gICAgICAgIHZlcnRpY2VzW2luZGV4XSA9IHBvaW50LnggKyBwZXJwWDtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMV0gPSBwb2ludC55ICsgcGVycFk7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzJdID0gcG9pbnQueCAtIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCszXSA9IHBvaW50LnkgLSBwZXJwWTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBwb2ludDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkubWVzaFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNZXNoOiAgICAgICAgICAgcmVxdWlyZSgnLi9NZXNoJyksXG4gICAgUGxhbmU6ICAgICAgICAgICByZXF1aXJlKCcuL1BsYW5lJyksXG4gICAgUm9wZTogICAgICAgICAgIHJlcXVpcmUoJy4vUm9wZScpLFxuICAgIE1lc2hSZW5kZXJlcjogICByZXF1aXJlKCcuL3dlYmdsL01lc2hSZW5kZXJlcicpLFxuICAgIE1lc2hTaGFkZXI6ICAgICByZXF1aXJlKCcuL3dlYmdsL01lc2hTaGFkZXInKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIE1lc2ggPSByZXF1aXJlKCcuLi9NZXNoJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgTWVzaFJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9NZXNoUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgY29yZS5PYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIFxuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSgxNTAwMCk7XG5cbiAgICAvL1RPRE8gdGhpcyBjb3VsZCBiZSBhIHNpbmdsZSBidWZmZXIgc2hhcmVkIGFtb25nc3QgYWxsIHJlbmRlcmVycyBhcyB3ZSByZXVzZSB0aGlzIHNldCB1cCBpbiBtb3N0IHJlbmRlcmVyc1xuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgMTUwMDA7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufVxuXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoUmVuZGVyZXI7XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignbWVzaCcsIE1lc2hSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIG1lc2gge1BJWEkubWVzaC5NZXNofSB0aGUgbWVzaCB0byByZW5kZXJcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICBpZighbWVzaC5fdmVydGV4QnVmZmVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5faW5pdFdlYkdMKG1lc2gpO1xuICAgIH1cblxuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXIsXG4gICAgICAgIGdsID0gcmVuZGVyZXIuZ2wsXG4gICAgICAgIHRleHR1cmUgPSBtZXNoLl90ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBzaGFkZXIgPSBtZXNoLnNoYWRlcjsvLyB8fCByZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnBsdWdpbnMubWVzaFNoYWRlcjtcblxuICAgIHZhciBkcmF3TW9kZSA9IG1lc2guZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIID8gZ2wuVFJJQU5HTEVfU1RSSVAgOiBnbC5UUklBTkdMRVM7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShtZXNoLmJsZW5kTW9kZSk7XG5cbiAgICAvL1RPRE8gY2FjaGUgY3VzdG9tIHN0YXRlLi5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzaGFkZXIgPSBzaGFkZXIuc2hhZGVyc1tnbC5pZF0gfHwgc2hhZGVyLmdldFNoYWRlcihyZW5kZXJlcik7Ly8gOiBzaGFkZXI7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4LnZhbHVlID0gbWVzaC53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gbWVzaC53b3JsZEFscGhhO1xuXG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuXG4gICAgaWYgKCFtZXNoLmRpcnR5KVxuICAgIHtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIG1lc2gudmVydGljZXMpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIHV2c1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cblxuICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCAwLCBtZXNoLmluZGljZXMpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIG1lc2guZGlydHkgPSBmYWxzZTtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZG9udCBuZWVkIHRvIHVwbG9hZCFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIH1cblxuICAgIGdsLmRyYXdFbGVtZW50cyhkcmF3TW9kZSwgbWVzaC5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuXG59O1xuXG4vKipcbiAqIFByZXBhcmVzIGFsbCB0aGUgYnVmZmVycyB0byByZW5kZXIgdGhpcyBtZXNoXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLl9pbml0V2ViR0wgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICAvLyBidWlsZCB0aGUgc3RyaXAhXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIG1lc2guX3ZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIG1lc2guX2luZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5fdXZCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC52ZXJ0aWNlcywgZ2wuRFlOQU1JQ19EUkFXKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgaWYobWVzaC5jb2xvcnMpe1xuICAgICAgICBtZXNoLl9jb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fY29sb3JCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5jb2xvcnMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG59O1xuXG5cbi8qKlxuICogRW1wdGllcyB0aGUgY3VycmVudCBiYXRjaC5cbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBtZXNoIHJlbmRlcmVyLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgXG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgTWVzaCByZW5kZXJlclxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIFdlYkdMIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gTWVzaFNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIGNvcmUuU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIGFscGhhIDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYVRleHR1cmVDb29yZDowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5NZXNoU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TaGFkZXIucHJvdG90eXBlKTtcbk1lc2hTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gTWVzaFNoYWRlcjtcblxuY29yZS5TaGFkZXJNYW5hZ2VyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoU2hhZGVyJywgTWVzaFNoYWRlcik7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9zaWduXG5cbmlmICghTWF0aC5zaWduKVxue1xuICAgIE1hdGguc2lnbiA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHggPSAreDtcbiAgICAgICAgaWYgKHggPT09IDAgfHwgaXNOYU4oeCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4ID4gMCA/IDEgOiAtMTtcbiAgICB9O1xufVxuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvb2JqZWN0LWFzc2lnblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnblxuXG5pZiAoIU9iamVjdC5hc3NpZ24pXG57XG4gICAgT2JqZWN0LmFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcbn1cbiIsInJlcXVpcmUoJy4vT2JqZWN0LmFzc2lnbicpO1xucmVxdWlyZSgnLi9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUnKTtcbnJlcXVpcmUoJy4vTWF0aC5zaWduJyk7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cDovL3BhdWxpcmlzaC5jb20vMjAxMS9yZXF1ZXN0YW5pbWF0aW9uZnJhbWUtZm9yLXNtYXJ0LWFuaW1hdGluZy9cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzE1Nzk2NzFcbi8vIGh0dHA6Ly91cGRhdGVzLmh0bWw1cm9ja3MuY29tLzIwMTIvMDUvcmVxdWVzdEFuaW1hdGlvbkZyYW1lLUFQSS1ub3ctd2l0aC1zdWItbWlsbGlzZWNvbmQtcHJlY2lzaW9uXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90aW1oYWxsLzQwNzg2MTRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9GaW5hbmNpYWwtVGltZXMvcG9seWZpbGwtc2VydmljZS90cmVlL21hc3Rlci9wb2x5ZmlsbHMvcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG5cbi8vIEV4cGVjdGVkIHRvIGJlIHVzZWQgd2l0aCBCcm93c2VyZml5XG4vLyBCcm93c2VyaWZ5IGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB0aGUgdXNlIG9mIGBnbG9iYWxgIGFuZCBwYXNzZXMgdGhlXG4vLyBjb3JyZWN0IHJlZmVyZW5jZSBvZiBgZ2xvYmFsYCwgYHNlbGZgLCBhbmQgZmluYWxseSBgd2luZG93YFxuXG4vLyBEYXRlLm5vd1xuaWYgKCEoRGF0ZS5ub3cgJiYgRGF0ZS5wcm90b3R5cGUuZ2V0VGltZSkpIHtcbiAgICBEYXRlLm5vdyA9IGZ1bmN0aW9uIG5vdygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIH07XG59XG5cbi8vIHBlcmZvcm1hbmNlLm5vd1xuaWYgKCEoZ2xvYmFsLnBlcmZvcm1hbmNlICYmIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cpKSB7XG4gICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgaWYgKCFnbG9iYWwucGVyZm9ybWFuY2UpIHtcbiAgICAgICAgZ2xvYmFsLnBlcmZvcm1hbmNlID0ge307XG4gICAgfVxuICAgIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIH07XG59XG5cbi8vIHJlcXVlc3RBbmltYXRpb25GcmFtZVxudmFyIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbnZhciB2ZW5kb3JzID0gWydtcycsICdtb3onLCAnd2Via2l0JywgJ28nXTtcblxuZm9yKHZhciB4ID0gMDsgeCA8IHZlbmRvcnMubGVuZ3RoICYmICFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lOyArK3gpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnQ2FuY2VsQW5pbWF0aW9uRnJhbWUnXSB8fFxuICAgICAgICBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbn1cblxuaWYgKCFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZGVsYXkgPSAxNiArIGxhc3RUaW1lIC0gY3VycmVudFRpbWU7XG5cbiAgICAgICAgaWYgKGRlbGF5IDwgMCkge1xuICAgICAgICAgICAgZGVsYXkgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFRpbWUgPSBjdXJyZW50VGltZTtcblxuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsYXN0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBjYWxsYmFjayhwZXJmb3JtYW5jZS5ub3coKSk7XG4gICAgICAgIH0sIGRlbGF5KTtcbiAgICB9O1xufVxuXG5pZiAoIWdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSkge1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgfTtcbn1cbiJdfQ== +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L09ic2VydmFibGVQb2ludC5qcyIsInNyYy9jb3JlL2Rpc3BsYXkvVHJhbnNmb3JtU3RhdGljLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3MuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9HcmFwaGljc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvV2ViR0xHcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ2lyY2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRDb21wbGV4UG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkTGluZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL01hdHJpeC5qcyIsInNyYy9jb3JlL21hdGgvUG9pbnQuanMiLCJzcmMvY29yZS9tYXRoL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvQ2lyY2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvRWxsaXBzZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1BvbHlnb24uanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9SZWN0YW5nbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlQnVmZmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvU3lzdGVtUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNNYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1RleHR1cmVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9NYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUXVhZC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvU3RlbmNpbE1hc2tTdGFjay5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9zcHJpdGVzL1Nwcml0ZS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvdGV4dC9UZXh0LmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9CYXNlVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1JlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9UZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZVV2cy5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90aWNrZXIvVGlja2VyLmpzIiwic3JjL2NvcmUvdGlja2VyL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzLmpzIiwic3JjL2NvcmUvdXRpbHMvaW5kZXguanMiLCJzcmMvY29yZS91dGlscy9wbHVnaW5UYXJnZXQuanMiLCJzcmMvZGVwcmVjYXRpb24uanMiLCJzcmMvZXh0cmFzL0JpdG1hcFRleHQuanMiLCJzcmMvZXh0cmFzL01vdmllQ2xpcC5qcyIsInNyYy9leHRyYXMvVGlsaW5nU3ByaXRlLmpzIiwic3JjL2V4dHJhcy9jYWNoZUFzQml0bWFwLmpzIiwic3JjL2V4dHJhcy9nZXRDaGlsZEJ5TmFtZS5qcyIsInNyYy9leHRyYXMvZ2V0R2xvYmFsUG9zaXRpb24uanMiLCJzcmMvZXh0cmFzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvYXNjaWkvQXNjaWlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibG9vbS9CbG9vbUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckRpckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1clhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9TbWFydEJsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvck1hdHJpeEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbG9yL0NvbG9yU3RlcEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2RvdC9Eb3RTY3JlZW5GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0JsdXJZVGludEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2dyYXkvR3JheUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvaW52ZXJ0L0ludmVydEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL25vaXNlL05vaXNlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9yZ2IvUkdCU3BsaXRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zZXBpYS9TZXBpYUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0QXhpc0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdHdpc3QvVHdpc3RGaWx0ZXIuanMiLCJzcmMvc3JjL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL0ludGVyYWN0aW9uRGF0YS5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbk1hbmFnZXIuanMiLCJzcmMvaW50ZXJhY3Rpb24vaW5kZXguanMiLCJzcmMvaW50ZXJhY3Rpb24vaW50ZXJhY3RpdmVUYXJnZXQuanMiLCJzcmMvbG9hZGVycy9iaXRtYXBGb250UGFyc2VyLmpzIiwic3JjL2xvYWRlcnMvaW5kZXguanMiLCJzcmMvbG9hZGVycy9sb2FkZXIuanMiLCJzcmMvbG9hZGVycy9zcHJpdGVzaGVldFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL3RleHR1cmVQYXJzZXIuanMiLCJzcmMvbWVzaC9NZXNoLmpzIiwic3JjL21lc2gvUGxhbmUuanMiLCJzcmMvbWVzaC9Sb3BlLmpzIiwic3JjL21lc2gvaW5kZXguanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoUmVuZGVyZXIuanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoU2hhZGVyLmpzIiwic3JjL3BvbHlmaWxsL01hdGguc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9PYmplY3QuYXNzaWduLmpzIiwic3JjL3BvbHlmaWxsL2luZGV4LmpzIiwic3JjL3BvbHlmaWxsL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzV1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNyaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbm1DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Y0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2h5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNWxCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM21CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25iQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICBjcmVhdGVDb250ZXh0OiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9jcmVhdGVDb250ZXh0JyksXG4gICAgc2V0VmVydGV4QXR0cmliQXJyYXlzOiBcdHJlcXVpcmUoJy4vbGliL3NldFZlcnRleEF0dHJpYkFycmF5cycpLFxuICAgIFxuICAgIEdMQnVmZmVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMQnVmZmVyJyksXG4gICAgR0xGcmFtZWJ1ZmZlcjogXHRcdFx0cmVxdWlyZSgnLi9saWIvR0xGcmFtZWJ1ZmZlcicpLFxuICAgIEdMU2hhZGVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMU2hhZGVyJyksXG4gICAgR0xUZXh0dXJlOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMVGV4dHVyZScpLFxuICAgIFxuICAgIFZlcnRleEFycmF5T2JqZWN0OiBcdFx0cmVxdWlyZSgnLi9saWIvVmVydGV4QXJyYXlPYmplY3QnKVxuXG59OyIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEVNUFRZX0FSUkFZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcblxudmFyIEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuQVJSQVlfQlVGRkVSO1xuXHR0aGlzLmRyYXdUeXBlID0gZHJhd1R5cGUgfHwgZ2wuU1RBVElDX0RSQVc7XG5cdHRoaXMuZGF0YSA9IEVNUFRZX0FSUkFZX0JVRkZFUjtcblxuXHRpZihkYXRhKVxuXHR7XG5cdFx0dGhpcy51cGxvYWQoZGF0YSk7XG5cdH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihkYXRhLCBvZmZzZXQsIGRvbnRCaW5kKVxue1xuXHQvLyB0b2RvIC0gbmVlZGVkP1xuXHQvL2lmKCFkb250QmluZClcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblx0XG5cdGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcblx0b2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cblx0aWYodGhpcy5kYXRhLmJ5dGVMZW5ndGggPj0gZGF0YS5ieXRlTGVuZ3RoKVxuXHR7XHRcblx0XHRnbC5idWZmZXJTdWJEYXRhKHRoaXMudHlwZSwgb2Zmc2V0LCBkYXRhKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC5idWZmZXJEYXRhKHRoaXMudHlwZSwgZGF0YSwgdGhpcy5kcmF3VHlwZSk7XG5cdH1cblxuXHR0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRCdWZmZXIodGhpcy50eXBlLCB0aGlzLmJ1ZmZlcik7XG59XG5cbkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24oZ2wsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZSA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIHR5cGUsIGRyYXdUeXBlKTtcbn1cblxuLy9UT0RPIERlc3Ryb3kuLlxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcjtcblxuIiwiXG52YXIgVGV4dHVyZSA9IHJlcXVpcmUoJy4vR0xUZXh0dXJlJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIEZyYW1lYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEZyYW1lYnVmZmVyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblx0XG5cdHRoaXMuc3RlbmNpbCA9IG51bGw7XG5cdHRoaXMudGV4dHVyZSA9IG51bGw7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlVGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBuZXcgVGV4dHVyZShnbCk7XG5cblx0dGhpcy50ZXh0dXJlLmJpbmQoKTtcblxuXHQvL2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZS50ZXh0dXJlLCAwKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmVuYWJsZVN0ZW5jaWwgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuc3RlbmNpbClyZXR1cm47XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnN0ZW5jaWwgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcbiAgICBcbiAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBcbiAgICAvLyBUT0RPLi4gdGhpcyBpcyBkZXB0aCBBTkQgc3RlbmNpbD9cbiAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsICB0aGlzLndpZHRoICAsIHRoaXMuaGVpZ2h0ICk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCByLCBnLCBiLCBhIClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICBnbC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpO1xuICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLmZyYW1lYnVmZmVyICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuXHRpZiAoIHRoaXMudGV4dHVyZSApXG4gICAge1xuICAgIFx0dGhpcy50ZXh0dXJlLnVwbG9hZERhdGEobnVsbCwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRpZiAoIHRoaXMuc3RlbmNpbCApXG4gICAge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0ZW5jaWwgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0dmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21EYXRhKGdsLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0dGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgZmJvLnVuYmluZCgpO1xuICAgIFxuICAgIHJldHVybiBmYm87XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZUZsb2F0MzIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0Ly8gY3JlYXRlIGEgbmV3IHRleHR1cmUuLlxuICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUuZnJvbURhdGEoZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuICAgIHRleHR1cmUuZW5hYmxlTmVhcmVzdFNjYWxpbmcoKTtcbiAgICB0ZXh0dXJlLmVuYWJsZVdyYXBDbGFtcCgpO1xuXG4gICAgLy9ub3cgY3JlYXRlIHRoZSBmcmFtZWJ1ZmZlciBvYmplY3QgYW5kIGF0dGFjaCB0aGUgdGV4dHVyZSB0byBpdC5cbiAgICB2YXIgZmJvID0gbmV3IEZyYW1lYnVmZmVyKGdsLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICBmYm8uZW5hYmxlVGV4dHVyZSh0ZXh0dXJlKVxuXG4gICAgZmJvLnVuYmluZCgpO1xuXG4gICAgcmV0dXJuIGZibztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGcmFtZWJ1ZmZlcjtcblxuIiwiXG52YXIgY29tcGlsZVByb2dyYW0gPSByZXF1aXJlKCcuL3NoYWRlci9jb21waWxlUHJvZ3JhbScpLFxuXHRleHRyYWN0QXR0cmlidXRlcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RBdHRyaWJ1dGVzJyksXG5cdGV4dHJhY3RVbmlmb3JtcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RVbmlmb3JtcycpLFxuXHRnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QgPSByZXF1aXJlKCcuL3NoYWRlci9nZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgU2hhZGVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cbnZhciBTaGFkZXIgPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIEZpcnN0IGNvbXBpbGUgdGhlIHByb2dyYW0uLlxuXHR0aGlzLnByb2dyYW0gPSBjb21waWxlUHJvZ3JhbShnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7XG5cblx0Ly8gbmV4dCBleHRyYWN0IHRoZSBhdHRyaWJ1dGVzXG5cdHRoaXMuYXR0cmlidXRlcyA9IGV4dHJhY3RBdHRyaWJ1dGVzKGdsLCB0aGlzLnByb2dyYW0pOyBcblxuICAgIHZhciB1bmlmb3JtRGF0YSA9IGV4dHJhY3RVbmlmb3JtcyhnbCwgdGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMudW5pZm9ybXMgPSBnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QoIGdsLCB1bmlmb3JtRGF0YSApO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4iLCJcbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gYSBXZWJHTCBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGZvcm1hdCB7bnVtYmVyfSB0aGUgcGl4ZWwgZm9ybWF0IG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5SR0JBXG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSB0aGUgZ2wgdHlwZSBvZiB0aGUgdGV4dHVyZS4gZGVmYXVsdHMgdG8gZ2wuVU5TSUdORURfQllURVxuICovXG52YXIgVGV4dHVyZSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLnRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cblx0Ly8gc29tZSBzZXR0aW5ncy4uXG5cdHRoaXMubWlwbWFwID0gZmFsc2U7XG5cblx0dGhpcy5wcmVtdWx0aXBseUFscGhhID0gZmFsc2U7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cblx0dGhpcy5mb3JtYXQgPSBmb3JtYXQgfHwgZ2wuUkdCQTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5VTlNJR05FRF9CWVRFO1xuXG5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge1BJWEkuZ2xDb3JlLlRleHR1cmV9IFt2YXJuYW1lXSBbZGVzY3JpcHRpb25dXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKHNvdXJjZSlcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gc291cmNlLndpZHRoO1xuXHR0aGlzLmhlaWdodCA9IHNvdXJjZS5oZWlnaHQ7XG5cblx0Z2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xuICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMuZm9ybWF0LCB0aGlzLnR5cGUsIHNvdXJjZSk7XG59XG5cbnZhciBGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSBmYWxzZTtcblxuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkRGF0YSA9IGZ1bmN0aW9uKGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuYmluZCgpO1xuXHRcblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IHRoaXMud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IHRoaXMuaGVpZ2h0O1xuXG5cdGlmKGRhdGEgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpXG5cdHtcblx0XHRpZighRkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFKVxuXHRcdHtcblx0XHRcdHZhciBleHQgPSBnbC5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9mbG9hdFwiKTtcblx0XHRcdFxuXHRcdFx0aWYoZXh0KVxuXHRcdFx0e1xuXHRcdFx0XHRGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2Zsb2F0aW5nIHBvaW50IHRleHR1cmVzIG5vdCBhdmFpbGFibGUnKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnR5cGUgPSBnbC5GTE9BVDtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHQvLyBUT0RPIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzXG5cdFx0dGhpcy50eXBlID0gZ2wuVU5TSUdORURfQllURTtcblx0fVxuXG5cdC8vIHdoYXQgdHlwZSBvZiBkYXRhP1xuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG5cdGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsICB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgZGF0YSB8fCBudWxsKTtcblxufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24obG9jYXRpb24pXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0aWYobG9jYXRpb24gIT09IHVuZGVmaW5lZClcblx0e1xuXHRcdGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbik7XG5cdH1cblxuXHRnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0aGlzLnRleHR1cmUpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIG51bGwpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5taW5GaWx0ZXIgPSBmdW5jdGlvbiggbGluZWFyIClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRpZih0aGlzLm1pcG1hcClcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVJfTUlQTUFQX0xJTkVBUiA6IGdsLk5FQVJFU1RfTUlQTUFQX05FQVJFU1QpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcblx0fVx0XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1hZ0ZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTWlwbWFwID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR0aGlzLm1pcG1hcCA9IHRydWU7XG5cdGdsLmdlbmVyYXRlTWlwbWFwKGdsLlRFWFRVUkVfMkQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVMaW5lYXJTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcih0cnVlKTtcblx0dGhpcy5tYWdGaWx0ZXIodHJ1ZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZU5lYXJlc3RTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcihmYWxzZSk7XG5cdHRoaXMubWFnRmlsdGVyKGZhbHNlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlV3JhcENsYW1wID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwUmVwZWF0ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXHRcblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuUkVQRUFUKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5SRVBFQVQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlVGV4dHVyZSh0aGlzLnRleHR1cmUpO1xufVxuXG4vL1RleHR1cmUuXG5UZXh0dXJlLmZyb21Tb3VyY2UgPSBmdW5jdGlvbihnbCwgc291cmNlLCBwcmVtdWx0aXBseUFscGhhKVxue1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS5wcmVtdWx0aXBseUFscGhhID0gcHJlbXVsdGlwbHlBbHBoYSB8fCBmYWxzZTtcblx0dGV4dHVyZS51cGxvYWQoc291cmNlKTtcblxuXHRyZXR1cm4gdGV4dHVyZTtcbn1cblxuVGV4dHVyZS5mcm9tRGF0YSA9IGZ1bmN0aW9uKGdsLCBkYXRhLCB3aWR0aCwgaGVpZ2h0KVxue1xuXHQvL2NvbnNvbGUubG9nKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS51cGxvYWREYXRhKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZTtcblxuIiwiXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbi8vIHN0YXRlIG9iamVjdC8vXG5cblxuZnVuY3Rpb24gVmVydGV4QXJyYXlPYmplY3QoZ2wpXG57XG5cdFxuXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IChcbiAgICAgIGdsLmdldEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKVxuICAgICk7XG5cbi8vXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IG51bGw7XG5cblx0aWYodGhpcy5uYXRpdmVWYW9FeHRlbnNpb24pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhbyA9IHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7ICBcblx0fVxuXG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcblxuXHR0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuXHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cblx0XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZlcnRleEFycmF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBWZXJ0ZXhBcnJheU9iamVjdDtcblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKHRoaXMubmF0aXZlVmFvKTsgIFxuXG5cdFx0aWYodGhpcy5kaXJ0eSlcblx0XHR7XG5cdFx0XHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cdFx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdFx0fVxuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLm5hdGl2ZVZhbylcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIFxuXHR7XG5cdFx0dmFyIGF0dHJpYiA9IHRoaXMuYXR0cmlidXRlc1tpXTtcblx0XHRhdHRyaWIuYnVmZmVyLmJpbmQoKTtcdFxuXG5cdFx0YXR0cmliLmF0dHJpYnV0ZS5wb2ludGVyKGF0dHJpYi50eXBlLCBhdHRyaWIubm9ybWFsaXplZCwgYXR0cmliLnN0cmlkZSwgYXR0cmliLnN0YXJ0KTsgXG5cdFx0XG5cdFx0Z2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYXR0cmliLmF0dHJpYnV0ZS5sb2NhdGlvbik7XG5cdH07XG5cblx0dGhpcy5pbmRleEJ1ZmZlci5iaW5kKCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRBdHRyaWJ1dGUgPSBmdW5jdGlvbihidWZmZXIsIGF0dHJpYnV0ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydClcbntcbiAgICB0aGlzLmF0dHJpYnV0ZXMucHVzaCh7XG4gICAgXHRidWZmZXI6IFx0YnVmZmVyLFxuICAgIFx0YXR0cmlidXRlOiBcdGF0dHJpYnV0ZSxcblxuICAgIFx0bG9jYXRpb246IFx0YXR0cmlidXRlLmxvY2F0aW9uLFxuXHQgXHR0eXBlOiBcdFx0dHlwZSB8fCB0aGlzLmdsLkZMT0FULFxuXHQgXHRub3JtYWxpemVkOiBub3JtYWxpemVkIHx8IGZhbHNlLFxuXHQgXHRzdHJpZGU6IFx0c3RyaWRlIHx8IDAsXG5cdCBcdHN0YXJ0OiBcdFx0c3RhcnQgfHwgMFxuXHR9KVxuXG5cdHRoaXMuZGlydHkgPSB0cnVlO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRJbmRleCA9IGZ1bmN0aW9uKGJ1ZmZlciwgb3B0aW9ucylcbntcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gYnVmZmVyO1xuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBzdGFydClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuZHJhd0VsZW1lbnRzKHR5cGUsIHNpemUsIGdsLlVOU0lHTkVEX1NIT1JULCBzdGFydCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgQ29udGV4dFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG5cbnZhciBDT05URVhUX1VJRCA9IDA7XG5cbnZhciBjcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24oY2FudmFzLCBvcHRpb25zKVxue1xuICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgb3B0aW9ucykgfHwgXG4gICAgXHQgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFnbClcbiAgICB7XG4gICAgICAgIC8vIGZhaWwsIG5vdCBhYmxlIHRvIGdldCBhIGNvbnRleHRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB3ZWJHTC4gVHJ5IHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXInKTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCB3YW50IHRvIHBoYXNlIHRoaXMgb3V0P1xuICAgIGdsLmlkID0gQ09OVEVYVF9VSUQrKztcblxuICAgIHJldHVybiBnbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb250ZXh0O1xuXG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgc2V0VmVydGV4QXR0cmliQXJyYXlzID0gZnVuY3Rpb24gKGdsLCBhdHRyaWJzKVxue1x0XG4gICAvLyBjb25zb2xlLmxvZyhnbC5pZClcbiAgICB2YXIgZGF0YSA9IEdMX01BUFtnbC5pZF07XG5cbiAgICBpZighZGF0YSlcbiAgICB7XG5cdCAgIHZhciBtYXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cdFx0ZGF0YSA9IEdMX01BUFtnbC5pZF0gPSB7dGVtcEF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKVxuXHRcdFx0XHQgXHQgXHRcdCAgICxhdHRyaWJTdGF0ZTpuZXcgQXJyYXkobWF4QXR0cmlicyl9O1xuXHR9XG5cdFxuICAgIHZhciBpLFxuICAgIFx0dGVtcEF0dHJpYlN0YXRlID0gZGF0YS50ZW1wQXR0cmliU3RhdGUsXG4gICAgXHRhdHRyaWJTdGF0ZSA9IGRhdGEuYXR0cmliU3RhdGU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAoaSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbaV0ubG9jYXRpb25dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAoYXR0cmliU3RhdGVbaV0gIT09IHRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmliU3RhdGVbaV0gPSB0ZW1wQXR0cmliU3RhdGVbaV07XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmF0dHJpYlN0YXRlW2ldKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VmVydGV4QXR0cmliQXJyYXlzOyIsIlxuXG5cblxuY29tcGlsZVByb2dyYW0gPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcbiAgICB2YXIgZ2xWZXJ0U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuVkVSVEVYX1NIQURFUiwgdmVydGV4U3JjKTtcbiAgICB2YXIgZ2xGcmFnU2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNyYyk7XG5cbiAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbEZyYWdTaGFkZXIpO1xuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgLy8gaWYgbGlua2luZyBmYWlscywgdGhlbiBsb2cgYW5kIGNsZWFudXBcbiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUGl4aS5qcyBFcnJvcjogQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVyLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5WQUxJREFURV9TVEFUVVMnLCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLlZBTElEQVRFX1NUQVRVUykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5nZXRFcnJvcigpJywgZ2wuZ2V0RXJyb3IoKSk7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBwcm9ncmFtIGluZm8gbG9nLCBsb2cgaXRcbiAgICAgICAgaWYgKGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pICE9PSAnJylcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaXhpLmpzIFdhcm5pbmc6IGdsLmdldFByb2dyYW1JbmZvTG9nKCknLCBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICBwcm9ncmFtID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBzb21lIHNoYWRlcnNcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xGcmFnU2hhZGVyKTtcblxuICAgIHJldHVybiBwcm9ncmFtO1xufVxuXG52YXIgY29tcGlsZVNoYWRlciA9IGZ1bmN0aW9uIChnbCwgdHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzcmMpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZVByb2dyYW07XG5cbiIsIlxuXG52YXIgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkgXG57XG4gICAgc3dpdGNoICh0eXBlKVxuICAgIHtcbiAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAndmVjMic6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzQnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSg0ICogc2l6ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgY2FzZSAnc2FtcGxlcjJEJzpcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWMyJzogICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnaXZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDMgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjNCc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDQgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdib29sJzogICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMyJzpcblxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSggMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMzJzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWM0JzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ21hdDInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Myc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMV0pO1xuXG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDAsIDAsIDFdKTtcbiAgICB9XG59XG5cbnZhciBib29sZWFuQXJyYXkgPSBmdW5jdGlvbihzaXplKVxue1xuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgYXJyYXlbaV0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRWYWx1ZTtcbiIsIlxudmFyIG1hcFR5cGUgPSByZXF1aXJlKCcuL21hcFR5cGUnKTtcbnZhciBtYXBTaXplID0gcmVxdWlyZSgnLi9tYXBTaXplJyk7XG5cbnZhciBleHRyYWN0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICB2YXIgdG90YWxBdHRyaWJ1dGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxBdHRyaWJ1dGVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGF0dHJpYkRhdGEgPSBnbC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaSk7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgYXR0cmliRGF0YS50eXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYkRhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOnR5cGUsXG4gICAgICAgICAgICBzaXplOm1hcFNpemUodHlwZSksXG4gICAgICAgICAgICBsb2NhdGlvbjpnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBhdHRyaWJEYXRhLm5hbWUpLFxuICAgICAgICAgICAgLy9UT0RPIC0gbWFrZSBhbiBhdHRyaWJ1dGUgb2JqZWN0XG4gICAgICAgICAgICBwb2ludGVyOmZ1bmN0aW9uKHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpe1xuXG4gICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5sb2NhdGlvbix0aGlzLnNpemUsIHR5cGUgfHwgZ2wuRkxPQVQsIG5vcm1hbGl6ZWQgfHwgZmFsc2UsIHN0cmlkZSB8fCAwLCBzdGFydCB8fCAwKTsgXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYXR0cmlidXRlczsgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RBdHRyaWJ1dGVzO1xuXG4iLCJ2YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIGRlZmF1bHRWYWx1ZSA9IHJlcXVpcmUoJy4vZGVmYXVsdFZhbHVlJyk7XG5cblxudmFyIGV4dHJhY3RVbmlmb3JtcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuXHR2YXIgdW5pZm9ybXMgPSB7fTtcblx0XG4gICAgdmFyIHRvdGFsVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxVbmlmb3JtczsgaSsrKSBcbiAgICB7XG4gICAgXHR2YXIgdW5pZm9ybURhdGEgPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpO1xuICAgIFx0dmFyIG5hbWUgPSB1bmlmb3JtRGF0YS5uYW1lLnJlcGxhY2UoL1xcWy4qP1xcXS8sIFwiXCIpO1xuICAgICAgICB2YXIgdHlwZSA9IG1hcFR5cGUoZ2wsIHVuaWZvcm1EYXRhLnR5cGUgKTtcblxuICAgIFx0dW5pZm9ybXNbbmFtZV0gPSB7XG4gICAgXHRcdHR5cGU6dHlwZSxcbiAgICBcdFx0c2l6ZTp1bmlmb3JtRGF0YS5zaXplLFxuICAgIFx0XHRsb2NhdGlvbjpnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksXG4gICAgXHRcdHZhbHVlOmRlZmF1bHRWYWx1ZSh0eXBlLCB1bmlmb3JtRGF0YS5zaXplKVxuICAgIFx0fVxuICAgIH07XG5cdFxuXHRyZXR1cm4gdW5pZm9ybXM7XHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHRyYWN0VW5pZm9ybXM7XG5cbiIsIlxudmFyIGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IGZ1bmN0aW9uKGdsLCB1bmlmb3JtRGF0YSlcbntcbiAgICAvLyB0aGlzIGlzIHRoZSBvYmplY3Qgd2Ugd2lsbCBiZSBzZW5kaW5nIGJhY2suXG4gICAgLy8gYW4gb2JqZWN0IGhpZXJhY2h5IHdpbGwgYmUgY3JlYXRlZCBmb3Igc3RydWN0c1xuICAgIHZhciB1bmlmb3JtcyA9IHtkYXRhOnt9fTtcblxuICAgIHVuaWZvcm1zLmdsID0gZ2w7XG4gICAgXG4gICAgdmFyIHVuaWZvcm1LZXlzPSBPYmplY3Qua2V5cyh1bmlmb3JtRGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1LZXlzLmxlbmd0aDsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBmdWxsTmFtZSA9IHVuaWZvcm1LZXlzW2ldXG5cbiAgICAgICAgdmFyIG5hbWVUb2tlbnMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAxXTtcblxuICAgICAgICB2YXIgdW5pZm9ybUdyb3VwID0gZ2V0VW5pZm9ybUdyb3VwKG5hbWVUb2tlbnMsIHVuaWZvcm1zKTtcblxuICAgICAgICB2YXIgdW5pZm9ybSA9ICB1bmlmb3JtRGF0YVtmdWxsTmFtZV07XG4gICAgICAgIHVuaWZvcm1Hcm91cC5kYXRhW25hbWVdID0gdW5pZm9ybTtcblxuICAgICAgICB1bmlmb3JtR3JvdXAuZ2wgPSBnbDtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5pZm9ybUdyb3VwLCBuYW1lLCB7XG4gICAgICAgICAgICBnZXQ6IGdlbmVyYXRlR2V0dGVyKG5hbWUpLFxuICAgICAgICAgICAgc2V0OiBnZW5lcmF0ZVNldHRlcihuYW1lLCB1bmlmb3JtKVxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdW5pZm9ybXM7XG59XG5cbnZhciBnZW5lcmF0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpXG57XG5cdHZhciB0ZW1wbGF0ZSA9IGdldHRlclRlbXBsYXRlLnJlcGxhY2UoJyUlJywgbmFtZSk7XG5cdHJldHVybiBuZXcgRnVuY3Rpb24odGVtcGxhdGUpO1xufVxuXG52YXIgZ2VuZXJhdGVTZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCB1bmlmb3JtKVxue1xuICAgIHZhciB0ZW1wbGF0ZSA9IHNldHRlclRlbXBsYXRlLnJlcGxhY2UoLyUlL2csIG5hbWUpO1xuICAgIHZhciBzZXRUZW1wbGF0ZVxuICAgIFxuICAgIGlmKHVuaWZvcm0uc2l6ZSA9PT0gMSlcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19TSU5HTEVfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzZXRUZW1wbGF0ZSA9IEdMU0xfVE9fQVJSQVlfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cblxuICAgIGlmKHNldFRlbXBsYXRlKVxuICAgIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gXCJcXG50aGlzLmdsLlwiICsgc2V0VGVtcGxhdGUgKyBcIjtcIjtcbiAgICB9XG5cbiAgXHRyZXR1cm4gbmV3IEZ1bmN0aW9uKCd2YWx1ZScsIHRlbXBsYXRlKTtcbn1cblxudmFyIGdldFVuaWZvcm1Hcm91cCA9IGZ1bmN0aW9uKG5hbWVUb2tlbnMsIHVuaWZvcm0pXG57XG4gICAgdmFyIGN1ciA9IHVuaWZvcm07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVUb2tlbnMubGVuZ3RoIC0gMTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBvID0gY3VyW25hbWVUb2tlbnNbaV1dIHx8IHtkYXRhOnt9fTtcbiAgICAgICAgY3VyW25hbWVUb2tlbnNbaV1dID0gbztcbiAgICAgICAgY3VyID0gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGN1clxufVxuXG52YXIgZ2V0dGVyVGVtcGxhdGUgPSBbXG4gICAgJ3JldHVybiB0aGlzLmRhdGEuJSUudmFsdWU7Jyxcbl0uam9pbignXFxuJyk7XG5cbnZhciBzZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAndGhpcy5kYXRhLiUlLnZhbHVlID0gdmFsdWU7JyxcbiAgICAndmFyIGxvY2F0aW9uID0gdGhpcy5kYXRhLiUlLmxvY2F0aW9uOydcbl0uam9pbignXFxuJyk7XG5cblxudmFyIEdMU0xfVE9fU0lOR0xFX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ3ZlYzInOiAgICAgJ3VuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ3ZlYzMnOiAgICAgJ3VuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG4gICAgXHRcbiAgICAnaW50JzogICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnaXZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcblxuICAgICdtYXQyJzogICAgICd1bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0Myc6ICAgICAndW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG4gICAgJ21hdDQnOiAgICAgJ3VuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuXG4gICAgJ3NhbXBsZXIyRCc6J3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG52YXIgR0xTTF9UT19BUlJBWV9TRVRURVJTID0ge1xuXG4gICAgJ2Zsb2F0JzogICAgJ3VuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjNCc6ICAgICAndW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG4gICBcbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdDtcblxuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24odHlwZSkgXG57IFxuICAgIHJldHVybiBHTFNMX1RPX1NJWkVbdHlwZV07XG59XG5cblxudmFyIEdMU0xfVE9fU0laRSA9IHtcbiAgICAnZmxvYXQnOiAgICAxLFxuICAgICd2ZWMyJzogICAgIDIsXG4gICAgJ3ZlYzMnOiAgICAgMyxcbiAgICAndmVjNCc6ICAgICA0LFxuXG4gICAgJ2ludCc6ICAgICAgMSxcbiAgICAnaXZlYzInOiAgICAyLFxuICAgICdpdmVjMyc6ICAgIDMsXG4gICAgJ2l2ZWM0JzogICAgNCxcblxuICAgICdib29sJzogICAgIDEsXG4gICAgJ2J2ZWMyJzogICAgMixcbiAgICAnYnZlYzMnOiAgICAzLFxuICAgICdidmVjNCc6ICAgIDQsXG5cbiAgICAnbWF0Mic6ICAgICA0LFxuICAgICdtYXQzJzogICAgIDksXG4gICAgJ21hdDQnOiAgICAgMTYsXG5cbiAgICAnc2FtcGxlcjJEJzogIDFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24oZ2wsIHR5cGUpIFxue1xuICAgIGlmKCFHTF9UQUJMRSkgXG4gICAge1xuICAgICAgICB2YXIgdHlwZU5hbWVzID0gT2JqZWN0LmtleXMoR0xfVE9fR0xTTF9UWVBFUyk7XG5cbiAgICAgICAgR0xfVEFCTEUgPSB7fTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdHlwZU5hbWVzLmxlbmd0aDsgKytpKSBcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHRuID0gdHlwZU5hbWVzW2ldO1xuICAgICAgICAgICAgR0xfVEFCTEVbIGdsW3RuXSBdID0gR0xfVE9fR0xTTF9UWVBFU1t0bl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIEdMX1RBQkxFW3R5cGVdO1xufVxuXG52YXIgR0xfVEFCTEUgPSBudWxsO1xuXG52YXIgR0xfVE9fR0xTTF9UWVBFUyA9IHtcbiAgJ0ZMT0FUJzogICAgICAgJ2Zsb2F0JyxcbiAgJ0ZMT0FUX1ZFQzInOiAgJ3ZlYzInLFxuICAnRkxPQVRfVkVDMyc6ICAndmVjMycsXG4gICdGTE9BVF9WRUM0JzogICd2ZWM0JyxcblxuICAnSU5UJzogICAgICAgICAnaW50JyxcbiAgJ0lOVF9WRUMyJzogICAgJ2l2ZWMyJyxcbiAgJ0lOVF9WRUMzJzogICAgJ2l2ZWMzJyxcbiAgJ0lOVF9WRUM0JzogICAgJ2l2ZWM0JyxcbiAgXG4gICdCT09MJzogICAgICAgICdib29sJyxcbiAgJ0JPT0xfVkVDMic6ICAgJ2J2ZWMyJyxcbiAgJ0JPT0xfVkVDMyc6ICAgJ2J2ZWMzJyxcbiAgJ0JPT0xfVkVDNCc6ICAgJ2J2ZWM0JyxcbiAgXG4gICdGTE9BVF9NQVQyJzogICdtYXQyJyxcbiAgJ0ZMT0FUX01BVDMnOiAgJ21hdDMnLFxuICAnRkxPQVRfTUFUNCc6ICAnbWF0NCcsXG4gIFxuICAnU0FNUExFUl8yRCc6ICAnc2FtcGxlcjJEJyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwU2l6ZTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvQm9vbCh2KSB7XG4gICAgICAgIHJldHVybiAhIXY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vdElkKHYpIHtcbiAgICAgICAgcmV0dXJuICF2O1xuICAgIH1cblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcHJldmlvdXNfYXN5bmM7XG5cbiAgICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gICAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZiB8fFxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgdGhpcztcblxuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgICAgcHJldmlvdXNfYXN5bmMgPSByb290LmFzeW5jO1xuICAgIH1cblxuICAgIGFzeW5jLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBwcmV2aW91c19hc3luYztcbiAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbmx5X29uY2UoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIC8vIFBvcnRlZCBmcm9tIHVuZGVyc2NvcmUuanMgaXNPYmplY3RcbiAgICB2YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9pc0FycmF5TGlrZShhcnIpIHtcbiAgICAgICAgcmV0dXJuIF9pc0FycmF5KGFycikgfHwgKFxuICAgICAgICAgICAgLy8gaGFzIGEgcG9zaXRpdmUgaW50ZWdlciBsZW5ndGggcHJvcGVydHlcbiAgICAgICAgICAgIHR5cGVvZiBhcnIubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICBhcnIubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggJSAxID09PSAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2FycmF5RWFjaChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfbWFwKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdG9yKGFycltpbmRleF0sIGluZGV4LCBhcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JhbmdlKGNvdW50KSB7XG4gICAgICAgIHJldHVybiBfbWFwKEFycmF5KGNvdW50KSwgZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGk7IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9yZWR1Y2UoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBfYXJyYXlFYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9mb3JFYWNoT2Yob2JqZWN0LCBpdGVyYXRvcikge1xuICAgICAgICBfYXJyYXlFYWNoKF9rZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnIsIGl0ZW0pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfa2V5SXRlcmF0b3IoY29sbCkge1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB2YXIgbGVuO1xuICAgICAgICB2YXIga2V5cztcbiAgICAgICAgaWYgKF9pc0FycmF5TGlrZShjb2xsKSkge1xuICAgICAgICAgICAgbGVuID0gY29sbC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBsZW4gPyBpIDogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXlzID0gX2tleXMoY29sbCk7XG4gICAgICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGtleXNbaV0gOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpbWlsYXIgdG8gRVM2J3MgcmVzdCBwYXJhbSAoaHR0cDovL2FyaXlhLm9maWxhYnMuY29tLzIwMTMvMDMvZXM2LWFuZC1yZXN0LXBhcmFtZXRlci5odG1sKVxuICAgIC8vIFRoaXMgYWNjdW11bGF0ZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byBhbiBhcnJheSwgYWZ0ZXIgYSBnaXZlbiBpbmRleC5cbiAgICAvLyBGcm9tIHVuZGVyc2NvcmUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzIxNDApLlxuICAgIGZ1bmN0aW9uIF9yZXN0UGFyYW0oZnVuYywgc3RhcnRJbmRleCkge1xuICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCk7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSB1bnVzZWQgYnV0IGhhbmRsZSBjYXNlcyBvdXRzaWRlIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50OlxuICAgICAgICAgICAgLy8gdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICAgICAgICAvLyBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAvLyAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICAgICAgICAvLyByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBleHBvcnRlZCBhc3luYyBtb2R1bGUgZnVuY3Rpb25zIC8vLy9cblxuICAgIC8vLy8gbmV4dFRpY2sgaW1wbGVtZW50YXRpb24gd2l0aCBicm93c2VyLWNvbXBhdGlibGUgZmFsbGJhY2sgLy8vL1xuXG4gICAgLy8gY2FwdHVyZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZSB0byBndWFyZCBhZ2FpbnN0IGZha2VUaW1lciBtb2Nrc1xuICAgIHZhciBfc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzZXRJbW1lZGlhdGU7XG5cbiAgICB2YXIgX2RlbGF5ID0gX3NldEltbWVkaWF0ZSA/IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgIF9zZXRJbW1lZGlhdGUoZm4pO1xuICAgIH0gOiBmdW5jdGlvbihmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBfZGVsYXk7XG4gICAgfVxuICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IF9zZXRJbW1lZGlhdGUgPyBfZGVsYXkgOiBhc3luYy5uZXh0VGljaztcblxuXG4gICAgYXN5bmMuZm9yRWFjaCA9XG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9XG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mU2VyaWVzKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG5cbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPVxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9lYWNoT2ZMaW1pdChsaW1pdCkoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoT2YgPVxuICAgIGFzeW5jLmVhY2hPZiA9IGZ1bmN0aW9uIChvYmplY3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBvYmplY3QgPSBvYmplY3QgfHwgW107XG5cbiAgICAgICAgdmFyIGl0ZXIgPSBfa2V5SXRlcmF0b3Iob2JqZWN0KTtcbiAgICAgICAgdmFyIGtleSwgY29tcGxldGVkID0gMDtcblxuICAgICAgICB3aGlsZSAoKGtleSA9IGl0ZXIoKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpdGVyYXRvcihvYmplY3Rba2V5XSwga2V5LCBvbmx5X29uY2UoZG9uZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gMCkgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZC0tO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBrZXkgaXMgbnVsbCBpbiBjYXNlIGl0ZXJhdG9yIGlzbid0IGV4aGF1c3RlZFxuICAgICAgICAgICAgLy8gYW5kIGRvbmUgcmVzb2x2ZWQgc3luY2hyb25vdXNseS5cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gbnVsbCAmJiBjb21wbGV0ZWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZlNlcmllcyA9XG4gICAgYXN5bmMuZWFjaE9mU2VyaWVzID0gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iaiA9IG9iaiB8fCBbXTtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgdmFyIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRvcihvYmpba2V5XSwga2V5LCBvbmx5X29uY2UoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoaXRlcmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5mb3JFYWNoT2ZMaW1pdCA9XG4gICAgYXN5bmMuZWFjaE9mTGltaXQgPSBmdW5jdGlvbiAob2JqLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9lYWNoT2ZMaW1pdChsaW1pdCkob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZWFjaE9mTGltaXQobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBydW5uaW5nID0gMDtcbiAgICAgICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChkb25lICYmIHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWwoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZiwgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb1BhcmFsbGVsTGltaXQoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihfZWFjaE9mTGltaXQobGltaXQpLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvU2VyaWVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihhc3luYy5lYWNoT2ZTZXJpZXMsIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gX2lzQXJyYXlMaWtlKGFycikgPyBbXSA6IHt9O1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfYXN5bmNNYXApO1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLmluamVjdCA9XG4gICAgYXN5bmMuZm9sZGwgPVxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgaSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5mb2xkciA9XG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGlkZW50aXR5KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudHJhbnNmb3JtID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGl0ZXJhdG9yO1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBtZW1vO1xuICAgICAgICAgICAgbWVtbyA9IF9pc0FycmF5KGFycikgPyBbXSA6IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuZWFjaE9mKGFyciwgZnVuY3Rpb24odiwgaywgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHYsIGssIGNiKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleDogaW5kZXgsIHZhbHVlOiB4fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soX21hcChyZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICB9KSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMuc2VsZWN0ID1cbiAgICBhc3luYy5maWx0ZXIgPSBkb1BhcmFsbGVsKF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0TGltaXQgPVxuICAgIGFzeW5jLmZpbHRlckxpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID1cbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcblxuICAgIGZ1bmN0aW9uIF9yZWplY3QoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBfZmlsdGVyKGVhY2hmbiwgYXJyLCBmdW5jdGlvbih2YWx1ZSwgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgY2IoIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoZWFjaGZuLCBjaGVjaywgZ2V0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2IpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSBjYihnZXRSZXN1bHQoZmFsc2UsIHZvaWQgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWUoeCwgXywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNiKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2IgJiYgY2hlY2sodikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGdldFJlc3VsdCh0cnVlLCB4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGl0ZXJhdG9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGxpbWl0LCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBsaW1pdDtcbiAgICAgICAgICAgICAgICBlYWNoZm4oYXJyLCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMuYW55ID1cbiAgICBhc3luYy5zb21lID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIHRvQm9vbCwgaWRlbnRpdHkpO1xuXG4gICAgYXN5bmMuc29tZUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5hbGwgPVxuICAgIGFzeW5jLmV2ZXJ5ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIG5vdElkLCBub3RJZCk7XG5cbiAgICBhc3luYy5ldmVyeUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgbm90SWQsIG5vdElkKTtcblxuICAgIGZ1bmN0aW9uIF9maW5kR2V0UmVzdWx0KHYsIHgpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIGFzeW5jLmRldGVjdCA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mU2VyaWVzLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdExpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgaWRlbnRpdHksIF9maW5kR2V0UmVzdWx0KTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoY29tcGFyYXRvciksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgb3B0aW9uYWwsIHNoaWZ0IHRoZSBhcmdzLlxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHJlbWFpbmluZ1Rhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoZm4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gX2luZGV4T2YobGlzdGVuZXJzLCBmbik7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgX2FycmF5RWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2FycmF5RWFjaChrZXlzLCBmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSBfaXNBcnJheSh0YXNrc1trXSkgPyB0YXNrc1trXTogW3Rhc2tzW2tdXTtcbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBfZm9yRWFjaE9mKHJlc3VsdHMsIGZ1bmN0aW9uKHZhbCwgcmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCB0YXNrLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWFkLWxvY2tzXG4gICAgICAgICAgICB2YXIgbGVuID0gcmVxdWlyZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGRlcDtcbiAgICAgICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgICAgICAgIGlmICghKGRlcCA9IHRhc2tzW3JlcXVpcmVzW2xlbl1dKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhcyBpbmV4aXN0YW50IGRlcGVuZGVuY3knKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc0FycmF5KGRlcCkgJiYgX2luZGV4T2YoZGVwLCBrKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGN5Y2xpYyBkZXBlbmRlbmNpZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kgJiYgX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcblxuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHRpbWVzOiBERUZBVUxUX1RJTUVTLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IERFRkFVTFRfSU5URVJWQUxcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgdCA9PT0gJ251bWJlcicpe1xuICAgICAgICAgICAgICAgIGFjYy50aW1lcyA9IHBhcnNlSW50KHQsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiB0ID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodC50aW1lcywgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICAgICAgYWNjLmludGVydmFsID0gcGFyc2VJbnQodC5pbnRlcnZhbCwgMTApIHx8IERFRkFVTFRfSU5URVJWQUw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYXJndW1lbnQgdHlwZSBmb3IgXFwndGltZXNcXCc6ICcgKyB0eXBlb2YgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDEgfHwgbGVuZ3RoID4gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyAtIG11c3QgYmUgZWl0aGVyICh0YXNrKSwgKHRhc2ssIGNhbGxiYWNrKSwgKHRpbWVzLCB0YXNrKSBvciAodGltZXMsIHRhc2ssIGNhbGxiYWNrKScpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA8PSAyICYmIHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGltZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0cywgdGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgb3B0cy50YXNrID0gdGFzaztcblxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVkVGFzayh3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQodGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5SW50ZXJ2YWwoaW50ZXJ2YWwpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKG9wdHMudGltZXMpIHtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5hbEF0dGVtcHQgPSAhKG9wdHMudGltZXMtPTEpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KG9wdHMudGFzaywgZmluYWxBdHRlbXB0KSk7XG4gICAgICAgICAgICAgICAgaWYoIWZpbmFsQXR0ZW1wdCAmJiBvcHRzLmludGVydmFsID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlJbnRlcnZhbChvcHRzLmludGVydmFsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBvcHRzLmNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNhbGxiYWNrIGlzIHBhc3NlZCwgcnVuIHRoaXMgYXMgYSBjb250cm9sbCBmbG93XG4gICAgICAgIHJldHVybiBvcHRzLmNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrO1xuICAgIH07XG5cbiAgICBhc3luYy53YXRlcmZhbGwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGlmICghX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3cmFwSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCh3cmFwSXRlcmF0b3IobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbnN1cmVBc3luYyhpdGVyYXRvcikuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3BhcmFsbGVsKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgbm9vcDtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsIGZ1bmN0aW9uICh0YXNrLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0YXNrKF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLnBhcmFsbGVsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoYXN5bmMuZWFjaE9mLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24odGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoX2VhY2hPZkxpbWl0KGxpbWl0KSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2ZTZXJpZXMsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VDYWxsYmFjayhpbmRleCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYWtlQ2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIGFzeW5jLmFwcGx5ID0gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGNhbGxBcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoY2FsbEFyZ3MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb25jYXQoZWFjaGZuLCBhcnIsIGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIGZuKHgsIGZ1bmN0aW9uIChlcnIsIHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICB2YXIgbmV4dCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdC5hcHBseSh0aGlzLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihuZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gKytjYWxscyA8PSAxIHx8IHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9VbnRpbCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmR1cmluZyA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hlY2spO1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cnV0aCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0KGNoZWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9EdXJpbmcgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIGFzeW5jLmR1cmluZyhmdW5jdGlvbihuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY2FsbHMrKyA8IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBtdXN0IG5vdCBiZSB6ZXJvJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sgfHwgbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBxLnRhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfbmV4dChxLCB0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgd29ya2VycyAtPSAxO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHdvcmtlcnNMaXN0LCBmdW5jdGlvbiAod29ya2VyLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtlciA9PT0gdGFzayAmJiAhcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgdGFza3M6IFtdLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IGNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbm9vcCxcbiAgICAgICAgICAgIGVtcHR5OiBub29wLFxuICAgICAgICAgICAgZHJhaW46IG5vb3AsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHEuZHJhaW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHRydWUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFxLnBhdXNlZCAmJiB3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSh3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBxLnBheWxvYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEucGF5bG9hZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEudGFza3MubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfbWFwKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaCh0YXNrc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UoX25leHQocSwgdGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdW1lQ291bnQgPSBNYXRoLm1pbihxLmNvbmN1cnJlbmN5LCBxLnRhc2tzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSByZXN1bWVDb3VudDsgdysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgcSA9IF9xdWV1ZShmdW5jdGlvbiAoaXRlbXMsIGNiKSB7XG4gICAgICAgICAgICB3b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICAgIGVuZCA9IHNlcXVlbmNlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGJlZyArICgoZW5kIC0gYmVnICsgMSkgPj4+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3BcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoX2JpbmFyeVNlYXJjaChxLnRhc2tzLCBpdGVtLCBfY29tcGFyZVRhc2tzKSArIDEsIDAsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBxLnVuc2hpZnQ7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLmNhcmdvID0gZnVuY3Rpb24gKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gX3F1ZXVlKHdvcmtlciwgMSwgcGF5bG9hZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9jb25zb2xlX2ZuKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGlkZW50aXR5O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIG1lbW9pemVkKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGtleSBpbiBtZW1vKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF90aW1lcyhtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBtYXBwZXIoX3JhbmdlKGNvdW50KSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy50aW1lcyA9IF90aW1lcyhhc3luYy5tYXApO1xuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gX3RpbWVzKGFzeW5jLm1hcFNlcmllcyk7XG4gICAgYXN5bmMudGltZXNMaW1pdCA9IGZ1bmN0aW9uIChjb3VudCwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMubWFwTGltaXQoX3JhbmdlKGNvdW50KSwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBub29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW19yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgbmV4dGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfSldKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoYXQsIFtlcnJdLmNvbmNhdChyZXN1bHRzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5zZXEuYXBwbHkobnVsbCwgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBfYXBwbHlFYWNoKGVhY2hmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbihmbnMsIGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBnbyA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlYWNoZm4oZm5zLCBmdW5jdGlvbiAoZm4sIF8sIGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5hcHBseUVhY2ggPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZik7XG4gICAgYXN5bmMuYXBwbHlFYWNoU2VyaWVzID0gX2FwcGx5RWFjaChhc3luYy5lYWNoT2ZTZXJpZXMpO1xuXG5cbiAgICBhc3luYy5mb3JldmVyID0gZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZG9uZSA9IG9ubHlfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgdmFyIHRhc2sgPSBlbnN1cmVBc3luYyhmbik7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVBc3luYyhmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuXG4gICAgYXN5bmMuY29uc3RhbnQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICB2YXIgYXJncyA9IFtudWxsXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXN5bmMud3JhcFN5bmMgPVxuICAgIGFzeW5jLmFzeW5jaWZ5ID0gZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAoX2lzT2JqZWN0KHJlc3VsdCkgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLm1lc3NhZ2UgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBOb2RlLmpzXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG4gICAgfVxuICAgIC8vIEFNRCAvIFJlcXVpcmVKU1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG5cdCAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXG5cdCAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cblx0ICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSlcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cblx0ICogQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuXHQgKiBVbmljb2RlIHN0cmluZy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gJ3huLS0nICsgZW5jb2RlKHN0cmluZylcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG5cdHB1bnljb2RlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHQndmVyc2lvbic6ICcxLjMuMicsXG5cdFx0LyoqXG5cdFx0ICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHRcdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMpIHtcblx0XHRcdC8vIGluIE5vZGUuanMsIGlvLmpzLCBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IHB1bnljb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5wdW55Y29kZSA9IHB1bnljb2RlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUpIHJldHVybiB0cmlhbmdsZXM7XG5cbiAgICB2YXIgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgc2l6ZTtcblxuICAgIGlmIChoYXNIb2xlcykgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKTtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG4gICAgICAgIG1pblggPSBtYXhYID0gZGF0YVswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xuICAgICAgICAgICAgeSA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIHNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIHNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgICAgICBpLCBqLCBsYXN0O1xuXG4gICAgLy8gY2FsY3VsYXRlIG9yaWdpbmFsIHdpbmRpbmcgb3JkZXIgb2YgYSBwb2x5Z29uIHJpbmdcbiAgICBmb3IgKGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cblxuICAgIC8vIGxpbmsgcG9pbnRzIGludG8gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuICAgIGlmIChjbG9ja3dpc2UgPT09IChzdW0gPiAwKSkge1xuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgc2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChzaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0aWNlIGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZWFyLCB0cmlhbmdsZXMsIGRpbSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDIpO1xuXG4gICAgICAgICAgICAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgd2hpbGUgKHAgIT09IGVhci5wcmV2KSB7XG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG4gICAgdmFyIG1pblRYID0gYS54IDwgYi54ID8gKGEueCA8IGMueCA/IGEueCA6IGMueCkgOiAoYi54IDwgYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoYS55IDwgYy55ID8gYS55IDogYy55KSA6IChiLnkgPCBjLnkgPyBiLnkgOiBjLnkpLFxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1heFRZID0gYS55ID4gYi55ID8gKGEueSA+IGMueSA/IGEueSA6IGMueSkgOiAoYi55ID4gYy55ID8gYi55IDogYy55KTtcblxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgdmFyIG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBzaXplKSxcbiAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgdmFyIHAgPSBlYXIubmV4dFo7XG5cbiAgICB3aGlsZSAocCAmJiBwLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgcCA9IGVhci5wcmV2WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIC8vIGEgc2VsZi1pbnRlcnNlY3Rpb24gd2hlcmUgZWRnZSAodltpLTFdLHZbaV0pIGludGVyc2VjdHMgKHZbaSsxXSx2W2krMl0pXG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcblxuICAgICAgICAgICAgcCA9IHN0YXJ0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBwO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBzdG9wID0gbSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtLm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBtLnggJiZcbiAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoaHkgPCBtLnkgPyBoeCA6IHF4LCBoeSwgbS54LCBtLnksIGh5IDwgbS55ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxU2l6ZSA9PT0gMCB8fCAhcSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwLnogPD0gcS56KSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBzaXplIG9mIHRoZSBkYXRhIGJvdW5kaW5nIGJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlXG4gICAgeCA9IDMyNzY3ICogKHggLSBtaW5YKSAvIHNpemU7XG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAvIHNpemU7XG5cbiAgICB4ID0gKHggfCAoeCA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB4ID0gKHggfCAoeCA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnggPCBsZWZ0bW9zdC54KSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGVxdWFscyhhLCBiKSB8fCBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmXG4gICAgICAgICAgIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYik7XG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgcmV0dXJuIGFyZWEocDEsIHExLCBwMikgPiAwICE9PSBhcmVhKHAxLCBxMSwgcTIpID4gMCAmJlxuICAgICAgICAgICBhcmVhKHAyLCBxMiwgcDEpID4gMCAhPT0gYXJlYShwMiwgcTIsIHExKSA+IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGljZSBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0aWNlIG5vZGVzIGluIGEgcG9seWdvbiByaW5nXG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZVxuICAgIHRoaXMueiA9IG51bGw7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG5cbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuICAgIHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1xuLy8gV2Ugc3RvcmUgb3VyIEVFIG9iamVjdHMgaW4gYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gYH5gIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IG92ZXJyaWRkZW4gb3Jcbi8vIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vIFdlIGFsc28gYXNzdW1lIHRoYXQgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBldmVudCBuYW1lXG4vLyBpcyBhbiBFUzYgU3ltYm9sLlxuLy9cbnZhciBwcmVmaXggPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJyA/ICd+JyA6IGZhbHNlO1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIEV2ZW50RW1pdHRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgQ29udGV4dCBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgZW1pdCBvbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIE1pbmltYWwgRXZlbnRFbWl0dGVyIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkgeyAvKiBOb3RoaW5nIHRvIHNldCAqLyB9XG5cbi8qKlxuICogSG9sZHMgdGhlIGFzc2lnbmVkIEV2ZW50RW1pdHRlcnMgYnkgbmFtZS5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiBhIGxpc3Qgb2YgYXNzaWduZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZXhpc3RzIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7QXJyYXl8Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50LCBleGlzdHMpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGF2YWlsYWJsZSA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoZXhpc3RzKSByZXR1cm4gISFhdmFpbGFibGU7XG4gIGlmICghYXZhaWxhYmxlKSByZXR1cm4gW107XG4gIGlmIChhdmFpbGFibGUuZm4pIHJldHVybiBbYXZhaWxhYmxlLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGF2YWlsYWJsZS5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBhdmFpbGFibGVbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIEVtaXQgYW4gZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSW5kaWNhdGlvbiBpZiB3ZSd2ZSBlbWl0dGVkIGFuIGV2ZW50LlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyBFdmVudExpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdG9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgdGhpcylcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgdGhpcy5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lcjtcbiAgZWxzZSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XS5mbikgdGhpcy5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gICAgZWxzZSB0aGlzLl9ldmVudHNbZXZ0XSA9IFtcbiAgICAgIHRoaXMuX2V2ZW50c1tldnRdLCBsaXN0ZW5lclxuICAgIF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGFuIEV2ZW50TGlzdGVuZXIgdGhhdCdzIG9ubHkgY2FsbGVkIG9uY2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzLCB0cnVlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2Ugd2FudCB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgdGhhdCB3ZSBuZWVkIHRvIGZpbmQuXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IE9ubHkgcmVtb3ZlIGxpc3RlbmVycyBtYXRjaGluZyB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25jZSBsaXN0ZW5lcnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBldmVudHMgPSBbXTtcblxuICBpZiAoZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgIGxpc3RlbmVycy5mbiAhPT0gZm5cbiAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVycy5vbmNlKVxuICAgICAgICB8fCAoY29udGV4dCAmJiBsaXN0ZW5lcnMuY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuXG4gICAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKVxuICAgICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAvL1xuICBpZiAoZXZlbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW2V2dF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgb3Igb25seSB0aGUgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmVycyBmb3IuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKGV2ZW50KSBkZWxldGUgdGhpcy5fZXZlbnRzW3ByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRdO1xuICBlbHNlIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFwcGx5IGFueW1vcmUuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4ndXNlIHN0cmljdCc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiFcbiAqIGFzeW5jXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jXG4gKlxuICogQ29weXJpZ2h0IDIwMTAtMjAxNCBDYW9sYW4gTWNNYWhvblxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbi8qanNoaW50IG9uZXZhcjogZmFsc2UsIGluZGVudDo0ICovXG4vKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cbihmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXN5bmMgPSB7fTtcblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcm9vdCwgcHJldmlvdXNfYXN5bmM7XG5cbiAgICByb290ID0gdGhpcztcbiAgICBpZiAocm9vdCAhPSBudWxsKSB7XG4gICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWQpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkocm9vdCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8gY3Jvc3MtYnJvd3NlciBjb21wYXRpYmxpdHkgZnVuY3Rpb25zIC8vLy9cblxuICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgdmFyIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG5cbiAgICB2YXIgX2VhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBfbWFwID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgaWYgKGFyci5tYXApIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIubWFwKGl0ZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IoeCwgaSwgYSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHZhciBfcmVkdWNlID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIG1lbW8pIHtcbiAgICAgICAgaWYgKGFyci5yZWR1Y2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGl0ZXJhdG9yLCBtZW1vKTtcbiAgICAgICAgfVxuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICBtZW1vID0gaXRlcmF0b3IobWVtbywgeCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuXG4gICAgdmFyIF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgX2VhY2goYXJyLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgb25seV9vbmNlKGRvbmUpICk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2ggPSBhc3luYy5lYWNoO1xuXG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICB2YXIgaXRlcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGFycltjb21wbGV0ZWRdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID0gYXN5bmMuZWFjaFNlcmllcztcblxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZuID0gX2VhY2hMaW1pdChsaW1pdCk7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIFthcnIsIGl0ZXJhdG9yLCBjYWxsYmFja10pO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaExpbWl0ID0gYXN5bmMuZWFjaExpbWl0O1xuXG4gICAgdmFyIF9lYWNoTGltaXQgPSBmdW5jdGlvbiAobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgaWYgKCFhcnIubGVuZ3RoIHx8IGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVwbGVuaXNoICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiBzdGFydGVkIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoYXJyW3N0YXJ0ZWQgLSAxXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB2YXIgZG9QYXJhbGxlbCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvUGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKGxpbWl0LCBmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFtfZWFjaExpbWl0KGxpbWl0KV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBkb1NlcmllcyA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoU2VyaWVzXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBfYXN5bmNNYXAgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1t4LmluZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9tYXBMaW1pdChsaW1pdCkoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB2YXIgX21hcExpbWl0ID0gZnVuY3Rpb24obGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGRvUGFyYWxsZWxMaW1pdChsaW1pdCwgX2FzeW5jTWFwKTtcbiAgICB9O1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihtZW1vLCB4LCBmdW5jdGlvbiAoZXJyLCB2KSB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGluamVjdCBhbGlhc1xuICAgIGFzeW5jLmluamVjdCA9IGFzeW5jLnJlZHVjZTtcbiAgICAvLyBmb2xkbCBhbGlhc1xuICAgIGFzeW5jLmZvbGRsID0gYXN5bmMucmVkdWNlO1xuXG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSkucmV2ZXJzZSgpO1xuICAgICAgICBhc3luYy5yZWR1Y2UocmV2ZXJzZWQsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICAvLyBmb2xkciBhbGlhc1xuICAgIGFzeW5jLmZvbGRyID0gYXN5bmMucmVkdWNlUmlnaHQ7XG5cbiAgICB2YXIgX2ZpbHRlciA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LnZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG4gICAgYXN5bmMuZmlsdGVyU2VyaWVzID0gZG9TZXJpZXMoX2ZpbHRlcik7XG4gICAgLy8gc2VsZWN0IGFsaWFzXG4gICAgYXN5bmMuc2VsZWN0ID0gYXN5bmMuZmlsdGVyO1xuICAgIGFzeW5jLnNlbGVjdFNlcmllcyA9IGFzeW5jLmZpbHRlclNlcmllcztcblxuICAgIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLnJlamVjdCA9IGRvUGFyYWxsZWwoX3JlamVjdCk7XG4gICAgYXN5bmMucmVqZWN0U2VyaWVzID0gZG9TZXJpZXMoX3JlamVjdCk7XG5cbiAgICB2YXIgX2RldGVjdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIG1haW5fY2FsbGJhY2spIHtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKHgpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZGV0ZWN0ID0gZG9QYXJhbGxlbChfZGV0ZWN0KTtcbiAgICBhc3luYy5kZXRlY3RTZXJpZXMgPSBkb1NlcmllcyhfZGV0ZWN0KTtcblxuICAgIGFzeW5jLnNvbWUgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbnkgYWxpYXNcbiAgICBhc3luYy5hbnkgPSBhc3luYy5zb21lO1xuXG4gICAgYXN5bmMuZXZlcnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghdikge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gYWxsIGFsaWFzXG4gICAgYXN5bmMuYWxsID0gYXN5bmMuZXZlcnk7XG5cbiAgICBhc3luYy5zb3J0QnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgYXN5bmMubWFwKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAoZXJyLCBjcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHt2YWx1ZTogeCwgY3JpdGVyaWE6IGNyaXRlcmlhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoZm4pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGhcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldID09PSBmbikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdGFza0NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtYWluaW5nVGFza3MtLVxuICAgICAgICAgICAgX2VhY2gobGlzdGVuZXJzLnNsaWNlKDApLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIHZhciB0aGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZmluYWwgY2FsbGJhY2sgZnJvbSBjYWxsaW5nIGl0c2VsZiBpZiBpdCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdGhlQ2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9lYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKF9rZXlzKHJlc3VsdHMpLCBmdW5jdGlvbihya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIHN1YnNlcXVlbnQgZXJyb3JzIGhpdHRpbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUodGFza0NvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCBNYXRoLmFicyh0YXNrLmxlbmd0aCAtIDEpKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucmV0cnkgPSBmdW5jdGlvbih0aW1lcywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIERFRkFVTFRfVElNRVMgPSA1O1xuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcbiAgICAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHRpbWVzIG5vdCBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICAgICAgdGltZXMgPSBERUZBVUxUX1RJTUVTO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lcyBpcyBhIG51bWJlclxuICAgICAgICB0aW1lcyA9IHBhcnNlSW50KHRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgdmFyIHdyYXBwZWRUYXNrID0gZnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkUmVzdWx0cykge1xuICAgICAgICAgICAgdmFyIHJldHJ5QXR0ZW1wdCA9IGZ1bmN0aW9uKHRhc2ssIGZpbmFsQXR0ZW1wdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKGZ1bmN0aW9uKGVyciwgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKCFlcnIgfHwgZmluYWxBdHRlbXB0LCB7ZXJyOiBlcnIsIHJlc3VsdDogcmVzdWx0fSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXBwZWRSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcykge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KHRhc2ssICEodGltZXMtPTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBjYWxsYmFjaykoZGF0YS5lcnIsIGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrXG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJdGVyYXRvciA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGZ1bmN0aW9uKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGVhY2hmbi5tYXAodGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGVhY2hmbi5lYWNoKF9rZXlzKHRhc2tzKSwgZnVuY3Rpb24gKGssIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGFza3Nba10oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogYXN5bmMubWFwLCBlYWNoOiBhc3luYy5lYWNoIH0sIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogX21hcExpbWl0KGxpbWl0KSwgZWFjaDogX2VhY2hMaW1pdChsaW1pdCkgfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICBhc3luYy5tYXBTZXJpZXModGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5pdGVyYXRvciA9IGZ1bmN0aW9uICh0YXNrcykge1xuICAgICAgICB2YXIgbWFrZUNhbGxiYWNrID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmbi5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCB0YXNrcy5sZW5ndGggLSAxKSA/IG1ha2VDYWxsYmFjayhpbmRleCArIDEpOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KFxuICAgICAgICAgICAgICAgIG51bGwsIGFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgX2NvbmNhdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHIgPSByLmNvbmNhdCh5IHx8IFtdKTtcbiAgICAgICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRlc3QoKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLndoaWxzdCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvV2hpbHN0ID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAodGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMudW50aWwodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAoIXRlc3QuYXBwbHkobnVsbCwgYXJncykpIHtcbiAgICAgICAgICAgICAgICBhc3luYy5kb1VudGlsKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcG9zLCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxLnNhdHVyYXRlZCAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHEuZHJhaW4gPSBudWxsO1xuICAgICAgICAgICAgICBxLnRhc2tzID0gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gcS50YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocS5lbXB0eSAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLmRyYWluICYmIHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UobmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcih0YXNrLmRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSB0cnVlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSBxLmNvbmN1cnJlbmN5OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMucHJpb3JpdHlRdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG5cbiAgICAgICAgZnVuY3Rpb24gX2NvbXBhcmVUYXNrcyhhLCBiKXtcbiAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgIHZhciBiZWcgPSAtMSxcbiAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBzZXF1ZW5jZVttaWRdKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGJlZyA9IG1pZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiZWc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG5vcm1hbCBxdWV1ZVxuICAgICAgICB2YXIgcSA9IGFzeW5jLnF1ZXVlKHdvcmtlciwgY29uY3VycmVuY3kpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciB3b3JraW5nICAgICA9IGZhbHNlLFxuICAgICAgICAgICAgdGFza3MgICAgICAgPSBbXTtcblxuICAgICAgICB2YXIgY2FyZ28gPSB7XG4gICAgICAgICAgICB0YXNrczogdGFza3MsXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBudWxsLFxuICAgICAgICAgICAgZW1wdHk6IG51bGwsXG4gICAgICAgICAgICBkcmFpbjogbnVsbCxcbiAgICAgICAgICAgIGRyYWluZWQ6IHRydWUsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZ28uc2F0dXJhdGVkICYmIHRhc2tzLmxlbmd0aCA9PT0gcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ28uc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoY2FyZ28ucHJvY2Vzcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcygpIHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2luZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2FyZ28uZHJhaW4gJiYgIWNhcmdvLmRyYWluZWQpIGNhcmdvLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvLmRyYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRzID0gdHlwZW9mIHBheWxvYWQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0YXNrcy5zcGxpY2UoMCwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tzLnNwbGljZSgwLCB0YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRzID0gX21hcCh0cywgZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmKGNhcmdvLmVtcHR5KSBjYXJnby5lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHdvcmtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtlcihkcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JraW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKHRzLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjYXJnbztcbiAgICB9O1xuXG4gICAgdmFyIF9jb25zb2xlX2ZuID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZWFjaChhcmdzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbmFtZV0oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIG1lbW9ba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICBxW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfTtcblxuICAgIGFzeW5jLnVubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb3VudGVyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jLm1hcFNlcmllcyhjb3VudGVyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXEgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXN5bmMucmVkdWNlKGZucywgYXJncywgZnVuY3Rpb24gKG5ld2FyZ3MsIGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KFtmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1dKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy5jb21wb3NlID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICB2YXIgX2FwcGx5RWFjaCA9IGZ1bmN0aW9uIChlYWNoZm4sIGZucyAvKmFyZ3MuLi4qLykge1xuICAgICAgICB2YXIgZ28gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzLmNvbmNhdChbY2JdKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgICAgIHJldHVybiBnby5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuYXBwbHlFYWNoID0gZG9QYXJhbGxlbChfYXBwbHlFYWNoKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBkb1NlcmllcyhfYXBwbHlFYWNoKTtcblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbihuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsInZhciBhc3luYyAgICAgICA9IHJlcXVpcmUoJ2FzeW5jJyksXG4gICAgdXJsUGFyc2VyICAgPSByZXF1aXJlKCd1cmwnKSxcbiAgICBSZXNvdXJjZSAgICA9IHJlcXVpcmUoJy4vUmVzb3VyY2UnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgbXVsdGlwbGUgcmVzb3VyY2VzIHRvIGxvYWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KSB7XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICBjb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByb2dyZXNzIHBlcmNlbnQgb2YgdGhlIGxvYWRlciBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRpbmcgc3RhdGUgb2YgdGhlIGxvYWRlciwgdHJ1ZSBpZiBpdCBpcyBjdXJyZW50bHkgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdG90YWwgcHJvZ3Jlc3MgdGhhdCBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGJlZm9yZSBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaWRkbGV3YXJlIHRvIHJ1biBhZnRlciBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfbG9hZFJlc291cmNlYCBmdW5jdGlvbiBib3VuZCB3aXRoIHRoaXMgb2JqZWN0IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kTG9hZFJlc291cmNlID0gdGhpcy5fbG9hZFJlc291cmNlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkxvYWRgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkxvYWQgPSB0aGlzLl9vbkxvYWQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvdXJjZSBidWZmZXIgdGhhdCBmaWxscyB1bnRpbCBgbG9hZGAgaXMgY2FsbGVkIHRvIHN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB0cmFjayBsb2FkIGNvbXBsZXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9udW1Ub0xvYWQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlcyB3YWl0aW5nIHRvIGJlIGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2VbXX1cbiAgICAgKi9cbiAgICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX2JvdW5kTG9hZFJlc291cmNlLCBjb25jdXJyZW5jeSk7XG5cbiAgICAvKipcbiAgICAgKiBBbGwgdGhlIHJlc291cmNlcyBmb3IgdGhpcyBsb2FkZXIga2V5ZWQgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIFJlc291cmNlPn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgb3IgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwcm9ncmVzc1xuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGVycm9yZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGxvYWRlciBiZWdpbnMgdG8gcHJvY2VzcyB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBxdWV1ZWQgcmVzb3VyY2VzIGFsbCBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbi8qKlxuICogQWRkcyBhIHJlc291cmNlIChvciBtdWx0aXBsZSByZXNvdXJjZXMpIHRvIHRoZSBsb2FkZXIgcXVldWUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gdGFrZSBhIHdpZGUgdmFyaWV0eSBvZiBkaWZmZXJlbnQgcGFyYW1ldGVycy4gVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBhbHdheXNcbiAqIHJlcXVpcmVkIHRoZSB1cmwgdG8gbG9hZC4gQWxsIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOlxuICpcbiAqIGBgYGpzXG4gKiBsb2FkZXJcbiAqICAgICAvLyBub3JtYWwgcGFyYW0gc3ludGF4XG4gKiAgICAgLmFkZCgna2V5JywgJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJywgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCgnaHR0cDovLy4uLicpXG4gKlxuICogICAgIC8vIG9iamVjdCBzeW50YXhcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgbmFtZTogJ2tleTInLFxuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MycsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9XG4gKiAgICAgfSlcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgdXJsOiAnaHR0cHM6Ly8uLi4nLFxuICogICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7fSxcbiAqICAgICAgICAgY3Jvc3NPcmlnaW46IHRydWVcbiAqICAgICB9KVxuICpcbiAqICAgICAvLyB5b3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBvYmplY3RzIG9yIHVybHMgb3IgYm90aFxuICogICAgIC5hZGQoW1xuICogICAgICAgICB7IG5hbWU6ICdrZXk0JywgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgIHsgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgICdodHRwOi8vLi4uJ1xuICogICAgIF0pO1xuICogYGBgXG4gKlxuICogQGFsaWFzIGVucXVldWVcbiAqIEBwYXJhbSBbbmFtZV0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQsIGlmIG5vdCBwYXNzZWQgdGhlIHVybCBpcyB1c2VkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCByZWxhdGl2ZSB0byB0aGUgYmFzZVVybCBvZiB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7Ym9vbGVhbn0gSXMgdGhpcyByZXF1ZXN0IGNyb3NzLW9yaWdpbj8gRGVmYXVsdCBpcyB0byBkZXRlcm1pbmUgYXV0b21hdGljYWxseS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5sb2FkVHlwZT1SZXNvdXJjZS5MT0FEX1RZUEUuWEhSXSB7UmVzb3VyY2UuWEhSX0xPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGlzIHNwZWNpZmljIHJlc291cmNlIGNvbXBsZXRlcyBsb2FkaW5nLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFkZCA9IExvYWRlci5wcm90b3R5cGUuZW5xdWV1ZSA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIGNiKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIG9mIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hZGQobmFtZVtpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBpZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluc3RlYWQgb2YgcGFyYW1zXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYiA9IHVybCB8fCBuYW1lLmNhbGxiYWNrIHx8IG5hbWUub25Db21wbGV0ZTtcbiAgICAgICAgb3B0aW9ucyA9IG5hbWU7XG4gICAgICAgIHVybCA9IG5hbWUudXJsO1xuICAgICAgICBuYW1lID0gbmFtZS5uYW1lIHx8IG5hbWUua2V5IHx8IG5hbWUudXJsO1xuICAgIH1cblxuICAgIC8vIGNhc2Ugd2hlcmUgbm8gbmFtZSBpcyBwYXNzZWQgc2hpZnQgYWxsIGFyZ3Mgb3ZlciBieSBvbmUuXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHVybDtcbiAgICAgICAgdXJsID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBzaGlmdGVkIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIHVybC5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB1cmwgcGFzc2VkIHRvIGFkZCByZXNvdXJjZSB0byBsb2FkZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gb3B0aW9ucyBhcmUgb3B0aW9uYWwgc28gcGVvcGxlIG1pZ2h0IHBhc3MgYSBmdW5jdGlvbiBhbmQgbm8gb3B0aW9uc1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHJlc291cmNlIGFscmVhZHkgZXhpc3RzLlxuICAgIGlmICh0aGlzLnJlc291cmNlc1tuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc291cmNlIHdpdGggbmFtZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgIH1cblxuICAgIC8vIGFkZCBiYXNlIHVybCBpZiB0aGlzIGlzbid0IGFuIGFic29sdXRlIHVybFxuICAgIHVybCA9IHRoaXMuX2hhbmRsZUJhc2VVcmwodXJsKTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgc3RvcmUgdGhlIHJlc291cmNlXG4gICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0gPSBuZXcgUmVzb3VyY2UobmFtZSwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0ub25jZSgnYWZ0ZXJNaWRkbGV3YXJlJywgY2IpO1xuICAgIH1cblxuICAgIHRoaXMuX251bVRvTG9hZCsrO1xuXG4gICAgLy8gaWYgYWxyZWFkeSBsb2FkaW5nIGFkZCBpdCB0byB0aGUgd29ya2VyIHF1ZXVlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAoMTAwIC0gdGhpcy5wcm9ncmVzcykgLyAodGhpcy5fcXVldWUubGVuZ3RoKCkgKyB0aGlzLl9xdWV1ZS5ydW5uaW5nKCkpO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgYnVmZmVyIGl0IHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSBsYXRlclxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9idWZmZXIucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAxMDAgLyB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuTG9hZGVyLnByb3RvdHlwZS5faGFuZGxlQmFzZVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFyc2VkVXJsID0gdXJsUGFyc2VyLnBhcnNlKHVybCk7XG5cbiAgICAvLyBhYnNvbHV0ZSB1cmwsIGp1c3QgdXNlIGl0IGFzIGlzLlxuICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgfHwgcGFyc2VkVXJsLnBhdGhuYW1lLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBpZiBiYXNlVXJsIGRvZXNuJ3QgZW5kIGluIHNsYXNoIGFuZCB1cmwgZG9lc24ndCBzdGFydCB3aXRoIHNsYXNoLCB0aGVuIGFkZCBhIHNsYXNoIGluYmV0d2VlblxuICAgIGlmIChcbiAgICAgICAgdGhpcy5iYXNlVXJsLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmJhc2VVcmwubGFzdEluZGV4T2YoJy8nKSAhPT0gdGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgdXJsLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyAnLycgKyB1cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsICsgdXJsO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBTZXRzIHVwIGEgbWlkZGxld2FyZSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuICpiZWZvcmUqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyBwcmVcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYmVmb3JlID0gTG9hZGVyLnByb3RvdHlwZS5wcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLnB1c2goZm4pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmFmdGVyKiB0aGVcbiAqIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqXG4gKiBAYWxpYXMgdXNlXG4gKiBAcGFyYW0gbWlkZGxld2FyZSB7ZnVuY3Rpb259IFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFmdGVyID0gTG9hZGVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9hZnRlck1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoZSBxdWV1ZSBvZiB0aGUgbG9hZGVyIHRvIHByZXBhcmUgZm9yIGEgbmV3IGxvYWQuXG4gKlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvLyB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG4gICAgLy8gdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gICAgdGhpcy5fcXVldWUuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGxvYWRpbmcgdGhlIHF1ZXVlZCByZXNvdXJjZXMuXG4gKlxuICogQGZpcmVzIHN0YXJ0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgYGNvbXBsZXRlYCBldmVudC5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgLy8gcmVnaXN0ZXIgY29tcGxldGUgY2FsbGJhY2sgaWYgdGhleSBwYXNzIG9uZVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcXVldWUgaGFzIGFscmVhZHkgc3RhcnRlZCB3ZSBhcmUgZG9uZSBoZXJlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm90aWZ5IG9mIHN0YXJ0XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gc3RhcnQgdGhlIGludGVybmFsIHF1ZXVlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLl9idWZmZXJbaV0pO1xuICAgIH1cblxuICAgIC8vIGVtcHR5IHRoZSBidWZmZXJcbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBMb2FkcyBhIHNpbmdsZSByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX2xvYWRSZXNvdXJjZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZGVxdWV1ZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHJlc291cmNlLl9kZXF1ZXVlID0gZGVxdWV1ZTtcblxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gcmVzb3VyY2Uub24oJ3Byb2dyZXNzJywgc2VsZi5lbWl0LmJpbmQoc2VsZiwgJ3Byb2dyZXNzJykpO1xuXG4gICAgICAgIHJlc291cmNlLmxvYWQoc2VsZi5fYm91bmRPbkxvYWQpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgb25jZSBlYWNoIHJlc291cmNlIGhhcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzLCB0aGlzLnJlc291cmNlcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBlYWNoIHRpbWUgYSByZXNvdXJjZXMgaXMgbG9hZGVkLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQGZpcmVzIGVycm9yXG4gKiBAZmlyZXMgbG9hZFxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgdGhpcy5wcm9ncmVzcyArPSB0aGlzLl9wcm9ncmVzc0NodW5rO1xuXG4gICAgdGhpcy5lbWl0KCdwcm9ncmVzcycsIHRoaXMsIHJlc291cmNlKTtcblxuICAgIC8vIHJ1biBtaWRkbGV3YXJlLCB0aGlzICptdXN0KiBoYXBwZW4gYmVmb3JlIGRlcXVldWUgc28gc3ViLWFzc2V0cyBnZXQgYWRkZWQgcHJvcGVybHlcbiAgICB0aGlzLl9ydW5NaWRkbGV3YXJlKHJlc291cmNlLCB0aGlzLl9hZnRlck1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzb3VyY2UuZW1pdCgnYWZ0ZXJNaWRkbGV3YXJlJywgcmVzb3VyY2UpO1xuXG4gICAgICAgIHRoaXMuX251bVRvTG9hZC0tO1xuXG4gICAgICAgIC8vIGRvIGNvbXBsZXRpb24gY2hlY2tcbiAgICAgICAgaWYgKHRoaXMuX251bVRvTG9hZCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgIHRoaXMuX29uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc291cmNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgcmVzb3VyY2UuZXJyb3IsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZCcsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuXG5cbiAgICAvLyByZW1vdmUgdGhpcyByZXNvdXJjZSBmcm9tIHRoZSBhc3luYyBxdWV1ZVxuICAgIHJlc291cmNlLl9kZXF1ZXVlKCk7XG59O1xuXG4vKipcbiAqIFJ1biBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvbiBhIHJlc291cmNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX3J1bk1pZGRsZXdhcmUgPSBmdW5jdGlvbiAocmVzb3VyY2UsIGZucywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzKGZucywgZnVuY3Rpb24gKGZuLCBuZXh0KSB7XG4gICAgICAgIGZuLmNhbGwoc2VsZiwgcmVzb3VyY2UsIG5leHQpO1xuICAgIH0sIGNiLmJpbmQodGhpcywgcmVzb3VyY2UpKTtcbn07XG5cbkxvYWRlci5MT0FEX1RZUEUgPSBSZXNvdXJjZS5MT0FEX1RZUEU7XG5Mb2FkZXIuWEhSX1JFQURZX1NUQVRFID0gUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFO1xuTG9hZGVyLlhIUl9SRVNQT05TRV9UWVBFID0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEU7XG4iLCJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIF91cmwgPSByZXF1aXJlKCd1cmwnKSxcbiAgICAvLyB0ZXN0cyBpcyBDT1JTIGlzIHN1cHBvcnRlZCBpbiBYSFIsIGlmIG5vdCB3ZSBuZWVkIHRvIHVzZSBYRFJcbiAgICB1c2VYZHIgPSAhISh3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiAobmV3IFhNTEh0dHBSZXF1ZXN0KCkpKSksXG4gICAgdGVtcEFuY2hvciA9IG51bGw7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgYSBzaW5nbGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnlcbiAqIGEgc2luZ2xlIFVSTC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBuYW1lIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCBmb3IgYXVkaW8vdmlkZW8gbG9hZHMgeW91IGNhbiBwYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMuXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5jcm9zc09yaWdpbl0ge3N0cmluZ3xib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5MT0FEX1RZUEV9IEhvdyBzaG91bGQgdGhpcyByZXNvdXJjZSBiZSBsb2FkZWQ/XG4gKiBAcGFyYW0gW29wdGlvbnMueGhyVHlwZT1SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ERUZBVUxUXSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IEhvdyBzaG91bGQgdGhlIGRhdGEgYmVpbmdcbiAqICAgICAgbG9hZGVkIGJlIGludGVycHJldGVkIHdoZW4gdXNpbmcgWEhSP1xuICogQHBhcmFtIFtvcHRpb25zLm1ldGFkYXRhXSB7b2JqZWN0fSBFeHRyYSBpbmZvIGZvciBtaWRkbGV3YXJlLlxuICovXG5mdW5jdGlvbiBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggbmFtZSBhbmQgdXJsIGFyZSByZXF1aXJlZCBmb3IgY29uc3RydWN0aW5nIGEgcmVzb3VyY2UuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVybCB1c2VkIHRvIGxvYWQgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHVybCBpcyBhIGRhdGEgdXJsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzRGF0YVVybCA9IHRoaXMudXJsLmluZGV4T2YoJ2RhdGE6JykgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSB0aGF0IHdhcyBsb2FkZWQgYnkgdGhlIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55fVxuICAgICAqL1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBvcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJ2Fub255bW91cycgOiBvcHRpb25zLmNyb3NzT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCBvZiBsb2FkaW5nIHRvIHVzZSBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlLkxPQURfVFlQRX1cbiAgICAgKi9cbiAgICB0aGlzLmxvYWRUeXBlID0gb3B0aW9ucy5sb2FkVHlwZSB8fCB0aGlzLl9kZXRlcm1pbmVMb2FkVHlwZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgdXNlZCB0byBsb2FkIHRoZSByZXNvdXJjZSB2aWEgWEhSLiBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMueGhyVHlwZSA9IG9wdGlvbnMueGhyVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgKGlmIGFueSkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFcnJvcn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBYSFIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLiBUaGlzIGlzIG9ubHkgc2V0XG4gICAgICogd2hlbiBgbG9hZFR5cGVgIGlzIGBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1hNTEh0dHBSZXF1ZXN0fVxuICAgICAqL1xuICAgIHRoaXMueGhyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMganNvbi4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNKc29uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIHhtbC4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNYbWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gaW1hZ2UgdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0ltYWdlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGFuIGF1ZGlvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNBdWRpbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhIHZpZGVvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNWaWRlbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBkZXF1ZXVlYCBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgYSBzdG9yYWdlIHBsYWNlIGZvciB0aGUgYXN5bmMgcXVldWUgZGVxdWV1ZSBtZXRob2RcbiAgICAgKiB1c2VkIHByaXZhdGVseSBieSB0aGUgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kZXF1ZXVlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tcGxldGVgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZENvbXBsZXRlID0gdGhpcy5jb21wbGV0ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25FcnJvcmAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25FcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uUHJvZ3Jlc3NgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MgPSB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyk7XG5cbiAgICAvLyB4aHIgY2FsbGJhY2tzXG4gICAgdGhpcy5fYm91bmRYaHJPbkVycm9yID0gdGhpcy5feGhyT25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25BYm9ydCA9IHRoaXMuX3hock9uQWJvcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9ib3VuZFhock9uTG9hZCA9IHRoaXMuX3hock9uTG9hZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0ID0gdGhpcy5feGRyT25UaW1lb3V0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJlc291cmNlIGJlaW5ncyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBlYWNoIHRpbWUgcHJvZ3Jlc3Mgb2YgdGhpcyByZXNvdXJjZSBsb2FkIHVwZGF0ZXMuXG4gICAgICogTm90IGFsbCByZXNvdXJjZXMgdHlwZXMgYW5kIGxvYWRlciBzeXN0ZW1zIGNhbiBzdXBwb3J0IHRoaXMgZXZlbnRcbiAgICAgKiBzbyBzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIElmIHRoZSByZXNvdXJjZVxuICAgICAqIGlzIGJlaW5nIGxvYWRlZCBvbiBhIG1vZGVybiBicm93c2VyLCB1c2luZyBYSFIsIGFuZCB0aGUgcmVtb3RlIHNlcnZlclxuICAgICAqIHByb3Blcmx5IHNldHMgQ29udGVudC1MZW5ndGggaGVhZGVycywgdGhlbiB0aGlzIHdpbGwgYmUgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHRoaXMgcmVzb3VyY2UgaGFzIGxvYWRlZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGl0IHdpbGxcbiAgICAgKiBiZSBpbiB0aGUgYGVycm9yYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb21wbGV0ZVxuICAgICAqIEBtZW1iZXJvZiBSZXNvdXJjZSNcbiAgICAgKi9cbn1cblxuUmVzb3VyY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblJlc291cmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlc291cmNlO1xubW9kdWxlLmV4cG9ydHMgPSBSZXNvdXJjZTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgcmVzb3VyY2UgYXMgY29tcGxldGUuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIGluIGEgd3JhcHBlciBvciBzb21ldGhpbmcuLi5ncm9zcy4uLi5cbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvcik7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgICBpZiAodGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGhyLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub250aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMueGhyLm9ucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25sb2FkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogS2lja3Mgb2ZmIGxvYWRpbmcgb2YgdGhpcyByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gaWYgYSBjYWxsYmFjayBpcyBzZXQsIGxpc3RlbiBmb3IgY29tcGxldGUgZXZlbnRcbiAgICBpZiAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luID09PSBmYWxzZSB8fCB0eXBlb2YgdGhpcy5jcm9zc09yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHRoaXMuX2RldGVybWluZUNyb3NzT3JpZ2luKHRoaXMudXJsKTtcbiAgICB9XG5cbiAgICBzd2l0Y2godGhpcy5sb2FkVHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRTpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRJbWFnZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuQVVESU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlZJREVPOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5YSFI6XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodXNlWGRyICYmIHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGRyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGhyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEltYWdlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLnNyYyA9IHRoaXMudXJsO1xuXG4gICAgdGhpcy5pc0ltYWdlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBIVE1MQXVkaW9FbGVtZW50IG9yIEhUTUxWaWRlb0VsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdhdWRpbycgJiYgdHlwZW9mIEF1ZGlvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQXVkaW8oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBlbGVtZW50ICcgKyB0eXBlKTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBmb3IgQ29jb29uSlMgQ2FudmFzKyBydW50aW1lLCBsYWNrcyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKVxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUykge1xuICAgICAgICB0aGlzLmRhdGEuc3JjID0gQXJyYXkuaXNBcnJheSh0aGlzLnVybCkgPyB0aGlzLnVybFswXSA6IHRoaXMudXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51cmwpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXJsLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybFtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1snaXMnICsgdHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSldID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUsIGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YS5sb2FkKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhNTEh0dHBSZXF1ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBzZXQgdGhlIHJlcXVlc3QgdHlwZSBhbmQgdXJsXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsLCB0cnVlKTtcblxuICAgIC8vIGxvYWQganNvbiBhcyB0ZXh0IGFuZCBwYXJzZSBpdCBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgLy8gKmNvdWdoKiBzYWZhcmkgKmNvdWdoKiBjYW4ndCBkZWFsIHdpdGggaXQuXG4gICAgaWYgKHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTiB8fCB0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHRoaXMueGhyVHlwZTtcbiAgICB9XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkLCBmYWxzZSk7XG5cbiAgICB4aHIuc2VuZCgpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBYRG9tYWluUmVxdWVzdC4gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdXBwb3J0IElFOSAoZ3Jvc3MpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhkciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhkciA9IHRoaXMueGhyID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7XG5cbiAgICAvLyBYRG9tYWluUmVxdWVzdCBoYXMgYSBmZXcgcXVpcmtzLiBPY2Nhc2lvbmFsbHkgaXQgd2lsbCBhYm9ydCByZXF1ZXN0c1xuICAgIC8vIEEgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbWFrZSBzdXJlIEFMTCBjYWxsYmFja3MgYXJlIHNldCBldmVuIGlmIG5vdCB1c2VkXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU3ODY5NjYveGRvbWFpbnJlcXVlc3QtYWJvcnRzLXBvc3Qtb24taWUtOVxuICAgIHhkci50aW1lb3V0ID0gNTAwMDtcblxuICAgIHhkci5vbmVycm9yID0gdGhpcy5fYm91bmRYaHJPbkVycm9yO1xuICAgIHhkci5vbnRpbWVvdXQgPSB0aGlzLl9ib3VuZFhkck9uVGltZW91dDtcbiAgICB4ZHIub25wcm9ncmVzcyA9IHRoaXMuX2JvdW5kT25Qcm9ncmVzcztcbiAgICB4ZHIub25sb2FkID0gdGhpcy5fYm91bmRYaHJPbkxvYWQ7XG5cbiAgICB4ZHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gIE5vdGU6IFRoZSB4ZHIuc2VuZCgpIGNhbGwgaXMgd3JhcHBlZCBpbiBhIHRpbWVvdXQgdG8gcHJldmVudCBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmZhY2Ugd2hlcmUgc29tZSByZXF1ZXN0cyBhcmUgbG9zdFxuICAgIC8vICBpZiBtdWx0aXBsZSBYRG9tYWluUmVxdWVzdHMgYXJlIGJlaW5nIHNlbnQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAvLyBTb21lIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9pc3N1ZXMvMTI0OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB4ZHIuc2VuZCgpO1xuICAgIH0sIDApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc291cmNlIHVzZWQgaW4gbG9hZGluZyB2aWEgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSBUaGUgZWxlbWVudCB0eXBlICh2aWRlbyBvciBhdWRpbykuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSBzb3VyY2UgVVJMIHRvIGxvYWQgZnJvbS5cbiAqIEBwYXJhbSBbbWltZV0ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSBvZiB0aGUgdmlkZW9cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fY3JlYXRlU291cmNlID0gZnVuY3Rpb24gKHR5cGUsIHVybCwgbWltZSkge1xuICAgIGlmICghbWltZSkge1xuICAgICAgICBtaW1lID0gdHlwZSArICcvJyArIHVybC5zdWJzdHIodXJsLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gdXJsO1xuICAgIHNvdXJjZS50eXBlID0gbWltZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgZXJyb3JzIG91dC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgZXJyb3IgZXZlbnQgZnJvbSB0aGUgZWxlbWVudCB0aGF0IGVtaXRzIGl0LlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgZWxlbWVudCB1c2luZyAnICsgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgcHJvZ3Jlc3MgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fb25Qcm9ncmVzcyA9ICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGVycm9yIGV2ZW50IGZpcmVzIGZvciB4aHIveGRyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RFcnJvckV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIHJlcVR5cGUodGhpcy54aHIpICsgJyBSZXF1ZXN0IGZhaWxlZC4gJyArXG4gICAgICAgICdTdGF0dXM6ICcgKyB0aGlzLnhoci5zdGF0dXMgKyAnLCB0ZXh0OiBcIicgKyB0aGlzLnhoci5zdGF0dXNUZXh0ICsgJ1wiJ1xuICAgICk7XG5cbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhbiBhYm9ydCBldmVudCBmaXJlcyBmb3IgeGhyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RBYm9ydEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3Qgd2FzIGFib3J0ZWQgYnkgdGhlIHVzZXIuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYSB0aW1lb3V0IGV2ZW50IGZpcmVzIGZvciB4ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGRyT25UaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgdGltZWQgb3V0LicpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gZGF0YSBzdWNjZXNzZnVsbHkgbG9hZHMgZnJvbSBhbiB4aHIveGRyIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdExvYWRFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGhyT25Mb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB4aHIgPSB0aGlzLnhocixcbiAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1cyAhPT0gdW5kZWZpbmVkID8geGhyLnN0YXR1cyA6IDIwMDsgLy9YRFIgaGFzIG5vIGAuc3RhdHVzYCwgYXNzdW1lIDIwMC5cblxuICAgIC8vIHN0YXR1cyBjYW4gYmUgMCB3aGVuIHVzaW5nIHRoZSBmaWxlOi8vIHByb3RvY29sLCBhbHNvIGNoZWNrIGlmIGEgcmVzcG9uc2Ugd2FzIGZvdW5kXG4gICAgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA0IHx8IChzdGF0dXMgPT09IDAgJiYgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkge1xuICAgICAgICAvLyBpZiB0ZXh0LCBqdXN0IHJldHVybiBpdFxuICAgICAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGpzb24sIHBhcnNlIGludG8ganNvbiBvYmplY3RcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0pzb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGxvYWRlZCBqc29uOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHhtbCwgcGFyc2UgaW50byBhbiB4bWwgZG9jdW1lbnQgb3IgZGl2IGVsZW1lbnRcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LkRPTVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhoci5yZXNwb25zZVRleHQsICd0ZXh0L3htbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZGl2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzWG1sID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIHhtbDonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlciB0eXBlcyBqdXN0IHJldHVybiB0aGUgcmVzcG9uc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2UgfHwgeGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignWycgKyB4aHIuc3RhdHVzICsgJ10nICsgeGhyLnN0YXR1c1RleHQgKyAnOicgKyB4aHIucmVzcG9uc2VVUkwpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbmZ1bmN0aW9uIHJlcVR5cGUoeGhyKSB7XG4gICAgcmV0dXJuIHhoci50b1N0cmluZygpLnJlcGxhY2UoJ29iamVjdCAnLCAnJyk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYGNyb3NzT3JpZ2luYCBwcm9wZXJ0eSBmb3IgdGhpcyByZXNvdXJjZSBiYXNlZCBvbiBpZiB0aGUgdXJsXG4gKiBmb3IgdGhpcyByZXNvdXJjZSBpcyBjcm9zcy1vcmlnaW4uIElmIGNyb3NzT3JpZ2luIHdhcyBtYW51YWxseSBzZXQsIHRoaXNcbiAqIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIHRvIHRlc3QuXG4gKiBAcGFyYW0gW2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbl0ge29iamVjdH0gVGhlIGxvY2F0aW9uIG9iamVjdCB0byB0ZXN0IGFnYWluc3QuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjcm9zc09yaWdpbiB2YWx1ZSB0byB1c2UgKG9yIGVtcHR5IHN0cmluZyBmb3Igbm9uZSkuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbiAodXJsLCBsb2MpIHtcbiAgICAvLyBkYXRhOiBhbmQgamF2YXNjcmlwdDogdXJscyBhcmUgY29uc2lkZXJlZCBzYW1lLW9yaWdpblxuICAgIGlmICh1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBpcyB3aW5kb3cubG9jYXRpb25cbiAgICBsb2MgPSBsb2MgfHwgd2luZG93LmxvY2F0aW9uO1xuXG4gICAgaWYgKCF0ZW1wQW5jaG9yKSB7XG4gICAgICAgIHRlbXBBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgfVxuXG4gICAgLy8gbGV0IHRoZSBicm93c2VyIGRldGVybWluZSB0aGUgZnVsbCBocmVmIGZvciB0aGUgdXJsIG9mIHRoaXMgcmVzb3VyY2UgYW5kIHRoZW5cbiAgICAvLyBwYXJzZSB3aXRoIHRoZSBub2RlIHVybCBsaWIsIHdlIGNhbid0IHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgICAvLyBiZWNhdXNlIHRoZXkgZG9uJ3Qgd29yayBpbiBJRTkgOihcbiAgICB0ZW1wQW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgdXJsID0gX3VybC5wYXJzZSh0ZW1wQW5jaG9yLmhyZWYpO1xuXG4gICAgdmFyIHNhbWVQb3J0ID0gKCF1cmwucG9ydCAmJiBsb2MucG9ydCA9PT0gJycpIHx8ICh1cmwucG9ydCA9PT0gbG9jLnBvcnQpO1xuXG4gICAgLy8gaWYgY3Jvc3Mgb3JpZ2luXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gbG9jLmhvc3RuYW1lIHx8ICFzYW1lUG9ydCB8fCB1cmwucHJvdG9jb2wgIT09IGxvYy5wcm90b2NvbCkge1xuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZXNwb25zZVR5cGUgb2YgYW4gWEhSIHJlcXVlc3QgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGVcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSByZXNwb25zZVR5cGUgdG8gdXNlLlxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZVhoclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlc291cmNlLl94aHJUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVMb2FkVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX2xvYWRUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXMudXJsLFxuICAgICAgICBleHQ7XG5cbiAgICBpZiAodGhpcy5pc0RhdGFVcmwpIHtcbiAgICAgICAgdmFyIHNsYXNoSW5kZXggPSB1cmwuaW5kZXhPZignLycpO1xuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHNsYXNoSW5kZXggKyAxLCB1cmwuaW5kZXhPZignOycsIHNsYXNoSW5kZXgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBxdWVyeVN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXh0ID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQ7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG1pbWUgdHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgcmVzcG9uc2VUeXBlIG9mXG4gKiByZXNvdXJjZSBiZWluZyBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZ2V0TWltZUZyb21YaHJUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5JztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0I6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2Jsb2InO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQ6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCc7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQ6XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVDpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG5cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsb2FkaW5nIGEgcmVzb3VyY2UgY2FuIHVzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBMT0FEX1RZUEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuWEhSIC0gVXNlcyBYTUxIdHRwUmVxdWVzdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuSU1BR0UgLSBVc2VzIGFuIGBJbWFnZWAgb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5BVURJTyAtIFVzZXMgYW4gYEF1ZGlvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLlZJREVPIC0gVXNlcyBhIGBWaWRlb2Agb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICovXG5SZXNvdXJjZS5MT0FEX1RZUEUgPSB7XG4gICAgWEhSOiAgICAxLFxuICAgIElNQUdFOiAgMixcbiAgICBBVURJTzogIDMsXG4gICAgVklERU86ICA0XG59O1xuXG4vKipcbiAqIFRoZSBYSFIgcmVhZHkgc3RhdGVzLCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gWEhSX1JFQURZX1NUQVRFXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLlVOU0VOVCAtIG9wZW4oKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5PUEVORUQgLSBzZW5kKCloYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuSEVBREVSU19SRUNFSVZFRCAtIHNlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuTE9BRElORyAtIERvd25sb2FkaW5nOyByZXNwb25zZVRleHQgaG9sZHMgcGFydGlhbCBkYXRhLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5ET05FIC0gVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFID0ge1xuICAgIFVOU0VOVDogMCxcbiAgICBPUEVORUQ6IDEsXG4gICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICBMT0FESU5HOiAzLFxuICAgIERPTkU6IDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVTUE9OU0VfVFlQRVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQgLSBkZWZhdWx0cyB0byB0ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSIC0gQXJyYXlCdWZmZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CTE9CIC0gQmxvYlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UIC0gRG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5KU09OIC0gT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCAtIFN0cmluZ1xuICovXG5SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRSA9IHtcbiAgICBERUZBVUxUOiAgICAndGV4dCcsXG4gICAgQlVGRkVSOiAgICAgJ2FycmF5YnVmZmVyJyxcbiAgICBCTE9COiAgICAgICAnYmxvYicsXG4gICAgRE9DVU1FTlQ6ICAgJ2RvY3VtZW50JyxcbiAgICBKU09OOiAgICAgICAnanNvbicsXG4gICAgVEVYVDogICAgICAgJ3RleHQnXG59O1xuXG5SZXNvdXJjZS5fbG9hZFR5cGVNYXAgPSB7XG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnYm1wJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGdhJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0Vcbn07XG5cblJlc291cmNlLl94aHJUeXBlTWFwID0ge1xuICAgIC8vIHhtbFxuICAgICd4aHRtbCc6ICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG1sJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG0nOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd4bWwnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0bXgnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0c3gnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdzdmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuXG4gICAgLy8gaW1hZ2VzXG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAncG5nJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBlZyc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnd2VicCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG5cbiAgICAvLyBqc29uXG4gICAgJ2pzb24nOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTixcblxuICAgIC8vIHRleHRcbiAgICAndGV4dCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhULFxuICAgICd0eHQnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFRcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSBsb2FkVHlwZSB7UmVzb3VyY2UuTE9BRF9UWVBFfSBUaGUgbG9hZCB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uTG9hZFR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgbG9hZFR5cGUpIHtcbiAgICBzZXRFeHRNYXAoUmVzb3VyY2UuX2xvYWRUeXBlTWFwLCBleHRuYW1lLCBsb2FkVHlwZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGxvYWQgdHlwZSB0byBiZSB1c2VkIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZXh0bmFtZSB7c3RyaW5nfSBUaGUgZXh0ZW5zaW9uIHRvIHNldCB0aGUgdHlwZSBmb3IsIGUuZy4gXCJwbmdcIiBvciBcImZudFwiXG4gKiBAcGFyYW0geGhyVHlwZSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSB4aHIgdHlwZSB0byBzZXQgaXQgdG8uXG4gKi9cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgeGhyVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5feGhyVHlwZU1hcCwgZXh0bmFtZSwgeGhyVHlwZSk7XG59O1xuXG5mdW5jdGlvbiBzZXRFeHRNYXAobWFwLCBleHRuYW1lLCB2YWwpIHtcbiAgICBpZiAoZXh0bmFtZSAmJiBleHRuYW1lLmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICBleHRuYW1lID0gZXh0bmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRuYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYXBbZXh0bmFtZV0gPSB2YWw7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIHByaXZhdGUgcHJvcGVydHlcbiAgICBfa2V5U3RyOiBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIsXG5cbiAgICBlbmNvZGVCaW5hcnk6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICAgICAgdmFyIGJ5dGVidWZmZXI7XG4gICAgICAgIHZhciBlbmNvZGVkQ2hhckluZGV4ZXMgPSBuZXcgQXJyYXkoNCk7XG4gICAgICAgIHZhciBpbnggPSAwO1xuICAgICAgICB2YXIgam54ID0gMDtcbiAgICAgICAgdmFyIHBhZGRpbmdCeXRlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmlsbCBieXRlIGJ1ZmZlciBhcnJheVxuICAgICAgICAgICAgYnl0ZWJ1ZmZlciA9IG5ldyBBcnJheSgzKTtcbiAgICAgICAgICAgIGZvciAoam54ID0gMDsgam54IDwgYnl0ZWJ1ZmZlci5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhd2F5IGhpZ2gtb3JkZXIgYnl0ZSwgYXMgZG9jdW1lbnRlZCBhdDpcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1MSHR0cFJlcXVlc3QjSGFuZGxpbmdfYmluYXJ5X2RhdGFcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gaW5wdXQuY2hhckNvZGVBdChpbngrKykgJiAweGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCBlYWNoIGVuY29kZWQgY2hhcmFjdGVyLCA2IGJpdHMgYXQgYSB0aW1lXG4gICAgICAgICAgICAvLyBpbmRleCAxOiBmaXJzdCA2IGJpdHNcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1swXSA9IGJ5dGVidWZmZXJbMF0gPj4gMjtcbiAgICAgICAgICAgIC8vIGluZGV4IDI6IHNlY29uZCA2IGJpdHMgKDIgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMSArIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAyKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzFdID0gKChieXRlYnVmZmVyWzBdICYgMHgzKSA8PCA0KSB8IChieXRlYnVmZmVyWzFdID4+IDQpO1xuICAgICAgICAgICAgLy8gaW5kZXggMzogdGhpcmQgNiBiaXRzICg0IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBpbnB1dCBieXRlIDIgKyAyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1syXSA9ICgoYnl0ZWJ1ZmZlclsxXSAmIDB4MGYpIDw8IDIpIHwgKGJ5dGVidWZmZXJbMl0gPj4gNik7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiBmb3J0aCA2IGJpdHMgKDYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IGJ5dGVidWZmZXJbMl0gJiAweDNmO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBwYWRkaW5nIGhhcHBlbmVkLCBhbmQgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBwYWRkaW5nQnl0ZXMgPSBpbnggLSAoaW5wdXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhZGRpbmdCeXRlcykge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxhc3QgMiBjaGFyYWN0ZXJzIHRvIHBhZGRpbmcgY2hhclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbM10gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCBjaGFyYWN0ZXIgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBObyBwYWRkaW5nIC0gcHJvY2VlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb3cgd2Ugd2lsbCBncmFiIGVhY2ggYXBwcm9wcmlhdGUgY2hhcmFjdGVyIG91dCBvZiBvdXIga2V5c3RyaW5nXG4gICAgICAgICAgICAvLyBiYXNlZCBvbiBvdXIgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCBpdCB0byB0aGUgb3V0cHV0IHN0cmluZ1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBlbmNvZGVkQ2hhckluZGV4ZXMubGVuZ3RoOyBqbngrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSB0aGlzLl9rZXlTdHIuY2hhckF0KGVuY29kZWRDaGFySW5kZXhlc1tqbnhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vTG9hZGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJlc291cmNlID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5taWRkbGV3YXJlID0ge1xuICAgIGNhY2hpbmc6IHtcbiAgICAgICAgbWVtb3J5OiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL2NhY2hpbmcvbWVtb3J5JylcbiAgICB9LFxuICAgIHBhcnNpbmc6IHtcbiAgICAgICAgYmxvYjogcmVxdWlyZSgnLi9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2InKVxuICAgIH1cbn07XG4iLCIvLyBhIHNpbXBsZSBpbi1tZW1vcnkgY2FjaGUgZm9yIHJlc291cmNlc1xudmFyIGNhY2hlID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgLy8gaWYgY2FjaGVkLCB0aGVuIHNldCBkYXRhIGFuZCBjb21wbGV0ZSB0aGUgcmVzb3VyY2VcbiAgICAgICAgaWYgKGNhY2hlW3Jlc291cmNlLnVybF0pIHtcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBjYWNoZVtyZXNvdXJjZS51cmxdO1xuICAgICAgICAgICAgcmVzb3VyY2UuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBub3QgY2FjaGVkLCB3YWl0IGZvciBjb21wbGV0ZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlLm9uY2UoJ2NvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgY2FjaGVbdGhpcy51cmxdID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJy4uLy4uL1Jlc291cmNlJyksXG4gICAgYjY0ID0gcmVxdWlyZSgnLi4vLi4vYjY0Jyk7XG5cbndpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cbi8vIGEgbWlkZGxld2FyZSBmb3IgdHJhbnNmb3JtaW5nIFhIUiBsb2FkZWQgQmxvYnMgaW50byBtb3JlIHVzZWZ1bCBvYmplY3RzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgYW4gWEhSIGxvYWQgb2YgYSBibG9iXG4gICAgICAgIGlmIChyZXNvdXJjZS54aHIgJiYgcmVzb3VyY2UueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQikge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYmxvYiBzdXBwb3J0IHdlIHByb2JhYmx5IGdvdCBhIGJpbmFyeSBzdHJpbmcgYmFja1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuQmxvYiB8fCB0eXBlb2YgcmVzb3VyY2UuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlc291cmNlLnhoci5nZXRSZXNwb25zZUhlYWRlcignY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGltYWdlLCBjb252ZXJ0IHRoZSBiaW5hcnkgc3RyaW5nIGludG8gYSBkYXRhIHVybFxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIHR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gJ2RhdGE6JyArIHR5cGUgKyAnO2Jhc2U2NCwnICsgYjY0LmVuY29kZUJpbmFyeShyZXNvdXJjZS54aHIucmVzcG9uc2VUZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5pc0ltYWdlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IHVudGlsIHRoZSBpbWFnZSBsb2FkcyBhbmQgdGhlbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnQgdHlwZSBzYXlzIHRoaXMgaXMgYW4gaW1hZ2UsIHRoZW4gd2Ugc2hvdWxkIHRyYW5zZm9ybSB0aGUgYmxvYiBpbnRvIGFuIEltYWdlIG9iamVjdFxuICAgICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UuZGF0YS50eXBlLmluZGV4T2YoJ2ltYWdlJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXNvdXJjZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmJsb2IgPSByZXNvdXJjZS5kYXRhO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLnNyYyA9IHNyYztcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCB0aGUgbm8gbG9uZ2VyIHVzZWQgYmxvYiBhZnRlciB0aGUgaW1hZ2UgbG9hZHNcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChzcmMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwicGl4aS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIzLjAuMTAtZGV2XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJQaXhpLmpzIGlzIGEgZmFzdCBsaWdodHdlaWdodCAyRCBsaWJyYXJ5IHRoYXQgd29ya3MgYWNyb3NzIGFsbCBkZXZpY2VzLlwiLFxuICBcImF1dGhvclwiOiBcIk1hdCBHcm92ZXNcIixcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIFwiQ2hhZCBFbmdsZXIgPGNoYWRAcGFudGhlcmRldi5jb20+XCIsXG4gICAgXCJSaWNoYXJkIERhdmV5IDxyZGF2ZXlAZ21haWwuY29tPlwiXG4gIF0sXG4gIFwibWFpblwiOiBcIi4vc3JjL2luZGV4LmpzXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ29vZGJveWRpZ2l0YWwuY29tL1wiLFxuICBcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzXCIsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJzdGFydFwiOiBcImd1bHAgJiYgZ3VscCB3YXRjaFwiLFxuICAgIFwidGVzdFwiOiBcImd1bHAgJiYgdGVzdGVtIGNpXCIsXG4gICAgXCJidWlsZFwiOiBcImd1bHBcIixcbiAgICBcImRvY3NcIjogXCJqc2RvYyAtYyAuL2d1bHAvdXRpbC9qc2RvYy5jb25mLmpzb24gLVIgUkVBRE1FLm1kXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW4vXCIsXG4gICAgXCJzcmMvXCIsXG4gICAgXCJDT05UUklCVVRJTkcubWRcIixcbiAgICBcIkxJQ0VOU0VcIixcbiAgICBcInBhY2thZ2UuanNvblwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYXN5bmNcIjogXCJeMS41LjBcIixcbiAgICBcImJyZnNcIjogXCJeMS40LjFcIixcbiAgICBcImVhcmN1dFwiOiBcIl4yLjAuN1wiLFxuICAgIFwiZXZlbnRlbWl0dGVyM1wiOiBcIl4xLjEuMVwiLFxuICAgIFwiZ2wtbWF0cml4XCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS90b2ppL2dsLW1hdHJpeC5naXRcIixcbiAgICBcIm9iamVjdC1hc3NpZ25cIjogXCJeNC4wLjFcIixcbiAgICBcInBpeGktZ2wtY29yZVwiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vR29vZEJveURpZ2l0YWwvcGl4aS1nbC1jb3JlLmdpdFwiLFxuICAgIFwicmVzb3VyY2UtbG9hZGVyXCI6IFwiXjEuNi40XCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYnJvd3NlcmlmeVwiOiBcIl4xMS4xLjBcIixcbiAgICBcImNoYWlcIjogXCJeMy4yLjBcIixcbiAgICBcImRlbFwiOiBcIl4yLjAuMlwiLFxuICAgIFwiZ3VscFwiOiBcIl4zLjkuMFwiLFxuICAgIFwiZ3VscC1jYWNoZWRcIjogXCJeMS4xLjBcIixcbiAgICBcImd1bHAtY29uY2F0XCI6IFwiXjIuNi4wXCIsXG4gICAgXCJndWxwLWRlYnVnXCI6IFwiXjIuMS4wXCIsXG4gICAgXCJndWxwLWhlYWRlclwiOiBcIl4xLjcuMVwiLFxuICAgIFwiZ3VscC1qc2hpbnRcIjogXCJeMS4xMS4yXCIsXG4gICAgXCJndWxwLW1pcnJvclwiOiBcIl4wLjQuMFwiLFxuICAgIFwiZ3VscC1wbHVtYmVyXCI6IFwiXjEuMC4xXCIsXG4gICAgXCJndWxwLXJlbmFtZVwiOiBcIl4xLjIuMlwiLFxuICAgIFwiZ3VscC1zb3VyY2VtYXBzXCI6IFwiXjEuNS4yXCIsXG4gICAgXCJndWxwLXVnbGlmeVwiOiBcIl4xLjQuMVwiLFxuICAgIFwiZ3VscC11dGlsXCI6IFwiXjMuMC42XCIsXG4gICAgXCJqYWd1YXJqcy1qc2RvY1wiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vZGF2aWRzaGltanMvamFndWFyanMtanNkb2MuZ2l0XCIsXG4gICAgXCJqc2RvY1wiOiBcIl4zLjMuMlwiLFxuICAgIFwianNoaW50LXN1bW1hcnlcIjogXCJeMC40LjBcIixcbiAgICBcIm1pbmltaXN0XCI6IFwiXjEuMi4wXCIsXG4gICAgXCJtb2NoYVwiOiBcIl4yLjMuMlwiLFxuICAgIFwicmVxdWlyZS1kaXJcIjogXCJeMC4zLjBcIixcbiAgICBcInJ1bi1zZXF1ZW5jZVwiOiBcIl4xLjEuMlwiLFxuICAgIFwidGVzdGVtXCI6IFwiXjAuOS40XCIsXG4gICAgXCJ2aW55bC1idWZmZXJcIjogXCJeMS4wLjBcIixcbiAgICBcInZpbnlsLXNvdXJjZS1zdHJlYW1cIjogXCJeMS4xLjBcIixcbiAgICBcIndhdGNoaWZ5XCI6IFwiXjMuNC4wXCJcbiAgfSxcbiAgXCJicm93c2VyaWZ5XCI6IHtcbiAgICBcInRyYW5zZm9ybVwiOiBbXG4gICAgICBcImJyZnNcIlxuICAgIF1cbiAgfVxufVxuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8vIGFkZCBzb21lIGV4dHJhIHZhcmlhYmxlcyB0byB0aGUgY29udGFpbmVyLi5cbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKVxuKTtcblxuXG4vKipcbiAqIFRoZSBBY2Nlc3NpYmlsaXR5IG1hbmFnZXIgcmVhY3JlYXRlcyB0aGUgYWJpbGl0eSB0byB0YWIgYW5kIGFuZCBoYXZlIGNvbnRlbnQgcmVhZCBieSBzY3JlZW4gcmVhZGVycy4gVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCBhcyBpdCBjYW4gcG9zc2libHkgaGVscCBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMgYWNjZXNzIHBpeGkgY29udGVudC5cbiAqIE11Y2ggbGlrZSBpbnRlcmFjdGlvbiBhbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgbWFkZSBhY2Nlc3NpYmxlLiBUaGlzIG1hbmFnZXIgd2lsbCBtYXAgdGhlIGV2ZW50cyBhcyBpZiB0aGUgbW91c2Ugd2FzIGJlaW5nIHVzZWQsIG1pbmltaXppbmcgdGhlIGVmZmVyb3QgcmVxdWlyZWQgdG8gaW1wbGVtZW50LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyXG4gKi9cbmZ1bmN0aW9uIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKHJlbmRlcmVyKVxue1xuXHQvLyBmaXJzdCB3ZSBjcmVhdGUgYSBkaXYgdGhhdCB3aWxsIHNpdCBvdmVyIHRoZSBwaXhpIGVsZW1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGRpdiBvdmVybGF5cyB3aWxsIGdvLlxuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBcbiAgICBkaXYuc3R5bGUud2lkdGggPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgZGl2LnN0eWxlLnRvcCA9IDA7XG4gICAgZGl2LnN0eWxlLmxlZnQgPSAwO1xuICAgLy9cbiAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcbiAgIFx0XG4gICBcdC8qKlxuICAgXHQgKiBUaGlzIGlzIHRoZSBkb20gZWxlbWVudCB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuICAgXHR0aGlzLmRpdiA9IGRpdjtcblxuICAgXHQvKipcbiAgIFx0ICogQSBzaW1wbGUgcG9vbCBmb3Igc3RvcmluZyBkaXZzLlxuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0FycmF5fVxuICAgXHQgKiBAcHJpdmF0ZVxuICAgXHQgKi9cbiBcdHRoaXMucG9vbCA9IFtdO1xuXG4gXHQvKipcbiBcdCAqIFRoaXMgaXMgYSB0aWNrIHVzZWQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIG5vIGxvbmdlciBiZWluZyByZW5kZXJlZC5cbiBcdCAqIFxuIFx0ICogQHR5cGUge051bWJlcn1cbiBcdCAqIEBwcml2YXRlXG4gXHQgKi9cbiAgIFx0dGhpcy5yZW5kZXJJZCA9IDA7XG5cbiAgIFx0LyoqXG4gICBcdCAqIFNldHRpbmcgdGhpcyB0byB0cnVlIHdpbGwgdmlzdWFsbHkgc2hvdyB0aGUgZGl2c1xuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0Jvb2xlYW59XG4gICBcdCAqL1xuICAgXHR0aGlzLmRlYnVnID0gZmFsc2U7XG5cbiAgXHQvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBhY2Nlc3NpYmlsaXR5IG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgIFx0dGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICBcdC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjdXJyZW50bHkgYWN0aXZlIGFjY2Vzc2libGUgaXRlbXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgXHR0aGlzLmNoaWxkcmVuID0gW107XG4gICBcdFxuICAgXHQvKipcbiAgICAgKiBwcmUgYmluZCB0aGUgZnVuY3Rpb25zLi5cbiAgICAgKi9cbiAgIFx0dGhpcy5fb25LZXlEb3duID0gdGhpcy5fb25LZXlEb3duLmJpbmQodGhpcyk7XG4gICBcdHRoaXMuX29uTW91c2VNb3ZlID0gdGhpcy5fb25Nb3VzZU1vdmUuYmluZCh0aGlzKTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHN0b3JlcyB0aGUgc3RhdGUgb2YgdGhlIG1hbmFnZXIuIElmIHRoZXJlIGFyZSBubyBhY2Nlc3NpYmxlIG9iamVjdHMgb3IgdGhlIG1vdXNlIGlzIG1vdmluZyB0aGUgd2lsbCBiZSBmYWxzZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcblxuXG4gICBcdC8vIGxldCBsaXN0ZW4gZm9yIHRhYi4uIG9uY2UgcHJlc3NlZCB3ZSBjYW4gZmlyZSB1cCBhbmQgc2hvdyB0aGUgYWNjZXNzaWJpbGl0eSBsYXllclxuICAgXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xufVxuXG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBBY2Nlc3NpYmlsaXR5TWFuYWdlcjtcblxuLyoqXG4gKiBBY3RpdmF0aW5nIHdpbGwgY2F1c2UgdGhlIEFjY2Vzc2liaWxpdHkgbGF5ZXIgdG8gYmUgc2hvd24uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIHByZXNlcyB0aGUgdGFiIGtleVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IHRydWU7XG5cblx0d2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCB0cnVlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9uKCdwb3N0cmVuZGVyJywgdGhpcy51cGRhdGUsIHRoaXMpO1xuXG5cdHRoaXMucmVuZGVyZXIudmlldy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuZGl2KTtcdFxufTtcblxuLyoqXG4gKiBEZWFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBoaWRkZW4uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIG1vdmVzIHRoZSBtb3VzZVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmRlYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKCF0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG5cblx0dGhpcy5yZW5kZXJlci5vZmYoJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSk7XG5cblx0dGhpcy5kaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmRpdik7XG5cbn07XG5cbi8qKlxuICogVGhpcyByZWN1cnNpdmUgZnVuY3Rpb24gd2lsbCBydW4gdGhyb3VnaHQgaGUgc2NlbmUgZ3JhcGggYW5kIGFkZCBhbnkgbmV3IGFjY2Vzc2libGUgb2JqZWN0cyB0byB0aGUgRE9NIGxheWVyLlxuICogQHBhcmFtIGVsZW1lbnQge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIERpc3BsYXlPYmplY3QgdG8gY2hlY2suXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlQWNjZXNzaWJsZU9iamVjdHMgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuXHRpZighZGlzcGxheU9iamVjdC52aXNpYmxlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYoZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlICYmIGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG5cdHtcblx0XHRpZighZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZUFjdGl2ZSlcblx0XHR7XG5cdFx0XHR0aGlzLmFkZENoaWxkKGRpc3BsYXlPYmplY3QpO1xuXHRcdH1cblx0ICAgXHRcblx0ICAgXHRkaXNwbGF5T2JqZWN0LnJlbmRlcklkID0gdGhpcy5yZW5kZXJJZDtcblx0fVxuXG5cdHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG5cblx0Zm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XG5cdFx0dGhpcy51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyhjaGlsZHJlbltpXSk7XG5cdH1cbn07XG5cblxuLyoqXG4gKiBCZWZvcmUgZWFjaCByZW5kZXIgdGhpcyBmdW5jdGlvbiB3aWxsIGVuc3VyZSB0aGF0IGFsbCBkaXZzIGFyZSBtYXBwZWQgY29ycmVjdGx5IHRvIHRoZWlyIERpc3BsYXlPYmplY3RzXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oKVxue1xuXG5cdC8vIHVwZGF0ZSBjaGlsZHJlbi4uLlxuXHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCk7XG5cblx0dmFyIHJlY3QgPSB0aGlzLnJlbmRlcmVyLnZpZXcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdHZhciBzeCA9IHJlY3Qud2lkdGggIC8gdGhpcy5yZW5kZXJlci53aWR0aDtcblx0dmFyIHN5ID0gcmVjdC5oZWlnaHQgLyB0aGlzLnJlbmRlcmVyLmhlaWdodDtcblxuXHR2YXIgZGl2ID0gdGhpcy5kaXY7XG5cblx0ZGl2LnN0eWxlLmxlZnQgPSByZWN0LmxlZnQgKyAncHgnO1xuXHRkaXYuc3R5bGUudG9wID0gcmVjdC50b3AgKyAncHgnO1xuXHRkaXYuc3R5bGUud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoICsgJ3B4Jztcblx0ZGl2LnN0eWxlLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0ICsgJ3B4JztcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblxuXHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cblx0XHRpZihjaGlsZC5yZW5kZXJJZCAhPT0gdGhpcy5yZW5kZXJJZClcblx0XHR7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGksIDEpO1xuXHRcdFx0dGhpcy5kaXYucmVtb3ZlQ2hpbGQoIGNoaWxkLl9hY2Nlc3NpYmxlRGl2ICk7XG5cdFx0XHR0aGlzLnBvb2wucHVzaChjaGlsZC5fYWNjZXNzaWJsZURpdik7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZURpdiA9IG51bGw7XG5cblx0XHRcdGktLTtcblxuXHRcdFx0aWYodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0Ly8gbWFwIGRpdiB0byBkaXNwbGF5Li5cblx0XHRcdGRpdiA9IGNoaWxkLl9hY2Nlc3NpYmxlRGl2O1xuXHRcdFx0dmFyIGhpdEFyZWEgPSBjaGlsZC5oaXRBcmVhO1xuXHRcdFx0dmFyIHd0ID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cblx0XHRcdGlmKGNoaWxkLmhpdEFyZWEpXG5cdFx0XHR7XG5cdFx0XHRcdGRpdi5zdHlsZS5sZWZ0ID0gKCh3dC50eCArIChoaXRBcmVhLnggKiB3dC5hKSkgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gICgod3QudHkgKyAoaGl0QXJlYS55ICogd3QuZCkpICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiB3dC5hICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLmhlaWdodCA9IChoaXRBcmVhLmhlaWdodCAqIHd0LmQgKiBzeSkgKyAncHgnO1xuXHRcdFx0XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdGhpdEFyZWEgPSBjaGlsZC5nZXRCb3VuZHMoKTtcblxuXHRcdFx0XHR0aGlzLmNhcEhpdEFyZWEoaGl0QXJlYSk7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoaGl0QXJlYS54ICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLnRvcCA9ICAoaGl0QXJlYS55ICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogc3kpICsgJ3B4Jztcblx0XHRcdH1cdFx0XG5cdFx0fVxuXHR9XG5cblx0Ly8gaW5jcmVtZW50IHRoZSByZW5kZXIgaWQuLlxuXHR0aGlzLnJlbmRlcklkKys7XG59O1xuXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuY2FwSGl0QXJlYSA9IGZ1bmN0aW9uIChoaXRBcmVhKVxue1xuICAgIGlmIChoaXRBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS53aWR0aCArPSBoaXRBcmVhLng7XG4gICAgICAgIGhpdEFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGhpdEFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCArPSBoaXRBcmVhLnk7XG4gICAgICAgIGhpdEFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBoaXRBcmVhLnggKyBoaXRBcmVhLndpZHRoID4gdGhpcy5yZW5kZXJlci53aWR0aCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoID0gdGhpcy5yZW5kZXJlci53aWR0aCAtIGhpdEFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueSArIGhpdEFyZWEuaGVpZ2h0ID4gdGhpcy5yZW5kZXJlci5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmhlaWdodCAtIGhpdEFyZWEueTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogQWRkcyBhIERpc3BsYXlPYmplY3QgdG8gdGhlIGFjY2Vzc2liaWxpdHkgbWFuYWdlclxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24oZGlzcGxheU9iamVjdClcbntcbi8vXHR0aGlzLmFjdGl2YXRlKCk7XG5cdFxuXHR2YXIgZGl2ID0gdGhpcy5wb29sLnBvcCgpO1xuXG5cdGlmKCFkaXYpXG5cdHtcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgXG5cblx0ICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG5cdCAgICBkaXYuc3R5bGUuaGVpZ2h0ID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmRlYnVnID8gJ3JnYmEoMjU1LDAsMCwwLjUpJyA6ICd0cmFuc3BhcmVudCc7XG5cdCAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXHQgICAgZGl2LnN0eWxlLnpJbmRleCA9IDI7XG5cdCAgICBkaXYuc3R5bGUuYm9yZGVyU3R5bGUgPSAnbm9uZSc7XG5cblx0ICAgIFxuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGljay5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKSk7XG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCB0aGlzLl9vbkZvY3VzT3V0LmJpbmQodGhpcykpO1xuXHR9XG5cdCAgIFx0XG5cblxuXG5cdGRpdi50aXRsZSA9IGRpc3BsYXlPYmplY3QuYWNjZXNzaWJsZVRpdGxlIHx8ICdkaXNwbGF5T2JqZWN0ICcgKyB0aGlzLnRhYkluZGV4O1xuXG5cdC8vXG5cdFxuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlID0gdHJ1ZTtcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiA9IGRpdjtcblx0ZGl2LmRpc3BsYXlPYmplY3QgPSBkaXNwbGF5T2JqZWN0O1xuXG5cblx0dGhpcy5jaGlsZHJlbi5wdXNoKGRpc3BsYXlPYmplY3QpO1xuXHR0aGlzLmRpdi5hcHBlbmRDaGlsZCggZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiApO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2LnRhYkluZGV4ID0gZGlzcGxheU9iamVjdC50YWJJbmRleDtcbn07XG5cblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgYnV0dG9uIHByZXNzIHRvIHBpeGkncyBJbnRlcmFjdGlvbk1hbmFnZXIgKGNsaWNrKVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkNsaWNrID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ2NsaWNrJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW92ZXIpXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uRm9jdXMgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW91dClcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1c091dCA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIGtleSBpcyBwcmVzc2VkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbktleURvd24gPSBmdW5jdGlvbihlKVxue1xuXHRpZihlLmtleUNvZGUgIT09IDkpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmFjdGl2YXRlKCk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uTW91c2VNb3ZlID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmRlYWN0aXZhdGUoKTtcbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKlxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIFxue1xuXHR0aGlzLmRpdiA9IG51bGw7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHR7XG5cdFx0dGhpcy5jaGlsZHJlbltpXS5kaXYgPSBudWxsO1xuXHR9XG5cblx0XG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duKTtcblx0XHRcblx0dGhpcy5wb29sID0gbnVsbDtcblx0dGhpcy5jaGlsZHJlbiA9IG51bGw7XG5cdHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdhY2Nlc3NpYmlsaXR5JywgQWNjZXNzaWJpbGl0eU1hbmFnZXIpO1xuXG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGFjY2Vzc2libGUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlNYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5hY2Nlc3NpYmlsaXR5LmFjY2Vzc2libGVUYXJnZXRcbiAqICAgICAgKTtcbiAqL1xudmFyIGFjY2Vzc2libGVUYXJnZXQgPSB7XG4gICAgXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlOmZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlVGl0bGU6bnVsbCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgdGFiSW5kZXg6MCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVBY3RpdmU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIF9hY2Nlc3NpYmxlRGl2OmZhbHNlXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYWNjZXNzaWJsZVRhcmdldDtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGFjY2Vzc2liaWxpdHkgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGFjY2Vzc2libGVUYXJnZXQ6ICAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKSxcbiAgICBBY2Nlc3NpYmlsaXR5TWFuYWdlcjogcmVxdWlyZSgnLi9BY2Nlc3NpYmlsaXR5TWFuYWdlcicpXG59O1xuIiwiLyoqXG4gKiBDb25zdGFudCB2YWx1ZXMgdXNlZCBpbiBwaXhpXG4gKlxuICogQGxlbmRzIFBJWElcbiAqL1xudmFyIENPTlNUID0ge1xuICAgIC8qKlxuICAgICAqIFN0cmluZyBvZiB0aGUgY3VycmVudCBQSVhJIHZlcnNpb25cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gVkVSU0lPTlxuICAgICAqL1xuICAgIFZFUlNJT046IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb24sXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUElfMiAtIFR3byBQaVxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBQSV8yOiBNYXRoLlBJICogMixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSQURfVE9fREVHIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgcmFkaWFucyB0byBkZWdyZWVzXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFJBRF9UT19ERUc6IDE4MCAvIE1hdGguUEksXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge051bWJlcn0gREVHX1RPX1JBRCAtIENvbnN0YW50IGNvbnZlcnNpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIGRlZ3JlZXMgdG8gcmFkaWFuc1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBERUdfVE9fUkFEOiBNYXRoLlBJIC8gMTgwLFxuXG4gICAgLyoqXG4gICAgICogVGFyZ2V0IGZyYW1lcyBwZXIgbWlsbGlzZWNvbmQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFRBUkdFVF9GUE1TPTAuMDZcbiAgICAgKi9cbiAgICBUQVJHRVRfRlBNUzogMC4wNixcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IHRvIGlkZW50aWZ5IHRoZSBSZW5kZXJlciBUeXBlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBSRU5ERVJFUl9UWVBFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuVU5LTk9XTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLldFQkdMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuQ0FOVkFTXG4gICAgICovXG4gICAgUkVOREVSRVJfVFlQRToge1xuICAgICAgICBVTktOT1dOOiAgICAwLFxuICAgICAgICBXRUJHTDogICAgICAxLFxuICAgICAgICBDQU5WQVM6ICAgICAyXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFZhcmlvdXMgYmxlbmQgbW9kZXMgc3VwcG9ydGVkIGJ5IFBJWEkuIElNUE9SVEFOVCAtIFRoZSBXZWJHTCByZW5kZXJlciBvbmx5IHN1cHBvcnRzXG4gICAgICogdGhlIE5PUk1BTCwgQURELCBNVUxUSVBMWSBhbmQgU0NSRUVOIGJsZW5kIG1vZGVzLiBBbnl0aGluZyBlbHNlIHdpbGwgc2lsZW50bHkgYWN0IGxpa2VcbiAgICAgKiBOT1JNQUwuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IEJMRU5EX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5BRERcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTVVMVElQTFlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0NSRUVOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk9WRVJMQVlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuREFSS0VOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkxJR0hURU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfQlVSTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IQVJEX0xJR0hUXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNPRlRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuRElGRkVSRU5DRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5FWENMVVNJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuSFVFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNBVFVSQVRJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTFVNSU5PU0lUWVxuICAgICAqL1xuICAgIEJMRU5EX01PREVTOiB7XG4gICAgICAgIE5PUk1BTDogICAgICAgICAwLFxuICAgICAgICBBREQ6ICAgICAgICAgICAgMSxcbiAgICAgICAgTVVMVElQTFk6ICAgICAgIDIsXG4gICAgICAgIFNDUkVFTjogICAgICAgICAzLFxuICAgICAgICBPVkVSTEFZOiAgICAgICAgNCxcbiAgICAgICAgREFSS0VOOiAgICAgICAgIDUsXG4gICAgICAgIExJR0hURU46ICAgICAgICA2LFxuICAgICAgICBDT0xPUl9ET0RHRTogICAgNyxcbiAgICAgICAgQ09MT1JfQlVSTjogICAgIDgsXG4gICAgICAgIEhBUkRfTElHSFQ6ICAgICA5LFxuICAgICAgICBTT0ZUX0xJR0hUOiAgICAgMTAsXG4gICAgICAgIERJRkZFUkVOQ0U6ICAgICAxMSxcbiAgICAgICAgRVhDTFVTSU9OOiAgICAgIDEyLFxuICAgICAgICBIVUU6ICAgICAgICAgICAgMTMsXG4gICAgICAgIFNBVFVSQVRJT046ICAgICAxNCxcbiAgICAgICAgQ09MT1I6ICAgICAgICAgIDE1LFxuICAgICAgICBMVU1JTk9TSVRZOiAgICAgMTZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyB3ZWJnbCBkcmF3IG1vZGVzLiBUaGVzZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIEdMIGRyYXdNb2RlIHRvIHVzZVxuICAgICAqIHVuZGVyIGNlcnRhaW4gc2l0dWF0aW9ucyBhbmQgcmVuZGVyZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBEUkFXX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuUE9JTlRTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX0xPT1BcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX1NUUklQXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9GQU5cbiAgICAgKi9cbiAgICBEUkFXX01PREVTOiB7XG4gICAgICAgIFBPSU5UUzogICAgICAgICAwLFxuICAgICAgICBMSU5FUzogICAgICAgICAgMSxcbiAgICAgICAgTElORV9MT09QOiAgICAgIDIsXG4gICAgICAgIExJTkVfU1RSSVA6ICAgICAzLFxuICAgICAgICBUUklBTkdMRVM6ICAgICAgNCxcbiAgICAgICAgVFJJQU5HTEVfU1RSSVA6IDUsXG4gICAgICAgIFRSSUFOR0xFX0ZBTjogICA2XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgcGl4aS5cbiAgICAgKlxuICAgICAqIFRoZSBERUZBVUxUIHNjYWxlIG1vZGUgYWZmZWN0cyB0aGUgZGVmYXVsdCBzY2FsaW5nIG1vZGUgb2YgZnV0dXJlIG9wZXJhdGlvbnMuXG4gICAgICogSXQgY2FuIGJlIHJlLWFzc2lnbmVkIHRvIGVpdGhlciBMSU5FQVIgb3IgTkVBUkVTVCwgZGVwZW5kaW5nIHVwb24gc3VpdGFiaWxpdHkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNDQUxFX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkRFRkFVTFQ9TElORUFSXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkxJTkVBUiBTbW9vdGggc2NhbGluZ1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5ORUFSRVNUIFBpeGVsYXRpbmcgc2NhbGluZ1xuICAgICAqL1xuICAgIFNDQUxFX01PREVTOiB7XG4gICAgICAgIERFRkFVTFQ6ICAgIDAsXG4gICAgICAgIExJTkVBUjogICAgIDAsXG4gICAgICAgIE5FQVJFU1Q6ICAgIDFcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHByZWZpeCB0aGF0IGRlbm90ZXMgYSBVUkwgaXMgZm9yIGEgcmV0aW5hIGFzc2V0XG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFJFVElOQV9QUkVGSVhcbiAgICAgKi9cbiAgICAvL2V4YW1wbGU6ICdAMngnLFxuICAgIFJFVElOQV9QUkVGSVg6IC9AKC4rKXgvLFxuXG4gICAgUkVTT0xVVElPTjoxLFxuXG4gICAgRklMVEVSX1JFU09MVVRJT046MSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHJlbmRlciBvcHRpb25zIGlmIG5vbmUgYXJlIHN1cHBsaWVkIHRvIHtAbGluayBQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICogb3Ige0BsaW5rIFBJWEkuQ2FudmFzUmVuZGVyZXJ9LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TXG4gICAgICogQHByb3BlcnR5IHtIVE1MQ2FudmFzRWxlbWVudH0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy52aWV3PW51bGxcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMudHJhbnNwYXJlbnQ9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuYW50aWFsaWFzPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmZvcmNlRlhBQT1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5yZXNvbHV0aW9uPTFcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hdXRvUmVzaXplPWZhbHNlXG4gICAgICovXG4gICAgREVGQVVMVF9SRU5ERVJfT1BUSU9OUzoge1xuICAgICAgICB2aWV3OiBudWxsLFxuICAgICAgICByZXNvbHV0aW9uOiAxLFxuICAgICAgICBhbnRpYWxpYXM6IGZhbHNlLFxuICAgICAgICBmb3JjZUZYQUE6IGZhbHNlLFxuICAgICAgICBhdXRvUmVzaXplOiBmYWxzZSxcbiAgICAgICAgdHJhbnNwYXJlbnQ6IGZhbHNlLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IDB4MDAwMDAwLFxuICAgICAgICBjbGVhckJlZm9yZVJlbmRlcjogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBmYWxzZSxcbiAgICAgICAgcm91bmRQaXhlbHM6IGZhbHNlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50cyB0aGF0IGlkZW50aWZ5IHNoYXBlcywgbWFpbmx5IHRvIHByZXZlbnQgYGluc3RhbmNlb2ZgIGNhbGxzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVNcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlBPTFk9MFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUkVDVD0xXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5DSVJDPTJcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkVMSVA9M1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUlJFQz00XG4gICAgICovXG4gICAgU0hBUEVTOiB7XG4gICAgICAgIFBPTFk6IDAsXG4gICAgICAgIFJFQ1Q6IDEsXG4gICAgICAgIENJUkM6IDIsXG4gICAgICAgIEVMSVA6IDMsXG4gICAgICAgIFJSRUM6IDRcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogbWF5YmUgY2hhbmdlIHRvIFNQUklURS5CQVRDSF9TSVpFOiAyMDAwXG4gICAgLy8gVE9ETzogbWF5YmUgYWRkIFBBUlRJQ0xFLkJBVENIX1NJWkU6IDE1MDAwXG4gICAgU1BSSVRFX0JBVENIX1NJWkU6IDIwMDAgLy9uaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgYW5kIGRlc2t0b3AgbWFjaGluZXNcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ09OU1Q7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgRGlzcGxheU9iamVjdCA9IHJlcXVpcmUoJy4vRGlzcGxheU9iamVjdCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIENvbnRhaW5lciByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBkaXNwbGF5IG9iamVjdHMuXG4gKiBJdCBpcyB0aGUgYmFzZSBjbGFzcyBvZiBhbGwgZGlzcGxheSBvYmplY3RzIHRoYXQgYWN0IGFzIGEgY29udGFpbmVyIGZvciBvdGhlciBvYmplY3RzLlxuICpcbiAqYGBganNcbiAqIHZhciBjb250YWluZXIgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogYGBgXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuRGlzcGxheU9iamVjdFxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ29udGFpbmVyKClcbntcbiAgICBEaXNwbGF5T2JqZWN0LmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3RbXX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5Db250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSk7XG5Db250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb250YWluZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnRhaW5lci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG5cbiAgICAgICAgICAgIGlmICh3aWR0aCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IDE7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmIChoZWlnaHQgIT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyBoZWlnaHQgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogT3ZlcnJpZGFibGUgbWV0aG9kIHRoYXQgY2FuIGJlIHVzZWQgYnkgQ29udGFpbmVyIHN1YmNsYXNzZXMgd2hlbmV2ZXIgdGhlIGNoaWxkcmVuIGFycmF5IGlzIG1vZGlmaWVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5vbkNoaWxkcmVuQ2hhbmdlID0gZnVuY3Rpb24gKCkge307XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIuXG4gKiBcbiAqIFlvdSBjYW4gYWxzbyBhZGQgbXVsdHBsZSBpdGVtcyBsaWtlIHNvOiBteUNvbnRhaW5lci5hZGRDaGlsZCh0aGlua09uZSwgdGhpbmdUd28sIHRoaW5nVGhyZWUpXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gYWRkIHRvIHRoZSBjb250YWluZXJcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxueyBcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IHdlIGNhbiBieXBhc3MgbG9vcGluZyB0aHJvdWdoIHRoZSB0aGVtXG4gICAgaWYoYXJndW1lbnRzTGVuZ3RoID4gMSlcbiAgICB7XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgYXJndW1lbnRzIHByb3BlcnR5IGFuZCBhZGQgYWxsIGNoaWxkcmVuXG4gICAgICAgIC8vIHVzZSBpdCB0aGUgcmlnaHQgd2F5ICgubGVuZ3RoIGFuZCBbaV0pIHNvIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc3RpbGwgYmUgb3B0aW1pc2VkIGJ5IEpTIHJ1bnRpbWVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoIGFyZ3VtZW50c1tpXSApO1xuICAgICAgICB9XG4gICAgfSAgICAgXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIGNoaWxkIGhhcyBhIHBhcmVudCB0aGVuIGxldHMgcmVtb3ZlIGl0IGFzIFBpeGkgb2JqZWN0cyBjYW4gb25seSBleGlzdCBpbiBvbmUgcGxhY2VcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKHRoaXMuY2hpbGRyZW4ubGVuZ3RoLTEpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIgYXQgYSBzcGVjaWZpZWQgaW5kZXguIElmIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0byBhZGRcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gcGxhY2UgdGhlIGNoaWxkIGluXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyBhZGRlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5hZGRDaGlsZEF0ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuXG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNoaWxkICsgJ2FkZENoaWxkQXQ6IFRoZSBpbmRleCAnKyBpbmRleCArJyBzdXBwbGllZCBpcyBvdXQgb2YgYm91bmRzICcgKyB0aGlzLmNoaWxkcmVuLmxlbmd0aCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBTd2FwcyB0aGUgcG9zaXRpb24gb2YgMiBEaXNwbGF5IE9iamVjdHMgd2l0aGluIHRoaXMgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGNoaWxkMiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnN3YXBDaGlsZHJlbiA9IGZ1bmN0aW9uIChjaGlsZCwgY2hpbGQyKVxue1xuICAgIGlmIChjaGlsZCA9PT0gY2hpbGQyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbmRleDEgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuICAgIHZhciBpbmRleDIgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQyKTtcblxuICAgIGlmIChpbmRleDEgPCAwIHx8IGluZGV4MiA8IDApXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N3YXBDaGlsZHJlbjogQm90aCB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdHMgbXVzdCBiZSBjaGlsZHJlbiBvZiB0aGUgY2FsbGVyLicpO1xuICAgIH1cblxuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgxXSA9IGNoaWxkMjtcbiAgICB0aGlzLmNoaWxkcmVuW2luZGV4Ml0gPSBjaGlsZDtcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgxIDwgaW5kZXgyID8gaW5kZXgxIDogaW5kZXgyKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW5kZXggcG9zaXRpb24gb2YgYSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIHRvIGlkZW50aWZ5XG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3QgdG8gaWRlbnRpZnlcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBtdXN0IGJlIGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgcG9zaXRpb24gb2YgYW4gZXhpc3RpbmcgY2hpbGQgaW4gdGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgRGlzcGxheU9iamVjdCBpbnN0YW5jZSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBpbmRleCBudW1iZXJcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgcmVzdWx0aW5nIGluZGV4IG51bWJlciBmb3IgdGhlIGNoaWxkIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc2V0Q2hpbGRJbmRleCA9IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN1cHBsaWVkIGluZGV4IGlzIG91dCBvZiBib3VuZHMnKTtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudEluZGV4ID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkKTtcblxuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGN1cnJlbnRJbmRleCwgMSk7IC8vIHJlbW92ZSBmcm9tIG9sZCBwb3NpdGlvblxuICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7IC8vYWRkIGF0IG5ldyBwb3NpdGlvblxuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNoaWxkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhcbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgYXRcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIGF0IHRoZSBnaXZlbiBpbmRleCwgaWYgYW55LlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkQXQgPSBmdW5jdGlvbiAoaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0Q2hpbGRBdDogU3VwcGxpZWQgaW5kZXggJyArIGluZGV4ICsgJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY2hpbGQgbGlzdCwgb3IgdGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3QgaXMgbm90IGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2luZGV4XTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVtb3ZlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyByZW1vdmVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuXG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYSBjaGlsZCBmcm9tIHRoZSBzcGVjaWZpZWQgaW5kZXggcG9zaXRpb24uXG4gKlxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBnZXQgdGhlIGNoaWxkIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICB2YXIgY2hpbGQgPSB0aGlzLmdldENoaWxkQXQoaW5kZXgpO1xuXG4gICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpbmRleCwgMSk7XG5cbiAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICBjaGlsZC5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGNoaWxkcmVuIGZyb20gdGhpcyBjb250YWluZXIgdGhhdCBhcmUgd2l0aGluIHRoZSBiZWdpbiBhbmQgZW5kIGluZGV4ZXMuXG4gKlxuICogQHBhcmFtIGJlZ2luSW5kZXgge251bWJlcn0gVGhlIGJlZ2lubmluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyAwLlxuICogQHBhcmFtIGVuZEluZGV4IHtudW1iZXJ9IFRoZSBlbmRpbmcgcG9zaXRpb24uIERlZmF1bHQgdmFsdWUgaXMgc2l6ZSBvZiB0aGUgY29udGFpbmVyLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkcmVuID0gZnVuY3Rpb24gKGJlZ2luSW5kZXgsIGVuZEluZGV4KVxue1xuICAgIHZhciBiZWdpbiA9IGJlZ2luSW5kZXggfHwgMDtcbiAgICB2YXIgZW5kID0gdHlwZW9mIGVuZEluZGV4ID09PSAnbnVtYmVyJyA/IGVuZEluZGV4IDogdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgdmFyIHJhbmdlID0gZW5kIC0gYmVnaW47XG4gICAgdmFyIHJlbW92ZWQsIGk7XG5cbiAgICBpZiAocmFuZ2UgPiAwICYmIHJhbmdlIDw9IGVuZClcbiAgICB7XG4gICAgICAgIHJlbW92ZWQgPSB0aGlzLmNoaWxkcmVuLnNwbGljZShiZWdpbiwgcmFuZ2UpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW1vdmVkW2ldLnBhcmVudCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoYmVnaW5JbmRleCk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0uZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbW92ZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJhbmdlID09PSAwICYmIHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigncmVtb3ZlQ2hpbGRyZW46IG51bWVyaWMgdmFsdWVzIGFyZSBvdXRzaWRlIHRoZSBhY2NlcHRhYmxlIHJhbmdlLicpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb24gYWxsIGNoaWxkcmVuIG9mIHRoaXMgY29udGFpbmVyIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0gPSBDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgQ29udGFpbmVyIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIGFsbCB2aXNpYmxlIGNoaWxkcmVuIGludG8gY29uc2lkZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE8gdGhlIGJvdW5kcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHRoaXMgcmVuZGVyIHNlc3Npb24gc28gcmV0dXJuIHdoYXQgd2UgaGF2ZVxuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBjaGlsZEJvdW5kcztcbiAgICAgICAgdmFyIGNoaWxkTWF4WDtcbiAgICAgICAgdmFyIGNoaWxkTWF4WTtcblxuICAgICAgICB2YXIgY2hpbGRWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZFZpc2libGUgPSB0cnVlO1xuXG4gICAgICAgICAgICBjaGlsZEJvdW5kcyA9IHRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIG1pblggPSBtaW5YIDwgY2hpbGRCb3VuZHMueCA/IG1pblggOiBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgbWluWSA9IG1pblkgPCBjaGlsZEJvdW5kcy55ID8gbWluWSA6IGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIGNoaWxkTWF4WCA9IGNoaWxkQm91bmRzLndpZHRoICsgY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIGNoaWxkTWF4WSA9IGNoaWxkQm91bmRzLmhlaWdodCArIGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIG1heFggPSBtYXhYID4gY2hpbGRNYXhYID8gbWF4WCA6IGNoaWxkTWF4WDtcbiAgICAgICAgICAgIG1heFkgPSBtYXhZID4gY2hpbGRNYXhZID8gbWF4WSA6IGNoaWxkTWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGRWaXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG5Db250YWluZXIucHJvdG90eXBlLmNvbnRhaW5lckdldEJvdW5kcyA9IENvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbm9uLWdsb2JhbCBsb2NhbCBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS5cbiAqIFRoZSBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXhDYWNoZSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0aC5NYXRyaXguSURFTlRJVFk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0cml4Q2FjaGU7XG5cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyggbWF0aC5NYXRyaXguSURFTlRJVFkgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcblxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGksIGo7XG5cbiAgICAvLyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgbWFzayBvciBhIGZpbHRlci5cbiAgICBpZiAodGhpcy5fbWFzayB8fCB0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgLy8gcHVzaCBmaWx0ZXIgZmlyc3QgYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIGNvcnJlY3QgZm9yIGFueSBtYXNraW5nXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzICYmIHRoaXMuX2ZpbHRlcnMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGhpcywgdGhpcy5fZmlsdGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcblxuICAgICAgICAvLyBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIGJhdGNoLCBvbmx5IHJlbmRlcmVkIGlmIGl0IGhhcyBhIHRleHR1cmUuXG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgbWFrZSBzdXJlIHRoZXkgZ2V0IHJlbmRlcmVkXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJXZWJHTChyZW5kZXJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayh0aGlzLCB0aGlzLl9tYXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBzaW1wbGUgcmVuZGVyIGNoaWxkcmVuIVxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gdGhpcyBpcyB3aGVyZSBjb250ZW50IGl0c2VsZiBnZXRzIHJlbmRlcmVkLi4uXG59O1xuXG4vKipcbiAqIFRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzXG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy5hbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hc2spXG4gICAge1xuICAgICAgICByZW5kZXJlci5tYXNrTWFuYWdlci5wdXNoTWFzayh0aGlzLl9tYXNrLCByZW5kZXJlcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayhyZW5kZXJlcik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUNoaWxkcmVuKVxue1xuICAgIERpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGlmIChkZXN0cm95Q2hpbGRyZW4pXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLmRlc3Ryb3koZGVzdHJveUNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xufTtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBUcmFuc2Zvcm0gPSByZXF1aXJlKCcuL1RyYW5zZm9ybVN0YXRpYycpLFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB3b3JsZEFscGhhOjEsIGNoaWxkcmVuOltdfTtcblxuXG4vKipcbiAqIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCBvbiB0aGUgc2NyZWVuLlxuICogVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIG9uIGl0cyBvd24gcmF0aGVyIGl0IHNob3VsZCBiZSBleHRlbmRlZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIEV2ZW50RW1pdHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gRGlzcGxheU9iamVjdCgpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb29yZGluYXRlIG9mIHRoZSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLnRyYW5zZm9ybS5wb3NpdGlvbjtcbiAgIC8vIHRoaXMuX3Bvc2l0aW9uID0gbmV3IENhY2hlUG9pbnQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHBpdm90IHBvaW50IG9mIHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgaXQgcm90YXRlcyBhcm91bmRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5waXZvdCA9IHRoaXMudHJhbnNmb3JtLnBpdm90XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBza2V3IGZhY3RvciBmb3IgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNrZXcgPSB0aGlzLnRyYW5zZm9ybS5za2V3XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3JvdGF0aW9uID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcGFjaXR5IG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgb2JqZWN0LiBJZiBmYWxzZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGRyYXduLCBhbmRcbiAgICAgKiB0aGUgdXBkYXRlVHJhbnNmb3JtIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENhbiB0aGlzIG9iamVjdCBiZSByZW5kZXJlZCwgaWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biBidXQgdGhlIHVwZGF0ZVRyYW5zZm9ybVxuICAgICAqIG1ldGhvZHMgd2lsbCBzdGlsbCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyIHRoYXQgY29udGFpbnMgdGhpcyBkaXNwbGF5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ29udGFpbmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtdWx0aXBsaWVkIGFscGhhIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgdHJhbnNmb3JtIG9mIHRoZSBvYmplY3QgYmFzZWQgb24gd29ybGQgKHBhcmVudCkgZmFjdG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS5sb2NhbFRyYW5zZm9ybTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcmVhIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0by4gVGhpcyBpcyB1c2VkIGFzIG1vcmUgb2YgYW4gb3B0aW1pc2F0aW9uXG4gICAgICogcmF0aGVyIHRoYW4gZmlndXJpbmcgb3V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGVhY2ggZnJhbWUgeW91IGNhbiBzZXQgdGhpcyByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW9zdCB1cC10by1kYXRlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgbWFzayBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gIC8vICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxheU9iamVjdDtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNjYWxlWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcm90YXRpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uZGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX2NyID0gTWF0aC5jb3ModmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBzcHJpdGUgaXMgZ2xvYmFsbHkgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB3b3JsZFZpc2libGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udmlzaWJsZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICB9IHdoaWxlIChpdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIG1hc2sgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LiBBIG1hc2sgaXMgYW4gb2JqZWN0IHRoYXQgbGltaXRzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIG9iamVjdCB0byB0aGUgc2hhcGUgb2YgdGhlIG1hc2sgYXBwbGllZCB0byBpdC5cbiAgICAgKiBJbiBQSVhJIGEgcmVndWxhciBtYXNrIG11c3QgYmUgYSBQSVhJLkdyYXBoaWNzIG9yIGEgUElYSS5TcHJpdGUgb2JqZWN0LiBUaGlzIGFsbG93cyBmb3IgbXVjaCBmYXN0ZXIgbWFza2luZyBpbiBjYW52YXMgYXMgaXQgdXRpbGlzZXMgc2hhcGUgY2xpcHBpbmcuXG4gICAgICogVG8gcmVtb3ZlIGEgbWFzaywgc2V0IHRoaXMgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3N8UElYSS5TcHJpdGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBtYXNrOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrLnJlbmRlcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXNrID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LlxuICAgICAqICogSU1QT1JUQU5UOiBUaGlzIGlzIGEgd2ViR0wgb25seSBmZWF0dXJlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlci5cbiAgICAgKiBUbyByZW1vdmUgZmlsdGVycyBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ251bGwnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkFic3RyYWN0RmlsdGVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMgJiYgdGhpcy5fZmlsdGVycy5zbGljZSgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlICYmIHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogVE9ETyAtIE9wdGltaXphdGlvbiBwYXNzIVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vaWYodGhpcy50cmFuc2Zvcm0uZGlydHkgfHwgcGFyZW50LnRyYW5zZm9ybS5kaXJ0eSlcbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICAvLyBtdWx0aXBseSB0aGUgYWxwaGFzLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gPSBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICpcbiAqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH1cbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyhtYXRoLk1hdHJpeC5JREVOVElUWSk7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9HbG9iYWwgPSBmdW5jdGlvbiAocG9zaXRpb24pXG57XG4gICAgLy8gdGhpcyBwYXJlbnQgY2hlY2sgaXMgZm9yIGp1c3QgaW4gY2FzZSB0aGUgaXRlbSBpcyBhIHJvb3Qgb2JqZWN0LlxuICAgIC8vIElmIGl0IGlzIHdlIG5lZWQgdG8gZ2l2ZSBpdCBhIHRlbXBvcmFyeSBwYXJlbnQgc28gdGhhdCBkaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtIHdvcmtzIGNvcnJlY3RseVxuICAgIC8vIHRoaXMgaXMgbWFpbmx5IHRvIGF2b2lkIGEgcGFyZW50IGNoZWNrIGluIHRoZSBtYWluIGxvb3AuIEV2ZXJ5IGxpdHRsZSBoZWxwcyBmb3IgcGVyZm9ybWFuY2UgOilcbiAgICBpZighdGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLnBhcmVudCA9IF90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIGxvdFxuICAgIHJldHVybiB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5KHBvc2l0aW9uKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgbG9jYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHJlbGF0aXZlIHRvIGFub3RoZXIgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEBwYXJhbSBbZnJvbV0ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gY2FsY3VsYXRlIHRoZSBnbG9iYWwgcG9zaXRpb24gZnJvbVxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBQb2ludClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9Mb2NhbCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgZnJvbSwgcG9pbnQpXG57XG4gICAgaWYgKGZyb20pXG4gICAge1xuICAgICAgICBwb3NpdGlvbiA9IGZyb20udG9HbG9iYWwocG9zaXRpb24pO1xuICAgIH1cblxuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIHNpbXBseSBhcHBseSB0aGUgbWF0cml4Li5cbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9zaXRpb24sIHBvaW50KTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyBPVkVSV1JJVEU7XG59O1xuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBwYXJlbnQgQ29udGFpbmVyIG9mIHRoaXMgRGlzcGxheU9iamVjdFxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge0NvbnRhaW5lcn0gVGhlIENvbnRhaW5lciB0byBhZGQgdGhpcyBEaXNwbGF5T2JqZWN0IHRvXG4gKiBAcmV0dXJuIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdGhhdCB0aGlzIERpc3BsYXlPYmplY3Qgd2FzIGFkZGVkIHRvXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFBhcmVudCA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWNvbnRhaW5lci5hZGRDaGlsZClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0UGFyZW50OiBBcmd1bWVudCBtdXN0IGJlIGEgQ29udGFpbmVyJyk7XG4gICAgfVxuXG4gICAgY29udGFpbmVyLmFkZENoaWxkKHRoaXMpO1xuICAgIHJldHVybiBjb250YWluZXI7XG59O1xuXG4vKipcbiAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHNldCB0aGUgcG9zdGlvbiwgc2NhbGUsIHNrZXcgYW5kIHBpdm90IGF0IG9uY2UuXG4gKlxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IFRoZSBYIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gVGhlIFkgcG9zaXRpb25cbiAqIEBwYXJhbSBbc2NhbGVYPTFdIHtudW1iZXJ9IFRoZSBYIHNjYWxlIHZhbHVlXG4gKiBAcGFyYW0gW3NjYWxlWT0xXSB7bnVtYmVyfSBUaGUgWSBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtyb3RhdGlvbj0wXSB7bnVtYmVyfSBUaGUgcm90YXRpb25cbiAqIEBwYXJhbSBbc2tld1g9MF0ge251bWJlcn0gVGhlIFggc2tldyB2YWx1ZVxuICogQHBhcmFtIFtza2V3WT0wXSB7bnVtYmVyfSBUaGUgWSBza2V3IHZhbHVlXG4gKiBAcGFyYW0gW3Bpdm90WD0wXSB7bnVtYmVyfSBUaGUgWCBwaXZvdCB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFk9MF0ge251bWJlcn0gVGhlIFkgcGl2b3QgdmFsdWVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24oeCwgeSwgc2NhbGVYLCBzY2FsZVksIHJvdGF0aW9uLCBza2V3WCwgc2tld1ksIHBpdm90WCwgcGl2b3RZKSAvL2pzaGludCBpZ25vcmU6bGluZVxue1xuICAgIHRoaXMucG9zaXRpb24ueCA9IHggfHwgMDtcbiAgICB0aGlzLnBvc2l0aW9uLnkgPSB5IHx8IDA7XG4gICAgdGhpcy5zY2FsZS54ID0gIXNjYWxlWCA/IDEgOiBzY2FsZVg7XG4gICAgdGhpcy5zY2FsZS55ID0gIXNjYWxlWSA/IDEgOiBzY2FsZVk7XG4gICAgdGhpcy5yb3RhdGlvbiA9IHJvdGF0aW9uIHx8IDA7XG4gICAgdGhpcy5za2V3LnggPSBza2V3WCB8fCAwO1xuICAgIHRoaXMuc2tldy55ID0gc2tld1kgfHwgMDtcbiAgICB0aGlzLnBpdm90LnggPSBwaXZvdFggfHwgMDtcbiAgICB0aGlzLnBpdm90LnkgPSBwaXZvdFkgfHwgMDtcbiAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQmFzZSBkZXN0cm95IG1ldGhvZCBmb3IgZ2VuZXJpYyBkaXNwbGF5IG9iamVjdHNcbiAqXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdGhpcy5wb3NpdGlvbiA9IG51bGw7XG4gICAgdGhpcy5zY2FsZSA9IG51bGw7XG4gICAgdGhpcy5waXZvdCA9IG51bGw7XG4gICAgdGhpcy5za2V3ID0gbnVsbDtcblxuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIHRoaXMuX2JvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fbWFzayA9IG51bGw7XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xufTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIE9ic2VydmFibGVQb2ludCh0cmFuc2Zvcm0sIHgsIHkpXG57XG4gICAgdGhpcy5feCA9IHggfHwgMDtcbiAgICB0aGlzLl95ID0geSB8fCAwO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG59XG5cbk9ic2VydmFibGVQb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYnNlcnZhYmxlUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IE9ic2VydmFibGVQb2ludDtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE9ic2VydmFibGVQb2ludC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3Qgb24gdGhlIHggYXhpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIHg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5feDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3ggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3k7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl95ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5PYnNlcnZhYmxlUG9pbnQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuX3ggPSB4IHx8IDA7XG4gICAgdGhpcy5feSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLl94IDogMCApO1xuICAgIFxuICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcbnZhciBPYnNlcnZhYmxlUG9pbnQgPSByZXF1aXJlKCcuL09ic2VydmFibGVQb2ludCcpO1xuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLCAwKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLDEsIDEpO1xuICAgIHRoaXMucGl2b3QgPSBuZXcgT2JzZXJ2YWJsZVBvaW50KHRoaXMsIDAsIDApO1xuICAgIHRoaXMuc2tldyA9IG5ldyBPYnNlcnZhYmxlUG9pbnQodGhpcywgMCwwKTtcbiAgICBcbiAgICB0aGlzLnJvdGF0aW9uID0gMDtcbiAgICB0aGlzLl9zciA9IE1hdGguc2luKDApO1xuICAgIHRoaXMuX2NyID0gTWF0aC5jb3MoMCk7XG4gICAgXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cblxuICAgIHRoaXMudXBkYXRlZCA9IHRydWU7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUcmFuc2Zvcm07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKHBhcmVudFRyYW5zZm9ybSlcbntcbiAgICB2YXIgcHQgPSBwYXJlbnRUcmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgbHQgPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3g7XG4gICAgICAgIGx0LmIgID0gIHRoaXMuX3NyICogdGhpcy5zY2FsZS5feDtcbiAgICAgICAgbHQuYyAgPSAtdGhpcy5fc3IgKiB0aGlzLnNjYWxlLl95O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3k7XG4gICAgICAgIGx0LnR4ID0gIHRoaXMucG9zaXRpb24uX3ggLSAodGhpcy5waXZvdC5feCAqIGx0LmEgKyB0aGlzLnBpdm90Ll95ICogbHQuYyk7XG4gICAgICAgIGx0LnR5ID0gIHRoaXMucG9zaXRpb24uX3kgLSAodGhpcy5waXZvdC5feCAqIGx0LmIgKyB0aGlzLnBpdm90Ll95ICogbHQuZCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVkID0gdGhpcy5kaXJ0eSB8fCBwYXJlbnRUcmFuc2Zvcm0uZGlydHk7XG5cbiAgICBpZih0aGlzLnVwZGF0ZWQpXG4gICAgeyAgICAgIFxuICAgICAgICAvLyBjb25jYXQgdGhlIHBhcmVudCBtYXRyaXggd2l0aCB0aGUgb2JqZWN0cyB0cmFuc2Zvcm0uXG4gICAgICAgIHd0LmEgID0gbHQuYSAgKiBwdC5hICsgbHQuYiAgKiBwdC5jO1xuICAgICAgICB3dC5iICA9IGx0LmEgICogcHQuYiArIGx0LmIgICogcHQuZDtcbiAgICAgICAgd3QuYyAgPSBsdC5jICAqIHB0LmEgKyBsdC5kICAqIHB0LmM7XG4gICAgICAgIHd0LmQgID0gbHQuYyAgKiBwdC5iICsgbHQuZCAgKiBwdC5kO1xuICAgICAgICB3dC50eCA9IGx0LnR4ICogcHQuYSArIGx0LnR5ICogcHQuYyArIHB0LnR4O1xuICAgICAgICB3dC50eSA9IGx0LnR4ICogcHQuYiArIGx0LnR5ICogcHQuZCArIHB0LnR5O1xuICAgIH1cbiAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhbnNmb3JtO1xuXG5cbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBDYW52YXNHcmFwaGljcyA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL0dyYXBoaWNzRGF0YScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIEdyYXBoaWNzIGNsYXNzIGNvbnRhaW5zIG1ldGhvZHMgdXNlZCB0byBkcmF3IHByaW1pdGl2ZSBzaGFwZXMgc3VjaCBhcyBsaW5lcywgY2lyY2xlcyBhbmRcbiAqIHJlY3RhbmdsZXMgdG8gdGhlIGRpc3BsYXksIGFuZCB0byBjb2xvciBhbmQgZmlsbCB0aGVtLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzKClcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSB2YWx1ZSB1c2VkIHdoZW4gZmlsbGluZyB0aGUgR3JhcGhpY3Mgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggKHRoaWNrbmVzcykgb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29sb3Igb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBHcmFwaGljcyBkYXRhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFRoaXMgaXMgYSBoZXggdmFsdWUuIEFwcGx5IGEgdmFsdWUgb2YgMHhGRkZGRkYgdG8gcmVzZXQgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmV2aW91cyB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFVzZWQgdG8gY29tcGFyZSB0byB0aGUgY3VycmVudCB0aW50IGFuZCBjaGVjayBpZiB0aGVyZXMgY2hhbmdlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLl9wcmV2VGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMO1xuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCBwYXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgY29udGFpbmluZyBzb21lIFdlYkdMLXJlbGF0ZWQgcHJvcGVydGllcyB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIG9iamVjdD59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAvLyBUT0RPIC0gX3dlYmdsIHNob3VsZCB1c2UgYSBwcm90b3R5cGUgb2JqZWN0LCBub3QgYSByYW5kb20gdW5kb2N1bWVudGVkIG9iamVjdC4uLlxuICAgIHRoaXMuX3dlYkdMID0ge307XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgc2hhcGUgaXMgYmVpbmcgdXNlZCBhcyBhIG1hc2suXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNNYXNrID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYm91bmRzJyBwYWRkaW5nIHVzZWQgZm9yIGJvdW5kcyBjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJvdW5kc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQSBjYWNoZSBvZiB0aGUgbG9jYWwgYm91bmRzIHRvIHByZXZlbnQgcmVjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwwLDEsMSk7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlIGdyYXBoaWNzXG4gICAgICogb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIFdlYkdMIGdyYXBoaWNzIG9iamVjdCBoYXMgY2hhbmdlZC4gSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZVxuICAgICAqIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlY2FsY3VsYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcblxuICAgIHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIGNhY2hlZCBzcHJpdGUgb2JqZWN0IG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBjYWNoZUFzQml0bWFwIGlzIHNldCB0byB0cnVlIHRoZSBncmFwaGljcyBvYmplY3Qgd2lsbCBiZSByZW5kZXJlZCBhcyBpZiBpdCB3YXMgYSBzcHJpdGUuXG4gICAgICogVGhpcyBpcyB1c2VmdWwgaWYgeW91ciBncmFwaGljcyBlbGVtZW50IGRvZXMgbm90IGNoYW5nZSBvZnRlbiwgYXMgaXQgd2lsbCBzcGVlZCB1cCB0aGUgcmVuZGVyaW5nXG4gICAgICogb2YgdGhlIG9iamVjdCBpbiBleGNoYW5nZSBmb3IgdGFraW5nIHVwIHRleHR1cmUgbWVtb3J5LiBJdCBpcyBhbHNvIHVzZWZ1bCBpZiB5b3UgbmVlZCB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3QgdG8gYmUgYW50aS1hbGlhc2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVuZGVyZWQgdXNpbmcgY2FudmFzLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCBpZlxuICAgICAqIHlvdSBhcmUgY29uc3RhbnRseSByZWRyYXdpbmcgdGhlIGdyYXBoaWNzIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBjYWNoZUFzQml0bWFwXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5HcmFwaGljcyNcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuR3JhcGhpY3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcbkdyYXBoaWNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljcztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEdyYXBoaWNzIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqIE5vdGUgdGhhdCB0aGUgb25seSB0aGUgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IGFyZSBjbG9uZWQsIG5vdCBpdHMgdHJhbnNmb3JtIChwb3NpdGlvbixzY2FsZSxldGMpXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2xvbmUgPSBuZXcgR3JhcGhpY3MoKTtcblxuICAgIGNsb25lLnJlbmRlcmFibGUgICAgPSB0aGlzLnJlbmRlcmFibGU7XG4gICAgY2xvbmUuZmlsbEFscGhhICAgICA9IHRoaXMuZmlsbEFscGhhO1xuICAgIGNsb25lLmxpbmVXaWR0aCAgICAgPSB0aGlzLmxpbmVXaWR0aDtcbiAgICBjbG9uZS5saW5lQ29sb3IgICAgID0gdGhpcy5saW5lQ29sb3I7XG4gICAgY2xvbmUudGludCAgICAgICAgICA9IHRoaXMudGludDtcbiAgICBjbG9uZS5ibGVuZE1vZGUgICAgID0gdGhpcy5ibGVuZE1vZGU7XG4gICAgY2xvbmUuaXNNYXNrICAgICAgICA9IHRoaXMuaXNNYXNrO1xuICAgIGNsb25lLmJvdW5kc1BhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG4gICAgY2xvbmUuZGlydHkgICAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuZ2xEaXJ0eSAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuY2FjaGVkU3ByaXRlRGlydHkgPSB0aGlzLmNhY2hlZFNwcml0ZURpcnR5O1xuXG4gICAgLy8gY29weSBncmFwaGljcyBkYXRhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIGNsb25lLmdyYXBoaWNzRGF0YS5wdXNoKHRoaXMuZ3JhcGhpY3NEYXRhW2ldLmNsb25lKCkpO1xuICAgIH1cblxuICAgIGNsb25lLmN1cnJlbnRQYXRoID0gY2xvbmUuZ3JhcGhpY3NEYXRhW2Nsb25lLmdyYXBoaWNzRGF0YS5sZW5ndGggLSAxXTtcblxuICAgIGNsb25lLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICByZXR1cm4gY2xvbmU7XG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgbGluZSBzdHlsZSB1c2VkIGZvciBzdWJzZXF1ZW50IGNhbGxzIHRvIEdyYXBoaWNzIG1ldGhvZHMgc3VjaCBhcyB0aGUgbGluZVRvKCkgbWV0aG9kIG9yIHRoZSBkcmF3Q2lyY2xlKCkgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUubGluZVN0eWxlID0gZnVuY3Rpb24gKGxpbmVXaWR0aCwgY29sb3IsIGFscGhhKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoIHx8IDA7XG4gICAgdGhpcy5saW5lQ29sb3IgPSBjb2xvciB8fCAwO1xuICAgIHRoaXMubGluZUFscGhhID0gKGFscGhhID09PSB1bmRlZmluZWQpID8gMSA6IGFscGhhO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBoYWxmd2F5IHRocm91Z2ggYSBsaW5lPyBzdGFydCBhIG5ldyBvbmUhXG4gICAgICAgICAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnNsaWNlKC0yKSk7XG4gICAgICAgICAgICBzaGFwZS5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSBpdHMgZW1wdHkgc28gbGV0cyBqdXN0IHNldCB0aGUgbGluZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVXaWR0aCA9IHRoaXMubGluZVdpZHRoO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZUFscGhhID0gdGhpcy5saW5lQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogTW92ZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byB4LCB5LlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IHRoZSBYIGNvb3JkaW5hdGUgdG8gbW92ZSB0b1xuICogQHBhcmFtIHkge251bWJlcn0gdGhlIFkgY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICAqL1xuR3JhcGhpY3MucHJvdG90eXBlLm1vdmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24oW3gseV0pO1xuICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIGxpbmUgdXNpbmcgdGhlIGN1cnJlbnQgbGluZSBzdHlsZSBmcm9tIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8gKHgsIHkpO1xuICogVGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiBpcyB0aGVuIHNldCB0byAoeCwgeSkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBkcmF3IHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lVG8gPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgsIHkpO1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnF1YWRyYXRpY0N1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICBuID0gMjAsXG4gICAgICAgIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLCAwKTtcbiAgICB9XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBuOyArK2kpXG4gICAge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgeGEgPSBmcm9tWCArICggKGNwWCAtIGZyb21YKSAqIGogKTtcbiAgICAgICAgeWEgPSBmcm9tWSArICggKGNwWSAtIGZyb21ZKSAqIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCggeGEgKyAoICgoY3BYICsgKCAodG9YIC0gY3BYKSAqIGogKSkgLSB4YSkgKiBqICksXG4gICAgICAgICAgICAgICAgICAgICB5YSArICggKChjcFkgKyAoICh0b1kgLSBjcFkpICogaiApKSAtIHlhKSAqIGogKSApO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gY3BYMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlemllckN1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIGNwWDIsIGNwWTIsIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgbiA9IDIwLFxuICAgICAgICBkdCxcbiAgICAgICAgZHQyLFxuICAgICAgICBkdDMsXG4gICAgICAgIHQyLFxuICAgICAgICB0MyxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICBkdCA9ICgxIC0gaik7XG4gICAgICAgIGR0MiA9IGR0ICogZHQ7XG4gICAgICAgIGR0MyA9IGR0MiAqIGR0O1xuXG4gICAgICAgIHQyID0gaiAqIGo7XG4gICAgICAgIHQzID0gdDIgKiBqO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCBkdDMgKiBmcm9tWCArIDMgKiBkdDIgKiBqICogY3BYICsgMyAqIGR0ICogdDIgKiBjcFgyICsgdDMgKiB0b1gsXG4gICAgICAgICAgICAgICAgICAgICBkdDMgKiBmcm9tWSArIDMgKiBkdDIgKiBqICogY3BZICsgMyAqIGR0ICogdDIgKiBjcFkyICsgdDMgKiB0b1kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjVG8oKSBtZXRob2QgY3JlYXRlcyBhbiBhcmMvY3VydmUgYmV0d2VlbiB0d28gdGFuZ2VudHMgb24gdGhlIGNhbnZhcy5cbiAqXG4gKiBcImJvcnJvd2VkXCIgZnJvbSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Z4Y2FudmFzLyAtIHRoYW5rcyBnb29nbGUhXG4gKlxuICogQHBhcmFtIHgxIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTEge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB4MiB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGFyY1xuICogQHBhcmFtIHkyIHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGFyY1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmFyY1RvID0gZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyLCByYWRpdXMpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oeDEsIHkxKTtcbiAgICB9XG5cbiAgICB2YXIgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMsXG4gICAgICAgIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0sXG4gICAgICAgIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0sXG4gICAgICAgIGExID0gZnJvbVkgLSB5MSxcbiAgICAgICAgYjEgPSBmcm9tWCAtIHgxLFxuICAgICAgICBhMiA9IHkyICAgLSB5MSxcbiAgICAgICAgYjIgPSB4MiAgIC0geDEsXG4gICAgICAgIG1tID0gTWF0aC5hYnMoYTEgKiBiMiAtIGIxICogYTIpO1xuXG4gICAgaWYgKG1tIDwgMS4wZS04IHx8IHJhZGl1cyA9PT0gMClcbiAgICB7XG4gICAgICAgIGlmIChwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAhPT0geDEgfHwgcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0gIT09IHkxKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHMucHVzaCh4MSwgeTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBkZCA9IGExICogYTEgKyBiMSAqIGIxLFxuICAgICAgICAgICAgY2MgPSBhMiAqIGEyICsgYjIgKiBiMixcbiAgICAgICAgICAgIHR0ID0gYTEgKiBhMiArIGIxICogYjIsXG4gICAgICAgICAgICBrMSA9IHJhZGl1cyAqIE1hdGguc3FydChkZCkgLyBtbSxcbiAgICAgICAgICAgIGsyID0gcmFkaXVzICogTWF0aC5zcXJ0KGNjKSAvIG1tLFxuICAgICAgICAgICAgajEgPSBrMSAqIHR0IC8gZGQsXG4gICAgICAgICAgICBqMiA9IGsyICogdHQgLyBjYyxcbiAgICAgICAgICAgIGN4ID0gazEgKiBiMiArIGsyICogYjEsXG4gICAgICAgICAgICBjeSA9IGsxICogYTIgKyBrMiAqIGExLFxuICAgICAgICAgICAgcHggPSBiMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHB5ID0gYTEgKiAoazIgKyBqMSksXG4gICAgICAgICAgICBxeCA9IGIyICogKGsxICsgajIpLFxuICAgICAgICAgICAgcXkgPSBhMiAqIChrMSArIGoyKSxcbiAgICAgICAgICAgIHN0YXJ0QW5nbGUgPSBNYXRoLmF0YW4yKHB5IC0gY3ksIHB4IC0gY3gpLFxuICAgICAgICAgICAgZW5kQW5nbGUgICA9IE1hdGguYXRhbjIocXkgLSBjeSwgcXggLSBjeCk7XG5cbiAgICAgICAgdGhpcy5hcmMoY3ggKyB4MSwgY3kgKyB5MSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYjEgKiBhMiA+IGIyICogYTEpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSAodXNlZCB0byBjcmVhdGUgY2lyY2xlcywgb3IgcGFydHMgb2YgY2lyY2xlcykuXG4gKlxuICogQHBhcmFtIGN4IHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gY3kge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gc3RhcnRBbmdsZSB7bnVtYmVyfSBUaGUgc3RhcnRpbmcgYW5nbGUsIGluIHJhZGlhbnMgKDAgaXMgYXQgdGhlIDMgbydjbG9jayBwb3NpdGlvbiBvZiB0aGUgYXJjJ3MgY2lyY2xlKVxuICogQHBhcmFtIGVuZEFuZ2xlIHtudW1iZXJ9IFRoZSBlbmRpbmcgYW5nbGUsIGluIHJhZGlhbnNcbiAqIEBwYXJhbSBhbnRpY2xvY2t3aXNlIHtib29sZWFufSBPcHRpb25hbC4gU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGRyYXdpbmcgc2hvdWxkIGJlIGNvdW50ZXJjbG9ja3dpc2Ugb3IgY2xvY2t3aXNlLiBGYWxzZSBpcyBkZWZhdWx0LCBhbmQgaW5kaWNhdGVzIGNsb2Nrd2lzZSwgd2hpbGUgdHJ1ZSBpbmRpY2F0ZXMgY291bnRlci1jbG9ja3dpc2UuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjID0gZnVuY3Rpb24oY3gsIGN5LCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBhbnRpY2xvY2t3aXNlKVxue1xuICAgIGFudGljbG9ja3dpc2UgPSBhbnRpY2xvY2t3aXNlIHx8IGZhbHNlO1xuXG4gICAgaWYgKHN0YXJ0QW5nbGUgPT09IGVuZEFuZ2xlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYoICFhbnRpY2xvY2t3aXNlICYmIGVuZEFuZ2xlIDw9IHN0YXJ0QW5nbGUgKVxuICAgIHtcbiAgICAgICAgZW5kQW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuICAgIGVsc2UgaWYoIGFudGljbG9ja3dpc2UgJiYgc3RhcnRBbmdsZSA8PSBlbmRBbmdsZSApXG4gICAge1xuICAgICAgICBzdGFydEFuZ2xlICs9IE1hdGguUEkgKiAyO1xuICAgIH1cblxuICAgIHZhciBzd2VlcCA9IGFudGljbG9ja3dpc2UgPyAoc3RhcnRBbmdsZSAtIGVuZEFuZ2xlKSAqIC0xIDogKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSk7XG4gICAgdmFyIHNlZ3MgPSAgTWF0aC5jZWlsKE1hdGguYWJzKHN3ZWVwKSAvIChNYXRoLlBJICogMikpICogNDA7XG5cbiAgICBpZihzd2VlcCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBzdGFydFggPSBjeCArIE1hdGguY29zKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuICAgIHZhciBzdGFydFkgPSBjeSArIE1hdGguc2luKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHN0YXJ0WCwgc3RhcnRZKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciB0aGV0YSA9IHN3ZWVwLyhzZWdzKjIpO1xuICAgIHZhciB0aGV0YTIgPSB0aGV0YSoyO1xuXG4gICAgdmFyIGNUaGV0YSA9IE1hdGguY29zKHRoZXRhKTtcbiAgICB2YXIgc1RoZXRhID0gTWF0aC5zaW4odGhldGEpO1xuXG4gICAgdmFyIHNlZ01pbnVzID0gc2VncyAtIDE7XG5cbiAgICB2YXIgcmVtYWluZGVyID0gKCBzZWdNaW51cyAlIDEgKSAvIHNlZ01pbnVzO1xuXG4gICAgZm9yKHZhciBpPTA7IGk8PXNlZ01pbnVzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcmVhbCA9ICBpICsgcmVtYWluZGVyICogaTtcblxuXG4gICAgICAgIHZhciBhbmdsZSA9ICgodGhldGEpICsgc3RhcnRBbmdsZSArICh0aGV0YTIgKiByZWFsKSk7XG5cbiAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgIHZhciBzID0gLU1hdGguc2luKGFuZ2xlKTtcblxuICAgICAgICBwb2ludHMucHVzaCgoIChjVGhldGEgKiAgYykgKyAoc1RoZXRhICogcykgKSAqIHJhZGl1cyArIGN4LFxuICAgICAgICAgICAgICAgICAgICAoIChjVGhldGEgKiAtcykgKyAoc1RoZXRhICogYykgKSAqIHJhZGl1cyArIGN5KTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIGEgc2ltcGxlIG9uZS1jb2xvciBmaWxsIHRoYXQgc3Vic2VxdWVudCBjYWxscyB0byBvdGhlciBHcmFwaGljcyBtZXRob2RzXG4gKiAoc3VjaCBhcyBsaW5lVG8oKSBvciBkcmF3Q2lyY2xlKCkpIHVzZSB3aGVuIGRyYXdpbmcuXG4gKlxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlZ2luRmlsbCA9IGZ1bmN0aW9uIChjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5maWxsaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPD0gMilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsID0gdGhpcy5maWxsaW5nO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQ29sb3IgPSB0aGlzLmZpbGxDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbEFscGhhID0gdGhpcy5maWxsQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBmaWxsIHRvIHRoZSBsaW5lcyBhbmQgc2hhcGVzIHRoYXQgd2VyZSBhZGRlZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHRoZSBiZWdpbkZpbGwoKSBtZXRob2QuXG4gKlxuICogQHJldHVybiB7R3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5lbmRGaWxsID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IG51bGw7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCApXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguUmVjdGFuZ2xlKHgseSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gUmFkaXVzIG9mIHRoZSByZWN0YW5nbGUgY29ybmVyc1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSb3VuZGVkUmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzIClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5Sb3VuZGVkUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgY2lyY2xlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3Q2lyY2xlID0gZnVuY3Rpb24gKHgsIHksIHJhZGl1cylcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5DaXJjbGUoeCx5LCByYWRpdXMpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhbiBlbGxpcHNlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIGhhbGYgd2lkdGggb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd0VsbGlwc2UgPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5FbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIHBvbHlnb24gdXNpbmcgdGhlIGdpdmVuIHBhdGguXG4gKlxuICogQHBhcmFtIHBhdGgge251bWJlcltdfFBJWEkuUG9pbnRbXX0gVGhlIHBhdGggZGF0YSB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgcG9seWdvbi5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UG9seWdvbiA9IGZ1bmN0aW9uIChwYXRoKVxue1xuICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGFzc2lnbm1lbnQgZGVvcHRcbiAgICAvLyBzZWUgc2VjdGlvbiAzLjE6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgIHZhciBwb2ludHMgPSBwYXRoO1xuXG4gICAgdmFyIGNsb3NlZCA9IHRydWU7XG5cbiAgICBpZiAocG9pbnRzIGluc3RhbmNlb2YgbWF0aC5Qb2x5Z29uKVxuICAgIHtcbiAgICAgICAgY2xvc2VkID0gcG9pbnRzLmNsb3NlZDtcbiAgICAgICAgcG9pbnRzID0gcG9pbnRzLnBvaW50cztcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHNbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHBvaW50cyk7XG4gICAgc2hhcGUuY2xvc2VkID0gY2xvc2VkO1xuXG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZ3JhcGhpY3MgdGhhdCB3ZXJlIGRyYXduIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LCBhbmQgcmVzZXRzIGZpbGwgYW5kIGxpbmUgc3R5bGUgc2V0dGluZ3MuXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG4gICAgdGhpcy5maWxsaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmNsZWFyRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gW107XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGdlb21ldHJ5IGlzIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNob3VsZCBiZSBvbmUgb2YgdGhlIHNjYWxlTW9kZSBjb25zdHNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBncmFwaGljcyBvYmplY3RcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVzb2x1dGlvbiwgc2NhbGVNb2RlKVxue1xuXG4gICAgcmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGggKiByZXNvbHV0aW9uLCBib3VuZHMuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXNCdWZmZXIuY29udGV4dC5zY2FsZShyZXNvbHV0aW9uLCByZXNvbHV0aW9uKTtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIGNhbnZhc0J1ZmZlci5jb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcblxuICAgIGlmICh0aGlzLmdsRGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5nbERpcnR5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5yZW5kZXIodGhpcyk7XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5pc01hc2sgPT09IHRydWUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHRpbnQgaGFzIGNoYW5nZWQsIHNldCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRpcnR5LlxuICAgIGlmICh0aGlzLl9wcmV2VGludCAhPT0gdGhpcy50aW50KSB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIHRoaXMgY29kZSBtYXkgc3RpbGwgYmUgbmVlZGVkIHNvIGxlYXZpbmcgZm9yIG5vdy4uXG4gICAgLy9cbiAgICAvKlxuICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuZGlydHkgfHwgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVDYWNoZWRTcHJpdGUoKTtcblxuICAgICAgICAgICAgLy8gd2Ugd2lsbCBhbHNvIG5lZWQgdG8gdXBkYXRlIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUoKTtcblxuICAgICAgICAgICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFscGhhID0gdGhpcy5hbHBoYTtcblxuICAgICAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLl9jYWNoZWRTcHJpdGUsIHJlbmRlcmVyKTtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgICovXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY29udGV4dCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYm91bmRzIG9mIHRoZSBncmFwaGljIHNoYXBlIGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IFRoZSB3b3JsZCB0cmFuc2Zvcm0gbWF0cml4IHRvIHVzZSwgZGVmYXVsdHMgdG8gdGhpc1xuICogIG9iamVjdCdzIHdvcmxkVHJhbnNmb3JtLlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICAvLyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBpdGVtIGlzIGEgbWFzayFcbiAgICAgICAgaWYgKCF0aGlzLnJlbmRlcmFibGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJvdW5kc0RpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICAgICAgICAgIHRoaXMuZ2xEaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYm91bmRzRGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9sb2NhbEJvdW5kcztcblxuICAgICAgICB2YXIgdzAgPSBib3VuZHMueDtcbiAgICAgICAgdmFyIHcxID0gYm91bmRzLndpZHRoICsgYm91bmRzLng7XG5cbiAgICAgICAgdmFyIGgwID0gYm91bmRzLnk7XG4gICAgICAgIHZhciBoMSA9IGJvdW5kcy5oZWlnaHQgKyBib3VuZHMueTtcblxuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAgICAgdmFyIHgyID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgICAgICB2YXIgeTMgPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgICAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgbWF4WCA9IHgxO1xuICAgICAgICB2YXIgbWF4WSA9IHkxO1xuXG4gICAgICAgIHZhciBtaW5YID0geDE7XG4gICAgICAgIHZhciBtaW5ZID0geTE7XG5cbiAgICAgICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICAgICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICAgICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgICAgICB0aGlzLl9ib3VuZHMueCA9IG1pblg7XG4gICAgICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy55ID0gbWluWTtcbiAgICAgICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSB0aGlzLl9ib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBncmFwaGljcyBvYmplY3RcbipcbiogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4qL1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciBncmFwaGljc0RhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKCFkYXRhLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gb25seSBkZWFsIHdpdGggZmlsbHMuLlxuICAgICAgICBpZiAoZGF0YS5zaGFwZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCBkYXRhLnNoYXBlLmNvbnRhaW5zKCB0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkgKSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAqXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcblxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICBpZiAodGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdmFyIHNoYXBlLCBwb2ludHMsIHgsIHksIHcsIGg7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVtpXTtcbiAgICAgICAgICAgIHZhciB0eXBlID0gZGF0YS50eXBlO1xuICAgICAgICAgICAgdmFyIGxpbmVXaWR0aCA9IGRhdGEubGluZVdpZHRoO1xuICAgICAgICAgICAgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QgfHwgdHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLnggLSBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueSAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS53aWR0aCArIGxpbmVXaWR0aDtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLnJhZGl1cyArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLng7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLmhlaWdodCArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFBPTFlcbiAgICAgICAgICAgICAgICBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBvaW50cy5sZW5ndGg7IGogKz0gMilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHggPSBwb2ludHNbal07XG4gICAgICAgICAgICAgICAgICAgIHkgPSBwb2ludHNbaisxXTtcblxuICAgICAgICAgICAgICAgICAgICBtaW5YID0geC1saW5lV2lkdGggPCBtaW5YID8geC1saW5lV2lkdGggOiBtaW5YO1xuICAgICAgICAgICAgICAgICAgICBtYXhYID0geCtsaW5lV2lkdGggPiBtYXhYID8geCtsaW5lV2lkdGggOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblkgPSB5LWxpbmVXaWR0aCA8IG1pblkgPyB5LWxpbmVXaWR0aCA6IG1pblk7XG4gICAgICAgICAgICAgICAgICAgIG1heFkgPSB5K2xpbmVXaWR0aCA+IG1heFkgPyB5K2xpbmVXaWR0aCA6IG1heFk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIG1pblggPSAwO1xuICAgICAgICBtYXhYID0gMDtcbiAgICAgICAgbWluWSA9IDA7XG4gICAgICAgIG1heFkgPSAwO1xuICAgIH1cblxuICAgIHZhciBwYWRkaW5nID0gdGhpcy5ib3VuZHNQYWRkaW5nO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueCA9IG1pblggLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLndpZHRoID0gKG1heFggLSBtaW5YKSArIHBhZGRpbmcgKiAyO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueSA9IG1pblkgLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLmhlaWdodCA9IChtYXhZIC0gbWluWSkgKyBwYWRkaW5nICogMjtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjYWNoZWQgc3ByaXRlIHdoZW4gdGhlIHNwcml0ZSBoYXMgY2FjaGVBc0JpdG1hcCA9IHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIGlmICghdGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgdmFyIGNhbnZhc0J1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcbiAgICAgICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzQnVmZmVyLmNhbnZhcyk7XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlciA9IGNhbnZhc0J1ZmZlcjtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLnJlc2l6ZShib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIC8vIGxldmVyYWdlIHRoZSBhbmNob3IgdG8gYWNjb3VudCBmb3IgdGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudFxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQuc2F2ZSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC50cmFuc2xhdGUoLWJvdW5kcy54LC1ib3VuZHMueSk7XG5cbiAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3MgdG8gMSBmb3IgdGhlIHJlbmRlci4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIG5vdyByZW5kZXIgdGhlIGdyYXBoaWMuLlxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dCk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xufTtcbiovXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVDYWNoZWRTcHJpdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2FjaGVkU3ByaXRlID0gdGhpcy5fY2FjaGVkU3ByaXRlO1xuICAgIHZhciB0ZXh0dXJlID0gY2FjaGVkU3ByaXRlLnRleHR1cmU7XG4gICAgdmFyIGNhbnZhcyA9IGNhY2hlZFNwcml0ZS5idWZmZXIuY2FudmFzO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG4gICAgdGV4dHVyZS5jcm9wLndpZHRoID0gdGV4dHVyZS5mcmFtZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmNyb3AuaGVpZ2h0ID0gdGV4dHVyZS5mcmFtZS5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgY2FjaGVkU3ByaXRlLl93aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICBjYWNoZWRTcHJpdGUuX2hlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIGRpcnR5IGJhc2UgdGV4dHVyZXNcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmRpcnR5KCk7XG59OyovXG5cbi8qKlxuICogRGVzdHJveXMgYSBwcmV2aW91cyBjYWNoZWQgc3ByaXRlLlxuICpcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95Q2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUudGV4dHVyZS5kZXN0cm95KHRydWUpO1xuXG4gICAgLy8gbGV0IHRoZSBnYyBjb2xsZWN0IHRoZSB1bnVzZWQgc3ByaXRlXG4gICAgLy8gVE9ETyBjb3VsZCBiZSBvYmplY3QgcG9vbGVkIVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59OyovXG5cbi8qKlxuICogRHJhd3MgdGhlIGdpdmVuIHNoYXBlIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LiBDYW4gYmUgYW55IG9mIENpcmNsZSwgUmVjdGFuZ2xlLCBFbGxpcHNlLCBMaW5lIG9yIFBvbHlnb24uXG4gKlxuICogQHBhcmFtIHNoYXBlIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc0RhdGF9IFRoZSBnZW5lcmF0ZWQgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdTaGFwZSA9IGZ1bmN0aW9uIChzaGFwZSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIC8vIGNoZWNrIGN1cnJlbnQgcGF0aCFcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YS5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgdmFyIGRhdGEgPSBuZXcgR3JhcGhpY3NEYXRhKHRoaXMubGluZVdpZHRoLCB0aGlzLmxpbmVDb2xvciwgdGhpcy5saW5lQWxwaGEsIHRoaXMuZmlsbENvbG9yLCB0aGlzLmZpbGxBbHBoYSwgdGhpcy5maWxsaW5nLCBzaGFwZSk7XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YS5wdXNoKGRhdGEpO1xuXG4gICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAge1xuICAgICAgICBkYXRhLnNoYXBlLmNsb3NlZCA9IGRhdGEuc2hhcGUuY2xvc2VkIHx8IHRoaXMuZmlsbGluZztcbiAgICAgICAgdGhpcy5jdXJyZW50UGF0aCA9IGRhdGE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGRhdGE7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgLy8gZGVzdHJveSBlYWNoIG9mIHRoZSBHcmFwaGljc0RhdGEgb2JqZWN0c1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8vIGZvciBlYWNoIHdlYmdsIGRhdGEgZW50cnksIGRlc3Ryb3kgdGhlIFdlYkdMR3JhcGhpY3NEYXRhXG4gICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fd2ViZ2wpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl93ZWJnbFtpZF0uZGF0YS5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgdGhpcy5fd2ViZ2xbaWRdLmRhdGFbal0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG4gICAgdGhpcy5fd2ViZ2wgPSBudWxsO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEEgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gbGluZVdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gZmlsbENvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGxBbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBmaWxsICAgICAge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICogQHBhcmFtIHNoYXBlICAgICB7Q2lyY2xlfFJlY3RhbmdsZXxFbGxpcHNlfExpbmV8UG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICovXG5mdW5jdGlvbiBHcmFwaGljc0RhdGEobGluZVdpZHRoLCBsaW5lQ29sb3IsIGxpbmVBbHBoYSwgZmlsbENvbG9yLCBmaWxsQWxwaGEsIGZpbGwsIHNoYXBlKVxue1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQ29sb3IgPSBsaW5lQ29sb3I7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQWxwaGEgPSBsaW5lQWxwaGE7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLl9saW5lVGludCA9IGxpbmVDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxDb2xvciA9IGZpbGxDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IGZpbGxBbHBoYTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBjYWNoZWQgdGludCBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuX2ZpbGxUaW50ID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhcGUgaXMgZmlsbGVkIHdpdGggYSBjb2xvdXJcbiAgICAgKi9cbiAgICB0aGlzLmZpbGwgPSBmaWxsO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICAgICAqL1xuICAgIHRoaXMuc2hhcGUgPSBzaGFwZTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBUaGUgdHlwZSBvZiB0aGUgc2hhcGUsIHNlZSB0aGUgQ29uc3QuU2hhcGVzIGZpbGUgZm9yIGFsbCB0aGUgZXhpc3RpbmcgdHlwZXMsXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gc2hhcGUudHlwZTtcbn1cblxuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3NEYXRhIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBHcmFwaGljc0RhdGEoXG4gICAgICAgIHRoaXMubGluZVdpZHRoLFxuICAgICAgICB0aGlzLmxpbmVDb2xvcixcbiAgICAgICAgdGhpcy5saW5lQWxwaGEsXG4gICAgICAgIHRoaXMuZmlsbENvbG9yLFxuICAgICAgICB0aGlzLmZpbGxBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsLFxuICAgICAgICB0aGlzLnNoYXBlXG4gICAgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIGRhdGEuXG4gKi9cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnNoYXBlID0gbnVsbDtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL1dlYkdMR3JhcGhpY3NEYXRhJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuXG4gICAgLy8gc29tZSBkcmF3aW5nIGZ1bmN0aW9ucy4uXG4gICAgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi91dGlscy9idWlsZExpbmUnKTtcbiAgICBidWlsZFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUG9seScpO1xuICAgIGJ1aWxkQ29tcGxleFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ29tcGxleFBvbHknKTtcbiAgICBidWlsZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSZWN0YW5nbGUnKTtcbiAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkQ2lyY2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZENpcmNsZScpO1xuXG4gICAgZWFyY3V0ID0gcmVxdWlyZSgnZWFyY3V0Jyk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IFtdO1xuXG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgYSBwb2x5IGNhbiBjb250YWluIGJlZm9yZSBpdCBpcyByZW5kZXJlZCBhcyBhIGNvbXBsZXggcG9seWdvbiAodXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyKVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgPSAyMDA7XG59XG5cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc1JlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdncmFwaGljcycsIEdyYXBoaWNzUmVuZGVyZXIpO1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMuZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzLmdsKVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHJlbmRlcmVyLlxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YVBvb2wubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBudWxsO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuICAvLyAgY29uc29sZS5sb2coZ3JhcGhpY3MpXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5IHx8ICFncmFwaGljcy5fd2ViR0xbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljcyhncmFwaGljcyk7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIFRoaXMgIGNvdWxkIGJlIHNwZWVkZWQgdXAgZm9yIHN1cmUhXG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggZ3JhcGhpY3MuYmxlbmRNb2RlICk7XG5cbi8vICAgIHZhciBtYXRyaXggPSAgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0uY2xvbmUoKTtcbi8vICAgIHZhciBtYXRyaXggPSAgcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7XG4vLyAgICBtYXRyaXguYXBwZW5kKGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gd2ViR0wuZGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTC5kYXRhW2ldLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyBmaXggdGhpcyBvbmUhXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEgKiB3ZWJHTERhdGEuYWxwaGEpO1xuXG4gICAgICAgICAgICAvLyByZW5kZXIgcXVhZC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgcmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeCA9IGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLmxvY2F0aW9uKTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHVwZGF0ZVxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgLy8gZ2V0IHRoZSBjb250ZXh0cyBncmFwaGljcyBvYmplY3RcbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd2ViR0wgY29udGV4dCB0aW1lIHRvIGNyZWF0ZSBpdCFcbiAgICBpZiAoIXdlYkdMKVxuICAgIHtcbiAgICAgICAgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdID0ge2xhc3RJbmRleDowLCBkYXRhOltdLCBnbDpnbH07XG4gICAgfVxuXG4gICBcbiAgICAvLyBmbGFnIHRoZSBncmFwaGljcyBhcyBub3QgZGlydHkgYXMgd2UgYXJlIGFib3V0IHRvIHVwZGF0ZSBpdC4uLlxuICAgIGdyYXBoaWNzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB2YXIgaTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGNsZWFyZWQgdGhlIGdyYXBoaWNzIG9iamVjdCB3ZSB3aWxsIG5lZWQgdG8gY2xlYXIgZXZlcnkgb2JqZWN0XG4gICAgaWYgKGdyYXBoaWNzLmNsZWFyRGlydHkpXG4gICAge1xuICAgICAgICBncmFwaGljcy5jbGVhckRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuZCByZXR1cm4gYWxsIHRoZSB3ZWJHTERhdGFzIHRvIHRoZSBvYmplY3QgcG9vbCBzbyB0aGFuIGNhbiBiZSByZXVzZWQgbGF0ZXIgb25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBncmFwaGljc0RhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucHVzaCggZ3JhcGhpY3NEYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgYXJyYXkgYW5kIHJlc2V0IHRoZSBpbmRleC4uXG4gICAgICAgIHdlYkdMLmRhdGEgPSBbXTtcbiAgICAgICAgd2ViR0wubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBncmFwaGljcyBkYXRhcyBhbmQgY29uc3RydWN0IGVhY2ggb25lLi5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGEgY29tcGxleCBmaWxsIHRoZW4gdGhlIG5ldyBzdGVuY2lsIGJ1ZmZlciB0ZWNobmlxdWUgd2lsbCBiZSB1c2VkXG4gICAgLy8gb3RoZXIgd2lzZSBncmFwaGljcyBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIGludG8gYSBiYXRjaC4uXG4gICAgZm9yIChpID0gd2ViR0wubGFzdEluZGV4OyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBwb2ludHMgdGhlIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgICAgICAgICAgZGF0YS5wb2ludHMgPSBkYXRhLnNoYXBlLnBvaW50cy5zbGljZSgpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBwb2x5IGlmIHRoZSB2YWx1ZSBpcyB0cnVlIVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50c1swXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTJdIHx8IGRhdGEucG9pbnRzWzFdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKGRhdGEucG9pbnRzWzBdLCBkYXRhLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNQUtFIFNVUkUgV0UgSEFWRSBUSEUgQ09SUkVDVCBUWVBFLi5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA+PSA2KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA8IHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplICogMilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkRyYXdVc2luZ1NpbXBsZSA9IGJ1aWxkUG9seShkYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkRyYXdVc2luZ1NpbXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoID4gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuICAgICAgICAgICAgICAgIGJ1aWxkTGluZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMgfHwgZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZENpcmNsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCsrO1xuICAgIH1cblxuICAgIC8vIHVwbG9hZCBhbGwgdGhlIGRpcnR5IGRhdGEuLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5kaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhLnVwbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gd2ViR0wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSBUT0RPIEBBbHZpblxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5zd2l0Y2hNb2RlID0gZnVuY3Rpb24gKHdlYkdMLCB0eXBlKVxue1xuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICBpZiAoIXdlYkdMLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbd2ViR0wuZGF0YS5sZW5ndGgtMV07XG5cbiAgICAgICAgaWYgKCh3ZWJHTERhdGEucG9pbnRzLmxlbmd0aCA+IDMyMDAwMCkgfHwgd2ViR0xEYXRhLm1vZGUgIT09IHR5cGUgfHwgdHlwZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdlYkdMRGF0YS5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gd2ViR0xEYXRhO1xufTtcblxuIiwiLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyBXZWJHTCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gV2ViR0xHcmFwaGljc0RhdGEoZ2wpIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vVE9ETyBkb2VzIHRoaXMgbmVlZCB0byBiZSBzcGxpdCBiZWZvcmUgdXBsb2Rpbmc/P1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvbG9yIGNvbXBvbmVudHMgKHIsZyxiKVxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3IgPSBbMCwwLDBdOyAvLyBjb2xvciBzcGxpdCFcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBvaW50cyB0byBkcmF3XG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIHRvZG8gQGFsdmluXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubW9kZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGdyYXBoaWNzIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHZlcnRpY2VzIGFuZCB0aGUgaW5kaWNlc1xuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb2ludHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmluZGljZXMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4vLyAgICB0aGlzLmxhc3RJbmRleCA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5nbFBvaW50cyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5wb2ludHMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuYnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5nbFBvaW50cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5nbEluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuZ2xJbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLnBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBcbiAgICB0aGlzLmdsID0gbnVsbDtcblxuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoZ2wpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgZ2wsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgY2lyY2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byBkcmF3XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ2lyY2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIHZhciBjaXJjbGVEYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gY2lyY2xlRGF0YS54O1xuICAgIHZhciB5ID0gY2lyY2xlRGF0YS55O1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuXG4gICAgLy8gVE9ETyAtIGJpdCBoYWNreT8/XG4gICAgaWYgKGdyYXBoaWNzRGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB0b3RhbFNlZ3MgPSBNYXRoLmZsb29yKDMwICogTWF0aC5zcXJ0KGNpcmNsZURhdGEucmFkaXVzKSkgfHwgTWF0aC5mbG9vcigxNSAqIE1hdGguc3FydChjaXJjbGVEYXRhLndpZHRoICsgY2lyY2xlRGF0YS5oZWlnaHQpKTtcbiAgICB2YXIgc2VnID0gKE1hdGguUEkgKiAyKSAvIHRvdGFsU2VncyA7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcyk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDEgOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCx5LCByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKyssIHZlY1BvcysrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MtMSk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDaXJjbGU7IiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuICAgIFxuXG5cbi8qKlxuICogQnVpbGRzIGEgY29tcGxleCBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDb21wbGV4UG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvL1RPRE8gLSBubyBuZWVkIHRvIGNvcHkgdGhpcyBhcyBpdCBnZXRzIHR1cm5lZCBpbnRvIGEgRkxvYXQzMkFycmF5IGFueXdheXMuLlxuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzLnNsaWNlKCk7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDYpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgd2ViR0xEYXRhLnBvaW50cyA9IHBvaW50cztcbiAgICB3ZWJHTERhdGEuYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHdlYkdMRGF0YS5jb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG5cbiAgICAvLyBjYWxjbGF0ZSB0aGUgYm91bmRzLi5cbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIHZhciB4LHk7XG5cbiAgICAvLyBnZXQgc2l6ZS4uXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKz0yKVxuICAgIHtcbiAgICAgICAgeCA9IHBvaW50c1tpXTtcbiAgICAgICAgeSA9IHBvaW50c1tpKzFdO1xuXG4gICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICBtYXhYID0geCA+IG1heFggPyB4IDogbWF4WDtcblxuICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcbiAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgcXVhZCB0byB0aGUgZW5kIGNvcyB0aGVyZSBpcyBubyBwb2ludCBtYWtpbmcgYW5vdGhlciBidWZmZXIhXG4gICAgcG9pbnRzLnB1c2gobWluWCwgbWluWSxcbiAgICAgICAgICAgICAgICBtYXhYLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1heFksXG4gICAgICAgICAgICAgICAgbWluWCwgbWF4WSk7XG5cbiAgICAvLyBwdXNoIGEgcXVhZCBvbnRvIHRoZSBlbmQuLlxuXG4gICAgLy9UT0RPIC0gdGhpcyBhaW50IG5lZWRlZCFcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKCBpICk7XG4gICAgfVxuXG59O1xuXG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENvbXBsZXhQb2x5OyIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBsaW5lIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRMaW5lID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIFRPRE8gT1BUSU1JU0UhXG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGlmIHRoZSBsaW5lIHdpZHRoIGlzIGFuIG9kZCBudW1iZXIgYWRkIDAuNSB0byBhbGlnbiB0byBhIHdob2xlIHBpeGVsXG4gICAgLy8gY29tbWVudGluZyB0aGlzIG91dCBmaXhlcyAjNzExIGFuZCAjMTYyMFxuICAgIC8vIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoJTIpXG4gICAgLy8ge1xuICAgIC8vICAgICBmb3IgKGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKVxuICAgIC8vICAgICB7XG4gICAgLy8gICAgICAgICBwb2ludHNbaV0gKz0gMC41O1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBmaXJzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgIHZhciBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgIC8vIGlmIHRoZSBmaXJzdCBwb2ludCBpcyB0aGUgbGFzdCBwb2ludCAtIGdvbm5hIGhhdmUgaXNzdWVzIDopXG4gICAgaWYgKGZpcnN0UG9pbnQueCA9PT0gbGFzdFBvaW50LnggJiYgZmlyc3RQb2ludC55ID09PSBsYXN0UG9pbnQueSlcbiAgICB7XG4gICAgICAgIC8vIG5lZWQgdG8gY2xvbmUgYXMgd2UgYXJlIGdvaW5nIHRvIHNsaWdodGx5IG1vZGlmeSB0aGUgc2hhcGUuLlxuICAgICAgICBwb2ludHMgPSBwb2ludHMuc2xpY2UoKTtcblxuICAgICAgICBwb2ludHMucG9wKCk7XG4gICAgICAgIHBvaW50cy5wb3AoKTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgICAgICB2YXIgbWlkUG9pbnRYID0gbGFzdFBvaW50LnggKyAoZmlyc3RQb2ludC54IC0gbGFzdFBvaW50LngpICowLjU7XG4gICAgICAgIHZhciBtaWRQb2ludFkgPSBsYXN0UG9pbnQueSArIChmaXJzdFBvaW50LnkgLSBsYXN0UG9pbnQueSkgKjAuNTtcblxuICAgICAgICBwb2ludHMudW5zaGlmdChtaWRQb2ludFgsIG1pZFBvaW50WSk7XG4gICAgICAgIHBvaW50cy5wdXNoKG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICB9XG5cbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgIHZhciBpbmRleENvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICB2YXIgaW5kZXhTdGFydCA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgLy8gRFJBVyB0aGUgTGluZVxuICAgIHZhciB3aWR0aCA9IGdyYXBoaWNzRGF0YS5saW5lV2lkdGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmxpbmVDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmxpbmVBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciBweCwgcHksIHAxeCwgcDF5LCBwMngsIHAyeSwgcDN4LCBwM3k7XG4gICAgdmFyIHBlcnB4LCBwZXJweSwgcGVycDJ4LCBwZXJwMnksIHBlcnAzeCwgcGVycDN5O1xuICAgIHZhciBhMSwgYjEsIGMxLCBhMiwgYjIsIGMyO1xuICAgIHZhciBkZW5vbSwgcGRpc3QsIGRpc3Q7XG5cbiAgICBwMXggPSBwb2ludHNbMF07XG4gICAgcDF5ID0gcG9pbnRzWzFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWzJdO1xuICAgIHAyeSA9IHBvaW50c1szXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gIHAxeCAtIHAyeDtcblxuICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG5cbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAvLyBzdGFydFxuICAgIHZlcnRzLnB1c2gocDF4IC0gcGVycHggLCBwMXkgLSBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAxeCArIHBlcnB4ICwgcDF5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgZm9yIChpID0gMTsgaSA8IGxlbmd0aC0xOyBpKyspXG4gICAge1xuICAgICAgICBwMXggPSBwb2ludHNbKGktMSkqMl07XG4gICAgICAgIHAxeSA9IHBvaW50c1soaS0xKSoyICsgMV07XG5cbiAgICAgICAgcDJ4ID0gcG9pbnRzWyhpKSoyXTtcbiAgICAgICAgcDJ5ID0gcG9pbnRzWyhpKSoyICsgMV07XG5cbiAgICAgICAgcDN4ID0gcG9pbnRzWyhpKzEpKjJdO1xuICAgICAgICBwM3kgPSBwb2ludHNbKGkrMSkqMiArIDFdO1xuXG4gICAgICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgICAgICBwZXJweSA9IHAxeCAtIHAyeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgICAgICBwZXJweCAvPSBkaXN0O1xuICAgICAgICBwZXJweSAvPSBkaXN0O1xuICAgICAgICBwZXJweCAqPSB3aWR0aDtcbiAgICAgICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAgICAgcGVycDJ4ID0gLShwMnkgLSBwM3kpO1xuICAgICAgICBwZXJwMnkgPSBwMnggLSBwM3g7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwMngqcGVycDJ4ICsgcGVycDJ5KnBlcnAyeSk7XG4gICAgICAgIHBlcnAyeCAvPSBkaXN0O1xuICAgICAgICBwZXJwMnkgLz0gZGlzdDtcbiAgICAgICAgcGVycDJ4ICo9IHdpZHRoO1xuICAgICAgICBwZXJwMnkgKj0gd2lkdGg7XG5cbiAgICAgICAgYTEgPSAoLXBlcnB5ICsgcDF5KSAtICgtcGVycHkgKyBwMnkpO1xuICAgICAgICBiMSA9ICgtcGVycHggKyBwMngpIC0gKC1wZXJweCArIHAxeCk7XG4gICAgICAgIGMxID0gKC1wZXJweCArIHAxeCkgKiAoLXBlcnB5ICsgcDJ5KSAtICgtcGVycHggKyBwMngpICogKC1wZXJweSArIHAxeSk7XG4gICAgICAgIGEyID0gKC1wZXJwMnkgKyBwM3kpIC0gKC1wZXJwMnkgKyBwMnkpO1xuICAgICAgICBiMiA9ICgtcGVycDJ4ICsgcDJ4KSAtICgtcGVycDJ4ICsgcDN4KTtcbiAgICAgICAgYzIgPSAoLXBlcnAyeCArIHAzeCkgKiAoLXBlcnAyeSArIHAyeSkgLSAoLXBlcnAyeCArIHAyeCkgKiAoLXBlcnAyeSArIHAzeSk7XG5cbiAgICAgICAgZGVub20gPSBhMSpiMiAtIGEyKmIxO1xuXG4gICAgICAgIGlmIChNYXRoLmFicyhkZW5vbSkgPCAwLjEgKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIGRlbm9tKz0xMC4xO1xuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJweCAsIHAyeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBweCA9IChiMSpjMiAtIGIyKmMxKS9kZW5vbTtcbiAgICAgICAgcHkgPSAoYTIqYzEgLSBhMSpjMikvZGVub207XG5cblxuICAgICAgICBwZGlzdCA9IChweCAtcDJ4KSAqIChweCAtcDJ4KSArIChweSAtcDJ5KSAqIChweSAtcDJ5KTtcblxuXG4gICAgICAgIGlmIChwZGlzdCA+IDE0MCAqIDE0MClcbiAgICAgICAge1xuICAgICAgICAgICAgcGVycDN4ID0gcGVycHggLSBwZXJwMng7XG4gICAgICAgICAgICBwZXJwM3kgPSBwZXJweSAtIHBlcnAyeTtcblxuICAgICAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwM3gqcGVycDN4ICsgcGVycDN5KnBlcnAzeSk7XG4gICAgICAgICAgICBwZXJwM3ggLz0gZGlzdDtcbiAgICAgICAgICAgIHBlcnAzeSAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN4ICo9IHdpZHRoO1xuICAgICAgICAgICAgcGVycDN5ICo9IHdpZHRoO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycDN4LCBwMnkgK3BlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJwM3gsIHAyeSAtcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRleENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocHggLCBweSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSAocHgtcDJ4KSwgcDJ5IC0gKHB5IC0gcDJ5KSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHAxeCA9IHBvaW50c1sobGVuZ3RoLTIpKjJdO1xuICAgIHAxeSA9IHBvaW50c1sobGVuZ3RoLTIpKjIgKyAxXTtcblxuICAgIHAyeCA9IHBvaW50c1sobGVuZ3RoLTEpKjJdO1xuICAgIHAyeSA9IHBvaW50c1sobGVuZ3RoLTEpKjIgKyAxXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5KTtcbiAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBpbmRleENvdW50OyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydCsrKTtcbiAgICB9XG5cbiAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydC0xKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRMaW5lOyIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcG9seWdvbiB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuV2ViR0xHcmFwaGljc0RhdGF9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocG9pbnRzLCBudWxsLCAyKTtcblxuICAgIGlmICghdHJpYW5nbGVzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgdmVydFBvcyA9IHZlcnRzLmxlbmd0aCAvIDY7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICt2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVydFBvcyk7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmVydHMucHVzaChwb2ludHNbaSAqIDJdLCBwb2ludHNbaSAqIDIgKyAxXSxcbiAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRQb2x5O1xuIiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHJlY3RhbmdsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIC0tLSAvL1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIC8vXG4gICAgdmFyIHJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcmVjdERhdGEueDtcbiAgICB2YXIgeSA9IHJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJlY3REYXRhLmhlaWdodDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgLy8gc3RhcnRcbiAgICAgICAgdmVydHMucHVzaCh4LCB5KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAvLyBpbnNlcnQgMiBkZWFkIHRyaWFuZ2xlcy4uXG4gICAgICAgIGluZGljZXMucHVzaCh2ZXJ0UG9zLCB2ZXJ0UG9zLCB2ZXJ0UG9zKzEsIHZlcnRQb3MrMiwgdmVydFBvcyszLCB2ZXJ0UG9zKzMpO1xuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSBbeCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHkgKyBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICB4LCB5XTtcblxuXG4gICAgICAgIGJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJlY3RhbmdsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG4vKipcbiAqIEJ1aWxkcyBhIHJvdW5kZWQgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG5idWlsZFJvdW5kZWRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIHJyZWN0RGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IHJyZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcnJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcnJlY3REYXRhLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSBycmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgdmFyIHJhZGl1cyA9IHJyZWN0RGF0YS5yYWRpdXM7XG5cbiAgICB2YXIgcmVjUG9pbnRzID0gW107XG4gICAgcmVjUG9pbnRzLnB1c2goeCwgeSArIHJhZGl1cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4LCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCB4LCB5ICsgaGVpZ2h0LCB4ICsgcmFkaXVzLCB5ICsgaGVpZ2h0LCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoIC0gcmFkaXVzLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCAtIHJhZGl1cywgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyB3aWR0aCwgeSArIHJhZGl1cywgeCArIHdpZHRoLCB5LCB4ICsgd2lkdGggLSByYWRpdXMsIHksIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgcmFkaXVzLCB5LCB4LCB5LCB4LCB5ICsgcmFkaXVzICsgMC4wMDAwMDAwMDAxLCByZWNQb2ludHMpO1xuXG4gICAgLy8gdGhpcyB0aW55IG51bWJlciBkZWFscyB3aXRoIHRoZSBpc3N1ZSB0aGF0IG9jY3VycyB3aGVuIHBvaW50cyBvdmVybGFwIGFuZCBlYXJjdXQgZmFpbHMgdG8gdHJpYW5ndWxhdGUgdGhlIGl0ZW0uXG4gICAgLy8gVE9ETyAtIGZpeCB0aGlzIHByb3Blcmx5LCB0aGlzIGlzIG5vdCB2ZXJ5IGVsZWdhbnQuLiBidXQgaXQgd29ya3MgZm9yIG5vdy5cblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICB2YXIgdHJpYW5nbGVzID0gZWFyY3V0KHJlY1BvaW50cywgbnVsbCwgMik7XG5cbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICAgICAge1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVjUG9zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZWNQb2ludHMubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gocmVjUG9pbnRzW2ldLCByZWNQb2ludHNbKytpXSwgciwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHJlY1BvaW50cztcblxuICAgICAgICB0aGlzLmJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlLiAoaGVscGVyIGZ1bmN0aW9uLi4pXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBmcm9tWCB7bnVtYmVyfSBPcmlnaW4gcG9pbnQgeFxuICogQHBhcmFtIGZyb21ZIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcGFyYW0gW291dF0ge251bWJlcltdfSBUaGUgb3V0cHV0IGFycmF5IHRvIGFkZCBwb2ludHMgaW50by4gSWYgbm90IHBhc3NlZCwgYSBuZXcgYXJyYXkgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm4ge251bWJlcltdfSBhbiBhcnJheSBvZiBwb2ludHNcbiAqL1xucXVhZHJhdGljQmV6aWVyQ3VydmUgPSBmdW5jdGlvbiAoZnJvbVgsIGZyb21ZLCBjcFgsIGNwWSwgdG9YLCB0b1ksIG91dClcbntcbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICB4YixcbiAgICAgICAgeWIsXG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gb3V0IHx8IFtdO1xuXG4gICAgZnVuY3Rpb24gZ2V0UHQobjEgLCBuMiwgcGVyYykge1xuICAgICAgICB2YXIgZGlmZiA9IG4yIC0gbjE7XG5cbiAgICAgICAgcmV0dXJuIG4xICsgKCBkaWZmICogcGVyYyApO1xuICAgIH1cblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBuOyBpKysgKSB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICAvLyBUaGUgR3JlZW4gTGluZVxuICAgICAgICB4YSA9IGdldFB0KCBmcm9tWCAsIGNwWCAsIGogKTtcbiAgICAgICAgeWEgPSBnZXRQdCggZnJvbVkgLCBjcFkgLCBqICk7XG4gICAgICAgIHhiID0gZ2V0UHQoIGNwWCAsIHRvWCAsIGogKTtcbiAgICAgICAgeWIgPSBnZXRQdCggY3BZICwgdG9ZICwgaiApO1xuXG4gICAgICAgIC8vIFRoZSBCbGFjayBEb3RcbiAgICAgICAgeCA9IGdldFB0KCB4YSAsIHhiICwgaiApO1xuICAgICAgICB5ID0gZ2V0UHQoIHlhICwgeWIgLCBqICk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goeCwgeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50cztcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJvdW5kZWRSZWN0YW5nbGU7IiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgY29yZSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWElcbiAqL1xuLy8gZXhwb3J0IGNvcmUgYW5kIGNvbnN0LiBXZSBhc3NpZ24gY29yZSB0byBjb25zdCBzbyB0aGF0IHRoZSBub24tcmVmZXJlbmNlIHR5cGVzIGluIGNvbnN0IHJlbWFpbiBpbi10YWN0XG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihyZXF1aXJlKCcuL2NvbnN0JyksIHJlcXVpcmUoJy4vbWF0aCcpLCB7XG4gICAgLy8gdXRpbHNcbiAgICB1dGlsczogcmVxdWlyZSgnLi91dGlscycpLFxuICAgIHRpY2tlcjogcmVxdWlyZSgnLi90aWNrZXInKSxcblxuICAgIC8vIGRpc3BsYXlcbiAgICBEaXNwbGF5T2JqZWN0OiAgICAgICAgICByZXF1aXJlKCcuL2Rpc3BsYXkvRGlzcGxheU9iamVjdCcpLFxuICAgIENvbnRhaW5lcjogICAgICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9Db250YWluZXInKSxcblxuICAgIC8vIHNwcml0ZXNcbiAgICBTcHJpdGU6ICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgUGFydGljbGVDb250YWluZXI6ICAgICAgcmVxdWlyZSgnLi9wYXJ0aWNsZXMvUGFydGljbGVDb250YWluZXInKSxcbiAgICBTcHJpdGVSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXInKSxcbiAgICBQYXJ0aWNsZVJlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyJyksXG5cbiAgICAvLyB0ZXh0XG4gICAgVGV4dDogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0L1RleHQnKSxcblxuICAgIC8vIHByaW1pdGl2ZXNcbiAgICBHcmFwaGljczogICAgICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzJyksXG4gICAgR3JhcGhpY3NEYXRhOiAgICAgICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljc0RhdGEnKSxcbiAgICBHcmFwaGljc1JlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHR1cmVzXG4gICAgVGV4dHVyZTogICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQmFzZVRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlVGV4dHVyZScpLFxuICAgIFJlbmRlclRleHR1cmU6ICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEJhc2VSZW5kZXJUZXh0dXJlOiAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlOiAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzOiAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmVVdnMnKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIGNhbnZhc1xuICAgIENhbnZhc1JlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIENhbnZhc0J1ZmZlcjogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIHdlYmdsXG4gICAgV2ViR0xSZW5kZXJlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyksXG4gICAgU2hhZGVyTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIFNoYWRlcjogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyJyksXG4gICAgT2JqZWN0UmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBSZW5kZXJUYXJnZXQ6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcblxuICAgIC8vIGZpbHRlcnMgLSB3ZWJnbFxuICAgIEFic3RyYWN0RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBGWEFBRmlsdGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBTcHJpdGVNYXNrRmlsdGVyOiAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKSxcblxuICAgIGdsQ29yZTogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncGl4aS1nbC1jb3JlJyksXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoaWNoIHJlbmRlcmVyIHlvdSBzaG91bGQgYmUgdXNpbmcuXG4gICAgICogV2ViR0wgaXMgdGhlIHByZWZlcnJlZCByZW5kZXJlciBhcyBpdCBpcyBhIGxvdCBmYXN0ZXIuIElmIHdlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnlcbiAgICAgKiB0aGUgYnJvd3NlciB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBjYW52YXMgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHBhcmFtIHdpZHRoPTgwMCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIGhlaWdodD02MDAge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWYgeW91XG4gICAgICogICAgICBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0XG4gICAgICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyLCByZXRpbmEgd291bGQgYmUgMlxuICAgICAqIEBwYXJhbSBbbm9XZWJHTD1mYWxzZV0ge2Jvb2xlYW59IHByZXZlbnRzIHNlbGVjdGlvbiBvZiBXZWJHTCByZW5kZXJlciwgZXZlbiBpZiBzdWNoIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyZXJ8Q2FudmFzUmVuZGVyZXJ9IFJldHVybnMgV2ViR0wgcmVuZGVyZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgQ2FudmFzUmVuZGVyZXJcbiAgICAgKi9cbiAgICBhdXRvRGV0ZWN0UmVuZGVyZXI6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCBub1dlYkdMKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB3aWR0aCB8fCA4MDA7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAgICAgaWYgKCFub1dlYkdMICYmIGNvcmUudXRpbHMuaXNXZWJHTFN1cHBvcnRlZCgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGNvcmUuV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgY29yZS5DYW52YXNSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB9XG59KTtcbiIsIi8vIEB0b2RvIC0gaWdub3JlIHRoZSB0b28gbWFueSBwYXJhbWV0ZXJzIHdhcm5pbmcgZm9yIG5vd1xuLy8gc2hvdWxkIGVpdGhlciBmaXggaXQgb3IgY2hhbmdlIHRoZSBqc2hpbnQgY29uZmlnXG4vLyBqc2hpbnQgLVcwNzJcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xuXG4vKipcbiAqIFRoZSBwaXhpIE1hdHJpeCBjbGFzcyBhcyBhbiBvYmplY3QsIHdoaWNoIG1ha2VzIGl0IGEgbG90IGZhc3RlcixcbiAqIGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBpdCA6XG4gKiB8IGEgfCBiIHwgdHh8XG4gKiB8IGMgfCBkIHwgdHl8XG4gKiB8IDAgfCAwIHwgMSB8XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBNYXRyaXgoKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5iID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5jID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHkgPSAwO1xufVxuXG5NYXRyaXgucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWF0cml4O1xubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1hdHJpeCBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5LiBUaGUgRWxlbWVudCB0byBNYXRyaXggbWFwcGluZyBvcmRlciBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIGEgPSBhcnJheVswXVxuICogYiA9IGFycmF5WzFdXG4gKiBjID0gYXJyYXlbM11cbiAqIGQgPSBhcnJheVs0XVxuICogdHggPSBhcnJheVsyXVxuICogdHkgPSBhcnJheVs1XVxuICpcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119IFRoZSBhcnJheSB0aGF0IHRoZSBtYXRyaXggd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbS5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpXG57XG4gICAgdGhpcy5hID0gYXJyYXlbMF07XG4gICAgdGhpcy5iID0gYXJyYXlbMV07XG4gICAgdGhpcy5jID0gYXJyYXlbM107XG4gICAgdGhpcy5kID0gYXJyYXlbNF07XG4gICAgdGhpcy50eCA9IGFycmF5WzJdO1xuICAgIHRoaXMudHkgPSBhcnJheVs1XTtcbn07XG5cblxuLyoqXG4gKiBzZXRzIHRoZSBtYXRyaXggcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkXG4gKiBAcGFyYW0ge251bWJlcn0gdHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXG57XG4gICAgdGhpcy5hID0gYTtcbiAgICB0aGlzLmIgPSBiO1xuICAgIHRoaXMuYyA9IGM7XG4gICAgdGhpcy5kID0gZDtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy50eSA9IHR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmcm9tIHRoZSBjdXJyZW50IE1hdHJpeCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9zZSB7Ym9vbGVhbn0gV2hldGhlciB3ZSBuZWVkIHRvIHRyYW5zcG9zZSB0aGUgbWF0cml4IG9yIG5vdFxuICogQHBhcmFtIFtvdXRdIHtBcnJheX0gSWYgcHJvdmlkZWQgdGhlIGFycmF5IHdpbGwgYmUgYXNzaWduZWQgdG8gb3V0XG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gdGhlIG5ld2x5IGNyZWF0ZWQgYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAodHJhbnNwb3NlLCBvdXQpXG57XG4gICAgaWYgKCF0aGlzLmFycmF5KVxuICAgIHtcbiAgICAgICAgdGhpcy5hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gb3V0IHx8IHRoaXMuYXJyYXk7XG5cbiAgICBpZiAodHJhbnNwb3NlKVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVsyXSA9IDA7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSAwO1xuICAgICAgICBhcnJheVs2XSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzddID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzJdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzZdID0gMDtcbiAgICAgICAgYXJyYXlbN10gPSAwO1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZSB0byB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gcmVuZGVyaW5nKVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5hICogeCArIHRoaXMuYyAqIHkgKyB0aGlzLnR4O1xuICAgIG5ld1Bvcy55ID0gdGhpcy5iICogeCArIHRoaXMuZCAqIHkgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGludmVyc2Ugb2YgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UgdG8gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIGlucHV0KVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHlJbnZlcnNlID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciBpZCA9IDEgLyAodGhpcy5hICogdGhpcy5kICsgdGhpcy5jICogLXRoaXMuYik7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuZCAqIGlkICogeCArIC10aGlzLmMgKiBpZCAqIHkgKyAodGhpcy50eSAqIHRoaXMuYyAtIHRoaXMudHggKiB0aGlzLmQpICogaWQ7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmEgKiBpZCAqIHkgKyAtdGhpcy5iICogaWQgKiB4ICsgKC10aGlzLnR5ICogdGhpcy5hICsgdGhpcy50eCAqIHRoaXMuYikgKiBpZDtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdHJpeCBvbiB0aGUgeCBhbmQgeS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMudHggKz0geDtcbiAgICB0aGlzLnR5ICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIHNjYWxlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIGFtb3VudCB0byBzY2FsZSBob3Jpem9udGFsbHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSBhbW91bnQgdG8gc2NhbGUgdmVydGljYWxseVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2NhbGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmEgKj0geDtcbiAgICB0aGlzLmQgKj0geTtcbiAgICB0aGlzLmMgKj0geDtcbiAgICB0aGlzLmIgKj0geTtcbiAgICB0aGlzLnR4ICo9IHg7XG4gICAgdGhpcy50eSAqPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyBhIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpXG57XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKCBhbmdsZSApO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbiggYW5nbGUgKTtcblxuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICB0aGlzLmEgPSBhMSAqIGNvcy10aGlzLmIgKiBzaW47XG4gICAgdGhpcy5iID0gYTEgKiBzaW4rdGhpcy5iICogY29zO1xuICAgIHRoaXMuYyA9IGMxICogY29zLXRoaXMuZCAqIHNpbjtcbiAgICB0aGlzLmQgPSBjMSAqIHNpbit0aGlzLmQgKiBjb3M7XG4gICAgdGhpcy50eCA9IHR4MSAqIGNvcyAtIHRoaXMudHkgKiBzaW47XG4gICAgdGhpcy50eSA9IHR4MSAqIHNpbiArIHRoaXMudHkgKiBjb3M7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG5cbiAgICB0aGlzLmEgID0gbWF0cml4LmEgKiBhMSArIG1hdHJpeC5iICogYzE7XG4gICAgdGhpcy5iICA9IG1hdHJpeC5hICogYjEgKyBtYXRyaXguYiAqIGQxO1xuICAgIHRoaXMuYyAgPSBtYXRyaXguYyAqIGExICsgbWF0cml4LmQgKiBjMTtcbiAgICB0aGlzLmQgID0gbWF0cml4LmMgKiBiMSArIG1hdHJpeC5kICogZDE7XG5cbiAgICB0aGlzLnR4ID0gbWF0cml4LnR4ICogYTEgKyBtYXRyaXgudHkgKiBjMSArIHRoaXMudHg7XG4gICAgdGhpcy50eSA9IG1hdHJpeC50eCAqIGIxICsgbWF0cml4LnR5ICogZDEgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1hdHJpeCBiYXNlZCBvbiBhbGwgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RYXG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RZXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXG4gKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WFxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdZXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKHgsIHksIHBpdm90WCwgcGl2b3RZLCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSlcbntcbiAgICB2YXIgYSwgYiwgYywgZCwgc3IsIGNyLCBjeSwgc3ksIG5zeCwgY3g7XG5cbiAgICBzciAgPSBNYXRoLnNpbihyb3RhdGlvbik7XG4gICAgY3IgID0gTWF0aC5jb3Mocm90YXRpb24pO1xuICAgIGN5ICA9IE1hdGguY29zKHNrZXdZKTtcbiAgICBzeSAgPSBNYXRoLnNpbihza2V3WSk7XG4gICAgbnN4ID0gLU1hdGguc2luKHNrZXdYKTtcbiAgICBjeCAgPSAgTWF0aC5jb3Moc2tld1gpO1xuXG4gICAgYSAgPSAgY3IgKiBzY2FsZVg7XG4gICAgYiAgPSAgc3IgKiBzY2FsZVg7XG4gICAgYyAgPSAtc3IgKiBzY2FsZVk7XG4gICAgZCAgPSAgY3IgKiBzY2FsZVk7XG5cbiAgICB0aGlzLmEgID0gY3kgKiBhICsgc3kgKiBjO1xuICAgIHRoaXMuYiAgPSBjeSAqIGIgKyBzeSAqIGQ7XG4gICAgdGhpcy5jICA9IG5zeCAqIGEgKyBjeCAqIGM7XG4gICAgdGhpcy5kICA9IG5zeCAqIGIgKyBjeCAqIGQ7XG5cbiAgICB0aGlzLnR4ID0geCArICggcGl2b3RYICogYSArIHBpdm90WSAqIGMgKTtcbiAgICB0aGlzLnR5ID0geSArICggcGl2b3RYICogYiArIHBpdm90WSAqIGQgKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQcmVwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uKG1hdHJpeClcbntcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIGlmIChtYXRyaXguYSAhPT0gMSB8fCBtYXRyaXguYiAhPT0gMCB8fCBtYXRyaXguYyAhPT0gMCB8fCBtYXRyaXguZCAhPT0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICAgICAgdmFyIGMxID0gdGhpcy5jO1xuICAgICAgICB0aGlzLmEgID0gYTEqbWF0cml4LmErdGhpcy5iKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmIgID0gYTEqbWF0cml4LmIrdGhpcy5iKm1hdHJpeC5kO1xuICAgICAgICB0aGlzLmMgID0gYzEqbWF0cml4LmErdGhpcy5kKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmQgID0gYzEqbWF0cml4LmIrdGhpcy5kKm1hdHJpeC5kO1xuICAgIH1cblxuICAgIHRoaXMudHggPSB0eDEqbWF0cml4LmErdGhpcy50eSptYXRyaXguYyttYXRyaXgudHg7XG4gICAgdGhpcy50eSA9IHR4MSptYXRyaXguYit0aGlzLnR5Km1hdHJpeC5kK21hdHJpeC50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0ID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcbiAgICB2YXIgbiA9IGExKmQxLWIxKmMxO1xuXG4gICAgdGhpcy5hID0gZDEvbjtcbiAgICB0aGlzLmIgPSAtYjEvbjtcbiAgICB0aGlzLmMgPSAtYzEvbjtcbiAgICB0aGlzLmQgPSBhMS9uO1xuICAgIHRoaXMudHggPSAoYzEqdGhpcy50eS1kMSp0eDEpL247XG4gICAgdGhpcy50eSA9IC0oYTEqdGhpcy50eS1iMSp0eDEpL247XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBSZXNldHMgdGhpcyBNYXRpeCB0byBhbiBpZGVudGl0eSAoZGVmYXVsdCkgbWF0cml4LlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmlkZW50aXR5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmEgPSAxO1xuICAgIHRoaXMuYiA9IDA7XG4gICAgdGhpcy5jID0gMDtcbiAgICB0aGlzLmQgPSAxO1xuICAgIHRoaXMudHggPSAwO1xuICAgIHRoaXMudHkgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgTWF0cml4IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gQSBjb3B5IG9mIHRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgdmFsdWVzIG9mIHRoZSBnaXZlbiBtYXRyaXggdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZXMgaW4gdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhlIG1hdHJpeCBnaXZlbiBpbiBwYXJhbWV0ZXIgd2l0aCBpdHMgdmFsdWVzIHVwZGF0ZWQuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQSBkZWZhdWx0IChpZGVudGl0eSkgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5JREVOVElUWSA9IG5ldyBNYXRyaXgoKTtcblxuLyoqXG4gKiBBIHRlbXAgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5URU1QX01BVFJJWCA9IG5ldyBNYXRyaXgoKTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcbn1cblxuUG9pbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvaW50XG4gKlxuICogQHJldHVybiB7UElYSS5Qb2ludH0gYSBjb3B5IG9mIHRoZSBwb2ludFxuICovXG5Qb2ludC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBDb3BpZXMgeCBhbmQgeSBmcm9tIHRoZSBnaXZlbiBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICovXG5Qb2ludC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgdGhpcy5zZXQocC54LCBwLnkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGVxdWFsIHRvIHRoaXMgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gKHAueCA9PT0gdGhpcy54KSAmJiAocC55ID09PSB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5Qb2ludC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy54ID0geCB8fCAwO1xuICAgIHRoaXMueSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLnggOiAwICkgO1xufTtcbiIsIi8qKlxuICogTWF0aCBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgbWl4ZWQgaW50byBQSVhJIG5hbWVzcGFjZS5cbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBUaGVzZSB3aWxsIGJlIG1peGVkIHRvIGJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLFxuICAgIC8vIHdoaWxlIHRoaXMgbW9kdWxlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBjb3JlXG4gICAgLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBjdXQgZG93biBvblxuICAgIC8vIGludGVybmFsIG1vZHVsZSByZXF1aXJlcy5cblxuICAgIFBvaW50OiAgICAgIHJlcXVpcmUoJy4vUG9pbnQnKSxcbiAgICBNYXRyaXg6ICAgICByZXF1aXJlKCcuL01hdHJpeCcpLFxuXG4gICAgQ2lyY2xlOiAgICAgcmVxdWlyZSgnLi9zaGFwZXMvQ2lyY2xlJyksXG4gICAgRWxsaXBzZTogICAgcmVxdWlyZSgnLi9zaGFwZXMvRWxsaXBzZScpLFxuICAgIFBvbHlnb246ICAgIHJlcXVpcmUoJy4vc2hhcGVzL1BvbHlnb24nKSxcbiAgICBSZWN0YW5nbGU6ICByZXF1aXJlKCcuL3NoYXBlcy9SZWN0YW5nbGUnKSxcbiAgICBSb3VuZGVkUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlJylcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIENpcmNsZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICovXG5mdW5jdGlvbiBDaXJjbGUoeCwgeSwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkNJUkM7XG59XG5cbkNpcmNsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaXJjbGU7XG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBDaXJjbGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkNpcmNsZX0gYSBjb3B5IG9mIHRoZSBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBDaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBjaXJjbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmFkaXVzIDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGR4ID0gKHRoaXMueCAtIHgpLFxuICAgICAgICBkeSA9ICh0aGlzLnkgLSB5KSxcbiAgICAgICAgcjIgPSB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzO1xuXG4gICAgZHggKj0gZHg7XG4gICAgZHkgKj0gZHk7XG5cbiAgICByZXR1cm4gKGR4ICsgZHkgPD0gcjIpO1xufTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBjaXJjbGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4qIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiovXG5DaXJjbGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy5yYWRpdXMsIHRoaXMueSAtIHRoaXMucmFkaXVzLCB0aGlzLnJhZGl1cyAqIDIsIHRoaXMucmFkaXVzICogMik7XG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBFbGxpcHNlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGlzIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZVxuICovXG5mdW5jdGlvbiBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkVMSVA7XG59XG5cbkVsbGlwc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRWxsaXBzZTtcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBFbGxpcHNlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5FbGxpcHNlfSBhIGNvcHkgb2YgdGhlIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgRWxsaXBzZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRzIGFyZSB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vbm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDBcbiAgICB2YXIgbm9ybXggPSAoKHggLSB0aGlzLngpIC8gdGhpcy53aWR0aCksXG4gICAgICAgIG5vcm15ID0gKCh5IC0gdGhpcy55KSAvIHRoaXMuaGVpZ2h0KTtcblxuICAgIG5vcm14ICo9IG5vcm14O1xuICAgIG5vcm15ICo9IG5vcm15O1xuXG4gICAgcmV0dXJuIChub3JteCArIG5vcm15IDw9IDEpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgZWxsaXBzZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy53aWR0aCwgdGhpcy55IC0gdGhpcy5oZWlnaHQsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG4iLCJ2YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9Qb2ludCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcG9pbnRzIHtQSVhJLlBvaW50W118bnVtYmVyW118Li4uUElYSS5Qb2ludHwuLi5udW1iZXJ9IFRoaXMgY2FuIGJlIGFuIGFycmF5IG9mIFBvaW50cyB0aGF0IGZvcm0gdGhlIHBvbHlnb24sXG4gKiAgICAgIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIHRoYXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBbeCx5LCB4LHksIC4uLl0sIG9yIHRoZSBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZVxuICogICAgICBhbGwgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvbiBlLmcuIGBuZXcgUElYSS5Qb2x5Z29uKG5ldyBQSVhJLlBvaW50KCksIG5ldyBQSVhJLlBvaW50KCksIC4uLilgLCBvciB0aGVcbiAqICAgICAgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmUgZmxhdCB4LHkgdmFsdWVzIGUuZy4gYG5ldyBQb2x5Z29uKHgseSwgeCx5LCB4LHksIC4uLilgIHdoZXJlIGB4YCBhbmQgYHlgIGFyZVxuICogICAgICBOdW1iZXJzLlxuICovXG5mdW5jdGlvbiBQb2x5Z29uKHBvaW50c18pXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBvaW50c187XG5cbiAgICAvL2lmIHBvaW50cyBpc24ndCBhbiBhcnJheSwgdXNlIGFyZ3VtZW50cyBhcyB0aGUgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgcG9pbnRzLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICBwb2ludHNbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IG9mIHBvaW50cywgY29udmVydCBpdCB0byBhIGZsYXQgYXJyYXkgb2YgbnVtYmVyc1xuICAgIGlmIChwb2ludHNbMF0gaW5zdGFuY2VvZiBQb2ludClcbiAgICB7XG4gICAgICAgIHZhciBwID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBwLnB1c2gocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50cyA9IHA7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5QT0xZO1xufVxuXG5Qb2x5Z29uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvbHlnb247XG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9seWdvblxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9seWdvbn0gYSBjb3B5IG9mIHRoZSBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvbHlnb24odGhpcy5wb2ludHMuc2xpY2UoKSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcG9seWdvblxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBpbnNpZGUgPSBmYWxzZTtcblxuICAgIC8vIHVzZSBzb21lIHJheWNhc3RpbmcgdG8gdGVzdCBoaXRzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL3BvaW50LWluLXBvbHlnb24vYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5wb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbGVuZ3RoIC0gMTsgaSA8IGxlbmd0aDsgaiA9IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB4aSA9IHRoaXMucG9pbnRzW2kgKiAyXSwgeWkgPSB0aGlzLnBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgeGogPSB0aGlzLnBvaW50c1tqICogMl0sIHlqID0gdGhpcy5wb2ludHNbaiAqIDIgKyAxXSxcbiAgICAgICAgICAgIGludGVyc2VjdCA9ICgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICh4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aSk7XG5cbiAgICAgICAgaWYgKGludGVyc2VjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiB0aGUgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcmVjdGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SRUNUO1xufVxuXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XG5cbi8qKlxuICogQSBjb25zdGFudCBlbXB0eSByZWN0YW5nbGUuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblJlY3RhbmdsZS5FTVBUWSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDwgdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDwgdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFJvdW5kZWQgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIHRoYXQgaGFzIG5pY2Ugcm91bmRlZCBjb3JuZXJzLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodCBhbmQgaXRzIHJhZGl1cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gQ29udHJvbHMgdGhlIHJhZGl1cyBvZiB0aGUgcm91bmRlZCBjb3JuZXJzXG4gKi9cbmZ1bmN0aW9uIFJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJSRUM7XG59XG5cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm91bmRlZFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUm91bmRlZFJlY3RhbmdsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUm91bmRlZFJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSb3VuZGVkUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8PSB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUGFydGljbGVDb250YWluZXIgY2xhc3MgaXMgYSByZWFsbHkgZmFzdCB2ZXJzaW9uIG9mIHRoZSBDb250YWluZXIgYnVpbHQgc29sZWx5IGZvciBzcGVlZCxcbiAqIHNvIHVzZSB3aGVuIHlvdSBuZWVkIGEgbG90IG9mIHNwcml0ZXMgb3IgcGFydGljbGVzLiBUaGUgdHJhZGVvZmYgb2YgdGhlIFBhcnRpY2xlQ29udGFpbmVyIGlzIHRoYXQgYWR2YW5jZWRcbiAqIGZ1bmN0aW9uYWxpdHkgd2lsbCBub3Qgd29yay4gUGFydGljbGVDb250YWluZXIgaW1wbGVtZW50cyBvbmx5IHRoZSBiYXNpYyBvYmplY3QgdHJhbnNmb3JtIChwb3NpdGlvbiwgc2NhbGUsIHJvdGF0aW9uKS5cbiAqIEFueSBvdGhlciBmdW5jdGlvbmFsaXR5IGxpa2UgdGludGluZywgbWFza2luZywgZXRjIHdpbGwgbm90IHdvcmsgb24gc3ByaXRlcyBpbiB0aGlzIGJhdGNoLlxuICpcbiAqIEl0J3MgZXh0cmVtZWx5IGVhc3kgdG8gdXNlIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQYXJ0aWNsZUNvbnRhaW5lcigpO1xuICpcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpXG4gKiB7XG4gKiAgICAgdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJteUltYWdlLnBuZ1wiKTtcbiAqICAgICBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEFuZCBoZXJlIHlvdSBoYXZlIGEgaHVuZHJlZCBzcHJpdGVzIHRoYXQgd2lsbCBiZSByZW5kZXJlciBhdCB0aGUgc3BlZWQgb2YgbGlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbbWF4U2l6ZT0xNTAwMF0ge251bWJlcn0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGF0IGNhbiBiZSByZW5kZXJlciBieSB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzXSB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyBvZiBjaGlsZHJlbiB0aGF0IHNob3VsZCBiZSB1cGxvYWRlZCB0byB0aGUgZ3B1IGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnNjYWxlPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBzY2FsZSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5wb3NpdGlvbj10cnVlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBwb3NpdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5yb3RhdGlvbj1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcm90YXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMudXZzPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCB1dnMgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuYWxwaGE9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIGFscGhhIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtiYXRjaFNpemU9MTUwMDBdIHtudW1iZXJ9IE51bWJlciBvZiBwYXJ0aWNsZXMgcGVyIGJhdGNoLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUNvbnRhaW5lcihtYXhTaXplLCBwcm9wZXJ0aWVzLCBiYXRjaFNpemUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBiYXRjaFNpemUgPSBiYXRjaFNpemUgfHwgMTUwMDA7IC8vQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG4gICAgbWF4U2l6ZSA9IG1heFNpemUgfHwgMTUwMDA7XG5cbiAgICAvLyBNYWtpbmcgc3VyZSB0aGUgYmF0Y2ggc2l6ZSBpcyB2YWxpZFxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICB2YXIgbWF4QmF0Y2hTaXplID0gMTYzODQ7XG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhCYXRjaFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgcHJvcGVydGllcyB0byBiZSBkeW5hbWljICh0cnVlKSAvIHN0YXRpYyAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFuW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmF0Y2hTaXplID0gYmF0Y2hTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICpcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlQ2hpbGRyZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBjYW52YXMgcmVuZGVyZXJpbmcuIElmIHRydWUgdGhlbiB0aGUgZWxlbWVudHMgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBuZWFyZXN0IHBpeGVsLiBUaGlzIHByb3ZpZGVzIGEgbmljZSBzcGVlZCBib29zdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZTtcbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbn1cblxuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBwcml2YXRlIHByb3BlcnRpZXMgYXJyYXkgdG8gZHluYW1pYyAvIHN0YXRpYyBiYXNlZCBvbiB0aGUgcGFzc2VkIHByb3BlcnRpZXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMge29iamVjdH0gVGhlIHByb3BlcnRpZXMgdG8gYmUgdXBsb2FkZWRcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnNldFByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKVxue1xuICAgIGlmICggcHJvcGVydGllcyApIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1swXSA9ICdzY2FsZScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5zY2FsZSA6IHRoaXMuX3Byb3BlcnRpZXNbMF07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMV0gPSAncG9zaXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucG9zaXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzFdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzJdID0gJ3JvdGF0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnJvdGF0aW9uIDogdGhpcy5fcHJvcGVydGllc1syXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1szXSA9ICd1dnMnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMudXZzIDogdGhpcy5fcHJvcGVydGllc1szXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1s0XSA9ICdhbHBoYScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5hbHBoYSA6IHRoaXMuX3Byb3BlcnRpZXNbNF07XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcblxuICAgIC8vIFRPRE8gZG9uJ3QgbmVlZCB0byFcbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAvLyAgUElYSS5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybS5jYWxsKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRhaW5lciB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHdlYmdsIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIoIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUgKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlLnJlbmRlciggdGhpcyApO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGZsYWcgdGhhdCBzdGF0aWMgZGF0YSBzaG91bGQgYmUgdXBkYXRlZCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoc21hbGxlc3RDaGlsZEluZGV4KVxue1xuICAgIHZhciBidWZmZXJJbmRleCA9IE1hdGguZmxvb3Ioc21hbGxlc3RDaGlsZEluZGV4IC8gdGhpcy5fYmF0Y2hTaXplKTtcbiAgICBpZiAoYnVmZmVySW5kZXggPCB0aGlzLl9idWZmZXJUb1VwZGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IGJ1ZmZlckluZGV4O1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciBpc1JvdGF0ZWQgPSB0cnVlO1xuXG4gICAgdmFyIHBvc2l0aW9uWCA9IDA7XG4gICAgdmFyIHBvc2l0aW9uWSA9IDA7XG5cbiAgICB2YXIgZmluYWxXaWR0aCA9IDA7XG4gICAgdmFyIGZpbmFsSGVpZ2h0ID0gMDtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZSA9IGNoaWxkLnRleHR1cmUuZnJhbWU7XG5cbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYSAqIGNoaWxkLmFscGhhO1xuXG4gICAgICAgIGlmIChjaGlsZC5yb3RhdGlvbiAlIChNYXRoLlBJICogMikgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZhc3Rlc3QgIHdheSB0byBvcHRpbWlzZSEgLSBpZiByb3RhdGlvbiBpcyAwIHRoZW4gd2UgY2FuIGF2b2lkIGFueSBraW5kIG9mIHNldFRyYW5zZm9ybSBjYWxsXG4gICAgICAgICAgICBpZiAoaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLngpICsgY2hpbGQucG9zaXRpb24ueCAgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnkpICsgY2hpbGQucG9zaXRpb24ueSAgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54O1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55O1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZC5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZFRyYW5zZm9ybSA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHkgfCAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoKSArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0KSArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICBjaGlsZC50ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgIGZyYW1lLngsXG4gICAgICAgICAgICBmcmFtZS55LFxuICAgICAgICAgICAgZnJhbWUud2lkdGgsXG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQsXG4gICAgICAgICAgICBwb3NpdGlvblgsXG4gICAgICAgICAgICBwb3NpdGlvblksXG4gICAgICAgICAgICBmaW5hbFdpZHRoLFxuICAgICAgICAgICAgZmluYWxIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIGlmICh0aGlzLl9idWZmZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcbn07XG4iLCJcbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVCdWZmZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlQnVmZmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFRoZSBwYXJ0aWNsZSBidWZmZXIgbWFuYWdlcyB0aGUgc3RhdGljIGFuZCBkeW5hbWljIGJ1ZmZlcnMgZm9yIGEgcGFydGljbGUgY29udGFpbmVyLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQnVmZmVyKGdsLCBwcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgc2l6ZSlcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleCBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhlIGJ1ZmZlciBjYW4gaG9sZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgZHluYW1pYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBzdGF0aWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgaWYoZHluYW1pY1Byb3BlcnR5RmxhZ3NbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRCdWZmZXJzKCk7XG5cbn1cblxuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQnVmZmVyO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5pbml0QnVmZmVycyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcHJvcGVydHk7XG5cbiAgICB2YXIgZHluYW1pY09mZnNldCA9IDA7XG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IGR5bmFtaWNPZmZzZXQ7XG4gICAgICAgIGR5bmFtaWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5keW5hbWljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG5cblxuICAgIC8vIHN0YXRpYyAvL1xuICAgIHZhciBzdGF0aWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBzdGF0aWNPZmZzZXQ7XG4gICAgICAgIHN0YXRpY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLnN0YXRpY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuc3RhdGljU3RyaWRlICogNCk7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZHluYW1pYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZER5bmFtaWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLmR5bmFtaWNEYXRhLCB0aGlzLmR5bmFtaWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuZHluYW1pY0RhdGEpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBzdGF0aWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWRTdGF0aWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5zdGF0aWNEYXRhLCB0aGlzLnN0YXRpY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLnN0YXRpY0RhdGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyB0byB0aGUgR1BVXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaSwgcHJvcGVydHk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnN0YXRpY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlQnVmZmVyLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5zdGF0aWNCdWZmZXIpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlU2hhZGVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZVNoYWRlcicpLFxuICAgIFBhcnRpY2xlQnVmZmVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUJ1ZmZlcicpLFxuICAgIG1hdGggICAgICAgICAgICA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgLy8gYW5kIG1heCBudW1iZXIgb2YgZWxlbWVudCBpbiB0aGUgaW5kZXggYnVmZmVyIGlzIDE2Mzg0ICogNiA9IDk4MzA0XG4gICAgLy8gQ3JlYXRpbmcgYSBmdWxsIGluZGV4IGJ1ZmZlciwgb3ZlcmhlYWQgaXMgOTgzMDQgKiAyID0gMTk2S29cbiAgICB2YXIgbnVtSW5kaWNlcyA9IDk4MzA0O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShudW1JbmRpY2VzKTtcblxuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgbnVtSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IG51bGw7XG5cbiAgICB0aGlzLnRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcbn1cblxuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3BhcnRpY2xlJywgUGFydGljbGVSZW5kZXJlcik7XG5cbi8qKlxuICogV2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IG5ldyBQYXJ0aWNsZVNoYWRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIpO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IGluZGV4LCBzbyA2NTUzNSAvIDYgPSAxMDkyMi5cblxuICAgIC8vdXBsb2FkIHRoZSBpbmRleCBkYXRhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBbXG4gICAgICAgIC8vIHZlcnRpY2VzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFZlcnRpY2VzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcG9zaXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbkNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRQb3NpdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJvdGF0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUm90YXRpb24sXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFJvdGF0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdXZzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRVdnMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBhbHBoYURhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRBbHBoYSxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgcGFydGljbGUgYmF0Y2guXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGJpbmQgdGhlIG1haW4gdGV4dHVyZVxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgLy8gYmluZCB0aGUgYnVmZmVyc1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgcGFydGljbGUgY29udGFpbmVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgY2hpbGRyZW4gPSBjb250YWluZXIuY2hpbGRyZW4sXG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIG1heFNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplO1xuXG4gICAgaWYodG90YWxDaGlsZHJlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZih0b3RhbENoaWxkcmVuID4gbWF4U2l6ZSlcbiAgICB7XG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBtYXhTaXplO1xuICAgIH1cblxuICAgIGlmKCFjb250YWluZXIuX2J1ZmZlcnMpXG4gICAge1xuICAgICAgICBjb250YWluZXIuX2J1ZmZlcnMgPSB0aGlzLmdlbmVyYXRlQnVmZmVycyggY29udGFpbmVyICk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29udGFpbmVyLmJsZW5kTW9kZSk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIG0gPSAgY29udGFpbmVyLndvcmxkVHJhbnNmb3JtLmNvcHkoIHRoaXMudGVtcE1hdHJpeCApO1xuICAgIG0ucHJlcGVuZCggdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXggKTtcbiAgICBnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgbS50b0FycmF5KHRydWUpKTtcbiAgICBnbC51bmlmb3JtMWYodGhpcy5zaGFkZXIudW5pZm9ybXMudUFscGhhLl9sb2NhdGlvbiwgY29udGFpbmVyLndvcmxkQWxwaGEpO1xuXG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHRleHR1cmUgaXMgYm91bmQuLlxuICAgIHZhciBiYXNlVGV4dHVyZSA9IGNoaWxkcmVuWzBdLl90ZXh0dXJlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgdGV4dHVyZSBoYXMgbm90IHVwZGF0ZWQgdGhlbiBsZXRzIG5vdCB1cGxvYWQgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmKCF0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUoYmFzZVRleHR1cmUpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZighY29udGFpbmVyLl9wcm9wZXJ0aWVzWzBdIHx8ICFjb250YWluZXIuX3Byb3BlcnRpZXNbM10pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgfVxuXG4gICAgLy8gbm93IGxldHMgdXBsb2FkIGFuZCByZW5kZXIgdGhlIGJ1ZmZlcnMuLlxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IHRvdGFsQ2hpbGRyZW47IGkgKz0gYmF0Y2hTaXplLCBqICs9IDEpXG4gICAge1xuICAgICAgICB2YXIgYW1vdW50ID0gKCB0b3RhbENoaWxkcmVuIC0gaSk7XG4gICAgICAgIGlmKGFtb3VudCA+IGJhdGNoU2l6ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50ID0gYmF0Y2hTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRhaW5lci5fYnVmZmVyc1tqXTtcblxuICAgICAgICAvLyB3ZSBhbHdheXMgdXBsb2FkIHRoZSBkeW5hbWljXG4gICAgICAgIGJ1ZmZlci51cGxvYWREeW5hbWljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuXG4gICAgICAgIC8vIHdlIG9ubHkgdXBsb2FkIHRoZSBzdGF0aWMgY29udGVudCB3aGVuIHdlIGhhdmUgdG8hXG4gICAgICAgIGlmKGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPT09IGopXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJ1ZmZlci51cGxvYWRTdGF0aWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gaiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5kIHRoZSBidWZmZXJcbiAgICAgICAgYnVmZmVyLmJpbmQoIHRoaXMuc2hhZGVyICk7XG5cbiAgICAgICAgIC8vIG5vdyBkcmF3IHRob3NlIHN1Y2thcyFcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgYW1vdW50ICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBvbmUgcGFydGljbGUgYnVmZmVyIGZvciBlYWNoIGNoaWxkIGluIHRoZSBjb250YWluZXIgd2Ugd2FudCB0byByZW5kZXIgYW5kIHVwZGF0ZXMgaW50ZXJuYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5nZW5lcmF0ZUJ1ZmZlcnMgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIGJ1ZmZlcnMgPSBbXSxcbiAgICAgICAgc2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemUsXG4gICAgICAgIGR5bmFtaWNQcm9wZXJ0eUZsYWdzID0gY29udGFpbmVyLl9wcm9wZXJ0aWVzLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gYmF0Y2hTaXplKVxuICAgIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKG5ldyBQYXJ0aWNsZUJ1ZmZlcihnbCwgdGhpcy5wcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgYmF0Y2hTaXplKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHZlcnRpY2llcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgdmVydGljZXMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFZlcnRpY2VzID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICB2YXIgc3ByaXRlLFxuICAgICAgICB0ZXh0dXJlLFxuICAgICAgICB0cmltLFxuICAgICAgICBzeCxcbiAgICAgICAgc3ksXG4gICAgICAgIHcwLCB3MSwgaDAsIGgxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xuXG4gICAgICAgIHNwcml0ZSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXTtcbiAgICAgICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZTtcbiAgICAgICAgc3ggPSBzcHJpdGUuc2NhbGUueDtcbiAgICAgICAgc3kgPSBzcHJpdGUuc2NhbGUueTtcblxuICAgICAgICBpZiAodGV4dHVyZS50cmltKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgICAgICB0cmltID0gdGV4dHVyZS50cmltO1xuXG4gICAgICAgICAgICB3MSA9IHRyaW0ueCAtIHNwcml0ZS5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBoMSA9IHRyaW0ueSAtIHNwcml0ZS5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtc3ByaXRlLmFuY2hvci54KTtcbiAgICAgICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtc3ByaXRlLmFuY2hvci54O1xuXG4gICAgICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXNwcml0ZS5hbmNob3IueSk7XG4gICAgICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC1zcHJpdGUuYW5jaG9yLnk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBwb3NpdGlvbnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFBvc2l0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUG9zaXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucG9zaXRpb247XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcm90YXRpb24gdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFJvdGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUm90YXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucm90YXRpb247XG5cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVSb3RhdGlvbjtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgVXZzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRVdnMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlVXZzID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLl90ZXh0dXJlLl91dnM7XG5cbiAgICAgICAgaWYgKHRleHR1cmVVdnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSB0ZXh0dXJlVXZzLngwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZXh0dXJlVXZzLnkwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdGV4dHVyZVV2cy54MTtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gdGV4dHVyZVV2cy55MTtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB0ZXh0dXJlVXZzLngyO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gdGV4dHVyZVV2cy55MjtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB0ZXh0dXJlVXZzLngzO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gdGV4dHVyZVV2cy55MztcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8geW91IGtub3cgdGhpcyBjYW4gYmUgZWFzaWVyIVxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBhbHBoYSB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkQWxwaGEgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZUFscGhhID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLmFscGhhO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZUFscGhhO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVSZW5kZXJlci5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuICAgIHRoaXMudGVtcE1hdHJpeCA9IG51bGw7XG59O1xuIiwidmFyIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVTaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBUZXh0dXJlU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFQb3NpdGlvbkNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVNjYWxlOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFSb3RhdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIHZlYzIgdiA9IGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAnICAgdi54ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIGNvcyhhUm90YXRpb24pIC0gKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIHNpbihhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdi55ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIHNpbihhUm90YXRpb24pICsgKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIGNvcyhhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdiA9IHYgKyBhUG9zaXRpb25Db29yZDsnLFxuXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyh2LCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGhlbGxvXG4gICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCB1QWxwaGE7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3IgKiB1QWxwaGE7JyxcbiAgICAgICAgICAgICcgIGlmIChjb2xvci5hID09IDAuMCkgZGlzY2FyZDsnLFxuICAgICAgICAgICAgJyAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdUFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFQb3NpdGlvbkNvb3JkOiAwLFxuICAgICAgICAgICAvLyBhU2NhbGU6ICAgICAgICAgMCxcbiAgICAgICAgICAgIGFSb3RhdGlvbjogICAgICAwXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVEVNUCBIQUNLXG5cbn1cblxuUGFydGljbGVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlU2hhZGVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVNoYWRlcjtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHN5c3RlbSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgc3lzdGVtIHRoaXMgcmVuZGVyZXIgaXMgZm9yLlxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXSB7bnVtYmVyfSBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcmVuZGVyZWQgYXJlYSAoc2hvd24gaWYgbm90IHRyYW5zcGFyZW50KS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5yb3VuZFBpeGVscz1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBTeXN0ZW1SZW5kZXJlcihzeXN0ZW0sIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB1dGlscy5zYXlIZWxsbyhzeXN0ZW0pO1xuXG4gICAgLy8gcHJlcGFyZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpIGluIENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tpXSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgb3B0aW9ucyA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHNlZSBQSVhJLlJFTkRFUkVSX1RZUEVcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgODAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDgwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgNjAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy52aWV3ID0gb3B0aW9ucy52aWV3IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG9wdGlvbnMucmVzb2x1dGlvbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBvcHRpb25zLnRyYW5zcGFyZW50O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgc2hvdWxkIGJlIHJlc2l6ZWQgYXV0b21hdGljYWxseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvcHRpb25zLmF1dG9SZXNpemUgfHwgZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIGJsZW5kIG1vZGVzIHVzZWZ1bCBmb3IgdGhpcyByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG1peGVkPn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgZmxhZyBhZmZlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50cyBvZiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgcmV0YWluZWQgYWZ0ZXIgcmVuZGVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3Igbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyBOT1QgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBhIGNhbnZhcyBzaXplZCBmaWxsUmVjdCBvcGVyYXRpb24gZXZlcnkgZnJhbWUgdG8gc2V0IHRoZSBjYW52YXMgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBjbGVhclJlY3QgdG8gY2xlYXIgdGhlIGNhbnZhcyBldmVyeSBmcmFtZS5cbiAgICAgKiBEaXNhYmxlIHRoaXMgYnkgc2V0dGluZyB0aGlzIHRvIGZhbHNlLiBGb3IgZXhhbXBsZSBpZiB5b3VyIGdhbWUgaGFzIGEgY2FudmFzIGZpbGxpbmcgYmFja2dyb3VuZCBpbWFnZSB5b3Ugb2Z0ZW4gZG9uJ3QgbmVlZCB0aGlzIHNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHRcbiAgICAgKi9cbiAgICB0aGlzLmNsZWFyQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICAgICAqIEhhbmR5IGZvciBjcmlzcCBwaXhlbCBhcnQgYW5kIHNwZWVkIG9uIGxlZ2FjeSBkZXZpY2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gb3B0aW9ucy5yb3VuZFBpeGVscztcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmEgPSBbMCwgMCwgMCwgMF07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9ICcjMDAwMDAwJztcblxuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yOyAvLyBydW4gYmcgY29sb3Igc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgdHJhbnNmb3JtOnt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKX0sIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3Qgcm9vdCBvYmplY3QgdGhhdCB0aGUgcmVuZGVyZXIgdHJpZWQgdG8gcmVuZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3lzdGVtUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFN5c3RlbVJlbmRlcmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciB0byBmaWxsIGlmIG5vdCB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlN5c3RlbVJlbmRlcmVyI1xuICAgICAqL1xuICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSB1dGlscy5oZXgyc3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB1dGlscy5oZXgycmdiKHZhbCwgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBjYW52YXMgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMudmlldy53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGhpcy52aWV3LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgICAgICB0aGlzLnZpZXcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpIHtcbiAgICBpZiAocmVtb3ZlVmlldyAmJiB0aGlzLnZpZXcucGFyZW50Tm9kZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMudmlldyk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgdGhpcy52aWV3ID0gbnVsbDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IDA7XG5cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBmYWxzZTtcblxuICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcblxuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDA7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IG51bGw7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gbnVsbDtcbn07XG4iLCJ2YXIgU3lzdGVtUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9TeXN0ZW1SZW5kZXJlcicpLFxuICAgIENhbnZhc01hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi91dGlscy9DYW52YXNNYXNrTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBTeXN0ZW1SZW5kZXJlci5jYWxsKHRoaXMsICdDYW52YXMnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuQ0FOVkFTO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMudmlldy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIGZsYWcgY29udHJvbGxpbmcgY2FudmFzIHJlZnJlc2guXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVmcmVzaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBhIENhbnZhc01hc2tNYW5hZ2VyLCBoYW5kbGVzIG1hc2tpbmcgd2hlbiB1c2luZyB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNNYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IENhbnZhc01hc2tNYW5hZ2VyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIHByb3BlcnR5IHVzZWQgdG8gc2V0IHRoZSBjYW52YXMgc21vb3RoaW5nIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnaW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcblxuICAgIGlmICghdGhpcy5jb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ3dlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ29JbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB0aGlzLl9tYXBCbGVuZE1vZGVzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHtcbiAgICAgICAgd29ybGRUcmFuc2Zvcm06IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgICAgICB3b3JsZEFscGhhOiAxXG4gICAgfTtcblxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oQ2FudmFzUmVuZGVyZXIpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byB0aGlzIGNhbnZhcyB2aWV3XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSB0aGUgb2JqZWN0IHRvIGJlIHJlbmRlcmVkXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KVxue1xuICAgIHRoaXMuZW1pdCgncHJlcmVuZGVyJyk7XG5cbiAgICB2YXIgY2FjaGVQYXJlbnQgPSBvYmplY3QucGFyZW50O1xuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gb2JqZWN0O1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIG9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIG9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTICYmIHRoaXMudmlldy5zY3JlZW5jYW52YXMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpXG4gICAge1xuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGggLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlckRpc3BsYXlPYmplY3Qob2JqZWN0LCB0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciBhbmQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSBDYW52YXMgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIFtyZW1vdmVWaWV3PWZhbHNlXSB7Ym9vbGVhbn0gUmVtb3ZlcyB0aGUgQ2FudmFzIGVsZW1lbnQgZnJvbSB0aGUgRE9NLlxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIGNhbGwgdGhlIGJhc2UgZGVzdHJveVxuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcywgcmVtb3ZlVmlldyk7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5T2JqZWN0IHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgY29udGV4dClcbntcbiAgICB2YXIgdGVtcENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyQ2FudmFzKHRoaXMpO1xuICAgIHRoaXMuY29udGV4dCA9IHRlbXBDb250ZXh0O1xufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBQSVhJLlN5c3RlbVJlbmRlcmVyI3Jlc2l6ZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKiBAcGFyYW0ge251bWJlcn0gaFxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHcsIGgpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xuXG4gICAgLy9yZXNldCB0aGUgc2NhbGUgbW9kZS4uIG9kZGx5IHRoaXMgc2VlbXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgY2FudmFzIGlzIHJlc2l6ZWQuXG4gICAgLy9zdXJlbHkgYSBicm93c2VyIGJ1Zz8/IExldCBwaXhpIGZpeCB0aGF0IGZvciB5b3UuLlxuICAgIGlmKHRoaXMuc21vb3RoUHJvcGVydHkpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHRbdGhpcy5zbW9vdGhQcm9wZXJ0eV0gPSAoQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVCA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogTWFwcyBQaXhpIGJsZW5kIG1vZGVzIHRvIGNhbnZhcyBibGVuZCBtb2Rlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX21hcEJsZW5kTW9kZXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5ibGVuZE1vZGVzKVxuICAgIHtcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzID0ge307XG5cbiAgICAgICAgaWYgKHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnbXVsdGlwbHknO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NjcmVlbic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSAnb3ZlcmxheSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnZGFya2VuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MSUdIVEVOXSAgICAgICA9ICdsaWdodGVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdjb2xvci1kb2RnZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnY29sb3ItYnVybic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnaGFyZC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSAnc29mdC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnZGlmZmVyZW5jZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnZXhjbHVzaW9uJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdodWUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gJ3NhdHVyYXRlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl0gICAgICAgICA9ICdjb2xvcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSAnbHVtaW5vc2l0eSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29vbCBuZXcgYmxlbmQgbW9kZXMgaW4gY2FudmFzICdjb3VnaCcgaWUgJ2NvdWdoJ1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNpemUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGNhbnZhc1xuICovXG5mdW5jdGlvbiBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgQ2FudmFzIG9iamVjdCB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBDYW52YXNCdWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogQSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHR3by1kaW1lbnNpb25hbCByZW5kZXJpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59XG5cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0J1ZmZlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FudmFzQnVmZmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIGJ1ZmZlciBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ2FudmFzQnVmZmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdmFsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGNhbnZhcyB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZSBDYW52YXNCdWZmZXIgY2xhc3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbnZhc1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgY2FudmFzLlxuICpcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBjYW52YXMgcmVuZGVyZXIgdG8gZHJhdyB0aGUgcHJpbWl0aXZlIGdyYXBoaWNzIGRhdGEuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNHcmFwaGljcyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNHcmFwaGljcztcblxuLypcbiAqIFJlbmRlcnMgYSBHcmFwaGljcyBvYmplY3QgdG8gYSBjYW52YXMuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgYWN0dWFsIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSAyZCBkcmF3aW5nIG1ldGhvZCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciB3b3JsZEFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuICAgIGlmIChncmFwaGljcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3NUaW50KGdyYXBoaWNzKTtcbiAgICAgICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLl9maWxsVGludDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEuX2xpbmVUaW50O1xuXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZSBjbG9zZSB0aGUgcGF0aCAtIG11Y2ggbmVhdGVyIDopXG4gICAgICAgICAgICBpZiAocG9pbnRzWzBdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAmJiBwb2ludHNbMV0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbENvbG9yIHx8IGRhdGEuZmlsbENvbG9yID09PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmZpbGxBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggZmlsbENvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUud2lkdGgsIHNoYXBlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLDAsMipNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVsbGlwc2UgY29kZSB0YWtlbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcblxuICAgICAgICAgICAgdmFyIHcgPSBzaGFwZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB2YXIgaCA9IHNoYXBlLmhlaWdodCAqIDI7XG5cbiAgICAgICAgICAgIHZhciB4ID0gc2hhcGUueCAtIHcvMjtcbiAgICAgICAgICAgIHZhciB5ID0gc2hhcGUueSAtIGgvMjtcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIGthcHBhID0gMC41NTIyODQ4LFxuICAgICAgICAgICAgICAgIG94ID0gKHcgLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgb3kgPSAoaCAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgeGUgPSB4ICsgdywgICAgICAgICAgIC8vIHgtZW5kXG4gICAgICAgICAgICAgICAgeWUgPSB5ICsgaCwgICAgICAgICAgIC8vIHktZW5kXG4gICAgICAgICAgICAgICAgeG0gPSB4ICsgdyAvIDIsICAgICAgIC8vIHgtbWlkZGxlXG4gICAgICAgICAgICAgICAgeW0gPSB5ICsgaCAvIDI7ICAgICAgIC8vIHktbWlkZGxlXG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG1hc2tcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3Mgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgbWFza1xuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGNvbnRleHQgMmQgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciBsZW4gPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gVE9ETyAtIG5lZWQgdG8gYmUgVW5kZWZpbmVkIVxuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgcnggPSBzaGFwZS54O1xuICAgICAgICAgICAgdmFyIHJ5ID0gc2hhcGUueTtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcbiAgICAgICAgICAgIHZhciByYWRpdXMgPSBzaGFwZS5yYWRpdXM7XG5cbiAgICAgICAgICAgIHZhciBtYXhSYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDIgfCAwO1xuICAgICAgICAgICAgcmFkaXVzID0gcmFkaXVzID4gbWF4UmFkaXVzID8gbWF4UmFkaXVzIDogcmFkaXVzO1xuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRpbnQgb2YgYSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3MgdGhhdCB3aWxsIGhhdmUgaXRzIHRpbnQgdXBkYXRlZFxuICpcbiAqL1xuQ2FudmFzR3JhcGhpY3MudXBkYXRlR3JhcGhpY3NUaW50ID0gZnVuY3Rpb24gKGdyYXBoaWNzKVxue1xuICAgIGlmIChncmFwaGljcy50aW50ID09PSAweEZGRkZGRiAmJiBncmFwaGljcy5fcHJldlRpbnQgPT09IGdyYXBoaWNzLnRpbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyYXBoaWNzLl9wcmV2VGludCA9IGdyYXBoaWNzLnRpbnQ7XG5cbiAgICB2YXIgdGludFIgPSAoZ3JhcGhpY3MudGludCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50RyA9IChncmFwaGljcy50aW50ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgdGludEIgPSAoZ3JhcGhpY3MudGludCAmIDB4RkYpLyAyNTU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLmZpbGxDb2xvciB8IDA7XG4gICAgICAgIHZhciBsaW5lQ29sb3IgPSBkYXRhLmxpbmVDb2xvciB8IDA7XG5cbiAgICAgICAgLypcbiAgICAgICAgdmFyIGNvbG9yUiA9IChmaWxsQ29sb3IgPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgdmFyIGNvbG9yRyA9IChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JCID0gKGZpbGxDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgZmlsbENvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG5cbiAgICAgICAgY29sb3JSID0gKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckcgPSAobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgY29sb3JCID0gKGxpbmVDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgbGluZUNvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG4gICAgICAgICovXG5cbiAgICAgICAgLy8gc3VwZXIgaW5saW5lIGNvcyBpbSBhbiBvcHRpbWl6YXRpb24gTkFaSSA6KVxuICAgICAgICBkYXRhLl9maWxsVGludCA9ICgoKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgoZmlsbENvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAoZmlsbENvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuICAgICAgICBkYXRhLl9saW5lVGludCA9ICgoKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAobGluZUNvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuXG4gICAgfVxufTtcblxuIiwidmFyIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi9DYW52YXNHcmFwaGljcycpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBtYXNraW5nLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ2FudmFzTWFza01hbmFnZXIoKVxue31cblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FudmFzTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc01hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgc3RhY2sgb2YgbWFza3MuXG4gKlxuICogQHBhcmFtIG1hc2tEYXRhIHtvYmplY3R9IHRoZSBtYXNrRGF0YSB0aGF0IHdpbGwgYmUgcHVzaGVkXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSwgcmVuZGVyZXIpXG57XG5cbiAgICByZW5kZXJlci5jb250ZXh0LnNhdmUoKTtcblxuICAgIHZhciBjYWNoZUFscGhhID0gbWFza0RhdGEuYWxwaGE7XG4gICAgdmFyIHRyYW5zZm9ybSA9IG1hc2tEYXRhLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgLy9UT0RPIHN1cG9ydCBzcHJpdGUgYWxwaGEgbWFza3M/P1xuICAgIC8vbG90cyBvZiBlZmZvcnQgcmVxdWlyZWQuIElmIGRlbWFuZCBpcyBncmVhdCBlbm91Z2guLlxuICAgIGlmKCFtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrKG1hc2tEYXRhLCByZW5kZXJlci5jb250ZXh0KTtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5jbGlwKCk7XG4gICAgfVxuXG4gICAgbWFza0RhdGEud29ybGRBbHBoYSA9IGNhY2hlQWxwaGE7XG59O1xuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dCB0byB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZSB0aGUgbWFzayB3YXMgYXBwbGllZC5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLmNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7fTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2RzIGZvciBTcHJpdGUvVGV4dHVyZSB0aW50aW5nLlxuICogQHN0YXRpY1xuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG52YXIgQ2FudmFzVGludGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1RpbnRlcjtcblxuLyoqXG4gKiBCYXNpY2FsbHkgdGhpcyBtZXRob2QganVzdCBuZWVkcyBhIHNwcml0ZSBhbmQgYSBjb2xvciBhbmQgdGludHMgdGhlIHNwcml0ZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSB0aW50ZWQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlID0gZnVuY3Rpb24gKHNwcml0ZSwgY29sb3IpXG57XG4gICAgdmFyIHRleHR1cmUgPSBzcHJpdGUudGV4dHVyZTtcblxuICAgIGNvbG9yID0gQ2FudmFzVGludGVyLnJvdW5kQ29sb3IoY29sb3IpO1xuXG4gICAgdmFyIHN0cmluZ0NvbG9yID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgdGV4dHVyZS50aW50Q2FjaGUgPSB0ZXh0dXJlLnRpbnRDYWNoZSB8fCB7fTtcblxuICAgIGlmICh0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0pXG4gICAge1xuICAgICAgICByZXR1cm4gdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdO1xuICAgIH1cblxuICAgICAvLyBjbG9uZSB0ZXh0dXJlLi5cbiAgICB2YXIgY2FudmFzID0gQ2FudmFzVGludGVyLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8vQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWwodGV4dHVyZSwgc3RyaW5nQ29sb3IsIGNhbnZhcyk7XG4gICAgQ2FudmFzVGludGVyLnRpbnRNZXRob2QodGV4dHVyZSwgY29sb3IsIGNhbnZhcyk7XG5cbiAgICBpZiAoQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSlcbiAgICB7XG4gICAgICAgIC8vIGlzIHRoaXMgYmV0dGVyP1xuICAgICAgICB2YXIgdGludEltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHRpbnRJbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKCk7XG5cbiAgICAgICAgdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdID0gdGludEltYWdlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSBjYW52YXM7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBub3QgY29udmVydGluZyB0aGUgdGV4dHVyZSB0byBhbiBpbWFnZSB0aGVuIHdlIG5lZWQgdG8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXNcbiAgICAgICAgQ2FudmFzVGludGVyLmNhbnZhcyA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdtdWx0aXBseScgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcblxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdvdmVybGF5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoT3ZlcmxheSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1hdG9wJztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgLy8gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG59O1xuXG4vKipcbiAqIFRpbnQgYSB0ZXh0dXJlIHBpeGVsIHBlciBwaXhlbC5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcbiAgICB2YXIgciA9IHJnYlZhbHVlc1swXSwgZyA9IHJnYlZhbHVlc1sxXSwgYiA9IHJnYlZhbHVlc1syXTtcblxuICAgIHZhciBwaXhlbERhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICB2YXIgcGl4ZWxzID0gcGl4ZWxEYXRhLmRhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBpeGVscy5sZW5ndGg7IGkgKz0gNClcbiAgICB7XG4gICAgICAgIHBpeGVsc1tpKzBdICo9IHI7XG4gICAgICAgIHBpeGVsc1tpKzFdICo9IGc7XG4gICAgICAgIHBpeGVsc1tpKzJdICo9IGI7XG4gICAgfVxuXG4gICAgY29udGV4dC5wdXRJbWFnZURhdGEocGl4ZWxEYXRhLCAwLCAwKTtcbn07XG5cbi8qKlxuICogUm91bmRzIHRoZSBzcGVjaWZpZWQgY29sb3IgYWNjb3JkaW5nIHRvIHRoZSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbC5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHJvdW5kLCBzaG91bGQgYmUgYSBoZXggY29sb3JcbiAqL1xuQ2FudmFzVGludGVyLnJvdW5kQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IpXG57XG4gICAgdmFyIHN0ZXAgPSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbDtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcblxuICAgIHJnYlZhbHVlc1swXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1swXSAvIHN0ZXApICogc3RlcCk7XG4gICAgcmdiVmFsdWVzWzFdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzFdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMl0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMl0gLyBzdGVwKSAqIHN0ZXApO1xuXG4gICAgcmV0dXJuIHV0aWxzLnJnYjJoZXgocmdiVmFsdWVzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGNhcCB3aGVuIHJvdW5kaW5nIGNvbG9ycy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsID0gODtcblxuLyoqXG4gKiBUaW50IGNhY2hlIGJvb2xlYW4gZmxhZy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jb252ZXJ0VGludFRvSW1hZ2UgPSBmYWxzZTtcblxuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCwgY29uc2VxdWVudGx5IHRoZSBhYmlsaXR5IHRvIHRpbnQgdXNpbmcgdGhlIG11bHRpcGx5IG1ldGhvZC5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA9IHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKTtcblxuLyoqXG4gKiBUaGUgdGludGluZyBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQuXG4gKlxuICovXG5DYW52YXNUaW50ZXIudGludE1ldGhvZCA9IENhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA/IENhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5IDogIENhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsO1xuIiwidmFyIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcblx0dXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIFRleHR1cmVNYW5hZ2VyID0gZnVuY3Rpb24oZ2wpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyB0cmFjayB0ZXh0dXJlcyBpbiB0aGUgcmVuZGVyZXIgc28gd2UgY2FuIG5vIGxvbmdlciBsaXN0ZW4gdG8gdGhlbSBvbiBkZXN0cnVjdGlvbi5cblx0dGhpcy5fbWFuYWdlZFRleHR1cmVzID0gW107XG4gICAgdGhpcy5nbFRleHR1cmVzID0ge307XG5cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5nZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW5kL29yIENyZWF0ZXMgYSBXZWJHTCB0ZXh0dXJlIGZvciB0aGUgcmVuZGVyZXIncyBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdXBkYXRlXG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuXHRpZiAoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGdsVGV4dHVyZSA9IHRoaXMuZ2xUZXh0dXJlc1t0ZXh0dXJlLnVpZF0vL3RleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgaWYgKCFnbFRleHR1cmUpXG4gICAge1xuICAgICAgICBnbFRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcbiAgICAgICAgZ2xUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSB0cnVlXG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgLy8gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXSA9IGdsVGV4dHVyZTtcblxuICAgICAgICB0ZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9uKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICBnbFRleHR1cmUudXBsb2FkKHRleHR1cmUuc291cmNlKTtcbiAgICBcbiAgICAvL1RPRE8gY2hlY2sgaXMgcG93ZXIgb2YgdHdvLi5cbiAgICBnbFRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cblxuICAgIC8vIFRPRE8gY2hlY2sgZm9yIHNjYWxpbmcgdHlwZVxuICAgIGdsVGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKCk7XG5cbiAgICByZXR1cm4gIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTFxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gZGVzdHJveVxuICovXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlLCBfc2tpcFJlbW92ZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0pXG4gICAge1xuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG5cblxuICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcblxuICAgICAgICBpZiAoIV9za2lwUmVtb3ZlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5pbmRleE9mKHRleHR1cmUpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5fbWFuYWdlZFRleHR1cmVzLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKClcbntcblx0Ly8gZW1wdHkgYWxsIHRoZSBvbGQgZ2wgdGV4dHVyZXMgYXMgdGhleSBhcmUgdXNlbGVzcyBub3dcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzW2ldO1xuICAgICAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuICAgIC8vIGRlc3Ryb3kgbWFuYWdlZCB0ZXh0dXJlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIHRoaXMuZGVzdHJveVRleHR1cmUodGV4dHVyZSwgdHJ1ZSk7XG4gICAgICAgIHRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9mZignZGlzcG9zZScsIHRoaXMuZGVzdHJveVRleHR1cmUsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcyA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZU1hbmFnZXI7XG5cbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgU2hhZGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIE1hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9NYXNrTWFuYWdlcicpLFxuICAgIFN0ZW5jaWxNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlcicpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBCbGVuZE1vZGVNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4vdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBGWEFBRmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBUZXh0dXJlTWFuYWdlciA9IHJlcXVpcmUoJy4vVGV4dHVyZU1hbmFnZXInKSxcbiAgICBjcmVhdGVDb250ZXh0ID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuY3JlYXRlQ29udGV4dCxcbiAgICBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aScpLFxuICAgIG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpID0gcmVxdWlyZSgnLi91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFdlYkdMUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIHdlYkdMIGVuYWJsZWQgY2FudmFzLiBUaGlzIHJlbmRlcmVyXG4gKiBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMLiBUaGlzIFJlbmRlciB3b3JrcyBieSBhdXRvbWF0aWNhbGx5IG1hbmFnaW5nIHdlYkdMQmF0Y2hzLlxuICogU28gbm8gbmVlZCBmb3IgU3ByaXRlIEJhdGNoZXMgb3IgU3ByaXRlIENsb3Vkcy5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIHZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9MF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9MF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMuIElmIG5vdCBhdmFpbGFibGUgbmF0aXZlbHkgdGhlbiBGWEFBIGFudGlhbGlhc2luZyBpcyB1c2VkXG4gKiBAcGFyYW0gW29wdGlvbnMuZm9yY2VGWEFBPWZhbHNlXSB7Ym9vbGVhbn0gZm9yY2VzIEZYQUEgYW50aWFsaWFzaW5nIHRvIGJlIHVzZWQgb3ZlciBuYXRpdmUuIEZYQUEgaXMgZmFzdGVyLCBidXQgbWF5IG5vdCBhbHdheXMgbG9vayBhcyBncmVhdFxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy4gSWYgeW91IHdpc2ggdG8gc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSAqbXVzdCogc2V0IHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byBgdHJ1ZWAuXG4gKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmXG4gKiAgICAgIHlvdSBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0LlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ1dlYkdMJywgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIHJlbmRlcmVyIGFzIGEgc3RhbmRhcmRpc2VkIGNvbnN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9Ly9cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0w7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gdGhpcy5oYW5kbGVDb250ZXh0TG9zdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5oYW5kbGVDb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gY3JlYXRlIGEgbmV3IHdlYmdsIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgICAgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQsXG4gICAgICAgIGFudGlhbGlhczogb3B0aW9ucy5hbnRpYWxpYXMsXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnRyYW5zcGFyZW50ICE9PSAnbm90TXVsdGlwbGllZCcsXG4gICAgICAgIHN0ZW5jaWw6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICB9O1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYVszXSA9IHRoaXMudHJhbnNwYXJlbnQgPyAwIDogMTtcblxuICAgIC8qKlxuICAgICAqIERlYWxzIHdpdGggbWFuYWdpbmcgdGhlIHNoYWRlciBwcm9ncmFtcyBhbmQgdGhlaXIgYXR0cmlicy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBuZXcgU2hhZGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1hc2tzIHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWFza01hbmFnZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG5ldyBNYXNrTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyID0gbmV3IFN0ZW5jaWxNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRmlsdGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlck1hbmFnZXIgPSBuZXcgRmlsdGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIGJsZW5kTW9kZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmxlbmRNb2RlTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBuZXcgQmxlbmRNb2RlTWFuYWdlcih0aGlzKTtcblxuICAgIFxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIE9iamVjdFJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5PYmplY3RSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG5ldyBPYmplY3RSZW5kZXJlcih0aGlzKTtcblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIGNvbnRleHQgc28gaXQgaXMgcmVhZHkgZm9yIHRoZSBtYW5hZ2Vycy5cbiAgICB0aGlzLmdsID0gY3JlYXRlQ29udGV4dCh0aGlzLnZpZXcsIHRoaXMuX2NvbnRleHRPcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXRDb250ZXh0KCk7XG5cbiAgICAvLyBtYXAgc29tZSB3ZWJHTCBibGVuZCBhbmQgZHJhd21vZGVzLi5cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wpO1xuICAgIHRoaXMuZHJhd01vZGVzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wpXG5cbiAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXR9XG4gICAgICovXG4gICAgdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUZXh0dXJlTG9jYXRpb24gPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oV2ViR0xSZW5kZXJlcik7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgV2ViR0wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLl9pbml0Q29udGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgbWFuYWdlci4uLlxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hbmFnZXIoZ2wpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBkZWZhdWx0IHBpeGkgc2V0dGluZ3MuLlxuICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG5cblxuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBudWxsLCB0aGlzLnJlc29sdXRpb24sIHRydWUpO1xuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5jbGVhckNvbG9yID0gdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYTtcbiAgICBcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQodGhpcy5yb290UmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMuZW1pdCgnY29udGV4dCcsIGdsKTtcblxuICAgIC8vIHNldHVwIHRoZSB3aWR0aC9oZWlnaHQgcHJvcGVydGllcyBhbmQgZ2wgdmlld3BvcnRcbiAgICB0aGlzLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7ICAgIFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gaXRzIHdlYkdMIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIC8vIG5vIHBvaW50IHJlbmRlcmluZyBpZiBvdXIgY29udGV4dCBoYXMgYmVlbiBibG93biB1cCFcbiAgICBpZiAodGhpcy5nbC5pc0NvbnRleHRMb3N0KCkpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gZGlzcGxheU9iamVjdDtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IGRpc3BsYXlPYmplY3QucGFyZW50O1xuICAgIGRpc3BsYXlPYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIGRpc3BsYXlPYmplY3QudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnJvb3RSZW5kZXJUYXJnZXQsIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpOy8vdGhpcy5wcm9qZWN0aW9uKTtcblxuICAgIHRoaXMuZW1pdCgncG9zdHJlbmRlcicpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgRGlzcGxheSBPYmplY3QuXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0gcmVuZGVyVGFyZ2V0IHtQSVhJLlJlbmRlclRhcmdldH0gVGhlIHJlbmRlciB0YXJnZXQgdG8gdXNlIHRvIHJlbmRlciB0aGlzIGRpc3BsYXkgb2JqZWN0XG4gKlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJEaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHJlbmRlclRhcmdldCwgY2xlYXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgdGhpcy5iaW5kUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG5cbiAgICBpZihjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IHRoZSBmaWx0ZXIgbWFuYWdlclxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5zZXRGaWx0ZXJTdGFjayggcmVuZGVyVGFyZ2V0LmZpbHRlclN0YWNrICk7XG5cbiAgICAvLyByZW5kZXIgdGhlIHNjZW5lIVxuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyV2ViR0wodGhpcyk7XG5cbiAgICAvLyBmaW5pc2ggdGhlIGN1cnJlbnQgcmVuZGVyZXIuLlxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdGhlIG9uZSBnaXZlbiBpbiBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gb2JqZWN0UmVuZGVyZXIge1BJWEkuT2JqZWN0UmVuZGVyZXJ9IFRoZSBvYmplY3QgcmVuZGVyZXIgdG8gdXNlLlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRPYmplY3RSZW5kZXJlciA9IGZ1bmN0aW9uIChvYmplY3RSZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyZXIgPT09IG9iamVjdFJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0b3AoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG9iamVjdFJlbmRlcmVyO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHdlYkdMIHZpZXcgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB3ZWJHTCB2aWV3XG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB3ZWJHTCB2aWV3XG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9PT0gdGhpcy5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSB0aGUgbmV3IHJlbmRlciB0YXJnZXRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgaWYocmVuZGVyVGFyZ2V0ICE9PSB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcblxuICAgICAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLnNldE1hc2tTdGFjayggcmVuZGVyVGFyZ2V0LnN0ZW5jaWxNYXNrU3RhY2sgKTtcbiAgICB9XG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKS8vcHJvamVjdGlvbiwgYnVmZmVyKVxue1xuICAgIC8vVE9ETyBjYWNoZVxuICAgIGlmKHRoaXMuX2FjdGl2ZVNoYWRlciAhPT0gc2hhZGVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlU2hhZGVyID0gc2hhZGVyO1xuICAgICAgICBzaGFkZXIuYmluZCgpO1xuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgfVxufVxuXG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvY2F0aW9uKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvL1RPRE8gdGVzdCBwZXJmIG9mIGNhY2hlP1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gfHwgMDtcblxuICAgIGlmKHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiAhPT0gbG9jYXRpb24pLy9cbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbiApO1xuICAgIH1cblxuICAgIC8vVE9ETyAtIGNhbiB3ZSBjYWNoZSB0aGlzIHRleHR1cmUgdG9vP1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOyAgICAgIFxuICAgIFxuICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBiaW5kIHRoZSB0ZXh0dXJlLi5cbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0uYmluZCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEhhbmRsZXMgYSBsb3N0IHdlYmdsIGNvbnRleHRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5oYW5kbGVDb250ZXh0TG9zdCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGEgcmVzdG9yZWQgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnJlbW92ZUFsbCgpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgKGV2ZW50IGxpc3RlbmVycywgc3ByaXRlYmF0Y2gsIGV0Yy4uLilcbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldylcbntcbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICAvLyByZW1vdmUgbGlzdGVuZXJzXG4gICAgdGhpcy52aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0KTtcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCk7XG5cbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLmRlc3Ryb3lBbGwoKTtcblxuICAgIC8vIGNhbGwgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMudWlkID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIG1hbmFnZXJzXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLm1hc2tNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gbnVsbDtcbiAgICB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLnVzZVByb2dyYW0obnVsbCk7XG4gICAgdGhpcy5nbCA9IG51bGw7XG59O1xuXG4iLCJ2YXIgRGVmYXVsdFNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgUElYSSBmaWx0ZXIuIEN1cnJlbnRseSBvbmx5IFdlYkdMIHN1cHBvcnRzIGZpbHRlcnMuXG4gKiBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIGZpbHRlciB0aGlzIHNob3VsZCBiZSB5b3VyIGJhc2UgY2xhc3MuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHZlcnRleFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdmVydGV4IHNoYWRlciBzb3VyY2UgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBmcmFnbWVudFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIHVuaWZvcm1zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1bmlmb3JtcyBmb3IgdGhpcyBmaWx0ZXIuXG4gKi9cbmZ1bmN0aW9uIEFic3RyYWN0RmlsdGVyKHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zKVxue1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygc2hhZGVyc1xuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlcnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHRyYSBwYWRkaW5nIHRoYXQgdGhlIGZpbHRlciBtaWdodCBuZWVkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIHZlcnRleCBzaGFkZXJcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmdbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmVydGV4U3JjID0gdmVydGV4U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIG9mIHRoZSBmcmFtZW50IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgLy9UT0RPIGEgcmVtaW5kZXIgLSB3b3VsZCBiZSBjb29sIHRvIGhhdmUgbG93ZXIgcmVzIGZpbHRlcnMgYXMgdGhpcyB3b3VsZCBnaXZlIGJldHRlciBwZXJmb3JtYW5jZS5cblxuICAgIC8vdHlwZW9mIGZyYWdtZW50U3JjID09PSAnc3RyaW5nJyA/IGZyYWdtZW50U3JjLnNwbGl0KCcnKSA6IChmcmFnbWVudFNyYyB8fCBbXSk7XG5cbn1cblxuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RmlsdGVyO1xuXG4vKipcbiAqIEdyYWJzIGEgc2hhZGVyIGZyb20gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBzaGFkZXIgZnJvbVxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuZ2V0U2hhZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyc1tnbC5pZF07XG5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IG5ldyBEZWZhdWx0U2hhZGVyKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIsXG4gICAgICAgICAgICB0aGlzLnZlcnRleFNyYyxcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRTcmMsXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaGFkZXJzW2dsLmlkXSA9IHNoYWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbn07XG5cbi8qKlxuICogU3luY3MgYSB1bmlmb3JtIGJldHdlZW4gdGhlIGNsYXNzIG9iamVjdCBhbmQgdGhlIHNoYWRlcnMuXG4gKlxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuc2hhZGVycy5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnNoYWRlcnNbaV0uc3luY1VuaWZvcm0odW5pZm9ybSk7XG4gICAgfVxufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKlxuICogQmFzaWMgRlhBQSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgY29kZSBvbiBnZWVrczNkLmNvbSB3aXRoIHRoZVxuICogbW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXG4gKiB1bnN1cHBvcnRlZCBieSBXZWJHTC5cbiAqXG4gKiAtLVxuICogRnJvbTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICpcbiAqL1xuZnVuY3Rpb24gRlhBQUZpbHRlcigpXG57XG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxuXFxudm9pZCB0ZXhjb29yZHModmVjMiBmcmFnQ29vcmQsIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk5XLCBvdXQgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiU1csIG91dCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzIgaW52ZXJzZVZQID0gMS4wIC8gcmVzb2x1dGlvbi54eTtcXG4gICAgdl9yZ2JOVyA9IChmcmFnQ29vcmQgKyB2ZWMyKC0xLjAsIC0xLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JORSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYlNXID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU0UgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIDEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk0gPSB2ZWMyKGZyYWdDb29yZCAqIGludmVyc2VWUCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbiAgIHZSZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcXG5cXG4gICAvL2NvbXB1dGUgdGhlIHRleHR1cmUgY29vcmRzIGFuZCBzZW5kIHRoZW0gdG8gdmFyeWluZ3NcXG4gICB0ZXhjb29yZHMoYVRleHR1cmVDb29yZCAqIHJlc29sdXRpb24sIHJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG5cXG4vKipcXG5CYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXFxubW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXFxudW5zdXBwb3J0ZWQgYnkgV2ViR0wuXFxuXFxuLS1cXG5cXG5Gcm9tOlxcbmh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XFxuXFxuQ29weXJpZ2h0IChjKSAyMDExIGJ5IEFybWluIFJvbmFjaGVyLlxcblxcblNvbWUgcmlnaHRzIHJlc2VydmVkLlxcblxcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcXG5tZXQ6XFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcXG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxcbiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXFxuICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXFxuICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxcblxcbiAgICAqIFRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yXFxuICAgICAgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljXFxuICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxcblxcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcXG5cXFwiQVMgSVNcXFwiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxcbkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXFxuT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXFxuU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxcblRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxcbiovXFxuXFxuI2lmbmRlZiBGWEFBX1JFRFVDRV9NSU5cXG4gICAgI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gICAoMS4wLyAxMjguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01VTFxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAgICgxLjAgLyA4LjApXFxuI2VuZGlmXFxuI2lmbmRlZiBGWEFBX1NQQU5fTUFYXFxuICAgICNkZWZpbmUgRlhBQV9TUEFOX01BWCAgICAgOC4wXFxuI2VuZGlmXFxuXFxuLy9vcHRpbWl6ZWQgdmVyc2lvbiBmb3IgbW9iaWxlLCB3aGVyZSBkZXBlbmRlbnRcXG4vL3RleHR1cmUgcmVhZHMgY2FuIGJlIGEgYm90dGxlbmVja1xcbnZlYzQgZnhhYShzYW1wbGVyMkQgdGV4LCB2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JOVywgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JTVywgdmVjMiB2X3JnYlNFLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzQgY29sb3I7XFxuICAgIG1lZGl1bXAgdmVjMiBpbnZlcnNlVlAgPSB2ZWMyKDEuMCAvIHJlc29sdXRpb24ueCwgMS4wIC8gcmVzb2x1dGlvbi55KTtcXG4gICAgdmVjMyByZ2JOVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTlcpLnh5ejtcXG4gICAgdmVjMyByZ2JORSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTkUpLnh5ejtcXG4gICAgdmVjMyByZ2JTVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU1cpLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU0UpLnh5ejtcXG4gICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTSk7XFxuICAgIHZlYzMgcmdiTSAgPSB0ZXhDb2xvci54eXo7XFxuICAgIHZlYzMgbHVtYSA9IHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdChyZ2JOVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFORSA9IGRvdChyZ2JORSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTVyA9IGRvdChyZ2JTVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdChyZ2JTRSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNICA9IGRvdChyZ2JNLCAgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNaW4gPSBtaW4obHVtYU0sIG1pbihtaW4obHVtYU5XLCBsdW1hTkUpLCBtaW4obHVtYVNXLCBsdW1hU0UpKSk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgobHVtYU0sIG1heChtYXgobHVtYU5XLCBsdW1hTkUpLCBtYXgobHVtYVNXLCBsdW1hU0UpKSk7XFxuXFxuICAgIG1lZGl1bXAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcblxcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoKGx1bWFOVyArIGx1bWFORSArIGx1bWFTVyArIGx1bWFTRSkgKlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwpLCBGWEFBX1JFRFVDRV9NSU4pO1xcblxcbiAgICBmbG9hdCByY3BEaXJNaW4gPSAxLjAgLyAobWluKGFicyhkaXIueCksIGFicyhkaXIueSkpICsgZGlyUmVkdWNlKTtcXG4gICAgZGlyID0gbWluKHZlYzIoRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBtYXgodmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiBpbnZlcnNlVlA7XFxuXFxuICAgIHZlYzMgcmdiQSA9IDAuNSAqIChcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqICgxLjAgLyAzLjAgLSAwLjUpKS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDIuMCAvIDMuMCAtIDAuNSkpLnh5eik7XFxuICAgIHZlYzMgcmdiQiA9IHJnYkEgKiAwLjUgKyAwLjI1ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogLTAuNSkueHl6ICtcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqIDAuNSkueHl6KTtcXG5cXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QocmdiQiwgbHVtYSk7XFxuICAgIGlmICgobHVtYUIgPCBsdW1hTWluKSB8fCAobHVtYUIgPiBsdW1hTWF4KSlcXG4gICAgICAgIGNvbG9yID0gdmVjNChyZ2JBLCB0ZXhDb2xvci5hKTtcXG4gICAgZWxzZVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkIsIHRleENvbG9yLmEpO1xcbiAgICByZXR1cm4gY29sb3I7XFxufVxcblxcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBmeGFhKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICogdlJlc29sdXRpb24sIHZSZXNvbHV0aW9uLCB2X3JnYk5XLCB2X3JnYk5FLCB2X3JnYlNXLCB2X3JnYlNFLCB2X3JnYk0pO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxufVxuXG5GWEFBRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkZYQUFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRlhBQUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRlhBQUZpbHRlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICovXG5GWEFBRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIoIHJlbmRlcmVyICk7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG4iLCJ2YXIgQWJzdHJhY3RGaWx0ZXIgPSByZXF1aXJlKCcuL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgU3ByaXRlTWFza0ZpbHRlciBjbGFzc1xuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICovXG5mdW5jdGlvbiBTcHJpdGVNYXNrRmlsdGVyKHNwcml0ZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXNrQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICAgdk1hc2tDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIC8vIGNoZWNrIGNsaXAhIHRoaXMgd2lsbCBzdG9wIHRoZSBtYXNrIGJsZWVkaW5nIG91dCBmcm9tIHRoZSBlZGdlc1xcbiAgICB2ZWMyIHRleHQgPSBhYnMoIHZNYXNrQ29vcmQgLSAwLjUgKTtcXG4gICAgdGV4dCA9IHN0ZXAoMC41LCB0ZXh0KTtcXG4gICAgZmxvYXQgY2xpcCA9IDEuMCAtIG1heCh0ZXh0LnksIHRleHQueCk7XFxuICAgIHZlYzQgb3JpZ2luYWwgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgICB2ZWM0IG1hc2t5ID0gdGV4dHVyZTJEKG1hc2ssIHZNYXNrQ29vcmQpO1xcbiAgICBvcmlnaW5hbCAqPSAobWFza3kuciAqIG1hc2t5LmEgKiBhbHBoYSAqIGNsaXApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBvcmlnaW5hbDtcXG59XFxuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hc2s6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLl90ZXh0dXJlIH0sXG4gICAgICAgICAgICBhbHBoYTogICAgICAgICAgeyB0eXBlOiAnZicsIHZhbHVlOiAxfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG59XG5cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVNYXNrRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVNYXNrRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS5fdGV4dHVyZTtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS53b3JsZEFscGhhO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHVzZWQgdG8gbW92ZSB0aGUgZGlzcGxhY2VtZW50IG1hcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlTWFza0ZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHbE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQmxlbmRNb2RlTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59XG5cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmRNb2RlTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxlbmRNb2RlTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzLXVwIHRoZSBnaXZlbiBibGVuZE1vZGUgZnJvbSBXZWJHTCdzIHBvaW50IG9mIHZpZXcuXG4gKlxuICogQHBhcmFtIGJsZW5kTW9kZSB7bnVtYmVyfSB0aGUgYmxlbmRNb2RlLCBzaG91bGQgYmUgYSBQaXhpIGNvbnN0LCBzdWNoIGFzIGBQSVhJLkJMRU5EX01PREVTLkFERGAuIFNlZVxuICogIHtAbGluayBQSVhJLkJMRU5EX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICovXG5CbGVuZE1vZGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRCbGVuZE1vZGUgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPT09IGJsZW5kTW9kZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMucmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmN1cnJlbnRCbGVuZE1vZGVdO1xuICAgIHRoaXMucmVuZGVyZXIuZ2wuYmxlbmRGdW5jKG1vZGVbMF0sIG1vZGVbMV0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpLFxuICAgIFF1YWQgPSByZXF1aXJlKCcuLi91dGlscy9RdWFkJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gRmlsdGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW107XG5cbiAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICByZW5kZXJUYXJnZXQ6cmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldCxcbiAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICBib3VuZHM6bnVsbFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgLy8gbGlzdGVuIGZvciBjb250ZXh0IGFuZCB1cGRhdGUgbmVjZXNzYXJ5IGJ1ZmZlcnNcbiAgICAvL1RPRE8gbWFrZSB0aGlzIGR5bmFtaWMhXG4gICAgLy9UT0RPIHRlc3QgdGhpcyBvdXQgYnkgZm9yY2VzIHBvd2VyIG9mIHR3bz9cbiAgICB0aGlzLnRleHR1cmVTaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZnJhbWVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcbn1cblxuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWx0ZXJNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBGaWx0ZXJNYW5hZ2VyO1xuXG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnF1YWQgPSBuZXcgUXVhZChnbCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHBhcmFtIGJ1ZmZlciB7QXJyYXlCdWZmZXJ9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnNldEZpbHRlclN0YWNrID0gZnVuY3Rpb24gKCBmaWx0ZXJTdGFjayApXG57XG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IGZpbHRlclN0YWNrO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXIgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBmaWx0ZXJzIHtQSVhJLkFic3RyYWN0RmlsZXJbXX0gdGhlIGZpbHRlcnMgdGhhdCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2tcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucHVzaEZpbHRlciA9IGZ1bmN0aW9uICh0YXJnZXQsIGZpbHRlcnMpXG57XG4gICAgLy8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdC4uXG4gICAgLy8gVE9ETyByZXBsYWNlIGNsb25lIHdpdGggYSBjb3B5IHRvIHNhdmUgb2JqZWN0IGNyZWF0aW9uXG4gICAgdmFyIGJvdW5kcyA9IHRhcmdldC5maWx0ZXJBcmVhID8gdGFyZ2V0LmZpbHRlckFyZWEuY2xvbmUoKSA6IHRhcmdldC5nZXRCb3VuZHMoKTtcblxuICAgIC8vYm91bmRzID0gYm91bmRzLmNsb25lKCk7XG5cbiAgICAvLyByb3VuZCBvZmYgdGhlIHJlY3RhbmdsZSB0byBnZXQgYSBuaWNlIHNtb29vb29vb3RoIGZpbHRlciA6KVxuICAgIGJvdW5kcy54ID0gYm91bmRzLnggfCAwO1xuICAgIGJvdW5kcy55ID0gYm91bmRzLnkgfCAwO1xuICAgIGJvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCB8IDA7XG4gICAgYm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgfCAwO1xuXG5cbiAgICAvLyBwYWRkaW5nIVxuICAgIHZhciBwYWRkaW5nID0gZmlsdGVyc1swXS5wYWRkaW5nIHwgMDtcbiAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG5cblxuICAgIGlmKHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvL1RPRE8gdGhpcyB3aWxsIGJyZWFrIGlmIHRoZSByZW5kZXJUZXh0dXJlIHRyYW5zZm9ybSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgdHJhbnNsYXRpb24uXG4gICAgICAgIC8vV2lsbCBuZWVkIHRvIHRha2UgdGhlIGZ1bGwgbWF0cml4IHRyYW5zZm9ybSBpbnRvIGFjb3VudC4uXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQudHJhbnNmb3JtO1xuXG4gICAgICAgIGJvdW5kcy54ICs9IHRyYW5zZm9ybS50eDtcbiAgICAgICAgYm91bmRzLnkgKz0gdHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG5cbiAgICAgICAgYm91bmRzLnggLT0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSAtPSB0cmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgICB0aGlzLmNhcEZpbHRlckFyZWEoIGJvdW5kcyApO1xuICAgIH1cblxuICAgIGlmKGJvdW5kcy53aWR0aCA+IDAgJiYgYm91bmRzLmhlaWdodCA+IDApXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGJvdW5kcztcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGV4dHVyZSk7XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRleHR1cmUuLlxuICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gVE9ETyBnZXQgcmlkIG9mIG9iamVjdCBjcmVhdGlvbiFcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogdGV4dHVyZSxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBwdXNoIHNvbXRoaW5nIG9uIHRvIHRoZSBzdGFjayB0aGF0IGlzIGVtcHR5XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcnNcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnBvcEZpbHRlciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrLnBvcCgpO1xuICAgIHZhciBwcmV2aW91c0ZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrW3RoaXMuZmlsdGVyU3RhY2subGVuZ3RoLTFdO1xuXG4gICAgdmFyIGlucHV0ID0gZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyBpZiB0aGUgcmVuZGVyVGFyZ2V0IGlzIG51bGwgdGhlbiB3ZSBkb24ndCBhcHBseSB0aGUgZmlsdGVyIGFzIGl0cyBvZmZzY3JlZW5cbiAgICBpZighZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IHByZXZpb3VzRmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyB1c2UgcHJvZ3JhbVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaW5wdXQuZnJhbWU7XG5cbiAgICB0aGlzLnF1YWQubWFwKHRoaXMudGV4dHVyZVNpemUsIGlucHV0LmZyYW1lKTtcblxuXG4gICAgLy8gVE9ETy4uIHRoaXMgcHJvYmFibHkgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgZmlsdGVycyA9IGZpbHRlckRhdGEuZmlsdGVyO1xuXG4gICAgLy8gYXNzdW1pbmcgYWxsIGZpbHRlcnMgZm9sbG93IHRoZSBjb3JyZWN0IGZvcm1hdD8/XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAyICogNCAqIDQpO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIG5vcm1hbCBibGVuZG1vZGUhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShDT05TVC5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAxKVxuICAgIHtcbiAgICAgICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoZW4gc2V0dGluZyB0aGlzIGVhY2ggdGltZT9cbiAgICAgICAgaWYgKGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgIGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1swXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgaW5wdXQsIG91dHB1dCApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggaW5wdXQgKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZmxpcFRleHR1cmUgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3BUZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aC0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICAgICAgaWYgKGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBmbG9wVGV4dHVyZSApO1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGZsaXBUZXh0dXJlO1xuICAgICAgICAgICAgZmxpcFRleHR1cmUgPSBmbG9wVGV4dHVyZTtcbiAgICAgICAgICAgIGZsb3BUZXh0dXJlID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlcnNbZmlsdGVycy5sZW5ndGgtMV0uYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBvdXRwdXQgKTtcblxuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxpcFRleHR1cmUgKTtcbiAgICAgICAgdGhpcy5yZXR1cm5SZW5kZXJUYXJnZXQoIGZsb3BUZXh0dXJlICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckRhdGEuZmlsdGVyO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY2xlYXIgdGhlIFJlbmRlclRhcmdldFxuICogQHJldHVybiB7UmVuZGVyVGFyZ2V0fVxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIGNsZWFyIClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy50ZXh0dXJlUG9vbC5wb3AoKSB8fCBuZXcgUmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyZXIuZ2wsIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0LCBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiAqIENPTlNULkZJTFRFUl9SRVNPTFVUSU9OKTtcbiAgICByZW5kZXJUYXJnZXQuZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcih0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyVGFyZ2V0O1xufTtcblxuLypcbiAqIFJldHVybnMgYSBSZW5kZXJUYXJnZXQgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1JlbmRlclRhcmdldH0gVGhlIFJlbmRlclRhcmdldCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5SZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0KVxue1xuICAgIHRoaXMudGV4dHVyZVBvb2wucHVzaCggcmVuZGVyVGFyZ2V0ICk7XG59O1xuXG4vKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2hhZGVyIHtTaGFkZXJ9IFRoZSBzaGFkZXIgdG8gdXBsb2FkXG4gKiBAcGFyYW0gaW5wdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBjbGVhciB0aGUgb3V0cHV0VGFyZ2V0XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHNoYWRlciwgaW5wdXRUYXJnZXQsIG91dHB1dFRhcmdldCwgY2xlYXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG91dHB1dFRhcmdldCk7XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICBvdXRwdXRUYXJnZXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHNoYWRlclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gQ2FuIHRoaXMgYmUgY2FjaGVkIGFuZCBub3QgYHRvQXJyYXlgZWQgZWFjaCBmcmFtZT9cbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG5cbiAgICAvL1RPRE8gY2FuIHRoaXMgYmUgb3B0aW1pc2VkP1xuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcbi8qXG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcbiovXG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBpbnB1dFRhcmdldC50ZXh0dXJlKTtcblxuICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbn07XG5cbi8qXG4gKiBDYWxjdWxhdGVzIHRoZSBtYXBwZWQgbWF0cml4XG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWFcbiAqIEBwYXJhbSBzcHJpdGUge1Nwcml0ZX0gdGhlIHRhcmdldCBzcHJpdGVcbiAqIEBwYXJhbSBvdXRwdXRNYXRyaXgge01hdHJpeH0gQGFsdmluXG4gKi9cbi8vIFRPRE8gcGxheWluZyBhcm91bmQgaGVyZS4uIHRoaXMgaXMgdGVtcG9yYXJ5IC0gKHdpbGwgZW5kIHVwIGluIHRoZSBzaGFkZXIpXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jYWxjdWxhdGVNYXBwZWRNYXRyaXggPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSwgc3ByaXRlLCBvdXRwdXRNYXRyaXgpXG57XG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gc3ByaXRlLndvcmxkVHJhbnNmb3JtLmNvcHkobWF0aC5NYXRyaXguVEVNUF9NQVRSSVgpLFxuICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICB2YXIgbWFwcGVkTWF0cml4ID0gb3V0cHV0TWF0cml4LmlkZW50aXR5KCk7XG5cbiAgICAvLyBzY2FsZS4uXG4gICAgdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCApO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKDEgLCByYXRpbyk7XG5cbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyB0ZXh0dXJlLndpZHRoKTtcbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gdGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0udHggLz0gdGV4dHVyZS53aWR0aCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICB3b3JsZFRyYW5zZm9ybS50eSAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0uaW52ZXJ0KCk7XG5cbiAgICBtYXBwZWRNYXRyaXgucHJlcGVuZCh3b3JsZFRyYW5zZm9ybSk7XG5cbiAgICAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIG1hcHBlZE1hdHJpeC50cmFuc2xhdGUoc3ByaXRlLmFuY2hvci54LCBzcHJpdGUuYW5jaG9yLnkpO1xuXG4gICAgcmV0dXJuIG1hcHBlZE1hdHJpeDtcblxuICAgIC8vIEtlZXBpbmcgdGhlIG9yZ2luYWwgYXMgYSByZW1pbmRlciB0byBtZSBvbiBob3cgdGhpcyB3b3JrcyFcbiAgICAvL1xuICAgIC8vIHZhciBtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvLyAvLyBzY2FsZS4uXG4gICAgLy8gdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgLy8gbS50cmFuc2xhdGUoZmlsdGVyQXJlYS54IC8gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgZmlsdGVyQXJlYS55IC8gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQpO1xuXG5cbiAgICAvLyBtLnNjYWxlKDEgLCByYXRpbyk7XG5cblxuICAgIC8vIHZhciB0cmFuc2Zvcm0gPSB3dC5jbG9uZSgpO1xuXG4gICAgLy8gdmFyIHRyYW5zbGF0ZVNjYWxlWCA9ICh0aGlzLnRleHR1cmVTaXplLndpZHRoIC8gNjIwKTtcbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gMzgwKTtcblxuICAgIC8vIHRyYW5zZm9ybS50eCAvPSA2MjAgKiB0cmFuc2xhdGVTY2FsZVg7XG4gICAgLy8gdHJhbnNmb3JtLnR5IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcblxuICAgIC8vIHRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIC8vIHRyYW5zZm9ybS5hcHBlbmQobSk7XG5cbiAgICAvLyAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgLy8gdHJhbnNmb3JtLnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIC8vIHJldHVybiB0cmFuc2Zvcm07XG59O1xuXG4vKlxuICogQ29uc3RyYWlucyB0aGUgZmlsdGVyIGFyZWEgdG8gdGhlIHRleHR1cmUgc2l6ZVxuICogQHBhcmFtIGZpbHRlckFyZWEge1JlY3RhbmdsZX0gVGhlIGZpbHRlciBhcmVhIHdlIHdhbnQgdG8gY2FwXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhcEZpbHRlckFyZWEgPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSlcbntcbiAgICBpZiAoZmlsdGVyQXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEud2lkdGggKz0gZmlsdGVyQXJlYS54O1xuICAgICAgICBmaWx0ZXJBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgKz0gZmlsdGVyQXJlYS55O1xuICAgICAgICBmaWx0ZXJBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggZmlsdGVyQXJlYS54ICsgZmlsdGVyQXJlYS53aWR0aCA+IHRoaXMudGV4dHVyZVNpemUud2lkdGggKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCA9IHRoaXMudGV4dHVyZVNpemUud2lkdGggLSBmaWx0ZXJBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnkgKyBmaWx0ZXJBcmVhLmhlaWdodCA+IHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLSBmaWx0ZXJBcmVhLnk7XG4gICAgfVxufTtcblxuLypcbiAqIFJlc2l6ZXMgYWxsIHRoZSByZW5kZXIgdGFyZ2V0cyBpbiB0aGUgcG9vbFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLnRleHR1cmVTaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLnJlc2l6ZSggd2lkdGgsIGhlaWdodCApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGZpbHRlciBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBmaWx0ZXIgc3RhY2suXG4gKlxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnF1YWQuZGVzdHJveSgpO1xuICAgIFxuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBudWxsO1xuICAgIHRoaXMub2Zmc2V0WSA9IDA7XG5cbiAgICAvLyBkZXN0cm95IHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHR1cmVQb29sLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlUG9vbCA9IG51bGw7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgQWxwaGFNYXNrRmlsdGVyID0gcmVxdWlyZSgnLi4vZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNYXNrTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICB0aGlzLmFscGhhTWFza1Bvb2wgPSBbXTtcbn1cblxuTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hc2tNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgaWYgKG1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBtYXNrIGZyb20gdGhlIG1hc2sgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucG9wU3ByaXRlTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTcHJpdGVNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdmFyIGFscGhhTWFza0ZpbHRlciA9IHRoaXMuYWxwaGFNYXNrUG9vbC5wb3AoKTtcblxuICAgIGlmICghYWxwaGFNYXNrRmlsdGVyKVxuICAgIHtcbiAgICAgICAgYWxwaGFNYXNrRmlsdGVyID0gW25ldyBBbHBoYU1hc2tGaWx0ZXIobWFza0RhdGEpXTtcbiAgICB9XG5cbiAgICBhbHBoYU1hc2tGaWx0ZXJbMF0ubWFza1Nwcml0ZSA9IG1hc2tEYXRhO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRhcmdldCwgYWxwaGFNYXNrRmlsdGVyKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKi9cbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTcHJpdGVNYXNrID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVycyA9IHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbC5wdXNoKGZpbHRlcnMpO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTdGVuY2lsTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaE1hc2sobWFza0RhdGEpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BNYXNrKG1hc2tEYXRhKTtcbn07XG5cbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1RleHR1cmVTaGFkZXInKSxcbiAgICBDb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhBdHRpYnMgPSAxMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG5cbi8vICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcbn1cblxuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaGFkZXJNYW5hZ2VyO1xudXRpbHMucGx1Z2luVGFyZ2V0Lm1peGluKFNoYWRlck1hbmFnZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlck1hbmFnZXI7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cblNoYWRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlIGNvcnJlY3RseSBhcyB0aGlzIHRlbmRzIHRvIHZhcnlcbiAgICB0aGlzLm1heEF0dGlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xuXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1heEF0dGliczsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRPRE8gLSBXaHkgYXJlIHRoZXNlIG5vdCBwbHVnaW5zPyBXZSBjYW4ndCBkZWNvdXBsZSBwcmltaXRpdmVzIHVubGVzcyB0aGV5IGFyZS4uLi5cbiAgICB0aGlzLmRlZmF1bHRTaGFkZXIgPSBuZXcgVGV4dHVyZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcyk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbmV3IENvbXBsZXhQcmltaXRpdmVTaGFkZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFRha2VzIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHBhcmFtZXRlcnMgYW5kIHVwbG9hZHMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXR0cmlicyB7YW55W119IGF0dHJpYnNcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0QXR0cmlicyA9IGZ1bmN0aW9uIChhdHRyaWJzKVxue1xuICAgIC8vIHJlc2V0IHRlbXAgc3RhdGVcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRlbXBBdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAodmFyIGEgaW4gYXR0cmlicylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbYV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSAhPT0gdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHNoYWRlci5cbiAqXG4gKiBAcGFyYW0gc2hhZGVyIHtQSVhJLlNoYWRlcn0gdGhlIHNoYWRlciB0byB1cGxvYWRcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0U2hhZGVyID0gZnVuY3Rpb24gKHNoYWRlcilcbntcbiAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRJZCA9PT0gc2hhZGVyLnVpZClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50SWQgPSBzaGFkZXIudWlkO1xuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5nbC51c2VQcm9ncmFtKHNoYWRlci5wcm9ncmFtKTtcbiAgICB0aGlzLnNldEF0dHJpYnMoc2hhZGVyLmF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0LlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBXZWJHTE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBudWxsO1xufVxuXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFza01hbmFnZXI7XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgbWFzayBzdGFjayB0aGF0IGlzIHVzZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICpcbiAqIEBwYXJhbSBzdGVuY2lsTWFza1N0YWNrIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9IFRoZSBtYXNrIHN0YWNrXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnNldE1hc2tTdGFjayA9IGZ1bmN0aW9uICggc3RlbmNpbE1hc2tTdGFjayApXG57XG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBpZiAoc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLiBAYWx2aW5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWwgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQuYXR0YWNoU3RlbmNpbEJ1ZmZlcigpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICBpZiAoc21zLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgZ2wuY2xlYXIoZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTtcbiAgICAgICAgc21zLnJldmVyc2UgPSB0cnVlO1xuICAgICAgICBzbXMuY291bnQgPSAwO1xuICAgIH1cblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucHVzaCh3ZWJHTERhdGEpO1xuXG4gICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5WRVJUKTtcblxuICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgIGlmIChzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgIH1cblxuICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSBsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLktFRVApO1xuXG4gICAgc21zLmNvdW50Kys7XG59O1xuXG4vKipcbiAqIFRPRE8gdGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSFcbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuYmluZEdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgLy9pZiAodGhpcy5fY3VycmVudEdyYXBoaWNzID09PSBncmFwaGljcylyZXR1cm47XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBiaW5kIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0zZnYoc2hhZGVyLnVuaWZvcm1zLmNvbG9yLl9sb2NhdGlvbiwgd2ViR0xEYXRhLmNvbG9yKTtcblxuICAgICAgICBnbC51bmlmb3JtMWYoc2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSk7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDQgKiAyLCAwKTtcblxuICAgICAgICAvLyBub3cgZG8gdGhlIHJlc3QuLlxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAqL1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvL3RoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5hY3RpdmF0ZVByaW1pdGl2ZVNoYWRlcigpO1xuLy8gICAgICAgIHNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wcmltaXRpdmVTaGFkZXI7XG4gICAgICAgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG5cbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuLy8gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuXG4gICAgICAvKiAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7Ki9cbiAgICB9XG59O1xuXG4vKipcbiAqIFRPRE8gQGFsdmluXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIHNtcyA9IHRoaXMuc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucG9wKCk7XG5cbiAgICBzbXMuY291bnQtLTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIC8vIHRoZSBzdGFjayBpcyBlbXB0eSFcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgICAgIHRoaXMuYmluZEdyYXBoaWNzKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcblxuICAgICAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRyYXcgYSBxdWFkIHRvIGluY3JlbWVudC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgICAgICAgICAvLyBkcmF3IHRoZSB0cmlhbmdsZSBzdHJpcCFcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCArPSAyO1xuXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKSwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgLy8gIGNvbnNvbGUubG9nKFwiPDw+PlwiKVxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIChsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cblxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIG1hc2sgc3RhY2suXG4gKlxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2sgPSBudWxsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfSBUaGUgbWFzayBkYXRhIHN0cnVjdHVyZSB0byB1c2VcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIFxuICAgIC8vVE9ETyBGSVhcbiAgICBpZiAobWFza0RhdGEuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MudXBkYXRlR3JhcGhpY3MobWFza0RhdGEsIHRoaXMucmVuZGVyZXIuZ2wpO1xuICAgIH1cblxuICAgIGlmICghbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFN0ZW5jaWwobWFza0RhdGEsIG1hc2tEYXRhLl93ZWJHTFt0aGlzLnJlbmRlcmVyLmdsLmlkXS5kYXRhWzBdKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIodGhpcy5yZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcblxuICAgIHRoaXMucG9wU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuIiwiLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLm9uKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xufVxuXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTE1hbmFnZXI7XG5cbi8qKlxuICogR2VuZXJpYyBtZXRob2QgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbldlYkdMTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblx0Ly8gZG8gc29tZSBjb2RlcyBpbml0IVxufTtcblxuLyoqXG4gKiBHZW5lcmljIGRlc3Ryb3kgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlbmRlcmVyLm9mZignY29udGV4dCcsIHRoaXMub25Db250ZXh0Q2hhbmdlLCB0aGlzKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCcuL1NoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBjb21wbGV4IHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQ29tcGxleFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyBjb2xvcjsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoY29sb3IgKiBhbHBoYSAqIHRpbnQsIGFscGhhKTsnLC8vXCIgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIGNvbG9yOiAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsMCwwXSB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB0aW50OiAgIHsgdHlwZTogJzNmJywgdmFsdWU6IFswLCAwLCAwXSB9LFxuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFDb2xvcjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQmFzZSBzaGFkZXIgY2xhc3MgZm9yIFBJWEkgbWFuYWdlZCBzaGFkZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbdW5pZm9ybXNdIHtvYmplY3R9IFVuaWZvcm1zIGZvciB0aGlzIHNoYWRlci5cbiAqIEBwYXJhbSBbYXR0cmlidXRlc10ge29iamVjdH0gQXR0cmlidXRlcyBmb3IgdGhpcyBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIFNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcylcbntcbiAgICBpZiAoIXZlcnRleFNyYyB8fCAhZnJhZ21lbnRTcmMpXG4gICAge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXhpLmpzIEVycm9yLiBTaGFkZXIgcmVxdWlyZXMgdmVydGV4U3JjIGFuZCBmcmFnbWVudFNyYycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5nbCA9IHNoYWRlck1hbmFnZXIucmVuZGVyZXIuZ2w7XG5cbiAgICAvL1RPRE8gbWF5YmUgd2Ugc2hvdWxkIHBhc3MgcmVuZGVyZXIgcmF0aGVyIHRoYW4gc2hhZGVyIG1hbmdlcj8/IGZvb2QgZm9yIHRob3VnaHQuLlxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IHNoYWRlck1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgcHJvZ3JhbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUHJvZ3JhbX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaWZvcm1zIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhdHRyaWJ1dGVzIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50ZXJcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlciBhcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmM7XG5cbiAgICB0aGlzLmluaXQoKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHNoYWRlciBhbmQgdXNlcyBpdFxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbXBpbGUoKTtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy51bmlmb3JtcykpO1xuICAgIHRoaXMuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKSk7XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSB1bmlmb3JtIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgdW5pZm9ybXMgdG8gY2FjaGVcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnVuaWZvcm1zW2tleXNbaV1dLl9sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWNoZXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgYXR0cmlidXRlIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgYXR0cmlidXRlcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlQXR0cmlidXRlTG9jYXRpb25zID0gZnVuY3Rpb24gKGtleXMpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleXNbaV1dID0gdGhpcy5nbC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGtleXNbaV0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgbmVlZGVkIGFueW1vcmUuLi5cblxuICAgIC8vIEJlZ2luIHdvcnN0IGhhY2sgZXZhIC8vXG5cbiAgICAvLyBXSFk/Pz8gT05MWSBvbiBteSBjaHJvbWUgcGl4ZWwgdGhlIGxpbmUgYWJvdmUgcmV0dXJucyAtMSB3aGVuIHVzaW5nIGZpbHRlcnM/XG4gICAgLy8gbWF5YmUgaXRzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnbCBjb250ZXh0LlxuICAgIC8vIEknbSBjb252aW5jZWQgdGhpcyBpcyBhIGJ1ZyBpbiB0aGUgY2hyb21lIGJyb3dzZXIgYXMgdGhlcmUgaXMgTk8gcmVhc29uIHdoeSB0aGlzIHNob3VsZCBiZSByZXR1cm5pbmcgLTEgZXNwZWNpYWxseSBhcyBpdCBvbmx5IG1hbmlmZXN0cyBvbiBteSBjaHJvbWUgcGl4ZWxcbiAgICAvLyBJZiB0aGVyZXMgYW55IHdlYkdMIHBlb3BsZSB0aGF0IGtub3cgd2h5IGNvdWxkIGhhcHBlbiBwbGVhc2UgaGVscCA6KVxuICAgIC8vIGlmICh0aGlzLmF0dHJpYnV0ZXMuYUNvbG9yID09PSAtMSl7XG4gICAgLy8gICAgIHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPSAyO1xuICAgIC8vIH1cblxuICAgIC8vIEVuZCB3b3JzdCBoYWNrIGV2YSAvL1xufTtcblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQgY3JlYXRlcyB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19XG4gKi9cblNoYWRlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHZhciBnbFZlcnRTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuVkVSVEVYX1NIQURFUiwgdGhpcy52ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuRlJBR01FTlRfU0hBREVSLCB0aGlzLmZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuICh0aGlzLnByb2dyYW0gPSBwcm9ncmFtKTtcbn07XG5cbi8qKlxuKiBBZGRzIGEgbmV3IHVuaWZvcm1cbipcbiogQHBhcmFtIHVuaWZvcm0ge29iamVjdH0gdGhlIG5ldyB1bmlmb3JtIHRvIGF0dGFjaFxuKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgbG9jYXRpb24gPSB1bmlmb3JtLl9sb2NhdGlvbixcbiAgICAgICAgdmFsdWUgPSB1bmlmb3JtLnZhbHVlLFxuICAgICAgICBnbCA9IHRoaXMuZ2wsXG4gICAgICAgIGksIGlsO1xuXG4gICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIHNpbmdsZSBpbnQgdmFsdWVcbiAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGZsb2F0IHZhbHVlXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBjYXNlICcxZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSgyKSBvciBKUyBBcnJyYXlcbiAgICAgICAgY2FzZSAnMmYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDMpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICczZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDQpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgMkQgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YyJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDNEIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2Myc6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSA0RCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjQnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMWl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMml2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnNGl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20yJzpcbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgIGNhc2UgJ01hdHJpeDJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB1bmlmb3JtLnRyYW5zcG9zZSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20zJzpcbiAgICAgICAgY2FzZSAnbWF0Myc6XG4gICAgICAgIGNhc2UgJ01hdHJpeDNmdic6XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICBjYXNlICdtYXQ0JzpcbiAgICAgICAgY2FzZSAnTWF0cml4NGZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIENvbG9yIFZhbHVlXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgaW50ZWdlcnMgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdjEnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAyRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yydic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgyICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAyXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDIgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYXJyYXkgb2YgM0QgUG9pbnQgb2JqZWN0c1xuICAgICAgICBjYXNlICd2M3YnOlxuICAgICAgICAgICAgaWYgKCF1bmlmb3JtLl9hcnJheSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMyAqIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlsID0gdmFsdWUubGVuZ3RoOyBpIDwgaWw7ICsraSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogM10gICAgICAgPSB2YWx1ZVtpXS54O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzICsgMV0gICA9IHZhbHVlW2ldLnk7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAyXSAgID0gdmFsdWVbaV0uejtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiA0RCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Y0dic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg0ICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0XSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDJdICAgPSB2YWx1ZVtpXS56O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgM10gICA9IHZhbHVlW2ldLnc7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gUElYSS5UZXh0dXJlXG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuXG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUgfHwgIXVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGlzIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xbJ1RFWFRVUkUnICsgdGhpcy50ZXh0dXJlQ291bnRdKTtcblxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXTtcblxuICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdGV4dHVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9uZS4uXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgICAgICAgICAgLy8gc2V0IHVuaWZvcm0gdG8gdGV4dHVyZSBpbmRleFxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0uX2xvY2F0aW9uLCB0aGlzLnRleHR1cmVDb3VudCk7XG5cbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBuZXh0IHRleHR1cmUgaWRcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgU2hhZGVyIFdhcm5pbmc6IFVua25vd24gdW5pZm9ybSB0eXBlOiAnICsgdW5pZm9ybS50eXBlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNoYWRlciB1bmlmb3JtIHZhbHVlcy5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm1zID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy51bmlmb3JtcylcbiAgICB7XG4gICAgICAgIHRoaXMuc3luY1VuaWZvcm0odGhpcy51bmlmb3Jtc1trZXldKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSW5pdGlhbGlzZXMgYSBTYW1wbGVyMkQgdW5pZm9ybSAod2hpY2ggbWF5IG9ubHkgYmUgYXZhaWxhYmxlIGxhdGVyIG9uIGFmdGVyIGluaXRVbmlmb3JtcyBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBsb2FkZWQpXG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXRTYW1wbGVyMkQgPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbiAgICBpZiAodW5pZm9ybS50ZXh0dXJlRGF0YSlcbiAgICB7XG5cbiAgICAgICAgLy9UT0RPIG1vdmUgdGhpcy4uLlxuICAgICAgICB2YXIgZGF0YSA9IHVuaWZvcm0udGV4dHVyZURhdGE7XG5cbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuXG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBsaWVkQWxwaGEpO1xuICAgICAgICAvLyBHTFRleHR1cmUgPSBtYWcgbGluZWFyLCBtaW4gbGluZWFyX21pcG1hcF9saW5lYXIsIHdyYXAgcmVwZWF0ICsgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIC8vIEdMVGV4dHVyZUxpbmVhciA9IG1hZy9taW4gbGluZWFyLCB3cmFwIGNsYW1wXG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3RSZXBlYXQgPSBtYWcvbWluIE5FQVJFU1QsIHdyYXAgcmVwZWF0XG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3QgPSBtYWcvbWluIG5lYXJlc3QsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gQXVkaW9UZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCA1MTIsIGhlaWdodCAyLCBib3JkZXIgMFxuICAgICAgICAvLyBLZXlUZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCAyNTYsIGhlaWdodCAyLCBib3JkZXIgMFxuXG4gICAgICAgIC8vICBtYWdGaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcbiAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxuXG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZGF0YS5sdW1pbmFuY2UgPyBnbC5MVU1JTkFOQ0UgOiBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLnNvdXJjZSk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGRhdGEubWFnRmlsdGVyID8gZGF0YS5tYWdGaWx0ZXIgOiBnbC5MSU5FQVIgKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSApO1xuXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGRhdGEud3JhcFQgPyBkYXRhLndyYXBUIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyTWFuYWdlci5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHNoYWRlci5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5nbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmdsID0gbnVsbDtcbiAgICB0aGlzLnVuaWZvcm1zID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSBudWxsO1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBudWxsO1xufTtcblxuU2hhZGVyLnByb3RvdHlwZS5fZ2xDb21waWxlID0gZnVuY3Rpb24gKHR5cGUsIHNyYylcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICB0aGlzLmdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgdGhpcy5nbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cbiAgICBpZiAoIXRoaXMuZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgdGhpcy5nbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCBjdXN0b21Vbmlmb3JtcywgY3VzdG9tQXR0cmlidXRlcylcbntcbiAgICB2YXIgdW5pZm9ybXMgPSB7XG5cbiAgICAgICAgdVNhbXBsZXI6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogMCB9LFxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxXSkgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVW5pZm9ybXMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciB1IGluIGN1c3RvbVVuaWZvcm1zKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bmlmb3Jtc1t1XSA9IGN1c3RvbVVuaWZvcm1zW3VdO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgYVZlcnRleFBvc2l0aW9uOiAgICAwLFxuICAgICAgICBhVGV4dHVyZUNvb3JkOiAgICAgIDAsXG4gICAgICAgIGFDb2xvcjogICAgICAgICAgICAgMFxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tQXR0cmlidXRlcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGEgaW4gY3VzdG9tQXR0cmlidXRlcylcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlc1thXSA9IGN1c3RvbUF0dHJpYnV0ZXNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYWdtZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IFRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgU2hhZGVyLmNhbGwodGhpcywgc2hhZGVyTWFuYWdlciwgdmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihnbClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7Ly8sIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKTtcblxufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi4vbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQmFzZSBmb3IgYSBjb21tb24gb2JqZWN0IHJlbmRlcmVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzeXN0ZW0gcmVuZGVyZXIgcGx1Z2luLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gT2JqZWN0UmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufVxuXG5cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYmplY3RSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0UmVuZGVyZXI7XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZW5kZXJlciBhbmQgc2V0cyB0aGUgc2hhZGVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIHNldCB0aGUgc2hhZGVyLi5cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHJlbmRlcmVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xufTtcblxuLyoqXG4gKiBmbHVzaGVzXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIGZsdXNoIVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gcmVuZGVyIHRoZSBvYmplY3Rcbn07XG4iLCIvKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSBxdWFkXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFRoZSBnbCBjb250ZXh0IGZvciB0aGlzIHF1YWQgdG8gdXNlLlxuICovXG5mdW5jdGlvbiBRdWFkKGdsKVxue1xuICAgIC8qXG4gICAgICogdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4vLyAgICB0aGlzLnRleHR1cmVzID0gbmV3IFRleHR1cmVVdnMoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAwLDAsXG4gICAgICAgIDIwMCwwLFxuICAgICAgICAyMDAsMjAwLFxuICAgICAgICAwLDIwMFxuICAgIF0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgcXVhZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMSwwLFxuICAgICAgICAxLDEsXG4gICAgICAgIDAsMVxuICAgIF0pO1xuXG4vLyAgICB2YXIgd2hpdGUgPSAoMHhGRkZGRkYgPj4gMTYpICsgKDB4RkZGRkZGICYgMHhmZjAwKSArICgoMHhGRkZGRkYgJiAweGZmKSA8PCAxNikgKyAoMSAqIDI1NSA8PCAyNCk7XG4gICAgLy9UT0RPIGNvbnZlcnQgdGhpcyB0byBhIDMyIHVuc2lnbmVkIGludCBhcnJheVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBjb21wb25lbnRzIG9mIHRoZSB0cmlhbmdsZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxXG4gICAgXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbXG4gICAgICAgIDAsIDEsIDIsIDAsIDMsIDJcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSB2ZXJ0ZXggYnVmZmVyXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSBpbmRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDggKyAxNikgKiA0LCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnVwbG9hZCgpO1xufVxuXG5RdWFkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFF1YWQ7XG5cbi8qKlxuICogTWFwcyB0d28gUmVjdGFuZ2xlIHRvIHRoZSBxdWFkXG4gKiBAcGFyYW0gcmVjdCB7UElYSS5SZWN0YW5nbGV9IHRoZSBmaXJzdCByZWN0YW5nbGVcbiAqIEBwYXJhbSByZWN0MiB7UElYSS5SZWN0YW5nbGV9IHRoZSBzZWNvbmQgcmVjdGFuZ2xlXG4gKi9cblF1YWQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKHJlY3QsIHJlY3QyKVxue1xuICAgIHZhciB4ID0gMDsgLy9yZWN0Mi54IC8gcmVjdC53aWR0aDtcbiAgICB2YXIgeSA9IDA7IC8vcmVjdDIueSAvIHJlY3QuaGVpZ2h0O1xuXG4gICAgdGhpcy51dnNbMF0gPSB4O1xuICAgIHRoaXMudXZzWzFdID0geTtcblxuICAgIHRoaXMudXZzWzJdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1szXSA9IHk7XG5cbiAgICB0aGlzLnV2c1s0XSA9IHggKyByZWN0Mi53aWR0aCAvIHJlY3Qud2lkdGg7XG4gICAgdGhpcy51dnNbNV0gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1s2XSA9IHg7XG4gICAgdGhpcy51dnNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICAvLy8gLS0tLS1cbiAgICB4ID0gcmVjdDIueDtcbiAgICB5ID0gcmVjdDIueTtcblxuICAgIHRoaXMudmVydGljZXNbMF0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbMV0gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1syXSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzNdID0geTtcblxuICAgIHRoaXMudmVydGljZXNbNF0gPSB4ICsgcmVjdDIud2lkdGg7XG4gICAgdGhpcy52ZXJ0aWNlc1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQ7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzZdID0geDtcbiAgICB0aGlzLnZlcnRpY2VzWzddID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXIgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuUXVhZC5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvLyBUT0RPIGNvdWxkIHByb2JhYmx5IGJlIHB1c2hlZCBpbnRvIG9uZSB1cGxvYWQhXG4gICAgZ2wuYmluZEJ1ZmZlciggZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlciApO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMudmVydGljZXMpO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDggKiA0LCB0aGlzLnV2cyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgKDggKyA4KSAqIDQsIHRoaXMuY29sb3JzKTtcbn07XG5cblF1YWQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xuXG5cbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgICAgIFxuICAgIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcbiAgICBHTEZyYW1lYnVmZmVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xGcmFtZWJ1ZmZlcixcbiAgICBcbiAgICBTdGVuY2lsTWFza1N0YWNrID0gcmVxdWlyZSgnLi9TdGVuY2lsTWFza1N0YWNrJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIGhvcml6b250YWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgdmVydGljYWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAqIEBwYXJhbSByb290IHtib29sZWFufSBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gKi9cbnZhciBSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uLCByb290KVxue1xuICAgIC8vVE9ETyBSZXNvbHV0aW9uIGNvdWxkIGdvIGhlcmUgKCBlZyBsb3cgcmVzIGJsdXJzIClcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvLyBuZXh0IHRpbWUgdG8gY3JlYXRlIGEgZnJhbWUgYnVmZmVyIGFuZCB0ZXh0dXJlXG5cbiAgICAvKipcbiAgICAgKiBBIGZyYW1lIGJ1ZmZlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xGcmFtZUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJDb2xvciA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBvYmplY3QgYXMgYSByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9iamVjdCdzIHRyYW5zZm9ybVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5mcmFtZSA9IG51bGw7XG4gICAgXG4gICAgdGhpcy5kZWZhdWx0RnJhbWUgPSBuZXcgUElYSS5SZWN0YW5nbGUoKTtcbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBudWxsO1xuICAgIHRoaXMuc291cmNlRnJhbWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHN0ZW5jaWwgYnVmZmVyIHN0b3JlcyBtYXNraW5nIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlckJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgc3RlbmNpbCBtYXNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFza1N0YWNrfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG5ldyBTdGVuY2lsTWFza1N0YWNrKCk7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZXMgZmlsdGVyIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6dGhpcyxcbiAgICAgICAgICAgIGZpbHRlcjpbXSxcbiAgICAgICAgICAgIGJvdW5kczp0aGlzLnNpemVcbiAgICAgICAgfVxuICAgIF07XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVFxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gR0xGcmFtZWJ1ZmZlci5jcmVhdGVSR0JBKGdsLCAxMDAsIDEwMCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBBIGZyYW1lIGJ1ZmZlciBuZWVkcyBhIHRhcmdldCB0byByZW5kZXIgdG8uLlxuICAgICAgICAgICAgY3JlYXRlIGEgdGV4dHVyZSBhbmQgYmluZCBpdCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgICovXG4gICAgICAgIFxuXG4gICAgICAgLy8gVE9ETyBjaGFuZ2UhXG4gICAgICAgIC8vIHRoaXMgaXMgdXNlZCBieSB0aGUgYmFzZSB0ZXh0dXJlXG4gICAgICAgIHRoaXMudGV4dHVyZSA9IHRoaXMuZnJhbWVCdWZmZXIudGV4dHVyZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbWFrZSBpdCBhIG51bGwgZnJhbWVidWZmZXIuLlxuICAgICAgICB0aGlzLmZyYW1lQnVmZmVyLmZyYW1lYnVmZmVyID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn07XG5cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZW5kZXJUYXJnZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRhcmdldDtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpbHRlciB0ZXh0dXJlLlxuICpcbiAqIEBwYXJhbSBbYmluZD1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCB3ZSBiaW5kIG91ciBmcmFtZWJ1ZmZlciBiZWZvcmUgY2xlYXJpbmc/XG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbihjbGVhckNvbG9yKVxue1xuICAgIHZhciBjYyA9IGNsZWFyQ29sb3IgfHwgdGhpcy5jbGVhckNvbG9yXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5jbGVhcihjY1swXSxjY1sxXSxjY1syXSxjY1szXSkvL3IsZyxiLGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmF0dGFjaFN0ZW5jaWxCdWZmZXIgPSBmdW5jdGlvbigpXG57XG4gICAgLy9UT0RPIGNoZWNrIGlmIHN0ZW5jaWwgaXMgZG9uZT9cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgaXMgdXNlZCBmb3IgbWFza2luZyBpbiBwaXhpXG4gICAgICogbGV0cyBjcmVhdGUgb25lIGFuZCB0aGVuIGFkZCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgKi9cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZW5hYmxlU3RlbmNpbCgpO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXdwb3J0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIC8vVE9PRCByZWZhY3RvciB1c2FnZSBvZiBmcmFtZS4uXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIuYmluZCgpO1xuXG4gICAgdGhpcy5kZXN0aW5hdGlvbkZyYW1lID0gZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgfHwgdGhpcy5kZWZhdWx0RnJhbWU7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IHRoaXMuc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggdGhpcy5kZXN0aW5hdGlvbkZyYW1lLCB0aGlzLnNvdXJjZUZyYW1lICk7XG5cbiAgICBpZih0aGlzLnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5hcHBlbmQodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIGlmKHRoaXMuZGVzdGluYXRpb25GcmFtZSAhPT0gdGhpcy5zb3VyY2VGcmFtZSlcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgICAgICBnbC5zY2lzc29yKHRoaXMuZGVzdGluYXRpb25GcmFtZS54LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmRpc2FibGUoZ2wuU0NJU1NPUl9URVNUKTtcbiAgICB9XG5cblxuICAgIC8vIFRPRE8gLSBkb2VzIG5vdCBuZWVkIHRvIGJlIHVwZGF0ZWQgYWxsIHRoZSB0aW1lPz9cbiAgICBnbC52aWV3cG9ydCh0aGlzLmRlc3RpbmF0aW9uRnJhbWUueCx0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uKTtcblxuXG59O1xuXG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmFzZWQgb24gYSBwcm9qZWN0aW9uIGZyYW1lICh3aGljaCBpcyBhIHJlY3RhbmdsZSlcbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2FsY3VsYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbkZyYW1lLCBzb3VyY2VGcmFtZSlcbntcbiAgICB2YXIgcG0gPSB0aGlzLnByb2plY3Rpb25NYXRyaXg7XG5cbiAgICBzb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IGRlc3RpbmF0aW9uRnJhbWU7XG5cbiAgICBwbS5pZGVudGl0eSgpO1xuXG4gICAgLy8gVE9ETzogbWFrZSBkZXN0IHNjYWxlIHNvdXJjZVxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAxIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gLTEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAtMSAvIGRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0KjI7XG5cbiAgICAgICAgcG0udHggPSAtMSAtIHNvdXJjZUZyYW1lLnggKiBwbS5hO1xuICAgICAgICBwbS50eSA9IDEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVzaXplcyB0aGUgdGV4dHVyZSB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge051bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGhlaWdodCB7TnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgdGV4dHVyZVxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHdpZHRoID0gd2lkdGggfCAwO1xuICAgIGhlaWdodCA9IGhlaWdodCB8IDA7XG5cbiAgICBpZiAodGhpcy5zaXplLndpZHRoID09PSB3aWR0aCAmJiB0aGlzLnNpemUuaGVpZ2h0ID09PSBoZWlnaHQpIFxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2l6ZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuc2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICB0aGlzLmRlZmF1bHRGcmFtZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuZGVmYXVsdEZyYW1lLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIucmVzaXplKHdpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBoZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuICAgIFxuICAgIHZhciBwcm9qZWN0aW9uRnJhbWUgPSB0aGlzLmZyYW1lIHx8IHRoaXMuc2l6ZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSByZW5kZXIgdGFyZ2V0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIHRoaXMuZnJhbWVCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBTdGVuY2lsTWFza1N0YWNrKClcbntcblx0LyoqXG4gICAgICogVGhlIGFjdHVhbCBzdGFja1xuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsU3RhY2sgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQGFsdmluXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb3VudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY291bnQgPSAwO1xufVxuXG5TdGVuY2lsTWFza1N0YWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0ZW5jaWxNYXNrU3RhY2s7XG5tb2R1bGUuZXhwb3J0cyA9IFN0ZW5jaWxNYXNrU3RhY2s7XG4iLCJDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogTWFwcyBnbCBibGVuZCBjb21iaW5hdGlvbnMgdG8gV2ViR0xcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpKGdsLCBvYmplY3QpXG57XG4gICAgb2JqZWN0ID0gb2JqZWN0IHx8IHt9O1xuXG4gICAgLy9UT0RPIC0gcHJlbXVsdGlwbHkgYWxwaGEgd291bGQgYmUgZGlmZmVyZW50LlxuICAgIC8vYWRkIGEgYm9vbGVhbiBmb3IgdGhhdCFcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQUREXSAgICAgICAgICAgPSBbZ2wuU1JDX0FMUEhBLCBnbC5EU1RfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9IFtnbC5EU1RfQ09MT1IsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5TQ1JFRU5dICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLk9ORV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRBUktFTl0gICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0JVUk5dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRJRkZFUkVOQ0VdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aTtcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcblx0b2JqZWN0PSBvYmplY3QgfHwge307XG5cbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5QT0lOVFNdICAgICAgICAgPSBnbC5QT0lOVFM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORVNdICAgICAgICAgID0gZ2wuTElORVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9MT09QXSAgICAgID0gZ2wuTElORV9MT09QO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLkxJTkVfU1RSSVBdICAgICA9IGdsLkxJTkVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVTXSAgICAgID0gZ2wuVFJJQU5HTEVTO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXSA9IGdsLlRSSUFOR0xFX1NUUklQO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX0ZBTl0gICA9IGdsLlRSSUFOR0xFX0ZBTjtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBTcHJpdGUgb2JqZWN0IGlzIHRoZSBiYXNlIGZvciBhbGwgdGV4dHVyZWQgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCB0byB0aGUgc2NyZWVuXG4gKlxuICogQSBzcHJpdGUgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhbiBpbWFnZSBsaWtlIHRoaXM6XG4gKlxuICogYGBganNcbiAqIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgZm9yIHRoaXMgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZSh0ZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFuY2hvciBzZXRzIHRoZSBvcmlnaW4gcG9pbnQgb2YgdGhlIHRleHR1cmUuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgMCwwIHRoaXMgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0XG4gICAgICogU2V0dGluZyB0aGUgYW5jaG9yIHRvIDAuNSwwLjUgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgY2VudGVyZWRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMSwxIHdvdWxkIG1lYW4gdGhlIHRleHR1cmUncyBvcmlnaW4gcG9pbnQgd2lsbCBiZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmFuY2hvciA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUgKHRoaXMgaXMgaW5pdGlhbGx5IHNldCBieSB0aGUgdGV4dHVyZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQSB2YWx1ZSBvZiAweEZGRkZGRiB3aWxsIHJlbW92ZSBhbnkgdGludCBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2hhZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgc3ByaXRlLiBTZXQgdG8gbnVsbCB0byByZW1vdmUgYSBjdXJyZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJ8UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgY2FjaGVkIHZhbHVlIG9mIHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvLyBjYWxsIHRleHR1cmUgc2V0dGVyXG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBUZXh0dXJlLkVNUFRZO1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZVxuICAgIHRoaXMudmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblNwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLngpICogdGhpcy50ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzaWduID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLngpIHx8IDE7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBzaWduICogdmFsdWUgLyB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgTWF0aC5hYnModGhpcy5zY2FsZS55KSAqIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHByaXZhdGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBzbyBpZiBfd2lkdGggaXMgMCB0aGVuIHdpZHRoIHdhcyBub3Qgc2V0Li5cbiAgICBpZiAodGhpcy5fd2lkdGgpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnggPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgKiB0aGlzLl93aWR0aCAvIHRoaXMudGV4dHVyZS5mcmFtZS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zY2FsZS55ID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLnkpICogdGhpcy5faGVpZ2h0IC8gdGhpcy50ZXh0dXJlLmZyYW1lLmhlaWdodDtcbiAgICB9XG59O1xuXG5TcHJpdGUucHJvdG90eXBlLmNhY2x1bGF0ZVZlcnRpY2VzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgIHd0ID0gdGhpcy50cmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIGEgPSB3dC5hLCBiID0gd3QuYiwgYyA9IHd0LmMsIGQgPSB3dC5kLCB0eCA9IHd0LnR4LCB0eSA9IHd0LnR5LFxuICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhLFxuICAgICAgICB3MCwgdzEsIGgwLCBoMSxcbiAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcbiAgICAgICAgXG4gICAgaWYgKHRyaW0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgYW5kIGlzIG5vdCBhIHRpbGluZ3Nwcml0ZSB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgdzEgPSB0cmltLnggLSB0aGlzLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICBoMSA9IHRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcbiAgICB9XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMF0gPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzFdID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMl0gPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzNdID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzRdID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs1XSA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzZdID0gYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs3XSA9IGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG5cbn1cblxuLyoqXG4qXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy50cmFuc2Zvcm0udXBkYXRlZCB8fCB0aGlzLnRleHR1cmVEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZURpcnR5ID0gZmFsc2U7XG4gICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuICAgIH1cbiAgICBcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFNwcml0ZSBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcbiAgICAgICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5YLFxuICAgICAgICAgICAgbWF4WCxcbiAgICAgICAgICAgIG1pblksXG4gICAgICAgICAgICBtYXhZLFxuICAgICAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YTtcblxuICAgICAgICB2YXIgeDEgPSB2ZXJ0ZXhEYXRhWzBdXG4gICAgICAgIHZhciB5MSA9IHZlcnRleERhdGFbMV1cblxuICAgICAgICB2YXIgeDIgPSB2ZXJ0ZXhEYXRhWzJdXG4gICAgICAgIHZhciB5MiA9IHZlcnRleERhdGFbM11cblxuICAgICAgICB2YXIgeDMgPSB2ZXJ0ZXhEYXRhWzRdXG4gICAgICAgIHZhciB5MyA9IHZlcnRleERhdGFbNV1cblxuICAgICAgICB2YXIgeDQgPSB2ZXJ0ZXhEYXRhWzZdXG4gICAgICAgIHZhciB5NCA9IHZlcnRleERhdGFbN11cblxuICAgICAgICBtaW5YID0geDE7XG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkxO1xuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MTtcbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTE7XG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoaWxkcmVuXG4gICAgICAgIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGRCb3VuZHMgPSB0aGlzLmNvbnRhaW5lckdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICB3MCA9IGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICB3MSA9IGNoaWxkQm91bmRzLnggKyBjaGlsZEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGgwID0gY2hpbGRCb3VuZHMueTtcbiAgICAgICAgICAgIGgxID0gY2hpbGRCb3VuZHMueSArIGNoaWxkQm91bmRzLmhlaWdodDtcblxuICAgICAgICAgICAgbWluWCA9IChtaW5YIDwgdzApID8gbWluWCA6IHcwO1xuICAgICAgICAgICAgbWluWSA9IChtaW5ZIDwgaDApID8gbWluWSA6IGgwO1xuXG4gICAgICAgICAgICBtYXhYID0gKG1heFggPiB3MSkgPyBtYXhYIDogdzE7XG4gICAgICAgICAgICBtYXhZID0gKG1heFkgPiBoMSkgPyBtYXhZIDogaDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fYm91bmRzLnggPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHRoaXMuX2JvdW5kcy55ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG4gICAgdGhpcy5fYm91bmRzLndpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICByZXR1cm4gdGhpcy5fYm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgc3ByaXRlXG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cblNwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLnRleHR1cmUuY3JvcC53aWR0aCA8PSAwIHx8IHRoaXMudGV4dHVyZS5jcm9wLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vICBJZ25vcmUgbnVsbCBzb3VyY2VzXG4gICAgaWYgKHRoaXMudGV4dHVyZS52YWxpZClcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgICAgIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgIGR4LFxuICAgICAgICAgICAgZHksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDtcblxuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgICAgIC8vIElmIHNtb290aGluZ0VuYWJsZWQgaXMgc3VwcG9ydGVkIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgc21vb3RoaW5nIHByb3BlcnR5IGZvciB0aGlzIHRleHR1cmVcbiAgICAgICAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSO1xuICAgICAgICBpZiAocmVuZGVyZXIuc21vb3RoUHJvcGVydHkgJiYgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gIT09IHNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldID0gc21vb3RoaW5nRW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHRyaW1tZWQgd2Ugb2Zmc2V0IGJ5IHRoZSB0cmltIHgveSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgZnJhbWUgZGltZW5zaW9uc1xuXG4gICAgICAgIGlmKHRleHR1cmUucm90YXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICBcbiAgICAgICAgICAgIGR4ICs9IHdpZHRoO1xuXG4gICAgICAgICAgICB3dC50eCA9IGR5ICogd3QuYSArIGR4ICogd3QuYyArIHd0LnR4O1xuICAgICAgICAgICAgd3QudHkgPSBkeSAqIHd0LmIgKyBkeCAqIHd0LmQgKyB3dC50eTtcblxuICAgICAgICAgICAgdmFyIHRlbXAgPSB3dC5hO1xuICAgICAgICAgICAgd3QuYSAgPSAtd3QuYztcbiAgICAgICAgICAgIHd0LmMgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIHRlbXAgPSB3dC5iO1xuICAgICAgICAgICAgd3QuYiAgPSAtd3QuZDtcbiAgICAgICAgICAgIHd0LmQgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIC8vIHRoZSBhbmNob3IgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFib3ZlLCBzbyBsZXRzIHNldCBpdCB0byB6ZXJvXG4gICAgICAgICAgICBkeCA9IDA7XG4gICAgICAgICAgICBkeSA9IDA7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIC8vIEFsbG93IGZvciBwaXhlbCByb3VuZGluZ1xuICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgKHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwLFxuICAgICAgICAgICAgICAgICh3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHggPSBkeCB8IDA7XG4gICAgICAgICAgICBkeSA9IGR5IHwgMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICB3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjbGVhbiB1cCBjYWNoaW5nIC0gaG93IHRvIGNsZWFuIHVwIHRoZSBjYWNoZXM/XG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC55ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgc3ByaXRlIGFuZCBvcHRpb25hbGx5IGl0cyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95VGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95VGV4dHVyZSwgZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5hbmNob3IgPSBudWxsO1xuXG4gICAgaWYgKGRlc3Ryb3lUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcblxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zLi5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICovXG5TcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgU3ByaXRlKFRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXInKSxcbiAgICBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9jcmVhdGVJbmRpY2VzRm9yUXVhZHMnKSxcbiAgICBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4vZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgZ2xDb3JlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgU3ByaXRlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1Nwcml0ZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFJlbmRlcmVyIGRlZGljYXRlZCB0byBkcmF3aW5nIGFuZCBiYXRjaGluZyBzcHJpdGVzLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU3ByaXRlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgdmFsdWVzIHNlbnQgaW4gdGhlIHZlcnRleCBidWZmZXIuXG4gICAgICogcG9zaXRpb25YLCBwb3NpdGlvblksIGNvbG9yUiwgY29sb3JHLCBjb2xvckIgPSA1XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdmVydGV4IGluZm9ybWF0aW9uIGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgU3ByaXRlQmF0Y2ggYmVmb3JlIGl0IGZsdXNoZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIG91ciBiYXRjaFxuICAgIHZhciBudW1WZXJ0cyA9ICh0aGlzLnNpemUgKiA0KSAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBiYXRjaCwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgIHZhciBudW1JbmRpY2VzID0gdGhpcy5zaXplICogNjtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSB2ZXJ0ZXggZGF0YSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5QnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgQXJyYXlCdWZmZXIobnVtVmVydHMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBGbG9hdDMyQXJyYXkgZm9yIHBvc2l0aW9uc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciB1dnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIGNvbG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlcyBvZiB0aGUgZ2VvbWV0cnkgKHF1YWRzKSB0byBkcmF3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHModGhpcy5zaXplKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIFxuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICBcbiAgICAvL1RPRE8gLSAzMDAgaXMgYSBiaXQgbWFnaWMsIGZpZ3VyZSBvdXQgYSBuaWNlciBhbW91bnQhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykgXG4gICAge1xuICAgICAgICB0aGlzLmdyb3Vwc1tpXSA9IHt0ZXh0dXJlczpbXSwgdGV4dHVyZUNvdW50OjAsIGlkczpbXSwgc2l6ZTowLCBzdGFydDowLCBibGVuZDowfTsgXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcblxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsOyAgICBcbn1cblxuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3Nwcml0ZScsIFNwcml0ZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5NQVhfVEVYVFVFUyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cbiAgICB0aGlzLl9zaGFkZXIgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgdGhpcy5NQVhfVEVYVFVFUykvL25ldyBUZXh0dXJlU2hhZGVyKGdsKTtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlcjtcblxuICAgIC8vIGNyZWF0ZSBhIGNvdXBsZSBvZiBidWZmZXJzXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKGdsLCBudWxsLCBnbC5EWU5BTUlDX0RSQVcpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoZ2wsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgLy8gYnVpbGQgdGhlIHZhbyBvYmplY3QgdGhhdCB3aWxsIHJlbmRlci4uXG4gICAgdGhpcy52YW8gPSBuZXcgZ2xDb3JlLlZlcnRleEFycmF5T2JqZWN0KGdsKTtcblxuICAgIHRoaXMudmFvLmFkZEluZGV4KHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCAwKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIGdsLlVOU0lHTkVEX1NIT1JULCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMiAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMyAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVJZCwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgNCAqIDQpO1xuXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdG8gcmVuZGVyIHdoZW4gdXNpbmcgdGhpcyBzcHJpdGViYXRjaFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHNwcml0ZSlcbntcbiAgICAvL1RPRE8gc2V0IGJsZW5kIG1vZGVzLi5cbiAgICAvLyBjaGVjayB0ZXh0dXJlLi5cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPj0gdGhpcy5zaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICBcbiAgICAvLyBnZXQgdGhlIHV2cyBmb3IgdGhlIHRleHR1cmVcbiAgIFxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIGlmICghc3ByaXRlLnRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgLy8gcHVzaCBhIHRleHR1cmUuXG4gICAgLy8gaW5jcmVtZW50IHRoZSBiYXRjaHNpemVcbiAgICB2YXIgbmV4dFRleHR1cmUgPSAgc3ByaXRlLnRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgdmFyIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwO1xuICAgIHZhciBpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50VGV4dHVyZSAhPT0gbmV4dFRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbmV4dFRleHR1cmU7XG4gICAgICAgIFxuICAgICAgICBpZighbmV4dFRleHR1cmUuX2VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9pZCA9IHRoaXMudGV4dHVyZUNvdW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLnRleHR1cmVDb3VudCA9PT0gdGhpcy5NQVhfVEVYVFVFUylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgICAgICAgICAgICAgeyAgICAgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnN0YXJ0ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50KytdID0gbmV4dFRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHR1cmVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdHJpbT8/XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG5cbiAgICAvLyB1cGxvYWQgdGhlIHNwcml0ZSBlbGVtZXRucy4uLlxuICAgIC8vIHRoZXkgaGF2ZSBhbGwgcmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIHdlIGp1c3QgbmVlZCB0byBwdXNoIHRoZW0gaW50byB0aGUgYnVmZmVyLlxuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7XG4gICAgdmFyIHZlcnRleERhdGEgPSBzcHJpdGUudmVydGV4RGF0YVxuICAgIHZhciB0aW50ID0gKHNwcml0ZS50aW50ID4+IDE2KSArIChzcHJpdGUudGludCAmIDB4ZmYwMCkgKyAoKHNwcml0ZS50aW50ICYgMHhmZikgPDwgMTYpICsgKHNwcml0ZS53b3JsZEFscGhhICogMjU1IDw8IDI0KTtcbiAgICB2YXIgdXZzID0gc3ByaXRlLnRleHR1cmUuX3V2cy51dnNfdWludDMyO1xuICAgIC8veHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzBdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMF07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7IFxuICAgIFxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsyXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzNdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzFdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs0XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzVdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzJdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzZdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbN107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbM107XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgYW5kIGVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA9PT0gMClyZXR1cm47XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG5cbiAgICB0aGlzLmN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSB0aGlzLmN1cnJlbnRHcm91cC5zdGFydDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICB7ICAgICBcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgXG4gICAgLy8gZG8gc29tZSBzbWFydCBhcnJheSBzdHVmZi4uXG4gICAgLy8gZG91YmxlIHNpemUgc28gd2UgZG9udCBhbHdheSBzdWJhcnJheSB0aGUgZWxlbWVudHMuLlxuICAgIC8vIHVwbG9hZCB0aGUgdmVydHMgdG8gdGhlIGJ1ZmZlclxuICAgIGlmICh0aGlzLmN1cnJlbnRCYXRjaFNpemUgPiAoIHRoaXMuc2l6ZSAqIDAuNSApIClcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh0aGlzLnZlcnRpY2VzLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbyBrIC4uIHN1YiBhcnJheSBpcyBTTE9XPj9cbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnBvc2l0aW9ucy5zdWJhcnJheSgwLCB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplKTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHZpZXcsIDAsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgc2hhZGVyLi5cbiAgICB0aGlzLnJlbmRlcmVyLmJpbmRTaGFkZXIodGhpcy5fc2hhZGVyKTtcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCAwICk7XG5cbiAgICAvLy8gcmVuZGVyIHRoZSBncm91cHMuLlxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdyb3VwQ291bnQ7IGkrKykge1xuICAgICAgICBcbiAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5ncm91cHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC50ZXh0dXJlQ291bnQ7IGorKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kVGV4dHVyZShncm91cC50ZXh0dXJlc1tqXSwgaik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgZ3JvdXAuc2l6ZSAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCBncm91cC5zdGFydCAqIDYgKiAyKTtcbiAgICB9O1xuXG4gICAgLy8gcmVzZXQgZWxlbWVudHMgZm9yIHRoZSBuZXh0IGZsdXNoXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBzcHJpdGUgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFvLmJpbmQoKTtcbn07XG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgdGhpcy52YW8udW5iaW5kKCk7XG59O1xuLyoqXG4gKiBEZXN0cm95cyB0aGUgU3ByaXRlQmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuY29sb3JzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zcHJpdGVzID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCBtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgdmVydGV4U3JjID0gXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGFUZXh0dXJlSWQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZUZXh0dXJlSWQgPSBhVGV4dHVyZUlkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVwiO1xuICAgIHZhciBmcmFnbWVudFNyYyA9ICdwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG4nICsgZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpICsgXCJcXG5cXG5cIiArIGZyYWdUZW1wbGF0ZVxuXG4gICAgZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYy5yZXBsYWNlKC9cXCVcXCUvZ2ksICcxNicpO1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cbiAgICB2YXIgc2FtcGxlVmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSB7XG4gICAgICAgIHNhbXBsZVZhbHVlc1tpXSA9IGk7XG4gICAgfTtcblxuICAgIHNoYWRlci5iaW5kKCk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnVTYW1wbGVycyA9IHNhbXBsZVZhbHVlcztcblxuICAgIHJldHVybiBzaGFkZXI7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKVxue1xuICAgIHZhciBzcmMgPSAndmVjNCBnZXRTYW1wbGVGcm9tQXJyYXkoc2FtcGxlcjJEIHRleHR1cmVzWyUlXSwgaW50IG5keCwgdmVjMiB1dikge1xcblxcbnZlYzQgY29sb3I7J1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgaWYoaSA+IDApc3JjICs9ICdcXG5lbHNlICc7XG4gICAgICAgIGlmKGkgPCBtYXhUZXh0dXJlcy0xKXNyYyArPSAnaWYobmR4ID09ICcgKyBpICsgJyknO1xuICAgICAgICBzcmMgKz0gJ1xcbnsnO1xuICAgICAgICBzcmMgKz0gJ1xcblxcdGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmVzWycraSsnXSwgdXYpOyc7XG4gICAgICAgIHNyYyArPSAnXFxufSc7XG4gICAgfTtcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdyZXR1cm4gY29sb3I7JztcbiAgICBzcmMgKz0gJ1xcbn0nO1xuXG4gICAgcmV0dXJuIHNyYztcbn1cblxudmFyIGZyYWdUZW1wbGF0ZSA9IFtcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG4gICAgJ3ZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsnLFxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcnNbJSVdOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICdnbF9GcmFnQ29sb3IgPSBnZXRTYW1wbGVGcm9tQXJyYXkodVNhbXBsZXJzLCBpbnQodlRleHR1cmVJZCksIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yOycsXG4gICAgJ30nXG5dLmpvaW4oJ1xcbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyO1xuIiwidmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBUZXh0IE9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nIGluIHlvdXIgdGV4dCBzdHJpbmcsXG4gKiBvciBhZGQgYSB3b3JkV3JhcCBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSBhbmQgYW5kIHdvcmRXcmFwV2lkdGggcHJvcGVydHkgd2l0aCBhIHZhbHVlIGluIHRoZSBzdHlsZSBvYmplY3QuXG4gKlxuICogQSBUZXh0IGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBzdHJpbmcgYW5kIGEgc3R5bGUgb2JqZWN0XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0ID0gbmV3IFBJWEkuVGV4dCgnVGhpcyBpcyBhIHBpeGkgdGV4dCcse2ZvbnQgOiAnMjRweCBBcmlhbCcsIGZpbGwgOiAweGZmMTAxMCwgYWxpZ24gOiAnY2VudGVyJ30pO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbc3R5bGUuZm9udF0ge3N0cmluZ30gZGVmYXVsdCAnYm9sZCAyMHB4IEFyaWFsJyBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlLmcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcCwgaXQgbmVlZHMgd29yZFdyYXAgdG8gYmUgc2V0IHRvIHRydWVcbiAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzRdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gKi9cbmZ1bmN0aW9uIFRleHQodGV4dCwgc3R5bGUsIHJlc29sdXRpb24pXG57XG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgMmQgY29udGV4dCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gd2l0aFxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY2FudmFzLlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyh0aGlzLmNhbnZhcyk7XG4gICAgdGV4dHVyZS50cmltID0gbmV3IG1hdGguUmVjdGFuZ2xlKCk7XG4gICAgU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbn1cblxuLy8gY29uc3RydWN0b3JcblRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTcHJpdGUucHJvdG90eXBlKTtcblRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gVGV4dDtcblxuVGV4dC5mb250UHJvcGVydGllc0NhY2hlID0ge307XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZm9udD0nYm9sZCAyMHB0IEFyaWFsJ10ge3N0cmluZ30gVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gICAgICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZWcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGVnICdibHVlJywgJyNGQ0ZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXBcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd8bnVtYmVyfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNl0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gICAgICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAgICAgKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAgICAgKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHN0eWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdHlsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5maWxsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpbGwgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmZpbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLnN0cm9rZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zdHJva2UgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLnN0cm9rZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZHJvcFNoYWRvd0NvbG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZHJvcFNoYWRvd0NvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGUuZm9udCA9IHN0eWxlLmZvbnQgfHwgJ2JvbGQgMjBwdCBBcmlhbCc7XG4gICAgICAgICAgICBzdHlsZS5maWxsID0gc3R5bGUuZmlsbCB8fCAnYmxhY2snO1xuICAgICAgICAgICAgc3R5bGUuYWxpZ24gPSBzdHlsZS5hbGlnbiB8fCAnbGVmdCc7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2UgPSBzdHlsZS5zdHJva2UgfHwgJ2JsYWNrJzsgLy9wcm92aWRlIGEgZGVmYXVsdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzLzEzNlxuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIHx8IDA7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcCA9IHN0eWxlLndvcmRXcmFwIHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXBXaWR0aCA9IHN0eWxlLndvcmRXcmFwV2lkdGggfHwgMTAwO1xuXG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93ID0gc3R5bGUuZHJvcFNoYWRvdyB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvciB8fCAnIzAwMDAwMCc7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93QW5nbGUgPSBzdHlsZS5kcm9wU2hhZG93QW5nbGUgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA6IE1hdGguUEkgLyA2O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlID0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgOiA1O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0JsdXIgOiAwOyAvL3NoYWRvd0JsdXIgaXMgJzAnIGJ5IGRlZmF1bHQgYWNjb3JkaW5nIHRvIEhUTUxcblxuICAgICAgICAgICAgc3R5bGUucGFkZGluZyA9IHN0eWxlLnBhZGRpbmcgfHwgMDtcblxuICAgICAgICAgICAgc3R5bGUudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lIHx8ICdhbHBoYWJldGljJztcblxuICAgICAgICAgICAgc3R5bGUubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbiB8fCAnbWl0ZXInO1xuICAgICAgICAgICAgc3R5bGUubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQgfHwgMTA7XG5cbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gc3R5bGU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNvcHkgZm9yIHRoZSB0ZXh0IG9iamVjdC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCl7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgc3R5bGUgPSB0aGlzLl9zdHlsZTtcbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG5cbiAgICAvLyB3b3JkIHdyYXBcbiAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbCB0ZXh0XG4gICAgdmFyIG91dHB1dFRleHQgPSBzdHlsZS53b3JkV3JhcCA/IHRoaXMud29yZFdyYXAodGhpcy5fdGV4dCkgOiB0aGlzLl90ZXh0O1xuXG4gICAgLy8gc3BsaXQgdGV4dCBpbnRvIGxpbmVzXG4gICAgdmFyIGxpbmVzID0gb3V0cHV0VGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCB3aWR0aFxuICAgIHZhciBsaW5lV2lkdGhzID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aCk7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGZvbnRQcm9wZXJ0aWVzID0gdGhpcy5kZXRlcm1pbmVGb250UHJvcGVydGllcyhzdHlsZS5mb250KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBsaW5lV2lkdGg7XG4gICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICB2YXIgd2lkdGggPSBtYXhMaW5lV2lkdGggKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICB3aWR0aCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSAoIHdpZHRoICsgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgaGVpZ2h0XG4gICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLnN0eWxlLmxpbmVIZWlnaHQgfHwgZm9udFByb3BlcnRpZXMuZm9udFNpemUgKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG5cbiAgICB2YXIgaGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aDtcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGhlaWdodCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gKCBoZWlnaHQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nICogMiApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5jb250ZXh0LnNjYWxlKCB0aGlzLnJlc29sdXRpb24sIHRoaXMucmVzb2x1dGlvbik7XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgfVxuXG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFN0eWxlPVwiI0ZGMDAwMFwiO1xuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuICAgIHRoaXMuY29udGV4dC5zdHJva2VTdHlsZSA9IHN0eWxlLnN0cm9rZTtcbiAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIHRoaXMuY29udGV4dC50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmU7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVKb2luID0gc3R5bGUubGluZUpvaW47XG4gICAgdGhpcy5jb250ZXh0Lm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0O1xuXG4gICAgdmFyIGxpbmVQb3NpdGlvblg7XG4gICAgdmFyIGxpbmVQb3NpdGlvblk7XG5cbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGlmIChzdHlsZS5kcm9wU2hhZG93Qmx1ciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhTaGFkb3dPZmZzZXQgPSBNYXRoLmNvcyhzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgICAgICB2YXIgeVNoYWRvd09mZnNldCA9IE1hdGguc2luKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCArIHhTaGFkb3dPZmZzZXQsIGxpbmVQb3NpdGlvblkgKyB5U2hhZG93T2Zmc2V0ICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL3NldCBjYW52YXMgdGV4dCBzdHlsZXNcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZmlsbDtcblxuICAgIC8vZHJhdyBsaW5lcyBsaW5lIGJ5IGxpbmVcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0cm9rZSAmJiBzdHlsZS5zdHJva2VUaGlja25lc3MpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJva2VUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUudHJpbS54ID0gMDtcbiAgICB0ZXh0dXJlLnRyaW0ueSA9IC10aGlzLl9zdHlsZS5wYWRkaW5nO1xuXG4gICAgdGV4dHVyZS50cmltLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGV4dHVyZS50cmltLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAtIHRoaXMuX3N0eWxlLnBhZGRpbmcqMjtcblxuICAgIHRoaXMuX3dpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5lbWl0KCd1cGRhdGUnLCAgdGV4dHVyZS5iYXNlVGV4dHVyZSk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqL1xuVGV4dC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICAvL3RoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5yZW5kZXJXZWJHTC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgLy8gICB0aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYXNjZW50LCBkZXNjZW50IGFuZCBmb250U2l6ZSBvZiBhIGdpdmVuIGZvbnRTdHlsZVxuICpcbiAqIEBwYXJhbSBmb250U3R5bGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGZvbnRTdHlsZSlcbntcbiAgICB2YXIgcHJvcGVydGllcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdO1xuXG4gICAgaWYgKCFwcm9wZXJ0aWVzKVxuICAgIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzO1xuICAgICAgICB2YXIgY29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnfE3DiXEnKS53aWR0aCk7XG4gICAgICAgIHZhciBiYXNlbGluZSA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCdNJykud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xuXG4gICAgICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiAxLjQgfCAwO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNmMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQoJ3xNw4lxJywgMCwgYmFzZWxpbmUpO1xuXG4gICAgICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgICB2YXIgcGl4ZWxzID0gaW1hZ2VkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmUgPSB3aWR0aCAqIDQ7XG5cbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgIHZhciBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZWxpbmU7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCArPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnQgPSBiYXNlbGluZSAtIGk7XG5cbiAgICAgICAgaWR4ID0gcGl4ZWxzIC0gbGluZTtcbiAgICAgICAgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGRlc2NlbnQuIHNjYW4gZnJvbSBib3R0b20gdG8gdG9wIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggLT0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IGkgLSBiYXNlbGluZTtcbiAgICAgICAgcHJvcGVydGllcy5mb250U2l6ZSA9IHByb3BlcnRpZXMuYXNjZW50ICsgcHJvcGVydGllcy5kZXNjZW50O1xuXG4gICAgICAgIFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBuZXdsaW5lcyB0byBhIHN0cmluZyB0byBoYXZlIGl0IG9wdGltYWxseSBmaXQgaW50byB0aGUgaG9yaXpvbnRhbFxuICogYm91bmRzIHNldCBieSB0aGUgVGV4dCBvYmplY3QncyB3b3JkV3JhcFdpZHRoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS53b3JkV3JhcCA9IGZ1bmN0aW9uICh0ZXh0KVxue1xuICAgIC8vIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyXG4gICAgLy8gdGhhbiBpdHMgaG9yaXpvbnRhbCBib3VuZHMuXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICAgIHZhciB3b3JkV3JhcFdpZHRoID0gdGhpcy5fc3R5bGUud29yZFdyYXBXaWR0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XG4gICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQod29yZHNbal0pLndpZHRoO1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aFdpdGhTcGFjZSA9IHdvcmRXaWR0aCArIHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xuICAgICAgICAgICAgaWYgKGogPT09IDAgfHwgd29yZFdpZHRoV2l0aFNwYWNlID4gc3BhY2VMZWZ0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcHJpbnRpbmcgdGhlIG5ld2xpbmUgaWYgaXQncyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZSB0aGF0IGlzXG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSB3b3JkIHdyYXAgd2lkdGguXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal07XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB3b3Jkc1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgbGluZXMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFRleHQgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgVGV4dFxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UZXh0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzLmNhbGwodGhpcywgbWF0cml4KTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT10cnVlXSB7Ym9vbGVhbn0gd2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICAvLyBtYWtlIHN1cmUgdG8gcmVzZXQgdGhlIHRoZSBjb250ZXh0IGFuZCBjYW52YXMuLiBkb250IHdhbnQgdGhpcyBoYW5naW5nIGFyb3VuZCBpbiBtZW1vcnkhXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG5cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGVzdHJveUJhc2VUZXh0dXJlKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIFJlbmRlclRhcmdldCA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBGaWx0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKSxcbiAgICB0ZW1wUmVjdCA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuXG4vKipcbiAqIEEgQmFzZVJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIEJhc2VSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIHRha2VzIGEgc25hcHNob3Qgb2YgYW55IERpc3BsYXkgT2JqZWN0IGdpdmVuIHRvIGl0cyByZW5kZXIgbWV0aG9kLiBUaGUgcG9zaXRpb25cbiAqIGFuZCByb3RhdGlvbiBvZiB0aGUgZ2l2ZW4gRGlzcGxheSBPYmplY3RzIGlzIGlnbm9yZWQuIEZvciBleGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcigxMDI0LCAxMDI0LCB7IHZpZXc6IGNhbnZhcywgcmF0aW86IDEgfSk7XG4gKiB2YXIgQmFzZXJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5CYXNlUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihzcHJpdGUpO1xuICogYGBgXG4gKlxuICogVGhlIFNwcml0ZSBpbiB0aGlzIGNhc2Ugd2lsbCBiZSByZW5kZXJlZCB0byBhIHBvc2l0aW9uIG9mIDAsMC4gVG8gcmVuZGVyIHRoaXMgc3ByaXRlIGF0IGl0cyBhY3R1YWxcbiAqIHBvc2l0aW9uIGEgQ29udGFpbmVyIHNob3VsZCBiZSB1c2VkOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZG9jID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKlxuICogZG9jLmFkZENoaWxkKHNwcml0ZSk7XG4gKlxuICogQmFzZXJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiBCYXNlcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZVxuICogQHBhcmFtIFt3aWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbaGVpZ2h0PTEwMF0ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIEJhc2VSZW5kZXJUZXh0dXJlLCB5b3UgbXVzdCBwYXNzIGEgcmVuZGVyZXIgaW50byB0aGUgY29uc3RydWN0b3IuJyk7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUuY2FsbCh0aGlzLCBudWxsLCBzY2FsZU1vZGUpO1xuICAgXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047O1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRHJhdy9yZW5kZXIgdGhlIGdpdmVuIERpc3BsYXlPYmplY3Qgb250byB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBkZXNjZW5kZW50cyBhcmUgdHJhbnNmb3JtZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIElmIGB1cGRhdGVUcmFuc2Zvcm1gIGlzIHRydWUgdGhlbiB0aGUgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQgYmVmb3JlIHRoZVxuICAgICAqIG1ldGhvZCByZXR1cm5zLiBPdGhlcndpc2UgaXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcgY29kZSB0byBjb3JyZWN0bHkgdXNlIG9yIHJlc2V0XG4gICAgICogdGhlIHRyYW5zZm9ybWVkIGRpc3BsYXkgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5IG9iamVjdCBpcyBhbHdheXMgcmVuZGVyZWQgd2l0aCBhIHdvcmxkQWxwaGEgdmFsdWUgb2YgMS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICAgICAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gICAgICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAgICAgKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB1c2VzLiBBIEJhc2VSZW5kZXJUZXh0dXJlIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgcmVuZGVyZXIgYXQgdGhlIG1vbWVudCBpZiBpdHMgd2ViR0wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnNjYWxlTW9kZSwgdGhpcy5yZXNvbHV0aW9uKTsvLywgdGhpcy50aGlzLnNjYWxlTW9kZSk7XG4gICAgICAgIHRoaXMuX2dsVGV4dHVyZXNbZ2wuaWRdID0gIHRoaXMudGV4dHVyZUJ1ZmZlci50ZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgLy9UT0RPIHJlZmFjdG9yIGZpbHRlciBtYW5hZ2VyLi4gYXMgcmVhbGx5IGl0cyBubyBsb25nZXIgYSBtYW5hZ2VyIGlmIHdlIHVzZSBpdCBoZXJlLi5cbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbmV3IEZpbHRlck1hbmFnZXIodGhpcy5yZW5kZXJlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlcldlYkdMO1xuXG4gICAgICAgIC8vIHRoZSBjcmVhdGlvbiBvZiBhIGZpbHRlciBtYW5hZ2VyIHVuYmluZHMgdGhlIGJ1ZmZlcnMuLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgICAgICBpZih0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQpdGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlckNhbnZhcztcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcih0aGlzLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuaGVpZ2h0KiB0aGlzLnJlc29sdXRpb24pO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcblxufVxuXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIHVwZGF0ZUJhc2Uge2Jvb2xlYW59IFNob3VsZCB0aGUgYmFzZVRleHR1cmUud2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYmUgcmVzaXplZCBhcyB3ZWxsP1xuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgaWYgKHdpZHRoID09PSB0aGlzLndpZHRoICYmIGhlaWdodCA9PT0gdGhpcy5oZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZCA9ICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7XG5cbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoZGVzdGluYXRpb25GcmFtZSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuYmluZEZyYW1lYnVmZmVyKHRoaXMucmVuZGVyZXIuZ2wuRlJBTUVCVUZGRVIsIHRoaXMudGV4dHVyZUJ1ZmZlci5mcmFtZUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKGZhbHNlLCBkZXN0aW5hdGlvbkZyYW1lKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAoZnJhbWUsIGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAodXBkYXRlVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpID8gdXBkYXRlVHJhbnNmb3JtIDogdHJ1ZTsvLyF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIudHJhbnNmb3JtID0gbWF0cml4O1xuXG4gICAgLy9UT0RPIG5vdCBhIGZhbiB0aGF0IHRoaXMgaXMgaGVyZS4uLiBpdCB3aWxsIG1vdmUhXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKCk7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICBpZiAodXBkYXRlVHJhbnNmb3JtKVxuICAgIHtcblxuICAgICAgICAvLyByZXNldCB0aGUgbWF0cml4IG9mIHRoZSBkaXNwbGF0eU9iamVjdC4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uaWRlbnRpdHkoKTtcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmN1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGVtcFJlY3Qud2lkdGggPSBmcmFtZS5oZWlnaHQ7XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gZnJhbWUud2lkdGg7XG4gICBcbiAgICAvL1RPRE8gcmVuYW1lIHRleHR1cmVCdWZmZXIgdG8gcmVuZGVyVGFyZ2V0Li5cbiAgICB2YXIgdGVtcCA9ICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0aGlzLmZpbHRlck1hbmFnZXI7XG4gICAgXG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIuYWN0aXZhdGUoZnJhbWUsIHRlbXBSZWN0KTtcbiAgICBjb25zb2xlLmxvZyhkaXNwbGF5T2JqZWN0KVxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnRleHR1cmVCdWZmZXIsIGNsZWFyKTtcblxuICAgLy8gY29uc29sZS5sb2coXCJSRU5ERVJJTkcgXCIpO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRlbXA7XG59O1xuXG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcl0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVwZGF0ZVRyYW5zZm9ybSA9ICEhdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdmFyIHd0ID0gdGVtcE1hdHJpeDtcblxuICAgIHd0LmlkZW50aXR5KCk7XG5cbiAgICBpZiAobWF0cml4KVxuICAgIHtcbiAgICAgICAgd3QuYXBwZW5kKG1hdHJpeCk7XG4gICAgfVxuXG5cbiAgICB3dC50eCArPSBmcmFtZS54O1xuICAgIHd0LnR5ICs9IGZyYW1lLnk7XG5cbiAgICB2YXIgY2FjaGVkV3QgPSBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtO1xuICAgIFxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSB3dDtcblxuICAgIC8vIHNldFdvcmxkIEFscGhhIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgcmVuZGVyZXIgYXQgZnVsbCBvcGFjaXR5XG4gICAgZGlzcGxheU9iamVjdC53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICB2YXIgaSwgajtcblxuICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBcbi8vICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5cbiAgICB2YXIgY29udGV4dCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlYWxSZXNvbHV0aW9uID0gdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIGNvbnRleHQpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gcmVhbFJlc29sdXRpb247XG5cbiAgICBpZihkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID09PSB3dClcbiAgICB7XG4gICAgICAgIC8vIGZpeGVzIGNhY2hlQXNCaXRtYXAgSGFwcGVuaW5nIGR1cmluZyB0aGUgYWJvdmUuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gY2FjaGVkV3Q7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBkZXN0cm95QmFzZSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIGZpbHRlcm1hbmFnZXIuLlxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoZnJhbWUpXG57XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uuc3JjID0gdGhpcy5nZXRCYXNlNjQoZnJhbWUpO1xuICAgIHJldHVybiBpbWFnZTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGlzIHRleHR1cmUuIEl0IHdvcmtzIGJ5IGNhbGxpbmcgQmFzZVJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgIHJldHVybiB0aGlzLmdldENhbnZhcyhmcmFtZSkudG9EYXRhVVJMKCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIEJhc2VSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldENhbnZhcyA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2lkdGggPSBmcmFtZS53aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBjYW52YXNEYXRhID0gdGVtcENhbnZhcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2FudmFzRGF0YS5kYXRhLnNldCh3ZWJHTFBpeGVscyk7XG5cbiAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICByZXR1cm4gdGVtcENhbnZhcy5jYW52YXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy53aWR0aDtcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoZnJhbWUud2lkdGggPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGggJiYgXG4gICAgICAgICAgIGZyYW1lLmhlaWdodCA9PT0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5oZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IENhbnZhc0J1ZmZlcihmcmFtZS53aWR0aCAqIHJlc29sdXRpb24sIGZyYW1lLmhlaWdodCAqIHJlc29sdXRpb24pO1xuICAgICAgICAgICAgdmFyIGNhbnZhc0RhdGEgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dC5nZXRJbWFnZURhdGEoZnJhbWUueCAgKiByZXNvbHV0aW9uLCBmcmFtZS55ICogcmVzb2x1dGlvbiwgZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIHRoZSBlbnRpcmUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICBpZighZnJhbWUpXG4gICAge1xuICAgICAgICBmcmFtZSA9IHRlbXBSZWN0O1xuICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICByZXR1cm4gd2ViR0xQaXhlbHM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIGEgcGl4ZWwgd2l0aGluIHRoZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uIChmcmFtZSwgeCwgeSlcbntcbiAgICB0ZW1wUmVjdC54ID0geDtcbiAgICB0ZW1wUmVjdC55ID0geTtcbiAgICB0ZW1wUmVjdC53aWR0aCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gMSAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmKGZyYW1lKVxuICAgIHtcbiAgICAgICAgdGVtcFJlY3QueCArPSBmcmFtZS54O1xuICAgICAgICB0ZW1wUmVjdC55ICs9IGZyYW1lLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UGl4ZWxzKHRlbXBSZWN0KTtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlLiBBbGwgdGV4dHVyZXMgaGF2ZSBhIGJhc2UgdGV4dHVyZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50IHBpeGVsIHJhdGlvc1xuICovXG5mdW5jdGlvbiBCYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDEwMDtcblxuICAgIC8vIFRPRE8gZG9jc1xuICAgIC8vIHVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2VcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxXaWR0aCA9IDEwMDtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgaGVpZ2h0IG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUgdG8gYXBwbHkgd2hlbiBzY2FsaW5nIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuTElORUFSXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIG9uY2UgdGhlIGJhc2UgdGV4dHVyZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbmV2ZXIgdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmFpbHMgdG8gbG9hZCBvciBoYXMgbm8gdGV4dHVyZSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgaWYgdGhlIHNvdXJjZSBpcyBjdXJyZW50bHkgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIElmIGFuIEltYWdlIHNvdXJjZSBpcyBsb2FkaW5nIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmVcbiAgICAgKiBkaXNwYXRjaGVkIHdoZW4gdGhlIG9wZXJhdGlvbiBlbmRzLiBBbiB1bmRlcnlsaW5nIHNvdXJjZSB0aGF0IGlzXG4gICAgICogaW1tZWRpYXRlbHktYXZhaWxhYmxlIGJ5cGFzc2VzIGxvYWRpbmcgZW50aXJlbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW1hZ2Ugc291cmNlIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUT0RPOiBNYWtlIHRoaXMgYSBzZXR0ZXIgdGhhdCBjYWxscyBsb2FkU291cmNlKCk7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtJbWFnZXxDYW52YXN9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsOyAvLyBzZXQgaW4gbG9hZFNvdXJjZSwgaWYgYXQgYWxsXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiBSR0IgY2hhbm5lbHMgc2hvdWxkIGJlIHByZS1tdWx0aXBsaWVkIGJ5IEFscGhhICAoV2ViR0wgb25seSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBvciBub3QgdGhlIHRleHR1cmUgaXMgYSBwb3dlciBvZiB0d28sIHRyeSB0byB1c2UgcG93ZXIgb2YgdHdvIHRleHR1cmVzIGFzIG11Y2ggYXMgeW91IGNhblxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IGZhbHNlO1xuXG4gICAgLy8gdXNlZCBmb3Igd2ViR0xcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiBhIG1pcG1hcCBvZiB0aGlzIHRleHR1cmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLiBUaGlzIHZhbHVlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIHRleHR1cmUgaXMgdXNlZFxuICAgICAqIEFsc28gdGhlIHRleHR1cmUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBzaXplIHRvIHdvcmtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5taXBtYXAgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHJlbmRlcmVyIElEcyB0byB3ZWJnbCB0ZXh0dXJlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgV2ViR0xUZXh0dXJlPn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9pZCA9IDA7XG4gICAgXG4gICAgLy8gaWYgbm8gc291cmNlIHBhc3NlZCBkb24ndCB0cnkgdG8gbG9hZFxuICAgIGlmIChzb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmluaXNoZXMgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkZWRcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmFpbHMgdG8gbG9hZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBCYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0ZXh0dXJlIG9uIGFsbCB0aGUgd2ViZ2wgcmVuZGVyZXJzLCB0aGlzIGFsc28gYXNzdW1lcyB0aGUgc3JjIGhhcyBjaGFuZ2VkLlxuICpcbiAqIEBmaXJlcyB1cGRhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5yZWFsV2lkdGggPSB0aGlzLnNvdXJjZS5uYXR1cmFsV2lkdGggfHwgdGhpcy5zb3VyY2Uud2lkdGg7XG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gdGhpcy5zb3VyY2UubmF0dXJhbEhlaWdodCB8fCB0aGlzLnNvdXJjZS5oZWlnaHQ7XG5cbiAgICB0aGlzLndpZHRoID0gdGhpcy5yZWFsV2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlYWxIZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IHV0aWxzLmlzUG93ZXJPZlR3byh0aGlzLnJlYWxXaWR0aCwgdGhpcy5yZWFsSGVpZ2h0KTtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIExvYWQgYSBzb3VyY2UuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBpcyBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlLCBzdWNoIGFzIGFuIGltYWdlIHRoYXQgbmVlZHMgdG8gYmVcbiAqIGRvd25sb2FkZWQsIHRoZW4gdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIGluIHRoZSBmdXR1cmVcbiAqIGFuZCBgaGFzTG9hZGVkYCB3aWxsIHJlbWFpbiBmYWxzZSBhZnRlciB0aGlzIGNhbGwuXG4gKlxuICogVGhlIGxvZ2ljIHN0YXRlIGFmdGVyIGNhbGxpbmcgYGxvYWRTb3VyY2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGVnLiBgZnJvbUltYWdlYCwgYG5ldyBCYXNlVGV4dHVyZWApIGlzOlxuICpcbiAqICAgICBpZiAodGV4dHVyZS5oYXNMb2FkZWQpXG4ge1xuICogICAgICAgIC8vIHRleHR1cmUgcmVhZHkgZm9yIHVzZVxuICogICAgIH0gZWxzZSBpZiAodGV4dHVyZS5pc0xvYWRpbmcpXG4ge1xuICogICAgICAgIC8vIGxpc3RlbiB0byAnbG9hZGVkJyBhbmQvb3IgJ2Vycm9yJyBldmVudHMgb24gdGV4dHVyZVxuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAgLy8gbm90IGxvYWRpbmcsIG5vdCBnb2luZyB0byBsb2FkIFVOTEVTUyB0aGUgc291cmNlIGlzIHJlbG9hZGVkXG4gKiAgICAgICAgLy8gKGl0IG1heSBzdGlsbCBtYWtlIHNlbnNlIHRvIGxpc3RlbiB0byB0aGUgZXZlbnRzKVxuICogICAgIH1cbiAqXG4gKiBAcHJvdGVjdGVkXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUubG9hZFNvdXJjZSA9IGZ1bmN0aW9uIChzb3VyY2UpXG57XG4gICAgdmFyIHdhc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZztcbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAod2FzTG9hZGluZyAmJiB0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc291cmNlLm9uZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgLy8gQXBwbHkgc291cmNlIGlmIGxvYWRlZC4gT3RoZXJ3aXNlIHNldHVwIGFwcHJvcHJpYXRlIGxvYWRpbmcgbW9uaXRvcnMuXG4gICAgaWYgKCh0aGlzLnNvdXJjZS5jb21wbGV0ZSB8fCB0aGlzLnNvdXJjZS5nZXRDb250ZXh0KSAmJiB0aGlzLnNvdXJjZS53aWR0aCAmJiB0aGlzLnNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNvdXJjZS5nZXRDb250ZXh0KVxuICAgIHtcblxuICAgICAgICAvLyBJbWFnZSBmYWlsIC8gbm90IHJlYWR5XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuXG4gICAgICAgIHNvdXJjZS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgc2NvcGUuZW1pdCgnbG9hZGVkJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvdXJjZS5vbmVycm9yID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5lbWl0KCdlcnJvcicsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQZXIgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjdGhlLWltZy1lbGVtZW50XG4gICAgICAgIC8vICAgXCJUaGUgdmFsdWUgb2YgYGNvbXBsZXRlYCBjYW4gdGh1cyBjaGFuZ2Ugd2hpbGUgYSBzY3JpcHQgaXMgZXhlY3V0aW5nLlwiXG4gICAgICAgIC8vIFNvIGNvbXBsZXRlIG5lZWRzIHRvIGJlIHJlLWNoZWNrZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gYWRkZWQuLlxuICAgICAgICAvLyBOT1RFOiBjb21wbGV0ZSB3aWxsIGJlIHRydWUgaWYgdGhlIGltYWdlIGhhcyBubyBzcmMgc28gYmVzdCB0byBjaGVjayBpZiB0aGUgc3JjIGlzIHNldC5cbiAgICAgICAgaWYgKHNvdXJjZS5jb21wbGV0ZSAmJiBzb3VyY2Uuc3JjKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyAuLmFuZCBpZiB3ZSdyZSBjb21wbGV0ZSBub3csIG5vIG5lZWQgZm9yIGNhbGxiYWNrc1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgc29tZSBvdGhlciB0cmFja2luZyB2YXJzIG9uY2VcbiAqIGEgc291cmNlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5fc291cmNlTG9hZGVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBiYXNlIHRleHR1cmVcbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5pbWFnZVVybClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuICAgICAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlLnNyYyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLnNvdXJjZS5fcGl4aUlkXTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG5cbiAgICB0aGlzLmRpc3Bvc2UoKTtcbn07XG5cbi8qKlxuICogRnJlZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTCBtZW1vcnkgd2l0aG91dCBkZXN0cm95aW5nIHRoaXMgdGV4dHVyZSBvYmplY3QuXG4gKiBUaGlzIG1lYW5zIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSB0ZXh0dXJlIGxhdGVyIHdoaWNoIHdpbGwgdXBsb2FkIGl0IHRvIEdQVVxuICogbWVtb3J5IGFnYWluLlxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIHRoaXMpO1xuXG4gICAgLy8gdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lZWRlZCwgdGhlIHJlbmRlcmVycyBzaG91bGQgY2xlYW51cCBhbGwgdGhlIGdsIHRleHR1cmVzLlxuICAgIC8vIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgc291cmNlIGltYWdlIG9mIHRoZSB0ZXh0dXJlLlxuICogVGhlIG9yaWdpbmFsIHNvdXJjZSBtdXN0IGJlIGFuIEltYWdlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5ld1NyYyB7c3RyaW5nfSB0aGUgcGF0aCBvZiB0aGUgaW1hZ2VcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNvdXJjZUltYWdlID0gZnVuY3Rpb24gKG5ld1NyYylcbntcbiAgICB0aGlzLnNvdXJjZS5zcmMgPSBuZXdTcmM7XG5cbiAgICB0aGlzLmxvYWRTb3VyY2UodGhpcy5zb3VyY2UpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIGJhc2UgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBTaG91bGQgdXNlIGFub255bW91cyBDT1JTPyBEZWZhdWx0cyB0byB0cnVlIGlmIHRoZSBVUkwgaXMgbm90IGEgZGF0YS1VUkkuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmIChjcm9zc29yaWdpbiA9PT0gdW5kZWZpbmVkICYmIGltYWdlVXJsLmluZGV4T2YoJ2RhdGE6JykgIT09IDApXG4gICAge1xuICAgICAgICBjcm9zc29yaWdpbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIC8vIG5ldyBJbWFnZSgpIGJyZWFrcyB0ZXggbG9hZGluZyBpbiBzb21lIHZlcnNpb25zIG9mIENocm9tZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMzgwNzFcbiAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgaWYgKGNyb3Nzb3JpZ2luKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoaW1hZ2UsIHNjYWxlTW9kZSk7XG4gICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgaW1hZ2Uuc3JjID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSBiYXNlVGV4dHVyZTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBAMnggYXQgdGhlIGVuZCBvZiB0aGUgdXJsIHdlIGFyZSBnb2luZyB0byBhc3N1bWUgaXRzIGEgaGlnaHJlcyBpbWFnZVxuICAgICAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKGltYWdlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFjYW52YXMuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGNhbnZhcy5fcGl4aUlkID0gJ2NhbnZhc18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG4iLCJ2YXIgQmFzZVJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VSZW5kZXJUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIFJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIFJlbmRlclRleHR1cmUgc2hvdWxkIGJlIHByZWxvYWRlZFxuICogb3RoZXJ3aXNlIGJsYWNrIHJlY3RhbmdsZXMgd2lsbCBiZSBkcmF3biBpbnN0ZWFkLlxuICpcbiAqIEEgUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCA4MDAsIDYwMCk7XG4gKiB2YXIgc3ByaXRlID0gUElYSS5TcHJpdGUuZnJvbUltYWdlKFwic3Bpbk9ial8wMS5wbmdcIik7XG4gKlxuICogc3ByaXRlLnBvc2l0aW9uLnggPSA4MDAvMjtcbiAqIHNwcml0ZS5wb3NpdGlvbi55ID0gNjAwLzI7XG4gKiBzcHJpdGUuYW5jaG9yLnggPSAwLjU7XG4gKiBzcHJpdGUuYW5jaG9yLnkgPSAwLjU7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiByZW5kZXJUZXh0dXJlXG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIGZvciB0aGlzIFJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIFJlbmRlclRleHR1cmUoYmFzZVJlbmRlclRleHR1cmUsIGZyYW1lKVxue1xuICAgIGlmICghcmVuZGVyZXIpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgb2JqZWN0IHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Jhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIFRleHR1cmUuY2FsbCh0aGlzLFxuICAgICAgICBiYXNlUmVuZGVyVGV4dHVyZSxcbiAgICAgICAgZnJhbWUgXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn1cblxuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmUucHJvdG90eXBlKTtcblJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGV4dHVyZTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIHVwZGF0ZUJhc2UpXG57XG4gICBcbiAgICAvL1RPRE8gLSBjb3VsZCBiZSBub3QgcmVxdWlyZWQuLlxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSB0aGlzLmNyb3Aud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNyb3AuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKHVwZGF0ZUJhc2UpXG4gICAge1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYmFzZVRleHR1cmUuY2xlYXIodGhpcy5mcmFtZSlcbiAgICBcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLnJlbmRlcih0aGlzLmZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRJbWFnZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuYmFzZVRleHR1cmUuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIFJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0QmFzZTY0ID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNlNjQuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIFJlbmRlclRleHR1cmUgdG8gaXQgYW5kIHRoZW4gcmV0dXJucyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gQSBDYW52YXMgZWxlbWVudCB3aXRoIHRoZSB0ZXh0dXJlIHJlbmRlcmVkIG9uLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldENhbnZhcyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVscyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVsKHRoaXMuZnJhbWUsIHgsIHkpO1xufTtcblxuUmVuZGVyVGV4dHVyZS5jcmVhdGUgPSBmdW5jdGlvbihyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHJldHVybiBuZXcgUmVuZGVyVGV4dHVyZShuZXcgQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbikpO1xufVxuXG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnMgPSByZXF1aXJlKCcuL1RleHR1cmVVdnMnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlIG9yIHBhcnQgb2YgYW4gaW1hZ2UuIEl0IGNhbm5vdCBiZSBhZGRlZFxuICogdG8gdGhlIGRpc3BsYXkgbGlzdCBkaXJlY3RseS4gSW5zdGVhZCB1c2UgaXQgYXMgdGhlIHRleHR1cmUgZm9yIGEgU3ByaXRlLiBJZiBubyBmcmFtZSBpcyBwcm92aWRlZCB0aGVuIHRoZSB3aG9sZSBpbWFnZSBpcyB1c2VkLlxuICpcbiAqIFlvdSBjYW4gZGlyZWN0bHkgY3JlYXRlIGEgdGV4dHVyZSBmcm9tIGFuIGltYWdlIGFuZCB0aGVuIHJldXNlIGl0IG11bHRpcGxlIHRpbWVzIGxpa2UgdGhpcyA6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZSgnYXNzZXRzL2ltYWdlLnBuZycpO1xuICogdmFyIHNwcml0ZTEgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiB2YXIgc3ByaXRlMiA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBiYXNlVGV4dHVyZSB7UElYSS5CYXNlVGV4dHVyZX0gVGhlIGJhc2UgdGV4dHVyZSBzb3VyY2UgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlIGZyb21cbiAqIEBwYXJhbSBbZnJhbWVdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3RhbmdsZSBmcmFtZSBvZiB0aGUgdGV4dHVyZSB0byBzaG93XG4gKiBAcGFyYW0gW2Nyb3BdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIGFyZWEgb2Ygb3JpZ2luYWwgdGV4dHVyZVxuICogQHBhcmFtIFt0cmltXSB7UElYSS5SZWN0YW5nbGV9IFRyaW1tZWQgdGV4dHVyZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBbcm90YXRlXSB7Ym9vbGVhbn0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlcyAoIHVzZWQgYnkgdGV4dHVyZSBwYWNrZXIgKVxuICovXG5mdW5jdGlvbiBUZXh0dXJlKGJhc2VUZXh0dXJlLCBmcmFtZSwgY3JvcCwgdHJpbSwgcm90YXRlKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogRG9lcyB0aGlzIFRleHR1cmUgaGF2ZSBhbnkgZnJhbWUgZGF0YSBhc3NpZ25lZCB0byBpdD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5ub0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VUZXh0dXJlIGluc3RhbmNlb2YgVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0cmltIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLnRyaW0gPSB0cmltO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCB0aGUgcmVuZGVyZXIga25vdyBpZiB0aGUgdGV4dHVyZSBpcyB2YWxpZC4gSWYgaXQncyBub3QgdGhlbiBpdCBjYW5ub3QgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgYSByZW5kZXJlciBrbm93IHRoYXQgYSB0ZXh0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgKHVzZWQgbWFpbmx5IGZvciB3ZWJHTCB1diB1cGRhdGVzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVpcmVzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgVVYgZGF0YSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgYXJlYSBvZiB0aGUgQmFzZVRleHR1cmUgaW1hZ2UgdG8gYWN0dWFsbHkgY29weSB0byB0aGUgQ2FudmFzIC8gV2ViR0wgd2hlbiByZW5kZXJpbmcsXG4gICAgICogaXJyZXNwZWN0aXZlIG9mIHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBvciBwbGFjZW1lbnQgKHdoaWNoIGNhbiBiZSBpbmZsdWVuY2VkIGJ5IHRyaW1tZWQgdGV4dHVyZSBhdGxhc2VzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jcm9wID0gY3JvcCB8fCBmcmFtZTsvL25ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdGF0ZSA9ICEhcm90YXRlO1xuXG4gICAgaWYgKGJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBmcmFtZSB3ZSBzaG91bGQgbW9uaXRvciBmb3IgYW55IGJhc2UgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlLm9uY2UoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZyYW1lIG9yIHRoZSBiYXNlVGV4dHVyZSBpcyB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICovXG4gICAgZnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgICAgICAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50cmltICYmICF0aGlzLnJvdGF0ZSAmJiAoZnJhbWUueCArIGZyYW1lLndpZHRoID4gdGhpcy5iYXNlVGV4dHVyZS53aWR0aCB8fCBmcmFtZS55ICsgZnJhbWUuaGVpZ2h0ID4gdGhpcy5iYXNlVGV4dHVyZS5oZWlnaHQpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dHVyZSBFcnJvcjogZnJhbWUgZG9lcyBub3QgZml0IGluc2lkZSB0aGUgYmFzZSBUZXh0dXJlIGRpbWVuc2lvbnMgJyArIHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5zb3VyY2UgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50cmltKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wID0gZnJhbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlcyB0aGlzIHRleHR1cmUgb24gdGhlIGdwdS5cbiAqXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5iYXNlVGV4dHVyZS51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyBsb2FkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlTG9hZGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIC8vIFRPRE8gdGhpcyBjb2RlIGxvb2tzIGNvbmZ1c2luZy4uIGJvbyB0byBhYnVzaW5nIGdldHRlcnMgYW5kIHNldHRlcnNzIVxuICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy5fZnJhbWU7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyB1cGRhdGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZVVwZGF0ZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSBiYXNlVGV4dHVyZS53aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSBiYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlPWZhbHNlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlKVxue1xuICAgIGlmICh0aGlzLmJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGRlc3Ryb3lCYXNlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG4gICAgdGhpcy50cmltID0gbnVsbDtcbiAgICB0aGlzLmNyb3AgPSBudWxsO1xuXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UsIHRoaXMpO1xuICAgIHRoaXMub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGV4dHVyZSBvYmplY3QgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLmZyYW1lLCB0aGlzLmNyb3AsIHRoaXMudHJpbSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5fdXBkYXRlVXZzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuX3V2cylcbiAgICB7XG4gICAgICAgIHRoaXMuX3V2cyA9IG5ldyBUZXh0dXJlVXZzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXZzLnNldCh0aGlzLmNyb3AsIHRoaXMuYmFzZVRleHR1cmUsIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFRleHR1cmUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSAgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gY3Jvc3NvcmlnaW4ge2Jvb2xlYW59IFdoZXRoZXIgcmVxdWVzdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY3Jvc3NvcmlnaW5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21JbWFnZShpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xuICAgICAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gdGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICh0eXBlb2YgdmlkZW8gPT09ICdzdHJpbmcnKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFRleHR1cmUuZnJvbVZpZGVvVXJsKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSB2aWRlbyB1cmwuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvVXJsIHtzdHJpbmd9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW9VcmwgPSBmdW5jdGlvbiAodmlkZW9VcmwsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHZpZGVvVXJsLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIHRleHR1cmUgdG8gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuIFRoaXMgY2FjaGUgaXMgc2hhcmVkIGFjcm9zcyB0aGUgd2hvbGUgUElYSSBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIFRleHR1cmUgdG8gYWRkIHRvIHRoZSBjYWNoZS5cbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIGJlIHN0b3JlZCBhZ2FpbnN0LlxuICovXG5UZXh0dXJlLmFkZFRleHR1cmVUb0NhY2hlID0gZnVuY3Rpb24gKHRleHR1cmUsIGlkKVxue1xuICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpZF0gPSB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB0ZXh0dXJlIGZyb20gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCBvZiB0aGUgdGV4dHVyZSB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRoYXQgd2FzIHJlbW92ZWRcbiAqL1xuVGV4dHVyZS5yZW1vdmVUZXh0dXJlRnJvbUNhY2hlID0gZnVuY3Rpb24gKGlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBBbiBlbXB0eSB0ZXh0dXJlLCB1c2VkIG9mdGVuIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBtdWx0aXBsZSBlbXB0eSB0ZXh0dXJlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZS5FTVBUWSA9IG5ldyBUZXh0dXJlKG5ldyBCYXNlVGV4dHVyZSgpKTtcbiIsIlxuLyoqXG4gKiBBIHN0YW5kYXJkIG9iamVjdCB0byBzdG9yZSB0aGUgVXZzIG9mIGEgdGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmVVdnMoKVxue1xuICAgIHRoaXMueDAgPSAwO1xuICAgIHRoaXMueTAgPSAwO1xuXG4gICAgdGhpcy54MSA9IDE7XG4gICAgdGhpcy55MSA9IDA7XG5cbiAgICB0aGlzLngyID0gMTtcbiAgICB0aGlzLnkyID0gMTtcblxuICAgIHRoaXMueDMgPSAwO1xuICAgIHRoaXMueTMgPSAxO1xuXG4gICAgdGhpcy54eTBfdWludDMyID0gMDtcbiAgICB0aGlzLnh5MV91aW50MzIgPSAwO1xuICAgIHRoaXMueHkyX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTNfdWludDMyID0gMDtcblxuICAgIHRoaXMudXZzX3VpbnQzMiA9IG5ldyBVaW50MzJBcnJheSg0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVVdnM7XG5cbi8qKlxuICogU2V0cyB0aGUgdGV4dHVyZSBVdnMgYmFzZWQgb24gdGhlIGdpdmVuIGZyYW1lIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gZnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIGJhc2VGcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gcm90YXRlIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgcm90YXRlZFxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZVV2cy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZyYW1lLCBiYXNlRnJhbWUsIHJvdGF0ZSlcbntcbiAgICB2YXIgdHcgPSBiYXNlRnJhbWUud2lkdGg7XG4gICAgdmFyIHRoID0gYmFzZUZyYW1lLmhlaWdodDtcblxuICAgIGlmKHJvdGF0ZSlcbiAgICB7XG4gICAgICAgIHRoaXMueDAgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSBmcmFtZS55IC8gdGg7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy54MCA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcbiAgICB9XG5cbiAgICB0aGlzLnV2c191aW50MzJbMF0gPSAoKCh0aGlzLnkwICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDAgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsxXSA9ICgoKHRoaXMueTEgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MSAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzJdID0gKCgodGhpcy55MiAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngyICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbM10gPSAoKCh0aGlzLnkzICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDMgKiA2NTUzNSkgJiAweEZGRkYpO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIG9mIGEgW3BsYXlpbmddIFZpZGVvLlxuICpcbiAqIFZpZGVvIGJhc2UgdGV4dHVyZXMgbWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QgaW4gdGhlaXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNldmVyYWwgd2F5cywgc3VjaCBhczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCgnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHsgc3JjOiAnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9KTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbJy92aWRlby53ZWJtJywgJy92aWRlby5tcDQnXSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoW1xuICogICAgIHsgc3JjOiAnL3ZpZGVvLndlYm0nLCBtaW1lOiAndmlkZW8vd2VibScgfSxcbiAqICAgICB7IHNyYzogJy92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9XG4gKiBdKTtcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgW1wiZGV1c1wiIGRlbW9dKGh0dHA6Ly93d3cuZ29vZGJveWRpZ2l0YWwuY29tL3BpeGlqcy9leGFtcGxlcy9kZXVzLykuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkJhc2VUZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gVmlkZW9CYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmlkZW8gc291cmNlIGVsZW1lbnQgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIC8vIGhvb2sgaW4gaGVyZSB0byBjaGVjayBpZiB2aWRlbyBpcyBhbHJlYWR5IGF2YWlsYWJsZS5cbiAgICAvLyBCYXNlVGV4dHVyZSBsb29rcyBmb3IgYSBzb3VyY2UuY29tcGxldGUgYm9vbGVhbiwgcGx1cyB3aWR0aCAmIGhlaWdodC5cblxuICAgIGlmICgoc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0VOT1VHSF9EQVRBIHx8IHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9GVVRVUkVfREFUQSkgJiYgc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICBzb3VyY2UuY29tcGxldGUgPSB0cnVlO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgc291cmNlLCBzY2FsZU1vZGUpO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBiYXNlIHRleHR1cmUgYXV0b21hdGljYWxseSB1cGRhdGUgaXRzZWxmLCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX29uVXBkYXRlID0gdGhpcy5fb25VcGRhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkNhblBsYXkgPSB0aGlzLl9vbkNhblBsYXkuYmluZCh0aGlzKTtcblxuICAgIGlmICghc291cmNlLmNvbXBsZXRlKVxuICAgIHtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIC8vIHN0YXJ0ZWQgcGxheWluZy4uXG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fb25QbGF5U3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX29uUGxheVN0b3AuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fX2xvYWRlZCA9IGZhbHNlO1xufVxuXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZVRleHR1cmUucHJvdG90eXBlKTtcblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmlkZW9CYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9CYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3Agb2YgdGhlIHZpZGVvIGJhc2UgdGV4dHVyZSwgb25seSBydW5zIHdoZW4gYXV0b1VwZGF0ZSBpcyBzZXQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUnVucyB0aGUgdXBkYXRlIGxvb3Agd2hlbiB0aGUgdmlkZW8gaXMgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBwYXVzZSBldmVudCBpcyB0cmlnZ2VyZWQsIHN0b3BzIHRoZSB1cGRhdGUgbG9vcFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgdmlkZW8gaXMgbG9hZGVkIGFuZCByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uQ2FuUGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2UudmlkZW9XaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnNvdXJjZS52aWRlb0hlaWdodDtcblxuICAgICAgICB0aGlzLnNvdXJjZS5wbGF5KCk7XG5cbiAgICAgICAgLy8gcHJldmVudCBtdWx0aXBsZSBsb2FkZWQgZGlzcGF0Y2hlcy4uXG4gICAgICAgIGlmICghdGhpcy5fX2xvYWRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHRoaXMuc291cmNlLl9waXhpSWQgXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlLl9waXhpSWQ7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogTWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXZpZGVvLl9waXhpSWQpXG4gICAge1xuICAgICAgICB2aWRlby5fcGl4aUlkID0gJ3ZpZGVvXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3ZpZGVvLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IFZpZGVvQmFzZVRleHR1cmUodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHZpZGVvLl9waXhpSWQgXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBCYXNlVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqIFRoaXMgQmFzZVRleHR1cmUgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYSB0ZXh0dXJlXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvU3JjIHtzdHJpbmd8b2JqZWN0fHN0cmluZ1tdfG9iamVjdFtdfSBUaGUgVVJMKHMpIGZvciB0aGUgdmlkZW8uXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLnNyY10ge3N0cmluZ30gT25lIG9mIHRoZSBzb3VyY2UgdXJscyBmb3IgdGhlIHZpZGVvXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLm1pbWVdIHtzdHJpbmd9IFRoZSBtaW1ldHlwZSBvZiB0aGUgdmlkZW8gKGUuZy4gJ3ZpZGVvL21wNCcpLiBJZiBub3Qgc3BlY2lmaWVkXG4gKiAgdGhlIHVybCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBtaW1lIHR5cGUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwgPSBmdW5jdGlvbiAodmlkZW9TcmMsIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXG4gICAgLy8gYXJyYXkgb2Ygb2JqZWN0cyBvciBzdHJpbmdzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW9TcmMpKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWRlb1NyYy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjW2ldLnNyYyB8fCB2aWRlb1NyY1tpXSwgdmlkZW9TcmNbaV0ubWltZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNpbmdsZSBvYmplY3Qgb3Igc3RyaW5nXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjLnNyYyB8fCB2aWRlb1NyYywgdmlkZW9TcmMubWltZSkpO1xuICAgIH1cblxuICAgIHZpZGVvLmxvYWQoKTtcbiAgICB2aWRlby5wbGF5KCk7XG5cbiAgICByZXR1cm4gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSk7XG59O1xuXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzID0gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsO1xuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2UocGF0aCwgdHlwZSlcbntcbiAgICBpZiAoIXR5cGUpXG4gICAge1xuICAgICAgICB0eXBlID0gJ3ZpZGVvLycgKyBwYXRoLnN1YnN0cihwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gcGF0aDtcbiAgICBzb3VyY2UudHlwZSA9IHR5cGU7XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgLy8gSW50ZXJuYWwgZXZlbnQgdXNlZCBieSBjb21wb3NlZCBlbWl0dGVyXG4gICAgVElDSyA9ICd0aWNrJztcblxuLyoqXG4gKiBBIFRpY2tlciBjbGFzcyB0aGF0IHJ1bnMgYW4gdXBkYXRlIGxvb3AgdGhhdCBvdGhlciBvYmplY3RzIGxpc3RlbiB0by5cbiAqIFRoaXMgY2xhc3MgaXMgY29tcG9zZWQgYXJvdW5kIGFuIEV2ZW50RW1pdHRlciBvYmplY3QgdG8gYWRkIGxpc3RlbmVyc1xuICogbWVhbnQgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lLlxuICogQW5pbWF0aW9uIGZyYW1lcyBhcmUgcmVxdWVzdGVkIG9ubHkgd2hlbiBuZWNlc3NhcnksXG4gKiBlLmcuIFdoZW4gdGhlIHRpY2tlciBpcyBzdGFydGVkIGFuZCB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbmZ1bmN0aW9uIFRpY2tlcigpXG57XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRpY2sgbWV0aG9kIGJvdW5kIHRvIHRpY2tlciBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaW4gZWFybHkgMjAxNSwgRnVuY3Rpb24uYmluZFxuICAgICAqIGlzIHN0aWxsIDYwJSBzbG93ZXIgaW4gaGlnaCBwZXJmb3JtYW5jZSBzY2VuYXJpb3MuXG4gICAgICogQWxzbyBzZXBhcmF0aW5nIGZyYW1lIHJlcXVlc3RzIGZyb20gdXBkYXRlIG1ldGhvZFxuICAgICAqIHNvIGxpc3RlbmVycyBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGFuZCB3aXRoXG4gICAgICogYW55IGFuaW1hdGlvbiBBUEksIGp1c3QgaW52b2tlIHRpY2tlci51cGRhdGUodGltZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RpY2sgPSBmdW5jdGlvbiBfdGljayh0aW1lKSB7XG5cbiAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgbm93XG4gICAgICAgICAgICBfdGhpcy51cGRhdGUodGltZSk7XG4gICAgICAgICAgICAvLyBMaXN0ZW5lciBzaWRlIGVmZmVjdHMgbWF5IGhhdmUgbW9kaWZpZWQgdGlja2VyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQgJiYgX3RoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiBfdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fdGljayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZW1pdHRlciB1c2VkIHRvIGZpcmUgJ3RpY2snIGV2ZW50XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9lbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY3VycmVudCBmcmFtZSByZXF1ZXN0IElEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdmFsdWUgbWFuYWdlZCBieSBtaW5GUFMgcHJvcGVydHkgc2V0dGVyIGFuZCBnZXR0ZXIuXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHVwZGF0ZXMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBzaG91bGQgaW52b2tlIHRoZSBtZXRob2RcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBhdXRvbWF0aWNhbGx5XG4gICAgICogd2hlbiBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1N0YXJ0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTY2FsYXIgdGltZSB2YWx1ZSBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbWluRlBTfVxuICAgICAqIGFuZCBpcyBzY2FsZWQgd2l0aCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfS5cbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhcCBtYXkgYmUgZXhjZWVkZWQgYnkgc2NhbGluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kZWx0YVRpbWUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGltZSBlbGFwc2VkIGluIG1pbGxpc2Vjb25kcyBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBPcHBvc2VkIHRvIHdoYXQgdGhlIHNjYWxhciB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX1cbiAgICAgKiBpcyBiYXNlZCwgdGhpcyB2YWx1ZSBpcyBuZWl0aGVyIGNhcHBlZCBub3Igc2NhbGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMSAvIFRBUkdFVF9GUE1TXG4gICAgICovXG4gICAgdGhpcy5lbGFwc2VkTVMgPSAxIC8gQ09OU1QuVEFSR0VUX0ZQTVM7IC8vIGRlZmF1bHQgdG8gdGFyZ2V0IGZyYW1lIHRpbWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBsYXN0IHRpbWUge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9IHdhcyBpbnZva2VkLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgYWxzbyByZXNldCBpbnRlcm5hbGx5IG91dHNpZGUgb2YgaW52b2tpbmdcbiAgICAgKiB1cGRhdGUsIGJ1dCBvbmx5IHdoZW4gYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxhc3RUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEZhY3RvciBvZiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNjYWxlcyB0aWNrZXIuZGVsdGFUaW1lIHRvIHdoYXQgd291bGQgYmVcbiAgICAgKiAvLyB0aGUgZXF1aXZhbGVudCBvZiBhcHByb3hpbWF0ZWx5IDEyMCBGUFNcbiAgICAgKiB0aWNrZXIuc3BlZWQgPSAyO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICogYHRydWVgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBgZmFsc2VgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RvcH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIFdoaWxlIGBmYWxzZWAsIHRoaXMgdmFsdWUgbWF5IGNoYW5nZSB0byBgdHJ1ZWAgaW4gdGhlXG4gICAgICogZXZlbnQgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGJlaW5nIGB0cnVlYFxuICAgICAqIGFuZCBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWNrZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lcyBwZXIgc2Vjb25kIGF0IHdoaWNoIHRoaXMgdGlja2VyIGlzIHJ1bm5pbmcuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgYXBwcm94aW1hdGVseSA2MCBpbiBtb3N0IG1vZGVybiBicm93c2Vycy5cbiAgICAgKiAqKk5vdGU6KiogVGhpcyBkb2VzIG5vdCBmYWN0b3IgaW4gdGhlIHZhbHVlIG9mXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0sIHdoaWNoIGlzIHNwZWNpZmljXG4gICAgICogdG8gc2NhbGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBGUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5lbGFwc2VkTVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGFsbG93ZWQgdG9cbiAgICAgKiBlbGFwc2UgYmV0d2VlbiBpbnZva2luZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0uXG4gICAgICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNhcCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gICAgICogYnV0IGRvZXMgbm90IGVmZmVjdCB0aGUgbWVhc3VyZWQgdmFsdWUgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNGUFN9LlxuICAgICAqIFdoZW4gc2V0dGluZyB0aGlzIHByb3BlcnR5IGl0IGlzIGNsYW1wZWQgdG8gYSB2YWx1ZSBiZXR3ZWVuXG4gICAgICogYDBgIGFuZCBgUElYSS5UQVJHRVRfRlBNUyAqIDEwMDBgLlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICBtaW5GUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZwcylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gQ2xhbXA6IDAgdG8gVEFSR0VUX0ZQTVNcbiAgICAgICAgICAgIHZhciBtaW5GUE1TID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZnBzKSAvIDEwMDAsIENPTlNULlRBUkdFVF9GUE1TKTtcbiAgICAgICAgICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEgLyBtaW5GUE1TO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbFxuICogZW1pdHRlciBoYXMgbGlzdGVuZXJzLCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fcmVxdWVzdElmTmVlZGVkID0gZnVuY3Rpb24gX3JlcXVlc3RJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiB0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIC8vIGVuc3VyZSBjYWxsYmFja3MgZ2V0IGNvcnJlY3QgZGVsdGFcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fdGljayk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IGNhbmNlbHMgYSBwZW5kaW5nIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9jYW5jZWxJZk5lZWRlZCA9IGZ1bmN0aW9uIF9jYW5jZWxJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIHRoZSB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZCBpdCBjaGVja3MgaWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHlcbiAqIGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy4gSWYgdGhlc2VcbiAqIGNvbmRpdGlvbnMgYXJlIG1ldCwgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgdGlja2VyIGhhcyBub3RcbiAqIGJlZW4gc3RhcnRlZCwgYnV0IGF1dG9TdGFydCBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHRpY2tlciBzdGFydHMgbm93LFxuICogYW5kIGNvbnRpbnVlcyB3aXRoIHRoZSBwcmV2aW91cyBjb25kaXRpb25zIHRvIHJlcXVlc3QgYSBuZXcgZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fc3RhcnRJZlBvc3NpYmxlID0gZnVuY3Rpb24gX3N0YXJ0SWZQb3NzaWJsZSgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmF1dG9TdGFydClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb259IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIHVwZGF0ZXNcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb25jZX0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3Igb25lIHVwZGF0ZVxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIGFkZE9uY2UoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbmNlKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb2ZmfSBpbnRlcm5hbGx5IGZvciAndGljaycgZXZlbnQuXG4gKiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyBmb3IgJ3RpY2snIGV2ZW50LlxuICogSWYgaXQgZG9lcywgdGhlbiBpdCBjYW5jZWxzIHRoZSBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHBhcmFtIFtmbl0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZFxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0IHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vZmYoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgaWYgKCF0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyBsaXN0ZW5lcnNcbiAqIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIHN0YXJ0KClcbntcbiAgICBpZiAoIXRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgcmVxdWVzdGVkXG4gKiBhbiBhbmltYXRpb24gZnJhbWUgaXQgaXMgY2FuY2VsZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcCgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVHJpZ2dlcnMgYW4gdXBkYXRlLiBBbiB1cGRhdGUgZW50YWlscyBzZXR0aW5nIHRoZVxuICogY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2VsYXBzZWRNU30sXG4gKiB0aGUgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gKiBpbnZva2luZyBhbGwgbGlzdGVuZXJzIHdpdGggY3VycmVudCBkZWx0YVRpbWUsXG4gKiBhbmQgdGhlbiBmaW5hbGx5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNsYXN0VGltZX1cbiAqIHdpdGggdGhlIHZhbHVlIG9mIGN1cnJlbnRUaW1lIHRoYXQgd2FzIHByb3ZpZGVkLlxuICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBieSBhbmltYXRpb25cbiAqIGZyYW1lIGNhbGxiYWNrcyBpZiB0aGUgdGlja2VyIGluc3RhbmNlIGhhcyBiZWVuIHN0YXJ0ZWRcbiAqIGFuZCBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSBbY3VycmVudFRpbWU9cGVyZm9ybWFuY2Uubm93KCldIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn0gdGhlIGN1cnJlbnQgdGltZSBvZiBleGVjdXRpb25cbiAqL1xuVGlja2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoY3VycmVudFRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWRNUztcblxuICAgIC8vIEFsbG93IGNhbGxpbmcgdXBkYXRlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBjdXJyZW50VGltZS5cbiAgICBjdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIHx8IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIC8vIFNhdmUgdW5jYXBwZWQgZWxhcHNlZE1TIGZvciBtZWFzdXJlbWVudFxuICAgIGVsYXBzZWRNUyA9IHRoaXMuZWxhcHNlZE1TID0gY3VycmVudFRpbWUgLSB0aGlzLmxhc3RUaW1lO1xuXG4gICAgLy8gY2FwIHRoZSBtaWxsaXNlY29uZHMgZWxhcHNlZCB1c2VkIGZvciBkZWx0YVRpbWVcbiAgICBpZiAoZWxhcHNlZE1TID4gdGhpcy5fbWF4RWxhcHNlZE1TKVxuICAgIHtcbiAgICAgICAgZWxhcHNlZE1TID0gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgIH1cblxuICAgIHRoaXMuZGVsdGFUaW1lID0gZWxhcHNlZE1TICogQ09OU1QuVEFSR0VUX0ZQTVMgKiB0aGlzLnNwZWVkO1xuXG4gICAgLy8gSW52b2tlIGxpc3RlbmVycyBhZGRlZCB0byBpbnRlcm5hbCBlbWl0dGVyXG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KFRJQ0ssIHRoaXMuZGVsdGFUaW1lKTtcblxuICAgIHRoaXMubGFzdFRpbWUgPSBjdXJyZW50VGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGlja2VyO1xuIiwidmFyIFRpY2tlciA9IHJlcXVpcmUoJy4vVGlja2VyJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZCB0aWNrZXIgaW5zdGFuY2UgdXNlZCBieSB7QGxpbmsgUElYSS5leHRyYXMuTW92aWVDbGlwfS5cbiAqIGFuZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICogVGhlIHByb3BlcnR5IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBpcyBzZXQgdG8gYHRydWVgXG4gKiBmb3IgdGhpcyBpbnN0YW5jZS4gUGxlYXNlIGZvbGxvdyB0aGUgZXhhbXBsZXMgZm9yIHVzYWdlLCBpbmNsdWRpbmdcbiAqIGhvdyB0byBvcHQtb3V0IG9mIGF1dG8tc3RhcnRpbmcgdGhlIHNoYXJlZCB0aWNrZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciB0aWNrZXIgPSBQSVhJLnRpY2tlci5zaGFyZWQ7XG4gKiAvLyBTZXQgdGhpcyB0byBwcmV2ZW50IHN0YXJ0aW5nIHRoaXMgdGlja2VyIHdoZW4gbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqIC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyB0cnVlIG9ubHkgZm9yIHRoZSBQSVhJLnRpY2tlci5zaGFyZWQgaW5zdGFuY2UuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiAvLyBGWUksIGNhbGwgdGhpcyB0byBlbnN1cmUgdGhlIHRpY2tlciBpcyBzdG9wcGVkLiBJdCBzaG91bGQgYmUgc3RvcHBlZFxuICogLy8gaWYgeW91IGhhdmUgbm90IGF0dGVtcHRlZCB0byByZW5kZXIgYW55dGhpbmcgeWV0LlxuICogdGlja2VyLnN0b3AoKTtcbiAqIC8vIENhbGwgdGhpcyB3aGVuIHlvdSBhcmUgcmVhZHkgZm9yIGEgcnVubmluZyBzaGFyZWQgdGlja2VyLlxuICogdGlja2VyLnN0YXJ0KCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFlvdSBtYXkgdXNlIHRoZSBzaGFyZWQgdGlja2VyIHRvIHJlbmRlci4uLlxuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoODAwLCA2MDApO1xuICogdmFyIHN0YWdlID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiB2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIpO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZW5kZXJlci52aWV3KTtcbiAqIHRpY2tlci5hZGQoZnVuY3Rpb24gKHRpbWUpIHtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE9yIHlvdSBjYW4ganVzdCB1cGRhdGUgaXQgbWFudWFsbHkuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiB0aWNrZXIuc3RvcCgpO1xuICogZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XG4gKiAgICAgdGlja2VyLnVwZGF0ZSh0aW1lKTtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAqIH1cbiAqIGFuaW1hdGUocGVyZm9ybWFuY2Uubm93KCkpO1xuICpcbiAqIEB0eXBlIHtQSVhJLnRpY2tlci5UaWNrZXJ9XG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xudmFyIHNoYXJlZCA9IG5ldyBUaWNrZXIoKTtcbnNoYXJlZC5hdXRvU3RhcnQgPSB0cnVlO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS50aWNrZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc2hhcmVkOiBzaGFyZWQsXG4gICAgVGlja2VyOiBUaWNrZXJcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gZnVuY3Rpb24gKHNpemUpXG57XG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBhcnJheSwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgXG4gICAgdmFyIHRvdGFsSW5kaWNlcyA9IHNpemUgKiA2O1xuXG4gICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodG90YWxJbmRpY2VzKTtcblxuXHQvLyBmaWxsIHRoZSBpbmRpY2VzIHdpdGggdGhlIHF1YWRzIHRvIGRyYXdcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IHRvdGFsSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICBpbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICBpbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHM7IiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudXRpbHNcbiAqL1xudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgX3VpZDogMCxcbiAgICBfc2FpZEhlbGxvOiBmYWxzZSxcblxuICAgIEV2ZW50RW1pdHRlcjogICByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgcGx1Z2luVGFyZ2V0OiAgIHJlcXVpcmUoJy4vcGx1Z2luVGFyZ2V0JyksXG4gICAgYXN5bmM6ICAgICAgICAgIHJlcXVpcmUoJ2FzeW5jJyksXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZS5cbiAgICAgKi9cbiAgICB1aWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICByZXR1cm4gKyt1dGlscy5fdWlkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYW4gW1IsIEcsIEJdIGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHBhcmFtICB7bnVtYmVyW119IFtvdXQ9W11dXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgW1IsIEcsIEJdIG9mIHRoZSBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgycmdiOiBmdW5jdGlvbiAoaGV4LCBvdXQpXG4gICAge1xuICAgICAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICAgICAgb3V0WzBdID0gKGhleCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMV0gPSAoaGV4ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzJdID0gKGhleCAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnN0cmluZzogZnVuY3Rpb24gKGhleClcbiAgICB7XG4gICAgICAgIGhleCA9IGhleC50b1N0cmluZygxNik7XG4gICAgICAgIGhleCA9ICcwMDAwMDAnLnN1YnN0cigwLCA2IC0gaGV4Lmxlbmd0aCkgKyBoZXg7XG5cbiAgICAgICAgcmV0dXJuICcjJyArIGhleDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkgdG8gYSBoZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmdiIHtudW1iZXJbXX1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb2xvciBudW1iZXJcbiAgICAgKi9cbiAgICByZ2IyaGV4OiBmdW5jdGlvbiAocmdiKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgocmdiWzBdKjI1NSA8PCAxNikgKyAocmdiWzFdKjI1NSA8PCA4KSArIHJnYlsyXSoyNTUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZFxuICAgICAqL1xuICAgIGNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXM6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBuZ0hlYWQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFCQVFNQUFBREQ4cDJPQUFBQUExQk1WRVgvJztcbiAgICAgICAgdmFyIHBuZ0VuZCA9ICdBQUFBQ2tsRVFWUUkxMk5nQUFBQUFnQUI0aUc4TXdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG4gICAgICAgIHZhciBtYWdlbnRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSA2O1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcblxuICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1hZ2VudGEsIDAsIDApO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh5ZWxsb3csIDIsIDApO1xuXG4gICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwwLDEsMSkuZGF0YTtcblxuICAgICAgICByZXR1cm4gKGRhdGFbMF0gPT09IDI1NSAmJiBkYXRhWzFdID09PSAwICYmIGRhdGFbMl0gPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIG51bWJlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICogdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIFN0YXJsaW5nIEZyYW1ld29yayBhcyBpdHMgcHJldHR5IG5lYXQgOylcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICovXG4gICAgZ2V0TmV4dFBvd2VyT2ZUd286IGZ1bmN0aW9uIChudW1iZXIpXG4gICAge1xuICAgICAgICAvLyBzZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG93ZXJfb2ZfdHdvI0Zhc3RfYWxnb3JpdGhtX3RvX2NoZWNrX2lmX2FfcG9zaXRpdmVfbnVtYmVyX2lzX2FfcG93ZXJfb2ZfdHdvXG4gICAgICAgIGlmIChudW1iZXIgPiAwICYmIChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDE7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPCBudW1iZXIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzdWx0IDw8PSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBtYWtlIGEgcG93ZXIgb2YgdHdvIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9XG4gICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybiAod2lkdGggPiAwICYmICh3aWR0aCAmICh3aWR0aCAtIDEpKSA9PT0gMCAmJiBoZWlnaHQgPiAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIGFuIGFzc2V0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwcmVmaXhcbiAgICAgKiB1c2VkIGJ5IHNwcml0ZXNoZWV0cyBhbmQgaW1hZ2UgdXJsc1xuICAgICAqXG4gICAgICogQHBhcmFtIHVybCB7c3RyaW5nfSB0aGUgaW1hZ2UgcGF0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRSZXNvbHV0aW9uT2ZVcmw6IGZ1bmN0aW9uICh1cmwpXG4gICAge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IENPTlNULlJFVElOQV9QUkVGSVguZXhlYyh1cmwpO1xuXG4gICAgICAgIGlmIChyZXNvbHV0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlc29sdXRpb25bMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvZ3Mgb3V0IHRoZSB2ZXJzaW9uIGFuZCByZW5kZXJlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBydW5uaW5nIGluc3RhbmNlIG9mIFBJWEkuXG4gICAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoaXMgbWVzc2FnZSB5b3UgY2FuIHNldCBgUElYSS51dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtgXG4gICAgICogc28gdGhlIGxpYnJhcnkgdGhpbmtzIGl0IGFscmVhZHkgc2FpZCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgZG9pbmcgdGhhdCB3aWxsIGZvcmV2ZXJcbiAgICAgKiBtYWtlcyB5b3UgYSBqZXJrIGZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBzdHJpbmcgcmVuZGVyZXIgdHlwZSB0byBsb2cuXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIHNheUhlbGxvOiBmdW5jdGlvbiAodHlwZSlcbiAgICB7XG4gICAgICAgIGlmICh1dGlscy5fc2FpZEhlbGxvKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZScpID4gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW1xuICAgICAgICAgICAgICAgICdcXG4gJWMgJWMgJWMgUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSDinLAgJyArIHR5cGUgKyAnIOKcsCAgJWMgJyArICcgJWMgJyArICcgaHR0cDovL3d3dy5waXhpanMuY29tLyAgJWMgJWMg4pmlJWPimaUlY+KZpSBcXG5cXG4nLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjY2YTU7IGJhY2tncm91bmQ6ICMwMzAzMDc7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmZjM2RjOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7J1xuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3MpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1BpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0gJyArIHR5cGUgKyAnIC0gaHR0cDovL3d3dy5waXhpanMuY29tLycpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmb3IgY2hlY2tpbmcgZm9yIHdlYmdsIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNXZWJHTFN1cHBvcnRlZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHZhciBjb250ZXh0T3B0aW9ucyA9IHsgc3RlbmNpbDogdHJ1ZSB9O1xuICAgICAgICB0cnlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgY29udGV4dE9wdGlvbnMpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBjb250ZXh0T3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIShnbCAmJiBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnN0ZW5jaWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzaWduIG9mIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIG4ge251bWJlcn1cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIG4gaXMgMCwgLTEgaWYgbiBpcyBuZWdhdGl2ZSwgMSBpZiBuIGkgcG9zaXRpdmVcbiAgICAgKi9cbiAgICBzaWduOiBmdW5jdGlvbiAobilcbiAgICB7XG4gICAgICAgIHJldHVybiBuID8gKG4gPCAwID8gLTEgOiAxKSA6IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZUl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydElkeCBUaGUgaW5kZXggdG8gYmVnaW4gcmVtb3ZpbmcgZnJvbSAoaW5jbHVzaXZlKVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVJdGVtczogZnVuY3Rpb24gKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KVxuICAgIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN0YXJ0SWR4ID49IGxlbmd0aCB8fCByZW1vdmVDb3VudCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVtb3ZlQ291bnQgPSAoc3RhcnRJZHgrcmVtb3ZlQ291bnQgPiBsZW5ndGggPyBsZW5ndGgtc3RhcnRJZHggOiByZW1vdmVDb3VudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydElkeCwgbGVuID0gbGVuZ3RoLXJlbW92ZUNvdW50OyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyLmxlbmd0aCA9IGxlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge30sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge31cbn07XG4iLCIvKipcbiAqIE1peGlucyBmdW5jdGlvbmFsaXR5IHRvIG1ha2UgYW4gb2JqZWN0IGhhdmUgXCJwbHVnaW5zXCIuXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS51dGlsc1xuICogQHBhcmFtIG9iaiB7b2JqZWN0fSBUaGUgb2JqZWN0IHRvIG1peCBpbnRvLlxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgcGx1Z2luVGFyZ2V0Lm1peGluKE15T2JqZWN0KTtcbiAqL1xuZnVuY3Rpb24gcGx1Z2luVGFyZ2V0KG9iailcbntcbiAgICBvYmouX19wbHVnaW5zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcGx1Z2luIHRvIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHBsdWdpbk5hbWUge3N0cmluZ30gVGhlIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQuXG4gICAgICogQHBhcmFtIGN0b3Ige0Z1bmN0aW9ufSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBwbHVnaW4uXG4gICAgICovXG4gICAgb2JqLnJlZ2lzdGVyUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGN0b3IpXG4gICAge1xuICAgICAgICBvYmouX19wbHVnaW5zW3BsdWdpbk5hbWVdID0gY3RvcjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5pbml0UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLnBsdWdpbnMgfHwge307XG5cbiAgICAgICAgZm9yICh2YXIgbyBpbiBvYmouX19wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBuZXcgKG9iai5fX3BsdWdpbnNbb10pKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmRlc3Ryb3lQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGZvciAodmFyIG8gaW4gdGhpcy5wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG51bGw7XG4gICAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvKipcbiAgICAgKiBNaXhlcyBpbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGx1Z2luVGFyZ2V0IGludG8gYW5vdGhlciBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3Qge29iamVjdH0gVGhlIG9iaiB0byBtaXggaW50b1xuICAgICAqL1xuICAgIG1peGluOiBmdW5jdGlvbiBtaXhpbihvYmopXG4gICAge1xuICAgICAgICBwbHVnaW5UYXJnZXQob2JqKTtcbiAgICB9XG59O1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKSxcbiAgICBtZXNoID0gcmVxdWlyZSgnLi9tZXNoJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi9leHRyYXMnKSxcbiAgICBmaWx0ZXJzID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgU3ByaXRlQmF0Y2hcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkuUGFydGljbGVDb250YWluZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlQmF0Y2ggPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuJyk7XG59O1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIEFzc2V0TG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLmxvYWRlcnMuTG9hZGVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuQXNzZXRMb2FkZXIgPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy4nKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvcmUsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RhZ2VcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RhZ2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignWW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIFBJWEkgU3RhZ2UgYW55IG1vcmUsIHlvdSBjYW4gc2ltcGx5IHJlbmRlciBhbnkgY29udGFpbmVyLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgRGlzcGxheU9iamVjdENvbnRhaW5lclxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBEaXNwbGF5T2JqZWN0Q29udGFpbmVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Rpc3BsYXlPYmplY3RDb250YWluZXIgaGFzIGJlZW4gc2hvcnRlbmVkIHRvIENvbnRhaW5lciwgcGxlYXNlIHVzZSBDb250YWluZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdHJpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdHJpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgU3RyaXAgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBNZXNoIGFuZCBtb3ZlZCB0byBtZXNoLk1lc2gsIHBsZWFzZSB1c2UgbWVzaC5NZXNoIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guTWVzaDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFJvcGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLlJvcGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgUm9wZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgUm9wZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBtZXNoLlJvcGUsIHBsZWFzZSB1c2UgbWVzaC5Sb3BlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guUm9wZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIE1vdmllQ2xpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXBcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgTW92aWVDbGlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBNb3ZpZUNsaXAgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLk1vdmllQ2xpcCwgcGxlYXNlIHVzZSBleHRyYXMuTW92aWVDbGlwIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5Nb3ZpZUNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUaWxpbmdTcHJpdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRpbGluZ1Nwcml0ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGlsaW5nU3ByaXRlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5UaWxpbmdTcHJpdGUsIHBsZWFzZSB1c2UgZXh0cmFzLlRpbGluZ1Nwcml0ZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuVGlsaW5nU3ByaXRlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQml0bWFwVGV4dFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJpdG1hcFRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJpdG1hcFRleHQgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLkJpdG1hcFRleHQsIHBsZWFzZSB1c2UgZXh0cmFzLkJpdG1hcFRleHQgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLkJpdG1hcFRleHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBibGVuZE1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgYmxlbmRNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYmxlbmRNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBCTEVORF9NT0RFUywgcGxlYXNlIHVzZSBCTEVORF9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkJMRU5EX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2NhbGVNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIHNjYWxlTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHNjYWxlTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gU0NBTEVfTU9ERVMsIHBsZWFzZSB1c2UgU0NBTEVfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TQ0FMRV9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5CYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCYXNlVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuQmFzZVRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5UZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLlRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5UZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5UZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgbWF0aFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIG1hdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBtYXRoIG5hbWVzcGFjZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgYWNjZXNzIG1lbWJlcnMgYWxyZWFkeSBhY2Nlc3NpYmxlIG9uIFBJWEkuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBQSVhJLlNwcml0ZSNzZXRUZXh0dXJlXG4gKiBAc2VlIFBJWEkuU3ByaXRlI3RleHR1cmVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0dXJlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0dXJlIHByb3BlcnR5LCBlLmcgOiBzcHJpdGUudGV4dHVyZSA9IHRleHR1cmU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuZXh0cmFzLkJpdG1hcFRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteUJpdG1hcFRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15VGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFN0eWxlXG4gKiBAc2VlIFBJWEkuVGV4dCNzdHlsZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpXG57XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgIGNvbnNvbGUud2Fybignc2V0U3R5bGUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5LCBlLmcgOiBteVRleHQuc3R5bGUgPSBzdHlsZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAc2VlIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHR1cmUucHJvdG90eXBlLnNldEZyYW1lID0gZnVuY3Rpb24oZnJhbWUpXG57XG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIGNvbnNvbGUud2Fybignc2V0RnJhbWUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIGZyYW1lIHByb3BlcnR5LCBlLmcgOiBteVRleHR1cmUuZnJhbWUgPSBmcmFtZTsnKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpbHRlcnMsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkFic3RyYWN0RmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkFic3RyYWN0RmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEFic3RyYWN0RmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuQWJzdHJhY3RGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEFic3RyYWN0RmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQWJzdHJhY3RGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuRlhBQUZpbHRlclxuICAgICAqIEBzZWUgUElYSS5GWEFBRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEZYQUFGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5GWEFBRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBGWEFBRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuRlhBQUZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgU3ByaXRlTWFza0ZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIFNwcml0ZU1hc2tGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TcHJpdGVNYXNrRmlsdGVyO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS51dGlscy51dWlkXG4gKiBAc2VlIFBJWEkudXRpbHMudWlkXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gKi9cbmNvcmUudXRpbHMudXVpZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29uc29sZS53YXJuKCd1dGlscy51dWlkKCkgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB1dGlscy51aWQoKSBmcm9tIG5vdyBvbi4nKTtcbiAgICByZXR1cm4gY29yZS51dGlscy51aWQoKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIEJpdG1hcFRleHQgb2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0IHVzaW5nIGJpdG1hcCBmb250LiBUb1xuICogc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLCAnXFxyJyBvciAnXFxyXFxuJyBpbiB5b3VyIHN0cmluZy4gWW91IGNhbiBnZW5lcmF0ZSB0aGUgZm50IGZpbGVzIHVzaW5nOlxuICpcbiAqIEEgQml0bWFwVGV4dCBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGZvbnQgaXMgbG9hZGVkXG4gKlxuICogYGBganNcbiAqIC8vIGluIHRoaXMgY2FzZSB0aGUgZm9udCBpcyBpbiBhIGZpbGUgY2FsbGVkICdkZXN5cmVsLmZudCdcbiAqIHZhciBiaXRtYXBUZXh0ID0gbmV3IFBJWEkuZXh0cmFzLkJpdG1hcFRleHQoXCJ0ZXh0IHVzaW5nIGEgZmFuY3kgZm9udCFcIiwge2ZvbnQ6IFwiMzVweCBEZXN5cmVsXCIsIGFsaWduOiBcInJpZ2h0XCJ9KTtcbiAqIGBgYFxuICpcbiAqXG4gKiBodHRwOi8vd3d3LmFuZ2VsY29kZS5jb20vcHJvZHVjdHMvYm1mb250LyBmb3Igd2luZG93cyBvclxuICogaHR0cDovL3d3dy5ibWdseXBoLmNvbS8gZm9yIG1hYy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIHN0eWxlIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gc3R5bGUuZm9udCB7c3RyaW5nfG9iamVjdH0gVGhlIGZvbnQgZGVzY3JpcHRvciBmb3IgdGhlIG9iamVjdCwgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZyBvZiBmb3JtXG4gKiAgICAgIFwiMjRweCBGb250TmFtZVwiIG9yIFwiRm9udE5hbWVcIiBvciBhcyBhbiBvYmplY3Qgd2l0aCBleHBsaWNpdCBuYW1lL3NpemUgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5uYW1lXSB7c3RyaW5nfSBUaGUgYml0bWFwIGZvbnQgaWRcbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5zaXplXSB7bnVtYmVyfSBUaGUgc2l6ZSBvZiB0aGUgZm9udCBpbiBwaXhlbHMsIGUuZy4gMjRcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3RcbiAqICAgICAgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS50aW50PTB4RkZGRkZGXSB7bnVtYmVyfSBUaGUgdGludCBjb2xvclxuICovXG5mdW5jdGlvbiBCaXRtYXBUZXh0KHRleHQsIHN0eWxlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGxldHRlciBzcHJpdGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbHlwaHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mb250ID0ge1xuICAgICAgICB0aW50OiBzdHlsZS50aW50ICE9PSB1bmRlZmluZWQgPyBzdHlsZS50aW50IDogMHhGRkZGRkYsXG4gICAgICAgIGFsaWduOiBzdHlsZS5hbGlnbiB8fCAnbGVmdCcsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIHNpemU6IDBcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBmb250LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mb250ID0gc3R5bGUuZm9udDsgLy8gcnVuIGZvbnQgc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggd2lkdGggb2YgdGhpcyBiaXRtYXAgdGV4dCBpbiBwaXhlbHMuIElmIHRoZSB0ZXh0IHByb3ZpZGVkIGlzIGxvbmdlciB0aGFuIHRoZSB2YWx1ZSBwcm92aWRlZCwgbGluZSBicmVha3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoZSBsYXN0IHdoaXRlc3BhY2UuXG4gICAgICogRGlzYWJsZSBieSBzZXR0aW5nIHZhbHVlIHRvIDBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggbGluZSBoZWlnaHQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBUZXh0LCBpZTogd2hlbiB0cnlpbmcgdG8gdmVydGljYWxseSBhbGlnbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpcnR5IHN0YXRlIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkJpdG1hcFRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuQml0bWFwVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCaXRtYXBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCaXRtYXBUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRpbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC50aW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC50aW50ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCkgPyB2YWx1ZSA6IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdsZWZ0J1xuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGFsaWduOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQuYWxpZ247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LmFsaWduID0gdmFsdWUgfHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9udCBkZXNjcmlwdG9yIG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Rm9udH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBmb250OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWUuc2xpY2UoMSkuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gcGFyc2VJbnQodmFsdWVbMF0sIDEwKSA6IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicgPyB2YWx1ZS5zaXplIDogcGFyc2VJbnQodmFsdWUuc2l6ZSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGRhdGEgPSBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV07XG4gICAgdmFyIHBvcyA9IG5ldyBjb3JlLlBvaW50KCk7XG4gICAgdmFyIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgdmFyIGNoYXJzID0gW107XG4gICAgdmFyIGxhc3RMaW5lV2lkdGggPSAwO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBsaW5lV2lkdGhzID0gW107XG4gICAgdmFyIGxpbmUgPSAwO1xuICAgIHZhciBzY2FsZSA9IHRoaXMuX2ZvbnQuc2l6ZSAvIGRhdGEuc2l6ZTtcbiAgICB2YXIgbGFzdFNwYWNlID0gLTE7XG4gICAgdmFyIG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHQubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSB0aGlzLnRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgbGFzdFNwYWNlID0gLyhcXHMpLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpID8gaSA6IGxhc3RTcGFjZTtcblxuICAgICAgICBpZiAoLyg/OlxcclxcbnxcXHJ8XFxuKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RTcGFjZSAhPT0gLTEgJiYgdGhpcy5tYXhXaWR0aCA+IDAgJiYgcG9zLnggKiBzY2FsZSA+IHRoaXMubWF4V2lkdGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXMoY2hhcnMsIGxhc3RTcGFjZSwgaSAtIGxhc3RTcGFjZSk7XG4gICAgICAgICAgICBpID0gbGFzdFNwYWNlO1xuICAgICAgICAgICAgbGFzdFNwYWNlID0gLTE7XG5cbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFyRGF0YSA9IGRhdGEuY2hhcnNbY2hhckNvZGVdO1xuXG4gICAgICAgIGlmICghY2hhckRhdGEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZDaGFyQ29kZSAmJiBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJzLnB1c2goe3RleHR1cmU6Y2hhckRhdGEudGV4dHVyZSwgbGluZTogbGluZSwgY2hhckNvZGU6IGNoYXJDb2RlLCBwb3NpdGlvbjogbmV3IGNvcmUuUG9pbnQocG9zLnggKyBjaGFyRGF0YS54T2Zmc2V0LCBwb3MueSArIGNoYXJEYXRhLnlPZmZzZXQpfSk7XG4gICAgICAgIGxhc3RMaW5lV2lkdGggPSBwb3MueCArIChjaGFyRGF0YS50ZXh0dXJlLndpZHRoICsgY2hhckRhdGEueE9mZnNldCk7XG4gICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLnhBZHZhbmNlO1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgKGNoYXJEYXRhLnlPZmZzZXQgKyBjaGFyRGF0YS50ZXh0dXJlLmhlaWdodCkpO1xuICAgICAgICBwcmV2Q2hhckNvZGUgPSBjaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcblxuICAgIHZhciBsaW5lQWxpZ25PZmZzZXRzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IGxpbmU7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBhbGlnbk9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9mb250LmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZUFsaWduT2Zmc2V0cy5wdXNoKGFsaWduT2Zmc2V0KTtcbiAgICB9XG5cbiAgICB2YXIgbGVuQ2hhcnMgPSBjaGFycy5sZW5ndGg7XG4gICAgdmFyIHRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuQ2hhcnM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjID0gdGhpcy5fZ2x5cGhzW2ldOyAvLyBnZXQgdGhlIG5leHQgZ2x5cGggc3ByaXRlXG5cbiAgICAgICAgaWYgKGMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMudGV4dHVyZSA9IGNoYXJzW2ldLnRleHR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjID0gbmV3IGNvcmUuU3ByaXRlKGNoYXJzW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZ2x5cGhzLnB1c2goYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjLnBvc2l0aW9uLnggPSAoY2hhcnNbaV0ucG9zaXRpb24ueCArIGxpbmVBbGlnbk9mZnNldHNbY2hhcnNbaV0ubGluZV0pICogc2NhbGU7XG4gICAgICAgIGMucG9zaXRpb24ueSA9IGNoYXJzW2ldLnBvc2l0aW9uLnkgKiBzY2FsZTtcbiAgICAgICAgYy5zY2FsZS54ID0gYy5zY2FsZS55ID0gc2NhbGU7XG4gICAgICAgIGMudGludCA9IHRpbnQ7XG5cbiAgICAgICAgaWYgKCFjLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBjaGlsZHJlbi5cbiAgICBmb3IgKGkgPSBsZW5DaGFyczsgaSA8IHRoaXMuX2dseXBocy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5fZ2x5cGhzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHRXaWR0aCA9IG1heExpbmVXaWR0aCAqIHNjYWxlO1xuICAgIHRoaXMudGV4dEhlaWdodCA9IChwb3MueSArIGRhdGEubGluZUhlaWdodCkgKiBzY2FsZTtcbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSBtYXhMaW5lSGVpZ2h0ICogc2NhbGU7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvZiB0aGlzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0ZXh0IGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGdldExvY2FsQm91bmRzXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cblxuQml0bWFwVGV4dC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHJldHVybiBjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn07XG5cbkJpdG1hcFRleHQuZm9udHMgPSB7fTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgTW92aWVDbGlwIGlzIGEgc2ltcGxlIHdheSB0byBkaXNwbGF5IGFuIGFuaW1hdGlvbiBkZXBpY3RlZCBieSBhIGxpc3Qgb2YgdGV4dHVyZXMuXG4gKlxuICogYGBganNcbiAqIHZhciBhbGllbkltYWdlcyA9IFtcImltYWdlX3NlcXVlbmNlXzAxLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDIucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMy5wbmdcIixcImltYWdlX3NlcXVlbmNlXzA0LnBuZ1wiXTtcbiAqIHZhciB0ZXh0dXJlQXJyYXkgPSBbXTtcbiAqXG4gKiBmb3IgKHZhciBpPTA7IGkgPCA0OyBpKyspXG4gKiB7XG4gKiAgICAgIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZShhbGllbkltYWdlc1tpXSk7XG4gKiAgICAgIHRleHR1cmVBcnJheS5wdXNoKHRleHR1cmUpO1xuICogfTtcbiAqXG4gKiB2YXIgbWMgPSBuZXcgUElYSS5Nb3ZpZUNsaXAodGV4dHVyZUFycmF5KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmVzIHtQSVhJLlRleHR1cmVbXXxPYmplY3RbXX0gYW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuVGV4dHVyZX0gb3IgZnJhbWUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIGFuaW1hdGlvblxuICogQHBhcmFtIHRleHR1cmVzW10udGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUge0BsaW5rIFBJWEkuVGV4dHVyZX0gb2YgdGhlIGZyYW1lXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50aW1lIHtudW1iZXJ9IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWUgaW4gbXNcbiAqL1xuZnVuY3Rpb24gTW92aWVDbGlwKHRleHR1cmVzKVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZXNbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUgPyB0ZXh0dXJlc1swXSA6IHRleHR1cmVzWzBdLnRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVzID0gdGV4dHVyZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3BlZWQgdGhhdCB0aGUgTW92aWVDbGlwIHdpbGwgcGxheSBhdC4gSGlnaGVyIGlzIGZhc3RlciwgbG93ZXIgaXMgc2xvd2VyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIG1vdmllIGNsaXAgcmVwZWF0cyBhZnRlciBwbGF5aW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5sb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIE1vdmllQ2xpcCBmaW5pc2hlcyBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKi9cbiAgICB0aGlzLm9uQ29tcGxldGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRWxhcHNlZCB0aW1lIHNpbmNlIGFuaW1hdGlvbiBoYXMgYmVlbiBzdGFydGVkLCB1c2VkIGludGVybmFsbHkgdG8gZGlzcGxheSBjdXJyZW50IHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgTW92aWVDbGlwIGlzIGN1cnJlbnRseSBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTW92aWVDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcbk1vdmllQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNb3ZpZUNsaXA7XG5tb2R1bGUuZXhwb3J0cyA9IE1vdmllQ2xpcDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTW92aWVDbGlwLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIHRvdGFsRnJhbWVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBNb3ZpZUNsaXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbnVtYmVyIG9mIHRleHR1cmVzXG4gICAgICogYXNzaWduZWQgdG8gdGhlIE1vdmllQ2xpcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0b3RhbEZyYW1lczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgdGV4dHVyZXMgdXNlZCBmb3IgdGhpcyBNb3ZpZUNsaXBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVtdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICpcbiAgICAgKi9cbiAgICB0ZXh0dXJlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzLnB1c2godmFsdWVbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucy5wdXNoKHZhbHVlW2ldLnRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAqIFRoZSBNb3ZpZUNsaXBzIGN1cnJlbnQgZnJhbWUgaW5kZXhcbiAgICAqXG4gICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICogQHJlYWRvbmx5XG4gICAgKi9cbiAgICBjdXJyZW50RnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSkgJSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lIDwgMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUgKz0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGcmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBQbGF5cyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKHRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBnb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RvcCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRTdG9wID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG59O1xuXG4vKipcbiAqIEdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZSBhbmQgYmVnaW5zIHBsYXlpbmcgdGhlIE1vdmllQ2xpcFxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdGFydCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRQbGF5ID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLnBsYXkoKTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqIEBwcml2YXRlXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB2YXIgZWxhcHNlZCA9IHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZHVyYXRpb25zICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGxhZyA9IHRoaXMuX2N1cnJlbnRUaW1lICUgMSAqIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG5cbiAgICAgICAgbGFnICs9IGVsYXBzZWQgLyA2MCAqIDEwMDA7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA8IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lLS07XG4gICAgICAgICAgICBsYWcgKz0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWduID0gTWF0aC5zaWduKHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPj0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGFnIC09IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0gKiBzaWduO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gc2lnbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGxhZyAvIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGVsYXBzZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lIDwgMCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCgwKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VGltZSA+PSB0aGlzLl90ZXh0dXJlcy5sZW5ndGggJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AodGhpcy5fdGV4dHVyZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG5cbn07XG5cbi8qXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBkZXN0cm95cyBpdFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCApXG57XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGZyYW1lIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgZnJhbWVzIGlkcyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUZyYW1lcyA9IGZ1bmN0aW9uIChmcmFtZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tRnJhbWUoZnJhbWVzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBpbWFnZSB1cmxzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tSW1hZ2VzID0gZnVuY3Rpb24gKGltYWdlcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59OyIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIC8vIGEgc3ByaXRlIHVzZSBkZm9yIHJlbmRlcmluZyB0ZXh0dXJlcy4uXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICBDYW52YXNUaW50ZXIgPSByZXF1aXJlKCcuLi9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyk7XG5cbi8qKlxuICogQSB0aWxpbmcgc3ByaXRlIGlzIGEgZmFzdCB3YXkgb2YgcmVuZGVyaW5nIGEgdGlsaW5nIGltYWdlXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZSB7VGV4dHVyZX0gdGhlIHRleHR1cmUgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gVGlsaW5nU3ByaXRlKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsaW5nIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVNjYWxlID0gbmV3IGNvcmUuUG9pbnQoMSwxKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIG9mZnNldCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG5ldyBjb3JlLlBvaW50KDAsMCk7XG5cbiAgICAvLy8vLyBwcml2YXRlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2l0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBuZXcgY29yZS5UZXh0dXJlVXZzKCk7XG5cbiAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gbnVsbDtcblxuICAgIC8vVE9ETyBtb3ZlLi5cbiAgICB0aGlzLnNoYWRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKFxuXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVUcmFuc2Zvcm07JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnICAgY29vcmQgLT0gdVRyYW5zZm9ybS54eTsnLFxuICAgICAgICAnICAgY29vcmQgLz0gdVRyYW5zZm9ybS56dzsnLFxuICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGNvb3JkOycsXG5cbiAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjMiB1UGl4ZWxTaXplOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gbW9kKHZUZXh0dXJlQ29vcmQsIHVGcmFtZS56dyk7JyxcbiAgICAgICAgJyAgIGNvb3JkID0gY2xhbXAoY29vcmQsIHVQaXhlbFNpemUsIHVGcmFtZS56dyAtIHVQaXhlbFNpemUpOycsXG4gICAgICAgICcgICBjb29yZCArPSB1RnJhbWUueHk7JyxcblxuICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gIHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQpICogdkNvbG9yIDsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1RnJhbWU6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1VHJhbnNmb3JtOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVBpeGVsU2l6ZSA6IHsgdHlwZSA6ICcyZnYnLCB2YWx1ZTogWzEsIDFdfVxuICAgICAgICAgICAgfVxuICAgICAgKTtcbn1cblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWxpbmdTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbGluZ1Nwcml0ZTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWxpbmdTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGlsaW5nU3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIHR3ZWFrIG91ciB0ZXh0dXJlIHRlbXBvcmFyaWx5Li5cbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZSB8fCAhdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZW1wVXZzID0gdGV4dHVyZS5fdXZzLFxuICAgICAgICB0ZW1wV2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgdGVtcEhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCxcbiAgICAgICAgdHcgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoLFxuICAgICAgICB0aCA9IHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGhpcy5fdXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMF0gPSAxLjAvdHc7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVsxXSA9IDEuMC90aDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVswXSA9IHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzFdID0gdGVtcFV2cy55MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMl0gPSB0ZW1wVXZzLngxIC0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbM10gPSB0ZW1wVXZzLnkyIC0gdGVtcFV2cy55MDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMF0gPSAodGhpcy50aWxlUG9zaXRpb24ueCAlICh0ZW1wV2lkdGggKiB0aGlzLnRpbGVTY2FsZS54KSkgLyB0aGlzLl93aWR0aDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzFdID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgJSAodGVtcEhlaWdodCAqIHRoaXMudGlsZVNjYWxlLnkpKSAvIHRoaXMuX2hlaWdodDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzJdID0gKCB0dyAvIHRoaXMuX3dpZHRoICkgKiB0aGlzLnRpbGVTY2FsZS54O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbM10gPSAoIHRoIC8gdGhpcy5faGVpZ2h0ICkgKiB0aGlzLnRpbGVTY2FsZS55O1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRlbXBVdnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0ZW1wV2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGVtcEhlaWdodDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZiAoIXRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQsXG4gICAgICAgIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICBiYXNlVGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIG1vZFggPSAodGhpcy50aWxlUG9zaXRpb24ueCAvIHRoaXMudGlsZVNjYWxlLngpICUgdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIG1vZFkgPSAodGhpcy50aWxlUG9zaXRpb24ueSAvIHRoaXMudGlsZVNjYWxlLnkpICUgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuXG4gICAgLy8gY3JlYXRlIGEgbmljZSBzaGlueSBwYXR0ZXJuIVxuICAgIC8vIFRPRE8gdGhpcyBuZWVkcyB0byBiZSByZWZyZXNoZWQgaWYgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICBpZighdGhpcy5fY2FudmFzUGF0dGVybilcbiAgICB7XG4gICAgICAgIC8vIGN1dCBhbiBvYmplY3QgZnJvbSBhIHNwcml0ZXNoZWV0Li5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgY29yZS5DYW52YXNCdWZmZXIodGV4dHVyZS5fZnJhbWUud2lkdGgsIHRleHR1cmUuX2ZyYW1lLmhlaWdodCk7XG5cbiAgICAgICAgLy8gVGludCB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMudGludGVkVGV4dHVyZSwgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKGJhc2VUZXh0dXJlLnNvdXJjZSwgLXRleHR1cmUuX2ZyYW1lLngsIC10ZXh0dXJlLl9mcmFtZS55KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gdGVtcENhbnZhcy5jb250ZXh0LmNyZWF0ZVBhdHRlcm4oIHRlbXBDYW52YXMuY2FudmFzLCAncmVwZWF0JyApO1xuICAgIH1cblxuICAgIC8vIHNldCBjb250ZXh0IHN0YXRlLi5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvbik7XG5cbiAgICAvLyBUT0RPIC0gdGhpcyBzaG91bGQgYmUgcm9sbGVkIGludG8gdGhlIHNldFRyYW5zZm9ybSBhYm92ZS4uXG4gICAgY29udGV4dC5zY2FsZSh0aGlzLnRpbGVTY2FsZS54LHRoaXMudGlsZVNjYWxlLnkpO1xuXG4gICAgY29udGV4dC50cmFuc2xhdGUobW9kWCArICh0aGlzLmFuY2hvci54ICogLXRoaXMuX3dpZHRoICksXG4gICAgICAgICAgICAgICAgICAgICAgbW9kWSArICh0aGlzLmFuY2hvci55ICogLXRoaXMuX2hlaWdodCkpO1xuXG4gICAgLy8gY2hlY2sgYmxlbmQgbW9kZVxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vIGZpbGwgdGhlIHBhdHRlcm4hXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9jYW52YXNQYXR0ZXJuO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoLW1vZFgsXG4gICAgICAgICAgICAgICAgICAgICAtbW9kWSxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoIC8gdGhpcy50aWxlU2NhbGUueCxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCAvIHRoaXMudGlsZVNjYWxlLnkpO1xuXG5cbiAgICAvL1RPRE8gLSBwcmV0dHkgc3VyZSB0aGlzIGNhbiBiZSBkZWxldGVkLi4uXG4gICAgLy9jb250ZXh0LnRyYW5zbGF0ZSgtdGhpcy50aWxlUG9zaXRpb24ueCArICh0aGlzLmFuY2hvci54ICogdGhpcy5fd2lkdGgpLCAtdGhpcy50aWxlUG9zaXRpb24ueSArICh0aGlzLmFuY2hvci55ICogdGhpcy5faGVpZ2h0KSk7XG4gICAgLy9jb250ZXh0LnNjYWxlKDEgLyB0aGlzLnRpbGVTY2FsZS54LCAxIC8gdGhpcy50aWxlU2NhbGUueSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIHNwcml0ZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG5cbiAgICB2YXIgdzAgPSB3aWR0aCAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgIHZhciB3MSA9IHdpZHRoICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICB2YXIgaDAgPSBoZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICB2YXIgaDEgPSBoZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcblxuICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIG1pblgsXG4gICAgICAgIG1heFgsXG4gICAgICAgIG1pblksXG4gICAgICAgIG1heFk7XG5cbiAgICBtaW5YID0geDE7XG4gICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICBtaW5ZID0geTE7XG4gICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICBtYXhYID0geDE7XG4gICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICBtYXhZID0geTE7XG4gICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgYm91bmRzLnggPSBtaW5YO1xuICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcblxuICAgIHJldHVybiBib3VuZHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIGNoZWNrXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRpbGluZyBzcHJpdGVcbiAqXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWxlU2NhbGUgPSBudWxsO1xuICAgIHRoaXMuX3RpbGVTY2FsZU9mZnNldCA9IG51bGw7XG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHRpbGluZyBzcHJpdGUgdGhhdCB3aWxsIHVzZSBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZCx3aWR0aCxoZWlnaHQpXG57XG4gICAgdmFyIHRleHR1cmUgPSBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSAnICsgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUodGV4dHVyZSx3aWR0aCxoZWlnaHQpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCB3aWR0aCwgaGVpZ2h0LCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSksd2lkdGgsaGVpZ2h0KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gY29yZS5EaXNwbGF5T2JqZWN0LFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwID0gZmFsc2U7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSBudWxsO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsSGl0VGVzdCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxEZXN0cm95ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGlzIGRpc3BsYXkgb2JqZWN0IHRvIGJlIGNhY2hlZCBhcyBhIGJpdG1hcC5cbiAgICAgKiBUaGlzIGJhc2ljYWxseSB0YWtlcyBhIHNuYXAgc2hvdCBvZiB0aGUgZGlzcGxheSBvYmplY3QgYXMgaXQgaXMgYXQgdGhhdCBtb21lbnQuIEl0IGNhbiBwcm92aWRlIGEgcGVyZm9ybWFuY2UgYmVuZWZpdCBmb3IgY29tcGxleCBzdGF0aWMgZGlzcGxheU9iamVjdHMuXG4gICAgICogVG8gcmVtb3ZlIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnZmFsc2UnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgY2FjaGVBc0JpdG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZUFzQml0bWFwO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXAgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVBc0JpdG1hcCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IHRoaXMucmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSB0aGlzLnJlbmRlckNhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gdGhpcy51cGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHMgPSB0aGlzLmdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSA9IHRoaXMuZGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludCA9IHRoaXMuY29udGFpbnNQb2ludDtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX2NhY2hlQXNCaXRtYXBEZXN0cm95O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJvdW5kcyA9IHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fb3JpZ2luYWxEZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIFdlYkdMXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlciggdGhpcy5fY2FjaGVkU3ByaXRlICk7XG59O1xuXG4vKipcbiogUHJlcGFyZXMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZmlyc3Qgd2UgZmx1c2ggYW55dGhpbmcgbGVmdCBpbiB0aGUgcmVuZGVyZXIgKG90aGVyd2lzZSBpdCB3b3VsZCBnZXQgcmVuZGVyZWQgdG8gdGhlIGNhY2hlZCB0ZXh0dXJlKVxuICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuICAgIC8vdGhpcy5maWx0ZXJzPSBbXTtcbiAgICAvLyBuZXh0IHdlIGZpbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHVudHJhbnNmb3JtZWQgb2JqZWN0XG4gICAgLy8gdGhpcyBmdW5jdGlvbiBhbHNvIGNhbGxzIHVwZGF0ZXRyYW5zZm9ybSBvbiBhbGwgaXRzIGNoaWxkcmVuIGFzIHBhcnQgb2YgdGhlIG1lYXN1cmluZy4gVGhpcyBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgdHJhbnNmb3JtIGFnYWluIGluIHRoaXMgZnVuY3Rpb25cbiAgICAvLyBUT0RPIHBhc3MgYW4gb2JqZWN0IHRvIGNsb25lIHRvbz8gc2F2ZXMgaGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBvbmUgZWFjaCB0aW1lIVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuY2xvbmUoKTtcblxuICAgIC8vIGFkZCBzb21lIHBhZGRpbmchXG4gICAgaWYodGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5fZmlsdGVyc1swXS5wYWRkaW5nO1xuICAgICAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgICAgICBib3VuZHMueSAtPSBwYWRkaW5nO1xuXG4gICAgICAgIGJvdW5kcy53aWR0aCArPSBwYWRkaW5nICogMjtcbiAgICAgICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcbiAgICB9XG5cbiAgICAvLyBmb3Igbm93IHdlIGNhY2hlIHRoZSBjdXJyZW50IHJlbmRlclRhcmdldCB0aGF0IHRoZSB3ZWJHTCByZW5kZXJlciBpcyBjdXJyZW50bHkgdXNpbmcuXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBtb3JlIGVsZWdlbnQuLlxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0O1xuICAgIC8vIFdlIGFsc28gc3RvcmUgdGhlIGZpbHRlciBzdGFjayAtIEkgd2lsbCBkZWZpbml0ZWx5IGxvb2sgdG8gY2hhbmdlIGhvdyB0aGlzIHdvcmtzIGEgbGl0dGxlIGxhdGVyIGRvd24gdGhlIGxpbmUuXG4gICAgdmFyIHN0YWNrID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjaztcblxuICAgIC8vIHRoaXMgcmVuZGVyVGV4dHVyZSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlZCBEaXNwbGF5T2JqZWN0XG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cblxuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjYWNoZWRSZW5kZXJUYXJnZXQpO1xuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2sgPSBzdGFjaztcblxuICAgIHRoaXMucmVuZGVyV2ViR0wgICAgID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgICAgICAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyByZXN0b3JlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIGNhY2hlZCBzcHJpdGUgdG8gYXZvaWQgdGhlIG5hc3R5IGZsaWNrZXIuLlxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAvLyBtYXAgdGhlIGhpdCB0ZXN0Li5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBjYW52YXNcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzKCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbn07XG5cbi8vVE9ETyB0aGlzIGNhbiBiZSB0aGUgc2FtZSBhcyB0aGUgd2ViR0wgdmVyaXNvbi4uIHdpbGwgbmVlZCB0byBkbyBhIGxpdHRsZSB0d2Vha2luZyBmaXJzdCB0aG91Z2guLlxuLyoqXG4qIFByZXBhcmVzIHRoZSBDYW52YXMgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vZ2V0IGJvdW5kcyBhY3R1YWxseSB0cmFuc2Zvcm1zIHRoZSBvYmplY3QgZm9yIHVzIGFscmVhZHkhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5jb250ZXh0ID0gY2FjaGVkUmVuZGVyVGFyZ2V0O1xuXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBDYWxjdWxhdGVzIHRoZSBib3VuZHMgb2YgdGhlIGNhY2hlZCBzcHJpdGVcbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZ2V0Q2FjaGVkQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNwcml0ZS5nZXRCb3VuZHMoKTtcbn07XG5cbi8qKlxuKiBEZXN0cm95cyB0aGUgY2FjaGVkIHNwcml0ZS5cbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fdGV4dHVyZS5kZXN0cm95KCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwRGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jYWNoZUFzQml0bWFwID0gZmFsc2U7XG4gICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95KCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIG9iamVjdC5cbiAqXG4gKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICogQG1lbWJlciB7c3RyaW5nfVxuICovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZGlzcGxheSBvYmplY3QgaW4gdGhlIGNvbnRhaW5lclxuKlxuKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4qIEBwYXJhbSBuYW1lIHtzdHJpbmd9IGluc3RhbmNlIG5hbWVcbiogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuKi9cbmNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4qXG4qIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4qIEBwYXJhbSBwb2ludCB7UG9pbnR9IHRoZSBwb2ludCB0byB3cml0ZSB0aGUgZ2xvYmFsIHZhbHVlIHRvLiBJZiBudWxsIGEgbmV3IHBvaW50IHdpbGwgYmUgcmV0dXJuZWRcbiogQHJldHVybiB7UG9pbnR9XG4qL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRHbG9iYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb2ludClcbntcbiAgICBwb2ludCA9IHBvaW50IHx8IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICBpZih0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHBvaW50LnggPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICBwb2ludC55ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG9pbnQueCA9IHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMucG9zaXRpb24ueTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG5yZXF1aXJlKCcuL2NhY2hlQXNCaXRtYXAnKTtcbnJlcXVpcmUoJy4vZ2V0Q2hpbGRCeU5hbWUnKTtcbnJlcXVpcmUoJy4vZ2V0R2xvYmFsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZXh0cmFzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1vdmllQ2xpcDogICAgICByZXF1aXJlKCcuL01vdmllQ2xpcCcpLFxuICAgIFRpbGluZ1Nwcml0ZTogICByZXF1aXJlKCcuL1RpbGluZ1Nwcml0ZScpLFxuICAgIEJpdG1hcFRleHQ6ICAgICByZXF1aXJlKCcuL0JpdG1hcFRleHQnKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vLyBUT0RPIChjZW5nbGVyKSAtIFRoZSBZIGlzIGZsaXBwZWQgaW4gdGhpcyBzaGFkZXIgZm9yIHNvbWUgcmVhc29uLlxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBzaGFkZXIgOiBodHRwczovL3d3dy5zaGFkZXJ0b3kuY29tL3ZpZXcvbHNzR0RqIGJ5IEBtb3ZBWDEzaFxuICovXG5cbi8qKlxuICogQW4gQVNDSUkgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBBc2NpaUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgY2hhcmFjdGVyKGZsb2F0IG4sIHZlYzIgcClcXG57XFxuICAgIHAgPSBmbG9vcihwKnZlYzIoNC4wLCAtNC4wKSArIDIuNSk7XFxuICAgIGlmIChjbGFtcChwLngsIDAuMCwgNC4wKSA9PSBwLnggJiYgY2xhbXAocC55LCAwLjAsIDQuMCkgPT0gcC55KVxcbiAgICB7XFxuICAgICAgICBpZiAoaW50KG1vZChuL2V4cDIocC54ICsgNS4wKnAueSksIDIuMCkpID09IDEpIHJldHVybiAxLjA7XFxuICAgIH1cXG4gICAgcmV0dXJuIDAuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHk7XFxuXFxuICAgIHZlYzMgY29sID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBmbG9vciggdXYgLyBwaXhlbFNpemUgKSAqIHBpeGVsU2l6ZSAvIGRpbWVuc2lvbnMueHkpLnJnYjtcXG5cXG4gICAgZmxvYXQgZ3JheSA9IChjb2wuciArIGNvbC5nICsgY29sLmIpIC8gMy4wO1xcblxcbiAgICBmbG9hdCBuID0gIDY1NTM2LjA7ICAgICAgICAgICAgIC8vIC5cXG4gICAgaWYgKGdyYXkgPiAwLjIpIG4gPSA2NTYwMC4wOyAgICAvLyA6XFxuICAgIGlmIChncmF5ID4gMC4zKSBuID0gMzMyNzcyLjA7ICAgLy8gKlxcbiAgICBpZiAoZ3JheSA+IDAuNCkgbiA9IDE1MjU1MDg2LjA7IC8vIG9cXG4gICAgaWYgKGdyYXkgPiAwLjUpIG4gPSAyMzM4NTE2NC4wOyAvLyAmXFxuICAgIGlmIChncmF5ID4gMC42KSBuID0gMTUyNTIwMTQuMDsgLy8gOFxcbiAgICBpZiAoZ3JheSA+IDAuNykgbiA9IDEzMTk5NDUyLjA7IC8vIEBcXG4gICAgaWYgKGdyYXkgPiAwLjgpIG4gPSAxMTUxMjgxMC4wOyAvLyAjXFxuXFxuICAgIHZlYzIgcCA9IG1vZCggdXYgLyAoIHBpeGVsU2l6ZSAqIDAuNSApLCAyLjApIC0gdmVjMigxLjApO1xcbiAgICBjb2wgPSBjb2wgKiBjaGFyYWN0ZXIobiwgcCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sLCAxLjApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDggfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQXNjaWlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Bc2NpaUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc2NpaUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQXNjaWlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFzY2lpRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBzaXplIHVzZWQgYnkgdGhlIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkFzY2lpRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmxvb21GaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmxvb21GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xufVxuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsb29tRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb29tRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbG9vbUZpbHRlcjtcblxuQmxvb21GaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLlNDUkVFTik7XG5cbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvb21GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuXG4vKipcbiAqIFRoZSBCbHVyRGlyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvd2FyZCBhIGRpcmVjdGlvbiB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWFxuICogQHBhcmFtIHtudW1iZXJ9IGRpcllcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckRpckZpbHRlcihkaXJYLCBkaXJZKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBmbG9hdCBkaXJYO1xcbnVuaWZvcm0gZmxvYXQgZGlyWTtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1swXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDEyICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDEyICogc3RyZW5ndGgpICogZGlyWSApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkgKiAwLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkgKiAwLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkgKiAwLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pICogMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBkaXJYOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJYIHx8IDAgfSxcbiAgICAgICAgICAgIGRpclk6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclkgfHwgMCB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclggPSBkaXJYIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclkgPSBkaXJZIHx8IDA7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckRpckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckRpckZpbHRlcjtcblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKSB7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmICh0aGlzLnBhc3NlcyA9PT0gMSkge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0yOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gKHRoaXMucGFzc2VzKyhpKjIpKSAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckRpckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJYO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJYLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsdXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcbn1cblxuQmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckZpbHRlcjtcblxuQmx1ckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcGFzc2VzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzID0gdGhpcy5ibHVyWUZpbHRlci5wYXNzZXMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWEZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1clhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1clhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1clhGaWx0ZXI7XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1clhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSAgTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllGaWx0ZXI7XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSBNYXRoLmFicyh0aGlzLnN0cmVuZ3RoKSAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgU21hcnQgQmx1ciBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNtYXJ0Qmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAqIHBlcmNlbnQpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICBkZWx0YTogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjEsIHk6IDAuMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTbWFydEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNtYXJ0Qmx1ckZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDV4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogYGBganNcbiAqICB2YXIgY29sb3JNYXRyaXggPSBuZXcgUElYSS5Db2xvck1hdHJpeEZpbHRlcigpO1xuICogIGNvbnRhaW5lci5maWx0ZXJzID0gW2NvbG9yTWF0cml4XTtcbiAqICBjb2xvck1hdHJpeC5jb250cmFzdCgyKTtcbiAqIGBgYFxuICogQGF1dGhvciBDbMOpbWVudCBDaGVuZWJhdWx0IDxjbGVtZW50QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvck1hdHJpeEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBtWzI1XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuXFxuICAgIHZlYzQgYyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yID0gKG1bMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gbVs0XTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLmcgPSAobVs1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSBtWzldO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmIgPSAobVsxMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gbVsxNF07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYSA9IChtWzE1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSBtWzE5XTtcXG5cXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJzFmdicsIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yTWF0cml4RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvck1hdHJpeEZpbHRlcjtcblxuXG4vKipcbiAqIFRyYW5zZm9ybXMgY3VycmVudCBtYXRyaXggYW5kIHNldCB0aGUgbmV3IG9uZVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gaWYgdHJ1ZSwgY3VycmVudCBtYXRyaXggYW5kIG1hdHJpeCBhcmUgbXVsdGlwbGllZC4gSWYgZmFsc2UsIGp1c3Qgc2V0IHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIEBwYXJhbSBtYXRyaXhcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9sb2FkTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgbXVsdGlwbHkpXG57XG4gICAgbXVsdGlwbHkgPSAhIW11bHRpcGx5O1xuXG4gICAgdmFyIG5ld01hdHJpeCA9IG1hdHJpeDtcblxuICAgIGlmIChtdWx0aXBseSkge1xuICAgICAgICB0aGlzLl9tdWx0aXBseShuZXdNYXRyaXgsIHRoaXMudW5pZm9ybXMubS52YWx1ZSwgbWF0cml4KTtcbiAgICAgICAgbmV3TWF0cml4ID0gdGhpcy5fY29sb3JNYXRyaXgobmV3TWF0cml4KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBtYXRyaXhcbiAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSBuZXdNYXRyaXg7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDUnc1xuICpcbiAqIEBwYXJhbSBvdXQge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSBhIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0gYiB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIG91dCB7bnVtYmVyW119IChtYXQgNXg0KVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYilcbntcblxuICAgIC8vIFJlZCBDaGFubmVsXG4gICAgb3V0WzBdID0gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYls1XSkgKyAoYVsyXSAqIGJbMTBdKSArIChhWzNdICogYlsxNV0pO1xuICAgIG91dFsxXSA9IChhWzBdICogYlsxXSkgKyAoYVsxXSAqIGJbNl0pICsgKGFbMl0gKiBiWzExXSkgKyAoYVszXSAqIGJbMTZdKTtcbiAgICBvdXRbMl0gPSAoYVswXSAqIGJbMl0pICsgKGFbMV0gKiBiWzddKSArIChhWzJdICogYlsxMl0pICsgKGFbM10gKiBiWzE3XSk7XG4gICAgb3V0WzNdID0gKGFbMF0gKiBiWzNdKSArIChhWzFdICogYls4XSkgKyAoYVsyXSAqIGJbMTNdKSArIChhWzNdICogYlsxOF0pO1xuICAgIG91dFs0XSA9IChhWzBdICogYls0XSkgKyAoYVsxXSAqIGJbOV0pICsgKGFbMl0gKiBiWzE0XSkgKyAoYVszXSAqIGJbMTldKTtcblxuICAgIC8vIEdyZWVuIENoYW5uZWxcbiAgICBvdXRbNV0gPSAoYVs1XSAqIGJbMF0pICsgKGFbNl0gKiBiWzVdKSArIChhWzddICogYlsxMF0pICsgKGFbOF0gKiBiWzE1XSk7XG4gICAgb3V0WzZdID0gKGFbNV0gKiBiWzFdKSArIChhWzZdICogYls2XSkgKyAoYVs3XSAqIGJbMTFdKSArIChhWzhdICogYlsxNl0pO1xuICAgIG91dFs3XSA9IChhWzVdICogYlsyXSkgKyAoYVs2XSAqIGJbN10pICsgKGFbN10gKiBiWzEyXSkgKyAoYVs4XSAqIGJbMTddKTtcbiAgICBvdXRbOF0gPSAoYVs1XSAqIGJbM10pICsgKGFbNl0gKiBiWzhdKSArIChhWzddICogYlsxM10pICsgKGFbOF0gKiBiWzE4XSk7XG4gICAgb3V0WzldID0gKGFbNV0gKiBiWzRdKSArIChhWzZdICogYls5XSkgKyAoYVs3XSAqIGJbMTRdKSArIChhWzhdICogYlsxOV0pO1xuXG4gICAgLy8gQmx1ZSBDaGFubmVsXG4gICAgb3V0WzEwXSA9IChhWzEwXSAqIGJbMF0pICsgKGFbMTFdICogYls1XSkgKyAoYVsxMl0gKiBiWzEwXSkgKyAoYVsxM10gKiBiWzE1XSk7XG4gICAgb3V0WzExXSA9IChhWzEwXSAqIGJbMV0pICsgKGFbMTFdICogYls2XSkgKyAoYVsxMl0gKiBiWzExXSkgKyAoYVsxM10gKiBiWzE2XSk7XG4gICAgb3V0WzEyXSA9IChhWzEwXSAqIGJbMl0pICsgKGFbMTFdICogYls3XSkgKyAoYVsxMl0gKiBiWzEyXSkgKyAoYVsxM10gKiBiWzE3XSk7XG4gICAgb3V0WzEzXSA9IChhWzEwXSAqIGJbM10pICsgKGFbMTFdICogYls4XSkgKyAoYVsxMl0gKiBiWzEzXSkgKyAoYVsxM10gKiBiWzE4XSk7XG4gICAgb3V0WzE0XSA9IChhWzEwXSAqIGJbNF0pICsgKGFbMTFdICogYls5XSkgKyAoYVsxMl0gKiBiWzE0XSkgKyAoYVsxM10gKiBiWzE5XSk7XG5cbiAgICAvLyBBbHBoYSBDaGFubmVsXG4gICAgb3V0WzE1XSA9IChhWzE1XSAqIGJbMF0pICsgKGFbMTZdICogYls1XSkgKyAoYVsxN10gKiBiWzEwXSkgKyAoYVsxOF0gKiBiWzE1XSk7XG4gICAgb3V0WzE2XSA9IChhWzE1XSAqIGJbMV0pICsgKGFbMTZdICogYls2XSkgKyAoYVsxN10gKiBiWzExXSkgKyAoYVsxOF0gKiBiWzE2XSk7XG4gICAgb3V0WzE3XSA9IChhWzE1XSAqIGJbMl0pICsgKGFbMTZdICogYls3XSkgKyAoYVsxN10gKiBiWzEyXSkgKyAoYVsxOF0gKiBiWzE3XSk7XG4gICAgb3V0WzE4XSA9IChhWzE1XSAqIGJbM10pICsgKGFbMTZdICogYls4XSkgKyAoYVsxN10gKiBiWzEzXSkgKyAoYVsxOF0gKiBiWzE4XSk7XG4gICAgb3V0WzE5XSA9IChhWzE1XSAqIGJbNF0pICsgKGFbMTZdICogYls5XSkgKyAoYVsxN10gKiBiWzE0XSkgKyAoYVsxOF0gKiBiWzE5XSk7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHJldHVybiBtIHtudW1iZXJbXX0gKG1hdCA1eDQpIHdpdGggYWxsIHZhbHVlcyBiZXR3ZWVuIDAtMVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2NvbG9yTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICAvLyBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gICAgdmFyIG0gPSBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCk7XG4gICAgbVs0XSAvPSAyNTU7XG4gICAgbVs5XSAvPSAyNTU7XG4gICAgbVsxNF0gLz0gMjU1O1xuICAgIG1bMTldIC89IDI1NTtcblxuICAgIHJldHVybiBtO1xufTtcblxuLyoqXG4gKiBBZGp1c3RzIGJyaWdodG5lc3NcbiAqXG4gKiBAcGFyYW0gYiB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgYnJpZ3RobmVzcyAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icmlnaHRuZXNzID0gZnVuY3Rpb24gKGIsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGIsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIGIsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIGIsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXRyaWNlcyBpbiBncmV5IHNjYWxlc1xuICpcbiAqIEBwYXJhbSBzY2FsZSB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgZ3JleSAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG4vL0FtZXJpY2FuaXplZCBhbGlhc1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyYXlzY2FsZSA9IENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGU7XG5cbi8qKlxuICogU2V0IHRoZSBibGFjayBhbmQgd2hpdGUgbWF0cmljZVxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJsYWNrQW5kV2hpdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGh1ZSBwcm9wZXJ0eSBvZiB0aGUgY29sb3JcbiAqXG4gKiBAcGFyYW0gcm90YXRpb24ge251bWJlcn0gaW4gZGVncmVlc1xuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmh1ZSA9IGZ1bmN0aW9uIChyb3RhdGlvbiwgbXVsdGlwbHkpXG57XG4gICAgcm90YXRpb24gPSAocm90YXRpb24gfHwgMCkgLyAxODAgKiBNYXRoLlBJO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyhyb3RhdGlvbiksXG4gICAgICAgIHNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcblxuICAgIC8vIGx1bWluYW5jZVJlZCwgbHVtaW5hbmNlR3JlZW4sIGx1bWluYW5jZUJsdWVcbiAgICB2YXIgbHVtUiA9IDAuMjEzLCAvLyBvciAwLjMwODZcbiAgICAgICAgbHVtRyA9IDAuNzE1LCAvLyBvciAwLjYwOTRcbiAgICAgICAgbHVtQiA9IDAuMDcyOyAvLyBvciAwLjA4MjBcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoMSAtIGx1bVIpICsgc2luICogKC1sdW1SKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAoLWx1bUcpLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgxIC0gbHVtQiksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKDAuMTQzKSwgbHVtRyArIGNvcyAqICgxIC0gbHVtRykgKyBzaW4gKiAoMC4xNDApLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgtMC4yODMpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgtKDEgLSBsdW1SKSksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKGx1bUcpLCBsdW1CICsgY29zICogKDEgLSBsdW1CKSArIHNpbiAqIChsdW1CKSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKipcbiAqIFNldCB0aGUgY29udHJhc3QgbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGRhcmsgYW5kIGJyaWdodFxuICogSW5jcmVhc2UgY29udHJhc3QgOiBzaGFkb3dzIGRhcmtlciBhbmQgaGlnaGxpZ2h0cyBicmlnaHRlclxuICogRGVjcmVhc2UgY29udHJhc3QgOiBicmluZyB0aGUgc2hhZG93cyB1cCBhbmQgdGhlIGhpZ2hsaWdodHMgZG93blxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdmFsdWUgb2YgdGhlIGNvbnRyYXN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29udHJhc3QgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgdiA9IChhbW91bnQgfHwgMCkgKyAxO1xuICAgIHZhciBvID0gLTEyOCAqICh2IC0gMSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB2LCAwLCAwLCAwLCBvLFxuICAgICAgICAwLCB2LCAwLCAwLCBvLFxuICAgICAgICAwLCAwLCB2LCAwLCBvLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc2F0dXJhdGlvbiBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gY29sb3JzXG4gKiBJbmNyZWFzZSBzYXR1cmF0aW9uIDogaW5jcmVhc2UgY29udHJhc3QsIGJyaWdodG5lc3MsIGFuZCBzaGFycG5lc3NcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgeCA9IChhbW91bnQgfHwgMCkgKiAyIC8gMyArIDE7XG4gICAgdmFyIHkgPSAoKHggLSAxKSAqIC0wLjUpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgeCwgeSwgeSwgMCwgMCxcbiAgICAgICAgeSwgeCwgeSwgMCwgMCxcbiAgICAgICAgeSwgeSwgeCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBEZXNhdHVyYXRlIGltYWdlIChyZW1vdmUgY29sb3IpXG4gKlxuICogQ2FsbCB0aGUgc2F0dXJhdGUgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHRoaXMuc2F0dXJhdGUoLTEpO1xufTtcblxuLyoqXG4gKiBOZWdhdGl2ZSBpbWFnZSAoaW52ZXJzZSBvZiBjbGFzc2ljIHJnYiBtYXRyaXgpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5lZ2F0aXZlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDEsIDEsIDAsIDAsXG4gICAgICAgIDEsIDAsIDEsIDAsIDAsXG4gICAgICAgIDEsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2VwaWEgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2VwaWEgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zOTMsIDAuNzY4OTk5OSwgMC4xODg5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4zNDksIDAuNjg1OTk5OSwgMC4xNjc5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4yNzIsIDAuNTMzOTk5OSwgMC4xMzA5OTk5OSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciBtb3Rpb24gcGljdHVyZSBwcm9jZXNzIGludmVudGVkIGluIDE5MTYgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRlY2huaWNvbG9yID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuOTEyNTI3Nzg5MTQ1NjA4MywgLTAuODU0NTM0NDk3Njk1MTY0NSwgLTAuMDkxNTU1MDg0ODI3NTU1ODUsIDAsIDExLjc5MzYwMzQzNDM3NzMzNyxcbiAgICAgICAgLTAuMzA4NzgzMzM4NTkyODA5NywgMS43NjU4OTA4NTU1NDU4NDI4LCAtMC4xMDYwMTc0MzA3NDcyMjI0NSwgMCwgLTcwLjM1MjA1MTYxNDYxMzk4LFxuICAgICAgICAtMC4yMzExMDMzNzc1NDg2MTYsIC0wLjc1MDE4OTkxOTc0NDAyMTIsIDEuODQ3NTk3ODE2MTA4MTg5LCAwLCAzMC45NTA5NDA4Njk0OTExMzgsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogUG9sYXJvaWQgZmlsdGVyXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnBvbGFyb2lkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuNDM4LCAtMC4wNjIsIC0wLjA2MiwgMCwgMCxcbiAgICAgICAgLTAuMTIyLCAxLjM3OCwgLTAuMTIyLCAwLCAwLFxuICAgICAgICAtMC4wMTYsIC0wLjAxNiwgMS40ODMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRmlsdGVyIHdobyB0cmFuc2Zvcm1zIDogUmVkIC0+IEJsdWUgYW5kIEJsdWUgLT4gUmVkXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRvQkdSID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgcmV2ZXJzYWwgZmlsbSBpbnRyb2R1Y2VkIGJ5IEVhc3RtYW4gS29kYWsgaW4gMTkzNS4gKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmtvZGFjaHJvbWUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS4xMjg1NTgyMzk2NTkzNTI1LCAtMC4zOTY3MzgyMjgzNjAxMzQ4LCAtMC4wMzk5MjU1OTE3MjkyMTc5MywgMCwgNjMuNzI5NTg3NjIxOTY1MDIsXG4gICAgICAgIC0wLjE2NDA0MzM5OTYyMjQ0NjE2LCAxLjA4MzUyNTE1NjYyOTEzMDQsIC0wLjA1NDk4ODA1MTE1NjMzMTMyLCAwLCAyNC43MzI0MDc4OTY3MDYyMDMsXG4gICAgICAgIC0wLjE2Nzg2MDEwNzA2MTU1NzYzLCAtMC41NjAzNDE2Mjc3Njk1MjQ4LCAxLjYwMTQ4NTA3NjE5NjQ5NDMsIDAsIDM1LjYyOTgyODA3NDYwOTQ2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEJyb3duIGRlbGljaW91cyBicm93bmkgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icm93bmkgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC41OTk3MDIzNDk4MTU5NzE1LCAwLjM0NTUzMjQzMDQ4MzkxMjYzLCAtMC4yNzA4Mjk4Njc0NTM4MDQyLCAwLCA0Ny40MzE5Mjg1NTYwMDg3MyxcbiAgICAgICAgLTAuMDM3NzAzMjQ5ODM3NzgzMTU3LCAwLjg2MDk1Nzc1ODc5OTI2NDEsIDAuMTUwNTk1NTIzODg0NTk5MTMsIDAsIC0zNi45Njg0MTQ5ODMxOTEyNyxcbiAgICAgICAgMC4yNDExMzYzNTEyODE1MzMzNSwgLTAuMDc0NDEwMzc5MDg0MjI0OTIsIDAuNDQ5NzIxODIwNjQ4NzcxNTMsIDAsIC03LjU2MjA3NTI3NzU5MTI4MyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFZpbnRhZ2UgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS52aW50YWdlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNjI3OTM0NTYzNTYwNTk5NCwgMC4zMjAyMTgzNDIwODE5MzY3LCAtMC4wMzk2NTQwODIxMTMxMjQ1MywgMCwgOS42NTEyODU4MzUyOTQxMjMsXG4gICAgICAgIDAuMDI1NzgzOTc3MDQ4MDg4NjgsIDAuNjQ0MTE4ODY0NDM3NDc3MSwgMC4wMzI1OTEyNzYxNjE0OTI5NCwgMCwgNy40NjI4MjkxNzY0NzA1OTEsXG4gICAgICAgIDAuMDQ2NjA1NTU1Njc4MjcxOSwgLTAuMDg1MTIzMjk4NzI0Nzg5MSwgMC41MjQxNjQ4MDE4NzAwNDY1LCAwLCA1LjE1OTE5MDU4ODIzNTI5NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGtpbmQgb2YgZ3JhZGllbnQgbWFwLCBidXQgZnVubnkgdG8gcGxheSB3aXRoIVxuICpcbiAqIEBwYXJhbSBkZXNhdHVyYXRpb24ge251bWJlcn1cbiAqIEBwYXJhbSB0b25lZCB7bnVtYmVyfVxuICogQHBhcmFtIGxpZ2h0Q29sb3Ige3N0cmluZ30gKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKiBAcGFyYW0gZGFya0NvbG9yIHtzdHJpbmd9ICAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29sb3JUb25lID0gZnVuY3Rpb24gKGRlc2F0dXJhdGlvbiwgdG9uZWQsIGxpZ2h0Q29sb3IsIGRhcmtDb2xvciwgbXVsdGlwbHkpXG57XG4gICAgZGVzYXR1cmF0aW9uID0gZGVzYXR1cmF0aW9uIHx8IDAuMjtcbiAgICB0b25lZCA9IHRvbmVkIHx8IDAuMTU7XG4gICAgbGlnaHRDb2xvciA9IGxpZ2h0Q29sb3IgfHwgMHhGRkU1ODA7XG4gICAgZGFya0NvbG9yID0gZGFya0NvbG9yIHx8IDB4MzM4MDAwO1xuXG4gICAgdmFyIGxSID0gKChsaWdodENvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsRyA9ICgobGlnaHRDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsQiA9IChsaWdodENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgZFIgPSAoKGRhcmtDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEcgPSAoKGRhcmtDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkQiA9IChkYXJrQ29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC41OSwgMC4xMSwgMCwgMCxcbiAgICAgICAgbFIsIGxHLCBsQiwgZGVzYXR1cmF0aW9uLCAwLFxuICAgICAgICBkUiwgZEcsIGRCLCB0b25lZCwgMCxcbiAgICAgICAgbFIgLSBkUiwgbEcgLSBkRywgbEIgLSBkQiwgMCwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIE5pZ2h0IGVmZmVjdFxuICpcbiAqIEBwYXJhbSBpbnRlbnNpdHkge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uaWdodCA9IGZ1bmN0aW9uIChpbnRlbnNpdHksIG11bHRpcGx5KVxue1xuICAgIGludGVuc2l0eSA9IGludGVuc2l0eSB8fCAwLjE7XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgaW50ZW5zaXR5ICogKCAtMi4wKSwgLWludGVuc2l0eSwgMCwgMCwgMCxcbiAgICAgICAgLWludGVuc2l0eSwgMCwgaW50ZW5zaXR5LCAwLCAwLFxuICAgICAgICAwLCBpbnRlbnNpdHksIGludGVuc2l0eSAqIDIuMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKlxuICogUHJlZGF0b3IgZWZmZWN0XG4gKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgYSBuZXcgaW5kZXBlbnQgb25lXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBob3cgbXVjaCB0aGUgcHJlZGF0b3IgZmVlbHMgaGlzIGZ1dHVyZSB2aWN0aW1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wcmVkYXRvciA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDExLjIyNDEzMDYzMDQ5MzE2NCAqIGFtb3VudCwgLTQuNzk0NDg2OTk5NTExNzE5ICogYW1vdW50LCAtMi44NzQ2MTE4NTQ1NTMyMjI3ICogYW1vdW50LCAwICogYW1vdW50LCAwLjQwMzQyNDM4MjIwOTc3NzgzICogYW1vdW50LFxuICAgICAgICAtMy42MzMwNjk3NTM2NDY4NTA2ICogYW1vdW50LCA5LjE5MzE1NzE5NjA0NDkyMiAqIGFtb3VudCwgLTIuOTUxODEwODM2NzkxOTkyICogYW1vdW50LCAwICogYW1vdW50LCAtMS4zMTYxMzUwNDg4NjYyNzIgKiBhbW91bnQsXG4gICAgICAgIC0zLjIxODQxOTc5MDI2Nzk0NDMgKiBhbW91bnQsIC00LjIzNzUwMzA1MTc1NzgxMjUgKiBhbW91bnQsIDcuNDc2NDQ4MDU5MDgyMDMxICogYW1vdW50LCAwICogYW1vdW50LCAwLjgwNDQ0NTkyMjM3NDcyNTMgKiBhbW91bnQsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBMU0QgZWZmZWN0XG4gKlxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBIb3cgY3JhenkgaXMgeW91ciBlZmZlY3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5sc2QgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMiwgLTAuNCwgMC41LCAwLCAwLFxuICAgICAgICAtMC41LCAyLCAtMC40LCAwLCAwLFxuICAgICAgICAtMC40LCAtMC41LCAzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgb25lXG4gKlxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIGZhbHNlKTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF0cml4IG9mIHRoZSBjb2xvciBtYXRyaXggZmlsdGVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yTWF0cml4RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IFsxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwXVxuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm0udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBsb3dlcnMgdGhlIGNvbG9yIGRlcHRoIG9mIHlvdXIgaW1hZ2UgYnkgdGhlIGdpdmVuIGFtb3VudCwgcHJvZHVjaW5nIGFuIGltYWdlIHdpdGggYSBzbWFsbGVyIHBhbGV0dGUuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yU3RlcEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzdGVwO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGNvbG9yID0gZmxvb3IoY29sb3IgKiBzdGVwKSAvIHN0ZXA7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXA6IHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yU3RlcEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JTdGVwRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBzdGVwcyB0byByZWR1Y2UgdGhlIHBhbGV0dGUgYnkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvclN0ZXBGaWx0ZXIjXG4gICAgICovXG4gICAgc3RlcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbnZvbHV0aW9uRmlsdGVyIGNsYXNzIGFwcGxpZXMgYSBtYXRyaXggY29udm9sdXRpb24gZmlsdGVyIGVmZmVjdC5cbiAqIEEgY29udm9sdXRpb24gY29tYmluZXMgcGl4ZWxzIGluIHRoZSBpbnB1dCBpbWFnZSB3aXRoIG5laWdoYm9yaW5nIHBpeGVscyB0byBwcm9kdWNlIGEgbmV3IGltYWdlLlxuICogQSB3aWRlIHZhcmlldHkgb2YgaW1hZ2UgZWZmZWN0cyBjYW4gYmUgYWNoaWV2ZWQgdGhyb3VnaCBjb252b2x1dGlvbnMsIGluY2x1ZGluZyBibHVycmluZywgZWRnZVxuICogZGV0ZWN0aW9uLCBzaGFycGVuaW5nLCBlbWJvc3NpbmcsIGFuZCBiZXZlbGluZy4gVGhlIG1hdHJpeCBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIFNlZSBodHRwOi8vZG9jcy5naW1wLm9yZy9lbi9wbHVnLWluLWNvbnZtYXRyaXguaHRtbCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICovXG5mdW5jdGlvbiBDb252b2x1dGlvbkZpbHRlcihtYXRyaXgsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyBtZWRpdW1wIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xcbnVuaWZvcm0gZmxvYXQgbWF0cml4WzldO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IGMxMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAtIHRleGVsU2l6ZSk7IC8vIHRvcCBsZWZ0XFxuICAgdmVjNCBjMTIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgY2VudGVyXFxuICAgdmVjNCBjMTMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCByaWdodFxcblxcbiAgIHZlYzQgYzIxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIGxlZnRcXG4gICB2ZWM0IGMyMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7IC8vIG1pZCBjZW50ZXJcXG4gICB2ZWM0IGMyMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCByaWdodFxcblxcbiAgIHZlYzQgYzMxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gbGVmdFxcbiAgIHZlYzQgYzMyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGNlbnRlclxcbiAgIHZlYzQgYzMzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgdGV4ZWxTaXplKTsgLy8gYm90dG9tIHJpZ2h0XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID1cXG4gICAgICAgYzExICogbWF0cml4WzBdICsgYzEyICogbWF0cml4WzFdICsgYzEzICogbWF0cml4WzJdICtcXG4gICAgICAgYzIxICogbWF0cml4WzNdICsgYzIyICogbWF0cml4WzRdICsgYzIzICogbWF0cml4WzVdICtcXG4gICAgICAgYzMxICogbWF0cml4WzZdICsgYzMyICogbWF0cml4WzddICsgYzMzICogbWF0cml4WzhdO1xcblxcbiAgIGdsX0ZyYWdDb2xvci5hID0gYzIyLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWF0cml4OiAgICAgeyB0eXBlOiAnMWZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KSB9LFxuICAgICAgICAgICAgdGV4ZWxTaXplOiAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxIC8gd2lkdGgsIHk6IDEgLyBoZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnZvbHV0aW9uRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb252b2x1dGlvbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnkgPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIENyb3NzIEhhdGNoIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENyb3NzSGF0Y2hGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZmxvYXQgbHVtID0gbGVuZ3RoKHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZC54eSkucmdiKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDEuMCwgMS4wLCAxLjApO1xcblxcbiAgICBpZiAobHVtIDwgMS4wMClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjc1KVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNTApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC4zKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXCJcbiAgICApO1xufVxuXG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDcm9zc0hhdGNoRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDcm9zc0hhdGNoRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIERpc3BsYWNlbWVudEZpbHRlciBjbGFzcyB1c2VzIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHRleHR1cmUgKGNhbGxlZCB0aGUgZGlzcGxhY2VtZW50IG1hcCkgdG8gcGVyZm9ybSBhIGRpc3BsYWNlbWVudCBvZiBhbiBvYmplY3QuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGZpbHRlciB0byBhcHBseSBhbGwgbWFub3Igb2YgY3Jhenkgd2FycGluZyBlZmZlY3RzXG4gKiBDdXJyZW50bHkgdGhlIHIgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHggYW5kIHRoZSBnIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIChtYWtlIHN1cmUgaXRzIGFkZGVkIHRvIHRoZSBzY2VuZSEpXG4gKi9cbmZ1bmN0aW9uIERpc3BsYWNlbWVudEZpbHRlcihzcHJpdGUsIHNjYWxlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG4gICAgc3ByaXRlLnJlbmRlcmFibGUgPSBmYWxzZTtcblxuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZNYXBDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcFNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgbWFwID0gIHRleHR1cmUyRChtYXBTYW1wbGVyLCB2TWFwQ29vcmQpO1xcblxcbiAgIG1hcCAtPSAwLjU7XFxuICAgbWFwLnh5ICo9IHNjYWxlO1xcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyBtYXAueCwgdlRleHR1cmVDb29yZC55ICsgbWFwLnkpKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcFNhbXBsZXI6ICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLnRleHR1cmUgfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9LFxuICAgICAgICAgICAgc2NhbGU6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSwgeTogMSB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcblxuICAgIGlmIChzY2FsZSA9PT0gbnVsbCB8fCBzY2FsZSA9PT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgICAgc2NhbGUgPSAyMDtcbiAgICB9XG5cbiAgICB0aGlzLnNjYWxlID0gbmV3IGNvcmUuUG9pbnQoc2NhbGUsIHNjYWxlKTtcbn1cblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYWNlbWVudEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxhY2VtZW50RmlsdGVyO1xuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS54ID0gdGhpcy5zY2FsZS54ICogKDEvaW5wdXQuZnJhbWUud2lkdGgpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueSA9IHRoaXMuc2NhbGUueSAqICgxL2lucHV0LmZyYW1lLmhlaWdodCk7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gTXVzdCBiZSBwb3dlciBvZiAyIHNpemVkIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5EaXNwbGFjZW1lbnRGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3ZlcyBodHRwOi8vbWF0Z3JvdmVzLmNvbS8gQERvb3JtYXQyM1xuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9mdW4vZG90c2NyZWVuLmpzXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgZG90c2NyZWVuIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0byBiZSBtYWRlIG91dCBvZlxuICogYmxhY2sgYW5kIHdoaXRlIGhhbGZ0b25lIGRvdHMgbGlrZSBhbiBvbGQgcHJpbnRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRG90U2NyZWVuRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG5cXG5mbG9hdCBwYXR0ZXJuKClcXG57XFxuICAgZmxvYXQgcyA9IHNpbihhbmdsZSksIGMgPSBjb3MoYW5nbGUpO1xcbiAgIHZlYzIgdGV4ID0gdlRleHR1cmVDb29yZCAqIGRpbWVuc2lvbnMueHk7XFxuICAgdmVjMiBwb2ludCA9IHZlYzIoXFxuICAgICAgIGMgKiB0ZXgueCAtIHMgKiB0ZXgueSxcXG4gICAgICAgcyAqIHRleC54ICsgYyAqIHRleC55XFxuICAgKSAqIHNjYWxlO1xcbiAgIHJldHVybiAoc2luKHBvaW50LngpICogc2luKHBvaW50LnkpKSAqIDQuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhhdmVyYWdlICogMTAuMCAtIDUuMCArIHBhdHRlcm4oKSksIGNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNjYWxlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvdFNjcmVlbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRG90U2NyZWVuRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIHNjYWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHJhZGl1cyBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWVRpbnRGaWx0ZXIgYXBwbGllcyBhIHZlcnRpY2FsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWVRpbnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbitvZmZzZXQpLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IHN1bSA9IHZlYzQoMC4wKTtcXG5cXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLnJnYiAqIHN1bS5hICogYWxwaGEsIHN1bS5hICogYWxwaGEgKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSAvIDUxMiB9LFxuICAgICAgICAgICAgY29sb3I6IHsgdHlwZTogJ2MnLCB2YWx1ZTogWzAsMCwwXX0sXG4gICAgICAgICAgICBhbHBoYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC43IH0sXG4gICAgICAgICAgICBvZmZzZXQ6IHsgdHlwZTogJzJmJywgdmFsdWU6WzUsIDVdfSxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOjF9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllUaW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWVRpbnRGaWx0ZXI7XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIGNsZWFyKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWVRpbnRGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllUaW50RmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWVRpbnRGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgRHJvcFNoYWRvd0ZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEcm9wU2hhZG93RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIgPSBuZXcgQmx1cllUaW50RmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgdGhpcy5wYWRkaW5nID0gMzA7XG5cbiAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9hbmdsZSA9IDQ1ICogTWF0aC5QSSAvIDE4MDtcbiAgICB0aGlzLl9kaXN0YW5jZSA9IDEwO1xuICAgIHRoaXMuYWxwaGEgPSAwLjc1O1xuICAgIHRoaXMuaGlkZU9iamVjdCA9IGZhbHNlO1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5NVUxUSVBMWTtcbn1cblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRHJvcFNoYWRvd0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRHJvcFNoYWRvd0ZpbHRlcjtcblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIGlmKHRoaXMuX2RpcnR5UG9zaXRpb24pXG4gICAge1xuICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzBdID0gTWF0aC5zaW4odGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVsxXSA9IE1hdGguY29zKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUodGhpcy5ibGVuZE1vZGUpO1xuXG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIGlmKCF0aGlzLmhpZGVPYmplY3QpXG4gICAge1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG4gICAgfVxuXG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBjb2xvcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgY29yZS51dGlscy5yZ2IyaGV4KCB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgPSBjb3JlLnV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYWxwaGE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXN0YW5jZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGRpc3RhbmNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9hbmdsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fYW5nbGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBncmV5c2NhbGVzIHRoZSBwYWxldHRlIG9mIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBHcmF5RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JheTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIHZlYzMoMC4yMTI2KmdsX0ZyYWdDb2xvci5yICsgMC43MTUyKmdsX0ZyYWdDb2xvci5nICsgMC4wNzIyKmdsX0ZyYWdDb2xvci5iKSwgZ3JheSk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXk6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuR3JheUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkdyYXlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JheUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JheUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR3JheUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXkuIDEgd2lsbCBtYWtlIHRoZSBvYmplY3QgYmxhY2sgYW5kIHdoaXRlLCAwIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5HcmF5RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYXk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGZpbHRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmZpbHRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXNjaWlGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2FzY2lpL0FzY2lpRmlsdGVyJyksXG4gICAgQmxvb21GaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2Jsb29tL0Jsb29tRmlsdGVyJyksXG4gICAgQmx1ckZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckZpbHRlcicpLFxuICAgIEJsdXJYRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1cllGaWx0ZXInKSxcbiAgICBCbHVyRGlyRmlsdGVyOiAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRGlyRmlsdGVyJyksXG4gICAgQ29sb3JNYXRyaXhGaWx0ZXI6ICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yTWF0cml4RmlsdGVyJyksXG4gICAgQ29sb3JTdGVwRmlsdGVyOiAgICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yU3RlcEZpbHRlcicpLFxuICAgIENvbnZvbHV0aW9uRmlsdGVyOiAgcmVxdWlyZSgnLi9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlcicpLFxuICAgIENyb3NzSGF0Y2hGaWx0ZXI6ICAgcmVxdWlyZSgnLi9jcm9zc2hhdGNoL0Nyb3NzSGF0Y2hGaWx0ZXInKSxcbiAgICBEaXNwbGFjZW1lbnRGaWx0ZXI6IHJlcXVpcmUoJy4vZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlcicpLFxuICAgIERvdFNjcmVlbkZpbHRlcjogICAgcmVxdWlyZSgnLi9kb3QvRG90U2NyZWVuRmlsdGVyJyksXG4gICAgR3JheUZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2dyYXkvR3JheUZpbHRlcicpLFxuICAgIERyb3BTaGFkb3dGaWx0ZXI6ICAgcmVxdWlyZSgnLi9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXInKSxcbiAgICBJbnZlcnRGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vaW52ZXJ0L0ludmVydEZpbHRlcicpLFxuICAgIE5vaXNlRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ub2lzZS9Ob2lzZUZpbHRlcicpLFxuICAgIFBpeGVsYXRlRmlsdGVyOiAgICAgcmVxdWlyZSgnLi9waXhlbGF0ZS9QaXhlbGF0ZUZpbHRlcicpLFxuICAgIFJHQlNwbGl0RmlsdGVyOiAgICAgcmVxdWlyZSgnLi9yZ2IvUkdCU3BsaXRGaWx0ZXInKSxcbiAgICBTaG9ja3dhdmVGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vc2hvY2t3YXZlL1Nob2Nrd2F2ZUZpbHRlcicpLFxuICAgIFNlcGlhRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9zZXBpYS9TZXBpYUZpbHRlcicpLFxuICAgIFNtYXJ0Qmx1ckZpbHRlcjogICAgcmVxdWlyZSgnLi9ibHVyL1NtYXJ0Qmx1ckZpbHRlcicpLFxuICAgIFRpbHRTaGlmdEZpbHRlcjogICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyJyksXG4gICAgVHdpc3RGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3R3aXN0L1R3aXN0RmlsdGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGludmVydHMgeW91ciBEaXNwbGF5IE9iamVjdHMgY29sb3JzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBJbnZlcnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gZmxvYXQgaW52ZXJ0O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggKHZlYzMoMSktZ2xfRnJhZ0NvbG9yLnJnYikgKiBnbF9GcmFnQ29sb3IuYSwgZ2xfRnJhZ0NvbG9yLnJnYiwgMS4wIC0gaW52ZXJ0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBpbnZlcnQ6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludmVydEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gSW52ZXJ0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhJbnZlcnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBpbnZlcnQuIGAxYCB3aWxsIGZ1bGx5IGludmVydCB0aGUgY29sb3JzLCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkludmVydEZpbHRlciNcbiAgICAgKi9cbiAgICBpbnZlcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9hZGp1c3Qvbm9pc2UuanNcbiAqL1xuXG4vKipcbiAqIEEgTm9pc2UgZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gTm9pc2VGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgbm9pc2U7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgcmFuZCh2ZWMyIGNvKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoY28ueHksIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZmxvYXQgZGlmZiA9IChyYW5kKHZUZXh0dXJlQ29vcmQpIC0gMC41KSAqIG5vaXNlO1xcblxcbiAgICBjb2xvci5yICs9IGRpZmY7XFxuICAgIGNvbG9yLmcgKz0gZGlmZjtcXG4gICAgY29sb3IuYiArPSBkaWZmO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBub2lzZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbk5vaXNlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuTm9pc2VGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTm9pc2VGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE5vaXNlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2lzZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIG5vaXNlIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuTm9pc2VGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMC41XG4gICAgICovXG4gICAgbm9pc2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHBpeGVsYXRlIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciAnYmxvY2t5Jy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUGl4ZWxhdGVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZDtcXG5cXG4gICAgdmVjMiBzaXplID0gZGltZW5zaW9ucy54eSAvIHBpeGVsU2l6ZTtcXG5cXG4gICAgdmVjMiBjb2xvciA9IGZsb29yKCAoIHZUZXh0dXJlQ29vcmQgKiBzaXplICkgKSAvIHNpemUgKyBwaXhlbFNpemUvZGltZW5zaW9ucy54eSAqIDAuNTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb2xvcik7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgICB2YWx1ZTogeyB4OiAxMCwgeTogMTAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBpeGVsYXRlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBQaXhlbGF0ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBhIHBvaW50IHRoYXQgZGVzY3JpYmVzIHRoZSBzaXplIG9mIHRoZSBibG9ja3MuXG4gICAgICogeCBpcyB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGFuZCB5IGlzIHRoZSBoZWlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUGl4ZWxhdGVGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEFuIFJHQiBTcGxpdCBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFJHQlNwbGl0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcmVkO1xcbnVuaWZvcm0gdmVjMiBncmVlbjtcXG51bmlmb3JtIHZlYzIgYmx1ZTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yLnIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyByZWQvZGltZW5zaW9ucy54eSkucjtcXG4gICBnbF9GcmFnQ29sb3IuZyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGdyZWVuL2RpbWVuc2lvbnMueHkpLmc7XFxuICAgZ2xfRnJhZ0NvbG9yLmIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBibHVlL2RpbWVuc2lvbnMueHkpLmI7XFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgZ3JlZW46ICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAtMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGJsdWU6ICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IC0yMCB9IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUkdCU3BsaXRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFJHQlNwbGl0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSR0JTcGxpdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBSZWQgY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgcmVkOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yZWQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmVlbiBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmVlbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEJsdWUgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgYXBwbGllcyBhIHNlcGlhIGVmZmVjdCB0byB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2VwaWFGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc2VwaWE7XFxuXFxuY29uc3QgbWF0MyBzZXBpYU1hdHJpeCA9IG1hdDMoMC4zNTg4LCAwLjcwNDQsIDAuMTM2OCwgMC4yOTkwLCAwLjU4NzAsIDAuMTE0MCwgMC4yMzkyLCAwLjQ2OTYsIDAuMDkxMik7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZ2xfRnJhZ0NvbG9yLnJnYiAqIHNlcGlhTWF0cml4LCBzZXBpYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2VwaWE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2VwaWFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TZXBpYUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXBpYUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2VwaWFGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNlcGlhRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgc2VwaWEuIGAxYCB3aWxsIGFwcGx5IHRoZSBmdWxsIHNlcGlhIGVmZmVjdCwgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TZXBpYUZpbHRlciNcbiAgICAgKi9cbiAgICBzZXBpYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA0eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTaG9ja3dhdmVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XFxudW5pZm9ybSB2ZWMzIHBhcmFtczsgLy8gMTAuMCwgMC44LCAwLjFcXG51bmlmb3JtIGZsb2F0IHRpbWU7XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSB2VGV4dHVyZUNvb3JkO1xcbiAgICB2ZWMyIHRleENvb3JkID0gdXY7XFxuXFxuICAgIGZsb2F0IGRpc3QgPSBkaXN0YW5jZSh1diwgY2VudGVyKTtcXG5cXG4gICAgaWYgKCAoZGlzdCA8PSAodGltZSArIHBhcmFtcy56KSkgJiYgKGRpc3QgPj0gKHRpbWUgLSBwYXJhbXMueikpIClcXG4gICAge1xcbiAgICAgICAgZmxvYXQgZGlmZiA9IChkaXN0IC0gdGltZSk7XFxuICAgICAgICBmbG9hdCBwb3dEaWZmID0gMS4wIC0gcG93KGFicyhkaWZmKnBhcmFtcy54KSwgcGFyYW1zLnkpO1xcblxcbiAgICAgICAgZmxvYXQgZGlmZlRpbWUgPSBkaWZmICAqIHBvd0RpZmY7XFxuICAgICAgICB2ZWMyIGRpZmZVViA9IG5vcm1hbGl6ZSh1diAtIGNlbnRlcik7XFxuICAgICAgICB0ZXhDb29yZCA9IHV2ICsgKGRpZmZVViAqIGRpZmZUaW1lKTtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHRleENvb3JkKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBjZW50ZXI6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9LFxuICAgICAgICAgICAgcGFyYW1zOiB7IHR5cGU6ICd2MycsIHZhbHVlOiB7IHg6IDEwLCB5OiAwLjgsIHo6IDAuMSB9IH0sXG4gICAgICAgICAgICB0aW1lOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaG9ja3dhdmVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNob2Nrd2F2ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNlbnRlciBvZiB0aGUgc2hvY2t3YXZlIGluIG5vcm1hbGl6ZWQgc2NyZWVuIGNvb3Jkcy4gVGhhdCBpc1xuICAgICAqICgwLDApIGlzIHRoZSB0b3AtbGVmdCBhbmQgKDEsMSkgaXMgdGhlIGJvdHRvbSByaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgY2VudGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGFyYW1zIG9mIHRoZSBzaG9ja3dhdmUuIFRoZXNlIG1vZGlmeSB0aGUgbG9vayBhbmQgYmVoYXZpb3Igb2ZcbiAgICAgKiB0aGUgc2hvY2t3YXZlIGFzIGl0IHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIHNob2Nrd2F2ZS4gVGhpcyBjb250cm9scyB0aGUgc3BlZWQgYXQgd2hpY2hcbiAgICAgKiB0aGUgc2hvY2t3YXZlIHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHRpbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRBeGlzRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRBeGlzRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGJsdXI7XFxudW5pZm9ybSBmbG9hdCBncmFkaWVudEJsdXI7XFxudW5pZm9ybSB2ZWMyIHN0YXJ0O1xcbnVuaWZvcm0gdmVjMiBlbmQ7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcbnVuaWZvcm0gdmVjMiB0ZXhTaXplO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcbiAgICB2ZWMyIG5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMyKHN0YXJ0LnkgLSBlbmQueSwgZW5kLnggLSBzdGFydC54KSk7XFxuICAgIGZsb2F0IHJhZGl1cyA9IHNtb290aHN0ZXAoMC4wLCAxLjAsIGFicyhkb3QodlRleHR1cmVDb29yZCAqIHRleFNpemUgLSBzdGFydCwgbm9ybWFsKSkgLyBncmFkaWVudEJsdXIpICogYmx1cjtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgLyB0ZXhTaXplICogcGVyY2VudCAqIHJhZGl1cyk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6ICAgICAgICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxMDAgfSxcbiAgICAgICAgICAgIGdyYWRpZW50Qmx1cjogICB7IHR5cGU6ICcxZicsIHZhbHVlOiA2MDAgfSxcbiAgICAgICAgICAgIHN0YXJ0OiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAsICAgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZW5kOiAgICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogNjAwLCAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBkZWx0YTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAzMCwgICB5OiAzMCB9IH0sXG4gICAgICAgICAgICB0ZXhTaXplOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiB3aW5kb3cuaW5uZXJXaWR0aCwgeTogd2luZG93LmlubmVySGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbn1cblxuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICogVGhpcyBpcyBvdmVycmlkZGVuIGluIHRoZSBYIGFuZCBZIGZpbHRlcnMsIGRvZXMgbm90aGluZyBmb3IgdGhpcyBjbGFzcy5cbiAqXG4gKi9cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAwO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IDA7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WUZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnQgRmlsdGVyLiBNYW5hZ2VzIHRoZSBwYXNzIG9mIGJvdGggYSBUaWx0U2hpZnRYRmlsdGVyIGFuZCBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlciA9IG5ldyBUaWx0U2hpZnRYRmlsdGVyKCk7XG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyID0gbmV3IFRpbHRTaGlmdFlGaWx0ZXIoKTtcbn1cblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0RmlsdGVyO1xuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ncmFkaWVudEJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5zdGFydCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5lbmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRYRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gZHggLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR5IC8gZDtcbn07XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFlGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WUZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAtZHkgLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR4IC8gZDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgdHdpc3QgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHR3aXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVHdpc3RGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgLSBvZmZzZXQ7XFxuICAgZmxvYXQgZGlzdCA9IGxlbmd0aChjb29yZCk7XFxuXFxuICAgaWYgKGRpc3QgPCByYWRpdXMpXFxuICAge1xcbiAgICAgICBmbG9hdCByYXRpbyA9IChyYWRpdXMgLSBkaXN0KSAvIHJhZGl1cztcXG4gICAgICAgZmxvYXQgYW5nbGVNb2QgPSByYXRpbyAqIHJhdGlvICogYW5nbGU7XFxuICAgICAgIGZsb2F0IHMgPSBzaW4oYW5nbGVNb2QpO1xcbiAgICAgICBmbG9hdCBjID0gY29zKGFuZ2xlTW9kKTtcXG4gICAgICAgY29vcmQgPSB2ZWMyKGNvb3JkLnggKiBjIC0gY29vcmQueSAqIHMsIGNvb3JkLnggKiBzICsgY29vcmQueSAqIGMpO1xcbiAgIH1cXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkK29mZnNldCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBvZmZzZXQ6ICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuVHdpc3RGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ud2lzdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUd2lzdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVHdpc3RGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFR3aXN0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgZGVzY3JpYmVzIHRoZSB0aGUgb2Zmc2V0IG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcmFkaXVzIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIHJhZGl1czoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBhbmdsZSBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvLyBydW4gdGhlIHBvbHlmaWxsc1xucmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbi8vIGFkZCBjb3JlIHBsdWdpbnMuXG5jb3JlLmV4dHJhcyAgICAgICAgID0gcmVxdWlyZSgnLi9leHRyYXMnKTtcbmNvcmUuZmlsdGVycyAgICAgICAgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcbmNvcmUuaW50ZXJhY3Rpb24gICAgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9uJyk7XG5jb3JlLmxvYWRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9sb2FkZXJzJyk7XG5jb3JlLm1lc2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9tZXNoJyk7XG5jb3JlLmFjY2Vzc2liaWxpdHkgID0gcmVxdWlyZSgnLi9hY2Nlc3NpYmlsaXR5Jyk7XG5cbi8vIGV4cG9ydCBhIHByZW1hZGUgbG9hZGVyIGluc3RhbmNlXG4vKipcbiAqIEEgcHJlbWFkZSBpbnN0YW5jZSBvZiB0aGUgbG9hZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZGVyIHJlc291cmNlcy5cbiAqXG4gKiBAbmFtZSBsb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcHJvcGVydHkge1BJWEkubG9hZGVycy5Mb2FkZXJ9XG4gKi9cbmNvcmUubG9hZGVyID0gbmV3IGNvcmUubG9hZGVycy5Mb2FkZXIoKTtcblxuLy8gbWl4aW4gdGhlIGRlcHJlY2F0aW9uIGZlYXR1cmVzLlxuT2JqZWN0LmFzc2lnbihjb3JlLCByZXF1aXJlKCcuL2RlcHJlY2F0aW9uJykpO1xuXG4vLyBBbHdheXMgZXhwb3J0IHBpeGkgZ2xvYmFsbHkuXG5nbG9iYWwuUElYSSA9IGNvcmU7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBIb2xkcyBhbGwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhbiBJbnRlcmFjdGlvbiBldmVudFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25EYXRhKClcbntcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IHN0b3JlcyB0aGUgZ2xvYmFsIGNvb3JkcyBvZiB3aGVyZSB0aGUgdG91Y2gvbW91c2UgZXZlbnQgaGFwcGVuZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5nbG9iYWwgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBTcHJpdGUgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBhc3NlZCB0byBhbiBldmVudCBoYW5kbGVyLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbmFsIERPTSBFdmVudCB0aGF0IHdhcyBjYXB0dXJlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gbnVsbDtcbn1cblxuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25EYXRhO1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBzcGVjaWZpZWQgZGlzcGxheU9iamVjdCBmb3IgdGhpcyBJbnRlcmFjdGlvbkRhdGFcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSBsb2NhbCBjb29yZHMgb2ZmXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IHBvaW50KVxuICogQHBhcmFtIFtnbG9iYWxQb3NdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHlvdXIgY3VzdG9tIGdsb2JhbCBjb29yZHMsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCB1c2UgdGhlIGN1cnJlbnQgZ2xvYmFsIGNvb3JkcylcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEludGVyYWN0aW9uRGF0YSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgRGlzcGxheU9iamVjdFxuICovXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmdldExvY2FsUG9zaXRpb24gPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcG9pbnQsIGdsb2JhbFBvcylcbntcbiAgICByZXR1cm4gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UoZ2xvYmFsUG9zIHx8IHRoaXMuZ2xvYmFsLCBwb2ludCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgSW50ZXJhY3Rpb25EYXRhID0gcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKTtcblxuLy8gTWl4IGludGVyYWN0aXZlVGFyZ2V0IGludG8gY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZVxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxuKTtcblxuLyoqXG4gKiBUaGUgaW50ZXJhY3Rpb24gbWFuYWdlciBkZWFscyB3aXRoIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuIEFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBpbnRlcmFjdGl2ZVxuICogaWYgaXRzIGludGVyYWN0aXZlIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZVxuICogVGhpcyBtYW5hZ2VyIGFsc28gc3VwcG9ydHMgbXVsdGl0b3VjaC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdD10cnVlXSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBtYW5hZ2VyIGF1dG9tYXRpY2FsbHkgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeT0xMF0ge251bWJlcn0gRnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyLCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgaW50ZXJhY3Rpb24gbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGJlIHByZXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0ID0gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0IDogdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFzIHRoaXMgZnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZCBtb3JlIG9mdGVuLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSA9IG9wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW91c2UgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9XG4gICAgICovXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IGRhdGEgb2JqZWN0IHRvIGhhbmRsZSBhbGwgdGhlIGV2ZW50IHRyYWNraW5nL2Rpc3BhdGNoaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5ldmVudERhdGEgPSB7XG4gICAgICAgIHN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgIGRhdGE6IHRoaXMubW91c2UsXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGxpdHRsZSBpbnRlcmFjdGl2ZURhdGEgcG9vbCAhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YVtdfVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBlbGVtZW50IHRvIGJpbmQgdG8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhhdmUgZXZlbnRzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGRvbSBlbGVtZW50P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcblxuICAgIC8vdGhpcyB3aWxsIG1ha2UgaXQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGJpbmQgYWxsIHRoZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VVcCA9IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IHRoaXMucHJvY2Vzc01vdXNlVXAuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IHRoaXMucHJvY2Vzc01vdXNlRG93bi5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gdGhpcy5wcm9jZXNzTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU91dCA9IHRoaXMub25Nb3VzZU91dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gdGhpcy5vblRvdWNoU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gdGhpcy5wcm9jZXNzVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoRW5kID0gdGhpcy5vblRvdWNoRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSB0aGlzLnByb2Nlc3NUb3VjaEVuZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IHRoaXMub25Ub3VjaE1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSB0aGlzLnByb2Nlc3NUb3VjaE1vdmUuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxhc3QgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNzcyBzdHlsZSBvZiB0aGUgY3Vyc29yIHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9ICdpbmhlcml0JztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNhY2hlZCB2YXJcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcblxuICAgIHRoaXMuc2V0VGFyZ2V0RWxlbWVudCh0aGlzLnJlbmRlcmVyLnZpZXcsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbik7XG59XG5cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UvdG91Y2ggZXZlbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZVxuICogb3RoZXIgRE9NIGVsZW1lbnRzIG9uIHRvcCBvZiB0aGUgcmVuZGVyZXJzIENhbnZhcyBlbGVtZW50LiBXaXRoIHRoaXMgeW91J2xsIGJlIGJhbGUgdG8gZGVsZXRlZ2F0ZVxuICogYW5vdGhlciBET00gZWxlbWVudCB0byByZWNlaXZlIHRob3NlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9IHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUSGUgcmVzb2x1dGlvbiBvZiB0aGUgbmV3IGVsZW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBjYW52YXMpLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXRUYXJnZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJlc29sdXRpb24pXG57XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgdGhlIERPTSBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAgICB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgICB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICAgICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICAgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgICAgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgICAgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgdGhlIERPTSBldmVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICcnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzLlxuICogSW52b2tlZCBieSBhIHRocm90dGxlZCB0aWNrZXIgdXBkYXRlIGZyb21cbiAqIHtAbGluayBQSVhJLnRpY2tlci5zaGFyZWR9LlxuICpcbiAqIEBwYXJhbSBkZWx0YVRpbWUge251bWJlcn1cbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHRoaXMuX2RlbHRhVGltZSArPSBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZGVsdGFUaW1lIDwgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWx0YVRpbWUgPSAwO1xuXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBtb3ZlIHRoZSBtb3VzZSB0aGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gZGZvbmUgdXNpbmcgdGhlIG1vdXNlIG1vdmUhXG4gICAgaWYodGhpcy5kaWRNb3ZlKVxuICAgIHtcbiAgICAgICAgdGhpcy5kaWRNb3ZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ET1xufTtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgZGlzcGxheSBvYmplY3QgaW4gcXVlc3Rpb25cbiAqIEBwYXJhbSBldmVudFN0cmluZyB7c3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGUuZywgbW91c2Vkb3duKVxuICogQHBhcmFtIGV2ZW50RGF0YSB7b2JqZWN0fSB0aGUgZXZlbnQgZGF0YSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApXG57XG4gICAgaWYoIWV2ZW50RGF0YS5zdG9wcGVkKVxuICAgIHtcbiAgICAgICAgZXZlbnREYXRhLnRhcmdldCA9IGRpc3BsYXlPYmplY3Q7XG4gICAgICAgIGV2ZW50RGF0YS50eXBlID0gZXZlbnRTdHJpbmc7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5lbWl0KCBldmVudFN0cmluZywgZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10oIGV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXBzIHggYW5kIHkgY29vcmRzIGZyb20gYSBET00gb2JqZWN0IGFuZCBtYXBzIHRoZW0gY29ycmVjdGx5IHRvIHRoZSBwaXhpIHZpZXcuIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBwb2ludC5cbiAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgdGhlIERPTSBlbGVtZW50IGNvdWxkIGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCBhbnl3aGVyZSBvbiB0aGUgc2NyZWVuLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW5cbiAqIEBwYXJhbSAge251bWJlcn0geCAgICAgdGhlIHggY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICogQHBhcmFtICB7bnVtYmVyfSB5ICAgICB0aGUgeSBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUubWFwUG9zaXRpb25Ub1BvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgeCwgeSApXG57XG4gICAgdmFyIHJlY3QgPSB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBwb2ludC54ID0gKCAoIHggLSByZWN0LmxlZnQgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC53aWR0aCAgLyByZWN0LndpZHRoICApICkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgcG9pbnQueSA9ICggKCB5IC0gcmVjdC50b3AgICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuaGVpZ2h0IC8gcmVjdC5oZWlnaHQgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVzIGEgbmVhdCB3YXkgb2YgY3Jhd2xpbmcgdGhyb3VnaCB0aGUgc2NlbmUgZ3JhcGggYW5kIHJ1bm5pbmcgYSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gYWxsIGludGVyYWN0aXZlIG9iamVjdHMgaXQgZmluZHMuXG4gKiBJdCB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIGhpdCB0ZXN0aW5nIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlIGhpdCBhY3Jvc3MgaW4gdGhlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IGlzIHRlc3RlZCBmb3IgY29sbGlzaW9uXG4gKiBAcGFyYW0gIHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IGRpc3BsYXlPYmplY3QgdGhlIGRpc3BsYXlPYmplY3QgdGhhdCB3aWxsIGJlIGhpdCB0ZXN0IChyZWN1cmNzaXZseSBjcmF3bHMgaXRzIGNoaWxkcmVuKVxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBpbnRlcmFjdGl2ZSBvYmplY3QuIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBoaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtib29sZWFufSBoaXRUZXN0IHRoaXMgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3RzIGluc2lkZSBzaG91bGQgYmUgaGl0IHRlc3QgYWdhaW5zdCB0aGUgcG9pbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiB0aGUgZGlzcGxheU9iamVjdCBoaXQgdGhlIHBvaW50XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0ludGVyYWN0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBkaXNwbGF5T2JqZWN0LCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZSlcbntcbiAgICBpZighZGlzcGxheU9iamVjdCB8fCAhZGlzcGxheU9iamVjdC52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRvb2sgYSBsaXR0bGUgd2hpbGUgdG8gcmV3b3JrIHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5ISBCdXQgbm93IGl0IGlzIGRvbmUgYW5kIG5pY2UgYW5kIG9wdGltaXNlZC4gXl9eXG4gICAgLy8gXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdyBsb29wIHRocm91Z2ggYWxsIG9iamVjdHMgYW5kIHRoZW4gb25seSBoaXQgdGVzdCB0aGUgb2JqZWN0cyBpdCBIQVMgdG8sIG5vdCBhbGwgb2YgdGhlbS4gTVVDSCBmYXN0ZXIuLlxuICAgIC8vIEFuIG9iamVjdCB3aWxsIGJlIGhpdCB0ZXN0IGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICAvLyBcbiAgICAvLyAxOiBJdCBpcyBpbnRlcmFjdGl2ZS5cbiAgICAvLyAyOiBJdCBiZWxvbmdzIHRvIGEgcGFyZW50IHRoYXQgaXMgaW50ZXJhY3RpdmUgQU5EIG9uZSBvZiB0aGUgcGFyZW50cyBjaGlsZHJlbiBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIC8vIFxuICAgIC8vIEFzIGFub3RoZXIgbGl0dGxlIG9wdGltaXNhdGlvbiBvbmNlIGFuIGludGVyYWN0aXZlIG9iamVjdCBoYXMgYmVlbiBoaXQgd2UgY2FuIGNhcnJ5IG9uIHRocm91Z2ggdGhlIHNjZW5lZ3JhcGgsIGJ1dCB3ZSBrbm93IHRoYXQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGhpdHMhIFNvIHdlIGNhbiBhdm9pZCBleHRyYSBoaXQgdGVzdHNcbiAgICAvLyBBIGZpbmFsIG9wdGltaXNhdGlvbiBpcyB0aGF0IGFuIG9iamVjdCBpcyBub3QgaGl0IHRlc3QgZGlyZWN0bHkgaWYgYSBjaGlsZCBoYXMgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICBcbiAgICB2YXIgaGl0ID0gZmFsc2UsXG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gaW50ZXJhY3RpdmUgPSBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlIHx8IGludGVyYWN0aXZlO1xuXG4gICAgLy8gaWYgdGhlIGRpc3BsYXlvYmplY3QgaGFzIGEgaGl0QXJlYSwgdGhlbiBpdCBkb2VzIG5vdCBuZWVkIHRvIGhpdFRlc3QgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAqKiBGUkVFIFRJUCAqKiEgSWYgYW4gb2JqZWN0IGlzIG5vdCBpbnRlcmFjdHRpdmUgb3IgaGFzIG5vIGJ1dHRvbnMgaW4gaXQgKHN1Y2ggYXMgYSBnYW1lIHNjZW5lISkgc2V0IGludGVyYWN0aXZlQ2hpbGRyZW4gdG8gZmFsc2UgZm9yIHRoYXQgZGlzcGxheU9iamVjdC5cbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgcGl4aSB0byBjb21wbGV0bHkgaWdub3JlIGFuZCBieXBhc3MgY2hlY2tpbmcgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmVDaGlsZHJlbilcbiAgICB7ICAgICAgIFxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aC0xOyBpID49IDA7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGltZSB0byBnZXQgcmVjdXJzaXZlLi4gaWYgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpZiBzb210aGluZyBpcyBoaXQuLlxuICAgICAgICAgICAgaWYoIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHBvaW50LCBjaGlsZHJlbltpXSwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmVQYXJlbnQpIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55IG1vcmUgb2JqZWN0cyBpbiB0aGlzIGNvbnRhaW5lciBhcyB3ZSB3ZSBub3cga25vdyB0aGUgcGFyZW50IGhhcyBiZWVuIGhpdFxuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGludGVyYWN0aXZlICwgdGhhdCBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGl0IHdhcyBhY3R1YWxseSBpbnRlcmFjdGl2ZSBhbmQgbm90IGp1c3QgdGhlIGNoaWxkIG9mIGFuIGludGVyYWN0aXZlIG9iamVjdC4gXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnl0aGluZyBlbHNlLiBXZSBzdGlsbCBuZWVkIHRvIHJ1biB0aHJvdWdoIGFsbCBvYmplY3RzLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBoaXQgdGVzdHMuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uaW50ZXJhY3RpdmUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoaXRUZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm8gcG9pbnQgcnVubmluZyB0aGlzIGlmIHRoZSBpdGVtIGlzIG5vdCBpbnRlcmFjdGl2ZSBvciBkb2VzIG5vdCBoYXZlIGFuIGludGVyYWN0aXZlIHBhcmVudC5cbiAgICBpZihpbnRlcmFjdGl2ZSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBoaXQgdGVzdGluZyAoYXMgaW4gd2UgaGF2ZSBubyBoaXQgYW55IG9iamVjdHMgeWV0KVxuICAgICAgICAvLyBXZSBhbHNvIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGl0IHRlc3RpbmcgaWYgb25jZSBvZiB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4gaGFzIGFscmVhZHkgYmVlbiBoaXQhXG4gICAgICAgIGlmKGhpdFRlc3QgJiYgIWhpdClcbiAgICAgICAgeyAgXG4gICAgICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0aGlzLl90ZW1wUG9pbnQpO1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuaGl0QXJlYS5jb250YWlucyggdGhpcy5fdGVtcFBvaW50LngsIHRoaXMuX3RlbXBQb2ludC55ICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnVuYyhkaXNwbGF5T2JqZWN0LCBoaXQpOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIFxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyBwcmVzc2VkIGRvd25cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZURvd24sIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIGRvd24gY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VEb3duID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuICAgIFxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3RbIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bicgXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGRvd24nIDogJ21vdXNlZG93bicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcmVsZWFzZWRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VVcCwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgdXAgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlVXAgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG4gICAgdmFyIGlzRG93biA9ICBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXAnIDogJ21vdXNldXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRjbGljaycgOiAnY2xpY2snLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cG91dHNpZGUnIDogJ21vdXNldXBvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiB0aGUgbW91c2UgbW92aW5nXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmRpZE1vdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU1vdmUsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE8gQlVHIGZvciBwYXJlbnRzIGluZXJhY3RpdmUgb2JqZWN0IChib3JkZXIgb3JkZXIgaXNzdWUpXG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2Vtb3ZlJywgdGhpcy5ldmVudERhdGEpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dChkaXNwbGF5T2JqZWN0LCBoaXQpO1xufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYmVpbmcgbW92ZWQgb3V0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICAvLyBUT0RPIG9wdGltaXplIGJ5IG5vdCBjaGVjayBFVkVSWSBUSU1FISBtYXliZSBoYWxmIGFzIG9mdGVuPyAvL1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgZmFsc2UgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG92ZXIvb3V0IGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgaWYoIWRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5T2JqZWN0LmJ1dHRvbk1vZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gZGlzcGxheU9iamVjdC5kZWZhdWx0Q3Vyc29yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgdGhpcy5ldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgc3RhcnRlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBzdGFydGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG4gICAgICAgIC8vVE9ETyBQT09MXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaFN0YXJ0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoc3RhcnQnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGVuZHMgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggZW5kaW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIC8vVE9ETyB0aGlzIHNob3VsZCBiZSBwYXNzZWQgYWxvbmcuLiBubyBzZXRcbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hFbmQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgZW5kIG9mIGEgdG91Y2ggYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoRW5kID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0YXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgbW92ZWQgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIG1vdmluZyBhY3Jvc3MgdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaE1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaGl0ID0gaGl0O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNobW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogR3JhYnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaEV2ZW50IHtFdmVudERhdGF9IFRoZSB0b3VjaCBldmVudCB3ZSBuZWVkIHRvIHBhaXIgd2l0aCBhbiBpbnRlcmFjdGlvbkRhdGEgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRUb3VjaERhdGEgPSBmdW5jdGlvbiAodG91Y2hFdmVudClcbntcbiAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnBvcCgpO1xuXG4gICAgaWYoIXRvdWNoRGF0YSlcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcbiAgICB9XG5cbiAgICB0b3VjaERhdGEuaWRlbnRpZmllciA9IHRvdWNoRXZlbnQuaWRlbnRpZmllcjtcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdG91Y2hEYXRhLmdsb2JhbCwgdG91Y2hFdmVudC5jbGllbnRYLCB0b3VjaEV2ZW50LmNsaWVudFkgKTtcblxuICAgIGlmKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC54ID0gdG91Y2hEYXRhLmdsb2JhbC54IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnkgPSB0b3VjaERhdGEuZ2xvYmFsLnkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgfVxuXG4gICAgdG91Y2hFdmVudC5nbG9iYWxYID0gdG91Y2hEYXRhLmdsb2JhbC54O1xuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWSA9IHRvdWNoRGF0YS5nbG9iYWwueTtcblxuICAgIHJldHVybiB0b3VjaERhdGE7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hEYXRhIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX0gVGhlIHRvdWNoIGRhdGEgb2JqZWN0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5Ub3VjaERhdGEgPSBmdW5jdGlvbiAoIHRvdWNoRGF0YSApXG57XG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnB1c2goIHRvdWNoRGF0YSApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgaW50ZXJhY3Rpb24gbWFuYWdlclxuICpcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMubW91c2UgPSBudWxsO1xuXG4gICAgdGhpcy5ldmVudERhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZVVwID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gbnVsbDtcblxuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaEVuZCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMuX3RlbXBQb2ludCA9IG51bGw7XG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGludGVyYWN0aW9ucyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSW50ZXJhY3Rpb25EYXRhOiAgICByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpLFxuICAgIEludGVyYWN0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9JbnRlcmFjdGlvbk1hbmFnZXInKSxcbiAgICBpbnRlcmFjdGl2ZVRhcmdldDogIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxufTtcbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgaW50ZXJhY3RpdmUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmludGVyYWN0aW9uLmludGVyYWN0aXZlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBpbnRlcmFjdGl2ZVRhcmdldCA9IHtcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGJ1dHRvbk1vZGU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmVDaGlsZHJlbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGRlZmF1bHRDdXJzb3I6ICdwb2ludGVyJyxcblxuICAgIC8vIHNvbWUgaW50ZXJuYWwgY2hlY2tzLi5cblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb3ZlcjogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90b3VjaERvd246IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyYWN0aXZlVGFyZ2V0O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuLi9leHRyYXMnKSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5cbmZ1bmN0aW9uIHBhcnNlKHJlc291cmNlLCB0ZXh0dXJlKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgaW5mbyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXTtcbiAgICB2YXIgY29tbW9uID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XG5cbiAgICBkYXRhLmZvbnQgPSBpbmZvLmdldEF0dHJpYnV0ZSgnZmFjZScpO1xuICAgIGRhdGEuc2l6ZSA9IHBhcnNlSW50KGluZm8uZ2V0QXR0cmlidXRlKCdzaXplJyksIDEwKTtcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBwYXJzZUludChjb21tb24uZ2V0QXR0cmlidXRlKCdsaW5lSGVpZ2h0JyksIDEwKTtcbiAgICBkYXRhLmNoYXJzID0ge307XG5cbiAgICAvL3BhcnNlIGxldHRlcnNcbiAgICB2YXIgbGV0dGVycyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NoYXInKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdpZCcpLCAxMCk7XG5cbiAgICAgICAgdmFyIHRleHR1cmVSZWN0ID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3gnKSwgMTApICsgdGV4dHVyZS5mcmFtZS54LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3knKSwgMTApICsgdGV4dHVyZS5mcmFtZS55LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSwgMTApXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICB4T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneG9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB5T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneW9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB4QWR2YW5jZTogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hhZHZhbmNlJyksIDEwKSxcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9LFxuICAgICAgICAgICAgdGV4dHVyZTogbmV3IGNvcmUuVGV4dHVyZSh0ZXh0dXJlLmJhc2VUZXh0dXJlLCB0ZXh0dXJlUmVjdClcblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vcGFyc2Uga2VybmluZ3NcbiAgICB2YXIga2VybmluZ3MgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXJuaW5nJyk7XG4gICAgZm9yIChpID0gMDsgaSA8IGtlcm5pbmdzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdmaXJzdCcpLCAxMCk7XG4gICAgICAgIHZhciBzZWNvbmQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ3NlY29uZCcpLCAxMCk7XG4gICAgICAgIHZhciBhbW91bnQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2Ftb3VudCcpLCAxMCk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tzZWNvbmRdLmtlcm5pbmdbZmlyc3RdID0gYW1vdW50O1xuICAgIH1cblxuICAgIHJlc291cmNlLmJpdG1hcEZvbnQgPSBkYXRhO1xuXG4gICAgLy8gSSdtIGxlYXZpbmcgdGhpcyBhcyBhIHRlbXBvcmFyeSBmaXggc28gd2UgY2FuIHRlc3QgdGhlIGJpdG1hcCBmb250cyBpbiB2M1xuICAgIC8vIGJ1dCBpdCdzIHZlcnkgbGlrZWx5IHRvIGNoYW5nZVxuICAgIGV4dHJhcy5CaXRtYXBUZXh0LmZvbnRzW2RhdGEuZm9udF0gPSBkYXRhO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhIG9yIG5vdCB4bWwgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzWG1sKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBpZiBub3QgYml0bWFwIGZvbnQgZGF0YSwgdXNpbmcgc29tZSBzaWxseSBkdWNrLXR5cGluZ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF0uZ2V0QXR0cmlidXRlKCdmYWNlJykgPT09IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4bWxVcmwgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsKTtcblxuICAgICAgICBpZiAoeG1sVXJsID09PSAnLicpIHtcbiAgICAgICAgICAgIHhtbFVybCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmFzZVVybCAmJiB4bWxVcmwpIHtcbiAgICAgICAgICAgIC8vIGlmIGJhc2V1cmwgaGFzIGEgdHJhaWxpbmcgc2xhc2ggdGhlbiBhZGQgb25lIHRvIHhtbFVybCBzbyB0aGUgcmVwbGFjZSB3b3JrcyBiZWxvd1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVVybC5jaGFyQXQodGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEpID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYmFzZVVybCBmcm9tIHhtbFVybFxuICAgICAgICAgICAgeG1sVXJsID0geG1sVXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiB4bWxVcmwgbm93LCBpdCBuZWVkcyBhIHRyYWlsaW5nIHNsYXNoLiBFbnN1cmUgdGhhdCBpdCBkb2VzIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZW1wdHkuXG4gICAgICAgIGlmICh4bWxVcmwgJiYgeG1sVXJsLmNoYXJBdCh4bWxVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4dHVyZVVybCA9IHhtbFVybCArIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKVswXS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKTtcbiAgICAgICAgaWYgKGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKSB7XG4gICAgICAgICAgICAvL3JldXNlIGV4aXN0aW5nIHRleHR1cmVcbiAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBsb2FkIHRoZSB0ZXh0dXJlIGZvciB0aGUgZm9udFxuICAgICAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCB0ZXh0dXJlVXJsLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCByZXMudGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGxvYWRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmxvYWRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTG9hZGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlcicpLFxuXG4gICAgLy8gcGFyc2Vyc1xuICAgIGJpdG1hcEZvbnRQYXJzZXI6ICAgcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXI6ICByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgdGV4dHVyZVBhcnNlcjogICAgICByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBSZXNvdXJjZTogICAgICAgICAgIHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlXG59O1xuIiwidmFyIFJlc291cmNlTG9hZGVyID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJyksXG4gICAgdGV4dHVyZVBhcnNlciA9IHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyID0gcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIGJpdG1hcEZvbnRQYXJzZXIgPSByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKTtcblxuLyoqXG4gKlxuICogVGhlIG5ldyBsb2FkZXIsIGV4dGVuZHMgUmVzb3VyY2UgTG9hZGVyIGJ5IENoYWQgRW5nbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2VuZ2xlcmNqL3Jlc291cmNlLWxvYWRlclxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbG9hZGVyID0gUElYSS5sb2FkZXI7IC8vIHBpeGkgZXhwb3NlcyBhIHByZW1hZGUgaW5zdGFuY2UgZm9yIHlvdSB0byB1c2UuXG4gKiAvL29yXG4gKiB2YXIgbG9hZGVyID0gbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIoKTsgLy8geW91IGNhbiBhbHNvIGNyZWF0ZSB5b3VyIG93biBpZiB5b3Ugd2FudFxuICpcbiAqIGxvYWRlci5hZGQoJ2J1bm55JyxcImRhdGEvYnVubnkucG5nXCIpO1xuICpcbiAqIGxvYWRlci5vbmNlKCdjb21wbGV0ZScsb25Bc3NldHNMb2FkZWQpO1xuICpcbiAqIGxvYWRlci5sb2FkKCk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuUmVzb3VyY2VMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmxvYWRlcnNcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpXG57XG4gICAgUmVzb3VyY2VMb2FkZXIuY2FsbCh0aGlzLCBiYXNlVXJsLCBjb25jdXJyZW5jeSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IExvYWRlci5fcGl4aU1pZGRsZXdhcmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy51c2UoTG9hZGVyLl9waXhpTWlkZGxld2FyZVtpXSgpKTtcbiAgICB9XG59XG5cbkxvYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuTG9hZGVyLl9waXhpTWlkZGxld2FyZSA9IFtcbiAgICAvLyBwYXJzZSBhbnkgYmxvYiBpbnRvIG1vcmUgdXNhYmxlIG9iamVjdHMgKGUuZy4gSW1hZ2UpXG4gICAgUmVzb3VyY2VMb2FkZXIubWlkZGxld2FyZS5wYXJzaW5nLmJsb2IsXG4gICAgLy8gcGFyc2UgYW55IEltYWdlIG9iamVjdHMgaW50byB0ZXh0dXJlc1xuICAgIHRleHR1cmVQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIHNwcml0ZXNoZWV0UGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBiaXRtYXBGb250UGFyc2VyXG5dO1xuXG5Mb2FkZXIuYWRkUGl4aU1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLnB1c2goZm4pO1xufTtcblxuLy8gQWRkIGN1c3RvbSBleHRlbnRpb25zXG52YXIgUmVzb3VyY2UgPSBSZXNvdXJjZUxvYWRlci5SZXNvdXJjZTtcblxuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSgnZm50JywgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpO1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSwgaXRzIG5vdCBqc29uLCBvciBpdCBpc24ndCBzcHJpdGVzaGVldCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNKc29uIHx8ICFyZXNvdXJjZS5kYXRhLmZyYW1lcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByb3V0ZSA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKSk7XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybCggcmVzb3VyY2UudXJsICk7XG5cbiAgICAgICAgLy8gbG9hZCB0aGUgaW1hZ2UgZm9yIHRoaXMgc2hlZXRcbiAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCByb3V0ZSArICcvJyArIHJlc291cmNlLmRhdGEubWV0YS5pbWFnZSwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzID0ge307XG5cbiAgICAgICAgICAgIHZhciBmcmFtZXMgPSByZXNvdXJjZS5kYXRhLmZyYW1lcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmcmFtZXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBmcmFtZXNbaV0uZnJhbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVjdClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaW0gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC5oLCByZWN0LncpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC53LCByZWN0LmgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS50cmltbWVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmltID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnggLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnkgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLncgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLmggLyByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsaXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQhXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBzaXplLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUueSAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoIC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0IC89IHJlc29sdXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXNbaV0gPSBuZXcgY29yZS5UZXh0dXJlKHJlcy50ZXh0dXJlLmJhc2VUZXh0dXJlLCBzaXplLCBzaXplLmNsb25lKCksIHRyaW0sIGZyYW1lc1tpXS5yb3RhdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbaV0gPSByZXNvdXJjZS50ZXh0dXJlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZSBpZiB0aGUgZGF0YSBpcyBhbiBJbWFnZSBvYmplY3RcbiAgICAgICAgaWYgKHJlc291cmNlLmRhdGEgJiYgcmVzb3VyY2UuaXNJbWFnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGJhc2VUZXh0dXJlID0gbmV3IGNvcmUuQmFzZVRleHR1cmUocmVzb3VyY2UuZGF0YSwgbnVsbCwgY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwocmVzb3VyY2UudXJsKSk7XG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IHJlc291cmNlLnVybDtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmUgPSBuZXcgY29yZS5UZXh0dXJlKGJhc2VUZXh0dXJlKTtcbiAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1Y250aW9uc1xuICAgICAgICAgICAgY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSBiYXNlVGV4dHVyZTtcbiAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSByZXNvdXJjZS50ZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICB0ZW1wUG9seWdvbiA9IG5ldyBjb3JlLlBvbHlnb24oKTtcblxuLyoqXG4gKiBCYXNlIG1lc2ggY2xhc3NcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRvIHVzZVxuICogQHBhcmFtIFt2ZXJ0aWNlc10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdmVydGljZXNcbiAqIEBwYXJhbSBbdXZzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB1dnNcbiAqIEBwYXJhbSBbaW5kaWNlc10ge1VpbnQxNkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBpbmRpY2VzXG4gKiBAcGFyYW0gW2RyYXdNb2RlXSB7bnVtYmVyfSB0aGUgZHJhd01vZGUsIGNhbiBiZSBhbnkgb2YgdGhlIE1lc2guRFJBV19NT0RFUyBjb25zdHNcbiAqL1xuZnVuY3Rpb24gTWVzaCh0ZXh0dXJlLCB2ZXJ0aWNlcywgdXZzLCBpbmRpY2VzLCBkcmF3TW9kZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gdXZzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEsIDAsXG4gICAgICAgIDEsIDEsXG4gICAgICAgIDAsIDFdKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEwMCwgMCxcbiAgICAgICAgMTAwLCAxMDAsXG4gICAgICAgIDAsIDEwMF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICAvLyAgVE9ETyBhdXRvIGdlbmVyYXRlIHRoaXMgYmFzZWQgb24gZHJhdyBtb2RlIVxuICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXMgfHwgbmV3IFVpbnQxNkFycmF5KFswLCAxLCAzLCAyXSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBNZXNoIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gU2V0IHRvIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVtb3ZlIGFueSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRyaWFuZ2xlcyBpbiBjYW52YXMgbW9kZSBhcmUgYXV0b21hdGljYWxseSBhbnRpYWxpYXNlZCwgdXNlIHRoaXMgdmFsdWUgdG8gZm9yY2UgdHJpYW5nbGVzIHRvIG92ZXJsYXAgYSBiaXQgd2l0aCBlYWNoIG90aGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2F5IHRoZSBNZXNoIHNob3VsZCBiZSBkcmF3biwgY2FuIGJlIGFueSBvZiB0aGUge0BsaW5rIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVN9IGNvbnN0c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuZHJhd01vZGUgPSBkcmF3TW9kZSB8fCBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSDtcblxuICAgIC8vIHJ1biB0ZXh0dXJlIHNldHRlcjtcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBtZXNoIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5NZXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2g7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2g7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc2gucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkubWVzaC5NZXNoI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5tZXNoKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLm1lc2gucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4IHwgMCwgdHJhbnNmb3JtLnR5IHwgMCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHgsIHRyYW5zZm9ybS50eSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoKGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMoY29udGV4dCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIFRyaWFuZ2xlIE1lc2ggbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2ggPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoIC8gMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkgKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgsIChpbmRleCArIDIpLCAoaW5kZXggKyA0KSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIHRyaWFuZ2xlIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDMpXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXgwID0gaW5kaWNlc1tpXSAqIDIsIGluZGV4MSA9IGluZGljZXNbaSArIDFdICogMiwgaW5kZXgyID0gaW5kaWNlc1tpICsgMl0gKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4Mik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyBvbmUgb2YgdGhlIHRyaWFuZ2xlcyB0aGF0IGZvcm0gdGhpcyBNZXNoXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdmVydGljZXMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHZlcnRpY2VzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gdXZzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB1dnMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSBpbmRleDAge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDEge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgyIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlID0gZnVuY3Rpb24gKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpXG57XG4gICAgdmFyIHRleHR1cmVTb3VyY2UgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZTtcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aDtcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXgwXSwgeDEgPSB2ZXJ0aWNlc1tpbmRleDFdLCB4MiA9IHZlcnRpY2VzW2luZGV4Ml07XG4gICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgwICsgMV0sIHkxID0gdmVydGljZXNbaW5kZXgxICsgMV0sIHkyID0gdmVydGljZXNbaW5kZXgyICsgMV07XG5cbiAgICB2YXIgdTAgPSB1dnNbaW5kZXgwXSAqIHRleHR1cmVXaWR0aCwgdTEgPSB1dnNbaW5kZXgxXSAqIHRleHR1cmVXaWR0aCwgdTIgPSB1dnNbaW5kZXgyXSAqIHRleHR1cmVXaWR0aDtcbiAgICB2YXIgdjAgPSB1dnNbaW5kZXgwICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MSA9IHV2c1tpbmRleDEgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYyID0gdXZzW2luZGV4MiArIDFdICogdGV4dHVyZUhlaWdodDtcblxuICAgIGlmICh0aGlzLmNhbnZhc1BhZGRpbmcgPiAwKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmdYID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgcGFkZGluZ1kgPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciBjZW50ZXJYID0gKHgwICsgeDEgKyB4MikgLyAzO1xuICAgICAgICB2YXIgY2VudGVyWSA9ICh5MCArIHkxICsgeTIpIC8gMztcblxuICAgICAgICB2YXIgbm9ybVggPSB4MCAtIGNlbnRlclg7XG4gICAgICAgIHZhciBub3JtWSA9IHkwIC0gY2VudGVyWTtcblxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgwID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkwID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgLy9cblxuICAgICAgICBub3JtWCA9IHgxIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MSAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgxID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkxID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgbm9ybVggPSB4MiAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTIgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MiA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MiA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cblxuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGNvbnRleHQuY2xpcCgpO1xuXG4gICAgLy8gQ29tcHV0ZSBtYXRyaXggdHJhbnNmb3JtXG4gICAgdmFyIGRlbHRhID0gICh1MCAqIHYxKSAgICAgICsgKHYwICogdTIpICAgICAgKyAodTEgKiB2MikgICAgICAtICh2MSAqIHUyKSAgICAgIC0gKHYwICogdTEpICAgICAgLSAodTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQSA9ICh4MCAqIHYxKSAgICAgICsgKHYwICogeDIpICAgICAgKyAoeDEgKiB2MikgICAgICAtICh2MSAqIHgyKSAgICAgIC0gKHYwICogeDEpICAgICAgLSAoeDAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQiA9ICh1MCAqIHgxKSAgICAgICsgKHgwICogdTIpICAgICAgKyAodTEgKiB4MikgICAgICAtICh4MSAqIHUyKSAgICAgIC0gKHgwICogdTEpICAgICAgLSAodTAgKiB4Mik7XG4gICAgdmFyIGRlbHRhQyA9ICh1MCAqIHYxICogeDIpICsgKHYwICogeDEgKiB1MikgKyAoeDAgKiB1MSAqIHYyKSAtICh4MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB4MikgLSAodTAgKiB4MSAqIHYyKTtcbiAgICB2YXIgZGVsdGFEID0gKHkwICogdjEpICAgICAgKyAodjAgKiB5MikgICAgICArICh5MSAqIHYyKSAgICAgIC0gKHYxICogeTIpICAgICAgLSAodjAgKiB5MSkgICAgICAtICh5MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFFID0gKHUwICogeTEpICAgICAgKyAoeTAgKiB1MikgICAgICArICh1MSAqIHkyKSAgICAgIC0gKHkxICogdTIpICAgICAgLSAoeTAgKiB1MSkgICAgICAtICh1MCAqIHkyKTtcbiAgICB2YXIgZGVsdGFGID0gKHUwICogdjEgKiB5MikgKyAodjAgKiB5MSAqIHUyKSArICh5MCAqIHUxICogdjIpIC0gKHkwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHkyKSAtICh1MCAqIHkxICogdjIpO1xuXG4gICAgY29udGV4dC50cmFuc2Zvcm0oZGVsdGFBIC8gZGVsdGEsIGRlbHRhRCAvIGRlbHRhLFxuICAgICAgICBkZWx0YUIgLyBkZWx0YSwgZGVsdGFFIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQyAvIGRlbHRhLCBkZWx0YUYgLyBkZWx0YSk7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlU291cmNlLCAwLCAwKTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBmbGF0IE1lc2hcbiAqXG4gKiBAcGFyYW0gTWVzaCB7UElYSS5tZXNoLk1lc2h9IFRoZSBNZXNoIHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUucmVuZGVyTWVzaEZsYXQgPSBmdW5jdGlvbiAoTWVzaClcbntcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICB2YXIgdmVydGljZXMgPSBNZXNoLnZlcnRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aC8yO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgZm9yICh2YXIgaT0xOyBpIDwgbGVuZ3RoLTI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkqMjtcblxuICAgICAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleF0sICAgeDEgPSB2ZXJ0aWNlc1tpbmRleCsyXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleCs0XTtcbiAgICAgICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgrMV0sIHkxID0gdmVydGljZXNbaW5kZXgrM10sIHkyID0gdmVydGljZXNbaW5kZXgrNV07XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVwZGF0ZUZyYW1lID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBtZXNoIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5NZXNoLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICghdGhpcy5fY3VycmVudEJvdW5kcykge1xuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1pblkgPSBJbmZpbml0eTtcblxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IG47IGkgKz0gMikge1xuICAgICAgICAgICAgdmFyIHJhd1ggPSB2ZXJ0aWNlc1tpXSwgcmF3WSA9IHZlcnRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciB4ID0gKGEgKiByYXdYKSArIChjICogcmF3WSkgKyB0eDtcbiAgICAgICAgICAgIHZhciB5ID0gKGQgKiByYXdZKSArIChiICogcmF3WCkgKyB0eTtcblxuICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcblxuICAgICAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG4gICAgICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5YID09PSAtSW5maW5pdHkgfHwgbWF4WSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIG1lc2guIFdvcmtzIG9ubHkgZm9yIFRSSUFOR0xFX01FU0hcbiAqXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4gKi9cbk1lc2gucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKSB7XG4gICAgaWYgKCF0aGlzLmdldEJvdW5kcygpLmNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgcG9pbnRzID0gdGVtcFBvbHlnb24ucG9pbnRzO1xuICAgIHZhciBpLCBsZW47XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUykge1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICAgICAgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgLy9UT0RPOiBpbmxpbmUgdGhpcy5cbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Mykge1xuICAgICAgICAgICAgdmFyIGluZDAgPSBpbmRpY2VzW2ldKjIsIGluZDEgPSBpbmRpY2VzW2krMV0qMiwgaW5kMiA9IGluZGljZXNbaSsyXSoyO1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaW5kMF07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpbmQwKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaW5kMV07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpbmQxKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaW5kMl07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpbmQyKzFdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Nikge1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaSsyXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2krM107XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpKzRdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaSs1XTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEaWZmZXJlbnQgZHJhd2luZyBidWZmZXIgbW9kZXMgc3VwcG9ydGVkXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSFxuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gKi9cbk1lc2guRFJBV19NT0RFUyA9IHtcbiAgICBUUklBTkdMRV9NRVNIOiAwLFxuICAgIFRSSUFOR0xFUzogMVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG5cbi8qKlxuICogVGhlIFBsYW5lIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIFBsYW5lID0gbmV3IFBJWEkuUGxhbmUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgUGxhbmUuXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNYIC0gVGhlIG51bWJlciBveCB4IHNlZ21lbnRzXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNZIC0gVGhlIG51bWJlciBvZiB5IHNlZ21lbnRzXG4gKlxuICovXG5mdW5jdGlvbiBQbGFuZSh0ZXh0dXJlLCBzZWdtZW50c1gsIHNlZ21lbnRzWSlcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgUGxhbmUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWdtZW50c1ggPSAgc2VnbWVudHNYIHx8IDEwO1xuICAgIHRoaXMuc2VnbWVudHNZID0gc2VnbWVudHNZIHx8IDEwO1xuXG4gICAgdGhpcy5kcmF3TW9kZSA9IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVM7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUGxhbmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKTtcblBsYW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsYW5lO1xubW9kdWxlLmV4cG9ydHMgPSBQbGFuZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblBsYW5lLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciB0b3RhbCA9IHRoaXMuc2VnbWVudHNYICogdGhpcy5zZWdtZW50c1k7XG4gICAgdmFyIHZlcnRzID0gW107XG4gICAgdmFyIGNvbG9ycyA9IFtdO1xuICAgIHZhciB1dnMgPSBbXTtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuXG4gIC8vICB0ZXh0dXJlLndpZHRoID0gODAwIHRleHR1cmUud2lkdGggfHwgODAwO1xuIC8vICAgdGV4dHVyZS5oZWlnaHQgPSA4MDAvL3RleHR1cmUuaGVpZ2h0IHx8IDgwMDtcblxuICAgIHZhciBzZWdtZW50c1hTdWIgPSB0aGlzLnNlZ21lbnRzWCAtIDE7XG4gICAgdmFyIHNlZ21lbnRzWVN1YiA9IHRoaXMuc2VnbWVudHNZIC0gMTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB2YXIgc2l6ZVggPSB0ZXh0dXJlLndpZHRoIC8gc2VnbWVudHNYU3ViO1xuICAgIHZhciBzaXplWSA9IHRleHR1cmUuaGVpZ2h0IC8gc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcblxuICAgICAgICB2YXIgeCA9IChpICUgdGhpcy5zZWdtZW50c1gpO1xuICAgICAgICB2YXIgeSA9ICggKGkgLyB0aGlzLnNlZ21lbnRzWCApIHwgMCApO1xuXG5cbiAgICAgICAgdmVydHMucHVzaCgoeCAqIHNpemVYKSxcbiAgICAgICAgICAgICAgICAgICAoeSAqIHNpemVZKSk7XG5cbiAgICAgICAgLy8gdGhpcyB3b3JrcyBmb3IgcmVjdGFuZ3VsYXIgdGV4dHVyZXMuIFxuICAgICAgICB1dnMucHVzaCh0ZXh0dXJlLl91dnMueDAgKyAodGV4dHVyZS5fdXZzLngxIC0gdGV4dHVyZS5fdXZzLngwKSAqICh4IC8gKHRoaXMuc2VnbWVudHNYLTEpKSwgdGV4dHVyZS5fdXZzLnkwICsgKHRleHR1cmUuX3V2cy55My10ZXh0dXJlLl91dnMueTApICogKHkvICh0aGlzLnNlZ21lbnRzWS0xKSkpO1xuICAgICAgfVxuXG4gICAgLy8gIGNvbnNcblxuICAgIHZhciB0b3RhbFN1YiA9IHNlZ21lbnRzWFN1YiAqIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFN1YjsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHhwb3MgPSBpICUgc2VnbWVudHNYU3ViO1xuICAgICAgICB2YXIgeXBvcyA9IChpIC8gc2VnbWVudHNYU3ViICkgfCAwO1xuXG5cbiAgICAgICAgdmFyICB2YWx1ZSA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTIgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuICAgICAgICB2YXIgIHZhbHVlMyA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWU0ID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMyk7XG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZTIsIHZhbHVlNCwgdmFsdWUzKTtcbiAgICB9XG5cblxuICAgIC8vY29uc29sZS5sb2coaW5kaWNlcylcbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0cyk7XG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHV2cyk7XG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvbG9ycyk7XG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBsYW5lLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUGxhbmUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSByb3BlIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIHJvcGUgPSBuZXcgUElYSS5Sb3BlKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIHJvcGUuXG4gKiBAcGFyYW0ge1BJWEkuUG9pbnRbXX0gcG9pbnRzIC0gQW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuUG9pbnR9IG9iamVjdHMgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAqXG4gKi9cbmZ1bmN0aW9uIFJvcGUodGV4dHVyZSwgcG9pbnRzKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfSBBbiBhcnJheSBvZiBwb2ludHMgdGhhdCBkZXRlcm1pbmUgdGhlIHJvcGVcbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBvZiB2ZXJ0aWNlcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IFRoZSBXZWJHTCBVdnMgb2YgdGhlIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBjb21wb25lbnRzXG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSByb3BlIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICAgdGhpcy5yZWZyZXNoKCk7XG59XG5cblxuLy8gY29uc3RydWN0b3JcblJvcGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNZXNoLnByb3RvdHlwZSk7XG5Sb3BlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvcGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvcGU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5Sb3BlLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICAvLyBpZiB0b28gbGl0dGxlIHBvaW50cywgb3IgdGV4dHVyZSBoYXNuJ3QgZ290IFVWcyBzZXQgeWV0IGp1c3QgbW92ZSBvbi5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEgfHwgIXRoaXMuX3RleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cbiAgICB2YXIgdGV4dHVyZVV2cyA9IHRoaXMuX3RleHR1cmUuX3V2cztcbiAgICB2YXIgb2Zmc2V0ID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MCk7XG4gICAgdmFyIGZhY3RvciA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDIgLSB0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkyIC0gdGV4dHVyZVV2cy55MCk7XG5cbiAgICB1dnNbMF0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzFdID0gMCArIG9mZnNldC55O1xuICAgIHV2c1syXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgIGNvbG9yc1swXSA9IDE7XG4gICAgY29sb3JzWzFdID0gMTtcblxuICAgIGluZGljZXNbMF0gPSAwO1xuICAgIGluZGljZXNbMV0gPSAxO1xuXG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCBhbW91bnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcbiAgICAgICAgLy8gdGltZSB0byBkbyBzb21lIHNtYXJ0IGRyYXdpbmchXG4gICAgICAgIGFtb3VudCA9IGkgLyAodG90YWwtMSk7XG5cbiAgICAgICAgdXZzW2luZGV4XSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCsxXSA9IDAgKyBvZmZzZXQueTtcblxuICAgICAgICB1dnNbaW5kZXgrMl0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBjb2xvcnNbaW5kZXhdID0gMTtcbiAgICAgICAgY29sb3JzW2luZGV4KzFdID0gMTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGluZGV4O1xuICAgICAgICBpbmRpY2VzW2luZGV4ICsgMV0gPSBpbmRleCArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFJvcGUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9pbnQgPSBwb2ludHNbMF07XG4gICAgdmFyIG5leHRQb2ludDtcbiAgICB2YXIgcGVycFggPSAwO1xuICAgIHZhciBwZXJwWSA9IDA7XG5cbiAgICAvLyB0aGlzLmNvdW50IC09IDAuMjtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCByYXRpbywgcGVycExlbmd0aCwgbnVtO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG5cbiAgICAgICAgaWYgKGkgPCBwb2ludHMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50c1tpKzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwWSA9IC0obmV4dFBvaW50LnggLSBsYXN0UG9pbnQueCk7XG4gICAgICAgIHBlcnBYID0gbmV4dFBvaW50LnkgLSBsYXN0UG9pbnQueTtcblxuICAgICAgICByYXRpbyA9ICgxIC0gKGkgLyAodG90YWwtMSkpKSAqIDEwO1xuXG4gICAgICAgIGlmIChyYXRpbyA+IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhdGlvID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBMZW5ndGggPSBNYXRoLnNxcnQocGVycFggKiBwZXJwWCArIHBlcnBZICogcGVycFkpO1xuICAgICAgICBudW0gPSB0aGlzLl90ZXh0dXJlLmhlaWdodCAvIDI7IC8vKDIwICsgTWF0aC5hYnMoTWF0aC5zaW4oKGkgKyB0aGlzLmNvdW50KSAqIDAuMykgKiA1MCkgKSogcmF0aW87XG4gICAgICAgIHBlcnBYIC89IHBlcnBMZW5ndGg7XG4gICAgICAgIHBlcnBZIC89IHBlcnBMZW5ndGg7XG5cbiAgICAgICAgcGVycFggKj0gbnVtO1xuICAgICAgICBwZXJwWSAqPSBudW07XG5cbiAgICAgICAgdmVydGljZXNbaW5kZXhdID0gcG9pbnQueCArIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsxXSA9IHBvaW50LnkgKyBwZXJwWTtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMl0gPSBwb2ludC54IC0gcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzNdID0gcG9pbnQueSAtIHBlcnBZO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IHBvaW50O1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5tZXNoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1lc2g6ICAgICAgICAgICByZXF1aXJlKCcuL01lc2gnKSxcbiAgICBQbGFuZTogICAgICAgICAgIHJlcXVpcmUoJy4vUGxhbmUnKSxcbiAgICBSb3BlOiAgICAgICAgICAgcmVxdWlyZSgnLi9Sb3BlJyksXG4gICAgTWVzaFJlbmRlcmVyOiAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFJlbmRlcmVyJyksXG4gICAgTWVzaFNoYWRlcjogICAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFNoYWRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgTWVzaCA9IHJlcXVpcmUoJy4uL01lc2gnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBNZXNoUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL01lc2hSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDE1MDAwKTtcblxuICAgIC8vVE9ETyB0aGlzIGNvdWxkIGJlIGEgc2luZ2xlIGJ1ZmZlciBzaGFyZWQgYW1vbmdzdCBhbGwgcmVuZGVyZXJzIGFzIHdlIHJldXNlIHRoaXMgc2V0IHVwIGluIG1vc3QgcmVuZGVyZXJzXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCAxNTAwMDsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59XG5cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hSZW5kZXJlcjtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoJywgTWVzaFJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIGlmKCFtZXNoLl92ZXJ0ZXhCdWZmZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9pbml0V2ViR0wobWVzaCk7XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcixcbiAgICAgICAgZ2wgPSByZW5kZXJlci5nbCxcbiAgICAgICAgdGV4dHVyZSA9IG1lc2guX3RleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIHNoYWRlciA9IG1lc2guc2hhZGVyOy8vIHx8IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuXG4gICAgdmFyIGRyYXdNb2RlID0gbWVzaC5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0ggPyBnbC5UUklBTkdMRV9TVFJJUCA6IGdsLlRSSUFOR0xFUztcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKG1lc2guYmxlbmRNb2RlKTtcblxuICAgIC8vVE9ETyBjYWNoZSBjdXN0b20gc3RhdGUuLlxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHNoYWRlci5zaGFkZXJzW2dsLmlkXSB8fCBzaGFkZXIuZ2V0U2hhZGVyKHJlbmRlcmVyKTsvLyA6IHNoYWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXgudmFsdWUgPSBtZXNoLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXgudmFsdWUgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSBtZXNoLndvcmxkQWxwaGE7XG5cbiAgICBzaGFkZXIuc3luY1VuaWZvcm1zKCk7XG5cbiAgICBpZiAoIW1lc2guZGlydHkpXG4gICAge1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgbWVzaC52ZXJ0aWNlcyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG1lc2guaW5kaWNlcyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgbWVzaC5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb250IG5lZWQgdG8gdXBsb2FkIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgfVxuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGRyYXdNb2RlLCBtZXNoLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG5cbn07XG5cbi8qKlxuICogUHJlcGFyZXMgYWxsIHRoZSBidWZmZXJzIHRvIHJlbmRlciB0aGlzIG1lc2hcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuX2luaXRXZWJHTCA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIC8vIGJ1aWxkIHRoZSBzdHJpcCFcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgbWVzaC5fdmVydGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5faW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl91dkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG5cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICBpZihtZXNoLmNvbG9ycyl7XG4gICAgICAgIG1lc2guX2NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl9jb2xvckJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLmNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbn07XG5cblxuLyoqXG4gKiBFbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IG1lc2ggcmVuZGVyZXIuXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBcblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBNZXNoIHJlbmRlcmVyXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgV2ViR0wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgY29yZS5TaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogYWxwaGEgOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVZlcnRleFBvc2l0aW9uOjAsXG4gICAgICAgICAgICBhVGV4dHVyZUNvb3JkOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cbk1lc2hTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNoYWRlci5wcm90b3R5cGUpO1xuTWVzaFNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoU2hhZGVyO1xuXG5jb3JlLlNoYWRlck1hbmFnZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2hTaGFkZXInLCBNZXNoU2hhZGVyKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3NpZ25cblxuaWYgKCFNYXRoLnNpZ24pXG57XG4gICAgTWF0aC5zaWduID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCA9ICt4O1xuICAgICAgICBpZiAoeCA9PT0gMCB8fCBpc05hTih4KSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPiAwID8gMSA6IC0xO1xuICAgIH07XG59XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9vYmplY3QtYXNzaWduXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5cbmlmICghT2JqZWN0LmFzc2lnbilcbntcbiAgICBPYmplY3QuYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xufVxuIiwicmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL3JlcXVlc3RBbmltYXRpb25GcmFtZScpO1xucmVxdWlyZSgnLi9NYXRoLnNpZ24nKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTU3OTY3MVxuLy8gaHR0cDovL3VwZGF0ZXMuaHRtbDVyb2Nrcy5jb20vMjAxMi8wNS9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUtQVBJLW5vdy13aXRoLXN1Yi1taWxsaXNlY29uZC1wcmVjaXNpb25cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RpbWhhbGwvNDA3ODYxNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0ZpbmFuY2lhbC1UaW1lcy9wb2x5ZmlsbC1zZXJ2aWNlL3RyZWUvbWFzdGVyL3BvbHlmaWxscy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcblxuLy8gRXhwZWN0ZWQgdG8gYmUgdXNlZCB3aXRoIEJyb3dzZXJmaXlcbi8vIEJyb3dzZXJpZnkgYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZSB1c2Ugb2YgYGdsb2JhbGAgYW5kIHBhc3NlcyB0aGVcbi8vIGNvcnJlY3QgcmVmZXJlbmNlIG9mIGBnbG9iYWxgLCBgc2VsZmAsIGFuZCBmaW5hbGx5IGB3aW5kb3dgXG5cbi8vIERhdGUubm93XG5pZiAoIShEYXRlLm5vdyAmJiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lKSkge1xuICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcbn1cblxuLy8gcGVyZm9ybWFuY2Uubm93XG5pZiAoIShnbG9iYWwucGVyZm9ybWFuY2UgJiYgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdykpIHtcbiAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIWdsb2JhbC5wZXJmb3JtYW5jZSkge1xuICAgICAgICBnbG9iYWwucGVyZm9ybWFuY2UgPSB7fTtcbiAgICB9XG4gICAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgfTtcbn1cblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xudmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xuXG5mb3IodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8XG4gICAgICAgIGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xufVxuXG5pZiAoIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCksXG4gICAgICAgICAgICBkZWxheSA9IDE2ICsgbGFzdFRpbWUgLSBjdXJyZW50VGltZTtcblxuICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgIH07XG59XG5cbmlmICghZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xufVxuIl19 //# sourceMappingURL=pixi.js.map diff --git a/bin/pixi.js.map b/bin/pixi.js.map index 1d72f43..3256814 100644 --- a/bin/pixi.js.map +++ b/bin/pixi.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi.js","sourceRoot":"./","sourcesContent":[]} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi.js","sourceRoot":"./","sourcesContent":[]} \ No newline at end of file diff --git a/bin/pixi.min.js b/bin/pixi.min.js index db31e4a..ee1b45b 100644 --- a/bin/pixi.min.js +++ b/bin/pixi.min.js @@ -1,11 +1,11 @@ !function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&this.texture.uploadData(null,t,e),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=i.fromData(t,null,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a.unbind(),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a.unbind(),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t||null)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){return this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate(),this},i.prototype.unbind=function(){return this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null),this},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=X(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function P(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function D(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},X=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},Y="function"==typeof setImmediate&&setImmediate,z=Y?function(t){Y(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=Y?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=X(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return P(t,1,e)},N.log=D("log"),N.dir=D("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return P.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return D.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",P=/^xn--/,D=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r); g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v,p=""),d=decodeURIComponent(c),f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,P=M.length;P>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var D=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(D.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=D.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var X=i.indexOf("#");-1!==X&&(this.hash=i.substr(X),i=i.slice(0,X));var Y=i.indexOf("?");if(-1!==Y?(this.search=i.substr(Y),this.query=i.substr(Y+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,Y)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","gl-matrix":"git+https://github.com/toji/gl-matrix.git","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirtyTransform=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":56,"../textures/RenderTexture":100,"../utils":107,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.transform=new a,this.position=this.transform.position,this.scale=this.transform.scale,this.pivot=this.transform.pivot,this.skew=this.transform.skew,this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),t("./Transform")),h=new n.Matrix,u={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i;var l=function(t){this.doc=t,this.x=0,this.y=0};Object.defineProperties(l.prototype,{x:{get:function(){return this.doc.position.x},set:function(t){this.doc.position.x=t,this.doc.dirtyTransform=!0}},y:{get:function(){return this.doc.posiiton.y},set:function(t){this.doc.position.y=t,this.doc.dirtyTransform=!0}}}),Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return h.tx=-i.x,h.ty=-i.y,n.render(this,h),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":56,"../textures/RenderTexture":100,"./Transform":41,eventemitter3:25}],41:[function(t,e,r){function i(){this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.position=new n.Point(0),this.scale=new n.Point(1,1),this.pivot=new n.Point(0),this.skew=new n.Point(0),this.rotation=0,this.dirty=!0}var n=t("../math");i.prototype.constructor=i,i.prototype.updateTransform=function(t){var e=t.worldTransform,r=this.worldTransform,i=this.localTransform;return i.a=this._cr*this.scale.x,i.b=this._sr*this.scale.x,i.c=-this._sr*this.scale.y,i.d=this._cr*this.scale.y,i.tx=this.position.x-(this.pivot.x*i.a+this.pivot.y*i.c),i.ty=this.position.y-(this.pivot.x*i.b+this.pivot.y*i.d),r.a=i.a*e.a+i.b*e.c,r.b=i.a*e.b+i.b*e.d,r.c=i.c*e.a+i.d*e.c,r.d=i.c*e.b+i.d*e.d,r.tx=i.tx*e.a+i.ty*e.c+e.tx,r.ty=i.tx*e.b+i.ty*e.d+e.ty,this.dirty=!1,!0},e.exports=i},{"../math":56}],42:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils":107,"./WebGLGraphicsData":45,"./shaders/PrimitiveShader":46,"./utils/buildCircle":47,"./utils/buildComplexPoly":48,"./utils/buildLine":49,"./utils/buildPoly":50,"./utils/buildRectangle":51,"./utils/buildRoundedRectangle":52,earcut:24}],45:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],46:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],47:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":107,"./buildLine":49}],48:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":107,"./buildLine":49}],49:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":56,"../../../utils":107}],50:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":107}],51:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":107,"./buildLine":49}],52:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":107,"./buildLine":49}],53:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),BaseRenderTexture:t("./textures/BaseRenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":42,"./graphics/GraphicsData":43,"./graphics/webgl/GraphicsRenderer":44,"./math":56,"./particles/ParticleContainer":62,"./particles/webgl/ParticleRenderer":64,"./renderers/canvas/CanvasRenderer":67,"./renderers/canvas/utils/CanvasBuffer":68,"./renderers/canvas/utils/CanvasGraphics":69,"./renderers/webgl/WebGLRenderer":73,"./renderers/webgl/filters/AbstractFilter":74,"./renderers/webgl/filters/FXAAFilter":75,"./renderers/webgl/filters/SpriteMaskFilter":76,"./renderers/webgl/managers/ShaderManager":80,"./renderers/webgl/managers/WebGLManager":82,"./renderers/webgl/shaders/Shader":85,"./renderers/webgl/utils/ObjectRenderer":88,"./renderers/webgl/utils/RenderTarget":90,"./sprites/Sprite":94,"./sprites/webgl/SpriteRenderer":95,"./text/Text":97,"./textures/BaseRenderTexture":98,"./textures/BaseTexture":99,"./textures/RenderTexture":100,"./textures/Texture":101,"./textures/TextureUvs":102,"./textures/VideoBaseTexture":103,"./ticker":105,"./utils":107,"pixi-gl-core":1}],54:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":55}],55:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],56:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":54,"./Point":55,"./shapes/Circle":57,"./shapes/Ellipse":58,"./shapes/Polygon":59,"./shapes/Rectangle":60,"./shapes/RoundedRectangle":61}],57:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":60}],58:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":60}],59:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":55}],60:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],62:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"./ParticleBuffer":63,"./ParticleShader":65}],65:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{ -uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":86}],66:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,transform:{worldTransform:new o.Matrix},worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":56,"../utils":107,eventemitter3:25}],67:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":56,"../../utils":107,"../SystemRenderer":66,"./utils/CanvasMaskManager":70}],68:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],69:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],70:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":69}],71:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":86}],75:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\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\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\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)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":74}],76:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":56,"./AbstractFilter":74}],77:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":82}],78:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":107}],86:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":85}],87:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],88:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":82}],89:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],90:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=(t("pixi-gl-core").GLTexture,t("pixi-gl-core").GLFramebuffer),s=t("./StencilMaskStack"),a=function(t,e,r,a,h,u){this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=h||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.defaultFrame=new PIXI.Rectangle,this.destinationFrame=null,this.sourceFrame=null,this.stencilBuffer=null,this.stencilMaskStack=new s,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=a||n.SCALE_MODES.DEFAULT,this.root=u,this.frameBuffer=o.createRGBA(t,100,100),this.root?this.frameBuffer.framebuffer=null:this.texture=this.frameBuffer.texture,this.resize(e,r)};a.prototype.constructor=a,e.exports=a,a.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},a.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},a.prototype.activate=function(t,e){var r=this.gl;this.frameBuffer.bind(),this.destinationFrame=t||this.destinationFrame||this.defaultFrame,this.sourceFrame=e||this.sourceFrame||t,this.calculateProjection(this.destinationFrame,this.sourceFrame),this.transform&&this.projectionMatrix.append(this.transform),this.destinationFrame!==this.sourceFrame?(r.enable(r.SCISSOR_TEST),r.scissor(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)):r.disable(r.SCISSOR_TEST),r.viewport(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)},a.prototype.calculateProjection=function(t,e){var r=this.projectionMatrix;e=e||t,r.identity(),this.root?(r.a=1/t.width*2,r.d=-1/t.height*2,r.tx=-1-e.x*r.a,r.ty=1-e.y*r.d):(r.a=1/t.width*2,r.d=1/t.height*2,r.tx=-1-e.x*r.a,r.ty=-1-e.y*r.d)},a.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.defaultFrame.width=t,this.defaultFrame.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},a.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":56,"../../../utils":107,"./StencilMaskStack":91,"pixi-gl-core":1}],91:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],92:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],93:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],94:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.transform.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0); -}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],97:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=t,this.height=e,this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(t){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear(!1,t))},i.prototype.renderWebGL=function(t,e,r,i,n){if(this.valid){if(n=void 0!==n?n:!0,this.textureBuffer.transform=r,this.textureBuffer.activate(),e.worldAlpha=1,n){e.worldTransform.identity(),e.currentBounds=null;var o,s,a=e.children;for(o=0,s=a.length;s>o;++o)a[o].updateTransform()}p.width=t.height,p.height=t.width;var h=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.textureBuffer.activate(t,p),console.log(e),this.renderer.renderDisplayObject(e,this.textureBuffer,i),this.renderer.filterManager=h}},i.prototype.renderCanvas=function(t,e,r,i,n){if(this.valid){n=!!n;var o=c;o.identity(),r&&o.append(r),o.tx+=t.x,o.ty+=t.y;var s=e.worldTransform;e.worldTransform=o,e.worldAlpha=1;var a,h,u=e.children;for(a=0,h=u.length;h>a;++a)u[a].updateTransform();i&&this.textureBuffer.clear();var l=this.textureBuffer.context,p=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(e,l),this.renderer.resolution=p,e.worldTransform===o&&(e.worldTransform=s)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(t){var e=new Image;return e.src=this.getBase64(t),e},i.prototype.getBase64=function(t){return this.getCanvas(t).toDataURL()},i.prototype.getCanvas=function(t){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution,i=this.renderer.gl,n=new Uint8Array(4*e*r);i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null);var o=new h(e,r),s=o.context.getImageData(0,0,e,r);return s.data.set(n),o.context.putImageData(s,0,0),o.canvas}if(t||(t=p,t.width=this.textureBuffer.canvas.width,t.height=this.textureBuffer.canvas.height),t.width===this.textureBuffer.canvas.width&&t.height===this.textureBuffer.canvas.height)return this.textureBuffer.canvas;var a=this.resolution,o=new h(t.width*a,t.height*a),s=this.textureBuffer.context.getImageData(t.x*a,t.y*a,t.width*a,t.height*a);return o.context.putImageData(s,0,0),o.canvas},i.prototype.getPixels=function(t){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var i=this.renderer.gl,n=new Uint8Array(4*e*r);return i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null),n}return this.textureBuffer.canvas.getContext("2d").getImageData(t.x*this.resolution,t.y*this.resolution,e,r).data},i.prototype.getPixel=function(t,e,r){return p.x=e,p.y=r,p.width=1/this.resolution,p.height=1/this.resolution,t&&(p.x+=t.x,p.y+=t.y),this.getPixels(p)}},{"../const":38,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/webgl/managers/FilterManager":78,"../renderers/webgl/utils/RenderTarget":90,"./BaseTexture":99,"./Texture":101}],99:[function(t,e,r){function i(t,e,r){s.call(this),this.uid=n.uid(),this.resolution=r||1,this.width=100,this.height=100,this.realWidth=100,this.realHeight=100,this.scaleMode=e||o.SCALE_MODES.DEFAULT,this.hasLoaded=!1,this.isLoading=!1,this.source=null,this.premultipliedAlpha=!0,this.imageUrl=null,this.isPowerOfTwo=!1,this.mipmap=!1,this._glTextures={},this._active=!1,this._id=0,t&&this.loadSource(t)}var n=t("../utils"),o=t("../const"),s=t("eventemitter3");i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.update=function(){this.realWidth=this.source.naturalWidth||this.source.width,this.realHeight=this.source.naturalHeight||this.source.height,this.width=this.realWidth/this.resolution,this.height=this.realHeight/this.resolution,this.isPowerOfTwo=n.isPowerOfTwo(this.realWidth,this.realHeight),this.emit("update",this)},i.prototype.loadSource=function(t){var e=this.isLoading;if(this.hasLoaded=!1,this.isLoading=!1,e&&this.source&&(this.source.onload=null,this.source.onerror=null),this.source=t,(this.source.complete||this.source.getContext)&&this.source.width&&this.source.height)this._sourceLoaded();else if(!t.getContext){this.isLoading=!0;var r=this;t.onload=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r._sourceLoaded(),r.emit("loaded",r))},t.onerror=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r.emit("error",r))},t.complete&&t.src&&(this.isLoading=!1,t.onload=null,t.onerror=null,t.width&&t.height?(this._sourceLoaded(),e&&this.emit("loaded",this)):e&&this.emit("error",this))}},i.prototype._sourceLoaded=function(){this.hasLoaded=!0,this.update()},i.prototype.destroy=function(){this.imageUrl?(delete n.BaseTextureCache[this.imageUrl],delete n.TextureCache[this.imageUrl],this.imageUrl=null,navigator.isCocoonJS||(this.source.src="")):this.source&&this.source._pixiId&&delete n.BaseTextureCache[this.source._pixiId],this.source=null,this.dispose()},i.prototype.dispose=function(){this.emit("dispose",this)},i.prototype.updateSourceImage=function(t){this.source.src=t,this.loadSource(this.source)},i.fromImage=function(t,e,r){var o=n.BaseTextureCache[t];if(void 0===e&&0!==t.indexOf("data:")&&(e=!0),!o){var s=new Image;e&&(s.crossOrigin=""),o=new i(s,r),o.imageUrl=t,s.src=t,n.BaseTextureCache[t]=o,o.resolution=n.getResolutionOfUrl(t)}return o},i.fromCanvas=function(t,e){t._pixiId||(t._pixiId="canvas_"+n.uid());var r=n.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),n.BaseTextureCache[t._pixiId]=r),r}},{"../const":38,"../utils":107,eventemitter3:25}],100:[function(t,e,r){function i(t,e){if(!renderer)throw new Error("Unable to create RenderTexture, you must pass a renderer into the constructor.");o.call(this,t,e),this.valid=!0,this._updateUvs()}var n=t("./BaseRenderTexture"),o=t("./Texture"),s=t("../math");t("../const"),new s.Matrix;i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.resize=function(t,e,r){this.valid=t>0&&e>0,this._frame.width=this.crop.width=t,this._frame.height=this.crop.height=e,r&&this.baseTexture.resize(t,e),this._updateUvs()},i.prototype.clear=function(){this.valid&&this.baseTexture.clear(this.frame)},i.prototype.render=function(t,e,r,i){this.valid&&this.baseTexture.render(this.frame,t,e,r,i)},i.prototype.getImage=function(){return this.baseTexture.getImage(this.frame)},i.prototype.getBase64=function(){return this.getBase64.getImage(this.frame)},i.prototype.getCanvas=function(){return this.baseTexture.getCanvas(this.frame)},i.prototype.getPixels=function(){return this.baseTexture.getPixels(this.frame)},i.prototype.getPixel=function(t,e){return this.baseTexture.getPixel(this.frame,t,e)},i.create=function(t,e,r,o,s){return new i(new n(t,e,r,o,s))}},{"../const":38,"../math":56,"./BaseRenderTexture":98,"./Texture":101}],101:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":56,"../utils":107,"./BaseTexture":99,"./TextureUvs":102,"./VideoBaseTexture":103,eventemitter3:25}],102:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],103:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],105:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":104}],106:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],107:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":108,async:16,eventemitter3:25}],108:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],109:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":53, -"./extras":116,"./filters":133,"./mesh":158}],110:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":53}],118:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":53,"../blur/BlurXFilter":121,"../blur/BlurYFilter":122}],119:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){ -t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":53}],125:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":53}],126:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":53}],127:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":53}],128:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":53}],129:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":53}],130:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":53}],140:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":53}],141:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":53,"./TiltShiftXFilter":142,"./TiltShiftYFilter":143}],142:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":140}],143:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":140}],144:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":53}],145:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":53,"./deprecation":109,"./extras":116,"./filters":133,"./interaction":148,"./loaders":151,"./mesh":158,"./polyfill":163}],146:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":53}],147:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){ -var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":53,"./InteractionData":146,"./interactiveTarget":149}],148:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":146,"./InteractionManager":147,"./interactiveTarget":149}],149:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],150:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":53}],156:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":155}],157:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":53,"./Mesh":155}],158:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":155,"./Plane":156,"./Rope":157,"./webgl/MeshRenderer":159,"./webgl/MeshShader":160}],159:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":53,"../Mesh":155}],160:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":53}],161:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],162:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],163:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":161,"./Object.assign":162,"./requestAnimationFrame":164}],164:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[145])(145)}); +i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.complete=function(){this.data&&this.data.removeEventListener&&(this.data.removeEventListener("error",this._boundOnError),this.data.removeEventListener("load",this._boundComplete),this.data.removeEventListener("progress",this._boundOnProgress),this.data.removeEventListener("canplaythrough",this._boundComplete)),this.xhr&&(this.xhr.removeEventListener?(this.xhr.removeEventListener("error",this._boundXhrOnError),this.xhr.removeEventListener("abort",this._boundXhrOnAbort),this.xhr.removeEventListener("progress",this._boundOnProgress),this.xhr.removeEventListener("load",this._boundXhrOnLoad)):(this.xhr.onerror=null,this.xhr.ontimeout=null,this.xhr.onprogress=null,this.xhr.onload=null)),this.emit("complete",this)},i.prototype.load=function(t){switch(this.emit("start",this),t&&this.once("complete",t),(this.crossOrigin===!1||"string"!=typeof this.crossOrigin)&&(this.crossOrigin=this._determineCrossOrigin(this.url)),this.loadType){case i.LOAD_TYPE.IMAGE:this._loadImage();break;case i.LOAD_TYPE.AUDIO:this._loadElement("audio");break;case i.LOAD_TYPE.VIDEO:this._loadElement("video");break;case i.LOAD_TYPE.XHR:default:h&&this.crossOrigin?this._loadXdr():this._loadXhr()}},i.prototype._loadImage=function(){this.data=new Image,this.crossOrigin&&(this.data.crossOrigin=this.crossOrigin),this.data.src=this.url,this.isImage=!0,this.data.addEventListener("error",this._boundOnError,!1),this.data.addEventListener("load",this._boundComplete,!1),this.data.addEventListener("progress",this._boundOnProgress,!1)},i.prototype._loadElement=function(t){if("audio"===t&&"undefined"!=typeof Audio?this.data=new Audio:this.data=document.createElement(t),null===this.data)return this.error=new Error("Unsupported element "+t),void this.complete();if(navigator.isCocoonJS)this.data.src=Array.isArray(this.url)?this.url[0]:this.url;else if(Array.isArray(this.url))for(var e=0;e0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","gl-matrix":"git+https://github.com/toji/gl-matrix.git","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.transform.dirty=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":57,"../textures/RenderTexture":101,"../utils":108,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.transform=new a,this.position=this.transform.position,this.scale=this.transform.scale,this.pivot=this.transform.pivot,this.skew=this.transform.skew,this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=this.transform.worldTransform,this.localTransform=this.transform.localTransform,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),t("./TransformStatic")),h=new n.Matrix,u={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return h.tx=-i.x,h.ty=-i.y,n.render(this,h),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":57,"../textures/RenderTexture":101,"./TransformStatic":42,eventemitter3:25}],41:[function(t,e,r){function i(t,e,r){this._x=e||0,this._y=r||0,this.transform=t}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this._x},set:function(t){this._x=t,this.transform.dirty=!0}},y:{get:function(){return this._y},set:function(t){this._y=t,this.transform.dirty=!0}}}),i.prototype.set=function(t,e){this._x=t||0,this._y=e||(0!==e?this._x:0),this.transform.dirty=!0}},{}],42:[function(t,e,r){function i(){this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.position=new o(this,0),this.scale=new o(this,1,1),this.pivot=new o(this,0,0),this.skew=new o(this,0,0),this.rotation=0,this._sr=Math.sin(0),this._cr=Math.cos(0),this.dirty=!0}var n=t("../math"),o=t("./ObservablePoint");i.prototype.constructor=i,i.prototype.updateTransform=function(t){var e=t.worldTransform,r=this.worldTransform,i=this.localTransform;console.log("DIRTY"),this.dirty&&(i.a=this._cr*this.scale._x,i.b=this._sr*this.scale._x,i.c=-this._sr*this.scale._y,i.d=this._cr*this.scale._y,i.tx=this.position._x-(this.pivot._x*i.a+this.pivot._y*i.c),i.ty=this.position._y-(this.pivot._x*i.b+this.pivot._y*i.d)),(this.dirty||parent.dirty)&&(r.a=i.a*e.a+i.b*e.c,r.b=i.a*e.b+i.b*e.d,r.c=i.c*e.a+i.d*e.c,r.d=i.c*e.b+i.d*e.d,r.tx=i.tx*e.a+i.ty*e.c+e.tx,r.ty=i.tx*e.b+i.ty*e.d+e.ty)},e.exports=i},{"../math":57,"./ObservablePoint":41}],43:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils":108,"./WebGLGraphicsData":46,"./shaders/PrimitiveShader":47,"./utils/buildCircle":48,"./utils/buildComplexPoly":49,"./utils/buildLine":50,"./utils/buildPoly":51,"./utils/buildRectangle":52,"./utils/buildRoundedRectangle":53,earcut:24}],46:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],47:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],48:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":108,"./buildLine":50}],49:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":108,"./buildLine":50}],50:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":57,"../../../utils":108}],51:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":108}],52:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":108,"./buildLine":50}],53:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":108,"./buildLine":50}],54:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),BaseRenderTexture:t("./textures/BaseRenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":43,"./graphics/GraphicsData":44,"./graphics/webgl/GraphicsRenderer":45,"./math":57,"./particles/ParticleContainer":63,"./particles/webgl/ParticleRenderer":65,"./renderers/canvas/CanvasRenderer":68,"./renderers/canvas/utils/CanvasBuffer":69,"./renderers/canvas/utils/CanvasGraphics":70,"./renderers/webgl/WebGLRenderer":74,"./renderers/webgl/filters/AbstractFilter":75,"./renderers/webgl/filters/FXAAFilter":76,"./renderers/webgl/filters/SpriteMaskFilter":77,"./renderers/webgl/managers/ShaderManager":81,"./renderers/webgl/managers/WebGLManager":83,"./renderers/webgl/shaders/Shader":86,"./renderers/webgl/utils/ObjectRenderer":89,"./renderers/webgl/utils/RenderTarget":91,"./sprites/Sprite":95,"./sprites/webgl/SpriteRenderer":96,"./text/Text":98,"./textures/BaseRenderTexture":99,"./textures/BaseTexture":100,"./textures/RenderTexture":101,"./textures/Texture":102,"./textures/TextureUvs":103,"./textures/VideoBaseTexture":104,"./ticker":106,"./utils":108,"pixi-gl-core":1}],55:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":56}],56:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],57:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":55,"./Point":56,"./shapes/Circle":58,"./shapes/Ellipse":59,"./shapes/Polygon":60,"./shapes/Rectangle":61,"./shapes/RoundedRectangle":62}],58:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":61}],59:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":61}],60:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":56}],61:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],63:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"./ParticleBuffer":64,"./ParticleShader":66}],66:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{ +uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":87}],67:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,transform:{worldTransform:new o.Matrix},worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":57,"../utils":108,eventemitter3:25}],68:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":57,"../../utils":108,"../SystemRenderer":67,"./utils/CanvasMaskManager":71}],69:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],70:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],71:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":70}],72:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":87}],76:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\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\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\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)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":75}],77:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":57,"./AbstractFilter":75}],78:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":83}],79:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":108}],87:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":86}],88:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],89:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":83}],90:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],91:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=(t("pixi-gl-core").GLTexture,t("pixi-gl-core").GLFramebuffer),s=t("./StencilMaskStack"),a=function(t,e,r,a,h,u){this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=h||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.defaultFrame=new PIXI.Rectangle,this.destinationFrame=null,this.sourceFrame=null,this.stencilBuffer=null,this.stencilMaskStack=new s,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=a||n.SCALE_MODES.DEFAULT,this.root=u,this.frameBuffer=o.createRGBA(t,100,100),this.root?this.frameBuffer.framebuffer=null:this.texture=this.frameBuffer.texture,this.resize(e,r)};a.prototype.constructor=a,e.exports=a,a.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},a.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},a.prototype.activate=function(t,e){var r=this.gl;this.frameBuffer.bind(),this.destinationFrame=t||this.destinationFrame||this.defaultFrame,this.sourceFrame=e||this.sourceFrame||t,this.calculateProjection(this.destinationFrame,this.sourceFrame),this.transform&&this.projectionMatrix.append(this.transform),this.destinationFrame!==this.sourceFrame?(r.enable(r.SCISSOR_TEST),r.scissor(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)):r.disable(r.SCISSOR_TEST),r.viewport(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)},a.prototype.calculateProjection=function(t,e){var r=this.projectionMatrix;e=e||t,r.identity(),this.root?(r.a=1/t.width*2,r.d=-1/t.height*2,r.tx=-1-e.x*r.a,r.ty=1-e.y*r.d):(r.a=1/t.width*2,r.d=1/t.height*2,r.tx=-1-e.x*r.a,r.ty=-1-e.y*r.d)},a.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.defaultFrame.width=t,this.defaultFrame.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},a.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":57,"../../../utils":108,"./StencilMaskStack":92,"pixi-gl-core":1}],92:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],93:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],94:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],95:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.transform.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0); +}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],98:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=t,this.height=e,this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(t){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear(!1,t))},i.prototype.renderWebGL=function(t,e,r,i,n){if(this.valid){if(n=void 0!==n?n:!0,this.textureBuffer.transform=r,this.textureBuffer.activate(),e.worldAlpha=1,n){e.worldTransform.identity(),e.currentBounds=null;var o,s,a=e.children;for(o=0,s=a.length;s>o;++o)a[o].updateTransform()}p.width=t.height,p.height=t.width;var h=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.textureBuffer.activate(t,p),console.log(e),this.renderer.renderDisplayObject(e,this.textureBuffer,i),this.renderer.filterManager=h}},i.prototype.renderCanvas=function(t,e,r,i,n){if(this.valid){n=!!n;var o=c;o.identity(),r&&o.append(r),o.tx+=t.x,o.ty+=t.y;var s=e.worldTransform;e.worldTransform=o,e.worldAlpha=1;var a,h,u=e.children;for(a=0,h=u.length;h>a;++a)u[a].updateTransform();i&&this.textureBuffer.clear();var l=this.textureBuffer.context,p=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(e,l),this.renderer.resolution=p,e.worldTransform===o&&(e.worldTransform=s)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(t){var e=new Image;return e.src=this.getBase64(t),e},i.prototype.getBase64=function(t){return this.getCanvas(t).toDataURL()},i.prototype.getCanvas=function(t){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution,i=this.renderer.gl,n=new Uint8Array(4*e*r);i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null);var o=new h(e,r),s=o.context.getImageData(0,0,e,r);return s.data.set(n),o.context.putImageData(s,0,0),o.canvas}if(t||(t=p,t.width=this.textureBuffer.canvas.width,t.height=this.textureBuffer.canvas.height),t.width===this.textureBuffer.canvas.width&&t.height===this.textureBuffer.canvas.height)return this.textureBuffer.canvas;var a=this.resolution,o=new h(t.width*a,t.height*a),s=this.textureBuffer.context.getImageData(t.x*a,t.y*a,t.width*a,t.height*a);return o.context.putImageData(s,0,0),o.canvas},i.prototype.getPixels=function(t){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var i=this.renderer.gl,n=new Uint8Array(4*e*r);return i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null),n}return this.textureBuffer.canvas.getContext("2d").getImageData(t.x*this.resolution,t.y*this.resolution,e,r).data},i.prototype.getPixel=function(t,e,r){return p.x=e,p.y=r,p.width=1/this.resolution,p.height=1/this.resolution,t&&(p.x+=t.x,p.y+=t.y),this.getPixels(p)}},{"../const":38,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/webgl/managers/FilterManager":79,"../renderers/webgl/utils/RenderTarget":91,"./BaseTexture":100,"./Texture":102}],100:[function(t,e,r){function i(t,e,r){s.call(this),this.uid=n.uid(),this.resolution=r||1,this.width=100,this.height=100,this.realWidth=100,this.realHeight=100,this.scaleMode=e||o.SCALE_MODES.DEFAULT,this.hasLoaded=!1,this.isLoading=!1,this.source=null,this.premultipliedAlpha=!0,this.imageUrl=null,this.isPowerOfTwo=!1,this.mipmap=!1,this._glTextures={},this._active=!1,this._id=0,t&&this.loadSource(t)}var n=t("../utils"),o=t("../const"),s=t("eventemitter3");i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.update=function(){this.realWidth=this.source.naturalWidth||this.source.width,this.realHeight=this.source.naturalHeight||this.source.height,this.width=this.realWidth/this.resolution,this.height=this.realHeight/this.resolution,this.isPowerOfTwo=n.isPowerOfTwo(this.realWidth,this.realHeight),this.emit("update",this)},i.prototype.loadSource=function(t){var e=this.isLoading;if(this.hasLoaded=!1,this.isLoading=!1,e&&this.source&&(this.source.onload=null,this.source.onerror=null),this.source=t,(this.source.complete||this.source.getContext)&&this.source.width&&this.source.height)this._sourceLoaded();else if(!t.getContext){this.isLoading=!0;var r=this;t.onload=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r._sourceLoaded(),r.emit("loaded",r))},t.onerror=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r.emit("error",r))},t.complete&&t.src&&(this.isLoading=!1,t.onload=null,t.onerror=null,t.width&&t.height?(this._sourceLoaded(),e&&this.emit("loaded",this)):e&&this.emit("error",this))}},i.prototype._sourceLoaded=function(){this.hasLoaded=!0,this.update()},i.prototype.destroy=function(){this.imageUrl?(delete n.BaseTextureCache[this.imageUrl],delete n.TextureCache[this.imageUrl],this.imageUrl=null,navigator.isCocoonJS||(this.source.src="")):this.source&&this.source._pixiId&&delete n.BaseTextureCache[this.source._pixiId],this.source=null,this.dispose()},i.prototype.dispose=function(){this.emit("dispose",this)},i.prototype.updateSourceImage=function(t){this.source.src=t,this.loadSource(this.source)},i.fromImage=function(t,e,r){var o=n.BaseTextureCache[t];if(void 0===e&&0!==t.indexOf("data:")&&(e=!0),!o){var s=new Image;e&&(s.crossOrigin=""),o=new i(s,r),o.imageUrl=t,s.src=t,n.BaseTextureCache[t]=o,o.resolution=n.getResolutionOfUrl(t)}return o},i.fromCanvas=function(t,e){t._pixiId||(t._pixiId="canvas_"+n.uid());var r=n.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),n.BaseTextureCache[t._pixiId]=r),r}},{"../const":38,"../utils":108,eventemitter3:25}],101:[function(t,e,r){function i(t,e){if(!renderer)throw new Error("Unable to create RenderTexture, you must pass a renderer into the constructor.");o.call(this,t,e),this.valid=!0,this._updateUvs()}var n=t("./BaseRenderTexture"),o=t("./Texture"),s=t("../math");t("../const"),new s.Matrix;i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.resize=function(t,e,r){this.valid=t>0&&e>0,this._frame.width=this.crop.width=t,this._frame.height=this.crop.height=e,r&&this.baseTexture.resize(t,e),this._updateUvs()},i.prototype.clear=function(){this.valid&&this.baseTexture.clear(this.frame)},i.prototype.render=function(t,e,r,i){this.valid&&this.baseTexture.render(this.frame,t,e,r,i)},i.prototype.getImage=function(){return this.baseTexture.getImage(this.frame)},i.prototype.getBase64=function(){return this.getBase64.getImage(this.frame)},i.prototype.getCanvas=function(){return this.baseTexture.getCanvas(this.frame)},i.prototype.getPixels=function(){return this.baseTexture.getPixels(this.frame)},i.prototype.getPixel=function(t,e){return this.baseTexture.getPixel(this.frame,t,e)},i.create=function(t,e,r,o,s){return new i(new n(t,e,r,o,s))}},{"../const":38,"../math":57,"./BaseRenderTexture":99,"./Texture":102}],102:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":57,"../utils":108,"./BaseTexture":100,"./TextureUvs":103,"./VideoBaseTexture":104,eventemitter3:25}],103:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],104:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],106:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":105}],107:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],108:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":109,async:16,eventemitter3:25}],109:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],110:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":54, +"./extras":117,"./filters":134,"./mesh":159}],111:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":54}],119:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":54,"../blur/BlurXFilter":122,"../blur/BlurYFilter":123}],120:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){ +t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":54}],126:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":54}],127:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":54}],128:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":54}],129:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":54}],130:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":54}],131:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":54}],141:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":54}],142:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":54,"./TiltShiftXFilter":143,"./TiltShiftYFilter":144}],143:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":141}],144:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":141}],145:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":54}],146:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":54,"./deprecation":110,"./extras":117,"./filters":134,"./interaction":149,"./loaders":152,"./mesh":159,"./polyfill":164}],147:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":54}],148:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){ +var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":54,"./InteractionData":147,"./interactiveTarget":150}],149:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":147,"./InteractionManager":148,"./interactiveTarget":150}],150:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],151:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":54}],157:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":156}],158:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":54,"./Mesh":156}],159:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":156,"./Plane":157,"./Rope":158,"./webgl/MeshRenderer":160,"./webgl/MeshShader":161}],160:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":54,"../Mesh":156}],161:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":54}],162:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],163:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],164:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":162,"./Object.assign":163,"./requestAnimationFrame":165}],165:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[146])(146)}); //# sourceMappingURL=pixi.min.js.map diff --git a/bin/pixi.min.js.map b/bin/pixi.min.js.map index 102b3e1..c95a532 100644 --- a/bin/pixi.min.js.map +++ b/bin/pixi.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","gl-matrix","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","dirtyTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Transform","pivot","_rotation","filterArea","_sr","_cr","_tempDisplayObjectParent","CachePoint","doc","posiiton","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const","./Transform",41,"localTransform","Point","parentTransform","pt","lt",42,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",43,"_lineTint","_fillTint",44,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",45,"glPoints","glIndices","Uint16Array","deleteBuffer",46,47,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",48,49,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",50,"vertPos",51,"rectData",52,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",53,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","BaseRenderTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseRenderTexture","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",54,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",55,56,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",57,"dx","dy","r2","./Rectangle",58,"normx","normy",59,"points_","il","xi","yi","xj","yj","intersect","../Point",60,61,62,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",63,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",64,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",65,"TextureShader","../../renderers/webgl/shaders/TextureShader",66,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",67,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",68,69,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",70,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",71,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",72,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",73,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",74,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",75,"./AbstractFilter",76,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",77,"currentBlendMode","blendFunc","./WebGLManager",78,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",79,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",80,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",81,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",82,83,"./Shader",84,85,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",86,"customUniforms","customAttributes","uSampler",87,88,"../managers/WebGLManager",89,"colors","rect2",90,"StencilMaskStack","frameBuffer","defaultFrame","destinationFrame","sourceFrame","stencilBuffer","calculateProjection","SCISSOR_TEST","scissor","viewport","pm","projectionFrame","./StencilMaskStack",91,92,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",93,94,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",95,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",96,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",97,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",98,"textureBuffer","tempRect","currentBounds","cachedWt","realResolution","getImage","image","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",99,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","getResolutionOfUrl",100,"baseRenderTexture","_updateUvs","updateBase","./BaseRenderTexture",101,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",102,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",103,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",104,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",105,"shared","./Ticker",106,"totalIndices",107,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",108,"__plugins","pluginName","ctor",109,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",110,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",111,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",112,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",113,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",114,"getChildByName",115,"getGlobalPosition",116,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",117,"AsciiFilter","pixelSize","../../core",118,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",119,"BlurDirFilter","dirX","dirY","strength","passes",120,"BlurFilter","./BlurXFilter","./BlurYFilter",121,"flip","flop",122,123,"SmartBlurFilter",124,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",125,"ColorStepFilter",126,"ConvolutionFilter","texelSize",127,"CrossHatchFilter",128,"DisplacementFilter","mapSampler",129,"DotScreenFilter",130,"BlurYTintFilter",131,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",132,"GrayFilter","gray",133,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",134,135,"noise",136,137,"red","green","blue",138,139,"center","params",140,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",141,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",142,"./TiltShiftAxisFilter",143,144,145,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",146,"InteractionData","originalEvent","getLocalPosition","globalPos",147,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",148,"interactiveTarget","./InteractionManager",149,150,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",151,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",152,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",153,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",154,155,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",156,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",157,"factor","nextPoint","perpLength","num","perpX","perpY",158,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",159,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",160,161,"isNaN",162,163,"./Math.sign","./Object.assign","./requestAnimationFrame",164,"Date","getTime","startTime","vendors","delay"],"mappings":"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AA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAw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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","gl-matrix","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","worldAlpha","alpha","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Transform","pivot","_rotation","localTransform","filterArea","_sr","_cr","dirtyTransform","_tempDisplayObjectParent","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","displayObjectUpdateTransform","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const","./TransformStatic",41,"ObservablePoint","_x","_y",42,"parentTransform","pt","lt","./ObservablePoint",43,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","Point","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",44,"_lineTint","_fillTint",45,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",46,"glPoints","glIndices","Uint16Array","deleteBuffer",47,48,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",49,50,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",51,"vertPos",52,"rectData",53,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",54,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","BaseRenderTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseRenderTexture","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",55,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",56,57,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",58,"dx","dy","r2","./Rectangle",59,"normx","normy",60,"points_","il","xi","yi","xj","yj","intersect","../Point",61,62,63,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",64,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",65,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",66,"TextureShader","../../renderers/webgl/shaders/TextureShader",67,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",68,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",69,70,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",71,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",72,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",73,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",74,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",75,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",76,"./AbstractFilter",77,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",78,"currentBlendMode","blendFunc","./WebGLManager",79,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",80,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",81,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",82,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",83,84,"./Shader",85,86,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",87,"customUniforms","customAttributes","uSampler",88,89,"../managers/WebGLManager",90,"colors","rect2",91,"StencilMaskStack","frameBuffer","defaultFrame","destinationFrame","sourceFrame","stencilBuffer","calculateProjection","SCISSOR_TEST","scissor","viewport","pm","projectionFrame","./StencilMaskStack",92,93,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",94,95,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",96,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",97,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",98,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",99,"textureBuffer","tempRect","currentBounds","cachedWt","realResolution","getImage","image","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",100,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","getResolutionOfUrl",101,"baseRenderTexture","_updateUvs","updateBase","./BaseRenderTexture",102,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",103,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",104,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",105,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",106,"shared","./Ticker",107,"totalIndices",108,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",109,"__plugins","pluginName","ctor",110,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",111,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",112,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",113,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",114,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",115,"getChildByName",116,"getGlobalPosition",117,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",118,"AsciiFilter","pixelSize","../../core",119,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",120,"BlurDirFilter","dirX","dirY","strength","passes",121,"BlurFilter","./BlurXFilter","./BlurYFilter",122,"flip","flop",123,124,"SmartBlurFilter",125,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",126,"ColorStepFilter",127,"ConvolutionFilter","texelSize",128,"CrossHatchFilter",129,"DisplacementFilter","mapSampler",130,"DotScreenFilter",131,"BlurYTintFilter",132,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",133,"GrayFilter","gray",134,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",135,136,"noise",137,138,"red","green","blue",139,140,"center","params",141,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",142,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",143,"./TiltShiftAxisFilter",144,145,146,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",147,"InteractionData","originalEvent","getLocalPosition","globalPos",148,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",149,"interactiveTarget","./InteractionManager",150,151,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",152,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",153,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",154,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",155,156,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",157,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",158,"factor","nextPoint","perpLength","num","perpX","perpY",159,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",160,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",161,162,"isNaN",163,164,"./Math.sign","./Object.assign","./requestAnimationFrame",165,"Date","getTime","startTime","vendors","delay"],"mappings":"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AA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 64e912a..9199f9d 100644 --- a/src/core/display/Container.js +++ b/src/core/display/Container.js @@ -399,7 +399,7 @@ this.children[i].updateTransform(); } - this.dirtyTransform = false; + this.transform.dirty = false; }; // performance increase to avoid using call.. (10x faster) diff --git a/src/core/display/DisplayObject.js b/src/core/display/DisplayObject.js index 06bd523..3cc5c2f 100644 --- a/src/core/display/DisplayObject.js +++ b/src/core/display/DisplayObject.js @@ -2,7 +2,7 @@ RenderTexture = require('../textures/RenderTexture'), EventEmitter = require('eventemitter3'), CONST = require('../const'), - Transform = require('./Transform'), + Transform = require('./TransformStatic'), _tempMatrix = new math.Matrix(), _tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1, children:[]}; @@ -114,22 +114,6 @@ */ this.filterArea = null; - /**xww - * cached sin rotation - * - * @member {number} - * @private - */ - this._sr = 0; - - /** - * cached cos rotation - * - * @member {number} - * @private - */ - this._cr = 1; - /** * The original, cached bounds of the object * @@ -154,7 +138,7 @@ */ this._mask = null; - this.dirtyTransform = true; + // this.dirtyTransform = true; } // constructor @@ -238,9 +222,9 @@ set: function (value) { this._rotation = value; - this.dirtyTransform = true; - this._sr = Math.sin(value); - this._cr = Math.cos(value); + this.transform.dirty = true; + this.transform._sr = Math.sin(value); + this.transform._cr = Math.cos(value); } }, @@ -344,6 +328,7 @@ */ DisplayObject.prototype.updateTransform = function () { + //if(this.transform.dirty || parent.transform.dirty) this.transform.updateTransform(this.parent.transform); // multiply the alphas.. this.worldAlpha = this.alpha * this.parent.worldAlpha; diff --git a/src/core/display/ObservablePoint.js b/src/core/display/ObservablePoint.js new file mode 100644 index 0000000..fd7a04b --- /dev/null +++ b/src/core/display/ObservablePoint.js @@ -0,0 +1,68 @@ +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents + * the horizontal axis and y represents the vertical axis. + * + * @class + * @memberof PIXI + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +function ObservablePoint(transform, x, y) +{ + this._x = x || 0; + this._y = y || 0; + + this.transform = transform; +} + +ObservablePoint.prototype.constructor = ObservablePoint; +module.exports = ObservablePoint; + + + +Object.defineProperties(ObservablePoint.prototype, { + /** + * The position of the displayObject on the x axis relative to the local coordinates of the parent. + * + * @member {number} + * @memberof PIXI.DisplayObject# + */ + x: { + get: function () + { + return this._x; + }, + set: function (value) + { + this._x = value; + this.transform.dirty = true; + } + }, + + y: { + get: function () + { + return this._y; + }, + set: function (value) + { + this._y = value; + this.transform.dirty = true; + } + } +}); + +/** + * Sets the point to a new x and y position. + * If y is omitted, both x and y will be set to x. + * + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +ObservablePoint.prototype.set = function (x, y) +{ + this._x = x || 0; + this._y = y || ( (y !== 0) ? this._x : 0 ); + + this.transform.dirty = true; +}; diff --git a/src/core/display/Transform.js b/src/core/display/Transform.js index eefc915..d57503d 100644 --- a/src/core/display/Transform.js +++ b/src/core/display/Transform.js @@ -36,34 +36,21 @@ var wt = this.worldTransform; var lt = this.localTransform; + // get the matrix values of the displayobject based on its transform properties.. + lt.a = this._cr * this.scale.x; + lt.b = this._sr * this.scale.x; + lt.c = -this._sr * this.scale.y; + lt.d = this._cr * this.scale.y; + lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c); + lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d); + // concat the parent matrix with the objects transform. + wt.a = lt.a * pt.a + lt.b * pt.c; + wt.b = lt.a * pt.b + lt.b * pt.d; + wt.c = lt.c * pt.a + lt.d * pt.c; + wt.d = lt.c * pt.b + lt.d * pt.d; + wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; + wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; - if(this.dirty) - { - // get the matrix values of the displayobject based on its transform properties.. - lt.a = this._cr * this.scale.x; - lt.b = this._sr * this.scale.x; - lt.c = -this._sr * this.scale.y; - lt.d = this._cr * this.scale.y; - lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c); - lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d); - } - - if(this.dirty || parent.dirty) - { - // concat the parent matrix with the objects transform. - wt.a = lt.a * pt.a + lt.b * pt.c; - wt.b = lt.a * pt.b + lt.b * pt.d; - wt.c = lt.c * pt.a + lt.d * pt.c; - wt.d = lt.c * pt.b + lt.d * pt.d; - wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; - wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; - - // this.dirty = false; - // return true; - } - -// this.dirty = false; - // return false; } module.exports = Transform; diff --git a/src/core/display/TransformSimple.js b/src/core/display/TransformSimple.js deleted file mode 100644 index e9793e2..0000000 --- a/src/core/display/TransformSimple.js +++ /dev/null @@ -1,63 +0,0 @@ -var math = require('../math'); - - -/** - * The Point object represents a location in a two-dimensional coordinate system, where x represents - * the horizontal axis and y represents the vertical axis. - * - * @class - * @memberof PIXI - * @param [x=0] {number} position of the point on the x axis - * @param [y=0] {number} position of the point on the y axis - */ -function Transform() -{ - this.worldTransform = new math.Matrix(); - this.localTransform = new math.Matrix(); - - this.position = new math.Point(0.0); - this.scale = new math.Point(1,1); - this.pivot = new math.Point(0.0); - this.skew = new math.Point(0.0); - - this.rotation = 0; - this._sr = Math.sin(0); - this._cr = Math.cos(0); - - - this.dirty = true; -} - -Transform.prototype.constructor = Transform; - -Transform.prototype.updateTransform = function (parentTransform) -{ - var pt = parentTransform.worldTransform; - var wt = this.worldTransform; - var lt = this.localTransform; - - - if(this.dirty) - { - // get the matrix values of the displayobject based on its transform properties.. - - lt.tx = this.position.x; - lt.ty = this.position.y; - } - - if(this.dirty || parent.dirty) - { - wt.tx = lt.tx; - wt.ty = lt.ty; - - // this.dirty = false; - // return true; - } - -// this.dirty = false; - // return false; -} - -module.exports = Transform; - - diff --git a/src/core/display/TransformStatic.js b/src/core/display/TransformStatic.js new file mode 100644 index 0000000..3e1aaa9 --- /dev/null +++ b/src/core/display/TransformStatic.js @@ -0,0 +1,69 @@ +var math = require('../math'); +var ObservablePoint = require('./ObservablePoint'); + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents + * the horizontal axis and y represents the vertical axis. + * + * @class + * @memberof PIXI + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +function Transform() +{ + this.worldTransform = new math.Matrix(); + this.localTransform = new math.Matrix(); + + this.position = new ObservablePoint(this, 0); + this.scale = new ObservablePoint(this,1, 1); + this.pivot = new ObservablePoint(this, 0, 0); + this.skew = new ObservablePoint(this, 0,0); + + this.rotation = 0; + this._sr = Math.sin(0); + this._cr = Math.cos(0); + + this.dirty = true; + + + this.updated = true; +} + +Transform.prototype.constructor = Transform; + +Transform.prototype.updateTransform = function (parentTransform) +{ + var pt = parentTransform.worldTransform; + var wt = this.worldTransform; + var lt = this.localTransform; + + if(this.dirty) + { + // get the matrix values of the displayobject based on its transform properties.. + lt.a = this._cr * this.scale._x; + lt.b = this._sr * this.scale._x; + lt.c = -this._sr * this.scale._y; + lt.d = this._cr * this.scale._y; + lt.tx = this.position._x - (this.pivot._x * lt.a + this.pivot._y * lt.c); + lt.ty = this.position._y - (this.pivot._x * lt.b + this.pivot._y * lt.d); + } + + this.updated = this.dirty || parentTransform.dirty; + + if(this.updated) + { + // concat the parent matrix with the objects transform. + wt.a = lt.a * pt.a + lt.b * pt.c; + wt.b = lt.a * pt.b + lt.b * pt.d; + wt.c = lt.c * pt.a + lt.d * pt.c; + wt.d = lt.c * pt.b + lt.d * pt.d; + wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; + wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; + } + +} + +module.exports = Transform; + + diff --git a/src/core/display/Transform__.js b/src/core/display/Transform__.js deleted file mode 100644 index dbda183..0000000 --- a/src/core/display/Transform__.js +++ /dev/null @@ -1,73 +0,0 @@ -var math = require('../math'); -var mat2d = require('gl-matrix').mat2d - -/** - * The Point object represents a location in a two-dimensional coordinate system, where x represents - * the horizontal axis and y represents the vertical axis. - * - * @class - * @memberof PIXI - * @param [x=0] {number} position of the point on the x axis - * @param [y=0] {number} position of the point on the y axis - */ -function Transform() -{ - this.worldTransform = mat2d.create(); - this.localTransform = mat2d.create(); - - this.position = new math.Point(0.0); - this.scale = new math.Point(1,1); - this.pivot = new math.Point(0.0); - this.skew = new math.Point(0.0); - - this.rotation = 0; - this._sr = Math.sin(0); - this._cr = Math.cos(0); - - - this.dirty = true; -} - -Transform.prototype.constructor = Transform; - -Transform.prototype.updateTransform = function (parentTransform) -{ - var pt = parentTransform.worldTransform; - var wt = this.worldTransform; - var lt = this.localTransform; - - -// if(this.dirty) - { - // get the matrix values of the displayobject based on its transform properties.. - lt[0] = this._cr * this.scale.x; - lt[1] = this._sr * this.scale.x; - lt[2] = -this._sr * this.scale.y; - lt[3] = this._cr * this.scale.y; - lt[4] = this.position.x - (this.pivot.x * lt[0] + this.pivot.y * lt[2]); - lt[5] = this.position.y - (this.pivot.x * lt[1] + this.pivot.y * lt[3]); - } - - - //if(this.dirty || parent.dirty) - { - - // concat the parent matrix with the objects transform. - wt[0] = lt[0] * pt[0] + lt[1] * pt[2]; - wt[1] = lt[0] * pt[1] + lt[1] * pt[3]; - wt[2] = lt[2] * pt[0] + lt[3] * pt[2]; - wt[3] = lt[2] * pt[1] + lt[3] * pt[3]; - wt[4] = lt[4] * pt[0] + lt[5] * pt[2] + pt[4]; - wt[5] = lt[4] * pt[1] + lt[5] * pt[3]+ pt[5]; - - // this.dirty = false; - // return true; - } - - //this.dirty = false; -// return false; -} - -module.exports = Transform; - - diff --git a/bin/pixi.js b/bin/pixi.js index df52170..915f5c1 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -1,7 +1,7 @@ /** * @license * pixi.js - v3.0.10-dev - * Compiled 2016-01-18T21:33:26.540Z + * Compiled 2016-01-18T22:34:48.843Z * * pixi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -8072,7 +8072,7 @@ core.CanvasRenderer.registerPlugin('accessibility', AccessibilityManager); -},{"../core":53,"./accessibleTarget":36}],36:[function(require,module,exports){ +},{"../core":54,"./accessibleTarget":36}],36:[function(require,module,exports){ /** * Default property values of accessible objects * used by {@link PIXI.accessibility.AccessibilityManager}. @@ -8759,7 +8759,7 @@ this.children[i].updateTransform(); } - this.dirtyTransform = false; + this.transform.dirty = false; }; // performance increase to avoid using call.. (10x faster) @@ -9005,12 +9005,12 @@ this.children = null; }; -},{"../math":56,"../textures/RenderTexture":100,"../utils":107,"./DisplayObject":40}],40:[function(require,module,exports){ +},{"../math":57,"../textures/RenderTexture":101,"../utils":108,"./DisplayObject":40}],40:[function(require,module,exports){ var math = require('../math'), RenderTexture = require('../textures/RenderTexture'), EventEmitter = require('eventemitter3'), CONST = require('../const'), - Transform = require('./Transform'), + Transform = require('./TransformStatic'), _tempMatrix = new math.Matrix(), _tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1, children:[]}; @@ -9122,22 +9122,6 @@ */ this.filterArea = null; - /**xww - * cached sin rotation - * - * @member {number} - * @private - */ - this._sr = 0; - - /** - * cached cos rotation - * - * @member {number} - * @private - */ - this._cr = 1; - /** * The original, cached bounds of the object * @@ -9162,7 +9146,7 @@ */ this._mask = null; - this.dirtyTransform = true; + // this.dirtyTransform = true; } // constructor @@ -9246,9 +9230,9 @@ set: function (value) { this._rotation = value; - this.dirtyTransform = true; - this._sr = Math.sin(value); - this._cr = Math.cos(value); + this.transform.dirty = true; + this.transform._sr = Math.sin(value); + this.transform._cr = Math.cos(value); } }, @@ -9352,6 +9336,7 @@ */ DisplayObject.prototype.updateTransform = function () { + //if(this.transform.dirty || parent.transform.dirty) this.transform.updateTransform(this.parent.transform); // multiply the alphas.. this.worldAlpha = this.alpha * this.parent.worldAlpha; @@ -9554,9 +9539,79 @@ this.filterArea = null; }; -},{"../const":38,"../math":56,"../textures/RenderTexture":100,"./Transform":41,"eventemitter3":25}],41:[function(require,module,exports){ -var math = require('../math'); +},{"../const":38,"../math":57,"../textures/RenderTexture":101,"./TransformStatic":42,"eventemitter3":25}],41:[function(require,module,exports){ +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents + * the horizontal axis and y represents the vertical axis. + * + * @class + * @memberof PIXI + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +function ObservablePoint(transform, x, y) +{ + this._x = x || 0; + this._y = y || 0; + this.transform = transform; +} + +ObservablePoint.prototype.constructor = ObservablePoint; +module.exports = ObservablePoint; + + + +Object.defineProperties(ObservablePoint.prototype, { + /** + * The position of the displayObject on the x axis relative to the local coordinates of the parent. + * + * @member {number} + * @memberof PIXI.DisplayObject# + */ + x: { + get: function () + { + return this._x; + }, + set: function (value) + { + this._x = value; + this.transform.dirty = true; + } + }, + + y: { + get: function () + { + return this._y; + }, + set: function (value) + { + this._y = value; + this.transform.dirty = true; + } + } +}); + +/** + * Sets the point to a new x and y position. + * If y is omitted, both x and y will be set to x. + * + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +ObservablePoint.prototype.set = function (x, y) +{ + this._x = x || 0; + this._y = y || ( (y !== 0) ? this._x : 0 ); + + this.transform.dirty = true; +}; + +},{}],42:[function(require,module,exports){ +var math = require('../math'); +var ObservablePoint = require('./ObservablePoint'); /** * The Point object represents a location in a two-dimensional coordinate system, where x represents @@ -9572,17 +9627,19 @@ this.worldTransform = new math.Matrix(); this.localTransform = new math.Matrix(); - this.position = new math.Point(0.0); - this.scale = new math.Point(1,1); - this.pivot = new math.Point(0.0); - this.skew = new math.Point(0.0); + this.position = new ObservablePoint(this, 0); + this.scale = new ObservablePoint(this,1, 1); + this.pivot = new ObservablePoint(this, 0, 0); + this.skew = new ObservablePoint(this, 0,0); this.rotation = 0; this._sr = Math.sin(0); this._cr = Math.cos(0); - this.dirty = true; + + + this.updated = true; } Transform.prototype.constructor = Transform; @@ -9593,19 +9650,20 @@ var wt = this.worldTransform; var lt = this.localTransform; - if(this.dirty) { // get the matrix values of the displayobject based on its transform properties.. - lt.a = this._cr * this.scale.x; - lt.b = this._sr * this.scale.x; - lt.c = -this._sr * this.scale.y; - lt.d = this._cr * this.scale.y; - lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c); - lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d); + lt.a = this._cr * this.scale._x; + lt.b = this._sr * this.scale._x; + lt.c = -this._sr * this.scale._y; + lt.d = this._cr * this.scale._y; + lt.tx = this.position._x - (this.pivot._x * lt.a + this.pivot._y * lt.c); + lt.ty = this.position._y - (this.pivot._x * lt.b + this.pivot._y * lt.d); } - if(this.dirty || parent.dirty) + this.updated = this.dirty || parentTransform.dirty; + + if(this.updated) { // concat the parent matrix with the objects transform. wt.a = lt.a * pt.a + lt.b * pt.c; @@ -9613,21 +9671,16 @@ wt.c = lt.c * pt.a + lt.d * pt.c; wt.d = lt.c * pt.b + lt.d * pt.d; wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; - wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; - - // this.dirty = false; - // return true; + wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; } - -// this.dirty = false; - // return false; + } module.exports = Transform; -},{"../math":56}],42:[function(require,module,exports){ +},{"../math":57,"./ObservablePoint":41}],43:[function(require,module,exports){ var Container = require('../display/Container'), Texture = require('../textures/Texture'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), @@ -10787,7 +10840,7 @@ this._localBounds = null; }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/canvas/utils/CanvasGraphics":69,"../textures/Texture":101,"./GraphicsData":43}],43:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/canvas/utils/CanvasGraphics":70,"../textures/Texture":102,"./GraphicsData":44}],44:[function(require,module,exports){ /** * A GraphicsData object. * @@ -10880,7 +10933,7 @@ this.shape = null; }; -},{}],44:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ var utils = require('../../utils'), math = require('../../math'), CONST = require('../../const'), @@ -11200,7 +11253,7 @@ }; -},{"../../const":38,"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils":107,"./WebGLGraphicsData":45,"./shaders/PrimitiveShader":46,"./utils/buildCircle":47,"./utils/buildComplexPoly":48,"./utils/buildLine":49,"./utils/buildPoly":50,"./utils/buildRectangle":51,"./utils/buildRoundedRectangle":52,"earcut":24}],45:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils":108,"./WebGLGraphicsData":46,"./shaders/PrimitiveShader":47,"./utils/buildCircle":48,"./utils/buildComplexPoly":49,"./utils/buildLine":50,"./utils/buildPoly":51,"./utils/buildRectangle":52,"./utils/buildRoundedRectangle":53,"earcut":24}],46:[function(require,module,exports){ /** * An object containing WebGL specific properties to be used by the WebGL renderer * @@ -11318,7 +11371,7 @@ this.glIndices = null; }; -},{}],46:[function(require,module,exports){ +},{}],47:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -11370,7 +11423,7 @@ module.exports = PrimitiveShader; -},{"pixi-gl-core":1}],47:[function(require,module,exports){ +},{"pixi-gl-core":1}],48:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11457,7 +11510,7 @@ module.exports = buildCircle; -},{"../../../utils":107,"./buildLine":49}],48:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],49:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11528,7 +11581,7 @@ module.exports = buildComplexPoly; -},{"../../../utils":107,"./buildLine":49}],49:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],50:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'); @@ -11748,7 +11801,7 @@ }; module.exports = buildLine; -},{"../../../math":56,"../../../utils":107}],50:[function(require,module,exports){ +},{"../../../math":57,"../../../utils":108}],51:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -11811,7 +11864,7 @@ module.exports = buildPoly; -},{"../../../utils":107}],51:[function(require,module,exports){ +},{"../../../utils":108}],52:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -11882,7 +11935,7 @@ }; module.exports = buildRectangle; -},{"../../../utils":107,"./buildLine":49}],52:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],53:[function(require,module,exports){ var buildLine = require('./buildLine'), utils = require('../../../utils'); @@ -12010,7 +12063,7 @@ module.exports = buildRoundedRectangle; -},{"../../../utils":107,"./buildLine":49}],53:[function(require,module,exports){ +},{"../../../utils":108,"./buildLine":50}],54:[function(require,module,exports){ /** * @file Main export of the PIXI core library * @author Mat Groves @@ -12106,7 +12159,7 @@ } }); -},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":42,"./graphics/GraphicsData":43,"./graphics/webgl/GraphicsRenderer":44,"./math":56,"./particles/ParticleContainer":62,"./particles/webgl/ParticleRenderer":64,"./renderers/canvas/CanvasRenderer":67,"./renderers/canvas/utils/CanvasBuffer":68,"./renderers/canvas/utils/CanvasGraphics":69,"./renderers/webgl/WebGLRenderer":73,"./renderers/webgl/filters/AbstractFilter":74,"./renderers/webgl/filters/FXAAFilter":75,"./renderers/webgl/filters/SpriteMaskFilter":76,"./renderers/webgl/managers/ShaderManager":80,"./renderers/webgl/managers/WebGLManager":82,"./renderers/webgl/shaders/Shader":85,"./renderers/webgl/utils/ObjectRenderer":88,"./renderers/webgl/utils/RenderTarget":90,"./sprites/Sprite":94,"./sprites/webgl/SpriteRenderer":95,"./text/Text":97,"./textures/BaseRenderTexture":98,"./textures/BaseTexture":99,"./textures/RenderTexture":100,"./textures/Texture":101,"./textures/TextureUvs":102,"./textures/VideoBaseTexture":103,"./ticker":105,"./utils":107,"pixi-gl-core":1}],54:[function(require,module,exports){ +},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":43,"./graphics/GraphicsData":44,"./graphics/webgl/GraphicsRenderer":45,"./math":57,"./particles/ParticleContainer":63,"./particles/webgl/ParticleRenderer":65,"./renderers/canvas/CanvasRenderer":68,"./renderers/canvas/utils/CanvasBuffer":69,"./renderers/canvas/utils/CanvasGraphics":70,"./renderers/webgl/WebGLRenderer":74,"./renderers/webgl/filters/AbstractFilter":75,"./renderers/webgl/filters/FXAAFilter":76,"./renderers/webgl/filters/SpriteMaskFilter":77,"./renderers/webgl/managers/ShaderManager":81,"./renderers/webgl/managers/WebGLManager":83,"./renderers/webgl/shaders/Shader":86,"./renderers/webgl/utils/ObjectRenderer":89,"./renderers/webgl/utils/RenderTarget":91,"./sprites/Sprite":95,"./sprites/webgl/SpriteRenderer":96,"./text/Text":98,"./textures/BaseRenderTexture":99,"./textures/BaseTexture":100,"./textures/RenderTexture":101,"./textures/Texture":102,"./textures/TextureUvs":103,"./textures/VideoBaseTexture":104,"./ticker":106,"./utils":108,"pixi-gl-core":1}],55:[function(require,module,exports){ // @todo - ignore the too many parameters warning for now // should either fix it or change the jshint config // jshint -W072 @@ -12546,7 +12599,7 @@ */ Matrix.TEMP_MATRIX = new Matrix(); -},{"./Point":55}],55:[function(require,module,exports){ +},{"./Point":56}],56:[function(require,module,exports){ /** * The Point object represents a location in a two-dimensional coordinate system, where x represents * the horizontal axis and y represents the vertical axis. @@ -12616,7 +12669,7 @@ this.y = y || ( (y !== 0) ? this.x : 0 ) ; }; -},{}],56:[function(require,module,exports){ +},{}],57:[function(require,module,exports){ /** * Math classes and utilities mixed into PIXI namespace. * @@ -12638,7 +12691,7 @@ RoundedRectangle: require('./shapes/RoundedRectangle') }; -},{"./Matrix":54,"./Point":55,"./shapes/Circle":57,"./shapes/Ellipse":58,"./shapes/Polygon":59,"./shapes/Rectangle":60,"./shapes/RoundedRectangle":61}],57:[function(require,module,exports){ +},{"./Matrix":55,"./Point":56,"./shapes/Circle":58,"./shapes/Ellipse":59,"./shapes/Polygon":60,"./shapes/Rectangle":61,"./shapes/RoundedRectangle":62}],58:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12726,7 +12779,7 @@ return new Rectangle(this.x - this.radius, this.y - this.radius, this.radius * 2, this.radius * 2); }; -},{"../../const":38,"./Rectangle":60}],58:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],59:[function(require,module,exports){ var Rectangle = require('./Rectangle'), CONST = require('../../const'); @@ -12821,7 +12874,7 @@ return new Rectangle(this.x - this.width, this.y - this.height, this.width, this.height); }; -},{"../../const":38,"./Rectangle":60}],59:[function(require,module,exports){ +},{"../../const":38,"./Rectangle":61}],60:[function(require,module,exports){ var Point = require('../Point'), CONST = require('../../const'); @@ -12924,7 +12977,7 @@ return inside; }; -},{"../../const":38,"../Point":55}],60:[function(require,module,exports){ +},{"../../const":38,"../Point":56}],61:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13018,7 +13071,7 @@ return false; }; -},{"../../const":38}],61:[function(require,module,exports){ +},{"../../const":38}],62:[function(require,module,exports){ var CONST = require('../../const'); /** @@ -13110,7 +13163,7 @@ return false; }; -},{"../../const":38}],62:[function(require,module,exports){ +},{"../../const":38}],63:[function(require,module,exports){ var Container = require('../display/Container'), CONST = require('../const'); @@ -13429,7 +13482,7 @@ this._buffers = null; }; -},{"../const":38,"../display/Container":39}],63:[function(require,module,exports){ +},{"../const":38,"../display/Container":39}],64:[function(require,module,exports){ /** * @author Mat Groves @@ -13649,7 +13702,7 @@ this.gl.deleteBuffer(this.staticBuffer); }; -},{}],64:[function(require,module,exports){ +},{}],65:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), ParticleShader = require('./ParticleShader'), @@ -14125,7 +14178,7 @@ this.tempMatrix = null; }; -},{"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"./ParticleBuffer":63,"./ParticleShader":65}],65:[function(require,module,exports){ +},{"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"./ParticleBuffer":64,"./ParticleShader":66}],66:[function(require,module,exports){ var TextureShader = require('../../renderers/webgl/shaders/TextureShader'); /** @@ -14203,7 +14256,7 @@ module.exports = ParticleShader; -},{"../../renderers/webgl/shaders/TextureShader":86}],66:[function(require,module,exports){ +},{"../../renderers/webgl/shaders/TextureShader":87}],67:[function(require,module,exports){ var utils = require('../utils'), math = require('../math'), CONST = require('../const'), @@ -14464,7 +14517,7 @@ this._backgroundColorString = null; }; -},{"../const":38,"../math":56,"../utils":107,"eventemitter3":25}],67:[function(require,module,exports){ +},{"../const":38,"../math":57,"../utils":108,"eventemitter3":25}],68:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), CanvasMaskManager = require('./utils/CanvasMaskManager'), utils = require('../../utils'), @@ -14732,7 +14785,7 @@ } }; -},{"../../const":38,"../../math":56,"../../utils":107,"../SystemRenderer":66,"./utils/CanvasMaskManager":70}],68:[function(require,module,exports){ +},{"../../const":38,"../../math":57,"../../utils":108,"../SystemRenderer":67,"./utils/CanvasMaskManager":71}],69:[function(require,module,exports){ /** * Creates a Canvas element of the given size. * @@ -14832,7 +14885,7 @@ this.canvas = null; }; -},{}],69:[function(require,module,exports){ +},{}],70:[function(require,module,exports){ var CONST = require('../../../const'); /** @@ -15186,7 +15239,7 @@ }; -},{"../../../const":38}],70:[function(require,module,exports){ +},{"../../../const":38}],71:[function(require,module,exports){ var CanvasGraphics = require('./CanvasGraphics'); /** @@ -15248,7 +15301,7 @@ CanvasMaskManager.prototype.destroy = function () {}; -},{"./CanvasGraphics":69}],71:[function(require,module,exports){ +},{"./CanvasGraphics":70}],72:[function(require,module,exports){ var utils = require('../../../utils'); /** @@ -15500,7 +15553,7 @@ */ CanvasTinter.tintMethod = CanvasTinter.canUseMultiply ? CanvasTinter.tintWithMultiply : CanvasTinter.tintWithPerPixel; -},{"../../../utils":107}],72:[function(require,module,exports){ +},{"../../../utils":108}],73:[function(require,module,exports){ var GLTexture = require('pixi-gl-core').GLTexture, utils = require('../../utils'); @@ -15640,7 +15693,7 @@ module.exports = TextureManager; -},{"../../utils":107,"pixi-gl-core":1}],73:[function(require,module,exports){ +},{"../../utils":108,"pixi-gl-core":1}],74:[function(require,module,exports){ var SystemRenderer = require('../SystemRenderer'), ShaderManager = require('./managers/ShaderManager'), MaskManager = require('./managers/MaskManager'), @@ -16037,7 +16090,7 @@ }; -},{"../../const":38,"../../utils":107,"../SystemRenderer":66,"./TextureManager":72,"./filters/FXAAFilter":75,"./managers/BlendModeManager":77,"./managers/FilterManager":78,"./managers/MaskManager":79,"./managers/ShaderManager":80,"./managers/StencilManager":81,"./utils/ObjectRenderer":88,"./utils/RenderTarget":90,"./utils/mapWebGLBlendModesToPixi":92,"./utils/mapWebGLDrawModesToPixi":93,"pixi-gl-core":1}],74:[function(require,module,exports){ +},{"../../const":38,"../../utils":108,"../SystemRenderer":67,"./TextureManager":73,"./filters/FXAAFilter":76,"./managers/BlendModeManager":78,"./managers/FilterManager":79,"./managers/MaskManager":80,"./managers/ShaderManager":81,"./managers/StencilManager":82,"./utils/ObjectRenderer":89,"./utils/RenderTarget":91,"./utils/mapWebGLBlendModesToPixi":93,"./utils/mapWebGLDrawModesToPixi":94,"pixi-gl-core":1}],75:[function(require,module,exports){ var DefaultShader = require('../shaders/TextureShader'); /** @@ -16149,7 +16202,7 @@ } }; -},{"../shaders/TextureShader":86}],75:[function(require,module,exports){ +},{"../shaders/TextureShader":87}],76:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'); // @see https://github.com/substack/brfs/issues/25 @@ -16204,7 +16257,7 @@ filterManager.applyFilter(shader, input, output); }; -},{"./AbstractFilter":74}],76:[function(require,module,exports){ +},{"./AbstractFilter":75}],77:[function(require,module,exports){ var AbstractFilter = require('./AbstractFilter'), math = require('../../../math'); @@ -16301,7 +16354,7 @@ } }); -},{"../../../math":56,"./AbstractFilter":74}],77:[function(require,module,exports){ +},{"../../../math":57,"./AbstractFilter":75}],78:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'); /** @@ -16345,7 +16398,7 @@ return true; }; -},{"./WebGLManager":82}],78:[function(require,module,exports){ +},{"./WebGLManager":83}],79:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), RenderTarget = require('../utils/RenderTarget'), CONST = require('../../../const'), @@ -16797,7 +16850,7 @@ this.texturePool = null; }; -},{"../../../const":38,"../../../math":56,"../utils/Quad":89,"../utils/RenderTarget":90,"./WebGLManager":82}],79:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../utils/Quad":90,"../utils/RenderTarget":91,"./WebGLManager":83}],80:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), AlphaMaskFilter = require('../filters/SpriteMaskFilter'); @@ -16912,7 +16965,7 @@ }; -},{"../filters/SpriteMaskFilter":76,"./WebGLManager":82}],80:[function(require,module,exports){ +},{"../filters/SpriteMaskFilter":77,"./WebGLManager":83}],81:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), TextureShader = require('../shaders/TextureShader'), ComplexPrimitiveShader = require('../shaders/ComplexPrimitiveShader'), @@ -17082,7 +17135,7 @@ this.tempAttribState = null; }; -},{"../../../utils":107,"../shaders/ComplexPrimitiveShader":83,"../shaders/PrimitiveShader":84,"../shaders/TextureShader":86,"./WebGLManager":82}],81:[function(require,module,exports){ +},{"../../../utils":108,"../shaders/ComplexPrimitiveShader":84,"../shaders/PrimitiveShader":85,"../shaders/TextureShader":87,"./WebGLManager":83}],82:[function(require,module,exports){ var WebGLManager = require('./WebGLManager'), utils = require('../../../utils'); @@ -17449,7 +17502,7 @@ }; -},{"../../../utils":107,"./WebGLManager":82}],82:[function(require,module,exports){ +},{"../../../utils":108,"./WebGLManager":83}],83:[function(require,module,exports){ /** * @class * @memberof PIXI @@ -17490,7 +17543,7 @@ this.renderer = null; }; -},{}],83:[function(require,module,exports){ +},{}],84:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17552,7 +17605,7 @@ ComplexPrimitiveShader.prototype.constructor = ComplexPrimitiveShader; module.exports = ComplexPrimitiveShader; -},{"./Shader":85}],84:[function(require,module,exports){ +},{"./Shader":86}],85:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -17615,7 +17668,7 @@ PrimitiveShader.prototype.constructor = PrimitiveShader; module.exports = PrimitiveShader; -},{"./Shader":85}],85:[function(require,module,exports){ +},{"./Shader":86}],86:[function(require,module,exports){ /*global console */ var utils = require('../../../utils'); @@ -18143,7 +18196,7 @@ return shader; }; -},{"../../../utils":107}],86:[function(require,module,exports){ +},{"../../../utils":108}],87:[function(require,module,exports){ var Shader = require('./Shader'); /** @@ -18254,7 +18307,7 @@ '}' ].join('\n'); -},{"./Shader":85}],87:[function(require,module,exports){ +},{"./Shader":86}],88:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; /** @@ -18335,7 +18388,7 @@ '}' ].join('\n'); -},{"pixi-gl-core":1}],88:[function(require,module,exports){ +},{"pixi-gl-core":1}],89:[function(require,module,exports){ var WebGLManager = require('../managers/WebGLManager'); /** @@ -18393,7 +18446,7 @@ // render the object }; -},{"../managers/WebGLManager":82}],89:[function(require,module,exports){ +},{"../managers/WebGLManager":83}],90:[function(require,module,exports){ /** * Helper class to create a quad * @@ -18548,7 +18601,7 @@ -},{}],90:[function(require,module,exports){ +},{}],91:[function(require,module,exports){ var math = require('../../../math'), utils = require('../../../utils'), CONST = require('../../../const'), @@ -18853,7 +18906,7 @@ this.texture = null; }; -},{"../../../const":38,"../../../math":56,"../../../utils":107,"./StencilMaskStack":91,"pixi-gl-core":1}],91:[function(require,module,exports){ +},{"../../../const":38,"../../../math":57,"../../../utils":108,"./StencilMaskStack":92,"pixi-gl-core":1}],92:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -18886,7 +18939,7 @@ StencilMaskStack.prototype.constructor = StencilMaskStack; module.exports = StencilMaskStack; -},{}],92:[function(require,module,exports){ +},{}],93:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18923,7 +18976,7 @@ module.exports = mapWebGLBlendModesToPixi; -},{"../../../const":38}],93:[function(require,module,exports){ +},{"../../../const":38}],94:[function(require,module,exports){ CONST = require('../../../const'); /** @@ -18947,7 +19000,7 @@ module.exports = mapWebGLDrawModesToPixi; -},{"../../../const":38}],94:[function(require,module,exports){ +},{"../../../const":38}],95:[function(require,module,exports){ var math = require('../math'), Texture = require('../textures/Texture'), Container = require('../display/Container'), @@ -19043,7 +19096,6 @@ // call texture setter this.texture = texture || Texture.EMPTY; this.textureDirty = true - this.vertexDirty = true; this.vertexData = new Float32Array(8); } @@ -19153,7 +19205,6 @@ Sprite.prototype.caclulateVertices = function () { - var texture = this._texture, wt = this.transform.worldTransform, a = wt.a, b = wt.b, c = wt.c, d = wt.d, tx = wt.tx, ty = wt.ty, @@ -19208,22 +19259,11 @@ */ Sprite.prototype._renderWebGL = function (renderer) { - if(this.textureDirty) + if(this.transform.updated || this.textureDirty) { this.textureDirty = false; - - this._onTextureUpdate(); - - this.vertexDirty = true; - } - - if(this.vertexDirty) - { - this.vertexDirty = false; - // set the vertex data this.caclulateVertices(); - } renderer.setObjectRenderer(renderer.plugins.sprite); @@ -19566,7 +19606,7 @@ return new Sprite(Texture.fromImage(imageId, crossorigin, scaleMode)); }; -},{"../const":38,"../display/Container":39,"../math":56,"../renderers/canvas/utils/CanvasTinter":71,"../textures/Texture":101,"../utils":107}],95:[function(require,module,exports){ +},{"../const":38,"../display/Container":39,"../math":57,"../renderers/canvas/utils/CanvasTinter":72,"../textures/Texture":102,"../utils":108}],96:[function(require,module,exports){ var ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), TextureShader = require('../../renderers/webgl/shaders/_TextureShader'), @@ -19927,7 +19967,7 @@ this.shader = null; }; -},{"../../const":38,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/shaders/_TextureShader":87,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils/createIndicesForQuads":106,"./generateMultiTextureShader":96,"pixi-gl-core":1}],96:[function(require,module,exports){ +},{"../../const":38,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/shaders/_TextureShader":88,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils/createIndicesForQuads":107,"./generateMultiTextureShader":97,"pixi-gl-core":1}],97:[function(require,module,exports){ var Shader = require('pixi-gl-core').GLShader; @@ -19990,7 +20030,7 @@ module.exports = generateMultiTextureShader; -},{"pixi-gl-core":1}],97:[function(require,module,exports){ +},{"pixi-gl-core":1}],98:[function(require,module,exports){ var Sprite = require('../sprites/Sprite'), Texture = require('../textures/Texture'), math = require('../math'), @@ -20611,7 +20651,7 @@ this._texture.destroy(destroyBaseTexture === undefined ? true : destroyBaseTexture); }; -},{"../const":38,"../math":56,"../sprites/Sprite":94,"../textures/Texture":101,"../utils":107}],98:[function(require,module,exports){ +},{"../const":38,"../math":57,"../sprites/Sprite":95,"../textures/Texture":102,"../utils":108}],99:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), Texture = require('./Texture'), RenderTarget = require('../renderers/webgl/utils/RenderTarget'), @@ -21095,7 +21135,7 @@ return this.getPixels(tempRect); }; -},{"../const":38,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/webgl/managers/FilterManager":78,"../renderers/webgl/utils/RenderTarget":90,"./BaseTexture":99,"./Texture":101}],99:[function(require,module,exports){ +},{"../const":38,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/webgl/managers/FilterManager":79,"../renderers/webgl/utils/RenderTarget":91,"./BaseTexture":100,"./Texture":102}],100:[function(require,module,exports){ var utils = require('../utils'), CONST = require('../const'), EventEmitter = require('eventemitter3'); @@ -21532,7 +21572,7 @@ return baseTexture; }; -},{"../const":38,"../utils":107,"eventemitter3":25}],100:[function(require,module,exports){ +},{"../const":38,"../utils":108,"eventemitter3":25}],101:[function(require,module,exports){ var BaseRenderTexture = require('./BaseRenderTexture'), Texture = require('./Texture'), math = require('../math'), @@ -21727,7 +21767,7 @@ } -},{"../const":38,"../math":56,"./BaseRenderTexture":98,"./Texture":101}],101:[function(require,module,exports){ +},{"../const":38,"../math":57,"./BaseRenderTexture":99,"./Texture":102}],102:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), VideoBaseTexture = require('./VideoBaseTexture'), TextureUvs = require('./TextureUvs'), @@ -22153,7 +22193,7 @@ */ Texture.EMPTY = new Texture(new BaseTexture()); -},{"../math":56,"../utils":107,"./BaseTexture":99,"./TextureUvs":102,"./VideoBaseTexture":103,"eventemitter3":25}],102:[function(require,module,exports){ +},{"../math":57,"../utils":108,"./BaseTexture":100,"./TextureUvs":103,"./VideoBaseTexture":104,"eventemitter3":25}],103:[function(require,module,exports){ /** * A standard object to store the Uvs of a texture @@ -22234,7 +22274,7 @@ this.uvs_uint32[3] = (((this.y3 * 65535) & 0xFFFF) << 16) | ((this.x3 * 65535) & 0xFFFF); }; -},{}],103:[function(require,module,exports){ +},{}],104:[function(require,module,exports){ var BaseTexture = require('./BaseTexture'), utils = require('../utils'); @@ -22471,7 +22511,7 @@ return source; } -},{"../utils":107,"./BaseTexture":99}],104:[function(require,module,exports){ +},{"../utils":108,"./BaseTexture":100}],105:[function(require,module,exports){ var CONST = require('../const'), EventEmitter = require('eventemitter3'), // Internal event used by composed emitter @@ -22826,7 +22866,7 @@ module.exports = Ticker; -},{"../const":38,"eventemitter3":25}],105:[function(require,module,exports){ +},{"../const":38,"eventemitter3":25}],106:[function(require,module,exports){ var Ticker = require('./Ticker'); /** @@ -22882,7 +22922,7 @@ Ticker: Ticker }; -},{"./Ticker":104}],106:[function(require,module,exports){ +},{"./Ticker":105}],107:[function(require,module,exports){ /** * Generic Mask Stack data structure * @class @@ -22915,7 +22955,7 @@ }; module.exports = createIndicesForQuads; -},{}],107:[function(require,module,exports){ +},{}],108:[function(require,module,exports){ var CONST = require('../const'); /** @@ -23192,7 +23232,7 @@ BaseTextureCache: {} }; -},{"../const":38,"./pluginTarget":108,"async":16,"eventemitter3":25}],108:[function(require,module,exports){ +},{"../const":38,"./pluginTarget":109,"async":16,"eventemitter3":25}],109:[function(require,module,exports){ /** * Mixins functionality to make an object have "plugins". * @@ -23262,7 +23302,7 @@ } }; -},{}],109:[function(require,module,exports){ +},{}],110:[function(require,module,exports){ /*global console */ var core = require('./core'), mesh = require('./mesh'), @@ -23613,7 +23653,7 @@ return core.utils.uid(); }; -},{"./core":53,"./extras":116,"./filters":133,"./mesh":158}],110:[function(require,module,exports){ +},{"./core":54,"./extras":117,"./filters":134,"./mesh":159}],111:[function(require,module,exports){ var core = require('../core'); /** @@ -24001,7 +24041,7 @@ BitmapText.fonts = {}; -},{"../core":53}],111:[function(require,module,exports){ +},{"../core":54}],112:[function(require,module,exports){ var core = require('../core'); /** @@ -24321,7 +24361,7 @@ return new MovieClip(textures); }; -},{"../core":53}],112:[function(require,module,exports){ +},{"../core":54}],113:[function(require,module,exports){ var core = require('../core'), // a sprite use dfor rendering textures.. tempPoint = new core.Point(), @@ -24773,7 +24813,7 @@ return new TilingSprite(core.Texture.fromImage(imageId, crossorigin, scaleMode),width,height); }; -},{"../core":53,"../core/renderers/canvas/utils/CanvasTinter":71}],113:[function(require,module,exports){ +},{"../core":54,"../core/renderers/canvas/utils/CanvasTinter":72}],114:[function(require,module,exports){ var core = require('../core'), DisplayObject = core.DisplayObject, _tempMatrix = new core.Matrix(); @@ -25045,7 +25085,7 @@ this._originalDestroy(); }; -},{"../core":53}],114:[function(require,module,exports){ +},{"../core":54}],115:[function(require,module,exports){ var core = require('../core'); /** @@ -25075,7 +25115,7 @@ return null; }; -},{"../core":53}],115:[function(require,module,exports){ +},{"../core":54}],116:[function(require,module,exports){ var core = require('../core'); /** @@ -25105,7 +25145,7 @@ return point; }; -},{"../core":53}],116:[function(require,module,exports){ +},{"../core":54}],117:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -25126,7 +25166,7 @@ BitmapText: require('./BitmapText') }; -},{"./BitmapText":110,"./MovieClip":111,"./TilingSprite":112,"./cacheAsBitmap":113,"./getChildByName":114,"./getGlobalPosition":115}],117:[function(require,module,exports){ +},{"./BitmapText":111,"./MovieClip":112,"./TilingSprite":113,"./cacheAsBitmap":114,"./getChildByName":115,"./getGlobalPosition":116}],118:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25183,7 +25223,7 @@ } }); -},{"../../core":53}],118:[function(require,module,exports){ +},{"../../core":54}],119:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYFilter = require('../blur/BlurYFilter'); @@ -25284,7 +25324,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"../blur/BlurYFilter":122}],119:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"../blur/BlurYFilter":123}],120:[function(require,module,exports){ var core = require('../../core'); @@ -25426,7 +25466,7 @@ } }); -},{"../../core":53}],120:[function(require,module,exports){ +},{"../../core":54}],121:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('./BlurXFilter'), BlurYFilter = require('./BlurYFilter'); @@ -25536,7 +25576,7 @@ } }); -},{"../../core":53,"./BlurXFilter":121,"./BlurYFilter":122}],121:[function(require,module,exports){ +},{"../../core":54,"./BlurXFilter":122,"./BlurYFilter":123}],122:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25629,7 +25669,7 @@ } }); -},{"../../core":53}],122:[function(require,module,exports){ +},{"../../core":54}],123:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25715,7 +25755,7 @@ } }); -},{"../../core":53}],123:[function(require,module,exports){ +},{"../../core":54}],124:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -25745,7 +25785,7 @@ SmartBlurFilter.prototype.constructor = SmartBlurFilter; module.exports = SmartBlurFilter; -},{"../../core":53}],124:[function(require,module,exports){ +},{"../../core":54}],125:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26281,7 +26321,7 @@ } }); -},{"../../core":53}],125:[function(require,module,exports){ +},{"../../core":54}],126:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26330,7 +26370,7 @@ } }); -},{"../../core":53}],126:[function(require,module,exports){ +},{"../../core":54}],127:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26421,7 +26461,7 @@ } }); -},{"../../core":53}],127:[function(require,module,exports){ +},{"../../core":54}],128:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26447,7 +26487,7 @@ CrossHatchFilter.prototype.constructor = CrossHatchFilter; module.exports = CrossHatchFilter; -},{"../../core":53}],128:[function(require,module,exports){ +},{"../../core":54}],129:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26531,7 +26571,7 @@ } }); -},{"../../core":53}],129:[function(require,module,exports){ +},{"../../core":54}],130:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26603,7 +26643,7 @@ } }); -},{"../../core":53}],130:[function(require,module,exports){ +},{"../../core":54}],131:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26694,7 +26734,7 @@ } }); -},{"../../core":53}],131:[function(require,module,exports){ +},{"../../core":54}],132:[function(require,module,exports){ var core = require('../../core'), BlurXFilter = require('../blur/BlurXFilter'), BlurYTintFilter = require('./BlurYTintFilter'); @@ -26887,7 +26927,7 @@ } }); -},{"../../core":53,"../blur/BlurXFilter":121,"./BlurYTintFilter":130}],132:[function(require,module,exports){ +},{"../../core":54,"../blur/BlurXFilter":122,"./BlurYTintFilter":131}],133:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -26936,7 +26976,7 @@ } }); -},{"../../core":53}],133:[function(require,module,exports){ +},{"../../core":54}],134:[function(require,module,exports){ /** * @file Main export of the PIXI filters library * @author Mat Groves @@ -26975,7 +27015,7 @@ TwistFilter: require('./twist/TwistFilter') }; -},{"./ascii/AsciiFilter":117,"./bloom/BloomFilter":118,"./blur/BlurDirFilter":119,"./blur/BlurFilter":120,"./blur/BlurXFilter":121,"./blur/BlurYFilter":122,"./blur/SmartBlurFilter":123,"./color/ColorMatrixFilter":124,"./color/ColorStepFilter":125,"./convolution/ConvolutionFilter":126,"./crosshatch/CrossHatchFilter":127,"./displacement/DisplacementFilter":128,"./dot/DotScreenFilter":129,"./dropshadow/DropShadowFilter":131,"./gray/GrayFilter":132,"./invert/InvertFilter":134,"./noise/NoiseFilter":135,"./pixelate/PixelateFilter":136,"./rgb/RGBSplitFilter":137,"./sepia/SepiaFilter":138,"./shockwave/ShockwaveFilter":139,"./tiltshift/TiltShiftFilter":141,"./tiltshift/TiltShiftXFilter":142,"./tiltshift/TiltShiftYFilter":143,"./twist/TwistFilter":144}],134:[function(require,module,exports){ +},{"./ascii/AsciiFilter":118,"./bloom/BloomFilter":119,"./blur/BlurDirFilter":120,"./blur/BlurFilter":121,"./blur/BlurXFilter":122,"./blur/BlurYFilter":123,"./blur/SmartBlurFilter":124,"./color/ColorMatrixFilter":125,"./color/ColorStepFilter":126,"./convolution/ConvolutionFilter":127,"./crosshatch/CrossHatchFilter":128,"./displacement/DisplacementFilter":129,"./dot/DotScreenFilter":130,"./dropshadow/DropShadowFilter":132,"./gray/GrayFilter":133,"./invert/InvertFilter":135,"./noise/NoiseFilter":136,"./pixelate/PixelateFilter":137,"./rgb/RGBSplitFilter":138,"./sepia/SepiaFilter":139,"./shockwave/ShockwaveFilter":140,"./tiltshift/TiltShiftFilter":142,"./tiltshift/TiltShiftXFilter":143,"./tiltshift/TiltShiftYFilter":144,"./twist/TwistFilter":145}],135:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27025,7 +27065,7 @@ } }); -},{"../../core":53}],135:[function(require,module,exports){ +},{"../../core":54}],136:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27080,7 +27120,7 @@ } }); -},{"../../core":53}],136:[function(require,module,exports){ +},{"../../core":54}],137:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27131,7 +27171,7 @@ } }); -},{"../../core":53}],137:[function(require,module,exports){ +},{"../../core":54}],138:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27217,7 +27257,7 @@ } }); -},{"../../core":53}],138:[function(require,module,exports){ +},{"../../core":54}],139:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27267,7 +27307,7 @@ } }); -},{"../../core":53}],139:[function(require,module,exports){ +},{"../../core":54}],140:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27355,7 +27395,7 @@ } }); -},{"../../core":53}],140:[function(require,module,exports){ +},{"../../core":54}],141:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27480,7 +27520,7 @@ } }); -},{"../../core":53}],141:[function(require,module,exports){ +},{"../../core":54}],142:[function(require,module,exports){ var core = require('../../core'), TiltShiftXFilter = require('./TiltShiftXFilter'), TiltShiftYFilter = require('./TiltShiftYFilter'); @@ -27590,7 +27630,7 @@ } }); -},{"../../core":53,"./TiltShiftXFilter":142,"./TiltShiftYFilter":143}],142:[function(require,module,exports){ +},{"../../core":54,"./TiltShiftXFilter":143,"./TiltShiftYFilter":144}],143:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27628,7 +27668,7 @@ this.uniforms.delta.value.y = dy / d; }; -},{"./TiltShiftAxisFilter":140}],143:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],144:[function(require,module,exports){ var TiltShiftAxisFilter = require('./TiltShiftAxisFilter'); /** @@ -27666,7 +27706,7 @@ this.uniforms.delta.value.y = dx / d; }; -},{"./TiltShiftAxisFilter":140}],144:[function(require,module,exports){ +},{"./TiltShiftAxisFilter":141}],145:[function(require,module,exports){ var core = require('../../core'); // @see https://github.com/substack/brfs/issues/25 @@ -27751,7 +27791,7 @@ } }); -},{"../../core":53}],145:[function(require,module,exports){ +},{"../../core":54}],146:[function(require,module,exports){ (function (global){ // run the polyfills require('./polyfill'); @@ -27784,7 +27824,7 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./accessibility":37,"./core":53,"./deprecation":109,"./extras":116,"./filters":133,"./interaction":148,"./loaders":151,"./mesh":158,"./polyfill":163}],146:[function(require,module,exports){ +},{"./accessibility":37,"./core":54,"./deprecation":110,"./extras":117,"./filters":134,"./interaction":149,"./loaders":152,"./mesh":159,"./polyfill":164}],147:[function(require,module,exports){ var core = require('../core'); /** @@ -27833,7 +27873,7 @@ return displayObject.worldTransform.applyInverse(globalPos || this.global, point); }; -},{"../core":53}],147:[function(require,module,exports){ +},{"../core":54}],148:[function(require,module,exports){ var core = require('../core'), InteractionData = require('./InteractionData'); @@ -28709,7 +28749,7 @@ core.WebGLRenderer.registerPlugin('interaction', InteractionManager); core.CanvasRenderer.registerPlugin('interaction', InteractionManager); -},{"../core":53,"./InteractionData":146,"./interactiveTarget":149}],148:[function(require,module,exports){ +},{"../core":54,"./InteractionData":147,"./interactiveTarget":150}],149:[function(require,module,exports){ /** * @file Main export of the PIXI interactions library * @author Mat Groves @@ -28726,7 +28766,7 @@ interactiveTarget: require('./interactiveTarget') }; -},{"./InteractionData":146,"./InteractionManager":147,"./interactiveTarget":149}],149:[function(require,module,exports){ +},{"./InteractionData":147,"./InteractionManager":148,"./interactiveTarget":150}],150:[function(require,module,exports){ /** * Default property values of interactive objects * used by {@link PIXI.interaction.InteractionManager}. @@ -28775,7 +28815,7 @@ module.exports = interactiveTarget; -},{}],150:[function(require,module,exports){ +},{}],151:[function(require,module,exports){ var Resource = require('resource-loader').Resource, core = require('../core'), extras = require('../extras'), @@ -28896,7 +28936,7 @@ }; }; -},{"../core":53,"../extras":116,"path":17,"resource-loader":31}],151:[function(require,module,exports){ +},{"../core":54,"../extras":117,"path":17,"resource-loader":31}],152:[function(require,module,exports){ /** * @file Main export of the PIXI loaders library * @author Mat Groves @@ -28917,7 +28957,7 @@ Resource: require('resource-loader').Resource }; -},{"./bitmapFontParser":150,"./loader":152,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],152:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./loader":153,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],153:[function(require,module,exports){ var ResourceLoader = require('resource-loader'), textureParser = require('./textureParser'), spritesheetParser = require('./spritesheetParser'), @@ -28979,7 +29019,7 @@ Resource.setExtensionXhrType('fnt', Resource.XHR_RESPONSE_TYPE.DOCUMENT); -},{"./bitmapFontParser":150,"./spritesheetParser":153,"./textureParser":154,"resource-loader":31}],153:[function(require,module,exports){ +},{"./bitmapFontParser":151,"./spritesheetParser":154,"./textureParser":155,"resource-loader":31}],154:[function(require,module,exports){ var Resource = require('resource-loader').Resource, path = require('path'), core = require('../core'); @@ -29063,7 +29103,7 @@ }; }; -},{"../core":53,"path":17,"resource-loader":31}],154:[function(require,module,exports){ +},{"../core":54,"path":17,"resource-loader":31}],155:[function(require,module,exports){ var core = require('../core'); module.exports = function () @@ -29085,7 +29125,7 @@ }; }; -},{"../core":53}],155:[function(require,module,exports){ +},{"../core":54}],156:[function(require,module,exports){ var core = require('../core'), tempPoint = new core.Point(), tempPolygon = new core.Polygon(); @@ -29561,7 +29601,7 @@ TRIANGLES: 1 }; -},{"../core":53}],156:[function(require,module,exports){ +},{"../core":54}],157:[function(require,module,exports){ var Mesh = require('./Mesh'); /** @@ -29687,7 +29727,7 @@ } }; -},{"./Mesh":155}],157:[function(require,module,exports){ +},{"./Mesh":156}],158:[function(require,module,exports){ var Mesh = require('./Mesh'); var core = require('../core'); @@ -29900,7 +29940,7 @@ this.containerUpdateTransform(); }; -},{"../core":53,"./Mesh":155}],158:[function(require,module,exports){ +},{"../core":54,"./Mesh":156}],159:[function(require,module,exports){ /** * @file Main export of the PIXI extras library * @author Mat Groves @@ -29919,7 +29959,7 @@ MeshShader: require('./webgl/MeshShader') }; -},{"./Mesh":155,"./Plane":156,"./Rope":157,"./webgl/MeshRenderer":159,"./webgl/MeshShader":160}],159:[function(require,module,exports){ +},{"./Mesh":156,"./Plane":157,"./Rope":158,"./webgl/MeshRenderer":160,"./webgl/MeshShader":161}],160:[function(require,module,exports){ var core = require('../../core'), Mesh = require('../Mesh'); @@ -30148,7 +30188,7 @@ core.ObjectRenderer.prototype.destroy.call(this); }; -},{"../../core":53,"../Mesh":155}],160:[function(require,module,exports){ +},{"../../core":54,"../Mesh":156}],161:[function(require,module,exports){ var core = require('../../core'); /** @@ -30209,7 +30249,7 @@ core.ShaderManager.registerPlugin('meshShader', MeshShader); -},{"../../core":53}],161:[function(require,module,exports){ +},{"../../core":54}],162:[function(require,module,exports){ // References: // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign @@ -30225,7 +30265,7 @@ }; } -},{}],162:[function(require,module,exports){ +},{}],163:[function(require,module,exports){ // References: // https://github.com/sindresorhus/object-assign // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign @@ -30235,12 +30275,12 @@ Object.assign = require('object-assign'); } -},{"object-assign":26}],163:[function(require,module,exports){ +},{"object-assign":26}],164:[function(require,module,exports){ require('./Object.assign'); require('./requestAnimationFrame'); require('./Math.sign'); -},{"./Math.sign":161,"./Object.assign":162,"./requestAnimationFrame":164}],164:[function(require,module,exports){ +},{"./Math.sign":162,"./Object.assign":163,"./requestAnimationFrame":165}],165:[function(require,module,exports){ (function (global){ // References: // http://paulirish.com/2011/requestanimationframe-for-smart-animating/ @@ -30311,8 +30351,8 @@ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[145])(145) +},{}]},{},[146])(146) }); -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L1RyYW5zZm9ybS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL1dlYkdMR3JhcGhpY3NEYXRhLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZENpcmNsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ29tcGxleFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZExpbmUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFBvbHkuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9NYXRyaXguanMiLCJzcmMvY29yZS9tYXRoL1BvaW50LmpzIiwic3JjL2NvcmUvbWF0aC9pbmRleC5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0NpcmNsZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL0VsbGlwc2UuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Qb2x5Z29uLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUm91bmRlZFJlY3RhbmdsZS5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZUJ1ZmZlci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL1N5c3RlbVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcy5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9UZXh0dXJlTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9GWEFBRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvTWFza01hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1F1YWQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0LmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1N0ZW5jaWxNYXNrU3RhY2suanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpLmpzIiwic3JjL2NvcmUvc3ByaXRlcy9TcHJpdGUuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL1Nwcml0ZVJlbmRlcmVyLmpzIiwic3JjL2NvcmUvc3ByaXRlcy93ZWJnbC9nZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3RleHQvVGV4dC5qcyIsInNyYy9jb3JlL3RleHR1cmVzL0Jhc2VSZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1RleHR1cmVVdnMuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGlja2VyL1RpY2tlci5qcyIsInNyYy9jb3JlL3RpY2tlci9pbmRleC5qcyIsInNyYy9jb3JlL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcy5qcyIsInNyYy9jb3JlL3V0aWxzL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvcGx1Z2luVGFyZ2V0LmpzIiwic3JjL2RlcHJlY2F0aW9uLmpzIiwic3JjL2V4dHJhcy9CaXRtYXBUZXh0LmpzIiwic3JjL2V4dHJhcy9Nb3ZpZUNsaXAuanMiLCJzcmMvZXh0cmFzL1RpbGluZ1Nwcml0ZS5qcyIsInNyYy9leHRyYXMvY2FjaGVBc0JpdG1hcC5qcyIsInNyYy9leHRyYXMvZ2V0Q2hpbGRCeU5hbWUuanMiLCJzcmMvZXh0cmFzL2dldEdsb2JhbFBvc2l0aW9uLmpzIiwic3JjL2V4dHJhcy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2FzY2lpL0FzY2lpRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmxvb20vQmxvb21GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJEaXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJYRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9CbHVyWUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvU21hcnRCbHVyRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvclN0ZXBGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kb3QvRG90U2NyZWVuRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZHJvcHNoYWRvdy9CbHVyWVRpbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ncmF5L0dyYXlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2ludmVydC9JbnZlcnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ub2lzZS9Ob2lzZUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcmdiL1JHQlNwbGl0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvc2VwaWEvU2VwaWFGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdEF4aXNGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3R3aXN0L1R3aXN0RmlsdGVyLmpzIiwic3JjL3NyYy9pbmRleC5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbkRhdGEuanMiLCJzcmMvaW50ZXJhY3Rpb24vSW50ZXJhY3Rpb25NYW5hZ2VyLmpzIiwic3JjL2ludGVyYWN0aW9uL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL2ludGVyYWN0aXZlVGFyZ2V0LmpzIiwic3JjL2xvYWRlcnMvYml0bWFwRm9udFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL2luZGV4LmpzIiwic3JjL2xvYWRlcnMvbG9hZGVyLmpzIiwic3JjL2xvYWRlcnMvc3ByaXRlc2hlZXRQYXJzZXIuanMiLCJzcmMvbG9hZGVycy90ZXh0dXJlUGFyc2VyLmpzIiwic3JjL21lc2gvTWVzaC5qcyIsInNyYy9tZXNoL1BsYW5lLmpzIiwic3JjL21lc2gvUm9wZS5qcyIsInNyYy9tZXNoL2luZGV4LmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFJlbmRlcmVyLmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFNoYWRlci5qcyIsInNyYy9wb2x5ZmlsbC9NYXRoLnNpZ24uanMiLCJzcmMvcG9seWZpbGwvT2JqZWN0LmFzc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9pbmRleC5qcyIsInNyYy9wb2x5ZmlsbC9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM1dUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbnNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25tQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0b0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6bUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIGNyZWF0ZUNvbnRleHQ6IFx0XHRcdHJlcXVpcmUoJy4vbGliL2NyZWF0ZUNvbnRleHQnKSxcbiAgICBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM6IFx0cmVxdWlyZSgnLi9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzJyksXG4gICAgXG4gICAgR0xCdWZmZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xCdWZmZXInKSxcbiAgICBHTEZyYW1lYnVmZmVyOiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9HTEZyYW1lYnVmZmVyJyksXG4gICAgR0xTaGFkZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xTaGFkZXInKSxcbiAgICBHTFRleHR1cmU6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xUZXh0dXJlJyksXG4gICAgXG4gICAgVmVydGV4QXJyYXlPYmplY3Q6IFx0XHRyZXF1aXJlKCcuL2xpYi9WZXJ0ZXhBcnJheU9iamVjdCcpXG5cbn07IiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRU1QVFlfQVJSQVlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xuXG52YXIgQnVmZmVyID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5BUlJBWV9CVUZGRVI7XG5cdHRoaXMuZHJhd1R5cGUgPSBkcmF3VHlwZSB8fCBnbC5TVEFUSUNfRFJBVztcblx0dGhpcy5kYXRhID0gRU1QVFlfQVJSQVlfQlVGRkVSO1xuXG5cdGlmKGRhdGEpXG5cdHtcblx0XHR0aGlzLnVwbG9hZChkYXRhKTtcblx0fVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKGRhdGEsIG9mZnNldCwgZG9udEJpbmQpXG57XG5cdC8vIHRvZG8gLSBuZWVkZWQ/XG5cdC8vaWYoIWRvbnRCaW5kKVxuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRcblx0ZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuXHRvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuXHRpZih0aGlzLmRhdGEuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpXG5cdHtcdFxuXHRcdGdsLmJ1ZmZlclN1YkRhdGEodGhpcy50eXBlLCBvZmZzZXQsIGRhdGEpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLCBkYXRhLCB0aGlzLmRyYXdUeXBlKTtcblx0fVxuXG5cdHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKTtcbn1cblxuQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIGdsLkFSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgdHlwZSwgZHJhd1R5cGUpO1xufVxuXG4vL1RPRE8gRGVzdHJveS4uXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyO1xuXG4iLCJcbnZhciBUZXh0dXJlID0gcmVxdWlyZSgnLi9HTFRleHR1cmUnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgRnJhbWVidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRnJhbWVidWZmZXIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcblx0dGhpcy5zdGVuY2lsID0gbnVsbDtcblx0dGhpcy50ZXh0dXJlID0gbnVsbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMTAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5lbmFibGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IG5ldyBUZXh0dXJlKGdsKTtcblxuXHR0aGlzLnRleHR1cmUuYmluZCgpO1xuXG5cdC8vZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlLnRleHR1cmUsIDApO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlU3RlbmNpbCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5zdGVuY2lsKXJldHVybjtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuc3RlbmNpbCA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgIFxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCB0aGlzLnN0ZW5jaWwpO1xuICAgIFxuICAgIC8vIFRPRE8uLiB0aGlzIGlzIGRlcHRoIEFORCBzdGVuY2lsP1xuICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTCwgIHRoaXMud2lkdGggICwgdGhpcy5oZWlnaHQgKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oIHIsIGcsIGIsIGEgKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIGdsLmNsZWFyQ29sb3IociwgZywgYiwgYSk7XG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZnJhbWVidWZmZXIgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdGlmICggdGhpcy50ZXh0dXJlIClcbiAgICB7XG4gICAgXHR0aGlzLnRleHR1cmUudXBsb2FkRGF0YShudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdGlmICggdGhpcy5zdGVuY2lsIClcbiAgICB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgc3RlbmNpbCBidWZmZXIgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlUkdCQSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHR2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbURhdGEoZ2wsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xuXHR0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSk7XG5cbiAgICBmYm8udW5iaW5kKCk7XG4gICAgXG4gICAgcmV0dXJuIGZibztcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlRmxvYXQzMiA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHQvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZS4uXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZS5mcm9tRGF0YShnbCwgZGF0YSwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpXG5cbiAgICBmYm8udW5iaW5kKCk7XG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lYnVmZmVyO1xuXG4iLCJcbnZhciBjb21waWxlUHJvZ3JhbSA9IHJlcXVpcmUoJy4vc2hhZGVyL2NvbXBpbGVQcm9ncmFtJyksXG5cdGV4dHJhY3RBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdEF0dHJpYnV0ZXMnKSxcblx0ZXh0cmFjdFVuaWZvcm1zID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdFVuaWZvcm1zJyksXG5cdGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IHJlcXVpcmUoJy4vc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCcpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBTaGFkZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xudmFyIFNoYWRlciA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0Ly8gRmlyc3QgY29tcGlsZSB0aGUgcHJvZ3JhbS4uXG5cdHRoaXMucHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXHQvLyBuZXh0IGV4dHJhY3QgdGhlIGF0dHJpYnV0ZXNcblx0dGhpcy5hdHRyaWJ1dGVzID0gZXh0cmFjdEF0dHJpYnV0ZXMoZ2wsIHRoaXMucHJvZ3JhbSk7IFxuXG4gICAgdmFyIHVuaWZvcm1EYXRhID0gZXh0cmFjdFVuaWZvcm1zKGdsLCB0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy51bmlmb3JtcyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCggZ2wsIHVuaWZvcm1EYXRhICk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgVGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBhIFdlYkdMIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gZm9ybWF0IHtudW1iZXJ9IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlJHQkFcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IHRoZSBnbCB0eXBlIG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5VTlNJR05FRF9CWVRFXG4gKi9cbnZhciBUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHQvLyBzb21lIHNldHRpbmdzLi5cblx0dGhpcy5taXBtYXAgPSBmYWxzZTtcblxuXHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdCB8fCBnbC5SR0JBO1xuXHR0aGlzLnR5cGUgPSB0eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7XG5cblxufVxuXG4vKipcbiAqIEBwYXJhbSB7UElYSS5nbENvcmUuVGV4dHVyZX0gW3Zhcm5hbWVdIFtkZXNjcmlwdGlvbl1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oc291cmNlKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblxuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgc291cmNlKTtcbn1cblxudmFyIEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IGZhbHNlO1xuXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWREYXRhID0gZnVuY3Rpb24oZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5iaW5kKCk7XG5cdFxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgdGhpcy53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG5cblx0aWYoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcblx0e1xuXHRcdGlmKCFGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUpXG5cdFx0e1xuXHRcdFx0dmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO1xuXHRcdFx0XG5cdFx0XHRpZihleHQpXG5cdFx0XHR7XG5cdFx0XHRcdEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHlwZSA9IGdsLkZMT0FUO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdC8vIFRPRE8gc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXNcblx0XHR0aGlzLnR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuXHR9XG5cblx0Ly8gd2hhdCB0eXBlIG9mIGRhdGE/XG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcblx0Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBkYXRhIHx8IG51bGwpO1xuXG59XG5cblRleHR1cmUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihsb2NhdGlvbilcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRpZihsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKVxuXHR7XG5cdFx0Z2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uKTtcblx0fVxuXG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1pbkZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGlmKHRoaXMubWlwbWFwKVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCk7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xuXHR9XHRcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWFnRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVNaXBtYXAgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHRoaXMubWlwbWFwID0gdHJ1ZTtcblx0Z2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZUxpbmVhclNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKHRydWUpO1xuXHR0aGlzLm1hZ0ZpbHRlcih0cnVlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTmVhcmVzdFNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKGZhbHNlKTtcblx0dGhpcy5tYWdGaWx0ZXIoZmFsc2UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwQ2xhbXAgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBSZXBlYXQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cdFxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5SRVBFQVQpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG59XG5cbi8vVGV4dHVyZS5cblRleHR1cmUuZnJvbVNvdXJjZSA9IGZ1bmN0aW9uKGdsLCBzb3VyY2UsIHByZW11bHRpcGx5QWxwaGEpXG57XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhIHx8IGZhbHNlO1xuXHR0ZXh0dXJlLnVwbG9hZChzb3VyY2UpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5UZXh0dXJlLmZyb21EYXRhID0gZnVuY3Rpb24oZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdC8vY29uc29sZS5sb2coZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnVwbG9hZERhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG4iLCJcbi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxuLy8gc3RhdGUgb2JqZWN0Ly9cblxuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChnbClcbntcblx0XG5cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gKFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpXG4gICAgKTtcblxuLy9cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gbnVsbDtcblxuXHRpZih0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbilcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvID0gdGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsgIFxuXHR9XG5cblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG5cdHRoaXMuZGlydHkgPSBmYWxzZTtcblxuXHRcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVydGV4QXJyYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFZlcnRleEFycmF5T2JqZWN0O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5uYXRpdmVWYW8pOyAgXG5cblx0XHRpZih0aGlzLmRpcnR5KVxuXHRcdHtcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0XHR9XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgXG5cdHtcblx0XHR2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW2ldO1xuXHRcdGF0dHJpYi5idWZmZXIuYmluZCgpO1x0XG5cblx0XHRhdHRyaWIuYXR0cmlidXRlLnBvaW50ZXIoYXR0cmliLnR5cGUsIGF0dHJpYi5ub3JtYWxpemVkLCBhdHRyaWIuc3RyaWRlLCBhdHRyaWIuc3RhcnQpOyBcblx0XHRcblx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWIuYXR0cmlidXRlLmxvY2F0aW9uKTtcblx0fTtcblxuXHR0aGlzLmluZGV4QnVmZmVyLmJpbmQoKTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgYXR0cmlidXRlLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXJ0KVxue1xuICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHtcbiAgICBcdGJ1ZmZlcjogXHRidWZmZXIsXG4gICAgXHRhdHRyaWJ1dGU6IFx0YXR0cmlidXRlLFxuXG4gICAgXHRsb2NhdGlvbjogXHRhdHRyaWJ1dGUubG9jYXRpb24sXG5cdCBcdHR5cGU6IFx0XHR0eXBlIHx8IHRoaXMuZ2wuRkxPQVQsXG5cdCBcdG5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWQgfHwgZmFsc2UsXG5cdCBcdHN0cmlkZTogXHRzdHJpZGUgfHwgMCxcblx0IFx0c3RhcnQ6IFx0XHRzdGFydCB8fCAwXG5cdH0pXG5cblx0dGhpcy5kaXJ0eSA9IHRydWU7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRpb25zKVxue1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBidWZmZXI7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHR5cGUsIHNpemUsIHN0YXJ0KVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5kcmF3RWxlbWVudHModHlwZSwgc2l6ZSwgZ2wuVU5TSUdORURfU0hPUlQsIHN0YXJ0KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBDb250ZXh0XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIENPTlRFWFRfVUlEID0gMDtcblxudmFyIGNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbihjYW52YXMsIG9wdGlvbnMpXG57XG4gICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRpb25zKSB8fCBcbiAgICBcdCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdsKVxuICAgIHtcbiAgICAgICAgLy8gZmFpbCwgbm90IGFibGUgdG8gZ2V0IGEgY29udGV4dFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHdlYkdMLiBUcnkgdXNpbmcgdGhlIGNhbnZhcyByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIC8vIG1pZ2h0IHdhbnQgdG8gcGhhc2UgdGhpcyBvdXQ/XG4gICAgZ2wuaWQgPSBDT05URVhUX1VJRCsrO1xuXG4gICAgcmV0dXJuIGdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbnRleHQ7XG5cbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBzZXRWZXJ0ZXhBdHRyaWJBcnJheXMgPSBmdW5jdGlvbiAoZ2wsIGF0dHJpYnMpXG57XHRcbiAgIC8vIGNvbnNvbGUubG9nKGdsLmlkKVxuICAgIHZhciBkYXRhID0gR0xfTUFQW2dsLmlkXTtcblxuICAgIGlmKCFkYXRhKVxuICAgIHtcblx0ICAgdmFyIG1heEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0XHRkYXRhID0gR0xfTUFQW2dsLmlkXSA9IHt0ZW1wQXR0cmliU3RhdGU6bmV3IEFycmF5KG1heEF0dHJpYnMpXG5cdFx0XHRcdCBcdCBcdFx0ICAgLGF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKX07XG5cdH1cblx0XG4gICAgdmFyIGksXG4gICAgXHR0ZW1wQXR0cmliU3RhdGUgPSBkYXRhLnRlbXBBdHRyaWJTdGF0ZSxcbiAgICBcdGF0dHJpYlN0YXRlID0gZGF0YS5hdHRyaWJTdGF0ZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wQXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yIChpIGluIGF0dHJpYnMpXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbYXR0cmlic1tpXS5sb2NhdGlvbl0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDE7IGkgPCBhdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChhdHRyaWJTdGF0ZVtpXSAhPT0gdGVtcEF0dHJpYlN0YXRlW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJTdGF0ZVtpXSA9IHRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM7IiwiXG5cblxuXG5jb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuICAgIHZhciBnbFZlcnRTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbnZhciBjb21waWxlU2hhZGVyID0gZnVuY3Rpb24gKGdsLCB0eXBlLCBzcmMpXG57XG4gICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuXG4gICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlUHJvZ3JhbTtcblxuIiwiXG5cbnZhciBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBzaXplKSBcbntcbiAgICBzd2l0Y2ggKHR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICBjYXNlICd2ZWMyJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjNCc6ICAgICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KDQgKiBzaXplKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnaXZlYzInOiAgIFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDIgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWM0JzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2wnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY2FzZSAnYnZlYzInOlxuXG4gICAgICAgICAgICByZXR1cm4gYm9vbGVhbkFycmF5KCAyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzQnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSg0ICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDFdKTtcblxuICAgICAgICBjYXNlICdtYXQzJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0NCc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMCwgMV0pO1xuICAgIH1cbn1cblxudmFyIGJvb2xlYW5BcnJheSA9IGZ1bmN0aW9uKHNpemUpXG57XG4gICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgXG4gICAge1xuICAgICAgICBhcnJheVtpXSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdFZhbHVlO1xuIiwiXG52YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIG1hcFNpemUgPSByZXF1aXJlKCcuL21hcFNpemUnKTtcblxudmFyIGV4dHJhY3RBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcblxuICAgIHZhciB0b3RhbEF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9BVFRSSUJVVEVTKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEF0dHJpYnV0ZXM7IGkrKykgXG4gICAge1xuICAgICAgICB2YXIgYXR0cmliRGF0YSA9IGdsLmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpKTtcbiAgICAgICAgdmFyIHR5cGUgPSBtYXBUeXBlKGdsLCBhdHRyaWJEYXRhLnR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNbYXR0cmliRGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgIHR5cGU6dHlwZSxcbiAgICAgICAgICAgIHNpemU6bWFwU2l6ZSh0eXBlKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOmdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGF0dHJpYkRhdGEubmFtZSksXG4gICAgICAgICAgICAvL1RPRE8gLSBtYWtlIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAgICAgICAgICAgIHBvaW50ZXI6ZnVuY3Rpb24odHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydCl7XG5cbiAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmxvY2F0aW9uLHRoaXMuc2l6ZSwgdHlwZSB8fCBnbC5GTE9BVCwgbm9ybWFsaXplZCB8fCBmYWxzZSwgc3RyaWRlIHx8IDAsIHN0YXJ0IHx8IDApOyBcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzOyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0cmFjdEF0dHJpYnV0ZXM7XG5cbiIsInZhciBtYXBUeXBlID0gcmVxdWlyZSgnLi9tYXBUeXBlJyk7XG52YXIgZGVmYXVsdFZhbHVlID0gcmVxdWlyZSgnLi9kZWZhdWx0VmFsdWUnKTtcblxuXG52YXIgZXh0cmFjdFVuaWZvcm1zID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG5cdHZhciB1bmlmb3JtcyA9IHt9O1xuXHRcbiAgICB2YXIgdG90YWxVbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbFVuaWZvcm1zOyBpKyspIFxuICAgIHtcbiAgICBcdHZhciB1bmlmb3JtRGF0YSA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSk7XG4gICAgXHR2YXIgbmFtZSA9IHVuaWZvcm1EYXRhLm5hbWUucmVwbGFjZSgvXFxbLio/XFxdLywgXCJcIik7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgdW5pZm9ybURhdGEudHlwZSApO1xuXG4gICAgXHR1bmlmb3Jtc1tuYW1lXSA9IHtcbiAgICBcdFx0dHlwZTp0eXBlLFxuICAgIFx0XHRzaXplOnVuaWZvcm1EYXRhLnNpemUsXG4gICAgXHRcdGxvY2F0aW9uOmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSxcbiAgICBcdFx0dmFsdWU6ZGVmYXVsdFZhbHVlKHR5cGUsIHVuaWZvcm1EYXRhLnNpemUpXG4gICAgXHR9XG4gICAgfTtcblx0XG5cdHJldHVybiB1bmlmb3JtcztcdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RVbmlmb3JtcztcblxuIiwiXG52YXIgZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gZnVuY3Rpb24oZ2wsIHVuaWZvcm1EYXRhKVxue1xuICAgIC8vIHRoaXMgaXMgdGhlIG9iamVjdCB3ZSB3aWxsIGJlIHNlbmRpbmcgYmFjay5cbiAgICAvLyBhbiBvYmplY3QgaGllcmFjaHkgd2lsbCBiZSBjcmVhdGVkIGZvciBzdHJ1Y3RzXG4gICAgdmFyIHVuaWZvcm1zID0ge2RhdGE6e319O1xuXG4gICAgdW5pZm9ybXMuZ2wgPSBnbDtcbiAgICBcbiAgICB2YXIgdW5pZm9ybUtleXM9IE9iamVjdC5rZXlzKHVuaWZvcm1EYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybUtleXMubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGZ1bGxOYW1lID0gdW5pZm9ybUtleXNbaV1cblxuICAgICAgICB2YXIgbmFtZVRva2VucyA9IGZ1bGxOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHZhciB1bmlmb3JtR3JvdXAgPSBnZXRVbmlmb3JtR3JvdXAobmFtZVRva2VucywgdW5pZm9ybXMpO1xuXG4gICAgICAgIHZhciB1bmlmb3JtID0gIHVuaWZvcm1EYXRhW2Z1bGxOYW1lXTtcbiAgICAgICAgdW5pZm9ybUdyb3VwLmRhdGFbbmFtZV0gPSB1bmlmb3JtO1xuXG4gICAgICAgIHVuaWZvcm1Hcm91cC5nbCA9IGdsO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bmlmb3JtR3JvdXAsIG5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2VuZXJhdGVHZXR0ZXIobmFtZSksXG4gICAgICAgICAgICBzZXQ6IGdlbmVyYXRlU2V0dGVyKG5hbWUsIHVuaWZvcm0pXG4gICAgICAgIH0pXG4gICAgfTtcblxuICAgIHJldHVybiB1bmlmb3Jtcztcbn1cblxudmFyIGdlbmVyYXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSlcbntcblx0dmFyIHRlbXBsYXRlID0gZ2V0dGVyVGVtcGxhdGUucmVwbGFjZSgnJSUnLCBuYW1lKTtcblx0cmV0dXJuIG5ldyBGdW5jdGlvbih0ZW1wbGF0ZSk7XG59XG5cbnZhciBnZW5lcmF0ZVNldHRlciA9IGZ1bmN0aW9uKG5hbWUsIHVuaWZvcm0pXG57XG4gICAgdmFyIHRlbXBsYXRlID0gc2V0dGVyVGVtcGxhdGUucmVwbGFjZSgvJSUvZywgbmFtZSk7XG4gICAgdmFyIHNldFRlbXBsYXRlXG4gICAgXG4gICAgaWYodW5pZm9ybS5zaXplID09PSAxKVxuICAgIHtcbiAgICAgICAgc2V0VGVtcGxhdGUgPSBHTFNMX1RPX1NJTkdMRV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19BUlJBWV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuXG4gICAgaWYoc2V0VGVtcGxhdGUpXG4gICAge1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIlxcbnRoaXMuZ2wuXCIgKyBzZXRUZW1wbGF0ZSArIFwiO1wiO1xuICAgIH1cblxuICBcdHJldHVybiBuZXcgRnVuY3Rpb24oJ3ZhbHVlJywgdGVtcGxhdGUpO1xufVxuXG52YXIgZ2V0VW5pZm9ybUdyb3VwID0gZnVuY3Rpb24obmFtZVRva2VucywgdW5pZm9ybSlcbntcbiAgICB2YXIgY3VyID0gdW5pZm9ybTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZVRva2Vucy5sZW5ndGggLSAxOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIG8gPSBjdXJbbmFtZVRva2Vuc1tpXV0gfHwge2RhdGE6e319O1xuICAgICAgICBjdXJbbmFtZVRva2Vuc1tpXV0gPSBvO1xuICAgICAgICBjdXIgPSBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gY3VyXG59XG5cbnZhciBnZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAncmV0dXJuIHRoaXMuZGF0YS4lJS52YWx1ZTsnLFxuXS5qb2luKCdcXG4nKTtcblxudmFyIHNldHRlclRlbXBsYXRlID0gW1xuICAgICd0aGlzLmRhdGEuJSUudmFsdWUgPSB2YWx1ZTsnLFxuICAgICd2YXIgbG9jYXRpb24gPSB0aGlzLmRhdGEuJSUubG9jYXRpb247J1xuXS5qb2luKCdcXG4nKTtcblxuXG52YXIgR0xTTF9UT19TSU5HTEVfU0VUVEVSUyA9IHtcblxuICAgICdmbG9hdCc6ICAgICd1bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ3ZlYzQnOiAgICAgJ3VuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdidmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdidmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ21hdDInOiAgICAgJ3VuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuICAgICdtYXQzJzogICAgICd1bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0NCc6ICAgICAndW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG5cbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbnZhciBHTFNMX1RPX0FSUkFZX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpJyxcblxuICAgICd2ZWMyJzogICAgICd1bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWMzJzogICAgICd1bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgIFx0XG4gICAgJ2ludCc6ICAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgIFxuICAgICdzYW1wbGVyMkQnOid1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0O1xuXG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbih0eXBlKSBcbnsgXG4gICAgcmV0dXJuIEdMU0xfVE9fU0laRVt0eXBlXTtcbn1cblxuXG52YXIgR0xTTF9UT19TSVpFID0ge1xuICAgICdmbG9hdCc6ICAgIDEsXG4gICAgJ3ZlYzInOiAgICAgMixcbiAgICAndmVjMyc6ICAgICAzLFxuICAgICd2ZWM0JzogICAgIDQsXG5cbiAgICAnaW50JzogICAgICAxLFxuICAgICdpdmVjMic6ICAgIDIsXG4gICAgJ2l2ZWMzJzogICAgMyxcbiAgICAnaXZlYzQnOiAgICA0LFxuXG4gICAgJ2Jvb2wnOiAgICAgMSxcbiAgICAnYnZlYzInOiAgICAyLFxuICAgICdidmVjMyc6ICAgIDMsXG4gICAgJ2J2ZWM0JzogICAgNCxcblxuICAgICdtYXQyJzogICAgIDQsXG4gICAgJ21hdDMnOiAgICAgOSxcbiAgICAnbWF0NCc6ICAgICAxNixcblxuICAgICdzYW1wbGVyMkQnOiAgMVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFNpemU7XG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbihnbCwgdHlwZSkgXG57XG4gICAgaWYoIUdMX1RBQkxFKSBcbiAgICB7XG4gICAgICAgIHZhciB0eXBlTmFtZXMgPSBPYmplY3Qua2V5cyhHTF9UT19HTFNMX1RZUEVTKTtcblxuICAgICAgICBHTF9UQUJMRSA9IHt9O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlTmFtZXMubGVuZ3RoOyArK2kpIFxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdG4gPSB0eXBlTmFtZXNbaV07XG4gICAgICAgICAgICBHTF9UQUJMRVsgZ2xbdG5dIF0gPSBHTF9UT19HTFNMX1RZUEVTW3RuXTtcbiAgICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gR0xfVEFCTEVbdHlwZV07XG59XG5cbnZhciBHTF9UQUJMRSA9IG51bGw7XG5cbnZhciBHTF9UT19HTFNMX1RZUEVTID0ge1xuICAnRkxPQVQnOiAgICAgICAnZmxvYXQnLFxuICAnRkxPQVRfVkVDMic6ICAndmVjMicsXG4gICdGTE9BVF9WRUMzJzogICd2ZWMzJyxcbiAgJ0ZMT0FUX1ZFQzQnOiAgJ3ZlYzQnLFxuXG4gICdJTlQnOiAgICAgICAgICdpbnQnLFxuICAnSU5UX1ZFQzInOiAgICAnaXZlYzInLFxuICAnSU5UX1ZFQzMnOiAgICAnaXZlYzMnLFxuICAnSU5UX1ZFQzQnOiAgICAnaXZlYzQnLFxuICBcbiAgJ0JPT0wnOiAgICAgICAgJ2Jvb2wnLFxuICAnQk9PTF9WRUMyJzogICAnYnZlYzInLFxuICAnQk9PTF9WRUMzJzogICAnYnZlYzMnLFxuICAnQk9PTF9WRUM0JzogICAnYnZlYzQnLFxuICBcbiAgJ0ZMT0FUX01BVDInOiAgJ21hdDInLFxuICAnRkxPQVRfTUFUMyc6ICAnbWF0MycsXG4gICdGTE9BVF9NQVQ0JzogICdtYXQ0JyxcbiAgXG4gICdTQU1QTEVSXzJEJzogICdzYW1wbGVyMkQnICBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiLyohXG4gKiBhc3luY1xuICogaHR0cHM6Ly9naXRodWIuY29tL2Nhb2xhbi9hc3luY1xuICpcbiAqIENvcHlyaWdodCAyMDEwLTIwMTQgQ2FvbGFuIE1jTWFob25cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9Cb29sKHYpIHtcbiAgICAgICAgcmV0dXJuICEhdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90SWQodikge1xuICAgICAgICByZXR1cm4gIXY7XG4gICAgfVxuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBwcmV2aW91c19hc3luYztcblxuICAgIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAgIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICAgIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsIHx8XG4gICAgICAgICAgICB0aGlzO1xuXG4gICAgaWYgKHJvb3QgIT0gbnVsbCkge1xuICAgICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsaXR5IGZ1bmN0aW9ucyAvLy8vXG5cbiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIHZhciBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xuXG4gICAgLy8gUG9ydGVkIGZyb20gdW5kZXJzY29yZS5qcyBpc09iamVjdFxuICAgIHZhciBfaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2lzQXJyYXlMaWtlKGFycikge1xuICAgICAgICByZXR1cm4gX2lzQXJyYXkoYXJyKSB8fCAoXG4gICAgICAgICAgICAvLyBoYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAgICAgICAgdHlwZW9mIGFyci5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgICAgYXJyLmxlbmd0aCAlIDEgPT09IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXJyYXlFYWNoKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaW5kZXhdLCBpbmRleCwgYXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IGFyci5sZW5ndGgsXG4gICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcmFuZ2UoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9tYXAoQXJyYXkoY291bnQpLCBmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gaTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZHVjZShhcnIsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgIF9hcnJheUVhY2goYXJyLCBmdW5jdGlvbiAoeCwgaSwgYSkge1xuICAgICAgICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHgsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZvckVhY2hPZihvYmplY3QsIGl0ZXJhdG9yKSB7XG4gICAgICAgIF9hcnJheUVhY2goX2tleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaXRlcmF0b3Iob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbmRleE9mKGFyciwgaXRlbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9rZXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW47XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBpZiAoX2lzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGkgOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBfa2V5cyhjb2xsKTtcbiAgICAgICAgICAgIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ga2V5c1tpXSA6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2ltaWxhciB0byBFUzYncyByZXN0IHBhcmFtIChodHRwOi8vYXJpeWEub2ZpbGFicy5jb20vMjAxMy8wMy9lczYtYW5kLXJlc3QtcGFyYW1ldGVyLmh0bWwpXG4gICAgLy8gVGhpcyBhY2N1bXVsYXRlcyB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGFuIGFycmF5LCBhZnRlciBhIGdpdmVuIGluZGV4LlxuICAgIC8vIEZyb20gdW5kZXJzY29yZS5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMjE0MCkuXG4gICAgZnVuY3Rpb24gX3Jlc3RQYXJhbShmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IHVudXNlZCBidXQgaGFuZGxlIGNhc2VzIG91dHNpZGUgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQ6XG4gICAgICAgICAgICAvLyB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgIC8vIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIC8vICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgICAgICAgIC8vIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IodmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG5cbiAgICAvLyBjYXB0dXJlIHRoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIGd1YXJkIGFnYWluc3QgZmFrZVRpbWVyIG1vY2tzXG4gICAgdmFyIF9zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcblxuICAgIHZhciBfZGVsYXkgPSBfc2V0SW1tZWRpYXRlID8gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgX3NldEltbWVkaWF0ZShmbik7XG4gICAgfSA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IF9kZWxheTtcbiAgICB9XG4gICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gX3NldEltbWVkaWF0ZSA/IF9kZWxheSA6IGFzeW5jLm5leHRUaWNrO1xuXG5cbiAgICBhc3luYy5mb3JFYWNoID1cbiAgICBhc3luYy5lYWNoID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2YoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID1cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cblxuICAgIGFzeW5jLmZvckVhY2hMaW1pdCA9XG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2VhY2hPZkxpbWl0KGxpbWl0KShhcnIsIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZiA9XG4gICAgYXN5bmMuZWFjaE9mID0gZnVuY3Rpb24gKG9iamVjdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdCB8fCBbXTtcblxuICAgICAgICB2YXIgaXRlciA9IF9rZXlJdGVyYXRvcihvYmplY3QpO1xuICAgICAgICB2YXIga2V5LCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgICAgIHdoaWxlICgoa2V5ID0gaXRlcigpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXksIG9ubHlfb25jZShkb25lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkID09PSAwKSBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgICAgY29tcGxldGVkLS07XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGtleSBpcyBudWxsIGluIGNhc2UgaXRlcmF0b3IgaXNuJ3QgZXhoYXVzdGVkXG4gICAgICAgICAgICAvLyBhbmQgZG9uZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBudWxsICYmIGNvbXBsZXRlZCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaE9mU2VyaWVzID1cbiAgICBhc3luYy5lYWNoT2ZTZXJpZXMgPSBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShpdGVyYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLmZvckVhY2hPZkxpbWl0ID1cbiAgICBhc3luYy5lYWNoT2ZMaW1pdCA9IGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgX2VhY2hPZkxpbWl0KGxpbWl0KShvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9lYWNoT2ZMaW1pdChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgICAgICBvYmogPSBvYmogfHwgW107XG4gICAgICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUgJiYgcnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmICFlcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBuZXh0S2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iob2JqW2tleV0sIGtleSwgb25seV9vbmNlKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZG9QYXJhbGxlbChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oYXN5bmMuZWFjaE9mLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWxMaW1pdChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKF9lYWNoT2ZMaW1pdChsaW1pdCksIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9TZXJpZXMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZlNlcmllcywgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UoYXJyKSA/IFtdIDoge307XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih2YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9hc3luY01hcCk7XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMuaW5qZWN0ID1cbiAgICBhc3luYy5mb2xkbCA9XG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hPZlNlcmllcyhhcnIsIGZ1bmN0aW9uICh4LCBpLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgeCwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBtZW1vKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvbGRyID1cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgaWRlbnRpdHkpLnJldmVyc2UoKTtcbiAgICAgICAgYXN5bmMucmVkdWNlKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0b3I7XG4gICAgICAgICAgICBpdGVyYXRvciA9IG1lbW87XG4gICAgICAgICAgICBtZW1vID0gX2lzQXJyYXkoYXJyKSA/IFtdIDoge307XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoT2YoYXJyLCBmdW5jdGlvbih2LCBrLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgdiwgaywgY2IpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4OiBpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5zZWxlY3QgPVxuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RMaW1pdCA9XG4gICAgYXN5bmMuZmlsdGVyTGltaXQgPSBkb1BhcmFsbGVsTGltaXQoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RTZXJpZXMgPVxuICAgIGFzeW5jLmZpbHRlclNlcmllcyA9IGRvU2VyaWVzKF9maWx0ZXIpO1xuXG4gICAgZnVuY3Rpb24gX3JlamVjdChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9maWx0ZXIoZWFjaGZuLCBhcnIsIGZ1bmN0aW9uKHZhbHVlLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBjYighdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBhc3luYy5yZWplY3QgPSBkb1BhcmFsbGVsKF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdFNlcmllcyA9IGRvU2VyaWVzKF9yZWplY3QpO1xuXG4gICAgZnVuY3Rpb24gX2NyZWF0ZVRlc3RlcihlYWNoZm4sIGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYikge1xuICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIGNiKGdldFJlc3VsdChmYWxzZSwgdm9pZCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZSh4LCBfLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYiAmJiBjaGVjayh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoZ2V0UmVzdWx0KHRydWUsIHgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgZWFjaGZuKGFyciwgbGltaXQsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2IgPSBpdGVyYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGxpbWl0O1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy5hbnkgPVxuICAgIGFzeW5jLnNvbWUgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5zb21lTGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCB0b0Jvb2wsIGlkZW50aXR5KTtcblxuICAgIGFzeW5jLmFsbCA9XG4gICAgYXN5bmMuZXZlcnkgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgbm90SWQsIG5vdElkKTtcblxuICAgIGFzeW5jLmV2ZXJ5TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBub3RJZCwgbm90SWQpO1xuXG4gICAgZnVuY3Rpb24gX2ZpbmRHZXRSZXN1bHQodiwgeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgYXN5bmMuZGV0ZWN0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0U2VyaWVzID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZTZXJpZXMsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuXG4gICAgYXN5bmMuc29ydEJ5ID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLm1hcChhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKGVyciwgY3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7dmFsdWU6IHgsIGNyaXRlcmlhOiBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChjb21wYXJhdG9yKSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNvbmN1cnJlbmN5LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gcmVtYWluaW5nVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBfaW5kZXhPZihsaXN0ZW5lcnMsIGZuKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRhc2tDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLS07XG4gICAgICAgICAgICBfYXJyYXlFYWNoKGxpc3RlbmVycy5zbGljZSgwKSwgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBfYXJyYXlFYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9mb3JFYWNoT2YocmVzdWx0cywgZnVuY3Rpb24odmFsLCBya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHRhc2tDb21wbGV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRlYWQtbG9ja3NcbiAgICAgICAgICAgIHZhciBsZW4gPSByZXF1aXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZGVwO1xuICAgICAgICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZGVwID0gdGFza3NbcmVxdWlyZXNbbGVuXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGluZXhpc3RhbnQgZGVwZW5kZW5jeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzQXJyYXkoZGVwKSAmJiBfaW5kZXhPZihkZXAsIGspID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXMgY3ljbGljIGRlcGVuZGVuY2llcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5uaW5nVGFza3MgPCBjb25jdXJyZW5jeSAmJiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzKys7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLnJldHJ5ID0gZnVuY3Rpb24odGltZXMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBERUZBVUxUX1RJTUVTID0gNTtcbiAgICAgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuXG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbDogREVGQVVMVF9JTlRFUlZBTFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KXtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0ID09PSAnbnVtYmVyJyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodCwgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYodHlwZW9mIHQgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBhY2MudGltZXMgPSBwYXJzZUludCh0LnRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgICAgICAgICBhY2MuaW50ZXJ2YWwgPSBwYXJzZUludCh0LmludGVydmFsLCAxMCkgfHwgREVGQVVMVF9JTlRFUlZBTDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGZvciBcXCd0aW1lc1xcJzogJyArIHR5cGVvZiB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgMSB8fCBsZW5ndGggPiAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIC0gbXVzdCBiZSBlaXRoZXIgKHRhc2spLCAodGFzaywgY2FsbGJhY2spLCAodGltZXMsIHRhc2spIG9yICh0aW1lcywgdGFzaywgY2FsbGJhY2spJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoIDw9IDIgJiYgdHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRzLCB0aW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBvcHRzLnRhc2sgPSB0YXNrO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRUYXNrKHdyYXBwZWRDYWxsYmFjaywgd3JhcHBlZFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCh0YXNrLCBmaW5hbEF0dGVtcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VyaWVzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayhmdW5jdGlvbihlcnIsIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXNDYWxsYmFjayghZXJyIHx8IGZpbmFsQXR0ZW1wdCwge2VycjogZXJyLCByZXN1bHQ6IHJlc3VsdH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVkUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmV0cnlJbnRlcnZhbChpbnRlcnZhbCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAob3B0cy50aW1lcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsQXR0ZW1wdCA9ICEob3B0cy50aW1lcy09MSk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQob3B0cy50YXNrLCBmaW5hbEF0dGVtcHQpKTtcbiAgICAgICAgICAgICAgICBpZighZmluYWxBdHRlbXB0ICYmIG9wdHMuaW50ZXJ2YWwgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUludGVydmFsKG9wdHMuaW50ZXJ2YWwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IG9wdHMuY2FsbGJhY2spKGRhdGEuZXJyLCBkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIG9wdHMuY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2s7XG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBJdGVyYXRvcihpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgW2Vycl0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuc3VyZUFzeW5jKGl0ZXJhdG9yKS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfcGFyYWxsZWwoZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IF9pc0FycmF5TGlrZSh0YXNrcykgPyBbXSA6IHt9O1xuXG4gICAgICAgIGVhY2hmbih0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGtleSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRhc2soX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2YsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChfZWFjaE9mTGltaXQobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKGFzeW5jLmVhY2hPZlNlcmllcywgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuaXRlcmF0b3IgPSBmdW5jdGlvbiAodGFza3MpIHtcbiAgICAgICAgZnVuY3Rpb24gbWFrZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm4ubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgdGFza3MubGVuZ3RoIC0gMSkgPyBtYWtlQ2FsbGJhY2soaW5kZXggKyAxKTogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIChmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoY2FsbEFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLCBhcmdzLmNvbmNhdChjYWxsQXJncylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gX2NvbmNhdChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoeSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG4gICAgICAgIGlmICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0LmFwcGx5KHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1doaWxzdCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiArK2NhbGxzIDw9IDEgfHwgdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZHVyaW5nID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG5cbiAgICAgICAgdmFyIG5leHQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjaGVjayk7XG4gICAgICAgICAgICAgICAgdGVzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24oZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRydXRoKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QoY2hlY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb0R1cmluZyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgYXN5bmMuZHVyaW5nKGZ1bmN0aW9uKG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjYWxscysrIDwgMSkge1xuICAgICAgICAgICAgICAgIG5leHQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3F1ZXVlKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHBvcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayB8fCBub29wXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9uZXh0KHEsIHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIF9hcnJheUVhY2godGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2god29ya2Vyc0xpc3QsIGZ1bmN0aW9uICh3b3JrZXIsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya2VyID09PSB0YXNrICYmICFyZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBub29wLFxuICAgICAgICAgICAgZW1wdHk6IG5vb3AsXG4gICAgICAgICAgICBkcmFpbjogbm9vcCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5kcmFpbiA9IG5vb3A7XG4gICAgICAgICAgICAgICAgcS50YXNrcyA9IFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnQ6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrcyA9IHEucGF5bG9hZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS5wYXlsb2FkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS50YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9tYXAodGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5wdXNoKHRhc2tzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShfbmV4dChxLCB0YXNrcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyKGRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtlcnNMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSBmYWxzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bWVDb3VudCA9IE1hdGgubWluKHEuY29uY3VycmVuY3ksIHEudGFza3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHJlc3VtZUNvdW50OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBxID0gX3F1ZXVlKGZ1bmN0aW9uIChpdGVtcywgY2IpIHtcbiAgICAgICAgICAgIHdvcmtlcihpdGVtc1swXSwgY2IpO1xuICAgICAgICB9LCBjb25jdXJyZW5jeSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLnByaW9yaXR5UXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuXG4gICAgICAgIGZ1bmN0aW9uIF9jb21wYXJlVGFza3MoYSwgYil7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgICB2YXIgYmVnID0gLTEsXG4gICAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgc2VxdWVuY2VbbWlkXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWcgPSBtaWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmVnO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBfcXVldWUod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2NvbnNvbGVfZm4obmFtZSkge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2goYXJncywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlW25hbWVdKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgaWRlbnRpdHk7XG4gICAgICAgIHZhciBtZW1vaXplZCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24gbWVtb2l6ZWQoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBtZW1vW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0gPSBbY2FsbGJhY2tdO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW9ba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH07XG5cbiAgICBhc3luYy51bm1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3RpbWVzKG1hcHBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG1hcHBlcihfcmFuZ2UoY291bnQpLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jLnRpbWVzID0gX3RpbWVzKGFzeW5jLm1hcCk7XG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBfdGltZXMoYXN5bmMubWFwU2VyaWVzKTtcbiAgICBhc3luYy50aW1lc0xpbWl0ID0gZnVuY3Rpb24gKGNvdW50LCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5tYXBMaW1pdChfcmFuZ2UoY291bnQpLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VxID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5vb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnJlZHVjZShmbnMsIGFyZ3MsIGZ1bmN0aW9uIChuZXdhcmdzLCBmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBuZXdhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBuZXh0YXJncykge1xuICAgICAgICAgICAgICAgICAgICBjYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY29tcG9zZSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIF9hcHBseUVhY2goZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uKGZucywgYXJncykge1xuICAgICAgICAgICAgdmFyIGdvID0gX3Jlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgXywgY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncy5jb25jYXQoW2NiXSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ28uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ287XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmFwcGx5RWFjaCA9IF9hcHBseUVhY2goYXN5bmMuZWFjaE9mKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZlNlcmllcyk7XG5cblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seV9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIgdGFzayA9IGVuc3VyZUFzeW5jKGZuKTtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmVuc3VyZUFzeW5jID0gZW5zdXJlQXN5bmM7XG5cbiAgICBhc3luYy5jb25zdGFudCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICAgIHZhciBhcmdzID0gW251bGxdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhc3luYy53cmFwU3luYyA9XG4gICAgYXN5bmMuYXN5bmNpZnkgPSBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChfaXNPYmplY3QocmVzdWx0KSAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIubWVzc2FnZSA/IGVyciA6IG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcblxuICAgIGRpbSA9IGRpbSB8fCAyO1xuXG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLFxuICAgICAgICBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcbiAgICAgICAgdHJpYW5nbGVzID0gW107XG5cbiAgICBpZiAoIW91dGVyTm9kZSkgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBzaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgc2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIHN1bSA9IDAsXG4gICAgICAgIGksIGosIGxhc3Q7XG5cbiAgICAvLyBjYWxjdWxhdGUgb3JpZ2luYWwgd2luZGluZyBvcmRlciBvZiBhIHBvbHlnb24gcmluZ1xuICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuXG4gICAgLy8gbGluayBwb2ludHMgaW50byBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHN1bSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG4gICAgaWYgKCFzdGFydCkgcmV0dXJuIHN0YXJ0O1xuICAgIGlmICghZW5kKSBlbmQgPSBzdGFydDtcblxuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcCA9IGVuZCA9IHAucHJldjtcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuICAgIHJldHVybiBlbmQ7XG59XG5cbi8vIG1haW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBhcyBhIGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIHBhc3MpIHtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuICAgIGlmICghcGFzcyAmJiBzaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICB2YXIgc3RvcCA9IGVhcixcbiAgICAgICAgcHJldiwgbmV4dDtcblxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuICAgIHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcbiAgICAgICAgcHJldiA9IGVhci5wcmV2O1xuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XG5cbiAgICAgICAgaWYgKHNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIHNpemUpIDogaXNFYXIoZWFyKSkge1xuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXG4gICAgICAgICAgICByZW1vdmVOb2RlKGVhcik7XG5cbiAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRpY2UgbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhlYXIsIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIHNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICAvLyBmaXJzdCBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBpbmNyZWFzaW5nIHotb3JkZXJcbiAgICB2YXIgcCA9IGVhci5uZXh0WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyB0aGVuIGxvb2sgZm9yIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICBwID0gZWFyLnByZXZaO1xuXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgLy8gYSBzZWxmLWludGVyc2VjdGlvbiB3aGVyZSBlZGdlICh2W2ktMV0sdltpXSkgaW50ZXJzZWN0cyAodltpKzFdLHZbaSsyXSlcbiAgICAgICAgaWYgKGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHA7XG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBsb29rIGZvciBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgICAgICAgICBhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiA9IGIubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBhID0gYS5uZXh0O1xuICAgIH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG4gICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuICAgICAgICBpZiAobGlzdCA9PT0gbGlzdC5uZXh0KSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuICAgICAgICBxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcbiAgICB9XG5cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0ZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlWChhLCBiKSB7XG4gICAgcmV0dXJuIGEueCAtIGIueDtcbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkge1xuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xuICAgICAgICBmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcbiAgICB9XG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBwID0gb3V0ZXJOb2RlLFxuICAgICAgICBoeCA9IGhvbGUueCxcbiAgICAgICAgaHkgPSBob2xlLnksXG4gICAgICAgIHF4ID0gLUluZmluaXR5LFxuICAgICAgICBtO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgdGFuO1xuXG4gICAgcCA9IG0ubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBzdG9wKSB7XG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG0ueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG0ueSA/IGh4IDogcXgsIGh5LCBtLngsIG0ueSwgaHkgPCBtLnkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuICAgICAgICAgICAgaWYgKCh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIHAueCA+IG0ueCkpICYmIGxvY2FsbHlJbnNpZGUocCwgaG9sZSkpIHtcbiAgICAgICAgICAgICAgICBtID0gcDtcbiAgICAgICAgICAgICAgICB0YW5NaW4gPSB0YW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBtO1xufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgIHAucHJldlogPSBwLnByZXY7XG4gICAgICAgIHAubmV4dFogPSBwLm5leHQ7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgcC5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKHApO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIGRvIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHFTaXplID09PSAwIHx8ICFxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAueiA8PSBxLnopIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuICAgICAgICBpblNpemUgKj0gMjtcblxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIHNpemUgb2YgdGhlIGRhdGEgYm91bmRpbmcgYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpIC8gc2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpIC8gc2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LngpIGxlZnRtb3N0ID0gcDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gbGVmdG1vc3Q7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcbiAgICByZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXF1YWxzKGEsIGIpIHx8IGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcbiAgICAgICAgICAgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKTtcbn1cblxuLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xufVxuXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXG4gICAgICAgICAgIGFyZWEocDIsIHEyLCBwMSkgPiAwICE9PSBhcmVhKHAyLCBxMiwgcTEpID4gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG4vLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG4gICAgICAgIGFuID0gYS5uZXh0LFxuICAgICAgICBicCA9IGIucHJldjtcblxuICAgIGEubmV4dCA9IGI7XG4gICAgYi5wcmV2ID0gYTtcblxuICAgIGEyLm5leHQgPSBhbjtcbiAgICBhbi5wcmV2ID0gYTI7XG5cbiAgICBiMi5uZXh0ID0gYTI7XG4gICAgYTIucHJldiA9IGIyO1xuXG4gICAgYnAubmV4dCA9IGIyO1xuICAgIGIyLnByZXYgPSBicDtcblxuICAgIHJldHVybiBiMjtcbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgcC5wcmV2ID0gcDtcbiAgICAgICAgcC5uZXh0ID0gcDtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHAubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgcC5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xuICAgICAgICBsYXN0Lm5leHQgPSBwO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XG4gICAgcC5uZXh0LnByZXYgPSBwLnByZXY7XG4gICAgcC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cbiAgICBpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG4gICAgaWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcbiAgICAvLyB2ZXJ0aWNlIGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRpY2Ugbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vXG4vLyBXZSBzdG9yZSBvdXIgRUUgb2JqZWN0cyBpbiBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBgfmAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Qgb3ZlcnJpZGRlbiBvclxuLy8gdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy8gV2UgYWxzbyBhc3N1bWUgdGhhdCBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV2ZW50IG5hbWVcbi8vIGlzIGFuIEVTNiBTeW1ib2wuXG4vL1xudmFyIHByZWZpeCA9IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nID8gJ34nIDogZmFsc2U7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgRXZlbnRFbWl0dGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBDb250ZXh0IGZvciBmdW5jdGlvbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSBlbWl0IG9uY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTWluaW1hbCBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIEV2ZW50RW1pdHRlciBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7IC8qIE5vdGhpbmcgdG8gc2V0ICovIH1cblxuLyoqXG4gKiBIb2xkcyB0aGUgYXNzaWduZWQgRXZlbnRFbWl0dGVycyBieSBuYW1lLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBhc3NpZ25lZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBleGlzdHMgV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtBcnJheXxCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQsIGV4aXN0cykge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgYXZhaWxhYmxlID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChleGlzdHMpIHJldHVybiAhIWF2YWlsYWJsZTtcbiAgaWYgKCFhdmFpbGFibGUpIHJldHVybiBbXTtcbiAgaWYgKGF2YWlsYWJsZS5mbikgcmV0dXJuIFthdmFpbGFibGUuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXZhaWxhYmxlLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGF2YWlsYWJsZVtpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB0byBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJbmRpY2F0aW9uIGlmIHdlJ3ZlIGVtaXR0ZWQgYW4gZXZlbnQuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IEV2ZW50TGlzdGVuZXIgZm9yIHRoZSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0b259IGZuIENhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGQgYW4gRXZlbnRMaXN0ZW5lciB0aGF0J3Mgb25seSBjYWxsZWQgb25jZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IHRoaXMsIHRydWUpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKSB0aGlzLl9ldmVudHMgPSBwcmVmaXggPyB7fSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHRoaXMuX2V2ZW50c1tldnRdID0gbGlzdGVuZXI7XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5fZXZlbnRzW2V2dF0uZm4pIHRoaXMuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIGVsc2UgdGhpcy5fZXZlbnRzW2V2dF0gPSBbXG4gICAgICB0aGlzLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3ZSB3YW50IHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciB0aGF0IHdlIG5lZWQgdG8gZmluZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgT25seSByZW1vdmUgbGlzdGVuZXJzIG1hdGNoaW5nIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmNlIGxpc3RlbmVycy5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGV2ZW50cyA9IFtdO1xuXG4gIGlmIChmbikge1xuICAgIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgICAgbGlzdGVuZXJzLmZuICE9PSBmblxuICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzLm9uY2UpXG4gICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVycy5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm5cbiAgICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpXG4gICAgICAgICAgfHwgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gIC8vXG4gIGlmIChldmVudHMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbZXZ0XTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycyBvciBvbmx5IHRoZSBsaXN0ZW5lcnMgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvci5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcztcblxuICBpZiAoZXZlbnQpIGRlbGV0ZSB0aGlzLl9ldmVudHNbcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudF07XG4gIGVsc2UgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYXBwbHkgYW55bW9yZS5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLypqc2hpbnQgb25ldmFyOiBmYWxzZSwgaW5kZW50OjQgKi9cbi8qZ2xvYmFsIHNldEltbWVkaWF0ZTogZmFsc2UsIHNldFRpbWVvdXQ6IGZhbHNlLCBjb25zb2xlOiBmYWxzZSAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciByb290LCBwcmV2aW91c19hc3luYztcblxuICAgIHJvb3QgPSB0aGlzO1xuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgIHByZXZpb3VzX2FzeW5jID0gcm9vdC5hc3luYztcbiAgICB9XG5cbiAgICBhc3luYy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmFzeW5jID0gcHJldmlvdXNfYXN5bmM7XG4gICAgICAgIHJldHVybiBhc3luYztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb25seV9vbmNlKGZuKSB7XG4gICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGNhbGxlZCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseShyb290LCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIHZhciBfZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaV0sIGksIGFycik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIF9tYXAgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBpZiAoYXJyLm1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5tYXAoaXRlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih4LCBpLCBhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgdmFyIF9yZWR1Y2UgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBpZiAoYXJyLnJlZHVjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8pO1xuICAgICAgICB9XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICB2YXIgX2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIC8vLy8gZXhwb3J0ZWQgYXN5bmMgbW9kdWxlIGZ1bmN0aW9ucyAvLy8vXG5cbiAgICAvLy8vIG5leHRUaWNrIGltcGxlbWVudGF0aW9uIHdpdGggYnJvd3Nlci1jb21wYXRpYmxlIGZhbGxiYWNrIC8vLy9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICEocHJvY2Vzcy5uZXh0VGljaykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgICBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAvLyBub3QgYSBkaXJlY3QgYWxpYXMgZm9yIElFMTAgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBvbmx5X29uY2UoZG9uZSkgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaCA9IGFzeW5jLmVhY2g7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmICghYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgIHZhciBpdGVyYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA+PSBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2hTZXJpZXMgPSBhc3luYy5lYWNoU2VyaWVzO1xuXG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZm4gPSBfZWFjaExpbWl0KGxpbWl0KTtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgW2FyciwgaXRlcmF0b3IsIGNhbGxiYWNrXSk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPSBhc3luYy5lYWNoTGltaXQ7XG5cbiAgICB2YXIgX2VhY2hMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBpZiAoIWFyci5sZW5ndGggfHwgbGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmIHN0YXJ0ZWQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihhcnJbc3RhcnRlZCAtIDFdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBkb1BhcmFsbGVsID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZG9QYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24obGltaXQsIGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW19lYWNoTGltaXQobGltaXQpXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvU2VyaWVzID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hTZXJpZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuXG4gICAgdmFyIF9hc3luY01hcCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW3guaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX21hcExpbWl0KGxpbWl0KShhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHZhciBfbWFwTGltaXQgPSBmdW5jdGlvbihsaW1pdCkge1xuICAgICAgICByZXR1cm4gZG9QYXJhbGxlbExpbWl0KGxpbWl0LCBfYXN5bmNNYXApO1xuICAgIH07XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gaW5qZWN0IGFsaWFzXG4gICAgYXN5bmMuaW5qZWN0ID0gYXN5bmMucmVkdWNlO1xuICAgIC8vIGZvbGRsIGFsaWFzXG4gICAgYXN5bmMuZm9sZGwgPSBhc3luYy5yZWR1Y2U7XG5cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIC8vIGZvbGRyIGFsaWFzXG4gICAgYXN5bmMuZm9sZHIgPSBhc3luYy5yZWR1Y2VSaWdodDtcblxuICAgIHZhciBfZmlsdGVyID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZmlsdGVyID0gZG9QYXJhbGxlbChfZmlsdGVyKTtcbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcbiAgICAvLyBzZWxlY3QgYWxpYXNcbiAgICBhc3luYy5zZWxlY3QgPSBhc3luYy5maWx0ZXI7XG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID0gYXN5bmMuZmlsdGVyU2VyaWVzO1xuXG4gICAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIHZhciBfZGV0ZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5kZXRlY3QgPSBkb1BhcmFsbGVsKF9kZXRlY3QpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IGRvU2VyaWVzKF9kZXRlY3QpO1xuXG4gICAgYXN5bmMuc29tZSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGFueSBhbGlhc1xuICAgIGFzeW5jLmFueSA9IGFzeW5jLnNvbWU7XG5cbiAgICBhc3luYy5ldmVyeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbGwgYWxpYXNcbiAgICBhc3luYy5hbGwgPSBhc3luYy5ldmVyeTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChmbiksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aFxuICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB2YXIgYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGZuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0YXNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tXG4gICAgICAgICAgICBfZWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudCBmaW5hbCBjYWxsYmFjayBmcm9tIGNhbGxpbmcgaXRzZWxmIGlmIGl0IGVycm9yc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICB0aGVDYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2VhY2goa2V5cywgZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gX2lzQXJyYXkodGFza3Nba10pID8gdGFza3Nba106IFt0YXNrc1trXV07XG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2FmZVJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgX2VhY2goX2tleXMocmVzdWx0cyksIGZ1bmN0aW9uKHJrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW3JrZXldID0gcmVzdWx0c1tya2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3Agc3Vic2VxdWVudCBlcnJvcnMgaGl0dGluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIE1hdGguYWJzKHRhc2subGVuZ3RoIC0gMSkpIHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuICAgICAgICAvLyBVc2UgZGVmYXVsdHMgaWYgdGltZXMgbm90IHBhc3NlZFxuICAgICAgICBpZiAodHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgICAgICB0aW1lcyA9IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRpbWVzIGlzIGEgbnVtYmVyXG4gICAgICAgIHRpbWVzID0gcGFyc2VJbnQodGltZXMsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICB2YXIgd3JhcHBlZFRhc2sgPSBmdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICB2YXIgcmV0cnlBdHRlbXB0ID0gZnVuY3Rpb24odGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2hpbGUgKHRpbWVzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQodGFzaywgISh0aW1lcy09MSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IGNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQsIHJ1biB0aGlzIGFzIGEgY29udHJvbGwgZmxvd1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2tcbiAgICB9O1xuXG4gICAgYXN5bmMud2F0ZXJmYWxsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIV9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd3JhcEl0ZXJhdG9yID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2god3JhcEl0ZXJhdG9yKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gZnVuY3Rpb24oZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKF9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgZWFjaGZuLm1hcCh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgZWFjaGZuLmVhY2goX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBhc3luYy5tYXAsIGVhY2g6IGFzeW5jLmVhY2ggfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKHRhc2tzLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBfbWFwTGltaXQobGltaXQpLCBlYWNoOiBfZWFjaExpbWl0KGxpbWl0KSB9LCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGFzeW5jLm1hcFNlcmllcyh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhfa2V5cyh0YXNrcyksIGZ1bmN0aW9uIChrLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRhc2tzW2tdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIHZhciBtYWtlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbWFrZUNhbGxiYWNrKDApO1xuICAgIH07XG5cbiAgICBhc3luYy5hcHBseSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBfY29uY2F0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNiKSB7XG4gICAgICAgICAgICBmbih4LCBmdW5jdGlvbiAoZXJyLCB5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMud2hpbHN0KHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICh0ZXN0LmFwcGx5KG51bGwsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0ZXN0KCkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3luYy51bnRpbCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvVW50aWwgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICghdGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvVW50aWwoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICBxLnRhc2tzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbnVsbCxcbiAgICAgICAgICAgIGVtcHR5OiBudWxsLFxuICAgICAgICAgICAgZHJhaW46IG51bGwsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcS5kcmFpbiA9IG51bGw7XG4gICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghcS5wYXVzZWQgJiYgd29ya2VycyA8IHEuY29uY3VycmVuY3kgJiYgcS50YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBxLnRhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLmVtcHR5ICYmIHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4gJiYgcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyKHRhc2suZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHEuY29uY3VycmVuY3k7IHcrKykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICBlbmQgPSBzZXF1ZW5jZS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciBtaWQgPSBiZWcgKyAoKGVuZCAtIGJlZyArIDEpID4+PiAxKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKF9iaW5hcnlTZWFyY2gocS50YXNrcywgaXRlbSwgX2NvbXBhcmVUYXNrcykgKyAxLCAwLCBpdGVtKTtcblxuICAgICAgICAgICAgICBpZiAocS5zYXR1cmF0ZWQgJiYgcS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvblxuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5jYXJnbyA9IGZ1bmN0aW9uICh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHdvcmtpbmcgICAgID0gZmFsc2UsXG4gICAgICAgICAgICB0YXNrcyAgICAgICA9IFtdO1xuXG4gICAgICAgIHZhciBjYXJnbyA9IHtcbiAgICAgICAgICAgIHRhc2tzOiB0YXNrcyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgZHJhaW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX2VhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXJnby5kcmFpbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXJnby5zYXR1cmF0ZWQgJiYgdGFza3MubGVuZ3RoID09PSBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnby5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShjYXJnby5wcm9jZXNzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICAgICAgICAgIGlmICh3b3JraW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZihjYXJnby5kcmFpbiAmJiAhY2FyZ28uZHJhaW5lZCkgY2FyZ28uZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdHMgPSB0eXBlb2YgcGF5bG9hZCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRhc2tzLnNwbGljZSgwLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza3Muc3BsaWNlKDAsIHRhc2tzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZHMgPSBfbWFwKHRzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFzay5kYXRhO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoY2FyZ28uZW1wdHkpIGNhcmdvLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgd29ya2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2VyKGRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgX2VhY2godHMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNhcmdvO1xuICAgIH07XG5cbiAgICB2YXIgX2NvbnNvbGVfZm4gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy50aW1lcyA9IGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb3VudGVyID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY291bnRlci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luYy5tYXAoY291bnRlciwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwU2VyaWVzKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGF0LCBbZXJyXS5jb25jYXQocmVzdWx0cykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICByZXR1cm4gYXN5bmMuc2VxLmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIHZhciBfYXBwbHlFYWNoID0gZnVuY3Rpb24gKGVhY2hmbiwgZm5zIC8qYXJncy4uLiovKSB7XG4gICAgICAgIHZhciBnbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgZnVuY3Rpb24gKGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5hcHBseUVhY2ggPSBkb1BhcmFsbGVsKF9hcHBseUVhY2gpO1xuICAgIGFzeW5jLmFwcGx5RWFjaFNlcmllcyA9IGRvU2VyaWVzKF9hcHBseUVhY2gpO1xuXG4gICAgYXN5bmMuZm9yZXZlciA9IGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xuXG4gICAgLy8gTm9kZS5qc1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwidmFyIGFzeW5jICAgICAgID0gcmVxdWlyZSgnYXN5bmMnKSxcbiAgICB1cmxQYXJzZXIgICA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIFJlc291cmNlICAgID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBtdWx0aXBsZSByZXNvdXJjZXMgdG8gbG9hZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIGNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvZ3Jlc3MgcGVyY2VudCBvZiB0aGUgbG9hZGVyIGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogTG9hZGluZyBzdGF0ZSBvZiB0aGUgbG9hZGVyLCB0cnVlIGlmIGl0IGlzIGN1cnJlbnRseSBsb2FkaW5nIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0b3RhbCBwcm9ncmVzcyB0aGF0IGEgc2luZ2xlIHJlc291cmNlIHJlcHJlc2VudHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWlkZGxld2FyZSB0byBydW4gYmVmb3JlIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGFmdGVyIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9sb2FkUmVzb3VyY2VgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRMb2FkUmVzb3VyY2UgPSB0aGlzLl9sb2FkUmVzb3VyY2UuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uTG9hZGAgZnVuY3Rpb24gYm91bmQgd2l0aCB0aGlzIG9iamVjdCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uTG9hZCA9IHRoaXMuX29uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlIGJ1ZmZlciB0aGF0IGZpbGxzIHVudGlsIGBsb2FkYCBpcyBjYWxsZWQgdG8gc3RhcnQgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlW119XG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyID0gW107XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHRyYWNrIGxvYWQgY29tcGxldGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb3VyY2VzIHdhaXRpbmcgdG8gYmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX3F1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fYm91bmRMb2FkUmVzb3VyY2UsIGNvbmN1cnJlbmN5KTtcblxuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGlzIGxvYWRlciBrZXllZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgUmVzb3VyY2U+fVxuICAgICAqL1xuICAgIHRoaXMucmVzb3VyY2VzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCBvciBlcnJvcmVkIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgb25jZSBwZXIgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbG9hZGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdGFydFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHF1ZXVlZCByZXNvdXJjZXMgYWxsIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY29tcGxldGVcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuLyoqXG4gKiBBZGRzIGEgcmVzb3VyY2UgKG9yIG11bHRpcGxlIHJlc291cmNlcykgdG8gdGhlIGxvYWRlciBxdWV1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGEgd2lkZSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwYXJhbWV0ZXJzLiBUaGUgb25seSB0aGluZyB0aGF0IGlzIGFsd2F5c1xuICogcmVxdWlyZWQgdGhlIHVybCB0byBsb2FkLiBBbGwgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6XG4gKlxuICogYGBganNcbiAqIGxvYWRlclxuICogICAgIC8vIG5vcm1hbCBwYXJhbSBzeW50YXhcbiAqICAgICAuYWRkKCdrZXknLCAnaHR0cDovLy4uLicsIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJylcbiAqXG4gKiAgICAgLy8gb2JqZWN0IHN5bnRheFxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MicsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIG5hbWU6ICdrZXkzJyxcbiAqICAgICAgICAgdXJsOiAnaHR0cDovLy4uLidcbiAqICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge31cbiAqICAgICB9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwczovLy4uLicsXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9LFxuICogICAgICAgICBjcm9zc09yaWdpbjogdHJ1ZVxuICogICAgIH0pXG4gKlxuICogICAgIC8vIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJscyBvciBib3RoXG4gKiAgICAgLmFkZChbXG4gKiAgICAgICAgIHsgbmFtZTogJ2tleTQnLCB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgeyB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgJ2h0dHA6Ly8uLi4nXG4gKiAgICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAYWxpYXMgZW5xdWV1ZVxuICogQHBhcmFtIFtuYW1lXSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZCwgaWYgbm90IHBhc3NlZCB0aGUgdXJsIGlzIHVzZWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIHJlbGF0aXZlIHRvIHRoZSBiYXNlVXJsIG9mIHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcGFyYW0gW29wdGlvbnMuY3Jvc3NPcmlnaW5dIHtib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5YSFJfTE9BRF9UWVBFfSBIb3cgc2hvdWxkIHRoaXMgcmVzb3VyY2UgYmUgbG9hZGVkP1xuICogQHBhcmFtIFtvcHRpb25zLnhoclR5cGU9UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVF0ge1Jlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFfSBIb3cgc2hvdWxkIHRoZSBkYXRhIGJlaW5nXG4gKiAgICAgIGxvYWRlZCBiZSBpbnRlcnByZXRlZCB3aGVuIHVzaW5nIFhIUj9cbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMgc3BlY2lmaWMgcmVzb3VyY2UgY29tcGxldGVzIGxvYWRpbmcuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWRkID0gTG9hZGVyLnByb3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgb3B0aW9ucywgY2IpIHtcbiAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciB1cmxzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChuYW1lW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGlmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW5zdGVhZCBvZiBwYXJhbXNcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNiID0gdXJsIHx8IG5hbWUuY2FsbGJhY2sgfHwgbmFtZS5vbkNvbXBsZXRlO1xuICAgICAgICBvcHRpb25zID0gbmFtZTtcbiAgICAgICAgdXJsID0gbmFtZS51cmw7XG4gICAgICAgIG5hbWUgPSBuYW1lLm5hbWUgfHwgbmFtZS5rZXkgfHwgbmFtZS51cmw7XG4gICAgfVxuXG4gICAgLy8gY2FzZSB3aGVyZSBubyBuYW1lIGlzIHBhc3NlZCBzaGlmdCBhbGwgYXJncyBvdmVyIGJ5IG9uZS5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdXJsO1xuICAgICAgICB1cmwgPSBuYW1lO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IHdlIHNoaWZ0ZWQgbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9wZXIgdXJsLlxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVybCBwYXNzZWQgdG8gYWRkIHJlc291cmNlIHRvIGxvYWRlci4nKTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zIGFyZSBvcHRpb25hbCBzbyBwZW9wbGUgbWlnaHQgcGFzcyBhIGZ1bmN0aW9uIGFuZCBubyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW25hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzb3VyY2Ugd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBleGlzdHMuJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJhc2UgdXJsIGlmIHRoaXMgaXNuJ3QgYW4gYWJzb2x1dGUgdXJsXG4gICAgdXJsID0gdGhpcy5faGFuZGxlQmFzZVVybCh1cmwpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBzdG9yZSB0aGUgcmVzb3VyY2VcbiAgICB0aGlzLnJlc291cmNlc1tuYW1lXSA9IG5ldyBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlc291cmNlc1tuYW1lXS5vbmNlKCdhZnRlck1pZGRsZXdhcmUnLCBjYik7XG4gICAgfVxuXG4gICAgdGhpcy5fbnVtVG9Mb2FkKys7XG5cbiAgICAvLyBpZiBhbHJlYWR5IGxvYWRpbmcgYWRkIGl0IHRvIHRoZSB3b3JrZXIgcXVldWVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9ICgxMDAgLSB0aGlzLnByb2dyZXNzKSAvICh0aGlzLl9xdWV1ZS5sZW5ndGgoKSArIHRoaXMuX3F1ZXVlLnJ1bm5pbmcoKSk7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBidWZmZXIgaXQgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlIGxhdGVyXG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDEwMCAvIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5Mb2FkZXIucHJvdG90eXBlLl9oYW5kbGVCYXNlVXJsID0gZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBwYXJzZWRVcmwgPSB1cmxQYXJzZXIucGFyc2UodXJsKTtcblxuICAgIC8vIGFic29sdXRlIHVybCwganVzdCB1c2UgaXQgYXMgaXMuXG4gICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCB8fCBwYXJzZWRVcmwucGF0aG5hbWUuaW5kZXhPZignLy8nKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIC8vIGlmIGJhc2VVcmwgZG9lc24ndCBlbmQgaW4gc2xhc2ggYW5kIHVybCBkb2Vzbid0IHN0YXJ0IHdpdGggc2xhc2gsIHRoZW4gYWRkIGEgc2xhc2ggaW5iZXR3ZWVuXG4gICAgaWYgKFxuICAgICAgICB0aGlzLmJhc2VVcmwubGVuZ3RoICYmXG4gICAgICAgIHRoaXMuYmFzZVVybC5sYXN0SW5kZXhPZignLycpICE9PSB0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSAmJlxuICAgICAgICB1cmwuY2hhckF0KDApICE9PSAnLydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybCArICcvJyArIHVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmJlZm9yZSogdGhlXG4gKiByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKlxuICogQGFsaWFzIHByZVxuICogQHBhcmFtIG1pZGRsZXdhcmUge2Z1bmN0aW9ufSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5iZWZvcmUgPSBMb2FkZXIucHJvdG90eXBlLnByZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB1cCBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gdGhhdCB3aWxsIHJ1biAqYWZ0ZXIqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyB1c2VcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWZ0ZXIgPSBMb2FkZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZS5wdXNoKGZuKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHF1ZXVlIG9mIHRoZSBsb2FkZXIgdG8gcHJlcGFyZSBmb3IgYSBuZXcgbG9hZC5cbiAqXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gdGhpcy5iYXNlVXJsID0gYmFzZVVybCB8fCAnJztcblxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9ncmVzc0NodW5rID0gMDtcblxuICAgIC8vIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUubGVuZ3RoID0gMDtcbiAgICAvLyB0aGlzLl9hZnRlck1pZGRsZXdhcmUubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fbnVtVG9Mb2FkID0gMDtcblxuICAgIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgICB0aGlzLl9xdWV1ZS5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBTdGFydHMgbG9hZGluZyB0aGUgcXVldWVkIHJlc291cmNlcy5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgY29tcGxldGVgIGV2ZW50LlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAvLyByZWdpc3RlciBjb21wbGV0ZSBjYWxsYmFjayBpZiB0aGV5IHBhc3Mgb25lXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBxdWV1ZSBoYXMgYWxyZWFkeSBzdGFydGVkIHdlIGFyZSBkb25lIGhlcmVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBub3RpZnkgb2Ygc3RhcnRcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBzdGFydCB0aGUgaW50ZXJuYWwgcXVldWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMuX2J1ZmZlcltpXSk7XG4gICAgfVxuXG4gICAgLy8gZW1wdHkgdGhlIGJ1ZmZlclxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIExvYWRzIGEgc2luZ2xlIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc291cmNlID0gZnVuY3Rpb24gKHJlc291cmNlLCBkZXF1ZXVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmVzb3VyY2UuX2RlcXVldWUgPSBkZXF1ZXVlO1xuXG4gICAgdGhpcy5fcnVuTWlkZGxld2FyZShyZXNvdXJjZSwgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXNvdXJjZS5vbigncHJvZ3Jlc3MnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAncHJvZ3Jlc3MnKSk7XG5cbiAgICAgICAgcmVzb3VyY2UubG9hZChzZWxmLl9ib3VuZE9uTG9hZCk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbmNlIGVhY2ggcmVzb3VyY2UgaGFzIGxvYWRlZC5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX29uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMsIHRoaXMucmVzb3VyY2VzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGVhY2ggdGltZSBhIHJlc291cmNlcyBpcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAZmlyZXMgZXJyb3JcbiAqIEBmaXJlcyBsb2FkXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICB0aGlzLnByb2dyZXNzICs9IHRoaXMuX3Byb2dyZXNzQ2h1bms7XG5cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgcmVzb3VyY2UpO1xuXG4gICAgLy8gcnVuIG1pZGRsZXdhcmUsIHRoaXMgKm11c3QqIGhhcHBlbiBiZWZvcmUgZGVxdWV1ZSBzbyBzdWItYXNzZXRzIGdldCBhZGRlZCBwcm9wZXJseVxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2FmdGVyTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvdXJjZS5lbWl0KCdhZnRlck1pZGRsZXdhcmUnLCByZXNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5fbnVtVG9Mb2FkLS07XG5cbiAgICAgICAgLy8gZG8gY29tcGxldGlvbiBjaGVja1xuICAgICAgICBpZiAodGhpcy5fbnVtVG9Mb2FkID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgdGhpcy5fb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzb3VyY2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCByZXNvdXJjZS5lcnJvciwgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkJywgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG5cblxuICAgIC8vIHJlbW92ZSB0aGlzIHJlc291cmNlIGZyb20gdGhlIGFzeW5jIHF1ZXVlXG4gICAgcmVzb3VyY2UuX2RlcXVldWUoKTtcbn07XG5cbi8qKlxuICogUnVuIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9uIGEgcmVzb3VyY2UuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fcnVuTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZm5zLCBjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGFzeW5jLmVhY2hTZXJpZXMoZm5zLCBmdW5jdGlvbiAoZm4sIG5leHQpIHtcbiAgICAgICAgZm4uY2FsbChzZWxmLCByZXNvdXJjZSwgbmV4dCk7XG4gICAgfSwgY2IuYmluZCh0aGlzLCByZXNvdXJjZSkpO1xufTtcblxuTG9hZGVyLkxPQURfVFlQRSA9IFJlc291cmNlLkxPQURfVFlQRTtcbkxvYWRlci5YSFJfUkVBRFlfU1RBVEUgPSBSZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEU7XG5Mb2FkZXIuWEhSX1JFU1BPTlNFX1RZUEUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRTtcbiIsInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgX3VybCA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIC8vIHRlc3RzIGlzIENPUlMgaXMgc3VwcG9ydGVkIGluIFhIUiwgaWYgbm90IHdlIG5lZWQgdG8gdXNlIFhEUlxuICAgIHVzZVhkciA9ICEhKHdpbmRvdy5YRG9tYWluUmVxdWVzdCAmJiAhKCd3aXRoQ3JlZGVudGlhbHMnIGluIChuZXcgWE1MSHR0cFJlcXVlc3QoKSkpKSxcbiAgICB0ZW1wQW5jaG9yID0gbnVsbDtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRlZCBieVxuICogYSBzaW5nbGUgVVJMLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIG5hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd8c3RyaW5nW119IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIGZvciBhdWRpby92aWRlbyBsb2FkcyB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7c3RyaW5nfGJvb2xlYW59IElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IERlZmF1bHQgaXMgdG8gZGV0ZXJtaW5lIGF1dG9tYXRpY2FsbHkuXG4gKiBAcGFyYW0gW29wdGlvbnMubG9hZFR5cGU9UmVzb3VyY2UuTE9BRF9UWVBFLlhIUl0ge1Jlc291cmNlLkxPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW29wdGlvbnMubWV0YWRhdGFdIHtvYmplY3R9IEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmUuXG4gKi9cbmZ1bmN0aW9uIFJlc291cmNlKG5hbWUsIHVybCwgb3B0aW9ucykge1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBuYW1lIGFuZCB1cmwgYXJlIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgYSByZXNvdXJjZS4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdXJsIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgdXJsIGlzIGEgZGF0YSB1cmwuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNEYXRhVXJsID0gdGhpcy51cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnl9XG4gICAgICovXG4gICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jcm9zc09yaWdpbiA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnYW5vbnltb3VzJyA6IG9wdGlvbnMuY3Jvc3NPcmlnaW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIG9mIGxvYWRpbmcgdG8gdXNlIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2UuTE9BRF9UWVBFfVxuICAgICAqL1xuICAgIHRoaXMubG9hZFR5cGUgPSBvcHRpb25zLmxvYWRUeXBlIHx8IHRoaXMuX2RldGVybWluZUxvYWRUeXBlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSB1c2VkIHRvIGxvYWQgdGhlIHJlc291cmNlIHZpYSBYSFIuIElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy54aHJUeXBlID0gb3B0aW9ucy54aHJUeXBlO1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgaW5mbyBmb3IgbWlkZGxld2FyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgd2hpbGUgbG9hZGluZyAoaWYgYW55KS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Vycm9yfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFhIUiBvYmplY3QgdGhhdCB3YXMgdXNlZCB0byBsb2FkIHRoaXMgcmVzb3VyY2UuIFRoaXMgaXMgb25seSBzZXRcbiAgICAgKiB3aGVuIGBsb2FkVHlwZWAgaXMgYFJlc291cmNlLkxPQURfVFlQRS5YSFJgLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7WE1MSHR0cFJlcXVlc3R9XG4gICAgICovXG4gICAgdGhpcy54aHIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBqc29uLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0pzb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgeG1sLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1htbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhbiBpbWFnZSB0YWcuIE9ubHkgdmFsaWQgYWZ0ZXIgdGhlIHJlc291cmNlXG4gICAgICogaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gYXVkaW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0F1ZGlvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGEgdmlkZW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1ZpZGVvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGRlcXVldWVgIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBhIHN0b3JhZ2UgcGxhY2UgZm9yIHRoZSBhc3luYyBxdWV1ZSBkZXF1ZXVlIG1ldGhvZFxuICAgICAqIHVzZWQgcHJpdmF0ZWx5IGJ5IHRoZSBsb2FkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2RlcXVldWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBjb21wbGV0ZWAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kQ29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkVycm9yYCBmdW5jdGlvbiBib3VuZCB0byB0aGlzIHJlc291cmNlJ3MgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25Qcm9ncmVzc2AgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyA9IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcblxuICAgIC8vIHhociBjYWxsYmFja3NcbiAgICB0aGlzLl9ib3VuZFhock9uRXJyb3IgPSB0aGlzLl94aHJPbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYaHJPbkFib3J0ID0gdGhpcy5feGhyT25BYm9ydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25Mb2FkID0gdGhpcy5feGhyT25Mb2FkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYZHJPblRpbWVvdXQgPSB0aGlzLl94ZHJPblRpbWVvdXQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcmVzb3VyY2UgYmVpbmdzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGVhY2ggdGltZSBwcm9ncmVzcyBvZiB0aGlzIHJlc291cmNlIGxvYWQgdXBkYXRlcy5cbiAgICAgKiBOb3QgYWxsIHJlc291cmNlcyB0eXBlcyBhbmQgbG9hZGVyIHN5c3RlbXMgY2FuIHN1cHBvcnQgdGhpcyBldmVudFxuICAgICAqIHNvIHNvbWV0aW1lcyBpdCBtYXkgbm90IGJlIGF2YWlsYWJsZS4gSWYgdGhlIHJlc291cmNlXG4gICAgICogaXMgYmVpbmcgbG9hZGVkIG9uIGEgbW9kZXJuIGJyb3dzZXIsIHVzaW5nIFhIUiwgYW5kIHRoZSByZW1vdGUgc2VydmVyXG4gICAgICogcHJvcGVybHkgc2V0cyBDb250ZW50LUxlbmd0aCBoZWFkZXJzLCB0aGVuIHRoaXMgd2lsbCBiZSBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcHJvZ3Jlc3NcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgdGhpcyByZXNvdXJjZSBoYXMgbG9hZGVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaXQgd2lsbFxuICAgICAqIGJlIGluIHRoZSBgZXJyb3JgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xufVxuXG5SZXNvdXJjZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVzb3VyY2U7XG5tb2R1bGUuZXhwb3J0cyA9IFJlc291cmNlO1xuXG4vKipcbiAqIE1hcmtzIHRoZSByZXNvdXJjZSBhcyBjb21wbGV0ZS5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgaW4gYSB3cmFwcGVyIG9yIHNvbWV0aGluZy4uLmdyb3NzLi4uLlxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICAgIGlmICh0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvcik7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIub25lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25wcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbmxvYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBLaWNrcyBvZmYgbG9hZGluZyBvZiB0aGlzIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBzdGFydFxuICogQHBhcmFtIFtjYWxsYmFja10ge2Z1bmN0aW9ufSBPcHRpb25hbCBjYWxsYmFjayB0byBjYWxsIG9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBpZiBhIGNhbGxiYWNrIGlzIHNldCwgbGlzdGVuIGZvciBjb21wbGV0ZSBldmVudFxuICAgIGlmIChjYikge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4gPT09IGZhbHNlIHx8IHR5cGVvZiB0aGlzLmNyb3NzT3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdGhpcy5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4odGhpcy51cmwpO1xuICAgIH1cblxuICAgIHN3aXRjaCh0aGlzLmxvYWRUeXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEltYWdlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5BVURJTzpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuVklERU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlhIUjpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh1c2VYZHIgJiYgdGhpcy5jcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYZHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYaHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gSW1hZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuc3JjID0gdGhpcy51cmw7XG5cbiAgICB0aGlzLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEhUTUxBdWRpb0VsZW1lbnQgb3IgSFRNTFZpZGVvRWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJyAmJiB0eXBlb2YgQXVkaW8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBBdWRpbygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgJyArIHR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBDb2Nvb25KUyBDYW52YXMrIHJ1bnRpbWUsIGxhY2tzIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zcmMgPSBBcnJheS5pc0FycmF5KHRoaXMudXJsKSA/IHRoaXMudXJsWzBdIDogdGhpcy51cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51cmwubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWydpcycgKyB0eXBlWzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKV0gPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuXG4gICAgdGhpcy5kYXRhLmxvYWQoKTtcbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gWE1MSHR0cFJlcXVlc3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGhyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIHNldCB0aGUgcmVxdWVzdCB0eXBlIGFuZCB1cmxcbiAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gbG9hZCBqc29uIGFzIHRleHQgYW5kIHBhcnNlIGl0IG91cnNlbHZlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHNvbWUgYnJvd3NlcnNcbiAgICAvLyAqY291Z2gqIHNhZmFyaSAqY291Z2gqIGNhbid0IGRlYWwgd2l0aCBpdC5cbiAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OIHx8IHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gdGhpcy54aHJUeXBlO1xuICAgIH1cblxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvciwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQsIGZhbHNlKTtcblxuICAgIHhoci5zZW5kKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhEb21haW5SZXF1ZXN0LiBUaGlzIGlzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHN1cHBvcnQgSUU5IChncm9zcykuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGRyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGRyID0gdGhpcy54aHIgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcblxuICAgIC8vIFhEb21haW5SZXF1ZXN0IGhhcyBhIGZldyBxdWlya3MuIE9jY2FzaW9uYWxseSBpdCB3aWxsIGFib3J0IHJlcXVlc3RzXG4gICAgLy8gQSB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBtYWtlIHN1cmUgQUxMIGNhbGxiYWNrcyBhcmUgc2V0IGV2ZW4gaWYgbm90IHVzZWRcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTc4Njk2Ni94ZG9tYWlucmVxdWVzdC1hYm9ydHMtcG9zdC1vbi1pZS05XG4gICAgeGRyLnRpbWVvdXQgPSA1MDAwO1xuXG4gICAgeGRyLm9uZXJyb3IgPSB0aGlzLl9ib3VuZFhock9uRXJyb3I7XG4gICAgeGRyLm9udGltZW91dCA9IHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0O1xuICAgIHhkci5vbnByb2dyZXNzID0gdGhpcy5fYm91bmRPblByb2dyZXNzO1xuICAgIHhkci5vbmxvYWQgPSB0aGlzLl9ib3VuZFhock9uTG9hZDtcblxuICAgIHhkci5vcGVuKCdHRVQnLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyAgTm90ZTogVGhlIHhkci5zZW5kKCkgY2FsbCBpcyB3cmFwcGVkIGluIGEgdGltZW91dCB0byBwcmV2ZW50IGFuIGlzc3VlIHdpdGggdGhlIGludGVyZmFjZSB3aGVyZSBzb21lIHJlcXVlc3RzIGFyZSBsb3N0XG4gICAgLy8gIGlmIG11bHRpcGxlIFhEb21haW5SZXF1ZXN0cyBhcmUgYmVpbmcgc2VudCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIC8vIFNvbWUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2lzc3Vlcy8xMjQ4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHhkci5zZW5kKCk7XG4gICAgfSwgMCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzb3VyY2UgdXNlZCBpbiBsb2FkaW5nIHZpYSBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB0eXBlIHtzdHJpbmd9IFRoZSBlbGVtZW50IHR5cGUgKHZpZGVvIG9yIGF1ZGlvKS5cbiAqIEBwYXJhbSB1cmwge3N0cmluZ30gVGhlIHNvdXJjZSBVUkwgdG8gbG9hZCBmcm9tLlxuICogQHBhcmFtIFttaW1lXSB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIG9mIHRoZSB2aWRlb1xuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9jcmVhdGVTb3VyY2UgPSBmdW5jdGlvbiAodHlwZSwgdXJsLCBtaW1lKSB7XG4gICAgaWYgKCFtaW1lKSB7XG4gICAgICAgIG1pbWUgPSB0eXBlICsgJy8nICsgdXJsLnN1YnN0cih1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSB1cmw7XG4gICAgc291cmNlLnR5cGUgPSBtaW1lO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBlcnJvcnMgb3V0LlxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBlcnJvciBldmVudCBmcm9tIHRoZSBlbGVtZW50IHRoYXQgZW1pdHMgaXQuXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX29uRXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBlbGVtZW50IHVzaW5nICcgKyBldmVudC50YXJnZXQubm9kZU5hbWUpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBwcm9ncmVzcyBldmVudCBmaXJlcyBmb3IgeGhyL3hkci5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vblByb2dyZXNzID0gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB0aGlzLCBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYW4gZXJyb3IgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEVycm9yRXZlbnR8RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgcmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgZmFpbGVkLiAnICtcbiAgICAgICAgJ1N0YXR1czogJyArIHRoaXMueGhyLnN0YXR1cyArICcsIHRleHQ6IFwiJyArIHRoaXMueGhyLnN0YXR1c1RleHQgKyAnXCInXG4gICAgKTtcblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGFib3J0IGV2ZW50IGZpcmVzIGZvciB4aHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEFib3J0RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB3YXMgYWJvcnRlZCBieSB0aGUgdXNlci4nKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIHRpbWVvdXQgZXZlbnQgZmlyZXMgZm9yIHhkci5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94ZHJPblRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB0aW1lZCBvdXQuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBkYXRhIHN1Y2Nlc3NmdWxseSBsb2FkcyBmcm9tIGFuIHhoci94ZHIgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0TG9hZEV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHhociA9IHRoaXMueGhyLFxuICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzICE9PSB1bmRlZmluZWQgPyB4aHIuc3RhdHVzIDogMjAwOyAvL1hEUiBoYXMgbm8gYC5zdGF0dXNgLCBhc3N1bWUgMjAwLlxuXG4gICAgLy8gc3RhdHVzIGNhbiBiZSAwIHdoZW4gdXNpbmcgdGhlIGZpbGU6Ly8gcHJvdG9jb2wsIGFsc28gY2hlY2sgaWYgYSByZXNwb25zZSB3YXMgZm91bmRcbiAgICBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDQgfHwgKHN0YXR1cyA9PT0gMCAmJiB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIC8vIGlmIHRleHQsIGp1c3QgcmV0dXJuIGl0XG4gICAgICAgIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYganNvbiwgcGFyc2UgaW50byBqc29uIG9iamVjdFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT04pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSnNvbiA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIGpzb246JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgeG1sLCBwYXJzZSBpbnRvIGFuIHhtbCBkb2N1bWVudCBvciBkaXYgZWxlbWVudFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkaXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNYbWwgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSBsb2FkZWQgeG1sOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyIHR5cGVzIGp1c3QgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdbJyArIHhoci5zdGF0dXMgKyAnXScgKyB4aHIuc3RhdHVzVGV4dCArICc6JyArIHhoci5yZXNwb25zZVVSTCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gcmVxVHlwZSh4aHIpIHtcbiAgICByZXR1cm4geGhyLnRvU3RyaW5nKCkucmVwbGFjZSgnb2JqZWN0ICcsICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGZvciB0aGlzIHJlc291cmNlIGJhc2VkIG9uIGlmIHRoZSB1cmxcbiAqIGZvciB0aGlzIHJlc291cmNlIGlzIGNyb3NzLW9yaWdpbi4gSWYgY3Jvc3NPcmlnaW4gd2FzIG1hbnVhbGx5IHNldCwgdGhpc1xuICogZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgdG8gdGVzdC5cbiAqIEBwYXJhbSBbbG9jYXRpb249d2luZG93LmxvY2F0aW9uXSB7b2JqZWN0fSBUaGUgbG9jYXRpb24gb2JqZWN0IHRvIHRlc3QgYWdhaW5zdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNyb3NzT3JpZ2luIHZhbHVlIHRvIHVzZSAob3IgZW1wdHkgc3RyaW5nIGZvciBub25lKS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVDcm9zc09yaWdpbiA9IGZ1bmN0aW9uICh1cmwsIGxvYykge1xuICAgIC8vIGRhdGE6IGFuZCBqYXZhc2NyaXB0OiB1cmxzIGFyZSBjb25zaWRlcmVkIHNhbWUtb3JpZ2luXG4gICAgaWYgKHVybC5pbmRleE9mKCdkYXRhOicpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGlzIHdpbmRvdy5sb2NhdGlvblxuICAgIGxvYyA9IGxvYyB8fCB3aW5kb3cubG9jYXRpb247XG5cbiAgICBpZiAoIXRlbXBBbmNob3IpIHtcbiAgICAgICAgdGVtcEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG5cbiAgICAvLyBsZXQgdGhlIGJyb3dzZXIgZGV0ZXJtaW5lIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSB1cmwgb2YgdGhpcyByZXNvdXJjZSBhbmQgdGhlblxuICAgIC8vIHBhcnNlIHdpdGggdGhlIG5vZGUgdXJsIGxpYiwgd2UgY2FuJ3QgdXNlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICAgIC8vIGJlY2F1c2UgdGhleSBkb24ndCB3b3JrIGluIElFOSA6KFxuICAgIHRlbXBBbmNob3IuaHJlZiA9IHVybDtcbiAgICB1cmwgPSBfdXJsLnBhcnNlKHRlbXBBbmNob3IuaHJlZik7XG5cbiAgICB2YXIgc2FtZVBvcnQgPSAoIXVybC5wb3J0ICYmIGxvYy5wb3J0ID09PSAnJykgfHwgKHVybC5wb3J0ID09PSBsb2MucG9ydCk7XG5cbiAgICAvLyBpZiBjcm9zcyBvcmlnaW5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9PSBsb2MuaG9zdG5hbWUgfHwgIXNhbWVQb3J0IHx8IHVybC5wcm90b2NvbCAhPT0gbG9jLnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiAnYW5vbnltb3VzJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlc3BvbnNlVHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZVxuICogcmVzb3VyY2UgYmVpbmcgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHJlc3BvbnNlVHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lWGhyVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX3hoclR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZUxvYWRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZXNvdXJjZS5fbG9hZFR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLkxPQURfVFlQRS5YSFI7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2dldEV4dGVuc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcy51cmwsXG4gICAgICAgIGV4dDtcblxuICAgIGlmICh0aGlzLmlzRGF0YVVybCkge1xuICAgICAgICB2YXIgc2xhc2hJbmRleCA9IHVybC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGV4dCA9IHVybC5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEsIHVybC5pbmRleE9mKCc7Jywgc2xhc2hJbmRleCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXJ5U3RhcnQgPSB1cmwuaW5kZXhPZignPycpO1xuICAgICAgICBpZiAocXVlcnlTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dDtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWltZSB0eXBlIG9mIGFuIFhIUiByZXF1ZXN0IGJhc2VkIG9uIHRoZSByZXNwb25zZVR5cGUgb2ZcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIHRvIHVzZS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRNaW1lRnJvbVhoclR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1iaW5hcnknO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vYmxvYic7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veG1sJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT046XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVDpcbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUOlxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcblxuICAgIH1cbn07XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxvYWRpbmcgYSByZXNvdXJjZSBjYW4gdXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IExPQURfVFlQRVxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5YSFIgLSBVc2VzIFhNTEh0dHBSZXF1ZXN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5JTUFHRSAtIFVzZXMgYW4gYEltYWdlYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLkFVRElPIC0gVXNlcyBhbiBgQXVkaW9gIG9iamVjdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuVklERU8gLSBVc2VzIGEgYFZpZGVvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlLkxPQURfVFlQRSA9IHtcbiAgICBYSFI6ICAgIDEsXG4gICAgSU1BR0U6ICAyLFxuICAgIEFVRElPOiAgMyxcbiAgICBWSURFTzogIDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVBRFlfU1RBVEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuVU5TRU5UIC0gb3BlbigpaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLk9QRU5FRCAtIHNlbmQoKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5IRUFERVJTX1JFQ0VJVkVEIC0gc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIGhlYWRlcnMgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5MT0FESU5HIC0gRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLkRPTkUgLSBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5SZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEUgPSB7XG4gICAgVU5TRU5UOiAwLFxuICAgIE9QRU5FRDogMSxcbiAgICBIRUFERVJTX1JFQ0VJVkVEOiAyLFxuICAgIExPQURJTkc6IDMsXG4gICAgRE9ORTogNFxufTtcblxuLyoqXG4gKiBUaGUgWEhSIHJlYWR5IHN0YXRlcywgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IFhIUl9SRVNQT05TRV9UWVBFXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVCAtIGRlZmF1bHRzIHRvIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVIgLSBBcnJheUJ1ZmZlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkJMT0IgLSBCbG9iXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQgLSBEb2N1bWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkpTT04gLSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5URVhUIC0gU3RyaW5nXG4gKi9cblJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFID0ge1xuICAgIERFRkFVTFQ6ICAgICd0ZXh0JyxcbiAgICBCVUZGRVI6ICAgICAnYXJyYXlidWZmZXInLFxuICAgIEJMT0I6ICAgICAgICdibG9iJyxcbiAgICBET0NVTUVOVDogICAnZG9jdW1lbnQnLFxuICAgIEpTT046ICAgICAgICdqc29uJyxcbiAgICBURVhUOiAgICAgICAndGV4dCdcbn07XG5cblJlc291cmNlLl9sb2FkVHlwZU1hcCA9IHtcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3BuZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZWcnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3dlYnAnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRVxufTtcblxuUmVzb3VyY2UuX3hoclR5cGVNYXAgPSB7XG4gICAgLy8geG1sXG4gICAgJ3hodG1sJzogICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bWwnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3htbCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RteCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RzeCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3N2Zyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG5cbiAgICAvLyBpbWFnZXNcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2JtcCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RnYSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcblxuICAgIC8vIGpzb25cbiAgICAnanNvbic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OLFxuXG4gICAgLy8gdGV4dFxuICAgICd0ZXh0JzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQsXG4gICAgJ3R4dCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsb2FkIHR5cGUgdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGV4dG5hbWUge3N0cmluZ30gVGhlIGV4dGVuc2lvbiB0byBzZXQgdGhlIHR5cGUgZm9yLCBlLmcuIFwicG5nXCIgb3IgXCJmbnRcIlxuICogQHBhcmFtIGxvYWRUeXBlIHtSZXNvdXJjZS5MT0FEX1RZUEV9IFRoZSBsb2FkIHR5cGUgdG8gc2V0IGl0IHRvLlxuICovXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25Mb2FkVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCBsb2FkVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5fbG9hZFR5cGVNYXAsIGV4dG5hbWUsIGxvYWRUeXBlKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSB4aHJUeXBlIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHhociB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCB4aHJUeXBlKSB7XG4gICAgc2V0RXh0TWFwKFJlc291cmNlLl94aHJUeXBlTWFwLCBleHRuYW1lLCB4aHJUeXBlKTtcbn07XG5cbmZ1bmN0aW9uIHNldEV4dE1hcChtYXAsIGV4dG5hbWUsIHZhbCkge1xuICAgIGlmIChleHRuYW1lICYmIGV4dG5hbWUuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgIGV4dG5hbWUgPSBleHRuYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dG5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hcFtleHRuYW1lXSA9IHZhbDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICAgIF9rZXlTdHI6IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIixcblxuICAgIGVuY29kZUJpbmFyeTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBcIlwiO1xuICAgICAgICB2YXIgYnl0ZWJ1ZmZlcjtcbiAgICAgICAgdmFyIGVuY29kZWRDaGFySW5kZXhlcyA9IG5ldyBBcnJheSg0KTtcbiAgICAgICAgdmFyIGlueCA9IDA7XG4gICAgICAgIHZhciBqbnggPSAwO1xuICAgICAgICB2YXIgcGFkZGluZ0J5dGVzID0gMDtcblxuICAgICAgICB3aGlsZSAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBGaWxsIGJ5dGUgYnVmZmVyIGFycmF5XG4gICAgICAgICAgICBieXRlYnVmZmVyID0gbmV3IEFycmF5KDMpO1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBieXRlYnVmZmVyLmxlbmd0aDsgam54KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGF3YXkgaGlnaC1vcmRlciBieXRlLCBhcyBkb2N1bWVudGVkIGF0OlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdCNIYW5kbGluZ19iaW5hcnlfZGF0YVxuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSBpbnB1dC5jaGFyQ29kZUF0KGlueCsrKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGVhY2ggZW5jb2RlZCBjaGFyYWN0ZXIsIDYgYml0cyBhdCBhIHRpbWVcbiAgICAgICAgICAgIC8vIGluZGV4IDE6IGZpcnN0IDYgYml0c1xuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzBdID0gYnl0ZWJ1ZmZlclswXSA+PiAyO1xuICAgICAgICAgICAgLy8gaW5kZXggMjogc2Vjb25kIDYgYml0cyAoMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAxICsgNCBtb3N0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBieXRlIDIpXG4gICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMV0gPSAoKGJ5dGVidWZmZXJbMF0gJiAweDMpIDw8IDQpIHwgKGJ5dGVidWZmZXJbMV0gPj4gNCk7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiB0aGlyZCA2IGJpdHMgKDQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMiArIDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gKChieXRlYnVmZmVyWzFdICYgMHgwZikgPDwgMikgfCAoYnl0ZWJ1ZmZlclsyXSA+PiA2KTtcbiAgICAgICAgICAgIC8vIGluZGV4IDM6IGZvcnRoIDYgYml0cyAoNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gYnl0ZWJ1ZmZlclsyXSAmIDB4M2Y7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHBhZGRpbmcgaGFwcGVuZWQsIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgIHBhZGRpbmdCeXRlcyA9IGlueCAtIChpbnB1dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFkZGluZ0J5dGVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCAyIGNoYXJhY3RlcnMgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMl0gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBsYXN0IGNoYXJhY3RlciB0byBwYWRkaW5nIGNoYXJcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vIHBhZGRpbmcgLSBwcm9jZWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vdyB3ZSB3aWxsIGdyYWIgZWFjaCBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgb3V0IG9mIG91ciBrZXlzdHJpbmdcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIG91ciBpbmRleCBhcnJheSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQgc3RyaW5nXG4gICAgICAgICAgICBmb3IgKGpueCA9IDA7IGpueCA8IGVuY29kZWRDaGFySW5kZXhlcy5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHRoaXMuX2tleVN0ci5jaGFyQXQoZW5jb2RlZENoYXJJbmRleGVzW2pueF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9Mb2FkZXInKTtcblxubW9kdWxlLmV4cG9ydHMuUmVzb3VyY2UgPSByZXF1aXJlKCcuL1Jlc291cmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzLm1pZGRsZXdhcmUgPSB7XG4gICAgY2FjaGluZzoge1xuICAgICAgICBtZW1vcnk6IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnknKVxuICAgIH0sXG4gICAgcGFyc2luZzoge1xuICAgICAgICBibG9iOiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL3BhcnNpbmcvYmxvYicpXG4gICAgfVxufTtcbiIsIi8vIGEgc2ltcGxlIGluLW1lbW9yeSBjYWNoZSBmb3IgcmVzb3VyY2VzXG52YXIgY2FjaGUgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICAvLyBpZiBjYWNoZWQsIHRoZW4gc2V0IGRhdGEgYW5kIGNvbXBsZXRlIHRoZSByZXNvdXJjZVxuICAgICAgICBpZiAoY2FjaGVbcmVzb3VyY2UudXJsXSkge1xuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IGNhY2hlW3Jlc291cmNlLnVybF07XG4gICAgICAgICAgICByZXNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIG5vdCBjYWNoZWQsIHdhaXQgZm9yIGNvbXBsZXRlIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb3VyY2Uub25jZSgnY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICBjYWNoZVt0aGlzLnVybF0gPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgnLi4vLi4vUmVzb3VyY2UnKSxcbiAgICBiNjQgPSByZXF1aXJlKCcuLi8uLi9iNjQnKTtcblxud2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblxuLy8gYSBtaWRkbGV3YXJlIGZvciB0cmFuc2Zvcm1pbmcgWEhSIGxvYWRlZCBCbG9icyBpbnRvIG1vcmUgdXNlZnVsIG9iamVjdHNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIHdhcyBhbiBYSFIgbG9hZCBvZiBhIGJsb2JcbiAgICAgICAgaWYgKHJlc291cmNlLnhociAmJiByZXNvdXJjZS54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBibG9iIHN1cHBvcnQgd2UgcHJvYmFibHkgZ290IGEgYmluYXJ5IHN0cmluZyBiYWNrXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5CbG9iIHx8IHR5cGVvZiByZXNvdXJjZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVzb3VyY2UueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaW1hZ2UsIGNvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgaW50byBhIGRhdGEgdXJsXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgdHlwZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5zcmMgPSAnZGF0YTonICsgdHlwZSArICc7YmFzZTY0LCcgKyBiNjQuZW5jb2RlQmluYXJ5KHJlc291cmNlLnhoci5yZXNwb25zZVRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGltYWdlIGxvYWRzIGFuZCB0aGVuIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5vbmxvYWQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY29udGVudCB0eXBlIHNheXMgdGhpcyBpcyBhbiBpbWFnZSwgdGhlbiB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBibG9iIGludG8gYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvdXJjZS5kYXRhLnR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlc291cmNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuYmxvYiA9IHJlc291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gc3JjO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuaXNJbWFnZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBubyBsb25nZXIgdXNlZCBibG9iIGFmdGVyIHRoZSBpbWFnZSBsb2Fkc1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJwaXhpLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMC4xMC1kZXZcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlBpeGkuanMgaXMgYSBmYXN0IGxpZ2h0d2VpZ2h0IDJEIGxpYnJhcnkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGRldmljZXMuXCIsXG4gIFwiYXV0aG9yXCI6IFwiTWF0IEdyb3Zlc1wiLFxuICBcImNvbnRyaWJ1dG9yc1wiOiBbXG4gICAgXCJDaGFkIEVuZ2xlciA8Y2hhZEBwYW50aGVyZGV2LmNvbT5cIixcbiAgICBcIlJpY2hhcmQgRGF2ZXkgPHJkYXZleUBnbWFpbC5jb20+XCJcbiAgXSxcbiAgXCJtYWluXCI6IFwiLi9zcmMvaW5kZXguanNcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHA6Ly9nb29kYm95ZGlnaXRhbC5jb20vXCIsXG4gIFwiYnVnc1wiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXNcIixcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiZ3VscCAmJiBndWxwIHdhdGNoXCIsXG4gICAgXCJ0ZXN0XCI6IFwiZ3VscCAmJiB0ZXN0ZW0gY2lcIixcbiAgICBcImJ1aWxkXCI6IFwiZ3VscFwiLFxuICAgIFwiZG9jc1wiOiBcImpzZG9jIC1jIC4vZ3VscC91dGlsL2pzZG9jLmNvbmYuanNvbiAtUiBSRUFETUUubWRcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpbi9cIixcbiAgICBcInNyYy9cIixcbiAgICBcIkNPTlRSSUJVVElORy5tZFwiLFxuICAgIFwiTElDRU5TRVwiLFxuICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgXCJSRUFETUUubWRcIlxuICBdLFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhc3luY1wiOiBcIl4xLjUuMFwiLFxuICAgIFwiYnJmc1wiOiBcIl4xLjQuMVwiLFxuICAgIFwiZWFyY3V0XCI6IFwiXjIuMC43XCIsXG4gICAgXCJldmVudGVtaXR0ZXIzXCI6IFwiXjEuMS4xXCIsXG4gICAgXCJnbC1tYXRyaXhcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL3RvamkvZ2wtbWF0cml4LmdpdFwiLFxuICAgIFwib2JqZWN0LWFzc2lnblwiOiBcIl40LjAuMVwiLFxuICAgIFwicGl4aS1nbC1jb3JlXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9Hb29kQm95RGlnaXRhbC9waXhpLWdsLWNvcmUuZ2l0XCIsXG4gICAgXCJyZXNvdXJjZS1sb2FkZXJcIjogXCJeMS42LjRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjExLjEuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4zLjIuMFwiLFxuICAgIFwiZGVsXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOS4wXCIsXG4gICAgXCJndWxwLWNhY2hlZFwiOiBcIl4xLjEuMFwiLFxuICAgIFwiZ3VscC1jb25jYXRcIjogXCJeMi42LjBcIixcbiAgICBcImd1bHAtZGVidWdcIjogXCJeMi4xLjBcIixcbiAgICBcImd1bHAtaGVhZGVyXCI6IFwiXjEuNy4xXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjExLjJcIixcbiAgICBcImd1bHAtbWlycm9yXCI6IFwiXjAuNC4wXCIsXG4gICAgXCJndWxwLXBsdW1iZXJcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtcmVuYW1lXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJndWxwLXNvdXJjZW1hcHNcIjogXCJeMS41LjJcIixcbiAgICBcImd1bHAtdWdsaWZ5XCI6IFwiXjEuNC4xXCIsXG4gICAgXCJndWxwLXV0aWxcIjogXCJeMy4wLjZcIixcbiAgICBcImphZ3VhcmpzLWpzZG9jXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZHNoaW1qcy9qYWd1YXJqcy1qc2RvYy5naXRcIixcbiAgICBcImpzZG9jXCI6IFwiXjMuMy4yXCIsXG4gICAgXCJqc2hpbnQtc3VtbWFyeVwiOiBcIl4wLjQuMFwiLFxuICAgIFwibWluaW1pc3RcIjogXCJeMS4yLjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMy4yXCIsXG4gICAgXCJyZXF1aXJlLWRpclwiOiBcIl4wLjMuMFwiLFxuICAgIFwicnVuLXNlcXVlbmNlXCI6IFwiXjEuMS4yXCIsXG4gICAgXCJ0ZXN0ZW1cIjogXCJeMC45LjRcIixcbiAgICBcInZpbnlsLWJ1ZmZlclwiOiBcIl4xLjAuMFwiLFxuICAgIFwidmlueWwtc291cmNlLXN0cmVhbVwiOiBcIl4xLjEuMFwiLFxuICAgIFwid2F0Y2hpZnlcIjogXCJeMy40LjBcIlxuICB9LFxuICBcImJyb3dzZXJpZnlcIjoge1xuICAgIFwidHJhbnNmb3JtXCI6IFtcbiAgICAgIFwiYnJmc1wiXG4gICAgXVxuICB9XG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLy8gYWRkIHNvbWUgZXh0cmEgdmFyaWFibGVzIHRvIHRoZSBjb250YWluZXIuLlxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpXG4pO1xuXG5cbi8qKlxuICogVGhlIEFjY2Vzc2liaWxpdHkgbWFuYWdlciByZWFjcmVhdGVzIHRoZSBhYmlsaXR5IHRvIHRhYiBhbmQgYW5kIGhhdmUgY29udGVudCByZWFkIGJ5IHNjcmVlbiByZWFkZXJzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGFzIGl0IGNhbiBwb3NzaWJseSBoZWxwIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyBhY2Nlc3MgcGl4aSBjb250ZW50LlxuICogTXVjaCBsaWtlIGludGVyYWN0aW9uIGFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBtYWRlIGFjY2Vzc2libGUuIFRoaXMgbWFuYWdlciB3aWxsIG1hcCB0aGUgZXZlbnRzIGFzIGlmIHRoZSBtb3VzZSB3YXMgYmVpbmcgdXNlZCwgbWluaW1pemluZyB0aGUgZWZmZXJvdCByZXF1aXJlZCB0byBpbXBsZW1lbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqL1xuZnVuY3Rpb24gQWNjZXNzaWJpbGl0eU1hbmFnZXIocmVuZGVyZXIpXG57XG5cdC8vIGZpcnN0IHdlIGNyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFxuICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUubGVmdCA9IDA7XG4gICAvL1xuICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuICAgXHRcbiAgIFx0LyoqXG4gICBcdCAqIFRoaXMgaXMgdGhlIGRvbSBlbGVtZW50IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gICBcdHRoaXMuZGl2ID0gZGl2O1xuXG4gICBcdC8qKlxuICAgXHQgKiBBIHNpbXBsZSBwb29sIGZvciBzdG9yaW5nIGRpdnMuXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7QXJyYXl9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuIFx0dGhpcy5wb29sID0gW107XG5cbiBcdC8qKlxuIFx0ICogVGhpcyBpcyBhIHRpY2sgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHJlbmRlcmVkLlxuIFx0ICogXG4gXHQgKiBAdHlwZSB7TnVtYmVyfVxuIFx0ICogQHByaXZhdGVcbiBcdCAqL1xuICAgXHR0aGlzLnJlbmRlcklkID0gMDtcblxuICAgXHQvKipcbiAgIFx0ICogU2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB2aXN1YWxseSBzaG93IHRoZSBkaXZzXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgIFx0ICovXG4gICBcdHRoaXMuZGVidWcgPSBmYWxzZTtcblxuICBcdC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGFjY2Vzc2liaWxpdHkgbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgIFx0LyoqXG4gICAgICogVGhlIGFycmF5IG9mIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzaWJsZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHByZSBiaW5kIHRoZSBmdW5jdGlvbnMuLlxuICAgICAqL1xuICAgXHR0aGlzLl9vbktleURvd24gPSB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKTtcbiAgIFx0dGhpcy5fb25Nb3VzZU1vdmUgPSB0aGlzLl9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogc3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFuYWdlci4gSWYgdGhlcmUgYXJlIG5vIGFjY2Vzc2libGUgb2JqZWN0cyBvciB0aGUgbW91c2UgaXMgbW92aW5nIHRoZSB3aWxsIGJlIGZhbHNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cbiAgIFx0Ly8gbGV0IGxpc3RlbiBmb3IgdGFiLi4gb25jZSBwcmVzc2VkIHdlIGNhbiBmaXJlIHVwIGFuZCBzaG93IHRoZSBhY2Nlc3NpYmlsaXR5IGxheWVyXG4gICBcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG59XG5cblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xuXG4vKipcbiAqIEFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBzaG93bi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgcHJlc2VzIHRoZSB0YWIga2V5XG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHRydWUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub24oJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cblx0dGhpcy5yZW5kZXJlci52aWV3LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5kaXYpO1x0XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIGhpZGRlbi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgbW92ZXMgdGhlIG1vdXNlXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYoIXRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9mZigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlKTtcblxuXHR0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcblxufTtcblxuLyoqXG4gKiBUaGlzIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aWxsIHJ1biB0aHJvdWdodCBoZSBzY2VuZSBncmFwaCBhbmQgYWRkIGFueSBuZXcgYWNjZXNzaWJsZSBvYmplY3RzIHRvIHRoZSBET00gbGF5ZXIuXG4gKiBAcGFyYW0gZWxlbWVudCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgRGlzcGxheU9iamVjdCB0byBjaGVjay5cbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG5cdGlmKCFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZihkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGUgJiYgZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcblx0e1xuXHRcdGlmKCFkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlKVxuXHRcdHtcblx0XHRcdHRoaXMuYWRkQ2hpbGQoZGlzcGxheU9iamVjdCk7XG5cdFx0fVxuXHQgICBcdFxuXHQgICBcdGRpc3BsYXlPYmplY3QucmVuZGVySWQgPSB0aGlzLnJlbmRlcklkO1xuXHR9XG5cblx0dmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcblxuXHRmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcblx0XHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKGNoaWxkcmVuW2ldKTtcblx0fVxufTtcblxuXG4vKipcbiAqIEJlZm9yZSBlYWNoIHJlbmRlciB0aGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGRpdnMgYXJlIG1hcHBlZCBjb3JyZWN0bHkgdG8gdGhlaXIgRGlzcGxheU9iamVjdHNcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpXG57XG5cblx0Ly8gdXBkYXRlIGNoaWxkcmVuLi4uXG5cdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHModGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkKTtcblxuXHR2YXIgcmVjdCA9IHRoaXMucmVuZGVyZXIudmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0dmFyIHN4ID0gcmVjdC53aWR0aCAgLyB0aGlzLnJlbmRlcmVyLndpZHRoO1xuXHR2YXIgc3kgPSByZWN0LmhlaWdodCAvIHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuXG5cdHZhciBkaXYgPSB0aGlzLmRpdjtcblxuXHRkaXYuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICdweCc7XG5cdGRpdi5zdHlsZS50b3AgPSByZWN0LnRvcCArICdweCc7XG5cdGRpdi5zdHlsZS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggKyAncHgnO1xuXHRkaXYuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgKyAncHgnO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuXHRcdGlmKGNoaWxkLnJlbmRlcklkICE9PSB0aGlzLnJlbmRlcklkKVxuXHRcdHtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaSwgMSk7XG5cdFx0XHR0aGlzLmRpdi5yZW1vdmVDaGlsZCggY2hpbGQuX2FjY2Vzc2libGVEaXYgKTtcblx0XHRcdHRoaXMucG9vbC5wdXNoKGNoaWxkLl9hY2Nlc3NpYmxlRGl2KTtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlRGl2ID0gbnVsbDtcblxuXHRcdFx0aS0tO1xuXG5cdFx0XHRpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBtYXAgZGl2IHRvIGRpc3BsYXkuLlxuXHRcdFx0ZGl2ID0gY2hpbGQuX2FjY2Vzc2libGVEaXY7XG5cdFx0XHR2YXIgaGl0QXJlYSA9IGNoaWxkLmhpdEFyZWE7XG5cdFx0XHR2YXIgd3QgPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuXHRcdFx0aWYoY2hpbGQuaGl0QXJlYSlcblx0XHRcdHtcblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoKHd0LnR4ICsgKGhpdEFyZWEueCAqIHd0LmEpKSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKCh3dC50eSArIChoaXRBcmVhLnkgKiB3dC5kKSkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHd0LmEgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogd3QuZCAqIHN5KSArICdweCc7XG5cdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0aGl0QXJlYSA9IGNoaWxkLmdldEJvdW5kcygpO1xuXG5cdFx0XHRcdHRoaXMuY2FwSGl0QXJlYShoaXRBcmVhKTtcblxuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9IChoaXRBcmVhLnggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gIChoaXRBcmVhLnkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiBzeSkgKyAncHgnO1xuXHRcdFx0fVx0XHRcblx0XHR9XG5cdH1cblxuXHQvLyBpbmNyZW1lbnQgdGhlIHJlbmRlciBpZC4uXG5cdHRoaXMucmVuZGVySWQrKztcbn07XG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYXBIaXRBcmVhID0gZnVuY3Rpb24gKGhpdEFyZWEpXG57XG4gICAgaWYgKGhpdEFyZWEueCA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoICs9IGhpdEFyZWEueDtcbiAgICAgICAgaGl0QXJlYS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaGl0QXJlYS55IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ICs9IGhpdEFyZWEueTtcbiAgICAgICAgaGl0QXJlYS55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueCArIGhpdEFyZWEud2lkdGggPiB0aGlzLnJlbmRlcmVyLndpZHRoIClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoIC0gaGl0QXJlYS54O1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS55ICsgaGl0QXJlYS5oZWlnaHQgPiB0aGlzLnJlbmRlcmVyLmhlaWdodCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0IC0gaGl0QXJlYS55O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBBZGRzIGEgRGlzcGxheU9iamVjdCB0byB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuLy9cdHRoaXMuYWN0aXZhdGUoKTtcblx0XG5cdHZhciBkaXYgPSB0aGlzLnBvb2wucG9wKCk7XG5cblx0aWYoIWRpdilcblx0e1xuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBcblxuXHQgICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGVidWcgPyAncmdiYSgyNTUsMCwwLDAuNSknIDogJ3RyYW5zcGFyZW50Jztcblx0ICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdCAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcblx0ICAgIGRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdub25lJztcblxuXHQgICAgXG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX29uRm9jdXNPdXQuYmluZCh0aGlzKSk7XG5cdH1cblx0ICAgXHRcblxuXG5cblx0ZGl2LnRpdGxlID0gZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlVGl0bGUgfHwgJ2Rpc3BsYXlPYmplY3QgJyArIHRoaXMudGFiSW5kZXg7XG5cblx0Ly9cblx0XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUgPSB0cnVlO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ID0gZGl2O1xuXHRkaXYuZGlzcGxheU9iamVjdCA9IGRpc3BsYXlPYmplY3Q7XG5cblxuXHR0aGlzLmNoaWxkcmVuLnB1c2goZGlzcGxheU9iamVjdCk7XG5cdHRoaXMuZGl2LmFwcGVuZENoaWxkKCBkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ICk7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYudGFiSW5kZXggPSBkaXNwbGF5T2JqZWN0LnRhYkluZGV4O1xufTtcblxuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBidXR0b24gcHJlc3MgdG8gcGl4aSdzIEludGVyYWN0aW9uTWFuYWdlciAoY2xpY2spXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnY2xpY2snLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3ZlcilcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1cyA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3V0KVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzT3V0ID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uS2V5RG93biA9IGZ1bmN0aW9uKGUpXG57XG5cdGlmKGUua2V5Q29kZSAhPT0gOSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuYWN0aXZhdGUoKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmUgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZGVhY3RpdmF0ZSgpO1xufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgXG57XG5cdHRoaXMuZGl2ID0gbnVsbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblx0XHR0aGlzLmNoaWxkcmVuW2ldLmRpdiA9IG51bGw7XG5cdH1cblxuXHRcblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuXHRcdFxuXHR0aGlzLnBvb2wgPSBudWxsO1xuXHR0aGlzLmNoaWxkcmVuID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5cbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYWNjZXNzaWJsZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmFjY2Vzc2liaWxpdHkuYWNjZXNzaWJsZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgYWNjZXNzaWJsZVRhcmdldCA9IHtcbiAgICBcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGVUaXRsZTpudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICB0YWJJbmRleDowLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZUFjdGl2ZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVEaXY6ZmFsc2VcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBhY2Nlc3NpYmxlVGFyZ2V0O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgYWNjZXNzaWJpbGl0eSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYWNjZXNzaWJsZVRhcmdldDogICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpLFxuICAgIEFjY2Vzc2liaWxpdHlNYW5hZ2VyOiByZXF1aXJlKCcuL0FjY2Vzc2liaWxpdHlNYW5hZ2VyJylcbn07XG4iLCIvKipcbiAqIENvbnN0YW50IHZhbHVlcyB1c2VkIGluIHBpeGlcbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG52YXIgQ09OU1QgPSB7XG4gICAgLyoqXG4gICAgICogU3RyaW5nIG9mIHRoZSBjdXJyZW50IFBJWEkgdmVyc2lvblxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBWRVJTSU9OXG4gICAgICovXG4gICAgVkVSU0lPTjogcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQSV8yIC0gVHdvIFBpXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFBJXzI6IE1hdGguUEkgKiAyLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJBRF9UT19ERUcgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyByYWRpYW5zIHRvIGRlZ3JlZXNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUkFEX1RPX0RFRzogMTgwIC8gTWF0aC5QSSxcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBERUdfVE9fUkFEIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgZGVncmVlcyB0byByYWRpYW5zXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIERFR19UT19SQUQ6IE1hdGguUEkgLyAxODAsXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgZnJhbWVzIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gVEFSR0VUX0ZQTVM9MC4wNlxuICAgICAqL1xuICAgIFRBUkdFVF9GUE1TOiAwLjA2LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgdG8gaWRlbnRpZnkgdGhlIFJlbmRlcmVyIFR5cGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFJFTkRFUkVSX1RZUEVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuV0VCR0xcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5DQU5WQVNcbiAgICAgKi9cbiAgICBSRU5ERVJFUl9UWVBFOiB7XG4gICAgICAgIFVOS05PV046ICAgIDAsXG4gICAgICAgIFdFQkdMOiAgICAgIDEsXG4gICAgICAgIENBTlZBUzogICAgIDJcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyBibGVuZCBtb2RlcyBzdXBwb3J0ZWQgYnkgUElYSS4gSU1QT1JUQU5UIC0gVGhlIFdlYkdMIHJlbmRlcmVyIG9ubHkgc3VwcG9ydHNcbiAgICAgKiB0aGUgTk9STUFMLCBBREQsIE1VTFRJUExZIGFuZCBTQ1JFRU4gYmxlbmQgbW9kZXMuIEFueXRoaW5nIGVsc2Ugd2lsbCBzaWxlbnRseSBhY3QgbGlrZVxuICAgICAqIE5PUk1BTC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gQkxFTkRfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkFERFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5NVUxUSVBMWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQ1JFRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuT1ZFUkxBWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5EQVJLRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTElHSFRFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9ET0RHRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9CVVJOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhBUkRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU09GVF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5ESUZGRVJFTkNFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkVYQ0xVU0lPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IVUVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0FUVVJBVElPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MVU1JTk9TSVRZXG4gICAgICovXG4gICAgQkxFTkRfTU9ERVM6IHtcbiAgICAgICAgTk9STUFMOiAgICAgICAgIDAsXG4gICAgICAgIEFERDogICAgICAgICAgICAxLFxuICAgICAgICBNVUxUSVBMWTogICAgICAgMixcbiAgICAgICAgU0NSRUVOOiAgICAgICAgIDMsXG4gICAgICAgIE9WRVJMQVk6ICAgICAgICA0LFxuICAgICAgICBEQVJLRU46ICAgICAgICAgNSxcbiAgICAgICAgTElHSFRFTjogICAgICAgIDYsXG4gICAgICAgIENPTE9SX0RPREdFOiAgICA3LFxuICAgICAgICBDT0xPUl9CVVJOOiAgICAgOCxcbiAgICAgICAgSEFSRF9MSUdIVDogICAgIDksXG4gICAgICAgIFNPRlRfTElHSFQ6ICAgICAxMCxcbiAgICAgICAgRElGRkVSRU5DRTogICAgIDExLFxuICAgICAgICBFWENMVVNJT046ICAgICAgMTIsXG4gICAgICAgIEhVRTogICAgICAgICAgICAxMyxcbiAgICAgICAgU0FUVVJBVElPTjogICAgIDE0LFxuICAgICAgICBDT0xPUjogICAgICAgICAgMTUsXG4gICAgICAgIExVTUlOT1NJVFk6ICAgICAxNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIHdlYmdsIGRyYXcgbW9kZXMuIFRoZXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggR0wgZHJhd01vZGUgdG8gdXNlXG4gICAgICogdW5kZXIgY2VydGFpbiBzaXR1YXRpb25zIGFuZCByZW5kZXJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5QT0lOVFNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfTE9PUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX0ZBTlxuICAgICAqL1xuICAgIERSQVdfTU9ERVM6IHtcbiAgICAgICAgUE9JTlRTOiAgICAgICAgIDAsXG4gICAgICAgIExJTkVTOiAgICAgICAgICAxLFxuICAgICAgICBMSU5FX0xPT1A6ICAgICAgMixcbiAgICAgICAgTElORV9TVFJJUDogICAgIDMsXG4gICAgICAgIFRSSUFOR0xFUzogICAgICA0LFxuICAgICAgICBUUklBTkdMRV9TVFJJUDogNSxcbiAgICAgICAgVFJJQU5HTEVfRkFOOiAgIDZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBwaXhpLlxuICAgICAqXG4gICAgICogVGhlIERFRkFVTFQgc2NhbGUgbW9kZSBhZmZlY3RzIHRoZSBkZWZhdWx0IHNjYWxpbmcgbW9kZSBvZiBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAgKiBJdCBjYW4gYmUgcmUtYXNzaWduZWQgdG8gZWl0aGVyIExJTkVBUiBvciBORUFSRVNULCBkZXBlbmRpbmcgdXBvbiBzdWl0YWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0NBTEVfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuREVGQVVMVD1MSU5FQVJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTElORUFSIFNtb290aCBzY2FsaW5nXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLk5FQVJFU1QgUGl4ZWxhdGluZyBzY2FsaW5nXG4gICAgICovXG4gICAgU0NBTEVfTU9ERVM6IHtcbiAgICAgICAgREVGQVVMVDogICAgMCxcbiAgICAgICAgTElORUFSOiAgICAgMCxcbiAgICAgICAgTkVBUkVTVDogICAgMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZml4IHRoYXQgZGVub3RlcyBhIFVSTCBpcyBmb3IgYSByZXRpbmEgYXNzZXRcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gUkVUSU5BX1BSRUZJWFxuICAgICAqL1xuICAgIC8vZXhhbXBsZTogJ0AyeCcsXG4gICAgUkVUSU5BX1BSRUZJWDogL0AoLispeC8sXG5cbiAgICBSRVNPTFVUSU9OOjEsXG5cbiAgICBGSUxURVJfUkVTT0xVVElPTjoxLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgcmVuZGVyIG9wdGlvbnMgaWYgbm9uZSBhcmUgc3VwcGxpZWQgdG8ge0BsaW5rIFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKiBvciB7QGxpbmsgUElYSS5DYW52YXNSZW5kZXJlcn0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERFRkFVTFRfUkVOREVSX09QVElPTlNcbiAgICAgKiBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnZpZXc9bnVsbFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy50cmFuc3BhcmVudD1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hbnRpYWxpYXM9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuZm9yY2VGWEFBPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnJlc29sdXRpb249MVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmF1dG9SZXNpemU9ZmFsc2VcbiAgICAgKi9cbiAgICBERUZBVUxUX1JFTkRFUl9PUFRJT05TOiB7XG4gICAgICAgIHZpZXc6IG51bGwsXG4gICAgICAgIHJlc29sdXRpb246IDEsXG4gICAgICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgICAgIGZvcmNlRlhBQTogZmFsc2UsXG4gICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgIGNsZWFyQmVmb3JlUmVuZGVyOiB0cnVlLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgICAgICByb3VuZFBpeGVsczogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnRzIHRoYXQgaWRlbnRpZnkgc2hhcGVzLCBtYWlubHkgdG8gcHJldmVudCBgaW5zdGFuY2VvZmAgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFU1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUE9MWT0wXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SRUNUPTFcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkNJUkM9MlxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuRUxJUD0zXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SUkVDPTRcbiAgICAgKi9cbiAgICBTSEFQRVM6IHtcbiAgICAgICAgUE9MWTogMCxcbiAgICAgICAgUkVDVDogMSxcbiAgICAgICAgQ0lSQzogMixcbiAgICAgICAgRUxJUDogMyxcbiAgICAgICAgUlJFQzogNFxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBtYXliZSBjaGFuZ2UgdG8gU1BSSVRFLkJBVENIX1NJWkU6IDIwMDBcbiAgICAvLyBUT0RPOiBtYXliZSBhZGQgUEFSVElDTEUuQkFUQ0hfU0laRTogMTUwMDBcbiAgICBTUFJJVEVfQkFUQ0hfU0laRTogMjAwMCAvL25pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSBhbmQgZGVza3RvcCBtYWNoaW5lc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDT05TVDtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gcmVxdWlyZSgnLi9EaXNwbGF5T2JqZWN0JyksXG4gICAgUmVuZGVyVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgQ29udGFpbmVyIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0cy5cbiAqIEl0IGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBkaXNwbGF5IG9iamVjdHMgdGhhdCBhY3QgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIG9iamVjdHMuXG4gKlxuICpgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiBgYGBcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5EaXNwbGF5T2JqZWN0XG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDb250YWluZXIoKVxue1xuICAgIERpc3BsYXlPYmplY3QuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdFtdfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERpc3BsYXlPYmplY3QucHJvdG90eXBlKTtcbkNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5lcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udGFpbmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gMTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIGhlaWdodCA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBPdmVycmlkYWJsZSBtZXRob2QgdGhhdCBjYW4gYmUgdXNlZCBieSBDb250YWluZXIgc3ViY2xhc3NlcyB3aGVuZXZlciB0aGUgY2hpbGRyZW4gYXJyYXkgaXMgbW9kaWZpZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7fTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lci5cbiAqIFxuICogWW91IGNhbiBhbHNvIGFkZCBtdWx0cGxlIGl0ZW1zIGxpa2Ugc286IG15Q29udGFpbmVyLmFkZENoaWxkKHRoaW5rT25lLCB0aGluZ1R3bywgdGhpbmdUaHJlZSlcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBhZGQgdG8gdGhlIGNvbnRhaW5lclxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57IFxuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaGFzIGEgcGFyZW50IHRoZW4gbGV0cyByZW1vdmUgaXQgYXMgUGl4aSBvYmplY3RzIGNhbiBvbmx5IGV4aXN0IGluIG9uZSBwbGFjZVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UodGhpcy5jaGlsZHJlbi5sZW5ndGgtMSk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lciBhdCBhIHNwZWNpZmllZCBpbmRleC4gSWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd25cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRvIGFkZFxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBwbGFjZSB0aGUgY2hpbGQgaW5cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkQXQgPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hpbGQgKyAnYWRkQ2hpbGRBdDogVGhlIGluZGV4ICcrIGluZGV4ICsnIHN1cHBsaWVkIGlzIG91dCBvZiBib3VuZHMgJyArIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiAyIERpc3BsYXkgT2JqZWN0cyB3aXRoaW4gdGhpcyBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKiBAcGFyYW0gY2hpbGQyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc3dhcENoaWxkcmVuID0gZnVuY3Rpb24gKGNoaWxkLCBjaGlsZDIpXG57XG4gICAgaWYgKGNoaWxkID09PSBjaGlsZDIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluZGV4MSA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG4gICAgdmFyIGluZGV4MiA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZDIpO1xuXG4gICAgaWYgKGluZGV4MSA8IDAgfHwgaW5kZXgyIDwgMClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3dhcENoaWxkcmVuOiBCb3RoIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0cyBtdXN0IGJlIGNoaWxkcmVuIG9mIHRoZSBjYWxsZXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDFdID0gY2hpbGQyO1xuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgyXSA9IGNoaWxkO1xuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleDEgPCBpbmRleDIgPyBpbmRleDEgOiBpbmRleDIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBwb3NpdGlvbiBvZiBhIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgdG8gaWRlbnRpZnlcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdCB0byBpZGVudGlmeVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiBhbiBleGlzdGluZyBjaGlsZCBpbiB0aGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIGZvciB3aGljaCB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGluZGV4IG51bWJlclxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSByZXN1bHRpbmcgaW5kZXggbnVtYmVyIGZvciB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuXG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgY3VycmVudEluZGV4LCAxKTsgLy8gcmVtb3ZlIGZyb20gb2xkIHBvc2l0aW9uXG4gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsgLy9hZGQgYXQgbmV3IHBvc2l0aW9uXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBhdFxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgYXQgdGhlIGdpdmVuIGluZGV4LCBpZiBhbnkuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDaGlsZEF0OiBTdXBwbGllZCBpbmRleCAnICsgaW5kZXggKyAnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjaGlsZCBsaXN0LCBvciB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baW5kZXhdO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW1vdmVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIHNwZWNpZmllZCBpbmRleCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgZnJvbVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIHZhciBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRBdChpbmRleCk7XG5cbiAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIGNvbnRhaW5lciB0aGF0IGFyZSB3aXRoaW4gdGhlIGJlZ2luIGFuZCBlbmQgaW5kZXhlcy5cbiAqXG4gKiBAcGFyYW0gYmVnaW5JbmRleCB7bnVtYmVyfSBUaGUgYmVnaW5uaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gKiBAcGFyYW0gZW5kSW5kZXgge251bWJlcn0gVGhlIGVuZGluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzaXplIG9mIHRoZSBjb250YWluZXIuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbiAoYmVnaW5JbmRleCwgZW5kSW5kZXgpXG57XG4gICAgdmFyIGJlZ2luID0gYmVnaW5JbmRleCB8fCAwO1xuICAgIHZhciBlbmQgPSB0eXBlb2YgZW5kSW5kZXggPT09ICdudW1iZXInID8gZW5kSW5kZXggOiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgcmFuZ2UgPSBlbmQgLSBiZWdpbjtcbiAgICB2YXIgcmVtb3ZlZCwgaTtcblxuICAgIGlmIChyYW5nZSA+IDAgJiYgcmFuZ2UgPD0gZW5kKVxuICAgIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGJlZ2luLCByYW5nZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0ucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShiZWdpbkluZGV4KTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZ2UgPT09IDAgJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyZW1vdmVDaGlsZHJlbjogbnVtZXJpYyB2YWx1ZXMgYXJlIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UuJyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIgZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSBmYWxzZTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkNvbnRhaW5lci5wcm90b3R5cGUuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtID0gQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIHRoZSBib3VuZHMgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCB0aGlzIHJlbmRlciBzZXNzaW9uIHNvIHJldHVybiB3aGF0IHdlIGhhdmVcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgY2hpbGRCb3VuZHM7XG4gICAgICAgIHZhciBjaGlsZE1heFg7XG4gICAgICAgIHZhciBjaGlsZE1heFk7XG5cbiAgICAgICAgdmFyIGNoaWxkVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgY2hpbGRCb3VuZHMgPSB0aGlzLmNoaWxkcmVuW2ldLmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBtaW5YID0gbWluWCA8IGNoaWxkQm91bmRzLnggPyBtaW5YIDogY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIG1pblkgPSBtaW5ZIDwgY2hpbGRCb3VuZHMueSA/IG1pblkgOiBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBjaGlsZE1heFggPSBjaGlsZEJvdW5kcy53aWR0aCArIGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICBjaGlsZE1heFkgPSBjaGlsZEJvdW5kcy5oZWlnaHQgKyBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBtYXhYID0gbWF4WCA+IGNoaWxkTWF4WCA/IG1heFggOiBjaGlsZE1heFg7XG4gICAgICAgICAgICBtYXhZID0gbWF4WSA+IGNoaWxkTWF4WSA/IG1heFkgOiBjaGlsZE1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkVmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJHZXRCb3VuZHMgPSBDb250YWluZXIucHJvdG90eXBlLmdldEJvdW5kcztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5vbi1nbG9iYWwgbG9jYWwgYm91bmRzIG9mIHRoZSBDb250YWluZXIgYXMgYSByZWN0YW5nbGUuXG4gKiBUaGUgY2FsY3VsYXRpb24gdGFrZXMgYWxsIHZpc2libGUgY2hpbGRyZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4Q2FjaGUgPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdGguTWF0cml4LklERU5USVRZO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdHJpeENhY2hlO1xuXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMoIG1hdGguTWF0cml4LklERU5USVRZICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICBcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpLCBqO1xuXG4gICAgLy8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyBlbGVtZW50IGhhcyBhIG1hc2sgb3IgYSBmaWx0ZXIuXG4gICAgaWYgKHRoaXMuX21hc2sgfHwgdGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuXG4gICAgICAgIC8vIHB1c2ggZmlsdGVyIGZpcnN0IGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyBjb3JyZWN0IGZvciBhbnkgbWFza2luZ1xuICAgICAgICBpZiAodGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRoaXMsIHRoaXMuX2ZpbHRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnB1c2hNYXNrKHRoaXMsIHRoaXMuX21hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgLy8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBiYXRjaCwgb25seSByZW5kZXJlZCBpZiBpdCBoYXMgYSB0ZXh0dXJlLlxuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIG1ha2Ugc3VyZSB0aGV5IGdldCByZW5kZXJlZFxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmlsdGVycylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gc2ltcGxlIHJlbmRlciBjaGlsZHJlbiFcbiAgICAgICAgZm9yIChpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnJlbmRlcldlYkdMKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3ViY2xhc3NcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyB0aGlzIGlzIHdoZXJlIGNvbnRlbnQgaXRzZWxmIGdldHMgcmVuZGVyZWQuLi5cbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpc1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMuYWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcy5fbWFzaywgcmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlckNhbnZhcyhyZW5kZXJlcik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFzaylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2socmVuZGVyZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcbntcbiAgICBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBpZiAoZGVzdHJveUNoaWxkcmVuKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KGRlc3Ryb3lDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9UcmFuc2Zvcm0nKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgIF90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgdGhhdCBhcmUgcmVuZGVyZWQgb24gdGhlIHNjcmVlbi5cbiAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvbiBpdHMgb3duIHJhdGhlciBpdCBzaG91bGQgYmUgZXh0ZW5kZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIERpc3BsYXlPYmplY3QoKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29vcmRpbmF0ZSBvZiB0aGUgb2JqZWN0IHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy50cmFuc2Zvcm0ucG9zaXRpb247XG4gICAvLyB0aGlzLl9wb3NpdGlvbiA9IG5ldyBDYWNoZVBvaW50KHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIGZhY3RvciBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlID0gdGhpcy50cmFuc2Zvcm0uc2NhbGVcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXZvdCBwb2ludCBvZiB0aGUgZGlzcGxheU9iamVjdCB0aGF0IGl0IHJvdGF0ZXMgYXJvdW5kXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucGl2b3QgPSB0aGlzLnRyYW5zZm9ybS5waXZvdFxuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2tldyBmYWN0b3IgZm9yIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5za2V3ID0gdGhpcy50cmFuc2Zvcm0uc2tld1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9yb3RhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BhY2l0eSBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpc2liaWxpdHkgb2YgdGhlIG9iamVjdC4gSWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biwgYW5kXG4gICAgICogdGhlIHVwZGF0ZVRyYW5zZm9ybSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDYW4gdGhpcyBvYmplY3QgYmUgcmVuZGVyZWQsIGlmIGZhbHNlIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgZHJhd24gYnV0IHRoZSB1cGRhdGVUcmFuc2Zvcm1cbiAgICAgKiBtZXRob2RzIHdpbGwgc3RpbGwgYmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmFibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIHRoaXMgZGlzcGxheSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNvbnRhaW5lcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbXVsdGlwbGllZCBhbHBoYSBvZiB0aGUgZGlzcGxheU9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRyYW5zZm9ybSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIHdvcmxkIChwYXJlbnQpIGZhY3RvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gdGhpcy50cmFuc2Zvcm0ubG9jYWxUcmFuc2Zvcm07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJlYSB0aGUgZmlsdGVyIGlzIGFwcGxpZWQgdG8uIFRoaXMgaXMgdXNlZCBhcyBtb3JlIG9mIGFuIG9wdGltaXNhdGlvblxuICAgICAqIHJhdGhlciB0aGFuIGZpZ3VyaW5nIG91dCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgZGlzcGxheU9iamVjdCBlYWNoIGZyYW1lIHlvdSBjYW4gc2V0IHRoaXMgcmVjdGFuZ2xlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xuXG4gICAgLyoqeHd3XG4gICAgICogY2FjaGVkIHNpbiByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3IgPSAwO1xuXG4gICAgLyoqXG4gICAgICogY2FjaGVkIGNvcyByb3RhdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3IgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRzID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vc3QgdXAtdG8tZGF0ZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcmlnaW5hbCwgY2FjaGVkIG1hc2sgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXNrID0gbnVsbDtcblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGF5T2JqZWN0O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB4IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NhbGVYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByb3RhdGlvbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY3IgPSBNYXRoLmNvcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHNwcml0ZSBpcyBnbG9iYWxseSB2aXNpYmxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHdvcmxkVmlzaWJsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcztcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbWFzayBmb3IgdGhlIGRpc3BsYXlPYmplY3QuIEEgbWFzayBpcyBhbiBvYmplY3QgdGhhdCBsaW1pdHMgdGhlIHZpc2liaWxpdHkgb2YgYW4gb2JqZWN0IHRvIHRoZSBzaGFwZSBvZiB0aGUgbWFzayBhcHBsaWVkIHRvIGl0LlxuICAgICAqIEluIFBJWEkgYSByZWd1bGFyIG1hc2sgbXVzdCBiZSBhIFBJWEkuR3JhcGhpY3Mgb3IgYSBQSVhJLlNwcml0ZSBvYmplY3QuIFRoaXMgYWxsb3dzIGZvciBtdWNoIGZhc3RlciBtYXNraW5nIGluIGNhbnZhcyBhcyBpdCB1dGlsaXNlcyBzaGFwZSBjbGlwcGluZy5cbiAgICAgKiBUbyByZW1vdmUgYSBtYXNrLCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc3xQSVhJLlNwcml0ZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIG1hc2s6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFzaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX21hc2sgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFzay5yZW5kZXJhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVycyBmb3IgdGhlIGRpc3BsYXlPYmplY3QuXG4gICAgICogKiBJTVBPUlRBTlQ6IFRoaXMgaXMgYSB3ZWJHTCBvbmx5IGZlYXR1cmUgYW5kIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqIFRvIHJlbW92ZSBmaWx0ZXJzIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnbnVsbCdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGZpbHRlcnM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLnNsaWNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gdmFsdWUgJiYgdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBUT0RPIC0gT3B0aW1pemF0aW9uIHBhc3MhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgLy8gbXVsdGlwbHkgdGhlIGFscGhhcy4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG59O1xuXG4vLyBwZXJmb3JtYW5jZSBpbmNyZWFzZSB0byBhdm9pZCB1c2luZyBjYWxsLi4gKDEweCBmYXN0ZXIpXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtID0gRGlzcGxheU9iamVjdC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtO1xuXG4vKipcbiAqXG4gKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeCkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMobWF0aC5NYXRyaXguSURFTlRJVFkpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvR2xvYmFsID0gZnVuY3Rpb24gKHBvc2l0aW9uKVxue1xuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb3RcbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseShwb3NpdGlvbik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdCByZWxhdGl2ZSB0byBhbm90aGVyIHBvaW50XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcGFyYW0gW2Zyb21dIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgZ2xvYmFsIHBvc2l0aW9uIGZyb21cbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgUG9pbnQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvTG9jYWwgPSBmdW5jdGlvbiAocG9zaXRpb24sIGZyb20sIHBvaW50KVxue1xuICAgIGlmIChmcm9tKVxuICAgIHtcbiAgICAgICAgcG9zaXRpb24gPSBmcm9tLnRvR2xvYmFsKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBzaW1wbHkgYXBwbHkgdGhlIG1hdHJpeC4uXG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvc2l0aW9uLCBwb2ludCk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFyZW50IENvbnRhaW5lciBvZiB0aGlzIERpc3BsYXlPYmplY3RcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdG8gYWRkIHRoaXMgRGlzcGxheU9iamVjdCB0b1xuICogQHJldHVybiB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRoYXQgdGhpcyBEaXNwbGF5T2JqZWN0IHdhcyBhZGRlZCB0b1xuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXIuYWRkQ2hpbGQpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFBhcmVudDogQXJndW1lbnQgbXVzdCBiZSBhIENvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRDaGlsZCh0aGlzKTtcbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzZXQgdGhlIHBvc3Rpb24sIHNjYWxlLCBza2V3IGFuZCBwaXZvdCBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBUaGUgWCBwb3NpdGlvblxuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IFRoZSBZIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3NjYWxlWD0xXSB7bnVtYmVyfSBUaGUgWCBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtzY2FsZVk9MV0ge251bWJlcn0gVGhlIFkgc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbcm90YXRpb249MF0ge251bWJlcn0gVGhlIHJvdGF0aW9uXG4gKiBAcGFyYW0gW3NrZXdYPTBdIHtudW1iZXJ9IFRoZSBYIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbc2tld1k9MF0ge251bWJlcn0gVGhlIFkgc2tldyB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFg9MF0ge251bWJlcn0gVGhlIFggcGl2b3QgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RZPTBdIHtudW1iZXJ9IFRoZSBZIHBpdm90IHZhbHVlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKHgsIHksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZLCBwaXZvdFgsIHBpdm90WSkgLy9qc2hpbnQgaWdub3JlOmxpbmVcbntcbiAgICB0aGlzLnBvc2l0aW9uLnggPSB4IHx8IDA7XG4gICAgdGhpcy5wb3NpdGlvbi55ID0geSB8fCAwO1xuICAgIHRoaXMuc2NhbGUueCA9ICFzY2FsZVggPyAxIDogc2NhbGVYO1xuICAgIHRoaXMuc2NhbGUueSA9ICFzY2FsZVkgPyAxIDogc2NhbGVZO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgIHRoaXMuc2tldy54ID0gc2tld1ggfHwgMDtcbiAgICB0aGlzLnNrZXcueSA9IHNrZXdZIHx8IDA7XG4gICAgdGhpcy5waXZvdC54ID0gcGl2b3RYIHx8IDA7XG4gICAgdGhpcy5waXZvdC55ID0gcGl2b3RZIHx8IDA7XG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEJhc2UgZGVzdHJveSBtZXRob2QgZm9yIGdlbmVyaWMgZGlzcGxheSBvYmplY3RzXG4gKlxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcblxuICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2NhbGUgPSBudWxsO1xuICAgIHRoaXMucGl2b3QgPSBudWxsO1xuICAgIHRoaXMuc2tldyA9IG51bGw7XG5cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcblxuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IG1hdGguUG9pbnQoMSwxKTtcbiAgICB0aGlzLnBpdm90ID0gbmV3IG1hdGguUG9pbnQoMC4wKTtcbiAgICB0aGlzLnNrZXcgPSBuZXcgbWF0aC5Qb2ludCgwLjApO1xuICAgIFxuICAgIHRoaXMucm90YXRpb24gPSAwO1xuICAgIHRoaXMuX3NyID0gTWF0aC5zaW4oMCk7XG4gICAgdGhpcy5fY3IgPSBNYXRoLmNvcygwKTtcbiAgICBcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufVxuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHJhbnNmb3JtO1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uIChwYXJlbnRUcmFuc2Zvcm0pXG57XG4gICAgdmFyIHB0ID0gcGFyZW50VHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGx0ID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcblxuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueDtcbiAgICAgICAgbHQuYiAgPSAgdGhpcy5fc3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmMgID0gLXRoaXMuX3NyICogdGhpcy5zY2FsZS55O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQudHggPSAgdGhpcy5wb3NpdGlvbi54IC0gKHRoaXMucGl2b3QueCAqIGx0LmEgKyB0aGlzLnBpdm90LnkgKiBsdC5jKTtcbiAgICAgICAgbHQudHkgPSAgdGhpcy5wb3NpdGlvbi55IC0gKHRoaXMucGl2b3QueCAqIGx0LmIgKyB0aGlzLnBpdm90LnkgKiBsdC5kKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmRpcnR5IHx8IHBhcmVudC5kaXJ0eSlcbiAgICB7ICAgICAgXG4gICAgICAgIC8vIGNvbmNhdCB0aGUgcGFyZW50IG1hdHJpeCB3aXRoIHRoZSBvYmplY3RzIHRyYW5zZm9ybS5cbiAgICAgICAgd3QuYSAgPSBsdC5hICAqIHB0LmEgKyBsdC5iICAqIHB0LmM7XG4gICAgICAgIHd0LmIgID0gbHQuYSAgKiBwdC5iICsgbHQuYiAgKiBwdC5kO1xuICAgICAgICB3dC5jICA9IGx0LmMgICogcHQuYSArIGx0LmQgICogcHQuYztcbiAgICAgICAgd3QuZCAgPSBsdC5jICAqIHB0LmIgKyBsdC5kICAqIHB0LmQ7XG4gICAgICAgIHd0LnR4ID0gbHQudHggKiBwdC5hICsgbHQudHkgKiBwdC5jICsgcHQudHg7XG4gICAgICAgIHd0LnR5ID0gbHQudHggKiBwdC5iICsgbHQudHkgKiBwdC5kICsgcHQudHk7ICAgICAgIFxuICAgIFxuICAgLy8gICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgLy8gICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbi8vICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgLy8gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm07XG5cblxuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vR3JhcGhpY3NEYXRhJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcFBvaW50ID0gbmV3IG1hdGguUG9pbnQoKTtcblxuLyoqXG4gKiBUaGUgR3JhcGhpY3MgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB1c2VkIHRvIGRyYXcgcHJpbWl0aXZlIHNoYXBlcyBzdWNoIGFzIGxpbmVzLCBjaXJjbGVzIGFuZFxuICogcmVjdGFuZ2xlcyB0byB0aGUgZGlzcGxheSwgYW5kIHRvIGNvbG9yIGFuZCBmaWxsIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3MoKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCAodGhpY2tuZXNzKSBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gMDtcblxuICAgIC8qKlxuICAgICAqIEdyYXBoaWNzIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQXBwbHkgYSB2YWx1ZSBvZiAweEZGRkZGRiB0byByZXNldCB0aGUgdGludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByZXZpb3VzIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVXNlZCB0byBjb21wYXJlIHRvIHRoZSBjdXJyZW50IHRpbnQgYW5kIGNoZWNrIGlmIHRoZXJlcyBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMuX3ByZXZUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUw7XG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHBhdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBjb250YWluaW5nIHNvbWUgV2ViR0wtcmVsYXRlZCBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgb2JqZWN0Pn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIFRPRE8gLSBfd2ViZ2wgc2hvdWxkIHVzZSBhIHByb3RvdHlwZSBvYmplY3QsIG5vdCBhIHJhbmRvbSB1bmRvY3VtZW50ZWQgb2JqZWN0Li4uXG4gICAgdGhpcy5fd2ViR0wgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBzaGFwZSBpcyBiZWluZyB1c2VkIGFzIGEgbWFzay5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc01hc2sgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBib3VuZHMnIHBhZGRpbmcgdXNlZCBmb3IgYm91bmRzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYm91bmRzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBsb2NhbCBib3VuZHMgdG8gcHJldmVudCByZWNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLDAsMSwxKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgV2ViR0wgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlXG4gICAgICogZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgY2FjaGVkIHNwcml0ZSBvYmplY3QgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGNhY2hlQXNCaXRtYXAgaXMgc2V0IHRvIHRydWUgdGhlIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIGFzIGlmIGl0IHdhcyBhIHNwcml0ZS5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGdyYXBoaWNzIGVsZW1lbnQgZG9lcyBub3QgY2hhbmdlIG9mdGVuLCBhcyBpdCB3aWxsIHNwZWVkIHVwIHRoZSByZW5kZXJpbmdcbiAgICAgKiBvZiB0aGUgb2JqZWN0IGluIGV4Y2hhbmdlIGZvciB0YWtpbmcgdXAgdGV4dHVyZSBtZW1vcnkuIEl0IGlzIGFsc28gdXNlZnVsIGlmIHlvdSBuZWVkIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB0byBiZSBhbnRpLWFsaWFzZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyBjYW52YXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGlmXG4gICAgICogeW91IGFyZSBjb25zdGFudGx5IHJlZHJhd2luZyB0aGUgZ3JhcGhpY3MgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhY2hlQXNCaXRtYXBcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkdyYXBoaWNzI1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5HcmFwaGljcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3M7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICogTm90ZSB0aGF0IHRoZSBvbmx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIGNsb25lZCwgbm90IGl0cyB0cmFuc2Zvcm0gKHBvc2l0aW9uLHNjYWxlLGV0YylcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjbG9uZSA9IG5ldyBHcmFwaGljcygpO1xuXG4gICAgY2xvbmUucmVuZGVyYWJsZSAgICA9IHRoaXMucmVuZGVyYWJsZTtcbiAgICBjbG9uZS5maWxsQWxwaGEgICAgID0gdGhpcy5maWxsQWxwaGE7XG4gICAgY2xvbmUubGluZVdpZHRoICAgICA9IHRoaXMubGluZVdpZHRoO1xuICAgIGNsb25lLmxpbmVDb2xvciAgICAgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICBjbG9uZS50aW50ICAgICAgICAgID0gdGhpcy50aW50O1xuICAgIGNsb25lLmJsZW5kTW9kZSAgICAgPSB0aGlzLmJsZW5kTW9kZTtcbiAgICBjbG9uZS5pc01hc2sgICAgICAgID0gdGhpcy5pc01hc2s7XG4gICAgY2xvbmUuYm91bmRzUGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcbiAgICBjbG9uZS5kaXJ0eSAgICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5nbERpcnR5ICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRoaXMuY2FjaGVkU3ByaXRlRGlydHk7XG5cbiAgICAvLyBjb3B5IGdyYXBoaWNzIGRhdGFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgY2xvbmUuZ3JhcGhpY3NEYXRhLnB1c2godGhpcy5ncmFwaGljc0RhdGFbaV0uY2xvbmUoKSk7XG4gICAgfVxuXG4gICAgY2xvbmUuY3VycmVudFBhdGggPSBjbG9uZS5ncmFwaGljc0RhdGFbY2xvbmUuZ3JhcGhpY3NEYXRhLmxlbmd0aCAtIDFdO1xuXG4gICAgY2xvbmUudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgIHJldHVybiBjbG9uZTtcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsaW5lIHN0eWxlIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gR3JhcGhpY3MgbWV0aG9kcyBzdWNoIGFzIHRoZSBsaW5lVG8oKSBtZXRob2Qgb3IgdGhlIGRyYXdDaXJjbGUoKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lU3R5bGUgPSBmdW5jdGlvbiAobGluZVdpZHRoLCBjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGggfHwgMDtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5saW5lQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGhhbGZ3YXkgdGhyb3VnaCBhIGxpbmU/IHN0YXJ0IGEgbmV3IG9uZSFcbiAgICAgICAgICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24odGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMuc2xpY2UoLTIpKTtcbiAgICAgICAgICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0cyBlbXB0eSBzbyBsZXRzIGp1c3Qgc2V0IHRoZSBsaW5lIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQWxwaGEgPSB0aGlzLmxpbmVBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBNb3ZlcyB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvIHgsIHkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gICovXG5HcmFwaGljcy5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihbeCx5XSk7XG4gICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgbGluZSB1c2luZyB0aGUgY3VycmVudCBsaW5lIHN0eWxlIGZyb20gdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byAoeCwgeSk7XG4gKiBUaGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIGlzIHRoZW4gc2V0IHRvICh4LCB5KS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeCwgeSk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsIDApO1xuICAgIH1cblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICB4YSA9IGZyb21YICsgKCAoY3BYIC0gZnJvbVgpICogaiApO1xuICAgICAgICB5YSA9IGZyb21ZICsgKCAoY3BZIC0gZnJvbVkpICogaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCB4YSArICggKChjcFggKyAoICh0b1ggLSBjcFgpICogaiApKSAtIHhhKSAqIGogKSxcbiAgICAgICAgICAgICAgICAgICAgIHlhICsgKCAoKGNwWSArICggKHRvWSAtIGNwWSkgKiBqICkpIC0geWEpICogaiApICk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSBjcFgyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgY3BYMiwgY3BZMiwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciBuID0gMjAsXG4gICAgICAgIGR0LFxuICAgICAgICBkdDIsXG4gICAgICAgIGR0MyxcbiAgICAgICAgdDIsXG4gICAgICAgIHQzLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIGR0ID0gKDEgLSBqKTtcbiAgICAgICAgZHQyID0gZHQgKiBkdDtcbiAgICAgICAgZHQzID0gZHQyICogZHQ7XG5cbiAgICAgICAgdDIgPSBqICogajtcbiAgICAgICAgdDMgPSB0MiAqIGo7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIGR0MyAqIGZyb21YICsgMyAqIGR0MiAqIGogKiBjcFggKyAzICogZHQgKiB0MiAqIGNwWDIgKyB0MyAqIHRvWCxcbiAgICAgICAgICAgICAgICAgICAgIGR0MyAqIGZyb21ZICsgMyAqIGR0MiAqIGogKiBjcFkgKyAzICogZHQgKiB0MiAqIGNwWTIgKyB0MyAqIHRvWSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmNUbygpIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSBiZXR3ZWVuIHR3byB0YW5nZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFwiYm9ycm93ZWRcIiBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZnhjYW52YXMvIC0gdGhhbmtzIGdvb2dsZSFcbiAqXG4gKiBAcGFyYW0geDEge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHgyIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTIge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjVG8gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIHJhZGl1cylcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyh4MSwgeTEpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyxcbiAgICAgICAgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSxcbiAgICAgICAgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSxcbiAgICAgICAgYTEgPSBmcm9tWSAtIHkxLFxuICAgICAgICBiMSA9IGZyb21YIC0geDEsXG4gICAgICAgIGEyID0geTIgICAtIHkxLFxuICAgICAgICBiMiA9IHgyICAgLSB4MSxcbiAgICAgICAgbW0gPSBNYXRoLmFicyhhMSAqIGIyIC0gYjEgKiBhMik7XG5cbiAgICBpZiAobW0gPCAxLjBlLTggfHwgcmFkaXVzID09PSAwKVxuICAgIHtcbiAgICAgICAgaWYgKHBvaW50c1twb2ludHMubGVuZ3RoLTJdICE9PSB4MSB8fCBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSAhPT0geTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIGRkID0gYTEgKiBhMSArIGIxICogYjEsXG4gICAgICAgICAgICBjYyA9IGEyICogYTIgKyBiMiAqIGIyLFxuICAgICAgICAgICAgdHQgPSBhMSAqIGEyICsgYjEgKiBiMixcbiAgICAgICAgICAgIGsxID0gcmFkaXVzICogTWF0aC5zcXJ0KGRkKSAvIG1tLFxuICAgICAgICAgICAgazIgPSByYWRpdXMgKiBNYXRoLnNxcnQoY2MpIC8gbW0sXG4gICAgICAgICAgICBqMSA9IGsxICogdHQgLyBkZCxcbiAgICAgICAgICAgIGoyID0gazIgKiB0dCAvIGNjLFxuICAgICAgICAgICAgY3ggPSBrMSAqIGIyICsgazIgKiBiMSxcbiAgICAgICAgICAgIGN5ID0gazEgKiBhMiArIGsyICogYTEsXG4gICAgICAgICAgICBweCA9IGIxICogKGsyICsgajEpLFxuICAgICAgICAgICAgcHkgPSBhMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHF4ID0gYjIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBxeSA9IGEyICogKGsxICsgajIpLFxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IE1hdGguYXRhbjIocHkgLSBjeSwgcHggLSBjeCksXG4gICAgICAgICAgICBlbmRBbmdsZSAgID0gTWF0aC5hdGFuMihxeSAtIGN5LCBxeCAtIGN4KTtcblxuICAgICAgICB0aGlzLmFyYyhjeCArIHgxLCBjeSArIHkxLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBiMSAqIGEyID4gYjIgKiBhMSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmMgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlICh1c2VkIHRvIGNyZWF0ZSBjaXJjbGVzLCBvciBwYXJ0cyBvZiBjaXJjbGVzKS5cbiAqXG4gKiBAcGFyYW0gY3gge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBjeSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBzdGFydEFuZ2xlIHtudW1iZXJ9IFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucyAoMCBpcyBhdCB0aGUgMyBvJ2Nsb2NrIHBvc2l0aW9uIG9mIHRoZSBhcmMncyBjaXJjbGUpXG4gKiBAcGFyYW0gZW5kQW5nbGUge251bWJlcn0gVGhlIGVuZGluZyBhbmdsZSwgaW4gcmFkaWFuc1xuICogQHBhcmFtIGFudGljbG9ja3dpc2Uge2Jvb2xlYW59IE9wdGlvbmFsLiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgY291bnRlcmNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuIEZhbHNlIGlzIGRlZmF1bHQsIGFuZCBpbmRpY2F0ZXMgY2xvY2t3aXNlLCB3aGlsZSB0cnVlIGluZGljYXRlcyBjb3VudGVyLWNsb2Nrd2lzZS5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmMgPSBmdW5jdGlvbihjeCwgY3ksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UpXG57XG4gICAgYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gZW5kQW5nbGUpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiggIWFudGljbG9ja3dpc2UgJiYgZW5kQW5nbGUgPD0gc3RhcnRBbmdsZSApXG4gICAge1xuICAgICAgICBlbmRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG4gICAgZWxzZSBpZiggYW50aWNsb2Nrd2lzZSAmJiBzdGFydEFuZ2xlIDw9IGVuZEFuZ2xlIClcbiAgICB7XG4gICAgICAgIHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuXG4gICAgdmFyIHN3ZWVwID0gYW50aWNsb2Nrd2lzZSA/IChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpICogLTEgOiAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKTtcbiAgICB2YXIgc2VncyA9ICBNYXRoLmNlaWwoTWF0aC5hYnMoc3dlZXApIC8gKE1hdGguUEkgKiAyKSkgKiA0MDtcblxuICAgIGlmKHN3ZWVwID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0WCA9IGN4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXM7XG4gICAgdmFyIHN0YXJ0WSA9IGN5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXM7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyhzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIHRoZXRhID0gc3dlZXAvKHNlZ3MqMik7XG4gICAgdmFyIHRoZXRhMiA9IHRoZXRhKjI7XG5cbiAgICB2YXIgY1RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgICB2YXIgc2VnTWludXMgPSBzZWdzIC0gMTtcblxuICAgIHZhciByZW1haW5kZXIgPSAoIHNlZ01pbnVzICUgMSApIC8gc2VnTWludXM7XG5cbiAgICBmb3IodmFyIGk9MDsgaTw9c2VnTWludXM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciByZWFsID0gIGkgKyByZW1haW5kZXIgKiBpO1xuXG5cbiAgICAgICAgdmFyIGFuZ2xlID0gKCh0aGV0YSkgKyBzdGFydEFuZ2xlICsgKHRoZXRhMiAqIHJlYWwpKTtcblxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgdmFyIHMgPSAtTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCggKGNUaGV0YSAqICBjKSArIChzVGhldGEgKiBzKSApICogcmFkaXVzICsgY3gsXG4gICAgICAgICAgICAgICAgICAgICggKGNUaGV0YSAqIC1zKSArIChzVGhldGEgKiBjKSApICogcmFkaXVzICsgY3kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSBzaW1wbGUgb25lLWNvbG9yIGZpbGwgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIG90aGVyIEdyYXBoaWNzIG1ldGhvZHNcbiAqIChzdWNoIGFzIGxpbmVUbygpIG9yIGRyYXdDaXJjbGUoKSkgdXNlIHdoZW4gZHJhd2luZy5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmVnaW5GaWxsID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmZpbGxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGwgPSB0aGlzLmZpbGxpbmc7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxDb2xvciA9IHRoaXMuZmlsbENvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQWxwaGEgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbGwgdG8gdGhlIGxpbmVzIGFuZCBzaGFwZXMgdGhhdCB3ZXJlIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhlIGJlZ2luRmlsbCgpIG1ldGhvZC5cbiAqXG4gKiBAcmV0dXJuIHtHcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmVuZEZpbGwgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gbnVsbDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5SZWN0YW5nbGUoeCx5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBSYWRpdXMgb2YgdGhlIHJlY3RhbmdsZSBjb3JuZXJzXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JvdW5kZWRSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdDaXJjbGUgPSBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkNpcmNsZSh4LHksIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhlIGVsbGlwc2VcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3RWxsaXBzZSA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgcG9seWdvbiB1c2luZyB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCB7bnVtYmVyW118UElYSS5Qb2ludFtdfSBUaGUgcGF0aCBkYXRhIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwb2x5Z29uLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24gKHBhdGgpXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBhdGg7XG5cbiAgICB2YXIgY2xvc2VkID0gdHJ1ZTtcblxuICAgIGlmIChwb2ludHMgaW5zdGFuY2VvZiBtYXRoLlBvbHlnb24pXG4gICAge1xuICAgICAgICBjbG9zZWQgPSBwb2ludHMuY2xvc2VkO1xuICAgICAgICBwb2ludHMgPSBwb2ludHMucG9pbnRzO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50c1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24ocG9pbnRzKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBjbG9zZWQ7XG5cbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBncmFwaGljcyB0aGF0IHdlcmUgZHJhd24gdG8gdGhpcyBHcmFwaGljcyBvYmplY3QsIGFuZCByZXNldHMgZmlsbCBhbmQgbGluZSBzdHlsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuY2xlYXJEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZ2VvbWV0cnkgaXMgY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2hvdWxkIGJlIG9uZSBvZiB0aGUgc2NhbGVNb2RlIGNvbnN0c1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdFxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG5cbiAgICByZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCAqIHJlc29sdXRpb24sIGJvdW5kcy5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY2FudmFzQnVmZmVyLmNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgdGhlIHNwcml0ZSBpcyBub3QgdmlzaWJsZSBvciB0aGUgYWxwaGEgaXMgMCB0aGVuIG5vIG5lZWQgdG8gcmVuZGVyIHRoaXMgZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuZ2xEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzLnJlbmRlcih0aGlzKTtcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmlzTWFzayA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdGludCBoYXMgY2hhbmdlZCwgc2V0IHRoZSBncmFwaGljcyBvYmplY3QgdG8gZGlydHkuXG4gICAgaWYgKHRoaXMuX3ByZXZUaW50ICE9PSB0aGlzLnRpbnQpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjb2RlIG1heSBzdGlsbCBiZSBuZWVkZWQgc28gbGVhdmluZyBmb3Igbm93Li5cbiAgICAvL1xuICAgIC8qXG4gICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXApXG4gICAge1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSB8fCB0aGlzLmNhY2hlZFNwcml0ZURpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSgpO1xuXG4gICAgICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xuXG4gICAgICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMuX2NhY2hlZFNwcml0ZSwgcmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb247XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjb250ZXh0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGdyYXBoaWMgc2hhcGUgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gVGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlLCBkZWZhdWx0cyB0byB0aGlzXG4gKiAgb2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuXG4gICAgICAgIC8vIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGl0ZW0gaXMgYSBtYXNrIVxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyYWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgICAgICAgICAgdGhpcy5nbERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2xvY2FsQm91bmRzO1xuXG4gICAgICAgIHZhciB3MCA9IGJvdW5kcy54O1xuICAgICAgICB2YXIgdzEgPSBib3VuZHMud2lkdGggKyBib3VuZHMueDtcblxuICAgICAgICB2YXIgaDAgPSBib3VuZHMueTtcbiAgICAgICAgdmFyIGgxID0gYm91bmRzLmhlaWdodCArIGJvdW5kcy55O1xuXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciBtYXhYID0geDE7XG4gICAgICAgIHZhciBtYXhZID0geTE7XG5cbiAgICAgICAgdmFyIG1pblggPSB4MTtcbiAgICAgICAgdmFyIG1pblkgPSB5MTtcblxuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy54ID0gbWluWDtcbiAgICAgICAgdGhpcy5fYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IHRoaXMuX2JvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIGdyYXBoaWNzIG9iamVjdFxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5HcmFwaGljcy5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIGdyYXBoaWNzRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoIWRhdGEuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGRlYWwgd2l0aCBmaWxscy4uXG4gICAgICAgIGlmIChkYXRhLnNoYXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIGRhdGEuc2hhcGUuY29udGFpbnMoIHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSApIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICpcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUxvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGlmICh0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB2YXIgc2hhcGUsIHBvaW50cywgeCwgeSwgdywgaDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG4gICAgICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVCB8fCB0eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueCAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gUE9MWVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSAyKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvaW50c1tqKzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblggPSB4LWxpbmVXaWR0aCA8IG1pblggPyB4LWxpbmVXaWR0aCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSB4K2xpbmVXaWR0aCA+IG1heFggPyB4K2xpbmVXaWR0aCA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IHktbGluZVdpZHRoIDwgbWluWSA/IHktbGluZVdpZHRoIDogbWluWTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IHkrbGluZVdpZHRoID4gbWF4WSA/IHkrbGluZVdpZHRoIDogbWF4WTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgbWluWCA9IDA7XG4gICAgICAgIG1heFggPSAwO1xuICAgICAgICBtaW5ZID0gMDtcbiAgICAgICAgbWF4WSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy54ID0gbWluWCAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMud2lkdGggPSAobWF4WCAtIG1pblgpICsgcGFkZGluZyAqIDI7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy55ID0gbWluWSAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMuaGVpZ2h0ID0gKG1heFkgLSBtaW5ZKSArIHBhZGRpbmcgKiAyO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNhY2hlZCBzcHJpdGUgd2hlbiB0aGUgc3ByaXRlIGhhcyBjYWNoZUFzQml0bWFwID0gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgaWYgKCF0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzKTtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgU3ByaXRlKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyID0gY2FudmFzQnVmZmVyO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIucmVzaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gbGV2ZXJhZ2UgdGhlIGFuY2hvciB0byBhY2NvdW50IGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC5zYXZlKCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGFscGhhIG9mIHRoZSBncmFwaGljcyB0byAxIGZvciB0aGUgcmVuZGVyLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gbm93IHJlbmRlciB0aGUgZ3JhcGhpYy4uXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0KTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG59O1xuKi9cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjYWNoZWRTcHJpdGUgPSB0aGlzLl9jYWNoZWRTcHJpdGU7XG4gICAgdmFyIHRleHR1cmUgPSBjYWNoZWRTcHJpdGUudGV4dHVyZTtcbiAgICB2YXIgY2FudmFzID0gY2FjaGVkU3ByaXRlLmJ1ZmZlci5jYW52YXM7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLmZyYW1lLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLmZyYW1lLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICBjYWNoZWRTcHJpdGUuX3dpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIGNhY2hlZFNwcml0ZS5faGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgZGlydHkgYmFzZSB0ZXh0dXJlc1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZGlydHkoKTtcbn07Ki9cblxuLyoqXG4gKiBEZXN0cm95cyBhIHByZXZpb3VzIGNhY2hlZCBzcHJpdGUuXG4gKlxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3lDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS50ZXh0dXJlLmRlc3Ryb3kodHJ1ZSk7XG5cbiAgICAvLyBsZXQgdGhlIGdjIGNvbGxlY3QgdGhlIHVudXNlZCBzcHJpdGVcbiAgICAvLyBUT0RPIGNvdWxkIGJlIG9iamVjdCBwb29sZWQhXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07Ki9cblxuLyoqXG4gKiBEcmF3cyB0aGUgZ2l2ZW4gc2hhcGUgdG8gdGhpcyBHcmFwaGljcyBvYmplY3QuIENhbiBiZSBhbnkgb2YgQ2lyY2xlLCBSZWN0YW5nbGUsIEVsbGlwc2UsIExpbmUgb3IgUG9seWdvbi5cbiAqXG4gKiBAcGFyYW0gc2hhcGUge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX0gVGhlIGdlbmVyYXRlZCBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24gKHNoYXBlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgLy8gY2hlY2sgY3VycmVudCBwYXRoIVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IG5ldyBHcmFwaGljc0RhdGEodGhpcy5saW5lV2lkdGgsIHRoaXMubGluZUNvbG9yLCB0aGlzLmxpbmVBbHBoYSwgdGhpcy5maWxsQ29sb3IsIHRoaXMuZmlsbEFscGhhLCB0aGlzLmZpbGxpbmcsIHNoYXBlKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnB1c2goZGF0YSk7XG5cbiAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICB7XG4gICAgICAgIGRhdGEuc2hhcGUuY2xvc2VkID0gZGF0YS5zaGFwZS5jbG9zZWQgfHwgdGhpcy5maWxsaW5nO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBkZXN0cm95IGVhY2ggb2YgdGhlIEdyYXBoaWNzRGF0YSBvYmplY3RzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggd2ViZ2wgZGF0YSBlbnRyeSwgZGVzdHJveSB0aGUgV2ViR0xHcmFwaGljc0RhdGFcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl93ZWJnbCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3dlYmdsW2lkXS5kYXRhLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJnbFtpZF0uZGF0YVtqXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl93ZWJnbCA9IG51bGw7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBudWxsO1xufTtcbiIsIi8qKlxuICogQSBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBmaWxsQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbEFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGwgICAgICB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gKiBAcGFyYW0gc2hhcGUgICAgIHtDaXJjbGV8UmVjdGFuZ2xlfEVsbGlwc2V8TGluZXxQb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzRGF0YShsaW5lV2lkdGgsIGxpbmVDb2xvciwgbGluZUFscGhhLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgZmlsbCwgc2hhcGUpXG57XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IGxpbmVDb2xvcjtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVBbHBoYSA9IGxpbmVBbHBoYTtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMuX2xpbmVUaW50ID0gbGluZUNvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5fZmlsbFRpbnQgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICAgICAqL1xuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gICAgICovXG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFRoZSB0eXBlIG9mIHRoZSBzaGFwZSwgc2VlIHRoZSBDb25zdC5TaGFwZXMgZmlsZSBmb3IgYWxsIHRoZSBleGlzdGluZyB0eXBlcyxcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBzaGFwZS50eXBlO1xufVxuXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljc0RhdGEgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfVxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEdyYXBoaWNzRGF0YShcbiAgICAgICAgdGhpcy5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMubGluZUNvbG9yLFxuICAgICAgICB0aGlzLmxpbmVBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuZmlsbEFscGhhLFxuICAgICAgICB0aGlzLmZpbGwsXG4gICAgICAgIHRoaXMuc2hhcGVcbiAgICApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3MgZGF0YS5cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2hhcGUgPSBudWxsO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vV2ViR0xHcmFwaGljc0RhdGEnKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyJyksXG5cbiAgICAvLyBzb21lIGRyYXdpbmcgZnVuY3Rpb25zLi5cbiAgICBidWlsZExpbmUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkTGluZScpO1xuICAgIGJ1aWxkUG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRQb2x5Jyk7XG4gICAgYnVpbGRDb21wbGV4UG9seSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRDb21wbGV4UG9seScpO1xuICAgIGJ1aWxkUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlJyk7XG4gICAgYnVpbGRDaXJjbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ2lyY2xlJyk7XG5cbiAgICBlYXJjdXQgPSByZXF1aXJlKCdlYXJjdXQnKTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBHcmFwaGljc1JlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgdGhpcy5ncmFwaGljc0RhdGFQb29sID0gW107XG5cbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBvaW50cyBhIHBvbHkgY2FuIGNvbnRhaW4gYmVmb3JlIGl0IGlzIHJlbmRlcmVkIGFzIGEgY29tcGxleCBwb2x5Z29uICh1c2luZyB0aGUgc3RlbmNpbCBidWZmZXIpXG4gICAgICogQHR5cGUge051bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heGltdW1TaW1wbGVQb2x5U2l6ZSA9IDIwMDtcbn1cblxuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2dyYXBoaWNzJywgR3JhcGhpY3NSZW5kZXJlcik7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZVxuICpcbiAqIEBwcml2YXRlXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy5nbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBuZXcgUHJpbWl0aXZlU2hhZGVyKHRoaXMuZ2wpXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgcmVuZGVyZXIuXG4gKlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2xbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBncmFwaGljcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcbiAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcblxuICAgIHZhciB3ZWJHTERhdGE7XG4gIC8vICBjb25zb2xlLmxvZyhncmFwaGljcylcbiAgICBpZiAoZ3JhcGhpY3MuZGlydHkgfHwgIWdyYXBoaWNzLl93ZWJHTFtnbC5pZF0pXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZUdyYXBoaWNzKGdyYXBoaWNzKTtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gVGhpcyAgY291bGQgYmUgc3BlZWRlZCB1cCBmb3Igc3VyZSFcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCBncmFwaGljcy5ibGVuZE1vZGUgKTtcblxuLy8gICAgdmFyIG1hdHJpeCA9ICBncmFwaGljcy53b3JsZFRyYW5zZm9ybS5jbG9uZSgpO1xuLy8gICAgdmFyIG1hdHJpeCA9ICByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXguY2xvbmUoKTtcbi8vICAgIG1hdHJpeC5hcHBlbmQoZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0pO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB3ZWJHTC5kYXRhLmxlbmd0aDsgaSA8IG47IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMLmRhdGFbaV0ubW9kZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy9UT0RPIGZpeCB0aGlzIG9uZSFcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnB1c2hTdGVuY2lsKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICBnbC51bmlmb3JtMWYocmVuZGVyZXIuc2hhZGVyTWFuYWdlci5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSAqIHdlYkdMRGF0YS5hbHBoYSk7XG5cbiAgICAgICAgICAgIC8vIHJlbmRlciBxdWFkLi5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgcmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucG9wU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICovXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHNoYWRlciA9IHRoaXMucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgICAgICAgICByZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50aW50ID0gdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KTtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5kcmF3Q291bnQrKztcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gdXBkYXRlXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnVwZGF0ZUdyYXBoaWNzID0gZnVuY3Rpb24oZ3JhcGhpY3MpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBnZXQgdGhlIGNvbnRleHRzIGdyYXBoaWNzIG9iamVjdFxuICAgIHZhciB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF07XG5cbiAgICAvLyBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGRvZXMgbm90IGV4aXN0IGluIHRoZSB3ZWJHTCBjb250ZXh0IHRpbWUgdG8gY3JlYXRlIGl0IVxuICAgIGlmICghd2ViR0wpXG4gICAge1xuICAgICAgICB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF0gPSB7bGFzdEluZGV4OjAsIGRhdGE6W10sIGdsOmdsfTtcbiAgICB9XG5cbiAgIFxuICAgIC8vIGZsYWcgdGhlIGdyYXBoaWNzIGFzIG5vdCBkaXJ0eSBhcyB3ZSBhcmUgYWJvdXQgdG8gdXBkYXRlIGl0Li4uXG4gICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcblxuICAgIHZhciBpO1xuXG4gICAgLy8gaWYgdGhlIHVzZXIgY2xlYXJlZCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHdlIHdpbGwgbmVlZCB0byBjbGVhciBldmVyeSBvYmplY3RcbiAgICBpZiAoZ3JhcGhpY3MuY2xlYXJEaXJ0eSlcbiAgICB7XG4gICAgICAgIGdyYXBoaWNzLmNsZWFyRGlydHkgPSBmYWxzZTtcblxuICAgICAgICAvLyBsb29wIHRocm91Z2ggYW5kIHJldHVybiBhbGwgdGhlIHdlYkdMRGF0YXMgdG8gdGhlIG9iamVjdCBwb29sIHNvIHRoYW4gY2FuIGJlIHJldXNlZCBsYXRlciBvblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGdyYXBoaWNzRGF0YSA9IHdlYkdMLmRhdGFbaV07XG4gICAgICAgICAgICBncmFwaGljc0RhdGEucmVzZXQoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wdXNoKCBncmFwaGljc0RhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIHRoZSBhcnJheSBhbmQgcmVzZXQgdGhlIGluZGV4Li5cbiAgICAgICAgd2ViR0wuZGF0YSA9IFtdO1xuICAgICAgICB3ZWJHTC5sYXN0SW5kZXggPSAwO1xuICAgIH1cblxuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICAvLyBsb29wIHRocm91Z2ggdGhlIGdyYXBoaWNzIGRhdGFzIGFuZCBjb25zdHJ1Y3QgZWFjaCBvbmUuLlxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgYSBjb21wbGV4IGZpbGwgdGhlbiB0aGUgbmV3IHN0ZW5jaWwgYnVmZmVyIHRlY2huaXF1ZSB3aWxsIGJlIHVzZWRcbiAgICAvLyBvdGhlciB3aXNlIGdyYXBoaWNzIG9iamVjdHMgd2lsbCBiZSBwdXNoZWQgaW50byBhIGJhdGNoLi5cbiAgICBmb3IgKGkgPSB3ZWJHTC5sYXN0SW5kZXg7IGkgPCBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gbmVlZCB0byBhZGQgdGhlIHBvaW50cyB0aGUgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgICAgICAgICBkYXRhLnBvaW50cyA9IGRhdGEuc2hhcGUucG9pbnRzLnNsaWNlKCk7XG4gICAgICAgICAgICBpZiAoZGF0YS5zaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gY2xvc2UgdGhlIHBvbHkgaWYgdGhlIHZhbHVlIGlzIHRydWUhXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzWzBdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMl0gfHwgZGF0YS5wb2ludHNbMV0gIT09IGRhdGEucG9pbnRzW2RhdGEucG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucG9pbnRzLnB1c2goZGF0YS5wb2ludHNbMF0sIGRhdGEucG9pbnRzWzFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1BS0UgU1VSRSBXRSBIQVZFIFRIRSBDT1JSRUNUIFRZUEUuLlxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoID49IDYpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHMubGVuZ3RoIDwgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgKiAyKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FuRHJhd1VzaW5nU2ltcGxlID0gYnVpbGRQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuRHJhd1VzaW5nU2ltcGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb21wbGV4UG9seShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGggPiAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG4gICAgICAgICAgICAgICAgYnVpbGRMaW5lKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQyB8fCBkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5FTElQKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkQ2lyY2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkUm91bmRlZFJlY3RhbmdsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2ViR0wubGFzdEluZGV4Kys7XG4gICAgfVxuXG4gICAgLy8gdXBsb2FkIGFsbCB0aGUgZGlydHkgZGF0YS4uLlxuICAgIGZvciAoaSA9IDA7IGkgPCB3ZWJHTC5kYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVtpXTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLmRpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEudXBsb2FkKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB3ZWJHTCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IFRPRE8gQEFsdmluXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnN3aXRjaE1vZGUgPSBmdW5jdGlvbiAod2ViR0wsIHR5cGUpXG57XG4gICAgdmFyIHdlYkdMRGF0YTtcblxuICAgIGlmICghd2ViR0wuZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgd2ViR0xEYXRhLm1vZGUgPSB0eXBlO1xuICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVt3ZWJHTC5kYXRhLmxlbmd0aC0xXTtcblxuICAgICAgICBpZiAoKHdlYkdMRGF0YS5wb2ludHMubGVuZ3RoID4gMzIwMDAwKSB8fCB3ZWJHTERhdGEubW9kZSAhPT0gdHlwZSB8fCB0eXBlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucG9wKCkgfHwgbmV3IFdlYkdMR3JhcGhpY3NEYXRhKHdlYkdMLmdsKTtcbiAgICAgICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgICAgIHdlYkdMLmRhdGEucHVzaCh3ZWJHTERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd2ViR0xEYXRhLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB3ZWJHTERhdGE7XG59O1xuXG4iLCIvKipcbiAqIEFuIG9iamVjdCBjb250YWluaW5nIFdlYkdMIHNwZWNpZmljIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBXZWJHTEdyYXBoaWNzRGF0YShnbCkge1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLy9UT0RPIGRvZXMgdGhpcyBuZWVkIHRvIGJlIHNwbGl0IGJlZm9yZSB1cGxvZGluZz8/XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgY29sb3IgY29tcG9uZW50cyAocixnLGIpXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5jb2xvciA9IFswLDAsMF07IC8vIGNvbG9yIHNwbGl0IVxuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgcG9pbnRzIHRvIGRyYXdcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50W119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IFtdO1xuICAgIC8qKlxuICAgICAqIFRoZSBtYWluIGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggYnVmZmVyXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogdG9kbyBAYWx2aW5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tb2RlID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgZ3JhcGhpY3MgaXMgZGlydHkgb3Igbm90XG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn1cblxuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xHcmFwaGljc0RhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIFJlc2V0cyB0aGUgdmVydGljZXMgYW5kIHRoZSBpbmRpY2VzXG4gKi9cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnBvaW50cy5sZW5ndGggPSAwO1xuICAgIHRoaXMuaW5kaWNlcy5sZW5ndGggPSAwO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbi8vICAgIHRoaXMubGFzdEluZGV4ID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDtcbiAgICB0aGlzLmdsUG9pbnRzID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnBvaW50cyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5idWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmdsUG9pbnRzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmdsSW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmluZGljZXMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5nbEluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuY29sb3IgPSBudWxsO1xuICAgIHRoaXMucG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIFxuICAgIHRoaXMuZ2wgPSBudWxsO1xuXG4gICAgdGhpcy5idWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5nbFBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5nbEluZGljZXMgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihnbClcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBnbCxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgZmxpcFk7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIHZlYzMgdGludDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvciAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpXG4gICAgKTtcbn1cblxuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHJpbWl0aXZlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBjaXJjbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRyYXdcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDaXJjbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgdmFyIGNpcmNsZURhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSBjaXJjbGVEYXRhLng7XG4gICAgdmFyIHkgPSBjaXJjbGVEYXRhLnk7XG4gICAgdmFyIHdpZHRoO1xuICAgIHZhciBoZWlnaHQ7XG5cbiAgICAvLyBUT0RPIC0gYml0IGhhY2t5Pz9cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSBjaXJjbGVEYXRhLnJhZGl1cztcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS53aWR0aDtcbiAgICAgICAgaGVpZ2h0ID0gY2lyY2xlRGF0YS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHRvdGFsU2VncyA9IE1hdGguZmxvb3IoMzAgKiBNYXRoLnNxcnQoY2lyY2xlRGF0YS5yYWRpdXMpKSB8fCBNYXRoLmZsb29yKDE1ICogTWF0aC5zcXJ0KGNpcmNsZURhdGEud2lkdGggKyBjaXJjbGVEYXRhLmhlaWdodCkpO1xuICAgIHZhciBzZWcgPSAoTWF0aC5QSSAqIDIpIC8gdG90YWxTZWdzIDtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTZWdzICsgMSA7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaCh4LHksIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgeSArIE1hdGguY29zKHNlZyAqIGkpICogaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MrKywgdmVjUG9zKyspO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcy0xKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cy5wdXNoKHggKyBNYXRoLnNpbihzZWcgKiBpKSAqIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBidWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENpcmNsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21wbGV4IHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENvbXBsZXhQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vVE9ETyAtIG5vIG5lZWQgdG8gY29weSB0aGlzIGFzIGl0IGdldHMgdHVybmVkIGludG8gYSBGTG9hdDMyQXJyYXkgYW55d2F5cy4uXG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHMuc2xpY2UoKTtcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB3ZWJHTERhdGEucG9pbnRzID0gcG9pbnRzO1xuICAgIHdlYkdMRGF0YS5hbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgd2ViR0xEYXRhLmNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcblxuICAgIC8vIGNhbGNsYXRlIHRoZSBib3VuZHMuLlxuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgdmFyIHgseTtcblxuICAgIC8vIGdldCBzaXplLi5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrPTIpXG4gICAge1xuICAgICAgICB4ID0gcG9pbnRzW2ldO1xuICAgICAgICB5ID0gcG9pbnRzW2krMV07XG5cbiAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBxdWFkIHRvIHRoZSBlbmQgY29zIHRoZXJlIGlzIG5vIHBvaW50IG1ha2luZyBhbm90aGVyIGJ1ZmZlciFcbiAgICBwb2ludHMucHVzaChtaW5YLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWF4WSxcbiAgICAgICAgICAgICAgICBtaW5YLCBtYXhZKTtcblxuICAgIC8vIHB1c2ggYSBxdWFkIG9udG8gdGhlIGVuZC4uXG5cbiAgICAvL1RPRE8gLSB0aGlzIGFpbnQgbmVlZGVkIVxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goIGkgKTtcbiAgICB9XG5cbn07XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29tcGxleFBvbHk7IiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZExpbmUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gVE9ETyBPUFRJTUlTRSFcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGxpbmUgd2lkdGggaXMgYW4gb2RkIG51bWJlciBhZGQgMC41IHRvIGFsaWduIHRvIGEgd2hvbGUgcGl4ZWxcbiAgICAvLyBjb21tZW50aW5nIHRoaXMgb3V0IGZpeGVzICM3MTEgYW5kICMxNjIwXG4gICAgLy8gaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGglMilcbiAgICAvLyB7XG4gICAgLy8gICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAgIHBvaW50c1tpXSArPSAwLjU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGZpcnN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgdmFyIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IHBvaW50IGlzIHRoZSBsYXN0IHBvaW50IC0gZ29ubmEgaGF2ZSBpc3N1ZXMgOilcbiAgICBpZiAoZmlyc3RQb2ludC54ID09PSBsYXN0UG9pbnQueCAmJiBmaXJzdFBvaW50LnkgPT09IGxhc3RQb2ludC55KVxuICAgIHtcbiAgICAgICAgLy8gbmVlZCB0byBjbG9uZSBhcyB3ZSBhcmUgZ29pbmcgdG8gc2xpZ2h0bHkgbW9kaWZ5IHRoZSBzaGFwZS4uXG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5zbGljZSgpO1xuXG4gICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHZhciBtaWRQb2ludFggPSBsYXN0UG9pbnQueCArIChmaXJzdFBvaW50LnggLSBsYXN0UG9pbnQueCkgKjAuNTtcbiAgICAgICAgdmFyIG1pZFBvaW50WSA9IGxhc3RQb2ludC55ICsgKGZpcnN0UG9pbnQueSAtIGxhc3RQb2ludC55KSAqMC41O1xuXG4gICAgICAgIHBvaW50cy51bnNoaWZ0KG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICAgICAgcG9pbnRzLnB1c2gobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgdmFyIGluZGV4Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIHZhciBpbmRleFN0YXJ0ID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAvLyBEUkFXIHRoZSBMaW5lXG4gICAgdmFyIHdpZHRoID0gZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEubGluZUNvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEubGluZUFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHB4LCBweSwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeTtcbiAgICB2YXIgcGVycHgsIHBlcnB5LCBwZXJwMngsIHBlcnAyeSwgcGVycDN4LCBwZXJwM3k7XG4gICAgdmFyIGExLCBiMSwgYzEsIGEyLCBiMiwgYzI7XG4gICAgdmFyIGRlbm9tLCBwZGlzdCwgZGlzdDtcblxuICAgIHAxeCA9IHBvaW50c1swXTtcbiAgICBwMXkgPSBwb2ludHNbMV07XG5cbiAgICBwMnggPSBwb2ludHNbMl07XG4gICAgcDJ5ID0gcG9pbnRzWzNdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSAgcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcblxuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIC8vIHN0YXJ0XG4gICAgdmVydHMucHVzaChwMXggLSBwZXJweCAsIHAxeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDF4ICsgcGVycHggLCBwMXkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoLTE7IGkrKylcbiAgICB7XG4gICAgICAgIHAxeCA9IHBvaW50c1soaS0xKSoyXTtcbiAgICAgICAgcDF5ID0gcG9pbnRzWyhpLTEpKjIgKyAxXTtcblxuICAgICAgICBwMnggPSBwb2ludHNbKGkpKjJdO1xuICAgICAgICBwMnkgPSBwb2ludHNbKGkpKjIgKyAxXTtcblxuICAgICAgICBwM3ggPSBwb2ludHNbKGkrMSkqMl07XG4gICAgICAgIHAzeSA9IHBvaW50c1soaSsxKSoyICsgMV07XG5cbiAgICAgICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgICAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgICAgICBwZXJwMnggPSAtKHAyeSAtIHAzeSk7XG4gICAgICAgIHBlcnAyeSA9IHAyeCAtIHAzeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAyeCpwZXJwMnggKyBwZXJwMnkqcGVycDJ5KTtcbiAgICAgICAgcGVycDJ4IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeSAvPSBkaXN0O1xuICAgICAgICBwZXJwMnggKj0gd2lkdGg7XG4gICAgICAgIHBlcnAyeSAqPSB3aWR0aDtcblxuICAgICAgICBhMSA9ICgtcGVycHkgKyBwMXkpIC0gKC1wZXJweSArIHAyeSk7XG4gICAgICAgIGIxID0gKC1wZXJweCArIHAyeCkgLSAoLXBlcnB4ICsgcDF4KTtcbiAgICAgICAgYzEgPSAoLXBlcnB4ICsgcDF4KSAqICgtcGVycHkgKyBwMnkpIC0gKC1wZXJweCArIHAyeCkgKiAoLXBlcnB5ICsgcDF5KTtcbiAgICAgICAgYTIgPSAoLXBlcnAyeSArIHAzeSkgLSAoLXBlcnAyeSArIHAyeSk7XG4gICAgICAgIGIyID0gKC1wZXJwMnggKyBwMngpIC0gKC1wZXJwMnggKyBwM3gpO1xuICAgICAgICBjMiA9ICgtcGVycDJ4ICsgcDN4KSAqICgtcGVycDJ5ICsgcDJ5KSAtICgtcGVycDJ4ICsgcDJ4KSAqICgtcGVycDJ5ICsgcDN5KTtcblxuICAgICAgICBkZW5vbSA9IGExKmIyIC0gYTIqYjE7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8IDAuMSApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgZGVub20rPTEwLjE7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4ID0gKGIxKmMyIC0gYjIqYzEpL2Rlbm9tO1xuICAgICAgICBweSA9IChhMipjMSAtIGExKmMyKS9kZW5vbTtcblxuXG4gICAgICAgIHBkaXN0ID0gKHB4IC1wMngpICogKHB4IC1wMngpICsgKHB5IC1wMnkpICogKHB5IC1wMnkpO1xuXG5cbiAgICAgICAgaWYgKHBkaXN0ID4gMTQwICogMTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICBwZXJwM3ggPSBwZXJweCAtIHBlcnAyeDtcbiAgICAgICAgICAgIHBlcnAzeSA9IHBlcnB5IC0gcGVycDJ5O1xuXG4gICAgICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAzeCpwZXJwM3ggKyBwZXJwM3kqcGVycDN5KTtcbiAgICAgICAgICAgIHBlcnAzeCAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN5IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3ggKj0gd2lkdGg7XG4gICAgICAgICAgICBwZXJwM3kgKj0gd2lkdGg7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJwM3gsIHAyeSArcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGV4Q291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmVydHMucHVzaChweCAsIHB5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIChweC1wMngpLCBwMnkgLSAocHkgLSBwMnkpKTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcDF4ID0gcG9pbnRzWyhsZW5ndGgtMikqMl07XG4gICAgcDF5ID0gcG9pbnRzWyhsZW5ndGgtMikqMiArIDFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWyhsZW5ndGgtMSkqMl07XG4gICAgcDJ5ID0gcG9pbnRzWyhsZW5ndGgtMSkqMiArIDFdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KyspO1xuICAgIH1cblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0LTEpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZExpbmU7IiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5XZWJHTEdyYXBoaWNzRGF0YX0gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChwb2ludHMsIG51bGwsIDIpO1xuXG4gICAgaWYgKCF0cmlhbmdsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoIC8gNjtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gK3ZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZXJ0UG9zKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2ZXJ0cy5wdXNoKHBvaW50c1tpICogMl0sIHBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFBvbHk7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gLS0tIC8vXG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgLy9cbiAgICB2YXIgcmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSByZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSByZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICAvLyBzdGFydFxuICAgICAgICB2ZXJ0cy5wdXNoKHgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCAsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIC8vIGluc2VydCAyIGRlYWQgdHJpYW5nbGVzLi5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRQb3MsIHZlcnRQb3MsIHZlcnRQb3MrMSwgdmVydFBvcysyLCB2ZXJ0UG9zKzMsIHZlcnRQb3MrMyk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFt4LCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHldO1xuXG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUmVjdGFuZ2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcbiAgICBcbi8qKlxuICogQnVpbGRzIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbmJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcnJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcnJlY3REYXRhLng7XG4gICAgdmFyIHkgPSBycmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSBycmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJyZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICB2YXIgcmFkaXVzID0gcnJlY3REYXRhLnJhZGl1cztcblxuICAgIHZhciByZWNQb2ludHMgPSBbXTtcbiAgICByZWNQb2ludHMucHVzaCh4LCB5ICsgcmFkaXVzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHgsIHkgKyBoZWlnaHQsIHggKyByYWRpdXMsIHkgKyBoZWlnaHQsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoLCB5ICsgcmFkaXVzLCB4ICsgd2lkdGgsIHksIHggKyB3aWR0aCAtIHJhZGl1cywgeSwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyByYWRpdXMsIHksIHgsIHksIHgsIHkgKyByYWRpdXMgKyAwLjAwMDAwMDAwMDEsIHJlY1BvaW50cyk7XG5cbiAgICAvLyB0aGlzIHRpbnkgbnVtYmVyIGRlYWxzIHdpdGggdGhlIGlzc3VlIHRoYXQgb2NjdXJzIHdoZW4gcG9pbnRzIG92ZXJsYXAgYW5kIGVhcmN1dCBmYWlscyB0byB0cmlhbmd1bGF0ZSB0aGUgaXRlbS5cbiAgICAvLyBUT0RPIC0gZml4IHRoaXMgcHJvcGVybHksIHRoaXMgaXMgbm90IHZlcnkgZWxlZ2FudC4uIGJ1dCBpdCB3b3JrcyBmb3Igbm93LlxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocmVjUG9pbnRzLCBudWxsLCAyKTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlY1BvaW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaChyZWNQb2ludHNbaV0sIHJlY1BvaW50c1srK2ldLCByLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gcmVjUG9pbnRzO1xuXG4gICAgICAgIHRoaXMuYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUuIChoZWxwZXIgZnVuY3Rpb24uLilcbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZyb21YIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gZnJvbVkge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEBwYXJhbSBbb3V0XSB7bnVtYmVyW119IFRoZSBvdXRwdXQgYXJyYXkgdG8gYWRkIHBvaW50cyBpbnRvLiBJZiBub3QgcGFzc2VkLCBhIG5ldyBhcnJheSBpcyBjcmVhdGVkLlxuICogQHJldHVybiB7bnVtYmVyW119IGFuIGFycmF5IG9mIHBvaW50c1xuICovXG5xdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IGZ1bmN0aW9uIChmcm9tWCwgZnJvbVksIGNwWCwgY3BZLCB0b1gsIHRvWSwgb3V0KVxue1xuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIHhiLFxuICAgICAgICB5YixcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSBvdXQgfHwgW107XG5cbiAgICBmdW5jdGlvbiBnZXRQdChuMSAsIG4yLCBwZXJjKSB7XG4gICAgICAgIHZhciBkaWZmID0gbjIgLSBuMTtcblxuICAgICAgICByZXR1cm4gbjEgKyAoIGRpZmYgKiBwZXJjICk7XG4gICAgfVxuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKyApIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIC8vIFRoZSBHcmVlbiBMaW5lXG4gICAgICAgIHhhID0gZ2V0UHQoIGZyb21YICwgY3BYICwgaiApO1xuICAgICAgICB5YSA9IGdldFB0KCBmcm9tWSAsIGNwWSAsIGogKTtcbiAgICAgICAgeGIgPSBnZXRQdCggY3BYICwgdG9YICwgaiApO1xuICAgICAgICB5YiA9IGdldFB0KCBjcFkgLCB0b1kgLCBqICk7XG5cbiAgICAgICAgLy8gVGhlIEJsYWNrIERvdFxuICAgICAgICB4ID0gZ2V0UHQoIHhhICwgeGIgLCBqICk7XG4gICAgICAgIHkgPSBnZXRQdCggeWEgLCB5YiAsIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUm91bmRlZFJlY3RhbmdsZTsiLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBjb3JlIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSVxuICovXG4vLyBleHBvcnQgY29yZSBhbmQgY29uc3QuIFdlIGFzc2lnbiBjb3JlIHRvIGNvbnN0IHNvIHRoYXQgdGhlIG5vbi1yZWZlcmVuY2UgdHlwZXMgaW4gY29uc3QgcmVtYWluIGluLXRhY3RcbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduKHJlcXVpcmUoJy4vY29uc3QnKSwgcmVxdWlyZSgnLi9tYXRoJyksIHtcbiAgICAvLyB1dGlsc1xuICAgIHV0aWxzOiByZXF1aXJlKCcuL3V0aWxzJyksXG4gICAgdGlja2VyOiByZXF1aXJlKCcuL3RpY2tlcicpLFxuXG4gICAgLy8gZGlzcGxheVxuICAgIERpc3BsYXlPYmplY3Q6ICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9EaXNwbGF5T2JqZWN0JyksXG4gICAgQ29udGFpbmVyOiAgICAgICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuXG4gICAgLy8gc3ByaXRlc1xuICAgIFNwcml0ZTogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBQYXJ0aWNsZUNvbnRhaW5lcjogICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lcicpLFxuICAgIFNwcml0ZVJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHRcbiAgICBUZXh0OiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHQvVGV4dCcpLFxuXG4gICAgLy8gcHJpbWl0aXZlc1xuICAgIEdyYXBoaWNzOiAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGE6ICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRGF0YScpLFxuICAgIEdyYXBoaWNzUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dHVyZXNcbiAgICBUZXh0dXJlOiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBCYXNlVGV4dHVyZTogICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL0Jhc2VUZXh0dXJlJyksXG4gICAgUmVuZGVyVGV4dHVyZTogICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgQmFzZVJlbmRlclRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmU6ICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnM6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVGV4dHVyZVV2cycpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gY2FudmFzXG4gICAgQ2FudmFzUmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyJyksXG4gICAgQ2FudmFzR3JhcGhpY3M6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzJyksXG4gICAgQ2FudmFzQnVmZmVyOiAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuXG4gICAgLy8gcmVuZGVyZXJzIC0gd2ViZ2xcbiAgICBXZWJHTFJlbmRlcmVyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyOiAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgU2hhZGVyOiAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXInKSxcbiAgICBPYmplY3RSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFJlbmRlclRhcmdldDogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuXG4gICAgLy8gZmlsdGVycyAtIHdlYmdsXG4gICAgQWJzdHJhY3RGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlcicpLFxuICAgIEZYQUFGaWx0ZXI6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFNwcml0ZU1hc2tGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvU3ByaXRlTWFza0ZpbHRlcicpLFxuXG4gICAgZ2xDb3JlOiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3Qgd2hpY2ggcmVuZGVyZXIgeW91IHNob3VsZCBiZSB1c2luZy5cbiAgICAgKiBXZWJHTCBpcyB0aGUgcHJlZmVycmVkIHJlbmRlcmVyIGFzIGl0IGlzIGEgbG90IGZhc3Rlci4gSWYgd2ViR0wgaXMgbm90IHN1cHBvcnRlZCBieVxuICAgICAqIHRoZSBicm93c2VyIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhIGNhbnZhcyByZW5kZXJlclxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAcGFyYW0gd2lkdGg9ODAwIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gaGVpZ2h0PTYwMCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSByZW5kZXJlcnMgdmlld1xuICAgICAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gICAgICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZV0ge2Jvb2xlYW59IGVuYWJsZXMgZHJhd2luZyBidWZmZXIgcHJlc2VydmF0aW9uLCBlbmFibGUgdGhpcyBpZiB5b3VcbiAgICAgKiAgICAgIG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIsIHJldGluYSB3b3VsZCBiZSAyXG4gICAgICogQHBhcmFtIFtub1dlYkdMPWZhbHNlXSB7Ym9vbGVhbn0gcHJldmVudHMgc2VsZWN0aW9uIG9mIFdlYkdMIHJlbmRlcmVyLCBldmVuIGlmIHN1Y2ggaXMgcHJlc2VudFxuICAgICAqXG4gICAgICogQHJldHVybiB7V2ViR0xSZW5kZXJlcnxDYW52YXNSZW5kZXJlcn0gUmV0dXJucyBXZWJHTCByZW5kZXJlciBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBDYW52YXNSZW5kZXJlclxuICAgICAqL1xuICAgIGF1dG9EZXRlY3RSZW5kZXJlcjogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMsIG5vV2ViR0wpXG4gICAge1xuICAgICAgICB3aWR0aCA9IHdpZHRoIHx8IDgwMDtcbiAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0IHx8IDYwMDtcblxuICAgICAgICBpZiAoIW5vV2ViR0wgJiYgY29yZS51dGlscy5pc1dlYkdMU3VwcG9ydGVkKCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgY29yZS5XZWJHTFJlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBjb3JlLkNhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuICAgIH1cbn0pO1xuIiwiLy8gQHRvZG8gLSBpZ25vcmUgdGhlIHRvbyBtYW55IHBhcmFtZXRlcnMgd2FybmluZyBmb3Igbm93XG4vLyBzaG91bGQgZWl0aGVyIGZpeCBpdCBvciBjaGFuZ2UgdGhlIGpzaGludCBjb25maWdcbi8vIGpzaGludCAtVzA3MlxuXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuL1BvaW50Jyk7XG5cbi8qKlxuICogVGhlIHBpeGkgTWF0cml4IGNsYXNzIGFzIGFuIG9iamVjdCwgd2hpY2ggbWFrZXMgaXQgYSBsb3QgZmFzdGVyLFxuICogaGVyZSBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIGl0IDpcbiAqIHwgYSB8IGIgfCB0eHxcbiAqIHwgYyB8IGQgfCB0eXxcbiAqIHwgMCB8IDAgfCAxIHxcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIE1hdHJpeCgpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmIgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmMgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnR4ID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eSA9IDA7XG59XG5cbk1hdHJpeC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNYXRyaXg7XG5tb2R1bGUuZXhwb3J0cyA9IE1hdHJpeDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgTWF0cml4IG9iamVjdCBiYXNlZCBvbiB0aGUgZ2l2ZW4gYXJyYXkuIFRoZSBFbGVtZW50IHRvIE1hdHJpeCBtYXBwaW5nIG9yZGVyIGlzIGFzIGZvbGxvd3M6XG4gKlxuICogYSA9IGFycmF5WzBdXG4gKiBiID0gYXJyYXlbMV1cbiAqIGMgPSBhcnJheVszXVxuICogZCA9IGFycmF5WzRdXG4gKiB0eCA9IGFycmF5WzJdXG4gKiB0eSA9IGFycmF5WzVdXG4gKlxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX0gVGhlIGFycmF5IHRoYXQgdGhlIG1hdHJpeCB3aWxsIGJlIHBvcHVsYXRlZCBmcm9tLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJheSlcbntcbiAgICB0aGlzLmEgPSBhcnJheVswXTtcbiAgICB0aGlzLmIgPSBhcnJheVsxXTtcbiAgICB0aGlzLmMgPSBhcnJheVszXTtcbiAgICB0aGlzLmQgPSBhcnJheVs0XTtcbiAgICB0aGlzLnR4ID0gYXJyYXlbMl07XG4gICAgdGhpcy50eSA9IGFycmF5WzVdO1xufTtcblxuXG4vKipcbiAqIHNldHMgdGhlIG1hdHJpeCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gKiBAcGFyYW0ge251bWJlcn0gY1xuICogQHBhcmFtIHtudW1iZXJ9IGRcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eFxuICogQHBhcmFtIHtudW1iZXJ9IHR5XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHR4LCB0eSlcbntcbiAgICB0aGlzLmEgPSBhO1xuICAgIHRoaXMuYiA9IGI7XG4gICAgdGhpcy5jID0gYztcbiAgICB0aGlzLmQgPSBkO1xuICAgIHRoaXMudHggPSB0eDtcbiAgICB0aGlzLnR5ID0gdHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGZyb20gdGhlIGN1cnJlbnQgTWF0cml4IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3NlIHtib29sZWFufSBXaGV0aGVyIHdlIG5lZWQgdG8gdHJhbnNwb3NlIHRoZSBtYXRyaXggb3Igbm90XG4gKiBAcGFyYW0gW291dF0ge0FycmF5fSBJZiBwcm92aWRlZCB0aGUgYXJyYXkgd2lsbCBiZSBhc3NpZ25lZCB0byBvdXRcbiAqIEByZXR1cm4ge251bWJlcltdfSB0aGUgbmV3bHkgY3JlYXRlZCBhcnJheSB3aGljaCBjb250YWlucyB0aGUgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICh0cmFuc3Bvc2UsIG91dClcbntcbiAgICBpZiAoIXRoaXMuYXJyYXkpXG4gICAge1xuICAgICAgICB0aGlzLmFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg5KTtcbiAgICB9XG5cbiAgICB2YXIgYXJyYXkgPSBvdXQgfHwgdGhpcy5hcnJheTtcblxuICAgIGlmICh0cmFuc3Bvc2UpXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzJdID0gMDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IDA7XG4gICAgICAgIGFycmF5WzZdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbN10gPSB0aGlzLnR5O1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGFycmF5WzBdID0gdGhpcy5hO1xuICAgICAgICBhcnJheVsxXSA9IHRoaXMuYztcbiAgICAgICAgYXJyYXlbMl0gPSB0aGlzLnR4O1xuICAgICAgICBhcnJheVszXSA9IHRoaXMuYjtcbiAgICAgICAgYXJyYXlbNF0gPSB0aGlzLmQ7XG4gICAgICAgIGFycmF5WzVdID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbNl0gPSAwO1xuICAgICAgICBhcnJheVs3XSA9IDA7XG4gICAgICAgIGFycmF5WzhdID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59O1xuXG4vKipcbiAqIEdldCBhIG5ldyBwb3NpdGlvbiB3aXRoIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXG4gKiBDYW4gYmUgdXNlZCB0byBnbyBmcm9tIGEgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlIHRvIHRoZSB3b3JsZCBjb29yZGluYXRlIHNwYWNlLiAoZS5nLiByZW5kZXJpbmcpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCB0cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIHggPSBwb3MueDtcbiAgICB2YXIgeSA9IHBvcy55O1xuXG4gICAgbmV3UG9zLnggPSB0aGlzLmEgKiB4ICsgdGhpcy5jICogeSArIHRoaXMudHg7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmIgKiB4ICsgdGhpcy5kICogeSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gbmV3UG9zO1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgaW52ZXJzZSBvZiB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZSB0byBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gaW5wdXQpXG4gKlxuICogQHBhcmFtIHBvcyB7UElYSS5Qb2ludH0gVGhlIG9yaWdpblxuICogQHBhcmFtIFtuZXdQb3NdIHtQSVhJLlBvaW50fSBUaGUgcG9pbnQgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGlzIGFzc2lnbmVkIHRvIChhbGxvd2VkIHRvIGJlIHNhbWUgYXMgaW5wdXQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBUaGUgbmV3IHBvaW50LCBpbnZlcnNlLXRyYW5zZm9ybWVkIHRocm91Z2ggdGhpcyBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBseUludmVyc2UgPSBmdW5jdGlvbiAocG9zLCBuZXdQb3MpXG57XG4gICAgbmV3UG9zID0gbmV3UG9zIHx8IG5ldyBQb2ludCgpO1xuXG4gICAgdmFyIGlkID0gMSAvICh0aGlzLmEgKiB0aGlzLmQgKyB0aGlzLmMgKiAtdGhpcy5iKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5kICogaWQgKiB4ICsgLXRoaXMuYyAqIGlkICogeSArICh0aGlzLnR5ICogdGhpcy5jIC0gdGhpcy50eCAqIHRoaXMuZCkgKiBpZDtcbiAgICBuZXdQb3MueSA9IHRoaXMuYSAqIGlkICogeSArIC10aGlzLmIgKiBpZCAqIHggKyAoLXRoaXMudHkgKiB0aGlzLmEgKyB0aGlzLnR4ICogdGhpcy5iKSAqIGlkO1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogVHJhbnNsYXRlcyB0aGUgbWF0cml4IG9uIHRoZSB4IGFuZCB5LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUudHJhbnNsYXRlID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy50eCArPSB4O1xuICAgIHRoaXMudHkgKz0geTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgc2NhbGUgdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geCBUaGUgYW1vdW50IHRvIHNjYWxlIGhvcml6b250YWxseVxuICogQHBhcmFtIHtudW1iZXJ9IHkgVGhlIGFtb3VudCB0byBzY2FsZSB2ZXJ0aWNhbGx5XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zY2FsZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuYSAqPSB4O1xuICAgIHRoaXMuZCAqPSB5O1xuICAgIHRoaXMuYyAqPSB4O1xuICAgIHRoaXMuYiAqPSB5O1xuICAgIHRoaXMudHggKj0geDtcbiAgICB0aGlzLnR5ICo9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBBcHBsaWVzIGEgcm90YXRpb24gdHJhbnNmb3JtYXRpb24gdG8gdGhlIG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgaW4gcmFkaWFucy5cbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZSA9IGZ1bmN0aW9uIChhbmdsZSlcbntcbiAgICB2YXIgY29zID0gTWF0aC5jb3MoIGFuZ2xlICk7XG4gICAgdmFyIHNpbiA9IE1hdGguc2luKCBhbmdsZSApO1xuXG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIHRoaXMuYSA9IGExICogY29zLXRoaXMuYiAqIHNpbjtcbiAgICB0aGlzLmIgPSBhMSAqIHNpbit0aGlzLmIgKiBjb3M7XG4gICAgdGhpcy5jID0gYzEgKiBjb3MtdGhpcy5kICogc2luO1xuICAgIHRoaXMuZCA9IGMxICogc2luK3RoaXMuZCAqIGNvcztcbiAgICB0aGlzLnR4ID0gdHgxICogY29zIC0gdGhpcy50eSAqIHNpbjtcbiAgICB0aGlzLnR5ID0gdHgxICogc2luICsgdGhpcy50eSAqIGNvcztcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcblxuICAgIHRoaXMuYSAgPSBtYXRyaXguYSAqIGExICsgbWF0cml4LmIgKiBjMTtcbiAgICB0aGlzLmIgID0gbWF0cml4LmEgKiBiMSArIG1hdHJpeC5iICogZDE7XG4gICAgdGhpcy5jICA9IG1hdHJpeC5jICogYTEgKyBtYXRyaXguZCAqIGMxO1xuICAgIHRoaXMuZCAgPSBtYXRyaXguYyAqIGIxICsgbWF0cml4LmQgKiBkMTtcblxuICAgIHRoaXMudHggPSBtYXRyaXgudHggKiBhMSArIG1hdHJpeC50eSAqIGMxICsgdGhpcy50eDtcbiAgICB0aGlzLnR5ID0gbWF0cml4LnR4ICogYjEgKyBtYXRyaXgudHkgKiBkMSArIHRoaXMudHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbWF0cml4IGJhc2VkIG9uIGFsbCB0aGUgYXZhaWxhYmxlIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFhcbiAqIEBwYXJhbSB7bnVtYmVyfSBwaXZvdFlcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVlcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3RhdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdYXG4gKiBAcGFyYW0ge251bWJlcn0gc2tld1lcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoeCwgeSwgcGl2b3RYLCBwaXZvdFksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZKVxue1xuICAgIHZhciBhLCBiLCBjLCBkLCBzciwgY3IsIGN5LCBzeSwgbnN4LCBjeDtcblxuICAgIHNyICA9IE1hdGguc2luKHJvdGF0aW9uKTtcbiAgICBjciAgPSBNYXRoLmNvcyhyb3RhdGlvbik7XG4gICAgY3kgID0gTWF0aC5jb3Moc2tld1kpO1xuICAgIHN5ICA9IE1hdGguc2luKHNrZXdZKTtcbiAgICBuc3ggPSAtTWF0aC5zaW4oc2tld1gpO1xuICAgIGN4ICA9ICBNYXRoLmNvcyhza2V3WCk7XG5cbiAgICBhICA9ICBjciAqIHNjYWxlWDtcbiAgICBiICA9ICBzciAqIHNjYWxlWDtcbiAgICBjICA9IC1zciAqIHNjYWxlWTtcbiAgICBkICA9ICBjciAqIHNjYWxlWTtcblxuICAgIHRoaXMuYSAgPSBjeSAqIGEgKyBzeSAqIGM7XG4gICAgdGhpcy5iICA9IGN5ICogYiArIHN5ICogZDtcbiAgICB0aGlzLmMgID0gbnN4ICogYSArIGN4ICogYztcbiAgICB0aGlzLmQgID0gbnN4ICogYiArIGN4ICogZDtcblxuICAgIHRoaXMudHggPSB4ICsgKCBwaXZvdFggKiBhICsgcGl2b3RZICogYyApO1xuICAgIHRoaXMudHkgPSB5ICsgKCBwaXZvdFggKiBiICsgcGl2b3RZICogZCApO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFByZXBlbmRzIHRoZSBnaXZlbiBNYXRyaXggdG8gdGhpcyBNYXRyaXguXG4gKlxuICogQHBhcmFtIHtQSVhJLk1hdHJpeH0gbWF0cml4XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24obWF0cml4KVxue1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuXG4gICAgaWYgKG1hdHJpeC5hICE9PSAxIHx8IG1hdHJpeC5iICE9PSAwIHx8IG1hdHJpeC5jICE9PSAwIHx8IG1hdHJpeC5kICE9PSAxKVxuICAgIHtcbiAgICAgICAgdmFyIGExID0gdGhpcy5hO1xuICAgICAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgICAgIHRoaXMuYSAgPSBhMSptYXRyaXguYSt0aGlzLmIqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuYiAgPSBhMSptYXRyaXguYit0aGlzLmIqbWF0cml4LmQ7XG4gICAgICAgIHRoaXMuYyAgPSBjMSptYXRyaXguYSt0aGlzLmQqbWF0cml4LmM7XG4gICAgICAgIHRoaXMuZCAgPSBjMSptYXRyaXguYit0aGlzLmQqbWF0cml4LmQ7XG4gICAgfVxuXG4gICAgdGhpcy50eCA9IHR4MSptYXRyaXguYSt0aGlzLnR5Km1hdHJpeC5jK21hdHJpeC50eDtcbiAgICB0aGlzLnR5ID0gdHgxKm1hdHJpeC5iK3RoaXMudHkqbWF0cml4LmQrbWF0cml4LnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEludmVydHMgdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5pbnZlcnQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBiMSA9IHRoaXMuYjtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIGQxID0gdGhpcy5kO1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuICAgIHZhciBuID0gYTEqZDEtYjEqYzE7XG5cbiAgICB0aGlzLmEgPSBkMS9uO1xuICAgIHRoaXMuYiA9IC1iMS9uO1xuICAgIHRoaXMuYyA9IC1jMS9uO1xuICAgIHRoaXMuZCA9IGExL247XG4gICAgdGhpcy50eCA9IChjMSp0aGlzLnR5LWQxKnR4MSkvbjtcbiAgICB0aGlzLnR5ID0gLShhMSp0aGlzLnR5LWIxKnR4MSkvbjtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIFJlc2V0cyB0aGlzIE1hdGl4IHRvIGFuIGlkZW50aXR5IChkZWZhdWx0KSBtYXRyaXguXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaWRlbnRpdHkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYSA9IDE7XG4gICAgdGhpcy5iID0gMDtcbiAgICB0aGlzLmMgPSAwO1xuICAgIHRoaXMuZCA9IDE7XG4gICAgdGhpcy50eCA9IDA7XG4gICAgdGhpcy50eSA9IDA7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBNYXRyaXggb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBBIGNvcHkgb2YgdGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1hdHJpeCA9IG5ldyBNYXRyaXgoKTtcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSB2YWx1ZXMgb2YgdGhlIGdpdmVuIG1hdHJpeCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgb25lcyBpbiB0aGlzIG1hdHJpeFxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGUgbWF0cml4IGdpdmVuIGluIHBhcmFtZXRlciB3aXRoIGl0cyB2YWx1ZXMgdXBkYXRlZC5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBtYXRyaXguYSA9IHRoaXMuYTtcbiAgICBtYXRyaXguYiA9IHRoaXMuYjtcbiAgICBtYXRyaXguYyA9IHRoaXMuYztcbiAgICBtYXRyaXguZCA9IHRoaXMuZDtcbiAgICBtYXRyaXgudHggPSB0aGlzLnR4O1xuICAgIG1hdHJpeC50eSA9IHRoaXMudHk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xufTtcblxuLyoqXG4gKiBBIGRlZmF1bHQgKGlkZW50aXR5KSBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LklERU5USVRZID0gbmV3IE1hdHJpeCgpO1xuXG4vKipcbiAqIEEgdGVtcCBtYXRyaXhcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqL1xuTWF0cml4LlRFTVBfTUFUUklYID0gbmV3IE1hdHJpeCgpO1xuIiwiLyoqXG4gKiBUaGUgUG9pbnQgb2JqZWN0IHJlcHJlc2VudHMgYSBsb2NhdGlvbiBpbiBhIHR3by1kaW1lbnNpb25hbCBjb29yZGluYXRlIHN5c3RlbSwgd2hlcmUgeCByZXByZXNlbnRzXG4gKiB0aGUgaG9yaXpvbnRhbCBheGlzIGFuZCB5IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIGF4aXMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXNcbiAqL1xuZnVuY3Rpb24gUG9pbnQoeCwgeSlcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xufVxuXG5Qb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2ludDtcbm1vZHVsZS5leHBvcnRzID0gUG9pbnQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9pbnRcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBhIGNvcHkgb2YgdGhlIHBvaW50XG4gKi9cblBvaW50LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLngsIHRoaXMueSk7XG59O1xuXG4vKipcbiAqIENvcGllcyB4IGFuZCB5IGZyb20gdGhlIGdpdmVuIHBvaW50XG4gKlxuICogQHBhcmFtIHAge1BJWEkuUG9pbnR9XG4gKi9cblBvaW50LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKHApIHtcbiAgICB0aGlzLnNldChwLngsIHAueSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcG9pbnQgaXMgZXF1YWwgdG8gdGhpcyBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cblBvaW50LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiAocC54ID09PSB0aGlzLngpICYmIChwLnkgPT09IHRoaXMueSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIHBvaW50IHRvIGEgbmV3IHggYW5kIHkgcG9zaXRpb24uXG4gKiBJZiB5IGlzIG9taXR0ZWQsIGJvdGggeCBhbmQgeSB3aWxsIGJlIHNldCB0byB4LlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cblBvaW50LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLnggPSB4IHx8IDA7XG4gICAgdGhpcy55ID0geSB8fCAoICh5ICE9PSAwKSA/IHRoaXMueCA6IDAgKSA7XG59O1xuIiwiLyoqXG4gKiBNYXRoIGNsYXNzZXMgYW5kIHV0aWxpdGllcyBtaXhlZCBpbnRvIFBJWEkgbmFtZXNwYWNlLlxuICpcbiAqIEBsZW5kcyBQSVhJXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8vIFRoZXNlIHdpbGwgYmUgbWl4ZWQgdG8gYmUgbWFkZSBwdWJsaWNseSBhdmFpbGFibGUsXG4gICAgLy8gd2hpbGUgdGhpcyBtb2R1bGUgaXMgdXNlZCBpbnRlcm5hbGx5IGluIGNvcmVcbiAgICAvLyB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYW5kIGN1dCBkb3duIG9uXG4gICAgLy8gaW50ZXJuYWwgbW9kdWxlIHJlcXVpcmVzLlxuXG4gICAgUG9pbnQ6ICAgICAgcmVxdWlyZSgnLi9Qb2ludCcpLFxuICAgIE1hdHJpeDogICAgIHJlcXVpcmUoJy4vTWF0cml4JyksXG5cbiAgICBDaXJjbGU6ICAgICByZXF1aXJlKCcuL3NoYXBlcy9DaXJjbGUnKSxcbiAgICBFbGxpcHNlOiAgICByZXF1aXJlKCcuL3NoYXBlcy9FbGxpcHNlJyksXG4gICAgUG9seWdvbjogICAgcmVxdWlyZSgnLi9zaGFwZXMvUG9seWdvbicpLFxuICAgIFJlY3RhbmdsZTogIHJlcXVpcmUoJy4vc2hhcGVzL1JlY3RhbmdsZScpLFxuICAgIFJvdW5kZWRSZWN0YW5nbGU6IHJlcXVpcmUoJy4vc2hhcGVzL1JvdW5kZWRSZWN0YW5nbGUnKVxufTtcbiIsInZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2lyY2xlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKi9cbmZ1bmN0aW9uIENpcmNsZSh4LCB5LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuQ0lSQztcbn1cblxuQ2lyY2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENpcmNsZTtcbm1vZHVsZS5leHBvcnRzID0gQ2lyY2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIENpcmNsZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuQ2lyY2xlfSBhIGNvcHkgb2YgdGhlIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IENpcmNsZSh0aGlzLngsIHRoaXMueSwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGNpcmNsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgQ2lyY2xlXG4gKi9cbkNpcmNsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy5yYWRpdXMgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgZHggPSAodGhpcy54IC0geCksXG4gICAgICAgIGR5ID0gKHRoaXMueSAtIHkpLFxuICAgICAgICByMiA9IHRoaXMucmFkaXVzICogdGhpcy5yYWRpdXM7XG5cbiAgICBkeCAqPSBkeDtcbiAgICBkeSAqPSBkeTtcblxuICAgIHJldHVybiAoZHggKyBkeSA8PSByMik7XG59O1xuXG4vKipcbiogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIGNpcmNsZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuKi9cbkNpcmNsZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLnJhZGl1cywgdGhpcy55IC0gdGhpcy5yYWRpdXMsIHRoaXMucmFkaXVzICogMiwgdGhpcy5yYWRpdXMgKiAyKTtcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIEVsbGlwc2Ugb2JqZWN0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBoaXQgYXJlYSBmb3IgZGlzcGxheU9iamVjdHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBoYWxmIHdpZHRoIG9mIHRoaXMgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhpcyBlbGxpcHNlXG4gKi9cbmZ1bmN0aW9uIEVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuRUxJUDtcbn1cblxuRWxsaXBzZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFbGxpcHNlO1xubW9kdWxlLmV4cG9ydHMgPSBFbGxpcHNlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIEVsbGlwc2UgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkVsbGlwc2V9IGEgY29weSBvZiB0aGUgZWxsaXBzZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBFbGxpcHNlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgZWxsaXBzZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZHMgYXJlIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy9ub3JtYWxpemUgdGhlIGNvb3JkcyB0byBhbiBlbGxpcHNlIHdpdGggY2VudGVyIDAsMFxuICAgIHZhciBub3JteCA9ICgoeCAtIHRoaXMueCkgLyB0aGlzLndpZHRoKSxcbiAgICAgICAgbm9ybXkgPSAoKHkgLSB0aGlzLnkpIC8gdGhpcy5oZWlnaHQpO1xuXG4gICAgbm9ybXggKj0gbm9ybXg7XG4gICAgbm9ybXkgKj0gbm9ybXk7XG5cbiAgICByZXR1cm4gKG5vcm14ICsgbm9ybXkgPD0gMSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBlbGxpcHNlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLnggLSB0aGlzLndpZHRoLCB0aGlzLnkgLSB0aGlzLmhlaWdodCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcbiIsInZhciBQb2ludCA9IHJlcXVpcmUoJy4uL1BvaW50JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBwb2ludHMge1BJWEkuUG9pbnRbXXxudW1iZXJbXXwuLi5QSVhJLlBvaW50fC4uLm51bWJlcn0gVGhpcyBjYW4gYmUgYW4gYXJyYXkgb2YgUG9pbnRzIHRoYXQgZm9ybSB0aGUgcG9seWdvbixcbiAqICAgICAgYSBmbGF0IGFycmF5IG9mIG51bWJlcnMgdGhhdCB3aWxsIGJlIGludGVycHJldGVkIGFzIFt4LHksIHgseSwgLi4uXSwgb3IgdGhlIGFyZ3VtZW50cyBwYXNzZWQgY2FuIGJlXG4gKiAgICAgIGFsbCB0aGUgcG9pbnRzIG9mIHRoZSBwb2x5Z29uIGUuZy4gYG5ldyBQSVhJLlBvbHlnb24obmV3IFBJWEkuUG9pbnQoKSwgbmV3IFBJWEkuUG9pbnQoKSwgLi4uKWAsIG9yIHRoZVxuICogICAgICBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZSBmbGF0IHgseSB2YWx1ZXMgZS5nLiBgbmV3IFBvbHlnb24oeCx5LCB4LHksIHgseSwgLi4uKWAgd2hlcmUgYHhgIGFuZCBgeWAgYXJlXG4gKiAgICAgIE51bWJlcnMuXG4gKi9cbmZ1bmN0aW9uIFBvbHlnb24ocG9pbnRzXylcbntcbiAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBhc3NpZ25tZW50IGRlb3B0XG4gICAgLy8gc2VlIHNlY3Rpb24gMy4xOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICB2YXIgcG9pbnRzID0gcG9pbnRzXztcblxuICAgIC8vaWYgcG9pbnRzIGlzbid0IGFuIGFycmF5LCB1c2UgYXJndW1lbnRzIGFzIHRoZSBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBwb2ludHMubGVuZ3RoOyArK2EpIHtcbiAgICAgICAgICAgIHBvaW50c1thXSA9IGFyZ3VtZW50c1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHRoaXMgaXMgYW4gYXJyYXkgb2YgcG9pbnRzLCBjb252ZXJ0IGl0IHRvIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzXG4gICAgaWYgKHBvaW50c1swXSBpbnN0YW5jZW9mIFBvaW50KVxuICAgIHtcbiAgICAgICAgdmFyIHAgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHAucHVzaChwb2ludHNbaV0ueCwgcG9pbnRzW2ldLnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9pbnRzID0gcDtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB0aGUgcG9pbnRzIG9mIHRoaXMgcG9seWdvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlBPTFk7XG59XG5cblBvbHlnb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9seWdvbjtcbm1vZHVsZS5leHBvcnRzID0gUG9seWdvbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBwb2x5Z29uXG4gKlxuICogQHJldHVybiB7UElYSS5Qb2x5Z29ufSBhIGNvcHkgb2YgdGhlIHBvbHlnb25cbiAqL1xuUG9seWdvbi5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9seWdvbih0aGlzLnBvaW50cy5zbGljZSgpKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIGluc2lkZSA9IGZhbHNlO1xuXG4gICAgLy8gdXNlIHNvbWUgcmF5Y2FzdGluZyB0byB0ZXN0IGhpdHNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svcG9pbnQtaW4tcG9seWdvbi9ibG9iL21hc3Rlci9pbmRleC5qc1xuICAgIHZhciBsZW5ndGggPSB0aGlzLnBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBsZW5ndGggLSAxOyBpIDwgbGVuZ3RoOyBqID0gaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHhpID0gdGhpcy5wb2ludHNbaSAqIDJdLCB5aSA9IHRoaXMucG9pbnRzW2kgKiAyICsgMV0sXG4gICAgICAgICAgICB4aiA9IHRoaXMucG9pbnRzW2ogKiAyXSwgeWogPSB0aGlzLnBvaW50c1tqICogMiArIDFdLFxuICAgICAgICAgICAgaW50ZXJzZWN0ID0gKCh5aSA+IHkpICE9PSAoeWogPiB5KSkgJiYgKHggPCAoeGogLSB4aSkgKiAoeSAtIHlpKSAvICh5aiAtIHlpKSArIHhpKTtcblxuICAgICAgICBpZiAoaW50ZXJzZWN0KVxuICAgICAgICB7XG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc2lkZTtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIHRoZSBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgZGVmaW5lZCBieSBpdHMgcG9zaXRpb24sIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCB3aWR0aCBvZiB0aGlzIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByZWN0YW5nbGVcbiAqL1xuZnVuY3Rpb24gUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJFQ1Q7XG59XG5cblJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZWN0YW5nbGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlY3RhbmdsZTtcblxuLyoqXG4gKiBBIGNvbnN0YW50IGVtcHR5IHJlY3RhbmdsZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuUmVjdGFuZ2xlLkVNUFRZID0gbmV3IFJlY3RhbmdsZSgwLCAwLCAwLCAwKTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgUmVjdGFuZ2xlXG4gKi9cblJlY3RhbmdsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHggPj0gdGhpcy54ICYmIHggPCB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPCB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUm91bmRlZCBSZWN0YW5nbGUgb2JqZWN0IGlzIGFuIGFyZWEgdGhhdCBoYXMgbmljZSByb3VuZGVkIGNvcm5lcnMsIGFzIGluZGljYXRlZCBieSBpdHMgdG9wLWxlZnQgY29ybmVyIHBvaW50ICh4LCB5KSBhbmQgYnkgaXRzIHdpZHRoIGFuZCBpdHMgaGVpZ2h0IGFuZCBpdHMgcmFkaXVzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhpcyByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBDb250cm9scyB0aGUgcmFkaXVzIG9mIHRoZSByb3VuZGVkIGNvcm5lcnNcbiAqL1xuZnVuY3Rpb24gUm91bmRlZFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMjBcbiAgICAgKi9cbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCAyMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUlJFQztcbn1cblxuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3VuZGVkUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3VuZGVkUmVjdGFuZ2xlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHJldHVybiB7UElYSS5Sb3VuZGVkUmVjdGFuZ2xlfSBhIGNvcHkgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFJvdW5kZWRSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnJhZGl1cyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKi9cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDw9IHRoaXMueCArIHRoaXMud2lkdGgpXG4gICAge1xuICAgICAgICBpZiAoeSA+PSB0aGlzLnkgJiYgeSA8PSB0aGlzLnkgKyB0aGlzLmhlaWdodClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBQYXJ0aWNsZUNvbnRhaW5lciBjbGFzcyBpcyBhIHJlYWxseSBmYXN0IHZlcnNpb24gb2YgdGhlIENvbnRhaW5lciBidWlsdCBzb2xlbHkgZm9yIHNwZWVkLFxuICogc28gdXNlIHdoZW4geW91IG5lZWQgYSBsb3Qgb2Ygc3ByaXRlcyBvciBwYXJ0aWNsZXMuIFRoZSB0cmFkZW9mZiBvZiB0aGUgUGFydGljbGVDb250YWluZXIgaXMgdGhhdCBhZHZhbmNlZFxuICogZnVuY3Rpb25hbGl0eSB3aWxsIG5vdCB3b3JrLiBQYXJ0aWNsZUNvbnRhaW5lciBpbXBsZW1lbnRzIG9ubHkgdGhlIGJhc2ljIG9iamVjdCB0cmFuc2Zvcm0gKHBvc2l0aW9uLCBzY2FsZSwgcm90YXRpb24pLlxuICogQW55IG90aGVyIGZ1bmN0aW9uYWxpdHkgbGlrZSB0aW50aW5nLCBtYXNraW5nLCBldGMgd2lsbCBub3Qgd29yayBvbiBzcHJpdGVzIGluIHRoaXMgYmF0Y2guXG4gKlxuICogSXQncyBleHRyZW1lbHkgZWFzeSB0byB1c2UgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgY29udGFpbmVyID0gbmV3IFBhcnRpY2xlQ29udGFpbmVyKCk7XG4gKlxuICogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSlcbiAqIHtcbiAqICAgICB2YXIgc3ByaXRlID0gbmV3IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcIm15SW1hZ2UucG5nXCIpO1xuICogICAgIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogfVxuICogYGBgXG4gKlxuICogQW5kIGhlcmUgeW91IGhhdmUgYSBodW5kcmVkIHNwcml0ZXMgdGhhdCB3aWxsIGJlIHJlbmRlcmVyIGF0IHRoZSBzcGVlZCBvZiBsaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIFttYXhTaXplPTE1MDAwXSB7bnVtYmVyfSBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFydGljbGVzIHRoYXQgY2FuIGJlIHJlbmRlcmVyIGJ5IHRoZSBjb250YWluZXIuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXNdIHtvYmplY3R9IFRoZSBwcm9wZXJ0aWVzIG9mIGNoaWxkcmVuIHRoYXQgc2hvdWxkIGJlIHVwbG9hZGVkIHRvIHRoZSBncHUgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuc2NhbGU9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHNjYWxlIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnBvc2l0aW9uPXRydWVdIHtib29sZWFufSBXaGVuIHRydWUsIHBvc2l0aW9uIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnJvdGF0aW9uPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCByb3RhdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy51dnM9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHV2cyBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5hbHBoYT1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgYWxwaGEgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW2JhdGNoU2l6ZT0xNTAwMF0ge251bWJlcn0gTnVtYmVyIG9mIHBhcnRpY2xlcyBwZXIgYmF0Y2guXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQ29udGFpbmVyKG1heFNpemUsIHByb3BlcnRpZXMsIGJhdGNoU2l6ZSlcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIGJhdGNoU2l6ZSA9IGJhdGNoU2l6ZSB8fCAxNTAwMDsgLy9DT05TVC5TUFJJVEVfQkFUQ0hfU0laRTsgLy8gMjAwMCBpcyBhIG5pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSAvIGRlc2t0b3BcbiAgICBtYXhTaXplID0gbWF4U2l6ZSB8fCAxNTAwMDtcblxuICAgIC8vIE1ha2luZyBzdXJlIHRoZSBiYXRjaCBzaXplIGlzIHZhbGlkXG4gICAgLy8gNjU1MzUgaXMgbWF4IHZlcnRleCBpbmRleCBpbiB0aGUgaW5kZXggYnVmZmVyIChzZWUgUGFydGljbGVSZW5kZXJlcilcbiAgICAvLyBzbyBtYXggbnVtYmVyIG9mIHBhcnRpY2xlcyBpcyA2NTUzNiAvIDQgPSAxNjM4NFxuICAgIHZhciBtYXhCYXRjaFNpemUgPSAxNjM4NDtcbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4QmF0Y2hTaXplKSB7XG4gICAgICAgIGJhdGNoU2l6ZSA9IG1heEJhdGNoU2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoYmF0Y2hTaXplID4gbWF4U2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhTaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBwcm9wZXJ0aWVzIHRvIGJlIGR5bmFtaWMgKHRydWUpIC8gc3RhdGljIChmYWxzZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW5bXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4U2l6ZSA9IG1heFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYXRjaFNpemUgPSBiYXRjaFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVDaGlsZHJlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGNhbnZhcyByZW5kZXJlcmluZy4gSWYgdHJ1ZSB0aGVuIHRoZSBlbGVtZW50cyB3aWxsIGJlIHBvc2l0aW9uZWQgYXQgdGhlIG5lYXJlc3QgcGl4ZWwuIFRoaXMgcHJvdmlkZXMgYSBuaWNlIHNwZWVkIGJvb3N0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlO1xuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSB0cnVlO1xuXG4gICAgdGhpcy5zZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xufVxuXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQ29udGFpbmVyO1xuXG4vKipcbiAqIFNldHMgdGhlIHByaXZhdGUgcHJvcGVydGllcyBhcnJheSB0byBkeW5hbWljIC8gc3RhdGljIGJhc2VkIG9uIHRoZSBwYXNzZWQgcHJvcGVydGllcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcHJvcGVydGllcyB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyB0byBiZSB1cGxvYWRlZFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuc2V0UHJvcGVydGllcyA9IGZ1bmN0aW9uKHByb3BlcnRpZXMpXG57XG4gICAgaWYgKCBwcm9wZXJ0aWVzICkge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzBdID0gJ3NjYWxlJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnNjYWxlIDogdGhpcy5fcHJvcGVydGllc1swXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1sxXSA9ICdwb3NpdGlvbicgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5wb3NpdGlvbiA6IHRoaXMuX3Byb3BlcnRpZXNbMV07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMl0gPSAncm90YXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucm90YXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzJdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzNdID0gJ3V2cycgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy51dnMgOiB0aGlzLl9wcm9wZXJ0aWVzWzNdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzRdID0gJ2FscGhhJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLmFscGhhIDogdGhpcy5fcHJvcGVydGllc1s0XTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgLy8gVE9ETyBkb24ndCBuZWVkIHRvIVxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIC8vICBQSVhJLkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtLmNhbGwoIHRoaXMgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGFpbmVyIHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgd2ViZ2wgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlciggcmVuZGVyZXIucGx1Z2lucy5wYXJ0aWNsZSApO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUucmVuZGVyKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgZmxhZyB0aGF0IHN0YXRpYyBkYXRhIHNob3VsZCBiZSB1cGRhdGVkIHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUub25DaGlsZHJlbkNoYW5nZSA9IGZ1bmN0aW9uIChzbWFsbGVzdENoaWxkSW5kZXgpXG57XG4gICAgdmFyIGJ1ZmZlckluZGV4ID0gTWF0aC5mbG9vcihzbWFsbGVzdENoaWxkSW5kZXggLyB0aGlzLl9iYXRjaFNpemUpO1xuICAgIGlmIChidWZmZXJJbmRleCA8IHRoaXMuX2J1ZmZlclRvVXBkYXRlKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gYnVmZmVySW5kZXg7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIGNhbnZhcyByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGlzUm90YXRlZCA9IHRydWU7XG5cbiAgICB2YXIgcG9zaXRpb25YID0gMDtcbiAgICB2YXIgcG9zaXRpb25ZID0gMDtcblxuICAgIHZhciBmaW5hbFdpZHRoID0gMDtcbiAgICB2YXIgZmluYWxIZWlnaHQgPSAwO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICBpZiAoIWNoaWxkLnZpc2libGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZyYW1lID0gY2hpbGQudGV4dHVyZS5mcmFtZTtcblxuICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhICogY2hpbGQuYWxwaGE7XG5cbiAgICAgICAgaWYgKGNoaWxkLnJvdGF0aW9uICUgKE1hdGguUEkgKiAyKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgZmFzdGVzdCAgd2F5IHRvIG9wdGltaXNlISAtIGlmIHJvdGF0aW9uIGlzIDAgdGhlbiB3ZSBjYW4gYXZvaWQgYW55IGtpbmQgb2Ygc2V0VHJhbnNmb3JtIGNhbGxcbiAgICAgICAgICAgIGlmIChpc1JvdGF0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoICogY2hpbGQuc2NhbGUueCkgKyBjaGlsZC5wb3NpdGlvbi54ICArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0ICogY2hpbGQuc2NhbGUueSkgKyBjaGlsZC5wb3NpdGlvbi55ICArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLng7XG4gICAgICAgICAgICBmaW5hbEhlaWdodCA9IGZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnk7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzUm90YXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoaWxkLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICAgICAgdmFyIGNoaWxkVHJhbnNmb3JtID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHggfCAwLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eSB8IDBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvblggPSAoKGNoaWxkLmFuY2hvci54KSAqICgtZnJhbWUud2lkdGgpICsgMC41KTtcbiAgICAgICAgICAgIHBvc2l0aW9uWSA9ICgoY2hpbGQuYW5jaG9yLnkpICogKC1mcmFtZS5oZWlnaHQpICsgMC41KTtcblxuICAgICAgICAgICAgZmluYWxXaWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgIGNoaWxkLnRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgZnJhbWUueCxcbiAgICAgICAgICAgIGZyYW1lLnksXG4gICAgICAgICAgICBmcmFtZS53aWR0aCxcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCxcbiAgICAgICAgICAgIHBvc2l0aW9uWCxcbiAgICAgICAgICAgIHBvc2l0aW9uWSxcbiAgICAgICAgICAgIGZpbmFsV2lkdGgsXG4gICAgICAgICAgICBmaW5hbEhlaWdodFxuICAgICAgICApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUNoaWxkcmVuPWZhbHNlXSB7Ym9vbGVhbn0gaWYgc2V0IHRvIHRydWUsIGFsbCB0aGUgY2hpbGRyZW4gd2lsbCBoYXZlIHRoZWlyIGRlc3Ryb3kgbWV0aG9kIGNhbGxlZCBhcyB3ZWxsXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgaWYgKHRoaXMuX2J1ZmZlcnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLl9idWZmZXJzW2ldLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xufTtcbiIsIlxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZUJ1ZmZlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvUGFydGljbGVCdWZmZXIuamF2YVxuICovXG5cbi8qKlxuICogVGhlIHBhcnRpY2xlIGJ1ZmZlciBtYW5hZ2VzIHRoZSBzdGF0aWMgYW5kIGR5bmFtaWMgYnVmZmVycyBmb3IgYSBwYXJ0aWNsZSBjb250YWluZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gUGFydGljbGVCdWZmZXIoZ2wsIHByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBzaXplKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRTaXplID0gMjtcblxuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYSBzaW5nbGUgdmVydGV4IGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGUgYnVmZmVyIGNhbiBob2xkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gc2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBkeW5hbWljLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIHN0YXRpYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcblxuICAgICAgICBpZihkeW5hbWljUHJvcGVydHlGbGFnc1tpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5keW5hbWljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGljUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuZHluYW1pY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW5pdEJ1ZmZlcnMoKTtcblxufVxuXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZUJ1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVCdWZmZXI7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmluaXRCdWZmZXJzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpO1xuICAgIHZhciBwcm9wZXJ0eTtcblxuICAgIHZhciBkeW5hbWljT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG5cbiAgICAgICAgcHJvcGVydHkub2Zmc2V0ID0gZHluYW1pY09mZnNldDtcbiAgICAgICAgZHluYW1pY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLmR5bmFtaWNTdHJpZGUgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5keW5hbWljU3RyaWRlICogNCk7XG4gICAgdGhpcy5keW5hbWljQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcblxuXG4gICAgLy8gc3RhdGljIC8vXG4gICAgdmFyIHN0YXRpY09mZnNldCA9IDA7XG4gICAgdGhpcy5zdGF0aWNTdHJpZGUgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IHN0YXRpY09mZnNldDtcbiAgICAgICAgc3RhdGljT2Zmc2V0ICs9IHByb3BlcnR5LnNpemU7XG4gICAgICAgIHRoaXMuc3RhdGljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbmV3IEZsb2F0MzJBcnJheSggdGhpcy5zaXplICogdGhpcy5zdGF0aWNTdHJpZGUgKiA0KTtcbiAgICB0aGlzLnN0YXRpY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNEYXRhLCBnbC5EWU5BTUlDX0RSQVcpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBkeW5hbWljIHByb3BlcnRpZXMuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUudXBsb2FkRHluYW1pYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIHByb3BlcnR5LnVwbG9hZEZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIHRoaXMuZHluYW1pY0RhdGEsIHRoaXMuZHluYW1pY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy5keW5hbWljRGF0YSk7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHN0YXRpYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZFN0YXRpYyA9IGZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLnN0YXRpY0RhdGEsIHRoaXMuc3RhdGljU3RyaWRlLCBwcm9wZXJ0eS5vZmZzZXQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuc3RhdGljRGF0YSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIHRvIHRoZSBHUFVcbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIHZhciBpLCBwcm9wZXJ0eTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuZHluYW1pY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocHJvcGVydHkuYXR0cmlidXRlLCBwcm9wZXJ0eS5zaXplLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMuc3RhdGljU3RyaWRlICogNCwgcHJvcGVydHkub2Zmc2V0ICogNCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVCdWZmZXIuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5keW5hbWljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIHRoaXMuc3RhdGljUHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5zdGF0aWNEYXRhID0gbnVsbDtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLnN0YXRpY0J1ZmZlcik7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgUGFydGljbGVTaGFkZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlU2hhZGVyJyksXG4gICAgUGFydGljbGVCdWZmZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlQnVmZmVyJyksXG4gICAgbWF0aCAgICAgICAgICAgID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFBhcnRpY2xlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICAvLyBhbmQgbWF4IG51bWJlciBvZiBlbGVtZW50IGluIHRoZSBpbmRleCBidWZmZXIgaXMgMTYzODQgKiA2ID0gOTgzMDRcbiAgICAvLyBDcmVhdGluZyBhIGZ1bGwgaW5kZXggYnVmZmVyLCBvdmVyaGVhZCBpcyA5ODMwNCAqIDIgPSAxOTZLb1xuICAgIHZhciBudW1JbmRpY2VzID0gOTgzMDQ7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KG51bUluZGljZXMpO1xuXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCBudW1JbmRpY2VzOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gbnVsbDtcblxuICAgIHRoaXMudGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xufVxuXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbigncGFydGljbGUnLCBQYXJ0aWNsZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBXaGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gbmV3IFBhcnRpY2xlU2hhZGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlcik7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggaW5kZXgsIHNvIDY1NTM1IC8gNiA9IDEwOTIyLlxuXG4gICAgLy91cGxvYWQgdGhlIGluZGV4IGRhdGFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IFtcbiAgICAgICAgLy8gdmVydGljZXNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbixcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkVmVydGljZXMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBwb3NpdGlvbkRhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFBvc2l0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcm90YXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFSb3RhdGlvbixcbiAgICAgICAgICAgIHNpemU6MSxcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkUm90YXRpb24sXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyB1dnNEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFV2cyxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIGFscGhhRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZEFscGhhLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfVxuICAgIF07XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBwYXJ0aWNsZSBiYXRjaC5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gYmluZCB0aGUgbWFpbiB0ZXh0dXJlXG4gICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAvLyBiaW5kIHRoZSBidWZmZXJzXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnNoYWRlcjtcblxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBwYXJ0aWNsZSBjb250YWluZXIgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBjaGlsZHJlbiA9IGNvbnRhaW5lci5jaGlsZHJlbixcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aCxcbiAgICAgICAgbWF4U2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemU7XG5cbiAgICBpZih0b3RhbENoaWxkcmVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIGlmKHRvdGFsQ2hpbGRyZW4gPiBtYXhTaXplKVxuICAgIHtcbiAgICAgICAgdG90YWxDaGlsZHJlbiA9IG1heFNpemU7XG4gICAgfVxuXG4gICAgaWYoIWNvbnRhaW5lci5fYnVmZmVycylcbiAgICB7XG4gICAgICAgIGNvbnRhaW5lci5fYnVmZmVycyA9IHRoaXMuZ2VuZXJhdGVCdWZmZXJzKCBjb250YWluZXIgKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXZzIGhhdmUgbm90IHVwZGF0ZWQgdGhlbiBubyBwb2ludCByZW5kZXJpbmcganVzdCB5ZXQhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb250YWluZXIuYmxlbmRNb2RlKTtcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgbSA9ICBjb250YWluZXIud29ybGRUcmFuc2Zvcm0uY29weSggdGhpcy50ZW1wTWF0cml4ICk7XG4gICAgbS5wcmVwZW5kKCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeCApO1xuICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5zaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCBtLnRvQXJyYXkodHJ1ZSkpO1xuICAgIGdsLnVuaWZvcm0xZih0aGlzLnNoYWRlci51bmlmb3Jtcy51QWxwaGEuX2xvY2F0aW9uLCBjb250YWluZXIud29ybGRBbHBoYSk7XG5cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgdGV4dHVyZSBpcyBib3VuZC4uXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gY2hpbGRyZW5bMF0uX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSB0ZXh0dXJlIGhhcyBub3QgdXBkYXRlZCB0aGVuIGxldHMgbm90IHVwbG9hZCBhbnkgc3RhdGljIHByb3BlcnRpZXNcbiAgICAgICAgaWYoIXRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZShiYXNlVGV4dHVyZSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFjb250YWluZXIuX3Byb3BlcnRpZXNbMF0gfHwgIWNvbnRhaW5lci5fcHJvcGVydGllc1szXSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICB9XG5cbiAgICAvLyBub3cgbGV0cyB1cGxvYWQgYW5kIHJlbmRlciB0aGUgYnVmZmVycy4uXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgdG90YWxDaGlsZHJlbjsgaSArPSBiYXRjaFNpemUsIGogKz0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhbW91bnQgPSAoIHRvdGFsQ2hpbGRyZW4gLSBpKTtcbiAgICAgICAgaWYoYW1vdW50ID4gYmF0Y2hTaXplKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbW91bnQgPSBiYXRjaFNpemU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYnVmZmVyID0gY29udGFpbmVyLl9idWZmZXJzW2pdO1xuXG4gICAgICAgIC8vIHdlIGFsd2F5cyB1cGxvYWQgdGhlIGR5bmFtaWNcbiAgICAgICAgYnVmZmVyLnVwbG9hZER5bmFtaWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG5cbiAgICAgICAgLy8gd2Ugb25seSB1cGxvYWQgdGhlIHN0YXRpYyBjb250ZW50IHdoZW4gd2UgaGF2ZSB0byFcbiAgICAgICAgaWYoY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9PT0gailcbiAgICAgICAge1xuICAgICAgICAgICAgYnVmZmVyLnVwbG9hZFN0YXRpYyhjaGlsZHJlbiwgaSwgYW1vdW50KTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSBqICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJpbmQgdGhlIGJ1ZmZlclxuICAgICAgICBidWZmZXIuYmluZCggdGhpcy5zaGFkZXIgKTtcblxuICAgICAgICAgLy8gbm93IGRyYXcgdGhvc2Ugc3Vja2FzIVxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBhbW91bnQgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIG9uZSBwYXJ0aWNsZSBidWZmZXIgZm9yIGVhY2ggY2hpbGQgaW4gdGhlIGNvbnRhaW5lciB3ZSB3YW50IHRvIHJlbmRlciBhbmQgdXBkYXRlcyBpbnRlcm5hbCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7UElYSS5QYXJ0aWNsZUNvbnRhaW5lcn0gVGhlIGNvbnRhaW5lciB0byByZW5kZXIgdXNpbmcgdGhpcyBQYXJ0aWNsZVJlbmRlcmVyXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmdlbmVyYXRlQnVmZmVycyA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgYnVmZmVycyA9IFtdLFxuICAgICAgICBzaXplID0gY29udGFpbmVyLl9tYXhTaXplLFxuICAgICAgICBiYXRjaFNpemUgPSBjb250YWluZXIuX2JhdGNoU2l6ZSxcbiAgICAgICAgZHluYW1pY1Byb3BlcnR5RmxhZ3MgPSBjb250YWluZXIuX3Byb3BlcnRpZXMsXG4gICAgICAgIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBiYXRjaFNpemUpXG4gICAge1xuICAgICAgICBidWZmZXJzLnB1c2gobmV3IFBhcnRpY2xlQnVmZmVyKGdsLCB0aGlzLnByb3BlcnRpZXMsIGR5bmFtaWNQcm9wZXJ0eUZsYWdzLCBiYXRjaFNpemUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVycztcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgdmVydGljaWVzLlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciB2ZXJ0aWNlcyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkVmVydGljZXMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIHZhciBzcHJpdGUsXG4gICAgICAgIHRleHR1cmUsXG4gICAgICAgIHRyaW0sXG4gICAgICAgIHN4LFxuICAgICAgICBzeSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKSB7XG5cbiAgICAgICAgc3ByaXRlID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldO1xuICAgICAgICB0ZXh0dXJlID0gc3ByaXRlLl90ZXh0dXJlO1xuICAgICAgICBzeCA9IHNwcml0ZS5zY2FsZS54O1xuICAgICAgICBzeSA9IHNwcml0ZS5zY2FsZS55O1xuXG4gICAgICAgIGlmICh0ZXh0dXJlLnRyaW0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZCB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG5cbiAgICAgICAgICAgIHcxID0gdHJpbS54IC0gc3ByaXRlLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGgxID0gdHJpbS55IC0gc3ByaXRlLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICBoMCA9IGgxICsgdGV4dHVyZS5jcm9wLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS1zcHJpdGUuYW5jaG9yLngpO1xuICAgICAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC1zcHJpdGUuYW5jaG9yLng7XG5cbiAgICAgICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtc3ByaXRlLmFuY2hvci55KTtcbiAgICAgICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXNwcml0ZS5hbmNob3IueTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gaDEgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHcwICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IGgwICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB3MSAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHBvc2l0aW9ucyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUG9zaXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVQb3NpdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5wb3NpdGlvbjtcblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciByb3RhdGlvbiB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkUm90YXRpb24gPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcHJpdGVSb3RhdGlvbiA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5yb3RhdGlvbjtcblxuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVJvdGF0aW9uO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBVdnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFV2cyA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmVVdnMgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uX3RleHR1cmUuX3V2cztcblxuICAgICAgICBpZiAodGV4dHVyZVV2cylcbiAgICAgICAge1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHRleHR1cmVVdnMueDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IHRleHR1cmVVdnMueTA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB0ZXh0dXJlVXZzLngxO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSB0ZXh0dXJlVXZzLnkxO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHRleHR1cmVVdnMueDI7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSB0ZXh0dXJlVXZzLnkyO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHRleHR1cmVVdnMueDM7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSB0ZXh0dXJlVXZzLnkzO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyB5b3Uga25vdyB0aGlzIGNhbiBiZSBlYXNpZXIhXG4gICAgICAgICAgICBhcnJheVtvZmZzZXRdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIGFscGhhIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRBbHBoYSA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICAge1xuICAgICAgICB2YXIgc3ByaXRlQWxwaGEgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0uYWxwaGE7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlQWxwaGE7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBQYXJ0aWNsZVJlbmRlcmVyLlxuICpcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIuZ2wpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5nbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgfVxuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG4gICAgdGhpcy50ZW1wTWF0cml4ID0gbnVsbDtcbn07XG4iLCJ2YXIgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1RleHR1cmVTaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVNoYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFRleHR1cmVTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVBvc2l0aW9uQ29vcmQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhU2NhbGU7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgZmxvYXQgYVJvdGF0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgdmVjMiB2ID0gYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICcgICB2LnggPSAoYVZlcnRleFBvc2l0aW9uLngpICogY29zKGFSb3RhdGlvbikgLSAoYVZlcnRleFBvc2l0aW9uLnkpICogc2luKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2LnkgPSAoYVZlcnRleFBvc2l0aW9uLngpICogc2luKGFSb3RhdGlvbikgKyAoYVZlcnRleFBvc2l0aW9uLnkpICogY29zKGFSb3RhdGlvbik7JyxcbiAgICAgICAgICAgICcgICB2ID0gdiArIGFQb3NpdGlvbkNvb3JkOycsXG5cbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKHYsIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gaGVsbG9cbiAgICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IHVBbHBoYTsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciAqIHVBbHBoYTsnLFxuICAgICAgICAgICAgJyAgaWYgKGNvbG9yLmEgPT0gMC4wKSBkaXNjYXJkOycsXG4gICAgICAgICAgICAnICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB1QWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVBvc2l0aW9uQ29vcmQ6IDAsXG4gICAgICAgICAgIC8vIGFTY2FsZTogICAgICAgICAwLFxuICAgICAgICAgICAgYVJvdGF0aW9uOiAgICAgIDBcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBURU1QIEhBQ0tcblxufVxuXG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmVTaGFkZXIucHJvdG90eXBlKTtcblBhcnRpY2xlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlU2hhZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlU2hhZGVyO1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogVGhlIENhbnZhc1JlbmRlcmVyIGRyYXdzIHRoZSBzY2VuZSBhbmQgYWxsIGl0cyBjb250ZW50IG9udG8gYSAyZCBjYW52YXMuIFRoaXMgcmVuZGVyZXIgc2hvdWxkIGJlIHVzZWQgZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgd2ViR0wuXG4gKiBEb24ndCBmb3JnZXQgdG8gYWRkIHRoZSBDYW52YXNSZW5kZXJlci52aWV3IHRvIHlvdXIgRE9NIG9yIHlvdSB3aWxsIG5vdCBzZWUgYW55dGhpbmcgOilcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc3lzdGVtIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSBzeXN0ZW0gdGhpcyByZW5kZXJlciBpcyBmb3IuXG4gKiBAcGFyYW0gW3dpZHRoPTgwMF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9NjAwXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBdIHtudW1iZXJ9IFRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSByZW5kZXJlZCBhcmVhIChzaG93biBpZiBub3QgdHJhbnNwYXJlbnQpLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFN5c3RlbVJlbmRlcmVyKHN5c3RlbSwgd2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHV0aWxzLnNheUhlbGxvKHN5c3RlbSk7XG5cbiAgICAvLyBwcmVwYXJlIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zW2ldID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zW2ldID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OU1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBvcHRpb25zID0gQ09OU1QuREVGQVVMVF9SRU5ERVJfT1BUSU9OUztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5SRU5ERVJFUl9UWVBFLlVOS05PV05cbiAgICAgKiBAc2VlIFBJWEkuUkVOREVSRVJfVFlQRVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuVU5LTk9XTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA4MDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgODAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA2MDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHRvXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLnZpZXcgPSBvcHRpb25zLnZpZXcgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gb3B0aW9ucy5yZXNvbHV0aW9uO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy50cmFuc3BhcmVudCA9IG9wdGlvbnMudHJhbnNwYXJlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByZW5kZXIgdmlldyBzaG91bGQgYmUgcmVzaXplZCBhdXRvbWF0aWNhbGx5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IG9wdGlvbnMuYXV0b1Jlc2l6ZSB8fCBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrcyB0aGUgYmxlbmQgbW9kZXMgdXNlZnVsIGZvciB0aGlzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbWl4ZWQ+fVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIHByZXNlcnZlRHJhd2luZ0J1ZmZlciBmbGFnIGFmZmVjdHMgd2hldGhlciBvciBub3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyByZXRhaW5lZCBhZnRlciByZW5kZXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvciBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gICAgICogSWYgdGhlIHNjZW5lIGlzIE5PVCB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGEgY2FudmFzIHNpemVkIGZpbGxSZWN0IG9wZXJhdGlvbiBldmVyeSBmcmFtZSB0byBzZXQgdGhlIGNhbnZhcyBiYWNrZ3JvdW5kIGNvbG9yLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyB0cmFuc3BhcmVudCBQaXhpIHdpbGwgdXNlIGNsZWFyUmVjdCB0byBjbGVhciB0aGUgY2FudmFzIGV2ZXJ5IGZyYW1lLlxuICAgICAqIERpc2FibGUgdGhpcyBieSBzZXR0aW5nIHRoaXMgdG8gZmFsc2UuIEZvciBleGFtcGxlIGlmIHlvdXIgZ2FtZSBoYXMgYSBjYW52YXMgZmlsbGluZyBiYWNrZ3JvdW5kIGltYWdlIHlvdSBvZnRlbiBkb24ndCBuZWVkIHRoaXMgc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdFxuICAgICAqL1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyO1xuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gICAgICogSGFuZHkgZm9yIGNyaXNwIHBpeGVsIGFydCBhbmQgc3BlZWQgb24gbGVnYWN5IGRldmljZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm91bmRQaXhlbHMgPSBvcHRpb25zLnJvdW5kUGl4ZWxzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSAweDAwMDAwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGFuIFtSLCBHLCBCXSBhcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gJyMwMDAwMDAnO1xuXG4gICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBvcHRpb25zLmJhY2tncm91bmRDb2xvciB8fCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3I7IC8vIHJ1biBiZyBjb2xvciBzZXR0ZXJcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB0cmFuc2Zvcm06e3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpfSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCByb290IG9iamVjdCB0aGF0IHRoZSByZW5kZXJlciB0cmllZCB0byByZW5kZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbn1cblxuLy8gY29uc3RydWN0b3JcblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeXN0ZW1SZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3lzdGVtUmVuZGVyZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZpbGwgaWYgbm90IHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3lzdGVtUmVuZGVyZXIjXG4gICAgICovXG4gICAgYmFja2dyb3VuZENvbG9yOlxuICAgIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9IHV0aWxzLmhleDJzdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHV0aWxzLmhleDJyZ2IodmFsLCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB2aWV3IHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy52aWV3LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0aGlzLnZpZXcuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5hdXRvUmVzaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgYW5kIG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgQ2FudmFzIERPTSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldykge1xuICAgIGlmIChyZW1vdmVWaWV3ICYmIHRoaXMudmlldy5wYXJlbnROb2RlKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy52aWV3KTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICB0aGlzLnZpZXcgPSBudWxsO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMDtcblxuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gbnVsbDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSBudWxsO1xufTtcbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgQ2FudmFzTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ0NhbnZhcycsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5DQU5WQVM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy52aWV3LmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogdGhpcy50cmFuc3BhcmVudCB9KTtcblxuICAgIC8qKlxuICAgICAqIEJvb2xlYW4gZmxhZyBjb250cm9sbGluZyBjYW52YXMgcmVmcmVzaC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIGEgQ2FudmFzTWFza01hbmFnZXIsIGhhbmRsZXMgbWFza2luZyB3aGVuIHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc01hc2tNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBuZXcgQ2FudmFzTWFza01hbmFnZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgcHJvcGVydHkgdXNlZCB0byBzZXQgdGhlIGNhbnZhcyBzbW9vdGhpbmcgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdpbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnd2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21vekltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnb0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21zSW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIHRoaXMuX21hcEJsZW5kTW9kZXMoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge1xuICAgICAgICB3b3JsZFRyYW5zZm9ybTogbmV3IG1hdGguTWF0cml4KCksXG4gICAgICAgIHdvcmxkQWxwaGE6IDFcbiAgICB9O1xuXG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihDYW52YXNSZW5kZXJlcik7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIHRoaXMgY2FudmFzIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IG9iamVjdC5wYXJlbnQ7XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBvYmplY3Q7XG5cbiAgICBvYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgb2JqZWN0LnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIHRoaXMuY29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF07XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMgJiYgdGhpcy52aWV3LnNjcmVlbmNhbnZhcylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGVhckJlZm9yZVJlbmRlcilcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy53aWR0aCAsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChvYmplY3QsIHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGlzLmVtaXQoJ3Bvc3RyZW5kZXInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpXG57XG4gICAgdGhpcy5kZXN0cm95UGx1Z2lucygpO1xuXG4gICAgLy8gY2FsbCB0aGUgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLnJlZnJlc2ggPSB0cnVlO1xuXG4gICAgdGhpcy5tYXNrTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG5cbiAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KVxue1xuICAgIHZhciB0ZW1wQ29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJDYW52YXModGhpcyk7XG4gICAgdGhpcy5jb250ZXh0ID0gdGVtcENvbnRleHQ7XG59O1xuXG4vKipcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXIjcmVzaXplXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAodywgaClcbntcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcywgdywgaCk7XG5cbiAgICAvL3Jlc2V0IHRoZSBzY2FsZSBtb2RlLi4gb2RkbHkgdGhpcyBzZWVtcyB0byBiZSByZXNldCB3aGVuIHRoZSBjYW52YXMgaXMgcmVzaXplZC5cbiAgICAvL3N1cmVseSBhIGJyb3dzZXIgYnVnPz8gTGV0IHBpeGkgZml4IHRoYXQgZm9yIHlvdS4uXG4gICAgaWYodGhpcy5zbW9vdGhQcm9wZXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dFt0aGlzLnNtb290aFByb3BlcnR5XSA9IChDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBNYXBzIFBpeGkgYmxlbmQgbW9kZXMgdG8gY2FudmFzIGJsZW5kIG1vZGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fbWFwQmxlbmRNb2RlcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmJsZW5kTW9kZXMpXG4gICAge1xuICAgICAgICB0aGlzLmJsZW5kTW9kZXMgPSB7fTtcblxuICAgICAgICBpZiAodXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdtdWx0aXBseSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc2NyZWVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdvdmVybGF5JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdkYXJrZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ2xpZ2h0ZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ2NvbG9yLWRvZGdlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdjb2xvci1idXJuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IQVJEX0xJR0hUXSAgICA9ICdoYXJkLWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb2Z0LWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdkaWZmZXJlbmNlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5FWENMVVNJT05dICAgICA9ICdleGNsdXNpb24nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ2h1ZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc2F0dXJhdGUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ2NvbG9yJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdsdW1pbm9zaXR5JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb29sIG5ldyBibGVuZCBtb2RlcyBpbiBjYW52YXMgJ2NvdWdoJyBpZSAnY291Z2gnXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TQVRVUkFUSU9OXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBjYW52YXNcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKi9cbmZ1bmN0aW9uIENhbnZhc0J1ZmZlcih3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBDYW52YXMgb2JqZWN0IHRoYXQgYmVsb25ncyB0byB0aGlzIENhbnZhc0J1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBBIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHdvLWRpbWVuc2lvbmFsIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn1cblxuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc0J1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzQnVmZmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYW52YXNCdWZmZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB2YWw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyBidWZmZXIgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNhbnZhc0J1ZmZlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENsZWFycyB0aGUgY2FudmFzIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIENhbnZhc0J1ZmZlciBjbGFzcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgY2FudmFzIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBjYW52YXMuXG4gKlxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlciB0byBkcmF3IHRoZSBwcmltaXRpdmUgZ3JhcGhpY3MgZGF0YS5cbiAqIEBzdGF0aWNcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xudmFyIENhbnZhc0dyYXBoaWNzID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0dyYXBoaWNzO1xuXG4vKlxuICogUmVuZGVycyBhIEdyYXBoaWNzIG9iamVjdCB0byBhIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBhY3R1YWwgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIDJkIGRyYXdpbmcgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIHdvcmxkQWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljc1RpbnQoZ3JhcGhpY3MpO1xuICAgICAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuX2ZpbGxUaW50O1xuICAgICAgICB2YXIgbGluZUNvbG9yID0gZGF0YS5fbGluZVRpbnQ7XG5cbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRPRE8gLSBuZWVkIHRvIGJlIFVuZGVmaW5lZCFcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsMCwyKk1hdGguUEkpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcblxuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJ4ID0gc2hhcGUueDtcbiAgICAgICAgICAgIHZhciByeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBzaGFwZS53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgcmFkaXVzID0gc2hhcGUucmFkaXVzO1xuXG4gICAgICAgICAgICB2YXIgbWF4UmFkaXVzID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyIHwgMDtcbiAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1cyA+IG1heFJhZGl1cyA/IG1heFJhZGl1cyA6IHJhZGl1cztcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGxDb2xvciB8fCBkYXRhLmZpbGxDb2xvciA9PT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3MgbWFza1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBtYXNrXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY29udGV4dCAyZCBtZXRob2Qgb2YgdGhlIGNhbnZhc1xuICovXG5DYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIGxlbiA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG5cbiAgICBpZiAobGVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludCBhcmUgdGhlIHNhbWUgY2xvc2UgdGhlIHBhdGggLSBtdWNoIG5lYXRlciA6KVxuICAgICAgICAgICAgaWYgKHBvaW50c1swXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gJiYgcG9pbnRzWzFdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5yZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuXG4gICAgICAgICAgICAvLyBlbGxpcHNlIGNvZGUgdGFrZW4gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG5cbiAgICAgICAgICAgIHZhciB3ID0gc2hhcGUud2lkdGggKiAyO1xuICAgICAgICAgICAgdmFyIGggPSBzaGFwZS5oZWlnaHQgKiAyO1xuXG4gICAgICAgICAgICB2YXIgeCA9IHNoYXBlLnggLSB3LzI7XG4gICAgICAgICAgICB2YXIgeSA9IHNoYXBlLnkgLSBoLzI7XG5cbiAgICAgICAgICAgIHZhciBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICAgICAgICAgICAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgIHhlID0geCArIHcsICAgICAgICAgICAvLyB4LWVuZFxuICAgICAgICAgICAgICAgIHllID0geSArIGgsICAgICAgICAgICAvLyB5LWVuZFxuICAgICAgICAgICAgICAgIHhtID0geCArIHcgLyAyLCAgICAgICAvLyB4LW1pZGRsZVxuICAgICAgICAgICAgICAgIHltID0geSArIGggLyAyOyAgICAgICAvLyB5LW1pZGRsZVxuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhlLCB5bSArIG95LCB4bSArIG94LCB5ZSwgeG0sIHllKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdGludCBvZiBhIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB0aGF0IHdpbGwgaGF2ZSBpdHMgdGludCB1cGRhdGVkXG4gKlxuICovXG5DYW52YXNHcmFwaGljcy51cGRhdGVHcmFwaGljc1RpbnQgPSBmdW5jdGlvbiAoZ3JhcGhpY3MpXG57XG4gICAgaWYgKGdyYXBoaWNzLnRpbnQgPT09IDB4RkZGRkZGICYmIGdyYXBoaWNzLl9wcmV2VGludCA9PT0gZ3JhcGhpY3MudGludClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGhpY3MuX3ByZXZUaW50ID0gZ3JhcGhpY3MudGludDtcblxuICAgIHZhciB0aW50UiA9IChncmFwaGljcy50aW50ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIHRpbnRHID0gKGdyYXBoaWNzLnRpbnQgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50QiA9IChncmFwaGljcy50aW50ICYgMHhGRikvIDI1NTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuZmlsbENvbG9yIHwgMDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEubGluZUNvbG9yIHwgMDtcblxuICAgICAgICAvKlxuICAgICAgICB2YXIgY29sb3JSID0gKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JHID0gKGZpbGxDb2xvciA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIHZhciBjb2xvckIgPSAoZmlsbENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBmaWxsQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcblxuICAgICAgICBjb2xvclIgPSAobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIGNvbG9yRyA9IChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckIgPSAobGluZUNvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBsaW5lQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcbiAgICAgICAgKi9cblxuICAgICAgICAvLyBzdXBlciBpbmxpbmUgY29zIGltIGFuIG9wdGltaXphdGlvbiBOQVpJIDopXG4gICAgICAgIGRhdGEuX2ZpbGxUaW50ID0gKCgoZmlsbENvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChmaWxsQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG4gICAgICAgIGRhdGEuX2xpbmVUaW50ID0gKCgobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChsaW5lQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG5cbiAgICB9XG59O1xuXG4iLCJ2YXIgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuL0NhbnZhc0dyYXBoaWNzJyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgdG8gaGFuZGxlIG1hc2tpbmcuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDYW52YXNNYXNrTWFuYWdlcigpXG57fVxuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzTWFza01hbmFnZXI7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgYWRkcyBpdCB0byB0aGUgY3VycmVudCBzdGFjayBvZiBtYXNrcy5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge29iamVjdH0gdGhlIG1hc2tEYXRhIHRoYXQgd2lsbCBiZSBwdXNoZWRcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhLCByZW5kZXJlcilcbntcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2F2ZSgpO1xuXG4gICAgdmFyIGNhY2hlQWxwaGEgPSBtYXNrRGF0YS5hbHBoYTtcbiAgICB2YXIgdHJhbnNmb3JtID0gbWFza0RhdGEud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICAvL1RPRE8gc3Vwb3J0IHNwcml0ZSBhbHBoYSBtYXNrcz8/XG4gICAgLy9sb3RzIG9mIGVmZm9ydCByZXF1aXJlZC4gSWYgZGVtYW5kIGlzIGdyZWF0IGVub3VnaC4uXG4gICAgaWYoIW1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sobWFza0RhdGEsIHJlbmRlcmVyLmNvbnRleHQpO1xuICAgICAgICByZW5kZXJlci5jb250ZXh0LmNsaXAoKTtcbiAgICB9XG5cbiAgICBtYXNrRGF0YS53b3JsZEFscGhhID0gY2FjaGVBbHBoYTtcbn07XG5cbi8qKlxuICogUmVzdG9yZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlIHRoZSBtYXNrIHdhcyBhcHBsaWVkLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIFNwcml0ZS9UZXh0dXJlIHRpbnRpbmcuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNUaW50ZXIgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzVGludGVyO1xuXG4vKipcbiAqIEJhc2ljYWxseSB0aGlzIG1ldGhvZCBqdXN0IG5lZWRzIGEgc3ByaXRlIGFuZCBhIGNvbG9yIGFuZCB0aW50cyB0aGUgc3ByaXRlIHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIHRpbnRlZCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUgPSBmdW5jdGlvbiAoc3ByaXRlLCBjb2xvcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHNwcml0ZS50ZXh0dXJlO1xuXG4gICAgY29sb3IgPSBDYW52YXNUaW50ZXIucm91bmRDb2xvcihjb2xvcik7XG5cbiAgICB2YXIgc3RyaW5nQ29sb3IgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG5cbiAgICB0ZXh0dXJlLnRpbnRDYWNoZSA9IHRleHR1cmUudGludENhY2hlIHx8IHt9O1xuXG4gICAgaWYgKHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl07XG4gICAgfVxuXG4gICAgIC8vIGNsb25lIHRleHR1cmUuLlxuICAgIHZhciBjYW52YXMgPSBDYW52YXNUaW50ZXIuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLy9DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCh0ZXh0dXJlLCBzdHJpbmdDb2xvciwgY2FudmFzKTtcbiAgICBDYW52YXNUaW50ZXIudGludE1ldGhvZCh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKTtcblxuICAgIGlmIChDYW52YXNUaW50ZXIuY29udmVydFRpbnRUb0ltYWdlKVxuICAgIHtcbiAgICAgICAgLy8gaXMgdGhpcyBiZXR0ZXI/XG4gICAgICAgIHZhciB0aW50SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgdGludEltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcblxuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSB0aW50SW1hZ2U7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSA9IGNhbnZhcztcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCBjb252ZXJ0aW5nIHRoZSB0ZXh0dXJlIHRvIGFuIGltYWdlIHRoZW4gd2UgbmVlZCB0byBsb3NlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhc1xuICAgICAgICBDYW52YXNUaW50ZXIuY2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ211bHRpcGx5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgPSBmdW5jdGlvbiAodGV4dHVyZSwgY29sb3IsIGNhbnZhcylcbntcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgIHZhciBjcm9wID0gdGV4dHVyZS5jcm9wLmNsb25lKCk7XG4gICAgY3JvcC54ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC55ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC53aWR0aCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AuaGVpZ2h0ICo9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXMud2lkdGggPSBjcm9wLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wLmhlaWdodDtcblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tYXRvcCc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ292ZXJsYXknIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhPdmVybGF5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgY3JvcC54LFxuICAgICAgICBjcm9wLnksXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodFxuICAgICk7XG5cbiAgICAvLyBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5Jztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgcGl4ZWwgcGVyIHBpeGVsLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuICAgIHZhciByID0gcmdiVmFsdWVzWzBdLCBnID0gcmdiVmFsdWVzWzFdLCBiID0gcmdiVmFsdWVzWzJdO1xuXG4gICAgdmFyIHBpeGVsRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIHZhciBwaXhlbHMgPSBwaXhlbERhdGEuZGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGl4ZWxzLmxlbmd0aDsgaSArPSA0KVxuICAgIHtcbiAgICAgICAgcGl4ZWxzW2krMF0gKj0gcjtcbiAgICAgICAgcGl4ZWxzW2krMV0gKj0gZztcbiAgICAgICAgcGl4ZWxzW2krMl0gKj0gYjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnB1dEltYWdlRGF0YShwaXhlbERhdGEsIDAsIDApO1xufTtcblxuLyoqXG4gKiBSb3VuZHMgdGhlIHNwZWNpZmllZCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gcm91bmQsIHNob3VsZCBiZSBhIGhleCBjb2xvclxuICovXG5DYW52YXNUaW50ZXIucm91bmRDb2xvciA9IGZ1bmN0aW9uIChjb2xvcilcbntcbiAgICB2YXIgc3RlcCA9IENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuXG4gICAgcmdiVmFsdWVzWzBdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzBdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMV0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMV0gLyBzdGVwKSAqIHN0ZXApO1xuICAgIHJnYlZhbHVlc1syXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1syXSAvIHN0ZXApICogc3RlcCk7XG5cbiAgICByZXR1cm4gdXRpbHMucmdiMmhleChyZ2JWYWx1ZXMpO1xufTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygc3RlcHMgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgY2FwIHdoZW4gcm91bmRpbmcgY29sb3JzLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhY2hlU3RlcHNQZXJDb2xvckNoYW5uZWwgPSA4O1xuXG4vKipcbiAqIFRpbnQgY2FjaGUgYm9vbGVhbiBmbGFnLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSA9IGZhbHNlO1xuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkLCBjb25zZXF1ZW50bHkgdGhlIGFiaWxpdHkgdG8gdGludCB1c2luZyB0aGUgbXVsdGlwbHkgbWV0aG9kLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID0gdXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpO1xuXG4vKipcbiAqIFRoZSB0aW50aW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKi9cbkNhbnZhc1RpbnRlci50aW50TWV0aG9kID0gQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID8gQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgOiAgQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWw7XG4iLCJ2YXIgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuXHR1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgVGV4dHVyZU1hbmFnZXIgPSBmdW5jdGlvbihnbClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIHRyYWNrIHRleHR1cmVzIGluIHRoZSByZW5kZXJlciBzbyB3ZSBjYW4gbm8gbG9uZ2VyIGxpc3RlbiB0byB0aGVtIG9uIGRlc3RydWN0aW9uLlxuXHR0aGlzLl9tYW5hZ2VkVGV4dHVyZXMgPSBbXTtcbiAgICB0aGlzLmdsVGV4dHVyZXMgPSB7fTtcblxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmdldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cbi8qKlxuICogVXBkYXRlcyBhbmQvb3IgQ3JlYXRlcyBhIFdlYkdMIHRleHR1cmUgZm9yIHRoZSByZW5kZXJlcidzIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB1cGRhdGVcbiAqL1xuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG5cdGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXS8vdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG5cbiAgICBpZiAoIWdsVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGdsVGV4dHVyZSA9IG5ldyBHTFRleHR1cmUoZ2wpO1xuICAgICAgICBnbFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHRydWVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbFRleHR1cmU7XG5cbiAgICAgICAvLyB0aGlzLmdsVGV4dHVyZXNbdGV4dHVyZS51aWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgIHRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub24oJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xuICAgIH1cblxuICAgIGdsVGV4dHVyZS51cGxvYWQodGV4dHVyZS5zb3VyY2UpO1xuICAgIFxuICAgIC8vVE9ETyBjaGVjayBpcyBwb3dlciBvZiB0d28uLlxuICAgIGdsVGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuXG4gICAgLy8gVE9ETyBjaGVjayBmb3Igc2NhbGluZyB0eXBlXG4gICAgZ2xUZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKTtcblxuICAgIHJldHVybiAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG59XG5cbi8qKlxuICogRGVsZXRlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byBkZXN0cm95XG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUsIF9za2lwUmVtb3ZlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0uZGVzdHJveSgpO1xuICAgICAgICB0ZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGVUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcblxuXG4gICAgICAgIGRlbGV0ZSB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdO1xuXG4gICAgICAgIGlmICghX3NraXBSZW1vdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzLmluZGV4T2YodGV4dHVyZSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLl9tYW5hZ2VkVGV4dHVyZXMsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24oKVxue1xuXHQvLyBlbXB0eSBhbGwgdGhlIG9sZCBnbCB0ZXh0dXJlcyBhcyB0aGV5IGFyZSB1c2VsZXNzIG5vd1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIGlmICh0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgLy8gZGVzdHJveSBtYW5hZ2VkIHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgdGhpcy5kZXN0cm95VGV4dHVyZSh0ZXh0dXJlLCB0cnVlKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFuYWdlZFRleHR1cmVzID0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlTWFuYWdlcjtcblxuIiwidmFyIFN5c3RlbVJlbmRlcmVyID0gcmVxdWlyZSgnLi4vU3lzdGVtUmVuZGVyZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL01hc2tNYW5hZ2VyJyksXG4gICAgU3RlbmNpbE1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyJyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIEJsZW5kTW9kZU1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIEZYQUFGaWx0ZXIgPSByZXF1aXJlKCcuL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi9UZXh0dXJlTWFuYWdlcicpLFxuICAgIGNyZWF0ZUNvbnRleHQgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5jcmVhdGVDb250ZXh0LFxuICAgIG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aSA9IHJlcXVpcmUoJy4vdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpJyksXG4gICAgbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgV2ViR0xSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgd2ViR0wgZW5hYmxlZCBjYW52YXMuIFRoaXMgcmVuZGVyZXJcbiAqIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wuIFRoaXMgUmVuZGVyIHdvcmtzIGJ5IGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgd2ViR0xCYXRjaHMuXG4gKiBTbyBubyBuZWVkIGZvciBTcHJpdGUgQmF0Y2hlcyBvciBTcHJpdGUgQ2xvdWRzLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgdmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD0wXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD0wXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcy4gSWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseSB0aGVuIEZYQUEgYW50aWFsaWFzaW5nIGlzIHVzZWRcbiAqIEBwYXJhbSBbb3B0aW9ucy5mb3JjZUZYQUE9ZmFsc2VdIHtib29sZWFufSBmb3JjZXMgRlhBQSBhbnRpYWxpYXNpbmcgdG8gYmUgdXNlZCBvdmVyIG5hdGl2ZS4gRlhBQSBpcyBmYXN0ZXIsIGJ1dCBtYXkgbm90IGFsd2F5cyBsb29rIGFzIGdyZWF0XG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLiBJZiB5b3Ugd2lzaCB0byBzZXQgdGhpcyB0byBmYWxzZSwgeW91ICptdXN0KiBzZXQgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHRvIGB0cnVlYC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWZcbiAqICAgICAgeW91IG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHQuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgU3lzdGVtUmVuZGVyZXIuY2FsbCh0aGlzLCAnV2ViR0wnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgcmVuZGVyZXIgYXMgYSBzdGFuZGFyZGlzZWQgY29uc3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0vL1xuICAgICAqXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQgPSB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHBhc3NlZCBpbiB0byBjcmVhdGUgYSBuZXcgd2ViZ2wgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0ge1xuICAgICAgICBhbHBoYTogdGhpcy50cmFuc3BhcmVudCxcbiAgICAgICAgYW50aWFsaWFzOiBvcHRpb25zLmFudGlhbGlhcyxcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnRyYW5zcGFyZW50ICYmIHRoaXMudHJhbnNwYXJlbnQgIT09ICdub3RNdWx0aXBsaWVkJyxcbiAgICAgICAgc3RlbmNpbDogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgIH07XG5cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhWzNdID0gdGhpcy50cmFuc3BhcmVudCA/IDAgOiAxO1xuXG4gICAgLyoqXG4gICAgICogRGVhbHMgd2l0aCBtYW5hZ2luZyB0aGUgc2hhZGVyIHByb2dyYW1zIGFuZCB0aGVpciBhdHRyaWJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG5ldyBTaGFkZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWFza3MgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IE1hc2tNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIgPSBuZXcgU3RlbmNpbE1hbmFnZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5GaWx0ZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgYmxlbmRNb2Rlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CbGVuZE1vZGVNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlciA9IG5ldyBCbGVuZE1vZGVNYW5hZ2VyKHRoaXMpO1xuXG4gICAgXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgT2JqZWN0UmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk9iamVjdFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbmV3IE9iamVjdFJlbmRlcmVyKHRoaXMpO1xuXG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBzbyBpdCBpcyByZWFkeSBmb3IgdGhlIG1hbmFnZXJzLlxuICAgIHRoaXMuZ2wgPSBjcmVhdGVDb250ZXh0KHRoaXMudmlldywgdGhpcy5fY29udGV4dE9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcblxuICAgIC8vIG1hcCBzb21lIHdlYkdMIGJsZW5kIGFuZCBkcmF3bW9kZXMuLlxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aShnbCk7XG4gICAgdGhpcy5kcmF3TW9kZXMgPSBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbClcblxuICAgIHRoaXMuX2FjdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldH1cbiAgICAgKi9cbiAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihXZWJHTFJlbmRlcmVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBXZWJHTCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuX2luaXRDb250ZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgLy8gY3JlYXRlIGEgdGV4dHVyZSBtYW5hZ2VyLi4uXG4gICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG5ldyBUZXh0dXJlTWFuYWdlcihnbCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIGRlZmF1bHQgcGl4aSBzZXR0aW5ncy4uXG4gICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcblxuXG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG51bGwsIHRoaXMucmVzb2x1dGlvbiwgdHJ1ZSk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LmNsZWFyQ29sb3IgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhO1xuICAgIFxuICAgIHRoaXMuYmluZFJlbmRlclRhcmdldCh0aGlzLnJvb3RSZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy5lbWl0KCdjb250ZXh0JywgZ2wpO1xuXG4gICAgLy8gc2V0dXAgdGhlIHdpZHRoL2hlaWdodCBwcm9wZXJ0aWVzIGFuZCBnbCB2aWV3cG9ydFxuICAgIHRoaXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsgICAgXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBpdHMgd2ViR0wgdmlld1xuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gdGhlIG9iamVjdCB0byBiZSByZW5kZXJlZFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdClcbntcbiAgICB0aGlzLmVtaXQoJ3ByZXJlbmRlcicpO1xuXG4gICAgLy8gbm8gcG9pbnQgcmVuZGVyaW5nIGlmIG91ciBjb250ZXh0IGhhcyBiZWVuIGJsb3duIHVwIVxuICAgIGlmICh0aGlzLmdsLmlzQ29udGV4dExvc3QoKSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBkaXNwbGF5T2JqZWN0O1xuXG4gICAgdmFyIGNhY2hlUGFyZW50ID0gZGlzcGxheU9iamVjdC5wYXJlbnQ7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgZGlzcGxheU9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICBkaXNwbGF5T2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIHRoaXMucm9vdFJlbmRlclRhcmdldCwgdGhpcy5jbGVhckJlZm9yZVJlbmRlcik7Ly90aGlzLnByb2plY3Rpb24pO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBEaXNwbGF5IE9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSBUaGUgcmVuZGVyIHRhcmdldCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgZGlzcGxheSBvYmplY3RcbiAqXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcmVuZGVyVGFyZ2V0LCBjbGVhcikvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblxuICAgIGlmKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIGZpbHRlciBtYW5hZ2VyXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnNldEZpbHRlclN0YWNrKCByZW5kZXJUYXJnZXQuZmlsdGVyU3RhY2sgKTtcblxuICAgIC8vIHJlbmRlciB0aGUgc2NlbmUhXG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJXZWJHTCh0aGlzKTtcblxuICAgIC8vIGZpbmlzaCB0aGUgY3VycmVudCByZW5kZXJlci4uXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXJlciB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSBvYmplY3RSZW5kZXJlciB7UElYSS5PYmplY3RSZW5kZXJlcn0gVGhlIG9iamVjdCByZW5kZXJlciB0byB1c2UuXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldE9iamVjdFJlbmRlcmVyID0gZnVuY3Rpb24gKG9iamVjdFJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRSZW5kZXJlciA9PT0gb2JqZWN0UmVuZGVyZXIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RvcCgpO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gb2JqZWN0UmVuZGVyZXI7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgd2ViR0wgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHdlYkdMIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHdlYkdMIHZpZXdcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSB0aGlzLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRvIHRoZSBvbmUgZ2l2ZW4gaW4gcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9IHRoZSBuZXcgcmVuZGVyIHRhcmdldFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5iaW5kUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICBpZihyZW5kZXJUYXJnZXQgIT09IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBpZih0aGlzLl9hY3RpdmVTaGFkZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gcmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuc2V0TWFza1N0YWNrKCByZW5kZXJUYXJnZXQuc3RlbmNpbE1hc2tTdGFjayApO1xuICAgIH1cbn1cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFNoYWRlciA9IGZ1bmN0aW9uIChzaGFkZXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgLy9UT0RPIGNhY2hlXG4gICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyICE9PSBzaGFkZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBzaGFkZXI7XG4gICAgICAgIHNoYWRlci5iaW5kKCk7XG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB9XG59XG5cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgbG9jYXRpb24pXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vVE9ETyB0ZXN0IHBlcmYgb2YgY2FjaGU/XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCAwO1xuXG4gICAgaWYodGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uICE9PSBsb2NhdGlvbikvL1xuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uID0gbG9jYXRpb25cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uICk7XG4gICAgfVxuXG4gICAgLy9UT0RPIC0gY2FuIHdlIGNhY2hlIHRoaXMgdGV4dHVyZSB0b28/XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7ICAgICAgXG4gICAgXG4gICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIGJpbmQgdGhlIHRleHR1cmUuLlxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXS5iaW5kKCk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogSGFuZGxlcyBhIGxvc3Qgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRMb3N0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgYSByZXN0b3JlZCB3ZWJnbCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9pbml0Q29udGV4dCgpO1xuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIucmVtb3ZlQWxsKCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciAoZXZlbnQgbGlzdGVuZXJzLCBzcHJpdGViYXRjaCwgZXRjLi4uKVxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIHJlbW92ZSBsaXN0ZW5lcnNcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuaGFuZGxlQ29udGV4dExvc3QpO1xuICAgIHRoaXMudmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkKTtcblxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIuZGVzdHJveUFsbCgpO1xuXG4gICAgLy8gY2FsbCBiYXNlIGRlc3Ryb3lcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHJlbW92ZVZpZXcpO1xuXG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgLy8gZGVzdHJveSB0aGUgbWFuYWdlcnNcbiAgICB0aGlzLnNoYWRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSBudWxsO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0gbnVsbDtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICB0aGlzLmdsID0gbnVsbDtcbn07XG5cbiIsInZhciBEZWZhdWx0U2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBQSVhJIGZpbHRlci4gQ3VycmVudGx5IG9ubHkgV2ViR0wgc3VwcG9ydHMgZmlsdGVycy5cbiAqIElmIHlvdSB3YW50IHRvIG1ha2UgYSBjdXN0b20gZmlsdGVyIHRoaXMgc2hvdWxkIGJlIHlvdXIgYmFzZSBjbGFzcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdmVydGV4U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIGZyYWdtZW50U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlIGFzIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gdW5pZm9ybXMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuaWZvcm1zIGZvciB0aGlzIGZpbHRlci5cbiAqL1xuZnVuY3Rpb24gQWJzdHJhY3RGaWx0ZXIodmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMpXG57XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBzaGFkZXJzXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVycyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4dHJhIHBhZGRpbmcgdGhhdCB0aGUgZmlsdGVyIG1pZ2h0IG5lZWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmlmb3JtcyBhcyBhbiBvYmplY3RcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29kZSBvZiB0aGUgdmVydGV4IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIGZyYW1lbnQgc2hhZGVyXG4gICAgICogQG1lbWJlciB7c3RyaW5nW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICAvL1RPRE8gYSByZW1pbmRlciAtIHdvdWxkIGJlIGNvb2wgdG8gaGF2ZSBsb3dlciByZXMgZmlsdGVycyBhcyB0aGlzIHdvdWxkIGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlLlxuXG4gICAgLy90eXBlb2YgZnJhZ21lbnRTcmMgPT09ICdzdHJpbmcnID8gZnJhZ21lbnRTcmMuc3BsaXQoJycpIDogKGZyYWdtZW50U3JjIHx8IFtdKTtcblxufVxuXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RGaWx0ZXI7XG5cbi8qKlxuICogR3JhYnMgYSBzaGFkZXIgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIHNoYWRlciBmcm9tXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5nZXRTaGFkZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXJzW2dsLmlkXTtcblxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gbmV3IERlZmF1bHRTaGFkZXIocmVuZGVyZXIuc2hhZGVyTWFuYWdlcixcbiAgICAgICAgICAgIHRoaXMudmVydGV4U3JjLFxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudFNyYyxcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNoYWRlcnNbZ2wuaWRdID0gc2hhZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8gY2xlYXIgdGhlIG91dHB1dFRhcmdldFxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xufTtcblxuLyoqXG4gKiBTeW5jcyBhIHVuaWZvcm0gYmV0d2VlbiB0aGUgY2xhc3Mgb2JqZWN0IGFuZCB0aGUgc2hhZGVycy5cbiAqXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5zaGFkZXJzLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyc1tpXS5zeW5jVW5pZm9ybSh1bmlmb3JtKTtcbiAgICB9XG59O1xuIiwidmFyIEFic3RyYWN0RmlsdGVyID0gcmVxdWlyZSgnLi9BYnN0cmFjdEZpbHRlcicpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqXG4gKiBCYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXG4gKiBtb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcbiAqIHVuc3VwcG9ydGVkIGJ5IFdlYkdMLlxuICpcbiAqIC0tXG4gKiBGcm9tOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKlxuICovXG5mdW5jdGlvbiBGWEFBRmlsdGVyKClcbntcbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG5cXG52b2lkIHRleGNvb3Jkcyh2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTlcsIG91dCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JTVywgb3V0IHZlYzIgdl9yZ2JTRSxcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjMiBpbnZlcnNlVlAgPSAxLjAgLyByZXNvbHV0aW9uLnh5O1xcbiAgICB2X3JnYk5XID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk5FID0gKGZyYWdDb29yZCArIHZlYzIoMS4wLCAtMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU1cgPSAoZnJhZ0Nvb3JkICsgdmVjMigtMS4wLCAxLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JTRSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiTSA9IHZlYzIoZnJhZ0Nvb3JkICogaW52ZXJzZVZQKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxuICAgdlJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xcblxcbiAgIC8vY29tcHV0ZSB0aGUgdGV4dHVyZSBjb29yZHMgYW5kIHNlbmQgdGhlbSB0byB2YXJ5aW5nc1xcbiAgIHRleGNvb3JkcyhhVGV4dHVyZUNvb3JkICogcmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgdl9yZ2JOVywgdl9yZ2JORSwgdl9yZ2JTVywgdl9yZ2JTRSwgdl9yZ2JNKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcblxcbi8qKlxcbkJhc2ljIEZYQUEgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGNvZGUgb24gZ2Vla3MzZC5jb20gd2l0aCB0aGVcXG5tb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcXG51bnN1cHBvcnRlZCBieSBXZWJHTC5cXG5cXG4tLVxcblxcbkZyb206XFxuaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcXG5cXG5Db3B5cmlnaHQgKGMpIDIwMTEgYnkgQXJtaW4gUm9uYWNoZXIuXFxuXFxuU29tZSByaWdodHMgcmVzZXJ2ZWQuXFxuXFxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxcbm1ldDpcXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXFxuICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcXG4gICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcXG4gICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXFxuXFxuICAgICogVGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3JcXG4gICAgICBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWNcXG4gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXFxuXFxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xcblxcXCJBUyBJU1xcXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXFxuQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcXG5PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcXG5TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXFxuVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXFxuKi9cXG5cXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01JTlxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvIDEyOC4wKVxcbiNlbmRpZlxcbiNpZm5kZWYgRlhBQV9SRURVQ0VfTVVMXFxuICAgICNkZWZpbmUgRlhBQV9SRURVQ0VfTVVMICAgKDEuMCAvIDguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfU1BBTl9NQVhcXG4gICAgI2RlZmluZSBGWEFBX1NQQU5fTUFYICAgICA4LjBcXG4jZW5kaWZcXG5cXG4vL29wdGltaXplZCB2ZXJzaW9uIGZvciBtb2JpbGUsIHdoZXJlIGRlcGVuZGVudFxcbi8vdGV4dHVyZSByZWFkcyBjYW4gYmUgYSBib3R0bGVuZWNrXFxudmVjNCBmeGFhKHNhbXBsZXIyRCB0ZXgsIHZlYzIgZnJhZ0Nvb3JkLCB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk5XLCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYlNXLCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjNCBjb2xvcjtcXG4gICAgbWVkaXVtcCB2ZWMyIGludmVyc2VWUCA9IHZlYzIoMS4wIC8gcmVzb2x1dGlvbi54LCAxLjAgLyByZXNvbHV0aW9uLnkpO1xcbiAgICB2ZWMzIHJnYk5XID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JOVykueHl6O1xcbiAgICB2ZWMzIHJnYk5FID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JORSkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTVykueHl6O1xcbiAgICB2ZWMzIHJnYlNFID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTRSkueHl6O1xcbiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JNKTtcXG4gICAgdmVjMyByZ2JNICA9IHRleENvbG9yLnh5ejtcXG4gICAgdmVjMyBsdW1hID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTtcXG4gICAgZmxvYXQgbHVtYU5XID0gZG90KHJnYk5XLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KHJnYk5FLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gZG90KHJnYlNXLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNFID0gZG90KHJnYlNFLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KHJnYk0sICBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU1pbiA9IG1pbihsdW1hTSwgbWluKG1pbihsdW1hTlcsIGx1bWFORSksIG1pbihsdW1hU1csIGx1bWFTRSkpKTtcXG4gICAgZmxvYXQgbHVtYU1heCA9IG1heChsdW1hTSwgbWF4KG1heChsdW1hTlcsIGx1bWFORSksIG1heChsdW1hU1csIGx1bWFTRSkpKTtcXG5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpcjtcXG4gICAgZGlyLnggPSAtKChsdW1hTlcgKyBsdW1hTkUpIC0gKGx1bWFTVyArIGx1bWFTRSkpO1xcbiAgICBkaXIueSA9ICAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuXFxuICAgIGZsb2F0IGRpclJlZHVjZSA9IG1heCgobHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFKSAqXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNSAqIEZYQUFfUkVEVUNFX01VTCksIEZYQUFfUkVEVUNFX01JTik7XFxuXFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvIChtaW4oYWJzKGRpci54KSwgYWJzKGRpci55KSkgKyBkaXJSZWR1Y2UpO1xcbiAgICBkaXIgPSBtaW4odmVjMihGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgIG1heCh2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBkaXIgKiByY3BEaXJNaW4pKSAqIGludmVyc2VWUDtcXG5cXG4gICAgdmVjMyByZ2JBID0gMC41ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDEuMCAvIDMuMCAtIDAuNSkpLnh5eiArXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMi4wIC8gMy4wIC0gMC41KSkueHl6KTtcXG4gICAgdmVjMyByZ2JCID0gcmdiQSAqIDAuNSArIDAuMjUgKiAoXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAtMC41KS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogMC41KS54eXopO1xcblxcbiAgICBmbG9hdCBsdW1hQiA9IGRvdChyZ2JCLCBsdW1hKTtcXG4gICAgaWYgKChsdW1hQiA8IGx1bWFNaW4pIHx8IChsdW1hQiA+IGx1bWFNYXgpKVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkEsIHRleENvbG9yLmEpO1xcbiAgICBlbHNlXFxuICAgICAgICBjb2xvciA9IHZlYzQocmdiQiwgdGV4Q29sb3IuYSk7XFxuICAgIHJldHVybiBjb2xvcjtcXG59XFxuXFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGZ4YWEodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKiB2UmVzb2x1dGlvbiwgdlJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxuXFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG59XG5cbkZYQUFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRlhBQUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGWEFBRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBGWEFBRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cbkZYQUFGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlciggcmVuZGVyZXIgKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBTcHJpdGVNYXNrRmlsdGVyIGNsYXNzXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSB0YXJnZXQgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZU1hc2tGaWx0ZXIoc3ByaXRlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgICB2TWFza0Nvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFza0Nvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgLy8gY2hlY2sgY2xpcCEgdGhpcyB3aWxsIHN0b3AgdGhlIG1hc2sgYmxlZWRpbmcgb3V0IGZyb20gdGhlIGVkZ2VzXFxuICAgIHZlYzIgdGV4dCA9IGFicyggdk1hc2tDb29yZCAtIDAuNSApO1xcbiAgICB0ZXh0ID0gc3RlcCgwLjUsIHRleHQpO1xcbiAgICBmbG9hdCBjbGlwID0gMS4wIC0gbWF4KHRleHQueSwgdGV4dC54KTtcXG4gICAgdmVjNCBvcmlnaW5hbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgIHZlYzQgbWFza3kgPSB0ZXh0dXJlMkQobWFzaywgdk1hc2tDb29yZCk7XFxuICAgIG9yaWdpbmFsICo9IChtYXNreS5yICogbWFza3kuYSAqIGFscGhhICogY2xpcCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG9yaWdpbmFsO1xcbn1cXG5cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbWFzazogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUuX3RleHR1cmUgfSxcbiAgICAgICAgICAgIGFscGhhOiAgICAgICAgICB7IHR5cGU6ICdmJywgdmFsdWU6IDF9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcbn1cblxuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0byByZXRyaWV2ZSB0aGUgZmlsdGVyIGZyb21cbiAqIEBwYXJhbSBpbnB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gb3V0cHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqL1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5tYXNrLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLl90ZXh0dXJlO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLndvcmxkQWxwaGE7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZU1hc2tGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgdXNlZCB0byBtb3ZlIHRoZSBkaXNwbGFjZW1lbnQgbWFwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdsTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBCbGVuZE1vZGVNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn1cblxuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZE1vZGVNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGVNYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMtdXAgdGhlIGdpdmVuIGJsZW5kTW9kZSBmcm9tIFdlYkdMJ3MgcG9pbnQgb2Ygdmlldy5cbiAqXG4gKiBAcGFyYW0gYmxlbmRNb2RlIHtudW1iZXJ9IHRoZSBibGVuZE1vZGUsIHNob3VsZCBiZSBhIFBpeGkgY29uc3QsIHN1Y2ggYXMgYFBJWEkuQkxFTkRfTU9ERVMuQUREYC4gU2VlXG4gKiAge0BsaW5rIFBJWEkuQkxFTkRfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLnNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChibGVuZE1vZGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblxuICAgIHZhciBtb2RlID0gdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuY3VycmVudEJsZW5kTW9kZV07XG4gICAgdGhpcy5yZW5kZXJlci5nbC5ibGVuZEZ1bmMobW9kZVswXSwgbW9kZVsxXSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgUXVhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL1F1YWQnKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXTtcblxuICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgIHJlbmRlclRhcmdldDpyZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LFxuICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgIGJvdW5kczpudWxsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldFtdfVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICAvLyBsaXN0ZW4gZm9yIGNvbnRleHQgYW5kIHVwZGF0ZSBuZWNlc3NhcnkgYnVmZmVyc1xuICAgIC8vVE9ETyBtYWtlIHRoaXMgZHluYW1pYyFcbiAgICAvL1RPRE8gdGVzdCB0aGlzIG91dCBieSBmb3JjZXMgcG93ZXIgb2YgdHdvP1xuICAgIHRoaXMudGV4dHVyZVNpemUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgcmVuZGVyZXIud2lkdGgsIHJlbmRlcmVyLmhlaWdodCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmcmFtZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBudWxsO1xufVxuXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbHRlck1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlck1hbmFnZXI7XG5cblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVQb29sLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucXVhZCA9IG5ldyBRdWFkKGdsKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcGFyYW0gYnVmZmVyIHtBcnJheUJ1ZmZlcn1cbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuc2V0RmlsdGVyU3RhY2sgPSBmdW5jdGlvbiAoIGZpbHRlclN0YWNrIClcbntcbiAgICB0aGlzLmZpbHRlclN0YWNrID0gZmlsdGVyU3RhY2s7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlciBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGZpbHRlcnMge1BJWEkuQWJzdHJhY3RGaWxlcltdfSB0aGUgZmlsdGVycyB0aGF0IHdpbGwgYmUgcHVzaGVkIHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFja1xuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5wdXNoRmlsdGVyID0gZnVuY3Rpb24gKHRhcmdldCwgZmlsdGVycylcbntcbiAgICAvLyBnZXQgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0Li5cbiAgICAvLyBUT0RPIHJlcGxhY2UgY2xvbmUgd2l0aCBhIGNvcHkgdG8gc2F2ZSBvYmplY3QgY3JlYXRpb25cbiAgICB2YXIgYm91bmRzID0gdGFyZ2V0LmZpbHRlckFyZWEgPyB0YXJnZXQuZmlsdGVyQXJlYS5jbG9uZSgpIDogdGFyZ2V0LmdldEJvdW5kcygpO1xuXG4gICAgLy9ib3VuZHMgPSBib3VuZHMuY2xvbmUoKTtcblxuICAgIC8vIHJvdW5kIG9mZiB0aGUgcmVjdGFuZ2xlIHRvIGdldCBhIG5pY2Ugc21vb29vb29vdGggZmlsdGVyIDopXG4gICAgYm91bmRzLnggPSBib3VuZHMueCB8IDA7XG4gICAgYm91bmRzLnkgPSBib3VuZHMueSB8IDA7XG4gICAgYm91bmRzLndpZHRoID0gYm91bmRzLndpZHRoIHwgMDtcbiAgICBib3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCB8IDA7XG5cblxuICAgIC8vIHBhZGRpbmchXG4gICAgdmFyIHBhZGRpbmcgPSBmaWx0ZXJzWzBdLnBhZGRpbmcgfCAwO1xuICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLnkgLT0gcGFkZGluZztcbiAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcblxuXG4gICAgaWYodGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vVE9ETyB0aGlzIHdpbGwgYnJlYWsgaWYgdGhlIHJlbmRlclRleHR1cmUgdHJhbnNmb3JtIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYSB0cmFuc2xhdGlvbi5cbiAgICAgICAgLy9XaWxsIG5lZWQgdG8gdGFrZSB0aGUgZnVsbCBtYXRyaXggdHJhbnNmb3JtIGludG8gYWNvdW50Li5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm07XG5cbiAgICAgICAgYm91bmRzLnggKz0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSArPSB0cmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdGhpcy5jYXBGaWx0ZXJBcmVhKCBib3VuZHMgKTtcblxuICAgICAgICBib3VuZHMueCAtPSB0cmFuc2Zvcm0udHg7XG4gICAgICAgIGJvdW5kcy55IC09IHRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG4gICAgfVxuXG4gICAgaWYoYm91bmRzLndpZHRoID4gMCAmJiBib3VuZHMuaGVpZ2h0ID4gMClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gYm91bmRzO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBjbGVhciB0aGUgdGV4dHVyZS4uXG4gICAgICAgIHRleHR1cmUuY2xlYXIoKTtcblxuICAgICAgICAvLyBUT0RPIGdldCByaWQgb2Ygb2JqZWN0IGNyZWF0aW9uIVxuICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OiB0ZXh0dXJlLFxuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJzXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIHB1c2ggc29tdGhpbmcgb24gdG8gdGhlIHN0YWNrIHRoYXQgaXMgZW1wdHlcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucG9wRmlsdGVyID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2sucG9wKCk7XG4gICAgdmFyIHByZXZpb3VzRmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2tbdGhpcy5maWx0ZXJTdGFjay5sZW5ndGgtMV07XG5cbiAgICB2YXIgaW5wdXQgPSBmaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIGlmIHRoZSByZW5kZXJUYXJnZXQgaXMgbnVsbCB0aGVuIHdlIGRvbid0IGFwcGx5IHRoZSBmaWx0ZXIgYXMgaXRzIG9mZnNjcmVlblxuICAgIGlmKCFmaWx0ZXJEYXRhLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gcHJldmlvdXNGaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIHVzZSBwcm9ncmFtXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpbnB1dC5mcmFtZTtcblxuICAgIHRoaXMucXVhZC5tYXAodGhpcy50ZXh0dXJlU2l6ZSwgaW5wdXQuZnJhbWUpO1xuXG5cbiAgICAvLyBUT0RPLi4gdGhpcyBwcm9iYWJseSBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBmaWx0ZXJzID0gZmlsdGVyRGF0YS5maWx0ZXI7XG5cbiAgICAvLyBhc3N1bWluZyBhbGwgZmlsdGVycyBmb2xsb3cgdGhlIGNvcnJlY3QgZm9ybWF0Pz9cbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgbm9ybWFsIGJsZW5kbW9kZSFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKENPTlNULkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDEpXG4gICAge1xuICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICBpZiAoZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJzWzBdLmFwcGx5RmlsdGVyKCB0aGlzLnJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0ICk7XG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBpbnB1dCApO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBmbGlwVGV4dHVyZSA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcFRleHR1cmUgPSB0aGlzLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGZpbHRlcnNbaV07XG5cbiAgICAgICAgICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSB0aGVuIHNldHRpbmcgdGhpcyBlYWNoIHRpbWU/XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlci5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIGZsb3BUZXh0dXJlICk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gZmxpcFRleHR1cmU7XG4gICAgICAgICAgICBmbGlwVGV4dHVyZSA9IGZsb3BUZXh0dXJlO1xuICAgICAgICAgICAgZmxvcFRleHR1cmUgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aC0xXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIG91dHB1dCApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBmbGlwVGV4dHVyZSApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxvcFRleHR1cmUgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyRGF0YS5maWx0ZXI7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgUmVuZGVyVGFyZ2V0XG4gKiBAcmV0dXJuIHtSZW5kZXJUYXJnZXR9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICggY2xlYXIgKVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSB0aGlzLnRleHR1cmVQb29sLnBvcCgpIHx8IG5ldyBSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJlci5nbCwgdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQsIENPTlNULlNDQUxFX01PREVTLkxJTkVBUiwgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uICogQ09OU1QuRklMVEVSX1JFU09MVVRJT04pO1xuICAgIHJlbmRlclRhcmdldC5mcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJUYXJnZXQ7XG59O1xuXG4vKlxuICogUmV0dXJucyBhIFJlbmRlclRhcmdldCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UmVuZGVyVGFyZ2V0fSBUaGUgUmVuZGVyVGFyZ2V0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnJldHVyblJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5wdXNoKCByZW5kZXJUYXJnZXQgKTtcbn07XG5cbi8qXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBzaGFkZXIge1NoYWRlcn0gVGhlIHNoYWRlciB0byB1cGxvYWRcbiAqIEBwYXJhbSBpbnB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAoc2hhZGVyLCBpbnB1dFRhcmdldCwgb3V0cHV0VGFyZ2V0LCBjbGVhcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQob3V0cHV0VGFyZ2V0KTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIG91dHB1dFRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2hhZGVyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBDYW4gdGhpcyBiZSBjYWNoZWQgYW5kIG5vdCBgdG9BcnJheWBlZCBlYWNoIGZyYW1lP1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcblxuICAgIC8vVE9ETyBjYW4gdGhpcyBiZSBvcHRpbWlzZWQ/XG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuLypcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMiAqIDQgKiA0KTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuKi9cblxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGlucHV0VGFyZ2V0LnRleHR1cmUpO1xuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIG1hcHBlZCBtYXRyaXhcbiAqIEBwYXJhbSBmaWx0ZXJBcmVhIHtSZWN0YW5nbGV9IFRoZSBmaWx0ZXIgYXJlYVxuICogQHBhcmFtIHNwcml0ZSB7U3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICogQHBhcmFtIG91dHB1dE1hdHJpeCB7TWF0cml4fSBAYWx2aW5cbiAqL1xuLy8gVE9ETyBwbGF5aW5nIGFyb3VuZCBoZXJlLi4gdGhpcyBpcyB0ZW1wb3JhcnkgLSAod2lsbCBlbmQgdXAgaW4gdGhlIHNoYWRlcilcbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeCA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhLCBzcHJpdGUsIG91dHB1dE1hdHJpeClcbntcbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBzcHJpdGUud29ybGRUcmFuc2Zvcm0uY29weShtYXRoLk1hdHJpeC5URU1QX01BVFJJWCksXG4gICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIHZhciBtYXBwZWRNYXRyaXggPSBvdXRwdXRNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIC8vIHNjYWxlLi5cbiAgICB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICBtYXBwZWRNYXRyaXgudHJhbnNsYXRlKGZpbHRlckFyZWEueCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIGZpbHRlckFyZWEueSAvIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0ICk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIHJhdGlvKTtcblxuICAgIHZhciB0cmFuc2xhdGVTY2FsZVggPSAodGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAvIHRleHR1cmUud2lkdGgpO1xuICAgIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0ZXh0dXJlLmhlaWdodCk7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS50eCAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuICAgIHdvcmxkVHJhbnNmb3JtLnR5IC89IHRleHR1cmUud2lkdGggKiB0cmFuc2xhdGVTY2FsZVg7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIG1hcHBlZE1hdHJpeC5wcmVwZW5kKHdvcmxkVHJhbnNmb3JtKTtcblxuICAgIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIG1hcHBlZE1hdHJpeC5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShzcHJpdGUuYW5jaG9yLngsIHNwcml0ZS5hbmNob3IueSk7XG5cbiAgICByZXR1cm4gbWFwcGVkTWF0cml4O1xuXG4gICAgLy8gS2VlcGluZyB0aGUgb3JnaW5hbCBhcyBhIHJlbWluZGVyIHRvIG1lIG9uIGhvdyB0aGlzIHdvcmtzIVxuICAgIC8vXG4gICAgLy8gdmFyIG0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuICAgIC8vIC8vIHNjYWxlLi5cbiAgICAvLyB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICAvLyBtLnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCk7XG5cblxuICAgIC8vIG0uc2NhbGUoMSAsIHJhdGlvKTtcblxuXG4gICAgLy8gdmFyIHRyYW5zZm9ybSA9IHd0LmNsb25lKCk7XG5cbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyA2MjApO1xuICAgIC8vIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyAzODApO1xuXG4gICAgLy8gdHJhbnNmb3JtLnR4IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICAvLyB0cmFuc2Zvcm0udHkgLz0gNjIwICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgLy8gdHJhbnNmb3JtLmludmVydCgpO1xuXG4gICAgLy8gdHJhbnNmb3JtLmFwcGVuZChtKTtcblxuICAgIC8vIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIC8vIHRyYW5zZm9ybS5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgLy8gcmV0dXJuIHRyYW5zZm9ybTtcbn07XG5cbi8qXG4gKiBDb25zdHJhaW5zIHRoZSBmaWx0ZXIgYXJlYSB0byB0aGUgdGV4dHVyZSBzaXplXG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWEgd2Ugd2FudCB0byBjYXBcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY2FwRmlsdGVyQXJlYSA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhKVxue1xuICAgIGlmIChmaWx0ZXJBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCArPSBmaWx0ZXJBcmVhLng7XG4gICAgICAgIGZpbHRlckFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlckFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLmhlaWdodCArPSBmaWx0ZXJBcmVhLnk7XG4gICAgICAgIGZpbHRlckFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnggKyBmaWx0ZXJBcmVhLndpZHRoID4gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLndpZHRoID0gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAtIGZpbHRlckFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGZpbHRlckFyZWEueSArIGZpbHRlckFyZWEuaGVpZ2h0ID4gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAtIGZpbHRlckFyZWEueTtcbiAgICB9XG59O1xuXG4vKlxuICogUmVzaXplcyBhbGwgdGhlIHJlbmRlciB0YXJnZXRzIGluIHRoZSBwb29sXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMudGV4dHVyZVNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZVBvb2xbaV0ucmVzaXplKCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgZmlsdGVyIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGZpbHRlciBzdGFjay5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucXVhZC5kZXN0cm95KCk7XG4gICAgXG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG4gICAgXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IG51bGw7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGV4dHVyZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVQb29sID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBBbHBoYU1hc2tGaWx0ZXIgPSByZXF1aXJlKCcuLi9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuc3RlbmNpbFN0YWNrID0gW107XG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ID0gMDtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbCA9IFtdO1xufVxuXG5NYXNrTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFNwcml0ZU1hc2sodGFyZ2V0LCBtYXNrRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IG1hc2sgZnJvbSB0aGUgbWFzayBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIGlmIChtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnBvcFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB2YXIgYWxwaGFNYXNrRmlsdGVyID0gdGhpcy5hbHBoYU1hc2tQb29sLnBvcCgpO1xuXG4gICAgaWYgKCFhbHBoYU1hc2tGaWx0ZXIpXG4gICAge1xuICAgICAgICBhbHBoYU1hc2tGaWx0ZXIgPSBbbmV3IEFscGhhTWFza0ZpbHRlcihtYXNrRGF0YSldO1xuICAgIH1cblxuICAgIGFscGhhTWFza0ZpbHRlclswXS5tYXNrU3ByaXRlID0gbWFza0RhdGE7XG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGFyZ2V0LCBhbHBoYU1hc2tGaWx0ZXIpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBmaWx0ZXJzID0gdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgdGhpcy5hbHBoYU1hc2tQb29sLnB1c2goZmlsdGVycyk7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoTWFzayhtYXNrRGF0YSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcE1hc2sobWFza0RhdGEpO1xufTtcblxuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpLFxuICAgIENvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXInKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTaGFkZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heEF0dGlicyA9IDEwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXhBdHRpYnM7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YWNrID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcblxuLy8gICAgdGhpcy5pbml0UGx1Z2lucygpO1xufVxuXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hbmFnZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oU2hhZGVyTWFuYWdlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyTWFuYWdlcjtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRyaWJ1dGUgY29ycmVjdGx5IGFzIHRoaXMgdGVuZHMgdG8gdmFyeVxuICAgIHRoaXMubWF4QXR0aWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVE9ETyAtIFdoeSBhcmUgdGhlc2Ugbm90IHBsdWdpbnM/IFdlIGNhbid0IGRlY291cGxlIHByaW1pdGl2ZXMgdW5sZXNzIHRoZXkgYXJlLi4uLlxuICAgIHRoaXMuZGVmYXVsdFNoYWRlciA9IG5ldyBUZXh0dXJlU2hhZGVyKHRoaXMpO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBuZXcgQ29tcGxleFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogVGFrZXMgdGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gaW4gcGFyYW1ldGVycyBhbmQgdXBsb2FkcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJzIHthbnlbXX0gYXR0cmlic1xuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRBdHRyaWJzID0gZnVuY3Rpb24gKGF0dHJpYnMpXG57XG4gICAgLy8gcmVzZXQgdGVtcCBzdGF0ZVxuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMudGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yICh2YXIgYSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbYXR0cmlic1thXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYlN0YXRlW2ldICE9PSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgc2hhZGVyLlxuICpcbiAqIEBwYXJhbSBzaGFkZXIge1BJWEkuU2hhZGVyfSB0aGUgc2hhZGVyIHRvIHVwbG9hZFxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKVxue1xuICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5fY3VycmVudElkID09PSBzaGFkZXIudWlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IHNoYWRlci51aWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBzaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmdsLnVzZVByb2dyYW0oc2hhZGVyLnByb2dyYW0pO1xuICAgIHRoaXMuc2V0QXR0cmlicyhzaGFkZXIuYXR0cmlidXRlcyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBvYmplY3QuXG4gKlxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLmRlc3Ryb3koKTtcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBudWxsO1xufTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFza01hbmFnZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG51bGw7XG59XG5cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBtYXNrIHN0YWNrIHRoYXQgaXMgdXNlZCBieSB0aGlzIG1hbmFnZXIuXG4gKlxuICogQHBhcmFtIHN0ZW5jaWxNYXNrU3RhY2sge1BJWEkuU3RlbmNpbE1hc2tTdGFja30gVGhlIG1hc2sgc3RhY2tcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuc2V0TWFza1N0YWNrID0gZnVuY3Rpb24gKCBzdGVuY2lsTWFza1N0YWNrIClcbntcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBzdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIGlmIChzdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suIEBhbHZpblxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hdHRhY2hTdGVuY2lsQnVmZmVyKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBzbXMgPSB0aGlzLnN0ZW5jaWxNYXNrU3RhY2s7XG5cbiAgICB0aGlzLmJpbmRHcmFwaGljcyhncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xuICAgICAgICBzbXMucmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIHNtcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wdXNoKHdlYkdMRGF0YSk7XG5cbiAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgLy8gZHJhdyB0aGUgdHJpYW5nbGUgc3RyaXAhXG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IGEgcXVhZCB0byBpbmNyZW1lbnQuLlxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cbiAgICBzbXMuY291bnQrKztcbn07XG5cbi8qKlxuICogVE9ETyB0aGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIVxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5iaW5kR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICAvL2lmICh0aGlzLl9jdXJyZW50R3JhcGhpY3MgPT09IGdyYXBoaWNzKXJldHVybjtcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGJpbmQgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgdmFyIHNoYWRlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICAvKlxuICAgICAgICBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMuY29sb3IuX2xvY2F0aW9uLCB3ZWJHTERhdGEuY29sb3IpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDIsIDApO1xuXG4gICAgICAgIC8vIG5vdyBkbyB0aGUgcmVzdC4uXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICovXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmFjdGl2YXRlUHJpbWl0aXZlU2hhZGVyKCk7XG4vLyAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnByaW1pdGl2ZVNoYWRlcjtcbiAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cblxuICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4vLyAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG5cbiAgICAgIC8qICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTFmKHNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEpO1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCA0LCBnbC5GTE9BVCwgZmFsc2UsNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTsqL1xuICAgIH1cbn07XG5cbi8qKlxuICogVE9ETyBAYWx2aW5cbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTdGVuY2lsID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wb3AoKTtcblxuICAgIHNtcy5jb3VudC0tO1xuXG4gICAgaWYgKHNtcy5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgLy8gdGhlIHN0YWNrIGlzIGVtcHR5IVxuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICAgICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuXG4gICAgICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSAobGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOVkVSVCk7XG5cbiAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50ICs9IDI7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAvLyAgY29uc29sZS5sb2coXCI8PD4+XCIpXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcblxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCksIDB4RkYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5LRUVQKTtcblxuXG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgbWFzayBzdGFjay5cbiAqXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjayA9IG51bGw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119IFRoZSBtYXNrIGRhdGEgc3RydWN0dXJlIHRvIHVzZVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgXG4gICAgLy9UT0RPIEZJWFxuICAgIGlmIChtYXNrRGF0YS5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy51cGRhdGVHcmFwaGljcyhtYXNrRGF0YSwgdGhpcy5yZW5kZXJlci5nbCk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119XG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuXG4gICAgdGhpcy5wb3BTdGVuY2lsKG1hc2tEYXRhLCBtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YVswXSk7XG59O1xuXG4iLCIvKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gV2ViR0xNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMucmVuZGVyZXIub24oJ2NvbnRleHQnLCB0aGlzLm9uQ29udGV4dENoYW5nZSwgdGhpcyk7XG59XG5cbldlYkdMTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFuYWdlcjtcblxuLyoqXG4gKiBHZW5lcmljIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXHQvLyBkbyBzb21lIGNvZGVzIGluaXQhXG59O1xuXG4vKipcbiAqIEdlbmVyaWMgZGVzdHJveSBtZXRob2RzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICovXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVuZGVyZXIub2ZmKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IGNvbXBsZXggcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBDb21wbGV4UHJpbWl0aXZlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gdmVjNChjb2xvciAqIGFscGhhICogdGludCwgYWxwaGEpOycsLy9cIiAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdGludDogICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwgMCwgMF0gfSxcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgY29sb3I6ICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwwLDBdIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYUNvbG9yOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCYXNlIHNoYWRlciBjbGFzcyBmb3IgUElYSSBtYW5hZ2VkIHNoYWRlcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFt1bmlmb3Jtc10ge29iamVjdH0gVW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxuICogQHBhcmFtIFthdHRyaWJ1dGVzXSB7b2JqZWN0fSBBdHRyaWJ1dGVzIGZvciB0aGlzIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKVxue1xuICAgIGlmICghdmVydGV4U3JjIHx8ICFmcmFnbWVudFNyYylcbiAgICB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpeGkuanMgRXJyb3IuIFNoYWRlciByZXF1aXJlcyB2ZXJ0ZXhTcmMgYW5kIGZyYWdtZW50U3JjJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmdsID0gc2hhZGVyTWFuYWdlci5yZW5kZXJlci5nbDtcblxuICAgIC8vVE9ETyBtYXliZSB3ZSBzaG91bGQgcGFzcyByZW5kZXJlciByYXRoZXIgdGhhbiBzaGFkZXIgbWFuZ2VyPz8gZm9vZCBmb3IgdGhvdWdodC4uXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyID0gc2hhZGVyTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBwcm9ncmFtLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xQcm9ncmFtfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF0dHJpYnV0ZXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRleHR1cmUgY291bnRlclxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYztcblxuICAgIHRoaXMuaW5pdCgpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc2hhZGVyIGFuZCB1c2VzIGl0XG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29tcGlsZSgpO1xuXG4gICAgdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLnVuaWZvcm1zKSk7XG4gICAgdGhpcy5jYWNoZUF0dHJpYnV0ZUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpKTtcbn07XG5cbi8qKlxuICogQ2FjaGVzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHVuaWZvcm0gZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSB1bmlmb3JtcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyA9IGZ1bmN0aW9uIChrZXlzKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMudW5pZm9ybXNba2V5c1tpXV0uX2xvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBrZXlzW2ldKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSBhdHRyaWJ1dGVzIHRvIGNhY2hlXG4gKi9cblNoYWRlci5wcm90b3R5cGUuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNba2V5c1tpXV0gPSB0aGlzLmdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4uLlxuXG4gICAgLy8gQmVnaW4gd29yc3QgaGFjayBldmEgLy9cblxuICAgIC8vIFdIWT8/PyBPTkxZIG9uIG15IGNocm9tZSBwaXhlbCB0aGUgbGluZSBhYm92ZSByZXR1cm5zIC0xIHdoZW4gdXNpbmcgZmlsdGVycz9cbiAgICAvLyBtYXliZSBpdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdsIGNvbnRleHQuXG4gICAgLy8gSSdtIGNvbnZpbmNlZCB0aGlzIGlzIGEgYnVnIGluIHRoZSBjaHJvbWUgYnJvd3NlciBhcyB0aGVyZSBpcyBOTyByZWFzb24gd2h5IHRoaXMgc2hvdWxkIGJlIHJldHVybmluZyAtMSBlc3BlY2lhbGx5IGFzIGl0IG9ubHkgbWFuaWZlc3RzIG9uIG15IGNocm9tZSBwaXhlbFxuICAgIC8vIElmIHRoZXJlcyBhbnkgd2ViR0wgcGVvcGxlIHRoYXQga25vdyB3aHkgY291bGQgaGFwcGVuIHBsZWFzZSBoZWxwIDopXG4gICAgLy8gaWYgKHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPT09IC0xKXtcbiAgICAvLyAgICAgdGhpcy5hdHRyaWJ1dGVzLmFDb2xvciA9IDI7XG4gICAgLy8gfVxuXG4gICAgLy8gRW5kIHdvcnN0IGhhY2sgZXZhIC8vXG59O1xuXG4vKipcbiAqIEF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZCBjcmVhdGVzIHRoZSBwcm9ncmFtLlxuICpcbiAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX1cbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIGdsVmVydFNoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5WRVJURVhfU0hBREVSLCB0aGlzLnZlcnRleFNyYyk7XG4gICAgdmFyIGdsRnJhZ1NoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuZnJhZ21lbnRTcmMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xGcmFnU2hhZGVyKTtcbiAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcblxuICAgIC8vIGlmIGxpbmtpbmcgZmFpbHMsIHRoZW4gbG9nIGFuZCBjbGVhbnVwXG4gICAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BpeGkuanMgRXJyb3I6IENvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlci4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuVkFMSURBVEVfU1RBVFVTJywgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuZ2V0RXJyb3IoKScsIGdsLmdldEVycm9yKCkpO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcHJvZ3JhbSBpbmZvIGxvZywgbG9nIGl0XG4gICAgICAgIGlmIChnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSAhPT0gJycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBXYXJuaW5nOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpJywgZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgcHJvZ3JhbSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgc29tZSBzaGFkZXJzXG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsVmVydFNoYWRlcik7XG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsRnJhZ1NoYWRlcik7XG5cbiAgICByZXR1cm4gKHRoaXMucHJvZ3JhbSA9IHByb2dyYW0pO1xufTtcblxuLyoqXG4qIEFkZHMgYSBuZXcgdW5pZm9ybVxuKlxuKiBAcGFyYW0gdW5pZm9ybSB7b2JqZWN0fSB0aGUgbmV3IHVuaWZvcm0gdG8gYXR0YWNoXG4qL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBsb2NhdGlvbiA9IHVuaWZvcm0uX2xvY2F0aW9uLFxuICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWUsXG4gICAgICAgIGdsID0gdGhpcy5nbCxcbiAgICAgICAgaSwgaWw7XG5cbiAgICBzd2l0Y2ggKHVuaWZvcm0udHlwZSlcbiAgICB7XG4gICAgICAgIGNhc2UgJ2InOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlID8gMSA6IDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGludCB2YWx1ZVxuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBzaW5nbGUgZmxvYXQgdmFsdWVcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDIpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoMykgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoNCkgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzRmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSAyRCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjInOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgM0QgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YzJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDREIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2NCc6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzFmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzRmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTInOlxuICAgICAgICBjYXNlICdtYXQyJzpcbiAgICAgICAgY2FzZSAnTWF0cml4MmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICBjYXNlICdtYXQzJzpcbiAgICAgICAgY2FzZSAnTWF0cml4M2Z2JzpcblxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICdtNCc6XG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICBjYXNlICdNYXRyaXg0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgQ29sb3IgVmFsdWVcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGludGVnZXJzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIChKUyBvciB0eXBlZCBhcnJheSlcbiAgICAgICAgY2FzZSAnZnYxJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDJEIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjJ2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDIgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDJdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMiArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAzRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yzdic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgzICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMyArIDJdICAgPSB2YWx1ZVtpXS56O1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHVuaWZvcm0uX2FycmF5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDREIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjR2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDRdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgMl0gICA9IHZhbHVlW2ldLno7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAzXSAgID0gdmFsdWVbaV0udztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBQSVhJLlRleHR1cmVcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgIGNhc2UgJ3NhbXBsZXIyRCc6XG5cbiAgICAgICAgICAgIGlmICghdW5pZm9ybS52YWx1ZSB8fCAhdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFjdGl2YXRlIHRoaXMgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0aGlzLnRleHR1cmVDb3VudF0pO1xuXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgICAgICAgICBpZiAoIXRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2FtcGxlcjJEKHVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSB0ZXh0dXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb25lLi5cbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gICAgICAgICAgICAvLyBzZXQgdW5pZm9ybSB0byB0ZXh0dXJlIGluZGV4XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkodW5pZm9ybS5fbG9jYXRpb24sIHRoaXMudGV4dHVyZUNvdW50KTtcblxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IG5leHQgdGV4dHVyZSBpZFxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBTaGFkZXIgV2FybmluZzogVW5rbm93biB1bmlmb3JtIHR5cGU6ICcgKyB1bmlmb3JtLnR5cGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnVuaWZvcm1zKVxuICAgIHtcbiAgICAgICAgdGhpcy5zeW5jVW5pZm9ybSh0aGlzLnVuaWZvcm1zW2tleV0pO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJbml0aWFsaXNlcyBhIFNhbXBsZXIyRCB1bmlmb3JtICh3aGljaCBtYXkgb25seSBiZSBhdmFpbGFibGUgbGF0ZXIgb24gYWZ0ZXIgaW5pdFVuaWZvcm1zIG9uY2UgdGhlIHRleHR1cmUgaGFzIGxvYWRlZClcbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuaW5pdFNhbXBsZXIyRCA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGlmICh1bmlmb3JtLnRleHR1cmVEYXRhKVxuICAgIHtcblxuICAgICAgICAvL1RPRE8gbW92ZSB0aGlzLi4uXG4gICAgICAgIHZhciBkYXRhID0gdW5pZm9ybS50ZXh0dXJlRGF0YTtcblxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG5cbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGxpZWRBbHBoYSk7XG4gICAgICAgIC8vIEdMVGV4dHVyZSA9IG1hZyBsaW5lYXIsIG1pbiBsaW5lYXJfbWlwbWFwX2xpbmVhciwgd3JhcCByZXBlYXQgKyBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgLy8gR0xUZXh0dXJlTGluZWFyID0gbWFnL21pbiBsaW5lYXIsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdFJlcGVhdCA9IG1hZy9taW4gTkVBUkVTVCwgd3JhcCByZXBlYXRcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdCA9IG1hZy9taW4gbmVhcmVzdCwgd3JhcCBjbGFtcFxuICAgICAgICAvLyBBdWRpb1RleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDUxMiwgaGVpZ2h0IDIsIGJvcmRlciAwXG4gICAgICAgIC8vIEtleVRleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDI1NiwgaGVpZ2h0IDIsIGJvcmRlciAwXG5cbiAgICAgICAgLy8gIG1hZ0ZpbHRlciBjYW4gYmU6IGdsLkxJTkVBUiwgZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgb3IgZ2wuTkVBUkVTVFxuICAgICAgICAvLyAgd3JhcFMvVCBjYW4gYmU6IGdsLkNMQU1QX1RPX0VER0Ugb3IgZ2wuUkVQRUFUXG5cbiAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBkYXRhLmx1bWluYW5jZSA/IGdsLkxVTUlOQU5DRSA6IGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRleHR1cmUuc291cmNlKTtcblxuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZGF0YS5tYWdGaWx0ZXIgPyBkYXRhLm1hZ0ZpbHRlciA6IGdsLkxJTkVBUiApO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFICk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZGF0YS53cmFwVCA/IGRhdGEud3JhcFQgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5zaGFkZXJNYW5hZ2VyLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgc2hhZGVyLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmdsLmRlbGV0ZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgIHRoaXMudW5pZm9ybXMgPSBudWxsO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleFNyYyA9IG51bGw7XG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IG51bGw7XG59O1xuXG5TaGFkZXIucHJvdG90eXBlLl9nbENvbXBpbGUgPSBmdW5jdGlvbiAodHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIHRoaXMuZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc3JjKTtcbiAgICB0aGlzLmdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghdGhpcy5nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCB0aGlzLmdsLkNPTVBJTEVfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIGN1c3RvbVVuaWZvcm1zLCBjdXN0b21BdHRyaWJ1dGVzKVxue1xuICAgIHZhciB1bmlmb3JtcyA9IHtcblxuICAgICAgICB1U2FtcGxlcjogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiAwIH0sXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6ICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDFdKSB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21Vbmlmb3JtcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIHUgaW4gY3VzdG9tVW5pZm9ybXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVuaWZvcm1zW3VdID0gY3VzdG9tVW5pZm9ybXNbdV07XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBhVmVydGV4UG9zaXRpb246ICAgIDAsXG4gICAgICAgIGFUZXh0dXJlQ29vcmQ6ICAgICAgMCxcbiAgICAgICAgYUNvbG9yOiAgICAgICAgICAgICAwXG4gICAgfTtcblxuICAgIGlmIChjdXN0b21BdHRyaWJ1dGVzKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgYSBpbiBjdXN0b21BdHRyaWJ1dGVzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2FdID0gY3VzdG9tQXR0cmlidXRlc1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IHZlcnRleFNyYyB8fCBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcyk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKGdsKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IFRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgZnJhZ21lbnRTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYztcblxuICAgIFNoYWRlci5jYWxsKHRoaXMsIGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTsvLywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xuXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuLi9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBCYXNlIGZvciBhIGNvbW1vbiBvYmplY3QgcmVuZGVyZXIgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHN5c3RlbSByZW5kZXJlciBwbHVnaW4uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBPYmplY3RSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59XG5cblxuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9iamVjdFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RSZW5kZXJlcjtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHJlbmRlcmVyIGFuZCBzZXRzIHRoZSBzaGFkZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gc2V0IHRoZSBzaGFkZXIuLlxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgcmVuZGVyZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIGZsdXNoZXNcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gZmx1c2ghXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyByZW5kZXIgdGhlIG9iamVjdFxufTtcbiIsIi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHF1YWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gVGhlIGdsIGNvbnRleHQgZm9yIHRoaXMgcXVhZCB0byB1c2UuXG4gKi9cbmZ1bmN0aW9uIFF1YWQoZ2wpXG57XG4gICAgLypcbiAgICAgKiB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbi8vICAgIHRoaXMudGV4dHVyZXMgPSBuZXcgVGV4dHVyZVV2cygpO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMjAwLDAsXG4gICAgICAgIDIwMCwyMDAsXG4gICAgICAgIDAsMjAwXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBxdWFkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KFtcbiAgICAgICAgMCwwLFxuICAgICAgICAxLDAsXG4gICAgICAgIDEsMSxcbiAgICAgICAgMCwxXG4gICAgXSk7XG5cbi8vICAgIHZhciB3aGl0ZSA9ICgweEZGRkZGRiA+PiAxNikgKyAoMHhGRkZGRkYgJiAweGZmMDApICsgKCgweEZGRkZGRiAmIDB4ZmYpIDw8IDE2KSArICgxICogMjU1IDw8IDI0KTtcbiAgICAvL1RPRE8gY29udmVydCB0aGlzIHRvIGEgMzIgdW5zaWduZWQgaW50IGFycmF5XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIGNvbXBvbmVudHMgb2YgdGhlIHRyaWFuZ2xlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDFcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KFtcbiAgICAgICAgMCwgMSwgMiwgMCwgMywgMlxuICAgIF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIHZlcnRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICg4ICsgOCArIDE2KSAqIDQsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59XG5cblF1YWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUXVhZDtcblxuLyoqXG4gKiBNYXBzIHR3byBSZWN0YW5nbGUgdG8gdGhlIHF1YWRcbiAqIEBwYXJhbSByZWN0IHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZpcnN0IHJlY3RhbmdsZVxuICogQHBhcmFtIHJlY3QyIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHNlY29uZCByZWN0YW5nbGVcbiAqL1xuUXVhZC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24ocmVjdCwgcmVjdDIpXG57XG4gICAgdmFyIHggPSAwOyAvL3JlY3QyLnggLyByZWN0LndpZHRoO1xuICAgIHZhciB5ID0gMDsgLy9yZWN0Mi55IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1swXSA9IHg7XG4gICAgdGhpcy51dnNbMV0gPSB5O1xuXG4gICAgdGhpcy51dnNbMl0gPSB4ICsgcmVjdDIud2lkdGggLyByZWN0LndpZHRoO1xuICAgIHRoaXMudXZzWzNdID0geTtcblxuICAgIHRoaXMudXZzWzRdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIHRoaXMudXZzWzZdID0geDtcbiAgICB0aGlzLnV2c1s3XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIC8vLyAtLS0tLVxuICAgIHggPSByZWN0Mi54O1xuICAgIHkgPSByZWN0Mi55O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1swXSA9IHg7XG4gICAgdGhpcy52ZXJ0aWNlc1sxXSA9IHk7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzJdID0geCArIHJlY3QyLndpZHRoO1xuICAgIHRoaXMudmVydGljZXNbM10gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1s0XSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzVdID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudmVydGljZXNbNl0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0O1xuXG4gICAgdGhpcy51cGxvYWQoKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlciBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5RdWFkLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIFRPRE8gY291bGQgcHJvYmFibHkgYmUgcHVzaGVkIGludG8gb25lIHVwbG9hZCFcbiAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHRoaXMudmVydGV4QnVmZmVyICk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy52ZXJ0aWNlcyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgOCAqIDQsIHRoaXMudXZzKTtcblxuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDgpICogNCwgdGhpcy5jb2xvcnMpO1xufTtcblxuUXVhZC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWQ7XG5cblxuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKSxcbiAgICAgICAgXG4gICAgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuICAgIEdMRnJhbWVidWZmZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTEZyYW1lYnVmZmVyLFxuICAgIFxuICAgIFN0ZW5jaWxNYXNrU3RhY2sgPSByZXF1aXJlKCcuL1N0ZW5jaWxNYXNrU3RhY2snKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqL1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgaG9yaXpvbnRhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSB2ZXJ0aWNhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICogQHBhcmFtIHJvb3Qge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAqL1xudmFyIFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24sIHJvb3QpXG57XG4gICAgLy9UT0RPIFJlc29sdXRpb24gY291bGQgZ28gaGVyZSAoIGVnIGxvdyByZXMgYmx1cnMgKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vIG5leHQgdGltZSB0byBjcmVhdGUgYSBmcmFtZSBidWZmZXIgYW5kIHRleHR1cmVcblxuICAgIC8qKlxuICAgICAqIEEgZnJhbWUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEZyYW1lQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuXG4gICAgdGhpcy5jbGVhckNvbG9yID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIG9iamVjdCBhcyBhIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2JqZWN0J3MgdHJhbnNmb3JtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk1hdHJpeH1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lID0gbnVsbDtcbiAgICBcbiAgICB0aGlzLmRlZmF1bHRGcmFtZSA9IG5ldyBQSVhJLlJlY3RhbmdsZSgpO1xuICAgIHRoaXMuZGVzdGluYXRpb25GcmFtZSA9IG51bGw7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgc3RvcmVzIG1hc2tpbmcgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbEJ1ZmZlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzdGVuY2lsIG1hc2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gbmV3IFN0ZW5jaWxNYXNrU3RhY2soKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyBmaWx0ZXIgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDp0aGlzLFxuICAgICAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICAgICAgYm91bmRzOnRoaXMuc2l6ZVxuICAgICAgICB9XG4gICAgXTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEEgZnJhbWUgYnVmZmVyIG5lZWRzIGEgdGFyZ2V0IHRvIHJlbmRlciB0by4uXG4gICAgICAgICAgICBjcmVhdGUgYSB0ZXh0dXJlIGFuZCBiaW5kIGl0IGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAgICAgKi9cbiAgICAgICAgXG5cbiAgICAgICAvLyBUT0RPIGNoYW5nZSFcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGJ5IHRoZSBiYXNlIHRleHR1cmVcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGhpcy5mcmFtZUJ1ZmZlci50ZXh0dXJlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBtYWtlIGl0IGEgbnVsbCBmcmFtZWJ1ZmZlci4uXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZnJhbWVidWZmZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xufTtcblxuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRhcmdldDtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGFyZ2V0O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZmlsdGVyIHRleHR1cmUuXG4gKlxuICogQHBhcmFtIFtiaW5kPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIHdlIGJpbmQgb3VyIGZyYW1lYnVmZmVyIGJlZm9yZSBjbGVhcmluZz9cbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGNsZWFyQ29sb3IpXG57XG4gICAgdmFyIGNjID0gY2xlYXJDb2xvciB8fCB0aGlzLmNsZWFyQ29sb3JcbiAgICB0aGlzLmZyYW1lQnVmZmVyLmNsZWFyKGNjWzBdLGNjWzFdLGNjWzJdLGNjWzNdKS8vcixnLGIsYSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuYXR0YWNoU3RlbmNpbEJ1ZmZlciA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPRE8gY2hlY2sgaWYgc3RlbmNpbCBpcyBkb25lP1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBpcyB1c2VkIGZvciBtYXNraW5nIGluIHBpeGlcbiAgICAgKiBsZXRzIGNyZWF0ZSBvbmUgYW5kIHRoZW4gYWRkIGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVTdGVuY2lsKCk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCBpbml0aWFsaXNlcyB0aGUgdmlld3BvcnQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oZGVzdGluYXRpb25GcmFtZSwgc291cmNlRnJhbWUpXG57XG4gICAgLy9UT09EIHJlZmFjdG9yIHVzYWdlIG9mIGZyYW1lLi5cbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5iaW5kKCk7XG5cbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBkZXN0aW5hdGlvbkZyYW1lIHx8IHRoaXMuZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlZmF1bHRGcmFtZTtcbiAgICB0aGlzLnNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgdGhpcy5zb3VyY2VGcmFtZSB8fCBkZXN0aW5hdGlvbkZyYW1lO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUsIHRoaXMuc291cmNlRnJhbWUgKTtcblxuICAgIGlmKHRoaXMudHJhbnNmb3JtKVxuICAgIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFwcGVuZCh0aGlzLnRyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5kZXN0aW5hdGlvbkZyYW1lICE9PSB0aGlzLnNvdXJjZUZyYW1lKVxuICAgIHtcbiAgICAgICAgZ2wuZW5hYmxlKGdsLlNDSVNTT1JfVEVTVCk7XG4gICAgICAgIGdsLnNjaXNzb3IodGhpcy5kZXN0aW5hdGlvbkZyYW1lLngsIHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGgqIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgIH1cblxuXG4gICAgLy8gVE9ETyAtIGRvZXMgbm90IG5lZWQgdG8gYmUgdXBkYXRlZCBhbGwgdGhlIHRpbWU/P1xuICAgIGdsLnZpZXdwb3J0KHRoaXMuZGVzdGluYXRpb25GcmFtZS54LHRoaXMuZGVzdGluYXRpb25GcmFtZS55LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuXG5cbn07XG5cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBwcm9qZWN0aW9uIG1hdHJpeCBiYXNlZCBvbiBhIHByb2plY3Rpb24gZnJhbWUgKHdoaWNoIGlzIGEgcmVjdGFuZ2xlKVxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jYWxjdWxhdGVQcm9qZWN0aW9uID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcblxuICAgIHNvdXJjZUZyYW1lID0gc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHBtLmlkZW50aXR5KCk7XG5cbiAgICAvLyBUT0RPOiBtYWtlIGRlc3Qgc2NhbGUgc291cmNlXG4gICAgaWYgKCF0aGlzLnJvb3QpXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBzb3VyY2VGcmFtZS54ICogcG0uYTtcbiAgICAgICAgcG0udHkgPSAtMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBwbS5hID0gMSAvIGRlc3RpbmF0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IC0xIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gMSAtIHNvdXJjZUZyYW1lLnkgKiBwbS5kO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBSZXNpemVzIHRoZSB0ZXh0dXJlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7TnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gaGVpZ2h0IHtOdW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgd2lkdGggPSB3aWR0aCB8IDA7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDtcblxuICAgIGlmICh0aGlzLnNpemUud2lkdGggPT09IHdpZHRoICYmIHRoaXMuc2l6ZS5oZWlnaHQgPT09IGhlaWdodCkgXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZGVmYXVsdEZyYW1lLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5kZWZhdWx0RnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5yZXNpemUod2lkdGggKiB0aGlzLnJlc29sdXRpb24sIGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCBwcm9qZWN0aW9uRnJhbWUgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHJlbmRlciB0YXJnZXQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFN0ZW5jaWxNYXNrU3RhY2soKVxue1xuXHQvKipcbiAgICAgKiBUaGUgYWN0dWFsIHN0YWNrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVE9ETyBAYWx2aW5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvdW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb3VudCA9IDA7XG59XG5cblN0ZW5jaWxNYXNrU3RhY2sucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RlbmNpbE1hc2tTdGFjaztcbm1vZHVsZS5leHBvcnRzID0gU3RlbmNpbE1hc2tTdGFjaztcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBNYXBzIGdsIGJsZW5kIGNvbWJpbmF0aW9ucyB0byBXZWJHTFxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcbiAgICBvYmplY3QgPSBvYmplY3QgfHwge307XG5cbiAgICAvL1RPRE8gLSBwcmVtdWx0aXBseSBhbHBoYSB3b3VsZCBiZSBkaWZmZXJlbnQuXG4gICAgLy9hZGQgYSBib29sZWFuIGZvciB0aGF0IVxuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdICAgICAgICA9IFtnbC5PTkUsICAgICAgIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLkRTVF9BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk1VTFRJUExZXSAgICAgID0gW2dsLkRTVF9DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gW2dsLlNSQ19BTFBIQSwgZ2wuT05FXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VdICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSFVFXSAgICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcblxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpO1xuIiwiQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbCwgb2JqZWN0KVxue1xuXHRvYmplY3Q9IG9iamVjdCB8fCB7fTtcblxuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlBPSU5UU10gICAgICAgICA9IGdsLlBPSU5UUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FU10gICAgICAgICAgPSBnbC5MSU5FUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FX0xPT1BdICAgICAgPSBnbC5MSU5FX0xPT1A7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9TVFJJUF0gICAgID0gZ2wuTElORV9TVFJJUDtcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5UUklBTkdMRVNdICAgICAgPSBnbC5UUklBTkdMRVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBdID0gZ2wuVFJJQU5HTEVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXSAgID0gZ2wuVFJJQU5HTEVfRkFOO1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGk7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIFNwcml0ZSBvYmplY3QgaXMgdGhlIGJhc2UgZm9yIGFsbCB0ZXh0dXJlZCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIHRvIHRoZSBzY3JlZW5cbiAqXG4gKiBBIHNwcml0ZSBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGFuIGltYWdlIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSBmb3IgdGhpcyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gU3ByaXRlKHRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW5jaG9yIHNldHMgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLDAgdGhpcyBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMC41LDAuNSBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyBjZW50ZXJlZFxuICAgICAqIFNldHRpbmcgdGhlIGFuY2hvciB0byAxLDEgd291bGQgbWVhbiB0aGUgdGV4dHVyZSdzIG9yaWdpbiBwb2ludCB3aWxsIGJlIHRoZSBib3R0b20gcmlnaHQgY29ybmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuYW5jaG9yID0gbmV3IG1hdGguUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgc3ByaXRlICh0aGlzIGlzIGluaXRpYWxseSBzZXQgYnkgdGhlIHRleHR1cmUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBIHZhbHVlIG9mIDB4RkZGRkZGIHdpbGwgcmVtb3ZlIGFueSB0aW50IGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaGFkZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBzcHJpdGUuIFNldCB0byBudWxsIHRvIHJlbW92ZSBhIGN1cnJlbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5BYnN0cmFjdEZpbHRlcnxQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBjYWNoZWQgdmFsdWUgb2YgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8vIGNhbGwgdGV4dHVyZSBzZXR0ZXJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG4gICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlXG4gICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy52ZXJ0ZXhEYXRhID0gbmV3IEZsb2F0MzJBcnJheSg4KTtcbn1cblxuLy8gY29uc3RydWN0b3JcblNwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuc2NhbGUueCkgKiB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBNYXRoLmFicyh0aGlzLnNjYWxlLnkpICogdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc2lnbiA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS55KSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gc2lnbiAqIHZhbHVlIC8gdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5TcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIHNvIGlmIF93aWR0aCBpcyAwIHRoZW4gd2lkdGggd2FzIG5vdCBzZXQuLlxuICAgIGlmICh0aGlzLl93aWR0aClcbiAgICB7XG4gICAgICAgIHRoaXMuc2NhbGUueCA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS54KSAqIHRoaXMuX3dpZHRoIC8gdGhpcy50ZXh0dXJlLmZyYW1lLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnkgPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgKiB0aGlzLl9oZWlnaHQgLyB0aGlzLnRleHR1cmUuZnJhbWUuaGVpZ2h0O1xuICAgIH1cbn07XG5cblNwcml0ZS5wcm90b3R5cGUuY2FjbHVsYXRlVmVydGljZXMgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICB3dCA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICBhID0gd3QuYSwgYiA9IHd0LmIsIGMgPSB3dC5jLCBkID0gd3QuZCwgdHggPSB3dC50eCwgdHkgPSB3dC50eSxcbiAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDEsXG4gICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG4gICAgICAgIFxuICAgIGlmICh0cmltKVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkIGFuZCBpcyBub3QgYSB0aWxpbmdzcHJpdGUgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgIHcxID0gdHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgIHcwID0gdzEgKyB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgaDEgPSB0cmltLnkgLSB0aGlzLmFuY2hvci55ICogdHJpbS5oZWlnaHQ7XG4gICAgICAgIGgwID0gaDEgKyB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHcwID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICAgICAgdzEgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgICAgIGgwID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgICAgIGgxID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG4gICAgfVxuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzBdID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVsxXSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzJdID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgdmVydGV4RGF0YVszXSA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs0XSA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbNV0gPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVs2XSA9IGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZlcnRleERhdGFbN10gPSBkICogaDAgKyBiICogdzEgKyB0eTtcblxuXG59XG5cbi8qKlxuKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMudGV4dHVyZURpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMudmVydGV4RGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICB9XG4gICAgXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBTcHJpdGUgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgc3ByaXRlXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG4gICAgICAgIGlmKHRoaXMudmVydGV4RGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudmVydGV4RGlydHkgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSB2ZXJ0ZXggZGF0YVxuICAgICAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWluWCxcbiAgICAgICAgICAgIG1heFgsXG4gICAgICAgICAgICBtaW5ZLFxuICAgICAgICAgICAgbWF4WSxcbiAgICAgICAgICAgIHZlcnRleERhdGEgPSB0aGlzLnZlcnRleERhdGE7XG5cbiAgICAgICAgdmFyIHgxID0gdmVydGV4RGF0YVswXVxuICAgICAgICB2YXIgeTEgPSB2ZXJ0ZXhEYXRhWzFdXG5cbiAgICAgICAgdmFyIHgyID0gdmVydGV4RGF0YVsyXVxuICAgICAgICB2YXIgeTIgPSB2ZXJ0ZXhEYXRhWzNdXG5cbiAgICAgICAgdmFyIHgzID0gdmVydGV4RGF0YVs0XVxuICAgICAgICB2YXIgeTMgPSB2ZXJ0ZXhEYXRhWzVdXG5cbiAgICAgICAgdmFyIHg0ID0gdmVydGV4RGF0YVs2XVxuICAgICAgICB2YXIgeTQgPSB2ZXJ0ZXhEYXRhWzddXG5cbiAgICAgICAgbWluWCA9IHgxO1xuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MTtcbiAgICAgICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICAgICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICAgICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgICAgICBtYXhYID0geDE7XG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkxO1xuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIC8vIGNoZWNrIGZvciBjaGlsZHJlblxuICAgICAgICBpZih0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkQm91bmRzID0gdGhpcy5jb250YWluZXJHZXRCb3VuZHMoKTtcblxuICAgICAgICAgICAgdzAgPSBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgdzEgPSBjaGlsZEJvdW5kcy54ICsgY2hpbGRCb3VuZHMud2lkdGg7XG4gICAgICAgICAgICBoMCA9IGNoaWxkQm91bmRzLnk7XG4gICAgICAgICAgICBoMSA9IGNoaWxkQm91bmRzLnkgKyBjaGlsZEJvdW5kcy5oZWlnaHQ7XG5cbiAgICAgICAgICAgIG1pblggPSAobWluWCA8IHcwKSA/IG1pblggOiB3MDtcbiAgICAgICAgICAgIG1pblkgPSAobWluWSA8IGgwKSA/IG1pblkgOiBoMDtcblxuICAgICAgICAgICAgbWF4WCA9IChtYXhYID4gdzEpID8gbWF4WCA6IHcxO1xuICAgICAgICAgICAgbWF4WSA9IChtYXhZID4gaDEpID8gbWF4WSA6IGgxO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2JvdW5kcy54ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB0aGlzLl9ib3VuZHMueSA9IC10aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRoaXMuX2JvdW5kcy5oZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgcmV0dXJuIHRoaXMuX2JvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHNwcml0ZVxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5TcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cblNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy50ZXh0dXJlLmNyb3Aud2lkdGggPD0gMCB8fCB0aGlzLnRleHR1cmUuY3JvcC5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyAgSWdub3JlIG51bGwgc291cmNlc1xuICAgIGlmICh0aGlzLnRleHR1cmUudmFsaWQpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgICAgICB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgICAgICBkeCxcbiAgICAgICAgICAgIGR5LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ7XG5cbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgICAgICAvLyBJZiBzbW9vdGhpbmdFbmFibGVkIGlzIHN1cHBvcnRlZCBhbmQgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIHNtb290aGluZyBwcm9wZXJ0eSBmb3IgdGhpcyB0ZXh0dXJlXG4gICAgICAgIHZhciBzbW9vdGhpbmdFbmFibGVkID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5zY2FsZU1vZGUgPT09IENPTlNULlNDQUxFX01PREVTLkxJTkVBUjtcbiAgICAgICAgaWYgKHJlbmRlcmVyLnNtb290aFByb3BlcnR5ICYmIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldICE9PSBzbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0W3JlbmRlcmVyLnNtb290aFByb3BlcnR5XSA9IHNtb290aGluZ0VuYWJsZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgdGV4dHVyZSBpcyB0cmltbWVkIHdlIG9mZnNldCBieSB0aGUgdHJpbSB4L3ksIG90aGVyd2lzZSB3ZSB1c2UgdGhlIGZyYW1lIGRpbWVuc2lvbnNcblxuICAgICAgICBpZih0ZXh0dXJlLnJvdGF0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2lkdGggPSB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBkeCA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgXG4gICAgICAgICAgICBkeCArPSB3aWR0aDtcblxuICAgICAgICAgICAgd3QudHggPSBkeSAqIHd0LmEgKyBkeCAqIHd0LmMgKyB3dC50eDtcbiAgICAgICAgICAgIHd0LnR5ID0gZHkgKiB3dC5iICsgZHggKiB3dC5kICsgd3QudHk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gd3QuYTtcbiAgICAgICAgICAgIHd0LmEgID0gLXd0LmM7XG4gICAgICAgICAgICB3dC5jICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICB0ZW1wID0gd3QuYjtcbiAgICAgICAgICAgIHd0LmIgID0gLXd0LmQ7XG4gICAgICAgICAgICB3dC5kICA9ICB0ZW1wO1xuXG4gICAgICAgICAgICAvLyB0aGUgYW5jaG9yIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCBhYm92ZSwgc28gbGV0cyBzZXQgaXQgdG8gemVyb1xuICAgICAgICAgICAgZHggPSAwO1xuICAgICAgICAgICAgZHkgPSAwO1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC53aWR0aDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0ZXh0dXJlLnRyaW0ud2lkdGggOiB0aGlzLmFuY2hvci54ICogLXRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgZHkgPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRleHR1cmUudHJpbS5oZWlnaHQgOiB0aGlzLmFuY2hvci55ICogLXRleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfVxuXG5cblxuICAgICAgICAvLyBBbGxvdyBmb3IgcGl4ZWwgcm91bmRpbmdcbiAgICAgICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB3dC5hLFxuICAgICAgICAgICAgICAgIHd0LmIsXG4gICAgICAgICAgICAgICAgd3QuYyxcbiAgICAgICAgICAgICAgICB3dC5kLFxuICAgICAgICAgICAgICAgICh3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMCxcbiAgICAgICAgICAgICAgICAod3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uKSB8IDBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGR4ID0gZHggfCAwO1xuICAgICAgICAgICAgZHkgPSBkeSB8IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgd3QudHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHd0LnR5ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcblxuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIC8vIFRPRE8gY2xlYW4gdXAgY2FjaGluZyAtIGhvdyB0byBjbGVhbiB1cCB0aGUgY2FjaGVzP1xuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC54ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmNyb3AueSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHggICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeSAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHNwcml0ZSBhbmQgb3B0aW9uYWxseSBpdHMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBbZGVzdHJveVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgY3VycmVudCB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgaXQgZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIG9mIHRoZSBzcHJpdGUgYXMgd2VsbFxuICovXG5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveVRleHR1cmUsIGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYW5jaG9yID0gbnVsbDtcblxuICAgIGlmIChkZXN0cm95VGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUuZGVzdHJveShkZXN0cm95QmFzZVRleHR1cmUpO1xuICAgIH1cblxuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn07XG5cbi8vIHNvbWUgaGVscGVyIGZ1bmN0aW9ucy4uXG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgY3Jvc3Mtb3JpZ2luIHBhcmFtZXRlclxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBzY2FsZSBtb2RlLCBzZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGZyYW1lSWRcbiAqL1xuU3ByaXRlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTcHJpdGUodGV4dHVyZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGJhc2VkIG9uIGFuIGltYWdlIHVybFxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZUlkIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEByZXR1cm4ge1BJWEkuU3ByaXRlfSBBIG5ldyBTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblNwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFNwcml0ZShUZXh0dXJlLmZyb21JbWFnZShpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSk7XG59O1xuIiwidmFyIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL19UZXh0dXJlU2hhZGVyJyksXG4gICAgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzJyksXG4gICAgZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIGdsQ29yZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFNwcml0ZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9TcHJpdGVSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKiBSZW5kZXJlciBkZWRpY2F0ZWQgdG8gZHJhd2luZyBhbmQgYmF0Y2hpbmcgc3ByaXRlcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZVJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIHZhbHVlcyBzZW50IGluIHRoZSB2ZXJ0ZXggYnVmZmVyLlxuICAgICAqIHBvc2l0aW9uWCwgcG9zaXRpb25ZLCBjb2xvclIsIGNvbG9yRywgY29sb3JCID0gNVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydFNpemUgPSA1O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIHZlcnRleCBpbmZvcm1hdGlvbiBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBpbWFnZXMgaW4gdGhlIFNwcml0ZUJhdGNoIGJlZm9yZSBpdCBmbHVzaGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IENPTlNULlNQUklURV9CQVRDSF9TSVpFOyAvLyAyMDAwIGlzIGEgbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIC8gZGVza3RvcFxuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBpbiBvdXIgYmF0Y2hcbiAgICB2YXIgbnVtVmVydHMgPSAodGhpcy5zaXplICogNCkgKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYmF0Y2gsIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgICB2YXIgbnVtSW5kaWNlcyA9IHRoaXMuc2l6ZSAqIDY7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgdmVydGV4IGRhdGEgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdGhlIHZlcnRleCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEFycmF5QnVmZmVyKG51bVZlcnRzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgRmxvYXQzMkFycmF5IGZvciBwb3NpdGlvbnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG4gICAgXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBVaW50MzJBcnJheSBmb3IgdXZzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciBjb2xvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXMgb2YgdGhlIGdlb21ldHJ5IChxdWFkcykgdG8gZHJhd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzKHRoaXMuc2l6ZSlcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICBcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIHRoaXMuZ3JvdXBzID0gW107XG4gICAgXG4gICAgLy9UT0RPIC0gMzAwIGlzIGEgYml0IG1hZ2ljLCBmaWd1cmUgb3V0IGEgbmljZXIgYW1vdW50IVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zaXplOyBpKyspIFxuICAgIHtcbiAgICAgICAgdGhpcy5ncm91cHNbaV0gPSB7dGV4dHVyZXM6W10sIHRleHR1cmVDb3VudDowLCBpZHM6W10sIHNpemU6MCwgc3RhcnQ6MCwgYmxlbmQ6MH07IFxuICAgIH07XG4gICAgXG4gICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG5cbiAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbnVsbDsgICAgXG59XG5cblxuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ByaXRlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZVJlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdzcHJpdGUnLCBTcHJpdGVSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMuTUFYX1RFWFRVRVMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpO1xuXG4gICAgdGhpcy5fc2hhZGVyID0gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIoZ2wsIHRoaXMuTUFYX1RFWFRVRVMpLy9uZXcgVGV4dHVyZVNoYWRlcihnbCk7XG5cbiAgICAvLyBzZXR1cCBkZWZhdWx0IHNoYWRlclxuICAgIHRoaXMuc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXI7XG5cbiAgICAvLyBjcmVhdGUgYSBjb3VwbGUgb2YgYnVmZmVyc1xuICAgIHRoaXMudmVydGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlcihnbCwgbnVsbCwgZ2wuRFlOQU1JQ19EUkFXKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2xDb3JlLkdMQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyKGdsLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIC8vIGJ1aWxkIHRoZSB2YW8gb2JqZWN0IHRoYXQgd2lsbCByZW5kZXIuLlxuICAgIHRoaXMudmFvID0gbmV3IGdsQ29yZS5WZXJ0ZXhBcnJheU9iamVjdChnbCk7XG5cbiAgICB0aGlzLnZhby5hZGRJbmRleCh0aGlzLmluZGV4QnVmZmVyKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCBnbC5VTlNJR05FRF9TSE9SVCwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDIgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgZ2wuVU5TSUdORURfQllURSwgdHJ1ZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDMgKiA0KTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlSWQsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDQgKiA0KTtcblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IDk5OTk5O1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHJlbmRlciB3aGVuIHVzaW5nIHRoaXMgc3ByaXRlYmF0Y2hcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChzcHJpdGUpXG57XG4gICAgLy9UT0RPIHNldCBibGVuZCBtb2Rlcy4uXG4gICAgLy8gY2hlY2sgdGV4dHVyZS4uXG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID49IHRoaXMuc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICB9XG5cbiAgXG4gICAgLy8gZ2V0IHRoZSB1dnMgZm9yIHRoZSB0ZXh0dXJlXG4gICBcblxuICAgIC8vIGlmIHRoZSB1dnMgaGF2ZSBub3QgdXBkYXRlZCB0aGVuIG5vIHBvaW50IHJlbmRlcmluZyBqdXN0IHlldCFcbiAgICBpZiAoIXNwcml0ZS50ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgIC8vIHB1c2ggYSB0ZXh0dXJlLlxuICAgIC8vIGluY3JlbWVudCB0aGUgYmF0Y2hzaXplXG4gICAgdmFyIG5leHRUZXh0dXJlID0gIHNwcml0ZS50ZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIHZhciBjdXJyZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRHcm91cDtcbiAgICB2YXIgaTtcblxuICAgIGlmKHRoaXMuY3VycmVudFRleHR1cmUgIT09IG5leHRUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG5leHRUZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgaWYoIW5leHRUZXh0dXJlLl9lbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5fZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICBuZXh0VGV4dHVyZS5faWQgPSB0aGlzLnRleHR1cmVDb3VudDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy50ZXh0dXJlQ291bnQgPT09IHRoaXMuTUFYX1RFWFRVRVMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50OyBpKyspIFxuICAgICAgICAgICAgICAgIHsgICAgIFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnNpemUgPSB0aGlzLmN1cnJlbnRJbmRleCAtIGN1cnJlbnRHcm91cC5zdGFydDtcbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC5zdGFydCA9IHRoaXMuY3VycmVudEluZGV4O1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZXNbY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCsrXSA9IG5leHRUZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcbiAgICB9XG5cbiAgICAvLyBUT0RPIHRyaW0/P1xuICAgIHZhciBpbmRleCA9IHRoaXMuY3VycmVudEluZGV4ICogdGhpcy52ZXJ0Qnl0ZVNpemU7XG5cbiAgICB0aGlzLmN1cnJlbnRJbmRleCsrO1xuXG4gICAgLy8gdXBsb2FkIHRoZSBzcHJpdGUgZWxlbWV0bnMuLi5cbiAgICAvLyB0aGV5IGhhdmUgYWxsIHJlYWR5IGJlZW4gY2FsY3VsYXRlZCBzbyB3ZSBqdXN0IG5lZWQgdG8gcHVzaCB0aGVtIGludG8gdGhlIGJ1ZmZlci5cbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG4gICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMucG9zaXRpb25zO1xuICAgIHZhciB2ZXJ0ZXhEYXRhID0gc3ByaXRlLnZlcnRleERhdGFcbiAgICB2YXIgdGludCA9IChzcHJpdGUudGludCA+PiAxNikgKyAoc3ByaXRlLnRpbnQgJiAweGZmMDApICsgKChzcHJpdGUudGludCAmIDB4ZmYpIDw8IDE2KSArIChzcHJpdGUud29ybGRBbHBoYSAqIDI1NSA8PCAyNCk7XG4gICAgdmFyIHV2cyA9IHNwcml0ZS50ZXh0dXJlLl91dnMudXZzX3VpbnQzMjtcbiAgICAvL3h5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVswXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzFdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzBdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkOyBcbiAgICBcbiAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMl07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVszXTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1sxXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNF07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs1XTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1syXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcblxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs2XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzddO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzNdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb250ZW50IGFuZCBlbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPT09IDApcmV0dXJuO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gdGhpcy5jdXJyZW50R3JvdXAuc3RhcnQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgeyAgICAgXG4gICAgICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVzW2ldLl9lbmFibGVkID0gZmFsc2U7XG4gICAgfTtcbiAgIFxuICAgIC8vIGRvIHNvbWUgc21hcnQgYXJyYXkgc3R1ZmYuLlxuICAgIC8vIGRvdWJsZSBzaXplIHNvIHdlIGRvbnQgYWx3YXkgc3ViYXJyYXkgdGhlIGVsZW1lbnRzLi5cbiAgICAvLyB1cGxvYWQgdGhlIHZlcnRzIHRvIHRoZSBidWZmZXJcbiAgICBpZiAodGhpcy5jdXJyZW50QmF0Y2hTaXplID4gKCB0aGlzLnNpemUgKiAwLjUgKSApXG4gICAge1xuICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlci51cGxvYWQodGhpcy52ZXJ0aWNlcywgMCwgdHJ1ZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIG8gayAuLiBzdWIgYXJyYXkgaXMgU0xPVz4/XG4gICAgICAgIHZhciB2aWV3ID0gdGhpcy5wb3NpdGlvbnMuc3ViYXJyYXkoMCwgdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZSk7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh2aWV3LCAwLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBiaW5kIHNoYWRlci4uXG4gICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHRoaXMuX3NoYWRlcik7XG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggMCApO1xuXG4gICAgLy8vIHJlbmRlciB0aGUgZ3JvdXBzLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5ncm91cENvdW50OyBpKyspIHtcbiAgICAgICAgXG4gICAgICAgIHZhciBncm91cCA9IHRoaXMuZ3JvdXBzW2ldO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ3JvdXAudGV4dHVyZUNvdW50OyBqKyspIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFRleHR1cmUoZ3JvdXAudGV4dHVyZXNbal0sIGopO1xuICAgICAgICB9O1xuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGdyb3VwLnNpemUgKiA2LCBnbC5VTlNJR05FRF9TSE9SVCwgZ3JvdXAuc3RhcnQgKiA2ICogMik7XG4gICAgfTtcblxuICAgIC8vIHJlc2V0IGVsZW1lbnRzIGZvciB0aGUgbmV4dCBmbHVzaFxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cENvdW50ID0gMDtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcbiAgICB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQgPSAwO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgc3ByaXRlIGJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZhby5iaW5kKCk7XG59O1xuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xuICAgIHRoaXMudmFvLnVuYmluZCgpO1xufTtcbi8qKlxuICogRGVzdHJveXMgdGhlIFNwcml0ZUJhdGNoLlxuICpcbiAqL1xuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMudmVydGljZXMgPSBudWxsO1xuICAgIHRoaXMucG9zaXRpb25zID0gbnVsbDtcbiAgICB0aGlzLmNvbG9ycyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMudmVydGV4QnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuc3ByaXRlcyA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuXG5mdW5jdGlvbiBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgbWF4VGV4dHVyZXMpXG57XG4gICAgdmFyIHZlcnRleFNyYyA9IFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcbmF0dHJpYnV0ZSBmbG9hdCBhVGV4dHVyZUlkO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyBmbG9hdCB2VGV4dHVyZUlkO1xcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2VGV4dHVyZUlkID0gYVRleHR1cmVJZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cIjtcbiAgICB2YXIgZnJhZ21lbnRTcmMgPSAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxuJyArIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKSArIFwiXFxuXFxuXCIgKyBmcmFnVGVtcGxhdGVcblxuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMucmVwbGFjZSgvXFwlXFwlL2dpLCAnMTYnKTtcblxuICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXG4gICAgdmFyIHNhbXBsZVZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkrKykge1xuICAgICAgICBzYW1wbGVWYWx1ZXNbaV0gPSBpO1xuICAgIH07XG5cbiAgICBzaGFkZXIuYmluZCgpO1xuICAgIHNoYWRlci51bmlmb3Jtcy51U2FtcGxlcnMgPSBzYW1wbGVWYWx1ZXM7XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVNhbXBsZVNyYyhtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgc3JjID0gJ3ZlYzQgZ2V0U2FtcGxlRnJvbUFycmF5KHNhbXBsZXIyRCB0ZXh0dXJlc1slJV0sIGludCBuZHgsIHZlYzIgdXYpIHtcXG5cXG52ZWM0IGNvbG9yOydcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSBcbiAgICB7XG4gICAgICAgIGlmKGkgPiAwKXNyYyArPSAnXFxuZWxzZSAnO1xuICAgICAgICBpZihpIDwgbWF4VGV4dHVyZXMtMSlzcmMgKz0gJ2lmKG5keCA9PSAnICsgaSArICcpJztcbiAgICAgICAgc3JjICs9ICdcXG57JztcbiAgICAgICAgc3JjICs9ICdcXG5cXHRjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlc1snK2krJ10sIHV2KTsnO1xuICAgICAgICBzcmMgKz0gJ1xcbn0nO1xuICAgIH07XG5cbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAncmV0dXJuIGNvbG9yOyc7XG4gICAgc3JjICs9ICdcXG59JztcblxuICAgIHJldHVybiBzcmM7XG59XG5cbnZhciBmcmFnVGVtcGxhdGUgPSBbXG5cbiAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuICAgICd2YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7JyxcbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJzWyUlXTsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnZ2xfRnJhZ0NvbG9yID0gZ2V0U2FtcGxlRnJvbUFycmF5KHVTYW1wbGVycywgaW50KHZUZXh0dXJlSWQpLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvcjsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcjtcbiIsInZhciBTcHJpdGUgPSByZXF1aXJlKCcuLi9zcHJpdGVzL1Nwcml0ZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgVGV4dCBPYmplY3Qgd2lsbCBjcmVhdGUgYSBsaW5lIG9yIG11bHRpcGxlIGxpbmVzIG9mIHRleHQuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJyBpbiB5b3VyIHRleHQgc3RyaW5nLFxuICogb3IgYWRkIGEgd29yZFdyYXAgcHJvcGVydHkgc2V0IHRvIHRydWUgYW5kIGFuZCB3b3JkV3JhcFdpZHRoIHByb3BlcnR5IHdpdGggYSB2YWx1ZSBpbiB0aGUgc3R5bGUgb2JqZWN0LlxuICpcbiAqIEEgVGV4dCBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGEgc3RyaW5nIGFuZCBhIHN0eWxlIG9iamVjdFxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dCA9IG5ldyBQSVhJLlRleHQoJ1RoaXMgaXMgYSBwaXhpIHRleHQnLHtmb250IDogJzI0cHggQXJpYWwnLCBmaWxsIDogMHhmZjEwMTAsIGFsaWduIDogJ2NlbnRlcid9KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBbc3R5bGVdIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnRdIHtzdHJpbmd9IGRlZmF1bHQgJ2JvbGQgMjBweCBBcmlhbCcgVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gKiBAcGFyYW0gW3N0eWxlLmZpbGw9J2JsYWNrJ10ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdCBzaW5nbGUgbGluZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZV0ge1N0cmluZ3xOdW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBzdHJva2UgZS5nICdibHVlJywgJyNGQ0ZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLnN0cm9rZVRoaWNrbmVzcz0wXSB7bnVtYmVyfSBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgc3Ryb2tlLiBEZWZhdWx0IGlzIDAgKG5vIHN0cm9rZSlcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXAsIGl0IG5lZWRzIHdvcmRXcmFwIHRvIGJlIHNldCB0byB0cnVlXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvdz1mYWxzZV0ge2Jvb2xlYW59IFNldCBhIGRyb3Agc2hhZG93IGZvciB0aGUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93QW5nbGU9TWF0aC5QSS80XSB7bnVtYmVyfSBTZXQgYSBhbmdsZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAqIEBwYXJhbSBbc3R5bGUucGFkZGluZz0wXSB7bnVtYmVyfSBPY2Nhc2lvbmFsbHkgc29tZSBmb250cyBhcmUgY3JvcHBlZCBvbiB0b3Agb3IgYm90dG9tLiBBZGRpbmcgc29tZSBwYWRkaW5nIHdpbGxcbiAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gKiBAcGFyYW0gW3N0eWxlLmxpbmVKb2luPSdtaXRlciddIHtzdHJpbmd9IFRoZSBsaW5lSm9pbiBwcm9wZXJ0eSBzZXRzIHRoZSB0eXBlIG9mIGNvcm5lciBjcmVhdGVkLCBpdCBjYW4gcmVzb2x2ZVxuICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAqICAgICAgb3IgaW5jcmVhc2UgdGhlIHNwaWtpbmVzcyBvZiByZW5kZXJlZCB0ZXh0LlxuICovXG5mdW5jdGlvbiBUZXh0KHRleHQsIHN0eWxlLCByZXNvbHV0aW9uKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgZWxlbWVudCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gdG9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGhcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIGNhbnZhcy5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXModGhpcy5jYW52YXMpO1xuICAgIHRleHR1cmUudHJpbSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuICAgIFNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3ByaXRlLnByb3RvdHlwZSk7XG5UZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHQ7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHQ7XG5cblRleHQuZm9udFByb3BlcnRpZXNDYWNoZSA9IHt9O1xuVGV4dC5mb250UHJvcGVydGllc0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuVGV4dC5mb250UHJvcGVydGllc0NvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHQucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueCAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dCwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc2NhbGUueSAqIHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlIC8gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBzdHlsZSBvZiB0aGUgdGV4dFxuICAgICAqXG4gICAgICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmZvbnQ9J2JvbGQgMjBwdCBBcmlhbCddIHtzdHJpbmd9IFRoZSBzdHlsZSBhbmQgc2l6ZSBvZiB0aGUgZm9udFxuICAgICAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGVnICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnN0cm9rZT0nYmxhY2snXSB7c3RyaW5nfG51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlZyAnYmx1ZScsICcjRkNGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICAgICAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXA9ZmFsc2VdIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgd29yZCB3cmFwIHNob3VsZCBiZSB1c2VkXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcFdpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIGF0IHdoaWNoIHRleHQgd2lsbCB3cmFwXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSGVpZ2h0XSB7bnVtYmVyfSBUaGUgbGluZSBoZWlnaHQsIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgc3BhY2UgdGhhdCBhIGxldHRlciB1c2VzXG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Q29sb3I9JyMwMDAwMDAnXSB7c3RyaW5nfG51bWJlcn0gQSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgb24gdGhlIGRyb3BzaGFkb3cgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzZdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlPTVdIHtudW1iZXJ9IFNldCBhIGRpc3RhbmNlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0JsdXI9MF0ge251bWJlcn0gU2V0IGEgc2hhZG93IGJsdXIgcmFkaXVzXG4gICAgICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICAgICAqICAgICAgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGJ5IGFkZGluZyBwYWRkaW5nIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0ZXh0IGhlaWdodC5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLnRleHRCYXNlbGluZT0nYWxwaGFiZXRpYyddIHtzdHJpbmd9IFRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dCB0aGF0IGlzIHJlbmRlcmVkLlxuICAgICAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gICAgICogICAgICBzcGlrZWQgdGV4dCBpc3N1ZXMuIERlZmF1bHQgaXMgJ21pdGVyJyAoY3JlYXRlcyBhIHNoYXJwIGNvcm5lcikuXG4gICAgICogQHBhcmFtIFtzdHlsZS5taXRlckxpbWl0PTEwXSB7bnVtYmVyfSBUaGUgbWl0ZXIgbGltaXQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdtaXRlcicgbGluZUpvaW4gbW9kZS4gVGhpcyBjYW4gcmVkdWNlXG4gICAgICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICBzdHlsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdHlsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3R5bGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZmlsbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5maWxsID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5maWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5zdHJva2UgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5zdHJva2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmRyb3BTaGFkb3dDb2xvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlLmZvbnQgPSBzdHlsZS5mb250IHx8ICdib2xkIDIwcHQgQXJpYWwnO1xuICAgICAgICAgICAgc3R5bGUuZmlsbCA9IHN0eWxlLmZpbGwgfHwgJ2JsYWNrJztcbiAgICAgICAgICAgIHN0eWxlLmFsaWduID0gc3R5bGUuYWxpZ24gfHwgJ2xlZnQnO1xuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gc3R5bGUuc3Ryb2tlIHx8ICdibGFjayc7IC8vcHJvdmlkZSBhIGRlZmF1bHQsIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2lzc3Vlcy8xMzZcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZVRoaWNrbmVzcyA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyB8fCAwO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXAgPSBzdHlsZS53b3JkV3JhcCB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLndvcmRXcmFwV2lkdGggPSBzdHlsZS53b3JkV3JhcFdpZHRoIHx8IDEwMDtcblxuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvdyA9IHN0eWxlLmRyb3BTaGFkb3cgfHwgZmFsc2U7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3IgfHwgJyMwMDAwMDAnO1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0FuZ2xlID0gc3R5bGUuZHJvcFNoYWRvd0FuZ2xlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93QW5nbGUgOiBNYXRoLlBJIC8gNjtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSA9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlIDogNTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXIgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dCbHVyIDogMDsgLy9zaGFkb3dCbHVyIGlzICcwJyBieSBkZWZhdWx0IGFjY29yZGluZyB0byBIVE1MXG5cbiAgICAgICAgICAgIHN0eWxlLnBhZGRpbmcgPSBzdHlsZS5wYWRkaW5nIHx8IDA7XG5cbiAgICAgICAgICAgIHN0eWxlLnRleHRCYXNlbGluZSA9IHN0eWxlLnRleHRCYXNlbGluZSB8fCAnYWxwaGFiZXRpYyc7XG5cbiAgICAgICAgICAgIHN0eWxlLmxpbmVKb2luID0gc3R5bGUubGluZUpvaW4gfHwgJ21pdGVyJztcbiAgICAgICAgICAgIHN0eWxlLm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0IHx8IDEwO1xuXG4gICAgICAgICAgICB0aGlzLl9zdHlsZSA9IHN0eWxlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjb3B5IGZvciB0aGUgdGV4dCBvYmplY3QuIFRvIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHRleHQpe1xuICAgICAgICAgICAgdGV4dCA9IHRleHQudG9TdHJpbmcoKSB8fCAnICc7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dCA9PT0gdGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdGV4dDtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHN0eWxlID0gdGhpcy5fc3R5bGU7XG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuXG4gICAgLy8gd29yZCB3cmFwXG4gICAgLy8gcHJlc2VydmUgb3JpZ2luYWwgdGV4dFxuICAgIHZhciBvdXRwdXRUZXh0ID0gc3R5bGUud29yZFdyYXAgPyB0aGlzLndvcmRXcmFwKHRoaXMuX3RleHQpIDogdGhpcy5fdGV4dDtcblxuICAgIC8vIHNwbGl0IHRleHQgaW50byBsaW5lc1xuICAgIHZhciBsaW5lcyA9IG91dHB1dFRleHQuc3BsaXQoLyg/OlxcclxcbnxcXHJ8XFxuKS8pO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgd2lkdGhcbiAgICB2YXIgbGluZVdpZHRocyA9IG5ldyBBcnJheShsaW5lcy5sZW5ndGgpO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBmb250UHJvcGVydGllcyA9IHRoaXMuZGV0ZXJtaW5lRm9udFByb3BlcnRpZXMoc3R5bGUuZm9udCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBsaW5lV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQobGluZXNbaV0pLndpZHRoO1xuICAgICAgICBsaW5lV2lkdGhzW2ldID0gbGluZVdpZHRoO1xuICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxpbmVXaWR0aCk7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gbWF4TGluZVdpZHRoICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgd2lkdGggKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gKCB3aWR0aCArIHRoaXMuY29udGV4dC5saW5lV2lkdGggKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIC8vIGNhbGN1bGF0ZSB0ZXh0IGhlaWdodFxuICAgIHZhciBsaW5lSGVpZ2h0ID0gdGhpcy5zdHlsZS5saW5lSGVpZ2h0IHx8IGZvbnRQcm9wZXJ0aWVzLmZvbnRTaXplICsgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuXG4gICAgdmFyIGhlaWdodCA9IGxpbmVIZWlnaHQgKiBsaW5lcy5sZW5ndGg7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBoZWlnaHQgKz0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9ICggaGVpZ2h0ICsgdGhpcy5fc3R5bGUucGFkZGluZyAqIDIgKSAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMuY29udGV4dC5zY2FsZSggdGhpcy5yZXNvbHV0aW9uLCB0aGlzLnJlc29sdXRpb24pO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIH1cblxuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxTdHlsZT1cIiNGRjAwMDBcIjtcbiAgICAvL3RoaXMuY29udGV4dC5maWxsUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuICAgIHRoaXMuY29udGV4dC5mb250ID0gc3R5bGUuZm9udDtcbiAgICB0aGlzLmNvbnRleHQuc3Ryb2tlU3R5bGUgPSBzdHlsZS5zdHJva2U7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcbiAgICB0aGlzLmNvbnRleHQudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lO1xuICAgIHRoaXMuY29udGV4dC5saW5lSm9pbiA9IHN0eWxlLmxpbmVKb2luO1xuICAgIHRoaXMuY29udGV4dC5taXRlckxpbWl0ID0gc3R5bGUubWl0ZXJMaW1pdDtcblxuICAgIHZhciBsaW5lUG9zaXRpb25YO1xuICAgIHZhciBsaW5lUG9zaXRpb25ZO1xuXG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICBpZiAoc3R5bGUuZHJvcFNoYWRvd0JsdXIgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Q29sb3IgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3I7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc2hhZG93Qmx1ciA9IHN0eWxlLmRyb3BTaGFkb3dCbHVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4U2hhZG93T2Zmc2V0ID0gTWF0aC5jb3Moc3R5bGUuZHJvcFNoYWRvd0FuZ2xlKSAqIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICAgICAgdmFyIHlTaGFkb3dPZmZzZXQgPSBNYXRoLnNpbihzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogbGluZUhlaWdodCkgKyBmb250UHJvcGVydGllcy5hc2NlbnQ7XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblggKyB4U2hhZG93T2Zmc2V0LCBsaW5lUG9zaXRpb25ZICsgeVNoYWRvd09mZnNldCArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9zZXQgY2FudmFzIHRleHQgc3R5bGVzXG4gICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlLmZpbGw7XG5cbiAgICAvL2RyYXcgbGluZXMgbGluZSBieSBsaW5lXG4gICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgbGluZVBvc2l0aW9uWCA9IHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDI7XG4gICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICBpZiAoc3R5bGUuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdHlsZS5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHlsZS5zdHJva2UgJiYgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSArIHRoaXMuX3N0eWxlLnBhZGRpbmcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVUZXh0dXJlKCk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLnRyaW0ueCA9IDA7XG4gICAgdGV4dHVyZS50cmltLnkgPSAtdGhpcy5fc3R5bGUucGFkZGluZztcblxuICAgIHRleHR1cmUudHJpbS53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgIHRleHR1cmUudHJpbS5oZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgLSB0aGlzLl9zdHlsZS5wYWRkaW5nKjI7XG5cbiAgICB0aGlzLl93aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuX2hlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZW1pdCgndXBkYXRlJywgIHRleHR1cmUuYmFzZVRleHR1cmUpO1xuXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKi9cblRleHQucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgLy90aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUucmVuZGVyV2ViR0wuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgIC8vICAgdGhpcy5yZXNvbHV0aW9uID0gMS8vcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGFzY2VudCwgZGVzY2VudCBhbmQgZm9udFNpemUgb2YgYSBnaXZlbiBmb250U3R5bGVcbiAqXG4gKiBAcGFyYW0gZm9udFN0eWxlIHtvYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5kZXRlcm1pbmVGb250UHJvcGVydGllcyA9IGZ1bmN0aW9uIChmb250U3R5bGUpXG57XG4gICAgdmFyIHByb3BlcnRpZXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXTtcblxuICAgIGlmICghcHJvcGVydGllcylcbiAgICB7XG4gICAgICAgIHByb3BlcnRpZXMgPSB7fTtcblxuICAgICAgICB2YXIgY2FudmFzID0gVGV4dC5mb250UHJvcGVydGllc0NhbnZhcztcbiAgICAgICAgdmFyIGNvbnRleHQgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dDtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgdmFyIHdpZHRoID0gTWF0aC5jZWlsKGNvbnRleHQubWVhc3VyZVRleHQoJ3xNw4lxJykud2lkdGgpO1xuICAgICAgICB2YXIgYmFzZWxpbmUgPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnTScpLndpZHRoKTtcbiAgICAgICAgdmFyIGhlaWdodCA9IDIgKiBiYXNlbGluZTtcblxuICAgICAgICBiYXNlbGluZSA9IGJhc2VsaW5lICogMS40IHwgMDtcblxuICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjZjAwJztcbiAgICAgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250U3R5bGU7XG5cbiAgICAgICAgY29udGV4dC50ZXh0QmFzZWxpbmUgPSAnYWxwaGFiZXRpYyc7XG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMwMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxUZXh0KCd8TcOJcScsIDAsIGJhc2VsaW5lKTtcblxuICAgICAgICB2YXIgaW1hZ2VkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCkuZGF0YTtcbiAgICAgICAgdmFyIHBpeGVscyA9IGltYWdlZGF0YS5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lID0gd2lkdGggKiA0O1xuXG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIHZhciBpZHggPSAwO1xuICAgICAgICB2YXIgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGFzY2VudC4gc2NhbiBmcm9tIHRvcCB0byBib3R0b20gdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGJhc2VsaW5lOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggKz0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuYXNjZW50ID0gYmFzZWxpbmUgLSBpO1xuXG4gICAgICAgIGlkeCA9IHBpeGVscyAtIGxpbmU7XG4gICAgICAgIHN0b3AgPSBmYWxzZTtcblxuICAgICAgICAvLyBkZXNjZW50LiBzY2FuIGZyb20gYm90dG9tIHRvIHRvcCB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSBoZWlnaHQ7IGkgPiBiYXNlbGluZTsgaS0tKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGluZTsgaiArPSA0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0b3ApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWR4IC09IGxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLmRlc2NlbnQgPSBpIC0gYmFzZWxpbmU7XG4gICAgICAgIHByb3BlcnRpZXMuZm9udFNpemUgPSBwcm9wZXJ0aWVzLmFzY2VudCArIHByb3BlcnRpZXMuZGVzY2VudDtcblxuICAgICAgICBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGVbZm9udFN0eWxlXSA9IHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgbmV3bGluZXMgdG8gYSBzdHJpbmcgdG8gaGF2ZSBpdCBvcHRpbWFsbHkgZml0IGludG8gdGhlIGhvcml6b250YWxcbiAqIGJvdW5kcyBzZXQgYnkgdGhlIFRleHQgb2JqZWN0J3Mgd29yZFdyYXBXaWR0aCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUud29yZFdyYXAgPSBmdW5jdGlvbiAodGV4dClcbntcbiAgICAvLyBHcmVlZHkgd3JhcHBpbmcgYWxnb3JpdGhtIHRoYXQgd2lsbCB3cmFwIHdvcmRzIGFzIHRoZSBsaW5lIGdyb3dzIGxvbmdlclxuICAgIC8vIHRoYW4gaXRzIGhvcml6b250YWwgYm91bmRzLlxuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgICB2YXIgd29yZFdyYXBXaWR0aCA9IHRoaXMuX3N0eWxlLndvcmRXcmFwV2lkdGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBzcGFjZUxlZnQgPSB3b3JkV3JhcFdpZHRoO1xuICAgICAgICB2YXIgd29yZHMgPSBsaW5lc1tpXS5zcGxpdCgnICcpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdvcmRzLmxlbmd0aDsgaisrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgd29yZFdpZHRoID0gdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KHdvcmRzW2pdKS53aWR0aDtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGhXaXRoU3BhY2UgPSB3b3JkV2lkdGggKyB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQoJyAnKS53aWR0aDtcbiAgICAgICAgICAgIGlmIChqID09PSAwIHx8IHdvcmRXaWR0aFdpdGhTcGFjZSA+IHNwYWNlTGVmdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHByaW50aW5nIHRoZSBuZXdsaW5lIGlmIGl0J3MgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxpbmUgdGhhdCBpc1xuICAgICAgICAgICAgICAgIC8vIGdyZWF0ZXIgdGhhbiB0aGUgd29yZCB3cmFwIHdpZHRoLlxuICAgICAgICAgICAgICAgIGlmIChqID4gMClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdvcmRzW2pdO1xuICAgICAgICAgICAgICAgIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGggLSB3b3JkV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0IC09IHdvcmRXaWR0aFdpdGhTcGFjZTtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyAnICsgd29yZHNbal07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaSA8IGxpbmVzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBUZXh0IGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIFRleHRcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIHJldHVybiBTcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcy5jYWxsKHRoaXMsIG1hdHJpeCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dCBvYmplY3QuXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZVRleHR1cmU9dHJ1ZV0ge2Jvb2xlYW59IHdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZVRleHR1cmUpXG57XG4gICAgLy8gbWFrZSBzdXJlIHRvIHJlc2V0IHRoZSB0aGUgY29udGV4dCBhbmQgY2FudmFzLi4gZG9udCB3YW50IHRoaXMgaGFuZ2luZyBhcm91bmQgaW4gbWVtb3J5IVxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xuXG4gICAgdGhpcy5fc3R5bGUgPSBudWxsO1xuXG4gICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG59O1xuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9GaWx0ZXJNYW5hZ2VyJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgdGVtcFJlY3QgPSBuZXcgbWF0aC5SZWN0YW5nbGUoKTtcblxuLyoqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBCYXNlUmVuZGVyVGV4dHVyZSBzaG91bGQgYmUgcHJlbG9hZGVkXG4gKiBvdGhlcndpc2UgYmxhY2sgcmVjdGFuZ2xlcyB3aWxsIGJlIGRyYXduIGluc3RlYWQuXG4gKlxuICogQSBCYXNlUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIEJhc2VyZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIDgwMCwgNjAwKTtcbiAqIHZhciBzcHJpdGUgPSBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJzcGluT2JqXzAxLnBuZ1wiKTtcbiAqXG4gKiBzcHJpdGUucG9zaXRpb24ueCA9IDgwMC8yO1xuICogc3ByaXRlLnBvc2l0aW9uLnkgPSA2MDAvMjtcbiAqIHNwcml0ZS5hbmNob3IueCA9IDAuNTtcbiAqIHNwcml0ZS5hbmNob3IueSA9IDAuNTtcbiAqXG4gKiBCYXNlcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgQmFzZXJlbmRlclRleHR1cmVcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgZm9yIHRoaXMgQmFzZVJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgaWYgKCFyZW5kZXJlcilcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNyZWF0ZSBCYXNlUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgbnVsbCwgc2NhbGVNb2RlKTtcbiAgIFxuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAxMDA7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCBDT05TVC5SRVNPTFVUSU9OOztcbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIERyYXcvcmVuZGVyIHRoZSBnaXZlbiBEaXNwbGF5T2JqZWN0IG9udG8gdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheU9iamVjdCBhbmQgZGVzY2VuZGVudHMgYXJlIHRyYW5zZm9ybWVkIGR1cmluZyB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBJZiBgdXBkYXRlVHJhbnNmb3JtYCBpcyB0cnVlIHRoZW4gdGhlIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkIGJlZm9yZSB0aGVcbiAgICAgKiBtZXRob2QgcmV0dXJucy4gT3RoZXJ3aXNlIGl0IGlzIHVwIHRvIHRoZSBjYWxsaW5nIGNvZGUgdG8gY29ycmVjdGx5IHVzZSBvciByZXNldFxuICAgICAqIHRoZSB0cmFuc2Zvcm1lZCBkaXNwbGF5IG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgaXMgYWx3YXlzIHJlbmRlcmVkIHdpdGggYSB3b3JsZEFscGhhIHZhbHVlIG9mIDEuXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAgICAgKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBPcHRpb25hbCBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIGRpc3BsYXkgb2JqZWN0IGJlZm9yZSByZW5kZXJpbmcuXG4gICAgICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICAgICAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gICAgICogIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkLiBOb3QgcmVzdG9yaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBhIGxpdHRsZSBmYXN0ZXIuXG4gICAgICovXG4gICAgdGhpcy5yZW5kZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgQmFzZVJlbmRlclRleHR1cmUgdXNlcy4gQSBCYXNlUmVuZGVyVGV4dHVyZSBjYW4gb25seSBiZWxvbmcgdG8gb25lIHJlbmRlcmVyIGF0IHRoZSBtb21lbnQgaWYgaXRzIHdlYkdMLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgUmVuZGVyVGFyZ2V0KGdsLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5zY2FsZU1vZGUsIHRoaXMucmVzb2x1dGlvbik7Ly8sIHRoaXMudGhpcy5zY2FsZU1vZGUpO1xuICAgICAgICB0aGlzLl9nbFRleHR1cmVzW2dsLmlkXSA9ICB0aGlzLnRleHR1cmVCdWZmZXIudGV4dHVyZTtcbiAgICAgICAgXG4gICAgICAgIC8vVE9ETyByZWZhY3RvciBmaWx0ZXIgbWFuYWdlci4uIGFzIHJlYWxseSBpdHMgbm8gbG9uZ2VyIGEgbWFuYWdlciBpZiB3ZSB1c2UgaXQgaGVyZS4uXG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJXZWJHTDtcblxuICAgICAgICAvLyB0aGUgY3JlYXRpb24gb2YgYSBmaWx0ZXIgbWFuYWdlciB1bmJpbmRzIHRoZSBidWZmZXJzLi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbiAgICAgICAgaWYodGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0KXRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJDYW52YXM7XG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIodGhpcy53aWR0aCogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmhlaWdodCogdGhpcy5yZXNvbHV0aW9uKTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbn1cblxuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlVGV4dHVyZS5wcm90b3R5cGUpO1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzZVJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VSZW5kZXJUZXh0dXJlO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGlmICh3aWR0aCA9PT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT09IHRoaXMuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5maWx0ZXJNYW5hZ2VyKVxuICAgIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIEJhc2VSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uRnJhbWUpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLnJlbmRlcmVyLmdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcihmYWxzZSwgZGVzdGluYXRpb25GcmFtZSk7XG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gKHVwZGF0ZVRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSA/IHVwZGF0ZVRyYW5zZm9ybSA6IHRydWU7Ly8hdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnRyYW5zZm9ybSA9IG1hdHJpeDtcblxuICAgIC8vVE9ETyBub3QgYSBmYW4gdGhhdCB0aGlzIGlzIGhlcmUuLi4gaXQgd2lsbCBtb3ZlIVxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5hY3RpdmF0ZSgpO1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgaWYgKHVwZGF0ZVRyYW5zZm9ybSlcbiAgICB7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIG1hdHJpeCBvZiB0aGUgZGlzcGxhdHlPYmplY3QuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmlkZW50aXR5KCk7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgICAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRlbXBSZWN0LndpZHRoID0gZnJhbWUuaGVpZ2h0O1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IGZyYW1lLndpZHRoO1xuICAgXG4gICAgLy9UT0RPIHJlbmFtZSB0ZXh0dXJlQnVmZmVyIHRvIHJlbmRlclRhcmdldC4uXG4gICAgdmFyIHRlbXAgPSAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyID0gdGhpcy5maWx0ZXJNYW5hZ2VyO1xuICAgIFxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKGZyYW1lLCB0ZW1wUmVjdCk7XG4gICAgY29uc29sZS5sb2coZGlzcGxheU9iamVjdClcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgdGhpcy50ZXh0dXJlQnVmZmVyLCBjbGVhcik7XG5cbiAgIC8vIGNvbnNvbGUubG9nKFwiUkVOREVSSU5HIFwiKTtcbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0ZW1wO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXJdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChmcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAhIXVwZGF0ZVRyYW5zZm9ybTtcblxuICAgIHZhciB3dCA9IHRlbXBNYXRyaXg7XG5cbiAgICB3dC5pZGVudGl0eSgpO1xuXG4gICAgaWYgKG1hdHJpeClcbiAgICB7XG4gICAgICAgIHd0LmFwcGVuZChtYXRyaXgpO1xuICAgIH1cblxuXG4gICAgd3QudHggKz0gZnJhbWUueDtcbiAgICB3dC50eSArPSBmcmFtZS55O1xuXG4gICAgdmFyIGNhY2hlZFd0ID0gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybTtcbiAgICBcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gd3Q7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgdmFyIGksIGo7XG5cbiAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgXG4vLyAgICB0aGlzLnRleHR1cmVCdWZmZXIuXG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dDtcblxuICAgIHZhciByZWFsUmVzb2x1dGlvbiA9IHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHJlYWxSZXNvbHV0aW9uO1xuXG4gICAgaWYoZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9PT0gd3QpXG4gICAge1xuICAgICAgICAvLyBmaXhlcyBjYWNoZUFzQml0bWFwIEhhcHBlbmluZyBkdXJpbmcgdGhlIGFib3ZlLi5cbiAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IGNhY2hlZFd0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gZGVzdHJveUJhc2Uge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCB0cnVlKTtcblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICAvLyBkZXN0cm95IHRoZSBmaWx0ZXJtYW5hZ2VyLi5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEltYWdlID0gZnVuY3Rpb24gKGZyYW1lKVxue1xuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLnNyYyA9IHRoaXMuZ2V0QmFzZTY0KGZyYW1lKTtcbiAgICByZXR1cm4gaW1hZ2U7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIEJhc2VSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRCYXNlNjQgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRDYW52YXMoZnJhbWUpLnRvRGF0YVVSTCgpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB0byBpdCBhbmQgdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBBIENhbnZhcyBlbGVtZW50IHdpdGggdGhlIHRleHR1cmUgcmVuZGVyZWQgb24uXG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgIFxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgQ2FudmFzQnVmZmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHRlbXBDYW52YXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0RhdGEuZGF0YS5zZXQod2ViR0xQaXhlbHMpO1xuXG4gICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZighZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gdGVtcFJlY3Q7XG4gICAgICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGZyYW1lLndpZHRoID09PSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLndpZHRoICYmIFxuICAgICAgICAgICBmcmFtZS5oZWlnaHQgPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIoZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcbiAgICAgICAgICAgIHZhciBjYW52YXNEYXRhID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNvbnRleHQuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggICogcmVzb2x1dGlvbiwgZnJhbWUueSAqIHJlc29sdXRpb24sIGZyYW1lLndpZHRoICogcmVzb2x1dGlvbiwgZnJhbWUuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0ZW1wQ2FudmFzLmNhbnZhcztcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKCBmcmFtZSApXG57XG4gICAgaWYoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgZnJhbWUud2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS53aWR0aDtcbiAgICAgICAgZnJhbWUuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IGZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyhmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YShmcmFtZS54ICogdGhpcy5yZXNvbHV0aW9uLCBmcmFtZS55ICogdGhpcy5yZXNvbHV0aW9uLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoZnJhbWUsIHgsIHkpXG57XG4gICAgdGVtcFJlY3QueCA9IHg7XG4gICAgdGVtcFJlY3QueSA9IHk7XG4gICAgdGVtcFJlY3Qud2lkdGggPSAxIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRlbXBSZWN0LmhlaWdodCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICBpZihmcmFtZSlcbiAgICB7XG4gICAgICAgIHRlbXBSZWN0LnggKz0gZnJhbWUueDtcbiAgICAgICAgdGVtcFJlY3QueSArPSBmcmFtZS55O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFBpeGVscyh0ZW1wUmVjdCk7XG59O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZS4gQWxsIHRleHR1cmVzIGhhdmUgYSBiYXNlIHRleHR1cmUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBmb3IgZGV2aWNlcyB3aXRoIGRpZmZlcmVudCBwaXhlbCByYXRpb3NcbiAqL1xuZnVuY3Rpb24gQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnVpZCA9IHV0aWxzLnVpZCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgYmFzZSB0ZXh0dXJlIHNldCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAxMDA7XG5cbiAgICAvLyBUT0RPIGRvY3NcbiAgICAvLyB1c2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgZGltZW5zaW9ucyBvZiB0aGUgc291cmNlXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIHdpZHRoIG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsV2lkdGggPSAxMDA7XG4gICAgLyoqXG4gICAgICogVXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIGhlaWdodCBvZiB0aGUgc291cmNlIG9mIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucmVhbEhlaWdodCA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlIHRvIGFwcGx5IHdoZW4gc2NhbGluZyB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlNDQUxFX01PREVTLkxJTkVBUlxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSBvbmNlIHRoZSBiYXNlIHRleHR1cmUgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG5ldmVyIHRydWUgaWYgdGhlIHVuZGVybHlpbmcgc291cmNlIGZhaWxzIHRvIGxvYWQgb3IgaGFzIG5vIHRleHR1cmUgZGF0YS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIGlmIHRoZSBzb3VyY2UgaXMgY3VycmVudGx5IGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBJZiBhbiBJbWFnZSBzb3VyY2UgaXMgbG9hZGluZyB0aGUgJ2xvYWRlZCcgb3IgJ2Vycm9yJyBldmVudCB3aWxsIGJlXG4gICAgICogZGlzcGF0Y2hlZCB3aGVuIHRoZSBvcGVyYXRpb24gZW5kcy4gQW4gdW5kZXJ5bGluZyBzb3VyY2UgdGhhdCBpc1xuICAgICAqIGltbWVkaWF0ZWx5LWF2YWlsYWJsZSBieXBhc3NlcyBsb2FkaW5nIGVudGlyZWx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGltYWdlIHNvdXJjZSB0aGF0IGlzIHVzZWQgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogVE9ETzogTWFrZSB0aGlzIGEgc2V0dGVyIHRoYXQgY2FsbHMgbG9hZFNvdXJjZSgpO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SW1hZ2V8Q2FudmFzfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuc291cmNlID0gbnVsbDsgLy8gc2V0IGluIGxvYWRTb3VyY2UsIGlmIGF0IGFsbFxuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgaWYgUkdCIGNoYW5uZWxzIHNob3VsZCBiZSBwcmUtbXVsdGlwbGllZCBieSBBbHBoYSAgKFdlYkdMIG9ubHkpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgb3Igbm90IHRoZSB0ZXh0dXJlIGlzIGEgcG93ZXIgb2YgdHdvLCB0cnkgdG8gdXNlIHBvd2VyIG9mIHR3byB0ZXh0dXJlcyBhcyBtdWNoIGFzIHlvdSBjYW5cbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSBmYWxzZTtcblxuICAgIC8vIHVzZWQgZm9yIHdlYkdMXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgYSBtaXBtYXAgb2YgdGhpcyB0ZXh0dXJlIG5lZWRzIHRvIGJlIGdlbmVyYXRlZC4gVGhpcyB2YWx1ZSBuZWVkcyB0byBiZSBzZXQgYmVmb3JlIHRoZSB0ZXh0dXJlIGlzIHVzZWRcbiAgICAgKiBBbHNvIHRoZSB0ZXh0dXJlIG11c3QgYmUgYSBwb3dlciBvZiB0d28gc2l6ZSB0byB3b3JrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubWlwbWFwID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBBIG1hcCBvZiByZW5kZXJlciBJRHMgdG8gd2ViZ2wgdGV4dHVyZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIFdlYkdMVGV4dHVyZT59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbFRleHR1cmVzID0ge307XG4gICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5faWQgPSAwO1xuICAgIFxuICAgIC8vIGlmIG5vIHNvdXJjZSBwYXNzZWQgZG9uJ3QgdHJ5IHRvIGxvYWRcbiAgICBpZiAoc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5sb2FkU291cmNlKHNvdXJjZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZpbmlzaGVzIGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZGVkXG4gICAgICogQG1lbWJlcm9mIFBJWEkuQmFzZVRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUgc291cmNlIGZhaWxzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG59XG5cbkJhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdGV4dHVyZSBvbiBhbGwgdGhlIHdlYmdsIHJlbmRlcmVycywgdGhpcyBhbHNvIGFzc3VtZXMgdGhlIHNyYyBoYXMgY2hhbmdlZC5cbiAqXG4gKiBAZmlyZXMgdXBkYXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVhbFdpZHRoID0gdGhpcy5zb3VyY2UubmF0dXJhbFdpZHRoIHx8IHRoaXMuc291cmNlLndpZHRoO1xuICAgIHRoaXMucmVhbEhlaWdodCA9IHRoaXMuc291cmNlLm5hdHVyYWxIZWlnaHQgfHwgdGhpcy5zb3VyY2UuaGVpZ2h0O1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMucmVhbFdpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5yZWFsSGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5pc1Bvd2VyT2ZUd28gPSB1dGlscy5pc1Bvd2VyT2ZUd28odGhpcy5yZWFsV2lkdGgsIHRoaXMucmVhbEhlaWdodCk7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBMb2FkIGEgc291cmNlLlxuICpcbiAqIElmIHRoZSBzb3VyY2UgaXMgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSwgc3VjaCBhcyBhbiBpbWFnZSB0aGF0IG5lZWRzIHRvIGJlXG4gKiBkb3dubG9hZGVkLCB0aGVuIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmUgZGlzcGF0Y2hlZCBpbiB0aGUgZnV0dXJlXG4gKiBhbmQgYGhhc0xvYWRlZGAgd2lsbCByZW1haW4gZmFsc2UgYWZ0ZXIgdGhpcyBjYWxsLlxuICpcbiAqIFRoZSBsb2dpYyBzdGF0ZSBhZnRlciBjYWxsaW5nIGBsb2FkU291cmNlYCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IChlZy4gYGZyb21JbWFnZWAsIGBuZXcgQmFzZVRleHR1cmVgKSBpczpcbiAqXG4gKiAgICAgaWYgKHRleHR1cmUuaGFzTG9hZGVkKVxuIHtcbiAqICAgICAgICAvLyB0ZXh0dXJlIHJlYWR5IGZvciB1c2VcbiAqICAgICB9IGVsc2UgaWYgKHRleHR1cmUuaXNMb2FkaW5nKVxuIHtcbiAqICAgICAgICAvLyBsaXN0ZW4gdG8gJ2xvYWRlZCcgYW5kL29yICdlcnJvcicgZXZlbnRzIG9uIHRleHR1cmVcbiAqICAgICB9IGVsc2Uge1xuICogICAgICAgIC8vIG5vdCBsb2FkaW5nLCBub3QgZ29pbmcgdG8gbG9hZCBVTkxFU1MgdGhlIHNvdXJjZSBpcyByZWxvYWRlZFxuICogICAgICAgIC8vIChpdCBtYXkgc3RpbGwgbWFrZSBzZW5zZSB0byBsaXN0ZW4gdG8gdGhlIGV2ZW50cylcbiAqICAgICB9XG4gKlxuICogQHByb3RlY3RlZFxuICogQHBhcmFtIHNvdXJjZSB7SW1hZ2V8Q2FudmFzfSB0aGUgc291cmNlIG9iamVjdCBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmxvYWRTb3VyY2UgPSBmdW5jdGlvbiAoc291cmNlKVxue1xuICAgIHZhciB3YXNMb2FkaW5nID0gdGhpcy5pc0xvYWRpbmc7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKHdhc0xvYWRpbmcgJiYgdGhpcy5zb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICB0aGlzLnNvdXJjZS5vbmVycm9yID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcblxuICAgIC8vIEFwcGx5IHNvdXJjZSBpZiBsb2FkZWQuIE90aGVyd2lzZSBzZXR1cCBhcHByb3ByaWF0ZSBsb2FkaW5nIG1vbml0b3JzLlxuICAgIGlmICgodGhpcy5zb3VyY2UuY29tcGxldGUgfHwgdGhpcy5zb3VyY2UuZ2V0Q29udGV4dCkgJiYgdGhpcy5zb3VyY2Uud2lkdGggJiYgdGhpcy5zb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFzb3VyY2UuZ2V0Q29udGV4dClcbiAgICB7XG5cbiAgICAgICAgLy8gSW1hZ2UgZmFpbCAvIG5vdCByZWFkeVxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgdmFyIHNjb3BlID0gdGhpcztcblxuICAgICAgICBzb3VyY2Uub25sb2FkID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgIHNjb3BlLmVtaXQoJ2xvYWRlZCcsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzb3VyY2Uub25lcnJvciA9IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXNjb3BlLmlzTG9hZGluZylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuZW1pdCgnZXJyb3InLCBzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUGVyIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI3RoZS1pbWctZWxlbWVudFxuICAgICAgICAvLyAgIFwiVGhlIHZhbHVlIG9mIGBjb21wbGV0ZWAgY2FuIHRodXMgY2hhbmdlIHdoaWxlIGEgc2NyaXB0IGlzIGV4ZWN1dGluZy5cIlxuICAgICAgICAvLyBTbyBjb21wbGV0ZSBuZWVkcyB0byBiZSByZS1jaGVja2VkIGFmdGVyIHRoZSBjYWxsYmFja3MgaGF2ZSBiZWVuIGFkZGVkLi5cbiAgICAgICAgLy8gTk9URTogY29tcGxldGUgd2lsbCBiZSB0cnVlIGlmIHRoZSBpbWFnZSBoYXMgbm8gc3JjIHNvIGJlc3QgdG8gY2hlY2sgaWYgdGhlIHNyYyBpcyBzZXQuXG4gICAgICAgIGlmIChzb3VyY2UuY29tcGxldGUgJiYgc291cmNlLnNyYylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gLi5hbmQgaWYgd2UncmUgY29tcGxldGUgbm93LCBubyBuZWVkIGZvciBjYWxsYmFja3NcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc291cmNlTG9hZGVkKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiBhbnkgcHJldmlvdXMgc3Vic2NyaWJlcnMgcG9zc2libGVcbiAgICAgICAgICAgICAgICBpZiAod2FzTG9hZGluZylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZCBpbnRlcm5hbGx5IHRvIHVwZGF0ZSB0aGUgd2lkdGgsIGhlaWdodCwgYW5kIHNvbWUgb3RoZXIgdHJhY2tpbmcgdmFycyBvbmNlXG4gKiBhIHNvdXJjZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuX3NvdXJjZUxvYWRlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgYmFzZSB0ZXh0dXJlXG4gKlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuaW1hZ2VVcmwpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcbiAgICAgICAgZGVsZXRlIHV0aWxzLlRleHR1cmVDYWNoZVt0aGlzLmltYWdlVXJsXTtcblxuICAgICAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgICAgICBpZiAoIW5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZS5zcmMgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdGhpcy5zb3VyY2UuX3BpeGlJZF07XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsO1xuXG4gICAgdGhpcy5kaXNwb3NlKCk7XG59O1xuXG4vKipcbiAqIEZyZWVzIHRoZSB0ZXh0dXJlIGZyb20gV2ViR0wgbWVtb3J5IHdpdGhvdXQgZGVzdHJveWluZyB0aGlzIHRleHR1cmUgb2JqZWN0LlxuICogVGhpcyBtZWFucyB5b3UgY2FuIHN0aWxsIHVzZSB0aGUgdGV4dHVyZSBsYXRlciB3aGljaCB3aWxsIHVwbG9hZCBpdCB0byBHUFVcbiAqIG1lbW9yeSBhZ2Fpbi5cbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmVtaXQoJ2Rpc3Bvc2UnLCB0aGlzKTtcblxuICAgIC8vIHRoaXMgc2hvdWxkIG5vIGxvbmdlciBiZSBuZWVkZWQsIHRoZSByZW5kZXJlcnMgc2hvdWxkIGNsZWFudXAgYWxsIHRoZSBnbCB0ZXh0dXJlcy5cbiAgICAvLyB0aGlzLl9nbFRleHR1cmVzID0ge307XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHNvdXJjZSBpbWFnZSBvZiB0aGUgdGV4dHVyZS5cbiAqIFRoZSBvcmlnaW5hbCBzb3VyY2UgbXVzdCBiZSBhbiBJbWFnZSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBuZXdTcmMge3N0cmluZ30gdGhlIHBhdGggb2YgdGhlIGltYWdlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS51cGRhdGVTb3VyY2VJbWFnZSA9IGZ1bmN0aW9uIChuZXdTcmMpXG57XG4gICAgdGhpcy5zb3VyY2Uuc3JjID0gbmV3U3JjO1xuXG4gICAgdGhpcy5sb2FkU291cmNlKHRoaXMuc291cmNlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGJhc2UgdGV4dHVyZSBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSBiYXNlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBjcmVhdGVkIGFuZCBsb2FkZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlVXJsIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gU2hvdWxkIHVzZSBhbm9ueW1vdXMgQ09SUz8gRGVmYXVsdHMgdG8gdHJ1ZSBpZiB0aGUgVVJMIGlzIG5vdCBhIGRhdGEtVVJJLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF07XG5cbiAgICBpZiAoY3Jvc3NvcmlnaW4gPT09IHVuZGVmaW5lZCAmJiBpbWFnZVVybC5pbmRleE9mKCdkYXRhOicpICE9PSAwKVxuICAgIHtcbiAgICAgICAgY3Jvc3NvcmlnaW4gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICAvLyBuZXcgSW1hZ2UoKSBicmVha3MgdGV4IGxvYWRpbmcgaW4gc29tZSB2ZXJzaW9ucyBvZiBDaHJvbWUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjM4MDcxXG4gICAgICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpOy8vZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgICAgIGlmIChjcm9zc29yaWdpbilcbiAgICAgICAge1xuICAgICAgICAgICAgaW1hZ2UuY3Jvc3NPcmlnaW4gPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGltYWdlLCBzY2FsZU1vZGUpO1xuICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IGltYWdlVXJsO1xuXG4gICAgICAgIGltYWdlLnNyYyA9IGltYWdlVXJsO1xuXG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gYmFzZVRleHR1cmU7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4gQDJ4IGF0IHRoZSBlbmQgb2YgdGhlIHVybCB3ZSBhcmUgZ29pbmcgdG8gYXNzdW1lIGl0cyBhIGhpZ2hyZXMgaW1hZ2VcbiAgICAgICAgYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHV0aWxzLmdldFJlc29sdXRpb25PZlVybChpbWFnZVVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4gUElYSS5CYXNlVGV4dHVyZVxuICovXG5CYXNlVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIGlmICghY2FudmFzLl9waXhpSWQpXG4gICAge1xuICAgICAgICBjYW52YXMuX3BpeGlJZCA9ICdjYW52YXNfJyArIHV0aWxzLnVpZCgpO1xuICAgIH1cblxuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbY2FudmFzLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IEJhc2VUZXh0dXJlKGNhbnZhcywgc2NhbGVNb2RlKTtcbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuIiwidmFyIEJhc2VSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlUmVuZGVyVGV4dHVyZScpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbi8qKlxuICogQSBSZW5kZXJUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBQaXhpIGRpc3BsYXkgb2JqZWN0IHRvIGJlIHJlbmRlcmVkIHRvIGl0LlxuICpcbiAqIF9fSGludF9fOiBBbGwgRGlzcGxheU9iamVjdHMgKGkuZS4gU3ByaXRlcykgdGhhdCByZW5kZXIgdG8gYSBSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIFJlbmRlclRleHR1cmUgdGFrZXMgYSBzbmFwc2hvdCBvZiBhbnkgRGlzcGxheSBPYmplY3QgZ2l2ZW4gdG8gaXRzIHJlbmRlciBtZXRob2QuIFRoZSBwb3NpdGlvblxuICogYW5kIHJvdGF0aW9uIG9mIHRoZSBnaXZlbiBEaXNwbGF5IE9iamVjdHMgaXMgaWdub3JlZC4gRm9yIGV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDEwMjQsIDEwMjQsIHsgdmlldzogY2FudmFzLCByYXRpbzogMSB9KTtcbiAqIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFBJWEkuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKHNwcml0ZSk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgU3ByaXRlIGluIHRoaXMgY2FzZSB3aWxsIGJlIHJlbmRlcmVkIHRvIGEgcG9zaXRpb24gb2YgMCwwLiBUbyByZW5kZXIgdGhpcyBzcHJpdGUgYXQgaXRzIGFjdHVhbFxuICogcG9zaXRpb24gYSBDb250YWluZXIgc2hvdWxkIGJlIHVzZWQ6XG4gKlxuICogYGBganNcbiAqIHZhciBkb2MgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqXG4gKiBkb2MuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqXG4gKiByZW5kZXJUZXh0dXJlLnJlbmRlcihkb2MpOyAgLy8gUmVuZGVycyB0byBjZW50ZXIgb2YgcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBSZW5kZXJUZXh0dXJlXG4gKiBAcGFyYW0gW3dpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtoZWlnaHQ9MTAwXSB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICogQHBhcmFtIFtzY2FsZU1vZGVdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIFtyZXNvbHV0aW9uPTFdIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICovXG5mdW5jdGlvbiBSZW5kZXJUZXh0dXJlKGJhc2VSZW5kZXJUZXh0dXJlLCBmcmFtZSlcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIFJlbmRlclRleHR1cmUsIHlvdSBtdXN0IHBhc3MgYSByZW5kZXJlciBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIG9iamVjdCB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtCYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICBUZXh0dXJlLmNhbGwodGhpcyxcbiAgICAgICAgYmFzZVJlbmRlclRleHR1cmUsXG4gICAgICAgIGZyYW1lIFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fdXBkYXRlVXZzKCk7XG59XG5cblJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlLnByb3RvdHlwZSk7XG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgUmVuZGVyVGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gdXBkYXRlQmFzZSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBiYXNlVGV4dHVyZS53aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBiZSByZXNpemVkIGFzIHdlbGw/XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB1cGRhdGVCYXNlKVxue1xuICAgXG4gICAgLy9UT0RPIC0gY291bGQgYmUgbm90IHJlcXVpcmVkLi5cbiAgICB0aGlzLnZhbGlkID0gKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTtcblxuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy5jcm9wLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jcm9wLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh1cGRhdGVCYXNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5yZXNpemUod2lkdGgsIGhlaWdodClcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLmNsZWFyKHRoaXMuZnJhbWUpXG4gICAgXG59O1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqIEBwYXJhbSBbdXBkYXRlVHJhbnNmb3JtPXRydWVdIHtib29sZWFufSBJZiB0cnVlIHRoZSBkaXNwbGF5T2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0vd29ybGRBbHBoYSBhbmQgYWxsIGNoaWxkcmVuXG4gKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5iYXNlVGV4dHVyZS5yZW5kZXIodGhpcy5mcmFtZSwgZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIHRoaXMgdGV4dHVyZS4gSXQgd29ya3MgYnkgY2FsbGluZyBSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0QmFzZTY0LmdldEltYWdlKHRoaXMuZnJhbWUpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQsIHJlbmRlcnMgdGhpcyBSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0Q2FudmFzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRDYW52YXModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgdGhlIGVudGlyZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbHModGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgYSBwaXhlbCB3aXRoaW4gdGhlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWwgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICByZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5nZXRQaXhlbCh0aGlzLmZyYW1lLCB4LCB5KTtcbn07XG5cblJlbmRlclRleHR1cmUuY3JlYXRlID0gZnVuY3Rpb24ocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICByZXR1cm4gbmV3IFJlbmRlclRleHR1cmUobmV3IEJhc2VSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24pKTtcbn1cblxuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIFZpZGVvQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzID0gcmVxdWlyZSgnLi9UZXh0dXJlVXZzJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhbiBpbWFnZSBvciBwYXJ0IG9mIGFuIGltYWdlLiBJdCBjYW5ub3QgYmUgYWRkZWRcbiAqIHRvIHRoZSBkaXNwbGF5IGxpc3QgZGlyZWN0bHkuIEluc3RlYWQgdXNlIGl0IGFzIHRoZSB0ZXh0dXJlIGZvciBhIFNwcml0ZS4gSWYgbm8gZnJhbWUgaXMgcHJvdmlkZWQgdGhlbiB0aGUgd2hvbGUgaW1hZ2UgaXMgdXNlZC5cbiAqXG4gKiBZb3UgY2FuIGRpcmVjdGx5IGNyZWF0ZSBhIHRleHR1cmUgZnJvbSBhbiBpbWFnZSBhbmQgdGhlbiByZXVzZSBpdCBtdWx0aXBsZSB0aW1lcyBsaWtlIHRoaXMgOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIHZhciBzcHJpdGUxID0gbmV3IFBJWEkuU3ByaXRlKHRleHR1cmUpO1xuICogdmFyIHNwcml0ZTIgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gYmFzZVRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV9IFRoZSBiYXNlIHRleHR1cmUgc291cmNlIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZSBmcm9tXG4gKiBAcGFyYW0gW2ZyYW1lXSB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5nbGUgZnJhbWUgb2YgdGhlIHRleHR1cmUgdG8gc2hvd1xuICogQHBhcmFtIFtjcm9wXSB7UElYSS5SZWN0YW5nbGV9IFRoZSBhcmVhIG9mIG9yaWdpbmFsIHRleHR1cmVcbiAqIEBwYXJhbSBbdHJpbV0ge1BJWEkuUmVjdGFuZ2xlfSBUcmltbWVkIHRleHR1cmUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gW3JvdGF0ZV0ge2Jvb2xlYW59IGluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXMgKCB1c2VkIGJ5IHRleHR1cmUgcGFja2VyIClcbiAqL1xuZnVuY3Rpb24gVGV4dHVyZShiYXNlVGV4dHVyZSwgZnJhbWUsIGNyb3AsIHRyaW0sIHJvdGF0ZSlcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIERvZXMgdGhpcyBUZXh0dXJlIGhhdmUgYW55IGZyYW1lIGRhdGEgYXNzaWduZWQgdG8gaXQ/XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubm9GcmFtZSA9IGZhbHNlO1xuXG4gICAgaWYgKCFmcmFtZSlcbiAgICB7XG4gICAgICAgIHRoaXMubm9GcmFtZSA9IHRydWU7XG4gICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuICAgIH1cblxuICAgIGlmIChiYXNlVGV4dHVyZSBpbnN0YW5jZW9mIFRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlLmJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmFzZVRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy5iYXNlVGV4dHVyZSA9IGJhc2VUZXh0dXJlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdHJpbSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy50cmltID0gdHJpbTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgdGhlIHJlbmRlcmVyIGtub3cgaWYgdGhlIHRleHR1cmUgaXMgdmFsaWQuIElmIGl0J3Mgbm90IHRoZW4gaXQgY2Fubm90IGJlIHJlbmRlcmVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHdpbGwgbGV0IGEgcmVuZGVyZXIga25vdyB0aGF0IGEgdGV4dHVyZSBoYXMgYmVlbiB1cGRhdGVkICh1c2VkIG1haW5seSBmb3Igd2ViR0wgdXYgdXBkYXRlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXF1aXJlc1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFdlYkdMIFVWIGRhdGEgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBUZXh0dXJlIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIGFyZWEgb2YgdGhlIEJhc2VUZXh0dXJlIGltYWdlIHRvIGFjdHVhbGx5IGNvcHkgdG8gdGhlIENhbnZhcyAvIFdlYkdMIHdoZW4gcmVuZGVyaW5nLFxuICAgICAqIGlycmVzcGVjdGl2ZSBvZiB0aGUgYWN0dWFsIGZyYW1lIHNpemUgb3IgcGxhY2VtZW50ICh3aGljaCBjYW4gYmUgaW5mbHVlbmNlZCBieSB0cmltbWVkIHRleHR1cmUgYXRsYXNlcylcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3JvcCA9IGNyb3AgfHwgZnJhbWU7Ly9uZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgcm90YXRlZCBieSA5MCBkZWdyZWVzXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb3RhdGUgPSAhIXJvdGF0ZTtcblxuICAgIGlmIChiYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICBmcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gZnJhbWUgd2Ugc2hvdWxkIG1vbml0b3IgZm9yIGFueSBiYXNlIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5vbigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZS5vbmNlKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZC4gVGhpcyBoYXBwZW5zIGlmIHRoZSBmcmFtZSBvciB0aGUgYmFzZVRleHR1cmUgaXMgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBldmVudCB1cGRhdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0dXJlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0dXJlI1xuICAgICAqL1xuICAgIGZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBmcmFtZTtcblxuICAgICAgICAgICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHRoaXMud2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMudHJpbSAmJiAhdGhpcy5yb3RhdGUgJiYgKGZyYW1lLnggKyBmcmFtZS53aWR0aCA+IHRoaXMuYmFzZVRleHR1cmUud2lkdGggfHwgZnJhbWUueSArIGZyYW1lLmhlaWdodCA+IHRoaXMuYmFzZVRleHR1cmUuaGVpZ2h0KSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHR1cmUgRXJyb3I6IGZyYW1lIGRvZXMgbm90IGZpdCBpbnNpZGUgdGhlIGJhc2UgVGV4dHVyZSBkaW1lbnNpb25zICcgKyB0aGlzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy90aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuc291cmNlICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuICAgICAgICAgICAgdGhpcy52YWxpZCA9IGZyYW1lICYmIGZyYW1lLndpZHRoICYmIGZyYW1lLmhlaWdodCAmJiB0aGlzLmJhc2VUZXh0dXJlLmhhc0xvYWRlZDtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJpbSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy50cmltLmhlaWdodDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS53aWR0aCA9IHRoaXMudHJpbS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JvcCA9IGZyYW1lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy52YWxpZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVVdnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhpcyB0ZXh0dXJlIG9uIHRoZSBncHUuXG4gKlxuICovXG5UZXh0dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYmFzZVRleHR1cmUudXBkYXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgbG9hZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZUxvYWRlZCA9IGZ1bmN0aW9uIChiYXNlVGV4dHVyZSlcbntcbiAgICAvLyBUT0RPIHRoaXMgY29kZSBsb29rcyBjb25mdXNpbmcuLiBib28gdG8gYWJ1c2luZyBnZXR0ZXJzIGFuZCBzZXR0ZXJzcyFcbiAgICBpZiAodGhpcy5ub0ZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCBiYXNlVGV4dHVyZS53aWR0aCwgYmFzZVRleHR1cmUuaGVpZ2h0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMuX2ZyYW1lO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZSBiYXNlIHRleHR1cmUgaXMgdXBkYXRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLm9uQmFzZVRleHR1cmVVcGRhdGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95QmFzZT1mYWxzZV0ge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95QmFzZSlcbntcbiAgICBpZiAodGhpcy5iYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGlmIChkZXN0cm95QmFzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCwgdGhpcyk7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCdsb2FkZWQnLCB0aGlzLm9uQmFzZVRleHR1cmVMb2FkZWQsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2ZyYW1lID0gbnVsbDtcbiAgICB0aGlzLl91dnMgPSBudWxsO1xuICAgIHRoaXMudHJpbSA9IG51bGw7XG4gICAgdGhpcy5jcm9wID0gbnVsbDtcblxuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIHRoaXMub2ZmKCdkaXNwb3NlJywgdGhpcy5kaXNwb3NlLCB0aGlzKTtcbiAgICB0aGlzLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRleHR1cmUgb2JqZWN0IHRoYXQgYWN0cyB0aGUgc2FtZSBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9XG4gKi9cblRleHR1cmUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUodGhpcy5iYXNlVGV4dHVyZSwgdGhpcy5mcmFtZSwgdGhpcy5jcm9wLCB0aGlzLnRyaW0sIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuX3VwZGF0ZVV2cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLl91dnMpXG4gICAge1xuICAgICAgICB0aGlzLl91dnMgPSBuZXcgVGV4dHVyZVV2cygpO1xuICAgIH1cblxuICAgIHRoaXMuX3V2cy5zZXQodGhpcy5jcm9wLCB0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLnJvdGF0ZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBUZXh0dXJlIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBpbWFnZSB1cmwuXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGNyb3Nzb3JpZ2luIHtib29sZWFufSBXaGV0aGVyIHJlcXVlc3RzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGNyb3Nzb3JpZ2luXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbiAgICAgICAgdXRpbHMuVGV4dHVyZUNhY2hlW2ltYWdlVXJsXSA9IHRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZScpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIGNhbnZhcyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBjYW52YXMge0NhbnZhc30gVGhlIGNhbnZhcyBlbGVtZW50IHNvdXJjZSBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5mcm9tQ2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcywgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZShCYXNlVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhcywgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW8ge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAodHlwZW9mIHZpZGVvID09PSAnc3RyaW5nJylcbiAgICB7XG4gICAgICAgIHJldHVybiBUZXh0dXJlLmZyb21WaWRlb1VybCh2aWRlbywgc2NhbGVNb2RlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgdmlkZW8gdXJsLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1VybCB7c3RyaW5nfVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gQSBUZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbVZpZGVvVXJsID0gZnVuY3Rpb24gKHZpZGVvVXJsLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh2aWRlb1VybCwgc2NhbGVNb2RlKSk7XG59O1xuXG4vKipcbiAqIEFkZHMgYSB0ZXh0dXJlIHRvIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLiBUaGlzIGNhY2hlIGlzIHNoYXJlZCBhY3Jvc3MgdGhlIHdob2xlIFBJWEkgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSBUZXh0dXJlIHRvIGFkZCB0byB0aGUgY2FjaGUuXG4gKiBAcGFyYW0gaWQge3N0cmluZ30gVGhlIGlkIHRoYXQgdGhlIHRleHR1cmUgd2lsbCBiZSBzdG9yZWQgYWdhaW5zdC5cbiAqL1xuVGV4dHVyZS5hZGRUZXh0dXJlVG9DYWNoZSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBpZClcbntcbiAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdID0gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgdGV4dHVyZSBmcm9tIHRoZSBnbG9iYWwgdXRpbHMuVGV4dHVyZUNhY2hlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgb2YgdGhlIHRleHR1cmUgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0aGF0IHdhcyByZW1vdmVkXG4gKi9cblRleHR1cmUucmVtb3ZlVGV4dHVyZUZyb21DYWNoZSA9IGZ1bmN0aW9uIChpZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtpZF07XG5cbiAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcbiAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpZF07XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogQW4gZW1wdHkgdGV4dHVyZSwgdXNlZCBvZnRlbiB0byBub3QgaGF2ZSB0byBjcmVhdGUgbXVsdGlwbGUgZW1wdHkgdGV4dHVyZXMuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmUuRU1QVFkgPSBuZXcgVGV4dHVyZShuZXcgQmFzZVRleHR1cmUoKSk7XG4iLCJcbi8qKlxuICogQSBzdGFuZGFyZCBvYmplY3QgdG8gc3RvcmUgdGhlIFV2cyBvZiBhIHRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBUZXh0dXJlVXZzKClcbntcbiAgICB0aGlzLngwID0gMDtcbiAgICB0aGlzLnkwID0gMDtcblxuICAgIHRoaXMueDEgPSAxO1xuICAgIHRoaXMueTEgPSAwO1xuXG4gICAgdGhpcy54MiA9IDE7XG4gICAgdGhpcy55MiA9IDE7XG5cbiAgICB0aGlzLngzID0gMDtcbiAgICB0aGlzLnkzID0gMTtcblxuICAgIHRoaXMueHkwX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTFfdWludDMyID0gMDtcbiAgICB0aGlzLnh5Ml91aW50MzIgPSAwO1xuICAgIHRoaXMueHkzX3VpbnQzMiA9IDA7XG5cbiAgICB0aGlzLnV2c191aW50MzIgPSBuZXcgVWludDMyQXJyYXkoNClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlVXZzO1xuXG4vKipcbiAqIFNldHMgdGhlIHRleHR1cmUgVXZzIGJhc2VkIG9uIHRoZSBnaXZlbiBmcmFtZSBpbmZvcm1hdGlvblxuICogQHBhcmFtIGZyYW1lIHtQSVhJLlJlY3RhbmdsZX1cbiAqIEBwYXJhbSBiYXNlRnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIHJvdGF0ZSB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIGZyYW1lIGlzIHJvdGF0ZWRcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmVVdnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChmcmFtZSwgYmFzZUZyYW1lLCByb3RhdGUpXG57XG4gICAgdmFyIHR3ID0gYmFzZUZyYW1lLndpZHRoO1xuICAgIHZhciB0aCA9IGJhc2VGcmFtZS5oZWlnaHQ7XG5cbiAgICBpZihyb3RhdGUpXG4gICAge1xuICAgICAgICB0aGlzLngwID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUuaGVpZ2h0KSAvIHR3O1xuICAgICAgICB0aGlzLnkxID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkyID0gKGZyYW1lLnkgKyBmcmFtZS53aWR0aCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gZnJhbWUueSAvIHRoO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIHRoaXMueDAgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTAgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MSA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSBmcmFtZS55IC8gdGg7XG5cbiAgICAgICAgdGhpcy54MiA9IChmcmFtZS54ICsgZnJhbWUud2lkdGgpIC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcblxuICAgICAgICB0aGlzLngzID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkzID0gKGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQpIC8gdGg7XG4gICAgfVxuXG4gICAgdGhpcy51dnNfdWludDMyWzBdID0gKCgodGhpcy55MCAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngwICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbMV0gPSAoKCh0aGlzLnkxICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDEgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsyXSA9ICgoKHRoaXMueTIgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MiAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzNdID0gKCgodGhpcy55MyAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngzICogNjU1MzUpICYgMHhGRkZGKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEEgdGV4dHVyZSBvZiBhIFtwbGF5aW5nXSBWaWRlby5cbiAqXG4gKiBWaWRlbyBiYXNlIHRleHR1cmVzIG1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kIGluIHRoZWlyIGNyZWF0aW9uIHByb2Nlc3MuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZCBpbiBzZXZlcmFsIHdheXMsIHN1Y2ggYXM6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwoJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0Jyk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCh7IHNyYzogJ2h0dHA6Ly9teWRvbWFpbi5jb20vdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoWycvdmlkZW8ud2VibScsICcvdmlkZW8ubXA0J10pO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzKFtcbiAqICAgICB7IHNyYzogJy92aWRlby53ZWJtJywgbWltZTogJ3ZpZGVvL3dlYm0nIH0sXG4gKiAgICAgeyBzcmM6ICcvdmlkZW8ubXA0JywgbWltZTogJ3ZpZGVvL21wNCcgfVxuICogXSk7XG4gKiBgYGBcbiAqXG4gKiBTZWUgdGhlIFtcImRldXNcIiBkZW1vXShodHRwOi8vd3d3Lmdvb2Rib3lkaWdpdGFsLmNvbS9waXhpanMvZXhhbXBsZXMvZGV1cy8pLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5CYXNlVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzb3VyY2Uge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIFZpZGVvQmFzZVRleHR1cmUoc291cmNlLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFzb3VyY2UpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHZpZGVvIHNvdXJjZSBlbGVtZW50IHNwZWNpZmllZC4nKTtcbiAgICB9XG5cbiAgICAvLyBob29rIGluIGhlcmUgdG8gY2hlY2sgaWYgdmlkZW8gaXMgYWxyZWFkeSBhdmFpbGFibGUuXG4gICAgLy8gQmFzZVRleHR1cmUgbG9va3MgZm9yIGEgc291cmNlLmNvbXBsZXRlIGJvb2xlYW4sIHBsdXMgd2lkdGggJiBoZWlnaHQuXG5cbiAgICBpZiAoKHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9FTk9VR0hfREFUQSB8fCBzb3VyY2UucmVhZHlTdGF0ZSA9PT0gc291cmNlLkhBVkVfRlVUVVJFX0RBVEEpICYmIHNvdXJjZS53aWR0aCAmJiBzb3VyY2UuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgc291cmNlLmNvbXBsZXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBCYXNlVGV4dHVyZS5jYWxsKHRoaXMsIHNvdXJjZSwgc2NhbGVNb2RlKTtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCB0aGUgYmFzZSB0ZXh0dXJlIGF1dG9tYXRpY2FsbHkgdXBkYXRlIGl0c2VsZiwgc2V0IHRvIHRydWUgYnkgZGVmYXVsdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG5cbiAgICB0aGlzLl9vblVwZGF0ZSA9IHRoaXMuX29uVXBkYXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fb25DYW5QbGF5ID0gdGhpcy5fb25DYW5QbGF5LmJpbmQodGhpcyk7XG5cbiAgICBpZiAoIXNvdXJjZS5jb21wbGV0ZSlcbiAgICB7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgdGhpcy5fb25DYW5QbGF5KTtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICAvLyBzdGFydGVkIHBsYXlpbmcuLlxuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX29uUGxheVN0YXJ0LmJpbmQodGhpcykpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9vblBsYXlTdG9wLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHRoaXMuX19sb2FkZWQgPSBmYWxzZTtcbn1cblxuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZpZGVvQmFzZVRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFZpZGVvQmFzZVRleHR1cmU7XG5cbi8qKlxuICogVGhlIGludGVybmFsIHVwZGF0ZSBsb29wIG9mIHRoZSB2aWRlbyBiYXNlIHRleHR1cmUsIG9ubHkgcnVucyB3aGVuIGF1dG9VcGRhdGUgaXMgc2V0IHRvIHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25VcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJ1bnMgdGhlIHVwZGF0ZSBsb29wIHdoZW4gdGhlIHZpZGVvIGlzIHJlYWR5IHRvIHBsYXlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5hdXRvVXBkYXRlKVxuICAgIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9vblVwZGF0ZSk7XG4gICAgICAgIHRoaXMuYXV0b1VwZGF0ZSA9IHRydWU7XG4gICAgfVxufTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIGEgcGF1c2UgZXZlbnQgaXMgdHJpZ2dlcmVkLCBzdG9wcyB0aGUgdXBkYXRlIGxvb3BcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25QbGF5U3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5hdXRvVXBkYXRlID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gdGhlIHZpZGVvIGlzIGxvYWRlZCBhbmQgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vbkNhblBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX29uQ2FuUGxheSk7XG5cbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuc291cmNlLnZpZGVvV2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5zb3VyY2UudmlkZW9IZWlnaHQ7XG5cbiAgICAgICAgdGhpcy5zb3VyY2UucGxheSgpO1xuXG4gICAgICAgIC8vIHByZXZlbnQgbXVsdGlwbGUgbG9hZGVkIGRpc3BhdGNoZXMuLlxuICAgICAgICBpZiAoIXRoaXMuX19sb2FkZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX19sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5zb3VyY2UuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB0aGlzLnNvdXJjZS5fcGl4aUlkIF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNvdXJjZS5fcGl4aUlkO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIE1pbWljIFBpeGkgQmFzZVRleHR1cmUuZnJvbS4uLi4gbWV0aG9kLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlZpZGVvQmFzZVRleHR1cmV9XG4gKi9cblZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvID0gZnVuY3Rpb24gKHZpZGVvLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCF2aWRlby5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgdmlkZW8uX3BpeGlJZCA9ICd2aWRlb18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt2aWRlby5fcGl4aUlkXTtcblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBWaWRlb0Jhc2VUZXh0dXJlKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlWyB2aWRlby5fcGl4aUlkIF0gPSBiYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgQmFzZVRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIHZpZGVvIGVsZW1lbnQuXG4gKiBUaGlzIEJhc2VUZXh0dXJlIGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIGEgdGV4dHVyZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlb1NyYyB7c3RyaW5nfG9iamVjdHxzdHJpbmdbXXxvYmplY3RbXX0gVGhlIFVSTChzKSBmb3IgdGhlIHZpZGVvLlxuICogQHBhcmFtIFt2aWRlb1NyYy5zcmNdIHtzdHJpbmd9IE9uZSBvZiB0aGUgc291cmNlIHVybHMgZm9yIHRoZSB2aWRlb1xuICogQHBhcmFtIFt2aWRlb1NyYy5taW1lXSB7c3RyaW5nfSBUaGUgbWltZXR5cGUgb2YgdGhlIHZpZGVvIChlLmcuICd2aWRlby9tcDQnKS4gSWYgbm90IHNwZWNpZmllZFxuICogIHRoZSB1cmwncyBleHRlbnNpb24gd2lsbCBiZSB1c2VkIGFzIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgbWltZSB0eXBlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsID0gZnVuY3Rpb24gKHZpZGVvU3JjLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcblxuICAgIC8vIGFycmF5IG9mIG9iamVjdHMgb3Igc3RyaW5nc1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZpZGVvU3JjKSlcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlkZW9TcmMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyY1tpXS5zcmMgfHwgdmlkZW9TcmNbaV0sIHZpZGVvU3JjW2ldLm1pbWUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzaW5nbGUgb2JqZWN0IG9yIHN0cmluZ1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKGNyZWF0ZVNvdXJjZSh2aWRlb1NyYy5zcmMgfHwgdmlkZW9TcmMsIHZpZGVvU3JjLm1pbWUpKTtcbiAgICB9XG5cbiAgICB2aWRlby5sb2FkKCk7XG4gICAgdmlkZW8ucGxheSgpO1xuXG4gICAgcmV0dXJuIFZpZGVvQmFzZVRleHR1cmUuZnJvbVZpZGVvKHZpZGVvLCBzY2FsZU1vZGUpO1xufTtcblxuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyA9IFZpZGVvQmFzZVRleHR1cmUuZnJvbVVybDtcblxuZnVuY3Rpb24gY3JlYXRlU291cmNlKHBhdGgsIHR5cGUpXG57XG4gICAgaWYgKCF0eXBlKVxuICAgIHtcbiAgICAgICAgdHlwZSA9ICd2aWRlby8nICsgcGF0aC5zdWJzdHIocGF0aC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpO1xuXG4gICAgc291cmNlLnNyYyA9IHBhdGg7XG4gICAgc291cmNlLnR5cGUgPSB0eXBlO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn1cbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIC8vIEludGVybmFsIGV2ZW50IHVzZWQgYnkgY29tcG9zZWQgZW1pdHRlclxuICAgIFRJQ0sgPSAndGljayc7XG5cbi8qKlxuICogQSBUaWNrZXIgY2xhc3MgdGhhdCBydW5zIGFuIHVwZGF0ZSBsb29wIHRoYXQgb3RoZXIgb2JqZWN0cyBsaXN0ZW4gdG8uXG4gKiBUaGlzIGNsYXNzIGlzIGNvbXBvc2VkIGFyb3VuZCBhbiBFdmVudEVtaXR0ZXIgb2JqZWN0IHRvIGFkZCBsaXN0ZW5lcnNcbiAqIG1lYW50IGZvciBleGVjdXRpb24gb24gdGhlIG5leHQgcmVxdWVzdGVkIGFuaW1hdGlvbiBmcmFtZS5cbiAqIEFuaW1hdGlvbiBmcmFtZXMgYXJlIHJlcXVlc3RlZCBvbmx5IHdoZW4gbmVjZXNzYXJ5LFxuICogZS5nLiBXaGVuIHRoZSB0aWNrZXIgaXMgc3RhcnRlZCBhbmQgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlclxuICovXG5mdW5jdGlvbiBUaWNrZXIoKVxue1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0aWNrIG1ldGhvZCBib3VuZCB0byB0aWNrZXIgaW5zdGFuY2UuXG4gICAgICogVGhpcyBpcyBiZWNhdXNlIGluIGVhcmx5IDIwMTUsIEZ1bmN0aW9uLmJpbmRcbiAgICAgKiBpcyBzdGlsbCA2MCUgc2xvd2VyIGluIGhpZ2ggcGVyZm9ybWFuY2Ugc2NlbmFyaW9zLlxuICAgICAqIEFsc28gc2VwYXJhdGluZyBmcmFtZSByZXF1ZXN0cyBmcm9tIHVwZGF0ZSBtZXRob2RcbiAgICAgKiBzbyBsaXN0ZW5lcnMgbWF5IGJlIGNhbGxlZCBhdCBhbnkgdGltZSBhbmQgd2l0aFxuICAgICAqIGFueSBhbmltYXRpb24gQVBJLCBqdXN0IGludm9rZSB0aWNrZXIudXBkYXRlKHRpbWUpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90aWNrID0gZnVuY3Rpb24gX3RpY2sodGltZSkge1xuXG4gICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgICAgIGlmIChfdGhpcy5zdGFydGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBJbnZva2UgbGlzdGVuZXJzIG5vd1xuICAgICAgICAgICAgX3RoaXMudXBkYXRlKHRpbWUpO1xuICAgICAgICAgICAgLy8gTGlzdGVuZXIgc2lkZSBlZmZlY3RzIG1heSBoYXZlIG1vZGlmaWVkIHRpY2tlciBzdGF0ZS5cbiAgICAgICAgICAgIGlmIChfdGhpcy5zdGFydGVkICYmIF90aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgX3RoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIF90aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMuX3RpY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGVtaXR0ZXIgdXNlZCB0byBmaXJlICd0aWNrJyBldmVudFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGN1cnJlbnQgZnJhbWUgcmVxdWVzdCBJRFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHZhbHVlIG1hbmFnZWQgYnkgbWluRlBTIHByb3BlcnR5IHNldHRlciBhbmQgZ2V0dGVyLlxuICAgICAqIFRoaXMgaXMgdGhlIG1heGltdW0gYWxsb3dlZCBtaWxsaXNlY29uZHMgYmV0d2VlbiB1cGRhdGVzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWF4RWxhcHNlZE1TID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhpcyB0aWNrZXIgc2hvdWxkIGludm9rZSB0aGUgbWV0aG9kXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdGFydH0gYXV0b21hdGljYWxseVxuICAgICAqIHdoZW4gYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9TdGFydCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2NhbGFyIHRpbWUgdmFsdWUgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgc2V0dGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI21pbkZQU31cbiAgICAgKiBhbmQgaXMgc2NhbGVkIHdpdGgge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0uXG4gICAgICogKipOb3RlOioqIFRoZSBjYXAgbWF5IGJlIGV4Y2VlZGVkIGJ5IHNjYWxpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZGVsdGFUaW1lID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRpbWUgZWxhcHNlZCBpbiBtaWxsaXNlY29uZHMgZnJvbSBsYXN0IGZyYW1lIHRvIHRoaXMgZnJhbWUuXG4gICAgICogT3Bwb3NlZCB0byB3aGF0IHRoZSBzY2FsYXIge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9XG4gICAgICogaXMgYmFzZWQsIHRoaXMgdmFsdWUgaXMgbmVpdGhlciBjYXBwZWQgbm9yIHNjYWxlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEgLyBUQVJHRVRfRlBNU1xuICAgICAqL1xuICAgIHRoaXMuZWxhcHNlZE1TID0gMSAvIENPTlNULlRBUkdFVF9GUE1TOyAvLyBkZWZhdWx0IHRvIHRhcmdldCBmcmFtZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCB0aW1lIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjdXBkYXRlfSB3YXMgaW52b2tlZC5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGFsc28gcmVzZXQgaW50ZXJuYWxseSBvdXRzaWRlIG9mIGludm9raW5nXG4gICAgICogdXBkYXRlLCBidXQgb25seSB3aGVuIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gICAgICogSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERPTUhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgICogdGhpcyB2YWx1ZSB3aWxsIGhhdmUgYSBwcmVjaXNpb24gb2YgMSDCtXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5sYXN0VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBGYWN0b3Igb2YgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBTY2FsZXMgdGlja2VyLmRlbHRhVGltZSB0byB3aGF0IHdvdWxkIGJlXG4gICAgICogLy8gdGhlIGVxdWl2YWxlbnQgb2YgYXBwcm94aW1hdGVseSAxMjAgRlBTXG4gICAgICogdGlja2VyLnNwZWVkID0gMjtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5zcGVlZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBoYXMgYmVlbiBzdGFydGVkLlxuICAgICAqIGB0cnVlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogYGZhbHNlYCBpZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0b3B9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBXaGlsZSBgZmFsc2VgLCB0aGlzIHZhbHVlIG1heSBjaGFuZ2UgdG8gYHRydWVgIGluIHRoZVxuICAgICAqIGV2ZW50IG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBiZWluZyBgdHJ1ZWBcbiAgICAgKiBhbmQgYSBsaXN0ZW5lciBpcyBhZGRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlja2VyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZXMgcGVyIHNlY29uZCBhdCB3aGljaCB0aGlzIHRpY2tlciBpcyBydW5uaW5nLlxuICAgICAqIFRoZSBkZWZhdWx0IGlzIGFwcHJveGltYXRlbHkgNjAgaW4gbW9zdCBtb2Rlcm4gYnJvd3NlcnMuXG4gICAgICogKipOb3RlOioqIFRoaXMgZG9lcyBub3QgZmFjdG9yIGluIHRoZSB2YWx1ZSBvZlxuICAgICAqIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3BlZWR9LCB3aGljaCBpcyBzcGVjaWZpY1xuICAgICAqIHRvIHNjYWxpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuZWxhcHNlZE1TO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIG1pbGxpc2Vjb25kcyBhbGxvd2VkIHRvXG4gICAgICogZWxhcHNlIGJldHdlZW4gaW52b2tpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9LlxuICAgICAqIFRoaXMgdmFsdWUgaXMgdXNlZCB0byBjYXAge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICAgICAqIGJ1dCBkb2VzIG5vdCBlZmZlY3QgdGhlIG1lYXN1cmVkIHZhbHVlIG9mIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjRlBTfS5cbiAgICAgKiBXaGVuIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSBpdCBpcyBjbGFtcGVkIHRvIGEgdmFsdWUgYmV0d2VlblxuICAgICAqIGAwYCBhbmQgYFBJWEkuVEFSR0VUX0ZQTVMgKiAxMDAwYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSS50aWNrZXIuVGlja2VyI1xuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgbWluRlBTOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMTAwMCAvIHRoaXMuX21heEVsYXBzZWRNUztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbihmcHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIENsYW1wOiAwIHRvIFRBUkdFVF9GUE1TXG4gICAgICAgICAgICB2YXIgbWluRlBNUyA9IE1hdGgubWluKE1hdGgubWF4KDAsIGZwcykgLyAxMDAwLCBDT05TVC5UQVJHRVRfRlBNUyk7XG4gICAgICAgICAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxIC8gbWluRlBNUztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lLlxuICogSWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHkgYmVlbiByZXF1ZXN0ZWQsIGFuZCBpZiB0aGUgaW50ZXJuYWxcbiAqIGVtaXR0ZXIgaGFzIGxpc3RlbmVycywgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3JlcXVlc3RJZk5lZWRlZCA9IGZ1bmN0aW9uIF9yZXF1ZXN0SWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgPT09IG51bGwgJiYgdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICAvLyBlbnN1cmUgY2FsbGJhY2tzIGdldCBjb3JyZWN0IGRlbHRhXG4gICAgICAgIHRoaXMubGFzdFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX3RpY2spO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSBjYW5jZWxzIGEgcGVuZGluZyBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fY2FuY2VsSWZOZWVkZWQgPSBmdW5jdGlvbiBfY2FuY2VsSWZOZWVkZWQoKVxue1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0SWQgIT09IG51bGwpXG4gICAge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZXF1ZXN0SWQpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiB0aGUgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQgaXQgY2hlY2tzIGlmIGEgZnJhbWUgaGFzIG5vdCBhbHJlYWR5XG4gKiBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbCBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMuIElmIHRoZXNlXG4gKiBjb25kaXRpb25zIGFyZSBtZXQsIGEgbmV3IGZyYW1lIGlzIHJlcXVlc3RlZC4gSWYgdGhlIHRpY2tlciBoYXMgbm90XG4gKiBiZWVuIHN0YXJ0ZWQsIGJ1dCBhdXRvU3RhcnQgaXMgYHRydWVgLCB0aGVuIHRoZSB0aWNrZXIgc3RhcnRzIG5vdyxcbiAqIGFuZCBjb250aW51ZXMgd2l0aCB0aGUgcHJldmlvdXMgY29uZGl0aW9ucyB0byByZXF1ZXN0IGEgbmV3IGZyYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX3N0YXJ0SWZQb3NzaWJsZSA9IGZ1bmN0aW9uIF9zdGFydElmUG9zc2libGUoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5hdXRvU3RhcnQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29ufSBpbnRlcm5hbGx5IGZvciB0aGVcbiAqIGludGVybmFsICd0aWNrJyBldmVudC4gSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsXG4gKiBhbmQgaWYgc28gaXQgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGF0IHRoaXMgcG9pbnQuXG4gKlxuICogQHBhcmFtIGZuIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGFkZGVkIGZvciB1cGRhdGVzXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbihUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29uY2V9IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIG9uZSB1cGRhdGVcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZE9uY2UgPSBmdW5jdGlvbiBhZGRPbmNlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub25jZShUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zdGFydElmUG9zc2libGUoKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxscyB7QGxpbmsgbW9kdWxlOmV2ZW50ZW1pdHRlcjMuRXZlbnRFbWl0dGVyI29mZn0gaW50ZXJuYWxseSBmb3IgJ3RpY2snIGV2ZW50LlxuICogSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMgZm9yICd0aWNrJyBldmVudC5cbiAqIElmIGl0IGRvZXMsIHRoZW4gaXQgY2FuY2VscyB0aGUgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwYXJhbSBbZm5dIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIHJlbW92ZWRcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dCB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub2ZmKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIGlmICghdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAge1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgbGlzdGVuZXJzXG4gKiBhIG5ldyBhbmltYXRpb24gZnJhbWUgaXMgcmVxdWVzdGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiBzdGFydCgpXG57XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSB0aWNrZXIuIElmIHRoZSB0aWNrZXIgaGFzIHJlcXVlc3RlZFxuICogYW4gYW5pbWF0aW9uIGZyYW1lIGl0IGlzIGNhbmNlbGVkIGF0IHRoaXMgcG9pbnQuXG4gKi9cblRpY2tlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uIHN0b3AoKVxue1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpXG4gICAge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2FuY2VsSWZOZWVkZWQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRyaWdnZXJzIGFuIHVwZGF0ZS4gQW4gdXBkYXRlIGVudGFpbHMgc2V0dGluZyB0aGVcbiAqIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNlbGFwc2VkTVN9LFxuICogdGhlIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LFxuICogaW52b2tpbmcgYWxsIGxpc3RlbmVycyB3aXRoIGN1cnJlbnQgZGVsdGFUaW1lLFxuICogYW5kIHRoZW4gZmluYWxseSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbGFzdFRpbWV9XG4gKiB3aXRoIHRoZSB2YWx1ZSBvZiBjdXJyZW50VGltZSB0aGF0IHdhcyBwcm92aWRlZC5cbiAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgYW5pbWF0aW9uXG4gKiBmcmFtZSBjYWxsYmFja3MgaWYgdGhlIHRpY2tlciBpbnN0YW5jZSBoYXMgYmVlbiBzdGFydGVkXG4gKiBhbmQgbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqXG4gKiBAcGFyYW0gW2N1cnJlbnRUaW1lPXBlcmZvcm1hbmNlLm5vdygpXSB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9IHRoZSBjdXJyZW50IHRpbWUgb2YgZXhlY3V0aW9uXG4gKi9cblRpY2tlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKGN1cnJlbnRUaW1lKVxue1xuICAgIHZhciBlbGFwc2VkTVM7XG5cbiAgICAvLyBBbGxvdyBjYWxsaW5nIHVwZGF0ZSBkaXJlY3RseSB3aXRoIGRlZmF1bHQgY3VycmVudFRpbWUuXG4gICAgY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSB8fCBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAvLyBTYXZlIHVuY2FwcGVkIGVsYXBzZWRNUyBmb3IgbWVhc3VyZW1lbnRcbiAgICBlbGFwc2VkTVMgPSB0aGlzLmVsYXBzZWRNUyA9IGN1cnJlbnRUaW1lIC0gdGhpcy5sYXN0VGltZTtcblxuICAgIC8vIGNhcCB0aGUgbWlsbGlzZWNvbmRzIGVsYXBzZWQgdXNlZCBmb3IgZGVsdGFUaW1lXG4gICAgaWYgKGVsYXBzZWRNUyA+IHRoaXMuX21heEVsYXBzZWRNUylcbiAgICB7XG4gICAgICAgIGVsYXBzZWRNUyA9IHRoaXMuX21heEVsYXBzZWRNUztcbiAgICB9XG5cbiAgICB0aGlzLmRlbHRhVGltZSA9IGVsYXBzZWRNUyAqIENPTlNULlRBUkdFVF9GUE1TICogdGhpcy5zcGVlZDtcblxuICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgYWRkZWQgdG8gaW50ZXJuYWwgZW1pdHRlclxuICAgIHRoaXMuX2VtaXR0ZXIuZW1pdChUSUNLLCB0aGlzLmRlbHRhVGltZSk7XG5cbiAgICB0aGlzLmxhc3RUaW1lID0gY3VycmVudFRpbWU7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRpY2tlcjtcbiIsInZhciBUaWNrZXIgPSByZXF1aXJlKCcuL1RpY2tlcicpO1xuXG4vKipcbiAqIFRoZSBzaGFyZWQgdGlja2VyIGluc3RhbmNlIHVzZWQgYnkge0BsaW5rIFBJWEkuZXh0cmFzLk1vdmllQ2xpcH0uXG4gKiBhbmQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqIFRoZSBwcm9wZXJ0eSB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2F1dG9TdGFydH0gaXMgc2V0IHRvIGB0cnVlYFxuICogZm9yIHRoaXMgaW5zdGFuY2UuIFBsZWFzZSBmb2xsb3cgdGhlIGV4YW1wbGVzIGZvciB1c2FnZSwgaW5jbHVkaW5nXG4gKiBob3cgdG8gb3B0LW91dCBvZiBhdXRvLXN0YXJ0aW5nIHRoZSBzaGFyZWQgdGlja2VyLlxuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgdGlja2VyID0gUElYSS50aWNrZXIuc2hhcmVkO1xuICogLy8gU2V0IHRoaXMgdG8gcHJldmVudCBzdGFydGluZyB0aGlzIHRpY2tlciB3aGVuIGxpc3RlbmVycyBhcmUgYWRkZWQuXG4gKiAvLyBCeSBkZWZhdWx0IHRoaXMgaXMgdHJ1ZSBvbmx5IGZvciB0aGUgUElYSS50aWNrZXIuc2hhcmVkIGluc3RhbmNlLlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogLy8gRllJLCBjYWxsIHRoaXMgdG8gZW5zdXJlIHRoZSB0aWNrZXIgaXMgc3RvcHBlZC4gSXQgc2hvdWxkIGJlIHN0b3BwZWRcbiAqIC8vIGlmIHlvdSBoYXZlIG5vdCBhdHRlbXB0ZWQgdG8gcmVuZGVyIGFueXRoaW5nIHlldC5cbiAqIHRpY2tlci5zdG9wKCk7XG4gKiAvLyBDYWxsIHRoaXMgd2hlbiB5b3UgYXJlIHJlYWR5IGZvciBhIHJ1bm5pbmcgc2hhcmVkIHRpY2tlci5cbiAqIHRpY2tlci5zdGFydCgpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBZb3UgbWF5IHVzZSB0aGUgc2hhcmVkIHRpY2tlciB0byByZW5kZXIuLi5cbiAqIHZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKDgwMCwgNjAwKTtcbiAqIHZhciBzdGFnZSA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogdmFyIGludGVyYWN0aW9uTWFuYWdlciA9IFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyKTtcbiAqIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocmVuZGVyZXIudmlldyk7XG4gKiB0aWNrZXIuYWRkKGZ1bmN0aW9uICh0aW1lKSB7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBPciB5b3UgY2FuIGp1c3QgdXBkYXRlIGl0IG1hbnVhbGx5LlxuICogdGlja2VyLmF1dG9TdGFydCA9IGZhbHNlO1xuICogdGlja2VyLnN0b3AoKTtcbiAqIGZ1bmN0aW9uIGFuaW1hdGUodGltZSkge1xuICogICAgIHRpY2tlci51cGRhdGUodGltZSk7XG4gKiAgICAgcmVuZGVyZXIucmVuZGVyKHN0YWdlKTtcbiAqICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XG4gKiB9XG4gKiBhbmltYXRlKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAqXG4gKiBAdHlwZSB7UElYSS50aWNrZXIuVGlja2VyfVxuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbnZhciBzaGFyZWQgPSBuZXcgVGlja2VyKCk7XG5zaGFyZWQuYXV0b1N0YXJ0ID0gdHJ1ZTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudGlja2VyXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIHNoYXJlZDogc2hhcmVkLFxuICAgIFRpY2tlcjogVGlja2VyXG59O1xuIiwiLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuXG52YXIgR0xfTUFQID0ge307XG5cblxudmFyIGNyZWF0ZUluZGljZXNGb3JRdWFkcyA9IGZ1bmN0aW9uIChzaXplKVxue1xuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiBvdXIgYXJyYXksIHRoZXJlIGFyZSA2IHBvaW50cyBwZXIgcXVhZC5cbiAgIFxuICAgIHZhciB0b3RhbEluZGljZXMgPSBzaXplICogNjtcblxuICAgIHZhciBpbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHRvdGFsSW5kaWNlcyk7XG5cblx0Ly8gZmlsbCB0aGUgaW5kaWNlcyB3aXRoIHRoZSBxdWFkcyB0byBkcmF3XG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCB0b3RhbEluZGljZXM7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kaWNlcztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlSW5kaWNlc0ZvclF1YWRzOyIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLnV0aWxzXG4gKi9cbnZhciB1dGlscyA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgIF91aWQ6IDAsXG4gICAgX3NhaWRIZWxsbzogZmFsc2UsXG5cbiAgICBFdmVudEVtaXR0ZXI6ICAgcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIHBsdWdpblRhcmdldDogICByZXF1aXJlKCcuL3BsdWdpblRhcmdldCcpLFxuICAgIGFzeW5jOiAgICAgICAgICByZXF1aXJlKCdhc3luYycpLFxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllclxuICAgICAqXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbmV4dCB1bmlxdWUgaWRlbnRpZmllciB0byB1c2UuXG4gICAgICovXG4gICAgdWlkOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICsrdXRpbHMuX3VpZDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBoZXggY29sb3IgbnVtYmVyIHRvIGFuIFtSLCBHLCBCXSBhcnJheVxuICAgICAqXG4gICAgICogQHBhcmFtIGhleCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSAge251bWJlcltdfSBbb3V0PVtdXVxuICAgICAqIEByZXR1cm4ge251bWJlcltdfSBBbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIFtSLCBHLCBCXSBvZiB0aGUgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnJnYjogZnVuY3Rpb24gKGhleCwgb3V0KVxuICAgIHtcbiAgICAgICAgb3V0ID0gb3V0IHx8IFtdO1xuXG4gICAgICAgIG91dFswXSA9IChoZXggPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzFdID0gKGhleCA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIG91dFsyXSA9IChoZXggJiAweEZGKSAvIDI1NTtcblxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5nIGNvbG9yLlxuICAgICAqL1xuICAgIGhleDJzdHJpbmc6IGZ1bmN0aW9uIChoZXgpXG4gICAge1xuICAgICAgICBoZXggPSBoZXgudG9TdHJpbmcoMTYpO1xuICAgICAgICBoZXggPSAnMDAwMDAwJy5zdWJzdHIoMCwgNiAtIGhleC5sZW5ndGgpICsgaGV4O1xuXG4gICAgICAgIHJldHVybiAnIycgKyBoZXg7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgY29sb3IgYXMgYW4gW1IsIEcsIEJdIGFycmF5IHRvIGEgaGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIHJnYiB7bnVtYmVyW119XG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgY29sb3IgbnVtYmVyXG4gICAgICovXG4gICAgcmdiMmhleDogZnVuY3Rpb24gKHJnYilcbiAgICB7XG4gICAgICAgIHJldHVybiAoKHJnYlswXSoyNTUgPDwgMTYpICsgKHJnYlsxXSoyNTUgPDwgOCkgKyByZ2JbMl0qMjU1KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIENhbnZhcyBCbGVuZE1vZGVzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnJvd3NlclxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciB0aGV5IGFyZSBzdXBwb3J0ZWRcbiAgICAgKi9cbiAgICBjYW5Vc2VOZXdDYW52YXNCbGVuZE1vZGVzOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwbmdIZWFkID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVFBQUFBQkFRTUFBQUREOHAyT0FBQUFBMUJNVkVYLyc7XG4gICAgICAgIHZhciBwbmdFbmQgPSAnQUFBQUNrbEVRVlFJMTJOZ0FBQUFBZ0FCNGlHOE13QUFBQUJKUlU1RXJrSmdnZz09JztcblxuICAgICAgICB2YXIgbWFnZW50YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBtYWdlbnRhLnNyYyA9IHBuZ0hlYWQgKyAnQVA4MDRPYTYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciB5ZWxsb3cgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgeWVsbG93LnNyYyA9IHBuZ0hlYWQgKyAnL3dDS3h2UkYnICsgcG5nRW5kO1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY2FudmFzLndpZHRoID0gNjtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IDE7XG5cbiAgICAgICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShtYWdlbnRhLCAwLCAwKTtcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoeWVsbG93LCAyLCAwKTtcblxuICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDIsMCwxLDEpLmRhdGE7XG5cbiAgICAgICAgcmV0dXJuIChkYXRhWzBdID09PSAyNTUgJiYgZGF0YVsxXSA9PT0gMCAmJiBkYXRhWzJdID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBudW1iZXIsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgdGFrZW4gZnJvbSBTdGFybGluZyBGcmFtZXdvcmsgYXMgaXRzIHByZXR0eSBuZWF0IDspXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbnVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7bnVtYmVyfSB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIHBvd2VyIG9mIHR3b1xuICAgICAqL1xuICAgIGdldE5leHRQb3dlck9mVHdvOiBmdW5jdGlvbiAobnVtYmVyKVxuICAgIHtcbiAgICAgICAgLy8gc2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Bvd2VyX29mX3R3byNGYXN0X2FsZ29yaXRobV90b19jaGVja19pZl9hX3Bvc2l0aXZlX251bWJlcl9pc19hX3Bvd2VyX29mX3R3b1xuICAgICAgICBpZiAobnVtYmVyID4gMCAmJiAobnVtYmVyICYgKG51bWJlciAtIDEpKSA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSAxO1xuXG4gICAgICAgICAgICB3aGlsZSAocmVzdWx0IDwgbnVtYmVyKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA8PD0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBjaGVja3MgaWYgdGhlIGdpdmVuIHdpZHRoIGFuZCBoZWlnaHQgbWFrZSBhIHBvd2VyIG9mIHR3byByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfVxuICAgICAqIEBwYXJhbSBoZWlnaHQge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzUG93ZXJPZlR3bzogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm4gKHdpZHRoID4gMCAmJiAod2lkdGggJiAod2lkdGggLSAxKSkgPT09IDAgJiYgaGVpZ2h0ID4gMCAmJiAoaGVpZ2h0ICYgKGhlaWdodCAtIDEpKSA9PT0gMCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGdldCB0aGUgcmVzb2x1dGlvbiBvZiBhbiBhc3NldCBieSBsb29raW5nIGZvciB0aGUgcHJlZml4XG4gICAgICogdXNlZCBieSBzcHJpdGVzaGVldHMgYW5kIGltYWdlIHVybHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwge3N0cmluZ30gdGhlIGltYWdlIHBhdGhcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0UmVzb2x1dGlvbk9mVXJsOiBmdW5jdGlvbiAodXJsKVxuICAgIHtcbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBDT05TVC5SRVRJTkFfUFJFRklYLmV4ZWModXJsKTtcblxuICAgICAgICBpZiAocmVzb2x1dGlvbilcbiAgICAgICAge1xuICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChyZXNvbHV0aW9uWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAxO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBMb2dzIG91dCB0aGUgdmVyc2lvbiBhbmQgcmVuZGVyZXIgaW5mb3JtYXRpb24gZm9yIHRoaXMgcnVubmluZyBpbnN0YW5jZSBvZiBQSVhJLlxuICAgICAqIElmIHlvdSBkb24ndCB3YW50IHRvIHNlZSB0aGlzIG1lc3NhZ2UgeW91IGNhbiBzZXQgYFBJWEkudXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7YFxuICAgICAqIHNvIHRoZSBsaWJyYXJ5IHRoaW5rcyBpdCBhbHJlYWR5IHNhaWQgaXQuIEtlZXAgaW4gbWluZCB0aGF0IGRvaW5nIHRoYXQgd2lsbCBmb3JldmVyXG4gICAgICogbWFrZXMgeW91IGEgamVyayBmYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBUaGUgc3RyaW5nIHJlbmRlcmVyIHR5cGUgdG8gbG9nLlxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBzYXlIZWxsbzogZnVuY3Rpb24gKHR5cGUpXG4gICAge1xuICAgICAgICBpZiAodXRpbHMuX3NhaWRIZWxsbylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjaHJvbWUnKSA+IC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtcbiAgICAgICAgICAgICAgICAnXFxuICVjICVjICVjIFBpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0g4pywICcgKyB0eXBlICsgJyDinLAgICVjICcgKyAnICVjICcgKyAnIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8gICVjICVjIOKZpSVj4pmlJWPimaUgXFxuXFxuJyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmY2NmE1OyBiYWNrZ3JvdW5kOiAjMDMwMzA3OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmYzNkYzsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2NvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOydcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBhcmdzKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3aW5kb3cuY29uc29sZSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nKCdQaXhpLmpzICcgKyBDT05TVC5WRVJTSU9OICsgJyAtICcgKyB0eXBlICsgJyAtIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8nKTsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgfVxuXG4gICAgICAgIHV0aWxzLl9zYWlkSGVsbG8gPSB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgZm9yIGNoZWNraW5nIGZvciB3ZWJnbCBzdXBwb3J0XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzV2ViR0xTdXBwb3J0ZWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB2YXIgY29udGV4dE9wdGlvbnMgPSB7IHN0ZW5jaWw6IHRydWUgfTtcbiAgICAgICAgdHJ5XG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghd2luZG93LldlYkdMUmVuZGVyaW5nQ29udGV4dClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSxcbiAgICAgICAgICAgICAgICBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIGNvbnRleHRPcHRpb25zKSB8fCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgY29udGV4dE9wdGlvbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gISEoZ2wgJiYgZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5zdGVuY2lsKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgc2lnbiBvZiBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBuIHtudW1iZXJ9XG4gICAgICogQHJldHVybnMge251bWJlcn0gMCBpZiBuIGlzIDAsIC0xIGlmIG4gaXMgbmVnYXRpdmUsIDEgaWYgbiBpIHBvc2l0aXZlXG4gICAgICovXG4gICAgc2lnbjogZnVuY3Rpb24gKG4pXG4gICAge1xuICAgICAgICByZXR1cm4gbiA/IChuIDwgMCA/IC0xIDogMSkgOiAwO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZW1vdmVJdGVtc1xuICAgICAqXG4gICAgICogQHBhcmFtIHthcnJheX0gYXJyIFRoZSB0YXJnZXQgYXJyYXlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRJZHggVGhlIGluZGV4IHRvIGJlZ2luIHJlbW92aW5nIGZyb20gKGluY2x1c2l2ZSlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmVtb3ZlQ291bnQgSG93IG1hbnkgaXRlbXMgdG8gcmVtb3ZlXG4gICAgICovXG4gICAgcmVtb3ZlSXRlbXM6IGZ1bmN0aW9uIChhcnIsIHN0YXJ0SWR4LCByZW1vdmVDb3VudClcbiAgICB7XG4gICAgICAgIHZhciBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIGlmIChzdGFydElkeCA+PSBsZW5ndGggfHwgcmVtb3ZlQ291bnQgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbW92ZUNvdW50ID0gKHN0YXJ0SWR4K3JlbW92ZUNvdW50ID4gbGVuZ3RoID8gbGVuZ3RoLXN0YXJ0SWR4IDogcmVtb3ZlQ291bnQpO1xuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJZHgsIGxlbiA9IGxlbmd0aC1yZW1vdmVDb3VudDsgaSA8IGxlbjsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBhcnJbaV0gPSBhcnJbaSArIHJlbW92ZUNvdW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyci5sZW5ndGggPSBsZW47XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIERlc2NyaWJlIHByb3BlcnR5IHVzYWdlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBUZXh0dXJlQ2FjaGU6IHt9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHt9XG59O1xuIiwiLyoqXG4gKiBNaXhpbnMgZnVuY3Rpb25hbGl0eSB0byBtYWtlIGFuIG9iamVjdCBoYXZlIFwicGx1Z2luc1wiLlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkudXRpbHNcbiAqIEBwYXJhbSBvYmoge29iamVjdH0gVGhlIG9iamVjdCB0byBtaXggaW50by5cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIHBsdWdpblRhcmdldC5taXhpbihNeU9iamVjdCk7XG4gKi9cbmZ1bmN0aW9uIHBsdWdpblRhcmdldChvYmopXG57XG4gICAgb2JqLl9fcGx1Z2lucyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHBsdWdpbiB0byBhbiBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwbHVnaW5OYW1lIHtzdHJpbmd9IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICAgICAqIEBwYXJhbSBjdG9yIHtGdW5jdGlvbn0gVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciB0aGUgcGx1Z2luLlxuICAgICAqL1xuICAgIG9iai5yZWdpc3RlclBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW5OYW1lLCBjdG9yKVxuICAgIHtcbiAgICAgICAgb2JqLl9fcGx1Z2luc1twbHVnaW5OYW1lXSA9IGN0b3I7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlcyBhbGwgdGhlIHBsdWdpbnMgb2YgdGhpcyBvYmplY3RcbiAgICAgKlxuICAgICAqL1xuICAgIG9iai5wcm90b3R5cGUuaW5pdFBsdWdpbnMgPSBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zID0gdGhpcy5wbHVnaW5zIHx8IHt9O1xuXG4gICAgICAgIGZvciAodmFyIG8gaW4gb2JqLl9fcGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbmV3IChvYmouX19wbHVnaW5zW29dKSh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5kZXN0cm95UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBvIGluIHRoaXMucGx1Z2lucylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBsdWdpbnMgPSBudWxsO1xuICAgIH07XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLyoqXG4gICAgICogTWl4ZXMgaW4gdGhlIHByb3BlcnRpZXMgb2YgdGhlIHBsdWdpblRhcmdldCBpbnRvIGFub3RoZXIgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0IHtvYmplY3R9IFRoZSBvYmogdG8gbWl4IGludG9cbiAgICAgKi9cbiAgICBtaXhpbjogZnVuY3Rpb24gbWl4aW4ob2JqKVxuICAgIHtcbiAgICAgICAgcGx1Z2luVGFyZ2V0KG9iaik7XG4gICAgfVxufTtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciBjb3JlID0gcmVxdWlyZSgnLi9jb3JlJyksXG4gICAgbWVzaCA9IHJlcXVpcmUoJy4vbWVzaCcpLFxuICAgIGV4dHJhcyA9IHJlcXVpcmUoJy4vZXh0cmFzJyksXG4gICAgZmlsdGVycyA9IHJlcXVpcmUoJy4vZmlsdGVycycpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIFNwcml0ZUJhdGNoXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLlBhcnRpY2xlQ29udGFpbmVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlNwcml0ZUJhdGNoID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignU3ByaXRlQmF0Y2ggZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHBsZWFzZSB1c2UgdGhlIG5ldyBQYXJ0aWNsZUNvbnRhaW5lciBpbnN0ZWFkLicpO1xufTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBBc3NldExvYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBzZWUgUElYSS5sb2FkZXJzLkxvYWRlclxuICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IFRoZSBsb2FkZXIgc3lzdGVtIHdhcyBvdmVyaGF1bGVkIGluIHBpeGkgdjMsIHBsZWFzZSBzZWUgdGhlIG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyIGNsYXNzLlxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLkFzc2V0TG9hZGVyID0gZnVuY3Rpb24oKVxue1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuJyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb3JlLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFN0YWdlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQ29udGFpbmVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFN0YWdlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1lvdSBkbyBub3QgbmVlZCB0byB1c2UgYSBQSVhJIFN0YWdlIGFueSBtb3JlLCB5b3UgY2FuIHNpbXBseSByZW5kZXIgYW55IGNvbnRhaW5lci4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIERpc3BsYXlPYmplY3RDb250YWluZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgRGlzcGxheU9iamVjdENvbnRhaW5lcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEaXNwbGF5T2JqZWN0Q29udGFpbmVyIGhhcyBiZWVuIHNob3J0ZW5lZCB0byBDb250YWluZXIsIHBsZWFzZSB1c2UgQ29udGFpbmVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RyaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2hcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RyaXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFN0cmlwIGNsYXNzIGhhcyBiZWVuIHJlbmFtZWQgdG8gTWVzaCBhbmQgbW92ZWQgdG8gbWVzaC5NZXNoLCBwbGVhc2UgdXNlIG1lc2guTWVzaCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLk1lc2g7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBSb3BlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkubWVzaC5Sb3BlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFJvcGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFJvcGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gbWVzaC5Sb3BlLCBwbGVhc2UgdXNlIG1lc2guUm9wZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNoLlJvcGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBNb3ZpZUNsaXBcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuTW92aWVDbGlwXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIE1vdmllQ2xpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgTW92aWVDbGlwIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5Nb3ZpZUNsaXAsIHBsZWFzZSB1c2UgZXh0cmFzLk1vdmllQ2xpcCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuTW92aWVDbGlwO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGlsaW5nU3ByaXRlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBUaWxpbmdTcHJpdGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRpbGluZ1Nwcml0ZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuVGlsaW5nU3ByaXRlLCBwbGVhc2UgdXNlIGV4dHJhcy5UaWxpbmdTcHJpdGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLlRpbGluZ1Nwcml0ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJpdG1hcFRleHRcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCaXRtYXBUZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCaXRtYXBUZXh0IGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5CaXRtYXBUZXh0LCBwbGVhc2UgdXNlIGV4dHJhcy5CaXRtYXBUZXh0IGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5CaXRtYXBUZXh0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgYmxlbmRNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIGJsZW5kTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGJsZW5kTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gQkxFTkRfTU9ERVMsIHBsZWFzZSB1c2UgQkxFTkRfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5CTEVORF9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNjYWxlTW9kZXNcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBzY2FsZU1vZGVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBzY2FsZU1vZGVzIGhhcyBiZWVuIG1vdmVkIHRvIFNDQUxFX01PREVTLCBwbGVhc2UgdXNlIFNDQUxFX01PREVTIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU0NBTEVfTU9ERVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBCYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuQmFzZVRleHR1cmVDYWNoZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBCYXNlVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgQmFzZVRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5CYXNlVGV4dHVyZUNhY2hlLCBwbGVhc2UgdXNlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgVGV4dHVyZUNhY2hlXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkudXRpbHMuVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIFRleHR1cmVDYWNoZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byB1dGlscy5UZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuVGV4dHVyZUNhY2hlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIG1hdGhcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBtYXRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgbWF0aCBuYW1lc3BhY2UgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIGFjY2VzcyBtZW1iZXJzIGFscmVhZHkgYWNjZXNzaWJsZSBvbiBQSVhJLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgUElYSS5TcHJpdGUjc2V0VGV4dHVyZVxuICogQHNlZSBQSVhJLlNwcml0ZSN0ZXh0dXJlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlLnByb3RvdHlwZS5zZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dHVyZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dHVyZSBwcm9wZXJ0eSwgZS5nIDogc3ByaXRlLnRleHR1cmUgPSB0ZXh0dXJlOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3NldFRleHRcbiAqIEBzZWUgUElYSS5leHRyYXMuQml0bWFwVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmV4dHJhcy5CaXRtYXBUZXh0LnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dClcbntcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dCBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dCBwcm9wZXJ0eSwgZS5nIDogbXlCaXRtYXBUZXh0LnRleHQgPSBcXCdteSB0ZXh0XFwnOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLlRleHQjdGV4dFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteVRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRTdHlsZVxuICogQHNlZSBQSVhJLlRleHQjc3R5bGVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0LnByb3RvdHlwZS5zZXRTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlKVxue1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldFN0eWxlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBzdHlsZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0LnN0eWxlID0gc3R5bGU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQHNlZSBQSVhJLlRleHR1cmUjc2V0RnJhbWVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0dXJlLnByb3RvdHlwZS5zZXRGcmFtZSA9IGZ1bmN0aW9uKGZyYW1lKVxue1xuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldEZyYW1lIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBmcmFtZSBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0dXJlLmZyYW1lID0gZnJhbWU7Jyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhmaWx0ZXJzLCB7XG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBzZWUgUElYSS5BYnN0cmFjdEZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBBYnN0cmFjdEZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLkFic3RyYWN0RmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBBYnN0cmFjdEZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkFic3RyYWN0RmlsdGVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkZYQUFGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuRlhBQUZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBGWEFBRmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuRlhBQUZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgRlhBQUZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkZYQUFGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuU3ByaXRlTWFza0ZpbHRlclxuICAgICAqIEBzZWUgUElYSS5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIFNwcml0ZU1hc2tGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBTcHJpdGVNYXNrRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuU3ByaXRlTWFza0ZpbHRlcjtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkudXRpbHMudXVpZFxuICogQHNlZSBQSVhJLnV0aWxzLnVpZFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICovXG5jb3JlLnV0aWxzLnV1aWQgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvbnNvbGUud2FybigndXRpbHMudXVpZCgpIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdXRpbHMudWlkKCkgZnJvbSBub3cgb24uJyk7XG4gICAgcmV0dXJuIGNvcmUudXRpbHMudWlkKCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogQSBCaXRtYXBUZXh0IG9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dCB1c2luZyBiaXRtYXAgZm9udC4gVG9cbiAqIHNwbGl0IGEgbGluZSB5b3UgY2FuIHVzZSAnXFxuJywgJ1xccicgb3IgJ1xcclxcbicgaW4geW91ciBzdHJpbmcuIFlvdSBjYW4gZ2VuZXJhdGUgdGhlIGZudCBmaWxlcyB1c2luZzpcbiAqXG4gKiBBIEJpdG1hcFRleHQgY2FuIG9ubHkgYmUgY3JlYXRlZCB3aGVuIHRoZSBmb250IGlzIGxvYWRlZFxuICpcbiAqIGBgYGpzXG4gKiAvLyBpbiB0aGlzIGNhc2UgdGhlIGZvbnQgaXMgaW4gYSBmaWxlIGNhbGxlZCAnZGVzeXJlbC5mbnQnXG4gKiB2YXIgYml0bWFwVGV4dCA9IG5ldyBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0KFwidGV4dCB1c2luZyBhIGZhbmN5IGZvbnQhXCIsIHtmb250OiBcIjM1cHggRGVzeXJlbFwiLCBhbGlnbjogXCJyaWdodFwifSk7XG4gKiBgYGBcbiAqXG4gKlxuICogaHR0cDovL3d3dy5hbmdlbGNvZGUuY29tL3Byb2R1Y3RzL2JtZm9udC8gZm9yIHdpbmRvd3Mgb3JcbiAqIGh0dHA6Ly93d3cuYm1nbHlwaC5jb20vIGZvciBtYWMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSBzdHlsZSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIHN0eWxlLmZvbnQge3N0cmluZ3xvYmplY3R9IFRoZSBmb250IGRlc2NyaXB0b3IgZm9yIHRoZSBvYmplY3QsIGNhbiBiZSBwYXNzZWQgYXMgYSBzdHJpbmcgb2YgZm9ybVxuICogICAgICBcIjI0cHggRm9udE5hbWVcIiBvciBcIkZvbnROYW1lXCIgb3IgYXMgYW4gb2JqZWN0IHdpdGggZXhwbGljaXQgbmFtZS9zaXplIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQubmFtZV0ge3N0cmluZ30gVGhlIGJpdG1hcCBmb250IGlkXG4gKiBAcGFyYW0gW3N0eWxlLmZvbnQuc2l6ZV0ge251bWJlcn0gVGhlIHNpemUgb2YgdGhlIGZvbnQgaW4gcGl4ZWxzLCBlLmcuIDI0XG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0XG4gKiAgICAgIHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUudGludD0weEZGRkZGRl0ge251bWJlcn0gVGhlIHRpbnQgY29sb3JcbiAqL1xuZnVuY3Rpb24gQml0bWFwVGV4dCh0ZXh0LCBzdHlsZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgb3ZlcmFsbCB0ZXh0LCBkaWZmZXJlbnQgZnJvbSBmb250U2l6ZSxcbiAgICAgKiB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBzdHlsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRleHRXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dEhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBsZXR0ZXIgc3ByaXRlIHBvb2wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZ2x5cGhzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZm9udCA9IHtcbiAgICAgICAgdGludDogc3R5bGUudGludCAhPT0gdW5kZWZpbmVkID8gc3R5bGUudGludCA6IDB4RkZGRkZGLFxuICAgICAgICBhbGlnbjogc3R5bGUuYWxpZ24gfHwgJ2xlZnQnLFxuICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICBzaXplOiAwXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgZm9udC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZm9udCA9IHN0eWxlLmZvbnQ7IC8vIHJ1biBmb250IHNldHRlclxuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCB0ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dCA9IHRleHQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IHdpZHRoIG9mIHRoaXMgYml0bWFwIHRleHQgaW4gcGl4ZWxzLiBJZiB0aGUgdGV4dCBwcm92aWRlZCBpcyBsb25nZXIgdGhhbiB0aGUgdmFsdWUgcHJvdmlkZWQsIGxpbmUgYnJlYWtzIHdpbGwgYmUgYXV0b21hdGljYWxseSBpbnNlcnRlZCBpbiB0aGUgbGFzdCB3aGl0ZXNwYWNlLlxuICAgICAqIERpc2FibGUgYnkgc2V0dGluZyB2YWx1ZSB0byAwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4IGxpbmUgaGVpZ2h0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRyeWluZyB0byB1c2UgdGhlIHRvdGFsIGhlaWdodCBvZiB0aGUgVGV4dCwgaWU6IHdoZW4gdHJ5aW5nIHRvIHZlcnRpY2FsbHkgYWxpZ24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkaXJ0eSBzdGF0ZSBvZiB0aGlzIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy51cGRhdGVUZXh0KCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5CaXRtYXBUZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5Db250YWluZXIucHJvdG90eXBlKTtcbkJpdG1hcFRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQml0bWFwVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gQml0bWFwVGV4dDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQml0bWFwVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGludCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0aW50OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQudGludDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQudGludCA9ICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlID49IDApID8gdmFsdWUgOiAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFsaWdubWVudCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbGVmdCdcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBhbGlnbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250LmFsaWduO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC5hbGlnbiA9IHZhbHVlIHx8ICdsZWZ0JztcblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZvbnQgZGVzY3JpcHRvciBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0ZvbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgZm9udDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcgJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9mb250Lm5hbWUgPSB2YWx1ZS5sZW5ndGggPT09IDEgPyB2YWx1ZVswXSA6IHZhbHVlLnNsaWNlKDEpLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB2YWx1ZS5sZW5ndGggPj0gMiA/IHBhcnNlSW50KHZhbHVlWzBdLCAxMCkgOiBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV0uc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5zaXplID0gdHlwZW9mIHZhbHVlLnNpemUgPT09ICdudW1iZXInID8gdmFsdWUuc2l6ZSA6IHBhcnNlSW50KHZhbHVlLnNpemUsIDEwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgdGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGV4dCBhbmQgdXBkYXRlcyBpdCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkYXRhID0gQml0bWFwVGV4dC5mb250c1t0aGlzLl9mb250Lm5hbWVdO1xuICAgIHZhciBwb3MgPSBuZXcgY29yZS5Qb2ludCgpO1xuICAgIHZhciBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgIHZhciBjaGFycyA9IFtdO1xuICAgIHZhciBsYXN0TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcbiAgICB2YXIgbGluZVdpZHRocyA9IFtdO1xuICAgIHZhciBsaW5lID0gMDtcbiAgICB2YXIgc2NhbGUgPSB0aGlzLl9mb250LnNpemUgLyBkYXRhLnNpemU7XG4gICAgdmFyIGxhc3RTcGFjZSA9IC0xO1xuICAgIHZhciBtYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0Lmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gdGhpcy50ZXh0LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGxhc3RTcGFjZSA9IC8oXFxzKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSA/IGkgOiBsYXN0U3BhY2U7XG5cbiAgICAgICAgaWYgKC8oPzpcXHJcXG58XFxyfFxcbikvLnRlc3QodGhpcy50ZXh0LmNoYXJBdChpKSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXN0U3BhY2UgIT09IC0xICYmIHRoaXMubWF4V2lkdGggPiAwICYmIHBvcy54ICogc2NhbGUgPiB0aGlzLm1heFdpZHRoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKGNoYXJzLCBsYXN0U3BhY2UsIGkgLSBsYXN0U3BhY2UpO1xuICAgICAgICAgICAgaSA9IGxhc3RTcGFjZTtcbiAgICAgICAgICAgIGxhc3RTcGFjZSA9IC0xO1xuXG4gICAgICAgICAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbGluZSsrO1xuXG4gICAgICAgICAgICBwb3MueCA9IDA7XG4gICAgICAgICAgICBwb3MueSArPSBkYXRhLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hhckRhdGEgPSBkYXRhLmNoYXJzW2NoYXJDb2RlXTtcblxuICAgICAgICBpZiAoIWNoYXJEYXRhKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmV2Q2hhckNvZGUgJiYgY2hhckRhdGEua2VybmluZ1twcmV2Q2hhckNvZGVdKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb3MueCArPSBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV07XG4gICAgICAgIH1cblxuICAgICAgICBjaGFycy5wdXNoKHt0ZXh0dXJlOmNoYXJEYXRhLnRleHR1cmUsIGxpbmU6IGxpbmUsIGNoYXJDb2RlOiBjaGFyQ29kZSwgcG9zaXRpb246IG5ldyBjb3JlLlBvaW50KHBvcy54ICsgY2hhckRhdGEueE9mZnNldCwgcG9zLnkgKyBjaGFyRGF0YS55T2Zmc2V0KX0pO1xuICAgICAgICBsYXN0TGluZVdpZHRoID0gcG9zLnggKyAoY2hhckRhdGEudGV4dHVyZS53aWR0aCArIGNoYXJEYXRhLnhPZmZzZXQpO1xuICAgICAgICBwb3MueCArPSBjaGFyRGF0YS54QWR2YW5jZTtcbiAgICAgICAgbWF4TGluZUhlaWdodCA9IE1hdGgubWF4KG1heExpbmVIZWlnaHQsIChjaGFyRGF0YS55T2Zmc2V0ICsgY2hhckRhdGEudGV4dHVyZS5oZWlnaHQpKTtcbiAgICAgICAgcHJldkNoYXJDb2RlID0gY2hhckNvZGU7XG4gICAgfVxuXG4gICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG5cbiAgICB2YXIgbGluZUFsaWduT2Zmc2V0cyA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8PSBsaW5lOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYWxpZ25PZmZzZXQgPSAwO1xuXG4gICAgICAgIGlmICh0aGlzLl9mb250LmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbGlnbk9mZnNldCA9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5fZm9udC5hbGlnbiA9PT0gJ2NlbnRlcicpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpbmVBbGlnbk9mZnNldHMucHVzaChhbGlnbk9mZnNldCk7XG4gICAgfVxuXG4gICAgdmFyIGxlbkNoYXJzID0gY2hhcnMubGVuZ3RoO1xuICAgIHZhciB0aW50ID0gdGhpcy50aW50O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbkNoYXJzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYyA9IHRoaXMuX2dseXBoc1tpXTsgLy8gZ2V0IHRoZSBuZXh0IGdseXBoIHNwcml0ZVxuXG4gICAgICAgIGlmIChjKVxuICAgICAgICB7XG4gICAgICAgICAgICBjLnRleHR1cmUgPSBjaGFyc1tpXS50ZXh0dXJlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgYyA9IG5ldyBjb3JlLlNwcml0ZShjaGFyc1tpXS50ZXh0dXJlKTtcbiAgICAgICAgICAgIHRoaXMuX2dseXBocy5wdXNoKGMpO1xuICAgICAgICB9XG5cbiAgICAgICAgYy5wb3NpdGlvbi54ID0gKGNoYXJzW2ldLnBvc2l0aW9uLnggKyBsaW5lQWxpZ25PZmZzZXRzW2NoYXJzW2ldLmxpbmVdKSAqIHNjYWxlO1xuICAgICAgICBjLnBvc2l0aW9uLnkgPSBjaGFyc1tpXS5wb3NpdGlvbi55ICogc2NhbGU7XG4gICAgICAgIGMuc2NhbGUueCA9IGMuc2NhbGUueSA9IHNjYWxlO1xuICAgICAgICBjLnRpbnQgPSB0aW50O1xuXG4gICAgICAgIGlmICghYy5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoYyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZW1vdmUgdW5uZWNlc3NhcnkgY2hpbGRyZW4uXG4gICAgZm9yIChpID0gbGVuQ2hhcnM7IGkgPCB0aGlzLl9nbHlwaHMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKHRoaXMuX2dseXBoc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0V2lkdGggPSBtYXhMaW5lV2lkdGggKiBzY2FsZTtcbiAgICB0aGlzLnRleHRIZWlnaHQgPSAocG9zLnkgKyBkYXRhLmxpbmVIZWlnaHQpICogc2NhbGU7XG4gICAgdGhpcy5tYXhMaW5lSGVpZ2h0ID0gbWF4TGluZUhlaWdodCAqIHNjYWxlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb2YgdGhpcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGV4dCBiZWZvcmUgY2FsbGluZyBwYXJlbnQncyBnZXRMb2NhbEJvdW5kc1xuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5cbkJpdG1hcFRleHQucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICByZXR1cm4gY29yZS5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzLmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGV4dCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59O1xuXG5CaXRtYXBUZXh0LmZvbnRzID0ge307XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIE1vdmllQ2xpcCBpcyBhIHNpbXBsZSB3YXkgdG8gZGlzcGxheSBhbiBhbmltYXRpb24gZGVwaWN0ZWQgYnkgYSBsaXN0IG9mIHRleHR1cmVzLlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgYWxpZW5JbWFnZXMgPSBbXCJpbWFnZV9zZXF1ZW5jZV8wMS5wbmdcIixcImltYWdlX3NlcXVlbmNlXzAyLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDMucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wNC5wbmdcIl07XG4gKiB2YXIgdGV4dHVyZUFycmF5ID0gW107XG4gKlxuICogZm9yICh2YXIgaT0wOyBpIDwgNDsgaSsrKVxuICoge1xuICogICAgICB2YXIgdGV4dHVyZSA9IFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoYWxpZW5JbWFnZXNbaV0pO1xuICogICAgICB0ZXh0dXJlQXJyYXkucHVzaCh0ZXh0dXJlKTtcbiAqIH07XG4gKlxuICogdmFyIG1jID0gbmV3IFBJWEkuTW92aWVDbGlwKHRleHR1cmVBcnJheSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0dXJlcyB7UElYSS5UZXh0dXJlW118T2JqZWN0W119IGFuIGFycmF5IG9mIHtAbGluayBQSVhJLlRleHR1cmV9IG9yIGZyYW1lIG9iamVjdHMgdGhhdCBtYWtlIHVwIHRoZSBhbmltYXRpb25cbiAqIEBwYXJhbSB0ZXh0dXJlc1tdLnRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHtAbGluayBQSVhJLlRleHR1cmV9IG9mIHRoZSBmcmFtZVxuICogQHBhcmFtIHRleHR1cmVzW10udGltZSB7bnVtYmVyfSB0aGUgZHVyYXRpb24gb2YgdGhlIGZyYW1lIGluIG1zXG4gKi9cbmZ1bmN0aW9uIE1vdmllQ2xpcCh0ZXh0dXJlcylcbntcbiAgICBjb3JlLlNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmVzWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlID8gdGV4dHVyZXNbMF0gOiB0ZXh0dXJlc1swXS50ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kdXJhdGlvbnMgPSBudWxsO1xuXG4gICAgdGhpcy50ZXh0dXJlcyA9IHRleHR1cmVzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNwZWVkIHRoYXQgdGhlIE1vdmllQ2xpcCB3aWxsIHBsYXkgYXQuIEhpZ2hlciBpcyBmYXN0ZXIsIGxvd2VyIGlzIHNsb3dlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmFuaW1hdGlvblNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBtb3ZpZSBjbGlwIHJlcGVhdHMgYWZ0ZXIgcGxheWluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMubG9vcCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gYSBNb3ZpZUNsaXAgZmluaXNoZXMgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICovXG4gICAgdGhpcy5vbkNvbXBsZXRlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEVsYXBzZWQgdGltZSBzaW5jZSBhbmltYXRpb24gaGFzIGJlZW4gc3RhcnRlZCwgdXNlZCBpbnRlcm5hbGx5IHRvIGRpc3BsYXkgY3VycmVudCB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIE1vdmllQ2xpcCBpcyBjdXJyZW50bHkgcGxheWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1vdmllQ2xpcC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5Nb3ZpZUNsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTW92aWVDbGlwO1xubW9kdWxlLmV4cG9ydHMgPSBNb3ZpZUNsaXA7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1vdmllQ2xpcC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiB0b3RhbEZyYW1lcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIGZyYW1lcyBpbiB0aGUgTW92aWVDbGlwLiBUaGlzIGlzIHRoZSBzYW1lIGFzIG51bWJlciBvZiB0ZXh0dXJlc1xuICAgICAqIGFzc2lnbmVkIHRvIHRoZSBNb3ZpZUNsaXAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdG90YWxGcmFtZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIHRleHR1cmVzIHVzZWQgZm9yIHRoaXMgTW92aWVDbGlwXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqXG4gICAgICovXG4gICAgdGV4dHVyZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZih2YWx1ZVswXSBpbnN0YW5jZW9mIGNvcmUuVGV4dHVyZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcy5wdXNoKHZhbHVlW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMucHVzaCh2YWx1ZVtpXS50aW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgKiBUaGUgTW92aWVDbGlwcyBjdXJyZW50IGZyYW1lIGluZGV4XG4gICAgKlxuICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAqIEByZWFkb25seVxuICAgICovXG4gICAgY3VycmVudEZyYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRGcmFtZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpICUgdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRGcmFtZSA8IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY3VycmVudEZyYW1lICs9IHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RnJhbWU7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKipcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYoIXRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogUGxheXMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZih0aGlzLnBsYXlpbmcpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5aW5nID0gdHJ1ZTtcbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZ29lcyB0byBhIHNwZWNpZmljIGZyYW1lXG4gKlxuICogQHBhcmFtIGZyYW1lTnVtYmVyIHtudW1iZXJ9IGZyYW1lIGluZGV4IHRvIHN0b3AgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kU3RvcCA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLnN0b3AoKTtcblxuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbdGhpcy5jdXJyZW50RnJhbWVdO1xufTtcblxuLyoqXG4gKiBHb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWUgYW5kIGJlZ2lucyBwbGF5aW5nIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RhcnQgYXRcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5nb3RvQW5kUGxheSA9IGZ1bmN0aW9uIChmcmFtZU51bWJlcilcbntcbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IGZyYW1lTnVtYmVyO1xuXG4gICAgdGhpcy5wbGF5KCk7XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKiBAcHJpdmF0ZVxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWQgPSB0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2R1cmF0aW9ucyAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIHZhciBsYWcgPSB0aGlzLl9jdXJyZW50VGltZSAlIDEgKiB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuXG4gICAgICAgIGxhZyArPSBlbGFwc2VkIC8gNjAgKiAxMDAwO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPCAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZS0tO1xuICAgICAgICAgICAgbGFnICs9IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2lnbiA9IE1hdGguc2lnbih0aGlzLmFuaW1hdGlvblNwZWVkICogZGVsdGFUaW1lKTtcbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgPSBNYXRoLmZsb29yKHRoaXMuX2N1cnJlbnRUaW1lKTtcblxuICAgICAgICB3aGlsZSAobGFnID49IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhZyAtPSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdICogc2lnbjtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IHNpZ247XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBsYWcgLyB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBlbGFwc2VkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jdXJyZW50VGltZSA8IDAgJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AoMCk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5fY3VycmVudFRpbWUgPj0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoICYmICF0aGlzLmxvb3ApXG4gICAge1xuICAgICAgICB0aGlzLmdvdG9BbmRTdG9wKHRoaXMuX3RleHR1cmVzLmxlbmd0aCAtIDEpO1xuXG4gICAgICAgIGlmICh0aGlzLm9uQ29tcGxldGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuXG59O1xuXG4vKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcCBhbmQgZGVzdHJveXMgaXRcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICggKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuICAgIGNvcmUuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIEEgc2hvcnQgaGFuZCB3YXkgb2YgY3JlYXRpbmcgYSBtb3ZpZWNsaXAgZnJvbSBhbiBhcnJheSBvZiBmcmFtZSBpZHNcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVzIHtzdHJpbmdbXX0gdGhlIGFycmF5IG9mIGZyYW1lcyBpZHMgdGhlIG1vdmllY2xpcCB3aWxsIHVzZSBhcyBpdHMgdGV4dHVyZSBmcmFtZXNcbiAqL1xuTW92aWVDbGlwLmZyb21GcmFtZXMgPSBmdW5jdGlvbiAoZnJhbWVzKVxue1xuICAgIHZhciB0ZXh0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0ZXh0dXJlcy5wdXNoKG5ldyBjb3JlLlRleHR1cmUuZnJvbUZyYW1lKGZyYW1lc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW92aWVDbGlwKHRleHR1cmVzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGltYWdlIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgaW1hZ2UgdXJscyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUltYWdlcyA9IGZ1bmN0aW9uIChpbWFnZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTsiLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICAvLyBhIHNwcml0ZSB1c2UgZGZvciByZW5kZXJpbmcgdGV4dHVyZXMuLlxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc1RpbnRlcicpO1xuXG4vKipcbiAqIEEgdGlsaW5nIHNwcml0ZSBpcyBhIGZhc3Qgd2F5IG9mIHJlbmRlcmluZyBhIHRpbGluZyBpbWFnZVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmUge1RleHR1cmV9IHRoZSB0ZXh0dXJlIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFRpbGluZ1Nwcml0ZSh0ZXh0dXJlLCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGluZyBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVTY2FsZSA9IG5ldyBjb3JlLlBvaW50KDEsMSk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgcG9zaXRpb24gb2YgdGhlIGltYWdlIHRoYXQgaXMgYmVpbmcgdGlsZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBuZXcgY29yZS5Qb2ludCgwLDApO1xuXG4gICAgLy8vLy8gcHJpdmF0ZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHdpdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gd2lkdGggfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0IHx8IDEwMDtcblxuICAgIC8qKlxuICAgICAqIEFuIGludGVybmFsIFdlYkdMIFVWIGNhY2hlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlVXZzfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdXZzID0gbmV3IGNvcmUuVGV4dHVyZVV2cygpO1xuXG4gICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IG51bGw7XG5cbiAgICAvL1RPRE8gbW92ZS4uXG4gICAgdGhpcy5zaGFkZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcihcblxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1VHJhbnNmb3JtOycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJyAgIGNvb3JkIC09IHVUcmFuc2Zvcm0ueHk7JyxcbiAgICAgICAgJyAgIGNvb3JkIC89IHVUcmFuc2Zvcm0uenc7JyxcbiAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBjb29yZDsnLFxuXG4gICAgICAgICcgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpOycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgIFtcbiAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdUZyYW1lOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzIgdVBpeGVsU2l6ZTsnLFxuXG4gICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcblxuICAgICAgICAnICAgdmVjMiBjb29yZCA9IG1vZCh2VGV4dHVyZUNvb3JkLCB1RnJhbWUuencpOycsXG4gICAgICAgICcgICBjb29yZCA9IGNsYW1wKGNvb3JkLCB1UGl4ZWxTaXplLCB1RnJhbWUuencgLSB1UGl4ZWxTaXplKTsnLFxuICAgICAgICAnICAgY29vcmQgKz0gdUZyYW1lLnh5OycsXG5cbiAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9ICB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdUZyYW1lOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVRyYW5zZm9ybTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLDAsMSwxXSB9LFxuICAgICAgICAgICAgICAgIHVQaXhlbFNpemUgOiB7IHR5cGUgOiAnMmZ2JywgdmFsdWU6IFsxLCAxXX1cbiAgICAgICAgICAgIH1cbiAgICAgICk7XG59XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU3ByaXRlLnByb3RvdHlwZSk7XG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsaW5nU3ByaXRlO1xubW9kdWxlLmV4cG9ydHMgPSBUaWxpbmdTcHJpdGU7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsaW5nU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRpbGluZ1Nwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybjtcbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICAvLyB0d2VhayBvdXIgdGV4dHVyZSB0ZW1wb3JhcmlseS4uXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUgfHwgIXRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGVtcFV2cyA9IHRleHR1cmUuX3V2cyxcbiAgICAgICAgdGVtcFdpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIHRlbXBIZWlnaHQgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQsXG4gICAgICAgIHR3ID0gdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCxcbiAgICAgICAgdGggPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRoaXMuX3V2cztcbiAgICB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51UGl4ZWxTaXplLnZhbHVlWzBdID0gMS4wL3R3O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMV0gPSAxLjAvdGg7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMF0gPSB0ZW1wVXZzLngwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVsxXSA9IHRlbXBVdnMueTA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzJdID0gdGVtcFV2cy54MSAtIHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzNdID0gdGVtcFV2cy55MiAtIHRlbXBVdnMueTA7XG5cbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzBdID0gKHRoaXMudGlsZVBvc2l0aW9uLnggJSAodGVtcFdpZHRoICogdGhpcy50aWxlU2NhbGUueCkpIC8gdGhpcy5fd2lkdGg7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsxXSA9ICh0aGlzLnRpbGVQb3NpdGlvbi55ICUgKHRlbXBIZWlnaHQgKiB0aGlzLnRpbGVTY2FsZS55KSkgLyB0aGlzLl9oZWlnaHQ7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVsyXSA9ICggdHcgLyB0aGlzLl93aWR0aCApICogdGhpcy50aWxlU2NhbGUueDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzNdID0gKCB0aCAvIHRoaXMuX2hlaWdodCApICogdGhpcy50aWxlU2NhbGUueTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIodGhpcyk7XG5cbiAgICB0ZXh0dXJlLl91dnMgPSB0ZW1wVXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGVtcFdpZHRoO1xuICAgIHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRlbXBIZWlnaHQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBhIHJlZmVyZW5jZSB0byB0aGUgY2FudmFzIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0LFxuICAgICAgICB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgYmFzZVRleHR1cmUgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBtb2RYID0gKHRoaXMudGlsZVBvc2l0aW9uLnggLyB0aGlzLnRpbGVTY2FsZS54KSAlIHRleHR1cmUuX2ZyYW1lLndpZHRoLFxuICAgICAgICBtb2RZID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgLyB0aGlzLnRpbGVTY2FsZS55KSAlIHRleHR1cmUuX2ZyYW1lLmhlaWdodDtcblxuICAgIC8vIGNyZWF0ZSBhIG5pY2Ugc2hpbnkgcGF0dGVybiFcbiAgICAvLyBUT0RPIHRoaXMgbmVlZHMgdG8gYmUgcmVmcmVzaGVkIGlmIHRleHR1cmUgY2hhbmdlcy4uXG4gICAgaWYoIXRoaXMuX2NhbnZhc1BhdHRlcm4pXG4gICAge1xuICAgICAgICAvLyBjdXQgYW4gb2JqZWN0IGZyb20gYSBzcHJpdGVzaGVldC4uXG4gICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IGNvcmUuQ2FudmFzQnVmZmVyKHRleHR1cmUuX2ZyYW1lLndpZHRoLCB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQpO1xuXG4gICAgICAgIC8vIFRpbnQgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgICAgaWYgKHRoaXMudGludCAhPT0gMHhGRkZGRkYpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlZFRpbnQgIT09IHRoaXMudGludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUgPSBDYW52YXNUaW50ZXIuZ2V0VGludGVkVGV4dHVyZSh0aGlzLCB0aGlzLnRpbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZSh0aGlzLnRpbnRlZFRleHR1cmUsIDAsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZShiYXNlVGV4dHVyZS5zb3VyY2UsIC10ZXh0dXJlLl9mcmFtZS54LCAtdGV4dHVyZS5fZnJhbWUueSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2FudmFzUGF0dGVybiA9IHRlbXBDYW52YXMuY29udGV4dC5jcmVhdGVQYXR0ZXJuKCB0ZW1wQ2FudmFzLmNhbnZhcywgJ3JlcGVhdCcgKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgY29udGV4dCBzdGF0ZS4uXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb24pO1xuXG4gICAgLy8gVE9ETyAtIHRoaXMgc2hvdWxkIGJlIHJvbGxlZCBpbnRvIHRoZSBzZXRUcmFuc2Zvcm0gYWJvdmUuLlxuICAgIGNvbnRleHQuc2NhbGUodGhpcy50aWxlU2NhbGUueCx0aGlzLnRpbGVTY2FsZS55KTtcblxuICAgIGNvbnRleHQudHJhbnNsYXRlKG1vZFggKyAodGhpcy5hbmNob3IueCAqIC10aGlzLl93aWR0aCApLFxuICAgICAgICAgICAgICAgICAgICAgIG1vZFkgKyAodGhpcy5hbmNob3IueSAqIC10aGlzLl9oZWlnaHQpKTtcblxuICAgIC8vIGNoZWNrIGJsZW5kIG1vZGVcbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyBmaWxsIHRoZSBwYXR0ZXJuIVxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fY2FudmFzUGF0dGVybjtcbiAgICBjb250ZXh0LmZpbGxSZWN0KC1tb2RYLFxuICAgICAgICAgICAgICAgICAgICAgLW1vZFksXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl93aWR0aCAvIHRoaXMudGlsZVNjYWxlLngsXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWlnaHQgLyB0aGlzLnRpbGVTY2FsZS55KTtcblxuXG4gICAgLy9UT0RPIC0gcHJldHR5IHN1cmUgdGhpcyBjYW4gYmUgZGVsZXRlZC4uLlxuICAgIC8vY29udGV4dC50cmFuc2xhdGUoLXRoaXMudGlsZVBvc2l0aW9uLnggKyAodGhpcy5hbmNob3IueCAqIHRoaXMuX3dpZHRoKSwgLXRoaXMudGlsZVBvc2l0aW9uLnkgKyAodGhpcy5hbmNob3IueSAqIHRoaXMuX2hlaWdodCkpO1xuICAgIC8vY29udGV4dC5zY2FsZSgxIC8gdGhpcy50aWxlU2NhbGUueCwgMSAvIHRoaXMudGlsZVNjYWxlLnkpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBzcHJpdGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xuXG4gICAgdmFyIHcwID0gd2lkdGggKiAoMS10aGlzLmFuY2hvci54KTtcbiAgICB2YXIgdzEgPSB3aWR0aCAqIC10aGlzLmFuY2hvci54O1xuXG4gICAgdmFyIGgwID0gaGVpZ2h0ICogKDEtdGhpcy5hbmNob3IueSk7XG4gICAgdmFyIGgxID0gaGVpZ2h0ICogLXRoaXMuYW5jaG9yLnk7XG5cbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgdmFyIHgxID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTIgPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHg0ID0gIGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciBtaW5YLFxuICAgICAgICBtYXhYLFxuICAgICAgICBtaW5ZLFxuICAgICAgICBtYXhZO1xuXG4gICAgbWluWCA9IHgxO1xuICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgbWluWSA9IHkxO1xuICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgbWF4WCA9IHgxO1xuICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgbWF4WSA9IHkxO1xuICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG5cbiAgICByZXR1cm4gYm91bmRzO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byBjaGVja1xuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG4gICAgdmFyIHgxID0gLXdpZHRoICogdGhpcy5hbmNob3IueDtcbiAgICB2YXIgeTE7XG5cbiAgICBpZiAoIHRlbXBQb2ludC54ID4geDEgJiYgdGVtcFBvaW50LnggPCB4MSArIHdpZHRoIClcbiAgICB7XG4gICAgICAgIHkxID0gLWhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG5cbiAgICAgICAgaWYgKCB0ZW1wUG9pbnQueSA+IHkxICYmIHRlbXBQb2ludC55IDwgeTEgKyBoZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0aWxpbmcgc3ByaXRlXG4gKlxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsZVNjYWxlID0gbnVsbDtcbiAgICB0aGlzLl90aWxlU2NhbGVPZmZzZXQgPSBudWxsO1xuICAgIHRoaXMudGlsZVBvc2l0aW9uID0gbnVsbDtcblxuICAgIHRoaXMuX3V2cyA9IG51bGw7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSB0aWxpbmcgc3ByaXRlIHRoYXQgd2lsbCB1c2UgYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICovXG5UaWxpbmdTcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQsd2lkdGgsaGVpZ2h0KVxue1xuICAgIHZhciB0ZXh0dXJlID0gY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgJyArIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKHRleHR1cmUsd2lkdGgsaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBBIG5ldyBUaWxpbmdTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGltYWdlIGlkXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VJZCwgd2lkdGgsIGhlaWdodCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRpbGluZ1Nwcml0ZShjb3JlLlRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpLHdpZHRoLGhlaWdodCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgRGlzcGxheU9iamVjdCA9IGNvcmUuRGlzcGxheU9iamVjdCxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gbnVsbDtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbEhpdFRlc3QgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsRGVzdHJveSA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVkU3ByaXRlID0gbnVsbDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGlzcGxheU9iamVjdC5wcm90b3R5cGUsIHtcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgeW91IHdhbnQgdGhpcyBkaXNwbGF5IG9iamVjdCB0byBiZSBjYWNoZWQgYXMgYSBiaXRtYXAuXG4gICAgICogVGhpcyBiYXNpY2FsbHkgdGFrZXMgYSBzbmFwIHNob3Qgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IGFzIGl0IGlzIGF0IHRoYXQgbW9tZW50LiBJdCBjYW4gcHJvdmlkZSBhIHBlcmZvcm1hbmNlIGJlbmVmaXQgZm9yIGNvbXBsZXggc3RhdGljIGRpc3BsYXlPYmplY3RzLlxuICAgICAqIFRvIHJlbW92ZSBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ2ZhbHNlJ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGNhY2hlQXNCaXRtYXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVBc0JpdG1hcDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NhY2hlQXNCaXRtYXAgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0wgPSB0aGlzLnJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzID0gdGhpcy5yZW5kZXJDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMudXBkYXRlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzID0gdGhpcy5nZXRCb3VuZHM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbERlc3Ryb3kgPSB0aGlzLmRlc3Ryb3k7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQgPSB0aGlzLmNvbnRhaW5zUG9pbnQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSB0aGlzLl9jYWNoZUFzQml0bWFwRGVzdHJveTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXN0cm95Q2FjaGVkRGlzcGxheU9iamVjdCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXM7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRCb3VuZHMgPSB0aGlzLl9vcmlnaW5hbEdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX29yaWdpbmFsRGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fb3JpZ2luYWxDb250YWluc1BvaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBXZWJHTFxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gdGhlIFdlYkdMIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZFdlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENhY2hlZERpc3BsYXlPYmplY3QoIHJlbmRlcmVyICk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIoIHRoaXMuX2NhY2hlZFNwcml0ZSApO1xufTtcblxuLyoqXG4qIFByZXBhcmVzIHRoZSBXZWJHTCByZW5kZXJlciB0byBjYWNoZSB0aGUgc3ByaXRlXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGZpcnN0IHdlIGZsdXNoIGFueXRoaW5nIGxlZnQgaW4gdGhlIHJlbmRlcmVyIChvdGhlcndpc2UgaXQgd291bGQgZ2V0IHJlbmRlcmVkIHRvIHRoZSBjYWNoZWQgdGV4dHVyZSlcbiAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbiAgICAvL3RoaXMuZmlsdGVycz0gW107XG4gICAgLy8gbmV4dCB3ZSBmaW5kIHRoZSBkaW1lbnNpb25zIG9mIHRoZSB1bnRyYW5zZm9ybWVkIG9iamVjdFxuICAgIC8vIHRoaXMgZnVuY3Rpb24gYWxzbyBjYWxscyB1cGRhdGV0cmFuc2Zvcm0gb24gYWxsIGl0cyBjaGlsZHJlbiBhcyBwYXJ0IG9mIHRoZSBtZWFzdXJpbmcuIFRoaXMgbWVhbnMgd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIHRyYW5zZm9ybSBhZ2FpbiBpbiB0aGlzIGZ1bmN0aW9uXG4gICAgLy8gVE9ETyBwYXNzIGFuIG9iamVjdCB0byBjbG9uZSB0b28/IHNhdmVzIGhhdmluZyB0byBjcmVhdGUgYSBuZXcgb25lIGVhY2ggdGltZSFcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmNsb25lKCk7XG5cbiAgICAvLyBhZGQgc29tZSBwYWRkaW5nIVxuICAgIGlmKHRoaXMuX2ZpbHRlcnMpXG4gICAge1xuICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuX2ZpbHRlcnNbMF0ucGFkZGluZztcbiAgICAgICAgYm91bmRzLnggLT0gcGFkZGluZztcbiAgICAgICAgYm91bmRzLnkgLT0gcGFkZGluZztcblxuICAgICAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG4gICAgfVxuXG4gICAgLy8gZm9yIG5vdyB3ZSBjYWNoZSB0aGUgY3VycmVudCByZW5kZXJUYXJnZXQgdGhhdCB0aGUgd2ViR0wgcmVuZGVyZXIgaXMgY3VycmVudGx5IHVzaW5nLlxuICAgIC8vIHRoaXMgY291bGQgYmUgbW9yZSBlbGVnZW50Li5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldDtcbiAgICAvLyBXZSBhbHNvIHN0b3JlIHRoZSBmaWx0ZXIgc3RhY2sgLSBJIHdpbGwgZGVmaW5pdGVseSBsb29rIHRvIGNoYW5nZSBob3cgdGhpcyB3b3JrcyBhIGxpdHRsZSBsYXRlciBkb3duIHRoZSBsaW5lLlxuICAgIHZhciBzdGFjayA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2s7XG5cbiAgICAvLyB0aGlzIHJlbmRlclRleHR1cmUgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBjYWNoZWQgRGlzcGxheU9iamVjdFxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG5cblxuICAgIC8vIHNldCBhbGwgcHJvcGVydGllcyB0byB0aGVyZSBvcmlnaW5hbCBzbyB3ZSBjYW4gcmVuZGVyIHRvIGEgdGV4dHVyZVxuICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoY2FjaGVkUmVuZGVyVGFyZ2V0KTtcbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmZpbHRlclN0YWNrID0gc3RhY2s7XG5cbiAgICB0aGlzLnJlbmRlcldlYkdMICAgICA9IHRoaXMuX3JlbmRlckNhY2hlZFdlYkdMO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICAgICAgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgdHJhbnNmb3JtIG9mIHRoZSBjYWNoZWQgc3ByaXRlIHRvIGF2b2lkIHRoZSBuYXN0eSBmbGlja2VyLi5cbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgLy8gbWFwIHRoZSBoaXQgdGVzdC4uXG4gICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fY2FjaGVkU3ByaXRlLmNvbnRhaW5zUG9pbnQuYmluZCh0aGlzLl9jYWNoZWRTcHJpdGUpO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgc3ByaXRlIHdpdGggY2FudmFzXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gdGhlIENhbnZhcyByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9yZW5kZXJDYWNoZWRDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdENhbnZhcyggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLnJlbmRlckNhbnZhcyhyZW5kZXJlcik7XG59O1xuXG4vL1RPRE8gdGhpcyBjYW4gYmUgdGhlIHNhbWUgYXMgdGhlIHdlYkdMIHZlcmlzb24uLiB3aWxsIG5lZWQgdG8gZG8gYSBsaXR0bGUgdHdlYWtpbmcgZmlyc3QgdGhvdWdoLi5cbi8qKlxuKiBQcmVwYXJlcyB0aGUgQ2FudmFzIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvL2dldCBib3VuZHMgYWN0dWFsbHkgdHJhbnNmb3JtcyB0aGUgb2JqZWN0IGZvciB1cyBhbHJlYWR5IVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FjaGVkUmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IGNvcmUuUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDApO1xuXG4gICAgLy8gbmVlZCB0byBzZXQgLy9cbiAgICB2YXIgbSA9IF90ZW1wTWF0cml4O1xuXG4gICAgbS50eCA9IC1ib3VuZHMueDtcbiAgICBtLnR5ID0gLWJvdW5kcy55O1xuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIG0sIHRydWUpO1xuXG4gICAgLy8gbm93IHJlc3RvcmUgdGhlIHN0YXRlIGJlIHNldHRpbmcgdGhlIG5ldyBwcm9wZXJ0aWVzXG4gICAgcmVuZGVyZXIuY29udGV4dCA9IGNhY2hlZFJlbmRlclRhcmdldDtcblxuICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fcmVuZGVyQ2FjaGVkQ2FudmFzO1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtID0gdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtO1xuICAgIHRoaXMuZ2V0Qm91bmRzICA9IHRoaXMuX2dldENhY2hlZEJvdW5kcztcblxuXG4gICAgLy8gY3JlYXRlIG91ciBjYWNoZWQgc3ByaXRlXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IGNvcmUuU3ByaXRlKHJlbmRlclRleHR1cmUpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogQ2FsY3VsYXRlcyB0aGUgYm91bmRzIG9mIHRoZSBjYWNoZWQgc3ByaXRlXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2dldENhY2hlZEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLl9jYWNoZWRTcHJpdGUuZ2V0Qm91bmRzKCk7XG59O1xuXG4vKipcbiogRGVzdHJveXMgdGhlIGNhY2hlZCBzcHJpdGUuXG4qXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX3RleHR1cmUuZGVzdHJveSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59O1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcERlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY2FjaGVBc0JpdG1hcCA9IGZhbHNlO1xuICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSgpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSBpbnN0YW5jZSBuYW1lIG9mIHRoZSBvYmplY3QuXG4gKlxuICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAqIEBtZW1iZXIge3N0cmluZ31cbiAqL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5uYW1lID0gbnVsbDtcblxuLyoqXG4qIFJldHVybnMgdGhlIGRpc3BsYXkgb2JqZWN0IGluIHRoZSBjb250YWluZXJcbipcbiogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuKiBAcGFyYW0gbmFtZSB7c3RyaW5nfSBpbnN0YW5jZSBuYW1lXG4qIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiovXG5jb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWUgPSBmdW5jdGlvbiAobmFtZSlcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbltpXS5uYW1lID09PSBuYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdFxuKlxuKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuKiBAcGFyYW0gcG9pbnQge1BvaW50fSB0aGUgcG9pbnQgdG8gd3JpdGUgdGhlIGdsb2JhbCB2YWx1ZSB0by4gSWYgbnVsbCBhIG5ldyBwb2ludCB3aWxsIGJlIHJldHVybmVkXG4qIEByZXR1cm4ge1BvaW50fVxuKi9cbmNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0R2xvYmFsUG9zaXRpb24gPSBmdW5jdGlvbiAocG9pbnQpXG57XG4gICAgcG9pbnQgPSBwb2ludCB8fCBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgaWYodGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICBwb2ludC54ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMud29ybGRUcmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHBvaW50LnggPSB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIHBvaW50LnkgPSB0aGlzLnBvc2l0aW9uLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxucmVxdWlyZSgnLi9jYWNoZUFzQml0bWFwJyk7XG5yZXF1aXJlKCcuL2dldENoaWxkQnlOYW1lJyk7XG5yZXF1aXJlKCcuL2dldEdsb2JhbFBvc2l0aW9uJyk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmV4dHJhc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNb3ZpZUNsaXA6ICAgICAgcmVxdWlyZSgnLi9Nb3ZpZUNsaXAnKSxcbiAgICBUaWxpbmdTcHJpdGU6ICAgcmVxdWlyZSgnLi9UaWxpbmdTcHJpdGUnKSxcbiAgICBCaXRtYXBUZXh0OiAgICAgcmVxdWlyZSgnLi9CaXRtYXBUZXh0Jylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGUgWSBpcyBmbGlwcGVkIGluIHRoaXMgc2hhZGVyIGZvciBzb21lIHJlYXNvbi5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgc2hhZGVyIDogaHR0cHM6Ly93d3cuc2hhZGVydG95LmNvbS92aWV3L2xzc0dEaiBieSBAbW92QVgxM2hcbiAqL1xuXG4vKipcbiAqIEFuIEFTQ0lJIGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQXNjaWlGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gZmxvYXQgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IGNoYXJhY3RlcihmbG9hdCBuLCB2ZWMyIHApXFxue1xcbiAgICBwID0gZmxvb3IocCp2ZWMyKDQuMCwgLTQuMCkgKyAyLjUpO1xcbiAgICBpZiAoY2xhbXAocC54LCAwLjAsIDQuMCkgPT0gcC54ICYmIGNsYW1wKHAueSwgMC4wLCA0LjApID09IHAueSlcXG4gICAge1xcbiAgICAgICAgaWYgKGludChtb2Qobi9leHAyKHAueCArIDUuMCpwLnkpLCAyLjApKSA9PSAxKSByZXR1cm4gMS4wO1xcbiAgICB9XFxuICAgIHJldHVybiAwLjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5O1xcblxcbiAgICB2ZWMzIGNvbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgZmxvb3IoIHV2IC8gcGl4ZWxTaXplICkgKiBwaXhlbFNpemUgLyBkaW1lbnNpb25zLnh5KS5yZ2I7XFxuXFxuICAgIGZsb2F0IGdyYXkgPSAoY29sLnIgKyBjb2wuZyArIGNvbC5iKSAvIDMuMDtcXG5cXG4gICAgZmxvYXQgbiA9ICA2NTUzNi4wOyAgICAgICAgICAgICAvLyAuXFxuICAgIGlmIChncmF5ID4gMC4yKSBuID0gNjU2MDAuMDsgICAgLy8gOlxcbiAgICBpZiAoZ3JheSA+IDAuMykgbiA9IDMzMjc3Mi4wOyAgIC8vICpcXG4gICAgaWYgKGdyYXkgPiAwLjQpIG4gPSAxNTI1NTA4Ni4wOyAvLyBvXFxuICAgIGlmIChncmF5ID4gMC41KSBuID0gMjMzODUxNjQuMDsgLy8gJlxcbiAgICBpZiAoZ3JheSA+IDAuNikgbiA9IDE1MjUyMDE0LjA7IC8vIDhcXG4gICAgaWYgKGdyYXkgPiAwLjcpIG4gPSAxMzE5OTQ1Mi4wOyAvLyBAXFxuICAgIGlmIChncmF5ID4gMC44KSBuID0gMTE1MTI4MTAuMDsgLy8gI1xcblxcbiAgICB2ZWMyIHAgPSBtb2QoIHV2IC8gKCBwaXhlbFNpemUgKiAwLjUgKSwgMi4wKSAtIHZlYzIoMS4wKTtcXG4gICAgY29sID0gY29sICogY2hhcmFjdGVyKG4sIHApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbCwgMS4wKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiA4IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkFzY2lpRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQXNjaWlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXNjaWlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFzY2lpRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBc2NpaUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGl4ZWwgc2l6ZSB1c2VkIGJ5IHRoZSBmaWx0ZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Bc2NpaUZpbHRlciNcbiAgICAgKi9cbiAgICBzaXplOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsb29tRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsb29tRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlciA9IG5ldyBCbHVyWUZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcbn1cblxuQmxvb21GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbG9vbUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbG9vbUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxvb21GaWx0ZXI7XG5cbkJsb29tRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAvL1RPRE8gLSBjb3B5VGV4U3ViSW1hZ2UyRCBjb3VsZCBiZSB1c2VkIGhlcmU/XG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5TQ1JFRU4pO1xuXG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsb29tRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cblxuLyoqXG4gKiBUaGUgQmx1ckRpckZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0b3dhcmQgYSBkaXJlY3Rpb24gdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpclhcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJZXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJEaXJGaWx0ZXIoZGlyWCwgZGlyWSlcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gZmxvYXQgZGlyWDtcXG51bmlmb3JtIGZsb2F0IGRpclk7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbM107XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDA0ICogc3RyZW5ndGgpICogZGlyWSApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDggKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAxMiAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApICogMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pICogMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pICogMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSAqIDAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgZGlyWDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogZGlyWCB8fCAwIH0sXG4gICAgICAgICAgICBkaXJZOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJZIHx8IDAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWCBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJYID0gZGlyWCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWSBkaXJlY3Rpb24gb2YgdGhlIGJsdXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5kaXJZID0gZGlyWSB8fCAwO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJEaXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJEaXJGaWx0ZXI7XG5cbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcikge1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZiAodGhpcy5wYXNzZXMgPT09IDEpIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCByZW5kZXJUYXJnZXQsIGNsZWFyKTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMjsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL3RoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvICh0aGlzLnBhc3NlcysoaSoyKSkgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCByZW5kZXJUYXJnZXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IHZhbHVlICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBkaXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyWDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZGlyWC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJEaXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJZO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJZLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWUZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBCbHVyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG59XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJGaWx0ZXI7XG5cbkJsdXJGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHBhc3Nlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5ibHVyWEZpbHRlci5wYXNzZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcyA9IHRoaXMuYmx1cllGaWx0ZXIucGFzc2VzID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1clhGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJYRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAxMiAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwNCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMDggKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuXFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuXG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1clhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1clhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJYRmlsdGVyO1xuXG5CbHVyWEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1clhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJYRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gIE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJZRmlsdGVyIGFwcGxpZXMgYSBob3Jpem9udGFsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAxMiAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDEyICogc3RyZW5ndGgpO1xcblxcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJZRmlsdGVyO1xuXG5CbHVyWUZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gTWF0aC5hYnModGhpcy5zdHJlbmd0aCkgLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCB0cnVlKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIFNtYXJ0IEJsdXIgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTbWFydEJsdXJGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgKiBwZXJjZW50KTtcXG4gICAgICAgIHNhbXBsZS5yZ2IgKj0gc2FtcGxlLmE7XFxuICAgICAgICBjb2xvciArPSBzYW1wbGUgKiB3ZWlnaHQ7XFxuICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgLyB0b3RhbDtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAvPSBnbF9GcmFnQ29sb3IuYSArIDAuMDAwMDE7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgZGVsdGE6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC4xLCB5OiAwLjAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TbWFydEJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU21hcnRCbHVyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTbWFydEJsdXJGaWx0ZXI7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA1eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIGBgYGpzXG4gKiAgdmFyIGNvbG9yTWF0cml4ID0gbmV3IFBJWEkuQ29sb3JNYXRyaXhGaWx0ZXIoKTtcbiAqICBjb250YWluZXIuZmlsdGVycyA9IFtjb2xvck1hdHJpeF07XG4gKiAgY29sb3JNYXRyaXguY29udHJhc3QoMik7XG4gKiBgYGBcbiAqIEBhdXRob3IgQ2zDqW1lbnQgQ2hlbmViYXVsdCA8Y2xlbWVudEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ29sb3JNYXRyaXhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgbVsyNV07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcblxcbiAgICB2ZWM0IGMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IuciA9IChtWzBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzJdICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IChtWzNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yICs9IG1bNF07XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5nID0gKG1bNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bN10gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gKG1bOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmcgKz0gbVs5XTtcXG5cXG4gICAgIGdsX0ZyYWdDb2xvci5iID0gKG1bMTBdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzExXSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTNdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IG1bMTRdO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmEgPSAobVsxNV0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTZdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxOF0gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gbVsxOV07XFxuXFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICcxZnYnLCB2YWx1ZTogW1xuICAgICAgICAgICAgICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvck1hdHJpeEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JNYXRyaXhGaWx0ZXI7XG5cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGN1cnJlbnQgbWF0cml4IGFuZCBzZXQgdGhlIG5ldyBvbmVcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IGlmIHRydWUsIGN1cnJlbnQgbWF0cml4IGFuZCBtYXRyaXggYXJlIG11bHRpcGxpZWQuIElmIGZhbHNlLCBqdXN0IHNldCB0aGUgY3VycmVudCBtYXRyaXggd2l0aCBAcGFyYW0gbWF0cml4XG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fbG9hZE1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgsIG11bHRpcGx5KVxue1xuICAgIG11bHRpcGx5ID0gISFtdWx0aXBseTtcblxuICAgIHZhciBuZXdNYXRyaXggPSBtYXRyaXg7XG5cbiAgICBpZiAobXVsdGlwbHkpIHtcbiAgICAgICAgdGhpcy5fbXVsdGlwbHkobmV3TWF0cml4LCB0aGlzLnVuaWZvcm1zLm0udmFsdWUsIG1hdHJpeCk7XG4gICAgICAgIG5ld01hdHJpeCA9IHRoaXMuX2NvbG9yTWF0cml4KG5ld01hdHJpeCk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgbWF0cml4XG4gICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gbmV3TWF0cml4O1xufTtcblxuLyoqXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQ1J3NcbiAqXG4gKiBAcGFyYW0gb3V0IHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0gYSB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIGIge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyBvdXQge251bWJlcltdfSAobWF0IDV4NClcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpXG57XG5cbiAgICAvLyBSZWQgQ2hhbm5lbFxuICAgIG91dFswXSA9IChhWzBdICogYlswXSkgKyAoYVsxXSAqIGJbNV0pICsgKGFbMl0gKiBiWzEwXSkgKyAoYVszXSAqIGJbMTVdKTtcbiAgICBvdXRbMV0gPSAoYVswXSAqIGJbMV0pICsgKGFbMV0gKiBiWzZdKSArIChhWzJdICogYlsxMV0pICsgKGFbM10gKiBiWzE2XSk7XG4gICAgb3V0WzJdID0gKGFbMF0gKiBiWzJdKSArIChhWzFdICogYls3XSkgKyAoYVsyXSAqIGJbMTJdKSArIChhWzNdICogYlsxN10pO1xuICAgIG91dFszXSA9IChhWzBdICogYlszXSkgKyAoYVsxXSAqIGJbOF0pICsgKGFbMl0gKiBiWzEzXSkgKyAoYVszXSAqIGJbMThdKTtcbiAgICBvdXRbNF0gPSAoYVswXSAqIGJbNF0pICsgKGFbMV0gKiBiWzldKSArIChhWzJdICogYlsxNF0pICsgKGFbM10gKiBiWzE5XSk7XG5cbiAgICAvLyBHcmVlbiBDaGFubmVsXG4gICAgb3V0WzVdID0gKGFbNV0gKiBiWzBdKSArIChhWzZdICogYls1XSkgKyAoYVs3XSAqIGJbMTBdKSArIChhWzhdICogYlsxNV0pO1xuICAgIG91dFs2XSA9IChhWzVdICogYlsxXSkgKyAoYVs2XSAqIGJbNl0pICsgKGFbN10gKiBiWzExXSkgKyAoYVs4XSAqIGJbMTZdKTtcbiAgICBvdXRbN10gPSAoYVs1XSAqIGJbMl0pICsgKGFbNl0gKiBiWzddKSArIChhWzddICogYlsxMl0pICsgKGFbOF0gKiBiWzE3XSk7XG4gICAgb3V0WzhdID0gKGFbNV0gKiBiWzNdKSArIChhWzZdICogYls4XSkgKyAoYVs3XSAqIGJbMTNdKSArIChhWzhdICogYlsxOF0pO1xuICAgIG91dFs5XSA9IChhWzVdICogYls0XSkgKyAoYVs2XSAqIGJbOV0pICsgKGFbN10gKiBiWzE0XSkgKyAoYVs4XSAqIGJbMTldKTtcblxuICAgIC8vIEJsdWUgQ2hhbm5lbFxuICAgIG91dFsxMF0gPSAoYVsxMF0gKiBiWzBdKSArIChhWzExXSAqIGJbNV0pICsgKGFbMTJdICogYlsxMF0pICsgKGFbMTNdICogYlsxNV0pO1xuICAgIG91dFsxMV0gPSAoYVsxMF0gKiBiWzFdKSArIChhWzExXSAqIGJbNl0pICsgKGFbMTJdICogYlsxMV0pICsgKGFbMTNdICogYlsxNl0pO1xuICAgIG91dFsxMl0gPSAoYVsxMF0gKiBiWzJdKSArIChhWzExXSAqIGJbN10pICsgKGFbMTJdICogYlsxMl0pICsgKGFbMTNdICogYlsxN10pO1xuICAgIG91dFsxM10gPSAoYVsxMF0gKiBiWzNdKSArIChhWzExXSAqIGJbOF0pICsgKGFbMTJdICogYlsxM10pICsgKGFbMTNdICogYlsxOF0pO1xuICAgIG91dFsxNF0gPSAoYVsxMF0gKiBiWzRdKSArIChhWzExXSAqIGJbOV0pICsgKGFbMTJdICogYlsxNF0pICsgKGFbMTNdICogYlsxOV0pO1xuXG4gICAgLy8gQWxwaGEgQ2hhbm5lbFxuICAgIG91dFsxNV0gPSAoYVsxNV0gKiBiWzBdKSArIChhWzE2XSAqIGJbNV0pICsgKGFbMTddICogYlsxMF0pICsgKGFbMThdICogYlsxNV0pO1xuICAgIG91dFsxNl0gPSAoYVsxNV0gKiBiWzFdKSArIChhWzE2XSAqIGJbNl0pICsgKGFbMTddICogYlsxMV0pICsgKGFbMThdICogYlsxNl0pO1xuICAgIG91dFsxN10gPSAoYVsxNV0gKiBiWzJdKSArIChhWzE2XSAqIGJbN10pICsgKGFbMTddICogYlsxMl0pICsgKGFbMThdICogYlsxN10pO1xuICAgIG91dFsxOF0gPSAoYVsxNV0gKiBiWzNdKSArIChhWzE2XSAqIGJbOF0pICsgKGFbMTddICogYlsxM10pICsgKGFbMThdICogYlsxOF0pO1xuICAgIG91dFsxOV0gPSAoYVsxNV0gKiBiWzRdKSArIChhWzE2XSAqIGJbOV0pICsgKGFbMTddICogYlsxNF0pICsgKGFbMThdICogYlsxOV0pO1xuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEByZXR1cm4gbSB7bnVtYmVyW119IChtYXQgNXg0KSB3aXRoIGFsbCB2YWx1ZXMgYmV0d2VlbiAwLTFcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9jb2xvck1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgLy8gQ3JlYXRlIGEgRmxvYXQzMiBBcnJheSBhbmQgbm9ybWFsaXplIHRoZSBvZmZzZXQgY29tcG9uZW50IHRvIDAtMVxuICAgIHZhciBtID0gbmV3IEZsb2F0MzJBcnJheShtYXRyaXgpO1xuICAgIG1bNF0gLz0gMjU1O1xuICAgIG1bOV0gLz0gMjU1O1xuICAgIG1bMTRdIC89IDI1NTtcbiAgICBtWzE5XSAvPSAyNTU7XG5cbiAgICByZXR1cm4gbTtcbn07XG5cbi8qKlxuICogQWRqdXN0cyBicmlnaHRuZXNzXG4gKlxuICogQHBhcmFtIGIge251bWJlcn0gdmFsdWUgb2YgdGhlIGJyaWd0aG5lc3MgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJpZ2h0bmVzcyA9IGZ1bmN0aW9uIChiLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBiLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCBiLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCBiLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgbWF0cmljZXMgaW4gZ3JleSBzY2FsZXNcbiAqXG4gKiBAcGFyYW0gc2NhbGUge251bWJlcn0gdmFsdWUgb2YgdGhlIGdyZXkgKDAgaXMgYmxhY2spXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlID0gZnVuY3Rpb24gKHNjYWxlLCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICBzY2FsZSwgc2NhbGUsIHNjYWxlLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuLy9BbWVyaWNhbml6ZWQgYWxpYXNcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmF5c2NhbGUgPSBDb2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JleXNjYWxlO1xuXG4vKipcbiAqIFNldCB0aGUgYmxhY2sgYW5kIHdoaXRlIG1hdHJpY2VcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ibGFja0FuZFdoaXRlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAuMywgMC42LCAwLjEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBodWUgcHJvcGVydHkgb2YgdGhlIGNvbG9yXG4gKlxuICogQHBhcmFtIHJvdGF0aW9uIHtudW1iZXJ9IGluIGRlZ3JlZXNcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5odWUgPSBmdW5jdGlvbiAocm90YXRpb24sIG11bHRpcGx5KVxue1xuICAgIHJvdGF0aW9uID0gKHJvdGF0aW9uIHx8IDApIC8gMTgwICogTWF0aC5QSTtcbiAgICB2YXIgY29zID0gTWF0aC5jb3Mocm90YXRpb24pLFxuICAgICAgICBzaW4gPSBNYXRoLnNpbihyb3RhdGlvbik7XG5cbiAgICAvLyBsdW1pbmFuY2VSZWQsIGx1bWluYW5jZUdyZWVuLCBsdW1pbmFuY2VCbHVlXG4gICAgdmFyIGx1bVIgPSAwLjIxMywgLy8gb3IgMC4zMDg2XG4gICAgICAgIGx1bUcgPSAwLjcxNSwgLy8gb3IgMC42MDk0XG4gICAgICAgIGx1bUIgPSAwLjA3MjsgLy8gb3IgMC4wODIwXG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBsdW1SICsgY29zICogKDEgLSBsdW1SKSArIHNpbiAqICgtbHVtUiksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKC1sdW1HKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoMSAtIGx1bUIpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgwLjE0MyksIGx1bUcgKyBjb3MgKiAoMSAtIGx1bUcpICsgc2luICogKDAuMTQwKSwgbHVtQiArIGNvcyAqICgtbHVtQikgKyBzaW4gKiAoLTAuMjgzKSwgMCwgMCxcbiAgICAgICAgbHVtUiArIGNvcyAqICgtbHVtUikgKyBzaW4gKiAoLSgxIC0gbHVtUikpLCBsdW1HICsgY29zICogKC1sdW1HKSArIHNpbiAqIChsdW1HKSwgbHVtQiArIGNvcyAqICgxIC0gbHVtQikgKyBzaW4gKiAobHVtQiksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLyoqXG4gKiBTZXQgdGhlIGNvbnRyYXN0IG1hdHJpeCwgaW5jcmVhc2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBkYXJrIGFuZCBicmlnaHRcbiAqIEluY3JlYXNlIGNvbnRyYXN0IDogc2hhZG93cyBkYXJrZXIgYW5kIGhpZ2hsaWdodHMgYnJpZ2h0ZXJcbiAqIERlY3JlYXNlIGNvbnRyYXN0IDogYnJpbmcgdGhlIHNoYWRvd3MgdXAgYW5kIHRoZSBoaWdobGlnaHRzIGRvd25cbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBjb250cmFzdFxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbnRyYXN0ID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHYgPSAoYW1vdW50IHx8IDApICsgMTtcbiAgICB2YXIgbyA9IC0xMjggKiAodiAtIDEpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgdiwgMCwgMCwgMCwgbyxcbiAgICAgICAgMCwgdiwgMCwgMCwgbyxcbiAgICAgICAgMCwgMCwgdiwgMCwgbyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHNhdHVyYXRpb24gbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGNvbG9yc1xuICogSW5jcmVhc2Ugc2F0dXJhdGlvbiA6IGluY3JlYXNlIGNvbnRyYXN0LCBicmlnaHRuZXNzLCBhbmQgc2hhcnBuZXNzXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNhdHVyYXRlID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIHggPSAoYW1vdW50IHx8IDApICogMiAvIDMgKyAxO1xuICAgIHZhciB5ID0gKCh4IC0gMSkgKiAtMC41KTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHgsIHksIHksIDAsIDAsXG4gICAgICAgIHksIHgsIHksIDAsIDAsXG4gICAgICAgIHksIHksIHgsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRGVzYXR1cmF0ZSBpbWFnZSAocmVtb3ZlIGNvbG9yKVxuICpcbiAqIENhbGwgdGhlIHNhdHVyYXRlIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmRlc2F0dXJhdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICB0aGlzLnNhdHVyYXRlKC0xKTtcbn07XG5cbi8qKlxuICogTmVnYXRpdmUgaW1hZ2UgKGludmVyc2Ugb2YgY2xhc3NpYyByZ2IgbWF0cml4KVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uZWdhdGl2ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAxLCAxLCAwLCAwLFxuICAgICAgICAxLCAwLCAxLCAwLCAwLFxuICAgICAgICAxLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNlcGlhIGltYWdlXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnNlcGlhID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMzkzLCAwLjc2ODk5OTksIDAuMTg4OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMzQ5LCAwLjY4NTk5OTksIDAuMTY3OTk5OTksIDAsIDAsXG4gICAgICAgIDAuMjcyLCAwLjUzMzk5OTksIDAuMTMwOTk5OTksIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgbW90aW9uIHBpY3R1cmUgcHJvY2VzcyBpbnZlbnRlZCBpbiAxOTE2ICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50ZWNobmljb2xvciA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjkxMjUyNzc4OTE0NTYwODMsIC0wLjg1NDUzNDQ5NzY5NTE2NDUsIC0wLjA5MTU1NTA4NDgyNzU1NTg1LCAwLCAxMS43OTM2MDM0MzQzNzczMzcsXG4gICAgICAgIC0wLjMwODc4MzMzODU5MjgwOTcsIDEuNzY1ODkwODU1NTQ1ODQyOCwgLTAuMTA2MDE3NDMwNzQ3MjIyNDUsIDAsIC03MC4zNTIwNTE2MTQ2MTM5OCxcbiAgICAgICAgLTAuMjMxMTAzMzc3NTQ4NjE2LCAtMC43NTAxODk5MTk3NDQwMjEyLCAxLjg0NzU5NzgxNjEwODE4OSwgMCwgMzAuOTUwOTQwODY5NDkxMTM4LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFBvbGFyb2lkIGZpbHRlclxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wb2xhcm9pZCA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjQzOCwgLTAuMDYyLCAtMC4wNjIsIDAsIDAsXG4gICAgICAgIC0wLjEyMiwgMS4zNzgsIC0wLjEyMiwgMCwgMCxcbiAgICAgICAgLTAuMDE2LCAtMC4wMTYsIDEuNDgzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEZpbHRlciB3aG8gdHJhbnNmb3JtcyA6IFJlZCAtPiBCbHVlIGFuZCBCbHVlIC0+IFJlZFxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS50b0JHUiA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIENvbG9yIHJldmVyc2FsIGZpbG0gaW50cm9kdWNlZCBieSBFYXN0bWFuIEtvZGFrIGluIDE5MzUuICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5rb2RhY2hyb21lID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuMTI4NTU4MjM5NjU5MzUyNSwgLTAuMzk2NzM4MjI4MzYwMTM0OCwgLTAuMDM5OTI1NTkxNzI5MjE3OTMsIDAsIDYzLjcyOTU4NzYyMTk2NTAyLFxuICAgICAgICAtMC4xNjQwNDMzOTk2MjI0NDYxNiwgMS4wODM1MjUxNTY2MjkxMzA0LCAtMC4wNTQ5ODgwNTExNTYzMzEzMiwgMCwgMjQuNzMyNDA3ODk2NzA2MjAzLFxuICAgICAgICAtMC4xNjc4NjAxMDcwNjE1NTc2MywgLTAuNTYwMzQxNjI3NzY5NTI0OCwgMS42MDE0ODUwNzYxOTY0OTQzLCAwLCAzNS42Mjk4MjgwNzQ2MDk0NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBCcm93biBkZWxpY2lvdXMgYnJvd25pIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYnJvd25pID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNTk5NzAyMzQ5ODE1OTcxNSwgMC4zNDU1MzI0MzA0ODM5MTI2MywgLTAuMjcwODI5ODY3NDUzODA0MiwgMCwgNDcuNDMxOTI4NTU2MDA4NzMsXG4gICAgICAgIC0wLjAzNzcwMzI0OTgzNzc4MzE1NywgMC44NjA5NTc3NTg3OTkyNjQxLCAwLjE1MDU5NTUyMzg4NDU5OTEzLCAwLCAtMzYuOTY4NDE0OTgzMTkxMjcsXG4gICAgICAgIDAuMjQxMTM2MzUxMjgxNTMzMzUsIC0wLjA3NDQxMDM3OTA4NDIyNDkyLCAwLjQ0OTcyMTgyMDY0ODc3MTUzLCAwLCAtNy41NjIwNzUyNzc1OTEyODMsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBWaW50YWdlIGZpbHRlciAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudmludGFnZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjYyNzkzNDU2MzU2MDU5OTQsIDAuMzIwMjE4MzQyMDgxOTM2NywgLTAuMDM5NjU0MDgyMTEzMTI0NTMsIDAsIDkuNjUxMjg1ODM1Mjk0MTIzLFxuICAgICAgICAwLjAyNTc4Mzk3NzA0ODA4ODY4LCAwLjY0NDExODg2NDQzNzQ3NzEsIDAuMDMyNTkxMjc2MTYxNDkyOTQsIDAsIDcuNDYyODI5MTc2NDcwNTkxLFxuICAgICAgICAwLjA0NjYwNTU1NTY3ODI3MTksIC0wLjA4NTEyMzI5ODcyNDc4OTEsIDAuNTI0MTY0ODAxODcwMDQ2NSwgMCwgNS4xNTkxOTA1ODgyMzUyOTYsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBXZSBkb24ndCBrbm93IGV4YWN0bHkgd2hhdCBpdCBkb2VzLCBraW5kIG9mIGdyYWRpZW50IG1hcCwgYnV0IGZ1bm55IHRvIHBsYXkgd2l0aCFcbiAqXG4gKiBAcGFyYW0gZGVzYXR1cmF0aW9uIHtudW1iZXJ9XG4gKiBAcGFyYW0gdG9uZWQge251bWJlcn1cbiAqIEBwYXJhbSBsaWdodENvbG9yIHtzdHJpbmd9IChleGFtcGxlIDogXCIweEZGRTU4MFwiKVxuICogQHBhcmFtIGRhcmtDb2xvciB7c3RyaW5nfSAgKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbG9yVG9uZSA9IGZ1bmN0aW9uIChkZXNhdHVyYXRpb24sIHRvbmVkLCBsaWdodENvbG9yLCBkYXJrQ29sb3IsIG11bHRpcGx5KVxue1xuICAgIGRlc2F0dXJhdGlvbiA9IGRlc2F0dXJhdGlvbiB8fCAwLjI7XG4gICAgdG9uZWQgPSB0b25lZCB8fCAwLjE1O1xuICAgIGxpZ2h0Q29sb3IgPSBsaWdodENvbG9yIHx8IDB4RkZFNTgwO1xuICAgIGRhcmtDb2xvciA9IGRhcmtDb2xvciB8fCAweDMzODAwMDtcblxuICAgIHZhciBsUiA9ICgobGlnaHRDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEcgPSAoKGxpZ2h0Q29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgbEIgPSAobGlnaHRDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgdmFyIGRSID0gKChkYXJrQ29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGRHID0gKChkYXJrQ29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEIgPSAoZGFya0NvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjMsIDAuNTksIDAuMTEsIDAsIDAsXG4gICAgICAgIGxSLCBsRywgbEIsIGRlc2F0dXJhdGlvbiwgMCxcbiAgICAgICAgZFIsIGRHLCBkQiwgdG9uZWQsIDAsXG4gICAgICAgIGxSIC0gZFIsIGxHIC0gZEcsIGxCIC0gZEIsIDAsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBOaWdodCBlZmZlY3RcbiAqXG4gKiBAcGFyYW0gaW50ZW5zaXR5IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubmlnaHQgPSBmdW5jdGlvbiAoaW50ZW5zaXR5LCBtdWx0aXBseSlcbntcbiAgICBpbnRlbnNpdHkgPSBpbnRlbnNpdHkgfHwgMC4xO1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGludGVuc2l0eSAqICggLTIuMCksIC1pbnRlbnNpdHksIDAsIDAsIDAsXG4gICAgICAgIC1pbnRlbnNpdHksIDAsIGludGVuc2l0eSwgMCwgMCxcbiAgICAgICAgMCwgaW50ZW5zaXR5LCBpbnRlbnNpdHkgKiAyLjAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cblxuLypcbiAqIFByZWRhdG9yIGVmZmVjdFxuICpcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIGEgbmV3IGluZGVwZW50IG9uZVxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gaG93IG11Y2ggdGhlIHByZWRhdG9yIGZlZWxzIGhpcyBmdXR1cmUgdmljdGltXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucHJlZGF0b3IgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxMS4yMjQxMzA2MzA0OTMxNjQgKiBhbW91bnQsIC00Ljc5NDQ4Njk5OTUxMTcxOSAqIGFtb3VudCwgLTIuODc0NjExODU0NTUzMjIyNyAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC40MDM0MjQzODIyMDk3Nzc4MyAqIGFtb3VudCxcbiAgICAgICAgLTMuNjMzMDY5NzUzNjQ2ODUwNiAqIGFtb3VudCwgOS4xOTMxNTcxOTYwNDQ5MjIgKiBhbW91bnQsIC0yLjk1MTgxMDgzNjc5MTk5MiAqIGFtb3VudCwgMCAqIGFtb3VudCwgLTEuMzE2MTM1MDQ4ODY2MjcyICogYW1vdW50LFxuICAgICAgICAtMy4yMTg0MTk3OTAyNjc5NDQzICogYW1vdW50LCAtNC4yMzc1MDMwNTE3NTc4MTI1ICogYW1vdW50LCA3LjQ3NjQ0ODA1OTA4MjAzMSAqIGFtb3VudCwgMCAqIGFtb3VudCwgMC44MDQ0NDU5MjIzNzQ3MjUzICogYW1vdW50LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogTFNEIGVmZmVjdFxuICpcbiAqIE11bHRpcGx5IHRoZSBjdXJyZW50IG1hdHJpeFxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gSG93IGNyYXp5IGlzIHlvdXIgZWZmZWN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubHNkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDIsIC0wLjQsIDAuNSwgMCwgMCxcbiAgICAgICAgLTAuNSwgMiwgLTAuNCwgMCwgMCxcbiAgICAgICAgLTAuNCwgLTAuNSwgMywgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIEVyYXNlIHRoZSBjdXJyZW50IG1hdHJpeCBieSBzZXR0aW5nIHRoZSBkZWZhdWx0IG9uZVxuICpcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLCAwLCAwLCAwLCAwLFxuICAgICAgICAwLCAxLCAwLCAwLCAwLFxuICAgICAgICAwLCAwLCAxLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBmYWxzZSk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hdHJpeCBvZiB0aGUgY29sb3IgbWF0cml4IGZpbHRlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvck1hdHJpeEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCBbMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMF1cbiAgICAgKi9cbiAgICBtYXRyaXg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgbG93ZXJzIHRoZSBjb2xvciBkZXB0aCBvZiB5b3VyIGltYWdlIGJ5IHRoZSBnaXZlbiBhbW91bnQsIHByb2R1Y2luZyBhbiBpbWFnZSB3aXRoIGEgc21hbGxlciBwYWxldHRlLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvclN0ZXBGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc3RlcDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBjb2xvciA9IGZsb29yKGNvbG9yICogc3RlcCkgLyBzdGVwO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdGVwOiB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb2xvclN0ZXBGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yU3RlcEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2Ygc3RlcHMgdG8gcmVkdWNlIHRoZSBwYWxldHRlIGJ5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29sb3JTdGVwRmlsdGVyI1xuICAgICAqL1xuICAgIHN0ZXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGVwLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb252b2x1dGlvbkZpbHRlciBjbGFzcyBhcHBsaWVzIGEgbWF0cml4IGNvbnZvbHV0aW9uIGZpbHRlciBlZmZlY3QuXG4gKiBBIGNvbnZvbHV0aW9uIGNvbWJpbmVzIHBpeGVscyBpbiB0aGUgaW5wdXQgaW1hZ2Ugd2l0aCBuZWlnaGJvcmluZyBwaXhlbHMgdG8gcHJvZHVjZSBhIG5ldyBpbWFnZS5cbiAqIEEgd2lkZSB2YXJpZXR5IG9mIGltYWdlIGVmZmVjdHMgY2FuIGJlIGFjaGlldmVkIHRocm91Z2ggY29udm9sdXRpb25zLCBpbmNsdWRpbmcgYmx1cnJpbmcsIGVkZ2VcbiAqIGRldGVjdGlvbiwgc2hhcnBlbmluZywgZW1ib3NzaW5nLCBhbmQgYmV2ZWxpbmcuIFRoZSBtYXRyaXggc2hvdWxkIGJlIHNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBTZWUgaHR0cDovL2RvY3MuZ2ltcC5vcmcvZW4vcGx1Zy1pbi1jb252bWF0cml4Lmh0bWwgZm9yIG1vcmUgaW5mby5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSBBbiBhcnJheSBvZiB2YWx1ZXMgdXNlZCBmb3IgbWF0cml4IHRyYW5zZm9ybWF0aW9uLiBTcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFdpZHRoIG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAqL1xuZnVuY3Rpb24gQ29udm9sdXRpb25GaWx0ZXIobWF0cml4LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgbWVkaXVtcCB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTtcXG51bmlmb3JtIGZsb2F0IG1hdHJpeFs5XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjNCBjMTEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgLSB0ZXhlbFNpemUpOyAvLyB0b3AgbGVmdFxcbiAgIHZlYzQgYzEyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55IC0gdGV4ZWxTaXplLnkpKTsgLy8gdG9wIGNlbnRlclxcbiAgIHZlYzQgYzEzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgcmlnaHRcXG5cXG4gICB2ZWM0IGMyMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCBsZWZ0XFxuICAgdmVjNCBjMjIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpOyAvLyBtaWQgY2VudGVyXFxuICAgdmVjNCBjMjMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSkpOyAvLyBtaWQgcmlnaHRcXG5cXG4gICB2ZWM0IGMzMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggLSB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGxlZnRcXG4gICB2ZWM0IGMzMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLngsIHZUZXh0dXJlQ29vcmQueSArIHRleGVsU2l6ZS55KSk7IC8vIGJvdHRvbSBjZW50ZXJcXG4gICB2ZWM0IGMzMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIHRleGVsU2l6ZSk7IC8vIGJvdHRvbSByaWdodFxcblxcbiAgIGdsX0ZyYWdDb2xvciA9XFxuICAgICAgIGMxMSAqIG1hdHJpeFswXSArIGMxMiAqIG1hdHJpeFsxXSArIGMxMyAqIG1hdHJpeFsyXSArXFxuICAgICAgIGMyMSAqIG1hdHJpeFszXSArIGMyMiAqIG1hdHJpeFs0XSArIGMyMyAqIG1hdHJpeFs1XSArXFxuICAgICAgIGMzMSAqIG1hdHJpeFs2XSArIGMzMiAqIG1hdHJpeFs3XSArIGMzMyAqIG1hdHJpeFs4XTtcXG5cXG4gICBnbF9GcmFnQ29sb3IuYSA9IGMyMi5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hdHJpeDogICAgIHsgdHlwZTogJzFmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCkgfSxcbiAgICAgICAgICAgIHRleGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSAvIHdpZHRoLCB5OiAxIC8gaGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb252b2x1dGlvbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29udm9sdXRpb25GaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hdHJpeC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMS90aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueCA9IDEvdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSGVpZ2h0IG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS55ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQSBDcm9zcyBIYXRjaCBlZmZlY3QgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDcm9zc0hhdGNoRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGZsb2F0IGx1bSA9IGxlbmd0aCh0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQueHkpLnJnYik7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wLCAxLjAsIDEuMCwgMS4wKTtcXG5cXG4gICAgaWYgKGx1bSA8IDEuMDApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC43NSlcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjUwKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54ICsgZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuMylcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCAtIGdsX0ZyYWdDb29yZC55IC0gNS4wLCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblwiXG4gICAgKTtcbn1cblxuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNyb3NzSGF0Y2hGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ3Jvc3NIYXRjaEZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBEaXNwbGFjZW1lbnRGaWx0ZXIgY2xhc3MgdXNlcyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20gdGhlIHNwZWNpZmllZCB0ZXh0dXJlIChjYWxsZWQgdGhlIGRpc3BsYWNlbWVudCBtYXApIHRvIHBlcmZvcm0gYSBkaXNwbGFjZW1lbnQgb2YgYW4gb2JqZWN0LlxuICogWW91IGNhbiB1c2UgdGhpcyBmaWx0ZXIgdG8gYXBwbHkgYWxsIG1hbm9yIG9mIGNyYXp5IHdhcnBpbmcgZWZmZWN0c1xuICogQ3VycmVudGx5IHRoZSByIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB4IGFuZCB0aGUgZyBwcm9wZXJ0eSBvZiB0aGUgdGV4dHVyZSBpcyB1c2VkIHRvIG9mZnNldCB0aGUgeS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiAobWFrZSBzdXJlIGl0cyBhZGRlZCB0byB0aGUgc2NlbmUhKVxuICovXG5mdW5jdGlvbiBEaXNwbGFjZW1lbnRGaWx0ZXIoc3ByaXRlLCBzY2FsZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBjb3JlLk1hdHJpeCgpO1xuICAgIHNwcml0ZS5yZW5kZXJhYmxlID0gZmFsc2U7XG5cbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2TWFwQ29vcmQgPSAoIG90aGVyTWF0cml4ICogdmVjMyggYVRleHR1cmVDb29yZCwgMS4wKSAgKS54eTtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXBDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMiBzY2FsZTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXBTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IG1hcCA9ICB0ZXh0dXJlMkQobWFwU2FtcGxlciwgdk1hcENvb3JkKTtcXG5cXG4gICBtYXAgLT0gMC41O1xcbiAgIG1hcC54eSAqPSBzY2FsZTtcXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgbWFwLngsIHZUZXh0dXJlQ29vcmQueSArIG1hcC55KSk7XFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtYXBTYW1wbGVyOiAgICAgeyB0eXBlOiAnc2FtcGxlcjJEJywgdmFsdWU6IHNwcml0ZS50ZXh0dXJlIH0sXG4gICAgICAgICAgICBvdGhlck1hdHJpeDogICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBtYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSkgfSxcbiAgICAgICAgICAgIHNjYWxlOiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG5cbiAgICBpZiAoc2NhbGUgPT09IG51bGwgfHwgc2NhbGUgPT09IHVuZGVmaW5lZClcbiAgICB7XG4gICAgICAgIHNjYWxlID0gMjA7XG4gICAgfVxuXG4gICAgdGhpcy5zY2FsZSA9IG5ldyBjb3JlLlBvaW50KHNjYWxlLCBzY2FsZSk7XG59XG5cbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEaXNwbGFjZW1lbnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERpc3BsYWNlbWVudEZpbHRlcjtcblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICBmaWx0ZXJNYW5hZ2VyLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeChpbnB1dC5mcmFtZSwgdGhpcy5tYXNrU3ByaXRlLCB0aGlzLm1hc2tNYXRyaXgpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5vdGhlck1hdHJpeC52YWx1ZSA9IHRoaXMubWFza01hdHJpeC50b0FycmF5KHRydWUpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueCA9IHRoaXMuc2NhbGUueCAqICgxL2lucHV0LmZyYW1lLndpZHRoKTtcbiAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlLnkgPSB0aGlzLnNjYWxlLnkgKiAoMS9pbnB1dC5mcmFtZS5oZWlnaHQpO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRGlzcGxhY2VtZW50RmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hcFNhbXBsZXIudmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvZnVuL2RvdHNjcmVlbi5qc1xuICovXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIGRvdHNjcmVlbiBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgdG8gYmUgbWFkZSBvdXQgb2ZcbiAqIGJsYWNrIGFuZCB3aGl0ZSBoYWxmdG9uZSBkb3RzIGxpa2UgYW4gb2xkIHByaW50ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIERvdFNjcmVlbkZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XFxuXFxuZmxvYXQgcGF0dGVybigpXFxue1xcbiAgIGZsb2F0IHMgPSBzaW4oYW5nbGUpLCBjID0gY29zKGFuZ2xlKTtcXG4gICB2ZWMyIHRleCA9IHZUZXh0dXJlQ29vcmQgKiBkaW1lbnNpb25zLnh5O1xcbiAgIHZlYzIgcG9pbnQgPSB2ZWMyKFxcbiAgICAgICBjICogdGV4LnggLSBzICogdGV4LnksXFxuICAgICAgIHMgKiB0ZXgueCArIGMgKiB0ZXgueVxcbiAgICkgKiBzY2FsZTtcXG4gICByZXR1cm4gKHNpbihwb2ludC54KSAqIHNpbihwb2ludC55KSkgKiA0LjA7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGZsb2F0IGF2ZXJhZ2UgPSAoY29sb3IuciArIGNvbG9yLmcgKyBjb2xvci5iKSAvIDMuMDtcXG4gICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzMoYXZlcmFnZSAqIDEwLjAgLSA1LjAgKyBwYXR0ZXJuKCkpLCBjb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzY2FsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEb3RTY3JlZW5GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERvdFNjcmVlbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBzY2FsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSByYWRpdXMgb2YgdGhlIGVmZmVjdC5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Eb3RTY3JlZW5GaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllUaW50RmlsdGVyIGFwcGxpZXMgYSB2ZXJ0aWNhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1cllUaW50RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24rb2Zmc2V0KSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMyBjb2xvcjtcXG51bmlmb3JtIGZsb2F0IGFscGhhO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBzdW0gPSB2ZWM0KDAuMCk7XFxuXFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KCBjb2xvci5yZ2IgKiBzdW0uYSAqIGFscGhhLCBzdW0uYSAqIGFscGhhICk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgLyA1MTIgfSxcbiAgICAgICAgICAgIGNvbG9yOiB7IHR5cGU6ICdjJywgdmFsdWU6IFswLDAsMF19LFxuICAgICAgICAgICAgYWxwaGE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNyB9LFxuICAgICAgICAgICAgb2Zmc2V0OiB7IHR5cGU6ICcyZicsIHZhbHVlOls1LCA1XX0sXG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZToxfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJZVGludEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllUaW50RmlsdGVyO1xuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUuaGVpZ2h0IC8gaW5wdXQuc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5wYXNzZXMgPT09IDEpXG4gICAge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG4gICAgICAgIHZhciBmbGlwID0gaW5wdXQ7XG4gICAgICAgIHZhciBmbG9wID0gcmVuZGVyVGFyZ2V0O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBmbG9wLCBjbGVhcik7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJZVGludEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllUaW50RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZVGludEZpbHRlciA9IHJlcXVpcmUoJy4vQmx1cllUaW50RmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIERyb3BTaGFkb3dGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRHJvcFNoYWRvd0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyID0gbmV3IEJsdXJZVGludEZpbHRlcigpO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIHRoaXMucGFkZGluZyA9IDMwO1xuXG4gICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgdGhpcy5fYW5nbGUgPSA0NSAqIE1hdGguUEkgLyAxODA7XG4gICAgdGhpcy5fZGlzdGFuY2UgPSAxMDtcbiAgICB0aGlzLmFscGhhID0gMC43NTtcbiAgICB0aGlzLmhpZGVPYmplY3QgPSBmYWxzZTtcbiAgICB0aGlzLmJsZW5kTW9kZSA9IGNvcmUuQkxFTkRfTU9ERVMuTVVMVElQTFk7XG59XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERyb3BTaGFkb3dGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IERyb3BTaGFkb3dGaWx0ZXI7XG5cbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICBpZih0aGlzLl9kaXJ0eVBvc2l0aW9uKVxuICAgIHtcbiAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVswXSA9IE1hdGguc2luKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5vZmZzZXQudmFsdWVbMV0gPSBNYXRoLmNvcyh0aGlzLl9hbmdsZSkgKiB0aGlzLl9kaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKHRoaXMuYmxlbmRNb2RlKTtcblxuICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZighdGhpcy5oaWRlT2JqZWN0KVxuICAgIHtcblxuICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuICAgIH1cblxuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNvbG9yIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgY29sb3I6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIGNvcmUudXRpbHMucmdiMmhleCggdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmNvbG9yLnZhbHVlID0gY29yZS51dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbHBoYSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFscGhhOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzdGFuY2Ugb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBkaXN0YW5jZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3RhbmNlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYW5nbGUgb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fYW5nbGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2FuZ2xlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZ3JleXNjYWxlcyB0aGUgcGFsZXR0ZSBvZiB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gR3JheUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGdyYXk7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peChnbF9GcmFnQ29sb3IucmdiLCB2ZWMzKDAuMjEyNipnbF9GcmFnQ29sb3IuciArIDAuNzE1MipnbF9GcmFnQ29sb3IuZyArIDAuMDcyMipnbF9GcmFnQ29sb3IuYiksIGdyYXkpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBncmF5OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkdyYXlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5HcmF5RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEdyYXlGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmF5LiAxIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGJsYWNrIGFuZCB3aGl0ZSwgMCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuR3JheUZpbHRlciNcbiAgICAgKi9cbiAgICBncmF5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JheS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBmaWx0ZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5maWx0ZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEFzY2lpRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9hc2NpaS9Bc2NpaUZpbHRlcicpLFxuICAgIEJsb29tRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibG9vbS9CbG9vbUZpbHRlcicpLFxuICAgIEJsdXJGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJGaWx0ZXInKSxcbiAgICBCbHVyWEZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJZRmlsdGVyJyksXG4gICAgQmx1ckRpckZpbHRlcjogICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckRpckZpbHRlcicpLFxuICAgIENvbG9yTWF0cml4RmlsdGVyOiAgcmVxdWlyZSgnLi9jb2xvci9Db2xvck1hdHJpeEZpbHRlcicpLFxuICAgIENvbG9yU3RlcEZpbHRlcjogICAgcmVxdWlyZSgnLi9jb2xvci9Db2xvclN0ZXBGaWx0ZXInKSxcbiAgICBDb252b2x1dGlvbkZpbHRlcjogIHJlcXVpcmUoJy4vY29udm9sdXRpb24vQ29udm9sdXRpb25GaWx0ZXInKSxcbiAgICBDcm9zc0hhdGNoRmlsdGVyOiAgIHJlcXVpcmUoJy4vY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyJyksXG4gICAgRGlzcGxhY2VtZW50RmlsdGVyOiByZXF1aXJlKCcuL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXInKSxcbiAgICBEb3RTY3JlZW5GaWx0ZXI6ICAgIHJlcXVpcmUoJy4vZG90L0RvdFNjcmVlbkZpbHRlcicpLFxuICAgIEdyYXlGaWx0ZXI6ICAgICAgICAgcmVxdWlyZSgnLi9ncmF5L0dyYXlGaWx0ZXInKSxcbiAgICBEcm9wU2hhZG93RmlsdGVyOiAgIHJlcXVpcmUoJy4vZHJvcHNoYWRvdy9Ecm9wU2hhZG93RmlsdGVyJyksXG4gICAgSW52ZXJ0RmlsdGVyOiAgICAgICByZXF1aXJlKCcuL2ludmVydC9JbnZlcnRGaWx0ZXInKSxcbiAgICBOb2lzZUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vbm9pc2UvTm9pc2VGaWx0ZXInKSxcbiAgICBQaXhlbGF0ZUZpbHRlcjogICAgIHJlcXVpcmUoJy4vcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXInKSxcbiAgICBSR0JTcGxpdEZpbHRlcjogICAgIHJlcXVpcmUoJy4vcmdiL1JHQlNwbGl0RmlsdGVyJyksXG4gICAgU2hvY2t3YXZlRmlsdGVyOiAgICByZXF1aXJlKCcuL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXInKSxcbiAgICBTZXBpYUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vc2VwaWEvU2VwaWFGaWx0ZXInKSxcbiAgICBTbWFydEJsdXJGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vYmx1ci9TbWFydEJsdXJGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFhGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXI6ICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlcicpLFxuICAgIFR3aXN0RmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi90d2lzdC9Ud2lzdEZpbHRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBpbnZlcnRzIHlvdXIgRGlzcGxheSBPYmplY3RzIGNvbG9ycy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gSW52ZXJ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIGZsb2F0IGludmVydDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoICh2ZWMzKDEpLWdsX0ZyYWdDb2xvci5yZ2IpICogZ2xfRnJhZ0NvbG9yLmEsIGdsX0ZyYWdDb2xvci5yZ2IsIDEuMCAtIGludmVydCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgaW52ZXJ0OiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkludmVydEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkludmVydEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnZlcnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludmVydEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgaW52ZXJ0LiBgMWAgd2lsbCBmdWxseSBpbnZlcnQgdGhlIGNvbG9ycywgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5JbnZlcnRGaWx0ZXIjXG4gICAgICovXG4gICAgaW52ZXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuaW52ZXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlcjogaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYWRqdXN0L25vaXNlLmpzXG4gKi9cblxuLyoqXG4gKiBBIE5vaXNlIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIE5vaXNlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IG5vaXNlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbmZsb2F0IHJhbmQodmVjMiBjbylcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGNvLnh5LCB2ZWMyKDEyLjk4OTgsIDc4LjIzMykpKSAqIDQzNzU4LjU0NTMpO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGZsb2F0IGRpZmYgPSAocmFuZCh2VGV4dHVyZUNvb3JkKSAtIDAuNSkgKiBub2lzZTtcXG5cXG4gICAgY29sb3IuciArPSBkaWZmO1xcbiAgICBjb2xvci5nICs9IGRpZmY7XFxuICAgIGNvbG9yLmIgKz0gZGlmZjtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbm9pc2U6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Ob2lzZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbk5vaXNlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE5vaXNlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBOb2lzZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTm9pc2VGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGFtb3VudCBvZiBub2lzZSB0byBhcHBseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLk5vaXNlRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDAuNVxuICAgICAqL1xuICAgIG5vaXNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm5vaXNlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSBwaXhlbGF0ZSBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgJ2Jsb2NreScuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFBpeGVsYXRlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcGl4ZWxTaXplO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZlYzIgc2l6ZSA9IGRpbWVuc2lvbnMueHkgLyBwaXhlbFNpemU7XFxuXFxuICAgIHZlYzIgY29sb3IgPSBmbG9vciggKCB2VGV4dHVyZUNvb3JkICogc2l6ZSApICkgLyBzaXplICsgcGl4ZWxTaXplL2RpbWVuc2lvbnMueHkgKiAwLjU7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgY29sb3IpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsICB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMCwgMF0pIH0sXG4gICAgICAgICAgICBwaXhlbFNpemU6ICB7IHR5cGU6ICd2MicsICAgdmFsdWU6IHsgeDogMTAsIHk6IDEwIH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQaXhlbGF0ZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gUGl4ZWxhdGVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgYSBwb2ludCB0aGF0IGRlc2NyaWJlcyB0aGUgc2l6ZSBvZiB0aGUgYmxvY2tzLlxuICAgICAqIHggaXMgdGhlIHdpZHRoIG9mIHRoZSBibG9jayBhbmQgeSBpcyB0aGUgaGVpZ2h0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlBpeGVsYXRlRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBbiBSR0IgU3BsaXQgRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBSR0JTcGxpdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSB2ZWMyIHJlZDtcXG51bmlmb3JtIHZlYzIgZ3JlZW47XFxudW5pZm9ybSB2ZWMyIGJsdWU7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvci5yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgcmVkL2RpbWVuc2lvbnMueHkpLnI7XFxuICAgZ2xfRnJhZ0NvbG9yLmcgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBncmVlbi9kaW1lbnNpb25zLnh5KS5nO1xcbiAgIGdsX0ZyYWdDb2xvci5iID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgYmx1ZS9kaW1lbnNpb25zLnh5KS5iO1xcbiAgIGdsX0ZyYWdDb2xvci5hID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKS5hO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZDogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGdyZWVuOiAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogLTIwLCB5OiAyMCB9IH0sXG4gICAgICAgICAgICBibHVlOiAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDIwLCB5OiAtMjAgfSB9LFxuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLCAwLCAwLCAwXSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5SR0JTcGxpdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJHQlNwbGl0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBSR0JTcGxpdEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogUmVkIGNoYW5uZWwgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIHJlZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJlZC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR3JlZW4gY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JlZW46IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JlZW4udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBCbHVlIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYmx1ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGFwcGxpZXMgYSBzZXBpYSBlZmZlY3QgdG8geW91ciBEaXNwbGF5IE9iamVjdHMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNlcGlhRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHNlcGlhO1xcblxcbmNvbnN0IG1hdDMgc2VwaWFNYXRyaXggPSBtYXQzKDAuMzU4OCwgMC43MDQ0LCAwLjEzNjgsIDAuMjk5MCwgMC41ODcwLCAwLjExNDAsIDAuMjM5MiwgMC40Njk2LCAwLjA5MTIpO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGdsX0ZyYWdDb2xvci5yZ2IgKiBzZXBpYU1hdHJpeCwgc2VwaWEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNlcGlhOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNlcGlhRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU2VwaWFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2VwaWFGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNlcGlhRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTZXBpYUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIHNlcGlhLiBgMWAgd2lsbCBhcHBseSB0aGUgZnVsbCBzZXBpYSBlZmZlY3QsIGFuZFxuICAgICAqIGAwYCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2VwaWFGaWx0ZXIjXG4gICAgICovXG4gICAgc2VwaWE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc2VwaWEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbG9yTWF0cml4RmlsdGVyIGNsYXNzIGxldHMgeW91IGFwcGx5IGEgNHg0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgUkdCQVxuICogY29sb3IgYW5kIGFscGhhIHZhbHVlcyBvZiBldmVyeSBwaXhlbCBvbiB5b3VyIGRpc3BsYXlPYmplY3QgdG8gcHJvZHVjZSBhIHJlc3VsdFxuICogd2l0aCBhIG5ldyBzZXQgb2YgUkdCQSBjb2xvciBhbmQgYWxwaGEgdmFsdWVzLiBJdCdzIHByZXR0eSBwb3dlcmZ1bCFcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2hvY2t3YXZlRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG51bmlmb3JtIHZlYzIgY2VudGVyO1xcbnVuaWZvcm0gdmVjMyBwYXJhbXM7IC8vIDEwLjAsIDAuOCwgMC4xXFxudW5pZm9ybSBmbG9hdCB0aW1lO1xcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIHV2ID0gdlRleHR1cmVDb29yZDtcXG4gICAgdmVjMiB0ZXhDb29yZCA9IHV2O1xcblxcbiAgICBmbG9hdCBkaXN0ID0gZGlzdGFuY2UodXYsIGNlbnRlcik7XFxuXFxuICAgIGlmICggKGRpc3QgPD0gKHRpbWUgKyBwYXJhbXMueikpICYmIChkaXN0ID49ICh0aW1lIC0gcGFyYW1zLnopKSApXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IGRpZmYgPSAoZGlzdCAtIHRpbWUpO1xcbiAgICAgICAgZmxvYXQgcG93RGlmZiA9IDEuMCAtIHBvdyhhYnMoZGlmZipwYXJhbXMueCksIHBhcmFtcy55KTtcXG5cXG4gICAgICAgIGZsb2F0IGRpZmZUaW1lID0gZGlmZiAgKiBwb3dEaWZmO1xcbiAgICAgICAgdmVjMiBkaWZmVVYgPSBub3JtYWxpemUodXYgLSBjZW50ZXIpO1xcbiAgICAgICAgdGV4Q29vcmQgPSB1diArIChkaWZmVVYgKiBkaWZmVGltZSk7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB0ZXhDb29yZCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgY2VudGVyOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfSxcbiAgICAgICAgICAgIHBhcmFtczogeyB0eXBlOiAndjMnLCB2YWx1ZTogeyB4OiAxMCwgeTogMC44LCB6OiAwLjEgfSB9LFxuICAgICAgICAgICAgdGltZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hvY2t3YXZlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaG9ja3dhdmVGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjZW50ZXIgb2YgdGhlIHNob2Nrd2F2ZSBpbiBub3JtYWxpemVkIHNjcmVlbiBjb29yZHMuIFRoYXQgaXNcbiAgICAgKiAoMCwwKSBpcyB0aGUgdG9wLWxlZnQgYW5kICgxLDEpIGlzIHRoZSBib3R0b20gcmlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBudW1iZXI+fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIGNlbnRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmNlbnRlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBhcmFtcyBvZiB0aGUgc2hvY2t3YXZlLiBUaGVzZSBtb2RpZnkgdGhlIGxvb2sgYW5kIGJlaGF2aW9yIG9mXG4gICAgICogdGhlIHNob2Nrd2F2ZSBhcyBpdCByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgcGFyYW1zOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGFyYW1zLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZWxhcHNlZCB0aW1lIG9mIHRoZSBzaG9ja3dhdmUuIFRoaXMgY29udHJvbHMgdGhlIHNwZWVkIGF0IHdoaWNoXG4gICAgICogdGhlIHNob2Nrd2F2ZSByaXBwbGVzIG91dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICB0aW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0QXhpc0ZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0QXhpc0ZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBibHVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JhZGllbnRCbHVyO1xcbnVuaWZvcm0gdmVjMiBzdGFydDtcXG51bmlmb3JtIHZlYzIgZW5kO1xcbnVuaWZvcm0gdmVjMiBkZWx0YTtcXG51bmlmb3JtIHZlYzIgdGV4U2l6ZTtcXG5cXG5mbG9hdCByYW5kb20odmVjMyBzY2FsZSwgZmxvYXQgc2VlZClcXG57XFxuICAgIHJldHVybiBmcmFjdChzaW4oZG90KGdsX0ZyYWdDb29yZC54eXogKyBzZWVkLCBzY2FsZSkpICogNDM3NTguNTQ1MyArIHNlZWQpO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHRvdGFsID0gMC4wO1xcblxcbiAgICBmbG9hdCBvZmZzZXQgPSByYW5kb20odmVjMygxMi45ODk4LCA3OC4yMzMsIDE1MS43MTgyKSwgMC4wKTtcXG4gICAgdmVjMiBub3JtYWwgPSBub3JtYWxpemUodmVjMihzdGFydC55IC0gZW5kLnksIGVuZC54IC0gc3RhcnQueCkpO1xcbiAgICBmbG9hdCByYWRpdXMgPSBzbW9vdGhzdGVwKDAuMCwgMS4wLCBhYnMoZG90KHZUZXh0dXJlQ29vcmQgKiB0ZXhTaXplIC0gc3RhcnQsIG5vcm1hbCkpIC8gZ3JhZGllbnRCbHVyKSAqIGJsdXI7XFxuXFxuICAgIGZvciAoZmxvYXQgdCA9IC0zMC4wOyB0IDw9IDMwLjA7IHQrKylcXG4gICAge1xcbiAgICAgICAgZmxvYXQgcGVyY2VudCA9ICh0ICsgb2Zmc2V0IC0gMC41KSAvIDMwLjA7XFxuICAgICAgICBmbG9hdCB3ZWlnaHQgPSAxLjAgLSBhYnMocGVyY2VudCk7XFxuICAgICAgICB2ZWM0IHNhbXBsZSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGRlbHRhIC8gdGV4U2l6ZSAqIHBlcmNlbnQgKiByYWRpdXMpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBibHVyOiAgICAgICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMTAwIH0sXG4gICAgICAgICAgICBncmFkaWVudEJsdXI6ICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNjAwIH0sXG4gICAgICAgICAgICBzdGFydDogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLCAgICB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIH0gfSxcbiAgICAgICAgICAgIGVuZDogICAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDYwMCwgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZGVsdGE6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMzAsICAgeTogMzAgfSB9LFxuICAgICAgICAgICAgdGV4U2l6ZTogICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogd2luZG93LmlubmVyV2lkdGgsIHk6IHdpbmRvdy5pbm5lckhlaWdodCB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG59XG5cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEF4aXNGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiB0aGUgWCBhbmQgWSBmaWx0ZXJzLCBkb2VzIG5vdGhpbmcgZm9yIHRoaXMgY2xhc3MuXG4gKlxuICovXG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gMDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSAwO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmFkaWVudEJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIHN0YXJ0IHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBYIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgZW5kOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WEZpbHRlcicpLFxuICAgIFRpbHRTaGlmdFlGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdFlGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0IEZpbHRlci4gTWFuYWdlcyB0aGUgcGFzcyBvZiBib3RoIGEgVGlsdFNoaWZ0WEZpbHRlciBhbmQgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIgPSBuZXcgVGlsdFNoaWZ0WEZpbHRlcigpO1xuICAgIHRoaXMudGlsdFNoaWZ0WUZpbHRlciA9IG5ldyBUaWx0U2hpZnRZRmlsdGVyKCk7XG59XG5cblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdEZpbHRlcjtcblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JhZGllbnQgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmFkaWVudEJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ncmFkaWVudEJsdXIgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZ3JhZGllbnRCbHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFkgdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBzdGFydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuc3RhcnQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuc3RhcnQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBlbmQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5lbmQgPSB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuZW5kID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBUaWx0U2hpZnRBeGlzRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRBeGlzRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdFhGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRpbHRTaGlmdEF4aXNGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0WEZpbHRlcigpXG57XG4gICAgVGlsdFNoaWZ0QXhpc0ZpbHRlci5jYWxsKHRoaXMpO1xufVxuXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRYRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRYRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKlxuICovXG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGR4ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueCAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueDtcbiAgICB2YXIgZHkgPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS55IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS55O1xuICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IGR4IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeSAvIGQ7XG59O1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WUZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRZRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFlGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gLWR5IC8gZDtcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnkgPSBkeCAvIGQ7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHR3aXN0IGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0d2lzdGVkIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFR3aXN0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHJhZGl1cztcXG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xcbnVuaWZvcm0gdmVjMiBvZmZzZXQ7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzIgY29vcmQgPSB2VGV4dHVyZUNvb3JkIC0gb2Zmc2V0O1xcbiAgIGZsb2F0IGRpc3QgPSBsZW5ndGgoY29vcmQpO1xcblxcbiAgIGlmIChkaXN0IDwgcmFkaXVzKVxcbiAgIHtcXG4gICAgICAgZmxvYXQgcmF0aW8gPSAocmFkaXVzIC0gZGlzdCkgLyByYWRpdXM7XFxuICAgICAgIGZsb2F0IGFuZ2xlTW9kID0gcmF0aW8gKiByYXRpbyAqIGFuZ2xlO1xcbiAgICAgICBmbG9hdCBzID0gc2luKGFuZ2xlTW9kKTtcXG4gICAgICAgZmxvYXQgYyA9IGNvcyhhbmdsZU1vZCk7XFxuICAgICAgIGNvb3JkID0gdmVjMihjb29yZC54ICogYyAtIGNvb3JkLnkgKiBzLCBjb29yZC54ICogcyArIGNvb3JkLnkgKiBjKTtcXG4gICB9XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCtvZmZzZXQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhZGl1czogICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDAuNSB9LFxuICAgICAgICAgICAgYW5nbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9LFxuICAgICAgICAgICAgb2Zmc2V0OiAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjUsIHk6IDAuNSB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblR3aXN0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVHdpc3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHdpc3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFR3aXN0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUd2lzdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IGRlc2NyaWJlcyB0aGUgdGhlIG9mZnNldCBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgb2Zmc2V0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHJhZGl1cyBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICByYWRpdXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5yYWRpdXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgYW5nbGUgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiLy8gcnVuIHRoZSBwb2x5ZmlsbHNcbnJlcXVpcmUoJy4vcG9seWZpbGwnKTtcblxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29yZScpO1xuXG4vLyBhZGQgY29yZSBwbHVnaW5zLlxuY29yZS5leHRyYXMgICAgICAgICA9IHJlcXVpcmUoJy4vZXh0cmFzJyk7XG5jb3JlLmZpbHRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5jb3JlLmludGVyYWN0aW9uICAgID0gcmVxdWlyZSgnLi9pbnRlcmFjdGlvbicpO1xuY29yZS5sb2FkZXJzICAgICAgICA9IHJlcXVpcmUoJy4vbG9hZGVycycpO1xuY29yZS5tZXNoICAgICAgICAgICA9IHJlcXVpcmUoJy4vbWVzaCcpO1xuY29yZS5hY2Nlc3NpYmlsaXR5ICA9IHJlcXVpcmUoJy4vYWNjZXNzaWJpbGl0eScpO1xuXG4vLyBleHBvcnQgYSBwcmVtYWRlIGxvYWRlciBpbnN0YW5jZVxuLyoqXG4gKiBBIHByZW1hZGUgaW5zdGFuY2Ugb2YgdGhlIGxvYWRlciB0aGF0IGNhbiBiZSB1c2VkIHRvIGxvYWRlciByZXNvdXJjZXMuXG4gKlxuICogQG5hbWUgbG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHByb3BlcnR5IHtQSVhJLmxvYWRlcnMuTG9hZGVyfVxuICovXG5jb3JlLmxvYWRlciA9IG5ldyBjb3JlLmxvYWRlcnMuTG9hZGVyKCk7XG5cbi8vIG1peGluIHRoZSBkZXByZWNhdGlvbiBmZWF0dXJlcy5cbk9iamVjdC5hc3NpZ24oY29yZSwgcmVxdWlyZSgnLi9kZXByZWNhdGlvbicpKTtcblxuLy8gQWx3YXlzIGV4cG9ydCBwaXhpIGdsb2JhbGx5LlxuZ2xvYmFsLlBJWEkgPSBjb3JlO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogSG9sZHMgYWxsIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gYW4gSW50ZXJhY3Rpb24gZXZlbnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uRGF0YSgpXG57XG4gICAgLyoqXG4gICAgICogVGhpcyBwb2ludCBzdG9yZXMgdGhlIGdsb2JhbCBjb29yZHMgb2Ygd2hlcmUgdGhlIHRvdWNoL21vdXNlIGV2ZW50IGhhcHBlbmVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuZ2xvYmFsID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgU3ByaXRlIHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TcHJpdGV9XG4gICAgICovXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBwYXNzZWQgdG8gYW4gZXZlbnQgaGFuZGxlciwgdGhpcyB3aWxsIGJlIHRoZSBvcmlnaW5hbCBET00gRXZlbnQgdGhhdCB3YXMgY2FwdHVyZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0V2ZW50fVxuICAgICAqL1xuICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IG51bGw7XG59XG5cbkludGVyYWN0aW9uRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbkRhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uRGF0YTtcblxuLyoqXG4gKiBUaGlzIHdpbGwgcmV0dXJuIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgc3BlY2lmaWVkIGRpc3BsYXlPYmplY3QgZm9yIHRoaXMgSW50ZXJhY3Rpb25EYXRhXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgbG9jYWwgY29vcmRzIG9mZlxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBwb2ludClcbiAqIEBwYXJhbSBbZ2xvYmFsUG9zXSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgY29udGFpbmluZyB5b3VyIGN1c3RvbSBnbG9iYWwgY29vcmRzLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgdXNlIHRoZSBjdXJyZW50IGdsb2JhbCBjb29yZHMpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBJbnRlcmFjdGlvbkRhdGEgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIERpc3BsYXlPYmplY3RcbiAqL1xuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5nZXRMb2NhbFBvc2l0aW9uID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHBvaW50LCBnbG9iYWxQb3MpXG57XG4gICAgcmV0dXJuIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKGdsb2JhbFBvcyB8fCB0aGlzLmdsb2JhbCwgcG9pbnQpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIEludGVyYWN0aW9uRGF0YSA9IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25EYXRhJyk7XG5cbi8vIE1peCBpbnRlcmFjdGl2ZVRhcmdldCBpbnRvIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGVcbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbik7XG5cbi8qKlxuICogVGhlIGludGVyYWN0aW9uIG1hbmFnZXIgZGVhbHMgd2l0aCBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzLiBBbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgaW50ZXJhY3RpdmVcbiAqIGlmIGl0cyBpbnRlcmFjdGl2ZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIHRydWVcbiAqIFRoaXMgbWFuYWdlciBhbHNvIHN1cHBvcnRzIG11bHRpdG91Y2guXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH1cbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQ9dHJ1ZV0ge2Jvb2xlYW59IFNob3VsZCB0aGUgbWFuYWdlciBhdXRvbWF0aWNhbGx5IHByZXZlbnQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMuXG4gKiBAcGFyYW0gW29wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3k9MTBdIHtudW1iZXJ9IEZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQuXG4gKi9cbmZ1bmN0aW9uIEludGVyYWN0aW9uTWFuYWdlcihyZW5kZXJlciwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGludGVyYWN0aW9uIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgZGVmYXVsdCBicm93c2VyIGFjdGlvbnMgYXV0b21hdGljYWxseSBiZSBwcmV2ZW50ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdCA9IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdCA6IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBcyB0aGlzIGZyZXF1ZW5jeSBpbmNyZWFzZXMgdGhlIGludGVyYWN0aW9uIGV2ZW50cyB3aWxsIGJlIGNoZWNrZWQgbW9yZSBvZnRlbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgPSBvcHRpb25zLmludGVyYWN0aW9uRnJlcXVlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vdXNlIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhfVxuICAgICAqL1xuICAgIHRoaXMubW91c2UgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCBkYXRhIG9iamVjdCB0byBoYW5kbGUgYWxsIHRoZSBldmVudCB0cmFja2luZy9kaXNwYXRjaGluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnREYXRhID0ge1xuICAgICAgICBzdG9wcGVkOiBmYWxzZSxcbiAgICAgICAgdGFyZ2V0OiBudWxsLFxuICAgICAgICB0eXBlOiBudWxsLFxuICAgICAgICBkYXRhOiB0aGlzLm1vdXNlLFxuICAgICAgICBzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGlueSBsaXR0bGUgaW50ZXJhY3RpdmVEYXRhIHBvb2wgIVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGFbXX1cbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBET00gZWxlbWVudCB0byBiaW5kIHRvLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTEVsZW1lbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIYXZlIGV2ZW50cyBiZWVuIGF0dGFjaGVkIHRvIHRoZSBkb20gZWxlbWVudD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gZmFsc2U7XG5cbiAgICAvL3RoaXMgd2lsbCBtYWtlIGl0IHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gY2FsbCBiaW5kIGFsbCB0aGUgdGltZVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlVXAgPSB0aGlzLm9uTW91c2VVcC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlVXAgPSB0aGlzLnByb2Nlc3NNb3VzZVVwLmJpbmQoIHRoaXMgKTtcblxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IHRoaXMub25Nb3VzZURvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZURvd24gPSB0aGlzLnByb2Nlc3NNb3VzZURvd24uYmluZCggdGhpcyApO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IHRoaXMub25Nb3VzZU1vdmUuYmluZCggdGhpcyApO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IHRoaXMucHJvY2Vzc01vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VPdXQgPSB0aGlzLm9uTW91c2VPdXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IHRoaXMub25Ub3VjaFN0YXJ0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaEVuZCA9IHRoaXMub25Ub3VjaEVuZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gdGhpcy5wcm9jZXNzVG91Y2hFbmQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaE1vdmUgPSB0aGlzLm9uVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sYXN0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjc3Mgc3R5bGUgb2YgdGhlIGN1cnNvciB0aGF0IGlzIGJlaW5nIHVzZWRcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSAnaW5oZXJpdCc7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjYWNoZWQgdmFyXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCByZXNvbHV0aW9uXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IDE7XG5cbiAgICB0aGlzLnNldFRhcmdldEVsZW1lbnQodGhpcy5yZW5kZXJlci52aWV3LCB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24pO1xufVxuXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJhY3Rpb25NYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5cbi8qKlxuICogU2V0cyB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlL3RvdWNoIGV2ZW50cy4gVGhpcyBpcyB1c2VmdWwgZm9yIHdoZW4geW91IGhhdmVcbiAqIG90aGVyIERPTSBlbGVtZW50cyBvbiB0b3Agb2YgdGhlIHJlbmRlcmVycyBDYW52YXMgZWxlbWVudC4gV2l0aCB0aGlzIHlvdSdsbCBiZSBiYWxlIHRvIGRlbGV0ZWdhdGVcbiAqIGFub3RoZXIgRE9NIGVsZW1lbnQgdG8gcmVjZWl2ZSB0aG9zZSBldmVudHMuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQge0hUTUxFbGVtZW50fSB0aGUgRE9NIGVsZW1lbnQgd2hpY2ggd2lsbCByZWNlaXZlIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVEhlIHJlc29sdXRpb24gb2YgdGhlIG5ldyBlbGVtZW50IChyZWxhdGl2ZSB0byB0aGUgY2FudmFzKS5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuc2V0VGFyZ2V0RWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCByZXNvbHV0aW9uKVxue1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICB0aGlzLmFkZEV2ZW50cygpO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYWxsIHRoZSBET00gZXZlbnRzXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5hZGRFdmVudHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29yZS50aWNrZXIuc2hhcmVkLmFkZCh0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy1jb250ZW50LXpvb21pbmcnXSA9ICdub25lJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICdub25lJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgICAgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgICAgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgICAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCAgIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICAgICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsICAgIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIHRoZSBET00gZXZlbnRzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHJlZ2lzdGVyZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJyc7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnJztcbiAgICB9XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAgdGhpcy5vbk1vdXNlT3V0LCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAgdGhpcy5vblRvdWNoRW5kLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlLCB0cnVlKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgIHRoaXMub25Nb3VzZVVwLCB0cnVlKTtcblxuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc3RhdGUgb2YgaW50ZXJhY3RpdmUgb2JqZWN0cy5cbiAqIEludm9rZWQgYnkgYSB0aHJvdHRsZWQgdGlja2VyIHVwZGF0ZSBmcm9tXG4gKiB7QGxpbmsgUElYSS50aWNrZXIuc2hhcmVkfS5cbiAqXG4gKiBAcGFyYW0gZGVsdGFUaW1lIHtudW1iZXJ9XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB0aGlzLl9kZWx0YVRpbWUgKz0gZGVsdGFUaW1lO1xuXG4gICAgaWYgKHRoaXMuX2RlbHRhVGltZSA8IHRoaXMuaW50ZXJhY3Rpb25GcmVxdWVuY3kpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGVsdGFUaW1lID0gMDtcblxuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHVzZXIgbW92ZSB0aGUgbW91c2UgdGhpcyBjaGVjayBoYXMgYWxyZWFkeSBiZWVuIGRmb25lIHVzaW5nIHRoZSBtb3VzZSBtb3ZlIVxuICAgIGlmKHRoaXMuZGlkTW92ZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlkTW92ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE9cbn07XG5cbi8qKlxuICogRGlzcGF0Y2hlcyBhbiBldmVudCBvbiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIGRpc3BsYXkgb2JqZWN0IGluIHF1ZXN0aW9uXG4gKiBAcGFyYW0gZXZlbnRTdHJpbmcge3N0cmluZ30gdGhlIG5hbWUgb2YgdGhlIGV2ZW50IChlLmcsIG1vdXNlZG93bilcbiAqIEBwYXJhbSBldmVudERhdGEge29iamVjdH0gdGhlIGV2ZW50IGRhdGEgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGV2ZW50U3RyaW5nLCBldmVudERhdGEgKVxue1xuICAgIGlmKCFldmVudERhdGEuc3RvcHBlZClcbiAgICB7XG4gICAgICAgIGV2ZW50RGF0YS50YXJnZXQgPSBkaXNwbGF5T2JqZWN0O1xuICAgICAgICBldmVudERhdGEudHlwZSA9IGV2ZW50U3RyaW5nO1xuXG4gICAgICAgIGRpc3BsYXlPYmplY3QuZW1pdCggZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0W2V2ZW50U3RyaW5nXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddKCBldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogTWFwcyB4IGFuZCB5IGNvb3JkcyBmcm9tIGEgRE9NIG9iamVjdCBhbmQgbWFwcyB0aGVtIGNvcnJlY3RseSB0byB0aGUgcGl4aSB2aWV3LiBUaGUgcmVzdWx0aW5nIHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUgcG9pbnQuXG4gKiBUaGlzIHRha2VzIGludG8gYWNjb3VudCB0aGUgZmFjdCB0aGF0IHRoZSBET00gZWxlbWVudCBjb3VsZCBiZSBzY2FsZWQgYW5kIHBvc2l0aW9uZWQgYW55d2hlcmUgb24gdGhlIHNjcmVlbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCB0aGUgcmVzdWx0IHdpbGwgYmUgc3RvcmVkIGluXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHggICAgIHRoZSB4IGNvb3JkIG9mIHRoZSBwb3NpdGlvbiB0byBtYXBcbiAqIEBwYXJhbSAge251bWJlcn0geSAgICAgdGhlIHkgY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm1hcFBvc2l0aW9uVG9Qb2ludCA9IGZ1bmN0aW9uICggcG9pbnQsIHgsIHkgKVxue1xuICAgIHZhciByZWN0ID0gdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcG9pbnQueCA9ICggKCB4IC0gcmVjdC5sZWZ0ICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQud2lkdGggIC8gcmVjdC53aWR0aCAgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHBvaW50LnkgPSAoICggeSAtIHJlY3QudG9wICApICogKHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmhlaWdodCAvIHJlY3QuaGVpZ2h0ICkgKSAvIHRoaXMucmVzb2x1dGlvbjtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlcyBhIG5lYXQgd2F5IG9mIGNyYXdsaW5nIHRocm91Z2ggdGhlIHNjZW5lIGdyYXBoIGFuZCBydW5uaW5nIGEgc3BlY2lmaWVkIGZ1bmN0aW9uIG9uIGFsbCBpbnRlcmFjdGl2ZSBvYmplY3RzIGl0IGZpbmRzLlxuICogSXQgd2lsbCBhbHNvIHRha2UgY2FyZSBvZiBoaXQgdGVzdGluZyB0aGUgaW50ZXJhY3RpdmUgb2JqZWN0cyBhbmQgcGFzc2VzIHRoZSBoaXQgYWNyb3NzIGluIHRoZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gIHtQSVhJLlBvaW50fSBwb2ludCB0aGUgcG9pbnQgdGhhdCBpcyB0ZXN0ZWQgZm9yIGNvbGxpc2lvblxuICogQHBhcmFtICB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBkaXNwbGF5T2JqZWN0IHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgd2lsbCBiZSBoaXQgdGVzdCAocmVjdXJjc2l2bHkgY3Jhd2xzIGl0cyBjaGlsZHJlbilcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmdW5jIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggaW50ZXJhY3RpdmUgb2JqZWN0LiBUaGUgZGlzcGxheU9iamVjdCBhbmQgaGl0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvblxuICogQHBhcmFtICB7Ym9vbGVhbn0gaGl0VGVzdCB0aGlzIGluZGljYXRlcyBpZiB0aGUgb2JqZWN0cyBpbnNpZGUgc2hvdWxkIGJlIGhpdCB0ZXN0IGFnYWluc3QgdGhlIHBvaW50XG4gKiBAcmV0dXJuIHtib29sZWFufSByZXR1cm5zIHRydWUgaWYgdGhlIGRpc3BsYXlPYmplY3QgaGl0IHRoZSBwb2ludFxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NJbnRlcmFjdGl2ZSA9IGZ1bmN0aW9uIChwb2ludCwgZGlzcGxheU9iamVjdCwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmUpXG57XG4gICAgaWYoIWRpc3BsYXlPYmplY3QgfHwgIWRpc3BsYXlPYmplY3QudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUb29rIGEgbGl0dGxlIHdoaWxlIHRvIHJld29yayB0aGlzIGZ1bmN0aW9uIGNvcnJlY3RseSEgQnV0IG5vdyBpdCBpcyBkb25lIGFuZCBuaWNlIGFuZCBvcHRpbWlzZWQuIF5fXlxuICAgIC8vIFxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBub3cgbG9vcCB0aHJvdWdoIGFsbCBvYmplY3RzIGFuZCB0aGVuIG9ubHkgaGl0IHRlc3QgdGhlIG9iamVjdHMgaXQgSEFTIHRvLCBub3QgYWxsIG9mIHRoZW0uIE1VQ0ggZmFzdGVyLi5cbiAgICAvLyBBbiBvYmplY3Qgd2lsbCBiZSBoaXQgdGVzdCBpZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gICAgLy8gXG4gICAgLy8gMTogSXQgaXMgaW50ZXJhY3RpdmUuXG4gICAgLy8gMjogSXQgYmVsb25ncyB0byBhIHBhcmVudCB0aGF0IGlzIGludGVyYWN0aXZlIEFORCBvbmUgb2YgdGhlIHBhcmVudHMgY2hpbGRyZW4gaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICAvLyBcbiAgICAvLyBBcyBhbm90aGVyIGxpdHRsZSBvcHRpbWlzYXRpb24gb25jZSBhbiBpbnRlcmFjdGl2ZSBvYmplY3QgaGFzIGJlZW4gaGl0IHdlIGNhbiBjYXJyeSBvbiB0aHJvdWdoIHRoZSBzY2VuZWdyYXBoLCBidXQgd2Uga25vdyB0aGF0IHRoZXJlIHdpbGwgYmUgbm8gbW9yZSBoaXRzISBTbyB3ZSBjYW4gYXZvaWQgZXh0cmEgaGl0IHRlc3RzXG4gICAgLy8gQSBmaW5hbCBvcHRpbWlzYXRpb24gaXMgdGhhdCBhbiBvYmplY3QgaXMgbm90IGhpdCB0ZXN0IGRpcmVjdGx5IGlmIGEgY2hpbGQgaGFzIGFscmVhZHkgYmVlbiBoaXQuXG4gICAgXG4gICAgdmFyIGhpdCA9IGZhbHNlLFxuICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGludGVyYWN0aXZlID0gZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSB8fCBpbnRlcmFjdGl2ZTtcblxuICAgIC8vIGlmIHRoZSBkaXNwbGF5b2JqZWN0IGhhcyBhIGhpdEFyZWEsIHRoZW4gaXQgZG9lcyBub3QgbmVlZCB0byBoaXRUZXN0IGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaGl0QXJlYSlcbiAgICB7XG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gKiogRlJFRSBUSVAgKiohIElmIGFuIG9iamVjdCBpcyBub3QgaW50ZXJhY3R0aXZlIG9yIGhhcyBubyBidXR0b25zIGluIGl0IChzdWNoIGFzIGEgZ2FtZSBzY2VuZSEpIHNldCBpbnRlcmFjdGl2ZUNoaWxkcmVuIHRvIGZhbHNlIGZvciB0aGF0IGRpc3BsYXlPYmplY3QuXG4gICAgLy8gVGhpcyB3aWxsIGFsbG93IHBpeGkgdG8gY29tcGxldGx5IGlnbm9yZSBhbmQgYnlwYXNzIGNoZWNraW5nIHRoZSBkaXNwbGF5T2JqZWN0cyBjaGlsZHJlbi5cbiAgICBpZihkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlQ2hpbGRyZW4pXG4gICAgeyAgICAgICBcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICAgICAgXG4gICAgICAgIGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRpbWUgdG8gZ2V0IHJlY3Vyc2l2ZS4uIGlmIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gaWYgc29tdGhpbmcgaXMgaGl0Li5cbiAgICAgICAgICAgIGlmKCB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZShwb2ludCwgY2hpbGRyZW5baV0sIGZ1bmMsIGhpdFRlc3QsIGludGVyYWN0aXZlUGFyZW50KSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIHdlIG5vIGxvbmdlciBuZWVkIHRvIGhpdCB0ZXN0IGFueSBtb3JlIG9iamVjdHMgaW4gdGhpcyBjb250YWluZXIgYXMgd2Ugd2Ugbm93IGtub3cgdGhlIHBhcmVudCBoYXMgYmVlbiBoaXRcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBpcyBpbnRlcmFjdGl2ZSAsIHRoYXQgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhpdCB3YXMgYWN0dWFsbHkgaW50ZXJhY3RpdmUgYW5kIG5vdCBqdXN0IHRoZSBjaGlsZCBvZiBhbiBpbnRlcmFjdGl2ZSBvYmplY3QuIFxuICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55dGhpbmcgZWxzZS4gV2Ugc3RpbGwgbmVlZCB0byBydW4gdGhyb3VnaCBhbGwgb2JqZWN0cywgYnV0IHdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhbnkgaGl0IHRlc3RzLlxuICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuW2ldLmludGVyYWN0aXZlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGl0VGVzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIG5vIHBvaW50IHJ1bm5pbmcgdGhpcyBpZiB0aGUgaXRlbSBpcyBub3QgaW50ZXJhY3RpdmUgb3IgZG9lcyBub3QgaGF2ZSBhbiBpbnRlcmFjdGl2ZSBwYXJlbnQuXG4gICAgaWYoaW50ZXJhY3RpdmUpXG4gICAge1xuICAgICAgICAvLyBpZiB3ZSBhcmUgaGl0IHRlc3RpbmcgKGFzIGluIHdlIGhhdmUgbm8gaGl0IGFueSBvYmplY3RzIHlldClcbiAgICAgICAgLy8gV2UgYWxzbyBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGhpdCB0ZXN0aW5nIGlmIG9uY2Ugb2YgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuIGhhcyBhbHJlYWR5IGJlZW4gaGl0IVxuICAgICAgICBpZihoaXRUZXN0ICYmICFoaXQpXG4gICAgICAgIHsgIFxuICAgICAgICAgICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGhpcy5fdGVtcFBvaW50KTtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmhpdEFyZWEuY29udGFpbnMoIHRoaXMuX3RlbXBQb2ludC54LCB0aGlzLl90ZW1wUG9pbnQueSApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZihkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGl0ID0gZGlzcGxheU9iamVjdC5jb250YWluc1BvaW50KHBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmMoZGlzcGxheU9iamVjdCwgaGl0KTsgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGl0O1xuICBcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgZG93biBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcHJlc3NlZCBkb3duXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VEb3duLCB0cnVlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBkb3duIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlRG93biA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB2YXIgZSA9IHRoaXMubW91c2Uub3JpZ2luYWxFdmVudDtcbiAgICBcbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG5cbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nIF0gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRkb3duJyA6ICdtb3VzZWRvd24nLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcmVsZWFzZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYnV0dG9uIGJlaW5nIHJlbGVhc2VkXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VVcCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlVXAsIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIHVwIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZVVwID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuXG4gICAgdmFyIGlzUmlnaHRCdXR0b24gPSBlLmJ1dHRvbiA9PT0gMiB8fCBlLndoaWNoID09PSAzO1xuICAgIHZhciBpc0Rvd24gPSAgaXNSaWdodEJ1dHRvbiA/ICdfaXNSaWdodERvd24nIDogJ19pc0xlZnREb3duJztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodHVwJyA6ICdtb3VzZXVwJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0Y2xpY2snIDogJ2NsaWNrJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdFsgaXNEb3duIF0gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXBvdXRzaWRlJyA6ICdtb3VzZXVwb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgdGhlIG1vdXNlIG1vdmluZ1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5kaWRNb3ZlID0gdHJ1ZTtcblxuICAgIHRoaXMuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VNb3ZlLCB0cnVlICk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgIT09IHRoaXMuY3Vyc29yKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gdGhpcy5jdXJzb3I7XG4gICAgfVxuXG4gICAgLy9UT0RPIEJVRyBmb3IgcGFyZW50cyBpbmVyYWN0aXZlIG9iamVjdCAoYm9yZGVyIG9yZGVyIGlzc3VlKVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlbW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQoZGlzcGxheU9iamVjdCwgaGl0KTtcbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgaXMgbW92ZWQgb3V0IG9mIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJlaW5nIG1vdmVkIG91dFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlT3V0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgLy8gVE9ETyBvcHRpbWl6ZSBieSBub3QgY2hlY2sgRVZFUlkgVElNRSEgbWF5YmUgaGFsZiBhcyBvZnRlbj8gLy9cbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkgKTtcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQsIGZhbHNlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBvdmVyL291dCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VPdmVyT3V0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGlmKCFkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3ZlcicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlzcGxheU9iamVjdC5idXR0b25Nb2RlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnNvciA9IGRpc3BsYXlPYmplY3QuZGVmYXVsdEN1cnNvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZihkaXNwbGF5T2JqZWN0Ll9vdmVyKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll9vdmVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIHRoaXMuZXZlbnREYXRhKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIHN0YXJ0ZWQgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggc3RhcnRpbmcgb24gdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaFN0YXJ0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuICAgICAgICAvL1RPRE8gUE9PTFxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0LCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hTdGFydCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaHN0YXJ0JywgdGhpcy5ldmVudERhdGEgKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBlbmRzIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIGVuZGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICAvL1RPRE8gdGhpcyBzaG91bGQgYmUgcGFzc2VkIGFsb25nLi4gbm8gc2V0XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoRW5kLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIGVuZCBvZiBhIHRvdWNoIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaEVuZCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZCcsIHRoaXMuZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndGFwJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaGVuZG91dHNpZGUnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGlzIG1vdmVkIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBtb3ZpbmcgYWNyb3NzIHRoZSByZW5kZXJlciB2aWV3XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIGEgdG91Y2ggbW92ZSBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hNb3ZlID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGhpdCA9IGhpdDtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0b3VjaG1vdmUnLCB0aGlzLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hFdmVudCB7RXZlbnREYXRhfSBUaGUgdG91Y2ggZXZlbnQgd2UgbmVlZCB0byBwYWlyIHdpdGggYW4gaW50ZXJhY3Rpb25EYXRhIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZ2V0VG91Y2hEYXRhID0gZnVuY3Rpb24gKHRvdWNoRXZlbnQpXG57XG4gICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wb3AoKTtcblxuICAgIGlmKCF0b3VjaERhdGEpXG4gICAge1xuICAgICAgICB0b3VjaERhdGEgPSBuZXcgSW50ZXJhY3Rpb25EYXRhKCk7XG4gICAgfVxuXG4gICAgdG91Y2hEYXRhLmlkZW50aWZpZXIgPSB0b3VjaEV2ZW50LmlkZW50aWZpZXI7XG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRvdWNoRGF0YS5nbG9iYWwsIHRvdWNoRXZlbnQuY2xpZW50WCwgdG91Y2hFdmVudC5jbGllbnRZICk7XG5cbiAgICBpZihuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YS5nbG9iYWwueCA9IHRvdWNoRGF0YS5nbG9iYWwueCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC55ID0gdG91Y2hEYXRhLmdsb2JhbC55IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIH1cblxuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWCA9IHRvdWNoRGF0YS5nbG9iYWwueDtcbiAgICB0b3VjaEV2ZW50Lmdsb2JhbFkgPSB0b3VjaERhdGEuZ2xvYmFsLnk7XG5cbiAgICByZXR1cm4gdG91Y2hEYXRhO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGludGVyYWN0aW9uIGRhdGEgb2JqZWN0IHRvIHRoZSBpbnRlcm5hbCBwb29sXG4gKlxuICogQHBhcmFtIHRvdWNoRGF0YSB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9IFRoZSB0b3VjaCBkYXRhIG9iamVjdCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmV0dXJuVG91Y2hEYXRhID0gZnVuY3Rpb24gKCB0b3VjaERhdGEgKVxue1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbC5wdXNoKCB0b3VjaERhdGEgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGludGVyYWN0aW9uIG1hbmFnZXJcbiAqXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLm1vdXNlID0gbnVsbDtcblxuICAgIHRoaXMuZXZlbnREYXRhID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IG51bGw7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VVcCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Nb3VzZURvd24gPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUgPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlT3V0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBudWxsO1xuXG5cbiAgICB0aGlzLm9uVG91Y2hTdGFydCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCA9IG51bGw7XG5cbiAgICB0aGlzLm9uVG91Y2hFbmQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoRW5kID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaE1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZW1wUG9pbnQgPSBudWxsO1xufTtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdpbnRlcmFjdGlvbicsIEludGVyYWN0aW9uTWFuYWdlcik7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBpbnRlcmFjdGlvbnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEludGVyYWN0aW9uRGF0YTogICAgcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKSxcbiAgICBJbnRlcmFjdGlvbk1hbmFnZXI6IHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25NYW5hZ2VyJyksXG4gICAgaW50ZXJhY3RpdmVUYXJnZXQ6ICByZXF1aXJlKCcuL2ludGVyYWN0aXZlVGFyZ2V0Jylcbn07XG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGludGVyYWN0aXZlIG9iamVjdHNcbiAqIHVzZWQgYnkge0BsaW5rIFBJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25NYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5pbnRlcmFjdGlvbi5pbnRlcmFjdGl2ZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgaW50ZXJhY3RpdmVUYXJnZXQgPSB7XG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBidXR0b25Nb2RlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlQ2hpbGRyZW46IHRydWUsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBkZWZhdWx0Q3Vyc29yOiAncG9pbnRlcicsXG5cbiAgICAvLyBzb21lIGludGVybmFsIGNoZWNrcy4uXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX292ZXI6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdG91Y2hEb3duOiBmYWxzZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnRlcmFjdGl2ZVRhcmdldDtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi4vZXh0cmFzJyksXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxuXG5mdW5jdGlvbiBwYXJzZShyZXNvdXJjZSwgdGV4dHVyZSkge1xuICAgIHZhciBkYXRhID0ge307XG4gICAgdmFyIGluZm8gPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF07XG4gICAgdmFyIGNvbW1vbiA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NvbW1vbicpWzBdO1xuXG4gICAgZGF0YS5mb250ID0gaW5mby5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKTtcbiAgICBkYXRhLnNpemUgPSBwYXJzZUludChpbmZvLmdldEF0dHJpYnV0ZSgnc2l6ZScpLCAxMCk7XG4gICAgZGF0YS5saW5lSGVpZ2h0ID0gcGFyc2VJbnQoY29tbW9uLmdldEF0dHJpYnV0ZSgnbGluZUhlaWdodCcpLCAxMCk7XG4gICAgZGF0YS5jaGFycyA9IHt9O1xuXG4gICAgLy9wYXJzZSBsZXR0ZXJzXG4gICAgdmFyIGxldHRlcnMgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjaGFyJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxldHRlcnMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaWQnKSwgMTApO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlUmVjdCA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4JyksIDEwKSArIHRleHR1cmUuZnJhbWUueCxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd5JyksIDEwKSArIHRleHR1cmUuZnJhbWUueSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd3aWR0aCcpLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnaGVpZ2h0JyksIDEwKVxuICAgICAgICApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbY2hhckNvZGVdID0ge1xuICAgICAgICAgICAgeE9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeU9mZnNldDogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3lvZmZzZXQnKSwgMTApLFxuICAgICAgICAgICAgeEFkdmFuY2U6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4YWR2YW5jZScpLCAxMCksXG4gICAgICAgICAgICBrZXJuaW5nOiB7fSxcbiAgICAgICAgICAgIHRleHR1cmU6IG5ldyBjb3JlLlRleHR1cmUodGV4dHVyZS5iYXNlVGV4dHVyZSwgdGV4dHVyZVJlY3QpXG5cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvL3BhcnNlIGtlcm5pbmdzXG4gICAgdmFyIGtlcm5pbmdzID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgna2VybmluZycpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBrZXJuaW5ncy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBmaXJzdCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnZmlyc3QnKSwgMTApO1xuICAgICAgICB2YXIgc2Vjb25kID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdzZWNvbmQnKSwgMTApO1xuICAgICAgICB2YXIgYW1vdW50ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdhbW91bnQnKSwgMTApO1xuXG4gICAgICAgIGRhdGEuY2hhcnNbc2Vjb25kXS5rZXJuaW5nW2ZpcnN0XSA9IGFtb3VudDtcbiAgICB9XG5cbiAgICByZXNvdXJjZS5iaXRtYXBGb250ID0gZGF0YTtcblxuICAgIC8vIEknbSBsZWF2aW5nIHRoaXMgYXMgYSB0ZW1wb3JhcnkgZml4IHNvIHdlIGNhbiB0ZXN0IHRoZSBiaXRtYXAgZm9udHMgaW4gdjNcbiAgICAvLyBidXQgaXQncyB2ZXJ5IGxpa2VseSB0byBjaGFuZ2VcbiAgICBleHRyYXMuQml0bWFwVGV4dC5mb250c1tkYXRhLmZvbnRdID0gZGF0YTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSBvciBub3QgeG1sIGRhdGFcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhIHx8ICFyZXNvdXJjZS5pc1htbClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNraXAgaWYgbm90IGJpdG1hcCBmb250IGRhdGEsIHVzaW5nIHNvbWUgc2lsbHkgZHVjay10eXBpbmdcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGFnZScpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdLmdldEF0dHJpYnV0ZSgnZmFjZScpID09PSBudWxsXG4gICAgICAgICAgICApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeG1sVXJsID0gcGF0aC5kaXJuYW1lKHJlc291cmNlLnVybCk7XG5cbiAgICAgICAgaWYgKHhtbFVybCA9PT0gJy4nKSB7XG4gICAgICAgICAgICB4bWxVcmwgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJhc2VVcmwgJiYgeG1sVXJsKSB7XG4gICAgICAgICAgICAvLyBpZiBiYXNldXJsIGhhcyBhIHRyYWlsaW5nIHNsYXNoIHRoZW4gYWRkIG9uZSB0byB4bWxVcmwgc28gdGhlIHJlcGxhY2Ugd29ya3MgYmVsb3dcbiAgICAgICAgICAgIGlmICh0aGlzLmJhc2VVcmwuY2hhckF0KHRoaXMuYmFzZVVybC5sZW5ndGggLSAxKSA9PT0gJy8nKSB7XG4gICAgICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcmVtb3ZlIGJhc2VVcmwgZnJvbSB4bWxVcmxcbiAgICAgICAgICAgIHhtbFVybCA9IHhtbFVybC5yZXBsYWNlKHRoaXMuYmFzZVVybCwgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW4geG1sVXJsIG5vdywgaXQgbmVlZHMgYSB0cmFpbGluZyBzbGFzaC4gRW5zdXJlIHRoYXQgaXQgZG9lcyBpZiB0aGUgc3RyaW5nIGlzbid0IGVtcHR5LlxuICAgICAgICBpZiAoeG1sVXJsICYmIHhtbFVybC5jaGFyQXQoeG1sVXJsLmxlbmd0aCAtIDEpICE9PSAnLycpIHtcbiAgICAgICAgICAgIHhtbFVybCArPSAnLyc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRleHR1cmVVcmwgPSB4bWxVcmwgKyByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJylbMF0uZ2V0QXR0cmlidXRlKCdmaWxlJyk7XG4gICAgICAgIGlmIChjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSkge1xuICAgICAgICAgICAgLy9yZXVzZSBleGlzdGluZyB0ZXh0dXJlXG4gICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbdGV4dHVyZVVybF0pO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGxvYWRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiByZXNvdXJjZS5tZXRhZGF0YS5pbWFnZU1ldGFkYXRhXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gbG9hZCB0aGUgdGV4dHVyZSBmb3IgdGhlIGZvbnRcbiAgICAgICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgdGV4dHVyZVVybCwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZShyZXNvdXJjZSwgcmVzLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBsb2FkZXJzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5sb2FkZXJzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIExvYWRlcjogICAgICAgICAgICAgcmVxdWlyZSgnLi9sb2FkZXInKSxcblxuICAgIC8vIHBhcnNlcnNcbiAgICBiaXRtYXBGb250UGFyc2VyOiAgIHJlcXVpcmUoJy4vYml0bWFwRm9udFBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyOiAgcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIHRleHR1cmVQYXJzZXI6ICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlUGFyc2VyJyksXG4gICAgUmVzb3VyY2U6ICAgICAgICAgICByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZVxufTtcbiIsInZhciBSZXNvdXJjZUxvYWRlciA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLFxuICAgIHRleHR1cmVQYXJzZXIgPSByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBzcHJpdGVzaGVldFBhcnNlciA9IHJlcXVpcmUoJy4vc3ByaXRlc2hlZXRQYXJzZXInKSxcbiAgICBiaXRtYXBGb250UGFyc2VyID0gcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyk7XG5cbi8qKlxuICpcbiAqIFRoZSBuZXcgbG9hZGVyLCBleHRlbmRzIFJlc291cmNlIExvYWRlciBieSBDaGFkIEVuZ2xlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9lbmdsZXJjai9yZXNvdXJjZS1sb2FkZXJcbiAqXG4gKiBgYGBqc1xuICogdmFyIGxvYWRlciA9IFBJWEkubG9hZGVyOyAvLyBwaXhpIGV4cG9zZXMgYSBwcmVtYWRlIGluc3RhbmNlIGZvciB5b3UgdG8gdXNlLlxuICogLy9vclxuICogdmFyIGxvYWRlciA9IG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyKCk7IC8vIHlvdSBjYW4gYWxzbyBjcmVhdGUgeW91ciBvd24gaWYgeW91IHdhbnRcbiAqXG4gKiBsb2FkZXIuYWRkKCdidW5ueScsXCJkYXRhL2J1bm55LnBuZ1wiKTtcbiAqXG4gKiBsb2FkZXIub25jZSgnY29tcGxldGUnLG9uQXNzZXRzTG9hZGVkKTtcbiAqXG4gKiBsb2FkZXIubG9hZCgpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlJlc291cmNlTG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5sb2FkZXJzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KVxue1xuICAgIFJlc291cmNlTG9hZGVyLmNhbGwodGhpcywgYmFzZVVybCwgY29uY3VycmVuY3kpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMudXNlKExvYWRlci5fcGl4aU1pZGRsZXdhcmVbaV0oKSk7XG4gICAgfVxufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZXNvdXJjZUxvYWRlci5wcm90b3R5cGUpO1xuTG9hZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbkxvYWRlci5fcGl4aU1pZGRsZXdhcmUgPSBbXG4gICAgLy8gcGFyc2UgYW55IGJsb2IgaW50byBtb3JlIHVzYWJsZSBvYmplY3RzIChlLmcuIEltYWdlKVxuICAgIFJlc291cmNlTG9hZGVyLm1pZGRsZXdhcmUucGFyc2luZy5ibG9iLFxuICAgIC8vIHBhcnNlIGFueSBJbWFnZSBvYmplY3RzIGludG8gdGV4dHVyZXNcbiAgICB0ZXh0dXJlUGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBzcHJpdGVzaGVldFBhcnNlcixcbiAgICAvLyBwYXJzZSBhbnkgc3ByaXRlc2hlZXQgZGF0YSBpbnRvIG11bHRpcGxlIHRleHR1cmVzXG4gICAgYml0bWFwRm9udFBhcnNlclxuXTtcblxuTG9hZGVyLmFkZFBpeGlNaWRkbGV3YXJlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgTG9hZGVyLl9waXhpTWlkZGxld2FyZS5wdXNoKGZuKTtcbn07XG5cbi8vIEFkZCBjdXN0b20gZXh0ZW50aW9uc1xudmFyIFJlc291cmNlID0gUmVzb3VyY2VMb2FkZXIuUmVzb3VyY2U7XG5cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUoJ2ZudCcsIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlLFxuICAgIHBhdGggPSByZXF1aXJlKCdwYXRoJyksXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBza2lwIGlmIG5vIGRhdGEsIGl0cyBub3QganNvbiwgb3IgaXQgaXNuJ3Qgc3ByaXRlc2hlZXQgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzSnNvbiB8fCAhcmVzb3VyY2UuZGF0YS5mcmFtZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzb3VyY2UuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICBsb2FkVHlwZTogUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcm91dGUgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJykpO1xuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwoIHJlc291cmNlLnVybCApO1xuXG4gICAgICAgIC8vIGxvYWQgdGhlIGltYWdlIGZvciB0aGlzIHNoZWV0XG4gICAgICAgIHRoaXMuYWRkKHJlc291cmNlLm5hbWUgKyAnX2ltYWdlJywgcm91dGUgKyAnLycgKyByZXNvdXJjZS5kYXRhLm1ldGEuaW1hZ2UsIGxvYWRPcHRpb25zLCBmdW5jdGlvbiAocmVzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlcyA9IHt9O1xuXG4gICAgICAgICAgICB2YXIgZnJhbWVzID0gcmVzb3VyY2UuZGF0YS5mcmFtZXM7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gZnJhbWVzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gZnJhbWVzW2ldLmZyYW1lO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlY3QpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0cmltID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QuaCwgcmVjdC53KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXcgY29yZS5SZWN0YW5nbGUocmVjdC54LCByZWN0LnksIHJlY3QudywgcmVjdC5oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vICBDaGVjayB0byBzZWUgaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0udHJpbW1lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpbSA9IG5ldyBjb3JlLlJlY3RhbmdsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS54IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc3ByaXRlU291cmNlU2l6ZS55IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS53IC8gcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNbaV0uc291cmNlU2l6ZS5oIC8gcmVzb2x1dGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBmbGlwIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IVxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnJvdGF0ZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gc2l6ZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggPSBzaXplLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0ID0gdGVtcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNpemUueCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLnkgLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLmhlaWdodCAvPSByZXNvbHV0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzW2ldID0gbmV3IGNvcmUuVGV4dHVyZShyZXMudGV4dHVyZS5iYXNlVGV4dHVyZSwgc2l6ZSwgc2l6ZS5jbG9uZSgpLCB0cmltLCBmcmFtZXNbaV0ucm90YXRlZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0cyBhbHNvIGFkZCB0aGUgZnJhbWUgdG8gcGl4aSdzIGdsb2JhbCBjYWNoZSBmb3IgZnJvbUZyYW1lIGFuZCBmcm9tSW1hZ2UgZnVuY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW2ldID0gcmVzb3VyY2UudGV4dHVyZXNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH0pO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gY3JlYXRlIGEgbmV3IHRleHR1cmUgaWYgdGhlIGRhdGEgaXMgYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgIGlmIChyZXNvdXJjZS5kYXRhICYmIHJlc291cmNlLmlzSW1hZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBiYXNlVGV4dHVyZSA9IG5ldyBjb3JlLkJhc2VUZXh0dXJlKHJlc291cmNlLmRhdGEsIG51bGwsIGNvcmUudXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKHJlc291cmNlLnVybCkpO1xuICAgICAgICAgICAgYmFzZVRleHR1cmUuaW1hZ2VVcmwgPSByZXNvdXJjZS51cmw7XG4gICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlID0gbmV3IGNvcmUuVGV4dHVyZShiYXNlVGV4dHVyZSk7XG4gICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdWNudGlvbnNcbiAgICAgICAgICAgIGNvcmUudXRpbHMuQmFzZVRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gYmFzZVRleHR1cmU7XG4gICAgICAgICAgICBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtyZXNvdXJjZS51cmxdID0gcmVzb3VyY2UudGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBjb3JlLlBvaW50KCksXG4gICAgdGVtcFBvbHlnb24gPSBuZXcgY29yZS5Qb2x5Z29uKCk7XG5cbi8qKlxuICogQmFzZSBtZXNoIGNsYXNzXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSB0byB1c2VcbiAqIEBwYXJhbSBbdmVydGljZXNdIHtGbG9hdDMyQXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHZlcnRpY2VzXG4gKiBAcGFyYW0gW3V2c10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdXZzXG4gKiBAcGFyYW0gW2luZGljZXNdIHtVaW50MTZBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgaW5kaWNlc1xuICogQHBhcmFtIFtkcmF3TW9kZV0ge251bWJlcn0gdGhlIGRyYXdNb2RlLCBjYW4gYmUgYW55IG9mIHRoZSBNZXNoLkRSQVdfTU9ERVMgY29uc3RzXG4gKi9cbmZ1bmN0aW9uIE1lc2godGV4dHVyZSwgdmVydGljZXMsIHV2cywgaW5kaWNlcywgZHJhd01vZGUpXG57XG4gICAgY29yZS5Db250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIG9mIHRoZSBNZXNoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBVdnMgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IHV2cyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxLCAwLFxuICAgICAgICAxLCAxLFxuICAgICAgICAwLCAxXSk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB2ZXJ0aWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSB2ZXJ0aWNlcyB8fCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLFxuICAgICAgICAxMDAsIDAsXG4gICAgICAgIDEwMCwgMTAwLFxuICAgICAgICAwLCAxMDBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgLy8gIFRPRE8gYXV0byBnZW5lcmF0ZSB0aGlzIGJhc2VkIG9uIGRyYXcgbW9kZSFcbiAgICB0aGlzLmluZGljZXMgPSBpbmRpY2VzIHx8IG5ldyBVaW50MTZBcnJheShbMCwgMSwgMywgMl0pO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgTWVzaCBpcyBkaXJ0eSBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzcHJpdGUuIFNldCB0byBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlbW92ZSBhbnkgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUcmlhbmdsZXMgaW4gY2FudmFzIG1vZGUgYXJlIGF1dG9tYXRpY2FsbHkgYW50aWFsaWFzZWQsIHVzZSB0aGlzIHZhbHVlIHRvIGZvcmNlIHRyaWFuZ2xlcyB0byBvdmVybGFwIGEgYml0IHdpdGggZWFjaCBvdGhlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdheSB0aGUgTWVzaCBzaG91bGQgYmUgZHJhd24sIGNhbiBiZSBhbnkgb2YgdGhlIHtAbGluayBQSVhJLm1lc2guTWVzaC5EUkFXX01PREVTfSBjb25zdHNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAc2VlIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmRyYXdNb2RlID0gZHJhd01vZGUgfHwgTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0g7XG5cbiAgICAvLyBydW4gdGV4dHVyZSBzZXR0ZXI7XG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcblxuICAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgbWVzaCBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn1cblxuLy8gY29uc3RydWN0b3Jcbk1lc2gucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuTWVzaC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNZXNoLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLm1lc2guTWVzaCNcbiAgICAgKi9cbiAgICB0ZXh0dXJlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl90ZXh0dXJlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBXZWJHTCByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMubWVzaCk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5tZXNoLnJlbmRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcblxuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEsIHRyYW5zZm9ybS5iLCB0cmFuc2Zvcm0uYywgdHJhbnNmb3JtLmQsIHRyYW5zZm9ybS50eCB8IDAsIHRyYW5zZm9ybS50eSB8IDApO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4LCB0cmFuc2Zvcm0udHkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc1RyaWFuZ2xlTWVzaChjb250ZXh0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzKGNvbnRleHQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiBUcmlhbmdsZSBNZXNoIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aCAvIDI7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGggLSAyOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4LCAoaW5kZXggKyAyKSwgKGluZGV4ICsgNCkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIG9iamVjdCBpbiB0cmlhbmdsZSBtb2RlIHVzaW5nIGNhbnZhc1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc1RyaWFuZ2xlcyA9IGZ1bmN0aW9uIChjb250ZXh0KVxue1xuICAgIC8vIGRyYXcgdHJpYW5nbGVzISFcbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcblxuICAgIHZhciBsZW5ndGggPSBpbmRpY2VzLmxlbmd0aDtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAzKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4MCA9IGluZGljZXNbaV0gKiAyLCBpbmRleDEgPSBpbmRpY2VzW2kgKyAxXSAqIDIsIGluZGV4MiA9IGluZGljZXNbaSArIDJdICogMjtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRHJhd3Mgb25lIG9mIHRoZSB0cmlhbmdsZXMgdGhhdCBmb3JtIHRoaXMgTWVzaFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHBhcmFtIHZlcnRpY2VzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgTWVzaFxuICogQHBhcmFtIHV2cyB7RmxvYXQzMkFycmF5fSBhIHJlZmVyZW5jZSB0byB0aGUgdXZzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gaW5kZXgwIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgxIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgc2Vjb25kIHZlcnRleFxuICogQHBhcmFtIGluZGV4MiB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIHRoaXJkIHZlcnRleFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZSA9IGZ1bmN0aW9uIChjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleDAsIGluZGV4MSwgaW5kZXgyKVxue1xuICAgIHZhciB0ZXh0dXJlU291cmNlID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2U7XG4gICAgdmFyIHRleHR1cmVXaWR0aCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUud2lkdGg7XG4gICAgdmFyIHRleHR1cmVIZWlnaHQgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHZhciB4MCA9IHZlcnRpY2VzW2luZGV4MF0sIHgxID0gdmVydGljZXNbaW5kZXgxXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleDJdO1xuICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4MCArIDFdLCB5MSA9IHZlcnRpY2VzW2luZGV4MSArIDFdLCB5MiA9IHZlcnRpY2VzW2luZGV4MiArIDFdO1xuXG4gICAgdmFyIHUwID0gdXZzW2luZGV4MF0gKiB0ZXh0dXJlV2lkdGgsIHUxID0gdXZzW2luZGV4MV0gKiB0ZXh0dXJlV2lkdGgsIHUyID0gdXZzW2luZGV4Ml0gKiB0ZXh0dXJlV2lkdGg7XG4gICAgdmFyIHYwID0gdXZzW2luZGV4MCArIDFdICogdGV4dHVyZUhlaWdodCwgdjEgPSB1dnNbaW5kZXgxICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MiA9IHV2c1tpbmRleDIgKyAxXSAqIHRleHR1cmVIZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5jYW52YXNQYWRkaW5nID4gMClcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nWCA9IHRoaXMuY2FudmFzUGFkZGluZyAvIHRoaXMud29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIHBhZGRpbmdZID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgY2VudGVyWCA9ICh4MCArIHgxICsgeDIpIC8gMztcbiAgICAgICAgdmFyIGNlbnRlclkgPSAoeTAgKyB5MSArIHkyKSAvIDM7XG5cbiAgICAgICAgdmFyIG5vcm1YID0geDAgLSBjZW50ZXJYO1xuICAgICAgICB2YXIgbm9ybVkgPSB5MCAtIGNlbnRlclk7XG5cbiAgICAgICAgdmFyIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MCA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MCA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIC8vXG5cbiAgICAgICAgbm9ybVggPSB4MSAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTEgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MSA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MSA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuXG4gICAgICAgIG5vcm1YID0geDIgLSBjZW50ZXJYO1xuICAgICAgICBub3JtWSA9IHkyIC0gY2VudGVyWTtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDIgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTIgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LnNhdmUoKTtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG5cbiAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcblxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICBjb250ZXh0LmNsaXAoKTtcblxuICAgIC8vIENvbXB1dGUgbWF0cml4IHRyYW5zZm9ybVxuICAgIHZhciBkZWx0YSA9ICAodTAgKiB2MSkgICAgICArICh2MCAqIHUyKSAgICAgICsgKHUxICogdjIpICAgICAgLSAodjEgKiB1MikgICAgICAtICh2MCAqIHUxKSAgICAgIC0gKHUwICogdjIpO1xuICAgIHZhciBkZWx0YUEgPSAoeDAgKiB2MSkgICAgICArICh2MCAqIHgyKSAgICAgICsgKHgxICogdjIpICAgICAgLSAodjEgKiB4MikgICAgICAtICh2MCAqIHgxKSAgICAgIC0gKHgwICogdjIpO1xuICAgIHZhciBkZWx0YUIgPSAodTAgKiB4MSkgICAgICArICh4MCAqIHUyKSAgICAgICsgKHUxICogeDIpICAgICAgLSAoeDEgKiB1MikgICAgICAtICh4MCAqIHUxKSAgICAgIC0gKHUwICogeDIpO1xuICAgIHZhciBkZWx0YUMgPSAodTAgKiB2MSAqIHgyKSArICh2MCAqIHgxICogdTIpICsgKHgwICogdTEgKiB2MikgLSAoeDAgKiB2MSAqIHUyKSAtICh2MCAqIHUxICogeDIpIC0gKHUwICogeDEgKiB2Mik7XG4gICAgdmFyIGRlbHRhRCA9ICh5MCAqIHYxKSAgICAgICsgKHYwICogeTIpICAgICAgKyAoeTEgKiB2MikgICAgICAtICh2MSAqIHkyKSAgICAgIC0gKHYwICogeTEpICAgICAgLSAoeTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhRSA9ICh1MCAqIHkxKSAgICAgICsgKHkwICogdTIpICAgICAgKyAodTEgKiB5MikgICAgICAtICh5MSAqIHUyKSAgICAgIC0gKHkwICogdTEpICAgICAgLSAodTAgKiB5Mik7XG4gICAgdmFyIGRlbHRhRiA9ICh1MCAqIHYxICogeTIpICsgKHYwICogeTEgKiB1MikgKyAoeTAgKiB1MSAqIHYyKSAtICh5MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB5MikgLSAodTAgKiB5MSAqIHYyKTtcblxuICAgIGNvbnRleHQudHJhbnNmb3JtKGRlbHRhQSAvIGRlbHRhLCBkZWx0YUQgLyBkZWx0YSxcbiAgICAgICAgZGVsdGFCIC8gZGVsdGEsIGRlbHRhRSAvIGRlbHRhLFxuICAgICAgICBkZWx0YUMgLyBkZWx0YSwgZGVsdGFGIC8gZGVsdGEpO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UodGV4dHVyZVNvdXJjZSwgMCwgMCk7XG4gICAgY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5cblxuLyoqXG4gKiBSZW5kZXJzIGEgZmxhdCBNZXNoXG4gKlxuICogQHBhcmFtIE1lc2gge1BJWEkubWVzaC5NZXNofSBUaGUgTWVzaCB0byByZW5kZXJcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLnJlbmRlck1lc2hGbGF0ID0gZnVuY3Rpb24gKE1lc2gpXG57XG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgdmFyIHZlcnRpY2VzID0gTWVzaC52ZXJ0aWNlcztcblxuICAgIHZhciBsZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGgvMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgIGZvciAodmFyIGk9MTsgaSA8IGxlbmd0aC0yOyBpKyspXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXggPSBpKjI7XG5cbiAgICAgICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXhdLCAgIHgxID0gdmVydGljZXNbaW5kZXgrMl0sIHgyID0gdmVydGljZXNbaW5kZXgrNF07XG4gICAgICAgIHZhciB5MCA9IHZlcnRpY2VzW2luZGV4KzFdLCB5MSA9IHZlcnRpY2VzW2luZGV4KzNdLCB5MiA9IHZlcnRpY2VzW2luZGV4KzVdO1xuXG4gICAgICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHgyLCB5Mik7XG4gICAgfVxuXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnI0ZGMDAwMCc7XG4gICAgY29udGV4dC5maWxsKCk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbn07XG5cbi8qKlxuICogV2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLCB0aGlzIGV2ZW50IHdpbGwgZmlyZSB0byB1cGRhdGUgdGhlIHNjYWxlIGFuZCBmcmFtZVxuICpcbiAqIEBwYXJhbSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy51cGRhdGVGcmFtZSA9IHRydWU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgbWVzaCBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZiAoIXRoaXMuX2N1cnJlbnRCb3VuZHMpIHtcbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gbWF0cml4IHx8IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICAgICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSB2ZXJ0aWNlcy5sZW5ndGg7IGkgPCBuOyBpICs9IDIpIHtcbiAgICAgICAgICAgIHZhciByYXdYID0gdmVydGljZXNbaV0sIHJhd1kgPSB2ZXJ0aWNlc1tpICsgMV07XG4gICAgICAgICAgICB2YXIgeCA9IChhICogcmF3WCkgKyAoYyAqIHJhd1kpICsgdHg7XG4gICAgICAgICAgICB2YXIgeSA9IChkICogcmF3WSkgKyAoYiAqIHJhd1gpICsgdHk7XG5cbiAgICAgICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG5cbiAgICAgICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuICAgICAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWluWCA9PT0gLUluZmluaXR5IHx8IG1heFkgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBtZXNoLiBXb3JrcyBvbmx5IGZvciBUUklBTkdMRV9NRVNIXG4gKlxuICogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuICovXG5NZXNoLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50ICkge1xuICAgIGlmICghdGhpcy5nZXRCb3VuZHMoKS5jb250YWlucyhwb2ludC54LCBwb2ludC55KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHBvaW50cyA9IHRlbXBQb2x5Z29uLnBvaW50cztcbiAgICB2YXIgaSwgbGVuO1xuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVMpIHtcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgICAgIGxlbiA9IHRoaXMuaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgIC8vVE9ETzogaW5saW5lIHRoaXMuXG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTMpIHtcbiAgICAgICAgICAgIHZhciBpbmQwID0gaW5kaWNlc1tpXSoyLCBpbmQxID0gaW5kaWNlc1tpKzFdKjIsIGluZDIgPSBpbmRpY2VzW2krMl0qMjtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2luZDBdO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaW5kMCsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2luZDFdO1xuICAgICAgICAgICAgcG9pbnRzWzNdID0gdmVydGljZXNbaW5kMSsxXTtcbiAgICAgICAgICAgIHBvaW50c1s0XSA9IHZlcnRpY2VzW2luZDJdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaW5kMisxXTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBsZW4gPSB2ZXJ0aWNlcy5sZW5ndGg7XG4gICAgICAgIGZvciAoaT0wO2k8bGVuO2krPTYpIHtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IHZlcnRpY2VzW2ldO1xuICAgICAgICAgICAgcG9pbnRzWzFdID0gdmVydGljZXNbaSsxXTtcbiAgICAgICAgICAgIHBvaW50c1syXSA9IHZlcnRpY2VzW2krMl07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpKzNdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaSs0XTtcbiAgICAgICAgICAgIHBvaW50c1s1XSA9IHZlcnRpY2VzW2krNV07XG4gICAgICAgICAgICBpZiAodGVtcFBvbHlnb24uY29udGFpbnModGVtcFBvaW50LngsIHRlbXBQb2ludC55KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGlmZmVyZW50IGRyYXdpbmcgYnVmZmVyIG1vZGVzIHN1cHBvcnRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX01FU0hcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFU1xuICovXG5NZXNoLkRSQVdfTU9ERVMgPSB7XG4gICAgVFJJQU5HTEVfTUVTSDogMCxcbiAgICBUUklBTkdMRVM6IDFcbn07XG4iLCJ2YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xuXG4vKipcbiAqIFRoZSBQbGFuZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciBQbGFuZSA9IG5ldyBQSVhJLlBsYW5lKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIFBsYW5lLlxuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWCAtIFRoZSBudW1iZXIgb3ggeCBzZWdtZW50c1xuICogQHBhcmFtIHtpbnR9IHNlZ21lbnRzWSAtIFRoZSBudW1iZXIgb2YgeSBzZWdtZW50c1xuICpcbiAqL1xuZnVuY3Rpb24gUGxhbmUodGV4dHVyZSwgc2VnbWVudHNYLCBzZWdtZW50c1kpXG57XG4gICAgTWVzaC5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tlciBmb3IgaWYgdGhlIFBsYW5lIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuc2VnbWVudHNYID0gIHNlZ21lbnRzWCB8fCAxMDtcbiAgICB0aGlzLnNlZ21lbnRzWSA9IHNlZ21lbnRzWSB8fCAxMDtcblxuICAgIHRoaXMuZHJhd01vZGUgPSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVTO1xuICAgIHRoaXMucmVmcmVzaCgpO1xuXG59XG5cblxuLy8gY29uc3RydWN0b3JcblBsYW5lLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIE1lc2gucHJvdG90eXBlICk7XG5QbGFuZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQbGFuZTtcbm1vZHVsZS5leHBvcnRzID0gUGxhbmU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5QbGFuZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgdG90YWwgPSB0aGlzLnNlZ21lbnRzWCAqIHRoaXMuc2VnbWVudHNZO1xuICAgIHZhciB2ZXJ0cyA9IFtdO1xuICAgIHZhciBjb2xvcnMgPSBbXTtcbiAgICB2YXIgdXZzID0gW107XG4gICAgdmFyIGluZGljZXMgPSBbXTtcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMudGV4dHVyZTtcblxuICAvLyAgdGV4dHVyZS53aWR0aCA9IDgwMCB0ZXh0dXJlLndpZHRoIHx8IDgwMDtcbiAvLyAgIHRleHR1cmUuaGVpZ2h0ID0gODAwLy90ZXh0dXJlLmhlaWdodCB8fCA4MDA7XG5cbiAgICB2YXIgc2VnbWVudHNYU3ViID0gdGhpcy5zZWdtZW50c1ggLSAxO1xuICAgIHZhciBzZWdtZW50c1lTdWIgPSB0aGlzLnNlZ21lbnRzWSAtIDE7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgdmFyIHNpemVYID0gdGV4dHVyZS53aWR0aCAvIHNlZ21lbnRzWFN1YjtcbiAgICB2YXIgc2l6ZVkgPSB0ZXh0dXJlLmhlaWdodCAvIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbDsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHggPSAoaSAlIHRoaXMuc2VnbWVudHNYKTtcbiAgICAgICAgdmFyIHkgPSAoIChpIC8gdGhpcy5zZWdtZW50c1ggKSB8IDAgKTtcblxuXG4gICAgICAgIHZlcnRzLnB1c2goKHggKiBzaXplWCksXG4gICAgICAgICAgICAgICAgICAgKHkgKiBzaXplWSkpO1xuXG4gICAgICAgIC8vIHRoaXMgd29ya3MgZm9yIHJlY3Rhbmd1bGFyIHRleHR1cmVzLiBcbiAgICAgICAgdXZzLnB1c2godGV4dHVyZS5fdXZzLngwICsgKHRleHR1cmUuX3V2cy54MSAtIHRleHR1cmUuX3V2cy54MCkgKiAoeCAvICh0aGlzLnNlZ21lbnRzWC0xKSksIHRleHR1cmUuX3V2cy55MCArICh0ZXh0dXJlLl91dnMueTMtdGV4dHVyZS5fdXZzLnkwKSAqICh5LyAodGhpcy5zZWdtZW50c1ktMSkpKTtcbiAgICAgIH1cblxuICAgIC8vICBjb25zXG5cbiAgICB2YXIgdG90YWxTdWIgPSBzZWdtZW50c1hTdWIgKiBzZWdtZW50c1lTdWI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTdWI7IGkrKykge1xuXG4gICAgICAgIHZhciB4cG9zID0gaSAlIHNlZ21lbnRzWFN1YjtcbiAgICAgICAgdmFyIHlwb3MgPSAoaSAvIHNlZ21lbnRzWFN1YiApIHwgMDtcblxuXG4gICAgICAgIHZhciAgdmFsdWUgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWUyID0gKHlwb3MgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zICsgMTtcbiAgICAgICAgdmFyICB2YWx1ZTMgPSAoKHlwb3MrMSkgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zO1xuICAgICAgICB2YXIgIHZhbHVlNCA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuXG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZSwgdmFsdWUyLCB2YWx1ZTMpO1xuICAgICAgICBpbmRpY2VzLnB1c2godmFsdWUyLCB2YWx1ZTQsIHZhbHVlMyk7XG4gICAgfVxuXG5cbiAgICAvL2NvbnNvbGUubG9nKGluZGljZXMpXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkodmVydHMpO1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheSh1dnMpO1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShjb2xvcnMpO1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShpbmRpY2VzKTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGV4dHVyZSBVVnMgd2hlbiBuZXcgdGV4dHVyZSBpcyBzZXRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QbGFuZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFBsYW5lIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBUaGUgcm9wZSBhbGxvd3MgeW91IHRvIGRyYXcgYSB0ZXh0dXJlIGFjcm9zcyBzZXZlcmFsIHBvaW50cyBhbmQgdGhlbSBtYW5pcHVsYXRlIHRoZXNlIHBvaW50c1xuICpcbiAqYGBganNcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICogICAgIHBvaW50cy5wdXNoKG5ldyBQSVhJLlBvaW50KGkgKiA1MCwgMCkpO1xuICogfTtcbiAqIHZhciByb3BlID0gbmV3IFBJWEkuUm9wZShQSVhJLlRleHR1cmUuZnJvbUltYWdlKFwic25ha2UucG5nXCIpLCBwb2ludHMpO1xuICogIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5tZXNoLk1lc2hcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB7UElYSS5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIHRleHR1cmUgdG8gdXNlIG9uIHRoZSByb3BlLlxuICogQHBhcmFtIHtQSVhJLlBvaW50W119IHBvaW50cyAtIEFuIGFycmF5IG9mIHtAbGluayBQSVhJLlBvaW50fSBvYmplY3RzIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gKlxuICovXG5mdW5jdGlvbiBSb3BlKHRleHR1cmUsIHBvaW50cylcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnRbXX0gQW4gYXJyYXkgb2YgcG9pbnRzIHRoYXQgZGV0ZXJtaW5lIHRoZSByb3BlXG4gICAgICovXG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgb2YgdmVydGljZXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhpcyByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBUaGUgV2ViR0wgVXZzIG9mIHRoZSByb3BlLlxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogNCk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgY29sb3IgY29tcG9uZW50c1xuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgcm9wZSBpcyByZWFkeSB0byBiZSBkcmF3bi4gTmVlZGVkIGJlY2F1c2UgTWVzaCBjdG9yIGNhblxuICAgICAqIGNhbGwgX29uVGV4dHVyZVVwZGF0ZWQgd2hpY2ggY291bGQgY2FsbCByZWZyZXNoIHRvbyBlYXJseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgIHRoaXMucmVmcmVzaCgpO1xufVxuXG5cbi8vIGNvbnN0cnVjdG9yXG5Sb3BlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTWVzaC5wcm90b3R5cGUpO1xuUm9wZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3BlO1xubW9kdWxlLmV4cG9ydHMgPSBSb3BlO1xuXG4vKipcbiAqIFJlZnJlc2hlc1xuICpcbiAqL1xuUm9wZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgLy8gaWYgdG9vIGxpdHRsZSBwb2ludHMsIG9yIHRleHR1cmUgaGFzbid0IGdvdCBVVnMgc2V0IHlldCBqdXN0IG1vdmUgb24uXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxIHx8ICF0aGlzLl90ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuXG4gICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuXG4gICAgdmFyIHRleHR1cmVVdnMgPSB0aGlzLl90ZXh0dXJlLl91dnM7XG4gICAgdmFyIG9mZnNldCA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDAsIHRleHR1cmVVdnMueTApO1xuICAgIHZhciBmYWN0b3IgPSBuZXcgY29yZS5Qb2ludCh0ZXh0dXJlVXZzLngyIC0gdGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MiAtIHRleHR1cmVVdnMueTApO1xuXG4gICAgdXZzWzBdID0gMCArIG9mZnNldC54O1xuICAgIHV2c1sxXSA9IDAgKyBvZmZzZXQueTtcbiAgICB1dnNbMl0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICBjb2xvcnNbMF0gPSAxO1xuICAgIGNvbG9yc1sxXSA9IDE7XG5cbiAgICBpbmRpY2VzWzBdID0gMDtcbiAgICBpbmRpY2VzWzFdID0gMTtcblxuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgYW1vdW50O1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG4gICAgICAgIC8vIHRpbWUgdG8gZG8gc29tZSBzbWFydCBkcmF3aW5nIVxuICAgICAgICBhbW91bnQgPSBpIC8gKHRvdGFsLTEpO1xuXG4gICAgICAgIHV2c1tpbmRleF0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrMV0gPSAwICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgdXZzW2luZGV4KzJdID0gYW1vdW50ICogZmFjdG9yLnggKyBvZmZzZXQueDtcbiAgICAgICAgdXZzW2luZGV4KzNdID0gMSAqIGZhY3Rvci55ICsgb2Zmc2V0Lnk7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgY29sb3JzW2luZGV4XSA9IDE7XG4gICAgICAgIGNvbG9yc1tpbmRleCsxXSA9IDE7XG5cbiAgICAgICAgaW5kZXggPSBpICogMjtcbiAgICAgICAgaW5kaWNlc1tpbmRleF0gPSBpbmRleDtcbiAgICAgICAgaW5kaWNlc1tpbmRleCArIDFdID0gaW5kZXggKyAxO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIE1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUuY2FsbCh0aGlzKTtcblxuICAgIC8vIHdhaXQgZm9yIHRoZSBSb3BlIGN0b3IgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIHJlZnJlc2hcbiAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Sb3BlLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbGFzdFBvaW50ID0gcG9pbnRzWzBdO1xuICAgIHZhciBuZXh0UG9pbnQ7XG4gICAgdmFyIHBlcnBYID0gMDtcbiAgICB2YXIgcGVycFkgPSAwO1xuXG4gICAgLy8gdGhpcy5jb3VudCAtPSAwLjI7XG5cbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB0b3RhbCA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIHBvaW50LCBpbmRleCwgcmF0aW8sIHBlcnBMZW5ndGgsIG51bTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWw7IGkrKylcbiAgICB7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBpbmRleCA9IGkgKiA0O1xuXG4gICAgICAgIGlmIChpIDwgcG9pbnRzLmxlbmd0aC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0UG9pbnQgPSBwb2ludHNbaSsxXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcGVycFkgPSAtKG5leHRQb2ludC54IC0gbGFzdFBvaW50LngpO1xuICAgICAgICBwZXJwWCA9IG5leHRQb2ludC55IC0gbGFzdFBvaW50Lnk7XG5cbiAgICAgICAgcmF0aW8gPSAoMSAtIChpIC8gKHRvdGFsLTEpKSkgKiAxMDtcblxuICAgICAgICBpZiAocmF0aW8gPiAxKVxuICAgICAgICB7XG4gICAgICAgICAgICByYXRpbyA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwTGVuZ3RoID0gTWF0aC5zcXJ0KHBlcnBYICogcGVycFggKyBwZXJwWSAqIHBlcnBZKTtcbiAgICAgICAgbnVtID0gdGhpcy5fdGV4dHVyZS5oZWlnaHQgLyAyOyAvLygyMCArIE1hdGguYWJzKE1hdGguc2luKChpICsgdGhpcy5jb3VudCkgKiAwLjMpICogNTApICkqIHJhdGlvO1xuICAgICAgICBwZXJwWCAvPSBwZXJwTGVuZ3RoO1xuICAgICAgICBwZXJwWSAvPSBwZXJwTGVuZ3RoO1xuXG4gICAgICAgIHBlcnBYICo9IG51bTtcbiAgICAgICAgcGVycFkgKj0gbnVtO1xuXG4gICAgICAgIHZlcnRpY2VzW2luZGV4XSA9IHBvaW50LnggKyBwZXJwWDtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMV0gPSBwb2ludC55ICsgcGVycFk7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzJdID0gcG9pbnQueCAtIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCszXSA9IHBvaW50LnkgLSBwZXJwWTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBwb2ludDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lclVwZGF0ZVRyYW5zZm9ybSgpO1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGV4dHJhcyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkubWVzaFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNZXNoOiAgICAgICAgICAgcmVxdWlyZSgnLi9NZXNoJyksXG4gICAgUGxhbmU6ICAgICAgICAgICByZXF1aXJlKCcuL1BsYW5lJyksXG4gICAgUm9wZTogICAgICAgICAgIHJlcXVpcmUoJy4vUm9wZScpLFxuICAgIE1lc2hSZW5kZXJlcjogICByZXF1aXJlKCcuL3dlYmdsL01lc2hSZW5kZXJlcicpLFxuICAgIE1lc2hTaGFkZXI6ICAgICByZXF1aXJlKCcuL3dlYmdsL01lc2hTaGFkZXInKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIE1lc2ggPSByZXF1aXJlKCcuLi9NZXNoJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgTWVzaFJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9NZXNoUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgY29yZS5PYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIFxuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSgxNTAwMCk7XG5cbiAgICAvL1RPRE8gdGhpcyBjb3VsZCBiZSBhIHNpbmdsZSBidWZmZXIgc2hhcmVkIGFtb25nc3QgYWxsIHJlbmRlcmVycyBhcyB3ZSByZXVzZSB0aGlzIHNldCB1cCBpbiBtb3N0IHJlbmRlcmVyc1xuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgMTUwMDA7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufVxuXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoUmVuZGVyZXI7XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignbWVzaCcsIE1lc2hSZW5kZXJlcik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcmVuZGVyZXIgY29udGV4dCBhbmQgbmVjZXNzYXJ5IGJ1ZmZlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIG1lc2gge1BJWEkubWVzaC5NZXNofSB0aGUgbWVzaCB0byByZW5kZXJcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICBpZighbWVzaC5fdmVydGV4QnVmZmVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5faW5pdFdlYkdMKG1lc2gpO1xuICAgIH1cblxuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXIsXG4gICAgICAgIGdsID0gcmVuZGVyZXIuZ2wsXG4gICAgICAgIHRleHR1cmUgPSBtZXNoLl90ZXh0dXJlLmJhc2VUZXh0dXJlLFxuICAgICAgICBzaGFkZXIgPSBtZXNoLnNoYWRlcjsvLyB8fCByZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnBsdWdpbnMubWVzaFNoYWRlcjtcblxuICAgIHZhciBkcmF3TW9kZSA9IG1lc2guZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIID8gZ2wuVFJJQU5HTEVfU1RSSVAgOiBnbC5UUklBTkdMRVM7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShtZXNoLmJsZW5kTW9kZSk7XG5cbiAgICAvL1RPRE8gY2FjaGUgY3VzdG9tIHN0YXRlLi5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzaGFkZXIgPSBzaGFkZXIuc2hhZGVyc1tnbC5pZF0gfHwgc2hhZGVyLmdldFNoYWRlcihyZW5kZXJlcik7Ly8gOiBzaGFkZXI7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4LnZhbHVlID0gbWVzaC53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gbWVzaC53b3JsZEFscGhhO1xuXG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuXG4gICAgaWYgKCFtZXNoLmRpcnR5KVxuICAgIHtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIG1lc2gudmVydGljZXMpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIHV2c1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cblxuICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCAwLCBtZXNoLmluZGljZXMpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuXG4gICAgICAgIG1lc2guZGlydHkgPSBmYWxzZTtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZG9udCBuZWVkIHRvIHVwbG9hZCFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIH1cblxuICAgIGdsLmRyYXdFbGVtZW50cyhkcmF3TW9kZSwgbWVzaC5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuXG59O1xuXG4vKipcbiAqIFByZXBhcmVzIGFsbCB0aGUgYnVmZmVycyB0byByZW5kZXIgdGhpcyBtZXNoXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLl9pbml0V2ViR0wgPSBmdW5jdGlvbiAobWVzaClcbntcbiAgICAvLyBidWlsZCB0aGUgc3RyaXAhXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIG1lc2guX3ZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIG1lc2guX2luZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5fdXZCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuXG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC52ZXJ0aWNlcywgZ2wuRFlOQU1JQ19EUkFXKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICBtZXNoLnV2cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgaWYobWVzaC5jb2xvcnMpe1xuICAgICAgICBtZXNoLl9jb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fY29sb3JCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5jb2xvcnMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG59O1xuXG5cbi8qKlxuICogRW1wdGllcyB0aGUgY3VycmVudCBiYXRjaC5cbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuXG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBtZXNoIHJlbmRlcmVyLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgXG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgTWVzaCByZW5kZXJlclxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIFdlYkdMIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gTWVzaFNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIGNvcmUuU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIGFscGhhIDsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYVRleHR1cmVDb29yZDowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5NZXNoU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TaGFkZXIucHJvdG90eXBlKTtcbk1lc2hTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gTWVzaFNoYWRlcjtcblxuY29yZS5TaGFkZXJNYW5hZ2VyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoU2hhZGVyJywgTWVzaFNoYWRlcik7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9zaWduXG5cbmlmICghTWF0aC5zaWduKVxue1xuICAgIE1hdGguc2lnbiA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHggPSAreDtcbiAgICAgICAgaWYgKHggPT09IDAgfHwgaXNOYU4oeCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4ID4gMCA/IDEgOiAtMTtcbiAgICB9O1xufVxuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvb2JqZWN0LWFzc2lnblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnblxuXG5pZiAoIU9iamVjdC5hc3NpZ24pXG57XG4gICAgT2JqZWN0LmFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcbn1cbiIsInJlcXVpcmUoJy4vT2JqZWN0LmFzc2lnbicpO1xucmVxdWlyZSgnLi9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUnKTtcbnJlcXVpcmUoJy4vTWF0aC5zaWduJyk7XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cDovL3BhdWxpcmlzaC5jb20vMjAxMS9yZXF1ZXN0YW5pbWF0aW9uZnJhbWUtZm9yLXNtYXJ0LWFuaW1hdGluZy9cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzE1Nzk2NzFcbi8vIGh0dHA6Ly91cGRhdGVzLmh0bWw1cm9ja3MuY29tLzIwMTIvMDUvcmVxdWVzdEFuaW1hdGlvbkZyYW1lLUFQSS1ub3ctd2l0aC1zdWItbWlsbGlzZWNvbmQtcHJlY2lzaW9uXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90aW1oYWxsLzQwNzg2MTRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9GaW5hbmNpYWwtVGltZXMvcG9seWZpbGwtc2VydmljZS90cmVlL21hc3Rlci9wb2x5ZmlsbHMvcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG5cbi8vIEV4cGVjdGVkIHRvIGJlIHVzZWQgd2l0aCBCcm93c2VyZml5XG4vLyBCcm93c2VyaWZ5IGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB0aGUgdXNlIG9mIGBnbG9iYWxgIGFuZCBwYXNzZXMgdGhlXG4vLyBjb3JyZWN0IHJlZmVyZW5jZSBvZiBgZ2xvYmFsYCwgYHNlbGZgLCBhbmQgZmluYWxseSBgd2luZG93YFxuXG4vLyBEYXRlLm5vd1xuaWYgKCEoRGF0ZS5ub3cgJiYgRGF0ZS5wcm90b3R5cGUuZ2V0VGltZSkpIHtcbiAgICBEYXRlLm5vdyA9IGZ1bmN0aW9uIG5vdygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIH07XG59XG5cbi8vIHBlcmZvcm1hbmNlLm5vd1xuaWYgKCEoZ2xvYmFsLnBlcmZvcm1hbmNlICYmIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cpKSB7XG4gICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgaWYgKCFnbG9iYWwucGVyZm9ybWFuY2UpIHtcbiAgICAgICAgZ2xvYmFsLnBlcmZvcm1hbmNlID0ge307XG4gICAgfVxuICAgIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIH07XG59XG5cbi8vIHJlcXVlc3RBbmltYXRpb25GcmFtZVxudmFyIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbnZhciB2ZW5kb3JzID0gWydtcycsICdtb3onLCAnd2Via2l0JywgJ28nXTtcblxuZm9yKHZhciB4ID0gMDsgeCA8IHZlbmRvcnMubGVuZ3RoICYmICFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lOyArK3gpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnQ2FuY2VsQW5pbWF0aW9uRnJhbWUnXSB8fFxuICAgICAgICBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbn1cblxuaWYgKCFnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZGVsYXkgPSAxNiArIGxhc3RUaW1lIC0gY3VycmVudFRpbWU7XG5cbiAgICAgICAgaWYgKGRlbGF5IDwgMCkge1xuICAgICAgICAgICAgZGVsYXkgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFRpbWUgPSBjdXJyZW50VGltZTtcblxuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsYXN0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBjYWxsYmFjayhwZXJmb3JtYW5jZS5ub3coKSk7XG4gICAgICAgIH0sIGRlbGF5KTtcbiAgICB9O1xufVxuXG5pZiAoIWdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSkge1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgfTtcbn1cbiJdfQ== +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9kaXNwbGF5L09ic2VydmFibGVQb2ludC5qcyIsInNyYy9jb3JlL2Rpc3BsYXkvVHJhbnNmb3JtU3RhdGljLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3MvR3JhcGhpY3MuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9HcmFwaGljc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvV2ViR0xHcmFwaGljc0RhdGEuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkQ2lyY2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRDb21wbGV4UG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkTGluZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3V0aWxzL2J1aWxkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL01hdHJpeC5qcyIsInNyYy9jb3JlL21hdGgvUG9pbnQuanMiLCJzcmMvY29yZS9tYXRoL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvQ2lyY2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvRWxsaXBzZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1BvbHlnb24uanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9SZWN0YW5nbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlQnVmZmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvU3lzdGVtUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNNYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1RleHR1cmVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9NYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUXVhZC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvU3RlbmNpbE1hc2tTdGFjay5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9zcHJpdGVzL1Nwcml0ZS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvdGV4dC9UZXh0LmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9CYXNlVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1JlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9UZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZVV2cy5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90aWNrZXIvVGlja2VyLmpzIiwic3JjL2NvcmUvdGlja2VyL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzLmpzIiwic3JjL2NvcmUvdXRpbHMvaW5kZXguanMiLCJzcmMvY29yZS91dGlscy9wbHVnaW5UYXJnZXQuanMiLCJzcmMvZGVwcmVjYXRpb24uanMiLCJzcmMvZXh0cmFzL0JpdG1hcFRleHQuanMiLCJzcmMvZXh0cmFzL01vdmllQ2xpcC5qcyIsInNyYy9leHRyYXMvVGlsaW5nU3ByaXRlLmpzIiwic3JjL2V4dHJhcy9jYWNoZUFzQml0bWFwLmpzIiwic3JjL2V4dHJhcy9nZXRDaGlsZEJ5TmFtZS5qcyIsInNyYy9leHRyYXMvZ2V0R2xvYmFsUG9zaXRpb24uanMiLCJzcmMvZXh0cmFzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvYXNjaWkvQXNjaWlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibG9vbS9CbG9vbUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckRpckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1clhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9TbWFydEJsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvck1hdHJpeEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbG9yL0NvbG9yU3RlcEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2RvdC9Eb3RTY3JlZW5GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0JsdXJZVGludEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2dyYXkvR3JheUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvaW52ZXJ0L0ludmVydEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL25vaXNlL05vaXNlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9yZ2IvUkdCU3BsaXRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zZXBpYS9TZXBpYUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0QXhpc0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdHdpc3QvVHdpc3RGaWx0ZXIuanMiLCJzcmMvc3JjL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL0ludGVyYWN0aW9uRGF0YS5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbk1hbmFnZXIuanMiLCJzcmMvaW50ZXJhY3Rpb24vaW5kZXguanMiLCJzcmMvaW50ZXJhY3Rpb24vaW50ZXJhY3RpdmVUYXJnZXQuanMiLCJzcmMvbG9hZGVycy9iaXRtYXBGb250UGFyc2VyLmpzIiwic3JjL2xvYWRlcnMvaW5kZXguanMiLCJzcmMvbG9hZGVycy9sb2FkZXIuanMiLCJzcmMvbG9hZGVycy9zcHJpdGVzaGVldFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL3RleHR1cmVQYXJzZXIuanMiLCJzcmMvbWVzaC9NZXNoLmpzIiwic3JjL21lc2gvUGxhbmUuanMiLCJzcmMvbWVzaC9Sb3BlLmpzIiwic3JjL21lc2gvaW5kZXguanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoUmVuZGVyZXIuanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoU2hhZGVyLmpzIiwic3JjL3BvbHlmaWxsL01hdGguc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9PYmplY3QuYXNzaWduLmpzIiwic3JjL3BvbHlmaWxsL2luZGV4LmpzIiwic3JjL3BvbHlmaWxsL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzV1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNyaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbm1DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Y0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2h5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNWxCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM21CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25iQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICBjcmVhdGVDb250ZXh0OiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9jcmVhdGVDb250ZXh0JyksXG4gICAgc2V0VmVydGV4QXR0cmliQXJyYXlzOiBcdHJlcXVpcmUoJy4vbGliL3NldFZlcnRleEF0dHJpYkFycmF5cycpLFxuICAgIFxuICAgIEdMQnVmZmVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMQnVmZmVyJyksXG4gICAgR0xGcmFtZWJ1ZmZlcjogXHRcdFx0cmVxdWlyZSgnLi9saWIvR0xGcmFtZWJ1ZmZlcicpLFxuICAgIEdMU2hhZGVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMU2hhZGVyJyksXG4gICAgR0xUZXh0dXJlOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMVGV4dHVyZScpLFxuICAgIFxuICAgIFZlcnRleEFycmF5T2JqZWN0OiBcdFx0cmVxdWlyZSgnLi9saWIvVmVydGV4QXJyYXlPYmplY3QnKVxuXG59OyIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEVNUFRZX0FSUkFZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcblxudmFyIEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuQVJSQVlfQlVGRkVSO1xuXHR0aGlzLmRyYXdUeXBlID0gZHJhd1R5cGUgfHwgZ2wuU1RBVElDX0RSQVc7XG5cdHRoaXMuZGF0YSA9IEVNUFRZX0FSUkFZX0JVRkZFUjtcblxuXHRpZihkYXRhKVxuXHR7XG5cdFx0dGhpcy51cGxvYWQoZGF0YSk7XG5cdH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihkYXRhLCBvZmZzZXQsIGRvbnRCaW5kKVxue1xuXHQvLyB0b2RvIC0gbmVlZGVkP1xuXHQvL2lmKCFkb250QmluZClcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblx0XG5cdGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcblx0b2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cblx0aWYodGhpcy5kYXRhLmJ5dGVMZW5ndGggPj0gZGF0YS5ieXRlTGVuZ3RoKVxuXHR7XHRcblx0XHRnbC5idWZmZXJTdWJEYXRhKHRoaXMudHlwZSwgb2Zmc2V0LCBkYXRhKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC5idWZmZXJEYXRhKHRoaXMudHlwZSwgZGF0YSwgdGhpcy5kcmF3VHlwZSk7XG5cdH1cblxuXHR0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRCdWZmZXIodGhpcy50eXBlLCB0aGlzLmJ1ZmZlcik7XG59XG5cbkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24oZ2wsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZSA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIHR5cGUsIGRyYXdUeXBlKTtcbn1cblxuLy9UT0RPIERlc3Ryb3kuLlxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcjtcblxuIiwiXG52YXIgVGV4dHVyZSA9IHJlcXVpcmUoJy4vR0xUZXh0dXJlJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIEZyYW1lYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEZyYW1lYnVmZmVyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblx0XG5cdHRoaXMuc3RlbmNpbCA9IG51bGw7XG5cdHRoaXMudGV4dHVyZSA9IG51bGw7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlVGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBuZXcgVGV4dHVyZShnbCk7XG5cblx0dGhpcy50ZXh0dXJlLmJpbmQoKTtcblxuXHQvL2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZS50ZXh0dXJlLCAwKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmVuYWJsZVN0ZW5jaWwgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuc3RlbmNpbClyZXR1cm47XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnN0ZW5jaWwgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcbiAgICBcbiAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBcbiAgICAvLyBUT0RPLi4gdGhpcyBpcyBkZXB0aCBBTkQgc3RlbmNpbD9cbiAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsICB0aGlzLndpZHRoICAsIHRoaXMuaGVpZ2h0ICk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCByLCBnLCBiLCBhIClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICBnbC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpO1xuICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLmZyYW1lYnVmZmVyICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuXHRpZiAoIHRoaXMudGV4dHVyZSApXG4gICAge1xuICAgIFx0dGhpcy50ZXh0dXJlLnVwbG9hZERhdGEobnVsbCwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRpZiAoIHRoaXMuc3RlbmNpbCApXG4gICAge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0ZW5jaWwgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0dmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21EYXRhKGdsLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0dGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgZmJvLnVuYmluZCgpO1xuICAgIFxuICAgIHJldHVybiBmYm87XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZUZsb2F0MzIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0Ly8gY3JlYXRlIGEgbmV3IHRleHR1cmUuLlxuICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUuZnJvbURhdGEoZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuICAgIHRleHR1cmUuZW5hYmxlTmVhcmVzdFNjYWxpbmcoKTtcbiAgICB0ZXh0dXJlLmVuYWJsZVdyYXBDbGFtcCgpO1xuXG4gICAgLy9ub3cgY3JlYXRlIHRoZSBmcmFtZWJ1ZmZlciBvYmplY3QgYW5kIGF0dGFjaCB0aGUgdGV4dHVyZSB0byBpdC5cbiAgICB2YXIgZmJvID0gbmV3IEZyYW1lYnVmZmVyKGdsLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICBmYm8uZW5hYmxlVGV4dHVyZSh0ZXh0dXJlKVxuXG4gICAgZmJvLnVuYmluZCgpO1xuXG4gICAgcmV0dXJuIGZibztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGcmFtZWJ1ZmZlcjtcblxuIiwiXG52YXIgY29tcGlsZVByb2dyYW0gPSByZXF1aXJlKCcuL3NoYWRlci9jb21waWxlUHJvZ3JhbScpLFxuXHRleHRyYWN0QXR0cmlidXRlcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RBdHRyaWJ1dGVzJyksXG5cdGV4dHJhY3RVbmlmb3JtcyA9IHJlcXVpcmUoJy4vc2hhZGVyL2V4dHJhY3RVbmlmb3JtcycpLFxuXHRnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QgPSByZXF1aXJlKCcuL3NoYWRlci9nZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgU2hhZGVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cbnZhciBTaGFkZXIgPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIEZpcnN0IGNvbXBpbGUgdGhlIHByb2dyYW0uLlxuXHR0aGlzLnByb2dyYW0gPSBjb21waWxlUHJvZ3JhbShnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7XG5cblx0Ly8gbmV4dCBleHRyYWN0IHRoZSBhdHRyaWJ1dGVzXG5cdHRoaXMuYXR0cmlidXRlcyA9IGV4dHJhY3RBdHRyaWJ1dGVzKGdsLCB0aGlzLnByb2dyYW0pOyBcblxuICAgIHZhciB1bmlmb3JtRGF0YSA9IGV4dHJhY3RVbmlmb3JtcyhnbCwgdGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMudW5pZm9ybXMgPSBnZW5lcmF0ZVVuaWZvcm1BY2Nlc3NPYmplY3QoIGdsLCB1bmlmb3JtRGF0YSApO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4iLCJcbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gYSBXZWJHTCBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIFxuICogQHBhcmFtIGZvcm1hdCB7bnVtYmVyfSB0aGUgcGl4ZWwgZm9ybWF0IG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5SR0JBXG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSB0aGUgZ2wgdHlwZSBvZiB0aGUgdGV4dHVyZS4gZGVmYXVsdHMgdG8gZ2wuVU5TSUdORURfQllURVxuICovXG52YXIgVGV4dHVyZSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLnRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cblx0Ly8gc29tZSBzZXR0aW5ncy4uXG5cdHRoaXMubWlwbWFwID0gZmFsc2U7XG5cblx0dGhpcy5wcmVtdWx0aXBseUFscGhhID0gZmFsc2U7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cblx0dGhpcy5mb3JtYXQgPSBmb3JtYXQgfHwgZ2wuUkdCQTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5VTlNJR05FRF9CWVRFO1xuXG5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge1BJWEkuZ2xDb3JlLlRleHR1cmV9IFt2YXJuYW1lXSBbZGVzY3JpcHRpb25dXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKHNvdXJjZSlcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gc291cmNlLndpZHRoO1xuXHR0aGlzLmhlaWdodCA9IHNvdXJjZS5oZWlnaHQ7XG5cblx0Z2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xuICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMuZm9ybWF0LCB0aGlzLnR5cGUsIHNvdXJjZSk7XG59XG5cbnZhciBGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSBmYWxzZTtcblxuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkRGF0YSA9IGZ1bmN0aW9uKGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuYmluZCgpO1xuXHRcblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IHRoaXMud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IHRoaXMuaGVpZ2h0O1xuXG5cdGlmKGRhdGEgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpXG5cdHtcblx0XHRpZighRkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFKVxuXHRcdHtcblx0XHRcdHZhciBleHQgPSBnbC5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9mbG9hdFwiKTtcblx0XHRcdFxuXHRcdFx0aWYoZXh0KVxuXHRcdFx0e1xuXHRcdFx0XHRGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2Zsb2F0aW5nIHBvaW50IHRleHR1cmVzIG5vdCBhdmFpbGFibGUnKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnR5cGUgPSBnbC5GTE9BVDtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHQvLyBUT0RPIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzXG5cdFx0dGhpcy50eXBlID0gZ2wuVU5TSUdORURfQllURTtcblx0fVxuXG5cdC8vIHdoYXQgdHlwZSBvZiBkYXRhP1xuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG5cdGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsICB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgZGF0YSB8fCBudWxsKTtcblxufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24obG9jYXRpb24pXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0aWYobG9jYXRpb24gIT09IHVuZGVmaW5lZClcblx0e1xuXHRcdGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbik7XG5cdH1cblxuXHRnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0aGlzLnRleHR1cmUpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIG51bGwpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5taW5GaWx0ZXIgPSBmdW5jdGlvbiggbGluZWFyIClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRpZih0aGlzLm1pcG1hcClcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVJfTUlQTUFQX0xJTkVBUiA6IGdsLk5FQVJFU1RfTUlQTUFQX05FQVJFU1QpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcblx0fVx0XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1hZ0ZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBsaW5lYXIgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTWlwbWFwID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR0aGlzLm1pcG1hcCA9IHRydWU7XG5cdGdsLmdlbmVyYXRlTWlwbWFwKGdsLlRFWFRVUkVfMkQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVMaW5lYXJTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcih0cnVlKTtcblx0dGhpcy5tYWdGaWx0ZXIodHJ1ZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZU5lYXJlc3RTY2FsaW5nID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLm1pbkZpbHRlcihmYWxzZSk7XG5cdHRoaXMubWFnRmlsdGVyKGZhbHNlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlV3JhcENsYW1wID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwUmVwZWF0ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXHRcblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuUkVQRUFUKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5SRVBFQVQpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlVGV4dHVyZSh0aGlzLnRleHR1cmUpO1xufVxuXG4vL1RleHR1cmUuXG5UZXh0dXJlLmZyb21Tb3VyY2UgPSBmdW5jdGlvbihnbCwgc291cmNlLCBwcmVtdWx0aXBseUFscGhhKVxue1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS5wcmVtdWx0aXBseUFscGhhID0gcHJlbXVsdGlwbHlBbHBoYSB8fCBmYWxzZTtcblx0dGV4dHVyZS51cGxvYWQoc291cmNlKTtcblxuXHRyZXR1cm4gdGV4dHVyZTtcbn1cblxuVGV4dHVyZS5mcm9tRGF0YSA9IGZ1bmN0aW9uKGdsLCBkYXRhLCB3aWR0aCwgaGVpZ2h0KVxue1xuXHQvL2NvbnNvbGUubG9nKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXHR2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsKTtcblx0dGV4dHVyZS51cGxvYWREYXRhKGRhdGEsIHdpZHRoLCBoZWlnaHQpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZTtcblxuIiwiXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbi8vIHN0YXRlIG9iamVjdC8vXG5cblxuZnVuY3Rpb24gVmVydGV4QXJyYXlPYmplY3QoZ2wpXG57XG5cdFxuXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IChcbiAgICAgIGdsLmdldEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKSB8fFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKVxuICAgICk7XG5cbi8vXHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbiA9IG51bGw7XG5cblx0aWYodGhpcy5uYXRpdmVWYW9FeHRlbnNpb24pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhbyA9IHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7ICBcblx0fVxuXG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcblxuXHR0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuXHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cblx0XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZlcnRleEFycmF5T2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBWZXJ0ZXhBcnJheU9iamVjdDtcblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKHRoaXMubmF0aXZlVmFvKTsgIFxuXG5cdFx0aWYodGhpcy5kaXJ0eSlcblx0XHR7XG5cdFx0XHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cdFx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdFx0fVxuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLm5hdGl2ZVZhbylcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIFxuXHR7XG5cdFx0dmFyIGF0dHJpYiA9IHRoaXMuYXR0cmlidXRlc1tpXTtcblx0XHRhdHRyaWIuYnVmZmVyLmJpbmQoKTtcdFxuXG5cdFx0YXR0cmliLmF0dHJpYnV0ZS5wb2ludGVyKGF0dHJpYi50eXBlLCBhdHRyaWIubm9ybWFsaXplZCwgYXR0cmliLnN0cmlkZSwgYXR0cmliLnN0YXJ0KTsgXG5cdFx0XG5cdFx0Z2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYXR0cmliLmF0dHJpYnV0ZS5sb2NhdGlvbik7XG5cdH07XG5cblx0dGhpcy5pbmRleEJ1ZmZlci5iaW5kKCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRBdHRyaWJ1dGUgPSBmdW5jdGlvbihidWZmZXIsIGF0dHJpYnV0ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydClcbntcbiAgICB0aGlzLmF0dHJpYnV0ZXMucHVzaCh7XG4gICAgXHRidWZmZXI6IFx0YnVmZmVyLFxuICAgIFx0YXR0cmlidXRlOiBcdGF0dHJpYnV0ZSxcblxuICAgIFx0bG9jYXRpb246IFx0YXR0cmlidXRlLmxvY2F0aW9uLFxuXHQgXHR0eXBlOiBcdFx0dHlwZSB8fCB0aGlzLmdsLkZMT0FULFxuXHQgXHRub3JtYWxpemVkOiBub3JtYWxpemVkIHx8IGZhbHNlLFxuXHQgXHRzdHJpZGU6IFx0c3RyaWRlIHx8IDAsXG5cdCBcdHN0YXJ0OiBcdFx0c3RhcnQgfHwgMFxuXHR9KVxuXG5cdHRoaXMuZGlydHkgPSB0cnVlO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hZGRJbmRleCA9IGZ1bmN0aW9uKGJ1ZmZlciwgb3B0aW9ucylcbntcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gYnVmZmVyO1xuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBzdGFydClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuZHJhd0VsZW1lbnRzKHR5cGUsIHNpemUsIGdsLlVOU0lHTkVEX1NIT1JULCBzdGFydCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgQ29udGV4dFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG5cbnZhciBDT05URVhUX1VJRCA9IDA7XG5cbnZhciBjcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24oY2FudmFzLCBvcHRpb25zKVxue1xuICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgb3B0aW9ucykgfHwgXG4gICAgXHQgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFnbClcbiAgICB7XG4gICAgICAgIC8vIGZhaWwsIG5vdCBhYmxlIHRvIGdldCBhIGNvbnRleHRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB3ZWJHTC4gVHJ5IHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXInKTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCB3YW50IHRvIHBoYXNlIHRoaXMgb3V0P1xuICAgIGdsLmlkID0gQ09OVEVYVF9VSUQrKztcblxuICAgIHJldHVybiBnbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb250ZXh0O1xuXG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgc2V0VmVydGV4QXR0cmliQXJyYXlzID0gZnVuY3Rpb24gKGdsLCBhdHRyaWJzKVxue1x0XG4gICAvLyBjb25zb2xlLmxvZyhnbC5pZClcbiAgICB2YXIgZGF0YSA9IEdMX01BUFtnbC5pZF07XG5cbiAgICBpZighZGF0YSlcbiAgICB7XG5cdCAgIHZhciBtYXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cdFx0ZGF0YSA9IEdMX01BUFtnbC5pZF0gPSB7dGVtcEF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKVxuXHRcdFx0XHQgXHQgXHRcdCAgICxhdHRyaWJTdGF0ZTpuZXcgQXJyYXkobWF4QXR0cmlicyl9O1xuXHR9XG5cdFxuICAgIHZhciBpLFxuICAgIFx0dGVtcEF0dHJpYlN0YXRlID0gZGF0YS50ZW1wQXR0cmliU3RhdGUsXG4gICAgXHRhdHRyaWJTdGF0ZSA9IGRhdGEuYXR0cmliU3RhdGU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAoaSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbaV0ubG9jYXRpb25dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAoYXR0cmliU3RhdGVbaV0gIT09IHRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmliU3RhdGVbaV0gPSB0ZW1wQXR0cmliU3RhdGVbaV07XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmF0dHJpYlN0YXRlW2ldKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VmVydGV4QXR0cmliQXJyYXlzOyIsIlxuXG5cblxuY29tcGlsZVByb2dyYW0gPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcbiAgICB2YXIgZ2xWZXJ0U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuVkVSVEVYX1NIQURFUiwgdmVydGV4U3JjKTtcbiAgICB2YXIgZ2xGcmFnU2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNyYyk7XG5cbiAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbEZyYWdTaGFkZXIpO1xuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgLy8gaWYgbGlua2luZyBmYWlscywgdGhlbiBsb2cgYW5kIGNsZWFudXBcbiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUGl4aS5qcyBFcnJvcjogQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVyLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5WQUxJREFURV9TVEFUVVMnLCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLlZBTElEQVRFX1NUQVRVUykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5nZXRFcnJvcigpJywgZ2wuZ2V0RXJyb3IoKSk7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBwcm9ncmFtIGluZm8gbG9nLCBsb2cgaXRcbiAgICAgICAgaWYgKGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pICE9PSAnJylcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaXhpLmpzIFdhcm5pbmc6IGdsLmdldFByb2dyYW1JbmZvTG9nKCknLCBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICBwcm9ncmFtID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBzb21lIHNoYWRlcnNcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xGcmFnU2hhZGVyKTtcblxuICAgIHJldHVybiBwcm9ncmFtO1xufVxuXG52YXIgY29tcGlsZVNoYWRlciA9IGZ1bmN0aW9uIChnbCwgdHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzcmMpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZVByb2dyYW07XG5cbiIsIlxuXG52YXIgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkgXG57XG4gICAgc3dpdGNoICh0eXBlKVxuICAgIHtcbiAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAndmVjMic6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzQnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSg0ICogc2l6ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgY2FzZSAnc2FtcGxlcjJEJzpcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWMyJzogICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnaXZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDMgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjNCc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDQgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdib29sJzogICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMyJzpcblxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSggMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMzJzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWM0JzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ21hdDInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Myc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMV0pO1xuXG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDAsIDAsIDFdKTtcbiAgICB9XG59XG5cbnZhciBib29sZWFuQXJyYXkgPSBmdW5jdGlvbihzaXplKVxue1xuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgYXJyYXlbaV0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRWYWx1ZTtcbiIsIlxudmFyIG1hcFR5cGUgPSByZXF1aXJlKCcuL21hcFR5cGUnKTtcbnZhciBtYXBTaXplID0gcmVxdWlyZSgnLi9tYXBTaXplJyk7XG5cbnZhciBleHRyYWN0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICB2YXIgdG90YWxBdHRyaWJ1dGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxBdHRyaWJ1dGVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGF0dHJpYkRhdGEgPSBnbC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaSk7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgYXR0cmliRGF0YS50eXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYkRhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOnR5cGUsXG4gICAgICAgICAgICBzaXplOm1hcFNpemUodHlwZSksXG4gICAgICAgICAgICBsb2NhdGlvbjpnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBhdHRyaWJEYXRhLm5hbWUpLFxuICAgICAgICAgICAgLy9UT0RPIC0gbWFrZSBhbiBhdHRyaWJ1dGUgb2JqZWN0XG4gICAgICAgICAgICBwb2ludGVyOmZ1bmN0aW9uKHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpe1xuXG4gICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5sb2NhdGlvbix0aGlzLnNpemUsIHR5cGUgfHwgZ2wuRkxPQVQsIG5vcm1hbGl6ZWQgfHwgZmFsc2UsIHN0cmlkZSB8fCAwLCBzdGFydCB8fCAwKTsgXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYXR0cmlidXRlczsgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RBdHRyaWJ1dGVzO1xuXG4iLCJ2YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIGRlZmF1bHRWYWx1ZSA9IHJlcXVpcmUoJy4vZGVmYXVsdFZhbHVlJyk7XG5cblxudmFyIGV4dHJhY3RVbmlmb3JtcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuXHR2YXIgdW5pZm9ybXMgPSB7fTtcblx0XG4gICAgdmFyIHRvdGFsVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxVbmlmb3JtczsgaSsrKSBcbiAgICB7XG4gICAgXHR2YXIgdW5pZm9ybURhdGEgPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpO1xuICAgIFx0dmFyIG5hbWUgPSB1bmlmb3JtRGF0YS5uYW1lLnJlcGxhY2UoL1xcWy4qP1xcXS8sIFwiXCIpO1xuICAgICAgICB2YXIgdHlwZSA9IG1hcFR5cGUoZ2wsIHVuaWZvcm1EYXRhLnR5cGUgKTtcblxuICAgIFx0dW5pZm9ybXNbbmFtZV0gPSB7XG4gICAgXHRcdHR5cGU6dHlwZSxcbiAgICBcdFx0c2l6ZTp1bmlmb3JtRGF0YS5zaXplLFxuICAgIFx0XHRsb2NhdGlvbjpnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksXG4gICAgXHRcdHZhbHVlOmRlZmF1bHRWYWx1ZSh0eXBlLCB1bmlmb3JtRGF0YS5zaXplKVxuICAgIFx0fVxuICAgIH07XG5cdFxuXHRyZXR1cm4gdW5pZm9ybXM7XHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHRyYWN0VW5pZm9ybXM7XG5cbiIsIlxudmFyIGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IGZ1bmN0aW9uKGdsLCB1bmlmb3JtRGF0YSlcbntcbiAgICAvLyB0aGlzIGlzIHRoZSBvYmplY3Qgd2Ugd2lsbCBiZSBzZW5kaW5nIGJhY2suXG4gICAgLy8gYW4gb2JqZWN0IGhpZXJhY2h5IHdpbGwgYmUgY3JlYXRlZCBmb3Igc3RydWN0c1xuICAgIHZhciB1bmlmb3JtcyA9IHtkYXRhOnt9fTtcblxuICAgIHVuaWZvcm1zLmdsID0gZ2w7XG4gICAgXG4gICAgdmFyIHVuaWZvcm1LZXlzPSBPYmplY3Qua2V5cyh1bmlmb3JtRGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1LZXlzLmxlbmd0aDsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBmdWxsTmFtZSA9IHVuaWZvcm1LZXlzW2ldXG5cbiAgICAgICAgdmFyIG5hbWVUb2tlbnMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAxXTtcblxuICAgICAgICB2YXIgdW5pZm9ybUdyb3VwID0gZ2V0VW5pZm9ybUdyb3VwKG5hbWVUb2tlbnMsIHVuaWZvcm1zKTtcblxuICAgICAgICB2YXIgdW5pZm9ybSA9ICB1bmlmb3JtRGF0YVtmdWxsTmFtZV07XG4gICAgICAgIHVuaWZvcm1Hcm91cC5kYXRhW25hbWVdID0gdW5pZm9ybTtcblxuICAgICAgICB1bmlmb3JtR3JvdXAuZ2wgPSBnbDtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5pZm9ybUdyb3VwLCBuYW1lLCB7XG4gICAgICAgICAgICBnZXQ6IGdlbmVyYXRlR2V0dGVyKG5hbWUpLFxuICAgICAgICAgICAgc2V0OiBnZW5lcmF0ZVNldHRlcihuYW1lLCB1bmlmb3JtKVxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdW5pZm9ybXM7XG59XG5cbnZhciBnZW5lcmF0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpXG57XG5cdHZhciB0ZW1wbGF0ZSA9IGdldHRlclRlbXBsYXRlLnJlcGxhY2UoJyUlJywgbmFtZSk7XG5cdHJldHVybiBuZXcgRnVuY3Rpb24odGVtcGxhdGUpO1xufVxuXG52YXIgZ2VuZXJhdGVTZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCB1bmlmb3JtKVxue1xuICAgIHZhciB0ZW1wbGF0ZSA9IHNldHRlclRlbXBsYXRlLnJlcGxhY2UoLyUlL2csIG5hbWUpO1xuICAgIHZhciBzZXRUZW1wbGF0ZVxuICAgIFxuICAgIGlmKHVuaWZvcm0uc2l6ZSA9PT0gMSlcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19TSU5HTEVfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzZXRUZW1wbGF0ZSA9IEdMU0xfVE9fQVJSQVlfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cblxuICAgIGlmKHNldFRlbXBsYXRlKVxuICAgIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gXCJcXG50aGlzLmdsLlwiICsgc2V0VGVtcGxhdGUgKyBcIjtcIjtcbiAgICB9XG5cbiAgXHRyZXR1cm4gbmV3IEZ1bmN0aW9uKCd2YWx1ZScsIHRlbXBsYXRlKTtcbn1cblxudmFyIGdldFVuaWZvcm1Hcm91cCA9IGZ1bmN0aW9uKG5hbWVUb2tlbnMsIHVuaWZvcm0pXG57XG4gICAgdmFyIGN1ciA9IHVuaWZvcm07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVUb2tlbnMubGVuZ3RoIC0gMTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBvID0gY3VyW25hbWVUb2tlbnNbaV1dIHx8IHtkYXRhOnt9fTtcbiAgICAgICAgY3VyW25hbWVUb2tlbnNbaV1dID0gbztcbiAgICAgICAgY3VyID0gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGN1clxufVxuXG52YXIgZ2V0dGVyVGVtcGxhdGUgPSBbXG4gICAgJ3JldHVybiB0aGlzLmRhdGEuJSUudmFsdWU7Jyxcbl0uam9pbignXFxuJyk7XG5cbnZhciBzZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAndGhpcy5kYXRhLiUlLnZhbHVlID0gdmFsdWU7JyxcbiAgICAndmFyIGxvY2F0aW9uID0gdGhpcy5kYXRhLiUlLmxvY2F0aW9uOydcbl0uam9pbignXFxuJyk7XG5cblxudmFyIEdMU0xfVE9fU0lOR0xFX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ3ZlYzInOiAgICAgJ3VuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ3ZlYzMnOiAgICAgJ3VuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG4gICAgXHRcbiAgICAnaW50JzogICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnaXZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcblxuICAgICdtYXQyJzogICAgICd1bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0Myc6ICAgICAndW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG4gICAgJ21hdDQnOiAgICAgJ3VuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuXG4gICAgJ3NhbXBsZXIyRCc6J3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG52YXIgR0xTTF9UT19BUlJBWV9TRVRURVJTID0ge1xuXG4gICAgJ2Zsb2F0JzogICAgJ3VuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjNCc6ICAgICAndW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG4gICBcbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdDtcblxuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24odHlwZSkgXG57IFxuICAgIHJldHVybiBHTFNMX1RPX1NJWkVbdHlwZV07XG59XG5cblxudmFyIEdMU0xfVE9fU0laRSA9IHtcbiAgICAnZmxvYXQnOiAgICAxLFxuICAgICd2ZWMyJzogICAgIDIsXG4gICAgJ3ZlYzMnOiAgICAgMyxcbiAgICAndmVjNCc6ICAgICA0LFxuXG4gICAgJ2ludCc6ICAgICAgMSxcbiAgICAnaXZlYzInOiAgICAyLFxuICAgICdpdmVjMyc6ICAgIDMsXG4gICAgJ2l2ZWM0JzogICAgNCxcblxuICAgICdib29sJzogICAgIDEsXG4gICAgJ2J2ZWMyJzogICAgMixcbiAgICAnYnZlYzMnOiAgICAzLFxuICAgICdidmVjNCc6ICAgIDQsXG5cbiAgICAnbWF0Mic6ICAgICA0LFxuICAgICdtYXQzJzogICAgIDksXG4gICAgJ21hdDQnOiAgICAgMTYsXG5cbiAgICAnc2FtcGxlcjJEJzogIDFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24oZ2wsIHR5cGUpIFxue1xuICAgIGlmKCFHTF9UQUJMRSkgXG4gICAge1xuICAgICAgICB2YXIgdHlwZU5hbWVzID0gT2JqZWN0LmtleXMoR0xfVE9fR0xTTF9UWVBFUyk7XG5cbiAgICAgICAgR0xfVEFCTEUgPSB7fTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdHlwZU5hbWVzLmxlbmd0aDsgKytpKSBcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHRuID0gdHlwZU5hbWVzW2ldO1xuICAgICAgICAgICAgR0xfVEFCTEVbIGdsW3RuXSBdID0gR0xfVE9fR0xTTF9UWVBFU1t0bl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIEdMX1RBQkxFW3R5cGVdO1xufVxuXG52YXIgR0xfVEFCTEUgPSBudWxsO1xuXG52YXIgR0xfVE9fR0xTTF9UWVBFUyA9IHtcbiAgJ0ZMT0FUJzogICAgICAgJ2Zsb2F0JyxcbiAgJ0ZMT0FUX1ZFQzInOiAgJ3ZlYzInLFxuICAnRkxPQVRfVkVDMyc6ICAndmVjMycsXG4gICdGTE9BVF9WRUM0JzogICd2ZWM0JyxcblxuICAnSU5UJzogICAgICAgICAnaW50JyxcbiAgJ0lOVF9WRUMyJzogICAgJ2l2ZWMyJyxcbiAgJ0lOVF9WRUMzJzogICAgJ2l2ZWMzJyxcbiAgJ0lOVF9WRUM0JzogICAgJ2l2ZWM0JyxcbiAgXG4gICdCT09MJzogICAgICAgICdib29sJyxcbiAgJ0JPT0xfVkVDMic6ICAgJ2J2ZWMyJyxcbiAgJ0JPT0xfVkVDMyc6ICAgJ2J2ZWMzJyxcbiAgJ0JPT0xfVkVDNCc6ICAgJ2J2ZWM0JyxcbiAgXG4gICdGTE9BVF9NQVQyJzogICdtYXQyJyxcbiAgJ0ZMT0FUX01BVDMnOiAgJ21hdDMnLFxuICAnRkxPQVRfTUFUNCc6ICAnbWF0NCcsXG4gIFxuICAnU0FNUExFUl8yRCc6ICAnc2FtcGxlcjJEJyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwU2l6ZTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvQm9vbCh2KSB7XG4gICAgICAgIHJldHVybiAhIXY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vdElkKHYpIHtcbiAgICAgICAgcmV0dXJuICF2O1xuICAgIH1cblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcHJldmlvdXNfYXN5bmM7XG5cbiAgICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gICAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZiB8fFxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgdGhpcztcblxuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgICAgcHJldmlvdXNfYXN5bmMgPSByb290LmFzeW5jO1xuICAgIH1cblxuICAgIGFzeW5jLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBwcmV2aW91c19hc3luYztcbiAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbmx5X29uY2UoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIC8vIFBvcnRlZCBmcm9tIHVuZGVyc2NvcmUuanMgaXNPYmplY3RcbiAgICB2YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9pc0FycmF5TGlrZShhcnIpIHtcbiAgICAgICAgcmV0dXJuIF9pc0FycmF5KGFycikgfHwgKFxuICAgICAgICAgICAgLy8gaGFzIGEgcG9zaXRpdmUgaW50ZWdlciBsZW5ndGggcHJvcGVydHlcbiAgICAgICAgICAgIHR5cGVvZiBhcnIubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICBhcnIubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggJSAxID09PSAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2FycmF5RWFjaChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfbWFwKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdG9yKGFycltpbmRleF0sIGluZGV4LCBhcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JhbmdlKGNvdW50KSB7XG4gICAgICAgIHJldHVybiBfbWFwKEFycmF5KGNvdW50KSwgZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGk7IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9yZWR1Y2UoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBfYXJyYXlFYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9mb3JFYWNoT2Yob2JqZWN0LCBpdGVyYXRvcikge1xuICAgICAgICBfYXJyYXlFYWNoKF9rZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnIsIGl0ZW0pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfa2V5SXRlcmF0b3IoY29sbCkge1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB2YXIgbGVuO1xuICAgICAgICB2YXIga2V5cztcbiAgICAgICAgaWYgKF9pc0FycmF5TGlrZShjb2xsKSkge1xuICAgICAgICAgICAgbGVuID0gY29sbC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBsZW4gPyBpIDogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXlzID0gX2tleXMoY29sbCk7XG4gICAgICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGtleXNbaV0gOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpbWlsYXIgdG8gRVM2J3MgcmVzdCBwYXJhbSAoaHR0cDovL2FyaXlhLm9maWxhYnMuY29tLzIwMTMvMDMvZXM2LWFuZC1yZXN0LXBhcmFtZXRlci5odG1sKVxuICAgIC8vIFRoaXMgYWNjdW11bGF0ZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byBhbiBhcnJheSwgYWZ0ZXIgYSBnaXZlbiBpbmRleC5cbiAgICAvLyBGcm9tIHVuZGVyc2NvcmUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzIxNDApLlxuICAgIGZ1bmN0aW9uIF9yZXN0UGFyYW0oZnVuYywgc3RhcnRJbmRleCkge1xuICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCk7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSB1bnVzZWQgYnV0IGhhbmRsZSBjYXNlcyBvdXRzaWRlIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50OlxuICAgICAgICAgICAgLy8gdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICAgICAgICAvLyBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAvLyAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICAgICAgICAvLyByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBleHBvcnRlZCBhc3luYyBtb2R1bGUgZnVuY3Rpb25zIC8vLy9cblxuICAgIC8vLy8gbmV4dFRpY2sgaW1wbGVtZW50YXRpb24gd2l0aCBicm93c2VyLWNvbXBhdGlibGUgZmFsbGJhY2sgLy8vL1xuXG4gICAgLy8gY2FwdHVyZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZSB0byBndWFyZCBhZ2FpbnN0IGZha2VUaW1lciBtb2Nrc1xuICAgIHZhciBfc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzZXRJbW1lZGlhdGU7XG5cbiAgICB2YXIgX2RlbGF5ID0gX3NldEltbWVkaWF0ZSA/IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgIF9zZXRJbW1lZGlhdGUoZm4pO1xuICAgIH0gOiBmdW5jdGlvbihmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBfZGVsYXk7XG4gICAgfVxuICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IF9zZXRJbW1lZGlhdGUgPyBfZGVsYXkgOiBhc3luYy5uZXh0VGljaztcblxuXG4gICAgYXN5bmMuZm9yRWFjaCA9XG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9XG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mU2VyaWVzKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG5cbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPVxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9lYWNoT2ZMaW1pdChsaW1pdCkoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoT2YgPVxuICAgIGFzeW5jLmVhY2hPZiA9IGZ1bmN0aW9uIChvYmplY3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBvYmplY3QgPSBvYmplY3QgfHwgW107XG5cbiAgICAgICAgdmFyIGl0ZXIgPSBfa2V5SXRlcmF0b3Iob2JqZWN0KTtcbiAgICAgICAgdmFyIGtleSwgY29tcGxldGVkID0gMDtcblxuICAgICAgICB3aGlsZSAoKGtleSA9IGl0ZXIoKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpdGVyYXRvcihvYmplY3Rba2V5XSwga2V5LCBvbmx5X29uY2UoZG9uZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gMCkgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZC0tO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBrZXkgaXMgbnVsbCBpbiBjYXNlIGl0ZXJhdG9yIGlzbid0IGV4aGF1c3RlZFxuICAgICAgICAgICAgLy8gYW5kIGRvbmUgcmVzb2x2ZWQgc3luY2hyb25vdXNseS5cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gbnVsbCAmJiBjb21wbGV0ZWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZlNlcmllcyA9XG4gICAgYXN5bmMuZWFjaE9mU2VyaWVzID0gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iaiA9IG9iaiB8fCBbXTtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgdmFyIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRvcihvYmpba2V5XSwga2V5LCBvbmx5X29uY2UoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoaXRlcmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5mb3JFYWNoT2ZMaW1pdCA9XG4gICAgYXN5bmMuZWFjaE9mTGltaXQgPSBmdW5jdGlvbiAob2JqLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9lYWNoT2ZMaW1pdChsaW1pdCkob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZWFjaE9mTGltaXQobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBydW5uaW5nID0gMDtcbiAgICAgICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChkb25lICYmIHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWwoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZiwgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb1BhcmFsbGVsTGltaXQoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihfZWFjaE9mTGltaXQobGltaXQpLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvU2VyaWVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihhc3luYy5lYWNoT2ZTZXJpZXMsIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gX2lzQXJyYXlMaWtlKGFycikgPyBbXSA6IHt9O1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfYXN5bmNNYXApO1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLmluamVjdCA9XG4gICAgYXN5bmMuZm9sZGwgPVxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgaSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5mb2xkciA9XG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGlkZW50aXR5KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudHJhbnNmb3JtID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGl0ZXJhdG9yO1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBtZW1vO1xuICAgICAgICAgICAgbWVtbyA9IF9pc0FycmF5KGFycikgPyBbXSA6IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuZWFjaE9mKGFyciwgZnVuY3Rpb24odiwgaywgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHYsIGssIGNiKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleDogaW5kZXgsIHZhbHVlOiB4fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soX21hcChyZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICB9KSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMuc2VsZWN0ID1cbiAgICBhc3luYy5maWx0ZXIgPSBkb1BhcmFsbGVsKF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0TGltaXQgPVxuICAgIGFzeW5jLmZpbHRlckxpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID1cbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcblxuICAgIGZ1bmN0aW9uIF9yZWplY3QoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBfZmlsdGVyKGVhY2hmbiwgYXJyLCBmdW5jdGlvbih2YWx1ZSwgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgY2IoIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoZWFjaGZuLCBjaGVjaywgZ2V0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2IpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSBjYihnZXRSZXN1bHQoZmFsc2UsIHZvaWQgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWUoeCwgXywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNiKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2IgJiYgY2hlY2sodikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGdldFJlc3VsdCh0cnVlLCB4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGl0ZXJhdG9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGxpbWl0LCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBsaW1pdDtcbiAgICAgICAgICAgICAgICBlYWNoZm4oYXJyLCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMuYW55ID1cbiAgICBhc3luYy5zb21lID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIHRvQm9vbCwgaWRlbnRpdHkpO1xuXG4gICAgYXN5bmMuc29tZUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5hbGwgPVxuICAgIGFzeW5jLmV2ZXJ5ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIG5vdElkLCBub3RJZCk7XG5cbiAgICBhc3luYy5ldmVyeUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgbm90SWQsIG5vdElkKTtcblxuICAgIGZ1bmN0aW9uIF9maW5kR2V0UmVzdWx0KHYsIHgpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIGFzeW5jLmRldGVjdCA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mU2VyaWVzLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdExpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgaWRlbnRpdHksIF9maW5kR2V0UmVzdWx0KTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoY29tcGFyYXRvciksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgb3B0aW9uYWwsIHNoaWZ0IHRoZSBhcmdzLlxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHJlbWFpbmluZ1Rhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoZm4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gX2luZGV4T2YobGlzdGVuZXJzLCBmbik7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgX2FycmF5RWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2FycmF5RWFjaChrZXlzLCBmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSBfaXNBcnJheSh0YXNrc1trXSkgPyB0YXNrc1trXTogW3Rhc2tzW2tdXTtcbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBfZm9yRWFjaE9mKHJlc3VsdHMsIGZ1bmN0aW9uKHZhbCwgcmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCB0YXNrLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWFkLWxvY2tzXG4gICAgICAgICAgICB2YXIgbGVuID0gcmVxdWlyZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGRlcDtcbiAgICAgICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgICAgICAgIGlmICghKGRlcCA9IHRhc2tzW3JlcXVpcmVzW2xlbl1dKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhcyBpbmV4aXN0YW50IGRlcGVuZGVuY3knKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc0FycmF5KGRlcCkgJiYgX2luZGV4T2YoZGVwLCBrKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGN5Y2xpYyBkZXBlbmRlbmNpZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kgJiYgX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcblxuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHRpbWVzOiBERUZBVUxUX1RJTUVTLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IERFRkFVTFRfSU5URVJWQUxcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgdCA9PT0gJ251bWJlcicpe1xuICAgICAgICAgICAgICAgIGFjYy50aW1lcyA9IHBhcnNlSW50KHQsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiB0ID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodC50aW1lcywgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICAgICAgYWNjLmludGVydmFsID0gcGFyc2VJbnQodC5pbnRlcnZhbCwgMTApIHx8IERFRkFVTFRfSU5URVJWQUw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYXJndW1lbnQgdHlwZSBmb3IgXFwndGltZXNcXCc6ICcgKyB0eXBlb2YgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDEgfHwgbGVuZ3RoID4gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyAtIG11c3QgYmUgZWl0aGVyICh0YXNrKSwgKHRhc2ssIGNhbGxiYWNrKSwgKHRpbWVzLCB0YXNrKSBvciAodGltZXMsIHRhc2ssIGNhbGxiYWNrKScpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA8PSAyICYmIHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGltZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0cywgdGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgb3B0cy50YXNrID0gdGFzaztcblxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVkVGFzayh3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQodGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5SW50ZXJ2YWwoaW50ZXJ2YWwpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKG9wdHMudGltZXMpIHtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5hbEF0dGVtcHQgPSAhKG9wdHMudGltZXMtPTEpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KG9wdHMudGFzaywgZmluYWxBdHRlbXB0KSk7XG4gICAgICAgICAgICAgICAgaWYoIWZpbmFsQXR0ZW1wdCAmJiBvcHRzLmludGVydmFsID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlJbnRlcnZhbChvcHRzLmludGVydmFsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBvcHRzLmNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNhbGxiYWNrIGlzIHBhc3NlZCwgcnVuIHRoaXMgYXMgYSBjb250cm9sbCBmbG93XG4gICAgICAgIHJldHVybiBvcHRzLmNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrO1xuICAgIH07XG5cbiAgICBhc3luYy53YXRlcmZhbGwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGlmICghX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3cmFwSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCh3cmFwSXRlcmF0b3IobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbnN1cmVBc3luYyhpdGVyYXRvcikuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3BhcmFsbGVsKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgbm9vcDtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsIGZ1bmN0aW9uICh0YXNrLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0YXNrKF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLnBhcmFsbGVsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoYXN5bmMuZWFjaE9mLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24odGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoX2VhY2hPZkxpbWl0KGxpbWl0KSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2ZTZXJpZXMsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VDYWxsYmFjayhpbmRleCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYWtlQ2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIGFzeW5jLmFwcGx5ID0gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGNhbGxBcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoY2FsbEFyZ3MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb25jYXQoZWFjaGZuLCBhcnIsIGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIGZuKHgsIGZ1bmN0aW9uIChlcnIsIHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICB2YXIgbmV4dCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdC5hcHBseSh0aGlzLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihuZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gKytjYWxscyA8PSAxIHx8IHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9VbnRpbCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmR1cmluZyA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hlY2spO1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cnV0aCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0KGNoZWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9EdXJpbmcgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIGFzeW5jLmR1cmluZyhmdW5jdGlvbihuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY2FsbHMrKyA8IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBtdXN0IG5vdCBiZSB6ZXJvJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sgfHwgbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBxLnRhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfbmV4dChxLCB0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgd29ya2VycyAtPSAxO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHdvcmtlcnNMaXN0LCBmdW5jdGlvbiAod29ya2VyLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtlciA9PT0gdGFzayAmJiAhcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgdGFza3M6IFtdLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IGNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbm9vcCxcbiAgICAgICAgICAgIGVtcHR5OiBub29wLFxuICAgICAgICAgICAgZHJhaW46IG5vb3AsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHEuZHJhaW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHRydWUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFxLnBhdXNlZCAmJiB3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSh3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBxLnBheWxvYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEucGF5bG9hZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEudGFza3MubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfbWFwKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaCh0YXNrc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UoX25leHQocSwgdGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdW1lQ291bnQgPSBNYXRoLm1pbihxLmNvbmN1cnJlbmN5LCBxLnRhc2tzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSByZXN1bWVDb3VudDsgdysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgcSA9IF9xdWV1ZShmdW5jdGlvbiAoaXRlbXMsIGNiKSB7XG4gICAgICAgICAgICB3b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICAgIGVuZCA9IHNlcXVlbmNlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGJlZyArICgoZW5kIC0gYmVnICsgMSkgPj4+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3BcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoX2JpbmFyeVNlYXJjaChxLnRhc2tzLCBpdGVtLCBfY29tcGFyZVRhc2tzKSArIDEsIDAsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBxLnVuc2hpZnQ7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLmNhcmdvID0gZnVuY3Rpb24gKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gX3F1ZXVlKHdvcmtlciwgMSwgcGF5bG9hZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9jb25zb2xlX2ZuKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGlkZW50aXR5O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIG1lbW9pemVkKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGtleSBpbiBtZW1vKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF90aW1lcyhtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBtYXBwZXIoX3JhbmdlKGNvdW50KSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy50aW1lcyA9IF90aW1lcyhhc3luYy5tYXApO1xuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gX3RpbWVzKGFzeW5jLm1hcFNlcmllcyk7XG4gICAgYXN5bmMudGltZXNMaW1pdCA9IGZ1bmN0aW9uIChjb3VudCwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMubWFwTGltaXQoX3JhbmdlKGNvdW50KSwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBub29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW19yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgbmV4dGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfSldKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoYXQsIFtlcnJdLmNvbmNhdChyZXN1bHRzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5zZXEuYXBwbHkobnVsbCwgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBfYXBwbHlFYWNoKGVhY2hmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbihmbnMsIGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBnbyA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlYWNoZm4oZm5zLCBmdW5jdGlvbiAoZm4sIF8sIGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5hcHBseUVhY2ggPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZik7XG4gICAgYXN5bmMuYXBwbHlFYWNoU2VyaWVzID0gX2FwcGx5RWFjaChhc3luYy5lYWNoT2ZTZXJpZXMpO1xuXG5cbiAgICBhc3luYy5mb3JldmVyID0gZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZG9uZSA9IG9ubHlfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgdmFyIHRhc2sgPSBlbnN1cmVBc3luYyhmbik7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVBc3luYyhmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuXG4gICAgYXN5bmMuY29uc3RhbnQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICB2YXIgYXJncyA9IFtudWxsXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXN5bmMud3JhcFN5bmMgPVxuICAgIGFzeW5jLmFzeW5jaWZ5ID0gZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAoX2lzT2JqZWN0KHJlc3VsdCkgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLm1lc3NhZ2UgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBOb2RlLmpzXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG4gICAgfVxuICAgIC8vIEFNRCAvIFJlcXVpcmVKU1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG5cdCAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXG5cdCAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cblx0ICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSlcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cblx0ICogQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuXHQgKiBVbmljb2RlIHN0cmluZy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gJ3huLS0nICsgZW5jb2RlKHN0cmluZylcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG5cdHB1bnljb2RlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHQndmVyc2lvbic6ICcxLjMuMicsXG5cdFx0LyoqXG5cdFx0ICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHRcdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMpIHtcblx0XHRcdC8vIGluIE5vZGUuanMsIGlvLmpzLCBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IHB1bnljb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5wdW55Y29kZSA9IHB1bnljb2RlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUpIHJldHVybiB0cmlhbmdsZXM7XG5cbiAgICB2YXIgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgc2l6ZTtcblxuICAgIGlmIChoYXNIb2xlcykgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKTtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG4gICAgICAgIG1pblggPSBtYXhYID0gZGF0YVswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xuICAgICAgICAgICAgeSA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIHNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIHNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgICAgICBpLCBqLCBsYXN0O1xuXG4gICAgLy8gY2FsY3VsYXRlIG9yaWdpbmFsIHdpbmRpbmcgb3JkZXIgb2YgYSBwb2x5Z29uIHJpbmdcbiAgICBmb3IgKGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cblxuICAgIC8vIGxpbmsgcG9pbnRzIGludG8gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuICAgIGlmIChjbG9ja3dpc2UgPT09IChzdW0gPiAwKSkge1xuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgc2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChzaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0aWNlIGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZWFyLCB0cmlhbmdsZXMsIGRpbSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDIpO1xuXG4gICAgICAgICAgICAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgd2hpbGUgKHAgIT09IGVhci5wcmV2KSB7XG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG4gICAgdmFyIG1pblRYID0gYS54IDwgYi54ID8gKGEueCA8IGMueCA/IGEueCA6IGMueCkgOiAoYi54IDwgYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoYS55IDwgYy55ID8gYS55IDogYy55KSA6IChiLnkgPCBjLnkgPyBiLnkgOiBjLnkpLFxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1heFRZID0gYS55ID4gYi55ID8gKGEueSA+IGMueSA/IGEueSA6IGMueSkgOiAoYi55ID4gYy55ID8gYi55IDogYy55KTtcblxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgdmFyIG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBzaXplKSxcbiAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgdmFyIHAgPSBlYXIubmV4dFo7XG5cbiAgICB3aGlsZSAocCAmJiBwLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgcCA9IGVhci5wcmV2WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIC8vIGEgc2VsZi1pbnRlcnNlY3Rpb24gd2hlcmUgZWRnZSAodltpLTFdLHZbaV0pIGludGVyc2VjdHMgKHZbaSsxXSx2W2krMl0pXG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcblxuICAgICAgICAgICAgcCA9IHN0YXJ0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBwO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBzdG9wID0gbSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtLm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBtLnggJiZcbiAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoaHkgPCBtLnkgPyBoeCA6IHF4LCBoeSwgbS54LCBtLnksIGh5IDwgbS55ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxU2l6ZSA9PT0gMCB8fCAhcSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwLnogPD0gcS56KSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBzaXplIG9mIHRoZSBkYXRhIGJvdW5kaW5nIGJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlXG4gICAgeCA9IDMyNzY3ICogKHggLSBtaW5YKSAvIHNpemU7XG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAvIHNpemU7XG5cbiAgICB4ID0gKHggfCAoeCA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB4ID0gKHggfCAoeCA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnggPCBsZWZ0bW9zdC54KSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGVxdWFscyhhLCBiKSB8fCBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmXG4gICAgICAgICAgIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYik7XG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgcmV0dXJuIGFyZWEocDEsIHExLCBwMikgPiAwICE9PSBhcmVhKHAxLCBxMSwgcTIpID4gMCAmJlxuICAgICAgICAgICBhcmVhKHAyLCBxMiwgcDEpID4gMCAhPT0gYXJlYShwMiwgcTIsIHExKSA+IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGljZSBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0aWNlIG5vZGVzIGluIGEgcG9seWdvbiByaW5nXG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZVxuICAgIHRoaXMueiA9IG51bGw7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG5cbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuICAgIHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1xuLy8gV2Ugc3RvcmUgb3VyIEVFIG9iamVjdHMgaW4gYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gYH5gIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IG92ZXJyaWRkZW4gb3Jcbi8vIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vIFdlIGFsc28gYXNzdW1lIHRoYXQgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBldmVudCBuYW1lXG4vLyBpcyBhbiBFUzYgU3ltYm9sLlxuLy9cbnZhciBwcmVmaXggPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJyA/ICd+JyA6IGZhbHNlO1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIEV2ZW50RW1pdHRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgQ29udGV4dCBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgZW1pdCBvbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIE1pbmltYWwgRXZlbnRFbWl0dGVyIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkgeyAvKiBOb3RoaW5nIHRvIHNldCAqLyB9XG5cbi8qKlxuICogSG9sZHMgdGhlIGFzc2lnbmVkIEV2ZW50RW1pdHRlcnMgYnkgbmFtZS5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiBhIGxpc3Qgb2YgYXNzaWduZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZXhpc3RzIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7QXJyYXl8Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50LCBleGlzdHMpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGF2YWlsYWJsZSA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoZXhpc3RzKSByZXR1cm4gISFhdmFpbGFibGU7XG4gIGlmICghYXZhaWxhYmxlKSByZXR1cm4gW107XG4gIGlmIChhdmFpbGFibGUuZm4pIHJldHVybiBbYXZhaWxhYmxlLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGF2YWlsYWJsZS5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBhdmFpbGFibGVbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIEVtaXQgYW4gZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSW5kaWNhdGlvbiBpZiB3ZSd2ZSBlbWl0dGVkIGFuIGV2ZW50LlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyBFdmVudExpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdG9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgdGhpcylcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgdGhpcy5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lcjtcbiAgZWxzZSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XS5mbikgdGhpcy5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gICAgZWxzZSB0aGlzLl9ldmVudHNbZXZ0XSA9IFtcbiAgICAgIHRoaXMuX2V2ZW50c1tldnRdLCBsaXN0ZW5lclxuICAgIF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGFuIEV2ZW50TGlzdGVuZXIgdGhhdCdzIG9ubHkgY2FsbGVkIG9uY2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzLCB0cnVlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2Ugd2FudCB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgdGhhdCB3ZSBuZWVkIHRvIGZpbmQuXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IE9ubHkgcmVtb3ZlIGxpc3RlbmVycyBtYXRjaGluZyB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25jZSBsaXN0ZW5lcnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBldmVudHMgPSBbXTtcblxuICBpZiAoZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgIGxpc3RlbmVycy5mbiAhPT0gZm5cbiAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVycy5vbmNlKVxuICAgICAgICB8fCAoY29udGV4dCAmJiBsaXN0ZW5lcnMuY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuXG4gICAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKVxuICAgICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAvL1xuICBpZiAoZXZlbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW2V2dF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgb3Igb25seSB0aGUgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmVycyBmb3IuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKGV2ZW50KSBkZWxldGUgdGhpcy5fZXZlbnRzW3ByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRdO1xuICBlbHNlIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFwcGx5IGFueW1vcmUuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4ndXNlIHN0cmljdCc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiFcbiAqIGFzeW5jXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jXG4gKlxuICogQ29weXJpZ2h0IDIwMTAtMjAxNCBDYW9sYW4gTWNNYWhvblxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbi8qanNoaW50IG9uZXZhcjogZmFsc2UsIGluZGVudDo0ICovXG4vKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cbihmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXN5bmMgPSB7fTtcblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcm9vdCwgcHJldmlvdXNfYXN5bmM7XG5cbiAgICByb290ID0gdGhpcztcbiAgICBpZiAocm9vdCAhPSBudWxsKSB7XG4gICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWQpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkocm9vdCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8gY3Jvc3MtYnJvd3NlciBjb21wYXRpYmxpdHkgZnVuY3Rpb25zIC8vLy9cblxuICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgdmFyIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG5cbiAgICB2YXIgX2VhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBfbWFwID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgaWYgKGFyci5tYXApIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIubWFwKGl0ZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IoeCwgaSwgYSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHZhciBfcmVkdWNlID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIG1lbW8pIHtcbiAgICAgICAgaWYgKGFyci5yZWR1Y2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGl0ZXJhdG9yLCBtZW1vKTtcbiAgICAgICAgfVxuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICBtZW1vID0gaXRlcmF0b3IobWVtbywgeCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuXG4gICAgdmFyIF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgX2VhY2goYXJyLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgb25seV9vbmNlKGRvbmUpICk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2ggPSBhc3luYy5lYWNoO1xuXG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICB2YXIgaXRlcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGFycltjb21wbGV0ZWRdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID0gYXN5bmMuZWFjaFNlcmllcztcblxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZuID0gX2VhY2hMaW1pdChsaW1pdCk7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIFthcnIsIGl0ZXJhdG9yLCBjYWxsYmFja10pO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaExpbWl0ID0gYXN5bmMuZWFjaExpbWl0O1xuXG4gICAgdmFyIF9lYWNoTGltaXQgPSBmdW5jdGlvbiAobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgaWYgKCFhcnIubGVuZ3RoIHx8IGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVwbGVuaXNoICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiBzdGFydGVkIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoYXJyW3N0YXJ0ZWQgLSAxXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB2YXIgZG9QYXJhbGxlbCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvUGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKGxpbWl0LCBmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFtfZWFjaExpbWl0KGxpbWl0KV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBkb1NlcmllcyA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoU2VyaWVzXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBfYXN5bmNNYXAgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1t4LmluZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9tYXBMaW1pdChsaW1pdCkoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB2YXIgX21hcExpbWl0ID0gZnVuY3Rpb24obGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGRvUGFyYWxsZWxMaW1pdChsaW1pdCwgX2FzeW5jTWFwKTtcbiAgICB9O1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihtZW1vLCB4LCBmdW5jdGlvbiAoZXJyLCB2KSB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGluamVjdCBhbGlhc1xuICAgIGFzeW5jLmluamVjdCA9IGFzeW5jLnJlZHVjZTtcbiAgICAvLyBmb2xkbCBhbGlhc1xuICAgIGFzeW5jLmZvbGRsID0gYXN5bmMucmVkdWNlO1xuXG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSkucmV2ZXJzZSgpO1xuICAgICAgICBhc3luYy5yZWR1Y2UocmV2ZXJzZWQsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICAvLyBmb2xkciBhbGlhc1xuICAgIGFzeW5jLmZvbGRyID0gYXN5bmMucmVkdWNlUmlnaHQ7XG5cbiAgICB2YXIgX2ZpbHRlciA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LnZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG4gICAgYXN5bmMuZmlsdGVyU2VyaWVzID0gZG9TZXJpZXMoX2ZpbHRlcik7XG4gICAgLy8gc2VsZWN0IGFsaWFzXG4gICAgYXN5bmMuc2VsZWN0ID0gYXN5bmMuZmlsdGVyO1xuICAgIGFzeW5jLnNlbGVjdFNlcmllcyA9IGFzeW5jLmZpbHRlclNlcmllcztcblxuICAgIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLnJlamVjdCA9IGRvUGFyYWxsZWwoX3JlamVjdCk7XG4gICAgYXN5bmMucmVqZWN0U2VyaWVzID0gZG9TZXJpZXMoX3JlamVjdCk7XG5cbiAgICB2YXIgX2RldGVjdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIG1haW5fY2FsbGJhY2spIHtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKHgpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZGV0ZWN0ID0gZG9QYXJhbGxlbChfZGV0ZWN0KTtcbiAgICBhc3luYy5kZXRlY3RTZXJpZXMgPSBkb1NlcmllcyhfZGV0ZWN0KTtcblxuICAgIGFzeW5jLnNvbWUgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbnkgYWxpYXNcbiAgICBhc3luYy5hbnkgPSBhc3luYy5zb21lO1xuXG4gICAgYXN5bmMuZXZlcnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghdikge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gYWxsIGFsaWFzXG4gICAgYXN5bmMuYWxsID0gYXN5bmMuZXZlcnk7XG5cbiAgICBhc3luYy5zb3J0QnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgYXN5bmMubWFwKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAoZXJyLCBjcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHt2YWx1ZTogeCwgY3JpdGVyaWE6IGNyaXRlcmlhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoZm4pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGhcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldID09PSBmbikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdGFza0NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtYWluaW5nVGFza3MtLVxuICAgICAgICAgICAgX2VhY2gobGlzdGVuZXJzLnNsaWNlKDApLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIHZhciB0aGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZmluYWwgY2FsbGJhY2sgZnJvbSBjYWxsaW5nIGl0c2VsZiBpZiBpdCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdGhlQ2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9lYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKF9rZXlzKHJlc3VsdHMpLCBmdW5jdGlvbihya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIHN1YnNlcXVlbnQgZXJyb3JzIGhpdHRpbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUodGFza0NvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCBNYXRoLmFicyh0YXNrLmxlbmd0aCAtIDEpKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucmV0cnkgPSBmdW5jdGlvbih0aW1lcywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIERFRkFVTFRfVElNRVMgPSA1O1xuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcbiAgICAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHRpbWVzIG5vdCBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICAgICAgdGltZXMgPSBERUZBVUxUX1RJTUVTO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lcyBpcyBhIG51bWJlclxuICAgICAgICB0aW1lcyA9IHBhcnNlSW50KHRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgdmFyIHdyYXBwZWRUYXNrID0gZnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkUmVzdWx0cykge1xuICAgICAgICAgICAgdmFyIHJldHJ5QXR0ZW1wdCA9IGZ1bmN0aW9uKHRhc2ssIGZpbmFsQXR0ZW1wdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKGZ1bmN0aW9uKGVyciwgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKCFlcnIgfHwgZmluYWxBdHRlbXB0LCB7ZXJyOiBlcnIsIHJlc3VsdDogcmVzdWx0fSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXBwZWRSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcykge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KHRhc2ssICEodGltZXMtPTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBjYWxsYmFjaykoZGF0YS5lcnIsIGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrXG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJdGVyYXRvciA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGZ1bmN0aW9uKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGVhY2hmbi5tYXAodGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGVhY2hmbi5lYWNoKF9rZXlzKHRhc2tzKSwgZnVuY3Rpb24gKGssIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGFza3Nba10oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogYXN5bmMubWFwLCBlYWNoOiBhc3luYy5lYWNoIH0sIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogX21hcExpbWl0KGxpbWl0KSwgZWFjaDogX2VhY2hMaW1pdChsaW1pdCkgfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICBhc3luYy5tYXBTZXJpZXModGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5pdGVyYXRvciA9IGZ1bmN0aW9uICh0YXNrcykge1xuICAgICAgICB2YXIgbWFrZUNhbGxiYWNrID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmbi5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCB0YXNrcy5sZW5ndGggLSAxKSA/IG1ha2VDYWxsYmFjayhpbmRleCArIDEpOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KFxuICAgICAgICAgICAgICAgIG51bGwsIGFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgX2NvbmNhdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHIgPSByLmNvbmNhdCh5IHx8IFtdKTtcbiAgICAgICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRlc3QoKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLndoaWxzdCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvV2hpbHN0ID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAodGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMudW50aWwodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAoIXRlc3QuYXBwbHkobnVsbCwgYXJncykpIHtcbiAgICAgICAgICAgICAgICBhc3luYy5kb1VudGlsKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcG9zLCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxLnNhdHVyYXRlZCAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHEuZHJhaW4gPSBudWxsO1xuICAgICAgICAgICAgICBxLnRhc2tzID0gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gcS50YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocS5lbXB0eSAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLmRyYWluICYmIHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UobmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcih0YXNrLmRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSB0cnVlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSBxLmNvbmN1cnJlbmN5OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMucHJpb3JpdHlRdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG5cbiAgICAgICAgZnVuY3Rpb24gX2NvbXBhcmVUYXNrcyhhLCBiKXtcbiAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgIHZhciBiZWcgPSAtMSxcbiAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBzZXF1ZW5jZVttaWRdKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGJlZyA9IG1pZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiZWc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG5vcm1hbCBxdWV1ZVxuICAgICAgICB2YXIgcSA9IGFzeW5jLnF1ZXVlKHdvcmtlciwgY29uY3VycmVuY3kpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciB3b3JraW5nICAgICA9IGZhbHNlLFxuICAgICAgICAgICAgdGFza3MgICAgICAgPSBbXTtcblxuICAgICAgICB2YXIgY2FyZ28gPSB7XG4gICAgICAgICAgICB0YXNrczogdGFza3MsXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBudWxsLFxuICAgICAgICAgICAgZW1wdHk6IG51bGwsXG4gICAgICAgICAgICBkcmFpbjogbnVsbCxcbiAgICAgICAgICAgIGRyYWluZWQ6IHRydWUsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZ28uc2F0dXJhdGVkICYmIHRhc2tzLmxlbmd0aCA9PT0gcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ28uc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoY2FyZ28ucHJvY2Vzcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcygpIHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2luZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2FyZ28uZHJhaW4gJiYgIWNhcmdvLmRyYWluZWQpIGNhcmdvLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvLmRyYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRzID0gdHlwZW9mIHBheWxvYWQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0YXNrcy5zcGxpY2UoMCwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tzLnNwbGljZSgwLCB0YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRzID0gX21hcCh0cywgZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmKGNhcmdvLmVtcHR5KSBjYXJnby5lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHdvcmtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtlcihkcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JraW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKHRzLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjYXJnbztcbiAgICB9O1xuXG4gICAgdmFyIF9jb25zb2xlX2ZuID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZWFjaChhcmdzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbmFtZV0oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIG1lbW9ba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICBxW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfTtcblxuICAgIGFzeW5jLnVubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb3VudGVyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jLm1hcFNlcmllcyhjb3VudGVyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXEgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXN5bmMucmVkdWNlKGZucywgYXJncywgZnVuY3Rpb24gKG5ld2FyZ3MsIGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KFtmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1dKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy5jb21wb3NlID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICB2YXIgX2FwcGx5RWFjaCA9IGZ1bmN0aW9uIChlYWNoZm4sIGZucyAvKmFyZ3MuLi4qLykge1xuICAgICAgICB2YXIgZ28gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzLmNvbmNhdChbY2JdKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgICAgIHJldHVybiBnby5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuYXBwbHlFYWNoID0gZG9QYXJhbGxlbChfYXBwbHlFYWNoKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBkb1NlcmllcyhfYXBwbHlFYWNoKTtcblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbihuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsInZhciBhc3luYyAgICAgICA9IHJlcXVpcmUoJ2FzeW5jJyksXG4gICAgdXJsUGFyc2VyICAgPSByZXF1aXJlKCd1cmwnKSxcbiAgICBSZXNvdXJjZSAgICA9IHJlcXVpcmUoJy4vUmVzb3VyY2UnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgbXVsdGlwbGUgcmVzb3VyY2VzIHRvIGxvYWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KSB7XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICBjb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByb2dyZXNzIHBlcmNlbnQgb2YgdGhlIGxvYWRlciBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRpbmcgc3RhdGUgb2YgdGhlIGxvYWRlciwgdHJ1ZSBpZiBpdCBpcyBjdXJyZW50bHkgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdG90YWwgcHJvZ3Jlc3MgdGhhdCBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGJlZm9yZSBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaWRkbGV3YXJlIHRvIHJ1biBhZnRlciBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfbG9hZFJlc291cmNlYCBmdW5jdGlvbiBib3VuZCB3aXRoIHRoaXMgb2JqZWN0IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kTG9hZFJlc291cmNlID0gdGhpcy5fbG9hZFJlc291cmNlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkxvYWRgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkxvYWQgPSB0aGlzLl9vbkxvYWQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvdXJjZSBidWZmZXIgdGhhdCBmaWxscyB1bnRpbCBgbG9hZGAgaXMgY2FsbGVkIHRvIHN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB0cmFjayBsb2FkIGNvbXBsZXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9udW1Ub0xvYWQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlcyB3YWl0aW5nIHRvIGJlIGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2VbXX1cbiAgICAgKi9cbiAgICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX2JvdW5kTG9hZFJlc291cmNlLCBjb25jdXJyZW5jeSk7XG5cbiAgICAvKipcbiAgICAgKiBBbGwgdGhlIHJlc291cmNlcyBmb3IgdGhpcyBsb2FkZXIga2V5ZWQgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIFJlc291cmNlPn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgb3IgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwcm9ncmVzc1xuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGVycm9yZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGxvYWRlciBiZWdpbnMgdG8gcHJvY2VzcyB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBxdWV1ZWQgcmVzb3VyY2VzIGFsbCBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbi8qKlxuICogQWRkcyBhIHJlc291cmNlIChvciBtdWx0aXBsZSByZXNvdXJjZXMpIHRvIHRoZSBsb2FkZXIgcXVldWUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gdGFrZSBhIHdpZGUgdmFyaWV0eSBvZiBkaWZmZXJlbnQgcGFyYW1ldGVycy4gVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBhbHdheXNcbiAqIHJlcXVpcmVkIHRoZSB1cmwgdG8gbG9hZC4gQWxsIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOlxuICpcbiAqIGBgYGpzXG4gKiBsb2FkZXJcbiAqICAgICAvLyBub3JtYWwgcGFyYW0gc3ludGF4XG4gKiAgICAgLmFkZCgna2V5JywgJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJywgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCgnaHR0cDovLy4uLicpXG4gKlxuICogICAgIC8vIG9iamVjdCBzeW50YXhcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgbmFtZTogJ2tleTInLFxuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MycsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9XG4gKiAgICAgfSlcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgdXJsOiAnaHR0cHM6Ly8uLi4nLFxuICogICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7fSxcbiAqICAgICAgICAgY3Jvc3NPcmlnaW46IHRydWVcbiAqICAgICB9KVxuICpcbiAqICAgICAvLyB5b3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBvYmplY3RzIG9yIHVybHMgb3IgYm90aFxuICogICAgIC5hZGQoW1xuICogICAgICAgICB7IG5hbWU6ICdrZXk0JywgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgIHsgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgICdodHRwOi8vLi4uJ1xuICogICAgIF0pO1xuICogYGBgXG4gKlxuICogQGFsaWFzIGVucXVldWVcbiAqIEBwYXJhbSBbbmFtZV0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQsIGlmIG5vdCBwYXNzZWQgdGhlIHVybCBpcyB1c2VkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCByZWxhdGl2ZSB0byB0aGUgYmFzZVVybCBvZiB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7Ym9vbGVhbn0gSXMgdGhpcyByZXF1ZXN0IGNyb3NzLW9yaWdpbj8gRGVmYXVsdCBpcyB0byBkZXRlcm1pbmUgYXV0b21hdGljYWxseS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5sb2FkVHlwZT1SZXNvdXJjZS5MT0FEX1RZUEUuWEhSXSB7UmVzb3VyY2UuWEhSX0xPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGlzIHNwZWNpZmljIHJlc291cmNlIGNvbXBsZXRlcyBsb2FkaW5nLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFkZCA9IExvYWRlci5wcm90b3R5cGUuZW5xdWV1ZSA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIGNiKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIG9mIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hZGQobmFtZVtpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBpZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluc3RlYWQgb2YgcGFyYW1zXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYiA9IHVybCB8fCBuYW1lLmNhbGxiYWNrIHx8IG5hbWUub25Db21wbGV0ZTtcbiAgICAgICAgb3B0aW9ucyA9IG5hbWU7XG4gICAgICAgIHVybCA9IG5hbWUudXJsO1xuICAgICAgICBuYW1lID0gbmFtZS5uYW1lIHx8IG5hbWUua2V5IHx8IG5hbWUudXJsO1xuICAgIH1cblxuICAgIC8vIGNhc2Ugd2hlcmUgbm8gbmFtZSBpcyBwYXNzZWQgc2hpZnQgYWxsIGFyZ3Mgb3ZlciBieSBvbmUuXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHVybDtcbiAgICAgICAgdXJsID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBzaGlmdGVkIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIHVybC5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB1cmwgcGFzc2VkIHRvIGFkZCByZXNvdXJjZSB0byBsb2FkZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gb3B0aW9ucyBhcmUgb3B0aW9uYWwgc28gcGVvcGxlIG1pZ2h0IHBhc3MgYSBmdW5jdGlvbiBhbmQgbm8gb3B0aW9uc1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHJlc291cmNlIGFscmVhZHkgZXhpc3RzLlxuICAgIGlmICh0aGlzLnJlc291cmNlc1tuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc291cmNlIHdpdGggbmFtZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgIH1cblxuICAgIC8vIGFkZCBiYXNlIHVybCBpZiB0aGlzIGlzbid0IGFuIGFic29sdXRlIHVybFxuICAgIHVybCA9IHRoaXMuX2hhbmRsZUJhc2VVcmwodXJsKTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgc3RvcmUgdGhlIHJlc291cmNlXG4gICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0gPSBuZXcgUmVzb3VyY2UobmFtZSwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0ub25jZSgnYWZ0ZXJNaWRkbGV3YXJlJywgY2IpO1xuICAgIH1cblxuICAgIHRoaXMuX251bVRvTG9hZCsrO1xuXG4gICAgLy8gaWYgYWxyZWFkeSBsb2FkaW5nIGFkZCBpdCB0byB0aGUgd29ya2VyIHF1ZXVlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAoMTAwIC0gdGhpcy5wcm9ncmVzcykgLyAodGhpcy5fcXVldWUubGVuZ3RoKCkgKyB0aGlzLl9xdWV1ZS5ydW5uaW5nKCkpO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgYnVmZmVyIGl0IHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSBsYXRlclxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9idWZmZXIucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAxMDAgLyB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuTG9hZGVyLnByb3RvdHlwZS5faGFuZGxlQmFzZVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFyc2VkVXJsID0gdXJsUGFyc2VyLnBhcnNlKHVybCk7XG5cbiAgICAvLyBhYnNvbHV0ZSB1cmwsIGp1c3QgdXNlIGl0IGFzIGlzLlxuICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgfHwgcGFyc2VkVXJsLnBhdGhuYW1lLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBpZiBiYXNlVXJsIGRvZXNuJ3QgZW5kIGluIHNsYXNoIGFuZCB1cmwgZG9lc24ndCBzdGFydCB3aXRoIHNsYXNoLCB0aGVuIGFkZCBhIHNsYXNoIGluYmV0d2VlblxuICAgIGlmIChcbiAgICAgICAgdGhpcy5iYXNlVXJsLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmJhc2VVcmwubGFzdEluZGV4T2YoJy8nKSAhPT0gdGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgdXJsLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyAnLycgKyB1cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsICsgdXJsO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBTZXRzIHVwIGEgbWlkZGxld2FyZSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuICpiZWZvcmUqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyBwcmVcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYmVmb3JlID0gTG9hZGVyLnByb3RvdHlwZS5wcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLnB1c2goZm4pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmFmdGVyKiB0aGVcbiAqIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqXG4gKiBAYWxpYXMgdXNlXG4gKiBAcGFyYW0gbWlkZGxld2FyZSB7ZnVuY3Rpb259IFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFmdGVyID0gTG9hZGVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9hZnRlck1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoZSBxdWV1ZSBvZiB0aGUgbG9hZGVyIHRvIHByZXBhcmUgZm9yIGEgbmV3IGxvYWQuXG4gKlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvLyB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG4gICAgLy8gdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gICAgdGhpcy5fcXVldWUuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGxvYWRpbmcgdGhlIHF1ZXVlZCByZXNvdXJjZXMuXG4gKlxuICogQGZpcmVzIHN0YXJ0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgYGNvbXBsZXRlYCBldmVudC5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgLy8gcmVnaXN0ZXIgY29tcGxldGUgY2FsbGJhY2sgaWYgdGhleSBwYXNzIG9uZVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcXVldWUgaGFzIGFscmVhZHkgc3RhcnRlZCB3ZSBhcmUgZG9uZSBoZXJlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm90aWZ5IG9mIHN0YXJ0XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gc3RhcnQgdGhlIGludGVybmFsIHF1ZXVlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLl9idWZmZXJbaV0pO1xuICAgIH1cblxuICAgIC8vIGVtcHR5IHRoZSBidWZmZXJcbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBMb2FkcyBhIHNpbmdsZSByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX2xvYWRSZXNvdXJjZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZGVxdWV1ZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHJlc291cmNlLl9kZXF1ZXVlID0gZGVxdWV1ZTtcblxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gcmVzb3VyY2Uub24oJ3Byb2dyZXNzJywgc2VsZi5lbWl0LmJpbmQoc2VsZiwgJ3Byb2dyZXNzJykpO1xuXG4gICAgICAgIHJlc291cmNlLmxvYWQoc2VsZi5fYm91bmRPbkxvYWQpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgb25jZSBlYWNoIHJlc291cmNlIGhhcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzLCB0aGlzLnJlc291cmNlcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBlYWNoIHRpbWUgYSByZXNvdXJjZXMgaXMgbG9hZGVkLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQGZpcmVzIGVycm9yXG4gKiBAZmlyZXMgbG9hZFxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgdGhpcy5wcm9ncmVzcyArPSB0aGlzLl9wcm9ncmVzc0NodW5rO1xuXG4gICAgdGhpcy5lbWl0KCdwcm9ncmVzcycsIHRoaXMsIHJlc291cmNlKTtcblxuICAgIC8vIHJ1biBtaWRkbGV3YXJlLCB0aGlzICptdXN0KiBoYXBwZW4gYmVmb3JlIGRlcXVldWUgc28gc3ViLWFzc2V0cyBnZXQgYWRkZWQgcHJvcGVybHlcbiAgICB0aGlzLl9ydW5NaWRkbGV3YXJlKHJlc291cmNlLCB0aGlzLl9hZnRlck1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzb3VyY2UuZW1pdCgnYWZ0ZXJNaWRkbGV3YXJlJywgcmVzb3VyY2UpO1xuXG4gICAgICAgIHRoaXMuX251bVRvTG9hZC0tO1xuXG4gICAgICAgIC8vIGRvIGNvbXBsZXRpb24gY2hlY2tcbiAgICAgICAgaWYgKHRoaXMuX251bVRvTG9hZCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgIHRoaXMuX29uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc291cmNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgcmVzb3VyY2UuZXJyb3IsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZCcsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuXG5cbiAgICAvLyByZW1vdmUgdGhpcyByZXNvdXJjZSBmcm9tIHRoZSBhc3luYyBxdWV1ZVxuICAgIHJlc291cmNlLl9kZXF1ZXVlKCk7XG59O1xuXG4vKipcbiAqIFJ1biBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvbiBhIHJlc291cmNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX3J1bk1pZGRsZXdhcmUgPSBmdW5jdGlvbiAocmVzb3VyY2UsIGZucywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzKGZucywgZnVuY3Rpb24gKGZuLCBuZXh0KSB7XG4gICAgICAgIGZuLmNhbGwoc2VsZiwgcmVzb3VyY2UsIG5leHQpO1xuICAgIH0sIGNiLmJpbmQodGhpcywgcmVzb3VyY2UpKTtcbn07XG5cbkxvYWRlci5MT0FEX1RZUEUgPSBSZXNvdXJjZS5MT0FEX1RZUEU7XG5Mb2FkZXIuWEhSX1JFQURZX1NUQVRFID0gUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFO1xuTG9hZGVyLlhIUl9SRVNQT05TRV9UWVBFID0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEU7XG4iLCJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIF91cmwgPSByZXF1aXJlKCd1cmwnKSxcbiAgICAvLyB0ZXN0cyBpcyBDT1JTIGlzIHN1cHBvcnRlZCBpbiBYSFIsIGlmIG5vdCB3ZSBuZWVkIHRvIHVzZSBYRFJcbiAgICB1c2VYZHIgPSAhISh3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiAobmV3IFhNTEh0dHBSZXF1ZXN0KCkpKSksXG4gICAgdGVtcEFuY2hvciA9IG51bGw7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgYSBzaW5nbGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnlcbiAqIGEgc2luZ2xlIFVSTC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBuYW1lIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCBmb3IgYXVkaW8vdmlkZW8gbG9hZHMgeW91IGNhbiBwYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMuXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5jcm9zc09yaWdpbl0ge3N0cmluZ3xib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5MT0FEX1RZUEV9IEhvdyBzaG91bGQgdGhpcyByZXNvdXJjZSBiZSBsb2FkZWQ/XG4gKiBAcGFyYW0gW29wdGlvbnMueGhyVHlwZT1SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ERUZBVUxUXSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IEhvdyBzaG91bGQgdGhlIGRhdGEgYmVpbmdcbiAqICAgICAgbG9hZGVkIGJlIGludGVycHJldGVkIHdoZW4gdXNpbmcgWEhSP1xuICogQHBhcmFtIFtvcHRpb25zLm1ldGFkYXRhXSB7b2JqZWN0fSBFeHRyYSBpbmZvIGZvciBtaWRkbGV3YXJlLlxuICovXG5mdW5jdGlvbiBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggbmFtZSBhbmQgdXJsIGFyZSByZXF1aXJlZCBmb3IgY29uc3RydWN0aW5nIGEgcmVzb3VyY2UuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVybCB1c2VkIHRvIGxvYWQgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHVybCBpcyBhIGRhdGEgdXJsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzRGF0YVVybCA9IHRoaXMudXJsLmluZGV4T2YoJ2RhdGE6JykgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSB0aGF0IHdhcyBsb2FkZWQgYnkgdGhlIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55fVxuICAgICAqL1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBvcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJ2Fub255bW91cycgOiBvcHRpb25zLmNyb3NzT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCBvZiBsb2FkaW5nIHRvIHVzZSBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlLkxPQURfVFlQRX1cbiAgICAgKi9cbiAgICB0aGlzLmxvYWRUeXBlID0gb3B0aW9ucy5sb2FkVHlwZSB8fCB0aGlzLl9kZXRlcm1pbmVMb2FkVHlwZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgdXNlZCB0byBsb2FkIHRoZSByZXNvdXJjZSB2aWEgWEhSLiBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMueGhyVHlwZSA9IG9wdGlvbnMueGhyVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgKGlmIGFueSkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFcnJvcn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBYSFIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLiBUaGlzIGlzIG9ubHkgc2V0XG4gICAgICogd2hlbiBgbG9hZFR5cGVgIGlzIGBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1hNTEh0dHBSZXF1ZXN0fVxuICAgICAqL1xuICAgIHRoaXMueGhyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMganNvbi4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNKc29uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIHhtbC4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNYbWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gaW1hZ2UgdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0ltYWdlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGFuIGF1ZGlvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNBdWRpbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhIHZpZGVvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNWaWRlbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBkZXF1ZXVlYCBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgYSBzdG9yYWdlIHBsYWNlIGZvciB0aGUgYXN5bmMgcXVldWUgZGVxdWV1ZSBtZXRob2RcbiAgICAgKiB1c2VkIHByaXZhdGVseSBieSB0aGUgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kZXF1ZXVlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tcGxldGVgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZENvbXBsZXRlID0gdGhpcy5jb21wbGV0ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25FcnJvcmAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25FcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uUHJvZ3Jlc3NgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MgPSB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyk7XG5cbiAgICAvLyB4aHIgY2FsbGJhY2tzXG4gICAgdGhpcy5fYm91bmRYaHJPbkVycm9yID0gdGhpcy5feGhyT25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25BYm9ydCA9IHRoaXMuX3hock9uQWJvcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9ib3VuZFhock9uTG9hZCA9IHRoaXMuX3hock9uTG9hZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0ID0gdGhpcy5feGRyT25UaW1lb3V0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJlc291cmNlIGJlaW5ncyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBlYWNoIHRpbWUgcHJvZ3Jlc3Mgb2YgdGhpcyByZXNvdXJjZSBsb2FkIHVwZGF0ZXMuXG4gICAgICogTm90IGFsbCByZXNvdXJjZXMgdHlwZXMgYW5kIGxvYWRlciBzeXN0ZW1zIGNhbiBzdXBwb3J0IHRoaXMgZXZlbnRcbiAgICAgKiBzbyBzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIElmIHRoZSByZXNvdXJjZVxuICAgICAqIGlzIGJlaW5nIGxvYWRlZCBvbiBhIG1vZGVybiBicm93c2VyLCB1c2luZyBYSFIsIGFuZCB0aGUgcmVtb3RlIHNlcnZlclxuICAgICAqIHByb3Blcmx5IHNldHMgQ29udGVudC1MZW5ndGggaGVhZGVycywgdGhlbiB0aGlzIHdpbGwgYmUgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHRoaXMgcmVzb3VyY2UgaGFzIGxvYWRlZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGl0IHdpbGxcbiAgICAgKiBiZSBpbiB0aGUgYGVycm9yYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb21wbGV0ZVxuICAgICAqIEBtZW1iZXJvZiBSZXNvdXJjZSNcbiAgICAgKi9cbn1cblxuUmVzb3VyY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblJlc291cmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlc291cmNlO1xubW9kdWxlLmV4cG9ydHMgPSBSZXNvdXJjZTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgcmVzb3VyY2UgYXMgY29tcGxldGUuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIGluIGEgd3JhcHBlciBvciBzb21ldGhpbmcuLi5ncm9zcy4uLi5cbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvcik7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgICBpZiAodGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGhyLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub250aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMueGhyLm9ucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25sb2FkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogS2lja3Mgb2ZmIGxvYWRpbmcgb2YgdGhpcyByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gaWYgYSBjYWxsYmFjayBpcyBzZXQsIGxpc3RlbiBmb3IgY29tcGxldGUgZXZlbnRcbiAgICBpZiAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luID09PSBmYWxzZSB8fCB0eXBlb2YgdGhpcy5jcm9zc09yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHRoaXMuX2RldGVybWluZUNyb3NzT3JpZ2luKHRoaXMudXJsKTtcbiAgICB9XG5cbiAgICBzd2l0Y2godGhpcy5sb2FkVHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRTpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRJbWFnZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuQVVESU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlZJREVPOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5YSFI6XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodXNlWGRyICYmIHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGRyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGhyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEltYWdlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLnNyYyA9IHRoaXMudXJsO1xuXG4gICAgdGhpcy5pc0ltYWdlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBIVE1MQXVkaW9FbGVtZW50IG9yIEhUTUxWaWRlb0VsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdhdWRpbycgJiYgdHlwZW9mIEF1ZGlvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQXVkaW8oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBlbGVtZW50ICcgKyB0eXBlKTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBmb3IgQ29jb29uSlMgQ2FudmFzKyBydW50aW1lLCBsYWNrcyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKVxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUykge1xuICAgICAgICB0aGlzLmRhdGEuc3JjID0gQXJyYXkuaXNBcnJheSh0aGlzLnVybCkgPyB0aGlzLnVybFswXSA6IHRoaXMudXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51cmwpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXJsLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybFtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1snaXMnICsgdHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSldID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUsIGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YS5sb2FkKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhNTEh0dHBSZXF1ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBzZXQgdGhlIHJlcXVlc3QgdHlwZSBhbmQgdXJsXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsLCB0cnVlKTtcblxuICAgIC8vIGxvYWQganNvbiBhcyB0ZXh0IGFuZCBwYXJzZSBpdCBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgLy8gKmNvdWdoKiBzYWZhcmkgKmNvdWdoKiBjYW4ndCBkZWFsIHdpdGggaXQuXG4gICAgaWYgKHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTiB8fCB0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHRoaXMueGhyVHlwZTtcbiAgICB9XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkLCBmYWxzZSk7XG5cbiAgICB4aHIuc2VuZCgpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBYRG9tYWluUmVxdWVzdC4gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdXBwb3J0IElFOSAoZ3Jvc3MpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhkciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhkciA9IHRoaXMueGhyID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7XG5cbiAgICAvLyBYRG9tYWluUmVxdWVzdCBoYXMgYSBmZXcgcXVpcmtzLiBPY2Nhc2lvbmFsbHkgaXQgd2lsbCBhYm9ydCByZXF1ZXN0c1xuICAgIC8vIEEgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbWFrZSBzdXJlIEFMTCBjYWxsYmFja3MgYXJlIHNldCBldmVuIGlmIG5vdCB1c2VkXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU3ODY5NjYveGRvbWFpbnJlcXVlc3QtYWJvcnRzLXBvc3Qtb24taWUtOVxuICAgIHhkci50aW1lb3V0ID0gNTAwMDtcblxuICAgIHhkci5vbmVycm9yID0gdGhpcy5fYm91bmRYaHJPbkVycm9yO1xuICAgIHhkci5vbnRpbWVvdXQgPSB0aGlzLl9ib3VuZFhkck9uVGltZW91dDtcbiAgICB4ZHIub25wcm9ncmVzcyA9IHRoaXMuX2JvdW5kT25Qcm9ncmVzcztcbiAgICB4ZHIub25sb2FkID0gdGhpcy5fYm91bmRYaHJPbkxvYWQ7XG5cbiAgICB4ZHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gIE5vdGU6IFRoZSB4ZHIuc2VuZCgpIGNhbGwgaXMgd3JhcHBlZCBpbiBhIHRpbWVvdXQgdG8gcHJldmVudCBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmZhY2Ugd2hlcmUgc29tZSByZXF1ZXN0cyBhcmUgbG9zdFxuICAgIC8vICBpZiBtdWx0aXBsZSBYRG9tYWluUmVxdWVzdHMgYXJlIGJlaW5nIHNlbnQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAvLyBTb21lIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9pc3N1ZXMvMTI0OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB4ZHIuc2VuZCgpO1xuICAgIH0sIDApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc291cmNlIHVzZWQgaW4gbG9hZGluZyB2aWEgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSBUaGUgZWxlbWVudCB0eXBlICh2aWRlbyBvciBhdWRpbykuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSBzb3VyY2UgVVJMIHRvIGxvYWQgZnJvbS5cbiAqIEBwYXJhbSBbbWltZV0ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSBvZiB0aGUgdmlkZW9cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fY3JlYXRlU291cmNlID0gZnVuY3Rpb24gKHR5cGUsIHVybCwgbWltZSkge1xuICAgIGlmICghbWltZSkge1xuICAgICAgICBtaW1lID0gdHlwZSArICcvJyArIHVybC5zdWJzdHIodXJsLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gdXJsO1xuICAgIHNvdXJjZS50eXBlID0gbWltZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgZXJyb3JzIG91dC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgZXJyb3IgZXZlbnQgZnJvbSB0aGUgZWxlbWVudCB0aGF0IGVtaXRzIGl0LlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgZWxlbWVudCB1c2luZyAnICsgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgcHJvZ3Jlc3MgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fb25Qcm9ncmVzcyA9ICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGVycm9yIGV2ZW50IGZpcmVzIGZvciB4aHIveGRyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RFcnJvckV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIHJlcVR5cGUodGhpcy54aHIpICsgJyBSZXF1ZXN0IGZhaWxlZC4gJyArXG4gICAgICAgICdTdGF0dXM6ICcgKyB0aGlzLnhoci5zdGF0dXMgKyAnLCB0ZXh0OiBcIicgKyB0aGlzLnhoci5zdGF0dXNUZXh0ICsgJ1wiJ1xuICAgICk7XG5cbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhbiBhYm9ydCBldmVudCBmaXJlcyBmb3IgeGhyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RBYm9ydEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3Qgd2FzIGFib3J0ZWQgYnkgdGhlIHVzZXIuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYSB0aW1lb3V0IGV2ZW50IGZpcmVzIGZvciB4ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGRyT25UaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgdGltZWQgb3V0LicpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gZGF0YSBzdWNjZXNzZnVsbHkgbG9hZHMgZnJvbSBhbiB4aHIveGRyIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdExvYWRFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGhyT25Mb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB4aHIgPSB0aGlzLnhocixcbiAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1cyAhPT0gdW5kZWZpbmVkID8geGhyLnN0YXR1cyA6IDIwMDsgLy9YRFIgaGFzIG5vIGAuc3RhdHVzYCwgYXNzdW1lIDIwMC5cblxuICAgIC8vIHN0YXR1cyBjYW4gYmUgMCB3aGVuIHVzaW5nIHRoZSBmaWxlOi8vIHByb3RvY29sLCBhbHNvIGNoZWNrIGlmIGEgcmVzcG9uc2Ugd2FzIGZvdW5kXG4gICAgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA0IHx8IChzdGF0dXMgPT09IDAgJiYgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkge1xuICAgICAgICAvLyBpZiB0ZXh0LCBqdXN0IHJldHVybiBpdFxuICAgICAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGpzb24sIHBhcnNlIGludG8ganNvbiBvYmplY3RcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0pzb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGxvYWRlZCBqc29uOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHhtbCwgcGFyc2UgaW50byBhbiB4bWwgZG9jdW1lbnQgb3IgZGl2IGVsZW1lbnRcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LkRPTVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhoci5yZXNwb25zZVRleHQsICd0ZXh0L3htbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZGl2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzWG1sID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIHhtbDonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlciB0eXBlcyBqdXN0IHJldHVybiB0aGUgcmVzcG9uc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2UgfHwgeGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignWycgKyB4aHIuc3RhdHVzICsgJ10nICsgeGhyLnN0YXR1c1RleHQgKyAnOicgKyB4aHIucmVzcG9uc2VVUkwpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbmZ1bmN0aW9uIHJlcVR5cGUoeGhyKSB7XG4gICAgcmV0dXJuIHhoci50b1N0cmluZygpLnJlcGxhY2UoJ29iamVjdCAnLCAnJyk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYGNyb3NzT3JpZ2luYCBwcm9wZXJ0eSBmb3IgdGhpcyByZXNvdXJjZSBiYXNlZCBvbiBpZiB0aGUgdXJsXG4gKiBmb3IgdGhpcyByZXNvdXJjZSBpcyBjcm9zcy1vcmlnaW4uIElmIGNyb3NzT3JpZ2luIHdhcyBtYW51YWxseSBzZXQsIHRoaXNcbiAqIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIHRvIHRlc3QuXG4gKiBAcGFyYW0gW2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbl0ge29iamVjdH0gVGhlIGxvY2F0aW9uIG9iamVjdCB0byB0ZXN0IGFnYWluc3QuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjcm9zc09yaWdpbiB2YWx1ZSB0byB1c2UgKG9yIGVtcHR5IHN0cmluZyBmb3Igbm9uZSkuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbiAodXJsLCBsb2MpIHtcbiAgICAvLyBkYXRhOiBhbmQgamF2YXNjcmlwdDogdXJscyBhcmUgY29uc2lkZXJlZCBzYW1lLW9yaWdpblxuICAgIGlmICh1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBpcyB3aW5kb3cubG9jYXRpb25cbiAgICBsb2MgPSBsb2MgfHwgd2luZG93LmxvY2F0aW9uO1xuXG4gICAgaWYgKCF0ZW1wQW5jaG9yKSB7XG4gICAgICAgIHRlbXBBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgfVxuXG4gICAgLy8gbGV0IHRoZSBicm93c2VyIGRldGVybWluZSB0aGUgZnVsbCBocmVmIGZvciB0aGUgdXJsIG9mIHRoaXMgcmVzb3VyY2UgYW5kIHRoZW5cbiAgICAvLyBwYXJzZSB3aXRoIHRoZSBub2RlIHVybCBsaWIsIHdlIGNhbid0IHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgICAvLyBiZWNhdXNlIHRoZXkgZG9uJ3Qgd29yayBpbiBJRTkgOihcbiAgICB0ZW1wQW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgdXJsID0gX3VybC5wYXJzZSh0ZW1wQW5jaG9yLmhyZWYpO1xuXG4gICAgdmFyIHNhbWVQb3J0ID0gKCF1cmwucG9ydCAmJiBsb2MucG9ydCA9PT0gJycpIHx8ICh1cmwucG9ydCA9PT0gbG9jLnBvcnQpO1xuXG4gICAgLy8gaWYgY3Jvc3Mgb3JpZ2luXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gbG9jLmhvc3RuYW1lIHx8ICFzYW1lUG9ydCB8fCB1cmwucHJvdG9jb2wgIT09IGxvYy5wcm90b2NvbCkge1xuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZXNwb25zZVR5cGUgb2YgYW4gWEhSIHJlcXVlc3QgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGVcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSByZXNwb25zZVR5cGUgdG8gdXNlLlxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZVhoclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlc291cmNlLl94aHJUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVMb2FkVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX2xvYWRUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXMudXJsLFxuICAgICAgICBleHQ7XG5cbiAgICBpZiAodGhpcy5pc0RhdGFVcmwpIHtcbiAgICAgICAgdmFyIHNsYXNoSW5kZXggPSB1cmwuaW5kZXhPZignLycpO1xuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHNsYXNoSW5kZXggKyAxLCB1cmwuaW5kZXhPZignOycsIHNsYXNoSW5kZXgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBxdWVyeVN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXh0ID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQ7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG1pbWUgdHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgcmVzcG9uc2VUeXBlIG9mXG4gKiByZXNvdXJjZSBiZWluZyBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZ2V0TWltZUZyb21YaHJUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5JztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0I6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2Jsb2InO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQ6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCc7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQ6XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVDpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG5cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsb2FkaW5nIGEgcmVzb3VyY2UgY2FuIHVzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBMT0FEX1RZUEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuWEhSIC0gVXNlcyBYTUxIdHRwUmVxdWVzdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuSU1BR0UgLSBVc2VzIGFuIGBJbWFnZWAgb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5BVURJTyAtIFVzZXMgYW4gYEF1ZGlvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLlZJREVPIC0gVXNlcyBhIGBWaWRlb2Agb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICovXG5SZXNvdXJjZS5MT0FEX1RZUEUgPSB7XG4gICAgWEhSOiAgICAxLFxuICAgIElNQUdFOiAgMixcbiAgICBBVURJTzogIDMsXG4gICAgVklERU86ICA0XG59O1xuXG4vKipcbiAqIFRoZSBYSFIgcmVhZHkgc3RhdGVzLCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gWEhSX1JFQURZX1NUQVRFXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLlVOU0VOVCAtIG9wZW4oKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5PUEVORUQgLSBzZW5kKCloYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuSEVBREVSU19SRUNFSVZFRCAtIHNlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuTE9BRElORyAtIERvd25sb2FkaW5nOyByZXNwb25zZVRleHQgaG9sZHMgcGFydGlhbCBkYXRhLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5ET05FIC0gVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFID0ge1xuICAgIFVOU0VOVDogMCxcbiAgICBPUEVORUQ6IDEsXG4gICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICBMT0FESU5HOiAzLFxuICAgIERPTkU6IDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVTUE9OU0VfVFlQRVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQgLSBkZWZhdWx0cyB0byB0ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSIC0gQXJyYXlCdWZmZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CTE9CIC0gQmxvYlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UIC0gRG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5KU09OIC0gT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCAtIFN0cmluZ1xuICovXG5SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRSA9IHtcbiAgICBERUZBVUxUOiAgICAndGV4dCcsXG4gICAgQlVGRkVSOiAgICAgJ2FycmF5YnVmZmVyJyxcbiAgICBCTE9COiAgICAgICAnYmxvYicsXG4gICAgRE9DVU1FTlQ6ICAgJ2RvY3VtZW50JyxcbiAgICBKU09OOiAgICAgICAnanNvbicsXG4gICAgVEVYVDogICAgICAgJ3RleHQnXG59O1xuXG5SZXNvdXJjZS5fbG9hZFR5cGVNYXAgPSB7XG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnYm1wJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGdhJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0Vcbn07XG5cblJlc291cmNlLl94aHJUeXBlTWFwID0ge1xuICAgIC8vIHhtbFxuICAgICd4aHRtbCc6ICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG1sJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG0nOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd4bWwnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0bXgnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0c3gnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdzdmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuXG4gICAgLy8gaW1hZ2VzXG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAncG5nJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBlZyc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnd2VicCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG5cbiAgICAvLyBqc29uXG4gICAgJ2pzb24nOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTixcblxuICAgIC8vIHRleHRcbiAgICAndGV4dCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhULFxuICAgICd0eHQnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFRcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSBsb2FkVHlwZSB7UmVzb3VyY2UuTE9BRF9UWVBFfSBUaGUgbG9hZCB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uTG9hZFR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgbG9hZFR5cGUpIHtcbiAgICBzZXRFeHRNYXAoUmVzb3VyY2UuX2xvYWRUeXBlTWFwLCBleHRuYW1lLCBsb2FkVHlwZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGxvYWQgdHlwZSB0byBiZSB1c2VkIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZXh0bmFtZSB7c3RyaW5nfSBUaGUgZXh0ZW5zaW9uIHRvIHNldCB0aGUgdHlwZSBmb3IsIGUuZy4gXCJwbmdcIiBvciBcImZudFwiXG4gKiBAcGFyYW0geGhyVHlwZSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSB4aHIgdHlwZSB0byBzZXQgaXQgdG8uXG4gKi9cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgeGhyVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5feGhyVHlwZU1hcCwgZXh0bmFtZSwgeGhyVHlwZSk7XG59O1xuXG5mdW5jdGlvbiBzZXRFeHRNYXAobWFwLCBleHRuYW1lLCB2YWwpIHtcbiAgICBpZiAoZXh0bmFtZSAmJiBleHRuYW1lLmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICBleHRuYW1lID0gZXh0bmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRuYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYXBbZXh0bmFtZV0gPSB2YWw7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIHByaXZhdGUgcHJvcGVydHlcbiAgICBfa2V5U3RyOiBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIsXG5cbiAgICBlbmNvZGVCaW5hcnk6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICAgICAgdmFyIGJ5dGVidWZmZXI7XG4gICAgICAgIHZhciBlbmNvZGVkQ2hhckluZGV4ZXMgPSBuZXcgQXJyYXkoNCk7XG4gICAgICAgIHZhciBpbnggPSAwO1xuICAgICAgICB2YXIgam54ID0gMDtcbiAgICAgICAgdmFyIHBhZGRpbmdCeXRlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmlsbCBieXRlIGJ1ZmZlciBhcnJheVxuICAgICAgICAgICAgYnl0ZWJ1ZmZlciA9IG5ldyBBcnJheSgzKTtcbiAgICAgICAgICAgIGZvciAoam54ID0gMDsgam54IDwgYnl0ZWJ1ZmZlci5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhd2F5IGhpZ2gtb3JkZXIgYnl0ZSwgYXMgZG9jdW1lbnRlZCBhdDpcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1MSHR0cFJlcXVlc3QjSGFuZGxpbmdfYmluYXJ5X2RhdGFcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gaW5wdXQuY2hhckNvZGVBdChpbngrKykgJiAweGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCBlYWNoIGVuY29kZWQgY2hhcmFjdGVyLCA2IGJpdHMgYXQgYSB0aW1lXG4gICAgICAgICAgICAvLyBpbmRleCAxOiBmaXJzdCA2IGJpdHNcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1swXSA9IGJ5dGVidWZmZXJbMF0gPj4gMjtcbiAgICAgICAgICAgIC8vIGluZGV4IDI6IHNlY29uZCA2IGJpdHMgKDIgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMSArIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAyKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzFdID0gKChieXRlYnVmZmVyWzBdICYgMHgzKSA8PCA0KSB8IChieXRlYnVmZmVyWzFdID4+IDQpO1xuICAgICAgICAgICAgLy8gaW5kZXggMzogdGhpcmQgNiBiaXRzICg0IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBpbnB1dCBieXRlIDIgKyAyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1syXSA9ICgoYnl0ZWJ1ZmZlclsxXSAmIDB4MGYpIDw8IDIpIHwgKGJ5dGVidWZmZXJbMl0gPj4gNik7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiBmb3J0aCA2IGJpdHMgKDYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IGJ5dGVidWZmZXJbMl0gJiAweDNmO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBwYWRkaW5nIGhhcHBlbmVkLCBhbmQgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBwYWRkaW5nQnl0ZXMgPSBpbnggLSAoaW5wdXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhZGRpbmdCeXRlcykge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxhc3QgMiBjaGFyYWN0ZXJzIHRvIHBhZGRpbmcgY2hhclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbM10gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCBjaGFyYWN0ZXIgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBObyBwYWRkaW5nIC0gcHJvY2VlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb3cgd2Ugd2lsbCBncmFiIGVhY2ggYXBwcm9wcmlhdGUgY2hhcmFjdGVyIG91dCBvZiBvdXIga2V5c3RyaW5nXG4gICAgICAgICAgICAvLyBiYXNlZCBvbiBvdXIgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCBpdCB0byB0aGUgb3V0cHV0IHN0cmluZ1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBlbmNvZGVkQ2hhckluZGV4ZXMubGVuZ3RoOyBqbngrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSB0aGlzLl9rZXlTdHIuY2hhckF0KGVuY29kZWRDaGFySW5kZXhlc1tqbnhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vTG9hZGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJlc291cmNlID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5taWRkbGV3YXJlID0ge1xuICAgIGNhY2hpbmc6IHtcbiAgICAgICAgbWVtb3J5OiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL2NhY2hpbmcvbWVtb3J5JylcbiAgICB9LFxuICAgIHBhcnNpbmc6IHtcbiAgICAgICAgYmxvYjogcmVxdWlyZSgnLi9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2InKVxuICAgIH1cbn07XG4iLCIvLyBhIHNpbXBsZSBpbi1tZW1vcnkgY2FjaGUgZm9yIHJlc291cmNlc1xudmFyIGNhY2hlID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgLy8gaWYgY2FjaGVkLCB0aGVuIHNldCBkYXRhIGFuZCBjb21wbGV0ZSB0aGUgcmVzb3VyY2VcbiAgICAgICAgaWYgKGNhY2hlW3Jlc291cmNlLnVybF0pIHtcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBjYWNoZVtyZXNvdXJjZS51cmxdO1xuICAgICAgICAgICAgcmVzb3VyY2UuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBub3QgY2FjaGVkLCB3YWl0IGZvciBjb21wbGV0ZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlLm9uY2UoJ2NvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgY2FjaGVbdGhpcy51cmxdID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJy4uLy4uL1Jlc291cmNlJyksXG4gICAgYjY0ID0gcmVxdWlyZSgnLi4vLi4vYjY0Jyk7XG5cbndpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cbi8vIGEgbWlkZGxld2FyZSBmb3IgdHJhbnNmb3JtaW5nIFhIUiBsb2FkZWQgQmxvYnMgaW50byBtb3JlIHVzZWZ1bCBvYmplY3RzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgYW4gWEhSIGxvYWQgb2YgYSBibG9iXG4gICAgICAgIGlmIChyZXNvdXJjZS54aHIgJiYgcmVzb3VyY2UueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQikge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYmxvYiBzdXBwb3J0IHdlIHByb2JhYmx5IGdvdCBhIGJpbmFyeSBzdHJpbmcgYmFja1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuQmxvYiB8fCB0eXBlb2YgcmVzb3VyY2UuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlc291cmNlLnhoci5nZXRSZXNwb25zZUhlYWRlcignY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGltYWdlLCBjb252ZXJ0IHRoZSBiaW5hcnkgc3RyaW5nIGludG8gYSBkYXRhIHVybFxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIHR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gJ2RhdGE6JyArIHR5cGUgKyAnO2Jhc2U2NCwnICsgYjY0LmVuY29kZUJpbmFyeShyZXNvdXJjZS54aHIucmVzcG9uc2VUZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5pc0ltYWdlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IHVudGlsIHRoZSBpbWFnZSBsb2FkcyBhbmQgdGhlbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnQgdHlwZSBzYXlzIHRoaXMgaXMgYW4gaW1hZ2UsIHRoZW4gd2Ugc2hvdWxkIHRyYW5zZm9ybSB0aGUgYmxvYiBpbnRvIGFuIEltYWdlIG9iamVjdFxuICAgICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UuZGF0YS50eXBlLmluZGV4T2YoJ2ltYWdlJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXNvdXJjZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmJsb2IgPSByZXNvdXJjZS5kYXRhO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLnNyYyA9IHNyYztcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCB0aGUgbm8gbG9uZ2VyIHVzZWQgYmxvYiBhZnRlciB0aGUgaW1hZ2UgbG9hZHNcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChzcmMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwicGl4aS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIzLjAuMTAtZGV2XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJQaXhpLmpzIGlzIGEgZmFzdCBsaWdodHdlaWdodCAyRCBsaWJyYXJ5IHRoYXQgd29ya3MgYWNyb3NzIGFsbCBkZXZpY2VzLlwiLFxuICBcImF1dGhvclwiOiBcIk1hdCBHcm92ZXNcIixcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIFwiQ2hhZCBFbmdsZXIgPGNoYWRAcGFudGhlcmRldi5jb20+XCIsXG4gICAgXCJSaWNoYXJkIERhdmV5IDxyZGF2ZXlAZ21haWwuY29tPlwiXG4gIF0sXG4gIFwibWFpblwiOiBcIi4vc3JjL2luZGV4LmpzXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ29vZGJveWRpZ2l0YWwuY29tL1wiLFxuICBcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzXCIsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJzdGFydFwiOiBcImd1bHAgJiYgZ3VscCB3YXRjaFwiLFxuICAgIFwidGVzdFwiOiBcImd1bHAgJiYgdGVzdGVtIGNpXCIsXG4gICAgXCJidWlsZFwiOiBcImd1bHBcIixcbiAgICBcImRvY3NcIjogXCJqc2RvYyAtYyAuL2d1bHAvdXRpbC9qc2RvYy5jb25mLmpzb24gLVIgUkVBRE1FLm1kXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW4vXCIsXG4gICAgXCJzcmMvXCIsXG4gICAgXCJDT05UUklCVVRJTkcubWRcIixcbiAgICBcIkxJQ0VOU0VcIixcbiAgICBcInBhY2thZ2UuanNvblwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYXN5bmNcIjogXCJeMS41LjBcIixcbiAgICBcImJyZnNcIjogXCJeMS40LjFcIixcbiAgICBcImVhcmN1dFwiOiBcIl4yLjAuN1wiLFxuICAgIFwiZXZlbnRlbWl0dGVyM1wiOiBcIl4xLjEuMVwiLFxuICAgIFwiZ2wtbWF0cml4XCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS90b2ppL2dsLW1hdHJpeC5naXRcIixcbiAgICBcIm9iamVjdC1hc3NpZ25cIjogXCJeNC4wLjFcIixcbiAgICBcInBpeGktZ2wtY29yZVwiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vR29vZEJveURpZ2l0YWwvcGl4aS1nbC1jb3JlLmdpdFwiLFxuICAgIFwicmVzb3VyY2UtbG9hZGVyXCI6IFwiXjEuNi40XCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYnJvd3NlcmlmeVwiOiBcIl4xMS4xLjBcIixcbiAgICBcImNoYWlcIjogXCJeMy4yLjBcIixcbiAgICBcImRlbFwiOiBcIl4yLjAuMlwiLFxuICAgIFwiZ3VscFwiOiBcIl4zLjkuMFwiLFxuICAgIFwiZ3VscC1jYWNoZWRcIjogXCJeMS4xLjBcIixcbiAgICBcImd1bHAtY29uY2F0XCI6IFwiXjIuNi4wXCIsXG4gICAgXCJndWxwLWRlYnVnXCI6IFwiXjIuMS4wXCIsXG4gICAgXCJndWxwLWhlYWRlclwiOiBcIl4xLjcuMVwiLFxuICAgIFwiZ3VscC1qc2hpbnRcIjogXCJeMS4xMS4yXCIsXG4gICAgXCJndWxwLW1pcnJvclwiOiBcIl4wLjQuMFwiLFxuICAgIFwiZ3VscC1wbHVtYmVyXCI6IFwiXjEuMC4xXCIsXG4gICAgXCJndWxwLXJlbmFtZVwiOiBcIl4xLjIuMlwiLFxuICAgIFwiZ3VscC1zb3VyY2VtYXBzXCI6IFwiXjEuNS4yXCIsXG4gICAgXCJndWxwLXVnbGlmeVwiOiBcIl4xLjQuMVwiLFxuICAgIFwiZ3VscC11dGlsXCI6IFwiXjMuMC42XCIsXG4gICAgXCJqYWd1YXJqcy1qc2RvY1wiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vZGF2aWRzaGltanMvamFndWFyanMtanNkb2MuZ2l0XCIsXG4gICAgXCJqc2RvY1wiOiBcIl4zLjMuMlwiLFxuICAgIFwianNoaW50LXN1bW1hcnlcIjogXCJeMC40LjBcIixcbiAgICBcIm1pbmltaXN0XCI6IFwiXjEuMi4wXCIsXG4gICAgXCJtb2NoYVwiOiBcIl4yLjMuMlwiLFxuICAgIFwicmVxdWlyZS1kaXJcIjogXCJeMC4zLjBcIixcbiAgICBcInJ1bi1zZXF1ZW5jZVwiOiBcIl4xLjEuMlwiLFxuICAgIFwidGVzdGVtXCI6IFwiXjAuOS40XCIsXG4gICAgXCJ2aW55bC1idWZmZXJcIjogXCJeMS4wLjBcIixcbiAgICBcInZpbnlsLXNvdXJjZS1zdHJlYW1cIjogXCJeMS4xLjBcIixcbiAgICBcIndhdGNoaWZ5XCI6IFwiXjMuNC4wXCJcbiAgfSxcbiAgXCJicm93c2VyaWZ5XCI6IHtcbiAgICBcInRyYW5zZm9ybVwiOiBbXG4gICAgICBcImJyZnNcIlxuICAgIF1cbiAgfVxufVxuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8vIGFkZCBzb21lIGV4dHJhIHZhcmlhYmxlcyB0byB0aGUgY29udGFpbmVyLi5cbk9iamVjdC5hc3NpZ24oXG4gICAgY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSxcbiAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKVxuKTtcblxuXG4vKipcbiAqIFRoZSBBY2Nlc3NpYmlsaXR5IG1hbmFnZXIgcmVhY3JlYXRlcyB0aGUgYWJpbGl0eSB0byB0YWIgYW5kIGFuZCBoYXZlIGNvbnRlbnQgcmVhZCBieSBzY3JlZW4gcmVhZGVycy4gVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCBhcyBpdCBjYW4gcG9zc2libHkgaGVscCBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMgYWNjZXNzIHBpeGkgY29udGVudC5cbiAqIE11Y2ggbGlrZSBpbnRlcmFjdGlvbiBhbnkgRGlzcGxheU9iamVjdCBjYW4gYmUgbWFkZSBhY2Nlc3NpYmxlLiBUaGlzIG1hbmFnZXIgd2lsbCBtYXAgdGhlIGV2ZW50cyBhcyBpZiB0aGUgbW91c2Ugd2FzIGJlaW5nIHVzZWQsIG1pbmltaXppbmcgdGhlIGVmZmVyb3QgcmVxdWlyZWQgdG8gaW1wbGVtZW50LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyXG4gKi9cbmZ1bmN0aW9uIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKHJlbmRlcmVyKVxue1xuXHQvLyBmaXJzdCB3ZSBjcmVhdGUgYSBkaXYgdGhhdCB3aWxsIHNpdCBvdmVyIHRoZSBwaXhpIGVsZW1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGRpdiBvdmVybGF5cyB3aWxsIGdvLlxuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBcbiAgICBkaXYuc3R5bGUud2lkdGggPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgZGl2LnN0eWxlLnRvcCA9IDA7XG4gICAgZGl2LnN0eWxlLmxlZnQgPSAwO1xuICAgLy9cbiAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcbiAgIFx0XG4gICBcdC8qKlxuICAgXHQgKiBUaGlzIGlzIHRoZSBkb20gZWxlbWVudCB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuICAgXHR0aGlzLmRpdiA9IGRpdjtcblxuICAgXHQvKipcbiAgIFx0ICogQSBzaW1wbGUgcG9vbCBmb3Igc3RvcmluZyBkaXZzLlxuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0FycmF5fVxuICAgXHQgKiBAcHJpdmF0ZVxuICAgXHQgKi9cbiBcdHRoaXMucG9vbCA9IFtdO1xuXG4gXHQvKipcbiBcdCAqIFRoaXMgaXMgYSB0aWNrIHVzZWQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIG5vIGxvbmdlciBiZWluZyByZW5kZXJlZC5cbiBcdCAqIFxuIFx0ICogQHR5cGUge051bWJlcn1cbiBcdCAqIEBwcml2YXRlXG4gXHQgKi9cbiAgIFx0dGhpcy5yZW5kZXJJZCA9IDA7XG5cbiAgIFx0LyoqXG4gICBcdCAqIFNldHRpbmcgdGhpcyB0byB0cnVlIHdpbGwgdmlzdWFsbHkgc2hvdyB0aGUgZGl2c1xuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0Jvb2xlYW59XG4gICBcdCAqL1xuICAgXHR0aGlzLmRlYnVnID0gZmFsc2U7XG5cbiAgXHQvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBhY2Nlc3NpYmlsaXR5IG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TeXN0ZW1SZW5kZXJlcn1cbiAgICAgKi9cbiAgIFx0dGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICBcdC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjdXJyZW50bHkgYWN0aXZlIGFjY2Vzc2libGUgaXRlbXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgXHR0aGlzLmNoaWxkcmVuID0gW107XG4gICBcdFxuICAgXHQvKipcbiAgICAgKiBwcmUgYmluZCB0aGUgZnVuY3Rpb25zLi5cbiAgICAgKi9cbiAgIFx0dGhpcy5fb25LZXlEb3duID0gdGhpcy5fb25LZXlEb3duLmJpbmQodGhpcyk7XG4gICBcdHRoaXMuX29uTW91c2VNb3ZlID0gdGhpcy5fb25Nb3VzZU1vdmUuYmluZCh0aGlzKTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHN0b3JlcyB0aGUgc3RhdGUgb2YgdGhlIG1hbmFnZXIuIElmIHRoZXJlIGFyZSBubyBhY2Nlc3NpYmxlIG9iamVjdHMgb3IgdGhlIG1vdXNlIGlzIG1vdmluZyB0aGUgd2lsbCBiZSBmYWxzZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcblxuXG4gICBcdC8vIGxldCBsaXN0ZW4gZm9yIHRhYi4uIG9uY2UgcHJlc3NlZCB3ZSBjYW4gZmlyZSB1cCBhbmQgc2hvdyB0aGUgYWNjZXNzaWJpbGl0eSBsYXllclxuICAgXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xufVxuXG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBBY2Nlc3NpYmlsaXR5TWFuYWdlcjtcblxuLyoqXG4gKiBBY3RpdmF0aW5nIHdpbGwgY2F1c2UgdGhlIEFjY2Vzc2liaWxpdHkgbGF5ZXIgdG8gYmUgc2hvd24uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIHByZXNlcyB0aGUgdGFiIGtleVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IHRydWU7XG5cblx0d2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCB0cnVlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9uKCdwb3N0cmVuZGVyJywgdGhpcy51cGRhdGUsIHRoaXMpO1xuXG5cdHRoaXMucmVuZGVyZXIudmlldy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuZGl2KTtcdFxufTtcblxuLyoqXG4gKiBEZWFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBoaWRkZW4uIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIG1vdmVzIHRoZSBtb3VzZVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmRlYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKCF0aGlzLmlzQWN0aXZlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG5cblx0dGhpcy5yZW5kZXJlci5vZmYoJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSk7XG5cblx0dGhpcy5kaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmRpdik7XG5cbn07XG5cbi8qKlxuICogVGhpcyByZWN1cnNpdmUgZnVuY3Rpb24gd2lsbCBydW4gdGhyb3VnaHQgaGUgc2NlbmUgZ3JhcGggYW5kIGFkZCBhbnkgbmV3IGFjY2Vzc2libGUgb2JqZWN0cyB0byB0aGUgRE9NIGxheWVyLlxuICogQHBhcmFtIGVsZW1lbnQge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gdGhlIERpc3BsYXlPYmplY3QgdG8gY2hlY2suXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlQWNjZXNzaWJsZU9iamVjdHMgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuXHRpZighZGlzcGxheU9iamVjdC52aXNpYmxlKVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYoZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlICYmIGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUpXG5cdHtcblx0XHRpZighZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZUFjdGl2ZSlcblx0XHR7XG5cdFx0XHR0aGlzLmFkZENoaWxkKGRpc3BsYXlPYmplY3QpO1xuXHRcdH1cblx0ICAgXHRcblx0ICAgXHRkaXNwbGF5T2JqZWN0LnJlbmRlcklkID0gdGhpcy5yZW5kZXJJZDtcblx0fVxuXG5cdHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG5cblx0Zm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XG5cdFx0dGhpcy51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyhjaGlsZHJlbltpXSk7XG5cdH1cbn07XG5cblxuLyoqXG4gKiBCZWZvcmUgZWFjaCByZW5kZXIgdGhpcyBmdW5jdGlvbiB3aWxsIGVuc3VyZSB0aGF0IGFsbCBkaXZzIGFyZSBtYXBwZWQgY29ycmVjdGx5IHRvIHRoZWlyIERpc3BsYXlPYmplY3RzXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oKVxue1xuXG5cdC8vIHVwZGF0ZSBjaGlsZHJlbi4uLlxuXHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCk7XG5cblx0dmFyIHJlY3QgPSB0aGlzLnJlbmRlcmVyLnZpZXcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdHZhciBzeCA9IHJlY3Qud2lkdGggIC8gdGhpcy5yZW5kZXJlci53aWR0aDtcblx0dmFyIHN5ID0gcmVjdC5oZWlnaHQgLyB0aGlzLnJlbmRlcmVyLmhlaWdodDtcblxuXHR2YXIgZGl2ID0gdGhpcy5kaXY7XG5cblx0ZGl2LnN0eWxlLmxlZnQgPSByZWN0LmxlZnQgKyAncHgnO1xuXHRkaXYuc3R5bGUudG9wID0gcmVjdC50b3AgKyAncHgnO1xuXHRkaXYuc3R5bGUud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoICsgJ3B4Jztcblx0ZGl2LnN0eWxlLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0ICsgJ3B4JztcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblxuXHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cblx0XHRpZihjaGlsZC5yZW5kZXJJZCAhPT0gdGhpcy5yZW5kZXJJZClcblx0XHR7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb3JlLnV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGksIDEpO1xuXHRcdFx0dGhpcy5kaXYucmVtb3ZlQ2hpbGQoIGNoaWxkLl9hY2Nlc3NpYmxlRGl2ICk7XG5cdFx0XHR0aGlzLnBvb2wucHVzaChjaGlsZC5fYWNjZXNzaWJsZURpdik7XG5cdFx0XHRjaGlsZC5fYWNjZXNzaWJsZURpdiA9IG51bGw7XG5cblx0XHRcdGktLTtcblxuXHRcdFx0aWYodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0Ly8gbWFwIGRpdiB0byBkaXNwbGF5Li5cblx0XHRcdGRpdiA9IGNoaWxkLl9hY2Nlc3NpYmxlRGl2O1xuXHRcdFx0dmFyIGhpdEFyZWEgPSBjaGlsZC5oaXRBcmVhO1xuXHRcdFx0dmFyIHd0ID0gY2hpbGQud29ybGRUcmFuc2Zvcm07XG5cblx0XHRcdGlmKGNoaWxkLmhpdEFyZWEpXG5cdFx0XHR7XG5cdFx0XHRcdGRpdi5zdHlsZS5sZWZ0ID0gKCh3dC50eCArIChoaXRBcmVhLnggKiB3dC5hKSkgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gICgod3QudHkgKyAoaGl0QXJlYS55ICogd3QuZCkpICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiB3dC5hICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLmhlaWdodCA9IChoaXRBcmVhLmhlaWdodCAqIHd0LmQgKiBzeSkgKyAncHgnO1xuXHRcdFx0XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdGhpdEFyZWEgPSBjaGlsZC5nZXRCb3VuZHMoKTtcblxuXHRcdFx0XHR0aGlzLmNhcEhpdEFyZWEoaGl0QXJlYSk7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoaGl0QXJlYS54ICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLnRvcCA9ICAoaGl0QXJlYS55ICogc3kpICsgICdweCc7XG5cblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gKGhpdEFyZWEud2lkdGggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogc3kpICsgJ3B4Jztcblx0XHRcdH1cdFx0XG5cdFx0fVxuXHR9XG5cblx0Ly8gaW5jcmVtZW50IHRoZSByZW5kZXIgaWQuLlxuXHR0aGlzLnJlbmRlcklkKys7XG59O1xuXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuY2FwSGl0QXJlYSA9IGZ1bmN0aW9uIChoaXRBcmVhKVxue1xuICAgIGlmIChoaXRBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS53aWR0aCArPSBoaXRBcmVhLng7XG4gICAgICAgIGhpdEFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGhpdEFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCArPSBoaXRBcmVhLnk7XG4gICAgICAgIGhpdEFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBoaXRBcmVhLnggKyBoaXRBcmVhLndpZHRoID4gdGhpcy5yZW5kZXJlci53aWR0aCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoID0gdGhpcy5yZW5kZXJlci53aWR0aCAtIGhpdEFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueSArIGhpdEFyZWEuaGVpZ2h0ID4gdGhpcy5yZW5kZXJlci5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmhlaWdodCAtIGhpdEFyZWEueTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogQWRkcyBhIERpc3BsYXlPYmplY3QgdG8gdGhlIGFjY2Vzc2liaWxpdHkgbWFuYWdlclxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24oZGlzcGxheU9iamVjdClcbntcbi8vXHR0aGlzLmFjdGl2YXRlKCk7XG5cdFxuXHR2YXIgZGl2ID0gdGhpcy5wb29sLnBvcCgpO1xuXG5cdGlmKCFkaXYpXG5cdHtcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgXG5cblx0ICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG5cdCAgICBkaXYuc3R5bGUuaGVpZ2h0ID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmRlYnVnID8gJ3JnYmEoMjU1LDAsMCwwLjUpJyA6ICd0cmFuc3BhcmVudCc7XG5cdCAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXHQgICAgZGl2LnN0eWxlLnpJbmRleCA9IDI7XG5cdCAgICBkaXYuc3R5bGUuYm9yZGVyU3R5bGUgPSAnbm9uZSc7XG5cblx0ICAgIFxuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGljay5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKSk7XG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCB0aGlzLl9vbkZvY3VzT3V0LmJpbmQodGhpcykpO1xuXHR9XG5cdCAgIFx0XG5cblxuXG5cdGRpdi50aXRsZSA9IGRpc3BsYXlPYmplY3QuYWNjZXNzaWJsZVRpdGxlIHx8ICdkaXNwbGF5T2JqZWN0ICcgKyB0aGlzLnRhYkluZGV4O1xuXG5cdC8vXG5cdFxuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlID0gdHJ1ZTtcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiA9IGRpdjtcblx0ZGl2LmRpc3BsYXlPYmplY3QgPSBkaXNwbGF5T2JqZWN0O1xuXG5cblx0dGhpcy5jaGlsZHJlbi5wdXNoKGRpc3BsYXlPYmplY3QpO1xuXHR0aGlzLmRpdi5hcHBlbmRDaGlsZCggZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdiApO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2LnRhYkluZGV4ID0gZGlzcGxheU9iamVjdC50YWJJbmRleDtcbn07XG5cblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgYnV0dG9uIHByZXNzIHRvIHBpeGkncyBJbnRlcmFjdGlvbk1hbmFnZXIgKGNsaWNrKVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkNsaWNrID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ2NsaWNrJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW92ZXIpXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uRm9jdXMgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBmb2N1cyBldmVudHMgdG8gcGl4aXMgSW50ZXJhY3Rpb25NYW5hZ2VyIChtb3VzZW91dClcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1c091dCA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW91dCcsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIGtleSBpcyBwcmVzc2VkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbktleURvd24gPSBmdW5jdGlvbihlKVxue1xuXHRpZihlLmtleUNvZGUgIT09IDkpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmFjdGl2YXRlKCk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uTW91c2VNb3ZlID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmRlYWN0aXZhdGUoKTtcbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKlxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIFxue1xuXHR0aGlzLmRpdiA9IG51bGw7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHR7XG5cdFx0dGhpcy5jaGlsZHJlbltpXS5kaXYgPSBudWxsO1xuXHR9XG5cblx0XG5cdHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duKTtcblx0XHRcblx0dGhpcy5wb29sID0gbnVsbDtcblx0dGhpcy5jaGlsZHJlbiA9IG51bGw7XG5cdHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5jb3JlLkNhbnZhc1JlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdhY2Nlc3NpYmlsaXR5JywgQWNjZXNzaWJpbGl0eU1hbmFnZXIpO1xuXG4iLCIvKipcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzIG9mIGFjY2Vzc2libGUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlNYW5hZ2VyfS5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBPYmplY3QuYXNzaWduKFxuICogICAgICAgICAgTXlPYmplY3QucHJvdG90eXBlLFxuICogICAgICAgICAgUElYSS5hY2Nlc3NpYmlsaXR5LmFjY2Vzc2libGVUYXJnZXRcbiAqICAgICAgKTtcbiAqL1xudmFyIGFjY2Vzc2libGVUYXJnZXQgPSB7XG4gICAgXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlOmZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBhY2Nlc3NpYmxlVGl0bGU6bnVsbCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgdGFiSW5kZXg6MCxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVBY3RpdmU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIF9hY2Nlc3NpYmxlRGl2OmZhbHNlXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYWNjZXNzaWJsZVRhcmdldDtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGFjY2Vzc2liaWxpdHkgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmludGVyYWN0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGFjY2Vzc2libGVUYXJnZXQ6ICAgICByZXF1aXJlKCcuL2FjY2Vzc2libGVUYXJnZXQnKSxcbiAgICBBY2Nlc3NpYmlsaXR5TWFuYWdlcjogcmVxdWlyZSgnLi9BY2Nlc3NpYmlsaXR5TWFuYWdlcicpXG59O1xuIiwiLyoqXG4gKiBDb25zdGFudCB2YWx1ZXMgdXNlZCBpbiBwaXhpXG4gKlxuICogQGxlbmRzIFBJWElcbiAqL1xudmFyIENPTlNUID0ge1xuICAgIC8qKlxuICAgICAqIFN0cmluZyBvZiB0aGUgY3VycmVudCBQSVhJIHZlcnNpb25cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gVkVSU0lPTlxuICAgICAqL1xuICAgIFZFUlNJT046IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb24sXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUElfMiAtIFR3byBQaVxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBQSV8yOiBNYXRoLlBJICogMixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSQURfVE9fREVHIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgcmFkaWFucyB0byBkZWdyZWVzXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFJBRF9UT19ERUc6IDE4MCAvIE1hdGguUEksXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge051bWJlcn0gREVHX1RPX1JBRCAtIENvbnN0YW50IGNvbnZlcnNpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIGRlZ3JlZXMgdG8gcmFkaWFuc1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBERUdfVE9fUkFEOiBNYXRoLlBJIC8gMTgwLFxuXG4gICAgLyoqXG4gICAgICogVGFyZ2V0IGZyYW1lcyBwZXIgbWlsbGlzZWNvbmQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFRBUkdFVF9GUE1TPTAuMDZcbiAgICAgKi9cbiAgICBUQVJHRVRfRlBNUzogMC4wNixcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IHRvIGlkZW50aWZ5IHRoZSBSZW5kZXJlciBUeXBlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBSRU5ERVJFUl9UWVBFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuVU5LTk9XTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLldFQkdMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuQ0FOVkFTXG4gICAgICovXG4gICAgUkVOREVSRVJfVFlQRToge1xuICAgICAgICBVTktOT1dOOiAgICAwLFxuICAgICAgICBXRUJHTDogICAgICAxLFxuICAgICAgICBDQU5WQVM6ICAgICAyXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFZhcmlvdXMgYmxlbmQgbW9kZXMgc3VwcG9ydGVkIGJ5IFBJWEkuIElNUE9SVEFOVCAtIFRoZSBXZWJHTCByZW5kZXJlciBvbmx5IHN1cHBvcnRzXG4gICAgICogdGhlIE5PUk1BTCwgQURELCBNVUxUSVBMWSBhbmQgU0NSRUVOIGJsZW5kIG1vZGVzLiBBbnl0aGluZyBlbHNlIHdpbGwgc2lsZW50bHkgYWN0IGxpa2VcbiAgICAgKiBOT1JNQUwuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IEJMRU5EX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5BRERcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTVVMVElQTFlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0NSRUVOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk9WRVJMQVlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuREFSS0VOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkxJR0hURU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JfQlVSTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IQVJEX0xJR0hUXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNPRlRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuRElGRkVSRU5DRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5FWENMVVNJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuSFVFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNBVFVSQVRJT05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQ09MT1JcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTFVNSU5PU0lUWVxuICAgICAqL1xuICAgIEJMRU5EX01PREVTOiB7XG4gICAgICAgIE5PUk1BTDogICAgICAgICAwLFxuICAgICAgICBBREQ6ICAgICAgICAgICAgMSxcbiAgICAgICAgTVVMVElQTFk6ICAgICAgIDIsXG4gICAgICAgIFNDUkVFTjogICAgICAgICAzLFxuICAgICAgICBPVkVSTEFZOiAgICAgICAgNCxcbiAgICAgICAgREFSS0VOOiAgICAgICAgIDUsXG4gICAgICAgIExJR0hURU46ICAgICAgICA2LFxuICAgICAgICBDT0xPUl9ET0RHRTogICAgNyxcbiAgICAgICAgQ09MT1JfQlVSTjogICAgIDgsXG4gICAgICAgIEhBUkRfTElHSFQ6ICAgICA5LFxuICAgICAgICBTT0ZUX0xJR0hUOiAgICAgMTAsXG4gICAgICAgIERJRkZFUkVOQ0U6ICAgICAxMSxcbiAgICAgICAgRVhDTFVTSU9OOiAgICAgIDEyLFxuICAgICAgICBIVUU6ICAgICAgICAgICAgMTMsXG4gICAgICAgIFNBVFVSQVRJT046ICAgICAxNCxcbiAgICAgICAgQ09MT1I6ICAgICAgICAgIDE1LFxuICAgICAgICBMVU1JTk9TSVRZOiAgICAgMTZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyB3ZWJnbCBkcmF3IG1vZGVzLiBUaGVzZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIEdMIGRyYXdNb2RlIHRvIHVzZVxuICAgICAqIHVuZGVyIGNlcnRhaW4gc2l0dWF0aW9ucyBhbmQgcmVuZGVyZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBEUkFXX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuUE9JTlRTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX0xPT1BcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FX1NUUklQXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9GQU5cbiAgICAgKi9cbiAgICBEUkFXX01PREVTOiB7XG4gICAgICAgIFBPSU5UUzogICAgICAgICAwLFxuICAgICAgICBMSU5FUzogICAgICAgICAgMSxcbiAgICAgICAgTElORV9MT09QOiAgICAgIDIsXG4gICAgICAgIExJTkVfU1RSSVA6ICAgICAzLFxuICAgICAgICBUUklBTkdMRVM6ICAgICAgNCxcbiAgICAgICAgVFJJQU5HTEVfU1RSSVA6IDUsXG4gICAgICAgIFRSSUFOR0xFX0ZBTjogICA2XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgcGl4aS5cbiAgICAgKlxuICAgICAqIFRoZSBERUZBVUxUIHNjYWxlIG1vZGUgYWZmZWN0cyB0aGUgZGVmYXVsdCBzY2FsaW5nIG1vZGUgb2YgZnV0dXJlIG9wZXJhdGlvbnMuXG4gICAgICogSXQgY2FuIGJlIHJlLWFzc2lnbmVkIHRvIGVpdGhlciBMSU5FQVIgb3IgTkVBUkVTVCwgZGVwZW5kaW5nIHVwb24gc3VpdGFiaWxpdHkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNDQUxFX01PREVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkRFRkFVTFQ9TElORUFSXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLkxJTkVBUiBTbW9vdGggc2NhbGluZ1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5ORUFSRVNUIFBpeGVsYXRpbmcgc2NhbGluZ1xuICAgICAqL1xuICAgIFNDQUxFX01PREVTOiB7XG4gICAgICAgIERFRkFVTFQ6ICAgIDAsXG4gICAgICAgIExJTkVBUjogICAgIDAsXG4gICAgICAgIE5FQVJFU1Q6ICAgIDFcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHByZWZpeCB0aGF0IGRlbm90ZXMgYSBVUkwgaXMgZm9yIGEgcmV0aW5hIGFzc2V0XG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFJFVElOQV9QUkVGSVhcbiAgICAgKi9cbiAgICAvL2V4YW1wbGU6ICdAMngnLFxuICAgIFJFVElOQV9QUkVGSVg6IC9AKC4rKXgvLFxuXG4gICAgUkVTT0xVVElPTjoxLFxuXG4gICAgRklMVEVSX1JFU09MVVRJT046MSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHJlbmRlciBvcHRpb25zIGlmIG5vbmUgYXJlIHN1cHBsaWVkIHRvIHtAbGluayBQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICogb3Ige0BsaW5rIFBJWEkuQ2FudmFzUmVuZGVyZXJ9LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TXG4gICAgICogQHByb3BlcnR5IHtIVE1MQ2FudmFzRWxlbWVudH0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy52aWV3PW51bGxcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMudHJhbnNwYXJlbnQ9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuYW50aWFsaWFzPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmZvcmNlRlhBQT1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5yZXNvbHV0aW9uPTFcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5iYWNrZ3JvdW5kQ29sb3I9MHgwMDAwMDBcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hdXRvUmVzaXplPWZhbHNlXG4gICAgICovXG4gICAgREVGQVVMVF9SRU5ERVJfT1BUSU9OUzoge1xuICAgICAgICB2aWV3OiBudWxsLFxuICAgICAgICByZXNvbHV0aW9uOiAxLFxuICAgICAgICBhbnRpYWxpYXM6IGZhbHNlLFxuICAgICAgICBmb3JjZUZYQUE6IGZhbHNlLFxuICAgICAgICBhdXRvUmVzaXplOiBmYWxzZSxcbiAgICAgICAgdHJhbnNwYXJlbnQ6IGZhbHNlLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IDB4MDAwMDAwLFxuICAgICAgICBjbGVhckJlZm9yZVJlbmRlcjogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBmYWxzZSxcbiAgICAgICAgcm91bmRQaXhlbHM6IGZhbHNlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50cyB0aGF0IGlkZW50aWZ5IHNoYXBlcywgbWFpbmx5IHRvIHByZXZlbnQgYGluc3RhbmNlb2ZgIGNhbGxzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVNcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlBPTFk9MFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUkVDVD0xXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5DSVJDPTJcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkVMSVA9M1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUlJFQz00XG4gICAgICovXG4gICAgU0hBUEVTOiB7XG4gICAgICAgIFBPTFk6IDAsXG4gICAgICAgIFJFQ1Q6IDEsXG4gICAgICAgIENJUkM6IDIsXG4gICAgICAgIEVMSVA6IDMsXG4gICAgICAgIFJSRUM6IDRcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogbWF5YmUgY2hhbmdlIHRvIFNQUklURS5CQVRDSF9TSVpFOiAyMDAwXG4gICAgLy8gVE9ETzogbWF5YmUgYWRkIFBBUlRJQ0xFLkJBVENIX1NJWkU6IDE1MDAwXG4gICAgU1BSSVRFX0JBVENIX1NJWkU6IDIwMDAgLy9uaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgYW5kIGRlc2t0b3AgbWFjaGluZXNcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ09OU1Q7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgRGlzcGxheU9iamVjdCA9IHJlcXVpcmUoJy4vRGlzcGxheU9iamVjdCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIENvbnRhaW5lciByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBkaXNwbGF5IG9iamVjdHMuXG4gKiBJdCBpcyB0aGUgYmFzZSBjbGFzcyBvZiBhbGwgZGlzcGxheSBvYmplY3RzIHRoYXQgYWN0IGFzIGEgY29udGFpbmVyIGZvciBvdGhlciBvYmplY3RzLlxuICpcbiAqYGBganNcbiAqIHZhciBjb250YWluZXIgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqIGNvbnRhaW5lci5hZGRDaGlsZChzcHJpdGUpO1xuICogYGBgXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuRGlzcGxheU9iamVjdFxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ29udGFpbmVyKClcbntcbiAgICBEaXNwbGF5T2JqZWN0LmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3RbXX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5Db250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSk7XG5Db250YWluZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb250YWluZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnRhaW5lci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG5cbiAgICAgICAgICAgIGlmICh3aWR0aCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IDE7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmIChoZWlnaHQgIT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyBoZWlnaHQgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogT3ZlcnJpZGFibGUgbWV0aG9kIHRoYXQgY2FuIGJlIHVzZWQgYnkgQ29udGFpbmVyIHN1YmNsYXNzZXMgd2hlbmV2ZXIgdGhlIGNoaWxkcmVuIGFycmF5IGlzIG1vZGlmaWVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5vbkNoaWxkcmVuQ2hhbmdlID0gZnVuY3Rpb24gKCkge307XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIuXG4gKiBcbiAqIFlvdSBjYW4gYWxzbyBhZGQgbXVsdHBsZSBpdGVtcyBsaWtlIHNvOiBteUNvbnRhaW5lci5hZGRDaGlsZCh0aGlua09uZSwgdGhpbmdUd28sIHRoaW5nVGhyZWUpXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gYWRkIHRvIHRoZSBjb250YWluZXJcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxueyBcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IHdlIGNhbiBieXBhc3MgbG9vcGluZyB0aHJvdWdoIHRoZSB0aGVtXG4gICAgaWYoYXJndW1lbnRzTGVuZ3RoID4gMSlcbiAgICB7XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgYXJndW1lbnRzIHByb3BlcnR5IGFuZCBhZGQgYWxsIGNoaWxkcmVuXG4gICAgICAgIC8vIHVzZSBpdCB0aGUgcmlnaHQgd2F5ICgubGVuZ3RoIGFuZCBbaV0pIHNvIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc3RpbGwgYmUgb3B0aW1pc2VkIGJ5IEpTIHJ1bnRpbWVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoIGFyZ3VtZW50c1tpXSApO1xuICAgICAgICB9XG4gICAgfSAgICAgXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIGNoaWxkIGhhcyBhIHBhcmVudCB0aGVuIGxldHMgcmVtb3ZlIGl0IGFzIFBpeGkgb2JqZWN0cyBjYW4gb25seSBleGlzdCBpbiBvbmUgcGxhY2VcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKHRoaXMuY2hpbGRyZW4ubGVuZ3RoLTEpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogQWRkcyBhIGNoaWxkIHRvIHRoZSBjb250YWluZXIgYXQgYSBzcGVjaWZpZWQgaW5kZXguIElmIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0byBhZGRcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gcGxhY2UgdGhlIGNoaWxkIGluXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyBhZGRlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5hZGRDaGlsZEF0ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgICAgICBjaGlsZC5lbWl0KCdhZGRlZCcsIHRoaXMpO1xuXG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNoaWxkICsgJ2FkZENoaWxkQXQ6IFRoZSBpbmRleCAnKyBpbmRleCArJyBzdXBwbGllZCBpcyBvdXQgb2YgYm91bmRzICcgKyB0aGlzLmNoaWxkcmVuLmxlbmd0aCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBTd2FwcyB0aGUgcG9zaXRpb24gb2YgMiBEaXNwbGF5IE9iamVjdHMgd2l0aGluIHRoaXMgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGNoaWxkMiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnN3YXBDaGlsZHJlbiA9IGZ1bmN0aW9uIChjaGlsZCwgY2hpbGQyKVxue1xuICAgIGlmIChjaGlsZCA9PT0gY2hpbGQyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbmRleDEgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuICAgIHZhciBpbmRleDIgPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQyKTtcblxuICAgIGlmIChpbmRleDEgPCAwIHx8IGluZGV4MiA8IDApXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N3YXBDaGlsZHJlbjogQm90aCB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdHMgbXVzdCBiZSBjaGlsZHJlbiBvZiB0aGUgY2FsbGVyLicpO1xuICAgIH1cblxuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgxXSA9IGNoaWxkMjtcbiAgICB0aGlzLmNoaWxkcmVuW2luZGV4Ml0gPSBjaGlsZDtcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgxIDwgaW5kZXgyID8gaW5kZXgxIDogaW5kZXgyKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW5kZXggcG9zaXRpb24gb2YgYSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIHRvIGlkZW50aWZ5XG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3QgdG8gaWRlbnRpZnlcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBtdXN0IGJlIGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgcG9zaXRpb24gb2YgYW4gZXhpc3RpbmcgY2hpbGQgaW4gdGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgRGlzcGxheU9iamVjdCBpbnN0YW5jZSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBpbmRleCBudW1iZXJcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgcmVzdWx0aW5nIGluZGV4IG51bWJlciBmb3IgdGhlIGNoaWxkIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc2V0Q2hpbGRJbmRleCA9IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN1cHBsaWVkIGluZGV4IGlzIG91dCBvZiBib3VuZHMnKTtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudEluZGV4ID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkKTtcblxuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGN1cnJlbnRJbmRleCwgMSk7IC8vIHJlbW92ZSBmcm9tIG9sZCBwb3NpdGlvblxuICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7IC8vYWRkIGF0IG5ldyBwb3NpdGlvblxuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNoaWxkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhcbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgYXRcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIGF0IHRoZSBnaXZlbiBpbmRleCwgaWYgYW55LlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkQXQgPSBmdW5jdGlvbiAoaW5kZXgpXG57XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0Q2hpbGRBdDogU3VwcGxpZWQgaW5kZXggJyArIGluZGV4ICsgJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY2hpbGQgbGlzdCwgb3IgdGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3QgaXMgbm90IGEgY2hpbGQgb2YgdGhlIGNhbGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2luZGV4XTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVtb3ZlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyByZW1vdmVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkID0gZnVuY3Rpb24gKGNoaWxkKVxue1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuXG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYSBjaGlsZCBmcm9tIHRoZSBzcGVjaWZpZWQgaW5kZXggcG9zaXRpb24uXG4gKlxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBnZXQgdGhlIGNoaWxkIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICB2YXIgY2hpbGQgPSB0aGlzLmdldENoaWxkQXQoaW5kZXgpO1xuXG4gICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpbmRleCwgMSk7XG5cbiAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICBjaGlsZC5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGNoaWxkcmVuIGZyb20gdGhpcyBjb250YWluZXIgdGhhdCBhcmUgd2l0aGluIHRoZSBiZWdpbiBhbmQgZW5kIGluZGV4ZXMuXG4gKlxuICogQHBhcmFtIGJlZ2luSW5kZXgge251bWJlcn0gVGhlIGJlZ2lubmluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyAwLlxuICogQHBhcmFtIGVuZEluZGV4IHtudW1iZXJ9IFRoZSBlbmRpbmcgcG9zaXRpb24uIERlZmF1bHQgdmFsdWUgaXMgc2l6ZSBvZiB0aGUgY29udGFpbmVyLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkcmVuID0gZnVuY3Rpb24gKGJlZ2luSW5kZXgsIGVuZEluZGV4KVxue1xuICAgIHZhciBiZWdpbiA9IGJlZ2luSW5kZXggfHwgMDtcbiAgICB2YXIgZW5kID0gdHlwZW9mIGVuZEluZGV4ID09PSAnbnVtYmVyJyA/IGVuZEluZGV4IDogdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgdmFyIHJhbmdlID0gZW5kIC0gYmVnaW47XG4gICAgdmFyIHJlbW92ZWQsIGk7XG5cbiAgICBpZiAocmFuZ2UgPiAwICYmIHJhbmdlIDw9IGVuZClcbiAgICB7XG4gICAgICAgIHJlbW92ZWQgPSB0aGlzLmNoaWxkcmVuLnNwbGljZShiZWdpbiwgcmFuZ2UpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW1vdmVkW2ldLnBhcmVudCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoYmVnaW5JbmRleCk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0uZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbW92ZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJhbmdlID09PSAwICYmIHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigncmVtb3ZlQ2hpbGRyZW46IG51bWVyaWMgdmFsdWVzIGFyZSBvdXRzaWRlIHRoZSBhY2NlcHRhYmxlIHJhbmdlLicpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSB0cmFuc2Zvcm0gb24gYWxsIGNoaWxkcmVuIG9mIHRoaXMgY29udGFpbmVyIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSk7XG4gICAgdGhpcy53b3JsZEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMucGFyZW50LndvcmxkQWxwaGE7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0gPSBDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgQ29udGFpbmVyIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIGFsbCB2aXNpYmxlIGNoaWxkcmVuIGludG8gY29uc2lkZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE8gdGhlIGJvdW5kcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHRoaXMgcmVuZGVyIHNlc3Npb24gc28gcmV0dXJuIHdoYXQgd2UgaGF2ZVxuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBjaGlsZEJvdW5kcztcbiAgICAgICAgdmFyIGNoaWxkTWF4WDtcbiAgICAgICAgdmFyIGNoaWxkTWF4WTtcblxuICAgICAgICB2YXIgY2hpbGRWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZFZpc2libGUgPSB0cnVlO1xuXG4gICAgICAgICAgICBjaGlsZEJvdW5kcyA9IHRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIG1pblggPSBtaW5YIDwgY2hpbGRCb3VuZHMueCA/IG1pblggOiBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgbWluWSA9IG1pblkgPCBjaGlsZEJvdW5kcy55ID8gbWluWSA6IGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIGNoaWxkTWF4WCA9IGNoaWxkQm91bmRzLndpZHRoICsgY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIGNoaWxkTWF4WSA9IGNoaWxkQm91bmRzLmhlaWdodCArIGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIG1heFggPSBtYXhYID4gY2hpbGRNYXhYID8gbWF4WCA6IGNoaWxkTWF4WDtcbiAgICAgICAgICAgIG1heFkgPSBtYXhZID4gY2hpbGRNYXhZID8gbWF4WSA6IGNoaWxkTWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGRWaXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG5Db250YWluZXIucHJvdG90eXBlLmNvbnRhaW5lckdldEJvdW5kcyA9IENvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbm9uLWdsb2JhbCBsb2NhbCBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS5cbiAqIFRoZSBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXhDYWNoZSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0aC5NYXRyaXguSURFTlRJVFk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0cml4Q2FjaGU7XG5cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyggbWF0aC5NYXRyaXguSURFTlRJVFkgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcblxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGksIGo7XG5cbiAgICAvLyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgbWFzayBvciBhIGZpbHRlci5cbiAgICBpZiAodGhpcy5fbWFzayB8fCB0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgLy8gcHVzaCBmaWx0ZXIgZmlyc3QgYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIGNvcnJlY3QgZm9yIGFueSBtYXNraW5nXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzICYmIHRoaXMuX2ZpbHRlcnMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGhpcywgdGhpcy5fZmlsdGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcblxuICAgICAgICAvLyBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIGJhdGNoLCBvbmx5IHJlbmRlcmVkIGlmIGl0IGhhcyBhIHRleHR1cmUuXG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgbWFrZSBzdXJlIHRoZXkgZ2V0IHJlbmRlcmVkXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJXZWJHTChyZW5kZXJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayh0aGlzLCB0aGlzLl9tYXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBzaW1wbGUgcmVuZGVyIGNoaWxkcmVuIVxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gdGhpcyBpcyB3aGVyZSBjb250ZW50IGl0c2VsZiBnZXRzIHJlbmRlcmVkLi4uXG59O1xuXG4vKipcbiAqIFRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzXG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy5hbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hc2spXG4gICAge1xuICAgICAgICByZW5kZXJlci5tYXNrTWFuYWdlci5wdXNoTWFzayh0aGlzLl9tYXNrLCByZW5kZXJlcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayhyZW5kZXJlcik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUNoaWxkcmVuKVxue1xuICAgIERpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGlmIChkZXN0cm95Q2hpbGRyZW4pXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLmRlc3Ryb3koZGVzdHJveUNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xufTtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBUcmFuc2Zvcm0gPSByZXF1aXJlKCcuL1RyYW5zZm9ybVN0YXRpYycpLFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCksXG4gICAgX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge3dvcmxkVHJhbnNmb3JtOm5ldyBtYXRoLk1hdHJpeCgpLCB3b3JsZEFscGhhOjEsIGNoaWxkcmVuOltdfTtcblxuXG4vKipcbiAqIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCBvbiB0aGUgc2NyZWVuLlxuICogVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIG9uIGl0cyBvd24gcmF0aGVyIGl0IHNob3VsZCBiZSBleHRlbmRlZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIEV2ZW50RW1pdHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gRGlzcGxheU9iamVjdCgpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb29yZGluYXRlIG9mIHRoZSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLnRyYW5zZm9ybS5wb3NpdGlvbjtcbiAgIC8vIHRoaXMuX3Bvc2l0aW9uID0gbmV3IENhY2hlUG9pbnQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHBpdm90IHBvaW50IG9mIHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgaXQgcm90YXRlcyBhcm91bmRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5waXZvdCA9IHRoaXMudHJhbnNmb3JtLnBpdm90XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBza2V3IGZhY3RvciBmb3IgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnNrZXcgPSB0aGlzLnRyYW5zZm9ybS5za2V3XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3JvdGF0aW9uID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcGFjaXR5IG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgb2JqZWN0LiBJZiBmYWxzZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGRyYXduLCBhbmRcbiAgICAgKiB0aGUgdXBkYXRlVHJhbnNmb3JtIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENhbiB0aGlzIG9iamVjdCBiZSByZW5kZXJlZCwgaWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biBidXQgdGhlIHVwZGF0ZVRyYW5zZm9ybVxuICAgICAqIG1ldGhvZHMgd2lsbCBzdGlsbCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyIHRoYXQgY29udGFpbnMgdGhpcyBkaXNwbGF5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ29udGFpbmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtdWx0aXBsaWVkIGFscGhhIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgdHJhbnNmb3JtIG9mIHRoZSBvYmplY3QgYmFzZWQgb24gd29ybGQgKHBhcmVudCkgZmFjdG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS5sb2NhbFRyYW5zZm9ybTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcmVhIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0by4gVGhpcyBpcyB1c2VkIGFzIG1vcmUgb2YgYW4gb3B0aW1pc2F0aW9uXG4gICAgICogcmF0aGVyIHRoYW4gZmlndXJpbmcgb3V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGVhY2ggZnJhbWUgeW91IGNhbiBzZXQgdGhpcyByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW9zdCB1cC10by1kYXRlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgbWFzayBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gIC8vICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxheU9iamVjdDtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNjYWxlWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcm90YXRpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uZGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uX2NyID0gTWF0aC5jb3ModmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBzcHJpdGUgaXMgZ2xvYmFsbHkgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB3b3JsZFZpc2libGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udmlzaWJsZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICB9IHdoaWxlIChpdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIG1hc2sgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LiBBIG1hc2sgaXMgYW4gb2JqZWN0IHRoYXQgbGltaXRzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIG9iamVjdCB0byB0aGUgc2hhcGUgb2YgdGhlIG1hc2sgYXBwbGllZCB0byBpdC5cbiAgICAgKiBJbiBQSVhJIGEgcmVndWxhciBtYXNrIG11c3QgYmUgYSBQSVhJLkdyYXBoaWNzIG9yIGEgUElYSS5TcHJpdGUgb2JqZWN0LiBUaGlzIGFsbG93cyBmb3IgbXVjaCBmYXN0ZXIgbWFza2luZyBpbiBjYW52YXMgYXMgaXQgdXRpbGlzZXMgc2hhcGUgY2xpcHBpbmcuXG4gICAgICogVG8gcmVtb3ZlIGEgbWFzaywgc2V0IHRoaXMgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3N8UElYSS5TcHJpdGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBtYXNrOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrLnJlbmRlcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXNrID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LlxuICAgICAqICogSU1QT1JUQU5UOiBUaGlzIGlzIGEgd2ViR0wgb25seSBmZWF0dXJlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlci5cbiAgICAgKiBUbyByZW1vdmUgZmlsdGVycyBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ251bGwnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkFic3RyYWN0RmlsdGVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMgJiYgdGhpcy5fZmlsdGVycy5zbGljZSgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlICYmIHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogVE9ETyAtIE9wdGltaXphdGlvbiBwYXNzIVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vaWYodGhpcy50cmFuc2Zvcm0uZGlydHkgfHwgcGFyZW50LnRyYW5zZm9ybS5kaXJ0eSlcbiAgICB0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKTtcbiAgICAvLyBtdWx0aXBseSB0aGUgYWxwaGFzLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gPSBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICpcbiAqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH1cbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxvY2FsIGJvdW5kcyBvZiB0aGUgZGlzcGxheU9iamVjdCBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyhtYXRoLk1hdHJpeC5JREVOVElUWSk7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9HbG9iYWwgPSBmdW5jdGlvbiAocG9zaXRpb24pXG57XG4gICAgLy8gdGhpcyBwYXJlbnQgY2hlY2sgaXMgZm9yIGp1c3QgaW4gY2FzZSB0aGUgaXRlbSBpcyBhIHJvb3Qgb2JqZWN0LlxuICAgIC8vIElmIGl0IGlzIHdlIG5lZWQgdG8gZ2l2ZSBpdCBhIHRlbXBvcmFyeSBwYXJlbnQgc28gdGhhdCBkaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtIHdvcmtzIGNvcnJlY3RseVxuICAgIC8vIHRoaXMgaXMgbWFpbmx5IHRvIGF2b2lkIGEgcGFyZW50IGNoZWNrIGluIHRoZSBtYWluIGxvb3AuIEV2ZXJ5IGxpdHRsZSBoZWxwcyBmb3IgcGVyZm9ybWFuY2UgOilcbiAgICBpZighdGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLnBhcmVudCA9IF90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIGxvdFxuICAgIHJldHVybiB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5KHBvc2l0aW9uKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgbG9jYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHJlbGF0aXZlIHRvIGFub3RoZXIgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcG9zaXRpb24ge1BJWEkuUG9pbnR9IFRoZSB3b3JsZCBvcmlnaW4gdG8gY2FsY3VsYXRlIGZyb21cbiAqIEBwYXJhbSBbZnJvbV0ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gY2FsY3VsYXRlIHRoZSBnbG9iYWwgcG9zaXRpb24gZnJvbVxuICogQHBhcmFtIFtwb2ludF0ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSwgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIGNyZWF0ZSBhIG5ldyBQb2ludClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhpcyBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUudG9Mb2NhbCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgZnJvbSwgcG9pbnQpXG57XG4gICAgaWYgKGZyb20pXG4gICAge1xuICAgICAgICBwb3NpdGlvbiA9IGZyb20udG9HbG9iYWwocG9zaXRpb24pO1xuICAgIH1cblxuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIHNpbXBseSBhcHBseSB0aGUgbWF0cml4Li5cbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9zaXRpb24sIHBvaW50KTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyBPVkVSV1JJVEU7XG59O1xuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwLCBzY2FsZU1vZGUsIHJlc29sdXRpb24pO1xuXG4gICAgX3RlbXBNYXRyaXgudHggPSAtYm91bmRzLng7XG4gICAgX3RlbXBNYXRyaXgudHkgPSAtYm91bmRzLnk7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBfdGVtcE1hdHJpeCk7XG5cbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBwYXJlbnQgQ29udGFpbmVyIG9mIHRoaXMgRGlzcGxheU9iamVjdFxuICpcbiAqIEBwYXJhbSBjb250YWluZXIge0NvbnRhaW5lcn0gVGhlIENvbnRhaW5lciB0byBhZGQgdGhpcyBEaXNwbGF5T2JqZWN0IHRvXG4gKiBAcmV0dXJuIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdGhhdCB0aGlzIERpc3BsYXlPYmplY3Qgd2FzIGFkZGVkIHRvXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFBhcmVudCA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWNvbnRhaW5lci5hZGRDaGlsZClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0UGFyZW50OiBBcmd1bWVudCBtdXN0IGJlIGEgQ29udGFpbmVyJyk7XG4gICAgfVxuXG4gICAgY29udGFpbmVyLmFkZENoaWxkKHRoaXMpO1xuICAgIHJldHVybiBjb250YWluZXI7XG59O1xuXG4vKipcbiAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHNldCB0aGUgcG9zdGlvbiwgc2NhbGUsIHNrZXcgYW5kIHBpdm90IGF0IG9uY2UuXG4gKlxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IFRoZSBYIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gVGhlIFkgcG9zaXRpb25cbiAqIEBwYXJhbSBbc2NhbGVYPTFdIHtudW1iZXJ9IFRoZSBYIHNjYWxlIHZhbHVlXG4gKiBAcGFyYW0gW3NjYWxlWT0xXSB7bnVtYmVyfSBUaGUgWSBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtyb3RhdGlvbj0wXSB7bnVtYmVyfSBUaGUgcm90YXRpb25cbiAqIEBwYXJhbSBbc2tld1g9MF0ge251bWJlcn0gVGhlIFggc2tldyB2YWx1ZVxuICogQHBhcmFtIFtza2V3WT0wXSB7bnVtYmVyfSBUaGUgWSBza2V3IHZhbHVlXG4gKiBAcGFyYW0gW3Bpdm90WD0wXSB7bnVtYmVyfSBUaGUgWCBwaXZvdCB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFk9MF0ge251bWJlcn0gVGhlIFkgcGl2b3QgdmFsdWVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24oeCwgeSwgc2NhbGVYLCBzY2FsZVksIHJvdGF0aW9uLCBza2V3WCwgc2tld1ksIHBpdm90WCwgcGl2b3RZKSAvL2pzaGludCBpZ25vcmU6bGluZVxue1xuICAgIHRoaXMucG9zaXRpb24ueCA9IHggfHwgMDtcbiAgICB0aGlzLnBvc2l0aW9uLnkgPSB5IHx8IDA7XG4gICAgdGhpcy5zY2FsZS54ID0gIXNjYWxlWCA/IDEgOiBzY2FsZVg7XG4gICAgdGhpcy5zY2FsZS55ID0gIXNjYWxlWSA/IDEgOiBzY2FsZVk7XG4gICAgdGhpcy5yb3RhdGlvbiA9IHJvdGF0aW9uIHx8IDA7XG4gICAgdGhpcy5za2V3LnggPSBza2V3WCB8fCAwO1xuICAgIHRoaXMuc2tldy55ID0gc2tld1kgfHwgMDtcbiAgICB0aGlzLnBpdm90LnggPSBwaXZvdFggfHwgMDtcbiAgICB0aGlzLnBpdm90LnkgPSBwaXZvdFkgfHwgMDtcbiAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQmFzZSBkZXN0cm95IG1ldGhvZCBmb3IgZ2VuZXJpYyBkaXNwbGF5IG9iamVjdHNcbiAqXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdGhpcy5wb3NpdGlvbiA9IG51bGw7XG4gICAgdGhpcy5zY2FsZSA9IG51bGw7XG4gICAgdGhpcy5waXZvdCA9IG51bGw7XG4gICAgdGhpcy5za2V3ID0gbnVsbDtcblxuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIHRoaXMuX2JvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG4gICAgdGhpcy5fbWFzayA9IG51bGw7XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlckFyZWEgPSBudWxsO1xufTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIE9ic2VydmFibGVQb2ludCh0cmFuc2Zvcm0sIHgsIHkpXG57XG4gICAgdGhpcy5feCA9IHggfHwgMDtcbiAgICB0aGlzLl95ID0geSB8fCAwO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG59XG5cbk9ic2VydmFibGVQb2ludC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYnNlcnZhYmxlUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IE9ic2VydmFibGVQb2ludDtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE9ic2VydmFibGVQb2ludC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3Qgb24gdGhlIHggYXhpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIHg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5feDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3ggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3k7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl95ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5PYnNlcnZhYmxlUG9pbnQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuX3ggPSB4IHx8IDA7XG4gICAgdGhpcy5feSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLl94IDogMCApO1xuICAgIFxuICAgIHRoaXMudHJhbnNmb3JtLmRpcnR5ID0gdHJ1ZTtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKTtcbnZhciBPYnNlcnZhYmxlUG9pbnQgPSByZXF1aXJlKCcuL09ic2VydmFibGVQb2ludCcpO1xuXG4vKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBUcmFuc2Zvcm0oKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLCAwKTtcbiAgICB0aGlzLnNjYWxlID0gbmV3IE9ic2VydmFibGVQb2ludCh0aGlzLDEsIDEpO1xuICAgIHRoaXMucGl2b3QgPSBuZXcgT2JzZXJ2YWJsZVBvaW50KHRoaXMsIDAsIDApO1xuICAgIHRoaXMuc2tldyA9IG5ldyBPYnNlcnZhYmxlUG9pbnQodGhpcywgMCwwKTtcbiAgICBcbiAgICB0aGlzLnJvdGF0aW9uID0gMDtcbiAgICB0aGlzLl9zciA9IE1hdGguc2luKDApO1xuICAgIHRoaXMuX2NyID0gTWF0aC5jb3MoMCk7XG4gICAgXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cblxuICAgIHRoaXMudXBkYXRlZCA9IHRydWU7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUcmFuc2Zvcm07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKHBhcmVudFRyYW5zZm9ybSlcbntcbiAgICB2YXIgcHQgPSBwYXJlbnRUcmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgbHQgPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xuXG4gICAgaWYodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3g7XG4gICAgICAgIGx0LmIgID0gIHRoaXMuX3NyICogdGhpcy5zY2FsZS5feDtcbiAgICAgICAgbHQuYyAgPSAtdGhpcy5fc3IgKiB0aGlzLnNjYWxlLl95O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUuX3k7XG4gICAgICAgIGx0LnR4ID0gIHRoaXMucG9zaXRpb24uX3ggLSAodGhpcy5waXZvdC5feCAqIGx0LmEgKyB0aGlzLnBpdm90Ll95ICogbHQuYyk7XG4gICAgICAgIGx0LnR5ID0gIHRoaXMucG9zaXRpb24uX3kgLSAodGhpcy5waXZvdC5feCAqIGx0LmIgKyB0aGlzLnBpdm90Ll95ICogbHQuZCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVkID0gdGhpcy5kaXJ0eSB8fCBwYXJlbnRUcmFuc2Zvcm0uZGlydHk7XG5cbiAgICBpZih0aGlzLnVwZGF0ZWQpXG4gICAgeyAgICAgIFxuICAgICAgICAvLyBjb25jYXQgdGhlIHBhcmVudCBtYXRyaXggd2l0aCB0aGUgb2JqZWN0cyB0cmFuc2Zvcm0uXG4gICAgICAgIHd0LmEgID0gbHQuYSAgKiBwdC5hICsgbHQuYiAgKiBwdC5jO1xuICAgICAgICB3dC5iICA9IGx0LmEgICogcHQuYiArIGx0LmIgICogcHQuZDtcbiAgICAgICAgd3QuYyAgPSBsdC5jICAqIHB0LmEgKyBsdC5kICAqIHB0LmM7XG4gICAgICAgIHd0LmQgID0gbHQuYyAgKiBwdC5iICsgbHQuZCAgKiBwdC5kO1xuICAgICAgICB3dC50eCA9IGx0LnR4ICogcHQuYSArIGx0LnR5ICogcHQuYyArIHB0LnR4O1xuICAgICAgICB3dC50eSA9IGx0LnR4ICogcHQuYiArIGx0LnR5ICogcHQuZCArIHB0LnR5O1xuICAgIH1cbiAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhbnNmb3JtO1xuXG5cbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIFRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQ2FudmFzQnVmZmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcbiAgICBDYW52YXNHcmFwaGljcyA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL0dyYXBoaWNzRGF0YScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIEdyYXBoaWNzIGNsYXNzIGNvbnRhaW5zIG1ldGhvZHMgdXNlZCB0byBkcmF3IHByaW1pdGl2ZSBzaGFwZXMgc3VjaCBhcyBsaW5lcywgY2lyY2xlcyBhbmRcbiAqIHJlY3RhbmdsZXMgdG8gdGhlIGRpc3BsYXksIGFuZCB0byBjb2xvciBhbmQgZmlsbCB0aGVtLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzKClcbntcbiAgICBDb250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHBoYSB2YWx1ZSB1c2VkIHdoZW4gZmlsbGluZyB0aGUgR3JhcGhpY3Mgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggKHRoaWNrbmVzcykgb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29sb3Igb2YgYW55IGxpbmVzIGRyYXduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBHcmFwaGljcyBkYXRhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YVtdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFRoaXMgaXMgYSBoZXggdmFsdWUuIEFwcGx5IGEgdmFsdWUgb2YgMHhGRkZGRkYgdG8gcmVzZXQgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmV2aW91cyB0aW50IGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIFVzZWQgdG8gY29tcGFyZSB0byB0aGUgY3VycmVudCB0aW50IGFuZCBjaGVjayBpZiB0aGVyZXMgY2hhbmdlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLl9wcmV2VGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMO1xuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCBwYXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgY29udGFpbmluZyBzb21lIFdlYkdMLXJlbGF0ZWQgcHJvcGVydGllcyB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxudW1iZXIsIG9iamVjdD59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAvLyBUT0RPIC0gX3dlYmdsIHNob3VsZCB1c2UgYSBwcm90b3R5cGUgb2JqZWN0LCBub3QgYSByYW5kb20gdW5kb2N1bWVudGVkIG9iamVjdC4uLlxuICAgIHRoaXMuX3dlYkdMID0ge307XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgc2hhcGUgaXMgYmVpbmcgdXNlZCBhcyBhIG1hc2suXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNNYXNrID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYm91bmRzJyBwYWRkaW5nIHVzZWQgZm9yIGJvdW5kcyBjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJvdW5kc1BhZGRpbmcgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQSBjYWNoZSBvZiB0aGUgbG9jYWwgYm91bmRzIHRvIHByZXZlbnQgcmVjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwwLDEsMSk7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlIGdyYXBoaWNzXG4gICAgICogb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIFdlYkdMIGdyYXBoaWNzIG9iamVjdCBoYXMgY2hhbmdlZC4gSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZVxuICAgICAqIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlY2FsY3VsYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcblxuICAgIHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIGNhY2hlZCBzcHJpdGUgb2JqZWN0IG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBjYWNoZUFzQml0bWFwIGlzIHNldCB0byB0cnVlIHRoZSBncmFwaGljcyBvYmplY3Qgd2lsbCBiZSByZW5kZXJlZCBhcyBpZiBpdCB3YXMgYSBzcHJpdGUuXG4gICAgICogVGhpcyBpcyB1c2VmdWwgaWYgeW91ciBncmFwaGljcyBlbGVtZW50IGRvZXMgbm90IGNoYW5nZSBvZnRlbiwgYXMgaXQgd2lsbCBzcGVlZCB1cCB0aGUgcmVuZGVyaW5nXG4gICAgICogb2YgdGhlIG9iamVjdCBpbiBleGNoYW5nZSBmb3IgdGFraW5nIHVwIHRleHR1cmUgbWVtb3J5LiBJdCBpcyBhbHNvIHVzZWZ1bCBpZiB5b3UgbmVlZCB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3QgdG8gYmUgYW50aS1hbGlhc2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVuZGVyZWQgdXNpbmcgY2FudmFzLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCBpZlxuICAgICAqIHlvdSBhcmUgY29uc3RhbnRseSByZWRyYXdpbmcgdGhlIGdyYXBoaWNzIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBjYWNoZUFzQml0bWFwXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5HcmFwaGljcyNcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuR3JhcGhpY3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcbkdyYXBoaWNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljcztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEdyYXBoaWNzIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqIE5vdGUgdGhhdCB0aGUgb25seSB0aGUgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IGFyZSBjbG9uZWQsIG5vdCBpdHMgdHJhbnNmb3JtIChwb3NpdGlvbixzY2FsZSxldGMpXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2xvbmUgPSBuZXcgR3JhcGhpY3MoKTtcblxuICAgIGNsb25lLnJlbmRlcmFibGUgICAgPSB0aGlzLnJlbmRlcmFibGU7XG4gICAgY2xvbmUuZmlsbEFscGhhICAgICA9IHRoaXMuZmlsbEFscGhhO1xuICAgIGNsb25lLmxpbmVXaWR0aCAgICAgPSB0aGlzLmxpbmVXaWR0aDtcbiAgICBjbG9uZS5saW5lQ29sb3IgICAgID0gdGhpcy5saW5lQ29sb3I7XG4gICAgY2xvbmUudGludCAgICAgICAgICA9IHRoaXMudGludDtcbiAgICBjbG9uZS5ibGVuZE1vZGUgICAgID0gdGhpcy5ibGVuZE1vZGU7XG4gICAgY2xvbmUuaXNNYXNrICAgICAgICA9IHRoaXMuaXNNYXNrO1xuICAgIGNsb25lLmJvdW5kc1BhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG4gICAgY2xvbmUuZGlydHkgICAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuZ2xEaXJ0eSAgICAgICA9IHRydWU7XG4gICAgY2xvbmUuY2FjaGVkU3ByaXRlRGlydHkgPSB0aGlzLmNhY2hlZFNwcml0ZURpcnR5O1xuXG4gICAgLy8gY29weSBncmFwaGljcyBkYXRhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIGNsb25lLmdyYXBoaWNzRGF0YS5wdXNoKHRoaXMuZ3JhcGhpY3NEYXRhW2ldLmNsb25lKCkpO1xuICAgIH1cblxuICAgIGNsb25lLmN1cnJlbnRQYXRoID0gY2xvbmUuZ3JhcGhpY3NEYXRhW2Nsb25lLmdyYXBoaWNzRGF0YS5sZW5ndGggLSAxXTtcblxuICAgIGNsb25lLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICByZXR1cm4gY2xvbmU7XG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgbGluZSBzdHlsZSB1c2VkIGZvciBzdWJzZXF1ZW50IGNhbGxzIHRvIEdyYXBoaWNzIG1ldGhvZHMgc3VjaCBhcyB0aGUgbGluZVRvKCkgbWV0aG9kIG9yIHRoZSBkcmF3Q2lyY2xlKCkgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhdywgd2lsbCB1cGRhdGUgdGhlIG9iamVjdHMgc3RvcmVkIHN0eWxlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUubGluZVN0eWxlID0gZnVuY3Rpb24gKGxpbmVXaWR0aCwgY29sb3IsIGFscGhhKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoIHx8IDA7XG4gICAgdGhpcy5saW5lQ29sb3IgPSBjb2xvciB8fCAwO1xuICAgIHRoaXMubGluZUFscGhhID0gKGFscGhhID09PSB1bmRlZmluZWQpID8gMSA6IGFscGhhO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBoYWxmd2F5IHRocm91Z2ggYSBsaW5lPyBzdGFydCBhIG5ldyBvbmUhXG4gICAgICAgICAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnNsaWNlKC0yKSk7XG4gICAgICAgICAgICBzaGFwZS5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSBpdHMgZW1wdHkgc28gbGV0cyBqdXN0IHNldCB0aGUgbGluZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVXaWR0aCA9IHRoaXMubGluZVdpZHRoO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZUFscGhhID0gdGhpcy5saW5lQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogTW92ZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byB4LCB5LlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IHRoZSBYIGNvb3JkaW5hdGUgdG8gbW92ZSB0b1xuICogQHBhcmFtIHkge251bWJlcn0gdGhlIFkgY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICAqL1xuR3JhcGhpY3MucHJvdG90eXBlLm1vdmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24oW3gseV0pO1xuICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIGxpbmUgdXNpbmcgdGhlIGN1cnJlbnQgbGluZSBzdHlsZSBmcm9tIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8gKHgsIHkpO1xuICogVGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiBpcyB0aGVuIHNldCB0byAoeCwgeSkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBkcmF3IHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lVG8gPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgsIHkpO1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnF1YWRyYXRpY0N1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICBuID0gMjAsXG4gICAgICAgIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLCAwKTtcbiAgICB9XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBuOyArK2kpXG4gICAge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgeGEgPSBmcm9tWCArICggKGNwWCAtIGZyb21YKSAqIGogKTtcbiAgICAgICAgeWEgPSBmcm9tWSArICggKGNwWSAtIGZyb21ZKSAqIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCggeGEgKyAoICgoY3BYICsgKCAodG9YIC0gY3BYKSAqIGogKSkgLSB4YSkgKiBqICksXG4gICAgICAgICAgICAgICAgICAgICB5YSArICggKChjcFkgKyAoICh0b1kgLSBjcFkpICogaiApKSAtIHlhKSAqIGogKSApO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBiZXppZXIgY3VydmUgYW5kIHRoZW4gZHJhd3MgaXQuXG4gKlxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gY3BYMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZMiB7bnVtYmVyfSBTZWNvbmQgQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlemllckN1cnZlVG8gPSBmdW5jdGlvbiAoY3BYLCBjcFksIGNwWDIsIGNwWTIsIHRvWCwgdG9ZKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwwKTtcbiAgICB9XG5cbiAgICB2YXIgbiA9IDIwLFxuICAgICAgICBkdCxcbiAgICAgICAgZHQyLFxuICAgICAgICBkdDMsXG4gICAgICAgIHQyLFxuICAgICAgICB0MyxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICB2YXIgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXTtcbiAgICB2YXIgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXTtcblxuICAgIHZhciBqID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICBkdCA9ICgxIC0gaik7XG4gICAgICAgIGR0MiA9IGR0ICogZHQ7XG4gICAgICAgIGR0MyA9IGR0MiAqIGR0O1xuXG4gICAgICAgIHQyID0gaiAqIGo7XG4gICAgICAgIHQzID0gdDIgKiBqO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCBkdDMgKiBmcm9tWCArIDMgKiBkdDIgKiBqICogY3BYICsgMyAqIGR0ICogdDIgKiBjcFgyICsgdDMgKiB0b1gsXG4gICAgICAgICAgICAgICAgICAgICBkdDMgKiBmcm9tWSArIDMgKiBkdDIgKiBqICogY3BZICsgMyAqIGR0ICogdDIgKiBjcFkyICsgdDMgKiB0b1kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjVG8oKSBtZXRob2QgY3JlYXRlcyBhbiBhcmMvY3VydmUgYmV0d2VlbiB0d28gdGFuZ2VudHMgb24gdGhlIGNhbnZhcy5cbiAqXG4gKiBcImJvcnJvd2VkXCIgZnJvbSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Z4Y2FudmFzLyAtIHRoYW5rcyBnb29nbGUhXG4gKlxuICogQHBhcmFtIHgxIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTEge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB4MiB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGFyY1xuICogQHBhcmFtIHkyIHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGFyY1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmFyY1RvID0gZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyLCByYWRpdXMpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oeDEsIHkxKTtcbiAgICB9XG5cbiAgICB2YXIgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMsXG4gICAgICAgIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0sXG4gICAgICAgIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0sXG4gICAgICAgIGExID0gZnJvbVkgLSB5MSxcbiAgICAgICAgYjEgPSBmcm9tWCAtIHgxLFxuICAgICAgICBhMiA9IHkyICAgLSB5MSxcbiAgICAgICAgYjIgPSB4MiAgIC0geDEsXG4gICAgICAgIG1tID0gTWF0aC5hYnMoYTEgKiBiMiAtIGIxICogYTIpO1xuXG4gICAgaWYgKG1tIDwgMS4wZS04IHx8IHJhZGl1cyA9PT0gMClcbiAgICB7XG4gICAgICAgIGlmIChwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAhPT0geDEgfHwgcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0gIT09IHkxKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHMucHVzaCh4MSwgeTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBkZCA9IGExICogYTEgKyBiMSAqIGIxLFxuICAgICAgICAgICAgY2MgPSBhMiAqIGEyICsgYjIgKiBiMixcbiAgICAgICAgICAgIHR0ID0gYTEgKiBhMiArIGIxICogYjIsXG4gICAgICAgICAgICBrMSA9IHJhZGl1cyAqIE1hdGguc3FydChkZCkgLyBtbSxcbiAgICAgICAgICAgIGsyID0gcmFkaXVzICogTWF0aC5zcXJ0KGNjKSAvIG1tLFxuICAgICAgICAgICAgajEgPSBrMSAqIHR0IC8gZGQsXG4gICAgICAgICAgICBqMiA9IGsyICogdHQgLyBjYyxcbiAgICAgICAgICAgIGN4ID0gazEgKiBiMiArIGsyICogYjEsXG4gICAgICAgICAgICBjeSA9IGsxICogYTIgKyBrMiAqIGExLFxuICAgICAgICAgICAgcHggPSBiMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHB5ID0gYTEgKiAoazIgKyBqMSksXG4gICAgICAgICAgICBxeCA9IGIyICogKGsxICsgajIpLFxuICAgICAgICAgICAgcXkgPSBhMiAqIChrMSArIGoyKSxcbiAgICAgICAgICAgIHN0YXJ0QW5nbGUgPSBNYXRoLmF0YW4yKHB5IC0gY3ksIHB4IC0gY3gpLFxuICAgICAgICAgICAgZW5kQW5nbGUgICA9IE1hdGguYXRhbjIocXkgLSBjeSwgcXggLSBjeCk7XG5cbiAgICAgICAgdGhpcy5hcmMoY3ggKyB4MSwgY3kgKyB5MSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYjEgKiBhMiA+IGIyICogYTEpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUaGUgYXJjIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSAodXNlZCB0byBjcmVhdGUgY2lyY2xlcywgb3IgcGFydHMgb2YgY2lyY2xlcykuXG4gKlxuICogQHBhcmFtIGN4IHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gY3kge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gc3RhcnRBbmdsZSB7bnVtYmVyfSBUaGUgc3RhcnRpbmcgYW5nbGUsIGluIHJhZGlhbnMgKDAgaXMgYXQgdGhlIDMgbydjbG9jayBwb3NpdGlvbiBvZiB0aGUgYXJjJ3MgY2lyY2xlKVxuICogQHBhcmFtIGVuZEFuZ2xlIHtudW1iZXJ9IFRoZSBlbmRpbmcgYW5nbGUsIGluIHJhZGlhbnNcbiAqIEBwYXJhbSBhbnRpY2xvY2t3aXNlIHtib29sZWFufSBPcHRpb25hbC4gU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGRyYXdpbmcgc2hvdWxkIGJlIGNvdW50ZXJjbG9ja3dpc2Ugb3IgY2xvY2t3aXNlLiBGYWxzZSBpcyBkZWZhdWx0LCBhbmQgaW5kaWNhdGVzIGNsb2Nrd2lzZSwgd2hpbGUgdHJ1ZSBpbmRpY2F0ZXMgY291bnRlci1jbG9ja3dpc2UuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjID0gZnVuY3Rpb24oY3gsIGN5LCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBhbnRpY2xvY2t3aXNlKVxue1xuICAgIGFudGljbG9ja3dpc2UgPSBhbnRpY2xvY2t3aXNlIHx8IGZhbHNlO1xuXG4gICAgaWYgKHN0YXJ0QW5nbGUgPT09IGVuZEFuZ2xlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYoICFhbnRpY2xvY2t3aXNlICYmIGVuZEFuZ2xlIDw9IHN0YXJ0QW5nbGUgKVxuICAgIHtcbiAgICAgICAgZW5kQW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuICAgIGVsc2UgaWYoIGFudGljbG9ja3dpc2UgJiYgc3RhcnRBbmdsZSA8PSBlbmRBbmdsZSApXG4gICAge1xuICAgICAgICBzdGFydEFuZ2xlICs9IE1hdGguUEkgKiAyO1xuICAgIH1cblxuICAgIHZhciBzd2VlcCA9IGFudGljbG9ja3dpc2UgPyAoc3RhcnRBbmdsZSAtIGVuZEFuZ2xlKSAqIC0xIDogKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSk7XG4gICAgdmFyIHNlZ3MgPSAgTWF0aC5jZWlsKE1hdGguYWJzKHN3ZWVwKSAvIChNYXRoLlBJICogMikpICogNDA7XG5cbiAgICBpZihzd2VlcCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBzdGFydFggPSBjeCArIE1hdGguY29zKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuICAgIHZhciBzdGFydFkgPSBjeSArIE1hdGguc2luKHN0YXJ0QW5nbGUpICogcmFkaXVzO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5wdXNoKHN0YXJ0WCwgc3RhcnRZKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciB0aGV0YSA9IHN3ZWVwLyhzZWdzKjIpO1xuICAgIHZhciB0aGV0YTIgPSB0aGV0YSoyO1xuXG4gICAgdmFyIGNUaGV0YSA9IE1hdGguY29zKHRoZXRhKTtcbiAgICB2YXIgc1RoZXRhID0gTWF0aC5zaW4odGhldGEpO1xuXG4gICAgdmFyIHNlZ01pbnVzID0gc2VncyAtIDE7XG5cbiAgICB2YXIgcmVtYWluZGVyID0gKCBzZWdNaW51cyAlIDEgKSAvIHNlZ01pbnVzO1xuXG4gICAgZm9yKHZhciBpPTA7IGk8PXNlZ01pbnVzOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcmVhbCA9ICBpICsgcmVtYWluZGVyICogaTtcblxuXG4gICAgICAgIHZhciBhbmdsZSA9ICgodGhldGEpICsgc3RhcnRBbmdsZSArICh0aGV0YTIgKiByZWFsKSk7XG5cbiAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgIHZhciBzID0gLU1hdGguc2luKGFuZ2xlKTtcblxuICAgICAgICBwb2ludHMucHVzaCgoIChjVGhldGEgKiAgYykgKyAoc1RoZXRhICogcykgKSAqIHJhZGl1cyArIGN4LFxuICAgICAgICAgICAgICAgICAgICAoIChjVGhldGEgKiAtcykgKyAoc1RoZXRhICogYykgKSAqIHJhZGl1cyArIGN5KTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIGEgc2ltcGxlIG9uZS1jb2xvciBmaWxsIHRoYXQgc3Vic2VxdWVudCBjYWxscyB0byBvdGhlciBHcmFwaGljcyBtZXRob2RzXG4gKiAoc3VjaCBhcyBsaW5lVG8oKSBvciBkcmF3Q2lyY2xlKCkpIHVzZSB3aGVuIGRyYXdpbmcuXG4gKlxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmJlZ2luRmlsbCA9IGZ1bmN0aW9uIChjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5maWxsaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPD0gMilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsID0gdGhpcy5maWxsaW5nO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQ29sb3IgPSB0aGlzLmZpbGxDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbEFscGhhID0gdGhpcy5maWxsQWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBmaWxsIHRvIHRoZSBsaW5lcyBhbmQgc2hhcGVzIHRoYXQgd2VyZSBhZGRlZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHRoZSBiZWdpbkZpbGwoKSBtZXRob2QuXG4gKlxuICogQHJldHVybiB7R3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5lbmRGaWxsID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IG51bGw7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCApXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguUmVjdGFuZ2xlKHgseSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gUmFkaXVzIG9mIHRoZSByZWN0YW5nbGUgY29ybmVyc1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSb3VuZGVkUmVjdCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzIClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5Sb3VuZGVkUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgY2lyY2xlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3Q2lyY2xlID0gZnVuY3Rpb24gKHgsIHksIHJhZGl1cylcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5DaXJjbGUoeCx5LCByYWRpdXMpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhbiBlbGxpcHNlLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIGhhbGYgd2lkdGggb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd0VsbGlwc2UgPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5FbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIHBvbHlnb24gdXNpbmcgdGhlIGdpdmVuIHBhdGguXG4gKlxuICogQHBhcmFtIHBhdGgge251bWJlcltdfFBJWEkuUG9pbnRbXX0gVGhlIHBhdGggZGF0YSB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgcG9seWdvbi5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3UG9seWdvbiA9IGZ1bmN0aW9uIChwYXRoKVxue1xuICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGFzc2lnbm1lbnQgZGVvcHRcbiAgICAvLyBzZWUgc2VjdGlvbiAzLjE6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgIHZhciBwb2ludHMgPSBwYXRoO1xuXG4gICAgdmFyIGNsb3NlZCA9IHRydWU7XG5cbiAgICBpZiAocG9pbnRzIGluc3RhbmNlb2YgbWF0aC5Qb2x5Z29uKVxuICAgIHtcbiAgICAgICAgY2xvc2VkID0gcG9pbnRzLmNsb3NlZDtcbiAgICAgICAgcG9pbnRzID0gcG9pbnRzLnBvaW50cztcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBwb2ludHNbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKHBvaW50cyk7XG4gICAgc2hhcGUuY2xvc2VkID0gY2xvc2VkO1xuXG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZ3JhcGhpY3MgdGhhdCB3ZXJlIGRyYXduIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LCBhbmQgcmVzZXRzIGZpbGwgYW5kIGxpbmUgc3R5bGUgc2V0dGluZ3MuXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmxpbmVXaWR0aCA9IDA7XG4gICAgdGhpcy5maWxsaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmNsZWFyRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gW107XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGdlb21ldHJ5IGlzIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNob3VsZCBiZSBvbmUgb2YgdGhlIHNjYWxlTW9kZSBjb25zdHNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBncmFwaGljcyBvYmplY3RcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVzb2x1dGlvbiwgc2NhbGVNb2RlKVxue1xuXG4gICAgcmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGggKiByZXNvbHV0aW9uLCBib3VuZHMuaGVpZ2h0ICogcmVzb2x1dGlvbik7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXNCdWZmZXIuY29udGV4dC5zY2FsZShyZXNvbHV0aW9uLCByZXNvbHV0aW9uKTtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIGNhbnZhc0J1ZmZlci5jb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcblxuICAgIGlmICh0aGlzLmdsRGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5nbERpcnR5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5yZW5kZXIodGhpcyk7XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5pc01hc2sgPT09IHRydWUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHRpbnQgaGFzIGNoYW5nZWQsIHNldCB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIGRpcnR5LlxuICAgIGlmICh0aGlzLl9wcmV2VGludCAhPT0gdGhpcy50aW50KSB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIHRoaXMgY29kZSBtYXkgc3RpbGwgYmUgbmVlZGVkIHNvIGxlYXZpbmcgZm9yIG5vdy4uXG4gICAgLy9cbiAgICAvKlxuICAgIGlmICh0aGlzLl9jYWNoZUFzQml0bWFwKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuZGlydHkgfHwgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVDYWNoZWRTcHJpdGUoKTtcblxuICAgICAgICAgICAgLy8gd2Ugd2lsbCBhbHNvIG5lZWQgdG8gdXBkYXRlIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUoKTtcblxuICAgICAgICAgICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFscGhhID0gdGhpcy5hbHBoYTtcblxuICAgICAgICBTcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMuY2FsbCh0aGlzLl9jYWNoZWRTcHJpdGUsIHJlbmRlcmVyKTtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgICovXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY29udGV4dCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYm91bmRzIG9mIHRoZSBncmFwaGljIHNoYXBlIGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IFRoZSB3b3JsZCB0cmFuc2Zvcm0gbWF0cml4IHRvIHVzZSwgZGVmYXVsdHMgdG8gdGhpc1xuICogIG9iamVjdCdzIHdvcmxkVHJhbnNmb3JtLlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICAvLyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBpdGVtIGlzIGEgbWFzayFcbiAgICAgICAgaWYgKCF0aGlzLnJlbmRlcmFibGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJvdW5kc0RpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsQm91bmRzKCk7XG5cbiAgICAgICAgICAgIHRoaXMuZ2xEaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYm91bmRzRGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9sb2NhbEJvdW5kcztcblxuICAgICAgICB2YXIgdzAgPSBib3VuZHMueDtcbiAgICAgICAgdmFyIHcxID0gYm91bmRzLndpZHRoICsgYm91bmRzLng7XG5cbiAgICAgICAgdmFyIGgwID0gYm91bmRzLnk7XG4gICAgICAgIHZhciBoMSA9IGJvdW5kcy5oZWlnaHQgKyBib3VuZHMueTtcblxuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkxID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAgICAgdmFyIHgyID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4MyA9IGEgKiB3MCArIGMgKiBoMCArIHR4O1xuICAgICAgICB2YXIgeTMgPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgICAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5NCA9ICBkICogaDAgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgbWF4WCA9IHgxO1xuICAgICAgICB2YXIgbWF4WSA9IHkxO1xuXG4gICAgICAgIHZhciBtaW5YID0geDE7XG4gICAgICAgIHZhciBtaW5ZID0geTE7XG5cbiAgICAgICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICAgICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICAgICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MiA+IG1heFggPyB4MiA6IG1heFg7XG4gICAgICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICAgICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgICAgICB0aGlzLl9ib3VuZHMueCA9IG1pblg7XG4gICAgICAgIHRoaXMuX2JvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy55ID0gbWluWTtcbiAgICAgICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSB0aGlzLl9ib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBncmFwaGljcyBvYmplY3RcbipcbiogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4qL1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKVxue1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvaW50LCAgdGVtcFBvaW50KTtcblxuICAgIHZhciBncmFwaGljc0RhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKCFkYXRhLmZpbGwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gb25seSBkZWFsIHdpdGggZmlsbHMuLlxuICAgICAgICBpZiAoZGF0YS5zaGFwZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCBkYXRhLnNoYXBlLmNvbnRhaW5zKCB0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkgKSApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAqXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcblxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICBpZiAodGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdmFyIHNoYXBlLCBwb2ludHMsIHgsIHksIHcsIGg7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmdyYXBoaWNzRGF0YVtpXTtcbiAgICAgICAgICAgIHZhciB0eXBlID0gZGF0YS50eXBlO1xuICAgICAgICAgICAgdmFyIGxpbmVXaWR0aCA9IGRhdGEubGluZVdpZHRoO1xuICAgICAgICAgICAgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QgfHwgdHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLnggLSBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueSAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS53aWR0aCArIGxpbmVXaWR0aDtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLnJhZGl1cyArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLng7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLmhlaWdodCArIGxpbmVXaWR0aC8yO1xuXG4gICAgICAgICAgICAgICAgbWluWCA9IHggLSB3IDwgbWluWCA/IHggLSB3IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgLSBoIDwgbWluWSA/IHkgLSBoIDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFBPTFlcbiAgICAgICAgICAgICAgICBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBvaW50cy5sZW5ndGg7IGogKz0gMilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHggPSBwb2ludHNbal07XG4gICAgICAgICAgICAgICAgICAgIHkgPSBwb2ludHNbaisxXTtcblxuICAgICAgICAgICAgICAgICAgICBtaW5YID0geC1saW5lV2lkdGggPCBtaW5YID8geC1saW5lV2lkdGggOiBtaW5YO1xuICAgICAgICAgICAgICAgICAgICBtYXhYID0geCtsaW5lV2lkdGggPiBtYXhYID8geCtsaW5lV2lkdGggOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblkgPSB5LWxpbmVXaWR0aCA8IG1pblkgPyB5LWxpbmVXaWR0aCA6IG1pblk7XG4gICAgICAgICAgICAgICAgICAgIG1heFkgPSB5K2xpbmVXaWR0aCA+IG1heFkgPyB5K2xpbmVXaWR0aCA6IG1heFk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIG1pblggPSAwO1xuICAgICAgICBtYXhYID0gMDtcbiAgICAgICAgbWluWSA9IDA7XG4gICAgICAgIG1heFkgPSAwO1xuICAgIH1cblxuICAgIHZhciBwYWRkaW5nID0gdGhpcy5ib3VuZHNQYWRkaW5nO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueCA9IG1pblggLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLndpZHRoID0gKG1heFggLSBtaW5YKSArIHBhZGRpbmcgKiAyO1xuXG4gICAgdGhpcy5fbG9jYWxCb3VuZHMueSA9IG1pblkgLSBwYWRkaW5nO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzLmhlaWdodCA9IChtYXhZIC0gbWluWSkgKyBwYWRkaW5nICogMjtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjYWNoZWQgc3ByaXRlIHdoZW4gdGhlIHNwcml0ZSBoYXMgY2FjaGVBc0JpdG1hcCA9IHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIGlmICghdGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgdmFyIGNhbnZhc0J1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcbiAgICAgICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzQnVmZmVyLmNhbnZhcyk7XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlciA9IGNhbnZhc0J1ZmZlcjtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLnJlc2l6ZShib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIC8vIGxldmVyYWdlIHRoZSBhbmNob3IgdG8gYWNjb3VudCBmb3IgdGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudFxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQuc2F2ZSgpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC50cmFuc2xhdGUoLWJvdW5kcy54LC1ib3VuZHMueSk7XG5cbiAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBhbHBoYSBvZiB0aGUgZ3JhcGhpY3MgdG8gMSBmb3IgdGhlIHJlbmRlci4uXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIG5vdyByZW5kZXIgdGhlIGdyYXBoaWMuLlxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dCk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xufTtcbiovXG4vKipcbiAqIFVwZGF0ZXMgdGV4dHVyZSBzaXplIGJhc2VkIG9uIGNhbnZhcyBzaXplXG4gKlxuICogQHByaXZhdGVcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS51cGRhdGVDYWNoZWRTcHJpdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgY2FjaGVkU3ByaXRlID0gdGhpcy5fY2FjaGVkU3ByaXRlO1xuICAgIHZhciB0ZXh0dXJlID0gY2FjaGVkU3ByaXRlLnRleHR1cmU7XG4gICAgdmFyIGNhbnZhcyA9IGNhY2hlZFNwcml0ZS5idWZmZXIuY2FudmFzO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG4gICAgdGV4dHVyZS5jcm9wLndpZHRoID0gdGV4dHVyZS5mcmFtZS53aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB0ZXh0dXJlLmNyb3AuaGVpZ2h0ID0gdGV4dHVyZS5mcmFtZS5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgY2FjaGVkU3ByaXRlLl93aWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICBjYWNoZWRTcHJpdGUuX2hlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIGRpcnR5IGJhc2UgdGV4dHVyZXNcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmRpcnR5KCk7XG59OyovXG5cbi8qKlxuICogRGVzdHJveXMgYSBwcmV2aW91cyBjYWNoZWQgc3ByaXRlLlxuICpcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95Q2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUudGV4dHVyZS5kZXN0cm95KHRydWUpO1xuXG4gICAgLy8gbGV0IHRoZSBnYyBjb2xsZWN0IHRoZSB1bnVzZWQgc3ByaXRlXG4gICAgLy8gVE9ETyBjb3VsZCBiZSBvYmplY3QgcG9vbGVkIVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG59OyovXG5cbi8qKlxuICogRHJhd3MgdGhlIGdpdmVuIHNoYXBlIHRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LiBDYW4gYmUgYW55IG9mIENpcmNsZSwgUmVjdGFuZ2xlLCBFbGxpcHNlLCBMaW5lIG9yIFBvbHlnb24uXG4gKlxuICogQHBhcmFtIHNoYXBlIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc0RhdGF9IFRoZSBnZW5lcmF0ZWQgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdTaGFwZSA9IGZ1bmN0aW9uIChzaGFwZSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIC8vIGNoZWNrIGN1cnJlbnQgcGF0aCFcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YS5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuXG4gICAgdmFyIGRhdGEgPSBuZXcgR3JhcGhpY3NEYXRhKHRoaXMubGluZVdpZHRoLCB0aGlzLmxpbmVDb2xvciwgdGhpcy5saW5lQWxwaGEsIHRoaXMuZmlsbENvbG9yLCB0aGlzLmZpbGxBbHBoYSwgdGhpcy5maWxsaW5nLCBzaGFwZSk7XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YS5wdXNoKGRhdGEpO1xuXG4gICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAge1xuICAgICAgICBkYXRhLnNoYXBlLmNsb3NlZCA9IGRhdGEuc2hhcGUuY2xvc2VkIHx8IHRoaXMuZmlsbGluZztcbiAgICAgICAgdGhpcy5jdXJyZW50UGF0aCA9IGRhdGE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGRhdGE7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgLy8gZGVzdHJveSBlYWNoIG9mIHRoZSBHcmFwaGljc0RhdGEgb2JqZWN0c1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8vIGZvciBlYWNoIHdlYmdsIGRhdGEgZW50cnksIGRlc3Ryb3kgdGhlIFdlYkdMR3JhcGhpY3NEYXRhXG4gICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fd2ViZ2wpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl93ZWJnbFtpZF0uZGF0YS5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgdGhpcy5fd2ViZ2xbaWRdLmRhdGFbal0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG4gICAgdGhpcy5fd2ViZ2wgPSBudWxsO1xuICAgIHRoaXMuX2xvY2FsQm91bmRzID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEEgR3JhcGhpY3NEYXRhIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gbGluZVdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gbGluZUFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gKiBAcGFyYW0gZmlsbENvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGxBbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBmaWxsICAgICAge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICogQHBhcmFtIHNoYXBlICAgICB7Q2lyY2xlfFJlY3RhbmdsZXxFbGxpcHNlfExpbmV8UG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICovXG5mdW5jdGlvbiBHcmFwaGljc0RhdGEobGluZVdpZHRoLCBsaW5lQ29sb3IsIGxpbmVBbHBoYSwgZmlsbENvbG9yLCBmaWxsQWxwaGEsIGZpbGwsIHNoYXBlKVxue1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gbGluZVdpZHRoO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQ29sb3IgPSBsaW5lQ29sb3I7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lQWxwaGEgPSBsaW5lQWxwaGE7XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLl9saW5lVGludCA9IGxpbmVDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxDb2xvciA9IGZpbGxDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLmZpbGxBbHBoYSA9IGZpbGxBbHBoYTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBjYWNoZWQgdGludCBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuX2ZpbGxUaW50ID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhcGUgaXMgZmlsbGVkIHdpdGggYSBjb2xvdXJcbiAgICAgKi9cbiAgICB0aGlzLmZpbGwgPSBmaWxsO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNpcmNsZXxQSVhJLlJlY3RhbmdsZXxQSVhJLkVsbGlwc2V8UElYSS5MaW5lfFBJWEkuUG9seWdvbn0gVGhlIHNoYXBlIG9iamVjdCB0byBkcmF3LlxuICAgICAqL1xuICAgIHRoaXMuc2hhcGUgPSBzaGFwZTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBUaGUgdHlwZSBvZiB0aGUgc2hhcGUsIHNlZSB0aGUgQ29uc3QuU2hhcGVzIGZpbGUgZm9yIGFsbCB0aGUgZXhpc3RpbmcgdHlwZXMsXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gc2hhcGUudHlwZTtcbn1cblxuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdyYXBoaWNzRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3NEYXRhO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3NEYXRhIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX1cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBHcmFwaGljc0RhdGEoXG4gICAgICAgIHRoaXMubGluZVdpZHRoLFxuICAgICAgICB0aGlzLmxpbmVDb2xvcixcbiAgICAgICAgdGhpcy5saW5lQWxwaGEsXG4gICAgICAgIHRoaXMuZmlsbENvbG9yLFxuICAgICAgICB0aGlzLmZpbGxBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsLFxuICAgICAgICB0aGlzLnNoYXBlXG4gICAgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIGRhdGEuXG4gKi9cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnNoYXBlID0gbnVsbDtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC9XZWJHTFJlbmRlcmVyJyksXG4gICAgV2ViR0xHcmFwaGljc0RhdGEgPSByZXF1aXJlKCcuL1dlYkdMR3JhcGhpY3NEYXRhJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuXG4gICAgLy8gc29tZSBkcmF3aW5nIGZ1bmN0aW9ucy4uXG4gICAgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi91dGlscy9idWlsZExpbmUnKTtcbiAgICBidWlsZFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUG9seScpO1xuICAgIGJ1aWxkQ29tcGxleFBvbHkgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkQ29tcGxleFBvbHknKTtcbiAgICBidWlsZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRSZWN0YW5nbGUnKTtcbiAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUm91bmRlZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkQ2lyY2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZENpcmNsZScpO1xuXG4gICAgZWFyY3V0ID0gcmVxdWlyZSgnZWFyY3V0Jyk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IFtdO1xuXG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgYSBwb2x5IGNhbiBjb250YWluIGJlZm9yZSBpdCBpcyByZW5kZXJlZCBhcyBhIGNvbXBsZXggcG9seWdvbiAodXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyKVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgPSAyMDA7XG59XG5cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc1JlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdncmFwaGljcycsIEdyYXBoaWNzUmVuZGVyZXIpO1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMuZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzLmdsKVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHJlbmRlcmVyLlxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YVBvb2wubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBudWxsO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuICAvLyAgY29uc29sZS5sb2coZ3JhcGhpY3MpXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5IHx8ICFncmFwaGljcy5fd2ViR0xbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljcyhncmFwaGljcyk7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIFRoaXMgIGNvdWxkIGJlIHNwZWVkZWQgdXAgZm9yIHN1cmUhXG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggZ3JhcGhpY3MuYmxlbmRNb2RlICk7XG5cbi8vICAgIHZhciBtYXRyaXggPSAgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0uY2xvbmUoKTtcbi8vICAgIHZhciBtYXRyaXggPSAgcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7XG4vLyAgICBtYXRyaXguYXBwZW5kKGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gd2ViR0wuZGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTC5kYXRhW2ldLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyBmaXggdGhpcyBvbmUhXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEgKiB3ZWJHTERhdGEuYWxwaGEpO1xuXG4gICAgICAgICAgICAvLyByZW5kZXIgcXVhZC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgcmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeCA9IGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLmxvY2F0aW9uKTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHVwZGF0ZVxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgLy8gZ2V0IHRoZSBjb250ZXh0cyBncmFwaGljcyBvYmplY3RcbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd2ViR0wgY29udGV4dCB0aW1lIHRvIGNyZWF0ZSBpdCFcbiAgICBpZiAoIXdlYkdMKVxuICAgIHtcbiAgICAgICAgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdID0ge2xhc3RJbmRleDowLCBkYXRhOltdLCBnbDpnbH07XG4gICAgfVxuXG4gICBcbiAgICAvLyBmbGFnIHRoZSBncmFwaGljcyBhcyBub3QgZGlydHkgYXMgd2UgYXJlIGFib3V0IHRvIHVwZGF0ZSBpdC4uLlxuICAgIGdyYXBoaWNzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB2YXIgaTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGNsZWFyZWQgdGhlIGdyYXBoaWNzIG9iamVjdCB3ZSB3aWxsIG5lZWQgdG8gY2xlYXIgZXZlcnkgb2JqZWN0XG4gICAgaWYgKGdyYXBoaWNzLmNsZWFyRGlydHkpXG4gICAge1xuICAgICAgICBncmFwaGljcy5jbGVhckRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuZCByZXR1cm4gYWxsIHRoZSB3ZWJHTERhdGFzIHRvIHRoZSBvYmplY3QgcG9vbCBzbyB0aGFuIGNhbiBiZSByZXVzZWQgbGF0ZXIgb25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBncmFwaGljc0RhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucHVzaCggZ3JhcGhpY3NEYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgYXJyYXkgYW5kIHJlc2V0IHRoZSBpbmRleC4uXG4gICAgICAgIHdlYkdMLmRhdGEgPSBbXTtcbiAgICAgICAgd2ViR0wubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBncmFwaGljcyBkYXRhcyBhbmQgY29uc3RydWN0IGVhY2ggb25lLi5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGEgY29tcGxleCBmaWxsIHRoZW4gdGhlIG5ldyBzdGVuY2lsIGJ1ZmZlciB0ZWNobmlxdWUgd2lsbCBiZSB1c2VkXG4gICAgLy8gb3RoZXIgd2lzZSBncmFwaGljcyBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIGludG8gYSBiYXRjaC4uXG4gICAgZm9yIChpID0gd2ViR0wubGFzdEluZGV4OyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBwb2ludHMgdGhlIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgICAgICAgICAgZGF0YS5wb2ludHMgPSBkYXRhLnNoYXBlLnBvaW50cy5zbGljZSgpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBwb2x5IGlmIHRoZSB2YWx1ZSBpcyB0cnVlIVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50c1swXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTJdIHx8IGRhdGEucG9pbnRzWzFdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKGRhdGEucG9pbnRzWzBdLCBkYXRhLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNQUtFIFNVUkUgV0UgSEFWRSBUSEUgQ09SUkVDVCBUWVBFLi5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA+PSA2KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA8IHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplICogMilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkRyYXdVc2luZ1NpbXBsZSA9IGJ1aWxkUG9seShkYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkRyYXdVc2luZ1NpbXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoID4gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuICAgICAgICAgICAgICAgIGJ1aWxkTGluZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMgfHwgZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZENpcmNsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCsrO1xuICAgIH1cblxuICAgIC8vIHVwbG9hZCBhbGwgdGhlIGRpcnR5IGRhdGEuLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5kaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhLnVwbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gd2ViR0wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSBUT0RPIEBBbHZpblxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5zd2l0Y2hNb2RlID0gZnVuY3Rpb24gKHdlYkdMLCB0eXBlKVxue1xuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICBpZiAoIXdlYkdMLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbd2ViR0wuZGF0YS5sZW5ndGgtMV07XG5cbiAgICAgICAgaWYgKCh3ZWJHTERhdGEucG9pbnRzLmxlbmd0aCA+IDMyMDAwMCkgfHwgd2ViR0xEYXRhLm1vZGUgIT09IHR5cGUgfHwgdHlwZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdlYkdMRGF0YS5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gd2ViR0xEYXRhO1xufTtcblxuIiwiLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyBXZWJHTCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gV2ViR0xHcmFwaGljc0RhdGEoZ2wpIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vVE9ETyBkb2VzIHRoaXMgbmVlZCB0byBiZSBzcGxpdCBiZWZvcmUgdXBsb2Rpbmc/P1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvbG9yIGNvbXBvbmVudHMgKHIsZyxiKVxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3IgPSBbMCwwLDBdOyAvLyBjb2xvciBzcGxpdCFcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBvaW50cyB0byBkcmF3XG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIHRvZG8gQGFsdmluXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubW9kZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGdyYXBoaWNzIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHZlcnRpY2VzIGFuZCB0aGUgaW5kaWNlc1xuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb2ludHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmluZGljZXMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4vLyAgICB0aGlzLmxhc3RJbmRleCA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5nbFBvaW50cyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5wb2ludHMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuYnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5nbFBvaW50cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5nbEluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuZ2xJbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLnBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBcbiAgICB0aGlzLmdsID0gbnVsbDtcblxuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoZ2wpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgZ2wsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgY2lyY2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byBkcmF3XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ2lyY2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIHZhciBjaXJjbGVEYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gY2lyY2xlRGF0YS54O1xuICAgIHZhciB5ID0gY2lyY2xlRGF0YS55O1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuXG4gICAgLy8gVE9ETyAtIGJpdCBoYWNreT8/XG4gICAgaWYgKGdyYXBoaWNzRGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB0b3RhbFNlZ3MgPSBNYXRoLmZsb29yKDMwICogTWF0aC5zcXJ0KGNpcmNsZURhdGEucmFkaXVzKSkgfHwgTWF0aC5mbG9vcigxNSAqIE1hdGguc3FydChjaXJjbGVEYXRhLndpZHRoICsgY2lyY2xlRGF0YS5oZWlnaHQpKTtcbiAgICB2YXIgc2VnID0gKE1hdGguUEkgKiAyKSAvIHRvdGFsU2VncyA7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcyk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDEgOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCx5LCByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKyssIHZlY1BvcysrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MtMSk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDaXJjbGU7IiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuICAgIFxuXG5cbi8qKlxuICogQnVpbGRzIGEgY29tcGxleCBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRDb21wbGV4UG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvL1RPRE8gLSBubyBuZWVkIHRvIGNvcHkgdGhpcyBhcyBpdCBnZXRzIHR1cm5lZCBpbnRvIGEgRkxvYXQzMkFycmF5IGFueXdheXMuLlxuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzLnNsaWNlKCk7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDYpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgd2ViR0xEYXRhLnBvaW50cyA9IHBvaW50cztcbiAgICB3ZWJHTERhdGEuYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHdlYkdMRGF0YS5jb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG5cbiAgICAvLyBjYWxjbGF0ZSB0aGUgYm91bmRzLi5cbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIHZhciB4LHk7XG5cbiAgICAvLyBnZXQgc2l6ZS4uXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKz0yKVxuICAgIHtcbiAgICAgICAgeCA9IHBvaW50c1tpXTtcbiAgICAgICAgeSA9IHBvaW50c1tpKzFdO1xuXG4gICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICBtYXhYID0geCA+IG1heFggPyB4IDogbWF4WDtcblxuICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcbiAgICAgICAgbWF4WSA9IHkgPiBtYXhZID8geSA6IG1heFk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgcXVhZCB0byB0aGUgZW5kIGNvcyB0aGVyZSBpcyBubyBwb2ludCBtYWtpbmcgYW5vdGhlciBidWZmZXIhXG4gICAgcG9pbnRzLnB1c2gobWluWCwgbWluWSxcbiAgICAgICAgICAgICAgICBtYXhYLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1heFksXG4gICAgICAgICAgICAgICAgbWluWCwgbWF4WSk7XG5cbiAgICAvLyBwdXNoIGEgcXVhZCBvbnRvIHRoZSBlbmQuLlxuXG4gICAgLy9UT0RPIC0gdGhpcyBhaW50IG5lZWRlZCFcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKCBpICk7XG4gICAgfVxuXG59O1xuXG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENvbXBsZXhQb2x5OyIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBsaW5lIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRMaW5lID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIFRPRE8gT1BUSU1JU0UhXG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGlmIHRoZSBsaW5lIHdpZHRoIGlzIGFuIG9kZCBudW1iZXIgYWRkIDAuNSB0byBhbGlnbiB0byBhIHdob2xlIHBpeGVsXG4gICAgLy8gY29tbWVudGluZyB0aGlzIG91dCBmaXhlcyAjNzExIGFuZCAjMTYyMFxuICAgIC8vIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoJTIpXG4gICAgLy8ge1xuICAgIC8vICAgICBmb3IgKGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKVxuICAgIC8vICAgICB7XG4gICAgLy8gICAgICAgICBwb2ludHNbaV0gKz0gMC41O1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciBmaXJzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgIHZhciBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgIC8vIGlmIHRoZSBmaXJzdCBwb2ludCBpcyB0aGUgbGFzdCBwb2ludCAtIGdvbm5hIGhhdmUgaXNzdWVzIDopXG4gICAgaWYgKGZpcnN0UG9pbnQueCA9PT0gbGFzdFBvaW50LnggJiYgZmlyc3RQb2ludC55ID09PSBsYXN0UG9pbnQueSlcbiAgICB7XG4gICAgICAgIC8vIG5lZWQgdG8gY2xvbmUgYXMgd2UgYXJlIGdvaW5nIHRvIHNsaWdodGx5IG1vZGlmeSB0aGUgc2hhcGUuLlxuICAgICAgICBwb2ludHMgPSBwb2ludHMuc2xpY2UoKTtcblxuICAgICAgICBwb2ludHMucG9wKCk7XG4gICAgICAgIHBvaW50cy5wb3AoKTtcblxuICAgICAgICBsYXN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdKTtcblxuICAgICAgICB2YXIgbWlkUG9pbnRYID0gbGFzdFBvaW50LnggKyAoZmlyc3RQb2ludC54IC0gbGFzdFBvaW50LngpICowLjU7XG4gICAgICAgIHZhciBtaWRQb2ludFkgPSBsYXN0UG9pbnQueSArIChmaXJzdFBvaW50LnkgLSBsYXN0UG9pbnQueSkgKjAuNTtcblxuICAgICAgICBwb2ludHMudW5zaGlmdChtaWRQb2ludFgsIG1pZFBvaW50WSk7XG4gICAgICAgIHBvaW50cy5wdXNoKG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICB9XG5cbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgIHZhciBpbmRleENvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICB2YXIgaW5kZXhTdGFydCA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgLy8gRFJBVyB0aGUgTGluZVxuICAgIHZhciB3aWR0aCA9IGdyYXBoaWNzRGF0YS5saW5lV2lkdGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmxpbmVDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmxpbmVBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciBweCwgcHksIHAxeCwgcDF5LCBwMngsIHAyeSwgcDN4LCBwM3k7XG4gICAgdmFyIHBlcnB4LCBwZXJweSwgcGVycDJ4LCBwZXJwMnksIHBlcnAzeCwgcGVycDN5O1xuICAgIHZhciBhMSwgYjEsIGMxLCBhMiwgYjIsIGMyO1xuICAgIHZhciBkZW5vbSwgcGRpc3QsIGRpc3Q7XG5cbiAgICBwMXggPSBwb2ludHNbMF07XG4gICAgcDF5ID0gcG9pbnRzWzFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWzJdO1xuICAgIHAyeSA9IHBvaW50c1szXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gIHAxeCAtIHAyeDtcblxuICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG5cbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAvLyBzdGFydFxuICAgIHZlcnRzLnB1c2gocDF4IC0gcGVycHggLCBwMXkgLSBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAxeCArIHBlcnB4ICwgcDF5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgZm9yIChpID0gMTsgaSA8IGxlbmd0aC0xOyBpKyspXG4gICAge1xuICAgICAgICBwMXggPSBwb2ludHNbKGktMSkqMl07XG4gICAgICAgIHAxeSA9IHBvaW50c1soaS0xKSoyICsgMV07XG5cbiAgICAgICAgcDJ4ID0gcG9pbnRzWyhpKSoyXTtcbiAgICAgICAgcDJ5ID0gcG9pbnRzWyhpKSoyICsgMV07XG5cbiAgICAgICAgcDN4ID0gcG9pbnRzWyhpKzEpKjJdO1xuICAgICAgICBwM3kgPSBwb2ludHNbKGkrMSkqMiArIDFdO1xuXG4gICAgICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgICAgICBwZXJweSA9IHAxeCAtIHAyeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgICAgICBwZXJweCAvPSBkaXN0O1xuICAgICAgICBwZXJweSAvPSBkaXN0O1xuICAgICAgICBwZXJweCAqPSB3aWR0aDtcbiAgICAgICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICAgICAgcGVycDJ4ID0gLShwMnkgLSBwM3kpO1xuICAgICAgICBwZXJwMnkgPSBwMnggLSBwM3g7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwMngqcGVycDJ4ICsgcGVycDJ5KnBlcnAyeSk7XG4gICAgICAgIHBlcnAyeCAvPSBkaXN0O1xuICAgICAgICBwZXJwMnkgLz0gZGlzdDtcbiAgICAgICAgcGVycDJ4ICo9IHdpZHRoO1xuICAgICAgICBwZXJwMnkgKj0gd2lkdGg7XG5cbiAgICAgICAgYTEgPSAoLXBlcnB5ICsgcDF5KSAtICgtcGVycHkgKyBwMnkpO1xuICAgICAgICBiMSA9ICgtcGVycHggKyBwMngpIC0gKC1wZXJweCArIHAxeCk7XG4gICAgICAgIGMxID0gKC1wZXJweCArIHAxeCkgKiAoLXBlcnB5ICsgcDJ5KSAtICgtcGVycHggKyBwMngpICogKC1wZXJweSArIHAxeSk7XG4gICAgICAgIGEyID0gKC1wZXJwMnkgKyBwM3kpIC0gKC1wZXJwMnkgKyBwMnkpO1xuICAgICAgICBiMiA9ICgtcGVycDJ4ICsgcDJ4KSAtICgtcGVycDJ4ICsgcDN4KTtcbiAgICAgICAgYzIgPSAoLXBlcnAyeCArIHAzeCkgKiAoLXBlcnAyeSArIHAyeSkgLSAoLXBlcnAyeCArIHAyeCkgKiAoLXBlcnAyeSArIHAzeSk7XG5cbiAgICAgICAgZGVub20gPSBhMSpiMiAtIGEyKmIxO1xuXG4gICAgICAgIGlmIChNYXRoLmFicyhkZW5vbSkgPCAwLjEgKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIGRlbm9tKz0xMC4xO1xuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJweCAsIHAyeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBweCA9IChiMSpjMiAtIGIyKmMxKS9kZW5vbTtcbiAgICAgICAgcHkgPSAoYTIqYzEgLSBhMSpjMikvZGVub207XG5cblxuICAgICAgICBwZGlzdCA9IChweCAtcDJ4KSAqIChweCAtcDJ4KSArIChweSAtcDJ5KSAqIChweSAtcDJ5KTtcblxuXG4gICAgICAgIGlmIChwZGlzdCA+IDE0MCAqIDE0MClcbiAgICAgICAge1xuICAgICAgICAgICAgcGVycDN4ID0gcGVycHggLSBwZXJwMng7XG4gICAgICAgICAgICBwZXJwM3kgPSBwZXJweSAtIHBlcnAyeTtcblxuICAgICAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJwM3gqcGVycDN4ICsgcGVycDN5KnBlcnAzeSk7XG4gICAgICAgICAgICBwZXJwM3ggLz0gZGlzdDtcbiAgICAgICAgICAgIHBlcnAzeSAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN4ICo9IHdpZHRoO1xuICAgICAgICAgICAgcGVycDN5ICo9IHdpZHRoO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycDN4LCBwMnkgK3BlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJwM3gsIHAyeSAtcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRleENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocHggLCBweSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSAocHgtcDJ4KSwgcDJ5IC0gKHB5IC0gcDJ5KSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHAxeCA9IHBvaW50c1sobGVuZ3RoLTIpKjJdO1xuICAgIHAxeSA9IHBvaW50c1sobGVuZ3RoLTIpKjIgKyAxXTtcblxuICAgIHAyeCA9IHBvaW50c1sobGVuZ3RoLTEpKjJdO1xuICAgIHAyeSA9IHBvaW50c1sobGVuZ3RoLTEpKjIgKyAxXTtcblxuICAgIHBlcnB4ID0gLShwMXkgLSBwMnkpO1xuICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcbiAgICBwZXJweCAvPSBkaXN0O1xuICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgcGVycHggKj0gd2lkdGg7XG4gICAgcGVycHkgKj0gd2lkdGg7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgdmVydHMucHVzaChwMnggKyBwZXJweCAsIHAyeSArIHBlcnB5KTtcbiAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBpbmRleENvdW50OyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydCsrKTtcbiAgICB9XG5cbiAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydC0xKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRMaW5lOyIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcG9seWdvbiB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuV2ViR0xHcmFwaGljc0RhdGF9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUG9seSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuXG4gICAgLy8gc29ydCBjb2xvclxuICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcbiAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocG9pbnRzLCBudWxsLCAyKTtcblxuICAgIGlmICghdHJpYW5nbGVzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgdmVydFBvcyA9IHZlcnRzLmxlbmd0aCAvIDY7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICt2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVydFBvcyk7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmVydHMucHVzaChwb2ludHNbaSAqIDJdLCBwb2ludHNbaSAqIDIgKyAxXSxcbiAgICAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRQb2x5O1xuIiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHJlY3RhbmdsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIC0tLSAvL1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIC8vXG4gICAgdmFyIHJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcmVjdERhdGEueDtcbiAgICB2YXIgeSA9IHJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJlY3REYXRhLmhlaWdodDtcblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgLy8gc3RhcnRcbiAgICAgICAgdmVydHMucHVzaCh4LCB5KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAvLyBpbnNlcnQgMiBkZWFkIHRyaWFuZ2xlcy4uXG4gICAgICAgIGluZGljZXMucHVzaCh2ZXJ0UG9zLCB2ZXJ0UG9zLCB2ZXJ0UG9zKzEsIHZlcnRQb3MrMiwgdmVydFBvcyszLCB2ZXJ0UG9zKzMpO1xuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSBbeCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSxcbiAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHkgKyBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICB4LCB5XTtcblxuXG4gICAgICAgIGJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJlY3RhbmdsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG4gICAgXG4vKipcbiAqIEJ1aWxkcyBhIHJvdW5kZWQgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG5idWlsZFJvdW5kZWRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIHJyZWN0RGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IHJyZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcnJlY3REYXRhLnk7XG4gICAgdmFyIHdpZHRoID0gcnJlY3REYXRhLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSBycmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgdmFyIHJhZGl1cyA9IHJyZWN0RGF0YS5yYWRpdXM7XG5cbiAgICB2YXIgcmVjUG9pbnRzID0gW107XG4gICAgcmVjUG9pbnRzLnB1c2goeCwgeSArIHJhZGl1cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4LCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCB4LCB5ICsgaGVpZ2h0LCB4ICsgcmFkaXVzLCB5ICsgaGVpZ2h0LCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoIC0gcmFkaXVzLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCAtIHJhZGl1cywgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyB3aWR0aCwgeSArIHJhZGl1cywgeCArIHdpZHRoLCB5LCB4ICsgd2lkdGggLSByYWRpdXMsIHksIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgcmFkaXVzLCB5LCB4LCB5LCB4LCB5ICsgcmFkaXVzICsgMC4wMDAwMDAwMDAxLCByZWNQb2ludHMpO1xuXG4gICAgLy8gdGhpcyB0aW55IG51bWJlciBkZWFscyB3aXRoIHRoZSBpc3N1ZSB0aGF0IG9jY3VycyB3aGVuIHBvaW50cyBvdmVybGFwIGFuZCBlYXJjdXQgZmFpbHMgdG8gdHJpYW5ndWxhdGUgdGhlIGl0ZW0uXG4gICAgLy8gVE9ETyAtIGZpeCB0aGlzIHByb3Blcmx5LCB0aGlzIGlzIG5vdCB2ZXJ5IGVsZWdhbnQuLiBidXQgaXQgd29ya3MgZm9yIG5vdy5cblxuICAgIGlmIChncmFwaGljc0RhdGEuZmlsbClcbiAgICB7XG4gICAgICAgIHZhciBjb2xvciA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3NEYXRhLmZpbGxDb2xvcik7XG4gICAgICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG5cbiAgICAgICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgICAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgICAgIHZhciBiID0gY29sb3JbMl0gKiBhbHBoYTtcblxuICAgICAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciB2ZWNQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICB2YXIgdHJpYW5nbGVzID0gZWFyY3V0KHJlY1BvaW50cywgbnVsbCwgMik7XG5cbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSs9MylcbiAgICAgICAge1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVjUG9zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZWNQb2ludHMubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gocmVjUG9pbnRzW2ldLCByZWNQb2ludHNbKytpXSwgciwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHJlY1BvaW50cztcblxuICAgICAgICB0aGlzLmJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlLiAoaGVscGVyIGZ1bmN0aW9uLi4pXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg1MDk3L2hvdy1kby1pLWltcGxlbWVudC1hLWJlemllci1jdXJ2ZS1pbi1jXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBmcm9tWCB7bnVtYmVyfSBPcmlnaW4gcG9pbnQgeFxuICogQHBhcmFtIGZyb21ZIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcGFyYW0gW291dF0ge251bWJlcltdfSBUaGUgb3V0cHV0IGFycmF5IHRvIGFkZCBwb2ludHMgaW50by4gSWYgbm90IHBhc3NlZCwgYSBuZXcgYXJyYXkgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm4ge251bWJlcltdfSBhbiBhcnJheSBvZiBwb2ludHNcbiAqL1xucXVhZHJhdGljQmV6aWVyQ3VydmUgPSBmdW5jdGlvbiAoZnJvbVgsIGZyb21ZLCBjcFgsIGNwWSwgdG9YLCB0b1ksIG91dClcbntcbiAgICB2YXIgeGEsXG4gICAgICAgIHlhLFxuICAgICAgICB4YixcbiAgICAgICAgeWIsXG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gb3V0IHx8IFtdO1xuXG4gICAgZnVuY3Rpb24gZ2V0UHQobjEgLCBuMiwgcGVyYykge1xuICAgICAgICB2YXIgZGlmZiA9IG4yIC0gbjE7XG5cbiAgICAgICAgcmV0dXJuIG4xICsgKCBkaWZmICogcGVyYyApO1xuICAgIH1cblxuICAgIHZhciBqID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBuOyBpKysgKSB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICAvLyBUaGUgR3JlZW4gTGluZVxuICAgICAgICB4YSA9IGdldFB0KCBmcm9tWCAsIGNwWCAsIGogKTtcbiAgICAgICAgeWEgPSBnZXRQdCggZnJvbVkgLCBjcFkgLCBqICk7XG4gICAgICAgIHhiID0gZ2V0UHQoIGNwWCAsIHRvWCAsIGogKTtcbiAgICAgICAgeWIgPSBnZXRQdCggY3BZICwgdG9ZICwgaiApO1xuXG4gICAgICAgIC8vIFRoZSBCbGFjayBEb3RcbiAgICAgICAgeCA9IGdldFB0KCB4YSAsIHhiICwgaiApO1xuICAgICAgICB5ID0gZ2V0UHQoIHlhICwgeWIgLCBqICk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goeCwgeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50cztcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFJvdW5kZWRSZWN0YW5nbGU7IiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgY29yZSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWElcbiAqL1xuLy8gZXhwb3J0IGNvcmUgYW5kIGNvbnN0LiBXZSBhc3NpZ24gY29yZSB0byBjb25zdCBzbyB0aGF0IHRoZSBub24tcmVmZXJlbmNlIHR5cGVzIGluIGNvbnN0IHJlbWFpbiBpbi10YWN0XG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihyZXF1aXJlKCcuL2NvbnN0JyksIHJlcXVpcmUoJy4vbWF0aCcpLCB7XG4gICAgLy8gdXRpbHNcbiAgICB1dGlsczogcmVxdWlyZSgnLi91dGlscycpLFxuICAgIHRpY2tlcjogcmVxdWlyZSgnLi90aWNrZXInKSxcblxuICAgIC8vIGRpc3BsYXlcbiAgICBEaXNwbGF5T2JqZWN0OiAgICAgICAgICByZXF1aXJlKCcuL2Rpc3BsYXkvRGlzcGxheU9iamVjdCcpLFxuICAgIENvbnRhaW5lcjogICAgICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9Db250YWluZXInKSxcblxuICAgIC8vIHNwcml0ZXNcbiAgICBTcHJpdGU6ICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgUGFydGljbGVDb250YWluZXI6ICAgICAgcmVxdWlyZSgnLi9wYXJ0aWNsZXMvUGFydGljbGVDb250YWluZXInKSxcbiAgICBTcHJpdGVSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXInKSxcbiAgICBQYXJ0aWNsZVJlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVJlbmRlcmVyJyksXG5cbiAgICAvLyB0ZXh0XG4gICAgVGV4dDogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0L1RleHQnKSxcblxuICAgIC8vIHByaW1pdGl2ZXNcbiAgICBHcmFwaGljczogICAgICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzJyksXG4gICAgR3JhcGhpY3NEYXRhOiAgICAgICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljc0RhdGEnKSxcbiAgICBHcmFwaGljc1JlbmRlcmVyOiAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHR1cmVzXG4gICAgVGV4dHVyZTogICAgICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9UZXh0dXJlJyksXG4gICAgQmFzZVRleHR1cmU6ICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9CYXNlVGV4dHVyZScpLFxuICAgIFJlbmRlclRleHR1cmU6ICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEJhc2VSZW5kZXJUZXh0dXJlOiAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvQmFzZVJlbmRlclRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlOiAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzOiAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmVVdnMnKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIGNhbnZhc1xuICAgIENhbnZhc1JlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIENhbnZhc0J1ZmZlcjogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIHdlYmdsXG4gICAgV2ViR0xSZW5kZXJlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyksXG4gICAgU2hhZGVyTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIFNoYWRlcjogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyJyksXG4gICAgT2JqZWN0UmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBSZW5kZXJUYXJnZXQ6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcblxuICAgIC8vIGZpbHRlcnMgLSB3ZWJnbFxuICAgIEFic3RyYWN0RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBGWEFBRmlsdGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBTcHJpdGVNYXNrRmlsdGVyOiAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKSxcblxuICAgIGdsQ29yZTogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncGl4aS1nbC1jb3JlJyksXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoaWNoIHJlbmRlcmVyIHlvdSBzaG91bGQgYmUgdXNpbmcuXG4gICAgICogV2ViR0wgaXMgdGhlIHByZWZlcnJlZCByZW5kZXJlciBhcyBpdCBpcyBhIGxvdCBmYXN0ZXIuIElmIHdlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnlcbiAgICAgKiB0aGUgYnJvd3NlciB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBjYW52YXMgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHBhcmFtIHdpZHRoPTgwMCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIGhlaWdodD02MDAge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWYgeW91XG4gICAgICogICAgICBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0XG4gICAgICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyLCByZXRpbmEgd291bGQgYmUgMlxuICAgICAqIEBwYXJhbSBbbm9XZWJHTD1mYWxzZV0ge2Jvb2xlYW59IHByZXZlbnRzIHNlbGVjdGlvbiBvZiBXZWJHTCByZW5kZXJlciwgZXZlbiBpZiBzdWNoIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyZXJ8Q2FudmFzUmVuZGVyZXJ9IFJldHVybnMgV2ViR0wgcmVuZGVyZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgQ2FudmFzUmVuZGVyZXJcbiAgICAgKi9cbiAgICBhdXRvRGV0ZWN0UmVuZGVyZXI6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCBub1dlYkdMKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB3aWR0aCB8fCA4MDA7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAgICAgaWYgKCFub1dlYkdMICYmIGNvcmUudXRpbHMuaXNXZWJHTFN1cHBvcnRlZCgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGNvcmUuV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgY29yZS5DYW52YXNSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB9XG59KTtcbiIsIi8vIEB0b2RvIC0gaWdub3JlIHRoZSB0b28gbWFueSBwYXJhbWV0ZXJzIHdhcm5pbmcgZm9yIG5vd1xuLy8gc2hvdWxkIGVpdGhlciBmaXggaXQgb3IgY2hhbmdlIHRoZSBqc2hpbnQgY29uZmlnXG4vLyBqc2hpbnQgLVcwNzJcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xuXG4vKipcbiAqIFRoZSBwaXhpIE1hdHJpeCBjbGFzcyBhcyBhbiBvYmplY3QsIHdoaWNoIG1ha2VzIGl0IGEgbG90IGZhc3RlcixcbiAqIGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBpdCA6XG4gKiB8IGEgfCBiIHwgdHh8XG4gKiB8IGMgfCBkIHwgdHl8XG4gKiB8IDAgfCAwIHwgMSB8XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBNYXRyaXgoKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5iID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5jID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHkgPSAwO1xufVxuXG5NYXRyaXgucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWF0cml4O1xubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1hdHJpeCBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5LiBUaGUgRWxlbWVudCB0byBNYXRyaXggbWFwcGluZyBvcmRlciBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIGEgPSBhcnJheVswXVxuICogYiA9IGFycmF5WzFdXG4gKiBjID0gYXJyYXlbM11cbiAqIGQgPSBhcnJheVs0XVxuICogdHggPSBhcnJheVsyXVxuICogdHkgPSBhcnJheVs1XVxuICpcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119IFRoZSBhcnJheSB0aGF0IHRoZSBtYXRyaXggd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbS5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpXG57XG4gICAgdGhpcy5hID0gYXJyYXlbMF07XG4gICAgdGhpcy5iID0gYXJyYXlbMV07XG4gICAgdGhpcy5jID0gYXJyYXlbM107XG4gICAgdGhpcy5kID0gYXJyYXlbNF07XG4gICAgdGhpcy50eCA9IGFycmF5WzJdO1xuICAgIHRoaXMudHkgPSBhcnJheVs1XTtcbn07XG5cblxuLyoqXG4gKiBzZXRzIHRoZSBtYXRyaXggcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkXG4gKiBAcGFyYW0ge251bWJlcn0gdHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXG57XG4gICAgdGhpcy5hID0gYTtcbiAgICB0aGlzLmIgPSBiO1xuICAgIHRoaXMuYyA9IGM7XG4gICAgdGhpcy5kID0gZDtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy50eSA9IHR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmcm9tIHRoZSBjdXJyZW50IE1hdHJpeCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9zZSB7Ym9vbGVhbn0gV2hldGhlciB3ZSBuZWVkIHRvIHRyYW5zcG9zZSB0aGUgbWF0cml4IG9yIG5vdFxuICogQHBhcmFtIFtvdXRdIHtBcnJheX0gSWYgcHJvdmlkZWQgdGhlIGFycmF5IHdpbGwgYmUgYXNzaWduZWQgdG8gb3V0XG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gdGhlIG5ld2x5IGNyZWF0ZWQgYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAodHJhbnNwb3NlLCBvdXQpXG57XG4gICAgaWYgKCF0aGlzLmFycmF5KVxuICAgIHtcbiAgICAgICAgdGhpcy5hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gb3V0IHx8IHRoaXMuYXJyYXk7XG5cbiAgICBpZiAodHJhbnNwb3NlKVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVsyXSA9IDA7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSAwO1xuICAgICAgICBhcnJheVs2XSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzddID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzJdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzZdID0gMDtcbiAgICAgICAgYXJyYXlbN10gPSAwO1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZSB0byB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gcmVuZGVyaW5nKVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5hICogeCArIHRoaXMuYyAqIHkgKyB0aGlzLnR4O1xuICAgIG5ld1Bvcy55ID0gdGhpcy5iICogeCArIHRoaXMuZCAqIHkgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGludmVyc2Ugb2YgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UgdG8gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIGlucHV0KVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHlJbnZlcnNlID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciBpZCA9IDEgLyAodGhpcy5hICogdGhpcy5kICsgdGhpcy5jICogLXRoaXMuYik7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuZCAqIGlkICogeCArIC10aGlzLmMgKiBpZCAqIHkgKyAodGhpcy50eSAqIHRoaXMuYyAtIHRoaXMudHggKiB0aGlzLmQpICogaWQ7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmEgKiBpZCAqIHkgKyAtdGhpcy5iICogaWQgKiB4ICsgKC10aGlzLnR5ICogdGhpcy5hICsgdGhpcy50eCAqIHRoaXMuYikgKiBpZDtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdHJpeCBvbiB0aGUgeCBhbmQgeS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMudHggKz0geDtcbiAgICB0aGlzLnR5ICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIHNjYWxlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIGFtb3VudCB0byBzY2FsZSBob3Jpem9udGFsbHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSBhbW91bnQgdG8gc2NhbGUgdmVydGljYWxseVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2NhbGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmEgKj0geDtcbiAgICB0aGlzLmQgKj0geTtcbiAgICB0aGlzLmMgKj0geDtcbiAgICB0aGlzLmIgKj0geTtcbiAgICB0aGlzLnR4ICo9IHg7XG4gICAgdGhpcy50eSAqPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyBhIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpXG57XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKCBhbmdsZSApO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbiggYW5nbGUgKTtcblxuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICB0aGlzLmEgPSBhMSAqIGNvcy10aGlzLmIgKiBzaW47XG4gICAgdGhpcy5iID0gYTEgKiBzaW4rdGhpcy5iICogY29zO1xuICAgIHRoaXMuYyA9IGMxICogY29zLXRoaXMuZCAqIHNpbjtcbiAgICB0aGlzLmQgPSBjMSAqIHNpbit0aGlzLmQgKiBjb3M7XG4gICAgdGhpcy50eCA9IHR4MSAqIGNvcyAtIHRoaXMudHkgKiBzaW47XG4gICAgdGhpcy50eSA9IHR4MSAqIHNpbiArIHRoaXMudHkgKiBjb3M7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG5cbiAgICB0aGlzLmEgID0gbWF0cml4LmEgKiBhMSArIG1hdHJpeC5iICogYzE7XG4gICAgdGhpcy5iICA9IG1hdHJpeC5hICogYjEgKyBtYXRyaXguYiAqIGQxO1xuICAgIHRoaXMuYyAgPSBtYXRyaXguYyAqIGExICsgbWF0cml4LmQgKiBjMTtcbiAgICB0aGlzLmQgID0gbWF0cml4LmMgKiBiMSArIG1hdHJpeC5kICogZDE7XG5cbiAgICB0aGlzLnR4ID0gbWF0cml4LnR4ICogYTEgKyBtYXRyaXgudHkgKiBjMSArIHRoaXMudHg7XG4gICAgdGhpcy50eSA9IG1hdHJpeC50eCAqIGIxICsgbWF0cml4LnR5ICogZDEgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1hdHJpeCBiYXNlZCBvbiBhbGwgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RYXG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RZXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXG4gKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WFxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdZXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKHgsIHksIHBpdm90WCwgcGl2b3RZLCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSlcbntcbiAgICB2YXIgYSwgYiwgYywgZCwgc3IsIGNyLCBjeSwgc3ksIG5zeCwgY3g7XG5cbiAgICBzciAgPSBNYXRoLnNpbihyb3RhdGlvbik7XG4gICAgY3IgID0gTWF0aC5jb3Mocm90YXRpb24pO1xuICAgIGN5ICA9IE1hdGguY29zKHNrZXdZKTtcbiAgICBzeSAgPSBNYXRoLnNpbihza2V3WSk7XG4gICAgbnN4ID0gLU1hdGguc2luKHNrZXdYKTtcbiAgICBjeCAgPSAgTWF0aC5jb3Moc2tld1gpO1xuXG4gICAgYSAgPSAgY3IgKiBzY2FsZVg7XG4gICAgYiAgPSAgc3IgKiBzY2FsZVg7XG4gICAgYyAgPSAtc3IgKiBzY2FsZVk7XG4gICAgZCAgPSAgY3IgKiBzY2FsZVk7XG5cbiAgICB0aGlzLmEgID0gY3kgKiBhICsgc3kgKiBjO1xuICAgIHRoaXMuYiAgPSBjeSAqIGIgKyBzeSAqIGQ7XG4gICAgdGhpcy5jICA9IG5zeCAqIGEgKyBjeCAqIGM7XG4gICAgdGhpcy5kICA9IG5zeCAqIGIgKyBjeCAqIGQ7XG5cbiAgICB0aGlzLnR4ID0geCArICggcGl2b3RYICogYSArIHBpdm90WSAqIGMgKTtcbiAgICB0aGlzLnR5ID0geSArICggcGl2b3RYICogYiArIHBpdm90WSAqIGQgKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQcmVwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uKG1hdHJpeClcbntcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIGlmIChtYXRyaXguYSAhPT0gMSB8fCBtYXRyaXguYiAhPT0gMCB8fCBtYXRyaXguYyAhPT0gMCB8fCBtYXRyaXguZCAhPT0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICAgICAgdmFyIGMxID0gdGhpcy5jO1xuICAgICAgICB0aGlzLmEgID0gYTEqbWF0cml4LmErdGhpcy5iKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmIgID0gYTEqbWF0cml4LmIrdGhpcy5iKm1hdHJpeC5kO1xuICAgICAgICB0aGlzLmMgID0gYzEqbWF0cml4LmErdGhpcy5kKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmQgID0gYzEqbWF0cml4LmIrdGhpcy5kKm1hdHJpeC5kO1xuICAgIH1cblxuICAgIHRoaXMudHggPSB0eDEqbWF0cml4LmErdGhpcy50eSptYXRyaXguYyttYXRyaXgudHg7XG4gICAgdGhpcy50eSA9IHR4MSptYXRyaXguYit0aGlzLnR5Km1hdHJpeC5kK21hdHJpeC50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0ID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcbiAgICB2YXIgbiA9IGExKmQxLWIxKmMxO1xuXG4gICAgdGhpcy5hID0gZDEvbjtcbiAgICB0aGlzLmIgPSAtYjEvbjtcbiAgICB0aGlzLmMgPSAtYzEvbjtcbiAgICB0aGlzLmQgPSBhMS9uO1xuICAgIHRoaXMudHggPSAoYzEqdGhpcy50eS1kMSp0eDEpL247XG4gICAgdGhpcy50eSA9IC0oYTEqdGhpcy50eS1iMSp0eDEpL247XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBSZXNldHMgdGhpcyBNYXRpeCB0byBhbiBpZGVudGl0eSAoZGVmYXVsdCkgbWF0cml4LlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmlkZW50aXR5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmEgPSAxO1xuICAgIHRoaXMuYiA9IDA7XG4gICAgdGhpcy5jID0gMDtcbiAgICB0aGlzLmQgPSAxO1xuICAgIHRoaXMudHggPSAwO1xuICAgIHRoaXMudHkgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgTWF0cml4IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gQSBjb3B5IG9mIHRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgdmFsdWVzIG9mIHRoZSBnaXZlbiBtYXRyaXggdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZXMgaW4gdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhlIG1hdHJpeCBnaXZlbiBpbiBwYXJhbWV0ZXIgd2l0aCBpdHMgdmFsdWVzIHVwZGF0ZWQuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQSBkZWZhdWx0IChpZGVudGl0eSkgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5JREVOVElUWSA9IG5ldyBNYXRyaXgoKTtcblxuLyoqXG4gKiBBIHRlbXAgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5URU1QX01BVFJJWCA9IG5ldyBNYXRyaXgoKTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcbn1cblxuUG9pbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvaW50XG4gKlxuICogQHJldHVybiB7UElYSS5Qb2ludH0gYSBjb3B5IG9mIHRoZSBwb2ludFxuICovXG5Qb2ludC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBDb3BpZXMgeCBhbmQgeSBmcm9tIHRoZSBnaXZlbiBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICovXG5Qb2ludC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgdGhpcy5zZXQocC54LCBwLnkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGVxdWFsIHRvIHRoaXMgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gKHAueCA9PT0gdGhpcy54KSAmJiAocC55ID09PSB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5Qb2ludC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy54ID0geCB8fCAwO1xuICAgIHRoaXMueSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLnggOiAwICkgO1xufTtcbiIsIi8qKlxuICogTWF0aCBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgbWl4ZWQgaW50byBQSVhJIG5hbWVzcGFjZS5cbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBUaGVzZSB3aWxsIGJlIG1peGVkIHRvIGJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLFxuICAgIC8vIHdoaWxlIHRoaXMgbW9kdWxlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBjb3JlXG4gICAgLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBjdXQgZG93biBvblxuICAgIC8vIGludGVybmFsIG1vZHVsZSByZXF1aXJlcy5cblxuICAgIFBvaW50OiAgICAgIHJlcXVpcmUoJy4vUG9pbnQnKSxcbiAgICBNYXRyaXg6ICAgICByZXF1aXJlKCcuL01hdHJpeCcpLFxuXG4gICAgQ2lyY2xlOiAgICAgcmVxdWlyZSgnLi9zaGFwZXMvQ2lyY2xlJyksXG4gICAgRWxsaXBzZTogICAgcmVxdWlyZSgnLi9zaGFwZXMvRWxsaXBzZScpLFxuICAgIFBvbHlnb246ICAgIHJlcXVpcmUoJy4vc2hhcGVzL1BvbHlnb24nKSxcbiAgICBSZWN0YW5nbGU6ICByZXF1aXJlKCcuL3NoYXBlcy9SZWN0YW5nbGUnKSxcbiAgICBSb3VuZGVkUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlJylcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIENpcmNsZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICovXG5mdW5jdGlvbiBDaXJjbGUoeCwgeSwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkNJUkM7XG59XG5cbkNpcmNsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaXJjbGU7XG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBDaXJjbGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkNpcmNsZX0gYSBjb3B5IG9mIHRoZSBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBDaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBjaXJjbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmFkaXVzIDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGR4ID0gKHRoaXMueCAtIHgpLFxuICAgICAgICBkeSA9ICh0aGlzLnkgLSB5KSxcbiAgICAgICAgcjIgPSB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzO1xuXG4gICAgZHggKj0gZHg7XG4gICAgZHkgKj0gZHk7XG5cbiAgICByZXR1cm4gKGR4ICsgZHkgPD0gcjIpO1xufTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBjaXJjbGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4qIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiovXG5DaXJjbGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy5yYWRpdXMsIHRoaXMueSAtIHRoaXMucmFkaXVzLCB0aGlzLnJhZGl1cyAqIDIsIHRoaXMucmFkaXVzICogMik7XG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBFbGxpcHNlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGlzIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZVxuICovXG5mdW5jdGlvbiBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkVMSVA7XG59XG5cbkVsbGlwc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRWxsaXBzZTtcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBFbGxpcHNlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5FbGxpcHNlfSBhIGNvcHkgb2YgdGhlIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgRWxsaXBzZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRzIGFyZSB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vbm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDBcbiAgICB2YXIgbm9ybXggPSAoKHggLSB0aGlzLngpIC8gdGhpcy53aWR0aCksXG4gICAgICAgIG5vcm15ID0gKCh5IC0gdGhpcy55KSAvIHRoaXMuaGVpZ2h0KTtcblxuICAgIG5vcm14ICo9IG5vcm14O1xuICAgIG5vcm15ICo9IG5vcm15O1xuXG4gICAgcmV0dXJuIChub3JteCArIG5vcm15IDw9IDEpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgZWxsaXBzZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy53aWR0aCwgdGhpcy55IC0gdGhpcy5oZWlnaHQsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG4iLCJ2YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9Qb2ludCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcG9pbnRzIHtQSVhJLlBvaW50W118bnVtYmVyW118Li4uUElYSS5Qb2ludHwuLi5udW1iZXJ9IFRoaXMgY2FuIGJlIGFuIGFycmF5IG9mIFBvaW50cyB0aGF0IGZvcm0gdGhlIHBvbHlnb24sXG4gKiAgICAgIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIHRoYXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBbeCx5LCB4LHksIC4uLl0sIG9yIHRoZSBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZVxuICogICAgICBhbGwgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvbiBlLmcuIGBuZXcgUElYSS5Qb2x5Z29uKG5ldyBQSVhJLlBvaW50KCksIG5ldyBQSVhJLlBvaW50KCksIC4uLilgLCBvciB0aGVcbiAqICAgICAgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmUgZmxhdCB4LHkgdmFsdWVzIGUuZy4gYG5ldyBQb2x5Z29uKHgseSwgeCx5LCB4LHksIC4uLilgIHdoZXJlIGB4YCBhbmQgYHlgIGFyZVxuICogICAgICBOdW1iZXJzLlxuICovXG5mdW5jdGlvbiBQb2x5Z29uKHBvaW50c18pXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBvaW50c187XG5cbiAgICAvL2lmIHBvaW50cyBpc24ndCBhbiBhcnJheSwgdXNlIGFyZ3VtZW50cyBhcyB0aGUgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgcG9pbnRzLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICBwb2ludHNbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IG9mIHBvaW50cywgY29udmVydCBpdCB0byBhIGZsYXQgYXJyYXkgb2YgbnVtYmVyc1xuICAgIGlmIChwb2ludHNbMF0gaW5zdGFuY2VvZiBQb2ludClcbiAgICB7XG4gICAgICAgIHZhciBwID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBwLnB1c2gocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50cyA9IHA7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5QT0xZO1xufVxuXG5Qb2x5Z29uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvbHlnb247XG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9seWdvblxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9seWdvbn0gYSBjb3B5IG9mIHRoZSBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvbHlnb24odGhpcy5wb2ludHMuc2xpY2UoKSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcG9seWdvblxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBpbnNpZGUgPSBmYWxzZTtcblxuICAgIC8vIHVzZSBzb21lIHJheWNhc3RpbmcgdG8gdGVzdCBoaXRzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL3BvaW50LWluLXBvbHlnb24vYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5wb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbGVuZ3RoIC0gMTsgaSA8IGxlbmd0aDsgaiA9IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB4aSA9IHRoaXMucG9pbnRzW2kgKiAyXSwgeWkgPSB0aGlzLnBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgeGogPSB0aGlzLnBvaW50c1tqICogMl0sIHlqID0gdGhpcy5wb2ludHNbaiAqIDIgKyAxXSxcbiAgICAgICAgICAgIGludGVyc2VjdCA9ICgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICh4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aSk7XG5cbiAgICAgICAgaWYgKGludGVyc2VjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiB0aGUgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcmVjdGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SRUNUO1xufVxuXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XG5cbi8qKlxuICogQSBjb25zdGFudCBlbXB0eSByZWN0YW5nbGUuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblJlY3RhbmdsZS5FTVBUWSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDwgdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDwgdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFJvdW5kZWQgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIHRoYXQgaGFzIG5pY2Ugcm91bmRlZCBjb3JuZXJzLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodCBhbmQgaXRzIHJhZGl1cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gQ29udHJvbHMgdGhlIHJhZGl1cyBvZiB0aGUgcm91bmRlZCBjb3JuZXJzXG4gKi9cbmZ1bmN0aW9uIFJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJSRUM7XG59XG5cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm91bmRlZFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUm91bmRlZFJlY3RhbmdsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUm91bmRlZFJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSb3VuZGVkUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8PSB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUGFydGljbGVDb250YWluZXIgY2xhc3MgaXMgYSByZWFsbHkgZmFzdCB2ZXJzaW9uIG9mIHRoZSBDb250YWluZXIgYnVpbHQgc29sZWx5IGZvciBzcGVlZCxcbiAqIHNvIHVzZSB3aGVuIHlvdSBuZWVkIGEgbG90IG9mIHNwcml0ZXMgb3IgcGFydGljbGVzLiBUaGUgdHJhZGVvZmYgb2YgdGhlIFBhcnRpY2xlQ29udGFpbmVyIGlzIHRoYXQgYWR2YW5jZWRcbiAqIGZ1bmN0aW9uYWxpdHkgd2lsbCBub3Qgd29yay4gUGFydGljbGVDb250YWluZXIgaW1wbGVtZW50cyBvbmx5IHRoZSBiYXNpYyBvYmplY3QgdHJhbnNmb3JtIChwb3NpdGlvbiwgc2NhbGUsIHJvdGF0aW9uKS5cbiAqIEFueSBvdGhlciBmdW5jdGlvbmFsaXR5IGxpa2UgdGludGluZywgbWFza2luZywgZXRjIHdpbGwgbm90IHdvcmsgb24gc3ByaXRlcyBpbiB0aGlzIGJhdGNoLlxuICpcbiAqIEl0J3MgZXh0cmVtZWx5IGVhc3kgdG8gdXNlIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQYXJ0aWNsZUNvbnRhaW5lcigpO1xuICpcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpXG4gKiB7XG4gKiAgICAgdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJteUltYWdlLnBuZ1wiKTtcbiAqICAgICBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEFuZCBoZXJlIHlvdSBoYXZlIGEgaHVuZHJlZCBzcHJpdGVzIHRoYXQgd2lsbCBiZSByZW5kZXJlciBhdCB0aGUgc3BlZWQgb2YgbGlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbbWF4U2l6ZT0xNTAwMF0ge251bWJlcn0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGF0IGNhbiBiZSByZW5kZXJlciBieSB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzXSB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyBvZiBjaGlsZHJlbiB0aGF0IHNob3VsZCBiZSB1cGxvYWRlZCB0byB0aGUgZ3B1IGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnNjYWxlPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBzY2FsZSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5wb3NpdGlvbj10cnVlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBwb3NpdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5yb3RhdGlvbj1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcm90YXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMudXZzPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCB1dnMgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuYWxwaGE9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIGFscGhhIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtiYXRjaFNpemU9MTUwMDBdIHtudW1iZXJ9IE51bWJlciBvZiBwYXJ0aWNsZXMgcGVyIGJhdGNoLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUNvbnRhaW5lcihtYXhTaXplLCBwcm9wZXJ0aWVzLCBiYXRjaFNpemUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBiYXRjaFNpemUgPSBiYXRjaFNpemUgfHwgMTUwMDA7IC8vQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG4gICAgbWF4U2l6ZSA9IG1heFNpemUgfHwgMTUwMDA7XG5cbiAgICAvLyBNYWtpbmcgc3VyZSB0aGUgYmF0Y2ggc2l6ZSBpcyB2YWxpZFxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICB2YXIgbWF4QmF0Y2hTaXplID0gMTYzODQ7XG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhCYXRjaFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgcHJvcGVydGllcyB0byBiZSBkeW5hbWljICh0cnVlKSAvIHN0YXRpYyAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFuW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmF0Y2hTaXplID0gYmF0Y2hTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICpcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlQ2hpbGRyZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBjYW52YXMgcmVuZGVyZXJpbmcuIElmIHRydWUgdGhlbiB0aGUgZWxlbWVudHMgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBuZWFyZXN0IHBpeGVsLiBUaGlzIHByb3ZpZGVzIGEgbmljZSBzcGVlZCBib29zdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZTtcbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbn1cblxuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBwcml2YXRlIHByb3BlcnRpZXMgYXJyYXkgdG8gZHluYW1pYyAvIHN0YXRpYyBiYXNlZCBvbiB0aGUgcGFzc2VkIHByb3BlcnRpZXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMge29iamVjdH0gVGhlIHByb3BlcnRpZXMgdG8gYmUgdXBsb2FkZWRcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnNldFByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKVxue1xuICAgIGlmICggcHJvcGVydGllcyApIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1swXSA9ICdzY2FsZScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5zY2FsZSA6IHRoaXMuX3Byb3BlcnRpZXNbMF07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMV0gPSAncG9zaXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucG9zaXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzFdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzJdID0gJ3JvdGF0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnJvdGF0aW9uIDogdGhpcy5fcHJvcGVydGllc1syXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1szXSA9ICd1dnMnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMudXZzIDogdGhpcy5fcHJvcGVydGllc1szXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1s0XSA9ICdhbHBoYScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5hbHBoYSA6IHRoaXMuX3Byb3BlcnRpZXNbNF07XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcblxuICAgIC8vIFRPRE8gZG9uJ3QgbmVlZCB0byFcbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAvLyAgUElYSS5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybS5jYWxsKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRhaW5lciB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHdlYmdsIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIoIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUgKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlLnJlbmRlciggdGhpcyApO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGZsYWcgdGhhdCBzdGF0aWMgZGF0YSBzaG91bGQgYmUgdXBkYXRlZCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoc21hbGxlc3RDaGlsZEluZGV4KVxue1xuICAgIHZhciBidWZmZXJJbmRleCA9IE1hdGguZmxvb3Ioc21hbGxlc3RDaGlsZEluZGV4IC8gdGhpcy5fYmF0Y2hTaXplKTtcbiAgICBpZiAoYnVmZmVySW5kZXggPCB0aGlzLl9idWZmZXJUb1VwZGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IGJ1ZmZlckluZGV4O1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciBpc1JvdGF0ZWQgPSB0cnVlO1xuXG4gICAgdmFyIHBvc2l0aW9uWCA9IDA7XG4gICAgdmFyIHBvc2l0aW9uWSA9IDA7XG5cbiAgICB2YXIgZmluYWxXaWR0aCA9IDA7XG4gICAgdmFyIGZpbmFsSGVpZ2h0ID0gMDtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZSA9IGNoaWxkLnRleHR1cmUuZnJhbWU7XG5cbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYSAqIGNoaWxkLmFscGhhO1xuXG4gICAgICAgIGlmIChjaGlsZC5yb3RhdGlvbiAlIChNYXRoLlBJICogMikgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZhc3Rlc3QgIHdheSB0byBvcHRpbWlzZSEgLSBpZiByb3RhdGlvbiBpcyAwIHRoZW4gd2UgY2FuIGF2b2lkIGFueSBraW5kIG9mIHNldFRyYW5zZm9ybSBjYWxsXG4gICAgICAgICAgICBpZiAoaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLngpICsgY2hpbGQucG9zaXRpb24ueCAgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnkpICsgY2hpbGQucG9zaXRpb24ueSAgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54O1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55O1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZC5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZFRyYW5zZm9ybSA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHkgfCAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoKSArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0KSArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICBjaGlsZC50ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgIGZyYW1lLngsXG4gICAgICAgICAgICBmcmFtZS55LFxuICAgICAgICAgICAgZnJhbWUud2lkdGgsXG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQsXG4gICAgICAgICAgICBwb3NpdGlvblgsXG4gICAgICAgICAgICBwb3NpdGlvblksXG4gICAgICAgICAgICBmaW5hbFdpZHRoLFxuICAgICAgICAgICAgZmluYWxIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIGlmICh0aGlzLl9idWZmZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcbn07XG4iLCJcbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVCdWZmZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlQnVmZmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFRoZSBwYXJ0aWNsZSBidWZmZXIgbWFuYWdlcyB0aGUgc3RhdGljIGFuZCBkeW5hbWljIGJ1ZmZlcnMgZm9yIGEgcGFydGljbGUgY29udGFpbmVyLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQnVmZmVyKGdsLCBwcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgc2l6ZSlcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleCBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhlIGJ1ZmZlciBjYW4gaG9sZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgZHluYW1pYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBzdGF0aWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgaWYoZHluYW1pY1Byb3BlcnR5RmxhZ3NbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRCdWZmZXJzKCk7XG5cbn1cblxuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQnVmZmVyO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5pbml0QnVmZmVycyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcHJvcGVydHk7XG5cbiAgICB2YXIgZHluYW1pY09mZnNldCA9IDA7XG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IGR5bmFtaWNPZmZzZXQ7XG4gICAgICAgIGR5bmFtaWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5keW5hbWljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG5cblxuICAgIC8vIHN0YXRpYyAvL1xuICAgIHZhciBzdGF0aWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBzdGF0aWNPZmZzZXQ7XG4gICAgICAgIHN0YXRpY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLnN0YXRpY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuc3RhdGljU3RyaWRlICogNCk7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZHluYW1pYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZER5bmFtaWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLmR5bmFtaWNEYXRhLCB0aGlzLmR5bmFtaWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuZHluYW1pY0RhdGEpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBzdGF0aWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWRTdGF0aWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5zdGF0aWNEYXRhLCB0aGlzLnN0YXRpY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLnN0YXRpY0RhdGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyB0byB0aGUgR1BVXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaSwgcHJvcGVydHk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnN0YXRpY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlQnVmZmVyLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5zdGF0aWNCdWZmZXIpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlU2hhZGVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZVNoYWRlcicpLFxuICAgIFBhcnRpY2xlQnVmZmVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUJ1ZmZlcicpLFxuICAgIG1hdGggICAgICAgICAgICA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgLy8gYW5kIG1heCBudW1iZXIgb2YgZWxlbWVudCBpbiB0aGUgaW5kZXggYnVmZmVyIGlzIDE2Mzg0ICogNiA9IDk4MzA0XG4gICAgLy8gQ3JlYXRpbmcgYSBmdWxsIGluZGV4IGJ1ZmZlciwgb3ZlcmhlYWQgaXMgOTgzMDQgKiAyID0gMTk2S29cbiAgICB2YXIgbnVtSW5kaWNlcyA9IDk4MzA0O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShudW1JbmRpY2VzKTtcblxuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgbnVtSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IG51bGw7XG5cbiAgICB0aGlzLnRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcbn1cblxuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3BhcnRpY2xlJywgUGFydGljbGVSZW5kZXJlcik7XG5cbi8qKlxuICogV2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IG5ldyBQYXJ0aWNsZVNoYWRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIpO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IGluZGV4LCBzbyA2NTUzNSAvIDYgPSAxMDkyMi5cblxuICAgIC8vdXBsb2FkIHRoZSBpbmRleCBkYXRhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBbXG4gICAgICAgIC8vIHZlcnRpY2VzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFZlcnRpY2VzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcG9zaXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbkNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRQb3NpdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJvdGF0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUm90YXRpb24sXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFJvdGF0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdXZzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRVdnMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBhbHBoYURhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRBbHBoYSxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgcGFydGljbGUgYmF0Y2guXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGJpbmQgdGhlIG1haW4gdGV4dHVyZVxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgLy8gYmluZCB0aGUgYnVmZmVyc1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgcGFydGljbGUgY29udGFpbmVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgY2hpbGRyZW4gPSBjb250YWluZXIuY2hpbGRyZW4sXG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIG1heFNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplO1xuXG4gICAgaWYodG90YWxDaGlsZHJlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZih0b3RhbENoaWxkcmVuID4gbWF4U2l6ZSlcbiAgICB7XG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBtYXhTaXplO1xuICAgIH1cblxuICAgIGlmKCFjb250YWluZXIuX2J1ZmZlcnMpXG4gICAge1xuICAgICAgICBjb250YWluZXIuX2J1ZmZlcnMgPSB0aGlzLmdlbmVyYXRlQnVmZmVycyggY29udGFpbmVyICk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29udGFpbmVyLmJsZW5kTW9kZSk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIG0gPSAgY29udGFpbmVyLndvcmxkVHJhbnNmb3JtLmNvcHkoIHRoaXMudGVtcE1hdHJpeCApO1xuICAgIG0ucHJlcGVuZCggdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXggKTtcbiAgICBnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgbS50b0FycmF5KHRydWUpKTtcbiAgICBnbC51bmlmb3JtMWYodGhpcy5zaGFkZXIudW5pZm9ybXMudUFscGhhLl9sb2NhdGlvbiwgY29udGFpbmVyLndvcmxkQWxwaGEpO1xuXG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHRleHR1cmUgaXMgYm91bmQuLlxuICAgIHZhciBiYXNlVGV4dHVyZSA9IGNoaWxkcmVuWzBdLl90ZXh0dXJlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgdGV4dHVyZSBoYXMgbm90IHVwZGF0ZWQgdGhlbiBsZXRzIG5vdCB1cGxvYWQgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmKCF0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUoYmFzZVRleHR1cmUpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZighY29udGFpbmVyLl9wcm9wZXJ0aWVzWzBdIHx8ICFjb250YWluZXIuX3Byb3BlcnRpZXNbM10pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgfVxuXG4gICAgLy8gbm93IGxldHMgdXBsb2FkIGFuZCByZW5kZXIgdGhlIGJ1ZmZlcnMuLlxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IHRvdGFsQ2hpbGRyZW47IGkgKz0gYmF0Y2hTaXplLCBqICs9IDEpXG4gICAge1xuICAgICAgICB2YXIgYW1vdW50ID0gKCB0b3RhbENoaWxkcmVuIC0gaSk7XG4gICAgICAgIGlmKGFtb3VudCA+IGJhdGNoU2l6ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50ID0gYmF0Y2hTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRhaW5lci5fYnVmZmVyc1tqXTtcblxuICAgICAgICAvLyB3ZSBhbHdheXMgdXBsb2FkIHRoZSBkeW5hbWljXG4gICAgICAgIGJ1ZmZlci51cGxvYWREeW5hbWljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuXG4gICAgICAgIC8vIHdlIG9ubHkgdXBsb2FkIHRoZSBzdGF0aWMgY29udGVudCB3aGVuIHdlIGhhdmUgdG8hXG4gICAgICAgIGlmKGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPT09IGopXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJ1ZmZlci51cGxvYWRTdGF0aWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gaiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5kIHRoZSBidWZmZXJcbiAgICAgICAgYnVmZmVyLmJpbmQoIHRoaXMuc2hhZGVyICk7XG5cbiAgICAgICAgIC8vIG5vdyBkcmF3IHRob3NlIHN1Y2thcyFcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgYW1vdW50ICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBvbmUgcGFydGljbGUgYnVmZmVyIGZvciBlYWNoIGNoaWxkIGluIHRoZSBjb250YWluZXIgd2Ugd2FudCB0byByZW5kZXIgYW5kIHVwZGF0ZXMgaW50ZXJuYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5nZW5lcmF0ZUJ1ZmZlcnMgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIGJ1ZmZlcnMgPSBbXSxcbiAgICAgICAgc2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemUsXG4gICAgICAgIGR5bmFtaWNQcm9wZXJ0eUZsYWdzID0gY29udGFpbmVyLl9wcm9wZXJ0aWVzLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gYmF0Y2hTaXplKVxuICAgIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKG5ldyBQYXJ0aWNsZUJ1ZmZlcihnbCwgdGhpcy5wcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgYmF0Y2hTaXplKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHZlcnRpY2llcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgdmVydGljZXMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFZlcnRpY2VzID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICB2YXIgc3ByaXRlLFxuICAgICAgICB0ZXh0dXJlLFxuICAgICAgICB0cmltLFxuICAgICAgICBzeCxcbiAgICAgICAgc3ksXG4gICAgICAgIHcwLCB3MSwgaDAsIGgxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xuXG4gICAgICAgIHNwcml0ZSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXTtcbiAgICAgICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZTtcbiAgICAgICAgc3ggPSBzcHJpdGUuc2NhbGUueDtcbiAgICAgICAgc3kgPSBzcHJpdGUuc2NhbGUueTtcblxuICAgICAgICBpZiAodGV4dHVyZS50cmltKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgICAgICB0cmltID0gdGV4dHVyZS50cmltO1xuXG4gICAgICAgICAgICB3MSA9IHRyaW0ueCAtIHNwcml0ZS5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBoMSA9IHRyaW0ueSAtIHNwcml0ZS5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtc3ByaXRlLmFuY2hvci54KTtcbiAgICAgICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtc3ByaXRlLmFuY2hvci54O1xuXG4gICAgICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXNwcml0ZS5hbmNob3IueSk7XG4gICAgICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC1zcHJpdGUuYW5jaG9yLnk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBwb3NpdGlvbnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFBvc2l0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUG9zaXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucG9zaXRpb247XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcm90YXRpb24gdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFJvdGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUm90YXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucm90YXRpb247XG5cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVSb3RhdGlvbjtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgVXZzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRVdnMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlVXZzID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLl90ZXh0dXJlLl91dnM7XG5cbiAgICAgICAgaWYgKHRleHR1cmVVdnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSB0ZXh0dXJlVXZzLngwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZXh0dXJlVXZzLnkwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdGV4dHVyZVV2cy54MTtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gdGV4dHVyZVV2cy55MTtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB0ZXh0dXJlVXZzLngyO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gdGV4dHVyZVV2cy55MjtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB0ZXh0dXJlVXZzLngzO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gdGV4dHVyZVV2cy55MztcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8geW91IGtub3cgdGhpcyBjYW4gYmUgZWFzaWVyIVxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBhbHBoYSB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkQWxwaGEgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZUFscGhhID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLmFscGhhO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZUFscGhhO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVSZW5kZXJlci5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuICAgIHRoaXMudGVtcE1hdHJpeCA9IG51bGw7XG59O1xuIiwidmFyIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVTaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBUZXh0dXJlU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFQb3NpdGlvbkNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVNjYWxlOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFSb3RhdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIHZlYzIgdiA9IGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAnICAgdi54ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIGNvcyhhUm90YXRpb24pIC0gKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIHNpbihhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdi55ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIHNpbihhUm90YXRpb24pICsgKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIGNvcyhhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdiA9IHYgKyBhUG9zaXRpb25Db29yZDsnLFxuXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyh2LCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGhlbGxvXG4gICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCB1QWxwaGE7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3IgKiB1QWxwaGE7JyxcbiAgICAgICAgICAgICcgIGlmIChjb2xvci5hID09IDAuMCkgZGlzY2FyZDsnLFxuICAgICAgICAgICAgJyAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdUFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFQb3NpdGlvbkNvb3JkOiAwLFxuICAgICAgICAgICAvLyBhU2NhbGU6ICAgICAgICAgMCxcbiAgICAgICAgICAgIGFSb3RhdGlvbjogICAgICAwXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVEVNUCBIQUNLXG5cbn1cblxuUGFydGljbGVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlU2hhZGVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVNoYWRlcjtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHN5c3RlbSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgc3lzdGVtIHRoaXMgcmVuZGVyZXIgaXMgZm9yLlxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXSB7bnVtYmVyfSBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcmVuZGVyZWQgYXJlYSAoc2hvd24gaWYgbm90IHRyYW5zcGFyZW50KS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5yb3VuZFBpeGVscz1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBTeXN0ZW1SZW5kZXJlcihzeXN0ZW0sIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB1dGlscy5zYXlIZWxsbyhzeXN0ZW0pO1xuXG4gICAgLy8gcHJlcGFyZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpIGluIENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tpXSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgb3B0aW9ucyA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHNlZSBQSVhJLlJFTkRFUkVSX1RZUEVcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgODAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDgwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgNjAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy52aWV3ID0gb3B0aW9ucy52aWV3IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG9wdGlvbnMucmVzb2x1dGlvbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBvcHRpb25zLnRyYW5zcGFyZW50O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgc2hvdWxkIGJlIHJlc2l6ZWQgYXV0b21hdGljYWxseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvcHRpb25zLmF1dG9SZXNpemUgfHwgZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIGJsZW5kIG1vZGVzIHVzZWZ1bCBmb3IgdGhpcyByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG1peGVkPn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgZmxhZyBhZmZlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50cyBvZiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgcmV0YWluZWQgYWZ0ZXIgcmVuZGVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3Igbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyBOT1QgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBhIGNhbnZhcyBzaXplZCBmaWxsUmVjdCBvcGVyYXRpb24gZXZlcnkgZnJhbWUgdG8gc2V0IHRoZSBjYW52YXMgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBjbGVhclJlY3QgdG8gY2xlYXIgdGhlIGNhbnZhcyBldmVyeSBmcmFtZS5cbiAgICAgKiBEaXNhYmxlIHRoaXMgYnkgc2V0dGluZyB0aGlzIHRvIGZhbHNlLiBGb3IgZXhhbXBsZSBpZiB5b3VyIGdhbWUgaGFzIGEgY2FudmFzIGZpbGxpbmcgYmFja2dyb3VuZCBpbWFnZSB5b3Ugb2Z0ZW4gZG9uJ3QgbmVlZCB0aGlzIHNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHRcbiAgICAgKi9cbiAgICB0aGlzLmNsZWFyQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICAgICAqIEhhbmR5IGZvciBjcmlzcCBwaXhlbCBhcnQgYW5kIHNwZWVkIG9uIGxlZ2FjeSBkZXZpY2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gb3B0aW9ucy5yb3VuZFBpeGVscztcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmEgPSBbMCwgMCwgMCwgMF07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9ICcjMDAwMDAwJztcblxuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yOyAvLyBydW4gYmcgY29sb3Igc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgdHJhbnNmb3JtOnt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKX0sIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3Qgcm9vdCBvYmplY3QgdGhhdCB0aGUgcmVuZGVyZXIgdHJpZWQgdG8gcmVuZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3lzdGVtUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFN5c3RlbVJlbmRlcmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciB0byBmaWxsIGlmIG5vdCB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlN5c3RlbVJlbmRlcmVyI1xuICAgICAqL1xuICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSB1dGlscy5oZXgyc3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB1dGlscy5oZXgycmdiKHZhbCwgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBjYW52YXMgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMudmlldy53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGhpcy52aWV3LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgICAgICB0aGlzLnZpZXcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpIHtcbiAgICBpZiAocmVtb3ZlVmlldyAmJiB0aGlzLnZpZXcucGFyZW50Tm9kZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMudmlldyk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgdGhpcy52aWV3ID0gbnVsbDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IDA7XG5cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBmYWxzZTtcblxuICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcblxuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDA7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IG51bGw7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gbnVsbDtcbn07XG4iLCJ2YXIgU3lzdGVtUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9TeXN0ZW1SZW5kZXJlcicpLFxuICAgIENhbnZhc01hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi91dGlscy9DYW52YXNNYXNrTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBTeXN0ZW1SZW5kZXJlci5jYWxsKHRoaXMsICdDYW52YXMnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuQ0FOVkFTO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMudmlldy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIGZsYWcgY29udHJvbGxpbmcgY2FudmFzIHJlZnJlc2guXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVmcmVzaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBhIENhbnZhc01hc2tNYW5hZ2VyLCBoYW5kbGVzIG1hc2tpbmcgd2hlbiB1c2luZyB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNNYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IENhbnZhc01hc2tNYW5hZ2VyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIHByb3BlcnR5IHVzZWQgdG8gc2V0IHRoZSBjYW52YXMgc21vb3RoaW5nIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnaW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcblxuICAgIGlmICghdGhpcy5jb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ3dlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ29JbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB0aGlzLl9tYXBCbGVuZE1vZGVzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHtcbiAgICAgICAgd29ybGRUcmFuc2Zvcm06IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgICAgICB3b3JsZEFscGhhOiAxXG4gICAgfTtcblxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oQ2FudmFzUmVuZGVyZXIpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byB0aGlzIGNhbnZhcyB2aWV3XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSB0aGUgb2JqZWN0IHRvIGJlIHJlbmRlcmVkXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KVxue1xuICAgIHRoaXMuZW1pdCgncHJlcmVuZGVyJyk7XG5cbiAgICB2YXIgY2FjaGVQYXJlbnQgPSBvYmplY3QucGFyZW50O1xuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gb2JqZWN0O1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIG9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIG9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTICYmIHRoaXMudmlldy5zY3JlZW5jYW52YXMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpXG4gICAge1xuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGggLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlckRpc3BsYXlPYmplY3Qob2JqZWN0LCB0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciBhbmQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSBDYW52YXMgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIFtyZW1vdmVWaWV3PWZhbHNlXSB7Ym9vbGVhbn0gUmVtb3ZlcyB0aGUgQ2FudmFzIGVsZW1lbnQgZnJvbSB0aGUgRE9NLlxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIGNhbGwgdGhlIGJhc2UgZGVzdHJveVxuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcywgcmVtb3ZlVmlldyk7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5T2JqZWN0IHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgY29udGV4dClcbntcbiAgICB2YXIgdGVtcENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyQ2FudmFzKHRoaXMpO1xuICAgIHRoaXMuY29udGV4dCA9IHRlbXBDb250ZXh0O1xufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBQSVhJLlN5c3RlbVJlbmRlcmVyI3Jlc2l6ZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKiBAcGFyYW0ge251bWJlcn0gaFxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHcsIGgpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xuXG4gICAgLy9yZXNldCB0aGUgc2NhbGUgbW9kZS4uIG9kZGx5IHRoaXMgc2VlbXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgY2FudmFzIGlzIHJlc2l6ZWQuXG4gICAgLy9zdXJlbHkgYSBicm93c2VyIGJ1Zz8/IExldCBwaXhpIGZpeCB0aGF0IGZvciB5b3UuLlxuICAgIGlmKHRoaXMuc21vb3RoUHJvcGVydHkpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHRbdGhpcy5zbW9vdGhQcm9wZXJ0eV0gPSAoQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVCA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogTWFwcyBQaXhpIGJsZW5kIG1vZGVzIHRvIGNhbnZhcyBibGVuZCBtb2Rlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX21hcEJsZW5kTW9kZXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5ibGVuZE1vZGVzKVxuICAgIHtcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzID0ge307XG5cbiAgICAgICAgaWYgKHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnbXVsdGlwbHknO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NjcmVlbic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSAnb3ZlcmxheSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnZGFya2VuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MSUdIVEVOXSAgICAgICA9ICdsaWdodGVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdjb2xvci1kb2RnZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnY29sb3ItYnVybic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnaGFyZC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSAnc29mdC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnZGlmZmVyZW5jZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnZXhjbHVzaW9uJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdodWUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gJ3NhdHVyYXRlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl0gICAgICAgICA9ICdjb2xvcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSAnbHVtaW5vc2l0eSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29vbCBuZXcgYmxlbmQgbW9kZXMgaW4gY2FudmFzICdjb3VnaCcgaWUgJ2NvdWdoJ1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNpemUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGNhbnZhc1xuICovXG5mdW5jdGlvbiBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgQ2FudmFzIG9iamVjdCB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBDYW52YXNCdWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogQSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHR3by1kaW1lbnNpb25hbCByZW5kZXJpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59XG5cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0J1ZmZlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FudmFzQnVmZmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIGJ1ZmZlciBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ2FudmFzQnVmZmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdmFsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGNhbnZhcyB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZSBDYW52YXNCdWZmZXIgY2xhc3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbnZhc1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgY2FudmFzLlxuICpcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBjYW52YXMgcmVuZGVyZXIgdG8gZHJhdyB0aGUgcHJpbWl0aXZlIGdyYXBoaWNzIGRhdGEuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNHcmFwaGljcyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNHcmFwaGljcztcblxuLypcbiAqIFJlbmRlcnMgYSBHcmFwaGljcyBvYmplY3QgdG8gYSBjYW52YXMuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgYWN0dWFsIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSAyZCBkcmF3aW5nIG1ldGhvZCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciB3b3JsZEFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuICAgIGlmIChncmFwaGljcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3NUaW50KGdyYXBoaWNzKTtcbiAgICAgICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLl9maWxsVGludDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEuX2xpbmVUaW50O1xuXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZSBjbG9zZSB0aGUgcGF0aCAtIG11Y2ggbmVhdGVyIDopXG4gICAgICAgICAgICBpZiAocG9pbnRzWzBdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAmJiBwb2ludHNbMV0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbENvbG9yIHx8IGRhdGEuZmlsbENvbG9yID09PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmZpbGxBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggZmlsbENvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUud2lkdGgsIHNoYXBlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLDAsMipNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVsbGlwc2UgY29kZSB0YWtlbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcblxuICAgICAgICAgICAgdmFyIHcgPSBzaGFwZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB2YXIgaCA9IHNoYXBlLmhlaWdodCAqIDI7XG5cbiAgICAgICAgICAgIHZhciB4ID0gc2hhcGUueCAtIHcvMjtcbiAgICAgICAgICAgIHZhciB5ID0gc2hhcGUueSAtIGgvMjtcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIGthcHBhID0gMC41NTIyODQ4LFxuICAgICAgICAgICAgICAgIG94ID0gKHcgLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgb3kgPSAoaCAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgeGUgPSB4ICsgdywgICAgICAgICAgIC8vIHgtZW5kXG4gICAgICAgICAgICAgICAgeWUgPSB5ICsgaCwgICAgICAgICAgIC8vIHktZW5kXG4gICAgICAgICAgICAgICAgeG0gPSB4ICsgdyAvIDIsICAgICAgIC8vIHgtbWlkZGxlXG4gICAgICAgICAgICAgICAgeW0gPSB5ICsgaCAvIDI7ICAgICAgIC8vIHktbWlkZGxlXG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG1hc2tcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3Mgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgbWFza1xuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGNvbnRleHQgMmQgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciBsZW4gPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gVE9ETyAtIG5lZWQgdG8gYmUgVW5kZWZpbmVkIVxuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgcnggPSBzaGFwZS54O1xuICAgICAgICAgICAgdmFyIHJ5ID0gc2hhcGUueTtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcbiAgICAgICAgICAgIHZhciByYWRpdXMgPSBzaGFwZS5yYWRpdXM7XG5cbiAgICAgICAgICAgIHZhciBtYXhSYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDIgfCAwO1xuICAgICAgICAgICAgcmFkaXVzID0gcmFkaXVzID4gbWF4UmFkaXVzID8gbWF4UmFkaXVzIDogcmFkaXVzO1xuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRpbnQgb2YgYSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3MgdGhhdCB3aWxsIGhhdmUgaXRzIHRpbnQgdXBkYXRlZFxuICpcbiAqL1xuQ2FudmFzR3JhcGhpY3MudXBkYXRlR3JhcGhpY3NUaW50ID0gZnVuY3Rpb24gKGdyYXBoaWNzKVxue1xuICAgIGlmIChncmFwaGljcy50aW50ID09PSAweEZGRkZGRiAmJiBncmFwaGljcy5fcHJldlRpbnQgPT09IGdyYXBoaWNzLnRpbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyYXBoaWNzLl9wcmV2VGludCA9IGdyYXBoaWNzLnRpbnQ7XG5cbiAgICB2YXIgdGludFIgPSAoZ3JhcGhpY3MudGludCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50RyA9IChncmFwaGljcy50aW50ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgdGludEIgPSAoZ3JhcGhpY3MudGludCAmIDB4RkYpLyAyNTU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLmZpbGxDb2xvciB8IDA7XG4gICAgICAgIHZhciBsaW5lQ29sb3IgPSBkYXRhLmxpbmVDb2xvciB8IDA7XG5cbiAgICAgICAgLypcbiAgICAgICAgdmFyIGNvbG9yUiA9IChmaWxsQ29sb3IgPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgdmFyIGNvbG9yRyA9IChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JCID0gKGZpbGxDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgZmlsbENvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG5cbiAgICAgICAgY29sb3JSID0gKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckcgPSAobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgY29sb3JCID0gKGxpbmVDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgbGluZUNvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG4gICAgICAgICovXG5cbiAgICAgICAgLy8gc3VwZXIgaW5saW5lIGNvcyBpbSBhbiBvcHRpbWl6YXRpb24gTkFaSSA6KVxuICAgICAgICBkYXRhLl9maWxsVGludCA9ICgoKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgoZmlsbENvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAoZmlsbENvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuICAgICAgICBkYXRhLl9saW5lVGludCA9ICgoKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAobGluZUNvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuXG4gICAgfVxufTtcblxuIiwidmFyIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi9DYW52YXNHcmFwaGljcycpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBtYXNraW5nLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ2FudmFzTWFza01hbmFnZXIoKVxue31cblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FudmFzTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc01hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgc3RhY2sgb2YgbWFza3MuXG4gKlxuICogQHBhcmFtIG1hc2tEYXRhIHtvYmplY3R9IHRoZSBtYXNrRGF0YSB0aGF0IHdpbGwgYmUgcHVzaGVkXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSwgcmVuZGVyZXIpXG57XG5cbiAgICByZW5kZXJlci5jb250ZXh0LnNhdmUoKTtcblxuICAgIHZhciBjYWNoZUFscGhhID0gbWFza0RhdGEuYWxwaGE7XG4gICAgdmFyIHRyYW5zZm9ybSA9IG1hc2tEYXRhLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgLy9UT0RPIHN1cG9ydCBzcHJpdGUgYWxwaGEgbWFza3M/P1xuICAgIC8vbG90cyBvZiBlZmZvcnQgcmVxdWlyZWQuIElmIGRlbWFuZCBpcyBncmVhdCBlbm91Z2guLlxuICAgIGlmKCFtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrKG1hc2tEYXRhLCByZW5kZXJlci5jb250ZXh0KTtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5jbGlwKCk7XG4gICAgfVxuXG4gICAgbWFza0RhdGEud29ybGRBbHBoYSA9IGNhY2hlQWxwaGE7XG59O1xuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dCB0byB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZSB0aGUgbWFzayB3YXMgYXBwbGllZC5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLmNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7fTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2RzIGZvciBTcHJpdGUvVGV4dHVyZSB0aW50aW5nLlxuICogQHN0YXRpY1xuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG52YXIgQ2FudmFzVGludGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1RpbnRlcjtcblxuLyoqXG4gKiBCYXNpY2FsbHkgdGhpcyBtZXRob2QganVzdCBuZWVkcyBhIHNwcml0ZSBhbmQgYSBjb2xvciBhbmQgdGludHMgdGhlIHNwcml0ZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSB0aW50ZWQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlID0gZnVuY3Rpb24gKHNwcml0ZSwgY29sb3IpXG57XG4gICAgdmFyIHRleHR1cmUgPSBzcHJpdGUudGV4dHVyZTtcblxuICAgIGNvbG9yID0gQ2FudmFzVGludGVyLnJvdW5kQ29sb3IoY29sb3IpO1xuXG4gICAgdmFyIHN0cmluZ0NvbG9yID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgdGV4dHVyZS50aW50Q2FjaGUgPSB0ZXh0dXJlLnRpbnRDYWNoZSB8fCB7fTtcblxuICAgIGlmICh0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0pXG4gICAge1xuICAgICAgICByZXR1cm4gdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdO1xuICAgIH1cblxuICAgICAvLyBjbG9uZSB0ZXh0dXJlLi5cbiAgICB2YXIgY2FudmFzID0gQ2FudmFzVGludGVyLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8vQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWwodGV4dHVyZSwgc3RyaW5nQ29sb3IsIGNhbnZhcyk7XG4gICAgQ2FudmFzVGludGVyLnRpbnRNZXRob2QodGV4dHVyZSwgY29sb3IsIGNhbnZhcyk7XG5cbiAgICBpZiAoQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSlcbiAgICB7XG4gICAgICAgIC8vIGlzIHRoaXMgYmV0dGVyP1xuICAgICAgICB2YXIgdGludEltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHRpbnRJbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKCk7XG5cbiAgICAgICAgdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdID0gdGludEltYWdlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSBjYW52YXM7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBub3QgY29udmVydGluZyB0aGUgdGV4dHVyZSB0byBhbiBpbWFnZSB0aGVuIHdlIG5lZWQgdG8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXNcbiAgICAgICAgQ2FudmFzVGludGVyLmNhbnZhcyA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdtdWx0aXBseScgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcblxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdvdmVybGF5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoT3ZlcmxheSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1hdG9wJztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgLy8gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG59O1xuXG4vKipcbiAqIFRpbnQgYSB0ZXh0dXJlIHBpeGVsIHBlciBwaXhlbC5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcbiAgICB2YXIgciA9IHJnYlZhbHVlc1swXSwgZyA9IHJnYlZhbHVlc1sxXSwgYiA9IHJnYlZhbHVlc1syXTtcblxuICAgIHZhciBwaXhlbERhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICB2YXIgcGl4ZWxzID0gcGl4ZWxEYXRhLmRhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBpeGVscy5sZW5ndGg7IGkgKz0gNClcbiAgICB7XG4gICAgICAgIHBpeGVsc1tpKzBdICo9IHI7XG4gICAgICAgIHBpeGVsc1tpKzFdICo9IGc7XG4gICAgICAgIHBpeGVsc1tpKzJdICo9IGI7XG4gICAgfVxuXG4gICAgY29udGV4dC5wdXRJbWFnZURhdGEocGl4ZWxEYXRhLCAwLCAwKTtcbn07XG5cbi8qKlxuICogUm91bmRzIHRoZSBzcGVjaWZpZWQgY29sb3IgYWNjb3JkaW5nIHRvIHRoZSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbC5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHJvdW5kLCBzaG91bGQgYmUgYSBoZXggY29sb3JcbiAqL1xuQ2FudmFzVGludGVyLnJvdW5kQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IpXG57XG4gICAgdmFyIHN0ZXAgPSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbDtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcblxuICAgIHJnYlZhbHVlc1swXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1swXSAvIHN0ZXApICogc3RlcCk7XG4gICAgcmdiVmFsdWVzWzFdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzFdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMl0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMl0gLyBzdGVwKSAqIHN0ZXApO1xuXG4gICAgcmV0dXJuIHV0aWxzLnJnYjJoZXgocmdiVmFsdWVzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGNhcCB3aGVuIHJvdW5kaW5nIGNvbG9ycy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsID0gODtcblxuLyoqXG4gKiBUaW50IGNhY2hlIGJvb2xlYW4gZmxhZy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jb252ZXJ0VGludFRvSW1hZ2UgPSBmYWxzZTtcblxuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCwgY29uc2VxdWVudGx5IHRoZSBhYmlsaXR5IHRvIHRpbnQgdXNpbmcgdGhlIG11bHRpcGx5IG1ldGhvZC5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA9IHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKTtcblxuLyoqXG4gKiBUaGUgdGludGluZyBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQuXG4gKlxuICovXG5DYW52YXNUaW50ZXIudGludE1ldGhvZCA9IENhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA/IENhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5IDogIENhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsO1xuIiwidmFyIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcblx0dXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIFRleHR1cmVNYW5hZ2VyID0gZnVuY3Rpb24oZ2wpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyB0cmFjayB0ZXh0dXJlcyBpbiB0aGUgcmVuZGVyZXIgc28gd2UgY2FuIG5vIGxvbmdlciBsaXN0ZW4gdG8gdGhlbSBvbiBkZXN0cnVjdGlvbi5cblx0dGhpcy5fbWFuYWdlZFRleHR1cmVzID0gW107XG4gICAgdGhpcy5nbFRleHR1cmVzID0ge307XG5cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5nZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW5kL29yIENyZWF0ZXMgYSBXZWJHTCB0ZXh0dXJlIGZvciB0aGUgcmVuZGVyZXIncyBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdXBkYXRlXG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuXHRpZiAoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGdsVGV4dHVyZSA9IHRoaXMuZ2xUZXh0dXJlc1t0ZXh0dXJlLnVpZF0vL3RleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgaWYgKCFnbFRleHR1cmUpXG4gICAge1xuICAgICAgICBnbFRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcbiAgICAgICAgZ2xUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSB0cnVlXG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgLy8gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXSA9IGdsVGV4dHVyZTtcblxuICAgICAgICB0ZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9uKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICBnbFRleHR1cmUudXBsb2FkKHRleHR1cmUuc291cmNlKTtcbiAgICBcbiAgICAvL1RPRE8gY2hlY2sgaXMgcG93ZXIgb2YgdHdvLi5cbiAgICBnbFRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cblxuICAgIC8vIFRPRE8gY2hlY2sgZm9yIHNjYWxpbmcgdHlwZVxuICAgIGdsVGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKCk7XG5cbiAgICByZXR1cm4gIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTFxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gZGVzdHJveVxuICovXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlLCBfc2tpcFJlbW92ZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0pXG4gICAge1xuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG5cblxuICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcblxuICAgICAgICBpZiAoIV9za2lwUmVtb3ZlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5pbmRleE9mKHRleHR1cmUpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5fbWFuYWdlZFRleHR1cmVzLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKClcbntcblx0Ly8gZW1wdHkgYWxsIHRoZSBvbGQgZ2wgdGV4dHVyZXMgYXMgdGhleSBhcmUgdXNlbGVzcyBub3dcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzW2ldO1xuICAgICAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuICAgIC8vIGRlc3Ryb3kgbWFuYWdlZCB0ZXh0dXJlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIHRoaXMuZGVzdHJveVRleHR1cmUodGV4dHVyZSwgdHJ1ZSk7XG4gICAgICAgIHRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9mZignZGlzcG9zZScsIHRoaXMuZGVzdHJveVRleHR1cmUsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcyA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZU1hbmFnZXI7XG5cbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgU2hhZGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIE1hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9NYXNrTWFuYWdlcicpLFxuICAgIFN0ZW5jaWxNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlcicpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBCbGVuZE1vZGVNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4vdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBGWEFBRmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBUZXh0dXJlTWFuYWdlciA9IHJlcXVpcmUoJy4vVGV4dHVyZU1hbmFnZXInKSxcbiAgICBjcmVhdGVDb250ZXh0ID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuY3JlYXRlQ29udGV4dCxcbiAgICBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aScpLFxuICAgIG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpID0gcmVxdWlyZSgnLi91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFdlYkdMUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIHdlYkdMIGVuYWJsZWQgY2FudmFzLiBUaGlzIHJlbmRlcmVyXG4gKiBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMLiBUaGlzIFJlbmRlciB3b3JrcyBieSBhdXRvbWF0aWNhbGx5IG1hbmFnaW5nIHdlYkdMQmF0Y2hzLlxuICogU28gbm8gbmVlZCBmb3IgU3ByaXRlIEJhdGNoZXMgb3IgU3ByaXRlIENsb3Vkcy5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIHZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9MF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9MF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMuIElmIG5vdCBhdmFpbGFibGUgbmF0aXZlbHkgdGhlbiBGWEFBIGFudGlhbGlhc2luZyBpcyB1c2VkXG4gKiBAcGFyYW0gW29wdGlvbnMuZm9yY2VGWEFBPWZhbHNlXSB7Ym9vbGVhbn0gZm9yY2VzIEZYQUEgYW50aWFsaWFzaW5nIHRvIGJlIHVzZWQgb3ZlciBuYXRpdmUuIEZYQUEgaXMgZmFzdGVyLCBidXQgbWF5IG5vdCBhbHdheXMgbG9vayBhcyBncmVhdFxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy4gSWYgeW91IHdpc2ggdG8gc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSAqbXVzdCogc2V0IHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byBgdHJ1ZWAuXG4gKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmXG4gKiAgICAgIHlvdSBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0LlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ1dlYkdMJywgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIHJlbmRlcmVyIGFzIGEgc3RhbmRhcmRpc2VkIGNvbnN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9Ly9cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0w7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gdGhpcy5oYW5kbGVDb250ZXh0TG9zdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5oYW5kbGVDb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gY3JlYXRlIGEgbmV3IHdlYmdsIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgICAgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQsXG4gICAgICAgIGFudGlhbGlhczogb3B0aW9ucy5hbnRpYWxpYXMsXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnRyYW5zcGFyZW50ICE9PSAnbm90TXVsdGlwbGllZCcsXG4gICAgICAgIHN0ZW5jaWw6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICB9O1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYVszXSA9IHRoaXMudHJhbnNwYXJlbnQgPyAwIDogMTtcblxuICAgIC8qKlxuICAgICAqIERlYWxzIHdpdGggbWFuYWdpbmcgdGhlIHNoYWRlciBwcm9ncmFtcyBhbmQgdGhlaXIgYXR0cmlicy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBuZXcgU2hhZGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1hc2tzIHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWFza01hbmFnZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG5ldyBNYXNrTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyID0gbmV3IFN0ZW5jaWxNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRmlsdGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlck1hbmFnZXIgPSBuZXcgRmlsdGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIGJsZW5kTW9kZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmxlbmRNb2RlTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBuZXcgQmxlbmRNb2RlTWFuYWdlcih0aGlzKTtcblxuICAgIFxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIE9iamVjdFJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5PYmplY3RSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG5ldyBPYmplY3RSZW5kZXJlcih0aGlzKTtcblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIGNvbnRleHQgc28gaXQgaXMgcmVhZHkgZm9yIHRoZSBtYW5hZ2Vycy5cbiAgICB0aGlzLmdsID0gY3JlYXRlQ29udGV4dCh0aGlzLnZpZXcsIHRoaXMuX2NvbnRleHRPcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXRDb250ZXh0KCk7XG5cbiAgICAvLyBtYXAgc29tZSB3ZWJHTCBibGVuZCBhbmQgZHJhd21vZGVzLi5cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wpO1xuICAgIHRoaXMuZHJhd01vZGVzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wpXG5cbiAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXR9XG4gICAgICovXG4gICAgdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUZXh0dXJlTG9jYXRpb24gPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oV2ViR0xSZW5kZXJlcik7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgV2ViR0wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLl9pbml0Q29udGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgbWFuYWdlci4uLlxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hbmFnZXIoZ2wpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBkZWZhdWx0IHBpeGkgc2V0dGluZ3MuLlxuICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG5cblxuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBudWxsLCB0aGlzLnJlc29sdXRpb24sIHRydWUpO1xuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5jbGVhckNvbG9yID0gdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYTtcbiAgICBcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQodGhpcy5yb290UmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMuZW1pdCgnY29udGV4dCcsIGdsKTtcblxuICAgIC8vIHNldHVwIHRoZSB3aWR0aC9oZWlnaHQgcHJvcGVydGllcyBhbmQgZ2wgdmlld3BvcnRcbiAgICB0aGlzLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7ICAgIFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gaXRzIHdlYkdMIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIC8vIG5vIHBvaW50IHJlbmRlcmluZyBpZiBvdXIgY29udGV4dCBoYXMgYmVlbiBibG93biB1cCFcbiAgICBpZiAodGhpcy5nbC5pc0NvbnRleHRMb3N0KCkpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gZGlzcGxheU9iamVjdDtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IGRpc3BsYXlPYmplY3QucGFyZW50O1xuICAgIGRpc3BsYXlPYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIGRpc3BsYXlPYmplY3QudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnJvb3RSZW5kZXJUYXJnZXQsIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpOy8vdGhpcy5wcm9qZWN0aW9uKTtcblxuICAgIHRoaXMuZW1pdCgncG9zdHJlbmRlcicpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgRGlzcGxheSBPYmplY3QuXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0gcmVuZGVyVGFyZ2V0IHtQSVhJLlJlbmRlclRhcmdldH0gVGhlIHJlbmRlciB0YXJnZXQgdG8gdXNlIHRvIHJlbmRlciB0aGlzIGRpc3BsYXkgb2JqZWN0XG4gKlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJEaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHJlbmRlclRhcmdldCwgY2xlYXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgdGhpcy5iaW5kUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG5cbiAgICBpZihjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IHRoZSBmaWx0ZXIgbWFuYWdlclxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5zZXRGaWx0ZXJTdGFjayggcmVuZGVyVGFyZ2V0LmZpbHRlclN0YWNrICk7XG5cbiAgICAvLyByZW5kZXIgdGhlIHNjZW5lIVxuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyV2ViR0wodGhpcyk7XG5cbiAgICAvLyBmaW5pc2ggdGhlIGN1cnJlbnQgcmVuZGVyZXIuLlxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdGhlIG9uZSBnaXZlbiBpbiBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gb2JqZWN0UmVuZGVyZXIge1BJWEkuT2JqZWN0UmVuZGVyZXJ9IFRoZSBvYmplY3QgcmVuZGVyZXIgdG8gdXNlLlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRPYmplY3RSZW5kZXJlciA9IGZ1bmN0aW9uIChvYmplY3RSZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyZXIgPT09IG9iamVjdFJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0b3AoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG9iamVjdFJlbmRlcmVyO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHdlYkdMIHZpZXcgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB3ZWJHTCB2aWV3XG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB3ZWJHTCB2aWV3XG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9PT0gdGhpcy5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSB0aGUgbmV3IHJlbmRlciB0YXJnZXRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgaWYocmVuZGVyVGFyZ2V0ICE9PSB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcblxuICAgICAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLnNldE1hc2tTdGFjayggcmVuZGVyVGFyZ2V0LnN0ZW5jaWxNYXNrU3RhY2sgKTtcbiAgICB9XG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKS8vcHJvamVjdGlvbiwgYnVmZmVyKVxue1xuICAgIC8vVE9ETyBjYWNoZVxuICAgIGlmKHRoaXMuX2FjdGl2ZVNoYWRlciAhPT0gc2hhZGVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlU2hhZGVyID0gc2hhZGVyO1xuICAgICAgICBzaGFkZXIuYmluZCgpO1xuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgfVxufVxuXG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvY2F0aW9uKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvL1RPRE8gdGVzdCBwZXJmIG9mIGNhY2hlP1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gfHwgMDtcblxuICAgIGlmKHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiAhPT0gbG9jYXRpb24pLy9cbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbiApO1xuICAgIH1cblxuICAgIC8vVE9ETyAtIGNhbiB3ZSBjYWNoZSB0aGlzIHRleHR1cmUgdG9vP1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOyAgICAgIFxuICAgIFxuICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBiaW5kIHRoZSB0ZXh0dXJlLi5cbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0uYmluZCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEhhbmRsZXMgYSBsb3N0IHdlYmdsIGNvbnRleHRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5oYW5kbGVDb250ZXh0TG9zdCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGEgcmVzdG9yZWQgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnJlbW92ZUFsbCgpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgKGV2ZW50IGxpc3RlbmVycywgc3ByaXRlYmF0Y2gsIGV0Yy4uLilcbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldylcbntcbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICAvLyByZW1vdmUgbGlzdGVuZXJzXG4gICAgdGhpcy52aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0KTtcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCk7XG5cbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLmRlc3Ryb3lBbGwoKTtcblxuICAgIC8vIGNhbGwgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMudWlkID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIG1hbmFnZXJzXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLm1hc2tNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gbnVsbDtcbiAgICB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLnVzZVByb2dyYW0obnVsbCk7XG4gICAgdGhpcy5nbCA9IG51bGw7XG59O1xuXG4iLCJ2YXIgRGVmYXVsdFNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgUElYSSBmaWx0ZXIuIEN1cnJlbnRseSBvbmx5IFdlYkdMIHN1cHBvcnRzIGZpbHRlcnMuXG4gKiBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIGZpbHRlciB0aGlzIHNob3VsZCBiZSB5b3VyIGJhc2UgY2xhc3MuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHZlcnRleFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdmVydGV4IHNoYWRlciBzb3VyY2UgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBmcmFnbWVudFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIHVuaWZvcm1zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1bmlmb3JtcyBmb3IgdGhpcyBmaWx0ZXIuXG4gKi9cbmZ1bmN0aW9uIEFic3RyYWN0RmlsdGVyKHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zKVxue1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygc2hhZGVyc1xuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlcnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHRyYSBwYWRkaW5nIHRoYXQgdGhlIGZpbHRlciBtaWdodCBuZWVkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIHZlcnRleCBzaGFkZXJcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmdbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmVydGV4U3JjID0gdmVydGV4U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIG9mIHRoZSBmcmFtZW50IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgLy9UT0RPIGEgcmVtaW5kZXIgLSB3b3VsZCBiZSBjb29sIHRvIGhhdmUgbG93ZXIgcmVzIGZpbHRlcnMgYXMgdGhpcyB3b3VsZCBnaXZlIGJldHRlciBwZXJmb3JtYW5jZS5cblxuICAgIC8vdHlwZW9mIGZyYWdtZW50U3JjID09PSAnc3RyaW5nJyA/IGZyYWdtZW50U3JjLnNwbGl0KCcnKSA6IChmcmFnbWVudFNyYyB8fCBbXSk7XG5cbn1cblxuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RmlsdGVyO1xuXG4vKipcbiAqIEdyYWJzIGEgc2hhZGVyIGZyb20gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBzaGFkZXIgZnJvbVxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuZ2V0U2hhZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyc1tnbC5pZF07XG5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IG5ldyBEZWZhdWx0U2hhZGVyKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIsXG4gICAgICAgICAgICB0aGlzLnZlcnRleFNyYyxcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRTcmMsXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaGFkZXJzW2dsLmlkXSA9IHNoYWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbn07XG5cbi8qKlxuICogU3luY3MgYSB1bmlmb3JtIGJldHdlZW4gdGhlIGNsYXNzIG9iamVjdCBhbmQgdGhlIHNoYWRlcnMuXG4gKlxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuc2hhZGVycy5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnNoYWRlcnNbaV0uc3luY1VuaWZvcm0odW5pZm9ybSk7XG4gICAgfVxufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKlxuICogQmFzaWMgRlhBQSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgY29kZSBvbiBnZWVrczNkLmNvbSB3aXRoIHRoZVxuICogbW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXG4gKiB1bnN1cHBvcnRlZCBieSBXZWJHTC5cbiAqXG4gKiAtLVxuICogRnJvbTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICpcbiAqL1xuZnVuY3Rpb24gRlhBQUZpbHRlcigpXG57XG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxuXFxudm9pZCB0ZXhjb29yZHModmVjMiBmcmFnQ29vcmQsIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk5XLCBvdXQgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiU1csIG91dCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzIgaW52ZXJzZVZQID0gMS4wIC8gcmVzb2x1dGlvbi54eTtcXG4gICAgdl9yZ2JOVyA9IChmcmFnQ29vcmQgKyB2ZWMyKC0xLjAsIC0xLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JORSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYlNXID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU0UgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIDEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk0gPSB2ZWMyKGZyYWdDb29yZCAqIGludmVyc2VWUCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbiAgIHZSZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcXG5cXG4gICAvL2NvbXB1dGUgdGhlIHRleHR1cmUgY29vcmRzIGFuZCBzZW5kIHRoZW0gdG8gdmFyeWluZ3NcXG4gICB0ZXhjb29yZHMoYVRleHR1cmVDb29yZCAqIHJlc29sdXRpb24sIHJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG5cXG4vKipcXG5CYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXFxubW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXFxudW5zdXBwb3J0ZWQgYnkgV2ViR0wuXFxuXFxuLS1cXG5cXG5Gcm9tOlxcbmh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XFxuXFxuQ29weXJpZ2h0IChjKSAyMDExIGJ5IEFybWluIFJvbmFjaGVyLlxcblxcblNvbWUgcmlnaHRzIHJlc2VydmVkLlxcblxcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcXG5tZXQ6XFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcXG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxcbiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXFxuICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXFxuICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxcblxcbiAgICAqIFRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yXFxuICAgICAgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljXFxuICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxcblxcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcXG5cXFwiQVMgSVNcXFwiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxcbkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXFxuT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXFxuU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxcblRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxcbiovXFxuXFxuI2lmbmRlZiBGWEFBX1JFRFVDRV9NSU5cXG4gICAgI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gICAoMS4wLyAxMjguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01VTFxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAgICgxLjAgLyA4LjApXFxuI2VuZGlmXFxuI2lmbmRlZiBGWEFBX1NQQU5fTUFYXFxuICAgICNkZWZpbmUgRlhBQV9TUEFOX01BWCAgICAgOC4wXFxuI2VuZGlmXFxuXFxuLy9vcHRpbWl6ZWQgdmVyc2lvbiBmb3IgbW9iaWxlLCB3aGVyZSBkZXBlbmRlbnRcXG4vL3RleHR1cmUgcmVhZHMgY2FuIGJlIGEgYm90dGxlbmVja1xcbnZlYzQgZnhhYShzYW1wbGVyMkQgdGV4LCB2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JOVywgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JTVywgdmVjMiB2X3JnYlNFLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzQgY29sb3I7XFxuICAgIG1lZGl1bXAgdmVjMiBpbnZlcnNlVlAgPSB2ZWMyKDEuMCAvIHJlc29sdXRpb24ueCwgMS4wIC8gcmVzb2x1dGlvbi55KTtcXG4gICAgdmVjMyByZ2JOVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTlcpLnh5ejtcXG4gICAgdmVjMyByZ2JORSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTkUpLnh5ejtcXG4gICAgdmVjMyByZ2JTVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU1cpLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU0UpLnh5ejtcXG4gICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTSk7XFxuICAgIHZlYzMgcmdiTSAgPSB0ZXhDb2xvci54eXo7XFxuICAgIHZlYzMgbHVtYSA9IHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdChyZ2JOVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFORSA9IGRvdChyZ2JORSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTVyA9IGRvdChyZ2JTVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdChyZ2JTRSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNICA9IGRvdChyZ2JNLCAgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNaW4gPSBtaW4obHVtYU0sIG1pbihtaW4obHVtYU5XLCBsdW1hTkUpLCBtaW4obHVtYVNXLCBsdW1hU0UpKSk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgobHVtYU0sIG1heChtYXgobHVtYU5XLCBsdW1hTkUpLCBtYXgobHVtYVNXLCBsdW1hU0UpKSk7XFxuXFxuICAgIG1lZGl1bXAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcblxcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoKGx1bWFOVyArIGx1bWFORSArIGx1bWFTVyArIGx1bWFTRSkgKlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwpLCBGWEFBX1JFRFVDRV9NSU4pO1xcblxcbiAgICBmbG9hdCByY3BEaXJNaW4gPSAxLjAgLyAobWluKGFicyhkaXIueCksIGFicyhkaXIueSkpICsgZGlyUmVkdWNlKTtcXG4gICAgZGlyID0gbWluKHZlYzIoRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBtYXgodmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiBpbnZlcnNlVlA7XFxuXFxuICAgIHZlYzMgcmdiQSA9IDAuNSAqIChcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqICgxLjAgLyAzLjAgLSAwLjUpKS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDIuMCAvIDMuMCAtIDAuNSkpLnh5eik7XFxuICAgIHZlYzMgcmdiQiA9IHJnYkEgKiAwLjUgKyAwLjI1ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogLTAuNSkueHl6ICtcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqIDAuNSkueHl6KTtcXG5cXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QocmdiQiwgbHVtYSk7XFxuICAgIGlmICgobHVtYUIgPCBsdW1hTWluKSB8fCAobHVtYUIgPiBsdW1hTWF4KSlcXG4gICAgICAgIGNvbG9yID0gdmVjNChyZ2JBLCB0ZXhDb2xvci5hKTtcXG4gICAgZWxzZVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkIsIHRleENvbG9yLmEpO1xcbiAgICByZXR1cm4gY29sb3I7XFxufVxcblxcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBmeGFhKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICogdlJlc29sdXRpb24sIHZSZXNvbHV0aW9uLCB2X3JnYk5XLCB2X3JnYk5FLCB2X3JnYlNXLCB2X3JnYlNFLCB2X3JnYk0pO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxufVxuXG5GWEFBRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkZYQUFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRlhBQUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRlhBQUZpbHRlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICovXG5GWEFBRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIoIHJlbmRlcmVyICk7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG4iLCJ2YXIgQWJzdHJhY3RGaWx0ZXIgPSByZXF1aXJlKCcuL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgU3ByaXRlTWFza0ZpbHRlciBjbGFzc1xuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICovXG5mdW5jdGlvbiBTcHJpdGVNYXNrRmlsdGVyKHNwcml0ZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXNrQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICAgdk1hc2tDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIC8vIGNoZWNrIGNsaXAhIHRoaXMgd2lsbCBzdG9wIHRoZSBtYXNrIGJsZWVkaW5nIG91dCBmcm9tIHRoZSBlZGdlc1xcbiAgICB2ZWMyIHRleHQgPSBhYnMoIHZNYXNrQ29vcmQgLSAwLjUgKTtcXG4gICAgdGV4dCA9IHN0ZXAoMC41LCB0ZXh0KTtcXG4gICAgZmxvYXQgY2xpcCA9IDEuMCAtIG1heCh0ZXh0LnksIHRleHQueCk7XFxuICAgIHZlYzQgb3JpZ2luYWwgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgICB2ZWM0IG1hc2t5ID0gdGV4dHVyZTJEKG1hc2ssIHZNYXNrQ29vcmQpO1xcbiAgICBvcmlnaW5hbCAqPSAobWFza3kuciAqIG1hc2t5LmEgKiBhbHBoYSAqIGNsaXApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBvcmlnaW5hbDtcXG59XFxuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hc2s6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLl90ZXh0dXJlIH0sXG4gICAgICAgICAgICBhbHBoYTogICAgICAgICAgeyB0eXBlOiAnZicsIHZhbHVlOiAxfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG59XG5cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVNYXNrRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVNYXNrRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS5fdGV4dHVyZTtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS53b3JsZEFscGhhO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHVzZWQgdG8gbW92ZSB0aGUgZGlzcGxhY2VtZW50IG1hcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlTWFza0ZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHbE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQmxlbmRNb2RlTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59XG5cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmRNb2RlTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxlbmRNb2RlTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzLXVwIHRoZSBnaXZlbiBibGVuZE1vZGUgZnJvbSBXZWJHTCdzIHBvaW50IG9mIHZpZXcuXG4gKlxuICogQHBhcmFtIGJsZW5kTW9kZSB7bnVtYmVyfSB0aGUgYmxlbmRNb2RlLCBzaG91bGQgYmUgYSBQaXhpIGNvbnN0LCBzdWNoIGFzIGBQSVhJLkJMRU5EX01PREVTLkFERGAuIFNlZVxuICogIHtAbGluayBQSVhJLkJMRU5EX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICovXG5CbGVuZE1vZGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRCbGVuZE1vZGUgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPT09IGJsZW5kTW9kZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMucmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmN1cnJlbnRCbGVuZE1vZGVdO1xuICAgIHRoaXMucmVuZGVyZXIuZ2wuYmxlbmRGdW5jKG1vZGVbMF0sIG1vZGVbMV0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpLFxuICAgIFF1YWQgPSByZXF1aXJlKCcuLi91dGlscy9RdWFkJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gRmlsdGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW107XG5cbiAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICByZW5kZXJUYXJnZXQ6cmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldCxcbiAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICBib3VuZHM6bnVsbFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgLy8gbGlzdGVuIGZvciBjb250ZXh0IGFuZCB1cGRhdGUgbmVjZXNzYXJ5IGJ1ZmZlcnNcbiAgICAvL1RPRE8gbWFrZSB0aGlzIGR5bmFtaWMhXG4gICAgLy9UT0RPIHRlc3QgdGhpcyBvdXQgYnkgZm9yY2VzIHBvd2VyIG9mIHR3bz9cbiAgICB0aGlzLnRleHR1cmVTaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZnJhbWVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcbn1cblxuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWx0ZXJNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBGaWx0ZXJNYW5hZ2VyO1xuXG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnF1YWQgPSBuZXcgUXVhZChnbCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHBhcmFtIGJ1ZmZlciB7QXJyYXlCdWZmZXJ9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnNldEZpbHRlclN0YWNrID0gZnVuY3Rpb24gKCBmaWx0ZXJTdGFjayApXG57XG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IGZpbHRlclN0YWNrO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXIgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBmaWx0ZXJzIHtQSVhJLkFic3RyYWN0RmlsZXJbXX0gdGhlIGZpbHRlcnMgdGhhdCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2tcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucHVzaEZpbHRlciA9IGZ1bmN0aW9uICh0YXJnZXQsIGZpbHRlcnMpXG57XG4gICAgLy8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdC4uXG4gICAgLy8gVE9ETyByZXBsYWNlIGNsb25lIHdpdGggYSBjb3B5IHRvIHNhdmUgb2JqZWN0IGNyZWF0aW9uXG4gICAgdmFyIGJvdW5kcyA9IHRhcmdldC5maWx0ZXJBcmVhID8gdGFyZ2V0LmZpbHRlckFyZWEuY2xvbmUoKSA6IHRhcmdldC5nZXRCb3VuZHMoKTtcblxuICAgIC8vYm91bmRzID0gYm91bmRzLmNsb25lKCk7XG5cbiAgICAvLyByb3VuZCBvZmYgdGhlIHJlY3RhbmdsZSB0byBnZXQgYSBuaWNlIHNtb29vb29vb3RoIGZpbHRlciA6KVxuICAgIGJvdW5kcy54ID0gYm91bmRzLnggfCAwO1xuICAgIGJvdW5kcy55ID0gYm91bmRzLnkgfCAwO1xuICAgIGJvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCB8IDA7XG4gICAgYm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgfCAwO1xuXG5cbiAgICAvLyBwYWRkaW5nIVxuICAgIHZhciBwYWRkaW5nID0gZmlsdGVyc1swXS5wYWRkaW5nIHwgMDtcbiAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG5cblxuICAgIGlmKHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvL1RPRE8gdGhpcyB3aWxsIGJyZWFrIGlmIHRoZSByZW5kZXJUZXh0dXJlIHRyYW5zZm9ybSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgdHJhbnNsYXRpb24uXG4gICAgICAgIC8vV2lsbCBuZWVkIHRvIHRha2UgdGhlIGZ1bGwgbWF0cml4IHRyYW5zZm9ybSBpbnRvIGFjb3VudC4uXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQudHJhbnNmb3JtO1xuXG4gICAgICAgIGJvdW5kcy54ICs9IHRyYW5zZm9ybS50eDtcbiAgICAgICAgYm91bmRzLnkgKz0gdHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG5cbiAgICAgICAgYm91bmRzLnggLT0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSAtPSB0cmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgICB0aGlzLmNhcEZpbHRlckFyZWEoIGJvdW5kcyApO1xuICAgIH1cblxuICAgIGlmKGJvdW5kcy53aWR0aCA+IDAgJiYgYm91bmRzLmhlaWdodCA+IDApXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGJvdW5kcztcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGV4dHVyZSk7XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRleHR1cmUuLlxuICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gVE9ETyBnZXQgcmlkIG9mIG9iamVjdCBjcmVhdGlvbiFcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogdGV4dHVyZSxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBwdXNoIHNvbXRoaW5nIG9uIHRvIHRoZSBzdGFjayB0aGF0IGlzIGVtcHR5XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcnNcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnBvcEZpbHRlciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrLnBvcCgpO1xuICAgIHZhciBwcmV2aW91c0ZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrW3RoaXMuZmlsdGVyU3RhY2subGVuZ3RoLTFdO1xuXG4gICAgdmFyIGlucHV0ID0gZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyBpZiB0aGUgcmVuZGVyVGFyZ2V0IGlzIG51bGwgdGhlbiB3ZSBkb24ndCBhcHBseSB0aGUgZmlsdGVyIGFzIGl0cyBvZmZzY3JlZW5cbiAgICBpZighZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IHByZXZpb3VzRmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyB1c2UgcHJvZ3JhbVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaW5wdXQuZnJhbWU7XG5cbiAgICB0aGlzLnF1YWQubWFwKHRoaXMudGV4dHVyZVNpemUsIGlucHV0LmZyYW1lKTtcblxuXG4gICAgLy8gVE9ETy4uIHRoaXMgcHJvYmFibHkgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgZmlsdGVycyA9IGZpbHRlckRhdGEuZmlsdGVyO1xuXG4gICAgLy8gYXNzdW1pbmcgYWxsIGZpbHRlcnMgZm9sbG93IHRoZSBjb3JyZWN0IGZvcm1hdD8/XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAyICogNCAqIDQpO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIG5vcm1hbCBibGVuZG1vZGUhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShDT05TVC5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAxKVxuICAgIHtcbiAgICAgICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoZW4gc2V0dGluZyB0aGlzIGVhY2ggdGltZT9cbiAgICAgICAgaWYgKGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgIGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1swXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgaW5wdXQsIG91dHB1dCApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggaW5wdXQgKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZmxpcFRleHR1cmUgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3BUZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aC0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICAgICAgaWYgKGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBmbG9wVGV4dHVyZSApO1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGZsaXBUZXh0dXJlO1xuICAgICAgICAgICAgZmxpcFRleHR1cmUgPSBmbG9wVGV4dHVyZTtcbiAgICAgICAgICAgIGZsb3BUZXh0dXJlID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlcnNbZmlsdGVycy5sZW5ndGgtMV0uYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBvdXRwdXQgKTtcblxuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxpcFRleHR1cmUgKTtcbiAgICAgICAgdGhpcy5yZXR1cm5SZW5kZXJUYXJnZXQoIGZsb3BUZXh0dXJlICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckRhdGEuZmlsdGVyO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY2xlYXIgdGhlIFJlbmRlclRhcmdldFxuICogQHJldHVybiB7UmVuZGVyVGFyZ2V0fVxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIGNsZWFyIClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy50ZXh0dXJlUG9vbC5wb3AoKSB8fCBuZXcgUmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyZXIuZ2wsIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0LCBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiAqIENPTlNULkZJTFRFUl9SRVNPTFVUSU9OKTtcbiAgICByZW5kZXJUYXJnZXQuZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcih0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyVGFyZ2V0O1xufTtcblxuLypcbiAqIFJldHVybnMgYSBSZW5kZXJUYXJnZXQgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1JlbmRlclRhcmdldH0gVGhlIFJlbmRlclRhcmdldCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5SZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0KVxue1xuICAgIHRoaXMudGV4dHVyZVBvb2wucHVzaCggcmVuZGVyVGFyZ2V0ICk7XG59O1xuXG4vKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2hhZGVyIHtTaGFkZXJ9IFRoZSBzaGFkZXIgdG8gdXBsb2FkXG4gKiBAcGFyYW0gaW5wdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBjbGVhciB0aGUgb3V0cHV0VGFyZ2V0XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHNoYWRlciwgaW5wdXRUYXJnZXQsIG91dHB1dFRhcmdldCwgY2xlYXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG91dHB1dFRhcmdldCk7XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICBvdXRwdXRUYXJnZXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHNoYWRlclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gQ2FuIHRoaXMgYmUgY2FjaGVkIGFuZCBub3QgYHRvQXJyYXlgZWQgZWFjaCBmcmFtZT9cbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG5cbiAgICAvL1RPRE8gY2FuIHRoaXMgYmUgb3B0aW1pc2VkP1xuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcbi8qXG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcbiovXG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBpbnB1dFRhcmdldC50ZXh0dXJlKTtcblxuICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbn07XG5cbi8qXG4gKiBDYWxjdWxhdGVzIHRoZSBtYXBwZWQgbWF0cml4XG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWFcbiAqIEBwYXJhbSBzcHJpdGUge1Nwcml0ZX0gdGhlIHRhcmdldCBzcHJpdGVcbiAqIEBwYXJhbSBvdXRwdXRNYXRyaXgge01hdHJpeH0gQGFsdmluXG4gKi9cbi8vIFRPRE8gcGxheWluZyBhcm91bmQgaGVyZS4uIHRoaXMgaXMgdGVtcG9yYXJ5IC0gKHdpbGwgZW5kIHVwIGluIHRoZSBzaGFkZXIpXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jYWxjdWxhdGVNYXBwZWRNYXRyaXggPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSwgc3ByaXRlLCBvdXRwdXRNYXRyaXgpXG57XG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gc3ByaXRlLndvcmxkVHJhbnNmb3JtLmNvcHkobWF0aC5NYXRyaXguVEVNUF9NQVRSSVgpLFxuICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICB2YXIgbWFwcGVkTWF0cml4ID0gb3V0cHV0TWF0cml4LmlkZW50aXR5KCk7XG5cbiAgICAvLyBzY2FsZS4uXG4gICAgdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCApO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKDEgLCByYXRpbyk7XG5cbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyB0ZXh0dXJlLndpZHRoKTtcbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gdGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0udHggLz0gdGV4dHVyZS53aWR0aCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICB3b3JsZFRyYW5zZm9ybS50eSAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0uaW52ZXJ0KCk7XG5cbiAgICBtYXBwZWRNYXRyaXgucHJlcGVuZCh3b3JsZFRyYW5zZm9ybSk7XG5cbiAgICAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIG1hcHBlZE1hdHJpeC50cmFuc2xhdGUoc3ByaXRlLmFuY2hvci54LCBzcHJpdGUuYW5jaG9yLnkpO1xuXG4gICAgcmV0dXJuIG1hcHBlZE1hdHJpeDtcblxuICAgIC8vIEtlZXBpbmcgdGhlIG9yZ2luYWwgYXMgYSByZW1pbmRlciB0byBtZSBvbiBob3cgdGhpcyB3b3JrcyFcbiAgICAvL1xuICAgIC8vIHZhciBtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvLyAvLyBzY2FsZS4uXG4gICAgLy8gdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgLy8gbS50cmFuc2xhdGUoZmlsdGVyQXJlYS54IC8gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgZmlsdGVyQXJlYS55IC8gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQpO1xuXG5cbiAgICAvLyBtLnNjYWxlKDEgLCByYXRpbyk7XG5cblxuICAgIC8vIHZhciB0cmFuc2Zvcm0gPSB3dC5jbG9uZSgpO1xuXG4gICAgLy8gdmFyIHRyYW5zbGF0ZVNjYWxlWCA9ICh0aGlzLnRleHR1cmVTaXplLndpZHRoIC8gNjIwKTtcbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gMzgwKTtcblxuICAgIC8vIHRyYW5zZm9ybS50eCAvPSA2MjAgKiB0cmFuc2xhdGVTY2FsZVg7XG4gICAgLy8gdHJhbnNmb3JtLnR5IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcblxuICAgIC8vIHRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIC8vIHRyYW5zZm9ybS5hcHBlbmQobSk7XG5cbiAgICAvLyAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgLy8gdHJhbnNmb3JtLnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIC8vIHJldHVybiB0cmFuc2Zvcm07XG59O1xuXG4vKlxuICogQ29uc3RyYWlucyB0aGUgZmlsdGVyIGFyZWEgdG8gdGhlIHRleHR1cmUgc2l6ZVxuICogQHBhcmFtIGZpbHRlckFyZWEge1JlY3RhbmdsZX0gVGhlIGZpbHRlciBhcmVhIHdlIHdhbnQgdG8gY2FwXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhcEZpbHRlckFyZWEgPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSlcbntcbiAgICBpZiAoZmlsdGVyQXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEud2lkdGggKz0gZmlsdGVyQXJlYS54O1xuICAgICAgICBmaWx0ZXJBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgKz0gZmlsdGVyQXJlYS55O1xuICAgICAgICBmaWx0ZXJBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggZmlsdGVyQXJlYS54ICsgZmlsdGVyQXJlYS53aWR0aCA+IHRoaXMudGV4dHVyZVNpemUud2lkdGggKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCA9IHRoaXMudGV4dHVyZVNpemUud2lkdGggLSBmaWx0ZXJBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnkgKyBmaWx0ZXJBcmVhLmhlaWdodCA+IHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLSBmaWx0ZXJBcmVhLnk7XG4gICAgfVxufTtcblxuLypcbiAqIFJlc2l6ZXMgYWxsIHRoZSByZW5kZXIgdGFyZ2V0cyBpbiB0aGUgcG9vbFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLnRleHR1cmVTaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLnJlc2l6ZSggd2lkdGgsIGhlaWdodCApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGZpbHRlciBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBmaWx0ZXIgc3RhY2suXG4gKlxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnF1YWQuZGVzdHJveSgpO1xuICAgIFxuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBudWxsO1xuICAgIHRoaXMub2Zmc2V0WSA9IDA7XG5cbiAgICAvLyBkZXN0cm95IHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHR1cmVQb29sLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlUG9vbCA9IG51bGw7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgQWxwaGFNYXNrRmlsdGVyID0gcmVxdWlyZSgnLi4vZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNYXNrTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICB0aGlzLmFscGhhTWFza1Bvb2wgPSBbXTtcbn1cblxuTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hc2tNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgaWYgKG1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBtYXNrIGZyb20gdGhlIG1hc2sgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucG9wU3ByaXRlTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTcHJpdGVNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdmFyIGFscGhhTWFza0ZpbHRlciA9IHRoaXMuYWxwaGFNYXNrUG9vbC5wb3AoKTtcblxuICAgIGlmICghYWxwaGFNYXNrRmlsdGVyKVxuICAgIHtcbiAgICAgICAgYWxwaGFNYXNrRmlsdGVyID0gW25ldyBBbHBoYU1hc2tGaWx0ZXIobWFza0RhdGEpXTtcbiAgICB9XG5cbiAgICBhbHBoYU1hc2tGaWx0ZXJbMF0ubWFza1Nwcml0ZSA9IG1hc2tEYXRhO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRhcmdldCwgYWxwaGFNYXNrRmlsdGVyKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKi9cbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTcHJpdGVNYXNrID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVycyA9IHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbC5wdXNoKGZpbHRlcnMpO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTdGVuY2lsTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaE1hc2sobWFza0RhdGEpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BNYXNrKG1hc2tEYXRhKTtcbn07XG5cbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1RleHR1cmVTaGFkZXInKSxcbiAgICBDb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhBdHRpYnMgPSAxMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG5cbi8vICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcbn1cblxuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaGFkZXJNYW5hZ2VyO1xudXRpbHMucGx1Z2luVGFyZ2V0Lm1peGluKFNoYWRlck1hbmFnZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlck1hbmFnZXI7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cblNoYWRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlIGNvcnJlY3RseSBhcyB0aGlzIHRlbmRzIHRvIHZhcnlcbiAgICB0aGlzLm1heEF0dGlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xuXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1heEF0dGliczsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRPRE8gLSBXaHkgYXJlIHRoZXNlIG5vdCBwbHVnaW5zPyBXZSBjYW4ndCBkZWNvdXBsZSBwcmltaXRpdmVzIHVubGVzcyB0aGV5IGFyZS4uLi5cbiAgICB0aGlzLmRlZmF1bHRTaGFkZXIgPSBuZXcgVGV4dHVyZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcyk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbmV3IENvbXBsZXhQcmltaXRpdmVTaGFkZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFRha2VzIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHBhcmFtZXRlcnMgYW5kIHVwbG9hZHMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXR0cmlicyB7YW55W119IGF0dHJpYnNcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0QXR0cmlicyA9IGZ1bmN0aW9uIChhdHRyaWJzKVxue1xuICAgIC8vIHJlc2V0IHRlbXAgc3RhdGVcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRlbXBBdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAodmFyIGEgaW4gYXR0cmlicylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbYV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSAhPT0gdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHNoYWRlci5cbiAqXG4gKiBAcGFyYW0gc2hhZGVyIHtQSVhJLlNoYWRlcn0gdGhlIHNoYWRlciB0byB1cGxvYWRcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0U2hhZGVyID0gZnVuY3Rpb24gKHNoYWRlcilcbntcbiAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRJZCA9PT0gc2hhZGVyLnVpZClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50SWQgPSBzaGFkZXIudWlkO1xuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5nbC51c2VQcm9ncmFtKHNoYWRlci5wcm9ncmFtKTtcbiAgICB0aGlzLnNldEF0dHJpYnMoc2hhZGVyLmF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0LlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBXZWJHTE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBudWxsO1xufVxuXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFza01hbmFnZXI7XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgbWFzayBzdGFjayB0aGF0IGlzIHVzZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICpcbiAqIEBwYXJhbSBzdGVuY2lsTWFza1N0YWNrIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9IFRoZSBtYXNrIHN0YWNrXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnNldE1hc2tTdGFjayA9IGZ1bmN0aW9uICggc3RlbmNpbE1hc2tTdGFjayApXG57XG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBpZiAoc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLiBAYWx2aW5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWwgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQuYXR0YWNoU3RlbmNpbEJ1ZmZlcigpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICBpZiAoc21zLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgZ2wuY2xlYXIoZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTtcbiAgICAgICAgc21zLnJldmVyc2UgPSB0cnVlO1xuICAgICAgICBzbXMuY291bnQgPSAwO1xuICAgIH1cblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucHVzaCh3ZWJHTERhdGEpO1xuXG4gICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5WRVJUKTtcblxuICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgIGlmIChzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgIH1cblxuICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSBsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLktFRVApO1xuXG4gICAgc21zLmNvdW50Kys7XG59O1xuXG4vKipcbiAqIFRPRE8gdGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSFcbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuYmluZEdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgLy9pZiAodGhpcy5fY3VycmVudEdyYXBoaWNzID09PSBncmFwaGljcylyZXR1cm47XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBiaW5kIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0zZnYoc2hhZGVyLnVuaWZvcm1zLmNvbG9yLl9sb2NhdGlvbiwgd2ViR0xEYXRhLmNvbG9yKTtcblxuICAgICAgICBnbC51bmlmb3JtMWYoc2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSk7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDQgKiAyLCAwKTtcblxuICAgICAgICAvLyBub3cgZG8gdGhlIHJlc3QuLlxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAqL1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvL3RoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5hY3RpdmF0ZVByaW1pdGl2ZVNoYWRlcigpO1xuLy8gICAgICAgIHNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wcmltaXRpdmVTaGFkZXI7XG4gICAgICAgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG5cbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuLy8gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuXG4gICAgICAvKiAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7Ki9cbiAgICB9XG59O1xuXG4vKipcbiAqIFRPRE8gQGFsdmluXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIHNtcyA9IHRoaXMuc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucG9wKCk7XG5cbiAgICBzbXMuY291bnQtLTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIC8vIHRoZSBzdGFjayBpcyBlbXB0eSFcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgICAgIHRoaXMuYmluZEdyYXBoaWNzKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcblxuICAgICAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRyYXcgYSBxdWFkIHRvIGluY3JlbWVudC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgICAgICAgICAvLyBkcmF3IHRoZSB0cmlhbmdsZSBzdHJpcCFcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCArPSAyO1xuXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKSwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgLy8gIGNvbnNvbGUubG9nKFwiPDw+PlwiKVxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIChsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cblxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIG1hc2sgc3RhY2suXG4gKlxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2sgPSBudWxsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfSBUaGUgbWFzayBkYXRhIHN0cnVjdHVyZSB0byB1c2VcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIFxuICAgIC8vVE9ETyBGSVhcbiAgICBpZiAobWFza0RhdGEuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MudXBkYXRlR3JhcGhpY3MobWFza0RhdGEsIHRoaXMucmVuZGVyZXIuZ2wpO1xuICAgIH1cblxuICAgIGlmICghbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFN0ZW5jaWwobWFza0RhdGEsIG1hc2tEYXRhLl93ZWJHTFt0aGlzLnJlbmRlcmVyLmdsLmlkXS5kYXRhWzBdKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIodGhpcy5yZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcblxuICAgIHRoaXMucG9wU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuIiwiLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLm9uKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xufVxuXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTE1hbmFnZXI7XG5cbi8qKlxuICogR2VuZXJpYyBtZXRob2QgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbldlYkdMTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblx0Ly8gZG8gc29tZSBjb2RlcyBpbml0IVxufTtcblxuLyoqXG4gKiBHZW5lcmljIGRlc3Ryb3kgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlbmRlcmVyLm9mZignY29udGV4dCcsIHRoaXMub25Db250ZXh0Q2hhbmdlLCB0aGlzKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCcuL1NoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBjb21wbGV4IHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQ29tcGxleFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyBjb2xvcjsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoY29sb3IgKiBhbHBoYSAqIHRpbnQsIGFscGhhKTsnLC8vXCIgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIGNvbG9yOiAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsMCwwXSB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB0aW50OiAgIHsgdHlwZTogJzNmJywgdmFsdWU6IFswLCAwLCAwXSB9LFxuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFDb2xvcjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQmFzZSBzaGFkZXIgY2xhc3MgZm9yIFBJWEkgbWFuYWdlZCBzaGFkZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbdW5pZm9ybXNdIHtvYmplY3R9IFVuaWZvcm1zIGZvciB0aGlzIHNoYWRlci5cbiAqIEBwYXJhbSBbYXR0cmlidXRlc10ge29iamVjdH0gQXR0cmlidXRlcyBmb3IgdGhpcyBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIFNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcylcbntcbiAgICBpZiAoIXZlcnRleFNyYyB8fCAhZnJhZ21lbnRTcmMpXG4gICAge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXhpLmpzIEVycm9yLiBTaGFkZXIgcmVxdWlyZXMgdmVydGV4U3JjIGFuZCBmcmFnbWVudFNyYycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5nbCA9IHNoYWRlck1hbmFnZXIucmVuZGVyZXIuZ2w7XG5cbiAgICAvL1RPRE8gbWF5YmUgd2Ugc2hvdWxkIHBhc3MgcmVuZGVyZXIgcmF0aGVyIHRoYW4gc2hhZGVyIG1hbmdlcj8/IGZvb2QgZm9yIHRob3VnaHQuLlxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IHNoYWRlck1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgcHJvZ3JhbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUHJvZ3JhbX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaWZvcm1zIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhdHRyaWJ1dGVzIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50ZXJcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlciBhcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmM7XG5cbiAgICB0aGlzLmluaXQoKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHNoYWRlciBhbmQgdXNlcyBpdFxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbXBpbGUoKTtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy51bmlmb3JtcykpO1xuICAgIHRoaXMuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKSk7XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSB1bmlmb3JtIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgdW5pZm9ybXMgdG8gY2FjaGVcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnVuaWZvcm1zW2tleXNbaV1dLl9sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWNoZXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgYXR0cmlidXRlIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgYXR0cmlidXRlcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlQXR0cmlidXRlTG9jYXRpb25zID0gZnVuY3Rpb24gKGtleXMpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleXNbaV1dID0gdGhpcy5nbC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGtleXNbaV0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgbmVlZGVkIGFueW1vcmUuLi5cblxuICAgIC8vIEJlZ2luIHdvcnN0IGhhY2sgZXZhIC8vXG5cbiAgICAvLyBXSFk/Pz8gT05MWSBvbiBteSBjaHJvbWUgcGl4ZWwgdGhlIGxpbmUgYWJvdmUgcmV0dXJucyAtMSB3aGVuIHVzaW5nIGZpbHRlcnM/XG4gICAgLy8gbWF5YmUgaXRzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnbCBjb250ZXh0LlxuICAgIC8vIEknbSBjb252aW5jZWQgdGhpcyBpcyBhIGJ1ZyBpbiB0aGUgY2hyb21lIGJyb3dzZXIgYXMgdGhlcmUgaXMgTk8gcmVhc29uIHdoeSB0aGlzIHNob3VsZCBiZSByZXR1cm5pbmcgLTEgZXNwZWNpYWxseSBhcyBpdCBvbmx5IG1hbmlmZXN0cyBvbiBteSBjaHJvbWUgcGl4ZWxcbiAgICAvLyBJZiB0aGVyZXMgYW55IHdlYkdMIHBlb3BsZSB0aGF0IGtub3cgd2h5IGNvdWxkIGhhcHBlbiBwbGVhc2UgaGVscCA6KVxuICAgIC8vIGlmICh0aGlzLmF0dHJpYnV0ZXMuYUNvbG9yID09PSAtMSl7XG4gICAgLy8gICAgIHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPSAyO1xuICAgIC8vIH1cblxuICAgIC8vIEVuZCB3b3JzdCBoYWNrIGV2YSAvL1xufTtcblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQgY3JlYXRlcyB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19XG4gKi9cblNoYWRlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHZhciBnbFZlcnRTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuVkVSVEVYX1NIQURFUiwgdGhpcy52ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuRlJBR01FTlRfU0hBREVSLCB0aGlzLmZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuICh0aGlzLnByb2dyYW0gPSBwcm9ncmFtKTtcbn07XG5cbi8qKlxuKiBBZGRzIGEgbmV3IHVuaWZvcm1cbipcbiogQHBhcmFtIHVuaWZvcm0ge29iamVjdH0gdGhlIG5ldyB1bmlmb3JtIHRvIGF0dGFjaFxuKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgbG9jYXRpb24gPSB1bmlmb3JtLl9sb2NhdGlvbixcbiAgICAgICAgdmFsdWUgPSB1bmlmb3JtLnZhbHVlLFxuICAgICAgICBnbCA9IHRoaXMuZ2wsXG4gICAgICAgIGksIGlsO1xuXG4gICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIHNpbmdsZSBpbnQgdmFsdWVcbiAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGZsb2F0IHZhbHVlXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBjYXNlICcxZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSgyKSBvciBKUyBBcnJyYXlcbiAgICAgICAgY2FzZSAnMmYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDMpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICczZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDQpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgMkQgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YyJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDNEIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2Myc6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSA0RCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjQnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMWl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMml2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnNGl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20yJzpcbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgIGNhc2UgJ01hdHJpeDJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB1bmlmb3JtLnRyYW5zcG9zZSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20zJzpcbiAgICAgICAgY2FzZSAnbWF0Myc6XG4gICAgICAgIGNhc2UgJ01hdHJpeDNmdic6XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICBjYXNlICdtYXQ0JzpcbiAgICAgICAgY2FzZSAnTWF0cml4NGZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIENvbG9yIFZhbHVlXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgaW50ZWdlcnMgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdjEnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAyRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yydic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgyICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAyXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDIgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYXJyYXkgb2YgM0QgUG9pbnQgb2JqZWN0c1xuICAgICAgICBjYXNlICd2M3YnOlxuICAgICAgICAgICAgaWYgKCF1bmlmb3JtLl9hcnJheSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMyAqIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlsID0gdmFsdWUubGVuZ3RoOyBpIDwgaWw7ICsraSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogM10gICAgICAgPSB2YWx1ZVtpXS54O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzICsgMV0gICA9IHZhbHVlW2ldLnk7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAyXSAgID0gdmFsdWVbaV0uejtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiA0RCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Y0dic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg0ICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0XSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDJdICAgPSB2YWx1ZVtpXS56O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgM10gICA9IHZhbHVlW2ldLnc7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gUElYSS5UZXh0dXJlXG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuXG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUgfHwgIXVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGlzIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xbJ1RFWFRVUkUnICsgdGhpcy50ZXh0dXJlQ291bnRdKTtcblxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXTtcblxuICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdGV4dHVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9uZS4uXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgICAgICAgICAgLy8gc2V0IHVuaWZvcm0gdG8gdGV4dHVyZSBpbmRleFxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0uX2xvY2F0aW9uLCB0aGlzLnRleHR1cmVDb3VudCk7XG5cbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBuZXh0IHRleHR1cmUgaWRcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgU2hhZGVyIFdhcm5pbmc6IFVua25vd24gdW5pZm9ybSB0eXBlOiAnICsgdW5pZm9ybS50eXBlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNoYWRlciB1bmlmb3JtIHZhbHVlcy5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm1zID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy51bmlmb3JtcylcbiAgICB7XG4gICAgICAgIHRoaXMuc3luY1VuaWZvcm0odGhpcy51bmlmb3Jtc1trZXldKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSW5pdGlhbGlzZXMgYSBTYW1wbGVyMkQgdW5pZm9ybSAod2hpY2ggbWF5IG9ubHkgYmUgYXZhaWxhYmxlIGxhdGVyIG9uIGFmdGVyIGluaXRVbmlmb3JtcyBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBsb2FkZWQpXG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXRTYW1wbGVyMkQgPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbiAgICBpZiAodW5pZm9ybS50ZXh0dXJlRGF0YSlcbiAgICB7XG5cbiAgICAgICAgLy9UT0RPIG1vdmUgdGhpcy4uLlxuICAgICAgICB2YXIgZGF0YSA9IHVuaWZvcm0udGV4dHVyZURhdGE7XG5cbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuXG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBsaWVkQWxwaGEpO1xuICAgICAgICAvLyBHTFRleHR1cmUgPSBtYWcgbGluZWFyLCBtaW4gbGluZWFyX21pcG1hcF9saW5lYXIsIHdyYXAgcmVwZWF0ICsgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIC8vIEdMVGV4dHVyZUxpbmVhciA9IG1hZy9taW4gbGluZWFyLCB3cmFwIGNsYW1wXG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3RSZXBlYXQgPSBtYWcvbWluIE5FQVJFU1QsIHdyYXAgcmVwZWF0XG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3QgPSBtYWcvbWluIG5lYXJlc3QsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gQXVkaW9UZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCA1MTIsIGhlaWdodCAyLCBib3JkZXIgMFxuICAgICAgICAvLyBLZXlUZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCAyNTYsIGhlaWdodCAyLCBib3JkZXIgMFxuXG4gICAgICAgIC8vICBtYWdGaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcbiAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxuXG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZGF0YS5sdW1pbmFuY2UgPyBnbC5MVU1JTkFOQ0UgOiBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLnNvdXJjZSk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGRhdGEubWFnRmlsdGVyID8gZGF0YS5tYWdGaWx0ZXIgOiBnbC5MSU5FQVIgKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSApO1xuXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGRhdGEud3JhcFQgPyBkYXRhLndyYXBUIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyTWFuYWdlci5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHNoYWRlci5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5nbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmdsID0gbnVsbDtcbiAgICB0aGlzLnVuaWZvcm1zID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSBudWxsO1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBudWxsO1xufTtcblxuU2hhZGVyLnByb3RvdHlwZS5fZ2xDb21waWxlID0gZnVuY3Rpb24gKHR5cGUsIHNyYylcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICB0aGlzLmdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgdGhpcy5nbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cbiAgICBpZiAoIXRoaXMuZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgdGhpcy5nbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCBjdXN0b21Vbmlmb3JtcywgY3VzdG9tQXR0cmlidXRlcylcbntcbiAgICB2YXIgdW5pZm9ybXMgPSB7XG5cbiAgICAgICAgdVNhbXBsZXI6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogMCB9LFxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxXSkgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVW5pZm9ybXMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciB1IGluIGN1c3RvbVVuaWZvcm1zKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bmlmb3Jtc1t1XSA9IGN1c3RvbVVuaWZvcm1zW3VdO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgYVZlcnRleFBvc2l0aW9uOiAgICAwLFxuICAgICAgICBhVGV4dHVyZUNvb3JkOiAgICAgIDAsXG4gICAgICAgIGFDb2xvcjogICAgICAgICAgICAgMFxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tQXR0cmlidXRlcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGEgaW4gY3VzdG9tQXR0cmlidXRlcylcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlc1thXSA9IGN1c3RvbUF0dHJpYnV0ZXNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYWdtZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IFRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgU2hhZGVyLmNhbGwodGhpcywgc2hhZGVyTWFuYWdlciwgdmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihnbClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7Ly8sIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKTtcblxufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi4vbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQmFzZSBmb3IgYSBjb21tb24gb2JqZWN0IHJlbmRlcmVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzeXN0ZW0gcmVuZGVyZXIgcGx1Z2luLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gT2JqZWN0UmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufVxuXG5cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYmplY3RSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0UmVuZGVyZXI7XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZW5kZXJlciBhbmQgc2V0cyB0aGUgc2hhZGVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIHNldCB0aGUgc2hhZGVyLi5cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHJlbmRlcmVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xufTtcblxuLyoqXG4gKiBmbHVzaGVzXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIGZsdXNoIVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gcmVuZGVyIHRoZSBvYmplY3Rcbn07XG4iLCIvKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSBxdWFkXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFRoZSBnbCBjb250ZXh0IGZvciB0aGlzIHF1YWQgdG8gdXNlLlxuICovXG5mdW5jdGlvbiBRdWFkKGdsKVxue1xuICAgIC8qXG4gICAgICogdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4vLyAgICB0aGlzLnRleHR1cmVzID0gbmV3IFRleHR1cmVVdnMoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAwLDAsXG4gICAgICAgIDIwMCwwLFxuICAgICAgICAyMDAsMjAwLFxuICAgICAgICAwLDIwMFxuICAgIF0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgcXVhZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMSwwLFxuICAgICAgICAxLDEsXG4gICAgICAgIDAsMVxuICAgIF0pO1xuXG4vLyAgICB2YXIgd2hpdGUgPSAoMHhGRkZGRkYgPj4gMTYpICsgKDB4RkZGRkZGICYgMHhmZjAwKSArICgoMHhGRkZGRkYgJiAweGZmKSA8PCAxNikgKyAoMSAqIDI1NSA8PCAyNCk7XG4gICAgLy9UT0RPIGNvbnZlcnQgdGhpcyB0byBhIDMyIHVuc2lnbmVkIGludCBhcnJheVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBjb21wb25lbnRzIG9mIHRoZSB0cmlhbmdsZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxXG4gICAgXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbXG4gICAgICAgIDAsIDEsIDIsIDAsIDMsIDJcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSB2ZXJ0ZXggYnVmZmVyXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSBpbmRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDggKyAxNikgKiA0LCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnVwbG9hZCgpO1xufVxuXG5RdWFkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFF1YWQ7XG5cbi8qKlxuICogTWFwcyB0d28gUmVjdGFuZ2xlIHRvIHRoZSBxdWFkXG4gKiBAcGFyYW0gcmVjdCB7UElYSS5SZWN0YW5nbGV9IHRoZSBmaXJzdCByZWN0YW5nbGVcbiAqIEBwYXJhbSByZWN0MiB7UElYSS5SZWN0YW5nbGV9IHRoZSBzZWNvbmQgcmVjdGFuZ2xlXG4gKi9cblF1YWQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKHJlY3QsIHJlY3QyKVxue1xuICAgIHZhciB4ID0gMDsgLy9yZWN0Mi54IC8gcmVjdC53aWR0aDtcbiAgICB2YXIgeSA9IDA7IC8vcmVjdDIueSAvIHJlY3QuaGVpZ2h0O1xuXG4gICAgdGhpcy51dnNbMF0gPSB4O1xuICAgIHRoaXMudXZzWzFdID0geTtcblxuICAgIHRoaXMudXZzWzJdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1szXSA9IHk7XG5cbiAgICB0aGlzLnV2c1s0XSA9IHggKyByZWN0Mi53aWR0aCAvIHJlY3Qud2lkdGg7XG4gICAgdGhpcy51dnNbNV0gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1s2XSA9IHg7XG4gICAgdGhpcy51dnNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICAvLy8gLS0tLS1cbiAgICB4ID0gcmVjdDIueDtcbiAgICB5ID0gcmVjdDIueTtcblxuICAgIHRoaXMudmVydGljZXNbMF0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbMV0gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1syXSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzNdID0geTtcblxuICAgIHRoaXMudmVydGljZXNbNF0gPSB4ICsgcmVjdDIud2lkdGg7XG4gICAgdGhpcy52ZXJ0aWNlc1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQ7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzZdID0geDtcbiAgICB0aGlzLnZlcnRpY2VzWzddID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXIgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuUXVhZC5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvLyBUT0RPIGNvdWxkIHByb2JhYmx5IGJlIHB1c2hlZCBpbnRvIG9uZSB1cGxvYWQhXG4gICAgZ2wuYmluZEJ1ZmZlciggZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlciApO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMudmVydGljZXMpO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDggKiA0LCB0aGlzLnV2cyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgKDggKyA4KSAqIDQsIHRoaXMuY29sb3JzKTtcbn07XG5cblF1YWQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xuXG5cbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgICAgIFxuICAgIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcbiAgICBHTEZyYW1lYnVmZmVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xGcmFtZWJ1ZmZlcixcbiAgICBcbiAgICBTdGVuY2lsTWFza1N0YWNrID0gcmVxdWlyZSgnLi9TdGVuY2lsTWFza1N0YWNrJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIGhvcml6b250YWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgdmVydGljYWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAqIEBwYXJhbSByb290IHtib29sZWFufSBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gKi9cbnZhciBSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uLCByb290KVxue1xuICAgIC8vVE9ETyBSZXNvbHV0aW9uIGNvdWxkIGdvIGhlcmUgKCBlZyBsb3cgcmVzIGJsdXJzIClcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvLyBuZXh0IHRpbWUgdG8gY3JlYXRlIGEgZnJhbWUgYnVmZmVyIGFuZCB0ZXh0dXJlXG5cbiAgICAvKipcbiAgICAgKiBBIGZyYW1lIGJ1ZmZlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xGcmFtZUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJDb2xvciA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBvYmplY3QgYXMgYSByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9iamVjdCdzIHRyYW5zZm9ybVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5mcmFtZSA9IG51bGw7XG4gICAgXG4gICAgdGhpcy5kZWZhdWx0RnJhbWUgPSBuZXcgUElYSS5SZWN0YW5nbGUoKTtcbiAgICB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgPSBudWxsO1xuICAgIHRoaXMuc291cmNlRnJhbWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHN0ZW5jaWwgYnVmZmVyIHN0b3JlcyBtYXNraW5nIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlckJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgc3RlbmNpbCBtYXNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFza1N0YWNrfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG5ldyBTdGVuY2lsTWFza1N0YWNrKCk7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZXMgZmlsdGVyIGRhdGEgZm9yIHRoZSByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6dGhpcyxcbiAgICAgICAgICAgIGZpbHRlcjpbXSxcbiAgICAgICAgICAgIGJvdW5kczp0aGlzLnNpemVcbiAgICAgICAgfVxuICAgIF07XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVFxuICAgICAqIEBzZWUgUElYSS5TQ0FMRV9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gR0xGcmFtZWJ1ZmZlci5jcmVhdGVSR0JBKGdsLCAxMDAsIDEwMCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBBIGZyYW1lIGJ1ZmZlciBuZWVkcyBhIHRhcmdldCB0byByZW5kZXIgdG8uLlxuICAgICAgICAgICAgY3JlYXRlIGEgdGV4dHVyZSBhbmQgYmluZCBpdCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgICovXG4gICAgICAgIFxuXG4gICAgICAgLy8gVE9ETyBjaGFuZ2UhXG4gICAgICAgIC8vIHRoaXMgaXMgdXNlZCBieSB0aGUgYmFzZSB0ZXh0dXJlXG4gICAgICAgIHRoaXMudGV4dHVyZSA9IHRoaXMuZnJhbWVCdWZmZXIudGV4dHVyZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbWFrZSBpdCBhIG51bGwgZnJhbWVidWZmZXIuLlxuICAgICAgICB0aGlzLmZyYW1lQnVmZmVyLmZyYW1lYnVmZmVyID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn07XG5cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZW5kZXJUYXJnZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRhcmdldDtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGZpbHRlciB0ZXh0dXJlLlxuICpcbiAqIEBwYXJhbSBbYmluZD1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCB3ZSBiaW5kIG91ciBmcmFtZWJ1ZmZlciBiZWZvcmUgY2xlYXJpbmc/XG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbihjbGVhckNvbG9yKVxue1xuICAgIHZhciBjYyA9IGNsZWFyQ29sb3IgfHwgdGhpcy5jbGVhckNvbG9yXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5jbGVhcihjY1swXSxjY1sxXSxjY1syXSxjY1szXSkvL3IsZyxiLGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmF0dGFjaFN0ZW5jaWxCdWZmZXIgPSBmdW5jdGlvbigpXG57XG4gICAgLy9UT0RPIGNoZWNrIGlmIHN0ZW5jaWwgaXMgZG9uZT9cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgaXMgdXNlZCBmb3IgbWFza2luZyBpbiBwaXhpXG4gICAgICogbGV0cyBjcmVhdGUgb25lIGFuZCB0aGVuIGFkZCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgKi9cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZW5hYmxlU3RlbmNpbCgpO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXdwb3J0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKGRlc3RpbmF0aW9uRnJhbWUsIHNvdXJjZUZyYW1lKVxue1xuICAgIC8vVE9PRCByZWZhY3RvciB1c2FnZSBvZiBmcmFtZS4uXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIuYmluZCgpO1xuXG4gICAgdGhpcy5kZXN0aW5hdGlvbkZyYW1lID0gZGVzdGluYXRpb25GcmFtZSB8fCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUgfHwgdGhpcy5kZWZhdWx0RnJhbWU7XG4gICAgdGhpcy5zb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IHRoaXMuc291cmNlRnJhbWUgfHwgZGVzdGluYXRpb25GcmFtZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggdGhpcy5kZXN0aW5hdGlvbkZyYW1lLCB0aGlzLnNvdXJjZUZyYW1lICk7XG5cbiAgICBpZih0aGlzLnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5hcHBlbmQodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIGlmKHRoaXMuZGVzdGluYXRpb25GcmFtZSAhPT0gdGhpcy5zb3VyY2VGcmFtZSlcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgICAgICBnbC5zY2lzc29yKHRoaXMuZGVzdGluYXRpb25GcmFtZS54LCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmRpc2FibGUoZ2wuU0NJU1NPUl9URVNUKTtcbiAgICB9XG5cblxuICAgIC8vIFRPRE8gLSBkb2VzIG5vdCBuZWVkIHRvIGJlIHVwZGF0ZWQgYWxsIHRoZSB0aW1lPz9cbiAgICBnbC52aWV3cG9ydCh0aGlzLmRlc3RpbmF0aW9uRnJhbWUueCx0aGlzLmRlc3RpbmF0aW9uRnJhbWUueSwgdGhpcy5kZXN0aW5hdGlvbkZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uLCB0aGlzLmRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uKTtcblxuXG59O1xuXG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmFzZWQgb24gYSBwcm9qZWN0aW9uIGZyYW1lICh3aGljaCBpcyBhIHJlY3RhbmdsZSlcbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2FsY3VsYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbkZyYW1lLCBzb3VyY2VGcmFtZSlcbntcbiAgICB2YXIgcG0gPSB0aGlzLnByb2plY3Rpb25NYXRyaXg7XG5cbiAgICBzb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lIHx8IGRlc3RpbmF0aW9uRnJhbWU7XG5cbiAgICBwbS5pZGVudGl0eSgpO1xuXG4gICAgLy8gVE9ETzogbWFrZSBkZXN0IHNjYWxlIHNvdXJjZVxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAxIC8gZGVzdGluYXRpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gc291cmNlRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gLTEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBkZXN0aW5hdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAtMSAvIGRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0KjI7XG5cbiAgICAgICAgcG0udHggPSAtMSAtIHNvdXJjZUZyYW1lLnggKiBwbS5hO1xuICAgICAgICBwbS50eSA9IDEgLSBzb3VyY2VGcmFtZS55ICogcG0uZDtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVzaXplcyB0aGUgdGV4dHVyZSB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge051bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIGhlaWdodCB7TnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgdGV4dHVyZVxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHdpZHRoID0gd2lkdGggfCAwO1xuICAgIGhlaWdodCA9IGhlaWdodCB8IDA7XG5cbiAgICBpZiAodGhpcy5zaXplLndpZHRoID09PSB3aWR0aCAmJiB0aGlzLnNpemUuaGVpZ2h0ID09PSBoZWlnaHQpIFxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2l6ZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuc2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICB0aGlzLmRlZmF1bHRGcmFtZS53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuZGVmYXVsdEZyYW1lLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIucmVzaXplKHdpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBoZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuICAgIFxuICAgIHZhciBwcm9qZWN0aW9uRnJhbWUgPSB0aGlzLmZyYW1lIHx8IHRoaXMuc2l6ZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSByZW5kZXIgdGFyZ2V0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIHRoaXMuZnJhbWVCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBTdGVuY2lsTWFza1N0YWNrKClcbntcblx0LyoqXG4gICAgICogVGhlIGFjdHVhbCBzdGFja1xuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsU3RhY2sgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQGFsdmluXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb3VudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY291bnQgPSAwO1xufVxuXG5TdGVuY2lsTWFza1N0YWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0ZW5jaWxNYXNrU3RhY2s7XG5tb2R1bGUuZXhwb3J0cyA9IFN0ZW5jaWxNYXNrU3RhY2s7XG4iLCJDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogTWFwcyBnbCBibGVuZCBjb21iaW5hdGlvbnMgdG8gV2ViR0xcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpKGdsLCBvYmplY3QpXG57XG4gICAgb2JqZWN0ID0gb2JqZWN0IHx8IHt9O1xuXG4gICAgLy9UT0RPIC0gcHJlbXVsdGlwbHkgYWxwaGEgd291bGQgYmUgZGlmZmVyZW50LlxuICAgIC8vYWRkIGEgYm9vbGVhbiBmb3IgdGhhdCFcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQUREXSAgICAgICAgICAgPSBbZ2wuU1JDX0FMUEhBLCBnbC5EU1RfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9IFtnbC5EU1RfQ09MT1IsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5TQ1JFRU5dICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLk9ORV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRBUktFTl0gICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0JVUk5dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRJRkZFUkVOQ0VdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aTtcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcblx0b2JqZWN0PSBvYmplY3QgfHwge307XG5cbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5QT0lOVFNdICAgICAgICAgPSBnbC5QT0lOVFM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORVNdICAgICAgICAgID0gZ2wuTElORVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9MT09QXSAgICAgID0gZ2wuTElORV9MT09QO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLkxJTkVfU1RSSVBdICAgICA9IGdsLkxJTkVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVTXSAgICAgID0gZ2wuVFJJQU5HTEVTO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXSA9IGdsLlRSSUFOR0xFX1NUUklQO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX0ZBTl0gICA9IGdsLlRSSUFOR0xFX0ZBTjtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBTcHJpdGUgb2JqZWN0IGlzIHRoZSBiYXNlIGZvciBhbGwgdGV4dHVyZWQgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCB0byB0aGUgc2NyZWVuXG4gKlxuICogQSBzcHJpdGUgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhbiBpbWFnZSBsaWtlIHRoaXM6XG4gKlxuICogYGBganNcbiAqIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgZm9yIHRoaXMgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZSh0ZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFuY2hvciBzZXRzIHRoZSBvcmlnaW4gcG9pbnQgb2YgdGhlIHRleHR1cmUuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgMCwwIHRoaXMgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0XG4gICAgICogU2V0dGluZyB0aGUgYW5jaG9yIHRvIDAuNSwwLjUgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgY2VudGVyZWRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMSwxIHdvdWxkIG1lYW4gdGhlIHRleHR1cmUncyBvcmlnaW4gcG9pbnQgd2lsbCBiZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmFuY2hvciA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUgKHRoaXMgaXMgaW5pdGlhbGx5IHNldCBieSB0aGUgdGV4dHVyZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQSB2YWx1ZSBvZiAweEZGRkZGRiB3aWxsIHJlbW92ZSBhbnkgdGludCBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2hhZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgc3ByaXRlLiBTZXQgdG8gbnVsbCB0byByZW1vdmUgYSBjdXJyZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJ8UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgY2FjaGVkIHZhbHVlIG9mIHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvLyBjYWxsIHRleHR1cmUgc2V0dGVyXG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBUZXh0dXJlLkVNUFRZO1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZVxuICAgIHRoaXMudmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblNwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLngpICogdGhpcy50ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzaWduID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLngpIHx8IDE7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBzaWduICogdmFsdWUgLyB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgTWF0aC5hYnModGhpcy5zY2FsZS55KSAqIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHByaXZhdGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBzbyBpZiBfd2lkdGggaXMgMCB0aGVuIHdpZHRoIHdhcyBub3Qgc2V0Li5cbiAgICBpZiAodGhpcy5fd2lkdGgpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnggPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgKiB0aGlzLl93aWR0aCAvIHRoaXMudGV4dHVyZS5mcmFtZS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zY2FsZS55ID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLnkpICogdGhpcy5faGVpZ2h0IC8gdGhpcy50ZXh0dXJlLmZyYW1lLmhlaWdodDtcbiAgICB9XG59O1xuXG5TcHJpdGUucHJvdG90eXBlLmNhY2x1bGF0ZVZlcnRpY2VzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmUsXG4gICAgICAgIHd0ID0gdGhpcy50cmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIGEgPSB3dC5hLCBiID0gd3QuYiwgYyA9IHd0LmMsIGQgPSB3dC5kLCB0eCA9IHd0LnR4LCB0eSA9IHd0LnR5LFxuICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhLFxuICAgICAgICB3MCwgdzEsIGgwLCBoMSxcbiAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcbiAgICAgICAgXG4gICAgaWYgKHRyaW0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgYW5kIGlzIG5vdCBhIHRpbGluZ3Nwcml0ZSB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgdzEgPSB0cmltLnggLSB0aGlzLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICBoMSA9IHRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcbiAgICB9XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMF0gPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzFdID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMl0gPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzNdID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzRdID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs1XSA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzZdID0gYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs3XSA9IGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG5cbn1cblxuLyoqXG4qXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy50cmFuc2Zvcm0udXBkYXRlZCB8fCB0aGlzLnRleHR1cmVEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZURpcnR5ID0gZmFsc2U7XG4gICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuICAgIH1cbiAgICBcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFNwcml0ZSBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcbiAgICAgICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5YLFxuICAgICAgICAgICAgbWF4WCxcbiAgICAgICAgICAgIG1pblksXG4gICAgICAgICAgICBtYXhZLFxuICAgICAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YTtcblxuICAgICAgICB2YXIgeDEgPSB2ZXJ0ZXhEYXRhWzBdXG4gICAgICAgIHZhciB5MSA9IHZlcnRleERhdGFbMV1cblxuICAgICAgICB2YXIgeDIgPSB2ZXJ0ZXhEYXRhWzJdXG4gICAgICAgIHZhciB5MiA9IHZlcnRleERhdGFbM11cblxuICAgICAgICB2YXIgeDMgPSB2ZXJ0ZXhEYXRhWzRdXG4gICAgICAgIHZhciB5MyA9IHZlcnRleERhdGFbNV1cblxuICAgICAgICB2YXIgeDQgPSB2ZXJ0ZXhEYXRhWzZdXG4gICAgICAgIHZhciB5NCA9IHZlcnRleERhdGFbN11cblxuICAgICAgICBtaW5YID0geDE7XG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkxO1xuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MTtcbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTE7XG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoaWxkcmVuXG4gICAgICAgIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGRCb3VuZHMgPSB0aGlzLmNvbnRhaW5lckdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICB3MCA9IGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICB3MSA9IGNoaWxkQm91bmRzLnggKyBjaGlsZEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGgwID0gY2hpbGRCb3VuZHMueTtcbiAgICAgICAgICAgIGgxID0gY2hpbGRCb3VuZHMueSArIGNoaWxkQm91bmRzLmhlaWdodDtcblxuICAgICAgICAgICAgbWluWCA9IChtaW5YIDwgdzApID8gbWluWCA6IHcwO1xuICAgICAgICAgICAgbWluWSA9IChtaW5ZIDwgaDApID8gbWluWSA6IGgwO1xuXG4gICAgICAgICAgICBtYXhYID0gKG1heFggPiB3MSkgPyBtYXhYIDogdzE7XG4gICAgICAgICAgICBtYXhZID0gKG1heFkgPiBoMSkgPyBtYXhZIDogaDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fYm91bmRzLnggPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHRoaXMuX2JvdW5kcy55ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG4gICAgdGhpcy5fYm91bmRzLndpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICByZXR1cm4gdGhpcy5fYm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgc3ByaXRlXG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cblNwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLnRleHR1cmUuY3JvcC53aWR0aCA8PSAwIHx8IHRoaXMudGV4dHVyZS5jcm9wLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vICBJZ25vcmUgbnVsbCBzb3VyY2VzXG4gICAgaWYgKHRoaXMudGV4dHVyZS52YWxpZClcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgICAgIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgIGR4LFxuICAgICAgICAgICAgZHksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDtcblxuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgICAgIC8vIElmIHNtb290aGluZ0VuYWJsZWQgaXMgc3VwcG9ydGVkIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgc21vb3RoaW5nIHByb3BlcnR5IGZvciB0aGlzIHRleHR1cmVcbiAgICAgICAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSO1xuICAgICAgICBpZiAocmVuZGVyZXIuc21vb3RoUHJvcGVydHkgJiYgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gIT09IHNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldID0gc21vb3RoaW5nRW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHRyaW1tZWQgd2Ugb2Zmc2V0IGJ5IHRoZSB0cmltIHgveSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgZnJhbWUgZGltZW5zaW9uc1xuXG4gICAgICAgIGlmKHRleHR1cmUucm90YXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICBcbiAgICAgICAgICAgIGR4ICs9IHdpZHRoO1xuXG4gICAgICAgICAgICB3dC50eCA9IGR5ICogd3QuYSArIGR4ICogd3QuYyArIHd0LnR4O1xuICAgICAgICAgICAgd3QudHkgPSBkeSAqIHd0LmIgKyBkeCAqIHd0LmQgKyB3dC50eTtcblxuICAgICAgICAgICAgdmFyIHRlbXAgPSB3dC5hO1xuICAgICAgICAgICAgd3QuYSAgPSAtd3QuYztcbiAgICAgICAgICAgIHd0LmMgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIHRlbXAgPSB3dC5iO1xuICAgICAgICAgICAgd3QuYiAgPSAtd3QuZDtcbiAgICAgICAgICAgIHd0LmQgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIC8vIHRoZSBhbmNob3IgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFib3ZlLCBzbyBsZXRzIHNldCBpdCB0byB6ZXJvXG4gICAgICAgICAgICBkeCA9IDA7XG4gICAgICAgICAgICBkeSA9IDA7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIC8vIEFsbG93IGZvciBwaXhlbCByb3VuZGluZ1xuICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgKHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwLFxuICAgICAgICAgICAgICAgICh3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHggPSBkeCB8IDA7XG4gICAgICAgICAgICBkeSA9IGR5IHwgMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICB3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjbGVhbiB1cCBjYWNoaW5nIC0gaG93IHRvIGNsZWFuIHVwIHRoZSBjYWNoZXM/XG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC55ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgc3ByaXRlIGFuZCBvcHRpb25hbGx5IGl0cyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95VGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95VGV4dHVyZSwgZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5hbmNob3IgPSBudWxsO1xuXG4gICAgaWYgKGRlc3Ryb3lUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcblxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zLi5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICovXG5TcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgU3ByaXRlKFRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXInKSxcbiAgICBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9jcmVhdGVJbmRpY2VzRm9yUXVhZHMnKSxcbiAgICBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4vZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgZ2xDb3JlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgU3ByaXRlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1Nwcml0ZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFJlbmRlcmVyIGRlZGljYXRlZCB0byBkcmF3aW5nIGFuZCBiYXRjaGluZyBzcHJpdGVzLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU3ByaXRlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgdmFsdWVzIHNlbnQgaW4gdGhlIHZlcnRleCBidWZmZXIuXG4gICAgICogcG9zaXRpb25YLCBwb3NpdGlvblksIGNvbG9yUiwgY29sb3JHLCBjb2xvckIgPSA1XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdmVydGV4IGluZm9ybWF0aW9uIGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgU3ByaXRlQmF0Y2ggYmVmb3JlIGl0IGZsdXNoZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIG91ciBiYXRjaFxuICAgIHZhciBudW1WZXJ0cyA9ICh0aGlzLnNpemUgKiA0KSAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBiYXRjaCwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgIHZhciBudW1JbmRpY2VzID0gdGhpcy5zaXplICogNjtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSB2ZXJ0ZXggZGF0YSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5QnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgQXJyYXlCdWZmZXIobnVtVmVydHMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBGbG9hdDMyQXJyYXkgZm9yIHBvc2l0aW9uc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciB1dnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIGNvbG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlcyBvZiB0aGUgZ2VvbWV0cnkgKHF1YWRzKSB0byBkcmF3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHModGhpcy5zaXplKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIFxuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICBcbiAgICAvL1RPRE8gLSAzMDAgaXMgYSBiaXQgbWFnaWMsIGZpZ3VyZSBvdXQgYSBuaWNlciBhbW91bnQhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykgXG4gICAge1xuICAgICAgICB0aGlzLmdyb3Vwc1tpXSA9IHt0ZXh0dXJlczpbXSwgdGV4dHVyZUNvdW50OjAsIGlkczpbXSwgc2l6ZTowLCBzdGFydDowLCBibGVuZDowfTsgXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcblxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsOyAgICBcbn1cblxuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3Nwcml0ZScsIFNwcml0ZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5NQVhfVEVYVFVFUyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cbiAgICB0aGlzLl9zaGFkZXIgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgdGhpcy5NQVhfVEVYVFVFUykvL25ldyBUZXh0dXJlU2hhZGVyKGdsKTtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlcjtcblxuICAgIC8vIGNyZWF0ZSBhIGNvdXBsZSBvZiBidWZmZXJzXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKGdsLCBudWxsLCBnbC5EWU5BTUlDX0RSQVcpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoZ2wsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgLy8gYnVpbGQgdGhlIHZhbyBvYmplY3QgdGhhdCB3aWxsIHJlbmRlci4uXG4gICAgdGhpcy52YW8gPSBuZXcgZ2xDb3JlLlZlcnRleEFycmF5T2JqZWN0KGdsKTtcblxuICAgIHRoaXMudmFvLmFkZEluZGV4KHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCAwKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIGdsLlVOU0lHTkVEX1NIT1JULCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMiAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMyAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVJZCwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgNCAqIDQpO1xuXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdG8gcmVuZGVyIHdoZW4gdXNpbmcgdGhpcyBzcHJpdGViYXRjaFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHNwcml0ZSlcbntcbiAgICAvL1RPRE8gc2V0IGJsZW5kIG1vZGVzLi5cbiAgICAvLyBjaGVjayB0ZXh0dXJlLi5cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPj0gdGhpcy5zaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICBcbiAgICAvLyBnZXQgdGhlIHV2cyBmb3IgdGhlIHRleHR1cmVcbiAgIFxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIGlmICghc3ByaXRlLnRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgLy8gcHVzaCBhIHRleHR1cmUuXG4gICAgLy8gaW5jcmVtZW50IHRoZSBiYXRjaHNpemVcbiAgICB2YXIgbmV4dFRleHR1cmUgPSAgc3ByaXRlLnRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgdmFyIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwO1xuICAgIHZhciBpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50VGV4dHVyZSAhPT0gbmV4dFRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbmV4dFRleHR1cmU7XG4gICAgICAgIFxuICAgICAgICBpZighbmV4dFRleHR1cmUuX2VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9pZCA9IHRoaXMudGV4dHVyZUNvdW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLnRleHR1cmVDb3VudCA9PT0gdGhpcy5NQVhfVEVYVFVFUylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgICAgICAgICAgICAgeyAgICAgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnN0YXJ0ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50KytdID0gbmV4dFRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHR1cmVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdHJpbT8/XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG5cbiAgICAvLyB1cGxvYWQgdGhlIHNwcml0ZSBlbGVtZXRucy4uLlxuICAgIC8vIHRoZXkgaGF2ZSBhbGwgcmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIHdlIGp1c3QgbmVlZCB0byBwdXNoIHRoZW0gaW50byB0aGUgYnVmZmVyLlxuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7XG4gICAgdmFyIHZlcnRleERhdGEgPSBzcHJpdGUudmVydGV4RGF0YVxuICAgIHZhciB0aW50ID0gKHNwcml0ZS50aW50ID4+IDE2KSArIChzcHJpdGUudGludCAmIDB4ZmYwMCkgKyAoKHNwcml0ZS50aW50ICYgMHhmZikgPDwgMTYpICsgKHNwcml0ZS53b3JsZEFscGhhICogMjU1IDw8IDI0KTtcbiAgICB2YXIgdXZzID0gc3ByaXRlLnRleHR1cmUuX3V2cy51dnNfdWludDMyO1xuICAgIC8veHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzBdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMF07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7IFxuICAgIFxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsyXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzNdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzFdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs0XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzVdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzJdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzZdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbN107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbM107XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgYW5kIGVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA9PT0gMClyZXR1cm47XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG5cbiAgICB0aGlzLmN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSB0aGlzLmN1cnJlbnRHcm91cC5zdGFydDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICB7ICAgICBcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgXG4gICAgLy8gZG8gc29tZSBzbWFydCBhcnJheSBzdHVmZi4uXG4gICAgLy8gZG91YmxlIHNpemUgc28gd2UgZG9udCBhbHdheSBzdWJhcnJheSB0aGUgZWxlbWVudHMuLlxuICAgIC8vIHVwbG9hZCB0aGUgdmVydHMgdG8gdGhlIGJ1ZmZlclxuICAgIGlmICh0aGlzLmN1cnJlbnRCYXRjaFNpemUgPiAoIHRoaXMuc2l6ZSAqIDAuNSApIClcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh0aGlzLnZlcnRpY2VzLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbyBrIC4uIHN1YiBhcnJheSBpcyBTTE9XPj9cbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnBvc2l0aW9ucy5zdWJhcnJheSgwLCB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplKTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHZpZXcsIDAsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgc2hhZGVyLi5cbiAgICB0aGlzLnJlbmRlcmVyLmJpbmRTaGFkZXIodGhpcy5fc2hhZGVyKTtcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCAwICk7XG5cbiAgICAvLy8gcmVuZGVyIHRoZSBncm91cHMuLlxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdyb3VwQ291bnQ7IGkrKykge1xuICAgICAgICBcbiAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5ncm91cHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC50ZXh0dXJlQ291bnQ7IGorKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kVGV4dHVyZShncm91cC50ZXh0dXJlc1tqXSwgaik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgZ3JvdXAuc2l6ZSAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCBncm91cC5zdGFydCAqIDYgKiAyKTtcbiAgICB9O1xuXG4gICAgLy8gcmVzZXQgZWxlbWVudHMgZm9yIHRoZSBuZXh0IGZsdXNoXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBzcHJpdGUgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFvLmJpbmQoKTtcbn07XG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgdGhpcy52YW8udW5iaW5kKCk7XG59O1xuLyoqXG4gKiBEZXN0cm95cyB0aGUgU3ByaXRlQmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuY29sb3JzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zcHJpdGVzID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCBtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgdmVydGV4U3JjID0gXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGFUZXh0dXJlSWQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZUZXh0dXJlSWQgPSBhVGV4dHVyZUlkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVwiO1xuICAgIHZhciBmcmFnbWVudFNyYyA9ICdwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG4nICsgZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpICsgXCJcXG5cXG5cIiArIGZyYWdUZW1wbGF0ZVxuXG4gICAgZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYy5yZXBsYWNlKC9cXCVcXCUvZ2ksICcxNicpO1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cbiAgICB2YXIgc2FtcGxlVmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSB7XG4gICAgICAgIHNhbXBsZVZhbHVlc1tpXSA9IGk7XG4gICAgfTtcblxuICAgIHNoYWRlci5iaW5kKCk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnVTYW1wbGVycyA9IHNhbXBsZVZhbHVlcztcblxuICAgIHJldHVybiBzaGFkZXI7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKVxue1xuICAgIHZhciBzcmMgPSAndmVjNCBnZXRTYW1wbGVGcm9tQXJyYXkoc2FtcGxlcjJEIHRleHR1cmVzWyUlXSwgaW50IG5keCwgdmVjMiB1dikge1xcblxcbnZlYzQgY29sb3I7J1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgaWYoaSA+IDApc3JjICs9ICdcXG5lbHNlICc7XG4gICAgICAgIGlmKGkgPCBtYXhUZXh0dXJlcy0xKXNyYyArPSAnaWYobmR4ID09ICcgKyBpICsgJyknO1xuICAgICAgICBzcmMgKz0gJ1xcbnsnO1xuICAgICAgICBzcmMgKz0gJ1xcblxcdGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmVzWycraSsnXSwgdXYpOyc7XG4gICAgICAgIHNyYyArPSAnXFxufSc7XG4gICAgfTtcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdyZXR1cm4gY29sb3I7JztcbiAgICBzcmMgKz0gJ1xcbn0nO1xuXG4gICAgcmV0dXJuIHNyYztcbn1cblxudmFyIGZyYWdUZW1wbGF0ZSA9IFtcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG4gICAgJ3ZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsnLFxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcnNbJSVdOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICdnbF9GcmFnQ29sb3IgPSBnZXRTYW1wbGVGcm9tQXJyYXkodVNhbXBsZXJzLCBpbnQodlRleHR1cmVJZCksIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yOycsXG4gICAgJ30nXG5dLmpvaW4oJ1xcbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyO1xuIiwidmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBUZXh0IE9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nIGluIHlvdXIgdGV4dCBzdHJpbmcsXG4gKiBvciBhZGQgYSB3b3JkV3JhcCBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSBhbmQgYW5kIHdvcmRXcmFwV2lkdGggcHJvcGVydHkgd2l0aCBhIHZhbHVlIGluIHRoZSBzdHlsZSBvYmplY3QuXG4gKlxuICogQSBUZXh0IGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBzdHJpbmcgYW5kIGEgc3R5bGUgb2JqZWN0XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0ID0gbmV3IFBJWEkuVGV4dCgnVGhpcyBpcyBhIHBpeGkgdGV4dCcse2ZvbnQgOiAnMjRweCBBcmlhbCcsIGZpbGwgOiAweGZmMTAxMCwgYWxpZ24gOiAnY2VudGVyJ30pO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbc3R5bGUuZm9udF0ge3N0cmluZ30gZGVmYXVsdCAnYm9sZCAyMHB4IEFyaWFsJyBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlLmcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcCwgaXQgbmVlZHMgd29yZFdyYXAgdG8gYmUgc2V0IHRvIHRydWVcbiAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzRdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gKi9cbmZ1bmN0aW9uIFRleHQodGV4dCwgc3R5bGUsIHJlc29sdXRpb24pXG57XG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgMmQgY29udGV4dCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gd2l0aFxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY2FudmFzLlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyh0aGlzLmNhbnZhcyk7XG4gICAgdGV4dHVyZS50cmltID0gbmV3IG1hdGguUmVjdGFuZ2xlKCk7XG4gICAgU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbn1cblxuLy8gY29uc3RydWN0b3JcblRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTcHJpdGUucHJvdG90eXBlKTtcblRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gVGV4dDtcblxuVGV4dC5mb250UHJvcGVydGllc0NhY2hlID0ge307XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZm9udD0nYm9sZCAyMHB0IEFyaWFsJ10ge3N0cmluZ30gVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gICAgICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZWcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGVnICdibHVlJywgJyNGQ0ZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXBcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd8bnVtYmVyfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNl0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gICAgICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAgICAgKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAgICAgKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHN0eWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdHlsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5maWxsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpbGwgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmZpbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLnN0cm9rZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zdHJva2UgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLnN0cm9rZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZHJvcFNoYWRvd0NvbG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZHJvcFNoYWRvd0NvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGUuZm9udCA9IHN0eWxlLmZvbnQgfHwgJ2JvbGQgMjBwdCBBcmlhbCc7XG4gICAgICAgICAgICBzdHlsZS5maWxsID0gc3R5bGUuZmlsbCB8fCAnYmxhY2snO1xuICAgICAgICAgICAgc3R5bGUuYWxpZ24gPSBzdHlsZS5hbGlnbiB8fCAnbGVmdCc7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2UgPSBzdHlsZS5zdHJva2UgfHwgJ2JsYWNrJzsgLy9wcm92aWRlIGEgZGVmYXVsdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzLzEzNlxuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIHx8IDA7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcCA9IHN0eWxlLndvcmRXcmFwIHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXBXaWR0aCA9IHN0eWxlLndvcmRXcmFwV2lkdGggfHwgMTAwO1xuXG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93ID0gc3R5bGUuZHJvcFNoYWRvdyB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvciB8fCAnIzAwMDAwMCc7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93QW5nbGUgPSBzdHlsZS5kcm9wU2hhZG93QW5nbGUgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA6IE1hdGguUEkgLyA2O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlID0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgOiA1O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0JsdXIgOiAwOyAvL3NoYWRvd0JsdXIgaXMgJzAnIGJ5IGRlZmF1bHQgYWNjb3JkaW5nIHRvIEhUTUxcblxuICAgICAgICAgICAgc3R5bGUucGFkZGluZyA9IHN0eWxlLnBhZGRpbmcgfHwgMDtcblxuICAgICAgICAgICAgc3R5bGUudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lIHx8ICdhbHBoYWJldGljJztcblxuICAgICAgICAgICAgc3R5bGUubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbiB8fCAnbWl0ZXInO1xuICAgICAgICAgICAgc3R5bGUubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQgfHwgMTA7XG5cbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gc3R5bGU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNvcHkgZm9yIHRoZSB0ZXh0IG9iamVjdC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCl7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgc3R5bGUgPSB0aGlzLl9zdHlsZTtcbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG5cbiAgICAvLyB3b3JkIHdyYXBcbiAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbCB0ZXh0XG4gICAgdmFyIG91dHB1dFRleHQgPSBzdHlsZS53b3JkV3JhcCA/IHRoaXMud29yZFdyYXAodGhpcy5fdGV4dCkgOiB0aGlzLl90ZXh0O1xuXG4gICAgLy8gc3BsaXQgdGV4dCBpbnRvIGxpbmVzXG4gICAgdmFyIGxpbmVzID0gb3V0cHV0VGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCB3aWR0aFxuICAgIHZhciBsaW5lV2lkdGhzID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aCk7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGZvbnRQcm9wZXJ0aWVzID0gdGhpcy5kZXRlcm1pbmVGb250UHJvcGVydGllcyhzdHlsZS5mb250KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBsaW5lV2lkdGg7XG4gICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICB2YXIgd2lkdGggPSBtYXhMaW5lV2lkdGggKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICB3aWR0aCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSAoIHdpZHRoICsgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgaGVpZ2h0XG4gICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLnN0eWxlLmxpbmVIZWlnaHQgfHwgZm9udFByb3BlcnRpZXMuZm9udFNpemUgKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG5cbiAgICB2YXIgaGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aDtcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGhlaWdodCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gKCBoZWlnaHQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nICogMiApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5jb250ZXh0LnNjYWxlKCB0aGlzLnJlc29sdXRpb24sIHRoaXMucmVzb2x1dGlvbik7XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgfVxuXG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFN0eWxlPVwiI0ZGMDAwMFwiO1xuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuICAgIHRoaXMuY29udGV4dC5zdHJva2VTdHlsZSA9IHN0eWxlLnN0cm9rZTtcbiAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIHRoaXMuY29udGV4dC50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmU7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVKb2luID0gc3R5bGUubGluZUpvaW47XG4gICAgdGhpcy5jb250ZXh0Lm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0O1xuXG4gICAgdmFyIGxpbmVQb3NpdGlvblg7XG4gICAgdmFyIGxpbmVQb3NpdGlvblk7XG5cbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGlmIChzdHlsZS5kcm9wU2hhZG93Qmx1ciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhTaGFkb3dPZmZzZXQgPSBNYXRoLmNvcyhzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgICAgICB2YXIgeVNoYWRvd09mZnNldCA9IE1hdGguc2luKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCArIHhTaGFkb3dPZmZzZXQsIGxpbmVQb3NpdGlvblkgKyB5U2hhZG93T2Zmc2V0ICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL3NldCBjYW52YXMgdGV4dCBzdHlsZXNcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZmlsbDtcblxuICAgIC8vZHJhdyBsaW5lcyBsaW5lIGJ5IGxpbmVcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0cm9rZSAmJiBzdHlsZS5zdHJva2VUaGlja25lc3MpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJva2VUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUudHJpbS54ID0gMDtcbiAgICB0ZXh0dXJlLnRyaW0ueSA9IC10aGlzLl9zdHlsZS5wYWRkaW5nO1xuXG4gICAgdGV4dHVyZS50cmltLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGV4dHVyZS50cmltLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAtIHRoaXMuX3N0eWxlLnBhZGRpbmcqMjtcblxuICAgIHRoaXMuX3dpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5lbWl0KCd1cGRhdGUnLCAgdGV4dHVyZS5iYXNlVGV4dHVyZSk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqL1xuVGV4dC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICAvL3RoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5yZW5kZXJXZWJHTC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgLy8gICB0aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYXNjZW50LCBkZXNjZW50IGFuZCBmb250U2l6ZSBvZiBhIGdpdmVuIGZvbnRTdHlsZVxuICpcbiAqIEBwYXJhbSBmb250U3R5bGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGZvbnRTdHlsZSlcbntcbiAgICB2YXIgcHJvcGVydGllcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdO1xuXG4gICAgaWYgKCFwcm9wZXJ0aWVzKVxuICAgIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzO1xuICAgICAgICB2YXIgY29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnfE3DiXEnKS53aWR0aCk7XG4gICAgICAgIHZhciBiYXNlbGluZSA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCdNJykud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xuXG4gICAgICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiAxLjQgfCAwO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNmMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQoJ3xNw4lxJywgMCwgYmFzZWxpbmUpO1xuXG4gICAgICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgICB2YXIgcGl4ZWxzID0gaW1hZ2VkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmUgPSB3aWR0aCAqIDQ7XG5cbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgIHZhciBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZWxpbmU7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCArPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnQgPSBiYXNlbGluZSAtIGk7XG5cbiAgICAgICAgaWR4ID0gcGl4ZWxzIC0gbGluZTtcbiAgICAgICAgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGRlc2NlbnQuIHNjYW4gZnJvbSBib3R0b20gdG8gdG9wIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggLT0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IGkgLSBiYXNlbGluZTtcbiAgICAgICAgcHJvcGVydGllcy5mb250U2l6ZSA9IHByb3BlcnRpZXMuYXNjZW50ICsgcHJvcGVydGllcy5kZXNjZW50O1xuXG4gICAgICAgIFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBuZXdsaW5lcyB0byBhIHN0cmluZyB0byBoYXZlIGl0IG9wdGltYWxseSBmaXQgaW50byB0aGUgaG9yaXpvbnRhbFxuICogYm91bmRzIHNldCBieSB0aGUgVGV4dCBvYmplY3QncyB3b3JkV3JhcFdpZHRoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS53b3JkV3JhcCA9IGZ1bmN0aW9uICh0ZXh0KVxue1xuICAgIC8vIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyXG4gICAgLy8gdGhhbiBpdHMgaG9yaXpvbnRhbCBib3VuZHMuXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICAgIHZhciB3b3JkV3JhcFdpZHRoID0gdGhpcy5fc3R5bGUud29yZFdyYXBXaWR0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XG4gICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQod29yZHNbal0pLndpZHRoO1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aFdpdGhTcGFjZSA9IHdvcmRXaWR0aCArIHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xuICAgICAgICAgICAgaWYgKGogPT09IDAgfHwgd29yZFdpZHRoV2l0aFNwYWNlID4gc3BhY2VMZWZ0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcHJpbnRpbmcgdGhlIG5ld2xpbmUgaWYgaXQncyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZSB0aGF0IGlzXG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSB3b3JkIHdyYXAgd2lkdGguXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal07XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB3b3Jkc1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgbGluZXMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFRleHQgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgVGV4dFxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UZXh0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzLmNhbGwodGhpcywgbWF0cml4KTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT10cnVlXSB7Ym9vbGVhbn0gd2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICAvLyBtYWtlIHN1cmUgdG8gcmVzZXQgdGhlIHRoZSBjb250ZXh0IGFuZCBjYW52YXMuLiBkb250IHdhbnQgdGhpcyBoYW5naW5nIGFyb3VuZCBpbiBtZW1vcnkhXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG5cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGVzdHJveUJhc2VUZXh0dXJlKTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIFJlbmRlclRhcmdldCA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBGaWx0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKSxcbiAgICB0ZW1wUmVjdCA9IG5ldyBtYXRoLlJlY3RhbmdsZSgpO1xuXG4vKipcbiAqIEEgQmFzZVJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIEJhc2VSZW5kZXJUZXh0dXJlIHNob3VsZCBiZSBwcmVsb2FkZWRcbiAqIG90aGVyd2lzZSBibGFjayByZWN0YW5nbGVzIHdpbGwgYmUgZHJhd24gaW5zdGVhZC5cbiAqXG4gKiBBIEJhc2VSZW5kZXJUZXh0dXJlIHRha2VzIGEgc25hcHNob3Qgb2YgYW55IERpc3BsYXkgT2JqZWN0IGdpdmVuIHRvIGl0cyByZW5kZXIgbWV0aG9kLiBUaGUgcG9zaXRpb25cbiAqIGFuZCByb3RhdGlvbiBvZiB0aGUgZ2l2ZW4gRGlzcGxheSBPYmplY3RzIGlzIGlnbm9yZWQuIEZvciBleGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcigxMDI0LCAxMDI0LCB7IHZpZXc6IGNhbnZhcywgcmF0aW86IDEgfSk7XG4gKiB2YXIgQmFzZXJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5CYXNlUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgODAwLCA2MDApO1xuICogdmFyIHNwcml0ZSA9IFBJWEkuU3ByaXRlLmZyb21JbWFnZShcInNwaW5PYmpfMDEucG5nXCIpO1xuICpcbiAqIHNwcml0ZS5wb3NpdGlvbi54ID0gODAwLzI7XG4gKiBzcHJpdGUucG9zaXRpb24ueSA9IDYwMC8yO1xuICogc3ByaXRlLmFuY2hvci54ID0gMC41O1xuICogc3ByaXRlLmFuY2hvci55ID0gMC41O1xuICpcbiAqIEJhc2VyZW5kZXJUZXh0dXJlLnJlbmRlcihzcHJpdGUpO1xuICogYGBgXG4gKlxuICogVGhlIFNwcml0ZSBpbiB0aGlzIGNhc2Ugd2lsbCBiZSByZW5kZXJlZCB0byBhIHBvc2l0aW9uIG9mIDAsMC4gVG8gcmVuZGVyIHRoaXMgc3ByaXRlIGF0IGl0cyBhY3R1YWxcbiAqIHBvc2l0aW9uIGEgQ29udGFpbmVyIHNob3VsZCBiZSB1c2VkOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZG9jID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKlxuICogZG9jLmFkZENoaWxkKHNwcml0ZSk7XG4gKlxuICogQmFzZXJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiBCYXNlcmVuZGVyVGV4dHVyZVxuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCBmb3IgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZVxuICogQHBhcmFtIFt3aWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbaGVpZ2h0PTEwMF0ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIEJhc2VSZW5kZXJUZXh0dXJlLCB5b3UgbXVzdCBwYXNzIGEgcmVuZGVyZXIgaW50byB0aGUgY29uc3RydWN0b3IuJyk7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUuY2FsbCh0aGlzLCBudWxsLCBzY2FsZU1vZGUpO1xuICAgXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG5cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047O1xuICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlIHx8IENPTlNULlNDQUxFX01PREVTLkRFRkFVTFQ7XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRHJhdy9yZW5kZXIgdGhlIGdpdmVuIERpc3BsYXlPYmplY3Qgb250byB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBkZXNjZW5kZW50cyBhcmUgdHJhbnNmb3JtZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIElmIGB1cGRhdGVUcmFuc2Zvcm1gIGlzIHRydWUgdGhlbiB0aGUgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQgYmVmb3JlIHRoZVxuICAgICAqIG1ldGhvZCByZXR1cm5zLiBPdGhlcndpc2UgaXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcgY29kZSB0byBjb3JyZWN0bHkgdXNlIG9yIHJlc2V0XG4gICAgICogdGhlIHRyYW5zZm9ybWVkIGRpc3BsYXkgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5IG9iamVjdCBpcyBhbHdheXMgcmVuZGVyZWQgd2l0aCBhIHdvcmxkQWxwaGEgdmFsdWUgb2YgMS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICAgICAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gICAgICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAgICAgKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBCYXNlUmVuZGVyVGV4dHVyZSB1c2VzLiBBIEJhc2VSZW5kZXJUZXh0dXJlIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgcmVuZGVyZXIgYXQgdGhlIG1vbWVudCBpZiBpdHMgd2ViR0wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlciA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnNjYWxlTW9kZSwgdGhpcy5yZXNvbHV0aW9uKTsvLywgdGhpcy50aGlzLnNjYWxlTW9kZSk7XG4gICAgICAgIHRoaXMuX2dsVGV4dHVyZXNbZ2wuaWRdID0gIHRoaXMudGV4dHVyZUJ1ZmZlci50ZXh0dXJlO1xuICAgICAgICBcbiAgICAgICAgLy9UT0RPIHJlZmFjdG9yIGZpbHRlciBtYW5hZ2VyLi4gYXMgcmVhbGx5IGl0cyBubyBsb25nZXIgYSBtYW5hZ2VyIGlmIHdlIHVzZSBpdCBoZXJlLi5cbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbmV3IEZpbHRlck1hbmFnZXIodGhpcy5yZW5kZXJlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlcldlYkdMO1xuXG4gICAgICAgIC8vIHRoZSBjcmVhdGlvbiBvZiBhIGZpbHRlciBtYW5hZ2VyIHVuYmluZHMgdGhlIGJ1ZmZlcnMuLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgICAgICBpZih0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQpdGhpcy5yZW5kZXJlci5fYWN0aXZlUmVuZGVyVGFyZ2V0LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlckNhbnZhcztcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcih0aGlzLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuaGVpZ2h0KiB0aGlzLnJlc29sdXRpb24pO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcblxufVxuXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VUZXh0dXJlLnByb3RvdHlwZSk7XG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNlUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gQmFzZVJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIHVwZGF0ZUJhc2Uge2Jvb2xlYW59IFNob3VsZCB0aGUgYmFzZVRleHR1cmUud2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYmUgcmVzaXplZCBhcyB3ZWxsP1xuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgaWYgKHdpZHRoID09PSB0aGlzLndpZHRoICYmIGhlaWdodCA9PT0gdGhpcy5oZWlnaHQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZCA9ICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7XG5cbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgQmFzZVJlbmRlclRleHR1cmUuXG4gKlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoZGVzdGluYXRpb25GcmFtZSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuYmluZEZyYW1lYnVmZmVyKHRoaXMucmVuZGVyZXIuZ2wuRlJBTUVCVUZGRVIsIHRoaXMudGV4dHVyZUJ1ZmZlci5mcmFtZUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmNsZWFyKGZhbHNlLCBkZXN0aW5hdGlvbkZyYW1lKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAoZnJhbWUsIGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAodXBkYXRlVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpID8gdXBkYXRlVHJhbnNmb3JtIDogdHJ1ZTsvLyF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIudHJhbnNmb3JtID0gbWF0cml4O1xuXG4gICAgLy9UT0RPIG5vdCBhIGZhbiB0aGF0IHRoaXMgaXMgaGVyZS4uLiBpdCB3aWxsIG1vdmUhXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKCk7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICBpZiAodXBkYXRlVHJhbnNmb3JtKVxuICAgIHtcblxuICAgICAgICAvLyByZXNldCB0aGUgbWF0cml4IG9mIHRoZSBkaXNwbGF0eU9iamVjdC4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uaWRlbnRpdHkoKTtcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmN1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGVtcFJlY3Qud2lkdGggPSBmcmFtZS5oZWlnaHQ7XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gZnJhbWUud2lkdGg7XG4gICBcbiAgICAvL1RPRE8gcmVuYW1lIHRleHR1cmVCdWZmZXIgdG8gcmVuZGVyVGFyZ2V0Li5cbiAgICB2YXIgdGVtcCA9ICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0aGlzLmZpbHRlck1hbmFnZXI7XG4gICAgXG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIuYWN0aXZhdGUoZnJhbWUsIHRlbXBSZWN0KTtcbiAgICBjb25zb2xlLmxvZyhkaXNwbGF5T2JqZWN0KVxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnRleHR1cmVCdWZmZXIsIGNsZWFyKTtcblxuICAgLy8gY29uc29sZS5sb2coXCJSRU5ERVJJTkcgXCIpO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRlbXA7XG59O1xuXG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcl0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKGZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVwZGF0ZVRyYW5zZm9ybSA9ICEhdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdmFyIHd0ID0gdGVtcE1hdHJpeDtcblxuICAgIHd0LmlkZW50aXR5KCk7XG5cbiAgICBpZiAobWF0cml4KVxuICAgIHtcbiAgICAgICAgd3QuYXBwZW5kKG1hdHJpeCk7XG4gICAgfVxuXG5cbiAgICB3dC50eCArPSBmcmFtZS54O1xuICAgIHd0LnR5ICs9IGZyYW1lLnk7XG5cbiAgICB2YXIgY2FjaGVkV3QgPSBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtO1xuICAgIFxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSB3dDtcblxuICAgIC8vIHNldFdvcmxkIEFscGhhIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgcmVuZGVyZXIgYXQgZnVsbCBvcGFjaXR5XG4gICAgZGlzcGxheU9iamVjdC53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICB2YXIgaSwgajtcblxuICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBcbi8vICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5cbiAgICB2YXIgY29udGV4dCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlYWxSZXNvbHV0aW9uID0gdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIGNvbnRleHQpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uID0gcmVhbFJlc29sdXRpb247XG5cbiAgICBpZihkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID09PSB3dClcbiAgICB7XG4gICAgICAgIC8vIGZpeGVzIGNhY2hlQXNCaXRtYXAgSGFwcGVuaW5nIGR1cmluZyB0aGUgYWJvdmUuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtID0gY2FjaGVkV3Q7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBkZXN0cm95QmFzZSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIGZpbHRlcm1hbmFnZXIuLlxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5CYXNlUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoZnJhbWUpXG57XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uuc3JjID0gdGhpcy5nZXRCYXNlNjQoZnJhbWUpO1xuICAgIHJldHVybiBpbWFnZTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGlzIHRleHR1cmUuIEl0IHdvcmtzIGJ5IGNhbGxpbmcgQmFzZVJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgIHJldHVybiB0aGlzLmdldENhbnZhcyhmcmFtZSkudG9EYXRhVVJMKCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIEJhc2VSZW5kZXJUZXh0dXJlIHRvIGl0IGFuZCB0aGVuIHJldHVybnMgaXQuXG4gKlxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IEEgQ2FudmFzIGVsZW1lbnQgd2l0aCB0aGUgdGV4dHVyZSByZW5kZXJlZCBvbi5cbiAqL1xuQmFzZVJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldENhbnZhcyA9IGZ1bmN0aW9uICggZnJhbWUgKVxue1xuICAgXG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUud2lkdGg7XG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2lkdGggPSBmcmFtZS53aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBjYW52YXNEYXRhID0gdGVtcENhbnZhcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2FudmFzRGF0YS5kYXRhLnNldCh3ZWJHTFBpeGVscyk7XG5cbiAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICByZXR1cm4gdGVtcENhbnZhcy5jYW52YXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCFmcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSB0ZW1wUmVjdDtcbiAgICAgICAgICAgIGZyYW1lLndpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy53aWR0aDtcbiAgICAgICAgICAgIGZyYW1lLmhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoZnJhbWUud2lkdGggPT09IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGggJiYgXG4gICAgICAgICAgIGZyYW1lLmhlaWdodCA9PT0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5oZWlnaHQgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgICAgIHZhciB0ZW1wQ2FudmFzID0gbmV3IENhbnZhc0J1ZmZlcihmcmFtZS53aWR0aCAqIHJlc29sdXRpb24sIGZyYW1lLmhlaWdodCAqIHJlc29sdXRpb24pO1xuICAgICAgICAgICAgdmFyIGNhbnZhc0RhdGEgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dC5nZXRJbWFnZURhdGEoZnJhbWUueCAgKiByZXNvbHV0aW9uLCBmcmFtZS55ICogcmVzb2x1dGlvbiwgZnJhbWUud2lkdGggKiByZXNvbHV0aW9uLCBmcmFtZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgICAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIHRoZSBlbnRpcmUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoIGZyYW1lIClcbntcbiAgICBpZighZnJhbWUpXG4gICAge1xuICAgICAgICBmcmFtZSA9IHRlbXBSZWN0O1xuICAgICAgICBmcmFtZS53aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICBmcmFtZS5oZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGggKiB0aGlzLnJlc29sdXRpb247XG4gICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICByZXR1cm4gd2ViR0xQaXhlbHM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKGZyYW1lLnggKiB0aGlzLnJlc29sdXRpb24sIGZyYW1lLnkgKiB0aGlzLnJlc29sdXRpb24sIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIGEgcGl4ZWwgd2l0aGluIHRoZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cbkJhc2VSZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uIChmcmFtZSwgeCwgeSlcbntcbiAgICB0ZW1wUmVjdC54ID0geDtcbiAgICB0ZW1wUmVjdC55ID0geTtcbiAgICB0ZW1wUmVjdC53aWR0aCA9IDEgLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGVtcFJlY3QuaGVpZ2h0ID0gMSAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIGlmKGZyYW1lKVxuICAgIHtcbiAgICAgICAgdGVtcFJlY3QueCArPSBmcmFtZS54O1xuICAgICAgICB0ZW1wUmVjdC55ICs9IGZyYW1lLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UGl4ZWxzKHRlbXBSZWN0KTtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlLiBBbGwgdGV4dHVyZXMgaGF2ZSBhIGJhc2UgdGV4dHVyZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50IHBpeGVsIHJhdGlvc1xuICovXG5mdW5jdGlvbiBCYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDEwMDtcblxuICAgIC8vIFRPRE8gZG9jc1xuICAgIC8vIHVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2VcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxXaWR0aCA9IDEwMDtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgaGVpZ2h0IG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUgdG8gYXBwbHkgd2hlbiBzY2FsaW5nIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuTElORUFSXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIG9uY2UgdGhlIGJhc2UgdGV4dHVyZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbmV2ZXIgdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmFpbHMgdG8gbG9hZCBvciBoYXMgbm8gdGV4dHVyZSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgaWYgdGhlIHNvdXJjZSBpcyBjdXJyZW50bHkgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIElmIGFuIEltYWdlIHNvdXJjZSBpcyBsb2FkaW5nIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmVcbiAgICAgKiBkaXNwYXRjaGVkIHdoZW4gdGhlIG9wZXJhdGlvbiBlbmRzLiBBbiB1bmRlcnlsaW5nIHNvdXJjZSB0aGF0IGlzXG4gICAgICogaW1tZWRpYXRlbHktYXZhaWxhYmxlIGJ5cGFzc2VzIGxvYWRpbmcgZW50aXJlbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW1hZ2Ugc291cmNlIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUT0RPOiBNYWtlIHRoaXMgYSBzZXR0ZXIgdGhhdCBjYWxscyBsb2FkU291cmNlKCk7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtJbWFnZXxDYW52YXN9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsOyAvLyBzZXQgaW4gbG9hZFNvdXJjZSwgaWYgYXQgYWxsXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiBSR0IgY2hhbm5lbHMgc2hvdWxkIGJlIHByZS1tdWx0aXBsaWVkIGJ5IEFscGhhICAoV2ViR0wgb25seSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBvciBub3QgdGhlIHRleHR1cmUgaXMgYSBwb3dlciBvZiB0d28sIHRyeSB0byB1c2UgcG93ZXIgb2YgdHdvIHRleHR1cmVzIGFzIG11Y2ggYXMgeW91IGNhblxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IGZhbHNlO1xuXG4gICAgLy8gdXNlZCBmb3Igd2ViR0xcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiBhIG1pcG1hcCBvZiB0aGlzIHRleHR1cmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLiBUaGlzIHZhbHVlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIHRleHR1cmUgaXMgdXNlZFxuICAgICAqIEFsc28gdGhlIHRleHR1cmUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBzaXplIHRvIHdvcmtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5taXBtYXAgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHJlbmRlcmVyIElEcyB0byB3ZWJnbCB0ZXh0dXJlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgV2ViR0xUZXh0dXJlPn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9pZCA9IDA7XG4gICAgXG4gICAgLy8gaWYgbm8gc291cmNlIHBhc3NlZCBkb24ndCB0cnkgdG8gbG9hZFxuICAgIGlmIChzb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmluaXNoZXMgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkZWRcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmFpbHMgdG8gbG9hZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBCYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0ZXh0dXJlIG9uIGFsbCB0aGUgd2ViZ2wgcmVuZGVyZXJzLCB0aGlzIGFsc28gYXNzdW1lcyB0aGUgc3JjIGhhcyBjaGFuZ2VkLlxuICpcbiAqIEBmaXJlcyB1cGRhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5yZWFsV2lkdGggPSB0aGlzLnNvdXJjZS5uYXR1cmFsV2lkdGggfHwgdGhpcy5zb3VyY2Uud2lkdGg7XG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gdGhpcy5zb3VyY2UubmF0dXJhbEhlaWdodCB8fCB0aGlzLnNvdXJjZS5oZWlnaHQ7XG5cbiAgICB0aGlzLndpZHRoID0gdGhpcy5yZWFsV2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlYWxIZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IHV0aWxzLmlzUG93ZXJPZlR3byh0aGlzLnJlYWxXaWR0aCwgdGhpcy5yZWFsSGVpZ2h0KTtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIExvYWQgYSBzb3VyY2UuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBpcyBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlLCBzdWNoIGFzIGFuIGltYWdlIHRoYXQgbmVlZHMgdG8gYmVcbiAqIGRvd25sb2FkZWQsIHRoZW4gdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIGluIHRoZSBmdXR1cmVcbiAqIGFuZCBgaGFzTG9hZGVkYCB3aWxsIHJlbWFpbiBmYWxzZSBhZnRlciB0aGlzIGNhbGwuXG4gKlxuICogVGhlIGxvZ2ljIHN0YXRlIGFmdGVyIGNhbGxpbmcgYGxvYWRTb3VyY2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGVnLiBgZnJvbUltYWdlYCwgYG5ldyBCYXNlVGV4dHVyZWApIGlzOlxuICpcbiAqICAgICBpZiAodGV4dHVyZS5oYXNMb2FkZWQpXG4ge1xuICogICAgICAgIC8vIHRleHR1cmUgcmVhZHkgZm9yIHVzZVxuICogICAgIH0gZWxzZSBpZiAodGV4dHVyZS5pc0xvYWRpbmcpXG4ge1xuICogICAgICAgIC8vIGxpc3RlbiB0byAnbG9hZGVkJyBhbmQvb3IgJ2Vycm9yJyBldmVudHMgb24gdGV4dHVyZVxuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAgLy8gbm90IGxvYWRpbmcsIG5vdCBnb2luZyB0byBsb2FkIFVOTEVTUyB0aGUgc291cmNlIGlzIHJlbG9hZGVkXG4gKiAgICAgICAgLy8gKGl0IG1heSBzdGlsbCBtYWtlIHNlbnNlIHRvIGxpc3RlbiB0byB0aGUgZXZlbnRzKVxuICogICAgIH1cbiAqXG4gKiBAcHJvdGVjdGVkXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUubG9hZFNvdXJjZSA9IGZ1bmN0aW9uIChzb3VyY2UpXG57XG4gICAgdmFyIHdhc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZztcbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAod2FzTG9hZGluZyAmJiB0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc291cmNlLm9uZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgLy8gQXBwbHkgc291cmNlIGlmIGxvYWRlZC4gT3RoZXJ3aXNlIHNldHVwIGFwcHJvcHJpYXRlIGxvYWRpbmcgbW9uaXRvcnMuXG4gICAgaWYgKCh0aGlzLnNvdXJjZS5jb21wbGV0ZSB8fCB0aGlzLnNvdXJjZS5nZXRDb250ZXh0KSAmJiB0aGlzLnNvdXJjZS53aWR0aCAmJiB0aGlzLnNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNvdXJjZS5nZXRDb250ZXh0KVxuICAgIHtcblxuICAgICAgICAvLyBJbWFnZSBmYWlsIC8gbm90IHJlYWR5XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuXG4gICAgICAgIHNvdXJjZS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgc2NvcGUuZW1pdCgnbG9hZGVkJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvdXJjZS5vbmVycm9yID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5lbWl0KCdlcnJvcicsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQZXIgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjdGhlLWltZy1lbGVtZW50XG4gICAgICAgIC8vICAgXCJUaGUgdmFsdWUgb2YgYGNvbXBsZXRlYCBjYW4gdGh1cyBjaGFuZ2Ugd2hpbGUgYSBzY3JpcHQgaXMgZXhlY3V0aW5nLlwiXG4gICAgICAgIC8vIFNvIGNvbXBsZXRlIG5lZWRzIHRvIGJlIHJlLWNoZWNrZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gYWRkZWQuLlxuICAgICAgICAvLyBOT1RFOiBjb21wbGV0ZSB3aWxsIGJlIHRydWUgaWYgdGhlIGltYWdlIGhhcyBubyBzcmMgc28gYmVzdCB0byBjaGVjayBpZiB0aGUgc3JjIGlzIHNldC5cbiAgICAgICAgaWYgKHNvdXJjZS5jb21wbGV0ZSAmJiBzb3VyY2Uuc3JjKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyAuLmFuZCBpZiB3ZSdyZSBjb21wbGV0ZSBub3csIG5vIG5lZWQgZm9yIGNhbGxiYWNrc1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgc29tZSBvdGhlciB0cmFja2luZyB2YXJzIG9uY2VcbiAqIGEgc291cmNlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5fc291cmNlTG9hZGVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBiYXNlIHRleHR1cmVcbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5pbWFnZVVybClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuICAgICAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlLnNyYyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLnNvdXJjZS5fcGl4aUlkXTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG5cbiAgICB0aGlzLmRpc3Bvc2UoKTtcbn07XG5cbi8qKlxuICogRnJlZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTCBtZW1vcnkgd2l0aG91dCBkZXN0cm95aW5nIHRoaXMgdGV4dHVyZSBvYmplY3QuXG4gKiBUaGlzIG1lYW5zIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSB0ZXh0dXJlIGxhdGVyIHdoaWNoIHdpbGwgdXBsb2FkIGl0IHRvIEdQVVxuICogbWVtb3J5IGFnYWluLlxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIHRoaXMpO1xuXG4gICAgLy8gdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lZWRlZCwgdGhlIHJlbmRlcmVycyBzaG91bGQgY2xlYW51cCBhbGwgdGhlIGdsIHRleHR1cmVzLlxuICAgIC8vIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgc291cmNlIGltYWdlIG9mIHRoZSB0ZXh0dXJlLlxuICogVGhlIG9yaWdpbmFsIHNvdXJjZSBtdXN0IGJlIGFuIEltYWdlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5ld1NyYyB7c3RyaW5nfSB0aGUgcGF0aCBvZiB0aGUgaW1hZ2VcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNvdXJjZUltYWdlID0gZnVuY3Rpb24gKG5ld1NyYylcbntcbiAgICB0aGlzLnNvdXJjZS5zcmMgPSBuZXdTcmM7XG5cbiAgICB0aGlzLmxvYWRTb3VyY2UodGhpcy5zb3VyY2UpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIGJhc2UgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBTaG91bGQgdXNlIGFub255bW91cyBDT1JTPyBEZWZhdWx0cyB0byB0cnVlIGlmIHRoZSBVUkwgaXMgbm90IGEgZGF0YS1VUkkuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmIChjcm9zc29yaWdpbiA9PT0gdW5kZWZpbmVkICYmIGltYWdlVXJsLmluZGV4T2YoJ2RhdGE6JykgIT09IDApXG4gICAge1xuICAgICAgICBjcm9zc29yaWdpbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIC8vIG5ldyBJbWFnZSgpIGJyZWFrcyB0ZXggbG9hZGluZyBpbiBzb21lIHZlcnNpb25zIG9mIENocm9tZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMzgwNzFcbiAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgaWYgKGNyb3Nzb3JpZ2luKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoaW1hZ2UsIHNjYWxlTW9kZSk7XG4gICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgaW1hZ2Uuc3JjID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSBiYXNlVGV4dHVyZTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBAMnggYXQgdGhlIGVuZCBvZiB0aGUgdXJsIHdlIGFyZSBnb2luZyB0byBhc3N1bWUgaXRzIGEgaGlnaHJlcyBpbWFnZVxuICAgICAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKGltYWdlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFjYW52YXMuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGNhbnZhcy5fcGl4aUlkID0gJ2NhbnZhc18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG4iLCJ2YXIgQmFzZVJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VSZW5kZXJUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIFJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIFJlbmRlclRleHR1cmUgc2hvdWxkIGJlIHByZWxvYWRlZFxuICogb3RoZXJ3aXNlIGJsYWNrIHJlY3RhbmdsZXMgd2lsbCBiZSBkcmF3biBpbnN0ZWFkLlxuICpcbiAqIEEgUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCA4MDAsIDYwMCk7XG4gKiB2YXIgc3ByaXRlID0gUElYSS5TcHJpdGUuZnJvbUltYWdlKFwic3Bpbk9ial8wMS5wbmdcIik7XG4gKlxuICogc3ByaXRlLnBvc2l0aW9uLnggPSA4MDAvMjtcbiAqIHNwcml0ZS5wb3NpdGlvbi55ID0gNjAwLzI7XG4gKiBzcHJpdGUuYW5jaG9yLnggPSAwLjU7XG4gKiBzcHJpdGUuYW5jaG9yLnkgPSAwLjU7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiByZW5kZXJUZXh0dXJlXG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIGZvciB0aGlzIFJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIFJlbmRlclRleHR1cmUoYmFzZVJlbmRlclRleHR1cmUsIGZyYW1lKVxue1xuICAgIGlmICghcmVuZGVyZXIpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgb2JqZWN0IHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Jhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIFRleHR1cmUuY2FsbCh0aGlzLFxuICAgICAgICBiYXNlUmVuZGVyVGV4dHVyZSxcbiAgICAgICAgZnJhbWUgXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IHRydWU7XG5cbiAgICB0aGlzLl91cGRhdGVVdnMoKTtcbn1cblxuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRleHR1cmUucHJvdG90eXBlKTtcblJlbmRlclRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVuZGVyVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGV4dHVyZTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgd2lkdGggdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGVpZ2h0IHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSB1cGRhdGVCYXNlIHtib29sZWFufSBTaG91bGQgdGhlIGJhc2VUZXh0dXJlLndpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGJlIHJlc2l6ZWQgYXMgd2VsbD9cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIHVwZGF0ZUJhc2UpXG57XG4gICBcbiAgICAvL1RPRE8gLSBjb3VsZCBiZSBub3QgcmVxdWlyZWQuLlxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSB0aGlzLmNyb3Aud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmNyb3AuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKHVwZGF0ZUJhc2UpXG4gICAge1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYmFzZVRleHR1cmUuY2xlYXIodGhpcy5mcmFtZSlcbiAgICBcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUZXh0dXJlLnJlbmRlcih0aGlzLmZyYW1lLCBkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRJbWFnZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuYmFzZVRleHR1cmUuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIFJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0QmFzZTY0ID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNlNjQuZ2V0SW1hZ2UodGhpcy5mcmFtZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIFJlbmRlclRleHR1cmUgdG8gaXQgYW5kIHRoZW4gcmV0dXJucyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gQSBDYW52YXMgZWxlbWVudCB3aXRoIHRoZSB0ZXh0dXJlIHJlbmRlcmVkIG9uLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldENhbnZhcyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVscyh0aGlzLmZyYW1lKTtcbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHJldHVybiB0aGlzLmJhc2VUZXh0dXJlLmdldFBpeGVsKHRoaXMuZnJhbWUsIHgsIHkpO1xufTtcblxuUmVuZGVyVGV4dHVyZS5jcmVhdGUgPSBmdW5jdGlvbihyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHJldHVybiBuZXcgUmVuZGVyVGV4dHVyZShuZXcgQmFzZVJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbikpO1xufVxuXG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnMgPSByZXF1aXJlKCcuL1RleHR1cmVVdnMnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlIG9yIHBhcnQgb2YgYW4gaW1hZ2UuIEl0IGNhbm5vdCBiZSBhZGRlZFxuICogdG8gdGhlIGRpc3BsYXkgbGlzdCBkaXJlY3RseS4gSW5zdGVhZCB1c2UgaXQgYXMgdGhlIHRleHR1cmUgZm9yIGEgU3ByaXRlLiBJZiBubyBmcmFtZSBpcyBwcm92aWRlZCB0aGVuIHRoZSB3aG9sZSBpbWFnZSBpcyB1c2VkLlxuICpcbiAqIFlvdSBjYW4gZGlyZWN0bHkgY3JlYXRlIGEgdGV4dHVyZSBmcm9tIGFuIGltYWdlIGFuZCB0aGVuIHJldXNlIGl0IG11bHRpcGxlIHRpbWVzIGxpa2UgdGhpcyA6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZSgnYXNzZXRzL2ltYWdlLnBuZycpO1xuICogdmFyIHNwcml0ZTEgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiB2YXIgc3ByaXRlMiA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBiYXNlVGV4dHVyZSB7UElYSS5CYXNlVGV4dHVyZX0gVGhlIGJhc2UgdGV4dHVyZSBzb3VyY2UgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlIGZyb21cbiAqIEBwYXJhbSBbZnJhbWVdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3RhbmdsZSBmcmFtZSBvZiB0aGUgdGV4dHVyZSB0byBzaG93XG4gKiBAcGFyYW0gW2Nyb3BdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIGFyZWEgb2Ygb3JpZ2luYWwgdGV4dHVyZVxuICogQHBhcmFtIFt0cmltXSB7UElYSS5SZWN0YW5nbGV9IFRyaW1tZWQgdGV4dHVyZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBbcm90YXRlXSB7Ym9vbGVhbn0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlcyAoIHVzZWQgYnkgdGV4dHVyZSBwYWNrZXIgKVxuICovXG5mdW5jdGlvbiBUZXh0dXJlKGJhc2VUZXh0dXJlLCBmcmFtZSwgY3JvcCwgdHJpbSwgcm90YXRlKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogRG9lcyB0aGlzIFRleHR1cmUgaGF2ZSBhbnkgZnJhbWUgZGF0YSBhc3NpZ25lZCB0byBpdD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5ub0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VUZXh0dXJlIGluc3RhbmNlb2YgVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0cmltIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLnRyaW0gPSB0cmltO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCB0aGUgcmVuZGVyZXIga25vdyBpZiB0aGUgdGV4dHVyZSBpcyB2YWxpZC4gSWYgaXQncyBub3QgdGhlbiBpdCBjYW5ub3QgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgYSByZW5kZXJlciBrbm93IHRoYXQgYSB0ZXh0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgKHVzZWQgbWFpbmx5IGZvciB3ZWJHTCB1diB1cGRhdGVzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVpcmVzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgVVYgZGF0YSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgYXJlYSBvZiB0aGUgQmFzZVRleHR1cmUgaW1hZ2UgdG8gYWN0dWFsbHkgY29weSB0byB0aGUgQ2FudmFzIC8gV2ViR0wgd2hlbiByZW5kZXJpbmcsXG4gICAgICogaXJyZXNwZWN0aXZlIG9mIHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBvciBwbGFjZW1lbnQgKHdoaWNoIGNhbiBiZSBpbmZsdWVuY2VkIGJ5IHRyaW1tZWQgdGV4dHVyZSBhdGxhc2VzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jcm9wID0gY3JvcCB8fCBmcmFtZTsvL25ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdGF0ZSA9ICEhcm90YXRlO1xuXG4gICAgaWYgKGJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBmcmFtZSB3ZSBzaG91bGQgbW9uaXRvciBmb3IgYW55IGJhc2UgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlLm9uY2UoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZyYW1lIG9yIHRoZSBiYXNlVGV4dHVyZSBpcyB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICovXG4gICAgZnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgICAgICAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50cmltICYmICF0aGlzLnJvdGF0ZSAmJiAoZnJhbWUueCArIGZyYW1lLndpZHRoID4gdGhpcy5iYXNlVGV4dHVyZS53aWR0aCB8fCBmcmFtZS55ICsgZnJhbWUuaGVpZ2h0ID4gdGhpcy5iYXNlVGV4dHVyZS5oZWlnaHQpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dHVyZSBFcnJvcjogZnJhbWUgZG9lcyBub3QgZml0IGluc2lkZSB0aGUgYmFzZSBUZXh0dXJlIGRpbWVuc2lvbnMgJyArIHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5zb3VyY2UgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50cmltKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wID0gZnJhbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlcyB0aGlzIHRleHR1cmUgb24gdGhlIGdwdS5cbiAqXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5iYXNlVGV4dHVyZS51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyBsb2FkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlTG9hZGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIC8vIFRPRE8gdGhpcyBjb2RlIGxvb2tzIGNvbmZ1c2luZy4uIGJvbyB0byBhYnVzaW5nIGdldHRlcnMgYW5kIHNldHRlcnNzIVxuICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy5fZnJhbWU7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyB1cGRhdGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZVVwZGF0ZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSBiYXNlVGV4dHVyZS53aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSBiYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlPWZhbHNlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlKVxue1xuICAgIGlmICh0aGlzLmJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGRlc3Ryb3lCYXNlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG4gICAgdGhpcy50cmltID0gbnVsbDtcbiAgICB0aGlzLmNyb3AgPSBudWxsO1xuXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UsIHRoaXMpO1xuICAgIHRoaXMub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGV4dHVyZSBvYmplY3QgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLmZyYW1lLCB0aGlzLmNyb3AsIHRoaXMudHJpbSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5fdXBkYXRlVXZzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuX3V2cylcbiAgICB7XG4gICAgICAgIHRoaXMuX3V2cyA9IG5ldyBUZXh0dXJlVXZzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXZzLnNldCh0aGlzLmNyb3AsIHRoaXMuYmFzZVRleHR1cmUsIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFRleHR1cmUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSAgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gY3Jvc3NvcmlnaW4ge2Jvb2xlYW59IFdoZXRoZXIgcmVxdWVzdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY3Jvc3NvcmlnaW5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21JbWFnZShpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xuICAgICAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gdGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICh0eXBlb2YgdmlkZW8gPT09ICdzdHJpbmcnKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFRleHR1cmUuZnJvbVZpZGVvVXJsKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSB2aWRlbyB1cmwuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvVXJsIHtzdHJpbmd9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW9VcmwgPSBmdW5jdGlvbiAodmlkZW9VcmwsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHZpZGVvVXJsLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIHRleHR1cmUgdG8gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuIFRoaXMgY2FjaGUgaXMgc2hhcmVkIGFjcm9zcyB0aGUgd2hvbGUgUElYSSBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIFRleHR1cmUgdG8gYWRkIHRvIHRoZSBjYWNoZS5cbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIGJlIHN0b3JlZCBhZ2FpbnN0LlxuICovXG5UZXh0dXJlLmFkZFRleHR1cmVUb0NhY2hlID0gZnVuY3Rpb24gKHRleHR1cmUsIGlkKVxue1xuICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpZF0gPSB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB0ZXh0dXJlIGZyb20gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCBvZiB0aGUgdGV4dHVyZSB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRoYXQgd2FzIHJlbW92ZWRcbiAqL1xuVGV4dHVyZS5yZW1vdmVUZXh0dXJlRnJvbUNhY2hlID0gZnVuY3Rpb24gKGlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBBbiBlbXB0eSB0ZXh0dXJlLCB1c2VkIG9mdGVuIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBtdWx0aXBsZSBlbXB0eSB0ZXh0dXJlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZS5FTVBUWSA9IG5ldyBUZXh0dXJlKG5ldyBCYXNlVGV4dHVyZSgpKTtcbiIsIlxuLyoqXG4gKiBBIHN0YW5kYXJkIG9iamVjdCB0byBzdG9yZSB0aGUgVXZzIG9mIGEgdGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmVVdnMoKVxue1xuICAgIHRoaXMueDAgPSAwO1xuICAgIHRoaXMueTAgPSAwO1xuXG4gICAgdGhpcy54MSA9IDE7XG4gICAgdGhpcy55MSA9IDA7XG5cbiAgICB0aGlzLngyID0gMTtcbiAgICB0aGlzLnkyID0gMTtcblxuICAgIHRoaXMueDMgPSAwO1xuICAgIHRoaXMueTMgPSAxO1xuXG4gICAgdGhpcy54eTBfdWludDMyID0gMDtcbiAgICB0aGlzLnh5MV91aW50MzIgPSAwO1xuICAgIHRoaXMueHkyX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTNfdWludDMyID0gMDtcblxuICAgIHRoaXMudXZzX3VpbnQzMiA9IG5ldyBVaW50MzJBcnJheSg0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVVdnM7XG5cbi8qKlxuICogU2V0cyB0aGUgdGV4dHVyZSBVdnMgYmFzZWQgb24gdGhlIGdpdmVuIGZyYW1lIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gZnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIGJhc2VGcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gcm90YXRlIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgcm90YXRlZFxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZVV2cy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZyYW1lLCBiYXNlRnJhbWUsIHJvdGF0ZSlcbntcbiAgICB2YXIgdHcgPSBiYXNlRnJhbWUud2lkdGg7XG4gICAgdmFyIHRoID0gYmFzZUZyYW1lLmhlaWdodDtcblxuICAgIGlmKHJvdGF0ZSlcbiAgICB7XG4gICAgICAgIHRoaXMueDAgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSBmcmFtZS55IC8gdGg7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy54MCA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcbiAgICB9XG5cbiAgICB0aGlzLnV2c191aW50MzJbMF0gPSAoKCh0aGlzLnkwICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDAgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsxXSA9ICgoKHRoaXMueTEgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MSAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzJdID0gKCgodGhpcy55MiAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngyICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbM10gPSAoKCh0aGlzLnkzICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDMgKiA2NTUzNSkgJiAweEZGRkYpO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIG9mIGEgW3BsYXlpbmddIFZpZGVvLlxuICpcbiAqIFZpZGVvIGJhc2UgdGV4dHVyZXMgbWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QgaW4gdGhlaXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNldmVyYWwgd2F5cywgc3VjaCBhczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCgnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHsgc3JjOiAnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9KTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbJy92aWRlby53ZWJtJywgJy92aWRlby5tcDQnXSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoW1xuICogICAgIHsgc3JjOiAnL3ZpZGVvLndlYm0nLCBtaW1lOiAndmlkZW8vd2VibScgfSxcbiAqICAgICB7IHNyYzogJy92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9XG4gKiBdKTtcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgW1wiZGV1c1wiIGRlbW9dKGh0dHA6Ly93d3cuZ29vZGJveWRpZ2l0YWwuY29tL3BpeGlqcy9leGFtcGxlcy9kZXVzLykuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkJhc2VUZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gVmlkZW9CYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmlkZW8gc291cmNlIGVsZW1lbnQgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIC8vIGhvb2sgaW4gaGVyZSB0byBjaGVjayBpZiB2aWRlbyBpcyBhbHJlYWR5IGF2YWlsYWJsZS5cbiAgICAvLyBCYXNlVGV4dHVyZSBsb29rcyBmb3IgYSBzb3VyY2UuY29tcGxldGUgYm9vbGVhbiwgcGx1cyB3aWR0aCAmIGhlaWdodC5cblxuICAgIGlmICgoc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0VOT1VHSF9EQVRBIHx8IHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9GVVRVUkVfREFUQSkgJiYgc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICBzb3VyY2UuY29tcGxldGUgPSB0cnVlO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgc291cmNlLCBzY2FsZU1vZGUpO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBiYXNlIHRleHR1cmUgYXV0b21hdGljYWxseSB1cGRhdGUgaXRzZWxmLCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX29uVXBkYXRlID0gdGhpcy5fb25VcGRhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkNhblBsYXkgPSB0aGlzLl9vbkNhblBsYXkuYmluZCh0aGlzKTtcblxuICAgIGlmICghc291cmNlLmNvbXBsZXRlKVxuICAgIHtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIC8vIHN0YXJ0ZWQgcGxheWluZy4uXG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fb25QbGF5U3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX29uUGxheVN0b3AuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fX2xvYWRlZCA9IGZhbHNlO1xufVxuXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZVRleHR1cmUucHJvdG90eXBlKTtcblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmlkZW9CYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9CYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3Agb2YgdGhlIHZpZGVvIGJhc2UgdGV4dHVyZSwgb25seSBydW5zIHdoZW4gYXV0b1VwZGF0ZSBpcyBzZXQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUnVucyB0aGUgdXBkYXRlIGxvb3Agd2hlbiB0aGUgdmlkZW8gaXMgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBwYXVzZSBldmVudCBpcyB0cmlnZ2VyZWQsIHN0b3BzIHRoZSB1cGRhdGUgbG9vcFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgdmlkZW8gaXMgbG9hZGVkIGFuZCByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uQ2FuUGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2UudmlkZW9XaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnNvdXJjZS52aWRlb0hlaWdodDtcblxuICAgICAgICB0aGlzLnNvdXJjZS5wbGF5KCk7XG5cbiAgICAgICAgLy8gcHJldmVudCBtdWx0aXBsZSBsb2FkZWQgZGlzcGF0Y2hlcy4uXG4gICAgICAgIGlmICghdGhpcy5fX2xvYWRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHRoaXMuc291cmNlLl9waXhpSWQgXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlLl9waXhpSWQ7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogTWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXZpZGVvLl9waXhpSWQpXG4gICAge1xuICAgICAgICB2aWRlby5fcGl4aUlkID0gJ3ZpZGVvXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3ZpZGVvLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IFZpZGVvQmFzZVRleHR1cmUodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHZpZGVvLl9waXhpSWQgXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBCYXNlVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqIFRoaXMgQmFzZVRleHR1cmUgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYSB0ZXh0dXJlXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvU3JjIHtzdHJpbmd8b2JqZWN0fHN0cmluZ1tdfG9iamVjdFtdfSBUaGUgVVJMKHMpIGZvciB0aGUgdmlkZW8uXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLnNyY10ge3N0cmluZ30gT25lIG9mIHRoZSBzb3VyY2UgdXJscyBmb3IgdGhlIHZpZGVvXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLm1pbWVdIHtzdHJpbmd9IFRoZSBtaW1ldHlwZSBvZiB0aGUgdmlkZW8gKGUuZy4gJ3ZpZGVvL21wNCcpLiBJZiBub3Qgc3BlY2lmaWVkXG4gKiAgdGhlIHVybCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBtaW1lIHR5cGUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwgPSBmdW5jdGlvbiAodmlkZW9TcmMsIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXG4gICAgLy8gYXJyYXkgb2Ygb2JqZWN0cyBvciBzdHJpbmdzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW9TcmMpKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWRlb1NyYy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjW2ldLnNyYyB8fCB2aWRlb1NyY1tpXSwgdmlkZW9TcmNbaV0ubWltZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNpbmdsZSBvYmplY3Qgb3Igc3RyaW5nXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjLnNyYyB8fCB2aWRlb1NyYywgdmlkZW9TcmMubWltZSkpO1xuICAgIH1cblxuICAgIHZpZGVvLmxvYWQoKTtcbiAgICB2aWRlby5wbGF5KCk7XG5cbiAgICByZXR1cm4gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSk7XG59O1xuXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzID0gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsO1xuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2UocGF0aCwgdHlwZSlcbntcbiAgICBpZiAoIXR5cGUpXG4gICAge1xuICAgICAgICB0eXBlID0gJ3ZpZGVvLycgKyBwYXRoLnN1YnN0cihwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gcGF0aDtcbiAgICBzb3VyY2UudHlwZSA9IHR5cGU7XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgLy8gSW50ZXJuYWwgZXZlbnQgdXNlZCBieSBjb21wb3NlZCBlbWl0dGVyXG4gICAgVElDSyA9ICd0aWNrJztcblxuLyoqXG4gKiBBIFRpY2tlciBjbGFzcyB0aGF0IHJ1bnMgYW4gdXBkYXRlIGxvb3AgdGhhdCBvdGhlciBvYmplY3RzIGxpc3RlbiB0by5cbiAqIFRoaXMgY2xhc3MgaXMgY29tcG9zZWQgYXJvdW5kIGFuIEV2ZW50RW1pdHRlciBvYmplY3QgdG8gYWRkIGxpc3RlbmVyc1xuICogbWVhbnQgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lLlxuICogQW5pbWF0aW9uIGZyYW1lcyBhcmUgcmVxdWVzdGVkIG9ubHkgd2hlbiBuZWNlc3NhcnksXG4gKiBlLmcuIFdoZW4gdGhlIHRpY2tlciBpcyBzdGFydGVkIGFuZCB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbmZ1bmN0aW9uIFRpY2tlcigpXG57XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRpY2sgbWV0aG9kIGJvdW5kIHRvIHRpY2tlciBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaW4gZWFybHkgMjAxNSwgRnVuY3Rpb24uYmluZFxuICAgICAqIGlzIHN0aWxsIDYwJSBzbG93ZXIgaW4gaGlnaCBwZXJmb3JtYW5jZSBzY2VuYXJpb3MuXG4gICAgICogQWxzbyBzZXBhcmF0aW5nIGZyYW1lIHJlcXVlc3RzIGZyb20gdXBkYXRlIG1ldGhvZFxuICAgICAqIHNvIGxpc3RlbmVycyBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGFuZCB3aXRoXG4gICAgICogYW55IGFuaW1hdGlvbiBBUEksIGp1c3QgaW52b2tlIHRpY2tlci51cGRhdGUodGltZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RpY2sgPSBmdW5jdGlvbiBfdGljayh0aW1lKSB7XG5cbiAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgbm93XG4gICAgICAgICAgICBfdGhpcy51cGRhdGUodGltZSk7XG4gICAgICAgICAgICAvLyBMaXN0ZW5lciBzaWRlIGVmZmVjdHMgbWF5IGhhdmUgbW9kaWZpZWQgdGlja2VyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQgJiYgX3RoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiBfdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fdGljayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZW1pdHRlciB1c2VkIHRvIGZpcmUgJ3RpY2snIGV2ZW50XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9lbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY3VycmVudCBmcmFtZSByZXF1ZXN0IElEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdmFsdWUgbWFuYWdlZCBieSBtaW5GUFMgcHJvcGVydHkgc2V0dGVyIGFuZCBnZXR0ZXIuXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHVwZGF0ZXMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBzaG91bGQgaW52b2tlIHRoZSBtZXRob2RcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBhdXRvbWF0aWNhbGx5XG4gICAgICogd2hlbiBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1N0YXJ0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTY2FsYXIgdGltZSB2YWx1ZSBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbWluRlBTfVxuICAgICAqIGFuZCBpcyBzY2FsZWQgd2l0aCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfS5cbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhcCBtYXkgYmUgZXhjZWVkZWQgYnkgc2NhbGluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kZWx0YVRpbWUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGltZSBlbGFwc2VkIGluIG1pbGxpc2Vjb25kcyBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBPcHBvc2VkIHRvIHdoYXQgdGhlIHNjYWxhciB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX1cbiAgICAgKiBpcyBiYXNlZCwgdGhpcyB2YWx1ZSBpcyBuZWl0aGVyIGNhcHBlZCBub3Igc2NhbGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMSAvIFRBUkdFVF9GUE1TXG4gICAgICovXG4gICAgdGhpcy5lbGFwc2VkTVMgPSAxIC8gQ09OU1QuVEFSR0VUX0ZQTVM7IC8vIGRlZmF1bHQgdG8gdGFyZ2V0IGZyYW1lIHRpbWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBsYXN0IHRpbWUge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9IHdhcyBpbnZva2VkLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgYWxzbyByZXNldCBpbnRlcm5hbGx5IG91dHNpZGUgb2YgaW52b2tpbmdcbiAgICAgKiB1cGRhdGUsIGJ1dCBvbmx5IHdoZW4gYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxhc3RUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEZhY3RvciBvZiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNjYWxlcyB0aWNrZXIuZGVsdGFUaW1lIHRvIHdoYXQgd291bGQgYmVcbiAgICAgKiAvLyB0aGUgZXF1aXZhbGVudCBvZiBhcHByb3hpbWF0ZWx5IDEyMCBGUFNcbiAgICAgKiB0aWNrZXIuc3BlZWQgPSAyO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICogYHRydWVgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBgZmFsc2VgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RvcH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIFdoaWxlIGBmYWxzZWAsIHRoaXMgdmFsdWUgbWF5IGNoYW5nZSB0byBgdHJ1ZWAgaW4gdGhlXG4gICAgICogZXZlbnQgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGJlaW5nIGB0cnVlYFxuICAgICAqIGFuZCBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWNrZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lcyBwZXIgc2Vjb25kIGF0IHdoaWNoIHRoaXMgdGlja2VyIGlzIHJ1bm5pbmcuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgYXBwcm94aW1hdGVseSA2MCBpbiBtb3N0IG1vZGVybiBicm93c2Vycy5cbiAgICAgKiAqKk5vdGU6KiogVGhpcyBkb2VzIG5vdCBmYWN0b3IgaW4gdGhlIHZhbHVlIG9mXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0sIHdoaWNoIGlzIHNwZWNpZmljXG4gICAgICogdG8gc2NhbGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBGUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5lbGFwc2VkTVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGFsbG93ZWQgdG9cbiAgICAgKiBlbGFwc2UgYmV0d2VlbiBpbnZva2luZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0uXG4gICAgICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNhcCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gICAgICogYnV0IGRvZXMgbm90IGVmZmVjdCB0aGUgbWVhc3VyZWQgdmFsdWUgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNGUFN9LlxuICAgICAqIFdoZW4gc2V0dGluZyB0aGlzIHByb3BlcnR5IGl0IGlzIGNsYW1wZWQgdG8gYSB2YWx1ZSBiZXR3ZWVuXG4gICAgICogYDBgIGFuZCBgUElYSS5UQVJHRVRfRlBNUyAqIDEwMDBgLlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICBtaW5GUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZwcylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gQ2xhbXA6IDAgdG8gVEFSR0VUX0ZQTVNcbiAgICAgICAgICAgIHZhciBtaW5GUE1TID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZnBzKSAvIDEwMDAsIENPTlNULlRBUkdFVF9GUE1TKTtcbiAgICAgICAgICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEgLyBtaW5GUE1TO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbFxuICogZW1pdHRlciBoYXMgbGlzdGVuZXJzLCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fcmVxdWVzdElmTmVlZGVkID0gZnVuY3Rpb24gX3JlcXVlc3RJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiB0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIC8vIGVuc3VyZSBjYWxsYmFja3MgZ2V0IGNvcnJlY3QgZGVsdGFcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fdGljayk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IGNhbmNlbHMgYSBwZW5kaW5nIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9jYW5jZWxJZk5lZWRlZCA9IGZ1bmN0aW9uIF9jYW5jZWxJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIHRoZSB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZCBpdCBjaGVja3MgaWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHlcbiAqIGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy4gSWYgdGhlc2VcbiAqIGNvbmRpdGlvbnMgYXJlIG1ldCwgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgdGlja2VyIGhhcyBub3RcbiAqIGJlZW4gc3RhcnRlZCwgYnV0IGF1dG9TdGFydCBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHRpY2tlciBzdGFydHMgbm93LFxuICogYW5kIGNvbnRpbnVlcyB3aXRoIHRoZSBwcmV2aW91cyBjb25kaXRpb25zIHRvIHJlcXVlc3QgYSBuZXcgZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fc3RhcnRJZlBvc3NpYmxlID0gZnVuY3Rpb24gX3N0YXJ0SWZQb3NzaWJsZSgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmF1dG9TdGFydClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb259IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIHVwZGF0ZXNcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb25jZX0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3Igb25lIHVwZGF0ZVxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIGFkZE9uY2UoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbmNlKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb2ZmfSBpbnRlcm5hbGx5IGZvciAndGljaycgZXZlbnQuXG4gKiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyBmb3IgJ3RpY2snIGV2ZW50LlxuICogSWYgaXQgZG9lcywgdGhlbiBpdCBjYW5jZWxzIHRoZSBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHBhcmFtIFtmbl0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZFxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0IHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vZmYoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgaWYgKCF0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyBsaXN0ZW5lcnNcbiAqIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIHN0YXJ0KClcbntcbiAgICBpZiAoIXRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgcmVxdWVzdGVkXG4gKiBhbiBhbmltYXRpb24gZnJhbWUgaXQgaXMgY2FuY2VsZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcCgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVHJpZ2dlcnMgYW4gdXBkYXRlLiBBbiB1cGRhdGUgZW50YWlscyBzZXR0aW5nIHRoZVxuICogY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2VsYXBzZWRNU30sXG4gKiB0aGUgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gKiBpbnZva2luZyBhbGwgbGlzdGVuZXJzIHdpdGggY3VycmVudCBkZWx0YVRpbWUsXG4gKiBhbmQgdGhlbiBmaW5hbGx5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNsYXN0VGltZX1cbiAqIHdpdGggdGhlIHZhbHVlIG9mIGN1cnJlbnRUaW1lIHRoYXQgd2FzIHByb3ZpZGVkLlxuICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBieSBhbmltYXRpb25cbiAqIGZyYW1lIGNhbGxiYWNrcyBpZiB0aGUgdGlja2VyIGluc3RhbmNlIGhhcyBiZWVuIHN0YXJ0ZWRcbiAqIGFuZCBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSBbY3VycmVudFRpbWU9cGVyZm9ybWFuY2Uubm93KCldIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn0gdGhlIGN1cnJlbnQgdGltZSBvZiBleGVjdXRpb25cbiAqL1xuVGlja2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoY3VycmVudFRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWRNUztcblxuICAgIC8vIEFsbG93IGNhbGxpbmcgdXBkYXRlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBjdXJyZW50VGltZS5cbiAgICBjdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIHx8IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIC8vIFNhdmUgdW5jYXBwZWQgZWxhcHNlZE1TIGZvciBtZWFzdXJlbWVudFxuICAgIGVsYXBzZWRNUyA9IHRoaXMuZWxhcHNlZE1TID0gY3VycmVudFRpbWUgLSB0aGlzLmxhc3RUaW1lO1xuXG4gICAgLy8gY2FwIHRoZSBtaWxsaXNlY29uZHMgZWxhcHNlZCB1c2VkIGZvciBkZWx0YVRpbWVcbiAgICBpZiAoZWxhcHNlZE1TID4gdGhpcy5fbWF4RWxhcHNlZE1TKVxuICAgIHtcbiAgICAgICAgZWxhcHNlZE1TID0gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgIH1cblxuICAgIHRoaXMuZGVsdGFUaW1lID0gZWxhcHNlZE1TICogQ09OU1QuVEFSR0VUX0ZQTVMgKiB0aGlzLnNwZWVkO1xuXG4gICAgLy8gSW52b2tlIGxpc3RlbmVycyBhZGRlZCB0byBpbnRlcm5hbCBlbWl0dGVyXG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KFRJQ0ssIHRoaXMuZGVsdGFUaW1lKTtcblxuICAgIHRoaXMubGFzdFRpbWUgPSBjdXJyZW50VGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGlja2VyO1xuIiwidmFyIFRpY2tlciA9IHJlcXVpcmUoJy4vVGlja2VyJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZCB0aWNrZXIgaW5zdGFuY2UgdXNlZCBieSB7QGxpbmsgUElYSS5leHRyYXMuTW92aWVDbGlwfS5cbiAqIGFuZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICogVGhlIHByb3BlcnR5IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBpcyBzZXQgdG8gYHRydWVgXG4gKiBmb3IgdGhpcyBpbnN0YW5jZS4gUGxlYXNlIGZvbGxvdyB0aGUgZXhhbXBsZXMgZm9yIHVzYWdlLCBpbmNsdWRpbmdcbiAqIGhvdyB0byBvcHQtb3V0IG9mIGF1dG8tc3RhcnRpbmcgdGhlIHNoYXJlZCB0aWNrZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciB0aWNrZXIgPSBQSVhJLnRpY2tlci5zaGFyZWQ7XG4gKiAvLyBTZXQgdGhpcyB0byBwcmV2ZW50IHN0YXJ0aW5nIHRoaXMgdGlja2VyIHdoZW4gbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqIC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyB0cnVlIG9ubHkgZm9yIHRoZSBQSVhJLnRpY2tlci5zaGFyZWQgaW5zdGFuY2UuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiAvLyBGWUksIGNhbGwgdGhpcyB0byBlbnN1cmUgdGhlIHRpY2tlciBpcyBzdG9wcGVkLiBJdCBzaG91bGQgYmUgc3RvcHBlZFxuICogLy8gaWYgeW91IGhhdmUgbm90IGF0dGVtcHRlZCB0byByZW5kZXIgYW55dGhpbmcgeWV0LlxuICogdGlja2VyLnN0b3AoKTtcbiAqIC8vIENhbGwgdGhpcyB3aGVuIHlvdSBhcmUgcmVhZHkgZm9yIGEgcnVubmluZyBzaGFyZWQgdGlja2VyLlxuICogdGlja2VyLnN0YXJ0KCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFlvdSBtYXkgdXNlIHRoZSBzaGFyZWQgdGlja2VyIHRvIHJlbmRlci4uLlxuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoODAwLCA2MDApO1xuICogdmFyIHN0YWdlID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiB2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIpO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZW5kZXJlci52aWV3KTtcbiAqIHRpY2tlci5hZGQoZnVuY3Rpb24gKHRpbWUpIHtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE9yIHlvdSBjYW4ganVzdCB1cGRhdGUgaXQgbWFudWFsbHkuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiB0aWNrZXIuc3RvcCgpO1xuICogZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XG4gKiAgICAgdGlja2VyLnVwZGF0ZSh0aW1lKTtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAqIH1cbiAqIGFuaW1hdGUocGVyZm9ybWFuY2Uubm93KCkpO1xuICpcbiAqIEB0eXBlIHtQSVhJLnRpY2tlci5UaWNrZXJ9XG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xudmFyIHNoYXJlZCA9IG5ldyBUaWNrZXIoKTtcbnNoYXJlZC5hdXRvU3RhcnQgPSB0cnVlO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS50aWNrZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc2hhcmVkOiBzaGFyZWQsXG4gICAgVGlja2VyOiBUaWNrZXJcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gZnVuY3Rpb24gKHNpemUpXG57XG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBhcnJheSwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgXG4gICAgdmFyIHRvdGFsSW5kaWNlcyA9IHNpemUgKiA2O1xuXG4gICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodG90YWxJbmRpY2VzKTtcblxuXHQvLyBmaWxsIHRoZSBpbmRpY2VzIHdpdGggdGhlIHF1YWRzIHRvIGRyYXdcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IHRvdGFsSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICBpbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICBpbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHM7IiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudXRpbHNcbiAqL1xudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgX3VpZDogMCxcbiAgICBfc2FpZEhlbGxvOiBmYWxzZSxcblxuICAgIEV2ZW50RW1pdHRlcjogICByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgcGx1Z2luVGFyZ2V0OiAgIHJlcXVpcmUoJy4vcGx1Z2luVGFyZ2V0JyksXG4gICAgYXN5bmM6ICAgICAgICAgIHJlcXVpcmUoJ2FzeW5jJyksXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZS5cbiAgICAgKi9cbiAgICB1aWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICByZXR1cm4gKyt1dGlscy5fdWlkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYW4gW1IsIEcsIEJdIGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHBhcmFtICB7bnVtYmVyW119IFtvdXQ9W11dXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgW1IsIEcsIEJdIG9mIHRoZSBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgycmdiOiBmdW5jdGlvbiAoaGV4LCBvdXQpXG4gICAge1xuICAgICAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICAgICAgb3V0WzBdID0gKGhleCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMV0gPSAoaGV4ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzJdID0gKGhleCAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnN0cmluZzogZnVuY3Rpb24gKGhleClcbiAgICB7XG4gICAgICAgIGhleCA9IGhleC50b1N0cmluZygxNik7XG4gICAgICAgIGhleCA9ICcwMDAwMDAnLnN1YnN0cigwLCA2IC0gaGV4Lmxlbmd0aCkgKyBoZXg7XG5cbiAgICAgICAgcmV0dXJuICcjJyArIGhleDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkgdG8gYSBoZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmdiIHtudW1iZXJbXX1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb2xvciBudW1iZXJcbiAgICAgKi9cbiAgICByZ2IyaGV4OiBmdW5jdGlvbiAocmdiKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgocmdiWzBdKjI1NSA8PCAxNikgKyAocmdiWzFdKjI1NSA8PCA4KSArIHJnYlsyXSoyNTUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZFxuICAgICAqL1xuICAgIGNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXM6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBuZ0hlYWQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFCQVFNQUFBREQ4cDJPQUFBQUExQk1WRVgvJztcbiAgICAgICAgdmFyIHBuZ0VuZCA9ICdBQUFBQ2tsRVFWUUkxMk5nQUFBQUFnQUI0aUc4TXdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG4gICAgICAgIHZhciBtYWdlbnRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSA2O1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcblxuICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1hZ2VudGEsIDAsIDApO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh5ZWxsb3csIDIsIDApO1xuXG4gICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwwLDEsMSkuZGF0YTtcblxuICAgICAgICByZXR1cm4gKGRhdGFbMF0gPT09IDI1NSAmJiBkYXRhWzFdID09PSAwICYmIGRhdGFbMl0gPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIG51bWJlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICogdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIFN0YXJsaW5nIEZyYW1ld29yayBhcyBpdHMgcHJldHR5IG5lYXQgOylcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICovXG4gICAgZ2V0TmV4dFBvd2VyT2ZUd286IGZ1bmN0aW9uIChudW1iZXIpXG4gICAge1xuICAgICAgICAvLyBzZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG93ZXJfb2ZfdHdvI0Zhc3RfYWxnb3JpdGhtX3RvX2NoZWNrX2lmX2FfcG9zaXRpdmVfbnVtYmVyX2lzX2FfcG93ZXJfb2ZfdHdvXG4gICAgICAgIGlmIChudW1iZXIgPiAwICYmIChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDE7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPCBudW1iZXIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzdWx0IDw8PSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBtYWtlIGEgcG93ZXIgb2YgdHdvIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9XG4gICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybiAod2lkdGggPiAwICYmICh3aWR0aCAmICh3aWR0aCAtIDEpKSA9PT0gMCAmJiBoZWlnaHQgPiAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIGFuIGFzc2V0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwcmVmaXhcbiAgICAgKiB1c2VkIGJ5IHNwcml0ZXNoZWV0cyBhbmQgaW1hZ2UgdXJsc1xuICAgICAqXG4gICAgICogQHBhcmFtIHVybCB7c3RyaW5nfSB0aGUgaW1hZ2UgcGF0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRSZXNvbHV0aW9uT2ZVcmw6IGZ1bmN0aW9uICh1cmwpXG4gICAge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IENPTlNULlJFVElOQV9QUkVGSVguZXhlYyh1cmwpO1xuXG4gICAgICAgIGlmIChyZXNvbHV0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlc29sdXRpb25bMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvZ3Mgb3V0IHRoZSB2ZXJzaW9uIGFuZCByZW5kZXJlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBydW5uaW5nIGluc3RhbmNlIG9mIFBJWEkuXG4gICAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoaXMgbWVzc2FnZSB5b3UgY2FuIHNldCBgUElYSS51dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtgXG4gICAgICogc28gdGhlIGxpYnJhcnkgdGhpbmtzIGl0IGFscmVhZHkgc2FpZCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgZG9pbmcgdGhhdCB3aWxsIGZvcmV2ZXJcbiAgICAgKiBtYWtlcyB5b3UgYSBqZXJrIGZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBzdHJpbmcgcmVuZGVyZXIgdHlwZSB0byBsb2cuXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIHNheUhlbGxvOiBmdW5jdGlvbiAodHlwZSlcbiAgICB7XG4gICAgICAgIGlmICh1dGlscy5fc2FpZEhlbGxvKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZScpID4gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW1xuICAgICAgICAgICAgICAgICdcXG4gJWMgJWMgJWMgUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSDinLAgJyArIHR5cGUgKyAnIOKcsCAgJWMgJyArICcgJWMgJyArICcgaHR0cDovL3d3dy5waXhpanMuY29tLyAgJWMgJWMg4pmlJWPimaUlY+KZpSBcXG5cXG4nLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjY2YTU7IGJhY2tncm91bmQ6ICMwMzAzMDc7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmZjM2RjOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7J1xuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3MpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1BpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0gJyArIHR5cGUgKyAnIC0gaHR0cDovL3d3dy5waXhpanMuY29tLycpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmb3IgY2hlY2tpbmcgZm9yIHdlYmdsIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNXZWJHTFN1cHBvcnRlZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHZhciBjb250ZXh0T3B0aW9ucyA9IHsgc3RlbmNpbDogdHJ1ZSB9O1xuICAgICAgICB0cnlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgY29udGV4dE9wdGlvbnMpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBjb250ZXh0T3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIShnbCAmJiBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnN0ZW5jaWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzaWduIG9mIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIG4ge251bWJlcn1cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIG4gaXMgMCwgLTEgaWYgbiBpcyBuZWdhdGl2ZSwgMSBpZiBuIGkgcG9zaXRpdmVcbiAgICAgKi9cbiAgICBzaWduOiBmdW5jdGlvbiAobilcbiAgICB7XG4gICAgICAgIHJldHVybiBuID8gKG4gPCAwID8gLTEgOiAxKSA6IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZUl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydElkeCBUaGUgaW5kZXggdG8gYmVnaW4gcmVtb3ZpbmcgZnJvbSAoaW5jbHVzaXZlKVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVJdGVtczogZnVuY3Rpb24gKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KVxuICAgIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN0YXJ0SWR4ID49IGxlbmd0aCB8fCByZW1vdmVDb3VudCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVtb3ZlQ291bnQgPSAoc3RhcnRJZHgrcmVtb3ZlQ291bnQgPiBsZW5ndGggPyBsZW5ndGgtc3RhcnRJZHggOiByZW1vdmVDb3VudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydElkeCwgbGVuID0gbGVuZ3RoLXJlbW92ZUNvdW50OyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyLmxlbmd0aCA9IGxlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge30sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge31cbn07XG4iLCIvKipcbiAqIE1peGlucyBmdW5jdGlvbmFsaXR5IHRvIG1ha2UgYW4gb2JqZWN0IGhhdmUgXCJwbHVnaW5zXCIuXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS51dGlsc1xuICogQHBhcmFtIG9iaiB7b2JqZWN0fSBUaGUgb2JqZWN0IHRvIG1peCBpbnRvLlxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgcGx1Z2luVGFyZ2V0Lm1peGluKE15T2JqZWN0KTtcbiAqL1xuZnVuY3Rpb24gcGx1Z2luVGFyZ2V0KG9iailcbntcbiAgICBvYmouX19wbHVnaW5zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcGx1Z2luIHRvIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHBsdWdpbk5hbWUge3N0cmluZ30gVGhlIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQuXG4gICAgICogQHBhcmFtIGN0b3Ige0Z1bmN0aW9ufSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBwbHVnaW4uXG4gICAgICovXG4gICAgb2JqLnJlZ2lzdGVyUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGN0b3IpXG4gICAge1xuICAgICAgICBvYmouX19wbHVnaW5zW3BsdWdpbk5hbWVdID0gY3RvcjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5pbml0UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLnBsdWdpbnMgfHwge307XG5cbiAgICAgICAgZm9yICh2YXIgbyBpbiBvYmouX19wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBuZXcgKG9iai5fX3BsdWdpbnNbb10pKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmRlc3Ryb3lQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGZvciAodmFyIG8gaW4gdGhpcy5wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG51bGw7XG4gICAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvKipcbiAgICAgKiBNaXhlcyBpbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGx1Z2luVGFyZ2V0IGludG8gYW5vdGhlciBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3Qge29iamVjdH0gVGhlIG9iaiB0byBtaXggaW50b1xuICAgICAqL1xuICAgIG1peGluOiBmdW5jdGlvbiBtaXhpbihvYmopXG4gICAge1xuICAgICAgICBwbHVnaW5UYXJnZXQob2JqKTtcbiAgICB9XG59O1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKSxcbiAgICBtZXNoID0gcmVxdWlyZSgnLi9tZXNoJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi9leHRyYXMnKSxcbiAgICBmaWx0ZXJzID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgU3ByaXRlQmF0Y2hcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkuUGFydGljbGVDb250YWluZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlQmF0Y2ggPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuJyk7XG59O1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIEFzc2V0TG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLmxvYWRlcnMuTG9hZGVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuQXNzZXRMb2FkZXIgPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy4nKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvcmUsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RhZ2VcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RhZ2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignWW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIFBJWEkgU3RhZ2UgYW55IG1vcmUsIHlvdSBjYW4gc2ltcGx5IHJlbmRlciBhbnkgY29udGFpbmVyLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgRGlzcGxheU9iamVjdENvbnRhaW5lclxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBEaXNwbGF5T2JqZWN0Q29udGFpbmVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Rpc3BsYXlPYmplY3RDb250YWluZXIgaGFzIGJlZW4gc2hvcnRlbmVkIHRvIENvbnRhaW5lciwgcGxlYXNlIHVzZSBDb250YWluZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdHJpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdHJpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgU3RyaXAgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBNZXNoIGFuZCBtb3ZlZCB0byBtZXNoLk1lc2gsIHBsZWFzZSB1c2UgbWVzaC5NZXNoIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guTWVzaDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFJvcGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLlJvcGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgUm9wZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgUm9wZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBtZXNoLlJvcGUsIHBsZWFzZSB1c2UgbWVzaC5Sb3BlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guUm9wZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIE1vdmllQ2xpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXBcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgTW92aWVDbGlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBNb3ZpZUNsaXAgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLk1vdmllQ2xpcCwgcGxlYXNlIHVzZSBleHRyYXMuTW92aWVDbGlwIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5Nb3ZpZUNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUaWxpbmdTcHJpdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRpbGluZ1Nwcml0ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGlsaW5nU3ByaXRlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5UaWxpbmdTcHJpdGUsIHBsZWFzZSB1c2UgZXh0cmFzLlRpbGluZ1Nwcml0ZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuVGlsaW5nU3ByaXRlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQml0bWFwVGV4dFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJpdG1hcFRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJpdG1hcFRleHQgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLkJpdG1hcFRleHQsIHBsZWFzZSB1c2UgZXh0cmFzLkJpdG1hcFRleHQgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLkJpdG1hcFRleHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBibGVuZE1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgYmxlbmRNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYmxlbmRNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBCTEVORF9NT0RFUywgcGxlYXNlIHVzZSBCTEVORF9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkJMRU5EX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2NhbGVNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIHNjYWxlTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHNjYWxlTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gU0NBTEVfTU9ERVMsIHBsZWFzZSB1c2UgU0NBTEVfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TQ0FMRV9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5CYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCYXNlVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuQmFzZVRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5UZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLlRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5UZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5UZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgbWF0aFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIG1hdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBtYXRoIG5hbWVzcGFjZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgYWNjZXNzIG1lbWJlcnMgYWxyZWFkeSBhY2Nlc3NpYmxlIG9uIFBJWEkuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBQSVhJLlNwcml0ZSNzZXRUZXh0dXJlXG4gKiBAc2VlIFBJWEkuU3ByaXRlI3RleHR1cmVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0dXJlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0dXJlIHByb3BlcnR5LCBlLmcgOiBzcHJpdGUudGV4dHVyZSA9IHRleHR1cmU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuZXh0cmFzLkJpdG1hcFRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteUJpdG1hcFRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15VGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFN0eWxlXG4gKiBAc2VlIFBJWEkuVGV4dCNzdHlsZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpXG57XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgIGNvbnNvbGUud2Fybignc2V0U3R5bGUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5LCBlLmcgOiBteVRleHQuc3R5bGUgPSBzdHlsZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAc2VlIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHR1cmUucHJvdG90eXBlLnNldEZyYW1lID0gZnVuY3Rpb24oZnJhbWUpXG57XG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIGNvbnNvbGUud2Fybignc2V0RnJhbWUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIGZyYW1lIHByb3BlcnR5LCBlLmcgOiBteVRleHR1cmUuZnJhbWUgPSBmcmFtZTsnKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpbHRlcnMsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkFic3RyYWN0RmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkFic3RyYWN0RmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEFic3RyYWN0RmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuQWJzdHJhY3RGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEFic3RyYWN0RmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQWJzdHJhY3RGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuRlhBQUZpbHRlclxuICAgICAqIEBzZWUgUElYSS5GWEFBRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEZYQUFGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5GWEFBRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBGWEFBRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuRlhBQUZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgU3ByaXRlTWFza0ZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIFNwcml0ZU1hc2tGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TcHJpdGVNYXNrRmlsdGVyO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS51dGlscy51dWlkXG4gKiBAc2VlIFBJWEkudXRpbHMudWlkXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gKi9cbmNvcmUudXRpbHMudXVpZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29uc29sZS53YXJuKCd1dGlscy51dWlkKCkgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB1dGlscy51aWQoKSBmcm9tIG5vdyBvbi4nKTtcbiAgICByZXR1cm4gY29yZS51dGlscy51aWQoKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIEJpdG1hcFRleHQgb2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0IHVzaW5nIGJpdG1hcCBmb250LiBUb1xuICogc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLCAnXFxyJyBvciAnXFxyXFxuJyBpbiB5b3VyIHN0cmluZy4gWW91IGNhbiBnZW5lcmF0ZSB0aGUgZm50IGZpbGVzIHVzaW5nOlxuICpcbiAqIEEgQml0bWFwVGV4dCBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGZvbnQgaXMgbG9hZGVkXG4gKlxuICogYGBganNcbiAqIC8vIGluIHRoaXMgY2FzZSB0aGUgZm9udCBpcyBpbiBhIGZpbGUgY2FsbGVkICdkZXN5cmVsLmZudCdcbiAqIHZhciBiaXRtYXBUZXh0ID0gbmV3IFBJWEkuZXh0cmFzLkJpdG1hcFRleHQoXCJ0ZXh0IHVzaW5nIGEgZmFuY3kgZm9udCFcIiwge2ZvbnQ6IFwiMzVweCBEZXN5cmVsXCIsIGFsaWduOiBcInJpZ2h0XCJ9KTtcbiAqIGBgYFxuICpcbiAqXG4gKiBodHRwOi8vd3d3LmFuZ2VsY29kZS5jb20vcHJvZHVjdHMvYm1mb250LyBmb3Igd2luZG93cyBvclxuICogaHR0cDovL3d3dy5ibWdseXBoLmNvbS8gZm9yIG1hYy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIHN0eWxlIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gc3R5bGUuZm9udCB7c3RyaW5nfG9iamVjdH0gVGhlIGZvbnQgZGVzY3JpcHRvciBmb3IgdGhlIG9iamVjdCwgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZyBvZiBmb3JtXG4gKiAgICAgIFwiMjRweCBGb250TmFtZVwiIG9yIFwiRm9udE5hbWVcIiBvciBhcyBhbiBvYmplY3Qgd2l0aCBleHBsaWNpdCBuYW1lL3NpemUgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5uYW1lXSB7c3RyaW5nfSBUaGUgYml0bWFwIGZvbnQgaWRcbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5zaXplXSB7bnVtYmVyfSBUaGUgc2l6ZSBvZiB0aGUgZm9udCBpbiBwaXhlbHMsIGUuZy4gMjRcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3RcbiAqICAgICAgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS50aW50PTB4RkZGRkZGXSB7bnVtYmVyfSBUaGUgdGludCBjb2xvclxuICovXG5mdW5jdGlvbiBCaXRtYXBUZXh0KHRleHQsIHN0eWxlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGxldHRlciBzcHJpdGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbHlwaHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mb250ID0ge1xuICAgICAgICB0aW50OiBzdHlsZS50aW50ICE9PSB1bmRlZmluZWQgPyBzdHlsZS50aW50IDogMHhGRkZGRkYsXG4gICAgICAgIGFsaWduOiBzdHlsZS5hbGlnbiB8fCAnbGVmdCcsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIHNpemU6IDBcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBmb250LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mb250ID0gc3R5bGUuZm9udDsgLy8gcnVuIGZvbnQgc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggd2lkdGggb2YgdGhpcyBiaXRtYXAgdGV4dCBpbiBwaXhlbHMuIElmIHRoZSB0ZXh0IHByb3ZpZGVkIGlzIGxvbmdlciB0aGFuIHRoZSB2YWx1ZSBwcm92aWRlZCwgbGluZSBicmVha3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoZSBsYXN0IHdoaXRlc3BhY2UuXG4gICAgICogRGlzYWJsZSBieSBzZXR0aW5nIHZhbHVlIHRvIDBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggbGluZSBoZWlnaHQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBUZXh0LCBpZTogd2hlbiB0cnlpbmcgdG8gdmVydGljYWxseSBhbGlnbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpcnR5IHN0YXRlIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkJpdG1hcFRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuQml0bWFwVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCaXRtYXBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCaXRtYXBUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRpbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC50aW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC50aW50ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCkgPyB2YWx1ZSA6IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdsZWZ0J1xuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGFsaWduOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQuYWxpZ247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LmFsaWduID0gdmFsdWUgfHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9udCBkZXNjcmlwdG9yIG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Rm9udH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBmb250OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWUuc2xpY2UoMSkuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gcGFyc2VJbnQodmFsdWVbMF0sIDEwKSA6IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicgPyB2YWx1ZS5zaXplIDogcGFyc2VJbnQodmFsdWUuc2l6ZSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGRhdGEgPSBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV07XG4gICAgdmFyIHBvcyA9IG5ldyBjb3JlLlBvaW50KCk7XG4gICAgdmFyIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgdmFyIGNoYXJzID0gW107XG4gICAgdmFyIGxhc3RMaW5lV2lkdGggPSAwO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBsaW5lV2lkdGhzID0gW107XG4gICAgdmFyIGxpbmUgPSAwO1xuICAgIHZhciBzY2FsZSA9IHRoaXMuX2ZvbnQuc2l6ZSAvIGRhdGEuc2l6ZTtcbiAgICB2YXIgbGFzdFNwYWNlID0gLTE7XG4gICAgdmFyIG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHQubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSB0aGlzLnRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgbGFzdFNwYWNlID0gLyhcXHMpLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpID8gaSA6IGxhc3RTcGFjZTtcblxuICAgICAgICBpZiAoLyg/OlxcclxcbnxcXHJ8XFxuKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RTcGFjZSAhPT0gLTEgJiYgdGhpcy5tYXhXaWR0aCA+IDAgJiYgcG9zLnggKiBzY2FsZSA+IHRoaXMubWF4V2lkdGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXMoY2hhcnMsIGxhc3RTcGFjZSwgaSAtIGxhc3RTcGFjZSk7XG4gICAgICAgICAgICBpID0gbGFzdFNwYWNlO1xuICAgICAgICAgICAgbGFzdFNwYWNlID0gLTE7XG5cbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFyRGF0YSA9IGRhdGEuY2hhcnNbY2hhckNvZGVdO1xuXG4gICAgICAgIGlmICghY2hhckRhdGEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZDaGFyQ29kZSAmJiBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJzLnB1c2goe3RleHR1cmU6Y2hhckRhdGEudGV4dHVyZSwgbGluZTogbGluZSwgY2hhckNvZGU6IGNoYXJDb2RlLCBwb3NpdGlvbjogbmV3IGNvcmUuUG9pbnQocG9zLnggKyBjaGFyRGF0YS54T2Zmc2V0LCBwb3MueSArIGNoYXJEYXRhLnlPZmZzZXQpfSk7XG4gICAgICAgIGxhc3RMaW5lV2lkdGggPSBwb3MueCArIChjaGFyRGF0YS50ZXh0dXJlLndpZHRoICsgY2hhckRhdGEueE9mZnNldCk7XG4gICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLnhBZHZhbmNlO1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgKGNoYXJEYXRhLnlPZmZzZXQgKyBjaGFyRGF0YS50ZXh0dXJlLmhlaWdodCkpO1xuICAgICAgICBwcmV2Q2hhckNvZGUgPSBjaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcblxuICAgIHZhciBsaW5lQWxpZ25PZmZzZXRzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IGxpbmU7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBhbGlnbk9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9mb250LmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZUFsaWduT2Zmc2V0cy5wdXNoKGFsaWduT2Zmc2V0KTtcbiAgICB9XG5cbiAgICB2YXIgbGVuQ2hhcnMgPSBjaGFycy5sZW5ndGg7XG4gICAgdmFyIHRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuQ2hhcnM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjID0gdGhpcy5fZ2x5cGhzW2ldOyAvLyBnZXQgdGhlIG5leHQgZ2x5cGggc3ByaXRlXG5cbiAgICAgICAgaWYgKGMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMudGV4dHVyZSA9IGNoYXJzW2ldLnRleHR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjID0gbmV3IGNvcmUuU3ByaXRlKGNoYXJzW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZ2x5cGhzLnB1c2goYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjLnBvc2l0aW9uLnggPSAoY2hhcnNbaV0ucG9zaXRpb24ueCArIGxpbmVBbGlnbk9mZnNldHNbY2hhcnNbaV0ubGluZV0pICogc2NhbGU7XG4gICAgICAgIGMucG9zaXRpb24ueSA9IGNoYXJzW2ldLnBvc2l0aW9uLnkgKiBzY2FsZTtcbiAgICAgICAgYy5zY2FsZS54ID0gYy5zY2FsZS55ID0gc2NhbGU7XG4gICAgICAgIGMudGludCA9IHRpbnQ7XG5cbiAgICAgICAgaWYgKCFjLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBjaGlsZHJlbi5cbiAgICBmb3IgKGkgPSBsZW5DaGFyczsgaSA8IHRoaXMuX2dseXBocy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5fZ2x5cGhzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHRXaWR0aCA9IG1heExpbmVXaWR0aCAqIHNjYWxlO1xuICAgIHRoaXMudGV4dEhlaWdodCA9IChwb3MueSArIGRhdGEubGluZUhlaWdodCkgKiBzY2FsZTtcbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSBtYXhMaW5lSGVpZ2h0ICogc2NhbGU7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvZiB0aGlzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0ZXh0IGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGdldExvY2FsQm91bmRzXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cblxuQml0bWFwVGV4dC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHJldHVybiBjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn07XG5cbkJpdG1hcFRleHQuZm9udHMgPSB7fTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgTW92aWVDbGlwIGlzIGEgc2ltcGxlIHdheSB0byBkaXNwbGF5IGFuIGFuaW1hdGlvbiBkZXBpY3RlZCBieSBhIGxpc3Qgb2YgdGV4dHVyZXMuXG4gKlxuICogYGBganNcbiAqIHZhciBhbGllbkltYWdlcyA9IFtcImltYWdlX3NlcXVlbmNlXzAxLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDIucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMy5wbmdcIixcImltYWdlX3NlcXVlbmNlXzA0LnBuZ1wiXTtcbiAqIHZhciB0ZXh0dXJlQXJyYXkgPSBbXTtcbiAqXG4gKiBmb3IgKHZhciBpPTA7IGkgPCA0OyBpKyspXG4gKiB7XG4gKiAgICAgIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZShhbGllbkltYWdlc1tpXSk7XG4gKiAgICAgIHRleHR1cmVBcnJheS5wdXNoKHRleHR1cmUpO1xuICogfTtcbiAqXG4gKiB2YXIgbWMgPSBuZXcgUElYSS5Nb3ZpZUNsaXAodGV4dHVyZUFycmF5KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmVzIHtQSVhJLlRleHR1cmVbXXxPYmplY3RbXX0gYW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuVGV4dHVyZX0gb3IgZnJhbWUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIGFuaW1hdGlvblxuICogQHBhcmFtIHRleHR1cmVzW10udGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUge0BsaW5rIFBJWEkuVGV4dHVyZX0gb2YgdGhlIGZyYW1lXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50aW1lIHtudW1iZXJ9IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWUgaW4gbXNcbiAqL1xuZnVuY3Rpb24gTW92aWVDbGlwKHRleHR1cmVzKVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZXNbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUgPyB0ZXh0dXJlc1swXSA6IHRleHR1cmVzWzBdLnRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVzID0gdGV4dHVyZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3BlZWQgdGhhdCB0aGUgTW92aWVDbGlwIHdpbGwgcGxheSBhdC4gSGlnaGVyIGlzIGZhc3RlciwgbG93ZXIgaXMgc2xvd2VyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIG1vdmllIGNsaXAgcmVwZWF0cyBhZnRlciBwbGF5aW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5sb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIE1vdmllQ2xpcCBmaW5pc2hlcyBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKi9cbiAgICB0aGlzLm9uQ29tcGxldGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRWxhcHNlZCB0aW1lIHNpbmNlIGFuaW1hdGlvbiBoYXMgYmVlbiBzdGFydGVkLCB1c2VkIGludGVybmFsbHkgdG8gZGlzcGxheSBjdXJyZW50IHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgTW92aWVDbGlwIGlzIGN1cnJlbnRseSBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTW92aWVDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcbk1vdmllQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNb3ZpZUNsaXA7XG5tb2R1bGUuZXhwb3J0cyA9IE1vdmllQ2xpcDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTW92aWVDbGlwLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIHRvdGFsRnJhbWVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBNb3ZpZUNsaXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbnVtYmVyIG9mIHRleHR1cmVzXG4gICAgICogYXNzaWduZWQgdG8gdGhlIE1vdmllQ2xpcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0b3RhbEZyYW1lczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgdGV4dHVyZXMgdXNlZCBmb3IgdGhpcyBNb3ZpZUNsaXBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVtdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICpcbiAgICAgKi9cbiAgICB0ZXh0dXJlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzLnB1c2godmFsdWVbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucy5wdXNoKHZhbHVlW2ldLnRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAqIFRoZSBNb3ZpZUNsaXBzIGN1cnJlbnQgZnJhbWUgaW5kZXhcbiAgICAqXG4gICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICogQHJlYWRvbmx5XG4gICAgKi9cbiAgICBjdXJyZW50RnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSkgJSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lIDwgMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUgKz0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGcmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBQbGF5cyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKHRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBnb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RvcCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRTdG9wID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG59O1xuXG4vKipcbiAqIEdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZSBhbmQgYmVnaW5zIHBsYXlpbmcgdGhlIE1vdmllQ2xpcFxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdGFydCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRQbGF5ID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLnBsYXkoKTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqIEBwcml2YXRlXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB2YXIgZWxhcHNlZCA9IHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZHVyYXRpb25zICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGxhZyA9IHRoaXMuX2N1cnJlbnRUaW1lICUgMSAqIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG5cbiAgICAgICAgbGFnICs9IGVsYXBzZWQgLyA2MCAqIDEwMDA7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA8IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lLS07XG4gICAgICAgICAgICBsYWcgKz0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWduID0gTWF0aC5zaWduKHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPj0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGFnIC09IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0gKiBzaWduO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gc2lnbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGxhZyAvIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGVsYXBzZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lIDwgMCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCgwKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VGltZSA+PSB0aGlzLl90ZXh0dXJlcy5sZW5ndGggJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AodGhpcy5fdGV4dHVyZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG5cbn07XG5cbi8qXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBkZXN0cm95cyBpdFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCApXG57XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGZyYW1lIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgZnJhbWVzIGlkcyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUZyYW1lcyA9IGZ1bmN0aW9uIChmcmFtZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tRnJhbWUoZnJhbWVzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBpbWFnZSB1cmxzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tSW1hZ2VzID0gZnVuY3Rpb24gKGltYWdlcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59OyIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIC8vIGEgc3ByaXRlIHVzZSBkZm9yIHJlbmRlcmluZyB0ZXh0dXJlcy4uXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICBDYW52YXNUaW50ZXIgPSByZXF1aXJlKCcuLi9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyk7XG5cbi8qKlxuICogQSB0aWxpbmcgc3ByaXRlIGlzIGEgZmFzdCB3YXkgb2YgcmVuZGVyaW5nIGEgdGlsaW5nIGltYWdlXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZSB7VGV4dHVyZX0gdGhlIHRleHR1cmUgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gVGlsaW5nU3ByaXRlKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsaW5nIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVNjYWxlID0gbmV3IGNvcmUuUG9pbnQoMSwxKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIG9mZnNldCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG5ldyBjb3JlLlBvaW50KDAsMCk7XG5cbiAgICAvLy8vLyBwcml2YXRlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2l0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBuZXcgY29yZS5UZXh0dXJlVXZzKCk7XG5cbiAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gbnVsbDtcblxuICAgIC8vVE9ETyBtb3ZlLi5cbiAgICB0aGlzLnNoYWRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKFxuXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVUcmFuc2Zvcm07JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnICAgY29vcmQgLT0gdVRyYW5zZm9ybS54eTsnLFxuICAgICAgICAnICAgY29vcmQgLz0gdVRyYW5zZm9ybS56dzsnLFxuICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGNvb3JkOycsXG5cbiAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjMiB1UGl4ZWxTaXplOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gbW9kKHZUZXh0dXJlQ29vcmQsIHVGcmFtZS56dyk7JyxcbiAgICAgICAgJyAgIGNvb3JkID0gY2xhbXAoY29vcmQsIHVQaXhlbFNpemUsIHVGcmFtZS56dyAtIHVQaXhlbFNpemUpOycsXG4gICAgICAgICcgICBjb29yZCArPSB1RnJhbWUueHk7JyxcblxuICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gIHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQpICogdkNvbG9yIDsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1RnJhbWU6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1VHJhbnNmb3JtOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVBpeGVsU2l6ZSA6IHsgdHlwZSA6ICcyZnYnLCB2YWx1ZTogWzEsIDFdfVxuICAgICAgICAgICAgfVxuICAgICAgKTtcbn1cblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWxpbmdTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbGluZ1Nwcml0ZTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWxpbmdTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGlsaW5nU3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIHR3ZWFrIG91ciB0ZXh0dXJlIHRlbXBvcmFyaWx5Li5cbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZSB8fCAhdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZW1wVXZzID0gdGV4dHVyZS5fdXZzLFxuICAgICAgICB0ZW1wV2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgdGVtcEhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCxcbiAgICAgICAgdHcgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoLFxuICAgICAgICB0aCA9IHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGhpcy5fdXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMF0gPSAxLjAvdHc7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVsxXSA9IDEuMC90aDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVswXSA9IHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzFdID0gdGVtcFV2cy55MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMl0gPSB0ZW1wVXZzLngxIC0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbM10gPSB0ZW1wVXZzLnkyIC0gdGVtcFV2cy55MDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMF0gPSAodGhpcy50aWxlUG9zaXRpb24ueCAlICh0ZW1wV2lkdGggKiB0aGlzLnRpbGVTY2FsZS54KSkgLyB0aGlzLl93aWR0aDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzFdID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgJSAodGVtcEhlaWdodCAqIHRoaXMudGlsZVNjYWxlLnkpKSAvIHRoaXMuX2hlaWdodDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzJdID0gKCB0dyAvIHRoaXMuX3dpZHRoICkgKiB0aGlzLnRpbGVTY2FsZS54O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbM10gPSAoIHRoIC8gdGhpcy5faGVpZ2h0ICkgKiB0aGlzLnRpbGVTY2FsZS55O1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRlbXBVdnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0ZW1wV2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGVtcEhlaWdodDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZiAoIXRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQsXG4gICAgICAgIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICBiYXNlVGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIG1vZFggPSAodGhpcy50aWxlUG9zaXRpb24ueCAvIHRoaXMudGlsZVNjYWxlLngpICUgdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIG1vZFkgPSAodGhpcy50aWxlUG9zaXRpb24ueSAvIHRoaXMudGlsZVNjYWxlLnkpICUgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuXG4gICAgLy8gY3JlYXRlIGEgbmljZSBzaGlueSBwYXR0ZXJuIVxuICAgIC8vIFRPRE8gdGhpcyBuZWVkcyB0byBiZSByZWZyZXNoZWQgaWYgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICBpZighdGhpcy5fY2FudmFzUGF0dGVybilcbiAgICB7XG4gICAgICAgIC8vIGN1dCBhbiBvYmplY3QgZnJvbSBhIHNwcml0ZXNoZWV0Li5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgY29yZS5DYW52YXNCdWZmZXIodGV4dHVyZS5fZnJhbWUud2lkdGgsIHRleHR1cmUuX2ZyYW1lLmhlaWdodCk7XG5cbiAgICAgICAgLy8gVGludCB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMudGludGVkVGV4dHVyZSwgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKGJhc2VUZXh0dXJlLnNvdXJjZSwgLXRleHR1cmUuX2ZyYW1lLngsIC10ZXh0dXJlLl9mcmFtZS55KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gdGVtcENhbnZhcy5jb250ZXh0LmNyZWF0ZVBhdHRlcm4oIHRlbXBDYW52YXMuY2FudmFzLCAncmVwZWF0JyApO1xuICAgIH1cblxuICAgIC8vIHNldCBjb250ZXh0IHN0YXRlLi5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvbik7XG5cbiAgICAvLyBUT0RPIC0gdGhpcyBzaG91bGQgYmUgcm9sbGVkIGludG8gdGhlIHNldFRyYW5zZm9ybSBhYm92ZS4uXG4gICAgY29udGV4dC5zY2FsZSh0aGlzLnRpbGVTY2FsZS54LHRoaXMudGlsZVNjYWxlLnkpO1xuXG4gICAgY29udGV4dC50cmFuc2xhdGUobW9kWCArICh0aGlzLmFuY2hvci54ICogLXRoaXMuX3dpZHRoICksXG4gICAgICAgICAgICAgICAgICAgICAgbW9kWSArICh0aGlzLmFuY2hvci55ICogLXRoaXMuX2hlaWdodCkpO1xuXG4gICAgLy8gY2hlY2sgYmxlbmQgbW9kZVxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vIGZpbGwgdGhlIHBhdHRlcm4hXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9jYW52YXNQYXR0ZXJuO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoLW1vZFgsXG4gICAgICAgICAgICAgICAgICAgICAtbW9kWSxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoIC8gdGhpcy50aWxlU2NhbGUueCxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCAvIHRoaXMudGlsZVNjYWxlLnkpO1xuXG5cbiAgICAvL1RPRE8gLSBwcmV0dHkgc3VyZSB0aGlzIGNhbiBiZSBkZWxldGVkLi4uXG4gICAgLy9jb250ZXh0LnRyYW5zbGF0ZSgtdGhpcy50aWxlUG9zaXRpb24ueCArICh0aGlzLmFuY2hvci54ICogdGhpcy5fd2lkdGgpLCAtdGhpcy50aWxlUG9zaXRpb24ueSArICh0aGlzLmFuY2hvci55ICogdGhpcy5faGVpZ2h0KSk7XG4gICAgLy9jb250ZXh0LnNjYWxlKDEgLyB0aGlzLnRpbGVTY2FsZS54LCAxIC8gdGhpcy50aWxlU2NhbGUueSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIHNwcml0ZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG5cbiAgICB2YXIgdzAgPSB3aWR0aCAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgIHZhciB3MSA9IHdpZHRoICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICB2YXIgaDAgPSBoZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICB2YXIgaDEgPSBoZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcblxuICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIG1pblgsXG4gICAgICAgIG1heFgsXG4gICAgICAgIG1pblksXG4gICAgICAgIG1heFk7XG5cbiAgICBtaW5YID0geDE7XG4gICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICBtaW5ZID0geTE7XG4gICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICBtYXhYID0geDE7XG4gICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICBtYXhZID0geTE7XG4gICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgYm91bmRzLnggPSBtaW5YO1xuICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcblxuICAgIHJldHVybiBib3VuZHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIGNoZWNrXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRpbGluZyBzcHJpdGVcbiAqXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWxlU2NhbGUgPSBudWxsO1xuICAgIHRoaXMuX3RpbGVTY2FsZU9mZnNldCA9IG51bGw7XG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHRpbGluZyBzcHJpdGUgdGhhdCB3aWxsIHVzZSBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZCx3aWR0aCxoZWlnaHQpXG57XG4gICAgdmFyIHRleHR1cmUgPSBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSAnICsgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUodGV4dHVyZSx3aWR0aCxoZWlnaHQpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCB3aWR0aCwgaGVpZ2h0LCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSksd2lkdGgsaGVpZ2h0KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gY29yZS5EaXNwbGF5T2JqZWN0LFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwID0gZmFsc2U7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSBudWxsO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsSGl0VGVzdCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxEZXN0cm95ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGlzIGRpc3BsYXkgb2JqZWN0IHRvIGJlIGNhY2hlZCBhcyBhIGJpdG1hcC5cbiAgICAgKiBUaGlzIGJhc2ljYWxseSB0YWtlcyBhIHNuYXAgc2hvdCBvZiB0aGUgZGlzcGxheSBvYmplY3QgYXMgaXQgaXMgYXQgdGhhdCBtb21lbnQuIEl0IGNhbiBwcm92aWRlIGEgcGVyZm9ybWFuY2UgYmVuZWZpdCBmb3IgY29tcGxleCBzdGF0aWMgZGlzcGxheU9iamVjdHMuXG4gICAgICogVG8gcmVtb3ZlIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnZmFsc2UnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgY2FjaGVBc0JpdG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZUFzQml0bWFwO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXAgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVBc0JpdG1hcCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IHRoaXMucmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSB0aGlzLnJlbmRlckNhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gdGhpcy51cGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHMgPSB0aGlzLmdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSA9IHRoaXMuZGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludCA9IHRoaXMuY29udGFpbnNQb2ludDtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX2NhY2hlQXNCaXRtYXBEZXN0cm95O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJvdW5kcyA9IHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fb3JpZ2luYWxEZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIFdlYkdMXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlciggdGhpcy5fY2FjaGVkU3ByaXRlICk7XG59O1xuXG4vKipcbiogUHJlcGFyZXMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZmlyc3Qgd2UgZmx1c2ggYW55dGhpbmcgbGVmdCBpbiB0aGUgcmVuZGVyZXIgKG90aGVyd2lzZSBpdCB3b3VsZCBnZXQgcmVuZGVyZWQgdG8gdGhlIGNhY2hlZCB0ZXh0dXJlKVxuICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuICAgIC8vdGhpcy5maWx0ZXJzPSBbXTtcbiAgICAvLyBuZXh0IHdlIGZpbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHVudHJhbnNmb3JtZWQgb2JqZWN0XG4gICAgLy8gdGhpcyBmdW5jdGlvbiBhbHNvIGNhbGxzIHVwZGF0ZXRyYW5zZm9ybSBvbiBhbGwgaXRzIGNoaWxkcmVuIGFzIHBhcnQgb2YgdGhlIG1lYXN1cmluZy4gVGhpcyBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgdHJhbnNmb3JtIGFnYWluIGluIHRoaXMgZnVuY3Rpb25cbiAgICAvLyBUT0RPIHBhc3MgYW4gb2JqZWN0IHRvIGNsb25lIHRvbz8gc2F2ZXMgaGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBvbmUgZWFjaCB0aW1lIVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuY2xvbmUoKTtcblxuICAgIC8vIGFkZCBzb21lIHBhZGRpbmchXG4gICAgaWYodGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5fZmlsdGVyc1swXS5wYWRkaW5nO1xuICAgICAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgICAgICBib3VuZHMueSAtPSBwYWRkaW5nO1xuXG4gICAgICAgIGJvdW5kcy53aWR0aCArPSBwYWRkaW5nICogMjtcbiAgICAgICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcbiAgICB9XG5cbiAgICAvLyBmb3Igbm93IHdlIGNhY2hlIHRoZSBjdXJyZW50IHJlbmRlclRhcmdldCB0aGF0IHRoZSB3ZWJHTCByZW5kZXJlciBpcyBjdXJyZW50bHkgdXNpbmcuXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBtb3JlIGVsZWdlbnQuLlxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0O1xuICAgIC8vIFdlIGFsc28gc3RvcmUgdGhlIGZpbHRlciBzdGFjayAtIEkgd2lsbCBkZWZpbml0ZWx5IGxvb2sgdG8gY2hhbmdlIGhvdyB0aGlzIHdvcmtzIGEgbGl0dGxlIGxhdGVyIGRvd24gdGhlIGxpbmUuXG4gICAgdmFyIHN0YWNrID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjaztcblxuICAgIC8vIHRoaXMgcmVuZGVyVGV4dHVyZSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlZCBEaXNwbGF5T2JqZWN0XG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cblxuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjYWNoZWRSZW5kZXJUYXJnZXQpO1xuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2sgPSBzdGFjaztcblxuICAgIHRoaXMucmVuZGVyV2ViR0wgICAgID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgICAgICAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyByZXN0b3JlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIGNhY2hlZCBzcHJpdGUgdG8gYXZvaWQgdGhlIG5hc3R5IGZsaWNrZXIuLlxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAvLyBtYXAgdGhlIGhpdCB0ZXN0Li5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBjYW52YXNcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzKCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbn07XG5cbi8vVE9ETyB0aGlzIGNhbiBiZSB0aGUgc2FtZSBhcyB0aGUgd2ViR0wgdmVyaXNvbi4uIHdpbGwgbmVlZCB0byBkbyBhIGxpdHRsZSB0d2Vha2luZyBmaXJzdCB0aG91Z2guLlxuLyoqXG4qIFByZXBhcmVzIHRoZSBDYW52YXMgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vZ2V0IGJvdW5kcyBhY3R1YWxseSB0cmFuc2Zvcm1zIHRoZSBvYmplY3QgZm9yIHVzIGFscmVhZHkhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5jb250ZXh0ID0gY2FjaGVkUmVuZGVyVGFyZ2V0O1xuXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBDYWxjdWxhdGVzIHRoZSBib3VuZHMgb2YgdGhlIGNhY2hlZCBzcHJpdGVcbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZ2V0Q2FjaGVkQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNwcml0ZS5nZXRCb3VuZHMoKTtcbn07XG5cbi8qKlxuKiBEZXN0cm95cyB0aGUgY2FjaGVkIHNwcml0ZS5cbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fdGV4dHVyZS5kZXN0cm95KCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwRGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jYWNoZUFzQml0bWFwID0gZmFsc2U7XG4gICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95KCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIG9iamVjdC5cbiAqXG4gKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICogQG1lbWJlciB7c3RyaW5nfVxuICovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZGlzcGxheSBvYmplY3QgaW4gdGhlIGNvbnRhaW5lclxuKlxuKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4qIEBwYXJhbSBuYW1lIHtzdHJpbmd9IGluc3RhbmNlIG5hbWVcbiogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuKi9cbmNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4qXG4qIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4qIEBwYXJhbSBwb2ludCB7UG9pbnR9IHRoZSBwb2ludCB0byB3cml0ZSB0aGUgZ2xvYmFsIHZhbHVlIHRvLiBJZiBudWxsIGEgbmV3IHBvaW50IHdpbGwgYmUgcmV0dXJuZWRcbiogQHJldHVybiB7UG9pbnR9XG4qL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRHbG9iYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb2ludClcbntcbiAgICBwb2ludCA9IHBvaW50IHx8IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICBpZih0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHBvaW50LnggPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICBwb2ludC55ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG9pbnQueCA9IHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMucG9zaXRpb24ueTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG5yZXF1aXJlKCcuL2NhY2hlQXNCaXRtYXAnKTtcbnJlcXVpcmUoJy4vZ2V0Q2hpbGRCeU5hbWUnKTtcbnJlcXVpcmUoJy4vZ2V0R2xvYmFsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZXh0cmFzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1vdmllQ2xpcDogICAgICByZXF1aXJlKCcuL01vdmllQ2xpcCcpLFxuICAgIFRpbGluZ1Nwcml0ZTogICByZXF1aXJlKCcuL1RpbGluZ1Nwcml0ZScpLFxuICAgIEJpdG1hcFRleHQ6ICAgICByZXF1aXJlKCcuL0JpdG1hcFRleHQnKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vLyBUT0RPIChjZW5nbGVyKSAtIFRoZSBZIGlzIGZsaXBwZWQgaW4gdGhpcyBzaGFkZXIgZm9yIHNvbWUgcmVhc29uLlxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBzaGFkZXIgOiBodHRwczovL3d3dy5zaGFkZXJ0b3kuY29tL3ZpZXcvbHNzR0RqIGJ5IEBtb3ZBWDEzaFxuICovXG5cbi8qKlxuICogQW4gQVNDSUkgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBBc2NpaUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgY2hhcmFjdGVyKGZsb2F0IG4sIHZlYzIgcClcXG57XFxuICAgIHAgPSBmbG9vcihwKnZlYzIoNC4wLCAtNC4wKSArIDIuNSk7XFxuICAgIGlmIChjbGFtcChwLngsIDAuMCwgNC4wKSA9PSBwLnggJiYgY2xhbXAocC55LCAwLjAsIDQuMCkgPT0gcC55KVxcbiAgICB7XFxuICAgICAgICBpZiAoaW50KG1vZChuL2V4cDIocC54ICsgNS4wKnAueSksIDIuMCkpID09IDEpIHJldHVybiAxLjA7XFxuICAgIH1cXG4gICAgcmV0dXJuIDAuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHk7XFxuXFxuICAgIHZlYzMgY29sID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBmbG9vciggdXYgLyBwaXhlbFNpemUgKSAqIHBpeGVsU2l6ZSAvIGRpbWVuc2lvbnMueHkpLnJnYjtcXG5cXG4gICAgZmxvYXQgZ3JheSA9IChjb2wuciArIGNvbC5nICsgY29sLmIpIC8gMy4wO1xcblxcbiAgICBmbG9hdCBuID0gIDY1NTM2LjA7ICAgICAgICAgICAgIC8vIC5cXG4gICAgaWYgKGdyYXkgPiAwLjIpIG4gPSA2NTYwMC4wOyAgICAvLyA6XFxuICAgIGlmIChncmF5ID4gMC4zKSBuID0gMzMyNzcyLjA7ICAgLy8gKlxcbiAgICBpZiAoZ3JheSA+IDAuNCkgbiA9IDE1MjU1MDg2LjA7IC8vIG9cXG4gICAgaWYgKGdyYXkgPiAwLjUpIG4gPSAyMzM4NTE2NC4wOyAvLyAmXFxuICAgIGlmIChncmF5ID4gMC42KSBuID0gMTUyNTIwMTQuMDsgLy8gOFxcbiAgICBpZiAoZ3JheSA+IDAuNykgbiA9IDEzMTk5NDUyLjA7IC8vIEBcXG4gICAgaWYgKGdyYXkgPiAwLjgpIG4gPSAxMTUxMjgxMC4wOyAvLyAjXFxuXFxuICAgIHZlYzIgcCA9IG1vZCggdXYgLyAoIHBpeGVsU2l6ZSAqIDAuNSApLCAyLjApIC0gdmVjMigxLjApO1xcbiAgICBjb2wgPSBjb2wgKiBjaGFyYWN0ZXIobiwgcCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sLCAxLjApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDggfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQXNjaWlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Bc2NpaUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc2NpaUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQXNjaWlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFzY2lpRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBzaXplIHVzZWQgYnkgdGhlIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkFzY2lpRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmxvb21GaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmxvb21GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xufVxuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsb29tRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb29tRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbG9vbUZpbHRlcjtcblxuQmxvb21GaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLlNDUkVFTik7XG5cbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvb21GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuXG4vKipcbiAqIFRoZSBCbHVyRGlyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvd2FyZCBhIGRpcmVjdGlvbiB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWFxuICogQHBhcmFtIHtudW1iZXJ9IGRpcllcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckRpckZpbHRlcihkaXJYLCBkaXJZKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBmbG9hdCBkaXJYO1xcbnVuaWZvcm0gZmxvYXQgZGlyWTtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1swXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDEyICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDEyICogc3RyZW5ndGgpICogZGlyWSApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkgKiAwLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkgKiAwLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkgKiAwLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pICogMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBkaXJYOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJYIHx8IDAgfSxcbiAgICAgICAgICAgIGRpclk6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclkgfHwgMCB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclggPSBkaXJYIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclkgPSBkaXJZIHx8IDA7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckRpckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckRpckZpbHRlcjtcblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKSB7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmICh0aGlzLnBhc3NlcyA9PT0gMSkge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0yOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gKHRoaXMucGFzc2VzKyhpKjIpKSAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckRpckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJYO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJYLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsdXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcbn1cblxuQmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckZpbHRlcjtcblxuQmx1ckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcGFzc2VzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzID0gdGhpcy5ibHVyWUZpbHRlci5wYXNzZXMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWEZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1clhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1clhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1clhGaWx0ZXI7XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1clhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSAgTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllGaWx0ZXI7XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSBNYXRoLmFicyh0aGlzLnN0cmVuZ3RoKSAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgU21hcnQgQmx1ciBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNtYXJ0Qmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAqIHBlcmNlbnQpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICBkZWx0YTogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjEsIHk6IDAuMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTbWFydEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNtYXJ0Qmx1ckZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDV4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogYGBganNcbiAqICB2YXIgY29sb3JNYXRyaXggPSBuZXcgUElYSS5Db2xvck1hdHJpeEZpbHRlcigpO1xuICogIGNvbnRhaW5lci5maWx0ZXJzID0gW2NvbG9yTWF0cml4XTtcbiAqICBjb2xvck1hdHJpeC5jb250cmFzdCgyKTtcbiAqIGBgYFxuICogQGF1dGhvciBDbMOpbWVudCBDaGVuZWJhdWx0IDxjbGVtZW50QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvck1hdHJpeEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBtWzI1XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuXFxuICAgIHZlYzQgYyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yID0gKG1bMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gbVs0XTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLmcgPSAobVs1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSBtWzldO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmIgPSAobVsxMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gbVsxNF07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYSA9IChtWzE1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSBtWzE5XTtcXG5cXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJzFmdicsIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yTWF0cml4RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvck1hdHJpeEZpbHRlcjtcblxuXG4vKipcbiAqIFRyYW5zZm9ybXMgY3VycmVudCBtYXRyaXggYW5kIHNldCB0aGUgbmV3IG9uZVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gaWYgdHJ1ZSwgY3VycmVudCBtYXRyaXggYW5kIG1hdHJpeCBhcmUgbXVsdGlwbGllZC4gSWYgZmFsc2UsIGp1c3Qgc2V0IHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIEBwYXJhbSBtYXRyaXhcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9sb2FkTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgbXVsdGlwbHkpXG57XG4gICAgbXVsdGlwbHkgPSAhIW11bHRpcGx5O1xuXG4gICAgdmFyIG5ld01hdHJpeCA9IG1hdHJpeDtcblxuICAgIGlmIChtdWx0aXBseSkge1xuICAgICAgICB0aGlzLl9tdWx0aXBseShuZXdNYXRyaXgsIHRoaXMudW5pZm9ybXMubS52YWx1ZSwgbWF0cml4KTtcbiAgICAgICAgbmV3TWF0cml4ID0gdGhpcy5fY29sb3JNYXRyaXgobmV3TWF0cml4KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBtYXRyaXhcbiAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSBuZXdNYXRyaXg7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDUnc1xuICpcbiAqIEBwYXJhbSBvdXQge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSBhIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0gYiB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIG91dCB7bnVtYmVyW119IChtYXQgNXg0KVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYilcbntcblxuICAgIC8vIFJlZCBDaGFubmVsXG4gICAgb3V0WzBdID0gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYls1XSkgKyAoYVsyXSAqIGJbMTBdKSArIChhWzNdICogYlsxNV0pO1xuICAgIG91dFsxXSA9IChhWzBdICogYlsxXSkgKyAoYVsxXSAqIGJbNl0pICsgKGFbMl0gKiBiWzExXSkgKyAoYVszXSAqIGJbMTZdKTtcbiAgICBvdXRbMl0gPSAoYVswXSAqIGJbMl0pICsgKGFbMV0gKiBiWzddKSArIChhWzJdICogYlsxMl0pICsgKGFbM10gKiBiWzE3XSk7XG4gICAgb3V0WzNdID0gKGFbMF0gKiBiWzNdKSArIChhWzFdICogYls4XSkgKyAoYVsyXSAqIGJbMTNdKSArIChhWzNdICogYlsxOF0pO1xuICAgIG91dFs0XSA9IChhWzBdICogYls0XSkgKyAoYVsxXSAqIGJbOV0pICsgKGFbMl0gKiBiWzE0XSkgKyAoYVszXSAqIGJbMTldKTtcblxuICAgIC8vIEdyZWVuIENoYW5uZWxcbiAgICBvdXRbNV0gPSAoYVs1XSAqIGJbMF0pICsgKGFbNl0gKiBiWzVdKSArIChhWzddICogYlsxMF0pICsgKGFbOF0gKiBiWzE1XSk7XG4gICAgb3V0WzZdID0gKGFbNV0gKiBiWzFdKSArIChhWzZdICogYls2XSkgKyAoYVs3XSAqIGJbMTFdKSArIChhWzhdICogYlsxNl0pO1xuICAgIG91dFs3XSA9IChhWzVdICogYlsyXSkgKyAoYVs2XSAqIGJbN10pICsgKGFbN10gKiBiWzEyXSkgKyAoYVs4XSAqIGJbMTddKTtcbiAgICBvdXRbOF0gPSAoYVs1XSAqIGJbM10pICsgKGFbNl0gKiBiWzhdKSArIChhWzddICogYlsxM10pICsgKGFbOF0gKiBiWzE4XSk7XG4gICAgb3V0WzldID0gKGFbNV0gKiBiWzRdKSArIChhWzZdICogYls5XSkgKyAoYVs3XSAqIGJbMTRdKSArIChhWzhdICogYlsxOV0pO1xuXG4gICAgLy8gQmx1ZSBDaGFubmVsXG4gICAgb3V0WzEwXSA9IChhWzEwXSAqIGJbMF0pICsgKGFbMTFdICogYls1XSkgKyAoYVsxMl0gKiBiWzEwXSkgKyAoYVsxM10gKiBiWzE1XSk7XG4gICAgb3V0WzExXSA9IChhWzEwXSAqIGJbMV0pICsgKGFbMTFdICogYls2XSkgKyAoYVsxMl0gKiBiWzExXSkgKyAoYVsxM10gKiBiWzE2XSk7XG4gICAgb3V0WzEyXSA9IChhWzEwXSAqIGJbMl0pICsgKGFbMTFdICogYls3XSkgKyAoYVsxMl0gKiBiWzEyXSkgKyAoYVsxM10gKiBiWzE3XSk7XG4gICAgb3V0WzEzXSA9IChhWzEwXSAqIGJbM10pICsgKGFbMTFdICogYls4XSkgKyAoYVsxMl0gKiBiWzEzXSkgKyAoYVsxM10gKiBiWzE4XSk7XG4gICAgb3V0WzE0XSA9IChhWzEwXSAqIGJbNF0pICsgKGFbMTFdICogYls5XSkgKyAoYVsxMl0gKiBiWzE0XSkgKyAoYVsxM10gKiBiWzE5XSk7XG5cbiAgICAvLyBBbHBoYSBDaGFubmVsXG4gICAgb3V0WzE1XSA9IChhWzE1XSAqIGJbMF0pICsgKGFbMTZdICogYls1XSkgKyAoYVsxN10gKiBiWzEwXSkgKyAoYVsxOF0gKiBiWzE1XSk7XG4gICAgb3V0WzE2XSA9IChhWzE1XSAqIGJbMV0pICsgKGFbMTZdICogYls2XSkgKyAoYVsxN10gKiBiWzExXSkgKyAoYVsxOF0gKiBiWzE2XSk7XG4gICAgb3V0WzE3XSA9IChhWzE1XSAqIGJbMl0pICsgKGFbMTZdICogYls3XSkgKyAoYVsxN10gKiBiWzEyXSkgKyAoYVsxOF0gKiBiWzE3XSk7XG4gICAgb3V0WzE4XSA9IChhWzE1XSAqIGJbM10pICsgKGFbMTZdICogYls4XSkgKyAoYVsxN10gKiBiWzEzXSkgKyAoYVsxOF0gKiBiWzE4XSk7XG4gICAgb3V0WzE5XSA9IChhWzE1XSAqIGJbNF0pICsgKGFbMTZdICogYls5XSkgKyAoYVsxN10gKiBiWzE0XSkgKyAoYVsxOF0gKiBiWzE5XSk7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHJldHVybiBtIHtudW1iZXJbXX0gKG1hdCA1eDQpIHdpdGggYWxsIHZhbHVlcyBiZXR3ZWVuIDAtMVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2NvbG9yTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICAvLyBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gICAgdmFyIG0gPSBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCk7XG4gICAgbVs0XSAvPSAyNTU7XG4gICAgbVs5XSAvPSAyNTU7XG4gICAgbVsxNF0gLz0gMjU1O1xuICAgIG1bMTldIC89IDI1NTtcblxuICAgIHJldHVybiBtO1xufTtcblxuLyoqXG4gKiBBZGp1c3RzIGJyaWdodG5lc3NcbiAqXG4gKiBAcGFyYW0gYiB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgYnJpZ3RobmVzcyAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icmlnaHRuZXNzID0gZnVuY3Rpb24gKGIsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGIsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIGIsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIGIsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXRyaWNlcyBpbiBncmV5IHNjYWxlc1xuICpcbiAqIEBwYXJhbSBzY2FsZSB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgZ3JleSAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG4vL0FtZXJpY2FuaXplZCBhbGlhc1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyYXlzY2FsZSA9IENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGU7XG5cbi8qKlxuICogU2V0IHRoZSBibGFjayBhbmQgd2hpdGUgbWF0cmljZVxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJsYWNrQW5kV2hpdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGh1ZSBwcm9wZXJ0eSBvZiB0aGUgY29sb3JcbiAqXG4gKiBAcGFyYW0gcm90YXRpb24ge251bWJlcn0gaW4gZGVncmVlc1xuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmh1ZSA9IGZ1bmN0aW9uIChyb3RhdGlvbiwgbXVsdGlwbHkpXG57XG4gICAgcm90YXRpb24gPSAocm90YXRpb24gfHwgMCkgLyAxODAgKiBNYXRoLlBJO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyhyb3RhdGlvbiksXG4gICAgICAgIHNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcblxuICAgIC8vIGx1bWluYW5jZVJlZCwgbHVtaW5hbmNlR3JlZW4sIGx1bWluYW5jZUJsdWVcbiAgICB2YXIgbHVtUiA9IDAuMjEzLCAvLyBvciAwLjMwODZcbiAgICAgICAgbHVtRyA9IDAuNzE1LCAvLyBvciAwLjYwOTRcbiAgICAgICAgbHVtQiA9IDAuMDcyOyAvLyBvciAwLjA4MjBcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoMSAtIGx1bVIpICsgc2luICogKC1sdW1SKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAoLWx1bUcpLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgxIC0gbHVtQiksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKDAuMTQzKSwgbHVtRyArIGNvcyAqICgxIC0gbHVtRykgKyBzaW4gKiAoMC4xNDApLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgtMC4yODMpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgtKDEgLSBsdW1SKSksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKGx1bUcpLCBsdW1CICsgY29zICogKDEgLSBsdW1CKSArIHNpbiAqIChsdW1CKSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKipcbiAqIFNldCB0aGUgY29udHJhc3QgbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGRhcmsgYW5kIGJyaWdodFxuICogSW5jcmVhc2UgY29udHJhc3QgOiBzaGFkb3dzIGRhcmtlciBhbmQgaGlnaGxpZ2h0cyBicmlnaHRlclxuICogRGVjcmVhc2UgY29udHJhc3QgOiBicmluZyB0aGUgc2hhZG93cyB1cCBhbmQgdGhlIGhpZ2hsaWdodHMgZG93blxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdmFsdWUgb2YgdGhlIGNvbnRyYXN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29udHJhc3QgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgdiA9IChhbW91bnQgfHwgMCkgKyAxO1xuICAgIHZhciBvID0gLTEyOCAqICh2IC0gMSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB2LCAwLCAwLCAwLCBvLFxuICAgICAgICAwLCB2LCAwLCAwLCBvLFxuICAgICAgICAwLCAwLCB2LCAwLCBvLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc2F0dXJhdGlvbiBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gY29sb3JzXG4gKiBJbmNyZWFzZSBzYXR1cmF0aW9uIDogaW5jcmVhc2UgY29udHJhc3QsIGJyaWdodG5lc3MsIGFuZCBzaGFycG5lc3NcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgeCA9IChhbW91bnQgfHwgMCkgKiAyIC8gMyArIDE7XG4gICAgdmFyIHkgPSAoKHggLSAxKSAqIC0wLjUpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgeCwgeSwgeSwgMCwgMCxcbiAgICAgICAgeSwgeCwgeSwgMCwgMCxcbiAgICAgICAgeSwgeSwgeCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBEZXNhdHVyYXRlIGltYWdlIChyZW1vdmUgY29sb3IpXG4gKlxuICogQ2FsbCB0aGUgc2F0dXJhdGUgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHRoaXMuc2F0dXJhdGUoLTEpO1xufTtcblxuLyoqXG4gKiBOZWdhdGl2ZSBpbWFnZSAoaW52ZXJzZSBvZiBjbGFzc2ljIHJnYiBtYXRyaXgpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5lZ2F0aXZlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDEsIDEsIDAsIDAsXG4gICAgICAgIDEsIDAsIDEsIDAsIDAsXG4gICAgICAgIDEsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2VwaWEgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2VwaWEgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zOTMsIDAuNzY4OTk5OSwgMC4xODg5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4zNDksIDAuNjg1OTk5OSwgMC4xNjc5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4yNzIsIDAuNTMzOTk5OSwgMC4xMzA5OTk5OSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciBtb3Rpb24gcGljdHVyZSBwcm9jZXNzIGludmVudGVkIGluIDE5MTYgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRlY2huaWNvbG9yID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuOTEyNTI3Nzg5MTQ1NjA4MywgLTAuODU0NTM0NDk3Njk1MTY0NSwgLTAuMDkxNTU1MDg0ODI3NTU1ODUsIDAsIDExLjc5MzYwMzQzNDM3NzMzNyxcbiAgICAgICAgLTAuMzA4NzgzMzM4NTkyODA5NywgMS43NjU4OTA4NTU1NDU4NDI4LCAtMC4xMDYwMTc0MzA3NDcyMjI0NSwgMCwgLTcwLjM1MjA1MTYxNDYxMzk4LFxuICAgICAgICAtMC4yMzExMDMzNzc1NDg2MTYsIC0wLjc1MDE4OTkxOTc0NDAyMTIsIDEuODQ3NTk3ODE2MTA4MTg5LCAwLCAzMC45NTA5NDA4Njk0OTExMzgsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogUG9sYXJvaWQgZmlsdGVyXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnBvbGFyb2lkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuNDM4LCAtMC4wNjIsIC0wLjA2MiwgMCwgMCxcbiAgICAgICAgLTAuMTIyLCAxLjM3OCwgLTAuMTIyLCAwLCAwLFxuICAgICAgICAtMC4wMTYsIC0wLjAxNiwgMS40ODMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRmlsdGVyIHdobyB0cmFuc2Zvcm1zIDogUmVkIC0+IEJsdWUgYW5kIEJsdWUgLT4gUmVkXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRvQkdSID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgcmV2ZXJzYWwgZmlsbSBpbnRyb2R1Y2VkIGJ5IEVhc3RtYW4gS29kYWsgaW4gMTkzNS4gKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmtvZGFjaHJvbWUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS4xMjg1NTgyMzk2NTkzNTI1LCAtMC4zOTY3MzgyMjgzNjAxMzQ4LCAtMC4wMzk5MjU1OTE3MjkyMTc5MywgMCwgNjMuNzI5NTg3NjIxOTY1MDIsXG4gICAgICAgIC0wLjE2NDA0MzM5OTYyMjQ0NjE2LCAxLjA4MzUyNTE1NjYyOTEzMDQsIC0wLjA1NDk4ODA1MTE1NjMzMTMyLCAwLCAyNC43MzI0MDc4OTY3MDYyMDMsXG4gICAgICAgIC0wLjE2Nzg2MDEwNzA2MTU1NzYzLCAtMC41NjAzNDE2Mjc3Njk1MjQ4LCAxLjYwMTQ4NTA3NjE5NjQ5NDMsIDAsIDM1LjYyOTgyODA3NDYwOTQ2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEJyb3duIGRlbGljaW91cyBicm93bmkgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icm93bmkgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC41OTk3MDIzNDk4MTU5NzE1LCAwLjM0NTUzMjQzMDQ4MzkxMjYzLCAtMC4yNzA4Mjk4Njc0NTM4MDQyLCAwLCA0Ny40MzE5Mjg1NTYwMDg3MyxcbiAgICAgICAgLTAuMDM3NzAzMjQ5ODM3NzgzMTU3LCAwLjg2MDk1Nzc1ODc5OTI2NDEsIDAuMTUwNTk1NTIzODg0NTk5MTMsIDAsIC0zNi45Njg0MTQ5ODMxOTEyNyxcbiAgICAgICAgMC4yNDExMzYzNTEyODE1MzMzNSwgLTAuMDc0NDEwMzc5MDg0MjI0OTIsIDAuNDQ5NzIxODIwNjQ4NzcxNTMsIDAsIC03LjU2MjA3NTI3NzU5MTI4MyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFZpbnRhZ2UgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS52aW50YWdlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNjI3OTM0NTYzNTYwNTk5NCwgMC4zMjAyMTgzNDIwODE5MzY3LCAtMC4wMzk2NTQwODIxMTMxMjQ1MywgMCwgOS42NTEyODU4MzUyOTQxMjMsXG4gICAgICAgIDAuMDI1NzgzOTc3MDQ4MDg4NjgsIDAuNjQ0MTE4ODY0NDM3NDc3MSwgMC4wMzI1OTEyNzYxNjE0OTI5NCwgMCwgNy40NjI4MjkxNzY0NzA1OTEsXG4gICAgICAgIDAuMDQ2NjA1NTU1Njc4MjcxOSwgLTAuMDg1MTIzMjk4NzI0Nzg5MSwgMC41MjQxNjQ4MDE4NzAwNDY1LCAwLCA1LjE1OTE5MDU4ODIzNTI5NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGtpbmQgb2YgZ3JhZGllbnQgbWFwLCBidXQgZnVubnkgdG8gcGxheSB3aXRoIVxuICpcbiAqIEBwYXJhbSBkZXNhdHVyYXRpb24ge251bWJlcn1cbiAqIEBwYXJhbSB0b25lZCB7bnVtYmVyfVxuICogQHBhcmFtIGxpZ2h0Q29sb3Ige3N0cmluZ30gKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKiBAcGFyYW0gZGFya0NvbG9yIHtzdHJpbmd9ICAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29sb3JUb25lID0gZnVuY3Rpb24gKGRlc2F0dXJhdGlvbiwgdG9uZWQsIGxpZ2h0Q29sb3IsIGRhcmtDb2xvciwgbXVsdGlwbHkpXG57XG4gICAgZGVzYXR1cmF0aW9uID0gZGVzYXR1cmF0aW9uIHx8IDAuMjtcbiAgICB0b25lZCA9IHRvbmVkIHx8IDAuMTU7XG4gICAgbGlnaHRDb2xvciA9IGxpZ2h0Q29sb3IgfHwgMHhGRkU1ODA7XG4gICAgZGFya0NvbG9yID0gZGFya0NvbG9yIHx8IDB4MzM4MDAwO1xuXG4gICAgdmFyIGxSID0gKChsaWdodENvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsRyA9ICgobGlnaHRDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsQiA9IChsaWdodENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgZFIgPSAoKGRhcmtDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEcgPSAoKGRhcmtDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkQiA9IChkYXJrQ29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC41OSwgMC4xMSwgMCwgMCxcbiAgICAgICAgbFIsIGxHLCBsQiwgZGVzYXR1cmF0aW9uLCAwLFxuICAgICAgICBkUiwgZEcsIGRCLCB0b25lZCwgMCxcbiAgICAgICAgbFIgLSBkUiwgbEcgLSBkRywgbEIgLSBkQiwgMCwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIE5pZ2h0IGVmZmVjdFxuICpcbiAqIEBwYXJhbSBpbnRlbnNpdHkge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uaWdodCA9IGZ1bmN0aW9uIChpbnRlbnNpdHksIG11bHRpcGx5KVxue1xuICAgIGludGVuc2l0eSA9IGludGVuc2l0eSB8fCAwLjE7XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgaW50ZW5zaXR5ICogKCAtMi4wKSwgLWludGVuc2l0eSwgMCwgMCwgMCxcbiAgICAgICAgLWludGVuc2l0eSwgMCwgaW50ZW5zaXR5LCAwLCAwLFxuICAgICAgICAwLCBpbnRlbnNpdHksIGludGVuc2l0eSAqIDIuMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKlxuICogUHJlZGF0b3IgZWZmZWN0XG4gKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgYSBuZXcgaW5kZXBlbnQgb25lXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBob3cgbXVjaCB0aGUgcHJlZGF0b3IgZmVlbHMgaGlzIGZ1dHVyZSB2aWN0aW1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wcmVkYXRvciA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDExLjIyNDEzMDYzMDQ5MzE2NCAqIGFtb3VudCwgLTQuNzk0NDg2OTk5NTExNzE5ICogYW1vdW50LCAtMi44NzQ2MTE4NTQ1NTMyMjI3ICogYW1vdW50LCAwICogYW1vdW50LCAwLjQwMzQyNDM4MjIwOTc3NzgzICogYW1vdW50LFxuICAgICAgICAtMy42MzMwNjk3NTM2NDY4NTA2ICogYW1vdW50LCA5LjE5MzE1NzE5NjA0NDkyMiAqIGFtb3VudCwgLTIuOTUxODEwODM2NzkxOTkyICogYW1vdW50LCAwICogYW1vdW50LCAtMS4zMTYxMzUwNDg4NjYyNzIgKiBhbW91bnQsXG4gICAgICAgIC0zLjIxODQxOTc5MDI2Nzk0NDMgKiBhbW91bnQsIC00LjIzNzUwMzA1MTc1NzgxMjUgKiBhbW91bnQsIDcuNDc2NDQ4MDU5MDgyMDMxICogYW1vdW50LCAwICogYW1vdW50LCAwLjgwNDQ0NTkyMjM3NDcyNTMgKiBhbW91bnQsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBMU0QgZWZmZWN0XG4gKlxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBIb3cgY3JhenkgaXMgeW91ciBlZmZlY3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5sc2QgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMiwgLTAuNCwgMC41LCAwLCAwLFxuICAgICAgICAtMC41LCAyLCAtMC40LCAwLCAwLFxuICAgICAgICAtMC40LCAtMC41LCAzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgb25lXG4gKlxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIGZhbHNlKTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF0cml4IG9mIHRoZSBjb2xvciBtYXRyaXggZmlsdGVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yTWF0cml4RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IFsxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwXVxuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm0udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBsb3dlcnMgdGhlIGNvbG9yIGRlcHRoIG9mIHlvdXIgaW1hZ2UgYnkgdGhlIGdpdmVuIGFtb3VudCwgcHJvZHVjaW5nIGFuIGltYWdlIHdpdGggYSBzbWFsbGVyIHBhbGV0dGUuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yU3RlcEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzdGVwO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGNvbG9yID0gZmxvb3IoY29sb3IgKiBzdGVwKSAvIHN0ZXA7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXA6IHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yU3RlcEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JTdGVwRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBzdGVwcyB0byByZWR1Y2UgdGhlIHBhbGV0dGUgYnkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvclN0ZXBGaWx0ZXIjXG4gICAgICovXG4gICAgc3RlcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbnZvbHV0aW9uRmlsdGVyIGNsYXNzIGFwcGxpZXMgYSBtYXRyaXggY29udm9sdXRpb24gZmlsdGVyIGVmZmVjdC5cbiAqIEEgY29udm9sdXRpb24gY29tYmluZXMgcGl4ZWxzIGluIHRoZSBpbnB1dCBpbWFnZSB3aXRoIG5laWdoYm9yaW5nIHBpeGVscyB0byBwcm9kdWNlIGEgbmV3IGltYWdlLlxuICogQSB3aWRlIHZhcmlldHkgb2YgaW1hZ2UgZWZmZWN0cyBjYW4gYmUgYWNoaWV2ZWQgdGhyb3VnaCBjb252b2x1dGlvbnMsIGluY2x1ZGluZyBibHVycmluZywgZWRnZVxuICogZGV0ZWN0aW9uLCBzaGFycGVuaW5nLCBlbWJvc3NpbmcsIGFuZCBiZXZlbGluZy4gVGhlIG1hdHJpeCBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIFNlZSBodHRwOi8vZG9jcy5naW1wLm9yZy9lbi9wbHVnLWluLWNvbnZtYXRyaXguaHRtbCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICovXG5mdW5jdGlvbiBDb252b2x1dGlvbkZpbHRlcihtYXRyaXgsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyBtZWRpdW1wIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xcbnVuaWZvcm0gZmxvYXQgbWF0cml4WzldO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IGMxMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAtIHRleGVsU2l6ZSk7IC8vIHRvcCBsZWZ0XFxuICAgdmVjNCBjMTIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgY2VudGVyXFxuICAgdmVjNCBjMTMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCByaWdodFxcblxcbiAgIHZlYzQgYzIxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIGxlZnRcXG4gICB2ZWM0IGMyMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7IC8vIG1pZCBjZW50ZXJcXG4gICB2ZWM0IGMyMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCByaWdodFxcblxcbiAgIHZlYzQgYzMxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gbGVmdFxcbiAgIHZlYzQgYzMyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGNlbnRlclxcbiAgIHZlYzQgYzMzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgdGV4ZWxTaXplKTsgLy8gYm90dG9tIHJpZ2h0XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID1cXG4gICAgICAgYzExICogbWF0cml4WzBdICsgYzEyICogbWF0cml4WzFdICsgYzEzICogbWF0cml4WzJdICtcXG4gICAgICAgYzIxICogbWF0cml4WzNdICsgYzIyICogbWF0cml4WzRdICsgYzIzICogbWF0cml4WzVdICtcXG4gICAgICAgYzMxICogbWF0cml4WzZdICsgYzMyICogbWF0cml4WzddICsgYzMzICogbWF0cml4WzhdO1xcblxcbiAgIGdsX0ZyYWdDb2xvci5hID0gYzIyLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWF0cml4OiAgICAgeyB0eXBlOiAnMWZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KSB9LFxuICAgICAgICAgICAgdGV4ZWxTaXplOiAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxIC8gd2lkdGgsIHk6IDEgLyBoZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnZvbHV0aW9uRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb252b2x1dGlvbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnkgPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIENyb3NzIEhhdGNoIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENyb3NzSGF0Y2hGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZmxvYXQgbHVtID0gbGVuZ3RoKHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZC54eSkucmdiKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDEuMCwgMS4wLCAxLjApO1xcblxcbiAgICBpZiAobHVtIDwgMS4wMClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjc1KVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNTApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC4zKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXCJcbiAgICApO1xufVxuXG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDcm9zc0hhdGNoRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDcm9zc0hhdGNoRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIERpc3BsYWNlbWVudEZpbHRlciBjbGFzcyB1c2VzIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHRleHR1cmUgKGNhbGxlZCB0aGUgZGlzcGxhY2VtZW50IG1hcCkgdG8gcGVyZm9ybSBhIGRpc3BsYWNlbWVudCBvZiBhbiBvYmplY3QuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGZpbHRlciB0byBhcHBseSBhbGwgbWFub3Igb2YgY3Jhenkgd2FycGluZyBlZmZlY3RzXG4gKiBDdXJyZW50bHkgdGhlIHIgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHggYW5kIHRoZSBnIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIChtYWtlIHN1cmUgaXRzIGFkZGVkIHRvIHRoZSBzY2VuZSEpXG4gKi9cbmZ1bmN0aW9uIERpc3BsYWNlbWVudEZpbHRlcihzcHJpdGUsIHNjYWxlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG4gICAgc3ByaXRlLnJlbmRlcmFibGUgPSBmYWxzZTtcblxuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZNYXBDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcFNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgbWFwID0gIHRleHR1cmUyRChtYXBTYW1wbGVyLCB2TWFwQ29vcmQpO1xcblxcbiAgIG1hcCAtPSAwLjU7XFxuICAgbWFwLnh5ICo9IHNjYWxlO1xcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyBtYXAueCwgdlRleHR1cmVDb29yZC55ICsgbWFwLnkpKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcFNhbXBsZXI6ICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLnRleHR1cmUgfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9LFxuICAgICAgICAgICAgc2NhbGU6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSwgeTogMSB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcblxuICAgIGlmIChzY2FsZSA9PT0gbnVsbCB8fCBzY2FsZSA9PT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgICAgc2NhbGUgPSAyMDtcbiAgICB9XG5cbiAgICB0aGlzLnNjYWxlID0gbmV3IGNvcmUuUG9pbnQoc2NhbGUsIHNjYWxlKTtcbn1cblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYWNlbWVudEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxhY2VtZW50RmlsdGVyO1xuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS54ID0gdGhpcy5zY2FsZS54ICogKDEvaW5wdXQuZnJhbWUud2lkdGgpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueSA9IHRoaXMuc2NhbGUueSAqICgxL2lucHV0LmZyYW1lLmhlaWdodCk7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gTXVzdCBiZSBwb3dlciBvZiAyIHNpemVkIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5EaXNwbGFjZW1lbnRGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3ZlcyBodHRwOi8vbWF0Z3JvdmVzLmNvbS8gQERvb3JtYXQyM1xuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9mdW4vZG90c2NyZWVuLmpzXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgZG90c2NyZWVuIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0byBiZSBtYWRlIG91dCBvZlxuICogYmxhY2sgYW5kIHdoaXRlIGhhbGZ0b25lIGRvdHMgbGlrZSBhbiBvbGQgcHJpbnRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRG90U2NyZWVuRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG5cXG5mbG9hdCBwYXR0ZXJuKClcXG57XFxuICAgZmxvYXQgcyA9IHNpbihhbmdsZSksIGMgPSBjb3MoYW5nbGUpO1xcbiAgIHZlYzIgdGV4ID0gdlRleHR1cmVDb29yZCAqIGRpbWVuc2lvbnMueHk7XFxuICAgdmVjMiBwb2ludCA9IHZlYzIoXFxuICAgICAgIGMgKiB0ZXgueCAtIHMgKiB0ZXgueSxcXG4gICAgICAgcyAqIHRleC54ICsgYyAqIHRleC55XFxuICAgKSAqIHNjYWxlO1xcbiAgIHJldHVybiAoc2luKHBvaW50LngpICogc2luKHBvaW50LnkpKSAqIDQuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhhdmVyYWdlICogMTAuMCAtIDUuMCArIHBhdHRlcm4oKSksIGNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNjYWxlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvdFNjcmVlbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRG90U2NyZWVuRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIHNjYWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHJhZGl1cyBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWVRpbnRGaWx0ZXIgYXBwbGllcyBhIHZlcnRpY2FsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWVRpbnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbitvZmZzZXQpLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IHN1bSA9IHZlYzQoMC4wKTtcXG5cXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLnJnYiAqIHN1bS5hICogYWxwaGEsIHN1bS5hICogYWxwaGEgKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSAvIDUxMiB9LFxuICAgICAgICAgICAgY29sb3I6IHsgdHlwZTogJ2MnLCB2YWx1ZTogWzAsMCwwXX0sXG4gICAgICAgICAgICBhbHBoYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC43IH0sXG4gICAgICAgICAgICBvZmZzZXQ6IHsgdHlwZTogJzJmJywgdmFsdWU6WzUsIDVdfSxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOjF9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllUaW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWVRpbnRGaWx0ZXI7XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIGNsZWFyKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWVRpbnRGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllUaW50RmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWVRpbnRGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgRHJvcFNoYWRvd0ZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEcm9wU2hhZG93RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIgPSBuZXcgQmx1cllUaW50RmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgdGhpcy5wYWRkaW5nID0gMzA7XG5cbiAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9hbmdsZSA9IDQ1ICogTWF0aC5QSSAvIDE4MDtcbiAgICB0aGlzLl9kaXN0YW5jZSA9IDEwO1xuICAgIHRoaXMuYWxwaGEgPSAwLjc1O1xuICAgIHRoaXMuaGlkZU9iamVjdCA9IGZhbHNlO1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5NVUxUSVBMWTtcbn1cblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRHJvcFNoYWRvd0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRHJvcFNoYWRvd0ZpbHRlcjtcblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIGlmKHRoaXMuX2RpcnR5UG9zaXRpb24pXG4gICAge1xuICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzBdID0gTWF0aC5zaW4odGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVsxXSA9IE1hdGguY29zKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUodGhpcy5ibGVuZE1vZGUpO1xuXG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIGlmKCF0aGlzLmhpZGVPYmplY3QpXG4gICAge1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG4gICAgfVxuXG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBjb2xvcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgY29yZS51dGlscy5yZ2IyaGV4KCB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgPSBjb3JlLnV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYWxwaGE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXN0YW5jZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGRpc3RhbmNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9hbmdsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fYW5nbGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBncmV5c2NhbGVzIHRoZSBwYWxldHRlIG9mIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBHcmF5RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JheTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIHZlYzMoMC4yMTI2KmdsX0ZyYWdDb2xvci5yICsgMC43MTUyKmdsX0ZyYWdDb2xvci5nICsgMC4wNzIyKmdsX0ZyYWdDb2xvci5iKSwgZ3JheSk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXk6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuR3JheUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkdyYXlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JheUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JheUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR3JheUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXkuIDEgd2lsbCBtYWtlIHRoZSBvYmplY3QgYmxhY2sgYW5kIHdoaXRlLCAwIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5HcmF5RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYXk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGZpbHRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmZpbHRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXNjaWlGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2FzY2lpL0FzY2lpRmlsdGVyJyksXG4gICAgQmxvb21GaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2Jsb29tL0Jsb29tRmlsdGVyJyksXG4gICAgQmx1ckZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckZpbHRlcicpLFxuICAgIEJsdXJYRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1cllGaWx0ZXInKSxcbiAgICBCbHVyRGlyRmlsdGVyOiAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRGlyRmlsdGVyJyksXG4gICAgQ29sb3JNYXRyaXhGaWx0ZXI6ICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yTWF0cml4RmlsdGVyJyksXG4gICAgQ29sb3JTdGVwRmlsdGVyOiAgICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yU3RlcEZpbHRlcicpLFxuICAgIENvbnZvbHV0aW9uRmlsdGVyOiAgcmVxdWlyZSgnLi9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlcicpLFxuICAgIENyb3NzSGF0Y2hGaWx0ZXI6ICAgcmVxdWlyZSgnLi9jcm9zc2hhdGNoL0Nyb3NzSGF0Y2hGaWx0ZXInKSxcbiAgICBEaXNwbGFjZW1lbnRGaWx0ZXI6IHJlcXVpcmUoJy4vZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlcicpLFxuICAgIERvdFNjcmVlbkZpbHRlcjogICAgcmVxdWlyZSgnLi9kb3QvRG90U2NyZWVuRmlsdGVyJyksXG4gICAgR3JheUZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2dyYXkvR3JheUZpbHRlcicpLFxuICAgIERyb3BTaGFkb3dGaWx0ZXI6ICAgcmVxdWlyZSgnLi9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXInKSxcbiAgICBJbnZlcnRGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vaW52ZXJ0L0ludmVydEZpbHRlcicpLFxuICAgIE5vaXNlRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ub2lzZS9Ob2lzZUZpbHRlcicpLFxuICAgIFBpeGVsYXRlRmlsdGVyOiAgICAgcmVxdWlyZSgnLi9waXhlbGF0ZS9QaXhlbGF0ZUZpbHRlcicpLFxuICAgIFJHQlNwbGl0RmlsdGVyOiAgICAgcmVxdWlyZSgnLi9yZ2IvUkdCU3BsaXRGaWx0ZXInKSxcbiAgICBTaG9ja3dhdmVGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vc2hvY2t3YXZlL1Nob2Nrd2F2ZUZpbHRlcicpLFxuICAgIFNlcGlhRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9zZXBpYS9TZXBpYUZpbHRlcicpLFxuICAgIFNtYXJ0Qmx1ckZpbHRlcjogICAgcmVxdWlyZSgnLi9ibHVyL1NtYXJ0Qmx1ckZpbHRlcicpLFxuICAgIFRpbHRTaGlmdEZpbHRlcjogICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyJyksXG4gICAgVHdpc3RGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3R3aXN0L1R3aXN0RmlsdGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGludmVydHMgeW91ciBEaXNwbGF5IE9iamVjdHMgY29sb3JzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBJbnZlcnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gZmxvYXQgaW52ZXJ0O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggKHZlYzMoMSktZ2xfRnJhZ0NvbG9yLnJnYikgKiBnbF9GcmFnQ29sb3IuYSwgZ2xfRnJhZ0NvbG9yLnJnYiwgMS4wIC0gaW52ZXJ0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBpbnZlcnQ6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludmVydEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gSW52ZXJ0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhJbnZlcnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBpbnZlcnQuIGAxYCB3aWxsIGZ1bGx5IGludmVydCB0aGUgY29sb3JzLCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkludmVydEZpbHRlciNcbiAgICAgKi9cbiAgICBpbnZlcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9hZGp1c3Qvbm9pc2UuanNcbiAqL1xuXG4vKipcbiAqIEEgTm9pc2UgZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gTm9pc2VGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgbm9pc2U7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgcmFuZCh2ZWMyIGNvKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoY28ueHksIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZmxvYXQgZGlmZiA9IChyYW5kKHZUZXh0dXJlQ29vcmQpIC0gMC41KSAqIG5vaXNlO1xcblxcbiAgICBjb2xvci5yICs9IGRpZmY7XFxuICAgIGNvbG9yLmcgKz0gZGlmZjtcXG4gICAgY29sb3IuYiArPSBkaWZmO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBub2lzZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbk5vaXNlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuTm9pc2VGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTm9pc2VGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE5vaXNlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2lzZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIG5vaXNlIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuTm9pc2VGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMC41XG4gICAgICovXG4gICAgbm9pc2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHBpeGVsYXRlIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciAnYmxvY2t5Jy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUGl4ZWxhdGVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZDtcXG5cXG4gICAgdmVjMiBzaXplID0gZGltZW5zaW9ucy54eSAvIHBpeGVsU2l6ZTtcXG5cXG4gICAgdmVjMiBjb2xvciA9IGZsb29yKCAoIHZUZXh0dXJlQ29vcmQgKiBzaXplICkgKSAvIHNpemUgKyBwaXhlbFNpemUvZGltZW5zaW9ucy54eSAqIDAuNTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb2xvcik7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgICB2YWx1ZTogeyB4OiAxMCwgeTogMTAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBpeGVsYXRlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBQaXhlbGF0ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBhIHBvaW50IHRoYXQgZGVzY3JpYmVzIHRoZSBzaXplIG9mIHRoZSBibG9ja3MuXG4gICAgICogeCBpcyB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGFuZCB5IGlzIHRoZSBoZWlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUGl4ZWxhdGVGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEFuIFJHQiBTcGxpdCBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFJHQlNwbGl0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcmVkO1xcbnVuaWZvcm0gdmVjMiBncmVlbjtcXG51bmlmb3JtIHZlYzIgYmx1ZTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yLnIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyByZWQvZGltZW5zaW9ucy54eSkucjtcXG4gICBnbF9GcmFnQ29sb3IuZyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGdyZWVuL2RpbWVuc2lvbnMueHkpLmc7XFxuICAgZ2xfRnJhZ0NvbG9yLmIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBibHVlL2RpbWVuc2lvbnMueHkpLmI7XFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgZ3JlZW46ICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAtMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGJsdWU6ICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IC0yMCB9IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUkdCU3BsaXRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFJHQlNwbGl0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSR0JTcGxpdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBSZWQgY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgcmVkOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yZWQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmVlbiBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmVlbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEJsdWUgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgYXBwbGllcyBhIHNlcGlhIGVmZmVjdCB0byB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2VwaWFGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc2VwaWE7XFxuXFxuY29uc3QgbWF0MyBzZXBpYU1hdHJpeCA9IG1hdDMoMC4zNTg4LCAwLjcwNDQsIDAuMTM2OCwgMC4yOTkwLCAwLjU4NzAsIDAuMTE0MCwgMC4yMzkyLCAwLjQ2OTYsIDAuMDkxMik7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZ2xfRnJhZ0NvbG9yLnJnYiAqIHNlcGlhTWF0cml4LCBzZXBpYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2VwaWE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2VwaWFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TZXBpYUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXBpYUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2VwaWFGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNlcGlhRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgc2VwaWEuIGAxYCB3aWxsIGFwcGx5IHRoZSBmdWxsIHNlcGlhIGVmZmVjdCwgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TZXBpYUZpbHRlciNcbiAgICAgKi9cbiAgICBzZXBpYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA0eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTaG9ja3dhdmVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XFxudW5pZm9ybSB2ZWMzIHBhcmFtczsgLy8gMTAuMCwgMC44LCAwLjFcXG51bmlmb3JtIGZsb2F0IHRpbWU7XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSB2VGV4dHVyZUNvb3JkO1xcbiAgICB2ZWMyIHRleENvb3JkID0gdXY7XFxuXFxuICAgIGZsb2F0IGRpc3QgPSBkaXN0YW5jZSh1diwgY2VudGVyKTtcXG5cXG4gICAgaWYgKCAoZGlzdCA8PSAodGltZSArIHBhcmFtcy56KSkgJiYgKGRpc3QgPj0gKHRpbWUgLSBwYXJhbXMueikpIClcXG4gICAge1xcbiAgICAgICAgZmxvYXQgZGlmZiA9IChkaXN0IC0gdGltZSk7XFxuICAgICAgICBmbG9hdCBwb3dEaWZmID0gMS4wIC0gcG93KGFicyhkaWZmKnBhcmFtcy54KSwgcGFyYW1zLnkpO1xcblxcbiAgICAgICAgZmxvYXQgZGlmZlRpbWUgPSBkaWZmICAqIHBvd0RpZmY7XFxuICAgICAgICB2ZWMyIGRpZmZVViA9IG5vcm1hbGl6ZSh1diAtIGNlbnRlcik7XFxuICAgICAgICB0ZXhDb29yZCA9IHV2ICsgKGRpZmZVViAqIGRpZmZUaW1lKTtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHRleENvb3JkKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBjZW50ZXI6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9LFxuICAgICAgICAgICAgcGFyYW1zOiB7IHR5cGU6ICd2MycsIHZhbHVlOiB7IHg6IDEwLCB5OiAwLjgsIHo6IDAuMSB9IH0sXG4gICAgICAgICAgICB0aW1lOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaG9ja3dhdmVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNob2Nrd2F2ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNlbnRlciBvZiB0aGUgc2hvY2t3YXZlIGluIG5vcm1hbGl6ZWQgc2NyZWVuIGNvb3Jkcy4gVGhhdCBpc1xuICAgICAqICgwLDApIGlzIHRoZSB0b3AtbGVmdCBhbmQgKDEsMSkgaXMgdGhlIGJvdHRvbSByaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgY2VudGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGFyYW1zIG9mIHRoZSBzaG9ja3dhdmUuIFRoZXNlIG1vZGlmeSB0aGUgbG9vayBhbmQgYmVoYXZpb3Igb2ZcbiAgICAgKiB0aGUgc2hvY2t3YXZlIGFzIGl0IHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIHNob2Nrd2F2ZS4gVGhpcyBjb250cm9scyB0aGUgc3BlZWQgYXQgd2hpY2hcbiAgICAgKiB0aGUgc2hvY2t3YXZlIHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHRpbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRBeGlzRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRBeGlzRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGJsdXI7XFxudW5pZm9ybSBmbG9hdCBncmFkaWVudEJsdXI7XFxudW5pZm9ybSB2ZWMyIHN0YXJ0O1xcbnVuaWZvcm0gdmVjMiBlbmQ7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcbnVuaWZvcm0gdmVjMiB0ZXhTaXplO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcbiAgICB2ZWMyIG5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMyKHN0YXJ0LnkgLSBlbmQueSwgZW5kLnggLSBzdGFydC54KSk7XFxuICAgIGZsb2F0IHJhZGl1cyA9IHNtb290aHN0ZXAoMC4wLCAxLjAsIGFicyhkb3QodlRleHR1cmVDb29yZCAqIHRleFNpemUgLSBzdGFydCwgbm9ybWFsKSkgLyBncmFkaWVudEJsdXIpICogYmx1cjtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgLyB0ZXhTaXplICogcGVyY2VudCAqIHJhZGl1cyk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6ICAgICAgICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxMDAgfSxcbiAgICAgICAgICAgIGdyYWRpZW50Qmx1cjogICB7IHR5cGU6ICcxZicsIHZhbHVlOiA2MDAgfSxcbiAgICAgICAgICAgIHN0YXJ0OiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAsICAgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZW5kOiAgICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogNjAwLCAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBkZWx0YTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAzMCwgICB5OiAzMCB9IH0sXG4gICAgICAgICAgICB0ZXhTaXplOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiB3aW5kb3cuaW5uZXJXaWR0aCwgeTogd2luZG93LmlubmVySGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbn1cblxuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICogVGhpcyBpcyBvdmVycmlkZGVuIGluIHRoZSBYIGFuZCBZIGZpbHRlcnMsIGRvZXMgbm90aGluZyBmb3IgdGhpcyBjbGFzcy5cbiAqXG4gKi9cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAwO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IDA7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WUZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnQgRmlsdGVyLiBNYW5hZ2VzIHRoZSBwYXNzIG9mIGJvdGggYSBUaWx0U2hpZnRYRmlsdGVyIGFuZCBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlciA9IG5ldyBUaWx0U2hpZnRYRmlsdGVyKCk7XG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyID0gbmV3IFRpbHRTaGlmdFlGaWx0ZXIoKTtcbn1cblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0RmlsdGVyO1xuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ncmFkaWVudEJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5zdGFydCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5lbmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRYRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gZHggLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR5IC8gZDtcbn07XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFlGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WUZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAtZHkgLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR4IC8gZDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgdHdpc3QgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHR3aXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVHdpc3RGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgLSBvZmZzZXQ7XFxuICAgZmxvYXQgZGlzdCA9IGxlbmd0aChjb29yZCk7XFxuXFxuICAgaWYgKGRpc3QgPCByYWRpdXMpXFxuICAge1xcbiAgICAgICBmbG9hdCByYXRpbyA9IChyYWRpdXMgLSBkaXN0KSAvIHJhZGl1cztcXG4gICAgICAgZmxvYXQgYW5nbGVNb2QgPSByYXRpbyAqIHJhdGlvICogYW5nbGU7XFxuICAgICAgIGZsb2F0IHMgPSBzaW4oYW5nbGVNb2QpO1xcbiAgICAgICBmbG9hdCBjID0gY29zKGFuZ2xlTW9kKTtcXG4gICAgICAgY29vcmQgPSB2ZWMyKGNvb3JkLnggKiBjIC0gY29vcmQueSAqIHMsIGNvb3JkLnggKiBzICsgY29vcmQueSAqIGMpO1xcbiAgIH1cXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkK29mZnNldCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBvZmZzZXQ6ICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuVHdpc3RGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ud2lzdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUd2lzdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVHdpc3RGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFR3aXN0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgZGVzY3JpYmVzIHRoZSB0aGUgb2Zmc2V0IG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcmFkaXVzIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIHJhZGl1czoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBhbmdsZSBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvLyBydW4gdGhlIHBvbHlmaWxsc1xucmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbi8vIGFkZCBjb3JlIHBsdWdpbnMuXG5jb3JlLmV4dHJhcyAgICAgICAgID0gcmVxdWlyZSgnLi9leHRyYXMnKTtcbmNvcmUuZmlsdGVycyAgICAgICAgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcbmNvcmUuaW50ZXJhY3Rpb24gICAgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9uJyk7XG5jb3JlLmxvYWRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9sb2FkZXJzJyk7XG5jb3JlLm1lc2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9tZXNoJyk7XG5jb3JlLmFjY2Vzc2liaWxpdHkgID0gcmVxdWlyZSgnLi9hY2Nlc3NpYmlsaXR5Jyk7XG5cbi8vIGV4cG9ydCBhIHByZW1hZGUgbG9hZGVyIGluc3RhbmNlXG4vKipcbiAqIEEgcHJlbWFkZSBpbnN0YW5jZSBvZiB0aGUgbG9hZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZGVyIHJlc291cmNlcy5cbiAqXG4gKiBAbmFtZSBsb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcHJvcGVydHkge1BJWEkubG9hZGVycy5Mb2FkZXJ9XG4gKi9cbmNvcmUubG9hZGVyID0gbmV3IGNvcmUubG9hZGVycy5Mb2FkZXIoKTtcblxuLy8gbWl4aW4gdGhlIGRlcHJlY2F0aW9uIGZlYXR1cmVzLlxuT2JqZWN0LmFzc2lnbihjb3JlLCByZXF1aXJlKCcuL2RlcHJlY2F0aW9uJykpO1xuXG4vLyBBbHdheXMgZXhwb3J0IHBpeGkgZ2xvYmFsbHkuXG5nbG9iYWwuUElYSSA9IGNvcmU7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBIb2xkcyBhbGwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhbiBJbnRlcmFjdGlvbiBldmVudFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25EYXRhKClcbntcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IHN0b3JlcyB0aGUgZ2xvYmFsIGNvb3JkcyBvZiB3aGVyZSB0aGUgdG91Y2gvbW91c2UgZXZlbnQgaGFwcGVuZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5nbG9iYWwgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBTcHJpdGUgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBhc3NlZCB0byBhbiBldmVudCBoYW5kbGVyLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbmFsIERPTSBFdmVudCB0aGF0IHdhcyBjYXB0dXJlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gbnVsbDtcbn1cblxuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25EYXRhO1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBzcGVjaWZpZWQgZGlzcGxheU9iamVjdCBmb3IgdGhpcyBJbnRlcmFjdGlvbkRhdGFcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSBsb2NhbCBjb29yZHMgb2ZmXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IHBvaW50KVxuICogQHBhcmFtIFtnbG9iYWxQb3NdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHlvdXIgY3VzdG9tIGdsb2JhbCBjb29yZHMsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCB1c2UgdGhlIGN1cnJlbnQgZ2xvYmFsIGNvb3JkcylcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEludGVyYWN0aW9uRGF0YSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgRGlzcGxheU9iamVjdFxuICovXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmdldExvY2FsUG9zaXRpb24gPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcG9pbnQsIGdsb2JhbFBvcylcbntcbiAgICByZXR1cm4gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UoZ2xvYmFsUG9zIHx8IHRoaXMuZ2xvYmFsLCBwb2ludCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgSW50ZXJhY3Rpb25EYXRhID0gcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKTtcblxuLy8gTWl4IGludGVyYWN0aXZlVGFyZ2V0IGludG8gY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZVxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxuKTtcblxuLyoqXG4gKiBUaGUgaW50ZXJhY3Rpb24gbWFuYWdlciBkZWFscyB3aXRoIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuIEFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBpbnRlcmFjdGl2ZVxuICogaWYgaXRzIGludGVyYWN0aXZlIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZVxuICogVGhpcyBtYW5hZ2VyIGFsc28gc3VwcG9ydHMgbXVsdGl0b3VjaC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdD10cnVlXSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBtYW5hZ2VyIGF1dG9tYXRpY2FsbHkgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeT0xMF0ge251bWJlcn0gRnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyLCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgaW50ZXJhY3Rpb24gbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGJlIHByZXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0ID0gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0IDogdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFzIHRoaXMgZnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZCBtb3JlIG9mdGVuLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSA9IG9wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW91c2UgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9XG4gICAgICovXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IGRhdGEgb2JqZWN0IHRvIGhhbmRsZSBhbGwgdGhlIGV2ZW50IHRyYWNraW5nL2Rpc3BhdGNoaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5ldmVudERhdGEgPSB7XG4gICAgICAgIHN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgIGRhdGE6IHRoaXMubW91c2UsXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGxpdHRsZSBpbnRlcmFjdGl2ZURhdGEgcG9vbCAhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YVtdfVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBlbGVtZW50IHRvIGJpbmQgdG8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhhdmUgZXZlbnRzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGRvbSBlbGVtZW50P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcblxuICAgIC8vdGhpcyB3aWxsIG1ha2UgaXQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGJpbmQgYWxsIHRoZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VVcCA9IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IHRoaXMucHJvY2Vzc01vdXNlVXAuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IHRoaXMucHJvY2Vzc01vdXNlRG93bi5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gdGhpcy5wcm9jZXNzTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU91dCA9IHRoaXMub25Nb3VzZU91dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gdGhpcy5vblRvdWNoU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gdGhpcy5wcm9jZXNzVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoRW5kID0gdGhpcy5vblRvdWNoRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSB0aGlzLnByb2Nlc3NUb3VjaEVuZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IHRoaXMub25Ub3VjaE1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSB0aGlzLnByb2Nlc3NUb3VjaE1vdmUuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxhc3QgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNzcyBzdHlsZSBvZiB0aGUgY3Vyc29yIHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9ICdpbmhlcml0JztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNhY2hlZCB2YXJcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcblxuICAgIHRoaXMuc2V0VGFyZ2V0RWxlbWVudCh0aGlzLnJlbmRlcmVyLnZpZXcsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbik7XG59XG5cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UvdG91Y2ggZXZlbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZVxuICogb3RoZXIgRE9NIGVsZW1lbnRzIG9uIHRvcCBvZiB0aGUgcmVuZGVyZXJzIENhbnZhcyBlbGVtZW50LiBXaXRoIHRoaXMgeW91J2xsIGJlIGJhbGUgdG8gZGVsZXRlZ2F0ZVxuICogYW5vdGhlciBET00gZWxlbWVudCB0byByZWNlaXZlIHRob3NlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9IHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUSGUgcmVzb2x1dGlvbiBvZiB0aGUgbmV3IGVsZW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBjYW52YXMpLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXRUYXJnZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJlc29sdXRpb24pXG57XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgdGhlIERPTSBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAgICB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgICB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICAgICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICAgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgICAgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgICAgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgdGhlIERPTSBldmVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICcnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzLlxuICogSW52b2tlZCBieSBhIHRocm90dGxlZCB0aWNrZXIgdXBkYXRlIGZyb21cbiAqIHtAbGluayBQSVhJLnRpY2tlci5zaGFyZWR9LlxuICpcbiAqIEBwYXJhbSBkZWx0YVRpbWUge251bWJlcn1cbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHRoaXMuX2RlbHRhVGltZSArPSBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZGVsdGFUaW1lIDwgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWx0YVRpbWUgPSAwO1xuXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBtb3ZlIHRoZSBtb3VzZSB0aGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gZGZvbmUgdXNpbmcgdGhlIG1vdXNlIG1vdmUhXG4gICAgaWYodGhpcy5kaWRNb3ZlKVxuICAgIHtcbiAgICAgICAgdGhpcy5kaWRNb3ZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ET1xufTtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgZGlzcGxheSBvYmplY3QgaW4gcXVlc3Rpb25cbiAqIEBwYXJhbSBldmVudFN0cmluZyB7c3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGUuZywgbW91c2Vkb3duKVxuICogQHBhcmFtIGV2ZW50RGF0YSB7b2JqZWN0fSB0aGUgZXZlbnQgZGF0YSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApXG57XG4gICAgaWYoIWV2ZW50RGF0YS5zdG9wcGVkKVxuICAgIHtcbiAgICAgICAgZXZlbnREYXRhLnRhcmdldCA9IGRpc3BsYXlPYmplY3Q7XG4gICAgICAgIGV2ZW50RGF0YS50eXBlID0gZXZlbnRTdHJpbmc7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5lbWl0KCBldmVudFN0cmluZywgZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10oIGV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXBzIHggYW5kIHkgY29vcmRzIGZyb20gYSBET00gb2JqZWN0IGFuZCBtYXBzIHRoZW0gY29ycmVjdGx5IHRvIHRoZSBwaXhpIHZpZXcuIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBwb2ludC5cbiAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgdGhlIERPTSBlbGVtZW50IGNvdWxkIGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCBhbnl3aGVyZSBvbiB0aGUgc2NyZWVuLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW5cbiAqIEBwYXJhbSAge251bWJlcn0geCAgICAgdGhlIHggY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICogQHBhcmFtICB7bnVtYmVyfSB5ICAgICB0aGUgeSBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUubWFwUG9zaXRpb25Ub1BvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgeCwgeSApXG57XG4gICAgdmFyIHJlY3QgPSB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBwb2ludC54ID0gKCAoIHggLSByZWN0LmxlZnQgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC53aWR0aCAgLyByZWN0LndpZHRoICApICkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgcG9pbnQueSA9ICggKCB5IC0gcmVjdC50b3AgICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuaGVpZ2h0IC8gcmVjdC5oZWlnaHQgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVzIGEgbmVhdCB3YXkgb2YgY3Jhd2xpbmcgdGhyb3VnaCB0aGUgc2NlbmUgZ3JhcGggYW5kIHJ1bm5pbmcgYSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gYWxsIGludGVyYWN0aXZlIG9iamVjdHMgaXQgZmluZHMuXG4gKiBJdCB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIGhpdCB0ZXN0aW5nIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlIGhpdCBhY3Jvc3MgaW4gdGhlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IGlzIHRlc3RlZCBmb3IgY29sbGlzaW9uXG4gKiBAcGFyYW0gIHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IGRpc3BsYXlPYmplY3QgdGhlIGRpc3BsYXlPYmplY3QgdGhhdCB3aWxsIGJlIGhpdCB0ZXN0IChyZWN1cmNzaXZseSBjcmF3bHMgaXRzIGNoaWxkcmVuKVxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBpbnRlcmFjdGl2ZSBvYmplY3QuIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBoaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtib29sZWFufSBoaXRUZXN0IHRoaXMgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3RzIGluc2lkZSBzaG91bGQgYmUgaGl0IHRlc3QgYWdhaW5zdCB0aGUgcG9pbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiB0aGUgZGlzcGxheU9iamVjdCBoaXQgdGhlIHBvaW50XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0ludGVyYWN0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBkaXNwbGF5T2JqZWN0LCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZSlcbntcbiAgICBpZighZGlzcGxheU9iamVjdCB8fCAhZGlzcGxheU9iamVjdC52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRvb2sgYSBsaXR0bGUgd2hpbGUgdG8gcmV3b3JrIHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5ISBCdXQgbm93IGl0IGlzIGRvbmUgYW5kIG5pY2UgYW5kIG9wdGltaXNlZC4gXl9eXG4gICAgLy8gXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdyBsb29wIHRocm91Z2ggYWxsIG9iamVjdHMgYW5kIHRoZW4gb25seSBoaXQgdGVzdCB0aGUgb2JqZWN0cyBpdCBIQVMgdG8sIG5vdCBhbGwgb2YgdGhlbS4gTVVDSCBmYXN0ZXIuLlxuICAgIC8vIEFuIG9iamVjdCB3aWxsIGJlIGhpdCB0ZXN0IGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICAvLyBcbiAgICAvLyAxOiBJdCBpcyBpbnRlcmFjdGl2ZS5cbiAgICAvLyAyOiBJdCBiZWxvbmdzIHRvIGEgcGFyZW50IHRoYXQgaXMgaW50ZXJhY3RpdmUgQU5EIG9uZSBvZiB0aGUgcGFyZW50cyBjaGlsZHJlbiBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIC8vIFxuICAgIC8vIEFzIGFub3RoZXIgbGl0dGxlIG9wdGltaXNhdGlvbiBvbmNlIGFuIGludGVyYWN0aXZlIG9iamVjdCBoYXMgYmVlbiBoaXQgd2UgY2FuIGNhcnJ5IG9uIHRocm91Z2ggdGhlIHNjZW5lZ3JhcGgsIGJ1dCB3ZSBrbm93IHRoYXQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGhpdHMhIFNvIHdlIGNhbiBhdm9pZCBleHRyYSBoaXQgdGVzdHNcbiAgICAvLyBBIGZpbmFsIG9wdGltaXNhdGlvbiBpcyB0aGF0IGFuIG9iamVjdCBpcyBub3QgaGl0IHRlc3QgZGlyZWN0bHkgaWYgYSBjaGlsZCBoYXMgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICBcbiAgICB2YXIgaGl0ID0gZmFsc2UsXG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gaW50ZXJhY3RpdmUgPSBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlIHx8IGludGVyYWN0aXZlO1xuXG4gICAgLy8gaWYgdGhlIGRpc3BsYXlvYmplY3QgaGFzIGEgaGl0QXJlYSwgdGhlbiBpdCBkb2VzIG5vdCBuZWVkIHRvIGhpdFRlc3QgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAqKiBGUkVFIFRJUCAqKiEgSWYgYW4gb2JqZWN0IGlzIG5vdCBpbnRlcmFjdHRpdmUgb3IgaGFzIG5vIGJ1dHRvbnMgaW4gaXQgKHN1Y2ggYXMgYSBnYW1lIHNjZW5lISkgc2V0IGludGVyYWN0aXZlQ2hpbGRyZW4gdG8gZmFsc2UgZm9yIHRoYXQgZGlzcGxheU9iamVjdC5cbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgcGl4aSB0byBjb21wbGV0bHkgaWdub3JlIGFuZCBieXBhc3MgY2hlY2tpbmcgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmVDaGlsZHJlbilcbiAgICB7ICAgICAgIFxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aC0xOyBpID49IDA7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGltZSB0byBnZXQgcmVjdXJzaXZlLi4gaWYgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpZiBzb210aGluZyBpcyBoaXQuLlxuICAgICAgICAgICAgaWYoIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHBvaW50LCBjaGlsZHJlbltpXSwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmVQYXJlbnQpIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55IG1vcmUgb2JqZWN0cyBpbiB0aGlzIGNvbnRhaW5lciBhcyB3ZSB3ZSBub3cga25vdyB0aGUgcGFyZW50IGhhcyBiZWVuIGhpdFxuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGludGVyYWN0aXZlICwgdGhhdCBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGl0IHdhcyBhY3R1YWxseSBpbnRlcmFjdGl2ZSBhbmQgbm90IGp1c3QgdGhlIGNoaWxkIG9mIGFuIGludGVyYWN0aXZlIG9iamVjdC4gXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnl0aGluZyBlbHNlLiBXZSBzdGlsbCBuZWVkIHRvIHJ1biB0aHJvdWdoIGFsbCBvYmplY3RzLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBoaXQgdGVzdHMuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uaW50ZXJhY3RpdmUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoaXRUZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm8gcG9pbnQgcnVubmluZyB0aGlzIGlmIHRoZSBpdGVtIGlzIG5vdCBpbnRlcmFjdGl2ZSBvciBkb2VzIG5vdCBoYXZlIGFuIGludGVyYWN0aXZlIHBhcmVudC5cbiAgICBpZihpbnRlcmFjdGl2ZSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBoaXQgdGVzdGluZyAoYXMgaW4gd2UgaGF2ZSBubyBoaXQgYW55IG9iamVjdHMgeWV0KVxuICAgICAgICAvLyBXZSBhbHNvIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGl0IHRlc3RpbmcgaWYgb25jZSBvZiB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4gaGFzIGFscmVhZHkgYmVlbiBoaXQhXG4gICAgICAgIGlmKGhpdFRlc3QgJiYgIWhpdClcbiAgICAgICAgeyAgXG4gICAgICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0aGlzLl90ZW1wUG9pbnQpO1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuaGl0QXJlYS5jb250YWlucyggdGhpcy5fdGVtcFBvaW50LngsIHRoaXMuX3RlbXBQb2ludC55ICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnVuYyhkaXNwbGF5T2JqZWN0LCBoaXQpOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIFxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyBwcmVzc2VkIGRvd25cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZURvd24sIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIGRvd24gY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VEb3duID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuICAgIFxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3RbIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bicgXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGRvd24nIDogJ21vdXNlZG93bicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcmVsZWFzZWRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VVcCwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgdXAgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlVXAgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG4gICAgdmFyIGlzRG93biA9ICBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXAnIDogJ21vdXNldXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRjbGljaycgOiAnY2xpY2snLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cG91dHNpZGUnIDogJ21vdXNldXBvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiB0aGUgbW91c2UgbW92aW5nXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmRpZE1vdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU1vdmUsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE8gQlVHIGZvciBwYXJlbnRzIGluZXJhY3RpdmUgb2JqZWN0IChib3JkZXIgb3JkZXIgaXNzdWUpXG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2Vtb3ZlJywgdGhpcy5ldmVudERhdGEpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dChkaXNwbGF5T2JqZWN0LCBoaXQpO1xufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYmVpbmcgbW92ZWQgb3V0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICAvLyBUT0RPIG9wdGltaXplIGJ5IG5vdCBjaGVjayBFVkVSWSBUSU1FISBtYXliZSBoYWxmIGFzIG9mdGVuPyAvL1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgZmFsc2UgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG92ZXIvb3V0IGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgaWYoIWRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5T2JqZWN0LmJ1dHRvbk1vZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gZGlzcGxheU9iamVjdC5kZWZhdWx0Q3Vyc29yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgdGhpcy5ldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgc3RhcnRlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBzdGFydGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG4gICAgICAgIC8vVE9ETyBQT09MXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaFN0YXJ0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoc3RhcnQnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGVuZHMgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggZW5kaW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIC8vVE9ETyB0aGlzIHNob3VsZCBiZSBwYXNzZWQgYWxvbmcuLiBubyBzZXRcbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hFbmQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgZW5kIG9mIGEgdG91Y2ggYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoRW5kID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0YXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgbW92ZWQgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIG1vdmluZyBhY3Jvc3MgdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaE1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaGl0ID0gaGl0O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNobW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogR3JhYnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaEV2ZW50IHtFdmVudERhdGF9IFRoZSB0b3VjaCBldmVudCB3ZSBuZWVkIHRvIHBhaXIgd2l0aCBhbiBpbnRlcmFjdGlvbkRhdGEgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRUb3VjaERhdGEgPSBmdW5jdGlvbiAodG91Y2hFdmVudClcbntcbiAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnBvcCgpO1xuXG4gICAgaWYoIXRvdWNoRGF0YSlcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcbiAgICB9XG5cbiAgICB0b3VjaERhdGEuaWRlbnRpZmllciA9IHRvdWNoRXZlbnQuaWRlbnRpZmllcjtcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdG91Y2hEYXRhLmdsb2JhbCwgdG91Y2hFdmVudC5jbGllbnRYLCB0b3VjaEV2ZW50LmNsaWVudFkgKTtcblxuICAgIGlmKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC54ID0gdG91Y2hEYXRhLmdsb2JhbC54IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnkgPSB0b3VjaERhdGEuZ2xvYmFsLnkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgfVxuXG4gICAgdG91Y2hFdmVudC5nbG9iYWxYID0gdG91Y2hEYXRhLmdsb2JhbC54O1xuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWSA9IHRvdWNoRGF0YS5nbG9iYWwueTtcblxuICAgIHJldHVybiB0b3VjaERhdGE7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hEYXRhIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX0gVGhlIHRvdWNoIGRhdGEgb2JqZWN0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5Ub3VjaERhdGEgPSBmdW5jdGlvbiAoIHRvdWNoRGF0YSApXG57XG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnB1c2goIHRvdWNoRGF0YSApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgaW50ZXJhY3Rpb24gbWFuYWdlclxuICpcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMubW91c2UgPSBudWxsO1xuXG4gICAgdGhpcy5ldmVudERhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZVVwID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gbnVsbDtcblxuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaEVuZCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMuX3RlbXBQb2ludCA9IG51bGw7XG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGludGVyYWN0aW9ucyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSW50ZXJhY3Rpb25EYXRhOiAgICByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpLFxuICAgIEludGVyYWN0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9JbnRlcmFjdGlvbk1hbmFnZXInKSxcbiAgICBpbnRlcmFjdGl2ZVRhcmdldDogIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxufTtcbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgaW50ZXJhY3RpdmUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmludGVyYWN0aW9uLmludGVyYWN0aXZlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBpbnRlcmFjdGl2ZVRhcmdldCA9IHtcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGJ1dHRvbk1vZGU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmVDaGlsZHJlbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGRlZmF1bHRDdXJzb3I6ICdwb2ludGVyJyxcblxuICAgIC8vIHNvbWUgaW50ZXJuYWwgY2hlY2tzLi5cblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb3ZlcjogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90b3VjaERvd246IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyYWN0aXZlVGFyZ2V0O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuLi9leHRyYXMnKSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5cbmZ1bmN0aW9uIHBhcnNlKHJlc291cmNlLCB0ZXh0dXJlKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgaW5mbyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXTtcbiAgICB2YXIgY29tbW9uID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XG5cbiAgICBkYXRhLmZvbnQgPSBpbmZvLmdldEF0dHJpYnV0ZSgnZmFjZScpO1xuICAgIGRhdGEuc2l6ZSA9IHBhcnNlSW50KGluZm8uZ2V0QXR0cmlidXRlKCdzaXplJyksIDEwKTtcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBwYXJzZUludChjb21tb24uZ2V0QXR0cmlidXRlKCdsaW5lSGVpZ2h0JyksIDEwKTtcbiAgICBkYXRhLmNoYXJzID0ge307XG5cbiAgICAvL3BhcnNlIGxldHRlcnNcbiAgICB2YXIgbGV0dGVycyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NoYXInKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdpZCcpLCAxMCk7XG5cbiAgICAgICAgdmFyIHRleHR1cmVSZWN0ID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3gnKSwgMTApICsgdGV4dHVyZS5mcmFtZS54LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3knKSwgMTApICsgdGV4dHVyZS5mcmFtZS55LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSwgMTApXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICB4T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneG9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB5T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneW9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB4QWR2YW5jZTogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hhZHZhbmNlJyksIDEwKSxcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9LFxuICAgICAgICAgICAgdGV4dHVyZTogbmV3IGNvcmUuVGV4dHVyZSh0ZXh0dXJlLmJhc2VUZXh0dXJlLCB0ZXh0dXJlUmVjdClcblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vcGFyc2Uga2VybmluZ3NcbiAgICB2YXIga2VybmluZ3MgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXJuaW5nJyk7XG4gICAgZm9yIChpID0gMDsgaSA8IGtlcm5pbmdzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdmaXJzdCcpLCAxMCk7XG4gICAgICAgIHZhciBzZWNvbmQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ3NlY29uZCcpLCAxMCk7XG4gICAgICAgIHZhciBhbW91bnQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2Ftb3VudCcpLCAxMCk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tzZWNvbmRdLmtlcm5pbmdbZmlyc3RdID0gYW1vdW50O1xuICAgIH1cblxuICAgIHJlc291cmNlLmJpdG1hcEZvbnQgPSBkYXRhO1xuXG4gICAgLy8gSSdtIGxlYXZpbmcgdGhpcyBhcyBhIHRlbXBvcmFyeSBmaXggc28gd2UgY2FuIHRlc3QgdGhlIGJpdG1hcCBmb250cyBpbiB2M1xuICAgIC8vIGJ1dCBpdCdzIHZlcnkgbGlrZWx5IHRvIGNoYW5nZVxuICAgIGV4dHJhcy5CaXRtYXBUZXh0LmZvbnRzW2RhdGEuZm9udF0gPSBkYXRhO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhIG9yIG5vdCB4bWwgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzWG1sKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBpZiBub3QgYml0bWFwIGZvbnQgZGF0YSwgdXNpbmcgc29tZSBzaWxseSBkdWNrLXR5cGluZ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF0uZ2V0QXR0cmlidXRlKCdmYWNlJykgPT09IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4bWxVcmwgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsKTtcblxuICAgICAgICBpZiAoeG1sVXJsID09PSAnLicpIHtcbiAgICAgICAgICAgIHhtbFVybCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmFzZVVybCAmJiB4bWxVcmwpIHtcbiAgICAgICAgICAgIC8vIGlmIGJhc2V1cmwgaGFzIGEgdHJhaWxpbmcgc2xhc2ggdGhlbiBhZGQgb25lIHRvIHhtbFVybCBzbyB0aGUgcmVwbGFjZSB3b3JrcyBiZWxvd1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVVybC5jaGFyQXQodGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEpID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYmFzZVVybCBmcm9tIHhtbFVybFxuICAgICAgICAgICAgeG1sVXJsID0geG1sVXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiB4bWxVcmwgbm93LCBpdCBuZWVkcyBhIHRyYWlsaW5nIHNsYXNoLiBFbnN1cmUgdGhhdCBpdCBkb2VzIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZW1wdHkuXG4gICAgICAgIGlmICh4bWxVcmwgJiYgeG1sVXJsLmNoYXJBdCh4bWxVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4dHVyZVVybCA9IHhtbFVybCArIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKVswXS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKTtcbiAgICAgICAgaWYgKGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKSB7XG4gICAgICAgICAgICAvL3JldXNlIGV4aXN0aW5nIHRleHR1cmVcbiAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBsb2FkIHRoZSB0ZXh0dXJlIGZvciB0aGUgZm9udFxuICAgICAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCB0ZXh0dXJlVXJsLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCByZXMudGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGxvYWRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmxvYWRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTG9hZGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlcicpLFxuXG4gICAgLy8gcGFyc2Vyc1xuICAgIGJpdG1hcEZvbnRQYXJzZXI6ICAgcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXI6ICByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgdGV4dHVyZVBhcnNlcjogICAgICByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBSZXNvdXJjZTogICAgICAgICAgIHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlXG59O1xuIiwidmFyIFJlc291cmNlTG9hZGVyID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJyksXG4gICAgdGV4dHVyZVBhcnNlciA9IHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyID0gcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIGJpdG1hcEZvbnRQYXJzZXIgPSByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKTtcblxuLyoqXG4gKlxuICogVGhlIG5ldyBsb2FkZXIsIGV4dGVuZHMgUmVzb3VyY2UgTG9hZGVyIGJ5IENoYWQgRW5nbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2VuZ2xlcmNqL3Jlc291cmNlLWxvYWRlclxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbG9hZGVyID0gUElYSS5sb2FkZXI7IC8vIHBpeGkgZXhwb3NlcyBhIHByZW1hZGUgaW5zdGFuY2UgZm9yIHlvdSB0byB1c2UuXG4gKiAvL29yXG4gKiB2YXIgbG9hZGVyID0gbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIoKTsgLy8geW91IGNhbiBhbHNvIGNyZWF0ZSB5b3VyIG93biBpZiB5b3Ugd2FudFxuICpcbiAqIGxvYWRlci5hZGQoJ2J1bm55JyxcImRhdGEvYnVubnkucG5nXCIpO1xuICpcbiAqIGxvYWRlci5vbmNlKCdjb21wbGV0ZScsb25Bc3NldHNMb2FkZWQpO1xuICpcbiAqIGxvYWRlci5sb2FkKCk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuUmVzb3VyY2VMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmxvYWRlcnNcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpXG57XG4gICAgUmVzb3VyY2VMb2FkZXIuY2FsbCh0aGlzLCBiYXNlVXJsLCBjb25jdXJyZW5jeSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IExvYWRlci5fcGl4aU1pZGRsZXdhcmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy51c2UoTG9hZGVyLl9waXhpTWlkZGxld2FyZVtpXSgpKTtcbiAgICB9XG59XG5cbkxvYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuTG9hZGVyLl9waXhpTWlkZGxld2FyZSA9IFtcbiAgICAvLyBwYXJzZSBhbnkgYmxvYiBpbnRvIG1vcmUgdXNhYmxlIG9iamVjdHMgKGUuZy4gSW1hZ2UpXG4gICAgUmVzb3VyY2VMb2FkZXIubWlkZGxld2FyZS5wYXJzaW5nLmJsb2IsXG4gICAgLy8gcGFyc2UgYW55IEltYWdlIG9iamVjdHMgaW50byB0ZXh0dXJlc1xuICAgIHRleHR1cmVQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIHNwcml0ZXNoZWV0UGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBiaXRtYXBGb250UGFyc2VyXG5dO1xuXG5Mb2FkZXIuYWRkUGl4aU1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLnB1c2goZm4pO1xufTtcblxuLy8gQWRkIGN1c3RvbSBleHRlbnRpb25zXG52YXIgUmVzb3VyY2UgPSBSZXNvdXJjZUxvYWRlci5SZXNvdXJjZTtcblxuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSgnZm50JywgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpO1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSwgaXRzIG5vdCBqc29uLCBvciBpdCBpc24ndCBzcHJpdGVzaGVldCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNKc29uIHx8ICFyZXNvdXJjZS5kYXRhLmZyYW1lcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByb3V0ZSA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKSk7XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybCggcmVzb3VyY2UudXJsICk7XG5cbiAgICAgICAgLy8gbG9hZCB0aGUgaW1hZ2UgZm9yIHRoaXMgc2hlZXRcbiAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCByb3V0ZSArICcvJyArIHJlc291cmNlLmRhdGEubWV0YS5pbWFnZSwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzID0ge307XG5cbiAgICAgICAgICAgIHZhciBmcmFtZXMgPSByZXNvdXJjZS5kYXRhLmZyYW1lcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmcmFtZXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBmcmFtZXNbaV0uZnJhbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVjdClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaW0gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC5oLCByZWN0LncpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC53LCByZWN0LmgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS50cmltbWVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmltID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnggLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnkgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLncgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLmggLyByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsaXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQhXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBzaXplLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUueSAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoIC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0IC89IHJlc29sdXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXNbaV0gPSBuZXcgY29yZS5UZXh0dXJlKHJlcy50ZXh0dXJlLmJhc2VUZXh0dXJlLCBzaXplLCBzaXplLmNsb25lKCksIHRyaW0sIGZyYW1lc1tpXS5yb3RhdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbaV0gPSByZXNvdXJjZS50ZXh0dXJlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZSBpZiB0aGUgZGF0YSBpcyBhbiBJbWFnZSBvYmplY3RcbiAgICAgICAgaWYgKHJlc291cmNlLmRhdGEgJiYgcmVzb3VyY2UuaXNJbWFnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGJhc2VUZXh0dXJlID0gbmV3IGNvcmUuQmFzZVRleHR1cmUocmVzb3VyY2UuZGF0YSwgbnVsbCwgY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwocmVzb3VyY2UudXJsKSk7XG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IHJlc291cmNlLnVybDtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmUgPSBuZXcgY29yZS5UZXh0dXJlKGJhc2VUZXh0dXJlKTtcbiAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1Y250aW9uc1xuICAgICAgICAgICAgY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSBiYXNlVGV4dHVyZTtcbiAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSByZXNvdXJjZS50ZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICB0ZW1wUG9seWdvbiA9IG5ldyBjb3JlLlBvbHlnb24oKTtcblxuLyoqXG4gKiBCYXNlIG1lc2ggY2xhc3NcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRvIHVzZVxuICogQHBhcmFtIFt2ZXJ0aWNlc10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdmVydGljZXNcbiAqIEBwYXJhbSBbdXZzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB1dnNcbiAqIEBwYXJhbSBbaW5kaWNlc10ge1VpbnQxNkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBpbmRpY2VzXG4gKiBAcGFyYW0gW2RyYXdNb2RlXSB7bnVtYmVyfSB0aGUgZHJhd01vZGUsIGNhbiBiZSBhbnkgb2YgdGhlIE1lc2guRFJBV19NT0RFUyBjb25zdHNcbiAqL1xuZnVuY3Rpb24gTWVzaCh0ZXh0dXJlLCB2ZXJ0aWNlcywgdXZzLCBpbmRpY2VzLCBkcmF3TW9kZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gdXZzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEsIDAsXG4gICAgICAgIDEsIDEsXG4gICAgICAgIDAsIDFdKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEwMCwgMCxcbiAgICAgICAgMTAwLCAxMDAsXG4gICAgICAgIDAsIDEwMF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICAvLyAgVE9ETyBhdXRvIGdlbmVyYXRlIHRoaXMgYmFzZWQgb24gZHJhdyBtb2RlIVxuICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXMgfHwgbmV3IFVpbnQxNkFycmF5KFswLCAxLCAzLCAyXSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBNZXNoIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gU2V0IHRvIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVtb3ZlIGFueSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRyaWFuZ2xlcyBpbiBjYW52YXMgbW9kZSBhcmUgYXV0b21hdGljYWxseSBhbnRpYWxpYXNlZCwgdXNlIHRoaXMgdmFsdWUgdG8gZm9yY2UgdHJpYW5nbGVzIHRvIG92ZXJsYXAgYSBiaXQgd2l0aCBlYWNoIG90aGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2F5IHRoZSBNZXNoIHNob3VsZCBiZSBkcmF3biwgY2FuIGJlIGFueSBvZiB0aGUge0BsaW5rIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVN9IGNvbnN0c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuZHJhd01vZGUgPSBkcmF3TW9kZSB8fCBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSDtcblxuICAgIC8vIHJ1biB0ZXh0dXJlIHNldHRlcjtcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBtZXNoIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5NZXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2g7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2g7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc2gucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkubWVzaC5NZXNoI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5tZXNoKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLm1lc2gucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4IHwgMCwgdHJhbnNmb3JtLnR5IHwgMCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHgsIHRyYW5zZm9ybS50eSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoKGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMoY29udGV4dCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIFRyaWFuZ2xlIE1lc2ggbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2ggPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoIC8gMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkgKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgsIChpbmRleCArIDIpLCAoaW5kZXggKyA0KSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIHRyaWFuZ2xlIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDMpXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXgwID0gaW5kaWNlc1tpXSAqIDIsIGluZGV4MSA9IGluZGljZXNbaSArIDFdICogMiwgaW5kZXgyID0gaW5kaWNlc1tpICsgMl0gKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4Mik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyBvbmUgb2YgdGhlIHRyaWFuZ2xlcyB0aGF0IGZvcm0gdGhpcyBNZXNoXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdmVydGljZXMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHZlcnRpY2VzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gdXZzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB1dnMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSBpbmRleDAge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDEge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgyIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlID0gZnVuY3Rpb24gKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpXG57XG4gICAgdmFyIHRleHR1cmVTb3VyY2UgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZTtcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aDtcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXgwXSwgeDEgPSB2ZXJ0aWNlc1tpbmRleDFdLCB4MiA9IHZlcnRpY2VzW2luZGV4Ml07XG4gICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgwICsgMV0sIHkxID0gdmVydGljZXNbaW5kZXgxICsgMV0sIHkyID0gdmVydGljZXNbaW5kZXgyICsgMV07XG5cbiAgICB2YXIgdTAgPSB1dnNbaW5kZXgwXSAqIHRleHR1cmVXaWR0aCwgdTEgPSB1dnNbaW5kZXgxXSAqIHRleHR1cmVXaWR0aCwgdTIgPSB1dnNbaW5kZXgyXSAqIHRleHR1cmVXaWR0aDtcbiAgICB2YXIgdjAgPSB1dnNbaW5kZXgwICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MSA9IHV2c1tpbmRleDEgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYyID0gdXZzW2luZGV4MiArIDFdICogdGV4dHVyZUhlaWdodDtcblxuICAgIGlmICh0aGlzLmNhbnZhc1BhZGRpbmcgPiAwKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmdYID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgcGFkZGluZ1kgPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciBjZW50ZXJYID0gKHgwICsgeDEgKyB4MikgLyAzO1xuICAgICAgICB2YXIgY2VudGVyWSA9ICh5MCArIHkxICsgeTIpIC8gMztcblxuICAgICAgICB2YXIgbm9ybVggPSB4MCAtIGNlbnRlclg7XG4gICAgICAgIHZhciBub3JtWSA9IHkwIC0gY2VudGVyWTtcblxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgwID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkwID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgLy9cblxuICAgICAgICBub3JtWCA9IHgxIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MSAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgxID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkxID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgbm9ybVggPSB4MiAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTIgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MiA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MiA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cblxuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGNvbnRleHQuY2xpcCgpO1xuXG4gICAgLy8gQ29tcHV0ZSBtYXRyaXggdHJhbnNmb3JtXG4gICAgdmFyIGRlbHRhID0gICh1MCAqIHYxKSAgICAgICsgKHYwICogdTIpICAgICAgKyAodTEgKiB2MikgICAgICAtICh2MSAqIHUyKSAgICAgIC0gKHYwICogdTEpICAgICAgLSAodTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQSA9ICh4MCAqIHYxKSAgICAgICsgKHYwICogeDIpICAgICAgKyAoeDEgKiB2MikgICAgICAtICh2MSAqIHgyKSAgICAgIC0gKHYwICogeDEpICAgICAgLSAoeDAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQiA9ICh1MCAqIHgxKSAgICAgICsgKHgwICogdTIpICAgICAgKyAodTEgKiB4MikgICAgICAtICh4MSAqIHUyKSAgICAgIC0gKHgwICogdTEpICAgICAgLSAodTAgKiB4Mik7XG4gICAgdmFyIGRlbHRhQyA9ICh1MCAqIHYxICogeDIpICsgKHYwICogeDEgKiB1MikgKyAoeDAgKiB1MSAqIHYyKSAtICh4MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB4MikgLSAodTAgKiB4MSAqIHYyKTtcbiAgICB2YXIgZGVsdGFEID0gKHkwICogdjEpICAgICAgKyAodjAgKiB5MikgICAgICArICh5MSAqIHYyKSAgICAgIC0gKHYxICogeTIpICAgICAgLSAodjAgKiB5MSkgICAgICAtICh5MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFFID0gKHUwICogeTEpICAgICAgKyAoeTAgKiB1MikgICAgICArICh1MSAqIHkyKSAgICAgIC0gKHkxICogdTIpICAgICAgLSAoeTAgKiB1MSkgICAgICAtICh1MCAqIHkyKTtcbiAgICB2YXIgZGVsdGFGID0gKHUwICogdjEgKiB5MikgKyAodjAgKiB5MSAqIHUyKSArICh5MCAqIHUxICogdjIpIC0gKHkwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHkyKSAtICh1MCAqIHkxICogdjIpO1xuXG4gICAgY29udGV4dC50cmFuc2Zvcm0oZGVsdGFBIC8gZGVsdGEsIGRlbHRhRCAvIGRlbHRhLFxuICAgICAgICBkZWx0YUIgLyBkZWx0YSwgZGVsdGFFIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQyAvIGRlbHRhLCBkZWx0YUYgLyBkZWx0YSk7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlU291cmNlLCAwLCAwKTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBmbGF0IE1lc2hcbiAqXG4gKiBAcGFyYW0gTWVzaCB7UElYSS5tZXNoLk1lc2h9IFRoZSBNZXNoIHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUucmVuZGVyTWVzaEZsYXQgPSBmdW5jdGlvbiAoTWVzaClcbntcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICB2YXIgdmVydGljZXMgPSBNZXNoLnZlcnRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aC8yO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgZm9yICh2YXIgaT0xOyBpIDwgbGVuZ3RoLTI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkqMjtcblxuICAgICAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleF0sICAgeDEgPSB2ZXJ0aWNlc1tpbmRleCsyXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleCs0XTtcbiAgICAgICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgrMV0sIHkxID0gdmVydGljZXNbaW5kZXgrM10sIHkyID0gdmVydGljZXNbaW5kZXgrNV07XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVwZGF0ZUZyYW1lID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBtZXNoIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5NZXNoLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICghdGhpcy5fY3VycmVudEJvdW5kcykge1xuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1pblkgPSBJbmZpbml0eTtcblxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IG47IGkgKz0gMikge1xuICAgICAgICAgICAgdmFyIHJhd1ggPSB2ZXJ0aWNlc1tpXSwgcmF3WSA9IHZlcnRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciB4ID0gKGEgKiByYXdYKSArIChjICogcmF3WSkgKyB0eDtcbiAgICAgICAgICAgIHZhciB5ID0gKGQgKiByYXdZKSArIChiICogcmF3WCkgKyB0eTtcblxuICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcblxuICAgICAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG4gICAgICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5YID09PSAtSW5maW5pdHkgfHwgbWF4WSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIG1lc2guIFdvcmtzIG9ubHkgZm9yIFRSSUFOR0xFX01FU0hcbiAqXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4gKi9cbk1lc2gucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKSB7XG4gICAgaWYgKCF0aGlzLmdldEJvdW5kcygpLmNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgcG9pbnRzID0gdGVtcFBvbHlnb24ucG9pbnRzO1xuICAgIHZhciBpLCBsZW47XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUykge1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICAgICAgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgLy9UT0RPOiBpbmxpbmUgdGhpcy5cbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Mykge1xuICAgICAgICAgICAgdmFyIGluZDAgPSBpbmRpY2VzW2ldKjIsIGluZDEgPSBpbmRpY2VzW2krMV0qMiwgaW5kMiA9IGluZGljZXNbaSsyXSoyO1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaW5kMF07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpbmQwKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaW5kMV07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpbmQxKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaW5kMl07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpbmQyKzFdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Nikge1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaSsyXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2krM107XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpKzRdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaSs1XTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEaWZmZXJlbnQgZHJhd2luZyBidWZmZXIgbW9kZXMgc3VwcG9ydGVkXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSFxuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gKi9cbk1lc2guRFJBV19NT0RFUyA9IHtcbiAgICBUUklBTkdMRV9NRVNIOiAwLFxuICAgIFRSSUFOR0xFUzogMVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG5cbi8qKlxuICogVGhlIFBsYW5lIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIFBsYW5lID0gbmV3IFBJWEkuUGxhbmUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgUGxhbmUuXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNYIC0gVGhlIG51bWJlciBveCB4IHNlZ21lbnRzXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNZIC0gVGhlIG51bWJlciBvZiB5IHNlZ21lbnRzXG4gKlxuICovXG5mdW5jdGlvbiBQbGFuZSh0ZXh0dXJlLCBzZWdtZW50c1gsIHNlZ21lbnRzWSlcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgUGxhbmUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWdtZW50c1ggPSAgc2VnbWVudHNYIHx8IDEwO1xuICAgIHRoaXMuc2VnbWVudHNZID0gc2VnbWVudHNZIHx8IDEwO1xuXG4gICAgdGhpcy5kcmF3TW9kZSA9IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVM7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUGxhbmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKTtcblBsYW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsYW5lO1xubW9kdWxlLmV4cG9ydHMgPSBQbGFuZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblBsYW5lLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciB0b3RhbCA9IHRoaXMuc2VnbWVudHNYICogdGhpcy5zZWdtZW50c1k7XG4gICAgdmFyIHZlcnRzID0gW107XG4gICAgdmFyIGNvbG9ycyA9IFtdO1xuICAgIHZhciB1dnMgPSBbXTtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuXG4gIC8vICB0ZXh0dXJlLndpZHRoID0gODAwIHRleHR1cmUud2lkdGggfHwgODAwO1xuIC8vICAgdGV4dHVyZS5oZWlnaHQgPSA4MDAvL3RleHR1cmUuaGVpZ2h0IHx8IDgwMDtcblxuICAgIHZhciBzZWdtZW50c1hTdWIgPSB0aGlzLnNlZ21lbnRzWCAtIDE7XG4gICAgdmFyIHNlZ21lbnRzWVN1YiA9IHRoaXMuc2VnbWVudHNZIC0gMTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB2YXIgc2l6ZVggPSB0ZXh0dXJlLndpZHRoIC8gc2VnbWVudHNYU3ViO1xuICAgIHZhciBzaXplWSA9IHRleHR1cmUuaGVpZ2h0IC8gc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcblxuICAgICAgICB2YXIgeCA9IChpICUgdGhpcy5zZWdtZW50c1gpO1xuICAgICAgICB2YXIgeSA9ICggKGkgLyB0aGlzLnNlZ21lbnRzWCApIHwgMCApO1xuXG5cbiAgICAgICAgdmVydHMucHVzaCgoeCAqIHNpemVYKSxcbiAgICAgICAgICAgICAgICAgICAoeSAqIHNpemVZKSk7XG5cbiAgICAgICAgLy8gdGhpcyB3b3JrcyBmb3IgcmVjdGFuZ3VsYXIgdGV4dHVyZXMuIFxuICAgICAgICB1dnMucHVzaCh0ZXh0dXJlLl91dnMueDAgKyAodGV4dHVyZS5fdXZzLngxIC0gdGV4dHVyZS5fdXZzLngwKSAqICh4IC8gKHRoaXMuc2VnbWVudHNYLTEpKSwgdGV4dHVyZS5fdXZzLnkwICsgKHRleHR1cmUuX3V2cy55My10ZXh0dXJlLl91dnMueTApICogKHkvICh0aGlzLnNlZ21lbnRzWS0xKSkpO1xuICAgICAgfVxuXG4gICAgLy8gIGNvbnNcblxuICAgIHZhciB0b3RhbFN1YiA9IHNlZ21lbnRzWFN1YiAqIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFN1YjsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHhwb3MgPSBpICUgc2VnbWVudHNYU3ViO1xuICAgICAgICB2YXIgeXBvcyA9IChpIC8gc2VnbWVudHNYU3ViICkgfCAwO1xuXG5cbiAgICAgICAgdmFyICB2YWx1ZSA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTIgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuICAgICAgICB2YXIgIHZhbHVlMyA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWU0ID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMyk7XG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZTIsIHZhbHVlNCwgdmFsdWUzKTtcbiAgICB9XG5cblxuICAgIC8vY29uc29sZS5sb2coaW5kaWNlcylcbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0cyk7XG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHV2cyk7XG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvbG9ycyk7XG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBsYW5lLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUGxhbmUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSByb3BlIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIHJvcGUgPSBuZXcgUElYSS5Sb3BlKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIHJvcGUuXG4gKiBAcGFyYW0ge1BJWEkuUG9pbnRbXX0gcG9pbnRzIC0gQW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuUG9pbnR9IG9iamVjdHMgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAqXG4gKi9cbmZ1bmN0aW9uIFJvcGUodGV4dHVyZSwgcG9pbnRzKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfSBBbiBhcnJheSBvZiBwb2ludHMgdGhhdCBkZXRlcm1pbmUgdGhlIHJvcGVcbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBvZiB2ZXJ0aWNlcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IFRoZSBXZWJHTCBVdnMgb2YgdGhlIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBjb21wb25lbnRzXG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSByb3BlIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICAgdGhpcy5yZWZyZXNoKCk7XG59XG5cblxuLy8gY29uc3RydWN0b3JcblJvcGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNZXNoLnByb3RvdHlwZSk7XG5Sb3BlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvcGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvcGU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5Sb3BlLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICAvLyBpZiB0b28gbGl0dGxlIHBvaW50cywgb3IgdGV4dHVyZSBoYXNuJ3QgZ290IFVWcyBzZXQgeWV0IGp1c3QgbW92ZSBvbi5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEgfHwgIXRoaXMuX3RleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cbiAgICB2YXIgdGV4dHVyZVV2cyA9IHRoaXMuX3RleHR1cmUuX3V2cztcbiAgICB2YXIgb2Zmc2V0ID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MCk7XG4gICAgdmFyIGZhY3RvciA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDIgLSB0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkyIC0gdGV4dHVyZVV2cy55MCk7XG5cbiAgICB1dnNbMF0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzFdID0gMCArIG9mZnNldC55O1xuICAgIHV2c1syXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgIGNvbG9yc1swXSA9IDE7XG4gICAgY29sb3JzWzFdID0gMTtcblxuICAgIGluZGljZXNbMF0gPSAwO1xuICAgIGluZGljZXNbMV0gPSAxO1xuXG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCBhbW91bnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcbiAgICAgICAgLy8gdGltZSB0byBkbyBzb21lIHNtYXJ0IGRyYXdpbmchXG4gICAgICAgIGFtb3VudCA9IGkgLyAodG90YWwtMSk7XG5cbiAgICAgICAgdXZzW2luZGV4XSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCsxXSA9IDAgKyBvZmZzZXQueTtcblxuICAgICAgICB1dnNbaW5kZXgrMl0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBjb2xvcnNbaW5kZXhdID0gMTtcbiAgICAgICAgY29sb3JzW2luZGV4KzFdID0gMTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGluZGV4O1xuICAgICAgICBpbmRpY2VzW2luZGV4ICsgMV0gPSBpbmRleCArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFJvcGUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9pbnQgPSBwb2ludHNbMF07XG4gICAgdmFyIG5leHRQb2ludDtcbiAgICB2YXIgcGVycFggPSAwO1xuICAgIHZhciBwZXJwWSA9IDA7XG5cbiAgICAvLyB0aGlzLmNvdW50IC09IDAuMjtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCByYXRpbywgcGVycExlbmd0aCwgbnVtO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG5cbiAgICAgICAgaWYgKGkgPCBwb2ludHMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50c1tpKzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwWSA9IC0obmV4dFBvaW50LnggLSBsYXN0UG9pbnQueCk7XG4gICAgICAgIHBlcnBYID0gbmV4dFBvaW50LnkgLSBsYXN0UG9pbnQueTtcblxuICAgICAgICByYXRpbyA9ICgxIC0gKGkgLyAodG90YWwtMSkpKSAqIDEwO1xuXG4gICAgICAgIGlmIChyYXRpbyA+IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhdGlvID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBMZW5ndGggPSBNYXRoLnNxcnQocGVycFggKiBwZXJwWCArIHBlcnBZICogcGVycFkpO1xuICAgICAgICBudW0gPSB0aGlzLl90ZXh0dXJlLmhlaWdodCAvIDI7IC8vKDIwICsgTWF0aC5hYnMoTWF0aC5zaW4oKGkgKyB0aGlzLmNvdW50KSAqIDAuMykgKiA1MCkgKSogcmF0aW87XG4gICAgICAgIHBlcnBYIC89IHBlcnBMZW5ndGg7XG4gICAgICAgIHBlcnBZIC89IHBlcnBMZW5ndGg7XG5cbiAgICAgICAgcGVycFggKj0gbnVtO1xuICAgICAgICBwZXJwWSAqPSBudW07XG5cbiAgICAgICAgdmVydGljZXNbaW5kZXhdID0gcG9pbnQueCArIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsxXSA9IHBvaW50LnkgKyBwZXJwWTtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMl0gPSBwb2ludC54IC0gcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzNdID0gcG9pbnQueSAtIHBlcnBZO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IHBvaW50O1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5tZXNoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1lc2g6ICAgICAgICAgICByZXF1aXJlKCcuL01lc2gnKSxcbiAgICBQbGFuZTogICAgICAgICAgIHJlcXVpcmUoJy4vUGxhbmUnKSxcbiAgICBSb3BlOiAgICAgICAgICAgcmVxdWlyZSgnLi9Sb3BlJyksXG4gICAgTWVzaFJlbmRlcmVyOiAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFJlbmRlcmVyJyksXG4gICAgTWVzaFNoYWRlcjogICAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFNoYWRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgTWVzaCA9IHJlcXVpcmUoJy4uL01lc2gnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBNZXNoUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL01lc2hSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDE1MDAwKTtcblxuICAgIC8vVE9ETyB0aGlzIGNvdWxkIGJlIGEgc2luZ2xlIGJ1ZmZlciBzaGFyZWQgYW1vbmdzdCBhbGwgcmVuZGVyZXJzIGFzIHdlIHJldXNlIHRoaXMgc2V0IHVwIGluIG1vc3QgcmVuZGVyZXJzXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCAxNTAwMDsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59XG5cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hSZW5kZXJlcjtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoJywgTWVzaFJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIGlmKCFtZXNoLl92ZXJ0ZXhCdWZmZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9pbml0V2ViR0wobWVzaCk7XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcixcbiAgICAgICAgZ2wgPSByZW5kZXJlci5nbCxcbiAgICAgICAgdGV4dHVyZSA9IG1lc2guX3RleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIHNoYWRlciA9IG1lc2guc2hhZGVyOy8vIHx8IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuXG4gICAgdmFyIGRyYXdNb2RlID0gbWVzaC5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0ggPyBnbC5UUklBTkdMRV9TVFJJUCA6IGdsLlRSSUFOR0xFUztcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKG1lc2guYmxlbmRNb2RlKTtcblxuICAgIC8vVE9ETyBjYWNoZSBjdXN0b20gc3RhdGUuLlxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHNoYWRlci5zaGFkZXJzW2dsLmlkXSB8fCBzaGFkZXIuZ2V0U2hhZGVyKHJlbmRlcmVyKTsvLyA6IHNoYWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXgudmFsdWUgPSBtZXNoLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXgudmFsdWUgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSBtZXNoLndvcmxkQWxwaGE7XG5cbiAgICBzaGFkZXIuc3luY1VuaWZvcm1zKCk7XG5cbiAgICBpZiAoIW1lc2guZGlydHkpXG4gICAge1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgbWVzaC52ZXJ0aWNlcyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG1lc2guaW5kaWNlcyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgbWVzaC5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb250IG5lZWQgdG8gdXBsb2FkIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgfVxuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGRyYXdNb2RlLCBtZXNoLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG5cbn07XG5cbi8qKlxuICogUHJlcGFyZXMgYWxsIHRoZSBidWZmZXJzIHRvIHJlbmRlciB0aGlzIG1lc2hcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuX2luaXRXZWJHTCA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIC8vIGJ1aWxkIHRoZSBzdHJpcCFcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgbWVzaC5fdmVydGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5faW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl91dkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG5cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICBpZihtZXNoLmNvbG9ycyl7XG4gICAgICAgIG1lc2guX2NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl9jb2xvckJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLmNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbn07XG5cblxuLyoqXG4gKiBFbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IG1lc2ggcmVuZGVyZXIuXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBcblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBNZXNoIHJlbmRlcmVyXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgV2ViR0wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgY29yZS5TaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogYWxwaGEgOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVZlcnRleFBvc2l0aW9uOjAsXG4gICAgICAgICAgICBhVGV4dHVyZUNvb3JkOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cbk1lc2hTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNoYWRlci5wcm90b3R5cGUpO1xuTWVzaFNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoU2hhZGVyO1xuXG5jb3JlLlNoYWRlck1hbmFnZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2hTaGFkZXInLCBNZXNoU2hhZGVyKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3NpZ25cblxuaWYgKCFNYXRoLnNpZ24pXG57XG4gICAgTWF0aC5zaWduID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCA9ICt4O1xuICAgICAgICBpZiAoeCA9PT0gMCB8fCBpc05hTih4KSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPiAwID8gMSA6IC0xO1xuICAgIH07XG59XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9vYmplY3QtYXNzaWduXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5cbmlmICghT2JqZWN0LmFzc2lnbilcbntcbiAgICBPYmplY3QuYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xufVxuIiwicmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL3JlcXVlc3RBbmltYXRpb25GcmFtZScpO1xucmVxdWlyZSgnLi9NYXRoLnNpZ24nKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTU3OTY3MVxuLy8gaHR0cDovL3VwZGF0ZXMuaHRtbDVyb2Nrcy5jb20vMjAxMi8wNS9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUtQVBJLW5vdy13aXRoLXN1Yi1taWxsaXNlY29uZC1wcmVjaXNpb25cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RpbWhhbGwvNDA3ODYxNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0ZpbmFuY2lhbC1UaW1lcy9wb2x5ZmlsbC1zZXJ2aWNlL3RyZWUvbWFzdGVyL3BvbHlmaWxscy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcblxuLy8gRXhwZWN0ZWQgdG8gYmUgdXNlZCB3aXRoIEJyb3dzZXJmaXlcbi8vIEJyb3dzZXJpZnkgYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZSB1c2Ugb2YgYGdsb2JhbGAgYW5kIHBhc3NlcyB0aGVcbi8vIGNvcnJlY3QgcmVmZXJlbmNlIG9mIGBnbG9iYWxgLCBgc2VsZmAsIGFuZCBmaW5hbGx5IGB3aW5kb3dgXG5cbi8vIERhdGUubm93XG5pZiAoIShEYXRlLm5vdyAmJiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lKSkge1xuICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcbn1cblxuLy8gcGVyZm9ybWFuY2Uubm93XG5pZiAoIShnbG9iYWwucGVyZm9ybWFuY2UgJiYgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdykpIHtcbiAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIWdsb2JhbC5wZXJmb3JtYW5jZSkge1xuICAgICAgICBnbG9iYWwucGVyZm9ybWFuY2UgPSB7fTtcbiAgICB9XG4gICAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgfTtcbn1cblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xudmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xuXG5mb3IodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8XG4gICAgICAgIGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xufVxuXG5pZiAoIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCksXG4gICAgICAgICAgICBkZWxheSA9IDE2ICsgbGFzdFRpbWUgLSBjdXJyZW50VGltZTtcblxuICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgIH07XG59XG5cbmlmICghZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xufVxuIl19 //# sourceMappingURL=pixi.js.map diff --git a/bin/pixi.js.map b/bin/pixi.js.map index 1d72f43..3256814 100644 --- a/bin/pixi.js.map +++ b/bin/pixi.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi.js","sourceRoot":"./","sourcesContent":[]} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi.js","sourceRoot":"./","sourcesContent":[]} \ No newline at end of file diff --git a/bin/pixi.min.js b/bin/pixi.min.js index db31e4a..ee1b45b 100644 --- a/bin/pixi.min.js +++ b/bin/pixi.min.js @@ -1,11 +1,11 @@ !function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&this.texture.uploadData(null,t,e),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=i.fromData(t,null,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a.unbind(),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a.unbind(),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t||null)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){return this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate(),this},i.prototype.unbind=function(){return this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null),this},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=X(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function P(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function D(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},X=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},Y="function"==typeof setImmediate&&setImmediate,z=Y?function(t){Y(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=Y?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=X(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return P(t,1,e)},N.log=D("log"),N.dir=D("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return P.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return D.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",P=/^xn--/,D=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r); g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v,p=""),d=decodeURIComponent(c),f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,P=M.length;P>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var D=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(D.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=D.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var X=i.indexOf("#");-1!==X&&(this.hash=i.substr(X),i=i.slice(0,X));var Y=i.indexOf("?");if(-1!==Y?(this.search=i.substr(Y),this.query=i.substr(Y+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,Y)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","gl-matrix":"git+https://github.com/toji/gl-matrix.git","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirtyTransform=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":56,"../textures/RenderTexture":100,"../utils":107,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.transform=new a,this.position=this.transform.position,this.scale=this.transform.scale,this.pivot=this.transform.pivot,this.skew=this.transform.skew,this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),t("./Transform")),h=new n.Matrix,u={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i;var l=function(t){this.doc=t,this.x=0,this.y=0};Object.defineProperties(l.prototype,{x:{get:function(){return this.doc.position.x},set:function(t){this.doc.position.x=t,this.doc.dirtyTransform=!0}},y:{get:function(){return this.doc.posiiton.y},set:function(t){this.doc.position.y=t,this.doc.dirtyTransform=!0}}}),Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return h.tx=-i.x,h.ty=-i.y,n.render(this,h),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":56,"../textures/RenderTexture":100,"./Transform":41,eventemitter3:25}],41:[function(t,e,r){function i(){this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.position=new n.Point(0),this.scale=new n.Point(1,1),this.pivot=new n.Point(0),this.skew=new n.Point(0),this.rotation=0,this.dirty=!0}var n=t("../math");i.prototype.constructor=i,i.prototype.updateTransform=function(t){var e=t.worldTransform,r=this.worldTransform,i=this.localTransform;return i.a=this._cr*this.scale.x,i.b=this._sr*this.scale.x,i.c=-this._sr*this.scale.y,i.d=this._cr*this.scale.y,i.tx=this.position.x-(this.pivot.x*i.a+this.pivot.y*i.c),i.ty=this.position.y-(this.pivot.x*i.b+this.pivot.y*i.d),r.a=i.a*e.a+i.b*e.c,r.b=i.a*e.b+i.b*e.d,r.c=i.c*e.a+i.d*e.c,r.d=i.c*e.b+i.d*e.d,r.tx=i.tx*e.a+i.ty*e.c+e.tx,r.ty=i.tx*e.b+i.ty*e.d+e.ty,this.dirty=!1,!0},e.exports=i},{"../math":56}],42:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"../../utils":107,"./WebGLGraphicsData":45,"./shaders/PrimitiveShader":46,"./utils/buildCircle":47,"./utils/buildComplexPoly":48,"./utils/buildLine":49,"./utils/buildPoly":50,"./utils/buildRectangle":51,"./utils/buildRoundedRectangle":52,earcut:24}],45:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],46:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],47:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":107,"./buildLine":49}],48:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":107,"./buildLine":49}],49:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":56,"../../../utils":107}],50:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":107}],51:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":107,"./buildLine":49}],52:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":107,"./buildLine":49}],53:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),BaseRenderTexture:t("./textures/BaseRenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":42,"./graphics/GraphicsData":43,"./graphics/webgl/GraphicsRenderer":44,"./math":56,"./particles/ParticleContainer":62,"./particles/webgl/ParticleRenderer":64,"./renderers/canvas/CanvasRenderer":67,"./renderers/canvas/utils/CanvasBuffer":68,"./renderers/canvas/utils/CanvasGraphics":69,"./renderers/webgl/WebGLRenderer":73,"./renderers/webgl/filters/AbstractFilter":74,"./renderers/webgl/filters/FXAAFilter":75,"./renderers/webgl/filters/SpriteMaskFilter":76,"./renderers/webgl/managers/ShaderManager":80,"./renderers/webgl/managers/WebGLManager":82,"./renderers/webgl/shaders/Shader":85,"./renderers/webgl/utils/ObjectRenderer":88,"./renderers/webgl/utils/RenderTarget":90,"./sprites/Sprite":94,"./sprites/webgl/SpriteRenderer":95,"./text/Text":97,"./textures/BaseRenderTexture":98,"./textures/BaseTexture":99,"./textures/RenderTexture":100,"./textures/Texture":101,"./textures/TextureUvs":102,"./textures/VideoBaseTexture":103,"./ticker":105,"./utils":107,"pixi-gl-core":1}],54:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":55}],55:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],56:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":54,"./Point":55,"./shapes/Circle":57,"./shapes/Ellipse":58,"./shapes/Polygon":59,"./shapes/Rectangle":60,"./shapes/RoundedRectangle":61}],57:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":60}],58:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":60}],59:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":55}],60:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],62:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":56,"../../renderers/webgl/WebGLRenderer":73,"../../renderers/webgl/utils/ObjectRenderer":88,"./ParticleBuffer":63,"./ParticleShader":65}],65:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{ -uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":86}],66:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,transform:{worldTransform:new o.Matrix},worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":56,"../utils":107,eventemitter3:25}],67:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":56,"../../utils":107,"../SystemRenderer":66,"./utils/CanvasMaskManager":70}],68:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],69:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],70:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":69}],71:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":86}],75:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\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\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\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)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":74}],76:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":56,"./AbstractFilter":74}],77:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":82}],78:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":107}],86:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":85}],87:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],88:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":82}],89:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],90:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=(t("pixi-gl-core").GLTexture,t("pixi-gl-core").GLFramebuffer),s=t("./StencilMaskStack"),a=function(t,e,r,a,h,u){this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=h||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.defaultFrame=new PIXI.Rectangle,this.destinationFrame=null,this.sourceFrame=null,this.stencilBuffer=null,this.stencilMaskStack=new s,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=a||n.SCALE_MODES.DEFAULT,this.root=u,this.frameBuffer=o.createRGBA(t,100,100),this.root?this.frameBuffer.framebuffer=null:this.texture=this.frameBuffer.texture,this.resize(e,r)};a.prototype.constructor=a,e.exports=a,a.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},a.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},a.prototype.activate=function(t,e){var r=this.gl;this.frameBuffer.bind(),this.destinationFrame=t||this.destinationFrame||this.defaultFrame,this.sourceFrame=e||this.sourceFrame||t,this.calculateProjection(this.destinationFrame,this.sourceFrame),this.transform&&this.projectionMatrix.append(this.transform),this.destinationFrame!==this.sourceFrame?(r.enable(r.SCISSOR_TEST),r.scissor(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)):r.disable(r.SCISSOR_TEST),r.viewport(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)},a.prototype.calculateProjection=function(t,e){var r=this.projectionMatrix;e=e||t,r.identity(),this.root?(r.a=1/t.width*2,r.d=-1/t.height*2,r.tx=-1-e.x*r.a,r.ty=1-e.y*r.d):(r.a=1/t.width*2,r.d=1/t.height*2,r.tx=-1-e.x*r.a,r.ty=-1-e.y*r.d)},a.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.defaultFrame.width=t,this.defaultFrame.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},a.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":56,"../../../utils":107,"./StencilMaskStack":91,"pixi-gl-core":1}],91:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],92:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],93:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],94:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.transform.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0); -}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],97:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=t,this.height=e,this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(t){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear(!1,t))},i.prototype.renderWebGL=function(t,e,r,i,n){if(this.valid){if(n=void 0!==n?n:!0,this.textureBuffer.transform=r,this.textureBuffer.activate(),e.worldAlpha=1,n){e.worldTransform.identity(),e.currentBounds=null;var o,s,a=e.children;for(o=0,s=a.length;s>o;++o)a[o].updateTransform()}p.width=t.height,p.height=t.width;var h=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.textureBuffer.activate(t,p),console.log(e),this.renderer.renderDisplayObject(e,this.textureBuffer,i),this.renderer.filterManager=h}},i.prototype.renderCanvas=function(t,e,r,i,n){if(this.valid){n=!!n;var o=c;o.identity(),r&&o.append(r),o.tx+=t.x,o.ty+=t.y;var s=e.worldTransform;e.worldTransform=o,e.worldAlpha=1;var a,h,u=e.children;for(a=0,h=u.length;h>a;++a)u[a].updateTransform();i&&this.textureBuffer.clear();var l=this.textureBuffer.context,p=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(e,l),this.renderer.resolution=p,e.worldTransform===o&&(e.worldTransform=s)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(t){var e=new Image;return e.src=this.getBase64(t),e},i.prototype.getBase64=function(t){return this.getCanvas(t).toDataURL()},i.prototype.getCanvas=function(t){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution,i=this.renderer.gl,n=new Uint8Array(4*e*r);i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null);var o=new h(e,r),s=o.context.getImageData(0,0,e,r);return s.data.set(n),o.context.putImageData(s,0,0),o.canvas}if(t||(t=p,t.width=this.textureBuffer.canvas.width,t.height=this.textureBuffer.canvas.height),t.width===this.textureBuffer.canvas.width&&t.height===this.textureBuffer.canvas.height)return this.textureBuffer.canvas;var a=this.resolution,o=new h(t.width*a,t.height*a),s=this.textureBuffer.context.getImageData(t.x*a,t.y*a,t.width*a,t.height*a);return o.context.putImageData(s,0,0),o.canvas},i.prototype.getPixels=function(t){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var i=this.renderer.gl,n=new Uint8Array(4*e*r);return i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null),n}return this.textureBuffer.canvas.getContext("2d").getImageData(t.x*this.resolution,t.y*this.resolution,e,r).data},i.prototype.getPixel=function(t,e,r){return p.x=e,p.y=r,p.width=1/this.resolution,p.height=1/this.resolution,t&&(p.x+=t.x,p.y+=t.y),this.getPixels(p)}},{"../const":38,"../math":56,"../renderers/canvas/utils/CanvasBuffer":68,"../renderers/webgl/managers/FilterManager":78,"../renderers/webgl/utils/RenderTarget":90,"./BaseTexture":99,"./Texture":101}],99:[function(t,e,r){function i(t,e,r){s.call(this),this.uid=n.uid(),this.resolution=r||1,this.width=100,this.height=100,this.realWidth=100,this.realHeight=100,this.scaleMode=e||o.SCALE_MODES.DEFAULT,this.hasLoaded=!1,this.isLoading=!1,this.source=null,this.premultipliedAlpha=!0,this.imageUrl=null,this.isPowerOfTwo=!1,this.mipmap=!1,this._glTextures={},this._active=!1,this._id=0,t&&this.loadSource(t)}var n=t("../utils"),o=t("../const"),s=t("eventemitter3");i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.update=function(){this.realWidth=this.source.naturalWidth||this.source.width,this.realHeight=this.source.naturalHeight||this.source.height,this.width=this.realWidth/this.resolution,this.height=this.realHeight/this.resolution,this.isPowerOfTwo=n.isPowerOfTwo(this.realWidth,this.realHeight),this.emit("update",this)},i.prototype.loadSource=function(t){var e=this.isLoading;if(this.hasLoaded=!1,this.isLoading=!1,e&&this.source&&(this.source.onload=null,this.source.onerror=null),this.source=t,(this.source.complete||this.source.getContext)&&this.source.width&&this.source.height)this._sourceLoaded();else if(!t.getContext){this.isLoading=!0;var r=this;t.onload=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r._sourceLoaded(),r.emit("loaded",r))},t.onerror=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r.emit("error",r))},t.complete&&t.src&&(this.isLoading=!1,t.onload=null,t.onerror=null,t.width&&t.height?(this._sourceLoaded(),e&&this.emit("loaded",this)):e&&this.emit("error",this))}},i.prototype._sourceLoaded=function(){this.hasLoaded=!0,this.update()},i.prototype.destroy=function(){this.imageUrl?(delete n.BaseTextureCache[this.imageUrl],delete n.TextureCache[this.imageUrl],this.imageUrl=null,navigator.isCocoonJS||(this.source.src="")):this.source&&this.source._pixiId&&delete n.BaseTextureCache[this.source._pixiId],this.source=null,this.dispose()},i.prototype.dispose=function(){this.emit("dispose",this)},i.prototype.updateSourceImage=function(t){this.source.src=t,this.loadSource(this.source)},i.fromImage=function(t,e,r){var o=n.BaseTextureCache[t];if(void 0===e&&0!==t.indexOf("data:")&&(e=!0),!o){var s=new Image;e&&(s.crossOrigin=""),o=new i(s,r),o.imageUrl=t,s.src=t,n.BaseTextureCache[t]=o,o.resolution=n.getResolutionOfUrl(t)}return o},i.fromCanvas=function(t,e){t._pixiId||(t._pixiId="canvas_"+n.uid());var r=n.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),n.BaseTextureCache[t._pixiId]=r),r}},{"../const":38,"../utils":107,eventemitter3:25}],100:[function(t,e,r){function i(t,e){if(!renderer)throw new Error("Unable to create RenderTexture, you must pass a renderer into the constructor.");o.call(this,t,e),this.valid=!0,this._updateUvs()}var n=t("./BaseRenderTexture"),o=t("./Texture"),s=t("../math");t("../const"),new s.Matrix;i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.resize=function(t,e,r){this.valid=t>0&&e>0,this._frame.width=this.crop.width=t,this._frame.height=this.crop.height=e,r&&this.baseTexture.resize(t,e),this._updateUvs()},i.prototype.clear=function(){this.valid&&this.baseTexture.clear(this.frame)},i.prototype.render=function(t,e,r,i){this.valid&&this.baseTexture.render(this.frame,t,e,r,i)},i.prototype.getImage=function(){return this.baseTexture.getImage(this.frame)},i.prototype.getBase64=function(){return this.getBase64.getImage(this.frame)},i.prototype.getCanvas=function(){return this.baseTexture.getCanvas(this.frame)},i.prototype.getPixels=function(){return this.baseTexture.getPixels(this.frame)},i.prototype.getPixel=function(t,e){return this.baseTexture.getPixel(this.frame,t,e)},i.create=function(t,e,r,o,s){return new i(new n(t,e,r,o,s))}},{"../const":38,"../math":56,"./BaseRenderTexture":98,"./Texture":101}],101:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":56,"../utils":107,"./BaseTexture":99,"./TextureUvs":102,"./VideoBaseTexture":103,eventemitter3:25}],102:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],103:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],105:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":104}],106:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],107:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":108,async:16,eventemitter3:25}],108:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],109:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":53, -"./extras":116,"./filters":133,"./mesh":158}],110:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":53}],118:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":53,"../blur/BlurXFilter":121,"../blur/BlurYFilter":122}],119:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){ -t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":53}],125:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":53}],126:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":53}],127:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":53}],128:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":53}],129:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":53}],130:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":53}],140:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":53}],141:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":53,"./TiltShiftXFilter":142,"./TiltShiftYFilter":143}],142:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":140}],143:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":140}],144:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":53}],145:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":53,"./deprecation":109,"./extras":116,"./filters":133,"./interaction":148,"./loaders":151,"./mesh":158,"./polyfill":163}],146:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":53}],147:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){ -var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":53,"./InteractionData":146,"./interactiveTarget":149}],148:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":146,"./InteractionManager":147,"./interactiveTarget":149}],149:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],150:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":53}],156:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":155}],157:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":53,"./Mesh":155}],158:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":155,"./Plane":156,"./Rope":157,"./webgl/MeshRenderer":159,"./webgl/MeshShader":160}],159:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":53,"../Mesh":155}],160:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":53}],161:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],162:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],163:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":161,"./Object.assign":162,"./requestAnimationFrame":164}],164:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[145])(145)}); +i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.complete=function(){this.data&&this.data.removeEventListener&&(this.data.removeEventListener("error",this._boundOnError),this.data.removeEventListener("load",this._boundComplete),this.data.removeEventListener("progress",this._boundOnProgress),this.data.removeEventListener("canplaythrough",this._boundComplete)),this.xhr&&(this.xhr.removeEventListener?(this.xhr.removeEventListener("error",this._boundXhrOnError),this.xhr.removeEventListener("abort",this._boundXhrOnAbort),this.xhr.removeEventListener("progress",this._boundOnProgress),this.xhr.removeEventListener("load",this._boundXhrOnLoad)):(this.xhr.onerror=null,this.xhr.ontimeout=null,this.xhr.onprogress=null,this.xhr.onload=null)),this.emit("complete",this)},i.prototype.load=function(t){switch(this.emit("start",this),t&&this.once("complete",t),(this.crossOrigin===!1||"string"!=typeof this.crossOrigin)&&(this.crossOrigin=this._determineCrossOrigin(this.url)),this.loadType){case i.LOAD_TYPE.IMAGE:this._loadImage();break;case i.LOAD_TYPE.AUDIO:this._loadElement("audio");break;case i.LOAD_TYPE.VIDEO:this._loadElement("video");break;case i.LOAD_TYPE.XHR:default:h&&this.crossOrigin?this._loadXdr():this._loadXhr()}},i.prototype._loadImage=function(){this.data=new Image,this.crossOrigin&&(this.data.crossOrigin=this.crossOrigin),this.data.src=this.url,this.isImage=!0,this.data.addEventListener("error",this._boundOnError,!1),this.data.addEventListener("load",this._boundComplete,!1),this.data.addEventListener("progress",this._boundOnProgress,!1)},i.prototype._loadElement=function(t){if("audio"===t&&"undefined"!=typeof Audio?this.data=new Audio:this.data=document.createElement(t),null===this.data)return this.error=new Error("Unsupported element "+t),void this.complete();if(navigator.isCocoonJS)this.data.src=Array.isArray(this.url)?this.url[0]:this.url;else if(Array.isArray(this.url))for(var e=0;e0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","gl-matrix":"git+https://github.com/toji/gl-matrix.git","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.transform.dirty=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":57,"../textures/RenderTexture":101,"../utils":108,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.transform=new a,this.position=this.transform.position,this.scale=this.transform.scale,this.pivot=this.transform.pivot,this.skew=this.transform.skew,this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=this.transform.worldTransform,this.localTransform=this.transform.localTransform,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),t("./TransformStatic")),h=new n.Matrix,u={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=u,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return h.tx=-i.x,h.ty=-i.y,n.render(this,h),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":57,"../textures/RenderTexture":101,"./TransformStatic":42,eventemitter3:25}],41:[function(t,e,r){function i(t,e,r){this._x=e||0,this._y=r||0,this.transform=t}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this._x},set:function(t){this._x=t,this.transform.dirty=!0}},y:{get:function(){return this._y},set:function(t){this._y=t,this.transform.dirty=!0}}}),i.prototype.set=function(t,e){this._x=t||0,this._y=e||(0!==e?this._x:0),this.transform.dirty=!0}},{}],42:[function(t,e,r){function i(){this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.position=new o(this,0),this.scale=new o(this,1,1),this.pivot=new o(this,0,0),this.skew=new o(this,0,0),this.rotation=0,this._sr=Math.sin(0),this._cr=Math.cos(0),this.dirty=!0}var n=t("../math"),o=t("./ObservablePoint");i.prototype.constructor=i,i.prototype.updateTransform=function(t){var e=t.worldTransform,r=this.worldTransform,i=this.localTransform;console.log("DIRTY"),this.dirty&&(i.a=this._cr*this.scale._x,i.b=this._sr*this.scale._x,i.c=-this._sr*this.scale._y,i.d=this._cr*this.scale._y,i.tx=this.position._x-(this.pivot._x*i.a+this.pivot._y*i.c),i.ty=this.position._y-(this.pivot._x*i.b+this.pivot._y*i.d)),(this.dirty||parent.dirty)&&(r.a=i.a*e.a+i.b*e.c,r.b=i.a*e.b+i.b*e.d,r.c=i.c*e.a+i.d*e.c,r.d=i.c*e.b+i.d*e.d,r.tx=i.tx*e.a+i.ty*e.c+e.tx,r.ty=i.tx*e.b+i.ty*e.d+e.ty)},e.exports=i},{"../math":57,"./ObservablePoint":41}],43:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"../../utils":108,"./WebGLGraphicsData":46,"./shaders/PrimitiveShader":47,"./utils/buildCircle":48,"./utils/buildComplexPoly":49,"./utils/buildLine":50,"./utils/buildPoly":51,"./utils/buildRectangle":52,"./utils/buildRoundedRectangle":53,earcut:24}],46:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],47:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],48:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":108,"./buildLine":50}],49:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":108,"./buildLine":50}],50:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":57,"../../../utils":108}],51:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":108}],52:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":108,"./buildLine":50}],53:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":108,"./buildLine":50}],54:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),BaseRenderTexture:t("./textures/BaseRenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":43,"./graphics/GraphicsData":44,"./graphics/webgl/GraphicsRenderer":45,"./math":57,"./particles/ParticleContainer":63,"./particles/webgl/ParticleRenderer":65,"./renderers/canvas/CanvasRenderer":68,"./renderers/canvas/utils/CanvasBuffer":69,"./renderers/canvas/utils/CanvasGraphics":70,"./renderers/webgl/WebGLRenderer":74,"./renderers/webgl/filters/AbstractFilter":75,"./renderers/webgl/filters/FXAAFilter":76,"./renderers/webgl/filters/SpriteMaskFilter":77,"./renderers/webgl/managers/ShaderManager":81,"./renderers/webgl/managers/WebGLManager":83,"./renderers/webgl/shaders/Shader":86,"./renderers/webgl/utils/ObjectRenderer":89,"./renderers/webgl/utils/RenderTarget":91,"./sprites/Sprite":95,"./sprites/webgl/SpriteRenderer":96,"./text/Text":98,"./textures/BaseRenderTexture":99,"./textures/BaseTexture":100,"./textures/RenderTexture":101,"./textures/Texture":102,"./textures/TextureUvs":103,"./textures/VideoBaseTexture":104,"./ticker":106,"./utils":108,"pixi-gl-core":1}],55:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":56}],56:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],57:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":55,"./Point":56,"./shapes/Circle":58,"./shapes/Ellipse":59,"./shapes/Polygon":60,"./shapes/Rectangle":61,"./shapes/RoundedRectangle":62}],58:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":61}],59:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":61}],60:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":56}],61:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],63:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":57,"../../renderers/webgl/WebGLRenderer":74,"../../renderers/webgl/utils/ObjectRenderer":89,"./ParticleBuffer":64,"./ParticleShader":66}],66:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{ +uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":87}],67:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,transform:{worldTransform:new o.Matrix},worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":57,"../utils":108,eventemitter3:25}],68:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":57,"../../utils":108,"../SystemRenderer":67,"./utils/CanvasMaskManager":71}],69:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],70:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],71:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":70}],72:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":87}],76:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\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\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\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)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":75}],77:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":57,"./AbstractFilter":75}],78:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":83}],79:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":108}],87:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":86}],88:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],89:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":83}],90:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],91:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=(t("pixi-gl-core").GLTexture,t("pixi-gl-core").GLFramebuffer),s=t("./StencilMaskStack"),a=function(t,e,r,a,h,u){this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=h||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.defaultFrame=new PIXI.Rectangle,this.destinationFrame=null,this.sourceFrame=null,this.stencilBuffer=null,this.stencilMaskStack=new s,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=a||n.SCALE_MODES.DEFAULT,this.root=u,this.frameBuffer=o.createRGBA(t,100,100),this.root?this.frameBuffer.framebuffer=null:this.texture=this.frameBuffer.texture,this.resize(e,r)};a.prototype.constructor=a,e.exports=a,a.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},a.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},a.prototype.activate=function(t,e){var r=this.gl;this.frameBuffer.bind(),this.destinationFrame=t||this.destinationFrame||this.defaultFrame,this.sourceFrame=e||this.sourceFrame||t,this.calculateProjection(this.destinationFrame,this.sourceFrame),this.transform&&this.projectionMatrix.append(this.transform),this.destinationFrame!==this.sourceFrame?(r.enable(r.SCISSOR_TEST),r.scissor(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)):r.disable(r.SCISSOR_TEST),r.viewport(this.destinationFrame.x,this.destinationFrame.y,this.destinationFrame.width*this.resolution,this.destinationFrame.height*this.resolution)},a.prototype.calculateProjection=function(t,e){var r=this.projectionMatrix;e=e||t,r.identity(),this.root?(r.a=1/t.width*2,r.d=-1/t.height*2,r.tx=-1-e.x*r.a,r.ty=1-e.y*r.d):(r.a=1/t.width*2,r.d=1/t.height*2,r.tx=-1-e.x*r.a,r.ty=-1-e.y*r.d)},a.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.defaultFrame.width=t,this.defaultFrame.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},a.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":57,"../../../utils":108,"./StencilMaskStack":92,"pixi-gl-core":1}],92:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],93:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],94:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],95:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.transform.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0); +}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],98:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=t,this.height=e,this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(t){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear(!1,t))},i.prototype.renderWebGL=function(t,e,r,i,n){if(this.valid){if(n=void 0!==n?n:!0,this.textureBuffer.transform=r,this.textureBuffer.activate(),e.worldAlpha=1,n){e.worldTransform.identity(),e.currentBounds=null;var o,s,a=e.children;for(o=0,s=a.length;s>o;++o)a[o].updateTransform()}p.width=t.height,p.height=t.width;var h=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.textureBuffer.activate(t,p),console.log(e),this.renderer.renderDisplayObject(e,this.textureBuffer,i),this.renderer.filterManager=h}},i.prototype.renderCanvas=function(t,e,r,i,n){if(this.valid){n=!!n;var o=c;o.identity(),r&&o.append(r),o.tx+=t.x,o.ty+=t.y;var s=e.worldTransform;e.worldTransform=o,e.worldAlpha=1;var a,h,u=e.children;for(a=0,h=u.length;h>a;++a)u[a].updateTransform();i&&this.textureBuffer.clear();var l=this.textureBuffer.context,p=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(e,l),this.renderer.resolution=p,e.worldTransform===o&&(e.worldTransform=s)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(t){var e=new Image;return e.src=this.getBase64(t),e},i.prototype.getBase64=function(t){return this.getCanvas(t).toDataURL()},i.prototype.getCanvas=function(t){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution,i=this.renderer.gl,n=new Uint8Array(4*e*r);i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null);var o=new h(e,r),s=o.context.getImageData(0,0,e,r);return s.data.set(n),o.context.putImageData(s,0,0),o.canvas}if(t||(t=p,t.width=this.textureBuffer.canvas.width,t.height=this.textureBuffer.canvas.height),t.width===this.textureBuffer.canvas.width&&t.height===this.textureBuffer.canvas.height)return this.textureBuffer.canvas;var a=this.resolution,o=new h(t.width*a,t.height*a),s=this.textureBuffer.context.getImageData(t.x*a,t.y*a,t.width*a,t.height*a);return o.context.putImageData(s,0,0),o.canvas},i.prototype.getPixels=function(t){t||(t=p,t.width=this.textureBuffer.size.width,t.height=this.textureBuffer.size.height);var e=t.width*this.resolution,r=t.height*this.resolution;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var i=this.renderer.gl,n=new Uint8Array(4*e*r);return i.bindFramebuffer(i.FRAMEBUFFER,this.textureBuffer.frameBuffer),i.readPixels(t.x*this.resolution,t.y*this.resolution,e,r,i.RGBA,i.UNSIGNED_BYTE,n),i.bindFramebuffer(i.FRAMEBUFFER,null),n}return this.textureBuffer.canvas.getContext("2d").getImageData(t.x*this.resolution,t.y*this.resolution,e,r).data},i.prototype.getPixel=function(t,e,r){return p.x=e,p.y=r,p.width=1/this.resolution,p.height=1/this.resolution,t&&(p.x+=t.x,p.y+=t.y),this.getPixels(p)}},{"../const":38,"../math":57,"../renderers/canvas/utils/CanvasBuffer":69,"../renderers/webgl/managers/FilterManager":79,"../renderers/webgl/utils/RenderTarget":91,"./BaseTexture":100,"./Texture":102}],100:[function(t,e,r){function i(t,e,r){s.call(this),this.uid=n.uid(),this.resolution=r||1,this.width=100,this.height=100,this.realWidth=100,this.realHeight=100,this.scaleMode=e||o.SCALE_MODES.DEFAULT,this.hasLoaded=!1,this.isLoading=!1,this.source=null,this.premultipliedAlpha=!0,this.imageUrl=null,this.isPowerOfTwo=!1,this.mipmap=!1,this._glTextures={},this._active=!1,this._id=0,t&&this.loadSource(t)}var n=t("../utils"),o=t("../const"),s=t("eventemitter3");i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.update=function(){this.realWidth=this.source.naturalWidth||this.source.width,this.realHeight=this.source.naturalHeight||this.source.height,this.width=this.realWidth/this.resolution,this.height=this.realHeight/this.resolution,this.isPowerOfTwo=n.isPowerOfTwo(this.realWidth,this.realHeight),this.emit("update",this)},i.prototype.loadSource=function(t){var e=this.isLoading;if(this.hasLoaded=!1,this.isLoading=!1,e&&this.source&&(this.source.onload=null,this.source.onerror=null),this.source=t,(this.source.complete||this.source.getContext)&&this.source.width&&this.source.height)this._sourceLoaded();else if(!t.getContext){this.isLoading=!0;var r=this;t.onload=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r._sourceLoaded(),r.emit("loaded",r))},t.onerror=function(){t.onload=null,t.onerror=null,r.isLoading&&(r.isLoading=!1,r.emit("error",r))},t.complete&&t.src&&(this.isLoading=!1,t.onload=null,t.onerror=null,t.width&&t.height?(this._sourceLoaded(),e&&this.emit("loaded",this)):e&&this.emit("error",this))}},i.prototype._sourceLoaded=function(){this.hasLoaded=!0,this.update()},i.prototype.destroy=function(){this.imageUrl?(delete n.BaseTextureCache[this.imageUrl],delete n.TextureCache[this.imageUrl],this.imageUrl=null,navigator.isCocoonJS||(this.source.src="")):this.source&&this.source._pixiId&&delete n.BaseTextureCache[this.source._pixiId],this.source=null,this.dispose()},i.prototype.dispose=function(){this.emit("dispose",this)},i.prototype.updateSourceImage=function(t){this.source.src=t,this.loadSource(this.source)},i.fromImage=function(t,e,r){var o=n.BaseTextureCache[t];if(void 0===e&&0!==t.indexOf("data:")&&(e=!0),!o){var s=new Image;e&&(s.crossOrigin=""),o=new i(s,r),o.imageUrl=t,s.src=t,n.BaseTextureCache[t]=o,o.resolution=n.getResolutionOfUrl(t)}return o},i.fromCanvas=function(t,e){t._pixiId||(t._pixiId="canvas_"+n.uid());var r=n.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),n.BaseTextureCache[t._pixiId]=r),r}},{"../const":38,"../utils":108,eventemitter3:25}],101:[function(t,e,r){function i(t,e){if(!renderer)throw new Error("Unable to create RenderTexture, you must pass a renderer into the constructor.");o.call(this,t,e),this.valid=!0,this._updateUvs()}var n=t("./BaseRenderTexture"),o=t("./Texture"),s=t("../math");t("../const"),new s.Matrix;i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.resize=function(t,e,r){this.valid=t>0&&e>0,this._frame.width=this.crop.width=t,this._frame.height=this.crop.height=e,r&&this.baseTexture.resize(t,e),this._updateUvs()},i.prototype.clear=function(){this.valid&&this.baseTexture.clear(this.frame)},i.prototype.render=function(t,e,r,i){this.valid&&this.baseTexture.render(this.frame,t,e,r,i)},i.prototype.getImage=function(){return this.baseTexture.getImage(this.frame)},i.prototype.getBase64=function(){return this.getBase64.getImage(this.frame)},i.prototype.getCanvas=function(){return this.baseTexture.getCanvas(this.frame)},i.prototype.getPixels=function(){return this.baseTexture.getPixels(this.frame)},i.prototype.getPixel=function(t,e){return this.baseTexture.getPixel(this.frame,t,e)},i.create=function(t,e,r,o,s){return new i(new n(t,e,r,o,s))}},{"../const":38,"../math":57,"./BaseRenderTexture":99,"./Texture":102}],102:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":57,"../utils":108,"./BaseTexture":100,"./TextureUvs":103,"./VideoBaseTexture":104,eventemitter3:25}],103:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],104:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],106:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":105}],107:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],108:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":109,async:16,eventemitter3:25}],109:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],110:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":54, +"./extras":117,"./filters":134,"./mesh":159}],111:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":54}],119:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":54,"../blur/BlurXFilter":122,"../blur/BlurYFilter":123}],120:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){ +t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":54}],126:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":54}],127:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":54}],128:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":54}],129:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":54}],130:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":54}],131:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":54}],141:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":54}],142:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":54,"./TiltShiftXFilter":143,"./TiltShiftYFilter":144}],143:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":141}],144:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":141}],145:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":54}],146:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":54,"./deprecation":110,"./extras":117,"./filters":134,"./interaction":149,"./loaders":152,"./mesh":159,"./polyfill":164}],147:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":54}],148:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){ +var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":54,"./InteractionData":147,"./interactiveTarget":150}],149:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":147,"./InteractionManager":148,"./interactiveTarget":150}],150:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],151:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":54}],157:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":156}],158:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":54,"./Mesh":156}],159:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":156,"./Plane":157,"./Rope":158,"./webgl/MeshRenderer":160,"./webgl/MeshShader":161}],160:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":54,"../Mesh":156}],161:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":54}],162:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],163:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],164:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":162,"./Object.assign":163,"./requestAnimationFrame":165}],165:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[146])(146)}); //# sourceMappingURL=pixi.min.js.map diff --git a/bin/pixi.min.js.map b/bin/pixi.min.js.map index 102b3e1..c95a532 100644 --- a/bin/pixi.min.js.map +++ b/bin/pixi.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","gl-matrix","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","dirtyTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Transform","pivot","_rotation","filterArea","_sr","_cr","_tempDisplayObjectParent","CachePoint","doc","posiiton","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const","./Transform",41,"localTransform","Point","parentTransform","pt","lt",42,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",43,"_lineTint","_fillTint",44,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",45,"glPoints","glIndices","Uint16Array","deleteBuffer",46,47,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",48,49,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",50,"vertPos",51,"rectData",52,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",53,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","BaseRenderTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseRenderTexture","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",54,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",55,56,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",57,"dx","dy","r2","./Rectangle",58,"normx","normy",59,"points_","il","xi","yi","xj","yj","intersect","../Point",60,61,62,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",63,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",64,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",65,"TextureShader","../../renderers/webgl/shaders/TextureShader",66,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",67,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",68,69,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",70,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",71,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",72,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",73,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",74,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",75,"./AbstractFilter",76,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",77,"currentBlendMode","blendFunc","./WebGLManager",78,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",79,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",80,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",81,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",82,83,"./Shader",84,85,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",86,"customUniforms","customAttributes","uSampler",87,88,"../managers/WebGLManager",89,"colors","rect2",90,"StencilMaskStack","frameBuffer","defaultFrame","destinationFrame","sourceFrame","stencilBuffer","calculateProjection","SCISSOR_TEST","scissor","viewport","pm","projectionFrame","./StencilMaskStack",91,92,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",93,94,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",95,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",96,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",97,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",98,"textureBuffer","tempRect","currentBounds","cachedWt","realResolution","getImage","image","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",99,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","getResolutionOfUrl",100,"baseRenderTexture","_updateUvs","updateBase","./BaseRenderTexture",101,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",102,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",103,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",104,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",105,"shared","./Ticker",106,"totalIndices",107,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",108,"__plugins","pluginName","ctor",109,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",110,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",111,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",112,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",113,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",114,"getChildByName",115,"getGlobalPosition",116,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",117,"AsciiFilter","pixelSize","../../core",118,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",119,"BlurDirFilter","dirX","dirY","strength","passes",120,"BlurFilter","./BlurXFilter","./BlurYFilter",121,"flip","flop",122,123,"SmartBlurFilter",124,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",125,"ColorStepFilter",126,"ConvolutionFilter","texelSize",127,"CrossHatchFilter",128,"DisplacementFilter","mapSampler",129,"DotScreenFilter",130,"BlurYTintFilter",131,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",132,"GrayFilter","gray",133,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",134,135,"noise",136,137,"red","green","blue",138,139,"center","params",140,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",141,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",142,"./TiltShiftAxisFilter",143,144,145,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",146,"InteractionData","originalEvent","getLocalPosition","globalPos",147,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",148,"interactiveTarget","./InteractionManager",149,150,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",151,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",152,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",153,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",154,155,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",156,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",157,"factor","nextPoint","perpLength","num","perpX","perpY",158,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",159,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",160,161,"isNaN",162,163,"./Math.sign","./Object.assign","./requestAnimationFrame",164,"Date","getTime","startTime","vendors","delay"],"mappings":"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AA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAw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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","gl-matrix","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","worldAlpha","alpha","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Transform","pivot","_rotation","localTransform","filterArea","_sr","_cr","dirtyTransform","_tempDisplayObjectParent","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","displayObjectUpdateTransform","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const","./TransformStatic",41,"ObservablePoint","_x","_y",42,"parentTransform","pt","lt","./ObservablePoint",43,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","Point","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",44,"_lineTint","_fillTint",45,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",46,"glPoints","glIndices","Uint16Array","deleteBuffer",47,48,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",49,50,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",51,"vertPos",52,"rectData",53,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",54,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","BaseRenderTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseRenderTexture","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",55,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",56,57,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",58,"dx","dy","r2","./Rectangle",59,"normx","normy",60,"points_","il","xi","yi","xj","yj","intersect","../Point",61,62,63,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",64,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",65,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",66,"TextureShader","../../renderers/webgl/shaders/TextureShader",67,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",68,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",69,70,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",71,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",72,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",73,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",74,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",75,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",76,"./AbstractFilter",77,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",78,"currentBlendMode","blendFunc","./WebGLManager",79,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",80,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",81,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",82,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",83,84,"./Shader",85,86,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",87,"customUniforms","customAttributes","uSampler",88,89,"../managers/WebGLManager",90,"colors","rect2",91,"StencilMaskStack","frameBuffer","defaultFrame","destinationFrame","sourceFrame","stencilBuffer","calculateProjection","SCISSOR_TEST","scissor","viewport","pm","projectionFrame","./StencilMaskStack",92,93,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",94,95,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",96,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",97,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",98,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",99,"textureBuffer","tempRect","currentBounds","cachedWt","realResolution","getImage","image","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",100,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","getResolutionOfUrl",101,"baseRenderTexture","_updateUvs","updateBase","./BaseRenderTexture",102,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",103,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",104,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",105,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",106,"shared","./Ticker",107,"totalIndices",108,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",109,"__plugins","pluginName","ctor",110,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",111,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",112,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",113,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",114,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",115,"getChildByName",116,"getGlobalPosition",117,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",118,"AsciiFilter","pixelSize","../../core",119,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",120,"BlurDirFilter","dirX","dirY","strength","passes",121,"BlurFilter","./BlurXFilter","./BlurYFilter",122,"flip","flop",123,124,"SmartBlurFilter",125,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",126,"ColorStepFilter",127,"ConvolutionFilter","texelSize",128,"CrossHatchFilter",129,"DisplacementFilter","mapSampler",130,"DotScreenFilter",131,"BlurYTintFilter",132,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",133,"GrayFilter","gray",134,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",135,136,"noise",137,138,"red","green","blue",139,140,"center","params",141,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",142,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",143,"./TiltShiftAxisFilter",144,145,146,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",147,"InteractionData","originalEvent","getLocalPosition","globalPos",148,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",149,"interactiveTarget","./InteractionManager",150,151,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",152,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",153,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",154,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",155,156,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",157,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",158,"factor","nextPoint","perpLength","num","perpX","perpY",159,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",160,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",161,162,"isNaN",163,164,"./Math.sign","./Object.assign","./requestAnimationFrame",165,"Date","getTime","startTime","vendors","delay"],"mappings":"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AA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 64e912a..9199f9d 100644 --- a/src/core/display/Container.js +++ b/src/core/display/Container.js @@ -399,7 +399,7 @@ this.children[i].updateTransform(); } - this.dirtyTransform = false; + this.transform.dirty = false; }; // performance increase to avoid using call.. (10x faster) diff --git a/src/core/display/DisplayObject.js b/src/core/display/DisplayObject.js index 06bd523..3cc5c2f 100644 --- a/src/core/display/DisplayObject.js +++ b/src/core/display/DisplayObject.js @@ -2,7 +2,7 @@ RenderTexture = require('../textures/RenderTexture'), EventEmitter = require('eventemitter3'), CONST = require('../const'), - Transform = require('./Transform'), + Transform = require('./TransformStatic'), _tempMatrix = new math.Matrix(), _tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1, children:[]}; @@ -114,22 +114,6 @@ */ this.filterArea = null; - /**xww - * cached sin rotation - * - * @member {number} - * @private - */ - this._sr = 0; - - /** - * cached cos rotation - * - * @member {number} - * @private - */ - this._cr = 1; - /** * The original, cached bounds of the object * @@ -154,7 +138,7 @@ */ this._mask = null; - this.dirtyTransform = true; + // this.dirtyTransform = true; } // constructor @@ -238,9 +222,9 @@ set: function (value) { this._rotation = value; - this.dirtyTransform = true; - this._sr = Math.sin(value); - this._cr = Math.cos(value); + this.transform.dirty = true; + this.transform._sr = Math.sin(value); + this.transform._cr = Math.cos(value); } }, @@ -344,6 +328,7 @@ */ DisplayObject.prototype.updateTransform = function () { + //if(this.transform.dirty || parent.transform.dirty) this.transform.updateTransform(this.parent.transform); // multiply the alphas.. this.worldAlpha = this.alpha * this.parent.worldAlpha; diff --git a/src/core/display/ObservablePoint.js b/src/core/display/ObservablePoint.js new file mode 100644 index 0000000..fd7a04b --- /dev/null +++ b/src/core/display/ObservablePoint.js @@ -0,0 +1,68 @@ +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents + * the horizontal axis and y represents the vertical axis. + * + * @class + * @memberof PIXI + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +function ObservablePoint(transform, x, y) +{ + this._x = x || 0; + this._y = y || 0; + + this.transform = transform; +} + +ObservablePoint.prototype.constructor = ObservablePoint; +module.exports = ObservablePoint; + + + +Object.defineProperties(ObservablePoint.prototype, { + /** + * The position of the displayObject on the x axis relative to the local coordinates of the parent. + * + * @member {number} + * @memberof PIXI.DisplayObject# + */ + x: { + get: function () + { + return this._x; + }, + set: function (value) + { + this._x = value; + this.transform.dirty = true; + } + }, + + y: { + get: function () + { + return this._y; + }, + set: function (value) + { + this._y = value; + this.transform.dirty = true; + } + } +}); + +/** + * Sets the point to a new x and y position. + * If y is omitted, both x and y will be set to x. + * + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +ObservablePoint.prototype.set = function (x, y) +{ + this._x = x || 0; + this._y = y || ( (y !== 0) ? this._x : 0 ); + + this.transform.dirty = true; +}; diff --git a/src/core/display/Transform.js b/src/core/display/Transform.js index eefc915..d57503d 100644 --- a/src/core/display/Transform.js +++ b/src/core/display/Transform.js @@ -36,34 +36,21 @@ var wt = this.worldTransform; var lt = this.localTransform; + // get the matrix values of the displayobject based on its transform properties.. + lt.a = this._cr * this.scale.x; + lt.b = this._sr * this.scale.x; + lt.c = -this._sr * this.scale.y; + lt.d = this._cr * this.scale.y; + lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c); + lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d); + // concat the parent matrix with the objects transform. + wt.a = lt.a * pt.a + lt.b * pt.c; + wt.b = lt.a * pt.b + lt.b * pt.d; + wt.c = lt.c * pt.a + lt.d * pt.c; + wt.d = lt.c * pt.b + lt.d * pt.d; + wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; + wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; - if(this.dirty) - { - // get the matrix values of the displayobject based on its transform properties.. - lt.a = this._cr * this.scale.x; - lt.b = this._sr * this.scale.x; - lt.c = -this._sr * this.scale.y; - lt.d = this._cr * this.scale.y; - lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c); - lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d); - } - - if(this.dirty || parent.dirty) - { - // concat the parent matrix with the objects transform. - wt.a = lt.a * pt.a + lt.b * pt.c; - wt.b = lt.a * pt.b + lt.b * pt.d; - wt.c = lt.c * pt.a + lt.d * pt.c; - wt.d = lt.c * pt.b + lt.d * pt.d; - wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; - wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; - - // this.dirty = false; - // return true; - } - -// this.dirty = false; - // return false; } module.exports = Transform; diff --git a/src/core/display/TransformSimple.js b/src/core/display/TransformSimple.js deleted file mode 100644 index e9793e2..0000000 --- a/src/core/display/TransformSimple.js +++ /dev/null @@ -1,63 +0,0 @@ -var math = require('../math'); - - -/** - * The Point object represents a location in a two-dimensional coordinate system, where x represents - * the horizontal axis and y represents the vertical axis. - * - * @class - * @memberof PIXI - * @param [x=0] {number} position of the point on the x axis - * @param [y=0] {number} position of the point on the y axis - */ -function Transform() -{ - this.worldTransform = new math.Matrix(); - this.localTransform = new math.Matrix(); - - this.position = new math.Point(0.0); - this.scale = new math.Point(1,1); - this.pivot = new math.Point(0.0); - this.skew = new math.Point(0.0); - - this.rotation = 0; - this._sr = Math.sin(0); - this._cr = Math.cos(0); - - - this.dirty = true; -} - -Transform.prototype.constructor = Transform; - -Transform.prototype.updateTransform = function (parentTransform) -{ - var pt = parentTransform.worldTransform; - var wt = this.worldTransform; - var lt = this.localTransform; - - - if(this.dirty) - { - // get the matrix values of the displayobject based on its transform properties.. - - lt.tx = this.position.x; - lt.ty = this.position.y; - } - - if(this.dirty || parent.dirty) - { - wt.tx = lt.tx; - wt.ty = lt.ty; - - // this.dirty = false; - // return true; - } - -// this.dirty = false; - // return false; -} - -module.exports = Transform; - - diff --git a/src/core/display/TransformStatic.js b/src/core/display/TransformStatic.js new file mode 100644 index 0000000..3e1aaa9 --- /dev/null +++ b/src/core/display/TransformStatic.js @@ -0,0 +1,69 @@ +var math = require('../math'); +var ObservablePoint = require('./ObservablePoint'); + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents + * the horizontal axis and y represents the vertical axis. + * + * @class + * @memberof PIXI + * @param [x=0] {number} position of the point on the x axis + * @param [y=0] {number} position of the point on the y axis + */ +function Transform() +{ + this.worldTransform = new math.Matrix(); + this.localTransform = new math.Matrix(); + + this.position = new ObservablePoint(this, 0); + this.scale = new ObservablePoint(this,1, 1); + this.pivot = new ObservablePoint(this, 0, 0); + this.skew = new ObservablePoint(this, 0,0); + + this.rotation = 0; + this._sr = Math.sin(0); + this._cr = Math.cos(0); + + this.dirty = true; + + + this.updated = true; +} + +Transform.prototype.constructor = Transform; + +Transform.prototype.updateTransform = function (parentTransform) +{ + var pt = parentTransform.worldTransform; + var wt = this.worldTransform; + var lt = this.localTransform; + + if(this.dirty) + { + // get the matrix values of the displayobject based on its transform properties.. + lt.a = this._cr * this.scale._x; + lt.b = this._sr * this.scale._x; + lt.c = -this._sr * this.scale._y; + lt.d = this._cr * this.scale._y; + lt.tx = this.position._x - (this.pivot._x * lt.a + this.pivot._y * lt.c); + lt.ty = this.position._y - (this.pivot._x * lt.b + this.pivot._y * lt.d); + } + + this.updated = this.dirty || parentTransform.dirty; + + if(this.updated) + { + // concat the parent matrix with the objects transform. + wt.a = lt.a * pt.a + lt.b * pt.c; + wt.b = lt.a * pt.b + lt.b * pt.d; + wt.c = lt.c * pt.a + lt.d * pt.c; + wt.d = lt.c * pt.b + lt.d * pt.d; + wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx; + wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty; + } + +} + +module.exports = Transform; + + diff --git a/src/core/display/Transform__.js b/src/core/display/Transform__.js deleted file mode 100644 index dbda183..0000000 --- a/src/core/display/Transform__.js +++ /dev/null @@ -1,73 +0,0 @@ -var math = require('../math'); -var mat2d = require('gl-matrix').mat2d - -/** - * The Point object represents a location in a two-dimensional coordinate system, where x represents - * the horizontal axis and y represents the vertical axis. - * - * @class - * @memberof PIXI - * @param [x=0] {number} position of the point on the x axis - * @param [y=0] {number} position of the point on the y axis - */ -function Transform() -{ - this.worldTransform = mat2d.create(); - this.localTransform = mat2d.create(); - - this.position = new math.Point(0.0); - this.scale = new math.Point(1,1); - this.pivot = new math.Point(0.0); - this.skew = new math.Point(0.0); - - this.rotation = 0; - this._sr = Math.sin(0); - this._cr = Math.cos(0); - - - this.dirty = true; -} - -Transform.prototype.constructor = Transform; - -Transform.prototype.updateTransform = function (parentTransform) -{ - var pt = parentTransform.worldTransform; - var wt = this.worldTransform; - var lt = this.localTransform; - - -// if(this.dirty) - { - // get the matrix values of the displayobject based on its transform properties.. - lt[0] = this._cr * this.scale.x; - lt[1] = this._sr * this.scale.x; - lt[2] = -this._sr * this.scale.y; - lt[3] = this._cr * this.scale.y; - lt[4] = this.position.x - (this.pivot.x * lt[0] + this.pivot.y * lt[2]); - lt[5] = this.position.y - (this.pivot.x * lt[1] + this.pivot.y * lt[3]); - } - - - //if(this.dirty || parent.dirty) - { - - // concat the parent matrix with the objects transform. - wt[0] = lt[0] * pt[0] + lt[1] * pt[2]; - wt[1] = lt[0] * pt[1] + lt[1] * pt[3]; - wt[2] = lt[2] * pt[0] + lt[3] * pt[2]; - wt[3] = lt[2] * pt[1] + lt[3] * pt[3]; - wt[4] = lt[4] * pt[0] + lt[5] * pt[2] + pt[4]; - wt[5] = lt[4] * pt[1] + lt[5] * pt[3]+ pt[5]; - - // this.dirty = false; - // return true; - } - - //this.dirty = false; -// return false; -} - -module.exports = Transform; - - diff --git a/src/core/sprites/Sprite.js b/src/core/sprites/Sprite.js index 9537472..fcf53cb 100644 --- a/src/core/sprites/Sprite.js +++ b/src/core/sprites/Sprite.js @@ -93,7 +93,6 @@ // call texture setter this.texture = texture || Texture.EMPTY; this.textureDirty = true - this.vertexDirty = true; this.vertexData = new Float32Array(8); } @@ -203,7 +202,6 @@ Sprite.prototype.caclulateVertices = function () { - var texture = this._texture, wt = this.transform.worldTransform, a = wt.a, b = wt.b, c = wt.c, d = wt.d, tx = wt.tx, ty = wt.ty, @@ -258,22 +256,11 @@ */ Sprite.prototype._renderWebGL = function (renderer) { - if(this.textureDirty) + if(this.transform.updated || this.textureDirty) { this.textureDirty = false; - - this._onTextureUpdate(); - - this.vertexDirty = true; - } - - if(this.vertexDirty) - { - this.vertexDirty = false; - // set the vertex data this.caclulateVertices(); - } renderer.setObjectRenderer(renderer.plugins.sprite);